@upstash/box-cli 0.1.10 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +25 -20
  2. package/dist/agent-key.d.ts +10 -0
  3. package/dist/agent-key.d.ts.map +1 -0
  4. package/dist/agent-key.js +18 -0
  5. package/dist/agent-key.js.map +1 -0
  6. package/dist/cli.js +3 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/connect.d.ts.map +1 -1
  9. package/dist/commands/connect.js +13 -5
  10. package/dist/commands/connect.js.map +1 -1
  11. package/dist/commands/create-wizard.d.ts +3 -0
  12. package/dist/commands/create-wizard.d.ts.map +1 -0
  13. package/dist/commands/create-wizard.js +170 -0
  14. package/dist/commands/create-wizard.js.map +1 -0
  15. package/dist/commands/create.d.ts +2 -3
  16. package/dist/commands/create.d.ts.map +1 -1
  17. package/dist/commands/create.js +18 -6
  18. package/dist/commands/create.js.map +1 -1
  19. package/dist/commands/from-snapshot.d.ts +1 -1
  20. package/dist/commands/from-snapshot.d.ts.map +1 -1
  21. package/dist/commands/from-snapshot.js +3 -6
  22. package/dist/commands/from-snapshot.js.map +1 -1
  23. package/dist/commands/init-demo.d.ts +1 -1
  24. package/dist/commands/init-demo.d.ts.map +1 -1
  25. package/dist/commands/init-demo.js +8 -10
  26. package/dist/commands/init-demo.js.map +1 -1
  27. package/dist/commands/list.d.ts.map +1 -1
  28. package/dist/commands/list.js +18 -2
  29. package/dist/commands/list.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/repl/client.d.ts +8 -3
  33. package/dist/repl/client.d.ts.map +1 -1
  34. package/dist/repl/client.js +30 -11
  35. package/dist/repl/client.js.map +1 -1
  36. package/dist/repl/commands/code.d.ts +12 -0
  37. package/dist/repl/commands/code.d.ts.map +1 -0
  38. package/dist/repl/commands/code.js +45 -0
  39. package/dist/repl/commands/code.js.map +1 -0
  40. package/dist/repl/commands/command.d.ts +7 -0
  41. package/dist/repl/commands/command.d.ts.map +1 -0
  42. package/dist/repl/commands/command.js +14 -0
  43. package/dist/repl/commands/command.js.map +1 -0
  44. package/dist/repl/commands/run.d.ts +9 -1
  45. package/dist/repl/commands/run.d.ts.map +1 -1
  46. package/dist/repl/commands/run.js +67 -0
  47. package/dist/repl/commands/run.js.map +1 -1
  48. package/dist/repl/terminal.d.ts +2 -1
  49. package/dist/repl/terminal.d.ts.map +1 -1
  50. package/dist/repl/terminal.js +123 -14
  51. package/dist/repl/terminal.js.map +1 -1
  52. package/dist/repl/types.d.ts +26 -1
  53. package/dist/repl/types.d.ts.map +1 -1
  54. package/package.json +2 -2
package/README.md CHANGED
@@ -30,6 +30,13 @@ export UPSTASH_BOX_API_KEY=abx_...
30
30
  Create a new box and enter an interactive REPL.
31
31
 
32
32
  ```bash
33
+ # Uses Upstash-managed key by default (no --agent-api-key needed)
34
+ box create --agent-model claude/sonnet_4_5
35
+
36
+ # Use a key stored in the Upstash console
37
+ box create --agent-model claude/sonnet_4_5 --agent-api-key stored
38
+
39
+ # Pass a direct API key
33
40
  box create \
34
41
  --agent-model claude/sonnet_4_5 \
35
42
  --agent-api-key $CLAUDE_KEY \
@@ -39,14 +46,14 @@ box create \
39
46
  --env DEBUG=true
40
47
  ```
