@monoes/monomindcli 2.9.21 → 2.9.22
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/.claude/skills/mastermind-createorg/SKILL.md +26 -3
- package/dist/src/commands/events.d.ts +9 -0
- package/dist/src/commands/events.d.ts.map +1 -0
- package/dist/src/commands/events.js +89 -0
- package/dist/src/commands/events.js.map +1 -0
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +2 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +21 -0
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +79 -0
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +20 -0
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +16 -1
- package/dist/src/orgrt/approvals.d.ts.map +1 -1
- package/dist/src/orgrt/approvals.js +39 -2
- package/dist/src/orgrt/approvals.js.map +1 -1
- package/dist/src/orgrt/copilot-runner.d.ts +14 -0
- package/dist/src/orgrt/copilot-runner.d.ts.map +1 -0
- package/dist/src/orgrt/copilot-runner.js +250 -0
- package/dist/src/orgrt/copilot-runner.js.map +1 -0
- package/dist/src/orgrt/crush-runner.d.ts +24 -0
- package/dist/src/orgrt/crush-runner.d.ts.map +1 -0
- package/dist/src/orgrt/crush-runner.js +251 -0
- package/dist/src/orgrt/crush-runner.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +40 -1
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +63 -2
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/grok-runner.d.ts +18 -0
- package/dist/src/orgrt/grok-runner.d.ts.map +1 -0
- package/dist/src/orgrt/grok-runner.js +323 -0
- package/dist/src/orgrt/grok-runner.js.map +1 -0
- package/dist/src/orgrt/pi-rpc-runner.d.ts +68 -0
- package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -0
- package/dist/src/orgrt/pi-rpc-runner.js +400 -0
- package/dist/src/orgrt/pi-rpc-runner.js.map +1 -0
- package/dist/src/orgrt/pi-runner.d.ts +16 -0
- package/dist/src/orgrt/pi-runner.d.ts.map +1 -0
- package/dist/src/orgrt/pi-runner.js +264 -0
- package/dist/src/orgrt/pi-runner.js.map +1 -0
- package/dist/src/orgrt/qwen-runner.d.ts +18 -0
- package/dist/src/orgrt/qwen-runner.d.ts.map +1 -0
- package/dist/src/orgrt/qwen-runner.js +267 -0
- package/dist/src/orgrt/qwen-runner.js.map +1 -0
- package/dist/src/orgrt/types.d.ts +18 -0
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +2 -2
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/orgrt/usage-proxy.d.ts +32 -0
- package/dist/src/orgrt/usage-proxy.d.ts.map +1 -0
- package/dist/src/orgrt/usage-proxy.js +226 -0
- package/dist/src/orgrt/usage-proxy.js.map +1 -0
- package/dist/src/ui/dashboard.html +63 -0
- package/dist/src/ui/orgs.html +8 -1
- package/dist/src/ui/routes-org.mjs +26 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/grok-runner.ts
|
|
2
|
+
/**
|
|
3
|
+
* GrokAgentRunner — AgentRunner impl backed by the Grok Build CLI (`grok`,
|
|
4
|
+
* xAI's agentic coding CLI: https://docs.x.ai/build/cli).
|
|
5
|
+
*
|
|
6
|
+
* Architectural pattern: SAME as CodexAgentRunner/KimiCodeAgentRunner — spawn
|
|
7
|
+
* the vendor's CLI binary, parse its NDJSON stream, normalize to
|
|
8
|
+
* AgentMessage. No SDK dependency.
|
|
9
|
+
*
|
|
10
|
+
* Auth: inherited from the CLI's own login flow (subscription/API key
|
|
11
|
+
* managed by `grok` itself). No env vars set by this runner.
|
|
12
|
+
*
|
|
13
|
+
* Org tools (org_send, knowledge_search, ask_human, …) — FENCE PROTOCOL:
|
|
14
|
+
* Same approach as codex/kimi/opencode. Tools are rendered INTO the first
|
|
15
|
+
* prompt; the model emits ```tool_call fences; this runner parses them out
|
|
16
|
+
* of the assistant text, executes the real OrgToolDef handlers in-process
|
|
17
|
+
* (gated through canUseTool), and feeds results back as the next prompt.
|
|
18
|
+
*
|
|
19
|
+
* Subprocess protocol — per public docs (docs.x.ai/build/cli/reference), NOT
|
|
20
|
+
* byte-verified against a running binary (unlike the codex/kimi runners,
|
|
21
|
+
* which were checked against an installed CLI). The exact NDJSON event field
|
|
22
|
+
* names for `--format json` were not available at implementation time, so
|
|
23
|
+
* parseGrokEvents() tolerates several plausible shapes (codex-style
|
|
24
|
+
* `item.type === 'agent_message'`, a flat `role: 'assistant'` shape, and a
|
|
25
|
+
* flat `type: 'assistant'`/`'message'` shape) rather than committing to one.
|
|
26
|
+
* Verify against your installed `grok` version and tighten this parser if
|
|
27
|
+
* the real shape differs — a wrong guess here fails closed (no text
|
|
28
|
+
* extracted, not a crash), which is what the "no known shape matched" path
|
|
29
|
+
* is for.
|
|
30
|
+
* - Invocation: `grok -p "<prompt>" --format json [--model X] [--cwd Y]
|
|
31
|
+
* [--always-approve] [-r <sessionId> | -c]`
|
|
32
|
+
* - Session continuity: `-r/--resume [<id>]` resumes a specific session,
|
|
33
|
+
* `-c/--continue` resumes the most recent one. Session id is captured
|
|
34
|
+
* from any event carrying `session_id` / `sessionId` / `thread_id`.
|
|
35
|
+
* - stderr is human diagnostics; buffered and surfaced on non-zero exit.
|
|
36
|
+
*/
|
|
37
|
+
import { spawn } from 'node:child_process';
|
|
38
|
+
import { buildToolProtocol, parseToolCalls, executeToolCall, formatToolResults, MAX_TOOL_ROUNDS, TOOL_CALL_RE } from './tool-fence.js';
|
|
39
|
+
const TURN_TIMEOUT_MS = 2 * 60 * 60 * 1000; // 2 hours, matching the other subprocess runners
|
|
40
|
+
/** Distinct from TURN_TIMEOUT_MS: catches a hung first-run interactive prompt
|
|
41
|
+
* (trust/telemetry gate) fast instead of waiting out the full turn timeout.
|
|
42
|
+
* Fires only if the process has produced ZERO stdout by this point — any
|
|
43
|
+
* output at all disarms it, since a slow model response is not a hang. */
|
|
44
|
+
const STARTUP_GRACE_MS = 45_000;
|
|
45
|
+
/** Pull a session/thread id out of a parsed event, tolerating the field-name
|
|
46
|
+
* variants different CLI versions/backends tend to use. */
|
|
47
|
+
function extractSessionId(ev) {
|
|
48
|
+
for (const key of ['session_id', 'sessionId', 'thread_id', 'threadId']) {
|
|
49
|
+
const v = ev[key];
|
|
50
|
+
if (typeof v === 'string' && v)
|
|
51
|
+
return v;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
/** Pull assistant-visible text out of a parsed event, tolerating the shape
|
|
56
|
+
* variants documented (or plausible) for `grok --format json`:
|
|
57
|
+
* - codex-style: { type: 'item.completed', item: { type: 'agent_message', text } }
|
|
58
|
+
* - flat role shape: { role: 'assistant', content: '...' | [{type:'text',text}] }
|
|
59
|
+
* - flat type shape: { type: 'assistant' | 'message', text: '...' } */
|
|
60
|
+
function extractText(ev) {
|
|
61
|
+
const item = ev.item;
|
|
62
|
+
if (item && (item.type === 'agent_message' || item.type === 'message') && typeof item.text === 'string') {
|
|
63
|
+
return item.text;
|
|
64
|
+
}
|
|
65
|
+
if (ev.role === 'assistant') {
|
|
66
|
+
const content = ev.content;
|
|
67
|
+
if (typeof content === 'string')
|
|
68
|
+
return content;
|
|
69
|
+
if (Array.isArray(content)) {
|
|
70
|
+
return content
|
|
71
|
+
.filter((b) => !!b && typeof b === 'object' && b.type === 'text')
|
|
72
|
+
.map((b) => b.text)
|
|
73
|
+
.join('\n');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if ((ev.type === 'assistant' || ev.type === 'message') && typeof ev.text === 'string') {
|
|
77
|
+
return ev.text;
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
/** Pull usage totals out of a parsed event, tolerating openai-ish
|
|
82
|
+
* (prompt_tokens/completion_tokens) and codex-ish (input_tokens/output_tokens)
|
|
83
|
+
* field names. */
|
|
84
|
+
function extractUsage(ev) {
|
|
85
|
+
const usage = ev.usage;
|
|
86
|
+
if (!usage)
|
|
87
|
+
return undefined;
|
|
88
|
+
const input = usage.input_tokens ?? usage.prompt_tokens;
|
|
89
|
+
const output = usage.output_tokens ?? usage.completion_tokens;
|
|
90
|
+
if (typeof input === 'number' || typeof output === 'number') {
|
|
91
|
+
return { input: typeof input === 'number' ? input : 0, output: typeof output === 'number' ? output : 0 };
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
/** Pure NDJSON parser — exported so it can be unit tested against fixture
|
|
96
|
+
* lines without spawning the real CLI (see grok-runner.test.ts). */
|
|
97
|
+
export function parseGrokEvents(lines) {
|
|
98
|
+
const rawTexts = [];
|
|
99
|
+
let sessionId;
|
|
100
|
+
let inputTokens = 0;
|
|
101
|
+
let outputTokens = 0;
|
|
102
|
+
let error;
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
const trimmed = line.trim();
|
|
105
|
+
if (!trimmed || !trimmed.startsWith('{'))
|
|
106
|
+
continue;
|
|
107
|
+
let ev;
|
|
108
|
+
try {
|
|
109
|
+
ev = JSON.parse(trimmed);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const sid = extractSessionId(ev);
|
|
115
|
+
if (sid)
|
|
116
|
+
sessionId = sid;
|
|
117
|
+
const text = extractText(ev);
|
|
118
|
+
if (text)
|
|
119
|
+
rawTexts.push(text);
|
|
120
|
+
const usage = extractUsage(ev);
|
|
121
|
+
if (usage) {
|
|
122
|
+
inputTokens = usage.input;
|
|
123
|
+
outputTokens = usage.output;
|
|
124
|
+
}
|
|
125
|
+
if (ev.type === 'error' || ev.type === 'turn.failed') {
|
|
126
|
+
const errMsg = ev.error?.message ?? ev.message;
|
|
127
|
+
if (typeof errMsg === 'string')
|
|
128
|
+
error = errMsg;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const texts = rawTexts.map((t) => t.replace(TOOL_CALL_RE, '').trim());
|
|
132
|
+
return { texts, rawTexts, sessionId, inputTokens, outputTokens, error };
|
|
133
|
+
}
|
|
134
|
+
export class GrokAgentRunner {
|
|
135
|
+
grokBin;
|
|
136
|
+
constructor(grokBin) {
|
|
137
|
+
this.grokBin = grokBin;
|
|
138
|
+
}
|
|
139
|
+
async *run(args) {
|
|
140
|
+
const bin = this.grokBin || process.env.GROK_CLI_BIN || 'grok';
|
|
141
|
+
let sessionId = args.resume;
|
|
142
|
+
try {
|
|
143
|
+
for await (const p of args.prompt) {
|
|
144
|
+
const text = typeof p === 'string' ? p : (p?.message?.content ?? String(p ?? ''));
|
|
145
|
+
let nextPrompt = text;
|
|
146
|
+
let turnInputTokens = 0;
|
|
147
|
+
let turnOutputTokens = 0;
|
|
148
|
+
for (let round = 0; round <= MAX_TOOL_ROUNDS; round++) {
|
|
149
|
+
// Gated on !sessionId alone, NOT `round === 0 && !sessionId` — if
|
|
150
|
+
// a session id never gets parsed out of grok's output (a real
|
|
151
|
+
// risk, per this file's header: the exact event shape is a
|
|
152
|
+
// documented guess), every round after the first would otherwise
|
|
153
|
+
// spawn a completely fresh, contextless grok invocation carrying
|
|
154
|
+
// only the tool-result text — no system prompt, no session to
|
|
155
|
+
// resume. Once a session id IS captured, --resume takes over and
|
|
156
|
+
// this stops re-sending the system prompt.
|
|
157
|
+
const promptWithSystem = !sessionId
|
|
158
|
+
? `${args.systemPrompt}${buildToolProtocol(args.tools)}\n\n---\n\n${nextPrompt}`
|
|
159
|
+
: nextPrompt;
|
|
160
|
+
const outcome = await this.runTurn(bin, promptWithSystem, sessionId, args);
|
|
161
|
+
if (outcome.sessionId)
|
|
162
|
+
sessionId = outcome.sessionId;
|
|
163
|
+
if (outcome.hangSuspected) {
|
|
164
|
+
throw new Error(`GrokAgentRunner: grok produced no output within ${STARTUP_GRACE_MS / 1000}s and was killed. ` +
|
|
165
|
+
'This usually means it is stuck on a first-run interactive prompt (trust/telemetry gate) ' +
|
|
166
|
+
'that headless mode has no way to answer. Run `grok` once manually in a real terminal in ' +
|
|
167
|
+
`this project to accept any prompts, then retry.${outcome.stderrTail ? `\nstderr: ${outcome.stderrTail.slice(-500)}` : ''}`);
|
|
168
|
+
}
|
|
169
|
+
if (outcome.exitCode !== 0 || outcome.error) {
|
|
170
|
+
throw new Error(`GrokAgentRunner: grok failed (exit ${outcome.exitCode})` +
|
|
171
|
+
(outcome.timedOut ? ` — killed after exceeding the ${TURN_TIMEOUT_MS / 3_600_000}h turn timeout` : '') +
|
|
172
|
+
(outcome.error ? `: ${outcome.error}` : '') +
|
|
173
|
+
(outcome.stderrTail ? `\nstderr: ${outcome.stderrTail.slice(-500)}` : ''));
|
|
174
|
+
}
|
|
175
|
+
for (const t of outcome.texts) {
|
|
176
|
+
if (t.trim())
|
|
177
|
+
yield { type: 'assistant', session_id: sessionId, text: t };
|
|
178
|
+
}
|
|
179
|
+
turnInputTokens += outcome.inputTokens;
|
|
180
|
+
turnOutputTokens += outcome.outputTokens;
|
|
181
|
+
const malformed = [];
|
|
182
|
+
const calls = parseToolCalls(outcome.rawTexts, (raw, err) => malformed.push(`[monomind] ignored malformed tool_call fence (${err}): ${raw.slice(0, 200)}`));
|
|
183
|
+
for (const note of malformed)
|
|
184
|
+
yield { type: 'assistant', session_id: sessionId, text: note };
|
|
185
|
+
if (calls.length === 0)
|
|
186
|
+
break;
|
|
187
|
+
if (round === MAX_TOOL_ROUNDS) {
|
|
188
|
+
yield {
|
|
189
|
+
type: 'assistant', session_id: sessionId,
|
|
190
|
+
text: `[monomind] tool-call round cap (${MAX_TOOL_ROUNDS}) reached — dropping ${calls.length} pending tool call(s)`,
|
|
191
|
+
};
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
const results = [];
|
|
195
|
+
for (const call of calls)
|
|
196
|
+
results.push(await executeToolCall(args.tools, call, args.canUseTool));
|
|
197
|
+
nextPrompt = formatToolResults(calls, results);
|
|
198
|
+
}
|
|
199
|
+
yield {
|
|
200
|
+
type: 'result',
|
|
201
|
+
session_id: sessionId,
|
|
202
|
+
subtype: 'success',
|
|
203
|
+
input_tokens: turnInputTokens,
|
|
204
|
+
output_tokens: turnOutputTokens,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
if (err.code === 'ENOENT') {
|
|
210
|
+
throw new Error('GrokAgentRunner requires the Grok Build CLI (grok) on PATH. ' +
|
|
211
|
+
'Install it per https://docs.x.ai/build/cli, then log in. ' +
|
|
212
|
+
'Or unset the runtime to use Claude.');
|
|
213
|
+
}
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
runTurn(bin, prompt, sessionId, args) {
|
|
218
|
+
return new Promise((resolve, reject) => {
|
|
219
|
+
const cliArgs = ['-p', prompt, '--format', 'json', '--always-approve'];
|
|
220
|
+
if (args.model)
|
|
221
|
+
cliArgs.push('--model', args.model);
|
|
222
|
+
cliArgs.push('--cwd', args.cwd);
|
|
223
|
+
if (sessionId)
|
|
224
|
+
cliArgs.push('--resume', sessionId);
|
|
225
|
+
const child = spawn(bin, cliArgs, {
|
|
226
|
+
cwd: args.cwd,
|
|
227
|
+
env: { ...process.env, ...args.env },
|
|
228
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
229
|
+
});
|
|
230
|
+
let stderrTail = '';
|
|
231
|
+
child.stderr?.on('data', (c) => { stderrTail = (stderrTail + c.toString()).slice(-4000); });
|
|
232
|
+
let sawOutput = false;
|
|
233
|
+
let timedOut = false;
|
|
234
|
+
let hangSuspected = false;
|
|
235
|
+
const KILL_GRACE_MS = 5000;
|
|
236
|
+
let killTimer;
|
|
237
|
+
const timer = setTimeout(() => {
|
|
238
|
+
timedOut = true;
|
|
239
|
+
child.kill('SIGTERM');
|
|
240
|
+
killTimer = setTimeout(() => { try {
|
|
241
|
+
child.kill('SIGKILL');
|
|
242
|
+
}
|
|
243
|
+
catch { /* already gone */ } }, KILL_GRACE_MS);
|
|
244
|
+
killTimer.unref?.();
|
|
245
|
+
}, TURN_TIMEOUT_MS);
|
|
246
|
+
// See STARTUP_GRACE_MS — disarmed by the first stdout chunk below.
|
|
247
|
+
let hangTimer = setTimeout(() => {
|
|
248
|
+
hangSuspected = true;
|
|
249
|
+
child.kill('SIGTERM');
|
|
250
|
+
killTimer = setTimeout(() => { try {
|
|
251
|
+
child.kill('SIGKILL');
|
|
252
|
+
}
|
|
253
|
+
catch { /* already gone */ } }, KILL_GRACE_MS);
|
|
254
|
+
killTimer.unref?.();
|
|
255
|
+
}, STARTUP_GRACE_MS);
|
|
256
|
+
const exitPromise = new Promise((res, rej) => {
|
|
257
|
+
child.on('error', rej);
|
|
258
|
+
child.on('close', (code) => res(code ?? 1));
|
|
259
|
+
});
|
|
260
|
+
exitPromise.catch(() => { });
|
|
261
|
+
const readLines = (async () => {
|
|
262
|
+
const lines = [];
|
|
263
|
+
let buf = '';
|
|
264
|
+
for await (const chunk of child.stdout) {
|
|
265
|
+
if (!sawOutput) {
|
|
266
|
+
sawOutput = true;
|
|
267
|
+
if (hangTimer) {
|
|
268
|
+
clearTimeout(hangTimer);
|
|
269
|
+
hangTimer = undefined;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
buf += chunk.toString();
|
|
273
|
+
const parts = buf.split('\n');
|
|
274
|
+
buf = parts.pop() ?? '';
|
|
275
|
+
lines.push(...parts);
|
|
276
|
+
}
|
|
277
|
+
if (buf.trim())
|
|
278
|
+
lines.push(buf);
|
|
279
|
+
return lines;
|
|
280
|
+
})();
|
|
281
|
+
// Timer cleanup lives in a top-level .finally() (not nested inside a
|
|
282
|
+
// success-path .then()) so it runs on EITHER path — a stdout stream
|
|
283
|
+
// error would otherwise skip straight to reject() and leave the
|
|
284
|
+
// TURN_TIMEOUT_MS/hangTimer/killTimer timers running past the
|
|
285
|
+
// process's actual lifetime.
|
|
286
|
+
Promise.all([readLines, exitPromise])
|
|
287
|
+
.then(([lines, exitCode]) => {
|
|
288
|
+
const parsed = parseGrokEvents(lines);
|
|
289
|
+
resolve({
|
|
290
|
+
texts: parsed.texts,
|
|
291
|
+
rawTexts: parsed.rawTexts,
|
|
292
|
+
sessionId: parsed.sessionId ?? sessionId,
|
|
293
|
+
exitCode,
|
|
294
|
+
stderrTail,
|
|
295
|
+
timedOut,
|
|
296
|
+
hangSuspected,
|
|
297
|
+
inputTokens: parsed.inputTokens,
|
|
298
|
+
outputTokens: parsed.outputTokens,
|
|
299
|
+
error: parsed.error,
|
|
300
|
+
});
|
|
301
|
+
}, (err) => {
|
|
302
|
+
// A stdout stream error (the reject path) means the process is
|
|
303
|
+
// still ALIVE and unmanaged — none of the timeout/hang timers
|
|
304
|
+
// would have fired to kill it. Without this, that error would
|
|
305
|
+
// orphan the child. child.kill() on an already-dead process is a
|
|
306
|
+
// documented no-op, so this is safe on every path.
|
|
307
|
+
try {
|
|
308
|
+
child.kill('SIGTERM');
|
|
309
|
+
}
|
|
310
|
+
catch { /* already gone */ }
|
|
311
|
+
reject(err);
|
|
312
|
+
})
|
|
313
|
+
.finally(() => {
|
|
314
|
+
clearTimeout(timer);
|
|
315
|
+
if (hangTimer)
|
|
316
|
+
clearTimeout(hangTimer);
|
|
317
|
+
if (killTimer)
|
|
318
|
+
clearTimeout(killTimer);
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=grok-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-runner.js","sourceRoot":"","sources":["../../../src/orgrt/grok-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { AgentRunner, AgentRunArgs, AgentMessage } from './agent-runner.js';
|
|
2
|
+
interface PiContentBlock {
|
|
3
|
+
type: string;
|
|
4
|
+
text?: string;
|
|
5
|
+
thinking?: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
arguments?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
interface PiRpcMessage {
|
|
11
|
+
content?: PiContentBlock[];
|
|
12
|
+
}
|
|
13
|
+
/** Pure, transport-independent JSONL line decoder — feed it raw string
|
|
14
|
+
* chunks, get back every complete parsed object found so far (silently
|
|
15
|
+
* skipping malformed lines rather than throwing, matching this repo's
|
|
16
|
+
* other subprocess parsers). Exported for unit testing without a real
|
|
17
|
+
* subprocess. */
|
|
18
|
+
export declare class JsonlDecoder {
|
|
19
|
+
private buf;
|
|
20
|
+
feed(chunk: string): Record<string, unknown>[];
|
|
21
|
+
}
|
|
22
|
+
/** Encode a client→server RPC command as one LF-terminated JSON line.
|
|
23
|
+
* Exported for unit testing the exact wire format. */
|
|
24
|
+
export declare function encodePiRpcCommand(cmd: {
|
|
25
|
+
type: string;
|
|
26
|
+
message?: string;
|
|
27
|
+
id?: string;
|
|
28
|
+
}): string;
|
|
29
|
+
/** Extract assistant-visible text and org tool_call fences from a
|
|
30
|
+
* message_end event's `message.content` array. `thinking` blocks are
|
|
31
|
+
* dropped (internal reasoning, not meant for the bus); `toolCall` blocks
|
|
32
|
+
* are pi's own native tool calls, executed autonomously by pi itself —
|
|
33
|
+
* this runner never sees their results and doesn't need to. Exported for
|
|
34
|
+
* unit testing against fixture content arrays. */
|
|
35
|
+
export declare function extractPiRpcText(message: PiRpcMessage): string;
|
|
36
|
+
/** The subset of a spawned child process this runner needs — narrower than
|
|
37
|
+
* node:child_process's real type, and deliberately duck-typed so tests can
|
|
38
|
+
* supply a fake implementation (an EventEmitter-backed fake process) to
|
|
39
|
+
* exercise the full turn-completion state machine without a real `pi`
|
|
40
|
+
* binary. Given the residual protocol-inference risk documented in this
|
|
41
|
+
* file's header, testing the orchestration logic itself — not just the
|
|
42
|
+
* pure JSONL/extraction helpers — is the point of this seam. */
|
|
43
|
+
export interface PiRpcProcess {
|
|
44
|
+
stdin: {
|
|
45
|
+
write(data: string): void;
|
|
46
|
+
} | null;
|
|
47
|
+
stdout: {
|
|
48
|
+
on(event: 'data', cb: (chunk: Buffer) => void): void;
|
|
49
|
+
} | null;
|
|
50
|
+
stderr: {
|
|
51
|
+
on(event: 'data', cb: (chunk: Buffer) => void): void;
|
|
52
|
+
} | null;
|
|
53
|
+
on(event: 'close', cb: (code: number | null) => void): void;
|
|
54
|
+
on(event: 'error', cb: (err: Error) => void): void;
|
|
55
|
+
kill(signal?: string): void;
|
|
56
|
+
}
|
|
57
|
+
export type SpawnPiRpc = (bin: string, args: string[], opts: {
|
|
58
|
+
cwd: string;
|
|
59
|
+
env: Record<string, string | undefined>;
|
|
60
|
+
}) => PiRpcProcess;
|
|
61
|
+
export declare class PiRpcAgentRunner implements AgentRunner {
|
|
62
|
+
private piBin?;
|
|
63
|
+
private spawnFn;
|
|
64
|
+
constructor(piBin?: string | undefined, spawnFn?: SpawnPiRpc);
|
|
65
|
+
run(args: AgentRunArgs): AsyncIterable<AgentMessage>;
|
|
66
|
+
}
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=pi-rpc-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-rpc-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/pi-rpc-runner.ts"],"names":[],"mappings":"AA2DA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUjF,UAAU,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAC7I,UAAU,YAAY;IAAG,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAAE;AAEtD;;;;kBAIkB;AAClB,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAM;IACjB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAW7C;CACF;AAED;uDACuD;AACvD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/F;AAED;;;;;mDAKmD;AACnD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAK9D;AAED;;;;;;iEAMiE;AACjE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,KAAK,YAAY,CAAC;AAKvI,qBAAa,gBAAiB,YAAW,WAAW;IACtC,OAAO,CAAC,KAAK,CAAC;IAAU,OAAO,CAAC,OAAO;IAAnD,YAAoB,KAAK,CAAC,EAAE,MAAM,YAAA,EAAU,OAAO,GAAE,UAA8B,EAAI;IAEhF,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAqR1D;CACF"}
|