@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.
- package/dist/ExecutionTree.d.ts +19 -0
- package/dist/ExecutionTree.d.ts.map +1 -0
- package/dist/ExecutionTree.js +100 -0
- package/dist/ExecutionTree.js.map +1 -0
- package/dist/app.d.ts +50 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +767 -0
- package/dist/app.js.map +1 -0
- package/dist/commands/agent.d.ts +11 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +483 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/deploy-helpers.d.ts +46 -0
- package/dist/commands/deploy-helpers.d.ts.map +1 -0
- package/dist/commands/deploy-helpers.js +448 -0
- package/dist/commands/deploy-helpers.js.map +1 -0
- package/dist/commands/deploy.d.ts +8 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +645 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/models-hf.d.ts +9 -0
- package/dist/commands/models-hf.d.ts.map +1 -0
- package/dist/commands/models-hf.js +235 -0
- package/dist/commands/models-hf.js.map +1 -0
- package/dist/commands/models-recommended.d.ts +10 -0
- package/dist/commands/models-recommended.d.ts.map +1 -0
- package/dist/commands/models-recommended.js +128 -0
- package/dist/commands/models-recommended.js.map +1 -0
- package/dist/commands/package-helpers.d.ts +14 -0
- package/dist/commands/package-helpers.d.ts.map +1 -0
- package/dist/commands/package-helpers.js +76 -0
- package/dist/commands/package-helpers.js.map +1 -0
- package/dist/commands/package.d.ts +3 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +254 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +233 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +9 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +48 -0
- package/dist/markdown.js.map +1 -0
- package/dist/nodetool.d.ts +16 -0
- package/dist/nodetool.d.ts.map +1 -0
- package/dist/nodetool.js +1154 -0
- package/dist/nodetool.js.map +1 -0
- package/dist/providers.d.ts +47 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +173 -0
- package/dist/providers.js.map +1 -0
- package/dist/readline-input.d.ts +29 -0
- package/dist/readline-input.d.ts.map +1 -0
- package/dist/readline-input.js +199 -0
- package/dist/readline-input.js.map +1 -0
- package/dist/run-dsl.d.ts +11 -0
- package/dist/run-dsl.d.ts.map +1 -0
- package/dist/run-dsl.js +31 -0
- package/dist/run-dsl.js.map +1 -0
- package/dist/settings.d.ts +18 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +86 -0
- package/dist/settings.js.map +1 -0
- package/dist/stdin.d.ts +48 -0
- package/dist/stdin.d.ts.map +1 -0
- package/dist/stdin.js +352 -0
- package/dist/stdin.js.map +1 -0
- package/dist/useExecutionState.d.ts +44 -0
- package/dist/useExecutionState.d.ts.map +1 -0
- package/dist/useExecutionState.js +281 -0
- package/dist/useExecutionState.js.map +1 -0
- package/dist/websocket-client.d.ts +100 -0
- package/dist/websocket-client.d.ts.map +1 -0
- package/dist/websocket-client.js +351 -0
- package/dist/websocket-client.js.map +1 -0
- 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"}
|
package/dist/settings.js
ADDED
|
@@ -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"}
|
package/dist/stdin.d.ts
ADDED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAiB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAgChD,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE;QAC3C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;KACtC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,MAAgC;IAEhC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAChD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK;gBACrB,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;gBACpC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YAClD,MAAM;QACR,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAiB,EACjB,QAA6B;IAE7B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,mCAAmC;YACnC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YACD,IAAI,MAAM,GAA4B,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,IAAI,CAAC,CAAC;oBAC1D,OAAO;gBACT,CAAC;YACH,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,UAAU,OAAO,CAAC,CAAC;YAC5D,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,OAAO,CAAC,CAAC;YAC1D,MAAM,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,OAAO,CAAC,CAAC;YACnD,MAAM,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,IAAI,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAC3C,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK;gBACH,CAAC,CAAC,4BAA4B,KAAK,IAAI;gBACvC,CAAC,CAAC,iCAAiC,CACtC,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;gBACE,qBAAqB;gBACrB,sDAAsD;gBACtD,mEAAmE;gBACnE,kEAAkE;gBAClE,2DAA2D;gBAC3D,4DAA4D;gBAC5D,sDAAsD;gBACtD,sDAAsD;gBACtD,EAAE;gBACF,4CAA4C;gBAC5C,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;YACF,OAAO;QAET;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,GAAG,CAAC,IAAI,wCAAwC,CACtE,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAsB;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,oDAAoD;IACpD,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7E,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,WAAW,GAAc,EAAE,CAAC;IAElC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,oDAAoD;QACpD,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAkD,CACnD,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,gDAAgD;YAChD,MAAM,IAAI,GAAG,QAAQ;gBACnB,CAAC,CAAC,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC5D,CAAC,CAAC,cAAe,CAAC;YAEpB,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,WAAW,GACf,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACpD,MAAM,eAAe,GACnB,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC7C,MAAM,oBAAoB,GAAG;gBAC3B,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sCAAsC;qBACpD;iBACF;gBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;aACd,CAAC;YACX,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC;gBAC/B,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;gBAC5B,eAAe;gBACf,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACrD,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBAC5D,iBAAiB,EAAE,EAAE;gBACrB,YAAY,EAAE,oBAAoB;aACnC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC;gBAChC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;gBAC1B,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,SAAS;aAC1B,CAAC,CAAC;YACH,IAAI,UAAU,GAAkB,IAAI,CAAC;YAErC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACzB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAE,GAA4B,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACtC,MAAM,EAAE,GAAG,GAAmD,CAAC;oBAC/D,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;wBACtB,UAAU;4BACR,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ;gCAC3B,CAAC,CAAC,EAAE,CAAC,MAAM;gCACX,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAe,GAA2B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CACpE,CAAC;gBACJ,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,GAAyB,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvE,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAW,GAAwB,CAAC,IAAI,IAAI,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,oEAAoE;gBACpE,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,QAAQ;oBAC9B,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,YAAY;wBACV,OAAO,YAAY,KAAK,QAAQ;wBAChC,UAAU,IAAK,YAAwC;wBACvD,OAAQ,YAAwC,CAAC,QAAQ;4BACvD,QAAQ;wBACZ,CAAC,CAAG,YAAwC,CAAC,QAAmB;wBAChE,CAAC,CAAC,YAAY,IAAI,IAAI;4BACpB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;4BACvC,CAAC,CAAC,EAAE,CAAC;gBACb,IAAI,SAAS;oBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAChD,iEAAiE;YACjE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CACrC,OAAO,EACP,QAAQ,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CACd,EAAE,CAAC;gBACF,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACtC,MAAM,OAAO,GACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;wBAChC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;wBAC5B,CAAC,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CACzD,CAAC;gBACJ,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACxC,oCAAoC;oBACpC,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;wBACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;wBACrC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;oBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC;gBAC/D,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;oBAClD,MAAM;gBACR,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC/C,8EAA8E;YAC9E,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,WAAW,CAAC;gBAChB,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,IAAI,iBAAiB,CAAC;oBAC7B,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;oBAC1B,MAAM,EAAE,GAAG;oBACX,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,cAAc,EAAE,SAAS;iBAC1B,CAAC;gBACF,KAAK,EAAE,IAAI,CAAC,UAAU;gBACtB,SAAS,EAAE;oBACT,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,MAAM,WAAW,CAAC;gBAChB,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,cAAe;gBACzB,OAAO,EAAE,IAAI,iBAAiB,CAAC;oBAC7B,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;oBAC1B,MAAM,EAAE,GAAG;oBACX,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,cAAc,EAAE,SAAS;iBAC1B,CAAC;gBACF,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;gBAC5B,SAAS,EAAE;oBACT,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,EAAE,UAAU,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -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"}
|