@autonome-research/thread-phase-agents 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/acp/adapter.d.ts +89 -0
  4. package/dist/acp/adapter.d.ts.map +1 -0
  5. package/dist/acp/adapter.js +461 -0
  6. package/dist/acp/adapter.js.map +1 -0
  7. package/dist/acp/index.d.ts +12 -0
  8. package/dist/acp/index.d.ts.map +1 -0
  9. package/dist/acp/index.js +10 -0
  10. package/dist/acp/index.js.map +1 -0
  11. package/dist/acp/transport.d.ts +82 -0
  12. package/dist/acp/transport.d.ts.map +1 -0
  13. package/dist/acp/transport.js +199 -0
  14. package/dist/acp/transport.js.map +1 -0
  15. package/dist/acp/types.d.ts +157 -0
  16. package/dist/acp/types.d.ts.map +1 -0
  17. package/dist/acp/types.js +34 -0
  18. package/dist/acp/types.js.map +1 -0
  19. package/dist/anthropic/adapter.d.ts +55 -0
  20. package/dist/anthropic/adapter.d.ts.map +1 -0
  21. package/dist/anthropic/adapter.js +259 -0
  22. package/dist/anthropic/adapter.js.map +1 -0
  23. package/dist/anthropic/index.d.ts +8 -0
  24. package/dist/anthropic/index.d.ts.map +1 -0
  25. package/dist/anthropic/index.js +8 -0
  26. package/dist/anthropic/index.js.map +1 -0
  27. package/dist/claude-code/adapter.d.ts +56 -0
  28. package/dist/claude-code/adapter.d.ts.map +1 -0
  29. package/dist/claude-code/adapter.js +319 -0
  30. package/dist/claude-code/adapter.js.map +1 -0
  31. package/dist/claude-code/index.d.ts +8 -0
  32. package/dist/claude-code/index.d.ts.map +1 -0
  33. package/dist/claude-code/index.js +8 -0
  34. package/dist/claude-code/index.js.map +1 -0
  35. package/dist/codex/adapter.d.ts +62 -0
  36. package/dist/codex/adapter.d.ts.map +1 -0
  37. package/dist/codex/adapter.js +258 -0
  38. package/dist/codex/adapter.js.map +1 -0
  39. package/dist/codex/index.d.ts +9 -0
  40. package/dist/codex/index.d.ts.map +1 -0
  41. package/dist/codex/index.js +9 -0
  42. package/dist/codex/index.js.map +1 -0
  43. package/dist/codex-cli/adapter.d.ts +70 -0
  44. package/dist/codex-cli/adapter.d.ts.map +1 -0
  45. package/dist/codex-cli/adapter.js +368 -0
  46. package/dist/codex-cli/adapter.js.map +1 -0
  47. package/dist/codex-cli/index.d.ts +10 -0
  48. package/dist/codex-cli/index.d.ts.map +1 -0
  49. package/dist/codex-cli/index.js +10 -0
  50. package/dist/codex-cli/index.js.map +1 -0
  51. package/dist/hermes/index.d.ts +50 -0
  52. package/dist/hermes/index.d.ts.map +1 -0
  53. package/dist/hermes/index.js +43 -0
  54. package/dist/hermes/index.js.map +1 -0
  55. package/dist/index.d.ts +11 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +14 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/injectors.d.ts +104 -0
  60. package/dist/injectors.d.ts.map +1 -0
  61. package/dist/injectors.js +219 -0
  62. package/dist/injectors.js.map +1 -0
  63. package/dist/openclaw/index.d.ts +54 -0
  64. package/dist/openclaw/index.d.ts.map +1 -0
  65. package/dist/openclaw/index.js +61 -0
  66. package/dist/openclaw/index.js.map +1 -0
  67. package/dist/pi/adapter.d.ts +79 -0
  68. package/dist/pi/adapter.d.ts.map +1 -0
  69. package/dist/pi/adapter.js +396 -0
  70. package/dist/pi/adapter.js.map +1 -0
  71. package/dist/pi/index.d.ts +14 -0
  72. package/dist/pi/index.d.ts.map +1 -0
  73. package/dist/pi/index.js +14 -0
  74. package/dist/pi/index.js.map +1 -0
  75. package/dist/thread-bridge.d.ts +83 -0
  76. package/dist/thread-bridge.d.ts.map +1 -0
  77. package/dist/thread-bridge.js +143 -0
  78. package/dist/thread-bridge.js.map +1 -0
  79. package/package.json +46 -0
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Codex CLI adapter — subprocess wrapper around `codex exec --json`.
3
+ *
4
+ * Why this exists alongside `codexAgent`: that adapter talks to OpenAI's
5
+ * Responses API directly via the SDK and needs `OPENAI_API_KEY`. The
6
+ * Codex CLI carries its own ChatGPT-subscription OAuth flow (`~/.codex/`),
7
+ * so users who installed `codex` and ran `codex login` already have a
8
+ * working agent without an API key. This adapter delegates auth and
9
+ * model selection entirely to the CLI; we just parse its NDJSON output
10
+ * stream into canonical AgentEvents.
11
+ *
12
+ * Capabilities:
13
+ * streaming 'text'
14
+ * cancellation 'forceful'
15
+ * resumption 'opaque' (codex thread id)
16
+ * structuredOutput 'prompted'
17
+ *
18
+ * The CLI's `--json` event vocabulary is higher-level than the raw
19
+ * Responses API stream:
20
+ * thread.started -> capture thread_id as resumeToken
21
+ * turn.started -> (informational, surfaced as native)
22
+ * item.started type=command_execution
23
+ * -> tool_call event
24
+ * item.completed type=command_execution
25
+ * -> tool_result event (isError from exit_code)
26
+ * item.completed type=agent_message
27
+ * -> text event with item.text
28
+ * item.completed type=reasoning
29
+ * -> thinking event
30
+ * turn.completed -> turn_end with usage
31
+ *
32
+ * @internal
33
+ */
34
+ import { spawn } from 'node:child_process';
35
+ import { applyStructuredOutputPrompt, composeAbort, createEventQueue, defineAgentAdapter, lazyEvents, parseStructuredFromText, serializeError, TurnAccumulator, } from '@autonome-research/thread-phase/agents';
36
+ const ADAPTER_ID = 'codex-cli';
37
+ /** @internal */
38
+ export const codexCliAgent = defineAgentAdapter({
39
+ id: ADAPTER_ID,
40
+ capabilities: {
41
+ streaming: 'text',
42
+ cancellation: 'forceful',
43
+ resumption: 'opaque',
44
+ structuredOutput: 'prompted',
45
+ },
46
+ adapter: createCodexCliAdapter,
47
+ });
48
+ function createCodexCliAdapter(config, options = {}) {
49
+ const source = ADAPTER_ID;
50
+ const traceId = options.traceId;
51
+ const killGraceMs = config.killGraceMs ?? 3000;
52
+ const { signal: compositeSignal, controller } = composeAbort(options.signal);
53
+ const queue = createEventQueue(options.eventBus);
54
+ const turns = new TurnAccumulator(queue.push, source, traceId);
55
+ let started = false;
56
+ let runPromise = null;
57
+ const startIfNeeded = () => {
58
+ if (runPromise)
59
+ return runPromise;
60
+ started = true;
61
+ runPromise = runOnce();
62
+ return runPromise;
63
+ };
64
+ async function runOnce() {
65
+ let resumeToken = config.resumeThreadId
66
+ ? { kind: 'opaque', data: config.resumeThreadId }
67
+ : undefined;
68
+ queue.push({ type: 'agent_start', source, traceId, resumeToken });
69
+ const effectivePrompt = config.outputSchema
70
+ ? `${config.prompt}\n\n${applyStructuredOutputPrompt('', config.outputSchema)}`
71
+ : config.prompt;
72
+ const args = config.codexArgs ?? buildDefaultArgs(config, effectivePrompt);
73
+ const env = config.env ? { ...process.env, ...config.env } : process.env;
74
+ const executable = config.codexExecutable ?? 'codex';
75
+ let child;
76
+ try {
77
+ child = spawn(executable, args, {
78
+ cwd: config.cwd,
79
+ env,
80
+ stdio: ['pipe', 'pipe', 'pipe'],
81
+ });
82
+ // codex reads stdin if no prompt arg is on the cmdline; close it
83
+ // so the subprocess doesn't hang waiting.
84
+ child.stdin.end();
85
+ }
86
+ catch (err) {
87
+ turns.close();
88
+ queue.push({
89
+ type: 'error',
90
+ source,
91
+ traceId,
92
+ error: serializeError(err),
93
+ transient: false,
94
+ });
95
+ queue.push({ type: 'agent_end', source, traceId, reason: 'error', resumeToken });
96
+ queue.close();
97
+ return {
98
+ text: '',
99
+ finishReason: 'error',
100
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
101
+ executedToolCalls: [],
102
+ resumeToken,
103
+ };
104
+ }
105
+ let stdoutBuf = '';
106
+ let assembledText = '';
107
+ let threadId = config.resumeThreadId;
108
+ let inputTokens = 0;
109
+ let outputTokens = 0;
110
+ const executedToolCalls = [];
111
+ const pendingTools = new Map();
112
+ const parseLine = (line) => {
113
+ let msg;
114
+ try {
115
+ msg = JSON.parse(line);
116
+ }
117
+ catch {
118
+ turns.native('codex-cli:non-json', line);
119
+ return;
120
+ }
121
+ if (msg === null || typeof msg !== 'object') {
122
+ turns.native('codex-cli:non-object', msg);
123
+ return;
124
+ }
125
+ handleMessage(msg);
126
+ };
127
+ const handleMessage = (msg) => {
128
+ const type = typeof msg.type === 'string' ? msg.type : 'unknown';
129
+ if (type === 'thread.started') {
130
+ const tid = typeof msg.thread_id === 'string' ? msg.thread_id : undefined;
131
+ if (tid) {
132
+ threadId = tid;
133
+ resumeToken = { kind: 'opaque', data: tid };
134
+ }
135
+ turns.native('codex-cli:thread_started', msg);
136
+ return;
137
+ }
138
+ if (type === 'turn.started') {
139
+ turns.native('codex-cli:turn_started', msg);
140
+ return;
141
+ }
142
+ if (type === 'turn.completed') {
143
+ const usage = msg.usage;
144
+ if (usage) {
145
+ const input = Number(usage.input_tokens) || 0;
146
+ const output = Number(usage.output_tokens) || 0;
147
+ inputTokens += input;
148
+ outputTokens += output;
149
+ }
150
+ turns.endTurn(usage
151
+ ? {
152
+ promptTokens: Number(usage.input_tokens) || 0,
153
+ completionTokens: Number(usage.output_tokens) || 0,
154
+ totalTokens: (Number(usage.input_tokens) || 0) + (Number(usage.output_tokens) || 0),
155
+ }
156
+ : undefined);
157
+ return;
158
+ }
159
+ if (type === 'item.started' || type === 'item.completed') {
160
+ const item = (msg.item ?? {});
161
+ const itemType = typeof item.type === 'string' ? item.type : 'unknown';
162
+ const itemId = typeof item.id === 'string' ? item.id : `codex-${pendingTools.size}`;
163
+ if (itemType === 'command_execution') {
164
+ const command = typeof item.command === 'string' ? item.command : '';
165
+ if (type === 'item.started') {
166
+ const input = { command };
167
+ pendingTools.set(itemId, { name: 'shell', input });
168
+ turns.toolCall(itemId, 'shell', input);
169
+ }
170
+ else {
171
+ // completed
172
+ const output = typeof item.aggregated_output === 'string' ? item.aggregated_output : '';
173
+ const exitCode = typeof item.exit_code === 'number' ? item.exit_code : null;
174
+ const isError = exitCode !== null && exitCode !== 0;
175
+ turns.toolResult(itemId, 'shell', output, isError);
176
+ const tool = pendingTools.get(itemId);
177
+ if (tool) {
178
+ executedToolCalls.push({ id: itemId, name: tool.name, input: tool.input });
179
+ pendingTools.delete(itemId);
180
+ }
181
+ }
182
+ return;
183
+ }
184
+ if (itemType === 'agent_message' && type === 'item.completed') {
185
+ const text = typeof item.text === 'string' ? item.text : '';
186
+ if (text) {
187
+ assembledText += text;
188
+ turns.text(text);
189
+ }
190
+ return;
191
+ }
192
+ if (itemType === 'reasoning' && type === 'item.completed') {
193
+ const text = typeof item.text === 'string' ? item.text : '';
194
+ if (text)
195
+ turns.thinking(text);
196
+ return;
197
+ }
198
+ if (itemType === 'function_call' && type === 'item.completed') {
199
+ const name = typeof item.name === 'string' ? item.name : 'function';
200
+ const rawInput = item.arguments ?? item.input ?? {};
201
+ const parsed = typeof rawInput === 'string'
202
+ ? safeParseJson(rawInput)
203
+ : rawInput;
204
+ turns.toolCall(itemId, name, parsed);
205
+ executedToolCalls.push({ id: itemId, name, input: parsed });
206
+ return;
207
+ }
208
+ // Unknown item type — surface as native.
209
+ turns.native(`codex-cli:item:${itemType}`, msg);
210
+ return;
211
+ }
212
+ turns.native(`codex-cli:${type}`, msg);
213
+ };
214
+ const onAbortSignal = () => {
215
+ if (child.exitCode !== null || child.signalCode !== null)
216
+ return;
217
+ try {
218
+ child.kill('SIGTERM');
219
+ }
220
+ catch {
221
+ // already gone
222
+ }
223
+ setTimeout(() => {
224
+ if (child.exitCode === null && child.signalCode === null) {
225
+ try {
226
+ child.kill('SIGKILL');
227
+ }
228
+ catch {
229
+ // already gone
230
+ }
231
+ }
232
+ }, killGraceMs);
233
+ };
234
+ if (compositeSignal.aborted) {
235
+ onAbortSignal();
236
+ }
237
+ else {
238
+ compositeSignal.addEventListener('abort', onAbortSignal, { once: true });
239
+ }
240
+ return new Promise((resolve) => {
241
+ child.stdout.setEncoding('utf8');
242
+ child.stdout.on('data', (chunk) => {
243
+ stdoutBuf += chunk;
244
+ let nl;
245
+ while ((nl = stdoutBuf.indexOf('\n')) !== -1) {
246
+ const line = stdoutBuf.slice(0, nl);
247
+ stdoutBuf = stdoutBuf.slice(nl + 1);
248
+ if (line.trim().length > 0)
249
+ parseLine(line);
250
+ }
251
+ });
252
+ child.stderr.setEncoding('utf8');
253
+ child.stderr.on('data', (chunk) => {
254
+ queue.push({
255
+ type: 'native',
256
+ source,
257
+ traceId,
258
+ kind: 'codex-cli:stderr',
259
+ payload: chunk,
260
+ });
261
+ });
262
+ child.on('error', (err) => {
263
+ queue.push({
264
+ type: 'error',
265
+ source,
266
+ traceId,
267
+ error: serializeError(err),
268
+ transient: false,
269
+ });
270
+ });
271
+ child.on('close', (code, signal) => {
272
+ if (stdoutBuf.trim().length > 0)
273
+ parseLine(stdoutBuf.trim());
274
+ turns.close();
275
+ const aborted = compositeSignal.aborted;
276
+ let finishReason;
277
+ if (aborted)
278
+ finishReason = 'aborted';
279
+ else if (code === 0)
280
+ finishReason = executedToolCalls.length > 0 ? 'tool_calls' : 'stop';
281
+ else
282
+ finishReason = 'error';
283
+ if (finishReason === 'error') {
284
+ queue.push({
285
+ type: 'error',
286
+ source,
287
+ traceId,
288
+ error: {
289
+ name: 'CodexCliExitError',
290
+ message: signal
291
+ ? `codex exited via signal ${signal}`
292
+ : `codex exited with code ${code ?? 'null'}`,
293
+ },
294
+ transient: false,
295
+ });
296
+ }
297
+ if (threadId) {
298
+ resumeToken = { kind: 'opaque', data: threadId };
299
+ }
300
+ let parsed = undefined;
301
+ let parseError = undefined;
302
+ if (config.outputSchema && finishReason === 'stop') {
303
+ try {
304
+ parsed = parseStructuredFromText(assembledText, config.outputSchema);
305
+ }
306
+ catch (err) {
307
+ parseError = serializeError(err);
308
+ }
309
+ }
310
+ queue.push({ type: 'agent_end', source, traceId, reason: finishReason, resumeToken });
311
+ queue.close();
312
+ resolve({
313
+ text: assembledText,
314
+ finishReason,
315
+ usage: {
316
+ promptTokens: inputTokens,
317
+ completionTokens: outputTokens,
318
+ totalTokens: inputTokens + outputTokens,
319
+ },
320
+ executedToolCalls,
321
+ parsed,
322
+ parseError,
323
+ resumeToken,
324
+ });
325
+ });
326
+ });
327
+ }
328
+ return {
329
+ events: lazyEvents(queue.events, startIfNeeded),
330
+ get result() {
331
+ return startIfNeeded();
332
+ },
333
+ abort(reason) {
334
+ controller.abort(reason);
335
+ if (!started)
336
+ startIfNeeded();
337
+ },
338
+ };
339
+ }
340
+ function buildDefaultArgs(config, prompt) {
341
+ const args = ['exec', '--json', '--skip-git-repo-check'];
342
+ if (config.sandbox)
343
+ args.push('-s', config.sandbox);
344
+ else
345
+ args.push('-s', 'read-only');
346
+ if (config.model)
347
+ args.push('-m', config.model);
348
+ if (config.resumeThreadId) {
349
+ args.push('resume', config.resumeThreadId, prompt);
350
+ }
351
+ else {
352
+ args.push(prompt);
353
+ }
354
+ return args;
355
+ }
356
+ function safeParseJson(s) {
357
+ try {
358
+ const parsed = JSON.parse(s);
359
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
360
+ return parsed;
361
+ }
362
+ return { _rawJson: s };
363
+ }
364
+ catch {
365
+ return { _rawJson: s };
366
+ }
367
+ }
368
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/codex-cli/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Codex CLI adapter entry. Subprocess wrapper around `codex exec --json`.
3
+ * Uses codex's own auth (ChatGPT OAuth or API key, whichever's configured
4
+ * via `codex login`). For API-key-only callers, see `codexAgent` (the
5
+ * in-process OpenAI Responses API adapter).
6
+ *
7
+ * @internal
8
+ */
9
+ export { codexCliAgent, type CodexCliAgentConfig } from './adapter.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codex-cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Codex CLI adapter entry. Subprocess wrapper around `codex exec --json`.
3
+ * Uses codex's own auth (ChatGPT OAuth or API key, whichever's configured
4
+ * via `codex login`). For API-key-only callers, see `codexAgent` (the
5
+ * in-process OpenAI Responses API adapter).
6
+ *
7
+ * @internal
8
+ */
9
+ export { codexCliAgent } from './adapter.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codex-cli/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAA4B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Hermes adapter — wraps the ACP chassis to talk to `hermes acp`.
3
+ *
4
+ * Hermes ships an ACP-native server entry point (`hermes acp`), so the
5
+ * adapter is a thin configuration layer over `createAcpAdapter({ id: 'hermes' })`
6
+ * with sensible defaults for the executable and arguments.
7
+ *
8
+ * Requirements:
9
+ * - `hermes` binary installed and in PATH (or override via `hermesExecutable`)
10
+ * - Hermes configured with an OpenAI-compatible inference endpoint
11
+ *
12
+ * Session state persists in `~/.hermes/state.db`; resumption is via
13
+ * Hermes session ids, exposed by the chassis as
14
+ * `ResumeToken{ kind: 'opaque' }`.
15
+ *
16
+ * @internal
17
+ */
18
+ import { type AgentAdapterMeta } from '@autonome-research/thread-phase/agents';
19
+ import { type AcpAgentConfig, type ContentBlock, type McpServer } from '../acp/index.js';
20
+ /** @internal */
21
+ export interface HermesAgentConfig {
22
+ /** Working directory advertised to Hermes at session/new. */
23
+ cwd: string;
24
+ /** Prompt sent via session/prompt. Strings become a single text block. */
25
+ prompt: string | ContentBlock[];
26
+ /** Resume a prior Hermes session by its id. */
27
+ resumeSessionId?: string;
28
+ /** Executable name; default 'hermes'. */
29
+ hermesExecutable?: string;
30
+ /**
31
+ * Full args list passed to the executable. Default `['acp']` so the
32
+ * standard `hermes acp` invocation works out of the box. Override
33
+ * when running a different subcommand or when the executable is not
34
+ * the `hermes` binary (tests using a stub, custom wrappers, etc.).
35
+ */
36
+ hermesArgs?: string[];
37
+ /** Environment overrides merged with process.env. */
38
+ env?: Record<string, string>;
39
+ /** MCP servers exposed to Hermes; default []. */
40
+ mcpServers?: McpServer[];
41
+ /** Permission handling for tool calls Hermes asks the client to authorize. */
42
+ permissionMode?: AcpAgentConfig['permissionMode'];
43
+ /** Cancel-then-SIGTERM grace window in ms; default 2000. */
44
+ cancelGraceMs?: number;
45
+ /** SIGTERM-then-SIGKILL grace window in ms; default 3000. */
46
+ killGraceMs?: number;
47
+ }
48
+ /** @internal */
49
+ export declare const hermesAgent: AgentAdapterMeta<HermesAgentConfig>;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hermes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAChC,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAClD,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqBD,gBAAgB;AAChB,eAAO,MAAM,WAAW,EAAE,gBAAgB,CAAC,iBAAiB,CAI1D,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Hermes adapter — wraps the ACP chassis to talk to `hermes acp`.
3
+ *
4
+ * Hermes ships an ACP-native server entry point (`hermes acp`), so the
5
+ * adapter is a thin configuration layer over `createAcpAdapter({ id: 'hermes' })`
6
+ * with sensible defaults for the executable and arguments.
7
+ *
8
+ * Requirements:
9
+ * - `hermes` binary installed and in PATH (or override via `hermesExecutable`)
10
+ * - Hermes configured with an OpenAI-compatible inference endpoint
11
+ *
12
+ * Session state persists in `~/.hermes/state.db`; resumption is via
13
+ * Hermes session ids, exposed by the chassis as
14
+ * `ResumeToken{ kind: 'opaque' }`.
15
+ *
16
+ * @internal
17
+ */
18
+ import { defineAgentAdapter } from '@autonome-research/thread-phase/agents';
19
+ import { createAcpAdapter, } from '../acp/index.js';
20
+ const chassis = createAcpAdapter({ id: 'hermes' });
21
+ function toAcpConfig(config) {
22
+ const executable = config.hermesExecutable ?? 'hermes';
23
+ return {
24
+ command: executable,
25
+ args: config.hermesArgs ?? ['acp'],
26
+ cwd: config.cwd,
27
+ prompt: config.prompt,
28
+ resumeSessionId: config.resumeSessionId,
29
+ env: config.env,
30
+ mcpServers: config.mcpServers,
31
+ permissionMode: config.permissionMode,
32
+ cancelGraceMs: config.cancelGraceMs,
33
+ killGraceMs: config.killGraceMs,
34
+ clientInfo: { name: 'thread-phase-agents', version: '0.0.1' },
35
+ };
36
+ }
37
+ /** @internal */
38
+ export const hermesAgent = defineAgentAdapter({
39
+ id: chassis.id,
40
+ capabilities: chassis.capabilities,
41
+ adapter: (config, options) => chassis.adapter(toAcpConfig(config), options),
42
+ });
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hermes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAyB,MAAM,wCAAwC,CAAC;AACnG,OAAO,EACL,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AA+BzB,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEnD,SAAS,WAAW,CAAC,MAAyB;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,IAAI,QAAQ,CAAC;IACvD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC;QAClC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAwC,kBAAkB,CAAC;IACjF,EAAE,EAAE,OAAO,CAAC,EAAE;IACd,YAAY,EAAE,OAAO,CAAC,YAAY;IAClC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC5E,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { acpAgent, createAcpAdapter, JsonRpcCallError, type AcpAgentConfig, type CreateAcpAdapterOptions, type AcpAgentCapabilities, type AuthMethod, type ClientCapabilities, type ContentBlock, type Implementation, type McpServer, type SessionId, type StopReason, type ToolCallStatus, } from './acp/index.js';
2
+ export { hermesAgent, type HermesAgentConfig } from './hermes/index.js';
3
+ export { openClawAgent, type OpenClawAgentConfig } from './openclaw/index.js';
4
+ export { anthropicAgent, type AnthropicAgentConfig } from './anthropic/index.js';
5
+ export { codexAgent, type CodexAgentConfig } from './codex/index.js';
6
+ export { codexCliAgent, type CodexCliAgentConfig } from './codex-cli/index.js';
7
+ export { claudeCodeAgent, type ClaudeCodeAgentConfig } from './claude-code/index.js';
8
+ export { piAgent, type PiAgentConfig } from './pi/index.js';
9
+ export { injectMemory, injectResume } from './injectors.js';
10
+ export { threadToTranscript, threadToAcpPrompt, threadToAnthropicMessages, threadToClaudeCodePrompt, threadToCodexInput, threadToMessages, } from './thread-bridge.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ // Adapter implementations will be exported from here as they land.
2
+ export { acpAgent, createAcpAdapter, JsonRpcCallError, } from './acp/index.js';
3
+ export { hermesAgent } from './hermes/index.js';
4
+ export { openClawAgent } from './openclaw/index.js';
5
+ export { anthropicAgent } from './anthropic/index.js';
6
+ export { codexAgent } from './codex/index.js';
7
+ export { codexCliAgent } from './codex-cli/index.js';
8
+ export { claudeCodeAgent } from './claude-code/index.js';
9
+ export { piAgent } from './pi/index.js';
10
+ // Pre-built inject callbacks for withMemory / withThread.
11
+ export { injectMemory, injectResume } from './injectors.js';
12
+ // Thread → adapter-input rendering helpers for cross-adapter handoff.
13
+ export { threadToTranscript, threadToAcpPrompt, threadToAnthropicMessages, threadToClaudeCodePrompt, threadToCodexInput, threadToMessages, } from './thread-bridge.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,GAYjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAA8B,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAsB,MAAM,eAAe,CAAC;AAE5D,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,sEAAsE;AACtE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}