@polpo-ai/server 0.15.43 → 0.15.44

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 (57) hide show
  1. package/dist/routes/completions/agent-step-runner.d.ts +7 -2
  2. package/dist/routes/completions/agent-step-runner.d.ts.map +1 -1
  3. package/dist/routes/completions/agent-step-runner.js +50 -10
  4. package/dist/routes/completions/agent-step-runner.js.map +1 -1
  5. package/dist/routes/completions/chat-handler.d.ts +5 -2
  6. package/dist/routes/completions/chat-handler.d.ts.map +1 -1
  7. package/dist/routes/completions/chat-handler.js +99 -14
  8. package/dist/routes/completions/chat-handler.js.map +1 -1
  9. package/dist/routes/completions/chat-via-run-handler.d.ts +6 -0
  10. package/dist/routes/completions/chat-via-run-handler.d.ts.map +1 -1
  11. package/dist/routes/completions/chat-via-run-handler.js +79 -11
  12. package/dist/routes/completions/chat-via-run-handler.js.map +1 -1
  13. package/dist/routes/completions/chat-via-run-handler.test.js +299 -0
  14. package/dist/routes/completions/chat-via-run-handler.test.js.map +1 -1
  15. package/dist/routes/completions/conversation-turn.d.ts +2 -1
  16. package/dist/routes/completions/conversation-turn.d.ts.map +1 -1
  17. package/dist/routes/completions/conversation-turn.js +37 -9
  18. package/dist/routes/completions/conversation-turn.js.map +1 -1
  19. package/dist/routes/completions/message-mapping.d.ts +4 -2
  20. package/dist/routes/completions/message-mapping.d.ts.map +1 -1
  21. package/dist/routes/completions/message-mapping.js +34 -10
  22. package/dist/routes/completions/message-mapping.js.map +1 -1
  23. package/dist/routes/completions/message-mapping.test.js +65 -0
  24. package/dist/routes/completions/message-mapping.test.js.map +1 -1
  25. package/dist/routes/completions/output-guardrails.d.ts +15 -0
  26. package/dist/routes/completions/output-guardrails.d.ts.map +1 -0
  27. package/dist/routes/completions/output-guardrails.js +22 -0
  28. package/dist/routes/completions/output-guardrails.js.map +1 -0
  29. package/dist/routes/completions/project-loop-runner.d.ts +6 -3
  30. package/dist/routes/completions/project-loop-runner.d.ts.map +1 -1
  31. package/dist/routes/completions/project-loop-runner.js +73 -8
  32. package/dist/routes/completions/project-loop-runner.js.map +1 -1
  33. package/dist/routes/completions/project-loop-runner.test.d.ts +2 -0
  34. package/dist/routes/completions/project-loop-runner.test.d.ts.map +1 -0
  35. package/dist/routes/completions/project-loop-runner.test.js +41 -0
  36. package/dist/routes/completions/project-loop-runner.test.js.map +1 -0
  37. package/dist/routes/completions/sse.d.ts +5 -0
  38. package/dist/routes/completions/sse.d.ts.map +1 -1
  39. package/dist/routes/completions/sse.js +34 -1
  40. package/dist/routes/completions/sse.js.map +1 -1
  41. package/dist/routes/completions/tool-guardrails.d.ts +18 -0
  42. package/dist/routes/completions/tool-guardrails.d.ts.map +1 -0
  43. package/dist/routes/completions/tool-guardrails.js +32 -0
  44. package/dist/routes/completions/tool-guardrails.js.map +1 -0
  45. package/dist/routes/completions/tool-guardrails.test.d.ts +2 -0
  46. package/dist/routes/completions/tool-guardrails.test.d.ts.map +1 -0
  47. package/dist/routes/completions/tool-guardrails.test.js +87 -0
  48. package/dist/routes/completions/tool-guardrails.test.js.map +1 -0
  49. package/dist/routes/completions-loop-runtime.test.js +115 -2
  50. package/dist/routes/completions-loop-runtime.test.js.map +1 -1
  51. package/dist/routes/completions-provider-tools.test.js +109 -0
  52. package/dist/routes/completions-provider-tools.test.js.map +1 -1
  53. package/dist/routes/completions.d.ts +17 -4
  54. package/dist/routes/completions.d.ts.map +1 -1
  55. package/dist/routes/completions.js +1 -0
  56. package/dist/routes/completions.js.map +1 -1
  57. package/package.json +6 -6
