@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.
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/dist/acp/adapter.d.ts +89 -0
- package/dist/acp/adapter.d.ts.map +1 -0
- package/dist/acp/adapter.js +461 -0
- package/dist/acp/adapter.js.map +1 -0
- package/dist/acp/index.d.ts +12 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +10 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/transport.d.ts +82 -0
- package/dist/acp/transport.d.ts.map +1 -0
- package/dist/acp/transport.js +199 -0
- package/dist/acp/transport.js.map +1 -0
- package/dist/acp/types.d.ts +157 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +34 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/anthropic/adapter.d.ts +55 -0
- package/dist/anthropic/adapter.d.ts.map +1 -0
- package/dist/anthropic/adapter.js +259 -0
- package/dist/anthropic/adapter.js.map +1 -0
- package/dist/anthropic/index.d.ts +8 -0
- package/dist/anthropic/index.d.ts.map +1 -0
- package/dist/anthropic/index.js +8 -0
- package/dist/anthropic/index.js.map +1 -0
- package/dist/claude-code/adapter.d.ts +56 -0
- package/dist/claude-code/adapter.d.ts.map +1 -0
- package/dist/claude-code/adapter.js +319 -0
- package/dist/claude-code/adapter.js.map +1 -0
- package/dist/claude-code/index.d.ts +8 -0
- package/dist/claude-code/index.d.ts.map +1 -0
- package/dist/claude-code/index.js +8 -0
- package/dist/claude-code/index.js.map +1 -0
- package/dist/codex/adapter.d.ts +62 -0
- package/dist/codex/adapter.d.ts.map +1 -0
- package/dist/codex/adapter.js +258 -0
- package/dist/codex/adapter.js.map +1 -0
- package/dist/codex/index.d.ts +9 -0
- package/dist/codex/index.d.ts.map +1 -0
- package/dist/codex/index.js +9 -0
- package/dist/codex/index.js.map +1 -0
- package/dist/codex-cli/adapter.d.ts +70 -0
- package/dist/codex-cli/adapter.d.ts.map +1 -0
- package/dist/codex-cli/adapter.js +368 -0
- package/dist/codex-cli/adapter.js.map +1 -0
- package/dist/codex-cli/index.d.ts +10 -0
- package/dist/codex-cli/index.d.ts.map +1 -0
- package/dist/codex-cli/index.js +10 -0
- package/dist/codex-cli/index.js.map +1 -0
- package/dist/hermes/index.d.ts +50 -0
- package/dist/hermes/index.d.ts.map +1 -0
- package/dist/hermes/index.js +43 -0
- package/dist/hermes/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/injectors.d.ts +104 -0
- package/dist/injectors.d.ts.map +1 -0
- package/dist/injectors.js +219 -0
- package/dist/injectors.js.map +1 -0
- package/dist/openclaw/index.d.ts +54 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +61 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/pi/adapter.d.ts +79 -0
- package/dist/pi/adapter.d.ts.map +1 -0
- package/dist/pi/adapter.js +396 -0
- package/dist/pi/adapter.js.map +1 -0
- package/dist/pi/index.d.ts +14 -0
- package/dist/pi/index.d.ts.map +1 -0
- package/dist/pi/index.js +14 -0
- package/dist/pi/index.js.map +1 -0
- package/dist/thread-bridge.d.ts +83 -0
- package/dist/thread-bridge.d.ts.map +1 -0
- package/dist/thread-bridge.js +143 -0
- package/dist/thread-bridge.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-built `inject` callbacks for `withMemory` and `withThread`.
|
|
3
|
+
*
|
|
4
|
+
* Both wrappers in `thread-phase/agents` take a caller-supplied
|
|
5
|
+
* `inject` function because each adapter shapes its prompt field
|
|
6
|
+
* differently — `inferenceAgent` puts it on `config.config.systemPrompt`,
|
|
7
|
+
* Anthropic uses `systemPrompt`, Codex uses `instructions`, ACP-based
|
|
8
|
+
* adapters use `config.prompt`. Writing the right splicer at every
|
|
9
|
+
* call site is friction; these tables ship the canonical ones for the
|
|
10
|
+
* bundled adapter set.
|
|
11
|
+
*
|
|
12
|
+
* Composes with `withMemory` / `withThread`:
|
|
13
|
+
*
|
|
14
|
+
* const memoryAware = withMemory(claudeCodeAgent, {
|
|
15
|
+
* scope: { userId: 'alice' },
|
|
16
|
+
* inject: injectMemory.claudeCode,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const threadAware = withThread(hermesAgent, thread, {
|
|
20
|
+
* applyResume: injectResume.hermes,
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* The keys match each adapter's public id (`'claude-code'` → `claudeCode`
|
|
24
|
+
* etc., camelCased for TypeScript ergonomics).
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
import type { InferenceAgentConfig, ResumeToken } from '@autonome-research/thread-phase/agents';
|
|
29
|
+
import type { AcpAgentConfig } from './acp/index.js';
|
|
30
|
+
import type { AnthropicAgentConfig } from './anthropic/index.js';
|
|
31
|
+
import type { ClaudeCodeAgentConfig } from './claude-code/index.js';
|
|
32
|
+
import type { CodexAgentConfig } from './codex/index.js';
|
|
33
|
+
import type { CodexCliAgentConfig } from './codex-cli/index.js';
|
|
34
|
+
import type { HermesAgentConfig } from './hermes/index.js';
|
|
35
|
+
import type { OpenClawAgentConfig } from './openclaw/index.js';
|
|
36
|
+
import type { PiAgentConfig } from './pi/index.js';
|
|
37
|
+
/** @internal */
|
|
38
|
+
export declare const injectMemory: {
|
|
39
|
+
/**
|
|
40
|
+
* Append memory to the agent runner's system prompt. Leaves config
|
|
41
|
+
* unchanged when memory is empty (first-run users with no recall).
|
|
42
|
+
*/
|
|
43
|
+
inference(cfg: InferenceAgentConfig, memory: string): InferenceAgentConfig;
|
|
44
|
+
/** Append memory to Anthropic's system prompt. */
|
|
45
|
+
anthropic(cfg: AnthropicAgentConfig, memory: string): AnthropicAgentConfig;
|
|
46
|
+
/** Append memory to Codex's `instructions` (Responses API system equivalent). */
|
|
47
|
+
codex(cfg: CodexAgentConfig, memory: string): CodexAgentConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Prepend memory to Claude Code's prompt. Claude Code's CLI has no
|
|
50
|
+
* separate system-prompt flag at this layer, so memory becomes part
|
|
51
|
+
* of the user prompt.
|
|
52
|
+
*/
|
|
53
|
+
claudeCode(cfg: ClaudeCodeAgentConfig, memory: string): ClaudeCodeAgentConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Prepend memory to the ACP prompt. ACP's `session/prompt` has no
|
|
56
|
+
* system slot — memory becomes part of the user message content.
|
|
57
|
+
* Preserves a non-text prompt (ContentBlock[]) by injecting the
|
|
58
|
+
* memory as a leading text block.
|
|
59
|
+
*/
|
|
60
|
+
acp(cfg: AcpAgentConfig, memory: string): AcpAgentConfig;
|
|
61
|
+
/** Same shape as `acp` — Hermes is an ACP wrapper. */
|
|
62
|
+
hermes(cfg: HermesAgentConfig, memory: string): HermesAgentConfig;
|
|
63
|
+
/** Same shape as `acp` — OpenClaw is an ACP wrapper. */
|
|
64
|
+
openClaw(cfg: OpenClawAgentConfig, memory: string): OpenClawAgentConfig;
|
|
65
|
+
/**
|
|
66
|
+
* Prepend memory to codex CLI's positional prompt. Same pattern as
|
|
67
|
+
* claudeCode: no system-prompt flag, memory becomes part of the user
|
|
68
|
+
* prompt.
|
|
69
|
+
*/
|
|
70
|
+
codexCli(cfg: CodexCliAgentConfig, memory: string): CodexCliAgentConfig;
|
|
71
|
+
/**
|
|
72
|
+
* Prepend memory to pi's prompt. Pi's `prompt(text)` takes a string;
|
|
73
|
+
* pi handles its own system prompt internally via prompt templates
|
|
74
|
+
* and resource loader.
|
|
75
|
+
*/
|
|
76
|
+
pi(cfg: PiAgentConfig, memory: string): PiAgentConfig;
|
|
77
|
+
};
|
|
78
|
+
/** @internal */
|
|
79
|
+
export declare const injectResume: {
|
|
80
|
+
/** inferenceAgent declares `resumption: 'none'`; passthrough. */
|
|
81
|
+
inference(cfg: InferenceAgentConfig, _token: ResumeToken): InferenceAgentConfig;
|
|
82
|
+
/** anthropicAgent declares `resumption: 'none'`; passthrough. */
|
|
83
|
+
anthropic(cfg: AnthropicAgentConfig, _token: ResumeToken): AnthropicAgentConfig;
|
|
84
|
+
/** Codex's Responses API takes `previous_response_id` natively. */
|
|
85
|
+
codex(cfg: CodexAgentConfig, token: ResumeToken): CodexAgentConfig;
|
|
86
|
+
/** Claude Code's CLI takes `--resume <session-id>`. */
|
|
87
|
+
claudeCode(cfg: ClaudeCodeAgentConfig, token: ResumeToken): ClaudeCodeAgentConfig;
|
|
88
|
+
/** ACP's `session/load` takes a session id. */
|
|
89
|
+
acp(cfg: AcpAgentConfig, token: ResumeToken): AcpAgentConfig;
|
|
90
|
+
/** Hermes inherits ACP's resume path. */
|
|
91
|
+
hermes(cfg: HermesAgentConfig, token: ResumeToken): HermesAgentConfig;
|
|
92
|
+
/** OpenClaw inherits ACP's resume path. */
|
|
93
|
+
openClaw(cfg: OpenClawAgentConfig, token: ResumeToken): OpenClawAgentConfig;
|
|
94
|
+
/** Codex CLI uses thread-id-based resumption. */
|
|
95
|
+
codexCli(cfg: CodexCliAgentConfig, token: ResumeToken): CodexCliAgentConfig;
|
|
96
|
+
/**
|
|
97
|
+
* Pi resumption uses on-disk session files. Accepts either
|
|
98
|
+
* `session-file` (preferred — the actual session path) or `opaque`
|
|
99
|
+
* (treated as a session id for SessionManager lookup; falls through
|
|
100
|
+
* unchanged so the caller can set continueSession themselves).
|
|
101
|
+
*/
|
|
102
|
+
pi(cfg: PiAgentConfig, token: ResumeToken): PiAgentConfig;
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=injectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectors.d.ts","sourceRoot":"","sources":["../src/injectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACZ,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAQnD,gBAAgB;AAChB,eAAO,MAAM,YAAY;IACvB;;;OAGG;mBACY,oBAAoB,UAAU,MAAM,GAAG,oBAAoB;IAW1E,kDAAkD;mBACnC,oBAAoB,UAAU,MAAM,GAAG,oBAAoB;IAQ1E,iFAAiF;eACtE,gBAAgB,UAAU,MAAM,GAAG,gBAAgB;IAQ9D;;;;OAIG;oBACa,qBAAqB,UAAU,MAAM,GAAG,qBAAqB;IAQ7E;;;;;OAKG;aACM,cAAc,UAAU,MAAM,GAAG,cAAc;IAcxD,sDAAsD;gBAC1C,iBAAiB,UAAU,MAAM,GAAG,iBAAiB;IAcjE,wDAAwD;kBAC1C,mBAAmB,UAAU,MAAM,GAAG,mBAAmB;IAcvE;;;;OAIG;kBACW,mBAAmB,UAAU,MAAM,GAAG,mBAAmB;IAQvE;;;;OAIG;YACK,aAAa,UAAU,MAAM,GAAG,aAAa;CAOtD,CAAC;AAMF,gBAAgB;AAChB,eAAO,MAAM,YAAY;IACvB,iEAAiE;mBAClD,oBAAoB,UAAU,WAAW,GAAG,oBAAoB;IAI/E,iEAAiE;mBAClD,oBAAoB,UAAU,WAAW,GAAG,oBAAoB;IAI/E,mEAAmE;eACxD,gBAAgB,SAAS,WAAW,GAAG,gBAAgB;IAKlE,uDAAuD;oBACvC,qBAAqB,SAAS,WAAW,GAAG,qBAAqB;IAKjF,+CAA+C;aACtC,cAAc,SAAS,WAAW,GAAG,cAAc;IAK5D,yCAAyC;gBAC7B,iBAAiB,SAAS,WAAW,GAAG,iBAAiB;IAKrE,2CAA2C;kBAC7B,mBAAmB,SAAS,WAAW,GAAG,mBAAmB;IAK3E,iDAAiD;kBACnC,mBAAmB,SAAS,WAAW,GAAG,mBAAmB;IAK3E;;;;;OAKG;YACK,aAAa,SAAS,WAAW,GAAG,aAAa;CAM1D,CAAC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-built `inject` callbacks for `withMemory` and `withThread`.
|
|
3
|
+
*
|
|
4
|
+
* Both wrappers in `thread-phase/agents` take a caller-supplied
|
|
5
|
+
* `inject` function because each adapter shapes its prompt field
|
|
6
|
+
* differently — `inferenceAgent` puts it on `config.config.systemPrompt`,
|
|
7
|
+
* Anthropic uses `systemPrompt`, Codex uses `instructions`, ACP-based
|
|
8
|
+
* adapters use `config.prompt`. Writing the right splicer at every
|
|
9
|
+
* call site is friction; these tables ship the canonical ones for the
|
|
10
|
+
* bundled adapter set.
|
|
11
|
+
*
|
|
12
|
+
* Composes with `withMemory` / `withThread`:
|
|
13
|
+
*
|
|
14
|
+
* const memoryAware = withMemory(claudeCodeAgent, {
|
|
15
|
+
* scope: { userId: 'alice' },
|
|
16
|
+
* inject: injectMemory.claudeCode,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const threadAware = withThread(hermesAgent, thread, {
|
|
20
|
+
* applyResume: injectResume.hermes,
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* The keys match each adapter's public id (`'claude-code'` → `claudeCode`
|
|
24
|
+
* etc., camelCased for TypeScript ergonomics).
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Memory injectors
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
const MEMORY_HEADER = '\n\nContext from prior interactions:\n';
|
|
32
|
+
/** @internal */
|
|
33
|
+
export const injectMemory = {
|
|
34
|
+
/**
|
|
35
|
+
* Append memory to the agent runner's system prompt. Leaves config
|
|
36
|
+
* unchanged when memory is empty (first-run users with no recall).
|
|
37
|
+
*/
|
|
38
|
+
inference(cfg, memory) {
|
|
39
|
+
if (!memory)
|
|
40
|
+
return cfg;
|
|
41
|
+
return {
|
|
42
|
+
...cfg,
|
|
43
|
+
config: {
|
|
44
|
+
...cfg.config,
|
|
45
|
+
systemPrompt: `${cfg.config.systemPrompt}${MEMORY_HEADER}${memory}`,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
/** Append memory to Anthropic's system prompt. */
|
|
50
|
+
anthropic(cfg, memory) {
|
|
51
|
+
if (!memory)
|
|
52
|
+
return cfg;
|
|
53
|
+
return {
|
|
54
|
+
...cfg,
|
|
55
|
+
systemPrompt: `${cfg.systemPrompt ?? ''}${MEMORY_HEADER}${memory}`,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
/** Append memory to Codex's `instructions` (Responses API system equivalent). */
|
|
59
|
+
codex(cfg, memory) {
|
|
60
|
+
if (!memory)
|
|
61
|
+
return cfg;
|
|
62
|
+
return {
|
|
63
|
+
...cfg,
|
|
64
|
+
instructions: `${cfg.instructions ?? ''}${MEMORY_HEADER}${memory}`,
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Prepend memory to Claude Code's prompt. Claude Code's CLI has no
|
|
69
|
+
* separate system-prompt flag at this layer, so memory becomes part
|
|
70
|
+
* of the user prompt.
|
|
71
|
+
*/
|
|
72
|
+
claudeCode(cfg, memory) {
|
|
73
|
+
if (!memory)
|
|
74
|
+
return cfg;
|
|
75
|
+
return {
|
|
76
|
+
...cfg,
|
|
77
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
/**
|
|
81
|
+
* Prepend memory to the ACP prompt. ACP's `session/prompt` has no
|
|
82
|
+
* system slot — memory becomes part of the user message content.
|
|
83
|
+
* Preserves a non-text prompt (ContentBlock[]) by injecting the
|
|
84
|
+
* memory as a leading text block.
|
|
85
|
+
*/
|
|
86
|
+
acp(cfg, memory) {
|
|
87
|
+
if (!memory)
|
|
88
|
+
return cfg;
|
|
89
|
+
if (Array.isArray(cfg.prompt)) {
|
|
90
|
+
return {
|
|
91
|
+
...cfg,
|
|
92
|
+
prompt: [{ type: 'text', text: `Context from prior interactions:\n${memory}\n\n` }, ...cfg.prompt],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
...cfg,
|
|
97
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
/** Same shape as `acp` — Hermes is an ACP wrapper. */
|
|
101
|
+
hermes(cfg, memory) {
|
|
102
|
+
if (!memory)
|
|
103
|
+
return cfg;
|
|
104
|
+
if (Array.isArray(cfg.prompt)) {
|
|
105
|
+
return {
|
|
106
|
+
...cfg,
|
|
107
|
+
prompt: [{ type: 'text', text: `Context from prior interactions:\n${memory}\n\n` }, ...cfg.prompt],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
...cfg,
|
|
112
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
/** Same shape as `acp` — OpenClaw is an ACP wrapper. */
|
|
116
|
+
openClaw(cfg, memory) {
|
|
117
|
+
if (!memory)
|
|
118
|
+
return cfg;
|
|
119
|
+
if (Array.isArray(cfg.prompt)) {
|
|
120
|
+
return {
|
|
121
|
+
...cfg,
|
|
122
|
+
prompt: [{ type: 'text', text: `Context from prior interactions:\n${memory}\n\n` }, ...cfg.prompt],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
...cfg,
|
|
127
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
/**
|
|
131
|
+
* Prepend memory to codex CLI's positional prompt. Same pattern as
|
|
132
|
+
* claudeCode: no system-prompt flag, memory becomes part of the user
|
|
133
|
+
* prompt.
|
|
134
|
+
*/
|
|
135
|
+
codexCli(cfg, memory) {
|
|
136
|
+
if (!memory)
|
|
137
|
+
return cfg;
|
|
138
|
+
return {
|
|
139
|
+
...cfg,
|
|
140
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* Prepend memory to pi's prompt. Pi's `prompt(text)` takes a string;
|
|
145
|
+
* pi handles its own system prompt internally via prompt templates
|
|
146
|
+
* and resource loader.
|
|
147
|
+
*/
|
|
148
|
+
pi(cfg, memory) {
|
|
149
|
+
if (!memory)
|
|
150
|
+
return cfg;
|
|
151
|
+
return {
|
|
152
|
+
...cfg,
|
|
153
|
+
prompt: `Context from prior interactions:\n${memory}\n\nCurrent request: ${cfg.prompt}`,
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Resume injectors
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
/** @internal */
|
|
161
|
+
export const injectResume = {
|
|
162
|
+
/** inferenceAgent declares `resumption: 'none'`; passthrough. */
|
|
163
|
+
inference(cfg, _token) {
|
|
164
|
+
return cfg;
|
|
165
|
+
},
|
|
166
|
+
/** anthropicAgent declares `resumption: 'none'`; passthrough. */
|
|
167
|
+
anthropic(cfg, _token) {
|
|
168
|
+
return cfg;
|
|
169
|
+
},
|
|
170
|
+
/** Codex's Responses API takes `previous_response_id` natively. */
|
|
171
|
+
codex(cfg, token) {
|
|
172
|
+
if (token.kind !== 'response-id')
|
|
173
|
+
return cfg;
|
|
174
|
+
return { ...cfg, previousResponseId: token.id };
|
|
175
|
+
},
|
|
176
|
+
/** Claude Code's CLI takes `--resume <session-id>`. */
|
|
177
|
+
claudeCode(cfg, token) {
|
|
178
|
+
if (token.kind !== 'opaque')
|
|
179
|
+
return cfg;
|
|
180
|
+
return { ...cfg, resumeSessionId: token.data };
|
|
181
|
+
},
|
|
182
|
+
/** ACP's `session/load` takes a session id. */
|
|
183
|
+
acp(cfg, token) {
|
|
184
|
+
if (token.kind !== 'opaque')
|
|
185
|
+
return cfg;
|
|
186
|
+
return { ...cfg, resumeSessionId: token.data };
|
|
187
|
+
},
|
|
188
|
+
/** Hermes inherits ACP's resume path. */
|
|
189
|
+
hermes(cfg, token) {
|
|
190
|
+
if (token.kind !== 'opaque')
|
|
191
|
+
return cfg;
|
|
192
|
+
return { ...cfg, resumeSessionId: token.data };
|
|
193
|
+
},
|
|
194
|
+
/** OpenClaw inherits ACP's resume path. */
|
|
195
|
+
openClaw(cfg, token) {
|
|
196
|
+
if (token.kind !== 'opaque')
|
|
197
|
+
return cfg;
|
|
198
|
+
return { ...cfg, resumeSessionId: token.data };
|
|
199
|
+
},
|
|
200
|
+
/** Codex CLI uses thread-id-based resumption. */
|
|
201
|
+
codexCli(cfg, token) {
|
|
202
|
+
if (token.kind !== 'opaque')
|
|
203
|
+
return cfg;
|
|
204
|
+
return { ...cfg, resumeThreadId: token.data };
|
|
205
|
+
},
|
|
206
|
+
/**
|
|
207
|
+
* Pi resumption uses on-disk session files. Accepts either
|
|
208
|
+
* `session-file` (preferred — the actual session path) or `opaque`
|
|
209
|
+
* (treated as a session id for SessionManager lookup; falls through
|
|
210
|
+
* unchanged so the caller can set continueSession themselves).
|
|
211
|
+
*/
|
|
212
|
+
pi(cfg, token) {
|
|
213
|
+
if (token.kind === 'session-file') {
|
|
214
|
+
return { ...cfg, resumeSessionFile: token.path };
|
|
215
|
+
}
|
|
216
|
+
return cfg;
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=injectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectors.js","sourceRoot":"","sources":["../src/injectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw adapter — wraps the ACP chassis to talk to OpenClaw via `acpx`.
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw itself runs as a Gateway daemon (default :18789); `acpx` is the
|
|
5
|
+
* companion ACP client that bridges the Gateway. The adapter spawns `acpx`
|
|
6
|
+
* and lets the chassis handle the protocol.
|
|
7
|
+
*
|
|
8
|
+
* The Gateway must be running before the adapter is invoked. If it isn't,
|
|
9
|
+
* `acpx` exits early and the adapter surfaces the subprocess stderr as a
|
|
10
|
+
* `native { kind: 'acp:stderr' }` event followed by `finishReason: 'error'`.
|
|
11
|
+
*
|
|
12
|
+
* NemoClaw mode: NemoClaw is NVIDIA's sandboxing layer that runs OpenClaw
|
|
13
|
+
* inside an isolated environment. Setting `sandbox: 'nemoclaw'` invokes the
|
|
14
|
+
* chassis command via `nemoclaw connect`, which routes IO through the
|
|
15
|
+
* sandbox. Requires NemoClaw to be installed and onboarded.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
import { type AgentAdapterMeta } from '@autonome-research/thread-phase/agents';
|
|
20
|
+
import { type AcpAgentConfig, type ContentBlock, type McpServer } from '../acp/index.js';
|
|
21
|
+
/** @internal */
|
|
22
|
+
export interface OpenClawAgentConfig {
|
|
23
|
+
/** Working directory advertised to OpenClaw at session/new. */
|
|
24
|
+
cwd: string;
|
|
25
|
+
/** Prompt sent via session/prompt. */
|
|
26
|
+
prompt: string | ContentBlock[];
|
|
27
|
+
/** Resume a prior OpenClaw session by its id. */
|
|
28
|
+
resumeSessionId?: string;
|
|
29
|
+
/** Path to the `acpx` executable; default 'acpx'. */
|
|
30
|
+
openClawExecutable?: string;
|
|
31
|
+
/** Extra args passed to acpx; default []. */
|
|
32
|
+
openClawArgs?: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Sandbox mode. 'local' (default) runs acpx directly. 'nemoclaw' invokes
|
|
35
|
+
* the acpx command through `nemoclaw connect` so the agent runs inside
|
|
36
|
+
* the NemoClaw OpenShell sandbox.
|
|
37
|
+
*/
|
|
38
|
+
sandbox?: 'local' | 'nemoclaw';
|
|
39
|
+
/** Executable for the NemoClaw CLI; default 'nemoclaw'. */
|
|
40
|
+
nemoclawExecutable?: string;
|
|
41
|
+
/** Environment overrides merged with process.env. */
|
|
42
|
+
env?: Record<string, string>;
|
|
43
|
+
/** MCP servers exposed to OpenClaw; default []. */
|
|
44
|
+
mcpServers?: McpServer[];
|
|
45
|
+
/** Permission handling for tool calls OpenClaw asks the client to authorize. */
|
|
46
|
+
permissionMode?: AcpAgentConfig['permissionMode'];
|
|
47
|
+
/** Cancel-then-SIGTERM grace window in ms; default 2000. */
|
|
48
|
+
cancelGraceMs?: number;
|
|
49
|
+
/** SIGTERM-then-SIGKILL grace window in ms; default 3000. */
|
|
50
|
+
killGraceMs?: number;
|
|
51
|
+
}
|
|
52
|
+
/** @internal */
|
|
53
|
+
export declare const openClawAgent: AgentAdapterMeta<OpenClawAgentConfig>;
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openclaw/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;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,mBAAmB;IAClC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAChC,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/B,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mDAAmD;IACnD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,gFAAgF;IAChF,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;AAwCD,gBAAgB;AAChB,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,mBAAmB,CAI9D,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw adapter — wraps the ACP chassis to talk to OpenClaw via `acpx`.
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw itself runs as a Gateway daemon (default :18789); `acpx` is the
|
|
5
|
+
* companion ACP client that bridges the Gateway. The adapter spawns `acpx`
|
|
6
|
+
* and lets the chassis handle the protocol.
|
|
7
|
+
*
|
|
8
|
+
* The Gateway must be running before the adapter is invoked. If it isn't,
|
|
9
|
+
* `acpx` exits early and the adapter surfaces the subprocess stderr as a
|
|
10
|
+
* `native { kind: 'acp:stderr' }` event followed by `finishReason: 'error'`.
|
|
11
|
+
*
|
|
12
|
+
* NemoClaw mode: NemoClaw is NVIDIA's sandboxing layer that runs OpenClaw
|
|
13
|
+
* inside an isolated environment. Setting `sandbox: 'nemoclaw'` invokes the
|
|
14
|
+
* chassis command via `nemoclaw connect`, which routes IO through the
|
|
15
|
+
* sandbox. Requires NemoClaw to be installed and onboarded.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
import { defineAgentAdapter } from '@autonome-research/thread-phase/agents';
|
|
20
|
+
import { createAcpAdapter, } from '../acp/index.js';
|
|
21
|
+
const chassis = createAcpAdapter({ id: 'openclaw' });
|
|
22
|
+
function toAcpConfig(config) {
|
|
23
|
+
const acpx = config.openClawExecutable ?? 'acpx';
|
|
24
|
+
const userArgs = config.openClawArgs ?? [];
|
|
25
|
+
if (config.sandbox === 'nemoclaw') {
|
|
26
|
+
const nemoclaw = config.nemoclawExecutable ?? 'nemoclaw';
|
|
27
|
+
return {
|
|
28
|
+
command: nemoclaw,
|
|
29
|
+
args: ['connect', acpx, ...userArgs],
|
|
30
|
+
cwd: config.cwd,
|
|
31
|
+
prompt: config.prompt,
|
|
32
|
+
resumeSessionId: config.resumeSessionId,
|
|
33
|
+
env: config.env,
|
|
34
|
+
mcpServers: config.mcpServers,
|
|
35
|
+
permissionMode: config.permissionMode,
|
|
36
|
+
cancelGraceMs: config.cancelGraceMs,
|
|
37
|
+
killGraceMs: config.killGraceMs,
|
|
38
|
+
clientInfo: { name: 'thread-phase-agents', version: '0.0.1' },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
command: acpx,
|
|
43
|
+
args: userArgs,
|
|
44
|
+
cwd: config.cwd,
|
|
45
|
+
prompt: config.prompt,
|
|
46
|
+
resumeSessionId: config.resumeSessionId,
|
|
47
|
+
env: config.env,
|
|
48
|
+
mcpServers: config.mcpServers,
|
|
49
|
+
permissionMode: config.permissionMode,
|
|
50
|
+
cancelGraceMs: config.cancelGraceMs,
|
|
51
|
+
killGraceMs: config.killGraceMs,
|
|
52
|
+
clientInfo: { name: 'thread-phase-agents', version: '0.0.1' },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** @internal */
|
|
56
|
+
export const openClawAgent = defineAgentAdapter({
|
|
57
|
+
id: chassis.id,
|
|
58
|
+
capabilities: chassis.capabilities,
|
|
59
|
+
adapter: (config, options) => chassis.adapter(toAcpConfig(config), options),
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openclaw/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,kBAAkB,EAAyB,MAAM,wCAAwC,CAAC;AACnG,OAAO,EACL,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AAkCzB,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAErD,SAAS,WAAW,CAAC,MAA2B;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAE3C,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,UAAU,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YACpC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,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,aAAa,GAA0C,kBAAkB,CAAC;IACrF,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,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi adapter — in-process via `@mariozechner/pi-coding-agent`.
|
|
3
|
+
*
|
|
4
|
+
* Pi is a fully-featured TypeScript coding agent SDK. Unlike the
|
|
5
|
+
* subprocess-based adapters (claude-code, codex-cli, ACP), pi runs in
|
|
6
|
+
* the same Node process: the adapter calls `createAgentSession`,
|
|
7
|
+
* subscribes to its event stream, and forwards each event into the
|
|
8
|
+
* canonical AgentEvent vocabulary.
|
|
9
|
+
*
|
|
10
|
+
* The headline difference from every other adapter: **pi supports
|
|
11
|
+
* native mid-stream steering and follow-up.** This is the first
|
|
12
|
+
* adapter where both `steer()` and `followUp()` on
|
|
13
|
+
* `SteerableAgentRun` actually work at runtime — pi accepts new
|
|
14
|
+
* messages while the model is still generating.
|
|
15
|
+
*
|
|
16
|
+
* Capabilities:
|
|
17
|
+
* streaming 'text'
|
|
18
|
+
* cancellation 'cooperative' (session.abort())
|
|
19
|
+
* resumption 'session-file' (pi's SessionManager persists to disk)
|
|
20
|
+
* structuredOutput 'prompted'
|
|
21
|
+
*
|
|
22
|
+
* Event translation:
|
|
23
|
+
* pi agent_start -> canonical agent_start
|
|
24
|
+
* pi message_update + text_delta -> canonical text
|
|
25
|
+
* pi message_update + thinking_* -> canonical thinking
|
|
26
|
+
* pi tool_execution_start -> canonical tool_call
|
|
27
|
+
* pi tool_execution_end -> canonical tool_result
|
|
28
|
+
* pi turn_end -> canonical turn_end (via endTurn)
|
|
29
|
+
* pi agent_end -> canonical agent_end
|
|
30
|
+
* everything else -> native events (kind: 'pi:*')
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
import { type AgentAdapterMeta, type StructuredOutputConfig } from '@autonome-research/thread-phase/agents';
|
|
35
|
+
type AgentSession = unknown;
|
|
36
|
+
/** @internal */
|
|
37
|
+
export interface PiAgentConfig {
|
|
38
|
+
/** Working directory. Default: process.cwd(). */
|
|
39
|
+
cwd?: string;
|
|
40
|
+
/** Prompt text sent to `session.prompt`. */
|
|
41
|
+
prompt: string;
|
|
42
|
+
/**
|
|
43
|
+
* Resume a specific pi session file. Mutually exclusive with
|
|
44
|
+
* `continueSession`. The path is exposed as `ResumeToken{ kind:
|
|
45
|
+
* 'session-file' }` on agent_start and agent_end.
|
|
46
|
+
*/
|
|
47
|
+
resumeSessionFile?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Continue the most recent session in cwd. Equivalent to passing
|
|
50
|
+
* `continueSession: true` to `createAgentSession`.
|
|
51
|
+
*/
|
|
52
|
+
continueSession?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Pi model object — pass `getModel('provider', 'model')` from
|
|
55
|
+
* `@mariozechner/pi-ai`. When omitted, pi uses the default from
|
|
56
|
+
* settings.json.
|
|
57
|
+
*/
|
|
58
|
+
model?: unknown;
|
|
59
|
+
/** Thinking level override. */
|
|
60
|
+
thinkingLevel?: 'low' | 'medium' | 'high';
|
|
61
|
+
/**
|
|
62
|
+
* Additional options forwarded to `createAgentSession`. Use this to
|
|
63
|
+
* pass tools, customTools, extensions, auth storage, etc.
|
|
64
|
+
*/
|
|
65
|
+
sessionOptions?: Record<string, unknown>;
|
|
66
|
+
/**
|
|
67
|
+
* Pre-built pi session — bypasses `createAgentSession` entirely.
|
|
68
|
+
* Useful for tests and for callers managing the session lifecycle
|
|
69
|
+
* themselves. When provided, the adapter does NOT dispose the
|
|
70
|
+
* session at run end.
|
|
71
|
+
*/
|
|
72
|
+
session?: AgentSession;
|
|
73
|
+
/** Optional structured-output spec (prompted path). */
|
|
74
|
+
outputSchema?: StructuredOutputConfig;
|
|
75
|
+
}
|
|
76
|
+
/** @internal */
|
|
77
|
+
export declare const piAgent: AgentAdapterMeta<PiAgentConfig>;
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/pi/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EASL,KAAK,gBAAgB,EAOrB,KAAK,sBAAsB,EAC5B,MAAM,wCAAwC,CAAC;AAOhD,KAAK,YAAY,GAAG,OAAO,CAAC;AAK5B,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,uDAAuD;IACvD,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACvC;AAED,gBAAgB;AAChB,eAAO,MAAM,OAAO,EAAE,gBAAgB,CAAC,aAAa,CASlD,CAAC"}
|