@yolk-sdk/agent 0.1.0-canary.103 → 0.1.0-canary.105
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 +44 -42
- package/dist/client/state.d.mts +18 -18
- package/dist/client/state.d.mts.map +1 -1
- package/dist/loop/run.d.mts +14 -1
- package/dist/loop/run.d.mts.map +1 -1
- package/dist/loop/run.mjs +38 -1
- package/dist/loop/run.mjs.map +1 -1
- package/dist/protocol/change-preview.d.mts +475 -0
- package/dist/protocol/change-preview.d.mts.map +1 -0
- package/dist/protocol/change-preview.mjs +164 -0
- package/dist/protocol/change-preview.mjs.map +1 -0
- package/dist/protocol/index.d.mts +2 -1
- package/dist/protocol/index.d.mts.map +1 -1
- package/dist/protocol/index.mjs +2 -1
- package/dist/protocol/tool.d.mts +131 -0
- package/dist/protocol/tool.d.mts.map +1 -1
- package/dist/protocol/tool.mjs +11 -1
- package/dist/protocol/tool.mjs.map +1 -1
- package/dist/react/chat-actions.d.mts +26 -26
- package/dist/react/chat-actions.d.mts.map +1 -1
- package/dist/react/chat-items.d.mts +51 -51
- package/dist/react/chat-items.d.mts.map +1 -1
- package/dist/react/chat-messages.d.mts +48 -48
- package/dist/react/chat-messages.d.mts.map +1 -1
- package/dist/runtime/run-runtime.d.mts +3 -2
- package/dist/runtime/run-runtime.d.mts.map +1 -1
- package/dist/runtime/run-runtime.mjs +1 -0
- package/dist/runtime/run-runtime.mjs.map +1 -1
- package/dist/skillset/merge.d.mts +2 -2
- package/dist/skillset/name.d.mts +2 -2
- package/dist/skillset/name.d.mts.map +1 -1
- package/dist/tools/change-preview.d.mts +83 -0
- package/dist/tools/change-preview.d.mts.map +1 -0
- package/dist/tools/change-preview.mjs +374 -0
- package/dist/tools/change-preview.mjs.map +1 -0
- package/dist/tools/index.d.mts +5 -3
- package/dist/tools/index.mjs +4 -2
- package/dist/tools/plan-review.d.mts +4 -3
- package/dist/tools/plan-review.d.mts.map +1 -1
- package/dist/tools/plan-review.mjs +4 -3
- package/dist/tools/plan-review.mjs.map +1 -1
- package/dist/tools/plan-runtime.d.mts +3 -2
- package/dist/tools/plan-runtime.d.mts.map +1 -1
- package/dist/tools/plan-runtime.mjs +23 -25
- package/dist/tools/plan-runtime.mjs.map +1 -1
- package/dist/tools/plan.d.mts +289 -23
- package/dist/tools/plan.d.mts.map +1 -1
- package/dist/tools/plan.mjs +36 -17
- package/dist/tools/plan.mjs.map +1 -1
- package/dist/tools/registry.d.mts +40 -7
- package/dist/tools/registry.d.mts.map +1 -1
- package/dist/tools/registry.mjs +50 -12
- package/dist/tools/registry.mjs.map +1 -1
- package/package.json +2 -2
- package/src/loop/run.ts +94 -1
- package/src/protocol/change-preview.ts +216 -0
- package/src/protocol/index.ts +21 -0
- package/src/protocol/tool.ts +11 -1
- package/src/runtime/run-runtime.ts +4 -0
- package/src/tools/README.md +18 -3
- package/src/tools/change-preview.ts +699 -0
- package/src/tools/index.ts +34 -1
- package/src/tools/plan-review.ts +4 -3
- package/src/tools/plan-runtime.ts +30 -42
- package/src/tools/plan.ts +30 -32
- package/src/tools/registry.ts +139 -22
package/README.md
CHANGED
|
@@ -20,47 +20,47 @@ Published package metadata requires Node.js 22+.
|
|
|
20
20
|
|
|
21
21
|
## Subpaths
|
|
22
22
|
|
|
23
|
-
| Subpath | Purpose
|
|
24
|
-
| -------------------------------------------------------- |
|
|
25
|
-
| `@yolk-sdk/agent/protocol` | Wire messages, events, content, usage, tool schemas
|
|
26
|
-
| `@yolk-sdk/agent/loop` | Stateless LLM/tool loop
|
|
27
|
-
| `@yolk-sdk/agent/loop/testing` | Faux provider and tool executor test helpers
|
|
28
|
-
| `@yolk-sdk/agent/runtime` | Transcript or append-backed runtime orchestration
|
|
29
|
-
| `@yolk-sdk/agent/client` | HTTP/NDJSON transport, HITL resume, retry/error state helpers
|
|
30
|
-
| `@yolk-sdk/agent/compaction` | Host-owned compaction budgets, checkpoints, formatting, retry
|
|
31
|
-
| `@yolk-sdk/agent/classification` | Classifier model contract: typed questions, answers, usage, errors
|
|
32
|
-
| `@yolk-sdk/agent/tools` | Tool registry, typed inputs, interactions, subagents/questions, durable tool ledger, staged tool plans |
|
|
33
|
-
| `@yolk-sdk/agent/react` | Headless React chat hook, reducer, selectors, and render model
|
|
34
|
-
| `@yolk-sdk/agent/oauth` | Provider-neutral OAuth token and broker contracts
|
|
35
|
-
| `@yolk-sdk/agent/providers/openai` | OpenAI/Codex OAuth and broker helpers
|
|
36
|
-
| `@yolk-sdk/agent/providers/openai/codex` | OpenAI Codex request and auth helpers
|
|
37
|
-
| `@yolk-sdk/agent/providers/openai/codex-usage` | Codex subscription-allowance snapshots
|
|
38
|
-
| `@yolk-sdk/agent/providers/openai/codex-provider` | Codex LLM provider factory
|
|
39
|
-
| `@yolk-sdk/agent/providers/openai/provider` | OpenAI-compatible LLM provider factory
|
|
40
|
-
| `@yolk-sdk/agent/providers/openai/conformance` | Synthetic OpenAI chat, Codex Responses, and Codex usage fixtures and conformance cases
|
|
41
|
-
| `@yolk-sdk/agent/providers/openai/realtime` | OpenAI Realtime session config and event codecs
|
|
42
|
-
| `@yolk-sdk/agent/providers/openai/speech` | OpenAI text-to-speech and transcription adapters
|
|
43
|
-
| `@yolk-sdk/agent/providers/vercel/ai-gateway-provider` | Vercel AI Gateway Chat Completions provider factory
|
|
44
|
-
| `@yolk-sdk/agent/providers/vercel/ai-gateway-classifier` | Vercel AI Gateway classifier (`POST /v1/evaluate`) layer
|
|
45
|
-
| `@yolk-sdk/agent/providers/vercel/conformance` | Verified Gateway chat fixtures, synthetic classifier fixtures, and conformance cases
|
|
46
|
-
| `@yolk-sdk/agent/providers/opencode/go-provider` | OpenCode Go Chat Completions, Messages, and Responses provider
|
|
47
|
-
| `@yolk-sdk/agent/providers/opencode/usage` | OpenCode Go subscription-allowance snapshots
|
|
48
|
-
| `@yolk-sdk/agent/providers/opencode/conformance` | Synthetic OpenCode Go (per protocol, commentary replay, usage) fixtures and conformance cases
|
|
49
|
-
| `@yolk-sdk/agent/providers/anthropic` | Anthropic/Claude OAuth and broker helpers
|
|
50
|
-
| `@yolk-sdk/agent/providers/anthropic/claude` | Claude request and auth helpers
|
|
51
|
-
| `@yolk-sdk/agent/providers/anthropic/usage` | Claude subscription-allowance snapshots
|
|
52
|
-
| `@yolk-sdk/agent/providers/anthropic/claude-provider` | Claude LLM provider factory
|
|
53
|
-
| `@yolk-sdk/agent/providers/anthropic/conformance` | Synthetic Anthropic Messages and Claude usage fixtures and conformance cases
|
|
54
|
-
| `@yolk-sdk/agent/providers/xai` | Grok subscription OAuth and token broker helpers
|
|
55
|
-
| `@yolk-sdk/agent/providers/xai/grok` | Grok subscription request and auth helpers
|
|
56
|
-
| `@yolk-sdk/agent/providers/xai/grok-provider` | Grok subscription LLM provider factory
|
|
57
|
-
| `@yolk-sdk/agent/providers/xai/usage` | Grok subscription-allowance snapshots
|
|
58
|
-
| `@yolk-sdk/agent/providers/xai/conformance` | Synthetic Grok Responses and Grok usage fixtures and conformance cases
|
|
59
|
-
| `@yolk-sdk/agent/providers/subscription-usage` | Shared allowance snapshot and safe error schemas
|
|
60
|
-
| `@yolk-sdk/agent/skillset` | Portable skill and slash-command parsing/catalogs
|
|
61
|
-
| `@yolk-sdk/agent/voice` | Voice protocol, controller, tool handler, projection, speech
|
|
62
|
-
| `@yolk-sdk/agent/voice/browser` | Browser WebRTC voice transport
|
|
63
|
-
| `@yolk-sdk/agent/voice/react` | Headless browser voice React hook
|
|
23
|
+
| Subpath | Purpose |
|
|
24
|
+
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
25
|
+
| `@yolk-sdk/agent/protocol` | Wire messages, events, content, usage, tool schemas |
|
|
26
|
+
| `@yolk-sdk/agent/loop` | Stateless LLM/tool loop |
|
|
27
|
+
| `@yolk-sdk/agent/loop/testing` | Faux provider and tool executor test helpers |
|
|
28
|
+
| `@yolk-sdk/agent/runtime` | Transcript or append-backed runtime orchestration |
|
|
29
|
+
| `@yolk-sdk/agent/client` | HTTP/NDJSON transport, HITL resume, retry/error state helpers |
|
|
30
|
+
| `@yolk-sdk/agent/compaction` | Host-owned compaction budgets, checkpoints, formatting, retry |
|
|
31
|
+
| `@yolk-sdk/agent/classification` | Classifier model contract: typed questions, answers, usage, errors |
|
|
32
|
+
| `@yolk-sdk/agent/tools` | Tool registry, typed inputs, interactions, subagents/questions, durable tool ledger, staged tool plans, tool change previews |
|
|
33
|
+
| `@yolk-sdk/agent/react` | Headless React chat hook, reducer, selectors, and render model |
|
|
34
|
+
| `@yolk-sdk/agent/oauth` | Provider-neutral OAuth token and broker contracts |
|
|
35
|
+
| `@yolk-sdk/agent/providers/openai` | OpenAI/Codex OAuth and broker helpers |
|
|
36
|
+
| `@yolk-sdk/agent/providers/openai/codex` | OpenAI Codex request and auth helpers |
|
|
37
|
+
| `@yolk-sdk/agent/providers/openai/codex-usage` | Codex subscription-allowance snapshots |
|
|
38
|
+
| `@yolk-sdk/agent/providers/openai/codex-provider` | Codex LLM provider factory |
|
|
39
|
+
| `@yolk-sdk/agent/providers/openai/provider` | OpenAI-compatible LLM provider factory |
|
|
40
|
+
| `@yolk-sdk/agent/providers/openai/conformance` | Synthetic OpenAI chat, Codex Responses, and Codex usage fixtures and conformance cases |
|
|
41
|
+
| `@yolk-sdk/agent/providers/openai/realtime` | OpenAI Realtime session config and event codecs |
|
|
42
|
+
| `@yolk-sdk/agent/providers/openai/speech` | OpenAI text-to-speech and transcription adapters |
|
|
43
|
+
| `@yolk-sdk/agent/providers/vercel/ai-gateway-provider` | Vercel AI Gateway Chat Completions provider factory |
|
|
44
|
+
| `@yolk-sdk/agent/providers/vercel/ai-gateway-classifier` | Vercel AI Gateway classifier (`POST /v1/evaluate`) layer |
|
|
45
|
+
| `@yolk-sdk/agent/providers/vercel/conformance` | Verified Gateway chat fixtures, synthetic classifier fixtures, and conformance cases |
|
|
46
|
+
| `@yolk-sdk/agent/providers/opencode/go-provider` | OpenCode Go Chat Completions, Messages, and Responses provider |
|
|
47
|
+
| `@yolk-sdk/agent/providers/opencode/usage` | OpenCode Go subscription-allowance snapshots |
|
|
48
|
+
| `@yolk-sdk/agent/providers/opencode/conformance` | Synthetic OpenCode Go (per protocol, commentary replay, usage) fixtures and conformance cases |
|
|
49
|
+
| `@yolk-sdk/agent/providers/anthropic` | Anthropic/Claude OAuth and broker helpers |
|
|
50
|
+
| `@yolk-sdk/agent/providers/anthropic/claude` | Claude request and auth helpers |
|
|
51
|
+
| `@yolk-sdk/agent/providers/anthropic/usage` | Claude subscription-allowance snapshots |
|
|
52
|
+
| `@yolk-sdk/agent/providers/anthropic/claude-provider` | Claude LLM provider factory |
|
|
53
|
+
| `@yolk-sdk/agent/providers/anthropic/conformance` | Synthetic Anthropic Messages and Claude usage fixtures and conformance cases |
|
|
54
|
+
| `@yolk-sdk/agent/providers/xai` | Grok subscription OAuth and token broker helpers |
|
|
55
|
+
| `@yolk-sdk/agent/providers/xai/grok` | Grok subscription request and auth helpers |
|
|
56
|
+
| `@yolk-sdk/agent/providers/xai/grok-provider` | Grok subscription LLM provider factory |
|
|
57
|
+
| `@yolk-sdk/agent/providers/xai/usage` | Grok subscription-allowance snapshots |
|
|
58
|
+
| `@yolk-sdk/agent/providers/xai/conformance` | Synthetic Grok Responses and Grok usage fixtures and conformance cases |
|
|
59
|
+
| `@yolk-sdk/agent/providers/subscription-usage` | Shared allowance snapshot and safe error schemas |
|
|
60
|
+
| `@yolk-sdk/agent/skillset` | Portable skill and slash-command parsing/catalogs |
|
|
61
|
+
| `@yolk-sdk/agent/voice` | Voice protocol, controller, tool handler, projection, speech |
|
|
62
|
+
| `@yolk-sdk/agent/voice/browser` | Browser WebRTC voice transport |
|
|
63
|
+
| `@yolk-sdk/agent/voice/react` | Headless browser voice React hook |
|
|
64
64
|
|
|
65
65
|
## Imports
|
|
66
66
|
|
|
@@ -680,6 +680,7 @@ HITL is protocol-level, not UI-level:
|
|
|
680
680
|
`submitToolApprovalResponse` / `submitQuestionResponse`, or using client stream helpers like
|
|
681
681
|
`streamToolApprovalResponseEventStream`.
|
|
682
682
|
- Denials become model-visible `ToolResult` messages with `isError = true`.
|
|
683
|
+
- Give approval-gated tools a `changePreview` hook (`makeTool({ approval, changePreview })`) and pass `resolveTools(...).approvalPreviews` as `approvalPreviews` to loop/runtime configs: pending `ToolApprovalRequest`s then carry a tool-agnostic before → after `preview` (`ToolChangePreview`) or `previewError`. Previews are display only and never block the approval. See [ADR 0006](https://github.com/magoz/yolk-sdk/blob/main/docs/adr/0006-tool-change-previews.md).
|
|
683
684
|
- Use `makeQuestionToolModule` to expose the package-owned `question` tool; answers resume as structured tool results and model-visible text with selected labels. The loop intercepts questions only when the tool is enabled in `tools`; omitted questions return an unavailable result without HITL or executor dispatch, even if a provider emits one.
|
|
684
685
|
- Use `makeInputTool({ name, description, response, renderer })` for custom typed input. Apps own the response Effect schema and renderer; the SDK carries JSON data only. Pass `resolveTools(...).inputs` alongside `tools` to loop/runtime configs. The original `callParameters` and `response` schemas validate server-side, including refinements; display JSON Schema is not the validator. Invalid calls fail before prompting; invalid submissions remain pending for correction. The first valid submission or cancellation settles the request and cannot be overwritten by stale responses.
|
|
685
686
|
- Resume custom inputs with `submitInputResponse`, `streamInputResponseEventStream`, or WebSocket `InputResponseInput`. Echo request/call IDs; do not reconstruct them. Input collection is not authorization: a draft composer never grants permission to send. Input tools cannot carry approval/background policy or execute directly.
|
|
@@ -969,7 +970,8 @@ normal execute path and ledger. Enable it with
|
|
|
969
970
|
`resolveTools(modules, context, { interactionHost, plans: { store, planId? } })` and one review tool.
|
|
970
971
|
Applied calls bypass `beforeNestedCall` and `ToolExecutor` decorators: wire your per-call authorizer
|
|
971
972
|
as `makePlanReviewTool({ beforeCall })`. With a ledger, a redelivered review waits for an in-flight
|
|
972
|
-
apply and returns its real outcome. `previewStoredToolPlan` pages
|
|
973
|
+
apply and returns its real outcome. `previewStoredToolPlan` pages each staged call's arguments
|
|
974
|
+
with the tool's change preview (the same `changePreview` hook approvals use) for review screens;
|
|
973
975
|
`ToolPlanOutcome` and `ToolPlanPreviewPage` are Effect Schemas. See
|
|
974
976
|
[ADR 0005](https://github.com/magoz/yolk-sdk/blob/main/docs/adr/0005-staged-tool-plans.md).
|
|
975
977
|
|
package/dist/client/state.d.mts
CHANGED
|
@@ -80,11 +80,6 @@ type AgentToolRun = {
|
|
|
80
80
|
readonly result: ToolResult;
|
|
81
81
|
};
|
|
82
82
|
declare const AgentToolRun: {
|
|
83
|
-
readonly Denied: Data.TaggedEnum.ConstructorFrom<{
|
|
84
|
-
readonly _tag: "Denied";
|
|
85
|
-
readonly toolCallId: string;
|
|
86
|
-
readonly reason: string;
|
|
87
|
-
}, "_tag">;
|
|
88
83
|
readonly QuestionRequested: Data.TaggedEnum.ConstructorFrom<{
|
|
89
84
|
readonly _tag: "QuestionRequested";
|
|
90
85
|
readonly request: QuestionRequest;
|
|
@@ -142,6 +137,11 @@ declare const AgentToolRun: {
|
|
|
142
137
|
readonly call: ToolCall;
|
|
143
138
|
readonly request?: ToolApprovalRequest;
|
|
144
139
|
}, "_tag">;
|
|
140
|
+
readonly Denied: Data.TaggedEnum.ConstructorFrom<{
|
|
141
|
+
readonly _tag: "Denied";
|
|
142
|
+
readonly toolCallId: string;
|
|
143
|
+
readonly reason: string;
|
|
144
|
+
}, "_tag">;
|
|
145
145
|
readonly Executing: Data.TaggedEnum.ConstructorFrom<{
|
|
146
146
|
readonly _tag: "Executing";
|
|
147
147
|
readonly call: ToolCall;
|
|
@@ -173,7 +173,7 @@ declare const AgentToolRun: {
|
|
|
173
173
|
readonly call: ToolCall;
|
|
174
174
|
readonly result: ToolResult;
|
|
175
175
|
}, "_tag">;
|
|
176
|
-
readonly $is: <Tag extends "
|
|
176
|
+
readonly $is: <Tag extends "QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
177
177
|
readonly _tag: "InputStreaming";
|
|
178
178
|
readonly id: string;
|
|
179
179
|
readonly name?: string;
|
|
@@ -287,11 +287,6 @@ declare const AgentToolRun: {
|
|
|
287
287
|
}>;
|
|
288
288
|
readonly $match: {
|
|
289
289
|
<Cases extends {
|
|
290
|
-
readonly Denied: (args: {
|
|
291
|
-
readonly _tag: "Denied";
|
|
292
|
-
readonly toolCallId: string;
|
|
293
|
-
readonly reason: string;
|
|
294
|
-
}) => any;
|
|
295
290
|
readonly QuestionRequested: (args: {
|
|
296
291
|
readonly _tag: "QuestionRequested";
|
|
297
292
|
readonly request: QuestionRequest;
|
|
@@ -349,6 +344,11 @@ declare const AgentToolRun: {
|
|
|
349
344
|
readonly call: ToolCall;
|
|
350
345
|
readonly request?: ToolApprovalRequest;
|
|
351
346
|
}) => any;
|
|
347
|
+
readonly Denied: (args: {
|
|
348
|
+
readonly _tag: "Denied";
|
|
349
|
+
readonly toolCallId: string;
|
|
350
|
+
readonly reason: string;
|
|
351
|
+
}) => any;
|
|
352
352
|
readonly Executing: (args: {
|
|
353
353
|
readonly _tag: "Executing";
|
|
354
354
|
readonly call: ToolCall;
|
|
@@ -380,13 +380,8 @@ declare const AgentToolRun: {
|
|
|
380
380
|
readonly call: ToolCall;
|
|
381
381
|
readonly result: ToolResult;
|
|
382
382
|
}) => any;
|
|
383
|
-
}>(cases: Cases): (value: AgentToolRun) => import("effect/Unify").Unify<ReturnType<Cases["
|
|
383
|
+
}>(cases: Cases): (value: AgentToolRun) => import("effect/Unify").Unify<ReturnType<Cases["QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted"]>>;
|
|
384
384
|
<Cases extends {
|
|
385
|
-
readonly Denied: (args: {
|
|
386
|
-
readonly _tag: "Denied";
|
|
387
|
-
readonly toolCallId: string;
|
|
388
|
-
readonly reason: string;
|
|
389
|
-
}) => any;
|
|
390
385
|
readonly QuestionRequested: (args: {
|
|
391
386
|
readonly _tag: "QuestionRequested";
|
|
392
387
|
readonly request: QuestionRequest;
|
|
@@ -444,6 +439,11 @@ declare const AgentToolRun: {
|
|
|
444
439
|
readonly call: ToolCall;
|
|
445
440
|
readonly request?: ToolApprovalRequest;
|
|
446
441
|
}) => any;
|
|
442
|
+
readonly Denied: (args: {
|
|
443
|
+
readonly _tag: "Denied";
|
|
444
|
+
readonly toolCallId: string;
|
|
445
|
+
readonly reason: string;
|
|
446
|
+
}) => any;
|
|
447
447
|
readonly Executing: (args: {
|
|
448
448
|
readonly _tag: "Executing";
|
|
449
449
|
readonly call: ToolCall;
|
|
@@ -475,7 +475,7 @@ declare const AgentToolRun: {
|
|
|
475
475
|
readonly call: ToolCall;
|
|
476
476
|
readonly result: ToolResult;
|
|
477
477
|
}) => any;
|
|
478
|
-
}>(value: AgentToolRun, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["
|
|
478
|
+
}>(value: AgentToolRun, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["QuestionRequested" | "QuestionAnswered" | "QuestionCancelled" | "InputRequested" | "InputSubmitted" | "InputCancelled" | "InteractionRequested" | "InteractionSubmitted" | "InteractionCancelled" | "InputStreaming" | "InputReady" | "ApprovalRequested" | "Denied" | "Executing" | "Completed" | "Accepted" | "Errored" | "ProviderCompleted"]>>;
|
|
479
479
|
};
|
|
480
480
|
};
|
|
481
481
|
type AgentClientState = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.mts","names":[],"sources":["../../src/client/state.ts"],"mappings":";;;;KAoBY,cAAA;AAAA,KAEA,YAAA;EAAA,SAEG,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SAA6B,IAAA,EAAM,QAAA;AAAA;EAAA,SAEnC,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,OAAA,GAAU,mBAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAyB,UAAA;EAAA,SAA6B,MAAA;AAAA;EAAA,SACtD,IAAA;EAAA,SAAoC,OAAA,EAAS,eAAA;AAAA;EAAA,SAE7C,IAAA;EAAA,SACA,QAAA,EAAU,gBAAA;EAAA,SACV,OAAA,GAAU,eAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,gBAAA;EAAA,SACV,OAAA,GAAU,eAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAiC,OAAA,EAAS,YAAA;AAAA;EAAA,SAE1C,IAAA;EAAA,SACA,QAAA,EAAU,aAAA;EAAA,SACV,OAAA,GAAU,YAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,aAAA;EAAA,SACV,OAAA,GAAU,YAAA;AAAA;EAAA,SAEV,IAAA;EAAA,SAAuC,OAAA,EAAS,kBAAA;AAAA;EAAA,SAEhD,IAAA;EAAA,SACA,QAAA,EAAU,mBAAA;EAAA,SACV,OAAA,GAAU,kBAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,QAAA,EAAU,mBAAA;EAAA,SACV,OAAA,GAAU,kBAAA;AAAA;EAAA,SAGV,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,WAAA,UApCoC;EAAA,SAsCpC,WAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,MAAA,EAAQ,UAAA;EAAA,SACR,WAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,MAAA,EAAQ,UAAA;EAAA,SACR,WAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAGA,IAAA;EAAA,SACA,IAAA,EAAM,QAAA;EAAA,SACN,OAAA;EAAA,SACA,SAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SAAoC,IAAA,EAAM,QAAA;EAAA,SAAmB,MAAA,EAAQ,UAAA;AAAA;AAAA,cAEvE,YAAA;EAAA
|
|
1
|
+
{"version":3,"file":"state.d.mts","names":[],"sources":["../../src/client/state.ts"],"mappings":"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"}
|
package/dist/loop/run.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { LLMProvider } from "./services/llm-provider.mjs";
|
|
|
4
4
|
import { LoopConfig } from "./services/loop-config.mjs";
|
|
5
5
|
import { ToolExecutor } from "./services/tool-executor.mjs";
|
|
6
6
|
import { Effect, Stream } from "effect";
|
|
7
|
-
import { AgentEvent, AgentMessage, AgentModelCapabilities, AgentReasoningEffort, AgentUsage, HitlRequest, HitlResponse, InputToolHandler, InteractionHost, InteractionPreflight, InteractionReceipt, InteractionRef, ToolCall, ToolDef } from "@yolk-sdk/agent/protocol";
|
|
7
|
+
import { AgentEvent, AgentMessage, AgentModelCapabilities, AgentReasoningEffort, AgentUsage, HitlRequest, HitlResponse, InputToolHandler, InteractionHost, InteractionPreflight, InteractionReceipt, InteractionRef, ToolApprovalPreviewer, ToolCall, ToolDef } from "@yolk-sdk/agent/protocol";
|
|
8
8
|
|
|
9
9
|
//#region src/loop/run.d.ts
|
|
10
10
|
type AgentLoopRunId = string;
|
|
@@ -19,6 +19,10 @@ type RunConfig = {
|
|
|
19
19
|
*/
|
|
20
20
|
readonly interactions?: Readonly<Record<string, InteractionPreflight>>;
|
|
21
21
|
readonly interactionHost?: InteractionHost;
|
|
22
|
+
/** Change previewers of approval-gated tools by tool name (from
|
|
23
|
+
* ResolvedToolSet.approvalPreviews): pending approval requests carry their preview.
|
|
24
|
+
*/
|
|
25
|
+
readonly approvalPreviews?: Readonly<Record<string, ToolApprovalPreviewer>>;
|
|
22
26
|
readonly model: string;
|
|
23
27
|
readonly reasoningEffort?: AgentReasoningEffort;
|
|
24
28
|
readonly capabilities?: AgentModelCapabilities;
|
|
@@ -33,6 +37,10 @@ type ToolBatchConfig = {
|
|
|
33
37
|
readonly inputs?: Readonly<Record<string, InputToolHandler>>; /** Server-side interaction preflight by tool name (from ResolvedToolSet.interactions). */
|
|
34
38
|
readonly interactions?: Readonly<Record<string, InteractionPreflight>>;
|
|
35
39
|
readonly interactionHost?: InteractionHost;
|
|
40
|
+
/** Change previewers of approval-gated tools by tool name (from
|
|
41
|
+
* ResolvedToolSet.approvalPreviews).
|
|
42
|
+
*/
|
|
43
|
+
readonly approvalPreviews?: Readonly<Record<string, ToolApprovalPreviewer>>;
|
|
36
44
|
readonly model?: string;
|
|
37
45
|
readonly createdMessages?: ReadonlyArray<AgentMessage>;
|
|
38
46
|
readonly turn?: number;
|
|
@@ -74,6 +82,11 @@ declare const prepareToolBatch: (input: {
|
|
|
74
82
|
readonly inputs?: Readonly<Record<string, InputToolHandler>>;
|
|
75
83
|
readonly interactions?: Readonly<Record<string, InteractionPreflight>>;
|
|
76
84
|
readonly interactionReceipts?: ReadonlyMap<string, InteractionReceipt>;
|
|
85
|
+
/** Change previewers by tool name (from ResolvedToolSet.approvalPreviews). Pending approval
|
|
86
|
+
* requests of these tools carry `preview` (or `previewError`); computed only while the request
|
|
87
|
+
* is pending, at most 8 at a time.
|
|
88
|
+
*/
|
|
89
|
+
readonly approvalPreviews?: Readonly<Record<string, ToolApprovalPreviewer>>;
|
|
77
90
|
}) => Effect.Effect<PreparedToolBatch, ToolError>;
|
|
78
91
|
declare const runModelTurn: (config: ModelTurnConfig) => Stream.Stream<AgentEvent, AgentLoopError, ContextTransformer | LLMProvider | LoopConfig>;
|
|
79
92
|
declare const runToolBatch: (config: ToolBatchConfig) => Stream.Stream<AgentEvent, AgentLoopError, LoopConfig | ToolExecutor>;
|
package/dist/loop/run.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.mts","names":[],"sources":["../../src/loop/run.ts"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"run.d.mts","names":[],"sources":["../../src/loop/run.ts"],"mappings":"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"}
|
package/dist/loop/run.mjs
CHANGED
|
@@ -4,6 +4,8 @@ import { ContextTransformer } from "./services/context-transformer.mjs";
|
|
|
4
4
|
import { LLMProvider } from "./services/llm-provider.mjs";
|
|
5
5
|
import { LoopConfig } from "./services/loop-config.mjs";
|
|
6
6
|
import { ToolExecutor, unavailableToolExecutor } from "./services/tool-executor.mjs";
|
|
7
|
+
import "../protocol/change-preview.mjs";
|
|
8
|
+
import { truncateCodePoints } from "../protocol/bounded-text.mjs";
|
|
7
9
|
import { validInteractionReceipt as validInteractionReceipt$1 } from "../protocol/tool.mjs";
|
|
8
10
|
import { withToolArgumentsErrorHint } from "../protocol/tool-argument-hints.mjs";
|
|
9
11
|
import { Clock, Data, Effect, Match, Option, Predicate, Ref, Stream } from "effect";
|
|
@@ -298,6 +300,36 @@ const prepareApprovalCall = (tools, call, index, responses) => {
|
|
|
298
300
|
events: [hitlResponseEvent(response)]
|
|
299
301
|
});
|
|
300
302
|
};
|
|
303
|
+
/** Most approval change previews one batch computes at once. */
|
|
304
|
+
const approvalPreviewConcurrency = 8;
|
|
305
|
+
const withApprovalPreview = (previewers, item) => {
|
|
306
|
+
if (!Predicate.isTagged(item, "Pending") || !Predicate.isTagged(item.request, "ToolApprovalRequest")) return Effect.succeed(item);
|
|
307
|
+
const request = item.request;
|
|
308
|
+
const previewer = Object.hasOwn(previewers, request.call.name) ? previewers[request.call.name] : void 0;
|
|
309
|
+
if (previewer === void 0) return Effect.succeed(item);
|
|
310
|
+
return Effect.suspend(() => previewer(request.call)).pipe(Effect.map((preview) => ({ preview })), Effect.catch((error) => Effect.succeed({ previewError: {
|
|
311
|
+
cause: error.cause,
|
|
312
|
+
message: truncateCodePoints(error.message, 500)
|
|
313
|
+
} })), Effect.tapDefect((defect) => Effect.logWarning(`The change preview of ${request.call.name} failed`, defect)), Effect.catchDefect(() => Effect.succeed({ previewError: {
|
|
314
|
+
cause: "failed",
|
|
315
|
+
message: "The change preview failed."
|
|
316
|
+
} })), Effect.map((display) => {
|
|
317
|
+
const previewed = ToolApprovalRequest.make({
|
|
318
|
+
requestId: request.requestId,
|
|
319
|
+
toolCallId: request.toolCallId,
|
|
320
|
+
call: request.call,
|
|
321
|
+
policy: request.policy,
|
|
322
|
+
...display
|
|
323
|
+
});
|
|
324
|
+
return PreparedToolCall.Pending({
|
|
325
|
+
request: previewed,
|
|
326
|
+
events: [ToolApprovalRequested.make({
|
|
327
|
+
call: previewed.call,
|
|
328
|
+
request: previewed
|
|
329
|
+
})]
|
|
330
|
+
});
|
|
331
|
+
}));
|
|
332
|
+
};
|
|
301
333
|
const inputResponseFor = (responses, call, handler) => Effect.gen(function* () {
|
|
302
334
|
for (const response of responses) {
|
|
303
335
|
if (!Predicate.isTagged(response, "InputResponse") || response.toolCallId !== call.id || response.requestId !== inputRequestId(call)) continue;
|
|
@@ -509,7 +541,8 @@ const prepareModelToolCall = (input) => !input.receipts.has(input.call.id) && to
|
|
|
509
541
|
const prepareToolBatch = (input) => Effect.gen(function* () {
|
|
510
542
|
const handlers = input.inputs ?? {};
|
|
511
543
|
const preflights = input.interactions ?? {};
|
|
512
|
-
const
|
|
544
|
+
const previewers = input.approvalPreviews ?? {};
|
|
545
|
+
const planned = yield* Effect.forEach(input.calls, (call, index) => prepareToolCall({
|
|
513
546
|
tools: input.tools,
|
|
514
547
|
responses: input.responses,
|
|
515
548
|
handlers,
|
|
@@ -518,6 +551,7 @@ const prepareToolBatch = (input) => Effect.gen(function* () {
|
|
|
518
551
|
call,
|
|
519
552
|
index
|
|
520
553
|
}));
|
|
554
|
+
const prepared = Object.keys(previewers).length === 0 ? planned : yield* Effect.forEach(planned, (item) => withApprovalPreview(previewers, item), { concurrency: approvalPreviewConcurrency });
|
|
521
555
|
return {
|
|
522
556
|
callsToExecute: prepared.flatMap((item) => Predicate.isTagged(item, "Execute") ? [{
|
|
523
557
|
index: item.index,
|
|
@@ -622,6 +656,7 @@ const makeAfterLlmStream = (input, llmEventsRef) => Stream.unwrap(Effect.gen(fun
|
|
|
622
656
|
calls: completion.toolCalls,
|
|
623
657
|
inputs: input.config.inputs,
|
|
624
658
|
interactions: input.config.interactions,
|
|
659
|
+
approvalPreviews: input.config.approvalPreviews,
|
|
625
660
|
interactionReceipts: yield* loadInteractionReceipts(completion.toolCalls, input.config.interactionHost)
|
|
626
661
|
});
|
|
627
662
|
if (prepared.resultMessages.length > 0) yield* Ref.update(toolResultMessages, (results) => [...results, ...prepared.resultMessages]);
|
|
@@ -738,6 +773,7 @@ const makePendingToolResumeStream = (input) => Stream.unwrap(Effect.gen(function
|
|
|
738
773
|
calls: pendingCalls,
|
|
739
774
|
inputs: input.config.inputs,
|
|
740
775
|
interactions: input.config.interactions,
|
|
776
|
+
approvalPreviews: input.config.approvalPreviews,
|
|
741
777
|
interactionReceipts: yield* loadInteractionReceipts(pendingCalls, input.config.interactionHost)
|
|
742
778
|
});
|
|
743
779
|
if (prepared.resultMessages.length > 0) yield* Ref.update(toolResultMessages, (results) => [...results, ...prepared.resultMessages]);
|
|
@@ -815,6 +851,7 @@ const runToolBatch = (config) => Stream.unwrap(Effect.gen(function* () {
|
|
|
815
851
|
calls: config.calls,
|
|
816
852
|
inputs: config.inputs,
|
|
817
853
|
interactions: config.interactions,
|
|
854
|
+
approvalPreviews: config.approvalPreviews,
|
|
818
855
|
interactionReceipts: yield* loadInteractionReceipts(config.calls, config.interactionHost)
|
|
819
856
|
});
|
|
820
857
|
const hasPendingRequests = prepared.pendingRequests.length > 0;
|