@upstash/box-cli 0.0.0 → 0.1.4

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/README.md CHANGED
@@ -17,10 +17,10 @@ node packages/cli/dist/index.js --help
17
17
 
18
18
  ## Authentication
19
19
 
20
- Provide your Upstash Box API token via the `--token` flag or the `UPSTASH_BOX_TOKEN` environment variable:
20
+ Provide your Upstash Box API token via the `--token` flag or the `UPSTASH_BOX_API_KEY` environment variable:
21
21
 
22
22
  ```bash
23
- export UPSTASH_BOX_TOKEN=abx_...
23
+ export UPSTASH_BOX_API_KEY=abx_...
24
24
  ```
25
25
 
26
26
  ## Commands
@@ -39,14 +39,14 @@ box create \
39
39
  --env DEBUG=true
40
40
  ```
41
41
 
42
- | Flag | Description |
43
- |------|-------------|
44
- | `--token` | Upstash Box API token |
45
- | `--runtime` | Runtime environment (`node`, `python`, `golang`, `ruby`, `rust`) |
46
- | `--agent-model` | Agent model identifier (required) |
47
- | `--agent-api-key` | Agent API key — Anthropic or OpenAI (required) |
48
- | `--git-token` | GitHub personal access token |
49
- | `--env KEY=VAL` | Environment variable (repeatable) |
42
+ | Flag | Description |
43
+ | ----------------- | ------------------------------------------------------------------------ |
44
+ | `--token` | Upstash Box API token |
45
+ | `--runtime` | Runtime environment (`node`, `python`, `golang`, `ruby`, `rust`) |
46
+ | `--agent-model` | Agent model identifier |
47
+ | `--agent-api-key` | Agent API key — Anthropic or OpenAI (required if `--agent-model` is set) |
48
+ | `--git-token` | GitHub personal access token |
49
+ | `--env KEY=VAL` | Environment variable (repeatable) |
50
50
 
51
51
  ### `box connect [box-id]`
52
52
 
@@ -83,13 +83,42 @@ Print box details as JSON.
83
83
  box get box_abc123
84
84
  ```
85
85
 
86
+ ### `box init-demo`
87
+
88
+ Scaffold a standalone demo project that uses the `@upstash/box` SDK. Creates a directory with a ready-to-run TypeScript script, `.env` file, and README.
89
+
90
+ ```bash
91
+ box init-demo \
92
+ --token $UPSTASH_BOX_API_KEY \
93
+ --agent-model claude/sonnet_4_5 \
94
+ --agent-api-key $CLAUDE_KEY \
95
+ --runtime node \
96
+ --git-token $GITHUB_TOKEN \
97
+ --directory my-demo
98
+ ```
99
+
100
+ | Flag | Description | Default |
101
+ | ----------------- | -------------------------------------------------- | ---------- |
102
+ | `--token` | Upstash Box API token | |
103
+ | `--agent-model` | Agent model identifier | |
104
+ | `--agent-api-key` | Agent API key (required if `--agent-model` is set) | |
105
+ | `--runtime` | Runtime environment | `node` |
106
+ | `--git-token` | GitHub personal access token | |
107
+ | `--directory` | Output directory | `box-demo` |
108
+
109
+ After scaffolding, the command offers to run the demo immediately. The generated project includes:
110
+
111
+ - `main.ts` — demo script that creates a box, writes/reads files, executes commands, and cleans up
112
+ - `.env` — pre-filled environment variables
113
+ - `README.md` — usage documentation
114
+
86
115
  ## Interactive REPL
87
116
 
88
117
  After `create`, `connect`, or `from-snapshot`, you enter an interactive REPL session:
89
118
 
90
119
  ```
91
120
  Connected to box box_abc123
92
- Type a prompt to run the agent, or use commands: run, exec, files, git, snapshot, stop, delete, exit
121
+ Type a prompt to run the agent, or use commands: run, exec, files, git, snapshot, pause, delete, exit
93
122
 
94
123
  box_abc123> Fix the bug in auth.ts
95
124
  ```
@@ -98,22 +127,22 @@ box_abc123> Fix the bug in auth.ts
98
127
 
99
128
  Any text entered is sent to the agent by default. You can also use explicit commands (with or without a `/` prefix):
100
129
 
