@caupulican/pi-ai 0.90.12 → 0.91.2
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/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js +4 -4
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/dist/providers/openai-codex-responses.js +0 -6
- package/dist/providers/openai-codex-responses.js.map +1 -1
- package/dist/providers/openai-completions.d.ts.map +1 -1
- package/dist/providers/openai-completions.js +4 -4
- package/dist/providers/openai-completions.js.map +1 -1
- package/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/dist/providers/openai-responses-shared.js +297 -190
- package/dist/providers/openai-responses-shared.js.map +1 -1
- package/dist/providers/provider-runtime.d.ts +10 -1
- package/dist/providers/provider-runtime.d.ts.map +1 -1
- package/dist/providers/provider-runtime.js +22 -3
- package/dist/providers/provider-runtime.js.map +1 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +28 -1
- package/dist/stream.js.map +1 -1
- package/dist/utils/event-stream.d.ts +8 -0
- package/dist/utils/event-stream.d.ts.map +1 -1
- package/dist/utils/event-stream.js +58 -3
- package/dist/utils/event-stream.js.map +1 -1
- package/dist/utils/tool-repair/registry.d.ts +18 -0
- package/dist/utils/tool-repair/registry.d.ts.map +1 -1
- package/dist/utils/tool-repair/registry.js +29 -0
- package/dist/utils/tool-repair/registry.js.map +1 -1
- package/package.json +1 -1
package/dist/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import \"./providers/register-builtins.ts\";\n\nimport { getApiProvider } from \"./api-registry.ts\";\nimport { getEnvApiKey, getEnvAuthHeaders } from \"./env-api-keys.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tProviderStreamOptions,\n\tSimpleStreamOptions,\n\tStreamOptions,\n\tTextToolProtocolParseEvent,\n} from \"./types.ts\";\nimport { combineAbortSignals } from \"./utils/abort-signals.ts\";\nimport { AssistantMessageEventStream } from \"./utils/event-stream.ts\";\nimport {\n\tgenerateTextToolProtocolPrimer,\n\tnormalizeTextToolProtocolOptions,\n\tparseTextToolCalls,\n} from \"./utils/tool-repair/text-protocol.ts\";\nimport { TextProtocolLiveFilter } from \"./utils/tool-repair/text-protocol-live-filter.ts\";\n\nexport { getEnvApiKey } from \"./env-api-keys.ts\";\n\nlet textToolProtocolBatchSequence = 0;\n\n// Once a complete call exists, a short bounded suffix preserves adjacent parallel envelopes while\n// preventing a small model from spending its remaining output budget on unusable trailing prose.\n// Envelope bodies themselves are never counted, so large write/edit arguments remain unbounded here.\nconst TEXT_TOOL_PROTOCOL_TRAILING_PROSE_LIMIT = 128;\n\nfunction nextTextToolProtocolCallIdPrefix(): string {\n\ttextToolProtocolBatchSequence =\n\t\ttextToolProtocolBatchSequence >= Number.MAX_SAFE_INTEGER ? 1 : textToolProtocolBatchSequence + 1;\n\treturn `text-tool-${textToolProtocolBatchSequence}`;\n}\n\nfunction hasExplicitApiKey(apiKey: string | undefined): apiKey is string {\n\treturn typeof apiKey === \"string\" && apiKey.trim().length > 0;\n}\n\nfunction hasAuthorizationHeader(headers: Record<string, string> | undefined): boolean {\n\treturn Object.entries(headers ?? {}).some(\n\t\t([name, value]) => name.toLowerCase() === \"authorization\" && value.trim().length > 0,\n\t);\n}\n\nfunction withEnvAuth<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\toptions: TOptions | undefined,\n): TOptions | undefined {\n\tif (hasExplicitApiKey(options?.apiKey)) return options;\n\tif (hasAuthorizationHeader(options?.headers)) return options;\n\tconst envHeaders = getEnvAuthHeaders(model.provider);\n\tif (envHeaders) return { ...options, headers: { ...envHeaders, ...options?.headers } } as TOptions;\n\tconst apiKey = getEnvApiKey(model.provider);\n\tif (!apiKey) return options;\n\treturn { ...options, apiKey } as TOptions;\n}\n\nfunction withTextToolProtocolContext(context: Context, options: StreamOptions | undefined): Context {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tif (!protocolOptions || !context.tools?.length) return context;\n\tconst primer = generateTextToolProtocolPrimer(context.tools, protocolOptions);\n\tif (!primer) return context;\n\tconst { tools: _tools, ...providerContext } = context;\n\tconst messages = context.messages.length\n\t\t? [\n\t\t\t\t{\n\t\t\t\t\trole: \"user\" as const,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: \"Apply system tool protocol; never answer this message.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttimestamp: 0,\n\t\t\t\t},\n\t\t\t\t...context.messages,\n\t\t\t]\n\t\t: context.messages;\n\treturn {\n\t\t...providerContext,\n\t\tsystemPrompt: context.systemPrompt ? `${context.systemPrompt}\\n\\n${primer}` : primer,\n\t\tmessages,\n\t};\n}\n\n/**\n * Immutable provider-input materialization. `context` is the exact Context object passed to the\n * provider transport; `sourceContext` retains native tool definitions only for response parsing.\n */\nexport interface MaterializedProviderRequest {\n\tcontext: Context;\n\tsourceContext: Context;\n\tusesTextToolProtocol: boolean;\n}\n\n/**\n * Resolve provider-visible context once, including the text-only tool primer and synthetic guard\n * message. Callers may budget/admit `result.context`, then send that same object through\n * {@link startMaterializedProviderStream} without re-rendering it.\n */\nexport function materializeProviderRequest(\n\tcontext: Context,\n\toptions: StreamOptions | undefined,\n): MaterializedProviderRequest {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tconst usesTextToolProtocol = protocolOptions !== undefined && Boolean(context.tools?.length);\n\treturn {\n\t\tcontext: usesTextToolProtocol ? withTextToolProtocolContext(context, options) : context,\n\t\tsourceContext: context,\n\t\tusesTextToolProtocol,\n\t};\n}\n\nasync function notifyTextToolProtocolParse(\n\toptions: StreamOptions | undefined,\n\tevent: TextToolProtocolParseEvent,\n): Promise<void> {\n\ttry {\n\t\tawait options?.onTextToolProtocolParse?.(event);\n\t} catch {\n\t\t// Parse telemetry must not change provider stream semantics.\n\t}\n}\n\n// Rewrites any text or thinking block whose revealed prose is still behind its true streamed\n// content so a forwarded event's `partial` snapshot never exposes held-back envelope markup. Some\n// OpenAI-compatible local servers classify the model's entire phone envelope as reasoning.\nfunction redactHeldProtocolContent(\n\tpartial: AssistantMessage,\n\trevealedContent: ReadonlyMap<number, string>,\n): AssistantMessage {\n\tif (revealedContent.size === 0) return partial;\n\tlet changed = false;\n\tconst content = partial.content.map((block, index) => {\n\t\tconst revealed = revealedContent.get(index);\n\t\tif (revealed === undefined) return block;\n\t\tif (block.type === \"text\" && block.text !== revealed) {\n\t\t\tchanged = true;\n\t\t\treturn { ...block, text: revealed };\n\t\t}\n\t\tif (block.type !== \"thinking\" || block.thinking === revealed) return block;\n\t\tchanged = true;\n\t\treturn { ...block, thinking: revealed };\n\t});\n\treturn changed ? { ...partial, content } : partial;\n}\n\n// Forwards one non-\"done\" stream event, holding back streamed text that falls inside (or\n// might still grow into) a text-protocol envelope so raw markup like \"<pi:call\" never reaches\n// a live consumer. Prose outside envelopes is forwarded as soon as it is provably safe; the\n// \"done\" event swap remains the sole authority for final content.\nfunction forwardTextProtocolStreamEvent(\n\twrapped: AssistantMessageEventStream,\n\tevent: Exclude<AssistantMessageEvent, { type: \"done\" }>,\n\trevealedContent: Map<number, string>,\n\tliveFilters: Map<number, TextProtocolLiveFilter>,\n): void {\n\tif (event.type === \"error\") {\n\t\twrapped.push(event);\n\t\treturn;\n\t}\n\tif (event.type === \"text_start\" || event.type === \"thinking_start\") {\n\t\trevealedContent.set(event.contentIndex, \"\");\n\t\tliveFilters.set(event.contentIndex, new TextProtocolLiveFilter());\n\t\twrapped.push({ ...event, partial: redactHeldProtocolContent(event.partial, revealedContent) });\n\t\treturn;\n\t}\n\tif (event.type === \"text_delta\" || event.type === \"thinking_delta\") {\n\t\tconst flushed = revealedContent.get(event.contentIndex) ?? \"\";\n\t\tconst filter = liveFilters.get(event.contentIndex) ?? new TextProtocolLiveFilter();\n\t\tliveFilters.set(event.contentIndex, filter);\n\t\tconst visible = filter.advance(event.delta);\n\t\tif (visible.length <= flushed.length) return; // held: possibly-envelope text never streams live\n\t\trevealedContent.set(event.contentIndex, visible);\n\t\twrapped.push({\n\t\t\t...event,\n\t\t\tdelta: visible.slice(flushed.length),\n\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t});\n\t\treturn;\n\t}\n\tif (event.type === \"text_end\" || event.type === \"thinking_end\") {\n\t\tconst flushed = revealedContent.get(event.contentIndex) ?? \"\";\n\t\tconst filter = liveFilters.get(event.contentIndex) ?? new TextProtocolLiveFilter();\n\t\tliveFilters.set(event.contentIndex, filter);\n\t\tconst visible = filter.finish(event.content);\n\t\tif (visible.length > flushed.length) {\n\t\t\t// Catch up any newly-provable-safe tail (e.g. a suspected opener prefix that never\n\t\t\t// completed) so the deltas actually forwarded still sum to what text_end reports.\n\t\t\trevealedContent.set(event.contentIndex, visible);\n\t\t\twrapped.push(\n\t\t\t\tevent.type === \"text_end\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\t\t\tdelta: visible.slice(flushed.length),\n\t\t\t\t\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\t\t\tdelta: visible.slice(flushed.length),\n\t\t\t\t\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst finalVisible = revealedContent.get(event.contentIndex) ?? visible;\n\t\twrapped.push({\n\t\t\t...event,\n\t\t\tcontent: finalVisible,\n\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t});\n\t\treturn;\n\t}\n\twrapped.push({ ...event, partial: redactHeldProtocolContent(event.partial, revealedContent) });\n}\n\ninterface TextToolProtocolMessageProjection {\n\tmessage: AssistantMessage;\n\tcallCount: number;\n\ttextLength: number;\n\tfailure?: TextToolProtocolParseEvent[\"reason\"];\n\tprotocolAttempted: boolean;\n}\n\nfunction projectTextToolProtocolMessage(\n\tmessage: AssistantMessage,\n\tmodel: Model<Api>,\n\ttools: readonly NonNullable<Context[\"tools\"]>[number][],\n\tcallIdPrefix: string,\n): TextToolProtocolMessageProjection {\n\tconst content: AssistantMessage[\"content\"] = [];\n\tlet callCount = 0;\n\tlet textLength = 0;\n\tlet failure: TextToolProtocolParseEvent[\"reason\"] | undefined;\n\tlet protocolAttempted = false;\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"text\" && (block.type !== \"thinking\" || block.redacted)) {\n\t\t\tcontent.push(block);\n\t\t\tcontinue;\n\t\t}\n\t\tconst protocolText = block.type === \"text\" ? block.text : block.thinking;\n\t\ttextLength += protocolText.length;\n\t\tconst parsed = parseTextToolCalls(protocolText, tools, {\n\t\t\tcallIdPrefix,\n\t\t\tcallIndexOffset: callCount,\n\t\t});\n\t\tprotocolAttempted ||= parsed.attempted;\n\t\tif (parsed.calls.length === 0) {\n\t\t\tif (parsed.failure) failure ??= parsed.failure;\n\t\t\tcontent.push(block);\n\t\t\tcontinue;\n\t\t}\n\t\tcallCount += parsed.calls.length;\n\t\tif (parsed.text) {\n\t\t\tcontent.push(block.type === \"text\" ? { ...block, text: parsed.text } : { ...block, thinking: parsed.text });\n\t\t}\n\t\tcontent.push(...parsed.calls);\n\t}\n\tif (callCount > 0) {\n\t\treturn {\n\t\t\tmessage: { ...message, content, stopReason: \"toolUse\" },\n\t\t\tcallCount,\n\t\t\ttextLength,\n\t\t\tfailure,\n\t\t\tprotocolAttempted,\n\t\t};\n\t}\n\tconst hasVisibleText = message.content.some((block) => block.type === \"text\" && block.text.trim().length > 0);\n\tconst promoteThinking =\n\t\tmodel.reasoning === false &&\n\t\t!protocolAttempted &&\n\t\t!hasVisibleText &&\n\t\tmessage.content.some((block) => block.type === \"thinking\" && !block.redacted);\n\treturn {\n\t\tmessage: promoteThinking\n\t\t\t? {\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: message.content.flatMap((block) => {\n\t\t\t\t\t\tif (block.type === \"thinking\" && !block.redacted) {\n\t\t\t\t\t\t\treturn [{ type: \"text\" as const, text: block.thinking }];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (block.type === \"text\" && block.text.length === 0) return [];\n\t\t\t\t\t\treturn [block];\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t: message,\n\t\tcallCount,\n\t\ttextLength,\n\t\tfailure,\n\t\tprotocolAttempted,\n\t};\n}\n\ninterface TextToolProtocolStreamControl {\n\tabortController: AbortController;\n\tcleanup(): void;\n}\n\nfunction withTextToolProtocolResult(\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions | undefined,\n\tcontrol?: TextToolProtocolStreamControl,\n): AssistantMessageEventStream {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tconst tools = context.tools ?? [];\n\tif (!protocolOptions || tools.length === 0) return stream;\n\tconst wrapped = new AssistantMessageEventStream();\n\tconst callIdPrefix = nextTextToolProtocolCallIdPrefix();\n\tvoid (async () => {\n\t\tconst revealedContent = new Map<number, string>();\n\t\tconst liveFilters = new Map<number, TextProtocolLiveFilter>();\n\t\tlet completedEnvelopeCount = 0;\n\t\tlet trailingProseLength = 0;\n\t\tlet completedProjection: TextToolProtocolMessageProjection | undefined;\n\t\ttry {\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.type !== \"done\") {\n\t\t\t\t\tif (event.type === \"text_delta\" || event.type === \"thinking_delta\") {\n\t\t\t\t\t\tif (completedProjection) trailingProseLength += event.delta.length;\n\t\t\t\t\t}\n\t\t\t\t\tforwardTextProtocolStreamEvent(wrapped, event, revealedContent, liveFilters);\n\t\t\t\t\tconst observedEnvelopeCount = [...liveFilters.values()].reduce(\n\t\t\t\t\t\t(total, filter) => total + filter.completedEnvelopeCount,\n\t\t\t\t\t\t0,\n\t\t\t\t\t);\n\t\t\t\t\tif (observedEnvelopeCount > completedEnvelopeCount && \"partial\" in event) {\n\t\t\t\t\t\tcompletedEnvelopeCount = observedEnvelopeCount;\n\t\t\t\t\t\tconst projection = projectTextToolProtocolMessage(event.partial, model, tools, callIdPrefix);\n\t\t\t\t\t\tif (projection.callCount > 0) {\n\t\t\t\t\t\t\tcompletedProjection = projection;\n\t\t\t\t\t\t\ttrailingProseLength = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst holdingPotentialEnvelope = [...liveFilters.values()].some(\n\t\t\t\t\t\t(filter) => filter.holdingPotentialEnvelope,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcompletedProjection &&\n\t\t\t\t\t\ttrailingProseLength > TEXT_TOOL_PROTOCOL_TRAILING_PROSE_LIMIT &&\n\t\t\t\t\t\t!holdingPotentialEnvelope &&\n\t\t\t\t\t\tcontrol\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontrol.abortController.abort(\"text-tool-protocol-call-complete\");\n\t\t\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\t\t\tstatus: \"parsed\",\n\t\t\t\t\t\t\tcallCount: completedProjection.callCount,\n\t\t\t\t\t\t\ttextLength: completedProjection.textLength,\n\t\t\t\t\t\t});\n\t\t\t\t\t\twrapped.push({ type: \"done\", reason: \"toolUse\", message: completedProjection.message });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst projection = projectTextToolProtocolMessage(event.message, model, tools, callIdPrefix);\n\t\t\t\tif (projection.callCount === 0) {\n\t\t\t\t\tif (projection.failure) {\n\t\t\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\tcallCount: 0,\n\t\t\t\t\t\t\ttextLength: projection.textLength,\n\t\t\t\t\t\t\treason: projection.failure,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\twrapped.push({ ...event, message: projection.message });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\tmodel: model.id,\n\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\tstatus: \"parsed\",\n\t\t\t\t\tcallCount: projection.callCount,\n\t\t\t\t\ttextLength: projection.textLength,\n\t\t\t\t});\n\t\t\t\twrapped.push({ type: \"done\", reason: \"toolUse\", message: projection.message });\n\t\t\t}\n\t\t} finally {\n\t\t\tcontrol?.cleanup();\n\t\t}\n\t})();\n\treturn wrapped;\n}\n\nfunction startTextToolProtocolStream<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: TOptions | undefined,\n\tstartProviderStream: (\n\t\tproviderContext: Context,\n\t\tproviderOptions: TOptions | undefined,\n\t) => AssistantMessageEventStream,\n): AssistantMessageEventStream {\n\tconst request = materializeProviderRequest(context, options);\n\tif (!request.usesTextToolProtocol) return startProviderStream(request.context, options);\n\tconst abortController = new AbortController();\n\tconst combined = combineAbortSignals([options?.signal, abortController.signal]);\n\tconst providerOptions = { ...options, signal: combined.signal } as TOptions;\n\treturn withTextToolProtocolResult(\n\t\tstartProviderStream(request.context, providerOptions),\n\t\tmodel,\n\t\trequest.sourceContext,\n\t\tproviderOptions,\n\t\t{ abortController, cleanup: combined.cleanup },\n\t);\n}\n\n/**\n * Send one already-admitted materialization. Its provider context has no native tool surface, so a\n * nested public stream cannot render the primer again. Preserve the protocol option for provider\n * history serialization; response parsing remains owned here.\n */\nexport async function startMaterializedProviderStream<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\trequest: MaterializedProviderRequest,\n\toptions: TOptions | undefined,\n\tstartProviderStream: (\n\t\tproviderContext: Context,\n\t\tproviderOptions: TOptions | undefined,\n\t) => AssistantMessageEventStream | Promise<AssistantMessageEventStream>,\n): Promise<AssistantMessageEventStream> {\n\tif (!request.usesTextToolProtocol) return await startProviderStream(request.context, options);\n\n\tconst abortController = new AbortController();\n\tconst combined = combineAbortSignals([options?.signal, abortController.signal]);\n\tconst providerOptions = { ...options, signal: combined.signal } as TOptions;\n\ttry {\n\t\tconst stream = await startProviderStream(request.context, providerOptions);\n\t\treturn withTextToolProtocolResult(stream, model, request.sourceContext, options, {\n\t\t\tabortController,\n\t\t\tcleanup: combined.cleanup,\n\t\t});\n\t} catch (error) {\n\t\tcombined.cleanup();\n\t\tthrow error;\n\t}\n}\n\nfunction resolveApiProvider(api: Api) {\n\tconst provider = getApiProvider(api);\n\tif (!provider) {\n\t\tthrow new Error(`No API provider registered for api: ${api}`);\n\t}\n\treturn provider;\n}\n\nexport function stream<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): AssistantMessageEventStream {\n\tconst provider = resolveApiProvider(model.api);\n\tconst resolvedOptions = withEnvAuth(model, options);\n\treturn startTextToolProtocolStream(model, context, resolvedOptions, (providerContext, providerOptions) =>\n\t\tprovider.stream(model, providerContext, providerOptions),\n\t);\n}\n\nexport async function complete<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = stream(model, context, options);\n\treturn s.result();\n}\n\nexport function streamSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream {\n\tconst provider = resolveApiProvider(model.api);\n\tconst resolvedOptions = withEnvAuth(model, options);\n\treturn startTextToolProtocolStream(model, context, resolvedOptions, (providerContext, providerOptions) =>\n\t\tprovider.streamSimple(model, providerContext, providerOptions),\n\t);\n}\n\nexport async function completeSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = streamSimple(model, context, options);\n\treturn s.result();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import \"./providers/register-builtins.ts\";\n\nimport { getApiProvider } from \"./api-registry.ts\";\nimport { getEnvApiKey, getEnvAuthHeaders } from \"./env-api-keys.ts\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tProviderStreamOptions,\n\tSimpleStreamOptions,\n\tStreamOptions,\n\tTextToolProtocolParseEvent,\n} from \"./types.ts\";\nimport { createEmptyUsage } from \"./usage.ts\";\nimport { combineAbortSignals } from \"./utils/abort-signals.ts\";\nimport { AssistantMessageEventStream, STREAM_ENDED_WITHOUT_TERMINAL } from \"./utils/event-stream.ts\";\nimport {\n\tgenerateTextToolProtocolPrimer,\n\tnormalizeTextToolProtocolOptions,\n\tparseTextToolCalls,\n} from \"./utils/tool-repair/text-protocol.ts\";\nimport { TextProtocolLiveFilter } from \"./utils/tool-repair/text-protocol-live-filter.ts\";\n\nexport { getEnvApiKey } from \"./env-api-keys.ts\";\n\nlet textToolProtocolBatchSequence = 0;\n\n// Once a complete call exists, a short bounded suffix preserves adjacent parallel envelopes while\n// preventing a small model from spending its remaining output budget on unusable trailing prose.\n// Envelope bodies themselves are never counted, so large write/edit arguments remain unbounded here.\nconst TEXT_TOOL_PROTOCOL_TRAILING_PROSE_LIMIT = 128;\n\nfunction nextTextToolProtocolCallIdPrefix(): string {\n\ttextToolProtocolBatchSequence =\n\t\ttextToolProtocolBatchSequence >= Number.MAX_SAFE_INTEGER ? 1 : textToolProtocolBatchSequence + 1;\n\treturn `text-tool-${textToolProtocolBatchSequence}`;\n}\n\nfunction hasExplicitApiKey(apiKey: string | undefined): apiKey is string {\n\treturn typeof apiKey === \"string\" && apiKey.trim().length > 0;\n}\n\nfunction hasAuthorizationHeader(headers: Record<string, string> | undefined): boolean {\n\treturn Object.entries(headers ?? {}).some(\n\t\t([name, value]) => name.toLowerCase() === \"authorization\" && value.trim().length > 0,\n\t);\n}\n\nfunction withEnvAuth<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\toptions: TOptions | undefined,\n): TOptions | undefined {\n\tif (hasExplicitApiKey(options?.apiKey)) return options;\n\tif (hasAuthorizationHeader(options?.headers)) return options;\n\tconst envHeaders = getEnvAuthHeaders(model.provider);\n\tif (envHeaders) return { ...options, headers: { ...envHeaders, ...options?.headers } } as TOptions;\n\tconst apiKey = getEnvApiKey(model.provider);\n\tif (!apiKey) return options;\n\treturn { ...options, apiKey } as TOptions;\n}\n\nfunction withTextToolProtocolContext(context: Context, options: StreamOptions | undefined): Context {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tif (!protocolOptions || !context.tools?.length) return context;\n\tconst primer = generateTextToolProtocolPrimer(context.tools, protocolOptions);\n\tif (!primer) return context;\n\tconst { tools: _tools, ...providerContext } = context;\n\tconst messages = context.messages.length\n\t\t? [\n\t\t\t\t{\n\t\t\t\t\trole: \"user\" as const,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\ttext: \"Apply system tool protocol; never answer this message.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\ttimestamp: 0,\n\t\t\t\t},\n\t\t\t\t...context.messages,\n\t\t\t]\n\t\t: context.messages;\n\treturn {\n\t\t...providerContext,\n\t\tsystemPrompt: context.systemPrompt ? `${context.systemPrompt}\\n\\n${primer}` : primer,\n\t\tmessages,\n\t};\n}\n\n/**\n * Immutable provider-input materialization. `context` is the exact Context object passed to the\n * provider transport; `sourceContext` retains native tool definitions only for response parsing.\n */\nexport interface MaterializedProviderRequest {\n\tcontext: Context;\n\tsourceContext: Context;\n\tusesTextToolProtocol: boolean;\n}\n\n/**\n * Resolve provider-visible context once, including the text-only tool primer and synthetic guard\n * message. Callers may budget/admit `result.context`, then send that same object through\n * {@link startMaterializedProviderStream} without re-rendering it.\n */\nexport function materializeProviderRequest(\n\tcontext: Context,\n\toptions: StreamOptions | undefined,\n): MaterializedProviderRequest {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tconst usesTextToolProtocol = protocolOptions !== undefined && Boolean(context.tools?.length);\n\treturn {\n\t\tcontext: usesTextToolProtocol ? withTextToolProtocolContext(context, options) : context,\n\t\tsourceContext: context,\n\t\tusesTextToolProtocol,\n\t};\n}\n\nasync function notifyTextToolProtocolParse(\n\toptions: StreamOptions | undefined,\n\tevent: TextToolProtocolParseEvent,\n): Promise<void> {\n\ttry {\n\t\tawait options?.onTextToolProtocolParse?.(event);\n\t} catch {\n\t\t// Parse telemetry must not change provider stream semantics.\n\t}\n}\n\n// Rewrites any text or thinking block whose revealed prose is still behind its true streamed\n// content so a forwarded event's `partial` snapshot never exposes held-back envelope markup. Some\n// OpenAI-compatible local servers classify the model's entire phone envelope as reasoning.\nfunction redactHeldProtocolContent(\n\tpartial: AssistantMessage,\n\trevealedContent: ReadonlyMap<number, string>,\n): AssistantMessage {\n\tif (revealedContent.size === 0) return partial;\n\tlet changed = false;\n\tconst content = partial.content.map((block, index) => {\n\t\tconst revealed = revealedContent.get(index);\n\t\tif (revealed === undefined) return block;\n\t\tif (block.type === \"text\" && block.text !== revealed) {\n\t\t\tchanged = true;\n\t\t\treturn { ...block, text: revealed };\n\t\t}\n\t\tif (block.type !== \"thinking\" || block.thinking === revealed) return block;\n\t\tchanged = true;\n\t\treturn { ...block, thinking: revealed };\n\t});\n\treturn changed ? { ...partial, content } : partial;\n}\n\n// Forwards one non-\"done\" stream event, holding back streamed text that falls inside (or\n// might still grow into) a text-protocol envelope so raw markup like \"<pi:call\" never reaches\n// a live consumer. Prose outside envelopes is forwarded as soon as it is provably safe; the\n// \"done\" event swap remains the sole authority for final content.\nfunction forwardTextProtocolStreamEvent(\n\twrapped: AssistantMessageEventStream,\n\tevent: Exclude<AssistantMessageEvent, { type: \"done\" }>,\n\trevealedContent: Map<number, string>,\n\tliveFilters: Map<number, TextProtocolLiveFilter>,\n): void {\n\tif (event.type === \"error\") {\n\t\twrapped.push(event);\n\t\treturn;\n\t}\n\tif (event.type === \"text_start\" || event.type === \"thinking_start\") {\n\t\trevealedContent.set(event.contentIndex, \"\");\n\t\tliveFilters.set(event.contentIndex, new TextProtocolLiveFilter());\n\t\twrapped.push({ ...event, partial: redactHeldProtocolContent(event.partial, revealedContent) });\n\t\treturn;\n\t}\n\tif (event.type === \"text_delta\" || event.type === \"thinking_delta\") {\n\t\tconst flushed = revealedContent.get(event.contentIndex) ?? \"\";\n\t\tconst filter = liveFilters.get(event.contentIndex) ?? new TextProtocolLiveFilter();\n\t\tliveFilters.set(event.contentIndex, filter);\n\t\tconst visible = filter.advance(event.delta);\n\t\tif (visible.length <= flushed.length) return; // held: possibly-envelope text never streams live\n\t\trevealedContent.set(event.contentIndex, visible);\n\t\twrapped.push({\n\t\t\t...event,\n\t\t\tdelta: visible.slice(flushed.length),\n\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t});\n\t\treturn;\n\t}\n\tif (event.type === \"text_end\" || event.type === \"thinking_end\") {\n\t\tconst flushed = revealedContent.get(event.contentIndex) ?? \"\";\n\t\tconst filter = liveFilters.get(event.contentIndex) ?? new TextProtocolLiveFilter();\n\t\tliveFilters.set(event.contentIndex, filter);\n\t\tconst visible = filter.finish(event.content);\n\t\tif (visible.length > flushed.length) {\n\t\t\t// Catch up any newly-provable-safe tail (e.g. a suspected opener prefix that never\n\t\t\t// completed) so the deltas actually forwarded still sum to what text_end reports.\n\t\t\trevealedContent.set(event.contentIndex, visible);\n\t\t\twrapped.push(\n\t\t\t\tevent.type === \"text_end\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\t\t\tdelta: visible.slice(flushed.length),\n\t\t\t\t\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\tcontentIndex: event.contentIndex,\n\t\t\t\t\t\t\tdelta: visible.slice(flushed.length),\n\t\t\t\t\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst finalVisible = revealedContent.get(event.contentIndex) ?? visible;\n\t\twrapped.push({\n\t\t\t...event,\n\t\t\tcontent: finalVisible,\n\t\t\tpartial: redactHeldProtocolContent(event.partial, revealedContent),\n\t\t});\n\t\treturn;\n\t}\n\twrapped.push({ ...event, partial: redactHeldProtocolContent(event.partial, revealedContent) });\n}\n\ninterface TextToolProtocolMessageProjection {\n\tmessage: AssistantMessage;\n\tcallCount: number;\n\ttextLength: number;\n\tfailure?: TextToolProtocolParseEvent[\"reason\"];\n\tprotocolAttempted: boolean;\n}\n\nfunction projectTextToolProtocolMessage(\n\tmessage: AssistantMessage,\n\tmodel: Model<Api>,\n\ttools: readonly NonNullable<Context[\"tools\"]>[number][],\n\tcallIdPrefix: string,\n): TextToolProtocolMessageProjection {\n\tconst content: AssistantMessage[\"content\"] = [];\n\tlet callCount = 0;\n\tlet textLength = 0;\n\tlet failure: TextToolProtocolParseEvent[\"reason\"] | undefined;\n\tlet protocolAttempted = false;\n\tfor (const block of message.content) {\n\t\tif (block.type !== \"text\" && (block.type !== \"thinking\" || block.redacted)) {\n\t\t\tcontent.push(block);\n\t\t\tcontinue;\n\t\t}\n\t\tconst protocolText = block.type === \"text\" ? block.text : block.thinking;\n\t\ttextLength += protocolText.length;\n\t\tconst parsed = parseTextToolCalls(protocolText, tools, {\n\t\t\tcallIdPrefix,\n\t\t\tcallIndexOffset: callCount,\n\t\t});\n\t\tprotocolAttempted ||= parsed.attempted;\n\t\tif (parsed.calls.length === 0) {\n\t\t\tif (parsed.failure) failure ??= parsed.failure;\n\t\t\tcontent.push(block);\n\t\t\tcontinue;\n\t\t}\n\t\tcallCount += parsed.calls.length;\n\t\tif (parsed.text) {\n\t\t\tcontent.push(block.type === \"text\" ? { ...block, text: parsed.text } : { ...block, thinking: parsed.text });\n\t\t}\n\t\tcontent.push(...parsed.calls);\n\t}\n\tif (callCount > 0) {\n\t\treturn {\n\t\t\tmessage: { ...message, content, stopReason: \"toolUse\" },\n\t\t\tcallCount,\n\t\t\ttextLength,\n\t\t\tfailure,\n\t\t\tprotocolAttempted,\n\t\t};\n\t}\n\tconst hasVisibleText = message.content.some((block) => block.type === \"text\" && block.text.trim().length > 0);\n\tconst promoteThinking =\n\t\tmodel.reasoning === false &&\n\t\t!protocolAttempted &&\n\t\t!hasVisibleText &&\n\t\tmessage.content.some((block) => block.type === \"thinking\" && !block.redacted);\n\treturn {\n\t\tmessage: promoteThinking\n\t\t\t? {\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: message.content.flatMap((block) => {\n\t\t\t\t\t\tif (block.type === \"thinking\" && !block.redacted) {\n\t\t\t\t\t\t\treturn [{ type: \"text\" as const, text: block.thinking }];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (block.type === \"text\" && block.text.length === 0) return [];\n\t\t\t\t\t\treturn [block];\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t: message,\n\t\tcallCount,\n\t\ttextLength,\n\t\tfailure,\n\t\tprotocolAttempted,\n\t};\n}\n\ninterface TextToolProtocolStreamControl {\n\tabortController: AbortController;\n\tcleanup(): void;\n}\n\nfunction withTextToolProtocolResult(\n\tstream: AssistantMessageEventStream,\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions | undefined,\n\tcontrol?: TextToolProtocolStreamControl,\n): AssistantMessageEventStream {\n\tconst protocolOptions = normalizeTextToolProtocolOptions(options?.textToolCallProtocol);\n\tconst tools = context.tools ?? [];\n\tif (!protocolOptions || tools.length === 0) return stream;\n\tconst wrapped = new AssistantMessageEventStream();\n\tconst callIdPrefix = nextTextToolProtocolCallIdPrefix();\n\tvoid (async () => {\n\t\tconst revealedContent = new Map<number, string>();\n\t\tconst liveFilters = new Map<number, TextProtocolLiveFilter>();\n\t\tlet completedEnvelopeCount = 0;\n\t\tlet trailingProseLength = 0;\n\t\tlet completedProjection: TextToolProtocolMessageProjection | undefined;\n\t\tlet lastPartial: AssistantMessage | undefined;\n\t\tlet sawTerminal = false;\n\t\ttry {\n\t\t\tfor await (const event of stream) {\n\t\t\t\tif (event.type === \"done\" || event.type === \"error\") {\n\t\t\t\t\tsawTerminal = true;\n\t\t\t\t} else if (\"partial\" in event) {\n\t\t\t\t\tlastPartial = event.partial;\n\t\t\t\t}\n\t\t\t\tif (event.type !== \"done\") {\n\t\t\t\t\tif (event.type === \"text_delta\" || event.type === \"thinking_delta\") {\n\t\t\t\t\t\tif (completedProjection) trailingProseLength += event.delta.length;\n\t\t\t\t\t}\n\t\t\t\t\tforwardTextProtocolStreamEvent(wrapped, event, revealedContent, liveFilters);\n\t\t\t\t\tconst observedEnvelopeCount = [...liveFilters.values()].reduce(\n\t\t\t\t\t\t(total, filter) => total + filter.completedEnvelopeCount,\n\t\t\t\t\t\t0,\n\t\t\t\t\t);\n\t\t\t\t\tif (observedEnvelopeCount > completedEnvelopeCount && \"partial\" in event) {\n\t\t\t\t\t\tcompletedEnvelopeCount = observedEnvelopeCount;\n\t\t\t\t\t\tconst projection = projectTextToolProtocolMessage(event.partial, model, tools, callIdPrefix);\n\t\t\t\t\t\tif (projection.callCount > 0) {\n\t\t\t\t\t\t\tcompletedProjection = projection;\n\t\t\t\t\t\t\ttrailingProseLength = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst holdingPotentialEnvelope = [...liveFilters.values()].some(\n\t\t\t\t\t\t(filter) => filter.holdingPotentialEnvelope,\n\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tcompletedProjection &&\n\t\t\t\t\t\ttrailingProseLength > TEXT_TOOL_PROTOCOL_TRAILING_PROSE_LIMIT &&\n\t\t\t\t\t\t!holdingPotentialEnvelope &&\n\t\t\t\t\t\tcontrol\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontrol.abortController.abort(\"text-tool-protocol-call-complete\");\n\t\t\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\t\t\tstatus: \"parsed\",\n\t\t\t\t\t\t\tcallCount: completedProjection.callCount,\n\t\t\t\t\t\t\ttextLength: completedProjection.textLength,\n\t\t\t\t\t\t});\n\t\t\t\t\t\twrapped.push({ type: \"done\", reason: \"toolUse\", message: completedProjection.message });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst projection = projectTextToolProtocolMessage(event.message, model, tools, callIdPrefix);\n\t\t\t\tif (projection.callCount === 0) {\n\t\t\t\t\tif (projection.failure) {\n\t\t\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\tcallCount: 0,\n\t\t\t\t\t\t\ttextLength: projection.textLength,\n\t\t\t\t\t\t\treason: projection.failure,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\twrapped.push({ ...event, message: projection.message });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait notifyTextToolProtocolParse(options, {\n\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\tmodel: model.id,\n\t\t\t\t\tvariant: protocolOptions.variant ?? \"tool-tag\",\n\t\t\t\t\tstatus: \"parsed\",\n\t\t\t\t\tcallCount: projection.callCount,\n\t\t\t\t\ttextLength: projection.textLength,\n\t\t\t\t});\n\t\t\t\twrapped.push({ type: \"done\", reason: \"toolUse\", message: projection.message });\n\t\t\t}\n\t\t\tif (!sawTerminal) {\n\t\t\t\tconst source = lastPartial;\n\t\t\t\twrapped.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\treason: \"error\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: source?.content ?? [],\n\t\t\t\t\t\tapi: model.api,\n\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\tmodel: model.id,\n\t\t\t\t\t\tusage: source?.usage ?? createEmptyUsage(),\n\t\t\t\t\t\tstopReason: \"error\",\n\t\t\t\t\t\terrorMessage: source?.errorMessage ?? STREAM_ENDED_WITHOUT_TERMINAL,\n\t\t\t\t\t\ttimestamp: source?.timestamp ?? Date.now(),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tcontrol?.cleanup();\n\t\t}\n\t})();\n\treturn wrapped;\n}\n\nfunction startTextToolProtocolStream<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: TOptions | undefined,\n\tstartProviderStream: (\n\t\tproviderContext: Context,\n\t\tproviderOptions: TOptions | undefined,\n\t) => AssistantMessageEventStream,\n): AssistantMessageEventStream {\n\tconst request = materializeProviderRequest(context, options);\n\tif (!request.usesTextToolProtocol) return startProviderStream(request.context, options);\n\tconst abortController = new AbortController();\n\tconst combined = combineAbortSignals([options?.signal, abortController.signal]);\n\tconst providerOptions = { ...options, signal: combined.signal } as TOptions;\n\treturn withTextToolProtocolResult(\n\t\tstartProviderStream(request.context, providerOptions),\n\t\tmodel,\n\t\trequest.sourceContext,\n\t\tproviderOptions,\n\t\t{ abortController, cleanup: combined.cleanup },\n\t);\n}\n\n/**\n * Send one already-admitted materialization. Its provider context has no native tool surface, so a\n * nested public stream cannot render the primer again. Preserve the protocol option for provider\n * history serialization; response parsing remains owned here.\n */\nexport async function startMaterializedProviderStream<TOptions extends StreamOptions>(\n\tmodel: Model<Api>,\n\trequest: MaterializedProviderRequest,\n\toptions: TOptions | undefined,\n\tstartProviderStream: (\n\t\tproviderContext: Context,\n\t\tproviderOptions: TOptions | undefined,\n\t) => AssistantMessageEventStream | Promise<AssistantMessageEventStream>,\n): Promise<AssistantMessageEventStream> {\n\tif (!request.usesTextToolProtocol) return await startProviderStream(request.context, options);\n\n\tconst abortController = new AbortController();\n\tconst combined = combineAbortSignals([options?.signal, abortController.signal]);\n\tconst providerOptions = { ...options, signal: combined.signal } as TOptions;\n\ttry {\n\t\tconst stream = await startProviderStream(request.context, providerOptions);\n\t\treturn withTextToolProtocolResult(stream, model, request.sourceContext, options, {\n\t\t\tabortController,\n\t\t\tcleanup: combined.cleanup,\n\t\t});\n\t} catch (error) {\n\t\tcombined.cleanup();\n\t\tthrow error;\n\t}\n}\n\nfunction resolveApiProvider(api: Api) {\n\tconst provider = getApiProvider(api);\n\tif (!provider) {\n\t\tthrow new Error(`No API provider registered for api: ${api}`);\n\t}\n\treturn provider;\n}\n\nexport function stream<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): AssistantMessageEventStream {\n\tconst provider = resolveApiProvider(model.api);\n\tconst resolvedOptions = withEnvAuth(model, options);\n\treturn startTextToolProtocolStream(model, context, resolvedOptions, (providerContext, providerOptions) =>\n\t\tprovider.stream(model, providerContext, providerOptions),\n\t);\n}\n\nexport async function complete<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: ProviderStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = stream(model, context, options);\n\treturn s.result();\n}\n\nexport function streamSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): AssistantMessageEventStream {\n\tconst provider = resolveApiProvider(model.api);\n\tconst resolvedOptions = withEnvAuth(model, options);\n\treturn startTextToolProtocolStream(model, context, resolvedOptions, (providerContext, providerOptions) =>\n\t\tprovider.streamSimple(model, providerContext, providerOptions),\n\t);\n}\n\nexport async function completeSimple<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n): Promise<AssistantMessage> {\n\tconst s = streamSimple(model, context, options);\n\treturn s.result();\n}\n"]}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import type { AssistantMessage, AssistantMessageEvent } from "../types.ts";
|
|
2
|
+
export declare const STREAM_ENDED_WITHOUT_TERMINAL = "stream ended without a terminal result";
|
|
2
3
|
export declare class EventStream<T, R = T> implements AsyncIterable<T> {
|
|
3
4
|
private queue;
|
|
4
5
|
private queueHead;
|
|
5
6
|
private waiting;
|
|
6
7
|
private done;
|
|
8
|
+
private settled;
|
|
7
9
|
private finalResultPromise;
|
|
8
10
|
private resolveFinalResult;
|
|
11
|
+
private rejectFinalResult;
|
|
9
12
|
private isComplete;
|
|
10
13
|
private extractResult;
|
|
11
14
|
constructor(isComplete: (event: T) => boolean, extractResult: (event: T) => R);
|
|
15
|
+
protected isSettled(): boolean;
|
|
16
|
+
private settleOk;
|
|
17
|
+
private settleMissing;
|
|
12
18
|
push(event: T): void;
|
|
13
19
|
end(result?: R): void;
|
|
14
20
|
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
@@ -16,6 +22,8 @@ export declare class EventStream<T, R = T> implements AsyncIterable<T> {
|
|
|
16
22
|
}
|
|
17
23
|
export declare class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {
|
|
18
24
|
constructor();
|
|
25
|
+
push(event: AssistantMessageEvent): void;
|
|
26
|
+
end(result?: AssistantMessage): void;
|
|
19
27
|
}
|
|
20
28
|
/** Factory function for AssistantMessageEventStream (for use in extensions) */
|
|
21
29
|
export declare function createAssistantMessageEventStream(): AssistantMessageEventStream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAG3E,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IAEvC,YAAY,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAG3E,eAAO,MAAM,6BAA6B,2CAA2C,CAAC;AAGtF,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IAEvC,YAAY,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAO5E;IAED,SAAS,CAAC,SAAS,IAAI,OAAO,CAE7B;IAED,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,aAAa;IAUrB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAenB;IAED,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAYpB;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAsBhD;IAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAEnB;CACD;AAID,qBAAa,2BAA4B,SAAQ,WAAW,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACpG,cAYC;IAEQ,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAKhD;IAEQ,GAAG,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAkB5C;CACD;AAED,+EAA+E;AAC/E,wBAAgB,iCAAiC,IAAI,2BAA2B,CAE/E"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createEmptyUsage } from "../usage.js";
|
|
2
|
+
export const STREAM_ENDED_WITHOUT_TERMINAL = "stream ended without a terminal result";
|
|
1
3
|
// Generic event stream class for async iteration
|
|
2
4
|
export class EventStream {
|
|
3
5
|
constructor(isComplete, extractResult) {
|
|
@@ -5,18 +7,39 @@ export class EventStream {
|
|
|
5
7
|
this.queueHead = 0;
|
|
6
8
|
this.waiting = [];
|
|
7
9
|
this.done = false;
|
|
10
|
+
this.settled = false;
|
|
8
11
|
this.isComplete = isComplete;
|
|
9
12
|
this.extractResult = extractResult;
|
|
10
|
-
this.finalResultPromise = new Promise((resolve) => {
|
|
13
|
+
this.finalResultPromise = new Promise((resolve, reject) => {
|
|
11
14
|
this.resolveFinalResult = resolve;
|
|
15
|
+
this.rejectFinalResult = reject;
|
|
12
16
|
});
|
|
13
17
|
}
|
|
18
|
+
isSettled() {
|
|
19
|
+
return this.settled;
|
|
20
|
+
}
|
|
21
|
+
settleOk(result) {
|
|
22
|
+
if (this.settled)
|
|
23
|
+
return;
|
|
24
|
+
this.settled = true;
|
|
25
|
+
this.resolveFinalResult(result);
|
|
26
|
+
}
|
|
27
|
+
settleMissing() {
|
|
28
|
+
if (this.settled)
|
|
29
|
+
return;
|
|
30
|
+
this.settled = true;
|
|
31
|
+
const error = new Error(STREAM_ENDED_WITHOUT_TERMINAL);
|
|
32
|
+
this.rejectFinalResult(error);
|
|
33
|
+
// end() may run with no result() waiter (iterator-only consumers). Keep the rejection
|
|
34
|
+
// available to later awaiters without turning it into an unhandled rejection.
|
|
35
|
+
void this.finalResultPromise.catch(() => { });
|
|
36
|
+
}
|
|
14
37
|
push(event) {
|
|
15
38
|
if (this.done)
|
|
16
39
|
return;
|
|
17
40
|
if (this.isComplete(event)) {
|
|
18
41
|
this.done = true;
|
|
19
|
-
this.
|
|
42
|
+
this.settleOk(this.extractResult(event));
|
|
20
43
|
}
|
|
21
44
|
// Deliver to waiting consumer or queue it
|
|
22
45
|
const waiter = this.waiting.shift();
|
|
@@ -30,7 +53,10 @@ export class EventStream {
|
|
|
30
53
|
end(result) {
|
|
31
54
|
this.done = true;
|
|
32
55
|
if (result !== undefined) {
|
|
33
|
-
this.
|
|
56
|
+
this.settleOk(result);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.settleMissing();
|
|
34
60
|
}
|
|
35
61
|
// Notify all waiting consumers that we're done
|
|
36
62
|
while (this.waiting.length > 0) {
|
|
@@ -69,6 +95,7 @@ export class EventStream {
|
|
|
69
95
|
return this.finalResultPromise;
|
|
70
96
|
}
|
|
71
97
|
}
|
|
98
|
+
const lastPartials = new WeakMap();
|
|
72
99
|
export class AssistantMessageEventStream extends EventStream {
|
|
73
100
|
constructor() {
|
|
74
101
|
super((event) => event.type === "done" || event.type === "error", (event) => {
|
|
@@ -81,6 +108,34 @@ export class AssistantMessageEventStream extends EventStream {
|
|
|
81
108
|
throw new Error("Unexpected event type for final result");
|
|
82
109
|
});
|
|
83
110
|
}
|
|
111
|
+
push(event) {
|
|
112
|
+
if (event.type === "done")
|
|
113
|
+
lastPartials.set(this, event.message);
|
|
114
|
+
else if (event.type === "error")
|
|
115
|
+
lastPartials.set(this, event.error);
|
|
116
|
+
else
|
|
117
|
+
lastPartials.set(this, event.partial);
|
|
118
|
+
super.push(event);
|
|
119
|
+
}
|
|
120
|
+
end(result) {
|
|
121
|
+
if (result !== undefined || this.isSettled()) {
|
|
122
|
+
super.end(result);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const source = lastPartials.get(this);
|
|
126
|
+
super.end({
|
|
127
|
+
role: "assistant",
|
|
128
|
+
content: source?.content ?? [],
|
|
129
|
+
api: source?.api ?? "unknown",
|
|
130
|
+
provider: source?.provider ?? "unknown",
|
|
131
|
+
model: source?.model ?? "unknown",
|
|
132
|
+
usage: source?.usage ?? createEmptyUsage(),
|
|
133
|
+
stopReason: "error",
|
|
134
|
+
errorMessage: STREAM_ENDED_WITHOUT_TERMINAL,
|
|
135
|
+
timestamp: source?.timestamp ?? Date.now(),
|
|
136
|
+
...(source?.responseId ? { responseId: source.responseId } : {}),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
84
139
|
}
|
|
85
140
|
/** Factory function for AssistantMessageEventStream (for use in extensions) */
|
|
86
141
|
export function createAssistantMessageEventStream() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, AssistantMessageEvent } from \"../types.ts\";\nimport { createEmptyUsage } from \"../usage.ts\";\n\nexport const STREAM_ENDED_WITHOUT_TERMINAL = \"stream ended without a terminal result\";\n\n// Generic event stream class for async iteration\nexport class EventStream<T, R = T> implements AsyncIterable<T> {\n\tprivate queue: T[] = [];\n\tprivate queueHead = 0;\n\tprivate waiting: ((value: IteratorResult<T>) => void)[] = [];\n\tprivate done = false;\n\tprivate settled = false;\n\tprivate finalResultPromise: Promise<R>;\n\tprivate resolveFinalResult!: (result: R) => void;\n\tprivate rejectFinalResult!: (error: Error) => void;\n\tprivate isComplete: (event: T) => boolean;\n\tprivate extractResult: (event: T) => R;\n\n\tconstructor(isComplete: (event: T) => boolean, extractResult: (event: T) => R) {\n\t\tthis.isComplete = isComplete;\n\t\tthis.extractResult = extractResult;\n\t\tthis.finalResultPromise = new Promise((resolve, reject) => {\n\t\t\tthis.resolveFinalResult = resolve;\n\t\t\tthis.rejectFinalResult = reject;\n\t\t});\n\t}\n\n\tprotected isSettled(): boolean {\n\t\treturn this.settled;\n\t}\n\n\tprivate settleOk(result: R): void {\n\t\tif (this.settled) return;\n\t\tthis.settled = true;\n\t\tthis.resolveFinalResult(result);\n\t}\n\n\tprivate settleMissing(): void {\n\t\tif (this.settled) return;\n\t\tthis.settled = true;\n\t\tconst error = new Error(STREAM_ENDED_WITHOUT_TERMINAL);\n\t\tthis.rejectFinalResult(error);\n\t\t// end() may run with no result() waiter (iterator-only consumers). Keep the rejection\n\t\t// available to later awaiters without turning it into an unhandled rejection.\n\t\tvoid this.finalResultPromise.catch(() => {});\n\t}\n\n\tpush(event: T): void {\n\t\tif (this.done) return;\n\n\t\tif (this.isComplete(event)) {\n\t\t\tthis.done = true;\n\t\t\tthis.settleOk(this.extractResult(event));\n\t\t}\n\n\t\t// Deliver to waiting consumer or queue it\n\t\tconst waiter = this.waiting.shift();\n\t\tif (waiter) {\n\t\t\twaiter({ value: event, done: false });\n\t\t} else {\n\t\t\tthis.queue.push(event);\n\t\t}\n\t}\n\n\tend(result?: R): void {\n\t\tthis.done = true;\n\t\tif (result !== undefined) {\n\t\t\tthis.settleOk(result);\n\t\t} else {\n\t\t\tthis.settleMissing();\n\t\t}\n\t\t// Notify all waiting consumers that we're done\n\t\twhile (this.waiting.length > 0) {\n\t\t\tconst waiter = this.waiting.shift()!;\n\t\t\twaiter({ value: undefined as never, done: true });\n\t\t}\n\t}\n\n\tasync *[Symbol.asyncIterator](): AsyncIterator<T> {\n\t\twhile (true) {\n\t\t\tif (this.queueHead < this.queue.length) {\n\t\t\t\tconst value = this.queue[this.queueHead++];\n\t\t\t\tif (this.queueHead === this.queue.length) {\n\t\t\t\t\tthis.queue = [];\n\t\t\t\t\tthis.queueHead = 0;\n\t\t\t\t} else if (this.queueHead >= 1024 && this.queueHead * 2 >= this.queue.length) {\n\t\t\t\t\t// Array.shift() makes a burst of N provider deltas O(N²). Compact consumed\n\t\t\t\t\t// slots occasionally while keeping the common one-at-a-time path allocation-free.\n\t\t\t\t\tthis.queue = this.queue.slice(this.queueHead);\n\t\t\t\t\tthis.queueHead = 0;\n\t\t\t\t}\n\t\t\t\tyield value;\n\t\t\t} else if (this.done) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tconst result = await new Promise<IteratorResult<T>>((resolve) => this.waiting.push(resolve));\n\t\t\t\tif (result.done) return;\n\t\t\t\tyield result.value;\n\t\t\t}\n\t\t}\n\t}\n\n\tresult(): Promise<R> {\n\t\treturn this.finalResultPromise;\n\t}\n}\n\nconst lastPartials = new WeakMap<AssistantMessageEventStream, AssistantMessage>();\n\nexport class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, AssistantMessage> {\n\tconstructor() {\n\t\tsuper(\n\t\t\t(event) => event.type === \"done\" || event.type === \"error\",\n\t\t\t(event) => {\n\t\t\t\tif (event.type === \"done\") {\n\t\t\t\t\treturn event.message;\n\t\t\t\t} else if (event.type === \"error\") {\n\t\t\t\t\treturn event.error;\n\t\t\t\t}\n\t\t\t\tthrow new Error(\"Unexpected event type for final result\");\n\t\t\t},\n\t\t);\n\t}\n\n\toverride push(event: AssistantMessageEvent): void {\n\t\tif (event.type === \"done\") lastPartials.set(this, event.message);\n\t\telse if (event.type === \"error\") lastPartials.set(this, event.error);\n\t\telse lastPartials.set(this, event.partial);\n\t\tsuper.push(event);\n\t}\n\n\toverride end(result?: AssistantMessage): void {\n\t\tif (result !== undefined || this.isSettled()) {\n\t\t\tsuper.end(result);\n\t\t\treturn;\n\t\t}\n\t\tconst source = lastPartials.get(this);\n\t\tsuper.end({\n\t\t\trole: \"assistant\",\n\t\t\tcontent: source?.content ?? [],\n\t\t\tapi: source?.api ?? \"unknown\",\n\t\t\tprovider: source?.provider ?? \"unknown\",\n\t\t\tmodel: source?.model ?? \"unknown\",\n\t\t\tusage: source?.usage ?? createEmptyUsage(),\n\t\t\tstopReason: \"error\",\n\t\t\terrorMessage: STREAM_ENDED_WITHOUT_TERMINAL,\n\t\t\ttimestamp: source?.timestamp ?? Date.now(),\n\t\t\t...(source?.responseId ? { responseId: source.responseId } : {}),\n\t\t});\n\t}\n}\n\n/** Factory function for AssistantMessageEventStream (for use in extensions) */\nexport function createAssistantMessageEventStream(): AssistantMessageEventStream {\n\treturn new AssistantMessageEventStream();\n}\n"]}
|
|
@@ -138,6 +138,24 @@ export declare const TOOL_EXECUTION_ERROR_CATALOGUE: readonly [{
|
|
|
138
138
|
readonly unchangedRetryLimit: 1;
|
|
139
139
|
readonly guidance: "Operation timed out. Narrow/split work; one unchanged retry only when safe, still required.";
|
|
140
140
|
readonly matches: (message: string) => boolean;
|
|
141
|
+
}, {
|
|
142
|
+
readonly name: "ownerAuthorizationRequired";
|
|
143
|
+
readonly phase: "policy";
|
|
144
|
+
readonly failureCode: "owner_authorization_required";
|
|
145
|
+
readonly guidance: "Owner authorization is missing from the current prompt. Do not retry start. Continue without a goal or wait for owner speech.";
|
|
146
|
+
readonly matches: (message: string) => boolean;
|
|
147
|
+
}, {
|
|
148
|
+
readonly name: "exclusiveArguments";
|
|
149
|
+
readonly phase: "validation";
|
|
150
|
+
readonly failureCode: "invalid_arguments";
|
|
151
|
+
readonly guidance: "Provide exactly one of the mutually exclusive fields. Do not send both, and do not omit both.";
|
|
152
|
+
readonly matches: (message: string) => boolean;
|
|
153
|
+
}, {
|
|
154
|
+
readonly name: "skillNotEligible";
|
|
155
|
+
readonly phase: "policy";
|
|
156
|
+
readonly failureCode: "skill_not_eligible";
|
|
157
|
+
readonly guidance: "Skill name is not eligible. Search, then load an exact listed name. Do not retry the same name.";
|
|
158
|
+
readonly matches: (message: string) => boolean;
|
|
141
159
|
}, {
|
|
142
160
|
readonly name: "cancelled";
|
|
143
161
|
readonly phase: "cancelled";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/utils/tool-repair/registry.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,YAClC,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,CACV,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AACzE,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,uBAAuB,EAiFzD,CAAC;AAIX,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,GAAG,uBAAuB,CAI5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAE7E;AAED,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC9D,MAAM,MAAM,gBAAgB,GACzB,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,WAAW,GACX,SAAS,GACT,WAAW,GACX,cAAc,CAAC;AAElB,eAAO,MAAM,qCAAqC;aACjD,WAAW,EAAE,0BAA0B;aACvC,UAAU,EAAE,6EAA6E;aACzF,QAAQ,EACP,mIAAmI;CAC3H,CAAC;AAEX,iGAAiG;AACjG,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAqB3E,eAAO,MAAM,8BAA8B;mBAEnC,mBAAmB;oBAClB,QAAQ;0BACF,oBAAoB;4BAClB,SAAS;;uBAGvB,sJAAsJ;gCACtI,MAAM,KAAG,OAAO;;mBAK3B,oBAAoB;oBACnB,cAAc;0BACR,qBAAqB;;uBAExB,6FAA6F;gCACtF,MAAM,KAAG,OAAO;;mBAK3B,iBAAiB;oBAChB,cAAc;uBACX,mEAAmE;gCAC5D,MAAM,KAAG,OAAO;;mBAK3B,cAAc;oBACb,WAAW;uBACR,yFAAyF;gCAClF,MAAM,KAAG,OAAO;;mBAK3B,uBAAuB;oBACtB,WAAW;uBACR,kGAAkG;gCAC3F,MAAM,KAAG,OAAO;;mBAK3B,iBAAiB;oBAChB,WAAW;uBACR,6EAA6E;gCACtE,MAAM,KAAG,OAAO;;mBAK3B,wBAAwB;oBACvB,WAAW;uBACR,wFAAwF;gCACjF,MAAM,KAAG,OAAO;;mBAK3B,yBAAyB;oBACxB,WAAW;uBACR,6DAA6D;gCACtD,MAAM,KAAG,OAAO;;mBAK3B,oBAAoB;oBACnB,WAAW;0BACL,qBAAqB;4BACnB,SAAS;uBAEvB,6GAA6G;gCAC7F,MAAM,KAAG,OAAO;;mBAK3B,wBAAwB;oBACvB,WAAW;;4BAEH,SAAS;;;gCAGP,MAAM,KAAG,OAAO;;mBAK3B,sBAAsB;oBACrB,WAAW;0BACL,4BAA4B;4BAC1B,SAAS;;uBAGvB,6HAA6H;gCAC7G,MAAM,KAAG,OAAO;;mBAK3B,cAAc;oBACb,WAAW;0BACL,gBAAgB;uBACnB,qEAAqE;gCAC9D,MAAM,KAAG,OAAO;;mBAS3B,qBAAqB;oBACpB,WAAW;0BACL,yBAAyB;uBAC5B,sDAAsD;gCAC/C,MAAM,KAAG,OAAO;;mBAK3B,gBAAgB;oBACf,QAAQ;uBACL,wEAAwE;gCACjE,MAAM,KAAG,OAAO;;mBAK3B,kBAAkB;oBACjB,QAAQ;0BACF,mBAAmB;;uBAEtB,kFAAkF;gCAC3E,MAAM,KAAG,OAAO;;mBAK3B,eAAe;oBACd,WAAW;0BACL,gBAAgB;;uBAEnB,yEAAyE;gCAClE,MAAM,KAAG,OAAO;;mBAK3B,gBAAgB;oBACf,WAAW;0BACL,iBAAiB;;uBAEpB,2EAA2E;gCACpE,MAAM,KAAG,OAAO;;mBAQ3B,aAAa;oBACZ,WAAW;0BACL,cAAc;uBACjB,2FAA2F;gCACpF,MAAM,KAAG,OAAO;;mBAK3B,UAAU;oBACT,SAAS;0BACH,SAAS;kCACD,CAAC;uBACZ,6FAA6F;gCACtF,MAAM,KAAG,OAAO;;mBAQ3B,WAAW;oBACV,WAAW;0BACL,WAAW;uBACd,sFAAsF;gCAC/E,MAAM,KAAG,OAAO;EAO6B,CAAC;AAEjE,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAG9F,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAYtG;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,CAG7F;AAED,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEtF"}
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/utils/tool-repair/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -306,6 +306,35 @@ export const TOOL_EXECUTION_ERROR_CATALOGUE = [
|
|
|
306
306
|
/\bETIMEDOUT\b/i.test(message));
|
|
307
307
|
},
|
|
308
308
|
},
|
|
309
|
+
{
|
|
310
|
+
name: "ownerAuthorizationRequired",
|
|
311
|
+
phase: "policy",
|
|
312
|
+
failureCode: "owner_authorization_required",
|
|
313
|
+
guidance: "Owner authorization is missing from the current prompt. Do not retry start. Continue without a goal or wait for owner speech.",
|
|
314
|
+
matches(message) {
|
|
315
|
+
return (/goal start requires explicit owner authorization/i.test(message) ||
|
|
316
|
+
/tokenBudget requires an exact numeric token ceiling in the current owner prompt/i.test(message) ||
|
|
317
|
+
/tokenBudget must equal the owner-requested ceiling/i.test(message));
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: "exclusiveArguments",
|
|
322
|
+
phase: "validation",
|
|
323
|
+
failureCode: "invalid_arguments",
|
|
324
|
+
guidance: "Provide exactly one of the mutually exclusive fields. Do not send both, and do not omit both.",
|
|
325
|
+
matches(message) {
|
|
326
|
+
return /Provide exactly one of /i.test(message);
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
name: "skillNotEligible",
|
|
331
|
+
phase: "policy",
|
|
332
|
+
failureCode: "skill_not_eligible",
|
|
333
|
+
guidance: "Skill name is not eligible. Search, then load an exact listed name. Do not retry the same name.",
|
|
334
|
+
matches(message) {
|
|
335
|
+
return /No eligible skill named/i.test(message);
|
|
336
|
+
},
|
|
337
|
+
},
|
|
309
338
|
{
|
|
310
339
|
name: "cancelled",
|
|
311
340
|
phase: "cancelled",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/utils/tool-repair/registry.ts"],"names":[],"mappings":"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","sourcesContent":["export const TOOL_REPAIR_MODE_NAMES = [\n\t\"nullOptionalDrop\",\n\t\"nullRequiredBounce\",\n\t\"jsonStringParse\",\n\t\"jsonObjectPropertySalvage\",\n\t\"singleObjectWrap\",\n\t\"bareScalarWrap\",\n\t\"emptyObjectPlaceholder\",\n\t\"numberFromString\",\n\t\"boolFromString\",\n\t\"enumCaseNormalize\",\n\t\"propertyCaseNormalize\",\n\t\"propertyAliasNormalize\",\n\t\"singleElementUnwrap\",\n\t\"stringifiedNumberInArray\",\n\t\"bashCommandArgvJoin\",\n\t\"bashCommandUnwrap\",\n] as const;\n\nexport type ToolRepairModeName = (typeof TOOL_REPAIR_MODE_NAMES)[number];\nexport type ToolRepairFailureModeName = ToolRepairModeName | \"other\";\n\nexport interface ToolRepairRegistryEntry {\n\tname: ToolRepairModeName;\n\tnoteTemplate: string;\n\tstandingRule: string;\n}\n\nexport const TOOL_REPAIR_REGISTRY: readonly ToolRepairRegistryEntry[] = [\n\t{\n\t\tname: \"nullOptionalDrop\",\n\t\tnoteTemplate: \"optional `{path}` was null; omit field\",\n\t\tstandingRule: \"Optional field: omit, never null.\",\n\t},\n\t{\n\t\tname: \"nullRequiredBounce\",\n\t\tnoteTemplate: \"required `{path}` was null; send real value\",\n\t\tstandingRule: \"Required field: real value, never null.\",\n\t},\n\t{\n\t\tname: \"jsonStringParse\",\n\t\tnoteTemplate: \"`{path}` was quoted JSON; send raw array/object\",\n\t\tstandingRule: \"Schema array/object: raw JSON, never quoted JSON string.\",\n\t},\n\t{\n\t\tname: \"jsonObjectPropertySalvage\",\n\t\tnoteTemplate: \"`{path}` was malformed JSON; retained declared properties\",\n\t\tstandingRule: \"JSON object: strict syntax, commas between properties, no extra inner text.\",\n\t},\n\t{\n\t\tname: \"singleObjectWrap\",\n\t\tnoteTemplate: \"`{path}` needs list; wrap object in [ ]\",\n\t\tstandingRule: \"List schema: wrap one object in [ ].\",\n\t},\n\t{\n\t\tname: \"bareScalarWrap\",\n\t\tnoteTemplate: \"`{path}` needs list; wrap scalar in [ ]\",\n\t\tstandingRule: \"List schema: wrap one scalar in [ ].\",\n\t},\n\t{\n\t\tname: \"emptyObjectPlaceholder\",\n\t\tnoteTemplate: \"`{path}` was `{}` placeholder; omit for default\",\n\t\tstandingRule: \"Defaulted object field: omit, never `{}` placeholder.\",\n\t},\n\t{\n\t\tname: \"numberFromString\",\n\t\tnoteTemplate: \"`{path}` was quoted number; send bare number\",\n\t\tstandingRule: \"Number schema: bare number, never quoted.\",\n\t},\n\t{\n\t\tname: \"boolFromString\",\n\t\tnoteTemplate: \"`{path}` was quoted boolean; send bare true/false\",\n\t\tstandingRule: \"Boolean schema: bare true/false, never quoted.\",\n\t},\n\t{\n\t\tname: \"enumCaseNormalize\",\n\t\tnoteTemplate: \"`{path}` normalized to declared enum case/spacing\",\n\t\tstandingRule: \"Enum value: exact declared case/spacing.\",\n\t},\n\t{\n\t\tname: \"propertyCaseNormalize\",\n\t\tnoteTemplate: \"`{path}` used wrong key case; use schema case\",\n\t\tstandingRule: \"Argument property: exact schema name/case.\",\n\t},\n\t{\n\t\tname: \"propertyAliasNormalize\",\n\t\tnoteTemplate: \"`{path}` used property alias; mapped to schema property\",\n\t\tstandingRule: \"Argument property: exact schema property name.\",\n\t},\n\t{\n\t\tname: \"singleElementUnwrap\",\n\t\tnoteTemplate: \"`{path}` needs scalar; unwrap 1-item list\",\n\t\tstandingRule: \"Scalar schema: direct value, never 1-item list.\",\n\t},\n\t{\n\t\tname: \"stringifiedNumberInArray\",\n\t\tnoteTemplate: \"number list `{path}` held quoted values; send bare numbers\",\n\t\tstandingRule: \"Number array: bare numbers, never quoted.\",\n\t},\n\t{\n\t\tname: \"bashCommandArgvJoin\",\n\t\tnoteTemplate: \"bash needs one command string; joined argv values\",\n\t\tstandingRule: \"bash command: one string, never argv array.\",\n\t},\n\t{\n\t\tname: \"bashCommandUnwrap\",\n\t\tnoteTemplate: \"bash `command` needs string; unwrapped object\",\n\t\tstandingRule: \"bash `command`: string, never object wrapper.\",\n\t},\n] as const;\n\nconst registryByName = new Map(TOOL_REPAIR_REGISTRY.map((entry) => [entry.name, entry]));\n\nexport function getToolRepairRegistryEntry(name: ToolRepairModeName): ToolRepairRegistryEntry {\n\tconst entry = registryByName.get(name);\n\tif (!entry) throw new Error(`Unknown tool repair mode: ${name}`);\n\treturn entry;\n}\n\nexport function formatToolRepairNote(name: ToolRepairModeName, path: string): string {\n\treturn getToolRepairRegistryEntry(name).noteTemplate.replaceAll(\"{path}\", path);\n}\n\nexport function formatToolRepairStandingRule(name: ToolRepairModeName): string {\n\treturn getToolRepairRegistryEntry(name).standingRule;\n}\n\nexport type ToolExecutionAttemptMemory = \"retain\" | \"discard\";\nexport type ToolFailurePhase =\n\t| \"validation\"\n\t| \"policy\"\n\t| \"preflight\"\n\t| \"execution\"\n\t| \"timeout\"\n\t| \"cancelled\"\n\t| \"provisioning\";\n\nexport const REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE = {\n\tfailureCode: \"repeated_successful_call\",\n\tdiagnostic: \"The identical phone tool call already succeeded and was not executed again.\",\n\tguidance:\n\t\t\"Use prior successful result; continue. Task complete: answer user. Otherwise call different required tool. Never retry unchanged.\",\n} as const;\n\n/** Stable marker for a tool-owned guard that rejects one operation before external execution. */\nexport const TOOL_OPERATION_REJECTED_MARKER = \"PI_TOOL_OPERATION_REJECTED\";\n/**\n * bash.ts is the only emitter (`${TOOL_OPERATION_REJECTED_MARKER}: ...`) and always places the\n * marker at the very start of the thrown error's message, never mid-sentence. Anchor to a line\n * start so captured stdout/stderr that merely echoes the marker (e.g. a `grep` of this file)\n * cannot masquerade as a tool-owned rejection.\n */\nconst TOOL_OPERATION_REJECTED_LINE_PATTERN = new RegExp(`^${TOOL_OPERATION_REJECTED_MARKER}:`, \"m\");\n\ninterface ToolExecutionErrorCatalogueEntry {\n\tname: string;\n\tphase: ToolFailurePhase;\n\tguidance: string;\n\tfailureCode?: string;\n\tattemptMemory?: ToolExecutionAttemptMemory;\n\tretainDiagnostic?: boolean;\n\t/** Number of unchanged executions permitted after the first failure in one recovery window. */\n\tunchangedRetryLimit?: number;\n\tmatches(message: string): boolean;\n}\n\nexport const TOOL_EXECUTION_ERROR_CATALOGUE = [\n\t{\n\t\tname: \"operationRejected\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"operation_rejected\",\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance:\n\t\t\t\"Operation rejected before execution. Follow the diagnostic: correct or narrow the call, or continue independent work. The runtime remains available.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn TOOL_OPERATION_REJECTED_LINE_PATTERN.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"provisioningFailed\",\n\t\tphase: \"provisioning\",\n\t\tfailureCode: \"provisioning_failed\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Provisioning failed. Use exact diagnostic, fix cause; retry only after environment changes.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_TOOL_PROVISIONING_FAILED\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"commandNotFound\",\n\t\tphase: \"provisioning\",\n\t\tguidance: \"Command not found. Check exact name/available tools before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /^spawn \\S+ ENOENT\\b/i.test(message) || /(?:^|\\n|:)\\s*command not found\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashNoOutput\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Command failed without output. Verify syntax, exact command documentation before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn message === \"(no output)\";\n\t\t},\n\t},\n\t{\n\t\tname: \"bashPosixNotSupported\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Windows host rejects POSIX .sh scripts. Use PowerShell equivalent or invoke executable directly.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /POSIX shell scripts are not supported by the Windows shell contract router/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashNestedShell\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Never wrap command in powershell.exe/pwsh. Invoke .ps1 or command directly.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /Nested shell execution is not supported by the Windows shell contract router/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashMissingCommandWord\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Missing shell command word. Fix empty pipeline element or string quoting before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /Missing command: a pipeline\\/list element has no command word/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashEmptyRedirectTarget\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Empty redirect target. Supply valid file path before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /redirect target expanded to nothing/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"encodingCorruption\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"encoding_corruption\",\n\t\tattemptMemory: \"discard\",\n\t\tguidance:\n\t\t\t\"Change approach: exact UTF-8 replacement unsafe. Use encoding-aware/byte-safe tool; never replay text edit.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_FILE_ENCODING_CORRUPTION\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"repeatedSuccessfulCall\",\n\t\tphase: \"execution\",\n\t\tfailureCode: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.failureCode,\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.guidance,\n\t\tmatches(message: string): boolean {\n\t\t\treturn message === REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic;\n\t\t},\n\t},\n\t{\n\t\tname: \"fileMutationRetarget\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"mutation_retarget_required\",\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance:\n\t\t\t\"Harness retained mutation. Choose corrected target path, reuse exact diagnostic payloadRef; never regenerate content/edits.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_FILE_MUTATION_RETARGET\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"fileNotFound\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"file_not_found\",\n\t\tguidance: \"Path not found. List parent directory or re-read path before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/\\bENOENT\\b/i.test(message) ||\n\t\t\t\t/no such file or directory/i.test(message) ||\n\t\t\t\t/\\b(?:file|path) not found\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"editOldTextNotFound\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"edit_old_text_not_found\",\n\t\tguidance: \"Re-read target; use exact current text before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /(?:oldText|old text|exact text).*(?:not found|no match|failed to match|must match)/is.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"pathOutsideCwd\",\n\t\tphase: \"policy\",\n\t\tguidance: \"Choose path inside current working directory; ask before scope change.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /outside (?:the )?(?:current working directory|cwd|workspace|root)/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"permissionDenied\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"permission_denied\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Access denied. Verify target/current authority; obtain permissions before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:EACCES|EPERM)\\b/i.test(message) || /(?:permission|access) (?:is )?denied/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"invalidOption\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"invalid_option\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Option rejected. Read command help; remove/replace option before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:invalid|unknown|unrecognized) (?:command-line )?(?:option|argument)\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"invalidPattern\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"invalid_pattern\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Invalid search pattern. Simplify or fix regex/glob escaping before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/(?:regex|regular expression|glob) (?:parse )?error\\b/i.test(message) ||\n\t\t\t\t/\\bunclosed (?:group|class)\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"outputLimit\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"output_limit\",\n\t\tguidance: \"Output exceeded bound. Narrow scope, page request, or use retained artifact before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:output|result|response).*(?:limit|truncat|too large)\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"timedOut\",\n\t\tphase: \"timeout\",\n\t\tfailureCode: \"timeout\",\n\t\tunchangedRetryLimit: 1,\n\t\tguidance: \"Operation timed out. Narrow/split work; one unchanged retry only when safe, still required.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/\\b(?:command|operation|process|request|tool)\\s+(?:timed out|timeout(?: after)?)\\b/i.test(message) ||\n\t\t\t\t/\\bETIMEDOUT\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"cancelled\",\n\t\tphase: \"cancelled\",\n\t\tfailureCode: \"cancelled\",\n\t\tguidance: \"Operation cancelled. Retry only when still required, cancellation condition cleared.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/^(?:operation|request|tool) (?:was )?(?:aborted|cancelled|canceled)\\b/i.test(message) ||\n\t\t\t\t/\\bAbortError\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n] as const satisfies readonly ToolExecutionErrorCatalogueEntry[];\n\nexport type ToolExecutionErrorClass = (typeof TOOL_EXECUTION_ERROR_CATALOGUE)[number][\"name\"];\nconst executionErrorCatalogue: readonly ToolExecutionErrorCatalogueEntry[] = TOOL_EXECUTION_ERROR_CATALOGUE;\n\nexport interface ToolExecutionErrorPolicy {\n\tname: ToolExecutionErrorClass;\n\tphase: ToolFailurePhase;\n\tguidance: string;\n\tfailureCode?: string;\n\tattemptMemory: ToolExecutionAttemptMemory;\n\tretainDiagnostic: boolean;\n\tunchangedRetryLimit: number;\n}\n\nexport function getToolExecutionErrorPolicy(errorMessage: string): ToolExecutionErrorPolicy | undefined {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.matches(errorMessage));\n\tif (!entry) return undefined;\n\treturn {\n\t\tname: entry.name as ToolExecutionErrorClass,\n\t\tphase: entry.phase,\n\t\tguidance: entry.guidance,\n\t\t...(entry.failureCode ? { failureCode: entry.failureCode } : {}),\n\t\tattemptMemory: entry.attemptMemory ?? \"retain\",\n\t\tretainDiagnostic: entry.retainDiagnostic ?? false,\n\t\tunchangedRetryLimit: entry.unchangedRetryLimit ?? 0,\n\t};\n}\n\nexport function getToolExecutionAttemptMemory(failureCode: string): ToolExecutionAttemptMemory {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.failureCode === failureCode);\n\treturn entry?.attemptMemory ?? \"retain\";\n}\n\nexport function getToolExecutionUnchangedRetryLimit(failureCode: string): number {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.failureCode === failureCode);\n\treturn entry?.unchangedRetryLimit ?? 0;\n}\n\nexport function getToolExecutionErrorGuidance(errorMessage: string): string | undefined {\n\treturn getToolExecutionErrorPolicy(errorMessage)?.guidance;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/utils/tool-repair/registry.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,2BAA2B;IAC3B,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB;IACxB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,wBAAwB;IACxB,qBAAqB;IACrB,0BAA0B;IAC1B,qBAAqB;IACrB,mBAAmB;CACV,CAAC;AAWX,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACvE;QACC,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,wCAAwC;QACtD,YAAY,EAAE,mCAAmC;KACjD;IACD;QACC,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE,6CAA6C;QAC3D,YAAY,EAAE,yCAAyC;KACvD;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,YAAY,EAAE,iDAAiD;QAC/D,YAAY,EAAE,0DAA0D;KACxE;IACD;QACC,IAAI,EAAE,2BAA2B;QACjC,YAAY,EAAE,2DAA2D;QACzE,YAAY,EAAE,6EAA6E;KAC3F;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,yCAAyC;QACvD,YAAY,EAAE,sCAAsC;KACpD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,yCAAyC;QACvD,YAAY,EAAE,sCAAsC;KACpD;IACD;QACC,IAAI,EAAE,wBAAwB;QAC9B,YAAY,EAAE,iDAAiD;QAC/D,YAAY,EAAE,uDAAuD;KACrE;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,8CAA8C;QAC5D,YAAY,EAAE,2CAA2C;KACzD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,YAAY,EAAE,mDAAmD;QACjE,YAAY,EAAE,gDAAgD;KAC9D;IACD;QACC,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,mDAAmD;QACjE,YAAY,EAAE,0CAA0C;KACxD;IACD;QACC,IAAI,EAAE,uBAAuB;QAC7B,YAAY,EAAE,+CAA+C;QAC7D,YAAY,EAAE,4CAA4C;KAC1D;IACD;QACC,IAAI,EAAE,wBAAwB;QAC9B,YAAY,EAAE,yDAAyD;QACvE,YAAY,EAAE,gDAAgD;KAC9D;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,2CAA2C;QACzD,YAAY,EAAE,iDAAiD;KAC/D;IACD;QACC,IAAI,EAAE,0BAA0B;QAChC,YAAY,EAAE,4DAA4D;QAC1E,YAAY,EAAE,2CAA2C;KACzD;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,YAAY,EAAE,mDAAmD;QACjE,YAAY,EAAE,6CAA6C;KAC3D;IACD;QACC,IAAI,EAAE,mBAAmB;QACzB,YAAY,EAAE,+CAA+C;QAC7D,YAAY,EAAE,+CAA+C;KAC7D;CACQ,CAAC;AAEX,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzF,MAAM,UAAU,0BAA0B,CAAC,IAAwB;IAClE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAwB,EAAE,IAAY;IAC1E,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAwB;IACpE,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AACtD,CAAC;AAYD,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACpD,WAAW,EAAE,0BAA0B;IACvC,UAAU,EAAE,6EAA6E;IACzF,QAAQ,EACP,mIAAmI;CAC3H,CAAC;AAEX,iGAAiG;AACjG,MAAM,CAAC,MAAM,8BAA8B,GAAG,4BAA4B,CAAC;AAC3E;;;;;GAKG;AACH,MAAM,oCAAoC,GAAG,IAAI,MAAM,CAAC,IAAI,8BAA8B,GAAG,EAAE,GAAG,CAAC,CAAC;AAcpG,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C;QACC,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,oBAAoB;QACjC,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EACP,sJAAsJ;QACvJ,OAAO,CAAC,OAAe;YACtB,OAAO,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;KACD;IACD;QACC,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,qBAAqB;QAClC,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,6FAA6F;QACvG,OAAO,CAAC,OAAe;YACtB,OAAO,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;KACD;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,mEAAmE;QAC7E,OAAO,CAAC,OAAe;YACtB,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClG,CAAC;KACD;IACD;QACC,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,yFAAyF;QACnG,OAAO,CAAC,OAAe;YACtB,OAAO,OAAO,KAAK,aAAa,CAAC;QAClC,CAAC;KACD;IACD;QACC,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,kGAAkG;QAC5G,OAAO,CAAC,OAAe;YACtB,OAAO,6EAA6E,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpG,CAAC;KACD;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,6EAA6E;QACvF,OAAO,CAAC,OAAe;YACtB,OAAO,+EAA+E,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtG,CAAC;KACD;IACD;QACC,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,wFAAwF;QAClG,OAAO,CAAC,OAAe;YACtB,OAAO,gEAAgE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvF,CAAC;KACD;IACD;QACC,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,6DAA6D;QACvE,OAAO,CAAC,OAAe;YACtB,OAAO,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;KACD;IACD;QACC,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,qBAAqB;QAClC,aAAa,EAAE,SAAS;QACxB,QAAQ,EACP,6GAA6G;QAC9G,OAAO,CAAC,OAAe;YACtB,OAAO,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;KACD;IACD;QACC,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,qCAAqC,CAAC,WAAW;QAC9D,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,qCAAqC,CAAC,QAAQ;QACxD,OAAO,CAAC,OAAe;YACtB,OAAO,OAAO,KAAK,qCAAqC,CAAC,UAAU,CAAC;QACrE,CAAC;KACD;IACD;QACC,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,4BAA4B;QACzC,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EACP,6HAA6H;QAC9H,OAAO,CAAC,OAAe;YACtB,OAAO,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;KACD;IACD;QACC,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,qEAAqE;QAC/E,OAAO,CAAC,OAAe;YACtB,OAAO,CACN,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC3B,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC1C,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAC5C,CAAC;QACH,CAAC;KACD;IACD;QACC,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,sDAAsD;QAChE,OAAO,CAAC,OAAe;YACtB,OAAO,sFAAsF,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7G,CAAC;KACD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,wEAAwE;QAClF,OAAO,CAAC,OAAe;YACtB,OAAO,oEAAoE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC;KACD;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,mBAAmB;QAChC,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,kFAAkF;QAC5F,OAAO,CAAC,OAAe;YACtB,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvG,CAAC;KACD;IACD;QACC,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,gBAAgB;QAC7B,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,yEAAyE;QACnF,OAAO,CAAC,OAAe;YACtB,OAAO,6EAA6E,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpG,CAAC;KACD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,iBAAiB;QAC9B,gBAAgB,EAAE,IAAI;QACtB,QAAQ,EAAE,2EAA2E;QACrF,OAAO,CAAC,OAAe;YACtB,OAAO,CACN,uDAAuD,CAAC,IAAI,CAAC,OAAO,CAAC;gBACrE,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAC7C,CAAC;QACH,CAAC;KACD;IACD;QACC,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,2FAA2F;QACrG,OAAO,CAAC,OAAe;YACtB,OAAO,8DAA8D,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrF,CAAC;KACD;IACD;QACC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,SAAS;QACtB,mBAAmB,EAAE,CAAC;QACtB,QAAQ,EAAE,6FAA6F;QACvG,OAAO,CAAC,OAAe;YACtB,OAAO,CACN,oFAAoF,CAAC,IAAI,CAAC,OAAO,CAAC;gBAClG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAC9B,CAAC;QACH,CAAC;KACD;IACD;QACC,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,8BAA8B;QAC3C,QAAQ,EACP,+HAA+H;QAChI,OAAO,CAAC,OAAe;YACtB,OAAO,CACN,mDAAmD,CAAC,IAAI,CAAC,OAAO,CAAC;gBACjE,kFAAkF,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChG,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC,CACnE,CAAC;QACH,CAAC;KACD;IACD;QACC,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,mBAAmB;QAChC,QAAQ,EAAE,+FAA+F;QACzG,OAAO,CAAC,OAAe;YACtB,OAAO,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;KACD;IACD;QACC,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,iGAAiG;QAC3G,OAAO,CAAC,OAAe;YACtB,OAAO,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;KACD;IACD;QACC,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,WAAW;QACxB,QAAQ,EAAE,sFAAsF;QAChG,OAAO,CAAC,OAAe;YACtB,OAAO,CACN,wEAAwE,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtF,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAC/B,CAAC;QACH,CAAC;KACD;CAC8D,CAAC;AAGjE,MAAM,uBAAuB,GAAgD,8BAA8B,CAAC;AAY5G,MAAM,UAAU,2BAA2B,CAAC,YAAoB;IAC/D,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO;QACN,IAAI,EAAE,KAAK,CAAC,IAA+B;QAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,QAAQ;QAC9C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,KAAK;QACjD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,CAAC;KACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,WAAmB;IAChE,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACjG,OAAO,KAAK,EAAE,aAAa,IAAI,QAAQ,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,WAAmB;IACtE,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IACjG,OAAO,KAAK,EAAE,mBAAmB,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,YAAoB;IACjE,OAAO,2BAA2B,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC;AAC5D,CAAC","sourcesContent":["export const TOOL_REPAIR_MODE_NAMES = [\n\t\"nullOptionalDrop\",\n\t\"nullRequiredBounce\",\n\t\"jsonStringParse\",\n\t\"jsonObjectPropertySalvage\",\n\t\"singleObjectWrap\",\n\t\"bareScalarWrap\",\n\t\"emptyObjectPlaceholder\",\n\t\"numberFromString\",\n\t\"boolFromString\",\n\t\"enumCaseNormalize\",\n\t\"propertyCaseNormalize\",\n\t\"propertyAliasNormalize\",\n\t\"singleElementUnwrap\",\n\t\"stringifiedNumberInArray\",\n\t\"bashCommandArgvJoin\",\n\t\"bashCommandUnwrap\",\n] as const;\n\nexport type ToolRepairModeName = (typeof TOOL_REPAIR_MODE_NAMES)[number];\nexport type ToolRepairFailureModeName = ToolRepairModeName | \"other\";\n\nexport interface ToolRepairRegistryEntry {\n\tname: ToolRepairModeName;\n\tnoteTemplate: string;\n\tstandingRule: string;\n}\n\nexport const TOOL_REPAIR_REGISTRY: readonly ToolRepairRegistryEntry[] = [\n\t{\n\t\tname: \"nullOptionalDrop\",\n\t\tnoteTemplate: \"optional `{path}` was null; omit field\",\n\t\tstandingRule: \"Optional field: omit, never null.\",\n\t},\n\t{\n\t\tname: \"nullRequiredBounce\",\n\t\tnoteTemplate: \"required `{path}` was null; send real value\",\n\t\tstandingRule: \"Required field: real value, never null.\",\n\t},\n\t{\n\t\tname: \"jsonStringParse\",\n\t\tnoteTemplate: \"`{path}` was quoted JSON; send raw array/object\",\n\t\tstandingRule: \"Schema array/object: raw JSON, never quoted JSON string.\",\n\t},\n\t{\n\t\tname: \"jsonObjectPropertySalvage\",\n\t\tnoteTemplate: \"`{path}` was malformed JSON; retained declared properties\",\n\t\tstandingRule: \"JSON object: strict syntax, commas between properties, no extra inner text.\",\n\t},\n\t{\n\t\tname: \"singleObjectWrap\",\n\t\tnoteTemplate: \"`{path}` needs list; wrap object in [ ]\",\n\t\tstandingRule: \"List schema: wrap one object in [ ].\",\n\t},\n\t{\n\t\tname: \"bareScalarWrap\",\n\t\tnoteTemplate: \"`{path}` needs list; wrap scalar in [ ]\",\n\t\tstandingRule: \"List schema: wrap one scalar in [ ].\",\n\t},\n\t{\n\t\tname: \"emptyObjectPlaceholder\",\n\t\tnoteTemplate: \"`{path}` was `{}` placeholder; omit for default\",\n\t\tstandingRule: \"Defaulted object field: omit, never `{}` placeholder.\",\n\t},\n\t{\n\t\tname: \"numberFromString\",\n\t\tnoteTemplate: \"`{path}` was quoted number; send bare number\",\n\t\tstandingRule: \"Number schema: bare number, never quoted.\",\n\t},\n\t{\n\t\tname: \"boolFromString\",\n\t\tnoteTemplate: \"`{path}` was quoted boolean; send bare true/false\",\n\t\tstandingRule: \"Boolean schema: bare true/false, never quoted.\",\n\t},\n\t{\n\t\tname: \"enumCaseNormalize\",\n\t\tnoteTemplate: \"`{path}` normalized to declared enum case/spacing\",\n\t\tstandingRule: \"Enum value: exact declared case/spacing.\",\n\t},\n\t{\n\t\tname: \"propertyCaseNormalize\",\n\t\tnoteTemplate: \"`{path}` used wrong key case; use schema case\",\n\t\tstandingRule: \"Argument property: exact schema name/case.\",\n\t},\n\t{\n\t\tname: \"propertyAliasNormalize\",\n\t\tnoteTemplate: \"`{path}` used property alias; mapped to schema property\",\n\t\tstandingRule: \"Argument property: exact schema property name.\",\n\t},\n\t{\n\t\tname: \"singleElementUnwrap\",\n\t\tnoteTemplate: \"`{path}` needs scalar; unwrap 1-item list\",\n\t\tstandingRule: \"Scalar schema: direct value, never 1-item list.\",\n\t},\n\t{\n\t\tname: \"stringifiedNumberInArray\",\n\t\tnoteTemplate: \"number list `{path}` held quoted values; send bare numbers\",\n\t\tstandingRule: \"Number array: bare numbers, never quoted.\",\n\t},\n\t{\n\t\tname: \"bashCommandArgvJoin\",\n\t\tnoteTemplate: \"bash needs one command string; joined argv values\",\n\t\tstandingRule: \"bash command: one string, never argv array.\",\n\t},\n\t{\n\t\tname: \"bashCommandUnwrap\",\n\t\tnoteTemplate: \"bash `command` needs string; unwrapped object\",\n\t\tstandingRule: \"bash `command`: string, never object wrapper.\",\n\t},\n] as const;\n\nconst registryByName = new Map(TOOL_REPAIR_REGISTRY.map((entry) => [entry.name, entry]));\n\nexport function getToolRepairRegistryEntry(name: ToolRepairModeName): ToolRepairRegistryEntry {\n\tconst entry = registryByName.get(name);\n\tif (!entry) throw new Error(`Unknown tool repair mode: ${name}`);\n\treturn entry;\n}\n\nexport function formatToolRepairNote(name: ToolRepairModeName, path: string): string {\n\treturn getToolRepairRegistryEntry(name).noteTemplate.replaceAll(\"{path}\", path);\n}\n\nexport function formatToolRepairStandingRule(name: ToolRepairModeName): string {\n\treturn getToolRepairRegistryEntry(name).standingRule;\n}\n\nexport type ToolExecutionAttemptMemory = \"retain\" | \"discard\";\nexport type ToolFailurePhase =\n\t| \"validation\"\n\t| \"policy\"\n\t| \"preflight\"\n\t| \"execution\"\n\t| \"timeout\"\n\t| \"cancelled\"\n\t| \"provisioning\";\n\nexport const REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE = {\n\tfailureCode: \"repeated_successful_call\",\n\tdiagnostic: \"The identical phone tool call already succeeded and was not executed again.\",\n\tguidance:\n\t\t\"Use prior successful result; continue. Task complete: answer user. Otherwise call different required tool. Never retry unchanged.\",\n} as const;\n\n/** Stable marker for a tool-owned guard that rejects one operation before external execution. */\nexport const TOOL_OPERATION_REJECTED_MARKER = \"PI_TOOL_OPERATION_REJECTED\";\n/**\n * bash.ts is the only emitter (`${TOOL_OPERATION_REJECTED_MARKER}: ...`) and always places the\n * marker at the very start of the thrown error's message, never mid-sentence. Anchor to a line\n * start so captured stdout/stderr that merely echoes the marker (e.g. a `grep` of this file)\n * cannot masquerade as a tool-owned rejection.\n */\nconst TOOL_OPERATION_REJECTED_LINE_PATTERN = new RegExp(`^${TOOL_OPERATION_REJECTED_MARKER}:`, \"m\");\n\ninterface ToolExecutionErrorCatalogueEntry {\n\tname: string;\n\tphase: ToolFailurePhase;\n\tguidance: string;\n\tfailureCode?: string;\n\tattemptMemory?: ToolExecutionAttemptMemory;\n\tretainDiagnostic?: boolean;\n\t/** Number of unchanged executions permitted after the first failure in one recovery window. */\n\tunchangedRetryLimit?: number;\n\tmatches(message: string): boolean;\n}\n\nexport const TOOL_EXECUTION_ERROR_CATALOGUE = [\n\t{\n\t\tname: \"operationRejected\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"operation_rejected\",\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance:\n\t\t\t\"Operation rejected before execution. Follow the diagnostic: correct or narrow the call, or continue independent work. The runtime remains available.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn TOOL_OPERATION_REJECTED_LINE_PATTERN.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"provisioningFailed\",\n\t\tphase: \"provisioning\",\n\t\tfailureCode: \"provisioning_failed\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Provisioning failed. Use exact diagnostic, fix cause; retry only after environment changes.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_TOOL_PROVISIONING_FAILED\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"commandNotFound\",\n\t\tphase: \"provisioning\",\n\t\tguidance: \"Command not found. Check exact name/available tools before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /^spawn \\S+ ENOENT\\b/i.test(message) || /(?:^|\\n|:)\\s*command not found\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashNoOutput\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Command failed without output. Verify syntax, exact command documentation before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn message === \"(no output)\";\n\t\t},\n\t},\n\t{\n\t\tname: \"bashPosixNotSupported\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Windows host rejects POSIX .sh scripts. Use PowerShell equivalent or invoke executable directly.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /POSIX shell scripts are not supported by the Windows shell contract router/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashNestedShell\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Never wrap command in powershell.exe/pwsh. Invoke .ps1 or command directly.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /Nested shell execution is not supported by the Windows shell contract router/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashMissingCommandWord\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Missing shell command word. Fix empty pipeline element or string quoting before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /Missing command: a pipeline\\/list element has no command word/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"bashEmptyRedirectTarget\",\n\t\tphase: \"execution\",\n\t\tguidance: \"Empty redirect target. Supply valid file path before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /redirect target expanded to nothing/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"encodingCorruption\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"encoding_corruption\",\n\t\tattemptMemory: \"discard\",\n\t\tguidance:\n\t\t\t\"Change approach: exact UTF-8 replacement unsafe. Use encoding-aware/byte-safe tool; never replay text edit.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_FILE_ENCODING_CORRUPTION\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"repeatedSuccessfulCall\",\n\t\tphase: \"execution\",\n\t\tfailureCode: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.failureCode,\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance: REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.guidance,\n\t\tmatches(message: string): boolean {\n\t\t\treturn message === REPEATED_SUCCESSFUL_TOOL_CALL_FAILURE.diagnostic;\n\t\t},\n\t},\n\t{\n\t\tname: \"fileMutationRetarget\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"mutation_retarget_required\",\n\t\tattemptMemory: \"discard\",\n\t\tretainDiagnostic: true,\n\t\tguidance:\n\t\t\t\"Harness retained mutation. Choose corrected target path, reuse exact diagnostic payloadRef; never regenerate content/edits.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\bPI_FILE_MUTATION_RETARGET\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"fileNotFound\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"file_not_found\",\n\t\tguidance: \"Path not found. List parent directory or re-read path before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/\\bENOENT\\b/i.test(message) ||\n\t\t\t\t/no such file or directory/i.test(message) ||\n\t\t\t\t/\\b(?:file|path) not found\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"editOldTextNotFound\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"edit_old_text_not_found\",\n\t\tguidance: \"Re-read target; use exact current text before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /(?:oldText|old text|exact text).*(?:not found|no match|failed to match|must match)/is.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"pathOutsideCwd\",\n\t\tphase: \"policy\",\n\t\tguidance: \"Choose path inside current working directory; ask before scope change.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /outside (?:the )?(?:current working directory|cwd|workspace|root)/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"permissionDenied\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"permission_denied\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Access denied. Verify target/current authority; obtain permissions before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:EACCES|EPERM)\\b/i.test(message) || /(?:permission|access) (?:is )?denied/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"invalidOption\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"invalid_option\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Option rejected. Read command help; remove/replace option before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:invalid|unknown|unrecognized) (?:command-line )?(?:option|argument)\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"invalidPattern\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"invalid_pattern\",\n\t\tretainDiagnostic: true,\n\t\tguidance: \"Invalid search pattern. Simplify or fix regex/glob escaping before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/(?:regex|regular expression|glob) (?:parse )?error\\b/i.test(message) ||\n\t\t\t\t/\\bunclosed (?:group|class)\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"outputLimit\",\n\t\tphase: \"execution\",\n\t\tfailureCode: \"output_limit\",\n\t\tguidance: \"Output exceeded bound. Narrow scope, page request, or use retained artifact before retry.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /\\b(?:output|result|response).*(?:limit|truncat|too large)\\b/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"timedOut\",\n\t\tphase: \"timeout\",\n\t\tfailureCode: \"timeout\",\n\t\tunchangedRetryLimit: 1,\n\t\tguidance: \"Operation timed out. Narrow/split work; one unchanged retry only when safe, still required.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/\\b(?:command|operation|process|request|tool)\\s+(?:timed out|timeout(?: after)?)\\b/i.test(message) ||\n\t\t\t\t/\\bETIMEDOUT\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"ownerAuthorizationRequired\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"owner_authorization_required\",\n\t\tguidance:\n\t\t\t\"Owner authorization is missing from the current prompt. Do not retry start. Continue without a goal or wait for owner speech.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/goal start requires explicit owner authorization/i.test(message) ||\n\t\t\t\t/tokenBudget requires an exact numeric token ceiling in the current owner prompt/i.test(message) ||\n\t\t\t\t/tokenBudget must equal the owner-requested ceiling/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tname: \"exclusiveArguments\",\n\t\tphase: \"validation\",\n\t\tfailureCode: \"invalid_arguments\",\n\t\tguidance: \"Provide exactly one of the mutually exclusive fields. Do not send both, and do not omit both.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /Provide exactly one of /i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"skillNotEligible\",\n\t\tphase: \"policy\",\n\t\tfailureCode: \"skill_not_eligible\",\n\t\tguidance: \"Skill name is not eligible. Search, then load an exact listed name. Do not retry the same name.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn /No eligible skill named/i.test(message);\n\t\t},\n\t},\n\t{\n\t\tname: \"cancelled\",\n\t\tphase: \"cancelled\",\n\t\tfailureCode: \"cancelled\",\n\t\tguidance: \"Operation cancelled. Retry only when still required, cancellation condition cleared.\",\n\t\tmatches(message: string): boolean {\n\t\t\treturn (\n\t\t\t\t/^(?:operation|request|tool) (?:was )?(?:aborted|cancelled|canceled)\\b/i.test(message) ||\n\t\t\t\t/\\bAbortError\\b/i.test(message)\n\t\t\t);\n\t\t},\n\t},\n] as const satisfies readonly ToolExecutionErrorCatalogueEntry[];\n\nexport type ToolExecutionErrorClass = (typeof TOOL_EXECUTION_ERROR_CATALOGUE)[number][\"name\"];\nconst executionErrorCatalogue: readonly ToolExecutionErrorCatalogueEntry[] = TOOL_EXECUTION_ERROR_CATALOGUE;\n\nexport interface ToolExecutionErrorPolicy {\n\tname: ToolExecutionErrorClass;\n\tphase: ToolFailurePhase;\n\tguidance: string;\n\tfailureCode?: string;\n\tattemptMemory: ToolExecutionAttemptMemory;\n\tretainDiagnostic: boolean;\n\tunchangedRetryLimit: number;\n}\n\nexport function getToolExecutionErrorPolicy(errorMessage: string): ToolExecutionErrorPolicy | undefined {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.matches(errorMessage));\n\tif (!entry) return undefined;\n\treturn {\n\t\tname: entry.name as ToolExecutionErrorClass,\n\t\tphase: entry.phase,\n\t\tguidance: entry.guidance,\n\t\t...(entry.failureCode ? { failureCode: entry.failureCode } : {}),\n\t\tattemptMemory: entry.attemptMemory ?? \"retain\",\n\t\tretainDiagnostic: entry.retainDiagnostic ?? false,\n\t\tunchangedRetryLimit: entry.unchangedRetryLimit ?? 0,\n\t};\n}\n\nexport function getToolExecutionAttemptMemory(failureCode: string): ToolExecutionAttemptMemory {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.failureCode === failureCode);\n\treturn entry?.attemptMemory ?? \"retain\";\n}\n\nexport function getToolExecutionUnchangedRetryLimit(failureCode: string): number {\n\tconst entry = executionErrorCatalogue.find((candidate) => candidate.failureCode === failureCode);\n\treturn entry?.unchangedRetryLimit ?? 0;\n}\n\nexport function getToolExecutionErrorGuidance(errorMessage: string): string | undefined {\n\treturn getToolExecutionErrorPolicy(errorMessage)?.guidance;\n}\n"]}
|