@vellumai/assistant 0.8.10 → 0.8.11-staging.1
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/bun.lock +62 -1
- package/docs/workspace-tools.md +196 -0
- package/examples/plugins/echo/README.md +3 -3
- package/knip.json +1 -0
- package/openapi.yaml +460 -128
- package/package.json +2 -1
- package/scripts/build-plugin-api.ts +299 -0
- package/src/__tests__/agent-loop-callsite-precedence.test.ts +7 -0
- package/src/__tests__/agent-loop-compaction-events.test.ts +197 -0
- package/src/__tests__/agent-loop-exit-reason.test.ts +93 -96
- package/src/__tests__/agent-loop-mutable-latest-user-message.test.ts +2 -0
- package/src/__tests__/agent-loop-output-hooks.test.ts +274 -1
- package/src/__tests__/agent-loop-override-profile.test.ts +3 -0
- package/src/__tests__/agent-loop-provider-error-recording.test.ts +4 -0
- package/src/__tests__/agent-loop-thinking.test.ts +4 -0
- package/src/__tests__/agent-loop.test.ts +578 -5
- package/src/__tests__/agent-wake-disk-pressure-callsite.test.ts +0 -1
- package/src/__tests__/approval-cascade.test.ts +1 -0
- package/src/__tests__/background-workers-disk-pressure.test.ts +0 -2
- package/src/__tests__/btw-routes.test.ts +0 -1
- package/src/__tests__/build-persisted-content.test.ts +75 -1
- package/src/__tests__/catalog-install-normalize.test.ts +141 -0
- package/src/__tests__/ces-startup-timeout.test.ts +60 -0
- package/src/__tests__/compaction-events.test.ts +1 -0
- package/src/__tests__/config-managed-gemini-defaults.test.ts +2 -46
- package/src/__tests__/context-overflow-reducer.test.ts +264 -124
- package/src/__tests__/context-window-manager-overflow-rung.test.ts +351 -0
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +13 -5
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +284 -455
- package/src/__tests__/conversation-agent-loop.test.ts +131 -551
- package/src/__tests__/conversation-app-control-instantiation.test.ts +13 -0
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -0
- package/src/__tests__/conversation-fork-crud.test.ts +259 -0
- package/src/__tests__/conversation-history-web-search.test.ts +1 -1
- package/src/__tests__/conversation-lifecycle.test.ts +257 -1
- package/src/__tests__/conversation-process-callsite.test.ts +1 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +38 -377
- package/src/__tests__/conversation-queue.test.ts +1 -39
- package/src/__tests__/conversation-runtime-assembly.test.ts +119 -8
- package/src/__tests__/conversation-skill-tools.test.ts +491 -5
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -0
- package/src/__tests__/conversation-speed-override.test.ts +1 -0
- package/src/__tests__/conversation-store.test.ts +74 -0
- package/src/__tests__/conversation-surfaces-app-control.test.ts +4 -1
- package/src/__tests__/conversation-tool-setup-attribution.test.ts +323 -0
- package/src/__tests__/conversation-tool-setup-tools-disabled.test.ts +34 -0
- package/src/__tests__/conversation-workspace-cache-state.test.ts +1 -0
- package/src/__tests__/conversation-workspace-injection.test.ts +1 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +1 -0
- package/src/__tests__/corrected-target.test.ts +93 -0
- package/src/__tests__/credential-execution-feature-gates.test.ts +3 -5
- package/src/__tests__/credential-execution-tools.test.ts +23 -11
- package/src/__tests__/credential-security-invariants.test.ts +6 -1
- package/src/__tests__/db-schedule-syntax-migration.test.ts +80 -0
- package/src/__tests__/device-id.test.ts +70 -1
- package/src/__tests__/embedding-managed-proxy-selection.test.ts +6 -40
- package/src/__tests__/empty-response-hook.test.ts +242 -66
- package/src/__tests__/external-plugin-loader.test.ts +0 -31
- package/src/__tests__/get-skill-detail-audit.test.ts +43 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +91 -0
- package/src/__tests__/history-repair-hook.test.ts +228 -3
- package/src/__tests__/host-app-control-proxy.test.ts +45 -0
- package/src/__tests__/host-browser-proxy.test.ts +254 -9
- package/src/__tests__/identity-routes.test.ts +1 -0
- package/src/__tests__/image-recovery-hook.test.ts +387 -0
- package/src/__tests__/injector-chain.test.ts +5 -4
- package/src/__tests__/injector-v3-suppression.test.ts +373 -47
- package/src/__tests__/intent-routing.test.ts +7 -0
- package/src/__tests__/memory-retrieval-hook.test.ts +117 -15
- package/src/__tests__/notification-decision-strategy.test.ts +3 -3
- package/src/__tests__/oauth-store.test.ts +0 -85
- package/src/__tests__/{context-overflow-policy.test.ts → overflow-policy.test.ts} +1 -1
- package/src/__tests__/parallel-tool.benchmark.test.ts +4 -0
- package/src/__tests__/persist-unsendable-image-downscale.test.ts +29 -9
- package/src/__tests__/persist-unsendable-image.test.ts +4 -4
- package/src/__tests__/persistence-secret-redaction.test.ts +78 -0
- package/src/__tests__/plugin-bootstrap.test.ts +82 -73
- package/src/__tests__/plugin-tool-contribution.test.ts +7 -4
- package/src/__tests__/plugin-types.test.ts +0 -8
- package/src/__tests__/provider-catalog-visibility.test.ts +1 -9
- package/src/__tests__/prune-old-conversations-job.test.ts +99 -0
- package/src/__tests__/registry.test.ts +240 -1
- package/src/__tests__/require-fresh-approval.test.ts +3 -0
- package/src/__tests__/schedule-routes.test.ts +116 -1
- package/src/__tests__/schedule-store.test.ts +28 -0
- package/src/__tests__/schedule-tools.test.ts +94 -1
- package/src/__tests__/server-history-render.test.ts +39 -0
- package/src/__tests__/skill-projection-feature-flag.test.ts +13 -0
- package/src/__tests__/skill-projection.benchmark.test.ts +25 -7
- package/src/__tests__/skills.test.ts +202 -0
- package/src/__tests__/slim-skill-category.test.ts +195 -0
- package/src/__tests__/strip-memory-injections.test.ts +33 -39
- package/src/__tests__/test-support/tool-invocation-seed.ts +79 -0
- package/src/__tests__/title-generate-hook.test.ts +9 -7
- package/src/__tests__/tool-audit-listener.test.ts +264 -1
- package/src/__tests__/tool-error-hook.test.ts +4 -3
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +1 -0
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +273 -0
- package/src/__tests__/tool-result-truncate-hook.test.ts +1 -0
- package/src/__tests__/tool-start-timestamp.test.ts +218 -0
- package/src/__tests__/tools-get-route.test.ts +202 -0
- package/src/__tests__/workspace-tool-loader.test.ts +319 -0
- package/src/__tests__/workspace-tools-watcher-flag.test.ts +70 -0
- package/src/agent/loop.ts +569 -319
- package/src/api/events/tool-result.ts +9 -0
- package/src/api/events/tool-use-start.ts +7 -0
- package/src/api/index.ts +10 -0
- package/src/api/responses/conversation-message.ts +135 -27
- package/src/api/responses/memory-v3-selection-log.ts +4 -4
- package/src/approvals/guardian-request-resolvers.ts +26 -0
- package/src/browser-session/backends/host-bridge.ts +29 -0
- package/src/browser-session/index.ts +1 -0
- package/src/browser-session/types.ts +5 -1
- package/src/cli/commands/__tests__/schedules.test.ts +62 -4
- package/src/cli/commands/__tests__/skills.test.ts +53 -0
- package/src/cli/commands/channel-verification-sessions.ts +6 -6
- package/src/cli/commands/inference-providers.ts +0 -8
- package/src/cli/commands/plugins.ts +2 -2
- package/src/cli/commands/schedules.ts +27 -4
- package/src/cli/commands/skills.ts +187 -146
- package/src/cli/commands/tools.ts +106 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +256 -328
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +6 -2
- package/src/cli/lib/__tests__/plugin-details.test.ts +10 -16
- package/src/cli/lib/__tests__/plugin-marketplace.test.ts +2 -2
- package/src/cli/lib/__tests__/search-plugins.test.ts +145 -240
- package/src/cli/lib/install-from-github.ts +187 -117
- package/src/cli/lib/plugin-catalog-cache.ts +9 -9
- package/src/cli/lib/plugin-details.ts +38 -68
- package/src/cli/lib/plugin-marketplace.ts +42 -14
- package/src/cli/lib/search-plugins.ts +29 -129
- package/src/cli/program.ts +2 -0
- package/src/config/bundled-skills/acp/SKILL.md +1 -0
- package/src/config/bundled-skills/app-builder/SKILL.md +1 -0
- package/src/config/bundled-skills/app-control/SKILL.md +1 -0
- package/src/config/bundled-skills/computer-use/SKILL.md +1 -0
- package/src/config/bundled-skills/contacts/SKILL.md +1 -0
- package/src/config/bundled-skills/document-editor/SKILL.md +1 -0
- package/src/config/bundled-skills/followups/SKILL.md +1 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +1 -0
- package/src/config/bundled-skills/media-processing/SKILL.md +1 -0
- package/src/config/bundled-skills/messaging/SKILL.md +1 -0
- package/src/config/bundled-skills/phone-calls/SKILL.md +1 -0
- package/src/config/bundled-skills/playbooks/SKILL.md +1 -0
- package/src/config/bundled-skills/schedule/SKILL.md +1 -0
- package/src/config/bundled-skills/schedule/TOOLS.json +11 -3
- package/src/config/bundled-skills/sequences/SKILL.md +1 -0
- package/src/config/bundled-skills/settings/SKILL.md +1 -0
- package/src/config/bundled-skills/skill-management/SKILL.md +101 -1
- package/src/config/bundled-skills/subagent/SKILL.md +1 -0
- package/src/config/bundled-skills/transcribe/SKILL.md +1 -0
- package/src/config/env-registry.ts +23 -0
- package/src/config/feature-flag-registry.json +17 -81
- package/src/config/loader.ts +5 -22
- package/src/config/schema.ts +2 -0
- package/src/config/schemas/__tests__/compaction-logs.test.ts +56 -0
- package/src/config/schemas/__tests__/memory-v2.test.ts +0 -1
- package/src/config/schemas/__tests__/memory-v3.test.ts +61 -1
- package/src/config/schemas/compaction-logs.ts +79 -0
- package/src/config/schemas/memory-v2.ts +0 -8
- package/src/config/schemas/memory-v3.ts +104 -33
- package/src/config/seed-inference-profiles.ts +1 -1
- package/src/config/skills.ts +117 -47
- package/src/context/compactor.ts +11 -0
- package/src/context/strip-injections.ts +38 -4
- package/src/credential-execution/feature-gates.ts +0 -21
- package/src/credential-execution/startup-timeout.ts +32 -4
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +18 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +140 -91
- package/src/daemon/conversation-agent-loop.ts +123 -658
- package/src/daemon/conversation-error.ts +6 -33
- package/src/daemon/conversation-lifecycle.ts +1 -1
- package/src/daemon/conversation-runtime-assembly.ts +183 -22
- package/src/daemon/conversation-skill-tools.ts +137 -8
- package/src/daemon/conversation-slash.ts +0 -14
- package/src/daemon/conversation-store.ts +2 -19
- package/src/daemon/conversation-tool-setup.ts +87 -1
- package/src/daemon/conversation.ts +119 -50
- package/src/daemon/external-plugins-bootstrap.ts +36 -95
- package/src/daemon/handlers/config-channels.ts +11 -2
- package/src/daemon/handlers/shared.ts +9 -1
- package/src/daemon/handlers/skills.ts +10 -4
- package/src/daemon/host-app-control-proxy.ts +72 -57
- package/src/daemon/host-browser-proxy.ts +117 -22
- package/src/daemon/lifecycle.ts +34 -5
- package/src/daemon/message-protocol.ts +0 -7
- package/src/daemon/message-types/schedules.ts +1 -0
- package/src/daemon/message-types/skills.ts +17 -0
- package/src/daemon/providers-setup.ts +3 -0
- package/src/daemon/server.ts +3 -3
- package/src/daemon/tool-setup-types.ts +9 -3
- package/src/daemon/trust-context.ts +23 -0
- package/src/daemon/workspace-tools-watcher.ts +324 -0
- package/src/events/tool-audit-listener.ts +78 -16
- package/src/events/tool-metrics-listener.ts +2 -5
- package/src/memory/__tests__/compaction-log-writer-clickhouse.test.ts +227 -0
- package/src/memory/__tests__/conversation-queries.test.ts +176 -0
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +20 -32
- package/src/memory/compaction-log-writer-clickhouse.ts +418 -0
- package/src/memory/conversation-crud.ts +134 -3
- package/src/memory/conversation-queries.ts +64 -7
- package/src/memory/db-init.ts +14 -0
- package/src/memory/embedding-backend.test.ts +130 -1
- package/src/memory/embedding-backend.ts +79 -106
- package/src/memory/embedding-gemini.ts +5 -0
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +12 -0
- package/src/memory/graph/__tests__/handle-remember-v2.test.ts +19 -0
- package/src/memory/graph/conversation-graph-memory.ts +36 -25
- package/src/memory/graph/tool-handlers.ts +3 -0
- package/src/memory/job-handlers/cleanup.ts +3 -1
- package/src/memory/jobs-store.ts +0 -28
- package/src/memory/jobs-worker.ts +10 -22
- package/src/memory/memory-marker.ts +29 -0
- package/src/memory/memory-retrospective-startup-cleanup.ts +1 -1
- package/src/memory/migrations/268-add-memory-v3-selections.ts +6 -0
- package/src/memory/migrations/270-schedule-description.ts +36 -0
- package/src/memory/migrations/275-tool-invocations-add-skill-id.test.ts +81 -0
- package/src/memory/migrations/275-tool-invocations-add-skill-id.ts +20 -0
- package/src/memory/migrations/276-tool-invocations-created-at-id-index.test.ts +68 -0
- package/src/memory/migrations/276-tool-invocations-created-at-id-index.ts +20 -0
- package/src/memory/migrations/277-add-memory-v3-ever-injected.ts +29 -0
- package/src/memory/migrations/278-tool-invocations-telemetry-columns.test.ts +96 -0
- package/src/memory/migrations/278-tool-invocations-telemetry-columns.ts +39 -0
- package/src/memory/migrations/279-create-skill-loaded-events.test.ts +84 -0
- package/src/memory/migrations/279-create-skill-loaded-events.ts +26 -0
- package/src/memory/migrations/280-conversations-surfaced-at.test.ts +88 -0
- package/src/memory/migrations/280-conversations-surfaced-at.ts +24 -0
- package/src/memory/migrations/index.ts +10 -0
- package/src/memory/migrations/registry.ts +8 -0
- package/src/memory/schema/conversations.ts +16 -0
- package/src/memory/schema/infrastructure.ts +26 -0
- package/src/memory/skill-loaded-events-store.test.ts +160 -0
- package/src/memory/skill-loaded-events-store.ts +95 -0
- package/src/memory/tool-executed-events-store.test.ts +219 -0
- package/src/memory/tool-executed-events-store.ts +102 -0
- package/src/memory/tool-usage-store.ts +15 -3
- package/src/memory/v2/__tests__/consolidation-job.test.ts +117 -12
- package/src/memory/v2/__tests__/consolidation-prompt-flag-gating-guard.test.ts +189 -0
- package/src/memory/v2/__tests__/injected-block-slugs.test.ts +90 -0
- package/src/memory/v2/__tests__/page-store.test.ts +33 -0
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +88 -15
- package/src/memory/v2/activation-store.ts +50 -1
- package/src/memory/v2/consolidation-job.ts +113 -29
- package/src/memory/v2/injected-block-slugs.ts +79 -0
- package/src/memory/v2/injection.ts +6 -1
- package/src/memory/v2/prompts/consolidation.ts +414 -13
- package/src/memory/v2/router.ts +2 -28
- package/src/memory/v2/static-context.ts +1 -1
- package/src/memory/v2/types.ts +16 -0
- package/src/notifications/__tests__/copy-composer.test.ts +244 -0
- package/src/notifications/access-request-copy.ts +298 -0
- package/src/notifications/adapters/slack.ts +3 -3
- package/src/notifications/adapters/telegram.ts +2 -1
- package/src/notifications/copy-composer.ts +49 -267
- package/src/notifications/decision-engine.ts +16 -35
- package/src/notifications/home-feed-side-effect.ts +1 -6
- package/src/oauth/oauth-store.ts +0 -9
- package/src/permissions/checker.test.ts +83 -1
- package/src/permissions/checker.ts +25 -2
- package/src/permissions/gateway-threshold-reader.test.ts +182 -0
- package/src/permissions/gateway-threshold-reader.ts +80 -0
- package/src/platform/client.ts +1 -3
- package/src/platform/feature-gate.ts +3 -12
- package/src/plugin-api/constants.ts +4 -2
- package/src/plugin-api/index.ts +63 -11
- package/src/plugin-api/types.ts +236 -71
- package/src/plugins/defaults/compaction/compact.ts +66 -2
- package/src/plugins/defaults/compaction/context-overflow-reducer.ts +240 -32
- package/src/plugins/defaults/compaction/corrected-target.ts +53 -0
- package/src/{daemon/context-overflow-policy.ts → plugins/defaults/compaction/overflow-policy.ts} +1 -1
- package/src/plugins/defaults/compaction/window-manager.ts +303 -1
- package/src/plugins/defaults/empty-response/hooks/post-model-call.ts +173 -0
- package/src/plugins/defaults/empty-response/hooks/stop.ts +11 -115
- package/src/plugins/defaults/empty-response/nudge-state-store.ts +46 -0
- package/src/plugins/defaults/history-repair/hooks/post-model-call.ts +50 -0
- package/src/plugins/defaults/history-repair/hooks/stop.ts +22 -0
- package/src/plugins/defaults/history-repair/repair-state-store.ts +51 -0
- package/src/plugins/defaults/history-repair/terminal.ts +39 -2
- package/src/plugins/defaults/image-recovery/detect.ts +25 -0
- package/src/plugins/defaults/image-recovery/hooks/post-model-call.ts +73 -0
- package/src/plugins/defaults/image-recovery/hooks/stop.ts +22 -0
- package/src/plugins/defaults/image-recovery/image-recovery-state-store.ts +48 -0
- package/src/plugins/defaults/image-recovery/package.json +14 -0
- package/src/{daemon/persist-unsendable-image.ts → plugins/defaults/image-recovery/recover.ts} +67 -14
- package/src/plugins/defaults/index.ts +71 -5
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +76 -112
- package/src/plugins/defaults/memory-retrieval/hooks/{user-prompt-submit-temp.ts → user-prompt-submit.ts} +83 -74
- package/src/plugins/defaults/memory-retrieval/injector-chain.ts +14 -8
- package/src/plugins/defaults/memory-retrieval/injectors.ts +2 -18
- package/src/plugins/defaults/memory-retrieval/package.json +14 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/carry-integration.test.ts +1157 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/injection.test.ts +683 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/live-integration.test.ts +161 -140
- package/src/plugins/defaults/memory-v3-shadow/__tests__/maintain-job.test.ts +160 -0
- package/src/plugins/defaults/memory-v3-shadow/__tests__/orchestrate.test.ts +335 -316
- package/src/plugins/defaults/memory-v3-shadow/__tests__/pool-select.test.ts +145 -53
- package/src/plugins/defaults/memory-v3-shadow/__tests__/render-injection.test.ts +38 -1
- package/src/plugins/defaults/memory-v3-shadow/__tests__/selection-log-store.test.ts +18 -8
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-integration.test.ts +112 -71
- package/src/plugins/defaults/memory-v3-shadow/__tests__/shadow-plugin.test.ts +192 -51
- package/src/plugins/defaults/memory-v3-shadow/__tests__/types.test.ts +4 -16
- package/src/plugins/defaults/memory-v3-shadow/card.test.ts +173 -0
- package/src/plugins/defaults/memory-v3-shadow/card.ts +116 -0
- package/src/plugins/defaults/memory-v3-shadow/core-set.test.ts +104 -0
- package/src/plugins/defaults/memory-v3-shadow/core-set.ts +59 -0
- package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.test.ts +305 -0
- package/src/plugins/defaults/memory-v3-shadow/ever-injected-store.ts +278 -0
- package/src/plugins/defaults/memory-v3-shadow/hot-set.test.ts +138 -0
- package/src/plugins/defaults/memory-v3-shadow/hot-set.ts +85 -0
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +331 -24
- package/src/plugins/defaults/memory-v3-shadow/maintain-job.ts +119 -13
- package/src/plugins/defaults/memory-v3-shadow/orchestrate.ts +169 -114
- package/src/plugins/defaults/memory-v3-shadow/page-content.ts +47 -16
- package/src/plugins/defaults/memory-v3-shadow/pool-select.ts +144 -66
- package/src/plugins/defaults/memory-v3-shadow/prune.test.ts +758 -0
- package/src/plugins/defaults/memory-v3-shadow/prune.ts +471 -0
- package/src/plugins/defaults/memory-v3-shadow/render-injection.ts +68 -16
- package/src/plugins/defaults/memory-v3-shadow/selection-log-store.ts +19 -12
- package/src/plugins/defaults/memory-v3-shadow/shadow-plugin.ts +96 -43
- package/src/plugins/defaults/memory-v3-shadow/types.ts +34 -17
- package/src/plugins/defaults/title-generate/hooks/stop.ts +9 -11
- package/src/plugins/pipeline.ts +8 -5
- package/src/plugins/types.ts +5 -51
- package/src/providers/cache-control.ts +26 -0
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +1 -2
- package/src/providers/model-catalog.ts +13 -1
- package/src/providers/openai/__tests__/tool-choice-mapping.test.ts +147 -0
- package/src/providers/openai/chat-completions-provider.ts +46 -0
- package/src/providers/openai/responses-provider.ts +45 -0
- package/src/providers/registry.ts +0 -8
- package/src/runtime/__tests__/agent-wake.test.ts +0 -1
- package/src/runtime/agent-wake.ts +13 -0
- package/src/runtime/routes/__tests__/acp-routes.test.ts +151 -0
- package/src/runtime/routes/__tests__/consolidation-routes.test.ts +12 -50
- package/src/runtime/routes/__tests__/conversation-surface-routes.test.ts +322 -0
- package/src/runtime/routes/__tests__/inference-provider-connection-routes.test.ts +0 -62
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +31 -11
- package/src/runtime/routes/acp-routes.test.ts +106 -0
- package/src/runtime/routes/acp-routes.ts +248 -2
- package/src/runtime/routes/browser-tabs-routes.ts +1 -1
- package/src/runtime/routes/channel-verification-routes.ts +14 -5
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +0 -14
- package/src/runtime/routes/consolidation-routes.ts +6 -82
- package/src/runtime/routes/conversation-list-routes.ts +6 -0
- package/src/runtime/routes/conversation-management-routes.ts +71 -0
- package/src/runtime/routes/identity-routes.ts +8 -0
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +33 -34
- package/src/runtime/routes/inference-provider-connection-routes.ts +0 -45
- package/src/runtime/routes/plugins-routes.ts +34 -45
- package/src/runtime/routes/schedule-routes.ts +43 -5
- package/src/runtime/routes/settings-routes.ts +140 -15
- package/src/runtime/routes/skills-routes.ts +18 -6
- package/src/runtime/services/__tests__/conversation-serializer.test.ts +140 -0
- package/src/runtime/services/conversation-serializer.ts +38 -1
- package/src/runtime/verification-outbound-actions.ts +147 -2
- package/src/runtime/verification-templates.ts +29 -3
- package/src/schedule/schedule-store.ts +19 -0
- package/src/skills/catalog-install.ts +77 -13
- package/src/tasks/task-scheduler.ts +1 -0
- package/src/telemetry/types.ts +66 -1
- package/src/telemetry/usage-telemetry-reporter.test.ts +542 -13
- package/src/telemetry/usage-telemetry-reporter.ts +213 -20
- package/src/tools/browser/__tests__/browser-execution-acquire.test.ts +49 -2
- package/src/tools/browser/__tests__/browser-status.test.ts +29 -5
- package/src/tools/browser/browser-execution.ts +27 -9
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +380 -4
- package/src/tools/browser/cdp-client/__tests__/host-bridge-cdp-client.test.ts +107 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +6 -1
- package/src/tools/browser/cdp-client/factory.ts +217 -17
- package/src/tools/browser/cdp-client/host-bridge-cdp-client.ts +67 -0
- package/src/tools/browser/cdp-client/types.ts +22 -2
- package/src/tools/credential-execution/make-authenticated-request.ts +2 -1
- package/src/tools/credential-execution/manage-secure-command-tool.ts +169 -164
- package/src/tools/credential-execution/run-authenticated-command.ts +2 -1
- package/src/tools/executor.ts +39 -7
- package/src/tools/registry.ts +387 -5
- package/src/tools/schedule/create.ts +16 -0
- package/src/tools/schedule/list.ts +12 -4
- package/src/tools/schedule/update.ts +12 -0
- package/src/tools/skills/load.ts +11 -6
- package/src/tools/terminal/safe-env.ts +2 -0
- package/src/tools/types.ts +65 -9
- package/src/tools/workspace-tools/loader.ts +673 -0
- package/src/usage/attribution.ts +28 -0
- package/src/util/device-id.ts +17 -3
- package/src/util/platform.ts +16 -0
- package/tsconfig.plugin-api.json +13 -0
- package/src/__tests__/plugin-external-api.test.ts +0 -68
- package/src/__tests__/plugin-skill-contribution.test.ts +0 -355
- package/src/daemon/message-types/browser.ts +0 -10
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +0 -187
- package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/eval-turns.json +0 -36
- package/src/plugins/defaults/memory-v3-shadow/__tests__/fixtures/live-turns.json +0 -37
- package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-eviction.test.ts +0 -106
- package/src/plugins/defaults/memory-v3-shadow/__tests__/working-set-skeleton.test.ts +0 -44
- package/src/plugins/defaults/memory-v3-shadow/working-set.ts +0 -91
- package/src/plugins/external-api.ts +0 -114
- package/src/plugins/plugin-skill-contributions.ts +0 -292
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Template-only copy for outbound guardian verification messages (Telegram, Slack, and voice).
|
|
2
|
+
* Template-only copy for outbound guardian verification messages (Telegram, Slack, email, and voice).
|
|
3
3
|
*
|
|
4
4
|
* All outbound verification messages are composed from these templates
|
|
5
5
|
* to prevent free-form caller/user text injection. Only typed variables
|
|
@@ -26,6 +26,10 @@ export const GUARDIAN_VERIFY_TEMPLATE_KEYS = {
|
|
|
26
26
|
"guardian_verify.slack.trusted_contact_challenge",
|
|
27
27
|
/** Resend Slack DM verification for inbound trusted contact (includes the code). */
|
|
28
28
|
SLACK_TRUSTED_CONTACT_RESEND: "guardian_verify.slack.trusted_contact_resend",
|
|
29
|
+
/** Initial outbound email verification prompt (includes the code). */
|
|
30
|
+
EMAIL_CHALLENGE_REQUEST: "guardian_verify.email.challenge_request",
|
|
31
|
+
/** Resend email verification prompt (includes the code). */
|
|
32
|
+
EMAIL_RESEND: "guardian_verify.email.resend",
|
|
29
33
|
/** Outbound voice call intro prompt: asks guardian to enter verification code via keypad. */
|
|
30
34
|
VOICE_CALL_INTRO: "guardian_verify.voice.call_intro",
|
|
31
35
|
/** Voice retry prompt after an incorrect code entry. */
|
|
@@ -42,7 +46,7 @@ export const GUARDIAN_VERIFY_TEMPLATE_KEYS = {
|
|
|
42
46
|
CHANNEL_BOOTSTRAP_BOUND: "guardian_verify.channel.bootstrap_bound",
|
|
43
47
|
} as const;
|
|
44
48
|
|
|
45
|
-
/** Template keys for Telegram/Slack text-based verification messages. */
|
|
49
|
+
/** Template keys for Telegram/Slack/email text-based verification messages. */
|
|
46
50
|
type TextVerifyTemplateKey =
|
|
47
51
|
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.ALREADY_VERIFIED
|
|
48
52
|
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.TELEGRAM_CHALLENGE_REQUEST
|
|
@@ -50,7 +54,9 @@ type TextVerifyTemplateKey =
|
|
|
50
54
|
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_CHALLENGE_REQUEST
|
|
51
55
|
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_RESEND
|
|
52
56
|
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_TRUSTED_CONTACT_CHALLENGE
|
|
53
|
-
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_TRUSTED_CONTACT_RESEND
|
|
57
|
+
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_TRUSTED_CONTACT_RESEND
|
|
58
|
+
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.EMAIL_CHALLENGE_REQUEST
|
|
59
|
+
| typeof GUARDIAN_VERIFY_TEMPLATE_KEYS.EMAIL_RESEND;
|
|
54
60
|
|
|
55
61
|
/** Template keys for deterministic channel verification reply messages. */
|
|
56
62
|
type ChannelVerifyReplyTemplateKey =
|
|
@@ -115,6 +121,14 @@ const templates: Record<
|
|
|
115
121
|
[GUARDIAN_VERIFY_TEMPLATE_KEYS.SLACK_TRUSTED_CONTACT_RESEND]: (vars) => {
|
|
116
122
|
return `Vellum assistant verification: your code is ${vars.code}. Reply with this code to verify your identity. It expires in ${vars.expiresInMinutes} minutes. (resent)`;
|
|
117
123
|
},
|
|
124
|
+
|
|
125
|
+
[GUARDIAN_VERIFY_TEMPLATE_KEYS.EMAIL_CHALLENGE_REQUEST]: (vars) => {
|
|
126
|
+
return `Vellum assistant guardian verification requested.\n\nYour verification code is: ${vars.code}\n\nReply to this email with only the 6-digit code above to complete verification. This code expires in ${vars.expiresInMinutes} minutes.`;
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
[GUARDIAN_VERIFY_TEMPLATE_KEYS.EMAIL_RESEND]: (vars) => {
|
|
130
|
+
return `Vellum assistant guardian verification requested.\n\nYour new verification code is: ${vars.code}\n\nReply to this email with only the 6-digit code above to complete verification. This code expires in ${vars.expiresInMinutes} minutes. (resent)`;
|
|
131
|
+
},
|
|
118
132
|
};
|
|
119
133
|
|
|
120
134
|
/**
|
|
@@ -129,6 +143,18 @@ export function composeVerificationSlack(
|
|
|
129
143
|
return composer(vars);
|
|
130
144
|
}
|
|
131
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Compose an outbound verification email from a template key and typed variables.
|
|
148
|
+
* Returns plain string content suitable for email delivery.
|
|
149
|
+
*/
|
|
150
|
+
export function composeVerificationEmail(
|
|
151
|
+
templateKey: TextVerifyTemplateKey,
|
|
152
|
+
vars: GuardianVerifyTemplateVars,
|
|
153
|
+
): string {
|
|
154
|
+
const composer = templates[templateKey];
|
|
155
|
+
return composer(vars);
|
|
156
|
+
}
|
|
157
|
+
|
|
132
158
|
/**
|
|
133
159
|
* Compose an outbound verification Telegram message from a template key and typed variables.
|
|
134
160
|
* Returns plain string content suitable for Telegram delivery.
|
|
@@ -33,6 +33,7 @@ export type ScheduleStatus = "active" | "firing" | "fired" | "cancelled";
|
|
|
33
33
|
export interface ScheduleJob {
|
|
34
34
|
id: string;
|
|
35
35
|
name: string;
|
|
36
|
+
description: string;
|
|
36
37
|
enabled: boolean;
|
|
37
38
|
syntax: ScheduleSyntax;
|
|
38
39
|
expression: string | null;
|
|
@@ -85,6 +86,7 @@ export function isValidCronExpression(expr: string): boolean {
|
|
|
85
86
|
|
|
86
87
|
export function createSchedule(params: {
|
|
87
88
|
name: string;
|
|
89
|
+
description?: string;
|
|
88
90
|
cronExpression?: string | null;
|
|
89
91
|
timezone?: string | null;
|
|
90
92
|
message: string;
|
|
@@ -141,6 +143,10 @@ export function createSchedule(params: {
|
|
|
141
143
|
const retryBackoffMs = params.retryBackoffMs ?? 60000;
|
|
142
144
|
const timeoutMs = params.timeoutMs ?? null;
|
|
143
145
|
const createdFromConversationId = params.createdFromConversationId ?? null;
|
|
146
|
+
const description = normalizeDescription(
|
|
147
|
+
params.description,
|
|
148
|
+
params.createdBy === "defer" ? "" : params.name,
|
|
149
|
+
);
|
|
144
150
|
|
|
145
151
|
let nextRunAt: number;
|
|
146
152
|
if (isOneShot) {
|
|
@@ -154,6 +160,7 @@ export function createSchedule(params: {
|
|
|
154
160
|
const row = {
|
|
155
161
|
id,
|
|
156
162
|
name: params.name,
|
|
163
|
+
description,
|
|
157
164
|
enabled,
|
|
158
165
|
cronExpression: expression,
|
|
159
166
|
scheduleSyntax: syntax,
|
|
@@ -252,6 +259,7 @@ export function updateSchedule(
|
|
|
252
259
|
id: string,
|
|
253
260
|
updates: {
|
|
254
261
|
name?: string;
|
|
262
|
+
description?: string;
|
|
255
263
|
cronExpression?: string;
|
|
256
264
|
timezone?: string | null;
|
|
257
265
|
message?: string;
|
|
@@ -313,6 +321,8 @@ export function updateSchedule(
|
|
|
313
321
|
const set: Record<string, unknown> = { updatedAt: now };
|
|
314
322
|
|
|
315
323
|
if (updates.name !== undefined) set.name = updates.name;
|
|
324
|
+
if (updates.description !== undefined)
|
|
325
|
+
set.description = normalizeDescription(updates.description);
|
|
316
326
|
if (updates.cronExpression !== undefined || updates.expression !== undefined)
|
|
317
327
|
set.cronExpression = newExpr;
|
|
318
328
|
if (updates.syntax !== undefined) set.scheduleSyntax = newSyntax;
|
|
@@ -980,6 +990,7 @@ function parseJobRow(row: typeof scheduleJobs.$inferSelect): ScheduleJob {
|
|
|
980
990
|
return {
|
|
981
991
|
id: row.id,
|
|
982
992
|
name: row.name,
|
|
993
|
+
description: row.description ?? "",
|
|
983
994
|
enabled: row.enabled,
|
|
984
995
|
syntax: row.scheduleSyntax as ScheduleSyntax,
|
|
985
996
|
expression: row.cronExpression,
|
|
@@ -1008,6 +1019,14 @@ function parseJobRow(row: typeof scheduleJobs.$inferSelect): ScheduleJob {
|
|
|
1008
1019
|
};
|
|
1009
1020
|
}
|
|
1010
1021
|
|
|
1022
|
+
function normalizeDescription(
|
|
1023
|
+
value: string | undefined,
|
|
1024
|
+
fallback = "",
|
|
1025
|
+
): string {
|
|
1026
|
+
const normalized = value?.trim() ?? "";
|
|
1027
|
+
return normalized || fallback;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1011
1030
|
function safeParseJson(
|
|
1012
1031
|
json: string | null | undefined,
|
|
1013
1032
|
): Record<string, unknown> {
|
|
@@ -47,11 +47,6 @@ export interface CatalogSkill {
|
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export interface CatalogManifest {
|
|
51
|
-
version: number;
|
|
52
|
-
skills: CatalogSkill[];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
50
|
/**
|
|
56
51
|
* Resolve the directory containing a `catalog.json` and first-party skill
|
|
57
52
|
* sources — either bundled next to a compiled binary (e.g. `Vellum.app`) or
|
|
@@ -97,6 +92,75 @@ export function getRepoSkillsDir(): string | undefined {
|
|
|
97
92
|
|
|
98
93
|
// ─── Catalog operations ──────────────────────────────────────────────────────
|
|
99
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Raw skill entry as returned by the platform `/v1/skills/` API. The platform
|
|
97
|
+
* serializer flattens the skill's metadata into top-level fields
|
|
98
|
+
* (`category`, `display_name`, `icon`) rather than the nested
|
|
99
|
+
* `metadata.vellum.*` shape used by the local `catalog.json`. Both shapes are
|
|
100
|
+
* accepted here so the daemon has a single canonical representation downstream.
|
|
101
|
+
*/
|
|
102
|
+
interface RawCatalogEntry {
|
|
103
|
+
id?: unknown;
|
|
104
|
+
name?: unknown;
|
|
105
|
+
description?: unknown;
|
|
106
|
+
icon?: unknown;
|
|
107
|
+
emoji?: string;
|
|
108
|
+
includes?: string[];
|
|
109
|
+
version?: string;
|
|
110
|
+
updatedAt?: unknown;
|
|
111
|
+
display_name?: unknown;
|
|
112
|
+
category?: unknown;
|
|
113
|
+
updated_at?: unknown;
|
|
114
|
+
metadata?: CatalogSkill["metadata"];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function asStr(value: unknown): string | undefined {
|
|
118
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Normalize a platform API entry into a canonical {@link CatalogSkill}.
|
|
123
|
+
*
|
|
124
|
+
* The platform flattens `category`, `display_name`, and `icon` to the top
|
|
125
|
+
* level, so re-nest them under `metadata.vellum` to match the local catalog
|
|
126
|
+
* shape that the rest of the daemon reads (`metadata.vellum.category`,
|
|
127
|
+
* `metadata.vellum["display-name"]`). Existing nested values take precedence
|
|
128
|
+
* so a future API change to the nested shape keeps working.
|
|
129
|
+
*/
|
|
130
|
+
function normalizeCatalogEntry(raw: unknown): CatalogSkill | null {
|
|
131
|
+
if (typeof raw !== "object" || raw === null) return null;
|
|
132
|
+
const entry = raw as RawCatalogEntry;
|
|
133
|
+
|
|
134
|
+
const id = asStr(entry.id);
|
|
135
|
+
if (!id) return null;
|
|
136
|
+
|
|
137
|
+
const nested = entry.metadata?.vellum;
|
|
138
|
+
const category = nested?.category ?? asStr(entry.category);
|
|
139
|
+
const displayName = nested?.["display-name"] ?? asStr(entry.display_name);
|
|
140
|
+
const icon = asStr(entry.icon) ?? asStr(entry.metadata?.icon);
|
|
141
|
+
const updatedAt = asStr(entry.updatedAt) ?? asStr(entry.updated_at);
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
id,
|
|
145
|
+
name: asStr(entry.name) ?? id,
|
|
146
|
+
description: asStr(entry.description) ?? "",
|
|
147
|
+
...(icon ? { icon } : {}),
|
|
148
|
+
...(entry.emoji ? { emoji: entry.emoji } : {}),
|
|
149
|
+
...(entry.includes ? { includes: entry.includes } : {}),
|
|
150
|
+
...(entry.version ? { version: entry.version } : {}),
|
|
151
|
+
...(updatedAt ? { updatedAt } : {}),
|
|
152
|
+
metadata: {
|
|
153
|
+
...entry.metadata,
|
|
154
|
+
...(icon ? { icon } : {}),
|
|
155
|
+
vellum: {
|
|
156
|
+
...nested,
|
|
157
|
+
...(displayName ? { "display-name": displayName } : {}),
|
|
158
|
+
...(category ? { category } : {}),
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
100
164
|
export async function fetchCatalog(): Promise<CatalogSkill[]> {
|
|
101
165
|
const platformUrl = getPlatformBaseUrl();
|
|
102
166
|
const url = `${platformUrl}/v1/skills/`;
|
|
@@ -110,23 +174,23 @@ export async function fetchCatalog(): Promise<CatalogSkill[]> {
|
|
|
110
174
|
);
|
|
111
175
|
}
|
|
112
176
|
|
|
113
|
-
const manifest = (await response.json()) as
|
|
177
|
+
const manifest = (await response.json()) as { skills?: unknown };
|
|
114
178
|
if (!Array.isArray(manifest.skills)) {
|
|
115
179
|
throw new Error("Platform catalog has invalid skills array");
|
|
116
180
|
}
|
|
117
|
-
return manifest.skills
|
|
118
|
-
(s)
|
|
119
|
-
|
|
181
|
+
return manifest.skills
|
|
182
|
+
.map((s) => normalizeCatalogEntry(s))
|
|
183
|
+
.filter((s): s is CatalogSkill => s !== null);
|
|
120
184
|
}
|
|
121
185
|
|
|
122
186
|
export function readLocalCatalog(repoSkillsDir: string): CatalogSkill[] {
|
|
123
187
|
try {
|
|
124
188
|
const raw = readFileSync(join(repoSkillsDir, "catalog.json"), "utf-8");
|
|
125
|
-
const manifest = JSON.parse(raw) as
|
|
189
|
+
const manifest = JSON.parse(raw) as { skills?: unknown };
|
|
126
190
|
if (!Array.isArray(manifest.skills)) return [];
|
|
127
|
-
return manifest.skills
|
|
128
|
-
(s)
|
|
129
|
-
|
|
191
|
+
return manifest.skills
|
|
192
|
+
.map((s) => normalizeCatalogEntry(s))
|
|
193
|
+
.filter((s): s is CatalogSkill => s !== null);
|
|
130
194
|
} catch {
|
|
131
195
|
return [];
|
|
132
196
|
}
|
|
@@ -13,6 +13,7 @@ export function scheduleTask(opts: {
|
|
|
13
13
|
}): ReturnType<typeof createSchedule> {
|
|
14
14
|
return createSchedule({
|
|
15
15
|
name: opts.name,
|
|
16
|
+
description: `Run task: ${opts.name}`,
|
|
16
17
|
cronExpression: opts.cronExpression,
|
|
17
18
|
timezone: opts.timezone ?? null,
|
|
18
19
|
message: `run_task:${opts.taskId}`,
|
package/src/telemetry/types.ts
CHANGED
|
@@ -34,6 +34,27 @@ export interface TelemetryEventBase {
|
|
|
34
34
|
assistant_version: string | null;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Base for telemetry events that occur in the context of a model call.
|
|
39
|
+
* Standardizes model attribution across event types — field names/shapes
|
|
40
|
+
* mirror the existing llm_usage event so downstream consumers (dbt, admin
|
|
41
|
+
* charts) can join/group consistently.
|
|
42
|
+
*
|
|
43
|
+
* `provider`/`model` are nullable on the wire because rows persisted before
|
|
44
|
+
* the attribution columns existed, and rows whose attribution resolution
|
|
45
|
+
* failed, must still ship; the platform serializer accepts null.
|
|
46
|
+
*/
|
|
47
|
+
export interface ModelTelemetryEventBase extends TelemetryEventBase {
|
|
48
|
+
/** Provider serving the call, e.g. "anthropic", "fireworks". */
|
|
49
|
+
provider: string | null;
|
|
50
|
+
/** Model id active for the call, e.g. "claude-fable-5". */
|
|
51
|
+
model: string | null;
|
|
52
|
+
/** Inference profile slug. Null when no profile applied. */
|
|
53
|
+
inference_profile: string | null;
|
|
54
|
+
/** How the profile was attributed (same enum as llm_usage). */
|
|
55
|
+
inference_profile_source: UsageAttributionProfileSource | null;
|
|
56
|
+
}
|
|
57
|
+
|
|
37
58
|
/** LLM usage event — one per provider API call. */
|
|
38
59
|
export interface LlmUsageTelemetryEvent extends TelemetryEventBase {
|
|
39
60
|
type: "llm_usage";
|
|
@@ -225,10 +246,54 @@ export interface AuthFallbackTelemetryEvent extends TelemetryEventBase {
|
|
|
225
246
|
window_end: number;
|
|
226
247
|
}
|
|
227
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Tool-executed event — one per tool invocation. Carries NO tool
|
|
251
|
+
* args/inputs or result contents (customer PII per ToS) — payload sizes
|
|
252
|
+
* and metadata only; no raw error messages. Identity/attribution come
|
|
253
|
+
* from the upload envelope per the per-event-wins contract. Not to be
|
|
254
|
+
* confused with the since-reverted `tool_execution` permission-audit
|
|
255
|
+
* event, which no longer exists on the wire.
|
|
256
|
+
*/
|
|
257
|
+
export interface ToolExecutedTelemetryEvent extends ModelTelemetryEventBase {
|
|
258
|
+
type: "tool_executed";
|
|
259
|
+
tool_name: string;
|
|
260
|
+
/**
|
|
261
|
+
* `"errored"` means the invocation failed at the execution layer — a
|
|
262
|
+
* thrown error / infra failure (audit decision `"error"`). A tool that
|
|
263
|
+
* runs to completion but returns an `isError` result payload still
|
|
264
|
+
* counts as `"fulfilled"`: it executed.
|
|
265
|
+
*/
|
|
266
|
+
status: "fulfilled" | "errored";
|
|
267
|
+
duration_ms: number;
|
|
268
|
+
/** Serialized tool-argument size in bytes. Null when unknown. */
|
|
269
|
+
arg_bytes: number | null;
|
|
270
|
+
/** Serialized tool-result size in bytes. Null when unknown. */
|
|
271
|
+
result_bytes: number | null;
|
|
272
|
+
conversation_id: string | null;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Skill-loaded event — one per skill load. Emitted only for
|
|
277
|
+
* Vellum-produced skills (bundled, or managed with vellum origin).
|
|
278
|
+
* Metadata only — no skill output or conversation content.
|
|
279
|
+
*/
|
|
280
|
+
export interface SkillLoadedTelemetryEvent extends ModelTelemetryEventBase {
|
|
281
|
+
type: "skill_loaded";
|
|
282
|
+
skill_name: string;
|
|
283
|
+
/**
|
|
284
|
+
* ISO 8601 timestamp — the catalog's `updatedAt`, effectively the
|
|
285
|
+
* skill version. Null when the catalog carries no timestamp.
|
|
286
|
+
*/
|
|
287
|
+
skill_updated_at: string | null;
|
|
288
|
+
conversation_id: string | null;
|
|
289
|
+
}
|
|
290
|
+
|
|
228
291
|
/** Discriminated union of all telemetry event types. */
|
|
229
292
|
export type TelemetryEvent =
|
|
230
293
|
| LlmUsageTelemetryEvent
|
|
231
294
|
| TurnTelemetryEvent
|
|
232
295
|
| LifecycleTelemetryEvent
|
|
233
296
|
| OnboardingTelemetryEvent
|
|
234
|
-
| AuthFallbackTelemetryEvent
|
|
297
|
+
| AuthFallbackTelemetryEvent
|
|
298
|
+
| ToolExecutedTelemetryEvent
|
|
299
|
+
| SkillLoadedTelemetryEvent;
|