@@ -5,7 +5,7 @@
5
5
  * step's overlay-merged agent config — used by the project loop runtime
6
6
  * to execute `loop:` steps inside a deterministic pipeline.
7
7
  */
8
- import { type ContextBag, type ModelSelection, type RuntimeContextResolution, type PolpoSettings, type SummarizeFn } from "@polpo-ai/core";
8
+ import { type ContextBag, type ModelSelection, type RuntimeContextResolution, type PolpoSettings, type RuntimePlan, type SummarizeFn, type RuntimeContextTrustMode } from "@polpo-ai/core";
9
9
  import { type LanguageModel, type LanguageModelUsage } from "ai";
10
10
  import type { CompletionRouteDeps } from "../completions.js";
11
11
  import { type LoopRuntimeToolCall } from "./tool-mapping.js";
@@ -53,7 +53,7 @@ export declare function addUsage(a: LanguageModelUsage, b: LanguageModelUsage):
53
53
  * Used by context compaction to summarize conversation history.
54
54
  */
55
55
  export declare function buildSummarizeFn(m: ResolvedModelInfo, providerOptions?: Record<string, any>): SummarizeFn;
56
- export declare function buildRuntimeAgentPrompt(deps: CompletionRouteDeps, agentConfig: any, extraSystemParts: string[], loopContextPart?: string, runtimeContext?: RuntimeContextResolution): Promise<string>;
56
+ export declare function buildRuntimeAgentPrompt(deps: CompletionRouteDeps, agentConfig: any, extraSystemParts: string[], loopContextPart?: string, contextTrust?: RuntimeContextTrustMode, runtimeContext?: RuntimeContextResolution): Promise<string>;
57
57
  export declare function runAgentStepCompletion(options: {
58
58
  deps: CompletionRouteDeps;
59
59
  agentConfig: any;
@@ -61,6 +61,11 @@ export declare function runAgentStepCompletion(options: {
61
61
  extraSystemParts: string[];
62
62
  context: Readonly<ContextBag>;
63
63
  stepName: string;
64
+ contextTrust?: RuntimeContextTrustMode;
65
+ runtimePlan?: RuntimePlan;
66
+ signal?: AbortSignal;
67
+ runId?: string;
68
+ sessionId?: string;
64
69
  runtimeContext?: RuntimeContextResolution;
65
70
  onToolCall?: (toolCall: LoopRuntimeToolCall) => Promise<void>;
66
71
  }): Promise<AgentStepRunResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-step-runner.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/agent-step-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-step-runner.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/agent-step-runner.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,12 @@
5
5
  * step's overlay-merged agent config — used by the project loop runtime
6
6
  * to execute `loop:` steps inside a deterministic pipeline.
7
7
  */
8
- import { agentMemoryScope, compactIfNeeded, loopContextPrompt, maybeParseJson, renderRuntimeContextPrompt, resolveConfiguredModelSelection, } from "@polpo-ai/core";
8
+ import { agentMemoryScope, compactIfNeeded, createRuntimePromptContextSegment, loopContextPrompt, maybeParseJson, normalizeRuntimeContextTrustMode, protectRuntimeToolResultMessages, renderRuntimePromptContextSegment, renderRuntimeToolResult, renderRuntimeContextPrompt, resolveConfiguredModelSelection, } from "@polpo-ai/core";
9
9
  import { generateText } from "ai";
10
10
  import { runModelPolicyTurn } from "@polpo-ai/llm";
11
11
  import { appendModelResponseMessages } from "./message-mapping.js";
12
12
  import { emitFileChanged, indexToolResultsByCallId, invalidModelToolCallEvent, isInvalidModelToolCall, providerToolCallEvent, toAITools, toAIToolChoice, } from "./tool-mapping.js";
13
+ import { createGuardedCompletionToolExecutor } from "./tool-guardrails.js";
13
14
  export const MAX_TURNS = 20;
14
15
  export function completionResolvedModelInfo(model) {
15
16
  return {
@@ -68,7 +69,7 @@ export function buildSummarizeFn(m, providerOptions) {
68
69
  return result.text.trim();
69
70
  };
70
71
  }
71
- export async function buildRuntimeAgentPrompt(deps, agentConfig, extraSystemParts, loopContextPart, runtimeContext) {
72
+ export async function buildRuntimeAgentPrompt(deps, agentConfig, extraSystemParts, loopContextPart, contextTrust = "off", runtimeContext) {
72
73
  let fullSystemPrompt;
73
74
  if (deps.buildRuntimePrompt) {
74
75
  fullSystemPrompt = await deps.buildRuntimePrompt(agentConfig, {
@@ -96,7 +97,14 @@ export async function buildRuntimeAgentPrompt(deps, agentConfig, extraSystemPart
96
97
  const memoryStore = deps.getMemoryStore();
97
98
  const agentMemory = await memoryStore?.get(agentMemoryScope(agentConfig.name));
98
99
  if (agentMemory) {
99
- fullSystemPrompt += `\n\n## Your persistent memory\n\n${agentMemory}`;
100
+ fullSystemPrompt += contextTrust === "enforce"
101
+ ? `\n\n${renderRuntimePromptContextSegment(createRuntimePromptContextSegment({
102
+ kind: "memory.agent",
103
+ sourceId: agentConfig.name,
104
+ trust: "untrusted",
105
+ content: agentMemory,
106
+ }))}`
107
+ : `\n\n## Your persistent memory\n\n${agentMemory}`;
100
108
  }
101
109
  }
102
110
  const runtimeContextPrompt = renderRuntimeContextPrompt(runtimeContext);
@@ -108,20 +116,36 @@ export async function buildRuntimeAgentPrompt(deps, agentConfig, extraSystemPart
108
116
  export async function runAgentStepCompletion(options) {
109
117
  const { deps, agentConfig, aiMessages, extraSystemParts, context, stepName, runtimeContext, onToolCall, } = options;
110
118
  const settings = deps.getConfig()?.settings;
119
+ const contextTrust = normalizeRuntimeContextTrustMode(options.contextTrust ?? settings?.contextTrust);
111
120
  const reasoning = agentConfig.reasoning ?? settings?.reasoning;
112
121
  const initialResolved = await deps.resolveAgentModel(agentConfigForModelPrimary(agentConfig, settings), reasoning);
113
122
  let m = initialResolved.model;
114
123
  let providerOpts = initialResolved.providerOptions;
115
124
  const modelSelection = modelSelectionForAgent(agentConfig, modelSelectionForResolvedModel(m), settings);
116
125
  const resolvedTools = await deps.resolveAgentTools(agentConfig);
126
+ const executeTool = createGuardedCompletionToolExecutor({
127
+ executor: resolvedTools.executor,
128
+ tools: resolvedTools.tools,
129
+ middleware: deps.runToolMiddleware,
130
+ context: {
131
+ planId: options.runtimePlan?.id,
132
+ surface: options.runtimePlan?.surface,
133
+ source: "loop-step",
134
+ agent: agentConfig.name,
135
+ runId: options.runId,
136
+ sessionId: options.sessionId,
137
+ },
138
+ });
117
139
  const aiTools = {
118
140
  ...toAITools(resolvedTools.tools),
119
141
  ...(resolvedTools.extraAiTools ?? {}),
120
142
  };
121
143
  const providerToolNames = new Set(Object.keys(resolvedTools.extraAiTools ?? {}));
122
144
  const modelToolChoice = toAIToolChoice(agentConfig.toolChoice);
123
- const fullSystemPrompt = await buildRuntimeAgentPrompt(deps, agentConfig, extraSystemParts, loopContextPrompt(stepName, context), runtimeContext);
124
- const messages = [...aiMessages];
145
+ const fullSystemPrompt = await buildRuntimeAgentPrompt(deps, agentConfig, extraSystemParts, loopContextPrompt(stepName, context, contextTrust), contextTrust, runtimeContext);
146
+ const messages = contextTrust === "enforce"
147
+ ? protectRuntimeToolResultMessages(aiMessages)
148
+ : [...aiMessages];
125
149
  let finalText = "";
126
150
  let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
127
151
  let lastProviderMetadata;
@@ -140,7 +164,10 @@ export async function runAgentStepCompletion(options) {
140
164
  mode: "chat",
141
165
  });
142
166
  if (compactionResult.compacted) {
143
- messages.splice(0, messages.length, ...compactionResult.messages);
167
+ const compacted = contextTrust === "enforce"
168
+ ? protectRuntimeToolResultMessages(compactionResult.messages)
169
+ : compactionResult.messages;
170
+ messages.splice(0, messages.length, ...compacted);
144
171
  }
145
172
  const toolCallNames = new Map();
146
173
  const toolCallArgsText = new Map();
@@ -191,7 +218,7 @@ export async function runAgentStepCompletion(options) {
191
218
  }
192
219
  totalUsage = addUsage(totalUsage, turnResult.usage);
193
220
  lastProviderMetadata = turnResult.providerMetadata;
194
- await appendModelResponseMessages(messages, turnResult, turnText, turnResult.toolCalls);
221
+ await appendModelResponseMessages(messages, turnResult, turnText, turnResult.toolCalls, contextTrust);
195
222
  finalText += turnText;
196
223
  if (turnResult.toolCalls.length === 0)
197
224
  break;
@@ -218,7 +245,10 @@ export async function runAgentStepCompletion(options) {
218
245
  arguments: callArgs,
219
246
  state: "calling",
220
247
  });
221
- const result = await resolvedTools.executor(call.toolName, callArgs);
248
+ const result = await executeTool(call.toolName, callArgs, {
249
+ callId: call.toolCallId,
250
+ signal: options.signal,
251
+ });
222
252
  const isError = result.startsWith("Error:");
223
253
  emitFileChanged(call.toolName, callArgs, result, deps.emit);
224
254
  const event = {
@@ -237,8 +267,18 @@ export async function runAgentStepCompletion(options) {
237
267
  toolCallId: call.toolCallId,
238
268
  toolName: call.toolName,
239
269
  output: isError
240
- ? { type: "error-text", value: result }
241
- : { type: "text", value: result },
270
+ ? {
271
+ type: "error-text",
272
+ value: contextTrust === "enforce"
273
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
274
+ : result,
275
+ }
276
+ : {
277
+ type: "text",
278
+ value: contextTrust === "enforce"
279
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
280
+ : result,
281
+ },
242
282
  }],
243
283
  });
244
284
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-step-runner.js","sourceRoot":"","sources":["../../../src/routes/completions/agent-step-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-step-runner.js","sourceRoot":"","sources":["../../../src/routes/completions/agent-step-runner.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,11 @@
6
6
  * interactive orchestrator tools, provider-executed tools, context
7
7
  * compaction, session persistence, and metering callbacks.
8
8
  */
9
- import { type ModelSelection, type ResolvedExecutionRoute, type RuntimePlan, type RuntimeContextResolution } from "@polpo-ai/core";
9
+ import { type ModelSelection, type RuntimeContextTrustMode, type ResolvedExecutionRoute, type RuntimePlan, type RuntimeContextResolution } from "@polpo-ai/core";
10
10
  import type { RuntimeSandboxOptions } from "@polpo-ai/core";
11
11
  import type { CompletionRouteDeps } from "../completions.js";
12
12
  import { type ResolvedModelInfo } from "./agent-step-runner.js";
13
+ import type { CompletionToolExecutor } from "./tool-guardrails.js";
13
14
  /** Resolved execution context for a standard (non-loop) chat completion. */
14
15
  export interface ChatCompletionExecution {
15
16
  deps: CompletionRouteDeps;
@@ -30,7 +31,7 @@ export interface ChatCompletionExecution {
30
31
  modelSelection?: ModelSelection;
31
32
  modelToolChoice?: unknown;
32
33
  effectiveTools: any[];
33
- effectiveToolExecutor: (name: string, args: Record<string, unknown>) => Promise<string>;
34
+ effectiveToolExecutor: CompletionToolExecutor;
34
35
  /**
35
36
  * Provider-executed tools the host wants merged into the AI SDK tool
36
37
  * palette as-is. Polpo never invokes these locally — the SDK / model
@@ -44,6 +45,8 @@ export interface ChatCompletionExecution {
44
45
  sessionId: string | null;
45
46
  /** Frozen, secret-free runtime decision emitted before provider/tool resolution. */
46
47
  runtimePlan?: RuntimePlan;
48
+ /** Explicit, host-resolved context-trust mode for this conversation turn. */
49
+ contextTrust?: RuntimeContextTrustMode;
47
50
  /** Structured snapshot used to assemble fullSystemPrompt for this turn. */
48
51
  runtimeContext?: RuntimeContextResolution;
49
52
  /** Validated direct-or-loop decision for audit and downstream propagation. */
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/chat-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAehC,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAC3F,YAAY,EAAE,MAAM,CAAC;IACrB;2EACuE;IACvE,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,CAAC,EAAE,iBAAiB,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,GAAG,EAAE,CAAC;IACtB,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oFAAoF;IACpF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,8EAA8E;IAC9E,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAmBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,uBAAuB,GAAG,GAAG,CA2a/E;AAED,oEAAoE;AACpE,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,CAgVvG"}
1
+ {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../../src/routes/completions/chat-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAoBhC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAMnE,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAC3F,YAAY,EAAE,MAAM,CAAC;IACrB;2EACuE;IACvE,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,CAAC,EAAE,iBAAiB,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,GAAG,EAAE,CAAC;IACtB,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oFAAoF;IACpF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,8EAA8E;IAC9E,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAmBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,uBAAuB,GAAG,GAAG,CA+d/E;AAED,oEAAoE;AACpE,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,CA4XvG"}
@@ -7,12 +7,13 @@
7
7
  * compaction, session persistence, and metering callbacks.
8
8
  */
9
9
  import { streamSSE } from "hono/streaming";
10
- import { compactIfNeeded, } from "@polpo-ai/core";
10
+ import { compactIfNeeded, renderRuntimeToolResult, } from "@polpo-ai/core";
11
11
  import { runModelPolicyTurn } from "@polpo-ai/llm";
12
12
  import { agentConfigForModelAttempt, buildSummarizeFn, completionResolvedModelInfo, MAX_TURNS, modelSelectionForResolvedModel, } from "./agent-step-runner.js";
13
13
  import { appendModelResponseMessages } from "./message-mapping.js";
14
- import { completionResponse, modelErrorEnvelope, modelNotFoundEnvelope, sseChunk } from "./sse.js";
14
+ import { completionResponse, guardrailErrorEnvelope, modelErrorEnvelope, modelNotFoundEnvelope, sseChunk, } from "./sse.js";
15
15
  import { CLIENT_SIDE_TOOLS, CLIENT_SIDE_TOOL_NAMES, emitFileChanged, indexToolResultsByCallId, invalidModelToolCallEvent, isInvalidModelToolCall, persistAssistantMessage, recordProviderToolCall, toAITools, } from "./tool-mapping.js";
16
+ import { applyCompletionOutputPolicy, streamingOutputPolicyMode, } from "./output-guardrails.js";
16
17
  /**
17
18
  * Merge the effective tool palette for the LLM.
18
19
  *
@@ -37,6 +38,7 @@ export function streamChatCompletion(c, exec) {
37
38
  let providerOpts = primaryProviderOpts;
38
39
  const modelSelection = exec.modelSelection ?? modelSelectionForResolvedModel(primaryModel);
39
40
  const reasoning = exec.agentConfig?.reasoning ?? deps.getConfig()?.settings?.reasoning;
41
+ const outputMode = streamingOutputPolicyMode(deps.runOutputPolicy);
40
42
  return streamSSE(c, async (stream) => {
41
43
  // Abort controller: cancelled when the client disconnects (closes SSE)
42
44
  const abortController = new AbortController();
@@ -68,6 +70,24 @@ export function streamChatCompletion(c, exec) {
68
70
  let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
69
71
  const toolCallsAccum = [];
70
72
  let lastProviderMetadata;
73
+ let outputPolicyApplied = false;
74
+ const finalizeOutput = async () => {
75
+ if (outputPolicyApplied)
76
+ return;
77
+ finalText = await applyCompletionOutputPolicy({
78
+ outputPolicy: deps.runOutputPolicy,
79
+ text: finalText,
80
+ mode: outputMode === "buffer" ? "enforce" : "audit",
81
+ runtimePlan: exec.runtimePlan,
82
+ agent: body.agent,
83
+ sessionId,
84
+ signal: abortController.signal,
85
+ });
86
+ outputPolicyApplied = true;
87
+ if (outputMode === "buffer" && finalText) {
88
+ await stream.writeSSE({ data: sseChunk(completionId, { content: finalText }) });
89
+ }
90
+ };
71
91
  try {
72
92
  for (let turn = 0; turn < MAX_TURNS; turn++) {
73
93
  // Bail out early if the client already disconnected
@@ -140,7 +160,9 @@ export function streamChatCompletion(c, exec) {
140
160
  else if (event.type === "text-delta") {
141
161
  turnText += event.text;
142
162
  finalText += event.text;
143
- await stream.writeSSE({ data: sseChunk(completionId, { content: event.text }) });
163
+ if (outputMode !== "buffer") {
164
+ await stream.writeSSE({ data: sseChunk(completionId, { content: event.text }) });
165
+ }
144
166
  }
145
167
  else if (event.type === "tool-input-start") {
146
168
  // Emit early "preparing" signal — the LLM has started generating a tool call
@@ -182,7 +204,9 @@ export function streamChatCompletion(c, exec) {
182
204
  }
183
205
  if (streamError) {
184
206
  finalText += `\n\nError: ${streamError}`;
185
- await stream.writeSSE({ data: sseChunk(completionId, { content: `\n\nError: ${streamError}` }) });
207
+ if (outputMode !== "buffer") {
208
+ await stream.writeSSE({ data: sseChunk(completionId, { content: `\n\nError: ${streamError}` }) });
209
+ }
186
210
  break;
187
211
  }
188
212
  const toolCalls = result.toolCalls;
@@ -198,7 +222,7 @@ export function streamChatCompletion(c, exec) {
198
222
  totalTokens: (totalUsage.totalTokens ?? 0) + (usage.totalTokens ?? 0),
199
223
  };
200
224
  lastProviderMetadata = result.providerMetadata;
201
- await appendModelResponseMessages(messages, result, turnText, toolCalls);
225
+ await appendModelResponseMessages(messages, result, turnText, toolCalls, exec.contextTrust ?? "off");
202
226
  if (toolCalls.length === 0)
203
227
  break;
204
228
  const dispatchableToolCalls = toolCalls.filter((call) => !isInvalidModelToolCall(call));
@@ -223,6 +247,7 @@ export function streamChatCompletion(c, exec) {
223
247
  arguments: clientSideCall.input,
224
248
  state: "interrupted",
225
249
  });
250
+ await finalizeOutput();
226
251
  // Send as standard OpenAI tool_calls finish reason
227
252
  await stream.writeSSE({
228
253
  data: JSON.stringify({
@@ -259,6 +284,7 @@ export function streamChatCompletion(c, exec) {
259
284
  arguments: interactiveCall.input,
260
285
  state: "interrupted",
261
286
  });
287
+ await finalizeOutput();
262
288
  if (interactiveCall.toolName === "ask_user") {
263
289
  const questions = interactiveCall.input?.questions ?? [];
264
290
  await stream.writeSSE({
@@ -356,7 +382,10 @@ export function streamChatCompletion(c, exec) {
356
382
  tool_call: { id: call.toolCallId, name: call.toolName, arguments: callArgs, state: "calling" },
357
383
  }),
358
384
  });
359
- const result = await effectiveToolExecutor(call.toolName, callArgs);
385
+ const result = await effectiveToolExecutor(call.toolName, callArgs, {
386
+ callId: call.toolCallId,
387
+ signal: abortController.signal,
388
+ });
360
389
  const isError = result.startsWith("Error:");
361
390
  emitFileChanged(call.toolName, callArgs, result, deps.emit);
362
391
  // Accumulate for persistence
@@ -383,13 +412,24 @@ export function streamChatCompletion(c, exec) {
383
412
  toolCallId: call.toolCallId,
384
413
  toolName: call.toolName,
385
414
  output: isError
386
- ? { type: "error-text", value: result }
387
- : { type: "text", value: result },
415
+ ? {
416
+ type: "error-text",
417
+ value: exec.contextTrust === "enforce"
418
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
419
+ : result,
420
+ }
421
+ : {
422
+ type: "text",
423
+ value: exec.contextTrust === "enforce"
424
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
425
+ : result,
426
+ },
388
427
  }],
389
428
  });
390
429
  }
391
430
  }
392
431
  if (!abortController.signal.aborted) {
432
+ await finalizeOutput();
393
433
  await stream.writeSSE({ data: sseChunk(completionId, {}, "stop") });
394
434
  await stream.writeSSE({ data: "[DONE]" });
395
435
  }
@@ -403,8 +443,17 @@ export function streamChatCompletion(c, exec) {
403
443
  // Friendly model_not_found surface — gateway returns 404 for
404
444
  // renamed/deprecated SKUs (e.g. xai/grok-4-fast after the 4.1
405
445
  // rename). Without this catch the error propagates as a 500.
446
+ const guardrailError = guardrailErrorEnvelope(err);
406
447
  const notFound = modelNotFoundEnvelope(err, m?.id, body.agent);
407
- if (notFound) {
448
+ if (guardrailError) {
449
+ finalText = guardrailError.message;
450
+ outputPolicyApplied = true;
451
+ await stream.writeSSE({
452
+ data: sseChunk(completionId, {}, "stop", { error: guardrailError }),
453
+ });
454
+ await stream.writeSSE({ data: "[DONE]" });
455
+ }
456
+ else if (notFound) {
408
457
  await stream.writeSSE({
409
458
  data: sseChunk(completionId, {}, "stop", { error: notFound }),
410
459
  });
@@ -413,7 +462,7 @@ export function streamChatCompletion(c, exec) {
413
462
  else {
414
463
  const error = modelErrorEnvelope(err);
415
464
  const text = `Model request failed: ${error.message}`;
416
- finalText += text;
465
+ finalText = outputMode === "buffer" ? text : finalText + text;
417
466
  await stream.writeSSE({ data: sseChunk(completionId, { content: text }) });
418
467
  await stream.writeSSE({ data: sseChunk(completionId, {}, "stop", { error }) });
419
468
  await stream.writeSSE({ data: "[DONE]" });
@@ -466,6 +515,20 @@ export async function runNonStreamingChatCompletion(c, exec) {
466
515
  let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
467
516
  const toolCallsAccum = [];
468
517
  let lastProviderMetadata;
518
+ let outputPolicyApplied = false;
519
+ const finalizeOutput = async () => {
520
+ if (outputPolicyApplied)
521
+ return;
522
+ finalText = await applyCompletionOutputPolicy({
523
+ outputPolicy: deps.runOutputPolicy,
524
+ text: finalText,
525
+ mode: "enforce",
526
+ runtimePlan: exec.runtimePlan,
527
+ agent: body.agent,
528
+ sessionId,
529
+ });
530
+ outputPolicyApplied = true;
531
+ };
469
532
  try {
470
533
  for (let turn = 0; turn < MAX_TURNS; turn++) {
471
534
  // Compact context if approaching the model's context window limit.
@@ -518,7 +581,7 @@ export async function runNonStreamingChatCompletion(c, exec) {
518
581
  totalTokens: (totalUsage.totalTokens ?? 0) + (usage.totalTokens ?? 0),
519
582
  };
520
583
  lastProviderMetadata = turnResult.providerMetadata;
521
- await appendModelResponseMessages(messages, turnResult, turnText, turnResult.toolCalls);
584
+ await appendModelResponseMessages(messages, turnResult, turnText, turnResult.toolCalls, exec.contextTrust ?? "off");
522
585
  finalText += turnText;
523
586
  const toolCalls = turnResult.toolCalls;
524
587
  if (toolCalls.length === 0)
@@ -538,6 +601,7 @@ export async function runNonStreamingChatCompletion(c, exec) {
538
601
  arguments: clientSideCall.input,
539
602
  state: "interrupted",
540
603
  });
604
+ await finalizeOutput();
541
605
  return c.json({
542
606
  id: completionId,
543
607
  object: "chat.completion",
@@ -576,6 +640,7 @@ export async function runNonStreamingChatCompletion(c, exec) {
576
640
  arguments: interactiveCall.input,
577
641
  state: "interrupted",
578
642
  });
643
+ await finalizeOutput();
579
644
  const baseResponse = {
580
645
  id: completionId,
581
646
  object: "chat.completion",
@@ -700,7 +765,10 @@ export async function runNonStreamingChatCompletion(c, exec) {
700
765
  recordProviderToolCall(toolCallsAccum, call, providerToolResults);
701
766
  continue;
702
767
  }
703
- const result = await effectiveToolExecutor(call.toolName, callArgs);
768
+ const result = await effectiveToolExecutor(call.toolName, callArgs, {
769
+ callId: call.toolCallId,
770
+ signal: c.req.raw.signal,
771
+ });
704
772
  const isError = result.startsWith("Error:");
705
773
  emitFileChanged(call.toolName, callArgs, result, deps.emit);
706
774
  // Accumulate for persistence
@@ -719,18 +787,35 @@ export async function runNonStreamingChatCompletion(c, exec) {
719
787
  toolCallId: call.toolCallId,
720
788
  toolName: call.toolName,
721
789
  output: isError
722
- ? { type: "error-text", value: result }
723
- : { type: "text", value: result },
790
+ ? {
791
+ type: "error-text",
792
+ value: exec.contextTrust === "enforce"
793
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
794
+ : result,
795
+ }
796
+ : {
797
+ type: "text",
798
+ value: exec.contextTrust === "enforce"
799
+ ? renderRuntimeToolResult(call.toolName, call.toolCallId, result)
800
+ : result,
801
+ },
724
802
  }],
725
803
  });
726
804
  }
727
805
  }
806
+ await finalizeOutput();
728
807
  return c.json(completionResponse(completionId, finalText, totalUsage));
729
808
  }
730
809
  catch (err) {
731
810
  // Friendly model_not_found surface — gateway returns 404 for
732
811
  // renamed/deprecated SKUs (e.g. xai/grok-4-fast after the 4.1
733
812
  // rename). Without this catch the error propagates as a 500.
813
+ const guardrailError = guardrailErrorEnvelope(err);
814
+ if (guardrailError) {
815
+ finalText = guardrailError.message;
816
+ outputPolicyApplied = true;
817
+ return c.json({ error: guardrailError }, (guardrailError.code === "guardrail_approval_required" ? 409 : 403));
818
+ }
734
819
  const notFound = modelNotFoundEnvelope(err, m?.id, body.agent);
735
820
  if (notFound) {
736
821
  return c.json({ error: notFound }, 400);