@monoes/monomindcli 2.9.25 → 2.10.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/.claude/helpers/control-start.cjs +15 -1
- package/.claude/helpers/handlers/edit-handler.cjs +3 -2
- package/.claude/helpers/handlers/route-handler.cjs +19 -4
- package/.claude/helpers/hook-handler.cjs +2 -0
- package/.claude/helpers/utils/monograph.cjs +8 -0
- package/.claude/skills/mastermind/SKILL.md +21 -0
- package/.claude/skills/mastermind/references/antigravity-tools.md +60 -0
- package/.claude/skills/mastermind/references/claude-code-tools.md +50 -0
- package/.claude/skills/mastermind/references/codex-tools.md +64 -0
- package/.claude/skills/mastermind/references/copilot-tools.md +49 -0
- package/.claude/skills/mastermind/references/gemini-tools.md +63 -0
- package/.claude/skills/mastermind/references/pi-tools.md +28 -0
- package/.claude/skills/mastermind-org/SKILL.md +16 -0
- package/dist/src/commands/agent-exec.d.ts +19 -0
- package/dist/src/commands/agent-exec.d.ts.map +1 -0
- package/dist/src/commands/agent-exec.js +301 -0
- package/dist/src/commands/agent-exec.js.map +1 -0
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +12 -0
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/browse.d.ts +2 -10
- package/dist/src/commands/browse.d.ts.map +1 -1
- package/dist/src/commands/browse.js +7 -2
- package/dist/src/commands/browse.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +16 -1
- package/dist/src/commands/doctor.js.map +1 -1
- 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 +10 -1
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +63 -5
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mastermind.d.ts +10 -0
- package/dist/src/commands/mastermind.d.ts.map +1 -0
- package/dist/src/commands/mastermind.js +62 -0
- package/dist/src/commands/mastermind.js.map +1 -0
- package/dist/src/commands/org-observe.d.ts +11 -0
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +200 -2
- 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 +154 -0
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/platforms.d.ts +9 -7
- package/dist/src/commands/platforms.d.ts.map +1 -1
- package/dist/src/commands/platforms.js +225 -571
- package/dist/src/commands/platforms.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +7 -1
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +22 -0
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/codex-generator.d.ts.map +1 -1
- package/dist/src/init/codex-generator.js +5 -3
- package/dist/src/init/codex-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts +6 -0
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +32 -3
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +5 -40
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts.map +1 -1
- package/dist/src/init/shared.js +6 -5
- package/dist/src/init/shared.js.map +1 -1
- package/dist/src/init/types.d.ts +4 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/init/upgrade.d.ts.map +1 -1
- package/dist/src/init/upgrade.js +11 -1
- package/dist/src/init/upgrade.js.map +1 -1
- package/dist/src/init/write-antigravity.d.ts.map +1 -1
- package/dist/src/init/write-antigravity.js +5 -50
- package/dist/src/init/write-antigravity.js.map +1 -1
- package/dist/src/init/write-claude.d.ts.map +1 -1
- package/dist/src/init/write-claude.js +4 -88
- package/dist/src/init/write-claude.js.map +1 -1
- package/dist/src/init/write-codex.d.ts.map +1 -1
- package/dist/src/init/write-codex.js +12 -8
- package/dist/src/init/write-codex.js.map +1 -1
- package/dist/src/init/write-kimicode.d.ts.map +1 -1
- package/dist/src/init/write-kimicode.js +4 -48
- package/dist/src/init/write-kimicode.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +6 -4
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/knowledge/eval/harness.d.ts.map +1 -1
- package/dist/src/knowledge/eval/harness.js +9 -11
- package/dist/src/knowledge/eval/harness.js.map +1 -1
- package/dist/src/mastermind/manifest-data.d.ts +10 -0
- package/dist/src/mastermind/manifest-data.d.ts.map +1 -0
- package/dist/src/mastermind/manifest-data.js +67 -0
- package/dist/src/mastermind/manifest-data.js.map +1 -0
- package/dist/src/mastermind/manifest.d.ts +22 -0
- package/dist/src/mastermind/manifest.d.ts.map +1 -0
- package/dist/src/mastermind/manifest.js +36 -0
- package/dist/src/mastermind/manifest.js.map +1 -0
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +2 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +1 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/platforms-tools.d.ts +5 -0
- package/dist/src/mcp-tools/platforms-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/platforms-tools.js +38 -0
- package/dist/src/mcp-tools/platforms-tools.js.map +1 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +54 -20
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +3 -2
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-kg.js +3 -3
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/monovector/diff-classifier.d.ts +2 -2
- package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
- package/dist/src/monovector/diff-classifier.js.map +1 -1
- package/dist/src/orgrt/agent-exec.d.ts +71 -0
- package/dist/src/orgrt/agent-exec.d.ts.map +1 -0
- package/dist/src/orgrt/agent-exec.js +463 -0
- package/dist/src/orgrt/agent-exec.js.map +1 -0
- package/dist/src/orgrt/runner-registry.d.ts +62 -0
- package/dist/src/orgrt/runner-registry.d.ts.map +1 -0
- package/dist/src/orgrt/runner-registry.js +201 -0
- package/dist/src/orgrt/runner-registry.js.map +1 -0
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +54 -24
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/task-dag.d.ts.map +1 -1
- package/dist/src/orgrt/task-dag.js +5 -1
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/platform-adapters/core.d.ts +20 -0
- package/dist/src/platform-adapters/core.d.ts.map +1 -0
- package/dist/src/platform-adapters/core.js +34 -0
- package/dist/src/platform-adapters/core.js.map +1 -0
- package/dist/src/platform-adapters/discovery.d.ts +15 -0
- package/dist/src/platform-adapters/discovery.d.ts.map +1 -0
- package/dist/src/platform-adapters/discovery.js +64 -0
- package/dist/src/platform-adapters/discovery.js.map +1 -0
- package/dist/src/platform-adapters/docs.d.ts +4 -0
- package/dist/src/platform-adapters/docs.d.ts.map +1 -0
- package/dist/src/platform-adapters/docs.js +34 -0
- package/dist/src/platform-adapters/docs.js.map +1 -0
- package/dist/src/platform-adapters/hook-bridge.d.ts +44 -0
- package/dist/src/platform-adapters/hook-bridge.d.ts.map +1 -0
- package/dist/src/platform-adapters/hook-bridge.js +133 -0
- package/dist/src/platform-adapters/hook-bridge.js.map +1 -0
- package/dist/src/platform-adapters/merge.d.ts +32 -0
- package/dist/src/platform-adapters/merge.d.ts.map +1 -0
- package/dist/src/platform-adapters/merge.js +209 -0
- package/dist/src/platform-adapters/merge.js.map +1 -0
- package/dist/src/platform-adapters/migration.d.ts +31 -0
- package/dist/src/platform-adapters/migration.d.ts.map +1 -0
- package/dist/src/platform-adapters/migration.js +402 -0
- package/dist/src/platform-adapters/migration.js.map +1 -0
- package/dist/src/platform-adapters/operations.d.ts +23 -0
- package/dist/src/platform-adapters/operations.d.ts.map +1 -0
- package/dist/src/platform-adapters/operations.js +405 -0
- package/dist/src/platform-adapters/operations.js.map +1 -0
- package/dist/src/platform-adapters/registry.d.ts +9 -0
- package/dist/src/platform-adapters/registry.d.ts.map +1 -0
- package/dist/src/platform-adapters/registry.js +614 -0
- package/dist/src/platform-adapters/registry.js.map +1 -0
- package/dist/src/platform-adapters/renderers/agents.d.ts +5 -0
- package/dist/src/platform-adapters/renderers/agents.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/agents.js +46 -0
- package/dist/src/platform-adapters/renderers/agents.js.map +1 -0
- package/dist/src/platform-adapters/renderers/aider.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/aider.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/aider.js +3 -0
- package/dist/src/platform-adapters/renderers/aider.js.map +1 -0
- package/dist/src/platform-adapters/renderers/antigravity.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/antigravity.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/antigravity.js +3 -0
- package/dist/src/platform-adapters/renderers/antigravity.js.map +1 -0
- package/dist/src/platform-adapters/renderers/claude.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/claude.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/claude.js +3 -0
- package/dist/src/platform-adapters/renderers/claude.js.map +1 -0
- package/dist/src/platform-adapters/renderers/codex.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/codex.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/codex.js +3 -0
- package/dist/src/platform-adapters/renderers/codex.js.map +1 -0
- package/dist/src/platform-adapters/renderers/commands.d.ts +13 -0
- package/dist/src/platform-adapters/renderers/commands.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/commands.js +78 -0
- package/dist/src/platform-adapters/renderers/commands.js.map +1 -0
- package/dist/src/platform-adapters/renderers/copilot.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/copilot.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/copilot.js +3 -0
- package/dist/src/platform-adapters/renderers/copilot.js.map +1 -0
- package/dist/src/platform-adapters/renderers/cursor.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/cursor.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/cursor.js +3 -0
- package/dist/src/platform-adapters/renderers/cursor.js.map +1 -0
- package/dist/src/platform-adapters/renderers/droid.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/droid.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/droid.js +3 -0
- package/dist/src/platform-adapters/renderers/droid.js.map +1 -0
- package/dist/src/platform-adapters/renderers/experimental.d.ts +6 -0
- package/dist/src/platform-adapters/renderers/experimental.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/experimental.js +9 -0
- package/dist/src/platform-adapters/renderers/experimental.js.map +1 -0
- package/dist/src/platform-adapters/renderers/factory.d.ts +14 -0
- package/dist/src/platform-adapters/renderers/factory.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/factory.js +53 -0
- package/dist/src/platform-adapters/renderers/factory.js.map +1 -0
- package/dist/src/platform-adapters/renderers/gemini.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/gemini.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/gemini.js +3 -0
- package/dist/src/platform-adapters/renderers/gemini.js.map +1 -0
- package/dist/src/platform-adapters/renderers/hooks.d.ts +37 -0
- package/dist/src/platform-adapters/renderers/hooks.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/hooks.js +166 -0
- package/dist/src/platform-adapters/renderers/hooks.js.map +1 -0
- package/dist/src/platform-adapters/renderers/index.d.ts +8 -0
- package/dist/src/platform-adapters/renderers/index.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/index.js +39 -0
- package/dist/src/platform-adapters/renderers/index.js.map +1 -0
- package/dist/src/platform-adapters/renderers/instructions.d.ts +6 -0
- package/dist/src/platform-adapters/renderers/instructions.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/instructions.js +31 -0
- package/dist/src/platform-adapters/renderers/instructions.js.map +1 -0
- package/dist/src/platform-adapters/renderers/kimi.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/kimi.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/kimi.js +3 -0
- package/dist/src/platform-adapters/renderers/kimi.js.map +1 -0
- package/dist/src/platform-adapters/renderers/kiro.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/kiro.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/kiro.js +3 -0
- package/dist/src/platform-adapters/renderers/kiro.js.map +1 -0
- package/dist/src/platform-adapters/renderers/mcp.d.ts +29 -0
- package/dist/src/platform-adapters/renderers/mcp.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/mcp.js +69 -0
- package/dist/src/platform-adapters/renderers/mcp.js.map +1 -0
- package/dist/src/platform-adapters/renderers/openclaw.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/openclaw.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/openclaw.js +3 -0
- package/dist/src/platform-adapters/renderers/openclaw.js.map +1 -0
- package/dist/src/platform-adapters/renderers/opencode.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/opencode.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/opencode.js +3 -0
- package/dist/src/platform-adapters/renderers/opencode.js.map +1 -0
- package/dist/src/platform-adapters/renderers/skills.d.ts +11 -0
- package/dist/src/platform-adapters/renderers/skills.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/skills.js +60 -0
- package/dist/src/platform-adapters/renderers/skills.js.map +1 -0
- package/dist/src/platform-adapters/renderers/status.d.ts +23 -0
- package/dist/src/platform-adapters/renderers/status.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/status.js +63 -0
- package/dist/src/platform-adapters/renderers/status.js.map +1 -0
- package/dist/src/platform-adapters/renderers/vscode.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/vscode.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/vscode.js +3 -0
- package/dist/src/platform-adapters/renderers/vscode.js.map +1 -0
- package/dist/src/platform-adapters/renderers/zed.d.ts +2 -0
- package/dist/src/platform-adapters/renderers/zed.d.ts.map +1 -0
- package/dist/src/platform-adapters/renderers/zed.js +3 -0
- package/dist/src/platform-adapters/renderers/zed.js.map +1 -0
- package/dist/src/platform-adapters/types.d.ts +105 -0
- package/dist/src/platform-adapters/types.d.ts.map +1 -0
- package/dist/src/platform-adapters/types.js +13 -0
- package/dist/src/platform-adapters/types.js.map +1 -0
- package/dist/src/platform-adapters/verification-ledger.d.ts +8 -0
- package/dist/src/platform-adapters/verification-ledger.d.ts.map +1 -0
- package/dist/src/platform-adapters/verification-ledger.js +24 -0
- package/dist/src/platform-adapters/verification-ledger.js.map +1 -0
- package/dist/src/protocol-capabilities.d.ts +29 -0
- package/dist/src/protocol-capabilities.d.ts.map +1 -0
- package/dist/src/protocol-capabilities.js +31 -0
- package/dist/src/protocol-capabilities.js.map +1 -0
- package/dist/src/ui/markdown.js +10 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/src/ui/data/mastermind-sessions.json +0 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Exec engine — one-shot exposure of the AgentRunner surface over the
|
|
3
|
+
* public subprocess protocol in doc/agent-exec-protocol.md (§3).
|
|
4
|
+
*
|
|
5
|
+
* Process model: the CALLER (e.g. monoagentcli) spawns `monomind agent exec`;
|
|
6
|
+
* monomind resolves the requested runtime's AgentRunner and drives ONE agent
|
|
7
|
+
* turn, adapting the `--prompt` string into the single-message async stream
|
|
8
|
+
* the runner interface expects (`AgentRunArgs.prompt`). With
|
|
9
|
+
* `--tools stdio` (+ `--tools-file` / `--tool-names`), tool handler
|
|
10
|
+
* invocations are bridged to the caller as `tool_call` frames on stdout and
|
|
11
|
+
* satisfied by `tool_result` frames on stdin — identically for native
|
|
12
|
+
* runners (ClaudeAgentRunner registers them as real SDK tools) and fence
|
|
13
|
+
* runners (subprocess CLIs render + parse the fence protocol in-process).
|
|
14
|
+
*
|
|
15
|
+
* stdout purity (§3): the ONLY thing this engine writes to stdout is NDJSON
|
|
16
|
+
* events via the injected `emit` sink. Everything else goes to stderr.
|
|
17
|
+
*
|
|
18
|
+
* Cancellation semantics: `--timeout`, budget breach, and caller `cancel`
|
|
19
|
+
* frames all funnel through `terminate()` — a fire-and-forget
|
|
20
|
+
* `stream.return()` (the runner's finally-blocks SIGTERM/SIGKILL its child)
|
|
21
|
+
* raced against a grace window, after which the engine resolves regardless.
|
|
22
|
+
* A runner wedged mid-await cannot have its return() propagate until it
|
|
23
|
+
* reaches a yield; the grace bound keeps the exec from hanging forever, and
|
|
24
|
+
* the runner's own 2h/45s ladders remain the backstop for orphaned children.
|
|
25
|
+
*/
|
|
26
|
+
import type { Readable } from 'node:stream';
|
|
27
|
+
import type { AgentRunner } from './agent-runner.js';
|
|
28
|
+
import { z } from 'zod';
|
|
29
|
+
export type ExecErrorCode = 'auth' | 'quota' | 'missing-binary' | 'no-runner' | 'budget' | 'runner-error' | 'timeout' | 'cancelled' | 'bad-frame';
|
|
30
|
+
/** Tool definition from `--tools-file` (JSON Schema) or `--tool-names`. */
|
|
31
|
+
export interface ToolSpec {
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
/** JSON Schema `{type:'object', properties, required}` (optional for --tool-names). */
|
|
35
|
+
schema?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface AgentExecOptions {
|
|
38
|
+
runtime: string;
|
|
39
|
+
prompt: string;
|
|
40
|
+
systemPrompt?: string;
|
|
41
|
+
model?: string;
|
|
42
|
+
cwd?: string;
|
|
43
|
+
resume?: string;
|
|
44
|
+
maxTurns: number;
|
|
45
|
+
/** Overall wall-clock cap (ms); undefined = none. */
|
|
46
|
+
timeoutMs?: number;
|
|
47
|
+
/** Max wait per caller tool_result frame (ms). */
|
|
48
|
+
toolTimeoutMs: number;
|
|
49
|
+
/** Optional spend cap (USD) checked at result granularity (see §3.1 note). */
|
|
50
|
+
budgetUsd?: number;
|
|
51
|
+
env?: Record<string, string>;
|
|
52
|
+
/** null/[] = no caller-side tools. Non-empty enables the stdio bridge. */
|
|
53
|
+
toolSpecs?: ToolSpec[] | null;
|
|
54
|
+
/** Injectable runner for tests; production resolves via resolveExecRunner. */
|
|
55
|
+
runnerOverride?: AgentRunner;
|
|
56
|
+
/** Event sink — the command layer writes each object as one NDJSON line. */
|
|
57
|
+
emit: (ev: Record<string, unknown>) => void;
|
|
58
|
+
/** Frame source for the tool bridge (default: process.stdin at command layer). */
|
|
59
|
+
stdin?: Readable;
|
|
60
|
+
/** Grace window for stream.return() propagation before resolving (ms). */
|
|
61
|
+
returnGraceMs?: number;
|
|
62
|
+
}
|
|
63
|
+
/** Convert `{type:'object', properties, required}` JSON Schema to a zod shape. */
|
|
64
|
+
export declare function jsonSchemaToZodShape(schema?: Record<string, unknown>): Record<string, z.ZodType<any>>;
|
|
65
|
+
/**
|
|
66
|
+
* Run one agent exec turn. Emits protocol events via opts.emit and returns
|
|
67
|
+
* the process exit code (§3.2): 0 success · 1 error · 124 timeout ·
|
|
68
|
+
* 130 cancelled. `done` is emitted exactly once before returning.
|
|
69
|
+
*/
|
|
70
|
+
export declare function runAgentExec(opts: AgentExecOptions): Promise<number>;
|
|
71
|
+
//# sourceMappingURL=agent-exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-exec.d.ts","sourceRoot":"","sources":["../../../src/orgrt/agent-exec.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAgB,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,WAAW,GACX,QAAQ,GACR,cAAc,GACd,SAAS,GACT,WAAW,GACX,WAAW,CAAC;AAMhB,2EAA2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5C,kFAAkF;IAClF,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAqCD,kFAAkF;AAClF,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAUhC;AAsJD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwQ1E"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/agent-exec.ts
|
|
2
|
+
/**
|
|
3
|
+
* Agent Exec engine — one-shot exposure of the AgentRunner surface over the
|
|
4
|
+
* public subprocess protocol in doc/agent-exec-protocol.md (§3).
|
|
5
|
+
*
|
|
6
|
+
* Process model: the CALLER (e.g. monoagentcli) spawns `monomind agent exec`;
|
|
7
|
+
* monomind resolves the requested runtime's AgentRunner and drives ONE agent
|
|
8
|
+
* turn, adapting the `--prompt` string into the single-message async stream
|
|
9
|
+
* the runner interface expects (`AgentRunArgs.prompt`). With
|
|
10
|
+
* `--tools stdio` (+ `--tools-file` / `--tool-names`), tool handler
|
|
11
|
+
* invocations are bridged to the caller as `tool_call` frames on stdout and
|
|
12
|
+
* satisfied by `tool_result` frames on stdin — identically for native
|
|
13
|
+
* runners (ClaudeAgentRunner registers them as real SDK tools) and fence
|
|
14
|
+
* runners (subprocess CLIs render + parse the fence protocol in-process).
|
|
15
|
+
*
|
|
16
|
+
* stdout purity (§3): the ONLY thing this engine writes to stdout is NDJSON
|
|
17
|
+
* events via the injected `emit` sink. Everything else goes to stderr.
|
|
18
|
+
*
|
|
19
|
+
* Cancellation semantics: `--timeout`, budget breach, and caller `cancel`
|
|
20
|
+
* frames all funnel through `terminate()` — a fire-and-forget
|
|
21
|
+
* `stream.return()` (the runner's finally-blocks SIGTERM/SIGKILL its child)
|
|
22
|
+
* raced against a grace window, after which the engine resolves regardless.
|
|
23
|
+
* A runner wedged mid-await cannot have its return() propagate until it
|
|
24
|
+
* reaches a yield; the grace bound keeps the exec from hanging forever, and
|
|
25
|
+
* the runner's own 2h/45s ladders remain the backstop for orphaned children.
|
|
26
|
+
*/
|
|
27
|
+
import { classifyStderr } from './kimicode-runner.js';
|
|
28
|
+
import { resolveExecRunner, runnerSpec } from './runner-registry.js';
|
|
29
|
+
import { z } from 'zod';
|
|
30
|
+
const FATAL_CODES = new Set(['auth', 'quota', 'missing-binary', 'no-runner', 'budget']);
|
|
31
|
+
// ─── JSON Schema → zod shape (for OrgToolDef.schema) ────────────────────────
|
|
32
|
+
function jsonPropToZod(prop, required) {
|
|
33
|
+
let base = z.any();
|
|
34
|
+
if (prop && typeof prop === 'object') {
|
|
35
|
+
const p = prop;
|
|
36
|
+
if (Array.isArray(p.enum))
|
|
37
|
+
base = z.enum(p.enum);
|
|
38
|
+
else
|
|
39
|
+
switch (p.type) {
|
|
40
|
+
case 'string':
|
|
41
|
+
base = z.string();
|
|
42
|
+
break;
|
|
43
|
+
case 'number':
|
|
44
|
+
case 'integer':
|
|
45
|
+
base = z.number();
|
|
46
|
+
break;
|
|
47
|
+
case 'boolean':
|
|
48
|
+
base = z.boolean();
|
|
49
|
+
break;
|
|
50
|
+
case 'array':
|
|
51
|
+
base = z.array(z.any());
|
|
52
|
+
break;
|
|
53
|
+
case 'object':
|
|
54
|
+
base = z.record(z.string(), z.any());
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return required ? base : base.optional();
|
|
59
|
+
}
|
|
60
|
+
/** Convert `{type:'object', properties, required}` JSON Schema to a zod shape. */
|
|
61
|
+
export function jsonSchemaToZodShape(schema) {
|
|
62
|
+
const shape = {};
|
|
63
|
+
const props = (schema?.properties ?? {});
|
|
64
|
+
const required = new Set(Array.isArray(schema?.required) ? schema.required : []);
|
|
65
|
+
for (const [key, prop] of Object.entries(props)) {
|
|
66
|
+
shape[key] = jsonPropToZod(prop, required.has(key));
|
|
67
|
+
}
|
|
68
|
+
return shape;
|
|
69
|
+
}
|
|
70
|
+
class StdioToolBridge {
|
|
71
|
+
stdin;
|
|
72
|
+
toolTimeoutMs;
|
|
73
|
+
emit;
|
|
74
|
+
onCancel;
|
|
75
|
+
pending = new Map();
|
|
76
|
+
counter = 0;
|
|
77
|
+
closed = false;
|
|
78
|
+
buffer = '';
|
|
79
|
+
stopped = false;
|
|
80
|
+
constructor(stdin, toolTimeoutMs, emit,
|
|
81
|
+
/** Invoked synchronously on a cancel frame — wired to terminate(). */
|
|
82
|
+
onCancel) {
|
|
83
|
+
this.stdin = stdin;
|
|
84
|
+
this.toolTimeoutMs = toolTimeoutMs;
|
|
85
|
+
this.emit = emit;
|
|
86
|
+
this.onCancel = onCancel;
|
|
87
|
+
}
|
|
88
|
+
start() {
|
|
89
|
+
this.stdin.setEncoding('utf8');
|
|
90
|
+
this.stdin.on('data', (chunk) => {
|
|
91
|
+
if (this.stopped)
|
|
92
|
+
return;
|
|
93
|
+
this.buffer += chunk;
|
|
94
|
+
let nl;
|
|
95
|
+
while ((nl = this.buffer.indexOf('\n')) !== -1) {
|
|
96
|
+
const line = this.buffer.slice(0, nl).trim();
|
|
97
|
+
this.buffer = this.buffer.slice(nl + 1);
|
|
98
|
+
if (line)
|
|
99
|
+
this.handleLine(line);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
this.stdin.on('end', () => {
|
|
103
|
+
// §4.3: EOF fails every pending call and disables further bridging.
|
|
104
|
+
this.closed = true;
|
|
105
|
+
for (const [id, p] of this.pending) {
|
|
106
|
+
clearTimeout(p.timer);
|
|
107
|
+
p.settle('ERROR: caller closed stdin');
|
|
108
|
+
this.pending.delete(id);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
this.stdin.on('error', () => {
|
|
112
|
+
this.closed = true;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
handleLine(line) {
|
|
116
|
+
let frame;
|
|
117
|
+
try {
|
|
118
|
+
frame = JSON.parse(line);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
this.emit({ v: 1, type: 'error', code: 'bad-frame', fatal: false, message: `unparseable stdin frame: ${line.slice(0, 120)}` });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (frame?.type === 'cancel') {
|
|
125
|
+
this.cancelRequested = true;
|
|
126
|
+
this.onCancel?.();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (frame?.type === 'tool_result' && typeof frame.id === 'string') {
|
|
130
|
+
const p = this.pending.get(frame.id);
|
|
131
|
+
if (!p) {
|
|
132
|
+
this.emit({ v: 1, type: 'error', code: 'bad-frame', fatal: false, message: `tool_result for unknown or expired id "${frame.id}"` });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
clearTimeout(p.timer);
|
|
136
|
+
this.pending.delete(frame.id);
|
|
137
|
+
const text = frame.result && typeof frame.result === 'object' && typeof frame.result.text === 'string'
|
|
138
|
+
? frame.result.text
|
|
139
|
+
: typeof frame.result === 'string'
|
|
140
|
+
? frame.result
|
|
141
|
+
: JSON.stringify(frame.result ?? '');
|
|
142
|
+
p.settle(frame.ok === false ? `ERROR: ${text}` : text);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.emit({ v: 1, type: 'error', code: 'bad-frame', fatal: false, message: `unrecognized stdin frame type: ${String(frame?.type ?? '(none)')}` });
|
|
146
|
+
}
|
|
147
|
+
/** Set when the caller sends a cancel frame; polled by the engine loop. */
|
|
148
|
+
cancelRequested = false;
|
|
149
|
+
/** Invoke a tool on the caller: emit tool_call, await tool_result, echo it. */
|
|
150
|
+
call(name, args) {
|
|
151
|
+
if (this.closed)
|
|
152
|
+
return Promise.resolve({ text: 'ERROR: caller closed stdin' });
|
|
153
|
+
const id = `tc_${++this.counter}`;
|
|
154
|
+
return new Promise((resolve) => {
|
|
155
|
+
const settle = (text) => {
|
|
156
|
+
this.pending.delete(id);
|
|
157
|
+
this.emit({
|
|
158
|
+
v: 1,
|
|
159
|
+
type: 'tool_result',
|
|
160
|
+
id,
|
|
161
|
+
ok: !text.startsWith('ERROR:'),
|
|
162
|
+
result: { text },
|
|
163
|
+
});
|
|
164
|
+
resolve({ text });
|
|
165
|
+
};
|
|
166
|
+
const timer = setTimeout(() => settle('ERROR: tool timeout'), this.toolTimeoutMs);
|
|
167
|
+
this.pending.set(id, { timer, settle });
|
|
168
|
+
this.emit({ v: 1, type: 'tool_call', id, name, args });
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** Stop reading; fail anything still pending. */
|
|
172
|
+
stop() {
|
|
173
|
+
this.stopped = true;
|
|
174
|
+
this.closed = true;
|
|
175
|
+
for (const [, p] of this.pending) {
|
|
176
|
+
clearTimeout(p.timer);
|
|
177
|
+
p.settle('ERROR: exec terminated');
|
|
178
|
+
}
|
|
179
|
+
this.pending.clear();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// ─── usage accounting (cumulative→delta, session.ts parity) ────────────────
|
|
183
|
+
class UsageTracker {
|
|
184
|
+
cumulative = new Map();
|
|
185
|
+
delta(m) {
|
|
186
|
+
const key = m.session_id ?? '';
|
|
187
|
+
const prev = this.cumulative.get(key) ?? { in: 0, out: 0, usd: 0 };
|
|
188
|
+
const cur = { in: m.input_tokens ?? 0, out: m.output_tokens ?? 0, usd: m.cost_usd ?? 0 };
|
|
189
|
+
// Runners that report per-turn (not cumulative) usage would produce
|
|
190
|
+
// negatives under naive differencing; treat decreasing totals as fresh.
|
|
191
|
+
const d = {
|
|
192
|
+
in: Math.max(0, cur.in - prev.in),
|
|
193
|
+
out: Math.max(0, cur.out - prev.out),
|
|
194
|
+
usd: Math.max(0, cur.usd - prev.usd),
|
|
195
|
+
};
|
|
196
|
+
this.cumulative.set(key, cur);
|
|
197
|
+
return d;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ─── engine ─────────────────────────────────────────────────────────────────
|
|
201
|
+
function mapStopReason(subtype, rawTexts, terminal) {
|
|
202
|
+
if (terminal?.code === 'timeout')
|
|
203
|
+
return 'timeout';
|
|
204
|
+
if (terminal?.code === 'cancelled')
|
|
205
|
+
return 'cancelled';
|
|
206
|
+
if ((subtype ?? '').includes('max_turns'))
|
|
207
|
+
return 'max_turns';
|
|
208
|
+
if (rawTexts.some((t) => t.includes('tool-call round cap')))
|
|
209
|
+
return 'tool_round_cap';
|
|
210
|
+
return 'end_turn';
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Run one agent exec turn. Emits protocol events via opts.emit and returns
|
|
214
|
+
* the process exit code (§3.2): 0 success · 1 error · 124 timeout ·
|
|
215
|
+
* 130 cancelled. `done` is emitted exactly once before returning.
|
|
216
|
+
*/
|
|
217
|
+
export async function runAgentExec(opts) {
|
|
218
|
+
const emit = opts.emit;
|
|
219
|
+
const grace = opts.returnGraceMs ?? 5000;
|
|
220
|
+
// Resolve runner (no-runner vs missing-binary is classified here).
|
|
221
|
+
const runner = opts.runnerOverride ?? (await resolveExecRunner(opts.runtime));
|
|
222
|
+
if (!runner) {
|
|
223
|
+
const known = runnerSpec(opts.runtime);
|
|
224
|
+
const message = known
|
|
225
|
+
? `runtime "${opts.runtime}" could not be constructed`
|
|
226
|
+
: `unknown runtime "${opts.runtime}" — no AgentRunner implementation exists for it`;
|
|
227
|
+
emit({ v: 1, type: 'error', code: 'no-runner', fatal: true, message });
|
|
228
|
+
emit({ v: 1, type: 'done', exit_code: 2 });
|
|
229
|
+
return 2;
|
|
230
|
+
}
|
|
231
|
+
// Tool specs (§4). The bridge itself is constructed below, after
|
|
232
|
+
// terminate() exists (its cancel callback wires into termination).
|
|
233
|
+
const toolSpecs = opts.toolSpecs ?? null;
|
|
234
|
+
let bridge = null;
|
|
235
|
+
const tools = (toolSpecs ?? []).map((t) => ({
|
|
236
|
+
name: t.name,
|
|
237
|
+
description: t.description,
|
|
238
|
+
schema: t.schema ? jsonSchemaToZodShape(t.schema) : {},
|
|
239
|
+
handler: (args) => bridge ? bridge.call(t.name, args) : Promise.resolve({ text: 'ERROR: tools not bridged' }),
|
|
240
|
+
}));
|
|
241
|
+
// Single-message prompt stream — the AgentRunArgs.prompt contract.
|
|
242
|
+
const promptStream = (async function* () {
|
|
243
|
+
yield {
|
|
244
|
+
type: 'user',
|
|
245
|
+
message: { role: 'user', content: opts.prompt },
|
|
246
|
+
parent_tool_use_id: null,
|
|
247
|
+
session_id: undefined,
|
|
248
|
+
};
|
|
249
|
+
})();
|
|
250
|
+
const usage = new UsageTracker();
|
|
251
|
+
const rawTexts = [];
|
|
252
|
+
let lastSession;
|
|
253
|
+
let totals = { in: 0, out: 0, usd: 0 };
|
|
254
|
+
let lastResult;
|
|
255
|
+
// Holder object: `terminal` is assigned inside the terminate() closure and
|
|
256
|
+
// read after the loop — TS flow analysis would otherwise keep the `null`
|
|
257
|
+
// narrowing across closure calls and type the post-loop reads as `never`.
|
|
258
|
+
const state = { terminal: null };
|
|
259
|
+
let stream = null;
|
|
260
|
+
// Post-done suppression: once `done` is emitted, nothing else goes out.
|
|
261
|
+
let finished = false;
|
|
262
|
+
const safeEmit = (ev) => {
|
|
263
|
+
if (finished)
|
|
264
|
+
return;
|
|
265
|
+
emit(ev);
|
|
266
|
+
};
|
|
267
|
+
// Termination races the consumer loop: a runner that goes quiet (wedged
|
|
268
|
+
// child, hung SDK) must not pin the exec open — terminate() resolves the
|
|
269
|
+
// race directly while the abandoned consumer finishes in the background.
|
|
270
|
+
let settleTerminal = () => { };
|
|
271
|
+
const terminalPromise = new Promise((r) => {
|
|
272
|
+
settleTerminal = r;
|
|
273
|
+
});
|
|
274
|
+
safeEmit({
|
|
275
|
+
v: 1,
|
|
276
|
+
type: 'start',
|
|
277
|
+
runtime: opts.runtime,
|
|
278
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
279
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
280
|
+
...(opts.resume ? { resume: opts.resume } : {}),
|
|
281
|
+
pid: process.pid,
|
|
282
|
+
});
|
|
283
|
+
const terminate = (code, exitCode) => {
|
|
284
|
+
if (state.terminal)
|
|
285
|
+
return;
|
|
286
|
+
state.terminal = { code, exitCode };
|
|
287
|
+
// Ladder the runner's return() (its finally-blocks kill the child) with
|
|
288
|
+
// a grace bound — a wedged runner may not propagate until its own
|
|
289
|
+
// 2h/45s ladders fire, and the exec must not wait for that.
|
|
290
|
+
if (stream && typeof stream.return === 'function') {
|
|
291
|
+
void Promise.race([
|
|
292
|
+
stream.return(undefined).catch(() => { }),
|
|
293
|
+
new Promise((r) => setTimeout(r, grace)),
|
|
294
|
+
]);
|
|
295
|
+
}
|
|
296
|
+
settleTerminal(state.terminal);
|
|
297
|
+
};
|
|
298
|
+
bridge =
|
|
299
|
+
toolSpecs && toolSpecs.length > 0
|
|
300
|
+
? new StdioToolBridge(opts.stdin ?? process.stdin, opts.toolTimeoutMs, safeEmit, () => terminate('cancelled', 130))
|
|
301
|
+
: null;
|
|
302
|
+
bridge?.start();
|
|
303
|
+
const timeoutTimer = opts.timeoutMs
|
|
304
|
+
? setTimeout(() => terminate('timeout', 124), opts.timeoutMs)
|
|
305
|
+
: null;
|
|
306
|
+
const onSignal = () => terminate('cancelled', 130);
|
|
307
|
+
process.once('SIGINT', onSignal);
|
|
308
|
+
process.once('SIGTERM', onSignal);
|
|
309
|
+
const consumer = (async () => {
|
|
310
|
+
try {
|
|
311
|
+
stream = runner.run({
|
|
312
|
+
tools,
|
|
313
|
+
prompt: promptStream,
|
|
314
|
+
systemPrompt: opts.systemPrompt ?? '',
|
|
315
|
+
model: opts.model,
|
|
316
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
317
|
+
env: opts.env ?? {},
|
|
318
|
+
maxTurns: opts.maxTurns,
|
|
319
|
+
resume: opts.resume,
|
|
320
|
+
});
|
|
321
|
+
for await (const m of stream) {
|
|
322
|
+
if (state.terminal)
|
|
323
|
+
break;
|
|
324
|
+
if (m.session_id && m.session_id !== lastSession) {
|
|
325
|
+
lastSession = m.session_id;
|
|
326
|
+
safeEmit({ v: 1, type: 'session', session_id: m.session_id });
|
|
327
|
+
}
|
|
328
|
+
if (m.type === 'assistant' && m.text) {
|
|
329
|
+
rawTexts.push(m.text);
|
|
330
|
+
safeEmit({ v: 1, type: 'assistant', text: m.text });
|
|
331
|
+
}
|
|
332
|
+
else if (m.type === 'result') {
|
|
333
|
+
const d = usage.delta(m);
|
|
334
|
+
totals = { in: totals.in + d.in, out: totals.out + d.out, usd: totals.usd + d.usd };
|
|
335
|
+
safeEmit({
|
|
336
|
+
v: 1,
|
|
337
|
+
type: 'usage',
|
|
338
|
+
input_tokens: d.in,
|
|
339
|
+
output_tokens: d.out,
|
|
340
|
+
cost_usd: d.usd,
|
|
341
|
+
});
|
|
342
|
+
lastResult = m;
|
|
343
|
+
// Budget is enforced at result granularity on a single-shot exec:
|
|
344
|
+
// the turn has completed, but the overspend is surfaced as the
|
|
345
|
+
// terminal outcome (no success result event) so callers stop.
|
|
346
|
+
if (opts.budgetUsd !== undefined && totals.usd > opts.budgetUsd) {
|
|
347
|
+
terminate('budget', 1);
|
|
348
|
+
safeEmit({
|
|
349
|
+
v: 1,
|
|
350
|
+
type: 'error',
|
|
351
|
+
code: 'budget',
|
|
352
|
+
fatal: true,
|
|
353
|
+
message: `spend cap exceeded: $${totals.usd.toFixed(4)} > --budget-usd ${opts.budgetUsd}`,
|
|
354
|
+
});
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// m.type === 'tool_use': native-tool liveness only — no protocol event.
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (err) {
|
|
362
|
+
const e = err;
|
|
363
|
+
if (e.code === 'ENOENT') {
|
|
364
|
+
const spec = runnerSpec(opts.runtime);
|
|
365
|
+
terminate('missing-binary', 1);
|
|
366
|
+
safeEmit({
|
|
367
|
+
v: 1,
|
|
368
|
+
type: 'error',
|
|
369
|
+
code: 'missing-binary',
|
|
370
|
+
fatal: true,
|
|
371
|
+
message: `${opts.runtime} CLI not found${spec ? ` — ${spec.installHint}` : ''}`,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
const cls = classifyStderr(e.message ?? String(err));
|
|
376
|
+
const code = cls.fatal
|
|
377
|
+
? /auth/i.test(cls.label ?? '')
|
|
378
|
+
? 'auth'
|
|
379
|
+
: 'quota'
|
|
380
|
+
: 'runner-error';
|
|
381
|
+
const spec = runnerSpec(opts.runtime);
|
|
382
|
+
const msg = e.message ?? String(err);
|
|
383
|
+
const login = code === 'auth' && spec?.loginHint && !/login|log in/i.test(msg)
|
|
384
|
+
? ` Run: ${spec.loginHint}`
|
|
385
|
+
: '';
|
|
386
|
+
terminate(code, 1);
|
|
387
|
+
safeEmit({
|
|
388
|
+
v: 1,
|
|
389
|
+
type: 'error',
|
|
390
|
+
code,
|
|
391
|
+
fatal: FATAL_CODES.has(code),
|
|
392
|
+
message: `${msg}${login}`,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
})();
|
|
397
|
+
try {
|
|
398
|
+
await Promise.race([consumer, terminalPromise]);
|
|
399
|
+
}
|
|
400
|
+
finally {
|
|
401
|
+
if (timeoutTimer)
|
|
402
|
+
clearTimeout(timeoutTimer);
|
|
403
|
+
bridge?.stop();
|
|
404
|
+
process.removeListener('SIGINT', onSignal);
|
|
405
|
+
process.removeListener('SIGTERM', onSignal);
|
|
406
|
+
}
|
|
407
|
+
const finish = (exitCode) => {
|
|
408
|
+
safeEmit({ v: 1, type: 'done', exit_code: exitCode });
|
|
409
|
+
finished = true;
|
|
410
|
+
return exitCode;
|
|
411
|
+
};
|
|
412
|
+
if (state.terminal) {
|
|
413
|
+
// timeout/cancelled errors are emitted here (terminate() only ladders);
|
|
414
|
+
// missing-binary/budget/auth/quota/runner-error already emitted inline.
|
|
415
|
+
if (state.terminal.code === 'timeout' || state.terminal.code === 'cancelled') {
|
|
416
|
+
safeEmit({
|
|
417
|
+
v: 1,
|
|
418
|
+
type: 'error',
|
|
419
|
+
code: state.terminal.code,
|
|
420
|
+
fatal: false,
|
|
421
|
+
message: state.terminal.code === 'timeout'
|
|
422
|
+
? `exec exceeded overall timeout (${opts.timeoutMs}ms)`
|
|
423
|
+
: 'cancelled by caller',
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return finish(state.terminal.exitCode);
|
|
427
|
+
}
|
|
428
|
+
if (!lastResult) {
|
|
429
|
+
safeEmit({
|
|
430
|
+
v: 1,
|
|
431
|
+
type: 'error',
|
|
432
|
+
code: 'runner-error',
|
|
433
|
+
fatal: false,
|
|
434
|
+
message: 'runner stream ended without a result message',
|
|
435
|
+
});
|
|
436
|
+
return finish(1);
|
|
437
|
+
}
|
|
438
|
+
const isError = lastResult.is_error === true || (lastResult.subtype ?? 'success') !== 'success';
|
|
439
|
+
if (isError) {
|
|
440
|
+
safeEmit({
|
|
441
|
+
v: 1,
|
|
442
|
+
type: 'error',
|
|
443
|
+
code: 'runner-error',
|
|
444
|
+
fatal: false,
|
|
445
|
+
message: lastResult.text ?? `turn failed (${lastResult.subtype ?? 'error'})`,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
safeEmit({
|
|
449
|
+
v: 1,
|
|
450
|
+
type: 'result',
|
|
451
|
+
subtype: isError ? 'error' : 'success',
|
|
452
|
+
is_error: isError,
|
|
453
|
+
stop_reason: mapStopReason(lastResult.subtype, rawTexts, state.terminal),
|
|
454
|
+
...(lastResult.text
|
|
455
|
+
? { text: lastResult.text }
|
|
456
|
+
: {}),
|
|
457
|
+
input_tokens: totals.in,
|
|
458
|
+
output_tokens: totals.out,
|
|
459
|
+
cost_usd: totals.usd,
|
|
460
|
+
});
|
|
461
|
+
return finish(isError ? 1 : 0);
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=agent-exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-exec.js","sourceRoot":"","sources":["../../../src/orgrt/agent-exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runner registry — static metadata for every AgentRunner runtime id:
|
|
3
|
+
* binary name, env-var override, install hint. Shared by `agent exec`
|
|
4
|
+
* (error taxonomy: no-runner vs missing-binary, §3.4) and `agent scan`
|
|
5
|
+
* (installed detection + version probe, §6) of doc/agent-exec-protocol.md.
|
|
6
|
+
*
|
|
7
|
+
* Binary names and env overrides MUST mirror the `<X>_CLI_BIN` lookups in
|
|
8
|
+
* each orgrt/*-runner.ts — a mismatch here means scan reports a runner as
|
|
9
|
+
* installed when its runner would spawn a different binary (or vice versa).
|
|
10
|
+
*/
|
|
11
|
+
import type { AgentRunner } from './agent-runner.js';
|
|
12
|
+
import { type RuntimeKind } from './daemon.js';
|
|
13
|
+
export interface RunnerSpec {
|
|
14
|
+
/** Runtime id accepted by `agent exec --runtime` and org role `runtime`. */
|
|
15
|
+
id: RuntimeKind;
|
|
16
|
+
/** Binary probed on PATH (null for in-process runtimes like vercel). */
|
|
17
|
+
binary: string | null;
|
|
18
|
+
/** Env var that overrides the binary path (mirrors each runner's lookup). */
|
|
19
|
+
binEnv?: string;
|
|
20
|
+
/** One-line install hint, shown by scan and the missing-binary error. */
|
|
21
|
+
installHint: string;
|
|
22
|
+
/** Login/auth command appended to auth-class errors (§3.4 auth code). */
|
|
23
|
+
loginHint?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const RUNNER_SPECS: RunnerSpec[];
|
|
26
|
+
export declare function runnerSpec(id: string): RunnerSpec | undefined;
|
|
27
|
+
export declare function isKnownRuntime(id: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a runner for `agent exec --runtime <id>`.
|
|
30
|
+
*
|
|
31
|
+
* Distinct from daemon.ts's resolveRunner: unknown ids are a protocol
|
|
32
|
+
* `no-runner` error (the id has no implementation), while 'claude' — for
|
|
33
|
+
* which resolveRunner returns undefined as the implicit default path —
|
|
34
|
+
* resolves to the shared defaultClaudeRunner. Dynamic import keeps the
|
|
35
|
+
* Claude Agent SDK out of this module's static graph (scan must stay light).
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveExecRunner(id: string): Promise<AgentRunner | null>;
|
|
38
|
+
export interface ScanEntry {
|
|
39
|
+
id: string;
|
|
40
|
+
installed: boolean;
|
|
41
|
+
binary: string | null;
|
|
42
|
+
version: string | null;
|
|
43
|
+
install_hint: string;
|
|
44
|
+
}
|
|
45
|
+
export interface ScanOptions {
|
|
46
|
+
/** Env used for PATH + `<X>_CLI_BIN` overrides (default process.env). */
|
|
47
|
+
env?: NodeJS.ProcessEnv;
|
|
48
|
+
/** Per-binary `--version` probe timeout (default 5s). */
|
|
49
|
+
versionTimeoutMs?: number;
|
|
50
|
+
/** Skip version probes (binary-presence scan only). */
|
|
51
|
+
skipVersionProbe?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Detect every known runtime, in parallel. Exit-0-always by contract —
|
|
55
|
+
* detection, not a test. Auth is deliberately NOT probed (§6): logins are
|
|
56
|
+
* too heterogeneous; auth failures surface at exec time.
|
|
57
|
+
*/
|
|
58
|
+
export declare function scanInstalled(opts?: ScanOptions): Promise<{
|
|
59
|
+
v: number;
|
|
60
|
+
agents: ScanEntry[];
|
|
61
|
+
}>;
|
|
62
|
+
//# sourceMappingURL=runner-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-registry.d.ts","sourceRoot":"","sources":["../../../src/orgrt/runner-registry.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,EAAE,EAAE,WAAW,CAAC;IAChB,wEAAwE;IACxE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,UAAU,EAqFpC,CAAC;AAIF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE7D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAO/E;AAID,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AA4DD,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC;IACnE,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC,CAoBD"}
|