@jini-ai/agent-runtime 0.2.1 → 0.3.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.
Files changed (194) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-protocol/acp/session.d.ts +206 -1
  3. package/dist/agent-protocol/acp/session.d.ts.map +1 -1
  4. package/dist/agent-protocol/acp/session.js +505 -350
  5. package/dist/agent-protocol/acp/session.js.map +1 -1
  6. package/dist/agent-protocol/core/json-line-stream.d.ts +53 -0
  7. package/dist/agent-protocol/core/json-line-stream.d.ts.map +1 -1
  8. package/dist/agent-protocol/core/json-line-stream.js +307 -255
  9. package/dist/agent-protocol/core/json-line-stream.js.map +1 -1
  10. package/dist/agent-protocol/pi-rpc/events.d.ts +22 -1
  11. package/dist/agent-protocol/pi-rpc/events.d.ts.map +1 -1
  12. package/dist/agent-protocol/pi-rpc/events.js +189 -153
  13. package/dist/agent-protocol/pi-rpc/events.js.map +1 -1
  14. package/dist/agent-protocol/pi-rpc/session.d.ts +39 -0
  15. package/dist/agent-protocol/pi-rpc/session.d.ts.map +1 -1
  16. package/dist/agent-protocol/pi-rpc/session.js +143 -107
  17. package/dist/agent-protocol/pi-rpc/session.js.map +1 -1
  18. package/dist/auth.js +1 -1
  19. package/dist/capabilities.d.ts +1 -1
  20. package/dist/claude-stream.d.ts +65 -2
  21. package/dist/claude-stream.d.ts.map +1 -1
  22. package/dist/claude-stream.js +569 -442
  23. package/dist/claude-stream.js.map +1 -1
  24. package/dist/defs/aider.d.ts.map +1 -1
  25. package/dist/defs/aider.js +13 -1
  26. package/dist/defs/aider.js.map +1 -1
  27. package/dist/defs/amp.d.ts.map +1 -1
  28. package/dist/defs/amp.js +16 -1
  29. package/dist/defs/amp.js.map +1 -1
  30. package/dist/defs/amr.d.ts +2 -1
  31. package/dist/defs/amr.d.ts.map +1 -1
  32. package/dist/defs/amr.js +12 -1
  33. package/dist/defs/amr.js.map +1 -1
  34. package/dist/defs/antigravity.d.ts +25 -13
  35. package/dist/defs/antigravity.d.ts.map +1 -1
  36. package/dist/defs/antigravity.js +190 -163
  37. package/dist/defs/antigravity.js.map +1 -1
  38. package/dist/defs/claude.d.ts +7 -0
  39. package/dist/defs/claude.d.ts.map +1 -1
  40. package/dist/defs/claude.js +61 -3
  41. package/dist/defs/claude.js.map +1 -1
  42. package/dist/defs/codebuddy.d.ts.map +1 -1
  43. package/dist/defs/codebuddy.js +9 -1
  44. package/dist/defs/codebuddy.js.map +1 -1
  45. package/dist/defs/codex.d.ts +1 -0
  46. package/dist/defs/codex.d.ts.map +1 -1
  47. package/dist/defs/codex.js +34 -0
  48. package/dist/defs/codex.js.map +1 -1
  49. package/dist/defs/copilot.d.ts.map +1 -1
  50. package/dist/defs/copilot.js +15 -1
  51. package/dist/defs/copilot.js.map +1 -1
  52. package/dist/defs/cursor-agent.d.ts.map +1 -1
  53. package/dist/defs/cursor-agent.js +24 -2
  54. package/dist/defs/cursor-agent.js.map +1 -1
  55. package/dist/defs/deepseek.d.ts.map +1 -1
  56. package/dist/defs/deepseek.js +12 -0
  57. package/dist/defs/deepseek.js.map +1 -1
  58. package/dist/defs/devin.d.ts +2 -1
  59. package/dist/defs/devin.d.ts.map +1 -1
  60. package/dist/defs/devin.js +12 -7
  61. package/dist/defs/devin.js.map +1 -1
  62. package/dist/defs/grok-build.d.ts.map +1 -1
  63. package/dist/defs/grok-build.js +10 -0
  64. package/dist/defs/grok-build.js.map +1 -1
  65. package/dist/defs/hermes.d.ts +1 -0
  66. package/dist/defs/hermes.d.ts.map +1 -1
  67. package/dist/defs/hermes.js +3 -0
  68. package/dist/defs/hermes.js.map +1 -1
  69. package/dist/defs/kilo.d.ts +1 -0
  70. package/dist/defs/kilo.d.ts.map +1 -1
  71. package/dist/defs/kilo.js +3 -0
  72. package/dist/defs/kilo.js.map +1 -1
  73. package/dist/defs/kimi.d.ts +1 -0
  74. package/dist/defs/kimi.d.ts.map +1 -1
  75. package/dist/defs/kimi.js +3 -0
  76. package/dist/defs/kimi.js.map +1 -1
  77. package/dist/defs/kiro.d.ts +1 -0
  78. package/dist/defs/kiro.d.ts.map +1 -1
  79. package/dist/defs/kiro.js +3 -0
  80. package/dist/defs/kiro.js.map +1 -1
  81. package/dist/defs/opencode.d.ts +4 -0
  82. package/dist/defs/opencode.d.ts.map +1 -1
  83. package/dist/defs/opencode.js +19 -0
  84. package/dist/defs/opencode.js.map +1 -1
  85. package/dist/defs/pi.d.ts +5 -1
  86. package/dist/defs/pi.d.ts.map +1 -1
  87. package/dist/defs/pi.js +16 -4
  88. package/dist/defs/pi.js.map +1 -1
  89. package/dist/defs/qoder.d.ts +1 -0
  90. package/dist/defs/qoder.d.ts.map +1 -1
  91. package/dist/defs/qoder.js +15 -0
  92. package/dist/defs/qoder.js.map +1 -1
  93. package/dist/defs/qwen.d.ts.map +1 -1
  94. package/dist/defs/qwen.js +9 -0
  95. package/dist/defs/qwen.js.map +1 -1
  96. package/dist/defs/reasonix.d.ts +5 -0
  97. package/dist/defs/reasonix.d.ts.map +1 -1
  98. package/dist/defs/reasonix.js +19 -6
  99. package/dist/defs/reasonix.js.map +1 -1
  100. package/dist/defs/shared.d.ts +31 -1
  101. package/dist/defs/shared.d.ts.map +1 -1
  102. package/dist/defs/shared.js +35 -0
  103. package/dist/defs/shared.js.map +1 -1
  104. package/dist/defs/trae-cli.d.ts +1 -0
  105. package/dist/defs/trae-cli.d.ts.map +1 -1
  106. package/dist/defs/trae-cli.js +3 -0
  107. package/dist/defs/trae-cli.js.map +1 -1
  108. package/dist/defs/vibe.d.ts +1 -0
  109. package/dist/defs/vibe.d.ts.map +1 -1
  110. package/dist/defs/vibe.js +3 -0
  111. package/dist/defs/vibe.js.map +1 -1
  112. package/dist/detection.d.ts +1 -1
  113. package/dist/detection.d.ts.map +1 -1
  114. package/dist/detection.js +7 -2
  115. package/dist/detection.js.map +1 -1
  116. package/dist/env.js +1 -1
  117. package/dist/executables.js +1 -1
  118. package/dist/index.d.ts +2 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +2 -1
  121. package/dist/index.js.map +1 -1
  122. package/dist/invocation.js +1 -1
  123. package/dist/json-event-stream.d.ts.map +1 -1
  124. package/dist/json-event-stream.js +63 -0
  125. package/dist/json-event-stream.js.map +1 -1
  126. package/dist/launch.js +1 -1
  127. package/dist/log-file.d.ts +23 -0
  128. package/dist/log-file.d.ts.map +1 -0
  129. package/dist/log-file.js +56 -0
  130. package/dist/log-file.js.map +1 -0
  131. package/dist/mcp.d.ts +1 -1
  132. package/dist/metadata.d.ts +1 -1
  133. package/dist/mmd-routes.js +1 -1
  134. package/dist/model-registry.d.ts +7 -45
  135. package/dist/model-registry.d.ts.map +1 -1
  136. package/dist/model-registry.js.map +1 -1
  137. package/dist/models.d.ts +1 -1
  138. package/dist/opencode-log.js +1 -1
  139. package/dist/paths.js +1 -1
  140. package/dist/prompt-augmenter.d.ts +1 -1
  141. package/dist/prompt-augmenter.js +1 -1
  142. package/dist/prompt-budget.d.ts +1 -1
  143. package/dist/prompt-file.js +1 -1
  144. package/dist/providers/anthropic-messages.d.ts +198 -6
  145. package/dist/providers/anthropic-messages.d.ts.map +1 -1
  146. package/dist/providers/anthropic-messages.js +318 -141
  147. package/dist/providers/anthropic-messages.js.map +1 -1
  148. package/dist/providers/azure-chat.d.ts +113 -3
  149. package/dist/providers/azure-chat.d.ts.map +1 -1
  150. package/dist/providers/azure-chat.js +114 -21
  151. package/dist/providers/azure-chat.js.map +1 -1
  152. package/dist/providers/connection-guard.d.ts +121 -1
  153. package/dist/providers/connection-guard.d.ts.map +1 -1
  154. package/dist/providers/connection-guard.js +205 -3
  155. package/dist/providers/connection-guard.js.map +1 -1
  156. package/dist/providers/connection-test.d.ts +62 -0
  157. package/dist/providers/connection-test.d.ts.map +1 -0
  158. package/dist/providers/connection-test.js +404 -0
  159. package/dist/providers/connection-test.js.map +1 -0
  160. package/dist/providers/elevenlabs.d.ts.map +1 -1
  161. package/dist/providers/elevenlabs.js +3 -2
  162. package/dist/providers/elevenlabs.js.map +1 -1
  163. package/dist/providers/google-messages.d.ts +208 -7
  164. package/dist/providers/google-messages.d.ts.map +1 -1
  165. package/dist/providers/google-messages.js +331 -105
  166. package/dist/providers/google-messages.js.map +1 -1
  167. package/dist/providers/index.d.ts +1 -0
  168. package/dist/providers/index.d.ts.map +1 -1
  169. package/dist/providers/index.js +1 -0
  170. package/dist/providers/index.js.map +1 -1
  171. package/dist/providers/model-catalog.d.ts.map +1 -1
  172. package/dist/providers/model-catalog.js +21 -0
  173. package/dist/providers/model-catalog.js.map +1 -1
  174. package/dist/providers/ollama-chat.d.ts +190 -1
  175. package/dist/providers/ollama-chat.d.ts.map +1 -1
  176. package/dist/providers/ollama-chat.js +319 -110
  177. package/dist/providers/ollama-chat.js.map +1 -1
  178. package/dist/providers/openai-chat.d.ts +222 -14
  179. package/dist/providers/openai-chat.d.ts.map +1 -1
  180. package/dist/providers/openai-chat.js +377 -128
  181. package/dist/providers/openai-chat.js.map +1 -1
  182. package/dist/providers/sse-decode.d.ts +2 -2
  183. package/dist/providers/sse-decode.js +2 -2
  184. package/dist/qoder-stream.d.ts +1 -1
  185. package/dist/qoder-stream.js +1 -1
  186. package/dist/registry.d.ts +16 -0
  187. package/dist/registry.d.ts.map +1 -1
  188. package/dist/registry.js +19 -1
  189. package/dist/registry.js.map +1 -1
  190. package/dist/resolution.js +1 -1
  191. package/dist/terminal-launch.js +1 -1
  192. package/dist/types.d.ts +181 -89
  193. package/dist/types.d.ts.map +1 -1
  194. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAc,MAAM,eAAe,CAAC;AAG5E,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACpC,CAAC;AACF;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,YAAY,GAChB,WAAW,GAAG,IAAI,CA4KpB"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG5E,yFAAyF;AACzF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACpC,CAAC;AAKF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAG7E;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAG5E;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAQzD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAU7F;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAOtH;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAM5F;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAWtG;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAGvF;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAExF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAEtF;AAMD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAQpH;AAaD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAOlG;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAQpF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAqBlF;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAOhF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAGlF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAGjF;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAW9E;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,YAAY,GAChB,WAAW,GAAG,IAAI,CAGpB"}
