@grackle-ai/common 0.132.2 → 0.133.1

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.
@@ -13,6 +13,32 @@
13
13
  * `powerline.AgentEvent` lets HR8d remove the gRPC path entirely without
14
14
  * touching the mapper.
15
15
  *
16
+ * **Wire fidelity notes (HR8d follow-up #1355):**
17
+ *
18
+ * AHP `StateAction` is a typed, normalized envelope — it deliberately does
19
+ * NOT carry the runtime-native event payload (`AgentEvent.raw`). Anything
20
+ * a consumer used to read out of `event.raw` MUST come through a
21
+ * first-class structured field on the action instead:
22
+ *
23
+ * - Tool ID pairing (was `raw.id` / `raw.tool_use_id`) → use
24
+ * `event.toolCallId`, which both the forward mapper and PowerLine's
25
+ * runtime adapters set as a first-class HR3 field.
26
+ * - Tool result success/error (was `raw.is_error`) → use
27
+ * `SessionToolCallCompleteAction.result.success`. The reverse mapper
28
+ * reconstructs a JSON content of `{is_ok, content, past_tense_message}`
29
+ * that downstream code (`EventRenderer.tsx`) can parse.
30
+ * - System-context marker (was `raw.systemContext === true`) → the
31
+ * consumer-side `event-processor.ts` injects its system-context event
32
+ * directly and sets `raw: '{"systemContext":true}'` locally, so the
33
+ * wire never has to carry it.
34
+ *
35
+ * Token / cost counters (`input_tokens`, `output_tokens`, `cost_millicents`)
36
+ * are carried via the `_meta` channel on `SessionMetaChangedAction`:
37
+ * accumulated on the producer side, emitted as a single `usage` event
38
+ * with the delta on the consumer side. Producer-side accumulation lives
39
+ * in `MapperContext.metaAccumulator`; reverse-side delta computation in
40
+ * `ahp-reverse-mapper.ts`'s `SessionMetaChanged` case.
41
+ *
16
42
  * @module ahp-mapper
17
43
  */
18
44
  import { type StateAction } from "@grackle-ai/ahp";
@@ -41,6 +67,13 @@ export interface AgentEventFields {
41
67
  turnId?: string;
42
68
  /** `true` for diagnostic system events that route to OTLP telemetry (HR7). */
43
69
  diagnostic?: boolean;
70
+ /**
71
+ * `true` when a `tool_result` reported a tool failure (#1362). Set by the
72
+ * runtime adapter from its native outcome signal; this is the authoritative
73
+ * source for `SessionToolCallComplete.result.success` (the AHP wire drops
74
+ * `raw`, where the runtimes' error flags used to live).
75
+ */
76
+ toolError?: boolean;
44
77
  /** ISO-8601 timestamp string (passed through from the runtime). */
45
78
  timestamp?: string;
46
79
  /** Raw event body — opaque to the mapper, used by JSONL persistence. */
@@ -93,6 +126,15 @@ export interface MapperContext {
93
126
  metaAccumulator: {
94
127
  /** Accumulated cost in millicents (AHP-upstream gap; rides on `_meta`). */
95
128
  costMillicents?: number;
129
+ /**
130
+ * Accumulated input tokens (HR8d follow-up #1355). Same wire treatment as
131
+ * `costMillicents` — added on every `usage` event, the reverse mapper
132
+ * emits the delta back as a `usage` event for the consumer's existing
133
+ * token-tracking pipeline (`event-processor.ts:case "usage"`).
134
+ */
135
+ inputTokens?: number;
136
+ /** Accumulated output tokens (HR8d follow-up #1355). */
137
+ outputTokens?: number;
96
138
  /** Runtime-provided session ID from the `runtime_session_id` event. */
97
139
  runtimeSessionId?: string;
98
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ahp-mapper.d.ts","sourceRoot":"","sources":["../src/ahp-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAYD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,WAAW,EAAE,WAAW,CAAC;IACzB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,EAAE;QACf,2EAA2E;QAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,uEAAuE;QACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AA2CD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,SAAS,CA4cX"}
1
+ {"version":3,"file":"ahp-mapper.d.ts","sourceRoot":"","sources":["../src/ahp-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAYD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,WAAW,EAAE,WAAW,CAAC;IACzB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,EAAE;QACf,2EAA2E;QAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,wDAAwD;QACxD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,uEAAuE;QACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AA2CD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GACrB,SAAS,CA8fX"}
@@ -13,6 +13,32 @@
13
13
  * `powerline.AgentEvent` lets HR8d remove the gRPC path entirely without
14
14
  * touching the mapper.
15
15
  *
16
+ * **Wire fidelity notes (HR8d follow-up #1355):**
17
+ *
18
+ * AHP `StateAction` is a typed, normalized envelope — it deliberately does
19
+ * NOT carry the runtime-native event payload (`AgentEvent.raw`). Anything
20
+ * a consumer used to read out of `event.raw` MUST come through a
21
+ * first-class structured field on the action instead:
22
+ *
23
+ * - Tool ID pairing (was `raw.id` / `raw.tool_use_id`) → use
24
+ * `event.toolCallId`, which both the forward mapper and PowerLine's
25
+ * runtime adapters set as a first-class HR3 field.
26
+ * - Tool result success/error (was `raw.is_error`) → use
27
+ * `SessionToolCallCompleteAction.result.success`. The reverse mapper
28
+ * reconstructs a JSON content of `{is_ok, content, past_tense_message}`
29
+ * that downstream code (`EventRenderer.tsx`) can parse.
30
+ * - System-context marker (was `raw.systemContext === true`) → the
31
+ * consumer-side `event-processor.ts` injects its system-context event
32
+ * directly and sets `raw: '{"systemContext":true}'` locally, so the
33
+ * wire never has to carry it.
34
+ *
35
+ * Token / cost counters (`input_tokens`, `output_tokens`, `cost_millicents`)
36
+ * are carried via the `_meta` channel on `SessionMetaChangedAction`:
37
+ * accumulated on the producer side, emitted as a single `usage` event
38
+ * with the delta on the consumer side. Producer-side accumulation lives
39
+ * in `MapperContext.metaAccumulator`; reverse-side delta computation in
40
+ * `ahp-reverse-mapper.ts`'s `SessionMetaChanged` case.
41
+ *
16
42
  * @module ahp-mapper
17
43
  */
18
44
  import { ActionType, ToolCallConfirmationReason, ToolResultContentType, ResponsePartKind, } from "@grackle-ai/ahp";
@@ -195,13 +221,36 @@ export function mapAgentEvent(event, index, context) {
195
221
  break;
196
222
  }
197
223
  const toolCallIdValue = toolCallId || `tc-${context.partCounter++}`;
224
+ // Accept the legacy `tool` key alongside `tool_name`/`name`. Production
225
+ // runtimes (Claude Code, Copilot, Codex) serialize their tool_use content
226
+ // as `{tool, args}` — only the runScenario stub fixture uses `tool_name`.
227
+ // Without this fallback the reverse mapper sees "unknown_tool" for every
228
+ // real runtime, losing the actual tool identity on the wire.
198
229
  const toolName = hasParsed
199
- ? str(parsed, ["tool_name", "name"], "unknown_tool")
230
+ ? str(parsed, ["tool_name", "name", "tool"], "unknown_tool")
200
231
  : "unknown_tool";
201
232
  const displayName = hasParsed ? str(parsed, ["display_name"], toolName) : toolName;
202
233
  const invocationMessage = hasParsed
203
234
  ? str(parsed, ["invocation_message"], `Running ${toolName}`)
204
235
  : `Running ${toolName}`;
236
+ // Serialize args as `toolInput` (AHP-spec field on SessionToolCallReady)
237
+ // so the consumer can rehydrate them. The mapper sees several arg shapes:
238
+ // `args` (stub + Claude Code), `input` (Claude Code raw form on some
239
+ // paths), `arguments` (Copilot). Preserve the first that's present.
240
+ let toolInput;
241
+ if (hasParsed) {
242
+ const argsValue = parsed.args ??
243
+ parsed.input ??
244
+ parsed.arguments;
245
+ if (argsValue !== undefined) {
246
+ try {
247
+ toolInput = JSON.stringify(argsValue);
248
+ }
249
+ catch {
250
+ /* circular / unserializable — skip the toolInput field. */
251
+ }
252
+ }
253
+ }
205
254
  // SessionToolCallStart
206
255
  actions.push({
207
256
  type: ActionType.SessionToolCallStart,
@@ -217,6 +266,7 @@ export function mapAgentEvent(event, index, context) {
217
266
  toolCallId: toolCallIdValue,
218
267
  invocationMessage,
219
268
  confirmed: ToolCallConfirmationReason.NotNeeded,
269
+ ...(toolInput !== undefined ? { toolInput } : {}),
220
270
  });
221
271
  context.openToolCalls.push(toolCallIdValue);
222
272
  note = {
@@ -238,8 +288,15 @@ export function mapAgentEvent(event, index, context) {
238
288
  };
239
289
  break;
240
290
  }
241
- // Pair by first-class toolCallId (HR3), with LIFO stack fallback
242
- const pairedToolCallId = toolCallId || context.openToolCalls.pop() || "";
291
+ // Pair by first-class toolCallId (HR3), with LIFO stack fallback.
292
+ // HR8d: when no tool_use precedes (an "unpaired tool_result" — legal
293
+ // under the gRPC wire and exercised by the tool-result-accordion
294
+ // E2E test), synthesize an id rather than dropping. The reverse
295
+ // mapper emits a tool_result with the synthetic id, the UI's
296
+ // pairToolEvents finds no matching tool_use in `toolUseById`, and
297
+ // the event falls through to the unpaired tool-card render path
298
+ // (GenericToolCard). Dropping silently masked the event entirely.
299
+ const pairedToolCallId = toolCallId || context.openToolCalls.pop() || `tc-orphan-result-${context.partCounter++}`;
243
300
  // Remove matched id from stack when first-class toolCallId is provided
244
301
  if (toolCallId) {
245
302
  const idx = context.openToolCalls.indexOf(toolCallId);
@@ -247,22 +304,21 @@ export function mapAgentEvent(event, index, context) {
247
304
  context.openToolCalls.splice(idx, 1);
248
305
  }
249
306
  }
250
- if (!pairedToolCallId) {
251
- note = {
252
- index,
253
- type: "tool_result",
254
- disposition: "dropped",
255
- detail: "No matching tool call for result",
256
- };
257
- break;
258
- }
259
- const isOk = hasParsed
260
- ? "is_ok" in parsed
261
- ? parsed.is_ok === true
262
- : "success" in parsed
263
- ? parsed.success === true
264
- : true
265
- : true;
307
+ // The first-class `toolError` field (#1362) is authoritative — every
308
+ // runtime adapter sets it from its native outcome signal, which the AHP
309
+ // wire would otherwise lose (it doesn't carry `raw`). Fall back to the
310
+ // content `is_ok`/`success` keys only when `toolError` is absent (e.g.
311
+ // legacy/replayed events reconstructed from `content` by the reverse
312
+ // mapper), defaulting to success when nothing indicates failure.
313
+ const isOk = event.toolError !== undefined
314
+ ? !event.toolError
315
+ : hasParsed
316
+ ? "is_ok" in parsed
317
+ ? parsed.is_ok === true
318
+ : "success" in parsed
319
+ ? parsed.success === true
320
+ : true
321
+ : true;
266
322
  const pastTenseMessage = hasParsed
267
323
  ? str(parsed, ["past_tense_message"], content || "")
268
324
  : content || "";
@@ -307,11 +363,30 @@ export function mapAgentEvent(event, index, context) {
307
363
  const cost = Number(rawCost);
308
364
  context.metaAccumulator.costMillicents = Math.max(0, prevCost + Math.trunc(cost));
309
365
  }
366
+ // HR8d follow-up #1355: accumulate input/output tokens alongside cost.
367
+ // The reverse mapper emits a single `usage` event carrying whichever of
368
+ // the three deltas changed — preserves the gRPC-era event-processor
369
+ // pipeline that already reads `{input_tokens, output_tokens, cost_millicents}`
370
+ // and updates `sessions.{input_tokens, output_tokens, cost_millicents}` cumulatively.
371
+ const rawInputTokens = hasParsed ? parsed.input_tokens : undefined;
372
+ // eslint-disable-next-line eqeqeq
373
+ if (rawInputTokens != null && Number.isFinite(Number(rawInputTokens))) {
374
+ const prev = context.metaAccumulator.inputTokens ?? 0;
375
+ const v = Number(rawInputTokens);
376
+ context.metaAccumulator.inputTokens = Math.max(0, prev + Math.trunc(v));
377
+ }
378
+ const rawOutputTokens = hasParsed ? parsed.output_tokens : undefined;
379
+ // eslint-disable-next-line eqeqeq
380
+ if (rawOutputTokens != null && Number.isFinite(Number(rawOutputTokens))) {
381
+ const prev = context.metaAccumulator.outputTokens ?? 0;
382
+ const v = Number(rawOutputTokens);
383
+ context.metaAccumulator.outputTokens = Math.max(0, prev + Math.trunc(v));
384
+ }
310
385
  note = {
311
386
  index,
312
387
  type: "usage",
313
388
  disposition: "carried",
314
- detail: `Usage tracked — costMillicents now ${context.metaAccumulator.costMillicents ?? 0}`,
389
+ detail: `Usage tracked — costMillicents=${context.metaAccumulator.costMillicents ?? 0} inputTokens=${context.metaAccumulator.inputTokens ?? 0} outputTokens=${context.metaAccumulator.outputTokens ?? 0}`,
315
390
  };
316
391
  break;
317
392
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ahp-mapper.js","sourceRoot":"","sources":["../src/ahp-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,UAAU,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AAiCzB,wFAAwF;AACxF,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAgED,gDAAgD;AAChD,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAe,CAAC;AACxD,CAAC;AAED,+CAA+C;AAC/C,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAuB,CAAC;AACzE,CAAC;AAED,8EAA8E;AAC9E,SAAS,iBAAiB,CAAC,KAAuB;IAChD,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,WAAW,CAAC,EACvE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,GAAG,CAAC,MAA+B,EAAE,MAAgB,EAAE,QAAgB;IAC9E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAuB,EACvB,KAAa,EACb,OAAsB;IAEtB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,IAA6B,CAAC;IAElC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpD,8DAA8D;IAC9D,MAAM,WAAW,GAAG,MAAM,IAAI,SAAS,CAAC;IAExC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC;IAEvC,QAAQ,IAAI,EAAE,CAAC;QACb,kEAAkE;QAElE,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7F,+FAA+F;YAC/F,MAAM,aAAa,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE,CAAC;YAErD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,kBAAkB;gBACnC,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aACnC,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC;YAC/B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;YAC3B,yEAAyE;YACzE,6EAA6E;YAE7E,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,QAAQ;gBACrB,MAAM,EAAE,wCAAwC,OAAO,CAAC,MAAM,GAAG;aAClE,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,mBAAmB;oBACpC,MAAM;iBACP,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC3B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;gBAE3B,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,eAAe;oBACrB,WAAW,EAAE,QAAQ;oBACrB,MAAM,EAAE,yCAAyC,MAAM,GAAG;iBAC3D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,eAAe;oBACrB,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,4BAA4B;iBACrC,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,wDAAwD;aACjE,CAAC;YACF,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,8BAA8B;iBACvC,CAAC;gBACF,MAAM;YACR,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,mBAAmB;gBACpC,MAAM;gBACN,IAAI,EAAE;oBACJ,IAAI,EAAE,gBAAgB,CAAC,QAAQ;oBAC/B,EAAE,EAAE,MAAM;oBACV,OAAO,EAAE,OAAO,IAAI,EAAE;iBACvB;aACF,CAAC,CAAC;YAEH,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,QAAQ;gBACrB,MAAM,EAAE,yCAAyC,MAAM,GAAG;aAC3D,CAAC;YACF,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,6BAA6B;iBACtC,CAAC;gBACF,MAAM;YACR,CAAC;YAED,MAAM,eAAe,GAAG,UAAU,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,SAAS;gBACxB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC;gBACpD,CAAC,CAAC,cAAc,CAAC;YACnB,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnF,MAAM,iBAAiB,GAAG,SAAS;gBACjC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,WAAW,QAAQ,EAAE,CAAC;gBAC5D,CAAC,CAAC,WAAW,QAAQ,EAAE,CAAC;YAE1B,uBAAuB;YACvB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,oBAAoB;gBACrC,MAAM;gBACN,UAAU,EAAE,eAAe;gBAC3B,QAAQ;gBACR,WAAW;aACZ,CAAC,CAAC;YAEH,8CAA8C;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,oBAAoB;gBACrC,MAAM;gBACN,UAAU,EAAE,eAAe;gBAC3B,iBAAiB;gBACjB,SAAS,EAAE,0BAA0B,CAAC,SAAS;aAChD,CAAC,CAAC;YAEH,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE5C,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,QAAQ;gBACrB,MAAM,EAAE,qEAAqE,eAAe,GAAG;aAChG,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,gCAAgC;iBACzC,CAAC;gBACF,MAAM;YACR,CAAC;YAED,iEAAiE;YACjE,MAAM,gBAAgB,GAAG,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEzE,uEAAuE;YACvE,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,kCAAkC;iBAC3C,CAAC;gBACF,MAAM;YACR,CAAC;YAED,MAAM,IAAI,GAAG,SAAS;gBACpB,CAAC,CAAC,OAAO,IAAI,MAAM;oBACjB,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;oBACvB,CAAC,CAAC,SAAS,IAAI,MAAM;wBACnB,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI;wBACzB,CAAC,CAAC,IAAI;gBACV,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,gBAAgB,GAAG,SAAS;gBAChC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;gBACpD,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAEvF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,uBAAuB;gBACxC,MAAM;gBACN,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE;oBACN,OAAO,EAAE,IAAI;oBACb,gBAAgB;oBAChB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxD,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE;iBACxD;aACF,CAAC,CAAC;YAEH,4CAA4C;YAC5C,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC5F,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,mBAAmB;oBACpC,MAAM;oBACN,IAAI,EAAE;wBACJ,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;wBACzC,OAAO,EAAE,WAAW;qBACrB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,QAAQ;gBACrB,MAAM,EAAE,iDAAiD,gBAAgB,GAAG;aAC7E,CAAC;YACF,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,gGAAgG;YAChG,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,sCAAsC,OAAO,CAAC,eAAe,CAAC,cAAc,IAAI,CAAC,EAAE;aAC5F,CAAC;YACF,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAC7C,MAAM,WAAW,GAAG,OAAO,IAAI,eAAe,CAAC;YAE/C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,YAAY;oBAC7B,MAAM;oBACN,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC;iBAClC,CAAC,CAAC;gBACH,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,QAAQ;oBACrB,MAAM,EAAE,kCAAkC,MAAM,GAAG;iBACpD,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,qBAAqB;oBACtC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC;iBAClC,CAAC,CAAC;gBACH,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,QAAQ;oBACrB,MAAM,EAAE,kDAAkD;iBAC3D,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,aAAa,GAAG,OAAO,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAE7C,QAAQ,aAAa,EAAE,CAAC;gBACtB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,UAAU,CAAC,YAAY;4BAC7B,MAAM;4BACN,KAAK,EAAE,aAAa,CAAC,4BAA4B,CAAC;yBACnD,CAAC,CAAC;wBACH,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC3B,IAAI,GAAG;4BACL,KAAK;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,QAAQ;4BACrB,MAAM,EAAE,iDAAiD,MAAM,GAAG;yBACnE,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,UAAU,CAAC,qBAAqB;4BACtC,KAAK,EAAE,aAAa,CAAC,yBAAyB,CAAC;yBAChD,CAAC,CAAC;wBACH,IAAI,GAAG;4BACL,KAAK;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,QAAQ;4BACrB,MAAM,EAAE,iDAAiD;yBAC1D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,QAAQ,CAAC;gBACd,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,UAAU,CAAC,YAAY;4BAC7B,MAAM;4BACN,KAAK,EAAE,aAAa,CAAC,WAAW,aAAa,cAAc,CAAC;yBAC7D,CAAC,CAAC;wBACH,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC3B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;wBAC3B,IAAI,GAAG;4BACL,KAAK;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,QAAQ;4BACrB,MAAM,EAAE,kCAAkC,aAAa,GAAG;yBAC3D,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG;4BACL,KAAK;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,SAAS;4BACtB,MAAM,EAAE,6BAA6B,aAAa,EAAE;yBACrD,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,WAAW,CAAC;gBACjB,KAAK,eAAe,CAAC;gBACrB,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,GAAG;wBACL,KAAK;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,SAAS;wBACtB,MAAM,EAAE,kDAAkD,aAAa,GAAG;qBAC3E,CAAC;oBACF,MAAM;gBACR,CAAC;gBAED,OAAO,CAAC,CAAC,CAAC;oBACR,IAAI,GAAG;wBACL,KAAK;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,SAAS;wBACtB,MAAM,EAAE,kCAAkC,aAAa,GAAG;qBAC3D,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;YAE7C,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,yDAAyD;iBAClE,CAAC;gBACF,MAAM;YACR,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,UAAU,CAAC,mBAAmB;oBACpC,MAAM;oBACN,IAAI,EAAE;wBACJ,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;wBACzC,OAAO,EAAE,OAAO,IAAI,EAAE;qBACvB;iBACF,CAAC,CAAC;gBACH,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,QAAQ;oBACrB,MAAM,EAAE,mDAAmD;iBAC5D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,iCAAiC;iBAC1C,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,eAAe,CAAC,gBAAgB,GAAG,OAAO,CAAC;gBACnD,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,mCAAmC;iBAC5C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG;oBACL,KAAK;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,qBAAqB;iBAC9B,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,kEAAkE;QAElE,OAAO,CAAC,CAAC,CAAC;YACR,IAAI,GAAG;gBACL,KAAK;gBACL,IAAI;gBACJ,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,4BAA4B,IAAI,EAAE;aAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"ahp-mapper.js","sourceRoot":"","sources":["../src/ahp-mapper.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ function makeEvent(type, overrides) {
27
27
  toolCallId: overrides?.toolCallId,
28
28
  turnId: overrides?.turnId,
29
29
  diagnostic: overrides?.diagnostic,
30
+ toolError: overrides?.toolError,
30
31
  };
31
32
  }
32
33
  function assertActionType(actions, expectedType, index = 0) {
@@ -197,12 +198,20 @@ describe("tool_result", () => {
197
198
  // Should pop "tc-last" (LIFO)
198
199
  expect(context.openToolCalls).toEqual(["tc-first"]);
199
200
  });
200
- it("drops when no matching tool call", () => {
201
- const context = makeContext({ turnId: "turn-abc", openToolCalls: [] });
201
+ it("synthesizes a toolCallId when no matching tool call (HR8d)", () => {
202
+ // Pre-HR8d this dropped. Now: emit SessionToolCallComplete with a
203
+ // synthesized `tc-orphan-result-N` so the gRPC unpaired-tool_result
204
+ // behavior survives the wire flip (the consumer's reverse mapper
205
+ // emits a tool_result event, the UI's pairToolEvents finds no match
206
+ // in toolUseById and renders it via the unpaired GenericToolCard).
207
+ const context = makeContext({ turnId: "turn-abc", openToolCalls: [], partCounter: 0 });
202
208
  const event = makeEvent("tool_result", { content: "{}" });
203
209
  const result = mapAgentEvent(event, 5, context);
204
- expect(result.actions.length).toBe(0);
205
- expect(result.note?.disposition).toBe("dropped");
210
+ expect(result.note?.disposition).toBe("mapped");
211
+ expect(result.actions.length).toBeGreaterThan(0);
212
+ const complete = result.actions.find((a) => a.type === ActionType.SessionToolCallComplete);
213
+ expect(complete).toBeDefined();
214
+ expect(complete.toolCallId).toMatch(/^tc-orphan-result-/);
206
215
  });
207
216
  it("adds system notification for successful result", () => {
208
217
  const context = makeContext({
@@ -257,6 +266,47 @@ describe("usage", () => {
257
266
  // 0 is a valid (non-null) cost — accumulator should be 100 + 0 = 100
258
267
  expect(context.metaAccumulator.costMillicents).toBe(100);
259
268
  });
269
+ // HR8d follow-up #1355: input/output token plumbing
270
+ it("carries input_tokens / output_tokens into metaAccumulator alongside cost (HR8d follow-up #1355)", () => {
271
+ const context = makeContext({
272
+ metaAccumulator: { costMillicents: 100, inputTokens: 50, outputTokens: 10 },
273
+ });
274
+ const event = makeEvent("usage", {
275
+ content: JSON.stringify({ cost_millicents: 20, input_tokens: 5, output_tokens: 3 }),
276
+ });
277
+ mapAgentEvent(event, 6, context);
278
+ expect(context.metaAccumulator.costMillicents).toBe(120);
279
+ expect(context.metaAccumulator.inputTokens).toBe(55);
280
+ expect(context.metaAccumulator.outputTokens).toBe(13);
281
+ });
282
+ it("ignores non-finite input_tokens / output_tokens (HR8d follow-up #1355)", () => {
283
+ const context = makeContext();
284
+ const event = makeEvent("usage", {
285
+ content: JSON.stringify({ input_tokens: NaN, output_tokens: "abc" }),
286
+ });
287
+ mapAgentEvent(event, 6, context);
288
+ expect(context.metaAccumulator.inputTokens).toBeUndefined();
289
+ expect(context.metaAccumulator.outputTokens).toBeUndefined();
290
+ });
291
+ it("accumulates input_tokens / output_tokens with zero increments (HR8d follow-up #1355)", () => {
292
+ const context = makeContext({ metaAccumulator: { inputTokens: 7, outputTokens: 11 } });
293
+ const event = makeEvent("usage", {
294
+ content: JSON.stringify({ input_tokens: 0, output_tokens: 0 }),
295
+ });
296
+ mapAgentEvent(event, 6, context);
297
+ expect(context.metaAccumulator.inputTokens).toBe(7);
298
+ expect(context.metaAccumulator.outputTokens).toBe(11);
299
+ });
300
+ it("usage event with only token fields (no cost) still updates accumulator (HR8d follow-up #1355)", () => {
301
+ const context = makeContext();
302
+ const event = makeEvent("usage", {
303
+ content: JSON.stringify({ input_tokens: 42, output_tokens: 11 }),
304
+ });
305
+ mapAgentEvent(event, 6, context);
306
+ expect(context.metaAccumulator.costMillicents).toBeUndefined();
307
+ expect(context.metaAccumulator.inputTokens).toBe(42);
308
+ expect(context.metaAccumulator.outputTokens).toBe(11);
309
+ });
260
310
  });
261
311
  // ─── error ─────────────────────────────────────────────────────────
262
312
  describe("error", () => {
@@ -471,6 +521,51 @@ describe("branch coverage", () => {
471
521
  const ready = result.actions[1];
472
522
  expect(ready.invocationMessage).toBe("running shell `ls`");
473
523
  });
524
+ it("tool_use accepts the legacy `tool` field as a toolName alias (HR8d)", () => {
525
+ // Stub fixtures and Claude Code's tool_use events both serialize as
526
+ // `{tool, args}` rather than `{tool_name}`. Without the `tool` alias the
527
+ // forward mapper falls through to "unknown_tool" and the consumer sees
528
+ // a degraded tool card.
529
+ const context = makeContext({ turnId: "t1", partCounter: 0 });
530
+ const event = makeEvent("tool_use", { content: JSON.stringify({ tool: "echo", args: {} }) });
531
+ const result = mapAgentEvent(event, 0, context);
532
+ const start = result.actions[0];
533
+ expect(start.toolName).toBe("echo");
534
+ });
535
+ it("tool_use packs `args` into SessionToolCallReady.toolInput (HR8d)", () => {
536
+ const context = makeContext({ turnId: "t1", partCounter: 0 });
537
+ const event = makeEvent("tool_use", {
538
+ content: JSON.stringify({ tool: "echo", args: { message: "hello" } }),
539
+ });
540
+ const result = mapAgentEvent(event, 0, context);
541
+ const ready = result.actions[1];
542
+ expect(ready.toolInput).toBeDefined();
543
+ expect(JSON.parse(ready.toolInput)).toEqual({ message: "hello" });
544
+ });
545
+ it("tool_use packs `input` and `arguments` as toolInput aliases (HR8d)", () => {
546
+ // Claude Code emits `input` on some paths; Copilot emits `arguments`.
547
+ const ctx1 = makeContext({ turnId: "t1", partCounter: 0 });
548
+ const ev1 = makeEvent("tool_use", {
549
+ content: JSON.stringify({ tool: "bash", input: { command: "ls" } }),
550
+ });
551
+ const r1 = mapAgentEvent(ev1, 0, ctx1);
552
+ const ready1 = r1.actions[1];
553
+ expect(JSON.parse(ready1.toolInput)).toEqual({ command: "ls" });
554
+ const ctx2 = makeContext({ turnId: "t1", partCounter: 0 });
555
+ const ev2 = makeEvent("tool_use", {
556
+ content: JSON.stringify({ tool: "search", arguments: { query: "foo" } }),
557
+ });
558
+ const r2 = mapAgentEvent(ev2, 0, ctx2);
559
+ const ready2 = r2.actions[1];
560
+ expect(JSON.parse(ready2.toolInput)).toEqual({ query: "foo" });
561
+ });
562
+ it("tool_use omits toolInput when no args are present (HR8d)", () => {
563
+ const context = makeContext({ turnId: "t1", partCounter: 0 });
564
+ const event = makeEvent("tool_use", { content: JSON.stringify({ tool: "ping" }) });
565
+ const result = mapAgentEvent(event, 0, context);
566
+ const ready = result.actions[1];
567
+ expect(ready.toolInput).toBeUndefined();
568
+ });
474
569
  it("tool_result with is_ok:false emits failure result with error", () => {
475
570
  const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
476
571
  const event = makeEvent("tool_result", {
@@ -505,7 +600,9 @@ describe("branch coverage", () => {
505
600
  const action = result.actions[0];
506
601
  expect(action.result.success).toBe(true);
507
602
  });
508
- it("tool_result with non-JSON content keeps default success=true", () => {
603
+ it("tool_result with non-JSON content keeps default success=true (no toolError field)", () => {
604
+ // Fallback path: when the first-class `toolError` field is absent AND the
605
+ // content isn't structured JSON, default to success.
509
606
  const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
510
607
  const event = makeEvent("tool_result", { toolCallId: "tc-1", content: "raw text result" });
511
608
  const result = mapAgentEvent(event, 0, context);
@@ -513,6 +610,49 @@ describe("branch coverage", () => {
513
610
  expect(action.result.success).toBe(true);
514
611
  expect(action.result.pastTenseMessage).toBe("raw text result");
515
612
  });
613
+ // ─── #1362: first-class toolError field is authoritative ──────────────
614
+ // Real runtimes (Claude Code, Copilot, Codex, ACP) carry the failure flag in
615
+ // `raw`, never in `content` — which the AHP wire drops. The producer lifts it
616
+ // to `toolError`; the mapper MUST read that, not the (always-absent) content
617
+ // `is_ok`. This is the regression #1359 left unaddressed on the producer side.
618
+ it("tool_result with toolError:true maps to success=false even with plain-text content", () => {
619
+ const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
620
+ const event = makeEvent("tool_result", {
621
+ toolCallId: "tc-1",
622
+ content: "bash: command not found",
623
+ toolError: true,
624
+ });
625
+ const result = mapAgentEvent(event, 0, context);
626
+ const action = result.actions[0];
627
+ expect(action.result.success).toBe(false);
628
+ expect(action.result.error?.message).toBe("bash: command not found");
629
+ // No success-only system notification when the tool failed
630
+ expect(result.actions.length).toBe(1);
631
+ });
632
+ it("tool_result with toolError:false maps to success=true", () => {
633
+ const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
634
+ const event = makeEvent("tool_result", {
635
+ toolCallId: "tc-1",
636
+ content: "file written",
637
+ toolError: false,
638
+ });
639
+ const result = mapAgentEvent(event, 0, context);
640
+ const action = result.actions[0];
641
+ expect(action.result.success).toBe(true);
642
+ });
643
+ it("toolError field overrides a conflicting content is_ok flag", () => {
644
+ // The first-class field wins over content — guards against a runtime whose
645
+ // output text happens to contain a misleading `is_ok` key.
646
+ const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
647
+ const event = makeEvent("tool_result", {
648
+ toolCallId: "tc-1",
649
+ content: JSON.stringify({ is_ok: true, content: "looks ok but failed" }),
650
+ toolError: true,
651
+ });
652
+ const result = mapAgentEvent(event, 0, context);
653
+ const action = result.actions[0];
654
+ expect(action.result.success).toBe(false);
655
+ });
516
656
  it("tool_result with no content emits no system notification", () => {
517
657
  const context = makeContext({ turnId: "t1", openToolCalls: ["tc-1"] });
518
658
  const event = makeEvent("tool_result", { toolCallId: "tc-1" });