@zackbart/connecta 0.34.0 → 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 +393 -0
- package/README.md +62 -105
- 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 +15 -7
- package/dist/connectors/api-connector.js +147 -57
- 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/option-shapes.js +1 -1
- package/dist/connectors/remote-mcp.d.ts +12 -30
- package/dist/connectors/remote-mcp.js +960 -564
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +5 -1
- package/dist/describe-config.js +3 -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 +221 -87
- 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 +534 -408
- 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 +8 -4
- package/dist/operator-ui/connection-map.js +9 -6
- package/dist/operator-ui/contract.d.ts +7 -3
- package/dist/operator-ui/endpoints.js +5 -14
- 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/health.js +52 -0
- package/dist/operator-ui/model.d.ts +2 -3
- package/dist/operator-ui/overview.js +11 -19
- package/dist/operator-ui/setup-commands.js +0 -4
- package/dist/operator-ui/view.d.ts +5 -29
- package/dist/operator-ui/view.js +3 -59
- 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 +71 -32
- package/dist/provider.js +134 -40
- 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 +8 -209
- package/dist/providers/_shared/google/workspace.js +7 -426
- 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 +3 -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 +17 -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 +7 -22
- package/dist/providers/cloudflare/index.js +80 -194
- 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 +3299 -3208
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
- 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 +3 -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 +6 -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 +7 -27
- package/dist/providers/stripe/index.js +75 -191
- 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 -10
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +19 -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 +11 -25
- package/dist/providers/vercel/index.js +67 -261
- 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 +398 -376
- package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
- 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 +30 -28
- package/dist/registry.js +446 -413
- 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 +29 -22
- 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 +330 -224
- 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 +11 -99
- 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 +2550 -186
- package/documentation/auth.md +821 -98
- package/documentation/code-mode.md +56 -21
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +144 -105
- package/documentation/meta-tools.md +411 -34
- package/documentation/operating.md +28 -4
- package/documentation/operator-tests.md +11 -2
- package/documentation/operator-ui.md +103 -33
- package/documentation/provider-auth-migration.md +38 -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 -42
- 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 -134
- package/dist/catalog-drift.js +0 -493
- 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 -43
- 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 -1078
- 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/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -352
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -57
- package/dist/providers/mixpanel/index.js +0 -468
- 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 -65
- 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 -49
- package/dist/providers/revenuecat/index.js +0 -557
- 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
|
@@ -7,7 +7,7 @@ export function slotActions(slot) {
|
|
|
7
7
|
return slot.state === "issued" ? ["rotate", "revoke"] : ["issue"];
|
|
8
8
|
}
|
|
9
9
|
function contractSlot(agent) {
|
|
10
|
-
return { name: agent.name, ...agent.token };
|
|
10
|
+
return agent.token ? { name: agent.name, ...agent.token } : null;
|
|
11
11
|
}
|
|
12
12
|
function maintainerAgents(contract) {
|
|
13
13
|
return contract?.role === "maintainer" ? contract.agents : [];
|
|
@@ -22,7 +22,8 @@ export function resolveSlot(contract, slots, name) {
|
|
|
22
22
|
if (listed)
|
|
23
23
|
return { slot: listed, live: true };
|
|
24
24
|
const agent = maintainerAgents(contract).find((candidate) => candidate.name === name);
|
|
25
|
-
|
|
25
|
+
const slot = agent && contractSlot(agent);
|
|
26
|
+
return slot ? { slot, live: false } : null;
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
29
|
* One row per declared agent, in the slot list's order, then any agent only
|
|
@@ -33,20 +34,29 @@ export function agentRows(contract, slots, unresolved = []) {
|
|
|
33
34
|
const declared = new Map(agents.map((agent) => [agent.name, agent]));
|
|
34
35
|
const names = [...slots.map((slot) => slot.name), ...agents.map((agent) => agent.name)];
|
|
35
36
|
return [...new Set(names)].map((name) => {
|
|
36
|
-
const { slot, live } = resolveSlot(contract, slots, name);
|
|
37
|
+
const { slot, live } = resolveSlot(contract, slots, name) ?? { slot: null, live: false };
|
|
37
38
|
const agent = declared.get(name);
|
|
38
39
|
return {
|
|
39
40
|
name,
|
|
40
41
|
pools: agent?.pools ?? [],
|
|
42
|
+
credentialTypes: agent?.credentialTypes ?? [],
|
|
41
43
|
slot,
|
|
42
44
|
live,
|
|
43
|
-
blocked: !
|
|
45
|
+
blocked: !slot
|
|
46
|
+
? "Agent tokens aren't configured."
|
|
47
|
+
: !live
|
|
48
|
+
? SLOT_UNAVAILABLE
|
|
49
|
+
: unresolved.includes(name) || !slot.revision
|
|
50
|
+
? SLOT_UNRESOLVED
|
|
51
|
+
: null,
|
|
44
52
|
lastSeenAt: agent?.lastSeenAt ?? null,
|
|
45
|
-
actions: slotActions(slot),
|
|
53
|
+
actions: slot ? slotActions(slot) : [],
|
|
46
54
|
};
|
|
47
55
|
});
|
|
48
56
|
}
|
|
49
57
|
export function slotBadge(slot) {
|
|
58
|
+
if (!slot)
|
|
59
|
+
return { label: "Not configured", tone: "neutral" };
|
|
50
60
|
if (slot.state === "issued")
|
|
51
61
|
return { label: "Issued", tone: "ok" };
|
|
52
62
|
if (slot.state === "revoked")
|
|
@@ -55,9 +65,9 @@ export function slotBadge(slot) {
|
|
|
55
65
|
}
|
|
56
66
|
/** When the slot last changed, issued or revoked (its badge says which); a dash when it never has. */
|
|
57
67
|
export function slotSince(slot, format) {
|
|
58
|
-
if (slot
|
|
68
|
+
if (slot?.state === "issued")
|
|
59
69
|
return format(slot.issuedAt);
|
|
60
|
-
if (slot
|
|
70
|
+
if (slot?.state === "revoked")
|
|
61
71
|
return format(slot.revokedAt);
|
|
62
72
|
return "—";
|
|
63
73
|
}
|
|
@@ -17,7 +17,7 @@ function formatBytes(bytes) {
|
|
|
17
17
|
return `${NUMBER.format(bytes)} B`;
|
|
18
18
|
}
|
|
19
19
|
/** The exact count behind a rounded size, for a tooltip. */
|
|
20
|
-
|
|
20
|
+
function exactBytes(bytes) {
|
|
21
21
|
return `${bytes.toLocaleString("en-US")} bytes`;
|
|
22
22
|
}
|
|
23
23
|
const DURATIONS = [
|
|
@@ -39,7 +39,7 @@ function formatMs(ms) {
|
|
|
39
39
|
return `${NUMBER.format(ms)} ms`;
|
|
40
40
|
}
|
|
41
41
|
/** Format one value. Booleans read On or Off, never true or false; null reads None. */
|
|
42
|
-
|
|
42
|
+
function formatValue(value, format) {
|
|
43
43
|
if (value === null || value === undefined)
|
|
44
44
|
return "None";
|
|
45
45
|
if (typeof value === "boolean")
|
|
@@ -67,7 +67,7 @@ export function formatValue(value, format) {
|
|
|
67
67
|
}
|
|
68
68
|
const UNIT_SUFFIX = /(Ms|Seconds|Bytes|Days)$/;
|
|
69
69
|
/** The format a key's name implies: `probeTimeoutMs` is a duration, `maxStashBytes` a size. */
|
|
70
|
-
|
|
70
|
+
function inferFormat(key, value) {
|
|
71
71
|
if (typeof value === "boolean")
|
|
72
72
|
return "toggle";
|
|
73
73
|
if (typeof value !== "number")
|
|
@@ -84,7 +84,7 @@ export function inferFormat(key, value) {
|
|
|
84
84
|
: "count";
|
|
85
85
|
}
|
|
86
86
|
/** `maxStashEntries` reads "Max stash entries"; a unit suffix drops because the value carries it. */
|
|
87
|
-
|
|
87
|
+
function humanizeKey(key) {
|
|
88
88
|
// A word with two capitals is an acronym (OAuth, URL) and keeps its case.
|
|
89
89
|
const words = key
|
|
90
90
|
.replace(UNIT_SUFFIX, "")
|
|
@@ -158,6 +158,7 @@ const SIGN_IN = {
|
|
|
158
158
|
clerk: { label: "Clerk", mark: "clerk" },
|
|
159
159
|
"cloudflare-access": { label: "Cloudflare Access", mark: "access" },
|
|
160
160
|
access_token: { label: "Agent tokens", mark: "tokens" },
|
|
161
|
+
vercel_oidc: { label: "Vercel workloads", mark: "tokens" },
|
|
161
162
|
};
|
|
162
163
|
const STORE = { memory: "Memory", d1: "D1", sqlite: "SQLite", custom: "Custom" };
|
|
163
164
|
/** Known modules; any other `modules.<name>.enabled` becomes a tile named from its key. */
|
|
@@ -401,6 +402,7 @@ const AUTH_MODE = {
|
|
|
401
402
|
* catalog. Anything else becomes a tile, so a new field is never hidden.
|
|
402
403
|
*/
|
|
403
404
|
const CONNECTOR_KNOWN = [
|
|
405
|
+
"readOnly",
|
|
404
406
|
"id",
|
|
405
407
|
"title",
|
|
406
408
|
"description",
|
|
@@ -488,6 +490,8 @@ export function connectorSummary(connector, sources = {}) {
|
|
|
488
490
|
const base = `config.connectors.${connector.id}`;
|
|
489
491
|
const kind = SOURCE_KIND[connector.source.kind] ?? SOURCE_KIND.custom;
|
|
490
492
|
const badges = [{ id: "kind", label: kind.label, icon: kind.icon }];
|
|
493
|
+
if (connector.readOnly)
|
|
494
|
+
badges.push({ id: "readOnly", label: "Read-only" });
|
|
491
495
|
if (connector.source.provider)
|
|
492
496
|
badges.push({ id: "provider", label: connector.source.provider, icon: "box" });
|
|
493
497
|
badges.push(connector.authScope === "personal"
|
|
@@ -25,11 +25,11 @@ function plural(count, one, many = `${one}s`) {
|
|
|
25
25
|
return `${count} ${count === 1 ? one : many}`;
|
|
26
26
|
}
|
|
27
27
|
/** Cut a name to `limit` characters, ending in an ellipsis when it was longer. */
|
|
28
|
-
|
|
28
|
+
function truncate(text, limit) {
|
|
29
29
|
return text.length <= limit ? text : `${text.slice(0, limit - 1).trimEnd()}…`;
|
|
30
30
|
}
|
|
31
31
|
/** Where an endpoint's row opens on the Endpoints page. */
|
|
32
|
-
|
|
32
|
+
function endpointHref(path) {
|
|
33
33
|
return `/endpoints#${path.replace(/^\//, "")}`;
|
|
34
34
|
}
|
|
35
35
|
/** The endpoint path an Endpoints page hash names, or null. */
|
|
@@ -41,7 +41,7 @@ function connectorHref(id, healthy) {
|
|
|
41
41
|
return `/connectors/${encodeURIComponent(id)}#${healthy ? "tools" : "connection"}`;
|
|
42
42
|
}
|
|
43
43
|
function tokenWorks(agent) {
|
|
44
|
-
return agent?.token
|
|
44
|
+
return agent?.credentialTypes.includes("vercel_oidc") === true || agent?.token?.state === "issued";
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* People in the order the contract first lists them (plain /mcp's
|
|
@@ -118,13 +118,15 @@ function callerSummary(caller) {
|
|
|
118
118
|
: `${name} uses ${through}, which serves no connectors.`;
|
|
119
119
|
if (caller.kind !== "agent" || tokenWorks(caller.agent))
|
|
120
120
|
return reach;
|
|
121
|
-
const state = caller.agent?.token
|
|
121
|
+
const state = caller.agent?.token?.state;
|
|
122
122
|
return `${reach} ${state === "revoked" ? "Its token is revoked" : "It has no token"}, so it can't connect.`;
|
|
123
123
|
}
|
|
124
124
|
function callerDetail(caller, maintainers) {
|
|
125
125
|
if (caller.kind === "person")
|
|
126
126
|
return maintainers.has(caller.id) ? "maintainer" : "member";
|
|
127
|
-
|
|
127
|
+
if (caller.agent?.credentialTypes.includes("vercel_oidc"))
|
|
128
|
+
return "agent · Vercel OIDC";
|
|
129
|
+
const state = caller.agent?.token?.state;
|
|
128
130
|
return state === "issued"
|
|
129
131
|
? "agent · token issued"
|
|
130
132
|
: state === "revoked"
|
|
@@ -210,7 +212,8 @@ export function connectionMap(contract, options = {}) {
|
|
|
210
212
|
const maintainers = new Set((contract.root?.maintainers ?? []).flatMap((member) => member.kind === "human" ? [`person:${member.namespace}:${member.id}`] : []));
|
|
211
213
|
const connectors = (contract.role === "maintainer" ? (contract.config?.connectors ?? []) : []).flatMap((config) => {
|
|
212
214
|
const live = contract.live.connectors.find((c) => c.id === config.id);
|
|
213
|
-
|
|
215
|
+
const signals = options.signals && Object.hasOwn(options.signals, config.id) ? options.signals[config.id] : undefined;
|
|
216
|
+
return live ? [{ config, live, health: connectorVerdict(live, signals) }] : [];
|
|
214
217
|
});
|
|
215
218
|
const health = new Map(connectors.map(({ config, health }) => [config.id, health]));
|
|
216
219
|
const nodes = [];
|
|
@@ -50,6 +50,8 @@ export interface OperatorPoolV2 {
|
|
|
50
50
|
/** `/agent/<name>`. */
|
|
51
51
|
agentPath: string;
|
|
52
52
|
readOnly: boolean;
|
|
53
|
+
surface: "meta" | "native";
|
|
54
|
+
executeCode: boolean;
|
|
53
55
|
/** Workspace address agents act as; null in the member view. */
|
|
54
56
|
owner: string | null;
|
|
55
57
|
/** The pool's declared tools, unfiltered. */
|
|
@@ -105,13 +107,15 @@ export type OperatorMemberManage = {
|
|
|
105
107
|
export interface OperatorAgent {
|
|
106
108
|
name: string;
|
|
107
109
|
pools: string[];
|
|
110
|
+
/** Supported credential kinds from this agent's deployment declaration. */
|
|
111
|
+
credentialTypes: Array<"access_token" | "vercel_oidc">;
|
|
108
112
|
/**
|
|
109
|
-
* The agent's token slot. `revision` is the same opaque value GET
|
|
113
|
+
* The agent's token slot. Null when the managed token module is absent. `revision` is the same opaque value GET
|
|
110
114
|
* /ui/access-tokens lists for the slot, on every state including "none":
|
|
111
115
|
* it changes on every commit to the slot, and a token mutation sends it as
|
|
112
116
|
* `expect`, so one decided from a stale view refuses with 409 `slot_changed`.
|
|
113
117
|
*/
|
|
114
|
-
token: {
|
|
118
|
+
token: null | {
|
|
115
119
|
state: "none";
|
|
116
120
|
revision: string;
|
|
117
121
|
} | {
|
|
@@ -123,7 +127,7 @@ export interface OperatorAgent {
|
|
|
123
127
|
revokedAt: string;
|
|
124
128
|
revision: string;
|
|
125
129
|
};
|
|
126
|
-
/** Latest
|
|
130
|
+
/** Latest successful endpoint admission or visible historical activity; null when unknown or withheld. */
|
|
127
131
|
lastSeenAt: string | null;
|
|
128
132
|
}
|
|
129
133
|
/**
|
|
@@ -63,7 +63,7 @@ function endpointGroups(contract, grants, readOnly, pool) {
|
|
|
63
63
|
if (!live || !grant)
|
|
64
64
|
return [];
|
|
65
65
|
const tools = live.tools.filter((tool) => {
|
|
66
|
-
if (readOnly && tool.classification !== "read")
|
|
66
|
+
if ((readOnly || config.readOnly) && tool.classification !== "read")
|
|
67
67
|
return false;
|
|
68
68
|
return (grant.tools === "all" ||
|
|
69
69
|
grant.tools.some((g) => g.name === tool.name && (!g.requireReadOnly || tool.classification === "read")));
|
|
@@ -98,6 +98,8 @@ export function endpointRows(contract) {
|
|
|
98
98
|
path: contract.root.path,
|
|
99
99
|
agentPath: null,
|
|
100
100
|
readOnly: contract.root.readOnly,
|
|
101
|
+
surface: "meta",
|
|
102
|
+
executeCode: true,
|
|
101
103
|
toolCount: toolCount(groups),
|
|
102
104
|
groups,
|
|
103
105
|
access: accessChips(contract.root.maintainers),
|
|
@@ -111,6 +113,8 @@ export function endpointRows(contract) {
|
|
|
111
113
|
path: pool.humanPath,
|
|
112
114
|
agentPath: pool.members.some((member) => member.kind === "agent") ? pool.agentPath : null,
|
|
113
115
|
readOnly: pool.readOnly,
|
|
116
|
+
surface: pool.surface,
|
|
117
|
+
executeCode: pool.executeCode,
|
|
114
118
|
toolCount: toolCount(groups),
|
|
115
119
|
groups,
|
|
116
120
|
access: accessChips(pool.members),
|
|
@@ -206,16 +210,3 @@ export function matrixCellLabel(connector, column, cell) {
|
|
|
206
210
|
: `${cell.coverage.granted} of ${cell.coverage.total} live tools`;
|
|
207
211
|
return `${where}: ${what}${column.readOnly ? ", read-only" : ""}`;
|
|
208
212
|
}
|
|
209
|
-
/** The connector's subject for the matrix's Runs as column: the /mcp cell, else its first pool's. */
|
|
210
|
-
export function connectorRunsAs(contract, connectorId) {
|
|
211
|
-
const cells = contract.matrix.filter((cell) => cell.connectorId === connectorId);
|
|
212
|
-
const root = cells.find((cell) => cell.pool === null);
|
|
213
|
-
if (root)
|
|
214
|
-
return root.runsAs;
|
|
215
|
-
for (const pool of contract.pools) {
|
|
216
|
-
const cell = cells.find((c) => c.pool === pool.name);
|
|
217
|
-
if (cell)
|
|
218
|
-
return cell.runsAs;
|
|
219
|
-
}
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
@@ -11,7 +11,7 @@ import type { UiCredentialProblem, UiProblem } from "./model.js";
|
|
|
11
11
|
* `refusedNotice` in view.ts); what remains are the page's own sentences and a
|
|
12
12
|
* credential form's field checks.
|
|
13
13
|
*/
|
|
14
|
-
export type FixPromptKind = UiProblem | UiCredentialProblem | "credential_test_failed" | "oauth_action_failed"
|
|
14
|
+
export type FixPromptKind = UiProblem | UiCredentialProblem | "credential_test_failed" | "oauth_action_failed";
|
|
15
15
|
/** The clipboard text for one failure. Fixed by kind; see `CATALOGUE`. */
|
|
16
16
|
export declare function fixPrompt(kind: FixPromptKind, connectorId?: string): string;
|
|
17
17
|
/** Every kind, so a test can walk the whole catalogue. */
|
|
@@ -70,14 +70,6 @@ const CATALOGUE = {
|
|
|
70
70
|
"Pin or upgrade the @zackbart/connecta version if a maintained provider's catalog changed shape underneath it.",
|
|
71
71
|
],
|
|
72
72
|
},
|
|
73
|
-
catalog_drift: {
|
|
74
|
-
problem: "A hosted provider's live catalog differs from the reviewed manifest shipped with connecta: new unclassified tools, unserved tools, annotation conflicts, or schema changes.",
|
|
75
|
-
steps: [
|
|
76
|
-
"Unclassified tools are withheld until a release classifies them. Check whether a newer @zackbart/connecta release has, and upgrade if so.",
|
|
77
|
-
"If a tool the deployment depends on is now unserved or changed shape, review callers of it before upgrading.",
|
|
78
|
-
"Report drift the release does not cover as an issue on the connecta repository, naming the provider and the kinds of drift but no tool data.",
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
73
|
};
|
|
82
74
|
/** The clipboard text for one failure. Fixed by kind; see `CATALOGUE`. */
|
|
83
75
|
export function fixPrompt(kind, connectorId) {
|