zelari-code 2.5.0 → 2.6.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.
@@ -0,0 +1,115 @@
1
+ /**
2
+ * src/cli/budget/budgetRuntime.ts — live host-owned budget runtime (2.6
3
+ * Track B, doc §9–§12 rollout Phase 2/3). Wires the pure core primitives
4
+ * (ResourcePolicy/ResourceBudget) to the running loop:
5
+ *
6
+ * - counts every tool.call that lands on the spine (via SessionSpineMirror
7
+ * attach) and emits `resource.snapshot` events at §10.4 frequency;
8
+ * - exposes the LATEST snapshot for the model-visible RESOURCE STATUS
9
+ * block (injected by buildModelContext);
10
+ * - gates tool calls when the protected verification zone is entered
11
+ * (§11.3): `advisory` (default, Phase 2) lets everything through with a
12
+ * warning; `protected` (Phase 3, ZELARI_RESOURCE_ENFORCEMENT=protected)
13
+ * denies non-essential tools and tells the model to verify/finalize.
14
+ *
15
+ * The model never mutates this state — only the host appends (§9.5).
16
+ */
17
+ import { defaultResourcePolicy } from '@zelari/core';
18
+ import { ResourceLedger, rebuildLedgerFromEvents } from './resourceLedger.js';
19
+ import { buildResourceSnapshot, shouldEmitSnapshot, } from './resourceSnapshot.js';
20
+ /**
21
+ * §11.3 verification-essential tools: test/typecheck/build/diff/read
22
+ * failure/targeted repair/retest. Everything else (delegation, speculative
23
+ * search, new architecture) is non-essential inside the protected zone.
24
+ */
25
+ const DEFAULT_ESSENTIAL_TOOLS = [
26
+ 'bash',
27
+ 'read_file',
28
+ 'edit_file',
29
+ 'write_file',
30
+ 'apply_diff',
31
+ 'grep_content',
32
+ 'list_files',
33
+ 'show_diff',
34
+ ];
35
+ const ADVISORY_NOTICE = 'Resource advisory: verification reserve reached. Prioritize test/typecheck/build/diff and targeted repair; avoid broad exploration or delegation.';
36
+ const PROTECTED_DENIAL = 'Resource protected: remaining tool calls are reserved for verification and targeted repair. Run the required checks (test/typecheck/build), read the failure, apply a minimal fix, retest — or report BLOCKED with the evidence you have.';
37
+ /** Phase selector — advisory by default (§11.4), protected via env (Phase 3). */
38
+ export function resolveResourceEnforcement(env = process.env) {
39
+ return env.ZELARI_RESOURCE_ENFORCEMENT === 'protected' ? 'protected' : 'advisory';
40
+ }
41
+ export class BudgetRuntime {
42
+ policy;
43
+ enforcement;
44
+ ledger;
45
+ essential;
46
+ stage;
47
+ lastEmitted;
48
+ constructor(profileId, opts = {}) {
49
+ this.policy = opts.policy ?? defaultResourcePolicy(profileId);
50
+ this.enforcement = opts.enforcement ?? 'advisory';
51
+ this.essential = new Set(opts.essentialTools ?? DEFAULT_ESSENTIAL_TOOLS);
52
+ this.stage = opts.stage ?? 'implement';
53
+ this.ledger = new ResourceLedger();
54
+ }
55
+ /**
56
+ * Count one tool call; returns the snapshot to emit when §10.4 says so
57
+ * (first sight, stage/pressure change, reserve crossing, any usage delta).
58
+ */
59
+ noteToolCall() {
60
+ this.ledger.record('tool-call');
61
+ return this.emitIfDue();
62
+ }
63
+ /** §10.4 verification start: stage change (and a zero-cost ledger mark). */
64
+ noteVerificationStart() {
65
+ this.ledger.record('verification', 0);
66
+ return this.setStage('verify');
67
+ }
68
+ /** §10.4 repair start. */
69
+ noteRepairStart() {
70
+ return this.setStage('repair');
71
+ }
72
+ /** Stage transition; emits when the stage actually changes. */
73
+ setStage(stage) {
74
+ if (stage === this.stage)
75
+ return null;
76
+ this.stage = stage;
77
+ return this.emitIfDue();
78
+ }
79
+ /** Current projection without emitting. */
80
+ current() {
81
+ return buildResourceSnapshot(this.ledger.budget(this.policy, this.stage), this.policy);
82
+ }
83
+ /** §11.3 gate — advisory mode never blocks; protected mode guards the zone. */
84
+ gateToolCall(toolName) {
85
+ const snapshot = this.current();
86
+ if (!snapshot.reserveProtected)
87
+ return { allowed: true, advisory: false, snapshot };
88
+ if (this.enforcement === 'advisory') {
89
+ return { allowed: true, advisory: true, reason: ADVISORY_NOTICE, snapshot };
90
+ }
91
+ if (this.essential.has(toolName)) {
92
+ return { allowed: true, advisory: true, reason: ADVISORY_NOTICE, snapshot };
93
+ }
94
+ return { allowed: false, advisory: false, reason: PROTECTED_DENIAL, snapshot };
95
+ }
96
+ /** Resume path (§9.5): rebuild usage from the session log, no emission. */
97
+ adoptLedgerFromEvents(events) {
98
+ const rebuilt = rebuildLedgerFromEvents(events);
99
+ this.ledger.resetTo(rebuilt.snapshot());
100
+ this.lastEmitted = undefined;
101
+ }
102
+ /** Latest emitted snapshot (what the model surface shows), if any. */
103
+ latestEmitted() {
104
+ return this.lastEmitted;
105
+ }
106
+ emitIfDue() {
107
+ const next = this.current();
108
+ if (shouldEmitSnapshot(this.lastEmitted, next)) {
109
+ this.lastEmitted = next;
110
+ return next;
111
+ }
112
+ return null;
113
+ }
114
+ }
115
+ //# sourceMappingURL=budgetRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budgetRuntime.js","sourceRoot":"","sources":["../../../src/cli/budget/budgetRuntime.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,16 @@ import { applyBudgetPolicyAsync, estimateHistoryTokens, } from './tokenBudget.js
2
2
  import { measureRequest } from './requestMeter.js';
