@yefengr/pi-reach 0.0.0-stage → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +110 -2
  3. package/dist/actions/handlers.d.ts +143 -0
  4. package/dist/actions/handlers.js +200 -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/actions/session_new_bridge.d.ts +35 -0
  10. package/dist/actions/session_new_bridge.js +88 -0
  11. package/dist/actions/session_new_bridge.js.map +1 -0
  12. package/dist/commands.d.ts +29 -0
  13. package/dist/commands.js +169 -0
  14. package/dist/commands.js.map +1 -0
  15. package/dist/config.d.ts +61 -0
  16. package/dist/config.js +115 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/index.d.ts +27 -0
  19. package/dist/index.js +618 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/pairing/crypto.d.ts +15 -0
  22. package/dist/pairing/crypto.js +72 -0
  23. package/dist/pairing/crypto.js.map +1 -0
  24. package/dist/pairing/identity-keyring.d.ts +22 -0
  25. package/dist/pairing/identity-keyring.js +94 -0
  26. package/dist/pairing/identity-keyring.js.map +1 -0
  27. package/dist/pairing/identity-lock.d.ts +14 -0
  28. package/dist/pairing/identity-lock.js +116 -0
  29. package/dist/pairing/identity-lock.js.map +1 -0
  30. package/dist/pairing/owner_storage.d.ts +61 -0
  31. package/dist/pairing/owner_storage.js +263 -0
  32. package/dist/pairing/owner_storage.js.map +1 -0
  33. package/dist/pairing/qr.d.ts +39 -0
  34. package/dist/pairing/qr.js +113 -0
  35. package/dist/pairing/qr.js.map +1 -0
  36. package/dist/pairing/storage.d.ts +36 -0
  37. package/dist/pairing/storage.js +263 -0
  38. package/dist/pairing/storage.js.map +1 -0
  39. package/dist/protocol/types.d.ts +225 -0
  40. package/dist/protocol/types.js +2 -0
  41. package/dist/protocol/types.js.map +1 -0
  42. package/dist/protocol/v2/codec.d.ts +6 -0
  43. package/dist/protocol/v2/codec.js +4 -0
  44. package/dist/protocol/v2/codec.js.map +1 -0
  45. package/dist/protocol/v2/index.d.ts +4 -0
  46. package/dist/protocol/v2/index.js +5 -0
  47. package/dist/protocol/v2/index.js.map +1 -0
  48. package/dist/protocol/v2/marker.d.ts +45 -0
  49. package/dist/protocol/v2/marker.js +47 -0
  50. package/dist/protocol/v2/marker.js.map +1 -0
  51. package/dist/protocol/v2/schemas.d.ts +3 -0
  52. package/dist/protocol/v2/schemas.js +4 -0
  53. package/dist/protocol/v2/schemas.js.map +1 -0
  54. package/dist/protocol/v2/session_state.d.ts +79 -0
  55. package/dist/protocol/v2/session_state.js +166 -0
  56. package/dist/protocol/v2/session_state.js.map +1 -0
  57. package/dist/runtime/endpoint_metadata.d.ts +14 -0
  58. package/dist/runtime/endpoint_metadata.js +18 -0
  59. package/dist/runtime/endpoint_metadata.js.map +1 -0
  60. package/dist/runtime/extension_owner.d.ts +12 -0
  61. package/dist/runtime/extension_owner.js +80 -0
  62. package/dist/runtime/extension_owner.js.map +1 -0
  63. package/dist/runtime/footer.d.ts +6 -0
  64. package/dist/runtime/footer.js +21 -0
  65. package/dist/runtime/footer.js.map +1 -0
  66. package/dist/runtime/owner_router.d.ts +16 -0
  67. package/dist/runtime/owner_router.js +41 -0
  68. package/dist/runtime/owner_router.js.map +1 -0
  69. package/dist/runtime/pairing_coordinator.d.ts +42 -0
  70. package/dist/runtime/pairing_coordinator.js +136 -0
  71. package/dist/runtime/pairing_coordinator.js.map +1 -0
  72. package/dist/runtime/relay_lifecycle.d.ts +64 -0
  73. package/dist/runtime/relay_lifecycle.js +275 -0
  74. package/dist/runtime/relay_lifecycle.js.map +1 -0
  75. package/dist/session/local_config.d.ts +7 -0
  76. package/dist/session/local_config.js +52 -0
  77. package/dist/session/local_config.js.map +1 -0
  78. package/dist/timeline/history.d.ts +30 -0
  79. package/dist/timeline/history.js +170 -0
  80. package/dist/timeline/history.js.map +1 -0
  81. package/dist/timeline/partial_delta.d.ts +2 -0
  82. package/dist/timeline/partial_delta.js +16 -0
  83. package/dist/timeline/partial_delta.js.map +1 -0
  84. package/dist/timeline/run_end.d.ts +16 -0
  85. package/dist/timeline/run_end.js +23 -0
  86. package/dist/timeline/run_end.js.map +1 -0
  87. package/dist/timeline/runtime.d.ts +89 -0
  88. package/dist/timeline/runtime.js +546 -0
  89. package/dist/timeline/runtime.js.map +1 -0
  90. package/dist/timeline/sequence.d.ts +7 -0
  91. package/dist/timeline/sequence.js +16 -0
  92. package/dist/timeline/sequence.js.map +1 -0
  93. package/dist/timeline/tool_lifecycle.d.ts +36 -0
  94. package/dist/timeline/tool_lifecycle.js +171 -0
  95. package/dist/timeline/tool_lifecycle.js.map +1 -0
  96. package/dist/timeline/user_delivery.d.ts +96 -0
  97. package/dist/timeline/user_delivery.js +360 -0
  98. package/dist/timeline/user_delivery.js.map +1 -0
  99. package/dist/timeline/user_delivery_binding.d.ts +43 -0
  100. package/dist/timeline/user_delivery_binding.js +107 -0
  101. package/dist/timeline/user_delivery_binding.js.map +1 -0
  102. package/dist/timeline/v2_service.d.ts +82 -0
  103. package/dist/timeline/v2_service.js +512 -0
  104. package/dist/timeline/v2_service.js.map +1 -0
  105. package/dist/transport/peer_channel.d.ts +34 -0
  106. package/dist/transport/peer_channel.js +116 -0
  107. package/dist/transport/peer_channel.js.map +1 -0
  108. package/dist/transport/relay_client.d.ts +54 -0
  109. package/dist/transport/relay_client.js +270 -0
  110. package/dist/transport/relay_client.js.map +1 -0
  111. package/dist/vendor/protocol/constants.d.ts +4 -0
  112. package/dist/vendor/protocol/constants.js +4 -0
  113. package/dist/vendor/protocol/encoding.d.ts +9 -0
  114. package/dist/vendor/protocol/encoding.js +66 -0
  115. package/dist/vendor/protocol/outer/codec.d.ts +13 -0
  116. package/dist/vendor/protocol/outer/codec.js +105 -0
  117. package/dist/vendor/protocol/outer/index.d.ts +4 -0
  118. package/dist/vendor/protocol/outer/index.js +4 -0
  119. package/dist/vendor/protocol/outer/types.d.ts +120 -0
  120. package/dist/vendor/protocol/outer/types.js +1 -0
  121. package/dist/vendor/protocol/session/codec.d.ts +41 -0
  122. package/dist/vendor/protocol/session/codec.js +236 -0
  123. package/dist/vendor/protocol/session/frames.d.ts +5220 -0
  124. package/dist/vendor/protocol/session/frames.js +83 -0
  125. package/dist/vendor/protocol/session/index.d.ts +3 -0
  126. package/dist/vendor/protocol/session/index.js +3 -0
  127. package/dist/vendor/protocol/session/schema.d.ts +858 -0
  128. package/dist/vendor/protocol/session/schema.js +256 -0
  129. package/package.json +74 -3
