@herdctl/core 1.3.0 → 2.0.0

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 (181) hide show
  1. package/dist/config/__tests__/agent.test.js +12 -12
  2. package/dist/config/__tests__/agent.test.js.map +1 -1
  3. package/dist/config/__tests__/loader.test.js +201 -4
  4. package/dist/config/__tests__/loader.test.js.map +1 -1
  5. package/dist/config/__tests__/merge.test.js +29 -4
  6. package/dist/config/__tests__/merge.test.js.map +1 -1
  7. package/dist/config/__tests__/parser.test.js +13 -13
  8. package/dist/config/__tests__/parser.test.js.map +1 -1
  9. package/dist/config/__tests__/schema.test.js +10 -10
  10. package/dist/config/__tests__/schema.test.js.map +1 -1
  11. package/dist/config/index.d.ts +1 -1
  12. package/dist/config/index.d.ts.map +1 -1
  13. package/dist/config/index.js +2 -2
  14. package/dist/config/index.js.map +1 -1
  15. package/dist/config/loader.d.ts.map +1 -1
  16. package/dist/config/loader.js +71 -0
  17. package/dist/config/loader.js.map +1 -1
  18. package/dist/config/merge.d.ts +4 -1
  19. package/dist/config/merge.d.ts.map +1 -1
  20. package/dist/config/merge.js +16 -0
  21. package/dist/config/merge.js.map +1 -1
  22. package/dist/config/schema.d.ts +906 -89
  23. package/dist/config/schema.d.ts.map +1 -1
  24. package/dist/config/schema.js +109 -7
  25. package/dist/config/schema.js.map +1 -1
  26. package/dist/fleet-manager/__tests__/coverage.test.js +25 -24
  27. package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
  28. package/dist/fleet-manager/__tests__/discord-manager.test.js +9 -2
  29. package/dist/fleet-manager/__tests__/discord-manager.test.js.map +1 -1
  30. package/dist/fleet-manager/__tests__/integration.test.js +27 -0
  31. package/dist/fleet-manager/__tests__/integration.test.js.map +1 -1
  32. package/dist/fleet-manager/__tests__/job-control.test.js +66 -0
  33. package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -1
  34. package/dist/fleet-manager/__tests__/status-queries.test.js +12 -11
  35. package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -1
  36. package/dist/fleet-manager/config-reload.js +9 -9
  37. package/dist/fleet-manager/config-reload.js.map +1 -1
  38. package/dist/fleet-manager/discord-manager.d.ts.map +1 -1
  39. package/dist/fleet-manager/discord-manager.js +27 -4
  40. package/dist/fleet-manager/discord-manager.js.map +1 -1
  41. package/dist/fleet-manager/fleet-manager.d.ts +11 -0
  42. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  43. package/dist/fleet-manager/fleet-manager.js +27 -0
  44. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  45. package/dist/fleet-manager/job-control.d.ts +1 -1
  46. package/dist/fleet-manager/job-control.d.ts.map +1 -1
  47. package/dist/fleet-manager/job-control.js +36 -14
  48. package/dist/fleet-manager/job-control.js.map +1 -1
  49. package/dist/fleet-manager/schedule-executor.d.ts +1 -1
  50. package/dist/fleet-manager/schedule-executor.d.ts.map +1 -1
  51. package/dist/fleet-manager/schedule-executor.js +11 -14
  52. package/dist/fleet-manager/schedule-executor.js.map +1 -1
  53. package/dist/fleet-manager/status-queries.js +7 -7
  54. package/dist/fleet-manager/status-queries.js.map +1 -1
  55. package/dist/fleet-manager/types.d.ts +10 -2
  56. package/dist/fleet-manager/types.d.ts.map +1 -1
  57. package/dist/fleet-manager/working-directory-helper.d.ts +29 -0
  58. package/dist/fleet-manager/working-directory-helper.d.ts.map +1 -0
  59. package/dist/fleet-manager/working-directory-helper.js +36 -0
  60. package/dist/fleet-manager/working-directory-helper.js.map +1 -0
  61. package/dist/index.d.ts +2 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/runner/__tests__/job-executor.test.js +449 -118
  66. package/dist/runner/__tests__/job-executor.test.js.map +1 -1
  67. package/dist/runner/__tests__/sdk-adapter.test.js +147 -23
  68. package/dist/runner/__tests__/sdk-adapter.test.js.map +1 -1
  69. package/dist/runner/index.d.ts +2 -0
  70. package/dist/runner/index.d.ts.map +1 -1
  71. package/dist/runner/index.js +1 -0
  72. package/dist/runner/index.js.map +1 -1
  73. package/dist/runner/job-executor.d.ts +12 -8
  74. package/dist/runner/job-executor.d.ts.map +1 -1
  75. package/dist/runner/job-executor.js +257 -126
  76. package/dist/runner/job-executor.js.map +1 -1
  77. package/dist/runner/runtime/__tests__/cli-session-path.test.d.ts +2 -0
  78. package/dist/runner/runtime/__tests__/cli-session-path.test.d.ts.map +1 -0
  79. package/dist/runner/runtime/__tests__/cli-session-path.test.js +150 -0
  80. package/dist/runner/runtime/__tests__/cli-session-path.test.js.map +1 -0
  81. package/dist/runner/runtime/__tests__/docker-config.test.d.ts +2 -0
  82. package/dist/runner/runtime/__tests__/docker-config.test.d.ts.map +1 -0
  83. package/dist/runner/runtime/__tests__/docker-config.test.js +352 -0
  84. package/dist/runner/runtime/__tests__/docker-config.test.js.map +1 -0
  85. package/dist/runner/runtime/__tests__/docker-security.test.d.ts +2 -0
  86. package/dist/runner/runtime/__tests__/docker-security.test.d.ts.map +1 -0
  87. package/dist/runner/runtime/__tests__/docker-security.test.js +384 -0
  88. package/dist/runner/runtime/__tests__/docker-security.test.js.map +1 -0
  89. package/dist/runner/runtime/__tests__/factory.test.d.ts +2 -0
  90. package/dist/runner/runtime/__tests__/factory.test.d.ts.map +1 -0
  91. package/dist/runner/runtime/__tests__/factory.test.js +149 -0
  92. package/dist/runner/runtime/__tests__/factory.test.js.map +1 -0
  93. package/dist/runner/runtime/__tests__/integration.test.d.ts +2 -0
  94. package/dist/runner/runtime/__tests__/integration.test.d.ts.map +1 -0
  95. package/dist/runner/runtime/__tests__/integration.test.js +274 -0
  96. package/dist/runner/runtime/__tests__/integration.test.js.map +1 -0
  97. package/dist/runner/runtime/cli-runtime.d.ts +107 -0
  98. package/dist/runner/runtime/cli-runtime.d.ts.map +1 -0
  99. package/dist/runner/runtime/cli-runtime.js +335 -0
  100. package/dist/runner/runtime/cli-runtime.js.map +1 -0
  101. package/dist/runner/runtime/cli-session-path.d.ts +108 -0
  102. package/dist/runner/runtime/cli-session-path.d.ts.map +1 -0
  103. package/dist/runner/runtime/cli-session-path.js +173 -0
  104. package/dist/runner/runtime/cli-session-path.js.map +1 -0
  105. package/dist/runner/runtime/cli-session-watcher.d.ts +55 -0
  106. package/dist/runner/runtime/cli-session-watcher.d.ts.map +1 -0
  107. package/dist/runner/runtime/cli-session-watcher.js +187 -0
  108. package/dist/runner/runtime/cli-session-watcher.js.map +1 -0
  109. package/dist/runner/runtime/container-manager.d.ts +76 -0
  110. package/dist/runner/runtime/container-manager.d.ts.map +1 -0
  111. package/dist/runner/runtime/container-manager.js +229 -0
  112. package/dist/runner/runtime/container-manager.js.map +1 -0
  113. package/dist/runner/runtime/container-runner.d.ts +62 -0
  114. package/dist/runner/runtime/container-runner.d.ts.map +1 -0
  115. package/dist/runner/runtime/container-runner.js +235 -0
  116. package/dist/runner/runtime/container-runner.js.map +1 -0
  117. package/dist/runner/runtime/docker-config.d.ts +100 -0
  118. package/dist/runner/runtime/docker-config.d.ts.map +1 -0
  119. package/dist/runner/runtime/docker-config.js +98 -0
  120. package/dist/runner/runtime/docker-config.js.map +1 -0
  121. package/dist/runner/runtime/factory.d.ts +63 -0
  122. package/dist/runner/runtime/factory.d.ts.map +1 -0
  123. package/dist/runner/runtime/factory.js +68 -0
  124. package/dist/runner/runtime/factory.js.map +1 -0
  125. package/dist/runner/runtime/index.d.ts +20 -0
  126. package/dist/runner/runtime/index.d.ts.map +1 -0
  127. package/dist/runner/runtime/index.js +21 -0
  128. package/dist/runner/runtime/index.js.map +1 -0
  129. package/dist/runner/runtime/interface.d.ts +59 -0
  130. package/dist/runner/runtime/interface.d.ts.map +1 -0
  131. package/dist/runner/runtime/interface.js +12 -0
  132. package/dist/runner/runtime/interface.js.map +1 -0
  133. package/dist/runner/runtime/sdk-runtime.d.ts +46 -0
  134. package/dist/runner/runtime/sdk-runtime.d.ts.map +1 -0
  135. package/dist/runner/runtime/sdk-runtime.js +63 -0
  136. package/dist/runner/runtime/sdk-runtime.js.map +1 -0
  137. package/dist/runner/sdk-adapter.d.ts +4 -0
  138. package/dist/runner/sdk-adapter.d.ts.map +1 -1
  139. package/dist/runner/sdk-adapter.js +35 -16
  140. package/dist/runner/sdk-adapter.js.map +1 -1
  141. package/dist/runner/types.d.ts +12 -6
  142. package/dist/runner/types.d.ts.map +1 -1
  143. package/dist/scheduler/__tests__/schedule-runner.test.js +61 -50
  144. package/dist/scheduler/__tests__/schedule-runner.test.js.map +1 -1
  145. package/dist/scheduler/schedule-runner.d.ts +1 -4
  146. package/dist/scheduler/schedule-runner.d.ts.map +1 -1
  147. package/dist/scheduler/schedule-runner.js +40 -8
  148. package/dist/scheduler/schedule-runner.js.map +1 -1
  149. package/dist/state/__tests__/session-schema.test.js +4 -0
  150. package/dist/state/__tests__/session-schema.test.js.map +1 -1
  151. package/dist/state/__tests__/session-validation.test.d.ts +2 -0
  152. package/dist/state/__tests__/session-validation.test.d.ts.map +1 -0
  153. package/dist/state/__tests__/session-validation.test.js +446 -0
  154. package/dist/state/__tests__/session-validation.test.js.map +1 -0
  155. package/dist/state/__tests__/session.test.js +68 -0
  156. package/dist/state/__tests__/session.test.js.map +1 -1
  157. package/dist/state/__tests__/working-directory-validation.test.d.ts +5 -0
  158. package/dist/state/__tests__/working-directory-validation.test.d.ts.map +1 -0
  159. package/dist/state/__tests__/working-directory-validation.test.js +101 -0
  160. package/dist/state/__tests__/working-directory-validation.test.js.map +1 -0
  161. package/dist/state/index.d.ts +2 -0
  162. package/dist/state/index.d.ts.map +1 -1
  163. package/dist/state/index.js +4 -0
  164. package/dist/state/index.js.map +1 -1
  165. package/dist/state/schemas/session-info.d.ts +32 -0
  166. package/dist/state/schemas/session-info.d.ts.map +1 -1
  167. package/dist/state/schemas/session-info.js +22 -0
  168. package/dist/state/schemas/session-info.js.map +1 -1
  169. package/dist/state/session-validation.d.ts +202 -0
  170. package/dist/state/session-validation.d.ts.map +1 -0
  171. package/dist/state/session-validation.js +407 -0
  172. package/dist/state/session-validation.js.map +1 -0
  173. package/dist/state/session.d.ts +23 -3
  174. package/dist/state/session.d.ts.map +1 -1
  175. package/dist/state/session.js +41 -6
  176. package/dist/state/session.js.map +1 -1
  177. package/dist/state/working-directory-validation.d.ts +52 -0
  178. package/dist/state/working-directory-validation.d.ts.map +1 -0
  179. package/dist/state/working-directory-validation.js +81 -0
  180. package/dist/state/working-directory-validation.js.map +1 -0
  181. package/package.json +7 -2