101
- | Command | Description |
102
- |---------|-------------|
103
- | `run <prompt>` | Run the agent with a prompt (streaming output) |
104
- | `exec <command>` | Execute a shell command in the box |
105
- | `files read <path>` | Read a file |
106
- | `files write <path> <content>` | Write a file |
107
- | `files list [path]` | List files in a directory |
108
- | `files upload <local> <dest>` | Upload a local file |
109
- | `files download [path]` | Download files from the box |
110
- | `git clone <repo> [branch]` | Clone a repository |
111
- | `git diff` | Show git diff |
112
- | `git create-pr <title>` | Create a pull request |
113
- | `snapshot [name]` | Save a snapshot of the current state |
114
- | `stop` | Stop the box and exit |
115
- | `delete` | Delete the box and exit |
116
- | `exit` | Exit the REPL (box keeps running) |
130
+ | Command | Description |
131
+ | ------------------------------ | ---------------------------------------------- |
132
+ | `run <prompt>` | Run the agent with a prompt (streaming output) |
133
+ | `exec <command>` | Execute a shell command in the box |
134
+ | `files read <path>` | Read a file |
135
+ | `files write <path> <content>` | Write a file |
136
+ | `files list [path]` | List files in a directory |
137
+ | `files upload <local> <dest>` | Upload a local file |
138
+ | `files download [path]` | Download files from the box |
139
+ | `git clone <repo> [branch]` | Clone a repository |
140
+ | `git diff` | Show git diff |
141
+ | `git create-pr <title>` | Create a pull request |
142
+ | `snapshot [name]` | Save a snapshot of the current state |
143
+ | `pause` | Pause the box and exit |
144
+ | `delete` | Delete the box and exit |
145
+ | `exit` | Exit the REPL (box keeps running) |
117
146
 
118
147
  ### Examples
119
148
 
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOvD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CASvD"}
package/dist/auth.js CHANGED
@@ -2,9 +2,9 @@
2
2
  * Resolves the API token from flag or environment variable.
3
3
  */
4
4
  export function resolveToken(flagToken) {
5
- const token = flagToken ?? process.env.UPSTASH_BOX_TOKEN;
5
+ const token = flagToken ?? process.env.UPSTASH_BOX_API_KEY;
6
6
  if (!token) {
7
- console.error("Error: API token required. Use --token flag or set UPSTASH_BOX_TOKEN env var.");
7
+ console.error("Error: API token required. Use --token flag or set UPSTASH_BOX_API_KEY env var.");
8
8
  process.exit(1);
9
9
  }
10
10
  return token;
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC7C,MAAM,KAAK,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAkB;IAC7C,MAAM,KAAK,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBlG"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAIA,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,CAmBf"}
@@ -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,YAAY,CAAC;AAMvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAyB,EAAE,KAAmB;IACjF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,gDAAgD;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
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,YAAY,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,gDAAgD;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrE"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCrE"}
@@ -3,12 +3,8 @@ import { resolveToken } from "../auth.js";
3
3
  import { startRepl } from "../repl.js";
