@lucascouts/claude-agent-tui 0.5.2 → 0.7.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/NOTICE +1 -1
- package/README.md +1 -1
- package/dist/acp-agent.d.ts +249 -21
- package/dist/acp-agent.js +573 -73
- package/dist/agent-catalog.d.ts +95 -0
- package/dist/agent-catalog.js +287 -0
- package/dist/ansi-mirror.d.ts +0 -1
- package/dist/besteffort.d.ts +0 -1
- package/dist/billing/entrypoint-guard.d.ts +0 -1
- package/dist/claude-path.d.ts +0 -1
- package/dist/claude-path.js +6 -0
- package/dist/command-catalog.d.ts +84 -0
- package/dist/command-catalog.js +339 -0
- package/dist/diff-enriched-reader.d.ts +0 -1
- package/dist/diff-source.d.ts +0 -1
- package/dist/drift-checks.d.ts +0 -1
- package/dist/end-of-turn.d.ts +6 -1
- package/dist/end-of-turn.js +8 -1
- package/dist/engine-lifecycle.d.ts +66 -2
- package/dist/engine-lifecycle.js +43 -4
- package/dist/engine-pty.d.ts +70 -3
- package/dist/engine-pty.js +80 -6
- package/dist/engine-watcher.d.ts +0 -1
- package/dist/engine.d.ts +0 -1
- package/dist/event-switch.d.ts +0 -1
- package/dist/gate/port.d.ts +0 -1
- package/dist/gate/settings-writer.d.ts +14 -1
- package/dist/gate/settings-writer.js +49 -0
- package/dist/image-input.d.ts +30 -0
- package/dist/image-input.js +79 -0
- package/dist/image-vision-smoke.d.ts +51 -0
- package/dist/image-vision-smoke.js +111 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +6 -0
- package/dist/jsonl.d.ts +0 -1
- package/dist/lib.d.ts +0 -1
- package/dist/linearize.d.ts +1 -2
- package/dist/linearize.js +1 -1
- package/dist/live-diff-env.d.ts +0 -1
- package/dist/live-subagent-env.d.ts +0 -1
- package/dist/mcp-config-writer.d.ts +60 -0
- package/dist/mcp-config-writer.js +172 -0
- package/dist/model-catalog.d.ts +68 -3
- package/dist/model-catalog.js +123 -13
- package/dist/permissions/allow-inject.d.ts +0 -1
- package/dist/permissions/deny.d.ts +12 -1
- package/dist/permissions/deny.js +18 -0
- package/dist/permissions/elicitation-bridge.d.ts +71 -0
- package/dist/permissions/elicitation-bridge.js +146 -0
- package/dist/permissions/gate-wiring.d.ts +23 -3
- package/dist/permissions/gate-wiring.js +123 -1
- package/dist/permissions/hook-server.d.ts +11 -3
- package/dist/permissions/hook-server.js +10 -1
- package/dist/permissions/permission-mode.d.ts +0 -1
- package/dist/permissions/request-permission.d.ts +0 -1
- package/dist/settings.d.ts +0 -1
- package/dist/settings.js +9 -0
- package/dist/stop-reason-map.d.ts +0 -1
- package/dist/subagent-gate.d.ts +0 -1
- package/dist/subagent-source.d.ts +0 -1
- package/dist/subagent-watcher.d.ts +0 -1
- package/dist/tools.d.ts +0 -1
- package/dist/tools.js +5 -1
- package/dist/usage-env.d.ts +0 -1
- package/dist/usage.d.ts +3 -1
- package/dist/usage.js +3 -0
- package/dist/utils.d.ts +0 -1
- package/dist/zed-register.d.ts +0 -1
- package/package.json +12 -9
- package/dist/acp-agent.d.ts.map +0 -1
- package/dist/ansi-mirror.d.ts.map +0 -1
- package/dist/besteffort.d.ts.map +0 -1
- package/dist/billing/entrypoint-guard.d.ts.map +0 -1
- package/dist/claude-path.d.ts.map +0 -1
- package/dist/diff-enriched-reader.d.ts.map +0 -1
- package/dist/diff-source.d.ts.map +0 -1
- package/dist/drift-checks.d.ts.map +0 -1
- package/dist/end-of-turn.d.ts.map +0 -1
- package/dist/engine-lifecycle.d.ts.map +0 -1
- package/dist/engine-pty.d.ts.map +0 -1
- package/dist/engine-watcher.d.ts.map +0 -1
- package/dist/engine.d.ts.map +0 -1
- package/dist/event-switch.d.ts.map +0 -1
- package/dist/gate/port.d.ts.map +0 -1
- package/dist/gate/settings-writer.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsonl.d.ts.map +0 -1
- package/dist/lib.d.ts.map +0 -1
- package/dist/linearize.d.ts.map +0 -1
- package/dist/live-diff-env.d.ts.map +0 -1
- package/dist/live-subagent-env.d.ts.map +0 -1
- package/dist/model-catalog.d.ts.map +0 -1
- package/dist/permissions/allow-inject.d.ts.map +0 -1
- package/dist/permissions/deny.d.ts.map +0 -1
- package/dist/permissions/gate-wiring.d.ts.map +0 -1
- package/dist/permissions/hook-server.d.ts.map +0 -1
- package/dist/permissions/permission-mode.d.ts.map +0 -1
- package/dist/permissions/request-permission.d.ts.map +0 -1
- package/dist/settings.d.ts.map +0 -1
- package/dist/stop-reason-map.d.ts.map +0 -1
- package/dist/subagent-gate.d.ts.map +0 -1
- package/dist/subagent-source.d.ts.map +0 -1
- package/dist/subagent-watcher.d.ts.map +0 -1
- package/dist/tools.d.ts.map +0 -1
- package/dist/usage-env.d.ts.map +0 -1
- package/dist/usage.d.ts.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/zed-register.d.ts.map +0 -1
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project an `AskUserQuestion` tool_input into an ACP form `CreateElicitationRequest`, scoped to the
|
|
3
|
+
* session and tied to the originating tool call by `tool_use.id` (R1.1, R1.2).
|
|
4
|
+
*
|
|
5
|
+
* Each question becomes one string-enum property keyed by its `header`: `{ type: "string", title:
|
|
6
|
+
* <question>, enum: <option labels, in order> }`, and every header is marked `required` (one entry per
|
|
7
|
+
* question, in order). The returned literal is shaped to satisfy the pinned SDK `zCreateElicitationRequest`.
|
|
8
|
+
*/
|
|
9
|
+
export function buildElicitationRequest(toolUseId, sessionId, toolInput) {
|
|
10
|
+
const properties = {};
|
|
11
|
+
const required = [];
|
|
12
|
+
for (const q of toolInput.questions) {
|
|
13
|
+
properties[q.header] = {
|
|
14
|
+
type: "string",
|
|
15
|
+
title: q.question,
|
|
16
|
+
enum: q.options.map((o) => o.label),
|
|
17
|
+
};
|
|
18
|
+
required.push(q.header);
|
|
19
|
+
}
|
|
20
|
+
const message = toolInput.questions.length === 1
|
|
21
|
+
? `Please answer: ${toolInput.questions[0]?.question ?? "the question below"}`
|
|
22
|
+
: `Please answer the following ${toolInput.questions.length} question(s).`;
|
|
23
|
+
// The SDK `CreateElicitationRequest` is an awkward mode/scope intersection; this well-formed form
|
|
24
|
+
// literal parses against `zCreateElicitationRequest` (verified by the C1 test), so a single localized
|
|
25
|
+
// cast is used rather than scattering `any` across the object.
|
|
26
|
+
return {
|
|
27
|
+
mode: "form",
|
|
28
|
+
message,
|
|
29
|
+
sessionId,
|
|
30
|
+
toolCallId: toolUseId,
|
|
31
|
+
requestedSchema: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties,
|
|
34
|
+
required,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** The wire actions the bridge recognizes as a well-formed elicitation response. */
|
|
39
|
+
const KNOWN_ACTIONS = new Set(["accept", "decline", "cancel"]);
|
|
40
|
+
/**
|
|
41
|
+
* True iff `resp` is a structurally well-formed `CreateElicitationResponse` — i.e. an object whose
|
|
42
|
+
* `action` is one of accept|decline|cancel. Used to fail closed on a malformed wire response WITHOUT
|
|
43
|
+
* importing the zod validators (blocked by the package `exports` map).
|
|
44
|
+
*/
|
|
45
|
+
function hasKnownAction(resp) {
|
|
46
|
+
return (typeof resp === "object" &&
|
|
47
|
+
resp !== null &&
|
|
48
|
+
"action" in resp &&
|
|
49
|
+
typeof resp.action === "string" &&
|
|
50
|
+
KNOWN_ACTIONS.has(resp.action));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Map an elicitation outcome back to a gate decision (R2). EVERY branch returns a `deny`: the gate
|
|
54
|
+
* always denies AskUserQuestion at the wire and surfaces the result through `reason` (the R2.1 seam — a
|
|
55
|
+
* PreToolUse hook cannot synthesize a native tool_result).
|
|
56
|
+
*
|
|
57
|
+
* - `accept`: the reason embeds EVERY selected answer (e.g. `Env=prod, Cache=yes`) so the model can
|
|
58
|
+
* read the choice from the deny reason. `content` null/undefined is handled defensively (still deny).
|
|
59
|
+
* - `decline`/`cancel`/any unrecognized-or-missing action: the reason reads as a user DISMISSAL, not
|
|
60
|
+
* an answer (default-deny defensively for unknown actions).
|
|
61
|
+
*/
|
|
62
|
+
export function mapOutcomeToDecision(resp) {
|
|
63
|
+
// `resp` is a typed union, but we read `action`/`content` defensively (a synthetic fail-closed
|
|
64
|
+
// cancel or a malformed upstream value may reach here) via a single localized view.
|
|
65
|
+
const view = resp;
|
|
66
|
+
if (view?.action === "accept") {
|
|
67
|
+
const content = view.content;
|
|
68
|
+
const answers = content !== undefined && content !== null
|
|
69
|
+
? Object.entries(content)
|
|
70
|
+
.map(([key, value]) => `${key}=${String(value)}`)
|
|
71
|
+
.join(", ")
|
|
72
|
+
: "";
|
|
73
|
+
const reason = answers.length > 0
|
|
74
|
+
? `AskUserQuestion answered by the user: ${answers}. (The tool is always denied at the ` +
|
|
75
|
+
`gate; this selection is returned to you via this reason.)`
|
|
76
|
+
: `AskUserQuestion was accepted but returned no selection. (The tool is always denied at ` +
|
|
77
|
+
`the gate; treat this as no usable answer.)`;
|
|
78
|
+
return { decision: "deny", reason };
|
|
79
|
+
}
|
|
80
|
+
// decline, cancel, or any unrecognized/missing action → a dismissal, never an answer.
|
|
81
|
+
return {
|
|
82
|
+
decision: "deny",
|
|
83
|
+
reason: `The user dismissed the AskUserQuestion prompt without providing an answer (no answer was ` +
|
|
84
|
+
`selected). (The tool is always denied at the gate.)`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** A synthetic fail-closed outcome — a cancel is a dismissal, mapped to a deny at the gate. */
|
|
88
|
+
function failClosedCancel() {
|
|
89
|
+
// `{ action: "cancel" }` satisfies the SDK response union; a localized cast avoids widening the API.
|
|
90
|
+
return { action: "cancel" };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Perform the bounded, fail-closed elicitation round-trip (R4). NEVER throws and NEVER hangs past
|
|
94
|
+
* ~`timeoutMs`.
|
|
95
|
+
*
|
|
96
|
+
* - Happy path (a well-formed response, action ∈ {accept,decline,cancel}) → returned UNCHANGED.
|
|
97
|
+
* - Timeout → `onWarn` (naming the timeout) and resolve `{ action: "cancel" }`.
|
|
98
|
+
* - Client throws → `onWarn` (including the underlying error text) and resolve `{ action: "cancel" }`.
|
|
99
|
+
* - Malformed response (action not accept|decline|cancel) → normalized to `{ action: "cancel" }`.
|
|
100
|
+
*
|
|
101
|
+
* The timer is always cleared on settle so no live handle keeps the event loop open.
|
|
102
|
+
*/
|
|
103
|
+
export async function requestElicitation(client, req, opts) {
|
|
104
|
+
const { timeoutMs, onWarn } = opts;
|
|
105
|
+
let timer;
|
|
106
|
+
const timeout = new Promise((resolve) => {
|
|
107
|
+
timer = setTimeout(() => resolve({ __timedOut: true }), timeoutMs);
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
const settled = await Promise.race([
|
|
111
|
+
// DEFER the client call through a resolved microtask so a SYNCHRONOUS throw (the method is
|
|
112
|
+
// `undefined` — capability advertised but absent — or it throws before returning a promise)
|
|
113
|
+
// becomes a REJECTION the inline handler below catches, instead of escaping at argument-
|
|
114
|
+
// evaluation time (this `try` has only a `finally`, so an eager throw would re-throw out of
|
|
115
|
+
// requestElicitation, violating "never throws"). Async rejections still take the same path.
|
|
116
|
+
Promise.resolve()
|
|
117
|
+
.then(() => client.unstable_createElicitation(req))
|
|
118
|
+
.then((resp) => ({ ok: true, resp }), (err) => ({ ok: false, err })),
|
|
119
|
+
timeout,
|
|
120
|
+
]);
|
|
121
|
+
// Timeout won the race — fail closed to a cancel.
|
|
122
|
+
if ("__timedOut" in settled) {
|
|
123
|
+
onWarn?.(`[gate elicitation] FAIL CLOSED: AskUserQuestion elicitation timed out after ${timeoutMs}ms ` +
|
|
124
|
+
`— resolving as a cancel (dismissal), never an accept.`);
|
|
125
|
+
return failClosedCancel();
|
|
126
|
+
}
|
|
127
|
+
// The client threw — fail closed to a cancel, surfacing the underlying error text.
|
|
128
|
+
if (!settled.ok) {
|
|
129
|
+
const err = settled.err;
|
|
130
|
+
onWarn?.(`[gate elicitation] FAIL CLOSED: AskUserQuestion elicitation transport error ` +
|
|
131
|
+
`(${err instanceof Error ? err.message : String(err)}) — resolving as a cancel.`);
|
|
132
|
+
return failClosedCancel();
|
|
133
|
+
}
|
|
134
|
+
// A well-formed response is returned unchanged; a malformed one is normalized to a cancel.
|
|
135
|
+
if (hasKnownAction(settled.resp)) {
|
|
136
|
+
return settled.resp;
|
|
137
|
+
}
|
|
138
|
+
onWarn?.(`[gate elicitation] FAIL CLOSED: malformed elicitation response (action not accept|decline|` +
|
|
139
|
+
`cancel) — resolving as a cancel.`);
|
|
140
|
+
return failClosedCancel();
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
if (timer !== undefined)
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ToolUseCorrelator, type PermissionClient } from "./request-permission.js";
|
|
2
|
+
import { type ElicitationClient } from "./elicitation-bridge.js";
|
|
2
3
|
import { type PtyWriter, type Schedule } from "./allow-inject.js";
|
|
3
4
|
/**
|
|
4
5
|
* Substrings that evidence the native TUI permission prompt (the bordered "Do you want to
|
|
@@ -62,12 +63,32 @@ export interface GatePty extends PtyWriter {
|
|
|
62
63
|
dispose(): void;
|
|
63
64
|
};
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Story 065 — the default hard upper bound (ms) on the AskUserQuestion elicitation round-trip. Generous
|
|
68
|
+
* (a human may take minutes to answer) but DELIBERATELY BELOW the hook-server
|
|
69
|
+
* {@link import("./hook-server.js").DEFAULT_DECIDER_TIMEOUT_MS} (600_000), so the bridge times out FIRST
|
|
70
|
+
* with a legible fail-closed reason rather than the decider being killed out from under it. Injectable
|
|
71
|
+
* via {@link SessionGateOptions.elicitationTimeoutMs} so offline tests use a small value.
|
|
72
|
+
*/
|
|
73
|
+
export declare const DEFAULT_ELICITATION_TIMEOUT_MS = 300000;
|
|
65
74
|
/** Options for {@link setupSessionGate}. Timing knobs are injectable for offline tests. */
|
|
66
75
|
export interface SessionGateOptions {
|
|
67
|
-
/** The ACP client surface
|
|
68
|
-
|
|
76
|
+
/** The ACP client surface. `AgentSideConnection` satisfies BOTH `requestPermission(params)`
|
|
77
|
+
* (the story-033 relay) AND `unstable_createElicitation(params)` (the story-065 elicitation
|
|
78
|
+
* bridge), so the field carries both capabilities. */
|
|
79
|
+
client: PermissionClient & ElicitationClient;
|
|
69
80
|
/** Diagnostics sink for every fail-closed / stuck-prompt warning (production: logger.error). */
|
|
70
81
|
onWarn?: (message: string) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Story 065 (R1/R3) — whether the connected ACP client negotiated the elicitation `form` capability
|
|
84
|
+
* (`clientCapabilities.elicitation.form`). When true, AskUserQuestion is driven through a real ACP
|
|
85
|
+
* form elicitation ({@link SessionGateImpl.decideElicitation}); when false/omitted it DEGRADES to the
|
|
86
|
+
* story-064 fail-closed deny-guard. Defaults to false when read, so an existing gate/064 test that
|
|
87
|
+
* omits it keeps the degrade behavior (load-bearing — do NOT make required). */
|
|
88
|
+
clientSupportsElicitationForm?: boolean;
|
|
89
|
+
/** Story 065 — hard upper bound (ms) on the AskUserQuestion elicitation round-trip; default
|
|
90
|
+
* {@link DEFAULT_ELICITATION_TIMEOUT_MS}. Injectable so offline tests use a small value. */
|
|
91
|
+
elicitationTimeoutMs?: number;
|
|
71
92
|
/** Injectable timer seam (same discipline as allow-inject/end-of-turn). Default: setTimeout. */
|
|
72
93
|
schedule?: Schedule;
|
|
73
94
|
/** Directory for the per-session scratch settings file. Default: `os.tmpdir()`. */
|
|
@@ -155,4 +176,3 @@ export interface SessionGate {
|
|
|
155
176
|
* an ungated claude that LOOKS gated (the blocker-b hazard). `FORK_GATE=off` is the escape hatch.
|
|
156
177
|
*/
|
|
157
178
|
export declare function setupSessionGate(opts: SessionGateOptions): Promise<SessionGate>;
|
|
158
|
-
//# sourceMappingURL=gate-wiring.d.ts.map
|
|
@@ -33,8 +33,10 @@ import * as path from "node:path";
|
|
|
33
33
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
34
34
|
import { findFreePort } from "../gate/port.js";
|
|
35
35
|
import { injectHook, restore } from "../gate/settings-writer.js";
|
|
36
|
-
import { startHookServer } from "./hook-server.js";
|
|
36
|
+
import { startHookServer, } from "./hook-server.js";
|
|
37
|
+
import { askUserQuestionDenyReason, isAskUserQuestionTool } from "./deny.js";
|
|
37
38
|
import { requestPermission, ToolUseCorrelator, } from "./request-permission.js";
|
|
39
|
+
import { buildElicitationRequest, mapOutcomeToDecision, requestElicitation, } from "./elicitation-bridge.js";
|
|
38
40
|
import { clearNativePrompt } from "./allow-inject.js";
|
|
39
41
|
/**
|
|
40
42
|
* Substrings that evidence the native TUI permission prompt (the bordered "Do you want to
|
|
@@ -111,9 +113,53 @@ export const SCRATCH_SETTINGS_PREFIX = "fork-acp-gate-settings-";
|
|
|
111
113
|
/** Story 046 (R3) — the file-edit tools that `acceptEdits` auto-allows, mirroring claude's native
|
|
112
114
|
* acceptEdits semantics (edits proceed without prompting; every other tool still asks). */
|
|
113
115
|
const EDIT_TOOLS = new Set(["Write", "Edit", "MultiEdit", "NotebookEdit"]);
|
|
116
|
+
/**
|
|
117
|
+
* Story 065 — the default hard upper bound (ms) on the AskUserQuestion elicitation round-trip. Generous
|
|
118
|
+
* (a human may take minutes to answer) but DELIBERATELY BELOW the hook-server
|
|
119
|
+
* {@link import("./hook-server.js").DEFAULT_DECIDER_TIMEOUT_MS} (600_000), so the bridge times out FIRST
|
|
120
|
+
* with a legible fail-closed reason rather than the decider being killed out from under it. Injectable
|
|
121
|
+
* via {@link SessionGateOptions.elicitationTimeoutMs} so offline tests use a small value.
|
|
122
|
+
*/
|
|
123
|
+
export const DEFAULT_ELICITATION_TIMEOUT_MS = 300_000;
|
|
114
124
|
const defaultSchedule = (fn, ms) => {
|
|
115
125
|
setTimeout(fn, ms);
|
|
116
126
|
};
|
|
127
|
+
/**
|
|
128
|
+
* Story 065 — STRUCTURAL guard that a hook payload's `tool_input` is a usable {@link AskUserQuestionInput}:
|
|
129
|
+
* an object carrying a NON-EMPTY `questions` array, EACH question being an object with a `header` string
|
|
130
|
+
* and a NON-EMPTY `options` array of `{ label: string }`. The runtime zod validators are not importable
|
|
131
|
+
* across the SDK package `exports` map, and the hook payload's `tool_input` is `unknown`, so this narrows
|
|
132
|
+
* before the bridge builder projects it into a form (an empty/garbage form would otherwise reach the
|
|
133
|
+
* client, and a per-question shape the builder walks — `q.options.map(...)`, `q.header` — would otherwise
|
|
134
|
+
* throw).
|
|
135
|
+
*
|
|
136
|
+
* Story 065 / task 4.1 (R4) — the per-question `options`/`header` validation is a BELT-AND-SUSPENDERS
|
|
137
|
+
* addition: {@link SessionGateImpl.decideElicitation} now also wraps the build in a try/catch (the
|
|
138
|
+
* mandatory total-function guarantee), so this guard's job is only to fail closed to the story-064 deny
|
|
139
|
+
* EARLY (with a "malformed tool_input" reason) rather than relying on the catch. Both together mean a
|
|
140
|
+
* malformed per-question input is a legible dismissal, never a crash and never an approve.
|
|
141
|
+
*/
|
|
142
|
+
function isAskUserQuestionInput(input) {
|
|
143
|
+
if (typeof input !== "object" ||
|
|
144
|
+
input === null ||
|
|
145
|
+
!("questions" in input) ||
|
|
146
|
+
!Array.isArray(input.questions)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
const questions = input.questions;
|
|
150
|
+
if (questions.length === 0)
|
|
151
|
+
return false;
|
|
152
|
+
return questions.every((q) => {
|
|
153
|
+
if (typeof q !== "object" || q === null)
|
|
154
|
+
return false;
|
|
155
|
+
const question = q;
|
|
156
|
+
if (typeof question.header !== "string")
|
|
157
|
+
return false;
|
|
158
|
+
if (!Array.isArray(question.options) || question.options.length === 0)
|
|
159
|
+
return false;
|
|
160
|
+
return question.options.every((o) => typeof o === "object" && o !== null && typeof o.label === "string");
|
|
161
|
+
});
|
|
162
|
+
}
|
|
117
163
|
/** Internal mutable state of one session's gate. */
|
|
118
164
|
class SessionGateImpl {
|
|
119
165
|
constructor(opts) {
|
|
@@ -239,6 +285,22 @@ class SessionGateImpl {
|
|
|
239
285
|
async decide(call) {
|
|
240
286
|
if (this.torndown)
|
|
241
287
|
return "deny"; // a hook racing teardown is never approved
|
|
288
|
+
// === Story 064/065 — AskUserQuestion handling, BEFORE any mode auto-allow or ACP relay. =========
|
|
289
|
+
// AskUserQuestion renders an interactive multiple-choice picker bound to the hidden PTY's stdin.
|
|
290
|
+
// Over the bridge the Zed user can't see or answer it, so an allow (including the bypass/acceptEdits
|
|
291
|
+
// auto-allow below) would stall the turn until the watchdog fires. This branch stays FIRST (after the
|
|
292
|
+
// torndown check) so AskUserQuestion is always intercepted regardless of permission mode.
|
|
293
|
+
//
|
|
294
|
+
// Story 065 (R1): when the client negotiated the elicitation `form` capability, drive a REAL ACP form
|
|
295
|
+
// elicitation and carry the answer back in a deny reason (a PreToolUse hook cannot synthesize a native
|
|
296
|
+
// tool_result — the tool is ALWAYS denied at the wire). Story 065 (R3): otherwise DEGRADE to the
|
|
297
|
+
// story-064 fail-closed deny-guard so the model proceeds without stalling.
|
|
298
|
+
if (isAskUserQuestionTool(call.toolName)) {
|
|
299
|
+
if (this.opts.clientSupportsElicitationForm) {
|
|
300
|
+
return await this.decideElicitation(call);
|
|
301
|
+
}
|
|
302
|
+
return { decision: "deny", reason: askUserQuestionDenyReason() }; // R3 degrade
|
|
303
|
+
}
|
|
242
304
|
// === Story 046 (R3) — honor the live permission mode BEFORE relaying to Zed. =================
|
|
243
305
|
// The hook payload carries the current mode (probe-d confirmed `permission_mode` matches the
|
|
244
306
|
// selected mode in acceptEdits/bypassPermissions). Without this branch the gate raises
|
|
@@ -339,6 +401,66 @@ class SessionGateImpl {
|
|
|
339
401
|
}
|
|
340
402
|
});
|
|
341
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* Story 065 (R1, R2.1, R2.2) — drive an AskUserQuestion via a REAL ACP form elicitation and map the
|
|
406
|
+
* user's outcome back to a gate decision. ALWAYS returns a `deny`+reason (a PreToolUse hook cannot
|
|
407
|
+
* synthesize a native tool_result): on accept the reason CARRIES the answer (R2.1); on
|
|
408
|
+
* decline/cancel/timeout/transport-error the reason reads as a dismissal (R2.2). Reached ONLY when the
|
|
409
|
+
* client negotiated the elicitation `form` capability (guarded in {@link decide}).
|
|
410
|
+
*
|
|
411
|
+
* FAIL CLOSED (mirrors the whole gate's posture): an elicitation is SESSION-SCOPED, so with no bound
|
|
412
|
+
* ACP session id (nor a payload fallback) we CANNOT raise one → fall back to the story-064 deny. A
|
|
413
|
+
* structurally malformed `tool_input` (not an object with a non-empty `questions` array) likewise falls
|
|
414
|
+
* back — the bridge builder would otherwise project an empty/garbage form. Both are dismissals, never
|
|
415
|
+
* an accept.
|
|
416
|
+
*
|
|
417
|
+
* The turn is BLOCKED awaiting the user exactly like the requestPermission relay, so the end-of-turn
|
|
418
|
+
* watchdog is re-armed via {@link startPermissionHeartbeat} for as long as the elicitation is open
|
|
419
|
+
* (always cleared in `finally`). The round-trip itself is bounded + fail-closed inside
|
|
420
|
+
* {@link requestElicitation} (it never throws and never hangs past the timeout).
|
|
421
|
+
*/
|
|
422
|
+
async decideElicitation(call) {
|
|
423
|
+
const sessionId = this.sessionId ?? call.sessionId;
|
|
424
|
+
if (!sessionId) {
|
|
425
|
+
this.warn(`[gate elicitation] FAIL CLOSED: AskUserQuestion for tool_use ${call.toolUseId} arrived before ` +
|
|
426
|
+
`the gate was bound to an ACP session — cannot raise a session-scoped elicitation; denying ` +
|
|
427
|
+
`(story-064 fallback).`);
|
|
428
|
+
return { decision: "deny", reason: askUserQuestionDenyReason() };
|
|
429
|
+
}
|
|
430
|
+
if (!isAskUserQuestionInput(call.toolInput)) {
|
|
431
|
+
this.warn(`[gate elicitation] FAIL CLOSED: AskUserQuestion tool_use ${call.toolUseId} carried a malformed ` +
|
|
432
|
+
`tool_input (expected an object with a non-empty "questions" array) — cannot build a form ` +
|
|
433
|
+
`elicitation; denying (story-064 fallback).`);
|
|
434
|
+
return { decision: "deny", reason: askUserQuestionDenyReason() };
|
|
435
|
+
}
|
|
436
|
+
// The claude is blocked on this response with the JSONL silent, so re-arm the end-of-turn watchdog
|
|
437
|
+
// for as long as the elicitation is open (a slow human decision is NOT a dead turn). Mirror the
|
|
438
|
+
// requestPermission relay's heartbeat; always cleared in `finally`, on success or throw.
|
|
439
|
+
const stopHeartbeat = this.startPermissionHeartbeat();
|
|
440
|
+
try {
|
|
441
|
+
// TOTAL by construction (R4): build + round-trip are wrapped so ANY throw degrades to the
|
|
442
|
+
// story-064 deny with a legible diagnostic, never escaping decideElicitation. buildElicitationRequest
|
|
443
|
+
// itself can throw on a per-question input the structural guard did not catch (e.g. a question with
|
|
444
|
+
// no `options` array → `q.options.map(...)` throws); requestElicitation is fail-closed internally,
|
|
445
|
+
// but this catch is the mandatory total-function guarantee (the hook-server's decideWithTimeout is
|
|
446
|
+
// only the generic defense-in-depth net). A throw here is a dismissal, never an accept.
|
|
447
|
+
const req = buildElicitationRequest(call.toolUseId, sessionId, call.toolInput);
|
|
448
|
+
const resp = await requestElicitation(this.opts.client, req, {
|
|
449
|
+
timeoutMs: this.opts.elicitationTimeoutMs ?? DEFAULT_ELICITATION_TIMEOUT_MS,
|
|
450
|
+
onWarn: (m) => this.warn(m),
|
|
451
|
+
});
|
|
452
|
+
return mapOutcomeToDecision(resp);
|
|
453
|
+
}
|
|
454
|
+
catch (err) {
|
|
455
|
+
this.warn(`[gate elicitation] FAIL CLOSED: AskUserQuestion tool_use ${call.toolUseId} could not be ` +
|
|
456
|
+
`elicited (${err instanceof Error ? err.message : String(err)}) — denying (story-064 ` +
|
|
457
|
+
`fallback); the tool is intercepted, never approved.`);
|
|
458
|
+
return { decision: "deny", reason: askUserQuestionDenyReason() };
|
|
459
|
+
}
|
|
460
|
+
finally {
|
|
461
|
+
stopHeartbeat();
|
|
462
|
+
}
|
|
463
|
+
}
|
|
342
464
|
/** Bounded poll until the pump has registered `toolUseId` as a clean single JSONL match. On
|
|
343
465
|
* expiry, resolve anyway — `requestPermission` then fails closed on the missing correlation.
|
|
344
466
|
*
|
|
@@ -27,8 +27,17 @@ export interface ForwardedToolCall {
|
|
|
27
27
|
* for a main-chain tool. There is NO parent tool_use.id in the payload (grouping is best-effort). */
|
|
28
28
|
agentType?: string;
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/** Story 064 — a deny that carries a custom `permissionDecisionReason` (e.g. the AskUserQuestion
|
|
31
|
+
* anti-stall reason) instead of the {@link defaultDenyReason}. */
|
|
32
|
+
export interface DenyWithReason {
|
|
33
|
+
decision: "deny";
|
|
34
|
+
reason: string;
|
|
35
|
+
}
|
|
36
|
+
/** The enforced outcome a decider returns: a plain allow/deny, or a deny carrying a custom reason.
|
|
37
|
+
* Plain `"deny"` and {@link DenyWithReason} both intercept the tool; the latter just names a reason. */
|
|
38
|
+
export type ToolDecision = "allow" | "deny" | DenyWithReason;
|
|
39
|
+
/** The decider the server forwards each tool call to; returns the enforced {@link ToolDecision}. */
|
|
40
|
+
export type ToolCallDecider = (call: ForwardedToolCall) => Promise<ToolDecision> | ToolDecision;
|
|
32
41
|
/** The running hook server handle. */
|
|
33
42
|
export interface HookServer {
|
|
34
43
|
/** The loopback port the server bound (feeds the story-032 hook URL). */
|
|
@@ -84,4 +93,3 @@ export declare function parsePayload(raw: string): ForwardedToolCall | null;
|
|
|
84
93
|
* fails fast rather than spawning claude with an ungated hook URL).
|
|
85
94
|
*/
|
|
86
95
|
export declare function startHookServer(opts: StartHookServerOptions): Promise<HookServer>;
|
|
87
|
-
//# sourceMappingURL=hook-server.d.ts.map
|
|
@@ -42,6 +42,15 @@ function writeDecision(res, decision) {
|
|
|
42
42
|
res.writeHead(200, { "content-type": "application/json" });
|
|
43
43
|
res.end(json);
|
|
44
44
|
}
|
|
45
|
+
/** Map a decider's {@link ToolDecision} to the §9 hook body, honoring a {@link DenyWithReason}'s custom
|
|
46
|
+
* reason (story 064). A plain allow/deny uses the default allow/deny body. */
|
|
47
|
+
function toHookResponse(decision, call) {
|
|
48
|
+
if (decision === "allow")
|
|
49
|
+
return allowDecision(call);
|
|
50
|
+
if (decision === "deny")
|
|
51
|
+
return denyDecision(call);
|
|
52
|
+
return denyDecision(call, decision.reason);
|
|
53
|
+
}
|
|
45
54
|
/**
|
|
46
55
|
* Parse a PreToolUse payload from raw JSON, normalizing to {@link ForwardedToolCall}. Returns null when
|
|
47
56
|
* the body is unparseable OR lacks a `tool_use_id`/`tool_name` — the caller fails closed on null (a
|
|
@@ -161,7 +170,7 @@ export function startHookServer(opts) {
|
|
|
161
170
|
return;
|
|
162
171
|
}
|
|
163
172
|
const decision = await decideWithTimeout(decider, call, deciderTimeoutMs, onWarn);
|
|
164
|
-
writeDecision(res, decision
|
|
173
|
+
writeDecision(res, toHookResponse(decision, call));
|
|
165
174
|
}
|
|
166
175
|
catch (err) {
|
|
167
176
|
// Any unexpected handler error (body read failure, write failure) → fail closed.
|
|
@@ -64,4 +64,3 @@ export type EntrypointAssertion = {
|
|
|
64
64
|
* @returns `{ ok:true, entrypoint }` for `cli`; `{ ok:false, entrypoint, reason }` otherwise.
|
|
65
65
|
*/
|
|
66
66
|
export declare function assertEntrypointCli(event: WatchedMessage): EntrypointAssertion;
|
|
67
|
-
//# sourceMappingURL=permission-mode.d.ts.map
|
package/dist/settings.d.ts
CHANGED
package/dist/settings.js
CHANGED
|
@@ -106,6 +106,13 @@ export class SettingsManager {
|
|
|
106
106
|
this.handleSettingsChange();
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
|
+
// Story 059: a best-effort settings watcher must NOT keep the Node event loop alive on its
|
|
110
|
+
// own. A settingsManager that escapes dispose() (an initialize/re-spawn race — see the
|
|
111
|
+
// pre-existing-leak note in acp-agent.ts createSession) otherwise leaves a live fs.watch
|
|
112
|
+
// handle that hangs `node:test` on process exit (the live ACP process is held open by its
|
|
113
|
+
// stdio, never by this watcher). unref() detaches it from the loop's keep-alive set while
|
|
114
|
+
// leaving the subscription fully functional.
|
|
115
|
+
watcher.unref?.();
|
|
109
116
|
watcher.on("error", (error) => {
|
|
110
117
|
this.logger.error(`Settings watcher error for ${filePath}:`, error);
|
|
111
118
|
});
|
|
@@ -139,6 +146,8 @@ export class SettingsManager {
|
|
|
139
146
|
this.logger.error("Failed to reload settings:", error);
|
|
140
147
|
}
|
|
141
148
|
}, 100);
|
|
149
|
+
// Story 059: same rationale as the watcher unref — a pending debounce timer must not block exit.
|
|
150
|
+
this.debounceTimer?.unref?.();
|
|
142
151
|
}
|
|
143
152
|
/**
|
|
144
153
|
* Returns the current merged settings
|
|
@@ -14,4 +14,3 @@ export interface StopReasonLogger {
|
|
|
14
14
|
* Total: never throws. `null`/`undefined` (absence, not drift) return the fallback without logging.
|
|
15
15
|
*/
|
|
16
16
|
export declare function mapStopReason(raw: unknown, logger?: StopReasonLogger): StopReason;
|
|
17
|
-
//# sourceMappingURL=stop-reason-map.d.ts.map
|
package/dist/subagent-gate.d.ts
CHANGED
|
@@ -55,4 +55,3 @@ export declare function collectSidechainToolUses(rows: SessionMessage[]): Sidech
|
|
|
55
55
|
* Mutates `correlator`, `registered`, and `parentMap` in place; returns nothing.
|
|
56
56
|
*/
|
|
57
57
|
export declare function registerSidechainGateToolUses(uses: SidechainToolUse[], correlator: ToolUseCorrelator, registered: Set<string>, parentMap: Map<string, SidechainToolUse>): void;
|
|
58
|
-
//# sourceMappingURL=subagent-gate.d.ts.map
|
package/dist/tools.d.ts
CHANGED
package/dist/tools.js
CHANGED
|
@@ -325,7 +325,11 @@ export function toolUpdateFromToolResult(toolResult, toolUse, supportsTerminalOu
|
|
|
325
325
|
if ("is_error" in toolResult &&
|
|
326
326
|
toolResult.is_error &&
|
|
327
327
|
toolResult.content &&
|
|
328
|
-
toolResult.content.length > 0
|
|
328
|
+
toolResult.content.length > 0 &&
|
|
329
|
+
// Story 056 (#776): a FAILED Bash with a negotiated terminal must still render as terminal
|
|
330
|
+
// output (terminal_output + terminal_exit exit_code 1 via `case "Bash"`), not markdown — so it
|
|
331
|
+
// is excluded from this error-only early-return. Every other errored result is unchanged.
|
|
332
|
+
!(toolUse?.name === "Bash" && supportsTerminalOutput)) {
|
|
329
333
|
// Only return errors
|
|
330
334
|
return toAcpContentUpdate(toolResult.content, true);
|
|
331
335
|
}
|
package/dist/usage-env.d.ts
CHANGED
package/dist/usage.d.ts
CHANGED
|
@@ -32,6 +32,9 @@ export interface UsageOptions {
|
|
|
32
32
|
* • R3.1 — the optional `cost` field is INTENTIONALLY OMITTED and must NEVER be fabricated:
|
|
33
33
|
* the JSONL usage block carries only token counts, and `cost` is optional in the Zed v1 struct,
|
|
34
34
|
* so omitting it is contract-correct (an invented cost would violate §1 "never fabricate").
|
|
35
|
+
* Story 059 EVIDENCE (2026-06-28): an audit of 5169 local transcripts found 0 carrying
|
|
36
|
+
* `total_cost_usd` as a JSON key — it lives only in the SDK `result` envelope (`claude -p`), never
|
|
37
|
+
* in the interactive PTY+tail JSONL mapped here (the 68 substring hits were all conversation text).
|
|
35
38
|
*/
|
|
36
39
|
export declare function toUsageUpdate(message: UsageCarrier, options?: UsageOptions): UsageUpdateNotification | undefined;
|
|
37
40
|
export interface UsageFlagOptions extends UsageOptions {
|
|
@@ -51,4 +54,3 @@ export interface UsageFlagOptions extends UsageOptions {
|
|
|
51
54
|
* shape (see {@link toUsageUpdate}): no `cost`, and `size` is the inferred window on the live path.
|
|
52
55
|
*/
|
|
53
56
|
export declare function usageUpdatesFor(message: UsageCarrier, options?: UsageFlagOptions): UsageUpdateNotification[];
|
|
54
|
-
//# sourceMappingURL=usage.d.ts.map
|
package/dist/usage.js
CHANGED
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
* • R3.1 — the optional `cost` field is INTENTIONALLY OMITTED and must NEVER be fabricated:
|
|
23
23
|
* the JSONL usage block carries only token counts, and `cost` is optional in the Zed v1 struct,
|
|
24
24
|
* so omitting it is contract-correct (an invented cost would violate §1 "never fabricate").
|
|
25
|
+
* Story 059 EVIDENCE (2026-06-28): an audit of 5169 local transcripts found 0 carrying
|
|
26
|
+
* `total_cost_usd` as a JSON key — it lives only in the SDK `result` envelope (`claude -p`), never
|
|
27
|
+
* in the interactive PTY+tail JSONL mapped here (the 68 substring hits were all conversation text).
|
|
25
28
|
*/
|
|
26
29
|
export function toUsageUpdate(message, options = {}) {
|
|
27
30
|
const input = message.usage?.input_tokens;
|
package/dist/utils.d.ts
CHANGED
|
@@ -13,4 +13,3 @@ export declare function nodeToWebWritable(nodeStream: Writable): WritableStream<
|
|
|
13
13
|
export declare function nodeToWebReadable(nodeStream: Readable): ReadableStream<Uint8Array>;
|
|
14
14
|
export declare function unreachable(value: never, logger?: Logger): void;
|
|
15
15
|
export declare function sleep(time: number): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/zed-register.d.ts
CHANGED
|
@@ -23,4 +23,3 @@ export declare function parseJsonc(text: string): any;
|
|
|
23
23
|
* this is the programmatic merge used in tests and tooling.)
|
|
24
24
|
*/
|
|
25
25
|
export declare function mergeAgentServer(settingsText: string, name: string, entry: ZedAgentEntry): string;
|
|
26
|
-
//# sourceMappingURL=zed-register.d.ts.map
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.7.0",
|
|
7
7
|
"description": "Run the official Claude Code TUI in Zed's agent panel on your Claude Pro/Max subscription — an ACP-over-PTY bridge created for Anthropic's billing split (paused June 15; see README).",
|
|
8
8
|
"main": "dist/lib.js",
|
|
9
9
|
"types": "dist/lib.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"types": "./dist/lib.d.ts",
|
|
17
17
|
"import": "./dist/lib.js"
|
|
18
18
|
},
|
|
19
|
-
"
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
22
22
|
"dist/",
|
|
@@ -59,21 +59,24 @@
|
|
|
59
59
|
},
|
|
60
60
|
"author": "lucascouts",
|
|
61
61
|
"license": "Apache-2.0",
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=20"
|
|
64
|
+
},
|
|
62
65
|
"dependencies": {
|
|
63
|
-
"@agentclientprotocol/sdk": "0.
|
|
64
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
66
|
+
"@agentclientprotocol/sdk": "1.0.0",
|
|
67
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.195",
|
|
65
68
|
"node-pty": "1.1.0",
|
|
66
69
|
"zod": "^3.25.0 || ^4.0.0"
|
|
67
70
|
},
|
|
68
71
|
"devDependencies": {
|
|
69
|
-
"@anthropic-ai/sdk": "0.
|
|
72
|
+
"@anthropic-ai/sdk": "0.106.0",
|
|
70
73
|
"@eslint/js": "10.0.1",
|
|
71
|
-
"@types/node": "26.0.
|
|
72
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
73
|
-
"@typescript-eslint/parser": "8.
|
|
74
|
+
"@types/node": "26.0.1",
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "8.62.0",
|
|
76
|
+
"@typescript-eslint/parser": "8.62.0",
|
|
74
77
|
"eslint": "10.5.0",
|
|
75
78
|
"eslint-config-prettier": "10.1.8",
|
|
76
|
-
"globals": "17.
|
|
79
|
+
"globals": "17.7.0",
|
|
77
80
|
"prettier": "3.8.4",
|
|
78
81
|
"ts-node": "10.9.2",
|
|
79
82
|
"typescript": "6.0.3"
|
package/dist/acp-agent.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ansi-mirror.d.ts","sourceRoot":"","sources":["../src/ansi-mirror.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpD,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EACvB,IAAI,GAAE,iBAAsB,GAC3B,WAAW,GAAG,SAAS,CAgBzB"}
|
package/dist/besteffort.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"besteffort.d.ts","sourceRoot":"","sources":["../src/besteffort.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEtD;AAED,KAAK,YAAY,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,wBAAwB,CAAC;AACpF,KAAK,WAAW,GAAG,OAAO,kBAAkB,CAAC;AA+C7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,EAChC,IAAI,EAAE,WAAW,GAAG,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,EACvB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,mBAAmB,EAAE,CA0CvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entrypoint-guard.d.ts","sourceRoot":"","sources":["../../src/billing/entrypoint-guard.ts"],"names":[],"mappings":"AAsCA;;;GAGG;AACH,eAAO,MAAM,wBAAwB,uFAO3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mDAAoD,CAAC;AAEpF,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAQtE;AAeD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,cAAc,CAAA;CAAE,GACxE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAUjE;AAkBD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,0GAA0G;IAC1G,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kGAAkG;IAClG,WAAW,CAAC,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,QAAQ,GAAG,SAAS,CAAC;KACvC,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAkBlF;AAuBD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAenF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-path.d.ts","sourceRoot":"","sources":["../src/claude-path.ts"],"names":[],"mappings":"AA6BA;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAenD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;AAc/E;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,WAAgC,GACrC,MAAM,GAAG,IAAI,CAMf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAChC,IAAI,CAON;AAED,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACnD,qEAAqE;IACrE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,CA6BnE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-enriched-reader.d.ts","sourceRoot":"","sources":["../src/diff-enriched-reader.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzE;AAED,mGAAmG;AACnG,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACjD;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,yBAA8B,GACnC,WAAW,CAoCb"}
|