@tt-a1i/hive 1.0.0 → 1.1.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/CHANGELOG.md +34 -0
- package/README.en.md +18 -15
- package/README.md +9 -7
- package/dist/bin/team.cmd +0 -0
- package/dist/src/cli/hive.js +0 -1
- package/dist/src/cli/team.js +2 -1
- package/dist/src/server/agent-command-resolver.js +0 -1
- package/dist/src/server/agent-launch-cache.js +0 -1
- package/dist/src/server/agent-launch-resolver.js +0 -1
- package/dist/src/server/agent-manager-support.js +0 -1
- package/dist/src/server/agent-manager.js +0 -1
- package/dist/src/server/agent-run-bootstrap.js +0 -1
- package/dist/src/server/agent-run-exit-handler.js +0 -1
- package/dist/src/server/agent-run-start-context.js +0 -1
- package/dist/src/server/agent-run-starter.js +0 -1
- package/dist/src/server/agent-run-store.js +0 -1
- package/dist/src/server/agent-run-sync.js +0 -1
- package/dist/src/server/agent-runtime-active-run.js +0 -1
- package/dist/src/server/agent-runtime-close.js +0 -1
- package/dist/src/server/agent-runtime-contract.js +0 -1
- package/dist/src/server/agent-runtime-flow-adapter.js +0 -1
- package/dist/src/server/agent-runtime-list-runs.js +0 -1
- package/dist/src/server/agent-runtime-ports.js +0 -1
- package/dist/src/server/agent-runtime-stop-run.js +0 -1
- package/dist/src/server/agent-runtime-types.js +0 -1
- package/dist/src/server/agent-runtime.js +0 -1
- package/dist/src/server/agent-session-store.js +0 -1
- package/dist/src/server/agent-startup-instructions.js +0 -1
- package/dist/src/server/agent-stdin-dispatcher.d.ts +4 -0
- package/dist/src/server/agent-stdin-dispatcher.js +37 -27
- package/dist/src/server/agent-tokens.js +0 -1
- package/dist/src/server/app-state-store.js +0 -1
- package/dist/src/server/app.js +0 -1
- package/dist/src/server/claude-command-defaults.js +0 -1
- package/dist/src/server/claude-session-coordinator.js +0 -1
- package/dist/src/server/claude-session-support.js +0 -1
- package/dist/src/server/command-preset-defaults.js +0 -1
- package/dist/src/server/command-preset-store.js +0 -1
- package/dist/src/server/dispatch-ledger-serializer.js +0 -1
- package/dist/src/server/dispatch-ledger-store.js +0 -1
- package/dist/src/server/env-sync-message.js +0 -1
- package/dist/src/server/fs-browse.js +0 -1
- package/dist/src/server/fs-pick-folder.js +0 -1
- package/dist/src/server/fs-sandbox.js +0 -1
- package/dist/src/server/hive-team-guidance.d.ts +31 -0
- package/dist/src/server/hive-team-guidance.js +80 -1
- package/dist/src/server/http-errors.js +0 -1
- package/dist/src/server/live-run-registry.js +0 -1
- package/dist/src/server/local-request-guard.js +0 -1
- package/dist/src/server/message-log-store.js +0 -1
- package/dist/src/server/orchestrator-autostart.js +0 -1
- package/dist/src/server/orchestrator-launch.js +0 -1
- package/dist/src/server/package-version.js +0 -1
- package/dist/src/server/post-start-input-writer.js +0 -1
- package/dist/src/server/preset-launch-support.js +0 -1
- package/dist/src/server/pty-output-bus.js +0 -1
- package/dist/src/server/recovery-summary.js +0 -1
- package/dist/src/server/restart-policy-support.js +0 -1
- package/dist/src/server/restart-policy.js +0 -1
- package/dist/src/server/role-template-store.js +0 -1
- package/dist/src/server/role-templates.js +0 -1
- package/dist/src/server/route-helpers.js +0 -1
- package/dist/src/server/route-types.js +0 -1
- package/dist/src/server/routes-dispatches.js +0 -1
- package/dist/src/server/routes-fs.js +0 -1
- package/dist/src/server/routes-runtime.js +32 -1
- package/dist/src/server/routes-settings.js +0 -1
- package/dist/src/server/routes-tasks.js +0 -1
- package/dist/src/server/routes-team.js +0 -1
- package/dist/src/server/routes-ui.js +0 -1
- package/dist/src/server/routes-version.js +0 -1
- package/dist/src/server/routes-workspaces.js +0 -1
- package/dist/src/server/routes.js +0 -1
- package/dist/src/server/runtime-database.js +0 -1
- package/dist/src/server/runtime-message-builders.js +0 -1
- package/dist/src/server/runtime-restart-policy.js +0 -1
- package/dist/src/server/runtime-store-helpers.d.ts +10 -0
- package/dist/src/server/runtime-store-helpers.js +49 -9
- package/dist/src/server/runtime-store.d.ts +2 -0
- package/dist/src/server/runtime-store.js +8 -6
- package/dist/src/server/session-capture-claude.js +0 -1
- package/dist/src/server/session-capture-codex.js +0 -1
- package/dist/src/server/session-capture-gemini.js +0 -1
- package/dist/src/server/session-capture-opencode.js +0 -1
- package/dist/src/server/session-capture.js +0 -1
- package/dist/src/server/settings-store.js +0 -1
- package/dist/src/server/sqlite-schema-v10.js +0 -1
- package/dist/src/server/sqlite-schema-v11.js +0 -1
- package/dist/src/server/sqlite-schema-v12.js +0 -1
- package/dist/src/server/sqlite-schema-v13.js +0 -1
- package/dist/src/server/sqlite-schema-v14.js +0 -1
- package/dist/src/server/sqlite-schema-v15.js +0 -1
- package/dist/src/server/sqlite-schema-v16.js +0 -1
- package/dist/src/server/sqlite-schema-v17.js +0 -1
- package/dist/src/server/sqlite-schema-v18.js +0 -1
- package/dist/src/server/sqlite-schema-v5.js +0 -1
- package/dist/src/server/sqlite-schema-v7.js +0 -1
- package/dist/src/server/sqlite-schema-v8.js +0 -1
- package/dist/src/server/sqlite-schema-v9.js +0 -1
- package/dist/src/server/sqlite-schema.js +0 -1
- package/dist/src/server/startup-command-parser.js +0 -1
- package/dist/src/server/system-message.js +0 -1
- package/dist/src/server/tasks-file-watcher.js +2 -2
- package/dist/src/server/tasks-file.d.ts +10 -0
- package/dist/src/server/tasks-file.js +20 -1
- package/dist/src/server/tasks-websocket-server.js +0 -1
- package/dist/src/server/team-authz.js +0 -1
- package/dist/src/server/team-list-enrichment.js +0 -1
- package/dist/src/server/team-list-serializer.js +0 -1
- package/dist/src/server/team-operations.js +0 -1
- package/dist/src/server/terminal-flow-control.js +0 -1
- package/dist/src/server/terminal-protocol.js +0 -1
- package/dist/src/server/terminal-state-mirror.js +0 -1
- package/dist/src/server/terminal-stream-hub.js +0 -1
- package/dist/src/server/terminal-ws-server.js +0 -1
- package/dist/src/server/ui-auth-helpers.js +0 -1
- package/dist/src/server/ui-auth.js +0 -1
- package/dist/src/server/version-service.js +0 -1
- package/dist/src/server/worker-output-tracker.js +0 -1
- package/dist/src/server/workspace-path-validation.js +0 -1
- package/dist/src/server/workspace-shell-runtime.d.ts +29 -0
- package/dist/src/server/workspace-shell-runtime.js +179 -0
- package/dist/src/server/workspace-store-contract.js +0 -1
- package/dist/src/server/workspace-store-hydration.js +0 -1
- package/dist/src/server/workspace-store-mutations.js +0 -1
- package/dist/src/server/workspace-store-support.js +0 -1
- package/dist/src/server/workspace-store.js +0 -1
- package/dist/src/shared/types.js +0 -1
- package/package.json +1 -1
- package/web/dist/assets/index-DzIJktYZ.css +1 -0
- package/web/dist/assets/index-Fm7PMK8m.js +66 -0
- package/web/dist/index.html +3 -2
- package/web/dist/sounds/LICENSE-KENNEY.txt +22 -0
- package/web/dist/sounds/hive-beacon.ogg +0 -0
- package/web/dist/sounds/hive-cascade.ogg +0 -0
- package/web/dist/sounds/hive-chime.ogg +0 -0
- package/web/dist/sounds/hive-ping.ogg +0 -0
- package/web/dist/sounds/hive-resolve.ogg +0 -0
- package/web/dist/sounds/hive-soft.ogg +0 -0
- package/dist/src/cli/hive.js.map +0 -1
- package/dist/src/cli/team.js.map +0 -1
- package/dist/src/server/agent-command-resolver.js.map +0 -1
- package/dist/src/server/agent-launch-cache.js.map +0 -1
- package/dist/src/server/agent-launch-resolver.js.map +0 -1
- package/dist/src/server/agent-manager-support.js.map +0 -1
- package/dist/src/server/agent-manager.js.map +0 -1
- package/dist/src/server/agent-run-bootstrap.js.map +0 -1
- package/dist/src/server/agent-run-exit-handler.js.map +0 -1
- package/dist/src/server/agent-run-start-context.js.map +0 -1
- package/dist/src/server/agent-run-starter.js.map +0 -1
- package/dist/src/server/agent-run-store.js.map +0 -1
- package/dist/src/server/agent-run-sync.js.map +0 -1
- package/dist/src/server/agent-runtime-active-run.js.map +0 -1
- package/dist/src/server/agent-runtime-close.js.map +0 -1
- package/dist/src/server/agent-runtime-contract.js.map +0 -1
- package/dist/src/server/agent-runtime-flow-adapter.js.map +0 -1
- package/dist/src/server/agent-runtime-list-runs.js.map +0 -1
- package/dist/src/server/agent-runtime-ports.js.map +0 -1
- package/dist/src/server/agent-runtime-stop-run.js.map +0 -1
- package/dist/src/server/agent-runtime-types.js.map +0 -1
- package/dist/src/server/agent-runtime.js.map +0 -1
- package/dist/src/server/agent-session-store.js.map +0 -1
- package/dist/src/server/agent-startup-instructions.js.map +0 -1
- package/dist/src/server/agent-stdin-dispatcher.js.map +0 -1
- package/dist/src/server/agent-tokens.js.map +0 -1
- package/dist/src/server/app-state-store.js.map +0 -1
- package/dist/src/server/app.js.map +0 -1
- package/dist/src/server/claude-command-defaults.js.map +0 -1
- package/dist/src/server/claude-session-coordinator.js.map +0 -1
- package/dist/src/server/claude-session-support.js.map +0 -1
- package/dist/src/server/command-preset-defaults.js.map +0 -1
- package/dist/src/server/command-preset-store.js.map +0 -1
- package/dist/src/server/dispatch-ledger-serializer.js.map +0 -1
- package/dist/src/server/dispatch-ledger-store.js.map +0 -1
- package/dist/src/server/env-sync-message.js.map +0 -1
- package/dist/src/server/fs-browse.js.map +0 -1
- package/dist/src/server/fs-pick-folder.js.map +0 -1
- package/dist/src/server/fs-sandbox.js.map +0 -1
- package/dist/src/server/hive-team-guidance.js.map +0 -1
- package/dist/src/server/http-errors.js.map +0 -1
- package/dist/src/server/live-run-registry.js.map +0 -1
- package/dist/src/server/local-request-guard.js.map +0 -1
- package/dist/src/server/message-log-store.js.map +0 -1
- package/dist/src/server/orchestrator-autostart.js.map +0 -1
- package/dist/src/server/orchestrator-launch.js.map +0 -1
- package/dist/src/server/package-version.js.map +0 -1
- package/dist/src/server/post-start-input-writer.js.map +0 -1
- package/dist/src/server/preset-launch-support.js.map +0 -1
- package/dist/src/server/pty-output-bus.js.map +0 -1
- package/dist/src/server/recovery-summary.js.map +0 -1
- package/dist/src/server/restart-policy-support.js.map +0 -1
- package/dist/src/server/restart-policy.js.map +0 -1
- package/dist/src/server/role-template-store.js.map +0 -1
- package/dist/src/server/role-templates.js.map +0 -1
- package/dist/src/server/route-helpers.js.map +0 -1
- package/dist/src/server/route-types.js.map +0 -1
- package/dist/src/server/routes-dispatches.js.map +0 -1
- package/dist/src/server/routes-fs.js.map +0 -1
- package/dist/src/server/routes-runtime.js.map +0 -1
- package/dist/src/server/routes-settings.js.map +0 -1
- package/dist/src/server/routes-tasks.js.map +0 -1
- package/dist/src/server/routes-team.js.map +0 -1
- package/dist/src/server/routes-ui.js.map +0 -1
- package/dist/src/server/routes-version.js.map +0 -1
- package/dist/src/server/routes-workspaces.js.map +0 -1
- package/dist/src/server/routes.js.map +0 -1
- package/dist/src/server/runtime-database.js.map +0 -1
- package/dist/src/server/runtime-message-builders.js.map +0 -1
- package/dist/src/server/runtime-restart-policy.js.map +0 -1
- package/dist/src/server/runtime-store-helpers.js.map +0 -1
- package/dist/src/server/runtime-store.js.map +0 -1
- package/dist/src/server/session-capture-claude.js.map +0 -1
- package/dist/src/server/session-capture-codex.js.map +0 -1
- package/dist/src/server/session-capture-gemini.js.map +0 -1
- package/dist/src/server/session-capture-opencode.js.map +0 -1
- package/dist/src/server/session-capture.js.map +0 -1
- package/dist/src/server/settings-store.js.map +0 -1
- package/dist/src/server/sqlite-schema-v10.js.map +0 -1
- package/dist/src/server/sqlite-schema-v11.js.map +0 -1
- package/dist/src/server/sqlite-schema-v12.js.map +0 -1
- package/dist/src/server/sqlite-schema-v13.js.map +0 -1
- package/dist/src/server/sqlite-schema-v14.js.map +0 -1
- package/dist/src/server/sqlite-schema-v15.js.map +0 -1
- package/dist/src/server/sqlite-schema-v16.js.map +0 -1
- package/dist/src/server/sqlite-schema-v17.js.map +0 -1
- package/dist/src/server/sqlite-schema-v18.js.map +0 -1
- package/dist/src/server/sqlite-schema-v5.js.map +0 -1
- package/dist/src/server/sqlite-schema-v7.js.map +0 -1
- package/dist/src/server/sqlite-schema-v8.js.map +0 -1
- package/dist/src/server/sqlite-schema-v9.js.map +0 -1
- package/dist/src/server/sqlite-schema.js.map +0 -1
- package/dist/src/server/startup-command-parser.js.map +0 -1
- package/dist/src/server/system-message.js.map +0 -1
- package/dist/src/server/tasks-file-watcher.js.map +0 -1
- package/dist/src/server/tasks-file.js.map +0 -1
- package/dist/src/server/tasks-websocket-server.js.map +0 -1
- package/dist/src/server/team-authz.js.map +0 -1
- package/dist/src/server/team-list-enrichment.js.map +0 -1
- package/dist/src/server/team-list-serializer.js.map +0 -1
- package/dist/src/server/team-operations.js.map +0 -1
- package/dist/src/server/terminal-flow-control.js.map +0 -1
- package/dist/src/server/terminal-protocol.js.map +0 -1
- package/dist/src/server/terminal-state-mirror.js.map +0 -1
- package/dist/src/server/terminal-stream-hub.js.map +0 -1
- package/dist/src/server/terminal-ws-server.js.map +0 -1
- package/dist/src/server/ui-auth-helpers.js.map +0 -1
- package/dist/src/server/ui-auth.js.map +0 -1
- package/dist/src/server/version-service.js.map +0 -1
- package/dist/src/server/worker-output-tracker.js.map +0 -1
- package/dist/src/server/workspace-path-validation.js.map +0 -1
- package/dist/src/server/workspace-store-contract.js.map +0 -1
- package/dist/src/server/workspace-store-hydration.js.map +0 -1
- package/dist/src/server/workspace-store-mutations.js.map +0 -1
- package/dist/src/server/workspace-store-support.js.map +0 -1
- package/dist/src/server/workspace-store.js.map +0 -1
- package/dist/src/shared/types.js.map +0 -1
- package/web/dist/assets/index-BBxhzJnD.js +0 -80
- package/web/dist/assets/index-DcCBlqhh.css +0 -1
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tail reminder appended to every message that flows INTO the orchestrator
|
|
3
|
+
* (worker reports, worker status updates, user chat input). Re-anchors the
|
|
4
|
+
* role + dispatch syntax after the agent's CLI internally compacts the
|
|
5
|
+
* conversation transcript (`/compact` in CC, auto-summarize in Codex, etc.)
|
|
6
|
+
* and forgets the original startup instructions.
|
|
7
|
+
*
|
|
8
|
+
* Format choice (XML envelope, position at message tail, action-menu wording)
|
|
9
|
+
* follows a peer LLM-agent review: static `[Hive]` prefixes get filtered as
|
|
10
|
+
* banner noise after a few occurrences, but `<...-system-reminder>` tags
|
|
11
|
+
* mirror the out-of-band envelope LLMs are trained to attend to; placement
|
|
12
|
+
* at the tail (right before the agent's reply turn) maximizes recency
|
|
13
|
+
* weighting; phrasing as a two-option action menu is more actionable than
|
|
14
|
+
* abstract identity restatement.
|
|
15
|
+
*/
|
|
16
|
+
export const ORCHESTRATOR_REMINDER_TAIL = '<hive-system-reminder>\n' +
|
|
17
|
+
'You are the Hive Orchestrator. Reply by either: (a) `team send "<worker-name>" "<task>"` to dispatch follow-up work to a Hive worker, or (b) plain text to the user. Never call your CLI\'s built-in subagent tools (Task / Explore / etc.) — they bypass Hive and will not appear in the UI.\n' +
|
|
18
|
+
'</hive-system-reminder>';
|
|
19
|
+
/**
|
|
20
|
+
* Tail reminder appended to dispatches sent TO a worker. Reinforces the
|
|
21
|
+
* worker identity (so the agent does not regress into its normal CLI
|
|
22
|
+
* persona that would call nested subagents) plus the exact report syntax
|
|
23
|
+
* with dispatch_id pre-bound.
|
|
24
|
+
*/
|
|
25
|
+
export const buildWorkerReminderTail = (dispatchId) => '<hive-system-reminder>\n' +
|
|
26
|
+
`You are a Hive Worker. Do not launch nested CLI subagents (Task / Explore / etc.) — finish the task yourself. When the task is done, blocked, or has failed, report with: \`team report "<result>" --dispatch ${dispatchId}\` (or \`team report --stdin --dispatch ${dispatchId}\` for long bodies).\n` +
|
|
27
|
+
'</hive-system-reminder>';
|
|
1
28
|
const ORCHESTRATOR_RULES = [
|
|
2
29
|
'Hive worker 是右侧卡片里的真实 CLI agent,不是你所在 CLI 的内置 subagent / 子代理工具。',
|
|
3
30
|
'当 user 要你“让 worker ... / 给 worker 找活 / 让成员处理”时,先执行 `team list` 确认真实 Hive worker。',
|
|
@@ -16,4 +43,56 @@ const WORKER_RULES = [
|
|
|
16
43
|
'`team report` / `team status` 报错时会同时打印 USAGE,按 USAGE 修正参数后重试;不要把 `team --help` 当成"自我探查"的替身。',
|
|
17
44
|
];
|
|
18
45
|
export const getHiveTeamRules = (agent) => agent.role === 'orchestrator' ? ORCHESTRATOR_RULES : WORKER_RULES;
|
|
19
|
-
|
|
46
|
+
const renderRules = (rules) => rules.map((line) => `- ${line}`).join('\n');
|
|
47
|
+
/**
|
|
48
|
+
* Workspace-local protocol cheat sheet written to `.hive/PROTOCOL.md`. Agents
|
|
49
|
+
* are explicitly trained to look at project root markdown when confused, so
|
|
50
|
+
* keeping a single canonical doc next to `.hive/tasks.md` doubles as a
|
|
51
|
+
* "cat-recover" path when both the startup prompt and the in-message
|
|
52
|
+
* reminders fail to anchor.
|
|
53
|
+
*/
|
|
54
|
+
export const buildProtocolDoc = () => [
|
|
55
|
+
'# Hive Team Protocol',
|
|
56
|
+
'',
|
|
57
|
+
'This file is auto-generated by Hive on every workspace open. If you',
|
|
58
|
+
'(the agent) lost context after `/compact` or an internal summarization,',
|
|
59
|
+
'`cat .hive/PROTOCOL.md` to re-anchor.',
|
|
60
|
+
'',
|
|
61
|
+
'## You are running inside Hive',
|
|
62
|
+
'',
|
|
63
|
+
'Hive is a multi-CLI-agent workbench. Each agent in this workspace is a',
|
|
64
|
+
'real CLI process (Claude Code / Codex / OpenCode / Gemini). All',
|
|
65
|
+
'inter-agent communication goes through the `team` CLI binary on your',
|
|
66
|
+
'PATH.',
|
|
67
|
+
'',
|
|
68
|
+
'## Roles',
|
|
69
|
+
'',
|
|
70
|
+
'- **Orchestrator** — talks to the user, plans tasks, dispatches to workers',
|
|
71
|
+
'- **Worker** (Coder / Reviewer / Tester / custom) — executes one assigned task and reports back',
|
|
72
|
+
'',
|
|
73
|
+
'## `team` CLI — orchestrator',
|
|
74
|
+
'',
|
|
75
|
+
'- `team list` — show workspace members and their status',
|
|
76
|
+
'- `team send "<worker-name>" "<task>"` — dispatch to a worker by name (never id)',
|
|
77
|
+
'',
|
|
78
|
+
'## `team` CLI — worker',
|
|
79
|
+
'',
|
|
80
|
+
'- `team report "<result>" --dispatch <id>` — report task outcome',
|
|
81
|
+
"- `team report --stdin --dispatch <id>` — same, body from stdin (use `<<'EOF'` heredoc for long bodies)",
|
|
82
|
+
'- `team status "<state>"` — update orchestrator when no dispatch is active',
|
|
83
|
+
'',
|
|
84
|
+
'## Orchestrator rules',
|
|
85
|
+
'',
|
|
86
|
+
renderRules(ORCHESTRATOR_RULES),
|
|
87
|
+
'',
|
|
88
|
+
'## Worker rules',
|
|
89
|
+
'',
|
|
90
|
+
renderRules(WORKER_RULES),
|
|
91
|
+
'',
|
|
92
|
+
'## In-message reminders',
|
|
93
|
+
'',
|
|
94
|
+
'Every message you receive in this workspace ends with a short',
|
|
95
|
+
'`<hive-system-reminder>` block carrying the minimum syntax you need',
|
|
96
|
+
'right now. If something is missing from that block, re-read this file.',
|
|
97
|
+
'',
|
|
98
|
+
].join('\n');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getRequiredParam, readJsonBody, route, sendJson } from './route-helpers.js';
|
|
2
2
|
import { requireUiTokenFromRequest } from './ui-auth-helpers.js';
|
|
3
|
+
import { getWorkspaceShellAgentId } from './workspace-shell-runtime.js';
|
|
3
4
|
export const runtimeRoutes = [
|
|
4
5
|
route('GET', '/api/ui/workspaces/:workspaceId/runs', ({ params, request, response, store }) => {
|
|
5
6
|
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id is required');
|
|
@@ -9,6 +10,37 @@ export const runtimeRoutes = [
|
|
|
9
10
|
requireUiTokenFromRequest(request, store.validateUiToken);
|
|
10
11
|
sendJson(response, 200, store.listTerminalRuns(workspaceId));
|
|
11
12
|
}),
|
|
13
|
+
route('POST', '/api/workspaces/:workspaceId/shell/start', async ({ params, request, response, store }) => {
|
|
14
|
+
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id is required');
|
|
15
|
+
if (!workspaceId) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
requireUiTokenFromRequest(request, store.validateUiToken);
|
|
19
|
+
const run = await store.startWorkspaceShell(workspaceId);
|
|
20
|
+
const summary = store
|
|
21
|
+
.listTerminalRuns(workspaceId)
|
|
22
|
+
.find((terminalRun) => terminalRun.run_id === run.runId);
|
|
23
|
+
sendJson(response, 201, {
|
|
24
|
+
agent_id: getWorkspaceShellAgentId(workspaceId),
|
|
25
|
+
agent_name: summary?.agent_name ?? 'Shell',
|
|
26
|
+
run_id: run.runId,
|
|
27
|
+
status: run.status,
|
|
28
|
+
});
|
|
29
|
+
}),
|
|
30
|
+
route('DELETE', '/api/workspaces/:workspaceId/shell/:runId', ({ params, request, response, store }) => {
|
|
31
|
+
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id and run id are required');
|
|
32
|
+
const runId = getRequiredParam(response, params, 'runId', 'Workspace id and run id are required');
|
|
33
|
+
if (!workspaceId || !runId) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
requireUiTokenFromRequest(request, store.validateUiToken);
|
|
37
|
+
if (!store.closeWorkspaceShell(workspaceId, runId)) {
|
|
38
|
+
sendJson(response, 404, { error: 'Shell run not found' });
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
response.statusCode = 204;
|
|
42
|
+
response.end();
|
|
43
|
+
}),
|
|
12
44
|
route('POST', '/api/workspaces/:workspaceId/agents/:agentId/config', async ({ params, request, response, store }) => {
|
|
13
45
|
const workspaceId = getRequiredParam(response, params, 'workspaceId', 'Workspace id and agent id are required');
|
|
14
46
|
const agentId = getRequiredParam(response, params, 'agentId', 'Workspace id and agent id are required');
|
|
@@ -43,4 +75,3 @@ export const runtimeRoutes = [
|
|
|
43
75
|
sendJson(response, 200, store.getLiveRun(runId));
|
|
44
76
|
}),
|
|
45
77
|
];
|
|
46
|
-
//# sourceMappingURL=routes-runtime.js.map
|
|
@@ -12,6 +12,7 @@ import { createTasksFileWatcher } from './tasks-file-watcher.js';
|
|
|
12
12
|
import { createTeamOperations } from './team-operations.js';
|
|
13
13
|
import { createUiAuth } from './ui-auth.js';
|
|
14
14
|
import { type WorkerOutputTracker } from './worker-output-tracker.js';
|
|
15
|
+
import { createWorkspaceShellRuntime } from './workspace-shell-runtime.js';
|
|
15
16
|
import { createWorkspaceStore } from './workspace-store.js';
|
|
16
17
|
export interface RuntimeStoreServices {
|
|
17
18
|
agentRunStore: ReturnType<typeof createAgentRunStore>;
|
|
@@ -20,6 +21,7 @@ export interface RuntimeStoreServices {
|
|
|
20
21
|
dispatchLedgerStore: ReturnType<typeof createDispatchLedgerStore>;
|
|
21
22
|
messageLogStore: ReturnType<typeof createMessageLogStore>;
|
|
22
23
|
settings: ReturnType<typeof createSettingsStore>;
|
|
24
|
+
shellRuntime: ReturnType<typeof createWorkspaceShellRuntime>;
|
|
23
25
|
tasksFileWatcher: ReturnType<typeof createTasksFileWatcher>;
|
|
24
26
|
tasksFileWatchCallbacks: Set<(workspaceId: string, content: string) => void>;
|
|
25
27
|
tasksFileService: ReturnType<typeof createTasksFileService>;
|
|
@@ -41,6 +43,9 @@ export declare const createRuntimeStoreLifecycle: ({ agentManager, services, }:
|
|
|
41
43
|
close: () => Promise<void>;
|
|
42
44
|
configureAgentLaunch: (workspaceId: string, agentId: string, input: AgentLaunchConfigInput) => void;
|
|
43
45
|
peekAgentLaunchConfig: (workspaceId: string, agentId: string) => AgentLaunchConfigInput | undefined;
|
|
46
|
+
deleteWorkspaceShell: (workspaceId: string) => void;
|
|
47
|
+
closeWorkspaceShell: (workspaceId: string, runId: string) => boolean;
|
|
48
|
+
getLiveRun: (runId: string) => LiveAgentRun;
|
|
44
49
|
getPtyOutputBus: () => PtyOutputBus;
|
|
45
50
|
listTerminalRuns: (workspaceId: string) => {
|
|
46
51
|
agent_id: string;
|
|
@@ -51,6 +56,7 @@ export declare const createRuntimeStoreLifecycle: ({ agentManager, services, }:
|
|
|
51
56
|
startAgent: (workspaceId: string, agentId: string, input: {
|
|
52
57
|
hivePort: string;
|
|
53
58
|
}) => Promise<LiveAgentRun>;
|
|
59
|
+
startWorkspaceShell: (workspaceId: string) => Promise<LiveAgentRun>;
|
|
54
60
|
autostartConfiguredAgents: (input: {
|
|
55
61
|
hivePort: string;
|
|
56
62
|
}) => Promise<({
|
|
@@ -69,5 +75,9 @@ export declare const createRuntimeStoreLifecycle: ({ agentManager, services, }:
|
|
|
69
75
|
registerTasksListener: (listener: (workspaceId: string, content: string) => void) => () => void;
|
|
70
76
|
startWorkspaceWatch: (workspaceId: string) => Promise<void>;
|
|
71
77
|
writeRunInput: (runId: string, text: string) => void;
|
|
78
|
+
pauseTerminalRun: (runId: string) => void;
|
|
79
|
+
resizeTerminalRun: (runId: string, cols: number, rows: number) => void;
|
|
80
|
+
resumeTerminalRun: (runId: string) => void;
|
|
81
|
+
stopTerminalRun: (runId: string) => void;
|
|
72
82
|
};
|
|
73
83
|
export {};
|
|
@@ -12,6 +12,7 @@ import { createTasksFileWatcher } from './tasks-file-watcher.js';
|
|
|
12
12
|
import { createTeamOperations } from './team-operations.js';
|
|
13
13
|
import { createUiAuth } from './ui-auth.js';
|
|
14
14
|
import { createWorkerOutputTracker } from './worker-output-tracker.js';
|
|
15
|
+
import { createWorkspaceShellRuntime } from './workspace-shell-runtime.js';
|
|
15
16
|
import { createWorkspaceStore } from './workspace-store.js';
|
|
16
17
|
const notifyTasksUpdated = (callbacks, workspaceId, content) => {
|
|
17
18
|
for (const callback of callbacks) {
|
|
@@ -33,6 +34,7 @@ export const createRuntimeStoreServices = (options = {}) => {
|
|
|
33
34
|
},
|
|
34
35
|
});
|
|
35
36
|
const uiAuth = createUiAuth();
|
|
37
|
+
const shellRuntime = createWorkspaceShellRuntime(options.agentManager);
|
|
36
38
|
agentRunStore.markUnfinishedRunsStale();
|
|
37
39
|
const workspaceStore = createWorkspaceStore(db, dispatchLedgerStore.listOpenDispatchKinds());
|
|
38
40
|
const startExistingWorkspaceWatches = () => {
|
|
@@ -74,6 +76,7 @@ export const createRuntimeStoreServices = (options = {}) => {
|
|
|
74
76
|
dispatchLedgerStore,
|
|
75
77
|
messageLogStore,
|
|
76
78
|
settings,
|
|
79
|
+
shellRuntime,
|
|
77
80
|
tasksFileWatcher,
|
|
78
81
|
tasksFileWatchCallbacks,
|
|
79
82
|
tasksFileService,
|
|
@@ -137,6 +140,7 @@ export const createRuntimeStoreLifecycle = ({ agentManager, services, }) => {
|
|
|
137
140
|
};
|
|
138
141
|
return {
|
|
139
142
|
close: async () => {
|
|
143
|
+
services.shellRuntime.close();
|
|
140
144
|
await services.agentRuntime.close();
|
|
141
145
|
await services.tasksFileWatcher.close();
|
|
142
146
|
services.workerOutputTracker?.closeAll();
|
|
@@ -148,20 +152,29 @@ export const createRuntimeStoreLifecycle = ({ agentManager, services, }) => {
|
|
|
148
152
|
services.agentRuntime.configureAgentLaunch(workspaceId, agentId, input);
|
|
149
153
|
},
|
|
150
154
|
peekAgentLaunchConfig: (workspaceId, agentId) => services.agentRuntime.peekAgentLaunchConfig(workspaceId, agentId),
|
|
155
|
+
deleteWorkspaceShell: (workspaceId) => {
|
|
156
|
+
services.shellRuntime.deleteWorkspace(workspaceId);
|
|
157
|
+
},
|
|
158
|
+
closeWorkspaceShell: (workspaceId, runId) => services.shellRuntime.closeRun(workspaceId, runId),
|
|
159
|
+
getLiveRun: (runId) => services.shellRuntime.getLiveRun(runId) ?? services.agentRuntime.getLiveRun(runId),
|
|
151
160
|
getPtyOutputBus: () => {
|
|
152
161
|
if (!agentManager)
|
|
153
162
|
throw new Error('Agent manager is required for PTY output subscriptions');
|
|
154
163
|
return agentManager.getOutputBus();
|
|
155
164
|
},
|
|
156
|
-
listTerminalRuns: (workspaceId) =>
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
listTerminalRuns: (workspaceId) => [
|
|
166
|
+
...services.workspaceStore.getWorkspaceSnapshot(workspaceId).agents.flatMap((agent) => {
|
|
167
|
+
const run = services.agentRuntime.getActiveRunByAgentId(workspaceId, agent.id);
|
|
168
|
+
if (!run)
|
|
169
|
+
return [];
|
|
170
|
+
return [
|
|
171
|
+
{ agent_id: agent.id, agent_name: agent.name, run_id: run.runId, status: run.status },
|
|
172
|
+
];
|
|
173
|
+
}),
|
|
174
|
+
...services.shellRuntime.listTerminalRuns(workspaceId),
|
|
175
|
+
],
|
|
164
176
|
startAgent,
|
|
177
|
+
startWorkspaceShell: (workspaceId) => services.shellRuntime.start(services.workspaceStore.getWorkspaceSnapshot(workspaceId).summary),
|
|
165
178
|
autostartConfiguredAgents,
|
|
166
179
|
registerTasksListener: (listener) => {
|
|
167
180
|
services.tasksFileWatchCallbacks.add(listener);
|
|
@@ -176,8 +189,35 @@ export const createRuntimeStoreLifecycle = ({ agentManager, services, }) => {
|
|
|
176
189
|
writeRunInput: (runId, text) => {
|
|
177
190
|
if (!agentManager)
|
|
178
191
|
throw new Error('Agent manager is required for PTY stdin writes');
|
|
192
|
+
if (services.shellRuntime.hasRun(runId)) {
|
|
193
|
+
services.shellRuntime.writeInput(runId, text);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
179
196
|
agentManager.writeInput(runId, text);
|
|
180
197
|
},
|
|
198
|
+
pauseTerminalRun: (runId) => {
|
|
199
|
+
if (services.shellRuntime.hasRun(runId))
|
|
200
|
+
services.shellRuntime.pauseRun(runId);
|
|
201
|
+
else
|
|
202
|
+
services.agentRuntime.pauseRun(runId);
|
|
203
|
+
},
|
|
204
|
+
resizeTerminalRun: (runId, cols, rows) => {
|
|
205
|
+
if (services.shellRuntime.hasRun(runId))
|
|
206
|
+
services.shellRuntime.resizeRun(runId, cols, rows);
|
|
207
|
+
else
|
|
208
|
+
services.agentRuntime.resizeAgentRun(runId, cols, rows);
|
|
209
|
+
},
|
|
210
|
+
resumeTerminalRun: (runId) => {
|
|
211
|
+
if (services.shellRuntime.hasRun(runId))
|
|
212
|
+
services.shellRuntime.resumeRun(runId);
|
|
213
|
+
else
|
|
214
|
+
services.agentRuntime.resumeRun(runId);
|
|
215
|
+
},
|
|
216
|
+
stopTerminalRun: (runId) => {
|
|
217
|
+
if (services.shellRuntime.hasRun(runId))
|
|
218
|
+
services.shellRuntime.stopRun(runId);
|
|
219
|
+
else
|
|
220
|
+
services.agentRuntime.stopAgentRun(runId);
|
|
221
|
+
},
|
|
181
222
|
};
|
|
182
223
|
};
|
|
183
|
-
//# sourceMappingURL=runtime-store-helpers.js.map
|
|
@@ -34,6 +34,8 @@ interface RuntimeStore {
|
|
|
34
34
|
run_id: string;
|
|
35
35
|
status: string;
|
|
36
36
|
}>;
|
|
37
|
+
closeWorkspaceShell: (workspaceId: string, runId: string) => boolean;
|
|
38
|
+
startWorkspaceShell: (workspaceId: string) => Promise<LiveAgentRun>;
|
|
37
39
|
configureAgentLaunch: (workspaceId: string, agentId: string, input: AgentLaunchConfigInput) => void;
|
|
38
40
|
peekAgentLaunchConfig: (workspaceId: string, agentId: string) => AgentLaunchConfigInput | undefined;
|
|
39
41
|
startAgent: (workspaceId: string, agentId: string, input: StartAgentOptions) => Promise<LiveAgentRun>;
|
|
@@ -19,6 +19,7 @@ export const createRuntimeStore = (options = {}) => {
|
|
|
19
19
|
listWorkspaces: () => services.workspaceStore.listWorkspaces(),
|
|
20
20
|
deleteWorkspace: async (workspaceId) => {
|
|
21
21
|
const workspace = services.workspaceStore.getWorkspaceSnapshot(workspaceId);
|
|
22
|
+
lifecycle.deleteWorkspaceShell(workspaceId);
|
|
22
23
|
for (const agent of workspace.agents) {
|
|
23
24
|
const activeRun = services.agentRuntime.getActiveRunByAgentId(workspaceId, agent.id);
|
|
24
25
|
if (activeRun)
|
|
@@ -59,26 +60,27 @@ export const createRuntimeStore = (options = {}) => {
|
|
|
59
60
|
getAgent: (workspaceId, agentId) => services.workspaceStore.getAgent(workspaceId, agentId),
|
|
60
61
|
getPtyOutputBus: lifecycle.getPtyOutputBus,
|
|
61
62
|
listTerminalRuns: lifecycle.listTerminalRuns,
|
|
63
|
+
closeWorkspaceShell: lifecycle.closeWorkspaceShell,
|
|
62
64
|
configureAgentLaunch: lifecycle.configureAgentLaunch,
|
|
63
65
|
peekAgentLaunchConfig: lifecycle.peekAgentLaunchConfig,
|
|
64
66
|
startAgent: lifecycle.startAgent,
|
|
65
67
|
autostartConfiguredAgents: lifecycle.autostartConfiguredAgents,
|
|
66
68
|
startWorkspaceWatch: lifecycle.startWorkspaceWatch,
|
|
67
|
-
|
|
69
|
+
startWorkspaceShell: lifecycle.startWorkspaceShell,
|
|
70
|
+
getLiveRun: lifecycle.getLiveRun,
|
|
68
71
|
getActiveRunByAgentId: (workspaceId, agentId) => services.agentRuntime.getActiveRunByAgentId(workspaceId, agentId),
|
|
69
72
|
registerTasksListener: lifecycle.registerTasksListener,
|
|
70
73
|
listAgentRuns: (agentId) => services.agentRuntime.listAgentRuns(agentId),
|
|
71
74
|
listMessagesForRecovery: (workspaceId, sinceMs) => services.messageLogStore.listMessagesForRecovery(workspaceId, sinceMs),
|
|
72
75
|
peekAgentToken: (agentId) => services.agentRuntime.peekAgentToken(agentId),
|
|
73
|
-
pauseTerminalRun:
|
|
74
|
-
resizeAgentRun:
|
|
75
|
-
resumeTerminalRun:
|
|
76
|
+
pauseTerminalRun: lifecycle.pauseTerminalRun,
|
|
77
|
+
resizeAgentRun: lifecycle.resizeTerminalRun,
|
|
78
|
+
resumeTerminalRun: lifecycle.resumeTerminalRun,
|
|
76
79
|
settings: services.settings,
|
|
77
80
|
writeRunInput: lifecycle.writeRunInput,
|
|
78
81
|
getUiToken: () => services.uiAuth.getToken(),
|
|
79
|
-
stopAgentRun:
|
|
82
|
+
stopAgentRun: lifecycle.stopTerminalRun,
|
|
80
83
|
validateAgentToken: (agentId, token) => services.agentRuntime.validateAgentToken(agentId, token),
|
|
81
84
|
validateUiToken: (token) => services.uiAuth.validate(token),
|
|
82
85
|
};
|
|
83
86
|
};
|
|
84
|
-
//# sourceMappingURL=runtime-store.js.map
|
|
@@ -105,4 +105,3 @@ export const captureCodexSessionId = async (cwd, knownSessionIds, onCapture, tim
|
|
|
105
105
|
});
|
|
106
106
|
};
|
|
107
107
|
export const codexSessionStoreExists = (codexHome = getDefaultCodexHome()) => existsSync(join(codexHome, 'sessions'));
|
|
108
|
-
//# sourceMappingURL=session-capture-codex.js.map
|
|
@@ -11,4 +11,3 @@ export const applySchemaVersion10 = (db) => {
|
|
|
11
11
|
updatePreset.run(preset.resumeArgsTemplate, preset.sessionIdCapture ? JSON.stringify(preset.sessionIdCapture) : null, preset.yoloArgsTemplate ? JSON.stringify(preset.yoloArgsTemplate) : null, now, preset.id);
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=sqlite-schema-v10.js.map
|