@yefengr/remote-pi 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +674 -0
  3. package/dist/actions/handlers.d.ts +122 -0
  4. package/dist/actions/handlers.js +160 -0
  5. package/dist/actions/handlers.js.map +1 -0
  6. package/dist/actions/registry.d.ts +39 -0
  7. package/dist/actions/registry.js +58 -0
  8. package/dist/actions/registry.js.map +1 -0
  9. package/dist/bin/supervisord.d.ts +2 -0
  10. package/dist/bin/supervisord.js +86 -0
  11. package/dist/bin/supervisord.js.map +1 -0
  12. package/dist/config.d.ts +55 -0
  13. package/dist/config.js +118 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/daemon/client.d.ts +20 -0
  16. package/dist/daemon/client.js +131 -0
  17. package/dist/daemon/client.js.map +1 -0
  18. package/dist/daemon/control_protocol.d.ts +176 -0
  19. package/dist/daemon/control_protocol.js +63 -0
  20. package/dist/daemon/control_protocol.js.map +1 -0
  21. package/dist/daemon/cron_log.d.ts +45 -0
  22. package/dist/daemon/cron_log.js +72 -0
  23. package/dist/daemon/cron_log.js.map +1 -0
  24. package/dist/daemon/cron_registry.d.ts +80 -0
  25. package/dist/daemon/cron_registry.js +194 -0
  26. package/dist/daemon/cron_registry.js.map +1 -0
  27. package/dist/daemon/id.d.ts +24 -0
  28. package/dist/daemon/id.js +36 -0
  29. package/dist/daemon/id.js.map +1 -0
  30. package/dist/daemon/install.d.ts +170 -0
  31. package/dist/daemon/install.js +547 -0
  32. package/dist/daemon/install.js.map +1 -0
  33. package/dist/daemon/registry.d.ts +63 -0
  34. package/dist/daemon/registry.js +153 -0
  35. package/dist/daemon/registry.js.map +1 -0
  36. package/dist/daemon/rpc_child.d.ts +194 -0
  37. package/dist/daemon/rpc_child.js +389 -0
  38. package/dist/daemon/rpc_child.js.map +1 -0
  39. package/dist/daemon/supervisor.d.ts +93 -0
  40. package/dist/daemon/supervisor.js +596 -0
  41. package/dist/daemon/supervisor.js.map +1 -0
  42. package/dist/extension_ui_bridge.d.ts +26 -0
  43. package/dist/extension_ui_bridge.js +341 -0
  44. package/dist/extension_ui_bridge.js.map +1 -0
  45. package/dist/index.d.ts +214 -0
  46. package/dist/index.js +5410 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/mcp/mesh_result.d.ts +10 -0
  49. package/dist/mcp/mesh_result.js +42 -0
  50. package/dist/mcp/mesh_result.js.map +1 -0
  51. package/dist/mcp/mesh_server.d.ts +16 -0
  52. package/dist/mcp/mesh_server.js +327 -0
  53. package/dist/mcp/mesh_server.js.map +1 -0
  54. package/dist/mesh/canonical.d.ts +30 -0
  55. package/dist/mesh/canonical.js +61 -0
  56. package/dist/mesh/canonical.js.map +1 -0
  57. package/dist/mesh/client.d.ts +18 -0
  58. package/dist/mesh/client.js +125 -0
  59. package/dist/mesh/client.js.map +1 -0
  60. package/dist/mesh/encoding.d.ts +38 -0
  61. package/dist/mesh/encoding.js +216 -0
  62. package/dist/mesh/encoding.js.map +1 -0
  63. package/dist/mesh/self_revoke.d.ts +73 -0
  64. package/dist/mesh/self_revoke.js +401 -0
  65. package/dist/mesh/self_revoke.js.map +1 -0
  66. package/dist/mesh/siblings.d.ts +49 -0
  67. package/dist/mesh/siblings.js +159 -0
  68. package/dist/mesh/siblings.js.map +1 -0
  69. package/dist/mesh/types.d.ts +34 -0
  70. package/dist/mesh/types.js +11 -0
  71. package/dist/mesh/types.js.map +1 -0
  72. package/dist/mesh/verify.d.ts +17 -0
  73. package/dist/mesh/verify.js +86 -0
  74. package/dist/mesh/verify.js.map +1 -0
  75. package/dist/pairing/crypto.d.ts +8 -0
  76. package/dist/pairing/crypto.js +22 -0
  77. package/dist/pairing/crypto.js.map +1 -0
  78. package/dist/pairing/qr.d.ts +59 -0
  79. package/dist/pairing/qr.js +125 -0
  80. package/dist/pairing/qr.js.map +1 -0
  81. package/dist/pairing/storage.d.ts +120 -0
  82. package/dist/pairing/storage.js +604 -0
  83. package/dist/pairing/storage.js.map +1 -0
  84. package/dist/protocol/codec.d.ts +7 -0
  85. package/dist/protocol/codec.js +49 -0
  86. package/dist/protocol/codec.js.map +1 -0
  87. package/dist/protocol/types.d.ts +393 -0
  88. package/dist/protocol/types.js +2 -0
  89. package/dist/protocol/types.js.map +1 -0
  90. package/dist/protocol/v2/codec.d.ts +26 -0
  91. package/dist/protocol/v2/codec.js +207 -0
  92. package/dist/protocol/v2/codec.js.map +1 -0
  93. package/dist/protocol/v2/index.d.ts +3 -0
  94. package/dist/protocol/v2/index.js +4 -0
  95. package/dist/protocol/v2/index.js.map +1 -0
  96. package/dist/protocol/v2/schemas.d.ts +1939 -0
  97. package/dist/protocol/v2/schemas.js +409 -0
  98. package/dist/protocol/v2/schemas.js.map +1 -0
  99. package/dist/protocol/v2/session_state.d.ts +75 -0
  100. package/dist/protocol/v2/session_state.js +176 -0
  101. package/dist/protocol/v2/session_state.js.map +1 -0
  102. package/dist/rooms.d.ts +29 -0
  103. package/dist/rooms.js +57 -0
  104. package/dist/rooms.js.map +1 -0
  105. package/dist/session/bridge.d.ts +37 -0
  106. package/dist/session/bridge.js +130 -0
  107. package/dist/session/bridge.js.map +1 -0
  108. package/dist/session/broker.d.ts +189 -0
  109. package/dist/session/broker.js +507 -0
  110. package/dist/session/broker.js.map +1 -0
  111. package/dist/session/broker_remote.d.ts +74 -0
  112. package/dist/session/broker_remote.js +583 -0
  113. package/dist/session/broker_remote.js.map +1 -0
  114. package/dist/session/cwd_lock.d.ts +33 -0
  115. package/dist/session/cwd_lock.js +126 -0
  116. package/dist/session/cwd_lock.js.map +1 -0
  117. package/dist/session/envelope.d.ts +33 -0
  118. package/dist/session/envelope.js +117 -0
  119. package/dist/session/envelope.js.map +1 -0
  120. package/dist/session/global_config.d.ts +33 -0
  121. package/dist/session/global_config.js +73 -0
  122. package/dist/session/global_config.js.map +1 -0
  123. package/dist/session/ipc.d.ts +27 -0
  124. package/dist/session/ipc.js +22 -0
  125. package/dist/session/ipc.js.map +1 -0
  126. package/dist/session/leader_election.d.ts +32 -0
  127. package/dist/session/leader_election.js +106 -0
  128. package/dist/session/leader_election.js.map +1 -0
  129. package/dist/session/local_config.d.ts +55 -0
  130. package/dist/session/local_config.js +157 -0
  131. package/dist/session/local_config.js.map +1 -0
  132. package/dist/session/mesh_node.d.ts +116 -0
  133. package/dist/session/mesh_node.js +573 -0
  134. package/dist/session/mesh_node.js.map +1 -0
  135. package/dist/session/peer.d.ts +139 -0
  136. package/dist/session/peer.js +451 -0
  137. package/dist/session/peer.js.map +1 -0
  138. package/dist/session/peer_inventory.d.ts +13 -0
  139. package/dist/session/peer_inventory.js +48 -0
  140. package/dist/session/peer_inventory.js.map +1 -0
  141. package/dist/session/peer_limits.d.ts +9 -0
  142. package/dist/session/peer_limits.js +21 -0
  143. package/dist/session/peer_limits.js.map +1 -0
  144. package/dist/session/setup_wizard.d.ts +39 -0
  145. package/dist/session/setup_wizard.js +63 -0
  146. package/dist/session/setup_wizard.js.map +1 -0
  147. package/dist/session/tools.d.ts +24 -0
  148. package/dist/session/tools.js +252 -0
  149. package/dist/session/tools.js.map +1 -0
  150. package/dist/session/wizard.d.ts +13 -0
  151. package/dist/session/wizard.js +20 -0
  152. package/dist/session/wizard.js.map +1 -0
  153. package/dist/timeline/history.d.ts +35 -0
  154. package/dist/timeline/history.js +381 -0
  155. package/dist/timeline/history.js.map +1 -0
  156. package/dist/timeline/runtime.d.ts +76 -0
  157. package/dist/timeline/runtime.js +428 -0
  158. package/dist/timeline/runtime.js.map +1 -0
  159. package/dist/timeline/v2_service.d.ts +54 -0
  160. package/dist/timeline/v2_service.js +351 -0
  161. package/dist/timeline/v2_service.js.map +1 -0
  162. package/dist/transport/peer_channel.d.ts +57 -0
  163. package/dist/transport/peer_channel.js +170 -0
  164. package/dist/transport/peer_channel.js.map +1 -0
  165. package/dist/transport/pi_forward_client.d.ts +29 -0
  166. package/dist/transport/pi_forward_client.js +62 -0
  167. package/dist/transport/pi_forward_client.js.map +1 -0
  168. package/dist/transport/relay_client.d.ts +91 -0
  169. package/dist/transport/relay_client.js +206 -0
  170. package/dist/transport/relay_client.js.map +1 -0
  171. package/dist/ui/footer.d.ts +32 -0
  172. package/dist/ui/footer.js +34 -0
  173. package/dist/ui/footer.js.map +1 -0
  174. package/docs/daemon.md +289 -0
  175. package/package.json +87 -0
  176. package/service-templates/launchd.plist.template +35 -0
  177. package/service-templates/systemd.service.template +19 -0
  178. package/service-templates/task-launcher.vbs.template +10 -0
  179. package/service-templates/task-scheduler.xml.template +38 -0
  180. package/skills/agent-network/SKILL.md +310 -0
