@roj-ai/sdk 0.1.20 → 0.1.22

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 (98) hide show
  1. package/dist/core/agents/agent.d.ts.map +1 -1
  2. package/dist/core/agents/agent.js +13 -3
  3. package/dist/core/agents/agent.js.map +1 -1
  4. package/dist/core/context/state.d.ts +8 -0
  5. package/dist/core/context/state.d.ts.map +1 -1
  6. package/dist/core/context/state.js +10 -0
  7. package/dist/core/context/state.js.map +1 -1
  8. package/dist/core/events/base-event-store.d.ts.map +1 -1
  9. package/dist/core/events/base-event-store.js +2 -0
  10. package/dist/core/events/base-event-store.js.map +1 -1
  11. package/dist/core/events/metadata-utils.d.ts.map +1 -1
  12. package/dist/core/events/metadata-utils.js +2 -0
  13. package/dist/core/events/metadata-utils.js.map +1 -1
  14. package/dist/core/llm/anthropic.test.js +27 -0
  15. package/dist/core/llm/anthropic.test.js.map +1 -1
  16. package/dist/core/llm/cache-breakpoints.d.ts +19 -5
  17. package/dist/core/llm/cache-breakpoints.d.ts.map +1 -1
  18. package/dist/core/llm/cache-breakpoints.js +40 -23
  19. package/dist/core/llm/cache-breakpoints.js.map +1 -1
  20. package/dist/core/llm/cache-breakpoints.test.d.ts +2 -0
  21. package/dist/core/llm/cache-breakpoints.test.d.ts.map +1 -0
  22. package/dist/core/llm/cache-breakpoints.test.js +45 -0
  23. package/dist/core/llm/cache-breakpoints.test.js.map +1 -0
  24. package/dist/core/llm/state.d.ts +22 -0
  25. package/dist/core/llm/state.d.ts.map +1 -1
  26. package/dist/core/llm/state.js +23 -11
  27. package/dist/core/llm/state.js.map +1 -1
  28. package/dist/index.d.ts +5 -4
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/plugins/agent-status/agent-status.test.d.ts +2 -0
  33. package/dist/plugins/agent-status/agent-status.test.d.ts.map +1 -0
  34. package/dist/plugins/agent-status/agent-status.test.js +136 -0
  35. package/dist/plugins/agent-status/agent-status.test.js.map +1 -0
  36. package/dist/plugins/agent-status/plugin.d.ts +27 -0
  37. package/dist/plugins/agent-status/plugin.d.ts.map +1 -1
  38. package/dist/plugins/agent-status/plugin.js +46 -0
  39. package/dist/plugins/agent-status/plugin.js.map +1 -1
  40. package/dist/plugins/agents/plugin.d.ts.map +1 -1
  41. package/dist/plugins/agents/plugin.js +7 -1
  42. package/dist/plugins/agents/plugin.js.map +1 -1
  43. package/dist/plugins/context-compact/context-compact.integration.test.js +54 -0
  44. package/dist/plugins/context-compact/context-compact.integration.test.js.map +1 -1
  45. package/dist/plugins/context-compact/context-compactor.d.ts +2 -0
  46. package/dist/plugins/context-compact/context-compactor.d.ts.map +1 -1
  47. package/dist/plugins/context-compact/context-compactor.js +29 -0
  48. package/dist/plugins/context-compact/context-compactor.js.map +1 -1
  49. package/dist/plugins/context-compact/context-compactor.test.js +6 -0
  50. package/dist/plugins/context-compact/context-compactor.test.js.map +1 -1
  51. package/dist/plugins/limits-guard/config.d.ts +30 -0
  52. package/dist/plugins/limits-guard/config.d.ts.map +1 -1
  53. package/dist/plugins/limits-guard/index.d.ts +3 -3
  54. package/dist/plugins/limits-guard/index.d.ts.map +1 -1
  55. package/dist/plugins/limits-guard/index.js +1 -1
  56. package/dist/plugins/limits-guard/index.js.map +1 -1
  57. package/dist/plugins/limits-guard/limit-guard.d.ts +27 -1
  58. package/dist/plugins/limits-guard/limit-guard.d.ts.map +1 -1
  59. package/dist/plugins/limits-guard/limit-guard.js +67 -0
  60. package/dist/plugins/limits-guard/limit-guard.js.map +1 -1
  61. package/dist/plugins/limits-guard/limit-guard.test.js +65 -1
  62. package/dist/plugins/limits-guard/limit-guard.test.js.map +1 -1
  63. package/dist/plugins/limits-guard/limits-guard.integration.test.js +295 -1
  64. package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +1 -1
  65. package/dist/plugins/limits-guard/plugin.d.ts +23 -2
  66. package/dist/plugins/limits-guard/plugin.d.ts.map +1 -1
  67. package/dist/plugins/limits-guard/plugin.js +107 -2
  68. package/dist/plugins/limits-guard/plugin.js.map +1 -1
  69. package/dist/plugins/mailbox/plugin.d.ts.map +1 -1
  70. package/dist/plugins/mailbox/plugin.js +18 -0
  71. package/dist/plugins/mailbox/plugin.js.map +1 -1
  72. package/dist/plugins/session-stats/plugin.d.ts.map +1 -1
  73. package/dist/plugins/session-stats/plugin.js +5 -1
  74. package/dist/plugins/session-stats/plugin.js.map +1 -1
  75. package/package.json +2 -2
  76. package/src/core/agents/agent.ts +18 -2
  77. package/src/core/context/state.ts +10 -0
  78. package/src/core/events/base-event-store.ts +2 -0
  79. package/src/core/events/metadata-utils.ts +2 -0
  80. package/src/core/llm/anthropic.test.ts +34 -0
  81. package/src/core/llm/cache-breakpoints.test.ts +55 -0
  82. package/src/core/llm/cache-breakpoints.ts +39 -21
  83. package/src/core/llm/state.ts +25 -11
  84. package/src/index.ts +5 -4
  85. package/src/plugins/agent-status/agent-status.test.ts +164 -0
  86. package/src/plugins/agent-status/plugin.ts +49 -0
  87. package/src/plugins/agents/plugin.ts +7 -1
  88. package/src/plugins/context-compact/context-compact.integration.test.ts +62 -0
  89. package/src/plugins/context-compact/context-compactor.test.ts +6 -0
  90. package/src/plugins/context-compact/context-compactor.ts +31 -0
  91. package/src/plugins/limits-guard/config.ts +35 -0
  92. package/src/plugins/limits-guard/index.ts +3 -3
  93. package/src/plugins/limits-guard/limit-guard.test.ts +80 -1
  94. package/src/plugins/limits-guard/limit-guard.ts +98 -1
  95. package/src/plugins/limits-guard/limits-guard.integration.test.ts +331 -1
  96. package/src/plugins/limits-guard/plugin.ts +153 -3
  97. package/src/plugins/mailbox/plugin.ts +18 -0
  98. package/src/plugins/session-stats/plugin.ts +5 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Mark the prompt cache breakpoint on a message list.