@@ -1,4 +1,191 @@
1
1
  import { getRecord } from './internal.js';
2
+ export function handleAgentStart(_raw, send) {
3
+ send('agent', { type: 'status', label: 'working' });
4
+ return null;
5
+ }
6
+ export function handleAgentEnd() {
7
+ return 'agent_end';
8
+ }
9
+ export function handleTurnStart(_raw, send) {
10
+ send('agent', { type: 'status', label: 'thinking' });
11
+ return null;
12
+ }
13
+ /** Extracts the subset of pi's `message.usage` fields the daemon reports as token usage. */
14
+ export function buildTokenUsage(u) {
15
+ const usage = {};
16
+ if (typeof u.input === 'number')
17
+ usage.input_tokens = u.input;
18
+ if (typeof u.output === 'number')
19
+ usage.output_tokens = u.output;
20
+ if (typeof u.cacheRead === 'number')
21
+ usage.cached_read_tokens = u.cacheRead;
22
+ if (typeof u.cacheWrite === 'number')
23
+ usage.cached_write_tokens = u.cacheWrite;
24
+ if (typeof u.totalTokens === 'number')
25
+ usage.total_tokens = u.totalTokens;
26
+ return usage;
27
+ }
28
+ export function emitTurnEndUsage(u, send, ctx) {
29
+ const usage = buildTokenUsage(u);
30
+ if (Object.keys(usage).length === 0)
31
+ return;
32
+ const cost = getRecord(u.cost);
33
+ send('agent', {
34
+ type: 'usage',
35
+ usage,
36
+ costUsd: cost?.total ?? cost?.totalCost ?? null,
37
+ durationMs: Date.now() - ctx.runStartedAt,
38
+ });
39
+ }
40
+ export function emitTurnEndErrorIfPresent(message, raw, send) {
41
+ if (message?.stopReason !== 'error')
42
+ return;
43
+ const messageText = typeof message.errorMessage === 'string' && message.errorMessage.length > 0
44
+ ? message.errorMessage
45
+ : 'Pi agent error';
46
+ send('agent', { type: 'error', message: messageText, raw });
47
+ }
48
+ export function handleTurnEnd(raw, send, ctx) {
49
+ const message = getRecord(raw.message);
50
+ const messageUsage = getRecord(message?.usage);
51
+ if (messageUsage)
52
+ emitTurnEndUsage(messageUsage, send, ctx);
53
+ emitTurnEndErrorIfPresent(message, raw, send);
54
+ return null;
55
+ }
56
+ export function handleAssistantTextDelta(ev, send, ctx) {
57
+ if (typeof ev.delta !== 'string')
58
+ return;
59
+ if (!ctx.sentFirstToken.value) {
60
+ ctx.sentFirstToken.value = true;
61
+ send('agent', {
62
+ type: 'status',
63
+ label: 'streaming',
64
+ ttftMs: Date.now() - ctx.runStartedAt,
65
+ });
66
+ }
67
+ send('agent', { type: 'text_delta', delta: ev.delta });
68
+ }
69
+ export function handleAssistantThinkingDelta(ev, send) {
70
+ if (typeof ev.delta !== 'string')
71
+ return;
72
+ send('agent', { type: 'thinking_delta', delta: ev.delta });
73
+ }
74
+ export function handleAssistantThinkingStart(_ev, send) {
75
+ send('agent', { type: 'thinking_start' });
76
+ }
77
+ export function handleAssistantThinkingEnd(_ev, send) {
78
+ send('agent', { type: 'thinking_end' });
79
+ }
80
+ // pi's RPC protocol emits a message_update with error delta when
81
+ // the model returns an error (e.g. aborted, context overflow).
82
+ // Surface it so sendAgentEvent's error-handling path sets
83
+ // agentStreamError and the run flips to `failed` on close.
84
+ export function handleAssistantError(ev, send, _ctx, raw) {
85
+ const message = typeof ev.reason === 'string' && ev.reason.length > 0
86
+ ? ev.reason
87
+ : typeof ev.delta === 'string' && ev.delta.length > 0
88
+ ? ev.delta
89
+ : 'Agent error';
90
+ send('agent', { type: 'error', message, raw });
91
+ }
92
+ const ASSISTANT_MESSAGE_EVENT_HANDLERS = {
93
+ text_delta: handleAssistantTextDelta,
94
+ thinking_delta: handleAssistantThinkingDelta,
95
+ thinking_start: handleAssistantThinkingStart,
96
+ thinking_end: handleAssistantThinkingEnd,
97
+ error: handleAssistantError,
98
+ };
99
+ export function handleMessageUpdate(raw, send, ctx) {
100
+ const assistantMessageEvent = getRecord(raw.assistantMessageEvent);
101
+ if (!assistantMessageEvent)
102
+ return null;
103
+ const ev = assistantMessageEvent;
104
+ const handler = typeof ev.type === 'string' ? ASSISTANT_MESSAGE_EVENT_HANDLERS[ev.type] : undefined;
105
+ handler?.(ev, send, ctx, raw);
106
+ return null;
107
+ }
108
+ export function handleMessageEnd() {
109
+ // message_end carries usage (already emitted from turn_end) and
110
+ // tool call blocks (already emitted from tool_execution_start).
111
+ // Nothing to extract here.
112
+ return null;
113
+ }
114
+ export function handleToolExecutionStart(raw, send) {
115
+ send('agent', {
116
+ type: 'tool_use',
117
+ id: raw.toolCallId ?? null,
118
+ name: raw.toolName ?? null,
119
+ input: raw.args ?? null,
120
+ });
121
+ return null;
122
+ }
123
+ export function handleToolExecutionEnd(raw, send) {
124
+ const result = getRecord(raw.result);
125
+ const content = result?.content;
126
+ const text = Array.isArray(content)
127
+ ? content
128
+ .map((c) => {
129
+ const item = getRecord(c);
130
+ return item?.type === 'text' ? String(item.text ?? '') : JSON.stringify(c);
131
+ })
132
+ .join('\n')
133
+ : typeof content === 'string'
134
+ ? content
135
+ : '';
136
+ send('agent', {
137
+ type: 'tool_result',
138
+ toolUseId: raw.toolCallId ?? null,
139
+ content: text,
140
+ isError: raw.isError === true,
141
+ });
142
+ return null;
143
+ }
144
+ // pi's RPC protocol can emit `extension_error` when an extension
145
+ // throws during a tool call or event handler. Surface it so the
146
+ // daemon's error-handling path (sendAgentEvent → agentStreamError)
147
+ // can flip the run to `failed` and forward a visible SSE error.
148
+ export function handleExtensionError(raw, send) {
149
+ const message = typeof raw.error === 'string' && raw.error.length > 0
150
+ ? raw.error
151
+ : 'Extension error';
152
+ send('agent', { type: 'error', message, raw });
153
+ return null;
154
+ }
155
+ export function handleCompactionStart(_raw, send) {
156
+ send('agent', { type: 'status', label: 'compacting' });
157
+ return null;
158
+ }
159
+ export function handleAutoRetryStart(_raw, send) {
160
+ send('agent', { type: 'status', label: 'retrying' });
161
+ return null;
162
+ }
163
+ export function handleAutoRetryEnd(raw, send) {
164
+ // Auto-retry exhausted — the agent is about to give up. Surface
165
+ // the final error so the daemon marks the run as failed rather
166
+ // than silently succeeding with empty output.
167
+ if (raw.success !== false)
168
+ return null;
169
+ const message = typeof raw.finalError === 'string' && raw.finalError.length > 0
170
+ ? raw.finalError
171
+ : 'Auto-retry exhausted';
172
+ send('agent', { type: 'error', message, raw });
173
+ return null;
174
+ }
175
+ const PI_RPC_EVENT_HANDLERS = {
176
+ agent_start: handleAgentStart,
177
+ agent_end: handleAgentEnd,
178
+ turn_start: handleTurnStart,
179
+ turn_end: handleTurnEnd,
180
+ message_update: handleMessageUpdate,
181
+ message_end: handleMessageEnd,
182
+ tool_execution_start: handleToolExecutionStart,
183
+ tool_execution_end: handleToolExecutionEnd,
184
+ extension_error: handleExtensionError,
185
+ compaction_start: handleCompactionStart,
186
+ auto_retry_start: handleAutoRetryStart,
187
+ auto_retry_end: handleAutoRetryEnd,
188
+ };
2
189
  /**
3
190
  * Maps a single raw pi RPC JSON object to zero or more daemon SSE events,
4
191
  * dispatching each through `send`. Returns `'agent_end'` when pi signals the
@@ -10,158 +197,7 @@ import { getRecord } from './internal.js';
10
197
  * @returns `'agent_end'` on run completion, `null` otherwise.
11
198
  */