3
3
  import { compactEventPayload, } from './persistCompact.js';
4
4
  import { derivedModelSeed } from '../headlessSpine.js';
5
+ import { formatResourceSnapshot } from '@zelari/core/session';
5
6
  function messageWasRecompacted(message, history) {
6
7
  if (message.compactedFromSeq === undefined)
7
8
  return false;
8
9
  return !history.some((candidate) => candidate.seq !== undefined && candidate.seq === message.seq);
9
10
  }
11
+ /** RESOURCE STATUS system tail (doc §10.3) from the latest snapshot payload. */
12
+ function resourceStatusMessage(payload) {
13
+ return { role: 'system', content: formatResourceSnapshot(payload) };
14
+ }
10
15
  async function sessionHistory(session) {
11
16
  if (!session || session.status !== 'active')
12
17
  return null;
@@ -87,6 +92,12 @@ export async function buildModelContext(input) {
87
92
  };
88
93
  input.onCompactionMetric?.(compactionMetrics);
89
94
  }
95
+ // 2.6 Track B (doc §10.3): model-visible RESOURCE STATUS — the LATEST
96
+ // snapshot only, appended as a system tail AFTER compaction replay so the
97
+ // occupancy measurement below includes it. Projection stays latest-only.
98
+ if (input.resourceSnapshot) {
99
+ history = [...history, resourceStatusMessage(input.resourceSnapshot)];
100
+ }
90
101
  if (requestSurface) {
91
102
  const measured = measureRequest({
92
103
  systemMessages: requestSurface.systemMessages,
@@ -1 +1 @@
1
- {"version":3,"file":"modelContextBuilder.js","sourceRoot":"","sources":["../../../src/cli/budget/modelContextBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelContextBuilder.js","sourceRoot":"","sources":["../../../src/cli/budget/modelContextBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * src/cli/budget/resourceLedger.ts — host-owned append-only resource ledger
3
+ * (2.6 Track B, doc §9.4). Single counting point: tool-call usage derives
4
+ * from `tool.call` session events (never from tool.interrupted — no double
5
+ * count). The model can read projections; only the host appends.
6
+ */
7
+ import { ledgerDeltaFor, usageFromLedger, } from '@zelari/core';
8
+ import { budgetPressure, computeBudget } from '@zelari/core';
9
+ export class ResourceLedger {
10
+ entries = [];
11
+ nextSeq = 1;
12
+ static fromEntries(entries) {
13
+ const ledger = new ResourceLedger();
14
+ ledger.entries = [...entries];
15
+ ledger.nextSeq = entries.reduce((m, e) => Math.max(m, e.seq), 0) + 1;
16
+ return ledger;
17
+ }
18
+ /** Record one spend. Returns the entry (host call sites only). */
19
+ record(reason, calls = 1) {
20
+ const entry = { seq: this.nextSeq++, reason, delta: ledgerDeltaFor(reason, calls) };
21
+ this.entries.push(entry);
22
+ return entry;
23
+ }
24
+ snapshot() {
25
+ return [...this.entries];
26
+ }
27
+ /** Replace state (BudgetRuntime resume path); host call sites only. */
28
+ resetTo(entries) {
29
+ this.entries = [...entries];
30
+ this.nextSeq = entries.reduce((m, e) => Math.max(m, e.seq), 0) + 1;
31
+ }
32
+ usage() {
33
+ return usageFromLedger(this.entries);
34
+ }
35
+ /** Current budget projection under the given policy. Pure over the ledger. */
36
+ budget(policy, stage = 'implement') {
37
+ const usage = this.usage();
38
+ return computeBudget(policy, { toolCallsUsed: usage.toolCallsUsed, elapsedMs: usage.wallMs, tokensUsed: usage.tokensUsed }, stage);
39
+ }
40
+ pressure(policy) {
41
+ return budgetPressure(this.budget(policy), policy);
42
+ }
43
+ }
44
+ /**
45
+ * Rebuild the ledger from a session log (resume path, doc §9.5):
46
+ * one `tool-call` delta per `tool.call` event. Idempotent, order-preserving.
47
+ */
48
+ export function rebuildLedgerFromEvents(events) {
49
+ const ledger = new ResourceLedger();
50
+ for (const e of events) {
51
+ if (e.kind === 'tool.call') {
52
+ // Same delta shape a live host append produces — replay == live.
53
+ ledger.record('tool-call', 1);
54
+ }
55
+ else if (e.kind === 'verification.run') {
56
+ ledger.record('verification', 0);
57
+ }
58
+ }
59
+ return ledger;
60
+ }
61
+ //# sourceMappingURL=resourceLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceLedger.js","sourceRoot":"","sources":["../../../src/cli/budget/resourceLedger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,GAIhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,OAAO,cAAc;IACjB,OAAO,GAA0B,EAAE,CAAC;IACpC,OAAO,GAAG,CAAC,CAAC;IAEpB,MAAM,CAAC,WAAW,CAAC,OAAuC;QACxD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,MAA4B,EAAE,KAAK,GAAG,CAAC;QAC5C,MAAM,KAAK,GAAwB,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QACzG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,OAAuC;QAC7C,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,KAAK;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,MAAsB,EAAE,QAAuB,WAAW;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;IACrI,CAAC;IAED,QAAQ,CAAC,MAAsB;QAC7B,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuC;IAC7E,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,iEAAiE;YACjE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * src/cli/budget/resourceSnapshot.ts — emits `resource.snapshot` events and
3
+ * the model-visible RESOURCE STATUS block (2.6 Track B, doc §10).
4
+ *
5
+ * Frequency rules (§10.4): after a tool batch, on stage change, when a
6
+ * reserve threshold is crossed, and at verification/repair start. The event
7
+ * is model-surface LATEST-ONLY (modelSurface.ts projection) — the ledger
8
+ * keeps every snapshot, the model sees the last.
9
+ */
10
+ import { budgetPressure, isVerificationReserveProtected } from '@zelari/core';
11
+ export function buildResourceSnapshot(budget, policy) {
12
+ return {
13
+ toolCallsLimit: budget.toolCalls.limit,
14
+ toolCallsUsed: budget.toolCalls.used,
15
+ toolCallsRemaining: budget.toolCalls.remaining,
16
+ ...(budget.wallTime.remainingMs !== undefined ? { wallMsRemaining: budget.wallTime.remainingMs } : {}),
17
+ verificationReserve: budget.reserve.verification,
18
+ repairReserve: budget.reserve.repair,
19
+ stage: budget.stage,
20
+ pressure: budgetPressure(budget, policy),
21
+ reserveProtected: isVerificationReserveProtected(budget),
22
+ };
23
+ }
24
+ /** Decide whether a new snapshot must be emitted after a state change. */
25
+ export function shouldEmitSnapshot(previous, next) {
26
+ if (!previous)
27
+ return true;
28
+ if (previous.stage !== next.stage)
29
+ return true;
30
+ if (previous.pressure !== next.pressure)
31
+ return true;
32
+ if (previous.reserveProtected !== next.reserveProtected)
33
+ return true;
34
+ // After every tool batch: any usage delta.
35
+ if (previous.toolCallsUsed !== next.toolCallsUsed)
36
+ return true;
37
+ return false;
38
+ }
39
+ /** Event data payload — keys the invariant checker validates. */
40
+ export function snapshotEventData(s) {
41
+ return { ...s };
42
+ }
43
+ //# sourceMappingURL=resourceSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceSnapshot.js","sourceRoot":"","sources":["../../../src/cli/budget/resourceSnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAiB9E,MAAM,UAAU,qBAAqB,CAAC,MAAsB,EAAE,MAAsB;IAClF,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK;QACtC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI;QACpC,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;QAC9C,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;QAChD,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACpC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;QACxC,gBAAgB,EAAE,8BAA8B,CAAC,MAAM,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAChC,QAA6C,EAC7C,IAA6B;IAE7B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACrE,2CAA2C;IAC3C,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,CAA0B;IAC1D,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AAClB,CAAC"}
@@ -58,4 +58,13 @@ export function shouldRunGauntletHostLoop(opts) {
58
58
  const phase = opts.phase ?? 'build';
59
59
  return phase !== 'plan';
60
60
  }
61
+ export function budgetAwareGauntletGate(input) {
62
+ if (input.verdict === 'PASS')
63
+ return 'proceed';
64
+ if (input.toolCallsRemaining <= input.verificationReserve)
65
+ return 'finalize-verify';
66
+ if (input.toolCallsRemaining <= 0)
67
+ return 'hold';
68
+ return 'proceed';
69
+ }
61
70
  //# sourceMappingURL=policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/cli/gauntlet/policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,gEAAgE;AAChE,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,MAAM;CACE,CAAC;AAUX,SAAS,MAAM,CAAC,GAAuB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IACjF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC;IAChC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC;IAC5C,IAAI,WAAW,GAAG,eAAe,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,WAAW,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5E,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC;QACjF,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,yBAAyB,CAAC,IAMzC;IACC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;IACpC,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/cli/gauntlet/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * src/cli/harnessManifest.ts — builds and emits the canonical harness
3
+ * manifest for the running CLI session (2.6 Track A, doc §6).
4
+ *
5
+ * Pure assembly: raw prompt texts / policy objects go IN, hashes come OUT
6
+ * (never the raw text). Version resolution follows the updater.ts precedent
7
+ * (`__dirname` + `require`, bundle-safe); everything else is injected so the
8
+ * builder stays unit-testable and deterministic.
9
+ */
10
+ import { HarnessManifestV1Schema, harnessInputHash, hashHarnessManifest, } from '@zelari/core';
11
+ import { profileHash, toolManifestHash } from '@zelari/core';
12
+ import { getCurrentVersion } from './updater.js';
13
+ function resolveCoreVersion() {
14
+ try {
15
+ // Same bundle-safe precedent as updater.ts getCurrentVersion().
16
+ const pkgPath = require.resolve('@zelari/core/package.json');
17
+ const pkg = require(pkgPath);
18
+ return pkg.version;
19
+ }
20
+ catch {
21
+ return '0.0.0';
22
+ }
23
+ }
24
+ /** Build + validate + hash the manifest. Throws on invalid assembly. */
25
+ export function buildHarnessManifest(parts) {
26
+ const prompts = {};
27
+ for (const [role, text] of Object.entries(parts.prompts ?? {})) {
28
+ if (typeof text === 'string' && text.length > 0) {
29
+ prompts[role] = harnessInputHash(text);
30
+ }
31
+ }
32
+ const manifest = HarnessManifestV1Schema.parse({
33
+ schemaVersion: 1,
34
+ profile: {
35
+ id: parts.profile.id,
36
+ phase: parts.phase,
37
+ hash: profileHash(parts.profile),
38
+ },
39
+ prompts,
40
+ capabilities: {
41
+ toolManifestHash: toolManifestHash(parts.toolNames),
42
+ skillManifestHash: harnessInputHash([...(parts.skillIds ?? [])].sort()),
43
+ },
44
+ policies: {
45
+ routingHash: harnessInputHash(parts.routing ?? { unset: true }),
46
+ verificationHash: harnessInputHash(parts.verification ?? { engine: 'deterministic' }),
47
+ completionPolicyHash: harnessInputHash(parts.completionPolicy ?? { mode: 'strict', required: '*' }),
48
+ compactionHash: harnessInputHash(parts.compaction ?? { version: 1 }),
49
+ resourcePolicyHash: harnessInputHash(parts.resourcePolicy ?? { unset: true }),
50
+ },
51
+ runtime: {
52
+ coreVersion: parts.coreVersion ?? resolveCoreVersion(),
53
+ cliVersion: parts.cliVersion ?? getCurrentVersion(),
54
+ },
55
+ });
56
+ return { manifest, manifestHash: hashHarnessManifest(manifest) };
57
+ }
58
+ /** Session event payload for `session.harness_manifest` (state-only). */
59
+ export function harnessManifestEventData(manifest, manifestHash) {
60
+ return { manifest, manifestHash };
61
+ }
62
+ //# sourceMappingURL=harnessManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harnessManifest.js","sourceRoot":"","sources":["../../src/cli/harnessManifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAgB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA8BjD,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,gEAAgE;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAwB,CAAC;QACpD,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAI9D,MAAM,OAAO,GAAiC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,IAA0C,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAsB,uBAAuB,CAAC,KAAK,CAAC;QAChE,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;SACjC;QACD,OAAO;QACP,YAAY,EAAE;YACZ,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;YACnD,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACxE;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/D,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACrF,oBAAoB,EAAE,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACnG,cAAc,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACpE,kBAAkB,EAAE,gBAAgB,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC9E;QACD,OAAO,EAAE;YACP,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,kBAAkB,EAAE;YACtD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,iBAAiB,EAAE;SACpD;KACF,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,wBAAwB,CAAC,QAA2B,EAAE,YAAoB;IACxF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import { cleanAgentContent } from '@zelari/core';
2
2
  import { exportSessionJson, SessionStore, resolveSessionsDir, derivedToAgentMessages, } from '@zelari/core/session';
3
3
  import { deriveMissionState } from '@zelari/core/mission';
4
+ import { readSessionLog } from '@zelari/core/session';
5
+ import path from 'node:path';
4
6
  import { resolveProfile, toolManifestHash } from '@zelari/core/runtime';
5
7
  import { SessionSpineMirror } from './sessionSpine.js';
8
+ import { BudgetRuntime, resolveResourceEnforcement } from './budget/budgetRuntime.js';
6
9
  import { defaultProfileForMode } from './headless.js';
7
10
  /**
8
11
  * E1.4 (ADR-0016/0021): the NDJSON event hosts consume to learn which 2.0
@@ -46,6 +49,15 @@ export async function openHeadlessSpine(opts) {
46
49
  };
47
50
  const spine = await SessionSpineMirror.adopt(opts.sessionId, mirrorOpts);
48
51
  if (spine.status === 'active') {
52
+ // 2.6 Track B (Phase 2/3): count tool calls, emit resource.snapshot.
53
+ const budget = new BudgetRuntime(profileId, { enforcement: resolveResourceEnforcement() });
54
+ if (spine.resumedFromSeq !== undefined && spine.resumedFromSeq > 0) {
55
+ // §9.5 reconstructable state: rebuild usage from the prior log.
56
+ const prior = await readSessionLog(path.join(spine.sessionsDir, opts.sessionId, 'events.jsonl')).catch(() => null);
57
+ if (prior)
58
+ budget.adoptLedgerFromEvents(prior.events);
59
+ }
60
+ spine.attachBudgetRuntime(budget);
49
61
  spine.note('headless.profile', { profile: profileId, mode: opts.mode ?? 'kraken' });
50
62
  }
51
63
  return {
@@ -60,6 +72,9 @@ export async function openHeadlessSpine(opts) {
60
72
  userMessage(text) {
61
73
  spine.userMessage(text);
62
74
  },
75
+ gateResourceToolCall(toolName) {
76
+ return spine.gateResourceToolCall(toolName);
77
+ },
63
78
  verificationRun(payload) {
64
79
  spine.verificationRun(payload);
65
80
  },
@@ -1 +1 @@
1
- {"version":3,"file":"headlessSpine.js","sourceRoot":"","sources":["../../src/cli/headlessSpine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headlessSpine.js","sourceRoot":"","sources":["../../src/cli/headlessSpine.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEtF,OAAO,EAAE,qBAAqB,EAAqB,MAAM,eAAe,CAAC;AAsCzE;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAK7D,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAA8B,EAC9B,QAAiB;IAEjB,IAAI,QAAQ;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IACjD,OAAO,qBAAqB,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAOvC;IACC,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,YAAY,GAAsB,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,KAAK,GAA4B;QACrC,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE;QAC1C,gBAAgB,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;KACvF,CAAC;IACF,MAAM,UAAU,GAAuB;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,qEAAqE;QACrE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YACnE,gEAAgE;YAChE,MAAM,KAAK,GAAG,MAAM,cAAc,CAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAC7D,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,KAAK;gBAAE,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS;QACT,KAAK;QACL,OAAO,CAAC,EAAW;YACjB,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBACjD,KAAK,CAAC,gBAAgB,CAAC,EAAgB,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,WAAW,CAAC,IAAY;YACtB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,oBAAoB,CAAC,QAAgB;YACnC,OAAO,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,eAAe,CAAC,OAAgC;YAC9C,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,WAAW,CAAC,KAAwB;YAClC,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,mBAAmB;YACjB,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrC,CAAC;QACD,YAAY,CAAC,KAAa,EAAE,IAAa;YACvC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,eAAe,CAAC,MAMf;YACC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,IAAY,EAAE,IAA8B;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;YAC9B,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,IAAa;YAC3B,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,UAAU;YACd,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACvD,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAWD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAA2B,EAC3B,MAAgC;IAEhC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAClD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,MAAM,EAAE,cAAc;KACvB,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,gBAAgB,CAAC,MAAgC;IACxD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO;QACjC,CAAC,CAAC;YACE,IAAI,EAAE,WAAoB;YAC1B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE;gBACpC,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;aAClB,CAAC;SACH;QACH,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CACvE;SACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAkC;IACjE,OAAO,sBAAsB,CAAC,OAAO,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,CAAC,IAAI,KAAK,QAAQ;QACjB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE;QACjC,CAAC,CAAC,CAAC,CACN;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO;QACjC,CAAC,CAAC;YACE,GAAG,CAAC;YACJ,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE;gBACpC,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,KAAK;aAClB,CAAC;YACF,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/C;QACH,CAAC,CAAC,CAAC,CACN;SACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;SAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -249,6 +249,7 @@ export function useChatTurn(params) {
249
249
  const modelContext = await buildModelContext({
250
250
  fallbackHistory: historyForModel,
251
251
  session: writerRef.current?.spine ?? null,
252
+ resourceSnapshot: writerRef.current?.spine?.latestResourceSnapshot() ?? null,
252
253
  phase: workPhase,
253
254
  model: getActiveModel(),
254
255
  provider: envConfig?.providerId ?? (localCli || 'local'),
@@ -578,6 +579,9 @@ export function useChatTurn(params) {
578
579
  })),
579
580
  toolRegistry,
580
581
  providerStream,
582
+ // 2.6 Phase 3: host-owned pre-dispatch resource gate via the spine
583
+ // mirror (doc section 11.3). Degrade-and-stop (null gate = allow).
584
+ toolCallGate: (name) => writerRef.current?.spine?.gateResourceToolCall(name) ?? { allowed: true },
581
585
  cwd,
582
586
  maxToolCallsPerTurn,
583
587
  maxToolLoopIterations,