@upstash/box-cli 0.1.4 → 0.1.5
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/commands/completion.d.ts +2 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +37 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +29 -6
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/create.js +1 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/from-snapshot.js +1 -1
- package/dist/commands/from-snapshot.js.map +1 -1
- package/dist/commands/init-demo.d.ts.map +1 -1
- package/dist/commands/init-demo.js +1 -6
- package/dist/commands/init-demo.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/repl/client.d.ts +30 -0
- package/dist/repl/client.d.ts.map +1 -0
- package/dist/repl/client.js +128 -0
- package/dist/repl/client.js.map +1 -0
- package/dist/repl/commands/delete.d.ts +7 -0
- package/dist/repl/commands/delete.d.ts.map +1 -0
- package/dist/repl/commands/delete.js +9 -0
- package/dist/repl/commands/delete.js.map +1 -0
- package/dist/repl/commands/exec.d.ts +7 -0
- package/dist/repl/commands/exec.d.ts.map +1 -0
- package/dist/{repl-commands → repl/commands}/exec.js +3 -3
- package/dist/repl/commands/exec.js.map +1 -0
- package/dist/repl/commands/files.d.ts +7 -0
- package/dist/repl/commands/files.d.ts.map +1 -0
- package/dist/{repl-commands → repl/commands}/files.js +10 -10
- package/dist/repl/commands/files.js.map +1 -0
- package/dist/repl/commands/git.d.ts +7 -0
- package/dist/repl/commands/git.d.ts.map +1 -0
- package/dist/{repl-commands → repl/commands}/git.js +7 -7
- package/dist/repl/commands/git.js.map +1 -0
- package/dist/repl/commands/pause.d.ts +7 -0
- package/dist/repl/commands/pause.d.ts.map +1 -0
- package/dist/repl/commands/pause.js +9 -0
- package/dist/repl/commands/pause.js.map +1 -0
- package/dist/repl/commands/run.d.ts +7 -0
- package/dist/repl/commands/run.d.ts.map +1 -0
- package/dist/repl/commands/run.js +14 -0
- package/dist/repl/commands/run.js.map +1 -0
- package/dist/repl/commands/snapshot.d.ts +7 -0
- package/dist/repl/commands/snapshot.d.ts.map +1 -0
- package/dist/{repl-commands → repl/commands}/snapshot.js +2 -2
- package/dist/repl/commands/snapshot.js.map +1 -0
- package/dist/repl/spinner.d.ts +5 -0
- package/dist/repl/spinner.d.ts.map +1 -0
- package/dist/repl/spinner.js +39 -0
- package/dist/repl/spinner.js.map +1 -0
- package/dist/repl/terminal.d.ts +6 -0
- package/dist/repl/terminal.d.ts.map +1 -0
- package/dist/repl/terminal.js +141 -0
- package/dist/repl/terminal.js.map +1 -0
- package/dist/utils/ansi.d.ts +19 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +24 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/fuzzy.d.ts +9 -0
- package/dist/utils/fuzzy.d.ts.map +1 -0
- package/dist/utils/fuzzy.js +30 -0
- package/dist/utils/fuzzy.js.map +1 -0
- package/dist/utils/interactive-select.d.ts +16 -0
- package/dist/utils/interactive-select.d.ts.map +1 -0
- package/dist/utils/interactive-select.js +75 -0
- package/dist/utils/interactive-select.js.map +1 -0
- package/package.json +10 -3
- package/dist/repl-commands/delete.d.ts +0 -6
- package/dist/repl-commands/delete.d.ts.map +0 -1
- package/dist/repl-commands/delete.js +0 -9
- package/dist/repl-commands/delete.js.map +0 -1
- package/dist/repl-commands/exec.d.ts +0 -6
- package/dist/repl-commands/exec.d.ts.map +0 -1
- package/dist/repl-commands/exec.js.map +0 -1
- package/dist/repl-commands/files.d.ts +0 -6
- package/dist/repl-commands/files.d.ts.map +0 -1
- package/dist/repl-commands/files.js.map +0 -1
- package/dist/repl-commands/git.d.ts +0 -6
- package/dist/repl-commands/git.d.ts.map +0 -1
- package/dist/repl-commands/git.js.map +0 -1
- package/dist/repl-commands/pause.d.ts +0 -6
- package/dist/repl-commands/pause.d.ts.map +0 -1
- package/dist/repl-commands/pause.js +0 -9
- package/dist/repl-commands/pause.js.map +0 -1
- package/dist/repl-commands/run.d.ts +0 -6
- package/dist/repl-commands/run.d.ts.map +0 -1
- package/dist/repl-commands/run.js +0 -14
- package/dist/repl-commands/run.js.map +0 -1
- package/dist/repl-commands/snapshot.d.ts +0 -6
- package/dist/repl-commands/snapshot.d.ts.map +0 -1
- package/dist/repl-commands/snapshot.js.map +0 -1
- package/dist/repl.d.ts +0 -6
- package/dist/repl.d.ts.map +0 -1
- package/dist/repl.js +0 -68
- package/dist/repl.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AA6BA,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const BASH_COMPLETION = `
|
|
2
|
+
_box_completions() {
|
|
3
|
+
local cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
4
|
+
local commands="create connect from-snapshot list get init-demo completion"
|
|
5
|
+
COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
|
|
6
|
+
}
|
|
7
|
+
complete -F _box_completions box
|
|
8
|
+
`;
|
|
9
|
+
const ZSH_COMPLETION = `
|
|
10
|
+
#compdef box
|
|
11
|
+
|
|
12
|
+
_box() {
|
|
13
|
+
local -a commands
|
|
14
|
+
commands=(
|
|
15
|
+
'create:Create a new box and enter the REPL'
|
|
16
|
+
'connect:Connect to an existing box and enter the REPL'
|
|
17
|
+
'from-snapshot:Create a new box from a snapshot'
|
|
18
|
+
'list:List all boxes'
|
|
19
|
+
'get:Get details about a box'
|
|
20
|
+
'init-demo:Scaffold a standalone demo project'
|
|
21
|
+
'completion:Output shell completion script'
|
|
22
|
+
)
|
|
23
|
+
_describe 'command' commands
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
_box
|
|
27
|
+
`;
|
|
28
|
+
export function completionCommand() {
|
|
29
|
+
const shell = process.env.SHELL ?? "";
|
|
30
|
+
if (shell.includes("zsh")) {
|
|
31
|
+
console.log(ZSH_COMPLETION.trim());
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(BASH_COMPLETION.trim());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG;;;;;;;CAOvB,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;CAkBtB,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|
package/dist/commands/connect.js
CHANGED
|
@@ -1,20 +1,43 @@
|
|
|
1
1
|
import { Box } from "@upstash/box";
|
|
2
2
|
import { resolveToken } from "../auth.js";
|
|
3
|
-
import { startRepl } from "../repl.js";
|
|
3
|
+
import { startRepl } from "../repl/terminal.js";
|
|
4
|
+
import { interactiveSelect } from "../utils/interactive-select.js";
|
|
5
|
+
import { dim } from "../utils/ansi.js";
|
|
4
6
|
export async function connectCommand(boxId, flags) {
|
|
5
7
|
const apiKey = resolveToken(flags.token);
|
|
6
8
|
let targetId = boxId;
|
|
7
|
-
// If no box ID provided,
|
|
9
|
+
// If no box ID provided, pick interactively or fall back to most recent
|
|
8
10
|
if (!targetId) {
|
|
9
|
-
console.log("No box ID specified, connecting to most recent...");
|
|
10
11
|
const boxes = await Box.list({ apiKey });
|
|
11
|
-
|
|
12
|
+
const active = boxes.filter((b) => b.status !== "deleted");
|
|
13
|
+
if (active.length === 0) {
|
|
12
14
|
console.error("No boxes found.");
|
|
13
15
|
process.exit(1);
|
|
14
16
|
}
|
|
15
|
-
|
|
17
|
+
if (process.stdin.isTTY && active.length > 1) {
|
|
18
|
+
const items = active.slice(0, 10);
|
|
19
|
+
const idWidth = Math.max(...items.map((b) => b.id.length));
|
|
20
|
+
const statusWidth = Math.max(...items.map((b) => b.status.length));
|
|
21
|
+
const selected = await interactiveSelect({
|
|
22
|
+
prompt: "Select a box to connect to:",
|
|
23
|
+
items: items.map((b) => ({
|
|
24
|
+
label: b.id.padEnd(idWidth),
|
|
25
|
+
value: b.id,
|
|
26
|
+
description: `${b.status.padEnd(statusWidth)} ${b.model ?? ""}`,
|
|
27
|
+
})),
|
|
28
|
+
});
|
|
29
|
+
if (!selected) {
|
|
30
|
+
console.log(dim("Aborted."));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
targetId = selected;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log("No box ID specified, connecting to most recent...");
|
|
37
|
+
targetId = active[0].id;
|
|
38
|
+
}
|
|
16
39
|
}
|
|
17
|
-
console.log(
|
|
40
|
+
console.log(`\nConnecting to box ${targetId}...`);
|
|
18
41
|
const box = await Box.get(targetId, { apiKey });
|
|
19
42
|
await startRepl(box);
|
|
20
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAMvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAyB,EACzB,KAAmB;IAEnB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,wEAAwE;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAEnE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACvC,MAAM,EAAE,6BAA6B;gBACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvB,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC3B,KAAK,EAAE,CAAC,CAAC,EAAE;oBACX,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE;iBACjE,CAAC,CAAC;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,KAAK,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/commands/create.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box } from "@upstash/box";
|
|
2
2
|
import { resolveToken } from "../auth.js";
|
|
3
|
-
import { startRepl } from "../repl.js";
|
|
3
|
+
import { startRepl } from "../repl/terminal.js";
|
|
4
4
|
export async function createCommand(flags) {
|
|
5
5
|
const apiKey = resolveToken(flags.token);
|
|
6
6
|
if (flags.agentModel && !flags.agentApiKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAWhD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;QAC3B,MAAM;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EACH,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW;YACnC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;YACxD,CAAC,CAAC,SAAS;QACf,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box } from "@upstash/box";
|
|
2
2
|
import { resolveToken } from "../auth.js";
|
|
3
|
-
import { startRepl } from "../repl.js";
|
|
3
|
+
import { startRepl } from "../repl/terminal.js";
|
|
4
4
|
export async function fromSnapshotCommand(snapshotId, flags) {
|
|
5
5
|
const apiKey = resolveToken(flags.token);
|
|
6
6
|
if (flags.agentModel && !flags.agentApiKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-snapshot.js","sourceRoot":"","sources":["../../src/commands/from-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"from-snapshot.js","sourceRoot":"","sources":["../../src/commands/from-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAWhD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,KAAwB;IAExB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE;QAC7C,MAAM;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EACH,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW;YACnC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;YACxD,CAAC,CAAC,SAAS;QACf,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3D,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-demo.d.ts","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-demo.d.ts","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASpE;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgF3C;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkC3C;AAeD,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DzE;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -3,12 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { execSync } from "node:child_process";
|
|
4
4
|
import readline from "node:readline";
|
|
5
5
|
import { resolveToken } from "../auth.js";
|
|
6
|
-
|
|
7
|
-
const cyan = (s) => `\x1b[36m${s}\x1b[39m`;
|
|
8
|
-
const green = (s) => `\x1b[32m${s}\x1b[39m`;
|
|
9
|
-
const dim = (s) => `\x1b[2m${s}\x1b[22m`;
|
|
10
|
-
const red = (s) => `\x1b[31m${s}\x1b[39m`;
|
|
11
|
-
const yellow = (s) => `\x1b[33m${s}\x1b[39m`;
|
|
6
|
+
import { bold, cyan, green, dim, red, yellow } from "../utils/ansi.js";
|
|
12
7
|
function generateEnvFile(flags, token) {
|
|
13
8
|
const lines = [
|
|
14
9
|
`UPSTASH_BOX_API_KEY=${token}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-demo.js","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"init-demo.js","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { fromSnapshotCommand } from "./commands/from-snapshot.js";
|
|
|
7
7
|
import { listCommand } from "./commands/list.js";
|
|
8
8
|
import { getCommand } from "./commands/get.js";
|
|
9
9
|
import { initDemoCommand } from "./commands/init-demo.js";
|
|
10
|
+
import { completionCommand } from "./commands/completion.js";
|
|
10
11
|
const program = new Command();
|
|
11
12
|
program
|
|
12
13
|
.name("box")
|
|
@@ -57,5 +58,9 @@ program
|
|
|
57
58
|
.option("--git-token <token>", "GitHub personal access token")
|
|
58
59
|
.option("--directory <dir>", "Output directory", "box-demo")
|
|
59
60
|
.action((opts) => initDemoCommand(opts));
|
|
61
|
+
program
|
|
62
|
+
.command("completion")
|
|
63
|
+
.description('Output shell completion script (eval "$(box completion)")')
|
|
64
|
+
.action(() => completionCommand());
|
|
60
65
|
program.parse();
|
|
61
66
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Box } from "@upstash/box";
|
|
2
|
+
export type REPLHooks = {
|
|
3
|
+
onLog: (message: string) => void;
|
|
4
|
+
onError: (message: string) => void;
|
|
5
|
+
onStream: (message: string) => void;
|
|
6
|
+
/** Loading indicator. Return a stop() function. */
|
|
7
|
+
onLoadingStart?: () => () => void;
|
|
8
|
+
/** Post-command suggestion (e.g. "try: /snapshot"). */
|
|
9
|
+
onSuggestion?: (text: string) => void;
|
|
10
|
+
/** Timing info after each command. */
|
|
11
|
+
onCommandComplete?: (command: string, durationMs: number) => void;
|
|
12
|
+
/** Unknown /command with fuzzy suggestions. Falls back to onError if absent. */
|
|
13
|
+
onCommandNotFound?: (typed: string, suggestions: string[]) => void;
|
|
14
|
+
};
|
|
15
|
+
/** All available command names (without / prefix). */
|
|
16
|
+
export declare const COMMAND_NAMES: string[];
|
|
17
|
+
/** Command descriptions for completer/preview. */
|
|
18
|
+
export declare const COMMAND_DESCRIPTIONS: Record<string, string>;
|
|
19
|
+
export declare class BoxREPLClient {
|
|
20
|
+
readonly box: Box;
|
|
21
|
+
readonly promptUser: (prompt: string) => Promise<string>;
|
|
22
|
+
private readonly hooks;
|
|
23
|
+
constructor({ box, promptUser, hooks, }: {
|
|
24
|
+
box: Box;
|
|
25
|
+
promptUser: (prompt: string) => Promise<string>;
|
|
26
|
+
hooks: REPLHooks;
|
|
27
|
+
});
|
|
28
|
+
startLoop(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +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;AAUxC,MAAM,MAAM,SAAS,GAAG;IAEtB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAIpC,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,MAAM,IAAI,CAAC;IAElC,uDAAuD;IACvD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAElE,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACpE,CAAC;AAeF,sDAAsD;AACtD,eAAO,MAAM,aAAa,UAAwB,CAAC;AAEnD,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQvD,CAAC;AAoBF,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,EACV,GAAG,EACH,UAAU,EACV,KAAK,GACN,EAAE;QACD,GAAG,EAAE,GAAG,CAAC;QACT,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,KAAK,EAAE,SAAS,CAAC;KAClB;IAMK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAuEjC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { handleRun } from "./commands/run.js";
|
|
2
|
+
import { handleExec } from "./commands/exec.js";
|
|
3
|
+
import { handleFiles } from "./commands/files.js";
|
|
4
|
+
import { handleGit } from "./commands/git.js";
|
|
5
|
+
import { handleSnapshot } from "./commands/snapshot.js";
|
|
6
|
+
import { handlePause } from "./commands/pause.js";
|
|
7
|
+
import { handleDelete } from "./commands/delete.js";
|
|
8
|
+
import { fuzzyMatch } from "../utils/fuzzy.js";
|
|
9
|
+
const COMMANDS = {
|
|
10
|
+
run: handleRun,
|
|
11
|
+
exec: handleExec,
|
|
12
|
+
files: handleFiles,
|
|
13
|
+
git: handleGit,
|
|
14
|
+
snapshot: handleSnapshot,
|
|
15
|
+
pause: handlePause,
|
|
16
|
+
delete: handleDelete,
|
|
17
|
+
};
|
|
18
|
+
/** All available command names (without / prefix). */
|
|
19
|
+
export const COMMAND_NAMES = Object.keys(COMMANDS);
|
|
20
|
+
/** Command descriptions for completer/preview. */
|
|
21
|
+
export const COMMAND_DESCRIPTIONS = {
|
|
22
|
+
run: "Run the agent with a prompt",
|
|
23
|
+
exec: "Execute a shell command",
|
|
24
|
+
files: "File operations (read, write, list, upload, download)",
|
|
25
|
+
git: "Git operations (clone, diff, create-pr)",
|
|
26
|
+
snapshot: "Create a snapshot of the current box",
|
|
27
|
+
pause: "Pause the box and exit",
|
|
28
|
+
delete: "Delete the box and exit",
|
|
29
|
+
};
|
|
30
|
+
/** Context-aware suggestion after a command completes. */
|
|
31
|
+
function getSuggestion(cmdName) {
|
|
32
|
+
switch (cmdName) {
|
|
33
|
+
case "exec":
|
|
34
|
+
return "/files list .";
|
|
35
|
+
case "run":
|
|
36
|
+
return "/snapshot";
|
|
37
|
+
case "files":
|
|
38
|
+
return "/exec ls";
|
|
39
|
+
case "git":
|
|
40
|
+
return "/snapshot";
|
|
41
|
+
case "snapshot":
|
|
42
|
+
return "/pause";
|
|
43
|
+
default:
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class BoxREPLClient {
|
|
48
|
+
box;
|
|
49
|
+
promptUser;
|
|
50
|
+
hooks;
|
|
51
|
+
constructor({ box, promptUser, hooks, }) {
|
|
52
|
+
this.box = box;
|
|
53
|
+
this.promptUser = promptUser;
|
|
54
|
+
this.hooks = hooks;
|
|
55
|
+
}
|
|
56
|
+
async startLoop() {
|
|
57
|
+
const { hooks } = this;
|
|
58
|
+
hooks.onLog(`\nConnected to box ${this.box.id}`);
|
|
59
|
+
hooks.onLog(`Type a prompt to run the agent, or use commands: ${COMMAND_NAMES.map((c) => `/${c}`).join(", ")}, /exit\n`);
|
|
60
|
+
while (true) {
|
|
61
|
+
const input = await this.promptUser(`${this.box.id}> `);
|
|
62
|
+
const trimmed = input.trim();
|
|
63
|
+
if (!trimmed)
|
|
64
|
+
continue;
|
|
65
|
+
if (trimmed === "exit" || trimmed === "/exit") {
|
|
66
|
+
hooks.onLog("Goodbye.");
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
// Commands require / prefix
|
|
70
|
+
if (trimmed.startsWith("/")) {
|
|
71
|
+
const withoutSlash = trimmed.slice(1);
|
|
72
|
+
const spaceIdx = withoutSlash.indexOf(" ");
|
|
73
|
+
const cmdName = spaceIdx === -1 ? withoutSlash : withoutSlash.slice(0, spaceIdx);
|
|
74
|
+
const args = spaceIdx === -1 ? "" : withoutSlash.slice(spaceIdx + 1).trim();
|
|
75
|
+
const handler = COMMANDS[cmdName];
|
|
76
|
+
if (handler) {
|
|
77
|
+
const start = Date.now();
|
|
78
|
+
const stopLoading = hooks.onLoadingStart?.();
|
|
79
|
+
try {
|
|
80
|
+
const shouldExit = await handler(this.box, args, hooks);
|
|
81
|
+
stopLoading?.();
|
|
82
|
+
const durationMs = Date.now() - start;
|
|
83
|
+
hooks.onCommandComplete?.(cmdName, durationMs);
|
|
84
|
+
const suggestion = getSuggestion(cmdName);
|
|
85
|
+
if (suggestion)
|
|
86
|
+
hooks.onSuggestion?.(suggestion);
|
|
87
|
+
if (shouldExit === true)
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
stopLoading?.();
|
|
92
|
+
hooks.onError(`Error: ${err instanceof Error ? err.message : err}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// Unknown command — fuzzy match
|
|
97
|
+
const suggestions = fuzzyMatch(cmdName, COMMAND_NAMES);
|
|
98
|
+
if (hooks.onCommandNotFound) {
|
|
99
|
+
hooks.onCommandNotFound(cmdName, suggestions);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const msg = suggestions.length > 0
|
|
103
|
+
? `Unknown command: /${cmdName}. Did you mean: ${suggestions.map((s) => `/${s}`).join(", ")}?`
|
|
104
|
+
: `Unknown command: /${cmdName}. Available: ${COMMAND_NAMES.map((c) => `/${c}`).join(", ")}`;
|
|
105
|
+
hooks.onError(msg);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// No / prefix — treat as agent prompt
|
|
111
|
+
const start = Date.now();
|
|
112
|
+
const stopLoading = hooks.onLoadingStart?.();
|
|
113
|
+
try {
|
|
114
|
+
await handleRun(this.box, trimmed, hooks);
|
|
115
|
+
stopLoading?.();
|
|
116
|
+
const durationMs = Date.now() - start;
|
|
117
|
+
hooks.onCommandComplete?.("run", durationMs);
|
|
118
|
+
hooks.onSuggestion?.("/snapshot");
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
stopLoading?.();
|
|
122
|
+
hooks.onError(`Error: ${err instanceof Error ? err.message : err}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/repl/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Box } from "@upstash/box";
|
|
2
|
+
import type { REPLHooks } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Delete the box. Returns true to signal the REPL to exit.
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleDelete(box: Box, _args: string, hooks: REPLHooks): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/repl/commands/delete.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,KAAa,EAAE,KAAgB;IAC1E,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Box } from "@upstash/box";
|
|
2
|
+
import type { REPLHooks } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Execute a shell command in the box.
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleExec(box: Box, command: string, hooks: REPLHooks): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/exec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3F"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Execute a shell command in the box.
|
|
3
3
|
*/
|
|
4
|
-
export async function handleExec(box, command) {
|
|
4
|
+
export async function handleExec(box, command, hooks) {
|
|
5
5
|
if (!command) {
|
|
6
|
-
|
|
6
|
+
hooks.onLog("Usage: exec <command>");
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
9
|
const run = await box.exec(command);
|
|
10
10
|
const result = await run.result();
|
|
11
11
|
if (result)
|
|
12
|
-
|
|
12
|
+
hooks.onLog(result);
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/repl/commands/exec.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAQ,EAAE,OAAe,EAAE,KAAgB;IAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IAClC,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Box } from "@upstash/box";
|
|
2
|
+
import type { REPLHooks } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handle file subcommands: read, write, list, upload, download.
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleFiles(box: Box, args: string, hooks: REPLHooks): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDzF"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Handle file subcommands: read, write, list, upload, download.
|
|
3
3
|
*/
|
|
4
|
-
export async function handleFiles(box, args) {
|
|
4
|
+
export async function handleFiles(box, args, hooks) {
|
|
5
5
|
const parts = args.split(/\s+/);
|
|
6
6
|
const sub = parts[0];
|
|
7
7
|
switch (sub) {
|
|
8
8
|
case "read": {
|
|
9
9
|
const path = parts[1];
|
|
10
10
|
if (!path) {
|
|
11
|
-
|
|
11
|
+
hooks.onLog("Usage: files read <path>");
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
const content = await box.files.read(path);
|
|
15
|
-
|
|
15
|
+
hooks.onLog(content);
|
|
16
16
|
break;
|
|
17
17
|
}
|
|
18
18
|
case "write": {
|
|
19
19
|
const path = parts[1];
|
|
20
20
|
const content = parts.slice(2).join(" ");
|
|
21
21
|
if (!path || !content) {
|
|
22
|
-
|
|
22
|
+
hooks.onLog("Usage: files write <path> <content>");
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
await box.files.write({ path, content });
|
|
26
|
-
|
|
26
|
+
hooks.onLog(`Written to ${path}`);
|
|
27
27
|
break;
|
|
28
28
|
}
|
|
29
29
|
case "list": {
|
|
@@ -31,7 +31,7 @@ export async function handleFiles(box, args) {
|
|
|
31
31
|
const files = await box.files.list(path);
|
|
32
32
|
for (const f of files) {
|
|
33
33
|
const indicator = f.is_dir ? "/" : "";
|
|
34
|
-
|
|
34
|
+
hooks.onLog(`${f.name}${indicator}\t${f.size}`);
|
|
35
35
|
}
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -39,21 +39,21 @@ export async function handleFiles(box, args) {
|
|
|
39
39
|
const localPath = parts[1];
|
|
40
40
|
const destination = parts[2];
|
|
41
41
|
if (!localPath || !destination) {
|
|
42
|
-
|
|
42
|
+
hooks.onLog("Usage: files upload <local-path> <destination>");
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
await box.files.upload([{ path: localPath, destination }]);
|
|
46
|
-
|
|
46
|
+
hooks.onLog(`Uploaded ${localPath} → ${destination}`);
|
|
47
47
|
break;
|
|
48
48
|
}
|
|
49
49
|
case "download": {
|
|
50
50
|
const path = parts[1];
|
|
51
51
|
await box.files.download(path ? { path } : undefined);
|
|
52
|
-
|
|
52
|
+
hooks.onLog("Downloaded.");
|
|
53
53
|
break;
|
|
54
54
|
}
|
|
55
55
|
default:
|
|
56
|
-
|
|
56
|
+
hooks.onLog("Usage: files <read|write|list|upload|download> [args...]");
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/repl/commands/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Box } from "@upstash/box";
|
|
2
|
+
import type { REPLHooks } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handle git subcommands: clone, diff, create-pr.
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleGit(box: Box, args: string, hooks: REPLHooks): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCvF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Handle git subcommands: clone, diff, create-pr.
|
|
3
3
|
*/
|
|
4
|
-
export async function handleGit(box, args) {
|
|
4
|
+
export async function handleGit(box, args, hooks) {
|
|
5
5
|
const parts = args.split(/\s+/);
|
|
6
6
|
const sub = parts[0];
|
|
7
7
|
switch (sub) {
|
|
@@ -9,30 +9,30 @@ export async function handleGit(box, args) {
|
|
|
9
9
|
const repo = parts[1];
|
|
10
10
|
const branch = parts[2];
|
|
11
11
|
if (!repo) {
|
|
12
|
-
|
|
12
|
+
hooks.onLog("Usage: git clone <repo> [branch]");
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
await box.git.clone({ repo, branch });
|
|
16
|
-
|
|
16
|
+
hooks.onLog(`Cloned ${repo}`);
|
|
17
17
|
break;
|
|
18
18
|
}
|
|
19
19
|
case "diff": {
|
|
20
20
|
const diff = await box.git.diff();
|
|
21
|
-
|
|
21
|
+
hooks.onLog(diff || "(no changes)");
|
|
22
22
|
break;
|
|
23
23
|
}
|
|
24
24
|
case "create-pr": {
|
|
25
25
|
const title = parts.slice(1).join(" ");
|
|
26
26
|
if (!title) {
|
|
27
|
-
|
|
27
|
+
hooks.onLog("Usage: git create-pr <title>");
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
const pr = await box.git.createPR({ title });
|
|
31
|
-
|
|
31
|
+
hooks.onLog(`PR #${pr.number}: ${pr.url}`);
|
|
32
32
|
break;
|
|
33
33
|
}
|
|
34
34
|
default:
|
|
35
|
-
|
|
35
|
+
hooks.onLog("Usage: git <clone|diff|create-pr> [args...]");
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
//# sourceMappingURL=git.js.map
|