@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,281 @@
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 { useCallback, useRef, useState } from "react";
8
+ import { TaskUpdateEvent } from "@nodetool-ai/protocol";
9
+ const INITIAL_STATE = {
10
+ phase: "idle",
11
+ planningContent: "",
12
+ tasks: [],
13
+ selectedIndex: 0,
14
+ };
15
+ // Max chars to keep in step output preview
16
+ const MAX_OUTPUT_LENGTH = 200;
17
+ // ---------------------------------------------------------------------------
18
+ // Hook
19
+ // ---------------------------------------------------------------------------
20
+ export function useExecutionState() {
21
+ const [state, setState] = useState({ ...INITIAL_STATE });
22
+ // Track which step is "active" per task for routing chunks
23
+ const activeStepRef = useRef(new Map());
24
+ const reset = useCallback(() => {
25
+ setState({ ...INITIAL_STATE });
26
+ activeStepRef.current.clear();
27
+ }, []);
28
+ const processMessage = useCallback((msg) => {
29
+ switch (msg.type) {
30
+ case "planning_update": {
31
+ const pu = msg;
32
+ setState((prev) => ({
33
+ ...prev,
34
+ phase: "planning",
35
+ planningContent: pu.content ?? prev.planningContent,
36
+ }));
37
+ break;
38
+ }
39
+ case "task_update": {
40
+ const tu = msg;
41
+ setState((prev) => {
42
+ const tasks = [...prev.tasks];
43
+ if (tu.event === TaskUpdateEvent.TaskPlanned) {
44
+ const existingIdx = tasks.findIndex((t) => t.id === tu.task.id);
45
+ const steps = (tu.task.steps ?? []).map((s) => ({
46
+ id: s.id ?? "",
47
+ name: s.instructions?.slice(0, 60) ?? s.id ?? "",
48
+ status: "waiting",
49
+ output: "",
50
+ }));
51
+ const plannedTask = {
52
+ id: tu.task.id ?? "",
53
+ name: tu.task.title ?? tu.task.name ?? tu.task.id ?? "",
54
+ status: "planned",
55
+ steps,
56
+ expanded: true,
57
+ };
58
+ if (existingIdx === -1) {
59
+ tasks.push(plannedTask);
60
+ }
61
+ else {
62
+ tasks[existingIdx] = {
63
+ ...plannedTask,
64
+ startedAt: tasks[existingIdx].startedAt,
65
+ };
66
+ }
67
+ return { ...prev, phase: "planning", tasks };
68
+ }
69
+ if (tu.event === TaskUpdateEvent.TaskRemoved) {
70
+ const filtered = tasks.filter((t) => t.id !== tu.task.id);
71
+ return { ...prev, tasks: filtered };
72
+ }
73
+ if (tu.event === TaskUpdateEvent.TaskCreated) {
74
+ const existingIdx = tasks.findIndex((t) => t.id === tu.task.id);
75
+ if (existingIdx === -1) {
76
+ const steps = (tu.task.steps ?? []).map((s) => ({
77
+ id: s.id ?? "",
78
+ name: s.instructions?.slice(0, 60) ?? s.id ?? "",
79
+ status: "waiting",
80
+ output: "",
81
+ }));
82
+ tasks.push({
83
+ id: tu.task.id ?? "",
84
+ name: tu.task.title ?? tu.task.name ?? tu.task.id ?? "",
85
+ status: "running",
86
+ startedAt: Date.now(),
87
+ steps,
88
+ expanded: true,
89
+ });
90
+ }
91
+ else {
92
+ tasks[existingIdx] = {
93
+ ...tasks[existingIdx],
94
+ status: "running",
95
+ startedAt: Date.now(),
96
+ };
97
+ }
98
+ return { ...prev, phase: "executing", tasks };
99
+ }
100
+ if (tu.event === TaskUpdateEvent.StepStarted) {
101
+ const taskIdx = tasks.findIndex((t) => t.id === tu.task.id);
102
+ if (taskIdx !== -1) {
103
+ const task = { ...tasks[taskIdx], steps: [...tasks[taskIdx].steps] };
104
+ const stepIdx = task.steps.findIndex((s) => s.id === tu.step?.id);
105
+ if (stepIdx !== -1) {
106
+ task.steps[stepIdx] = {
107
+ ...task.steps[stepIdx],
108
+ status: "running",
109
+ startedAt: Date.now(),
110
+ };
111
+ }
112
+ else if (tu.step?.id) {
113
+ // Step not in initial plan — add dynamically
114
+ task.steps.push({
115
+ id: tu.step.id,
116
+ name: tu.step.instructions?.slice(0, 60) ?? tu.step.id,
117
+ status: "running",
118
+ startedAt: Date.now(),
119
+ output: "",
120
+ });
121
+ }
122
+ task.status = "running";
123
+ tasks[taskIdx] = task;
124
+ activeStepRef.current.set(task.id, tu.step?.id ?? "");
125
+ }
126
+ return { ...prev, tasks };
127
+ }
128
+ if (tu.event === TaskUpdateEvent.StepCompleted ||
129
+ tu.event === TaskUpdateEvent.StepFailed) {
130
+ const taskIdx = tasks.findIndex((t) => t.id === tu.task.id);
131
+ if (taskIdx !== -1) {
132
+ const task = { ...tasks[taskIdx], steps: [...tasks[taskIdx].steps] };
133
+ const stepIdx = task.steps.findIndex((s) => s.id === tu.step?.id);
134
+ if (stepIdx !== -1) {
135
+ const step = task.steps[stepIdx];
136
+ const now = Date.now();
137
+ task.steps[stepIdx] = {
138
+ ...step,
139
+ status: tu.event === TaskUpdateEvent.StepCompleted
140
+ ? "completed"
141
+ : "failed",
142
+ duration: step.startedAt
143
+ ? (now - step.startedAt) / 1000
144
+ : undefined,
145
+ };
146
+ }
147
+ tasks[taskIdx] = task;
148
+ }
149
+ return { ...prev, tasks };
150
+ }
151
+ if (tu.event === TaskUpdateEvent.TaskCompleted) {
152
+ const taskIdx = tasks.findIndex((t) => t.id === tu.task.id);
153
+ if (taskIdx !== -1) {
154
+ const task = tasks[taskIdx];
155
+ const now = Date.now();
156
+ tasks[taskIdx] = {
157
+ ...task,
158
+ status: "completed",
159
+ expanded: false,
160
+ duration: task.startedAt
161
+ ? (now - task.startedAt) / 1000
162
+ : undefined,
163
+ };
164
+ activeStepRef.current.delete(task.id);
165
+ }
166
+ return { ...prev, tasks };
167
+ }
168
+ return prev;
169
+ });
170
+ break;
171
+ }
172
+ case "tool_call_update": {
173
+ const tc = msg;
174
+ const stepId = tc.node_id ?? tc.step_id;
175
+ if (!stepId)
176
+ break;
177
+ setState((prev) => {
178
+ const tasks = prev.tasks.map((task) => {
179
+ const stepIdx = task.steps.findIndex((s) => s.id === stepId);
180
+ if (stepIdx === -1)
181
+ return task;
182
+ const steps = [...task.steps];
183
+ const argsStr = Object.entries(tc.args ?? {})
184
+ .map(([k, v]) => {
185
+ const val = typeof v === "string" ? v : JSON.stringify(v);
186
+ return `${k}: ${val.slice(0, 40)}`;
187
+ })
188
+ .join(", ");
189
+ steps[stepIdx] = {
190
+ ...steps[stepIdx],
191
+ toolName: tc.name,
192
+ toolArgs: argsStr,
193
+ status: "running",
194
+ };
195
+ return { ...task, steps };
196
+ });
197
+ return { ...prev, tasks };
198
+ });
199
+ break;
200
+ }
201
+ case "chunk": {
202
+ const ch = msg;
203
+ const stepId = ch.node_id;
204
+ if (!stepId)
205
+ break;
206
+ setState((prev) => {
207
+ const tasks = prev.tasks.map((task) => {
208
+ const stepIdx = task.steps.findIndex((s) => s.id === stepId);
209
+ if (stepIdx === -1)
210
+ return task;
211
+ const steps = [...task.steps];
212
+ const existing = steps[stepIdx].output;
213
+ const newOutput = existing + (ch.content ?? "");
214
+ steps[stepIdx] = {
215
+ ...steps[stepIdx],
216
+ output: newOutput.length > MAX_OUTPUT_LENGTH
217
+ ? newOutput.slice(-MAX_OUTPUT_LENGTH)
218
+ : newOutput,
219
+ status: "running",
220
+ };
221
+ return { ...task, steps };
222
+ });
223
+ return { ...prev, tasks };
224
+ });
225
+ break;
226
+ }
227
+ case "step_result": {
228
+ const sr = msg;
229
+ const stepId = sr.step?.id;
230
+ if (!stepId)
231
+ break;
232
+ setState((prev) => {
233
+ const tasks = prev.tasks.map((task) => {
234
+ const stepIdx = task.steps.findIndex((s) => s.id === stepId);
235
+ if (stepIdx === -1)
236
+ return task;
237
+ const steps = [...task.steps];
238
+ const result = typeof sr.result === "string"
239
+ ? sr.result
240
+ : JSON.stringify(sr.result ?? "");
241
+ steps[stepIdx] = {
242
+ ...steps[stepIdx],
243
+ output: result.slice(0, MAX_OUTPUT_LENGTH),
244
+ status: sr.error ? "failed" : "completed",
245
+ error: sr.error ?? undefined,
246
+ };
247
+ return { ...task, steps };
248
+ });
249
+ return { ...prev, tasks };
250
+ });
251
+ break;
252
+ }
253
+ }
254
+ }, []);
255
+ const navigate = useCallback((direction) => {
256
+ setState((prev) => {
257
+ const max = prev.tasks.length - 1;
258
+ if (max < 0)
259
+ return prev;
260
+ const next = direction === "up"
261
+ ? Math.max(0, prev.selectedIndex - 1)
262
+ : Math.min(max, prev.selectedIndex + 1);
263
+ return { ...prev, selectedIndex: next };
264
+ });
265
+ }, []);
266
+ const toggleExpand = useCallback(() => {
267
+ setState((prev) => {
268
+ const tasks = [...prev.tasks];
269
+ const task = tasks[prev.selectedIndex];
270
+ if (!task)
271
+ return prev;
272
+ tasks[prev.selectedIndex] = { ...task, expanded: !task.expanded };
273
+ return { ...prev, tasks };
274
+ });
275
+ }, []);
276
+ const markDone = useCallback(() => {
277
+ setState((prev) => ({ ...prev, phase: "done" }));
278
+ }, []);
279
+ return { state, processMessage, navigate, toggleExpand, reset, markDone };
280
+ }
281
+ //# sourceMappingURL=useExecutionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExecutionState.js","sourceRoot":"","sources":["../src/useExecutionState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * WebSocket client for connecting the CLI to a NodeTool server.
3
+ * Handles chat (stateful, with thread history), inference (stateless, for agent mode),
4
+ * and workflow commands (run_job, cancel_job, get_status).
5
+ */
6
+ export type ChatEvent = {
7
+ type: "chunk";
8
+ content: string;
9
+ } | {
10
+ type: "tool_call";
11
+ id: string;
12
+ name: string;
13
+ args: Record<string, unknown>;
14
+ } | {
15
+ type: "tool_result";
16
+ id: string;
17
+ name: string;
18
+ content: string;
19
+ } | {
20
+ type: "output_update";
21
+ node_id: string;
22
+ value: unknown;
23
+ output_type?: string;
24
+ } | {
25
+ type: "error";
26
+ message: string;
27
+ } | {
28
+ type: "done";
29
+ };
30
+ export type JobEvent = {
31
+ type: "job_update";
32
+ status: string;
33
+ job_id?: string;
34
+ workflow_id?: string;
35
+ error?: string;
36
+ result?: unknown;
37
+ } | {
38
+ type: "node_update";
39
+ node_id: string;
40
+ status: string;
41
+ error?: string;
42
+ } | {
43
+ type: "output_update";
44
+ node_id: string;
45
+ value: unknown;
46
+ output_type?: string;
47
+ } | {
48
+ type: "node_progress";
49
+ node_id: string;
50
+ progress: number;
51
+ total?: number;
52
+ } | {
53
+ type: "error";
54
+ message: string;
55
+ } | {
56
+ type: "done";
57
+ };
58
+ export declare class WebSocketChatClient {
59
+ private readonly wsUrl;
60
+ private ws;
61
+ private contentQueue;
62
+ private contentWaiters;
63
+ constructor(wsUrl: string);
64
+ connect(): Promise<void>;
65
+ private handleMessage;
66
+ private isContentEvent;
67
+ private send;
68
+ private nextContent;
69
+ /** Stateful chat — messages are saved to DB, thread history is loaded. */
70
+ chat(content: string, threadId: string, model: string, provider: string, tools?: unknown[]): AsyncGenerator<ChatEvent>;
71
+ /** Stateless inference — takes full messages array, streams back, no DB. Used by agent mode. */
72
+ inference(messages: unknown[], model: string, provider: string, tools?: unknown[]): AsyncGenerator<ChatEvent>;
73
+ /**
74
+ * Run a workflow job. Streams job_update, node_update, output_update events.
75
+ * Terminates when a terminal job_update is received (completed/failed/cancelled).
76
+ */
77
+ runJob(opts: {
78
+ workflowId?: string;
79
+ graph?: {
80
+ nodes: Array<Record<string, unknown>>;
81
+ edges: Array<Record<string, unknown>>;
82
+ };
83
+ params?: Record<string, unknown>;
84
+ jobId?: string;
85
+ }): AsyncGenerator<JobEvent>;
86
+ /** Reconnect to a running job's event stream. */
87
+ reconnectJob(jobId: string, workflowId?: string): AsyncGenerator<JobEvent>;
88
+ /** Resume a paused/interrupted job. */
89
+ resumeJob(jobId: string, workflowId?: string): AsyncGenerator<JobEvent>;
90
+ /** Shared job event consumer used by runJob, reconnectJob, resumeJob. */
91
+ private consumeJobEvents;
92
+ /** Cancel a running job. */
93
+ cancelJob(jobId: string): void;
94
+ /** Get status of a job or all active jobs. */
95
+ getStatus(jobId?: string): void;
96
+ /** Stop in-progress generation. Pass threadId for chat, omit for inference. */
97
+ stop(threadId?: string): void;
98
+ disconnect(): void;
99
+ }
100
+ //# sourceMappingURL=websocket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../src/websocket-client.ts"],"names":[],"mappings":"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"}