41
48
 
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) |
49
+ | Flag | Description | Default |
50
+ | ----------------- | ------------------------------------------------------------------------------------------- | ------- |
51
+ | `--token` | Upstash Box API token | |
52
+ | `--runtime` | Runtime environment (`node`, `python`, `golang`, `ruby`, `rust`) | |
53
+ | `--agent-model` | Agent model identifier | |
54
+ | `--agent-api-key` | Agent API key — omit for Upstash-managed key, `stored` for a saved key, or a direct API key | Upstash |
55
+ | `--git-token` | GitHub personal access token | |
56
+ | `--env KEY=VAL` | Environment variable (repeatable) | |
50
57
 
51
58
  ### `box connect [box-id]`
52
59
 
@@ -62,9 +69,8 @@ box connect # connects to most recent
62
69
  Create a new box from a snapshot and enter the REPL. Accepts the same flags as `create`.
63
70
 
64
71
  ```bash
65
- box from-snapshot snap_abc123 \
66
- --agent-model claude/sonnet_4_5 \
67
- --agent-api-key $CLAUDE_KEY
72
+ box from-snapshot snap_abc123 --agent-model claude/sonnet_4_5
73
+ box from-snapshot snap_abc123 --agent-model claude/sonnet_4_5 --agent-api-key $CLAUDE_KEY
68
74
  ```
69
75
 
70
76
  ### `box list`
@@ -91,20 +97,19 @@ Scaffold a standalone demo project that uses the `@upstash/box` SDK. Creates a d
91
97
  box init-demo \
92
98
  --token $UPSTASH_BOX_API_KEY \
93
99
  --agent-model claude/sonnet_4_5 \
94
- --agent-api-key $CLAUDE_KEY \
95
100
  --runtime node \
96
101
  --git-token $GITHUB_TOKEN \
97
102
  --directory my-demo
98
103
  ```
99
104
 
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` |
105
+ | Flag | Description | Default |
106
+ | ----------------- | ------------------------------------------------------------------------------------------- | ---------- |
107
+ | `--token` | Upstash Box API token | |
108
+ | `--agent-model` | Agent model identifier | |
109
+ | `--agent-api-key` | Agent API key omit for Upstash-managed key, `stored` for a saved key, or a direct API key | Upstash |
110
+ | `--runtime` | Runtime environment | `node` |
111
+ | `--git-token` | GitHub personal access token | |
112
+ | `--directory` | Output directory | `box-demo` |
108
113
 
109
114
  After scaffolding, the command offers to run the demo immediately. The generated project includes:
110
115
 
@@ -0,0 +1,10 @@
1
+ import { BoxApiKey } from "@upstash/box";
2
+ /**
3
+ * Resolve the --agent-api-key flag value to a BoxApiKey or direct key string.
4
+ *
5
+ * - undefined / true (flag present with no value) → BoxApiKey.UpstashKey
6
+ * - "stored" → BoxApiKey.StoredKey
7
+ * - any other string → passed through as a direct API key
8
+ */
9
+ export declare function resolveAgentApiKey(flag?: string | true): BoxApiKey | string;
10
+ //# sourceMappingURL=agent-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-key.d.ts","sourceRoot":"","sources":["../src/agent-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAU3E"}
@@ -0,0 +1,18 @@
1
+ import { BoxApiKey } from "@upstash/box";
2
+ /**
3
+ * Resolve the --agent-api-key flag value to a BoxApiKey or direct key string.
4
+ *
5
+ * - undefined / true (flag present with no value) → BoxApiKey.UpstashKey
6
+ * - "stored" → BoxApiKey.StoredKey
7
+ * - any other string → passed through as a direct API key
8
+ */
9
+ export function resolveAgentApiKey(flag) {
10
+ if (flag === undefined || flag === true) {
11
+ return BoxApiKey.UpstashKey;
12
+ }
13
+ if (flag.toLowerCase() === "stored") {
14
+ return BoxApiKey.StoredKey;
15
+ }
16
+ return flag;
17
+ }
18
+ //# sourceMappingURL=agent-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-key.js","sourceRoot":"","sources":["../src/agent-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACrD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC,UAAU,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/cli.js CHANGED
@@ -20,7 +20,7 @@ program
20
20
  .option("--token <token>", "Upstash Box API token")
