@seawork/cli 1.0.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/bin/seawork +3 -0
- package/dist/classify.d.ts +19 -0
- package/dist/classify.d.ts.map +1 -0
- package/dist/classify.js +49 -0
- package/dist/classify.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +103 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agent/archive.d.ts +18 -0
- package/dist/commands/agent/archive.d.ts.map +1 -0
- package/dist/commands/agent/archive.js +102 -0
- package/dist/commands/agent/archive.js.map +1 -0
- package/dist/commands/agent/attach.d.ts +11 -0
- package/dist/commands/agent/attach.d.ts.map +1 -0
- package/dist/commands/agent/attach.js +158 -0
- package/dist/commands/agent/attach.js.map +1 -0
- package/dist/commands/agent/delete.d.ts +15 -0
- package/dist/commands/agent/delete.d.ts.map +1 -0
- package/dist/commands/agent/delete.js +99 -0
- package/dist/commands/agent/delete.js.map +1 -0
- package/dist/commands/agent/index.d.ts +3 -0
- package/dist/commands/agent/index.d.ts.map +1 -0
- package/dist/commands/agent/index.js +46 -0
- package/dist/commands/agent/index.js.map +1 -0
- package/dist/commands/agent/inspect.d.ts +15 -0
- package/dist/commands/agent/inspect.d.ts.map +1 -0
- package/dist/commands/agent/inspect.js +207 -0
- package/dist/commands/agent/inspect.js.map +1 -0
- package/dist/commands/agent/logs.d.ts +16 -0
- package/dist/commands/agent/logs.d.ts.map +1 -0
- package/dist/commands/agent/logs.js +172 -0
- package/dist/commands/agent/logs.js.map +1 -0
- package/dist/commands/agent/ls.d.ts +38 -0
- package/dist/commands/agent/ls.d.ts.map +1 -0
- package/dist/commands/agent/ls.js +191 -0
- package/dist/commands/agent/ls.js.map +1 -0
- package/dist/commands/agent/mode.d.ts +18 -0
- package/dist/commands/agent/mode.d.ts.map +1 -0
- package/dist/commands/agent/mode.js +100 -0
- package/dist/commands/agent/mode.js.map +1 -0
- package/dist/commands/agent/reload.d.ts +15 -0
- package/dist/commands/agent/reload.d.ts.map +1 -0
- package/dist/commands/agent/reload.js +75 -0
- package/dist/commands/agent/reload.js.map +1 -0
- package/dist/commands/agent/run.d.ts +47 -0
- package/dist/commands/agent/run.d.ts.map +1 -0
- package/dist/commands/agent/run.js +431 -0
- package/dist/commands/agent/run.js.map +1 -0
- package/dist/commands/agent/send.d.ts +19 -0
- package/dist/commands/agent/send.d.ts.map +1 -0
- package/dist/commands/agent/send.js +217 -0
- package/dist/commands/agent/send.js.map +1 -0
- package/dist/commands/agent/stop.d.ts +17 -0
- package/dist/commands/agent/stop.d.ts.map +1 -0
- package/dist/commands/agent/stop.js +107 -0
- package/dist/commands/agent/stop.js.map +1 -0
- package/dist/commands/agent/update.d.ts +18 -0
- package/dist/commands/agent/update.d.ts.map +1 -0
- package/dist/commands/agent/update.js +139 -0
- package/dist/commands/agent/update.js.map +1 -0
- package/dist/commands/agent/wait.d.ts +17 -0
- package/dist/commands/agent/wait.d.ts.map +1 -0
- package/dist/commands/agent/wait.js +164 -0
- package/dist/commands/agent/wait.js.map +1 -0
- package/dist/commands/chat/create.d.ts +9 -0
- package/dist/commands/chat/create.d.ts.map +1 -0
- package/dist/commands/chat/create.js +23 -0
- package/dist/commands/chat/create.js.map +1 -0
- package/dist/commands/chat/delete.d.ts +6 -0
- package/dist/commands/chat/delete.d.ts.map +1 -0
- package/dist/commands/chat/delete.js +20 -0
- package/dist/commands/chat/delete.js.map +1 -0
- package/dist/commands/chat/index.d.ts +3 -0
- package/dist/commands/chat/index.d.ts.map +1 -0
- package/dist/commands/chat/index.js +47 -0
- package/dist/commands/chat/index.js.map +1 -0
- package/dist/commands/chat/inspect.d.ts +6 -0
- package/dist/commands/chat/inspect.d.ts.map +1 -0
- package/dist/commands/chat/inspect.js +20 -0
- package/dist/commands/chat/inspect.js.map +1 -0
- package/dist/commands/chat/ls.d.ts +6 -0
- package/dist/commands/chat/ls.d.ts.map +1 -0
- package/dist/commands/chat/ls.js +20 -0
- package/dist/commands/chat/ls.js.map +1 -0
- package/dist/commands/chat/post.d.ts +9 -0
- package/dist/commands/chat/post.d.ts.map +1 -0
- package/dist/commands/chat/post.js +28 -0
- package/dist/commands/chat/post.js.map +1 -0
- package/dist/commands/chat/read.d.ts +11 -0
- package/dist/commands/chat/read.d.ts.map +1 -0
- package/dist/commands/chat/read.js +40 -0
- package/dist/commands/chat/read.js.map +1 -0
- package/dist/commands/chat/schema.d.ts +36 -0
- package/dist/commands/chat/schema.d.ts.map +1 -0
- package/dist/commands/chat/schema.js +81 -0
- package/dist/commands/chat/schema.js.map +1 -0
- package/dist/commands/chat/shared.d.ts +16 -0
- package/dist/commands/chat/shared.d.ts.map +1 -0
- package/dist/commands/chat/shared.js +108 -0
- package/dist/commands/chat/shared.js.map +1 -0
- package/dist/commands/chat/wait.d.ts +9 -0
- package/dist/commands/chat/wait.d.ts.map +1 -0
- package/dist/commands/chat/wait.js +30 -0
- package/dist/commands/chat/wait.js.map +1 -0
- package/dist/commands/daemon/index.d.ts +3 -0
- package/dist/commands/daemon/index.d.ts.map +1 -0
- package/dist/commands/daemon/index.js +34 -0
- package/dist/commands/daemon/index.js.map +1 -0
- package/dist/commands/daemon/local-daemon.d.ts +54 -0
- package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
- package/dist/commands/daemon/local-daemon.js +400 -0
- package/dist/commands/daemon/local-daemon.js.map +1 -0
- package/dist/commands/daemon/pair.d.ts +9 -0
- package/dist/commands/daemon/pair.d.ts.map +1 -0
- package/dist/commands/daemon/pair.js +42 -0
- package/dist/commands/daemon/pair.js.map +1 -0
- package/dist/commands/daemon/restart.d.ts +12 -0
- package/dist/commands/daemon/restart.d.ts.map +1 -0
- package/dist/commands/daemon/restart.js +98 -0
- package/dist/commands/daemon/restart.js.map +1 -0
- package/dist/commands/daemon/runtime-toolchain.d.ts +6 -0
- package/dist/commands/daemon/runtime-toolchain.d.ts.map +1 -0
- package/dist/commands/daemon/runtime-toolchain.js +102 -0
- package/dist/commands/daemon/runtime-toolchain.js.map +1 -0
- package/dist/commands/daemon/start.d.ts +6 -0
- package/dist/commands/daemon/start.d.ts.map +1 -0
- package/dist/commands/daemon/start.js +49 -0
- package/dist/commands/daemon/start.js.map +1 -0
- package/dist/commands/daemon/status.d.ts +10 -0
- package/dist/commands/daemon/status.d.ts.map +1 -0
- package/dist/commands/daemon/status.js +269 -0
- package/dist/commands/daemon/status.js.map +1 -0
- package/dist/commands/daemon/stop.d.ts +12 -0
- package/dist/commands/daemon/stop.d.ts.map +1 -0
- package/dist/commands/daemon/stop.js +56 -0
- package/dist/commands/daemon/stop.js.map +1 -0
- package/dist/commands/loop/index.d.ts +3 -0
- package/dist/commands/loop/index.d.ts.map +1 -0
- package/dist/commands/loop/index.js +18 -0
- package/dist/commands/loop/index.js.map +1 -0
- package/dist/commands/loop/inspect.d.ts +13 -0
- package/dist/commands/loop/inspect.d.ts.map +1 -0
- package/dist/commands/loop/inspect.js +100 -0
- package/dist/commands/loop/inspect.js.map +1 -0
- package/dist/commands/loop/logs.d.ts +8 -0
- package/dist/commands/loop/logs.d.ts.map +1 -0
- package/dist/commands/loop/logs.js +69 -0
- package/dist/commands/loop/logs.js.map +1 -0
- package/dist/commands/loop/ls.d.ts +18 -0
- package/dist/commands/loop/ls.d.ts.map +1 -0
- package/dist/commands/loop/ls.js +62 -0
- package/dist/commands/loop/ls.js.map +1 -0
- package/dist/commands/loop/run.d.ts +26 -0
- package/dist/commands/loop/run.d.ts.map +1 -0
- package/dist/commands/loop/run.js +116 -0
- package/dist/commands/loop/run.js.map +1 -0
- package/dist/commands/loop/stop.d.ts +15 -0
- package/dist/commands/loop/stop.d.ts.map +1 -0
- package/dist/commands/loop/stop.js +56 -0
- package/dist/commands/loop/stop.js.map +1 -0
- package/dist/commands/loop/types.d.ts +134 -0
- package/dist/commands/loop/types.d.ts.map +1 -0
- package/dist/commands/loop/types.js +2 -0
- package/dist/commands/loop/types.js.map +1 -0
- package/dist/commands/onboard.d.ts +10 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +374 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/open.d.ts +2 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +82 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/permit/allow.d.ts +20 -0
- package/dist/commands/permit/allow.d.ts.map +1 -0
- package/dist/commands/permit/allow.js +134 -0
- package/dist/commands/permit/allow.js.map +1 -0
- package/dist/commands/permit/deny.d.ts +12 -0
- package/dist/commands/permit/deny.d.ts.map +1 -0
- package/dist/commands/permit/deny.js +106 -0
- package/dist/commands/permit/deny.js.map +1 -0
- package/dist/commands/permit/index.d.ts +3 -0
- package/dist/commands/permit/index.d.ts.map +1 -0
- package/dist/commands/permit/index.js +27 -0
- package/dist/commands/permit/index.js.map +1 -0
- package/dist/commands/permit/ls.d.ts +18 -0
- package/dist/commands/permit/ls.d.ts.map +1 -0
- package/dist/commands/permit/ls.js +66 -0
- package/dist/commands/permit/ls.js.map +1 -0
- package/dist/commands/provider/index.d.ts +3 -0
- package/dist/commands/provider/index.d.ts.map +1 -0
- package/dist/commands/provider/index.js +16 -0
- package/dist/commands/provider/index.js.map +1 -0
- package/dist/commands/provider/ls.d.ts +17 -0
- package/dist/commands/provider/ls.d.ts.map +1 -0
- package/dist/commands/provider/ls.js +38 -0
- package/dist/commands/provider/ls.js.map +1 -0
- package/dist/commands/provider/models.d.ts +20 -0
- package/dist/commands/provider/models.d.ts.map +1 -0
- package/dist/commands/provider/models.js +53 -0
- package/dist/commands/provider/models.js.map +1 -0
- package/dist/commands/schedule/create.d.ts +13 -0
- package/dist/commands/schedule/create.d.ts.map +1 -0
- package/dist/commands/schedule/create.js +32 -0
- package/dist/commands/schedule/create.js.map +1 -0
- package/dist/commands/schedule/delete.d.ts +10 -0
- package/dist/commands/schedule/delete.d.ts.map +1 -0
- package/dist/commands/schedule/delete.js +32 -0
- package/dist/commands/schedule/delete.js.map +1 -0
- package/dist/commands/schedule/index.d.ts +3 -0
- package/dist/commands/schedule/index.d.ts.map +1 -0
- package/dist/commands/schedule/index.js +37 -0
- package/dist/commands/schedule/index.js.map +1 -0
- package/dist/commands/schedule/inspect.d.ts +6 -0
- package/dist/commands/schedule/inspect.d.ts.map +1 -0
- package/dist/commands/schedule/inspect.js +24 -0
- package/dist/commands/schedule/inspect.js.map +1 -0
- package/dist/commands/schedule/logs.d.ts +6 -0
- package/dist/commands/schedule/logs.d.ts.map +1 -0
- package/dist/commands/schedule/logs.js +23 -0
- package/dist/commands/schedule/logs.js.map +1 -0
- package/dist/commands/schedule/ls.d.ts +5 -0
- package/dist/commands/schedule/ls.d.ts.map +1 -0
- package/dist/commands/schedule/ls.js +23 -0
- package/dist/commands/schedule/ls.js.map +1 -0
- package/dist/commands/schedule/pause.d.ts +5 -0
- package/dist/commands/schedule/pause.d.ts.map +1 -0
- package/dist/commands/schedule/pause.js +23 -0
- package/dist/commands/schedule/pause.js.map +1 -0
- package/dist/commands/schedule/resume.d.ts +5 -0
- package/dist/commands/schedule/resume.d.ts.map +1 -0
- package/dist/commands/schedule/resume.js +23 -0
- package/dist/commands/schedule/resume.js.map +1 -0
- package/dist/commands/schedule/schema.d.ts +21 -0
- package/dist/commands/schedule/schema.d.ts.map +1 -0
- package/dist/commands/schedule/schema.js +67 -0
- package/dist/commands/schedule/schema.js.map +1 -0
- package/dist/commands/schedule/shared.d.ts +33 -0
- package/dist/commands/schedule/shared.d.ts.map +1 -0
- package/dist/commands/schedule/shared.js +148 -0
- package/dist/commands/schedule/shared.js.map +1 -0
- package/dist/commands/schedule/types.d.ts +137 -0
- package/dist/commands/schedule/types.d.ts.map +1 -0
- package/dist/commands/schedule/types.js +2 -0
- package/dist/commands/schedule/types.js.map +1 -0
- package/dist/commands/speech/index.d.ts +3 -0
- package/dist/commands/speech/index.d.ts.map +1 -0
- package/dist/commands/speech/index.js +5 -0
- package/dist/commands/speech/index.js.map +1 -0
- package/dist/commands/terminal/capture.d.ts +10 -0
- package/dist/commands/terminal/capture.d.ts.map +1 -0
- package/dist/commands/terminal/capture.js +68 -0
- package/dist/commands/terminal/capture.js.map +1 -0
- package/dist/commands/terminal/create.d.ts +10 -0
- package/dist/commands/terminal/create.d.ts.map +1 -0
- package/dist/commands/terminal/create.js +28 -0
- package/dist/commands/terminal/create.js.map +1 -0
- package/dist/commands/terminal/index.d.ts +3 -0
- package/dist/commands/terminal/index.d.ts.map +1 -0
- package/dist/commands/terminal/index.js +43 -0
- package/dist/commands/terminal/index.js.map +1 -0
- package/dist/commands/terminal/kill.d.ts +6 -0
- package/dist/commands/terminal/kill.d.ts.map +1 -0
- package/dist/commands/terminal/kill.js +36 -0
- package/dist/commands/terminal/kill.js.map +1 -0
- package/dist/commands/terminal/ls.d.ts +10 -0
- package/dist/commands/terminal/ls.d.ts.map +1 -0
- package/dist/commands/terminal/ls.js +21 -0
- package/dist/commands/terminal/ls.js.map +1 -0
- package/dist/commands/terminal/schema.d.ts +18 -0
- package/dist/commands/terminal/schema.d.ts.map +1 -0
- package/dist/commands/terminal/schema.js +23 -0
- package/dist/commands/terminal/schema.js.map +1 -0
- package/dist/commands/terminal/send-keys.d.ts +7 -0
- package/dist/commands/terminal/send-keys.d.ts.map +1 -0
- package/dist/commands/terminal/send-keys.js +76 -0
- package/dist/commands/terminal/send-keys.js.map +1 -0
- package/dist/commands/terminal/shared.d.ts +12 -0
- package/dist/commands/terminal/shared.d.ts.map +1 -0
- package/dist/commands/terminal/shared.js +61 -0
- package/dist/commands/terminal/shared.js.map +1 -0
- package/dist/commands/worktree/archive.d.ts +16 -0
- package/dist/commands/worktree/archive.d.ts.map +1 -0
- package/dist/commands/worktree/archive.js +99 -0
- package/dist/commands/worktree/archive.js.map +1 -0
- package/dist/commands/worktree/index.d.ts +3 -0
- package/dist/commands/worktree/index.d.ts.map +1 -0
- package/dist/commands/worktree/index.js +15 -0
- package/dist/commands/worktree/index.js.map +1 -0
- package/dist/commands/worktree/ls.d.ts +19 -0
- package/dist/commands/worktree/ls.d.ts.map +1 -0
- package/dist/commands/worktree/ls.js +97 -0
- package/dist/commands/worktree/ls.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/output/index.d.ts +45 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +47 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/json.d.ts +11 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +37 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/quiet.d.ts +9 -0
- package/dist/output/quiet.d.ts.map +1 -0
- package/dist/output/quiet.js +22 -0
- package/dist/output/quiet.js.map +1 -0
- package/dist/output/render.d.ts +15 -0
- package/dist/output/render.d.ts.map +1 -0
- package/dist/output/render.js +83 -0
- package/dist/output/render.js.map +1 -0
- package/dist/output/table.d.ts +13 -0
- package/dist/output/table.d.ts.map +1 -0
- package/dist/output/table.js +135 -0
- package/dist/output/table.js.map +1 -0
- package/dist/output/types.d.ts +73 -0
- package/dist/output/types.d.ts.map +1 -0
- package/dist/output/types.js +8 -0
- package/dist/output/types.js.map +1 -0
- package/dist/output/with-output.d.ts +37 -0
- package/dist/output/with-output.d.ts.map +1 -0
- package/dist/output/with-output.js +87 -0
- package/dist/output/with-output.js.map +1 -0
- package/dist/output/yaml.d.ts +11 -0
- package/dist/output/yaml.d.ts.map +1 -0
- package/dist/output/yaml.js +38 -0
- package/dist/output/yaml.js.map +1 -0
- package/dist/utils/client-id.d.ts +2 -0
- package/dist/utils/client-id.d.ts.map +1 -0
- package/dist/utils/client-id.js +37 -0
- package/dist/utils/client-id.js.map +1 -0
- package/dist/utils/client.d.ts +47 -0
- package/dist/utils/client.d.ts.map +1 -0
- package/dist/utils/client.js +230 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/command-options.d.ts +6 -0
- package/dist/utils/command-options.d.ts.map +1 -0
- package/dist/utils/command-options.js +17 -0
- package/dist/utils/command-options.js.map +1 -0
- package/dist/utils/duration.d.ts +7 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +38 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/errors.d.ts +5 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +10 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/paths.d.ts +12 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +22 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/timeline.d.ts +8 -0
- package/dist/utils/timeline.d.ts.map +1 -0
- package/dist/utils/timeline.js +9 -0
- package/dist/utils/timeline.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML renderer for CLI output.
|
|
3
|
+
*
|
|
4
|
+
* Renders structured data as YAML for machine consumption and human readability.
|
|
5
|
+
*/
|
|
6
|
+
import YAML from "yaml";
|
|
7
|
+
/** Render command result as YAML */
|
|
8
|
+
export function renderYaml(result, _options) {
|
|
9
|
+
const { schema } = result;
|
|
10
|
+
// Apply custom serializer if provided
|
|
11
|
+
if (schema.serialize) {
|
|
12
|
+
if (result.type === "list") {
|
|
13
|
+
// If all items serialize to the same object, return just one
|
|
14
|
+
// This handles the case where a list of key-value rows should serialize
|
|
15
|
+
// to a single structured object
|
|
16
|
+
const serialized = result.data.map((item) => schema.serialize(item));
|
|
17
|
+
if (serialized.length > 0) {
|
|
18
|
+
const first = JSON.stringify(serialized[0]);
|
|
19
|
+
const allSame = serialized.every((s) => JSON.stringify(s) === first);
|
|
20
|
+
if (allSame) {
|
|
21
|
+
return YAML.stringify(serialized[0]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return YAML.stringify(serialized);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const serialized = schema.serialize(result.data);
|
|
28
|
+
return YAML.stringify(serialized);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return YAML.stringify(result.data);
|
|
32
|
+
}
|
|
33
|
+
/** Render a single item as YAML document (for streaming) */
|
|
34
|
+
export function renderYamlDoc(item, serialize) {
|
|
35
|
+
const output = serialize ? serialize(item) : item;
|
|
36
|
+
return YAML.stringify(output);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/output/yaml.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,oCAAoC;AACpC,MAAM,UAAU,UAAU,CAAI,MAA2B,EAAE,QAAuB;IAChF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE1B,sCAAsC;IACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,6DAA6D;YAC7D,wEAAwE;YACxE,gCAAgC;YAChC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAI,IAAO,EAAE,SAAgC;IACxE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.d.ts","sourceRoot":"","sources":["../../src/utils/client-id.ts"],"names":[],"mappings":"AAqBA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuB9D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
const CLIENT_SESSION_KEY_FILE = join(process.env.SEAWORK_HOME ?? join(homedir(), ".seawork"), "cli-client-id");
|
|
6
|
+
let cachedClientId = null;
|
|
7
|
+
function normalizeClientId(value) {
|
|
8
|
+
const trimmed = value.trim();
|
|
9
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
10
|
+
}
|
|
11
|
+
function generateClientId() {
|
|
12
|
+
return `cid_${randomUUID().replace(/-/g, "")}`;
|
|
13
|
+
}
|
|
14
|
+
export async function getOrCreateCliClientId() {
|
|
15
|
+
if (cachedClientId) {
|
|
16
|
+
return cachedClientId;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const existing = normalizeClientId(await readFile(CLIENT_SESSION_KEY_FILE, "utf8"));
|
|
20
|
+
if (existing) {
|
|
21
|
+
cachedClientId = existing;
|
|
22
|
+
return existing;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const code = error?.code;
|
|
27
|
+
if (code !== "ENOENT") {
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const nextValue = generateClientId();
|
|
32
|
+
await mkdir(dirname(CLIENT_SESSION_KEY_FILE), { recursive: true });
|
|
33
|
+
await writeFile(CLIENT_SESSION_KEY_FILE, nextValue, { mode: 0o600 });
|
|
34
|
+
cachedClientId = nextValue;
|
|
35
|
+
return nextValue;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=client-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.js","sourceRoot":"","sources":["../../src/utils/client-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,uBAAuB,GAAG,IAAI,CAClC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,EACvD,eAAe,CAChB,CAAC;AAEF,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,OAAO,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,GAAG,QAAQ,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAAkC,EAAE,IAAI,CAAC;QACvD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,CAAC,uBAAuB,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,cAAc,GAAG,SAAS,CAAC;IAC3B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DaemonClient } from "@seawork/server";
|
|
2
|
+
export interface ConnectOptions {
|
|
3
|
+
host?: string;
|
|
4
|
+
timeout?: number;
|
|
5
|
+
}
|
|
6
|
+
type DaemonTarget = {
|
|
7
|
+
type: "tcp";
|
|
8
|
+
url: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: "ipc";
|
|
11
|
+
url: string;
|
|
12
|
+
socketPath: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get the daemon host from environment or options
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDaemonHost(options?: ConnectOptions): string;
|
|
18
|
+
export declare function normalizeDaemonHost(raw: string): string | null;
|
|
19
|
+
export declare function resolveDefaultDaemonHost(env?: NodeJS.ProcessEnv): string;
|
|
20
|
+
export declare function resolveDefaultDaemonHosts(env?: NodeJS.ProcessEnv): string[];
|
|
21
|
+
export declare function resolveDaemonTarget(host: string): DaemonTarget;
|
|
22
|
+
/**
|
|
23
|
+
* Create and connect a daemon client
|
|
24
|
+
* Returns the connected client or throws if connection fails
|
|
25
|
+
*/
|
|
26
|
+
export declare function connectToDaemon(options?: ConnectOptions): Promise<DaemonClient>;
|
|
27
|
+
/**
|
|
28
|
+
* Try to connect to the daemon, returns null if connection fails
|
|
29
|
+
*/
|
|
30
|
+
export declare function tryConnectToDaemon(options?: ConnectOptions): Promise<DaemonClient | null>;
|
|
31
|
+
/** Minimal agent type for ID resolution */
|
|
32
|
+
interface AgentLike {
|
|
33
|
+
id: string;
|
|
34
|
+
title?: string | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve an agent ID from a partial ID or name.
|
|
38
|
+
* Supports:
|
|
39
|
+
* - Full ID match
|
|
40
|
+
* - Prefix match (first N characters)
|
|
41
|
+
* - Title/name match (case-insensitive)
|
|
42
|
+
*
|
|
43
|
+
* Returns the full agent ID if found, null otherwise.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveAgentId(idOrName: string, agents: AgentLike[]): string | null;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,KAAK,YAAY,GACb;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,GACD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4B9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAErF;AA6DD,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAaxF;AAWD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA2B9D;AAqBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAsCrF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAM/F;AAED,2CAA2C;AAC3C,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI,CAsCnF"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { loadConfig, resolveSeaworkHome, DaemonClient } from "@seawork/server";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import WebSocket from "ws";
|
|
5
|
+
import { getOrCreateCliClientId } from "./client-id.js";
|
|
6
|
+
const DEFAULT_HOST = "localhost:6767";
|
|
7
|
+
const DEFAULT_TIMEOUT = 15000;
|
|
8
|
+
const PID_FILENAME = "seawork.pid";
|
|
9
|
+
/**
|
|
10
|
+
* Get the daemon host from environment or options
|
|
11
|
+
*/
|
|
12
|
+
export function getDaemonHost(options) {
|
|
13
|
+
return resolveDaemonHostCandidates(options)[0] ?? DEFAULT_HOST;
|
|
14
|
+
}
|
|
15
|
+
export function normalizeDaemonHost(raw) {
|
|
16
|
+
const trimmed = raw.trim();
|
|
17
|
+
if (!trimmed) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if (trimmed.startsWith("unix://") ||
|
|
21
|
+
trimmed.startsWith("pipe://") ||
|
|
22
|
+
trimmed.startsWith("\\\\.\\pipe\\")) {
|
|
23
|
+
return trimmed.startsWith("\\\\.\\pipe\\") ? `pipe://${trimmed}` : trimmed;
|
|
24
|
+
}
|
|
25
|
+
if (trimmed.startsWith("/") || trimmed.startsWith("~")) {
|
|
26
|
+
return `unix://${trimmed}`;
|
|
27
|
+
}
|
|
28
|
+
// Windows absolute paths (e.g. C:\Users\foo) are filesystem paths, not TCP or IPC targets.
|
|
29
|
+
if (/^[A-Za-z]:[/\\]/.test(trimmed)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (/^\d+$/.test(trimmed)) {
|
|
33
|
+
return `127.0.0.1:${trimmed}`;
|
|
34
|
+
}
|
|
35
|
+
return trimmed.includes(":") ? trimmed : null;
|
|
36
|
+
}
|
|
37
|
+
export function resolveDefaultDaemonHost(env = process.env) {
|
|
38
|
+
return resolveDefaultDaemonHosts(env)[0] ?? DEFAULT_HOST;
|
|
39
|
+
}
|
|
40
|
+
function isIpcDaemonHost(host) {
|
|
41
|
+
return host !== null && (host.startsWith("unix://") || host.startsWith("pipe://"));
|
|
42
|
+
}
|
|
43
|
+
function isTcpDaemonHost(host) {
|
|
44
|
+
return host !== null && !isIpcDaemonHost(host);
|
|
45
|
+
}
|
|
46
|
+
function readPidSocketTarget(seaworkHome) {
|
|
47
|
+
const pidPath = path.join(seaworkHome, PID_FILENAME);
|
|
48
|
+
if (!existsSync(pidPath)) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(readFileSync(pidPath, "utf-8"));
|
|
53
|
+
return typeof parsed.listen === "string"
|
|
54
|
+
? parsed.listen
|
|
55
|
+
: typeof parsed.sockPath === "string"
|
|
56
|
+
? parsed.sockPath
|
|
57
|
+
: null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function resolveConfiguredIpcDaemonHost(env, seaworkHome) {
|
|
64
|
+
const directEnvHost = normalizeDaemonHost(env.SEAWORK_LISTEN ?? "");
|
|
65
|
+
if (isIpcDaemonHost(directEnvHost)) {
|
|
66
|
+
return directEnvHost;
|
|
67
|
+
}
|
|
68
|
+
const pidHost = normalizeDaemonHost(readPidSocketTarget(seaworkHome) ?? "");
|
|
69
|
+
if (isIpcDaemonHost(pidHost)) {
|
|
70
|
+
return pidHost;
|
|
71
|
+
}
|
|
72
|
+
const config = loadConfig(seaworkHome, { env });
|
|
73
|
+
const configuredHost = normalizeDaemonHost(config.listen);
|
|
74
|
+
return isIpcDaemonHost(configuredHost) ? configuredHost : null;
|
|
75
|
+
}
|
|
76
|
+
function resolveConfiguredTcpDaemonHost(env, seaworkHome) {
|
|
77
|
+
const configuredHost = normalizeDaemonHost(loadConfig(seaworkHome, { env }).listen);
|
|
78
|
+
if (!isTcpDaemonHost(configuredHost)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return configuredHost === "127.0.0.1:6767" ? null : configuredHost;
|
|
82
|
+
}
|
|
83
|
+
export function resolveDefaultDaemonHosts(env = process.env) {
|
|
84
|
+
const seaworkHome = resolveSeaworkHome(env);
|
|
85
|
+
const candidates = [];
|
|
86
|
+
const configuredIpcHost = resolveConfiguredIpcDaemonHost(env, seaworkHome);
|
|
87
|
+
if (configuredIpcHost) {
|
|
88
|
+
candidates.push(configuredIpcHost);
|
|
89
|
+
}
|
|
90
|
+
const configuredTcpHost = resolveConfiguredTcpDaemonHost(env, seaworkHome);
|
|
91
|
+
if (configuredTcpHost) {
|
|
92
|
+
candidates.push(configuredTcpHost);
|
|
93
|
+
}
|
|
94
|
+
candidates.push(DEFAULT_HOST);
|
|
95
|
+
return Array.from(new Set(candidates));
|
|
96
|
+
}
|
|
97
|
+
function resolveDaemonHostCandidates(options) {
|
|
98
|
+
const explicitHost = options?.host ?? process.env.SEAWORK_HOST;
|
|
99
|
+
if (explicitHost) {
|
|
100
|
+
return [explicitHost];
|
|
101
|
+
}
|
|
102
|
+
return resolveDefaultDaemonHosts();
|
|
103
|
+
}
|
|
104
|
+
export function resolveDaemonTarget(host) {
|
|
105
|
+
const trimmed = host.trim();
|
|
106
|
+
if (trimmed.startsWith("unix://") ||
|
|
107
|
+
trimmed.startsWith("pipe://") ||
|
|
108
|
+
trimmed.startsWith("\\\\.\\pipe\\")) {
|
|
109
|
+
const socketPath = trimmed.startsWith("unix://")
|
|
110
|
+
? trimmed.slice("unix://".length).trim()
|
|
111
|
+
: trimmed.startsWith("pipe://")
|
|
112
|
+
? trimmed.slice("pipe://".length).trim()
|
|
113
|
+
: trimmed;
|
|
114
|
+
if (!socketPath) {
|
|
115
|
+
throw new Error("Invalid IPC daemon target: missing socket path");
|
|
116
|
+
}
|
|
117
|
+
const isUnixSocket = trimmed.startsWith("unix://");
|
|
118
|
+
return {
|
|
119
|
+
type: "ipc",
|
|
120
|
+
url: isUnixSocket ? `ws+unix://${socketPath}:/ws` : "ws://localhost/ws",
|
|
121
|
+
socketPath,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
type: "tcp",
|
|
126
|
+
url: `ws://${trimmed}/ws`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Create a WebSocket factory that works in Node.js
|
|
131
|
+
*/
|
|
132
|
+
function createNodeWebSocketFactory() {
|
|
133
|
+
return (url, options) => {
|
|
134
|
+
return new WebSocket(url, {
|
|
135
|
+
headers: options?.headers,
|
|
136
|
+
...(options?.socketPath ? { socketPath: options.socketPath } : {}),
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create and connect a daemon client
|
|
142
|
+
* Returns the connected client or throws if connection fails
|
|
143
|
+
*/
|
|
144
|
+
export async function connectToDaemon(options) {
|
|
145
|
+
const timeout = options?.timeout ?? DEFAULT_TIMEOUT;
|
|
146
|
+
const clientId = await getOrCreateCliClientId();
|
|
147
|
+
const hosts = resolveDaemonHostCandidates(options);
|
|
148
|
+
const nodeWebSocketFactory = createNodeWebSocketFactory();
|
|
149
|
+
let lastError = null;
|
|
150
|
+
for (const host of hosts) {
|
|
151
|
+
const target = resolveDaemonTarget(host);
|
|
152
|
+
const client = new DaemonClient({
|
|
153
|
+
url: target.url,
|
|
154
|
+
clientId,
|
|
155
|
+
clientType: "cli",
|
|
156
|
+
connectTimeoutMs: timeout,
|
|
157
|
+
webSocketFactory: (url, config) => nodeWebSocketFactory(url, {
|
|
158
|
+
headers: config?.headers,
|
|
159
|
+
...(target.type === "ipc" ? { socketPath: target.socketPath } : {}),
|
|
160
|
+
}),
|
|
161
|
+
reconnect: { enabled: false },
|
|
162
|
+
});
|
|
163
|
+
const connectPromise = client.connect();
|
|
164
|
+
try {
|
|
165
|
+
await connectPromise;
|
|
166
|
+
return client;
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
lastError = err;
|
|
170
|
+
await client.close().catch(() => { });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (lastError instanceof Error) {
|
|
174
|
+
throw lastError;
|
|
175
|
+
}
|
|
176
|
+
throw new Error(`Unable to connect to Seawork daemon via ${hosts.join(", ")}`);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Try to connect to the daemon, returns null if connection fails
|
|
180
|
+
*/
|
|
181
|
+
export async function tryConnectToDaemon(options) {
|
|
182
|
+
try {
|
|
183
|
+
return await connectToDaemon(options);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Resolve an agent ID from a partial ID or name.
|
|
191
|
+
* Supports:
|
|
192
|
+
* - Full ID match
|
|
193
|
+
* - Prefix match (first N characters)
|
|
194
|
+
* - Title/name match (case-insensitive)
|
|
195
|
+
*
|
|
196
|
+
* Returns the full agent ID if found, null otherwise.
|
|
197
|
+
*/
|
|
198
|
+
export function resolveAgentId(idOrName, agents) {
|
|
199
|
+
if (!idOrName || agents.length === 0) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
const query = idOrName.toLowerCase();
|
|
203
|
+
// Try exact ID match first
|
|
204
|
+
const exactMatch = agents.find((a) => a.id === idOrName);
|
|
205
|
+
if (exactMatch) {
|
|
206
|
+
return exactMatch.id;
|
|
207
|
+
}
|
|
208
|
+
// Try ID prefix match
|
|
209
|
+
const prefixMatches = agents.filter((a) => a.id.toLowerCase().startsWith(query));
|
|
210
|
+
if (prefixMatches.length === 1 && prefixMatches[0]) {
|
|
211
|
+
return prefixMatches[0].id;
|
|
212
|
+
}
|
|
213
|
+
// Try title/name match (case-insensitive)
|
|
214
|
+
const titleMatches = agents.filter((a) => a.title?.toLowerCase() === query);
|
|
215
|
+
if (titleMatches.length === 1 && titleMatches[0]) {
|
|
216
|
+
return titleMatches[0].id;
|
|
217
|
+
}
|
|
218
|
+
// Try partial title match
|
|
219
|
+
const partialTitleMatches = agents.filter((a) => a.title?.toLowerCase().includes(query));
|
|
220
|
+
if (partialTitleMatches.length === 1 && partialTitleMatches[0]) {
|
|
221
|
+
return partialTitleMatches[0].id;
|
|
222
|
+
}
|
|
223
|
+
// If we have multiple prefix matches and no unique title match, return first prefix match
|
|
224
|
+
const firstPrefixMatch = prefixMatches[0];
|
|
225
|
+
if (firstPrefixMatch) {
|
|
226
|
+
return firstPrefixMatch.id;
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/utils/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
export declare function collectMultiple(value: string, previous: string[]): string[];
|
|
3
|
+
export declare function addJsonOption<T extends Command>(command: T): T;
|
|
4
|
+
export declare function addDaemonHostOption<T extends Command>(command: T): T;
|
|
5
|
+
export declare function addJsonAndDaemonHostOptions<T extends Command>(command: T): T;
|
|
6
|
+
//# sourceMappingURL=command-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-options.d.ts","sourceRoot":"","sources":["../../src/utils/command-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3E;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAG9D;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAGpE;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAE5E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const JSON_OPTION_DESCRIPTION = "Output in JSON format";
|
|
2
|
+
const DAEMON_HOST_OPTION_DESCRIPTION = "Daemon host target (default: local socket/pipe, then localhost:6767)";
|
|
3
|
+
export function collectMultiple(value, previous) {
|
|
4
|
+
return previous.concat([value]);
|
|
5
|
+
}
|
|
6
|
+
export function addJsonOption(command) {
|
|
7
|
+
command.option("--json", JSON_OPTION_DESCRIPTION);
|
|
8
|
+
return command;
|
|
9
|
+
}
|
|
10
|
+
export function addDaemonHostOption(command) {
|
|
11
|
+
command.option("--host <host>", DAEMON_HOST_OPTION_DESCRIPTION);
|
|
12
|
+
return command;
|
|
13
|
+
}
|
|
14
|
+
export function addJsonAndDaemonHostOptions(command) {
|
|
15
|
+
return addDaemonHostOption(addJsonOption(command));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=command-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-options.js","sourceRoot":"","sources":["../../src/utils/command-options.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AACxD,MAAM,8BAA8B,GAClC,sEAAsE,CAAC;AAEzE,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,QAAkB;IAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAoB,OAAU;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAoB,OAAU;IAC/D,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAoB,OAAU;IACvE,OAAO,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqCnD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse duration string to milliseconds.
|
|
3
|
+
* Supports formats like: 5m, 30s, 1h, 2h30m, 90, etc.
|
|
4
|
+
* If no unit is specified, assumes seconds.
|
|
5
|
+
*/
|
|
6
|
+
export function parseDuration(input) {
|
|
7
|
+
const trimmed = input.trim();
|
|
8
|
+
// If it's just a number, treat as seconds
|
|
9
|
+
if (/^\d+$/.test(trimmed)) {
|
|
10
|
+
return parseInt(trimmed, 10) * 1000;
|
|
11
|
+
}
|
|
12
|
+
// Parse duration with units
|
|
13
|
+
let totalMs = 0;
|
|
14
|
+
const regex = /(\d+)([smh])/g;
|
|
15
|
+
let match;
|
|
16
|
+
let hasMatch = false;
|
|
17
|
+
while ((match = regex.exec(trimmed)) !== null) {
|
|
18
|
+
hasMatch = true;
|
|
19
|
+
const value = parseInt(match[1], 10);
|
|
20
|
+
const unit = match[2];
|
|
21
|
+
switch (unit) {
|
|
22
|
+
case "s":
|
|
23
|
+
totalMs += value * 1000;
|
|
24
|
+
break;
|
|
25
|
+
case "m":
|
|
26
|
+
totalMs += value * 60 * 1000;
|
|
27
|
+
break;
|
|
28
|
+
case "h":
|
|
29
|
+
totalMs += value * 60 * 60 * 1000;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!hasMatch) {
|
|
34
|
+
throw new Error(`Invalid duration format: ${input}. Use formats like: 5m, 30s, 1h, 2h30m`);
|
|
35
|
+
}
|
|
36
|
+
return totalMs;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,0CAA0C;IAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,eAAe,CAAC;IAC9B,IAAI,KAAK,CAAC;IACV,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG;gBACN,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC;gBACxB,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC7B,MAAM;YACR,KAAK,GAAG;gBACN,OAAO,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAClC,MAAM;QACV,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,wCAAwC,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities for cwd filtering in agent commands.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if `candidatePath` is the same directory as `basePath` or a descendant of it.
|
|
6
|
+
*
|
|
7
|
+
* Handles both Unix (/) and Windows (\) path separators, including mixed separators.
|
|
8
|
+
* This is important because agent cwd paths come from the agent's OS (could be Windows)
|
|
9
|
+
* while the CLI filter path comes from the user (could also be Windows or Unix).
|
|
10
|
+
*/
|
|
11
|
+
export declare function isSameOrDescendantPath(basePath: string, candidatePath: string): boolean;
|
|
12
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAcvF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities for cwd filtering in agent commands.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check if `candidatePath` is the same directory as `basePath` or a descendant of it.
|
|
6
|
+
*
|
|
7
|
+
* Handles both Unix (/) and Windows (\) path separators, including mixed separators.
|
|
8
|
+
* This is important because agent cwd paths come from the agent's OS (could be Windows)
|
|
9
|
+
* while the CLI filter path comes from the user (could also be Windows or Unix).
|
|
10
|
+
*/
|
|
11
|
+
export function isSameOrDescendantPath(basePath, candidatePath) {
|
|
12
|
+
// Normalize both paths: replace all backslashes with forward slashes, strip trailing separator
|
|
13
|
+
let normalizedBase = basePath.replace(/\\/g, "/").replace(/\/$/, "");
|
|
14
|
+
let normalizedCandidate = candidatePath.replace(/\\/g, "/").replace(/\/$/, "");
|
|
15
|
+
// Windows paths are case-insensitive — detect by drive letter prefix (e.g. "C:/")
|
|
16
|
+
if (/^[a-zA-Z]:\//.test(normalizedBase) || /^[a-zA-Z]:\//.test(normalizedCandidate)) {
|
|
17
|
+
normalizedBase = normalizedBase.toLowerCase();
|
|
18
|
+
normalizedCandidate = normalizedCandidate.toLowerCase();
|
|
19
|
+
}
|
|
20
|
+
return (normalizedCandidate === normalizedBase || normalizedCandidate.startsWith(normalizedBase + "/"));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,aAAqB;IAC5E,+FAA+F;IAC/F,IAAI,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,mBAAmB,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/E,kFAAkF;IAClF,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpF,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAC9C,mBAAmB,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC;IAED,OAAO,CACL,mBAAmB,KAAK,cAAc,IAAI,mBAAmB,CAAC,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC,CAC/F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentTimelineItem, DaemonClient } from "@seawork/server";
|
|
2
|
+
type FetchProjectedTimelineItemsInput = {
|
|
3
|
+
client: DaemonClient;
|
|
4
|
+
agentId: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function fetchProjectedTimelineItems(input: FetchProjectedTimelineItemsInput): Promise<AgentTimelineItem[]>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/utils/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvE,KAAK,gCAAgC,GAAG;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAO9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export async function fetchProjectedTimelineItems(input) {
|
|
2
|
+
const timeline = await input.client.fetchAgentTimeline(input.agentId, {
|
|
3
|
+
direction: "tail",
|
|
4
|
+
limit: 0,
|
|
5
|
+
projection: "projected",
|
|
6
|
+
});
|
|
7
|
+
return timeline.entries.map((entry) => entry.item);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/utils/timeline.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAuC;IAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE;QACpE,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@seawork/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Seawork CLI - control your AI coding agents from the command line",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"bin",
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"bin": {
|
|
14
|
+
"seawork": "bin/seawork"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\" && tsc -p tsconfig.json --incremental false",
|
|
18
|
+
"prepack": "npm run build",
|
|
19
|
+
"typecheck": "tsc --noEmit",
|
|
20
|
+
"test": "npm run test:local",
|
|
21
|
+
"test:local": "tsx tests/run-all.ts",
|
|
22
|
+
"test:e2e": "npm run test:local",
|
|
23
|
+
"test:e2e:lifecycle": "npx tsx tests/e2e/agent-lifecycle.test.ts"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@clack/prompts": "^1.0.0",
|
|
27
|
+
"@seawork/relay": "1.0.0",
|
|
28
|
+
"@seawork/server": "1.0.0",
|
|
29
|
+
"chalk": "^5.3.0",
|
|
30
|
+
"commander": "^12.0.0",
|
|
31
|
+
"mime-types": "^2.1.35",
|
|
32
|
+
"ws": "^8.14.2",
|
|
33
|
+
"yaml": "^2.8.2"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/mime-types": "^3.0.1",
|
|
37
|
+
"@types/ws": "^8.5.8",
|
|
38
|
+
"tsx": "^4.6.0",
|
|
39
|
+
"typescript": "^5.2.2",
|
|
40
|
+
"zx": "^8.8.5"
|
|
41
|
+
}
|
|
42
|
+
}
|