@zelari/core 2.55.0 → 2.57.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.
Files changed (62) hide show
  1. package/README.md +1 -1
  2. package/dist/core/hooks/lifecycleHookRunner.d.ts +30 -1
  3. package/dist/core/hooks/lifecycleHookRunner.d.ts.map +1 -1
  4. package/dist/core/hooks/lifecycleHookRunner.js +54 -0
  5. package/dist/core/hooks/lifecycleHookRunner.js.map +1 -1
  6. package/dist/core/hooks/types.d.ts +143 -5
  7. package/dist/core/hooks/types.d.ts.map +1 -1
  8. package/dist/core/hooks/types.js +63 -5
  9. package/dist/core/hooks/types.js.map +1 -1
  10. package/dist/core/tools/observationCompactor.d.ts +57 -0
  11. package/dist/core/tools/observationCompactor.d.ts.map +1 -0
  12. package/dist/core/tools/observationCompactor.js +129 -0
  13. package/dist/core/tools/observationCompactor.js.map +1 -0
  14. package/dist/core/tools/registry.d.ts +18 -23
  15. package/dist/core/tools/registry.d.ts.map +1 -1
  16. package/dist/core/tools/registry.js +8 -102
  17. package/dist/core/tools/registry.js.map +1 -1
  18. package/dist/memory/index.d.ts +1 -0
  19. package/dist/memory/index.d.ts.map +1 -1
  20. package/dist/memory/index.js +1 -0
  21. package/dist/memory/index.js.map +1 -1
  22. package/dist/memory/relevantWhen.d.ts +8 -0
  23. package/dist/memory/relevantWhen.d.ts.map +1 -0
  24. package/dist/memory/relevantWhen.js +73 -0
  25. package/dist/memory/relevantWhen.js.map +1 -0
  26. package/dist/memory/schemas.d.ts +2 -0
  27. package/dist/memory/schemas.d.ts.map +1 -1
  28. package/dist/memory/schemas.js +3 -0
  29. package/dist/memory/schemas.js.map +1 -1
  30. package/dist/memory/scoring.d.ts +1 -0
  31. package/dist/memory/scoring.d.ts.map +1 -1
  32. package/dist/memory/scoring.js +11 -1
  33. package/dist/memory/scoring.js.map +1 -1
  34. package/dist/memory/service.d.ts +12 -0
  35. package/dist/memory/service.d.ts.map +1 -1
  36. package/dist/memory/service.js +59 -0
  37. package/dist/memory/service.js.map +1 -1
  38. package/dist/memory/types.d.ts +20 -0
  39. package/dist/memory/types.d.ts.map +1 -1
  40. package/dist/session/decisionEvents.d.ts +167 -0
  41. package/dist/session/decisionEvents.d.ts.map +1 -0
  42. package/dist/session/decisionEvents.js +206 -0
  43. package/dist/session/decisionEvents.js.map +1 -0
  44. package/dist/session/index.d.ts +2 -0
  45. package/dist/session/index.d.ts.map +1 -1
  46. package/dist/session/index.js +2 -0
  47. package/dist/session/index.js.map +1 -1
  48. package/dist/session/replay.d.ts +33 -0
  49. package/dist/session/replay.d.ts.map +1 -1
  50. package/dist/session/replay.js +58 -1
  51. package/dist/session/replay.js.map +1 -1
  52. package/dist/session/types.d.ts +7 -1
  53. package/dist/session/types.d.ts.map +1 -1
  54. package/dist/session/types.js +20 -0
  55. package/dist/session/types.js.map +1 -1
  56. package/dist/session/verifyDebt.d.ts +41 -0
  57. package/dist/session/verifyDebt.d.ts.map +1 -0
  58. package/dist/session/verifyDebt.js +40 -0
  59. package/dist/session/verifyDebt.js.map +1 -0
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ /**
2
+ * session/decisionEvents.ts — WS7 slice 2: the DECISION-POINT vocabulary.
3
+ *
4
+ * A replay of a spine can already answer "what did the agent DO" (tool.call /
5
+ * tool.result, file.*, verification.run, verify.debt_*). What it could not
6
+ * answer — the whole point of `zelari-code replay` — is "what did the HARNESS
7
+ * decide on the way": whether the operator was asked, whether an approval was
8
+ * auto-granted, whether the OS jail blocked the spawn, whether the model
9
+ * stopped to ask the user, whether a verify was requested at all.
10
+ *
11
+ * Those five kinds are declared in `types.ts` (SESSION_EVENT_KINDS) and their
12
+ * payload contracts live HERE, in one place, mirrored from the emitters that
13
+ * already exist so a future writer does not invent a second spelling:
14
+ *
15
+ * permission.asked ← PermissionRequestPayload (safety/permissionGate.ts,
16
+ * WS5): {tool, categories?, effect?, matchedRuleId?,
17
+ * source?, reason?, argsSummary?}
18
+ * auto_approve.granted← the same decision block, effect resolved to allow
19
+ * (category default / allow rule / `--permissions yolo`)
20
+ * jail.blocked ← JailSpawnDecision deny branch (safety/osJail.ts):
21
+ * {backend, mode, reason, tool?}
22
+ * ask_user.fired ← the ask_user tool args (question/choices/context)
23
+ * verify.requested ← the K1.5/F5 obligation side: a verify was ASKED for
24
+ * (`verification.run` records that it actually ran)
25
+ *
26
+ * ALL FIVE ARE STATE-ONLY (P1): they record a decision, they never feed the
27
+ * model loop, so `deriveMessages()` ignores them and MODEL_SURFACE_KINDS must
28
+ * never gain them (pinned by decisionEvents.test.ts).
29
+ *
30
+ * Replay discipline (same as `parsePermissionDenial`): every reader here is
31
+ * DEFENSIVE. A hand-edited or half-written line must yield empty strings, never
32
+ * a throw — the tolerant reader owns "this line is broken" reporting.
33
+ */
34
+ import { z } from 'zod';
35
+ /**
36
+ * The five kinds this slice ADDED to the spine vocabulary (see SESSION_EVENT_KINDS).
37
+ * Order is the reading order of a session, not the declaration order in types.ts.
38
+ */
39
+ export const DECISION_EVENT_KINDS = [
40
+ 'permission.asked',
41
+ 'auto_approve.granted',
42
+ 'jail.blocked',
43
+ 'ask_user.fired',
44
+ 'verify.requested',
45
+ ];
46
+ /**
47
+ * What the `decisionEvents` projection aggregates: the five kinds above PLUS
48
+ * the WS1 `permission.denied` — same question ("what did the harness decide
49
+ * about this call?"), so a shadow replay must not have to merge two lists.
50
+ * `permission.denied` keeps its own dedicated `permissionDenials` field too;
51
+ * that field is untouched by this slice.
52
+ */
53
+ export const DECISION_PROJECTION_KINDS = [...DECISION_EVENT_KINDS, 'permission.denied'];
54
+ /** True for every kind the `decisionEvents` projection collects. */
55
+ export function isDecisionProjectionKind(kind) {
56
+ return DECISION_PROJECTION_KINDS.includes(kind);
57
+ }
58
+ // ── Payload contracts (zod) ────────────────────────────────────────────────
59
+ //
60
+ // NOT `.strict()`: the envelope's `data` is an open record and emitters grow
61
+ // fields (an `argsSummary`, a `durationMs`, a future `callId`). These schemas
62
+ // exist to pin what a payload MUST carry (and to be the single place a writer
63
+ // looks up the spelling) — not to reject forward-compatible additions.
64
+ // Unknown/missing REQUIRED fields are reported by `decisionPayloadError`.
65
+ const nonEmpty = z.string().min(1);
66
+ const toolName = z.object({ tool: nonEmpty });
67
+ /** `permission.asked` — the gate resolved a dispatch to a PROMPT. */
68
+ export const PermissionAskedPayloadSchema = toolName.extend({
69
+ /** Declared permission categories of the call (`read`, `write`, …). */
70
+ categories: z.array(z.string()).optional(),
71
+ /** Always `ask` when present — a deny is `permission.denied` (WS1). */
72
+ effect: z.literal('ask').optional(),
73
+ matchedRuleId: nonEmpty.optional(),
74
+ source: nonEmpty.optional(),
75
+ reason: z.string().optional(),
76
+ argsSummary: z.string().optional(),
77
+ });
78
+ /** `auto_approve.granted` — the same decision, resolved to ALLOW without a prompt. */
79
+ export const AutoApproveGrantedPayloadSchema = toolName.extend({
80
+ categories: z.array(z.string()).optional(),
81
+ /** Where the approval came from (`default` / `project` / `session` / `preset`). */
82
+ source: nonEmpty.optional(),
83
+ matchedRuleId: nonEmpty.optional(),
84
+ reason: z.string().optional(),
85
+ });
86
+ /** `jail.blocked` — the OS jail refused the spawn (typed `[jail]` error). */
87
+ export const JailBlockedPayloadSchema = z.object({
88
+ /** Exec tool whose spawn was refused, when one call owned the spawn. */
89
+ tool: nonEmpty.optional(),
90
+ /** Backend id that failed it (`seatbelt` / `bwrap` / `win32-restricted-token`). */
91
+ backend: nonEmpty,
92
+ /** Wire mirror of `safety/osJail.ts` JailMode (core cannot import the CLI). */
93
+ mode: z.enum(['off', 'advisory', 'required']),
94
+ reason: nonEmpty,
95
+ });
96
+ /** `ask_user.fired` — the model stopped the loop to ask the operator. */
97
+ export const AskUserFiredPayloadSchema = z.object({
98
+ question: nonEmpty,
99
+ /** `tool.call` id this question belongs to, when the emitter knows it. */
100
+ callId: nonEmpty.optional(),
101
+ choices: z.array(z.string()).optional(),
102
+ context: z.string().optional(),
103
+ });
104
+ /** `verify.requested` — a verify was ASKED for (it may never run). */
105
+ export const VerifyRequestedPayloadSchema = z.object({
106
+ /** K1.5/F5 debt slot the request belongs to, when one exists. */
107
+ taskId: nonEmpty.optional(),
108
+ /** Criterion ids the request targets (`verification.run` reports outcomes). */
109
+ criterionIds: z.array(z.string()).optional(),
110
+ source: nonEmpty.optional(),
111
+ reason: z.string().optional(),
112
+ });
113
+ /** One schema per DECISION_EVENT_KIND — the payload contract table. */
114
+ export const DECISION_EVENT_PAYLOAD_SCHEMAS = {
115
+ 'permission.asked': PermissionAskedPayloadSchema,
116
+ 'auto_approve.granted': AutoApproveGrantedPayloadSchema,
117
+ 'jail.blocked': JailBlockedPayloadSchema,
118
+ 'ask_user.fired': AskUserFiredPayloadSchema,
119
+ 'verify.requested': VerifyRequestedPayloadSchema,
120
+ };
121
+ /**
122
+ * Validate a payload against its kind's contract. Returns `null` when the
123
+ * payload satisfies it, else a one-line reason (the FIRST zod issue, prefixed
124
+ * with the field path) ready for stderr. Never throws.
125
+ */
126
+ export function decisionPayloadError(kind, data) {
127
+ const schema = DECISION_EVENT_PAYLOAD_SCHEMAS[kind];
128
+ const result = schema.safeParse(data);
129
+ if (result.success)
130
+ return null;
131
+ const issue = result.error.issues[0];
132
+ const where = issue?.path.length ? `${issue.path.join('.')}: ` : '';
133
+ return `${where}${issue?.message ?? 'payload does not match the contract'}`;
134
+ }
135
+ /** Primitive-only string read: exotic values degrade to `''`, never `[object Object]`. */
136
+ function str(value) {
137
+ if (typeof value === 'string')
138
+ return value;
139
+ if (typeof value === 'number' || typeof value === 'boolean')
140
+ return String(value);
141
+ return '';
142
+ }
143
+ /** `str` + collapse + bound, so a multi-line question cannot break the report. */
144
+ function oneLine(value, max = 120) {
145
+ const text = str(value).replace(/\s+/g, ' ').trim();
146
+ return text.length > max ? `${text.slice(0, Math.max(0, max - 1))}…` : text;
147
+ }
148
+ /** `a, b, c` for a bounded list, `''` when there is nothing to join. */
149
+ function joinList(value, max = 6) {
150
+ if (!Array.isArray(value))
151
+ return '';
152
+ return value
153
+ .map((v) => oneLine(v, 40))
154
+ .filter((v) => v.length > 0)
155
+ .slice(0, max)
156
+ .join(', ');
157
+ }
158
+ /** `ruleId @source` / `ruleId` / `source` — whatever the payload carried. */
159
+ function describeOrigin(data) {
160
+ const rule = oneLine(data.matchedRuleId, 60);
161
+ const source = oneLine(data.source, 60);
162
+ if (rule && source)
163
+ return `${rule} @${source}`;
164
+ return rule || source;
165
+ }
166
+ function describeDetail(kind, data) {
167
+ switch (kind) {
168
+ case 'permission.asked':
169
+ return (oneLine(data.reason) ||
170
+ oneLine(data.argsSummary) ||
171
+ (describeOrigin(data) ? `rule ${describeOrigin(data)}` : 'prompt awaited'));
172
+ case 'auto_approve.granted': {
173
+ const origin = describeOrigin(data);
174
+ return origin ? `auto-approved (${origin})` : 'auto-approved';
175
+ }
176
+ case 'jail.blocked':
177
+ return `${oneLine(data.backend, 40) || 'jail'} ${oneLine(data.mode, 20) || '?'}: ${oneLine(data.reason)}`;
178
+ case 'ask_user.fired': {
179
+ const choices = joinList(data.choices);
180
+ return oneLine(data.question) + (choices ? ` [choices: ${choices}]` : '');
181
+ }
182
+ case 'verify.requested': {
183
+ const criteria = joinList(data.criterionIds, 4);
184
+ return oneLine(data.reason) || (criteria ? `criteria: ${criteria}` : '');
185
+ }
186
+ case 'permission.denied':
187
+ return oneLine(data.reason) || `denied by ${describeOrigin(data) || 'a permission rule'}`;
188
+ }
189
+ }
190
+ /**
191
+ * Flatten one decision event. Pure and defensive: a payload missing every
192
+ * field still yields a summary with empty strings (the KIND is the datum).
193
+ */
194
+ export function parseDecisionEvent(e) {
195
+ const data = e.data;
196
+ return {
197
+ seq: e.seq,
198
+ at: e.ts,
199
+ kind: e.kind,
200
+ tool: oneLine(data.tool, 60),
201
+ source: oneLine(data.source, 60),
202
+ reason: oneLine(data.reason),
203
+ detail: describeDetail(e.kind, data),
204
+ };
205
+ }
206
+ //# sourceMappingURL=decisionEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionEvents.js","sourceRoot":"","sources":["../../src/session/decisionEvents.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export * from './agentAdapter.js';
12
12
  export * from './writer.js';
