@grackle-ai/core 0.132.0 → 0.132.2

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 (40) hide show
  1. package/dist/credential-bundle.d.ts +23 -2
  2. package/dist/credential-bundle.d.ts.map +1 -1
  3. package/dist/credential-bundle.js +18 -16
  4. package/dist/credential-bundle.js.map +1 -1
  5. package/dist/event-processor.d.ts +2 -2
  6. package/dist/event-processor.d.ts.map +1 -1
  7. package/dist/event-processor.js +41 -99
  8. package/dist/event-processor.js.map +1 -1
  9. package/dist/pipe-delivery.d.ts.map +1 -1
  10. package/dist/pipe-delivery.js +2 -7
  11. package/dist/pipe-delivery.js.map +1 -1
  12. package/dist/reanimate-agent.d.ts.map +1 -1
  13. package/dist/reanimate-agent.js +7 -9
  14. package/dist/reanimate-agent.js.map +1 -1
  15. package/dist/session-recovery.d.ts +1 -1
  16. package/dist/session-recovery.d.ts.map +1 -1
  17. package/dist/session-recovery.js +12 -11
  18. package/dist/session-recovery.js.map +1 -1
  19. package/dist/signals/signal-delivery.js +2 -2
  20. package/dist/signals/signal-delivery.js.map +1 -1
  21. package/dist/task-session.d.ts.map +1 -1
  22. package/dist/task-session.js +2 -4
  23. package/dist/task-session.js.map +1 -1
  24. package/dist/test-utils/mock-database.d.ts +0 -2
  25. package/dist/test-utils/mock-database.d.ts.map +1 -1
  26. package/dist/test-utils/mock-database.js +0 -2
  27. package/dist/test-utils/mock-database.js.map +1 -1
  28. package/dist/token-push.d.ts +3 -2
  29. package/dist/token-push.d.ts.map +1 -1
  30. package/dist/token-push.js +14 -21
  31. package/dist/token-push.js.map +1 -1
  32. package/package.json +9 -9
  33. package/dist/ahp-mapper.d.ts +0 -95
  34. package/dist/ahp-mapper.d.ts.map +0 -1
  35. package/dist/ahp-mapper.js +0 -499
  36. package/dist/ahp-mapper.js.map +0 -1
  37. package/dist/ahp-session-state.d.ts +0 -169
  38. package/dist/ahp-session-state.d.ts.map +0 -1
  39. package/dist/ahp-session-state.js +0 -474
  40. package/dist/ahp-session-state.js.map +0 -1
