@sandagent/runner-cli 0.1.1 → 0.1.2-beta.2

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 ADDED
@@ -0,0 +1,153 @@
1
+ # @sandagent/runner-cli
2
+
3
+ SandAgent Runner CLI - A **lightweight, local** command-line interface for running AI agents in your terminal.
4
+
5
+ Like gemini-cli, claude-code, or codex-cli, this tool runs **directly on your local filesystem** and streams AI SDK UI messages to stdout.
6
+
7
+ ## 🎯 Key Features
8
+
9
+ - 🔌 **Choose Different Runners**: Switch between Claude, Codex, Copilot with `--runner` flag
10
+ - 🚀 **Local Execution**: Runs directly on your filesystem, no sandbox required
11
+ - 💨 **Lightweight**: No manager dependency, minimal overhead
12
+ - 📡 **Streaming**: Real-time AI SDK UI streaming
13
+
14
+ ## 📐 Architecture
15
+
16
+ ```
17
+ runner-cli → runner-* (direct, NO dependencies on manager or sandbox)
18
+ ├─ runner-claude ✅
19
+ ├─ runner-codex 🚧
20
+ └─ runner-copilot 🚧
21
+
22
+ Dependencies:
23
+ ✅ @sandagent/runner-claude (runtime)
24
+ ❌ NO @sandagent/manager
25
+ ❌ NO @sandagent/sandbox-*
26
+ ```
27
+
28
+ **Difference from manager-cli:**
29
+ - `runner-cli`: Local filesystem, no isolation, lightweight, direct runner usage
30
+ - `manager-cli`: Sandboxed execution, uses manager + sandbox adapters + runner
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ pnpm add @sandagent/runner-cli
36
+ ```
37
+
38
+ ## Usage
39
+
40
+ ```bash
41
+ sandagent run [options] -- "<user input>"
42
+ ```
43
+
44
+ ### Basic Examples
45
+
46
+ ```bash
47
+ # Using Claude (default)
48
+ sandagent run -- "Create a hello world script"
49
+
50
+ # Explicitly choose Claude
51
+ sandagent run --runner claude -- "Create a hello world script"
52
+
53
+ # Using Codex (when implemented)
54
+ sandagent run --runner codex -- "Build a REST API with Express"
55
+
56
+ # Using GitHub Copilot (when implemented)
57
+ sandagent run --runner copilot -- "Refactor this code"
58
+
59
+ # With custom system prompt
60
+ sandagent run --runner claude --system-prompt "You are a coding assistant" -- "Build a REST API with Express"
61
+ ```
62
+
63
+ ## Options
64
+
65
+ | Option | Short | Description | Default |
66
+ |--------|-------|-------------|---------|
67
+ | `--runner <runner>` | `-r` | Runner to use: `claude`, `codex`, `copilot` | `claude` |
68
+ | `--model <model>` | `-m` | Model to use | `claude-sonnet-4-20250514` |
69
+ | `--cwd <path>` | `-c` | Working directory | Current directory |
70
+ | `--system-prompt <prompt>` | `-s` | Custom system prompt | - |
71
+ | `--max-turns <n>` | `-t` | Maximum conversation turns | - |
72
+ | `--allowed-tools <tools>` | `-a` | Comma-separated list of allowed tools | - |
73
+ | `--resume <session-id>` | `-r` | Resume a previous session | - |
74
+ | `--output-format <format>` | `-o` | Output format: `stream` or `json` | `stream` |
75
+ | `--help` | `-h` | Show help message | - |
76
+
77
+ ## Output Formats
78
+
79
+ ### Stream Format (Default)
80
+
81
+ Outputs Server-Sent Events (SSE) using the AI SDK UI Stream Protocol. Ideal for real-time UI streaming.
82
+
83
+ ```bash
84
+ sandagent run -- "Calculate 2+2"
85
+ ```
86
+
87
+ **Output:**
88
+ ```
89
+ data: {"type":"start","messageId":"msg_123"}
90
+ data: {"type":"text-delta","id":"text_1","delta":"The answer is 4."}
91
+ data: [DONE]
92
+ ```
93
+
94
+ ### JSON Format
95
+
96
+ Outputs a structured JSON object with complete message content and metadata. Ideal for API integration and automation.
97
+
98
+ ```bash
99
+ sandagent run --output-format json -- "Calculate 2+2"
100
+ # or
101
+ sandagent run -o json -- "Calculate 2+2"
102
+ ```
103
+
104
+ ## Environment Variables
105
+
106
+ | Variable | Description | Required |
107
+ |----------|-------------|----------|
108
+ | `ANTHROPIC_API_KEY` | Anthropic API key | Yes |
109
+ | `SANDAGENT_WORKSPACE` | Default workspace path | No |
110
+ | `SANDAGENT_LOG_LEVEL` | Logging level (debug, info, warn, error) | No |
111
+
112
+ ## Advanced Examples
113
+
114
+ ### Specify Working Directory
115
+
116
+ ```bash
117
+ sandagent run --cwd ./my-project -- "Fix the bug in main.ts"
118
+ ```
119
+
120
+ ### JSON Output for Automation
121
+
122
+ ```bash
123
+ # Save result to file
124
+ sandagent run -o json -- "Generate UUID" > result.json
125
+
126
+ # Parse with jq
127
+ sandagent run -o json -- "What is 2+2?" | jq '.content[0].text'
128
+ ```
129
+
130
+ ### Combined Options
131
+
132
+ ```bash
133
+ sandagent run \
134
+ -o json \
135
+ -m claude-sonnet-4-20250514 \
136
+ --system-prompt "You are a helpful coding assistant" \
137
+ --max-turns 10 \
138
+ -- "Build a REST API"
139
+ ```
140
+
141
+ ## Architecture
142
+
143
+ The CLI is designed to:
144
+ 1. Execute in a specific working directory
145
+ 2. Load settings from `.claude/settings.json` and `CLAUDE.md` in the project
146
+ 3. Stream AI SDK UI messages directly to stdout
147
+ 4. Support both SSE stream and JSON output formats
148
+
149
+ ## Related Documentation
150
+
151
+ - [Claude Agent SDK](https://platform.claude.com/docs/agent-sdk/typescript)
152
+ - [AI SDK UI Stream Protocol](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol)
153
+
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Integration tests for runner-cli
3
+ * Tests actual process execution
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=runner-cli.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-cli.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/runner-cli.integration.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Integration tests for runner-cli
3
+ * Tests actual process execution
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import { join } from "node:path";
7
+ import { describe, expect, it } from "vitest";
8
+ // Get CLI path - works in both compiled and source context
9
+ const CLI_PATH = join(process.cwd(), "dist/bundle.mjs");
10
+ describe("runner-cli Integration Tests", () => {
11
+ const TIMEOUT = 10000;
12
+ it("should display help message", async () => {
13
+ const output = await runCLI(["--help"]);
14
+ expect(output.stdout).toContain("SandAgent Runner CLI");
15
+ expect(output.stdout).toContain("--runner");
16
+ expect(output.stdout).toContain("--model");
17
+ expect(output.exitCode).toBe(0);
18
+ }, TIMEOUT);
19
+ it("should show error when no user input provided", async () => {
20
+ const output = await runCLI(["run"]);
21
+ expect(output.stderr).toContain("User input is required");
22
+ expect(output.exitCode).toBe(1);
23
+ }, TIMEOUT);
24
+ it("should show error for invalid runner", async () => {
25
+ const output = await runCLI([
26
+ "run",
27
+ "--runner",
28
+ "invalid",
29
+ "--",
30
+ "test task",
31
+ ]);
32
+ expect(output.stderr).toContain("must be one of");
33
+ expect(output.exitCode).toBe(1);
34
+ }, TIMEOUT);
35
+ it("should accept claude runner option", async () => {
36
+ // This will fail without API key, but should parse arguments correctly
37
+ const output = await runCLI(["run", "--runner", "claude", "--", "echo hello"], {
38
+ env: { ...process.env, ANTHROPIC_API_KEY: "" },
39
+ });
40
+ // Should fail due to missing API key, not argument parsing
41
+ expect(output.stderr).toContain("ANTHROPIC_API_KEY");
42
+ }, TIMEOUT);
43
+ });
44
+ /**
45
+ * Helper to run CLI and capture output
46
+ */
47
+ function runCLI(args, options = {}) {
48
+ return new Promise((resolve, reject) => {
49
+ const proc = spawn("node", [CLI_PATH, ...args], {
50
+ env: options.env || process.env,
51
+ stdio: "pipe",
52
+ });
53
+ let stdout = "";
54
+ let stderr = "";
55
+ proc.stdout?.on("data", (data) => {
56
+ stdout += data.toString();
57
+ });
58
+ proc.stderr?.on("data", (data) => {
59
+ stderr += data.toString();
60
+ });
61
+ proc.on("close", (code) => {
62
+ resolve({
63
+ stdout,
64
+ stderr,
65
+ exitCode: code || 0,
66
+ });
67
+ });
68
+ proc.on("error", reject);
69
+ // Timeout
70
+ setTimeout(() => {
71
+ proc.kill();
72
+ reject(new Error("Process timed out"));
73
+ }, 15000);
74
+ });
75
+ }
76
+ //# sourceMappingURL=runner-cli.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-cli.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/runner-cli.integration.test.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ describe("runAgent", () => {
27
27
  });
28
28
  it("should create a Claude runner with correct options (with default template)", async () => {
29
29
  await runAgent({
30
+ runner: "claude",
30
31
  model: "claude-sonnet-4-20250514",
31
32
  userInput: "Hello, world!",
32
33
  });
@@ -40,6 +41,7 @@ describe("runAgent", () => {
40
41
  });
41
42
  it("should pass optional parameters to runner (overriding template)", async () => {
42
43
  await runAgent({
44
+ runner: "claude",
43
45
  model: "claude-sonnet-4-20250514",
44
46
  userInput: "Hello, world!",
45
47
  systemPrompt: "You are a helpful assistant",
@@ -47,15 +49,16 @@ describe("runAgent", () => {
47
49
  allowedTools: ["bash", "write_file"],
48
50
  });
49
51
  // Explicit parameters override template values
50
- expect(createClaudeRunner).toHaveBeenCalledWith({
52
+ expect(createClaudeRunner).toHaveBeenCalledWith(expect.objectContaining({
51
53
  model: "claude-sonnet-4-20250514",
52
54
  systemPrompt: "You are a helpful assistant",
53
55
  maxTurns: 5,
54
56
  allowedTools: ["bash", "write_file"],
55
- });
57
+ }));
56
58
  });
57
59
  it("should stream output to stdout without modification", async () => {
58
60
  await runAgent({
61
+ runner: "claude",
59
62
  model: "claude-sonnet-4-20250514",
60
63
  userInput: "Hello, world!",
61
64
  });
@@ -70,10 +73,11 @@ describe("runAgent", () => {
70
73
  };
71
74
  vi.mocked(createClaudeRunner).mockReturnValue(mockRunner);
72
75
  await runAgent({
76
+ runner: "claude",
73
77
  model: "claude-sonnet-4-20250514",
74
78
  userInput: "Create a file",
75
79
  });
76
- expect(mockRunner.run).toHaveBeenCalledWith("Create a file", expect.any(AbortSignal));
80
+ expect(mockRunner.run).toHaveBeenCalledWith("Create a file");
77
81
  });
78
82
  });
79
83
  //# sourceMappingURL=runner.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../src/__tests__/runner.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../src/__tests__/runner.test.ts"],"names":[],"mappings":"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"}