@@ -0,0 +1,274 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { execSync } from "node:child_process";
3
+ import { mkdir, rm, realpath } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { tmpdir } from "node:os";
6
+ import { RuntimeFactory } from "../factory.js";
7
+ // =============================================================================
8
+ // Environment Detection
9
+ // =============================================================================
10
+ function isCliAvailable() {
11
+ try {
12
+ execSync("claude --version", { stdio: "ignore" });
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ function isDockerAvailable() {
20
+ try {
21
+ execSync("docker info", { stdio: "ignore" });
22
+ return true;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ const CLI_AVAILABLE = isCliAvailable();
29
+ const DOCKER_AVAILABLE = isDockerAvailable();
30
+ // =============================================================================
31
+ // Test Helpers
32
+ // =============================================================================
33
+ async function createTempDir() {
34
+ const baseDir = join(tmpdir(), `herdctl-runtime-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
35
+ await mkdir(baseDir, { recursive: true });
36
+ return await realpath(baseDir);
37
+ }
38
+ function createTestAgent(overrides = {}) {
39
+ return {
40
+ name: "test-agent",
41
+ configPath: "/path/to/agent.yaml",
42
+ ...overrides,
43
+ };
44
+ }
45
+ // =============================================================================
46
+ // RuntimeFactory Integration Tests
47
+ // =============================================================================
48
+ describe("RuntimeFactory Integration", () => {
49
+ let tempDir;
50
+ beforeEach(async () => {
51
+ tempDir = await createTempDir();
52
+ });
53
+ afterEach(async () => {
54
+ await rm(tempDir, { recursive: true, force: true });
55
+ });
56
+ describe("SDK Runtime", () => {
57
+ it("creates SDK runtime and returns RuntimeInterface", () => {
58
+ const agent = createTestAgent({ runtime: "sdk" });
59
+ const runtime = RuntimeFactory.create(agent);
60
+ expect(runtime).toBeDefined();
61
+ expect(runtime.execute).toBeDefined();
62
+ expect(typeof runtime.execute).toBe("function");
63
+ });
64
+ it("SDK runtime has correct constructor name", () => {
65
+ const agent = createTestAgent({ runtime: "sdk" });
66
+ const runtime = RuntimeFactory.create(agent);
67
+ // Verify it's actually an SDK runtime (not wrapped)
68
+ expect(runtime.constructor.name).toBe("SDKRuntime");
69
+ });
70
+ it("SDK runtime execute returns AsyncIterable interface", async () => {
71
+ const agent = createTestAgent({ runtime: "sdk" });
72
+ const runtime = RuntimeFactory.create(agent);
73
+ // Verify the method signature is correct
74
+ // We can't fully test without mocking SDK internals
75
+ // but we verify the interface is correct
76
+ expect(runtime.execute).toBeDefined();
77
+ expect(typeof runtime.execute).toBe("function");
78
+ });
79
+ it("defaults to SDK runtime when runtime not specified", () => {
80
+ const agent = createTestAgent(); // No runtime specified
81
+ const runtime = RuntimeFactory.create(agent);
82
+ expect(runtime.constructor.name).toBe("SDKRuntime");
83
+ });
84
+ });
85
+ describe("CLI Runtime", () => {
86
+ it.skipIf(!CLI_AVAILABLE)("creates CLI runtime with correct interface", () => {
87
+ const agent = createTestAgent({ runtime: "cli" });
88
+ const runtime = RuntimeFactory.create(agent);
89
+ expect(runtime).toBeDefined();
90
+ expect(runtime.execute).toBeDefined();
91
+ expect(typeof runtime.execute).toBe("function");
92
+ });
93
+ it.skipIf(!CLI_AVAILABLE)("CLI runtime has correct constructor name", () => {
94
+ const agent = createTestAgent({ runtime: "cli" });
95
+ const runtime = RuntimeFactory.create(agent);
96
+ // Note: Full CLI integration would require actual claude execution
97
+ // which uses API credits. This test verifies setup only.
98
+ expect(runtime.constructor.name).toBe("CLIRuntime");
99
+ });
100
+ it.skipIf(!CLI_AVAILABLE)("CLI runtime accepts workspace parameter", () => {
101
+ const agent = createTestAgent({ runtime: "cli" });
102
+ const runtime = RuntimeFactory.create(agent);
103
+ // Verify runtime can be created with workspace configuration
104
+ expect(runtime).toBeDefined();
105
+ });
106
+ });
107
+ describe("Docker Runtime", () => {
108
+ it.skipIf(!DOCKER_AVAILABLE)("wraps SDK with ContainerRunner when docker enabled", () => {
109
+ const agent = createTestAgent({
110
+ runtime: "sdk",
111
+ docker: {
112
+ enabled: true,
113
+ image: "alpine:latest",
114
+ },
115
+ });
116
+ const runtime = RuntimeFactory.create(agent, { stateDir: tempDir });
117
+ // Verify it's wrapped (ContainerRunner wraps the base runtime)
118
+ expect(runtime.constructor.name).toBe("ContainerRunner");
119
+ });
120
+ it.skipIf(!DOCKER_AVAILABLE)("wraps CLI with ContainerRunner when docker enabled", () => {
121
+ const agent = createTestAgent({
122
+ runtime: "cli",
123
+ docker: {
124
+ enabled: true,
125
+ image: "alpine:latest",
126
+ },
127
+ });
128
+ const runtime = RuntimeFactory.create(agent, { stateDir: tempDir });
129
+ expect(runtime.constructor.name).toBe("ContainerRunner");
130
+ });
131
+ it.skipIf(!DOCKER_AVAILABLE)("creates docker-sessions directory in stateDir", async () => {
132
+ const stateDir = join(tempDir, ".herdctl");
133
+ await mkdir(stateDir, { recursive: true });
134
+ const agent = createTestAgent({
135
+ docker: {
136
+ enabled: true,
137
+ image: "alpine:latest",
138
+ },
139
+ });
140
+ // Just verify RuntimeFactory accepts stateDir
141
+ const runtime = RuntimeFactory.create(agent, { stateDir });
142
+ expect(runtime).toBeDefined();
143
+ });
144
+ it.skipIf(!DOCKER_AVAILABLE)("defaults stateDir to .herdctl when not provided", () => {
145
+ const agent = createTestAgent({
146
+ docker: {
147
+ enabled: true,
148
+ image: "alpine:latest",
149
+ },
150
+ });
151
+ // Should not throw even without stateDir (uses default)
152
+ const runtime = RuntimeFactory.create(agent);
153
+ expect(runtime).toBeDefined();
154
+ });
155
+ });
156
+ });
157
+ // =============================================================================
158
+ // Path Translation Tests
159
+ // =============================================================================
160
+ describe("Path Translation", () => {
161
+ let tempDir;
162
+ beforeEach(async () => {
163
+ tempDir = await createTempDir();
164
+ });
165
+ afterEach(async () => {
166
+ await rm(tempDir, { recursive: true, force: true });
167
+ });
168
+ it("workspace paths are consistent across runtime types", () => {
169
+ const workspace = join(tempDir, "workspace");
170
+ // SDK runtime uses workspace directly
171
+ const sdkAgent = createTestAgent({ runtime: "sdk" });
172
+ const sdkRuntime = RuntimeFactory.create(sdkAgent);
173
+ // CLI runtime also uses workspace directly (but different session storage)
174
+ const cliAgent = createTestAgent({ runtime: "cli" });
175
+ const cliRuntime = RuntimeFactory.create(cliAgent);
176
+ // Both should accept the same workspace path
177
+ expect(sdkRuntime).toBeDefined();
178
+ expect(cliRuntime).toBeDefined();
179
+ });
180
+ it.skipIf(!DOCKER_AVAILABLE)("Docker sessions stored separately from host sessions", async () => {
181
+ const stateDir = join(tempDir, ".herdctl");
182
+ await mkdir(stateDir, { recursive: true });
183
+ const agent = createTestAgent({
184
+ docker: {
185
+ enabled: true,
186
+ image: "alpine:latest",
187
+ },
188
+ });
189
+ const runtime = RuntimeFactory.create(agent, { stateDir });
190
+ // Docker sessions should go to docker-sessions/, not sessions/
191
+ // This is verified by the ContainerRunner implementation
192
+ expect(runtime).toBeDefined();
193
+ });
194
+ it("workspace can be specified as string", () => {
195
+ const agent = createTestAgent({
196
+ runtime: "sdk",
197
+ working_directory: "/path/to/workspace",
198
+ });
199
+ const runtime = RuntimeFactory.create(agent);
200
+ expect(runtime).toBeDefined();
201
+ });
202
+ it("workspace can be specified as object with root", () => {
203
+ const agent = createTestAgent({
204
+ runtime: "sdk",
205
+ working_directory: {
206
+ root: "/path/to/workspace",
207
+ auto_clone: true,
208
+ clone_depth: 1,
209
+ default_branch: "main",
210
+ },
211
+ });
212
+ const runtime = RuntimeFactory.create(agent);
213
+ expect(runtime).toBeDefined();
214
+ });
215
+ });
216
+ // =============================================================================
217
+ // Error Handling Tests
218
+ // =============================================================================
219
+ describe("Runtime Error Handling", () => {
220
+ it("throws for invalid runtime type", () => {
221
+ const agent = createTestAgent({ runtime: "invalid" });
222
+ expect(() => RuntimeFactory.create(agent)).toThrow(/Unknown runtime type/);
223
+ });
224
+ it("includes helpful message for unknown runtime", () => {
225
+ const agent = createTestAgent({ runtime: "postgres" });
226
+ expect(() => RuntimeFactory.create(agent)).toThrow(/Supported types/);
227
+ });
228
+ it("error message lists supported runtime types", () => {
229
+ const agent = createTestAgent({ runtime: "invalid" });
230
+ try {
231
+ RuntimeFactory.create(agent);
232
+ expect.fail("Should have thrown");
233
+ }
234
+ catch (error) {
235
+ const message = error.message;
236
+ expect(message).toContain("sdk");
237
+ expect(message).toContain("cli");
238
+ }
239
+ });
240
+ });
241
+ // =============================================================================
242
+ // Runtime Interface Compliance Tests
243
+ // =============================================================================
244
+ describe("Runtime Interface Compliance", () => {
245
+ it("all runtimes expose execute method", () => {
246
+ const sdkAgent = createTestAgent({ runtime: "sdk" });
247
+ const sdkRuntime = RuntimeFactory.create(sdkAgent);
248
+ expect(sdkRuntime.execute).toBeDefined();
249
+ expect(typeof sdkRuntime.execute).toBe("function");
250
+ if (CLI_AVAILABLE) {
251
+ const cliAgent = createTestAgent({ runtime: "cli" });
252
+ const cliRuntime = RuntimeFactory.create(cliAgent);
253
+ expect(cliRuntime.execute).toBeDefined();
254
+ expect(typeof cliRuntime.execute).toBe("function");
255
+ }
256
+ });
257
+ it("ContainerRunner preserves RuntimeInterface", () => {
258
+ if (!DOCKER_AVAILABLE) {
259
+ return;
260
+ }
261
+ const agent = createTestAgent({
262
+ runtime: "sdk",
263
+ docker: {
264
+ enabled: true,
265
+ image: "alpine:latest",
266
+ },
267
+ });
268
+ const runtime = RuntimeFactory.create(agent);
269
+ // ContainerRunner should still expose execute
270
+ expect(runtime.execute).toBeDefined();
271
+ expect(typeof runtime.execute).toBe("function");
272
+ });
273
+ });
274
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../../src/runner/runtime/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * CLI Runtime implementation
3
+ *
4
+ * Executes Claude agents via the Claude CLI instead of the SDK, enabling Max plan
5
+ * pricing for agent execution. This runtime spawns the `claude` CLI command and
6
+ * watches the session file for messages (since claude only outputs to TTY).
7
+ *
8
+ * Requirements:
9
+ * - Claude CLI must be installed (`brew install claude-ai/tap/claude`)
10
+ * - CLI must be authenticated (`claude login`)
11
+ * - Uses Max plan pricing when available
12
+ *
13
+ * The CLIRuntime provides identical streaming interface to SDKRuntime, allowing
14
+ * seamless runtime switching via agent configuration.
15
+ */
16
+ import { type Subprocess } from "execa";
17
+ import type { RuntimeInterface, RuntimeExecuteOptions } from "./interface.js";
18
+ import type { SDKMessage } from "../types.js";
19
+ /**
20
+ * Process spawner function type
21
+ *
22
+ * Spawns a claude CLI process and returns a subprocess handle.
23
+ * Used to allow custom process spawning (e.g., inside Docker containers).
24
+ *
25
+ * Returns Subprocess directly (not wrapped in Promise) - execa returns
26
+ * a special promise-like object (Subprocess) that has extra properties.
27
+ *
28
+ * @param args - CLI arguments (without prompt)
29
+ * @param cwd - Working directory
30
+ * @param prompt - Prompt text to provide via stdin (required for -p mode)
31
+ * @param signal - AbortSignal for cancellation
32
+ */
33
+ export type ProcessSpawner = (args: string[], cwd: string, prompt: string, signal?: AbortSignal) => Subprocess;
34
+ /**
35
+ * CLI runtime configuration options
36
+ */
37
+ export interface CLIRuntimeOptions {
38
+ /**
39
+ * Custom process spawner for claude CLI execution
40
+ *
41
+ * Defaults to local execa spawning. Provide custom spawner for Docker execution.
42
+ */
43
+ processSpawner?: ProcessSpawner;
44
+ /**
45
+ * Custom session directory override
46
+ *
47
+ * For Docker execution, this should be the host-side mount point where
48
+ * container session files are visible (e.g., .herdctl/docker-sessions).
49
+ */
50
+ sessionDirOverride?: string;
51
+ }
52
+ /**
53
+ * CLI runtime implementation
54
+ *
55
+ * This runtime uses the Claude CLI to execute agents, providing an alternative
56
+ * backend to the SDK runtime. It spawns `claude` CLI and watches the session file
57
+ * for new messages (since claude only outputs stream-json to TTY).
58
+ *
59
+ * The CLI runtime enables:
60
+ * - Max plan pricing (cost savings vs SDK/API pricing)
61
+ * - Full Claude Code capabilities (identical to manual CLI usage)
62
+ * - AbortController support for process cancellation
63
+ *
64
+ * Supports both local and Docker execution via configurable process spawning.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * // Local execution
69
+ * const runtime = new CLIRuntime();
70
+ *
71
+ * // Docker execution
72
+ * const runtime = new CLIRuntime({
73
+ * processSpawner: async (args, cwd, signal) => {
74
+ * return execa("docker", ["exec", containerId, "sh", "-c",
75
+ * `cd /workspace && claude ${args.join(" ")}`],
76
+ * { cancelSignal: signal });
77
+ * },
78
+ * sessionDirOverride: "/path/to/.herdctl/docker-sessions"
79
+ * });
80
+ * ```
81
+ */
82
+ export declare class CLIRuntime implements RuntimeInterface {
83
+ private processSpawner;
84
+ private sessionDirOverride?;
85
+ constructor(options?: CLIRuntimeOptions);
86
+ /**
87
+ * Execute an agent using the Claude CLI
88
+ *
89
+ * Spawns `claude` CLI and watches the session file for messages. The session
90
+ * file approach is used because claude only outputs stream-json to TTY, not
91
+ * to pipes.
92
+ *
93
+ * Process flow:
94
+ * 1. Build CLI arguments from execution options
95
+ * 2. Spawn claude subprocess (output is ignored)
96
+ * 3. Find the CLI session directory for the workspace
97
+ * 4. Wait briefly for session file to be created
98
+ * 5. Find the newest .jsonl file (the one just created)
99
+ * 6. Watch that file and stream messages as they're appended
100
+ * 7. Handle process completion and exit codes
101
+ *
102
+ * @param options - Execution options including prompt, agent, and session info
103
+ * @returns AsyncIterable of SDK messages
104
+ */
105
+ execute(options: RuntimeExecuteOptions): AsyncIterable<SDKMessage>;
106
+ }
107
+ //# sourceMappingURL=cli-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runtime.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime/cli-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,KACjB,UAAU,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,UAAW,YAAW,gBAAgB;IACjD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAS;gBAExB,OAAO,CAAC,EAAE,iBAAiB;IAYvC;;;;;;;;;;;;;;;;;;OAkBG;IACI,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,UAAU,CAAC;CAoT1E"}