@@ -0,0 +1,428 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { randomUUID } from "node:crypto";
3
+ import { MarkerSchemaV2, TimelineEventSchema, } from "../protocol/v2/index.js";
4
+ export const TIMELINE_MARKER = "remote-pi:timeline-v2";
5
+ export class TimelineRuntime {
6
+ correlations = new AsyncLocalStorage();
7
+ messageCorrelations = new WeakMap();
8
+ pending = new WeakMap();
9
+ pendingByRole = {
10
+ user: [],
11
+ assistant: [],
12
+ toolResult: [],
13
+ };
14
+ published = [];
15
+ sessionManager = null;
16
+ epoch = 0;
17
+ activeGroupId = null;
18
+ active = false;
19
+ getHistoryGenerationValue;
20
+ onStarted;
21
+ onPublished;
22
+ constructor(options = {}) {
23
+ this.getHistoryGenerationValue = options.getHistoryGeneration;
24
+ this.onStarted = options.onStarted;
25
+ this.onPublished = options.onPublished;
26
+ }
27
+ attach(sessionManager) {
28
+ if (this.sessionManager === sessionManager)
29
+ return;
30
+ this.sessionManager = sessionManager;
31
+ this.resetState();
32
+ }
33
+ resetSession(sessionManager) {
34
+ this.sessionManager = sessionManager;
35
+ this.resetState();
36
+ }
37
+ resetState() {
38
+ this.epoch = 0;
39
+ this.activeGroupId = null;
40
+ this.active = false;
41
+ this.published.length = 0;
42
+ this.pendingByRole.user = [];
43
+ this.pendingByRole.assistant = [];
44
+ this.pendingByRole.toolResult = [];
45
+ }
46
+ get sessionId() {
47
+ return this.sessionManager?.getSessionId() ?? null;
48
+ }
49
+ get historyGeneration() {
50
+ if (!this.sessionManager)
51
+ return null;
52
+ return this.getHistoryGenerationValue?.() ?? this.sessionManager.getSessionId();
53
+ }
54
+ get currentEpoch() {
55
+ return this.epoch;
56
+ }
57
+ get currentGroupId() {
58
+ return this.activeGroupId;
59
+ }
60
+ getPublishedEvents() {
61
+ return [...this.published];
62
+ }
63
+ getCorrelation(message) {
64
+ return this.messageCorrelations.get(message);
65
+ }
66
+ publishSessionEntry(entry, sessionManager) {
67
+ this.attach(sessionManager);
68
+ const event = this.toSystemEvent(entry, sessionManager);
69
+ if (!event)
70
+ return null;
71
+ this.publish(event, { origin: "unknown", delivery: "unknown" });
72
+ return event;
73
+ }
74
+ runWithCorrelation(correlation, callback) {
75
+ return this.correlations.run(correlation, callback);
76
+ }
77
+ currentCorrelation() {
78
+ return this.correlations.getStore();
79
+ }
80
+ onAgentStart() {
81
+ this.epoch += 1;
82
+ this.active = true;
83
+ this.activeGroupId = null;
84
+ }
85
+ onAgentEnd() {
86
+ this.active = false;
87
+ this.activeGroupId = null;
88
+ }
89
+ onMessageStart(message, sessionManager) {
90
+ this.attach(sessionManager);
91
+ const record = this.asMessageRecord(message);
92
+ if (!record)
93
+ return null;
94
+ if (!this.active) {
95
+ this.onAgentStart();
96
+ }
97
+ const correlation = this.correlationFor(message);
98
+ const groupId = this.activeGroupId ?? randomUUID();
99
+ this.activeGroupId = groupId;
100
+ const eventId = randomUUID();
101
+ const marker = this.buildMarker(record.role, eventId, groupId, correlation);
102
+ sessionManager.appendCustomEntry(TIMELINE_MARKER, marker);
103
+ const objectMessage = message;
104
+ this.messageCorrelations.set(objectMessage, correlation);
105
+ const pending = { message: objectMessage, role: record.role, marker, correlation };
106
+ this.pending.set(objectMessage, pending);
107
+ this.pendingByRole[record.role].push(pending);
108
+ const started = {
109
+ eventId,
110
+ groupId,
111
+ role: record.role,
112
+ correlation: { ...correlation },
113
+ blocks: record.role === "user" ? this.userBlocks(record.content) : [],
114
+ };
115
+ this.onStarted?.(started);
116
+ return started;
117
+ }
118
+ onMessageEnd(message, sessionManager) {
119
+ this.attach(sessionManager);
120
+ if (typeof message !== "object" || message === null)
121
+ return;
122
+ const objectMessage = message;
123
+ const direct = this.pending.get(objectMessage);
124
+ const role = this.messageRole(message);
125
+ const pending = direct ?? (role && role !== "user" ? this.pendingByRole[role][0] : undefined);
126
+ if (!pending)
127
+ return;
128
+ this.pendingByRole[pending.role] = this.pendingByRole[pending.role].filter((candidate) => candidate !== pending);
129
+ setImmediate(() => {
130
+ const branch = sessionManager.getBranch();
131
+ const markerIndex = branch.findIndex((entry) => entry.id === pending.marker.event_id || (entry.type === "custom" && entry.customType === TIMELINE_MARKER && entry.data &&
132
+ typeof entry.data === "object" && entry.data.event_id === pending.marker.event_id));
133
+ if (markerIndex < 0)
134
+ return;
135
+ const target = this.scanTargetAfterMarker(branch, markerIndex, pending.role);
136
+ if (!target)
137
+ return;
138
+ const event = this.toTimelineEvent(target, pending.marker, pending.correlation, sessionManager);
139
+ if (!event)
140
+ return;
141
+ this.publish(event, pending.correlation);
142
+ });
143
+ }
144
+ recover(sessionManager) {
145
+ this.attach(sessionManager);
146
+ const branch = sessionManager.getBranch();
147
+ const matched = new Set();
148
+ const recovered = [];
149
+ for (let index = 0; index < branch.length; index += 1) {
150
+ const entry = branch[index];
151
+ if (entry.type === "custom" && entry.customType === TIMELINE_MARKER) {
152
+ const marker = this.parseMarker(entry.data);
153
+ if (!marker)
154
+ continue;
155
+ const target = this.scanTargetAfterMarker(branch, index, this.roleForMarker(marker));
156
+ if (!target || target.type !== "message")
157
+ continue;
158
+ matched.add(target.id);
159
+ const event = this.toTimelineEvent(target, marker, this.correlationFromMarker(marker), sessionManager);
160
+ if (event)
161
+ recovered.push(event);
162
+ }
163
+ }
164
+ const legacyGroup = `legacy:${sessionManager.getSessionId()}`;
165
+ for (const entry of branch) {
166
+ if (entry.type !== "message" || matched.has(entry.id))
167
+ continue;
168
+ const role = this.messageRole(entry.message);
169
+ if (!role)
170
+ continue;
171
+ const marker = role === "user"
172
+ ? { version: 2, event_id: `legacy:${entry.id}`, group_id: legacyGroup, kind: "user", origin: "unknown", delivery: "unknown" }
173
+ : { version: 2, event_id: `legacy:${entry.id}`, group_id: legacyGroup, kind: role === "assistant" ? "assistant" : "tool" };
174
+ const event = this.toTimelineEvent(entry, marker, this.correlationFromMarker(marker), sessionManager);
175
+ if (event)
176
+ recovered.push(event);
177
+ }
178
+ for (const entry of branch) {
179
+ const event = this.toSystemEvent(entry, sessionManager);
180
+ if (event)
181
+ recovered.push(event);
182
+ }
183
+ return recovered;
184
+ }
185
+ publish(event, correlation) {
186
+ if (this.published.some((existing) => existing.event_id === event.event_id))
187
+ return;
188
+ this.published.push(event);
189
+ this.onPublished?.(event, { ...correlation });
190
+ }
191
+ correlationFor(message) {
192
+ const existing = this.currentCorrelation();
193
+ if (existing)
194
+ return { ...existing };
195
+ const objectMessage = typeof message === "object" && message !== null ? message : null;
196
+ const known = objectMessage ? this.messageCorrelations.get(objectMessage) : undefined;
197
+ return known ? { ...known } : { origin: "unknown", delivery: "unknown" };
198
+ }
199
+ buildMarker(role, eventId, groupId, correlation) {
200
+ if (role === "user") {
201
+ const marker = {
202
+ version: 2, event_id: eventId, group_id: groupId, kind: "user",
203
+ origin: correlation.origin, delivery: correlation.delivery,
204
+ };
205
+ if (correlation.senderRef !== undefined)
206
+ marker.sender_ref = correlation.senderRef;
207
+ return MarkerSchemaV2.parse(marker);
208
+ }
209
+ return MarkerSchemaV2.parse({ version: 2, event_id: eventId, group_id: groupId, kind: role === "assistant" ? "assistant" : "tool" });
210
+ }
211
+ parseMarker(data) {
212
+ const parsed = MarkerSchemaV2.safeParse(data);
213
+ return parsed.success ? parsed.data : null;
214
+ }
215
+ correlationFromMarker(marker) {
216
+ if (marker.kind !== "user")
217
+ return { origin: "unknown", delivery: "unknown" };
218
+ return {
219
+ origin: marker.origin,
220
+ delivery: marker.delivery,
221
+ ...(marker.sender_ref ? { senderRef: marker.sender_ref } : {}),
222
+ };
223
+ }
224
+ roleForMarker(marker) {
225
+ if (marker.kind === "user")
226
+ return "user";
227
+ return marker.kind === "assistant" ? "assistant" : "toolResult";
228
+ }
229
+ scanTargetAfterMarker(branch, markerIndex, role) {
230
+ for (let index = markerIndex + 1; index < branch.length; index += 1) {
231
+ const entry = branch[index];
232
+ if (entry.type === "custom" && entry.customType === TIMELINE_MARKER)
233
+ return undefined;
234
+ if (entry.type === "custom")
235
+ continue;
236
+ if (entry.type !== "message")
237
+ return undefined;
238
+ return this.messageRole(entry.message) === role ? entry : undefined;
239
+ }
240
+ return undefined;
241
+ }
242
+ toTimelineEvent(entry, marker, correlation, sessionManager) {
243
+ const message = this.asMessageRecord(entry.message);
244
+ if (!message)
245
+ return null;
246
+ const sessionId = sessionManager.getSessionId();
247
+ const timestamp = this.timestamp(entry.timestamp, message.timestamp);
248
+ const historyGeneration = this.getHistoryGenerationValue?.() ?? sessionId;
249
+ const base = { event_id: marker.event_id, session_id: sessionId, history_generation: historyGeneration, timestamp };
250
+ const groupId = marker.group_id;
251
+ if (message.role === "user") {
252
+ const senderRef = marker.kind === "user" && marker.sender_ref ? { sender_ref: marker.sender_ref } : {};
253
+ return TimelineEventSchema.parse({
254
+ ...base, group_id: groupId, kind: "user", message_id: marker.event_id,
255
+ blocks: this.userBlocks(message.content), origin: correlation.origin, delivery: correlation.delivery,
256
+ status: "committed", ...senderRef,
257
+ });
258
+ }
259
+ if (message.role === "assistant") {
260
+ if (message.stopReason === "error") {
261
+ return TimelineEventSchema.parse({
262
+ ...base,
263
+ group_id: groupId,
264
+ kind: "provider_error",
265
+ message: this.nonEmpty(message.errorMessage ?? this.textFromContent(message.content) ?? "Provider error"),
266
+ });
267
+ }
268
+ return TimelineEventSchema.parse({
269
+ ...base, group_id: groupId, kind: "assistant", blocks: this.assistantBlocks(message.content),
270
+ status: "complete",
271
+ });
272
+ }
273
+ const result = this.jsonValue(message.content);
274
+ if (message.isError) {
275
+ return TimelineEventSchema.parse({
276
+ ...base, group_id: groupId, kind: "tool", tool_call_id: message.toolCallId ?? marker.event_id,
277
+ tool: message.toolName ?? "unknown", args: this.jsonValue(message.args ?? {}), truncated: false,
278
+ status: "error", error: this.nonEmpty(message.errorMessage ?? this.textFromContent(message.content) ?? "tool failed"),
279
+ });
280
+ }
281
+ return TimelineEventSchema.parse({
282
+ ...base, group_id: groupId, kind: "tool", tool_call_id: message.toolCallId ?? marker.event_id,
283
+ tool: message.toolName ?? "unknown", args: this.jsonValue(message.args ?? {}), truncated: false,
284
+ status: "complete", result,
285
+ });
286
+ }
287
+ toSystemEvent(entry, sessionManager) {
288
+ const base = {
289
+ event_id: entry.id,
290
+ session_id: sessionManager.getSessionId(),
291
+ history_generation: this.getHistoryGenerationValue?.() ?? sessionManager.getSessionId(),
292
+ timestamp: this.timestamp(entry.timestamp),
293
+ truncated: false,
294
+ };
295
+ let candidate;
296
+ if (entry.type === "compaction") {
297
+ candidate = {
298
+ ...base,
299
+ kind: "compaction",
300
+ payload: {
301
+ summary: entry.summary,
302
+ first_kept_entry_id: entry.firstKeptEntryId,
303
+ tokens_before: entry.tokensBefore,
304
+ from_hook: entry.fromHook ?? false,
305
+ ...(entry.details === undefined ? {} : { details: this.jsonValue(entry.details) }),
306
+ },
307
+ };
308
+ }
309
+ else if (entry.type === "branch_summary") {
310
+ candidate = {
311
+ ...base,
312
+ kind: "branch_summary",
313
+ payload: {
314
+ summary: entry.summary,
315
+ from_id: entry.fromId,
316
+ from_hook: entry.fromHook ?? false,
317
+ ...(entry.details === undefined ? {} : { details: this.jsonValue(entry.details) }),
318
+ },
319
+ };
320
+ }
321
+ else if (entry.type === "custom" && entry.customType !== TIMELINE_MARKER) {
322
+ candidate = {
323
+ ...base,
324
+ kind: "custom",
325
+ payload: {
326
+ custom_type: entry.customType,
327
+ ...(entry.data === undefined ? {} : { data: this.jsonValue(entry.data) }),
328
+ },
329
+ };
330
+ }
331
+ else {
332
+ return null;
333
+ }
334
+ const parsed = TimelineEventSchema.safeParse(candidate);
335
+ return parsed.success ? parsed.data : null;
336
+ }
337
+ asMessageRecord(value) {
338
+ if (typeof value !== "object" || value === null)
339
+ return null;
340
+ const record = value;
341
+ const role = record.role;
342
+ if (role !== "user" && role !== "assistant" && role !== "toolResult")
343
+ return null;
344
+ return record;
345
+ }
346
+ messageRole(value) {
347
+ return this.asMessageRecord(value)?.role ?? null;
348
+ }
349
+ timestamp(entryTimestamp, messageTimestamp) {
350
+ const entryMs = Date.parse(entryTimestamp);
351
+ if (Number.isFinite(entryMs) && entryMs >= 0)
352
+ return entryMs;
353
+ if (typeof messageTimestamp === "number" && Number.isFinite(messageTimestamp) && messageTimestamp >= 0)
354
+ return messageTimestamp;
355
+ return Date.now();
356
+ }
357
+ userBlocks(content) {
358
+ if (typeof content === "string")
359
+ return [{ type: "text", text: content }];
360
+ if (!Array.isArray(content))
361
+ return [{ type: "text", text: "" }];
362
+ return content.flatMap((part) => {
363
+ if (!part || typeof part !== "object")
364
+ return [];
365
+ const item = part;
366
+ if (item.type === "text" && typeof item.text === "string")
367
+ return [{ type: "text", text: item.text }];
368
+ if (item.type === "image" && typeof item.data === "string" && typeof item.mimeType === "string") {
369
+ return [{ type: "image", mime_type: item.mimeType, data: item.data, byte_length: this.base64Length(item.data) }];
370
+ }
371
+ return [];
372
+ });
373
+ }
374
+ assistantBlocks(content) {
375
+ if (typeof content === "string")
376
+ return [{ type: "text", text: content }];
377
+ if (!Array.isArray(content))
378
+ return [];
379
+ return content.flatMap((part) => {
380
+ if (!part || typeof part !== "object")
381
+ return [];
382
+ const item = part;
383
+ if ((item.type === "text" || item.type === "thinking") && typeof item.text === "string") {
384
+ return [{ type: item.type, text: item.text }];
385
+ }
386
+ return [];
387
+ });
388
+ }
389
+ textFromContent(content) {
390
+ if (typeof content === "string")
391
+ return content;
392
+ if (!Array.isArray(content))
393
+ return "";
394
+ return content.flatMap((part) => {
395
+ if (!part || typeof part !== "object")
396
+ return [];
397
+ const text = part.text;
398
+ return typeof text === "string" ? [text] : [];
399
+ }).join(" ");
400
+ }
401
+ nonEmpty(value) {
402
+ return value.trim() || "tool failed";
403
+ }
404
+ base64Length(value) {
405
+ try {
406
+ return Buffer.from(value, "base64").byteLength;
407
+ }
408
+ catch {
409
+ return 0;
410
+ }
411
+ }
412
+ jsonValue(value) {
413
+ if (value === null || typeof value === "boolean" || typeof value === "string")
414
+ return value;
415
+ if (typeof value === "number")
416
+ return Number.isFinite(value) ? value : null;
417
+ if (Array.isArray(value))
418
+ return value.map((item) => this.jsonValue(item));
419
+ if (typeof value === "object") {
420
+ const result = {};
421
+ for (const [key, item] of Object.entries(value))
422
+ result[key] = this.jsonValue(item);
423
+ return result;
424
+ }
425
+ return null;
426
+ }
427
+ }
428
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/timeline/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { SessionManager } from "@earendil-works/pi-coding-agent";
2
+ import { type ClientFrame, type ServerFrame, type TimelineEvent, type TimelinePartial } from "../protocol/v2/index.js";
3
+ import type { Correlation, TimelineRuntime, TimelineStarted } from "./runtime.js";
4
+ export type V2ServiceOptions = {
5
+ sessionManager: SessionManager;
6
+ senderRef: string;
7
+ generation?: string;
8
+ runtime: TimelineRuntime;
9
+ onUserMessage: (frame: Extract<ClientFrame, {
10
+ type: "user_message";
11
+ }>, correlation: Correlation) => boolean;
12
+ onCancel?: (targetId: string) => boolean;
13
+ };
14
+ export type V2Broadcast = Extract<ServerFrame, {
15
+ type: "timeline_event" | "timeline_partial" | "timeline_event_fragment";
16
+ }>;
17
+ export declare class TimelineV2Service {
18
+ private readonly state;
19
+ private readonly pager;
20
+ private readonly sessionManager;
21
+ private readonly senderRef;
22
+ private readonly runtime;
23
+ private readonly onUserMessage;
24
+ private readonly onCancel?;
25
+ private readonly requestChannels;
26
+ private generationValue;
27
+ constructor(options: V2ServiceOptions);
28
+ get generation(): string;
29
+ reset(reason: "generation_changed" | "branch_changed" | "session_replaced"): ServerFrame[];
30
+ refreshGeneration(next: string): boolean;
31
+ handle(frame: ClientFrame): ServerFrame[];
32
+ started(started: TimelineStarted): ServerFrame[];
33
+ commit(clientRequestId: string, messageId: string, groupId?: string): ServerFrame[];
34
+ canDrain(clientRequestId: string): boolean;
35
+ unknownDelivery(clientRequestId: string): ServerFrame[];
36
+ partial(partial: TimelinePartial): V2Broadcast | null;
37
+ publish(event: TimelineEvent): V2Broadcast | null;
38
+ publishFrames(event: TimelineEvent): V2Broadcast[];
39
+ private ready;
40
+ private handleHistory;
41
+ private handlePing;
42
+ private handleCancel;
43
+ private handleObserved;
44
+ private handleUserMessage;
45
+ private replay;
46
+ private status;
47
+ private requireReady;
48
+ private ensureReady;
49
+ private direct;
50
+ private error;
51
+ private idempotencyPayload;
52
+ private recordKey;
53
+ private findRecord;
54
+ }