12
199
  export function mapPiRpcEvent(raw, send, ctx) {
13
- if (raw.type === 'agent_start') {
14
- send('agent', { type: 'status', label: 'working' });
15
- return null;
16
- }
17
- if (raw.type === 'agent_end') {
18
- return 'agent_end';
19
- }
20
- if (raw.type === 'turn_start') {
21
- send('agent', { type: 'status', label: 'thinking' });
22
- return null;
23
- }
24
- if (raw.type === 'turn_end') {
25
- const message = getRecord(raw.message);
26
- const messageUsage = getRecord(message?.usage);
27
- if (messageUsage) {
28
- const u = messageUsage;
29
- const usage = {};
30
- if (typeof u.input === 'number')
31
- usage.input_tokens = u.input;
32
- if (typeof u.output === 'number')
33
- usage.output_tokens = u.output;
34
- if (typeof u.cacheRead === 'number')
35
- usage.cached_read_tokens = u.cacheRead;
36
- if (typeof u.cacheWrite === 'number')
37
- usage.cached_write_tokens = u.cacheWrite;
38
- if (typeof u.totalTokens === 'number')
39
- usage.total_tokens = u.totalTokens;
40
- if (Object.keys(usage).length > 0) {
41
- const cost = getRecord(u.cost);
42
- send('agent', {
43
- type: 'usage',
44
- usage,
45
- costUsd: cost?.total ?? cost?.totalCost ?? null,
46
- durationMs: Date.now() - ctx.runStartedAt,
47
- });
48
- }
49
- }
50
- if (message?.stopReason === 'error') {
51
- const messageText = typeof message.errorMessage === 'string' && message.errorMessage.length > 0
52
- ? message.errorMessage
53
- : 'Pi agent error';
54
- send('agent', { type: 'error', message: messageText, raw });
55
- }
56
- return null;
57
- }
58
- const assistantMessageEvent = getRecord(raw.assistantMessageEvent);
59
- if (raw.type === 'message_update' && assistantMessageEvent) {
60
- const ev = assistantMessageEvent;
61
- if (ev.type === 'text_delta' && typeof ev.delta === 'string') {
62
- if (!ctx.sentFirstToken.value) {
63
- ctx.sentFirstToken.value = true;
64
- send('agent', {
65
- type: 'status',
66
- label: 'streaming',
67
- ttftMs: Date.now() - ctx.runStartedAt,
68
- });
69
- }
70
- send('agent', { type: 'text_delta', delta: ev.delta });
71
- return null;
72
- }
73
- if (ev.type === 'thinking_delta' && typeof ev.delta === 'string') {
74
- send('agent', { type: 'thinking_delta', delta: ev.delta });
75
- return null;
76
- }
77
- if (ev.type === 'thinking_start') {
78
- send('agent', { type: 'thinking_start' });
79
- return null;
80
- }
81
- if (ev.type === 'thinking_end') {
82
- send('agent', { type: 'thinking_end' });
83
- return null;
84
- }
85
- // pi's RPC protocol emits a message_update with error delta when
86
- // the model returns an error (e.g. aborted, context overflow).
87
- // Surface it so sendAgentEvent's error-handling path sets
88
- // agentStreamError and the run flips to `failed` on close.
89
- if (ev.type === 'error') {
90
- const message = typeof ev.reason === 'string' && ev.reason.length > 0
91
- ? ev.reason
92
- : typeof ev.delta === 'string' && ev.delta.length > 0
93
- ? ev.delta
94
- : 'Agent error';
95
- send('agent', { type: 'error', message, raw });
96
- return null;
97
- }
98
- return null;
99
- }
100
- if (raw.type === 'message_end') {
101
- // message_end carries usage (already emitted from turn_end) and
102
- // tool call blocks (already emitted from tool_execution_start).
103
- // Nothing to extract here.
104
- return null;
105
- }
106
- if (raw.type === 'tool_execution_start') {
107
- send('agent', {
108
- type: 'tool_use',
109
- id: raw.toolCallId ?? null,
110
- name: raw.toolName ?? null,
111
- input: raw.args ?? null,
112
- });
113
- return null;
114
- }
115
- if (raw.type === 'tool_execution_end') {
116
- const result = getRecord(raw.result);
117
- const content = result?.content;
118
- const text = Array.isArray(content)
119
- ? content
120
- .map((c) => {
121
- const item = getRecord(c);
122
- return item?.type === 'text' ? String(item.text ?? '') : JSON.stringify(c);
123
- })
124
- .join('\n')
125
- : typeof content === 'string'
126
- ? content
127
- : '';
128
- send('agent', {
129
- type: 'tool_result',
130
- toolUseId: raw.toolCallId ?? null,
131
- content: text,
132
- isError: raw.isError === true,
133
- });
134
- return null;
135
- }
136
- // pi's RPC protocol can emit `extension_error` when an extension
137
- // throws during a tool call or event handler. Surface it so the
138
- // daemon's error-handling path (sendAgentEvent → agentStreamError)
139
- // can flip the run to `failed` and forward a visible SSE error.
140
- if (raw.type === 'extension_error') {
141
- const message = typeof raw.error === 'string' && raw.error.length > 0
142
- ? raw.error
143
- : 'Extension error';
144
- send('agent', { type: 'error', message, raw });
145
- return null;
146
- }
147
- if (raw.type === 'compaction_start') {
148
- send('agent', { type: 'status', label: 'compacting' });
149
- return null;
150
- }
151
- if (raw.type === 'auto_retry_start') {
152
- send('agent', { type: 'status', label: 'retrying' });
153
- return null;
154
- }
155
- if (raw.type === 'auto_retry_end' && raw.success === false) {
156
- // Auto-retry exhausted — the agent is about to give up. Surface
157
- // the final error so the daemon marks the run as failed rather
158
- // than silently succeeding with empty output.
159
- const message = typeof raw.finalError === 'string' && raw.finalError.length > 0
160
- ? raw.finalError
161
- : 'Auto-retry exhausted';
162
- send('agent', { type: 'error', message, raw });
163
- return null;
164
- }
165
- return null;
200
+ const handler = typeof raw.type === 'string' ? PI_RPC_EVENT_HANDLERS[raw.type] : undefined;
201
+ return handler ? handler(raw, send, ctx) : null;
166
202
  }
