@tt-a1i/hive 0.6.0-alpha.0
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 +12 -0
- package/LICENSE +202 -0
- package/README.md +175 -0
- package/SECURITY.md +48 -0
- package/dist/bin/team +7 -0
- package/dist/bin/team.cmd +2 -0
- package/dist/src/cli/hive.d.ts +9 -0
- package/dist/src/cli/hive.js +104 -0
- package/dist/src/cli/hive.js.map +1 -0
- package/dist/src/cli/team.d.ts +1 -0
- package/dist/src/cli/team.js +137 -0
- package/dist/src/cli/team.js.map +1 -0
- package/dist/src/server/agent-command-resolver.d.ts +8 -0
- package/dist/src/server/agent-command-resolver.js +72 -0
- package/dist/src/server/agent-command-resolver.js.map +1 -0
- package/dist/src/server/agent-launch-cache.d.ts +20 -0
- package/dist/src/server/agent-launch-cache.js +55 -0
- package/dist/src/server/agent-launch-cache.js.map +1 -0
- package/dist/src/server/agent-manager-support.d.ts +7 -0
- package/dist/src/server/agent-manager-support.js +68 -0
- package/dist/src/server/agent-manager-support.js.map +1 -0
- package/dist/src/server/agent-manager.d.ts +51 -0
- package/dist/src/server/agent-manager.js +92 -0
- package/dist/src/server/agent-manager.js.map +1 -0
- package/dist/src/server/agent-run-bootstrap.d.ts +62 -0
- package/dist/src/server/agent-run-bootstrap.js +64 -0
- package/dist/src/server/agent-run-bootstrap.js.map +1 -0
- package/dist/src/server/agent-run-exit-handler.d.ts +8 -0
- package/dist/src/server/agent-run-exit-handler.js +27 -0
- package/dist/src/server/agent-run-exit-handler.js.map +1 -0
- package/dist/src/server/agent-run-start-context.d.ts +24 -0
- package/dist/src/server/agent-run-start-context.js +2 -0
- package/dist/src/server/agent-run-start-context.js.map +1 -0
- package/dist/src/server/agent-run-starter.d.ts +23 -0
- package/dist/src/server/agent-run-starter.js +117 -0
- package/dist/src/server/agent-run-starter.js.map +1 -0
- package/dist/src/server/agent-run-store.d.ts +47 -0
- package/dist/src/server/agent-run-store.js +131 -0
- package/dist/src/server/agent-run-store.js.map +1 -0
- package/dist/src/server/agent-run-sync.d.ts +10 -0
- package/dist/src/server/agent-run-sync.js +25 -0
- package/dist/src/server/agent-run-sync.js.map +1 -0
- package/dist/src/server/agent-runtime-active-run.d.ts +3 -0
- package/dist/src/server/agent-runtime-active-run.js +11 -0
- package/dist/src/server/agent-runtime-active-run.js.map +1 -0
- package/dist/src/server/agent-runtime-close.d.ts +4 -0
- package/dist/src/server/agent-runtime-close.js +15 -0
- package/dist/src/server/agent-runtime-close.js.map +1 -0
- package/dist/src/server/agent-runtime-contract.d.ts +31 -0
- package/dist/src/server/agent-runtime-contract.js +2 -0
- package/dist/src/server/agent-runtime-contract.js.map +1 -0
- package/dist/src/server/agent-runtime-flow-adapter.d.ts +10 -0
- package/dist/src/server/agent-runtime-flow-adapter.js +15 -0
- package/dist/src/server/agent-runtime-flow-adapter.js.map +1 -0
- package/dist/src/server/agent-runtime-list-runs.d.ts +3 -0
- package/dist/src/server/agent-runtime-list-runs.js +19 -0
- package/dist/src/server/agent-runtime-list-runs.js.map +1 -0
- package/dist/src/server/agent-runtime-ports.d.ts +22 -0
- package/dist/src/server/agent-runtime-ports.js +2 -0
- package/dist/src/server/agent-runtime-ports.js.map +1 -0
- package/dist/src/server/agent-runtime-stop-run.d.ts +4 -0
- package/dist/src/server/agent-runtime-stop-run.js +17 -0
- package/dist/src/server/agent-runtime-stop-run.js.map +1 -0
- package/dist/src/server/agent-runtime-types.d.ts +4 -0
- package/dist/src/server/agent-runtime-types.js +2 -0
- package/dist/src/server/agent-runtime-types.js.map +1 -0
- package/dist/src/server/agent-runtime.d.ts +8 -0
- package/dist/src/server/agent-runtime.js +101 -0
- package/dist/src/server/agent-runtime.js.map +1 -0
- package/dist/src/server/agent-session-store.d.ts +7 -0
- package/dist/src/server/agent-session-store.js +52 -0
- package/dist/src/server/agent-session-store.js.map +1 -0
- package/dist/src/server/agent-startup-instructions.d.ts +13 -0
- package/dist/src/server/agent-startup-instructions.js +26 -0
- package/dist/src/server/agent-startup-instructions.js.map +1 -0
- package/dist/src/server/agent-stdin-dispatcher.d.ts +19 -0
- package/dist/src/server/agent-stdin-dispatcher.js +60 -0
- package/dist/src/server/agent-stdin-dispatcher.js.map +1 -0
- package/dist/src/server/agent-tokens.d.ts +15 -0
- package/dist/src/server/agent-tokens.js +26 -0
- package/dist/src/server/agent-tokens.js.map +1 -0
- package/dist/src/server/app-state-store.d.ts +10 -0
- package/dist/src/server/app-state-store.js +15 -0
- package/dist/src/server/app-state-store.js.map +1 -0
- package/dist/src/server/app.d.ts +14 -0
- package/dist/src/server/app.js +118 -0
- package/dist/src/server/app.js.map +1 -0
- package/dist/src/server/claude-command-defaults.d.ts +1 -0
- package/dist/src/server/claude-command-defaults.js +6 -0
- package/dist/src/server/claude-command-defaults.js.map +1 -0
- package/dist/src/server/claude-session-coordinator.d.ts +10 -0
- package/dist/src/server/claude-session-coordinator.js +69 -0
- package/dist/src/server/claude-session-coordinator.js.map +1 -0
- package/dist/src/server/claude-session-support.d.ts +1 -0
- package/dist/src/server/claude-session-support.js +2 -0
- package/dist/src/server/claude-session-support.js.map +1 -0
- package/dist/src/server/command-preset-defaults.d.ts +11 -0
- package/dist/src/server/command-preset-defaults.js +52 -0
- package/dist/src/server/command-preset-defaults.js.map +1 -0
- package/dist/src/server/command-preset-store.d.ts +49 -0
- package/dist/src/server/command-preset-store.js +90 -0
- package/dist/src/server/command-preset-store.js.map +1 -0
- package/dist/src/server/dispatch-ledger-serializer.d.ts +15 -0
- package/dist/src/server/dispatch-ledger-serializer.js +15 -0
- package/dist/src/server/dispatch-ledger-serializer.js.map +1 -0
- package/dist/src/server/dispatch-ledger-store.d.ts +45 -0
- package/dist/src/server/dispatch-ledger-store.js +196 -0
- package/dist/src/server/dispatch-ledger-store.js.map +1 -0
- package/dist/src/server/env-sync-message.d.ts +9 -0
- package/dist/src/server/env-sync-message.js +30 -0
- package/dist/src/server/env-sync-message.js.map +1 -0
- package/dist/src/server/fs-browse.d.ts +25 -0
- package/dist/src/server/fs-browse.js +130 -0
- package/dist/src/server/fs-browse.js.map +1 -0
- package/dist/src/server/fs-pick-folder.d.ts +25 -0
- package/dist/src/server/fs-pick-folder.js +132 -0
- package/dist/src/server/fs-pick-folder.js.map +1 -0
- package/dist/src/server/fs-sandbox.d.ts +13 -0
- package/dist/src/server/fs-sandbox.js +26 -0
- package/dist/src/server/fs-sandbox.js.map +1 -0
- package/dist/src/server/hive-team-guidance.d.ts +2 -0
- package/dist/src/server/hive-team-guidance.js +14 -0
- package/dist/src/server/hive-team-guidance.js.map +1 -0
- package/dist/src/server/http-errors.d.ts +16 -0
- package/dist/src/server/http-errors.js +33 -0
- package/dist/src/server/http-errors.js.map +1 -0
- package/dist/src/server/live-run-registry.d.ts +21 -0
- package/dist/src/server/live-run-registry.js +53 -0
- package/dist/src/server/live-run-registry.js.map +1 -0
- package/dist/src/server/message-log-store.d.ts +48 -0
- package/dist/src/server/message-log-store.js +144 -0
- package/dist/src/server/message-log-store.js.map +1 -0
- package/dist/src/server/orchestrator-autostart.d.ts +30 -0
- package/dist/src/server/orchestrator-autostart.js +103 -0
- package/dist/src/server/orchestrator-autostart.js.map +1 -0
- package/dist/src/server/orchestrator-launch.d.ts +22 -0
- package/dist/src/server/orchestrator-launch.js +75 -0
- package/dist/src/server/orchestrator-launch.js.map +1 -0
- package/dist/src/server/post-start-input-writer.d.ts +6 -0
- package/dist/src/server/post-start-input-writer.js +118 -0
- package/dist/src/server/post-start-input-writer.js.map +1 -0
- package/dist/src/server/preset-launch-support.d.ts +6 -0
- package/dist/src/server/preset-launch-support.js +67 -0
- package/dist/src/server/preset-launch-support.js.map +1 -0
- package/dist/src/server/pty-output-bus.d.ts +8 -0
- package/dist/src/server/pty-output-bus.js +33 -0
- package/dist/src/server/pty-output-bus.js.map +1 -0
- package/dist/src/server/recovery-summary.d.ts +10 -0
- package/dist/src/server/recovery-summary.js +89 -0
- package/dist/src/server/recovery-summary.js.map +1 -0
- package/dist/src/server/restart-policy-support.d.ts +23 -0
- package/dist/src/server/restart-policy-support.js +12 -0
- package/dist/src/server/restart-policy-support.js.map +1 -0
- package/dist/src/server/restart-policy.d.ts +14 -0
- package/dist/src/server/restart-policy.js +42 -0
- package/dist/src/server/restart-policy.js.map +1 -0
- package/dist/src/server/role-template-store.d.ts +44 -0
- package/dist/src/server/role-template-store.js +71 -0
- package/dist/src/server/role-template-store.js.map +1 -0
- package/dist/src/server/role-templates.d.ts +7 -0
- package/dist/src/server/role-templates.js +55 -0
- package/dist/src/server/role-templates.js.map +1 -0
- package/dist/src/server/route-helpers.d.ts +7 -0
- package/dist/src/server/route-helpers.js +48 -0
- package/dist/src/server/route-helpers.js.map +1 -0
- package/dist/src/server/route-types.d.ts +58 -0
- package/dist/src/server/route-types.js +2 -0
- package/dist/src/server/route-types.js.map +1 -0
- package/dist/src/server/routes-dispatches.d.ts +2 -0
- package/dist/src/server/routes-dispatches.js +53 -0
- package/dist/src/server/routes-dispatches.js.map +1 -0
- package/dist/src/server/routes-fs.d.ts +2 -0
- package/dist/src/server/routes-fs.js +25 -0
- package/dist/src/server/routes-fs.js.map +1 -0
- package/dist/src/server/routes-runtime.d.ts +2 -0
- package/dist/src/server/routes-runtime.js +46 -0
- package/dist/src/server/routes-runtime.js.map +1 -0
- package/dist/src/server/routes-settings.d.ts +2 -0
- package/dist/src/server/routes-settings.js +124 -0
- package/dist/src/server/routes-settings.js.map +1 -0
- package/dist/src/server/routes-tasks.d.ts +2 -0
- package/dist/src/server/routes-tasks.js +25 -0
- package/dist/src/server/routes-tasks.js.map +1 -0
- package/dist/src/server/routes-team.d.ts +2 -0
- package/dist/src/server/routes-team.js +50 -0
- package/dist/src/server/routes-team.js.map +1 -0
- package/dist/src/server/routes-ui.d.ts +2 -0
- package/dist/src/server/routes-ui.js +8 -0
- package/dist/src/server/routes-ui.js.map +1 -0
- package/dist/src/server/routes-workspaces.d.ts +2 -0
- package/dist/src/server/routes-workspaces.js +154 -0
- package/dist/src/server/routes-workspaces.js.map +1 -0
- package/dist/src/server/routes.d.ts +6 -0
- package/dist/src/server/routes.js +36 -0
- package/dist/src/server/routes.js.map +1 -0
- package/dist/src/server/runtime-database.d.ts +2 -0
- package/dist/src/server/runtime-database.js +13 -0
- package/dist/src/server/runtime-database.js.map +1 -0
- package/dist/src/server/runtime-message-builders.d.ts +6 -0
- package/dist/src/server/runtime-message-builders.js +52 -0
- package/dist/src/server/runtime-message-builders.js.map +1 -0
- package/dist/src/server/runtime-restart-policy.d.ts +14 -0
- package/dist/src/server/runtime-restart-policy.js +11 -0
- package/dist/src/server/runtime-restart-policy.js.map +1 -0
- package/dist/src/server/runtime-store-helpers.d.ts +71 -0
- package/dist/src/server/runtime-store-helpers.js +174 -0
- package/dist/src/server/runtime-store-helpers.js.map +1 -0
- package/dist/src/server/runtime-store.d.ts +70 -0
- package/dist/src/server/runtime-store.js +82 -0
- package/dist/src/server/runtime-store.js.map +1 -0
- package/dist/src/server/session-capture-claude.d.ts +11 -0
- package/dist/src/server/session-capture-claude.js +78 -0
- package/dist/src/server/session-capture-claude.js.map +1 -0
- package/dist/src/server/session-capture-codex.d.ts +5 -0
- package/dist/src/server/session-capture-codex.js +72 -0
- package/dist/src/server/session-capture-codex.js.map +1 -0
- package/dist/src/server/session-capture-gemini.d.ts +5 -0
- package/dist/src/server/session-capture-gemini.js +80 -0
- package/dist/src/server/session-capture-gemini.js.map +1 -0
- package/dist/src/server/session-capture-opencode.d.ts +4 -0
- package/dist/src/server/session-capture-opencode.js +43 -0
- package/dist/src/server/session-capture-opencode.js.map +1 -0
- package/dist/src/server/session-capture.d.ts +71 -0
- package/dist/src/server/session-capture.js +92 -0
- package/dist/src/server/session-capture.js.map +1 -0
- package/dist/src/server/settings-store.d.ts +19 -0
- package/dist/src/server/settings-store.js +22 -0
- package/dist/src/server/settings-store.js.map +1 -0
- package/dist/src/server/sqlite-schema-v10.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v10.js +14 -0
- package/dist/src/server/sqlite-schema-v10.js.map +1 -0
- package/dist/src/server/sqlite-schema-v11.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v11.js +11 -0
- package/dist/src/server/sqlite-schema-v11.js.map +1 -0
- package/dist/src/server/sqlite-schema-v12.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v12.js +22 -0
- package/dist/src/server/sqlite-schema-v12.js.map +1 -0
- package/dist/src/server/sqlite-schema-v13.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v13.js +5 -0
- package/dist/src/server/sqlite-schema-v13.js.map +1 -0
- package/dist/src/server/sqlite-schema-v14.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v14.js +85 -0
- package/dist/src/server/sqlite-schema-v14.js.map +1 -0
- package/dist/src/server/sqlite-schema-v5.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v5.js +62 -0
- package/dist/src/server/sqlite-schema-v5.js.map +1 -0
- package/dist/src/server/sqlite-schema-v7.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v7.js +71 -0
- package/dist/src/server/sqlite-schema-v7.js.map +1 -0
- package/dist/src/server/sqlite-schema-v8.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v8.js +7 -0
- package/dist/src/server/sqlite-schema-v8.js.map +1 -0
- package/dist/src/server/sqlite-schema-v9.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v9.js +7 -0
- package/dist/src/server/sqlite-schema-v9.js.map +1 -0
- package/dist/src/server/sqlite-schema.d.ts +3 -0
- package/dist/src/server/sqlite-schema.js +185 -0
- package/dist/src/server/sqlite-schema.js.map +1 -0
- package/dist/src/server/system-message.d.ts +1 -0
- package/dist/src/server/system-message.js +2 -0
- package/dist/src/server/system-message.js.map +1 -0
- package/dist/src/server/tasks-file-watcher.d.ts +8 -0
- package/dist/src/server/tasks-file-watcher.js +60 -0
- package/dist/src/server/tasks-file-watcher.js.map +1 -0
- package/dist/src/server/tasks-file.d.ts +11 -0
- package/dist/src/server/tasks-file.js +33 -0
- package/dist/src/server/tasks-file.js.map +1 -0
- package/dist/src/server/tasks-websocket-server.d.ts +7 -0
- package/dist/src/server/tasks-websocket-server.js +72 -0
- package/dist/src/server/tasks-websocket-server.js.map +1 -0
- package/dist/src/server/team-authz.d.ts +13 -0
- package/dist/src/server/team-authz.js +33 -0
- package/dist/src/server/team-authz.js.map +1 -0
- package/dist/src/server/team-list-serializer.d.ts +8 -0
- package/dist/src/server/team-list-serializer.js +8 -0
- package/dist/src/server/team-list-serializer.js.map +1 -0
- package/dist/src/server/team-operations.d.ts +41 -0
- package/dist/src/server/team-operations.js +105 -0
- package/dist/src/server/team-operations.js.map +1 -0
- package/dist/src/server/terminal-flow-control.d.ts +19 -0
- package/dist/src/server/terminal-flow-control.js +117 -0
- package/dist/src/server/terminal-flow-control.js.map +1 -0
- package/dist/src/server/terminal-protocol.d.ts +29 -0
- package/dist/src/server/terminal-protocol.js +42 -0
- package/dist/src/server/terminal-protocol.js.map +1 -0
- package/dist/src/server/terminal-state-mirror.d.ts +15 -0
- package/dist/src/server/terminal-state-mirror.js +47 -0
- package/dist/src/server/terminal-state-mirror.js.map +1 -0
- package/dist/src/server/terminal-stream-hub.d.ts +9 -0
- package/dist/src/server/terminal-stream-hub.js +179 -0
- package/dist/src/server/terminal-stream-hub.js.map +1 -0
- package/dist/src/server/terminal-ws-server.d.ts +5 -0
- package/dist/src/server/terminal-ws-server.js +85 -0
- package/dist/src/server/terminal-ws-server.js.map +1 -0
- package/dist/src/server/ui-auth-helpers.d.ts +4 -0
- package/dist/src/server/ui-auth-helpers.js +23 -0
- package/dist/src/server/ui-auth-helpers.js.map +1 -0
- package/dist/src/server/ui-auth.d.ts +5 -0
- package/dist/src/server/ui-auth.js +13 -0
- package/dist/src/server/ui-auth.js.map +1 -0
- package/dist/src/server/workspace-store-contract.d.ts +28 -0
- package/dist/src/server/workspace-store-contract.js +2 -0
- package/dist/src/server/workspace-store-contract.js.map +1 -0
- package/dist/src/server/workspace-store-hydration.d.ts +5 -0
- package/dist/src/server/workspace-store-hydration.js +64 -0
- package/dist/src/server/workspace-store-hydration.js.map +1 -0
- package/dist/src/server/workspace-store-mutations.d.ts +13 -0
- package/dist/src/server/workspace-store-mutations.js +49 -0
- package/dist/src/server/workspace-store-mutations.js.map +1 -0
- package/dist/src/server/workspace-store-support.d.ts +29 -0
- package/dist/src/server/workspace-store-support.js +25 -0
- package/dist/src/server/workspace-store-support.js.map +1 -0
- package/dist/src/server/workspace-store.d.ts +5 -0
- package/dist/src/server/workspace-store.js +114 -0
- package/dist/src/server/workspace-store.js.map +1 -0
- package/dist/src/shared/types.d.ts +36 -0
- package/dist/src/shared/types.js +2 -0
- package/dist/src/shared/types.js.map +1 -0
- package/package.json +108 -0
- package/scripts/fix-runtime-artifacts.mjs +33 -0
- package/web/dist/assets/addon-fit-DX4qG4td.js +1 -0
- package/web/dist/assets/index-CjlaoOoA.css +1 -0
- package/web/dist/assets/index-CwdRvXrs.js +63 -0
- package/web/dist/assets/xterm-B-qIQCd3.js +16 -0
- package/web/dist/favicon.svg +58 -0
- package/web/dist/index.html +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hive-team-guidance.js","sourceRoot":"","sources":["../../../src/server/hive-team-guidance.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,+EAA+E;IAC/E,kFAAkF;IAClF,4EAA4E;IAC5E,iFAAiF;IACjF,wHAAwH;CACzH,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,yDAAyD;IACzD,0EAA0E;IAC1E,2CAA2C;CAC5C,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiC,EAAE,EAAE,CACpE,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class HttpError extends Error {
|
|
2
|
+
readonly statusCode: number;
|
|
3
|
+
constructor(statusCode: number, message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class PtyInactiveError extends HttpError {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class UnauthorizedError extends HttpError {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class ForbiddenError extends HttpError {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class ConflictError extends HttpError {
|
|
15
|
+
constructor(message: string);
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export class HttpError extends Error {
|
|
2
|
+
statusCode;
|
|
3
|
+
constructor(statusCode, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'HttpError';
|
|
6
|
+
this.statusCode = statusCode;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class PtyInactiveError extends HttpError {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(409, message);
|
|
12
|
+
this.name = 'PtyInactiveError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class UnauthorizedError extends HttpError {
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(401, message);
|
|
18
|
+
this.name = 'UnauthorizedError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class ForbiddenError extends HttpError {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(403, message);
|
|
24
|
+
this.name = 'ForbiddenError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class ConflictError extends HttpError {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(409, message);
|
|
30
|
+
this.name = 'ConflictError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=http-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-errors.js","sourceRoot":"","sources":["../../../src/server/http-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,UAAU,CAAQ;IAE3B,YAAY,UAAkB,EAAE,OAAe;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,SAAS;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LiveAgentRun } from './agent-runtime-types.js';
|
|
2
|
+
export interface RunExitEntry {
|
|
3
|
+
promise: Promise<void>;
|
|
4
|
+
resolve: () => void;
|
|
5
|
+
}
|
|
6
|
+
export interface LiveRunRegistry {
|
|
7
|
+
add: (run: LiveAgentRun) => void;
|
|
8
|
+
createExitEntry: (runId: string) => void;
|
|
9
|
+
deleteExitEntry: (runId: string) => void;
|
|
10
|
+
get: (runId: string) => LiveAgentRun | undefined;
|
|
11
|
+
getExitEntry: (runId: string) => RunExitEntry | undefined;
|
|
12
|
+
clearPendingExitCode: (runId: string) => void;
|
|
13
|
+
getPendingExitCode: (runId: string) => number | null | undefined;
|
|
14
|
+
hasPendingExitCode: (runId: string) => boolean;
|
|
15
|
+
list: () => LiveAgentRun[];
|
|
16
|
+
listExitEntries: () => RunExitEntry[];
|
|
17
|
+
remove: (runId: string) => void;
|
|
18
|
+
resolveExit: (runId: string) => void;
|
|
19
|
+
setPendingExitCode: (runId: string, exitCode: number | null) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare const createLiveRunRegistry: () => LiveRunRegistry;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const createLiveRunRegistry = () => {
|
|
2
|
+
const liveRuns = new Map();
|
|
3
|
+
const pendingExitCodes = new Map();
|
|
4
|
+
const runExitPromises = new Map();
|
|
5
|
+
return {
|
|
6
|
+
add(run) {
|
|
7
|
+
liveRuns.set(run.runId, run);
|
|
8
|
+
},
|
|
9
|
+
createExitEntry(runId) {
|
|
10
|
+
let resolve = () => { };
|
|
11
|
+
const promise = new Promise((nextResolve) => {
|
|
12
|
+
resolve = nextResolve;
|
|
13
|
+
});
|
|
14
|
+
runExitPromises.set(runId, { promise, resolve });
|
|
15
|
+
},
|
|
16
|
+
deleteExitEntry(runId) {
|
|
17
|
+
runExitPromises.delete(runId);
|
|
18
|
+
},
|
|
19
|
+
clearPendingExitCode(runId) {
|
|
20
|
+
pendingExitCodes.delete(runId);
|
|
21
|
+
},
|
|
22
|
+
get(runId) {
|
|
23
|
+
return liveRuns.get(runId);
|
|
24
|
+
},
|
|
25
|
+
getExitEntry(runId) {
|
|
26
|
+
return runExitPromises.get(runId);
|
|
27
|
+
},
|
|
28
|
+
getPendingExitCode(runId) {
|
|
29
|
+
return pendingExitCodes.get(runId);
|
|
30
|
+
},
|
|
31
|
+
hasPendingExitCode(runId) {
|
|
32
|
+
return pendingExitCodes.has(runId);
|
|
33
|
+
},
|
|
34
|
+
list() {
|
|
35
|
+
return Array.from(liveRuns.values());
|
|
36
|
+
},
|
|
37
|
+
listExitEntries() {
|
|
38
|
+
return Array.from(runExitPromises.values());
|
|
39
|
+
},
|
|
40
|
+
remove(runId) {
|
|
41
|
+
liveRuns.delete(runId);
|
|
42
|
+
pendingExitCodes.delete(runId);
|
|
43
|
+
runExitPromises.delete(runId);
|
|
44
|
+
},
|
|
45
|
+
resolveExit(runId) {
|
|
46
|
+
runExitPromises.get(runId)?.resolve();
|
|
47
|
+
},
|
|
48
|
+
setPendingExitCode(runId, exitCode) {
|
|
49
|
+
pendingExitCodes.set(runId, exitCode);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=live-run-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-run-registry.js","sourceRoot":"","sources":["../../../src/server/live-run-registry.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;IAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyB,CAAA;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAA;IAEvD,OAAO;QACL,GAAG,CAAC,GAAG;YACL,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC9B,CAAC;QACD,eAAe,CAAC,KAAK;YACnB,IAAI,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;YACtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;gBAChD,OAAO,GAAG,WAAW,CAAA;YACvB,CAAC,CAAC,CAAA;YACF,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,eAAe,CAAC,KAAK;YACnB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;QACD,oBAAoB,CAAC,KAAK;YACxB,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QACD,GAAG,CAAC,KAAK;YACP,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,YAAY,CAAC,KAAK;YAChB,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACnC,CAAC;QACD,kBAAkB,CAAC,KAAK;YACtB,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QACD,kBAAkB,CAAC,KAAK;YACtB,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QACD,IAAI;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACtC,CAAC;QACD,eAAe;YACb,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7C,CAAC;QACD,MAAM,CAAC,KAAK;YACV,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC9B,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;QACD,WAAW,CAAC,KAAK;YACf,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;QACvC,CAAC;QACD,kBAAkB,CAAC,KAAK,EAAE,QAAQ;YAChC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACvC,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
export interface MessageLogRecord {
|
|
3
|
+
artifacts?: string[];
|
|
4
|
+
createdAt: number;
|
|
5
|
+
fromAgentId?: string;
|
|
6
|
+
status?: string;
|
|
7
|
+
text: string;
|
|
8
|
+
toAgentId?: string;
|
|
9
|
+
type: 'user_input' | 'send' | 'report' | 'system_env_sync' | 'system_recovery_summary';
|
|
10
|
+
workerId: string;
|
|
11
|
+
workspaceId: string;
|
|
12
|
+
}
|
|
13
|
+
export interface MessageLogHandle {
|
|
14
|
+
kind: 'db' | 'memory';
|
|
15
|
+
sequence: number;
|
|
16
|
+
}
|
|
17
|
+
interface RecoveryMessageBase {
|
|
18
|
+
createdAt: number;
|
|
19
|
+
text: string;
|
|
20
|
+
}
|
|
21
|
+
interface UserInputRecoveryMessage extends RecoveryMessageBase {
|
|
22
|
+
type: 'user_input';
|
|
23
|
+
}
|
|
24
|
+
interface SendRecoveryMessage extends RecoveryMessageBase {
|
|
25
|
+
type: 'send';
|
|
26
|
+
from?: string;
|
|
27
|
+
to: string;
|
|
28
|
+
}
|
|
29
|
+
interface ReportRecoveryMessage extends RecoveryMessageBase {
|
|
30
|
+
artifacts: string[];
|
|
31
|
+
from: string;
|
|
32
|
+
status?: string;
|
|
33
|
+
type: 'report';
|
|
34
|
+
}
|
|
35
|
+
export type RecoveryMessage = UserInputRecoveryMessage | SendRecoveryMessage | ReportRecoveryMessage;
|
|
36
|
+
interface MessageKindRow {
|
|
37
|
+
type: 'send' | 'report';
|
|
38
|
+
worker_id: string;
|
|
39
|
+
workspace_id: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const createMessageLogStore: (db: Database | undefined) => {
|
|
42
|
+
deleteMessage: (handle: MessageLogHandle) => void;
|
|
43
|
+
initialize: () => void;
|
|
44
|
+
insertMessage: (input: MessageLogRecord) => MessageLogHandle;
|
|
45
|
+
listMessageKinds: () => MessageKindRow[];
|
|
46
|
+
listMessagesForRecovery: (workspaceId: string, sinceMs: number) => RecoveryMessage[];
|
|
47
|
+
};
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export const createMessageLogStore = (db) => {
|
|
2
|
+
let memorySequence = 0;
|
|
3
|
+
const memoryMessages = new Map();
|
|
4
|
+
const initialize = () => { };
|
|
5
|
+
const listMessageKinds = () => {
|
|
6
|
+
if (!db) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return db
|
|
10
|
+
.prepare(`SELECT workspace_id, worker_id, type
|
|
11
|
+
FROM messages
|
|
12
|
+
WHERE type IN ('send', 'report')
|
|
13
|
+
ORDER BY sequence ASC`)
|
|
14
|
+
.all();
|
|
15
|
+
};
|
|
16
|
+
const insertMessage = (input) => {
|
|
17
|
+
if (!db) {
|
|
18
|
+
memorySequence += 1;
|
|
19
|
+
memoryMessages.set(memorySequence, input);
|
|
20
|
+
return { kind: 'memory', sequence: memorySequence };
|
|
21
|
+
}
|
|
22
|
+
const result = db
|
|
23
|
+
.prepare(`INSERT INTO messages (
|
|
24
|
+
workspace_id,
|
|
25
|
+
worker_id,
|
|
26
|
+
type,
|
|
27
|
+
from_agent_id,
|
|
28
|
+
to_agent_id,
|
|
29
|
+
text,
|
|
30
|
+
status,
|
|
31
|
+
artifacts,
|
|
32
|
+
created_at
|
|
33
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
34
|
+
.run(input.workspaceId, input.workerId, input.type, input.fromAgentId ?? null, input.toAgentId ?? null, input.text, input.status ?? null, input.artifacts ? JSON.stringify(input.artifacts) : null, input.createdAt);
|
|
35
|
+
return { kind: 'db', sequence: Number(result.lastInsertRowid) };
|
|
36
|
+
};
|
|
37
|
+
const deleteMessage = (handle) => {
|
|
38
|
+
if (handle.kind === 'memory') {
|
|
39
|
+
memoryMessages.delete(handle.sequence);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
db?.prepare('DELETE FROM messages WHERE sequence = ?').run(handle.sequence);
|
|
43
|
+
};
|
|
44
|
+
const parseArtifacts = (value) => {
|
|
45
|
+
if (!value) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const parsed = JSON.parse(value);
|
|
49
|
+
return Array.isArray(parsed)
|
|
50
|
+
? parsed.filter((item) => typeof item === 'string')
|
|
51
|
+
: [];
|
|
52
|
+
};
|
|
53
|
+
const listMessagesForRecovery = (workspaceId, sinceMs) => {
|
|
54
|
+
if (!db) {
|
|
55
|
+
return Array.from(memoryMessages.values())
|
|
56
|
+
.filter((message) => message.workspaceId === workspaceId && message.createdAt >= sinceMs)
|
|
57
|
+
.map((message) => {
|
|
58
|
+
if (message.type === 'user_input') {
|
|
59
|
+
return {
|
|
60
|
+
createdAt: message.createdAt,
|
|
61
|
+
text: message.text,
|
|
62
|
+
type: 'user_input',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (message.type === 'send') {
|
|
66
|
+
const recoveryMessage = {
|
|
67
|
+
createdAt: message.createdAt,
|
|
68
|
+
text: message.text,
|
|
69
|
+
to: message.toAgentId ?? message.workerId,
|
|
70
|
+
type: 'send',
|
|
71
|
+
};
|
|
72
|
+
if (message.fromAgentId) {
|
|
73
|
+
recoveryMessage.from = message.fromAgentId;
|
|
74
|
+
}
|
|
75
|
+
return recoveryMessage;
|
|
76
|
+
}
|
|
77
|
+
if (message.type !== 'report') {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const recoveryMessage = {
|
|
81
|
+
artifacts: message.artifacts ?? [],
|
|
82
|
+
createdAt: message.createdAt,
|
|
83
|
+
from: message.fromAgentId ?? message.workerId,
|
|
84
|
+
text: message.text,
|
|
85
|
+
type: 'report',
|
|
86
|
+
};
|
|
87
|
+
if (message.status)
|
|
88
|
+
recoveryMessage.status = message.status;
|
|
89
|
+
return recoveryMessage;
|
|
90
|
+
})
|
|
91
|
+
.filter((message) => message !== null);
|
|
92
|
+
}
|
|
93
|
+
return db
|
|
94
|
+
.prepare(`SELECT worker_id, type, from_agent_id, to_agent_id, text, status, artifacts, created_at
|
|
95
|
+
FROM messages
|
|
96
|
+
WHERE workspace_id = ? AND created_at >= ?
|
|
97
|
+
ORDER BY sequence ASC`)
|
|
98
|
+
.all(workspaceId, sinceMs)
|
|
99
|
+
.map((row) => {
|
|
100
|
+
const typedRow = row;
|
|
101
|
+
if (typedRow.type === 'user_input') {
|
|
102
|
+
return {
|
|
103
|
+
createdAt: typedRow.created_at,
|
|
104
|
+
text: typedRow.text ?? '',
|
|
105
|
+
type: 'user_input',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
if (typedRow.type === 'send') {
|
|
109
|
+
const message = {
|
|
110
|
+
createdAt: typedRow.created_at,
|
|
111
|
+
text: typedRow.text ?? '',
|
|
112
|
+
to: typedRow.to_agent_id ?? typedRow.worker_id,
|
|
113
|
+
type: 'send',
|
|
114
|
+
};
|
|
115
|
+
if (typedRow.from_agent_id) {
|
|
116
|
+
message.from = typedRow.from_agent_id;
|
|
117
|
+
}
|
|
118
|
+
return message;
|
|
119
|
+
}
|
|
120
|
+
if (typedRow.type !== 'report') {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const recoveryMessage = {
|
|
124
|
+
artifacts: parseArtifacts(typedRow.artifacts),
|
|
125
|
+
createdAt: typedRow.created_at,
|
|
126
|
+
from: typedRow.from_agent_id ?? typedRow.worker_id,
|
|
127
|
+
text: typedRow.text ?? '',
|
|
128
|
+
type: 'report',
|
|
129
|
+
};
|
|
130
|
+
if (typedRow.status)
|
|
131
|
+
recoveryMessage.status = typedRow.status;
|
|
132
|
+
return recoveryMessage;
|
|
133
|
+
})
|
|
134
|
+
.filter((message) => message !== null);
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
deleteMessage,
|
|
138
|
+
initialize,
|
|
139
|
+
insertMessage,
|
|
140
|
+
listMessageKinds,
|
|
141
|
+
listMessagesForRecovery,
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=message-log-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-log-store.js","sourceRoot":"","sources":["../../../src/server/message-log-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AgentLaunchConfigInput } from './agent-run-store.js';
|
|
2
|
+
interface AutostartPort {
|
|
3
|
+
startAgent: (workspaceId: string, agentId: string, input: {
|
|
4
|
+
hivePort: string;
|
|
5
|
+
}) => Promise<{
|
|
6
|
+
runId: string;
|
|
7
|
+
status: string;
|
|
8
|
+
exitCode: number | null;
|
|
9
|
+
}>;
|
|
10
|
+
getLiveRun: (runId: string) => {
|
|
11
|
+
status: string;
|
|
12
|
+
exitCode: number | null;
|
|
13
|
+
};
|
|
14
|
+
peekAgentLaunchConfig: (workspaceId: string, agentId: string) => AgentLaunchConfigInput | undefined;
|
|
15
|
+
}
|
|
16
|
+
export interface OrchestratorStartResult {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
error: string | null;
|
|
19
|
+
run_id: string | null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wraps `store.startAgent` so spawn failures never bubble up: callers always
|
|
23
|
+
* receive a structured result. The HTTP layer uses this to keep workspace
|
|
24
|
+
* creation green even when the orchestrator binary is missing.
|
|
25
|
+
*/
|
|
26
|
+
export declare const autostartOrchestrator: (port: AutostartPort, workspaceId: string, orchestratorId: string, hivePort: string) => Promise<OrchestratorStartResult>;
|
|
27
|
+
export declare const autostartAgent: (port: AutostartPort, workspaceId: string, agentId: string, hivePort: string, options: {
|
|
28
|
+
missingConfigError: string;
|
|
29
|
+
}) => Promise<OrchestratorStartResult>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// SETTLE_WAIT_MS: how long we wait before declaring autostart "ok". Must be
|
|
2
|
+
// long enough to observe an early exit when the child shell prints
|
|
3
|
+
// "command not found" then dies with exit 127 (typically <100ms in practice).
|
|
4
|
+
// 800ms balances reliability vs the perceived workspace-create latency cost.
|
|
5
|
+
const SETTLE_WAIT_MS = 800;
|
|
6
|
+
const POLL_INTERVAL_MS = 25;
|
|
7
|
+
// Shells emit exit code 127 when the requested command is not on PATH (POSIX).
|
|
8
|
+
// node-pty does NOT raise a synchronous spawn error for that case — the PTY
|
|
9
|
+
// just dies almost immediately via onExit. We translate that to the same UX
|
|
10
|
+
// string as the sync-ENOENT path so the user gets one consistent message.
|
|
11
|
+
const COMMAND_NOT_FOUND_EXIT_CODE = 127;
|
|
12
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
const isErrnoException = (error) => error instanceof Error && typeof error.code === 'string';
|
|
14
|
+
/**
|
|
15
|
+
* Format a friendly error message that surfaces the actual binary name when
|
|
16
|
+
* spawn fails with ENOENT (e.g. `claude CLI not found in PATH`).
|
|
17
|
+
*/
|
|
18
|
+
const formatStartError = (error, command) => {
|
|
19
|
+
if (isErrnoException(error) && error.code === 'ENOENT' && command) {
|
|
20
|
+
return `${command} CLI not found in PATH`;
|
|
21
|
+
}
|
|
22
|
+
if (error instanceof Error)
|
|
23
|
+
return error.message;
|
|
24
|
+
return String(error);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Translate an early-exit terminal state to a human-friendly error string.
|
|
28
|
+
*
|
|
29
|
+
* Two cases land here:
|
|
30
|
+
* - exit 127: shell saying "command not found" (the most common real case
|
|
31
|
+
* when the configured CLI is missing — node-pty does NOT throw sync ENOENT
|
|
32
|
+
* for missing binaries, it spawns successfully and the child dies via
|
|
33
|
+
* onExit).
|
|
34
|
+
* - any other non-zero exit: surface the raw code so we don't lie about the
|
|
35
|
+
* cause.
|
|
36
|
+
*/
|
|
37
|
+
const formatEarlyExitError = (command, exitCode) => {
|
|
38
|
+
if (exitCode === COMMAND_NOT_FOUND_EXIT_CODE) {
|
|
39
|
+
return `${command} CLI not found in PATH`;
|
|
40
|
+
}
|
|
41
|
+
return `${command} failed to start (exit ${exitCode ?? 'null'})`;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Wraps `store.startAgent` so spawn failures never bubble up: callers always
|
|
45
|
+
* receive a structured result. The HTTP layer uses this to keep workspace
|
|
46
|
+
* creation green even when the orchestrator binary is missing.
|
|
47
|
+
*/
|
|
48
|
+
export const autostartOrchestrator = async (port, workspaceId, orchestratorId, hivePort) => {
|
|
49
|
+
return autostartAgent(port, workspaceId, orchestratorId, hivePort, {
|
|
50
|
+
missingConfigError: 'No orchestrator launch config available (set HIVE_ORCHESTRATOR_COMMAND or seed a role template)',
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
export const autostartAgent = async (port, workspaceId, agentId, hivePort, options) => {
|
|
54
|
+
const config = port.peekAgentLaunchConfig(workspaceId, agentId);
|
|
55
|
+
if (!config) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
error: options.missingConfigError,
|
|
59
|
+
run_id: null,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const run = await port.startAgent(workspaceId, agentId, { hivePort });
|
|
64
|
+
// node-pty often doesn't throw on missing binaries — it spawns then exits
|
|
65
|
+
// fast via onExit with a non-zero code. Poll briefly so we surface the
|
|
66
|
+
// failure synchronously in the response instead of returning a fake "ok".
|
|
67
|
+
//
|
|
68
|
+
// Loop condition is "until we hit a terminal state OR deadline". Earlier
|
|
69
|
+
// versions exited as soon as `status === 'running'`, which missed the case
|
|
70
|
+
// where bash prints `command not found` (status flips to running) and then
|
|
71
|
+
// exits 127 a few ms later. The tighter loop catches that path.
|
|
72
|
+
let exitCode = run.exitCode;
|
|
73
|
+
let status = run.status;
|
|
74
|
+
const deadline = Date.now() + SETTLE_WAIT_MS;
|
|
75
|
+
while (status !== 'exited' && status !== 'error' && Date.now() < deadline) {
|
|
76
|
+
await sleep(POLL_INTERVAL_MS);
|
|
77
|
+
try {
|
|
78
|
+
const live = port.getLiveRun(run.runId);
|
|
79
|
+
status = live.status;
|
|
80
|
+
exitCode = live.exitCode;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (status === 'error' || (status === 'exited' && (exitCode ?? 0) !== 0)) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
error: formatEarlyExitError(config.command, exitCode),
|
|
90
|
+
run_id: run.runId,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return { ok: true, error: null, run_id: run.runId };
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return {
|
|
97
|
+
ok: false,
|
|
98
|
+
error: formatStartError(error, config.command),
|
|
99
|
+
run_id: null,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=orchestrator-autostart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-autostart.js","sourceRoot":"","sources":["../../../src/server/orchestrator-autostart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AgentLaunchConfigInput } from './agent-run-store.js';
|
|
2
|
+
import type { SettingsStore } from './settings-store.js';
|
|
3
|
+
interface ConfigurePort {
|
|
4
|
+
configureAgentLaunch: (workspaceId: string, agentId: string, input: AgentLaunchConfigInput) => void;
|
|
5
|
+
peekAgentLaunchConfig: (workspaceId: string, agentId: string) => AgentLaunchConfigInput | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the orchestrator's launch config in priority order:
|
|
9
|
+
* 1. Explicit workspace-create command preset chosen by the user.
|
|
10
|
+
* 2. `HIVE_ORCHESTRATOR_COMMAND` env var (with optional `HIVE_ORCHESTRATOR_ARGS_JSON`).
|
|
11
|
+
* Tests use this to inject a dummy CLI like `bash -c 'echo queen up; sleep 60'`
|
|
12
|
+
* so autostart can run end-to-end without depending on a real `claude` binary.
|
|
13
|
+
* 3. The seeded `orchestrator` role template (defaults to `claude`).
|
|
14
|
+
* Returns `undefined` when neither source has a usable command.
|
|
15
|
+
*/
|
|
16
|
+
export declare const resolveOrchestratorLaunchConfig: (settings: SettingsStore, commandPresetId?: string | null) => AgentLaunchConfigInput | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Idempotent: only seeds when no existing launch config is present for the
|
|
19
|
+
* orchestrator (prevents stomping on user-customized configs across restarts).
|
|
20
|
+
*/
|
|
21
|
+
export declare const seedOrchestratorLaunchConfig: (port: ConfigurePort, settings: SettingsStore, workspaceId: string, commandPresetId?: string | null) => void;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { getOrchestratorId } from './workspace-store-support.js';
|
|
2
|
+
const parseArgsEnv = (raw) => {
|
|
3
|
+
if (raw === undefined)
|
|
4
|
+
return undefined;
|
|
5
|
+
const trimmed = raw.trim();
|
|
6
|
+
if (!trimmed)
|
|
7
|
+
return [];
|
|
8
|
+
try {
|
|
9
|
+
const parsed = JSON.parse(trimmed);
|
|
10
|
+
if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string'))
|
|
11
|
+
return parsed;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return trimmed.split(/\s+/);
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
};
|
|
18
|
+
const resolveCommandPresetLaunchConfig = (settings, commandPresetId) => {
|
|
19
|
+
const preset = settings.getCommandPreset(commandPresetId);
|
|
20
|
+
if (!preset)
|
|
21
|
+
return undefined;
|
|
22
|
+
return {
|
|
23
|
+
args: preset.args,
|
|
24
|
+
command: preset.command,
|
|
25
|
+
commandPresetId: preset.id,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the orchestrator's launch config in priority order:
|
|
30
|
+
* 1. Explicit workspace-create command preset chosen by the user.
|
|
31
|
+
* 2. `HIVE_ORCHESTRATOR_COMMAND` env var (with optional `HIVE_ORCHESTRATOR_ARGS_JSON`).
|
|
32
|
+
* Tests use this to inject a dummy CLI like `bash -c 'echo queen up; sleep 60'`
|
|
33
|
+
* so autostart can run end-to-end without depending on a real `claude` binary.
|
|
34
|
+
* 3. The seeded `orchestrator` role template (defaults to `claude`).
|
|
35
|
+
* Returns `undefined` when neither source has a usable command.
|
|
36
|
+
*/
|
|
37
|
+
export const resolveOrchestratorLaunchConfig = (settings, commandPresetId = null) => {
|
|
38
|
+
if (commandPresetId) {
|
|
39
|
+
return resolveCommandPresetLaunchConfig(settings, commandPresetId);
|
|
40
|
+
}
|
|
41
|
+
const envCommand = process.env.HIVE_ORCHESTRATOR_COMMAND;
|
|
42
|
+
if (envCommand) {
|
|
43
|
+
return {
|
|
44
|
+
command: envCommand,
|
|
45
|
+
args: parseArgsEnv(process.env.HIVE_ORCHESTRATOR_ARGS_JSON) ?? [],
|
|
46
|
+
commandPresetId: null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const template = settings.listRoleTemplates().find((entry) => entry.roleType === 'orchestrator');
|
|
50
|
+
if (!template)
|
|
51
|
+
return undefined;
|
|
52
|
+
// Intentionally NOT binding to the `claude` command preset here: the preset
|
|
53
|
+
// also wires session-id capture which can claim alice/bob workers' session
|
|
54
|
+
// ids in tests / multi-agent setups. Users who want resume + yolo args can
|
|
55
|
+
// re-configure via POST /api/workspaces/:wsId/agents/:agentId/config.
|
|
56
|
+
return {
|
|
57
|
+
command: template.defaultCommand,
|
|
58
|
+
args: template.defaultArgs,
|
|
59
|
+
commandPresetId: null,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Idempotent: only seeds when no existing launch config is present for the
|
|
64
|
+
* orchestrator (prevents stomping on user-customized configs across restarts).
|
|
65
|
+
*/
|
|
66
|
+
export const seedOrchestratorLaunchConfig = (port, settings, workspaceId, commandPresetId = null) => {
|
|
67
|
+
const orchestratorId = getOrchestratorId(workspaceId);
|
|
68
|
+
if (port.peekAgentLaunchConfig(workspaceId, orchestratorId))
|
|
69
|
+
return;
|
|
70
|
+
const config = resolveOrchestratorLaunchConfig(settings, commandPresetId);
|
|
71
|
+
if (!config)
|
|
72
|
+
return;
|
|
73
|
+
port.configureAgentLaunch(workspaceId, orchestratorId, config);
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=orchestrator-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator-launch.js","sourceRoot":"","sources":["../../../src/server/orchestrator-launch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAchE,MAAM,YAAY,GAAG,CAAC,GAAuB,EAAwB,EAAE;IACrE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,gCAAgC,GAAG,CACvC,QAAuB,EACvB,eAAuB,EACa,EAAE;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,eAAe,EAAE,MAAM,CAAC,EAAE;KAC3B,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,QAAuB,EACvB,kBAAiC,IAAI,EACD,EAAE;IACtC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,gCAAgC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE;YACjE,eAAe,EAAE,IAAI;SACtB,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAA;IAChG,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC/B,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,cAAc;QAChC,IAAI,EAAE,QAAQ,CAAC,WAAW;QAC1B,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,IAAmB,EACnB,QAAuB,EACvB,WAAmB,EACnB,kBAAiC,IAAI,EAC/B,EAAE;IACR,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC;QAAE,OAAM;IACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IACzE,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;AAChE,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentManager } from './agent-manager.js';
|
|
2
|
+
export declare const toBracketedPasteSubmission: (text: string) => string;
|
|
3
|
+
export declare const isInteractiveAgentCommand: (command: string) => boolean;
|
|
4
|
+
export declare const hasInteractivePromptReady: (output: string) => boolean;
|
|
5
|
+
export declare const hasBracketedPasteAcknowledgement: (output: string, baselineLength: number) => boolean;
|
|
6
|
+
export declare const createPostStartInputWriter: (agentManager: AgentManager, command: string) => ((runId: string, text: string) => void);
|