2
+ * Mark the prompt cache breakpoints on a message list.
3
3
  *
4
4
  * Flag-based: the target message gets a `cacheControl` marker. Providers that
5
5
  * support ephemeral prompt caching (anthropic, openrouter) react to the flag
@@ -8,35 +8,52 @@
8
8
  * (text / tool_use / tool_result / image). This matches the API semantics
9
9
  * "cache the prefix up to and including this block".
10
10
  *
11
- * Target index is `messages.length - 1 - uncachedSuffixCount`. The suffix is
12
- * the tail of messages that must remain fresh (e.g. ephemeral session context
13
- * rebuilt each inference).
11
+ * Up to two breakpoints are set:
12
+ *
13
+ * 1. **Tail breakpoint** at `messages.length - 1 - uncachedSuffixCount`. The
14
+ * suffix is the tail of messages that must remain fresh (e.g. ephemeral
15
+ * session context rebuilt each inference).
16
+ *
17
+ * 2. **Stable prefix breakpoint** at `cachedPrefixCount - 1` (the last preamble
18
+ * message), set only when `cachedPrefixCount > 0`. The preamble is byte-
19
+ * identical on every call, but the prefix before the tail breakpoint churns
20
+ * turn-to-turn for compacting agents (regenerated summary, sliding recent
21
+ * window), so the tail breakpoint never produces a stable cache entry for
22
+ * the large immutable preamble. Pinning a second breakpoint at the end of
23
+ * the preamble lets Anthropic cache that prefix once and read it at 0.1× on
24
+ * every inference AND compaction call. Anthropic allows up to 4 breakpoints
25
+ * and matches the longest cached prefix, so the two coexist.
26
+ *
27
+ * If the prefix and tail indices coincide, only one breakpoint is set.
14
28
  *
15
29
  * `ttl` opts into Anthropic's 1-hour cache tier (write cost 2× input, read
16
30
  * still 0.1×). Useful for long-lived agents where the default 5-minute TTL
17
31
  * would expire between user turns. Omit for the default 5-minute tier.
18
32
  */
