@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
@@ -0,0 +1,43 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ import type { ClientFrame, ServerFrame, TimelineEvent } from "../protocol/v2/index.js";
3
+ import type { Correlation, TimelineRuntime, TimelineStarted } from "./runtime.js";
4
+ import { type UserDeliveryEnqueueResult, type UserDeliveryScopeInput, type UserDeliverySteerResult } from "./user_delivery.js";
5
+ import type { TimelineV2Service } from "./v2_service.js";
6
+ type UserMessageFrame = Extract<ClientFrame, {
7
+ type: "user_message";
8
+ }>;
9
+ export type UserDeliveryTarget = {
10
+ readonly service: TimelineV2Service;
11
+ readonly sessionId: string;
12
+ readonly leafId: string | null;
13
+ };
14
+ export type UserDeliveryBindingOptions = {
15
+ isIdle: () => boolean;
16
+ canAcceptNormal: () => boolean;
17
+ getPi: () => ExtensionAPI | null;
18
+ getTimeline: () => TimelineRuntime | null;
19
+ getCurrentSessionId: () => string | null;
20
+ getCurrentLeafId: () => string | null;
21
+ findTarget: (ownerId: string) => UserDeliveryTarget | null;
22
+ sendFrames: (ownerId: string, frames: readonly ServerFrame[]) => void;
23
+ };
24
+ export declare class UserDeliveryBinding {
25
+ private readonly options;
26
+ private readonly queue;
27
+ constructor(options: UserDeliveryBindingOptions);
28
+ submit(frame: UserMessageFrame, correlation: Correlation, scope: UserDeliveryScopeInput): UserDeliveryEnqueueResult | true;
29
+ snapshot(ownerId: string, service: TimelineV2Service): ServerFrame[];
30
+ clearQueued(ownerId: string, service: TimelineV2Service, targetId?: string): string[];
31
+ steerQueued(ownerId: string, service: TimelineV2Service, targetId: string): UserDeliverySteerResult;
32
+ onStarted(started: TimelineStarted): void;
33
+ onPublished(event: TimelineEvent, correlation: Correlation): void;
34
+ clearOwner(ownerId: string, service?: TimelineV2Service): void;
35
+ clearAll(): void;
36
+ scheduleDrain(): void;
37
+ private sendSteer;
38
+ private send;
39
+ private isCurrent;
40
+ private sendSnapshot;
41
+ private sendScope;
42
+ }
43
+ export {};
@@ -0,0 +1,107 @@
1
+ import { UserDeliveryQueue, } from "./user_delivery.js";
2
+ export class UserDeliveryBinding {
3
+ options;
4
+ queue;
5
+ constructor(options) {
6
+ this.options = options;
7
+ this.queue = new UserDeliveryQueue({
8
+ isIdle: options.isIdle,
9
+ isCurrent: (scope) => this.isCurrent(scope),
10
+ send: (content, correlation, sendOptions) => this.send(content, correlation, sendOptions),
11
+ onUnknownDelivery: (scope) => this.sendScope(scope, scope.service.unknownDelivery(scope.clientRequestId)),
12
+ onQueueChanged: (scope) => this.sendSnapshot(scope),
13
+ canQueueItem: (scope, item) => scope.service.canQueueItem(item),
14
+ });
15
+ }
16
+ submit(frame, correlation, scope) {
17
+ if (frame.streaming_behavior === "steer")
18
+ return this.sendSteer(messageContent(frame), correlation);
19
+ if (!this.options.canAcceptNormal())
20
+ return false;
21
+ return this.queue.enqueue(messageContent(frame), correlation, scope, messagePayload(frame));
22
+ }
23
+ snapshot(ownerId, service) {
24
+ return service.queueSnapshot(this.queue.snapshot(ownerId, service));
25
+ }
26
+ clearQueued(ownerId, service, targetId) {
27
+ return this.queue.clearQueued(ownerId, service, targetId).map((scope) => scope.clientRequestId);
28
+ }
29
+ steerQueued(ownerId, service, targetId) {
30
+ return this.queue.steer(ownerId, service, targetId);
31
+ }
32
+ onStarted(started) {
33
+ if (started.role !== "user")
34
+ return;
35
+ const scope = this.queue.onUserStarted(started);
36
+ if (!scope)
37
+ return;
38
+ this.sendScope(scope, scope.service.started(started));
39
+ this.sendSnapshot(scope);
40
+ }
41
+ onPublished(event, correlation) {
42
+ if (event.kind !== "user")
43
+ return;
44
+ const scope = this.queue.onUserPublished(event, correlation);
45
+ if (scope)
46
+ this.sendScope(scope, scope.service.commit(scope.clientRequestId, event.event_id, event.group_id));
47
+ }
48
+ clearOwner(ownerId, service) {
49
+ this.queue.clearOwner(ownerId, service);
50
+ }
51
+ clearAll() {
52
+ this.queue.clearAll();
53
+ }
54
+ scheduleDrain() {
55
+ this.queue.scheduleDrain();
56
+ }
57
+ sendSteer(content, correlation) {
58
+ try {
59
+ this.send(content, correlation, { deliverAs: "steer" });
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ send(content, correlation, options) {
67
+ const pi = this.options.getPi();
68
+ if (!pi)
69
+ throw new Error("Pi API is unavailable");
70
+ const send = () => pi.sendUserMessage(content, options);
71
+ const timeline = this.options.getTimeline();
72
+ if (timeline)
73
+ timeline.runWithCorrelation(correlation, send);
74
+ else
75
+ send();
76
+ }
77
+ isCurrent(scope) {
78
+ const target = this.options.findTarget(scope.ownerId);
79
+ return target?.service === scope.service
80
+ && target.sessionId === scope.sessionId
81
+ && this.options.getCurrentSessionId() === scope.sessionId
82
+ && this.options.getCurrentLeafId() === scope.leafId;
83
+ }
84
+ sendSnapshot(scope) {
85
+ if (this.isCurrent(scope))
86
+ this.options.sendFrames(scope.ownerId, this.snapshot(scope.ownerId, scope.service));
87
+ }
88
+ sendScope(scope, frames) {
89
+ if (this.isCurrent(scope))
90
+ this.options.sendFrames(scope.ownerId, frames);
91
+ }
92
+ }
93
+ function messageContent(frame) {
94
+ if (!frame.images?.length)
95
+ return frame.text;
96
+ return [
97
+ ...frame.images.map((image) => ({ type: "image", data: image.data, mimeType: image.mime })),
98
+ { type: "text", text: frame.text },
99
+ ];
100
+ }
101
+ function messagePayload(frame) {
102
+ return {
103
+ text: frame.text,
104
+ ...(frame.images?.length ? { images: frame.images.map((image) => ({ ...image })) } : {}),
105
+ };
106
+ }
107
+ //# sourceMappingURL=user_delivery_binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_delivery_binding.js","sourceRoot":"","sources":["../../src/timeline/user_delivery_binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
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 V2ActionFrame = Extract<ClientFrame, {
5
+ type: "session_new" | "session_compact" | "model_set" | "thinking_set";
6
+ }>;
7
+ export type V2ServiceOptions = {
8
+ sessionManager: SessionManager;
9
+ senderRef: string;
10
+ runtime: TimelineRuntime;
11
+ onUserMessage: (frame: Extract<ClientFrame, {
12
+ type: "user_message";
13
+ }>, correlation: Correlation) => boolean | "queued" | "duplicate" | "conflict" | "rejected";
14
+ onCancel?: () => boolean;
15
+ onAction?: (frame: V2ActionFrame) => void;
16
+ onQueueSnapshot?: () => ServerFrame[];
17
+ onQueuedMessageClear?: (targetId?: string) => string[];
18
+ onQueuedMessageSteer?: (targetId: string) => "sent" | "failed" | "missing";
19
+ onListModels?: () => Pick<Extract<ServerFrame, {
20
+ type: "models_list";
21
+ }>, "models" | "current">;
22
+ };
23
+ export type V2Broadcast = Extract<ServerFrame, {
24
+ type: "timeline_event" | "timeline_partial" | "timeline_event_fragment";
25
+ }>;
26
+ type QueuedMessageItem = Extract<ServerFrame, {
27
+ type: "queued_message_state";
28
+ }>["items"][number];
29
+ export declare class TimelineV2Service {
30
+ private readonly state;
31
+ private readonly pager;
32
+ private readonly sessionManager;
33
+ private readonly senderRef;
34
+ private readonly runtime;
35
+ private readonly onUserMessage;
36
+ private readonly onCancel?;
37
+ private readonly onAction?;
38
+ private readonly onQueueSnapshot?;
39
+ private readonly onQueuedMessageClear?;
40
+ private readonly onQueuedMessageSteer?;
41
+ private readonly onListModels?;
42
+ private readonly requestChannels;
43
+ constructor(options: V2ServiceOptions);
44
+ get sessionId(): string;
45
+ get leafId(): string | null;
46
+ canQueueItem(item: QueuedMessageItem): boolean;
47
+ queueSnapshot(items: readonly QueuedMessageItem[]): ServerFrame[];
48
+ reset(reason: "branch_changed" | "session_replaced"): ServerFrame[];
49
+ refreshScope(): boolean;
50
+ handle(frame: ClientFrame): ServerFrame[];
51
+ started(started: TimelineStarted): ServerFrame[];
52
+ commit(clientRequestId: string, messageId: string, groupId?: string): ServerFrame[];
53
+ canDrain(clientRequestId: string): boolean;
54
+ unknownDelivery(clientRequestId: string): ServerFrame[];
55
+ partial(partial: TimelinePartial): V2Broadcast | null;
56
+ publish(event: TimelineEvent): V2Broadcast | null;
57
+ publishFrames(event: TimelineEvent): V2Broadcast[];
58
+ private ready;
59
+ private handleHistory;
60
+ private handlePing;
61
+ private handleQueuedMessageClear;
62
+ private handleQueuedMessageSteer;
63
+ private handleCancel;
64
+ private handleObserved;
65
+ private handleUserMessage;
66
+ private replay;
67
+ private status;
68
+ private handleListModels;
69
+ private handleAction;
70
+ private requireReady;
71
+ private ensureReady;
72
+ private currentQueueSnapshot;
73
+ private queueFrame;
74
+ private frameBytes;
75
+ private terminateQueuedRequest;
76
+ private direct;
77
+ private error;
78
+ private idempotencyPayload;
79
+ private recordKey;
80
+ private findRecord;
81
+ }
82
+ export {};