@a5c-ai/launch-adapter 5.1.1-staging.0ad6ac75ae4a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @a5c-ai/launch-adapter
2
+
3
+ Agent launch adapter — spawn/lifecycle orchestration, PTY bridge, signal handling, and completion engine for the adapters ecosystem.
4
+
5
+ Extracted from `@a5c-ai/adapters-cli` as part of the adapters decomposition (#211).
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Bridge hook emulation for non-interactive mode.
3
+ *
4
+ * When --bridge-hooks is set, emulates lifecycle hooks by invoking
5
+ * hooks-adapter, which reads the harness's hook configuration (settings.json,
6
+ * hooks.json, etc.), resolves ALL registered handlers from ALL installed
7
+ * plugins, and executes them through the proper chain.
8
+ */
9
+ export interface BridgeHookContext {
10
+ harness: string;
11
+ cwd: string;
12
+ env: Record<string, string>;
13
+ sessionId?: string;
14
+ runsDir?: string;
15
+ verbose?: boolean;
16
+ }
17
+ export interface SessionStartResult {
18
+ runId?: string;
19
+ emulated: boolean;
20
+ }
21
+ export interface StopResult {
22
+ shouldContinue: boolean;
23
+ resumeId?: string;
24
+ emulated: boolean;
25
+ }
26
+ export declare class BridgeHookEmulator {
27
+ private readonly ctx;
28
+ private readonly babysitterBin;
29
+ private readonly hooksMuxBin;
30
+ private readonly adapter;
31
+ private runId;
32
+ constructor(ctx: BridgeHookContext);
33
+ /**
34
+ * Invoke a hook event through hooks-adapter with explicit handler commands.
35
+ *
36
+ * The bridge emulator passes handler commands directly via --handler flags,
37
+ * since there's no harness runtime to read the hook config from. The
38
+ * handlers are the same scripts that the plugin.json defines for each event.
39
+ *
40
+ * Falls back to direct babysitter CLI if hooks-adapter is not available.
41
+ */
42
+ private invokeHookEvent;
43
+ /**
44
+ * Emulate the session-start lifecycle hook.
45
+ *
46
+ * Invokes hooks-adapter with the SessionStart event, which reads the
47
+ * harness's hook configuration and runs all registered session-start
48
+ * handlers from all installed plugins.
49
+ */
50
+ emulateSessionStart(): Promise<SessionStartResult>;
51
+ /**
52
+ * Emulate the stop lifecycle hook.
53
+ *
54
+ * Invokes hooks-adapter with the Stop event, then queries run status.
55
+ */
56
+ emulateStop(runId?: string): Promise<StopResult>;
57
+ /**
58
+ * Emulate the session-end lifecycle hook.
59
+ */
60
+ emulateSessionEnd(): Promise<void>;
61
+ /** Return the current run ID, if one was created during session-start. */
62
+ getRunId(): string | undefined;
63
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-hooks.d.ts","sourceRoot":"","sources":["../src/bridge-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiJD,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAAqB;gBAEL,GAAG,EAAE,iBAAiB;IAMnD;;;;;;;;OAQG;YACW,eAAe;IA8E7B;;;;;;OAMG;IACG,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAiCxD;;;;OAIG;IACG,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA6EtD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxC,0EAA0E;IAC1E,QAAQ,IAAI,MAAM,GAAG,SAAS;CAG/B"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Bridge hook emulation for non-interactive mode.
3
+ *
4
+ * When --bridge-hooks is set, emulates lifecycle hooks by invoking
5
+ * hooks-adapter, which reads the harness's hook configuration (settings.json,
6
+ * hooks.json, etc.), resolves ALL registered handlers from ALL installed
7
+ * plugins, and executes them through the proper chain.
8
+ */
9
+ import { getHookSupport } from '@a5c-ai/atlas/catalog';
10
+ // ---------------------------------------------------------------------------
11
+ // Internal helpers
12
+ // ---------------------------------------------------------------------------
13
+ function resolveBabysitterBin(env) {
14
+ return env['BABYSITTER_BIN'] || 'babysitter';
15
+ }
16
+ function resolveHooksMuxBin(env) {
17
+ return env['HOOKS_MUX_BIN'] || 'a5c-hooks-adapter';
18
+ }
19
+ /** Map adapters agent name to the babysitter SDK harness name. */
20
+ function harnessToSdkHarness(harness) {
21
+ const map = {
22
+ 'gemini': 'gemini-cli',
23
+ 'copilot': 'copilot-cli',
24
+ 'claude': 'claude-code',
25
+ };
26
+ return map[harness] ?? harness;
27
+ }
28
+ /** Map harness name to the hooks-adapter adapter name. */
29
+ function harnessToAdapter(harness) {
30
+ const map = {
31
+ 'claude-code': 'claude',
32
+ 'claude': 'claude',
33
+ 'codex': 'codex',
34
+ 'pi': 'pi',
35
+ 'gemini-cli': 'gemini',
36
+ 'gemini': 'gemini',
37
+ 'hermes': 'hermes',
38
+ 'copilot-cli': 'copilot',
39
+ 'opencode': 'opencode',
40
+ 'cursor-cli': 'cursor',
41
+ };
42
+ return map[harness] ?? harness;
43
+ }
44
+ async function execCommand(bin, args, options) {
45
+ const { spawnSync } = await import('node:child_process');
46
+ const mergedEnv = { ...process.env, ...options.env };
47
+ if (options.verbose) {
48
+ console.error(`[bridge-hooks] exec: ${bin} ${args.join(' ')}`);
49
+ }
50
+ // On Windows, shell:true splits --handler values at spaces. Resolve the
51
+ // binary to a node-invocable .js entry to avoid shell entirely.
52
+ let resolvedBin = bin;
53
+ let resolvedArgs = args;
54
+ let useShell = false;
55
+ if (process.platform === 'win32') {
56
+ // Try to find the .js entry point from the npm .cmd shim or PATH scripts
57
+ const fs = await import('node:fs');
58
+ const path = await import('node:path');
59
+ const pathValue = options.env['PATH'] || options.env['Path'] || options.env['path']
60
+ || mergedEnv['Path'] || mergedEnv['PATH'] || mergedEnv['path'] || '';
61
+ const pathDirs = pathValue.split(path.delimiter).filter(Boolean);
62
+ const hasPathSeparator = bin.includes('/') || bin.includes('\\');
63
+ const candidateDirs = hasPathSeparator ? [path.dirname(bin)] : pathDirs;
64
+ const candidateNames = hasPathSeparator
65
+ ? [path.basename(bin)]
66
+ : [bin, `${bin}.cmd`, `${bin}.ps1`];
67
+ for (const dir of candidateDirs) {
68
+ for (const name of candidateNames) {
69
+ const candidatePath = path.join(dir, name);
70
+ // Check for .cmd shim (npm global install)
71
+ if (candidatePath.toLowerCase().endsWith('.cmd')) {
72
+ try {
73
+ const content = fs.readFileSync(candidatePath, 'utf-8');
74
+ const jsMatch = content.match(/"([^"]+\.js)"/);
75
+ if (jsMatch) {
76
+ resolvedBin = process.execPath;
77
+ resolvedArgs = [jsMatch[1], ...args];
78
+ break;
79
+ }
80
+ }
81
+ catch { /* not found */ }
82
+ }
83
+ // Check for shell script (workspace link)
84
+ try {
85
+ const content = fs.readFileSync(candidatePath, 'utf-8');
86
+ const nodeMatch = content.match(/exec\s+node\s+"([^"]+)"/);
87
+ if (nodeMatch) {
88
+ resolvedBin = process.execPath;
89
+ resolvedArgs = [nodeMatch[1], ...args];
90
+ break;
91
+ }
92
+ }
93
+ catch { /* not found */ }
94
+ }
95
+ if (resolvedBin !== bin)
96
+ break;
97
+ }
98
+ if (resolvedBin === bin)
99
+ useShell = true; // fallback
100
+ }
101
+ const proc = spawnSync(resolvedBin, resolvedArgs, {
102
+ cwd: options.cwd,
103
+ env: mergedEnv,
104
+ encoding: 'utf-8',
105
+ timeout: 30_000,
106
+ stdio: [options.stdin ? 'pipe' : 'ignore', 'pipe', 'pipe'],
107
+ input: options.stdin,
108
+ shell: useShell,
109
+ });
110
+ if (proc.error) {
111
+ throw new Error(`${bin} failed to start: ${proc.error.message}`);
112
+ }
113
+ if (proc.stderr && options.verbose) {
114
+ console.error(`[bridge-hooks] child stderr: ${proc.stderr.substring(0, 500)}`);
115
+ }
116
+ if (proc.status !== 0) {
117
+ throw new Error(`${bin} exited with ${proc.status}: ${proc.stderr || proc.stdout}`);
118
+ }
119
+ return proc.stdout;
120
+ }
121
+ async function getHookSupportLevel(harness, hookName) {
122
+ const support = getHookSupport(harness, 'nonInteractive');
123
+ return support?.[hookName];
124
+ }
125
+ function parseJsonOutput(output) {
126
+ try {
127
+ return JSON.parse(output.trim());
128
+ }
129
+ catch {
130
+ return null;
131
+ }
132
+ }
133
+ // ---------------------------------------------------------------------------
134
+ // BridgeHookEmulator
135
+ // ---------------------------------------------------------------------------
136
+ export class BridgeHookEmulator {
137
+ ctx;
138
+ babysitterBin;
139
+ hooksMuxBin;
140
+ adapter;
141
+ runId;
142
+ constructor(ctx) {
143
+ this.ctx = ctx;
144
+ this.babysitterBin = resolveBabysitterBin(ctx.env);
145
+ this.hooksMuxBin = resolveHooksMuxBin(ctx.env);
146
+ this.adapter = harnessToAdapter(ctx.harness);
147
+ }
148
+ /**
149
+ * Invoke a hook event through hooks-adapter with explicit handler commands.
150
+ *
151
+ * The bridge emulator passes handler commands directly via --handler flags,
152
+ * since there's no harness runtime to read the hook config from. The
153
+ * handlers are the same scripts that the plugin.json defines for each event.
154
+ *
155
+ * Falls back to direct babysitter CLI if hooks-adapter is not available.
156
+ */
157
+ async invokeHookEvent(nativeEvent) {
158
+ const hookType = nativeEvent === 'SessionStart' ? 'session-start'
159
+ : nativeEvent === 'Stop' ? 'stop'
160
+ : nativeEvent === 'SessionEnd' ? 'session-end'
161
+ : nativeEvent.toLowerCase().replace(/([A-Z])/g, '-$1').replace(/^-/, '');
162
+ // Build the babysitter hook:run command that the hook script would call.
163
+ // The generated plugin scripts use --harness unified for session hooks.
164
+ const sdkHarness = hookType === 'session-start' || hookType === 'session-end'
165
+ ? 'unified'
166
+ : harnessToSdkHarness(this.ctx.harness);
167
+ const babysitterCmd = [
168
+ this.babysitterBin,
169
+ 'hook:run',
170
+ '--hook-type', hookType,
171
+ '--harness', sdkHarness,
172
+ '--json',
173
+ ];
174
+ if (this.ctx.runsDir) {
175
+ babysitterCmd.push('--runs-dir', this.ctx.runsDir);
176
+ }
177
+ // Prepend critical env vars to handler command so they reach babysitter
178
+ // through the hooks-adapter subprocess chain (env may not propagate).
179
+ const envParts = [];
180
+ if (this.ctx.sessionId)
181
+ envParts.push(`AGENT_SESSION_ID=${this.ctx.sessionId}`);
182
+ if (this.ctx.env['LIVE_STACK_TRACE_ID'])
183
+ envParts.push(`LIVE_STACK_TRACE_ID=${this.ctx.env['LIVE_STACK_TRACE_ID']}`);
184
+ if (this.ctx.runsDir)
185
+ envParts.push(`BABYSITTER_RUNS_DIR=${this.ctx.runsDir}`);
186
+ envParts.push(`LIVE_STACK_CWD=${this.ctx.cwd}`);
187
+ const envPrefix = envParts.length > 0 ? envParts.join(' ') + ' ' : '';
188
+ const handlerCommand = envPrefix + babysitterCmd.join(' ');
189
+ if (this.ctx.verbose) {
190
+ console.error(`[bridge-hooks] invokeHookEvent(${nativeEvent}): hooksMuxBin=${this.hooksMuxBin}, adapter=${this.adapter}`);
191
+ }
192
+ try {
193
+ const args = [
194
+ 'invoke',
195
+ '--adapter', this.adapter,
196
+ '--native-event', nativeEvent,
197
+ '--handler', `${handlerCommand}:babysitter-${hookType}`,
198
+ '--json',
199
+ ];
200
+ if (this.ctx.verbose) {
201
+ console.error(`[bridge-hooks] exec: ${this.hooksMuxBin} ${args.join(' ')}`);
202
+ }
203
+ const hookEnv = { ...this.ctx.env };
204
+ if (this.ctx.sessionId && !hookEnv['AGENT_SESSION_ID']) {
205
+ hookEnv['AGENT_SESSION_ID'] = this.ctx.sessionId;
206
+ }
207
+ const result = await execCommand(this.hooksMuxBin, args, {
208
+ cwd: this.ctx.cwd,
209
+ env: hookEnv,
210
+ verbose: this.ctx.verbose,
211
+ stdin: JSON.stringify({ event: nativeEvent }),
212
+ });
213
+ if (this.ctx.verbose) {
214
+ console.error(`[bridge-hooks] hooks-adapter invoke succeeded for ${nativeEvent}`);
215
+ }
216
+ return result;
217
+ }
218
+ catch (err) {
219
+ const msg = err instanceof Error ? err.message : String(err);
220
+ console.error(`[bridge-hooks] hooks-adapter invoke FAILED (${nativeEvent}): ${msg}`);
221
+ // Fallback: direct babysitter hook:run
222
+ console.error(`[bridge-hooks] falling back to: ${this.babysitterBin} ${babysitterCmd.slice(1).join(' ')}`);
223
+ const fallbackEnv = { ...this.ctx.env };
224
+ if (this.ctx.sessionId && !fallbackEnv['AGENT_SESSION_ID']) {
225
+ fallbackEnv['AGENT_SESSION_ID'] = this.ctx.sessionId;
226
+ }
227
+ return await execCommand(this.babysitterBin, babysitterCmd.slice(1), {
228
+ cwd: this.ctx.cwd,
229
+ env: fallbackEnv,
230
+ verbose: this.ctx.verbose,
231
+ });
232
+ }
233
+ }
234
+ /**
235
+ * Emulate the session-start lifecycle hook.
236
+ *
237
+ * Invokes hooks-adapter with the SessionStart event, which reads the
238
+ * harness's hook configuration and runs all registered session-start
239
+ * handlers from all installed plugins.
240
+ */
241
+ async emulateSessionStart() {
242
+ const level = await getHookSupportLevel(this.ctx.harness, 'sessionStart');
243
+ if (level === 'native') {
244
+ return { emulated: false };
245
+ }
246
+ if (level === 'unsupported' || level === 'emulated' || level === undefined) {
247
+ try {
248
+ const output = await this.invokeHookEvent('SessionStart');
249
+ const result = parseJsonOutput(output);
250
+ if (result?.runId) {
251
+ this.runId = result.runId;
252
+ }
253
+ if (this.ctx.verbose) {
254
+ console.error(`[bridge-hooks] session-start emulated, runId=${this.runId ?? 'none'}`);
255
+ }
256
+ return { runId: this.runId, emulated: true };
257
+ }
258
+ catch (err) {
259
+ if (this.ctx.verbose) {
260
+ const msg = err instanceof Error ? err.message : String(err);
261
+ console.error(`[bridge-hooks] session-start emulation failed: ${msg}`);
262
+ }
263
+ return { emulated: true };
264
+ }
265
+ }
266
+ return { emulated: false };
267
+ }
268
+ /**
269
+ * Emulate the stop lifecycle hook.
270
+ *
271
+ * Invokes hooks-adapter with the Stop event, then queries run status.
272
+ */
273
+ async emulateStop(runId) {
274
+ const effectiveRunId = runId ?? this.runId;
275
+ const level = await getHookSupportLevel(this.ctx.harness, 'stop');
276
+ if (level === 'native') {
277
+ return { shouldContinue: false, emulated: false };
278
+ }
279
+ if (!effectiveRunId) {
280
+ if (this.ctx.verbose) {
281
+ console.error('[bridge-hooks] stop: no runId available, cannot check run state');
282
+ }
283
+ return { shouldContinue: false, emulated: true };
284
+ }
285
+ if (level === 'unsupported' || level === 'emulated' || level === undefined) {
286
+ try {
287
+ // Invoke the Stop hook through hooks-adapter (all plugins)
288
+ try {
289
+ await this.invokeHookEvent('Stop');
290
+ }
291
+ catch {
292
+ // stop hook may fail if no active run — continue to status check
293
+ }
294
+ // Query run status to decide whether to continue
295
+ const runDir = this.ctx.runsDir
296
+ ? `${this.ctx.runsDir}/${effectiveRunId}`
297
+ : effectiveRunId;
298
+ const statusOutput = await execCommand(this.babysitterBin, ['run:status', runDir, '--json'], {
299
+ cwd: this.ctx.cwd,
300
+ env: this.ctx.env,
301
+ verbose: this.ctx.verbose,
302
+ });
303
+ const status = parseJsonOutput(statusOutput);
304
+ if (!status) {
305
+ if (this.ctx.verbose) {
306
+ console.error('[bridge-hooks] stop: failed to parse run:status output');
307
+ }
308
+ return { shouldContinue: false, emulated: true };
309
+ }
310
+ const isCompleted = status.state === 'completed';
311
+ const hasPending = (status.pendingEffectsSummary?.totalPending ?? 0) > 0;
312
+ const needsMore = status.needsMoreIterations === true;
313
+ const shouldContinue = !isCompleted && (hasPending || needsMore);
314
+ if (this.ctx.verbose) {
315
+ console.error(`[bridge-hooks] stop: state=${status.state}, pending=${hasPending}, ` +
316
+ `needsMore=${needsMore}, shouldContinue=${shouldContinue}`);
317
+ }
318
+ return {
319
+ shouldContinue,
320
+ resumeId: shouldContinue ? this.ctx.sessionId : undefined,
321
+ emulated: true,
322
+ };
323
+ }
324
+ catch (err) {
325
+ if (this.ctx.verbose) {
326
+ const msg = err instanceof Error ? err.message : String(err);
327
+ console.error(`[bridge-hooks] stop emulation failed: ${msg}`);
328
+ }
329
+ return { shouldContinue: false, emulated: true };
330
+ }
331
+ }
332
+ return { shouldContinue: false, emulated: false };
333
+ }
334
+ /**
335
+ * Emulate the session-end lifecycle hook.
336
+ */
337
+ async emulateSessionEnd() {
338
+ const level = await getHookSupportLevel(this.ctx.harness, 'sessionEnd');
339
+ if (level === 'native') {
340
+ return;
341
+ }
342
+ if (level === 'unsupported' || level === 'emulated' || level === undefined) {
343
+ try {
344
+ await this.invokeHookEvent('SessionEnd');
345
+ if (this.ctx.verbose) {
346
+ console.error('[bridge-hooks] session-end emulated');
347
+ }
348
+ }
349
+ catch (err) {
350
+ if (this.ctx.verbose) {
351
+ const msg = err instanceof Error ? err.message : String(err);
352
+ console.error(`[bridge-hooks] session-end emulation failed: ${msg}`);
353
+ }
354
+ }
355
+ }
356
+ }
357
+ /** Return the current run ID, if one was created during session-start. */
358
+ getRunId() {
359
+ return this.runId;
360
+ }
361
+ }
362
+ //# sourceMappingURL=bridge-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-hooks.js","sourceRoot":"","sources":["../src/bridge-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Lightweight CLI helper utilities extracted from adapters-cli.
3
+ *
4
+ * These are self-contained copies of the flag-parsing helpers, exit codes,
5
+ * and output helpers that the launch module needs, avoiding a circular
6
+ * dependency back to the CLI package.
7
+ */
8
+ export type { ParsedArgs, FlagDef } from './types.js';
9
+ /** CLI exit code constants. */
10
+ export declare const ExitCode: {
11
+ readonly SUCCESS: 0;
12
+ readonly GENERAL_ERROR: 1;
13
+ readonly USAGE_ERROR: 2;
14
+ readonly AGENT_NOT_FOUND: 3;
15
+ readonly AGENT_NOT_INSTALLED: 4;
16
+ readonly AUTH_ERROR: 5;
17
+ readonly CAPABILITY_ERROR: 6;
18
+ readonly CONFIG_ERROR: 7;
19
+ readonly SESSION_NOT_FOUND: 8;
20
+ readonly PROFILE_NOT_FOUND: 9;
21
+ readonly PLUGIN_ERROR: 10;
22
+ readonly TIMEOUT: 11;
23
+ readonly AGENT_CRASHED: 12;
24
+ readonly ABORTED: 13;
25
+ readonly RATE_LIMITED: 14;
26
+ readonly CONTEXT_EXCEEDED: 15;
27
+ };
28
+ export type ExitCodeValue = (typeof ExitCode)[keyof typeof ExitCode];
29
+ /**
30
+ * Get a flag value as a string, or undefined.
31
+ */
32
+ export declare function flagStr(flags: Record<string, string | boolean | string[]>, name: string): string | undefined;
33
+ /**
34
+ * Get a flag value as a number, or undefined.
35
+ */
36
+ export declare function flagNum(flags: Record<string, string | boolean | string[]>, name: string): number | undefined;
37
+ /**
38
+ * Get a flag value as a boolean.
39
+ */
40
+ export declare function flagBool(flags: Record<string, string | boolean | string[]>, name: string): boolean | undefined;
41
+ /**
42
+ * Get a flag value as a string array (for repeatable flags).
43
+ */
44
+ export declare function flagArr(flags: Record<string, string | boolean | string[]>, name: string): string[];
45
+ /**
46
+ * Print a JSON-wrapped error response to stdout.
47
+ */
48
+ export declare function printJsonError(code: string, message: string, recoverable?: boolean): void;
49
+ /**
50
+ * Print an error message to stderr.
51
+ */
52
+ export declare function printError(message: string): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.d.ts","sourceRoot":"","sources":["../src/cli-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMtD,+BAA+B;AAC/B,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAMrE;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5G;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM5G;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAM9G;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKlG;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,IAAI,CAEhG;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Lightweight CLI helper utilities extracted from adapters-cli.
3
+ *
4
+ * These are self-contained copies of the flag-parsing helpers, exit codes,
5
+ * and output helpers that the launch module needs, avoiding a circular
6
+ * dependency back to the CLI package.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Exit codes
10
+ // ---------------------------------------------------------------------------
11
+ /** CLI exit code constants. */
12
+ export const ExitCode = {
13
+ SUCCESS: 0,
14
+ GENERAL_ERROR: 1,
15
+ USAGE_ERROR: 2,
16
+ AGENT_NOT_FOUND: 3,
17
+ AGENT_NOT_INSTALLED: 4,
18
+ AUTH_ERROR: 5,
19
+ CAPABILITY_ERROR: 6,
20
+ CONFIG_ERROR: 7,
21
+ SESSION_NOT_FOUND: 8,
22
+ PROFILE_NOT_FOUND: 9,
23
+ PLUGIN_ERROR: 10,
24
+ TIMEOUT: 11,
25
+ AGENT_CRASHED: 12,
26
+ ABORTED: 13,
27
+ RATE_LIMITED: 14,
28
+ CONTEXT_EXCEEDED: 15,
29
+ };
30
+ // ---------------------------------------------------------------------------
31
+ // Flag helpers
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Get a flag value as a string, or undefined.
35
+ */
36
+ export function flagStr(flags, name) {
37
+ const val = flags[name];
38
+ if (typeof val === 'string')
39
+ return val;
40
+ if (Array.isArray(val) && val.length > 0)
41
+ return val[val.length - 1];
42
+ return undefined;
43
+ }
44
+ /**
45
+ * Get a flag value as a number, or undefined.
46
+ */
47
+ export function flagNum(flags, name) {
48
+ const s = flagStr(flags, name);
49
+ if (s === undefined)
50
+ return undefined;
51
+ const n = Number(s);
52
+ if (Number.isNaN(n))
53
+ return undefined;
54
+ return n;
55
+ }
56
+ /**
57
+ * Get a flag value as a boolean.
58
+ */
59
+ export function flagBool(flags, name) {
60
+ const val = flags[name];
61
+ if (typeof val === 'boolean')
62
+ return val;
63
+ if (val === 'true')
64
+ return true;
65
+ if (val === 'false')
66
+ return false;
67
+ return undefined;
68
+ }
69
+ /**
70
+ * Get a flag value as a string array (for repeatable flags).
71
+ */
72
+ export function flagArr(flags, name) {
73
+ const val = flags[name];
74
+ if (Array.isArray(val))
75
+ return val;
76
+ if (typeof val === 'string')
77
+ return [val];
78
+ return [];
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Output helpers
82
+ // ---------------------------------------------------------------------------
83
+ /**
84
+ * Print a JSON-wrapped error response to stdout.
85
+ */
86
+ export function printJsonError(code, message, recoverable = false) {
87
+ process.stdout.write(JSON.stringify({ ok: false, error: { code, message, recoverable } }, null, 2) + '\n');
88
+ }
89
+ /**
90
+ * Print an error message to stderr.
91
+ */
92
+ export function printError(message) {
93
+ process.stderr.write('Error: ' + message + '\n');
94
+ }
95
+ //# sourceMappingURL=cli-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-helpers.js","sourceRoot":"","sources":["../src/cli-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Backward-compatibility re-exports.
3
+ *
4
+ * The completion engine implementations now live in @a5c-ai/transport-adapter.
5
+ * This module re-exports them so existing import paths continue to work.
6
+ */
7
+ export { createOpenAICompletionEngine, createGoogleCompletionEngine, createAnthropicCompletionEngine } from '@a5c-ai/transport-adapter';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-engine.d.ts","sourceRoot":"","sources":["../src/completion-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Backward-compatibility re-exports.
3
+ *
4
+ * The completion engine implementations now live in @a5c-ai/transport-adapter.
5
+ * This module re-exports them so existing import paths continue to work.
6
+ */
7
+ export { createOpenAICompletionEngine, createGoogleCompletionEngine, createAnthropicCompletionEngine } from '@a5c-ai/transport-adapter';
8
+ //# sourceMappingURL=completion-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-engine.js","sourceRoot":"","sources":["../src/completion-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @a5c-ai/launch-adapter
3
+ *
4
+ * Launch orchestration for adapters: plan resolution, proxy setup,
5
+ * harness spawning, bridge hooks, and completion engines.
6
+ */
7
+ export { launchCommand, resolveLaunchPlan, LAUNCH_FLAGS, PROMPT_ARTIFACT_MONITOR_TIMEOUT_MS, } from './launch.js';
8
+ export type { LaunchPlanInput, ProxyPlan, LaunchPlan, } from './launch.js';
9
+ export { BridgeHookEmulator, } from './bridge-hooks.js';
10
+ export type { BridgeHookContext, SessionStartResult, StopResult, } from './bridge-hooks.js';
11
+ export { createOpenAICompletionEngine, createGoogleCompletionEngine, } from './completion-engine.js';
12
+ export { ExitCode, flagStr, flagNum, flagBool, flagArr, printError, printJsonError, } from './cli-helpers.js';
13
+ export type { ExitCodeValue, } from './cli-helpers.js';
14
+ export type { FlagDef, ParsedArgs, SessionArgs, } from './types.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,kCAAkC,GACnC,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,eAAe,EACf,SAAS,EACT,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,UAAU,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC"}