@polpo-ai/server 0.11.1 → 0.12.1

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 (51) hide show
  1. package/dist/deps.d.ts +4 -4
  2. package/dist/deps.d.ts.map +1 -1
  3. package/dist/routes/completions/agent-step-runner.d.ts +49 -0
  4. package/dist/routes/completions/agent-step-runner.d.ts.map +1 -0
  5. package/dist/routes/completions/agent-step-runner.js +166 -0
  6. package/dist/routes/completions/agent-step-runner.js.map +1 -0
  7. package/dist/routes/completions/chat-handler.d.ts +51 -0
  8. package/dist/routes/completions/chat-handler.d.ts.map +1 -0
  9. package/dist/routes/completions/chat-handler.js +710 -0
  10. package/dist/routes/completions/chat-handler.js.map +1 -0
  11. package/dist/routes/completions/message-mapping.d.ts +21 -0
  12. package/dist/routes/completions/message-mapping.d.ts.map +1 -0
  13. package/dist/routes/completions/message-mapping.js +156 -0
  14. package/dist/routes/completions/message-mapping.js.map +1 -0
  15. package/dist/routes/completions/project-loop-runner.d.ts +65 -0
  16. package/dist/routes/completions/project-loop-runner.d.ts.map +1 -0
  17. package/dist/routes/completions/project-loop-runner.js +482 -0
  18. package/dist/routes/completions/project-loop-runner.js.map +1 -0
  19. package/dist/routes/completions/schemas.d.ts +242 -0
  20. package/dist/routes/completions/schemas.d.ts.map +1 -0
  21. package/dist/routes/completions/schemas.js +148 -0
  22. package/dist/routes/completions/schemas.js.map +1 -0
  23. package/dist/routes/completions/sse.d.ts +57 -0
  24. package/dist/routes/completions/sse.d.ts.map +1 -0
  25. package/dist/routes/completions/sse.js +96 -0
  26. package/dist/routes/completions/sse.js.map +1 -0
  27. package/dist/routes/completions/tool-mapping.d.ts +44 -0
  28. package/dist/routes/completions/tool-mapping.d.ts.map +1 -0
  29. package/dist/routes/completions/tool-mapping.js +154 -0
  30. package/dist/routes/completions/tool-mapping.js.map +1 -0
  31. package/dist/routes/completions.d.ts +13 -20
  32. package/dist/routes/completions.d.ts.map +1 -1
  33. package/dist/routes/completions.js +49 -1882
  34. package/dist/routes/completions.js.map +1 -1
  35. package/dist/routes/missions.d.ts +2 -2
  36. package/dist/routes/missions.d.ts.map +1 -1
  37. package/dist/routes/missions.js +2 -2
  38. package/dist/routes/missions.js.map +1 -1
  39. package/dist/routes/playbooks.d.ts +1 -1
  40. package/dist/routes/playbooks.d.ts.map +1 -1
  41. package/dist/routes/playbooks.js +1 -1
  42. package/dist/routes/playbooks.js.map +1 -1
  43. package/dist/routes/tasks.d.ts +1 -1
  44. package/dist/routes/tasks.d.ts.map +1 -1
  45. package/dist/routes/tasks.js +3 -3
  46. package/dist/routes/tasks.js.map +1 -1
  47. package/dist/schemas.d.ts +0 -13
  48. package/dist/schemas.d.ts.map +1 -1
  49. package/dist/schemas.js +1 -11
  50. package/dist/schemas.js.map +1 -1
  51. package/package.json +3 -3