@@ -1,499 +0,0 @@
1
- /**
2
- * AgentEvent → AHP SessionAction mapper (AHP HR1b / RFC #1292).
3
- *
4
- * Stateless function that translates a single PowerLine `AgentEvent` into one
5
- * or more AHP `SessionAction` payloads. The mapper is stateless — it requires
6
- * a `MapperContext` from the caller to track turn state and tool-call pairing.
7
- *
8
- * This mapper is an interim bridge while PowerLine still produces AgentEvents
9
- * and the AHP host eventually takes over the transport (HR8).
10
- *
11
- * @module ahp-mapper
12
- */
13
- import { ActionType, ToolCallConfirmationReason, ToolResultContentType, ResponsePartKind, } from "@grackle-ai/ahp";
14
- /** Safely parse an event's content JSON, returning a record or undefined on failure. */
15
- function safeParseContent(content) {
16
- if (!content)
17
- return undefined;
18
- try {
19
- return JSON.parse(content);
20
- }
21
- catch {
22
- return undefined;
23
- }
24
- }
25
- /** Build an ErrorInfo from a message string. */
26
- function makeErrorInfo(message) {
27
- return { message, errorType: "unknown" };
28
- }
29
- /** Build a ToolResultContent from a string. */
30
- function makeTextResult(text) {
31
- return { type: ToolResultContentType.Text, text };
32
- }
33
- /** Check whether a system event is a diagnostic (HR7) that routes to OTLP. */
34
- function isDiagnosticEvent(event) {
35
- if (event.diagnostic)
36
- return true;
37
- const parsed = safeParseContent(event.content);
38
- if (parsed) {
39
- const keys = Object.keys(parsed);
40
- if ((keys.includes("span") || keys.includes("trace") || keys.includes("level")) &&
41
- !keys.some((k) => k === "text" || k === "content" || k === "tool_name")) {
42
- return true;
43
- }
44
- }
45
- return false;
46
- }
47
- /**
48
- * Get a string field from parsed JSON content with fallbacks.
49
- * @param parsed - The parsed JSON object to look up.
50
- * @param fields - Field names to try (in order).
51
- * @param fallback - Literal fallback value if no field is found.
52
- * @returns The first found field value as a string, or the fallback.
53
- */
54
- function str(parsed, fields, fallback) {
55
- for (const field of fields) {
56
- const val = parsed[field];
57
- if (val !== undefined)
58
- return String(val);
59
- }
60
- return fallback;
61
- }
62
- /**
63
- * Map a PowerLine `AgentEvent` into AHP `SessionAction` payloads.
64
- *
65
- * | AgentEvent type | AHP action(s) | Disposition |
66
- * |-----------------|---------------|-------------|
67
- * | `turn_started` | `SessionTurnStarted` | mapped |
68
- * | `turn_complete` | `SessionTurnComplete` | mapped |
69
- * | `input_needed` | advisory only | dropped |
70
- * | `text` | `SessionResponsePart(markdown)` | mapped |
71
- * | `tool_use` | `SessionToolCallStart` + `SessionToolCallReady` | mapped |
72
- * | `tool_result` | `SessionToolCallComplete` | mapped |
73
- * | `usage` | (none — cost accumulated in `_meta`) | carried |
74
- * | `error` (in-turn) | `SessionError` | mapped |
75
- * | `error` (pre-turn) | `SessionCreationFailed` | mapped |
76
- * | `status: failed` | `SessionError` or `SessionCreationFailed` | mapped |
77
- * | `status: killed/terminated` | `SessionError` (abandoned turn) | conditional |
78
- * | `status: completed/waiting_input/running` | dropped | dropped |
79
- * | `system` (diagnostic) | dropped (OTLP telemetry) | carried |
80
- * | `system` (non-diagnostic) | `SessionResponsePart(systemNotification)` | mapped |
81
- * | `runtime_session_id` | `_meta.runtimeSessionId` | carried |
82
- */
83
- export function mapAgentEvent(event, index, context) {
84
- const actions = [];
85
- let note;
86
- const { type, content, toolCallId, turnId } = event;
87
- // Proto string fields default to "", treat empty as undefined
88
- const eventTurnId = turnId || undefined;
89
- const parsed = safeParseContent(content);
90
- const hasParsed = parsed !== undefined;
91
- switch (type) {
92
- // ─── Turn lifecycle ────────────────────────────────────────────
93
- case "turn_started": {
94
- const userMessage = hasParsed ? str(parsed, ["user_message"], content || "") : content || "";
95
- // Always derive a fresh turnId when eventTurnId is absent — don't inherit stale context.turnId
96
- const derivedTurnId = eventTurnId || `turn-${index}`;
97
- actions.push({
98
- type: ActionType.SessionTurnStarted,
99
- turnId: derivedTurnId,
100
- userMessage: { text: userMessage },
101
- });
102
- context.turnId = derivedTurnId;
103
- context.openToolCalls = [];
104
- // partCounter is NOT reset here — it increments across turns so part IDs
105
- // are globally unique within a session (part-0, part-1, … across all turns).
106
- note = {
107
- index,
108
- type: "turn_started",
109
- disposition: "mapped",
110
- detail: `Mapped to SessionTurnStarted (turnId=${context.turnId})`,
111
- };
112
- break;
113
- }
114
- case "turn_complete": {
115
- const turnId = eventTurnId || context.turnId;
116
- if (turnId) {
117
- actions.push({
118
- type: ActionType.SessionTurnComplete,
119
- turnId,
120
- });
121
- context.turnId = undefined;
122
- context.openToolCalls = [];
123
- note = {
124
- index,
125
- type: "turn_complete",
126
- disposition: "mapped",
127
- detail: `Mapped to SessionTurnComplete (turnId=${turnId})`,
128
- };
129
- }
130
- else {
131
- note = {
132
- index,
133
- type: "turn_complete",
134
- disposition: "dropped",
135
- detail: "No active turn to complete",
136
- };
137
- }
138
- break;
139
- }
140
- // ─── Dropped: advisory only ────────────────────────────────────
141
- case "input_needed": {
142
- note = {
143
- index,
144
- type: "input_needed",
145
- disposition: "dropped",
146
- detail: "Advisory event — no structured elicitation content yet",
147
- };
148
- break;
149
- }
150
- // ─── Response parts ────────────────────────────────────────────
151
- case "text": {
152
- const turnId = eventTurnId || context.turnId;
153
- if (!turnId) {
154
- note = {
155
- index,
156
- type: "text",
157
- disposition: "dropped",
158
- detail: "No active turn for text part",
159
- };
160
- break;
161
- }
162
- const partId = `part-${context.partCounter++}`;
163
- actions.push({
164
- type: ActionType.SessionResponsePart,
165
- turnId,
166
- part: {
167
- kind: ResponsePartKind.Markdown,
168
- id: partId,
169
- content: content || "",
170
- },
171
- });
172
- note = {
173
- index,
174
- type: "text",
175
- disposition: "mapped",
176
- detail: `Mapped to SessionResponsePart (partId=${partId})`,
177
- };
178
- break;
179
- }
180
- // ─── Tool calls ────────────────────────────────────────────────
181
- case "tool_use": {
182
- const turnId = eventTurnId || context.turnId;
183
- if (!turnId) {
184
- note = {
185
- index,
186
- type: "tool_use",
187
- disposition: "dropped",
188
- detail: "No active turn for tool_use",
189
- };
190
- break;
191
- }
192
- const toolCallIdValue = toolCallId || `tc-${context.partCounter++}`;
193
- const toolName = hasParsed
194
- ? str(parsed, ["tool_name", "name"], "unknown_tool")
195
- : "unknown_tool";
196
- const displayName = hasParsed ? str(parsed, ["display_name"], toolName) : toolName;
197
- const invocationMessage = hasParsed
198
- ? str(parsed, ["invocation_message"], `Running ${toolName}`)
199
- : `Running ${toolName}`;
200
- // SessionToolCallStart
201
- actions.push({
202
- type: ActionType.SessionToolCallStart,
203
- turnId,
204
- toolCallId: toolCallIdValue,
205
- toolName,
206
- displayName,
207
- });
208
- // SessionToolCallReady with auto-confirmation
209
- actions.push({
210
- type: ActionType.SessionToolCallReady,
211
- turnId,
212
- toolCallId: toolCallIdValue,
213
- invocationMessage,
214
- confirmed: ToolCallConfirmationReason.NotNeeded,
215
- });
216
- context.openToolCalls.push(toolCallIdValue);
217
- note = {
218
- index,
219
- type: "tool_use",
220
- disposition: "mapped",
221
- detail: `Mapped to SessionToolCallStart + SessionToolCallReady (toolCallId=${toolCallIdValue})`,
222
- };
223
- break;
224
- }
225
- case "tool_result": {
226
- const turnId = eventTurnId || context.turnId;
227
- if (!turnId) {
228
- note = {
229
- index,
230
- type: "tool_result",
231
- disposition: "dropped",
232
- detail: "No active turn for tool_result",
233
- };
234
- break;
235
- }
236
- // Pair by first-class toolCallId (HR3), with LIFO stack fallback
237
- const pairedToolCallId = toolCallId || context.openToolCalls.pop() || "";
238
- // Remove matched id from stack when first-class toolCallId is provided
239
- if (toolCallId) {
240
- const idx = context.openToolCalls.indexOf(toolCallId);
241
- if (idx !== -1) {
242
- context.openToolCalls.splice(idx, 1);
243
- }
244
- }
245
- if (!pairedToolCallId) {
246
- note = {
247
- index,
248
- type: "tool_result",
249
- disposition: "dropped",
250
- detail: "No matching tool call for result",
251
- };
252
- break;
253
- }
254
- const isOk = hasParsed
255
- ? "is_ok" in parsed
256
- ? parsed.is_ok === true
257
- : "success" in parsed
258
- ? parsed.success === true
259
- : true
260
- : true;
261
- const pastTenseMessage = hasParsed
262
- ? str(parsed, ["past_tense_message"], content || "")
263
- : content || "";
264
- const resultText = hasParsed ? str(parsed, ["content"], content || "") : content || "";
265
- actions.push({
266
- type: ActionType.SessionToolCallComplete,
267
- turnId,
268
- toolCallId: pairedToolCallId,
269
- result: {
270
- success: isOk,
271
- pastTenseMessage,
272
- content: isOk ? [makeTextResult(resultText)] : undefined,
273
- error: isOk ? undefined : { message: pastTenseMessage },
274
- },
275
- });
276
- // System notification for successful result
277
- if (isOk && content) {
278
- const displayText = resultText.length > 200 ? resultText.slice(0, 200) + "..." : resultText;
279
- actions.push({
280
- type: ActionType.SessionResponsePart,
281
- turnId,
282
- part: {
283
- kind: ResponsePartKind.SystemNotification,
284
- content: displayText,
285
- },
286
- });
287
- }
288
- note = {
289
- index,
290
- type: "tool_result",
291
- disposition: "mapped",
292
- detail: `Mapped to SessionToolCallComplete (toolCallId=${pairedToolCallId})`,
293
- };
294
- break;
295
- }
296
- // ─── Usage (carried via _meta) ─────────────────────────────────
297
- case "usage": {
298
- const rawCost = hasParsed ? parsed.cost_millicents : undefined;
299
- // eslint-disable-next-line eqeqeq -- `!= null` checks both null and undefined in one expression
300
- if (rawCost != null && Number.isFinite(Number(rawCost))) {
301
- const prevCost = context.metaAccumulator.costMillicents ?? 0;
302
- const cost = Number(rawCost);
303
- context.metaAccumulator.costMillicents = Math.max(0, prevCost + Math.trunc(cost));
304
- }
305
- note = {
306
- index,
307
- type: "usage",
308
- disposition: "carried",
309
- detail: `Usage tracked — costMillicents now ${context.metaAccumulator.costMillicents ?? 0}`,
310
- };
311
- break;
312
- }
313
- // ─── Errors ────────────────────────────────────────────────────
314
- case "error": {
315
- const turnId = eventTurnId || context.turnId;
316
- const errorDetail = content || "Unknown error";
317
- if (turnId) {
318
- actions.push({
319
- type: ActionType.SessionError,
320
- turnId,
321
- error: makeErrorInfo(errorDetail),
322
- });
323
- note = {
324
- index,
325
- type: "error",
326
- disposition: "mapped",
327
- detail: `Mapped to SessionError (turnId=${turnId})`,
328
- };
329
- context.turnId = undefined;
330
- }
331
- else {
332
- actions.push({
333
- type: ActionType.SessionCreationFailed,
334
- error: makeErrorInfo(errorDetail),
335
- });
336
- note = {
337
- index,
338
- type: "error",
339
- disposition: "mapped",
340
- detail: "Mapped to SessionCreationFailed (no active turn)",
341
- };
342
- }
343
- break;
344
- }
345
- // ─── Status events ─────────────────────────────────────────────
346
- case "status": {
347
- const statusContent = content || "";
348
- const turnId = eventTurnId || context.turnId;
349
- switch (statusContent) {
350
- case "failed": {
351
- if (turnId) {
352
- actions.push({
353
- type: ActionType.SessionError,
354
- turnId,
355
- error: makeErrorInfo("Session failed during turn"),
356
- });
357
- context.turnId = undefined;
358
- note = {
359
- index,
360
- type: "status",
361
- disposition: "mapped",
362
- detail: `Mapped to SessionError (status=failed, turnId=${turnId})`,
363
- };
364
- }
365
- else {
366
- actions.push({
367
- type: ActionType.SessionCreationFailed,
368
- error: makeErrorInfo("Session creation failed"),
369
- });
370
- note = {
371
- index,
372
- type: "status",
373
- disposition: "mapped",
374
- detail: "Mapped to SessionCreationFailed (status=failed)",
375
- };
376
- }
377
- break;
378
- }
379
- case "killed":
380
- case "terminated": {
381
- if (turnId) {
382
- actions.push({
383
- type: ActionType.SessionError,
384
- turnId,
385
- error: makeErrorInfo(`Session ${statusContent} during turn`),
386
- });
387
- context.turnId = undefined;
388
- context.openToolCalls = [];
389
- note = {
390
- index,
391
- type: "status",
392
- disposition: "mapped",
393
- detail: `Mapped to SessionError (status=${statusContent})`,
394
- };
395
- }
396
- else {
397
- note = {
398
- index,
399
- type: "status",
400
- disposition: "dropped",
401
- detail: `No active turn for status=${statusContent}`,
402
- };
403
- }
404
- break;
405
- }
406
- case "completed":
407
- case "waiting_input":
408
- case "running": {
409
- note = {
410
- index,
411
- type: "status",
412
- disposition: "dropped",
413
- detail: `Dropped — redundant with turn_* events (status=${statusContent})`,
414
- };
415
- break;
416
- }
417
- default: {
418
- note = {
419
- index,
420
- type: "status",
421
- disposition: "dropped",
422
- detail: `Dropped — unrecognized status (${statusContent})`,
423
- };
424
- }
425
- }
426
- break;
427
- }
428
- // ─── System events ─────────────────────────────────────────────
429
- case "system": {
430
- const turnId = eventTurnId || context.turnId;
431
- if (isDiagnosticEvent(event)) {
432
- note = {
433
- index,
434
- type: "system",
435
- disposition: "carried",
436
- detail: "Dropped — diagnostic event routes to ahp-otlp telemetry",
437
- };
438
- break;
439
- }
440
- if (turnId) {
441
- actions.push({
442
- type: ActionType.SessionResponsePart,
443
- turnId,
444
- part: {
445
- kind: ResponsePartKind.SystemNotification,
446
- content: content || "",
447
- },
448
- });
449
- note = {
450
- index,
451
- type: "system",
452
- disposition: "mapped",
453
- detail: "Mapped to SessionResponsePart(systemNotification)",
454
- };
455
- }
456
- else {
457
- note = {
458
- index,
459
- type: "system",
460
- disposition: "dropped",
461
- detail: "No active turn for system event",
462
- };
463
- }
464
- break;
465
- }
466
- // ─── Internal control events ───────────────────────────────────
467
- case "runtime_session_id": {
468
- if (content) {
469
- context.metaAccumulator.runtimeSessionId = content;
470
- note = {
471
- index,
472
- type: "runtime_session_id",
473
- disposition: "carried",
474
- detail: "Carried as _meta.runtimeSessionId",
475
- };
476
- }
477
- else {
478
- note = {
479
- index,
480
- type: "runtime_session_id",
481
- disposition: "dropped",
482
- detail: "No content to carry",
483
- };
484
- }
485
- break;
486
- }
487
- // ─── Unknown event types ───────────────────────────────────────
488
- default: {
489
- note = {
490
- index,
491
- type,
492
- disposition: "dropped",
493
- detail: `Unrecognized event type: ${type}`,
494
- };
495
- }
496
- }
497
- return { actions, note };
498
- }
499
- //# sourceMappingURL=ahp-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ahp-mapper.js","sourceRoot":"","sources":["../src/ahp-mapper.ts"],"names":[],"mappings":"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"}