@polpo-ai/sdk 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 +21 -0
- package/dist/client/errors.d.ts +12 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +25 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/event-source.d.ts +29 -0
- package/dist/client/event-source.d.ts.map +1 -0
- package/dist/client/event-source.js +129 -0
- package/dist/client/event-source.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/polpo-client.d.ts +300 -0
- package/dist/client/polpo-client.d.ts.map +1 -0
- package/dist/client/polpo-client.js +602 -0
- package/dist/client/polpo-client.js.map +1 -0
- package/dist/client/types.d.ts +1160 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +7 -0
- package/dist/client/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/store/event-reducer.d.ts +8 -0
- package/dist/store/event-reducer.d.ts.map +1 -0
- package/dist/store/event-reducer.js +301 -0
- package/dist/store/event-reducer.js.map +1 -0
- package/dist/store/index.d.ts +6 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +4 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/polpo-store.d.ts +31 -0
- package/dist/store/polpo-store.d.ts.map +1 -0
- package/dist/store/polpo-store.js +136 -0
- package/dist/store/polpo-store.js.map +1 -0
- package/dist/store/selectors.d.ts +18 -0
- package/dist/store/selectors.d.ts.map +1 -0
- package/dist/store/selectors.js +91 -0
- package/dist/store/selectors.js.map +1 -0
- package/dist/store/types.d.ts +51 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
import { PolpoApiError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Async-iterable streaming response from chat completions.
|
|
4
|
+
* Exposes `sessionId` from the server's `x-session-id` response header,
|
|
5
|
+
* which lets callers learn which session was created/reused.
|
|
6
|
+
*/
|
|
7
|
+
export class ChatCompletionStream {
|
|
8
|
+
/** Session ID assigned by the server. Available after the first `next()` call. */
|
|
9
|
+
sessionId = null;
|
|
10
|
+
/** If the stream ended with finish_reason "ask_user", this contains the questions. */
|
|
11
|
+
askUser = null;
|
|
12
|
+
/** If the stream ended with finish_reason "mission_preview", this contains the proposed mission. */
|
|
13
|
+
missionPreview = null;
|
|
14
|
+
/** If the stream ended with finish_reason "vault_preview", this contains the proposed vault entry. */
|
|
15
|
+
vaultPreview = null;
|
|
16
|
+
/** If the stream ended with finish_reason "open_file", this contains the file path to open. */
|
|
17
|
+
openFile = null;
|
|
18
|
+
/** If the stream ended with finish_reason "navigate_to", this contains navigation target info. */
|
|
19
|
+
navigateTo = null;
|
|
20
|
+
/** If the stream ended with finish_reason "open_tab", this contains the URL to open. */
|
|
21
|
+
openTab = null;
|
|
22
|
+
/** Whether abort() has been called. */
|
|
23
|
+
aborted = false;
|
|
24
|
+
fetchFn;
|
|
25
|
+
baseUrl;
|
|
26
|
+
clientHeaders;
|
|
27
|
+
req;
|
|
28
|
+
reader = null;
|
|
29
|
+
decoder = new TextDecoder();
|
|
30
|
+
buffer = "";
|
|
31
|
+
started = false;
|
|
32
|
+
abortController = new AbortController();
|
|
33
|
+
constructor(fetchFn, baseUrl, clientHeaders, req) {
|
|
34
|
+
this.fetchFn = fetchFn;
|
|
35
|
+
this.baseUrl = baseUrl;
|
|
36
|
+
this.clientHeaders = clientHeaders;
|
|
37
|
+
this.req = req;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Abort the in-flight stream. Cancels the fetch request and closes the reader.
|
|
41
|
+
* The server will detect the disconnect and stop generating.
|
|
42
|
+
*/
|
|
43
|
+
abort() {
|
|
44
|
+
this.aborted = true;
|
|
45
|
+
this.abortController.abort();
|
|
46
|
+
this.reader?.cancel().catch(() => { });
|
|
47
|
+
}
|
|
48
|
+
async ensureStarted() {
|
|
49
|
+
if (this.started)
|
|
50
|
+
return;
|
|
51
|
+
this.started = true;
|
|
52
|
+
const url = `${this.baseUrl}/v1/chat/completions`;
|
|
53
|
+
const headers = {
|
|
54
|
+
"Content-Type": "application/json",
|
|
55
|
+
};
|
|
56
|
+
if (this.clientHeaders["x-api-key"]) {
|
|
57
|
+
headers["Authorization"] = `Bearer ${this.clientHeaders["x-api-key"]}`;
|
|
58
|
+
}
|
|
59
|
+
if (this.req.sessionId) {
|
|
60
|
+
headers["x-session-id"] = this.req.sessionId;
|
|
61
|
+
}
|
|
62
|
+
const { sessionId: _, ...body } = this.req;
|
|
63
|
+
const res = await this.fetchFn(url, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers,
|
|
66
|
+
body: JSON.stringify({ ...body, stream: true }),
|
|
67
|
+
signal: this.abortController.signal,
|
|
68
|
+
});
|
|
69
|
+
if (!res.ok) {
|
|
70
|
+
const err = await res.json().catch(() => ({ error: { message: res.statusText } }));
|
|
71
|
+
throw new PolpoApiError(err.error?.message ?? "Chat completions failed", res.status === 401 ? "AUTH_REQUIRED" : "INTERNAL_ERROR", res.status);
|
|
72
|
+
}
|
|
73
|
+
// Capture session ID from response header
|
|
74
|
+
this.sessionId = res.headers.get("x-session-id");
|
|
75
|
+
this.reader = res.body?.getReader() ?? null;
|
|
76
|
+
if (!this.reader)
|
|
77
|
+
throw new PolpoApiError("No response body", "INTERNAL_ERROR", 500);
|
|
78
|
+
}
|
|
79
|
+
async *[Symbol.asyncIterator]() {
|
|
80
|
+
await this.ensureStarted();
|
|
81
|
+
const reader = this.reader;
|
|
82
|
+
try {
|
|
83
|
+
while (true) {
|
|
84
|
+
const { done, value } = await reader.read();
|
|
85
|
+
if (done)
|
|
86
|
+
break;
|
|
87
|
+
this.buffer += this.decoder.decode(value, { stream: true });
|
|
88
|
+
const lines = this.buffer.split("\n");
|
|
89
|
+
this.buffer = lines.pop() ?? "";
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
const trimmed = line.trim();
|
|
92
|
+
if (!trimmed || !trimmed.startsWith("data: "))
|
|
93
|
+
continue;
|
|
94
|
+
const data = trimmed.slice(6);
|
|
95
|
+
if (data === "[DONE]")
|
|
96
|
+
return;
|
|
97
|
+
try {
|
|
98
|
+
const chunk = JSON.parse(data);
|
|
99
|
+
// Capture ask_user payload from the chunk
|
|
100
|
+
const choice = chunk.choices[0];
|
|
101
|
+
if (choice?.finish_reason === "ask_user" && choice.ask_user) {
|
|
102
|
+
this.askUser = choice.ask_user;
|
|
103
|
+
}
|
|
104
|
+
// Capture mission_preview payload from the chunk
|
|
105
|
+
if (choice?.finish_reason === "mission_preview" && choice.mission_preview) {
|
|
106
|
+
this.missionPreview = choice.mission_preview;
|
|
107
|
+
}
|
|
108
|
+
// Capture vault_preview payload from the chunk
|
|
109
|
+
if (choice?.finish_reason === "vault_preview" && choice.vault_preview) {
|
|
110
|
+
this.vaultPreview = choice.vault_preview;
|
|
111
|
+
}
|
|
112
|
+
// Capture open_file payload from the chunk
|
|
113
|
+
if (choice?.finish_reason === "open_file" && choice.open_file) {
|
|
114
|
+
this.openFile = choice.open_file;
|
|
115
|
+
}
|
|
116
|
+
// Capture navigate_to payload from the chunk
|
|
117
|
+
if (choice?.finish_reason === "navigate_to" && choice.navigate_to) {
|
|
118
|
+
this.navigateTo = choice.navigate_to;
|
|
119
|
+
}
|
|
120
|
+
// Capture open_tab payload from the chunk
|
|
121
|
+
if (choice?.finish_reason === "open_tab" && choice.open_tab) {
|
|
122
|
+
this.openTab = choice.open_tab;
|
|
123
|
+
}
|
|
124
|
+
yield chunk;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// skip malformed chunks
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
// Suppress AbortError — this is expected when the user stops the stream
|
|
134
|
+
if (err instanceof DOMException && err.name === "AbortError")
|
|
135
|
+
return;
|
|
136
|
+
if (this.aborted)
|
|
137
|
+
return;
|
|
138
|
+
throw err;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export class PolpoClient {
|
|
143
|
+
baseUrl;
|
|
144
|
+
headers;
|
|
145
|
+
fetchFn;
|
|
146
|
+
/** In-flight GET deduplication */
|
|
147
|
+
inflight = new Map();
|
|
148
|
+
constructor(config) {
|
|
149
|
+
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
150
|
+
this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
151
|
+
this.headers = {};
|
|
152
|
+
if (config.apiKey) {
|
|
153
|
+
this.headers["x-api-key"] = config.apiKey;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// ── Helpers ──────────────────────────────────────────────
|
|
157
|
+
apiUrl(path) {
|
|
158
|
+
return `${this.baseUrl}/api/v1${path}`;
|
|
159
|
+
}
|
|
160
|
+
async request(method, url, body) {
|
|
161
|
+
const res = await this.fetchFn(url, {
|
|
162
|
+
method,
|
|
163
|
+
headers: { ...this.headers, "Content-Type": "application/json" },
|
|
164
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
165
|
+
});
|
|
166
|
+
const json = (await res.json());
|
|
167
|
+
if (!json.ok) {
|
|
168
|
+
throw new PolpoApiError(json.error, json.code, res.status, json.details);
|
|
169
|
+
}
|
|
170
|
+
return json.data;
|
|
171
|
+
}
|
|
172
|
+
get(path) {
|
|
173
|
+
const url = this.apiUrl(path);
|
|
174
|
+
const existing = this.inflight.get(url);
|
|
175
|
+
if (existing)
|
|
176
|
+
return existing;
|
|
177
|
+
const promise = this.request("GET", url);
|
|
178
|
+
this.inflight.set(url, promise);
|
|
179
|
+
promise.finally(() => this.inflight.delete(url));
|
|
180
|
+
return promise;
|
|
181
|
+
}
|
|
182
|
+
post(path, body) {
|
|
183
|
+
return this.request("POST", this.apiUrl(path), body);
|
|
184
|
+
}
|
|
185
|
+
put(path, body) {
|
|
186
|
+
return this.request("PUT", this.apiUrl(path), body);
|
|
187
|
+
}
|
|
188
|
+
patch(path, body) {
|
|
189
|
+
return this.request("PATCH", this.apiUrl(path), body);
|
|
190
|
+
}
|
|
191
|
+
del(path) {
|
|
192
|
+
return this.request("DELETE", this.apiUrl(path));
|
|
193
|
+
}
|
|
194
|
+
// ── Tasks ────────────────────────────────────────────────
|
|
195
|
+
getTasks(filters) {
|
|
196
|
+
const params = new URLSearchParams();
|
|
197
|
+
if (filters?.status)
|
|
198
|
+
params.set("status", filters.status);
|
|
199
|
+
if (filters?.group)
|
|
200
|
+
params.set("group", filters.group);
|
|
201
|
+
if (filters?.assignTo)
|
|
202
|
+
params.set("assignTo", filters.assignTo);
|
|
203
|
+
const qs = params.toString();
|
|
204
|
+
return this.get(`/tasks${qs ? `?${qs}` : ""}`);
|
|
205
|
+
}
|
|
206
|
+
getTask(taskId) {
|
|
207
|
+
return this.get(`/tasks/${taskId}`);
|
|
208
|
+
}
|
|
209
|
+
createTask(req) {
|
|
210
|
+
return this.post("/tasks", req);
|
|
211
|
+
}
|
|
212
|
+
updateTask(taskId, req) {
|
|
213
|
+
return this.patch(`/tasks/${taskId}`, req);
|
|
214
|
+
}
|
|
215
|
+
deleteTask(taskId) {
|
|
216
|
+
return this.del(`/tasks/${taskId}`);
|
|
217
|
+
}
|
|
218
|
+
retryTask(taskId) {
|
|
219
|
+
return this.post(`/tasks/${taskId}/retry`);
|
|
220
|
+
}
|
|
221
|
+
killTask(taskId) {
|
|
222
|
+
return this.post(`/tasks/${taskId}/kill`);
|
|
223
|
+
}
|
|
224
|
+
reassessTask(taskId) {
|
|
225
|
+
return this.post(`/tasks/${taskId}/reassess`);
|
|
226
|
+
}
|
|
227
|
+
queueTask(taskId) {
|
|
228
|
+
return this.post(`/tasks/${taskId}/queue`);
|
|
229
|
+
}
|
|
230
|
+
// ── Missions ─────────────────────────────────────────────
|
|
231
|
+
getMissions() {
|
|
232
|
+
return this.get("/missions");
|
|
233
|
+
}
|
|
234
|
+
getResumableMissions() {
|
|
235
|
+
return this.get("/missions/resumable");
|
|
236
|
+
}
|
|
237
|
+
getMission(missionId) {
|
|
238
|
+
return this.get(`/missions/${missionId}`);
|
|
239
|
+
}
|
|
240
|
+
createMission(req) {
|
|
241
|
+
return this.post("/missions", req);
|
|
242
|
+
}
|
|
243
|
+
updateMission(missionId, req) {
|
|
244
|
+
return this.patch(`/missions/${missionId}`, req);
|
|
245
|
+
}
|
|
246
|
+
deleteMission(missionId) {
|
|
247
|
+
return this.del(`/missions/${missionId}`);
|
|
248
|
+
}
|
|
249
|
+
executeMission(missionId) {
|
|
250
|
+
return this.post(`/missions/${missionId}/execute`);
|
|
251
|
+
}
|
|
252
|
+
resumeMission(missionId, opts) {
|
|
253
|
+
return this.post(`/missions/${missionId}/resume`, opts);
|
|
254
|
+
}
|
|
255
|
+
abortMission(missionId) {
|
|
256
|
+
return this.post(`/missions/${missionId}/abort`);
|
|
257
|
+
}
|
|
258
|
+
// ── Atomic Mission Data ───────────────────────────────────
|
|
259
|
+
addMissionTask(missionId, req) {
|
|
260
|
+
return this.post(`/missions/${missionId}/tasks`, req);
|
|
261
|
+
}
|
|
262
|
+
updateMissionTask(missionId, taskTitle, req) {
|
|
263
|
+
return this.patch(`/missions/${missionId}/tasks/${encodeURIComponent(taskTitle)}`, req);
|
|
264
|
+
}
|
|
265
|
+
removeMissionTask(missionId, taskTitle) {
|
|
266
|
+
return this.del(`/missions/${missionId}/tasks/${encodeURIComponent(taskTitle)}`);
|
|
267
|
+
}
|
|
268
|
+
reorderMissionTasks(missionId, req) {
|
|
269
|
+
return this.put(`/missions/${missionId}/tasks/reorder`, req);
|
|
270
|
+
}
|
|
271
|
+
addMissionCheckpoint(missionId, req) {
|
|
272
|
+
return this.post(`/missions/${missionId}/checkpoints`, req);
|
|
273
|
+
}
|
|
274
|
+
updateMissionCheckpoint(missionId, checkpointName, req) {
|
|
275
|
+
return this.patch(`/missions/${missionId}/checkpoints/${encodeURIComponent(checkpointName)}`, req);
|
|
276
|
+
}
|
|
277
|
+
removeMissionCheckpoint(missionId, checkpointName) {
|
|
278
|
+
return this.del(`/missions/${missionId}/checkpoints/${encodeURIComponent(checkpointName)}`);
|
|
279
|
+
}
|
|
280
|
+
// ── Delays ──
|
|
281
|
+
listDelays() {
|
|
282
|
+
return this.get("/missions/delays");
|
|
283
|
+
}
|
|
284
|
+
addMissionDelay(missionId, req) {
|
|
285
|
+
return this.post(`/missions/${missionId}/delays`, req);
|
|
286
|
+
}
|
|
287
|
+
updateMissionDelay(missionId, delayName, req) {
|
|
288
|
+
return this.patch(`/missions/${missionId}/delays/${encodeURIComponent(delayName)}`, req);
|
|
289
|
+
}
|
|
290
|
+
removeMissionDelay(missionId, delayName) {
|
|
291
|
+
return this.del(`/missions/${missionId}/delays/${encodeURIComponent(delayName)}`);
|
|
292
|
+
}
|
|
293
|
+
addMissionQualityGate(missionId, req) {
|
|
294
|
+
return this.post(`/missions/${missionId}/quality-gates`, req);
|
|
295
|
+
}
|
|
296
|
+
updateMissionQualityGate(missionId, gateName, req) {
|
|
297
|
+
return this.patch(`/missions/${missionId}/quality-gates/${encodeURIComponent(gateName)}`, req);
|
|
298
|
+
}
|
|
299
|
+
removeMissionQualityGate(missionId, gateName) {
|
|
300
|
+
return this.del(`/missions/${missionId}/quality-gates/${encodeURIComponent(gateName)}`);
|
|
301
|
+
}
|
|
302
|
+
addMissionTeamMember(missionId, req) {
|
|
303
|
+
return this.post(`/missions/${missionId}/team`, req);
|
|
304
|
+
}
|
|
305
|
+
updateMissionTeamMember(missionId, memberName, req) {
|
|
306
|
+
return this.patch(`/missions/${missionId}/team/${encodeURIComponent(memberName)}`, req);
|
|
307
|
+
}
|
|
308
|
+
removeMissionTeamMember(missionId, memberName) {
|
|
309
|
+
return this.del(`/missions/${missionId}/team/${encodeURIComponent(memberName)}`);
|
|
310
|
+
}
|
|
311
|
+
updateMissionNotifications(missionId, req) {
|
|
312
|
+
return this.put(`/missions/${missionId}/notifications`, req);
|
|
313
|
+
}
|
|
314
|
+
// ── Vault ─────────────────────────────────────────────────
|
|
315
|
+
/**
|
|
316
|
+
* Save a vault entry directly to the encrypted store.
|
|
317
|
+
* Bypasses the LLM entirely — credentials go straight to AES-256-GCM encrypted storage.
|
|
318
|
+
* Returns metadata only (never credential values).
|
|
319
|
+
*/
|
|
320
|
+
saveVaultEntry(req) {
|
|
321
|
+
return this.post("/vault/entries", req);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Partially update credential fields in an existing vault entry.
|
|
325
|
+
* Only the provided fields are merged — existing fields are preserved.
|
|
326
|
+
*/
|
|
327
|
+
patchVaultEntry(agent, service, patch) {
|
|
328
|
+
return this.patch(`/vault/entries/${encodeURIComponent(agent)}/${encodeURIComponent(service)}`, patch);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Remove a vault entry from the encrypted store.
|
|
332
|
+
*/
|
|
333
|
+
removeVaultEntry(agent, service) {
|
|
334
|
+
return this.del(`/vault/entries/${encodeURIComponent(agent)}/${encodeURIComponent(service)}`);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* List vault entries for an agent (metadata only — no secret values).
|
|
338
|
+
* Returns service names, types, labels, and credential field names.
|
|
339
|
+
*/
|
|
340
|
+
listVaultEntries(agent) {
|
|
341
|
+
return this.get(`/vault/entries/${encodeURIComponent(agent)}`);
|
|
342
|
+
}
|
|
343
|
+
// ── Auth ───────────────────────────────────────────────────
|
|
344
|
+
/**
|
|
345
|
+
* Get per-provider auth status: config keys, env vars, OAuth profiles (metadata only).
|
|
346
|
+
* Tokens are NEVER exposed.
|
|
347
|
+
*/
|
|
348
|
+
getAuthStatus() {
|
|
349
|
+
return this.get("/auth/status");
|
|
350
|
+
}
|
|
351
|
+
// ── Schedules ─────────────────────────────────────────────
|
|
352
|
+
getSchedules() {
|
|
353
|
+
return this.get("/schedules");
|
|
354
|
+
}
|
|
355
|
+
// ── Agents ───────────────────────────────────────────────
|
|
356
|
+
getAgents() {
|
|
357
|
+
return this.get("/agents");
|
|
358
|
+
}
|
|
359
|
+
getAgent(name) {
|
|
360
|
+
return this.get(`/agents/${encodeURIComponent(name)}`);
|
|
361
|
+
}
|
|
362
|
+
addAgent(req, teamName) {
|
|
363
|
+
const qs = teamName ? `?team=${encodeURIComponent(teamName)}` : "";
|
|
364
|
+
return this.post(`/agents${qs}`, req);
|
|
365
|
+
}
|
|
366
|
+
removeAgent(name) {
|
|
367
|
+
return this.del(`/agents/${encodeURIComponent(name)}`);
|
|
368
|
+
}
|
|
369
|
+
updateAgent(name, req) {
|
|
370
|
+
return this.patch(`/agents/${encodeURIComponent(name)}`, req);
|
|
371
|
+
}
|
|
372
|
+
getTeams() {
|
|
373
|
+
return this.get("/agents/teams");
|
|
374
|
+
}
|
|
375
|
+
getTeam(name) {
|
|
376
|
+
const qs = name ? `?name=${encodeURIComponent(name)}` : "";
|
|
377
|
+
return this.get(`/agents/team${qs}`);
|
|
378
|
+
}
|
|
379
|
+
addTeam(req) {
|
|
380
|
+
return this.post("/agents/teams", req);
|
|
381
|
+
}
|
|
382
|
+
removeTeam(name) {
|
|
383
|
+
return this.del(`/agents/teams/${encodeURIComponent(name)}`);
|
|
384
|
+
}
|
|
385
|
+
renameTeam(oldName, newName) {
|
|
386
|
+
return this.patch("/agents/team", { oldName, name: newName });
|
|
387
|
+
}
|
|
388
|
+
getProcesses() {
|
|
389
|
+
return this.get("/agents/processes");
|
|
390
|
+
}
|
|
391
|
+
// ── State ────────────────────────────────────────────────
|
|
392
|
+
getState() {
|
|
393
|
+
return this.get("/state");
|
|
394
|
+
}
|
|
395
|
+
getConfig() {
|
|
396
|
+
return this.get("/orchestrator-config");
|
|
397
|
+
}
|
|
398
|
+
updateSettings(req) {
|
|
399
|
+
return this.patch("/config/settings", req);
|
|
400
|
+
}
|
|
401
|
+
// ── Notification Channels ────────────────────────────────
|
|
402
|
+
listChannels() {
|
|
403
|
+
return this.get("/config/channels");
|
|
404
|
+
}
|
|
405
|
+
upsertChannel(name, config) {
|
|
406
|
+
return this.request("PUT", this.apiUrl(`/config/channels/${encodeURIComponent(name)}`), config);
|
|
407
|
+
}
|
|
408
|
+
deleteChannel(name) {
|
|
409
|
+
return this.del(`/config/channels/${encodeURIComponent(name)}`);
|
|
410
|
+
}
|
|
411
|
+
testChannel(name) {
|
|
412
|
+
return this.post(`/config/channels/${encodeURIComponent(name)}/test`);
|
|
413
|
+
}
|
|
414
|
+
getMemory() {
|
|
415
|
+
return this.get("/memory");
|
|
416
|
+
}
|
|
417
|
+
saveMemory(content) {
|
|
418
|
+
return this.request("PUT", this.apiUrl("/memory"), { content });
|
|
419
|
+
}
|
|
420
|
+
getAgentMemory(agentName) {
|
|
421
|
+
return this.get(`/memory/agent/${encodeURIComponent(agentName)}`);
|
|
422
|
+
}
|
|
423
|
+
saveAgentMemory(agentName, content) {
|
|
424
|
+
return this.request("PUT", this.apiUrl(`/memory/agent/${encodeURIComponent(agentName)}`), { content });
|
|
425
|
+
}
|
|
426
|
+
getLogs() {
|
|
427
|
+
return this.get("/logs");
|
|
428
|
+
}
|
|
429
|
+
getLogEntries(sessionId) {
|
|
430
|
+
return this.get(`/logs/${sessionId}`);
|
|
431
|
+
}
|
|
432
|
+
// ── Skills ───────────────────────────────────────────────
|
|
433
|
+
/** Discover available skills in the agent skill pool with assignment info. */
|
|
434
|
+
getSkills() {
|
|
435
|
+
return this.get("/skills");
|
|
436
|
+
}
|
|
437
|
+
/** Assign a skill to an agent. */
|
|
438
|
+
assignSkill(skillName, agent) {
|
|
439
|
+
return this.post(`/skills/${encodeURIComponent(skillName)}/assign`, { agent });
|
|
440
|
+
}
|
|
441
|
+
/** Unassign a skill from an agent. */
|
|
442
|
+
unassignSkill(skillName, agent) {
|
|
443
|
+
return this.post(`/skills/${encodeURIComponent(skillName)}/unassign`, { agent });
|
|
444
|
+
}
|
|
445
|
+
/** Discover orchestrator skills (.polpo/.agent/skills/). */
|
|
446
|
+
getOrchestratorSkills() {
|
|
447
|
+
return this.get("/skills/orchestrator");
|
|
448
|
+
}
|
|
449
|
+
/** Get the full content of an agent skill by name. */
|
|
450
|
+
getSkillContent(name) {
|
|
451
|
+
return this.get(`/skills/${encodeURIComponent(name)}/content`);
|
|
452
|
+
}
|
|
453
|
+
/** Get the full content of an orchestrator skill by name. */
|
|
454
|
+
getOrchestratorSkillContent(name) {
|
|
455
|
+
return this.get(`/skills/orchestrator/${encodeURIComponent(name)}/content`);
|
|
456
|
+
}
|
|
457
|
+
/** Get the full skills index (tags and categories for all skills). */
|
|
458
|
+
getSkillsIndex() {
|
|
459
|
+
return this.get("/skills/index");
|
|
460
|
+
}
|
|
461
|
+
/** Update a skill's tags and/or category in the skills index. */
|
|
462
|
+
updateSkillIndex(name, entry) {
|
|
463
|
+
return this.put(`/skills/${encodeURIComponent(name)}/index`, entry);
|
|
464
|
+
}
|
|
465
|
+
// ── Run Activity ────────────────────────────────────────────
|
|
466
|
+
/** Get the full activity history for a task from its run JSONL log. */
|
|
467
|
+
getTaskActivity(taskId) {
|
|
468
|
+
return this.get(`/agents/processes/${taskId}/activity`);
|
|
469
|
+
}
|
|
470
|
+
// ── Chat Completions (OpenAI-compatible) ─────────────────
|
|
471
|
+
/**
|
|
472
|
+
* Talk to Polpo via the OpenAI-compatible chat completions endpoint.
|
|
473
|
+
* Non-streaming mode — returns the full response.
|
|
474
|
+
*/
|
|
475
|
+
async chatCompletions(req) {
|
|
476
|
+
const url = `${this.baseUrl}/v1/chat/completions`;
|
|
477
|
+
const headers = {
|
|
478
|
+
"Content-Type": "application/json",
|
|
479
|
+
};
|
|
480
|
+
if (this.headers["x-api-key"]) {
|
|
481
|
+
headers["Authorization"] = `Bearer ${this.headers["x-api-key"]}`;
|
|
482
|
+
}
|
|
483
|
+
if (req.sessionId) {
|
|
484
|
+
headers["x-session-id"] = req.sessionId;
|
|
485
|
+
}
|
|
486
|
+
const { sessionId: _, ...body } = req;
|
|
487
|
+
const res = await this.fetchFn(url, {
|
|
488
|
+
method: "POST",
|
|
489
|
+
headers,
|
|
490
|
+
body: JSON.stringify({ ...body, stream: false }),
|
|
491
|
+
});
|
|
492
|
+
if (!res.ok) {
|
|
493
|
+
const err = await res.json().catch(() => ({ error: { message: res.statusText } }));
|
|
494
|
+
throw new PolpoApiError(err.error?.message ?? "Chat completions failed", res.status === 401 ? "AUTH_REQUIRED" : "INTERNAL_ERROR", res.status);
|
|
495
|
+
}
|
|
496
|
+
return (await res.json());
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Talk to Polpo via the OpenAI-compatible chat completions endpoint.
|
|
500
|
+
* Streaming mode — returns a ChatCompletionStream (async-iterable + metadata).
|
|
501
|
+
*/
|
|
502
|
+
chatCompletionsStream(req) {
|
|
503
|
+
return new ChatCompletionStream(this.fetchFn, this.baseUrl, this.headers, req);
|
|
504
|
+
}
|
|
505
|
+
// ── Sessions ────────────────────────────────────────────
|
|
506
|
+
getSessions() {
|
|
507
|
+
return this.get("/chat/sessions");
|
|
508
|
+
}
|
|
509
|
+
getSessionMessages(sessionId) {
|
|
510
|
+
return this.get(`/chat/sessions/${sessionId}/messages`);
|
|
511
|
+
}
|
|
512
|
+
renameSession(sessionId, title) {
|
|
513
|
+
return this.patch(`/chat/sessions/${sessionId}`, { title });
|
|
514
|
+
}
|
|
515
|
+
deleteSession(sessionId) {
|
|
516
|
+
return this.del(`/chat/sessions/${sessionId}`);
|
|
517
|
+
}
|
|
518
|
+
// ── Notifications ────────────────────────────────────────
|
|
519
|
+
/** List notification history. */
|
|
520
|
+
getNotifications(opts) {
|
|
521
|
+
const params = new URLSearchParams();
|
|
522
|
+
if (opts?.limit)
|
|
523
|
+
params.set("limit", String(opts.limit));
|
|
524
|
+
if (opts?.status)
|
|
525
|
+
params.set("status", opts.status);
|
|
526
|
+
if (opts?.channel)
|
|
527
|
+
params.set("channel", opts.channel);
|
|
528
|
+
if (opts?.rule)
|
|
529
|
+
params.set("rule", opts.rule);
|
|
530
|
+
const qs = params.toString();
|
|
531
|
+
return this.get(`/notifications${qs ? `?${qs}` : ""}`);
|
|
532
|
+
}
|
|
533
|
+
/** Get notification stats (total, sent, failed). */
|
|
534
|
+
getNotificationStats() {
|
|
535
|
+
return this.get("/notifications/stats");
|
|
536
|
+
}
|
|
537
|
+
/** Send a notification directly to a channel (with optional delay). */
|
|
538
|
+
sendNotification(req) {
|
|
539
|
+
return this.post("/notifications/send", req);
|
|
540
|
+
}
|
|
541
|
+
// ── Approvals ───────────────────────────────────────────
|
|
542
|
+
/** List approval requests. */
|
|
543
|
+
getApprovals(status) {
|
|
544
|
+
const qs = status ? `?status=${status}` : "";
|
|
545
|
+
return this.get(`/approvals${qs}`);
|
|
546
|
+
}
|
|
547
|
+
/** Get pending approval requests. */
|
|
548
|
+
getPendingApprovals() {
|
|
549
|
+
return this.get("/approvals/pending");
|
|
550
|
+
}
|
|
551
|
+
/** Approve a request. */
|
|
552
|
+
approveRequest(requestId, opts) {
|
|
553
|
+
return this.post(`/approvals/${requestId}/approve`, opts);
|
|
554
|
+
}
|
|
555
|
+
/** Reject a request with feedback. */
|
|
556
|
+
rejectRequest(requestId, feedback, resolvedBy) {
|
|
557
|
+
return this.post(`/approvals/${requestId}/reject`, { feedback, resolvedBy });
|
|
558
|
+
}
|
|
559
|
+
// ── Playbooks ────────────────────────────────────────────
|
|
560
|
+
/** List available playbooks discovered from disk. */
|
|
561
|
+
getPlaybooks() {
|
|
562
|
+
return this.get("/playbooks");
|
|
563
|
+
}
|
|
564
|
+
/** Get full playbook definition including the mission body. */
|
|
565
|
+
getPlaybook(name) {
|
|
566
|
+
return this.get(`/playbooks/${encodeURIComponent(name)}`);
|
|
567
|
+
}
|
|
568
|
+
/** Run a playbook with parameters. Returns the created mission + task count. */
|
|
569
|
+
runPlaybook(name, params) {
|
|
570
|
+
return this.post(`/playbooks/${encodeURIComponent(name)}/run`, { params });
|
|
571
|
+
}
|
|
572
|
+
// Backward-compat aliases
|
|
573
|
+
/** @deprecated Use getPlaybooks instead. */
|
|
574
|
+
getTemplates() { return this.getPlaybooks(); }
|
|
575
|
+
/** @deprecated Use getPlaybook instead. */
|
|
576
|
+
getTemplate(name) { return this.getPlaybook(name); }
|
|
577
|
+
/** @deprecated Use runPlaybook instead. */
|
|
578
|
+
runTemplate(name, params) { return this.runPlaybook(name, params); }
|
|
579
|
+
/** Health check (instance method — uses configured base URL). */
|
|
580
|
+
getHealth() {
|
|
581
|
+
return this.get("/health");
|
|
582
|
+
}
|
|
583
|
+
// ── Static ───────────────────────────────────────────────
|
|
584
|
+
static async health(baseUrl) {
|
|
585
|
+
const res = await fetch(`${baseUrl.replace(/\/$/, "")}/api/v1/health`);
|
|
586
|
+
const json = (await res.json());
|
|
587
|
+
if (!json.ok)
|
|
588
|
+
throw new PolpoApiError(json.error, json.code, res.status);
|
|
589
|
+
return json.data;
|
|
590
|
+
}
|
|
591
|
+
/** Build SSE URL for EventSource (with optional apiKey as query param) */
|
|
592
|
+
getEventsUrl(filter) {
|
|
593
|
+
const params = new URLSearchParams();
|
|
594
|
+
if (filter?.length)
|
|
595
|
+
params.set("filter", filter.join(","));
|
|
596
|
+
if (this.headers["x-api-key"])
|
|
597
|
+
params.set("apiKey", this.headers["x-api-key"]);
|
|
598
|
+
const qs = params.toString();
|
|
599
|
+
return `${this.apiUrl("/events")}${qs ? `?${qs}` : ""}`;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
//# sourceMappingURL=polpo-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polpo-client.js","sourceRoot":"","sources":["../../src/client/polpo-client.ts"],"names":[],"mappings":"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"}
|