@agentex/agent 0.0.17 → 0.0.20
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/README.md +140 -22
- package/dist/derived.d.ts +69 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +218 -0
- package/dist/derived.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/_shared/http-agent.d.ts +39 -0
- package/dist/providers/_shared/http-agent.d.ts.map +1 -0
- package/dist/providers/_shared/http-agent.js +265 -0
- package/dist/providers/_shared/http-agent.js.map +1 -0
- package/dist/providers/acp/index.d.ts +29 -0
- package/dist/providers/acp/index.d.ts.map +1 -0
- package/dist/providers/acp/index.js +153 -0
- package/dist/providers/acp/index.js.map +1 -0
- package/dist/providers/acp/parse.d.ts +22 -0
- package/dist/providers/acp/parse.d.ts.map +1 -0
- package/dist/providers/acp/parse.js +122 -0
- package/dist/providers/acp/parse.js.map +1 -0
- package/dist/providers/acp/session.d.ts +36 -0
- package/dist/providers/acp/session.d.ts.map +1 -0
- package/dist/providers/acp/session.js +487 -0
- package/dist/providers/acp/session.js.map +1 -0
- package/dist/providers/claude/execute.d.ts.map +1 -1
- package/dist/providers/claude/execute.js +22 -9
- package/dist/providers/claude/execute.js.map +1 -1
- package/dist/providers/claude/index.d.ts.map +1 -1
- package/dist/providers/claude/index.js +1 -0
- package/dist/providers/claude/index.js.map +1 -1
- package/dist/providers/claude/mcp.d.ts +28 -0
- package/dist/providers/claude/mcp.d.ts.map +1 -0
- package/dist/providers/claude/mcp.js +82 -0
- package/dist/providers/claude/mcp.js.map +1 -0
- package/dist/providers/claude/parse.d.ts +12 -1
- package/dist/providers/claude/parse.d.ts.map +1 -1
- package/dist/providers/claude/parse.js +84 -2
- package/dist/providers/claude/parse.js.map +1 -1
- package/dist/providers/claude/session.d.ts +29 -3
- package/dist/providers/claude/session.d.ts.map +1 -1
- package/dist/providers/claude/session.js +144 -16
- package/dist/providers/claude/session.js.map +1 -1
- package/dist/providers/codex/execute.d.ts.map +1 -1
- package/dist/providers/codex/execute.js +5 -1
- package/dist/providers/codex/execute.js.map +1 -1
- package/dist/providers/codex/index.d.ts.map +1 -1
- package/dist/providers/codex/index.js +3 -0
- package/dist/providers/codex/index.js.map +1 -1
- package/dist/providers/codex/modes.d.ts +35 -0
- package/dist/providers/codex/modes.d.ts.map +1 -0
- package/dist/providers/codex/modes.js +148 -0
- package/dist/providers/codex/modes.js.map +1 -0
- package/dist/providers/codex/parse.d.ts.map +1 -1
- package/dist/providers/codex/parse.js +4 -0
- package/dist/providers/codex/parse.js.map +1 -1
- package/dist/providers/codex/session.d.ts +41 -2
- package/dist/providers/codex/session.d.ts.map +1 -1
- package/dist/providers/codex/session.js +331 -16
- package/dist/providers/codex/session.js.map +1 -1
- package/dist/providers/codex/transcript.d.ts +14 -0
- package/dist/providers/codex/transcript.d.ts.map +1 -1
- package/dist/providers/codex/transcript.js +15 -1
- package/dist/providers/codex/transcript.js.map +1 -1
- package/dist/providers/copilot/index.d.ts +15 -0
- package/dist/providers/copilot/index.d.ts.map +1 -0
- package/dist/providers/copilot/index.js +19 -0
- package/dist/providers/copilot/index.js.map +1 -0
- package/dist/providers/cursor/index.d.ts.map +1 -1
- package/dist/providers/cursor/index.js +1 -0
- package/dist/providers/cursor/index.js.map +1 -1
- package/dist/providers/cursor/parse.d.ts.map +1 -1
- package/dist/providers/cursor/parse.js +1 -0
- package/dist/providers/cursor/parse.js.map +1 -1
- package/dist/providers/gemini/index.d.ts.map +1 -1
- package/dist/providers/gemini/index.js +16 -20
- package/dist/providers/gemini/index.js.map +1 -1
- package/dist/providers/openclaw/execute.d.ts +5 -0
- package/dist/providers/openclaw/execute.d.ts.map +1 -1
- package/dist/providers/openclaw/execute.js +13 -173
- package/dist/providers/openclaw/execute.js.map +1 -1
- package/dist/providers/openclaw/index.d.ts.map +1 -1
- package/dist/providers/openclaw/index.js +1 -0
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/providers/opencode/event-parse.d.ts +23 -0
- package/dist/providers/opencode/event-parse.d.ts.map +1 -0
- package/dist/providers/opencode/event-parse.js +128 -0
- package/dist/providers/opencode/event-parse.js.map +1 -0
- package/dist/providers/opencode/http-session.d.ts +4 -0
- package/dist/providers/opencode/http-session.d.ts.map +1 -0
- package/dist/providers/opencode/http-session.js +376 -0
- package/dist/providers/opencode/http-session.js.map +1 -0
- package/dist/providers/opencode/index.d.ts.map +1 -1
- package/dist/providers/opencode/index.js +6 -1
- package/dist/providers/opencode/index.js.map +1 -1
- package/dist/providers/opencode/parse.d.ts.map +1 -1
- package/dist/providers/opencode/parse.js +1 -0
- package/dist/providers/opencode/parse.js.map +1 -1
- package/dist/providers/opencode/server.d.ts +8 -0
- package/dist/providers/opencode/server.d.ts.map +1 -0
- package/dist/providers/opencode/server.js +0 -0
- package/dist/providers/opencode/server.js.map +1 -0
- package/dist/providers/pi/index.d.ts.map +1 -1
- package/dist/providers/pi/index.js +6 -1
- package/dist/providers/pi/index.js.map +1 -1
- package/dist/providers/pi/parse.d.ts.map +1 -1
- package/dist/providers/pi/parse.js +1 -0
- package/dist/providers/pi/parse.js.map +1 -1
- package/dist/providers/pi/session.d.ts +40 -0
- package/dist/providers/pi/session.d.ts.map +1 -0
- package/dist/providers/pi/session.js +328 -0
- package/dist/providers/pi/session.js.map +1 -0
- package/dist/providers/process/index.d.ts.map +1 -1
- package/dist/providers/process/index.js +1 -0
- package/dist/providers/process/index.js.map +1 -1
- package/dist/registry.d.ts +1 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +6 -0
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +185 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/tool-names.d.ts +24 -0
- package/dist/utils/tool-names.d.ts.map +1 -0
- package/dist/utils/tool-names.js +50 -0
- package/dist/utils/tool-names.js.map +1 -0
- package/package.json +22 -13
- package/dist/providers/claude/test.d.ts +0 -3
- package/dist/providers/claude/test.d.ts.map +0 -1
- package/dist/providers/claude/test.js +0 -167
- package/dist/providers/claude/test.js.map +0 -1
- package/dist/providers/codex/test.d.ts +0 -3
- package/dist/providers/codex/test.d.ts.map +0 -1
- package/dist/providers/codex/test.js +0 -74
- package/dist/providers/codex/test.js.map +0 -1
- package/dist/providers/cursor/test.d.ts +0 -3
- package/dist/providers/cursor/test.d.ts.map +0 -1
- package/dist/providers/cursor/test.js +0 -58
- package/dist/providers/cursor/test.js.map +0 -1
- package/dist/providers/gemini/codec.d.ts +0 -3
- package/dist/providers/gemini/codec.d.ts.map +0 -1
- package/dist/providers/gemini/codec.js +0 -47
- package/dist/providers/gemini/codec.js.map +0 -1
- package/dist/providers/gemini/execute.d.ts +0 -3
- package/dist/providers/gemini/execute.d.ts.map +0 -1
- package/dist/providers/gemini/execute.js +0 -256
- package/dist/providers/gemini/execute.js.map +0 -1
- package/dist/providers/gemini/parse.d.ts +0 -20
- package/dist/providers/gemini/parse.d.ts.map +0 -1
- package/dist/providers/gemini/parse.js +0 -235
- package/dist/providers/gemini/parse.js.map +0 -1
- package/dist/providers/gemini/test.d.ts +0 -3
- package/dist/providers/gemini/test.d.ts.map +0 -1
- package/dist/providers/gemini/test.js +0 -67
- package/dist/providers/gemini/test.js.map +0 -1
- package/dist/providers/openclaw/test.d.ts +0 -3
- package/dist/providers/openclaw/test.d.ts.map +0 -1
- package/dist/providers/openclaw/test.js +0 -54
- package/dist/providers/openclaw/test.js.map +0 -1
- package/dist/providers/opencode/test.d.ts +0 -3
- package/dist/providers/opencode/test.d.ts.map +0 -1
- package/dist/providers/opencode/test.js +0 -60
- package/dist/providers/opencode/test.js.map +0 -1
- package/dist/providers/pi/test.d.ts +0 -3
- package/dist/providers/pi/test.d.ts.map +0 -1
- package/dist/providers/pi/test.js +0 -60
- package/dist/providers/pi/test.js.map +0 -1
- package/dist/utils/model-cache.d.ts +0 -11
- package/dist/utils/model-cache.d.ts.map +0 -1
- package/dist/utils/model-cache.js +0 -17
- package/dist/utils/model-cache.js.map +0 -1
package/README.md
CHANGED
|
@@ -44,22 +44,86 @@ console.log(result.raw); // the final provider-native event, verbatim (es
|
|
|
44
44
|
|
|
45
45
|
## Built-in Providers
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
Providers fall into three tiers:
|
|
48
|
+
|
|
49
|
+
- **Tier 1 — deep native:** `claude`, `codex`. Hand-built adapters over each CLI's richest protocol (Claude's stream-json, Codex's `app-server` JSON-RPC). Subscription-native, fullest feature set.
|
|
50
|
+
- **Tier 2 — ACP:** `gemini`, `copilot`, plus any agent registered via [`acpProvider`](#custom--byok-providers) or `extends: "acp"` config. One shared, tested base over the open [Agent Client Protocol](https://agentclientprotocol.com) (JSON-RPC over stdio).
|
|
51
|
+
- **Tier 3 — bespoke escape hatches:** `opencode` (HTTP/SSE daemon), `pi` (persistent RPC), `cursor` (one-shot), `openclaw` (HTTP gateway), `process` (any executable).
|
|
52
|
+
|
|
53
|
+
| Provider | Transport | Tier | Sessions | Modes | Permissions |
|
|
54
|
+
| ---------- | -------------------------------------- | ---- | --------- | ----- | ----------- |
|
|
55
|
+
| `claude` | `claude` CLI stream-json | 1 | ✅ resume | — | ✅ |
|
|
56
|
+
| `codex` | `codex app-server` JSON-RPC | 1 | ✅ resume | ✅ | ✅ |
|
|
57
|
+
| `gemini` | `gemini --acp` (ACP) | 2 | ✅ | ✅ | ✅ |
|
|
58
|
+
| `copilot` | `copilot --acp` (ACP) | 2 | ✅ | ✅ | ✅ |
|
|
59
|
+
| `opencode` | `opencode serve` HTTP + SSE | 3 | ✅ resume | — | — |
|
|
60
|
+
| `pi` | persistent `pi --mode rpc` | 3 | ✅ resume | — | — |
|
|
61
|
+
| `cursor` | `cursor-agent` stream-json (one-shot) | 3 | — | — | — |
|
|
62
|
+
| `openclaw` | HTTP gateway | 3 | — | — | — |
|
|
63
|
+
| `process` | any executable | 3 | — | — | — |
|
|
64
|
+
|
|
65
|
+
> `cursor` stays one-shot until `cursor-agent` ships an ACP mode; it can then move to Tier 2 via `extends: "acp"`.
|
|
66
|
+
|
|
67
|
+
Capabilities (sessions, modes, skills, workspaces, MCP, model discovery, quota probing, instructions, concurrent send, cancel queued messages) are declared on each module's `capabilities` field — check `provider.capabilities` to branch on what's supported. ACP providers set `dynamicCapabilities: true` (their real capability set is negotiated at the ACP `initialize` handshake). Skill-aware providers also report:
|
|
59
68
|
|
|
60
69
|
- `skillInventory` — `"provider-init"` for Claude's runtime inventory, `"local-discovery"` for Codex, or `"none"`.
|
|
61
70
|
- `skillInvocation` — `"native-slash"` for Claude, `"expanded-prompt"` for Codex, `"configured-only"`, or `"unsupported"`.
|
|
62
71
|
|
|
72
|
+
## Custom / BYOK providers
|
|
73
|
+
|
|
74
|
+
Three ways to add providers without forking, all behind the same `getProvider` /
|
|
75
|
+
`ProviderModule` surface. See [internal-docs/spec-provider-architecture.md](../../internal-docs/spec-provider-architecture.md)
|
|
76
|
+
for the design.
|
|
77
|
+
|
|
78
|
+
**Derived providers (config-extend).** Inherit a built-in with an env / command /
|
|
79
|
+
model overlay — the canonical use is pointing Claude at an Anthropic-compatible
|
|
80
|
+
gateway:
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
import { defineDerivedProvider, registerProvider, loadProvidersFromConfig } from "@agentex/agent";
|
|
84
|
+
|
|
85
|
+
registerProvider(
|
|
86
|
+
defineDerivedProvider({
|
|
87
|
+
id: "zai",
|
|
88
|
+
extends: "claude",
|
|
89
|
+
env: { ANTHROPIC_BASE_URL: "https://api.z.ai/api/anthropic", ANTHROPIC_AUTH_TOKEN: "…" },
|
|
90
|
+
models: [{ id: "glm-5.1", name: "GLM 5.1" }],
|
|
91
|
+
}),
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
// …or load a whole map from config (also accepts Paseo's `agents.providers` nesting):
|
|
95
|
+
loadProvidersFromConfig({
|
|
96
|
+
providers: {
|
|
97
|
+
zai: { extends: "claude", env: { ANTHROPIC_BASE_URL: "…" } },
|
|
98
|
+
"my-gemini": { extends: "acp", command: ["gemini", "--acp"] },
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**ACP agents.** Any agent speaking the [Agent Client Protocol](https://agentclientprotocol.com)
|
|
104
|
+
is a few lines:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { acpProvider, registerProvider } from "@agentex/agent";
|
|
108
|
+
|
|
109
|
+
registerProvider(acpProvider({ id: "my-agent", command: ["my-agent", "--acp"] }));
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`acpProvider` also accepts `transformers` (`modes` / `modeId`) to absorb a
|
|
113
|
+
specific agent's quirks without forking the base.
|
|
114
|
+
|
|
115
|
+
**Remote HTTP gateways.** For an "agent behind a URL", `httpAgentProvider` gives
|
|
116
|
+
you gateway-URL resolution, session-key round-trip, `auth_required` mapping, and
|
|
117
|
+
timeouts:
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import { httpAgentProvider, registerProvider } from "@agentex/agent";
|
|
121
|
+
|
|
122
|
+
registerProvider(
|
|
123
|
+
httpAgentProvider({ providerType: "my-gw", defaultBaseUrl: "http://localhost:3001", runPath: "/api/agent/run" }),
|
|
124
|
+
);
|
|
125
|
+
```
|
|
126
|
+
|
|
63
127
|
## Execution Context
|
|
64
128
|
|
|
65
129
|
Only `prompt` is required. Everything else has sensible defaults.
|
|
@@ -94,17 +158,34 @@ interface ProviderConfig {
|
|
|
94
158
|
skipPermissions?: boolean;
|
|
95
159
|
skillDirs?: string[];
|
|
96
160
|
instructionsFile?: string;
|
|
97
|
-
mcpServers?: McpServerConfig[];
|
|
98
|
-
|
|
161
|
+
mcpServers?: McpServerConfig[]; // stdio | http | sse — staged as a 0600 file, passed via --mcp-config
|
|
162
|
+
strictMcpConfig?: boolean; // claude: --strict-mcp-config — MCP surface is exactly what you attach
|
|
163
|
+
allowedTools?: string[]; // claude: --allowed-tools (patterns verbatim; codex ignores)
|
|
164
|
+
disallowedTools?: string[]; // claude: --disallowed-tools (deny wins; codex ignores)
|
|
165
|
+
includePartialMessages?: boolean; // claude: emit assistant_delta/thinking_delta typewriter events
|
|
166
|
+
extraArgs?: string[]; // always appended LAST — hosts can override any generated flag
|
|
99
167
|
search?: boolean;
|
|
100
168
|
sandbox?: boolean;
|
|
101
169
|
thinking?: string;
|
|
102
170
|
mode?: string; // cursor: --mode <mode>; not for plan mode
|
|
171
|
+
modeId?: string; // select an operating mode from listModes() (codex/ACP)
|
|
103
172
|
planMode?: boolean; // read-only "plan" mode (claude/codex)
|
|
104
173
|
workspace?: { strategy: "worktree"; baseBranch?: string; branchName?: string };
|
|
105
174
|
}
|
|
106
175
|
```
|
|
107
176
|
|
|
177
|
+
MCP servers attach via a generated config file, never argv — http `headers` can
|
|
178
|
+
carry bearer tokens and argv is world-readable via `ps`:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
config.mcpServers = [
|
|
182
|
+
{ name: "files", command: "node", args: ["mcp-files.js"] }, // stdio (default)
|
|
183
|
+
{ name: "orchestrator", type: "http", url: "http://localhost:4100/mcp", // http/sse
|
|
184
|
+
headers: { Authorization: "Bearer …" } },
|
|
185
|
+
];
|
|
186
|
+
config.strictMcpConfig = true; // nothing else leaks in
|
|
187
|
+
```
|
|
188
|
+
|
|
108
189
|
## Execution Result
|
|
109
190
|
|
|
110
191
|
```typescript
|
|
@@ -175,7 +256,7 @@ interface BaseStreamEventFields {
|
|
|
175
256
|
providerType: string; // "claude" | "codex" | "cursor" | ...
|
|
176
257
|
sessionId: string | null; // Stable session/thread ID across turns
|
|
177
258
|
messageId: string | null; // Provider-native message ID
|
|
178
|
-
eventId: string | null; // Per-event
|
|
259
|
+
eventId: string | null; // Per-event ID (Claude: native uuid; Codex: synthetic — see below)
|
|
179
260
|
turnId: string | null; // Native turn ID (Codex v2 app-server only; NDJSON & Claude = null)
|
|
180
261
|
parentToolCallId: string | null; // Sub-agent origin — same namespace as tool_call.toolCallId (Claude only)
|
|
181
262
|
raw: Record<string, unknown>; // Original provider event verbatim
|
|
@@ -186,10 +267,12 @@ Variants:
|
|
|
186
267
|
|
|
187
268
|
- `system` — Session init (`subtype`, `model`, `cwd`, `tools`, `permissionMode`). Claude init events also include `slashCommands?: string[]` and `skills?: string[]` when Claude Code reports them.
|
|
188
269
|
- `assistant` — Text output from the agent (`text`)
|
|
270
|
+
- `assistant_delta` — Incremental assistant text for typewriter UIs (`text`, `blockIndex`). Opt-in via `config.includePartialMessages` (claude). Purely additive: the consolidated `assistant` event still fires when the block completes, with a matching `messageId` so you can reconcile optimistic delta text against the durable event.
|
|
189
271
|
- `thinking` — Agent's internal reasoning (`text`)
|
|
272
|
+
- `thinking_delta` — Incremental thinking text (`text`, `blockIndex`), same flag, best-effort. On current Claude versions these deltas are the *only* place thinking prose appears — the consolidated thinking block is withheld (signature-only). Treat as advisory UI sugar.
|
|
190
273
|
- `tool_call` — Agent invoked a tool (`toolCallId: string | null`, `name`, `input`)
|
|
191
274
|
- `unknown` — Fallback for unrecognized wire events (`subtype` = the provider's `type` field). Forward-compat access to new CLI events via `raw` without a library update.
|
|
192
|
-
- `tool_result` — Tool returned a result (`toolCallId: string | null`, `content`, `isError`, `exitCode: number | null`)
|
|
275
|
+
- `tool_result` — Tool returned a result (`toolCallId: string | null`, `toolName: string | null`, `content`, `isError`, `exitCode: number | null`). `toolName` mirrors the matching `tool_call.name` (correlated for you), so you don't need your own `toolCallId → name` cache; null when no preceding `tool_call` was seen on the stream.
|
|
193
276
|
- `rate_limit` — Provider reported rate-limit state (`status`, `limitType`, `resetAt`, `overageStatus`, `isUsingOverage`)
|
|
194
277
|
- `permission_mode` — Permission mode change mid-session (`permissionMode: string`). Claude only, e.g., when the user accepts a plan and the session leaves `plan` mode.
|
|
195
278
|
- `result` — Final result (`text`, `costUsd`, `isError`, `stopReason`, `terminalReason`, `numTurns`, `durationMs`)
|
|
@@ -198,16 +281,16 @@ Lifecycle events (via `onLifecycle`) report phases: `preparing`, `spawning`, `ru
|
|
|
198
281
|
|
|
199
282
|
### What each provider surfaces on stream events
|
|
200
283
|
|
|
201
|
-
Verified live against `claude 2.1.116` and `codex-cli 0.122.0` (2026-04-21).
|
|
284
|
+
Verified live against `claude 2.1.116` and `codex-cli 0.122.0` (2026-04-21). ACP providers (`gemini`, `copilot`) and the session-backed `opencode`/`pi` emit real, correlated events (assistant / thinking / tool_call / tool_result); `cursor` and `openclaw` still stub most IDs — see the precedence note at the end of this section.
|
|
202
285
|
|
|
203
286
|
| Field on `StreamEvent` | Claude source | Codex source |
|
|
204
287
|
| ---------------------- | -------------------------------------------------- | ------------------------------------------------ |
|
|
205
288
|
| `sessionId` | `session_id` (UUID, stable across turns + resume) | `thread_id` (UUIDv7, emitted once on `thread.started`, tracked across lines) |
|
|
206
289
|
| `messageId` | `message.id` (Anthropic API message, e.g. `msg_*`) | v2 app-server: globally unique (`msg_*`, `rs_*`, `call_*`). NDJSON: `item_N` — **turn-local, not globally unique** |
|
|
207
|
-
| `eventId` | Top-level per-line `uuid` |
|
|
290
|
+
| `eventId` | Top-level per-line `uuid` | Synthetic where derivable (see below); else null |
|
|
208
291
|
| `turnId` | **null** — Claude doesn't model turns | v2 app-server: native UUIDv7 from `params.turnId`. NDJSON: **null** — no turn id in legacy format |
|
|
209
292
|
| `parentToolCallId` | `parent_tool_use_id` (set for sub-agent messages) | **null** — not emitted |
|
|
210
|
-
| Tool correlation | `tool_use.id` (`toolu_*`) ↔ `tool_result.tool_use_id` | `item.id` reappears on the same item's `item.completed` |
|
|
293
|
+
| Tool correlation | `tool_use.id` (`toolu_*`) ↔ `tool_result.tool_use_id`; the library stamps `tool_result.toolName` from the matching call | `item.id` reappears on the same item's `item.completed`; `toolName` set directly from the item type |
|
|
211
294
|
| `tool_result.exitCode` | **null** (Claude doesn't expose shell exit codes) | `item.exit_code` for `command_execution` |
|
|
212
295
|
| Assistant message span | One `message.id` may span multiple event lines (thinking + tool_use emitted separately with distinct `uuid`s) | One `item.completed` per agent message |
|
|
213
296
|
|
|
@@ -231,13 +314,17 @@ On `ExecutionResult`:
|
|
|
231
314
|
|
|
232
315
|
For Claude, `eventId` is a safe unique key for a per-event row. `messageId` is a safe key for "one logical assistant message" — multiple event lines can share it when the message contains both thinking and tool_use blocks.
|
|
233
316
|
|
|
234
|
-
For Codex, `item.id` values like `item_0`, `item_1` **reset every turn** (including on `codex exec resume`). Do not use them as unique keys on their own.
|
|
317
|
+
For Codex, `item.id` values like `item_0`, `item_1` **reset every turn** (including on `codex exec resume`). Do not use them as unique keys on their own. Codex emits no native per-event uuid, so agentex synthesizes documented, replay-stable identities where the components exist:
|
|
318
|
+
|
|
319
|
+
- **Live v2 session events:** `eventId = codex:<threadId>:<turnId>:<itemId>:<eventType>` when thread + turn + item are all known; null otherwise. This is an **upsert key**, not a uniqueness guarantee — repeated updates to the same item (e.g. streaming text) intentionally share an id; the last write wins.
|
|
320
|
+
- **Transcript reads** (`transcript.read()` / `readCodexTranscript`): `eventId = codex:<rolloutSessionId>:<lineStartByteOffset>` — deterministic across reads of the same file, so transcript replays are idempotent.
|
|
321
|
+
- The two schemes intentionally **do not match each other** (the live and on-disk wire vocabularies differ — `command_execution` vs `exec_command`). Cross-shape dedup between a live capture and a transcript replay remains a host concern.
|
|
235
322
|
|
|
236
323
|
When in doubt, `raw` is the verbatim provider event — parse it yourself for anything the normalized fields don't cover.
|
|
237
324
|
|
|
238
325
|
### Other providers
|
|
239
326
|
|
|
240
|
-
`
|
|
327
|
+
`gemini` and `copilot` (ACP) and the session-backed `opencode` and `pi` emit real, correlated `StreamEvent`s — assistant text, thinking, and tool_call/tool_result with proper tool-call ids (ACP and Codex have no per-event/message ids, so those stay `null`). `cursor` and `openclaw` still emit the same `StreamEvent` shape with most ids stubbed to `null`; their `raw` field is populated. `cursor` will gain full fidelity when it moves to the ACP tier.
|
|
241
328
|
|
|
242
329
|
## Sessions (multi-turn)
|
|
243
330
|
|
|
@@ -265,7 +352,26 @@ await followUp.result;
|
|
|
265
352
|
await session.close();
|
|
266
353
|
```
|
|
267
354
|
|
|
268
|
-
`session.send()` returns a `SendHandle` with a synchronously-available `uuid` and a `result: Promise<TurnResult>`. `TurnResult` carries `summary`, `usage`, `costUsd`, and a `status` of `completed | failed | max_turns | max_budget | aborted`. Handle elicitations (MCP forms), hook callbacks, and interrupts through the corresponding `SessionContext` callbacks.
|
|
355
|
+
`session.send()` returns a `SendHandle` with a synchronously-available `uuid` and a `result: Promise<TurnResult>`. `TurnResult` carries `summary`, `usage`, `costUsd`, and a `status` of `completed | failed | max_turns | max_budget | aborted | timeout`. Handle elicitations (MCP forms), hook callbacks, and interrupts through the corresponding `SessionContext` callbacks.
|
|
356
|
+
|
|
357
|
+
### Bounding a turn (timeout / abort)
|
|
358
|
+
|
|
359
|
+
`send()` takes an optional `SendOptions` to cap a single turn — the natural shape for scheduled / fire-and-forget runs where a cron firing every minute can't be allowed to run a multi-hour turn:
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
// Hard cap this turn. On fire, the library interrupts the agent and resolves
|
|
363
|
+
// `result` with status "timeout" — no consumer-side Promise.race needed.
|
|
364
|
+
const { result } = await session.send("Summarize the repo.", { timeoutSec: 90 });
|
|
365
|
+
const turn = await result;
|
|
366
|
+
if (turn.status === "timeout") { /* mark the run timed-out */ }
|
|
367
|
+
|
|
368
|
+
// Or abort just this turn (not the whole session) via an AbortSignal.
|
|
369
|
+
const ac = new AbortController();
|
|
370
|
+
const handle = await session.send("Long task…", { signal: ac.signal });
|
|
371
|
+
ac.abort(); // → result resolves with status "aborted"
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
`SendOptions.timeoutSec` overrides `ProviderConfig.timeoutSec`, which acts as the session-level default when no per-call value is given. The per-send `signal` is distinct from `SessionContext.signal`: the per-send one ends just that turn, the session-level one closes the whole session. Because a session runs a single underlying agent, a timeout/abort interrupts the active turn — so any concurrent sends coalesced into the same turn end with it.
|
|
269
375
|
|
|
270
376
|
### Concurrent send ("type while the agent is working")
|
|
271
377
|
|
|
@@ -310,6 +416,18 @@ else console.log("Too late — the agent already drained it.");
|
|
|
310
416
|
|
|
311
417
|
> **Race note.** Cancellation is best-effort. If the CLI drained the message mid-turn (Claude's `query.ts` between-tool-batches drain) before your `cancel()` request landed, you get `{ cancelled: false }` — and the message will be visible to the model as a `<system-reminder>`. The library does not unmount what the model has already seen.
|
|
312
418
|
|
|
419
|
+
### Graceful shutdown with `drain()`
|
|
420
|
+
|
|
421
|
+
`close()` kills the process (SIGTERM → SIGKILL after `graceSec`, default 5) — fine for "stop now," wrong when a tool is mid-flight. `drain()` is the graceful stop: it refuses new `send()` calls (they throw), waits for any in-flight turn's `result` to settle, then closes. Use it for budget gates, `SIGTERM` handlers, and schedule pauses where a running turn should finish rather than be cut off.
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
process.on("SIGTERM", async () => {
|
|
425
|
+
await session.drain(); // let the current turn finish, then close
|
|
426
|
+
});
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
`drain()` is idempotent. Bump `ProviderConfig.graceSec` for sessions running legitimately long tools (test suites, long Bash) so `close()`/`drain()` don't hard-kill them prematurely.
|
|
430
|
+
|
|
313
431
|
## Plan Mode
|
|
314
432
|
|
|
315
433
|
Run an agent in read-only "plan" mode — it investigates and proposes a plan but cannot edit files or run mutating commands. Same goal in both providers, **different mechanism** in each. Check `provider.capabilities.planMode` before relying on it.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ProviderModel, ProviderModule } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Declarative configuration for a *derived* provider — a new provider id that
|
|
4
|
+
* inherits a built-in provider's behavior with an environment / command / model
|
|
5
|
+
* overlay. The canonical use is BYOK gateways: point Claude at an
|
|
6
|
+
* Anthropic-compatible endpoint (z.ai, Qwen, a local proxy) by extending
|
|
7
|
+
* `"claude"` and setting `env.ANTHROPIC_BASE_URL`, with no new code.
|
|
8
|
+
*/
|
|
9
|
+
export interface DerivedProviderConfig {
|
|
10
|
+
/** Unique id for the new provider (used with `getProvider`/`registerProvider`). */
|
|
11
|
+
id: string;
|
|
12
|
+
/** A registered provider to inherit from (e.g. "claude", "codex"). For ACP
|
|
13
|
+
* agents use the config-file loader's `extends: "acp"` form instead. */
|
|
14
|
+
extends: string;
|
|
15
|
+
/** Display label (informational). */
|
|
16
|
+
label?: string;
|
|
17
|
+
/** Description (informational). */
|
|
18
|
+
description?: string;
|
|
19
|
+
/** Override the binary/command the base provider spawns. Per-call
|
|
20
|
+
* `config.command` still wins. */
|
|
21
|
+
command?: string;
|
|
22
|
+
/** Environment overlay applied to every execute / session / auth / modes /
|
|
23
|
+
* quota call (e.g. `ANTHROPIC_BASE_URL`). Per-call `ctx.env` overrides it. */
|
|
24
|
+
env?: Record<string, string>;
|
|
25
|
+
/** Replace the model list surfaced by `listModels()`. */
|
|
26
|
+
models?: ProviderModel[];
|
|
27
|
+
/** Default `config.modeId` applied when the caller doesn't set one. */
|
|
28
|
+
modeId?: string;
|
|
29
|
+
/** When `false`, `loadProvidersFromConfig` skips this entry. */
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Thrown when a provider config object is malformed. Branch on it; don't parse. */
|
|
33
|
+
export declare class MalformedProviderConfigError extends Error {
|
|
34
|
+
readonly path?: string;
|
|
35
|
+
constructor(message: string, path?: string);
|
|
36
|
+
}
|
|
37
|
+
/** Signature of the ACP factory registered by the ACP provider module. */
|
|
38
|
+
export type AcpFactory = (config: {
|
|
39
|
+
id: string;
|
|
40
|
+
command: string[];
|
|
41
|
+
env?: Record<string, string>;
|
|
42
|
+
label?: string;
|
|
43
|
+
models?: ProviderModel[];
|
|
44
|
+
modeId?: string;
|
|
45
|
+
}) => ProviderModule;
|
|
46
|
+
/**
|
|
47
|
+
* Registered by `@agentex/agent`'s ACP provider module on import, so the
|
|
48
|
+
* config-file loader can build `extends: "acp"` providers without a hard
|
|
49
|
+
* dependency on the ACP SDK at the top of the module graph.
|
|
50
|
+
*/
|
|
51
|
+
export declare function registerAcpFactory(factory: AcpFactory): void;
|
|
52
|
+
/** @internal — for tests. */
|
|
53
|
+
export declare function getAcpFactory(): AcpFactory | null;
|
|
54
|
+
/**
|
|
55
|
+
* Build a derived `ProviderModule` from a base provider plus an overlay. The
|
|
56
|
+
* returned module is NOT auto-registered — pass it to `registerProvider`, or
|
|
57
|
+
* use `loadProvidersFromConfig` which registers for you.
|
|
58
|
+
*/
|
|
59
|
+
export declare function defineDerivedProvider(cfg: DerivedProviderConfig): ProviderModule;
|
|
60
|
+
/**
|
|
61
|
+
* Build provider modules from a config object and (by default) register them.
|
|
62
|
+
* Supports `extends: "<builtin>"` (env/command/model overlay) and
|
|
63
|
+
* `extends: "acp"` (build an ACP provider from `command`). Throws
|
|
64
|
+
* `MalformedProviderConfigError` on a bad shape.
|
|
65
|
+
*/
|
|
66
|
+
export declare function loadProvidersFromConfig(raw: unknown, options?: {
|
|
67
|
+
register?: boolean;
|
|
68
|
+
}): ProviderModule[];
|
|
69
|
+
//# sourceMappingURL=derived.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,mFAAmF;IACnF,EAAE,EAAE,MAAM,CAAC;IACX;6EACyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;uCACmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;mFAC+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,oFAAoF;AACpF,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAK3C;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,KAAK,cAAc,CAAC;AAIrB;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAE5D;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,qBAAqB,GAAG,cAAc,CAiEhF;AA+FD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/B,cAAc,EAAE,CA4DlB"}
|
package/dist/derived.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { getProvider, registerProvider } from "./registry.js";
|
|
2
|
+
/** Thrown when a provider config object is malformed. Branch on it; don't parse. */
|
|
3
|
+
export class MalformedProviderConfigError extends Error {
|
|
4
|
+
path;
|
|
5
|
+
constructor(message, path) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "MalformedProviderConfigError";
|
|
8
|
+
this.path = path;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
let acpFactory = null;
|
|
12
|
+
/**
|
|
13
|
+
* Registered by `@agentex/agent`'s ACP provider module on import, so the
|
|
14
|
+
* config-file loader can build `extends: "acp"` providers without a hard
|
|
15
|
+
* dependency on the ACP SDK at the top of the module graph.
|
|
16
|
+
*/
|
|
17
|
+
export function registerAcpFactory(factory) {
|
|
18
|
+
acpFactory = factory;
|
|
19
|
+
}
|
|
20
|
+
/** @internal — for tests. */
|
|
21
|
+
export function getAcpFactory() {
|
|
22
|
+
return acpFactory;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build a derived `ProviderModule` from a base provider plus an overlay. The
|
|
26
|
+
* returned module is NOT auto-registered — pass it to `registerProvider`, or
|
|
27
|
+
* use `loadProvidersFromConfig` which registers for you.
|
|
28
|
+
*/
|
|
29
|
+
export function defineDerivedProvider(cfg) {
|
|
30
|
+
if (!cfg.id || typeof cfg.id !== "string") {
|
|
31
|
+
throw new MalformedProviderConfigError("derived provider requires a non-empty string id");
|
|
32
|
+
}
|
|
33
|
+
if (cfg.extends === "acp") {
|
|
34
|
+
throw new MalformedProviderConfigError(`provider "${cfg.id}": extends "acp" is built by loadProvidersFromConfig (or acpProvider() directly), not defineDerivedProvider`, cfg.id);
|
|
35
|
+
}
|
|
36
|
+
const base = getProvider(cfg.extends); // throws on unknown base
|
|
37
|
+
const overlayEnv = (env) => ({
|
|
38
|
+
...cfg.env,
|
|
39
|
+
...env,
|
|
40
|
+
});
|
|
41
|
+
const overlayConfig = (config) => ({
|
|
42
|
+
...config,
|
|
43
|
+
...(cfg.command && !config?.command ? { command: cfg.command } : {}),
|
|
44
|
+
...(cfg.modeId && !config?.modeId ? { modeId: cfg.modeId } : {}),
|
|
45
|
+
});
|
|
46
|
+
const capabilities = {
|
|
47
|
+
...base.capabilities,
|
|
48
|
+
...(cfg.models ? { modelDiscovery: true } : {}),
|
|
49
|
+
};
|
|
50
|
+
const derived = {
|
|
51
|
+
...base,
|
|
52
|
+
type: cfg.id,
|
|
53
|
+
capabilities,
|
|
54
|
+
execute: (ctx) => base.execute({ ...ctx, env: overlayEnv(ctx.env), config: overlayConfig(ctx.config) }),
|
|
55
|
+
resolveAuth: (authCtx) => base.resolveAuth({
|
|
56
|
+
...authCtx,
|
|
57
|
+
env: overlayEnv(authCtx?.env),
|
|
58
|
+
command: authCtx?.command ?? cfg.command,
|
|
59
|
+
}),
|
|
60
|
+
};
|
|
61
|
+
if (base.createSession) {
|
|
62
|
+
const baseCreate = base.createSession.bind(base);
|
|
63
|
+
derived.createSession = (ctx) => baseCreate({ ...ctx, env: overlayEnv(ctx.env), config: overlayConfig(ctx.config) });
|
|
64
|
+
}
|
|
65
|
+
if (cfg.models) {
|
|
66
|
+
const models = cfg.models;
|
|
67
|
+
derived.listModels = async () => models;
|
|
68
|
+
}
|
|
69
|
+
else if (base.listModels) {
|
|
70
|
+
const baseList = base.listModels.bind(base);
|
|
71
|
+
derived.listModels = (opts) => baseList(opts);
|
|
72
|
+
}
|
|
73
|
+
if (base.listModes) {
|
|
74
|
+
const baseModes = base.listModes.bind(base);
|
|
75
|
+
derived.listModes = (opts) => baseModes({ ...opts, env: overlayEnv(opts?.env), config: overlayConfig(opts?.config) });
|
|
76
|
+
}
|
|
77
|
+
if (base.checkQuota) {
|
|
78
|
+
const baseQuota = base.checkQuota.bind(base);
|
|
79
|
+
derived.checkQuota = (qctx) => baseQuota({ ...qctx, env: overlayEnv(qctx?.env), config: overlayConfig(qctx?.config) });
|
|
80
|
+
}
|
|
81
|
+
return derived;
|
|
82
|
+
}
|
|
83
|
+
function isRecord(v) {
|
|
84
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
85
|
+
}
|
|
86
|
+
function toCommandArray(command, path) {
|
|
87
|
+
if (typeof command === "string") {
|
|
88
|
+
const parts = command.trim().split(/\s+/).filter(Boolean);
|
|
89
|
+
if (parts.length === 0)
|
|
90
|
+
throw new MalformedProviderConfigError(`${path}.command is empty`, path);
|
|
91
|
+
return parts;
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(command) && command.every((c) => typeof c === "string") && command.length > 0) {
|
|
94
|
+
return command;
|
|
95
|
+
}
|
|
96
|
+
throw new MalformedProviderConfigError(`${path}.command must be a non-empty string or string[] for an ACP provider`, path);
|
|
97
|
+
}
|
|
98
|
+
function toCommandString(command, path) {
|
|
99
|
+
if (command === undefined)
|
|
100
|
+
return undefined;
|
|
101
|
+
if (typeof command === "string")
|
|
102
|
+
return command;
|
|
103
|
+
if (Array.isArray(command)) {
|
|
104
|
+
// agentex's `config.command` is a single binary (args go through the agent's
|
|
105
|
+
// own config), so a multi-element array would silently drop everything past
|
|
106
|
+
// the binary — reject it rather than mislead. (ACP providers use the array
|
|
107
|
+
// form via the `extends: "acp"` branch instead.)
|
|
108
|
+
if (command.length === 1 && typeof command[0] === "string")
|
|
109
|
+
return command[0];
|
|
110
|
+
throw new MalformedProviderConfigError(`${path}.command for a non-ACP provider must be a single binary string; got an array of ${command.length} (use extends: "acp" for binary+args)`, path);
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
function validateEnv(env, path) {
|
|
115
|
+
if (env === undefined)
|
|
116
|
+
return undefined;
|
|
117
|
+
if (!isRecord(env))
|
|
118
|
+
throw new MalformedProviderConfigError(`${path}.env must be an object`, path);
|
|
119
|
+
const out = {};
|
|
120
|
+
for (const [k, v] of Object.entries(env)) {
|
|
121
|
+
if (typeof v !== "string") {
|
|
122
|
+
throw new MalformedProviderConfigError(`${path}.env.${k} must be a string`, path);
|
|
123
|
+
}
|
|
124
|
+
out[k] = v;
|
|
125
|
+
}
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
function validateModels(models, path) {
|
|
129
|
+
if (models === undefined)
|
|
130
|
+
return undefined;
|
|
131
|
+
if (!Array.isArray(models))
|
|
132
|
+
throw new MalformedProviderConfigError(`${path}.models must be an array`, path);
|
|
133
|
+
return models.map((m, i) => {
|
|
134
|
+
if (!isRecord(m) || typeof m["id"] !== "string") {
|
|
135
|
+
throw new MalformedProviderConfigError(`${path}.models[${i}] must have a string id`, path);
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
id: m["id"],
|
|
139
|
+
name: typeof m["name"] === "string" ? m["name"] : m["id"],
|
|
140
|
+
...(typeof m["provider"] === "string" ? { provider: m["provider"] } : {}),
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Locate the providers map, accepting `{ providers }` or Paseo's
|
|
145
|
+
* `{ agents: { providers } }` nesting. */
|
|
146
|
+
function findProvidersMap(raw) {
|
|
147
|
+
if (!isRecord(raw))
|
|
148
|
+
throw new MalformedProviderConfigError("config must be an object");
|
|
149
|
+
if (isRecord(raw["providers"]))
|
|
150
|
+
return raw["providers"];
|
|
151
|
+
if (isRecord(raw["agents"]) && isRecord(raw["agents"]["providers"])) {
|
|
152
|
+
return raw["agents"]["providers"];
|
|
153
|
+
}
|
|
154
|
+
throw new MalformedProviderConfigError("config must contain a `providers` (or `agents.providers`) object");
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Build provider modules from a config object and (by default) register them.
|
|
158
|
+
* Supports `extends: "<builtin>"` (env/command/model overlay) and
|
|
159
|
+
* `extends: "acp"` (build an ACP provider from `command`). Throws
|
|
160
|
+
* `MalformedProviderConfigError` on a bad shape.
|
|
161
|
+
*/
|
|
162
|
+
export function loadProvidersFromConfig(raw, options) {
|
|
163
|
+
const register = options?.register ?? true;
|
|
164
|
+
const providersMap = findProvidersMap(raw);
|
|
165
|
+
const built = [];
|
|
166
|
+
for (const [id, value] of Object.entries(providersMap)) {
|
|
167
|
+
const path = `providers.${id}`;
|
|
168
|
+
if (!isRecord(value))
|
|
169
|
+
throw new MalformedProviderConfigError(`${path} must be an object`, path);
|
|
170
|
+
const entry = value;
|
|
171
|
+
if (entry.enabled === false)
|
|
172
|
+
continue;
|
|
173
|
+
if (typeof entry.extends !== "string" || entry.extends.length === 0) {
|
|
174
|
+
throw new MalformedProviderConfigError(`${path}.extends must be a non-empty string`, path);
|
|
175
|
+
}
|
|
176
|
+
const label = typeof entry.label === "string" ? entry.label : undefined;
|
|
177
|
+
const description = typeof entry.description === "string" ? entry.description : undefined;
|
|
178
|
+
const env = validateEnv(entry.env, path);
|
|
179
|
+
const models = validateModels(entry.models, path);
|
|
180
|
+
const modeId = typeof entry.modeId === "string" ? entry.modeId : undefined;
|
|
181
|
+
let provider;
|
|
182
|
+
if (entry.extends === "acp") {
|
|
183
|
+
if (!acpFactory) {
|
|
184
|
+
throw new MalformedProviderConfigError(`${path}: ACP providers require the ACP module — import it (e.g. \`@agentex/agent\`'s acp provider) before loading ACP configs`, path);
|
|
185
|
+
}
|
|
186
|
+
provider = acpFactory({
|
|
187
|
+
id,
|
|
188
|
+
command: toCommandArray(entry.command, path),
|
|
189
|
+
...(env ? { env } : {}),
|
|
190
|
+
...(label ? { label } : {}),
|
|
191
|
+
...(models ? { models } : {}),
|
|
192
|
+
...(modeId ? { modeId } : {}),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const command = toCommandString(entry.command, path);
|
|
197
|
+
provider = defineDerivedProvider({
|
|
198
|
+
id,
|
|
199
|
+
extends: entry.extends,
|
|
200
|
+
...(label ? { label } : {}),
|
|
201
|
+
...(description ? { description } : {}),
|
|
202
|
+
...(command ? { command } : {}),
|
|
203
|
+
...(env ? { env } : {}),
|
|
204
|
+
...(models ? { models } : {}),
|
|
205
|
+
...(modeId ? { modeId } : {}),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
built.push(provider);
|
|
209
|
+
}
|
|
210
|
+
if (register) {
|
|
211
|
+
// Register only after every entry validates, so a bad entry doesn't leave a
|
|
212
|
+
// half-applied config registered.
|
|
213
|
+
for (const provider of built)
|
|
214
|
+
registerProvider(provider);
|
|
215
|
+
}
|
|
216
|
+
return built;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=derived.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived.js","sourceRoot":"","sources":["../src/derived.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export { getProvider, listProviders, registerProvider } from "./registry.js";
|
|
2
|
+
export { defineDerivedProvider, loadProvidersFromConfig, registerAcpFactory, MalformedProviderConfigError, } from "./derived.js";
|
|
3
|
+
export type { DerivedProviderConfig, AcpFactory } from "./derived.js";
|
|
4
|
+
export { acpProvider } from "./providers/acp/index.js";
|
|
5
|
+
export type { AcpProviderConfig } from "./providers/acp/index.js";
|
|
6
|
+
export type { AcpTransformers } from "./providers/acp/session.js";
|
|
7
|
+
export { runHttpAgent, httpAgentProvider, httpAgentSessionCodec, } from "./providers/_shared/http-agent.js";
|
|
8
|
+
export type { HttpAgentOptions } from "./providers/_shared/http-agent.js";
|
|
2
9
|
export { renderTemplate } from "./utils/template.js";
|
|
3
10
|
export { redactEnvForLogs } from "./utils/env.js";
|
|
4
11
|
export { parseAskUserQuestion } from "./utils/ask-user-question.js";
|
|
@@ -23,7 +30,7 @@ export { getCodexTranscriptPath, readCodexTranscript, peekCodexTranscript, readC
|
|
|
23
30
|
export type { GetCodexTranscriptPathOptions, CodexTranscriptLocation, ReadCodexTranscriptOptions, CodexTranscriptYield, CodexTranscriptLine, CodexPeekResult, } from "./providers/codex/transcript.js";
|
|
24
31
|
export { installSkills, removeSkills, listInstalledSkills, resolveSkillsHome, resolveSkillsWorkspace, resolveNativeSkillsHome, resolveNativeSkillsWorkspace, ensureSkillSymlink, } from "./utils/skills.js";
|
|
25
32
|
export { commandInventoryFromEvent, discoverSkillCommands, reconcileSkillCommands, formatSlashInvocation, invokeSkill, buildExpandedSkillPrompt, } from "./utils/skill-commands.js";
|
|
26
|
-
export type { ProviderModule, ProviderCapabilities, ExecutionContext, ExecutionResult, ExecutionStatus, ProviderConfig, McpServerConfig, StreamEvent, SessionCodec, SessionState, TokenUsage, ModelUsage, RateLimitInfo, BaseStreamEventFields, LifecycleEvent, QuotaStatus, QuotaContext, AuthMethod, AuthSource, AuthOption, AuthReport, AuthResolveContext, AuthIdentity, AuthRequiredReason, BinaryStatus, ProviderModel, SessionContext, AgentSession, TurnResult, UserInputRequest, UserInputResponse, ElicitationRequest, ElicitationResponse, HookCallbackRequest, HookCallbackResponse, TranscriptOps, TranscriptYield, TranscriptPeek, FoundTranscript, } from "./types.js";
|
|
33
|
+
export type { ProviderModule, ProviderCapabilities, AgentMode, ListModesOptions, ExecutionContext, ExecutionResult, ExecutionStatus, ProviderConfig, McpServerConfig, StreamEvent, SessionCodec, SessionState, TokenUsage, ModelUsage, RateLimitInfo, BaseStreamEventFields, LifecycleEvent, QuotaStatus, QuotaContext, AuthMethod, AuthSource, AuthOption, AuthReport, AuthResolveContext, AuthIdentity, AuthRequiredReason, BinaryStatus, ProviderModel, SessionContext, AgentSession, SendHandle, SendOptions, CancelResult, TurnResult, UserInputRequest, UserInputResponse, ElicitationRequest, ElicitationResponse, HookCallbackRequest, HookCallbackResponse, TranscriptOps, TranscriptYield, TranscriptPeek, FoundTranscript, } from "./types.js";
|
|
27
34
|
export type { AskUserQuestion, QuestionOption, } from "./utils/ask-user-question.js";
|
|
28
35
|
export type { ExitPlanModeRequest } from "./utils/exit-plan-mode.js";
|
|
29
36
|
export type { SkillRuntime, SkillLocation, SkillChannel, InstallSkillsOptions, SkillInstallEntry, SkillInstallResult, RemoveSkillsOptions, SkillRemoveEntry, SkillRemoveResult, InstalledSkill, } from "./utils/skills.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// Functions
|
|
2
2
|
export { getProvider, listProviders, registerProvider } from "./registry.js";
|
|
3
|
+
export { defineDerivedProvider, loadProvidersFromConfig, registerAcpFactory, MalformedProviderConfigError, } from "./derived.js";
|
|
4
|
+
export { acpProvider } from "./providers/acp/index.js";
|
|
5
|
+
export { runHttpAgent, httpAgentProvider, httpAgentSessionCodec, } from "./providers/_shared/http-agent.js";
|
|
3
6
|
export { renderTemplate } from "./utils/template.js";
|
|
4
7
|
export { redactEnvForLogs } from "./utils/env.js";
|
|
5
8
|
export { parseAskUserQuestion } from "./utils/ask-user-question.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1F,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAU1C,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAUzC,SAAS;AACT,OAAO,EACL,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,wBAAwB,GACzB,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1F,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAU1C,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AAUzC,SAAS;AACT,OAAO,EACL,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,wBAAwB,GACzB,MAAM,2BAA2B,CAAC"}
|