13
13
  export * from './replay.js';
14
14
  export * from './replayCache.js';
15
+ export * from './decisionEvents.js';
16
+ export * from './verifyDebt.js';
15
17
  export * from './store.js';
16
18
  export * from './lineage.js';
17
19
  export * from './exportSession.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -12,6 +12,8 @@ export * from './agentAdapter.js';
12
12
  export * from './writer.js';
13
13
  export * from './replay.js';
14
14
  export * from './replayCache.js';
15
+ export * from './decisionEvents.js';
16
+ export * from './verifyDebt.js';
15
17
  export * from './store.js';
16
18
  export * from './lineage.js';
17
19
  export * from './exportSession.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -8,6 +8,8 @@
8
8
  import { type SessionEventEnvelope } from './types.js';
9
9
  import { type DerivedMessage } from './modelSurface.js';
10
10
  import { type ToolInterrupted } from './recovery.js';
11
+ import { type DecisionEventSummary } from './decisionEvents.js';
12
+ import { type VerifyDebtSummary } from './verifyDebt.js';
11
13
  export type ReplayIssueType = 'corrupt-line' | 'schema-mismatch' | 'seq-duplicate' | 'seq-gap' | 'seq-nonmonotonic';
12
14
  export interface ReplayIssue {
13
15
  type: ReplayIssueType;
@@ -82,6 +84,37 @@ export interface SessionProjection {
82
84
  issues: ReplayIssue[];
83
85
  /** Dangling tool.call events classified for crash recovery (2.x B). */
84
86
  interruptedTools: ToolInterrupted[];
87
+ /** WS1 (t133): pre-dispatch permission denials, in log order. */
88
+ permissionDenials: PermissionDenialSummary[];
89
+ /**
90
+ * WS7 slice 2 (t140): every decision point on this spine, in log order —
91
+ * the five new decision kinds plus `permission.denied` (see
92
+ * decisionEvents.ts for why the two lists are one aggregate).
93
+ */
94
+ decisionEvents: DecisionEventSummary[];
95
+ /** K1.5/F5 (t78): verify-debt slots, open + cleared, in first-open order. */
96
+ verifyDebts: VerifyDebtSummary[];
97
+ /** Per-tool tally over `tool.call` / `tool.result` (row order = first call). */
98
+ toolCallBreakdown: ToolCallTally[];
99
+ }
100
+ /** One tool's call/result counters, as replay shows them. */
101
+ export interface ToolCallTally {
102
+ tool: string;
103
+ calls: number;
104
+ results: number;
105
+ }
106
+ /**
107
+ * WS1 (t133): a `permission.denied` event, replayed. Defensive reads: an
108
+ * older writer (or a hand-edited log) with a missing field yields '' rather
109
+ * than throwing — replay must never die on telemetry.
110
+ */
111
+ export interface PermissionDenialSummary {
112
+ seq: number;
113
+ at: number;
114
+ tool: string;
115
+ matchedRuleId: string;
116
+ source: string;
117
+ reason: string;
85
118
  }
86
119
  /** Build the materialized view of a session from its (valid) events. */
87
120
  export declare function buildProjection(events: readonly SessionEventEnvelope[], issues?: ReplayIssue[]): SessionProjection;
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/session/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/session/replay.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,10 @@
7
7
  */
8
8
  import { promises as fs } from 'node:fs';
9
9
  import { SessionEventEnvelopeSchema, } from './types.js';
10
- import { deriveMessages } from './modelSurface.js';
10
+ import { deriveMessages, pairToolCalls } from './modelSurface.js';
11
11
  import { classifyInterruptedTools } from './recovery.js';
12
+ import { parseDecisionEvent } from './decisionEvents.js';
13
+ import { projectVerifyDebts } from './verifyDebt.js';
12
14
  export async function readSessionLog(filePath) {
13
15
  let content;
14
16
  try {
@@ -82,6 +84,42 @@ export function parseSessionLogLines(lines, opts = {}) {
82
84
  }
83
85
  return { events, issues, expected, linesConsumed: base + lines.length };
84
86
  }
87
+ /**
88
+ * Per-tool tally. A `tool.result` on a REAL spine carries only
89
+ * `{callId, output, ok, durationMs}` — NOT the tool name (verified on a live
90
+ * 938-event session log) — so results are attributed through `pairToolCalls`
91
+ * (the same callId rule the model surface and recovery use). A result whose
92
+ * call is not on this spine (a resumed log can start mid-turn) cannot be
93
+ * attributed and is not counted here; the aggregate `toolCalls`/`toolResults`
94
+ * counters still count it. Rows are ordered by calls desc, then name.
95
+ */
96
+ function tallyToolCalls(events) {
97
+ const byTool = new Map();
98
+ const slot = (tool) => {
99
+ const found = byTool.get(tool) ?? { tool, calls: 0, results: 0 };
100
+ byTool.set(tool, found);
101
+ return found;
102
+ };
103
+ for (const pair of pairToolCalls(events)) {
104
+ const tool = typeof pair.call.data.tool === 'string' ? pair.call.data.tool : '';
105
+ if (tool.length === 0)
106
+ continue;
107
+ slot(tool).calls += 1;
108
+ if (pair.result !== undefined)
109
+ slot(tool).results += 1;
110
+ }
111
+ return [...byTool.values()].sort((a, b) => b.calls - a.calls || a.tool.localeCompare(b.tool));
112
+ }
113
+ function parsePermissionDenial(e) {
114
+ return {
115
+ seq: e.seq,
116
+ at: e.ts,
117
+ tool: String(e.data.tool ?? ''),
118
+ matchedRuleId: String(e.data.matchedRuleId ?? ''),
119
+ source: String(e.data.source ?? ''),
120
+ reason: String(e.data.reason ?? ''),
121
+ };
122
+ }
85
123
  function parseVerification(e) {
86
124
  const raw = Array.isArray(e.data.results) ? e.data.results : [];
87
125
  const results = raw
@@ -115,6 +153,10 @@ export function buildProjection(events, issues = []) {
115
153
  replans: 0,
116
154
  issues,
117
155
  interruptedTools: classifyInterruptedTools(events),
156
+ permissionDenials: [],
157
+ decisionEvents: [],
158
+ verifyDebts: projectVerifyDebts(events),
159
+ toolCallBreakdown: tallyToolCalls(events),
118
160
  };
119
161
  for (const e of events) {
120
162
  switch (e.kind) {
@@ -155,6 +197,21 @@ export function buildProjection(events, issues = []) {
155
197
  rationale: String(e.data.rationale ?? ''),
156
198
  });
157
199
  break;
200
+ case 'permission.denied':
201
+ projection.permissionDenials.push(parsePermissionDenial(e));
202
+ // …and it IS a decision point: the WS1 denial joins the aggregate too
203
+ // (its dedicated field stays for back-compat consumers — see
204
+ // DECISION_PROJECTION_KINDS).
205
+ projection.decisionEvents.push(parseDecisionEvent(e));
206
+ break;
207
+ // WS7 slice 2 (t140): decision points. Listed explicitly (not a `default`
208
+ // guard) so "who replays ask_user.fired?" answers itself by grep.
209
+ case 'permission.asked':
210
+ case 'auto_approve.granted':
211
+ case 'jail.blocked':
212
+ case 'ask_user.fired':
213
+ case 'verify.requested':
214
+ projection.decisionEvents.push(parseDecisionEvent(e));
158
215
  break;
159
216
  }
160
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/session/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/session/replay.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,7 @@ export type SessionActor = z.infer<typeof SessionActorSchema>;
36
36
  * replay: the tolerant reader (replay.ts) reports unknown kinds as
37
37
  * `schema-mismatch` issues and skips those lines.
38
38
  */
39
- export declare const SESSION_EVENT_KINDS: readonly ["session.started", "session.resumed", "session.ended", "session.forked", "session.harness_manifest", "user.message", "assistant.message", "tool.call", "tool.result", "tool.interrupted", "session.compacted", "task.created", "task.updated", "task.contract", "task.contract_updated", "council.member", "mission.phase", "mission.replan", "mission.progress", "verification.run", "verification.evidence", "resource.epoch_started", "resource.snapshot", "resource.limit_reached", "resource.reserve_entered", "resource.overrun", "graph.node_started", "graph.node_ended", "file.read", "file.applied", "file.rejected", "strict.waived", "verify.debt_open", "verify.debt_cleared", "note"];
39
+ export declare const SESSION_EVENT_KINDS: readonly ["session.started", "session.resumed", "session.ended", "session.forked", "session.harness_manifest", "user.message", "assistant.message", "tool.call", "tool.result", "tool.interrupted", "session.compacted", "task.created", "task.updated", "task.contract", "task.contract_updated", "council.member", "mission.phase", "mission.replan", "mission.progress", "verification.run", "verification.evidence", "resource.epoch_started", "resource.snapshot", "resource.limit_reached", "resource.reserve_entered", "resource.overrun", "graph.node_started", "graph.node_ended", "file.read", "file.applied", "file.rejected", "strict.waived", "verify.debt_open", "verify.debt_cleared", "permission.denied", "permission.asked", "auto_approve.granted", "jail.blocked", "ask_user.fired", "verify.requested", "note"];
40
40
  export type SessionEventKind = (typeof SESSION_EVENT_KINDS)[number];
41
41
  export declare const SessionEventEnvelopeSchema: z.ZodObject<{
42
42
  schemaVersion: z.ZodLiteral<1>;
@@ -78,6 +78,12 @@ export declare const SessionEventEnvelopeSchema: z.ZodObject<{
78
78
  "strict.waived": "strict.waived";
79
79
  "verify.debt_open": "verify.debt_open";
80
80
  "verify.debt_cleared": "verify.debt_cleared";
81
+ "permission.denied": "permission.denied";
82
+ "permission.asked": "permission.asked";
83
+ "auto_approve.granted": "auto_approve.granted";
84
+ "jail.blocked": "jail.blocked";
85
+ "ask_user.fired": "ask_user.fired";
86
+ "verify.requested": "verify.requested";
81
87
  note: "note";
82
88
  }>;
83
89
  actor: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAK7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,+qBAoEtB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0BAA0B;AAC1B,eAAO,MAAM,UAAU,EAAE,YAA+B,CAAC;AACzD,eAAO,MAAM,WAAW,EAAE,YAAgC,CAAC;AAC3D,eAAO,MAAM,YAAY,EAAE,YAAiC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAK7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,syBAwFtB,CAAC;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0BAA0B;AAC1B,eAAO,MAAM,UAAU,EAAE,YAA+B,CAAC;AACzD,eAAO,MAAM,WAAW,EAAE,YAAgC,CAAC;AAC3D,eAAO,MAAM,YAAY,EAAE,YAAiC,CAAC"}
@@ -97,6 +97,26 @@ export const SESSION_EVENT_KINDS = [
97
97
  // model-surface). Additive kinds — no SCHEMA_VERSION bump (ADR-0021).
98
98
  'verify.debt_open',
99
99
  'verify.debt_cleared',
100
+ // WS1 (t133): a pre-dispatch permission RULE denied a tool call. State-only
101
+ // (never model-surface): data = {tool, matchedRuleId, source, reason}.
102
+ // Additive kind — no SCHEMA_VERSION bump (ADR-0021): older readers report
103
+ // schema-mismatch and skip via tolerant replay; deriveMessages ignores it.
104
+ 'permission.denied',
105
+ // WS7 slice 2 (t140): DECISION-POINT telemetry — the five questions a shadow
106
+ // replay must be able to ask of a past session ("was the operator asked? was
107
+ // the call auto-approved instead? did the OS jail block the spawn? did the
108
+ // model STOP to ask the user? was a verify requested?"). State-only (never
109
+ // model-surface): they RECORD a decision the harness already took, they never
110
+ // feed it back into the loop. Payload contracts live in decisionEvents.ts
111
+ // (zod, per kind); projections land on SessionProjection.decisionEvents.
112
+ // Additive kinds — no SCHEMA_VERSION bump (ADR-0021), same tolerant-replay
113
+ // path as every kind above: an older reader reports schema-mismatch, skips
114
+ // the line, and still replays the rest of the spine.
115
+ 'permission.asked',
116
+ 'auto_approve.granted',
117
+ 'jail.blocked',
118
+ 'ask_user.fired',
119
+ 'verify.requested',
100
120
  'note',
101
121
  ];
102
122
  export const SessionEventEnvelopeSchema = z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sFAAsF;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7D,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChC,wDAAwD;IACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,yEAAyE;IACzE,6EAA6E;IAC7E,+DAA+D;IAC/D,0BAA0B;IAC1B,cAAc;IACd,mBAAmB;IACnB,WAAW;IACX,aAAa;IACb,qEAAqE;IACrE,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,cAAc;IACd,iEAAiE;IACjE,0EAA0E;IAC1E,mEAAmE;IACnE,eAAe;IACf,uBAAuB;IACvB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,6EAA6E;IAC7E,0EAA0E;IAC1E,kBAAkB;IAClB,kBAAkB;IAClB,wEAAwE;IACxE,uEAAuE;IACvE,uEAAuE;IACvE,uBAAuB;IACvB,0EAA0E;IAC1E,0EAA0E;IAC1E,2DAA2D;IAC3D,wBAAwB;IACxB,mBAAmB;IACnB,wBAAwB;IACxB,0BAA0B;IAC1B,sEAAsE;IACtE,kBAAkB;IAClB,yEAAyE;IACzE,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,oEAAoE;IACpE,6EAA6E;IAC7E,4EAA4E;IAC5E,oBAAoB;IACpB,kBAAkB;IAClB,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,sEAAsE;IACtE,WAAW;IACX,cAAc;IACd,eAAe;IACf,4EAA4E;IAC5E,0EAA0E;IAC1E,2EAA2E;IAC3E,eAAe;IACf,kEAAkE;IAClE,sEAAsE;IACtE,kBAAkB;IAClB,qBAAqB;IACrB,4EAA4E;IAC5E,uEAAuE;IACvE,0EAA0E;IAC1E,2EAA2E;IAC3E,mBAAmB;IACnB,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,8EAA8E;IAC9E,0EAA0E;IAC1E,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,qDAAqD;IACrD,kBAAkB;IAClB,sBAAsB;IACtB,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,MAAM;CACE,CAAC;AAGX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,6EAA6E;IAC7E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACjC,KAAK,EAAE,kBAAkB;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CACxC,CAAC,CAAC;AAUH,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzD,MAAM,CAAC,MAAM,WAAW,GAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * session/verifyDebt.ts — the K1.5/F5 obligation pairs, projected.
3
+ *
4
+ * `verify.debt_open` binds a task slot that must end in a passing verify (or an
5
+ * explicit waiver); `verify.debt_cleared` closes it. The runtime keeps the LIVE
6
+ * cache in `taskTool`/`runOneTurn` and WS2 renders the operator-facing view
7
+ * with an acknowledgement boundary (`src/cli/inboxSources.ts`: a debt older
8
+ * than your last reply is not an inbox item anymore).
9
+ *
10
+ * This module answers the REPLAY question instead, and answers it raw: what do
11
+ * the events on this spine say, in log order, with no operator in the loop?
12
+ * Same derive-only discipline, deliberately NO ack boundary — a shadow replay
13
+ * must see the obligation the harness carried, not the one the human still
14
+ * cares about. The two views coexist: `inboxSources` = "what still needs YOU",
15
+ * `projectVerifyDebts` = "what did the run leave unfinished".
16
+ */
17
+ import type { SessionEventEnvelope } from './types.js';
18
+ /** One debt slot, from its open (last-wins) to its first clear. */
19
+ export interface VerifyDebtSummary {
20
+ /** Slot id (`verify.debt_open`.data.taskId). */
21
+ taskId: string;
22
+ /** What the obligation was about, verbatim. */
23
+ description: string;
24
+ /** Optional one-line detail the writer attached. */
25
+ detail?: string;
26
+ openedSeq: number;
27
+ openedAt: number;
28
+ /** Absent ⇒ still OPEN at the end of the spine. */
29
+ clearedSeq?: number;
30
+ clearedAt?: number;
31
+ }
32
+ /**
33
+ * Pair the debt events of a spine. Pure: no I/O, no clock, no acknowledgement
34
+ * boundary. Re-opening a cleared slot opens it again; a `debt_cleared` with no
35
+ * matching open is ignored; a debt whose `taskId` is missing/empty is skipped
36
+ * (it cannot be paired, so claiming it would invent a slot).
37
+ */
38
+ export declare function projectVerifyDebts(events: readonly SessionEventEnvelope[]): VerifyDebtSummary[];
39
+ /** Debts never cleared by the end of the spine (`[]` ⇒ the run left nothing open). */
40
+ export declare function openVerifyDebts(debts: readonly VerifyDebtSummary[]): VerifyDebtSummary[];
41
+ //# sourceMappingURL=verifyDebt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyDebt.d.ts","sourceRoot":"","sources":["../../src/session/verifyDebt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,EAAE,CAsB/F;AAED,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAExF"}
@@ -0,0 +1,40 @@
1
+ function str(value) {
2
+ return typeof value === 'string' ? value : '';
3
+ }
4
+ /**
5
+ * Pair the debt events of a spine. Pure: no I/O, no clock, no acknowledgement
6
+ * boundary. Re-opening a cleared slot opens it again; a `debt_cleared` with no
7
+ * matching open is ignored; a debt whose `taskId` is missing/empty is skipped
8
+ * (it cannot be paired, so claiming it would invent a slot).
9
+ */
10
+ export function projectVerifyDebts(events) {
11
+ const byTask = new Map();
12
+ for (const e of events) {
13
+ const taskId = str(e.data.taskId);
14
+ if (taskId.length === 0)
15
+ continue;
16
+ if (e.kind === 'verify.debt_open') {
17
+ const detail = str(e.data.detail);
18
+ byTask.set(taskId, {
19
+ taskId,
20
+ description: str(e.data.description),
21
+ ...(detail ? { detail } : {}),
22
+ openedSeq: e.seq,
23
+ openedAt: e.ts,
24
+ });
25
+ }
26
+ else if (e.kind === 'verify.debt_cleared') {
27
+ const open = byTask.get(taskId);
28
+ if (!open || open.clearedSeq !== undefined)
29
+ continue;
30
+ open.clearedSeq = e.seq;
31
+ open.clearedAt = e.ts;
32
+ }
33
+ }
34
+ return [...byTask.values()].sort((a, b) => a.openedSeq - b.openedSeq);
35
+ }
36
+ /** Debts never cleared by the end of the spine (`[]` ⇒ the run left nothing open). */
37
+ export function openVerifyDebts(debts) {
38
+ return debts.filter((d) => d.clearedSeq === undefined);
39
+ }
40
+ //# sourceMappingURL=verifyDebt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyDebt.js","sourceRoot":"","sources":["../../src/session/verifyDebt.ts"],"names":[],"mappings":"AAiCA,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAuC;IACxE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE;gBACjB,MAAM;gBACN,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,SAAS,EAAE,CAAC,CAAC,GAAG;gBAChB,QAAQ,EAAE,CAAC,CAAC,EAAE;aACf,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;gBAAE,SAAS;YACrD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AACxE,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,KAAmC;IACjE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;AACzD,CAAC"}
package/dist/version.d.ts CHANGED
@@ -3,5 +3,5 @@
3
3
  * require.resolve('@zelari/core/package.json') (2.6.1 plan §7).
4
4
  * Kept in sync with package.json by scripts/verify-versions.mjs.
5
5
  */
6
- export declare const CORE_VERSION = "2.55.0";
6
+ export declare const CORE_VERSION = "2.57.0";
7
7
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -3,5 +3,5 @@
3
3
  * require.resolve('@zelari/core/package.json') (2.6.1 plan §7).
4
4
  * Kept in sync with package.json by scripts/verify-versions.mjs.
5
5
  */
6
- export const CORE_VERSION = '2.55.0';
6
+ export const CORE_VERSION = '2.57.0';
7
7
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zelari/core",
3
- "version": "2.55.0",
3
+ "version": "2.57.0",
4
4
  "description": "Zelari Code core library — provider-neutral agent loop (AgentHarness), multi-agent council orchestration, and built-in skills. Used by the zelari-code CLI; consumable by other agent frontends.",
5
5
  "author": "Anathema Studio <https://anathema-studio.com/>",
6
6
  "license": "Apache-2.0",