mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-09-01 09:09:19 +00:00
* 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]>
60 lines
1.7 KiB
JSON
60 lines
1.7 KiB
JSON
{
|
|
"version": "0.1.0",
|
|
"wit_version": "0.2.0",
|
|
"type": "channel",
|
|
"name": "whatsapp",
|
|
"description": "WhatsApp Cloud API channel for receiving and responding to WhatsApp messages",
|
|
"setup": {
|
|
"required_secrets": [
|
|
{
|
|
"name": "whatsapp_access_token",
|
|
"prompt": "Enter your WhatsApp Cloud API permanent access token (from the Meta Developer Portal under your app's WhatsApp > API Setup).",
|
|
"validation": "^[A-Za-z0-9_-]+$"
|
|
},
|
|
{
|
|
"name": "whatsapp_verify_token",
|
|
"prompt": "Webhook verify token (leave empty to auto-generate)",
|
|
"optional": true,
|
|
"auto_generate": { "length": 32 }
|
|
}
|
|
],
|
|
"validation_endpoint": "https://graph.facebook.com/v18.0/me?access_token={whatsapp_access_token}",
|
|
"setup_url": "https://developers.facebook.com/apps"
|
|
},
|
|
"capabilities": {
|
|
"http": {
|
|
"allowlist": [
|
|
{ "host": "graph.facebook.com", "path_prefix": "/" }
|
|
],
|
|
"rate_limit": {
|
|
"requests_per_minute": 80,
|
|
"requests_per_hour": 1000
|
|
}
|
|
},
|
|
"secrets": {
|
|
"allowed_names": ["whatsapp_*"]
|
|
},
|
|
"channel": {
|
|
"allowed_paths": ["/webhook/whatsapp"],
|
|
"allow_polling": false,
|
|
"workspace_prefix": "channels/whatsapp/",
|
|
"emit_rate_limit": {
|
|
"messages_per_minute": 100,
|
|
"messages_per_hour": 5000
|
|
},
|
|
"webhook": {
|
|
"secret_header": "X-Hub-Signature-256",
|
|
"secret_name": "whatsapp_verify_token",
|
|
"verify_token_param": "hub.verify_token"
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"api_version": "v18.0",
|
|
"reply_to_message": true,
|
|
"owner_id": null,
|
|
"dm_policy": "pairing",
|
|
"allow_from": []
|
|
}
|
|
}
|