@vellumai/assistant 0.8.3 → 0.8.5
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/ARCHITECTURE.md +2 -2
- package/docker-entrypoint.sh +0 -1
- package/docs/browser-use-architecture-phase2.md +1 -1
- package/knip.json +2 -1
- package/node_modules/@vellumai/gateway-client/src/types.ts +2 -0
- package/openapi.yaml +1492 -100
- package/package.json +1 -1
- package/src/__tests__/agent-loop-exit-reason.test.ts +4 -5
- package/src/__tests__/agent-loop-override-profile.test.ts +1 -1
- package/src/__tests__/agent-loop.test.ts +88 -3
- package/src/__tests__/anthropic-provider.test.ts +302 -33
- package/src/__tests__/approval-cascade.test.ts +1 -1
- package/src/__tests__/assistant-event-hub-self-exclusion.test.ts +293 -0
- package/src/__tests__/assistant-feature-flags-integration.test.ts +3 -3
- package/src/__tests__/audit-log-rotation.test.ts +70 -16
- package/src/__tests__/background-workers-disk-pressure.test.ts +4 -3
- package/src/__tests__/btw-routes.test.ts +2 -3
- package/src/__tests__/call-controller.test.ts +0 -1
- package/src/__tests__/cancel-resolves-conversation-key.test.ts +1 -1
- package/src/__tests__/channel-delivery-store.test.ts +193 -0
- package/src/__tests__/channel-guardian.test.ts +3 -3
- package/src/__tests__/channel-reply-delivery.test.ts +284 -5
- package/src/__tests__/channel-retry-sweep.test.ts +274 -1
- package/src/__tests__/checker.test.ts +6 -15
- package/src/__tests__/compaction-events.test.ts +2 -1
- package/src/__tests__/compactor-call-site-logging.test.ts +214 -0
- package/src/__tests__/compactor-preserved-tail-count.test.ts +110 -0
- package/src/__tests__/computer-use-skill-manifest-regression.test.ts +5 -11
- package/src/__tests__/computer-use-tools.test.ts +2 -4
- package/src/__tests__/config-watcher.test.ts +1 -1
- package/src/__tests__/confirmation-request-guardian-bridge.test.ts +0 -1
- package/src/__tests__/context-token-estimator.test.ts +91 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +1 -1
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +55 -4
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +228 -8
- package/src/__tests__/conversation-agent-loop.test.ts +188 -129
- package/src/__tests__/conversation-app-control-instantiation.test.ts +2 -5
- package/src/__tests__/conversation-app-control-lifecycle.test.ts +1 -1
- package/src/__tests__/conversation-clean-command.test.ts +137 -0
- package/src/__tests__/conversation-clear-safety.test.ts +25 -25
- package/src/__tests__/conversation-confirmation-signals.test.ts +1 -1
- package/src/__tests__/conversation-delete-schedule-cleanup.test.ts +1 -1
- package/src/__tests__/conversation-disk-view-integration.test.ts +2 -2
- package/src/__tests__/conversation-error.test.ts +31 -0
- package/src/__tests__/conversation-fork-crud.test.ts +324 -0
- package/src/__tests__/conversation-lifecycle.test.ts +53 -12
- package/src/__tests__/conversation-load-history-repair.test.ts +1 -1
- package/src/__tests__/conversation-load-history-stripped.test.ts +279 -0
- package/src/__tests__/conversation-pairing.test.ts +2 -2
- package/src/__tests__/conversation-process-callsite.test.ts +1 -1
- package/src/__tests__/conversation-provider-retry-repair.test.ts +2 -1
- package/src/__tests__/conversation-queue.test.ts +1 -1
- package/src/__tests__/conversation-routes-disk-view.test.ts +109 -0
- package/src/__tests__/conversation-routes-slash-commands.test.ts +35 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +264 -81
- package/src/__tests__/conversation-seed-composer.test.ts +66 -4
- package/src/__tests__/conversation-skill-tools.test.ts +2 -5
- package/src/__tests__/conversation-slash-commands.test.ts +36 -8
- package/src/__tests__/conversation-slash-queue.test.ts +1 -1
- package/src/__tests__/conversation-slash-unknown.test.ts +1 -1
- package/src/__tests__/conversation-speed-override.test.ts +1 -1
- package/src/__tests__/conversation-store.test.ts +1 -1
- package/src/__tests__/conversation-surfaces-task-progress.test.ts +220 -0
- package/src/__tests__/conversation-sync-tags.test.ts +99 -32
- package/src/__tests__/conversation-workspace-cache-state.test.ts +2 -1
- package/src/__tests__/conversation-workspace-injection.test.ts +5 -1
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +5 -1
- package/src/__tests__/credential-execution-feature-gates.test.ts +9 -7
- package/src/__tests__/credential-execution-tools.test.ts +6 -6
- package/src/__tests__/credential-security-invariants.test.ts +7 -0
- package/src/__tests__/credential-vault-unit.test.ts +2 -2
- package/src/__tests__/cu-unified-flow.test.ts +10 -1
- package/src/__tests__/dm-backfill.test.ts +64 -0
- package/src/__tests__/dm-persistence.test.ts +33 -0
- package/src/__tests__/document-find-replace.test.ts +501 -0
- package/src/__tests__/dynamic-page-surface.test.ts +2 -2
- package/src/__tests__/email-html-renderer.test.ts +12 -0
- package/src/__tests__/first-greeting.test.ts +23 -2
- package/src/__tests__/gateway-flag-listener.test.ts +237 -0
- package/src/__tests__/gemini-provider.test.ts +78 -0
- package/src/__tests__/guardian-dispatch.test.ts +0 -1
- package/src/__tests__/guardian-outbound-http.test.ts +7 -5
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/headless-browser-navigate.test.ts +172 -0
- package/src/__tests__/heartbeat-disk-pressure.test.ts +4 -0
- package/src/__tests__/heartbeat-service.test.ts +4 -0
- package/src/__tests__/host-bash-proxy.test.ts +6 -0
- package/src/__tests__/host-browser-proxy.test.ts +10 -0
- package/src/__tests__/host-cu-proxy.test.ts +8 -1
- package/src/__tests__/host-file-proxy.test.ts +8 -1
- package/src/__tests__/host-shell-tool.test.ts +1 -1
- package/src/__tests__/host-transfer-proxy.test.ts +8 -1
- package/src/__tests__/identity-routes.test.ts +57 -0
- package/src/__tests__/inbound-slack-persistence.test.ts +3 -0
- package/src/__tests__/init-feature-flag-overrides.test.ts +5 -6
- package/src/__tests__/injector-chain.test.ts +2 -0
- package/src/__tests__/injector-document-comments.test.ts +378 -0
- package/src/__tests__/injector-pkb-v2-silenced.test.ts +4 -25
- package/src/__tests__/list-messages-attachments.test.ts +21 -17
- package/src/__tests__/list-messages-hidden-metadata.test.ts +217 -0
- package/src/__tests__/list-messages-page-latest.test.ts +130 -14
- package/src/__tests__/list-messages-tool-merge.test.ts +77 -17
- package/src/__tests__/llm-context-normalization.test.ts +0 -2
- package/src/__tests__/llm-request-log-call-site.test.ts +136 -0
- package/src/__tests__/llm-request-log-source-clickhouse.test.ts +26 -0
- package/src/__tests__/llm-resolver.test.ts +161 -9
- package/src/__tests__/llm-usage-store.test.ts +66 -0
- package/src/__tests__/log-export-routes.test.ts +99 -2
- package/src/__tests__/logger.test.ts +89 -0
- package/src/__tests__/mcp-abort-signal.test.ts +2 -2
- package/src/__tests__/media-generate-image.test.ts +31 -0
- package/src/__tests__/memory-v2-static-injector.test.ts +7 -7
- package/src/__tests__/message-queue-steer.test.ts +114 -0
- package/src/__tests__/model-intents.test.ts +2 -4
- package/src/__tests__/notification-guardian-path.test.ts +0 -1
- package/src/__tests__/onboarding-template-contract.test.ts +1 -1
- package/src/__tests__/openai-provider.test.ts +151 -0
- package/src/__tests__/openai-responses-provider.test.ts +118 -16
- package/src/__tests__/outbound-slack-persistence.test.ts +187 -20
- package/src/__tests__/pending-interactions-resolved-event.test.ts +189 -0
- package/src/__tests__/platform-bash-auto-approve.test.ts +2 -2
- package/src/__tests__/platform.test.ts +2 -5
- package/src/__tests__/plugin-api-tool-definition.test.ts +92 -0
- package/src/__tests__/plugin-bootstrap.test.ts +2 -2
- package/src/__tests__/plugin-source-watcher.test.ts +302 -0
- package/src/__tests__/plugin-tool-contribution.test.ts +13 -6
- package/src/__tests__/plugin-types.test.ts +3 -2
- package/src/__tests__/prechat-onboarding-contract.test.ts +131 -98
- package/src/__tests__/pricing.test.ts +12 -0
- package/src/__tests__/process-message-background-slack.test.ts +1 -51
- package/src/__tests__/process-message-display-content.test.ts +21 -16
- package/src/__tests__/prune-jobs-changes-parser.test.ts +61 -0
- package/src/__tests__/registry.test.ts +2 -8
- package/src/__tests__/require-fresh-approval.test.ts +2 -2
- package/src/__tests__/runtime-events-sse-bilingual.test.ts +154 -0
- package/src/__tests__/server-history-render.test.ts +83 -4
- package/src/__tests__/shell-tool-proxy-mode.test.ts +1 -1
- package/src/__tests__/skill-feature-flags.test.ts +2 -2
- package/src/__tests__/skill-projection-feature-flag.test.ts +4 -7
- package/src/__tests__/skill-projection.benchmark.test.ts +2 -6
- package/src/__tests__/skill-tool-factory.test.ts +1 -1
- package/src/__tests__/steer-tool-repair.test.ts +249 -0
- package/src/__tests__/subagent-notify-parent.test.ts +1 -1
- package/src/__tests__/suggestion-routes.test.ts +1 -0
- package/src/__tests__/sync-message-contract.test.ts +59 -0
- package/src/__tests__/system-prompt.test.ts +161 -124
- package/src/__tests__/terminal-tools.test.ts +12 -2
- package/src/__tests__/thinking-block-replay.test.ts +113 -0
- package/src/__tests__/thread-backfill.test.ts +370 -22
- package/src/__tests__/tool-approval-handler.test.ts +1 -5
- package/src/__tests__/tool-execute-pipeline.test.ts +2 -2
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +2 -5
- package/src/__tests__/tool-executor-lifecycle-events.test.ts +15 -5
- package/src/__tests__/tool-executor.test.ts +89 -53
- package/src/__tests__/tool-grant-request-escalation.test.ts +1 -6
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +167 -0
- package/src/__tests__/trusted-contact-approval-notifier.test.ts +0 -1
- package/src/__tests__/trusted-contact-inline-approval-integration.test.ts +1 -6
- package/src/__tests__/trusted-contact-multichannel.test.ts +0 -1
- package/src/__tests__/twilio-routes.test.ts +1 -1
- package/src/__tests__/ui-file-upload-surface.test.ts +2 -2
- package/src/__tests__/usage-routes.test.ts +3 -0
- package/src/__tests__/verification-control-plane-policy.test.ts +2 -2
- package/src/__tests__/web-fetch.test.ts +2 -2
- package/src/__tests__/workspace-git-service.test.ts +94 -10
- package/src/__tests__/workspace-migration-088-deprecate-background-conversation-override.test.ts +158 -0
- package/src/__tests__/workspace-migration-089-move-memory-tree-out-of-v3.test.ts +86 -0
- package/src/acp/__tests__/prepare-agent-env.test.ts +146 -0
- package/src/acp/prepare-agent-env.ts +78 -0
- package/src/acp/session-manager.ts +1 -1
- package/src/agent/attachments.ts +1 -0
- package/src/agent/loop.ts +65 -20
- package/src/api/README.md +5 -0
- package/src/api/index.ts +4 -0
- package/src/api/package.json +10 -0
- package/src/background-wake/background-wake-routes.test.ts +233 -0
- package/src/background-wake/next-wake.test.ts +289 -0
- package/src/background-wake/next-wake.ts +172 -0
- package/src/background-wake/runtime-registry.ts +24 -0
- package/src/browser/operations.ts +15 -0
- package/src/cli/commands/__tests__/browser.test.ts +23 -5
- package/src/cli/commands/__tests__/conversations-slack.test.ts +572 -0
- package/src/cli/commands/__tests__/domain-register.test.ts +110 -0
- package/src/cli/commands/__tests__/domain-status.test.ts +33 -33
- package/src/cli/commands/__tests__/inference-send.test.ts +108 -5
- package/src/cli/commands/__tests__/memory-v2-compare-render.test.ts +98 -0
- package/src/cli/commands/__tests__/memory-v2.test.ts +10 -12
- package/src/cli/commands/__tests__/memory-v3-render.test.ts +340 -0
- package/src/cli/commands/browser.ts +247 -0
- package/src/cli/commands/conversations.ts +128 -1
- package/src/cli/commands/domain.ts +91 -41
- package/src/cli/commands/inference-providers.ts +147 -1
- package/src/cli/commands/inference.ts +93 -40
- package/src/cli/commands/memory-v2-compare-render.ts +115 -0
- package/src/cli/commands/memory-v2.ts +483 -0
- package/src/cli/commands/memory-v3-render.ts +344 -0
- package/src/cli/commands/memory-v3.ts +316 -0
- package/src/cli/commands/notifications.ts +24 -2
- package/src/cli/program.ts +2 -0
- package/src/cli/utils/conversation-id.ts +17 -5
- package/src/config/assistant-feature-flags.ts +21 -9
- package/src/config/bundled-skills/app-builder/SKILL.md +2 -2
- package/src/config/bundled-skills/document-editor/SKILL.md +124 -0
- package/src/config/bundled-skills/document-editor/TOOLS.json +258 -0
- package/src/config/bundled-skills/document-editor/tools/comment-list.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-reply.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/comment-resolve.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-find.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-open.ts +12 -0
- package/src/config/bundled-skills/document-editor/tools/document-replace-text.ts +12 -0
- package/src/config/bundled-skills/image-studio/SKILL.md +4 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +2 -2
- package/src/config/bundled-skills/media-processing/SKILL.md +8 -0
- package/src/config/bundled-skills/media-processing/tools/ingest-media.ts +13 -8
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +10 -3
- package/src/config/bundled-skills/phone-calls/references/TRANSCRIPTS.md +16 -14
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +7 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +7 -2
- package/src/config/bundled-skills/schedule/SKILL.md +8 -0
- package/src/config/bundled-tool-registry.ts +24 -12
- package/src/config/call-site-defaults.ts +20 -0
- package/src/config/feature-flag-registry.json +115 -3
- package/src/config/llm-resolver.ts +16 -2
- package/src/config/schemas/__tests__/memory-v2.test.ts +217 -1
- package/src/config/schemas/call-site-catalog.ts +35 -0
- package/src/config/schemas/llm.ts +14 -0
- package/src/config/schemas/memory-v2.ts +294 -1
- package/src/config/schemas/memory.ts +2 -1
- package/src/context/compactor.ts +60 -1
- package/src/context/token-estimator.ts +47 -4
- package/src/context/window-manager.ts +25 -0
- package/src/conversations/__tests__/message-consolidation.test.ts +350 -0
- package/src/conversations/message-consolidation.ts +404 -0
- package/src/credential-health/credential-health-service.ts +34 -19
- package/src/daemon/__tests__/conversation-tool-setup-exclude.test.ts +1 -1
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +66 -6
- package/src/daemon/__tests__/meet-manifest-loader.test.ts +1 -1
- package/src/daemon/__tests__/native-web-search-metadata.test.ts +357 -0
- package/src/daemon/__tests__/web-search-status-text.test.ts +287 -0
- package/src/daemon/conversation-agent-loop-handlers.ts +155 -36
- package/src/daemon/conversation-agent-loop.ts +307 -88
- package/src/daemon/conversation-error.ts +31 -1
- package/src/daemon/conversation-lifecycle.ts +149 -118
- package/src/daemon/conversation-messaging.ts +3 -0
- package/src/daemon/conversation-process.ts +273 -0
- package/src/daemon/conversation-queue-manager.ts +14 -0
- package/src/daemon/conversation-runtime-assembly.ts +145 -84
- package/src/daemon/conversation-slash.ts +37 -5
- package/src/daemon/conversation-surfaces.ts +45 -2
- package/src/daemon/conversation-tool-setup.ts +70 -3
- package/src/daemon/conversation-usage.ts +2 -0
- package/src/daemon/conversation.ts +54 -32
- package/src/daemon/disk-pressure-guard.ts +14 -2
- package/src/daemon/first-greeting.ts +10 -0
- package/src/daemon/handlers/__tests__/config-a2a-accept.test.ts +498 -0
- package/src/daemon/handlers/config-a2a.ts +160 -0
- package/src/daemon/handlers/config-model.test.ts +2 -0
- package/src/daemon/handlers/conversations.ts +90 -3
- package/src/daemon/handlers/shared.ts +92 -29
- package/src/daemon/host-bash-proxy.ts +1 -1
- package/src/daemon/host-browser-proxy.ts +5 -5
- package/src/daemon/host-cu-proxy.ts +5 -5
- package/src/daemon/host-file-proxy.ts +5 -5
- package/src/daemon/host-proxy-base.ts +4 -4
- package/src/daemon/host-transfer-proxy.ts +11 -11
- package/src/daemon/lifecycle.ts +40 -23
- package/src/daemon/meet-manifest-loader.ts +1 -7
- package/src/daemon/message-protocol.ts +4 -0
- package/src/daemon/message-types/conversations.ts +14 -9
- package/src/daemon/message-types/document-comments.ts +50 -0
- package/src/daemon/message-types/home.ts +1 -13
- package/src/daemon/message-types/messages.ts +66 -7
- package/src/daemon/message-types/surfaces.ts +3 -1
- package/src/daemon/message-types/sync.ts +14 -0
- package/src/daemon/message-types/web-activity.ts +57 -0
- package/src/daemon/plugin-source-watcher.ts +135 -3
- package/src/daemon/process-message.ts +69 -12
- package/src/daemon/shutdown-handlers.ts +24 -5
- package/src/daemon/switch-inference-profile-tool.ts +52 -0
- package/src/daemon/tool-setup-types.ts +13 -0
- package/src/daemon/trust-context.ts +6 -0
- package/src/documents/document-comments-store.test.ts +338 -0
- package/src/documents/document-comments-store.ts +237 -0
- package/src/documents/document-store.ts +202 -0
- package/src/events/relationship-state-updated.ts +25 -0
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +1 -2
- package/src/heartbeat/heartbeat-service.ts +1 -0
- package/src/home/__tests__/suggested-prompts.test.ts +33 -2
- package/src/home/feed-types.ts +6 -1
- package/src/home/home-content-refresh.ts +52 -0
- package/src/home/home-greeting-cache.ts +69 -0
- package/src/home/home-greeting.ts +85 -0
- package/src/home/suggested-prompts.ts +168 -9
- package/src/ipc/gateway-flag-listener.ts +123 -0
- package/src/ipc/skill-routes/registries.ts +8 -12
- package/src/memory/__tests__/db-async-query.test.ts +165 -0
- package/src/memory/__tests__/db-maintenance.test.ts +115 -0
- package/src/memory/__tests__/jobs-store-enqueue-gate.test.ts +241 -0
- package/src/memory/__tests__/jobs-store-job-classes.test.ts +28 -1
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +135 -2
- package/src/memory/__tests__/memory-retrospective-job.test.ts +327 -6
- package/src/memory/auto-analysis-enqueue.ts +5 -1
- package/src/memory/conversation-crud.ts +191 -100
- package/src/memory/conversation-starters-cadence.ts +3 -1
- package/src/memory/conversation-title-service.ts +19 -3
- package/src/memory/db-async-query.ts +214 -0
- package/src/memory/db-init.ts +26 -0
- package/src/memory/db-maintenance.ts +30 -21
- package/src/memory/delivery-crud.ts +41 -0
- package/src/memory/delivery-status.ts +141 -15
- package/src/memory/external-conversation-store.ts +32 -1
- package/src/memory/graph/bootstrap.ts +8 -1
- package/src/memory/graph/capability-seed.ts +7 -3
- package/src/memory/graph/conversation-graph-memory.ts +100 -17
- package/src/memory/graph/extraction.ts +1 -5
- package/src/memory/graph/graph-search.ts +7 -1
- package/src/memory/indexer.ts +28 -18
- package/src/memory/job-handlers/cleanup.ts +76 -18
- package/src/memory/job-handlers/conversation-starters.ts +1 -4
- package/src/memory/jobs/embed-pkb-file.ts +6 -1
- package/src/memory/jobs-store.ts +14 -0
- package/src/memory/jobs-worker.ts +68 -15
- package/src/memory/llm-request-log-source-clickhouse.ts +42 -2
- package/src/memory/llm-request-log-source-local.ts +7 -0
- package/src/memory/llm-request-log-source.ts +9 -2
- package/src/memory/llm-request-log-store.ts +43 -1
- package/src/memory/llm-usage-store.ts +24 -0
- package/src/memory/memory-retrospective-constants.ts +28 -0
- package/src/memory/memory-retrospective-enqueue.ts +11 -3
- package/src/memory/memory-retrospective-job.ts +413 -18
- package/src/memory/memory-retrospective-startup-cleanup.ts +3 -3
- package/src/memory/memory-v2-activation-log-store.ts +41 -14
- package/src/memory/migrations/100-core-tables.ts +1 -0
- package/src/memory/migrations/109-external-conversation-bindings.ts +1 -0
- package/src/memory/migrations/253-conversation-last-notified-profile.ts +15 -0
- package/src/memory/migrations/253-document-comments.ts +47 -0
- package/src/memory/migrations/254-external-conversation-binding-chat-name.ts +43 -0
- package/src/memory/migrations/255-channel-inbound-delivery-attempts.ts +24 -0
- package/src/memory/migrations/256-memory-v2-injection-events.ts +113 -0
- package/src/memory/migrations/257-strip-base-url-non-openai-compatible.ts +22 -0
- package/src/memory/migrations/258-onboarding-events-prior-assistants.ts +13 -0
- package/src/memory/migrations/259-conversation-cleaned-at.ts +33 -0
- package/src/memory/migrations/260-rename-cleaned-at.ts +44 -0
- package/src/memory/migrations/261-llm-usage-add-raw-usage.ts +36 -0
- package/src/memory/migrations/262-memory-v3-coactivation.ts +57 -0
- package/src/memory/migrations/263-memory-v3-auto-edges.ts +50 -0
- package/src/memory/migrations/264-llm-request-log-call-site.ts +29 -0
- package/src/memory/migrations/index.ts +34 -0
- package/src/memory/migrations/registry.ts +58 -0
- package/src/memory/onboarding-events-store.ts +7 -0
- package/src/memory/schema/calls.ts +1 -0
- package/src/memory/schema/conversations.ts +3 -0
- package/src/memory/schema/infrastructure.ts +22 -0
- package/src/memory/tool-usage-store.ts +36 -8
- package/src/memory/v2/__tests__/consolidation-job.test.ts +1 -0
- package/src/memory/v2/__tests__/harness-compare.test.ts +186 -0
- package/src/memory/v2/__tests__/harness-metrics.test.ts +74 -0
- package/src/memory/v2/__tests__/harness-oracle.test.ts +257 -0
- package/src/memory/v2/__tests__/harness-replay-input.test.ts +225 -0
- package/src/memory/v2/__tests__/harness-runner.test.ts +109 -0
- package/src/memory/v2/__tests__/injection-events.test.ts +318 -0
- package/src/memory/v2/__tests__/injection.test.ts +158 -112
- package/src/memory/v2/__tests__/page-index.test.ts +365 -1
- package/src/memory/v2/__tests__/qdrant.test.ts +36 -0
- package/src/memory/v2/__tests__/router.test.ts +660 -4
- package/src/memory/v2/consolidation-job.ts +14 -0
- package/src/memory/v2/harness/compare.ts +57 -0
- package/src/memory/v2/harness/metrics.ts +124 -0
- package/src/memory/v2/harness/oracle.ts +145 -0
- package/src/memory/v2/harness/replay-input.ts +224 -0
- package/src/memory/v2/harness/retriever.ts +74 -0
- package/src/memory/v2/harness/router-retriever.ts +43 -0
- package/src/memory/v2/harness/runner.ts +106 -0
- package/src/memory/v2/harness/trace.ts +58 -0
- package/src/memory/v2/injection-events.ts +101 -0
- package/src/memory/v2/injection.ts +42 -25
- package/src/memory/v2/page-index.ts +209 -7
- package/src/memory/v2/page-store.ts +18 -0
- package/src/memory/v2/prompts/router.ts +26 -1
- package/src/memory/v2/qdrant.ts +14 -2
- package/src/memory/v2/router.ts +369 -62
- package/src/memory/v3/__tests__/coactivation-store.test.ts +422 -0
- package/src/memory/v3/__tests__/consolidation-job.test.ts +468 -0
- package/src/memory/v3/__tests__/edge-learning-job.test.ts +324 -0
- package/src/memory/v3/__tests__/edges.test.ts +563 -0
- package/src/memory/v3/__tests__/filter.test.ts +512 -0
- package/src/memory/v3/__tests__/gate.test.ts +574 -0
- package/src/memory/v3/__tests__/index-composition.test.ts +233 -0
- package/src/memory/v3/__tests__/loop.test.ts +530 -0
- package/src/memory/v3/__tests__/retriever.test.ts +226 -0
- package/src/memory/v3/__tests__/scouts.test.ts +440 -0
- package/src/memory/v3/__tests__/shadow-middleware.test.ts +312 -0
- package/src/memory/v3/__tests__/system-prompts.test.ts +154 -0
- package/src/memory/v3/__tests__/traversal.test.ts +469 -0
- package/src/memory/v3/__tests__/tree-index.test.ts +280 -0
- package/src/memory/v3/__tests__/tree-store.test.ts +529 -0
- package/src/memory/v3/__tests__/tree-walk.test.ts +707 -0
- package/src/memory/v3/__tests__/validate.test.ts +245 -0
- package/src/memory/v3/auto-edges.ts +223 -0
- package/src/memory/v3/coactivation-store.ts +124 -0
- package/src/memory/v3/consolidation-job.ts +323 -0
- package/src/memory/v3/edge-learning-job.ts +160 -0
- package/src/memory/v3/edges.ts +249 -0
- package/src/memory/v3/filter.ts +281 -0
- package/src/memory/v3/gate.ts +334 -0
- package/src/memory/v3/index-composition.ts +113 -0
- package/src/memory/v3/llm-capture.ts +46 -0
- package/src/memory/v3/loop.ts +382 -0
- package/src/memory/v3/maintenance.ts +144 -0
- package/src/memory/v3/prompt-context.ts +33 -0
- package/src/memory/v3/prompts/consolidation.ts +458 -0
- package/src/memory/v3/prompts/system-prompts.ts +196 -0
- package/src/memory/v3/retriever.ts +33 -0
- package/src/memory/v3/scouts.ts +420 -0
- package/src/memory/v3/shadow-middleware.ts +305 -0
- package/src/memory/v3/traversal.ts +206 -0
- package/src/memory/v3/tree-index.ts +237 -0
- package/src/memory/v3/tree-store.ts +394 -0
- package/src/memory/v3/tree-walk.ts +351 -0
- package/src/memory/v3/types.ts +65 -0
- package/src/memory/v3/validate.ts +300 -0
- package/src/messaging/providers/index.ts +7 -1
- package/src/messaging/providers/slack/__tests__/adapter-mention-rendering.test.ts +329 -3
- package/src/messaging/providers/slack/__tests__/adapter-token-routing.test.ts +34 -1
- package/src/messaging/providers/slack/adapter.ts +178 -25
- package/src/messaging/providers/slack/api.test.ts +54 -0
- package/src/messaging/providers/slack/api.ts +119 -3
- package/src/messaging/providers/slack/client.ts +12 -0
- package/src/messaging/providers/slack/deep-link.ts +20 -1
- package/src/messaging/providers/slack/message-metadata.test.ts +48 -0
- package/src/messaging/providers/slack/message-metadata.ts +156 -0
- package/src/messaging/providers/slack/render-transcript.test.ts +107 -75
- package/src/messaging/providers/slack/render-transcript.ts +176 -49
- package/src/messaging/providers/slack/send.test.ts +77 -0
- package/src/messaging/providers/slack/send.ts +8 -2
- package/src/messaging/providers/slack/types.ts +14 -0
- package/src/notifications/__tests__/emit-signal-home-feed.test.ts +4 -1
- package/src/notifications/__tests__/home-feed-side-effect.test.ts +116 -54
- package/src/notifications/adapters/macos.ts +18 -1
- package/src/notifications/adapters/platform.ts +1 -1
- package/src/notifications/conversation-seed-composer.ts +14 -2
- package/src/notifications/decision-engine.ts +1 -4
- package/src/notifications/deferred-emit.ts +135 -0
- package/src/notifications/emit-signal.ts +38 -50
- package/src/notifications/home-feed-side-effect.ts +60 -30
- package/src/oauth/connect-orchestrator.ts +3 -0
- package/src/oauth/credential-token-resolver.ts +2 -0
- package/src/oauth/manual-token-connection.ts +19 -0
- package/src/oauth/oauth-store.ts +12 -0
- package/src/oauth/seed-providers.ts +22 -0
- package/src/permissions/prompter.ts +8 -5
- package/src/permissions/question-prompter.ts +5 -2
- package/src/permissions/secret-prompter.ts +6 -3
- package/src/plugin-api/index.ts +4 -0
- package/src/plugin-api/types.ts +7 -33
- package/src/plugins/defaults/index.ts +6 -0
- package/src/plugins/defaults/injectors.ts +100 -20
- package/src/plugins/external-plugin-loader.ts +5 -68
- package/src/plugins/types.ts +11 -16
- package/src/proactive-artifact/aux-message-injector.ts +17 -4
- package/src/prompts/__tests__/system-prompt.test.ts +46 -2
- package/src/prompts/__tests__/task-progress-hint-section.test.ts +3 -9
- package/src/prompts/normalize-onboarding.ts +40 -0
- package/src/prompts/persona-resolver.ts +36 -21
- package/src/prompts/sections.ts +69 -19
- package/src/prompts/system-prompt.ts +118 -216
- package/src/prompts/template-detection.ts +37 -0
- package/src/prompts/templates/BOOTSTRAP-CONTENT-AUTOMATION.md +141 -0
- package/src/prompts/templates/BOOTSTRAP.md +10 -2
- package/src/prompts/templates/VOICE.md +3 -0
- package/src/prompts/templates/system-sections.ts +281 -9
- package/src/providers/__tests__/connection-model-compat.test.ts +234 -0
- package/src/providers/__tests__/retry-callsite.test.ts +85 -5
- package/src/providers/anthropic/client.ts +159 -66
- package/src/providers/call-site-routing.ts +14 -2
- package/src/providers/connection-model-compat.ts +38 -0
- package/src/providers/connection-resolution.ts +16 -2
- package/src/providers/fireworks/client.ts +20 -2
- package/src/providers/gemini/client.ts +49 -6
- package/src/providers/inference/__tests__/base-url-route-validation.test.ts +342 -0
- package/src/providers/inference/__tests__/base-url-security.test.ts +189 -0
- package/src/providers/inference/__tests__/codex-token-refresh.test.ts +254 -0
- package/src/providers/inference/adapter-factory.ts +18 -1
- package/src/providers/inference/auth.ts +3 -3
- package/src/providers/inference/codex-token-refresh.ts +128 -0
- package/src/providers/inference/resolve-auth.ts +49 -6
- package/src/providers/minimax/client.ts +106 -0
- package/src/providers/model-catalog.ts +91 -1
- package/src/providers/model-intents.ts +1 -1
- package/src/providers/openai/chat-completions-provider.ts +63 -23
- package/src/providers/openai/codex-models.ts +18 -0
- package/src/providers/openai/responses-provider.ts +86 -23
- package/src/providers/openrouter/client.ts +5 -1
- package/src/providers/provider-send-message.ts +7 -1
- package/src/providers/retry.ts +34 -3
- package/src/providers/thinking-config.ts +26 -1
- package/src/providers/types.ts +25 -0
- package/src/providers/usage-tracking.ts +2 -0
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +214 -0
- package/src/runtime/__tests__/background-job-runner.test.ts +128 -0
- package/src/runtime/agent-wake.ts +152 -56
- package/src/runtime/assistant-event-hub.ts +76 -6
- package/src/runtime/auth/route-policy.ts +43 -3
- package/src/runtime/background-job-runner.ts +26 -0
- package/src/runtime/btw-sidechain.ts +0 -6
- package/src/runtime/channel-reply-delivery.ts +182 -47
- package/src/runtime/channel-retry-sweep.ts +141 -16
- package/src/runtime/http-types.ts +7 -6
- package/src/runtime/migrations/vbundle-builder.ts +10 -3
- package/src/runtime/pending-interactions.ts +50 -8
- package/src/runtime/routes/__tests__/content-source-routes.test.ts +162 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +161 -1
- package/src/runtime/routes/__tests__/memory-v2-routes.test.ts +14 -0
- package/src/runtime/routes/__tests__/memory-v2-simulate-route.test.ts +290 -0
- package/src/runtime/routes/__tests__/plugins-routes.test.ts +512 -0
- package/src/runtime/routes/__tests__/sanity-routes.test.ts +280 -0
- package/src/runtime/routes/__tests__/slack-channel-routes.test.ts +266 -0
- package/src/runtime/routes/acp-routes.test.ts +255 -6
- package/src/runtime/routes/acp-routes.ts +8 -1
- package/src/runtime/routes/approval-routes.ts +4 -1
- package/src/runtime/routes/avatar-routes.ts +10 -10
- package/src/runtime/routes/background-wake-routes.ts +188 -0
- package/src/runtime/routes/browser-tabs-routes.ts +200 -0
- package/src/runtime/routes/btw-routes.ts +0 -6
- package/src/runtime/routes/chatgpt-subscription-auth-routes.ts +246 -0
- package/src/runtime/routes/content-source-routes.ts +78 -0
- package/src/runtime/routes/conversation-cli-routes.ts +147 -2
- package/src/runtime/routes/conversation-list-routes.ts +12 -4
- package/src/runtime/routes/conversation-management-routes.ts +77 -20
- package/src/runtime/routes/conversation-query-routes.ts +196 -31
- package/src/runtime/routes/conversation-routes.ts +472 -425
- package/src/runtime/routes/conversation-starter-routes.ts +6 -3
- package/src/runtime/routes/disk-pressure-routes.ts +1 -1
- package/src/runtime/routes/document-comments-routes.ts +287 -0
- package/src/runtime/routes/documents-routes.ts +33 -0
- package/src/runtime/routes/domain-routes.ts +60 -10
- package/src/runtime/routes/email-routes.ts +5 -2
- package/src/runtime/routes/events-routes.ts +54 -10
- package/src/runtime/routes/group-routes.ts +24 -8
- package/src/runtime/routes/home-feed-routes.ts +6 -3
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-browser-routes.ts +17 -2
- package/src/runtime/routes/host-cu-routes.ts +2 -2
- package/src/runtime/routes/identity-routes.ts +21 -0
- package/src/runtime/routes/inbound-message-handler.ts +288 -58
- package/src/runtime/routes/inbound-stages/acl-enforcement.ts +96 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +365 -6
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +283 -82
- package/src/runtime/routes/index.ts +20 -4
- package/src/runtime/routes/inference-profile-session-handler.ts +22 -12
- package/src/runtime/routes/inference-profile-session-routes.ts +7 -1
- package/src/runtime/routes/inference-provider-connection-routes.ts +63 -7
- package/src/runtime/routes/integrations/a2a.ts +60 -1
- package/src/runtime/routes/llm-call-sites-routes.ts +32 -5
- package/src/runtime/routes/log-export-routes.ts +39 -0
- package/src/runtime/routes/memory-item-routes.ts +8 -3
- package/src/runtime/routes/memory-v2-routes.ts +427 -0
- package/src/runtime/routes/memory-v3-routes.ts +316 -0
- package/src/runtime/routes/migration-routes.ts +21 -24
- package/src/runtime/routes/notification-routes.ts +19 -2
- package/src/runtime/routes/plugins-routes.ts +337 -0
- package/src/runtime/routes/question-routes.ts +4 -1
- package/src/runtime/routes/rename-conversation-routes.ts +6 -2
- package/src/runtime/routes/sanity-routes.ts +159 -0
- package/src/runtime/routes/secret-routes.ts +25 -5
- package/src/runtime/routes/settings-routes.ts +12 -11
- package/src/runtime/routes/slack-channel-routes.ts +188 -0
- package/src/runtime/routes/workspace-routes.ts +25 -10
- package/src/runtime/services/conversation-serializer.ts +30 -4
- package/src/runtime/sync/resource-sync-events.ts +106 -38
- package/src/runtime/sync/sync-publisher.test.ts +49 -0
- package/src/runtime/sync/sync-publisher.ts +2 -1
- package/src/runtime/verification-outbound-actions.ts +73 -1
- package/src/schedule/integration-status.ts +3 -1
- package/src/security/__tests__/oauth2-device-code.test.ts +479 -0
- package/src/security/oauth2-device-code.ts +307 -0
- package/src/security/oauth2.ts +26 -9
- package/src/security/secure-keys.ts +5 -0
- package/src/skills/catalog-install.ts +6 -2
- package/src/telemetry/types.ts +12 -0
- package/src/telemetry/usage-telemetry-reporter.test.ts +48 -0
- package/src/telemetry/usage-telemetry-reporter.ts +1 -0
- package/src/tools/acp/spawn.test.ts +119 -0
- package/src/tools/acp/spawn.ts +15 -2
- package/src/tools/apps/definitions.ts +2 -8
- package/src/tools/ask-question/ask-question-tool.test.ts +3 -3
- package/src/tools/ask-question/ask-question-tool.ts +38 -45
- package/src/tools/browser/__tests__/pinned-tabs.test.ts +150 -0
- package/src/tools/browser/browser-execution.ts +106 -0
- package/src/tools/browser/cdp-client/__tests__/browser-tabs-factory.test.ts +402 -0
- package/src/tools/browser/cdp-client/__tests__/factory.test.ts +28 -0
- package/src/tools/browser/cdp-client/__tests__/types.test.ts +4 -0
- package/src/tools/browser/cdp-client/cdp-inspect-client.ts +22 -0
- package/src/tools/browser/cdp-client/extension-cdp-client.ts +42 -2
- package/src/tools/browser/cdp-client/factory.ts +171 -4
- package/src/tools/browser/cdp-client/local-cdp-client.ts +21 -0
- package/src/tools/browser/cdp-client/types.ts +101 -0
- package/src/tools/browser/pinned-tabs.ts +146 -0
- package/src/tools/computer-use/definitions.ts +22 -78
- package/src/tools/credential-execution/make-authenticated-request.ts +3 -9
- package/src/tools/credential-execution/manage-secure-command-tool.ts +3 -9
- package/src/tools/credential-execution/run-authenticated-command.ts +3 -9
- package/src/tools/credentials/vault.ts +3 -9
- package/src/tools/document/document-comment-tool.test.ts +379 -0
- package/src/tools/document/document-comment-tool.ts +156 -0
- package/src/tools/document/document-tool.ts +187 -2
- package/src/tools/execution-target.ts +21 -23
- package/src/tools/executor.ts +6 -1
- package/src/tools/filesystem/edit.ts +3 -9
- package/src/tools/filesystem/list.ts +3 -9
- package/src/tools/filesystem/read.ts +3 -9
- package/src/tools/filesystem/write.ts +3 -9
- package/src/tools/host-filesystem/edit.ts +3 -9
- package/src/tools/host-filesystem/read.ts +3 -9
- package/src/tools/host-filesystem/transfer.ts +3 -9
- package/src/tools/host-filesystem/write.ts +3 -9
- package/src/tools/host-terminal/host-shell.ts +3 -9
- package/src/tools/mcp/mcp-tool-factory.ts +1 -8
- package/src/tools/memory/register.test.ts +1 -1
- package/src/tools/memory/register.ts +4 -9
- package/src/tools/network/__tests__/web-fetch-metadata.test.ts +229 -0
- package/src/tools/network/__tests__/web-search-metadata.test.ts +346 -0
- package/src/tools/network/domain-normalize.ts +17 -0
- package/src/tools/network/web-fetch.ts +216 -73
- package/src/tools/network/web-search.ts +216 -98
- package/src/tools/registry.ts +7 -23
- package/src/tools/schema-transforms.ts +1 -1
- package/src/tools/skills/execute.ts +3 -9
- package/src/tools/skills/load.ts +3 -9
- package/src/tools/skills/skill-tool-factory.ts +1 -8
- package/src/tools/subagent/notify-parent.ts +3 -9
- package/src/tools/system/request-permission.ts +3 -9
- package/src/tools/terminal/safe-env.ts +3 -2
- package/src/tools/terminal/shell.ts +3 -9
- package/src/tools/tool-approval-handler.ts +19 -12
- package/src/tools/tool-defaults.ts +94 -0
- package/src/tools/types.ts +31 -98
- package/src/tools/ui-surface/definitions.ts +9 -23
- package/src/types/onboarding-context.ts +4 -0
- package/src/usage/pricing.ts +23 -0
- package/src/usage/types.ts +12 -0
- package/src/util/__tests__/favicon.test.ts +84 -0
- package/src/util/favicon.ts +40 -0
- package/src/util/logger.ts +16 -7
- package/src/util/platform.ts +7 -7
- package/src/util/sqlite3-runtime.ts +65 -0
- package/src/workspace/git-service.ts +75 -4
- package/src/workspace/migrations/086-revert-stale-gemini-mis-rewrites.ts +1 -0
- package/src/workspace/migrations/088-deprecate-background-conversation-override.ts +103 -0
- package/src/workspace/migrations/089-move-memory-tree-out-of-v3.ts +86 -0
- package/src/workspace/migrations/registry.ts +4 -0
- package/src/__tests__/compaction-strip-metadata-clear.test.ts +0 -206
- package/src/__tests__/message-complete-display-id.test.ts +0 -175
- package/src/config/bundled-skills/document/SKILL.md +0 -54
- package/src/config/bundled-skills/document/TOOLS.json +0 -106
- package/src/daemon/seed-files.ts +0 -18
- package/src/prompts/cache-boundary.ts +0 -8
- package/src/runtime/routes/interface-routes.ts +0 -43
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-create.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-delete.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-list.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-read.ts +0 -0
- /package/src/config/bundled-skills/{document → document-editor}/tools/document-update.ts +0 -0
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { registerCommand } from "../lib/register-command.js";
|
|
9
9
|
import { log } from "../logger.js";
|
|
10
10
|
import { shouldOutputJson, writeOutput } from "../output.js";
|
|
11
|
+
import { tryResolveConversationId } from "../utils/conversation-id.js";
|
|
11
12
|
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Command registration
|
|
@@ -248,8 +249,6 @@ Examples:
|
|
|
248
249
|
}
|
|
249
250
|
}
|
|
250
251
|
|
|
251
|
-
const sourceContextId = opts.sessionId ?? `cli-${Date.now()}`;
|
|
252
|
-
|
|
253
252
|
// Validate --conversation-id if provided
|
|
254
253
|
const conversationId = opts.conversationId?.trim();
|
|
255
254
|
if (opts.conversationId != null && !conversationId) {
|
|
@@ -261,6 +260,26 @@ Examples:
|
|
|
261
260
|
return;
|
|
262
261
|
}
|
|
263
262
|
|
|
263
|
+
// Picks up __CONVERSATION_ID / __SKILL_CONTEXT_JSON env vars
|
|
264
|
+
// so deferred-emit can buffer notifications when called from a
|
|
265
|
+
// background job that hasn't confirmed success yet.
|
|
266
|
+
const originatingConversationId = tryResolveConversationId();
|
|
267
|
+
|
|
268
|
+
// The signal's `sourceContextId` doubles as the home-feed's
|
|
269
|
+
// navigation target — `resolveHomeFeedMirror` looks it up via
|
|
270
|
+
// `getConversation()` and only renders a "Go to Convo" button
|
|
271
|
+
// when it resolves to a real row. Prefer the conversation the
|
|
272
|
+
// CLI was invoked from (env-derived) so notifications emitted
|
|
273
|
+
// by background jobs and skills link back to their producing
|
|
274
|
+
// convo; an explicit --session-id still wins to preserve
|
|
275
|
+
// caller intent, and --conversation-id is the last resort
|
|
276
|
+
// before the unresolvable `cli-<ts>` sentinel.
|
|
277
|
+
const sourceContextId =
|
|
278
|
+
opts.sessionId ??
|
|
279
|
+
originatingConversationId ??
|
|
280
|
+
conversationId ??
|
|
281
|
+
`cli-${Date.now()}`;
|
|
282
|
+
|
|
264
283
|
const result = await cliIpcCall<{
|
|
265
284
|
signalId: string;
|
|
266
285
|
dispatched: boolean;
|
|
@@ -289,6 +308,9 @@ Examples:
|
|
|
289
308
|
...(conversationId
|
|
290
309
|
? { conversationAffinityHint: { vellum: conversationId } }
|
|
291
310
|
: {}),
|
|
311
|
+
...(originatingConversationId
|
|
312
|
+
? { originatingConversationId }
|
|
313
|
+
: {}),
|
|
292
314
|
throwOnError: true,
|
|
293
315
|
},
|
|
294
316
|
});
|
package/src/cli/program.ts
CHANGED
|
@@ -34,6 +34,7 @@ import { registerInferenceCommand } from "./commands/inference.js";
|
|
|
34
34
|
import { registerKeysCommand } from "./commands/keys.js";
|
|
35
35
|
import { registerMcpCommand } from "./commands/mcp.js";
|
|
36
36
|
import { registerMemoryV2Command } from "./commands/memory-v2.js";
|
|
37
|
+
import { registerMemoryV3Command } from "./commands/memory-v3.js";
|
|
37
38
|
import { registerNotificationsCommand } from "./commands/notifications.js";
|
|
38
39
|
import { registerOAuthCommand } from "./commands/oauth/index.js";
|
|
39
40
|
import { registerPendingCommand } from "./commands/pending.js";
|
|
@@ -129,6 +130,7 @@ Examples:
|
|
|
129
130
|
registerKeysCommand(program);
|
|
130
131
|
registerMcpCommand(program);
|
|
131
132
|
registerMemoryV2Command(program);
|
|
133
|
+
registerMemoryV3Command(program);
|
|
132
134
|
registerNotificationsCommand(program);
|
|
133
135
|
registerOAuthCommand(program);
|
|
134
136
|
registerPendingCommand(program);
|
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* 1. Explicit value provided in `opts.explicit`
|
|
4
4
|
* 2. `__SKILL_CONTEXT_JSON` env var (set by skill sandbox runner)
|
|
5
5
|
* 3. `__CONVERSATION_ID` env var (set by bash tool subprocess)
|
|
6
|
-
* 4.
|
|
6
|
+
* 4. `undefined`
|
|
7
7
|
*/
|
|
8
|
-
export function
|
|
9
|
-
explicit?: string
|
|
10
|
-
|
|
11
|
-
}): string {
|
|
8
|
+
export function tryResolveConversationId(
|
|
9
|
+
opts: { explicit?: string } = {},
|
|
10
|
+
): string | undefined {
|
|
12
11
|
if (opts.explicit) return opts.explicit;
|
|
13
12
|
|
|
14
13
|
const contextJson = process.env.__SKILL_CONTEXT_JSON;
|
|
@@ -26,5 +25,18 @@ export function resolveConversationId(opts: {
|
|
|
26
25
|
const envConvId = process.env.__CONVERSATION_ID;
|
|
27
26
|
if (envConvId && typeof envConvId === "string") return envConvId;
|
|
28
27
|
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Same precedence as `tryResolveConversationId` but throws with the
|
|
33
|
+
* provided `failureHelp` when no source produces a value.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveConversationId(opts: {
|
|
36
|
+
explicit?: string;
|
|
37
|
+
failureHelp: string;
|
|
38
|
+
}): string {
|
|
39
|
+
const resolved = tryResolveConversationId({ explicit: opts.explicit });
|
|
40
|
+
if (resolved) return resolved;
|
|
29
41
|
throw new Error(opts.failureHelp);
|
|
30
42
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* (in priority order):
|
|
8
8
|
* 1. Override values from the gateway IPC socket
|
|
9
9
|
* 2. defaults registry `defaultEnabled` (for declared keys)
|
|
10
|
-
* 3. `
|
|
10
|
+
* 3. `false` (for undeclared keys)
|
|
11
11
|
*
|
|
12
12
|
* Key format:
|
|
13
13
|
* Canonical: simple kebab-case string (e.g., "browser", "ces-tools")
|
|
@@ -172,8 +172,8 @@ const DEFAULT_INIT_RETRY_BACKOFFS_MS: readonly number[] = [
|
|
|
172
172
|
* Retries the gateway IPC fetch on empty/failed results — the gateway
|
|
173
173
|
* may not have bound its IPC socket yet when the daemon races ahead at
|
|
174
174
|
* startup. After exhausting retries, the cache is left unset so
|
|
175
|
-
* subsequent sync calls return an empty override map (registry defaults
|
|
176
|
-
*
|
|
175
|
+
* subsequent sync calls return an empty override map (registry defaults for
|
|
176
|
+
* declared flags, fail-closed for undeclared flags).
|
|
177
177
|
*
|
|
178
178
|
* Pass `retryBackoffsMs: []` to disable retries (used by unit tests that
|
|
179
179
|
* intentionally simulate an unreachable gateway and want immediate
|
|
@@ -229,12 +229,11 @@ export async function initFeatureFlagOverrides(options?: {
|
|
|
229
229
|
|
|
230
230
|
// Exhausted retries — leave cache unset so loadOverrides() returns an
|
|
231
231
|
// empty map on subsequent sync reads. Flag checks fall through to the
|
|
232
|
-
// registry default (`defaultEnabled`)
|
|
233
|
-
// newer assistant-scope flags.
|
|
232
|
+
// registry default (`defaultEnabled`) or the fail-closed undeclared default.
|
|
234
233
|
if (backoffs.length > 0) {
|
|
235
234
|
log.warn(
|
|
236
235
|
{ attempts: backoffs.length + 1 },
|
|
237
|
-
"Feature flag overrides empty after all retries; falling back to registry defaults",
|
|
236
|
+
"Feature flag overrides empty after all retries; falling back to registry defaults and fail-closed undeclared flags",
|
|
238
237
|
);
|
|
239
238
|
}
|
|
240
239
|
}
|
|
@@ -260,6 +259,19 @@ export function clearFeatureFlagOverridesCache(): void {
|
|
|
260
259
|
cachedOverridesFromGateway = false;
|
|
261
260
|
}
|
|
262
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Re-fetch feature flag overrides from the gateway.
|
|
264
|
+
*
|
|
265
|
+
* Clears the cached overrides and re-runs the gateway IPC fetch without
|
|
266
|
+
* retries (the gateway is known to be up because it just pushed an event).
|
|
267
|
+
* Called by the gateway flag listener when a `feature_flags_changed` event
|
|
268
|
+
* arrives.
|
|
269
|
+
*/
|
|
270
|
+
export async function refreshOverridesFromGateway(): Promise<void> {
|
|
271
|
+
clearFeatureFlagOverridesCache();
|
|
272
|
+
await initFeatureFlagOverrides({ retryBackoffsMs: [] });
|
|
273
|
+
}
|
|
274
|
+
|
|
263
275
|
/**
|
|
264
276
|
* Directly inject override values into the module-level cache.
|
|
265
277
|
*
|
|
@@ -287,7 +299,7 @@ export function _setOverridesForTesting(
|
|
|
287
299
|
* values, which the gateway merges server-side: persisted > remote >
|
|
288
300
|
* registry)
|
|
289
301
|
* 2. Registry `defaultEnabled` (for declared assistant-scope keys)
|
|
290
|
-
* 3. `
|
|
302
|
+
* 3. `false` (for undeclared keys with no override)
|
|
291
303
|
*/
|
|
292
304
|
export function isAssistantFeatureFlagEnabled(
|
|
293
305
|
key: string,
|
|
@@ -304,6 +316,6 @@ export function isAssistantFeatureFlagEnabled(
|
|
|
304
316
|
// 2. For declared keys, use the registry default.
|
|
305
317
|
if (declared) return declared.defaultEnabled;
|
|
306
318
|
|
|
307
|
-
// 3. Undeclared keys with no override
|
|
308
|
-
return
|
|
319
|
+
// 3. Undeclared keys with no override fail closed.
|
|
320
|
+
return false;
|
|
309
321
|
}
|
|
@@ -127,10 +127,10 @@ App building is design-heavy judgment work — color palettes, layout decisions,
|
|
|
127
127
|
assistant inference session list
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
If no session is active, check the current
|
|
130
|
+
If no session is active, check the current active profile:
|
|
131
131
|
|
|
132
132
|
```
|
|
133
|
-
assistant config get llm.
|
|
133
|
+
assistant config get llm.activeProfile
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
If the profile is already `quality-optimized`, skip the rest of this step and proceed to Step 1.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: document-editor
|
|
3
|
+
description: Rich text document editor with collaborative editing tools — create, read, update, and annotate documents
|
|
4
|
+
compatibility: "Designed for Vellum personal assistants"
|
|
5
|
+
metadata:
|
|
6
|
+
emoji: "📄"
|
|
7
|
+
vellum:
|
|
8
|
+
display-name: "Document Editor"
|
|
9
|
+
activation-hints:
|
|
10
|
+
- "User asks to write, draft, or collaborate on long-form content — use the document editor for a better editing experience"
|
|
11
|
+
- "When content will be iterated on, reviewed, or exported, prefer the document editor over inline markdown"
|
|
12
|
+
- "When a file attachment contains a draft or document the user wants to iterate on, open it in the editor"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Create and edit long-form documents using the built-in rich text editor. Documents open in workspace mode with chat docked to the side.
|
|
16
|
+
|
|
17
|
+
## Tools
|
|
18
|
+
|
|
19
|
+
- **document_open** - Opens an existing document in the editor panel by `surface_id`. Use this when a document exists but isn't visible in the editor — for example after the user switches devices, refreshes the page, or when the editor panel was closed. Fetches the document from storage and sends it to the client.
|
|
20
|
+
- **document_create** - Opens a new document editor with an optional title and initial Markdown content. Returns a `surface_id` for subsequent updates.
|
|
21
|
+
- **document_update** - Updates content in an open document editor by `surface_id`. Supports `replace` (overwrite) and `append` (add to end) modes.
|
|
22
|
+
- **document_read** - Reads the current content of a document by `surface_id` when it belongs to the current conversation, or when the current actor is the guardian/local user. Use to verify content before editing.
|
|
23
|
+
- **document_list** - Lists documents. Without `query`, lists the current conversation's documents. With `query`, searches by title; guardian/local users can search across conversations, while other actors are scoped to the current conversation.
|
|
24
|
+
- **document_find** - Searches a document for text or regex patterns. Returns matching lines with line numbers, match positions, and matched text.
|
|
25
|
+
- **document_replace_text** - Targeted find-and-replace within a document. Supports literal and regex patterns (with backreferences). Optionally limit the number of replacements.
|
|
26
|
+
- **document_delete** - Deletes a document by `surface_id`. Use to clean up unwanted documents.
|
|
27
|
+
|
|
28
|
+
## Retrieving existing documents
|
|
29
|
+
|
|
30
|
+
When the user asks to see, open, or pull up a document:
|
|
31
|
+
|
|
32
|
+
1. Check the `<active_documents>` block in your context — it lists all documents in this conversation with their `surface_id` and title.
|
|
33
|
+
2. If the document is NOT in `<active_documents>`, call `document_list` with a `query` matching the document title. For guardian/local users, this searches across previous conversations and sessions.
|
|
34
|
+
3. Once you have the `surface_id`, call `document_open` to open the editor panel. This both surfaces the editor on the client and returns the document content. If the user only needs the text (not the editor), use `document_read` instead.
|
|
35
|
+
|
|
36
|
+
**Never** search the filesystem, conversation history, or archives to find a document. Always use `document_list` with a `query`.
|
|
37
|
+
|
|
38
|
+
**If the user says they can't see a document you know exists** (e.g. after switching from macOS to web, or after a page refresh), call `document_open` with the `surface_id` to re-surface the editor panel on their current client.
|
|
39
|
+
|
|
40
|
+
## Creating a new document
|
|
41
|
+
|
|
42
|
+
1. **Create the document**: Call `document_create` with a title (inferred from the request). Call the tool immediately, not after conversational preamble.
|
|
43
|
+
2. **Write content in Markdown**: Use proper structure (`#` for titles, `##` for sections), **bold**, _italic_, code blocks, tables, lists, blockquotes as appropriate.
|
|
44
|
+
3. **CRITICAL - Stream content in chunks**: Call `document_update` MULTIPLE times, not just once. Break content into logical chunks (paragraphs, sections, or every 200-300 words). Call `document_update` with `mode: "append"` for EACH chunk separately. The user experiences real-time content appearing as you write.
|
|
45
|
+
|
|
46
|
+
## Editing an existing document
|
|
47
|
+
|
|
48
|
+
When the user requests changes to a document:
|
|
49
|
+
|
|
50
|
+
1. Find the `surface_id` from the `<active_documents>` context block.
|
|
51
|
+
2. Use `document_update` with the existing `surface_id` — do NOT call `document_create` again.
|
|
52
|
+
3. **Choose the right editing tool:**
|
|
53
|
+
- `document_update` with `mode: "append"` — adding new content to the end.
|
|
54
|
+
- `document_update` with `mode: "replace"` — ONLY for full rewrites where the majority of the document is changing.
|
|
55
|
+
- `document_find` + `document_replace_text` — **for everything else**. Fixing typos, renaming terms, swapping sections, reordering content, adjusting formatting, or any edit that touches only part of the document. This is the default choice for edits. It avoids rewriting the entire document and eliminates the risk of accidentally dropping content.
|
|
56
|
+
4. **Do NOT use `document_update` with `mode: "replace"` for targeted edits.** Rewriting the entire document to change a few words or rearrange sections is wasteful and error-prone.
|
|
57
|
+
|
|
58
|
+
## Find & Replace
|
|
59
|
+
|
|
60
|
+
Use `document_find` and `document_replace_text` for surgical edits that target specific text patterns without rewriting the entire document.
|
|
61
|
+
|
|
62
|
+
### document_find
|
|
63
|
+
|
|
64
|
+
Search a document for literal text or regex patterns. Parameters:
|
|
65
|
+
|
|
66
|
+
- `surface_id` (required) — the document to search
|
|
67
|
+
- `query` (required) — the search string or regex pattern
|
|
68
|
+
- `regex` (optional, default `false`) — treat `query` as a regular expression
|
|
69
|
+
- `case_sensitive` (optional, default `false`) — match case exactly
|
|
70
|
+
|
|
71
|
+
Returns a list of matches with line numbers, line content, match positions, and matched text. Use this to preview what will be affected before making replacements.
|
|
72
|
+
|
|
73
|
+
### document_replace_text
|
|
74
|
+
|
|
75
|
+
Targeted find-and-replace within a document. Parameters:
|
|
76
|
+
|
|
77
|
+
- `surface_id` (required) — the document to modify
|
|
78
|
+
- `find` (required) — the search string or regex pattern
|
|
79
|
+
- `replace` (required) — the replacement string (supports `$1`, `$2` backreferences when `regex` is `true`)
|
|
80
|
+
- `regex` (optional, default `false`) — treat `find` as a regular expression
|
|
81
|
+
- `case_sensitive` (optional, default `false`) — match case exactly
|
|
82
|
+
- `max_replacements` (optional) — limit the number of replacements made
|
|
83
|
+
|
|
84
|
+
Returns the number of replacements made and whether the content changed.
|
|
85
|
+
|
|
86
|
+
### Workflow
|
|
87
|
+
|
|
88
|
+
1. Call `document_find` to preview matches and confirm the pattern is correct.
|
|
89
|
+
2. Call `document_replace_text` to apply the changes.
|
|
90
|
+
|
|
91
|
+
**Examples:**
|
|
92
|
+
|
|
93
|
+
- **Fix a recurring typo**: Find `"recieve"`, replace with `"receive"`.
|
|
94
|
+
- **Rename a term throughout**: Find `"widget"` (case-insensitive), replace with `"component"`.
|
|
95
|
+
- **Reformat dates with regex**: Find `(\d{2})/(\d{2})/(\d{4})` with `regex: true`, replace with `$3-$1-$2` to convert `MM/DD/YYYY` to `YYYY-MM-DD`.
|
|
96
|
+
- **Swap or reorder sections**: Use `document_read` to get the content, identify the sections to swap, then call `document_replace_text` to replace the first section with the second and vice versa. For complex rearrangements, use multiple `document_replace_text` calls with `max_replacements: 1`.
|
|
97
|
+
|
|
98
|
+
## Comments
|
|
99
|
+
|
|
100
|
+
Users can leave inline comments on documents. Open comments are surfaced in a `<document_comments>` context block so you can see pending feedback.
|
|
101
|
+
|
|
102
|
+
- **comment_list** — Lists open comments on a document by `surface_id`. Use this to check for feedback before or after editing, especially when the user asks you to address comments.
|
|
103
|
+
- **comment_resolve** — Marks a comment as resolved by `comment_id`. Use this after you have addressed the feedback in the document content. Always edit the document first, then resolve the comment.
|
|
104
|
+
- **comment_reply** — Posts a reply to an existing comment by `comment_id`. Use this to ask clarifying questions or explain why you made (or declined) a change before resolving.
|
|
105
|
+
|
|
106
|
+
### Addressing comments workflow
|
|
107
|
+
|
|
108
|
+
1. Read the `<document_comments>` block or call `comment_list` to see open comments.
|
|
109
|
+
2. For each comment, edit the document to address the feedback.
|
|
110
|
+
3. Call `comment_resolve` on comments you have addressed.
|
|
111
|
+
4. If a comment is ambiguous, call `comment_reply` to ask for clarification instead of guessing.
|
|
112
|
+
|
|
113
|
+
## Anti-Patterns
|
|
114
|
+
|
|
115
|
+
- **Don't use `app_create` for blog posts, articles, or written content.** Use `document_create` — apps are for interactive content with state/data.
|
|
116
|
+
- **Don't output the full content in chat.** The content goes in the document editor, not in the chat response. Acknowledge what you're doing and stream to the editor.
|
|
117
|
+
- **Don't wait to generate everything before sending.** Stream content in chunks via `document_update` with `mode: "append"` so users see progress in real time.
|
|
118
|
+
|
|
119
|
+
## Usage Notes
|
|
120
|
+
|
|
121
|
+
- The `mode` parameter on `document_update` defaults to `append`.
|
|
122
|
+
- Documents are automatically saved and accessible via the Generated panel.
|
|
123
|
+
- Users can manually edit documents at any time.
|
|
124
|
+
- Write in clear, engaging prose. Use active voice, vary sentence structure, and break content into logical sections with descriptive headings.
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"tools": [
|
|
4
|
+
{
|
|
5
|
+
"name": "document_open",
|
|
6
|
+
"description": "Open an existing document in the editor panel. Use this when the user asks to see or pull up a document that exists but isn't currently visible in the editor — for example after switching devices, refreshing, or when the editor panel was closed.",
|
|
7
|
+
"category": "document-editor",
|
|
8
|
+
"risk": "low",
|
|
9
|
+
"input_schema": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"properties": {
|
|
12
|
+
"surface_id": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "The ID of the document to open"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"required": ["surface_id"]
|
|
18
|
+
},
|
|
19
|
+
"executor": "tools/document-open.ts",
|
|
20
|
+
"execution_target": "host"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "document_create",
|
|
24
|
+
"description": "Create a new long-form document with a rich text editor. Use this when the user asks to write a blog post, article, or any long-form content. The editor opens in workspace mode with chat docked to the side.",
|
|
25
|
+
"category": "document-editor",
|
|
26
|
+
"risk": "low",
|
|
27
|
+
"input_schema": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"title": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Initial title for the document (optional, can be updated later)"
|
|
33
|
+
},
|
|
34
|
+
"initial_content": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Initial Markdown content to populate the editor (optional)"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"executor": "tools/document-create.ts",
|
|
41
|
+
"execution_target": "host"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "document_update",
|
|
45
|
+
"description": "Update content in an open document editor. Use this to stream generated content or apply edits.",
|
|
46
|
+
"category": "document-editor",
|
|
47
|
+
"risk": "low",
|
|
48
|
+
"input_schema": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"surface_id": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "The ID of the document surface to update"
|
|
54
|
+
},
|
|
55
|
+
"content": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "Markdown content to set or append"
|
|
58
|
+
},
|
|
59
|
+
"mode": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"enum": ["replace", "append"],
|
|
62
|
+
"description": "Whether to replace all content or append to the end. Defaults to append."
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"required": ["surface_id", "content"]
|
|
66
|
+
},
|
|
67
|
+
"executor": "tools/document-update.ts",
|
|
68
|
+
"execution_target": "host"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "document_read",
|
|
72
|
+
"description": "Read the current content of a document by its surface_id when it belongs to the current conversation, or when the current actor is the guardian/local user. Use this to verify document state before making edits.",
|
|
73
|
+
"category": "document-editor",
|
|
74
|
+
"risk": "low",
|
|
75
|
+
"input_schema": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"surface_id": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "The ID of the document to read"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"required": ["surface_id"]
|
|
84
|
+
},
|
|
85
|
+
"executor": "tools/document-read.ts",
|
|
86
|
+
"execution_target": "host"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "document_list",
|
|
90
|
+
"description": "List documents. Without a query, lists documents in the current conversation. With a query, searches documents by title; guardian/local users can search across conversations, while other actors are scoped to the current conversation.",
|
|
91
|
+
"category": "document-editor",
|
|
92
|
+
"risk": "low",
|
|
93
|
+
"input_schema": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"properties": {
|
|
96
|
+
"query": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "Search documents by title. Omit to list only the current conversation's documents."
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"executor": "tools/document-list.ts",
|
|
103
|
+
"execution_target": "host"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "document_delete",
|
|
107
|
+
"description": "Delete a document by its surface_id.",
|
|
108
|
+
"category": "document-editor",
|
|
109
|
+
"risk": "low",
|
|
110
|
+
"input_schema": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"surface_id": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "The ID of the document to delete"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"required": ["surface_id"]
|
|
119
|
+
},
|
|
120
|
+
"executor": "tools/document-delete.ts",
|
|
121
|
+
"execution_target": "host"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "document_find",
|
|
125
|
+
"description": "Search for text or a regex pattern within a document. Returns matching lines with line numbers and context — like grep. Use this to locate specific content before making targeted edits with document_replace_text.",
|
|
126
|
+
"category": "document-editor",
|
|
127
|
+
"risk": "low",
|
|
128
|
+
"input_schema": {
|
|
129
|
+
"type": "object",
|
|
130
|
+
"properties": {
|
|
131
|
+
"surface_id": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"description": "The document surface ID"
|
|
134
|
+
},
|
|
135
|
+
"query": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"description": "Text or regex pattern to search for"
|
|
138
|
+
},
|
|
139
|
+
"regex": {
|
|
140
|
+
"type": "boolean",
|
|
141
|
+
"description": "Treat query as a regex pattern. Defaults to false (literal match)."
|
|
142
|
+
},
|
|
143
|
+
"case_sensitive": {
|
|
144
|
+
"type": "boolean",
|
|
145
|
+
"description": "Match case-sensitively. Defaults to false."
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"required": ["surface_id", "query"]
|
|
149
|
+
},
|
|
150
|
+
"executor": "tools/document-find.ts",
|
|
151
|
+
"execution_target": "host"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"name": "document_replace_text",
|
|
155
|
+
"description": "Find and replace text within a document — like sed. Performs targeted replacements without rewriting the entire document. Supports literal text and regex patterns. Use document_find first to preview what will be matched.",
|
|
156
|
+
"category": "document-editor",
|
|
157
|
+
"risk": "low",
|
|
158
|
+
"input_schema": {
|
|
159
|
+
"type": "object",
|
|
160
|
+
"properties": {
|
|
161
|
+
"surface_id": {
|
|
162
|
+
"type": "string",
|
|
163
|
+
"description": "The document surface ID"
|
|
164
|
+
},
|
|
165
|
+
"find": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"description": "Text or regex pattern to find"
|
|
168
|
+
},
|
|
169
|
+
"replace": {
|
|
170
|
+
"type": "string",
|
|
171
|
+
"description": "Replacement text. When using regex, supports backreferences ($1, $2, etc.)."
|
|
172
|
+
},
|
|
173
|
+
"regex": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"description": "Treat find as a regex pattern. Defaults to false (literal match)."
|
|
176
|
+
},
|
|
177
|
+
"case_sensitive": {
|
|
178
|
+
"type": "boolean",
|
|
179
|
+
"description": "Match case-sensitively. Defaults to false."
|
|
180
|
+
},
|
|
181
|
+
"max_replacements": {
|
|
182
|
+
"type": "number",
|
|
183
|
+
"description": "Maximum number of replacements to make. Omit to replace all occurrences."
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"required": ["surface_id", "find", "replace"]
|
|
187
|
+
},
|
|
188
|
+
"executor": "tools/document-replace-text.ts",
|
|
189
|
+
"execution_target": "host"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "comment_list",
|
|
193
|
+
"description": "List open comments on a document. Returns all unresolved comments with their content, anchor text, and thread context so you can address user feedback.",
|
|
194
|
+
"category": "document-editor",
|
|
195
|
+
"risk": "low",
|
|
196
|
+
"input_schema": {
|
|
197
|
+
"type": "object",
|
|
198
|
+
"properties": {
|
|
199
|
+
"surface_id": {
|
|
200
|
+
"type": "string",
|
|
201
|
+
"description": "The document surface ID"
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"required": ["surface_id"]
|
|
205
|
+
},
|
|
206
|
+
"executor": "tools/comment-list.ts",
|
|
207
|
+
"execution_target": "host"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"name": "comment_resolve",
|
|
211
|
+
"description": "Mark a comment as resolved after you have addressed the feedback. Use this after editing the document to satisfy the comment.",
|
|
212
|
+
"category": "document-editor",
|
|
213
|
+
"risk": "low",
|
|
214
|
+
"input_schema": {
|
|
215
|
+
"type": "object",
|
|
216
|
+
"properties": {
|
|
217
|
+
"surface_id": {
|
|
218
|
+
"type": "string",
|
|
219
|
+
"description": "The document surface ID"
|
|
220
|
+
},
|
|
221
|
+
"comment_id": {
|
|
222
|
+
"type": "string",
|
|
223
|
+
"description": "The comment ID to resolve"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"required": ["surface_id", "comment_id"]
|
|
227
|
+
},
|
|
228
|
+
"executor": "tools/comment-resolve.ts",
|
|
229
|
+
"execution_target": "host"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "comment_reply",
|
|
233
|
+
"description": "Reply to a comment thread. Use this to ask clarifying questions or explain your approach before or after making changes.",
|
|
234
|
+
"category": "document-editor",
|
|
235
|
+
"risk": "low",
|
|
236
|
+
"input_schema": {
|
|
237
|
+
"type": "object",
|
|
238
|
+
"properties": {
|
|
239
|
+
"surface_id": {
|
|
240
|
+
"type": "string",
|
|
241
|
+
"description": "The document surface ID"
|
|
242
|
+
},
|
|
243
|
+
"comment_id": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"description": "The parent comment ID to reply to"
|
|
246
|
+
},
|
|
247
|
+
"content": {
|
|
248
|
+
"type": "string",
|
|
249
|
+
"description": "Reply text"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"required": ["surface_id", "comment_id", "content"]
|
|
253
|
+
},
|
|
254
|
+
"executor": "tools/comment-reply.ts",
|
|
255
|
+
"execution_target": "host"
|
|
256
|
+
}
|
|
257
|
+
]
|
|
258
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeCommentList } from "../../../../tools/document/document-comment-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeCommentList(input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeCommentReply } from "../../../../tools/document/document-comment-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeCommentReply(input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeCommentResolve } from "../../../../tools/document/document-comment-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeCommentResolve(input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeDocumentFind } from "../../../../tools/document/document-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeDocumentFind(input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeDocumentOpen } from "../../../../tools/document/document-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeDocumentOpen(input, context);
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { executeDocumentReplaceText } from "../../../../tools/document/document-tool.js";
|
|
2
|
+
import type {
|
|
3
|
+
ToolContext,
|
|
4
|
+
ToolExecutionResult,
|
|
5
|
+
} from "../../../../tools/types.js";
|
|
6
|
+
|
|
7
|
+
export async function run(
|
|
8
|
+
input: Record<string, unknown>,
|
|
9
|
+
context: ToolContext,
|
|
10
|
+
): Promise<ToolExecutionResult> {
|
|
11
|
+
return executeDocumentReplaceText(input, context);
|
|
12
|
+
}
|
|
@@ -37,3 +37,7 @@ You are an image generation assistant. When the user asks you to create or edit
|
|
|
37
37
|
- When editing images, clearly describe what changes you want made to the source image.
|
|
38
38
|
- Use the `variants` parameter (1-4) to generate multiple options and pick the best one.
|
|
39
39
|
- If no API key is configured for the selected model's provider (Gemini or OpenAI), the tool will return an error - ask the user to set one up.
|
|
40
|
+
|
|
41
|
+
## Error handling
|
|
42
|
+
|
|
43
|
+
When image generation fails, report the error to the user as-is. **Do not** attempt to fix the error by changing service configuration (e.g. switching between "managed" and "your-own" mode, or changing the provider/model). Service configuration changes should only be made at the user's explicit request via Settings.
|