@upstash/box-cli 0.1.10 → 0.1.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/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/repl/client.d.ts +8 -3
- package/dist/repl/client.d.ts.map +1 -1
- package/dist/repl/client.js +22 -7
- package/dist/repl/client.js.map +1 -1
- package/dist/repl/commands/run.d.ts +9 -1
- package/dist/repl/commands/run.d.ts.map +1 -1
- package/dist/repl/commands/run.js +67 -0
- package/dist/repl/commands/run.js.map +1 -1
- package/dist/repl/terminal.d.ts +2 -1
- package/dist/repl/terminal.d.ts.map +1 -1
- package/dist/repl/terminal.js +122 -13
- package/dist/repl/terminal.js.map +1 -1
- package/dist/repl/types.d.ts +26 -1
- package/dist/repl/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { BoxREPLClient, COMMAND_NAMES, COMMAND_DESCRIPTIONS } from "./repl/client.js";
|
|
2
|
-
export type {
|
|
2
|
+
export type { BoxREPLClientOptions } from "./repl/client.js";
|
|
3
|
+
export type { BoxREPLEvent, BoxREPLCommand, BoxREPLCommandHandler, BoxREPLCommandName, AgentToolName, TodoItem, ToolCallSummary, } from "./repl/types.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACtF,YAAY,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACtF,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
|
package/dist/repl/client.d.ts
CHANGED
|
@@ -4,13 +4,18 @@ import type { BoxREPLEvent, BoxREPLCommand, BoxREPLCommandName } from "./types.j
|
|
|
4
4
|
export declare const COMMAND_NAMES: BoxREPLCommandName[];
|
|
5
5
|
/** Command descriptions for completer/preview. */
|
|
6
6
|
export declare const COMMAND_DESCRIPTIONS: Record<BoxREPLCommandName, string>;
|
|
7
|
+
export interface BoxREPLClientOptions {
|
|
8
|
+
/** Commands to hide from suggestions, help output, and welcome message. */
|
|
9
|
+
hiddenCommands?: BoxREPLCommandName[];
|
|
10
|
+
}
|
|
7
11
|
export declare class BoxREPLClient {
|
|
8
12
|
readonly box: Box;
|
|
9
|
-
|
|
13
|
+
readonly hiddenCommands: ReadonlySet<BoxREPLCommandName>;
|
|
14
|
+
constructor(box: Box, options?: BoxREPLClientOptions);
|
|
10
15
|
/** Parse input and return the matching command + args, or null. */
|
|
11
16
|
private getCommand;
|
|
12
|
-
/** Return commands whose name starts with the given prefix. */
|
|
13
|
-
|
|
17
|
+
/** Return commands whose name starts with the given prefix, excluding hidden ones. */
|
|
18
|
+
suggestCommands(prefix: string): BoxREPLCommand[];
|
|
14
19
|
/** Process a single line of input and yield events. */
|
|
15
20
|
handleInput(input: string): AsyncGenerator<BoxREPLEvent>;
|
|
16
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/repl/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/repl/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA+BnF,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAA4B,kBAAkB,EAAE,CAAC;AAE3E,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAE7B,CAAC;AAoBxC,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACvC;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;gBAE7C,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAKpD,mEAAmE;IACnE,OAAO,CAAC,UAAU;IAelB,sFAAsF;IACtF,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE;IAMjD,uDAAuD;IAChD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC;CA2DhE"}
|
package/dist/repl/client.js
CHANGED
|
@@ -7,6 +7,8 @@ import { handlePause } from "./commands/pause.js";
|
|
|
7
7
|
import { handleDelete } from "./commands/delete.js";
|
|
8
8
|
import { handleConsole } from "./commands/console.js";
|
|
9
9
|
import { fuzzyMatch } from "../utils/fuzzy.js";
|
|
10
|
+
// Dummy handler for commands intercepted in handleInput()
|
|
11
|
+
async function* noop() { }
|
|
10
12
|
const COMMANDS = {
|
|
11
13
|
run: { description: "Run the agent with a prompt", handler: handleRun },
|
|
12
14
|
exec: { description: "Execute a shell command", handler: handleExec },
|
|
@@ -19,6 +21,9 @@ const COMMANDS = {
|
|
|
19
21
|
pause: { description: "Pause the box and exit", handler: handlePause },
|
|
20
22
|
delete: { description: "Delete the box and exit", handler: handleDelete },
|
|
21
23
|
console: { description: "Open the box in Upstash console", handler: handleConsole },
|
|
24
|
+
clear: { description: "Clear terminal output", handler: noop },
|
|
25
|
+
help: { description: "Show all commands", handler: noop },
|
|
26
|
+
exit: { description: "Exit the REPL", handler: noop },
|
|
22
27
|
};
|
|
23
28
|
/** All available command names (without / prefix). */
|
|
24
29
|
export const COMMAND_NAMES = Object.keys(COMMANDS);
|
|
@@ -43,8 +48,10 @@ function getNextCommandSuggestion(cmdName) {
|
|
|
43
48
|
}
|
|
44
49
|
export class BoxREPLClient {
|
|
45
50
|
box;
|
|
46
|
-
|
|
51
|
+
hiddenCommands;
|
|
52
|
+
constructor(box, options) {
|
|
47
53
|
this.box = box;
|
|
54
|
+
this.hiddenCommands = new Set(options?.hiddenCommands ?? []);
|
|
48
55
|
}
|
|
49
56
|
/** Parse input and return the matching command + args, or null. */
|
|
50
57
|
getCommand(input) {
|
|
@@ -60,12 +67,9 @@ export class BoxREPLClient {
|
|
|
60
67
|
return null;
|
|
61
68
|
return { command: { name: cmdName, ...entry }, args };
|
|
62
69
|
}
|
|
63
|
-
/** Return commands whose name starts with the given prefix. */
|
|
64
|
-
|
|
65
|
-
return COMMAND_NAMES.filter((name) => name.startsWith(prefix)).map((name) => ({
|
|
66
|
-
name,
|
|
67
|
-
...COMMANDS[name],
|
|
68
|
-
}));
|
|
70
|
+
/** Return commands whose name starts with the given prefix, excluding hidden ones. */
|
|
71
|
+
suggestCommands(prefix) {
|
|
72
|
+
return COMMAND_NAMES.filter((name) => name.startsWith(prefix) && !this.hiddenCommands.has(name)).map((name) => ({ name, ...COMMANDS[name] }));
|
|
69
73
|
}
|
|
70
74
|
/** Process a single line of input and yield events. */
|
|
71
75
|
async *handleInput(input) {
|
|
@@ -76,6 +80,17 @@ export class BoxREPLClient {
|
|
|
76
80
|
yield { type: "exit", message: "Goodbye." };
|
|
77
81
|
return;
|
|
78
82
|
}
|
|
83
|
+
if (trimmed === "/clear") {
|
|
84
|
+
yield { type: "clear" };
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (trimmed === "/help") {
|
|
88
|
+
const lines = COMMAND_NAMES.filter((name) => !this.hiddenCommands.has(name))
|
|
89
|
+
.map((name) => ` /${name.padEnd(16)}${COMMANDS[name].description}`)
|
|
90
|
+
.join("\n");
|
|
91
|
+
yield { type: "log", message: `\nAvailable commands:\n${lines}\n` };
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
79
94
|
if (trimmed.startsWith("/")) {
|
|
80
95
|
const parsed = this.getCommand(trimmed);
|
|
81
96
|
if (parsed) {
|
package/dist/repl/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/repl/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,QAAQ,GAA6D;IACzE,GAAG,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,SAAS,EAAE;IACvE,IAAI,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,UAAU,EAAE;IACrE,KAAK,EAAE;QACL,WAAW,EAAE,uDAAuD;QACpE,OAAO,EAAE,WAAW;KACrB;IACD,GAAG,EAAE,EAAE,WAAW,EAAE,yCAAyC,EAAE,OAAO,EAAE,SAAS,EAAE;IACnF,QAAQ,EAAE,EAAE,WAAW,EAAE,sCAAsC,EAAE,OAAO,EAAE,cAAc,EAAE;IAC1F,KAAK,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,WAAW,EAAE;IACtE,MAAM,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,YAAY,EAAE;IACzE,OAAO,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,OAAO,EAAE,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/repl/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { Box } from "@upstash/box";
|
|
2
|
-
import type { BoxREPLEvent } from "../types.js";
|
|
2
|
+
import type { BoxREPLEvent, TodoItem, ToolCallSummary } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Derive a human-readable one-liner from a tool call's name and input.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getToolSummary(toolName: string, input: Record<string, unknown>): ToolCallSummary;
|
|
7
|
+
/**
|
|
8
|
+
* Parse and validate todo items from a TodoWrite tool call input.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseTodoItems(input: Record<string, unknown>): TodoItem[];
|
|
3
11
|
/**
|
|
4
12
|
* Run the agent with a prompt, streaming output as events.
|
|
5
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAqChG;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE,CAczE;AAED;;GAEG;AACH,wBAAuB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAmBvF"}
|
|
@@ -1,3 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive a human-readable one-liner from a tool call's name and input.
|
|
3
|
+
*/
|
|
4
|
+
export function getToolSummary(toolName, input) {
|
|
5
|
+
let summary;
|
|
6
|
+
let detail;
|
|
7
|
+
switch (toolName) {
|
|
8
|
+
case "Bash": {
|
|
9
|
+
const command = typeof input.command === "string" ? input.command : "";
|
|
10
|
+
const truncatedCmd = command.length > 60 ? command.slice(0, 57) + "..." : command;
|
|
11
|
+
summary = typeof input.description === "string" ? input.description : truncatedCmd;
|
|
12
|
+
// Always include the command as detail when a description is present
|
|
13
|
+
if (typeof input.description === "string" && command) {
|
|
14
|
+
detail = truncatedCmd;
|
|
15
|
+
}
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
case "Read":
|
|
19
|
+
case "Edit":
|
|
20
|
+
case "Write": {
|
|
21
|
+
const filePath = typeof input.file_path === "string" ? input.file_path : "";
|
|
22
|
+
summary = filePath.split("/").pop() || filePath;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case "Grep":
|
|
26
|
+
case "Glob":
|
|
27
|
+
summary = typeof input.pattern === "string" ? input.pattern : "";
|
|
28
|
+
break;
|
|
29
|
+
case "EnterPlanMode":
|
|
30
|
+
summary = "Planning implementation";
|
|
31
|
+
break;
|
|
32
|
+
default: {
|
|
33
|
+
const raw = JSON.stringify(input);
|
|
34
|
+
summary = raw.length > 60 ? raw.slice(0, 57) + "..." : raw;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { name: toolName, summary, detail };
|
|
39
|
+
}
|
|
40
|
+
const VALID_TODO_STATUSES = new Set(["pending", "in_progress", "completed"]);
|
|
41
|
+
/**
|
|
42
|
+
* Parse and validate todo items from a TodoWrite tool call input.
|
|
43
|
+
*/
|
|
44
|
+
export function parseTodoItems(input) {
|
|
45
|
+
if (!Array.isArray(input.todos))
|
|
46
|
+
return [];
|
|
47
|
+
return input.todos.map((item) => {
|
|
48
|
+
const obj = item && typeof item === "object" ? item : {};
|
|
49
|
+
return {
|
|
50
|
+
content: typeof obj.content === "string" ? obj.content : "",
|
|
51
|
+
status: typeof obj.status === "string" && VALID_TODO_STATUSES.has(obj.status)
|
|
52
|
+
? obj.status
|
|
53
|
+
: "pending",
|
|
54
|
+
activeForm: typeof obj.activeForm === "string" ? obj.activeForm : undefined,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
1
58
|
/**
|
|
2
59
|
* Run the agent with a prompt, streaming output as events.
|
|
3
60
|
*/
|
|
@@ -10,6 +67,16 @@ export async function* handleRun(box, prompt) {
|
|
|
10
67
|
if (chunk.type === "text-delta") {
|
|
11
68
|
yield { type: "stream", text: chunk.text };
|
|
12
69
|
}
|
|
70
|
+
else if (chunk.type === "tool-call") {
|
|
71
|
+
if (chunk.toolName === "TodoWrite") {
|
|
72
|
+
const todos = parseTodoItems(chunk.input);
|
|
73
|
+
yield { type: "todo", todos };
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const tool = getToolSummary(chunk.toolName, chunk.input);
|
|
77
|
+
yield { type: "tool", tool };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
13
80
|
}
|
|
14
81
|
yield { type: "stream", text: "\n" };
|
|
15
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/repl/commands/run.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,GAAQ,EAAE,MAAc;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QACtD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/repl/commands/run.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/terminal.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Box } from "@upstash/box";
|
|
2
|
+
import { type BoxREPLClientOptions } from "./client.js";
|
|
2
3
|
/**
|
|
3
4
|
* Start an interactive REPL session for the given box (CLI entry point).
|
|
4
5
|
*/
|
|
5
|
-
export declare function startRepl(box: Box): Promise<void>;
|
|
6
|
+
export declare function startRepl(box: Box, options?: BoxREPLClientOptions): Promise<void>;
|
|
6
7
|
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/repl/terminal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/repl/terminal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAcvE;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2TvF"}
|
package/dist/repl/terminal.js
CHANGED
|
@@ -3,26 +3,42 @@ import { createInterface } from "node:readline/promises";
|
|
|
3
3
|
import { stdin, stdout } from "node:process";
|
|
4
4
|
import { BoxREPLClient } from "./client.js";
|
|
5
5
|
import { startSpinner } from "./spinner.js";
|
|
6
|
-
import { bold, cyan, dim, green, red, yellow, cursorUp,
|
|
6
|
+
import { bold, cyan, dim, green, red, yellow, cursorUp, eraseDown, stripAnsi, } from "../utils/ansi.js";
|
|
7
7
|
/**
|
|
8
8
|
* Start an interactive REPL session for the given box (CLI entry point).
|
|
9
9
|
*/
|
|
10
|
-
export async function startRepl(box) {
|
|
10
|
+
export async function startRepl(box, options) {
|
|
11
11
|
const rl = createInterface({
|
|
12
12
|
input: stdin,
|
|
13
13
|
output: stdout,
|
|
14
14
|
completer: () => [[], ""],
|
|
15
15
|
});
|
|
16
16
|
const prompt = `${bold(cyan(box.id))}${dim(">")} `;
|
|
17
|
-
const client = new BoxREPLClient(box);
|
|
17
|
+
const client = new BoxREPLClient(box, options);
|
|
18
18
|
// --- Spinner tracking ---
|
|
19
19
|
let activeSpinnerStop = null;
|
|
20
|
+
let inCommand = false;
|
|
21
|
+
// --- Todo checklist tracking ---
|
|
22
|
+
let todoLines = 0;
|
|
23
|
+
// --- Stream newline tracking ---
|
|
24
|
+
let needsNewline = false;
|
|
20
25
|
function ensureSpinnerStopped() {
|
|
21
26
|
if (activeSpinnerStop) {
|
|
22
27
|
activeSpinnerStop();
|
|
23
28
|
activeSpinnerStop = null;
|
|
24
29
|
}
|
|
25
30
|
}
|
|
31
|
+
function ensureNewline() {
|
|
32
|
+
if (needsNewline) {
|
|
33
|
+
stdout.write("\n");
|
|
34
|
+
needsNewline = false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function restartSpinnerIfInCommand() {
|
|
38
|
+
if (inCommand) {
|
|
39
|
+
activeSpinnerStop = startSpinner();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
26
42
|
// --- Command preview while typing ---
|
|
27
43
|
let previewLines = 0;
|
|
28
44
|
const promptVisualLen = stripAnsi(prompt).length;
|
|
@@ -50,11 +66,16 @@ export async function startRepl(box) {
|
|
|
50
66
|
// Move cursor back to just after the prompt
|
|
51
67
|
stdout.write(`\x1b[${text.length}D`);
|
|
52
68
|
}
|
|
69
|
+
// --- Multi-line input tracking ---
|
|
70
|
+
let isMetaReturn = false;
|
|
53
71
|
if (stdin.isTTY) {
|
|
54
72
|
// Must run before readline's handler so the cursor is still on the input line
|
|
55
73
|
stdin.prependListener("keypress", (_str, key) => {
|
|
56
74
|
if (key?.name === "return") {
|
|
57
75
|
clearPreview();
|
|
76
|
+
if (key.meta || key.shift) {
|
|
77
|
+
isMetaReturn = true;
|
|
78
|
+
}
|
|
58
79
|
}
|
|
59
80
|
});
|
|
60
81
|
stdin.on("keypress", (_str, key) => {
|
|
@@ -79,7 +100,7 @@ export async function startRepl(box) {
|
|
|
79
100
|
clearPreview();
|
|
80
101
|
if (line.startsWith("/") && !line.includes(" ")) {
|
|
81
102
|
const partial = line.slice(1);
|
|
82
|
-
const matches =
|
|
103
|
+
const matches = client.suggestCommands(partial).slice(0, 5);
|
|
83
104
|
if (matches.length > 0) {
|
|
84
105
|
const preview = matches
|
|
85
106
|
.map((c) => ` ${dim(`/${c.name}`)} ${dim("—")} ${dim(c.description)}`)
|
|
@@ -96,24 +117,82 @@ export async function startRepl(box) {
|
|
|
96
117
|
function processEvent(event) {
|
|
97
118
|
switch (event.type) {
|
|
98
119
|
case "command:start":
|
|
120
|
+
inCommand = true;
|
|
99
121
|
stdout.write("\n");
|
|
100
122
|
activeSpinnerStop = startSpinner();
|
|
101
123
|
break;
|
|
102
124
|
case "log":
|
|
103
125
|
ensureSpinnerStopped();
|
|
126
|
+
ensureNewline();
|
|
104
127
|
clearPreview();
|
|
105
128
|
console.log(event.message);
|
|
129
|
+
needsNewline = false;
|
|
130
|
+
todoLines = 0;
|
|
131
|
+
restartSpinnerIfInCommand();
|
|
106
132
|
break;
|
|
107
133
|
case "error":
|
|
108
134
|
ensureSpinnerStopped();
|
|
135
|
+
ensureNewline();
|
|
109
136
|
clearPreview();
|
|
110
137
|
console.error(red(event.message));
|
|
138
|
+
needsNewline = false;
|
|
139
|
+
todoLines = 0;
|
|
140
|
+
restartSpinnerIfInCommand();
|
|
111
141
|
break;
|
|
112
142
|
case "stream":
|
|
113
143
|
ensureSpinnerStopped();
|
|
114
144
|
process.stdout.write(event.text);
|
|
145
|
+
needsNewline = !event.text.endsWith("\n");
|
|
146
|
+
todoLines = 0;
|
|
147
|
+
break;
|
|
148
|
+
case "tool": {
|
|
149
|
+
ensureSpinnerStopped();
|
|
150
|
+
ensureNewline();
|
|
151
|
+
const { name, summary, detail } = event.tool;
|
|
152
|
+
if (name === "Bash") {
|
|
153
|
+
let line = dim(" ⚡ ") + yellow(name) + dim(": " + summary);
|
|
154
|
+
if (detail) {
|
|
155
|
+
line += dim("\n $ " + detail);
|
|
156
|
+
}
|
|
157
|
+
console.log(line);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log(dim(" ⚡ ") + yellow(name) + dim("(" + summary + ")"));
|
|
161
|
+
}
|
|
162
|
+
needsNewline = false;
|
|
163
|
+
todoLines = 0;
|
|
164
|
+
restartSpinnerIfInCommand();
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case "todo": {
|
|
168
|
+
ensureSpinnerStopped();
|
|
169
|
+
ensureNewline();
|
|
170
|
+
if (todoLines > 0) {
|
|
171
|
+
stdout.write(cursorUp(todoLines) + eraseDown);
|
|
172
|
+
}
|
|
173
|
+
for (const item of event.todos) {
|
|
174
|
+
if (item.status === "completed") {
|
|
175
|
+
console.log(green(" ✔") + " " + item.content);
|
|
176
|
+
}
|
|
177
|
+
else if (item.status === "in_progress") {
|
|
178
|
+
console.log(cyan(" ◼") + " " + item.content);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
console.log(dim(" ◻ " + item.content));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
stdout.write("\n"); // bottom margin
|
|
185
|
+
todoLines = event.todos.length + 1; // items + bottom margin
|
|
186
|
+
needsNewline = false;
|
|
187
|
+
restartSpinnerIfInCommand();
|
|
115
188
|
break;
|
|
189
|
+
}
|
|
116
190
|
case "command:complete": {
|
|
191
|
+
inCommand = false;
|
|
192
|
+
ensureSpinnerStopped();
|
|
193
|
+
ensureNewline();
|
|
194
|
+
todoLines = 0;
|
|
195
|
+
needsNewline = false;
|
|
117
196
|
const seconds = (event.durationMs / 1000).toFixed(1);
|
|
118
197
|
console.log(dim(`\n /${event.command} completed in ${seconds}s\n`));
|
|
119
198
|
break;
|
|
@@ -122,11 +201,15 @@ export async function startRepl(box) {
|
|
|
122
201
|
nextSuggestion = event.text;
|
|
123
202
|
break;
|
|
124
203
|
case "command:not-found":
|
|
204
|
+
ensureNewline();
|
|
125
205
|
console.error(yellow(`\nUnknown command: /${event.typed}`));
|
|
126
206
|
if (event.suggestions.length > 0) {
|
|
127
207
|
console.log(yellow(`Did you mean: ${event.suggestions.map((s) => `/${s}`).join(", ")}?\n`));
|
|
128
208
|
}
|
|
129
209
|
break;
|
|
210
|
+
case "clear":
|
|
211
|
+
stdout.write("\x1b[2J\x1b[H");
|
|
212
|
+
break;
|
|
130
213
|
case "open-url": {
|
|
131
214
|
const openCmd = process.platform === "darwin"
|
|
132
215
|
? "open"
|
|
@@ -142,22 +225,45 @@ export async function startRepl(box) {
|
|
|
142
225
|
return false;
|
|
143
226
|
}
|
|
144
227
|
// --- Welcome message ---
|
|
145
|
-
const allCommands =
|
|
228
|
+
const allCommands = client.suggestCommands("");
|
|
146
229
|
console.log(`\nConnected to box ${box.id}`);
|
|
147
|
-
console.log(`Type a prompt to run the agent, or use commands: ${allCommands.map((c) => `/${c.name}`).join(", ")}
|
|
230
|
+
console.log(`Type a prompt to run the agent, or use commands: ${allCommands.map((c) => `/${c.name}`).join(", ")}\n`);
|
|
148
231
|
// --- Main REPL loop ---
|
|
232
|
+
const continuationPrompt = " ".repeat(promptVisualLen);
|
|
149
233
|
try {
|
|
150
234
|
while (true) {
|
|
151
235
|
clearPreview();
|
|
152
236
|
const suggestion = nextSuggestion;
|
|
153
237
|
nextSuggestion = null;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
238
|
+
// Collect input (supports multi-line via alt+enter / shift+enter)
|
|
239
|
+
const inputLines = [];
|
|
240
|
+
isMetaReturn = false;
|
|
241
|
+
const firstLine = await rl.question(prompt);
|
|
242
|
+
inputLines.push(firstLine);
|
|
243
|
+
if (isMetaReturn && stdin.isTTY) {
|
|
244
|
+
while (true) {
|
|
245
|
+
isMetaReturn = false;
|
|
246
|
+
const nextLine = await rl.question(continuationPrompt);
|
|
247
|
+
inputLines.push(nextLine);
|
|
248
|
+
if (!isMetaReturn)
|
|
249
|
+
break;
|
|
158
250
|
}
|
|
159
|
-
|
|
160
|
-
|
|
251
|
+
}
|
|
252
|
+
const answer = inputLines.join("\n");
|
|
253
|
+
// Rewrite all input lines in green
|
|
254
|
+
if (answer.trim()) {
|
|
255
|
+
const termWidth = stdout.columns || 80;
|
|
256
|
+
let totalVisualRows = 0;
|
|
257
|
+
for (const line of inputLines) {
|
|
258
|
+
const totalChars = promptVisualLen + line.length;
|
|
259
|
+
totalVisualRows += Math.ceil(totalChars / termWidth) || 1;
|
|
260
|
+
}
|
|
261
|
+
stdout.write(cursorUp(totalVisualRows) + "\r" + eraseDown);
|
|
262
|
+
for (let i = 0; i < inputLines.length; i++) {
|
|
263
|
+
const p = i === 0 ? prompt : continuationPrompt;
|
|
264
|
+
stdout.write(p + green(inputLines[i]) + "\n");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
161
267
|
if (suggestion && stdin.isTTY) {
|
|
162
268
|
setImmediate(() => showGhost(suggestion));
|
|
163
269
|
}
|
|
@@ -171,9 +277,12 @@ export async function startRepl(box) {
|
|
|
171
277
|
}
|
|
172
278
|
}
|
|
173
279
|
catch (err) {
|
|
174
|
-
ensureSpinnerStopped();
|
|
175
280
|
console.error(red(`Error: ${err instanceof Error ? err.message : err}`));
|
|
176
281
|
}
|
|
282
|
+
// Always clean up after event processing — handles cases where the
|
|
283
|
+
// generator ends without a command:complete (e.g. after an error event).
|
|
284
|
+
inCommand = false;
|
|
285
|
+
ensureSpinnerStopped();
|
|
177
286
|
if (shouldExit)
|
|
178
287
|
break;
|
|
179
288
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/repl/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/repl/terminal.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/types.d.ts
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import type { Box } from "@upstash/box";
|
|
2
|
-
export type BoxREPLCommandName = "run" | "exec" | "files" | "git" | "snapshot" | "pause" | "delete" | "console";
|
|
2
|
+
export type BoxREPLCommandName = "run" | "exec" | "files" | "git" | "snapshot" | "pause" | "delete" | "console" | "clear" | "help" | "exit";
|
|
3
|
+
/** Known tool names from the agent stream */
|
|
4
|
+
export type AgentToolName = "Bash" | "Read" | "Edit" | "Write" | "Grep" | "Glob" | "TodoWrite" | "EnterPlanMode";
|
|
5
|
+
/** A single todo item from a TodoWrite tool call */
|
|
6
|
+
export interface TodoItem {
|
|
7
|
+
content: string;
|
|
8
|
+
status: "pending" | "in_progress" | "completed";
|
|
9
|
+
activeForm?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Summary of a tool invocation for display */
|
|
12
|
+
export interface ToolCallSummary {
|
|
13
|
+
/** Tool name, typed for known tools with fallback */
|
|
14
|
+
name: AgentToolName | (string & {});
|
|
15
|
+
/** Human-readable one-liner derived from the tool's key input */
|
|
16
|
+
summary: string;
|
|
17
|
+
/** Optional secondary detail (e.g. the raw command for Bash) */
|
|
18
|
+
detail?: string;
|
|
19
|
+
}
|
|
3
20
|
export type BoxREPLEvent = {
|
|
4
21
|
type: "log";
|
|
5
22
|
message: string;
|
|
@@ -9,6 +26,12 @@ export type BoxREPLEvent = {
|
|
|
9
26
|
} | {
|
|
10
27
|
type: "stream";
|
|
11
28
|
text: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "tool";
|
|
31
|
+
tool: ToolCallSummary;
|
|
32
|
+
} | {
|
|
33
|
+
type: "todo";
|
|
34
|
+
todos: TodoItem[];
|
|
12
35
|
} | {
|
|
13
36
|
type: "command:start";
|
|
14
37
|
command: BoxREPLCommandName;
|
|
@@ -24,6 +47,8 @@ export type BoxREPLEvent = {
|
|
|
24
47
|
} | {
|
|
25
48
|
type: "suggestion";
|
|
26
49
|
text: string;
|
|
50
|
+
} | {
|
|
51
|
+
type: "clear";
|
|
27
52
|
} | {
|
|
28
53
|
type: "open-url";
|
|
29
54
|
url: string;
|
package/dist/repl/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/repl/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,MAAM,GACN,OAAO,GACP,KAAK,GACL,UAAU,GACV,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/repl/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,MAAM,GACN,OAAO,GACP,KAAK,GACL,UAAU,GACV,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,WAAW,GACX,eAAe,CAAC;AAEpB,oDAAoD;AACpD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,IAAI,EAAE,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACpC,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,cAAc,CAAC,YAAY,CAAC,CAAC;AAE7F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,qBAAqB,CAAC;CAChC"}
|