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,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain policy matcher for credential usage enforcement.
|
|
3
|
-
*
|
|
4
|
-
* Uses registrable-domain semantics: a credential allowed for "example.com"
|
|
5
|
-
* can be used on "login.example.com" or "app.example.com", but not on
|
|
6
|
-
* "notexample.com" or "example.co.uk".
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { normalizeDomain } from '../network/domain-normalize.js';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Check whether a request host is allowed by the credential's domain policy.
|
|
13
|
-
*
|
|
14
|
-
* @param requestHost - The hostname or URL of the current request/page
|
|
15
|
-
* @param allowedDomains - The credential's allowed domain list
|
|
16
|
-
* @returns true if the request host matches an allowed domain
|
|
17
|
-
*
|
|
18
|
-
* Matching rules:
|
|
19
|
-
* 1. Exact hostname match (case-insensitive)
|
|
20
|
-
* 2. Registrable-domain match with subdomain allowance
|
|
21
|
-
* 3. Deny if requestHost is missing, invalid, IP, or localhost
|
|
22
|
-
* 4. Deny if allowedDomains is empty or undefined (fail-closed)
|
|
23
|
-
*/
|
|
24
|
-
export function isDomainAllowed(requestHost: string, allowedDomains: string[]): boolean {
|
|
25
|
-
if (!allowedDomains || allowedDomains.length === 0) return false;
|
|
26
|
-
|
|
27
|
-
const requestInfo = normalizeDomain(requestHost);
|
|
28
|
-
if (!requestInfo) return false;
|
|
29
|
-
|
|
30
|
-
for (const allowed of allowedDomains) {
|
|
31
|
-
const allowedInfo = normalizeDomain(allowed);
|
|
32
|
-
if (!allowedInfo) continue;
|
|
33
|
-
|
|
34
|
-
// Exact hostname match
|
|
35
|
-
if (requestInfo.hostname === allowedInfo.hostname) return true;
|
|
36
|
-
|
|
37
|
-
// Registrable-domain match: request's registrable domain must equal
|
|
38
|
-
// the allowed entry's registrable domain, and the allowed entry
|
|
39
|
-
// must itself be a registrable domain (not a subdomain).
|
|
40
|
-
if (
|
|
41
|
-
requestInfo.registrableDomain &&
|
|
42
|
-
allowedInfo.registrableDomain &&
|
|
43
|
-
requestInfo.registrableDomain === allowedInfo.registrableDomain &&
|
|
44
|
-
allowedInfo.hostname === allowedInfo.registrableDomain
|
|
45
|
-
) {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared host-pattern matching primitive.
|
|
3
|
-
*
|
|
4
|
-
* Provides deterministic, case-insensitive hostname matching against
|
|
5
|
-
* glob-style patterns (e.g. "*.fal.run") with configurable apex inclusion.
|
|
6
|
-
* Used by the credential selection, proxy router, and policy engines.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
export type HostMatchKind = 'none' | 'wildcard' | 'exact';
|
|
10
|
-
|
|
11
|
-
export interface MatchHostPatternOptions {
|
|
12
|
-
/** When true, "*.domain" also matches bare "domain". Defaults to false. */
|
|
13
|
-
includeApexForWildcard?: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Match a hostname against a glob-style host pattern.
|
|
18
|
-
*
|
|
19
|
-
* Supports:
|
|
20
|
-
* - Exact match: "api.fal.run" matches "api.fal.run"
|
|
21
|
-
* - Wildcard match: "*.fal.run" matches "api.fal.run"
|
|
22
|
-
* - Apex inclusion (opt-in): "*.fal.run" matches "fal.run"
|
|
23
|
-
*
|
|
24
|
-
* All comparisons are case-insensitive.
|
|
25
|
-
*/
|
|
26
|
-
export function matchHostPattern(
|
|
27
|
-
host: string,
|
|
28
|
-
pattern: string,
|
|
29
|
-
options?: MatchHostPatternOptions,
|
|
30
|
-
): HostMatchKind {
|
|
31
|
-
const lHost = host.toLowerCase();
|
|
32
|
-
const lPattern = pattern.toLowerCase();
|
|
33
|
-
|
|
34
|
-
if (lHost === lPattern) return 'exact';
|
|
35
|
-
|
|
36
|
-
if (lPattern.startsWith('*.')) {
|
|
37
|
-
const suffix = lPattern.slice(1); // ".fal.run"
|
|
38
|
-
// Subdomain match: "api.fal.run".endsWith(".fal.run") and is longer
|
|
39
|
-
if (lHost.endsWith(suffix) && lHost.length > suffix.length) {
|
|
40
|
-
return 'wildcard';
|
|
41
|
-
}
|
|
42
|
-
// Apex inclusion: "*.fal.run" matches bare "fal.run"
|
|
43
|
-
if (options?.includeApexForWildcard && lHost === lPattern.slice(2)) {
|
|
44
|
-
return 'wildcard';
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return 'none';
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Compare two match results by specificity.
|
|
53
|
-
* Returns negative if `a` is more specific, positive if `b` is, zero if equal.
|
|
54
|
-
*
|
|
55
|
-
* Ordering: exact > wildcard > none
|
|
56
|
-
*/
|
|
57
|
-
export function compareMatchSpecificity(a: HostMatchKind, b: HostMatchKind): number {
|
|
58
|
-
const rank: Record<HostMatchKind, number> = { exact: 2, wildcard: 1, none: 0 };
|
|
59
|
-
return rank[b] - rank[a];
|
|
60
|
-
}
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential metadata store.
|
|
3
|
-
*
|
|
4
|
-
* Persists non-secret metadata about credentials (policy, timestamps, IDs)
|
|
5
|
-
* in a versioned JSON file under protected storage. Secret values remain
|
|
6
|
-
* in the secure key backend only.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync } from 'node:fs';
|
|
10
|
-
import { join, dirname } from 'node:path';
|
|
11
|
-
import { getDataDir } from '../../util/platform.js';
|
|
12
|
-
import { randomUUID } from 'node:crypto';
|
|
13
|
-
import type { CredentialInjectionTemplate } from './policy-types.js';
|
|
14
|
-
|
|
15
|
-
export interface CredentialMetadata {
|
|
16
|
-
credentialId: string;
|
|
17
|
-
service: string;
|
|
18
|
-
field: string;
|
|
19
|
-
allowedTools: string[];
|
|
20
|
-
allowedDomains: string[];
|
|
21
|
-
usageDescription?: string;
|
|
22
|
-
expiresAt?: number;
|
|
23
|
-
grantedScopes?: string[];
|
|
24
|
-
accountInfo?: string;
|
|
25
|
-
/** OAuth2 token endpoint — enables autonomous token refresh without an IntegrationDefinition. */
|
|
26
|
-
oauth2TokenUrl?: string;
|
|
27
|
-
/** OAuth2 client ID — paired with oauth2TokenUrl for refresh. */
|
|
28
|
-
oauth2ClientId?: string;
|
|
29
|
-
/** OAuth2 client secret — for providers that require it (e.g. Slack). Stored in metadata for autonomous refresh. */
|
|
30
|
-
oauth2ClientSecret?: string;
|
|
31
|
-
/** Human-friendly name for this credential (e.g. "fal-primary"). */
|
|
32
|
-
alias?: string;
|
|
33
|
-
/** Templates describing how to inject this credential into proxied requests. */
|
|
34
|
-
injectionTemplates?: CredentialInjectionTemplate[];
|
|
35
|
-
createdAt: number;
|
|
36
|
-
updatedAt: number;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Current on-disk schema version. */
|
|
40
|
-
const CURRENT_VERSION = 2;
|
|
41
|
-
|
|
42
|
-
interface MetadataFile {
|
|
43
|
-
version: typeof CURRENT_VERSION;
|
|
44
|
-
credentials: CredentialMetadata[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
let overridePath: string | null = null;
|
|
48
|
-
|
|
49
|
-
function getMetadataPath(): string {
|
|
50
|
-
if (overridePath) return overridePath;
|
|
51
|
-
return join(getDataDir(), 'credentials', 'metadata.json');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Returned when the on-disk file has a version we don't understand.
|
|
56
|
-
* Callers that mutate state must check for this to avoid overwriting
|
|
57
|
-
* data written by a newer version of the app.
|
|
58
|
-
*/
|
|
59
|
-
interface UnknownVersionResult {
|
|
60
|
-
readonly unknownVersion: true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
type LoadResult = MetadataFile | UnknownVersionResult;
|
|
64
|
-
|
|
65
|
-
function isUnknownVersion(r: LoadResult): r is UnknownVersionResult {
|
|
66
|
-
return 'unknownVersion' in r;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Returns true if a value looks like a valid credential record (has required fields).
|
|
71
|
-
* Filters out corrupted or incomplete entries during migration.
|
|
72
|
-
*/
|
|
73
|
-
function isValidCredentialRecord(record: unknown): record is Record<string, unknown> {
|
|
74
|
-
if (typeof record !== 'object' || record === null) return false;
|
|
75
|
-
const r = record as Record<string, unknown>;
|
|
76
|
-
return (
|
|
77
|
-
typeof r.credentialId === 'string' &&
|
|
78
|
-
typeof r.service === 'string' &&
|
|
79
|
-
typeof r.field === 'string' &&
|
|
80
|
-
typeof r.createdAt === 'number' &&
|
|
81
|
-
typeof r.updatedAt === 'number'
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Migrate a v1 record to v2 by backfilling new optional fields with defaults.
|
|
87
|
-
*/
|
|
88
|
-
function migrateRecordV1toV2(record: Record<string, unknown>): CredentialMetadata {
|
|
89
|
-
return {
|
|
90
|
-
credentialId: record.credentialId as string,
|
|
91
|
-
service: record.service as string,
|
|
92
|
-
field: record.field as string,
|
|
93
|
-
allowedTools: Array.isArray(record.allowedTools) ? (record.allowedTools as string[]) : [],
|
|
94
|
-
allowedDomains: Array.isArray(record.allowedDomains) ? (record.allowedDomains as string[]) : [],
|
|
95
|
-
usageDescription: typeof record.usageDescription === 'string' ? record.usageDescription : undefined,
|
|
96
|
-
expiresAt: typeof record.expiresAt === 'number' ? record.expiresAt : undefined,
|
|
97
|
-
grantedScopes: Array.isArray(record.grantedScopes) ? (record.grantedScopes as string[]) : undefined,
|
|
98
|
-
accountInfo: typeof record.accountInfo === 'string' ? record.accountInfo : undefined,
|
|
99
|
-
oauth2TokenUrl: typeof record.oauth2TokenUrl === 'string' ? record.oauth2TokenUrl : undefined,
|
|
100
|
-
oauth2ClientId: typeof record.oauth2ClientId === 'string' ? record.oauth2ClientId : undefined,
|
|
101
|
-
oauth2ClientSecret: typeof record.oauth2ClientSecret === 'string' ? record.oauth2ClientSecret : undefined,
|
|
102
|
-
alias: typeof record.alias === 'string' ? record.alias : undefined,
|
|
103
|
-
injectionTemplates: Array.isArray(record.injectionTemplates)
|
|
104
|
-
? (record.injectionTemplates as CredentialInjectionTemplate[])
|
|
105
|
-
: undefined,
|
|
106
|
-
createdAt: record.createdAt as number,
|
|
107
|
-
updatedAt: record.updatedAt as number,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function loadFile(): LoadResult {
|
|
112
|
-
const path = getMetadataPath();
|
|
113
|
-
if (!existsSync(path)) {
|
|
114
|
-
return { version: CURRENT_VERSION, credentials: [] };
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
const raw = readFileSync(path, 'utf-8');
|
|
118
|
-
const data = JSON.parse(raw);
|
|
119
|
-
if (typeof data !== 'object' || data === null) {
|
|
120
|
-
return { version: CURRENT_VERSION, credentials: [] };
|
|
121
|
-
}
|
|
122
|
-
const fileVersion = typeof data.version === 'number' ? data.version : 1;
|
|
123
|
-
if (fileVersion !== 1 && fileVersion !== 2) {
|
|
124
|
-
// Unrecognized version (future, fractional, negative, zero) — refuse to touch it
|
|
125
|
-
return { unknownVersion: true };
|
|
126
|
-
}
|
|
127
|
-
const rawCredentials: unknown[] = Array.isArray(data.credentials) ? data.credentials : [];
|
|
128
|
-
// Filter out malformed entries that lack required fields
|
|
129
|
-
const validRecords = rawCredentials.filter(isValidCredentialRecord);
|
|
130
|
-
|
|
131
|
-
if (fileVersion < CURRENT_VERSION) {
|
|
132
|
-
// Migrate from v1 to v2 and persist the upgrade so we don't re-migrate on every read
|
|
133
|
-
const credentials = validRecords.map(migrateRecordV1toV2);
|
|
134
|
-
const migrated: MetadataFile = { version: CURRENT_VERSION, credentials };
|
|
135
|
-
try { saveFile(migrated); } catch { /* persist failed — will retry on next write */ }
|
|
136
|
-
return migrated;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return { version: CURRENT_VERSION, credentials: validRecords as unknown as CredentialMetadata[] };
|
|
140
|
-
} catch {
|
|
141
|
-
// Corrupted / unparseable file — treat as empty to avoid data loss on next write
|
|
142
|
-
return { version: CURRENT_VERSION, credentials: [] };
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function saveFile(data: MetadataFile): void {
|
|
147
|
-
const path = getMetadataPath();
|
|
148
|
-
const dir = dirname(path);
|
|
149
|
-
if (!existsSync(dir)) {
|
|
150
|
-
mkdirSync(dir, { recursive: true });
|
|
151
|
-
}
|
|
152
|
-
const tmpPath = join(dir, `.tmp-${randomUUID()}`);
|
|
153
|
-
writeFileSync(tmpPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
154
|
-
renameSync(tmpPath, path);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Throws if the metadata file has an unrecognized version.
|
|
159
|
-
* Call this before performing irreversible keychain operations
|
|
160
|
-
* so the operation fails cleanly before any side effects.
|
|
161
|
-
*/
|
|
162
|
-
export function assertMetadataWritable(): void {
|
|
163
|
-
const result = loadFile();
|
|
164
|
-
if (isUnknownVersion(result)) {
|
|
165
|
-
throw new Error('Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss');
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Create or update a credential metadata record.
|
|
171
|
-
* If a record with the same service+field exists, it is updated.
|
|
172
|
-
*/
|
|
173
|
-
export function upsertCredentialMetadata(
|
|
174
|
-
service: string,
|
|
175
|
-
field: string,
|
|
176
|
-
policy?: {
|
|
177
|
-
allowedTools?: string[];
|
|
178
|
-
allowedDomains?: string[];
|
|
179
|
-
usageDescription?: string;
|
|
180
|
-
/** Pass `null` to explicitly clear a previously-set expiry. */
|
|
181
|
-
expiresAt?: number | null;
|
|
182
|
-
grantedScopes?: string[];
|
|
183
|
-
/** Pass `null` to explicitly clear a previously-set account info. */
|
|
184
|
-
accountInfo?: string | null;
|
|
185
|
-
oauth2TokenUrl?: string;
|
|
186
|
-
oauth2ClientId?: string;
|
|
187
|
-
/** Pass `null` to explicitly clear a previously-set client secret. */
|
|
188
|
-
oauth2ClientSecret?: string | null;
|
|
189
|
-
/** Pass `null` to explicitly clear a previously-set alias. */
|
|
190
|
-
alias?: string | null;
|
|
191
|
-
/** Pass `null` to explicitly clear injection templates. */
|
|
192
|
-
injectionTemplates?: CredentialInjectionTemplate[] | null;
|
|
193
|
-
},
|
|
194
|
-
): CredentialMetadata {
|
|
195
|
-
const result = loadFile();
|
|
196
|
-
if (isUnknownVersion(result)) {
|
|
197
|
-
throw new Error('Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss');
|
|
198
|
-
}
|
|
199
|
-
const data = result;
|
|
200
|
-
const now = Date.now();
|
|
201
|
-
|
|
202
|
-
const existing = data.credentials.find(
|
|
203
|
-
(c) => c.service === service && c.field === field,
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
if (existing) {
|
|
207
|
-
if (policy?.allowedTools !== undefined) existing.allowedTools = policy.allowedTools;
|
|
208
|
-
if (policy?.allowedDomains !== undefined) existing.allowedDomains = policy.allowedDomains;
|
|
209
|
-
if (policy?.usageDescription !== undefined) existing.usageDescription = policy.usageDescription;
|
|
210
|
-
if (policy?.expiresAt !== undefined) {
|
|
211
|
-
if (policy.expiresAt === null) {
|
|
212
|
-
delete existing.expiresAt;
|
|
213
|
-
} else {
|
|
214
|
-
existing.expiresAt = policy.expiresAt;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
if (policy?.grantedScopes !== undefined) existing.grantedScopes = policy.grantedScopes;
|
|
218
|
-
if (policy?.accountInfo !== undefined) {
|
|
219
|
-
if (policy.accountInfo === null) {
|
|
220
|
-
delete existing.accountInfo;
|
|
221
|
-
} else {
|
|
222
|
-
existing.accountInfo = policy.accountInfo;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (policy?.oauth2TokenUrl !== undefined) existing.oauth2TokenUrl = policy.oauth2TokenUrl;
|
|
226
|
-
if (policy?.oauth2ClientId !== undefined) existing.oauth2ClientId = policy.oauth2ClientId;
|
|
227
|
-
if (policy?.oauth2ClientSecret !== undefined) {
|
|
228
|
-
if (policy.oauth2ClientSecret === null) {
|
|
229
|
-
delete existing.oauth2ClientSecret;
|
|
230
|
-
} else {
|
|
231
|
-
existing.oauth2ClientSecret = policy.oauth2ClientSecret;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
if (policy?.alias !== undefined) {
|
|
235
|
-
if (policy.alias === null) {
|
|
236
|
-
delete existing.alias;
|
|
237
|
-
} else {
|
|
238
|
-
existing.alias = policy.alias;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (policy?.injectionTemplates !== undefined) {
|
|
242
|
-
if (policy.injectionTemplates === null) {
|
|
243
|
-
delete existing.injectionTemplates;
|
|
244
|
-
} else {
|
|
245
|
-
existing.injectionTemplates = policy.injectionTemplates;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
existing.updatedAt = now;
|
|
249
|
-
saveFile(data);
|
|
250
|
-
return existing;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
const record: CredentialMetadata = {
|
|
254
|
-
credentialId: randomUUID(),
|
|
255
|
-
service,
|
|
256
|
-
field,
|
|
257
|
-
allowedTools: policy?.allowedTools ?? [],
|
|
258
|
-
allowedDomains: policy?.allowedDomains ?? [],
|
|
259
|
-
usageDescription: policy?.usageDescription,
|
|
260
|
-
expiresAt: policy?.expiresAt ?? undefined,
|
|
261
|
-
grantedScopes: policy?.grantedScopes,
|
|
262
|
-
accountInfo: policy?.accountInfo ?? undefined,
|
|
263
|
-
oauth2TokenUrl: policy?.oauth2TokenUrl,
|
|
264
|
-
oauth2ClientId: policy?.oauth2ClientId,
|
|
265
|
-
oauth2ClientSecret: policy?.oauth2ClientSecret ?? undefined,
|
|
266
|
-
alias: policy?.alias ?? undefined,
|
|
267
|
-
injectionTemplates: policy?.injectionTemplates ?? undefined,
|
|
268
|
-
createdAt: now,
|
|
269
|
-
updatedAt: now,
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
data.credentials.push(record);
|
|
273
|
-
saveFile(data);
|
|
274
|
-
return record;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Get metadata for a credential by service and field.
|
|
279
|
-
*/
|
|
280
|
-
export function getCredentialMetadata(
|
|
281
|
-
service: string,
|
|
282
|
-
field: string,
|
|
283
|
-
): CredentialMetadata | undefined {
|
|
284
|
-
const result = loadFile();
|
|
285
|
-
if (isUnknownVersion(result)) return undefined;
|
|
286
|
-
return result.credentials.find(
|
|
287
|
-
(c) => c.service === service && c.field === field,
|
|
288
|
-
);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Get metadata for a credential by its opaque ID.
|
|
293
|
-
*/
|
|
294
|
-
export function getCredentialMetadataById(
|
|
295
|
-
credentialId: string,
|
|
296
|
-
): CredentialMetadata | undefined {
|
|
297
|
-
const result = loadFile();
|
|
298
|
-
if (isUnknownVersion(result)) return undefined;
|
|
299
|
-
return result.credentials.find((c) => c.credentialId === credentialId);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* List all credential metadata records.
|
|
304
|
-
*/
|
|
305
|
-
export function listCredentialMetadata(): CredentialMetadata[] {
|
|
306
|
-
const result = loadFile();
|
|
307
|
-
if (isUnknownVersion(result)) return [];
|
|
308
|
-
return result.credentials;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Delete metadata for a credential.
|
|
313
|
-
*/
|
|
314
|
-
export function deleteCredentialMetadata(
|
|
315
|
-
service: string,
|
|
316
|
-
field: string,
|
|
317
|
-
): boolean {
|
|
318
|
-
const result = loadFile();
|
|
319
|
-
if (isUnknownVersion(result)) {
|
|
320
|
-
throw new Error('Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss');
|
|
321
|
-
}
|
|
322
|
-
const data = result;
|
|
323
|
-
const idx = data.credentials.findIndex(
|
|
324
|
-
(c) => c.service === service && c.field === field,
|
|
325
|
-
);
|
|
326
|
-
if (idx === -1) return false;
|
|
327
|
-
data.credentials.splice(idx, 1);
|
|
328
|
-
saveFile(data);
|
|
329
|
-
return true;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/** @internal Test-only: override the metadata file path. */
|
|
333
|
-
export function _setMetadataPath(path: string | null): void {
|
|
334
|
-
overridePath = path;
|
|
335
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential usage policy types.
|
|
3
|
-
*
|
|
4
|
-
* These types define the constraints placed on how a stored credential
|
|
5
|
-
* may be used. Policies are attached at credential creation time and
|
|
6
|
-
* enforced by the CredentialBroker before any secret operation.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/** How a credential was originally captured. */
|
|
10
|
-
export type CredentialCreationFlow = 'secure_prompt' | 'tool_store' | 'migration';
|
|
11
|
-
|
|
12
|
-
/** Policy that governs how a credential may be used. */
|
|
13
|
-
export interface CredentialPolicy {
|
|
14
|
-
/** Tools allowed to consume this credential (fail-closed if empty). */
|
|
15
|
-
allowedTools: string[];
|
|
16
|
-
|
|
17
|
-
/** Registrable domains where this credential may be used (fail-closed if empty). */
|
|
18
|
-
allowedDomains: string[];
|
|
19
|
-
|
|
20
|
-
/** Human-readable description of intended usage. */
|
|
21
|
-
usageDescription?: string;
|
|
22
|
-
|
|
23
|
-
/** How the credential was originally captured. */
|
|
24
|
-
createdByFlow?: CredentialCreationFlow;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** How a credential value is injected into an outbound proxied request. */
|
|
28
|
-
export type CredentialInjectionType = 'header' | 'query';
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Describes where and how to inject a credential into proxied requests
|
|
32
|
-
* matching a specific host pattern.
|
|
33
|
-
*/
|
|
34
|
-
export interface CredentialInjectionTemplate {
|
|
35
|
-
/** Glob pattern for matching request hosts (e.g. "*.fal.ai"). */
|
|
36
|
-
hostPattern: string;
|
|
37
|
-
/** Where the credential value is injected. */
|
|
38
|
-
injectionType: CredentialInjectionType;
|
|
39
|
-
/** Header name when injectionType is 'header' (e.g. "Authorization"). */
|
|
40
|
-
headerName?: string;
|
|
41
|
-
/** Prefix prepended to the secret value (e.g. "Key ", "Bearer "). */
|
|
42
|
-
valuePrefix?: string;
|
|
43
|
-
/** Query parameter name when injectionType is 'query'. */
|
|
44
|
-
queryParamName?: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Input fields for specifying policy when storing a credential. */
|
|
48
|
-
export interface CredentialPolicyInput {
|
|
49
|
-
allowed_tools?: string[];
|
|
50
|
-
allowed_domains?: string[];
|
|
51
|
-
usage_description?: string;
|
|
52
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure validation helpers for credential policies.
|
|
3
|
-
*
|
|
4
|
-
* These functions validate policy input without side effects.
|
|
5
|
-
* They are used during credential creation and update to ensure
|
|
6
|
-
* policy data is well-formed before persistence.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type { CredentialPolicy, CredentialPolicyInput } from './policy-types.js';
|
|
10
|
-
|
|
11
|
-
export interface ValidationResult {
|
|
12
|
-
valid: boolean;
|
|
13
|
-
errors: string[];
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Validate a credential policy input.
|
|
18
|
-
* Returns a result with `valid: true` if the input is well-formed,
|
|
19
|
-
* or `valid: false` with a list of error messages.
|
|
20
|
-
*/
|
|
21
|
-
export function validatePolicyInput(input: CredentialPolicyInput): ValidationResult {
|
|
22
|
-
const errors: string[] = [];
|
|
23
|
-
|
|
24
|
-
if (input.allowed_tools !== undefined) {
|
|
25
|
-
if (!Array.isArray(input.allowed_tools)) {
|
|
26
|
-
errors.push('allowed_tools must be an array of strings');
|
|
27
|
-
} else {
|
|
28
|
-
for (let i = 0; i < input.allowed_tools.length; i++) {
|
|
29
|
-
const tool = input.allowed_tools[i];
|
|
30
|
-
if (typeof tool !== 'string' || tool.trim().length === 0) {
|
|
31
|
-
errors.push(`allowed_tools[${i}] must be a non-empty string`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (input.allowed_domains !== undefined) {
|
|
38
|
-
if (!Array.isArray(input.allowed_domains)) {
|
|
39
|
-
errors.push('allowed_domains must be an array of strings');
|
|
40
|
-
} else {
|
|
41
|
-
for (let i = 0; i < input.allowed_domains.length; i++) {
|
|
42
|
-
const domain = input.allowed_domains[i];
|
|
43
|
-
if (typeof domain !== 'string' || domain.trim().length === 0) {
|
|
44
|
-
errors.push(`allowed_domains[${i}] must be a non-empty string`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (input.usage_description !== undefined) {
|
|
51
|
-
if (typeof input.usage_description !== 'string') {
|
|
52
|
-
errors.push('usage_description must be a string');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return { valid: errors.length === 0, errors };
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Convert validated policy input into a CredentialPolicy.
|
|
61
|
-
* Applies strict defaults: empty allowed lists = deny all.
|
|
62
|
-
*/
|
|
63
|
-
export function toPolicyFromInput(input: CredentialPolicyInput): CredentialPolicy {
|
|
64
|
-
return {
|
|
65
|
-
allowedTools: input.allowed_tools ?? [],
|
|
66
|
-
allowedDomains: input.allowed_domains ?? [],
|
|
67
|
-
usageDescription: input.usage_description,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Create a strict default policy (deny all usage).
|
|
73
|
-
* Used when a credential is stored without explicit policy.
|
|
74
|
-
*/
|
|
75
|
-
export function createStrictDefaultPolicy(): CredentialPolicy {
|
|
76
|
-
return {
|
|
77
|
-
allowedTools: [],
|
|
78
|
-
allowedDomains: [],
|
|
79
|
-
};
|
|
80
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential resolver — maps between opaque IDs, service/field pairs,
|
|
3
|
-
* and storage locators.
|
|
4
|
-
*
|
|
5
|
-
* This decouples external credential references from the underlying
|
|
6
|
-
* secure key naming convention.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
getCredentialMetadata,
|
|
11
|
-
getCredentialMetadataById,
|
|
12
|
-
listCredentialMetadata,
|
|
13
|
-
type CredentialMetadata,
|
|
14
|
-
} from './metadata-store.js';
|
|
15
|
-
import type { CredentialInjectionTemplate } from './policy-types.js';
|
|
16
|
-
import { matchHostPattern } from './host-pattern-match.js';
|
|
17
|
-
|
|
18
|
-
export interface ResolvedCredential {
|
|
19
|
-
credentialId: string;
|
|
20
|
-
service: string;
|
|
21
|
-
field: string;
|
|
22
|
-
/** The key used in the secure key backend. */
|
|
23
|
-
storageKey: string;
|
|
24
|
-
/** Human-friendly alias, if set. */
|
|
25
|
-
alias?: string;
|
|
26
|
-
/** Injection templates for proxied requests. */
|
|
27
|
-
injectionTemplates: CredentialInjectionTemplate[];
|
|
28
|
-
metadata: CredentialMetadata;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function toResolved(metadata: CredentialMetadata): ResolvedCredential {
|
|
32
|
-
return {
|
|
33
|
-
credentialId: metadata.credentialId,
|
|
34
|
-
service: metadata.service,
|
|
35
|
-
field: metadata.field,
|
|
36
|
-
storageKey: `credential:${metadata.service}:${metadata.field}`,
|
|
37
|
-
alias: metadata.alias,
|
|
38
|
-
injectionTemplates: metadata.injectionTemplates ?? [],
|
|
39
|
-
metadata,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Resolve a credential by service and field.
|
|
45
|
-
* Returns the resolved credential or undefined if not found.
|
|
46
|
-
*/
|
|
47
|
-
export function resolveByServiceField(
|
|
48
|
-
service: string,
|
|
49
|
-
field: string,
|
|
50
|
-
): ResolvedCredential | undefined {
|
|
51
|
-
const metadata = getCredentialMetadata(service, field);
|
|
52
|
-
if (!metadata) return undefined;
|
|
53
|
-
return toResolved(metadata);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Resolve a credential by its opaque ID.
|
|
58
|
-
* Returns the resolved credential or undefined if not found.
|
|
59
|
-
*/
|
|
60
|
-
export function resolveById(
|
|
61
|
-
credentialId: string,
|
|
62
|
-
): ResolvedCredential | undefined {
|
|
63
|
-
const metadata = getCredentialMetadataById(credentialId);
|
|
64
|
-
if (!metadata) return undefined;
|
|
65
|
-
return toResolved(metadata);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Resolve a credential reference that may be either a UUID or a "service/field" string.
|
|
70
|
-
*
|
|
71
|
-
* Resolution order:
|
|
72
|
-
* 1. Try as UUID via resolveById
|
|
73
|
-
* 2. If not found, try parsing as "service/field" via resolveByServiceField
|
|
74
|
-
*
|
|
75
|
-
* Returns undefined for malformed refs (e.g. no slash, too many slashes, empty segments)
|
|
76
|
-
* and for refs that don't match any stored credential.
|
|
77
|
-
*/
|
|
78
|
-
export function resolveCredentialRef(
|
|
79
|
-
ref: string,
|
|
80
|
-
): ResolvedCredential | undefined {
|
|
81
|
-
if (!ref || ref.trim().length === 0) return undefined;
|
|
82
|
-
|
|
83
|
-
// Try as UUID first
|
|
84
|
-
const byId = resolveById(ref);
|
|
85
|
-
if (byId) return byId;
|
|
86
|
-
|
|
87
|
-
// Try as service/field
|
|
88
|
-
const slashIndex = ref.indexOf('/');
|
|
89
|
-
if (slashIndex <= 0 || slashIndex >= ref.length - 1) return undefined;
|
|
90
|
-
// Reject refs with more than one slash (e.g. "fal/api/key")
|
|
91
|
-
if (ref.indexOf('/', slashIndex + 1) !== -1) return undefined;
|
|
92
|
-
|
|
93
|
-
const service = ref.slice(0, slashIndex);
|
|
94
|
-
const field = ref.slice(slashIndex + 1);
|
|
95
|
-
return resolveByServiceField(service, field);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Find all credentials whose injection templates match a given hostname.
|
|
100
|
-
* Returns resolved credentials with their `injectionTemplates` filtered
|
|
101
|
-
* to only the matching entries.
|
|
102
|
-
*/
|
|
103
|
-
export function resolveForDomain(
|
|
104
|
-
hostname: string,
|
|
105
|
-
): ResolvedCredential[] {
|
|
106
|
-
const all = listCredentialMetadata();
|
|
107
|
-
const results: ResolvedCredential[] = [];
|
|
108
|
-
|
|
109
|
-
for (const meta of all) {
|
|
110
|
-
const templates = meta.injectionTemplates ?? [];
|
|
111
|
-
const matching = templates.filter((t) =>
|
|
112
|
-
matchHostPattern(hostname, t.hostPattern, { includeApexForWildcard: true }) !== 'none',
|
|
113
|
-
);
|
|
114
|
-
if (matching.length === 0) continue;
|
|
115
|
-
results.push({
|
|
116
|
-
...toResolved(meta),
|
|
117
|
-
injectionTemplates: matching,
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return results;
|
|
122
|
-
}
|