@agentuity/coder-tui 2.0.8

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 (117) hide show
  1. package/README.md +57 -0
  2. package/dist/chain-preview.d.ts +55 -0
  3. package/dist/chain-preview.d.ts.map +1 -0
  4. package/dist/chain-preview.js +472 -0
  5. package/dist/chain-preview.js.map +1 -0
  6. package/dist/client.d.ts +44 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +411 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands.d.ts +22 -0
  11. package/dist/commands.d.ts.map +1 -0
  12. package/dist/commands.js +99 -0
  13. package/dist/commands.js.map +1 -0
  14. package/dist/footer.d.ts +34 -0
  15. package/dist/footer.d.ts.map +1 -0
  16. package/dist/footer.js +249 -0
  17. package/dist/footer.js.map +1 -0
  18. package/dist/handlers.d.ts +24 -0
  19. package/dist/handlers.d.ts.map +1 -0
  20. package/dist/handlers.js +83 -0
  21. package/dist/handlers.js.map +1 -0
  22. package/dist/hub-overlay-state.d.ts +31 -0
  23. package/dist/hub-overlay-state.d.ts.map +1 -0
  24. package/dist/hub-overlay-state.js +78 -0
  25. package/dist/hub-overlay-state.js.map +1 -0
  26. package/dist/hub-overlay.d.ts +146 -0
  27. package/dist/hub-overlay.d.ts.map +1 -0
  28. package/dist/hub-overlay.js +2354 -0
  29. package/dist/hub-overlay.js.map +1 -0
  30. package/dist/inbound-rpc.d.ts +3 -0
  31. package/dist/inbound-rpc.d.ts.map +1 -0
  32. package/dist/inbound-rpc.js +29 -0
  33. package/dist/inbound-rpc.js.map +1 -0
  34. package/dist/index.d.ts +4 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +1641 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/native-remote-ui-context.d.ts +5 -0
  39. package/dist/native-remote-ui-context.d.ts.map +1 -0
  40. package/dist/native-remote-ui-context.js +30 -0
  41. package/dist/native-remote-ui-context.js.map +1 -0
  42. package/dist/output-viewer.d.ts +49 -0
  43. package/dist/output-viewer.d.ts.map +1 -0
  44. package/dist/output-viewer.js +389 -0
  45. package/dist/output-viewer.js.map +1 -0
  46. package/dist/overlay.d.ts +40 -0
  47. package/dist/overlay.d.ts.map +1 -0
  48. package/dist/overlay.js +225 -0
  49. package/dist/overlay.js.map +1 -0
  50. package/dist/protocol.d.ts +605 -0
  51. package/dist/protocol.d.ts.map +1 -0
  52. package/dist/protocol.js +4 -0
  53. package/dist/protocol.js.map +1 -0
  54. package/dist/remote-lifecycle.d.ts +61 -0
  55. package/dist/remote-lifecycle.d.ts.map +1 -0
  56. package/dist/remote-lifecycle.js +190 -0
  57. package/dist/remote-lifecycle.js.map +1 -0
  58. package/dist/remote-session.d.ts +130 -0
  59. package/dist/remote-session.d.ts.map +1 -0
  60. package/dist/remote-session.js +896 -0
  61. package/dist/remote-session.js.map +1 -0
  62. package/dist/remote-tui.d.ts +42 -0
  63. package/dist/remote-tui.d.ts.map +1 -0
  64. package/dist/remote-tui.js +868 -0
  65. package/dist/remote-tui.js.map +1 -0
  66. package/dist/remote-ui-handler.d.ts +5 -0
  67. package/dist/remote-ui-handler.d.ts.map +1 -0
  68. package/dist/remote-ui-handler.js +53 -0
  69. package/dist/remote-ui-handler.js.map +1 -0
  70. package/dist/renderers.d.ts +34 -0
  71. package/dist/renderers.d.ts.map +1 -0
  72. package/dist/renderers.js +669 -0
  73. package/dist/renderers.js.map +1 -0
  74. package/dist/review.d.ts +15 -0
  75. package/dist/review.d.ts.map +1 -0
  76. package/dist/review.js +154 -0
  77. package/dist/review.js.map +1 -0
  78. package/dist/titlebar.d.ts +3 -0
  79. package/dist/titlebar.d.ts.map +1 -0
  80. package/dist/titlebar.js +59 -0
  81. package/dist/titlebar.js.map +1 -0
  82. package/dist/todo/index.d.ts +3 -0
  83. package/dist/todo/index.d.ts.map +1 -0
  84. package/dist/todo/index.js +3 -0
  85. package/dist/todo/index.js.map +1 -0
  86. package/dist/todo/store.d.ts +6 -0
  87. package/dist/todo/store.d.ts.map +1 -0
  88. package/dist/todo/store.js +43 -0
  89. package/dist/todo/store.js.map +1 -0
  90. package/dist/todo/types.d.ts +13 -0
  91. package/dist/todo/types.d.ts.map +1 -0
  92. package/dist/todo/types.js +2 -0
  93. package/dist/todo/types.js.map +1 -0
  94. package/package.json +42 -0
  95. package/src/chain-preview.ts +621 -0
  96. package/src/client.ts +527 -0
  97. package/src/commands.ts +132 -0
  98. package/src/footer.ts +305 -0
  99. package/src/handlers.ts +113 -0
  100. package/src/hub-overlay-state.ts +127 -0
  101. package/src/hub-overlay.ts +3037 -0
  102. package/src/inbound-rpc.ts +35 -0
  103. package/src/index.ts +1963 -0
  104. package/src/native-remote-ui-context.ts +41 -0
  105. package/src/output-viewer.ts +480 -0
  106. package/src/overlay.ts +294 -0
  107. package/src/protocol.ts +758 -0
  108. package/src/remote-lifecycle.ts +270 -0
  109. package/src/remote-session.ts +1100 -0
  110. package/src/remote-tui.ts +1023 -0
  111. package/src/remote-ui-handler.ts +86 -0
  112. package/src/renderers.ts +740 -0
  113. package/src/review.ts +201 -0
  114. package/src/titlebar.ts +63 -0
  115. package/src/todo/index.ts +2 -0
  116. package/src/todo/store.ts +49 -0
  117. package/src/todo/types.ts +14 -0
