@kynetic-ai/spec 0.1.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 (278) hide show
  1. package/README.md +263 -0
  2. package/dist/acp/client.d.ts +159 -0
  3. package/dist/acp/client.d.ts.map +1 -0
  4. package/dist/acp/client.js +255 -0
  5. package/dist/acp/client.js.map +1 -0
  6. package/dist/acp/framing.d.ts +119 -0
  7. package/dist/acp/framing.d.ts.map +1 -0
  8. package/dist/acp/framing.js +302 -0
  9. package/dist/acp/framing.js.map +1 -0
  10. package/dist/acp/index.d.ts +14 -0
  11. package/dist/acp/index.d.ts.map +1 -0
  12. package/dist/acp/index.js +13 -0
  13. package/dist/acp/index.js.map +1 -0
  14. package/dist/acp/types.d.ts +89 -0
  15. package/dist/acp/types.d.ts.map +1 -0
  16. package/dist/acp/types.js +99 -0
  17. package/dist/acp/types.js.map +1 -0
  18. package/dist/agents/adapters.d.ts +55 -0
  19. package/dist/agents/adapters.d.ts.map +1 -0
  20. package/dist/agents/adapters.js +84 -0
  21. package/dist/agents/adapters.js.map +1 -0
  22. package/dist/agents/index.d.ts +8 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +10 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/spawner.d.ts +53 -0
  27. package/dist/agents/spawner.d.ts.map +1 -0
  28. package/dist/agents/spawner.js +83 -0
  29. package/dist/agents/spawner.js.map +1 -0
  30. package/dist/cli/batch.d.ts +82 -0
  31. package/dist/cli/batch.d.ts.map +1 -0
  32. package/dist/cli/batch.js +162 -0
  33. package/dist/cli/batch.js.map +1 -0
  34. package/dist/cli/commands/clone-for-testing.d.ts +6 -0
  35. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
  36. package/dist/cli/commands/clone-for-testing.js +176 -0
  37. package/dist/cli/commands/clone-for-testing.js.map +1 -0
  38. package/dist/cli/commands/derive.d.ts +6 -0
  39. package/dist/cli/commands/derive.d.ts.map +1 -0
  40. package/dist/cli/commands/derive.js +450 -0
  41. package/dist/cli/commands/derive.js.map +1 -0
  42. package/dist/cli/commands/help.d.ts +6 -0
  43. package/dist/cli/commands/help.d.ts.map +1 -0
  44. package/dist/cli/commands/help.js +196 -0
  45. package/dist/cli/commands/help.js.map +1 -0
  46. package/dist/cli/commands/inbox.d.ts +6 -0
  47. package/dist/cli/commands/inbox.d.ts.map +1 -0
  48. package/dist/cli/commands/inbox.js +235 -0
  49. package/dist/cli/commands/inbox.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +20 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +21 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +245 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/item.d.ts +6 -0
  59. package/dist/cli/commands/item.d.ts.map +1 -0
  60. package/dist/cli/commands/item.js +1311 -0
  61. package/dist/cli/commands/item.js.map +1 -0
  62. package/dist/cli/commands/link.d.ts +6 -0
  63. package/dist/cli/commands/link.d.ts.map +1 -0
  64. package/dist/cli/commands/link.js +288 -0
  65. package/dist/cli/commands/link.js.map +1 -0
  66. package/dist/cli/commands/log.d.ts +16 -0
  67. package/dist/cli/commands/log.d.ts.map +1 -0
  68. package/dist/cli/commands/log.js +291 -0
  69. package/dist/cli/commands/log.js.map +1 -0
  70. package/dist/cli/commands/meta.d.ts +15 -0
  71. package/dist/cli/commands/meta.d.ts.map +1 -0
  72. package/dist/cli/commands/meta.js +1378 -0
  73. package/dist/cli/commands/meta.js.map +1 -0
  74. package/dist/cli/commands/module.d.ts +6 -0
  75. package/dist/cli/commands/module.d.ts.map +1 -0
  76. package/dist/cli/commands/module.js +102 -0
  77. package/dist/cli/commands/module.js.map +1 -0
  78. package/dist/cli/commands/ralph.d.ts +9 -0
  79. package/dist/cli/commands/ralph.d.ts.map +1 -0
  80. package/dist/cli/commands/ralph.js +465 -0
  81. package/dist/cli/commands/ralph.js.map +1 -0
  82. package/dist/cli/commands/search.d.ts +6 -0
  83. package/dist/cli/commands/search.d.ts.map +1 -0
  84. package/dist/cli/commands/search.js +134 -0
  85. package/dist/cli/commands/search.js.map +1 -0
  86. package/dist/cli/commands/session.d.ts +164 -0
  87. package/dist/cli/commands/session.d.ts.map +1 -0
  88. package/dist/cli/commands/session.js +745 -0
  89. package/dist/cli/commands/session.js.map +1 -0
  90. package/dist/cli/commands/setup.d.ts +26 -0
  91. package/dist/cli/commands/setup.d.ts.map +1 -0
  92. package/dist/cli/commands/setup.js +586 -0
  93. package/dist/cli/commands/setup.js.map +1 -0
  94. package/dist/cli/commands/shadow.d.ts +6 -0
  95. package/dist/cli/commands/shadow.d.ts.map +1 -0
  96. package/dist/cli/commands/shadow.js +299 -0
  97. package/dist/cli/commands/shadow.js.map +1 -0
  98. package/dist/cli/commands/task.d.ts +6 -0
  99. package/dist/cli/commands/task.d.ts.map +1 -0
  100. package/dist/cli/commands/task.js +1514 -0
  101. package/dist/cli/commands/task.js.map +1 -0
  102. package/dist/cli/commands/tasks.d.ts +6 -0
  103. package/dist/cli/commands/tasks.d.ts.map +1 -0
  104. package/dist/cli/commands/tasks.js +347 -0
  105. package/dist/cli/commands/tasks.js.map +1 -0
  106. package/dist/cli/commands/trait.d.ts +10 -0
  107. package/dist/cli/commands/trait.d.ts.map +1 -0
  108. package/dist/cli/commands/trait.js +295 -0
  109. package/dist/cli/commands/trait.js.map +1 -0
  110. package/dist/cli/commands/validate.d.ts +6 -0
  111. package/dist/cli/commands/validate.d.ts.map +1 -0
  112. package/dist/cli/commands/validate.js +626 -0
  113. package/dist/cli/commands/validate.js.map +1 -0
  114. package/dist/cli/exit-codes.d.ts +62 -0
  115. package/dist/cli/exit-codes.d.ts.map +1 -0
  116. package/dist/cli/exit-codes.js +65 -0
  117. package/dist/cli/exit-codes.js.map +1 -0
  118. package/dist/cli/help/content.d.ts +35 -0
  119. package/dist/cli/help/content.d.ts.map +1 -0
  120. package/dist/cli/help/content.js +312 -0
  121. package/dist/cli/help/content.js.map +1 -0
  122. package/dist/cli/index.d.ts +5 -0
  123. package/dist/cli/index.d.ts.map +1 -0
  124. package/dist/cli/index.js +85 -0
  125. package/dist/cli/index.js.map +1 -0
  126. package/dist/cli/introspection.d.ts +87 -0
  127. package/dist/cli/introspection.d.ts.map +1 -0
  128. package/dist/cli/introspection.js +127 -0
  129. package/dist/cli/introspection.js.map +1 -0
  130. package/dist/cli/output.d.ts +56 -0
  131. package/dist/cli/output.d.ts.map +1 -0
  132. package/dist/cli/output.js +467 -0
  133. package/dist/cli/output.js.map +1 -0
  134. package/dist/cli/suggest.d.ts +16 -0
  135. package/dist/cli/suggest.d.ts.map +1 -0
  136. package/dist/cli/suggest.js +72 -0
  137. package/dist/cli/suggest.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +5 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/parser/alignment.d.ts +113 -0
  143. package/dist/parser/alignment.d.ts.map +1 -0
  144. package/dist/parser/alignment.js +261 -0
  145. package/dist/parser/alignment.js.map +1 -0
  146. package/dist/parser/assess.d.ts +81 -0
  147. package/dist/parser/assess.d.ts.map +1 -0
  148. package/dist/parser/assess.js +197 -0
  149. package/dist/parser/assess.js.map +1 -0
  150. package/dist/parser/convention-validation.d.ts +48 -0
  151. package/dist/parser/convention-validation.d.ts.map +1 -0
  152. package/dist/parser/convention-validation.js +167 -0
  153. package/dist/parser/convention-validation.js.map +1 -0
  154. package/dist/parser/fix.d.ts +38 -0
  155. package/dist/parser/fix.d.ts.map +1 -0
  156. package/dist/parser/fix.js +185 -0
  157. package/dist/parser/fix.js.map +1 -0
  158. package/dist/parser/index.d.ts +12 -0
  159. package/dist/parser/index.d.ts.map +1 -0
  160. package/dist/parser/index.js +13 -0
  161. package/dist/parser/index.js.map +1 -0
  162. package/dist/parser/items.d.ts +138 -0
  163. package/dist/parser/items.d.ts.map +1 -0
  164. package/dist/parser/items.js +321 -0
  165. package/dist/parser/items.js.map +1 -0
  166. package/dist/parser/meta.d.ts +120 -0
  167. package/dist/parser/meta.d.ts.map +1 -0
  168. package/dist/parser/meta.js +441 -0
  169. package/dist/parser/meta.js.map +1 -0
  170. package/dist/parser/refs.d.ts +185 -0
  171. package/dist/parser/refs.d.ts.map +1 -0
  172. package/dist/parser/refs.js +404 -0
  173. package/dist/parser/refs.js.map +1 -0
  174. package/dist/parser/shadow.d.ts +253 -0
  175. package/dist/parser/shadow.d.ts.map +1 -0
  176. package/dist/parser/shadow.js +1053 -0
  177. package/dist/parser/shadow.js.map +1 -0
  178. package/dist/parser/traits.d.ts +72 -0
  179. package/dist/parser/traits.d.ts.map +1 -0
  180. package/dist/parser/traits.js +120 -0
  181. package/dist/parser/traits.js.map +1 -0
  182. package/dist/parser/validate.d.ts +89 -0
  183. package/dist/parser/validate.d.ts.map +1 -0
  184. package/dist/parser/validate.js +817 -0
  185. package/dist/parser/validate.js.map +1 -0
  186. package/dist/parser/yaml.d.ts +326 -0
  187. package/dist/parser/yaml.d.ts.map +1 -0
  188. package/dist/parser/yaml.js +1383 -0
  189. package/dist/parser/yaml.js.map +1 -0
  190. package/dist/ralph/cli-renderer.d.ts +20 -0
  191. package/dist/ralph/cli-renderer.d.ts.map +1 -0
  192. package/dist/ralph/cli-renderer.js +179 -0
  193. package/dist/ralph/cli-renderer.js.map +1 -0
  194. package/dist/ralph/events.d.ts +65 -0
  195. package/dist/ralph/events.d.ts.map +1 -0
  196. package/dist/ralph/events.js +397 -0
  197. package/dist/ralph/events.js.map +1 -0
  198. package/dist/ralph/index.d.ts +8 -0
  199. package/dist/ralph/index.d.ts.map +1 -0
  200. package/dist/ralph/index.js +10 -0
  201. package/dist/ralph/index.js.map +1 -0
  202. package/dist/schema/common.d.ts +46 -0
  203. package/dist/schema/common.d.ts.map +1 -0
  204. package/dist/schema/common.js +71 -0
  205. package/dist/schema/common.js.map +1 -0
  206. package/dist/schema/inbox.d.ts +90 -0
  207. package/dist/schema/inbox.d.ts.map +1 -0
  208. package/dist/schema/inbox.js +30 -0
  209. package/dist/schema/inbox.js.map +1 -0
  210. package/dist/schema/index.d.ts +6 -0
  211. package/dist/schema/index.d.ts.map +1 -0
  212. package/dist/schema/index.js +7 -0
  213. package/dist/schema/index.js.map +1 -0
  214. package/dist/schema/meta.d.ts +762 -0
  215. package/dist/schema/meta.d.ts.map +1 -0
  216. package/dist/schema/meta.js +144 -0
  217. package/dist/schema/meta.js.map +1 -0
  218. package/dist/schema/spec.d.ts +912 -0
  219. package/dist/schema/spec.d.ts.map +1 -0
  220. package/dist/schema/spec.js +104 -0
  221. package/dist/schema/spec.js.map +1 -0
  222. package/dist/schema/task.d.ts +664 -0
  223. package/dist/schema/task.d.ts.map +1 -0
  224. package/dist/schema/task.js +130 -0
  225. package/dist/schema/task.js.map +1 -0
  226. package/dist/sessions/index.d.ts +11 -0
  227. package/dist/sessions/index.d.ts.map +1 -0
  228. package/dist/sessions/index.js +13 -0
  229. package/dist/sessions/index.js.map +1 -0
  230. package/dist/sessions/store.d.ts +144 -0
  231. package/dist/sessions/store.d.ts.map +1 -0
  232. package/dist/sessions/store.js +325 -0
  233. package/dist/sessions/store.js.map +1 -0
  234. package/dist/sessions/types.d.ts +157 -0
  235. package/dist/sessions/types.d.ts.map +1 -0
  236. package/dist/sessions/types.js +90 -0
  237. package/dist/sessions/types.js.map +1 -0
  238. package/dist/strings/errors.d.ts +420 -0
  239. package/dist/strings/errors.d.ts.map +1 -0
  240. package/dist/strings/errors.js +282 -0
  241. package/dist/strings/errors.js.map +1 -0
  242. package/dist/strings/guidance.d.ts +65 -0
  243. package/dist/strings/guidance.d.ts.map +1 -0
  244. package/dist/strings/guidance.js +66 -0
  245. package/dist/strings/guidance.js.map +1 -0
  246. package/dist/strings/index.d.ts +12 -0
  247. package/dist/strings/index.d.ts.map +1 -0
  248. package/dist/strings/index.js +12 -0
  249. package/dist/strings/index.js.map +1 -0
  250. package/dist/strings/labels.d.ts +74 -0
  251. package/dist/strings/labels.d.ts.map +1 -0
  252. package/dist/strings/labels.js +75 -0
  253. package/dist/strings/labels.js.map +1 -0
  254. package/dist/strings/validation.d.ts +126 -0
  255. package/dist/strings/validation.d.ts.map +1 -0
  256. package/dist/strings/validation.js +135 -0
  257. package/dist/strings/validation.js.map +1 -0
  258. package/dist/utils/commit.d.ts +23 -0
  259. package/dist/utils/commit.d.ts.map +1 -0
  260. package/dist/utils/commit.js +67 -0
  261. package/dist/utils/commit.js.map +1 -0
  262. package/dist/utils/git.d.ts +57 -0
  263. package/dist/utils/git.d.ts.map +1 -0
  264. package/dist/utils/git.js +192 -0
  265. package/dist/utils/git.js.map +1 -0
  266. package/dist/utils/grep.d.ts +28 -0
  267. package/dist/utils/grep.d.ts.map +1 -0
  268. package/dist/utils/grep.js +86 -0
  269. package/dist/utils/grep.js.map +1 -0
  270. package/dist/utils/index.d.ts +8 -0
  271. package/dist/utils/index.d.ts.map +1 -0
  272. package/dist/utils/index.js +6 -0
  273. package/dist/utils/index.js.map +1 -0
  274. package/dist/utils/time.d.ts +18 -0
  275. package/dist/utils/time.d.ts.map +1 -0
  276. package/dist/utils/time.js +61 -0
  277. package/dist/utils/time.js.map +1 -0
  278. package/package.json +62 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Agent adapter registry.
