eve 0.47.3 → 0.47.6
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 +29 -0
- package/NOTICE +72 -0
- package/bin/eve.js +4 -0
- package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
- package/dist/src/cli/dev/tui/vercel-trusted-sources.js +1 -1
- package/dist/src/cli/invoke/result.d.ts +1 -1
- package/dist/src/compiled/.vendor-stamp.json +5 -5
- package/dist/src/compiled/@agentclientprotocol/sdk/index.js +29 -43
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +4 -4
- package/dist/src/compiled/@ai-sdk/code-mode/LICENSE +13 -0
- package/dist/src/compiled/@ai-sdk/code-mode/_run.d.ts +1 -0
- package/dist/src/compiled/@ai-sdk/code-mode/index.d.ts +300 -0
- package/dist/src/compiled/@ai-sdk/code-mode/index.js +663 -0
- package/dist/src/compiled/@ai-sdk/google/index.js +6 -6
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.js +8 -8
- package/dist/src/compiled/@ai-sdk/provider/index.d.ts +6 -0
- package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +50 -2
- package/dist/src/compiled/@modelcontextprotocol/server/index.js +36 -50
- package/dist/src/compiled/@opentelemetry/api/index.d.ts +37 -0
- package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +55 -55
- package/dist/src/compiled/@vercel/otel/index.d.ts +11 -0
- package/dist/src/compiled/@vercel/sandbox/index.js +3 -3
- package/dist/src/compiled/@vercel/sandbox-delete/index.js +3 -3
- package/dist/src/compiled/_chunks/client/errors-BLhNglBt.js +2 -0
- package/dist/src/compiled/_chunks/node/auth-BSKyPAEP.js +2 -0
- package/dist/src/compiled/_chunks/node/auth-YpKlwhP1.js +2 -0
- package/dist/src/compiled/_chunks/node/schemas-cFtr4EoN.js +50 -0
- package/dist/src/compiled/_chunks/node/xdg-app-paths-Buj3-Svl.js +1 -0
- package/dist/src/compiled/_chunks/workflow/dist-Cz-ffHKC.js +65 -0
- package/dist/src/compiled/zod/index.js +32 -45
- package/dist/src/compiled/zod-validation-error/index.js +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +7 -5
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +14 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-connection.d.ts +9 -2
- package/dist/src/compiler/normalize-connection.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/validate-artifact.js +1 -1
- package/dist/src/context/dynamic-connection-lifecycle.d.ts +9 -0
- package/dist/src/context/dynamic-connection-lifecycle.js +1 -0
- package/dist/src/context/keys.d.ts +3 -1
- package/dist/src/context/memory-tools.js +1 -1
- package/dist/src/context/providers/connection.js +1 -1
- package/dist/src/dynamic/definition.d.ts +6 -3
- package/dist/src/dynamic/definition.js +1 -1
- package/dist/src/execution/authorization-callback-match.js +1 -1
- package/dist/src/execution/cancelled-turn-message.d.ts +2 -0
- package/dist/src/execution/cancelled-turn-message.js +1 -0
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
- package/dist/src/execution/dynamic-connections.d.ts +9 -0
- package/dist/src/execution/dynamic-connections.js +1 -0
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/node-step.d.ts +2 -0
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/tools/connection-search.js +2 -2
- package/dist/src/execution/tools/load-skill.js +1 -1
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/execution/workflow-trace-context.d.ts +3 -6
- package/dist/src/execution/workflow-trace-context.js +1 -1
- package/dist/src/harness/advertised-tools.d.ts +0 -5
- package/dist/src/harness/advertised-tools.js +1 -1
- package/dist/src/harness/authorization.d.ts +11 -4
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/inline-tool-authorization.d.ts +13 -1
- package/dist/src/harness/inline-tool-authorization.js +1 -1
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/model-call-error.js +1 -1
- package/dist/src/harness/semantic-errors/rule.d.ts +5 -2
- package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/turn-tag-state.d.ts +1 -1
- package/dist/src/harness/types.d.ts +2 -2
- package/dist/src/harness/workflow-interrupt-state.d.ts +6 -0
- package/dist/src/harness/workflow-interrupt-state.js +1 -1
- package/dist/src/harness/workflow-lifecycle.d.ts +15 -5
- package/dist/src/harness/workflow-lifecycle.js +1 -1
- package/dist/src/harness/workflow-runtime-action-state.d.ts +2 -2
- package/dist/src/harness/workflow-runtime-action-state.js +1 -1
- package/dist/src/harness/workflow-sandbox.d.ts +1 -2
- package/dist/src/harness/workflow-sandbox.js +1 -1
- package/dist/src/harness/workflow-subagent-limit.d.ts +3 -13
- package/dist/src/harness/workflow-subagent-limit.js +1 -1
- package/dist/src/{harness → instrumentation}/ai-sdk-hook-bridge.d.ts +1 -1
- package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -0
- package/dist/src/{harness/channel-delivery-instrumentation.d.ts → instrumentation/channel-delivery.d.ts} +5 -7
- package/dist/src/instrumentation/channel-delivery.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/config.d.ts +0 -10
- package/dist/src/instrumentation/config.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/content-policy.d.ts +1 -1
- package/dist/src/instrumentation/content-policy.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/content.d.ts +1 -1
- package/dist/src/{harness/instrumentation → instrumentation}/dispatch.d.ts +1 -1
- package/dist/src/instrumentation/dispatch.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/lifecycle.d.ts +26 -33
- package/dist/src/instrumentation/lifecycle.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/native-events.d.ts +1 -1
- package/dist/src/instrumentation/native-events.js +1 -0
- package/dist/src/{harness → instrumentation}/parent-lineage.d.ts +1 -1
- package/dist/src/{harness → instrumentation}/prepare-trace-context.d.ts +8 -5
- package/dist/src/instrumentation/prepare-trace-context.js +1 -0
- package/dist/src/instrumentation/provider.d.ts +13 -9
- package/dist/src/{harness/instrumentation → instrumentation}/providers.d.ts +1 -1
- package/dist/src/instrumentation/providers.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/runtime-context.d.ts +13 -2
- package/dist/src/instrumentation/runtime-context.js +1 -0
- package/dist/src/instrumentation/runtime.d.ts +100 -0
- package/dist/src/instrumentation/runtime.js +1 -0
- package/dist/src/{harness/instrumentation → instrumentation}/state.d.ts +2 -11
- package/dist/src/internal/application/compiled-artifacts.js +3 -3
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/connection.js +1 -1
- package/dist/src/internal/instrumentation.d.ts +1 -1
- package/dist/src/internal/nitro/host/workflow-sandbox-runtime-plugin.js +1 -1
- package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +4 -6
- package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/lib/schemas.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/aclaction.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/sdkvalidationerror.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectblock.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectprojectsbranchmatcher.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/primitives.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/smartUnion.js +1 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js +1 -0
- package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/ZodError.js +1 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/types.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/checks.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/deep-partial.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/errors.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/external.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/from-json-schema.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/in-out.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/iso.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/parse.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/api.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/checks.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/compile.js +2 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/core.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/doc.js +3 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/errors.js +2 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/index.js +1 -0
- package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/json-schema-generator.js +1 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/json-schema-processors.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/memoizer.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/parse.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/regexes.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/schemas.js +46 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/to-json-schema.js +3 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/util.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/versions.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/visit.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ar.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/az.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/be.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bg.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bn.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ca.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ckb.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/cs.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/da.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/de.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/el.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/en.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/eo.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/es.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fa.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fi.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr-CA.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/gu.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/he.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hi.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hr.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hu.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hy.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/id.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/index.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/is.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/it.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ja.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ka.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/km.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/kn.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ko.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/lt.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/mk.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ms.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ne.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nl.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nn.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/no.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ota.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pl.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ps.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt-BR.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ro.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ru.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sk.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sl.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sv.js +1 -0
- package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/ta.js +1 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/th.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tk.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tr.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uk.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ur.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uz.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/vi.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/yo.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-CN.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-TW.js +1 -0
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/public/channels/slack/defaults.js +6 -3
- package/dist/src/public/channels/slack/index.d.ts +1 -1
- package/dist/src/public/channels/slack/interactions.d.ts +8 -5
- package/dist/src/public/channels/slack/interactions.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.d.ts +66 -1
- package/dist/src/public/channels/slack/slash-command.d.ts +9 -0
- package/dist/src/public/channels/slack/slash-command.js +1 -0
- package/dist/src/public/connections/index.d.ts +2 -0
- package/dist/src/public/connections/index.js +1 -1
- package/dist/src/public/definitions/connections/dynamic.d.ts +23 -0
- package/dist/src/public/definitions/connections/dynamic.js +1 -0
- package/dist/src/public/definitions/connections/mcp.d.ts +8 -0
- package/dist/src/public/definitions/connections/openapi.d.ts +8 -0
- package/dist/src/public/definitions/connections/protocol.d.ts +6 -0
- package/dist/src/public/definitions/connections/protocol.js +1 -1
- package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
- package/dist/src/runtime/connections/authorization-tokens.d.ts +11 -10
- package/dist/src/runtime/connections/instance-identity.d.ts +12 -0
- package/dist/src/runtime/connections/instance-identity.js +1 -0
- package/dist/src/runtime/connections/mcp-client.js +1 -1
- package/dist/src/runtime/connections/registry.d.ts +2 -0
- package/dist/src/runtime/connections/registry.js +1 -1
- package/dist/src/runtime/connections/scoped-authorization.d.ts +10 -6
- package/dist/src/runtime/connections/scoped-authorization.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-connection.d.ts +5 -0
- package/dist/src/runtime/resolve-connection.js +1 -1
- package/dist/src/runtime/resolve-dynamic-connection.d.ts +5 -0
- package/dist/src/runtime/resolve-dynamic-connection.js +1 -0
- package/dist/src/runtime/types.d.ts +11 -0
- package/dist/src/services/dev-client/request-headers.js +1 -1
- package/dist/src/setup/flows/registry.js +1 -1
- package/dist/src/setup/integrations/discord/api.js +1 -1
- package/dist/src/setup/integrations/discord/connect.js +1 -1
- package/dist/src/setup/integrations/github/connect.js +1 -1
- package/dist/src/setup/integrations/linear/connect.js +1 -1
- package/dist/src/setup/integrations/linq/connect.js +1 -1
- package/dist/src/setup/integrations/photon/connect.js +1 -1
- package/dist/src/setup/project-resolution.js +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/extension.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
- package/dist/src/setup/scaffold/create/web-template.js +1 -1
- package/dist/src/setup/scaffold/update/web-options.js +1 -1
- package/dist/src/setup/slack-connect.js +1 -1
- package/dist/src/setup/vercel-api-failure.js +1 -1
- package/dist/src/setup/vercel-deployment.js +1 -1
- package/dist/src/setup/vercel-project-api.js +1 -1
- package/dist/src/setup/vercel-project-framework.js +1 -1
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/input.js +1 -1
- package/dist/src/shared/trace-policy.d.ts +20 -0
- package/dist/src/shared/trace-policy.js +1 -0
- package/dist/src/shared/workflow-sandbox.d.ts +10 -5
- package/dist/src/shared/workflow-sandbox.js +1 -1
- package/dist/src/tracing/agent-action-instrumentation.d.ts +1 -1
- package/dist/src/tracing/agent-action-instrumentation.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.d.ts +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.d.ts +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-provider.d.ts +2 -2
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-otel-runtime-context.d.ts +5 -0
- package/dist/src/tracing/agent-otel-runtime-context.js +1 -0
- package/dist/src/tracing/agent-otel-session-context.d.ts +1 -1
- package/dist/src/tracing/agent-otel-session-context.js +1 -1
- package/dist/src/tracing/agent-otel-usage.d.ts +4 -2
- package/dist/src/tracing/agent-otel-usage.js +1 -1
- package/dist/src/tracing/agent-span-id-generator.d.ts +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.d.ts +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/agent-trace-context-store.d.ts +3 -0
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/agent-trace-context.d.ts +3 -0
- package/dist/src/tracing/agent-trace-context.js +1 -0
- package/dist/src/tracing/agent-trace-state.d.ts +8 -1
- package/dist/src/tracing/agent-trace-state.js +1 -1
- package/dist/src/tracing/install-instrumentation-runtime.d.ts +3 -2
- package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
- package/dist/src/tracing/local-instrumentation-runtime.d.ts +1 -1
- package/dist/src/tracing/local-instrumentation-runtime.js +1 -1
- package/dist/src/tracing/local-trace-reader.d.ts +1 -0
- package/dist/src/tracing/local-trace-reader.js +1 -1
- package/dist/src/tracing/otel-declaration.d.ts +13 -16
- package/dist/src/tracing/otel-declaration.js +1 -1
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/tracing/sampled-trace.d.ts +1 -14
- package/dist/src/tracing/sampled-trace.js +1 -1
- package/docs/channels/slack.mdx +25 -5
- package/docs/connections/overview.mdx +46 -2
- package/docs/extensions.md +2 -2
- package/docs/getting-started.mdx +1 -1
- package/docs/guides/dynamic-capabilities.md +91 -5
- package/docs/memory.md +7 -4
- package/docs/reference/cli.md +4 -4
- package/docs/reference/typescript-api.md +32 -23
- package/package.json +6 -5
- package/dist/src/compiled/_chunks/client/errors-C14fPFvs.js +0 -2
- package/dist/src/compiled/_chunks/node/auth-DpzFWvTn.js +0 -2
- package/dist/src/compiled/_chunks/node/auth-QgeX8nBM.js +0 -2
- package/dist/src/compiled/_chunks/node/compat-Dm2n85Mx.js +0 -1
- package/dist/src/compiled/_chunks/node/schemas-DtQwuPdM.js +0 -65
- package/dist/src/compiled/_chunks/node/xdg-app-paths-Bys8q02u.js +0 -1
- package/dist/src/compiled/_chunks/workflow/dist-eUxFublw.js +0 -77
- package/dist/src/compiled/experimental-ai-sdk-code-mode/LICENSE +0 -21
- package/dist/src/compiled/experimental-ai-sdk-code-mode/approval-continuation.d.ts +0 -71
- package/dist/src/compiled/experimental-ai-sdk-code-mode/approval.d.ts +0 -32
- package/dist/src/compiled/experimental-ai-sdk-code-mode/code-mode-tool.d.ts +0 -16
- package/dist/src/compiled/experimental-ai-sdk-code-mode/continuation-capability.d.ts +0 -44
- package/dist/src/compiled/experimental-ai-sdk-code-mode/errors.d.ts +0 -114
- package/dist/src/compiled/experimental-ai-sdk-code-mode/fetch-policy.d.ts +0 -21
- package/dist/src/compiled/experimental-ai-sdk-code-mode/host-interrupt.d.ts +0 -25
- package/dist/src/compiled/experimental-ai-sdk-code-mode/index.d.ts +0 -11
- package/dist/src/compiled/experimental-ai-sdk-code-mode/index.js +0 -419
- package/dist/src/compiled/experimental-ai-sdk-code-mode/interrupt-continuation.d.ts +0 -32
- package/dist/src/compiled/experimental-ai-sdk-code-mode/options.d.ts +0 -3
- package/dist/src/compiled/experimental-ai-sdk-code-mode/run-code-mode.d.ts +0 -12
- package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/guest-sources.d.ts +0 -3
- package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/manager.d.ts +0 -22
- package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/max-workers.d.ts +0 -20
- package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/protocol.d.ts +0 -60
- package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/worker-source.d.ts +0 -11
- package/dist/src/compiled/experimental-ai-sdk-code-mode/serialization.d.ts +0 -5
- package/dist/src/compiled/experimental-ai-sdk-code-mode/source-cache.d.ts +0 -11
- package/dist/src/compiled/experimental-ai-sdk-code-mode/telemetry.d.ts +0 -20
- package/dist/src/compiled/experimental-ai-sdk-code-mode/tool-invocation.d.ts +0 -24
- package/dist/src/compiled/experimental-ai-sdk-code-mode/tool-prompt.d.ts +0 -3
- package/dist/src/compiled/experimental-ai-sdk-code-mode/types.d.ts +0 -828
- package/dist/src/execution/subagent-usage-span.d.ts +0 -9
- package/dist/src/execution/subagent-usage-span.js +0 -1
- package/dist/src/harness/ai-sdk-hook-bridge.js +0 -1
- package/dist/src/harness/channel-delivery-instrumentation.js +0 -1
- package/dist/src/harness/instrumentation/config.js +0 -1
- package/dist/src/harness/instrumentation/content-policy.js +0 -1
- package/dist/src/harness/instrumentation/dispatch.js +0 -1
- package/dist/src/harness/instrumentation/lifecycle.js +0 -1
- package/dist/src/harness/instrumentation/native-events.js +0 -1
- package/dist/src/harness/instrumentation/providers.js +0 -1
- package/dist/src/harness/instrumentation/runtime-context.js +0 -1
- package/dist/src/harness/instrumentation/runtime.d.ts +0 -21
- package/dist/src/harness/instrumentation/runtime.js +0 -1
- package/dist/src/harness/prepare-trace-context.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v3/types.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js +0 -3
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js +0 -2
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js +0 -60
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js +0 -3
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-CA.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-CN.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-TW.js +0 -1
- /package/dist/src/{harness → instrumentation}/ai-sdk-telemetry.d.ts +0 -0
- /package/dist/src/{harness → instrumentation}/ai-sdk-telemetry.js +0 -0
- /package/dist/src/{harness/instrumentation → instrumentation}/content.js +0 -0
- /package/dist/src/{harness → instrumentation}/parent-lineage.js +0 -0
- /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.d.ts +0 -0
- /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.js +0 -0
- /package/dist/src/{harness/instrumentation → instrumentation}/state.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/errors.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/external.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/errorUtil.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/parseUtil.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/typeAliases.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/util.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/index.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/locales/en.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/classic/coerce.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/classic/compat.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/json-schema.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/registries.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/kh.js +0 -0
- /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/ua.js +0 -0
|
@@ -10,3 +10,9 @@ export declare function stampConnectionProtocol(definition: object, protocol: Co
|
|
|
10
10
|
* marker existed continue to compile as MCP connections.
|
|
11
11
|
*/
|
|
12
12
|
export declare function readConnectionProtocol(definition: unknown): ConnectionProtocol;
|
|
13
|
+
/**
|
|
14
|
+
* Reads the protocol marker without applying the legacy MCP fallback.
|
|
15
|
+
* Dynamic connection resolvers use this to distinguish one branded
|
|
16
|
+
* connection definition from a map of branded definitions.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readStampedConnectionProtocol(definition: unknown): ConnectionProtocol | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const PROTOCOL_KEY=Symbol.for(`eve.connection-protocol`);function stampConnectionProtocol(
|
|
1
|
+
const PROTOCOL_KEY=Symbol.for(`eve.connection-protocol`);function stampConnectionProtocol(t,n){Object.defineProperty(t,PROTOCOL_KEY,{configurable:!0,value:n})}function readConnectionProtocol(e){return readStampedConnectionProtocol(e)??`mcp`}function readStampedConnectionProtocol(t){if(!(typeof t!=`object`||!t||!(PROTOCOL_KEY in t)))return t[PROTOCOL_KEY]}export{readConnectionProtocol,readStampedConnectionProtocol,stampConnectionProtocol};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{z}from"#compiled/zod/index.js";import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";import{MockLanguageModelV3}from"ai/test";import{FINAL_OUTPUT_TOOL_NAME}from"#harness/final-output.js";import{BOOTSTRAP_RUNTIME_MODEL_ID,BOOTSTRAP_RUNTIME_SYSTEM_PROMPT}from"#runtime/agent/bootstrap.js";import{createBootstrapGenerateResult,createBootstrapStreamResult,estimateTokenCount,getLastUserPromptText,getPromptContentText,getPromptText,isAgentsAnnouncementText}from"#runtime/agent/bootstrap-model-utils.js";import{createMockAuthoredToolInput,formatToolOutput,resolveMockFixtureToken,resolveWeatherCity}from"#runtime/agent/mock-model-fixtures.js";import{findRelevantSkill,getActivatedSkillIds,getAvailableSkills}from"#runtime/agent/mock-model-skill-selection.js";import{createJsonSchemaSample}from"#runtime/agent/mock-structured-output.js";const authoredRuntimeModelMocks=new Map,bootstrapWeatherPayloadSchema=z.object({city:z.string(),condition:z.string(),summary:z.string(),temperatureF:z.number().finite()}).strict();function shouldMockAuthoredRuntimeModels(){return process.env.NODE_ENV===`test`||process.env.EVE_MOCK_AUTHORED_MODELS===`1`}function createMockAuthoredRuntimeModel(e){let t=authoredRuntimeModelMocks.get(e.id);if(t!==void 0)return t;let r=new MockLanguageModelV3({modelId:e.id,provider:`eve-runtime-mock`,doGenerate:async t=>createMockModelResult(t,e.id),doStream:async t=>createBootstrapStreamResult(createMockModelResult(t,e.id))});return authoredRuntimeModelMocks.set(e.id,r),r}function createMockModelResult(e,t){let n=getLastAuthoredToolResult(e.prompt);if(n!==null){let r=createFollowUpToolCallResult({modelId:t,options:e,result:n});if(r!==null)return r}else{let n=createParallelAuthoredToolCallsResult(e,t)??createSubagentDelegationResult(e,t)??createSkillLoadResult(e.prompt,t)??createAuthoredToolCallResult(e,t);if(n!==null)return n}let r=createFinalOutputResult(e,t);if(r!==null)return r;let i=n===null?createAssistantMessage(e.prompt):formatToolResultReply(n,e.prompt);return createBootstrapGenerateResult({inputTokens:estimateTokenCount(getPromptText(e.prompt)),modelId:t,outputTokens:estimateTokenCount(i),text:i})}function createFinalOutputResult(e,t){let n=getAvailableTools(e).find(e=>e.name===FINAL_OUTPUT_TOOL_NAME);if(n===void 0)return null;let i=createJsonSchemaSample(n.inputSchema);return createToolCallGenerateResult({input:i,inputTokens:estimateTokenCount(getPromptText(e.prompt)),modelId:t,outputTokens:estimateTokenCount(JSON.stringify(i)),toolCallId:createToolCallId(FINAL_OUTPUT_TOOL_NAME),toolName:FINAL_OUTPUT_TOOL_NAME})}function resolveMockAuthoredRuntimeModel(e){return!shouldMockAuthoredRuntimeModels()||e.id===BOOTSTRAP_RUNTIME_MODEL_ID?null:createMockAuthoredRuntimeModel(e)}function createSkillLoadResult(e,n){let r=getLastUserPromptText(e);if(r===null||getActivatedSkillIds(e).length>0)return null;let i=findRelevantSkill(getAvailableSkills(e),r);return i===null?null:createToolCallGenerateResult({input:{skill:i.name},inputTokens:estimateTokenCount(getPromptText(e)),modelId:n,outputTokens:estimateTokenCount(i.name),toolCallId:`call_load_skill`,toolName:LOAD_SKILL_TOOL_NAME})}const SUBAGENT_TOOL_NAME=`agent`,SUBAGENT_DELEGATION_DIRECTIVE=/\bdelegate\s+to\s+a\s+subagent\s*:\s*(.+)$/iu,PARALLEL_AUTHORED_TOOLS_DIRECTIVE=/^call tools in parallel:\s*(.+)$/imu;function createParallelAuthoredToolCallsResult(e,t){let n=getLastUserPromptText(e.prompt);if(n===null)return null;let r=PARALLEL_AUTHORED_TOOLS_DIRECTIVE.exec(n)?.[1]?.split(`,`).map(e=>e.trim()).filter(Boolean);if(r===void 0||r.length<2||new Set(r).size!==r.length)return null;let i=new Map(getAvailableTools(e).map(e=>[e.name,e])),a=[];for(let e of r){let t=i.get(e);if(t===void 0)return null;a.push(t)}let o=resolveWeatherCity(n);return createToolCallsGenerateResult({calls:a.map(e=>({input:createMockAuthoredToolInput(e,n,o),toolCallId:createToolCallId(e.name),toolName:e.name})),inputTokens:estimateTokenCount(getPromptText(e.prompt)),modelId:t,outputTokens:estimateTokenCount(n)})}function createSubagentDelegationResult(e,t){let n=getLastUserPromptText(e.prompt);if(n===null)return null;let r=SUBAGENT_DELEGATION_DIRECTIVE.exec(n);if(r?.[1]===void 0||getAvailableTools(e).find(e=>e.name===SUBAGENT_TOOL_NAME)===void 0)return null;let i={message:r[1].trim()};return createToolCallGenerateResult({input:i,inputTokens:estimateTokenCount(getPromptText(e.prompt)),modelId:t,outputTokens:estimateTokenCount(i.message),toolCallId:createToolCallId(SUBAGENT_TOOL_NAME),toolName:SUBAGENT_TOOL_NAME})}function createAuthoredToolCallResult(e,t){let n=getLastUserPromptText(e.prompt);if(n===null)return null;let r=findRelevantTool(getAvailableTools(e),n);if(r===null)return null;let i=createMockAuthoredToolInput(r,n,resolveWeatherCity(n));return createToolCallGenerateResult({input:i,inputTokens:estimateTokenCount(getPromptText(e.prompt)),modelId:t,outputTokens:estimateTokenCount(Object.values(i).join(` `)),toolCallId:createToolCallId(r.name),toolName:r.name})}function createFollowUpToolCallResult(e){let t=findNextExplicitToolAfterResult({previousToolName:e.result.toolName,prompt:e.options.prompt,tools:getAvailableTools(e.options)});if(t===null)return null;let n=createFollowUpToolInput(e.result.output);return n===null?null:createToolCallGenerateResult({input:n,inputTokens:estimateTokenCount(getPromptText(e.options.prompt)),modelId:e.modelId,outputTokens:estimateTokenCount(Object.values(n).join(` `)),toolCallId:createToolCallId(t.name),toolName:t.name})}function createAssistantMessage(e){let t=getLastUserPromptText(e)??`Hello from eve`,n=getSystemPromptLabels(e),r=resolveSystemProbe(e),i=resolveMockFixtureToken(e);return i===null?n.length>0?r===null?`Bootstrap reply [${n.join(`, `)}]: ${t}`:`Bootstrap reply [${n.join(`, `)}; probe=${r}]: ${t}`:r===null?`Bootstrap reply: ${t}`:`Bootstrap reply [probe=${r}]: ${t}`:i}function formatToolResultReply(e,t){if(e.isError)return`Local weather tool failed: ${formatToolOutput(e.output)}`;if(isWeatherPayload(e.output))return`Used local weather tool for ${e.output.city}: ${e.output.condition}, ${e.output.temperatureF}F. ${e.output.summary}`;let n=getLastUserPromptText(t)??`Hello from eve`;return`Used ${e.toolName} for "${n}": ${formatToolOutput(e.output)}`}function createToolCallGenerateResult(e){return createToolCallsGenerateResult({calls:[{input:e.input,toolCallId:e.toolCallId,toolName:e.toolName}],inputTokens:e.inputTokens,modelId:e.modelId,outputTokens:e.outputTokens})}function createToolCallsGenerateResult(e){return{content:e.calls.map(e=>({input:JSON.stringify(e.input),toolCallId:e.toolCallId,toolName:e.toolName,type:`tool-call`})),finishReason:{raw:void 0,unified:`tool-calls`},response:{id:`bootstrap-response`,modelId:e.modelId,timestamp:new Date(`2026-03-16T00:00:00.000Z`)},usage:{inputTokens:{cacheRead:0,cacheWrite:0,noCache:e.inputTokens,total:e.inputTokens},outputTokens:{reasoning:0,text:e.outputTokens,total:e.outputTokens}},warnings:[]}}function getAvailableTools(e){return(e.tools??[]).flatMap(e=>e.type===`function`?[{description:e.description,inputSchema:`inputSchema`in e?e.inputSchema:void 0,name:e.name,outputSchema:`outputSchema`in e?e.outputSchema:void 0}]:[])}function getLastAuthoredToolResult(e){for(let n of[...e].reverse()){if(n.role===`user`){if(isAgentsAnnouncementText(getPromptContentText(n.content).trim()))continue;return null}if(!(n.role!==`tool`&&n.role!==`assistant`)){for(let e of[...n.content].reverse())if(!(typeof e==`string`||e.type!==`tool-result`)&&e.toolName!==LOAD_SKILL_TOOL_NAME)return{isError:e.output.type===`error-json`||e.output.type===`error-text`||e.output.type===`execution-denied`,output:e.output.type===`execution-denied`?{reason:e.output.reason??null,type:e.output.type}:e.output.value,toolCallId:e.toolCallId,toolName:e.toolName}}}return null}function findNextExplicitToolAfterResult(e){let t=getLastUserPromptText(e.prompt);if(t===null)return null;let n=normalizeText(t),r=n.indexOf(normalizeText(e.previousToolName));return r<0?null:e.tools.filter(t=>t.name!==e.previousToolName).flatMap(e=>{let t=n.indexOf(normalizeText(e.name),r+1);return t<0?[]:[{index:t,tool:e}]}).sort((e,t)=>e.index-t.index)[0]?.tool??null}function createFollowUpToolInput(e){return isRecord(e)&&typeof e.stepKey==`string`?{stepKey:e.stepKey}:null}function getSystemPromptLabels(e){let t=e.filter(e=>e.role===`system`);if(t.length===0)return[];let n=t.flatMap(e=>{let t=getPromptContentText(e.content);if(t.startsWith(`Available skills
|
|
2
2
|
`))return[];let n=t.split(`
|
|
3
3
|
`).map(e=>e.trim()).filter(e=>e.length>0),r=[];for(let e of n){if(e===BOOTSTRAP_RUNTIME_SYSTEM_PROMPT||e===`Available skills`)continue;let t=/^System \((.+)\)$/.exec(e);if(t?.[1]){r.push(t[1]);continue}let n=/^Skill \((.+)\)$/.exec(e);n?.[1]&&r.push(n[1])}if(r.length>0)return r;let i=n.find(e=>e!==BOOTSTRAP_RUNTIME_SYSTEM_PROMPT&&e!==`Available skills`);return i===void 0?[]:[i]});return[...new Set(n)]}function findRelevantTool(e,n){let r=normalizeText(n),i=e.find(e=>e.name!==`agent`&&e.name!==LOAD_SKILL_TOOL_NAME&&r.includes(normalizeText(e.name)));return i===void 0?/\b(forecast|temperature|weather|wind|rain|snow)\b/u.test(r)?e.find(e=>/\b(forecast|temperature|weather|wind|rain|snow)\b/u.test(normalizeText(`${e.name} ${e.description??``}`)))??null:null:i}function normalizeText(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu,` `).trim()}function createToolCallId(e){return`call_${e.toLowerCase().replace(/[^a-z0-9]+/gu,`_`).replace(/^_+|_+$/gu,``)||`tool`}`}function resolveSystemProbe(e){let t=e.filter(e=>e.role===`system`).map(e=>getPromptContentText(e.content)).join(`
|
|
4
|
-
`);return/hmr-probe:\s*([^\n]+)/iu.exec(t)?.[1]?.trim()||null}function isWeatherPayload(
|
|
4
|
+
`);return/hmr-probe:\s*([^\n]+)/iu.exec(t)?.[1]?.trim()||null}function isWeatherPayload(t){return z.validate(bootstrapWeatherPayloadSchema,t)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{createMockAuthoredRuntimeModel,resolveMockAuthoredRuntimeModel,shouldMockAuthoredRuntimeModels};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-step cache of resolved connection authorization tokens.
|
|
3
3
|
*
|
|
4
|
-
* Keyed by `(
|
|
5
|
-
* session never share a user-scoped token
|
|
4
|
+
* Keyed by `(authorizationScope, principalKey)` so two users on the same
|
|
5
|
+
* session never share a user-scoped token and two resolved connection
|
|
6
|
+
* instances never share credentials. Stored as a virtual
|
|
6
7
|
* context value and wiped between workflow steps, so bearer tokens
|
|
7
8
|
* are never serialized into the durable step payload. Cross-step
|
|
8
9
|
* reuse is delegated to the upstream authorization provider (for
|
|
@@ -16,7 +17,7 @@ import type { AlsContext } from "#context/container.js";
|
|
|
16
17
|
import { ContextKey } from "#context/key.js";
|
|
17
18
|
import type { TokenResult } from "#shared/connection-types.js";
|
|
18
19
|
/**
|
|
19
|
-
* Virtual context key mapping
|
|
20
|
+
* Virtual context key mapping authorization scope to a per-principal
|
|
20
21
|
* {@link TokenResult} cache.
|
|
21
22
|
*
|
|
22
23
|
* The principal sub-key is produced by
|
|
@@ -27,25 +28,25 @@ import type { TokenResult } from "#shared/connection-types.js";
|
|
|
27
28
|
export declare const ConnectionAuthorizationTokensKey: ContextKey<Readonly<Record<string, Readonly<Record<string, TokenResult>>>>>;
|
|
28
29
|
/**
|
|
29
30
|
* Returns the cached {@link TokenResult} for
|
|
30
|
-
* `(
|
|
31
|
+
* `(authorizationScope, principalKey)` when the entry is still valid
|
|
31
32
|
* (not expired). Expired entries are treated as a cache miss so
|
|
32
33
|
* callers re-run the authorization flow.
|
|
33
34
|
*/
|
|
34
|
-
export declare function readCachedToken(ctx: AlsContext,
|
|
35
|
+
export declare function readCachedToken(ctx: AlsContext, authorizationScope: string, principalKey: string): TokenResult | undefined;
|
|
35
36
|
/**
|
|
36
37
|
* Persists a freshly resolved {@link TokenResult} on the cache under
|
|
37
|
-
* `(
|
|
38
|
-
* principals
|
|
38
|
+
* `(authorizationScope, principalKey)`. Existing entries for other
|
|
39
|
+
* principals in the same scope are left in place.
|
|
39
40
|
*
|
|
40
41
|
* Writes to the virtual context slot so the bearer is never serialized
|
|
41
42
|
* into the durable step payload. See the module docblock.
|
|
42
43
|
*/
|
|
43
|
-
export declare function writeCachedToken(ctx: AlsContext,
|
|
44
|
+
export declare function writeCachedToken(ctx: AlsContext, authorizationScope: string, principalKey: string, token: TokenResult): void;
|
|
44
45
|
/**
|
|
45
|
-
* Drops the cached {@link TokenResult} for `(
|
|
46
|
+
* Drops the cached {@link TokenResult} for `(authorizationScope, principalKey)`,
|
|
46
47
|
* if present. Used when the remote server rejects an already-resolved
|
|
47
48
|
* bearer (HTTP 401) so the subsequent re-authorization attempt does not
|
|
48
49
|
* re-read the stale token from the per-step cache. No-op when nothing is
|
|
49
50
|
* cached for the principal.
|
|
50
51
|
*/
|
|
51
|
-
export declare function evictCachedToken(ctx: AlsContext,
|
|
52
|
+
export declare function evictCachedToken(ctx: AlsContext, authorizationScope: string, principalKey: string): void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConnectionProtocol } from "#shared/connection-types.js";
|
|
2
|
+
import type { ResolvedConnectionDefinition } from "#runtime/types.js";
|
|
3
|
+
/** Builds the opaque, reconstruction-stable identity for one resolved connection instance. */
|
|
4
|
+
export declare function createConnectionInstanceId(input: {
|
|
5
|
+
readonly connectionName: string;
|
|
6
|
+
readonly instanceKey?: string;
|
|
7
|
+
readonly protocol: ConnectionProtocol;
|
|
8
|
+
readonly sourceId: string;
|
|
9
|
+
readonly url: string;
|
|
10
|
+
}): string;
|
|
11
|
+
/** Returns the cache and callback scope for one resolved connection. */
|
|
12
|
+
export declare function connectionAuthorizationScope(connection: ResolvedConnectionDefinition): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash}from"node:crypto";function createConnectionInstanceId(t){return`connection:${createHash(`sha256`).update(JSON.stringify([t.sourceId,t.connectionName,t.protocol,t.url,t.instanceKey??``])).digest(`base64url`)}`}function connectionAuthorizationScope(e){return e.instanceId??e.connectionName}export{connectionAuthorizationScope,createConnectionInstanceId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{ConnectionAuthorizationRequiredError}from"#connections/errors.js";import{evictScopedToken,resolveScopedToken}from"#runtime/connections/scoped-authorization.js";import{resolveConnectionAuthorization}from"#runtime/connections/resolve-authorization.js";import{createMCPClient}from"#compiled/@ai-sdk/mcp/index.js";import{omitProvidedArgumentsFromSchema,resolveProvidedArguments}from"#runtime/connections/provided-arguments.js";var McpConnectionClient=class{#e;#t;#n;#r;#i;constructor(e){this.#i=e}async connect(){if(this.#t!==void 0)return this.#t;if(this.#e!==void 0)return this.#e;this.#e=this.#a();try{return this.#t=await this.#e,this.#t}catch(e){throw this.#e=void 0,e}}async#a(){let e=await resolveHeaders(this.#i),t=this.#i.url;try{return await createMCPClient({transport:{type:`http`,url:t,headers:e}})}catch(n){if(!isMcpHttpFallbackRetryableError(n))throw n;return await createMCPClient({transport:{type:`sse`,url:t,headers:e}})}}async getToolMetadata(){return(await this.#o()).metadata}async getTools(){return(await this.#o()).tools}async executeTool(e,t,n){try{let{tools:r}=await this.#o(),i=r[e];if(i?.execute===void 0)throw Error(`Tool "${e}" not found in connection "${this.#i.connectionName}".`);let a=await resolveProvidedArguments({args:t,callId:n.callId,connection:this.#i,toolName:e});return await i.execute(a,{abortSignal:n.abortSignal})}catch(e){return await this.#l(e)}}async#o(){if(this.#r!==void 0)return this.#r;if(this.#n!==void 0)return this.#n;this.#n=this.#s();try{return this.#r=await this.#n,this.#r}catch(e){throw this.#n=void 0,e}}async#s(){try{return await this.#c()}catch(e){return await this.#l(e)}}async#c(){let e=await this.connect(),t=await e.listTools(),n=this.#i.tools,r=n===void 0?t.tools:t.tools.filter(e=>passesToolFilter(e.name,n)),i=Object.keys(this.#i.toolCall?.providedArguments??{}),a=r.map(e=>({...e,inputSchema:omitProvidedArgumentsFromSchema(e.inputSchema,i)})),o=e.toolsFromDefinitions({tools:a});return{metadata:a.map(e=>({annotations:e.annotations,description:e.description??``,inputSchema:e.inputSchema??{},name:e.name,outputSchema:`outputSchema`in e&&e.outputSchema!==void 0?e.outputSchema:void 0})),tools:o}}async close(){this.#t!==void 0&&(await this.#t.close(),this.#t=void 0),this.#e=void 0,this.#n=void 0,this.#r=void 0}async#l(e){throw isMcpAuthRequiredError(e)?(await this.#u(),await this.close(),new ConnectionAuthorizationRequiredError(this.#i.connectionName,{message:`Connection "${this.#i.connectionName}" requires authorization (the server rejected the token).`})):e}async#u(){let e=await resolveConnectionAuthorization(this.#i);e!==void 0&&await evictScopedToken({authorization:e,connection:{url:this.#i.url},scope:this.#i.connectionName})}};function isMcpAuthRequiredError(e){return readHttpStatus(e)===401}function isMcpHttpFallbackRetryableError(e){let t=readHttpStatus(e);return t===400||t===404||t===405}function readHttpStatus(t){for(let n of walkErrorChain(t)){if(!isObject(n))continue;let t=readStatusField(n);if(t!==void 0)return t;let r=n.response;if(isObject(r)){let e=readStatusField(r);if(e!==void 0)return e}if(typeof n.message==`string`){let e=/\bHTTP\s+(\d{3})\b/u.exec(n.message);if(e?.[1]!==void 0)return Number(e[1])}}}function readStatusField(e){if(typeof e.status==`number`)return e.status;if(typeof e.statusCode==`number`)return e.statusCode}function*walkErrorChain(t){let n=t,r=new Set;for(;n!=null&&!r.has(n);){if(r.add(n),yield n,!isObject(n)||!(`cause`in n))return;n=n.cause}}function passesToolFilter(e,t){return t===void 0?!0:`allow`in t?t.allow.includes(e):!t.block.includes(e)}async function resolveHeaders(e){let n={},r,getCallbackContext=()=>r??=buildCallbackContext(),i=await resolveConnectionAuthorization(e,typeof e.authorization==`function`?getCallbackContext():void 0);if(i!==void 0&&(n.Authorization=`Bearer ${(await resolveToken(e,i)).token}`),e.headers!==void 0){let t=await resolveHeadersDefinition(e.headers,getCallbackContext);for(let[r,a]of Object.entries(t)){if(i!==void 0&&r.toLowerCase()===`authorization`)throw Error(`Connection "${e.connectionName}" headers must not include an "Authorization" key when "authorization" is also provided.`);n[r]=a}}return n}async function resolveToken(e,t){return await resolveScopedToken({authorization:t,connection:{url:e.url},scope:e.connectionName})}async function resolveHeadersDefinition(e,t){if(typeof e==`function`)return{...await e(t())};let n={},r=Object.entries(e);for(let[e,i]of r)n[e]=await resolveHeaderValue(i,t);return n}async function resolveHeaderValue(e,t){return typeof e==`function`?await e(t()):await e}export{McpConnectionClient,isMcpAuthRequiredError,passesToolFilter,resolveHeaders};
|
|
1
|
+
import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{ConnectionAuthorizationRequiredError}from"#connections/errors.js";import{evictScopedToken,resolveScopedToken}from"#runtime/connections/scoped-authorization.js";import{resolveConnectionAuthorization}from"#runtime/connections/resolve-authorization.js";import{createMCPClient}from"#compiled/@ai-sdk/mcp/index.js";import{omitProvidedArgumentsFromSchema,resolveProvidedArguments}from"#runtime/connections/provided-arguments.js";var McpConnectionClient=class{#e;#t;#n;#r;#i;constructor(e){this.#i=e}async connect(){if(this.#t!==void 0)return this.#t;if(this.#e!==void 0)return this.#e;this.#e=this.#a();try{return this.#t=await this.#e,this.#t}catch(e){throw this.#e=void 0,e}}async#a(){let e=await resolveHeaders(this.#i),t=this.#i.url;try{return await createMCPClient({transport:{type:`http`,url:t,headers:e}})}catch(n){if(!isMcpHttpFallbackRetryableError(n))throw n;return await createMCPClient({transport:{type:`sse`,url:t,headers:e}})}}async getToolMetadata(){return(await this.#o()).metadata}async getTools(){return(await this.#o()).tools}async executeTool(e,t,n){try{let{tools:r}=await this.#o(),i=r[e];if(i?.execute===void 0)throw Error(`Tool "${e}" not found in connection "${this.#i.connectionName}".`);let a=await resolveProvidedArguments({args:t,callId:n.callId,connection:this.#i,toolName:e});return await i.execute(a,{abortSignal:n.abortSignal})}catch(e){return await this.#l(e)}}async#o(){if(this.#r!==void 0)return this.#r;if(this.#n!==void 0)return this.#n;this.#n=this.#s();try{return this.#r=await this.#n,this.#r}catch(e){throw this.#n=void 0,e}}async#s(){try{return await this.#c()}catch(e){return await this.#l(e)}}async#c(){let e=await this.connect(),t=await e.listTools(),n=this.#i.tools,r=n===void 0?t.tools:t.tools.filter(e=>passesToolFilter(e.name,n)),i=Object.keys(this.#i.toolCall?.providedArguments??{}),a=r.map(e=>({...e,inputSchema:omitProvidedArgumentsFromSchema(e.inputSchema,i)})),o=e.toolsFromDefinitions({tools:a});return{metadata:a.map(e=>({annotations:e.annotations,description:e.description??``,inputSchema:e.inputSchema??{},name:e.name,outputSchema:`outputSchema`in e&&e.outputSchema!==void 0?e.outputSchema:void 0})),tools:o}}async close(){this.#t!==void 0&&(await this.#t.close(),this.#t=void 0),this.#e=void 0,this.#n=void 0,this.#r=void 0}async#l(e){throw isMcpAuthRequiredError(e)?(await this.#u(),await this.close(),new ConnectionAuthorizationRequiredError(this.#i.connectionName,{message:`Connection "${this.#i.connectionName}" requires authorization (the server rejected the token).`})):e}async#u(){let e=await resolveConnectionAuthorization(this.#i);e!==void 0&&await evictScopedToken({authorization:e,connection:{url:this.#i.url},instanceId:this.#i.instanceId,scope:this.#i.connectionName})}};function isMcpAuthRequiredError(e){return readHttpStatus(e)===401}function isMcpHttpFallbackRetryableError(e){let t=readHttpStatus(e);return t===400||t===404||t===405}function readHttpStatus(t){for(let n of walkErrorChain(t)){if(!isObject(n))continue;let t=readStatusField(n);if(t!==void 0)return t;let r=n.response;if(isObject(r)){let e=readStatusField(r);if(e!==void 0)return e}if(typeof n.message==`string`){let e=/\bHTTP\s+(\d{3})\b/u.exec(n.message);if(e?.[1]!==void 0)return Number(e[1])}}}function readStatusField(e){if(typeof e.status==`number`)return e.status;if(typeof e.statusCode==`number`)return e.statusCode}function*walkErrorChain(t){let n=t,r=new Set;for(;n!=null&&!r.has(n);){if(r.add(n),yield n,!isObject(n)||!(`cause`in n))return;n=n.cause}}function passesToolFilter(e,t){return t===void 0?!0:`allow`in t?t.allow.includes(e):!t.block.includes(e)}async function resolveHeaders(e){let n={},r,getCallbackContext=()=>r??=buildCallbackContext(),i=await resolveConnectionAuthorization(e,typeof e.authorization==`function`?getCallbackContext():void 0);if(i!==void 0&&(n.Authorization=`Bearer ${(await resolveToken(e,i)).token}`),e.headers!==void 0){let t=await resolveHeadersDefinition(e.headers,getCallbackContext);for(let[r,a]of Object.entries(t)){if(i!==void 0&&r.toLowerCase()===`authorization`)throw Error(`Connection "${e.connectionName}" headers must not include an "Authorization" key when "authorization" is also provided.`);n[r]=a}}return n}async function resolveToken(e,t){return await resolveScopedToken({authorization:t,connection:{url:e.url},instanceId:e.instanceId,scope:e.connectionName})}async function resolveHeadersDefinition(e,t){if(typeof e==`function`)return{...await e(t())};let n={},r=Object.entries(e);for(let[e,i]of r)n[e]=await resolveHeaderValue(i,t);return n}async function resolveHeaderValue(e,t){return typeof e==`function`?await e(t()):await e}export{McpConnectionClient,isMcpAuthRequiredError,passesToolFilter,resolveHeaders};
|
|
@@ -12,6 +12,8 @@ import type { ConnectionRegistry } from "#runtime/connections/registry-types.js"
|
|
|
12
12
|
export declare class ConnectionRegistryImpl implements ConnectionRegistry {
|
|
13
13
|
#private;
|
|
14
14
|
constructor(connections: readonly ResolvedConnectionDefinition[]);
|
|
15
|
+
/** Replaces one complete dynamic scope and closes clients whose definition changed. */
|
|
16
|
+
replaceDynamicConnections(scope: "session" | "turn", connectionsByResolver: ReadonlyMap<string, readonly ResolvedConnectionDefinition[]>): Promise<void>;
|
|
15
17
|
/**
|
|
16
18
|
* Returns the client for the named connection, creating it on first
|
|
17
19
|
* access. The connection's `protocol` selects the client type.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{McpConnectionClient}from"#runtime/connections/mcp-client.js";import{OpenApiConnectionClient}from"#runtime/connections/openapi-client.js";var ConnectionRegistryImpl=class{#e=new Map;#t;constructor(e){this.#t=e}getClient(n){let r=this.#e.get(n);if(r!==void 0)return r;let i=this.#t.find(e=>e.connectionName===n);if(i===void 0)throw Error(`Connection "${n}" is not registered.`);let a=i.protocol===`openapi`?new OpenApiConnectionClient(i):new McpConnectionClient(i);return this.#e.set(n,a),a}getConnectionApproval(e){return this.#t.find(t=>t.connectionName===e)?.approval}getConnectionNames(){return this.#t.map(e=>e.connectionName)}getConnections(){return this.#t}async dispose(){let e=[...this.#e.values()].map(e=>e.close());await Promise.allSettled(e),this.#e.clear()}};export{ConnectionRegistryImpl};
|
|
1
|
+
import{McpConnectionClient}from"#runtime/connections/mcp-client.js";import{OpenApiConnectionClient}from"#runtime/connections/openapi-client.js";var ConnectionRegistryImpl=class{#e=new Map;#t;#n;#r=new Map;#i=new Map;constructor(e){this.#n=e,this.#t=e}async replaceDynamicConnections(e,t){let n=e===`session`?new Map(t):this.#r,r=e===`turn`?new Map(t):this.#i,i=this.#a(n,r),a=new Map(this.#t.map(e=>[e.connectionName,e])),o=new Map(i.map(e=>[e.connectionName,e])),s=[];for(let[e,t]of this.#e)a.get(e)!==o.get(e)&&(this.#e.delete(e),s.push(t));this.#r=n,this.#i=r,this.#t=i,await Promise.allSettled(s.map(e=>e.close()))}#a(e,t){let n=new Map(e);for(let[e,r]of t)n.set(e,r);let r=new Map,i=new Map(this.#n.map(e=>[e.connectionName,e]));for(let[e,t]of n)for(let n of t){let t=r.get(n.connectionName);if(t!==void 0&&t!==e)throw Error(`Dynamic connection "${n.connectionName}" from resolver "${e}" collides with dynamic resolver "${t}". Namespace the map key manually.`);r.set(n.connectionName,e),i.set(n.connectionName,n)}return[...i.values()]}getClient(n){let r=this.#e.get(n);if(r!==void 0)return r;let i=this.#t.find(e=>e.connectionName===n);if(i===void 0)throw Error(`Connection "${n}" is not registered.`);let a=i.protocol===`openapi`?new OpenApiConnectionClient(i):new McpConnectionClient(i);return this.#e.set(n,a),a}getConnectionApproval(e){return this.#t.find(t=>t.connectionName===e)?.approval}getConnectionNames(){return this.#t.map(e=>e.connectionName)}getConnections(){return this.#t}async dispose(){let e=[...this.#e.values()].map(e=>e.close());await Promise.allSettled(e),this.#e.clear()}};export{ConnectionRegistryImpl};
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Scope-parameterized authorization flow shared by MCP connections and
|
|
3
3
|
* authored tools that declare `auth`.
|
|
4
4
|
*
|
|
5
|
-
* A *scope*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* A *scope* names the framework-owned callback URL — a connection name for
|
|
6
|
+
* an MCP connection, a tool name for tool-hosted auth. Connection-hosted
|
|
7
|
+
* authorization also carries an opaque instance ID that keys its token cache
|
|
8
|
+
* and pins callback completion to the exact resolved connection. Everything else
|
|
8
9
|
* (principal resolution, the park/resume webhook dance, the loop guard)
|
|
9
10
|
* is identical across both, so it lives here once instead of being
|
|
10
11
|
* duplicated per caller.
|
|
@@ -21,6 +22,8 @@ import { type AuthorizationDefinition, type ConnectionAuthorizationContext, type
|
|
|
21
22
|
*/
|
|
22
23
|
export interface ScopedAuthorization {
|
|
23
24
|
readonly boundResponder?: SessionAuthContext;
|
|
25
|
+
/** Opaque resolved instance identity for connection-hosted authorization. */
|
|
26
|
+
readonly instanceId?: string;
|
|
24
27
|
readonly scope: string;
|
|
25
28
|
readonly authorization: Readonly<AuthorizationDefinition>;
|
|
26
29
|
readonly connection: ConnectionAuthorizationContext;
|
|
@@ -29,9 +32,10 @@ export interface ScopedAuthorization {
|
|
|
29
32
|
* Resolves a bearer token for one scope, consulting the per-step token
|
|
30
33
|
* cache before invoking the authored `getToken`.
|
|
31
34
|
*
|
|
32
|
-
* The cache is keyed by `(scope, principalKey(principal))` so
|
|
33
|
-
* users
|
|
34
|
-
* runtime scope the cache is unavailable, but
|
|
35
|
+
* The cache is keyed by `(instanceId ?? scope, principalKey(principal))` so
|
|
36
|
+
* concurrent users and resolved connection instances never alias onto each
|
|
37
|
+
* other's bearer. Outside a runtime scope the cache is unavailable, but
|
|
38
|
+
* `getToken` still runs with
|
|
35
39
|
* a framework-resolved principal so ad-hoc `"app"`-scoped use keeps
|
|
36
40
|
* working; `"user"`-scoped strategies without a context fail fast inside
|
|
37
41
|
* {@link resolveConnectionPrincipal}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{contextStorage,loadContext}from"#context/container.js";import{consumeAuthorizationResult,createAuthorizationAttempt,requestAuthorization}from"#harness/authorization.js";import{supportsInteractiveAuthorization}from"#shared/connection-types.js";import{evictCachedToken,readCachedToken,writeCachedToken}from"#runtime/connections/authorization-tokens.js";import{principalKey,resolveConnectionPrincipal,resolveConnectionPrincipalFromAuth}from"#runtime/connections/principal.js";const LOCAL_HTTP_VERCEL_CONNECT_HOSTNAMES=new Set([`127.0.0.1`,`[::1]`]);async function resolveScopedToken(t){let{scope:n,authorization:r,connection:i}=t,a=contextStorage.getStore(),
|
|
1
|
+
import{contextStorage,loadContext}from"#context/container.js";import{consumeAuthorizationResult,createAuthorizationAttempt,requestAuthorization}from"#harness/authorization.js";import{supportsInteractiveAuthorization}from"#shared/connection-types.js";import{evictCachedToken,readCachedToken,writeCachedToken}from"#runtime/connections/authorization-tokens.js";import{principalKey,resolveConnectionPrincipal,resolveConnectionPrincipalFromAuth}from"#runtime/connections/principal.js";const LOCAL_HTTP_VERCEL_CONNECT_HOSTNAMES=new Set([`127.0.0.1`,`[::1]`]);async function resolveScopedToken(t){let{scope:n,authorization:r,connection:i}=t,a=t.instanceId??n,o=contextStorage.getStore(),u=resolveScopedPrincipal(t,o);if(o===void 0)return await r.getToken({connection:i,principal:u});let d=principalKey(u),f=readCachedToken(o,a,d);if(f!==void 0)return f;let p=await r.getToken({connection:i,principal:u});return writeCachedToken(o,a,d,p),p}async function evictScopedToken(t){let{scope:n,authorization:r,connection:i}=t,a=t.instanceId??n,s=contextStorage.getStore();if(s===void 0)return;let c;try{c=resolveScopedPrincipal(t,s),evictCachedToken(s,a,principalKey(c))}catch{return}try{await r.evict?.({connection:i,principal:c})}catch{}}async function completeScopedAuthorization(e){let{scope:r,authorization:i,connection:o}=e;if(!supportsInteractiveAuthorization(i))return!1;let s=consumeAuthorizationResult(r,e.instanceId);if(s===void 0)return!1;let u=i,d=loadContext(),f=s.principal??resolveScopedPrincipal(e,d),p=await u.completeAuthorization({callbackUrl:s.hookUrl,connection:o,principal:f,resume:s.resume,callback:s.callback});return writeCachedToken(d,e.instanceId??r,principalKey(f),p),!0}async function startScopedAuthorization(e){let{scope:t,authorization:n,connection:o}=e;if(!supportsInteractiveAuthorization(n))return;let s=createAuthorizationAttempt(t);if(s===void 0)return;let c=n,l=resolveScopedPrincipal(e),u=resolveAuthorizationCallbackUrl({authorization:n,callbackUrl:s.hookUrl}),{challenge:d,resume:f}=await c.startAuthorization({callbackUrl:u,connection:o,principal:l});return requestAuthorization([{attemptId:s.attemptId,challenge:stampChallengeDisplayName(d,n),hookUrl:u,instanceId:e.instanceId,name:t,principal:l,resume:f}])}function resolveScopedPrincipal(e,t){return e.boundResponder===void 0?resolveConnectionPrincipal(e.scope,e.authorization,t):resolveConnectionPrincipalFromAuth(e.scope,e.authorization,e.boundResponder,t)}function resolveAuthorizationCallbackUrl(e){if(e.authorization.vercelConnect===void 0)return e.callbackUrl;let t;try{t=new URL(e.callbackUrl)}catch{return e.callbackUrl}return t.protocol!==`http:`||!LOCAL_HTTP_VERCEL_CONNECT_HOSTNAMES.has(t.hostname)?e.callbackUrl:(t.hostname=`localhost`,t.toString())}function stampChallengeDisplayName(e,t){let n=t.displayName??e.displayName;return n===e.displayName?e:{...e,displayName:n}}export{completeScopedAuthorization,evictScopedToken,resolveAuthorizationCallbackUrl,resolveScopedToken,stampChallengeDisplayName,startScopedAuthorization};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ResolveAgentError,createResolvedModuleSourceRef}from"#runtime/resolve-helpers.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{
|
|
1
|
+
import{resolveConnectionDefinition}from"#runtime/resolve-connection.js";import{ResolveAgentError,createResolvedModuleSourceRef}from"#runtime/resolve-helpers.js";import{resolveChannelDefinition}from"#runtime/resolve-channel.js";import{resolveDynamicConnectionDefinition}from"#runtime/resolve-dynamic-connection.js";import{resolveHookDefinition}from"#runtime/resolve-hook.js";import{resolveSandboxDefinition}from"#runtime/resolve-sandbox.js";import{resolveDynamicInstructionsDefinition}from"#runtime/resolve-dynamic-instructions.js";import{resolveDynamicSkillDefinition}from"#runtime/resolve-dynamic-skill.js";import{resolveDynamicToolDefinition}from"#runtime/resolve-dynamic-tool.js";import{resolveToolDefinition}from"#runtime/resolve-tool.js";import{resolveMemoryDefinition}from"#runtime/resolve-memory.js";async function resolveAgent(t){let n=t.manifest.skills.map(e=>({...e,owner:requireCompiledSourceOwner(t.manifest,e),metadata:e.metadata===void 0?void 0:{...e.metadata}})),i=await Promise.all(t.manifest.channelRoutes.effective.map(e=>resolveChannelDefinition(e,t.moduleMap,t.nodeId))),a=await Promise.all(t.manifest.tools.map(e=>resolveToolDefinition(e,t.moduleMap,t.nodeId,requireBindingOwner(t.manifest,e.sourceId)))),o=await Promise.all(t.manifest.dynamicConnections.map(e=>resolveDynamicConnectionDefinition(e,t.moduleMap,t.nodeId))),s=await Promise.all((t.manifest.dynamicInstructions??[]).map(e=>resolveDynamicInstructionsDefinition(e,t.moduleMap,t.nodeId))),c=await Promise.all((t.manifest.dynamicSkills??[]).map(e=>resolveDynamicSkillDefinition(e,t.moduleMap,t.nodeId))),l=await Promise.all(t.manifest.dynamicTools.map(e=>resolveDynamicToolDefinition(e,t.moduleMap,t.nodeId))),u=await Promise.all(t.manifest.hooks.map(e=>resolveHookDefinition(e,t.moduleMap,t.nodeId))),d=await Promise.all(t.manifest.connections.map(n=>resolveConnectionDefinition(n,t.moduleMap,t.nodeId))),f=await Promise.all(t.manifest.memories.map(e=>resolveMemoryDefinition(e,t.moduleMap,t.nodeId))),p=await resolveSandboxDefinition(t.manifest.sandbox,t.moduleMap,t.nodeId),m=t.manifest.instructions.map(e=>createResolvedInstructionsDefinition(t.manifest,e)),h=t.manifest.workspaceResourceRoot,g={channels:i,connections:d,dynamicConnectionResolvers:o,workflowTool:t.manifest.workflowTool===void 0?void 0:{maxSubagents:t.manifest.workflowTool.maxSubagents},webSearchProvider:t.manifest.webSearchProvider,dynamicInstructionsResolvers:s,dynamicSkillResolvers:c,dynamicToolResolvers:l,hooks:u,instructions:m,metadata:{agentRoot:t.manifest.agentRoot,appRoot:t.manifest.appRoot,diagnosticsSummary:t.manifest.diagnosticsSummary},memories:f,sandbox:p,workspaceResourceRoot:h,skills:n,tools:a,workspaceSpec:{rootEntries:[...h.rootEntries]}};return`config`in t.manifest?{...g,config:createResolvedAgentConfig(t.manifest)}:g}function requireBindingOwner(e,t){let n=e.bindings[t];if(n===void 0)throw Error(`Compiled source "${t}" has no binding.`);return n.owner}function createResolvedInstructionsDefinition(e,t){return{content:t.content,name:t.name,owner:requireCompiledSourceOwner(e,t),logicalPath:t.logicalPath,role:t.role,sourceId:t.sourceId,sourceKind:t.sourceKind}}function requireCompiledSourceOwner(e,t){let n=e.bindings[t.sourceId]?.owner??t.owner;if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return n}function createResolvedAgentConfig(e){let t={name:e.config.name};if(e.config.compaction!==void 0){let n={};e.config.compaction.model!==void 0&&(n.model=e.config.compaction.model.source===void 0?{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions}:{contextWindowTokens:e.config.compaction.model.contextWindowTokens,id:e.config.compaction.model.id,maxOutputTokens:e.config.compaction.model.maxOutputTokens,providerOptions:e.config.compaction.model.providerOptions,source:{exportName:e.config.compaction.model.source.exportName,sourceKind:`module`,logicalPath:e.config.compaction.model.source.logicalPath,sourceId:e.config.compaction.model.source.sourceId}}),e.config.compaction.thresholdPercent!==void 0&&(n.thresholdPercent=e.config.compaction.thresholdPercent),t.compaction=n}if(e.config.experimental!==void 0&&(t.experimental={instrumentationProviders:e.config.experimental.instrumentationProviders,tasks:e.config.experimental.tasks,workflow:e.config.experimental.workflow===void 0?void 0:{world:e.config.experimental.workflow.world}}),e.config.outputSchema!==void 0&&(t.outputSchema=e.config.outputSchema),e.config.reasoning!==void 0&&(t.reasoning=e.config.reasoning),e.config.source!==void 0&&(t.source=createResolvedModuleSourceRef(e.config.source)),e.config.limits!==void 0&&(t.limits={maxInputTokensPerSession:e.config.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.config.limits.maxOutputTokensPerSession,sessionTimeoutMs:e.config.limits.sessionTimeoutMs}),e.config.dynamicModel!==void 0)return{...t,dynamicModel:{...createResolvedModuleSourceRef(e.config.dynamicModel),eventNames:[...e.config.dynamicModel.eventNames]}};let r=e.config.model;return{...t,model:r.source===void 0?{id:r.id,contextWindowTokens:r.contextWindowTokens,maxOutputTokens:r.maxOutputTokens,providerOptions:r.providerOptions}:{contextWindowTokens:r.contextWindowTokens,id:r.id,maxOutputTokens:r.maxOutputTokens,providerOptions:r.providerOptions,source:{exportName:r.source.exportName,sourceKind:`module`,logicalPath:r.source.logicalPath,sourceId:r.source.sourceId}}}}export{ResolveAgentError,resolveAgent};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CompiledConnectionDefinition } from "#compiler/manifest.js";
|
|
2
2
|
import type { CompiledModuleMap } from "#compiler/module-map.js";
|
|
3
3
|
import type { ResolvedConnectionDefinition } from "#runtime/types.js";
|
|
4
|
+
import type { ModuleSourceRef } from "#shared/source-ref.js";
|
|
4
5
|
/**
|
|
5
6
|
* Resolves one compiled connection entry into a runtime-owned definition
|
|
6
7
|
* with the live `auth`, `headers`, and `tools` objects attached
|
|
@@ -13,3 +14,7 @@ import type { ResolvedConnectionDefinition } from "#runtime/types.js";
|
|
|
13
14
|
* variables, `AlsContext`, etc.).
|
|
14
15
|
*/
|
|
15
16
|
export declare function resolveConnectionDefinition(definition: CompiledConnectionDefinition, moduleMap: CompiledModuleMap, nodeId: string | undefined): Promise<ResolvedConnectionDefinition>;
|
|
17
|
+
/** Resolves one branded connection returned by a dynamic connection handler. */
|
|
18
|
+
export declare function resolveDynamicConnectionValue(value: unknown, source: Readonly<ModuleSourceRef & {
|
|
19
|
+
readonly connectionName: string;
|
|
20
|
+
}>): ResolvedConnectionDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{registerDefinitionSource,stampDefinitionKey}from"#internal/authored-definition/source-identity.js";import{normalizeAuthorizationSpec}from"#shared/validate-authorization.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveConnectionDefinition(
|
|
1
|
+
import{expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{normalizeMcpClientConnectionDefinition,normalizeOpenApiConnectionDefinition}from"#internal/authored-definition/connection.js";import{readStampedConnectionProtocol}from"#public/definitions/connections/protocol.js";import{registerDefinitionSource,stampDefinitionKey}from"#internal/authored-definition/source-identity.js";import{normalizeAuthorizationSpec}from"#shared/validate-authorization.js";import{createConnectionInstanceId}from"#runtime/connections/instance-identity.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveConnectionDefinition(n,r,i){try{let c=expectObjectRecord(await loadResolvedModuleExport({definition:n,kindLabel:`connection`,moduleMap:r,nodeId:i}),`Expected the connection export "${n.exportName??`default`}" from "${n.logicalPath}" to return an object.`),l={kind:`connection`,logicalPath:n.logicalPath,name:n.connectionName},u=`connection-source:${n.sourceId}`;stampDefinitionKey(c,u),registerDefinitionSource(u,l),registerDefinitionSource(`connection:${n.url}`,l);let d=c.auth!==void 0,f=c.headers!==void 0,p=n.protocol===`openapi`?c.operations:c.tools,m={connectionName:n.connectionName,description:n.description,exportName:n.exportName,logicalPath:n.logicalPath,instanceId:createConnectionInstanceId({connectionName:n.connectionName,instanceKey:typeof c.instanceKey==`string`?c.instanceKey:void 0,protocol:n.protocol,sourceId:n.sourceId,url:n.url}),protocol:n.protocol,sourceId:n.sourceId,sourceKind:`module`,url:n.url};if(d)if(typeof c.auth==`function`)m.authorization=c.auth;else try{m.authorization=normalizeAuthorizationSpec(c.auth,`Connection "${n.connectionName}" at "${n.logicalPath}":`)}catch(e){throw new ResolveAgentError(toErrorMessage(e),{logicalPath:n.logicalPath,sourceId:n.sourceId})}return f&&(m.headers=c.headers),c.toolCall!==void 0&&(m.toolCall=c.toolCall),p!==void 0&&(m.tools=p),n.protocol===`openapi`&&c.spec!==void 0&&(m.spec=c.spec),typeof c.approval==`function`&&(m.approval=c.approval),m}catch(e){throw e instanceof ResolveAgentError?e:new ResolveAgentError(`Failed to resolve connection "${n.connectionName}" from "${n.logicalPath}": ${toErrorMessage(e)}`,{logicalPath:n.logicalPath,sourceId:n.sourceId})}}function resolveDynamicConnectionValue(e,t){let a=readStampedConnectionProtocol(e),o=`Dynamic connection "${t.connectionName}" from "${t.logicalPath}" must be created by defineMcpClientConnection() or defineOpenAPIConnection().`;if(a===void 0)throw Error(o);let s={kind:`connection`,logicalPath:t.logicalPath,name:t.connectionName},c=`dynamic-connection-source:${t.sourceId}:${t.connectionName}`;if(stampDefinitionKey(e,c),registerDefinitionSource(c,s),a===`openapi`){let n=normalizeOpenApiConnectionDefinition(e,o);return assertAuthenticatedDynamicInstanceKey(n.auth,n.instanceKey,o),omitUndefined({approval:n.approval,authorization:n.auth,connectionName:t.connectionName,description:n.description,exportName:t.exportName,headers:n.headers,instanceId:createConnectionInstanceId({connectionName:t.connectionName,instanceKey:n.instanceKey,protocol:a,sourceId:t.sourceId,url:n.baseUrl??``}),logicalPath:t.logicalPath,protocol:a,sourceId:t.sourceId,sourceKind:`module`,spec:n.spec,toolCall:n.toolCall,tools:n.operations,url:n.baseUrl??``})}let l=normalizeMcpClientConnectionDefinition(e,o);return assertAuthenticatedDynamicInstanceKey(l.auth,l.instanceKey,o),omitUndefined({approval:l.approval,authorization:l.auth,connectionName:t.connectionName,description:l.description,exportName:t.exportName,headers:l.headers,instanceId:createConnectionInstanceId({connectionName:t.connectionName,instanceKey:l.instanceKey,protocol:a,sourceId:t.sourceId,url:l.url}),logicalPath:t.logicalPath,protocol:a,sourceId:t.sourceId,sourceKind:`module`,toolCall:l.toolCall,tools:l.tools,url:l.url})}function assertAuthenticatedDynamicInstanceKey(e,t,n){if(!(e===void 0||t!==void 0))throw Error(`${n} Authenticated dynamic connections must set "instanceKey" to a stable, non-secret account or tenant identifier.`)}function omitUndefined(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}export{resolveConnectionDefinition,resolveDynamicConnectionValue};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CompiledDynamicConnectionDefinition } from "#compiler/manifest.js";
|
|
2
|
+
import type { CompiledModuleMap } from "#compiler/module-map.js";
|
|
3
|
+
import type { ResolvedDynamicConnectionResolver } from "#runtime/types.js";
|
|
4
|
+
/** Reattaches live event handlers for one compiled dynamic connection source. */
|
|
5
|
+
export declare function resolveDynamicConnectionDefinition(definition: CompiledDynamicConnectionDefinition, moduleMap: CompiledModuleMap, nodeId: string | undefined): Promise<ResolvedDynamicConnectionResolver>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isDynamicSentinel}from"#dynamic/definition.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveDynamicConnectionDefinition(i,a,o){try{let n=expectObjectRecord(await loadResolvedModuleExport({definition:i,kindLabel:`dynamic connection`,moduleMap:a,nodeId:o}),describe(i,`to return an object`));if(!isDynamicSentinel(n))throw Error(describe(i,`to be created by defineDynamic()`));let r=expectObjectRecord(n.events,describe(i,`to provide an events object`)),s={};for(let t of i.eventNames)s[t]=expectFunction(r[t],describe(i,`to provide a handler for event "${t}"`));return{eventNames:[...i.eventNames],events:s,exportName:i.exportName,extensionNamespace:i.extensionNamespace,logicalPath:i.logicalPath,slug:i.slug,sourceId:i.sourceId,sourceKind:`module`}}catch(e){throw e instanceof ResolveAgentError?e:new ResolveAgentError(`Failed to resolve dynamic connection from "${i.logicalPath}": ${toErrorMessage(e)}`,{logicalPath:i.logicalPath,sourceId:i.sourceId})}}function describe(e,t){return`Expected the dynamic connection export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveDynamicConnectionDefinition};
|
|
@@ -83,6 +83,8 @@ export interface ResolvedConnectionDefinition extends ResolvedModuleSourceRef {
|
|
|
83
83
|
readonly connectionName: string;
|
|
84
84
|
readonly description: string;
|
|
85
85
|
readonly headers?: Readonly<HeadersDefinition>;
|
|
86
|
+
/** Opaque identity used to pin authorization and credential state to this resolved instance. */
|
|
87
|
+
readonly instanceId?: string;
|
|
86
88
|
readonly toolCall?: Readonly<ConnectionToolCallDefinition>;
|
|
87
89
|
/**
|
|
88
90
|
* Wire protocol. Selects the runtime client implementation. `tools`
|
|
@@ -309,6 +311,14 @@ export interface ResolvedDynamicToolResolver extends Readonly<ModuleSourceRef> {
|
|
|
309
311
|
*/
|
|
310
312
|
readonly extensionNamespace?: string;
|
|
311
313
|
}
|
|
314
|
+
/** Runtime resolver for dynamic connections declared in `agent/connections/`. */
|
|
315
|
+
export interface ResolvedDynamicConnectionResolver extends Readonly<ModuleSourceRef> {
|
|
316
|
+
readonly slug: string;
|
|
317
|
+
readonly eventNames: readonly string[];
|
|
318
|
+
readonly events: Readonly<Record<string, (event: unknown, ctx: unknown) => unknown | Promise<unknown>>>;
|
|
319
|
+
/** Map results from extensions receive this mount namespace. */
|
|
320
|
+
readonly extensionNamespace?: string;
|
|
321
|
+
}
|
|
312
322
|
export type ResolvedMemoryDefinition = Readonly<MemoryDefinition & ModuleSourceRef & {
|
|
313
323
|
readonly slot: string;
|
|
314
324
|
readonly visibility: "scope" | "session";
|
|
@@ -345,6 +355,7 @@ export interface ResolvedAgent {
|
|
|
345
355
|
readonly channels: readonly ResolvedChannelDefinition[];
|
|
346
356
|
readonly config?: ResolvedAgentDefinition;
|
|
347
357
|
readonly connections: readonly ResolvedConnectionDefinition[];
|
|
358
|
+
readonly dynamicConnectionResolvers?: readonly ResolvedDynamicConnectionResolver[];
|
|
348
359
|
/**
|
|
349
360
|
* Configuration for the experimental framework `Workflow` orchestration
|
|
350
361
|
* tool. Present when an authored tool module exports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{literal,object,string}from"../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{validate}from"../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/parse.js";import{literal,object,string}from"../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{toErrorMessage}from"#shared/errors.js";import{getVercelOidcToken}from"#compiled/@vercel/oidc/index.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";const VercelOidcClaimsSchema=object({owner_id:string().min(1),project_id:string().min(1)}),LocalDevelopmentUserOidcClaimsSchema=VercelOidcClaimsSchema.extend({environment:literal(`development`),user_id:string().min(1)});async function resolveDevelopmentOidcToken(e){try{let t={team:e.ownerId,project:e.projectId};return e.forceRefresh===!0&&(t.expirationBufferMs=2**53-1),validateDevelopmentOidcToken((await getVercelOidcToken(t)).trim(),e)}catch(e){return{kind:`resolution-failed`,message:toErrorMessage(e)}}}async function resolveLinkedDevelopmentOidcToken(e){let t=await readVercelProjectLink(e);if(t===void 0)return``;let n={ownerId:t.orgId,projectId:t.projectId},r=await resolveDevelopmentOidcToken(n);if(r.kind===`resolved`&&isLocalDevelopmentUserToken(r.token))return r.token;if(r.kind!==`resolved`&&r.kind!==`target-mismatch`)return``;let i=await resolveDevelopmentOidcToken({...n,forceRefresh:!0});return i.kind===`resolved`&&isLocalDevelopmentUserToken(i.token)?i.token:``}function isLocalDevelopmentUserToken(t){let n=decodeOidcPayload(t);return n!==void 0&&validate(LocalDevelopmentUserOidcClaimsSchema,n)}function validateDevelopmentOidcToken(e,t){let n=decodeOidcPayload(e);if(n===void 0)return e.split(`.`)[1]?{kind:`malformed-token`,reason:`invalid-json-payload`}:{kind:`malformed-token`,reason:`missing-payload`};let r=VercelOidcClaimsSchema.safeParse(n);if(!r.success)return{kind:`invalid-claims`,invalidClaims:r.error.issues.map(e=>{let t=e.path[0];return t===`owner_id`||t===`project_id`?t:`claims`})};let i=[];return r.data.owner_id!==t.ownerId&&i.push(`owner_id`),r.data.project_id!==t.projectId&&i.push(`project_id`),i.length>0?{kind:`target-mismatch`,mismatchedClaims:i}:{kind:`resolved`,token:e}}function decodeOidcPayload(e){let t=e.split(`.`)[1];if(t)try{return JSON.parse(Buffer.from(t,`base64url`).toString(`utf8`))}catch{return}}const VERCEL_PROTECTION_BYPASS_HEADER=`x-vercel-protection-bypass`;export{VERCEL_PROTECTION_BYPASS_HEADER,resolveDevelopmentOidcToken,resolveLinkedDevelopmentOidcToken};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRegistrySession}from"./registry-session.js";import{z}from"#compiled/zod/index.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{WizardCancelledError}from"#setup/step.js";import{detectDeployment}from"#setup/project-resolution.js";import{withSpinner}from"#setup/with-spinner.js";const ADDRESS_PREFIX=`address:`,BACK=`action:back`,DONE=`action:done`,ALL=`category:all`,REGISTRY_CATEGORIES=[{value:`category:channel`,prefix:`channel/`,label:`Channels`,hint:`Where people talk to your agent — Web, Slack, Discord, Teams`,browseLabel:`Browse channels`},{value:`category:connection`,prefix:`connection/`,label:`MCP connections`,hint:`Connect services like Linear, Notion, GitHub, and Vercel`,browseLabel:`Browse MCP connections`},{value:`category:extension`,prefix:`extension/`,label:`Extensions`,hint:`Add browser automation, memory, and developer tools`,browseLabel:`Browse extensions`},{value:`category:instrumentation`,prefix:`instrumentation/`,label:`Observability`,hint:`Trace, evaluate, and monitor your agent`,browseLabel:`Browse observability integrations`}];var RegistryFlowFailedError=class extends Error{completed;constructor(e,t){super(e instanceof Error?e.message:String(e),{cause:e}),this.name=`RegistryFlowFailedError`,this.completed=t}};function itemLabel(e){return e.title===void 0?(e.name.split(`/`).at(-1)??e.name).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):e.title}function itemRows(e){return e.map((e,t)=>({value:`item:${t}`,label:itemLabel(e),hint:e.description??e.type}))}function categoryRows(){return[...REGISTRY_CATEGORIES.map(e=>({value:e.value,label:e.label,hint:e.hint})),{value:ALL,label:`Browse all`,hint:`Search every integration or enter an item address`},{value:DONE,label:`Return to chat`,trailingAction:!0}]}function categoryFor(e){return REGISTRY_CATEGORIES.find(t=>t.value===e)}function itemsForCategory(e,t){if(t===ALL)return e;let n=categoryFor(t);return n===void 0?e:e.filter(e=>e.address.startsWith(n.prefix)||e.name.startsWith(n.prefix))}function stringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function itemSource(e){if(e.startsWith(`@`))return e.split(`/`)[0]??e;if(/^https?:\/\//u.test(e))try{return new URL(e).host}catch{return e}return`Vercel`}function manifestRecord(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}const RegistryDocumentationSchema=z.object({meta:z.object({eve:z.object({docs:z.string().min(1).optional()}).optional()}).optional()});function documentationLink(e){let t=RegistryDocumentationSchema.safeParse(e).data?.meta?.eve?.docs;if(t!==void 0)return t.startsWith(`/`)?`https://eve.dev${t}`:t}function summarizeDetails(e,t=3){let n=e.slice(0,t),r=e.length-n.length;return r>0?`${n.join(`, `)} … (+${r} more)`:n.join(`, `)}function environmentVariables(e){let t=e.envVars;return typeof t==`object`&&t&&!Array.isArray(t)?Object.keys(t):[]}function itemDetails(e,t){let n=[{label:`Source`,value:e.source}],r=[...stringArray(t.dependencies),...stringArray(t.devDependencies),...stringArray(t.registryDependencies)];r.length>0&&n.push({label:`Packages`,value:summarizeDetails(r)});let i=environmentVariables(t);i.length>0&&n.push({label:`Environment`,value:summarizeDetails(i)});let a=(Array.isArray(t.files)?t.files:[]).flatMap(e=>{if(typeof e!=`object`||!e||Array.isArray(e))return[];let t=e.target;return typeof t==`string`?[t]:[]});return a.length>0&&n.push({label:`Files`,value:summarizeDetails(a)}),n}async function inspectItem(e,t,n,r,i,o){let s=i??manifestRecord(await withSpinner(e,`Loading registry item…`,()=>t.getRegistryItemManifest(n,r.address)));for(;;){let i={message:typeof s.title==`string`?s.title:r.name,metadata:itemDetails(r,s),options:[{value:`add`,label:`Add to project`},{value:`back`,label:`Back`}]},a=typeof s.description==`string`?s.description:r.description;if(a!==void 0&&(i.description=a),await e.select(i)===`back`)return{kind:`back`};let c=e.log.spinner?.(`Installing ${itemLabel(r)} and dependencies…`);try{c?.stop();let install=()=>t.installRegistryItem(n,r.address,{silent:!0,prompter:e,signal:o}),i=await(e.withExclusiveTerminal?.(install)??install());return{kind:`added`,documentation:documentationLink(s),environment:environmentVariables(s),...i}}finally{c?.stop()}}}async function resolveAddressItem(e,t,n,r){let i=manifestRecord(await withSpinner(e,`Loading registry item…`,()=>t.getRegistryItemManifest(n,r))),o={address:r,name:typeof i.name==`string`?i.name:r,source:itemSource(r)};return typeof i.type==`string`&&(o.type=i.type),typeof i.description==`string`&&(o.description=i.description),{item:o,manifest:i}}async function offerItem(e,t,n,r,i){let a=await inspectItem(e.prompter,t,e.appRoot,r,i,e.signal);if(a.kind!==`added`)return;let o=[...a.output];a.environment!==void 0&&a.environment.length>0&&o.push(`Environment: ${a.environment.join(`, `)}`),a.documentation!==void 0&&o.push(`Setup: ${a.documentation}`),n.add(r.address,itemLabel(r),o,a.setup);let s=await n.continueAfterInstall({appRoot:e.appRoot,prompter:e.prompter,signal:e.signal});return s===`add-more`?void 0:s}async function runRegistryFlow(t){let l;(t.deps?.browseRegistryCatalog===void 0||t.deps.getRegistryItemManifest===void 0||t.deps.installRegistryItem===void 0)&&(l=await import(`#cli/commands/registry.js`));let u={browseRegistryCatalog:t.deps?.browseRegistryCatalog??l.browseRegistryCatalog,detectDeployment:t.deps?.detectDeployment??detectDeployment,getRegistryItemManifest:t.deps?.getRegistryItemManifest??l.getRegistryItemManifest,installRegistryItem:t.deps?.installRegistryItem??l.installRegistryItem,runDeployFlow:t.deps?.runDeployFlow??runDeployFlow},d=[],f=createRegistrySession(u),p=t.initialAddress?.trim(),m=p===``?void 0:p;try{for(;;){if(t.signal?.throwIfAborted(),m!==void 0){let e=m;m=void 0;let n=await resolveAddressItem(t.prompter,u,t.appRoot,e),r=await offerItem(t,u,f,n.item,n.manifest);if(r!==void 0)return r;continue}let e=await withSpinner(t.prompter,`Loading registry…`,()=>u.browseRegistryCatalog(t.appRoot));d=[...d,...e.errors.map(e=>({tone:`warning`,text:`${e.registry}: ${e.message}`}))];let n=await t.prompter.select({message:`Add an integration`,options:categoryRows(),hintLayout:`inline`,notices:d});if(d=[],n===DONE)return f.result();let r=itemsForCategory(e.items,n),i=itemRows(r);i.push({value:BACK,label:`Back`,trailingAction:!0});let l=await t.prompter.select({message:categoryFor(n)?.browseLabel??`Browse integrations`,options:i,search:!0,placeholder:`Search integrations or enter an item address`,searchAction:{label:e=>`Add “${e}”`,value:e=>`${ADDRESS_PREFIX}${e.trim()}`},hintLayout:`inline`});if(l===BACK)continue;let p=l.startsWith(ADDRESS_PREFIX)?await resolveAddressItem(t.prompter,u,t.appRoot,l.slice(8)):{item:r[Number(l.slice(5))]};if(p.item===void 0)throw Error(`The selected registry item is no longer available.`);let h=await offerItem(t,u,f,p.item,`manifest`in p?p.manifest:void 0);if(h!==void 0)return h}}catch(e){if(e instanceof WizardCancelledError)return{kind:`cancelled`};let t=f.result();throw t.addedItems.length>0?new RegistryFlowFailedError(e,t):e}}export{RegistryFlowFailedError,runRegistryFlow};
|
|
1
|
+
import{createRegistrySession}from"./registry-session.js";import{z}from"#compiled/zod/index.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{WizardCancelledError}from"#setup/step.js";import{detectDeployment}from"#setup/project-resolution.js";import{withSpinner}from"#setup/with-spinner.js";const ADDRESS_PREFIX=`address:`,BACK=`action:back`,DONE=`action:done`,ALL=`category:all`,REGISTRY_CATEGORIES=[{value:`category:channel`,prefix:`channel/`,label:`Channels`,hint:`Where people talk to your agent — Web, Slack, Discord, Teams`,browseLabel:`Browse channels`},{value:`category:connection`,prefix:`connection/`,label:`MCP connections`,hint:`Connect services like Linear, Notion, GitHub, and Vercel`,browseLabel:`Browse MCP connections`},{value:`category:extension`,prefix:`extension/`,label:`Extensions`,hint:`Add browser automation, memory, and developer tools`,browseLabel:`Browse extensions`},{value:`category:memory`,prefix:`memory/`,label:`Memory providers`,hint:`Retain and recall scoped context across sessions`,browseLabel:`Browse memory providers`},{value:`category:instrumentation`,prefix:`instrumentation/`,label:`Observability`,hint:`Trace, evaluate, and monitor your agent`,browseLabel:`Browse observability integrations`}];var RegistryFlowFailedError=class extends Error{completed;constructor(e,t){super(e instanceof Error?e.message:String(e),{cause:e}),this.name=`RegistryFlowFailedError`,this.completed=t}};function itemLabel(e){return e.title===void 0?(e.name.split(`/`).at(-1)??e.name).split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):e.title}function itemRows(e){return e.map((e,t)=>({value:`item:${t}`,label:itemLabel(e),hint:e.description??e.type}))}function categoryRows(){return[...REGISTRY_CATEGORIES.map(e=>({value:e.value,label:e.label,hint:e.hint})),{value:ALL,label:`Browse all`,hint:`Search every integration or enter an item address`},{value:DONE,label:`Return to chat`,trailingAction:!0}]}function categoryFor(e){return REGISTRY_CATEGORIES.find(t=>t.value===e)}function itemsForCategory(e,t){if(t===ALL)return e;let n=categoryFor(t);return n===void 0?e:e.filter(e=>e.address.startsWith(n.prefix)||e.name.startsWith(n.prefix))}function stringArray(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function itemSource(e){if(e.startsWith(`@`))return e.split(`/`)[0]??e;if(/^https?:\/\//u.test(e))try{return new URL(e).host}catch{return e}return`Vercel`}function manifestRecord(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}const RegistryDocumentationSchema=z.object({meta:z.object({eve:z.object({docs:z.string().min(1).optional()}).optional()}).optional()});function documentationLink(e){let t=RegistryDocumentationSchema.safeParse(e).data?.meta?.eve?.docs;if(t!==void 0)return t.startsWith(`/`)?`https://eve.dev${t}`:t}function summarizeDetails(e,t=3){let n=e.slice(0,t),r=e.length-n.length;return r>0?`${n.join(`, `)} … (+${r} more)`:n.join(`, `)}function environmentVariables(e){let t=e.envVars;return typeof t==`object`&&t&&!Array.isArray(t)?Object.keys(t):[]}function itemDetails(e,t){let n=[{label:`Source`,value:e.source}],r=[...stringArray(t.dependencies),...stringArray(t.devDependencies),...stringArray(t.registryDependencies)];r.length>0&&n.push({label:`Packages`,value:summarizeDetails(r)});let i=environmentVariables(t);i.length>0&&n.push({label:`Environment`,value:summarizeDetails(i)});let a=(Array.isArray(t.files)?t.files:[]).flatMap(e=>{if(typeof e!=`object`||!e||Array.isArray(e))return[];let t=e.target;return typeof t==`string`?[t]:[]});return a.length>0&&n.push({label:`Files`,value:summarizeDetails(a)}),n}async function inspectItem(e,t,n,r,i,o){let s=i??manifestRecord(await withSpinner(e,`Loading registry item…`,()=>t.getRegistryItemManifest(n,r.address)));for(;;){let i={message:typeof s.title==`string`?s.title:r.name,metadata:itemDetails(r,s),options:[{value:`add`,label:`Add to project`},{value:`back`,label:`Back`}]},a=typeof s.description==`string`?s.description:r.description;if(a!==void 0&&(i.description=a),await e.select(i)===`back`)return{kind:`back`};let c=e.log.spinner?.(`Installing ${itemLabel(r)} and dependencies…`);try{c?.stop();let install=()=>t.installRegistryItem(n,r.address,{silent:!0,prompter:e,signal:o}),i=await(e.withExclusiveTerminal?.(install)??install());return{kind:`added`,documentation:documentationLink(s),environment:environmentVariables(s),...i}}finally{c?.stop()}}}async function resolveAddressItem(e,t,n,r){let i=manifestRecord(await withSpinner(e,`Loading registry item…`,()=>t.getRegistryItemManifest(n,r))),o={address:r,name:typeof i.name==`string`?i.name:r,source:itemSource(r)};return typeof i.type==`string`&&(o.type=i.type),typeof i.description==`string`&&(o.description=i.description),{item:o,manifest:i}}async function offerItem(e,t,n,r,i){let a=await inspectItem(e.prompter,t,e.appRoot,r,i,e.signal);if(a.kind!==`added`)return;let o=[...a.output];a.environment!==void 0&&a.environment.length>0&&o.push(`Environment: ${a.environment.join(`, `)}`),a.documentation!==void 0&&o.push(`Setup: ${a.documentation}`),n.add(r.address,itemLabel(r),o,a.setup);let s=await n.continueAfterInstall({appRoot:e.appRoot,prompter:e.prompter,signal:e.signal});return s===`add-more`?void 0:s}async function runRegistryFlow(t){let l;(t.deps?.browseRegistryCatalog===void 0||t.deps.getRegistryItemManifest===void 0||t.deps.installRegistryItem===void 0)&&(l=await import(`#cli/commands/registry.js`));let u={browseRegistryCatalog:t.deps?.browseRegistryCatalog??l.browseRegistryCatalog,detectDeployment:t.deps?.detectDeployment??detectDeployment,getRegistryItemManifest:t.deps?.getRegistryItemManifest??l.getRegistryItemManifest,installRegistryItem:t.deps?.installRegistryItem??l.installRegistryItem,runDeployFlow:t.deps?.runDeployFlow??runDeployFlow},d=[],f=createRegistrySession(u),p=t.initialAddress?.trim(),m=p===``?void 0:p;try{for(;;){if(t.signal?.throwIfAborted(),m!==void 0){let e=m;m=void 0;let n=await resolveAddressItem(t.prompter,u,t.appRoot,e),r=await offerItem(t,u,f,n.item,n.manifest);if(r!==void 0)return r;continue}let e=await withSpinner(t.prompter,`Loading registry…`,()=>u.browseRegistryCatalog(t.appRoot));d=[...d,...e.errors.map(e=>({tone:`warning`,text:`${e.registry}: ${e.message}`}))];let n=await t.prompter.select({message:`Add an integration`,options:categoryRows(),hintLayout:`inline`,notices:d});if(d=[],n===DONE)return f.result();let r=itemsForCategory(e.items,n),i=itemRows(r);i.push({value:BACK,label:`Back`,trailingAction:!0});let l=await t.prompter.select({message:categoryFor(n)?.browseLabel??`Browse integrations`,options:i,search:!0,placeholder:`Search integrations or enter an item address`,searchAction:{label:e=>`Add “${e}”`,value:e=>`${ADDRESS_PREFIX}${e.trim()}`},hintLayout:`inline`});if(l===BACK)continue;let p=l.startsWith(ADDRESS_PREFIX)?await resolveAddressItem(t.prompter,u,t.appRoot,l.slice(8)):{item:r[Number(l.slice(5))]};if(p.item===void 0)throw Error(`The selected registry item is no longer available.`);let h=await offerItem(t,u,f,p.item,`manifest`in p?p.manifest:void 0);if(h!==void 0)return h}}catch(e){if(e instanceof WizardCancelledError)return{kind:`cancelled`};let t=f.result();throw t.addedItems.length>0?new RegistryFlowFailedError(e,t):e}}export{RegistryFlowFailedError,runRegistryFlow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";const DiscordApplicationSchema=object({id:string(),name:string(),verify_key:string()});async function discordRequest(e,t,n,r){return r(`https://discord.com/api/v10${t}`,{...n,headers:{authorization:`Bot ${e}`,"content-type":`application/json`,...n.headers}})}async function resolveDiscordApplication(e,t=fetch){let r=await discordRequest(e,`/oauth2/applications/@me`,{method:`GET`},t);if(!r.ok)throw Error(`Discord rejected the bot token (HTTP ${r.status}).`);let i=DiscordApplicationSchema.safeParse(await r.json());if(!i.success)throw Error(`Discord returned incomplete application details.`);return{id:i.data.id,name:i.data.name,publicKey:i.data.verify_key}}async function registerDiscordCommand(e,t,n,r=fetch){let i=await discordRequest(t,`/applications/${encodeURIComponent(e)}/commands`,{method:`POST`,body:JSON.stringify({name:n.name,description:n.description,type:1,options:[{name:`message`,description:`What should the agent do?`,type:3,required:!0}]})},r);if(!i.ok)throw Error(`Discord command registration failed (HTTP ${i.status}).`)}async function configureDiscordInteractionsEndpoint(e,t,n=fetch){let r=await discordRequest(e,`/applications/@me`,{method:`PATCH`,body:JSON.stringify({interactions_endpoint_url:`https://connect.vercel.com/trigger/${encodeURIComponent(t)}`})},n);if(!r.ok)throw Error(`Discord rejected the interactions endpoint (HTTP ${r.status}).`)}export{configureDiscordInteractionsEndpoint,registerDiscordCommand,resolveDiscordApplication};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{runVercel,runVercelCaptureStdout}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";import{replaceConnectTrigger}from"#setup/connect-provisioning.js";const DISCORD_TRIGGER_PATH=`/eve/v1/discord`,DiscordConnectorRefSchema=object({id:string().min(1),uid:string().min(1),supportedSubjectTypes:array(string()).refine(e=>e.includes(`app`))});function parseCreatedDiscordConnector(e){try{let t=DiscordConnectorRefSchema.safeParse(JSON.parse(e));return t.success?{id:t.data.id,uid:t.data.uid}:void 0}catch{return}}async function provisionDiscordConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),r=await withPhase(e.log,`Creating Discord connector...`,()=>t.runVercelCaptureStdout([`connect`,`create`,`discord`,`--connector-type`,`discord`,`--data`,`@-`,`--name`,e.slug,`--triggers`,`-F`,`json`,`--scope`,e.project.orgId],{cwd:e.projectRoot,nonInteractive:!0,onOutput:n,signal:e.signal,stdin:JSON.stringify({botToken:e.botToken.trim()})}));if(e.signal?.throwIfAborted(),!r.ok){let e=[r.stderr,r.stdout].find(e=>e!==void 0&&e.trim().length>0);throw Error(e?`Discord connector creation failed:\n${e}`:`Discord connector creation failed.`)}let i=parseCreatedDiscordConnector(r.stdout);if(i===void 0)throw Error(`Vercel returned an invalid Discord connector.`);if((await withPhase(e.log,`Connecting Discord interactions...`,()=>replaceConnectTrigger({connectorUid:i.uid,projectRoot:e.projectRoot,projectId:e.project.projectId,orgId:e.project.orgId,environment:`production`,triggerPath:DISCORD_TRIGGER_PATH,onOutput:n,signal:e.signal,deps:t}))).state!==`attached`)throw Error(`Discord connector was created, but its trigger could not be attached. Run \`vercel connect attach ${i.uid} --project ${e.project.projectId} --environment production --triggers --trigger-path ${DISCORD_TRIGGER_PATH} --yes --scope ${e.project.orgId}\`.`);return i}export{DISCORD_TRIGGER_PATH,parseCreatedDiscordConnector,provisionDiscordConnector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{array,literal,object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{array,literal,object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{runVercel,runVercelCaptureStdout}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";import{replaceConnectTrigger}from"#setup/connect-provisioning.js";const GITHUB_TRIGGER_PATH=`/eve/v1/github`,GitHubConnectorRefSchema=object({id:string().min(1),uid:string().min(1),supportedSubjectTypes:array(string()).refine(e=>e.includes(`app`))}),GitHubConnectorDetailsSchema=object({data:object({appSlug:string().min(1)}),id:string().min(1),type:literal(`github`),uid:string().min(1)});function parseCreatedGitHubConnector(e){try{let t=GitHubConnectorRefSchema.safeParse(JSON.parse(e));return t.success?{id:t.data.id,uid:t.data.uid}:void 0}catch{return}}function parseGitHubConnectorDetails(e,t){try{let n=GitHubConnectorDetailsSchema.safeParse(JSON.parse(e));return!n.success||n.data.id!==t.id||n.data.uid!==t.uid?void 0:{...t,appSlug:n.data.data.appSlug}}catch{return}}async function provisionGitHubConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),r=await withPhase(e.log,`Creating GitHub connector...`,()=>t.runVercelCaptureStdout([`connect`,`create`,`github`,`--name`,e.slug,`--triggers`,...e.events.flatMap(e=>[`--trigger-event`,e]),`-F`,`json`,`--scope`,e.project.orgId],{cwd:e.projectRoot,nonInteractive:!0,onOutput:n,signal:e.signal}));if(e.signal?.throwIfAborted(),!r.ok){let e=[r.stderr,r.stdout].find(e=>e!==void 0&&e.trim().length>0);throw Error(e?`GitHub connector creation failed:\n${e}`:`GitHub connector creation failed.`)}let i=parseCreatedGitHubConnector(r.stdout);if(i===void 0)throw Error(`Vercel returned an invalid GitHub connector.`);let a=await withPhase(e.log,`Reading GitHub App details...`,()=>t.runVercelCaptureStdout([`api`,`/v1/connect/connectors/${encodeURIComponent(i.id)}`,`--scope`,e.project.orgId,`--raw`],{cwd:e.projectRoot,nonInteractive:!0,onOutput:n,signal:e.signal}));if(e.signal?.throwIfAborted(),!a.ok)throw Error(`Could not read the created GitHub connector.`);let o=parseGitHubConnectorDetails(a.stdout,i);if(o===void 0)throw Error(`Vercel returned invalid details for the GitHub connector.`);let s=await withPhase(e.log,`Connecting GitHub webhooks...`,()=>replaceConnectTrigger({connectorUid:o.uid,projectRoot:e.projectRoot,projectId:e.project.projectId,orgId:e.project.orgId,environment:`production`,triggerPath:GITHUB_TRIGGER_PATH,onOutput:n,signal:e.signal,deps:t}));if(e.signal?.throwIfAborted(),s.state!==`attached`)throw Error(`GitHub connector was created, but its trigger could not be attached. Run \`vercel connect attach ${o.uid} --project ${e.project.projectId} --environment production --triggers --trigger-path ${GITHUB_TRIGGER_PATH} --yes --scope ${e.project.orgId}\`.`);return o}export{GITHUB_TRIGGER_PATH,parseCreatedGitHubConnector,provisionGitHubConnector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{runVercel,runVercelCaptureStdout}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";import{replaceConnectTrigger}from"#setup/connect-provisioning.js";const LINEAR_TRIGGER_PATH=`/eve/v1/linear`,LinearConnectorRefSchema=object({id:string().min(1),uid:string().min(1),supportedSubjectTypes:array(string()).refine(e=>e.includes(`app`))});function parseCreatedLinearConnector(e){try{let t=LinearConnectorRefSchema.safeParse(JSON.parse(e));return t.success?{id:t.data.id,uid:t.data.uid}:void 0}catch{return}}async function findLinearConnector(e){let t=await(e.deps??{runVercel,runVercelCaptureStdout}).runVercelCaptureStdout([`connect`,`list`,`--all-projects`,`--service`,`linear`,`-F`,`json`,`--scope`,e.project.orgId],{cwd:e.projectRoot,nonInteractive:!0,signal:e.signal});if(t.ok)try{let n=JSON.parse(t.stdout);if(!Array.isArray(n.connectors))return;let r=`linear/${e.slug}`,i=n.connectors.find(e=>typeof e==`object`&&!!e&&e.uid===r);return typeof i?.id==`string`?{id:i.id,uid:r}:void 0}catch{return}}async function attachLinearConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),s=await withPhase(e.log,`Connecting Linear Agent Sessions...`,()=>replaceConnectTrigger({connectorUid:e.connector.uid,projectRoot:e.projectRoot,projectId:e.project.projectId,orgId:e.project.orgId,environment:`production`,triggerPath:LINEAR_TRIGGER_PATH,onOutput:n,signal:e.signal,deps:t}));if(e.signal?.throwIfAborted(),s.state!==`attached`)throw Error(`Linear connector was found, but its trigger could not be attached. Run \`vercel connect attach ${e.connector.uid} --project ${e.project.projectId} --environment production --triggers --trigger-path ${LINEAR_TRIGGER_PATH} --yes --scope ${e.project.orgId}\`.`)}async function provisionLinearConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),a=await withPhase(e.log,`Creating Linear connector...`,()=>t.runVercelCaptureStdout([`connect`,`create`,`linear`,`--name`,e.slug,`--triggers`,`--trigger-event`,`AgentSessionEvent`,`-F`,`json`,`--scope`,e.project.orgId],{cwd:e.projectRoot,nonInteractive:!0,onOutput:n,signal:e.signal}));if(e.signal?.throwIfAborted(),!a.ok){let e=[a.stderr,a.stdout].find(e=>e!==void 0&&e.trim().length>0);throw Error(e?`Linear connector creation failed:\n${e}`:`Linear connector creation failed.`)}let o=parseCreatedLinearConnector(a.stdout);if(o===void 0)throw Error(`Vercel returned an invalid Linear connector.`);return await attachLinearConnector({...e,connector:o,deps:t}),o}export{LINEAR_TRIGGER_PATH,attachLinearConnector,findLinearConnector,parseCreatedLinearConnector,provisionLinearConnector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{runVercel,runVercelCaptureStdout}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";import{replaceConnectTrigger}from"#setup/connect-provisioning.js";const LINQ_TRIGGER_PATH=`/eve/v1/linq`,LINQ_TRIGGER_EVENTS=[`message.received`,`reaction.added`,`reaction.removed`],ConnectorSchema=object({id:string().min(1),uid:string().min(1),supportedSubjectTypes:array(string()).refine(e=>e.includes(`app`)),data:object({phoneNumbers:array(string().min(1)).optional()}).optional()});function parseCreatedLinqConnector(e){try{let t=ConnectorSchema.safeParse(JSON.parse(e));if(!t.success)return;let n=t.data.data?.phoneNumbers?.[0],r={id:t.data.id,uid:t.data.uid};return n!==void 0&&(r.phoneNumber=n),r}catch{return}}function requireCreatedConnector(e){if(!e.ok){let t=[e.stderr,e.stdout].find(e=>e!==void 0&&e.trim().length>0);throw Error(t?`Linq connector creation failed:\n${t}`:`Linq connector creation failed.`)}let t=parseCreatedLinqConnector(e.stdout);if(t===void 0)throw Error(`Vercel returned an invalid Linq connector.`);return t}async function provisionLinqConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),onOutput=e=>{URL.parse(e.text)===null&&n(e)},i=[`connect`,`create`,`linq`,`--name`,e.slug],a=e.existingAccount===void 0?void 0:JSON.stringify({apiToken:e.existingAccount.apiToken,phoneNumbers:e.existingAccount.phoneNumbers});a!==void 0&&i.push(`--connector-type`,`linq`,`--data`,`@-`),i.push(`--triggers`,...LINQ_TRIGGER_EVENTS.flatMap(e=>[`--trigger-event`,e]),`-F`,`json`,`--scope`,e.project.orgId);let o=await withPhase(e.log,`Creating Linq connector...`,()=>t.runVercelCaptureStdout(i,{cwd:e.projectRoot,nonInteractive:!0,onOutput,signal:e.signal,stdin:a}));e.signal?.throwIfAborted();let s=await readLinqConnector({connector:requireCreatedConnector(o),projectRoot:e.projectRoot,orgId:e.project.orgId,signal:e.signal,deps:t});if((await withPhase(e.log,`Connecting Linq credentials...`,()=>replaceConnectTrigger({connectorUid:s.uid,projectRoot:e.projectRoot,projectId:e.project.projectId,orgId:e.project.orgId,environment:`production`,triggerPath:LINQ_TRIGGER_PATH,onOutput,signal:e.signal,deps:t}))).state!==`attached`)throw Error(`Linq connector was created, but its trigger could not be attached. Run \`vercel connect attach ${s.uid} --project ${e.project.projectId} --environment production --triggers --trigger-path ${LINQ_TRIGGER_PATH} --yes --scope ${e.project.orgId}\`.`);return s}async function readLinqConnector(e){let t=await e.deps.runVercelCaptureStdout([`api`,`/v1/connect/connectors/${encodeURIComponent(e.connector.id)}`,`--scope`,e.orgId],{cwd:e.projectRoot,nonInteractive:!0,signal:e.signal});if(!t.ok)return e.connector;let n=parseCreatedLinqConnector(t.stdout);return n?.phoneNumber===void 0?e.connector:{...e.connector,phoneNumber:n.phoneNumber}}export{LINQ_TRIGGER_EVENTS,LINQ_TRIGGER_PATH,parseCreatedLinqConnector,provisionLinqConnector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{array,object,string}from"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{runVercel,runVercelCaptureStdout}from"#setup/primitives/run-vercel.js";import{createPromptCommandOutput,withPhase}from"#setup/cli/index.js";import{replaceConnectTrigger}from"#setup/connect-provisioning.js";const PHOTON_CONNECT_SERVICE=`photon`,PHOTON_CONNECTOR_TYPE=`photon`,PHOTON_TRIGGER_PATH=`/eve/v1/photon`,PhotonConnectorRefSchema=object({id:string().min(1),uid:string().min(1),supportedSubjectTypes:array(string()).refine(e=>e.includes(`app`))});function parseCreatedPhotonConnector(e){try{let t=PhotonConnectorRefSchema.safeParse(JSON.parse(e));return t.success?{id:t.data.id,uid:t.data.uid}:void 0}catch{return}}function createData(e){return JSON.stringify({projectId:e.projectId.trim(),projectSecret:e.projectSecret.trim()})}function requireCreatedConnector(e){if(!e.ok){let t=[e.stderr,e.stdout].map(e=>e?.trim()).find(e=>e!==void 0&&e.length>0);throw Error(t?`Photon connector creation failed:\n${t}`:`Photon connector creation failed.`)}let t=parseCreatedPhotonConnector(e.stdout);if(t===void 0)throw Error(`Vercel returned an invalid Photon connector after creation.`);return t}async function provisionPhotonConnector(e){let t=e.deps??{runVercel,runVercelCaptureStdout},n=createPromptCommandOutput(e.log),r=await withPhase(e.log,`Creating Photon connector...`,()=>t.runVercelCaptureStdout([`connect`,`create`,PHOTON_CONNECT_SERVICE,`--connector-type`,PHOTON_CONNECTOR_TYPE,`--data`,`@-`,`--name`,e.slug,`--triggers`,`-F`,`json`,`--scope`,e.project.orgId],{cwd:e.projectRoot,nonInteractive:!0,onOutput:n,signal:e.signal,stdin:createData(e.credentials)}));e.signal?.throwIfAborted();let i=requireCreatedConnector(r),a=await withPhase(e.log,`Connecting Photon credentials...`,()=>replaceConnectTrigger({connectorUid:i.uid,projectRoot:e.projectRoot,projectId:e.project.projectId,orgId:e.project.orgId,environment:`production`,triggerPath:PHOTON_TRIGGER_PATH,onOutput:n,signal:e.signal,deps:t}));if(e.signal?.throwIfAborted(),a.state!==`attached`){let t=`vercel connect attach ${i.uid} --project ${e.project.projectId} --environment production --triggers --trigger-path ${PHOTON_TRIGGER_PATH} --yes --scope ${e.project.orgId}`;throw Error(a.state===`detach-failed`?`Photon connector was created, but its default trigger destination could not be removed. Run \`vercel connect detach ${i.uid} --project ${e.project.projectId} --yes --scope ${e.project.orgId}\`, then \`${t}\`.`:`Photon connector was created, but its credentials could not be attached. Run \`${t}\`.`)}return i}export{PHOTON_CONNECTOR_TYPE,PHOTON_CONNECT_SERVICE,PHOTON_TRIGGER_PATH,parseCreatedPhotonConnector,provisionPhotonConnector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{object}from"../node_modules/.pnpm/zod@4.4
|
|
1
|
+
import{object}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{captureVercel}from"./primitives/run-vercel.js";import{stat}from"node:fs/promises";import{join}from"node:path";import{VercelProjectLinkSchema,readVercelProjectLink}from"#internal/vercel/project-link.js";const VercelProjectEnvironmentSchema=object({VERCEL_ORG_ID:VercelProjectLinkSchema.shape.orgId,VERCEL_PROJECT_ID:VercelProjectLinkSchema.shape.projectId});function projectReferenceFromEnvironment(e){let t=VercelProjectEnvironmentSchema.safeParse(e);if(t.success)return{orgId:t.data.VERCEL_ORG_ID,projectId:t.data.VERCEL_PROJECT_ID}}async function assertNoLegacyProjectLinkDirectory(e){try{if(!(await stat(join(e,`.now`))).isDirectory())return}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}throw Error("Legacy Vercel link directory `.now` is not supported. Remove `.now` before linking this project.")}async function readProjectLink(e){return await assertNoLegacyProjectLinkDirectory(e),await readVercelProjectLink(e)}function pickShortestAlias(e){if(!Array.isArray(e))return;let t;for(let n of e)typeof n!=`string`||n.length===0||(t===void 0||n.length<t.length)&&(t=n);return t}async function fetchProductionAlias(e,n,r,i){let a=await captureVercel([`api`,`/v9/projects/${e}?teamId=${n}`,`--scope`,n],{cwd:r,signal:i.signal});if(a.ok)try{let e=pickShortestAlias(JSON.parse(a.stdout).targets?.production?.alias);return e?`https://${e}`:void 0}catch{return}}async function detectDeployment(e,t={}){t.signal?.throwIfAborted();let n=await readProjectLink(e);if(n===void 0)return{state:`unlinked`};let r=await fetchProductionAlias(n.projectId,n.orgId,e,t);return t.signal?.throwIfAborted(),{state:r?`deployed`:`linked`,projectId:n.projectId,orgId:n.orgId,productionUrl:r}}async function fetchVercelName(e,n,r,i){let a=await captureVercel([`api`,e,`--scope`,n],{cwd:r,signal:i.signal});if(a.ok)try{let e=JSON.parse(a.stdout);return typeof e.name==`string`&&e.name.length>0?e.name:typeof e.slug==`string`&&e.slug.length>0?e.slug:void 0}catch{return}}async function detectProjectIdentity(e,t={}){t.signal?.throwIfAborted();let n=await readProjectLink(e);if(n===void 0)return;let[r,i]=await Promise.all([fetchVercelName(`/v9/projects/${n.projectId}?teamId=${n.orgId}`,n.orgId,e,t).then(e=>e??n.projectId),n.orgId.startsWith(`team_`)?fetchVercelName(`/v2/teams/${n.orgId}`,n.orgId,e,t):Promise.resolve(void 0)]);return t.signal?.throwIfAborted(),{projectName:r,teamName:i}}function projectResolutionFromDeployment(e){return e.state===`unlinked`||e.projectId===void 0?{kind:`unresolved`}:e.state===`deployed`&&e.productionUrl!==void 0?{kind:`deployed`,projectId:e.projectId,productionUrl:e.productionUrl}:{kind:`linked`,projectId:e.projectId}}async function detectProjectResolution(e,t={}){return projectResolutionFromDeployment(await detectDeployment(e,t))}function mergeProjectResolution(e,t){return t.kind===`unresolved`||e.kind===`deployed`&&e.projectId===t.projectId?e:t}function projectResolutionFromDeployResult(e,t){return e.kind===`unresolved`||!t.deployed||t.productionUrl===void 0?e:{kind:`deployed`,projectId:e.projectId,productionUrl:t.productionUrl}}function isProjectResolved(e){return e.kind!==`unresolved`}function projectProductionUrlFromResolution(e){return e.kind===`deployed`?e.productionUrl:void 0}export{assertNoLegacyProjectLinkDirectory,detectDeployment,detectProjectIdentity,detectProjectResolution,isProjectResolved,mergeProjectResolution,projectProductionUrlFromResolution,projectReferenceFromEnvironment,projectResolutionFromDeployResult,projectResolutionFromDeployment,readProjectLink};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{pathExists,writeTextFile}from"../files.js";import{resolveVersionToken}from"../version-tokens.js";import{patchPackageJson}from"../update/package-json.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{agentTemplateFiles,formatEveDependencySpecifier,resolveEvePackageContract}from"./project.js";import{readFile}from"node:fs/promises";import{join}from"node:path";const DEPENDENCY_FIELDS=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function isJsonObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function hasDeclaredDependency(e,t){if(!isJsonObject(e))return!1;for(let n of DEPENDENCY_FIELDS){let r=e[n];if(isJsonObject(r)&&typeof r[t]==`string`)return!0}return!1}async function addAgentToProject(i){let a=i.packageManager??`pnpm`,o=join(i.projectRoot,`package.json`);if(!await pathExists(o))throw Error(`Cannot add an eve agent to "${i.projectRoot}" because it has no package.json. Run \`eve init <name>\` to create a new project instead.`);let s;try{s=JSON.parse(await readFile(o,`utf8`))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Cannot add an eve agent because "${o}" is not valid JSON. No files were changed. Fix the file, then retry eve init. ${t}`)}let c=agentTemplateFiles(i.model,i.reasoning),l=[];for(let t of Object.keys(c))await pathExists(join(i.projectRoot,t))&&l.push(t);if(l.length===0&&await pathExists(join(i.projectRoot,`agent`))&&l.push(`agent/`),l.length>0)throw Error(`Cannot add an eve agent to "${i.projectRoot}" because it already has: ${l.join(`, `)}.`);let u=resolveEvePackageContract(i.evePackage),d=resolveVersionToken(`aiPackageVersion`,i.aiPackageVersion??`^7.0.
|
|
1
|
+
import{pathExists,writeTextFile}from"../files.js";import{resolveVersionToken}from"../version-tokens.js";import{patchPackageJson}from"../update/package-json.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{agentTemplateFiles,formatEveDependencySpecifier,resolveEvePackageContract}from"./project.js";import{readFile}from"node:fs/promises";import{join}from"node:path";const DEPENDENCY_FIELDS=[`dependencies`,`devDependencies`,`optionalDependencies`,`peerDependencies`];function isJsonObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function hasDeclaredDependency(e,t){if(!isJsonObject(e))return!1;for(let n of DEPENDENCY_FIELDS){let r=e[n];if(isJsonObject(r)&&typeof r[t]==`string`)return!0}return!1}async function addAgentToProject(i){let a=i.packageManager??`pnpm`,o=join(i.projectRoot,`package.json`);if(!await pathExists(o))throw Error(`Cannot add an eve agent to "${i.projectRoot}" because it has no package.json. Run \`eve init <name>\` to create a new project instead.`);let s;try{s=JSON.parse(await readFile(o,`utf8`))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Cannot add an eve agent because "${o}" is not valid JSON. No files were changed. Fix the file, then retry eve init. ${t}`)}let c=agentTemplateFiles(i.model,i.reasoning),l=[];for(let t of Object.keys(c))await pathExists(join(i.projectRoot,t))&&l.push(t);if(l.length===0&&await pathExists(join(i.projectRoot,`agent`))&&l.push(`agent/`),l.length>0)throw Error(`Cannot add an eve agent to "${i.projectRoot}" because it already has: ${l.join(`, `)}.`);let u=resolveEvePackageContract(i.evePackage),d=resolveVersionToken(`aiPackageVersion`,i.aiPackageVersion??`^7.0.82`),f=resolveVersionToken(`connectPackageVersion`,i.connectPackageVersion??`1.0.0`),p=resolveVersionToken(`zodPackageVersion`,i.zodPackageVersion??`4.5.4`),m=[];for(let[e,n]of Object.entries(c)){let r=join(i.projectRoot,e);await writeTextFile(r,n),m.push(r)}let h={"@vercel/connect":f,ai:d,eve:formatEveDependencySpecifier(u.version),zod:p},g={};for(let[e,t]of Object.entries(h))hasDeclaredDependency(s,e)||(g[e]=t);let _={};Object.keys(g).length>0&&(_.dependencies=g),isPackageManagerWorkspaceMember(a,i.projectRoot)||(_.nodeEngineRequirement=u.nodeEngine);let v=await patchPackageJson(o,_),y=await patchWorkspaceRootPackageJson(a,i.projectRoot,{nodeEngineRequirement:u.nodeEngine}),b=y.nodeEngineOverride??v.nodeEngineOverride,x=await applyPackageManagerWorkspaceConfiguration({packageManager:a,projectRoot:i.projectRoot});return{filesWritten:m,dependenciesAdded:Object.keys(g).sort(),nodeEngineOverride:b,configurationFilesChanged:[...v.changed?[o]:[],...y.changed&&y.path!==void 0?[y.path]:[],...x.filesWritten]}}export{addAgentToProject};
|
|
@@ -30,4 +30,4 @@ dist
|
|
|
30
30
|
.DS_Store
|
|
31
31
|
*.tsbuildinfo
|
|
32
32
|
`,"AGENTS.md":"# eve Extension Package\n\nThis package is an eve extension — a reusable package of tools, channels,\nconnections, skills, schedules, subagents, hooks, and instruction fragments that a consuming agent\nmounts under `agent/extensions/`.\n\nBefore writing code, read the Extensions guide from the installed eve package\ndocs. In most installs, those docs are at `node_modules/eve/docs/extensions.md`.\nIn workspaces or local package installs, resolve the installed `eve` package\nlocation first and read its `docs/extensions.md`. If package docs are\nunavailable, use https://eve.dev/docs/extensions as a fallback.\n\n## Authoring\n\n- Declare the extension in `extension/extension.ts` with `defineExtension` from\n `eve/extension`. Config is optional; read bound values via the handle's\n `.config` in tools, channels, schedules, hooks, and tools inside contributed subagents.\n- Add contributions under `extension/` the same way as in an agent:\n `tools/`, `channels/`, `connections/`, `skills/`, `schedules/`, `subagents/`, `hooks/`, and\n optional instruction fragments. Names come from file paths; the mount supplies the namespace, so\n name tools for what they do (`search`, not `crm_search`).\n- The extension root cannot declare `agent.ts`, `sandbox`, or nested\n `extensions/`. A subagent under `extension/subagents/` owns its own agent\n configuration and sandbox.\n\n## Build and publish\n\n`eve extension build` (wired to `build`/`prepare`) transforms the complete\nagent-shaped source tree into `dist/extension/`, emits type declarations and a\ncompatibility manifest, and fills the package `exports` map. Ship `dist/` only.\nKeep `eve` as a required wildcard peer so the consumer's eve is the one that runs;\neve validates extension compatibility from the generated manifest. Keep the eve\ndevelopment dependency pinned exactly so builds remain reproducible. Upgrade it\nwhen the extension intentionally adopts a newer eve authoring API.\n","CLAUDE.md":`@AGENTS.md
|
|
33
|
-
`,"package.json":packageJsonTemplate(e)}}async function assertCanCreateInPlace(e,n){if(!await pathExists(e))return;let i=blockingCreateInPlaceEntries(await readdir(e));if(i.length>0&&!n){let e=i.slice(0,5).join(`, `),t=i.length>5?`, and ${i.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${e}${t}. Use an empty directory.`)}}async function scaffoldExtensionProject(r){let s=resolve(r.targetDirectory??process.cwd(),r.projectName),c=r.projectName===`.`,l=r.overwriteExisting??!1,u=r.packageManager??`pnpm`,d=resolveEvePackageContract(r.evePackage??DEFAULT_EVE_PACKAGE_CONTRACT),f=pinnedNodeEngineMajor(d.nodeEngine),p=resolve(r.workspaceProbeDirectory??s),m=isPackageManagerWorkspaceMember(u,p);if(c)await assertCanCreateInPlace(s,l);else if(await pathExists(s))throw Error(`Cannot create project because "${s}" already exists.`);let h={appName:basename(s),eveVersion:d.version,zodPackageVersion:resolveVersionToken(`zodPackageVersion`,r.zodPackageVersion??`4.4
|
|
33
|
+
`,"package.json":packageJsonTemplate(e)}}async function assertCanCreateInPlace(e,n){if(!await pathExists(e))return;let i=blockingCreateInPlaceEntries(await readdir(e));if(i.length>0&&!n){let e=i.slice(0,5).join(`, `),t=i.length>5?`, and ${i.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${e}${t}. Use an empty directory.`)}}async function scaffoldExtensionProject(r){let s=resolve(r.targetDirectory??process.cwd(),r.projectName),c=r.projectName===`.`,l=r.overwriteExisting??!1,u=r.packageManager??`pnpm`,d=resolveEvePackageContract(r.evePackage??DEFAULT_EVE_PACKAGE_CONTRACT),f=pinnedNodeEngineMajor(d.nodeEngine),p=resolve(r.workspaceProbeDirectory??s),m=isPackageManagerWorkspaceMember(u,p);if(c)await assertCanCreateInPlace(s,l);else if(await pathExists(s))throw Error(`Cannot create project because "${s}" already exists.`);let h={appName:basename(s),eveVersion:d.version,zodPackageVersion:resolveVersionToken(`zodPackageVersion`,r.zodPackageVersion??`4.5.4`),typescriptPackageVersion:resolveVersionToken(`typescriptPackageVersion`,r.typescriptPackageVersion??`7.0.2`),nodeTypesVersion:f,nodeEngine:f};await mkdir(s,{recursive:!0});for(let[e,i]of Object.entries(templateFiles(!m))){let a=`${s}/${e}`,o=await pathExists(a);await writeTextFile(a,renderTemplate(i,h),{force:c&&l}),o&&await r.onOverwriteFile?.(a)}return await applyPackageManagerWorkspaceConfiguration({packageManager:u,projectRoot:s,workspaceProbeRoot:p,onWorkspaceRootMutation:r.onWorkspaceRootMutation}),await patchWorkspaceRootPackageJson(u,p,{nodeEngineRequirement:d.nodeEngine,onWorkspaceRootMutation:r.onWorkspaceRootMutation}),s}export{scaffoldExtensionProject};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.
|
|
1
|
+
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.82`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.47.6`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{"agent/agent.ts":renderAgentTemplate(e,t),"agent/channels/eve.ts":WEB_APP_TEMPLATE_FILES[`agent/channels/eve.ts`],"agent/instructions.md":AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,n){let r=parseChatGptModelSelection(e);return r===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(n)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(r)}),\n${reasoningTemplateLine(n)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,n){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(n.model)!==void 0?renderAgentTemplate(n.model,n.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,n.appName).replaceAll(`__EVE_INIT_MODEL__`,n.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(n.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(n.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(n.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(n.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,n.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,n.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,n.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,n.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,n.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,n.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
|
|
2
2
|
|
|
3
3
|
export default defineAgent({
|
|
4
4
|
model: "__EVE_INIT_MODEL__",
|
|
@@ -117,4 +117,4 @@ __EVE_INIT_REASONING__ modelOptions: {
|
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
});
|
|
120
|
-
`:BASE_AGENT_TEMPLATE,...SHARED_TEMPLATE_FILES,"package.json":packageJsonTemplate(e.includeRootOnlyPackageJsonFields)}}async function assertCanCreateInPlace(e,t){if(!await pathExists(e))return;let n=blockingCreateInPlaceEntries(await readdir(e));if(n.length>0&&!t){let e=n.slice(0,5).join(`, `),t=n.length>5?`, and ${n.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${e}${t}. Use an empty directory.`)}}async function scaffoldBaseProject(t){let n=resolve(t.targetDirectory??process.cwd(),t.projectName),i=t.projectName===`.`,c=t.overwriteExisting??!1,l=t.byokProvider??!1,u=t.packageManager??`pnpm`,d=resolveEvePackageContract(t.evePackage),f=pinnedNodeEngineMajor(d.nodeEngine),p=resolve(t.workspaceProbeDirectory??n),m=isPackageManagerWorkspaceMember(u,p);if(i)await assertCanCreateInPlace(n,c);else if(await pathExists(n))throw Error(`Cannot create project because "${n}" already exists.`);let h={appName:basename(n),model:t.model,reasoning:t.reasoning,eveVersion:d.version,aiPackageVersion:resolveVersionToken(`aiPackageVersion`,t.aiPackageVersion??`^7.0.
|
|
120
|
+
`:BASE_AGENT_TEMPLATE,...SHARED_TEMPLATE_FILES,"package.json":packageJsonTemplate(e.includeRootOnlyPackageJsonFields)}}async function assertCanCreateInPlace(e,t){if(!await pathExists(e))return;let n=blockingCreateInPlaceEntries(await readdir(e));if(n.length>0&&!t){let e=n.slice(0,5).join(`, `),t=n.length>5?`, and ${n.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${e}${t}. Use an empty directory.`)}}async function scaffoldBaseProject(t){let n=resolve(t.targetDirectory??process.cwd(),t.projectName),i=t.projectName===`.`,c=t.overwriteExisting??!1,l=t.byokProvider??!1,u=t.packageManager??`pnpm`,d=resolveEvePackageContract(t.evePackage),f=pinnedNodeEngineMajor(d.nodeEngine),p=resolve(t.workspaceProbeDirectory??n),m=isPackageManagerWorkspaceMember(u,p);if(i)await assertCanCreateInPlace(n,c);else if(await pathExists(n))throw Error(`Cannot create project because "${n}" already exists.`);let h={appName:basename(n),model:t.model,reasoning:t.reasoning,eveVersion:d.version,aiPackageVersion:resolveVersionToken(`aiPackageVersion`,t.aiPackageVersion??`^7.0.82`),connectPackageVersion:resolveVersionToken(`connectPackageVersion`,t.connectPackageVersion??`1.0.0`),zodPackageVersion:resolveVersionToken(`zodPackageVersion`,t.zodPackageVersion??`4.5.4`),typescriptPackageVersion:resolveVersionToken(`typescriptPackageVersion`,t.typescriptPackageVersion??`7.0.2`),nodeTypesVersion:f,nodeEngine:f};await mkdir(n,{recursive:!0});for(let[e,a]of Object.entries(templateFiles({byokProvider:l,includeRootOnlyPackageJsonFields:!m}))){let o=`${n}/${e}`,s=await pathExists(o);await writeTextFile(o,renderTemplate(a,h),{force:i&&c}),s&&await t.onOverwriteFile?.(o)}return await applyPackageManagerWorkspaceConfiguration({packageManager:u,projectRoot:n,workspaceProbeRoot:p,onWorkspaceRootMutation:t.onWorkspaceRootMutation}),await patchWorkspaceRootPackageJson(u,p,{nodeEngineRequirement:d.nodeEngine,onWorkspaceRootMutation:t.onWorkspaceRootMutation}),n}async function isEveProject(e){for(let t of SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS)try{return await stat(join(e,`agent`,`agent${t}`)),!0}catch{}return!1}export{CURRENT_DIRECTORY_PROJECT_NAME,DEFAULT_AI_PACKAGE_VERSION,DEFAULT_CONNECT_PACKAGE_VERSION,DEFAULT_EVE_PACKAGE_CONTRACT,DEFAULT_ZOD_PACKAGE_VERSION,ROOT_ONLY_PACKAGE_JSON_TEMPLATE_SUFFIX,agentTemplateFiles,byokProviderEnvVar,formatEveDependencySpecifier,isEveProject,modelProviderSlug,resolveEvePackageContract,scaffoldBaseProject};
|