@vellumai/assistant 0.12.2 → 0.12.3-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/.env.example +2 -0
- package/AGENTS.md +1 -1
- package/docs/architecture/integrations.md +7 -0
- package/docs/architecture/memory.md +17 -2
- package/docs/credential-execution-service.md +1 -1
- package/docs/desktop-browser-cli.md +7 -3
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +1 -0
- package/node_modules/@vellumai/ces-client/node_modules/@vellumai/service-contracts/src/secret-detection.ts +4 -1
- package/node_modules/@vellumai/environments/src/shell.test.ts +21 -0
- package/node_modules/@vellumai/environments/src/shell.ts +24 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +1 -0
- package/node_modules/@vellumai/gateway-client/node_modules/@vellumai/service-contracts/src/secret-detection.ts +4 -1
- package/node_modules/@vellumai/gateway-client/src/inbound-contract.ts +8 -2
- package/node_modules/@vellumai/service-contracts/src/__tests__/secret-detection.test.ts +1 -0
- package/node_modules/@vellumai/service-contracts/src/secret-detection.ts +4 -1
- package/openapi.yaml +54 -5
- package/package.json +1 -1
- package/scripts/smoke-desktop-browser-cli.ts +1 -0
- package/scripts/sync-llm-catalog.ts +3 -0
- package/scripts/voice-ttft-spike.ts +2 -2
- package/src/__tests__/agent-loop.test.ts +259 -0
- package/src/__tests__/agent-wake-delegation-prompt.test.ts +64 -2
- package/src/__tests__/anthropic-provider.test.ts +55 -0
- package/src/__tests__/approval-interception-trust-gates.test.ts +40 -0
- package/src/__tests__/attachments-store.test.ts +22 -3
- package/src/__tests__/channel-approval.test.ts +9 -14
- package/src/__tests__/channel-reply-delivery.test.ts +56 -0
- package/src/__tests__/chat-credential-redaction.test.ts +23 -0
- package/src/__tests__/computer-use-screenshot-attachments.test.ts +411 -0
- package/src/__tests__/computer-use-screenshot-selection.test.ts +50 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +2 -0
- package/src/__tests__/conversation-agent-loop.test.ts +257 -6
- package/src/__tests__/conversation-attachments.test.ts +106 -0
- package/src/__tests__/conversation-fork-crud.test.ts +191 -0
- package/src/__tests__/conversation-rendered-delegation-state.test.ts +276 -0
- package/src/__tests__/credential-execution-client.test.ts +70 -53
- package/src/__tests__/db-conversation-tool-surface.test.ts +221 -0
- package/src/__tests__/events-tail-route.test.ts +33 -0
- package/src/__tests__/history-repair.test.ts +53 -0
- package/src/__tests__/inference-profile-session-handler.test.ts +26 -0
- package/src/__tests__/list-messages-tool-merge.test.ts +85 -1
- package/src/__tests__/llm-catalog-parity.test.ts +27 -4
- package/src/__tests__/oauth-apps-routes.test.ts +1 -0
- package/src/__tests__/oauth-commands-routes.test.ts +114 -101
- package/src/__tests__/oauth-connect-orchestrator.test.ts +2 -0
- package/src/__tests__/oauth-provider-serializer.test.ts +1 -0
- package/src/__tests__/oauth-providers-routes.test.ts +2 -0
- package/src/__tests__/persist-media-references.test.ts +50 -0
- package/src/__tests__/plugin-import-boundary-guard.test.ts +0 -1
- package/src/__tests__/run-conversation-turn-persistence.test.ts +138 -1
- package/src/__tests__/schedule-routes.test.ts +20 -0
- package/src/__tests__/scheduler-result-notification.test.ts +23 -4
- package/src/__tests__/script-proxy-certs.test.ts +1 -1
- package/src/__tests__/secret-routes-platform-proxy.test.ts +86 -31
- package/src/__tests__/secret-routes-scrub.test.ts +22 -27
- package/src/__tests__/secret-scanner.test.ts +20 -0
- package/src/__tests__/secure-keys-managed-failover.test.ts +8 -0
- package/src/__tests__/secure-keys.test.ts +7 -3
- package/src/__tests__/server-tool-pairing.test.ts +107 -0
- package/src/__tests__/skills.test.ts +5 -4
- package/src/__tests__/subagent-tool-gate-mode.test.ts +226 -0
- package/src/__tests__/terminal-tools.test.ts +8 -0
- package/src/__tests__/tool-result-follow-up.test.ts +99 -0
- package/src/__tests__/tool-result-metadata-plumbing.test.ts +63 -0
- package/src/__tests__/unicode.test.ts +36 -0
- package/src/agent/loop.ts +37 -12
- package/src/agent/tool-result-follow-up.ts +70 -0
- package/src/api/attachment-provenance.test.ts +68 -0
- package/src/api/computer-use-tool.test.ts +55 -0
- package/src/api/computer-use-tool.ts +27 -0
- package/src/api/events/assistant-outbound-attachment.ts +3 -0
- package/src/api/events/desktop-activity-changed.ts +10 -0
- package/src/api/events/question-request.ts +1 -0
- package/src/api/index.ts +11 -0
- package/src/api/responses/conversation-message.ts +3 -0
- package/src/approvals/approval-primitive.ts +5 -2
- package/src/approvals/scoped-approval-grants.ts +6 -2
- package/src/browser/virtual-desktop-target.ts +1 -2
- package/src/cli/commands/__tests__/cli-test-harness.ts +21 -3
- package/src/cli/commands/__tests__/plugins.test.ts +20 -1
- package/src/cli/commands/__tests__/schedules.test.ts +14 -0
- package/src/cli/commands/bash.help.ts +4 -3
- package/src/cli/commands/browser.help.ts +5 -1
- package/src/cli/commands/credentials.help.ts +3 -3
- package/src/cli/commands/oauth/index.help.ts +10 -0
- package/src/cli/commands/oauth/providers.ts +12 -0
- package/src/cli/commands/oauth/request.test.ts +179 -2
- package/src/cli/commands/oauth/request.ts +41 -10
- package/src/cli/commands/plugins.ts +12 -5
- package/src/cli/commands/schedules.ts +2 -0
- package/src/cli/lib/__tests__/inspect-plugin.test.ts +54 -0
- package/src/cli/lib/__tests__/install-from-github.test.ts +41 -0
- package/src/cli/lib/__tests__/local-plugin-upgrade.test.ts +133 -51
- package/src/cli/lib/__tests__/plugin-catalog-cache.test.ts +8 -2
- package/src/cli/lib/bundled-marketplace.json +855 -0
- package/src/cli/lib/bundled-plugin-packages.json +783 -1
- package/src/cli/lib/inspect-plugin.ts +11 -4
- package/src/cli/lib/upgrade-plugin.ts +19 -11
- package/src/cli/output.ts +18 -4
- package/src/config/__tests__/default-provider.test.ts +4 -0
- package/src/config/bundled-skills/schedule/SKILL.md +6 -6
- package/src/config/loader.ts +9 -17
- package/src/config/platform-identity.ts +8 -8
- package/src/config/profile-text-generation.test.ts +51 -0
- package/src/config/profile-text-generation.ts +51 -0
- package/src/config/schemas/__tests__/memory-v3.test.ts +12 -0
- package/src/config/schemas/llm.ts +7 -2
- package/src/config/schemas/mcp.ts +5 -1
- package/src/config/schemas/memory-v3.ts +12 -0
- package/src/credential-execution/ces-runtime.ts +2 -2
- package/src/credential-execution/executable-discovery.ts +36 -134
- package/src/credential-execution/process-manager.test.ts +20 -24
- package/src/credential-execution/process-manager.ts +24 -19
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +43 -0
- package/src/daemon/__tests__/turn-tail-deleted-conversation.test.ts +36 -0
- package/src/daemon/assistant-attachments.ts +20 -12
- package/src/daemon/chat-credential-redaction.ts +16 -1
- package/src/daemon/conversation-agent-loop-handlers.ts +74 -3
- package/src/daemon/conversation-agent-loop.ts +12 -0
- package/src/daemon/conversation-attachments.ts +93 -12
- package/src/daemon/conversation-tool-setup.ts +71 -3
- package/src/daemon/conversation-turn-finalize.ts +26 -13
- package/src/daemon/conversation.ts +72 -17
- package/src/daemon/daemon-control.ts +3 -7
- package/src/daemon/lifecycle.ts +4 -4
- package/src/daemon/mcp-reload-service.ts +1 -1
- package/src/daemon/message-types/shared.ts +1 -0
- package/src/daemon/orphan-reaper.ts +4 -3
- package/src/daemon/persist-media-references.ts +20 -3
- package/src/daemon/tool-setup-types.ts +6 -0
- package/src/daemon/wake-conversation-ops.ts +50 -15
- package/src/desktop/desktop-automation-lease.test.ts +230 -0
- package/src/desktop/desktop-automation-lease.ts +90 -6
- package/src/desktop/desktop-help.ts +15 -0
- package/src/desktop/desktop-stream-bridge.test.ts +65 -10
- package/src/desktop/desktop-stream-bridge.ts +3 -3
- package/src/desktop/desktop-wallpaper-renderer.ts +132 -0
- package/src/desktop/desktop-wallpaper-worker.ts +17 -0
- package/src/desktop/desktop-wallpaper.test.ts +48 -7
- package/src/desktop/desktop-wallpaper.ts +34 -102
- package/src/desktop/virtual-desktop-feature.ts +1 -1
- package/src/mcp/__tests__/manager-tool-caps.test.ts +111 -0
- package/src/mcp/__tests__/startup.test.ts +30 -7
- package/src/mcp/__tests__/tool-caps.test.ts +107 -0
- package/src/mcp/manager.ts +168 -101
- package/src/mcp/startup.ts +33 -13
- package/src/mcp/tool-caps.ts +176 -0
- package/src/messaging/provider-message-metadata.ts +3 -3
- package/src/notifications/__tests__/copy-composer.test.ts +70 -0
- package/src/notifications/copy-composer.ts +11 -3
- package/src/notifications/schedule-result-producer.ts +4 -6
- package/src/oauth/AGENTS.md +2 -0
- package/src/oauth/__tests__/identity-verifier.test.ts +36 -1
- package/src/oauth/identity-verifier.ts +24 -0
- package/src/oauth/oauth-store.ts +11 -1
- package/src/oauth/provider-serializer.ts +1 -0
- package/src/oauth/seed-providers.ts +12 -0
- package/src/permissions/confirmation-guardian-request.test.ts +16 -0
- package/src/permissions/confirmation-guardian-request.ts +2 -3
- package/src/permissions/question-prompter.test.ts +31 -0
- package/src/permissions/question-prompter.ts +2 -0
- package/src/persistence/attachments-store.ts +84 -44
- package/src/persistence/conversation-crud.ts +111 -20
- package/src/persistence/conversation-plugin-facade.ts +30 -0
- package/src/persistence/conversation-tool-surface.ts +135 -0
- package/src/persistence/conversation-types.test.ts +32 -0
- package/src/persistence/conversation-types.ts +26 -4
- package/src/persistence/migrations/378-create-conversation-tool-surfaces.test.ts +78 -0
- package/src/persistence/migrations/378-create-conversation-tool-surfaces.ts +29 -0
- package/src/persistence/migrations/379-oauth-providers-response-ok-field.test.ts +92 -0
- package/src/persistence/migrations/379-oauth-providers-response-ok-field.ts +32 -0
- package/src/persistence/migrations/380-conversation-tool-surfaces-delegate-independent-tasks.test.ts +90 -0
- package/src/persistence/migrations/380-conversation-tool-surfaces-delegate-independent-tasks.ts +34 -0
- package/src/persistence/schema/conversation-tool-surfaces.ts +32 -0
- package/src/persistence/schema/index.ts +1 -0
- package/src/persistence/schema/oauth.ts +1 -0
- package/src/persistence/steps.ts +24 -3
- package/src/plugin-api/conversation-turn.ts +31 -7
- package/src/plugin-api/index.ts +11 -1
- package/src/plugin-api/plugin-channel-turn-trust.test.ts +133 -0
- package/src/plugin-api/plugin-channel-turn-trust.ts +71 -0
- package/src/plugins/defaults/memory/AGENTS.md +39 -5
- package/src/plugins/defaults/memory/__tests__/buffer-file.test.ts +365 -0
- package/src/plugins/defaults/memory/__tests__/buffer-format.test.ts +43 -0
- package/src/plugins/defaults/memory/__tests__/conversation-memory-purge.test.ts +1 -0
- package/src/plugins/defaults/memory/__tests__/db-memory-attach.test.ts +2 -0
- package/src/plugins/defaults/memory/__tests__/fixtures/buffer-appender.ts +17 -0
- package/src/plugins/defaults/memory/__tests__/memory-retrospective-job.test.ts +74 -0
- package/src/plugins/defaults/memory/__tests__/memory-run-evidence.test.ts +161 -0
- package/src/plugins/defaults/memory/__tests__/relocated-memory-test-rows.ts +10 -0
- package/src/plugins/defaults/memory/buffer-file.ts +354 -0
- package/src/plugins/defaults/memory/buffer-format.ts +40 -0
- package/src/plugins/defaults/memory/context-search/agent-runner.ts +1 -2
- package/src/plugins/defaults/memory/context-search/format.ts +2 -1
- package/src/plugins/defaults/memory/context-search/sources/memory-v2.ts +2 -1
- package/src/plugins/defaults/memory/context-search/sources/workspace.ts +2 -1
- package/src/plugins/defaults/memory/conversation-memory-purge.ts +4 -0
- package/src/plugins/defaults/memory/graph/capability-seed.ts +1 -2
- package/src/plugins/defaults/memory/graph/tool-handlers.ts +1 -42
- package/src/plugins/defaults/memory/host-utils.ts +0 -10
- package/src/plugins/defaults/memory/injectors.ts +4 -3
- package/src/plugins/defaults/memory/memory-retrospective-job.ts +72 -183
- package/src/plugins/defaults/memory/memory-run-evidence.ts +213 -0
- package/src/plugins/defaults/memory/src/memory-item-routes.test.ts +1 -1
- package/src/plugins/defaults/memory/substrate/__tests__/consolidation-job.test.ts +407 -99
- package/src/plugins/defaults/memory/substrate/__tests__/consolidation-prompt-flag-gating-guard.test.ts +10 -0
- package/src/plugins/defaults/memory/substrate/__tests__/prompts-consolidation.test.ts +107 -7
- package/src/plugins/defaults/memory/substrate/consolidation-job.ts +307 -86
- package/src/plugins/defaults/memory/substrate/consolidation-tool-surface.ts +34 -0
- package/src/plugins/defaults/memory/substrate/page-index.ts +2 -1
- package/src/plugins/defaults/memory/substrate/prompts/consolidation.ts +89 -49
- package/src/plugins/defaults/memory/substrate/sweep-job.ts +1 -1
- package/src/plugins/defaults/memory/tools.ts +1 -1
- package/src/plugins/defaults/memory/v1/graph/consolidation.ts +2 -2
- package/src/plugins/defaults/memory/v1/graph/extraction.ts +2 -1
- package/src/plugins/defaults/memory/v1/graph/retriever.ts +1 -1
- package/src/plugins/defaults/memory/v2/__tests__/migration.test.ts +5 -0
- package/src/plugins/defaults/memory/v2/__tests__/reranker.test.ts +5 -2
- package/src/plugins/defaults/memory/v2/reranker.ts +2 -1
- package/src/plugins/defaults/memory/v3/__tests__/injection.test.ts +81 -1
- package/src/plugins/defaults/memory/v3/__tests__/orchestrate.test.ts +87 -0
- package/src/plugins/defaults/memory/v3/__tests__/plugin-schema.test.ts +12 -0
- package/src/plugins/defaults/memory/v3/__tests__/pool-log-store.test.ts +183 -4
- package/src/plugins/defaults/memory/v3/__tests__/shadow-plugin.test.ts +103 -2
- package/src/plugins/defaults/memory/v3/card.ts +2 -1
- package/src/plugins/defaults/memory/v3/injector.ts +212 -178
- package/src/plugins/defaults/memory/v3/orchestrate.ts +112 -25
- package/src/plugins/defaults/memory/v3/plugin-schema.ts +54 -4
- package/src/plugins/defaults/memory/v3/pool-log-store.ts +253 -1
- package/src/plugins/defaults/memory/v3/pool-select.test.ts +35 -2
- package/src/plugins/defaults/memory/v3/pool-select.ts +31 -19
- package/src/plugins/defaults/memory/v3/sections.ts +2 -1
- package/src/plugins/defaults/memory/v3/shadow-plugin.ts +41 -14
- package/src/plugins/defaults/tool-error/hooks/post-tool-use.ts +4 -1
- package/src/plugins/defaults/tool-result-truncate/terminal.ts +1 -46
- package/src/prompts/__tests__/parallel-tasks-section.test.ts +25 -0
- package/src/prompts/delegation-gate.ts +57 -0
- package/src/prompts/system-prompt.ts +14 -32
- package/src/providers/inference/adapter-factory.ts +6 -0
- package/src/providers/jev/client.test.ts +260 -0
- package/src/providers/jev/client.ts +518 -0
- package/src/providers/model-catalog.ts +58 -3
- package/src/providers/server-tool-pairing.ts +16 -7
- package/src/runtime/AGENTS.md +2 -2
- package/src/runtime/__tests__/agent-wake.test.ts +94 -1
- package/src/runtime/agent-wake.ts +31 -4
- package/src/runtime/guardian-action-service.ts +2 -17
- package/src/runtime/guardian-reply-router.ts +1 -8
- package/src/runtime/http-server.ts +2 -2
- package/src/runtime/migrations/__tests__/vbundle-import-policy.test.ts +89 -0
- package/src/runtime/migrations/vbundle-import-policy.ts +33 -11
- package/src/runtime/routes/__tests__/inference-profiles-routes.test.ts +24 -2
- package/src/runtime/routes/channel-route-shared.ts +1 -9
- package/src/runtime/routes/conversation-routes.ts +29 -4
- package/src/runtime/routes/desktop-setup-routes.test.ts +2 -2
- package/src/runtime/routes/desktop-setup-routes.ts +8 -5
- package/src/runtime/routes/guardian-approval-interception.ts +24 -0
- package/src/runtime/routes/inbound-message-handler.ts +2 -3
- package/src/runtime/routes/inbound-stages/background-dispatch.test.ts +1 -1
- package/src/runtime/routes/inbound-stages/background-dispatch.ts +7 -4
- package/src/runtime/routes/inference-profile-session-handler.ts +11 -1
- package/src/runtime/routes/inference-profiles-routes.ts +9 -0
- package/src/runtime/routes/oauth-commands-routes.ts +57 -54
- package/src/runtime/routes/oauth-providers.ts +4 -0
- package/src/runtime/routes/oauth-request-hints.test.ts +246 -0
- package/src/runtime/routes/oauth-request-hints.ts +149 -0
- package/src/runtime/routes/schedule-routes.ts +2 -0
- package/src/runtime/routes/secret-routes.ts +99 -119
- package/src/schedule/__tests__/worker-mcp-bootstrap.test.ts +107 -0
- package/src/schedule/__tests__/worker-mcp-readiness.test.ts +173 -0
- package/src/schedule/__tests__/worker-mcp-tools.test.ts +13 -47
- package/src/schedule/run-script.ts +2 -2
- package/src/schedule/scheduler.ts +47 -11
- package/src/schedule/tool-surface-readiness.ts +65 -0
- package/src/schedule/worker-mcp.ts +85 -0
- package/src/schedule/worker.ts +9 -31
- package/src/security/secure-keys.ts +60 -48
- package/src/tools/ask-question/ask-question-tool.test.ts +167 -5
- package/src/tools/ask-question/ask-question-tool.ts +119 -23
- package/src/tools/browser/browser-execution.ts +7 -1
- package/src/tools/host-terminal/host-shell.ts +12 -6
- package/src/tools/shared/filesystem/file-ops-service.ts +1 -31
- package/src/tools/shared/shell-output.test.ts +10 -0
- package/src/tools/shared/shell-output.ts +14 -2
- package/src/tools/skills/sandbox-runner.ts +13 -2
- package/src/tools/skills/scaffold-managed.ts +2 -1
- package/src/tools/terminal/__tests__/safe-env.test.ts +33 -4
- package/src/tools/terminal/__tests__/sanitized-bash.test.ts +0 -14
- package/src/tools/terminal/safe-env.ts +35 -24
- package/src/tools/terminal/sanitized-bash.ts +15 -2
- package/src/tools/terminal/shell-launch.test.ts +162 -0
- package/src/tools/terminal/shell.test.ts +29 -0
- package/src/tools/terminal/shell.ts +13 -7
- package/src/util/browser-human-verification.ts +14 -0
- package/src/util/host-process.test.ts +17 -1
- package/src/util/host-process.ts +24 -0
- package/src/util/unicode.ts +29 -0
package/.env.example
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
ANTHROPIC_API_KEY=sk-ant-...
|
|
3
3
|
OPENAI_API_KEY=sk-...
|
|
4
4
|
GEMINI_API_KEY=...
|
|
5
|
+
# Optional. TypeSafe / Jev System One decision model.
|
|
6
|
+
TYPESAFE_API_KEY=...
|
|
5
7
|
# Optional for authenticated/proxied Ollama deployments
|
|
6
8
|
OLLAMA_API_KEY=
|
|
7
9
|
# Optional override (defaults to http://127.0.0.1:11434/v1)
|
package/AGENTS.md
CHANGED
|
@@ -16,7 +16,7 @@ When you introduce a new env var that the assistant process needs to read at run
|
|
|
16
16
|
|
|
17
17
|
**Default to including it.** If the var doesn't contain secrets (e.g. a URL, a feature flag, a path, a mode string), add it. Only omit it if it carries credential material (tokens, passwords, private keys) — those must stay isolated to CES.
|
|
18
18
|
|
|
19
|
-
`
|
|
19
|
+
`CES_BOOTSTRAP_SOCKET_DIR` is forwarded so children can reach CES over IPC. `CES_SERVICE_TOKEN` and `CES_CREDENTIAL_URL` are also forwarded so children can fail over to CES HTTP until that transport is removed. Credential protection is rules-based access control inside CES, not socket-path secrecy (see root `AGENTS.md`).
|
|
20
20
|
|
|
21
21
|
## Daemon startup philosophy
|
|
22
22
|
|
|
@@ -552,6 +552,13 @@ Message content (stored as JSON `ContentBlock[]` in the DB) is flattened for the
|
|
|
552
552
|
|
|
553
553
|
Attachments are materialized into `conversations/<conversation>/attachments/` as soon as they are linked to a message. During disk-view sync, the JSONL record reuses those filenames directly and only falls back to materializing legacy rows that have not been projected yet. Filename collisions are still resolved by appending a numeric suffix (e.g., `photo-2.png`, `photo-3.png`).
|
|
554
554
|
|
|
555
|
+
Computer-use screenshot media is materialized while its tool-result row is
|
|
556
|
+
finalized, so earlier frames remain represented in tool history, JSONL, and
|
|
557
|
+
compaction inputs. The final screenshot-bearing invocation reuses that same
|
|
558
|
+
attachment ID for an additional reply link. A single attachment can therefore
|
|
559
|
+
appear on both a tool-result row and a reply row without creating a second
|
|
560
|
+
attachment-store object.
|
|
561
|
+
|
|
555
562
|
### Backfill Migration
|
|
556
563
|
|
|
557
564
|
Existing conversations created before the disk view was introduced are backfilled by workspace migration `009-backfill-conversation-disk-view`, which replays all conversations and their messages through the disk-view sync functions.
|
|
@@ -87,8 +87,17 @@ graph LR
|
|
|
87
87
|
nesting existed still parse, since an unindented body line that is not itself
|
|
88
88
|
entry-shaped is read as a continuation.
|
|
89
89
|
- **Consolidation** (`substrate/consolidation-job.ts`) is a background
|
|
90
|
-
agent conversation that files buffer entries into concept pages
|
|
91
|
-
the aggregate views
|
|
90
|
+
agent conversation that files buffer entries into concept pages and
|
|
91
|
+
rewrites the aggregate views. The agent never writes the buffer: the job
|
|
92
|
+
snapshots `buffer.md`, hands the run its pass's entries verbatim in the
|
|
93
|
+
prompt, and after the run removes exactly those entries itself through
|
|
94
|
+
`buffer-file.ts` (the module that also owns the append path, so the two
|
|
95
|
+
writers of the buffer share one protocol). Removal happens only when the
|
|
96
|
+
run's persisted messages hold a page-writing tool call with a non-error
|
|
97
|
+
result, the same evidence bar the retrospective's cursor advance uses; a
|
|
98
|
+
run that wrote nothing, failed, or timed out leaves the buffer intact for
|
|
99
|
+
the next pass. Entries deferred past the per-run cap and entries appended
|
|
100
|
+
while the run was in flight are therefore never lost. Scheduling
|
|
92
101
|
(`maybeEnqueueGraphMaintenanceJobs` in `jobs-worker.ts`):
|
|
93
102
|
- interval-based (`memory.v2.consolidation_interval_hours`, default 8h),
|
|
94
103
|
skipped below `MIN_BUFFER_LINES_FOR_CONSOLIDATION` (10) **unless** the
|
|
@@ -261,6 +270,12 @@ under `memory.v3.*`. The `memory.v2.enabled` flag gates only the v2 injection
|
|
|
261
270
|
engine's turn-time selection; the substrate runs whenever
|
|
262
271
|
`usesConceptPageMemory()` holds.
|
|
263
272
|
|
|
273
|
+
`memory.v3.poolLog.captureInput` (off by default) makes the v3 selector
|
|
274
|
+
persist its exact per-turn input beside the always-written pool audit
|
|
275
|
+
(`memory_v3_pool_inputs`, `memory_v3_pool_texts`), for offline selector
|
|
276
|
+
evaluation and training data; the memory plugin `AGENTS.md` documents the
|
|
277
|
+
tables.
|
|
278
|
+
|
|
264
279
|
`src/plugins/defaults/memory/AGENTS.md` carries the details that matter when
|
|
265
280
|
you touch this: the three substrate keys whose names differ from their v2 twin,
|
|
266
281
|
the three disjoint places the dense/sparse sum-to-1 invariant is checked, and
|
|
@@ -221,7 +221,7 @@ These invariants are enforced by guard tests and code review:
|
|
|
221
221
|
4. **Grants and audit logs are CES-internal**: The assistant cannot read CES grant tables or audit logs directly. CES exposes grant status and audit summaries via RPC responses.
|
|
222
222
|
5. **No generic authenticated HTTP clients in secure commands**: `curl`, `wget`, `httpie`, interpreters, and shell trampolines are structurally denied as secure command entrypoints. This is checked at manifest validation and re-checked at execution time.
|
|
223
223
|
6. **Managed CES container runs as non-root**: The CES Docker image runs as `uid 1001` (user `ces`). The CES data volume is owned by this user.
|
|
224
|
-
7. **
|
|
224
|
+
7. **Multi-connection bootstrap socket**: In managed mode, CES listens on the bootstrap socket as a concurrent multi-connection server and keeps the path bound. The assistant and its child processes each open their own RPC connection. CES is a long-lived sidecar: it stays up across assistant restarts and only exits on SIGTERM/SIGINT.
|
|
225
225
|
|
|
226
226
|
## Guarantees by deployment mode
|
|
227
227
|
|
|
@@ -18,16 +18,20 @@ flowchart LR
|
|
|
18
18
|
|
|
19
19
|
Chrome and its dock launcher share the managed profile and loopback debug port. For Chrome reopened from the dock, the profile singleton lock identifies a candidate PID, validated against the installed executable, profile and loopback debug arguments. Discovery checks `/proc` socket ownership against that browser PID, refuses redirects and validates the returned browser WebSocket endpoint. The connection stays within the container. No CDP endpoint or token is exposed to the renderer.
|
|
20
20
|
|
|
21
|
-
The desktop client bypasses personal-browser discovery, extension reconnect waits and backend fallback. It reuses the existing AX snapshot, DOM element resolution, mouse, keyboard, extraction and credential-fill implementations. Operation-scoped clients borrow the lease's connection; disposing one does not release the lease. `detach`, `close`, cancellation, errors and idle expiry release control. Only `tabs close` closes a Chrome tab.
|
|
21
|
+
The desktop client bypasses personal-browser discovery, extension reconnect waits and backend fallback. It reuses the existing AX snapshot, DOM element resolution, mouse, keyboard, extraction and credential-fill implementations. Operation-scoped clients borrow the lease's connection; disposing one does not release the lease. `detach`, `close`, turn completion, cancellation, errors and idle expiry release control. Turn completion clears the activity indicator immediately and queues browser cleanup before the next automation session; it leaves Chrome and the current page open for the user. Only `tabs close` closes a Chrome tab.
|
|
22
22
|
|
|
23
23
|
`assistant browser --virtual-desktop screenshot --output /tmp/desktop-page.jpg` captures a color page image through CDP `Page.captureScreenshot`. It excludes the browser toolbar and desktop dock. `snapshot` returns semantic page structure. Agents should use these interfaces and let the manager start the desktop, including when older memory notes describe manual Xvnc, `xdotool` or scratch XWD conversion scripts.
|
|
24
24
|
|
|
25
25
|
Tab IDs are ephemeral numeric aliases for this managed browser's CDP target IDs. They are never personal extension tab IDs. Initial attachment selects an existing HTTP(S) page or opens a blank tab. Use `tabs list` and `tabs select --tab-id <id>` to choose explicitly. Navigation, tab selection, document replacement and release clear the desktop snapshot map. Personal-browser snapshots use a separate namespace.
|
|
26
26
|
|
|
27
|
-
CDP mouse events use page viewport CSS coordinates. Before dispatching them, the client animates a purple arrow overlay to the same point. The overlay is excluded from accessibility and hit testing. It appears in the existing desktop stream and is removed on release. It does not move the OS pointer, appear in browser toolbar UI or visualize every programmatic DOM operation. Native dialogs and other applications are outside the browser CLI; users can interact with them directly in the expanded desktop. The picture-in-picture preview is view-only. Direct user interaction does not pause automation.
|
|
27
|
+
CDP mouse events use page viewport CSS coordinates. Before dispatching them, the client animates a purple arrow overlay to the same point. The overlay is excluded from accessibility and hit testing. It appears in the existing desktop stream and is removed on release. It does not move the OS pointer, appear in browser toolbar UI or visualize every programmatic DOM operation. Native dialogs and other applications are outside the browser CLI; users can interact with them directly in the expanded desktop. The picture-in-picture preview is view-only. Direct user interaction does not pause automation. For logins, the assistant uses saved credentials first and securely collects missing credentials with `assistant credentials prompt`, then fills the login form itself. Every CAPTCHA and bot-detection challenge, including sliders and press-and-hold checks, is handed to the user before the assistant attempts it. When human interaction is needed, the assistant calls `ask_question` with `desktopHelp: { message, doneLabel, skipLabel }` in the user's language. The tool releases held browser input and reserves the desktop before publishing a question with `presentation: "virtual_desktop"`. The live viewer mounts only in the attended Electron window, with browser focus as a fallback on older shells and the web, so conversations release it when focus changes. A busy viewer offers Reconnect if the previous connection has not finished closing. The compact card lives in the scrolling message transcript, with expandable instructions and a preview capped at 384 pixels wide. It hosts the shared live viewer, with Step In opening its full desktop modal and Done or Skip resolving the existing question response. The assistant retains an exclusive human-help reservation while waiting. Done resumes the same conversation's automation lease for its fresh snapshot; Skip, closure, timeout and cancellation release it. The browser idle timer does not expire a pending human-help reservation. The live preview connects after Show live preview or Step In, and reuses an already-open picture-in-picture viewer. Other devices receiving the card do not automatically open a stream. When the request resolves, its interactive viewer closes or returns to the read-only PiP session that was open before the request. Skip does not imply the obstacle was resolved. Older clients show the same request as a normal Done/Skip question, with model-localized labels retained in history. Channels without dynamic UI return guidance to continue in the app rather than waiting on an unusable card.
|
|
28
28
|
|
|
29
|
-
The client records key and mouse presses before dispatch. On release it opens a fresh bounded cleanup connection, attaches to the same live targets, releases uncertain held input and removes overlays. A failed cleanup preserves state and the automation slot for retry. Dispatched actions are never automatically retried. Closed targets need no input cleanup. Browser-process loss disposes the client, and later requests discover the replacement process.
|
|
29
|
+
The client records key and mouse presses before dispatch. On release it opens a fresh bounded cleanup connection, attaches to the same live targets, releases uncertain held input and removes overlays. A failed cleanup preserves state and the automation slot for retry. Turn-triggered cancellation retries cleanup automatically until it succeeds or ownership changes. Dispatched actions are never automatically retried. Closed targets need no input cleanup. Browser-process loss disposes the client, and later requests discover the replacement process.
|
|
30
30
|
|
|
31
31
|
`--use-active-tab` and personal browser targeting are rejected with `--virtual-desktop`. Download waiting is unsupported. Browser operations are bounded to two minutes and share the desktop lease's action budget and idle expiry.
|
|
32
32
|
|
|
33
33
|
Validation: focused client tests exercise shared snapshot/click behavior, namespace isolation, stale references, target changes, cancellation and uncertain-input cleanup. Lease tests cover browser ownership, cancellation and cleanup independently of native input. The Linux smoke script exercises real Chrome, the CLI and visible pointer feedback.
|
|
34
|
+
|
|
35
|
+
The desktop header icon pulses in the assistant's avatar accent color while a browser automation lease is active, including between browser commands. It shares the progress indicator's accent and neutral fallback. Reduced-motion clients show a solid accent. Setup status exposes the optional `automationActive` field; `desktop_activity_changed` events refresh it on acquisition and cancellation or release. Installation progress retains its `assistant:self:desktop` sync invalidations. The indicator reads status without starting installation, and reconnects refetch the current lease state.
|
|
36
|
+
|
|
37
|
+
Desktop streaming checks the current in-memory gateway feature flags during connection startup. Once connected, frame and drain callbacks do not check feature flags or load workspace configuration. Turning the flag off prevents new connections; an existing stream continues until it closes or the desktop stops.
|
|
@@ -63,6 +63,7 @@ const FIXTURES: Record<string, string> = {
|
|
|
63
63
|
"Perplexity API Key": `pplx-${filler(40)}`,
|
|
64
64
|
"Tavily API Key": `tvly-${filler(20)}`,
|
|
65
65
|
"Firecrawl API Key": `fc-${filler(20)}`,
|
|
66
|
+
"Resend API Key": `re_${filler(8)}_${filler(24)}`,
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
describe("subpath export", () => {
|
|
@@ -230,6 +230,9 @@ export const PREFIX_PATTERNS: SecretPrefixPattern[] = [
|
|
|
230
230
|
|
|
231
231
|
// -- Firecrawl --
|
|
232
232
|
{ label: "Firecrawl API Key", regex: /fc-[A-Za-z0-9]{20,}/ },
|
|
233
|
+
// Resend documents only the `re_` prefix; the segment shape is the observed
|
|
234
|
+
// key format. Strict on purpose: bare `re_` prefixes ordinary identifiers.
|
|
235
|
+
{ label: "Resend API Key", regex: /re_[A-Za-z0-9]{8}_[A-Za-z0-9]{24,}/ },
|
|
233
236
|
];
|
|
234
237
|
|
|
235
238
|
/**
|
|
@@ -362,7 +365,7 @@ export function isPlaceholderValue(value: string): boolean {
|
|
|
362
365
|
// Strip known prefixes to isolate the variable part
|
|
363
366
|
const variablePart = value
|
|
364
367
|
.replace(
|
|
365
|
-
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx
|
|
368
|
+
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx-|re_|-----BEGIN [A-Z ]*PRIVATE KEY-----)/,
|
|
366
369
|
"",
|
|
367
370
|
)
|
|
368
371
|
.replace(/[^A-Za-z0-9]/g, "");
|
|
@@ -2,6 +2,7 @@ import { describe, expect, test } from "bun:test";
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
buildShellInvocation,
|
|
5
|
+
buildShellSpawnFlags,
|
|
5
6
|
pathListDelimiter,
|
|
6
7
|
prependUniquePathEntries,
|
|
7
8
|
} from "./shell.js";
|
|
@@ -38,6 +39,26 @@ describe("buildShellInvocation", () => {
|
|
|
38
39
|
});
|
|
39
40
|
});
|
|
40
41
|
|
|
42
|
+
describe("buildShellSpawnFlags", () => {
|
|
43
|
+
test("creates a POSIX process group and hides Windows consoles", () => {
|
|
44
|
+
expect(buildShellSpawnFlags("linux")).toEqual({
|
|
45
|
+
detached: true,
|
|
46
|
+
windowsHide: true,
|
|
47
|
+
});
|
|
48
|
+
expect(buildShellSpawnFlags("darwin")).toEqual({
|
|
49
|
+
detached: true,
|
|
50
|
+
windowsHide: true,
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("does not detach Windows children that use piped stdio", () => {
|
|
55
|
+
expect(buildShellSpawnFlags("win32")).toEqual({
|
|
56
|
+
detached: false,
|
|
57
|
+
windowsHide: true,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
41
62
|
describe("path list handling", () => {
|
|
42
63
|
test("uses the platform delimiter", () => {
|
|
43
64
|
expect(pathListDelimiter("win32")).toBe(";");
|
|
@@ -5,6 +5,11 @@ export interface ShellInvocation {
|
|
|
5
5
|
args: string[];
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
export interface ShellSpawnFlags {
|
|
9
|
+
detached: boolean;
|
|
10
|
+
windowsHide: true;
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
const WINDOWS_UTF8_PREAMBLE =
|
|
9
14
|
"try { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 } catch {}; " +
|
|
10
15
|
"$OutputEncoding = [System.Text.Encoding]::UTF8; " +
|
|
@@ -43,6 +48,25 @@ export function buildShellInvocation(
|
|
|
43
48
|
return { command: "bash", args: ["-c", "--", command] };
|
|
44
49
|
}
|
|
45
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Spawn flags for assistant-owned shell children (sandbox bash, local
|
|
53
|
+
* host_bash fallback, sanitized CLI bash, skill runners, scheduled scripts).
|
|
54
|
+
*
|
|
55
|
+
* POSIX uses a new process group so timeout/abort can SIGKILL the tree via
|
|
56
|
+
* `-pid`. Windows process trees are torn down with `taskkill /T`, which does
|
|
57
|
+
* not need a detached process. Combining `DETACHED_PROCESS`,
|
|
58
|
+
* `CREATE_NO_WINDOW`, and piped stdio on Windows can emit `close` with exit
|
|
59
|
+
* 0 and empty pipes without running the encoded command.
|
|
60
|
+
*/
|
|
61
|
+
export function buildShellSpawnFlags(
|
|
62
|
+
hostPlatform: NodeJS.Platform = process.platform,
|
|
63
|
+
): ShellSpawnFlags {
|
|
64
|
+
return {
|
|
65
|
+
detached: hostPlatform !== "win32",
|
|
66
|
+
windowsHide: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
46
70
|
export function pathListDelimiter(
|
|
47
71
|
hostPlatform: NodeJS.Platform = process.platform,
|
|
48
72
|
): string {
|
|
@@ -63,6 +63,7 @@ const FIXTURES: Record<string, string> = {
|
|
|
63
63
|
"Perplexity API Key": `pplx-${filler(40)}`,
|
|
64
64
|
"Tavily API Key": `tvly-${filler(20)}`,
|
|
65
65
|
"Firecrawl API Key": `fc-${filler(20)}`,
|
|
66
|
+
"Resend API Key": `re_${filler(8)}_${filler(24)}`,
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
describe("subpath export", () => {
|
|
@@ -230,6 +230,9 @@ export const PREFIX_PATTERNS: SecretPrefixPattern[] = [
|
|
|
230
230
|
|
|
231
231
|
// -- Firecrawl --
|
|
232
232
|
{ label: "Firecrawl API Key", regex: /fc-[A-Za-z0-9]{20,}/ },
|
|
233
|
+
// Resend documents only the `re_` prefix; the segment shape is the observed
|
|
234
|
+
// key format. Strict on purpose: bare `re_` prefixes ordinary identifiers.
|
|
235
|
+
{ label: "Resend API Key", regex: /re_[A-Za-z0-9]{8}_[A-Za-z0-9]{24,}/ },
|
|
233
236
|
];
|
|
234
237
|
|
|
235
238
|
/**
|
|
@@ -362,7 +365,7 @@ export function isPlaceholderValue(value: string): boolean {
|
|
|
362
365
|
// Strip known prefixes to isolate the variable part
|
|
363
366
|
const variablePart = value
|
|
364
367
|
.replace(
|
|
365
|
-
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx
|
|
368
|
+
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx-|re_|-----BEGIN [A-Z ]*PRIVATE KEY-----)/,
|
|
366
369
|
"",
|
|
367
370
|
)
|
|
368
371
|
.replace(/[^A-Za-z0-9]/g, "");
|
|
@@ -83,8 +83,14 @@ export const SourceMetadataSchema = z
|
|
|
83
83
|
clientTimezone: z.string().optional(),
|
|
84
84
|
/** Channel command intent (e.g. Telegram /start). */
|
|
85
85
|
commandIntent: CommandIntentSchema.optional(),
|
|
86
|
-
/**
|
|
87
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Whether the message addresses the assistant by name, an @-mention on
|
|
88
|
+
* the platforms that have one. Stated by the channel's normalizer only
|
|
89
|
+
* where it proved the answer; absent means "not established". Read to
|
|
90
|
+
* decide whether a reply is expected before any text exists, never to
|
|
91
|
+
* admit or deny: admission is the gate's job, upstream of this.
|
|
92
|
+
*/
|
|
93
|
+
botMentioned: z.boolean().optional(),
|
|
88
94
|
/**
|
|
89
95
|
* Slack-specific: the `edited.ts` float-string from a `message_changed`
|
|
90
96
|
* event. Used by the daemon to reject out-of-order edit deliveries whose
|
|
@@ -63,6 +63,7 @@ const FIXTURES: Record<string, string> = {
|
|
|
63
63
|
"Perplexity API Key": `pplx-${filler(40)}`,
|
|
64
64
|
"Tavily API Key": `tvly-${filler(20)}`,
|
|
65
65
|
"Firecrawl API Key": `fc-${filler(20)}`,
|
|
66
|
+
"Resend API Key": `re_${filler(8)}_${filler(24)}`,
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
describe("subpath export", () => {
|
|
@@ -230,6 +230,9 @@ export const PREFIX_PATTERNS: SecretPrefixPattern[] = [
|
|
|
230
230
|
|
|
231
231
|
// -- Firecrawl --
|
|
232
232
|
{ label: "Firecrawl API Key", regex: /fc-[A-Za-z0-9]{20,}/ },
|
|
233
|
+
// Resend documents only the `re_` prefix; the segment shape is the observed
|
|
234
|
+
// key format. Strict on purpose: bare `re_` prefixes ordinary identifiers.
|
|
235
|
+
{ label: "Resend API Key", regex: /re_[A-Za-z0-9]{8}_[A-Za-z0-9]{24,}/ },
|
|
233
236
|
];
|
|
234
237
|
|
|
235
238
|
/**
|
|
@@ -362,7 +365,7 @@ export function isPlaceholderValue(value: string): boolean {
|
|
|
362
365
|
// Strip known prefixes to isolate the variable part
|
|
363
366
|
const variablePart = value
|
|
364
367
|
.replace(
|
|
365
|
-
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx
|
|
368
|
+
/^(?:AKIA|gh[pousr]_|github_pat_|glpat-|sk_live_|rk_live_|xoxb-|xoxp-|xapp-|sk-ant-|sk-proj-|sk-or-v1-|AIza|GOCSPX-|SK|SG\.|npm_|pypi-|key-|lin_api_|ntn_|fw_|pplx-|re_|-----BEGIN [A-Z ]*PRIVATE KEY-----)/,
|
|
366
369
|
"",
|
|
367
370
|
)
|
|
368
371
|
.replace(/[^A-Za-z0-9]/g, "");
|
package/openapi.yaml
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
openapi: 3.1.0
|
|
4
4
|
info:
|
|
5
5
|
title: Vellum Assistant API
|
|
6
|
-
version: 0.12.
|
|
6
|
+
version: 0.12.3
|
|
7
7
|
description: Auto-generated OpenAPI specification for the Vellum Assistant runtime HTTP server.
|
|
8
8
|
servers:
|
|
9
9
|
- url: http://127.0.0.1:7821
|
|
@@ -5042,7 +5042,7 @@ paths:
|
|
|
5042
5042
|
type: string
|
|
5043
5043
|
required:
|
|
5044
5044
|
- type
|
|
5045
|
-
|
|
5045
|
+
botMentioned:
|
|
5046
5046
|
type: boolean
|
|
5047
5047
|
slackEditedTs:
|
|
5048
5048
|
type: string
|
|
@@ -11941,6 +11941,8 @@ paths:
|
|
|
11941
11941
|
- ready
|
|
11942
11942
|
- failed
|
|
11943
11943
|
- unsupported
|
|
11944
|
+
automationActive:
|
|
11945
|
+
type: boolean
|
|
11944
11946
|
stage:
|
|
11945
11947
|
type: string
|
|
11946
11948
|
enum:
|
|
@@ -11971,6 +11973,8 @@ paths:
|
|
|
11971
11973
|
- ready
|
|
11972
11974
|
- failed
|
|
11973
11975
|
- unsupported
|
|
11976
|
+
automationActive:
|
|
11977
|
+
type: boolean
|
|
11974
11978
|
stage:
|
|
11975
11979
|
type: string
|
|
11976
11980
|
enum:
|
|
@@ -16552,7 +16556,8 @@ paths:
|
|
|
16552
16556
|
type: string
|
|
16553
16557
|
description:
|
|
16554
16558
|
"Filter by provider id. One of: anthropic, openai, gemini, ollama, fireworks, together, openrouter,
|
|
16555
|
-
vercel-ai-gateway, litellm, opencode, openai-compatible, minimax, atlascloud, baseten, poolside,
|
|
16559
|
+
vercel-ai-gateway, litellm, opencode, openai-compatible, minimax, atlascloud, baseten, poolside, jev,
|
|
16560
|
+
vellum"
|
|
16556
16561
|
responses:
|
|
16557
16562
|
"200":
|
|
16558
16563
|
description: Successful response
|
|
@@ -16824,8 +16829,8 @@ paths:
|
|
|
16824
16829
|
type: string
|
|
16825
16830
|
description:
|
|
16826
16831
|
"Filter by provider. One of: anthropic, openai, gemini, ollama, fireworks, together, openrouter,
|
|
16827
|
-
vercel-ai-gateway, litellm, opencode, openai-compatible, minimax, atlascloud, baseten, poolside,
|
|
16828
|
-
chatgpt"
|
|
16832
|
+
vercel-ai-gateway, litellm, opencode, openai-compatible, minimax, atlascloud, baseten, poolside, jev,
|
|
16833
|
+
vellum, chatgpt"
|
|
16829
16834
|
responses:
|
|
16830
16835
|
"200":
|
|
16831
16836
|
description: Successful response
|
|
@@ -20988,6 +20993,8 @@ paths:
|
|
|
20988
20993
|
type: string
|
|
20989
20994
|
fileBacked:
|
|
20990
20995
|
type: boolean
|
|
20996
|
+
computerUseScreenshot:
|
|
20997
|
+
type: boolean
|
|
20991
20998
|
required:
|
|
20992
20999
|
- id
|
|
20993
21000
|
- filename
|
|
@@ -21315,6 +21322,9 @@ paths:
|
|
|
21315
21322
|
additionalProperties: false
|
|
21316
21323
|
freeTextPlaceholder:
|
|
21317
21324
|
type: string
|
|
21325
|
+
presentation:
|
|
21326
|
+
type: string
|
|
21327
|
+
const: virtual_desktop
|
|
21318
21328
|
required:
|
|
21319
21329
|
- id
|
|
21320
21330
|
- question
|
|
@@ -21357,6 +21367,9 @@ paths:
|
|
|
21357
21367
|
additionalProperties: false
|
|
21358
21368
|
freeTextPlaceholder:
|
|
21359
21369
|
type: string
|
|
21370
|
+
presentation:
|
|
21371
|
+
type: string
|
|
21372
|
+
const: virtual_desktop
|
|
21360
21373
|
required:
|
|
21361
21374
|
- id
|
|
21362
21375
|
- question
|
|
@@ -21826,6 +21839,9 @@ paths:
|
|
|
21826
21839
|
additionalProperties: false
|
|
21827
21840
|
freeTextPlaceholder:
|
|
21828
21841
|
type: string
|
|
21842
|
+
presentation:
|
|
21843
|
+
type: string
|
|
21844
|
+
const: virtual_desktop
|
|
21829
21845
|
required:
|
|
21830
21846
|
- id
|
|
21831
21847
|
- question
|
|
@@ -21868,6 +21884,9 @@ paths:
|
|
|
21868
21884
|
additionalProperties: false
|
|
21869
21885
|
freeTextPlaceholder:
|
|
21870
21886
|
type: string
|
|
21887
|
+
presentation:
|
|
21888
|
+
type: string
|
|
21889
|
+
const: virtual_desktop
|
|
21871
21890
|
required:
|
|
21872
21891
|
- id
|
|
21873
21892
|
- question
|
|
@@ -21995,6 +22014,8 @@ paths:
|
|
|
21995
22014
|
type: string
|
|
21996
22015
|
fileBacked:
|
|
21997
22016
|
type: boolean
|
|
22017
|
+
computerUseScreenshot:
|
|
22018
|
+
type: boolean
|
|
21998
22019
|
required:
|
|
21999
22020
|
- id
|
|
22000
22021
|
- filename
|
|
@@ -25719,6 +25740,9 @@ paths:
|
|
|
25719
25740
|
additionalProperties: false
|
|
25720
25741
|
freeTextPlaceholder:
|
|
25721
25742
|
type: string
|
|
25743
|
+
presentation:
|
|
25744
|
+
type: string
|
|
25745
|
+
const: virtual_desktop
|
|
25722
25746
|
required:
|
|
25723
25747
|
- id
|
|
25724
25748
|
- question
|
|
@@ -29134,6 +29158,8 @@ paths:
|
|
|
29134
29158
|
- single_channel
|
|
29135
29159
|
- multi_channel
|
|
29136
29160
|
- all_channels
|
|
29161
|
+
quiet:
|
|
29162
|
+
type: boolean
|
|
29137
29163
|
reuseConversation:
|
|
29138
29164
|
type: boolean
|
|
29139
29165
|
wakeConversationId:
|
|
@@ -29203,6 +29229,7 @@ paths:
|
|
|
29203
29229
|
- mode
|
|
29204
29230
|
- status
|
|
29205
29231
|
- routingIntent
|
|
29232
|
+
- quiet
|
|
29206
29233
|
- reuseConversation
|
|
29207
29234
|
- wakeConversationId
|
|
29208
29235
|
- workflowName
|
|
@@ -29382,6 +29409,8 @@ paths:
|
|
|
29382
29409
|
- single_channel
|
|
29383
29410
|
- multi_channel
|
|
29384
29411
|
- all_channels
|
|
29412
|
+
quiet:
|
|
29413
|
+
type: boolean
|
|
29385
29414
|
reuseConversation:
|
|
29386
29415
|
type: boolean
|
|
29387
29416
|
wakeConversationId:
|
|
@@ -29451,6 +29480,7 @@ paths:
|
|
|
29451
29480
|
- mode
|
|
29452
29481
|
- status
|
|
29453
29482
|
- routingIntent
|
|
29483
|
+
- quiet
|
|
29454
29484
|
- reuseConversation
|
|
29455
29485
|
- wakeConversationId
|
|
29456
29486
|
- workflowName
|
|
@@ -29582,6 +29612,8 @@ paths:
|
|
|
29582
29612
|
- single_channel
|
|
29583
29613
|
- multi_channel
|
|
29584
29614
|
- all_channels
|
|
29615
|
+
quiet:
|
|
29616
|
+
type: boolean
|
|
29585
29617
|
reuseConversation:
|
|
29586
29618
|
type: boolean
|
|
29587
29619
|
wakeConversationId:
|
|
@@ -29651,6 +29683,7 @@ paths:
|
|
|
29651
29683
|
- mode
|
|
29652
29684
|
- status
|
|
29653
29685
|
- routingIntent
|
|
29686
|
+
- quiet
|
|
29654
29687
|
- reuseConversation
|
|
29655
29688
|
- wakeConversationId
|
|
29656
29689
|
- workflowName
|
|
@@ -29779,6 +29812,8 @@ paths:
|
|
|
29779
29812
|
- single_channel
|
|
29780
29813
|
- multi_channel
|
|
29781
29814
|
- all_channels
|
|
29815
|
+
quiet:
|
|
29816
|
+
type: boolean
|
|
29782
29817
|
reuseConversation:
|
|
29783
29818
|
type: boolean
|
|
29784
29819
|
wakeConversationId:
|
|
@@ -29848,6 +29883,7 @@ paths:
|
|
|
29848
29883
|
- mode
|
|
29849
29884
|
- status
|
|
29850
29885
|
- routingIntent
|
|
29886
|
+
- quiet
|
|
29851
29887
|
- reuseConversation
|
|
29852
29888
|
- wakeConversationId
|
|
29853
29889
|
- workflowName
|
|
@@ -30036,6 +30072,8 @@ paths:
|
|
|
30036
30072
|
- single_channel
|
|
30037
30073
|
- multi_channel
|
|
30038
30074
|
- all_channels
|
|
30075
|
+
quiet:
|
|
30076
|
+
type: boolean
|
|
30039
30077
|
reuseConversation:
|
|
30040
30078
|
type: boolean
|
|
30041
30079
|
wakeConversationId:
|
|
@@ -30105,6 +30143,7 @@ paths:
|
|
|
30105
30143
|
- mode
|
|
30106
30144
|
- status
|
|
30107
30145
|
- routingIntent
|
|
30146
|
+
- quiet
|
|
30108
30147
|
- reuseConversation
|
|
30109
30148
|
- wakeConversationId
|
|
30110
30149
|
- workflowName
|
|
@@ -30236,6 +30275,8 @@ paths:
|
|
|
30236
30275
|
- single_channel
|
|
30237
30276
|
- multi_channel
|
|
30238
30277
|
- all_channels
|
|
30278
|
+
quiet:
|
|
30279
|
+
type: boolean
|
|
30239
30280
|
reuseConversation:
|
|
30240
30281
|
type: boolean
|
|
30241
30282
|
wakeConversationId:
|
|
@@ -30305,6 +30346,7 @@ paths:
|
|
|
30305
30346
|
- mode
|
|
30306
30347
|
- status
|
|
30307
30348
|
- routingIntent
|
|
30349
|
+
- quiet
|
|
30308
30350
|
- reuseConversation
|
|
30309
30351
|
- wakeConversationId
|
|
30310
30352
|
- workflowName
|
|
@@ -30439,6 +30481,8 @@ paths:
|
|
|
30439
30481
|
- single_channel
|
|
30440
30482
|
- multi_channel
|
|
30441
30483
|
- all_channels
|
|
30484
|
+
quiet:
|
|
30485
|
+
type: boolean
|
|
30442
30486
|
reuseConversation:
|
|
30443
30487
|
type: boolean
|
|
30444
30488
|
wakeConversationId:
|
|
@@ -30508,6 +30552,7 @@ paths:
|
|
|
30508
30552
|
- mode
|
|
30509
30553
|
- status
|
|
30510
30554
|
- routingIntent
|
|
30555
|
+
- quiet
|
|
30511
30556
|
- reuseConversation
|
|
30512
30557
|
- wakeConversationId
|
|
30513
30558
|
- workflowName
|
|
@@ -30778,6 +30823,8 @@ paths:
|
|
|
30778
30823
|
- single_channel
|
|
30779
30824
|
- multi_channel
|
|
30780
30825
|
- all_channels
|
|
30826
|
+
quiet:
|
|
30827
|
+
type: boolean
|
|
30781
30828
|
reuseConversation:
|
|
30782
30829
|
type: boolean
|
|
30783
30830
|
wakeConversationId:
|
|
@@ -30847,6 +30894,7 @@ paths:
|
|
|
30847
30894
|
- mode
|
|
30848
30895
|
- status
|
|
30849
30896
|
- routingIntent
|
|
30897
|
+
- quiet
|
|
30850
30898
|
- reuseConversation
|
|
30851
30899
|
- wakeConversationId
|
|
30852
30900
|
- workflowName
|
|
@@ -38352,6 +38400,7 @@ components:
|
|
|
38352
38400
|
- atlascloud
|
|
38353
38401
|
- baseten
|
|
38354
38402
|
- poolside
|
|
38403
|
+
- jev
|
|
38355
38404
|
- vellum
|
|
38356
38405
|
- chatgpt
|
|
38357
38406
|
Auth:
|
package/package.json
CHANGED
|
@@ -42,6 +42,7 @@ const manager = new DesktopSessionManager({
|
|
|
42
42
|
renderWallpaper: async () => null,
|
|
43
43
|
});
|
|
44
44
|
const control = new DesktopAutomationLease({
|
|
45
|
+
notify: async () => {},
|
|
45
46
|
enabled: () => true,
|
|
46
47
|
ready: () =>
|
|
47
48
|
!coldInstall || desktopDependencyInstaller.getStatus().state === "ready",
|
|
@@ -86,6 +86,9 @@ function projectModel(model: CatalogModel): Record<string, unknown> {
|
|
|
86
86
|
if (model.supportsToolUse !== undefined) {
|
|
87
87
|
projected.supportsToolUse = model.supportsToolUse;
|
|
88
88
|
}
|
|
89
|
+
if (model.supportsText !== undefined) {
|
|
90
|
+
projected.supportsText = model.supportsText;
|
|
91
|
+
}
|
|
89
92
|
if (model.pricing !== undefined) {
|
|
90
93
|
projected.pricing = model.pricing;
|
|
91
94
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* full-quality quality-optimized, full prompt + tools (pre-flag brain)
|
|
16
16
|
*
|
|
17
17
|
* Run with the daemon's environment so the managed connection resolves:
|
|
18
|
-
* VELLUM_WORKSPACE_DIR=<daemon workspace>
|
|
18
|
+
* VELLUM_WORKSPACE_DIR=<daemon workspace> \
|
|
19
19
|
* bun run scripts/voice-ttft-spike.ts [--trials 3] [--variants a,b]
|
|
20
20
|
*
|
|
21
21
|
* Outside the daemon env, credentials fall back to the encrypted file
|
|
@@ -217,7 +217,7 @@ async function main(): Promise<void> {
|
|
|
217
217
|
if (!provider) {
|
|
218
218
|
console.error(
|
|
219
219
|
`${spec.name}: no provider resolved (managed credentials missing? ` +
|
|
220
|
-
`run with the daemon's VELLUM_WORKSPACE_DIR
|
|
220
|
+
`run with the daemon's VELLUM_WORKSPACE_DIR)`,
|
|
221
221
|
);
|
|
222
222
|
continue;
|
|
223
223
|
}
|