19
- export function applyCacheBreakpoint(messages, uncachedSuffixCount, ttl) {
20
- const idx = messages.length - 1 - uncachedSuffixCount;
21
- if (idx < 0)
22
- return messages;
33
+ export function applyCacheBreakpoint(messages, uncachedSuffixCount, ttl, cachedPrefixCount = 0) {
23
34
  const cacheControl = ttl ? { type: 'ephemeral', ttl } : { type: 'ephemeral' };
24
- const target = messages[idx];
25
35
  const result = [...messages];
26
- switch (target.role) {
27
- case 'user':
28
- result[idx] = { ...target, cacheControl };
29
- break;
30
- case 'assistant':
31
- result[idx] = { ...target, cacheControl };
32
- break;
33
- case 'system':
34
- result[idx] = { ...target, cacheControl };
35
- break;
36
- case 'tool':
37
- result[idx] = { ...target, cacheControl };
38
- break;
39
- }
36
+ const mark = (idx) => {
37
+ if (idx < 0 || idx >= result.length)
38
+ return;
39
+ const target = result[idx];
40
+ switch (target.role) {
41
+ case 'user':
42
+ case 'assistant':
43
+ case 'system':
44
+ case 'tool':
45
+ result[idx] = { ...target, cacheControl };
46
+ }
47
+ };
48
+ const tailIdx = messages.length - 1 - uncachedSuffixCount;
49
+ // Stable prefix breakpoint at the last preamble message. Pins a cache entry
50
+ // that survives turn-to-turn churn in the conversation tail (regenerated
51
+ // summary, sliding recent window), so the immutable preamble is read at 0.1×
52
+ // on every inference AND compaction call instead of being re-billed each turn.
53
+ const prefixIdx = cachedPrefixCount - 1;
54
+ if (prefixIdx !== tailIdx)
55
+ mark(prefixIdx);
56
+ mark(tailIdx);
40
57
  return result;
41
58
  }
42
59
  //# sourceMappingURL=cache-breakpoints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-breakpoints.js","sourceRoot":"","sources":["../../../src/core/llm/cache-breakpoints.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB,CACnC,QAAsB,EACtB,mBAA2B,EAC3B,GAAiB;IAEjB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,mBAAmB,CAAA;IACrD,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAA;IAE5B,MAAM,YAAY,GAA2B,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACrG,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;IAC5B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACV,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAA;YACzC,MAAK;QACN,KAAK,WAAW;YACf,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAA;YACzC,MAAK;QACN,KAAK,QAAQ;YACZ,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAA;YACzC,MAAK;QACN,KAAK,MAAM;YACV,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAA;YACzC,MAAK;IACP,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"cache-breakpoints.js","sourceRoot":"","sources":["../../../src/core/llm/cache-breakpoints.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,oBAAoB,CACnC,QAAsB,EACtB,mBAA2B,EAC3B,GAAiB,EACjB,iBAAiB,GAAG,CAAC;IAErB,MAAM,YAAY,GAA2B,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IACrG,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA;IAE5B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC5B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM;YAAE,OAAM;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW,CAAC;YACjB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM;gBACV,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,CAAA;QAC3C,CAAC;IACF,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,mBAAmB,CAAA;IACzD,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,SAAS,GAAG,iBAAiB,GAAG,CAAC,CAAA;IACvC,IAAI,SAAS,KAAK,OAAO;QAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO,CAAC,CAAA;IACb,OAAO,MAAM,CAAA;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache-breakpoints.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-breakpoints.test.d.ts","sourceRoot":"","sources":["../../../src/core/llm/cache-breakpoints.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import { applyCacheBreakpoint } from './cache-breakpoints.js';
3
+ const userMessages = (count) => Array.from({ length: count }, (_, i) => ({ role: 'user', content: `m${i}` }));
4
+ const cachedIndices = (messages) => messages.flatMap((m, i) => ('cacheControl' in m && m.cacheControl ? [i] : []));
5
+ describe('applyCacheBreakpoint', () => {
6
+ test('cachedPrefixCount = 0 → single tail breakpoint only (unchanged behaviour)', () => {
7
+ const messages = userMessages(5);
8
+ const result = applyCacheBreakpoint(messages, 1);
9
+ // tail = length - 1 - suffix = 5 - 1 - 1 = 3
10
+ expect(cachedIndices(result)).toEqual([3]);
11
+ });
12
+ test('cachedPrefixCount > 0 → two breakpoints: prefix end and tail', () => {
13
+ const messages = userMessages(10);
14
+ const result = applyCacheBreakpoint(messages, 1, undefined, 3);
15
+ // prefix = 3 - 1 = 2, tail = 10 - 1 - 1 = 8
16
+ expect(cachedIndices(result)).toEqual([2, 8]);
17
+ });
18
+ test('prefixIdx === tailIdx → only one breakpoint, no duplicate', () => {
19
+ // preamble is the whole list, no suffix: tail = 3 - 1 - 0 = 2, prefix = 3 - 1 = 2
20
+ const messages = userMessages(3);
21
+ const result = applyCacheBreakpoint(messages, 0, undefined, 3);
22
+ expect(cachedIndices(result)).toEqual([2]);
23
+ });
24
+ test('cachedPrefixCount larger than messages.length → out-of-range prefix ignored, tail still applied', () => {
25
+ const messages = userMessages(4);
26
+ const result = applyCacheBreakpoint(messages, 0, undefined, 99);
27
+ // prefix = 98 (out of range, ignored), tail = 4 - 1 - 0 = 3
28
+ expect(cachedIndices(result)).toEqual([3]);
29
+ });
30
+ test('ttl is propagated onto the marked messages', () => {
31
+ const messages = userMessages(6);
32
+ const result = applyCacheBreakpoint(messages, 0, '1h', 2);
33
+ // prefix = 1, tail = 5
34
+ for (const idx of [1, 5]) {
35
+ const m = result[idx];
36
+ expect('cacheControl' in m && m.cacheControl).toEqual({ type: 'ephemeral', ttl: '1h' });
37
+ }
38
+ });
39
+ test('does not mutate the input array', () => {
40
+ const messages = userMessages(5);
41
+ applyCacheBreakpoint(messages, 0, undefined, 2);
42
+ expect(cachedIndices(messages)).toEqual([]);
43
+ });
44
+ });
45
+ //# sourceMappingURL=cache-breakpoints.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-breakpoints.test.js","sourceRoot":"","sources":["../../../src/core/llm/cache-breakpoints.test.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,27 @@ export declare const llmEvents: import("../../core/events/types").EventsFactory<
61
61
  }, z4.core.$strip>;