21
21
  .option("--runtime <runtime>", "Runtime environment (node, python, golang, ruby, rust)")
22
22
  .option("--agent-model <model>", "Agent model identifier")
23
- .option("--agent-api-key <key>", "Agent API key (Anthropic or OpenAI)")
23
+ .option("--agent-api-key [key]", 'Agent API key omit to use Upstash-managed key, or pass "stored" to use a key saved in the Upstash console')
24
24
  .option("--git-token <token>", "GitHub personal access token")
25
25
  .option("--env <KEY=VAL>", "Environment variable (repeatable)", (val, prev) => [...prev, val], [])
26
26
  .action((opts) => createCommand(opts));
@@ -35,7 +35,7 @@ program
35
35
  .option("--token <token>", "Upstash Box API token")
36
36
  .option("--runtime <runtime>", "Runtime environment")
37
37
  .option("--agent-model <model>", "Agent model identifier")
38
- .option("--agent-api-key <key>", "Agent API key")
38
+ .option("--agent-api-key [key]", 'Agent API key — omit to use Upstash-managed key, or pass "stored" to use a key saved in the Upstash console')
39
39
  .option("--git-token <token>", "GitHub personal access token")
40
40
  .option("--env <KEY=VAL>", "Environment variable (repeatable)", (val, prev) => [...prev, val], [])
41
41
  .action((snapshotId, opts) => fromSnapshotCommand(snapshotId, opts));
@@ -60,7 +60,7 @@ program
60
60
  .description("Scaffold a standalone demo project for @upstash/box")
61
61
  .option("--token <token>", "Upstash Box API token")
62
62
  .option("--agent-model <model>", "Agent model identifier")
63
- .option("--agent-api-key <key>", "Agent API key (required if --agent-model is set)")
63
+ .option("--agent-api-key [key]", 'Agent API key omit to use Upstash-managed key, or pass "stored" to use a key saved in the Upstash console')
64
64
  .option("--runtime <runtime>", "Runtime environment", "node")
65
65
  .option("--git-token <token>", "GitHub personal access token")
66
66
  .option("--directory <dir>", "Output directory", "box-demo")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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,CA8Cf"}
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,CAsDf"}
@@ -17,14 +17,22 @@ export async function connectCommand(boxId, flags) {
17
17
  if (process.stdin.isTTY && active.length > 1) {
18
18
  const items = active.slice(0, 10);
19
19
  const idWidth = Math.max(...items.map((b) => b.id.length));
20
+ const nameWidth = Math.max(...items.map((b) => (b.name ?? "").length), 0);
20
21
  const statusWidth = Math.max(...items.map((b) => b.status.length));
21
22
  const selected = await interactiveSelect({
22
23
  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
- })),
24
+ items: items.map((b) => {
25
+ const name = b.name
26
+ ? ` ${b.name.padEnd(nameWidth)}`
27
+ : nameWidth > 0
28
+ ? ` ${"".padEnd(nameWidth)}`
29
+ : "";
30
+ return {
31
+ label: `${b.id.padEnd(idWidth)}${name}`,
32
+ value: b.id,
33
+ description: `${b.status.padEnd(statusWidth)} ${b.model ?? ""}`,
34
+ };
35
+ }),
28
36
  });