package/dist/index.js ADDED
@@ -0,0 +1,618 @@
1
+ #!/usr/bin/env node
2
+ /** One local Pi process is one stable Relay endpoint with replaceable sessions. */
3
+ import { randomUUID } from "node:crypto";
4
+ import { readFileSync } from "node:fs";
5
+ import { hostname } from "node:os";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { canonicalizeEd25519PublicKey } from "./pairing/crypto.js";
9
+ import { qrSession } from "./pairing/qr.js";
10
+ import { addPeer, conditionalRollbackPeer, getOrCreateEd25519Keypair, KeyringUnavailableError, PairedIdentityMissingError, listPeers } from "./pairing/storage.js";
11
+ import { RelayClient } from "./transport/relay_client.js";
12
+ import { V2PeerChannel } from "./transport/peer_channel.js";
13
+ import { TimelineV2Service } from "./timeline/v2_service.js";
14
+ import { TimelineRuntime } from "./timeline/runtime.js";
15
+ import { UserDeliveryBinding } from "./timeline/user_delivery_binding.js";
16
+ import { handleModelSet, handleSessionCompact, handleThinkingSet, getModelsList } from "./actions/handlers.js";
17
+ import { ensureModelRegistry } from "./actions/registry.js";
18
+ import { SessionNewBridge } from "./actions/session_new_bridge.js";
19
+ import { defaultAgentName, loadLocalConfig } from "./session/local_config.js";
20
+ import { resolveRelayUrl, toWebSocketUrl } from "./config.js";
21
+ import { persistModelDefault, registerCommands } from "./commands.js";
22
+ import { installOwnerRouter } from "./runtime/owner_router.js";
23
+ import { RelayLifecycle } from "./runtime/relay_lifecycle.js";
24
+ import { PairingCoordinator } from "./runtime/pairing_coordinator.js";
25
+ import { ExtensionOwner } from "./runtime/extension_owner.js";
26
+ import { buildEndpointMetadata, currentSessionName } from "./runtime/endpoint_metadata.js";
27
+ import { clearLegacyRelayStatuses, renderRelayFooter } from "./runtime/footer.js";
28
+ const CTRL_PREFIX = "\x00pi-reach-ctrl:";
29
+ const CONTROL_PROTOCOL_VERSION = 2;
30
+ const RUNTIME_CONTROL_STATUS_KEY = "pi-reach:control";
31
+ const PROCESS_IDENTITY_KEY = Symbol.for("pi-reach.endpoint-process-identity");
32
+ /** One Pi process owns a fresh endpoint identity; extension reloads reuse it. */
33
+ export function processEndpointIdentity() {
34
+ const global = globalThis;
35
+ const existing = global[PROCESS_IDENTITY_KEY];
36
+ if (existing)
37
+ return existing;
38
+ const identity = Object.freeze({ endpointId: randomUUID(), runtimeInstanceId: randomUUID() });
39
+ global[PROCESS_IDENTITY_KEY] = identity;
40
+ return identity;
41
+ }
42
+ const endpointIdentity = processEndpointIdentity();
43
+ // Keep the resolved model object so current-model capabilities and identity stay
44
+ // tied to the same provider/id; the wire metadata still uses only its label.
45
+ let currentModel;
46
+ let currentThinking;
47
+ let working = false;
48
+ let currentSessionManager = null;
49
+ let timeline = null;
50
+ let piApi = null;
51
+ let footerCtx = null;
52
+ let lastCommandCtx = null;
53
+ let lastEventCtx = null;
54
+ let currentTurnId = null;
55
+ let replacedSessionId = null;
56
+ const sessionNewBridge = new SessionNewBridge({ getPi: () => piApi, onCommandContext: (ctx) => { lastCommandCtx = ctx; }, onReplaced: (ctx) => { lastCommandCtx = ctx; }, onFinished: () => finishSessionReplacement() });
57
+ function setCurrentModel(model) {
58
+ currentModel = model;
59
+ }
60
+ function currentModelNameOrId(model) {
61
+ if (!model)
62
+ return undefined;
63
+ if (typeof model === "string")
64
+ return model;
65
+ return "name" in model && model.name ? model.name : model.id;
66
+ }
67
+ export const _getState = () => relayLifecycle.state === "idle" ? "idle" : activeOwners.size > 0 ? "paired" : "started";
68
+ export const _getCachedPublicKeyForTest = () => relayLifecycle.keypair ? Buffer.from(relayLifecycle.keypair.publicKey).toString("base64") : null;
69
+ export const _getCurrentTurnIdForTest = () => currentTurnId;
70
+ export const _setPiForTest = (value) => { piApi = value; };
71
+ export const _setCurrentModelForTest = (value) => { currentModel = value; };
72
+ export const _hasPendingReconnect = () => relayLifecycle.hasPendingReconnect;
73
+ export const _getActivePeerCountForTest = () => activeOwners.size;
74
+ export const _hasActivePeerForTest = (ownerId) => activeOwners.has(ownerId);
75
+ export const _getDisposedForTest = () => relayLifecycle.disposed;
76
+ export const _setDisposedForTest = (value) => { relayLifecycle.setDisposed(value); };
77
+ export const _setSessionNewBridgeTimeoutForTest = (timeoutMs) => sessionNewBridge.setTimeoutForTest(timeoutMs);
78
+ function displayName(cwd = process.cwd()) { return loadLocalConfig(cwd).agent_name ?? defaultAgentName(cwd); }
79
+ function endpointMetadata(cwd = process.cwd()) {
80
+ return buildEndpointMetadata({
81
+ sessionManager: currentSessionManager,
82
+ cwd,
83
+ model: currentModelNameOrId(currentModel),
84
+ thinking: currentThinking,
85
+ working,
86
+ });
87
+ }
88
+ function routeIdentity() {
89
+ const keypair = relayLifecycle.keypair;
90
+ if (!keypair)
91
+ throw new Error("pi-reach identity is unavailable");
92
+ return { deviceId: Buffer.from(keypair.publicKey).toString("base64"), endpointId: endpointIdentity.endpointId, runtimeInstanceId: endpointIdentity.runtimeInstanceId };
93
+ }
94
+ async function authorizedOwnerIds() {
95
+ const owners = new Set();
96
+ for (const record of await listPeers()) {
97
+ try {
98
+ owners.add(canonicalizeEd25519PublicKey(record.remote_epk, "stored Owner public key"));
99
+ }
100
+ catch { /* malformed legacy records have no Relay authority */ }
101
+ }
102
+ return [...owners];
103
+ }
104
+ function relayStatus() { return relayLifecycle.status; }
105
+ function emitRuntimeEvent(type, details) {
106
+ try {
107
+ piApi?.sendMessage({ customType: `pi-reach:${type}`, content: "", details, display: false });
108
+ }
109
+ catch { /* a stale session must not take down the process */ }
110
+ }
111
+ function emitRelayState() {
112
+ emitRuntimeEvent("relay-state", { state: relayStatus(), endpoint_id: endpointIdentity.endpointId, runtime_instance_id: endpointIdentity.runtimeInstanceId });
113
+ }
114
+ function emitRuntimeReady(ctx) {
115
+ const details = {
116
+ control_protocol_version: CONTROL_PROTOCOL_VERSION,
117
+ extension_version: extensionVersion(),
118
+ endpoint_id: endpointIdentity.endpointId,
119
+ runtime_instance_id: endpointIdentity.runtimeInstanceId,
120
+ ...(currentSessionManager ? { session_id: currentSessionManager.getSessionId() } : {}),
121
+ };
122
+ emitRuntimeEvent("runtime-ready", details);
123
+ if (ctx.mode !== "rpc")
124
+ return;
125
+ try {
126
+ ctx.ui.setStatus(RUNTIME_CONTROL_STATUS_KEY, JSON.stringify({ type: "runtime_ready", ...details }));
127
+ }
128
+ catch { /* stale RPC UI context */ }
129
+ }
130
+ function emitRuntimeFailed(stage, code, message, retryable) {
131
+ emitRuntimeEvent("runtime-failed", { stage, code, message, retryable });
132
+ }
133
+ let endpointUpdateQueue = Promise.resolve();
134
+ function updateEndpoint(expectedRelay) {
135
+ let sent = false;
136
+ const operation = endpointUpdateQueue.then(async () => {
137
+ const relay = expectedRelay ?? relayLifecycle.relay;
138
+ if (!relay?.isOpen() || !relayLifecycle.isCurrent(relay))
139
+ return;
140
+ try {
141
+ const authorized = await authorizedOwnerIds();
142
+ if (!relayLifecycle.isCurrent(relay) || !relay.isOpen())
143
+ return;
144
+ sent = relay.sendControl({
145
+ type: "endpoint_update",
146
+ metadata: endpointMetadata(),
147
+ authorized_owner_ids: authorized,
148
+ });
149
+ }
150
+ catch { /* reconnect owns recovery */ }
151
+ });
152
+ endpointUpdateQueue = operation.then(() => undefined, () => undefined);
153
+ return operation.then(() => sent);
154
+ }
155
+ function publishPairingOffer(code, expiresAt, expectedRelay) {
156
+ const invite = qrSession.getActiveInvite();
157
+ const relay = expectedRelay ?? relayLifecycle.relay;
158
+ if (!invite || invite.code !== code || invite.expiresAt !== expiresAt || expiresAt <= Date.now())
159
+ return false;
160
+ if (!relay?.isOpen() || !relayLifecycle.isCurrent(relay))
161
+ return false;
162
+ return relay.sendControl({
163
+ type: "pairing_offer",
164
+ code,
165
+ endpoint_id: endpointIdentity.endpointId,
166
+ runtime_instance_id: endpointIdentity.runtimeInstanceId,
167
+ expires_at: expiresAt,
168
+ });
169
+ }
170
+ function republishPairingOffer(relay) {
171
+ const invite = qrSession.getActiveInvite();
172
+ if (!invite)
173
+ return;
174
+ publishPairingOffer(invite.code, invite.expiresAt, relay);
175
+ }
176
+ function refreshFooter() {
177
+ if (!footerCtx || (footerCtx.mode !== "tui" && footerCtx.mode !== "rpc"))
178
+ return;
179
+ const { ui, mode } = footerCtx;
180
+ try {
181
+ if (mode === "tui") {
182
+ clearLegacyRelayStatuses(ui);
183
+ renderRelayFooter(ui, relayLifecycle.displayStatus);
184
+ }
185
+ ui.setTitle(`${displayName()} · ${relayLifecycle.state === "idle" ? "Off" : "On"}`);
186
+ }
187
+ catch { /* stale UI context */ }
188
+ }
189
+ const activeOwners = new Map();
190
+ const userDelivery = new UserDeliveryBinding({
191
+ isIdle: () => lastEventCtx?.isIdle() ?? false,
192
+ canAcceptNormal: () => piApi !== null && lastEventCtx !== null,
193
+ getPi: () => piApi,
194
+ getTimeline: () => timeline,
195
+ getCurrentSessionId: () => currentSessionManager?.getSessionId() ?? null,
196
+ getCurrentLeafId: () => currentSessionManager?.getLeafId() ?? null,
197
+ findTarget: (ownerId) => activeOwners.get(ownerId) ?? null,
198
+ sendFrames: (ownerId, frames) => {
199
+ const binding = activeOwners.get(ownerId);
200
+ if (binding)
201
+ for (const frame of frames)
202
+ binding.channel.sendV2(frame);
203
+ },
204
+ });
205
+ const relayLifecycle = new RelayLifecycle({
206
+ loadIdentity: getOrCreateEd25519Keypair,
207
+ resolveRelayUrl,
208
+ createClient: (url, identity) => new RelayClient(toWebSocketUrl(url), identity),
209
+ buildConnectOptions: hostConnectOptions,
210
+ handleIdentityError: (error, ctx) => {
211
+ if (!(error instanceof KeyringUnavailableError) && !(error instanceof PairedIdentityMissingError))
212
+ return false;
213
+ emitRuntimeFailed("identity", error instanceof KeyringUnavailableError ? "keyring_unavailable" : "paired_identity_missing", error.message, false);
214
+ try {
215
+ ctx.ui.notify(`[pi-reach] Cannot access the established device identity: ${error.message}`, "error");
216
+ }
217
+ catch { /* stale UI context */ }
218
+ return true;
219
+ },
220
+ describeConnection: (resolution) => `[pi-reach] Connecting endpoint ${endpointIdentity.endpointId.slice(0, 8)} to ${resolution.url} (source: ${resolution.source})…`,
221
+ onStateChange: emitRelayState,
222
+ onDisplayStatusChange: refreshFooter,
223
+ onConnected: (client, ctx) => {
224
+ installRouteListener(client);
225
+ republishPairingOffer(client);
226
+ if (!ctx)
227
+ void updateEndpoint(client);
228
+ },
229
+ onDisconnected: () => {
230
+ for (const ownerId of [...activeOwners.keys()])
231
+ detachOwner(ownerId);
232
+ pairingCoordinator.abandonInactive();
233
+ },
234
+ });
235
+ function detachOwner(ownerId) {
236
+ const binding = activeOwners.get(ownerId);
237
+ if (!binding)
238
+ return;
239
+ userDelivery.clearOwner(ownerId, binding.service);
240
+ try {
241
+ binding.channel.detach();
242
+ }
243
+ catch { /* best effort */ }
244
+ activeOwners.delete(ownerId);
245
+ }
246
+ function closeOwner(ownerId, reason) {
247
+ const binding = activeOwners.get(ownerId);
248
+ if (!binding)
249
+ return;
250
+ binding.channel.sendV2({
251
+ protocol_version: 2,
252
+ type: "bye",
253
+ session_id: binding.sessionId,
254
+ leaf_id: binding.service.leafId,
255
+ reason,
256
+ });
257
+ detachOwner(ownerId);
258
+ }
259
+ function broadcastV2(factory) {
260
+ for (const { channel, service } of activeOwners.values())
261
+ for (const frame of factory(service))
262
+ channel.sendV2(frame);
263
+ }
264
+ function finishSessionReplacement() {
265
+ const sessionId = replacedSessionId;
266
+ if (!sessionId)
267
+ return;
268
+ replacedSessionId = null;
269
+ for (const [ownerId, { channel, service }] of [...activeOwners]) {
270
+ channel.sendV2({ protocol_version: 2, type: "bye", session_id: sessionId, leaf_id: service.leafId, reason: "session_replaced" });
271
+ detachOwner(ownerId);
272
+ }
273
+ }
274
+ function ensureTimeline(sessionManager) {
275
+ currentSessionManager = sessionManager;
276
+ if (!timeline) {
277
+ timeline = new TimelineRuntime({
278
+ onStarted: (started) => userDelivery.onStarted(started),
279
+ onPartial: (partial) => {
280
+ broadcastV2((service) => {
281
+ const frame = service.partial(partial);
282
+ return frame ? [frame] : [];
283
+ });
284
+ },
285
+ onPublished: (event, correlation) => {
286
+ broadcastV2((service) => service.publishFrames(event));
287
+ userDelivery.onPublished(event, correlation);
288
+ },
289
+ });
290
+ }
291
+ timeline.attach(sessionManager);
292
+ return timeline;
293
+ }
294
+ function refreshOwnerScopes(reason) {
295
+ userDelivery.clearAll();
296
+ for (const { channel, service } of activeOwners.values()) {
297
+ service.refreshScope();
298
+ for (const frame of service.reset(reason))
299
+ channel.sendV2(frame);
300
+ }
301
+ }
302
+ function actionSender(ownerId, channelId) {
303
+ return {
304
+ send(message) {
305
+ const binding = activeOwners.get(ownerId);
306
+ if (!binding)
307
+ return;
308
+ if (message.type === "action_ok" || message.type === "action_error") {
309
+ binding.channel.sendV2({ protocol_version: 2, type: message.type, target_channel_id: channelId, in_reply_to: message.in_reply_to, action: message.action, ...(message.type === "action_error" ? { error: message.error } : {}) });
310
+ }
311
+ },
312
+ };
313
+ }
314
+ function routeAction(ownerId, frame) {
315
+ const sender = actionSender(ownerId, frame.channel_id);
316
+ const ctx = (lastEventCtx ?? lastCommandCtx);
317
+ switch (frame.type) {
318
+ case "session_compact":
319
+ handleSessionCompact(ctx, sender, frame);
320
+ return;
321
+ case "session_new":
322
+ sessionNewBridge.dispatch(sender, frame);
323
+ return;
324
+ case "model_set":
325
+ if (piApi)
326
+ void handleModelSet(piApi, ctx, ensureModelRegistry(ctx), sender, frame, persistModelDefault, setCurrentModel);
327
+ return;
328
+ case "thinking_set":
329
+ if (piApi)
330
+ handleThinkingSet(piApi, sender, frame);
331
+ return;
332
+ }
333
+ }
334
+ function createBinding(relayClient, ownerId) {
335
+ const manager = currentSessionManager;
336
+ if (!manager)
337
+ return null;
338
+ const runtime = ensureTimeline(manager);
339
+ const channel = new V2PeerChannel(relayClient, ownerId, routeIdentity(), (frame) => routeClientFrame(ownerId, frame));
340
+ let service;
341
+ service = new TimelineV2Service({
342
+ sessionManager: manager,
343
+ senderRef: ownerId,
344
+ runtime,
345
+ onUserMessage: (frame, correlation) => {
346
+ currentTurnId = frame.client_request_id;
347
+ return userDelivery.submit(frame, correlation, {
348
+ ownerId,
349
+ sessionId: manager.getSessionId(),
350
+ leafId: manager.getLeafId() ?? null,
351
+ service,
352
+ clientRequestId: frame.client_request_id,
353
+ });
354
+ },
355
+ onCancel: () => {
356
+ const abort = lastEventCtx?.abort ?? lastCommandCtx?.abort;
357
+ if (!abort)
358
+ return false;
359
+ abort();
360
+ return true;
361
+ },
362
+ onQueueSnapshot: () => userDelivery.snapshot(ownerId, service),
363
+ onQueuedMessageClear: (targetId) => userDelivery.clearQueued(ownerId, service, targetId),
364
+ onQueuedMessageSteer: (targetId) => userDelivery.steerQueued(ownerId, service, targetId).kind,
365
+ onAction: (frame) => routeAction(ownerId, frame),
366
+ onListModels: () => getModelsList((lastEventCtx ?? lastCommandCtx), ensureModelRegistry((lastEventCtx ?? lastCommandCtx)), currentModel),
367
+ });
368
+ return { channel, service, sessionId: manager.getSessionId(), leafId: manager.getLeafId() ?? null };
369
+ }
370
+ function attachOwner(relayClient, ownerId) {
371
+ detachOwner(ownerId);
372
+ const binding = createBinding(relayClient, ownerId);
373
+ if (!binding)
374
+ return null;
375
+ activeOwners.set(ownerId, binding);
376
+ return binding;
377
+ }
378
+ function routeClientFrame(ownerId, frame) {
379
+ const binding = activeOwners.get(ownerId);
380
+ if (!binding)
381
+ return;
382
+ for (const response of binding.service.handle(frame))
383
+ binding.channel.sendV2(response);
384
+ }
385
+ function installRouteListener(relayClient) {
386
+ return installOwnerRouter(relayClient, {
387
+ isCurrent: (candidate) => relayLifecycle.isCurrent(candidate),
388
+ routeIdentity,
389
+ hasOwner: (ownerId) => activeOwners.has(ownerId),
390
+ findKnownOwner: async (ownerId) => !!await findKnownOwner(ownerId),
391
+ attachOwner,
392
+ routeClientFrame,
393
+ handlePairRequest,
394
+ });
395
+ }
396
+ async function findKnownOwner(ownerId) {
397
+ let canonical;
398
+ try {
399
+ canonical = canonicalizeEd25519PublicKey(ownerId, "Relay Owner key");
400
+ }
401
+ catch {
402
+ return null;
403
+ }
404
+ for (const record of await listPeers()) {
405
+ try {
406
+ if (canonicalizeEd25519PublicKey(record.remote_epk, "stored Owner public key") === canonical)
407
+ return record;
408
+ }
409
+ catch { /* bad stored record */ }
410
+ }
411
+ return null;
412
+ }
413
+ const pairingCoordinator = new PairingCoordinator({
414
+ qrSession,
415
+ routeIdentity,
416
+ isRelayCurrent: (relay) => relayLifecycle.isCurrent(relay),
417
+ attachOwner,
418
+ activeBinding: (ownerId) => activeOwners.get(ownerId),
419
+ addPeer,
420
+ rollbackPeer: conditionalRollbackPeer,
421
+ updateEndpoint: (relay) => updateEndpoint(relay),
422
+ refreshCurrentEndpoint: () => updateEndpoint(),
423
+ buildPairOk: (frame) => ({
424
+ protocol_version: 2,
425
+ type: "pair_ok",
426
+ in_reply_to: frame.id,
427
+ session_name: currentSessionName(currentSessionManager),
428
+ session_started_at: Date.now(),
429
+ endpoint_id: endpointIdentity.endpointId,
430
+ harness: { name: "Pi coding agent", version: extensionVersion() },
431
+ hostname: hostname(),
432
+ }),
433
+ });
434
+ function handlePairRequest(relayClient, ownerId, frame) {
435
+ return pairingCoordinator.handle(relayClient, ownerId, frame);
436
+ }
437
+ function closeRelay(reason) {
438
+ userDelivery.clearAll();
439
+ sessionNewBridge.clear("session replacement cancelled because the endpoint closed");
440
+ qrSession.clear();
441
+ replacedSessionId = null;
442
+ if (reason) {
443
+ for (const { channel, service } of activeOwners.values()) {
444
+ channel.sendV2({ protocol_version: 2, type: "bye", session_id: currentSessionManager?.getSessionId() ?? "unknown", leaf_id: currentSessionManager?.getLeafId() ?? null, reason });
445
+ }
446
+ }
447
+ relayLifecycle.stop();
448
+ }
449
+ async function hostConnectOptions(cwd = process.cwd()) {
450
+ return {
451
+ role: "host",
452
+ endpointId: endpointIdentity.endpointId,
453
+ runtimeInstanceId: endpointIdentity.runtimeInstanceId,
454
+ metadata: endpointMetadata(cwd),
455
+ authorizedOwnerIds: await authorizedOwnerIds(),
456
+ };
457
+ }
458
+ function start(ctx) { return relayLifecycle.start(ctx); }
459
+ function waitForInitialRelay() { return relayLifecycle.waitForInitial(); }
460
+ const extensionVersion = () => {
461
+ try {
462
+ const here = fileURLToPath(import.meta.url);
463
+ const pkg = JSON.parse(readFileSync(join(dirname(dirname(here)), "package.json"), "utf8"));
464
+ return typeof pkg.version === "string" ? pkg.version : "0.0.0";
465
+ }
466
+ catch {
467
+ return "0.0.0";
468
+ }
469
+ };
470
+ const APPLIED = Symbol.for("pi-reach.endpoint-extension-applied");
471
+ function appliedSet() {
472
+ const global = globalThis;
473
+ return global[APPLIED] ??= new WeakSet();
474
+ }
475
+ const commandDependencies = {
476
+ start,
477
+ waitForInitialRelay,
478
+ stop: () => closeRelay("peer_stop"),
479
+ state: () => relayLifecycle.state,
480
+ relayStatus,
481
+ relayUrl: () => relayLifecycle.relayUrl,
482
+ endpointIdentity: () => endpointIdentity,
483
+ activeOwnerCount: () => activeOwners.size,
484
+ isOwnerActive: (ownerId) => activeOwners.has(ownerId),
485
+ closeOwner,
486
+ updateEndpoint: async () => { await updateEndpoint(); },
487
+ displayName,
488
+ keypair: () => relayLifecycle.keypair,
489
+ hasRelay: () => relayLifecycle.relay?.isOpen() === true,
490
+ publishPairingOffer: (code, expiresAt) => publishPairingOffer(code, expiresAt),
491
+ setCommandContext: (ctx) => { lastCommandCtx = ctx; footerCtx = ctx; },
492
+ runInternalSessionNew: (token, ctx) => sessionNewBridge.run(token, ctx),
493
+ };
494
+ const extension = (api) => {
495
+ if (appliedSet().has(api))
496
+ return;
497
+ appliedSet().add(api);
498
+ const owner = new ExtensionOwner();
499
+ const pi = owner.guard(api);
500
+ registerCommands(pi, commandDependencies);
501
+ pi.on("input", (event) => {
502
+ if (event.text.startsWith(CTRL_PREFIX)) {
503
+ const control = event.text.slice(CTRL_PREFIX.length).trim();
504
+ if (control === "relay:on")
505
+ void start({ ui: { notify: () => undefined }, cwd: process.cwd() });
506
+ else if (control === "relay:off")
507
+ closeRelay("peer_stop");
508
+ else if (control === "relay:status")
509
+ emitRelayState();
510
+ return { action: "handled" };
511
+ }
512
+ return undefined;
513
+ });
514
+ pi.on("session_before_switch", (event) => sessionNewBridge.beforeSwitch(event.reason));
515
+ pi.on("session_before_fork", () => sessionNewBridge.beforeFork());
516
+ pi.on("session_info_changed", () => { void updateEndpoint(); });
517
+ pi.on("model_select", (event) => {
518
+ setCurrentModel(event.model);
519
+ void updateEndpoint();
520
+ });
521
+ pi.on("thinking_level_select", (event) => {
522
+ currentThinking = event.level;
523
+ void updateEndpoint();
524
+ });
525
+ // working 按整次运行计算,工具调用之间的 turn 边界不改变运行状态。
526
+ pi.on("agent_start", () => { timeline?.onAgentStart(); working = true; void updateEndpoint(); });
527
+ pi.on("agent_end", (event) => {
528
+ timeline?.onAgentEnd(event.messages);
529
+ working = false;
530
+ void updateEndpoint();
531
+ currentTurnId = null;
532
+ userDelivery.scheduleDrain();
533
+ });
534
+ pi.on("agent_settled", () => userDelivery.scheduleDrain());
535
+ pi.on("message_start", (event, ctx) => {
536
+ const manager = ctx.sessionManager;
537
+ if (manager)
538
+ ensureTimeline(manager).onMessageStart(event.message, manager);
539
+ });
540
+ pi.on("message_update", (event, ctx) => {
541
+ const manager = ctx.sessionManager;
542
+ if (manager)
543
+ ensureTimeline(manager).onMessageUpdate(event, manager);
544
+ });
545
+ pi.on("message_end", (event, ctx) => {
546
+ const manager = ctx.sessionManager;
547
+ if (manager)
548
+ ensureTimeline(manager).onMessageEnd(event.message, manager);
549
+ });
550
+ pi.on("tool_execution_start", (event, ctx) => {
551
+ const manager = ctx.sessionManager;
552
+ if (manager)
553
+ ensureTimeline(manager).onToolExecutionStart(event, manager);
554
+ });
555
+ pi.on("tool_execution_update", (event, ctx) => {
556
+ const manager = ctx.sessionManager;
557
+ if (manager)
558
+ ensureTimeline(manager).onToolExecutionUpdate(event, manager);
559
+ });
560
+ pi.on("tool_execution_end", (event, ctx) => {
561
+ const manager = ctx.sessionManager;
562
+ if (manager)
563
+ ensureTimeline(manager).onToolExecutionEnd(event, manager);
564
+ });
565
+ api.on("session_start", (event, ctx) => {
566
+ if (!owner.activate(event, ctx))
567
+ return;
568
+ piApi = api;
569
+ lastEventCtx = ctx;
570
+ footerCtx = ctx;
571
+ refreshFooter();
572
+ setCurrentModel(ctx.model);
573
+ const manager = ctx.sessionManager;
574
+ if (manager) {
575
+ userDelivery.clearAll();
576
+ currentSessionManager = manager;
577
+ ensureTimeline(manager).resetSession(manager);
578
+ emitRuntimeEvent("session-changed", { endpoint_id: endpointIdentity.endpointId, runtime_instance_id: endpointIdentity.runtimeInstanceId, session_id: manager.getSessionId(), leaf_id: manager.getLeafId() ?? null });
579
+ emitRuntimeReady(ctx);
580
+ if (!sessionNewBridge.isRunning())
581
+ finishSessionReplacement();
582
+ void updateEndpoint();
583
+ }
584
+ try {
585
+ currentThinking = pi.getThinkingLevel();
586
+ }
587
+ catch { /* optional SDK capability */ }
588
+ if (relayLifecycle.state === "idle")
589
+ void start(ctx).catch((error) => {
590
+ try {
591
+ ctx.ui.notify(`[pi-reach] Startup failed: ${String(error)}`, "error");
592
+ }
593
+ catch { /* stale UI context */ }
594
+ });
595
+ });
596
+ pi.on("session_tree", () => refreshOwnerScopes("branch_changed"));
597
+ api.on("session_shutdown", (event) => {
598
+ if (!owner.isCurrent())
599
+ return;
600
+ userDelivery.clearAll();
601
+ footerCtx = null;
602
+ if (event.reason !== "quit") {
603
+ replacedSessionId = currentSessionManager?.getSessionId() ?? null;
604
+ currentSessionManager = null;
605
+ owner.release(event);
606
+ return;
607
+ }
608
+ relayLifecycle.setDisposed(true);
609
+ closeRelay("shutdown");
610
+ owner.release(event);
611
+ });
612
+ };
613
+ export default extension;
614
+ /** Compatibility seam used by focused extension tests. */
615
+ export async function _startRelayForTest(ctx) { await start(ctx); }
616
+ export async function _stopForTest(_ctx) { closeRelay("peer_stop"); }
617
+ export async function _connectForTest(ctx) { await start(ctx); }
618
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}