@nodetool-ai/cli 0.7.0-rc.11

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.
Files changed (77) hide show
  1. package/dist/ExecutionTree.d.ts +19 -0
  2. package/dist/ExecutionTree.d.ts.map +1 -0
  3. package/dist/ExecutionTree.js +100 -0
  4. package/dist/ExecutionTree.js.map +1 -0
  5. package/dist/app.d.ts +50 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +767 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/commands/agent.d.ts +11 -0
  10. package/dist/commands/agent.d.ts.map +1 -0
  11. package/dist/commands/agent.js +483 -0
  12. package/dist/commands/agent.js.map +1 -0
  13. package/dist/commands/deploy-helpers.d.ts +46 -0
  14. package/dist/commands/deploy-helpers.d.ts.map +1 -0
  15. package/dist/commands/deploy-helpers.js +448 -0
  16. package/dist/commands/deploy-helpers.js.map +1 -0
  17. package/dist/commands/deploy.d.ts +8 -0
  18. package/dist/commands/deploy.d.ts.map +1 -0
  19. package/dist/commands/deploy.js +645 -0
  20. package/dist/commands/deploy.js.map +1 -0
  21. package/dist/commands/models-hf.d.ts +9 -0
  22. package/dist/commands/models-hf.d.ts.map +1 -0
  23. package/dist/commands/models-hf.js +235 -0
  24. package/dist/commands/models-hf.js.map +1 -0
  25. package/dist/commands/models-recommended.d.ts +10 -0
  26. package/dist/commands/models-recommended.d.ts.map +1 -0
  27. package/dist/commands/models-recommended.js +128 -0
  28. package/dist/commands/models-recommended.js.map +1 -0
  29. package/dist/commands/package-helpers.d.ts +14 -0
  30. package/dist/commands/package-helpers.d.ts.map +1 -0
  31. package/dist/commands/package-helpers.js +76 -0
  32. package/dist/commands/package-helpers.js.map +1 -0
  33. package/dist/commands/package.d.ts +3 -0
  34. package/dist/commands/package.d.ts.map +1 -0
  35. package/dist/commands/package.js +254 -0
  36. package/dist/commands/package.js.map +1 -0
  37. package/dist/index.d.ts +13 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +233 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/markdown.d.ts +9 -0
  42. package/dist/markdown.d.ts.map +1 -0
  43. package/dist/markdown.js +48 -0
  44. package/dist/markdown.js.map +1 -0
  45. package/dist/nodetool.d.ts +16 -0
  46. package/dist/nodetool.d.ts.map +1 -0
  47. package/dist/nodetool.js +1154 -0
  48. package/dist/nodetool.js.map +1 -0
  49. package/dist/providers.d.ts +47 -0
  50. package/dist/providers.d.ts.map +1 -0
  51. package/dist/providers.js +173 -0
  52. package/dist/providers.js.map +1 -0
  53. package/dist/readline-input.d.ts +29 -0
  54. package/dist/readline-input.d.ts.map +1 -0
  55. package/dist/readline-input.js +199 -0
  56. package/dist/readline-input.js.map +1 -0
  57. package/dist/run-dsl.d.ts +11 -0
  58. package/dist/run-dsl.d.ts.map +1 -0
  59. package/dist/run-dsl.js +31 -0
  60. package/dist/run-dsl.js.map +1 -0
  61. package/dist/settings.d.ts +18 -0
  62. package/dist/settings.d.ts.map +1 -0
  63. package/dist/settings.js +86 -0
  64. package/dist/settings.js.map +1 -0
  65. package/dist/stdin.d.ts +48 -0
  66. package/dist/stdin.d.ts.map +1 -0
  67. package/dist/stdin.js +352 -0
  68. package/dist/stdin.js.map +1 -0
  69. package/dist/useExecutionState.d.ts +44 -0
  70. package/dist/useExecutionState.d.ts.map +1 -0
  71. package/dist/useExecutionState.js +281 -0
  72. package/dist/useExecutionState.js.map +1 -0
  73. package/dist/websocket-client.d.ts +100 -0
  74. package/dist/websocket-client.d.ts.map +1 -0
  75. package/dist/websocket-client.js +351 -0
  76. package/dist/websocket-client.js.map +1 -0
  77. package/package.json +85 -0
