@vellumai/assistant 0.8.7-dev.202606052232.2ddc989 → 0.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.lock +2 -2
- package/docs/plugins.md +832 -0
- package/examples/plugins/echo/README.md +60 -61
- package/examples/plugins/echo/package.json +2 -1
- package/examples/plugins/echo/register.ts +143 -0
- package/node_modules/@vellumai/skill-host-contracts/src/skill-host.ts +6 -7
- package/openapi.yaml +5 -15
- package/package.json +2 -2
- package/src/__tests__/agent-loop-exit-reason.test.ts +56 -3
- package/src/__tests__/anthropic-provider.test.ts +1 -1
- package/src/__tests__/app-control-flow.test.ts +1 -1
- package/src/__tests__/app-dir-path-guard.test.ts +0 -1
- package/src/__tests__/approval-routes-http.test.ts +1 -4
- package/src/__tests__/channel-approval-routes.test.ts +1 -1
- package/src/__tests__/channel-approvals.test.ts +1 -1
- package/src/__tests__/circuit-breaker-pipeline.test.ts +405 -0
- package/src/__tests__/compaction-pipeline.test.ts +210 -0
- package/src/__tests__/compaction-timeout-recovery.test.ts +251 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-inference-profile.test.ts +3 -0
- package/src/__tests__/conversation-agent-loop-overflow.test.ts +7 -3
- package/src/__tests__/conversation-agent-loop.test.ts +39 -42
- package/src/__tests__/conversation-clean-command.test.ts +2 -5
- package/src/__tests__/conversation-provider-retry-repair.test.ts +5 -4
- package/src/__tests__/conversation-runtime-assembly.test.ts +71 -140
- package/src/__tests__/conversation-runtime-workspace.test.ts +27 -108
- package/src/__tests__/conversation-starter-routes.test.ts +6 -14
- package/src/__tests__/conversation-workspace-cache-state.test.ts +16 -17
- package/src/__tests__/conversation-workspace-injection.test.ts +1 -61
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -7
- package/src/__tests__/db-acp-history.test.ts +0 -101
- package/src/__tests__/dynamic-page-surface.test.ts +0 -31
- package/src/__tests__/file-write-tool.test.ts +0 -63
- package/src/__tests__/gateway-only-guard.test.ts +2 -12
- package/src/__tests__/guardian-grant-minting.test.ts +1 -1
- package/src/__tests__/guardian-routing-invariants.test.ts +4 -2
- package/src/__tests__/handlers-user-message-approval-consumption.test.ts +1 -1
- package/src/__tests__/heartbeat-disk-pressure.test.ts +0 -1
- package/src/__tests__/heartbeat-service.test.ts +0 -1
- package/src/__tests__/host-app-control-routes.test.ts +1 -1
- package/src/__tests__/host-cu-routes-targeted.test.ts +3 -3
- package/src/__tests__/injector-background-turn.test.ts +1 -1
- package/src/__tests__/injector-chain.test.ts +6 -34
- package/src/__tests__/injector-disk-pressure.test.ts +34 -77
- package/src/__tests__/injector-document-comments.test.ts +1 -1
- package/src/__tests__/list-messages-hidden-metadata.test.ts +0 -38
- package/src/__tests__/memory-v2-static-injector.test.ts +1 -1
- package/src/__tests__/{overflow-reduction-loop.test.ts → overflow-reduce-pipeline.test.ts} +284 -64
- package/src/__tests__/pipeline-runner.test.ts +554 -0
- package/src/__tests__/plugin-api-shim.test.ts +6 -3
- package/src/__tests__/plugin-bootstrap.test.ts +23 -12
- package/src/__tests__/plugin-registry.test.ts +49 -3
- package/src/__tests__/plugin-types.test.ts +70 -0
- package/src/__tests__/reaction-persistence.test.ts +1 -1
- package/src/__tests__/send-endpoint-busy.test.ts +1 -4
- package/src/__tests__/skill-feature-flags-integration.test.ts +0 -33
- package/src/__tests__/subagent-call-site-routing.test.ts +1 -1
- package/src/__tests__/subagent-fork-notifications.test.ts +3 -1
- package/src/__tests__/subagent-fork-spawn.test.ts +1 -1
- package/src/__tests__/subagent-manager-notify.test.ts +3 -1
- package/src/__tests__/subagent-notify-parent.test.ts +3 -1
- package/src/__tests__/subagent-spawn-tool-fork.test.ts +1 -1
- package/src/__tests__/user-plugin-loader.test.ts +286 -54
- package/src/acp/__tests__/client-handler.test.ts +0 -40
- package/src/acp/__tests__/prepare-agent-env.test.ts +0 -137
- package/src/acp/__tests__/session-manager-persistence.test.ts +28 -95
- package/src/acp/agent-process.ts +1 -61
- package/src/acp/client-handler.ts +0 -31
- package/src/acp/prepare-agent-env.ts +29 -83
- package/src/acp/resolve-agent.test.ts +7 -320
- package/src/acp/resolve-agent.ts +18 -182
- package/src/acp/session-manager.ts +73 -495
- package/src/acp/types.ts +0 -8
- package/src/agent/compaction-circuit.ts +102 -60
- package/src/agent/loop.ts +59 -32
- package/src/api/responses/conversation-message.ts +1 -7
- package/src/approvals/guardian-request-resolvers.ts +1 -1
- package/src/background-wake/next-wake.ts +0 -1
- package/src/config/__tests__/feature-flag-registry-guard.test.ts +2 -2
- package/src/config/acp-defaults.test.ts +0 -10
- package/src/config/acp-defaults.ts +0 -6
- package/src/config/bundled-skills/acp/SKILL.md +31 -83
- package/src/config/bundled-skills/acp/TOOLS.json +4 -4
- package/src/config/bundled-skills/app-builder/SKILL.md +381 -224
- package/src/config/bundled-skills/app-builder/TOOLS.json +0 -29
- package/src/config/bundled-skills/document-editor/SKILL.md +23 -28
- package/src/config/bundled-skills/document-editor/TOOLS.json +1 -1
- package/src/config/bundled-tool-registry.ts +0 -2
- package/src/config/feature-flag-registry.json +5 -14
- package/src/config/schemas/heartbeat.ts +0 -9
- package/src/context/strip-injections.ts +2 -8
- package/src/context/window-manager.ts +1 -2
- package/src/daemon/conversation-agent-loop-handlers.ts +11 -0
- package/src/daemon/conversation-agent-loop.ts +279 -62
- package/src/daemon/conversation-runtime-assembly.ts +69 -106
- package/src/daemon/conversation-store.ts +90 -9
- package/src/daemon/conversation-workspace.ts +0 -17
- package/src/daemon/conversation.ts +6 -0
- package/src/daemon/external-plugins-bootstrap.ts +11 -11
- package/src/daemon/handlers/conversations.ts +1 -3
- package/src/daemon/handlers/skills.ts +1 -4
- package/src/daemon/lifecycle.ts +0 -21
- package/src/daemon/server.ts +0 -2
- package/src/heartbeat/__tests__/heartbeat-service.test.ts +0 -3
- package/src/heartbeat/heartbeat-run-store.ts +1 -23
- package/src/heartbeat/heartbeat-service.ts +0 -26
- package/src/ipc/__tests__/browser-ipc.test.ts +1 -1
- package/src/ipc/__tests__/ui-request-route.test.ts +3 -3
- package/src/ipc/skill-routes/__tests__/memory.test.ts +0 -15
- package/src/ipc/skill-routes/memory.ts +2 -4
- package/src/memory/conversation-starter-checkpoints.ts +0 -1
- package/src/memory/db-init.ts +0 -2
- package/src/memory/job-handlers/conversation-starters.ts +2 -13
- package/src/memory/jobs-worker.ts +1 -1
- package/src/memory/migrations/index.ts +0 -1
- package/src/memory/schema/acp.ts +0 -4
- package/src/memory/v2/__tests__/consolidation-job.test.ts +3 -3
- package/src/memory/v2/consolidation-job.ts +4 -13
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/assign.test.ts +4 -4
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/live-integration.test.ts +4 -4
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/maintain-job.test.ts +5 -5
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/orchestrate.test.ts +3 -3
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/reconcile.test.ts +2 -2
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/render-injection.test.ts +1 -1
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/router.test.ts +3 -3
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/selection-log-store.test.ts +8 -8
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/selector.test.ts +3 -3
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/shadow-plugin.test.ts +12 -12
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/assign.ts +5 -5
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/capabilities.ts +2 -2
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/maintain-job.ts +8 -8
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/page-content.ts +2 -2
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/provider-blocks.ts +1 -1
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/reconcile.ts +3 -3
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/render-injection.ts +1 -1
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/router.ts +3 -3
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/selection-log-store.ts +4 -4
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/selector.ts +4 -4
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/shadow-plugin.ts +90 -28
- package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/tree.ts +1 -1
- package/src/plugin-api/index.ts +5 -0
- package/src/plugins/defaults/circuit-breaker/middlewares/circuitBreaker.ts +93 -0
- package/src/plugins/defaults/{memory-v3-shadow → circuit-breaker}/package.json +2 -2
- package/src/plugins/defaults/circuit-breaker/register.ts +39 -0
- package/src/plugins/defaults/compaction/middlewares/compaction.ts +25 -0
- package/src/plugins/defaults/compaction/package.json +1 -1
- package/src/plugins/defaults/compaction/register.ts +19 -8
- package/src/plugins/defaults/compaction/terminal.ts +73 -0
- package/src/plugins/defaults/index.ts +5 -3
- package/src/plugins/defaults/{memory-retrieval/injectors.ts → injectors/register.ts} +7 -45
- package/src/plugins/defaults/memory-retrieval/hooks/post-compact.ts +7 -11
- package/src/plugins/defaults/memory-retrieval/injector-chain.ts +2 -2
- package/src/plugins/defaults/overflow-reduce/middlewares/overflowReduce.ts +126 -0
- package/src/plugins/defaults/overflow-reduce/package.json +15 -0
- package/src/plugins/defaults/overflow-reduce/register.ts +42 -0
- package/src/plugins/external-api.ts +2 -2
- package/src/plugins/pipeline.ts +293 -6
- package/src/plugins/registry.ts +37 -9
- package/src/plugins/types.ts +336 -32
- package/src/plugins/user-loader.ts +127 -30
- package/src/proactive-artifact/aux-message-injector.ts +1 -1
- package/src/proactive-artifact/job.test.ts +1 -1
- package/src/prompts/__tests__/system-prompt.test.ts +0 -6
- package/src/prompts/templates/BOOTSTRAP-ACTIVATION-RAIL.md +2 -4
- package/src/runtime/__tests__/agent-wake.test.ts +5 -5
- package/src/runtime/__tests__/interactive-ui.test.ts +1 -1
- package/src/runtime/agent-wake.ts +3 -0
- package/src/runtime/assistant-event-hub.ts +1 -1
- package/src/runtime/channel-approvals.ts +1 -1
- package/src/runtime/interactive-ui.ts +1 -1
- package/src/runtime/routes/__tests__/acp-routes.test.ts +55 -283
- package/src/runtime/routes/__tests__/conversation-list-routes.test.ts +1 -1
- package/src/runtime/routes/__tests__/surface-action-routes.test.ts +4 -5
- package/src/runtime/routes/__tests__/surface-content-routes.test.ts +1 -4
- package/src/runtime/routes/acp-routes.test.ts +25 -89
- package/src/runtime/routes/acp-routes.ts +29 -81
- package/src/runtime/routes/approval-routes.ts +1 -1
- package/src/runtime/routes/browser-routes.ts +1 -1
- package/src/runtime/routes/browser-tabs-routes.ts +10 -6
- package/src/runtime/routes/conversation-cli-routes.ts +1 -1
- package/src/runtime/routes/conversation-list-routes.ts +1 -1
- package/src/runtime/routes/conversation-query-routes.ts +1 -1
- package/src/runtime/routes/conversation-routes.ts +2 -15
- package/src/runtime/routes/conversation-starter-routes.ts +7 -13
- package/src/runtime/routes/conversations-import-routes.ts +7 -24
- package/src/runtime/routes/host-app-control-routes.ts +1 -1
- package/src/runtime/routes/host-cu-routes.ts +1 -1
- package/src/runtime/routes/identity-routes.ts +3 -18
- package/src/runtime/routes/inbound-message-handler.ts +1 -1
- package/src/runtime/routes/memory-v3-routes.ts +6 -16
- package/src/runtime/routes/playground/helpers.ts +1 -1
- package/src/runtime/routes/surface-conversation-resolver.ts +3 -4
- package/src/runtime/routes/work-items-routes.ts +4 -2
- package/src/runtime/services/conversation-serializer.ts +1 -1
- package/src/signals/cancel.ts +4 -2
- package/src/subagent/manager.ts +5 -17
- package/src/tools/acp/list-agents.test.ts +1 -7
- package/src/tools/acp/spawn.test.ts +55 -158
- package/src/tools/acp/spawn.ts +72 -47
- package/src/tools/acp/steer.test.ts +8 -105
- package/src/tools/acp/steer.ts +17 -48
- package/src/tools/apps/executors.ts +8 -13
- package/src/tools/filesystem/write.ts +0 -34
- package/src/tools/subagent/spawn.ts +4 -2
- package/src/tools/ui-surface/definitions.ts +4 -25
- package/src/workspace/migrations/051-seed-conversation-summarization-callsite.ts +5 -4
- package/src/workspace/migrations/097-enable-adaptive-thinking-managed-profiles.ts +45 -69
- package/examples/plugins/echo/hooks/post-tool-use.ts +0 -18
- package/examples/plugins/echo/hooks/stop.ts +0 -16
- package/examples/plugins/echo/hooks/user-prompt-submit.ts +0 -18
- package/examples/plugins/echo/src/emit.ts +0 -19
- package/src/__tests__/compaction-circuit.test.ts +0 -258
- package/src/__tests__/compaction-direct.test.ts +0 -132
- package/src/__tests__/conversations-import-system-filter.test.ts +0 -101
- package/src/acp/__tests__/agent-process.test.ts +0 -161
- package/src/acp/__tests__/helpers/acp-history-db.ts +0 -82
- package/src/acp/__tests__/helpers/exec-file-stub.ts +0 -101
- package/src/acp/__tests__/session-manager-resume.test.ts +0 -736
- package/src/acp/auto-install.test.ts +0 -196
- package/src/acp/auto-install.ts +0 -177
- package/src/acp/feature-gate.test.ts +0 -48
- package/src/acp/feature-gate.ts +0 -34
- package/src/acp/resume-hint.ts +0 -25
- package/src/config/bundled-skills/app-builder/references/DESIGN_SYSTEM.md +0 -48
- package/src/config/bundled-skills/app-builder/references/RESPONSIVE.md +0 -57
- package/src/config/bundled-skills/app-builder/references/SLIDES.md +0 -38
- package/src/config/bundled-skills/app-builder/tools/app-list.ts +0 -62
- package/src/daemon/conversation-registry.ts +0 -159
- package/src/daemon/overflow-reduction-loop.ts +0 -230
- package/src/memory/migrations/272-acp-session-history-cwd.ts +0 -36
- package/src/plugins/defaults/compaction/compact.ts +0 -59
- package/src/plugins/defaults/memory-v3-shadow/hooks/post-compact.ts +0 -14
- package/src/plugins/defaults/memory-v3-shadow/hooks/user-prompt-submit.ts +0 -19
- package/src/plugins/defaults/memory-v3-shadow/injector.ts +0 -75
- package/src/plugins/defaults/memory-v3-shadow/register.ts +0 -26
- package/src/tools/acp/context.ts +0 -20
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/capabilities.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/core.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/fixtures/eval-turns.json +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/fixtures/live-turns.json +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/health.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/needle.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/provider-blocks.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/snapshot.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/tree.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/types.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/working-set-eviction.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/__tests__/working-set-skeleton.test.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/core.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/README.md +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/assignments.json +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/core.json +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/leaves/domain-a/topic-x.md +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/leaves/domain-a/topic-y.md +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/data/leaves/domain-b/topic-z.md +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/health.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/llm-retry.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/needle.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/orchestrate.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/snapshot.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/types.ts +0 -0
- /package/src/{plugins/defaults/memory-v3-shadow → memory/v3}/working-set.ts +0 -0
|
@@ -74,17 +74,6 @@
|
|
|
74
74
|
"change_summary": {
|
|
75
75
|
"type": "string",
|
|
76
76
|
"description": "Short summary of what changed, using git conventional commit format (e.g. 'feat: add coin flip app', 'fix: correct button alignment'). Used as the version history entry."
|
|
77
|
-
},
|
|
78
|
-
"icon": {
|
|
79
|
-
"type": "string",
|
|
80
|
-
"description": "Lenient alias. Prefer preview.icon. An emoji or image URL passed here is folded into preview.icon automatically."
|
|
81
|
-
},
|
|
82
|
-
"html": {
|
|
83
|
-
"type": "string",
|
|
84
|
-
"description": "Lenient alias. Prefer source_files. Raw HTML passed here is folded into source_files['src/index.html'] automatically."
|
|
85
|
-
},
|
|
86
|
-
"pages": {
|
|
87
|
-
"description": "Retired. Multi-page apps route inside the Preact app under src/components/. Passing this returns a guidance error."
|
|
88
77
|
}
|
|
89
78
|
},
|
|
90
79
|
"required": ["name"]
|
|
@@ -161,24 +150,6 @@
|
|
|
161
150
|
},
|
|
162
151
|
"executor": "tools/app-generate-icon.ts",
|
|
163
152
|
"execution_target": "host"
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"name": "app_list",
|
|
167
|
-
"description": "List the persistent apps the user has built, returning each app's app_id, name, description, and timestamps (most recently updated first). Pass `query` to resolve an app the user mentions by name to its app_id before calling app_open. Use this whenever the user refers to an existing app and you don't already have its app_id in context.",
|
|
168
|
-
"category": "apps",
|
|
169
|
-
"risk": "low",
|
|
170
|
-
"input_schema": {
|
|
171
|
-
"type": "object",
|
|
172
|
-
"properties": {
|
|
173
|
-
"query": {
|
|
174
|
-
"type": "string",
|
|
175
|
-
"description": "Optional name (or partial name) the user mentioned. When provided, only matching apps are returned: an exact case-insensitive name match if one exists, otherwise substring matches in either direction (e.g. 'habit tracker' resolves 'Habit Tracker'). Omit to list all apps."
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
"required": []
|
|
179
|
-
},
|
|
180
|
-
"executor": "tools/app-list.ts",
|
|
181
|
-
"execution_target": "host"
|
|
182
153
|
}
|
|
183
154
|
]
|
|
184
155
|
}
|
|
@@ -1,36 +1,43 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: document-editor
|
|
3
|
-
description:
|
|
3
|
+
description: Rich text document editor with collaborative editing tools — create, read, update, and annotate documents
|
|
4
4
|
compatibility: "Designed for Vellum personal assistants"
|
|
5
5
|
metadata:
|
|
6
|
-
emoji: "
|
|
6
|
+
emoji: "📄"
|
|
7
7
|
vellum:
|
|
8
|
-
display-name: "Document
|
|
8
|
+
display-name: "Document Editor"
|
|
9
9
|
activation-hints:
|
|
10
|
-
- "User asks to write, draft, or
|
|
11
|
-
- "
|
|
12
|
-
- "
|
|
13
|
-
avoid-when:
|
|
14
|
-
- "The user wants an interactive app, dashboard, calculator, game, or anything with state or data — use app-builder instead"
|
|
15
|
-
- "A one or two sentence answer is enough — just reply in chat"
|
|
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"
|
|
16
13
|
---
|
|
17
14
|
|
|
18
|
-
|
|
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.
|
|
19
16
|
|
|
20
17
|
## Tools
|
|
21
18
|
|
|
22
|
-
- **
|
|
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.
|
|
23
21
|
- **document_update** - Updates content in an open document editor by `surface_id`. Supports `replace` (overwrite) and `append` (add to end) modes.
|
|
24
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.
|
|
25
24
|
- **document_find** - Searches a document for text or regex patterns. Returns matching lines with line numbers, match positions, and matched text.
|
|
26
25
|
- **document_replace_text** - Targeted find-and-replace within a document. Supports literal and regex patterns (with backreferences). Optionally limit the number of replacements.
|
|
27
|
-
- **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.
|
|
28
|
-
- **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.
|
|
29
26
|
- **document_delete** - Deletes a document by `surface_id`. Use to clean up unwanted documents.
|
|
30
27
|
|
|
31
|
-
##
|
|
28
|
+
## Retrieving existing documents
|
|
29
|
+
|
|
30
|
+
When the user asks to see, open, or pull up a document:
|
|
32
31
|
|
|
33
|
-
|
|
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 surfaces the editor on the client and returns document metadata (`surface_id`, `title`, `word_count`) — not the full content. If you need the actual document text, follow up with `document_read`.
|
|
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
|
|
34
41
|
|
|
35
42
|
1. **Create the document**: Call `document_create` with a title (inferred from the request). Call the tool immediately, not after conversational preamble. Capture the `surface_id` from the response — every subsequent `document_update` call must reference it.
|
|
36
43
|
2. **Write content in Markdown**: Use proper structure (`#` for titles, `##` for sections), **bold**, _italic_, code blocks, tables, lists, blockquotes as appropriate.
|
|
@@ -52,18 +59,6 @@ When the user requests changes to a document:
|
|
|
52
59
|
- `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.
|
|
53
60
|
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.
|
|
54
61
|
|
|
55
|
-
## Retrieving existing documents
|
|
56
|
-
|
|
57
|
-
When the user asks to see, open, or pull up a document:
|
|
58
|
-
|
|
59
|
-
1. Check the `<active_documents>` block in your context — it lists all documents in this conversation with their `surface_id` and title.
|
|
60
|
-
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.
|
|
61
|
-
3. Once you have the `surface_id`, call `document_open` to open the editor panel. This surfaces the editor on the client and returns document metadata (`surface_id`, `title`, `word_count`) — not the full content. If you need the actual document text, follow up with `document_read`.
|
|
62
|
-
|
|
63
|
-
**Never** search the filesystem, conversation history, or archives to find a document. Always use `document_list` with a `query`.
|
|
64
|
-
|
|
65
|
-
**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.
|
|
66
|
-
|
|
67
62
|
## Find & Replace
|
|
68
63
|
|
|
69
64
|
Use `document_find` and `document_replace_text` for surgical edits that target specific text patterns without rewriting the entire document.
|
|
@@ -122,7 +117,7 @@ Users can leave inline comments on documents. Open comments are surfaced in a `<
|
|
|
122
117
|
## Anti-Patterns
|
|
123
118
|
|
|
124
119
|
- **Don't use `app_create` for blog posts, articles, or written content.** Use `document_create` — apps are for interactive content with state/data.
|
|
125
|
-
- **Don't
|
|
120
|
+
- **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.
|
|
126
121
|
- **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.
|
|
127
122
|
|
|
128
123
|
## Usage Notes
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
"name": "document_update",
|
|
45
|
-
"description": "
|
|
45
|
+
"description": "Update content in an open document editor. Use this to stream generated content or apply edits.",
|
|
46
46
|
"category": "document-editor",
|
|
47
47
|
"risk": "low",
|
|
48
48
|
"input_schema": {
|
|
@@ -23,7 +23,6 @@ import * as acpSteer from "./bundled-skills/acp/tools/acp-steer.js";
|
|
|
23
23
|
import * as appCreate from "./bundled-skills/app-builder/tools/app-create.js";
|
|
24
24
|
import * as appDelete from "./bundled-skills/app-builder/tools/app-delete.js";
|
|
25
25
|
import * as appGenerateIcon from "./bundled-skills/app-builder/tools/app-generate-icon.js";
|
|
26
|
-
import * as appList from "./bundled-skills/app-builder/tools/app-list.js";
|
|
27
26
|
import * as appRefresh from "./bundled-skills/app-builder/tools/app-refresh.js";
|
|
28
27
|
// ── app-control ────────────────────────────────────────────────────────────────
|
|
29
28
|
import * as appControlClick from "./bundled-skills/app-control/tools/app-control-click.js";
|
|
@@ -143,7 +142,6 @@ export const bundledToolRegistry = new Map<string, SkillToolScript>([
|
|
|
143
142
|
["app-builder:tools/app-delete.ts", appDelete],
|
|
144
143
|
["app-builder:tools/app-refresh.ts", appRefresh],
|
|
145
144
|
["app-builder:tools/app-generate-icon.ts", appGenerateIcon],
|
|
146
|
-
["app-builder:tools/app-list.ts", appList],
|
|
147
145
|
|
|
148
146
|
// app-control
|
|
149
147
|
["app-control:tools/app-control-start.ts", appControlStart],
|
|
@@ -26,13 +26,12 @@
|
|
|
26
26
|
"defaultEnabled": false
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
"id": "
|
|
29
|
+
"id": "prechat-onboarding-condensed-flow",
|
|
30
30
|
"scope": "client",
|
|
31
|
-
"key": "
|
|
32
|
-
"label": "Pre-chat Onboarding
|
|
33
|
-
"description": "
|
|
34
|
-
"defaultEnabled":
|
|
35
|
-
"values": ["control", "variant-a"]
|
|
31
|
+
"key": "prechat-onboarding-condensed-flow",
|
|
32
|
+
"label": "Condensed Pre-chat Onboarding",
|
|
33
|
+
"description": "Enable the condensed pre-chat onboarding flow for a standard LaunchDarkly percentage rollout.",
|
|
34
|
+
"defaultEnabled": false
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
37
|
"id": "experiment-activation-flow-2026-06-03",
|
|
@@ -489,14 +488,6 @@
|
|
|
489
488
|
"label": "Provider-First Profile Creation",
|
|
490
489
|
"description": "New profile creation flow: pick (or inline-create) a provider first, then a model, with pre-filled provider and profile name/key, plus a quick-add \"+\" in the chat composer's Model Profile menu. When off, profile creation uses the previous field order and there is no composer quick-add.",
|
|
491
490
|
"defaultEnabled": false
|
|
492
|
-
},
|
|
493
|
-
{
|
|
494
|
-
"id": "acp",
|
|
495
|
-
"scope": "assistant",
|
|
496
|
-
"key": "acp",
|
|
497
|
-
"label": "ACP Coding Agents",
|
|
498
|
-
"description": "Enable spawning and steering external coding agents (Claude Code, Codex, Gemini) via the Agent Client Protocol. Alternative gate to the acp.enabled workspace config field; either enables the subsystem.",
|
|
499
|
-
"defaultEnabled": false
|
|
500
491
|
}
|
|
501
492
|
]
|
|
502
493
|
}
|
|
@@ -56,15 +56,6 @@ export const HeartbeatConfigSchema = z
|
|
|
56
56
|
.describe(
|
|
57
57
|
"Maximum heartbeats that can run consecutively without a guardian message. Counter resets when the guardian sends a message. Set to null for unlimited.",
|
|
58
58
|
),
|
|
59
|
-
maxDailyRuns: z
|
|
60
|
-
.number({ error: "heartbeat.maxDailyRuns must be a number" })
|
|
61
|
-
.int("heartbeat.maxDailyRuns must be an integer")
|
|
62
|
-
.positive("heartbeat.maxDailyRuns must be a positive integer")
|
|
63
|
-
.nullable()
|
|
64
|
-
.default(2)
|
|
65
|
-
.describe(
|
|
66
|
-
"Maximum heartbeats that can run per calendar day. Resets at midnight local time. Set to null for unlimited.",
|
|
67
|
-
),
|
|
68
59
|
disposition: z
|
|
69
60
|
.string({ error: "heartbeat.disposition must be a string" })
|
|
70
61
|
.default(
|
|
@@ -87,14 +87,8 @@ const RUNTIME_INJECTION_PREFIXES: InjectionMatcher[] = [
|
|
|
87
87
|
{ prefix: "<info>\n", suffix: "\n</info>" },
|
|
88
88
|
"<voice_call_control>",
|
|
89
89
|
"<workspace_top_level>", // backward-compat: strip legacy workspace blocks
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// summary — matching the `<knowledge_base>`/`<NOW.md>` cadence and keeping the
|
|
93
|
-
// `workspace-context` injector's presence detection in lockstep (the block is
|
|
94
|
-
// present exactly when compaction would strip it). The full `{ prefix, suffix }`
|
|
95
|
-
// wrapper shape ensures user-authored text merely starting with `<workspace>\n`
|
|
96
|
-
// is never mistaken for an injected block.
|
|
97
|
-
{ prefix: "<workspace>\n", suffix: "\n</workspace>" },
|
|
90
|
+
// NOTE: <workspace> is intentionally NOT stripped — workspace context
|
|
91
|
+
// persists in history so the assistant retains workspace grounding.
|
|
98
92
|
"<temporal_context>\nToday:", // backward-compat: strip legacy temporal blocks
|
|
99
93
|
"<active_subagents>",
|
|
100
94
|
"<active_workspace>",
|
|
@@ -40,8 +40,7 @@ const INTERNAL_CONTEXT_SUMMARY_MESSAGES = new WeakSet<Message>();
|
|
|
40
40
|
|
|
41
41
|
// ---------------------------------------------------------------------------
|
|
42
42
|
// Public types — preserved for downstream consumers (agent loop, conversation,
|
|
43
|
-
//
|
|
44
|
-
// routes/playground/force-compact).
|
|
43
|
+
// plugin pipeline, applyCompactionResult, routes/playground/force-compact).
|
|
45
44
|
// ---------------------------------------------------------------------------
|
|
46
45
|
|
|
47
46
|
export interface ContextWindowResult {
|
|
@@ -295,6 +295,15 @@ export interface EventHandlerState {
|
|
|
295
295
|
* never claims content a flush has not yet written.
|
|
296
296
|
*/
|
|
297
297
|
lastPersistedContentSeq: number | undefined;
|
|
298
|
+
/**
|
|
299
|
+
* Whether the workspace top-level block should be (re)injected on this
|
|
300
|
+
* turn. Compaction's prepare phase strips the workspace / NOW.md / PKB
|
|
301
|
+
* blocks off the tail, so it is set after any successful compaction to
|
|
302
|
+
* force the workspace overview back in. On an ordinary turn the block is
|
|
303
|
+
* already present in history, so it defaults `false` to avoid burning
|
|
304
|
+
* tokens re-injecting it redundantly.
|
|
305
|
+
*/
|
|
306
|
+
shouldInjectWorkspace: boolean;
|
|
298
307
|
/**
|
|
299
308
|
* Whether the reducer has compacted `ctx.messages`, gating the Slack
|
|
300
309
|
* chronological-transcript override on re-injection. The captured
|
|
@@ -383,6 +392,7 @@ export function createEventHandlerState(): EventHandlerState {
|
|
|
383
392
|
pendingPartialFlushPromise: undefined,
|
|
384
393
|
currentMessageContent: [],
|
|
385
394
|
lastPersistedContentSeq: undefined,
|
|
395
|
+
shouldInjectWorkspace: false,
|
|
386
396
|
reducerCompacted: false,
|
|
387
397
|
};
|
|
388
398
|
}
|
|
@@ -2302,6 +2312,7 @@ export async function dispatchAgentEvent(
|
|
|
2302
2312
|
if (event.result.compacted) {
|
|
2303
2313
|
await deps.applyCompaction(event.result, event.basis);
|
|
2304
2314
|
state.reducerCompacted = true;
|
|
2315
|
+
state.shouldInjectWorkspace = true;
|
|
2305
2316
|
}
|
|
2306
2317
|
break;
|
|
2307
2318
|
case "history_stripped":
|