3
+ *
4
+ * Adapters define how to spawn and communicate with different ACP-compliant agents.
5
+ * Each adapter specifies the command, args, and optional configuration.
6
+ */
7
+ /**
8
+ * Adapter definition for spawning ACP agents.
9
+ */
10
+ export interface AgentAdapter {
11
+ /** Command to execute (e.g., 'npx', 'node') */
12
+ command: string;
13
+ /** Arguments to pass to the command */
14
+ args: string[];
15
+ /** Environment variables to set */
16
+ env?: Record<string, string>;
17
+ /** Whether to use shell (needed for npx on Windows) */
18
+ shell?: boolean;
19
+ /** Human-readable description */
20
+ description?: string;
21
+ }
22
+ /**
23
+ * Get an adapter by ID.
24
+ *
25
+ * @param id - Adapter identifier
26
+ * @returns Adapter definition or undefined if not found
27
+ */
28
+ export declare function getAdapter(id: string): AgentAdapter | undefined;
29
+ /**
30
+ * List all registered adapter IDs.
31
+ *
32
+ * @returns Array of adapter IDs
33
+ */
34
+ export declare function listAdapters(): string[];
35
+ /**
36
+ * Register a custom adapter at runtime.
37
+ *
38
+ * Useful for testing or dynamic adapter configuration.
39
+ *
40
+ * @param id - Adapter identifier
41
+ * @param adapter - Adapter definition
42
+ */
43
+ export declare function registerAdapter(id: string, adapter: AgentAdapter): void;
44
+ /**
45
+ * Resolve adapter by ID or use default.
46
+ *
47
+ * If the ID matches a registered adapter, returns that adapter.
48
+ * If not, treats the ID as an npm package name and creates an ad-hoc npx adapter.
49
+ * This allows users to use any ACP-compatible package without registering it.
50
+ *
51
+ * @param id - Optional adapter ID or npm package name
52
+ * @returns Adapter definition
53
+ */
54
+ export declare function resolveAdapter(id?: string): AgentAdapter;
55
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/agents/adapters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAEvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAexD"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Agent adapter registry.
3
+ *
4
+ * Adapters define how to spawn and communicate with different ACP-compliant agents.
5
+ * Each adapter specifies the command, args, and optional configuration.
6
+ */
7
+ /**
8
+ * Built-in adapter registry.
9
+ */
10
+ const ADAPTERS = {
11
+ /**
12
+ * Claude Code ACP adapter - the primary production adapter.
13
+ * Uses @zed-industries/claude-code-acp package.
14
+ */
15
+ 'claude-code-acp': {
16
+ command: 'npx',
17
+ args: ['@zed-industries/claude-code-acp'],
18
+ shell: process.platform === 'win32',
19
+ description: 'Claude Code via ACP protocol',
20
+ },
21
+ /**
22
+ * Mock ACP adapter for testing.
23
+ * Uses a local mock script that simulates ACP behavior.
24
+ */
25
+ 'mock-acp': {
26
+ command: 'node',
27
+ args: [], // Path to mock script set at runtime via env
28
+ env: {},
29
+ description: 'Mock ACP agent for testing',
30
+ },
31
+ };
32
+ /**
33
+ * Get an adapter by ID.
34
+ *
35
+ * @param id - Adapter identifier
36
+ * @returns Adapter definition or undefined if not found
37
+ */
38
+ export function getAdapter(id) {
39
+ return ADAPTERS[id];
40
+ }
41
+ /**
42
+ * List all registered adapter IDs.
43
+ *
44
+ * @returns Array of adapter IDs
45
+ */
46
+ export function listAdapters() {
47
+ return Object.keys(ADAPTERS);
48
+ }
49
+ /**
50
+ * Register a custom adapter at runtime.
51
+ *
52
+ * Useful for testing or dynamic adapter configuration.
53
+ *
54
+ * @param id - Adapter identifier
55
+ * @param adapter - Adapter definition
56
+ */
57
+ export function registerAdapter(id, adapter) {
58
+ ADAPTERS[id] = adapter;
59
+ }
60
+ /**
61
+ * Resolve adapter by ID or use default.
62
+ *
63
+ * If the ID matches a registered adapter, returns that adapter.
64
+ * If not, treats the ID as an npm package name and creates an ad-hoc npx adapter.
65
+ * This allows users to use any ACP-compatible package without registering it.
66
+ *
67
+ * @param id - Optional adapter ID or npm package name
68
+ * @returns Adapter definition
69
+ */
70
+ export function resolveAdapter(id) {
71
+ const adapterId = id ?? 'claude-code-acp';
72
+ const adapter = getAdapter(adapterId);
73
+ if (adapter) {
74
+ return adapter;
75
+ }
76
+ // Treat unknown IDs as npm package names - create ad-hoc npx adapter
77
+ return {
78
+ command: 'npx',
79
+ args: [adapterId],
80
+ shell: process.platform === 'win32',
81
+ description: `Ad-hoc adapter for ${adapterId}`,
82
+ };
83
+ }
84
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/agents/adapters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;GAEG;AACH,MAAM,QAAQ,GAAiC;IAC7C;;;OAGG;IACH,iBAAiB,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,iCAAiC,CAAC;QACzC,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,WAAW,EAAE,8BAA8B;KAC5C;IAED;;;OAGG;IACH,UAAU,EAAE;QACV,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,EAAE,EAAE,6CAA6C;QACvD,GAAG,EAAE,EAAE;QACP,WAAW,EAAE,4BAA4B;KAC1C;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,OAAqB;IAC/D,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,EAAW;IACxC,MAAM,SAAS,GAAG,EAAE,IAAI,iBAAiB,CAAC;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qEAAqE;IACrE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,WAAW,EAAE,sBAAsB,SAAS,EAAE;KAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Agent module.
3
+ *
4
+ * Provides utilities for spawning and communicating with ACP-compliant agents.
5
+ */
6
+ export { type AgentAdapter, getAdapter, listAdapters, registerAdapter, resolveAdapter, } from './adapters.js';
7
+ export { type SpawnAgentOptions, type SpawnedAgent, spawnAgent, spawnAndInitialize, } from './spawner.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,UAAU,EACV,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Agent module.
3
+ *
4
+ * Provides utilities for spawning and communicating with ACP-compliant agents.
5
+ */
6
+ // Adapters
7
+ export { getAdapter, listAdapters, registerAdapter, resolveAdapter, } from './adapters.js';
8
+ // Spawner
9
+ export { spawnAgent, spawnAndInitialize, } from './spawner.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,WAAW;AACX,OAAO,EAEL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,UAAU;AACV,OAAO,EAGL,UAAU,EACV,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Agent spawner.
3
+ *
4
+ * Spawns ACP-compliant agent processes and initializes the ACP client
5
+ * for bidirectional JSON-RPC communication.
6
+ */
7
+ import { type ChildProcess } from 'node:child_process';
8
+ import { ACPClient, type ACPClientOptions } from '../acp/index.js';
9
+ import type { AgentAdapter } from './adapters.js';
10
+ /**
11
+ * Options for spawning an agent.
12
+ */
13
+ export interface SpawnAgentOptions {
14
+ /** Working directory for the agent */
15
+ cwd: string;
16
+ /** Additional environment variables */
17
+ env?: Record<string, string>;
18
+ /** ACP client options */
19
+ clientOptions?: Omit<ACPClientOptions, 'stdin' | 'stdout'>;
20
+ }
21
+ /**
22
+ * Result of spawning an agent.
23
+ */
24
+ export interface SpawnedAgent {
25
+ /** The ACP client for communication */
26
+ client: ACPClient;
27
+ /** The child process handle */
28
+ process: ChildProcess;
29
+ /** Kill the agent process */
30
+ kill: (signal?: NodeJS.Signals) => void;
31
+ }
32
+ /**
33
+ * Spawn an ACP agent using the specified adapter.
34
+ *
35
+ * Creates a child process and wraps its stdio with an ACPClient.
36
+ * The caller is responsible for calling client.initialize() after spawning.
37
+ *
38
+ * @param adapter - Adapter definition specifying how to spawn the agent
39
+ * @param options - Spawn options including cwd and environment
40
+ * @returns SpawnedAgent with client, process, and kill function
41
+ */
42
+ export declare function spawnAgent(adapter: AgentAdapter, options: SpawnAgentOptions): SpawnedAgent;
43
+ /**
44
+ * Spawn and initialize an ACP agent.
45
+ *
46
+ * Convenience function that spawns an agent and calls initialize().
47
+ *
48
+ * @param adapter - Adapter definition
49
+ * @param options - Spawn options
50
+ * @returns Initialized SpawnedAgent
51
+ */
52
+ export declare function spawnAndInitialize(adapter: AgentAdapter, options: SpawnAgentOptions): Promise<SpawnedAgent>;
53
+ //# sourceMappingURL=spawner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner.d.ts","sourceRoot":"","sources":["../../src/agents/spawner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yBAAyB;IACzB,aAAa,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,MAAM,EAAE,SAAS,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,6BAA6B;IAC7B,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;CACzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,YAAY,CAiDd;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,YAAY,CAAC,CAWvB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Agent spawner.
3
+ *
4
+ * Spawns ACP-compliant agent processes and initializes the ACP client
5
+ * for bidirectional JSON-RPC communication.
6
+ */
7
+ import { spawn } from 'node:child_process';
8
+ import { ACPClient } from '../acp/index.js';
9
+ /**
10
+ * Spawn an ACP agent using the specified adapter.
11
+ *
12
+ * Creates a child process and wraps its stdio with an ACPClient.
13
+ * The caller is responsible for calling client.initialize() after spawning.
14
+ *
15
+ * @param adapter - Adapter definition specifying how to spawn the agent
16
+ * @param options - Spawn options including cwd and environment
17
+ * @returns SpawnedAgent with client, process, and kill function
18
+ */
19
+ export function spawnAgent(adapter, options) {
20
+ const { cwd, env = {}, clientOptions = {} } = options;
21
+ // Merge environment variables
22
+ const processEnv = {
23
+ ...process.env,
24
+ ...adapter.env,
25
+ ...env,
26
+ };
27
+ // Spawn the agent process
28
+ const child = spawn(adapter.command, adapter.args, {
29
+ cwd,
30
+ env: processEnv,
31
+ shell: adapter.shell,
32
+ stdio: ['pipe', 'pipe', 'inherit'], // pipe stdin/stdout, inherit stderr
33
+ });
34
+ // Ensure stdin/stdout are available
35
+ if (!child.stdin || !child.stdout) {
36
+ child.kill();
37
+ throw new Error('Failed to create pipes for agent process');
38
+ }
39
+ // Create ACP client connected to child's stdio
40
+ // Note: From the client's perspective:
41
+ // - stdin is where we READ from (child's stdout)
42
+ // - stdout is where we WRITE to (child's stdin)
43
+ const client = new ACPClient({
44
+ ...clientOptions,
45
+ stdin: child.stdout, // We read from child's stdout
46
+ stdout: child.stdin, // We write to child's stdin
47
+ });
48
+ // Forward process exit to client close
49
+ child.on('exit', () => {
50
+ if (!client.isClosed()) {
51
+ client.close();
52
+ }
53
+ });
54
+ // Kill function with graceful shutdown
55
+ const kill = (signal = 'SIGTERM') => {
56
+ if (!child.killed) {
57
+ child.kill(signal);
58
+ }
59
+ };
60
+ return { client, process: child, kill };
61
+ }
62
+ /**
63
+ * Spawn and initialize an ACP agent.
64
+ *
65
+ * Convenience function that spawns an agent and calls initialize().
66
+ *
67
+ * @param adapter - Adapter definition
68
+ * @param options - Spawn options
69
+ * @returns Initialized SpawnedAgent
70
+ */
71
+ export async function spawnAndInitialize(adapter, options) {
72
+ const agent = spawnAgent(adapter, options);
73
+ try {
74
+ await agent.client.initialize();
75
+ return agent;
76
+ }
77
+ catch (err) {
78
+ // Clean up on initialization failure
79
+ agent.kill();
80
+ throw err;
81
+ }
82
+ }
83
+ //# sourceMappingURL=spawner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawner.js","sourceRoot":"","sources":["../../src/agents/spawner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AA2BnE;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,OAAqB,EACrB,OAA0B;IAE1B,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEtD,8BAA8B;IAC9B,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,CAAC,GAAG;QACd,GAAG,OAAO,CAAC,GAAG;QACd,GAAG,GAAG;KACP,CAAC;IAEF,0BAA0B;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;QACjD,GAAG;QACH,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,oCAAoC;KACzE,CAAC,CAAC;IAEH,oCAAoC;IACpC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,+CAA+C;IAC/C,uCAAuC;IACvC,iDAAiD;IACjD,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,GAAG,aAAa;QAChB,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,8BAA8B;QACnD,MAAM,EAAE,KAAK,CAAC,KAA8B,EAAE,4BAA4B;KAC3E,CAAC,CAAC;IAEH,uCAAuC;IACvC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,IAAI,GAAG,CAAC,SAAyB,SAAS,EAAQ,EAAE;QACxD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAqB,EACrB,OAA0B;IAE1B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Shared utilities for batch operations on multiple refs.
3
+ * Supports --refs @a @b @c flag pattern for commands like task complete, cancel, etc.
4
+ */
5
+ import type { ReferenceIndex } from '../parser/index.js';
6
+ /**
7
+ * Result of a single ref operation within a batch
8
+ */
9
+ export interface BatchOperationResult {
10
+ ref: string;
11
+ ulid: string | null;
12
+ status: 'success' | 'error';
13
+ error?: string;
14
+ message?: string;
15
+ data?: unknown;
16
+ }
17
+ /**
18
+ * Summary of batch operation results
19
+ */
20
+ export interface BatchSummary {
21
+ total: number;
22
+ succeeded: number;
23
+ failed: number;
24
+ }
25
+ /**
26
+ * Complete result of a batch operation
27
+ */
28
+ export interface BatchResult {
29
+ success: boolean;
30
+ summary: BatchSummary;
31
+ results: BatchOperationResult[];
32
+ }
33
+ /**
34
+ * Options for executeBatchOperation
35
+ */
36
+ export interface BatchOperationOptions<TItem, TContext> {
37
+ /** The positional ref argument (if provided) */
38
+ positionalRef?: string;
39
+ /** The --refs flag values (if provided) */
40
+ refsFlag?: string[];
41
+ /** Context needed for operations */
42
+ context: TContext;
43
+ /** All items to search through */
44
+ items: TItem[];
45
+ /** Reference index for resolution */
46
+ index: ReferenceIndex;
47
+ /** Function to resolve a ref to an item - returns { item, error? } */
48
+ resolveRef: (ref: string, items: TItem[], index: ReferenceIndex) => {
49
+ item: TItem | null;
50
+ error?: string;
51
+ };
52
+ /** Function to execute the operation on a single item */
53
+ executeOperation: (item: TItem, context: TContext) => Promise<{
54
+ success: boolean;
55
+ message?: string;
56
+ error?: string;
57
+ data?: unknown;
58
+ }>;
59
+ /** Function to extract ULID from an item */
60
+ getUlid: (item: TItem) => string;
61
+ }
62
+ /**
63
+ * Execute a batch operation with support for single-ref (positional) or multi-ref (--refs flag).
64
+ * Handles mutual exclusion, partial failures, and unified output formatting.
65
+ *
66
+ * Returns a BatchResult object. Caller should use formatBatchOutput() to render results.
67
+ */
68
+ export declare function executeBatchOperation<TItem, TContext>(options: BatchOperationOptions<TItem, TContext>): Promise<BatchResult>;
69
+ /**
70
+ * Format and output batch operation results.
71
+ * Handles both human-readable and JSON output formats.
72
+ * Sets appropriate exit code based on results.
73
+ *
74
+ * AC: @multi-ref-batch ac-5 - Human output format
75
+ * AC: @multi-ref-batch ac-6 - JSON output format
76
+ */
77
+ export declare function formatBatchOutput(result: BatchResult, operationName: string): void;
78
+ /**
79
+ * Helper to check if refs flag is being used (for backward compatibility checks)
80
+ */
81
+ export declare function isBatchMode(refsFlag?: string[]): boolean;
82
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../src/cli/batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,KAAK,EAAE,QAAQ;IACpD,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oCAAoC;IACpC,OAAO,EAAE,QAAQ,CAAC;IAClB,kCAAkC;IAClC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,qCAAqC;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,sEAAsE;IACtE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,KAAK;QAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3G,yDAAyD;IACzD,gBAAgB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtI,4CAA4C;IAC5C,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EACzD,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAC9C,OAAO,CAAC,WAAW,CAAC,CAkFtB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAyDlF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAExD"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Shared utilities for batch operations on multiple refs.
3
+ * Supports --refs @a @b @c flag pattern for commands like task complete, cancel, etc.
4
+ */
5
+ import chalk from 'chalk';
6
+ import { error, isJsonMode } from './output.js';
7
+ import { EXIT_CODES } from './exit-codes.js';
8
+ /**
9
+ * Execute a batch operation with support for single-ref (positional) or multi-ref (--refs flag).
10
+ * Handles mutual exclusion, partial failures, and unified output formatting.
11
+ *
12
+ * Returns a BatchResult object. Caller should use formatBatchOutput() to render results.
13
+ */
14
+ export async function executeBatchOperation(options) {
15
+ const { positionalRef, refsFlag, context, items, index, resolveRef, executeOperation, getUlid } = options;
16
+ // AC: @multi-ref-batch ac-3 - Mutual exclusion check
17
+ if (positionalRef && refsFlag && refsFlag.length > 0) {
18
+ error('Cannot use both positional ref and --refs flag');
19
+ process.exit(EXIT_CODES.USAGE_ERROR);
20
+ }
21
+ // Determine which refs to process
22
+ let refs;
23
+ if (refsFlag && refsFlag.length > 0) {
24
+ refs = refsFlag;
25
+ }
26
+ else if (positionalRef) {
27
+ refs = [positionalRef];
28
+ }
29
+ else {
30
+ // AC: @multi-ref-batch ac-7 - Empty refs error
31
+ error('--refs requires at least one reference');
32
+ process.exit(EXIT_CODES.USAGE_ERROR);
33
+ }
34
+ // Process each ref
35
+ const results = [];
36
+ // AC: @multi-ref-batch ac-4 - Continue processing after errors (partial failure handling)
37
+ for (const ref of refs) {
38
+ try {
39
+ // AC: @multi-ref-batch ac-8 - Ref resolution uses existing logic
40
+ const resolved = resolveRef(ref, items, index);
41
+ if (!resolved.item) {
42
+ // Resolution failed - record error and continue to next ref
43
+ results.push({
44
+ ref,
45
+ ulid: null,
46
+ status: 'error',
47
+ error: resolved.error || `Failed to resolve reference: ${ref}`,
48
+ });
49
+ continue;
50
+ }
51
+ const ulid = getUlid(resolved.item);
52
+ // Execute the operation
53
+ const opResult = await executeOperation(resolved.item, context);
54
+ results.push({
55
+ ref,
56
+ ulid: index.shortUlid(ulid),
57
+ status: opResult.success ? 'success' : 'error',
58
+ message: opResult.message,
59
+ error: opResult.error,
60
+ data: opResult.data,
61
+ });
62
+ }
63
+ catch (err) {
64
+ // Unexpected error during operation
65
+ results.push({
66
+ ref,
67
+ ulid: null,
68
+ status: 'error',
69
+ error: err instanceof Error ? err.message : String(err),
70
+ });
71
+ }
72
+ }
73
+ // Calculate summary
74
+ const succeeded = results.filter(r => r.status === 'success').length;
75
+ const failed = results.filter(r => r.status === 'error').length;
76
+ const summary = {
77
+ total: results.length,
78
+ succeeded,
79
+ failed,
80
+ };
81
+ // Determine overall success
82
+ const success = failed === 0;
83
+ return {
84
+ success,
85
+ summary,
86
+ results,
87
+ };
88
+ }
89
+ /**
90
+ * Format and output batch operation results.
91
+ * Handles both human-readable and JSON output formats.
92
+ * Sets appropriate exit code based on results.
93
+ *
94
+ * AC: @multi-ref-batch ac-5 - Human output format
95
+ * AC: @multi-ref-batch ac-6 - JSON output format
96
+ */
97
+ export function formatBatchOutput(result, operationName) {
98
+ if (isJsonMode()) {
99
+ // AC: @multi-ref-batch ac-6 - JSON output
100
+ console.log(JSON.stringify(result, null, 2));
101
+ }
102
+ else {
103
+ // AC: @multi-ref-batch ac-5 - Human output format
104
+ const { summary, results } = result;
105
+ // Summary line
106
+ if (summary.total === 1) {
107
+ // Single item - no summary needed, just show result
108
+ const r = results[0];
109
+ if (r.status === 'success') {
110
+ console.log(chalk.green(`✓ ${operationName}: ${r.ulid || r.ref}`));
111
+ if (r.message) {
112
+ console.log(` ${r.message}`);
113
+ }
114
+ }
115
+ else {
116
+ console.log(chalk.red(`✗ ${operationName} failed: ${r.ref}`));
117
+ if (r.error) {
118
+ console.log(chalk.red(` ${r.error}`));
119
+ }
120
+ }
121
+ }
122
+ else {
123
+ // Multiple items - show summary
124
+ const verb = operationName.toLowerCase();
125
+ console.log(`${chalk.bold(`${operationName}d ${summary.succeeded} of ${summary.total}:`)}\n`);
126
+ // List each result
127
+ for (const r of results) {
128
+ if (r.status === 'success') {
129
+ console.log(chalk.green(`✓ ${r.ulid || r.ref}`));
130
+ if (r.message) {
131
+ console.log(` ${r.message}`);
132
+ }
133
+ }
134
+ else {
135
+ console.log(chalk.red(`✗ ${r.ref}`));
136
+ if (r.error) {
137
+ console.log(chalk.red(` ${r.error}`));
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ // Set exit code
144
+ // AC: @multi-ref-batch ac-4 - Partial failure exit code
145
+ if (!result.success) {
146
+ if (result.summary.succeeded > 0) {
147
+ // Partial failure
148
+ process.exit(EXIT_CODES.ERROR);
149
+ }
150
+ else {
151
+ // Complete failure
152
+ process.exit(EXIT_CODES.ERROR);
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Helper to check if refs flag is being used (for backward compatibility checks)
158
+ */
159
+ export function isBatchMode(refsFlag) {
160
+ return Boolean(refsFlag && refsFlag.length > 0);
161
+ }
162
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/cli/batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAsD7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA+C;IAE/C,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE1G,qDAAqD;IACrD,IAAI,aAAa,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAc,CAAC;IACnB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,QAAQ,CAAC;IAClB,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,0FAA0F;IAC1F,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,4DAA4D;gBAC5D,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG;oBACH,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,gCAAgC,GAAG,EAAE;iBAC/D,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEpC,wBAAwB;YACxB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG;gBACH,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC3B,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oCAAoC;YACpC,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG;gBACH,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,OAAO,GAAiB;QAC5B,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,SAAS;QACT,MAAM;KACP,CAAC;IAEF,4BAA4B;IAC5B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC;IAE7B,OAAO;QACL,OAAO;QACP,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,aAAqB;IAC1E,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,0CAA0C;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEpC,eAAe;QACf,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACxB,oDAAoD;YACpD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,aAAa,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,aAAa,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9D,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,KAAK,OAAO,CAAC,SAAS,OAAO,OAAO,CAAC,KAAK,GAAG,CAC5F,IAAI,CAAC,CAAC;YAED,mBAAmB;YACnB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,wDAAwD;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACjC,kBAAkB;YAClB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAmB;IAC7C,OAAO,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register the 'clone-for-testing' command
4
+ */
5
+ export declare function registerCloneForTestingCommand(program: Command): void;
6
+ //# sourceMappingURL=clone-for-testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-for-testing.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clone-for-testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0IpC;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6DrE"}