29
37
  if (!selected) {
30
38
  console.log(dim("Aborted."));
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CreateFlags } from "./create.js";
2
+ export declare function createWizard(): Promise<CreateFlags | undefined>;
3
+ //# sourceMappingURL=create-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-wizard.d.ts","sourceRoot":"","sources":["../../src/commands/create-wizard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAiJ/C,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA2CrE"}
@@ -0,0 +1,170 @@
1
+ import readline from "node:readline";
2
+ import { interactiveSelect } from "../utils/interactive-select.js";
3
+ import { bold, cyan, dim, green } from "../utils/ansi.js";
4
+ // ── Data ────────────────────────────────────────────────────────────────────
5
+ const RUNTIMES = [
6
+ { label: "Node.js", value: "node", description: "JavaScript / TypeScript" },
7
+ { label: "Python", value: "python" },
8
+ { label: "Go", value: "golang" },
9
+ { label: "Ruby", value: "ruby" },
10
+ { label: "Rust", value: "rust" },
11
+ ];
12
+ const PROVIDERS = [
13
+ { label: "Claude", value: "claude" },
14
+ { label: "OpenAI Codex", value: "openai" },
15
+ ];
16
+ const CLAUDE_MODELS = [
17
+ { label: "Sonnet 4.5", value: "claude/sonnet_4_5" },
18
+ { label: "Opus 4.5", value: "claude/opus_4_5" },
19
+ { label: "Opus 4.6", value: "claude/opus_4_6" },
20
+ { label: "Sonnet 4", value: "claude/sonnet_4" },
21
+ { label: "Haiku 4.5", value: "claude/haiku_4_5" },
22
+ ];
23
+ const OPENAI_MODELS = [
24
+ { label: "GPT 5.3 Codex", value: "openai/gpt-5.3-codex" },
25
+ { label: "GPT 5.3 Codex Spark", value: "openai/gpt-5.3-codex-spark" },
26
+ { label: "GPT 5.2 Codex", value: "openai/gpt-5.2-codex" },
27
+ { label: "GPT 5.1 Codex Max", value: "openai/gpt-5.1-codex-max" },
28
+ ];
29
+ const API_KEY_OPTIONS = [
30
+ { label: "Upstash-managed", value: "upstash" },
31
+ { label: "Use stored key", value: "stored", description: "previously saved via UI or API" },
32
+ { label: "Enter your own", value: "custom" },
33
+ ];
34
+ function getActionItems(hasAgent) {
35
+ if (hasAgent) {
36
+ return [
37
+ { label: green("Create box"), value: "create" },
38
+ { label: "Reconfigure AI agent", value: "agent" },
39
+ { label: "Add GitHub token", value: "git-token" },
40
+ { label: "Add environment variables", value: "env-vars" },
41
+ ];
42
+ }
43
+ return [
44
+ { label: "Configure AI agent", value: "agent" },
45
+ { label: "Add GitHub token", value: "git-token" },
46
+ { label: "Add environment variables", value: "env-vars" },
47
+ { label: green("Create box"), value: "create" },
48
+ ];
49
+ }
50
+ // ── Helpers ─────────────────────────────────────────────────────────────────
51
+ function askQuestion(query) {
52
+ const rl = readline.createInterface({
53
+ input: process.stdin,
54
+ output: process.stdout,
55
+ });
56
+ return new Promise((resolve) => {
57
+ rl.question(query, (answer) => {
58
+ rl.close();
59
+ resolve(answer.trim());
60
+ });
61
+ });
62
+ }
63
+ const RULE = dim(" ─────────────────────────────────────");
64
+ function printSummary(flags) {
65
+ console.log(`\n${RULE}`);
66
+ console.log(` ${bold(cyan("Box configuration"))}`);
67
+ console.log(RULE);
68
+ console.log(` ${cyan("Runtime:")} ${flags.runtime ?? "node"}`);
69
+ if (flags.agentModel) {
70
+ console.log(` ${cyan("Agent:")} ${flags.agentModel}`);
71
+ const keyLabel = flags.agentApiKey === "stored"
72
+ ? "stored key"
73
+ : flags.agentApiKey && flags.agentApiKey !== true
74
+ ? "custom key"
75
+ : "Upstash-managed";
76
+ console.log(` ${cyan("API key:")} ${keyLabel}`);
77
+ }
78
+ else {
79
+ console.log(` ${cyan("Agent:")} ${dim("none")}`);
80
+ }
81
+ if (flags.gitToken) {
82
+ console.log(` ${cyan("Git token:")} set`);
83
+ }
84
+ if (flags.env && flags.env.length > 0) {
85
+ console.log(` ${cyan("Env vars:")} ${flags.env.length} set`);
86
+ }
87
+ console.log(`${RULE}\n`);
88
+ }
89
+ // ── Agent sub-flow ──────────────────────────────────────────────────────────
90
+ async function configureAgent(result) {
91
+ const provider = await interactiveSelect({
92
+ prompt: cyan("Select an agent provider:"),
93
+ items: PROVIDERS,
94
+ });
95
+ if (provider === undefined)
96
+ return false;
97
+ const models = provider === "claude" ? CLAUDE_MODELS : OPENAI_MODELS;
98
+ const model = await interactiveSelect({
99
+ prompt: cyan("Select a model:"),
100
+ items: models,
101
+ });
102
+ if (model === undefined)
103
+ return false;
104
+ result.agentModel = model;
105
+ const keyOption = await interactiveSelect({
106
+ prompt: cyan("Agent API key:"),
107
+ items: API_KEY_OPTIONS,
108
+ });
109
+ if (keyOption === undefined)
110
+ return false;
111
+ if (keyOption === "custom") {
112
+ const key = await askQuestion(" Enter API key: ");
113
+ if (key) {
114
+ result.agentApiKey = key;
115
+ }
116
+ else {
117
+ result.agentApiKey = undefined;
118
+ }
119
+ }
120
+ else if (keyOption === "stored") {
121
+ result.agentApiKey = "stored";
122
+ }
123
+ else {
124
+ result.agentApiKey = undefined;
125
+ }
126
+ return true;
127
+ }
128
+ // ── Wizard ──────────────────────────────────────────────────────────────────
129
+ export async function createWizard() {
130
+ const result = {};
131
+ // 1. Select runtime
132
+ const runtime = await interactiveSelect({
133
+ prompt: cyan("Select a runtime:"),
134
+ items: RUNTIMES,
135
+ });
136
+ if (runtime === undefined)
137
+ return undefined;
138
+ result.runtime = runtime;
139
+ // 2. Action loop: configure agent, add tokens/env, or create
140
+ while (true) {
141
+ printSummary(result);
142
+ const action = await interactiveSelect({
143
+ prompt: cyan("Configure AI agent or environment:"),
144
+ items: getActionItems(result.agentModel !== undefined),
145
+ });
146
+ if (action === undefined)
147
+ return undefined;
148
+ if (action === "create")
149
+ break;
150
+ if (action === "agent") {
151
+ const ok = await configureAgent(result);
152
+ if (!ok)
153
+ return undefined;
154
+ }
155
+ if (action === "git-token") {
156
+ const token = await askQuestion(" GitHub token: ");
157
+ if (token)
158
+ result.gitToken = token;
159
+ }
160
+ if (action === "env-vars") {
161
+ const entry = await askQuestion(" Enter env var (KEY=VALUE): ");
162
+ if (entry && entry.includes("=")) {
163
+ result.env = result.env ?? [];
164
+ result.env.push(entry);
165
+ }
166
+ }
167
+ }
168
+ return result;
169
+ }
170
+ //# sourceMappingURL=create-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-wizard.js","sourceRoot":"","sources":["../../src/commands/create-wizard.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- interface CreateFlags {
1
+ export interface CreateFlags {
2
2
  token?: string;
3
3
  runtime?: string;
4
4
  agentModel?: string;
5
- agentApiKey?: string;
5
+ agentApiKey?: string | true;
6
6
  gitToken?: string;
7
7
  env?: string[];
8
8
  }
