@a5c-ai/adapters-codecs 5.1.1-staging.52898ebfc24f
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/LICENSE +21 -0
- package/README.md +28 -0
- package/dist/adapter-install.d.ts +20 -0
- package/dist/adapter-install.d.ts.map +1 -0
- package/dist/adapter-install.js +134 -0
- package/dist/adapter-install.js.map +1 -0
- package/dist/adapters-remote-adapter.d.ts +66 -0
- package/dist/adapters-remote-adapter.d.ts.map +1 -0
- package/dist/adapters-remote-adapter.js +292 -0
- package/dist/adapters-remote-adapter.js.map +1 -0
- package/dist/amp-adapter.d.ts +32 -0
- package/dist/amp-adapter.d.ts.map +1 -0
- package/dist/amp-adapter.js +417 -0
- package/dist/amp-adapter.js.map +1 -0
- package/dist/auth-config.d.ts +44 -0
- package/dist/auth-config.d.ts.map +1 -0
- package/dist/auth-config.js +167 -0
- package/dist/auth-config.js.map +1 -0
- package/dist/babysitter-adapter.d.ts +29 -0
- package/dist/babysitter-adapter.d.ts.map +1 -0
- package/dist/babysitter-adapter.js +335 -0
- package/dist/babysitter-adapter.js.map +1 -0
- package/dist/base-adapter-helpers.d.ts +7 -0
- package/dist/base-adapter-helpers.d.ts.map +1 -0
- package/dist/base-adapter-helpers.js +68 -0
- package/dist/base-adapter-helpers.js.map +1 -0
- package/dist/base-adapter.d.ts +157 -0
- package/dist/base-adapter.d.ts.map +1 -0
- package/dist/base-adapter.js +552 -0
- package/dist/base-adapter.js.map +1 -0
- package/dist/claude-adapter.d.ts +63 -0
- package/dist/claude-adapter.d.ts.map +1 -0
- package/dist/claude-adapter.js +546 -0
- package/dist/claude-adapter.js.map +1 -0
- package/dist/claude-agent-sdk-adapter.d.ts +40 -0
- package/dist/claude-agent-sdk-adapter.d.ts.map +1 -0
- package/dist/claude-agent-sdk-adapter.js +843 -0
- package/dist/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts +11 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.js +153 -0
- package/dist/claude-code/runtime-hooks/ephemeral-config.js.map +1 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts +9 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.js +89 -0
- package/dist/claude-code/runtime-hooks/hook-socket-server.js.map +1 -0
- package/dist/claude-code/runtime-hooks/lifecycle.d.ts +2 -0
- package/dist/claude-code/runtime-hooks/lifecycle.d.ts.map +1 -0
- package/dist/claude-code/runtime-hooks/lifecycle.js +24 -0
- package/dist/claude-code/runtime-hooks/lifecycle.js.map +1 -0
- package/dist/claude-remote-control-adapter.d.ts +43 -0
- package/dist/claude-remote-control-adapter.d.ts.map +1 -0
- package/dist/claude-remote-control-adapter.js +509 -0
- package/dist/claude-remote-control-adapter.js.map +1 -0
- package/dist/codex-adapter.d.ts +26 -0
- package/dist/codex-adapter.d.ts.map +1 -0
- package/dist/codex-adapter.js +336 -0
- package/dist/codex-adapter.js.map +1 -0
- package/dist/codex-sdk-adapter.d.ts +32 -0
- package/dist/codex-sdk-adapter.d.ts.map +1 -0
- package/dist/codex-sdk-adapter.js +392 -0
- package/dist/codex-sdk-adapter.js.map +1 -0
- package/dist/codex-sdk-mocks.d.ts +50 -0
- package/dist/codex-sdk-mocks.d.ts.map +1 -0
- package/dist/codex-sdk-mocks.js +97 -0
- package/dist/codex-sdk-mocks.js.map +1 -0
- package/dist/codex-websocket-adapter.d.ts +34 -0
- package/dist/codex-websocket-adapter.d.ts.map +1 -0
- package/dist/codex-websocket-adapter.js +402 -0
- package/dist/codex-websocket-adapter.js.map +1 -0
- package/dist/codex-websocket-connection.d.ts +77 -0
- package/dist/codex-websocket-connection.d.ts.map +1 -0
- package/dist/codex-websocket-connection.js +733 -0
- package/dist/codex-websocket-connection.js.map +1 -0
- package/dist/copilot-adapter.d.ts +27 -0
- package/dist/copilot-adapter.d.ts.map +1 -0
- package/dist/copilot-adapter.js +224 -0
- package/dist/copilot-adapter.js.map +1 -0
- package/dist/cursor-adapter.d.ts +32 -0
- package/dist/cursor-adapter.d.ts.map +1 -0
- package/dist/cursor-adapter.js +239 -0
- package/dist/cursor-adapter.js.map +1 -0
- package/dist/droid-adapter.d.ts +32 -0
- package/dist/droid-adapter.d.ts.map +1 -0
- package/dist/droid-adapter.js +383 -0
- package/dist/droid-adapter.js.map +1 -0
- package/dist/gemini-adapter.d.ts +38 -0
- package/dist/gemini-adapter.d.ts.map +1 -0
- package/dist/gemini-adapter.js +270 -0
- package/dist/gemini-adapter.js.map +1 -0
- package/dist/hermes-adapter.d.ts +33 -0
- package/dist/hermes-adapter.d.ts.map +1 -0
- package/dist/hermes-adapter.js +269 -0
- package/dist/hermes-adapter.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-plugins.d.ts +14 -0
- package/dist/mcp-plugins.d.ts.map +1 -0
- package/dist/mcp-plugins.js +97 -0
- package/dist/mcp-plugins.js.map +1 -0
- package/dist/omp-adapter.d.ts +26 -0
- package/dist/omp-adapter.d.ts.map +1 -0
- package/dist/omp-adapter.js +203 -0
- package/dist/omp-adapter.js.map +1 -0
- package/dist/openclaw-adapter.d.ts +32 -0
- package/dist/openclaw-adapter.d.ts.map +1 -0
- package/dist/openclaw-adapter.js +220 -0
- package/dist/openclaw-adapter.js.map +1 -0
- package/dist/opencode-adapter.d.ts +32 -0
- package/dist/opencode-adapter.d.ts.map +1 -0
- package/dist/opencode-adapter.js +315 -0
- package/dist/opencode-adapter.js.map +1 -0
- package/dist/opencode-http-adapter.d.ts +43 -0
- package/dist/opencode-http-adapter.d.ts.map +1 -0
- package/dist/opencode-http-adapter.js +378 -0
- package/dist/opencode-http-adapter.js.map +1 -0
- package/dist/opencode-http-connection.d.ts +32 -0
- package/dist/opencode-http-connection.d.ts.map +1 -0
- package/dist/opencode-http-connection.js +198 -0
- package/dist/opencode-http-connection.js.map +1 -0
- package/dist/pi-adapter.d.ts +26 -0
- package/dist/pi-adapter.d.ts.map +1 -0
- package/dist/pi-adapter.js +204 -0
- package/dist/pi-adapter.js.map +1 -0
- package/dist/pi-sdk-adapter.d.ts +46 -0
- package/dist/pi-sdk-adapter.d.ts.map +1 -0
- package/dist/pi-sdk-adapter.js +557 -0
- package/dist/pi-sdk-adapter.js.map +1 -0
- package/dist/programmatic-adapter-base.d.ts +87 -0
- package/dist/programmatic-adapter-base.d.ts.map +1 -0
- package/dist/programmatic-adapter-base.js +169 -0
- package/dist/programmatic-adapter-base.js.map +1 -0
- package/dist/provider-translation.d.ts +9 -0
- package/dist/provider-translation.d.ts.map +1 -0
- package/dist/provider-translation.js +2 -0
- package/dist/provider-translation.js.map +1 -0
- package/dist/qwen-adapter.d.ts +38 -0
- package/dist/qwen-adapter.d.ts.map +1 -0
- package/dist/qwen-adapter.js +269 -0
- package/dist/qwen-adapter.js.map +1 -0
- package/dist/remote-adapter-base.d.ts +84 -0
- package/dist/remote-adapter-base.d.ts.map +1 -0
- package/dist/remote-adapter-base.js +100 -0
- package/dist/remote-adapter-base.js.map +1 -0
- package/dist/session-fs.d.ts +89 -0
- package/dist/session-fs.d.ts.map +1 -0
- package/dist/session-fs.js +722 -0
- package/dist/session-fs.js.map +1 -0
- package/dist/shared/runtime-hooks-virtual.d.ts +2 -0
- package/dist/shared/runtime-hooks-virtual.d.ts.map +1 -0
- package/dist/shared/runtime-hooks-virtual.js +13 -0
- package/dist/shared/runtime-hooks-virtual.js.map +1 -0
- package/dist/translate-for-harness.d.ts +8 -0
- package/dist/translate-for-harness.d.ts.map +1 -0
- package/dist/translate-for-harness.js +89 -0
- package/dist/translate-for-harness.js.map +1 -0
- package/dist/translations/claude-translation.d.ts +3 -0
- package/dist/translations/claude-translation.d.ts.map +1 -0
- package/dist/translations/claude-translation.js +53 -0
- package/dist/translations/claude-translation.js.map +1 -0
- package/dist/translations/codex-translation.d.ts +3 -0
- package/dist/translations/codex-translation.d.ts.map +1 -0
- package/dist/translations/codex-translation.js +54 -0
- package/dist/translations/codex-translation.js.map +1 -0
- package/dist/translations/gemini-translation.d.ts +3 -0
- package/dist/translations/gemini-translation.d.ts.map +1 -0
- package/dist/translations/gemini-translation.js +45 -0
- package/dist/translations/gemini-translation.js.map +1 -0
- package/dist/translations/generic-openai-translation.d.ts +3 -0
- package/dist/translations/generic-openai-translation.d.ts.map +1 -0
- package/dist/translations/generic-openai-translation.js +47 -0
- package/dist/translations/generic-openai-translation.js.map +1 -0
- package/dist/translations/opencode-translation.d.ts +3 -0
- package/dist/translations/opencode-translation.d.ts.map +1 -0
- package/dist/translations/opencode-translation.js +48 -0
- package/dist/translations/opencode-translation.js.map +1 -0
- package/dist/translations/pi-translation.d.ts +3 -0
- package/dist/translations/pi-translation.d.ts.map +1 -0
- package/dist/translations/pi-translation.js +43 -0
- package/dist/translations/pi-translation.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BabysitterAdapter — Babysitter orchestration harness adapter.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the `agent-platform` CLI (`invoke` / `call`) and
|
|
5
|
+
* parses its JSONL output into normalized AgentEvent streams.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentCapabilities, ModelCapabilities, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, SpawnArgs, ParseContext, RunOptions, AgentEvent, AgentConfig } from '@a5c-ai/comm-adapter';
|
|
8
|
+
import { BaseAgentAdapter } from './base-adapter.js';
|
|
9
|
+
export declare class BabysitterAdapter extends BaseAgentAdapter {
|
|
10
|
+
readonly agent: string;
|
|
11
|
+
readonly displayName = "Babysitter";
|
|
12
|
+
readonly cliCommand: string;
|
|
13
|
+
readonly minVersion = "0.1.0";
|
|
14
|
+
constructor(agent?: string, cliCommand?: string);
|
|
15
|
+
readonly hostEnvSignals: readonly ["BABYSITTER_SESSION_ID", "AGENT_SESSION_ID"];
|
|
16
|
+
readonly capabilities: AgentCapabilities;
|
|
17
|
+
readonly models: ModelCapabilities[];
|
|
18
|
+
readonly defaultModelId: undefined;
|
|
19
|
+
readonly configSchema: AgentConfigSchema;
|
|
20
|
+
buildSpawnArgs(options: RunOptions): SpawnArgs;
|
|
21
|
+
parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
|
|
22
|
+
detectAuth(): Promise<AuthState>;
|
|
23
|
+
getAuthGuidance(): AuthSetupGuidance;
|
|
24
|
+
sessionDir(cwd?: string): string;
|
|
25
|
+
parseSessionFile(filePath: string): Promise<Session>;
|
|
26
|
+
listSessionFiles(cwd?: string): Promise<string[]>;
|
|
27
|
+
readConfig(_cwd?: string): Promise<AgentConfig>;
|
|
28
|
+
writeConfig(config: Partial<AgentConfig>, _cwd?: string): Promise<void>;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babysitter-adapter.d.ts","sourceRoot":"","sources":["../src/babysitter-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,gBAAgB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,WAAW;gBAElB,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAK/C,QAAQ,CAAC,cAAc,yDAA0D;IAEjF,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAwDtC;IAIF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAM;IAE1C,QAAQ,CAAC,cAAc,YAAa;IAEpC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAUtC;IAEF,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS;IAsD9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IAmI3E,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;IActC,eAAe,IAAI,iBAAiB;IAcpC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBpD,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBjD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI/C,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI9E"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BabysitterAdapter — Babysitter orchestration harness adapter.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the `agent-platform` CLI (`invoke` / `call`) and
|
|
5
|
+
* parses its JSONL output into normalized AgentEvent streams.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { existsSync } from 'node:fs';
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
import { BaseAgentAdapter } from './base-adapter.js';
|
|
11
|
+
export class BabysitterAdapter extends BaseAgentAdapter {
|
|
12
|
+
agent;
|
|
13
|
+
displayName = 'Babysitter';
|
|
14
|
+
cliCommand;
|
|
15
|
+
minVersion = '0.1.0';
|
|
16
|
+
constructor(agent, cliCommand) {
|
|
17
|
+
super();
|
|
18
|
+
this.agent = agent ?? 'babysitter';
|
|
19
|
+
this.cliCommand = cliCommand ?? 'agent-platform';
|
|
20
|
+
}
|
|
21
|
+
hostEnvSignals = ['BABYSITTER_SESSION_ID', 'AGENT_SESSION_ID'];
|
|
22
|
+
capabilities = {
|
|
23
|
+
agent: 'babysitter',
|
|
24
|
+
canResume: true,
|
|
25
|
+
canFork: false,
|
|
26
|
+
supportsMultiTurn: true,
|
|
27
|
+
sessionPersistence: 'file',
|
|
28
|
+
supportsTextStreaming: true,
|
|
29
|
+
supportsToolCallStreaming: false,
|
|
30
|
+
supportsThinkingStreaming: false,
|
|
31
|
+
supportsNativeTools: false,
|
|
32
|
+
supportsMCP: true,
|
|
33
|
+
supportsParallelToolCalls: false,
|
|
34
|
+
requiresToolApproval: true,
|
|
35
|
+
approvalModes: ['yolo', 'prompt'],
|
|
36
|
+
runtimeHooks: {
|
|
37
|
+
preToolUse: 'unsupported',
|
|
38
|
+
postToolUse: 'unsupported',
|
|
39
|
+
sessionStart: 'unsupported',
|
|
40
|
+
sessionEnd: 'unsupported',
|
|
41
|
+
stop: 'unsupported',
|
|
42
|
+
userPromptSubmit: 'unsupported',
|
|
43
|
+
},
|
|
44
|
+
supportsThinking: false,
|
|
45
|
+
thinkingEffortLevels: [],
|
|
46
|
+
supportsThinkingBudgetTokens: false,
|
|
47
|
+
supportsJsonMode: true,
|
|
48
|
+
supportsStructuredOutput: false,
|
|
49
|
+
structuredSessionTransport: 'persistent',
|
|
50
|
+
sessionControlPlane: 'self-managed',
|
|
51
|
+
supportsSkills: true,
|
|
52
|
+
supportsAgentsMd: false,
|
|
53
|
+
skillsFormat: 'directory',
|
|
54
|
+
supportsSubagentDispatch: true,
|
|
55
|
+
supportsParallelExecution: true,
|
|
56
|
+
maxParallelTasks: 4,
|
|
57
|
+
supportsInteractiveMode: true,
|
|
58
|
+
supportsStdinInjection: true,
|
|
59
|
+
supportsImageInput: false,
|
|
60
|
+
supportsImageOutput: false,
|
|
61
|
+
supportsFileAttachments: false,
|
|
62
|
+
supportsPlugins: true,
|
|
63
|
+
pluginFormats: ['skill-directory'],
|
|
64
|
+
pluginInstallCmd: 'babysitter plugin:install',
|
|
65
|
+
pluginListCmd: 'babysitter plugin:list-installed',
|
|
66
|
+
pluginUninstallCmd: 'babysitter plugin:uninstall',
|
|
67
|
+
pluginRegistries: [],
|
|
68
|
+
supportedPlatforms: ['darwin', 'linux', 'win32'],
|
|
69
|
+
requiresGitRepo: false,
|
|
70
|
+
requiresPty: false,
|
|
71
|
+
authMethods: [
|
|
72
|
+
{ type: 'api_key', name: 'CLI Presence', description: 'Babysitter delegates auth to the underlying harness' },
|
|
73
|
+
],
|
|
74
|
+
authFiles: [],
|
|
75
|
+
installMethods: [
|
|
76
|
+
{ platform: 'all', type: 'npm', command: 'npm install -g @a5c-ai/genty-platform' },
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
// Babysitter delegates model selection to the underlying harness.
|
|
80
|
+
// Models are determined by the harness babysitter invokes, not babysitter itself.
|
|
81
|
+
models = [];
|
|
82
|
+
defaultModelId = undefined;
|
|
83
|
+
configSchema = {
|
|
84
|
+
agent: 'babysitter',
|
|
85
|
+
version: 1,
|
|
86
|
+
fields: [
|
|
87
|
+
{ key: 'defaultHarness', label: 'Default harness', type: 'string', default: 'claude-code' },
|
|
88
|
+
{ key: 'maxIterations', label: 'Max iterations', type: 'number', default: 256 },
|
|
89
|
+
{ key: 'runsDir', label: 'Runs directory', type: 'string', default: '~/.a5c/runs' },
|
|
90
|
+
],
|
|
91
|
+
configFormat: 'json',
|
|
92
|
+
supportsProjectConfig: true,
|
|
93
|
+
};
|
|
94
|
+
buildSpawnArgs(options) {
|
|
95
|
+
const args = [];
|
|
96
|
+
const harness = options.env?.['BABYSITTER_HARNESS'] || 'claude-code';
|
|
97
|
+
const prompt = this.normalizePrompt(options.prompt);
|
|
98
|
+
const sessionId = this.resolveSessionId(options);
|
|
99
|
+
if (options.maxTurns && options.maxTurns > 1) {
|
|
100
|
+
args.push('create-run');
|
|
101
|
+
args.push('--harness', harness);
|
|
102
|
+
args.push('--prompt', prompt);
|
|
103
|
+
if (options.maxTurns) {
|
|
104
|
+
args.push('--max-iterations', String(options.maxTurns));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
args.push('invoke', harness);
|
|
109
|
+
args.push('--prompt', prompt);
|
|
110
|
+
}
|
|
111
|
+
if (options.cwd) {
|
|
112
|
+
args.push('--workspace', options.cwd);
|
|
113
|
+
}
|
|
114
|
+
if (options.model) {
|
|
115
|
+
args.push('--model', options.model);
|
|
116
|
+
}
|
|
117
|
+
if (sessionId) {
|
|
118
|
+
args.push('--run-id', sessionId);
|
|
119
|
+
}
|
|
120
|
+
if (options.nonInteractive || options.approvalMode === 'yolo') {
|
|
121
|
+
args.push('--non-interactive');
|
|
122
|
+
}
|
|
123
|
+
args.push('--output-format', 'adapters-events');
|
|
124
|
+
const timeout = options.timeout || 120000;
|
|
125
|
+
return {
|
|
126
|
+
command: this.cliCommand,
|
|
127
|
+
args,
|
|
128
|
+
env: {
|
|
129
|
+
...this.buildEnvFromOptions(options),
|
|
130
|
+
AGENT_SESSION_ID: sessionId || '',
|
|
131
|
+
BABYSITTER_MAX_ITERATIONS: String(options.maxTurns || 256),
|
|
132
|
+
},
|
|
133
|
+
cwd: options.cwd ?? process.cwd(),
|
|
134
|
+
usePty: false,
|
|
135
|
+
closeStdinAfterSpawn: true,
|
|
136
|
+
timeout,
|
|
137
|
+
inactivityTimeout: options.inactivityTimeout,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
parseEvent(line, context) {
|
|
141
|
+
const parsed = this.parseJsonLine(line);
|
|
142
|
+
if (parsed == null || typeof parsed !== 'object') {
|
|
143
|
+
// Not JSON — treat as plaintext output
|
|
144
|
+
return context.outputFormat === 'text' ? this.parsePlaintextEvent(line, context) : null;
|
|
145
|
+
}
|
|
146
|
+
const obj = parsed;
|
|
147
|
+
const ts = Date.now();
|
|
148
|
+
const base = { runId: context.runId, agent: this.agent, timestamp: ts };
|
|
149
|
+
// babysitter outputs structured JSON with a 'type' field
|
|
150
|
+
// matching adapters event types when --output-format adapters-events is used
|
|
151
|
+
if (obj['type'] && obj['runId']) {
|
|
152
|
+
return obj;
|
|
153
|
+
}
|
|
154
|
+
const type = obj['type'];
|
|
155
|
+
// Session/run events
|
|
156
|
+
if (type === 'session_start' || type === 'run_started') {
|
|
157
|
+
return {
|
|
158
|
+
...base,
|
|
159
|
+
type: 'session_start',
|
|
160
|
+
sessionId: String(obj['sessionId'] ?? obj['runId'] ?? context.sessionId ?? ''),
|
|
161
|
+
resumed: Boolean(context.sessionId),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Text output
|
|
165
|
+
if (type === 'text_delta' || type === 'text' || type === 'message') {
|
|
166
|
+
const content = (obj['text'] ?? obj['delta'] ?? obj['content'] ?? '');
|
|
167
|
+
if (content) {
|
|
168
|
+
const accumulated = `${String(context.adapterState['__babysitterTextAccumulated'] ?? '')}${content}`;
|
|
169
|
+
context.adapterState['__babysitterTextAccumulated'] = accumulated;
|
|
170
|
+
return { ...base, type: 'text_delta', delta: content, accumulated };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Tool call events
|
|
174
|
+
if (type === 'tool_call_start' || type === 'tool_use') {
|
|
175
|
+
return {
|
|
176
|
+
...base,
|
|
177
|
+
type: 'tool_call_start',
|
|
178
|
+
toolCallId: String(obj['toolCallId'] ?? obj['id'] ?? ''),
|
|
179
|
+
toolName: String(obj['toolName'] ?? obj['name'] ?? ''),
|
|
180
|
+
inputAccumulated: JSON.stringify(obj['input'] ?? {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Tool result events
|
|
184
|
+
if (type === 'tool_result') {
|
|
185
|
+
return {
|
|
186
|
+
...base,
|
|
187
|
+
type: 'tool_result',
|
|
188
|
+
toolCallId: String(obj['toolCallId'] ?? obj['id'] ?? ''),
|
|
189
|
+
toolName: String(obj['toolName'] ?? obj['name'] ?? ''),
|
|
190
|
+
output: obj['output'] ?? '',
|
|
191
|
+
durationMs: 0,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// Error events
|
|
195
|
+
if (type === 'error') {
|
|
196
|
+
return {
|
|
197
|
+
...base,
|
|
198
|
+
type: 'error',
|
|
199
|
+
code: 'INTERNAL',
|
|
200
|
+
message: (obj['message'] ?? obj['error'] ?? 'Unknown babysitter error'),
|
|
201
|
+
recoverable: false,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// Cost events
|
|
205
|
+
if (type === 'cost') {
|
|
206
|
+
const cost = this.assembleCostRecord(obj['cost'] ?? obj);
|
|
207
|
+
if (cost) {
|
|
208
|
+
return { ...base, type: 'cost', cost };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Turn boundary events (iteration boundaries)
|
|
212
|
+
if (type === 'turn_start' || type === 'iteration_start') {
|
|
213
|
+
const nextTurnIndex = typeof context.adapterState['__babysitterTurnIndex'] === 'number'
|
|
214
|
+
? context.adapterState['__babysitterTurnIndex'] + 1
|
|
215
|
+
: 0;
|
|
216
|
+
context.adapterState['__babysitterTurnIndex'] = nextTurnIndex;
|
|
217
|
+
return {
|
|
218
|
+
...base,
|
|
219
|
+
type: 'turn_start',
|
|
220
|
+
turnIndex: nextTurnIndex,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (type === 'turn_end' || type === 'iteration_end') {
|
|
224
|
+
return {
|
|
225
|
+
...base,
|
|
226
|
+
type: 'turn_end',
|
|
227
|
+
turnIndex: typeof context.adapterState['__babysitterTurnIndex'] === 'number'
|
|
228
|
+
? context.adapterState['__babysitterTurnIndex']
|
|
229
|
+
: 0,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Legacy format: older babysitter harness invoke output
|
|
233
|
+
if (obj['status'] === 'completed') {
|
|
234
|
+
return {
|
|
235
|
+
...base,
|
|
236
|
+
type: 'session_end',
|
|
237
|
+
sessionId: String(context.sessionId ?? context.runId),
|
|
238
|
+
turnCount: typeof context.adapterState['__babysitterTurnIndex'] === 'number'
|
|
239
|
+
? context.adapterState['__babysitterTurnIndex'] + 1
|
|
240
|
+
: 0,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
// Session end
|
|
244
|
+
if (type === 'session_end' || type === 'run_completed') {
|
|
245
|
+
return {
|
|
246
|
+
...base,
|
|
247
|
+
type: 'session_end',
|
|
248
|
+
sessionId: String(obj['sessionId'] ?? context.sessionId ?? context.runId),
|
|
249
|
+
turnCount: typeof context.adapterState['__babysitterTurnIndex'] === 'number'
|
|
250
|
+
? context.adapterState['__babysitterTurnIndex'] + 1
|
|
251
|
+
: 0,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
async detectAuth() {
|
|
257
|
+
// Babysitter itself doesn't need auth — the underlying harness does.
|
|
258
|
+
// Check if babysitter CLI is available.
|
|
259
|
+
try {
|
|
260
|
+
const installation = await this.detectInstallation();
|
|
261
|
+
if (installation.installed) {
|
|
262
|
+
return { status: 'authenticated', method: 'api_key', identity: 'babysitter-cli' };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// fall through
|
|
267
|
+
}
|
|
268
|
+
return { status: 'unauthenticated' };
|
|
269
|
+
}
|
|
270
|
+
getAuthGuidance() {
|
|
271
|
+
return {
|
|
272
|
+
agent: 'babysitter',
|
|
273
|
+
providerName: 'Babysitter',
|
|
274
|
+
steps: [
|
|
275
|
+
{ step: 1, description: 'Install babysitter agent CLI', command: 'npm i -g @a5c-ai/genty-platform' },
|
|
276
|
+
{ step: 2, description: 'Configure the underlying harness auth (e.g., Claude, Codex)', command: 'agent-platform discover' },
|
|
277
|
+
],
|
|
278
|
+
envVars: [],
|
|
279
|
+
documentationUrls: ['https://github.com/a5c-ai/babysitter'],
|
|
280
|
+
verifyCommand: 'agent-platform version',
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
sessionDir(cwd) {
|
|
284
|
+
return path.join(cwd || process.cwd(), '.a5c', 'runs');
|
|
285
|
+
}
|
|
286
|
+
async parseSessionFile(filePath) {
|
|
287
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
288
|
+
const runJson = JSON.parse(raw);
|
|
289
|
+
return {
|
|
290
|
+
agent: 'babysitter',
|
|
291
|
+
sessionId: String(runJson['runId'] ?? ''),
|
|
292
|
+
title: typeof runJson['prompt'] === 'string'
|
|
293
|
+
? runJson['prompt'].slice(0, 80) || 'Babysitter run'
|
|
294
|
+
: 'Babysitter run',
|
|
295
|
+
createdAt: typeof runJson['createdAt'] === 'string'
|
|
296
|
+
? runJson['createdAt']
|
|
297
|
+
: new Date().toISOString(),
|
|
298
|
+
updatedAt: typeof runJson['createdAt'] === 'string'
|
|
299
|
+
? runJson['createdAt']
|
|
300
|
+
: new Date().toISOString(),
|
|
301
|
+
turnCount: 0,
|
|
302
|
+
model: typeof runJson['model'] === 'string' ? runJson['model'] : undefined,
|
|
303
|
+
tags: runJson['processId'] ? [String(runJson['processId'])] : [],
|
|
304
|
+
cwd: path.dirname(path.dirname(filePath)),
|
|
305
|
+
messages: [],
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
async listSessionFiles(cwd) {
|
|
309
|
+
const runsDir = this.sessionDir(cwd);
|
|
310
|
+
if (!existsSync(runsDir))
|
|
311
|
+
return [];
|
|
312
|
+
try {
|
|
313
|
+
const entries = await fs.readdir(runsDir);
|
|
314
|
+
const results = [];
|
|
315
|
+
for (const entry of entries) {
|
|
316
|
+
const runJsonPath = path.join(runsDir, entry, 'run.json');
|
|
317
|
+
if (existsSync(runJsonPath)) {
|
|
318
|
+
results.push(runJsonPath);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return results;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
async readConfig(_cwd) {
|
|
328
|
+
return { agent: 'babysitter', source: 'global' };
|
|
329
|
+
}
|
|
330
|
+
async writeConfig(config, _cwd) {
|
|
331
|
+
// Babysitter config is managed by the babysitter CLI itself.
|
|
332
|
+
// No-op in the adapters adapter.
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=babysitter-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babysitter-adapter.js","sourceRoot":"","sources":["../src/babysitter-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CostRecord, Spawner } from '@a5c-ai/comm-adapter';
|
|
2
|
+
/**
|
|
3
|
+
* Default Spawner that runs the command via `child_process.spawn`, capturing
|
|
4
|
+
* stdout/stderr. `shell: false`, `windowsHide: true`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const defaultSpawner: Spawner;
|
|
7
|
+
export declare function assembleCostRecord(raw: unknown): CostRecord | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter-helpers.d.ts","sourceRoot":"","sources":["../src/base-adapter-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,OAiBzB,CAAC;AAEL,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CA2BlE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Default Spawner that runs the command via `child_process.spawn`, capturing
|
|
4
|
+
* stdout/stderr. `shell: false`, `windowsHide: true`.
|
|
5
|
+
*/
|
|
6
|
+
export const defaultSpawner = (command, args, options) => new Promise((resolve, reject) => {
|
|
7
|
+
const child = spawn(command, args, {
|
|
8
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
9
|
+
shell: false,
|
|
10
|
+
windowsHide: true,
|
|
11
|
+
env: options?.env ? { ...process.env, ...options.env } : process.env,
|
|
12
|
+
cwd: options?.cwd,
|
|
13
|
+
});
|
|
14
|
+
let stdout = '';
|
|
15
|
+
let stderr = '';
|
|
16
|
+
child.stdout?.setEncoding('utf8');
|
|
17
|
+
child.stderr?.setEncoding('utf8');
|
|
18
|
+
child.stdout?.on('data', (c) => { stdout += c; });
|
|
19
|
+
child.stderr?.on('data', (c) => { stderr += c; });
|
|
20
|
+
child.on('error', (err) => reject(err));
|
|
21
|
+
child.on('exit', (code) => resolve({ code: code ?? 1, stdout, stderr }));
|
|
22
|
+
});
|
|
23
|
+
export function assembleCostRecord(raw) {
|
|
24
|
+
if (raw == null || typeof raw !== 'object')
|
|
25
|
+
return null;
|
|
26
|
+
const obj = raw;
|
|
27
|
+
const totalUsd = extractNumber(obj, ['totalUsd', 'total_usd', 'cost', 'total_cost', 'totalCost']) ?? 0;
|
|
28
|
+
const inputTokens = extractNumber(obj, ['inputTokens', 'input_tokens', 'prompt_tokens']) ?? 0;
|
|
29
|
+
const outputTokens = extractNumber(obj, ['outputTokens', 'output_tokens', 'completion_tokens']) ?? 0;
|
|
30
|
+
const thinkingTokens = extractNumber(obj, ['thinkingTokens', 'thinking_tokens', 'reasoning_tokens']);
|
|
31
|
+
const cacheCreationTokens = extractNumber(obj, ['cacheCreationTokens', 'cache_creation_tokens', 'cache_write_tokens']);
|
|
32
|
+
const cacheReadTokens = extractNumber(obj, ['cacheReadTokens', 'cache_read_tokens', 'cache_read_input_tokens']);
|
|
33
|
+
const cachedTokens = extractNumber(obj, ['cachedTokens', 'cached_tokens']) ??
|
|
34
|
+
((cacheCreationTokens != null && cacheReadTokens != null) ? cacheCreationTokens + cacheReadTokens : undefined);
|
|
35
|
+
if (totalUsd === 0 && inputTokens === 0 && outputTokens === 0)
|
|
36
|
+
return null;
|
|
37
|
+
const record = {
|
|
38
|
+
totalUsd,
|
|
39
|
+
inputTokens,
|
|
40
|
+
outputTokens,
|
|
41
|
+
};
|
|
42
|
+
if (thinkingTokens != null)
|
|
43
|
+
record.thinkingTokens = thinkingTokens;
|
|
44
|
+
if (cachedTokens != null)
|
|
45
|
+
record.cachedTokens = cachedTokens;
|
|
46
|
+
if (cacheCreationTokens != null)
|
|
47
|
+
record.cacheCreationTokens = cacheCreationTokens;
|
|
48
|
+
if (cacheReadTokens != null)
|
|
49
|
+
record.cacheReadTokens = cacheReadTokens;
|
|
50
|
+
return record;
|
|
51
|
+
}
|
|
52
|
+
function extractNumber(obj, keys) {
|
|
53
|
+
for (const key of keys) {
|
|
54
|
+
const val = obj[key];
|
|
55
|
+
if (typeof val === 'number' && Number.isFinite(val))
|
|
56
|
+
return val;
|
|
57
|
+
if (typeof val === 'object' && val !== null) {
|
|
58
|
+
const nested = val;
|
|
59
|
+
for (const nk of Object.keys(nested)) {
|
|
60
|
+
const nv = nested[nk];
|
|
61
|
+
if (typeof nv === 'number' && Number.isFinite(nv))
|
|
62
|
+
return nv;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=base-adapter-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter-helpers.js","sourceRoot":"","sources":["../src/base-adapter-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BaseAgentAdapter — abstract base class for agent adapters.
|
|
3
|
+
*
|
|
4
|
+
* Provides shared utilities and hook points with sensible defaults.
|
|
5
|
+
* All built-in adapters extend this class.
|
|
6
|
+
*
|
|
7
|
+
* @see 05-adapter-system.md §4
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentName, CostRecord, RetryPolicy, AgentCapabilities, ModelCapabilities, AgentConfig, AgentConfigSchema, AuthState, AuthSetupGuidance, Session, InstalledPlugin, PluginInstallOptions, PluginSearchOptions, PluginListing, SpawnArgs, ParseContext, SubprocessAdapter, RunOptions, AgentEvent, DetectInstallationResult, InstallResult, AdapterInstallOptions, AdapterUpdateOptions, Spawner, InstallMethod } from '@a5c-ai/comm-adapter';
|
|
10
|
+
import { StreamAssembler } from '@a5c-ai/comm-adapter';
|
|
11
|
+
export { defaultSpawner } from './base-adapter-helpers.js';
|
|
12
|
+
export declare function registerAdapterFactory(name: string, factory: () => SubprocessAdapter): void;
|
|
13
|
+
export declare function getAdapterFactory(name: string): (() => SubprocessAdapter) | undefined;
|
|
14
|
+
export declare function listRegisteredAdapters(): string[];
|
|
15
|
+
export declare abstract class BaseAgentAdapter implements SubprocessAdapter {
|
|
16
|
+
readonly adapterType: "subprocess";
|
|
17
|
+
abstract readonly agent: AgentName;
|
|
18
|
+
abstract readonly displayName: string;
|
|
19
|
+
abstract readonly cliCommand: string;
|
|
20
|
+
abstract readonly minVersion?: string;
|
|
21
|
+
abstract readonly capabilities: AgentCapabilities;
|
|
22
|
+
abstract readonly models: ModelCapabilities[];
|
|
23
|
+
abstract readonly defaultModelId?: string;
|
|
24
|
+
abstract readonly configSchema: AgentConfigSchema;
|
|
25
|
+
abstract buildSpawnArgs(options: RunOptions): SpawnArgs;
|
|
26
|
+
abstract parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
|
|
27
|
+
abstract detectAuth(): Promise<AuthState>;
|
|
28
|
+
abstract getAuthGuidance(): AuthSetupGuidance;
|
|
29
|
+
abstract sessionDir(cwd?: string): string;
|
|
30
|
+
abstract parseSessionFile(filePath: string): Promise<Session>;
|
|
31
|
+
abstract listSessionFiles(cwd?: string): Promise<string[]>;
|
|
32
|
+
abstract readConfig(cwd?: string): Promise<AgentConfig>;
|
|
33
|
+
abstract writeConfig(config: Partial<AgentConfig>, cwd?: string): Promise<void>;
|
|
34
|
+
listPlugins?(): Promise<InstalledPlugin[]>;
|
|
35
|
+
installPlugin?(pluginId: string, options?: PluginInstallOptions): Promise<InstalledPlugin>;
|
|
36
|
+
uninstallPlugin?(pluginId: string): Promise<void>;
|
|
37
|
+
searchPlugins?(query: string, options?: PluginSearchOptions): Promise<PluginListing[]>;
|
|
38
|
+
protected readonly streamAssembler: StreamAssembler;
|
|
39
|
+
/** Subprocess runner used by install/update/detect. Swap for tests. */
|
|
40
|
+
protected _spawner: Spawner;
|
|
41
|
+
/** Replaces the internal Spawner (used by tests and CLI DI). */
|
|
42
|
+
setSpawner(spawner: Spawner): void;
|
|
43
|
+
protected normalizePrompt(prompt: string | string[]): string;
|
|
44
|
+
protected stripAnsi(text: string): string;
|
|
45
|
+
protected parsePlaintextEvent(line: string, context: ParseContext): AgentEvent | null;
|
|
46
|
+
protected buildPromptTransport(options: RunOptions): {
|
|
47
|
+
prompt: string;
|
|
48
|
+
stdin?: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Locates the harness binary and queries its `--version`. Default
|
|
52
|
+
* implementation uses `which`/`where` + `<cli> --version`.
|
|
53
|
+
*/
|
|
54
|
+
detectInstallation(): Promise<DetectInstallationResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Parses a `--version` output line. Default: first semver-like token.
|
|
57
|
+
* Override to accommodate bespoke version formats.
|
|
58
|
+
*/
|
|
59
|
+
protected parseVersionOutput(raw: string): string | undefined;
|
|
60
|
+
protected resolveWindowsBinaryPath(binPath: string): string;
|
|
61
|
+
protected resolveVersionProbeCommand(binPath: string): {
|
|
62
|
+
command: string;
|
|
63
|
+
args: string[];
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Picks an install method compatible with the current platform, runs it,
|
|
67
|
+
* then re-detects. Honors `force` and `dryRun`.
|
|
68
|
+
*/
|
|
69
|
+
private _installContext;
|
|
70
|
+
install(opts?: AdapterInstallOptions): Promise<InstallResult>;
|
|
71
|
+
/** Runs the update/upgrade variant of the install command. */
|
|
72
|
+
update(opts?: AdapterUpdateOptions): Promise<InstallResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Picks the first InstallMethod compatible with the current platform,
|
|
75
|
+
* preferring non-manual methods.
|
|
76
|
+
*/
|
|
77
|
+
protected pickInstallMethod(): InstallMethod | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Replace `<pkg>` tail with `<pkg>@<version>` for npm-typed methods.
|
|
80
|
+
*/
|
|
81
|
+
protected applyVersionToCommand(method: InstallMethod, version?: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Derives an update command from an install method.
|
|
84
|
+
*/
|
|
85
|
+
protected deriveUpdateCommand(method: InstallMethod): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Attempts to parse a line as JSON. Returns the parsed value on success,
|
|
88
|
+
* or null if the line is not valid JSON. Does not throw.
|
|
89
|
+
*/
|
|
90
|
+
protected parseJsonLine(line: string): unknown | null;
|
|
91
|
+
/**
|
|
92
|
+
* Normalizes a raw cost/usage object from agent output into the
|
|
93
|
+
* standard CostRecord type.
|
|
94
|
+
*/
|
|
95
|
+
protected assembleCostRecord(raw: unknown): CostRecord | null;
|
|
96
|
+
/**
|
|
97
|
+
* Detects the installed CLI version. Returns null in the base implementation.
|
|
98
|
+
* Subclasses should override to run the agent's CLI with a version flag.
|
|
99
|
+
*/
|
|
100
|
+
protected detectVersionFromCli(): Promise<string | null>;
|
|
101
|
+
/**
|
|
102
|
+
* Builds the environment variable record for the subprocess from RunOptions.
|
|
103
|
+
*/
|
|
104
|
+
protected buildEnvFromOptions(options: RunOptions): Record<string, string>;
|
|
105
|
+
/**
|
|
106
|
+
* Resolves the session ID to use for this run.
|
|
107
|
+
*/
|
|
108
|
+
protected resolveSessionId(options: RunOptions): string | undefined;
|
|
109
|
+
/**
|
|
110
|
+
* Called when the agent subprocess fails to spawn.
|
|
111
|
+
*/
|
|
112
|
+
onSpawnError(error: Error): AgentEvent;
|
|
113
|
+
/**
|
|
114
|
+
* Called when the inactivity timeout fires.
|
|
115
|
+
*/
|
|
116
|
+
onTimeout(): AgentEvent;
|
|
117
|
+
/**
|
|
118
|
+
* Called when the agent subprocess exits.
|
|
119
|
+
*/
|
|
120
|
+
onProcessExit(exitCode: number, signal: string | null): AgentEvent[];
|
|
121
|
+
/**
|
|
122
|
+
* Determines whether a failed run should be retried.
|
|
123
|
+
*/
|
|
124
|
+
shouldRetry(event: AgentEvent, attempt: number, policy: RetryPolicy): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Default hook installation: registers in .adapters/hooks.json only.
|
|
127
|
+
* Override in subclasses to also write native harness config (e.g.
|
|
128
|
+
* ~/.claude/settings.json) so the hook fires without adapters present.
|
|
129
|
+
*/
|
|
130
|
+
installHook(hookType: string, command: string, opts?: {
|
|
131
|
+
scope?: 'global' | 'project';
|
|
132
|
+
id?: string;
|
|
133
|
+
}): Promise<void>;
|
|
134
|
+
/** Register a hook in the unified .adapters/hooks.json store. */
|
|
135
|
+
protected registerHookInConfig(hookType: string, command: string, opts?: {
|
|
136
|
+
scope?: 'global' | 'project';
|
|
137
|
+
id?: string;
|
|
138
|
+
}): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Write the hook into the harness's native config. Default: append
|
|
141
|
+
* `{ command }` to `hooks[hookType]` in configFilePaths[0] if it is
|
|
142
|
+
* a .json file. Subclasses override to use harness-specific schema.
|
|
143
|
+
* Best-effort: failures are swallowed so SDK registration still succeeds.
|
|
144
|
+
*/
|
|
145
|
+
protected writeNativeHook(hookType: string, command: string): Promise<void>;
|
|
146
|
+
uninstallHook(id: string, opts?: {
|
|
147
|
+
scope?: 'global' | 'project';
|
|
148
|
+
}): Promise<boolean>;
|
|
149
|
+
/**
|
|
150
|
+
* Append `{ command }` to `hooks[hookType]` in the given JSON file,
|
|
151
|
+
* preserving any existing hooks and creating the parent directory if
|
|
152
|
+
* needed. Used by adapters that expose a simple JSON-based native
|
|
153
|
+
* hook config (codex, gemini, copilot, cursor, opencode, pi, omp,
|
|
154
|
+
* openclaw, hermes).
|
|
155
|
+
*/
|
|
156
|
+
protected appendJsonHook(settingsPath: string, hookType: string, entry: Record<string, unknown>): Promise<void>;
|
|
157
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"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"}
|