@polpo-ai/server 0.15.4 → 0.15.6

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 (48) hide show
  1. package/dist/routes/completions/agent-step-runner.d.ts +1 -1
  2. package/dist/routes/completions/agent-step-runner.d.ts.map +1 -1
  3. package/dist/routes/completions/agent-step-runner.js +39 -12
  4. package/dist/routes/completions/agent-step-runner.js.map +1 -1
  5. package/dist/routes/completions/agent-step-runner.test.d.ts +2 -0
  6. package/dist/routes/completions/agent-step-runner.test.d.ts.map +1 -0
  7. package/dist/routes/completions/agent-step-runner.test.js +21 -0
  8. package/dist/routes/completions/agent-step-runner.test.js.map +1 -0
  9. package/dist/routes/completions/chat-handler.d.ts +3 -3
  10. package/dist/routes/completions/chat-handler.d.ts.map +1 -1
  11. package/dist/routes/completions/chat-handler.js +63 -53
  12. package/dist/routes/completions/chat-handler.js.map +1 -1
  13. package/dist/routes/completions/chat-via-run-handler.d.ts +9 -4
  14. package/dist/routes/completions/chat-via-run-handler.d.ts.map +1 -1
  15. package/dist/routes/completions/chat-via-run-handler.js +76 -12
  16. package/dist/routes/completions/chat-via-run-handler.js.map +1 -1
  17. package/dist/routes/completions/chat-via-run-handler.test.d.ts +2 -0
  18. package/dist/routes/completions/chat-via-run-handler.test.d.ts.map +1 -0
  19. package/dist/routes/completions/chat-via-run-handler.test.js +190 -0
  20. package/dist/routes/completions/chat-via-run-handler.test.js.map +1 -0
  21. package/dist/routes/completions/message-mapping.d.ts.map +1 -1
  22. package/dist/routes/completions/message-mapping.js +35 -9
  23. package/dist/routes/completions/message-mapping.js.map +1 -1
  24. package/dist/routes/completions/message-mapping.test.d.ts +2 -0
  25. package/dist/routes/completions/message-mapping.test.d.ts.map +1 -0
  26. package/dist/routes/completions/message-mapping.test.js +32 -0
  27. package/dist/routes/completions/message-mapping.test.js.map +1 -0
  28. package/dist/routes/completions/sse.d.ts +7 -0
  29. package/dist/routes/completions/sse.d.ts.map +1 -1
  30. package/dist/routes/completions/sse.js +57 -7
  31. package/dist/routes/completions/sse.js.map +1 -1
  32. package/dist/routes/completions/sse.test.d.ts +2 -0
  33. package/dist/routes/completions/sse.test.d.ts.map +1 -0
  34. package/dist/routes/completions/sse.test.js +29 -0
  35. package/dist/routes/completions/sse.test.js.map +1 -0
  36. package/dist/routes/completions/tool-mapping.d.ts +1 -0
  37. package/dist/routes/completions/tool-mapping.d.ts.map +1 -1
  38. package/dist/routes/completions/tool-mapping.js +4 -1
  39. package/dist/routes/completions/tool-mapping.js.map +1 -1
  40. package/dist/routes/completions/tool-mapping.test.js +6 -0
  41. package/dist/routes/completions/tool-mapping.test.js.map +1 -1
  42. package/dist/routes/completions-provider-tools.test.js +95 -16
  43. package/dist/routes/completions-provider-tools.test.js.map +1 -1
  44. package/dist/routes/completions.d.ts +12 -0
  45. package/dist/routes/completions.d.ts.map +1 -1
  46. package/dist/routes/completions.js +26 -17
  47. package/dist/routes/completions.js.map +1 -1
  48. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE7C,wBAAgB,QAAQ,CACtB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAaR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAkBjG;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,IAAI,EAAE,qBAAqB,GAAG,yBAAyB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBjN;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBzH"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE7C,wBAAgB,QAAQ,CACtB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAaR;AAgCD,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAStD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,sBAAsB,CAAC;CAC9B,CAMA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CAoBjG;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,IAAI,EAAE,qBAAqB,GAAG,yBAAyB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBjN;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;EAkBzH"}
