vellum 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/bun.lock +5 -2
- package/package.json +4 -2
- package/scripts/capture-x-graphql.ts +562 -0
- package/scripts/ipc/check-swift-decoder-drift.ts +2 -1
- package/scripts/test.sh +5 -0
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +133 -34
- package/src/__tests__/account-registry.test.ts +2 -1
- package/src/__tests__/agent-heartbeat-service.test.ts +250 -0
- package/src/__tests__/asset-materialize-tool.test.ts +16 -15
- package/src/__tests__/asset-search-tool.test.ts +23 -22
- package/src/__tests__/attachments-store.test.ts +56 -127
- package/src/__tests__/browser-skill-baseline-tool-payload.test.ts +5 -4
- package/src/__tests__/browser-skill-endstate.test.ts +4 -3
- package/src/__tests__/call-bridge.test.ts +385 -0
- package/src/__tests__/call-constants.test.ts +40 -0
- package/src/__tests__/call-orchestrator.test.ts +130 -4
- package/src/__tests__/call-recovery.test.ts +518 -0
- package/src/__tests__/call-routes-http.test.ts +459 -0
- package/src/__tests__/call-state-machine.test.ts +143 -0
- package/src/__tests__/call-store.test.ts +216 -1
- package/src/__tests__/cli-discover.test.ts +1 -1
- package/src/__tests__/commit-message-enrichment-service.test.ts +148 -7
- package/src/__tests__/compaction.benchmark.test.ts +176 -0
- package/src/__tests__/computer-use-tools.test.ts +250 -0
- package/src/__tests__/config-schema.test.ts +299 -3
- package/src/__tests__/conflict-store.test.ts +2 -1
- package/src/__tests__/contacts-tools.test.ts +331 -0
- package/src/__tests__/conversation-store.test.ts +30 -32
- package/src/__tests__/credential-security-invariants.test.ts +4 -0
- package/src/__tests__/date-context.test.ts +373 -0
- package/src/__tests__/db-schedule-syntax-migration.test.ts +129 -0
- package/src/__tests__/fixtures/media-reuse-fixtures.ts +3 -3
- package/src/__tests__/followup-tools.test.ts +303 -0
- package/src/__tests__/handlers-twitter-config.test.ts +718 -0
- package/src/__tests__/intent-routing.test.ts +64 -57
- package/src/__tests__/ipc-roundtrip.benchmark.test.ts +237 -0
- package/src/__tests__/ipc-snapshot.test.ts +62 -28
- package/src/__tests__/llm-usage-store.test.ts +3 -8
- package/src/__tests__/media-generate-image.test.ts +1 -1
- package/src/__tests__/media-reuse-story.e2e.test.ts +7 -7
- package/src/__tests__/memory-retrieval.benchmark.test.ts +430 -0
- package/src/__tests__/parallel-tool.benchmark.test.ts +294 -0
- package/src/__tests__/playbook-tools.test.ts +342 -0
- package/src/__tests__/profile-compiler.test.ts +2 -1
- package/src/__tests__/provider-streaming.benchmark.test.ts +773 -0
- package/src/__tests__/recurrence-engine-rruleset.test.ts +78 -0
- package/src/__tests__/recurrence-engine.test.ts +69 -0
- package/src/__tests__/recurrence-types.test.ts +71 -0
- package/src/__tests__/registry.test.ts +5 -3
- package/src/__tests__/relay-server.test.ts +633 -0
- package/src/__tests__/reminder-store.test.ts +6 -3
- package/src/__tests__/reminder.test.ts +43 -77
- package/src/__tests__/run-orchestrator-assistant-events.test.ts +8 -4
- package/src/__tests__/run-orchestrator.test.ts +4 -4
- package/src/__tests__/runtime-attachment-metadata.test.ts +7 -6
- package/src/__tests__/runtime-runs-http.test.ts +4 -4
- package/src/__tests__/runtime-runs.test.ts +4 -4
- package/src/__tests__/schedule-store.test.ts +482 -0
- package/src/__tests__/schedule-tools.test.ts +700 -0
- package/src/__tests__/scheduler-recurrence.test.ts +329 -0
- package/src/__tests__/server-history-render.test.ts +14 -13
- package/src/__tests__/session-error.test.ts +28 -0
- package/src/__tests__/session-init.benchmark.test.ts +462 -0
- package/src/__tests__/session-queue.test.ts +71 -48
- package/src/__tests__/session-runtime-assembly.test.ts +161 -0
- package/src/__tests__/session-surfaces-task-progress.test.ts +104 -0
- package/src/__tests__/signup-e2e.test.ts +2 -1
- package/src/__tests__/skill-projection.benchmark.test.ts +328 -0
- package/src/__tests__/skill-script-runner.test.ts +159 -0
- package/src/__tests__/speaker-identification.test.ts +52 -0
- package/src/__tests__/subagent-manager-notify.test.ts +42 -10
- package/src/__tests__/subagent-tools.test.ts +141 -41
- package/src/__tests__/task-compiler.test.ts +2 -1
- package/src/__tests__/task-runner.test.ts +2 -1
- package/src/__tests__/task-scheduler.test.ts +2 -1
- package/src/__tests__/task-tools.test.ts +49 -56
- package/src/__tests__/tool-audit-listener.test.ts +1 -0
- package/src/__tests__/tool-domain-event-publisher.test.ts +2 -0
- package/src/__tests__/tool-execution-pipeline.benchmark.test.ts +500 -0
- package/src/__tests__/tool-executor.test.ts +13 -17
- package/src/__tests__/turn-commit.test.ts +218 -3
- package/src/__tests__/twilio-provider.test.ts +143 -0
- package/src/__tests__/twilio-routes.test.ts +789 -0
- package/src/__tests__/twitter-auth-handler.test.ts +581 -0
- package/src/__tests__/view-image-tool.test.ts +217 -0
- package/src/__tests__/workspace-git-service.test.ts +186 -0
- package/src/__tests__/workspace-heartbeat-service.test.ts +13 -3
- package/src/agent-heartbeat/agent-heartbeat-service.ts +155 -0
- package/src/bundler/app-bundler.ts +12 -8
- package/src/calls/call-bridge.ts +95 -0
- package/src/calls/call-constants.ts +43 -5
- package/src/calls/call-domain.ts +276 -0
- package/src/calls/call-orchestrator.ts +43 -17
- package/src/calls/call-recovery.ts +207 -0
- package/src/calls/call-state-machine.ts +68 -0
- package/src/calls/call-store.ts +192 -5
- package/src/calls/relay-server.ts +41 -4
- package/src/calls/speaker-identification.ts +213 -0
- package/src/calls/twilio-provider.ts +10 -6
- package/src/calls/twilio-routes.ts +90 -76
- package/src/calls/types.ts +1 -1
- package/src/cli/config-commands.ts +334 -0
- package/src/cli/core-commands.ts +776 -0
- package/src/cli/doordash.ts +251 -1
- package/src/cli/ipc-client.ts +82 -0
- package/src/cli/map.ts +246 -0
- package/src/cli/twitter.ts +575 -0
- package/src/cli.ts +7 -5
- package/src/commands/__tests__/cc-command-registry.test.ts +319 -0
- package/src/commands/cc-command-registry.ts +209 -0
- package/src/config/bundled-skills/contacts/SKILL.md +39 -0
- package/src/config/bundled-skills/contacts/TOOLS.json +122 -0
- package/src/config/bundled-skills/contacts/tools/contact-merge.ts +9 -0
- package/src/config/bundled-skills/contacts/tools/contact-search.ts +9 -0
- package/src/config/bundled-skills/contacts/tools/contact-upsert.ts +9 -0
- package/src/config/bundled-skills/document/SKILL.md +18 -0
- package/src/config/bundled-skills/document/TOOLS.json +53 -0
- package/src/config/bundled-skills/document/tools/document-create.ts +9 -0
- package/src/config/bundled-skills/document/tools/document-update.ts +9 -0
- package/src/config/bundled-skills/doordash/SKILL.md +82 -23
- package/src/config/bundled-skills/followups/SKILL.md +32 -0
- package/src/config/bundled-skills/followups/TOOLS.json +100 -0
- package/src/config/bundled-skills/followups/tools/followup-create.ts +9 -0
- package/src/config/bundled-skills/followups/tools/followup-list.ts +9 -0
- package/src/config/bundled-skills/followups/tools/followup-resolve.ts +9 -0
- package/src/config/bundled-skills/image-studio/tools/media-generate-image.ts +1 -23
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +2 -1
- package/src/config/bundled-skills/playbooks/SKILL.md +31 -0
- package/src/config/bundled-skills/playbooks/TOOLS.json +126 -0
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +9 -0
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +9 -0
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +9 -0
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +9 -0
- package/src/config/bundled-skills/reminder/SKILL.md +20 -0
- package/src/config/bundled-skills/reminder/TOOLS.json +67 -0
- package/src/config/bundled-skills/reminder/tools/reminder-cancel.ts +9 -0
- package/src/config/bundled-skills/reminder/tools/reminder-create.ts +9 -0
- package/src/config/bundled-skills/reminder/tools/reminder-list.ts +9 -0
- package/src/config/bundled-skills/schedule/SKILL.md +74 -0
- package/src/config/bundled-skills/schedule/TOOLS.json +135 -0
- package/src/config/bundled-skills/schedule/tools/schedule-create.ts +9 -0
- package/src/config/bundled-skills/schedule/tools/schedule-delete.ts +9 -0
- package/src/config/bundled-skills/schedule/tools/schedule-list.ts +9 -0
- package/src/config/bundled-skills/schedule/tools/schedule-update.ts +9 -0
- package/src/config/bundled-skills/subagent/SKILL.md +25 -0
- package/src/config/bundled-skills/subagent/TOOLS.json +107 -0
- package/src/config/bundled-skills/subagent/tools/subagent-abort.ts +9 -0
- package/src/config/bundled-skills/subagent/tools/subagent-message.ts +9 -0
- package/src/config/bundled-skills/subagent/tools/subagent-read.ts +9 -0
- package/src/config/bundled-skills/subagent/tools/subagent-spawn.ts +9 -0
- package/src/config/bundled-skills/subagent/tools/subagent-status.ts +9 -0
- package/src/config/bundled-skills/tasks/SKILL.md +28 -0
- package/src/config/bundled-skills/tasks/TOOLS.json +256 -0
- package/src/config/bundled-skills/tasks/tools/task-delete.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-list-add.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-list-remove.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-list-show.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-list-update.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-list.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-run.ts +9 -0
- package/src/config/bundled-skills/tasks/tools/task-save.ts +9 -0
- package/src/config/bundled-skills/twitter/SKILL.md +134 -0
- package/src/config/bundled-skills/watcher/SKILL.md +27 -0
- package/src/config/bundled-skills/watcher/TOOLS.json +147 -0
- package/src/config/bundled-skills/watcher/tools/watcher-create.ts +9 -0
- package/src/config/bundled-skills/watcher/tools/watcher-delete.ts +9 -0
- package/src/config/bundled-skills/watcher/tools/watcher-digest.ts +9 -0
- package/src/config/bundled-skills/watcher/tools/watcher-list.ts +9 -0
- package/src/config/bundled-skills/watcher/tools/watcher-update.ts +9 -0
- package/src/config/defaults.ts +33 -0
- package/src/config/loader.ts +4 -1
- package/src/config/schema.ts +161 -1
- package/src/config/system-prompt.ts +61 -16
- package/src/config/templates/IDENTITY.md +7 -0
- package/src/config/types.ts +4 -0
- package/src/contacts/contact-store.ts +4 -4
- package/src/daemon/assistant-attachments.ts +10 -0
- package/src/daemon/classifier.ts +3 -1
- package/src/daemon/computer-use-session.ts +3 -1
- package/src/daemon/date-context.ts +136 -0
- package/src/daemon/handlers/apps.ts +16 -1
- package/src/daemon/handlers/browser.ts +54 -0
- package/src/daemon/handlers/computer-use.ts +7 -1
- package/src/daemon/handlers/config.ts +163 -5
- package/src/daemon/handlers/diagnostics.ts +5 -1
- package/src/daemon/handlers/documents.ts +18 -29
- package/src/daemon/handlers/home-base.ts +5 -1
- package/src/daemon/handlers/index.ts +40 -277
- package/src/daemon/handlers/misc.ts +9 -1
- package/src/daemon/handlers/publish.ts +6 -1
- package/src/daemon/handlers/sessions.ts +65 -12
- package/src/daemon/handlers/shared.ts +36 -1
- package/src/daemon/handlers/signing.ts +37 -0
- package/src/daemon/handlers/skills.ts +20 -6
- package/src/daemon/handlers/subagents.ts +8 -3
- package/src/daemon/handlers/twitter-auth.ts +169 -0
- package/src/daemon/handlers/work-items.ts +384 -68
- package/src/daemon/ipc-contract-inventory.json +28 -4
- package/src/daemon/ipc-contract.ts +133 -37
- package/src/daemon/ipc-protocol.ts +7 -2
- package/src/daemon/lifecycle.ts +21 -0
- package/src/daemon/main.ts +10 -4
- package/src/daemon/ride-shotgun-handler.ts +74 -10
- package/src/daemon/server.ts +143 -26
- package/src/daemon/session-agent-loop.ts +887 -0
- package/src/daemon/session-attachments.ts +28 -5
- package/src/daemon/session-error.ts +24 -3
- package/src/daemon/session-lifecycle.ts +147 -0
- package/src/daemon/session-media-retry.ts +147 -0
- package/src/daemon/session-messaging.ts +145 -0
- package/src/daemon/session-notifiers.ts +164 -0
- package/src/daemon/session-process.ts +2 -2
- package/src/daemon/session-queue-manager.ts +1 -0
- package/src/daemon/session-runtime-assembly.ts +52 -0
- package/src/daemon/session-skill-tools.ts +124 -5
- package/src/daemon/session-slash.ts +3 -0
- package/src/daemon/session-surfaces.ts +77 -2
- package/src/daemon/session-tool-setup.ts +216 -2
- package/src/daemon/session-usage.ts +0 -2
- package/src/daemon/session.ts +114 -1404
- package/src/daemon/video-thumbnail.ts +60 -0
- package/src/doordash/client.ts +121 -27
- package/src/doordash/queries.ts +1 -2
- package/src/export/formatter.ts +3 -1
- package/src/followups/followup-store.ts +4 -2
- package/src/followups/types.ts +6 -0
- package/src/hooks/templates.ts +1 -1
- package/src/index.ts +32 -1153
- package/src/memory/attachments-store.ts +28 -83
- package/src/memory/channel-delivery-store.ts +7 -21
- package/src/memory/clarification-resolver.ts +6 -5
- package/src/memory/contradiction-checker.ts +3 -2
- package/src/memory/conversation-key-store.ts +10 -29
- package/src/memory/conversation-store.ts +2 -1
- package/src/memory/db.ts +96 -2
- package/src/memory/entity-extractor.ts +6 -3
- package/src/memory/items-extractor.ts +5 -4
- package/src/memory/jobs-store.ts +3 -2
- package/src/memory/llm-usage-store.ts +1 -2
- package/src/memory/runs-store.ts +1 -2
- package/src/memory/schema.ts +23 -2
- package/src/messaging/style-analyzer.ts +3 -2
- package/src/messaging/thread-summarizer.ts +8 -12
- package/src/messaging/triage-engine.ts +4 -2
- package/src/providers/openrouter/client.ts +20 -0
- package/src/providers/registry.ts +8 -0
- package/src/runtime/http-server.ts +108 -20
- package/src/runtime/routes/attachment-routes.ts +2 -3
- package/src/runtime/routes/call-routes.ts +140 -0
- package/src/runtime/routes/channel-routes.ts +5 -10
- package/src/runtime/routes/conversation-routes.ts +5 -5
- package/src/runtime/routes/run-routes.ts +2 -2
- package/src/runtime/run-orchestrator.ts +9 -3
- package/src/schedule/recurrence-engine.ts +138 -0
- package/src/schedule/recurrence-types.ts +67 -0
- package/src/schedule/schedule-store.ts +102 -57
- package/src/schedule/scheduler.ts +9 -6
- package/src/security/oauth2.ts +29 -4
- package/src/security/secret-allowlist.ts +46 -0
- package/src/skills/clawhub.ts +1 -1
- package/src/subagent/manager.ts +40 -8
- package/src/swarm/backend-claude-code.ts +64 -9
- package/src/swarm/worker-prompts.ts +2 -1
- package/src/tasks/SPEC.md +34 -28
- package/src/tasks/ephemeral-permissions.ts +16 -7
- package/src/tasks/task-compiler.ts +5 -4
- package/src/tasks/task-runner.ts +10 -5
- package/src/tasks/task-scheduler.ts +1 -1
- package/src/tasks/tool-sanitizer.ts +36 -0
- package/src/tools/assets/search.ts +4 -4
- package/src/tools/browser/api-map.ts +220 -0
- package/src/tools/browser/auto-navigate.ts +270 -0
- package/src/tools/browser/browser-execution.ts +2 -1
- package/src/tools/browser/browser-manager.ts +2 -2
- package/src/tools/browser/network-recorder.ts +5 -4
- package/src/tools/browser/x-auto-navigate.ts +207 -0
- package/src/tools/calls/call-end.ts +17 -67
- package/src/tools/calls/call-start.ts +24 -85
- package/src/tools/calls/call-status.ts +35 -51
- package/src/tools/claude-code/claude-code.ts +77 -11
- package/src/tools/contacts/contact-merge.ts +46 -78
- package/src/tools/contacts/contact-search.ts +35 -79
- package/src/tools/contacts/contact-upsert.ts +35 -108
- package/src/tools/credentials/vault.ts +20 -4
- package/src/tools/document/document-tool.ts +71 -144
- package/src/tools/executor.ts +129 -10
- package/src/tools/followups/followup_create.ts +46 -88
- package/src/tools/followups/followup_list.ts +34 -74
- package/src/tools/followups/followup_resolve.ts +31 -66
- package/src/tools/host-terminal/cli-discover.ts +2 -1
- package/src/tools/host-terminal/host-shell.ts +10 -0
- package/src/tools/memory/handlers.ts +5 -4
- package/src/tools/network/__tests__/web-search.test.ts +427 -0
- package/src/tools/network/script-proxy/__tests__/logging.test.ts +248 -0
- package/src/tools/network/script-proxy/__tests__/policy.test.ts +234 -0
- package/src/tools/network/script-proxy/__tests__/router.test.ts +76 -0
- package/src/tools/network/web-fetch.ts +18 -6
- package/src/tools/playbooks/index.ts +4 -5
- package/src/tools/playbooks/playbook-create.ts +3 -47
- package/src/tools/playbooks/playbook-delete.ts +1 -25
- package/src/tools/playbooks/playbook-list.ts +1 -28
- package/src/tools/playbooks/playbook-update.ts +3 -51
- package/src/tools/reminder/reminder.ts +5 -78
- package/src/tools/schedule/create.ts +69 -74
- package/src/tools/schedule/delete.ts +21 -47
- package/src/tools/schedule/list.ts +55 -74
- package/src/tools/schedule/update.ts +77 -84
- package/src/tools/subagent/abort.ts +29 -58
- package/src/tools/subagent/message.ts +30 -63
- package/src/tools/subagent/read.ts +53 -84
- package/src/tools/subagent/spawn.ts +43 -82
- package/src/tools/subagent/status.ts +42 -71
- package/src/tools/swarm/delegate.ts +2 -1
- package/src/tools/tasks/index.ts +8 -8
- package/src/tools/tasks/task-delete.ts +60 -88
- package/src/tools/tasks/task-list.ts +31 -52
- package/src/tools/tasks/task-run.ts +72 -108
- package/src/tools/tasks/task-save.ts +33 -65
- package/src/tools/tasks/work-item-enqueue.ts +183 -215
- package/src/tools/tasks/work-item-list.ts +33 -63
- package/src/tools/tasks/work-item-remove.ts +45 -97
- package/src/tools/tasks/work-item-update.ts +91 -163
- package/src/tools/terminal/backends/native.ts +3 -1
- package/src/tools/tool-manifest.ts +0 -62
- package/src/tools/types.ts +6 -0
- package/src/tools/ui-surface/definitions.ts +3 -1
- package/src/tools/watch/screen-watch.ts +3 -1
- package/src/tools/watcher/create.ts +52 -98
- package/src/tools/watcher/delete.ts +20 -46
- package/src/tools/watcher/digest.ts +36 -70
- package/src/tools/watcher/list.ts +49 -79
- package/src/tools/watcher/update.ts +45 -91
- package/src/twitter/client.ts +690 -0
- package/src/twitter/session.ts +91 -0
- package/src/usage/types.ts +0 -1
- package/src/util/truncate.ts +6 -0
- package/src/watcher/providers/slack.ts +2 -1
- package/src/watcher/watcher-store.ts +3 -2
- package/src/work-items/work-item-store.ts +27 -2
- package/src/workspace/commit-message-enrichment-service.ts +31 -7
- package/src/workspace/git-service.ts +87 -22
- package/src/workspace/provider-commit-message-generator.ts +242 -0
- package/src/workspace/turn-commit.ts +62 -3
- package/src/tools/contacts/index.ts +0 -4
- package/src/tools/document/index.ts +0 -5
- package/src/tools/followups/index.ts +0 -3
- package/src/tools/subagent/index.ts +0 -5
- /package/src/__tests__/{memory-context-benchmark.test.ts → memory-context-benchmark.benchmark.test.ts} +0 -0
|
@@ -1,62 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
* subagent_abort tool — abort a running subagent.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
6
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
7
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
1
|
+
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
8
2
|
import { getSubagentManager } from '../../subagent/index.js';
|
|
9
3
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
defaultRiskLevel: RiskLevel.Low,
|
|
30
|
-
|
|
31
|
-
getDefinition(): ToolDefinition {
|
|
32
|
-
return definition;
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
async execute(input: Record<string, unknown>, context: ToolContext): Promise<ToolExecutionResult> {
|
|
36
|
-
const subagentId = input.subagent_id as string;
|
|
37
|
-
if (!subagentId) {
|
|
38
|
-
return { content: '"subagent_id" is required.', isError: true };
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const manager = getSubagentManager();
|
|
42
|
-
const sendToClient = context.sendToClient as ((msg: unknown) => void) | undefined;
|
|
43
|
-
const aborted = manager.abort(
|
|
44
|
-
subagentId,
|
|
45
|
-
sendToClient as ((msg: unknown) => void) | undefined,
|
|
46
|
-
context.sessionId,
|
|
47
|
-
{ suppressNotification: true },
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
if (!aborted) {
|
|
51
|
-
return {
|
|
52
|
-
content: `Could not abort subagent "${subagentId}". It may not exist or already be in a terminal state.`,
|
|
53
|
-
isError: true,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
|
|
4
|
+
export async function executeSubagentAbort(
|
|
5
|
+
input: Record<string, unknown>,
|
|
6
|
+
context: ToolContext,
|
|
7
|
+
): Promise<ToolExecutionResult> {
|
|
8
|
+
const subagentId = input.subagent_id as string;
|
|
9
|
+
if (!subagentId) {
|
|
10
|
+
return { content: '"subagent_id" is required.', isError: true };
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const manager = getSubagentManager();
|
|
14
|
+
const sendToClient = context.sendToClient as ((msg: unknown) => void) | undefined;
|
|
15
|
+
const aborted = manager.abort(
|
|
16
|
+
subagentId,
|
|
17
|
+
sendToClient as ((msg: unknown) => void) | undefined,
|
|
18
|
+
context.sessionId,
|
|
19
|
+
{ suppressNotification: true },
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
if (!aborted) {
|
|
57
23
|
return {
|
|
58
|
-
content:
|
|
59
|
-
isError:
|
|
24
|
+
content: `Could not abort subagent "${subagentId}". It may not exist or already be in a terminal state.`,
|
|
25
|
+
isError: true,
|
|
60
26
|
};
|
|
61
|
-
}
|
|
62
|
-
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
content: JSON.stringify({ subagentId, status: 'aborted', message: 'Subagent aborted successfully.' }),
|
|
31
|
+
isError: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -1,72 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
* subagent_message tool — send a follow-up message to a running subagent.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
6
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
7
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
1
|
+
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
8
2
|
import { getSubagentManager } from '../../subagent/index.js';
|
|
9
3
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
subagent_id: {
|
|
17
|
-
type: 'string',
|
|
18
|
-
description: 'The ID of the subagent to send a message to.',
|
|
19
|
-
},
|
|
20
|
-
content: {
|
|
21
|
-
type: 'string',
|
|
22
|
-
description: 'The message content to send to the subagent.',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
required: ['subagent_id', 'content'],
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const subagentMessageTool: Tool = {
|
|
30
|
-
name: 'subagent_message',
|
|
31
|
-
description: definition.description,
|
|
32
|
-
category: 'orchestration',
|
|
33
|
-
defaultRiskLevel: RiskLevel.Low,
|
|
34
|
-
|
|
35
|
-
getDefinition(): ToolDefinition {
|
|
36
|
-
return definition;
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
async execute(input: Record<string, unknown>, context: ToolContext): Promise<ToolExecutionResult> {
|
|
40
|
-
const subagentId = input.subagent_id as string;
|
|
41
|
-
const content = input.content as string;
|
|
4
|
+
export async function executeSubagentMessage(
|
|
5
|
+
input: Record<string, unknown>,
|
|
6
|
+
context: ToolContext,
|
|
7
|
+
): Promise<ToolExecutionResult> {
|
|
8
|
+
const subagentId = input.subagent_id as string;
|
|
9
|
+
const content = input.content as string;
|
|
42
10
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
11
|
+
if (!subagentId || !content) {
|
|
12
|
+
return { content: 'Both "subagent_id" and "content" are required.', isError: true };
|
|
13
|
+
}
|
|
46
14
|
|
|
47
|
-
|
|
15
|
+
const manager = getSubagentManager();
|
|
48
16
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const sent = manager.sendMessage(subagentId, content);
|
|
17
|
+
// Ownership check: only the parent session can message a subagent.
|
|
18
|
+
const state = manager.getState(subagentId);
|
|
19
|
+
if (!state || state.config.parentSessionId !== context.sessionId) {
|
|
20
|
+
return {
|
|
21
|
+
content: `Could not send message to subagent "${subagentId}". It may not exist or be in a terminal state.`,
|
|
22
|
+
isError: true,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
59
25
|
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
content: `Could not send message to subagent "${subagentId}". It may not exist or be in a terminal state.`,
|
|
63
|
-
isError: true,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
26
|
+
const sent = manager.sendMessage(subagentId, content);
|
|
66
27
|
|
|
28
|
+
if (!sent) {
|
|
67
29
|
return {
|
|
68
|
-
content:
|
|
69
|
-
isError:
|
|
30
|
+
content: `Could not send message to subagent "${subagentId}". It may not exist or be in a terminal state.`,
|
|
31
|
+
isError: true,
|
|
70
32
|
};
|
|
71
|
-
}
|
|
72
|
-
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
content: JSON.stringify({ subagentId, message: 'Message sent to subagent.' }),
|
|
37
|
+
isError: false,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -1,98 +1,67 @@
|
|
|
1
|
-
|
|
2
|
-
* subagent_read tool — read the full output from a completed subagent's conversation.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
6
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
7
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
1
|
+
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
8
2
|
import { getSubagentManager, TERMINAL_STATUSES } from '../../subagent/index.js';
|
|
9
3
|
import { getMessages } from '../../memory/conversation-store.js';
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
subagent_id: {
|
|
20
|
-
type: 'string',
|
|
21
|
-
description: 'The ID of the subagent whose output to read.',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
required: ['subagent_id'],
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const subagentReadTool: Tool = {
|
|
29
|
-
name: 'subagent_read',
|
|
30
|
-
description: definition.description,
|
|
31
|
-
category: 'orchestration',
|
|
32
|
-
defaultRiskLevel: RiskLevel.Low,
|
|
33
|
-
|
|
34
|
-
getDefinition(): ToolDefinition {
|
|
35
|
-
return definition;
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
async execute(input: Record<string, unknown>, context: ToolContext): Promise<ToolExecutionResult> {
|
|
39
|
-
const subagentId = input.subagent_id as string;
|
|
40
|
-
if (!subagentId) {
|
|
41
|
-
return { content: '"subagent_id" is required.', isError: true };
|
|
42
|
-
}
|
|
5
|
+
export async function executeSubagentRead(
|
|
6
|
+
input: Record<string, unknown>,
|
|
7
|
+
context: ToolContext,
|
|
8
|
+
): Promise<ToolExecutionResult> {
|
|
9
|
+
const subagentId = input.subagent_id as string;
|
|
10
|
+
if (!subagentId) {
|
|
11
|
+
return { content: '"subagent_id" is required.', isError: true };
|
|
12
|
+
}
|
|
43
13
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
14
|
+
const manager = getSubagentManager();
|
|
15
|
+
const state = manager.getState(subagentId);
|
|
16
|
+
if (!state) {
|
|
17
|
+
return { content: `No subagent found with ID "${subagentId}".`, isError: true };
|
|
18
|
+
}
|
|
49
19
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
20
|
+
// Ownership check: only the parent session can read a subagent's output.
|
|
21
|
+
if (state.config.parentSessionId !== context.sessionId) {
|
|
22
|
+
return { content: `No subagent found with ID "${subagentId}".`, isError: true };
|
|
23
|
+
}
|
|
54
24
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
25
|
+
if (!TERMINAL_STATUSES.has(state.status)) {
|
|
26
|
+
return {
|
|
27
|
+
content: `Subagent "${state.config.label}" is still ${state.status}. Wait for it to finish.`,
|
|
28
|
+
isError: false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
61
31
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
32
|
+
// Read the subagent's conversation messages from DB.
|
|
33
|
+
const dbMessages = getMessages(state.conversationId);
|
|
34
|
+
if (!dbMessages || dbMessages.length === 0) {
|
|
35
|
+
return { content: 'No messages found in subagent conversation.', isError: true };
|
|
36
|
+
}
|
|
67
37
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
38
|
+
// Extract assistant messages only — that's the subagent's output.
|
|
39
|
+
const output: string[] = [];
|
|
40
|
+
for (const msg of dbMessages) {
|
|
41
|
+
if (msg.role !== 'assistant') continue;
|
|
42
|
+
try {
|
|
43
|
+
const content = JSON.parse(msg.content);
|
|
44
|
+
if (Array.isArray(content)) {
|
|
45
|
+
for (const block of content) {
|
|
46
|
+
if (block.type === 'text' && typeof block.text === 'string') {
|
|
47
|
+
output.push(block.text);
|
|
79
48
|
}
|
|
80
|
-
} else if (typeof content === 'string') {
|
|
81
|
-
output.push(content);
|
|
82
49
|
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
output.push(msg.content);
|
|
50
|
+
} else if (typeof content === 'string') {
|
|
51
|
+
output.push(content);
|
|
86
52
|
}
|
|
53
|
+
} catch {
|
|
54
|
+
// Content might be plain text.
|
|
55
|
+
output.push(msg.content);
|
|
87
56
|
}
|
|
57
|
+
}
|
|
88
58
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
59
|
+
if (output.length === 0) {
|
|
60
|
+
return { content: 'Subagent produced no text output.', isError: false };
|
|
61
|
+
}
|
|
92
62
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
};
|
|
63
|
+
return {
|
|
64
|
+
content: output.join('\n\n'),
|
|
65
|
+
isError: false,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -1,85 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
* subagent_spawn tool — lets the parent LLM spawn an autonomous subagent.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
6
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
7
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
1
|
+
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
8
2
|
import { getSubagentManager } from '../../subagent/index.js';
|
|
9
3
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
4
|
+
export async function executeSubagentSpawn(
|
|
5
|
+
input: Record<string, unknown>,
|
|
6
|
+
context: ToolContext,
|
|
7
|
+
): Promise<ToolExecutionResult> {
|
|
8
|
+
const label = input.label as string;
|
|
9
|
+
const objective = input.objective as string;
|
|
10
|
+
const extraContext = input.context as string | undefined;
|
|
11
|
+
|
|
12
|
+
if (!label || !objective) {
|
|
13
|
+
return { content: 'Both "label" and "objective" are required.', isError: true };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const manager = getSubagentManager();
|
|
17
|
+
const sendToClient = context.sendToClient as ((msg: { type: string; [key: string]: unknown }) => void) | undefined;
|
|
18
|
+
if (!sendToClient) {
|
|
19
|
+
return { content: 'No IPC client connected — cannot spawn subagent.', isError: true };
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
const subagentId = await manager.spawn(
|
|
24
|
+
{
|
|
25
|
+
parentSessionId: context.sessionId,
|
|
26
|
+
label,
|
|
27
|
+
objective,
|
|
28
|
+
context: extraContext,
|
|
29
29
|
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const objective = input.objective as string;
|
|
48
|
-
const extraContext = input.context as string | undefined;
|
|
49
|
-
|
|
50
|
-
if (!label || !objective) {
|
|
51
|
-
return { content: 'Both "label" and "objective" are required.', isError: true };
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const manager = getSubagentManager();
|
|
55
|
-
const sendToClient = context.sendToClient as ((msg: { type: string; [key: string]: unknown }) => void) | undefined;
|
|
56
|
-
if (!sendToClient) {
|
|
57
|
-
return { content: 'No IPC client connected — cannot spawn subagent.', isError: true };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
const subagentId = await manager.spawn(
|
|
62
|
-
{
|
|
63
|
-
parentSessionId: context.sessionId,
|
|
64
|
-
label,
|
|
65
|
-
objective,
|
|
66
|
-
context: extraContext,
|
|
67
|
-
},
|
|
68
|
-
sendToClient as (msg: unknown) => void,
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
return {
|
|
72
|
-
content: JSON.stringify({
|
|
73
|
-
subagentId,
|
|
74
|
-
label,
|
|
75
|
-
status: 'pending',
|
|
76
|
-
message: `Subagent "${label}" spawned. You will be notified automatically when it completes or fails — do NOT poll subagent_status. Continue the conversation normally.`,
|
|
77
|
-
}),
|
|
78
|
-
isError: false,
|
|
79
|
-
};
|
|
80
|
-
} catch (err) {
|
|
81
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
82
|
-
return { content: `Failed to spawn subagent: ${msg}`, isError: true };
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
};
|
|
30
|
+
sendToClient as (msg: unknown) => void,
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
content: JSON.stringify({
|
|
35
|
+
subagentId,
|
|
36
|
+
label,
|
|
37
|
+
status: 'pending',
|
|
38
|
+
message: `Subagent "${label}" spawned. You will be notified automatically when it completes or fails — do NOT poll subagent_status. Continue the conversation normally.`,
|
|
39
|
+
}),
|
|
40
|
+
isError: false,
|
|
41
|
+
};
|
|
42
|
+
} catch (err) {
|
|
43
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
44
|
+
return { content: `Failed to spawn subagent: ${msg}`, isError: true };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,74 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
* subagent_status tool — query the status of one or all subagents.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { RiskLevel } from '../../permissions/types.js';
|
|
6
|
-
import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
7
|
-
import type { ToolDefinition } from '../../providers/types.js';
|
|
1
|
+
import type { ToolContext, ToolExecutionResult } from '../types.js';
|
|
8
2
|
import { getSubagentManager } from '../../subagent/index.js';
|
|
9
3
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
required: [],
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const subagentStatusTool: Tool = {
|
|
26
|
-
name: 'subagent_status',
|
|
27
|
-
description: definition.description,
|
|
28
|
-
category: 'orchestration',
|
|
29
|
-
defaultRiskLevel: RiskLevel.Low,
|
|
30
|
-
|
|
31
|
-
getDefinition(): ToolDefinition {
|
|
32
|
-
return definition;
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
async execute(input: Record<string, unknown>, context: ToolContext): Promise<ToolExecutionResult> {
|
|
36
|
-
const subagentId = input.subagent_id as string | undefined;
|
|
37
|
-
const manager = getSubagentManager();
|
|
38
|
-
|
|
39
|
-
if (subagentId) {
|
|
40
|
-
const state = manager.getState(subagentId);
|
|
41
|
-
if (!state || state.config.parentSessionId !== context.sessionId) {
|
|
42
|
-
return { content: `No subagent found with ID "${subagentId}".`, isError: true };
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
content: JSON.stringify({
|
|
46
|
-
subagentId: state.config.id,
|
|
47
|
-
label: state.config.label,
|
|
48
|
-
status: state.status,
|
|
49
|
-
error: state.error,
|
|
50
|
-
createdAt: state.createdAt,
|
|
51
|
-
startedAt: state.startedAt,
|
|
52
|
-
completedAt: state.completedAt,
|
|
53
|
-
usage: state.usage,
|
|
54
|
-
}),
|
|
55
|
-
isError: false,
|
|
56
|
-
};
|
|
4
|
+
export async function executeSubagentStatus(
|
|
5
|
+
input: Record<string, unknown>,
|
|
6
|
+
context: ToolContext,
|
|
7
|
+
): Promise<ToolExecutionResult> {
|
|
8
|
+
const subagentId = input.subagent_id as string | undefined;
|
|
9
|
+
const manager = getSubagentManager();
|
|
10
|
+
|
|
11
|
+
if (subagentId) {
|
|
12
|
+
const state = manager.getState(subagentId);
|
|
13
|
+
if (!state || state.config.parentSessionId !== context.sessionId) {
|
|
14
|
+
return { content: `No subagent found with ID "${subagentId}".`, isError: true };
|
|
57
15
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
16
|
+
return {
|
|
17
|
+
content: JSON.stringify({
|
|
18
|
+
subagentId: state.config.id,
|
|
19
|
+
label: state.config.label,
|
|
20
|
+
status: state.status,
|
|
21
|
+
error: state.error,
|
|
22
|
+
createdAt: state.createdAt,
|
|
23
|
+
startedAt: state.startedAt,
|
|
24
|
+
completedAt: state.completedAt,
|
|
25
|
+
usage: state.usage,
|
|
26
|
+
}),
|
|
27
|
+
isError: false,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// List all subagents for this parent session.
|
|
32
|
+
const children = manager.getChildrenOf(context.sessionId);
|
|
33
|
+
if (children.length === 0) {
|
|
34
|
+
return { content: 'No subagents found for this session.', isError: false };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const summary = children.map((s) => ({
|
|
38
|
+
subagentId: s.config.id,
|
|
39
|
+
label: s.config.label,
|
|
40
|
+
status: s.status,
|
|
41
|
+
error: s.error,
|
|
42
|
+
}));
|
|
43
|
+
|
|
44
|
+
return { content: JSON.stringify(summary), isError: false };
|
|
45
|
+
}
|
|
@@ -3,6 +3,7 @@ import type { Tool, ToolContext, ToolExecutionResult } from '../types.js';
|
|
|
3
3
|
import type { ToolDefinition } from '../../providers/types.js';
|
|
4
4
|
import { getConfig } from '../../config/loader.js';
|
|
5
5
|
import { getLogger } from '../../util/logger.js';
|
|
6
|
+
import { truncate } from '../../util/truncate.js';
|
|
6
7
|
import { getFailoverProvider } from '../../providers/registry.js';
|
|
7
8
|
import { resolveSwarmLimits } from '../../swarm/limits.js';
|
|
8
9
|
import { generatePlan } from '../../swarm/router-planner.js';
|
|
@@ -94,7 +95,7 @@ export const swarmDelegateTool: Tool = {
|
|
|
94
95
|
|
|
95
96
|
context.onOutput?.(`Plan: ${plan.tasks.length} tasks\n`);
|
|
96
97
|
for (const task of plan.tasks) {
|
|
97
|
-
context.onOutput?.(` - [${task.role}] ${task.id}: ${task.objective
|
|
98
|
+
context.onOutput?.(` - [${task.role}] ${task.id}: ${truncate(task.objective, 80)}\n`);
|
|
98
99
|
}
|
|
99
100
|
context.onOutput?.('\nExecuting...\n');
|
|
100
101
|
|
package/src/tools/tasks/index.ts
CHANGED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
* comments, logs, and developer-facing docs.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
20
|
+
export { executeTaskSave } from './task-save.js';
|
|
21
|
+
export { executeTaskRun } from './task-run.js';
|
|
22
|
+
export { executeTaskList } from './task-list.js';
|
|
23
|
+
export { executeTaskDelete } from './task-delete.js';
|
|
24
|
+
export { executeTaskListShow } from './work-item-list.js';
|
|
25
|
+
export { executeTaskListAdd } from './work-item-enqueue.js';
|
|
26
|
+
export { executeTaskListUpdate } from './work-item-update.js';
|
|
27
|
+
export { executeTaskListRemove } from './work-item-remove.js';
|