4
4
  export async function createCommand(flags) {
5
5
  const apiKey = resolveToken(flags.token);
6
- if (!flags.agentModel) {
7
- console.error("Error: --agent-model is required");
8
- process.exit(1);
9
- }
10
- if (!flags.agentApiKey) {
11
- console.error("Error: --agent-api-key is required");
6
+ if (flags.agentModel && !flags.agentApiKey) {
7
+ console.error("Error: --agent-api-key is required if --agent-model is set");
12
8
  process.exit(1);
13
9
  }
14
10
  const env = {};
@@ -26,7 +22,9 @@ export async function createCommand(flags) {
26
22
  const box = await Box.create({
27
23
  apiKey,
28
24
  runtime: flags.runtime,
29
- agent: { model: flags.agentModel, apiKey: flags.agentApiKey },
25
+ agent: flags.agentModel && flags.agentApiKey
26
+ ? { model: flags.agentModel, apiKey: flags.agentApiKey }
27
+ : undefined,
30
28
  git: flags.gitToken ? { token: flags.gitToken } : undefined,
31
29
  env: Object.keys(env).length > 0 ? env : undefined,
32
30
  });
@@ -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,YAAY,CAAC;AAWvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,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,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;QAC7D,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
+ {"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,YAAY,CAAC;AAWvC,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 +1 @@
1
- {"version":3,"file":"from-snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/from-snapshot.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrG"}
1
+ {"version":3,"file":"from-snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/from-snapshot.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -3,12 +3,8 @@ import { resolveToken } from "../auth.js";
3
3
  import { startRepl } from "../repl.js";
4
4
  export async function fromSnapshotCommand(snapshotId, flags) {
5
5
  const apiKey = resolveToken(flags.token);
6
- if (!flags.agentModel) {
7
- console.error("Error: --agent-model is required");
8
- process.exit(1);
9
- }
10
- if (!flags.agentApiKey) {
11
- console.error("Error: --agent-api-key is required");
6
+ if (flags.agentModel && !flags.agentApiKey) {
7
+ console.error("Error: --agent-api-key is required if --agent-model is set");
12
8
  process.exit(1);
13
9
  }
14
10
  const env = {};
@@ -26,7 +22,9 @@ export async function fromSnapshotCommand(snapshotId, flags) {
26
22
  const box = await Box.fromSnapshot(snapshotId, {
27
23
  apiKey,
28
24
  runtime: flags.runtime,
29
- agent: { model: flags.agentModel, apiKey: flags.agentApiKey },
25
+ agent: flags.agentModel && flags.agentApiKey
26
+ ? { model: flags.agentModel, apiKey: flags.agentApiKey }
27
+ : undefined,
30
28
  git: flags.gitToken ? { token: flags.gitToken } : undefined,
31
29
  env: Object.keys(env).length > 0 ? env : undefined,
32
30
  });
@@ -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,YAAY,CAAC;AAWvC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,KAAwB;IACpF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACpD,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,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE;QAC7D,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
+ {"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,YAAY,CAAC;AAWvC,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"}
@@ -0,0 +1,15 @@
1
+ interface InitDemoFlags {
2
+ token?: string;
3
+ agentModel?: string;
4
+ agentApiKey?: string;
5
+ runtime?: string;
6
+ gitToken?: string;
7
+ directory?: string;
8
+ }
9
+ declare function generateEnvFile(flags: InitDemoFlags, token: string): string;
10
+ declare function generateMainTs(dir: string): string;
11
+ declare function generateReadme(dir: string): string;
12
+ export declare function initDemoCommand(flags: InitDemoFlags): Promise<void>;
13
+ export { generateEnvFile, generateMainTs, generateReadme };
14
+ export type { InitDemoFlags };
15
+ //# sourceMappingURL=init-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-demo.d.ts","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"AAaA,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"}
@@ -0,0 +1,202 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ import readline from "node:readline";
5
+ import { resolveToken } from "../auth.js";
6
+ const bold = (s) => `\x1b[1m${s}\x1b[22m`;
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`;
12
+ function generateEnvFile(flags, token) {
13
+ const lines = [
14
+ `UPSTASH_BOX_API_KEY=${token}`,
15
+ `AGENT_MODEL=${flags.agentModel ?? ""}`,
16
+ `AGENT_API_KEY=${flags.agentApiKey ?? ""}`,
17
+ `RUNTIME=${flags.runtime ?? "node"}`,
18
+ `GIT_TOKEN=${flags.gitToken ?? ""}`,
19
+ ];
20
+ return lines.join("\n") + "\n";
21
+ }
22
+ function generateMainTs(dir) {
23
+ return `import "dotenv/config";
24
+ import { Box } from "@upstash/box";
25
+
26
+ async function main() {
27
+ const config: Parameters<typeof Box.create>[0] = {
28
+ apiKey: process.env.UPSTASH_BOX_API_KEY!,
29
+ };
30
+
31
+ if (process.env.RUNTIME) {
32
+ config.runtime = process.env.RUNTIME;
33
+ }
34
+
35
+ if (process.env.AGENT_MODEL && process.env.AGENT_API_KEY) {
36
+ config.agent = {
37
+ model: process.env.AGENT_MODEL,
38
+ apiKey: process.env.AGENT_API_KEY,
39
+ };
40
+ }
41
+
42
+ if (process.env.GIT_TOKEN) {
43
+ config.git = { token: process.env.GIT_TOKEN };
44
+ }
45
+
46
+ console.log("Creating box...");
47
+ const box = await Box.create(config);
48
+ console.log(\`Box created: \${box.id}\`);
49
+
50
+ try {
51
+ // Write a file
52
+ console.log("\\nWriting hello.txt...");
53
+ await box.files.write({ path: "hello.txt", content: "Hello from Upstash Box!" });
54
+ console.log("File written.");
55
+
56
+ // Read it back
57
+ console.log("\\nReading hello.txt...");
58
+ const content = await box.files.read("hello.txt");
59
+ console.log(\`Content: \${content}\`);
60
+
61
+ // Execute a command
62
+ console.log("\\nRunning: ls -la");
63
+ const run = await box.exec("ls -la");
64
+ const output = await run.result();
65
+ console.log(output);
66
+
67
+ // List files
68
+ console.log("Listing files...");
69
+ const files = await box.files.list(".");
70
+ console.log(files.map((f: { name: string }) => f.name).join(" "));
71
+
72
+ // Agent demo (if configured)
73
+ if (process.env.AGENT_MODEL && process.env.AGENT_API_KEY) {
74
+ console.log("\\nRunning agent prompt...");
75
+ const stream = box.agent.stream({
76
+ prompt: "Create a file called demo.js that prints 'Hello World'",
77
+ });
78
+ for await (const chunk of stream) {
79
+ process.stdout.write(chunk);
80
+ }
81
+ console.log();
82
+ }
83
+
84
+ // Git demo (if configured)
85
+ if (process.env.GIT_TOKEN) {
86
+ console.log("\\nGit status:");
87
+ const gitRun = await box.exec("git status");
88
+ const gitOutput = await gitRun.result();
89
+ console.log(gitOutput);
90
+ }
91
+ } finally {
92
+ // Pause so you can check logs on the Upstash console
93
+ console.log("\\nPausing box...");
94
+ await box.pause();
95
+ console.log(\`Box \${box.id} paused. You can check your logs on the Upstash console.\`);
96
+ console.log(\`\\n\\x1b[2mTo reconnect to this box:\\x1b[22m\\n\\n \\x1b[36mcd ${dir} && npx @upstash/box-cli connect \${box.id}\\x1b[39m\\n\`);
97
+ }
98
+ }
99
+
100
+ main().catch(console.error);
101
+ `;
102
+ }
103
+ function generateReadme(dir) {
104
+ return `# Box Demo
105
+
106
+ A standalone demo project for the [@upstash/box](https://www.npmjs.com/package/@upstash/box) SDK.
107
+
108
+ ## Environment Variables
109
+
110
+ Configure these in the \`.env\` file:
111
+
112
+ | Variable | Description | Required |
113
+ | ---------------------- | ------------------------------------------------ | -------- |
114
+ | \`UPSTASH_BOX_API_KEY\` | Your Upstash Box API token | Yes |
115
+ | \`AGENT_MODEL\` | Agent model identifier (e.g. \`claude/sonnet_4_5\`) | No |
116
+ | \`AGENT_API_KEY\` | API key for the agent model | No |
117
+ | \`RUNTIME\` | Runtime environment (default: \`node\`) | No |
118
+ | \`GIT_TOKEN\` | GitHub personal access token | No |
119
+
120
+ ## What the demo does
121
+
122
+ 1. Creates a new box
123
+ 2. Writes a file and reads it back
124
+ 3. Executes a shell command (\`ls -la\`)
125
+ 4. Lists files in the box
126
+ 5. (If agent configured) Runs an agent prompt with streaming
127
+ 6. (If git configured) Shows git status
128
+ 7. Pauses the box so you can check logs on the Upstash console
129
+
130
+ ## Running
131
+
132
+ \`\`\`bash
133
+ cd ${dir}
134
+ npx tsx main.ts
135
+ \`\`\`
136
+ `;
137
+ }
138
+ function askQuestion(query) {
139
+ const rl = readline.createInterface({
140
+ input: process.stdin,
141
+ output: process.stdout,
142
+ });
143
+ return new Promise((resolve) => {
144
+ rl.question(query, (answer) => {
145
+ rl.close();
146
+ resolve(answer.trim().toLowerCase());
147
+ });
148
+ });
149
+ }
150
+ export async function initDemoCommand(flags) {
151
+ const token = resolveToken(flags.token);
152
+ if (flags.agentModel && !flags.agentApiKey) {
153
+ console.error(red("Error: --agent-api-key is required if --agent-model is set"));
154
+ process.exit(1);
155
+ }
156
+ const dir = flags.directory ?? "box-demo";
157
+ const absDir = path.resolve(dir);
158
+ if (fs.existsSync(absDir)) {
159
+ console.error(red(`Error: Directory "${dir}" already exists.`));
160
+ process.exit(1);
161
+ }
162
+ // Confirmation prompt
163
+ console.log(`\nThis command will:\n`);
164
+ console.log(` ${cyan("1.")} Create a directory ${bold(cyan(dir))}`);
165
+ console.log(` ${cyan("2.")} Install ${bold("@upstash/box")} and dependencies`);
166
+ console.log(` ${cyan("3.")} Prepare an example script to showcase Upstash Box\n`);
167
+ const confirm = await askQuestion(`Proceed? ${dim("(Y/n)")} `);
168
+ if (confirm !== "" && confirm !== "y" && confirm !== "yes") {
169
+ console.log(dim("Aborted."));
170
+ return;
171
+ }
172
+ fs.mkdirSync(absDir, { recursive: true });
173
+ console.log(`\nInitializing demo project in ${cyan(dir)}/...`);
174
+ execSync('npm init -y && npm pkg set type="module"', {
175
+ cwd: absDir,
176
+ stdio: "ignore",
177
+ });
178
+ console.log(`Installing dependencies...`);
179
+ execSync("npm install @upstash/box dotenv", { cwd: absDir, stdio: "ignore" });
180
+ execSync("npm install --save-dev @types/node", {
181
+ cwd: absDir,
182
+ stdio: "ignore",
183
+ });
184
+ fs.writeFileSync(path.join(absDir, ".env"), generateEnvFile(flags, token));
185
+ fs.writeFileSync(path.join(absDir, "main.ts"), generateMainTs(dir));
186
+ fs.writeFileSync(path.join(absDir, "README.md"), generateReadme(dir));
187
+ console.log(`\n${green("Demo project created in")} ${bold(cyan(dir))}/`);
188
+ console.log(` ${cyan(".env")} ${dim("—")} environment variables`);
189
+ console.log(` ${cyan("main.ts")} ${dim("—")} demo script`);
190
+ console.log(` ${cyan("README.md")} ${dim("—")} documentation\n`);
191
+ console.log(`See ${cyan("README.md")} for details on configuration and usage.\n`);
192
+ const answer = await askQuestion(`Run the demo now? ${dim("(Y/n)")} `);
193
+ if (answer === "" || answer === "y" || answer === "yes") {
194
+ console.log(yellow("\nRunning demo...\n"));
195
+ execSync("npx tsx main.ts", { cwd: absDir, stdio: "inherit" });
196
+ }
197
+ else {
198
+ console.log(`\nTo run later:\n ${cyan(`cd ${dir} && npx tsx main.ts`)}`);
199
+ }
200
+ }
201
+ export { generateEnvFile, generateMainTs, generateReadme };
202
+ //# sourceMappingURL=init-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-demo.js","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjE"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBjE"}
@@ -7,8 +7,13 @@ export async function listCommand(flags) {
7
7
  console.log("No boxes found.");
8
8
  return;
9
9
  }
10
- for (const b of boxes) {
11
- console.log(`${b.id}\t${b.status}\t${b.model}\t${b.created_at}`);
10
+ const headers = ["ID", "STATUS", "MODEL", "CREATED"];
11
+ const rows = boxes.map((b) => [b.id, b.status, b.model ?? "", String(b.created_at)]);
12
+ const colWidths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => r[i].length)));
13
+ const formatRow = (row) => row.map((val, i) => val.padEnd(colWidths[i])).join(" ");
14
+ console.log(formatRow(headers));
15
+ for (const row of rows) {
16
+ console.log(formatRow(row));
12
17
  }
13
18
  }
14
19
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAgB;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAgB;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9F,MAAM,SAAS,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/F,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import { connectCommand } from "./commands/connect.js";
6
6
  import { fromSnapshotCommand } from "./commands/from-snapshot.js";
7
7
  import { listCommand } from "./commands/list.js";
8
8
  import { getCommand } from "./commands/get.js";
9
+ import { initDemoCommand } from "./commands/init-demo.js";
9
10
  const program = new Command();
10
11
  program
11
12
  .name("box")
@@ -46,5 +47,15 @@ program
46
47
  .description("Get details about a box")
47
48
  .option("--token <token>", "Upstash Box API token")
48
49
  .action((boxId, opts) => getCommand(boxId, opts));
50
+ program
51
+ .command("init-demo")
52
+ .description("Scaffold a standalone demo project for @upstash/box")
53
+ .option("--token <token>", "Upstash Box API token")
54
+ .option("--agent-model <model>", "Agent model identifier")
55
+ .option("--agent-api-key <key>", "Agent API key (required if --agent-model is set)")
56
+ .option("--runtime <runtime>", "Runtime environment", "node")
57
+ .option("--git-token <token>", "GitHub personal access token")
58
+ .option("--directory <dir>", "Output directory", "box-demo")
59
+ .action((opts) => initDemoCommand(opts));
49
60
  program.parse();
50
61
  //# 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;AAE/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,wDAAwD,CAAC;KACvF,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,EAAE,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAc,CAAC;KAC/H,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAEzC,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAExD,OAAO;KACJ,OAAO,CAAC,6BAA6B,CAAC;KACtC,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;KAChD,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,EAAE,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAc,CAAC;KAC/H,MAAM,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvC,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;KAClD,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAEpD,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Box } from "@upstash/box";
2
+ /**
3
+ * Pause the box. Returns true to signal the REPL to exit.
4
+ */
5
+ export declare function handlePause(box: Box, _args: string): Promise<boolean>;
6
+ //# sourceMappingURL=pause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../../src/repl-commands/pause.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI3E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Pause the box. Returns true to signal the REPL to exit.
3
+ */
4
+ export async function handlePause(box, _args) {
5
+ await box.pause();
6
+ console.log(`Box ${box.id} paused.`);
7
+ return true;
8
+ }
9
+ //# sourceMappingURL=pause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.js","sourceRoot":"","sources":["../../src/repl-commands/pause.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAQ,EAAE,KAAa;IACvD,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAmBxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CvD"}
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAmBxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvD"}
package/dist/repl.js CHANGED
@@ -5,7 +5,7 @@ import { handleExec } from "./repl-commands/exec.js";
5
5
  import { handleFiles } from "./repl-commands/files.js";
6
6
  import { handleGit } from "./repl-commands/git.js";
7
7
  import { handleSnapshot } from "./repl-commands/snapshot.js";
8
- import { handleStop } from "./repl-commands/stop.js";
8
+ import { handlePause } from "./repl-commands/pause.js";
9
9
  import { handleDelete } from "./repl-commands/delete.js";
10
10
  const COMMANDS = {
11
11
  run: handleRun,
@@ -13,7 +13,7 @@ const COMMANDS = {
13
13
  files: handleFiles,
14
14
  git: handleGit,
15
15
  snapshot: handleSnapshot,
16
- stop: handleStop,
16
+ pause: handlePause,
17
17
  delete: handleDelete,
18
18
  };
19
19
  /**
package/dist/repl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,QAAQ,GAAwE;IACpF,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,cAAc;IACxB,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAQ;IACtC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CACT,oDAAoD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAC/F,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxB,MAAM;YACR,CAAC;YAED,iCAAiC;YACjC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAExE,wBAAwB;YACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC7E,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE1E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC5C,IAAI,UAAU,KAAK,IAAI;wBAAE,MAAM;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@upstash/box-cli",
3
- "version": "0.0.0",
3
+ "version": "0.1.4",
4
4
  "description": "CLI for Upstash Box — REPL-first interface for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,10 +18,11 @@
18
18
  "dependencies": {
19
19
  "commander": "^13.0.0",
20
20
  "dotenv": "^17.3.1",
21
- "@upstash/box": "0.0.0"
21
+ "@upstash/box": "0.1.3"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "^20.10.0",
25
+ "prettier": "^3.8.1",
25
26
  "typescript": "^5.3.0"
26
27
  },
27
28
  "publishConfig": {
@@ -36,6 +37,8 @@
36
37
  "scripts": {
37
38
  "build": "tsc",
38
39
  "dev": "tsc --watch",
39
- "test": "vitest run"
40
+ "test": "vitest run",
41
+ "lint": "prettier --check . --write",
42
+ "ci:lint": "prettier --check ."
40
43
  }
41
44
  }
@@ -1,6 +0,0 @@
1
- import type { Box } from "@upstash/box";
2
- /**
3
- * Stop the box. Returns true to signal the REPL to exit.
4
- */
5
- export declare function handleStop(box: Box, _args: string): Promise<boolean>;
6
- //# sourceMappingURL=stop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/repl-commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI1E"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Stop the box. Returns true to signal the REPL to exit.
3
- */
4
- export async function handleStop(box, _args) {
5
- await box.stop();
6
- console.log(`Box ${box.id} stopped.`);
7
- return true;
8
- }
9
- //# sourceMappingURL=stop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/repl-commands/stop.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAQ,EAAE,KAAa;IACtD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC"}