@zackbart/connecta 0.34.1 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +363 -0
- package/README.md +62 -106
- package/SECURITY.md +3 -2
- package/bin/connecta.mjs +41 -16
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.d.ts +2 -1
- package/dist/access-tokens.js +66 -30
- package/dist/activity.d.ts +1 -1
- package/dist/activity.js +2 -0
- package/dist/agent-config.d.ts +23 -0
- package/dist/agent-config.js +59 -0
- package/dist/agent-description.js +16 -0
- package/dist/agent-identity.js +4 -4
- package/dist/agent-observation.js +39 -0
- package/dist/auth/clerk-sdk/client.d.ts +2 -0
- package/dist/auth/clerk-sdk/generated.js +554 -563
- package/dist/auth/clerk-transport.js +70 -3
- package/dist/auth/clerk.d.ts +13 -0
- package/dist/auth/clerk.js +653 -246
- package/dist/auth/cloudflare-access.js +46 -42
- package/dist/auth/downstream-client-metadata.js +2 -2
- package/dist/auth/downstream-oauth.js +2051 -1160
- package/dist/auth/downstream-revocation.js +88 -88
- package/dist/auth/native-call.js +20 -0
- package/dist/auth/native.js +184 -0
- package/dist/auth/oauth-start-reset.js +11 -5
- package/dist/auth/oauth-token-response.js +121 -102
- package/dist/auth/oauth-v2-migration.js +97 -78
- package/dist/auth/renewable-grant.js +10 -0
- package/dist/auth/static-oauth.js +663 -271
- package/dist/auth/vercel-agent.js +266 -0
- package/dist/auth-admission.js +204 -0
- package/dist/auth-elicitation.js +350 -241
- package/dist/authorization-handoff.js +164 -90
- package/dist/call-admission-context.js +3 -10
- package/dist/call-admission.js +2 -0
- package/dist/call-classification.js +9 -0
- package/dist/call-recovery.js +32 -13
- package/dist/canonical-json.js +8 -0
- package/dist/catalog-cache.js +369 -213
- package/dist/catalog-service.js +659 -530
- package/dist/catalog.js +5 -1
- package/dist/concurrency.js +0 -25
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +3 -1
- package/dist/config-schema.js +13 -3
- package/dist/config.d.ts +40 -6
- package/dist/config.js +40 -26
- package/dist/connector-caller.d.ts +4 -0
- package/dist/connector-caller.js +17 -4
- package/dist/connectors/api-connector.d.ts +12 -7
- package/dist/connectors/api-connector.js +142 -56
- package/dist/connectors/guarded-fetch.d.ts +51 -17
- package/dist/connectors/guarded-fetch.js +215 -121
- package/dist/connectors/negotiation-cache.js +20 -10
- package/dist/connectors/remote-mcp.d.ts +10 -30
- package/dist/connectors/remote-mcp.js +955 -563
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +3 -1
- package/dist/describe-config.js +2 -0
- package/dist/downstream-input.js +347 -260
- package/dist/errors.d.ts +87 -6
- package/dist/errors.js +114 -4
- package/dist/execute.js +87 -50
- package/dist/executor-admission.js +3 -0
- package/dist/executors/quickjs.js +163 -112
- package/dist/guarded-transport.js +50 -0
- package/dist/guest-runtime.js +1 -1
- package/dist/http/client.js +439 -0
- package/dist/http/errors.js +558 -0
- package/dist/http/fields.js +49 -0
- package/dist/http/hatch-paging.js +318 -0
- package/dist/http/hatch.js +1279 -0
- package/dist/http/json-schema.js +267 -0
- package/dist/http/node-transport.js +241 -0
- package/dist/http/oauth.js +162 -0
- package/dist/http/paging.js +228 -0
- package/dist/http/provider.js +221 -0
- package/dist/http/safety.js +82 -0
- package/dist/http/services.js +79 -0
- package/dist/http/tools.js +383 -0
- package/dist/http/vendor-index.js +138 -0
- package/dist/http/vendor.js +448 -0
- package/dist/http/write-request.js +66 -0
- package/dist/http-policy.d.ts +11 -0
- package/dist/http-policy.js +45 -0
- package/dist/inbound-credential.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -0
- package/dist/invocation-auth.js +30 -19
- package/dist/invocation.js +218 -85
- package/dist/mcp-result.js +0 -4
- package/dist/membership.d.ts +4 -0
- package/dist/meta-output.js +1 -1
- package/dist/meta-tools.js +531 -406
- package/dist/native-recovery.js +52 -0
- package/dist/native-tools.js +382 -0
- package/dist/node.d.ts +4 -3
- package/dist/node.js +45 -8
- package/dist/oauth-handoff.js +177 -104
- package/dist/oauth-partition.js +6 -20
- package/dist/oauth-sealing.js +6 -7
- package/dist/operation-vocabulary.js +101 -0
- package/dist/operator-record.d.ts +2 -2
- package/dist/operator-record.js +17 -4
- package/dist/operator-ui/agents.d.ts +5 -4
- package/dist/operator-ui/agents.js +17 -7
- package/dist/operator-ui/config-summary.js +5 -4
- package/dist/operator-ui/connection-map.js +7 -5
- package/dist/operator-ui/contract.d.ts +7 -3
- package/dist/operator-ui/endpoints.js +4 -13
- package/dist/operator-ui/fix-prompts.d.ts +1 -1
- package/dist/operator-ui/fix-prompts.js +0 -8
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/model.d.ts +2 -3
- package/dist/operator-ui/overview.js +5 -2
- package/dist/operator-ui/setup-commands.js +0 -4
- package/dist/operator-ui/view.d.ts +2 -25
- package/dist/operator-ui/view.js +2 -76
- package/dist/program-writes.js +47 -26
- package/dist/provider-call-facts.d.ts +115 -0
- package/dist/provider-call-facts.js +182 -0
- package/dist/provider-call.d.ts +112 -0
- package/dist/provider-call.js +271 -0
- package/dist/provider.d.ts +65 -31
- package/dist/provider.js +116 -39
- package/dist/providers/_shared/google/hatch.js +91 -0
- package/dist/providers/_shared/google/kit.js +537 -0
- package/dist/providers/_shared/google/result-size.js +15 -2
- package/dist/providers/_shared/google/service-account.d.ts +2 -1
- package/dist/providers/_shared/google/service-account.js +8 -4
- package/dist/providers/_shared/google/workspace.d.ts +6 -210
- package/dist/providers/_shared/google/workspace.js +6 -425
- package/dist/providers/_shared/rest/compact-index.js +86 -0
- package/dist/providers/_shared/rest/dispatch.js +3 -23
- package/dist/providers/_shared/rest/kit.js +546 -0
- package/dist/providers/_shared/rest/operation-index.js +230 -14
- package/dist/providers/_shared/rest/response-media.js +11 -0
- package/dist/providers/_shared/rest/tools.js +101 -78
- package/dist/providers/_shared/rest/value-safety.js +353 -195
- package/dist/providers/_shared/sensitive-fields.js +27 -0
- package/dist/providers/breeze/api.js +584 -0
- package/dist/providers/breeze/index.d.ts +1 -3
- package/dist/providers/breeze/index.js +67 -1420
- package/dist/providers/breeze/openapi.generated.js +60 -0
- package/dist/providers/breeze/skill.generated.js +2 -6
- package/dist/providers/breeze/tools.js +696 -0
- package/dist/providers/ccb/api.js +496 -0
- package/dist/providers/ccb/index.d.ts +15 -37
- package/dist/providers/ccb/index.js +77 -1702
- package/dist/providers/ccb/lib/constants.d.ts +34 -0
- package/dist/providers/ccb/lib/constants.js +74 -0
- package/dist/providers/ccb/lib/guide.js +9 -0
- package/dist/providers/ccb/lib/verdicts.js +387 -0
- package/dist/providers/ccb/openapi.generated.js +397 -0
- package/dist/providers/ccb/safety.js +295 -0
- package/dist/providers/ccb/skill.generated.js +2 -6
- package/dist/providers/ccb/tools.js +853 -0
- package/dist/providers/cloudflare/api.js +1066 -0
- package/dist/providers/cloudflare/index.d.ts +5 -22
- package/dist/providers/cloudflare/index.js +79 -197
- package/dist/providers/cloudflare/lib/config.d.ts +16 -0
- package/dist/providers/cloudflare/lib/config.js +2 -0
- package/dist/providers/cloudflare/lib/discovery.js +29 -0
- package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
- package/dist/providers/cloudflare/lib/hatch.js +103 -0
- package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
- package/dist/providers/cloudflare/lib/response-media.js +75 -0
- package/dist/providers/cloudflare/openapi.generated.js +4 -3
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
- package/dist/providers/cloudflare/skill.generated.js +2 -10
- package/dist/providers/cloudflare/tools.js +360 -0
- package/dist/providers/docs/api.js +51 -0
- package/dist/providers/docs/index.d.ts +1 -12
- package/dist/providers/docs/index.js +53 -1165
- package/dist/providers/docs/lib/constants.d.ts +18 -0
- package/dist/providers/docs/lib/constants.js +18 -0
- package/dist/providers/docs/lib/discovery.js +26 -0
- package/dist/providers/docs/lib/requests.js +48 -0
- package/dist/providers/docs/lib/schemas.js +168 -0
- package/dist/providers/docs/openapi.generated.js +16 -0
- package/dist/providers/docs/safety.js +54 -0
- package/dist/providers/docs/skill.generated.js +2 -6
- package/dist/providers/docs/tools.js +802 -0
- package/dist/providers/drive/api.js +177 -0
- package/dist/providers/drive/index.d.ts +1 -12
- package/dist/providers/drive/index.js +38 -1448
- package/dist/providers/drive/lib/constants.d.ts +6 -0
- package/dist/providers/drive/lib/constants.js +6 -0
- package/dist/providers/drive/lib/contracts.js +532 -0
- package/dist/providers/drive/lib/hatch.js +197 -0
- package/dist/providers/drive/openapi.generated.js +77 -0
- package/dist/providers/drive/safety.js +90 -0
- package/dist/providers/drive/skill.generated.js +2 -6
- package/dist/providers/drive/tools.js +1290 -0
- package/dist/providers/forms/api.js +71 -0
- package/dist/providers/forms/index.d.ts +1 -12
- package/dist/providers/forms/index.js +49 -1145
- package/dist/providers/forms/lib/constants.d.ts +14 -0
- package/dist/providers/forms/lib/constants.js +19 -0
- package/dist/providers/forms/lib/hatch.js +72 -0
- package/dist/providers/forms/openapi.generated.js +23 -0
- package/dist/providers/forms/safety.js +34 -0
- package/dist/providers/forms/skill.generated.js +2 -8
- package/dist/providers/forms/tools.js +1024 -0
- package/dist/providers/github/api.js +150 -0
- package/dist/providers/github/index.d.ts +4 -5
- package/dist/providers/github/index.js +30 -87
- package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
- package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
- package/dist/providers/github/lib/discovery.js +132 -0
- package/dist/providers/github/lib/operations.js +58 -0
- package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
- package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
- package/dist/providers/github/openapi.generated.js +1216 -0
- package/dist/providers/github/safety.js +216 -0
- package/dist/providers/github/skill.generated.js +2 -5
- package/dist/providers/github/tools.js +506 -0
- package/dist/providers/gmail/api.js +114 -0
- package/dist/providers/gmail/index.d.ts +1 -12
- package/dist/providers/gmail/index.js +73 -1621
- package/dist/providers/gmail/lib/constants.d.ts +13 -0
- package/dist/providers/gmail/lib/constants.js +16 -0
- package/dist/providers/gmail/lib/index.js +173 -0
- package/dist/providers/gmail/lib/schemas.js +176 -0
- package/dist/providers/gmail/lib/threading.js +120 -0
- package/dist/providers/gmail/openapi.generated.js +92 -0
- package/dist/providers/gmail/safety.js +21 -0
- package/dist/providers/gmail/skill.generated.js +2 -6
- package/dist/providers/gmail/tools.js +1435 -0
- package/dist/providers/overflow/api.js +1008 -0
- package/dist/providers/overflow/index.d.ts +1 -17
- package/dist/providers/overflow/index.js +60 -1488
- package/dist/providers/overflow/skill.generated.js +2 -5
- package/dist/providers/overflow/tools.js +873 -0
- package/dist/providers/planning-center/api.js +467 -0
- package/dist/providers/planning-center/index.d.ts +4 -35
- package/dist/providers/planning-center/index.js +69 -2445
- package/dist/providers/planning-center/lib/constants.d.ts +58 -0
- package/dist/providers/planning-center/lib/constants.js +83 -0
- package/dist/providers/planning-center/lib/discovery.js +40 -0
- package/dist/providers/planning-center/lib/guide.js +39 -0
- package/dist/providers/planning-center/lib/json-api.js +83 -0
- package/dist/providers/planning-center/lib/verdicts.js +1758 -0
- package/dist/providers/planning-center/openapi.generated.js +1764 -0
- package/dist/providers/planning-center/safety.js +188 -0
- package/dist/providers/planning-center/skill.generated.js +2 -27
- package/dist/providers/planning-center/tools.js +1010 -0
- package/dist/providers/sheets/api.js +133 -0
- package/dist/providers/sheets/index.d.ts +4 -16
- package/dist/providers/sheets/index.js +61 -1172
- package/dist/providers/sheets/lib/constants.d.ts +14 -0
- package/dist/providers/sheets/lib/constants.js +14 -0
- package/dist/providers/sheets/lib/hatch.js +163 -0
- package/dist/providers/sheets/lib/requests.js +105 -0
- package/dist/providers/sheets/lib/schemas.js +138 -0
- package/dist/providers/sheets/openapi.generated.js +30 -0
- package/dist/providers/sheets/safety.js +27 -0
- package/dist/providers/sheets/skill.generated.js +2 -7
- package/dist/providers/sheets/tools.js +734 -0
- package/dist/providers/slides/api.js +147 -0
- package/dist/providers/slides/index.d.ts +2 -10
- package/dist/providers/slides/index.js +48 -2555
- package/dist/providers/slides/lib/constants.d.ts +11 -0
- package/dist/providers/slides/lib/constants.js +11 -0
- package/dist/providers/slides/lib/requests.js +60 -0
- package/dist/providers/slides/lib/schemas.js +565 -0
- package/dist/providers/slides/openapi.generated.js +18 -0
- package/dist/providers/slides/skill.generated.js +2 -6
- package/dist/providers/slides/tools.js +1968 -0
- package/dist/providers/stripe/api.js +401 -0
- package/dist/providers/stripe/index.d.ts +5 -27
- package/dist/providers/stripe/index.js +74 -210
- package/dist/providers/stripe/lib/config.d.ts +4 -0
- package/dist/providers/stripe/lib/config.js +2 -0
- package/dist/providers/stripe/openapi.generated.js +4 -3
- package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
- package/dist/providers/stripe/skill.generated.js +2 -11
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +17 -0
- package/dist/providers/tithely/index.js +86 -965
- package/dist/providers/tithely/skill.generated.js +2 -5
- package/dist/providers/tithely/tools.js +426 -0
- package/dist/providers/vercel/api.js +551 -0
- package/dist/providers/vercel/index.d.ts +9 -25
- package/dist/providers/vercel/index.js +66 -260
- package/dist/providers/vercel/lib/config.d.ts +2 -0
- package/dist/providers/vercel/lib/config.js +2 -0
- package/dist/providers/vercel/lib/index.js +117 -0
- package/dist/providers/vercel/lib/logs.js +100 -0
- package/dist/providers/vercel/lib/pin.js +270 -0
- package/dist/providers/vercel/openapi.generated.js +10 -5
- package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
- package/dist/providers/vercel/skill.generated.js +2 -7
- package/dist/providers/vercel/tools.js +642 -0
- package/dist/redaction-identity.js +47 -0
- package/dist/redaction-marker.js +125 -0
- package/dist/registry.d.ts +21 -15
- package/dist/registry.js +409 -376
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/actor-labels.js +1 -1
- package/dist/routes/connect.js +1 -1
- package/dist/routes/dispatch.js +103 -0
- package/dist/routes/mcp.js +170 -79
- package/dist/routes/oauth.js +3 -1
- package/dist/routes/operator.js +2 -2
- package/dist/routes/shared.d.ts +5 -4
- package/dist/routes/shared.js +244 -177
- package/dist/routes/skills.js +10 -8
- package/dist/routes/ui-config.js +27 -3
- package/dist/routes/ui-data.js +21 -20
- package/dist/routes/ui.js +1 -1
- package/dist/runtime/call-admission.js +0 -26
- package/dist/runtime/call-entry.js +30 -0
- package/dist/runtime/call.js +556 -0
- package/dist/runtime/connector-scope.js +7 -0
- package/dist/runtime/credential-probe.js +34 -0
- package/dist/runtime/executor.js +40 -0
- package/dist/runtime/native-storage.js +63 -0
- package/dist/runtime/registry.js +27 -0
- package/dist/runtime/request-scope.js +72 -0
- package/dist/runtime/run.js +15 -7
- package/dist/runtime/shared-read.js +34 -5
- package/dist/runtime/storage.js +34 -21
- package/dist/sent-secrets.d.ts +194 -37
- package/dist/sent-secrets.js +1743 -340
- package/dist/server.js +5 -56
- package/dist/skills.js +322 -222
- package/dist/sqlite.js +15 -14
- package/dist/storage/d1-copy.js +255 -0
- package/dist/storage/d1-driver.js +15 -0
- package/dist/storage/keys.js +28 -0
- package/dist/storage/sql-driver.js +88 -0
- package/dist/storage/sql-native.js +544 -0
- package/dist/storage/sql-schema.d.ts +6 -0
- package/dist/storage/sql-schema.js +15 -0
- package/dist/storage/sql.d.ts +14 -20
- package/dist/storage/sql.js +29 -535
- package/dist/timeout.js +0 -26
- package/dist/tool-safety.js +20 -10
- package/dist/types.d.ts +7 -109
- package/dist/upward.js +3 -0
- package/dist/usage-guide.js +3 -1
- package/dist/validate.d.ts +4 -2
- package/dist/validate.js +86 -9
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +312 -292
- package/dist/workspace-subject.js +5 -1
- package/dist/write-outcome.js +454 -34
- package/documentation/README.md +27 -7
- package/documentation/architecture.md +2547 -226
- package/documentation/auth.md +821 -98
- package/documentation/code-mode.md +49 -16
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +129 -144
- package/documentation/meta-tools.md +409 -32
- package/documentation/operating.md +27 -3
- package/documentation/operator-tests.md +3 -0
- package/documentation/operator-ui.md +68 -45
- package/documentation/provider-auth-migration.md +16 -63
- package/documentation/provider-migration-0.29.md +10 -5
- package/documentation/provider-migration-0.35.md +975 -0
- package/documentation/providers.md +965 -0
- package/examples/worker/AGENTS.md +23 -9
- package/examples/worker/README.md +254 -135
- package/examples/worker/alchemy.run.ts +116 -0
- package/examples/worker/gitignore +10 -0
- package/examples/worker/src/connecta.config.ts +23 -21
- package/examples/worker/wrangler.jsonc +14 -5
- package/guides/connecting-agents.md +157 -0
- package/guides/how-it-works.md +156 -0
- package/guides/safety-and-trust.md +153 -0
- package/package.json +27 -46
- package/templates/node/.env.example +3 -0
- package/templates/node/README.md +22 -2
- package/templates/node/docker-compose.yml +1 -0
- package/templates/node/package.json +3 -2
- package/templates/node/src/connecta.config.ts +8 -0
- package/dist/catalog-drift.d.ts +0 -138
- package/dist/catalog-drift.js +0 -578
- package/dist/providers/_shared/request-token.js +0 -83
- package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
- package/dist/providers/_shared/rest/tools.d.ts +0 -141
- package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
- package/dist/providers/basecamp/index.d.ts +0 -45
- package/dist/providers/basecamp/index.js +0 -997
- package/dist/providers/basecamp/skill.generated.js +0 -9
- package/dist/providers/cloudflare/rest.d.ts +0 -37
- package/dist/providers/cloudflare/rest.js +0 -1097
- package/dist/providers/github/hosted.js +0 -218
- package/dist/providers/github/rest.js +0 -321
- package/dist/providers/infisical/index.d.ts +0 -7
- package/dist/providers/infisical/index.js +0 -713
- package/dist/providers/infisical/skill.generated.js +0 -8
- package/dist/providers/intercom/index.d.ts +0 -24
- package/dist/providers/intercom/index.js +0 -121
- package/dist/providers/intercom/skill.generated.js +0 -8
- package/dist/providers/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -537
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -59
- package/dist/providers/mixpanel/index.js +0 -472
- package/dist/providers/mixpanel/operations.js +0 -20
- package/dist/providers/mixpanel/rest.js +0 -603
- package/dist/providers/mixpanel/skill.generated.js +0 -10
- package/dist/providers/mixpanel/value-safety.js +0 -16
- package/dist/providers/notion/index.d.ts +0 -67
- package/dist/providers/notion/index.js +0 -368
- package/dist/providers/notion/openapi.generated.js +0 -75
- package/dist/providers/notion/rest.d.ts +0 -24
- package/dist/providers/notion/rest.js +0 -1226
- package/dist/providers/notion/skill.generated.js +0 -11
- package/dist/providers/notion/value-safety.js +0 -56
- package/dist/providers/revenuecat/index.d.ts +0 -51
- package/dist/providers/revenuecat/index.js +0 -697
- package/dist/providers/revenuecat/skill.generated.js +0 -11
- package/dist/providers/stripe/rest.d.ts +0 -14
- package/dist/providers/stripe/rest.js +0 -402
- package/dist/providers/vercel/rest.d.ts +0 -20
- package/dist/providers/vercel/rest.js +0 -1020
- package/dist/providers/wispr-flow/index.d.ts +0 -14
- package/dist/providers/wispr-flow/index.js +0 -117
- package/dist/providers/wispr-flow/skill.generated.js +0 -8
- /package/dist/providers/github/{key.js → lib/key.js} +0 -0
package/dist/types.d.ts
CHANGED
|
@@ -93,8 +93,8 @@ export interface ToolDef {
|
|
|
93
93
|
outputSchema?: JsonSchema;
|
|
94
94
|
/**
|
|
95
95
|
* Standard MCP tool behavior hints plus provider-specific extensions.
|
|
96
|
-
* The registry classifies
|
|
97
|
-
*
|
|
96
|
+
* The registry classifies tools using deployment overrides and annotations.
|
|
97
|
+
* Only a stored read verdict may use call_tool; program writes
|
|
98
98
|
* require a writable endpoint. Approval belongs to the host.
|
|
99
99
|
*/
|
|
100
100
|
annotations?: ToolAnnotations;
|
|
@@ -238,79 +238,6 @@ export interface ConnectorContext {
|
|
|
238
238
|
timeoutMs?: number;
|
|
239
239
|
}
|
|
240
240
|
type ConnectorStatusState = "ok" | "auth_required" | "credential_required" | "error";
|
|
241
|
-
/**
|
|
242
|
-
* What a reviewed downstream tool does. `"read"` is observational. `"write"`
|
|
243
|
-
* changes state without destroying any that already exists, such as a create.
|
|
244
|
-
* `"destructive"` modifies or removes existing state, including an upsert that
|
|
245
|
-
* can overwrite. Both writes leave the read-only path; `"destructive"` also
|
|
246
|
-
* asserts `destructiveHint`, which shapes the approval copy a human reads.
|
|
247
|
-
*/
|
|
248
|
-
export type ToolVerdict = "read" | "write" | "destructive";
|
|
249
|
-
/** One reviewed tool, with the evidence that justifies its verdict. */
|
|
250
|
-
export interface ReviewedTool {
|
|
251
|
-
readonly verdict: ToolVerdict;
|
|
252
|
-
/** Why the verdict holds when the name or downstream annotations do not say. */
|
|
253
|
-
readonly reason?: string;
|
|
254
|
-
/**
|
|
255
|
-
* `sha256-sets-v1:<hex>` digest of the reviewed input/output schemas.
|
|
256
|
-
* Legacy `sha256:<hex>` pins retain literal array ordering.
|
|
257
|
-
* Omit until a review has actually read them; an invented digest reports
|
|
258
|
-
* drift that never happened. When the live schema no longer matches it, or
|
|
259
|
-
* it cannot be checked, the verdict lapses and the tool is served as a write.
|
|
260
|
-
*/
|
|
261
|
-
readonly schemaDigest?: string;
|
|
262
|
-
/** Absence is expected under plan, feature, or permission gating. */
|
|
263
|
-
readonly optional?: boolean;
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* A reviewed classification of a downstream MCP catalog, keyed by exact tool
|
|
267
|
-
* name. Plain data, validated at construction, so the same record classifies
|
|
268
|
-
* live tools and feeds the drift check. A connector carries it as
|
|
269
|
-
* `Connector.classification`, and the registry applies it on every read.
|
|
270
|
-
*
|
|
271
|
-
* It fails closed. A name it does not list keeps only an explicit downstream
|
|
272
|
-
* read annotation; silence and contradiction classify as writes. A listed read
|
|
273
|
-
* fills downstream silence but never overrules an explicit write annotation.
|
|
274
|
-
* A listed write or destructive tool stays a write whatever the downstream
|
|
275
|
-
* claims. A listed tool whose `schemaDigest` no longer matches is a write.
|
|
276
|
-
*/
|
|
277
|
-
export interface ToolClassification {
|
|
278
|
-
/** Hide every name absent from tools, including tools claiming to be reads. */
|
|
279
|
-
readonly unlisted?: "hide";
|
|
280
|
-
readonly tools: Readonly<Record<string, ToolVerdict | ReviewedTool>>;
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* How far a downstream catalog has moved away from the manifest a release
|
|
284
|
-
* reviewed. Counts and nothing else: names, schemas, and prose stay out
|
|
285
|
-
* of every surface this rides on, so a drift report can never become a payload
|
|
286
|
-
* ([#343](https://github.com/zackbart/connecta/issues/343)).
|
|
287
|
-
*/
|
|
288
|
-
export interface CatalogDriftCounts {
|
|
289
|
-
/** Downstream tools dropped because their names contain C0, DEL, or C1. */
|
|
290
|
-
droppedTools?: number;
|
|
291
|
-
/** Live tools no release classified. Each one fails closed at call time. */
|
|
292
|
-
unclassifiedTools: number;
|
|
293
|
-
/** Required reviewed names this catalog no longer serves. */
|
|
294
|
-
unservedTools: number;
|
|
295
|
-
/** Explicit downstream annotations that contradict a vetted verdict. */
|
|
296
|
-
annotationConflicts: number;
|
|
297
|
-
/** Tools whose reviewed schema digest no longer matches what arrived. */
|
|
298
|
-
schemaChanges: number;
|
|
299
|
-
}
|
|
300
|
-
/** One drift observation, taken while serving a catalog refresh. */
|
|
301
|
-
export interface CatalogDriftReport extends CatalogDriftCounts {
|
|
302
|
-
/** False when this listing has no reviewed classification to compare. */
|
|
303
|
-
reviewedBaseline?: boolean;
|
|
304
|
-
/** Whether all pinned schemas could be checked on this observation. */
|
|
305
|
-
verification?: "complete" | "unavailable";
|
|
306
|
-
/** Live reviewed tools with and without recorded schema digests. */
|
|
307
|
-
schemaCoverage?: {
|
|
308
|
-
pinned: number;
|
|
309
|
-
unpinned: number;
|
|
310
|
-
};
|
|
311
|
-
/** When the observation was taken; never when a probe was scheduled. */
|
|
312
|
-
observedAt: string;
|
|
313
|
-
}
|
|
314
241
|
/** The last agent-facing catalog read this runtime served for one connector. */
|
|
315
242
|
export interface CatalogAccessObservation {
|
|
316
243
|
/** Fresh means the read used a live or unexpired catalog; stale means SWR. */
|
|
@@ -346,7 +273,6 @@ export interface ConnectorStatus {
|
|
|
346
273
|
* observation is not persisted the way the catalog is, so absence means this
|
|
347
274
|
* isolate or process has seen nothing, not that nothing drifted.
|
|
348
275
|
*/
|
|
349
|
-
catalogDrift?: CatalogDriftReport;
|
|
350
276
|
/**
|
|
351
277
|
* The last agent-facing catalog read in this runtime. This payload-free
|
|
352
278
|
* observation is not persisted and operator reads do not replace it.
|
|
@@ -439,35 +365,6 @@ export interface Connector {
|
|
|
439
365
|
* fetched lazily over the network and are not known at construction time.
|
|
440
366
|
*/
|
|
441
367
|
staticTools?: ToolDef[];
|
|
442
|
-
/**
|
|
443
|
-
* Optional reviewed classification of the tools `listTools` returns: data
|
|
444
|
-
* the registry applies, never something the connector applies itself.
|
|
445
|
-
* `remoteMcp({ classify })` and maintained providers set it to a
|
|
446
|
-
* deep-frozen record; a custom connector may set one too. It is validated
|
|
447
|
-
* when a registry first reads it (INV-11), and read once per connector
|
|
448
|
-
* object. A connector that sets it lists raw downstream tools; the
|
|
449
|
-
* registry caches and persists only that listing, and classifies it on
|
|
450
|
-
* every read with this record, so no cache layer carries a verdict.
|
|
451
|
-
* Connectors with `staticTools` cannot set it: annotate those directly.
|
|
452
|
-
*
|
|
453
|
-
* A wrapper that rebuilds a connector must forward this field to keep the
|
|
454
|
-
* review. `{ ...connector }`, `Object.assign`, and `Object.create` keep it;
|
|
455
|
-
* a forwarding class that omits it serves an unreviewed connector, whose
|
|
456
|
-
* downstream annotations are its own claims and fail closed when absent.
|
|
457
|
-
* Deployment-level classifier overrides, keyed by connector id
|
|
458
|
-
* and tool ([#706](https://github.com/zackbart/connecta/issues/706)), apply
|
|
459
|
-
* regardless of wrapping.
|
|
460
|
-
*/
|
|
461
|
-
readonly classification?: ToolClassification | undefined;
|
|
462
|
-
/**
|
|
463
|
-
* Optional: the drift this connector saw the last time it listed tools,
|
|
464
|
-
* or undefined when it has not listed any yet. A getter over an
|
|
465
|
-
* observation, never a probe: calling it makes no request, touches no
|
|
466
|
-
* credential, and returns counts only. Ignored for a connector with a
|
|
467
|
-
* `classification`, whose drift the registry observes itself, against
|
|
468
|
-
* that record, while serving a refresh the deployment already asked for.
|
|
469
|
-
*/
|
|
470
|
-
catalogDrift?(): CatalogDriftReport | undefined;
|
|
471
368
|
/**
|
|
472
369
|
* Optional: what this connector is, for `Connecta.describeConfig()` and the
|
|
473
370
|
* operator surfaces built on it — where it points, how it authenticates,
|
|
@@ -596,7 +493,7 @@ export interface ConnectorToolDescription {
|
|
|
596
493
|
annotations?: ToolAnnotations;
|
|
597
494
|
inputSchema?: JsonSchema;
|
|
598
495
|
outputSchema?: JsonSchema;
|
|
599
|
-
/** Present on registry descriptions after overrides and
|
|
496
|
+
/** Present on registry descriptions after overrides and annotations (INV-1). */
|
|
600
497
|
classification?: "read" | "write";
|
|
601
498
|
}
|
|
602
499
|
/** What `Connector.describe()` reports. Every field is optional but `source`. */
|
|
@@ -742,7 +639,7 @@ export type AuthResult = {
|
|
|
742
639
|
/** Human owner represented by a non-interactive access credential. */
|
|
743
640
|
principal?: IdentityReference;
|
|
744
641
|
/**
|
|
745
|
-
* Declared agent name. Only
|
|
642
|
+
* Declared agent name. Only built-in agent credential adapters may
|
|
746
643
|
* set it; a result from any other provider that carries it is refused.
|
|
747
644
|
*/
|
|
748
645
|
agent?: string;
|
|
@@ -768,7 +665,7 @@ export interface AuthenticatedIdentity {
|
|
|
768
665
|
principal?: IdentityReference;
|
|
769
666
|
/**
|
|
770
667
|
* Name of the code-declared agent this caller is, from `agents`. Set only
|
|
771
|
-
* when
|
|
668
|
+
* when a built-in agent adapter admitted a credential bound to
|
|
772
669
|
* a currently declared agent; an agent never has a `principal`.
|
|
773
670
|
*/
|
|
774
671
|
agent?: string;
|
|
@@ -932,8 +829,9 @@ export interface InboundAuth {
|
|
|
932
829
|
* Best-effort friendly label for a stable activity actor id. Called only
|
|
933
830
|
* while serving an authorized activity read, never during tool admission or
|
|
934
831
|
* event writes. The result is display-only and cannot grant access.
|
|
832
|
+
* Stop request-owned work when signal aborts (reader left or label budget expired).
|
|
935
833
|
*/
|
|
936
|
-
activityActorLabel?(subjectId: string): string | undefined | Promise<string | undefined>;
|
|
834
|
+
activityActorLabel?(subjectId: string, signal?: AbortSignal): string | undefined | Promise<string | undefined>;
|
|
937
835
|
/**
|
|
938
836
|
* Optional browser sign-in configuration. When present, operator pages use
|
|
939
837
|
* the provider's interactive sign-in flow.
|
package/dist/upward.js
ADDED
package/dist/usage-guide.js
CHANGED
|
@@ -19,6 +19,8 @@ Discover and call together when schemas suffice. search_tools covers catalog
|
|
|
19
19
|
inspection. On a read-only endpoint, as execute_code's description says, search
|
|
20
20
|
omits writes (guides may name them) and each fails read_only_endpoint; tell the
|
|
21
21
|
user. Unannotated tools fail closed to writes.
|
|
22
|
+
For a requested write, make the call through the write route; the host may ask
|
|
23
|
+
the user to confirm it. Connecta classifies and routes writes; the host owns approval.
|
|
22
24
|
|
|
23
25
|
## The global and the envelopes
|
|
24
26
|
|
|
@@ -113,7 +115,7 @@ async () => {
|
|
|
113
115
|
}
|
|
114
116
|
\`\`\`
|
|
115
117
|
|
|
116
|
-
Oversized returns lead with nextAction. Never rerun writes for output. write_outcome_unknown forbids retry, even if caught.
|
|
118
|
+
Oversized returns lead with nextAction. Never rerun writes for output. write_outcome_unknown or writeOutcome forbids retry, even if caught.
|
|
117
119
|
Recovery args may be partial (argsRedacted) or absent (argsOmitted). Reconcile
|
|
118
120
|
before retrying with the original args or repeating a program that sent writes.
|
|
119
121
|
Non-retryable errors need repair.
|
package/dist/validate.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export interface CompileValidatorOptions {
|
|
|
29
29
|
*/
|
|
30
30
|
address: string;
|
|
31
31
|
}
|
|
32
|
+
/** Optional in-process properties have the same absence semantics as JSON input. Never mutate the caller. */
|
|
33
|
+
export declare function normalizeToolInput<A>(value: A): A;
|
|
32
34
|
/**
|
|
33
35
|
* Validate call arguments against a tool's JSON Schema.
|
|
34
36
|
*
|
|
@@ -39,8 +41,8 @@ export interface CompileValidatorOptions {
|
|
|
39
41
|
* convention arguments (a `confirm` flag on writes, say) that individual tool
|
|
40
42
|
* schemas do not declare before deciding the call is really invalid.
|
|
41
43
|
*
|
|
42
|
-
* A schema the validator cannot compile (or
|
|
43
|
-
*
|
|
44
|
+
* A schema the validator cannot compile (or evaluate, e.g. an unresolvable
|
|
45
|
+
* `$ref`) is warned about once and the failing call is passed through — a
|
|
44
46
|
* broken schema should not break an otherwise working tool. Pass
|
|
45
47
|
* `failClosed: true` to instead reject such calls with `invalid_args`, for
|
|
46
48
|
* callers that would rather refuse a call than forward unvalidated arguments.
|
package/dist/validate.js
CHANGED
|
@@ -3,11 +3,67 @@ import { boundedEchoText, ConnectorCallError } from "./errors.js";
|
|
|
3
3
|
import { MAX_ARGUMENT_VALIDATION_ISSUES } from "./errors.js";
|
|
4
4
|
import { failureRecord, logFailure } from "./operator-record.js";
|
|
5
5
|
// Lazy validator cache keyed by the schema object itself; null marks a schema
|
|
6
|
-
// the validator
|
|
7
|
-
// breaking a working tool). A WeakMap so schemas belonging to a discarded
|
|
6
|
+
// the validator could not compile (warned once, then passed through rather
|
|
7
|
+
// than breaking a working tool). A WeakMap so schemas belonging to a discarded
|
|
8
8
|
// connector are collectable, the same pattern compactSchema uses.
|
|
9
9
|
const validators = new WeakMap();
|
|
10
|
+
const evaluationWarnings = new WeakSet();
|
|
10
11
|
const REQUIRED_PROPERTY_RE = /^Instance does not have required property "([^"]+)"\.$/;
|
|
12
|
+
function plainContainer(value) {
|
|
13
|
+
if (value === null || typeof value !== "object")
|
|
14
|
+
return false;
|
|
15
|
+
if (Array.isArray(value))
|
|
16
|
+
return true;
|
|
17
|
+
const prototype = Object.getPrototypeOf(value);
|
|
18
|
+
return prototype === Object.prototype || prototype === null;
|
|
19
|
+
}
|
|
20
|
+
/** Optional in-process properties have the same absence semantics as JSON input. Never mutate the caller. */
|
|
21
|
+
export function normalizeToolInput(value) {
|
|
22
|
+
// Keep unchanged inputs and their pass-through subtrees by identity. JSON
|
|
23
|
+
// callers have nothing to omit, so they never need a copy.
|
|
24
|
+
const seen = new WeakSet();
|
|
25
|
+
const remaining = [value];
|
|
26
|
+
let needed = false;
|
|
27
|
+
while (remaining.length > 0) {
|
|
28
|
+
const item = remaining.pop();
|
|
29
|
+
if (!plainContainer(item) || seen.has(item))
|
|
30
|
+
continue;
|
|
31
|
+
seen.add(item);
|
|
32
|
+
for (const child of Object.values(item)) {
|
|
33
|
+
if (child === undefined && !Array.isArray(item))
|
|
34
|
+
needed = true;
|
|
35
|
+
else if (child !== null && typeof child === "object")
|
|
36
|
+
remaining.push(child);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!needed)
|
|
40
|
+
return value;
|
|
41
|
+
const copies = new WeakMap();
|
|
42
|
+
const pending = [];
|
|
43
|
+
const copy = (item) => {
|
|
44
|
+
if (!plainContainer(item))
|
|
45
|
+
return item;
|
|
46
|
+
const existing = copies.get(item);
|
|
47
|
+
if (existing)
|
|
48
|
+
return existing;
|
|
49
|
+
const target = Array.isArray(item) ? [] : Object.create(Object.getPrototypeOf(item));
|
|
50
|
+
if (Array.isArray(item))
|
|
51
|
+
target.length = item.length;
|
|
52
|
+
copies.set(item, target);
|
|
53
|
+
pending.push([item, target]);
|
|
54
|
+
return target;
|
|
55
|
+
};
|
|
56
|
+
const root = copy(value);
|
|
57
|
+
for (let next = pending.pop(); next; next = pending.pop()) {
|
|
58
|
+
const [source, target] = next;
|
|
59
|
+
for (const [key, item] of Object.entries(source)) {
|
|
60
|
+
if (item === undefined && !Array.isArray(source))
|
|
61
|
+
continue;
|
|
62
|
+
Object.defineProperty(target, key, { value: copy(item), enumerable: true, configurable: true, writable: true });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return root;
|
|
66
|
+
}
|
|
11
67
|
const CONTAINER_VALIDATION_KEYWORDS = new Set([
|
|
12
68
|
"properties",
|
|
13
69
|
"items",
|
|
@@ -458,8 +514,8 @@ function disableValidation(schema, subject, logger, err) {
|
|
|
458
514
|
* convention arguments (a `confirm` flag on writes, say) that individual tool
|
|
459
515
|
* schemas do not declare before deciding the call is really invalid.
|
|
460
516
|
*
|
|
461
|
-
* A schema the validator cannot compile (or
|
|
462
|
-
*
|
|
517
|
+
* A schema the validator cannot compile (or evaluate, e.g. an unresolvable
|
|
518
|
+
* `$ref`) is warned about once and the failing call is passed through — a
|
|
463
519
|
* broken schema should not break an otherwise working tool. Pass
|
|
464
520
|
* `failClosed: true` to instead reject such calls with `invalid_args`, for
|
|
465
521
|
* callers that would rather refuse a call than forward unvalidated arguments.
|
|
@@ -494,18 +550,24 @@ export function validateCatalogToolInput(schema, args, opts, subject) {
|
|
|
494
550
|
validator = null;
|
|
495
551
|
}
|
|
496
552
|
}
|
|
497
|
-
// A schema the validator could not compile
|
|
553
|
+
// A schema the validator could not compile:
|
|
498
554
|
// pass through by default, refuse when the caller opted into fail-closed.
|
|
499
555
|
if (validator === null) {
|
|
500
556
|
return opts.failClosed ? unevaluableSchema(opts.address) : null;
|
|
501
557
|
}
|
|
502
558
|
let result;
|
|
503
559
|
try {
|
|
560
|
+
args = normalizeToolInput(args);
|
|
504
561
|
result = validator.validate(args);
|
|
505
562
|
}
|
|
506
563
|
catch (err) {
|
|
507
|
-
//
|
|
508
|
-
|
|
564
|
+
// Evaluation can fail on an instance (unsupported JS values or cycles),
|
|
565
|
+
// not just a lazy schema reference. Never disable a compiled validator
|
|
566
|
+
// because of one call's input; subsequent valid calls must still validate.
|
|
567
|
+
if (!evaluationWarnings.has(schema)) {
|
|
568
|
+
evaluationWarnings.add(schema);
|
|
569
|
+
logFailure(logger, "input schema unusable; arguments are not validated", failureRecord(subject, err));
|
|
570
|
+
}
|
|
509
571
|
return opts.failClosed ? unevaluableSchema(opts.address) : null;
|
|
510
572
|
}
|
|
511
573
|
if (result && !result.valid) {
|
|
@@ -514,9 +576,24 @@ export function validateCatalogToolInput(schema, args, opts, subject) {
|
|
|
514
576
|
// Told from the reviewed findings, never the validator's own sentences,
|
|
515
577
|
// which quote the schema's types, enums, and patterns.
|
|
516
578
|
const validation = validationDetails(schema, units);
|
|
517
|
-
const
|
|
579
|
+
const limit = schema.properties?.limit?.enum;
|
|
580
|
+
const supplied = args !== null && typeof args === "object" ? args["limit"] : undefined;
|
|
581
|
+
const discreteLimit = supplied !== undefined &&
|
|
582
|
+
Array.isArray(limit) &&
|
|
583
|
+
limit.length > 0 &&
|
|
584
|
+
limit.length <= 8 &&
|
|
585
|
+
limit.every((size) => Number.isSafeInteger(size) && Number(size) > 0) &&
|
|
586
|
+
!limit.includes(supplied);
|
|
587
|
+
const otherUnits = units.filter((unit) => unit.instanceLocation !== "#/limit");
|
|
588
|
+
const otherIssues = otherUnits.length > 0;
|
|
589
|
+
const shown = discreteLimit
|
|
590
|
+
? validationDetails(schema, otherUnits)
|
|
591
|
+
: nestedUnits.length > 0
|
|
592
|
+
? validationDetails(schema, nestedUnits)
|
|
593
|
+
: validation;
|
|
518
594
|
const detail = boundedEchoText(shown.issues.map((issue) => `${issue.path}: expected ${issue.expected} (${issue.code})`).join("; "), 256);
|
|
519
|
-
|
|
595
|
+
const ordinary = `Invalid arguments for "${opts.address}": ${detail || "input does not match the tool's inputSchema"}`;
|
|
596
|
+
return new ConnectorCallError("invalid_args", discreteLimit ? `The limit must be one of ${limit.join(", ")}.${otherIssues ? ` ${ordinary}` : ""}` : ordinary, { validation, repair: repairDetails(schema, args, units, validator) });
|
|
520
597
|
}
|
|
521
598
|
return null;
|
|
522
599
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CONNECTA_VERSION = "0.
|
|
1
|
+
export declare const CONNECTA_VERSION = "0.35.0";
|
package/dist/version.js
CHANGED