167
203
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/events.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAW1C,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,IAAoB;IACrE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAgB,EAAE,IAAoB;IACpE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAAE,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;IAC9D,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACjE,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAAE,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,SAAS,CAAC;IAC5E,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ;QAAE,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,UAAU,CAAC;IAC/E,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QAAE,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC;IAC1E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAa,EAAE,IAAoB,EAAE,GAAiB;IACrF,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,KAAK;QACL,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,SAAS,IAAI,IAAI;QAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAA+B,EAAE,GAAe,EAAE,IAAoB;IAC9G,IAAI,OAAO,EAAE,UAAU,KAAK,OAAO;QAAE,OAAO;IAC5C,MAAM,WAAW,GACf,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QACzE,CAAC,CAAC,OAAO,CAAC,YAAY;QACtB,CAAC,CAAC,gBAAgB,CAAC;IACvB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,IAAoB,EAAE,GAAiB;IACpF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,YAAY;QAAE,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5D,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EAAc,EAAE,IAAoB,EAAE,GAAiB;IAC9F,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IACzC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY;SACtC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,EAAc,EAAE,IAAoB;IAC/E,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IACzC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAe,EAAE,IAAoB;IAChF,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAe,EAAE,IAAoB;IAC9E,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,iEAAiE;AACjE,+DAA+D;AAC/D,0DAA0D;AAC1D,2DAA2D;AAC3D,MAAM,UAAU,oBAAoB,CAAC,EAAc,EAAE,IAAoB,EAAE,IAAkB,EAAE,GAAe;IAC5G,MAAM,OAAO,GACX,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,MAAM;QACX,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,EAAE,CAAC,KAAK;YACV,CAAC,CAAC,aAAa,CAAC;IACtB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAKD,MAAM,gCAAgC,GAA4C;IAChF,UAAU,EAAE,wBAAwB;IACpC,cAAc,EAAE,4BAA4B;IAC5C,cAAc,EAAE,4BAA4B;IAC5C,YAAY,EAAE,0BAA0B;IACxC,KAAK,EAAE,oBAAoB;CAC5B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,GAAe,EAAE,IAAoB,EAAE,GAAiB;IAC1F,MAAM,qBAAqB,GAAG,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnE,IAAI,CAAC,qBAAqB;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,EAAE,GAAG,qBAAqB,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,gEAAgE;IAChE,gEAAgE;IAChE,2BAA2B;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAe,EAAE,IAAoB;IAC5E,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QAC1B,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC1B,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;KACxB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAe,EAAE,IAAoB;IAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAChC,MAAM,IAAI,GACR,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,OAAO;aACJ,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;YAClB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;YAC3B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,EAAE,CAAC;IACX,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;QACjC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,IAAI;KAC9B,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AACjE,gEAAgE;AAChE,mEAAmE;AACnE,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,GAAe,EAAE,IAAoB;IACxE,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,GAAG,CAAC,KAAK;QACX,CAAC,CAAC,iBAAiB,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAgB,EAAE,IAAoB;IAC1E,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAgB,EAAE,IAAoB;IACzE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAe,EAAE,IAAoB;IACtE,gEAAgE;IAChE,+DAA+D;IAC/D,8CAA8C;IAC9C,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC7D,CAAC,CAAC,GAAG,CAAC,UAAU;QAChB,CAAC,CAAC,sBAAsB,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,qBAAqB,GAAsC;IAC/D,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;IAC3B,QAAQ,EAAE,aAAa;IACvB,cAAc,EAAE,mBAAmB;IACnC,WAAW,EAAE,gBAAgB;IAC7B,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB,EAAE,sBAAsB;IAC1C,eAAe,EAAE,oBAAoB;IACrC,gBAAgB,EAAE,qBAAqB;IACvC,gBAAgB,EAAE,oBAAoB;IACtC,cAAc,EAAE,kBAAkB;CACnC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAe,EACf,IAAoB,EACpB,GAAiB;IAEjB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC"}
@@ -43,6 +43,7 @@ export declare const FIRE_AND_FORGET_METHODS: Set<string>;
43
43
  * @param writable - The child process stdin stream.