@@ -0,0 +1,482 @@
1
+ /**
2
+ * Project loop runtime for the chat completions endpoint.
3
+ *
4
+ * Runs an assigned/default project loop as a deterministic pipeline
5
+ * (PipelineExecutor) with agent steps delegated to the agent-step runner.
6
+ * Also owns loop-run persistence (traces, approvals, resume checkpoints)
7
+ * and the HTTP wiring for loop-mode requests (streaming + non-streaming).
8
+ */
9
+ import { streamSSE } from "hono/streaming";
10
+ import { nanoid } from "nanoid";
11
+ import { PipelineExecutor, LoopApprovalRequiredError, LoopPermissionApprovalRequiredError, buildLoopStepAgent, maybeParseJson, normalizeProjectLoop, normalizeToolInput, stringifyLoopContext, } from "@polpo-ai/core";
12
+ import { addUsage, runAgentStepCompletion } from "./agent-step-runner.js";
13
+ import { completionResponse, loopRuntimeErrorEnvelope, modelNotFoundEnvelope, sseChunk } from "./sse.js";
14
+ import { emitFileChanged, redactVaultToolCalls } from "./tool-mapping.js";
15
+ export async function runProjectLoopCompletion(options) {
16
+ const { deps, agentConfig, projectLoop, aiMessages, extraSystemParts, sessionId, user, onToolCall, onTrace, resumeRun } = options;
17
+ const normalized = normalizeProjectLoop(projectLoop);
18
+ if (!normalized.pipeline)
19
+ throw new Error(`Loop "${projectLoop.name}" does not define a pipeline`);
20
+ const rootTools = await deps.resolveAgentTools(agentConfig);
21
+ const loopRunStore = deps.getLoopRunStore?.();
22
+ const resumeState = resumeRun?.resume;
23
+ const loopRunId = resumeRun?.id ?? (loopRunStore ? `looprun-${nanoid(16)}` : undefined);
24
+ if (loopRunStore && loopRunId && resumeRun) {
25
+ await loopRunStore.updateRun(loopRunId, {
26
+ status: "resuming",
27
+ error: undefined,
28
+ completedAt: undefined,
29
+ metadata: {
30
+ ...resumeRun.metadata,
31
+ resumedAt: new Date().toISOString(),
32
+ resumeAttempts: (resumeState?.attempts ?? 0) + 1,
33
+ },
34
+ resume: resumeState ? {
35
+ ...resumeState,
36
+ attempts: (resumeState.attempts ?? 0) + 1,
37
+ updatedAt: new Date().toISOString(),
38
+ } : undefined,
39
+ });
40
+ }
41
+ else if (loopRunStore && loopRunId) {
42
+ await loopRunStore.createRun({
43
+ id: loopRunId,
44
+ loop: projectLoop,
45
+ agentName: agentConfig.name,
46
+ sessionId: sessionId ?? undefined,
47
+ user,
48
+ metadata: {
49
+ runtime: "chat.completions",
50
+ loopVersion: projectLoop.version ?? "1",
51
+ },
52
+ });
53
+ }
54
+ const executor = new PipelineExecutor();
55
+ let finalText = "";
56
+ let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
57
+ let lastModel = agentConfig.model ?? "polpo";
58
+ let lastProviderMetadata;
59
+ const toolCallsAccum = [];
60
+ const events = [];
61
+ const emitTrace = async (event) => {
62
+ events.push(event);
63
+ if (loopRunStore && loopRunId) {
64
+ try {
65
+ await loopRunStore.appendTrace(loopRunId, event);
66
+ }
67
+ catch (err) {
68
+ deps.emit("loop_run:trace_persist_failed", {
69
+ loopRunId,
70
+ loop: projectLoop.name,
71
+ eventType: event.type,
72
+ error: err.message,
73
+ });
74
+ }
75
+ }
76
+ try {
77
+ await onTrace?.(event);
78
+ }
79
+ catch (err) {
80
+ deps.emit("loop_run:trace_delivery_failed", {
81
+ loopRunId,
82
+ loop: projectLoop.name,
83
+ eventType: event.type,
84
+ error: err.message,
85
+ });
86
+ }
87
+ };
88
+ try {
89
+ const result = await executor.execute({
90
+ name: projectLoop.name,
91
+ pipeline: resumeState ? { ...normalized.pipeline, steps: resumeState.steps } : normalized.pipeline,
92
+ loops: normalized.loops,
93
+ context: resumeState?.context ?? {},
94
+ projectHooks: projectLoop.hooks,
95
+ projectPermissions: projectLoop.permissions,
96
+ projectPolicies: projectLoop.policies,
97
+ resume: resumeState ? {
98
+ previousNode: resumeState.previousNode,
99
+ approvedGates: resumeState.approvedGates,
100
+ } : undefined,
101
+ onTrace: async (event) => {
102
+ await emitTrace(event);
103
+ },
104
+ runTool: async (name, input) => {
105
+ const args = normalizeToolInput(input);
106
+ const id = `loop-tool-${nanoid(12)}`;
107
+ await onToolCall?.({
108
+ id,
109
+ name,
110
+ arguments: args,
111
+ state: "calling",
112
+ });
113
+ const output = await rootTools.executor(name, args);
114
+ const isError = output.startsWith("Error:");
115
+ emitFileChanged(name, args, output, deps.emit);
116
+ const event = {
117
+ id,
118
+ name,
119
+ arguments: args,
120
+ result: output,
121
+ state: isError ? "error" : "completed",
122
+ };
123
+ toolCallsAccum.push(event);
124
+ await onToolCall?.(event);
125
+ if (isError)
126
+ throw new Error(output);
127
+ return { output: maybeParseJson(output) };
128
+ },
129
+ runLoop: async (name, loop, context) => {
130
+ const id = `loop-step-${nanoid(12)}`;
131
+ await onToolCall?.({
132
+ id,
133
+ name: `loop:${name}`,
134
+ arguments: { loop: projectLoop.name, step: name },
135
+ state: "calling",
136
+ });
137
+ const stepAgent = buildLoopStepAgent(agentConfig, name, loop);
138
+ const stepResult = await runAgentStepCompletion({
139
+ deps,
140
+ agentConfig: stepAgent,
141
+ aiMessages,
142
+ extraSystemParts,
143
+ context,
144
+ stepName: name,
145
+ onToolCall,
146
+ });
147
+ finalText = stepResult.text || finalText;
148
+ totalUsage = addUsage(totalUsage, stepResult.usage);
149
+ lastModel = stepResult.model;
150
+ lastProviderMetadata = stepResult.providerMetadata;
151
+ toolCallsAccum.push(...stepResult.toolCalls);
152
+ const output = stringifyLoopContext({ [name]: stepResult.output });
153
+ const event = {
154
+ id,
155
+ name: `loop:${name}`,
156
+ arguments: { loop: projectLoop.name, step: name },
157
+ result: output,
158
+ state: "completed",
159
+ };
160
+ toolCallsAccum.push(event);
161
+ await onToolCall?.(event);
162
+ return { output: stepResult.output };
163
+ },
164
+ handleHuman: async (name) => {
165
+ throw new Error(`Loop human step "${name}" cannot run inside chat completions yet`);
166
+ },
167
+ });
168
+ if (!finalText)
169
+ finalText = JSON.stringify(result.context, null, 2);
170
+ if (loopRunStore && loopRunId) {
171
+ await loopRunStore.updateRun(loopRunId, {
172
+ status: "completed",
173
+ context: result.context,
174
+ trace: resumeRun ? [...resumeRun.trace, ...result.events] : result.events,
175
+ resume: undefined,
176
+ approval: resumeRun?.approval ? { ...resumeRun.approval, status: "approved" } : undefined,
177
+ completedAt: new Date().toISOString(),
178
+ });
179
+ }
180
+ return {
181
+ text: finalText,
182
+ usage: totalUsage,
183
+ model: lastModel,
184
+ providerMetadata: lastProviderMetadata,
185
+ toolCalls: toolCallsAccum,
186
+ context: result.context,
187
+ trace: result.events,
188
+ loopRunId,
189
+ };
190
+ }
191
+ catch (err) {
192
+ if (loopRunStore && loopRunId) {
193
+ err.loopRunId = loopRunId;
194
+ if (err instanceof LoopApprovalRequiredError || err instanceof LoopPermissionApprovalRequiredError) {
195
+ const approvalStore = deps.getApprovalStore?.();
196
+ let approvalRequestId;
197
+ const gateId = err instanceof LoopPermissionApprovalRequiredError
198
+ ? err.permission.id ?? `loop-permission-${nanoid(8)}`
199
+ : err.policy.id ?? `loop-policy-${nanoid(8)}`;
200
+ const gateName = err instanceof LoopPermissionApprovalRequiredError
201
+ ? err.permission.description ?? err.permission.id ?? "Loop permission approval"
202
+ : err.policy.description ?? err.policy.id ?? "Loop policy approval";
203
+ const approvalType = err instanceof LoopPermissionApprovalRequiredError ? "permission" : "policy";
204
+ if (approvalStore) {
205
+ approvalRequestId = `approval-${nanoid(16)}`;
206
+ await approvalStore.upsert({
207
+ id: approvalRequestId,
208
+ gateId,
209
+ gateName,
210
+ status: "pending",
211
+ payload: {
212
+ type: "loop_approval",
213
+ approvalType,
214
+ loopRunId,
215
+ loopName: projectLoop.name,
216
+ agentName: agentConfig.name,
217
+ hook: err.hook,
218
+ ...(err instanceof LoopPermissionApprovalRequiredError ? { permission: err.permission } : { policy: err.policy }),
219
+ payload: err.payload,
220
+ context: err.context,
221
+ trace: events,
222
+ },
223
+ requestedAt: new Date().toISOString(),
224
+ });
225
+ err.approvalRequestId = approvalRequestId;
226
+ }
227
+ await loopRunStore.updateRun(loopRunId, {
228
+ status: "awaiting_approval",
229
+ context: err.context,
230
+ trace: resumeRun ? [...resumeRun.trace, ...events] : events,
231
+ approvalRequestId,
232
+ approval: {
233
+ type: approvalType,
234
+ policyId: err instanceof LoopPermissionApprovalRequiredError ? "permission" : err.policy.id ?? "anonymous",
235
+ permissionId: err instanceof LoopPermissionApprovalRequiredError ? err.permission.id ?? "anonymous" : undefined,
236
+ hook: err.hook,
237
+ message: err instanceof LoopPermissionApprovalRequiredError ? err.permission.message : err.policy.message,
238
+ payload: err.payload,
239
+ context: err.context,
240
+ status: "pending",
241
+ },
242
+ resume: buildLoopResumeState(err.resume, aiMessages, extraSystemParts, resumeRun?.resume?.approvedGates),
243
+ error: err.message,
244
+ });
245
+ }
246
+ else {
247
+ await loopRunStore.updateRun(loopRunId, {
248
+ status: "failed",
249
+ trace: resumeRun ? [...resumeRun.trace, ...events] : events,
250
+ error: err instanceof Error ? err.message : String(err),
251
+ completedAt: new Date().toISOString(),
252
+ });
253
+ }
254
+ }
255
+ throw err;
256
+ }
257
+ finally {
258
+ if (rootTools.cleanup) {
259
+ rootTools.cleanup().catch(() => { });
260
+ }
261
+ }
262
+ }
263
+ export function buildLoopResumeState(continuation, aiMessages, extraSystemParts, approvedGates) {
264
+ if (!continuation)
265
+ return undefined;
266
+ return {
267
+ context: continuation.context,
268
+ steps: continuation.steps,
269
+ previousNode: continuation.previousNode,
270
+ approvedGates: approvedGates ?? [],
271
+ runtime: {
272
+ aiMessages,
273
+ extraSystemParts,
274
+ },
275
+ attempts: 0,
276
+ createdAt: new Date().toISOString(),
277
+ };
278
+ }
279
+ export async function resumeProjectLoopRun(options) {
280
+ const loopRunStore = options.deps.getLoopRunStore?.();
281
+ if (!loopRunStore)
282
+ throw new Error("Loop run store is not configured");
283
+ const run = await loopRunStore.getRun(options.runId);
284
+ if (!run)
285
+ throw new Error(`Loop run "${options.runId}" not found`);
286
+ if (run.status !== "approval_approved") {
287
+ throw new Error(`Loop run "${options.runId}" is ${run.status}, not approval_approved`);
288
+ }
289
+ if (!run.resume || run.resume.steps.length === 0) {
290
+ throw new Error(`Loop run "${options.runId}" has no resume checkpoint`);
291
+ }
292
+ const agents = await options.deps.getAgents();
293
+ const agentConfig = agents.find((agent) => agent.name === run.agentName);
294
+ if (!agentConfig)
295
+ throw new Error(`Agent "${run.agentName ?? "unknown"}" not found for loop run "${run.id}"`);
296
+ if (!options.deps.getProjectLoop)
297
+ throw new Error("Project loop resolver is not configured");
298
+ const projectLoop = await options.deps.getProjectLoop(run.loopName);
299
+ if (!projectLoop)
300
+ throw new Error(`Project loop "${run.loopName}" not found`);
301
+ const aiMessages = Array.isArray(run.resume.runtime?.aiMessages) ? run.resume.runtime.aiMessages : [];
302
+ const extraSystemParts = Array.isArray(run.resume.runtime?.extraSystemParts)
303
+ ? run.resume.runtime.extraSystemParts
304
+ : [];
305
+ await runProjectLoopCompletion({
306
+ deps: options.deps,
307
+ agentConfig,
308
+ projectLoop,
309
+ aiMessages,
310
+ extraSystemParts,
311
+ sessionId: run.sessionId,
312
+ user: run.user,
313
+ resumeRun: run,
314
+ });
315
+ const updated = await loopRunStore.getRun(run.id);
316
+ if (!updated)
317
+ throw new Error(`Loop run "${run.id}" disappeared after resume`);
318
+ return updated;
319
+ }
320
+ /**
321
+ * HTTP wiring for loop-mode completion requests: runs the project loop
322
+ * pipeline and adapts it to the OpenAI response surface (SSE stream with
323
+ * tool_call / loop_trace chunks, or a single JSON body).
324
+ */
325
+ export async function handleProjectLoopCompletion(c, options) {
326
+ const { deps, body, completionId, agentConfig, projectLoop, aiMessages, extraSystemParts, sessionStore, sessionId } = options;
327
+ if (body.stream) {
328
+ return streamSSE(c, async (stream) => {
329
+ const abortController = new AbortController();
330
+ stream.onAbort(() => { abortController.abort(); });
331
+ const heartbeatInterval = setInterval(() => {
332
+ if (abortController.signal.aborted) {
333
+ clearInterval(heartbeatInterval);
334
+ return;
335
+ }
336
+ stream.write(": ping\n\n").catch(() => {
337
+ clearInterval(heartbeatInterval);
338
+ });
339
+ }, 20_000);
340
+ let assistantMsgId = null;
341
+ let finalText = "";
342
+ let runUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
343
+ let runModel = agentConfig.model ?? "polpo";
344
+ let providerMetadata;
345
+ let toolCalls = [];
346
+ try {
347
+ await stream.writeSSE({ data: sseChunk(completionId, { role: "assistant" }) });
348
+ if (sessionStore && sessionId) {
349
+ const placeholder = await sessionStore.addMessage(sessionId, "assistant", "");
350
+ assistantMsgId = placeholder.id;
351
+ }
352
+ const run = await runProjectLoopCompletion({
353
+ deps,
354
+ agentConfig,
355
+ projectLoop,
356
+ aiMessages,
357
+ extraSystemParts,
358
+ sessionId,
359
+ user: body.user,
360
+ onToolCall: async (toolCall) => {
361
+ if (abortController.signal.aborted)
362
+ return;
363
+ await stream.writeSSE({
364
+ data: sseChunk(completionId, {}, null, { tool_call: toolCall }),
365
+ });
366
+ },
367
+ onTrace: async (event) => {
368
+ if (abortController.signal.aborted)
369
+ return;
370
+ await stream.writeSSE({
371
+ data: sseChunk(completionId, {}, null, { loop_trace: event }),
372
+ });
373
+ },
374
+ });
375
+ finalText = run.text;
376
+ runUsage = run.usage;
377
+ runModel = run.model;
378
+ providerMetadata = run.providerMetadata;
379
+ toolCalls = run.toolCalls;
380
+ if (!abortController.signal.aborted && finalText) {
381
+ await stream.writeSSE({ data: sseChunk(completionId, { content: finalText }) });
382
+ }
383
+ if (!abortController.signal.aborted) {
384
+ await stream.writeSSE({ data: sseChunk(completionId, {}, "stop", { loop_run_id: run.loopRunId }) });
385
+ await stream.writeSSE({ data: "[DONE]" });
386
+ }
387
+ }
388
+ catch (err) {
389
+ if ((err instanceof DOMException && err.name === "AbortError") || abortController.signal.aborted) {
390
+ return;
391
+ }
392
+ const notFound = modelNotFoundEnvelope(err, runModel, body.agent);
393
+ if (notFound) {
394
+ await stream.writeSSE({ data: sseChunk(completionId, {}, "stop", { error: notFound }) });
395
+ await stream.writeSSE({ data: "[DONE]" });
396
+ return;
397
+ }
398
+ const loopError = loopRuntimeErrorEnvelope(err);
399
+ if (loopError) {
400
+ await stream.writeSSE({ data: sseChunk(completionId, {}, "stop", { error: loopError }) });
401
+ await stream.writeSSE({ data: "[DONE]" });
402
+ return;
403
+ }
404
+ throw err;
405
+ }
406
+ finally {
407
+ clearInterval(heartbeatInterval);
408
+ const safeToolCalls = redactVaultToolCalls(toolCalls);
409
+ if (sessionStore && sessionId && assistantMsgId) {
410
+ await sessionStore.updateMessage(sessionId, assistantMsgId, finalText.trim(), safeToolCalls);
411
+ }
412
+ try {
413
+ deps.onCompletionFinished?.({
414
+ usage: runUsage,
415
+ model: runModel,
416
+ agent: body.agent,
417
+ sessionId: sessionId ?? undefined,
418
+ user: body.user,
419
+ providerMetadata,
420
+ });
421
+ }
422
+ catch { /* never fail on callback */ }
423
+ }
424
+ });
425
+ }
426
+ let assistantMsgId = null;
427
+ let runUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
428
+ let runModel = agentConfig.model ?? "polpo";
429
+ let providerMetadata;
430
+ let toolCalls = [];
431
+ let finalText = "";
432
+ try {
433
+ if (sessionStore && sessionId) {
434
+ const placeholder = await sessionStore.addMessage(sessionId, "assistant", "");
435
+ assistantMsgId = placeholder.id;
436
+ }
437
+ const run = await runProjectLoopCompletion({
438
+ deps,
439
+ agentConfig,
440
+ projectLoop,
441
+ aiMessages,
442
+ extraSystemParts,
443
+ sessionId,
444
+ user: body.user,
445
+ });
446
+ finalText = run.text;
447
+ runUsage = run.usage;
448
+ runModel = run.model;
449
+ providerMetadata = run.providerMetadata;
450
+ toolCalls = run.toolCalls;
451
+ return c.json(completionResponse(completionId, finalText, runUsage, { loop_trace: run.trace, loop_run_id: run.loopRunId }));
452
+ }
453
+ catch (err) {
454
+ const notFound = modelNotFoundEnvelope(err, runModel, body.agent);
455
+ if (notFound) {
456
+ return c.json({ error: notFound }, 400);
457
+ }
458
+ const loopError = loopRuntimeErrorEnvelope(err);
459
+ if (loopError) {
460
+ return c.json({ error: loopError }, 403);
461
+ }
462
+ throw err;
463
+ }
464
+ finally {
465
+ const safeToolCalls = redactVaultToolCalls(toolCalls);
466
+ if (sessionStore && sessionId && assistantMsgId) {
467
+ await sessionStore.updateMessage(sessionId, assistantMsgId, finalText.trim(), safeToolCalls);
468
+ }
469
+ try {
470
+ deps.onCompletionFinished?.({
471
+ usage: runUsage,
472
+ model: runModel,
473
+ agent: body.agent,
474
+ sessionId: sessionId ?? undefined,
475
+ user: body.user,
476
+ providerMetadata,
477
+ });
478
+ }
479
+ catch { /* never fail on callback */ }
480
+ }
481
+ }
482
+ //# sourceMappingURL=project-loop-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-loop-runner.js","sourceRoot":"","sources":["../../../src/routes/completions/project-loop-runner.ts"],"names":[],"mappings":"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"}