9
9
  export declare function createCommand(flags: CreateFlags): Promise<void>;
10
- export {};
11
10
  //# sourceMappingURL=create.d.ts.map
@@ -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,CAiCrE"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,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,CA2CrE"}
@@ -1,11 +1,23 @@
1
1
  import { Box } from "@upstash/box";
2
2
  import { resolveToken } from "../auth.js";
3
+ import { resolveAgentApiKey } from "../agent-key.js";
3
4
  import { startRepl } from "../repl/terminal.js";
5
+ import { createWizard } from "./create-wizard.js";
6
+ import { dim } from "../utils/ansi.js";
4
7
  export async function createCommand(flags) {
5
8
  const apiKey = resolveToken(flags.token);
6
- if (flags.agentModel && !flags.agentApiKey) {
7
- console.error("Error: --agent-api-key is required if --agent-model is set");
8
- process.exit(1);
9
+ const hasConfigFlags = flags.agentModel !== undefined ||
10
+ flags.agentApiKey !== undefined ||
11
+ flags.runtime !== undefined ||
12
+ flags.gitToken !== undefined ||
13
+ (flags.env !== undefined && flags.env.length > 0);
14
+ if (!hasConfigFlags && process.stdin.isTTY) {
15
+ const wizardResult = await createWizard();
16
+ if (!wizardResult) {
17
+ console.log(dim("Aborted."));
18
+ return;
19
+ }
20
+ flags = { ...flags, ...wizardResult };
9
21
  }
10
22
  const env = {};
11
23
  if (flags.env) {
@@ -18,12 +30,12 @@ export async function createCommand(flags) {
18
30
  env[e.slice(0, idx)] = e.slice(idx + 1);
19
31
  }
20
32
  }
21
- console.log("Creating box...");
33
+ console.log("\nCreating box...");
22
34
  const box = await Box.create({
23
35
  apiKey,
24
36
  runtime: flags.runtime,
25
- agent: flags.agentModel && flags.agentApiKey
26
- ? { model: flags.agentModel, apiKey: flags.agentApiKey }
37
+ agent: flags.agentModel
38
+ ? { model: flags.agentModel, apiKey: resolveAgentApiKey(flags.agentApiKey) }
27
39
  : undefined,
28
40
  git: flags.gitToken ? { token: flags.gitToken } : undefined,
29
41
  env: Object.keys(env).length > 0 ? env : undefined,
@@ -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,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
+ {"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,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAWvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB;IACpD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,cAAc,GAClB,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,KAAK,CAAC,WAAW,KAAK,SAAS;QAC/B,KAAK,CAAC,OAAO,KAAK,SAAS;QAC3B,KAAK,CAAC,QAAQ,KAAK,SAAS;QAC5B,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpD,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,YAAY,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IACxC,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,mBAAmB,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;QAC3B,MAAM;QACN,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,UAAU;YACrB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YAC5E,CAAC,CAAC,SAAS;QACb,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"}
@@ -2,7 +2,7 @@ interface FromSnapshotFlags {
2
2
  token?: string;
3
3
  runtime?: string;
4
4
  agentModel?: string;
5
- agentApiKey?: string;
5
+ agentApiKey?: string | true;
6
6
  gitToken?: string;
7
7
  env?: string[];
8
8
  }
@@ -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,CACvC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAiCf"}
1
+ {"version":3,"file":"from-snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/from-snapshot.ts"],"names":[],"mappings":"AAKA,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,GAAG,IAAI,CAAC;IAC5B,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,CA2Bf"}
@@ -1,12 +1,9 @@
1
1
  import { Box } from "@upstash/box";
2
2
  import { resolveToken } from "../auth.js";
3
+ import { resolveAgentApiKey } from "../agent-key.js";
3
4
  import { startRepl } from "../repl/terminal.js";
4
5
  export async function fromSnapshotCommand(snapshotId, flags) {
5
6
  const apiKey = resolveToken(flags.token);
6
- if (flags.agentModel && !flags.agentApiKey) {
7
- console.error("Error: --agent-api-key is required if --agent-model is set");
8
- process.exit(1);
9
- }
10
7
  const env = {};
11
8
  if (flags.env) {
12
9
  for (const e of flags.env) {
@@ -22,8 +19,8 @@ export async function fromSnapshotCommand(snapshotId, flags) {
22
19
  const box = await Box.fromSnapshot(snapshotId, {
23
20
  apiKey,
24
21
  runtime: flags.runtime,
25
- agent: flags.agentModel && flags.agentApiKey
26
- ? { model: flags.agentModel, apiKey: flags.agentApiKey }
22
+ agent: flags.agentModel
23
+ ? { model: flags.agentModel, apiKey: resolveAgentApiKey(flags.agentApiKey) }
27
24
  : undefined,
28
25
  git: flags.gitToken ? { token: flags.gitToken } : undefined,
29
26
  env: Object.keys(env).length > 0 ? env : undefined,
@@ -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,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
+ {"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,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,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,KAAK,CAAC,UAAU;YACrB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YAC5E,CAAC,CAAC,SAAS;QACb,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,7 +1,7 @@
1
1
  interface InitDemoFlags {
2
2
  token?: string;
3
3
  agentModel?: string;
4
- agentApiKey?: string;
4
+ agentApiKey?: string | true;
5
5
  runtime?: string;
6
6
  gitToken?: string;
7
7
  directory?: string;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"init-demo.d.ts","sourceRoot":"","sources":["../../src/commands/init-demo.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,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,CAUpE;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,CAuDzE;AAED,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -3,12 +3,14 @@ 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
+ import { resolveAgentApiKey } from "../agent-key.js";
6
7
  import { bold, cyan, green, dim, red, yellow } from "../utils/ansi.js";
7
8
  function generateEnvFile(flags, token) {
9
+ const resolvedKey = flags.agentModel ? resolveAgentApiKey(flags.agentApiKey) : "";
8
10
  const lines = [
9
11
  `UPSTASH_BOX_API_KEY=${token}`,
10
12
  `AGENT_MODEL=${flags.agentModel ?? ""}`,
11
- `AGENT_API_KEY=${flags.agentApiKey ?? ""}`,
13
+ `AGENT_API_KEY=${resolvedKey ?? ""}`,
12
14
  `RUNTIME=${flags.runtime ?? "node"}`,
13
15
  `GIT_TOKEN=${flags.gitToken ?? ""}`,
14
16
  ];
@@ -27,10 +29,10 @@ async function main() {
27
29
  config.runtime = process.env.RUNTIME;
28
30
  }
29
31
 
30
- if (process.env.AGENT_MODEL && process.env.AGENT_API_KEY) {
32
+ if (process.env.AGENT_MODEL) {
31
33
  config.agent = {
32
34
  model: process.env.AGENT_MODEL,
33
- apiKey: process.env.AGENT_API_KEY,
35
+ ...(process.env.AGENT_API_KEY && { apiKey: process.env.AGENT_API_KEY }),
34
36
  };
35
37
  }
36
38
 
@@ -55,7 +57,7 @@ async function main() {
55
57
 
56
58
  // Execute a command
57
59
  console.log("\\nRunning: ls -la");
58
- const run = await box.exec("ls -la");
60
+ const run = await box.exec.command("ls -la");
59
61
  const output = run.result;
60
62
  console.log(output);
61
63
 
@@ -65,7 +67,7 @@ async function main() {
65
67
  console.log(files.map((f: { name: string }) => f.name).join(" "));
66
68
 
67
69
  // Agent demo (if configured)
68
- if (process.env.AGENT_MODEL && process.env.AGENT_API_KEY) {
70
+ if (process.env.AGENT_MODEL) {
69
71
  console.log("\\nRunning agent prompt...");
70
72
  const stream = box.agent.stream({
71
73
  prompt: "Create a file called demo.js that prints 'Hello World'",
@@ -79,7 +81,7 @@ async function main() {
79
81
  // Git demo (if configured)
80
82
  if (process.env.GIT_TOKEN) {
81
83
  console.log("\\nGit status:");
82
- const gitRun = await box.exec("git status");
84
+ const gitRun = await box.exec.command("git status");
83
85
  const gitOutput = gitRun.result;
84
86
  console.log(gitOutput);
85
87
  }
@@ -144,10 +146,6 @@ function askQuestion(query) {
144
146
  }
145
147
  export async function initDemoCommand(flags) {
146
148
  const token = resolveToken(flags.token);
147
- if (flags.agentModel && !flags.agentApiKey) {
148
- console.error(red("Error: --agent-api-key is required if --agent-model is set"));
149
- process.exit(1);
150
- }
151
149
  const dir = flags.directory ?? "box-demo";
152
150
  const absDir = path.resolve(dir);
153
151
  if (fs.existsSync(absDir)) {