44
44
  * @param raw - The parsed `extension_ui_request` RPC object from pi's stdout.
45
45
  */
46
+ export declare function firstDialogOptionResult(opts: unknown): Record<string, unknown>;
46
47
  export declare function replyExtensionUi(writable: Writable, raw: JsonRecord): void;
47
48
  /** Snapshot of `.pi/sessions/` file metadata taken before a prompt is sent. */
48
49
  export type PiSessionFileSnapshot = Map<string, {
@@ -79,6 +80,44 @@ export declare function snapshotPiSessionFiles(cwd: string | undefined): PiSessi
79
80
  * @returns Absolute path of the changed session file, or `null`.
80
81
  */
81
82
  export declare function resolveSessionPathChangedSince(cwd: string | undefined, before: PiSessionFileSnapshot): string | null;
83
+ export declare function piImageMimeType(ext: string): string;
84
+ export declare function isPathUnderRoot(realPath: string, resolvedRoot: string): boolean;
85
+ /**
86
+ * Validates and reads one candidate image path for pi's `images` prompt
87
+ * field: resolves symlinks, re-verifies the resolved path is a regular file
88
+ * under `uploadRoot`, checks the extension allowlist, and enforces the
89
+ * remaining total-byte budget. Returns `null` for any rejection or read
90
+ * failure rather than throwing, so one bad image never fails the whole run.
91
+ */
92
+ export declare function tryReadImagePayload(imgPath: unknown, uploadRoot: string | undefined, totalBytesSoFar: number): {
93
+ payload: PiImagePayload;
94
+ size: number;
95
+ } | null;
96
+ /**
97
+ * Builds pi's base64-encoded `images` prompt payload from `imagePaths`,
98
+ * subject to `MAX_IMAGE_COUNT` and `MAX_TOTAL_IMAGE_BYTES` budgets to
99
+ * prevent large synchronous base64 reads from blocking the event loop. The
100
+ * daemon's safeImages guard already validated that each path exists under
101
+ * UPLOAD_DIR; see {@link tryReadImagePayload} for the per-path re-checks.
102
+ */
103
+ export declare function buildPiImagePayloads(imagePaths: string[] | undefined, uploadRoot: string | undefined): PiImagePayload[];
104
+ /**
105
+ * Routes one `response`-type frame from pi's RPC stdout: a rejected parent
106
+ * session fails the run immediately (a resumed turn must not continue
107
+ * without its prior context); an accepted parent session triggers the
108
+ * (previously withheld) prompt send; a rejected prompt fails the run;
109
+ * anything else (an accepted prompt, an unrelated response id) is a no-op.
110
+ * Exported as a free function — it only reads its explicit params and never
111
+ * touches `attachPiRpcSession`'s other session state — so it is directly
112
+ * testable without spinning up a session.
113
+ */
114
+ export declare function handlePiResponseMessage({ raw, parentSessionRpcId, promptRpcId, fail, sendPromptCommand, }: {
115
+ raw: JsonRecord;
116
+ parentSessionRpcId: number | null;
117
+ promptRpcId: number | null;
118
+ fail: (message: string, code?: string) => void;
119
+ sendPromptCommand: () => void;
120
+ }): void;
82
121
  /**
83
122
  * Attaches the daemon's run lifecycle to an already-spawned `pi --mode rpc` child process.
84
123
  *
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/session.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGhE,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,yEAAyE;AACzE,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC;AACrC,wFAAwF;AACxF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AACF,2FAA2F;AAC3F,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,IAAI,OAAO,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AACtD,2DAA2D;AAC3D,eAAO,MAAM,wBAAwB,aAAsD,CAAC;AAC5F,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,aAMlC,CAAC;AACH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA4B1E;AACD,+EAA+E;AAC/E,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACnF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBlH;AACD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,CAMrF;AACD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,GAAG,IAAI,CASf;AACD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,GAAG,EACH,KAAK,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,aAAa,GACd,EAAE,mBAAmB,GAAG,YAAY,CAgOpC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-protocol/pi-rpc/session.ts"],"names":[],"mappings":"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"}