@ifi/pi-web-client 0.3.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Ifiok Jr.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,41 @@
1
+ import type { CommandInfo, CompactionResult, ConnectionState, ExtensionUIResponse, InstanceInfo, PiWebClientOptions, PromptOptions, SessionState, SessionStats, ThinkingLevel } from "./types.js";
2
+ type Unsubscribe = () => void;
3
+ type EventHandler = (event: unknown) => void;
4
+ export declare class PiWebClient {
5
+ private _options;
6
+ private _ws;
7
+ private _state;
8
+ private _instanceId;
9
+ private _listeners;
10
+ private _pendingRequests;
11
+ private _reconnect;
12
+ private _webSocketCtor;
13
+ constructor(options: PiWebClientOptions);
14
+ get state(): ConnectionState;
15
+ get instanceId(): string | undefined;
16
+ connect(): Promise<InstanceInfo>;
17
+ disconnect(): void;
18
+ prompt(message: string, options?: PromptOptions): Promise<void>;
19
+ steer(message: string): Promise<void>;
20
+ followUp(message: string): Promise<void>;
21
+ abort(): Promise<void>;
22
+ getState(): Promise<SessionState>;
23
+ getMessages(): Promise<unknown[]>;
24
+ getSessionStats(): Promise<SessionStats>;
25
+ getCommands(): Promise<CommandInfo[]>;
26
+ setModel(provider: string, modelId: string): Promise<unknown>;
27
+ getAvailableModels(): Promise<unknown[]>;
28
+ setThinkingLevel(level: ThinkingLevel): Promise<void>;
29
+ compact(instructions?: string): Promise<CompactionResult>;
30
+ newSession(): Promise<{
31
+ cancelled: boolean;
32
+ }>;
33
+ respondToUI(requestId: string, response: Omit<ExtensionUIResponse, "type" | "id">): void;
34
+ on(event: string, handler: EventHandler): Unsubscribe;
35
+ private _send;
36
+ private _request;
37
+ private _setState;
38
+ private _emit;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EAEb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,MAAM,YAAY,CAAC;AAEpB,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAC9B,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAI7C,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAA8F;IACtH,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,cAAc,CAAmB;gBAE7B,OAAO,EAAE,kBAAkB;IAMvC,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAiGhC,UAAU,IAAI,IAAI;IASZ,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAIjC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAKjC,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAIxC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAKxC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIzD,UAAU,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAInD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;IAMxF,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IAYrD,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,KAAK;CAYb"}
package/dist/client.js ADDED
@@ -0,0 +1,216 @@
1
+ import { ReconnectManager } from "./reconnect.js";
2
+ let requestCounter = 0;
3
+ export class PiWebClient {
4
+ _options;
5
+ _ws;
6
+ _state = "disconnected";
7
+ _instanceId;
8
+ _listeners = new Map();
9
+ _pendingRequests = new Map();
10
+ _reconnect;
11
+ _webSocketCtor;
12
+ constructor(options) {
13
+ this._options = options;
14
+ this._reconnect = new ReconnectManager(options.reconnectInterval ?? 1000);
15
+ this._webSocketCtor = (options.webSocket ?? globalThis.WebSocket);
16
+ }
17
+ get state() {
18
+ return this._state;
19
+ }
20
+ get instanceId() {
21
+ return this._instanceId;
22
+ }
23
+ connect() {
24
+ if (this._state === "connected") {
25
+ throw new Error("Already connected");
26
+ }
27
+ this._setState("connecting");
28
+ return new Promise((resolve, reject) => {
29
+ try {
30
+ this._ws = new this._webSocketCtor(this._options.url);
31
+ }
32
+ catch (err) {
33
+ this._setState("disconnected");
34
+ reject(err instanceof Error ? err : new Error(String(err)));
35
+ return;
36
+ }
37
+ this._ws.onopen = () => {
38
+ this._setState("authenticating");
39
+ this._send({ type: "auth", token: this._options.token });
40
+ };
41
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: message handling branches by protocol message type.
42
+ this._ws.onmessage = (event) => {
43
+ let data;
44
+ try {
45
+ data = JSON.parse(typeof event.data === "string" ? event.data : String(event.data));
46
+ }
47
+ catch {
48
+ return;
49
+ }
50
+ // Handle auth response
51
+ if (data.type === "auth_ok") {
52
+ const authOk = data;
53
+ this._instanceId = authOk.instanceId;
54
+ this._setState("connected");
55
+ this._reconnect.reset();
56
+ const info = {
57
+ instanceId: authOk.instanceId,
58
+ sessionId: authOk.session?.sessionId ?? "",
59
+ isStreaming: authOk.session?.isStreaming ?? false,
60
+ model: authOk.session?.model,
61
+ thinkingLevel: authOk.session?.thinkingLevel ?? "off",
62
+ };
63
+ resolve(info);
64
+ return;
65
+ }
66
+ if (data.type === "auth_error") {
67
+ this._setState("disconnected");
68
+ reject(new Error(`Authentication failed: ${data.reason}`));
69
+ this._ws?.close();
70
+ return;
71
+ }
72
+ // Handle RPC responses (correlated by id)
73
+ if (data.type === "response") {
74
+ const response = data;
75
+ if (response.id && this._pendingRequests.has(response.id)) {
76
+ const pending = this._pendingRequests.get(response.id);
77
+ this._pendingRequests.delete(response.id);
78
+ if (!pending) {
79
+ return;
80
+ }
81
+ if (response.success) {
82
+ pending.resolve(response.data);
83
+ }
84
+ else {
85
+ pending.reject(new Error(response.error ?? "Command failed"));
86
+ }
87
+ }
88
+ return;
89
+ }
90
+ // All other messages are events — dispatch to listeners
91
+ this._emit(data.type, data);
92
+ };
93
+ this._ws.onclose = () => {
94
+ const wasConnected = this._state === "connected";
95
+ this._setState("disconnected");
96
+ if (wasConnected && this._options.autoReconnect !== false) {
97
+ this._setState("reconnecting");
98
+ this._reconnect.schedule(() => {
99
+ this.connect().catch(() => {
100
+ // Reconnect will retry via schedule
101
+ });
102
+ });
103
+ }
104
+ };
105
+ this._ws.onerror = () => {
106
+ this._emit("error", new Error("WebSocket error"));
107
+ };
108
+ });
109
+ }
110
+ disconnect() {
111
+ this._reconnect.stop();
112
+ this._ws?.close();
113
+ this._ws = undefined;
114
+ this._setState("disconnected");
115
+ }
116
+ // RPC Commands
117
+ async prompt(message, options) {
118
+ await this._request({
119
+ type: "prompt",
120
+ message,
121
+ streamingBehavior: options?.streamingBehavior,
122
+ images: options?.images,
123
+ });
124
+ }
125
+ async steer(message) {
126
+ await this._request({ type: "steer", message });
127
+ }
128
+ async followUp(message) {
129
+ await this._request({ type: "follow_up", message });
130
+ }
131
+ async abort() {
132
+ await this._request({ type: "abort" });
133
+ }
134
+ async getState() {
135
+ return (await this._request({ type: "get_state" }));
136
+ }
137
+ async getMessages() {
138
+ const data = (await this._request({ type: "get_messages" }));
139
+ return data.messages;
140
+ }
141
+ async getSessionStats() {
142
+ return (await this._request({ type: "get_session_stats" }));
143
+ }
144
+ async getCommands() {
145
+ const data = (await this._request({ type: "get_commands" }));
146
+ return data.commands;
147
+ }
148
+ async setModel(provider, modelId) {
149
+ return await this._request({ type: "set_model", provider, modelId });
150
+ }
151
+ async getAvailableModels() {
152
+ const data = (await this._request({ type: "get_available_models" }));
153
+ return data.models;
154
+ }
155
+ async setThinkingLevel(level) {
156
+ await this._request({ type: "set_thinking_level", level });
157
+ }
158
+ async compact(instructions) {
159
+ return (await this._request({ type: "compact", customInstructions: instructions }));
160
+ }
161
+ async newSession() {
162
+ return (await this._request({ type: "new_session" }));
163
+ }
164
+ respondToUI(requestId, response) {
165
+ this._send({ type: "extension_ui_response", id: requestId, ...response });
166
+ }
167
+ // Event subscription
168
+ on(event, handler) {
169
+ if (!this._listeners.has(event)) {
170
+ this._listeners.set(event, new Set());
171
+ }
172
+ this._listeners.get(event)?.add(handler);
173
+ return () => {
174
+ this._listeners.get(event)?.delete(handler);
175
+ };
176
+ }
177
+ // Internals
178
+ _send(data) {
179
+ if (this._ws?.readyState === 1) {
180
+ // OPEN = 1
181
+ this._ws.send(JSON.stringify(data));
182
+ }
183
+ }
184
+ _request(cmd) {
185
+ return new Promise((resolve, reject) => {
186
+ const id = `req-${++requestCounter}`;
187
+ this._pendingRequests.set(id, { resolve, reject });
188
+ this._send({ ...cmd, id });
189
+ // Timeout after 30s
190
+ setTimeout(() => {
191
+ if (this._pendingRequests.has(id)) {
192
+ this._pendingRequests.delete(id);
193
+ reject(new Error(`Request timed out: ${cmd.type}`));
194
+ }
195
+ }, 30000);
196
+ });
197
+ }
198
+ _setState(state) {
199
+ this._state = state;
200
+ this._emit("connection", state);
201
+ }
202
+ _emit(event, data) {
203
+ const handlers = this._listeners.get(event);
204
+ if (handlers) {
205
+ for (const handler of handlers) {
206
+ try {
207
+ handler(data);
208
+ }
209
+ catch {
210
+ // Don't let handler errors break the client
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { PiWebClient } from "./client.js";
2
+ export { ReconnectManager } from "./reconnect.js";
3
+ export type { AgentEndEvent, AgentStartEvent, AuthErrorResponse, AuthOkResponse, CommandInfo, CompactionResult, ConnectionState, ExtensionUIRequest, ExtensionUIResponse, InstanceInfo, MessageEndEvent, MessageStartEvent, MessageUpdateEvent, PiWebClientOptions, PromptOptions, RpcCommand, RpcResponse, ServerEvent, SessionState, SessionStats, ThinkingLevel, ToolExecutionEndEvent, ToolExecutionStartEvent, ToolExecutionUpdateEvent, TurnEndEvent, TurnStartEvent, } from "./types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EACX,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,YAAY,EACZ,cAAc,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { PiWebClient } from "./client.js";
2
+ export { ReconnectManager } from "./reconnect.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare class ReconnectManager {
2
+ private _attempt;
3
+ private _timer;
4
+ private _maxInterval;
5
+ private _baseInterval;
6
+ private _stopped;
7
+ constructor(baseInterval?: number, maxInterval?: number);
8
+ schedule(fn: () => void): void;
9
+ reset(): void;
10
+ stop(): void;
11
+ get attempt(): number;
12
+ }
13
+ //# sourceMappingURL=reconnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconnect.d.ts","sourceRoot":"","sources":["../src/reconnect.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,YAAY,SAAO,EAAE,WAAW,SAAQ;IAKpD,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAS9B,KAAK,IAAI,IAAI;IAQb,IAAI,IAAI,IAAI;IAKZ,IAAI,OAAO,IAAI,MAAM,CAEpB;CACD"}
@@ -0,0 +1,34 @@
1
+ export class ReconnectManager {
2
+ _attempt = 0;
3
+ _timer;
4
+ _maxInterval;
5
+ _baseInterval;
6
+ _stopped = false;
7
+ constructor(baseInterval = 1000, maxInterval = 30000) {
8
+ this._baseInterval = baseInterval;
9
+ this._maxInterval = maxInterval;
10
+ }
11
+ schedule(fn) {
12
+ if (this._stopped) {
13
+ return;
14
+ }
15
+ const delay = Math.min(this._baseInterval * 2 ** this._attempt, this._maxInterval);
16
+ this._attempt++;
17
+ this._timer = setTimeout(fn, delay);
18
+ }
19
+ reset() {
20
+ this._attempt = 0;
21
+ if (this._timer !== undefined) {
22
+ clearTimeout(this._timer);
23
+ this._timer = undefined;
24
+ }
25
+ }
26
+ stop() {
27
+ this._stopped = true;
28
+ this.reset();
29
+ }
30
+ get attempt() {
31
+ return this._attempt;
32
+ }
33
+ }
34
+ //# sourceMappingURL=reconnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconnect.js","sourceRoot":"","sources":["../src/reconnect.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IACpB,QAAQ,GAAG,CAAC,CAAC;IACb,MAAM,CAA4C;IAClD,YAAY,CAAS;IACrB,aAAa,CAAS;IACtB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,YAAY,GAAG,IAAI,EAAE,WAAW,GAAG,KAAK;QACnD,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,EAAc;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACnF,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACzB,CAAC;IACF,CAAC;IAED,IAAI;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
@@ -0,0 +1,211 @@
1
+ export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
2
+ export type ConnectionState = "disconnected" | "connecting" | "authenticating" | "connected" | "reconnecting";
3
+ export interface InstanceInfo {
4
+ instanceId: string;
5
+ sessionId: string;
6
+ isStreaming: boolean;
7
+ model: unknown;
8
+ thinkingLevel: ThinkingLevel;
9
+ }
10
+ export interface SessionState {
11
+ model: unknown;
12
+ thinkingLevel: ThinkingLevel;
13
+ isStreaming: boolean;
14
+ sessionId: string;
15
+ sessionFile?: string;
16
+ messageCount: number;
17
+ }
18
+ export interface SessionStats {
19
+ sessionId: string;
20
+ messageCount: number;
21
+ isStreaming: boolean;
22
+ }
23
+ export interface CommandInfo {
24
+ name: string;
25
+ description?: string;
26
+ source: "extension" | "prompt" | "skill";
27
+ location?: "user" | "project" | "path";
28
+ path?: string;
29
+ }
30
+ export interface CompactionResult {
31
+ summary: string;
32
+ firstKeptEntryId: string;
33
+ tokensBefore: number;
34
+ details: Record<string, unknown>;
35
+ }
36
+ export interface PromptOptions {
37
+ streamingBehavior?: "steer" | "followUp";
38
+ images?: Array<{
39
+ type: "image";
40
+ data: string;
41
+ mimeType: string;
42
+ }>;
43
+ }
44
+ export interface AuthCommand {
45
+ type: "auth";
46
+ token: string;
47
+ }
48
+ export interface PromptCommand {
49
+ type: "prompt";
50
+ id?: string;
51
+ message: string;
52
+ streamingBehavior?: "steer" | "followUp";
53
+ images?: Array<{
54
+ type: "image";
55
+ data: string;
56
+ mimeType: string;
57
+ }>;
58
+ }
59
+ export interface SteerCommand {
60
+ type: "steer";
61
+ id?: string;
62
+ message: string;
63
+ }
64
+ export interface FollowUpCommand {
65
+ type: "follow_up";
66
+ id?: string;
67
+ message: string;
68
+ }
69
+ export interface AbortCommand {
70
+ type: "abort";
71
+ id?: string;
72
+ }
73
+ export interface GetStateCommand {
74
+ type: "get_state";
75
+ id?: string;
76
+ }
77
+ export interface GetMessagesCommand {
78
+ type: "get_messages";
79
+ id?: string;
80
+ }
81
+ export interface SetModelCommand {
82
+ type: "set_model";
83
+ id?: string;
84
+ provider: string;
85
+ modelId: string;
86
+ }
87
+ export interface SetThinkingLevelCommand {
88
+ type: "set_thinking_level";
89
+ id?: string;
90
+ level: ThinkingLevel;
91
+ }
92
+ export interface CompactCommand {
93
+ type: "compact";
94
+ id?: string;
95
+ customInstructions?: string;
96
+ }
97
+ export interface NewSessionCommand {
98
+ type: "new_session";
99
+ id?: string;
100
+ }
101
+ export type RpcCommand = AuthCommand | PromptCommand | SteerCommand | FollowUpCommand | AbortCommand | GetStateCommand | GetMessagesCommand | SetModelCommand | SetThinkingLevelCommand | CompactCommand | NewSessionCommand;
102
+ export interface RpcResponse {
103
+ type: "response";
104
+ command: string;
105
+ success: boolean;
106
+ data?: unknown;
107
+ error?: string;
108
+ id?: string;
109
+ }
110
+ export interface AuthOkResponse {
111
+ type: "auth_ok";
112
+ instanceId: string;
113
+ session: {
114
+ sessionId: string;
115
+ isStreaming: boolean;
116
+ model: unknown;
117
+ thinkingLevel: ThinkingLevel;
118
+ } | null;
119
+ }
120
+ export interface AuthErrorResponse {
121
+ type: "auth_error";
122
+ reason: string;
123
+ }
124
+ export interface AgentStartEvent {
125
+ type: "agent_start";
126
+ }
127
+ export interface AgentEndEvent {
128
+ type: "agent_end";
129
+ messages: unknown[];
130
+ }
131
+ export interface TurnStartEvent {
132
+ type: "turn_start";
133
+ }
134
+ export interface TurnEndEvent {
135
+ type: "turn_end";
136
+ message: unknown;
137
+ toolResults: unknown[];
138
+ }
139
+ export interface MessageStartEvent {
140
+ type: "message_start";
141
+ message: unknown;
142
+ }
143
+ export interface MessageUpdateEvent {
144
+ type: "message_update";
145
+ message: unknown;
146
+ assistantMessageEvent: {
147
+ type: string;
148
+ contentIndex?: number;
149
+ delta?: string;
150
+ content?: string;
151
+ partial?: unknown;
152
+ toolCall?: unknown;
153
+ };
154
+ }
155
+ export interface MessageEndEvent {
156
+ type: "message_end";
157
+ message: unknown;
158
+ }
159
+ export interface ToolExecutionStartEvent {
160
+ type: "tool_execution_start";
161
+ toolCallId: string;
162
+ toolName: string;
163
+ args: unknown;
164
+ }
165
+ export interface ToolExecutionUpdateEvent {
166
+ type: "tool_execution_update";
167
+ toolCallId: string;
168
+ toolName: string;
169
+ args: unknown;
170
+ partialResult: unknown;
171
+ }
172
+ export interface ToolExecutionEndEvent {
173
+ type: "tool_execution_end";
174
+ toolCallId: string;
175
+ toolName: string;
176
+ result: unknown;
177
+ isError: boolean;
178
+ }
179
+ export interface ExtensionUIRequest {
180
+ type: "extension_ui_request";
181
+ id: string;
182
+ method: string;
183
+ title?: string;
184
+ options?: string[];
185
+ message?: string;
186
+ placeholder?: string;
187
+ prefill?: string;
188
+ notifyType?: "info" | "warning" | "error";
189
+ statusKey?: string;
190
+ statusText?: string;
191
+ widgetKey?: string;
192
+ widgetLines?: string[];
193
+ text?: string;
194
+ timeout?: number;
195
+ }
196
+ export interface ExtensionUIResponse {
197
+ type: "extension_ui_response";
198
+ id: string;
199
+ value?: string;
200
+ confirmed?: boolean;
201
+ cancelled?: boolean;
202
+ }
203
+ export type ServerEvent = AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ExtensionUIRequest;
204
+ export interface PiWebClientOptions {
205
+ url: string;
206
+ token: string;
207
+ autoReconnect?: boolean;
208
+ reconnectInterval?: number;
209
+ webSocket?: unknown;
210
+ }
211
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ // Self-contained types — no imports from pi packages.
2
+ // Mirrors pi's RPC protocol for use in browsers, React Native, and Node.js.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,4EAA4E"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@ifi/pi-web-client",
3
+ "version": "0.3.0",
4
+ "description": "Platform-agnostic TypeScript client for pi-web remote sessions. Zero dependencies.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "license": "MIT",
19
+ "engines": {
20
+ "node": ">=20.0.0"
21
+ },
22
+ "scripts": {
23
+ "clean": "node -e \"import('node:fs').then(fs => fs.rmSync('dist',{ recursive: true, force: true }))\"",
24
+ "build": "pnpm clean && tsc --project tsconfig.json",
25
+ "build:fast": "pnpm clean && tsgo --project tsconfig.json",
26
+ "typecheck": "tsgo --project tsconfig.json --noEmit"
27
+ }
28
+ }