@sandagent/runner-cli 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -2,25 +2,59 @@
2
2
  /**
3
3
  * SandAgent Runner CLI
4
4
  *
5
- * Like gemini-cli or claude-code - runs locally in your terminal.
6
- * Streams AI SDK UI messages directly to stdout.
7
- *
8
- * Usage:
9
- * sandagent run [options] -- "<user input>"
10
- *
11
- * The CLI is designed to be executed in a specific working directory
12
- * and outputs AI SDK UI messages directly.
5
+ * Subcommands:
6
+ * sandagent run [options] -- "<user input>" Run an agent locally
7
+ * sandagent image build [options] Build (and optionally push) a Docker image
13
8
  */
14
9
  import { parseArgs } from "node:util";
10
+ import { buildImage } from "./build-image.js";
15
11
  import { runAgent } from "./runner.js";
16
- function parseCliArgs() {
12
+ // ---------------------------------------------------------------------------
13
+ // Shared helpers
14
+ // ---------------------------------------------------------------------------
15
+ /** Get the first positional arg (top-level subcommand). */
16
+ function getSubcommand() {
17
+ for (let i = 2; i < process.argv.length; i++) {
18
+ const a = process.argv[i];
19
+ if (a === "--")
20
+ break;
21
+ if (!a.startsWith("-"))
22
+ return a;
23
+ }
24
+ return undefined;
25
+ }
26
+ /** Get the second positional arg (sub-subcommand, e.g. "build" in "image build"). */
27
+ function getSubSubcommand() {
28
+ let found = 0;
29
+ for (let i = 2; i < process.argv.length; i++) {
30
+ const a = process.argv[i];
31
+ if (a === "--")
32
+ break;
33
+ if (!a.startsWith("-")) {
34
+ found++;
35
+ if (found === 2)
36
+ return a;
37
+ }
38
+ }
39
+ return undefined;
40
+ }
41
+ /** Slice process.argv to args after N positionals. */
42
+ function argsAfterPositionals(n) {
43
+ let found = 0;
44
+ for (let i = 2; i < process.argv.length; i++) {
45
+ if (!process.argv[i].startsWith("-") && process.argv[i] !== "--") {
46
+ found++;
47
+ if (found === n)
48
+ return process.argv.slice(i + 1);
49
+ }
50
+ }
51
+ return [];
52
+ }
53
+ function parseRunArgs() {
17
54
  const { values, positionals } = parseArgs({
55
+ args: argsAfterPositionals(1),
18
56
  options: {
19
- runner: {
20
- type: "string",
21
- short: "r",
22
- default: "claude",
23
- },
57
+ runner: { type: "string", short: "r", default: "claude" },
24
58
  model: {
25
59
  type: "string",
26
60
  short: "m",
@@ -31,65 +65,38 @@ function parseCliArgs() {
31
65
  short: "c",
32
66
  default: process.env.SANDAGENT_WORKSPACE ?? process.cwd(),
33
67
  },
34
- "system-prompt": {
35
- type: "string",
36
- short: "s",
37
- },
38
- "max-turns": {
39
- type: "string",
40
- short: "t",
41
- },
42
- "allowed-tools": {
43
- type: "string",
44
- short: "a",
45
- },
46
- resume: {
47
- type: "string",
48
- short: "r",
49
- },
50
- "output-format": {
51
- type: "string",
52
- short: "o",
53
- },
54
- help: {
55
- type: "boolean",
56
- short: "h",
57
- },
68
+ "system-prompt": { type: "string", short: "s" },
69
+ "max-turns": { type: "string", short: "t" },
70
+ "allowed-tools": { type: "string", short: "a" },
71
+ resume: { type: "string" },
72
+ "output-format": { type: "string", short: "o" },
73
+ help: { type: "boolean", short: "h" },
58
74
  },
59
75
  allowPositionals: true,
60
76
  strict: true,
61
77
  });
62
78
  if (values.help) {
63
- printHelp();
79
+ printRunHelp();
64
80
  process.exit(0);
65
81
  }
66
- // Check for "run" command
67
- if (positionals[0] !== "run") {
68
- console.error('Error: Expected "run" command');
69
- console.error('Usage: sandagent run [options] -- "<user input>"');
70
- process.exit(1);
71
- }
72
- // Get user input from positionals after "--"
73
82
  const dashIndex = process.argv.indexOf("--");
74
83
  let userInput = "";
75
84
  if (dashIndex !== -1 && dashIndex < process.argv.length - 1) {
76
85
  userInput = process.argv.slice(dashIndex + 1).join(" ");
77
86
  }
78
- else if (positionals.length > 1) {
79
- userInput = positionals.slice(1).join(" ");
87
+ else if (positionals.length > 0) {
88
+ userInput = positionals.join(" ");
80
89
  }
81
90
  if (!userInput) {
82
91
  console.error("Error: User input is required");
83
92
  console.error('Usage: sandagent run [options] -- "<user input>"');
84
93
  process.exit(1);
85
94
  }
86
- // Validate runner
87
95
  const runner = values.runner;
88
96
  if (!["claude", "codex", "copilot"].includes(runner)) {
89
97
  console.error('Error: --runner must be one of: "claude", "codex", "copilot"');
90
98
  process.exit(1);
91
99
  }
92
- // Validate output-format
93
100
  const outputFormat = values["output-format"];
94
101
  if (outputFormat &&
95
102
  !["text", "json", "stream-json", "stream"].includes(outputFormat)) {
@@ -110,62 +117,165 @@ function parseCliArgs() {
110
117
  userInput,
111
118
  };
112
119
  }
113
- function printHelp() {
120
+ function parseImageBuildArgs() {
121
+ const { values } = parseArgs({
122
+ args: argsAfterPositionals(2),
123
+ options: {
124
+ name: { type: "string", default: "sandagent" },
125
+ tag: { type: "string", default: "latest" },
126
+ image: { type: "string" },
127
+ platform: { type: "string", default: "linux/amd64" },
128
+ template: { type: "string" },
129
+ push: { type: "boolean", default: false },
130
+ help: { type: "boolean", short: "h" },
131
+ },
132
+ allowPositionals: false,
133
+ strict: true,
134
+ });
135
+ if (values.help) {
136
+ printImageBuildHelp();
137
+ process.exit(0);
138
+ }
139
+ return {
140
+ name: values.name,
141
+ tag: values.tag,
142
+ image: values.image,
143
+ platform: values.platform,
144
+ template: values.template,
145
+ push: values.push ?? false,
146
+ };
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Help text
150
+ // ---------------------------------------------------------------------------
151
+ function printRunHelp() {
114
152
  console.log(`
115
- 🤖 SandAgent Runner CLI
153
+ 🤖 SandAgent Runner CLI — run
116
154
 
117
- Like gemini-cli or claude-code - runs locally in your terminal.
118
- Streams AI SDK UI messages directly to stdout.
155
+ Runs an agent locally in your terminal, streaming AI SDK UI messages to stdout.
119
156
 
120
157
  Usage:
121
158
  sandagent run [options] -- "<user input>"
122
159
 
123
160
  Options:
124
- -r, --runner <runner> Runner to use: claude, codex, copilot (default: claude)
125
- -m, --model <model> Model to use (default: claude-sonnet-4-20250514)
126
- -c, --cwd <path> Working directory (default: current directory)
161
+ -r, --runner <runner> Runner: claude, codex, copilot (default: claude)
162
+ -m, --model <model> Model (default: claude-sonnet-4-20250514)
163
+ -c, --cwd <path> Working directory (default: cwd)
127
164
  -s, --system-prompt <prompt> Custom system prompt
128
- -t, --max-turns <n> Maximum conversation turns
129
- -a, --allowed-tools <tools> Comma-separated list of allowed tools
130
- -r, --resume <session-id> Resume a previous session
131
- -o, --output-format <format> Output format (default: stream)
132
- Available: text, json(single result), stream-json(realtime streaming), stream(ai sdk ui sse format)
133
- -h, --help Show this help message
165
+ -t, --max-turns <n> Max conversation turns
166
+ -a, --allowed-tools <tools> Comma-separated allowed tools
167
+ --resume <session-id> Resume a previous session
168
+ -o, --output-format <fmt> text | json | stream-json | stream (default: stream)
169
+ -h, --help Show this help
170
+
171
+ Environment:
172
+ ANTHROPIC_API_KEY Anthropic API key (required)
173
+ SANDAGENT_WORKSPACE Default workspace path
174
+ `);
175
+ }
176
+ function printImageBuildHelp() {
177
+ console.log(`
178
+ 🐳 SandAgent Runner CLI — image build
134
179
 
135
- Environment Variables:
136
- ANTHROPIC_API_KEY Anthropic API key (required)
137
- SANDAGENT_WORKSPACE Default workspace path
138
- SANDAGENT_LOG_LEVEL Logging level (debug, info, warn, error)
180
+ Build (and optionally push) a SandAgent Docker image.
181
+ The image includes Claude Agent SDK + runner-cli pre-installed.
182
+
183
+ Usage:
184
+ sandagent image build [options]
185
+
186
+ Options:
187
+ --name <name> Image name, e.g. vikadata/sandagent-seo (default: sandagent)
188
+ --tag <tag> Image tag (default: latest)
189
+ --image <full> Full image name override (e.g. myorg/myimage:v1)
190
+ --platform <plat> Build platform (default: linux/amd64)
191
+ --template <path> Path to agent template directory to bake into the image
192
+ --push Push image to registry after build
193
+ -h, --help Show this help
139
194
 
140
195
  Examples:
141
- # Run with default settings
142
- sandagent run -- "Create a hello world script"
196
+ sandagent image build --name vikadata/sandagent-seo --tag 0.1.0
197
+ sandagent image build --name vikadata/sandagent-seo --tag 0.1.0 --template ./templates/seo-agent
198
+ sandagent image build --name vikadata/sandagent-seo --tag 0.1.0 --template ./templates/seo-agent --push
199
+ `);
200
+ }
201
+ function printImageHelp() {
202
+ console.log(`
203
+ 🐳 SandAgent Runner CLI — image
143
204
 
144
- # Run with custom system prompt
145
- sandagent run --system-prompt "You are a coding assistant" -- "Build a REST API with Express"
205
+ Manage SandAgent Docker images.
146
206
 
147
- # Specify working directory
148
- sandagent run --cwd ./my-project -- "Fix the bug in main.ts"
207
+ Usage:
208
+ sandagent image <subcommand> [options]
209
+
210
+ Subcommands:
211
+ build Build (and optionally push) a Docker image
212
+
213
+ Run "sandagent image build --help" for build options.
149
214
  `);
150
215
  }
216
+ function printGlobalHelp() {
217
+ console.log(`
218
+ 🤖 SandAgent Runner CLI
219
+
220
+ Usage:
221
+ sandagent <command> [options]
222
+
223
+ Commands:
224
+ run Run an agent locally (streams AI SDK UI messages to stdout)
225
+ image build Build a SandAgent Docker image (with optional --push)
226
+
227
+ Run "sandagent <command> --help" for command-specific options.
228
+ `);
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // Main
232
+ // ---------------------------------------------------------------------------
151
233
  async function main() {
152
- const args = parseCliArgs();
153
- // Change to the specified working directory
154
- process.chdir(args.cwd);
155
- // Run the agent and stream output to stdout
156
- await runAgent({
157
- runner: args.runner,
158
- model: args.model,
159
- userInput: args.userInput,
160
- systemPrompt: args.systemPrompt,
161
- maxTurns: args.maxTurns,
162
- allowedTools: args.allowedTools,
163
- resume: args.resume,
164
- outputFormat: args.outputFormat,
165
- });
234
+ const sub = getSubcommand();
235
+ if (!sub || sub === "--help" || sub === "-h") {
236
+ printGlobalHelp();
237
+ process.exit(0);
238
+ }
239
+ switch (sub) {
240
+ case "run": {
241
+ const args = parseRunArgs();
242
+ process.chdir(args.cwd);
243
+ await runAgent({
244
+ runner: args.runner,
245
+ model: args.model,
246
+ userInput: args.userInput,
247
+ systemPrompt: args.systemPrompt,
248
+ maxTurns: args.maxTurns,
249
+ allowedTools: args.allowedTools,
250
+ resume: args.resume,
251
+ outputFormat: args.outputFormat,
252
+ });
253
+ break;
254
+ }
255
+ case "image": {
256
+ const subSub = getSubSubcommand();
257
+ if (!subSub || subSub === "--help" || subSub === "-h") {
258
+ printImageHelp();
259
+ process.exit(0);
260
+ }
261
+ if (subSub === "build") {
262
+ const args = parseImageBuildArgs();
263
+ await buildImage(args);
264
+ }
265
+ else {
266
+ console.error(`Unknown image subcommand: ${subSub}`);
267
+ printImageHelp();
268
+ process.exit(1);
269
+ }
270
+ break;
271
+ }
272
+ default:
273
+ console.error(`Unknown command: ${sub}`);
274
+ printGlobalHelp();
275
+ process.exit(1);
276
+ }
166
277
  }
167
278
  main().catch((error) => {
168
- // Errors go to stderr, not stdout
169
279
  console.error("Fatal error:", error.message);
170
280
  process.exit(1);
171
281
  });
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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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { runAgent, type RunAgentOptions } from "./runner.js";
2
+ export { buildImage, type BuildImageOptions } from "./build-image.js";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { runAgent } from "./runner.js";
2
+ export { buildImage } from "./build-image.js";
2
3
  //# 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":"AAAA,OAAO,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sandagent/runner-cli",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "SandAgent Runner CLI - Like gemini-cli or claude-code, runs in your local terminal with AI SDK UI streaming",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,8 @@
16
16
  }
17
17
  },
18
18
  "files": [
19
- "dist"
19
+ "dist",
20
+ "Dockerfile"
20
21
  ],
21
22
  "repository": {
22
23
  "type": "git",