@@ -0,0 +1,61 @@
1
+ export type RemoteLifecyclePhase = 'connecting' | 'hydrating' | 'replaying' | 'live' | 'paused' | 'resuming' | 'reconnecting' | 'disconnected';
2
+ export type RemoteTransportState = 'connecting' | 'connected' | 'reconnecting' | 'disconnected';
3
+ export interface RemoteLifecycleState {
4
+ sessionId: string;
5
+ label: string;
6
+ transport: RemoteTransportState;
7
+ phase: RemoteLifecyclePhase;
8
+ leadConnected: boolean | null;
9
+ isStreaming: boolean;
10
+ hydrationReceived: boolean;
11
+ streamId: string | null;
12
+ streamUrl: string | null;
13
+ lastError: string | null;
14
+ }
15
+ export interface RemoteLifecycleWorkingMessageUi {
16
+ setWorkingMessage(message?: string): void;
17
+ }
18
+ export type RemoteLifecycleEvent = {
19
+ type: 'connect_start';
20
+ reconnect: boolean;
21
+ } | {
22
+ type: 'init';
23
+ sessionId?: string;
24
+ label?: string;
25
+ } | {
26
+ type: 'hydration';
27
+ leadConnected?: boolean;
28
+ isStreaming?: boolean;
29
+ } | {
30
+ type: 'replay_event';
31
+ } | {
32
+ type: 'replay_idle';
33
+ } | {
34
+ type: 'live_signal';
35
+ isStreaming?: boolean;
36
+ } | {
37
+ type: 'session_resume';
38
+ streamId?: string | null;
39
+ streamUrl?: string | null;
40
+ } | {
41
+ type: 'stream_ready';
42
+ streamId?: string | null;
43
+ streamUrl?: string | null;
44
+ } | {
45
+ type: 'rpc_command_error';
46
+ error: string;
47
+ paused: boolean;
48
+ } | {
49
+ type: 'local_resume_requested';
50
+ } | {
51
+ type: 'connection_change';
52
+ state: 'reconnecting' | 'disconnected';
53
+ };
54
+ export declare function createRemoteLifecycleState(sessionId: string): RemoteLifecycleState;
55
+ export declare function applyRemoteLifecycleEvent(state: RemoteLifecycleState, event: RemoteLifecycleEvent): RemoteLifecycleState;
56
+ export declare function getRemoteLifecycleLabel(state: RemoteLifecycleState): string;
57
+ export declare function getRemoteLifecycleActivityLabel(state: RemoteLifecycleState): string | undefined;
58
+ export declare function getRemoteLifecycleWorkingMessage(state: RemoteLifecycleState): string | undefined;
59
+ export declare function clearRemoteLifecycleWorkingMessage(ui: RemoteLifecycleWorkingMessageUi, lifecycleOwnsWorkingMessage: boolean): boolean;
60
+ export declare function syncRemoteLifecycleWorkingMessage(state: RemoteLifecycleState, ui: RemoteLifecycleWorkingMessageUi, lifecycleOwnsWorkingMessage: boolean): boolean;
61
+ //# sourceMappingURL=remote-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-lifecycle.d.ts","sourceRoot":"","sources":["../src/remote-lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC7B,YAAY,GACZ,WAAW,GACX,WAAW,GACX,MAAM,GACN,QAAQ,GACR,UAAU,GACV,cAAc,GACd,cAAc,CAAC;AAElB,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;AAEhG,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,+BAA+B;IAC/C,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,MAAM,oBAAoB,GAC7B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IACA,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACrB,GACD;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAAA;CAAE,CAAC;AAEzE,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAalF;AA8BD,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,oBAAoB,GACzB,oBAAoB,CA6FtB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAmB3E;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAmB/F;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAiBhG;AAED,wBAAgB,kCAAkC,CACjD,EAAE,EAAE,+BAA+B,EACnC,2BAA2B,EAAE,OAAO,GAClC,OAAO,CAKT;AAED,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,oBAAoB,EAC3B,EAAE,EAAE,+BAA+B,EACnC,2BAA2B,EAAE,OAAO,GAClC,OAAO,CAOT"}
@@ -0,0 +1,190 @@
1
+ export function createRemoteLifecycleState(sessionId) {
2
+ return {
3
+ sessionId,
4
+ label: '',
5
+ transport: 'disconnected',
6
+ phase: 'disconnected',
7
+ leadConnected: null,
8
+ isStreaming: false,
9
+ hydrationReceived: false,
10
+ streamId: null,
11
+ streamUrl: null,
12
+ lastError: null,
13
+ };
14
+ }
15
+ function patchState(state, patch) {
16
+ let changed = false;
17
+ const next = { ...state };
18
+ for (const [key, value] of Object.entries(patch)) {
19
+ const typedKey = key;
20
+ if (next[typedKey] !== value) {
21
+ changed = true;
22
+ next[typedKey] =
23
+ value;
24
+ }
25
+ }
26
+ return changed ? next : state;
27
+ }
28
+ function resolveConnectedPhase(input) {
29
+ if (input.isStreaming)
30
+ return 'live';
31
+ if (input.leadConnected === false)
32
+ return 'paused';
33
+ return 'live';
34
+ }
35
+ export function applyRemoteLifecycleEvent(state, event) {
36
+ switch (event.type) {
37
+ case 'connect_start':
38
+ return patchState(state, {
39
+ transport: event.reconnect ? 'reconnecting' : 'connecting',
40
+ phase: event.reconnect ? 'reconnecting' : 'connecting',
41
+ lastError: null,
42
+ });
43
+ case 'init':
44
+ return patchState(state, {
45
+ sessionId: event.sessionId || state.sessionId,
46
+ label: event.label || state.label,
47
+ transport: 'connected',
48
+ phase: 'hydrating',
49
+ lastError: null,
50
+ });
51
+ case 'hydration': {
52
+ const leadConnected = typeof event.leadConnected === 'boolean' ? event.leadConnected : state.leadConnected;
53
+ const isStreaming = typeof event.isStreaming === 'boolean' ? event.isStreaming : state.isStreaming;
54
+ return patchState(state, {
55
+ leadConnected,
56
+ isStreaming,
57
+ hydrationReceived: true,
58
+ transport: 'connected',
59
+ phase: resolveConnectedPhase({ leadConnected, isStreaming }),
60
+ lastError: null,
61
+ });
62
+ }
63
+ case 'replay_event':
64
+ if (state.transport !== 'connected')
65
+ return state;
66
+ return patchState(state, {
67
+ phase: 'replaying',
68
+ });
69
+ case 'replay_idle':
70
+ if (state.phase !== 'replaying')
71
+ return state;
72
+ return patchState(state, {
73
+ phase: resolveConnectedPhase({
74
+ leadConnected: state.leadConnected,
75
+ isStreaming: state.isStreaming,
76
+ }),
77
+ });
78
+ case 'live_signal':
79
+ return patchState(state, {
80
+ transport: 'connected',
81
+ phase: 'live',
82
+ leadConnected: true,
83
+ isStreaming: typeof event.isStreaming === 'boolean' ? event.isStreaming : state.isStreaming,
84
+ lastError: null,
85
+ });
86
+ case 'session_resume':
87
+ return patchState(state, {
88
+ streamId: event.streamId ?? state.streamId,
89
+ streamUrl: event.streamUrl ?? state.streamUrl,
90
+ phase: 'resuming',
91
+ lastError: null,
92
+ });
93
+ case 'stream_ready':
94
+ return patchState(state, {
95
+ streamId: event.streamId ?? state.streamId,
96
+ streamUrl: event.streamUrl ?? state.streamUrl,
97
+ });
98
+ case 'rpc_command_error':
99
+ return patchState(state, {
100
+ lastError: event.error,
101
+ leadConnected: event.paused ? false : state.leadConnected,
102
+ isStreaming: event.paused ? false : state.isStreaming,
103
+ phase: event.paused ? 'paused' : state.phase,
104
+ });
105
+ case 'local_resume_requested':
106
+ return patchState(state, {
107
+ phase: 'resuming',
108
+ lastError: null,
109
+ });
110
+ case 'connection_change':
111
+ return patchState(state, {
112
+ transport: event.state,
113
+ phase: event.state,
114
+ isStreaming: false,
115
+ });
116
+ }
117
+ }
118
+ export function getRemoteLifecycleLabel(state) {
119
+ switch (state.phase) {
120
+ case 'connecting':
121
+ return 'Connecting';
122
+ case 'hydrating':
123
+ return 'Hydrating';
124
+ case 'replaying':
125
+ return 'Replaying';
126
+ case 'paused':
127
+ return 'Paused';
128
+ case 'resuming':
129
+ return 'Resuming';
130
+ case 'reconnecting':
131
+ return 'Reconnecting';
132
+ case 'disconnected':
133
+ return 'Disconnected';
134
+ case 'live':
135
+ return 'Live';
136
+ }
137
+ }
138
+ export function getRemoteLifecycleActivityLabel(state) {
139
+ switch (state.phase) {
140
+ case 'connecting':
141
+ return 'connecting to sandbox...';
142
+ case 'hydrating':
143
+ return 'hydrating remote session...';
144
+ case 'replaying':
145
+ return 'replaying remote history...';
146
+ case 'paused':
147
+ return 'sandbox paused';
148
+ case 'resuming':
149
+ return 'resuming sandbox...';
150
+ case 'reconnecting':
151
+ return 'reconnecting...';
152
+ case 'disconnected':
153
+ return state.lastError ? `disconnected: ${state.lastError}` : 'disconnected';
154
+ case 'live':
155
+ return undefined;
156
+ }
157
+ }
158
+ export function getRemoteLifecycleWorkingMessage(state) {
159
+ switch (state.phase) {
160
+ case 'connecting':
161
+ return 'Connecting to remote sandbox...';
162
+ case 'hydrating':
163
+ return 'Hydrating remote session...';
164
+ case 'replaying':
165
+ return 'Replaying remote history...';
166
+ case 'resuming':
167
+ return 'Resuming remote sandbox...';
168
+ case 'reconnecting':
169
+ return 'Connection lost - reconnecting...';
170
+ case 'paused':
171
+ case 'disconnected':
172
+ case 'live':
173
+ return undefined;
174
+ }
175
+ }
176
+ export function clearRemoteLifecycleWorkingMessage(ui, lifecycleOwnsWorkingMessage) {
177
+ if (lifecycleOwnsWorkingMessage) {
178
+ ui.setWorkingMessage();
179
+ }
180
+ return false;
181
+ }
182
+ export function syncRemoteLifecycleWorkingMessage(state, ui, lifecycleOwnsWorkingMessage) {
183
+ const working = getRemoteLifecycleWorkingMessage(state);
184
+ if (working) {
185
+ ui.setWorkingMessage(working);
186
+ return true;
187
+ }
188
+ return clearRemoteLifecycleWorkingMessage(ui, lifecycleOwnsWorkingMessage);
189
+ }
190
+ //# sourceMappingURL=remote-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-lifecycle.js","sourceRoot":"","sources":["../src/remote-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Remote Session Bridge — TUI ↔ Hub ↔ Sandbox
3
+ *
4
+ * Handles the WebSocket connection and RPC protocol bridge for remote mode.
5
+ * In remote mode, the local Pi TUI connects to an existing sandbox session
6
+ * through the Hub, acting as a thin client:
7
+ * - User input → rpc_command → Hub → sandbox
8
+ * - Sandbox events → rpc_event → Hub → TUI rendering
9
+ * - Extension UI dialogs → rpc_ui_request/response → Hub ↔ TUI
10
+ *
11
+ * This module manages the connection lifecycle and provides an API
12
+ * for the extension to send commands and receive events.
13
+ */
14
+ import type { ExtensionAPI, ExtensionContext } from '@mariozechner/pi-coding-agent';
15
+ import { type RemoteLifecycleState } from './remote-lifecycle.ts';
16
+ export interface RpcCommand {
17
+ type: string;
18
+ [key: string]: unknown;
19
+ }
20
+ export interface RpcEvent {
21
+ type: string;
22
+ [key: string]: unknown;
23
+ }
24
+ export interface RpcUiRequest {
25
+ id: string;
26
+ method: string;
27
+ params: Record<string, unknown>;
28
+ }
29
+ /** RPC response from sandbox (correlated by id) */
30
+ export interface RpcResponse {
31
+ type: 'response';
32
+ id: string;
33
+ command: string;
34
+ success: boolean;
35
+ data?: unknown;
36
+ error?: string;
37
+ }
38
+ export type RemoteEventHandler = (event: RpcEvent) => void;
39
+ export type RemoteResponseHandler = (response: RpcResponse) => void;
40
+ export type RemoteUiHandler = (request: RpcUiRequest) => Promise<unknown>;
41
+ export type RemoteConnectionHandler = (state: 'connected' | 'reconnecting' | 'disconnected') => void;
42
+ export type RemoteLifecycleHandler = (state: RemoteLifecycleState) => void;
43
+ export declare class RemoteSession {
44
+ private ws;
45
+ private connected;
46
+ private intentionallyClosed;
47
+ private hubWsUrl;
48
+ private reconnectAttempts;
49
+ private reconnectTimer;
50
+ private eventHandlers;
51
+ private uiHandler;
52
+ private responseHandlers;
53
+ private connectionHandlers;
54
+ private lifecycleHandlers;
55
+ private lifecycleState;
56
+ private replaySettledTimer;
57
+ /** Session ID this client is connected to */
58
+ sessionId: string;
59
+ /** Session label (populated after connection) */
60
+ label: string;
61
+ /** API key for Hub authentication (Hub API key or CLI/platform key) */
62
+ apiKey: string | null;
63
+ /** Organization ID for CLI/platform key auth (sent as x-agentuity-orgid header) */
64
+ orgId: string | null;
65
+ constructor(sessionId: string);
66
+ private dispatchEvent;
67
+ private dispatchResponse;
68
+ private applyLifecycle;
69
+ private clearReplaySettledTimer;
70
+ private scheduleReplaySettled;
71
+ private observeLiveSignal;
72
+ private getLiveSignalStreamingState;
73
+ private shouldMarkResuming;
74
+ private shouldObserveRpcResponseAsLive;
75
+ /** Register a handler for RPC events from the sandbox */
76
+ onEvent(handler: RemoteEventHandler): void;
77
+ /** Register a handler for RPC responses from the sandbox */
78
+ onResponse(handler: RemoteResponseHandler): void;
79
+ /** Register the UI dialog handler (select, confirm, input, editor) */
80
+ setUiHandler(handler: RemoteUiHandler): void;
81
+ /** Register a connection state change handler */
82
+ onConnectionChange(handler: RemoteConnectionHandler): void;
83
+ /** Register a lifecycle state handler for remote attach/replay/live transitions. */
84
+ onLifecycleChange(handler: RemoteLifecycleHandler): void;
85
+ getLifecycleState(): RemoteLifecycleState;
86
+ /** Connect to the Hub WebSocket as a controller for the remote session */
87
+ connect(hubWsUrl: string): Promise<void>;
88
+ private doConnect;
89
+ private scheduleReconnect;
90
+ private notifyConnectionChange;
91
+ /** Send an RPC command to the sandbox (prompt, steer, abort, etc.) */
92
+ sendCommand(command: RpcCommand): void;
93
+ /** Send a user prompt to the remote sandbox */
94
+ prompt(message: string, images?: string[]): void;
95
+ /** Steer the agent mid-turn */
96
+ steer(message: string): void;
97
+ /** Abort current operation */
98
+ abort(): void;
99
+ /** Get current session state */
100
+ getState(): void;
101
+ /** Get all messages in current session */
102
+ getMessages(): void;
103
+ /** Compact the session context */
104
+ compact(): void;
105
+ /** Close the connection */
106
+ close(): void;
107
+ get isConnected(): boolean;
108
+ /** Handle UI request from sandbox — delegate to registered handler */
109
+ private handleUiRequest;
110
+ /** Send UI response back to sandbox */
111
+ private sendUiResponse;
112
+ }
113
+ /**
114
+ * Set up remote mode for the Pi extension.
115
+ *
116
+ * Connects to an existing sandbox session through the Hub and bridges
117
+ * user input → RPC commands and sandbox events → TUI rendering.
118
+ *
119
+ * Uses Pi's extension APIs for rich rendering:
120
+ * - pi.sendMessage() for completed assistant messages
121
+ * - ctx.ui.setWidget() for streaming output
122
+ * - ctx.ui.setWorkingMessage() for tool execution status
123
+ * - ctx.ui.setStatus() for connection and agent state
124
+ */
125
+ export declare function setupRemoteMode(pi: ExtensionAPI, hubWsUrl: string, sessionId: string): Promise<RemoteSession>;
126
+ /** Internal interface for passing extension context to RemoteSession */
127
+ export interface RemoteSessionInternal extends RemoteSession {
128
+ _setExtensionCtx?: (ctx: ExtensionContext) => void;
129
+ }
130
+ //# sourceMappingURL=remote-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-session.d.ts","sourceRoot":"","sources":["../src/remote-session.ts"],"names":[],"mappings":"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"}