62
62
  llmCallId: z4.ZodOptional<z4.core.$ZodBranded<z4.ZodString, "LLMCallId", "out">>;
63
63
  }, z4.core.$strip>;
64
+ /**
65
+ * A side-channel ("auxiliary") inference completed — e.g. the context-compact
66
+ * plugin asking the model for a summary. Unlike `inference_completed`, this
67
+ * does NOT touch conversation state; it exists purely so the call's token
68
+ * usage and cost are still accounted in session stats and metadata. Without
69
+ * it, compaction (and any other auxiliary call) would be billed but invisible.
70
+ */
71
+ auxiliary_inference_completed: z4.ZodObject<{
72
+ agentId: z4.core.$ZodBranded<z4.ZodString, "AgentId", "out">;
73
+ metrics: z4.ZodObject<{
74
+ promptTokens: z4.ZodNumber;
75
+ completionTokens: z4.ZodNumber;
76
+ totalTokens: z4.ZodNumber;
77
+ latencyMs: z4.ZodNumber;
78
+ model: z4.ZodString;
79
+ provider: z4.ZodOptional<z4.ZodString>;
80
+ cost: z4.ZodOptional<z4.ZodNumber>;
81
+ cachedTokens: z4.ZodOptional<z4.ZodNumber>;
82
+ cacheWriteTokens: z4.ZodOptional<z4.ZodNumber>;
83
+ }, z4.core.$strip>;
84
+ }, z4.core.$strip>;
64
85
  inference_failed: z4.ZodObject<{
65
86
  agentId: z4.core.$ZodBranded<z4.ZodString, "AgentId", "out">;
66
87
  error: z4.ZodString;
@@ -69,5 +90,6 @@ export declare const llmEvents: import("../../core/events/types").EventsFactory<
69
90
  }>;
70
91
  export type InferenceStartedEvent = (typeof llmEvents)['Events']['inference_started'];
71
92
  export type InferenceCompletedEvent = (typeof llmEvents)['Events']['inference_completed'];
93
+ export type AuxiliaryInferenceCompletedEvent = (typeof llmEvents)['Events']['auxiliary_inference_completed'];
72
94
  export type InferenceFailedEvent = (typeof llmEvents)['Events']['inference_failed'];
73
95
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/llm/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAUrD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,WAAW,EAAE,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAMD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCpB,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAA;AACrF,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAA;AACzF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAA"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/llm/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAUrD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,WAAW,EAAE,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qCAAqC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAkBD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqBpB;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;EAWH,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAA;AACrF,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAA;AACzF,MAAM,MAAM,gCAAgC,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,+BAA+B,CAAC,CAAA;AAC5G,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAA"}
@@ -7,6 +7,17 @@ import { llmCallIdSchema } from './schema.js';
7
7
  // ============================================================================
8
8
  // LLM events
9
9
  // ============================================================================
10
+ const llmMetricsSchema = z4.object({
11
+ promptTokens: z4.number(),
12
+ completionTokens: z4.number(),
13
+ totalTokens: z4.number(),
14
+ latencyMs: z4.number(),
15
+ model: z4.string(),
16
+ provider: z4.string().optional(),
17
+ cost: z4.number().optional(),
18
+ cachedTokens: z4.number().optional(),
19
+ cacheWriteTokens: z4.number().optional(),
20
+ });
10
21
  export const llmEvents = createEventsFactory({
11
22
  events: {
12
23
  inference_started: z4.object({
@@ -25,19 +36,20 @@ export const llmEvents = createEventsFactory({
25
36
  input: z4.unknown(),
26
37
  })),
27
38
  }),
28
- metrics: z4.object({
29
- promptTokens: z4.number(),
30
- completionTokens: z4.number(),
31
- totalTokens: z4.number(),
32
- latencyMs: z4.number(),
33
- model: z4.string(),
34
- provider: z4.string().optional(),
35
- cost: z4.number().optional(),
36
- cachedTokens: z4.number().optional(),
37
- cacheWriteTokens: z4.number().optional(),
38
- }),
39
+ metrics: llmMetricsSchema,
39
40
  llmCallId: llmCallIdSchema.optional(),
40
41
  }),