@@ -17,6 +17,56 @@ export function sseChunk(id, delta, finishReason = null, extra) {
17
17
  }],
18
18
  });
19
19
  }
20
+ function errorObjects(err) {
21
+ const queue = [err];
22
+ const seen = new Set();
23
+ const objects = [];
24
+ while (queue.length > 0 && objects.length < 16) {
25
+ const current = queue.shift();
26
+ if (!current || (typeof current !== "object" && typeof current !== "function") || seen.has(current))
27
+ continue;
28
+ seen.add(current);
29
+ const record = current;
30
+ objects.push(record);
31
+ for (const key of ["error", "cause", "data", "param", "sourceError"]) {
32
+ if (record[key] !== undefined)
33
+ queue.push(record[key]);
34
+ }
35
+ }
36
+ return objects;
37
+ }
38
+ function responseBodyMessage(value) {
39
+ if (typeof value !== "string" || !value.trim())
40
+ return undefined;
41
+ try {
42
+ const parsed = JSON.parse(value);
43
+ const message = parsed?.error?.message ?? parsed?.message;
44
+ return typeof message === "string" && message.trim() ? message.trim() : undefined;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ /** Extract a stable, user-visible provider error without exposing request internals. */
51
+ export function visibleModelError(err) {
52
+ for (const candidate of errorObjects(err)) {
53
+ for (const value of [candidate.message, candidate.error_description]) {
54
+ if (typeof value === "string" && value.trim())
55
+ return value.trim();
56
+ }
57
+ const fromBody = responseBodyMessage(candidate.responseBody);
58
+ if (fromBody)
59
+ return fromBody;
60
+ }
61
+ return "The model provider rejected the request before generating a response.";
62
+ }
63
+ export function modelErrorEnvelope(err) {
64
+ return {
65
+ message: visibleModelError(err),
66
+ type: "model_error",
67
+ code: "model_request_failed",
68
+ };
69
+ }
20
70
  /**
21
71
  * Detect Vercel AI Gateway "model not found" errors so callers see a
22
72
  * clean 400 (with the offending model id + agent name) instead of a
@@ -31,17 +81,17 @@ export function sseChunk(id, delta, finishReason = null, extra) {
31
81
  * model-not-found and should propagate untouched.
32
82
  */
33
83
  export function modelNotFoundEnvelope(err, fallbackModelId, agent) {
34
- if (!err || typeof err !== "object")
35
- return null;
36
- const e = err;
37
- const isGatewayNotFound = e.name === "GatewayModelNotFoundError" ||
84
+ const candidates = errorObjects(err);
85
+ const match = candidates.find((e) => e.name === "GatewayModelNotFoundError" ||
38
86
  e.constructor?.name === "GatewayModelNotFoundError" ||
87
+ e.type === "model_not_found" ||
88
+ e.code === "model_not_found" ||
39
89
  (e.statusCode === 404 &&
40
90
  typeof e.responseBody === "string" &&
41
- e.responseBody.includes("model_not_found"));
42
- if (!isGatewayNotFound)
91
+ e.responseBody.includes("model_not_found")));
92
+ if (!match)
43
93
  return null;
44
- const modelId = e.modelId ?? fallbackModelId ?? "unknown";
94
+ const modelId = match.modelId ?? match.param?.modelId ?? fallbackModelId ?? "unknown";
45
95
  return {
46
96
  message: `Model "${modelId}" is not available on the gateway. ` +
47
97
  `It may have been renamed or deprecated — update the agent config (or the orchestrator default).`,
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/routes/completions/sse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/routes/completions/sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sse.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.test.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/sse.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { modelErrorEnvelope, modelNotFoundEnvelope, visibleModelError } from "./sse.js";
3
+ describe("model error envelopes", () => {
4
+ it("extracts a nested gateway error without leaking the whole response", () => {
5
+ const error = {
6
+ cause: {
7
+ responseBody: JSON.stringify({ error: { message: "thinking.type.enabled is unsupported" } }),
8
+ },
9
+ };
10
+ expect(visibleModelError(error)).toBe("thinking.type.enabled is unsupported");
11
+ expect(modelErrorEnvelope(error)).toEqual({
12
+ message: "thinking.type.enabled is unsupported",
13
+ type: "model_error",
14
+ code: "model_request_failed",
15
+ });
16
+ });
17
+ it("recognizes model-not-found after the Run event wrapper normalized it", () => {
18
+ expect(modelNotFoundEnvelope({
19
+ error: {
20
+ name: "GatewayModelNotFoundError",
21
+ modelId: "provider/removed-model",
22
+ },
23
+ }, undefined, "agent-1")).toMatchObject({
24
+ type: "model_not_found",
25
+ param: { modelId: "provider/removed-model", agent: "agent-1" },
26
+ });
27
+ });
28
+ });
29
+ //# sourceMappingURL=sse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.test.js","sourceRoot":"","sources":["../../../src/routes/completions/sse.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAExF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE;gBACL,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,CAAC;aAC7F;SACF,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC9E,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,sCAAsC;YAC/C,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,CAAC,qBAAqB,CAAC;YAC3B,KAAK,EAAE;gBACL,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,wBAAwB;aAClC;SACF,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;YACtC,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE;SAC/D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -9,6 +9,7 @@ export type LoopRuntimeToolCall = {
9
9
  id: string;
10
10
  name: string;
11
11
  arguments?: Record<string, unknown>;
12
+ argumentsText?: string;
12
13
  result?: string;
13
14
  state: "preparing" | "calling" | "completed" | "error" | "interrupted";
14
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-mapping.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;CACxE,CAAC;AAQF,yDAAyD;AACzD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,GACvC,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAe5D;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,GAAG,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,EAAE,EAChB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAMzF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,mBAAmB,GAAG;IAAE,gBAAgB,EAAE,IAAI,CAAA;CAAE,CAWhI;AAED,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAE5G;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CAAC,CAQlG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAWnE;AAQD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CA+CvF,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,aAA0C,CAAC"}
1
+ {"version":3,"file":"tool-mapping.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;CACxE,CAAC;AAQF,yDAAyD;AACzD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,GACvC,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAe5D;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,GAAG,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,GAAG,EAAE,EAChB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAMzF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,mBAAmB,GAAG;IAAE,gBAAgB,EAAE,IAAI,CAAA;CAAE,CAWhI;AAED,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAE5G;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CAAC,CAQlG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAWnE;AAQD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CA+CvF,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,aAA0C,CAAC"}
@@ -56,7 +56,10 @@ export async function persistAssistantMessage(sessionStore, sessionId, messageId
56
56
  if (!sessionStore || !sessionId || !messageId)
57
57
  return;
58
58
  const safeToolCalls = redactVaultToolCalls(toolCalls);
59
- const content = finalText.trim() || (opts?.emptyFallback ?? "");
59
+ // A textless client/provider tool turn is valid and must not be rewritten as
60
+ // an interrupted response. Use the fallback only when the turn contains
61
+ // neither assistant text nor a persisted tool call.
62
+ const content = finalText.trim() || (safeToolCalls.length > 0 ? "" : (opts?.emptyFallback ?? ""));
60
63
  await sessionStore.updateMessage(sessionId, messageId, content, safeToolCalls);
61
64
  }
62
65
  export function indexToolResultsByCallId(toolResults) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-mapping.js","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-mapping.js","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@ describe("persistAssistantMessage", () => {
27
27
  await persistAssistantMessage(store, "s1", "m1", "", [], { emptyFallback: "[Response interrupted]" });
28
28
  expect(store.updateMessage).toHaveBeenCalledWith("s1", "m1", "[Response interrupted]", []);
29
29
  });
30
+ it("keeps a valid textless tool turn empty instead of marking it interrupted", async () => {
31
+ const store = fakeStore();
32
+ const toolCalls = [{ id: "t1", name: "ask_user_question", arguments: {}, state: "interrupted" }];
33
+ await persistAssistantMessage(store, "s1", "m1", "", toolCalls, { emptyFallback: "[Response interrupted]" });
34
+ expect(store.updateMessage).toHaveBeenCalledWith("s1", "m1", "", toolCalls);
35
+ });
30
36
  it("redacts vault credentials before persisting", async () => {
31
37
  const store = fakeStore();
32
38
  const toolCalls = [
@@ -1 +1 @@
1
- {"version":3,"file":"tool-mapping.test.js","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-mapping.test.js","sourceRoot":"","sources":["../../../src/routes/completions/tool-mapping.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { beforeEach, describe, expect, it, vi } from "vitest";
2
- const { generateTextMock } = vi.hoisted(() => ({
2
+ const { generateTextMock, streamTextMock } = vi.hoisted(() => ({
3
3
  generateTextMock: vi.fn(),
4
+ streamTextMock: vi.fn(),
4
5
  }));
5
6
  vi.mock("ai", () => ({
6
7
  generateText: generateTextMock,
7
- streamText: vi.fn(),
8
+ streamText: streamTextMock,
8
9
  jsonSchema: (schema) => schema,
9
10
  }));
10
11
  import { completionRoutes } from "./completions.js";
@@ -17,9 +18,32 @@ function parseSseJsonChunks(body) {
17
18
  .filter((data) => data !== "[DONE]")
18
19
  .map((data) => JSON.parse(data));
19
20
  }
21
+ function mockStreamResult(options) {
22
+ const usage = options.usage ?? { inputTokens: 1, outputTokens: 1, totalTokens: 2 };
23
+ async function* fullStream() {
24
+ for (const part of options.parts ?? [])
25
+ yield part;
26
+ if (options.text) {
27
+ yield { type: "text-delta", id: "text_1", text: options.text };
28
+ }
29
+ yield { type: "finish", finishReason: options.toolCalls?.length ? "tool-calls" : "stop", totalUsage: usage };
30
+ }
31
+ return {
32
+ fullStream: fullStream(),
33
+ toolCalls: Promise.resolve(options.toolCalls ?? []),
34
+ toolResults: Promise.resolve(options.toolResults ?? []),
35
+ usage: Promise.resolve(usage),
36
+ totalUsage: Promise.resolve(usage),
37
+ finishReason: Promise.resolve(options.toolCalls?.length ? "tool-calls" : "stop"),
38
+ rawFinishReason: Promise.resolve(undefined),
39
+ providerMetadata: Promise.resolve(options.providerMetadata),
40
+ response: Promise.resolve({ messages: options.responseMessages ?? [] }),
41
+ };
42
+ }
20
43
  describe("completionRoutes provider-executed tools", () => {
21
44
  beforeEach(() => {
22
45
  generateTextMock.mockReset();
46
+ streamTextMock.mockReset();
23
47
  });
24
48
  function makeDeps() {
25
49
  return {
@@ -76,9 +100,8 @@ describe("completionRoutes provider-executed tools", () => {
76
100
  results: [{ title: "Polpo", url: "https://polpo.sh", snippet: "Agent backend" }],
77
101
  id: "search_1",
78
102
  };
79
- generateTextMock
80
- .mockResolvedValueOnce({
81
- text: "",
103
+ streamTextMock
104
+ .mockReturnValueOnce(mockStreamResult({
82
105
  usage: { inputTokens: 10, outputTokens: 2, totalTokens: 12 },
83
106
  providerMetadata: undefined,
84
107
  toolCalls: [{
@@ -113,10 +136,10 @@ describe("completionRoutes provider-executed tools", () => {
113
136
  },
114
137
  ],
115
138
  }],
116
- })
117
- .mockImplementationOnce(async (args) => {
139
+ }))
140
+ .mockImplementationOnce((args) => {
118
141
  secondTurnMessages = args.messages;
119
- return {
142
+ return mockStreamResult({
120
143
  text: "Polpo is an agent backend.",
121
144
  usage: { inputTokens: 20, outputTokens: 5, totalTokens: 25 },
122
145
  providerMetadata: undefined,
@@ -126,7 +149,7 @@ describe("completionRoutes provider-executed tools", () => {
126
149
  role: "assistant",
127
150
  content: "Polpo is an agent backend.",
128
151
  }],
129
- };
152
+ });
130
153
  });
131
154
  const app = completionRoutes(() => makeDeps());
132
155
  const res = await app.request("/", {
@@ -141,7 +164,7 @@ describe("completionRoutes provider-executed tools", () => {
141
164
  expect(res.status).toBe(200);
142
165
  const json = await res.json();
143
166
  expect(json.choices[0].message.content).toBe("Polpo is an agent backend.");
144
- expect(generateTextMock).toHaveBeenCalledTimes(2);
167
+ expect(streamTextMock).toHaveBeenCalledTimes(2);
145
168
  expect(secondTurnMessages).toEqual(expect.arrayContaining([
146
169
  expect.objectContaining({
147
170
  role: "assistant",
@@ -156,10 +179,57 @@ describe("completionRoutes provider-executed tools", () => {
156
179
  ]));
157
180
  expect(secondTurnMessages?.filter((message) => message.role === "tool" && JSON.stringify(message).includes("search_web"))).toEqual([]);
158
181
  });
182
+ it("streams raw tool argument text while the model is preparing a tool call", async () => {
183
+ async function* fullStream() {
184
+ yield { type: "tool-input-start", id: "call_search", toolName: "search_web" };
185
+ yield { type: "tool-input-delta", id: "call_search", delta: "{\"query\":\"Polpo" };
186
+ yield { type: "tool-input-delta", id: "call_search", delta: " pricing\"}" };
187
+ yield { type: "finish", finishReason: "stop" };
188
+ }
189
+ streamTextMock.mockReturnValue({
190
+ fullStream: fullStream(),
191
+ toolCalls: Promise.resolve([]),
192
+ toolResults: Promise.resolve([]),
193
+ usage: Promise.resolve({ inputTokens: 10, outputTokens: 2, totalTokens: 12 }),
194
+ providerMetadata: Promise.resolve(undefined),
195
+ responseMessages: Promise.resolve([]),
196
+ });
197
+ const app = completionRoutes(() => makeDeps());
198
+ const res = await app.request("/", {
199
+ method: "POST",
200
+ headers: { "content-type": "application/json" },
201
+ body: JSON.stringify({
202
+ agent: "researcher",
203
+ stream: true,
204
+ messages: [{ role: "user", content: "search pricing" }],
205
+ }),
206
+ });
207
+ expect(res.status).toBe(200);
208
+ const chunks = parseSseJsonChunks(await res.text());
209
+ const preparingEvents = chunks
210
+ .map((chunk) => chunk.choices?.[0]?.tool_call)
211
+ .filter((event) => event?.state === "preparing");
212
+ expect(preparingEvents).toEqual([
213
+ expect.objectContaining({ id: "call_search", name: "search_web", state: "preparing" }),
214
+ expect.objectContaining({
215
+ id: "call_search",
216
+ name: "search_web",
217
+ state: "preparing",
218
+ argumentsText: "{\"query\":\"Polpo",
219
+ }),
220
+ expect.objectContaining({
221
+ id: "call_search",
222
+ name: "search_web",
223
+ state: "preparing",
224
+ argumentsText: "{\"query\":\"Polpo pricing\"}",
225
+ }),
226
+ ]);
227
+ });
159
228
  });
160
229
  describe("completionRoutes loop agent-step tool streaming", () => {
161
230
  beforeEach(() => {
162
231
  generateTextMock.mockReset();
232
+ streamTextMock.mockReset();
163
233
  });
164
234
  function makeDeps() {
165
235
  return {
@@ -210,9 +280,15 @@ describe("completionRoutes loop agent-step tool streaming", () => {
210
280
  };
211
281
  }
212
282
  it("streams tool calls made inside an agent loop step before the macro step completes", async () => {
213
- generateTextMock
214
- .mockResolvedValueOnce({
215
- text: "",
283
+ streamTextMock
284
+ .mockReturnValueOnce(mockStreamResult({
285
+ parts: [
286
+ { type: "tool-input-start", id: "call_bash", toolName: "bash" },
287
+ { type: "tool-input-delta", id: "call_bash", delta: "{\"command\":" },
288
+ { type: "tool-input-delta", id: "call_bash", delta: "\"echo hello\"}" },
289
+ { type: "tool-input-end", id: "call_bash" },
290
+ { type: "tool-call", toolCallId: "call_bash", toolName: "bash", input: { command: "echo hello" } },
291
+ ],
216
292
  usage: { inputTokens: 10, outputTokens: 2, totalTokens: 12 },
217
293
  providerMetadata: undefined,
218
294
  toolCalls: [{
@@ -230,8 +306,8 @@ describe("completionRoutes loop agent-step tool streaming", () => {
230
306
  input: { command: "echo hello" },
231
307
  }],
232
308
  }],
233
- })
234
- .mockResolvedValueOnce({
309
+ }))
310
+ .mockReturnValueOnce(mockStreamResult({
235
311
  text: "done",
236
312
  usage: { inputTokens: 12, outputTokens: 4, totalTokens: 16 },
237
313
  providerMetadata: undefined,
@@ -241,7 +317,7 @@ describe("completionRoutes loop agent-step tool streaming", () => {
241
317
  role: "assistant",
242
318
  content: "done",
243
319
  }],
244
- });
320
+ }));
245
321
  const app = completionRoutes(() => makeDeps());
246
322
  const res = await app.request("/", {
247
323
  method: "POST",
@@ -260,6 +336,9 @@ describe("completionRoutes loop agent-step tool streaming", () => {
260
336
  .filter(Boolean);
261
337
  expect(toolEvents).toEqual([
262
338
  expect.objectContaining({ name: "loop:implement", state: "calling" }),
339
+ expect.objectContaining({ id: "call_bash", name: "bash", state: "preparing" }),
340
+ expect.objectContaining({ id: "call_bash", name: "bash", state: "preparing", argumentsText: "{\"command\":" }),
341
+ expect.objectContaining({ id: "call_bash", name: "bash", state: "preparing", argumentsText: "{\"command\":\"echo hello\"}" }),
263
342
  expect.objectContaining({ id: "call_bash", name: "bash", arguments: { command: "echo hello" }, state: "calling" }),
264
343
  expect.objectContaining({ id: "call_bash", name: "bash", result: "ran echo hello", state: "completed" }),
265
344
  expect.objectContaining({ name: "loop:implement", state: "completed" }),
@@ -1 +1 @@
1
- {"version":3,"file":"completions-provider-tools.test.js","sourceRoot":"","sources":["../../src/routes/completions-provider-tools.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completions-provider-tools.test.js","sourceRoot":"","sources":["../../src/routes/completions-provider-tools.test.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,18 @@ export interface CompletionRouteDeps {
56
56
  }>;
57
57
  /** Build agent system prompt for conversational mode. */
58
58
  buildAgentPrompt: (agentConfig: any) => string | Promise<string>;
59
+ /**
60
+ * Optionally assemble the complete host-specific runtime prompt. Hosts use
61
+ * this to inject shared memory, agent memory, skills, workspace policy, and
62
+ * tagged caller/loop context consistently across chat and loop execution.
63
+ * When omitted, the server preserves the legacy buildAgentPrompt fallback.
64
+ */
65
+ buildRuntimePrompt?: (agentConfig: any, options: {
66
+ mode: "chat" | "loop-step";
67
+ extraSystemParts: string[];
68
+ loopContextPart?: string;
69
+ includeAgentMemory: boolean;
70
+ }) => string | Promise<string>;
59
71
  /** Create tools + executor for the agent. Return empty arrays for chat-only.
60
72
  * Optional `cleanup` is invoked once the response finishes — used to close
61
73
  * long-lived resources like MCP transports.
@@ -1 +1 @@
1
- {"version":3,"file":"completions.d.ts","sourceRoot":"","sources":["../../src/routes/completions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completions.d.ts","sourceRoot":"","sources":["../../src/routes/completions.ts"],"names":[],"mappings":"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"}
@@ -117,23 +117,31 @@ export function completionRoutes(getDeps, apiKeys) {
117
117
  effectiveToolExecutor = async () => "Error: Project loop runtime has not resolved tools";
118
118
  }
119
119
  else {
120
- // Build system prompt via dep
121
- const agentSystemPrompt = await deps.buildAgentPrompt(agentConfig);
122
- const conversationalPreamble = [
123
- "You are now in interactive conversation mode with the user.",
124
- "Unlike task execution, you should engage in dialogue: ask clarifying questions,",
125
- "explain your reasoning, and wait for user input when needed.",
126
- "You still have access to all your coding tools to help the user.",
127
- ].join("\n");
128
- const basePrompt = `${conversationalPreamble}\n\n${agentSystemPrompt}`;
129
- fullSystemPrompt = extraSystemParts.length > 0
130
- ? `${basePrompt}\n\n## Additional context from caller\n\n${extraSystemParts.join("\n\n")}`
131
- : basePrompt;
132
- // Inject agent memory
133
- const memoryStore = deps.getMemoryStore();
134
- const agentMemory = await memoryStore?.get(agentMemoryScope(agentConfig.name));
135
- if (agentMemory) {
136
- fullSystemPrompt += `\n\n## Your persistent memory\n\n${agentMemory}`;
120
+ if (deps.buildRuntimePrompt) {
121
+ fullSystemPrompt = await deps.buildRuntimePrompt(agentConfig, {
122
+ mode: "chat",
123
+ extraSystemParts,
124
+ includeAgentMemory: true,
125
+ });
126
+ }
127
+ else {
128
+ // Build system prompt via the backwards-compatible generic fallback.
129
+ const agentSystemPrompt = await deps.buildAgentPrompt(agentConfig);
130
+ const conversationalPreamble = [
131
+ "You are now in interactive conversation mode with the user.",
132
+ "Unlike task execution, you should engage in dialogue: ask clarifying questions,",
133
+ "explain your reasoning, and wait for user input when needed.",
134
+ "You still have access to all your coding tools to help the user.",
135
+ ].join("\n");
136
+ const basePrompt = `${conversationalPreamble}\n\n${agentSystemPrompt}`;
137
+ fullSystemPrompt = extraSystemParts.length > 0
138
+ ? `${basePrompt}\n\n## Additional context from caller\n\n${extraSystemParts.join("\n\n")}`
139
+ : basePrompt;
140
+ const memoryStore = deps.getMemoryStore();
141
+ const agentMemory = await memoryStore?.get(agentMemoryScope(agentConfig.name));
142
+ if (agentMemory) {
143
+ fullSystemPrompt += `\n\n## Your persistent memory\n\n${agentMemory}`;
144
+ }
137
145
  }
138
146
  // Resolve model via dep
139
147
  const reasoning = agentConfig.reasoning ?? deps.getConfig()?.settings?.reasoning;
@@ -239,6 +247,7 @@ export function completionRoutes(getDeps, apiKeys) {
239
247
  // driver. Agent-direct only; project-loop runs already returned above.
240
248
  const viaRun = deps.getConfig()?.settings?.chatExecution === "run" &&
241
249
  !!deps.runChatViaRun &&
250
+ agentMode &&
242
251
  !projectLoopRuntime;
243
252
  if (viaRun) {
244
253
  return (body.stream