@@ -0,0 +1,18 @@
1
+ export interface ChatSettings {
2
+ provider: string;
3
+ model: string;
4
+ agentMode: boolean;
5
+ /**
6
+ * Which planner to use when agent mode is on:
7
+ * - "graph" — GraphPlanner builds a workflow graph (default; uses
8
+ * `nodetool.*` core nodes plus the `find_model` tool).
9
+ * - "multi" — TaskPlanner builds a parallel task DAG of LLM steps.
10
+ */
11
+ agentPlanner: "multi" | "graph";
12
+ enabledTools: string[];
13
+ workspace: string;
14
+ }
15
+ export declare const DEFAULT_SETTINGS: ChatSettings;
16
+ export declare function loadSettings(): Promise<ChatSettings>;
17
+ export declare function saveSettings(settings: Partial<ChatSettings>): Promise<void>;
18
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,EAAE,YAsC9B,CAAC;AA0BF,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAO1D;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,86 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
4
+ export const DEFAULT_SETTINGS = {
5
+ provider: detectDefaultProvider(),
6
+ model: detectDefaultModel(),
7
+ agentMode: false,
8
+ agentPlanner: "graph",
9
+ enabledTools: [
10
+ "read_file",
11
+ "write_file",
12
+ "edit_file",
13
+ "list_directory",
14
+ "glob",
15
+ "grep",
16
+ "download_file",
17
+ "http_request",
18
+ "browser",
19
+ "screenshot",
20
+ "run_code",
21
+ "calculator",
22
+ // NodeTool MCP tools
23
+ "list_workflows",
24
+ "get_workflow",
25
+ "create_workflow",
26
+ "run_workflow",
27
+ "validate_workflow",
28
+ "get_example_workflow",
29
+ "export_workflow_digraph",
30
+ "list_nodes",
31
+ "search_nodes",
32
+ "get_node_info",
33
+ "list_jobs",
34
+ "get_job",
35
+ "get_job_logs",
36
+ "start_background_job",
37
+ "list_assets",
38
+ "get_asset",
39
+ "list_models"
40
+ ],
41
+ workspace: process.cwd()
42
+ };
43
+ function detectDefaultProvider() {
44
+ if (process.env["ANTHROPIC_API_KEY"])
45
+ return "anthropic";
46
+ if (process.env["OPENAI_API_KEY"])
47
+ return "openai";
48
+ if (process.env["GEMINI_API_KEY"])
49
+ return "gemini";
50
+ return "ollama"; // local fallback
51
+ }
52
+ function detectDefaultModel() {
53
+ const prov = detectDefaultProvider();
54
+ switch (prov) {
55
+ case "anthropic":
56
+ return "claude-sonnet-4-6";
57
+ case "openai":
58
+ return "gpt-4o";
59
+ case "gemini":
60
+ return "gemini-2.0-flash";
61
+ default:
62
+ return "llama3.2";
63
+ }
64
+ }
65
+ const SETTINGS_DIR = join(homedir(), ".nodetool");
66
+ const SETTINGS_FILE = join(SETTINGS_DIR, "chat-settings.json");
67
+ export async function loadSettings() {
68
+ try {
69
+ const content = await readFile(SETTINGS_FILE, "utf-8");
70
+ return { ...DEFAULT_SETTINGS, ...JSON.parse(content) };
71
+ }
72
+ catch {
73
+ return { ...DEFAULT_SETTINGS };
74
+ }
75
+ }
76
+ export async function saveSettings(settings) {
77
+ try {
78
+ await mkdir(SETTINGS_DIR, { recursive: true });
79
+ const current = await loadSettings();
80
+ await writeFile(SETTINGS_FILE, JSON.stringify({ ...current, ...settings }, null, 2));
81
+ }
82
+ catch {
83
+ // ignore save errors silently
84
+ }
85
+ }
86
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAiB9D,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,QAAQ,EAAE,qBAAqB,EAAE;IACjC,KAAK,EAAE,kBAAkB,EAAE;IAC3B,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE;QACZ,WAAW;QACX,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,MAAM;QACN,MAAM;QACN,eAAe;QACf,cAAc;QACd,SAAS;QACT,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,qBAAqB;QACrB,gBAAgB;QAChB,cAAc;QACd,iBAAiB;QACjB,cAAc;QACd,mBAAmB;QACnB,sBAAsB;QACtB,yBAAyB;QACzB,YAAY;QACZ,cAAc;QACd,eAAe;QACf,WAAW;QACX,SAAS;QACT,cAAc;QACd,sBAAsB;QACtB,aAAa;QACb,WAAW;QACX,aAAa;KACd;IACD,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;CACzB,CAAC;AAEF,SAAS,qBAAqB;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAAE,OAAO,WAAW,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACnD,OAAO,QAAQ,CAAC,CAAC,iBAAiB;AACpC,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,OAAO,mBAAmB,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAClD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;QACrC,MAAM,SAAS,CACb,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Stdin mode — read chat messages (or agent objectives) from stdin, write responses to stdout.
3
+ *
4
+ * Activated automatically when stdin is not a TTY (i.e. piped input).
5
+ * Each non-empty line is sent as a user message / agent objective.
6
+ * The assistant reply streams to stdout, followed by a newline.
7
+ * Conversation history is preserved across lines within a single session.
8
+ *
9
+ * Supports both direct-provider mode and WebSocket server mode (--url).
10
+ *
11
+ * Slash commands (WebSocket mode only):
12
+ * /run <workflow_id> [json_params] — run a workflow
13
+ * /stop — stop in-progress generation
14
+ * /reconnect <job_id> — reconnect to a running job
15
+ * /resume <job_id> — resume a paused job
16
+ * /cancel <job_id> — cancel a running job
17
+ * /status [job_id] — get job/all-jobs status
18
+ * /help — show available commands
19
+ */
20
+ import type { BaseProvider } from "@nodetool-ai/runtime";
21
+ import type { Tool } from "@nodetool-ai/agents/tool";
22
+ import type { NodeRegistry } from "@nodetool-ai/node-sdk";
23
+ export interface StdinModeOptions {
24
+ provider: string;
25
+ model: string;
26
+ workspaceDir: string;
27
+ agentMode?: boolean;
28
+ /**
29
+ * Which planner to use when `agentMode` is true:
30
+ * - `"graph"` — GraphPlanner builds a workflow DAG (default when registry available).
31
+ * - `"multi"` — TaskPlanner builds a parallel task DAG of LLM steps.
32
+ */
33
+ agentPlanner?: "multi" | "graph";
34
+ wsUrl?: string;
35
+ /** Pre-built tools (e.g. from --sandbox) appended to the Agent's tool list. */
36
+ extraTools?: Tool[];
37
+ /**
38
+ * NodeRegistry for graph-native agent mode. When supplied AND the planner
39
+ * is "graph", agent mode uses MultiModeAgent + GraphPlanner so the agent
40
+ * can build workflows with the curated `nodetool.*` core nodes and the
41
+ * `find_model` tool.
42
+ */
43
+ registry?: NodeRegistry;
44
+ /** Configured BaseProvider instances by id, exposed via `find_model`. */
45
+ agentProviders?: Record<string, BaseProvider>;
46
+ }
47
+ export declare function runStdinMode(opts: StdinModeOptions): Promise<void>;
48
+ //# sourceMappingURL=stdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../src/stdin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,sBAAsB,CAAC;AAIlE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC/C;AA2JD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2MxE"}
package/dist/stdin.js ADDED
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Stdin mode — read chat messages (or agent objectives) from stdin, write responses to stdout.
3
+ *
4
+ * Activated automatically when stdin is not a TTY (i.e. piped input).
5
+ * Each non-empty line is sent as a user message / agent objective.
6
+ * The assistant reply streams to stdout, followed by a newline.
7
+ * Conversation history is preserved across lines within a single session.
8
+ *
9
+ * Supports both direct-provider mode and WebSocket server mode (--url).
10
+ *
11
+ * Slash commands (WebSocket mode only):
12
+ * /run <workflow_id> [json_params] — run a workflow
13
+ * /stop — stop in-progress generation
14
+ * /reconnect <job_id> — reconnect to a running job
15
+ * /resume <job_id> — resume a paused job
16
+ * /cancel <job_id> — cancel a running job
17
+ * /status [job_id] — get job/all-jobs status
18
+ * /help — show available commands
19
+ */
20
+ import readline from "node:readline";
21
+ import { ProcessingContext } from "@nodetool-ai/runtime";
22
+ import { processChat } from "@nodetool-ai/chat";
23
+ import { MultiModeAgent } from "@nodetool-ai/agents";
24
+ import { createProvider, WebSocketProvider } from "./providers.js";
25
+ import { WebSocketChatClient } from "./websocket-client.js";
26
+ import { getSecret } from "@nodetool-ai/models";
27
+ function parseSlashCommand(line) {
28
+ if (!line.startsWith("/"))
29
+ return null;
30
+ const spaceIdx = line.indexOf(" ");
31
+ if (spaceIdx === -1) {
32
+ return { name: line.slice(1).toLowerCase(), args: "" };
33
+ }
34
+ return {
35
+ name: line.slice(1, spaceIdx).toLowerCase(),
36
+ args: line.slice(spaceIdx + 1).trim()
37
+ };
38
+ }
39
+ async function displayJobEvents(events) {
40
+ for await (const event of events) {
41
+ if (event.type === "job_update") {
42
+ process.stderr.write(`[job] ${event.status}\n`);
43
+ if (event.error) {
44
+ process.stderr.write(`[error] ${event.error}\n`);
45
+ }
46
+ if (event.result) {
47
+ process.stdout.write(JSON.stringify(event.result, null, 2));
48
+ process.stdout.write("\n");
49
+ }
50
+ }
51
+ else if (event.type === "node_update") {
52
+ process.stderr.write(`[node ${event.node_id}] ${event.status}\n`);
53
+ }
54
+ else if (event.type === "output_update") {
55
+ process.stdout.write(JSON.stringify(event.value, null, 2));
56
+ process.stdout.write("\n");
57
+ }
58
+ else if (event.type === "node_progress") {
59
+ const pct = event.total
60
+ ? `${event.progress}/${event.total}`
61
+ : `${event.progress}`;
62
+ process.stderr.write(`[progress ${event.node_id}] ${pct}\n`);
63
+ }
64
+ else if (event.type === "error") {
65
+ process.stderr.write(`Error: ${event.message}\n`);
66
+ break;
67
+ }
68
+ else if (event.type === "done") {
69
+ break;
70
+ }
71
+ }
72
+ }
73
+ async function handleSlashCommand(cmd, wsClient) {
74
+ switch (cmd.name) {
75
+ case "run": {
76
+ // /run <workflow_id> [json_params]
77
+ const parts = cmd.args.split(/\s+/);
78
+ const workflowId = parts[0];
79
+ if (!workflowId) {
80
+ process.stderr.write("Usage: /run <workflow_id> [json_params]\n");
81
+ return;
82
+ }
83
+ let params = {};
84
+ if (parts.length > 1) {
85
+ const jsonStr = parts.slice(1).join(" ");
86
+ try {
87
+ params = JSON.parse(jsonStr);
88
+ }
89
+ catch {
90
+ process.stderr.write(`Invalid JSON params: ${jsonStr}\n`);
91
+ return;
92
+ }
93
+ }
94
+ process.stderr.write(`Running workflow ${workflowId}...\n`);
95
+ await displayJobEvents(wsClient.runJob({ workflowId, params }));
96
+ return;
97
+ }
98
+ case "stop": {
99
+ wsClient.stop();
100
+ process.stderr.write("Stop requested\n");
101
+ return;
102
+ }
103
+ case "reconnect": {
104
+ const jobId = cmd.args.trim();
105
+ if (!jobId) {
106
+ process.stderr.write("Usage: /reconnect <job_id>\n");
107
+ return;
108
+ }
109
+ process.stderr.write(`Reconnecting to job ${jobId}...\n`);
110
+ await displayJobEvents(wsClient.reconnectJob(jobId));
111
+ return;
112
+ }
113
+ case "resume": {
114
+ const jobId = cmd.args.trim();
115
+ if (!jobId) {
116
+ process.stderr.write("Usage: /resume <job_id>\n");
117
+ return;
118
+ }
119
+ process.stderr.write(`Resuming job ${jobId}...\n`);
120
+ await displayJobEvents(wsClient.resumeJob(jobId));
121
+ return;
122
+ }
123
+ case "cancel": {
124
+ const jobId = cmd.args.trim();
125
+ if (!jobId) {
126
+ process.stderr.write("Usage: /cancel <job_id>\n");
127
+ return;
128
+ }
129
+ wsClient.cancelJob(jobId);
130
+ process.stderr.write(`Cancel requested for job ${jobId}\n`);
131
+ return;
132
+ }
133
+ case "status": {
134
+ const jobId = cmd.args.trim() || undefined;
135
+ wsClient.getStatus(jobId);
136
+ process.stderr.write(jobId
137
+ ? `Status requested for job ${jobId}\n`
138
+ : "Status requested for all jobs\n");
139
+ return;
140
+ }
141
+ case "help":
142
+ process.stdout.write([
143
+ "Available commands:",
144
+ " /run <workflow_id> [json_params] — Run a workflow",
145
+ " /stop — Stop in-progress generation",
146
+ " /reconnect <job_id> — Reconnect to a running job",
147
+ " /resume <job_id> — Resume a paused job",
148
+ " /cancel <job_id> — Cancel a running job",
149
+ " /status [job_id] — Get job status",
150
+ " /help — Show this help",
151
+ "",
152
+ "Any other input is sent as a chat message.",
153
+ ""
154
+ ].join("\n"));
155
+ return;
156
+ default:
157
+ process.stderr.write(`Unknown command: /${cmd.name}. Type /help for available commands.\n`);
158
+ }
159
+ }
160
+ export async function runStdinMode(opts) {
161
+ const wsClient = opts.wsUrl ? new WebSocketChatClient(opts.wsUrl) : null;
162
+ if (wsClient) {
163
+ await wsClient.connect();
164
+ }
165
+ // Direct mode: create provider once for the session
166
+ const directProvider = wsClient ? null : await createProvider(opts.provider);
167
+ const threadId = crypto.randomUUID();
168
+ const chatHistory = [];
169
+ const rl = readline.createInterface({
170
+ input: process.stdin,
171
+ terminal: false
172
+ });
173
+ for await (const line of rl) {
174
+ const trimmed = line.trim();
175
+ if (!trimmed)
176
+ continue;
177
+ // Slash commands — only supported in WebSocket mode
178
+ const cmd = parseSlashCommand(trimmed);
179
+ if (cmd) {
180
+ if (wsClient) {
181
+ await handleSlashCommand(cmd, wsClient);
182
+ }
183
+ else {
184
+ process.stderr.write("Slash commands require --url (WebSocket mode).\n");
185
+ }
186
+ continue;
187
+ }
188
+ if (opts.agentMode) {
189
+ // --- Agent mode: each line is an objective ---
190
+ const prov = wsClient
191
+ ? new WebSocketProvider(wsClient, opts.model, opts.provider)
192
+ : directProvider;
193
+ // Pick the planner. The "graph" planner needs a registry; without one
194
+ // we silently downgrade to the multi-task planner.
195
+ const plannerType = opts.agentPlanner === "multi" ? "multi" : "graph";
196
+ const useGraphPlanner = plannerType === "graph" && !!opts.registry;
197
+ const markdownOutputSchema = {
198
+ type: "object",
199
+ properties: {
200
+ markdown: {
201
+ type: "string",
202
+ description: "The markdown content of the response"
203
+ }
204
+ },
205
+ required: ["markdown"]
206
+ };
207
+ const agent = new MultiModeAgent({
208
+ name: "stdin-agent",
209
+ objective: trimmed,
210
+ provider: prov,
211
+ model: opts.model,
212
+ mode: "plan",
213
+ tools: opts.extraTools ?? [],
214
+ useGraphPlanner,
215
+ registry: useGraphPlanner ? opts.registry : undefined,
216
+ providers: useGraphPlanner ? opts.agentProviders : undefined,
217
+ maxStepIterations: 20,
218
+ outputSchema: markdownOutputSchema
219
+ });
220
+ const ctx = new ProcessingContext({
221
+ jobId: crypto.randomUUID(),
222
+ userId: "1",
223
+ workspaceDir: opts.workspaceDir,
224
+ secretResolver: getSecret
225
+ });
226
+ let taskResult = null;
227
+ for await (const msg of agent.execute(ctx)) {
228
+ if (msg.type === "chunk") {
229
+ if (taskResult === null) {
230
+ process.stdout.write(msg.content ?? "");
231
+ }
232
+ }
233
+ else if (msg.type === "step_result") {
234
+ const sr = msg;
235
+ if (sr.is_task_result) {
236
+ taskResult =
237
+ typeof sr.result === "string"
238
+ ? sr.result
239
+ : JSON.stringify(sr.result, null, 2);
240
+ }
241
+ }
242
+ else if (msg.type === "planning_update") {
243
+ process.stderr.write(`[planning] ${msg.content.slice(0, 80)}\n`);
244
+ }
245
+ else if (msg.type === "task_update") {
246
+ process.stderr.write(`[task] ${msg.event}\n`);
247
+ }
248
+ else if (msg.type === "tool_call_update") {
249
+ process.stderr.write(`[tool] ${msg.name}\n`);
250
+ }
251
+ }
252
+ if (taskResult !== null) {
253
+ process.stdout.write(taskResult);
254
+ }
255
+ else {
256
+ // Plan-mode agents return their structured result via getResults().
257
+ const finalResults = agent.getResults();
258
+ const finalText = typeof finalResults === "string"
259
+ ? finalResults
260
+ : finalResults &&
261
+ typeof finalResults === "object" &&
262
+ "markdown" in finalResults &&
263
+ typeof finalResults.markdown ===
264
+ "string"
265
+ ? finalResults.markdown
266
+ : finalResults != null
267
+ ? JSON.stringify(finalResults, null, 2)
268
+ : "";
269
+ if (finalText)
270
+ process.stdout.write(finalText);
271
+ }
272
+ }
273
+ else if (wsClient && !opts.extraTools?.length) {
274
+ // --- Regular chat via WebSocket (server handles everything) ---
275
+ for await (const event of wsClient.chat(trimmed, threadId, opts.model, opts.provider)) {
276
+ if (event.type === "chunk") {
277
+ process.stdout.write(event.content);
278
+ }
279
+ else if (event.type === "tool_call") {
280
+ const argsStr = Object.keys(event.args).length > 0
281
+ ? JSON.stringify(event.args)
282
+ : "";
283
+ process.stderr.write(`[tool] ${event.name}${argsStr ? `(${argsStr})` : ""}\n`);
284
+ }
285
+ else if (event.type === "tool_result") {
286
+ // Truncate long results for display
287
+ const preview = event.content.length > 200
288
+ ? event.content.slice(0, 200) + "..."
289
+ : event.content;
290
+ process.stderr.write(`[result] ${event.name}: ${preview}\n`);
291
+ }
292
+ else if (event.type === "output_update") {
293
+ process.stdout.write(JSON.stringify(event.value, null, 2));
294
+ process.stdout.write("\n");
295
+ }
296
+ else if (event.type === "error") {
297
+ process.stderr.write(`Error: ${event.message}\n`);
298
+ break;
299
+ }
300
+ else if (event.type === "done") {
301
+ break;
302
+ }
303
+ }
304
+ }
305
+ else if (wsClient && opts.extraTools?.length) {
306
+ // --- Regular chat via WebSocket inference + local sandbox tool execution ---
307
+ const prov = new WebSocketProvider(wsClient, opts.model, opts.provider);
308
+ await processChat({
309
+ userInput: trimmed,
310
+ messages: chatHistory,
311
+ model: opts.model,
312
+ provider: prov,
313
+ context: new ProcessingContext({
314
+ jobId: crypto.randomUUID(),
315
+ userId: "1",
316
+ workspaceDir: opts.workspaceDir,
317
+ secretResolver: getSecret
318
+ }),
319
+ tools: opts.extraTools,
320
+ callbacks: {
321
+ onChunk: (text) => {
322
+ process.stdout.write(text);
323
+ }
324
+ }
325
+ });
326
+ }
327
+ else {
328
+ // --- Regular chat via direct provider ---
329
+ await processChat({
330
+ userInput: trimmed,
331
+ messages: chatHistory,
332
+ model: opts.model,
333
+ provider: directProvider,
334
+ context: new ProcessingContext({
335
+ jobId: crypto.randomUUID(),
336
+ userId: "1",
337
+ workspaceDir: opts.workspaceDir,
338
+ secretResolver: getSecret
339
+ }),
340
+ tools: opts.extraTools ?? [],
341
+ callbacks: {
342
+ onChunk: (text) => {
343
+ process.stdout.write(text);
344
+ }
345
+ }
346
+ });
347
+ }
348
+ process.stdout.write("\n");
349
+ }
350
+ wsClient?.disconnect();
351
+ }
352
+ //# sourceMappingURL=stdin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.js","sourceRoot":"","sources":["../src/stdin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * useExecutionState — Tracks agent task/step hierarchy from ProcessingMessages.
3
+ *
4
+ * Processes interleaved messages from parallel task execution and maintains
5
+ * a structured tree state for rendering by ExecutionTree.
6
+ */
7
+ import type { ProcessingMessage } from "@nodetool-ai/protocol";
8
+ export type StepStatus = "waiting" | "running" | "completed" | "failed";
9
+ export type TaskStatus = "planned" | "waiting" | "running" | "completed" | "failed";
10
+ export interface StepState {
11
+ id: string;
12
+ name: string;
13
+ status: StepStatus;
14
+ toolName?: string;
15
+ toolArgs?: string;
16
+ output: string;
17
+ error?: string;
18
+ startedAt?: number;
19
+ duration?: number;
20
+ }
21
+ export interface TaskState {
22
+ id: string;
23
+ name: string;
24
+ status: TaskStatus;
25
+ startedAt?: number;
26
+ duration?: number;
27
+ steps: StepState[];
28
+ expanded: boolean;
29
+ }
30
+ export interface ExecutionState {
31
+ phase: "idle" | "planning" | "executing" | "done";
32
+ planningContent: string;
33
+ tasks: TaskState[];
34
+ selectedIndex: number;
35
+ }
36
+ export declare function useExecutionState(): {
37
+ state: ExecutionState;
38
+ processMessage: (msg: ProcessingMessage) => void;
39
+ navigate: (direction: "up" | "down") => void;
40
+ toggleExpand: () => void;
41
+ reset: () => void;
42
+ markDone: () => void;
43
+ };
44
+ //# sourceMappingURL=useExecutionState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExecutionState.d.ts","sourceRoot":"","sources":["../src/useExecutionState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxE,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAgBD,wBAAgB,iBAAiB;;0BAWvB,iBAAiB;0BAyPX,IAAI,GAAG,MAAM;;;;EA6B5B"}