Files
optimclaw/tools-src/google-drive/google-drive-tool.capabilities.json
T
04c5c3fe9f feat: WASM extension versioning with WIT compat checks (#592)
* feat: add WASM extension versioning with WIT compat checks and CI enforcement

Phase 1 — WIT Versioning & Compatibility Checks:
- Version WIT packages as `package near:[email protected];`
- Add `semver` crate for version parsing and comparison
- Add `WIT_TOOL_VERSION` / `WIT_CHANNEL_VERSION` host constants
- Add `version` and `wit_version` fields to capabilities schemas
- Add `wit_version` column to `wasm_tools` DB table (both backends)
- Add load-time `check_wit_version_compat()` with semver rules
- Add `IncompatibleWitVersion` error variants for tools and channels
- Enhance instantiation errors with WIT version mismatch hints
- Update all 14 capabilities JSON and 14 registry JSON files

Phase 2 — Upgrade-in-Place & Channel DB Storage:
- Change tool store to DELETE-before-INSERT (one version per extension)
- Create `wasm_channels` table (PostgreSQL migration + libSQL schema)
- Add `WasmChannelStore` trait with PostgreSQL and libSQL backends
- Add `extension_info` tool showing version, WIT version, and status
- Wire `ExtensionInfoTool` into tool registry (7 extension tools)

Phase 3 — CI Version-Bump Enforcement:
- Add `scripts/check-version-bumps.sh` checking WIT/tool/channel versions
- Add `version-check` CI job (PR-only) to `.github/workflows/test.yml`
- Support `[skip-version-check]` label/commit message bypass

Includes 7 regression tests for WIT version compatibility checking
and 2 integration tests for WIT version annotation verification.

[skip-regression-check]

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* fix: address PR review feedback for WASM extension versioning

- Wrap PostgreSQL DELETE+INSERT in transactions for both tool and channel
  store() methods to prevent data loss on partial failure (Gemini, Copilot)
- Rename StoredWasmChannelWithBinary.tool → .channel (copy-paste fix)
- Remove unused WasmError::IncompatibleWitVersion variant (dead code)
- Map channel loader WIT mismatch to IncompatibleWitVersion instead of
  generic Config error, simplify variant to single String message
- Fix extension_info description to match actual returned fields
- Add schema test for ExtensionInfoTool matching existing test pattern
- Fix CI script to fail fast on git errors instead of silent bypass

[skip-regression-check]

Co-Authored-By: Claude Opus 4.6 <[email protected]>

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
2026-03-06 04:38:07 +00:00

65 lines
1.6 KiB
JSON

{
"version": "0.1.0",
"wit_version": "0.2.0",
"http": {
"allowlist": [
{
"host": "www.googleapis.com",
"path_prefix": "/drive/v3/",
"methods": ["GET", "POST", "PATCH", "DELETE"]
},
{
"host": "www.googleapis.com",
"path_prefix": "/upload/drive/v3/",
"methods": ["POST", "PUT"]
}
],
"credentials": {
"google_oauth_token": {
"secret_name": "google_oauth_token",
"location": { "type": "bearer" },
"host_patterns": ["www.googleapis.com"]
}
},
"rate_limit": {
"requests_per_minute": 60,
"requests_per_hour": 500
},
"timeout_secs": 60
},
"secrets": {
"allowed_names": ["google_oauth_token"]
},
"auth": {
"secret_name": "google_oauth_token",
"display_name": "Google",
"oauth": {
"authorization_url": "https://accounts.google.com/o/oauth2/v2/auth",
"token_url": "https://oauth2.googleapis.com/token",
"client_id_env": "GOOGLE_OAUTH_CLIENT_ID",
"client_secret_env": "GOOGLE_OAUTH_CLIENT_SECRET",
"scopes": [
"https://www.googleapis.com/auth/drive"
],
"use_pkce": false,
"extra_params": {
"access_type": "offline",
"prompt": "consent"
}
},
"env_var": "GOOGLE_OAUTH_TOKEN"
},
"setup": {
"required_secrets": [
{
"name": "google_oauth_client_id",
"prompt": "Google OAuth Client ID (from console.cloud.google.com/apis/credentials)"
},
{
"name": "google_oauth_client_secret",
"prompt": "Google OAuth Client Secret"
}
]
}
}