@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.
- package/README.md +263 -0
- package/dist/acp/client.d.ts +159 -0
- package/dist/acp/client.d.ts.map +1 -0
- package/dist/acp/client.js +255 -0
- package/dist/acp/client.js.map +1 -0
- package/dist/acp/framing.d.ts +119 -0
- package/dist/acp/framing.d.ts.map +1 -0
- package/dist/acp/framing.js +302 -0
- package/dist/acp/framing.js.map +1 -0
- package/dist/acp/index.d.ts +14 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +13 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/types.d.ts +89 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +99 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/agents/adapters.d.ts +55 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +84 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/index.d.ts +8 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/spawner.d.ts +53 -0
- package/dist/agents/spawner.d.ts.map +1 -0
- package/dist/agents/spawner.js +83 -0
- package/dist/agents/spawner.js.map +1 -0
- package/dist/cli/batch.d.ts +82 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +162 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/cli/commands/clone-for-testing.d.ts +6 -0
- package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
- package/dist/cli/commands/clone-for-testing.js +176 -0
- package/dist/cli/commands/clone-for-testing.js.map +1 -0
- package/dist/cli/commands/derive.d.ts +6 -0
- package/dist/cli/commands/derive.d.ts.map +1 -0
- package/dist/cli/commands/derive.js +450 -0
- package/dist/cli/commands/derive.js.map +1 -0
- package/dist/cli/commands/help.d.ts +6 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +196 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +6 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +235 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/index.d.ts +20 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +21 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +245 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/item.d.ts +6 -0
- package/dist/cli/commands/item.d.ts.map +1 -0
- package/dist/cli/commands/item.js +1311 -0
- package/dist/cli/commands/item.js.map +1 -0
- package/dist/cli/commands/link.d.ts +6 -0
- package/dist/cli/commands/link.d.ts.map +1 -0
- package/dist/cli/commands/link.js +288 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/log.d.ts +16 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +291 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/meta.d.ts +15 -0
- package/dist/cli/commands/meta.d.ts.map +1 -0
- package/dist/cli/commands/meta.js +1378 -0
- package/dist/cli/commands/meta.js.map +1 -0
- package/dist/cli/commands/module.d.ts +6 -0
- package/dist/cli/commands/module.d.ts.map +1 -0
- package/dist/cli/commands/module.js +102 -0
- package/dist/cli/commands/module.js.map +1 -0
- package/dist/cli/commands/ralph.d.ts +9 -0
- package/dist/cli/commands/ralph.d.ts.map +1 -0
- package/dist/cli/commands/ralph.js +465 -0
- package/dist/cli/commands/ralph.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +134 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/session.d.ts +164 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +745 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +26 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +586 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/shadow.d.ts +6 -0
- package/dist/cli/commands/shadow.d.ts.map +1 -0
- package/dist/cli/commands/shadow.js +299 -0
- package/dist/cli/commands/shadow.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1514 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/tasks.d.ts +6 -0
- package/dist/cli/commands/tasks.d.ts.map +1 -0
- package/dist/cli/commands/tasks.js +347 -0
- package/dist/cli/commands/tasks.js.map +1 -0
- package/dist/cli/commands/trait.d.ts +10 -0
- package/dist/cli/commands/trait.d.ts.map +1 -0
- package/dist/cli/commands/trait.js +295 -0
- package/dist/cli/commands/trait.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +626 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/exit-codes.d.ts +62 -0
- package/dist/cli/exit-codes.d.ts.map +1 -0
- package/dist/cli/exit-codes.js +65 -0
- package/dist/cli/exit-codes.js.map +1 -0
- package/dist/cli/help/content.d.ts +35 -0
- package/dist/cli/help/content.d.ts.map +1 -0
- package/dist/cli/help/content.js +312 -0
- package/dist/cli/help/content.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +85 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/introspection.d.ts +87 -0
- package/dist/cli/introspection.d.ts.map +1 -0
- package/dist/cli/introspection.js +127 -0
- package/dist/cli/introspection.js.map +1 -0
- package/dist/cli/output.d.ts +56 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +467 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/suggest.d.ts +16 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +72 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/alignment.d.ts +113 -0
- package/dist/parser/alignment.d.ts.map +1 -0
- package/dist/parser/alignment.js +261 -0
- package/dist/parser/alignment.js.map +1 -0
- package/dist/parser/assess.d.ts +81 -0
- package/dist/parser/assess.d.ts.map +1 -0
- package/dist/parser/assess.js +197 -0
- package/dist/parser/assess.js.map +1 -0
- package/dist/parser/convention-validation.d.ts +48 -0
- package/dist/parser/convention-validation.d.ts.map +1 -0
- package/dist/parser/convention-validation.js +167 -0
- package/dist/parser/convention-validation.js.map +1 -0
- package/dist/parser/fix.d.ts +38 -0
- package/dist/parser/fix.d.ts.map +1 -0
- package/dist/parser/fix.js +185 -0
- package/dist/parser/fix.js.map +1 -0
- package/dist/parser/index.d.ts +12 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +13 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/items.d.ts +138 -0
- package/dist/parser/items.d.ts.map +1 -0
- package/dist/parser/items.js +321 -0
- package/dist/parser/items.js.map +1 -0
- package/dist/parser/meta.d.ts +120 -0
- package/dist/parser/meta.d.ts.map +1 -0
- package/dist/parser/meta.js +441 -0
- package/dist/parser/meta.js.map +1 -0
- package/dist/parser/refs.d.ts +185 -0
- package/dist/parser/refs.d.ts.map +1 -0
- package/dist/parser/refs.js +404 -0
- package/dist/parser/refs.js.map +1 -0
- package/dist/parser/shadow.d.ts +253 -0
- package/dist/parser/shadow.d.ts.map +1 -0
- package/dist/parser/shadow.js +1053 -0
- package/dist/parser/shadow.js.map +1 -0
- package/dist/parser/traits.d.ts +72 -0
- package/dist/parser/traits.d.ts.map +1 -0
- package/dist/parser/traits.js +120 -0
- package/dist/parser/traits.js.map +1 -0
- package/dist/parser/validate.d.ts +89 -0
- package/dist/parser/validate.d.ts.map +1 -0
- package/dist/parser/validate.js +817 -0
- package/dist/parser/validate.js.map +1 -0
- package/dist/parser/yaml.d.ts +326 -0
- package/dist/parser/yaml.d.ts.map +1 -0
- package/dist/parser/yaml.js +1383 -0
- package/dist/parser/yaml.js.map +1 -0
- package/dist/ralph/cli-renderer.d.ts +20 -0
- package/dist/ralph/cli-renderer.d.ts.map +1 -0
- package/dist/ralph/cli-renderer.js +179 -0
- package/dist/ralph/cli-renderer.js.map +1 -0
- package/dist/ralph/events.d.ts +65 -0
- package/dist/ralph/events.d.ts.map +1 -0
- package/dist/ralph/events.js +397 -0
- package/dist/ralph/events.js.map +1 -0
- package/dist/ralph/index.d.ts +8 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +10 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/schema/common.d.ts +46 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +71 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/inbox.d.ts +90 -0
- package/dist/schema/inbox.d.ts.map +1 -0
- package/dist/schema/inbox.js +30 -0
- package/dist/schema/inbox.js.map +1 -0
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +7 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/meta.d.ts +762 -0
- package/dist/schema/meta.d.ts.map +1 -0
- package/dist/schema/meta.js +144 -0
- package/dist/schema/meta.js.map +1 -0
- package/dist/schema/spec.d.ts +912 -0
- package/dist/schema/spec.d.ts.map +1 -0
- package/dist/schema/spec.js +104 -0
- package/dist/schema/spec.js.map +1 -0
- package/dist/schema/task.d.ts +664 -0
- package/dist/schema/task.d.ts.map +1 -0
- package/dist/schema/task.js +130 -0
- package/dist/schema/task.js.map +1 -0
- package/dist/sessions/index.d.ts +11 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +13 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +144 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +325 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +157 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +90 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/strings/errors.d.ts +420 -0
- package/dist/strings/errors.d.ts.map +1 -0
- package/dist/strings/errors.js +282 -0
- package/dist/strings/errors.js.map +1 -0
- package/dist/strings/guidance.d.ts +65 -0
- package/dist/strings/guidance.d.ts.map +1 -0
- package/dist/strings/guidance.js +66 -0
- package/dist/strings/guidance.js.map +1 -0
- package/dist/strings/index.d.ts +12 -0
- package/dist/strings/index.d.ts.map +1 -0
- package/dist/strings/index.js +12 -0
- package/dist/strings/index.js.map +1 -0
- package/dist/strings/labels.d.ts +74 -0
- package/dist/strings/labels.d.ts.map +1 -0
- package/dist/strings/labels.js +75 -0
- package/dist/strings/labels.js.map +1 -0
- package/dist/strings/validation.d.ts +126 -0
- package/dist/strings/validation.d.ts.map +1 -0
- package/dist/strings/validation.js +135 -0
- package/dist/strings/validation.js.map +1 -0
- package/dist/utils/commit.d.ts +23 -0
- package/dist/utils/commit.d.ts.map +1 -0
- package/dist/utils/commit.js +67 -0
- package/dist/utils/commit.js.map +1 -0
- package/dist/utils/git.d.ts +57 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +192 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grep.d.ts +28 -0
- package/dist/utils/grep.d.ts.map +1 -0
- package/dist/utils/grep.js +86 -0
- package/dist/utils/grep.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/time.d.ts +18 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +61 -0
- package/dist/utils/time.js.map +1 -0
- 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 @@
|
|
|
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"}
|