vellum 0.2.13 → 0.3.2
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/bin/vellum.js +2 -0
- package/package.json +6 -65
- package/.dockerignore +0 -27
- package/.env.example +0 -22
- package/Dockerfile +0 -99
- package/Dockerfile.sandbox +0 -5
- package/README.md +0 -169
- package/bun.lock +0 -1743
- package/bunfig.toml +0 -2
- package/docs/skills.md +0 -158
- package/drizzle/0000_dizzy_maggott.sql +0 -301
- package/drizzle/meta/0000_snapshot.json +0 -1999
- package/drizzle/meta/_journal.json +0 -13
- package/drizzle.config.ts +0 -7
- package/eslint.config.mjs +0 -17
- package/hook-templates/debug-prompt-logger/hook.json +0 -7
- package/hook-templates/debug-prompt-logger/run.sh +0 -68
- package/knip.json +0 -9
- package/scripts/capture-x-graphql.ts +0 -545
- package/scripts/ipc/check-contract-inventory.ts +0 -104
- package/scripts/ipc/check-swift-decoder-drift.ts +0 -164
- package/scripts/ipc/generate-swift.ts +0 -492
- package/scripts/test-filesystem-tools.sh +0 -48
- package/scripts/test.sh +0 -127
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -2316
- package/src/__tests__/account-registry.test.ts +0 -245
- package/src/__tests__/active-skill-tools.test.ts +0 -378
- package/src/__tests__/agent-heartbeat-service.test.ts +0 -250
- package/src/__tests__/agent-loop-thinking.test.ts +0 -81
- package/src/__tests__/agent-loop.test.ts +0 -1135
- package/src/__tests__/anthropic-provider.test.ts +0 -778
- package/src/__tests__/app-builder-tool-scripts.test.ts +0 -290
- package/src/__tests__/app-bundler.test.ts +0 -292
- package/src/__tests__/app-executors.test.ts +0 -613
- package/src/__tests__/app-open-proxy.test.ts +0 -62
- package/src/__tests__/asset-materialize-tool.test.ts +0 -452
- package/src/__tests__/asset-search-tool.test.ts +0 -477
- package/src/__tests__/assistant-attachment-directive.test.ts +0 -401
- package/src/__tests__/assistant-attachments.test.ts +0 -437
- package/src/__tests__/assistant-event-hub.test.ts +0 -226
- package/src/__tests__/assistant-event.test.ts +0 -123
- package/src/__tests__/attachments-store.test.ts +0 -476
- package/src/__tests__/attachments.test.ts +0 -134
- package/src/__tests__/audit-log-rotation.test.ts +0 -154
- package/src/__tests__/browser-fill-credential.test.ts +0 -309
- package/src/__tests__/browser-manager.test.ts +0 -203
- package/src/__tests__/browser-runtime-check.test.ts +0 -55
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +0 -68
- package/src/__tests__/browser-skill-endstate.test.ts +0 -195
- package/src/__tests__/bundle-scanner.test.ts +0 -313
- package/src/__tests__/call-bridge.test.ts +0 -425
- package/src/__tests__/call-constants.test.ts +0 -40
- package/src/__tests__/call-orchestrator.test.ts +0 -512
- package/src/__tests__/call-recovery.test.ts +0 -518
- package/src/__tests__/call-routes-http.test.ts +0 -459
- package/src/__tests__/call-state-machine.test.ts +0 -143
- package/src/__tests__/call-state.test.ts +0 -174
- package/src/__tests__/call-store.test.ts +0 -691
- package/src/__tests__/checker.test.ts +0 -3960
- package/src/__tests__/clarification-resolver.test.ts +0 -159
- package/src/__tests__/classifier.test.ts +0 -67
- package/src/__tests__/claude-code-skill-regression.test.ts +0 -127
- package/src/__tests__/claude-code-tool-profiles.test.ts +0 -88
- package/src/__tests__/cli-discover.test.ts +0 -85
- package/src/__tests__/cli.test.ts +0 -81
- package/src/__tests__/clipboard.test.ts +0 -80
- package/src/__tests__/commit-guarantee.test.ts +0 -335
- package/src/__tests__/commit-message-enrichment-service.test.ts +0 -550
- package/src/__tests__/compaction.benchmark.test.ts +0 -176
- package/src/__tests__/computer-use-session-compaction.test.ts +0 -132
- package/src/__tests__/computer-use-session-lifecycle.test.ts +0 -293
- package/src/__tests__/computer-use-session-working-dir.test.ts +0 -117
- package/src/__tests__/computer-use-skill-baseline.test.ts +0 -74
- package/src/__tests__/computer-use-skill-endstate.test.ts +0 -89
- package/src/__tests__/computer-use-skill-lifecycle-cleanup.test.ts +0 -217
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +0 -107
- package/src/__tests__/computer-use-skill-proxy-bridge.test.ts +0 -54
- package/src/__tests__/computer-use-tools.test.ts +0 -250
- package/src/__tests__/config-schema.test.ts +0 -1343
- package/src/__tests__/conflict-store.test.ts +0 -330
- package/src/__tests__/connection-policy.test.ts +0 -102
- package/src/__tests__/contacts-tools.test.ts +0 -331
- package/src/__tests__/context-memory-e2e.test.ts +0 -434
- package/src/__tests__/context-token-estimator.test.ts +0 -135
- package/src/__tests__/context-window-manager.test.ts +0 -376
- package/src/__tests__/contradiction-checker.test.ts +0 -216
- package/src/__tests__/conversation-store.test.ts +0 -612
- package/src/__tests__/credential-broker-browser-fill.test.ts +0 -517
- package/src/__tests__/credential-broker-server-use.test.ts +0 -554
- package/src/__tests__/credential-broker.test.ts +0 -167
- package/src/__tests__/credential-host-pattern-match.test.ts +0 -104
- package/src/__tests__/credential-metadata-store.test.ts +0 -779
- package/src/__tests__/credential-policy-validate.test.ts +0 -121
- package/src/__tests__/credential-resolve.test.ts +0 -328
- package/src/__tests__/credential-security-e2e.test.ts +0 -352
- package/src/__tests__/credential-security-invariants.test.ts +0 -567
- package/src/__tests__/credential-selection.test.ts +0 -354
- package/src/__tests__/credential-vault.test.ts +0 -852
- package/src/__tests__/daemon-assistant-events.test.ts +0 -164
- package/src/__tests__/daemon-server-session-init.test.ts +0 -522
- package/src/__tests__/date-context.test.ts +0 -373
- package/src/__tests__/db-schedule-syntax-migration.test.ts +0 -129
- package/src/__tests__/delete-managed-skill-tool.test.ts +0 -97
- package/src/__tests__/diff.test.ts +0 -121
- package/src/__tests__/domain-normalize.test.ts +0 -112
- package/src/__tests__/domain-policy.test.ts +0 -124
- package/src/__tests__/doordash-client.test.ts +0 -186
- package/src/__tests__/doordash-session.test.ts +0 -152
- package/src/__tests__/dynamic-page-surface.test.ts +0 -91
- package/src/__tests__/dynamic-skill-workflow-prompt.test.ts +0 -132
- package/src/__tests__/edit-engine.test.ts +0 -180
- package/src/__tests__/elevenlabs-client.test.ts +0 -209
- package/src/__tests__/email-cli.test.ts +0 -283
- package/src/__tests__/encrypted-store.test.ts +0 -332
- package/src/__tests__/entity-extractor.test.ts +0 -190
- package/src/__tests__/ephemeral-permissions.test.ts +0 -312
- package/src/__tests__/evaluate-typescript-tool.test.ts +0 -286
- package/src/__tests__/event-bus.test.ts +0 -222
- package/src/__tests__/file-edit-tool.test.ts +0 -122
- package/src/__tests__/file-ops-service.test.ts +0 -330
- package/src/__tests__/file-read-tool.test.ts +0 -75
- package/src/__tests__/file-write-tool.test.ts +0 -113
- package/src/__tests__/fixtures/credential-security-fixtures.ts +0 -181
- package/src/__tests__/fixtures/media-reuse-fixtures.ts +0 -126
- package/src/__tests__/fixtures/mock-signup-server.ts +0 -387
- package/src/__tests__/fixtures/proxy-fixtures.ts +0 -147
- package/src/__tests__/followup-tools.test.ts +0 -303
- package/src/__tests__/forbidden-legacy-symbols.test.ts +0 -71
- package/src/__tests__/fuzzy-match-property.test.ts +0 -216
- package/src/__tests__/fuzzy-match.test.ts +0 -138
- package/src/__tests__/gateway-only-enforcement.test.ts +0 -436
- package/src/__tests__/gemini-image-service.test.ts +0 -261
- package/src/__tests__/gemini-provider.test.ts +0 -651
- package/src/__tests__/get-weather.test.ts +0 -318
- package/src/__tests__/gmail-integration.test.ts +0 -73
- package/src/__tests__/handlers-cu-observation-blob.test.ts +0 -351
- package/src/__tests__/handlers-ipc-blob-probe.test.ts +0 -190
- package/src/__tests__/handlers-slack-config.test.ts +0 -199
- package/src/__tests__/handlers-task-submit-slash.test.ts +0 -38
- package/src/__tests__/handlers-twitter-config.test.ts +0 -718
- package/src/__tests__/headless-browser-interactions.test.ts +0 -536
- package/src/__tests__/headless-browser-navigate.test.ts +0 -211
- package/src/__tests__/headless-browser-read-tools.test.ts +0 -261
- package/src/__tests__/headless-browser-snapshot.test.ts +0 -185
- package/src/__tests__/history-repair-observability.test.ts +0 -56
- package/src/__tests__/history-repair.test.ts +0 -510
- package/src/__tests__/home-base-bootstrap.test.ts +0 -82
- package/src/__tests__/hooks-blocking.test.ts +0 -128
- package/src/__tests__/hooks-cli.test.ts +0 -144
- package/src/__tests__/hooks-config.test.ts +0 -93
- package/src/__tests__/hooks-discovery.test.ts +0 -199
- package/src/__tests__/hooks-integration.test.ts +0 -189
- package/src/__tests__/hooks-manager.test.ts +0 -187
- package/src/__tests__/hooks-runner.test.ts +0 -178
- package/src/__tests__/hooks-settings.test.ts +0 -154
- package/src/__tests__/hooks-templates.test.ts +0 -137
- package/src/__tests__/hooks-ts-runner.test.ts +0 -125
- package/src/__tests__/hooks-watch.test.ts +0 -100
- package/src/__tests__/host-file-edit-tool.test.ts +0 -104
- package/src/__tests__/host-file-read-tool.test.ts +0 -61
- package/src/__tests__/host-file-write-tool.test.ts +0 -77
- package/src/__tests__/host-shell-tool.test.ts +0 -311
- package/src/__tests__/ingress-url-consistency.test.ts +0 -214
- package/src/__tests__/intent-routing.test.ts +0 -259
- package/src/__tests__/ipc-blob-store.test.ts +0 -315
- package/src/__tests__/ipc-contract-inventory.test.ts +0 -54
- package/src/__tests__/ipc-contract.test.ts +0 -74
- package/src/__tests__/ipc-protocol.test.ts +0 -113
- package/src/__tests__/ipc-roundtrip.benchmark.test.ts +0 -237
- package/src/__tests__/ipc-snapshot.test.ts +0 -1698
- package/src/__tests__/ipc-validate.test.ts +0 -357
- package/src/__tests__/key-migration.test.ts +0 -183
- package/src/__tests__/keychain.test.ts +0 -258
- package/src/__tests__/llm-usage-store.test.ts +0 -221
- package/src/__tests__/managed-skill-lifecycle.test.ts +0 -257
- package/src/__tests__/managed-store.test.ts +0 -608
- package/src/__tests__/media-generate-image.test.ts +0 -238
- package/src/__tests__/media-reuse-story.e2e.test.ts +0 -676
- package/src/__tests__/media-visibility-policy.test.ts +0 -141
- package/src/__tests__/memory-context-benchmark.benchmark.test.ts +0 -235
- package/src/__tests__/memory-lifecycle-e2e.test.ts +0 -481
- package/src/__tests__/memory-query-builder.test.ts +0 -59
- package/src/__tests__/memory-recall-quality.test.ts +0 -846
- package/src/__tests__/memory-regressions.experimental.test.ts +0 -538
- package/src/__tests__/memory-regressions.test.ts +0 -4336
- package/src/__tests__/memory-retrieval-budget.test.ts +0 -49
- package/src/__tests__/memory-retrieval.benchmark.test.ts +0 -430
- package/src/__tests__/migration-cli-flows.test.ts +0 -169
- package/src/__tests__/migration-ordering.test.ts +0 -249
- package/src/__tests__/mock-signup-server.test.ts +0 -528
- package/src/__tests__/oauth-callback-registry.test.ts +0 -85
- package/src/__tests__/oauth2-gateway-transport.test.ts +0 -285
- package/src/__tests__/onboarding-starter-tasks.test.ts +0 -176
- package/src/__tests__/onboarding-template-contract.test.ts +0 -58
- package/src/__tests__/openai-provider.test.ts +0 -753
- package/src/__tests__/parallel-tool.benchmark.test.ts +0 -294
- package/src/__tests__/parser.test.ts +0 -472
- package/src/__tests__/path-classifier.test.ts +0 -73
- package/src/__tests__/path-policy.test.ts +0 -435
- package/src/__tests__/platform-move-helper.test.ts +0 -99
- package/src/__tests__/platform-socket-path.test.ts +0 -52
- package/src/__tests__/platform-workspace-migration.test.ts +0 -1000
- package/src/__tests__/platform.test.ts +0 -131
- package/src/__tests__/playbook-tools.test.ts +0 -342
- package/src/__tests__/prebuilt-home-base-seed.test.ts +0 -75
- package/src/__tests__/pricing.test.ts +0 -256
- package/src/__tests__/profile-compiler.test.ts +0 -374
- package/src/__tests__/provider-commit-message-generator.test.ts +0 -342
- package/src/__tests__/provider-registry-ollama.test.ts +0 -16
- package/src/__tests__/provider-streaming.benchmark.test.ts +0 -773
- package/src/__tests__/proxy-approval-callback.test.ts +0 -601
- package/src/__tests__/public-ingress-urls.test.ts +0 -222
- package/src/__tests__/ratelimit.test.ts +0 -297
- package/src/__tests__/recurrence-engine-rruleset.test.ts +0 -78
- package/src/__tests__/recurrence-engine.test.ts +0 -69
- package/src/__tests__/recurrence-types.test.ts +0 -71
- package/src/__tests__/registry.test.ts +0 -494
- package/src/__tests__/relay-server.test.ts +0 -688
- package/src/__tests__/reminder-store.test.ts +0 -223
- package/src/__tests__/reminder.test.ts +0 -229
- package/src/__tests__/request-file-tool.test.ts +0 -158
- package/src/__tests__/run-orchestrator-assistant-events.test.ts +0 -222
- package/src/__tests__/run-orchestrator.test.ts +0 -200
- package/src/__tests__/runtime-attachment-metadata.test.ts +0 -189
- package/src/__tests__/runtime-events-sse-parity.test.ts +0 -343
- package/src/__tests__/runtime-events-sse.test.ts +0 -162
- package/src/__tests__/runtime-runs-http.test.ts +0 -433
- package/src/__tests__/runtime-runs.test.ts +0 -273
- package/src/__tests__/sandbox-diagnostics.test.ts +0 -408
- package/src/__tests__/sandbox-host-parity.test.ts +0 -950
- package/src/__tests__/scaffold-managed-skill-tool.test.ts +0 -253
- package/src/__tests__/schedule-store.test.ts +0 -482
- package/src/__tests__/schedule-tools.test.ts +0 -700
- package/src/__tests__/scheduler-recurrence.test.ts +0 -329
- package/src/__tests__/script-proxy-certs.test.ts +0 -90
- package/src/__tests__/script-proxy-connect-tunnel.test.ts +0 -177
- package/src/__tests__/script-proxy-decision-trace.test.ts +0 -156
- package/src/__tests__/script-proxy-http-forwarder.test.ts +0 -281
- package/src/__tests__/script-proxy-injection-runtime.test.ts +0 -401
- package/src/__tests__/script-proxy-mitm-handler.test.ts +0 -407
- package/src/__tests__/script-proxy-policy-runtime.test.ts +0 -287
- package/src/__tests__/script-proxy-policy.test.ts +0 -310
- package/src/__tests__/script-proxy-rewrite-specificity.test.ts +0 -135
- package/src/__tests__/script-proxy-router.test.ts +0 -180
- package/src/__tests__/script-proxy-session-manager.test.ts +0 -382
- package/src/__tests__/script-proxy-session-runtime.test.ts +0 -113
- package/src/__tests__/secret-allowlist.test.ts +0 -229
- package/src/__tests__/secret-ingress-handler.test.ts +0 -99
- package/src/__tests__/secret-onetime-send.test.ts +0 -130
- package/src/__tests__/secret-prompt-log-hygiene.test.ts +0 -106
- package/src/__tests__/secret-response-routing.test.ts +0 -93
- package/src/__tests__/secret-scanner-executor.test.ts +0 -348
- package/src/__tests__/secret-scanner.test.ts +0 -857
- package/src/__tests__/secure-keys.test.ts +0 -323
- package/src/__tests__/server-history-render.test.ts +0 -431
- package/src/__tests__/session-abort-tool-results.test.ts +0 -240
- package/src/__tests__/session-conflict-gate.test.ts +0 -700
- package/src/__tests__/session-error.test.ts +0 -369
- package/src/__tests__/session-evictor.test.ts +0 -188
- package/src/__tests__/session-init.benchmark.test.ts +0 -462
- package/src/__tests__/session-load-history-repair.test.ts +0 -222
- package/src/__tests__/session-pre-run-repair.test.ts +0 -213
- package/src/__tests__/session-profile-injection.test.ts +0 -444
- package/src/__tests__/session-provider-retry-repair.test.ts +0 -306
- package/src/__tests__/session-queue.test.ts +0 -1535
- package/src/__tests__/session-runtime-assembly.test.ts +0 -476
- package/src/__tests__/session-runtime-workspace.test.ts +0 -183
- package/src/__tests__/session-skill-tools.test.ts +0 -2431
- package/src/__tests__/session-slash-known.test.ts +0 -368
- package/src/__tests__/session-slash-queue.test.ts +0 -288
- package/src/__tests__/session-slash-unknown.test.ts +0 -271
- package/src/__tests__/session-surfaces-task-progress.test.ts +0 -104
- package/src/__tests__/session-tool-setup-app-refresh.test.ts +0 -473
- package/src/__tests__/session-tool-setup-memory-scope.test.ts +0 -140
- package/src/__tests__/session-tool-setup-side-effect-flag.test.ts +0 -140
- package/src/__tests__/session-undo.test.ts +0 -75
- package/src/__tests__/session-workspace-cache-state.test.ts +0 -246
- package/src/__tests__/session-workspace-injection.test.ts +0 -327
- package/src/__tests__/session-workspace-tool-tracking.test.ts +0 -240
- package/src/__tests__/shared-filesystem-errors.test.ts +0 -78
- package/src/__tests__/shell-credential-ref.test.ts +0 -187
- package/src/__tests__/shell-parser-fuzz.test.ts +0 -544
- package/src/__tests__/shell-parser-property.test.ts +0 -433
- package/src/__tests__/shell-tool-proxy-mode.test.ts +0 -272
- package/src/__tests__/signup-e2e.test.ts +0 -353
- package/src/__tests__/size-guard.test.ts +0 -117
- package/src/__tests__/skill-include-graph.test.ts +0 -303
- package/src/__tests__/skill-load-tool.test.ts +0 -409
- package/src/__tests__/skill-projection.benchmark.test.ts +0 -328
- package/src/__tests__/skill-script-runner-host.test.ts +0 -489
- package/src/__tests__/skill-script-runner-sandbox.test.ts +0 -349
- package/src/__tests__/skill-script-runner.test.ts +0 -159
- package/src/__tests__/skill-tool-factory.test.ts +0 -252
- package/src/__tests__/skill-tool-manifest.test.ts +0 -658
- package/src/__tests__/skill-version-hash.test.ts +0 -182
- package/src/__tests__/skills.test.ts +0 -680
- package/src/__tests__/slash-commands-catalog.test.ts +0 -86
- package/src/__tests__/slash-commands-parser.test.ts +0 -119
- package/src/__tests__/slash-commands-resolver.test.ts +0 -193
- package/src/__tests__/slash-commands-rewrite.test.ts +0 -39
- package/src/__tests__/speaker-identification.test.ts +0 -52
- package/src/__tests__/starter-bundle.test.ts +0 -136
- package/src/__tests__/starter-task-flow.test.ts +0 -143
- package/src/__tests__/subagent-manager-notify.test.ts +0 -404
- package/src/__tests__/subagent-tools.test.ts +0 -218
- package/src/__tests__/subagent-types.test.ts +0 -78
- package/src/__tests__/swarm-orchestrator.test.ts +0 -428
- package/src/__tests__/swarm-plan-validator.test.ts +0 -330
- package/src/__tests__/swarm-recursion.test.ts +0 -165
- package/src/__tests__/swarm-router-planner.test.ts +0 -208
- package/src/__tests__/swarm-session-integration.test.ts +0 -274
- package/src/__tests__/swarm-tool.test.ts +0 -145
- package/src/__tests__/swarm-worker-backend.test.ts +0 -129
- package/src/__tests__/swarm-worker-runner.test.ts +0 -272
- package/src/__tests__/system-prompt.test.ts +0 -439
- package/src/__tests__/task-compiler.test.ts +0 -284
- package/src/__tests__/task-runner.test.ts +0 -216
- package/src/__tests__/task-scheduler.test.ts +0 -217
- package/src/__tests__/task-tools.test.ts +0 -595
- package/src/__tests__/terminal-sandbox-docker.test.ts +0 -1064
- package/src/__tests__/terminal-sandbox.integration.test.ts +0 -178
- package/src/__tests__/terminal-sandbox.test.ts +0 -202
- package/src/__tests__/test-support/browser-skill-harness.ts +0 -90
- package/src/__tests__/test-support/computer-use-skill-harness.ts +0 -45
- package/src/__tests__/tool-audit-listener.test.ts +0 -113
- package/src/__tests__/tool-domain-event-publisher.test.ts +0 -253
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +0 -500
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +0 -516
- package/src/__tests__/tool-executor-redaction.test.ts +0 -289
- package/src/__tests__/tool-executor.test.ts +0 -2055
- package/src/__tests__/tool-metrics-listener.test.ts +0 -225
- package/src/__tests__/tool-notification-listener.test.ts +0 -49
- package/src/__tests__/tool-policy.test.ts +0 -54
- package/src/__tests__/tool-profiling-listener.test.ts +0 -268
- package/src/__tests__/tool-result-truncation.test.ts +0 -217
- package/src/__tests__/tool-trace-listener.test.ts +0 -226
- package/src/__tests__/top-level-renderer.test.ts +0 -121
- package/src/__tests__/top-level-scanner.test.ts +0 -141
- package/src/__tests__/trace-emitter.test.ts +0 -173
- package/src/__tests__/trust-store.test.ts +0 -2031
- package/src/__tests__/turn-commit.test.ts +0 -554
- package/src/__tests__/twilio-provider.test.ts +0 -179
- package/src/__tests__/twilio-routes-twiml.test.ts +0 -127
- package/src/__tests__/twilio-routes.test.ts +0 -822
- package/src/__tests__/twitter-auth-handler.test.ts +0 -666
- package/src/__tests__/url-safety.test.ts +0 -418
- package/src/__tests__/view-image-tool.test.ts +0 -217
- package/src/__tests__/weather-skill-regression.test.ts +0 -225
- package/src/__tests__/web-fetch.test.ts +0 -869
- package/src/__tests__/web-search.test.ts +0 -584
- package/src/__tests__/workspace-git-service.test.ts +0 -1153
- package/src/__tests__/workspace-heartbeat-service.test.ts +0 -486
- package/src/__tests__/workspace-lifecycle.test.ts +0 -292
- package/src/agent/attachments.ts +0 -35
- package/src/agent/loop.ts +0 -500
- package/src/agent/message-types.ts +0 -17
- package/src/agent-heartbeat/agent-heartbeat-service.ts +0 -155
- package/src/autonomy/autonomy-resolver.ts +0 -60
- package/src/autonomy/autonomy-store.ts +0 -122
- package/src/autonomy/disposition-mapper.ts +0 -31
- package/src/autonomy/index.ts +0 -11
- package/src/autonomy/types.ts +0 -39
- package/src/bundler/app-bundler.ts +0 -295
- package/src/bundler/bundle-scanner.ts +0 -535
- package/src/bundler/bundle-signer.ts +0 -124
- package/src/bundler/manifest.ts +0 -21
- package/src/bundler/signature-verifier.ts +0 -184
- package/src/calls/call-bridge.ts +0 -95
- package/src/calls/call-constants.ts +0 -48
- package/src/calls/call-domain.ts +0 -278
- package/src/calls/call-orchestrator.ts +0 -412
- package/src/calls/call-recovery.ts +0 -207
- package/src/calls/call-state-machine.ts +0 -68
- package/src/calls/call-state.ts +0 -87
- package/src/calls/call-store.ts +0 -416
- package/src/calls/elevenlabs-client.ts +0 -89
- package/src/calls/elevenlabs-config.ts +0 -29
- package/src/calls/relay-server.ts +0 -390
- package/src/calls/speaker-identification.ts +0 -213
- package/src/calls/twilio-config.ts +0 -45
- package/src/calls/twilio-provider.ts +0 -178
- package/src/calls/twilio-routes.ts +0 -316
- package/src/calls/types.ts +0 -37
- package/src/calls/voice-provider.ts +0 -14
- package/src/calls/voice-quality.ts +0 -92
- package/src/cli/autonomy.ts +0 -188
- package/src/cli/config-commands.ts +0 -334
- package/src/cli/contacts.ts +0 -149
- package/src/cli/core-commands.ts +0 -784
- package/src/cli/doordash.ts +0 -1055
- package/src/cli/email-guardrails.ts +0 -200
- package/src/cli/email.ts +0 -405
- package/src/cli/ipc-client.ts +0 -82
- package/src/cli/main-screen.tsx +0 -53
- package/src/cli/map.ts +0 -270
- package/src/cli/twitter.ts +0 -575
- package/src/cli.ts +0 -937
- package/src/commands/__tests__/cc-command-registry.test.ts +0 -319
- package/src/commands/cc-command-registry.ts +0 -209
- package/src/config/bundled-skills/.gitkeep +0 -0
- package/src/config/bundled-skills/agentmail/SKILL.md +0 -128
- package/src/config/bundled-skills/agentmail/icon.svg +0 -21
- package/src/config/bundled-skills/app-builder/SKILL.md +0 -1404
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -279
- package/src/config/bundled-skills/app-builder/icon.svg +0 -9
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +0 -15
- package/src/config/bundled-skills/app-builder/tools/app-delete.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-file-edit.ts +0 -11
- package/src/config/bundled-skills/app-builder/tools/app-file-list.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-file-read.ts +0 -18
- package/src/config/bundled-skills/app-builder/tools/app-file-write.ts +0 -11
- package/src/config/bundled-skills/app-builder/tools/app-list.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-query.ts +0 -10
- package/src/config/bundled-skills/app-builder/tools/app-update.ts +0 -20
- package/src/config/bundled-skills/browser/SKILL.md +0 -28
- package/src/config/bundled-skills/browser/TOOLS.json +0 -234
- package/src/config/bundled-skills/browser/tools/browser-click.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-close.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-extract.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-fill-credential.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-navigate.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-press-key.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-screenshot.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-snapshot.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-type.ts +0 -9
- package/src/config/bundled-skills/browser/tools/browser-wait-for.ts +0 -9
- package/src/config/bundled-skills/claude-code/SKILL.md +0 -50
- package/src/config/bundled-skills/claude-code/TOOLS.json +0 -40
- package/src/config/bundled-skills/claude-code/tools/claude-code.ts +0 -9
- package/src/config/bundled-skills/computer-use/SKILL.md +0 -17
- package/src/config/bundled-skills/computer-use/TOOLS.json +0 -326
- package/src/config/bundled-skills/computer-use/tools/computer-use-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-done.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-double-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-drag.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-key.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-open-app.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-request-control.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-respond.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-right-click.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-run-applescript.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-scroll.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-type-text.ts +0 -9
- package/src/config/bundled-skills/computer-use/tools/computer-use-wait.ts +0 -9
- package/src/config/bundled-skills/contacts/SKILL.md +0 -39
- package/src/config/bundled-skills/contacts/TOOLS.json +0 -122
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +0 -9
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +0 -9
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +0 -9
- package/src/config/bundled-skills/document/SKILL.md +0 -26
- package/src/config/bundled-skills/document/TOOLS.json +0 -53
- package/src/config/bundled-skills/document/tools/document-create.ts +0 -9
- package/src/config/bundled-skills/document/tools/document-update.ts +0 -9
- package/src/config/bundled-skills/doordash/SKILL.md +0 -163
- package/src/config/bundled-skills/followups/SKILL.md +0 -32
- package/src/config/bundled-skills/followups/TOOLS.json +0 -100
- package/src/config/bundled-skills/followups/icon.svg +0 -24
- package/src/config/bundled-skills/followups/tools/followup-create.ts +0 -9
- package/src/config/bundled-skills/followups/tools/followup-list.ts +0 -9
- package/src/config/bundled-skills/followups/tools/followup-resolve.ts +0 -9
- package/src/config/bundled-skills/google-calendar/SKILL.md +0 -51
- package/src/config/bundled-skills/google-calendar/TOOLS.json +0 -108
- package/src/config/bundled-skills/google-calendar/calendar-client.ts +0 -165
- package/src/config/bundled-skills/google-calendar/tools/calendar-check-availability.ts +0 -21
- package/src/config/bundled-skills/google-calendar/tools/calendar-create-event.ts +0 -42
- package/src/config/bundled-skills/google-calendar/tools/calendar-get-event.ts +0 -13
- package/src/config/bundled-skills/google-calendar/tools/calendar-list-events.ts +0 -30
- package/src/config/bundled-skills/google-calendar/tools/calendar-rsvp.ts +0 -41
- package/src/config/bundled-skills/google-calendar/tools/shared.ts +0 -18
- package/src/config/bundled-skills/google-calendar/types.ts +0 -97
- package/src/config/bundled-skills/image-studio/SKILL.md +0 -32
- package/src/config/bundled-skills/image-studio/TOOLS.json +0 -42
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +0 -115
- package/src/config/bundled-skills/macos-automation/SKILL.md +0 -66
- package/src/config/bundled-skills/messaging/SKILL.md +0 -130
- package/src/config/bundled-skills/messaging/TOOLS.json +0 -357
- package/src/config/bundled-skills/messaging/tools/gmail-archive.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-batch-archive.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-batch-label.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/gmail-draft.ts +0 -26
- package/src/config/bundled-skills/messaging/tools/gmail-label.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/gmail-trash.ts +0 -23
- package/src/config/bundled-skills/messaging/tools/gmail-unsubscribe.ts +0 -84
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-activity.ts +0 -18
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +0 -125
- package/src/config/bundled-skills/messaging/tools/messaging-auth-test.ts +0 -16
- package/src/config/bundled-skills/messaging/tools/messaging-draft.ts +0 -49
- package/src/config/bundled-skills/messaging/tools/messaging-list-conversations.ts +0 -21
- package/src/config/bundled-skills/messaging/tools/messaging-mark-read.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/messaging-read.ts +0 -28
- package/src/config/bundled-skills/messaging/tools/messaging-reply.ts +0 -29
- package/src/config/bundled-skills/messaging/tools/messaging-search.ts +0 -22
- package/src/config/bundled-skills/messaging/tools/messaging-send.ts +0 -27
- package/src/config/bundled-skills/messaging/tools/shared.ts +0 -71
- package/src/config/bundled-skills/messaging/tools/slack-add-reaction.ts +0 -25
- package/src/config/bundled-skills/messaging/tools/slack-leave-channel.ts +0 -23
- package/src/config/bundled-skills/phone-calls/SKILL.md +0 -414
- package/src/config/bundled-skills/playbooks/SKILL.md +0 -31
- package/src/config/bundled-skills/playbooks/TOOLS.json +0 -126
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +0 -9
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +0 -9
- package/src/config/bundled-skills/public-ingress/SKILL.md +0 -183
- package/src/config/bundled-skills/reminder/SKILL.md +0 -20
- package/src/config/bundled-skills/reminder/TOOLS.json +0 -67
- package/src/config/bundled-skills/reminder/tools/reminder-cancel.ts +0 -9
- package/src/config/bundled-skills/reminder/tools/reminder-create.ts +0 -9
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +0 -9
- package/src/config/bundled-skills/schedule/SKILL.md +0 -74
- package/src/config/bundled-skills/schedule/TOOLS.json +0 -135
- package/src/config/bundled-skills/schedule/tools/schedule-create.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-delete.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-list.ts +0 -9
- package/src/config/bundled-skills/schedule/tools/schedule-update.ts +0 -9
- package/src/config/bundled-skills/self-upgrade/SKILL.md +0 -68
- package/src/config/bundled-skills/start-the-day/SKILL.md +0 -70
- package/src/config/bundled-skills/start-the-day/icon.svg +0 -13
- package/src/config/bundled-skills/subagent/SKILL.md +0 -25
- package/src/config/bundled-skills/subagent/TOOLS.json +0 -107
- package/src/config/bundled-skills/subagent/tools/subagent-abort.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-message.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-read.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-spawn.ts +0 -9
- package/src/config/bundled-skills/subagent/tools/subagent-status.ts +0 -9
- package/src/config/bundled-skills/tasks/SKILL.md +0 -28
- package/src/config/bundled-skills/tasks/TOOLS.json +0 -281
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-list.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-queue-run.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-run.ts +0 -9
- package/src/config/bundled-skills/tasks/tools/task-save.ts +0 -9
- package/src/config/bundled-skills/transcribe/SKILL.md +0 -25
- package/src/config/bundled-skills/transcribe/TOOLS.json +0 -32
- package/src/config/bundled-skills/transcribe/tools/transcribe-media.ts +0 -370
- package/src/config/bundled-skills/twitter/SKILL.md +0 -134
- package/src/config/bundled-skills/watcher/SKILL.md +0 -27
- package/src/config/bundled-skills/watcher/TOOLS.json +0 -147
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +0 -9
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +0 -9
- package/src/config/bundled-skills/weather/SKILL.md +0 -37
- package/src/config/bundled-skills/weather/TOOLS.json +0 -32
- package/src/config/bundled-skills/weather/icon.svg +0 -24
- package/src/config/bundled-skills/weather/tools/get-weather.ts +0 -9
- package/src/config/computer-use-prompt.ts +0 -97
- package/src/config/defaults.ts +0 -252
- package/src/config/loader.ts +0 -339
- package/src/config/schema.ts +0 -1356
- package/src/config/skill-state.ts +0 -95
- package/src/config/skills.ts +0 -972
- package/src/config/system-prompt.ts +0 -675
- package/src/config/templates/BOOTSTRAP.md +0 -70
- package/src/config/templates/IDENTITY.md +0 -25
- package/src/config/templates/LOOKS.md +0 -25
- package/src/config/templates/SOUL.md +0 -37
- package/src/config/templates/USER.md +0 -19
- package/src/config/types.ts +0 -40
- package/src/config/vellum-skills/deploy-fullstack-vercel/SKILL.md +0 -179
- package/src/config/vellum-skills/document-writer/SKILL.md +0 -195
- package/src/config/vellum-skills/google-oauth-setup/SKILL.md +0 -199
- package/src/config/vellum-skills/slack-oauth-setup/SKILL.md +0 -153
- package/src/config/vellum-skills/telegram-setup/SKILL.md +0 -102
- package/src/contacts/contact-store.ts +0 -410
- package/src/contacts/index.ts +0 -11
- package/src/contacts/types.ts +0 -28
- package/src/context/token-estimator.ts +0 -108
- package/src/context/tool-result-truncation.ts +0 -128
- package/src/context/window-manager.ts +0 -531
- package/src/daemon/assistant-attachments.ts +0 -689
- package/src/daemon/classifier.ts +0 -110
- package/src/daemon/computer-use-session.ts +0 -903
- package/src/daemon/connection-policy.ts +0 -41
- package/src/daemon/date-context.ts +0 -136
- package/src/daemon/handlers/apps.ts +0 -461
- package/src/daemon/handlers/browser.ts +0 -54
- package/src/daemon/handlers/computer-use.ts +0 -187
- package/src/daemon/handlers/config.ts +0 -707
- package/src/daemon/handlers/diagnostics.ts +0 -338
- package/src/daemon/handlers/documents.ts +0 -173
- package/src/daemon/handlers/home-base.ts +0 -78
- package/src/daemon/handlers/identity.ts +0 -127
- package/src/daemon/handlers/index.ts +0 -128
- package/src/daemon/handlers/misc.ts +0 -331
- package/src/daemon/handlers/open-bundle-handler.ts +0 -80
- package/src/daemon/handlers/publish.ts +0 -187
- package/src/daemon/handlers/sessions.ts +0 -539
- package/src/daemon/handlers/shared.ts +0 -569
- package/src/daemon/handlers/signing.ts +0 -37
- package/src/daemon/handlers/skills.ts +0 -501
- package/src/daemon/handlers/subagents.ts +0 -210
- package/src/daemon/handlers/twitter-auth.ts +0 -198
- package/src/daemon/handlers/work-items.ts +0 -632
- package/src/daemon/handlers/workspace-files.ts +0 -75
- package/src/daemon/handlers.ts +0 -17
- package/src/daemon/history-repair.ts +0 -214
- package/src/daemon/ipc-blob-store.ts +0 -231
- package/src/daemon/ipc-contract-inventory.json +0 -463
- package/src/daemon/ipc-contract-inventory.ts +0 -126
- package/src/daemon/ipc-contract.ts +0 -2352
- package/src/daemon/ipc-protocol.ts +0 -75
- package/src/daemon/ipc-validate.ts +0 -171
- package/src/daemon/lifecycle.ts +0 -580
- package/src/daemon/main.ts +0 -21
- package/src/daemon/media-visibility-policy.ts +0 -57
- package/src/daemon/ride-shotgun-handler.ts +0 -309
- package/src/daemon/server.ts +0 -1207
- package/src/daemon/session-agent-loop.ts +0 -922
- package/src/daemon/session-attachments.ts +0 -196
- package/src/daemon/session-conflict-gate.ts +0 -128
- package/src/daemon/session-dynamic-profile.ts +0 -63
- package/src/daemon/session-error.ts +0 -290
- package/src/daemon/session-evictor.ts +0 -196
- package/src/daemon/session-history.ts +0 -437
- package/src/daemon/session-lifecycle.ts +0 -147
- package/src/daemon/session-media-retry.ts +0 -147
- package/src/daemon/session-memory.ts +0 -212
- package/src/daemon/session-messaging.ts +0 -145
- package/src/daemon/session-notifiers.ts +0 -193
- package/src/daemon/session-process.ts +0 -264
- package/src/daemon/session-queue-manager.ts +0 -82
- package/src/daemon/session-runtime-assembly.ts +0 -447
- package/src/daemon/session-skill-tools.ts +0 -356
- package/src/daemon/session-slash.ts +0 -305
- package/src/daemon/session-surfaces.ts +0 -702
- package/src/daemon/session-tool-setup.ts +0 -524
- package/src/daemon/session-usage.ts +0 -72
- package/src/daemon/session-workspace.ts +0 -19
- package/src/daemon/session.ts +0 -400
- package/src/daemon/trace-emitter.ts +0 -82
- package/src/daemon/video-thumbnail.ts +0 -60
- package/src/daemon/watch-handler.ts +0 -274
- package/src/doordash/client.ts +0 -999
- package/src/doordash/queries.ts +0 -1311
- package/src/doordash/query-extractor.ts +0 -93
- package/src/doordash/session.ts +0 -82
- package/src/email/provider.ts +0 -117
- package/src/email/providers/agentmail.ts +0 -317
- package/src/email/providers/index.ts +0 -58
- package/src/email/service.ts +0 -303
- package/src/email/types.ts +0 -126
- package/src/events/bus.ts +0 -157
- package/src/events/domain-events.ts +0 -83
- package/src/events/index.ts +0 -18
- package/src/events/tool-audit-listener.ts +0 -80
- package/src/events/tool-domain-event-publisher.ts +0 -111
- package/src/events/tool-metrics-listener.ts +0 -159
- package/src/events/tool-notification-listener.ts +0 -17
- package/src/events/tool-profiling-listener.ts +0 -158
- package/src/events/tool-trace-listener.ts +0 -75
- package/src/export/formatter.ts +0 -98
- package/src/followups/followup-store.ts +0 -168
- package/src/followups/index.ts +0 -10
- package/src/followups/types.ts +0 -29
- package/src/gallery/default-gallery.ts +0 -795
- package/src/gallery/gallery-manifest.ts +0 -24
- package/src/home-base/app-link-store.ts +0 -82
- package/src/home-base/bootstrap.ts +0 -68
- package/src/home-base/prebuilt/index.html +0 -662
- package/src/home-base/prebuilt/seed-metadata.json +0 -21
- package/src/home-base/prebuilt/seed.ts +0 -112
- package/src/home-base/prebuilt-home-base-updater.ts +0 -30
- package/src/hooks/cli.ts +0 -163
- package/src/hooks/config.ts +0 -88
- package/src/hooks/discovery.ts +0 -110
- package/src/hooks/manager.ts +0 -128
- package/src/hooks/runner.ts +0 -123
- package/src/hooks/templates.ts +0 -52
- package/src/hooks/types.ts +0 -72
- package/src/inbound/public-ingress-urls.ts +0 -123
- package/src/index.ts +0 -75
- package/src/instrument.ts +0 -60
- package/src/logfire.ts +0 -99
- package/src/media/gemini-image-service.ts +0 -136
- package/src/memory/account-store.ts +0 -108
- package/src/memory/admin.ts +0 -211
- package/src/memory/app-store.ts +0 -556
- package/src/memory/attachments-store.ts +0 -397
- package/src/memory/channel-delivery-store.ts +0 -353
- package/src/memory/checkpoints.ts +0 -52
- package/src/memory/clarification-resolver.ts +0 -298
- package/src/memory/conflict-intent.ts +0 -114
- package/src/memory/conflict-store.ts +0 -342
- package/src/memory/contradiction-checker.ts +0 -330
- package/src/memory/conversation-key-store.ts +0 -107
- package/src/memory/conversation-store.ts +0 -470
- package/src/memory/db.ts +0 -1825
- package/src/memory/embedding-backend.ts +0 -229
- package/src/memory/embedding-gemini.ts +0 -52
- package/src/memory/embedding-local.ts +0 -75
- package/src/memory/embedding-ollama.ts +0 -55
- package/src/memory/embedding-openai.ts +0 -25
- package/src/memory/entity-extractor.ts +0 -474
- package/src/memory/fingerprint.ts +0 -20
- package/src/memory/indexer.ts +0 -156
- package/src/memory/items-extractor.ts +0 -461
- package/src/memory/job-handlers/backfill.ts +0 -139
- package/src/memory/job-handlers/cleanup.ts +0 -58
- package/src/memory/job-handlers/conflict.ts +0 -121
- package/src/memory/job-handlers/embedding.ts +0 -61
- package/src/memory/job-handlers/extraction.ts +0 -123
- package/src/memory/job-handlers/index-maintenance.ts +0 -54
- package/src/memory/job-handlers/summarization.ts +0 -286
- package/src/memory/job-utils.ts +0 -170
- package/src/memory/jobs-store.ts +0 -401
- package/src/memory/jobs-worker.ts +0 -274
- package/src/memory/llm-request-log-store.ts +0 -45
- package/src/memory/llm-usage-store.ts +0 -60
- package/src/memory/message-content.ts +0 -54
- package/src/memory/profile-compiler.ts +0 -160
- package/src/memory/published-pages-store.ts +0 -137
- package/src/memory/qdrant-client.ts +0 -366
- package/src/memory/qdrant-manager.ts +0 -242
- package/src/memory/query-builder.ts +0 -45
- package/src/memory/retrieval-budget.ts +0 -30
- package/src/memory/retriever.ts +0 -653
- package/src/memory/runs-store.ts +0 -255
- package/src/memory/schema.ts +0 -588
- package/src/memory/search/entity.ts +0 -298
- package/src/memory/search/formatting.ts +0 -207
- package/src/memory/search/lexical.ts +0 -227
- package/src/memory/search/ranking.ts +0 -401
- package/src/memory/search/semantic.ts +0 -121
- package/src/memory/search/types.ts +0 -137
- package/src/memory/segmenter.ts +0 -68
- package/src/memory/shared-app-links-store.ts +0 -138
- package/src/memory/tool-usage-store.ts +0 -62
- package/src/messaging/activity-analyzer.ts +0 -76
- package/src/messaging/draft-store.ts +0 -88
- package/src/messaging/index.ts +0 -3
- package/src/messaging/provider-types.ts +0 -80
- package/src/messaging/provider.ts +0 -43
- package/src/messaging/providers/gmail/adapter.ts +0 -193
- package/src/messaging/providers/gmail/client.ts +0 -204
- package/src/messaging/providers/gmail/types.ts +0 -90
- package/src/messaging/providers/slack/adapter.ts +0 -202
- package/src/messaging/providers/slack/client.ts +0 -198
- package/src/messaging/providers/slack/types.ts +0 -119
- package/src/messaging/registry.ts +0 -34
- package/src/messaging/style-analyzer.ts +0 -159
- package/src/messaging/thread-summarizer.ts +0 -306
- package/src/messaging/triage-engine.ts +0 -323
- package/src/messaging/types.ts +0 -55
- package/src/permissions/checker.ts +0 -636
- package/src/permissions/defaults.ts +0 -254
- package/src/permissions/prompter.ts +0 -102
- package/src/permissions/secret-prompter.ts +0 -114
- package/src/permissions/trust-store.ts +0 -584
- package/src/permissions/types.ts +0 -62
- package/src/playbooks/index.ts +0 -2
- package/src/playbooks/playbook-compiler.ts +0 -90
- package/src/playbooks/types.ts +0 -55
- package/src/providers/anthropic/client.ts +0 -751
- package/src/providers/failover.ts +0 -129
- package/src/providers/fireworks/client.ts +0 -20
- package/src/providers/gemini/client.ts +0 -285
- package/src/providers/ollama/client.ts +0 -30
- package/src/providers/openai/client.ts +0 -337
- package/src/providers/openrouter/client.ts +0 -20
- package/src/providers/ratelimit.ts +0 -93
- package/src/providers/registry.ts +0 -146
- package/src/providers/retry.ts +0 -106
- package/src/providers/stream-timeout.ts +0 -38
- package/src/providers/types.ts +0 -109
- package/src/runtime/assistant-event-hub.ts +0 -120
- package/src/runtime/assistant-event.ts +0 -82
- package/src/runtime/gateway-client.ts +0 -42
- package/src/runtime/http-server.ts +0 -1056
- package/src/runtime/http-types.ts +0 -66
- package/src/runtime/routes/app-routes.ts +0 -174
- package/src/runtime/routes/attachment-routes.ts +0 -133
- package/src/runtime/routes/call-routes.ts +0 -140
- package/src/runtime/routes/channel-routes.ts +0 -382
- package/src/runtime/routes/conversation-routes.ts +0 -352
- package/src/runtime/routes/events-routes.ts +0 -79
- package/src/runtime/routes/run-routes.ts +0 -262
- package/src/runtime/routes/secret-routes.ts +0 -76
- package/src/runtime/run-orchestrator.ts +0 -296
- package/src/schedule/recurrence-engine.ts +0 -138
- package/src/schedule/recurrence-types.ts +0 -67
- package/src/schedule/schedule-store.ts +0 -497
- package/src/schedule/scheduler.ts +0 -171
- package/src/security/encrypted-store.ts +0 -238
- package/src/security/keychain.ts +0 -252
- package/src/security/oauth-callback-registry.ts +0 -66
- package/src/security/oauth2.ts +0 -274
- package/src/security/redaction.ts +0 -89
- package/src/security/secret-allowlist.ts +0 -164
- package/src/security/secret-ingress.ts +0 -57
- package/src/security/secret-scanner.ts +0 -543
- package/src/security/secure-keys.ts +0 -180
- package/src/security/token-manager.ts +0 -141
- package/src/services/published-app-updater.ts +0 -69
- package/src/services/vercel-deploy.ts +0 -73
- package/src/skills/active-skill-tools.ts +0 -81
- package/src/skills/clawhub.ts +0 -414
- package/src/skills/include-graph.ts +0 -146
- package/src/skills/managed-store.ts +0 -233
- package/src/skills/path-classifier.ts +0 -128
- package/src/skills/slash-commands.ts +0 -174
- package/src/skills/tool-manifest.ts +0 -165
- package/src/skills/version-hash.ts +0 -110
- package/src/slack/slack-webhook.ts +0 -61
- package/src/subagent/index.ts +0 -19
- package/src/subagent/manager.ts +0 -511
- package/src/subagent/types.ts +0 -69
- package/src/swarm/backend-claude-code.ts +0 -145
- package/src/swarm/index.ts +0 -44
- package/src/swarm/limits.ts +0 -37
- package/src/swarm/orchestrator.ts +0 -279
- package/src/swarm/plan-validator.ts +0 -151
- package/src/swarm/router-planner.ts +0 -100
- package/src/swarm/router-prompts.ts +0 -36
- package/src/swarm/synthesizer.ts +0 -62
- package/src/swarm/types.ts +0 -62
- package/src/swarm/worker-backend.ts +0 -121
- package/src/swarm/worker-prompts.ts +0 -79
- package/src/swarm/worker-runner.ts +0 -164
- package/src/tasks/SPEC.md +0 -139
- package/src/tasks/candidate-store.ts +0 -86
- package/src/tasks/ephemeral-permissions.ts +0 -50
- package/src/tasks/task-compiler.ts +0 -199
- package/src/tasks/task-runner.ts +0 -90
- package/src/tasks/task-scheduler.ts +0 -20
- package/src/tasks/task-store.ts +0 -127
- package/src/tasks/tool-sanitizer.ts +0 -36
- package/src/tools/apps/definitions.ts +0 -59
- package/src/tools/apps/executors.ts +0 -313
- package/src/tools/apps/open-proxy.ts +0 -43
- package/src/tools/apps/registry.ts +0 -16
- package/src/tools/assets/materialize.ts +0 -218
- package/src/tools/assets/search.ts +0 -361
- package/src/tools/browser/__tests__/auth-cache.test.ts +0 -219
- package/src/tools/browser/__tests__/auth-detector.test.ts +0 -362
- package/src/tools/browser/__tests__/jit-auth.test.ts +0 -189
- package/src/tools/browser/api-map.ts +0 -293
- package/src/tools/browser/auth-cache.ts +0 -149
- package/src/tools/browser/auth-detector.ts +0 -347
- package/src/tools/browser/auto-navigate.ts +0 -270
- package/src/tools/browser/browser-execution.ts +0 -980
- package/src/tools/browser/browser-handoff.ts +0 -79
- package/src/tools/browser/browser-manager.ts +0 -715
- package/src/tools/browser/browser-screencast.ts +0 -217
- package/src/tools/browser/headless-browser.ts +0 -450
- package/src/tools/browser/jit-auth.ts +0 -51
- package/src/tools/browser/network-recorder.ts +0 -349
- package/src/tools/browser/network-recording-types.ts +0 -49
- package/src/tools/browser/recording-store.ts +0 -49
- package/src/tools/browser/runtime-check.ts +0 -43
- package/src/tools/browser/x-auto-navigate.ts +0 -207
- package/src/tools/calls/call-end.ts +0 -67
- package/src/tools/calls/call-start.ts +0 -73
- package/src/tools/calls/call-status.ts +0 -81
- package/src/tools/claude-code/claude-code.ts +0 -428
- package/src/tools/computer-use/definitions.ts +0 -443
- package/src/tools/computer-use/registry.ts +0 -22
- package/src/tools/computer-use/request-computer-control.ts +0 -53
- package/src/tools/computer-use/skill-proxy-bridge.ts +0 -28
- package/src/tools/contacts/contact-merge.ts +0 -55
- package/src/tools/contacts/contact-search.ts +0 -58
- package/src/tools/contacts/contact-upsert.ts +0 -64
- package/src/tools/credentials/account-registry.ts +0 -127
- package/src/tools/credentials/broker-types.ts +0 -107
- package/src/tools/credentials/broker.ts +0 -372
- package/src/tools/credentials/domain-policy.ts +0 -51
- package/src/tools/credentials/host-pattern-match.ts +0 -60
- package/src/tools/credentials/metadata-store.ts +0 -335
- package/src/tools/credentials/policy-types.ts +0 -52
- package/src/tools/credentials/policy-validate.ts +0 -80
- package/src/tools/credentials/resolve.ts +0 -122
- package/src/tools/credentials/selection.ts +0 -159
- package/src/tools/credentials/tool-policy.ts +0 -25
- package/src/tools/credentials/vault.ts +0 -657
- package/src/tools/document/document-tool.ts +0 -92
- package/src/tools/document/editor-template.ts +0 -237
- package/src/tools/executor.ts +0 -944
- package/src/tools/filesystem/edit.ts +0 -127
- package/src/tools/filesystem/fuzzy-match.ts +0 -202
- package/src/tools/filesystem/read.ts +0 -71
- package/src/tools/filesystem/view-image.ts +0 -199
- package/src/tools/filesystem/write.ts +0 -79
- package/src/tools/followups/followup_create.ts +0 -76
- package/src/tools/followups/followup_list.ts +0 -60
- package/src/tools/followups/followup_resolve.ts +0 -56
- package/src/tools/host-filesystem/edit.ts +0 -125
- package/src/tools/host-filesystem/read.ts +0 -80
- package/src/tools/host-filesystem/write.ts +0 -76
- package/src/tools/host-terminal/cli-discover.ts +0 -180
- package/src/tools/host-terminal/host-shell.ts +0 -191
- package/src/tools/memory/definitions.ts +0 -69
- package/src/tools/memory/handlers.ts +0 -246
- package/src/tools/memory/register.ts +0 -66
- package/src/tools/network/__tests__/web-search.test.ts +0 -427
- package/src/tools/network/domain-normalize.ts +0 -85
- package/src/tools/network/script-proxy/__tests__/logging.test.ts +0 -248
- package/src/tools/network/script-proxy/__tests__/policy.test.ts +0 -234
- package/src/tools/network/script-proxy/__tests__/router.test.ts +0 -76
- package/src/tools/network/script-proxy/certs.ts +0 -237
- package/src/tools/network/script-proxy/connect-tunnel.ts +0 -82
- package/src/tools/network/script-proxy/http-forwarder.ts +0 -151
- package/src/tools/network/script-proxy/index.ts +0 -28
- package/src/tools/network/script-proxy/logging.ts +0 -196
- package/src/tools/network/script-proxy/mitm-handler.ts +0 -269
- package/src/tools/network/script-proxy/policy.ts +0 -152
- package/src/tools/network/script-proxy/router.ts +0 -60
- package/src/tools/network/script-proxy/server.ts +0 -136
- package/src/tools/network/script-proxy/session-manager.ts +0 -534
- package/src/tools/network/script-proxy/types.ts +0 -125
- package/src/tools/network/url-safety.ts +0 -227
- package/src/tools/network/web-fetch.ts +0 -713
- package/src/tools/network/web-search.ts +0 -319
- package/src/tools/playbooks/index.ts +0 -4
- package/src/tools/playbooks/playbook-create.ts +0 -96
- package/src/tools/playbooks/playbook-delete.ts +0 -52
- package/src/tools/playbooks/playbook-list.ts +0 -74
- package/src/tools/playbooks/playbook-update.ts +0 -111
- package/src/tools/registry.ts +0 -295
- package/src/tools/reminder/reminder-store.ts +0 -148
- package/src/tools/reminder/reminder.ts +0 -80
- package/src/tools/schedule/create.ts +0 -81
- package/src/tools/schedule/delete.ts +0 -28
- package/src/tools/schedule/list.ts +0 -69
- package/src/tools/schedule/update.ts +0 -90
- package/src/tools/shared/filesystem/edit-engine.ts +0 -56
- package/src/tools/shared/filesystem/errors.ts +0 -85
- package/src/tools/shared/filesystem/file-ops-service.ts +0 -215
- package/src/tools/shared/filesystem/format-diff.ts +0 -35
- package/src/tools/shared/filesystem/path-policy.ts +0 -125
- package/src/tools/shared/filesystem/size-guard.ts +0 -41
- package/src/tools/shared/filesystem/types.ts +0 -80
- package/src/tools/shared/shell-output.ts +0 -52
- package/src/tools/skills/delete-managed.ts +0 -60
- package/src/tools/skills/load.ts +0 -139
- package/src/tools/skills/sandbox-runner.ts +0 -279
- package/src/tools/skills/scaffold-managed.ts +0 -150
- package/src/tools/skills/script-contract.ts +0 -6
- package/src/tools/skills/skill-script-runner.ts +0 -86
- package/src/tools/skills/skill-tool-factory.ts +0 -64
- package/src/tools/skills/vellum-catalog.ts +0 -217
- package/src/tools/subagent/abort.ts +0 -33
- package/src/tools/subagent/message.ts +0 -39
- package/src/tools/subagent/read.ts +0 -67
- package/src/tools/subagent/spawn.ts +0 -46
- package/src/tools/subagent/status.ts +0 -45
- package/src/tools/swarm/delegate.ts +0 -183
- package/src/tools/system/request-permission.ts +0 -98
- package/src/tools/system/version.ts +0 -43
- package/src/tools/tasks/index.ts +0 -27
- package/src/tools/tasks/task-delete.ts +0 -82
- package/src/tools/tasks/task-list.ts +0 -44
- package/src/tools/tasks/task-run.ts +0 -97
- package/src/tools/tasks/task-save.ts +0 -47
- package/src/tools/tasks/work-item-enqueue.ts +0 -234
- package/src/tools/tasks/work-item-list.ts +0 -55
- package/src/tools/tasks/work-item-remove.ts +0 -60
- package/src/tools/tasks/work-item-run.ts +0 -78
- package/src/tools/tasks/work-item-update.ts +0 -114
- package/src/tools/terminal/backends/docker.ts +0 -372
- package/src/tools/terminal/backends/native.ts +0 -190
- package/src/tools/terminal/backends/types.ts +0 -26
- package/src/tools/terminal/evaluate-typescript.ts +0 -275
- package/src/tools/terminal/parser.ts +0 -415
- package/src/tools/terminal/safe-env.ts +0 -37
- package/src/tools/terminal/sandbox-diagnostics.ts +0 -149
- package/src/tools/terminal/sandbox.ts +0 -44
- package/src/tools/terminal/shell.ts +0 -257
- package/src/tools/tool-manifest.ts +0 -198
- package/src/tools/types.ts +0 -183
- package/src/tools/ui-surface/definitions.ts +0 -244
- package/src/tools/ui-surface/registry.ts +0 -14
- package/src/tools/watch/screen-watch.ts +0 -130
- package/src/tools/watch/watch-state.ts +0 -119
- package/src/tools/watcher/create.ts +0 -64
- package/src/tools/watcher/delete.ts +0 -27
- package/src/tools/watcher/digest.ts +0 -50
- package/src/tools/watcher/list.ts +0 -60
- package/src/tools/watcher/update.ts +0 -56
- package/src/tools/weather/service.ts +0 -551
- package/src/twitter/client.ts +0 -690
- package/src/twitter/session.ts +0 -91
- package/src/usage/actors.ts +0 -24
- package/src/usage/types.ts +0 -37
- package/src/util/clipboard.ts +0 -33
- package/src/util/content-id.ts +0 -16
- package/src/util/diff.ts +0 -181
- package/src/util/errors.ts +0 -129
- package/src/util/logger.ts +0 -243
- package/src/util/platform.ts +0 -607
- package/src/util/pricing.ts +0 -150
- package/src/util/spinner.ts +0 -51
- package/src/util/time.ts +0 -16
- package/src/util/truncate.ts +0 -6
- package/src/util/xml.ts +0 -4
- package/src/version.ts +0 -3
- package/src/watcher/constants.ts +0 -11
- package/src/watcher/engine.ts +0 -199
- package/src/watcher/provider-registry.ts +0 -15
- package/src/watcher/provider-types.ts +0 -48
- package/src/watcher/providers/gmail.ts +0 -198
- package/src/watcher/providers/google-calendar.ts +0 -228
- package/src/watcher/providers/slack.ts +0 -129
- package/src/watcher/watcher-store.ts +0 -419
- package/src/work-items/work-item-runner.ts +0 -171
- package/src/work-items/work-item-store.ts +0 -325
- package/src/workspace/commit-message-enrichment-service.ts +0 -284
- package/src/workspace/commit-message-provider.ts +0 -95
- package/src/workspace/git-service.ts +0 -840
- package/src/workspace/heartbeat-service.ts +0 -345
- package/src/workspace/provider-commit-message-generator.ts +0 -285
- package/src/workspace/top-level-renderer.ts +0 -19
- package/src/workspace/top-level-scanner.ts +0 -41
- package/src/workspace/turn-commit.ts +0 -175
- package/tsconfig.json +0 -21
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
2
|
-
import { upsertContact } from '../../contacts/contact-store.js';
|
|
3
|
-
|
|
4
|
-
function formatContact(c: ReturnType<typeof upsertContact>): string {
|
|
5
|
-
const lines = [
|
|
6
|
-
`Contact ${c.id}`,
|
|
7
|
-
` Name: ${c.displayName}`,
|
|
8
|
-
];
|
|
9
|
-
if (c.relationship) lines.push(` Relationship: ${c.relationship}`);
|
|
10
|
-
lines.push(` Importance: ${c.importance.toFixed(2)}`);
|
|
11
|
-
if (c.responseExpectation) lines.push(` Response expectation: ${c.responseExpectation}`);
|
|
12
|
-
if (c.preferredTone) lines.push(` Preferred tone: ${c.preferredTone}`);
|
|
13
|
-
if (c.interactionCount > 0) lines.push(` Interactions: ${c.interactionCount}`);
|
|
14
|
-
if (c.channels.length > 0) {
|
|
15
|
-
lines.push(' Channels:');
|
|
16
|
-
for (const ch of c.channels) {
|
|
17
|
-
const primary = ch.isPrimary ? ' (primary)' : '';
|
|
18
|
-
lines.push(` - ${ch.type}: ${ch.address}${primary}`);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return lines.join('\n');
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export async function executeContactUpsert(
|
|
25
|
-
input: Record<string, unknown>,
|
|
26
|
-
_context: ToolContext,
|
|
27
|
-
): Promise<ToolExecutionResult> {
|
|
28
|
-
const displayName = input.display_name as string | undefined;
|
|
29
|
-
if (!displayName || typeof displayName !== 'string' || displayName.trim().length === 0) {
|
|
30
|
-
return { content: 'Error: display_name is required and must be a non-empty string', isError: true };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const importance = input.importance as number | undefined;
|
|
34
|
-
if (importance !== undefined && (typeof importance !== 'number' || importance < 0 || importance > 1)) {
|
|
35
|
-
return { content: 'Error: importance must be a number between 0 and 1', isError: true };
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const rawChannels = input.channels as Array<{ type: string; address: string; is_primary?: boolean }> | undefined;
|
|
39
|
-
const channels = rawChannels?.map((ch) => ({
|
|
40
|
-
type: ch.type,
|
|
41
|
-
address: ch.address,
|
|
42
|
-
isPrimary: ch.is_primary,
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
const contact = upsertContact({
|
|
47
|
-
id: input.id as string | undefined,
|
|
48
|
-
displayName: displayName.trim(),
|
|
49
|
-
relationship: input.relationship as string | undefined,
|
|
50
|
-
importance,
|
|
51
|
-
responseExpectation: input.response_expectation as string | undefined,
|
|
52
|
-
preferredTone: input.preferred_tone as string | undefined,
|
|
53
|
-
channels,
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
return {
|
|
57
|
-
content: `${contact.created ? 'Created' : 'Updated'} contact:\n${formatContact(contact)}`,
|
|
58
|
-
isError: false,
|
|
59
|
-
};
|
|
60
|
-
} catch (err) {
|
|
61
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
62
|
-
return { content: `Error: ${msg}`, isError: true };
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
2
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
3
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
4
|
-
import {
|
|
5
|
-
createAccount,
|
|
6
|
-
listAccounts,
|
|
7
|
-
getAccount,
|
|
8
|
-
updateAccount,
|
|
9
|
-
} from '../../memory/account-store.js';
|
|
10
|
-
|
|
11
|
-
class AccountManageTool implements Tool {
|
|
12
|
-
name = 'account_manage';
|
|
13
|
-
description = 'Create, list, get, or update account records';
|
|
14
|
-
category = 'credentials';
|
|
15
|
-
defaultRiskLevel = RiskLevel.Low;
|
|
16
|
-
|
|
17
|
-
getDefinition(): ToolDefinition {
|
|
18
|
-
return {
|
|
19
|
-
name: this.name,
|
|
20
|
-
description: this.description,
|
|
21
|
-
input_schema: {
|
|
22
|
-
type: 'object',
|
|
23
|
-
properties: {
|
|
24
|
-
action: {
|
|
25
|
-
type: 'string',
|
|
26
|
-
enum: ['create', 'list', 'get', 'update'],
|
|
27
|
-
description: 'CRUD operation',
|
|
28
|
-
},
|
|
29
|
-
id: {
|
|
30
|
-
type: 'string',
|
|
31
|
-
description: 'Account ID (for get/update)',
|
|
32
|
-
},
|
|
33
|
-
service: {
|
|
34
|
-
type: 'string',
|
|
35
|
-
description: 'Service name',
|
|
36
|
-
},
|
|
37
|
-
username: { type: 'string' },
|
|
38
|
-
email: { type: 'string' },
|
|
39
|
-
display_name: { type: 'string' },
|
|
40
|
-
status: {
|
|
41
|
-
type: 'string',
|
|
42
|
-
enum: ['active', 'pending_verification', 'suspended'],
|
|
43
|
-
},
|
|
44
|
-
credential_ref: {
|
|
45
|
-
type: 'string',
|
|
46
|
-
description: 'Service name linking to credential vault',
|
|
47
|
-
},
|
|
48
|
-
metadata: { type: 'object' },
|
|
49
|
-
},
|
|
50
|
-
required: ['action'],
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async execute(input: Record<string, unknown>, _context: ToolContext): Promise<ToolExecutionResult> {
|
|
56
|
-
const action = input.action as string;
|
|
57
|
-
|
|
58
|
-
switch (action) {
|
|
59
|
-
case 'create': {
|
|
60
|
-
const service = input.service as string | undefined;
|
|
61
|
-
if (!service || typeof service !== 'string') {
|
|
62
|
-
return { content: 'Error: service is required for create action', isError: true };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const record = createAccount({
|
|
66
|
-
service,
|
|
67
|
-
username: input.username as string | undefined,
|
|
68
|
-
email: input.email as string | undefined,
|
|
69
|
-
displayName: input.display_name as string | undefined,
|
|
70
|
-
status: input.status as string | undefined,
|
|
71
|
-
credentialRef: input.credential_ref as string | undefined,
|
|
72
|
-
metadata: input.metadata as Record<string, unknown> | undefined,
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
return { content: JSON.stringify(record, null, 2), isError: false };
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
case 'list': {
|
|
79
|
-
const records = listAccounts({
|
|
80
|
-
service: input.service as string | undefined,
|
|
81
|
-
status: input.status as string | undefined,
|
|
82
|
-
});
|
|
83
|
-
return { content: JSON.stringify(records, null, 2), isError: false };
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
case 'get': {
|
|
87
|
-
const id = input.id as string | undefined;
|
|
88
|
-
if (!id || typeof id !== 'string') {
|
|
89
|
-
return { content: 'Error: id is required for get action', isError: true };
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const record = getAccount(id);
|
|
93
|
-
if (!record) {
|
|
94
|
-
return { content: `Error: account not found: ${id}`, isError: true };
|
|
95
|
-
}
|
|
96
|
-
return { content: JSON.stringify(record, null, 2), isError: false };
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
case 'update': {
|
|
100
|
-
const id = input.id as string | undefined;
|
|
101
|
-
if (!id || typeof id !== 'string') {
|
|
102
|
-
return { content: 'Error: id is required for update action', isError: true };
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const updated = updateAccount(id, {
|
|
106
|
-
service: input.service as string | undefined,
|
|
107
|
-
username: input.username as string | undefined,
|
|
108
|
-
email: input.email as string | undefined,
|
|
109
|
-
displayName: input.display_name as string | undefined,
|
|
110
|
-
status: input.status as string | undefined,
|
|
111
|
-
credentialRef: input.credential_ref as string | undefined,
|
|
112
|
-
metadata: input.metadata as Record<string, unknown> | undefined,
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
if (!updated) {
|
|
116
|
-
return { content: `Error: account not found: ${id}`, isError: true };
|
|
117
|
-
}
|
|
118
|
-
return { content: JSON.stringify(updated, null, 2), isError: false };
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
default:
|
|
122
|
-
return { content: `Error: unknown action "${action}"`, isError: true };
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export const accountManageTool = new AccountManageTool();
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/** Opaque token representing a policy-checked authorization to use a credential. */
|
|
2
|
-
export interface UsageToken {
|
|
3
|
-
tokenId: string;
|
|
4
|
-
credentialId: string;
|
|
5
|
-
service: string;
|
|
6
|
-
field: string;
|
|
7
|
-
toolName: string;
|
|
8
|
-
/** Timestamp (epoch ms) when this token was created. */
|
|
9
|
-
createdAt: number;
|
|
10
|
-
/** Whether this token has been consumed (single-use). */
|
|
11
|
-
consumed: boolean;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** Request to authorize the use of a credential. */
|
|
15
|
-
export interface AuthorizeRequest {
|
|
16
|
-
service: string;
|
|
17
|
-
field: string;
|
|
18
|
-
toolName: string;
|
|
19
|
-
/** Optional domain for domain-policy checking (used by browser tools). */
|
|
20
|
-
domain?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Successful authorization result. */
|
|
24
|
-
export interface AuthorizeSuccess {
|
|
25
|
-
authorized: true;
|
|
26
|
-
token: UsageToken;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Denied authorization result. */
|
|
30
|
-
export interface AuthorizeDenied {
|
|
31
|
-
authorized: false;
|
|
32
|
-
reason: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export type AuthorizeResult = AuthorizeSuccess | AuthorizeDenied;
|
|
36
|
-
|
|
37
|
-
/** Result of consuming a token. */
|
|
38
|
-
export interface ConsumeResult {
|
|
39
|
-
success: boolean;
|
|
40
|
-
/** The storage key to read the secret from (only present on success). */
|
|
41
|
-
storageKey?: string;
|
|
42
|
-
/** The resolved value when a transient (one-time) credential was consumed. */
|
|
43
|
-
value?: string;
|
|
44
|
-
/** Error reason if consumption failed. */
|
|
45
|
-
reason?: string;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Request for the broker to fill a browser field without exposing plaintext. */
|
|
49
|
-
export interface BrowserFillRequest {
|
|
50
|
-
service: string;
|
|
51
|
-
field: string;
|
|
52
|
-
toolName: string;
|
|
53
|
-
domain?: string;
|
|
54
|
-
/**
|
|
55
|
-
* Opaque fill callback — the broker calls this with the plaintext value internally.
|
|
56
|
-
* The caller provides the fill function but never receives the secret value.
|
|
57
|
-
*/
|
|
58
|
-
fill: (value: string) => Promise<void>;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Result of a broker-mediated browser fill — contains only metadata, never plaintext. */
|
|
62
|
-
export interface BrowserFillResult {
|
|
63
|
-
success: boolean;
|
|
64
|
-
reason?: string;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/** Request for the broker to use a credential server-side without exposing plaintext. */
|
|
68
|
-
export interface ServerUseRequest<T> {
|
|
69
|
-
service: string;
|
|
70
|
-
field: string;
|
|
71
|
-
toolName: string;
|
|
72
|
-
/**
|
|
73
|
-
* Opaque callback — the broker calls this with the plaintext value internally.
|
|
74
|
-
* The caller provides the function but never receives the secret value directly.
|
|
75
|
-
*/
|
|
76
|
-
execute: (value: string) => Promise<T>;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** Result of a broker-mediated server-side credential use — contains the callback result, never plaintext. */
|
|
80
|
-
export interface ServerUseResult<T> {
|
|
81
|
-
success: boolean;
|
|
82
|
-
result?: T;
|
|
83
|
-
reason?: string;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** Request to look up a credential by ID for proxy injection (no secret exposed). */
|
|
87
|
-
export interface ServerUseByIdRequest {
|
|
88
|
-
credentialId: string;
|
|
89
|
-
requestingTool: string;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** Successful by-id lookup result — metadata + injection templates, never plaintext. */
|
|
93
|
-
export interface ServerUseByIdSuccess {
|
|
94
|
-
success: true;
|
|
95
|
-
credentialId: string;
|
|
96
|
-
service: string;
|
|
97
|
-
field: string;
|
|
98
|
-
injectionTemplates: import('./policy-types.js').CredentialInjectionTemplate[];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** Denied or not-found by-id lookup result. */
|
|
102
|
-
export interface ServerUseByIdDenied {
|
|
103
|
-
success: false;
|
|
104
|
-
reason: string;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export type ServerUseByIdResult = ServerUseByIdSuccess | ServerUseByIdDenied;
|
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
import { v4 as uuid } from 'uuid';
|
|
2
|
-
import type {
|
|
3
|
-
AuthorizeRequest,
|
|
4
|
-
AuthorizeResult,
|
|
5
|
-
BrowserFillRequest,
|
|
6
|
-
BrowserFillResult,
|
|
7
|
-
ConsumeResult,
|
|
8
|
-
ServerUseByIdRequest,
|
|
9
|
-
ServerUseByIdResult,
|
|
10
|
-
ServerUseRequest,
|
|
11
|
-
ServerUseResult,
|
|
12
|
-
UsageToken,
|
|
13
|
-
} from './broker-types.js';
|
|
14
|
-
import { getCredentialMetadata } from './metadata-store.js';
|
|
15
|
-
import { resolveById } from './resolve.js';
|
|
16
|
-
import { isToolAllowed } from './tool-policy.js';
|
|
17
|
-
import { isDomainAllowed } from './domain-policy.js';
|
|
18
|
-
import { getSecureKey } from '../../security/secure-keys.js';
|
|
19
|
-
import { getLogger } from '../../util/logger.js';
|
|
20
|
-
|
|
21
|
-
const log = getLogger('credential-broker');
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Credential broker that issues single-use tokens for policy-checked credential access.
|
|
25
|
-
*
|
|
26
|
-
* The broker never exposes plaintext secret values. Instead, it:
|
|
27
|
-
* 1. Checks that a credential exists and has metadata
|
|
28
|
-
* 2. Issues a single-use token for the authorized usage
|
|
29
|
-
* 3. On consumption, returns the storage key so the caller can read the secret internally
|
|
30
|
-
*
|
|
31
|
-
* Tool policy is enforced at authorize/fill time; domain policy is enforced at fill time.
|
|
32
|
-
*/
|
|
33
|
-
export class CredentialBroker {
|
|
34
|
-
private tokens = new Map<string, UsageToken>();
|
|
35
|
-
/** Transient values for one-time send: consumed on first read, never persisted.
|
|
36
|
-
* Values are wrapped in objects so post-await guards use reference identity
|
|
37
|
-
* (not string value equality) to detect concurrent replacements. */
|
|
38
|
-
private transientValues = new Map<string, { value: string }>();
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Inject a value for one-time use. The value is consumed on the next
|
|
42
|
-
* browserFill or consume call for this service/field pair, then discarded.
|
|
43
|
-
*/
|
|
44
|
-
injectTransient(service: string, field: string, value: string): void {
|
|
45
|
-
const key = `credential:${service}:${field}`;
|
|
46
|
-
this.transientValues.set(key, { value });
|
|
47
|
-
log.info({ service, field }, 'Transient credential injected for one-time use');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Authorize the use of a credential for a specific tool and optional domain.
|
|
52
|
-
* Returns a single-use token on success, or a denial reason on failure.
|
|
53
|
-
*/
|
|
54
|
-
authorize(request: AuthorizeRequest): AuthorizeResult {
|
|
55
|
-
const metadata = getCredentialMetadata(request.service, request.field);
|
|
56
|
-
if (!metadata) {
|
|
57
|
-
return {
|
|
58
|
-
authorized: false,
|
|
59
|
-
reason: `No credential found for ${request.service}/${request.field}`,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Tool policy enforcement — deny if tool is not in the credential's allowed list
|
|
64
|
-
if (!isToolAllowed(request.toolName, metadata.allowedTools)) {
|
|
65
|
-
const tools = metadata.allowedTools ?? [];
|
|
66
|
-
return {
|
|
67
|
-
authorized: false,
|
|
68
|
-
reason: `Tool "${request.toolName}" is not allowed to use credential ${request.service}/${request.field}. ` +
|
|
69
|
-
(tools.length === 0
|
|
70
|
-
? 'No tools are currently allowed — update the credential with allowed_tools via credential_store.'
|
|
71
|
-
: `Allowed tools: ${tools.join(', ')}.`),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const token: UsageToken = {
|
|
76
|
-
tokenId: uuid(),
|
|
77
|
-
credentialId: metadata.credentialId,
|
|
78
|
-
service: request.service,
|
|
79
|
-
field: request.field,
|
|
80
|
-
toolName: request.toolName,
|
|
81
|
-
createdAt: Date.now(),
|
|
82
|
-
consumed: false,
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
this.tokens.set(token.tokenId, token);
|
|
86
|
-
log.info({ tokenId: token.tokenId, service: request.service, field: request.field, tool: request.toolName },
|
|
87
|
-
'Usage token issued');
|
|
88
|
-
|
|
89
|
-
return { authorized: true, token: { ...token } };
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Consume a previously issued token. Returns the storage key on success.
|
|
94
|
-
* Each token can only be consumed once.
|
|
95
|
-
*/
|
|
96
|
-
consume(tokenId: string): ConsumeResult {
|
|
97
|
-
const token = this.tokens.get(tokenId);
|
|
98
|
-
if (!token) {
|
|
99
|
-
return { success: false, reason: 'Token not found or already revoked' };
|
|
100
|
-
}
|
|
101
|
-
if (token.consumed) {
|
|
102
|
-
return { success: false, reason: 'Token already consumed' };
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
token.consumed = true;
|
|
106
|
-
const storageKey = `credential:${token.service}:${token.field}`;
|
|
107
|
-
// Check for transient value first (one-time send) — consume and return the value
|
|
108
|
-
// directly since transient values are never persisted to secure storage.
|
|
109
|
-
const transient = this.transientValues.get(storageKey);
|
|
110
|
-
if (transient !== undefined) {
|
|
111
|
-
this.transientValues.delete(storageKey);
|
|
112
|
-
log.info({ tokenId, storageKey, transient: true }, 'Usage token consumed (transient)');
|
|
113
|
-
return { success: true, storageKey, value: transient.value };
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
log.info({ tokenId, storageKey }, 'Usage token consumed');
|
|
117
|
-
return { success: true, storageKey };
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Revoke a token, removing it from the active set.
|
|
122
|
-
* Returns true if the token existed and was revoked.
|
|
123
|
-
*/
|
|
124
|
-
revoke(tokenId: string): boolean {
|
|
125
|
-
const existed = this.tokens.delete(tokenId);
|
|
126
|
-
if (existed) {
|
|
127
|
-
log.info({ tokenId }, 'Usage token revoked');
|
|
128
|
-
}
|
|
129
|
-
return existed;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/** Revoke all tokens (e.g. on session teardown). */
|
|
133
|
-
revokeAll(): void {
|
|
134
|
-
const count = this.tokens.size;
|
|
135
|
-
this.tokens.clear();
|
|
136
|
-
if (count > 0) {
|
|
137
|
-
log.info({ count }, 'All usage tokens revoked');
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Fill a browser field using a credential without exposing plaintext to the caller.
|
|
143
|
-
*
|
|
144
|
-
* The broker resolves the credential, reads the secret internally, and passes it
|
|
145
|
-
* to the provided fill callback. The return value contains only metadata — the
|
|
146
|
-
* plaintext never leaves this method's scope.
|
|
147
|
-
*/
|
|
148
|
-
async browserFill(request: BrowserFillRequest): Promise<BrowserFillResult> {
|
|
149
|
-
const metadata = getCredentialMetadata(request.service, request.field);
|
|
150
|
-
if (!metadata) {
|
|
151
|
-
return {
|
|
152
|
-
success: false,
|
|
153
|
-
reason: `No credential found for ${request.service}/${request.field}`,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Tool policy enforcement — deny if tool is not in the credential's allowed list
|
|
158
|
-
if (!isToolAllowed(request.toolName, metadata.allowedTools)) {
|
|
159
|
-
const tools = metadata.allowedTools ?? [];
|
|
160
|
-
return {
|
|
161
|
-
success: false,
|
|
162
|
-
reason: `Tool "${request.toolName}" is not allowed to use credential ${request.service}/${request.field}. ` +
|
|
163
|
-
(tools.length === 0
|
|
164
|
-
? 'No tools are currently allowed — update the credential with allowed_tools via credential_store.'
|
|
165
|
-
: `Allowed tools: ${tools.join(', ')}.`),
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Domain policy enforcement — deny if the page domain is not in the credential's allowed list
|
|
170
|
-
const browserDomains = metadata.allowedDomains ?? [];
|
|
171
|
-
if (browserDomains.length > 0) {
|
|
172
|
-
if (!request.domain) {
|
|
173
|
-
return {
|
|
174
|
-
success: false,
|
|
175
|
-
reason: `Credential ${request.service}/${request.field} has a domain policy but no page domain was provided. ` +
|
|
176
|
-
`Allowed domains: ${browserDomains.join(', ')}.`,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
if (!isDomainAllowed(request.domain, browserDomains)) {
|
|
180
|
-
return {
|
|
181
|
-
success: false,
|
|
182
|
-
reason: `Domain "${request.domain}" is not allowed for credential ${request.service}/${request.field}. ` +
|
|
183
|
-
`Allowed domains: ${browserDomains.join(', ')}.`,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
const storageKey = `credential:${request.service}:${request.field}`;
|
|
189
|
-
// Check transient values first (one-time send), then fall back to keychain.
|
|
190
|
-
// Deletion is deferred until after a successful fill so the value survives
|
|
191
|
-
// transient failures (e.g. stale element, page navigation, Playwright timeout).
|
|
192
|
-
const transient = this.transientValues.get(storageKey);
|
|
193
|
-
const value = transient?.value ?? getSecureKey(storageKey);
|
|
194
|
-
if (!value) {
|
|
195
|
-
return {
|
|
196
|
-
success: false,
|
|
197
|
-
reason: `Credential metadata exists but no stored value for ${request.service}/${request.field}`,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
try {
|
|
202
|
-
await request.fill(value);
|
|
203
|
-
// Only discard the transient value after a successful fill, and only if
|
|
204
|
-
// the map still holds the same reference — a concurrent injectTransient()
|
|
205
|
-
// call during the async fill could have replaced it with a new value.
|
|
206
|
-
if (transient !== undefined && this.transientValues.get(storageKey) === transient) {
|
|
207
|
-
this.transientValues.delete(storageKey);
|
|
208
|
-
}
|
|
209
|
-
log.info(
|
|
210
|
-
{ service: request.service, field: request.field, tool: request.toolName },
|
|
211
|
-
'Browser fill completed',
|
|
212
|
-
);
|
|
213
|
-
return { success: true };
|
|
214
|
-
} catch (err) {
|
|
215
|
-
// Log the raw error for debugging but never return it — the callback
|
|
216
|
-
// error text may embed the credential value, leaking plaintext outside
|
|
217
|
-
// the broker's trust boundary.
|
|
218
|
-
log.error(
|
|
219
|
-
{ err, service: request.service, field: request.field },
|
|
220
|
-
'Browser fill failed',
|
|
221
|
-
);
|
|
222
|
-
return { success: false, reason: 'Fill operation failed' };
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Use a credential server-side without exposing plaintext to the caller.
|
|
228
|
-
*
|
|
229
|
-
* Like browserFill, the broker reads the secret internally and passes it
|
|
230
|
-
* to the provided callback. The return value contains only the callback's
|
|
231
|
-
* result — the plaintext never leaves this method's scope.
|
|
232
|
-
*/
|
|
233
|
-
async serverUse<T>(request: ServerUseRequest<T>): Promise<ServerUseResult<T>> {
|
|
234
|
-
const metadata = getCredentialMetadata(request.service, request.field);
|
|
235
|
-
if (!metadata) {
|
|
236
|
-
return {
|
|
237
|
-
success: false,
|
|
238
|
-
reason: `No credential found for ${request.service}/${request.field}`,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (!isToolAllowed(request.toolName, metadata.allowedTools)) {
|
|
243
|
-
const tools = metadata.allowedTools ?? [];
|
|
244
|
-
return {
|
|
245
|
-
success: false,
|
|
246
|
-
reason: `Tool "${request.toolName}" is not allowed to use credential ${request.service}/${request.field}. ` +
|
|
247
|
-
(tools.length === 0
|
|
248
|
-
? 'No tools are currently allowed — update the credential with allowed_tools via credential_store.'
|
|
249
|
-
: `Allowed tools: ${tools.join(', ')}.`),
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Domain policy enforcement — credentials with domain restrictions are
|
|
254
|
-
// scoped to browser use on those domains and cannot be used server-side.
|
|
255
|
-
const serverDomains = metadata.allowedDomains ?? [];
|
|
256
|
-
if (serverDomains.length > 0) {
|
|
257
|
-
return {
|
|
258
|
-
success: false,
|
|
259
|
-
reason: `Credential ${request.service}/${request.field} has domain restrictions ` +
|
|
260
|
-
`(${serverDomains.join(', ')}) and cannot be used server-side. ` +
|
|
261
|
-
'Remove domain restrictions or use a separate credential without domain policy.',
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
const storageKey = `credential:${request.service}:${request.field}`;
|
|
266
|
-
const transient = this.transientValues.get(storageKey);
|
|
267
|
-
const value = transient?.value ?? getSecureKey(storageKey);
|
|
268
|
-
if (!value) {
|
|
269
|
-
return {
|
|
270
|
-
success: false,
|
|
271
|
-
reason: `Credential metadata exists but no stored value for ${request.service}/${request.field}`,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
try {
|
|
276
|
-
const result = await request.execute(value);
|
|
277
|
-
if (transient !== undefined && this.transientValues.get(storageKey) === transient) {
|
|
278
|
-
this.transientValues.delete(storageKey);
|
|
279
|
-
}
|
|
280
|
-
log.info(
|
|
281
|
-
{ service: request.service, field: request.field, tool: request.toolName },
|
|
282
|
-
'Server-side credential use completed',
|
|
283
|
-
);
|
|
284
|
-
return { success: true, result };
|
|
285
|
-
} catch (err) {
|
|
286
|
-
log.error(
|
|
287
|
-
{ err, service: request.service, field: request.field },
|
|
288
|
-
'Server-side credential use failed',
|
|
289
|
-
);
|
|
290
|
-
return { success: false, reason: 'Credential use failed' };
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Look up a credential by its opaque ID for proxy injection.
|
|
296
|
-
*
|
|
297
|
-
* Returns metadata and injection templates so the proxy knows how to
|
|
298
|
-
* inject the credential into outbound requests. The secret value is
|
|
299
|
-
* never included in the result — the proxy reads it separately via
|
|
300
|
-
* the secure key backend at injection time.
|
|
301
|
-
*/
|
|
302
|
-
serverUseById(request: ServerUseByIdRequest): ServerUseByIdResult {
|
|
303
|
-
const resolved = resolveById(request.credentialId);
|
|
304
|
-
if (!resolved) {
|
|
305
|
-
return {
|
|
306
|
-
success: false,
|
|
307
|
-
reason: `No credential found for id "${request.credentialId}"`,
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
const { metadata } = resolved;
|
|
312
|
-
|
|
313
|
-
// Tool policy enforcement
|
|
314
|
-
if (!isToolAllowed(request.requestingTool, metadata.allowedTools)) {
|
|
315
|
-
const tools = metadata.allowedTools ?? [];
|
|
316
|
-
return {
|
|
317
|
-
success: false,
|
|
318
|
-
reason: `Tool "${request.requestingTool}" is not allowed to use credential ${metadata.service}/${metadata.field}. ` +
|
|
319
|
-
(tools.length === 0
|
|
320
|
-
? 'No tools are currently allowed — update the credential with allowed_tools via credential_store.'
|
|
321
|
-
: `Allowed tools: ${tools.join(', ')}.`),
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// Domain policy enforcement — credentials with domain restrictions are
|
|
326
|
-
// scoped to browser use on those domains and cannot be used server-side.
|
|
327
|
-
const domains = metadata.allowedDomains ?? [];
|
|
328
|
-
if (domains.length > 0) {
|
|
329
|
-
return {
|
|
330
|
-
success: false,
|
|
331
|
-
reason: `Credential ${metadata.service}/${metadata.field} has domain restrictions ` +
|
|
332
|
-
`(${domains.join(', ')}) and cannot be used server-side. ` +
|
|
333
|
-
'Remove domain restrictions or use a separate credential without domain policy.',
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// Fail-closed: verify the secret value actually exists in secure storage.
|
|
338
|
-
// Without this, downstream proxy code would attempt unauthenticated requests.
|
|
339
|
-
const value = getSecureKey(resolved.storageKey);
|
|
340
|
-
if (!value) {
|
|
341
|
-
return {
|
|
342
|
-
success: false,
|
|
343
|
-
reason: `Credential metadata exists but no stored value for ${metadata.service}/${metadata.field}`,
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
log.info(
|
|
348
|
-
{ credentialId: request.credentialId, service: metadata.service, field: metadata.field, tool: request.requestingTool },
|
|
349
|
-
'Server-side credential lookup by ID completed',
|
|
350
|
-
);
|
|
351
|
-
|
|
352
|
-
return {
|
|
353
|
-
success: true,
|
|
354
|
-
credentialId: resolved.credentialId,
|
|
355
|
-
service: resolved.service,
|
|
356
|
-
field: resolved.field,
|
|
357
|
-
injectionTemplates: resolved.injectionTemplates,
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/** Return the number of active (non-consumed, non-revoked) tokens. */
|
|
362
|
-
get activeTokenCount(): number {
|
|
363
|
-
let count = 0;
|
|
364
|
-
for (const token of this.tokens.values()) {
|
|
365
|
-
if (!token.consumed) count++;
|
|
366
|
-
}
|
|
367
|
-
return count;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
/** Shared singleton broker instance used by vault and browser tools. */
|
|
372
|
-
export const credentialBroker = new CredentialBroker();
|