42
+ /**
43
+ * A side-channel ("auxiliary") inference completed — e.g. the context-compact
44
+ * plugin asking the model for a summary. Unlike `inference_completed`, this
45
+ * does NOT touch conversation state; it exists purely so the call's token
46
+ * usage and cost are still accounted in session stats and metadata. Without
47
+ * it, compaction (and any other auxiliary call) would be billed but invisible.
48
+ */
49
+ auxiliary_inference_completed: z4.object({
50
+ agentId: agentIdSchema,
51
+ metrics: llmMetricsSchema,
52
+ }),
41
53
  inference_failed: z4.object({
42
54
  agentId: agentIdSchema,
43
55
  error: z4.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/core/llm/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,QAAQ,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAwC7C,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,CAAC,MAAM,SAAS,GAAG,mBAAmB,CAAC;IAC5C,MAAM,EAAE;QACP,iBAAiB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAc,CAAC;YAC3C,kBAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;SAC7C,CAAC;QACF,mBAAmB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,aAAa;YACtB,kBAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;YAC7C,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC;gBACnB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;oBAC7B,EAAE,EAAE,gBAAgB;oBACpB,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;oBACjB,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;iBACnB,CAAC,CAAC;aACH,CAAC;YACF,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC;gBAClB,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE;gBACzB,gBAAgB,EAAE,EAAE,CAAC,MAAM,EAAE;gBAC7B,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE;gBACxB,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;gBACtB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;gBAClB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAChC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC5B,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACpC,gBAAgB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACxC,CAAC;YACF,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;SACrC,CAAC;QACF,gBAAgB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC3B,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;YAClB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;SACrC,CAAC;KACF;CACD,CAAC,CAAA"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/core/llm/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,QAAQ,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAwC7C,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC;IAClC,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE;IACzB,gBAAgB,EAAE,EAAE,CAAC,MAAM,EAAE;IAC7B,WAAW,EAAE,EAAE,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE;IACtB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,gBAAgB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,mBAAmB,CAAC;IAC5C,MAAM,EAAE;QACP,iBAAiB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAc,CAAC;YAC3C,kBAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;SAC7C,CAAC;QACF,mBAAmB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,aAAa;YACtB,kBAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;YAC7C,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC;gBACnB,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC;oBAC7B,EAAE,EAAE,gBAAgB;oBACpB,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE;oBACjB,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;iBACnB,CAAC,CAAC;aACH,CAAC;YACF,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;SACrC,CAAC;QACF;;;;;;WAMG;QACH,6BAA6B,EAAE,EAAE,CAAC,MAAM,CAAC;YACxC,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,gBAAgB;SACzB,CAAC;QACF,gBAAgB,EAAE,EAAE,CAAC,MAAM,CAAC;YAC3B,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE;YAClB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;SACrC,CAAC;KACF;CACD,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -60,14 +60,15 @@ export { ChatMessageId } from './plugins/user-chat/schema.js';
60
60
  export type { AskUserInputType, AskUserInputTypeSchema, AskUserOption } from './plugins/user-chat/schema.js';
61
61
  export type { BuiltinEvent } from './builtin-events.js';
62
62
  export type { AgentChatMessage, AskUserChatMessage, ChatMessage, UserChatMessage } from './plugins/user-chat/index.js';
63
- export { agentStatusPlugin } from './plugins/agent-status/plugin.js';
63
+ export { agentStatusPlugin, agentStoppedNotificationSchema } from './plugins/agent-status/plugin.js';
64
+ export type { AgentStoppedNotification } from './plugins/agent-status/plugin.js';
64
65
  export { agentsPlugin } from './plugins/agents/plugin.js';
65
66
  export type { AgentsPluginConfig } from './plugins/agents/plugin.js';
66
67
  export { contextCompactPlugin } from './plugins/context-compact/plugin.js';
67
68
  export type { ContextCompactPluginConfig } from './plugins/context-compact/plugin.js';
68
- export { limitsGuardPlugin, selectAgentCounters } from './plugins/limits-guard/plugin.js';
69
- export type { AgentCounters, LimitsAgentConfig } from './plugins/limits-guard/plugin.js';
70
- export type { AgentLimits } from './plugins/limits-guard/config.js';
69
+ export { limitsGuardPlugin, selectAgentCounters, sumSessionSpend } from './plugins/limits-guard/plugin.js';
70
+ export type { AgentCounters, BudgetExceededEvent, LimitsAgentConfig } from './plugins/limits-guard/plugin.js';
71
+ export type { AgentLimits, LimitsSessionConfig } from './plugins/limits-guard/config.js';
71
72
  export { mailboxPlugin } from './plugins/mailbox/plugin.js';
72
73
  export type { MailboxAgentConfig, MailboxPresetConfig } from './plugins/mailbox/plugin.js';
73
74
  export { resultEvictionPlugin } from './plugins/result-eviction/plugin.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -40,10 +40,10 @@ export { getAgentMailbox, selectMailboxState } from './plugins/mailbox/query.js'
40
40
  export { MessageId } from './plugins/mailbox/schema.js';
41
41
  export { ChatMessageId } from './plugins/user-chat/schema.js';
42
42
  // Plugins
43
- export { agentStatusPlugin } from './plugins/agent-status/plugin.js';
43
+ export { agentStatusPlugin, agentStoppedNotificationSchema } from './plugins/agent-status/plugin.js';
44
44
  export { agentsPlugin } from './plugins/agents/plugin.js';
45
45
  export { contextCompactPlugin } from './plugins/context-compact/plugin.js';
46
- export { limitsGuardPlugin, selectAgentCounters } from './plugins/limits-guard/plugin.js';
46
+ export { limitsGuardPlugin, selectAgentCounters, sumSessionSpend } from './plugins/limits-guard/plugin.js';
47
47
  export { mailboxPlugin } from './plugins/mailbox/plugin.js';
48
48
  export { resultEvictionPlugin } from './plugins/result-eviction/plugin.js';
49
49
  export { servicePlugin } from './plugins/services/plugin.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-status.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/agent-status/agent-status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,136 @@
1
+ import { describe, expect, it } from 'bun:test';
2
+ import { AgentId } from '../../core/agents/schema.js';
3
+ import { MockLLMProvider } from '../../core/llm/mock.js';
4
+ import { ToolCallId } from '../../core/tools/schema.js';
5
+ import { limitsGuardPlugin } from '../../plugins/limits-guard/plugin.js';
6
+ import { createMultiAgentPreset, createTestPreset, TestHarness } from '../../testing/index.js';
7
+ import { agentStatusPlugin } from './plugin.js';
8
+ const agentStatusNotifications = (session) => session.getNotifications()
9
+ .filter((n) => n.pluginName === 'agent-status' && n.type === 'agentStatus')
10
+ .map((n) => n.payload);
11
+ const agentStoppedNotifications = (session) => session.getNotifications()
12
+ .filter((n) => n.pluginName === 'agent-status' && n.type === 'agentStopped')
13
+ .map((n) => n.payload);
14
+ async function waitForAgentStatus(session, agentId, status, timeoutMs = 5000) {
15
+ const deadline = Date.now() + timeoutMs;
16
+ while (Date.now() < deadline) {
17
+ const agentState = session.state.agents.get(agentId);
18
+ if (agentState?.status === status)
19
+ return;
20
+ await new Promise((r) => setTimeout(r, 10));
21
+ }
22
+ throw new Error(`waitForAgentStatus timed out after ${timeoutMs}ms (wanted ${status}) for agent ${agentId}`);
23
+ }
24
+ describe('agent-status plugin', () => {
25
+ describe('agentStatus (existing behavior)', () => {
26
+ it('emits thinking on start and idle on completion', async () => {
27
+ const harness = new TestHarness({
28
+ presets: [createTestPreset()],
29
+ systemPlugins: [agentStatusPlugin],
30
+ llmProvider: MockLLMProvider.withFixedResponse({ content: 'Done', toolCalls: [] }),
31
+ });
32
+ const session = await harness.createSession('test');
33
+ const entryAgentId = session.getEntryAgentId();
34
+ await session.sendAndWaitForIdle('Hello');
35
+ const statuses = agentStatusNotifications(session).map((p) => p.status);
36
+ expect(statuses).toContain('thinking');
37
+ expect(statuses).toContain('idle');
38
+ // No abnormal-terminal notification for a normal completion.
39
+ expect(agentStoppedNotifications(session)).toHaveLength(0);
40
+ await harness.shutdown();
41
+ });
42
+ });
43
+ describe('agentStopped on pause', () => {
44
+ it('manual pause → agentStopped kind:paused reason:manual with message', async () => {
45
+ let orchestratorCalls = 0;
46
+ const harness = new TestHarness({
47
+ presets: [createMultiAgentPreset([{ name: 'worker', system: 'Worker agent.', tools: [], agents: [] }], { orchestratorSystem: 'Orchestrator agent.' })],
48
+ systemPlugins: [agentStatusPlugin],
49
+ mockHandler: (request) => {
50
+ if (request.systemPrompt.includes('Orchestrator')) {
51
+ orchestratorCalls++;
52
+ if (orchestratorCalls === 1) {
53
+ return {
54
+ content: null,
55
+ toolCalls: [{ id: ToolCallId('tc1'), name: 'start_worker', input: { message: 'Work' } }],
56
+ finishReason: 'stop',
57
+ metrics: MockLLMProvider.defaultMetrics(),
58
+ };
59
+ }
60
+ return { content: 'Done', toolCalls: [], finishReason: 'stop', metrics: MockLLMProvider.defaultMetrics() };
61
+ }
62
+ return { content: 'Worker done', toolCalls: [], finishReason: 'stop', metrics: MockLLMProvider.defaultMetrics() };
63
+ },
64
+ });
65
+ const session = await harness.createSession('test');
66
+ await session.sendAndWaitForIdle('Start');
67
+ // Manual pause via Session.pauseAgent — the real manual-pause API that
68
+ // runs onPause hooks (agents.pause only emits the event, no hooks).
69
+ const innerSession = session.session;
70
+ const result = await innerSession.pauseAgent(AgentId('worker_1'), 'Pausing for review');
71
+ expect(result.ok).toBe(true);
72
+ const stopped = agentStoppedNotifications(session).filter((n) => n.agentId === 'worker_1');
73
+ expect(stopped).toHaveLength(1);
74
+ expect(stopped[0].kind).toBe('paused');
75
+ expect(stopped[0].reason).toBe('manual');
76
+ expect(stopped[0].message).toBe('Pausing for review');
77
+ expect(stopped[0].definitionName).toBe('worker');
78
+ expect(typeof stopped[0].timestamp).toBe('number');
79
+ // idle agentStatus still emitted alongside.
80
+ expect(agentStatusNotifications(session).some((p) => p.agentId === 'worker_1' && p.status === 'idle')).toBe(true);
81
+ await harness.shutdown();
82
+ });
83
+ it('limits-guard hard limit → agentStopped kind:paused with reason and message', async () => {
84
+ let inferenceCount = 0;
85
+ const harness = new TestHarness({
86
+ presets: [createTestPreset({
87
+ orchestratorSystem: 'Test agent.',
88
+ orchestratorPlugins: [limitsGuardPlugin.configureAgent({ limits: { maxTurns: 2 } })],
89
+ })],
90
+ systemPlugins: [agentStatusPlugin, limitsGuardPlugin],
91
+ mockHandler: () => {
92
+ inferenceCount++;
93
+ return {
94
+ content: null,
95
+ toolCalls: [{ id: ToolCallId(`tc${inferenceCount}`), name: 'tell_user', input: { message: `Turn ${inferenceCount}` } }],
96
+ finishReason: 'stop',
97
+ metrics: MockLLMProvider.defaultMetrics(),
98
+ };
99
+ },
100
+ });
101
+ const session = await harness.createSession('test');
102
+ const entryAgentId = session.getEntryAgentId();
103
+ await session.sendMessage('Start');
104
+ await waitForAgentStatus(session, entryAgentId, 'paused');
105
+ const stopped = agentStoppedNotifications(session).filter((n) => n.agentId === String(entryAgentId));
106
+ expect(stopped.length).toBeGreaterThanOrEqual(1);
107
+ expect(stopped[0].kind).toBe('paused');
108
+ // limits-guard pauses via beforeInference {action:'pause'} → reason 'handler',
109
+ // with the human-readable budget detail in `message`.
110
+ expect(stopped[0].reason).toBe('handler');
111
+ expect(stopped[0].message).toBeTruthy();
112
+ await harness.shutdown();
113
+ });
114
+ });
115
+ describe('agentStopped on error', () => {
116
+ it('non-retryable LLM error → agentStopped kind:errored with message', async () => {
117
+ const harness = new TestHarness({
118
+ presets: [createTestPreset()],
119
+ systemPlugins: [agentStatusPlugin],
120
+ llmProvider: MockLLMProvider.withError({ type: 'invalid_request', message: 'Bad request' }),
121
+ });
122
+ const session = await harness.createSession('test');
123
+ const entryAgentId = session.getEntryAgentId();
124
+ await session.sendMessage('Trigger error');
125
+ await waitForAgentStatus(session, entryAgentId, 'errored');
126
+ const stopped = agentStoppedNotifications(session).filter((n) => n.agentId === String(entryAgentId));
127
+ expect(stopped).toHaveLength(1);
128
+ expect(stopped[0].kind).toBe('errored');
129
+ expect(stopped[0].reason).toBeUndefined();
130
+ expect(stopped[0].message).toBe('Bad request');
131
+ expect(stopped[0].definitionName).toBeDefined();
132
+ await harness.shutdown();
133
+ });
134
+ });
135
+ });
136
+ //# sourceMappingURL=agent-status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-status.test.js","sourceRoot":"","sources":["../../../src/plugins/agent-status/agent-status.test.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,33 @@
14
14
  * `idle` fires on `onComplete`, `onError`, and `onPause` — covers every terminal
15
15
  * state of an agent turn, including hard-limit pauses (limits-guard) and manual
16
16
  * `Session.pauseAgent` calls that would otherwise leave the indicator hung.
17
+ *
18
+ * Alongside the `idle` status, abnormal terminal states (pause / error) also emit
19
+ * a dedicated `agentStopped` notification carrying the pause reason / error detail,
20
+ * so consumers (e.g. a Cloudflare worker) can alert on a budget pause or crash —
21
+ * which the coarse `idle` status alone can't distinguish from a normal completion.
22
+ */
23
+ import z from 'zod/v4';
24
+ /**
25
+ * Payload for the `agentStopped` notification — emitted when an agent reaches an
26
+ * abnormal terminal state (paused or errored), as opposed to a normal idle.
17
27
  */
28
+ export declare const agentStoppedNotificationSchema: z.ZodObject<{
29
+ sessionId: z.core.$ZodBranded<z.ZodString, "SessionId", "out">;
30
+ agentId: z.core.$ZodBranded<z.ZodString, "AgentId", "out">;
31
+ definitionName: z.ZodOptional<z.ZodString>;
32
+ kind: z.ZodEnum<{
33
+ errored: "errored";
34
+ paused: "paused";
35
+ }>;
36
+ reason: z.ZodOptional<z.ZodEnum<{
37
+ limit: "limit";
38
+ handler: "handler";
39
+ manual: "manual";
40
+ }>>;
41
+ message: z.ZodOptional<z.ZodString>;
42
+ timestamp: z.ZodNumber;
43
+ }, z.core.$strip>;
44
+ export type AgentStoppedNotification = z.infer<typeof agentStoppedNotificationSchema>;
18
45
  export declare const agentStatusPlugin: import("../../core/plugins/index.js").PluginDefinition<"agent-status", void, void, {}, {}>;
19
46
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/agent-status/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,iBAAiB,wFA4ErB,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/agent-status/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,CAAC,MAAM,QAAQ,CAAA;AAKtB;;;GAGG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;iBAUzC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAErF,eAAO,MAAM,iBAAiB,wFAsGrB,CAAA"}
@@ -14,11 +14,31 @@
14
14
  * `idle` fires on `onComplete`, `onError`, and `onPause` — covers every terminal
15
15
  * state of an agent turn, including hard-limit pauses (limits-guard) and manual
16
16
  * `Session.pauseAgent` calls that would otherwise leave the indicator hung.
17
+ *
18
+ * Alongside the `idle` status, abnormal terminal states (pause / error) also emit
19
+ * a dedicated `agentStopped` notification carrying the pause reason / error detail,
20
+ * so consumers (e.g. a Cloudflare worker) can alert on a budget pause or crash —
21
+ * which the coarse `idle` status alone can't distinguish from a normal completion.
17
22
  */
18
23
  import z from 'zod/v4';
19
24
  import { agentIdSchema, protocolAgentStatusSchema } from '../../core/agents/schema.js';
20
25
  import { definePlugin } from '../../core/plugins/index.js';
21
26
  import { sessionIdSchema } from '../../core/sessions/schema.js';
27
+ /**
28
+ * Payload for the `agentStopped` notification — emitted when an agent reaches an
29
+ * abnormal terminal state (paused or errored), as opposed to a normal idle.
30
+ */
31
+ export const agentStoppedNotificationSchema = z.object({
32
+ sessionId: sessionIdSchema,
33
+ agentId: agentIdSchema,
34
+ definitionName: z.string().optional(),
35
+ kind: z.enum(['paused', 'errored']),
36
+ /** Present when kind === 'paused' — why the agent was paused. */
37
+ reason: z.enum(['limit', 'handler', 'manual']).optional(),
38
+ /** Human-readable detail (budget message / error message). */
39
+ message: z.string().optional(),
40
+ timestamp: z.number(),
41
+ });
22
42
  export const agentStatusPlugin = definePlugin('agent-status')
23
43
  .notification('agentStatus', {
24
44
  schema: z.object({
@@ -28,6 +48,9 @@ export const agentStatusPlugin = definePlugin('agent-status')
28
48
  definitionName: z.string().optional(),
29
49
  timestamp: z.number(),
30
50
  }),
51
+ })
52
+ .notification('agentStopped', {
53
+ schema: agentStoppedNotificationSchema,
31
54
  })
32
55
  .hook('onStart', async (ctx) => {
33
56
  ctx.notify('agentStatus', {
@@ -80,6 +103,15 @@ export const agentStatusPlugin = definePlugin('agent-status')
80
103
  definitionName: ctx.agentState.definitionName,
81
104
  timestamp: Date.now(),
82
105
  });
106
+ // Additive abnormal-terminal signal for alerting (e.g. worker crash alert).
107
+ ctx.notify('agentStopped', {
108
+ sessionId: ctx.sessionId,
109
+ agentId: ctx.agentId,
110
+ definitionName: ctx.agentState.definitionName,
111
+ kind: 'errored',
112
+ message: ctx.error,
113
+ timestamp: Date.now(),
114
+ });
83
115
  return null;
84
116
  })
85
117
  .hook('onPause', async (ctx) => {
@@ -93,6 +125,20 @@ export const agentStatusPlugin = definePlugin('agent-status')
93
125
  definitionName: ctx.agentState.definitionName,
94
126
  timestamp: Date.now(),
95
127
  });
128
+ // Additive abnormal-terminal signal carrying the structured pause reason and
129
+ // message. Read from agentState (set by the agent_paused reducer) rather than
130
+ // the loosely-typed `ctx.reason`, which actually carries the message string.
131
+ // A budget breach surfaces as reason:'handler' with the budget detail in
132
+ // `message` (limits-guard pauses via beforeInference `{action:'pause'}`).
133
+ ctx.notify('agentStopped', {
134
+ sessionId: ctx.sessionId,
135
+ agentId: ctx.agentId,
136
+ definitionName: ctx.agentState.definitionName,
137
+ kind: 'paused',
138
+ reason: ctx.agentState.pauseReason,
139
+ message: ctx.agentState.pauseMessage,
140
+ timestamp: Date.now(),
141
+ });
96
142
  return null;
97
143
  })
98
144
  .build();