@linnlabs/linnkit 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/cli.cjs +118 -28
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +118 -28
- package/dist/cli.js.map +1 -1
- package/dist/context-manager.cjs +0 -4
- package/dist/context-manager.cjs.map +1 -1
- package/dist/context-manager.js +0 -4
- package/dist/context-manager.js.map +1 -1
- package/dist/{index-Cm-JbzTH.d.cts → index-BanRABEt.d.cts} +14 -3
- package/dist/{index-DRBWi1fy.d.ts → index-Z8NXKNwI.d.ts} +14 -3
- package/dist/index.cjs +146 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +146 -30
- package/dist/index.js.map +1 -1
- package/dist/quickstart.cjs +115 -25
- package/dist/quickstart.cjs.map +1 -1
- package/dist/quickstart.js +115 -25
- package/dist/quickstart.js.map +1 -1
- package/dist/runtime-kernel.cjs +142 -26
- package/dist/runtime-kernel.cjs.map +1 -1
- package/dist/runtime-kernel.d.cts +1 -1
- package/dist/runtime-kernel.d.ts +1 -1
- package/dist/runtime-kernel.js +140 -27
- package/dist/runtime-kernel.js.map +1 -1
- package/dist/testkit.cjs +155 -39
- package/dist/testkit.cjs.map +1 -1
- package/dist/testkit.js +155 -39
- package/dist/testkit.js.map +1 -1
- package/package.json +3 -3
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/args.ts","../src/contracts/messages.ts","../src/contracts/contextPolicy.ts","../src/contracts/agentSpec.ts","../src/contracts/audit.ts","../src/contracts/events.ts","../src/contracts/constants.ts","../src/contracts/execution.ts","../src/contracts/sse.ts","../src/quickstart/toolSchema.ts","../src/quickstart/defineConfig.ts","../src/shared/ids.ts","../src/runtime-kernel/graph-engine/index.ts","../src/shared/logger.ts","../src/runtime-kernel/telemetry/noopTelemetry.ts","../src/runtime-kernel/graph-engine/types.ts","../src/runtime-kernel/graph-engine/engine.ts","../src/runtime-kernel/llm/modelCatalog.ts","../src/runtime-kernel/llm/modelResolver.ts","../src/runtime-kernel/audit/noopAudit.ts","../src/runtime-kernel/llm/toolCallUtils.ts","../src/runtime-kernel/graph-engine/tick-pipeline/helpers.ts","../src/shared/llmAuditRecorder.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/contextAuditMiddleware.ts","../src/shared/TokenCalculator.ts","../src/shared/llmTelemetryContext.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/llmTelemetryMiddleware.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/runModelLockMiddleware.ts","../src/runtime-kernel/graph-engine/tick-pipeline/runTickPipeline.ts","../src/shared/checkpointMarker.ts","../src/runtime-kernel/system-reminder/helpers.ts","../src/runtime-kernel/system-reminder/templates.ts","../src/runtime-kernel/system-reminder/triggers.ts","../src/runtime-kernel/system-reminder/registry.ts","../src/runtime-kernel/system-reminder/rules.ts","../src/runtime-kernel/system-reminder/apply.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/applySystemReminderStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/buildContextStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/buildDecisionStage.ts","../src/runtime-kernel/audit/emitAudit.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/executeLlmStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/prepareCallStage.ts","../src/runtime-kernel/graph-engine/executor.ts","../src/runtime-kernel/graph-engine/graphLocal.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.state.ts","../src/runtime-kernel/events/agentEvents.ts","../src/runtime-kernel/events/provider-sidecar.ts","../src/runtime-kernel/events/agent-to-runtime.ts","../src/runtime-kernel/events/runtime-to-ai-message.ts","../src/runtime-kernel/events/sse-projection.ts","../src/runtime-kernel/events/eventMappers.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.eventBridge.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.finalAnswerProjector.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.helpers.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.observationGovernance.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.protocolFuse.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.stateTransitions.ts","../src/runtime-kernel/tools/argNormalizer.ts","../src/runtime-kernel/tools/idempotency/toolIdempotency.ts","../src/runtime-kernel/tools/toolContextRuntime.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.eventBridge.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.executionSetup.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.ts","../src/runtime-kernel/graph-engine/nodes/userNode.ts","../src/runtime-kernel/graph-engine/nodes/waitUserNode.ts","../src/runtime-kernel/graph-engine/nodes/answerNode.ts","../src/runtime-kernel/graph-engine/checkpointer/base.ts","../src/runtime-kernel/graph-engine/checkpointer/memoryCheckpointer.ts","../src/runtime-kernel/graph-engine/event-store/memoryEventStore.ts","../src/runtime-kernel/graph-engine/event-store/base.ts","../src/runtime-kernel/execution/index.ts","../src/runtime-kernel/execution/event-bus.ts","../src/runtime-kernel/execution/sequencer.ts","../src/shared/errorClassifier.ts","../src/runtime-kernel/execution/runtimeErrorEventFactory.ts","../src/runtime-kernel/llm/policies/policyEngine.ts","../src/runtime-kernel/llm/policies/defaultPolicyEngine.ts","../src/runtime-kernel/llm/request-builder.ts","../src/runtime-kernel/llm/streaming/toolCallStreamAccumulator.ts","../src/runtime-kernel/llm/streaming/markdownHeadingNormalizer.ts","../src/runtime-kernel/llm/streaming/thoughtStreamSegmenter.ts","../src/runtime-kernel/llm/sidecar-replay.ts","../src/runtime-kernel/llm/streaming-adapter.ts","../src/runtime-kernel/llm/retry-fallback-routing.ts","../src/runtime-kernel/llm/usage-telemetry.ts","../src/runtime-kernel/llm/retry-fallback.ts","../src/runtime-kernel/llm/caller.ts","../src/runtime-kernel/run-supervisor/index.ts","../src/runtime-kernel/run-supervisor/memoryRunRegistryStore.ts","../src/runtime-kernel/audit/eventStoreAudit.ts","../src/runtime-kernel/run-supervisor/runErrors.ts","../src/runtime-kernel/run-supervisor/runHandle.ts","../src/runtime-kernel/run-supervisor/runSupervisor.ts","../src/runtime-kernel/audit/consoleAudit.ts","../src/runtime-kernel/testkit/defaultGraphExecutor.ts","../src/quickstart/contextBuilder.ts","../src/quickstart/toolRuntime.ts","../src/quickstart/runCost.ts","../src/quickstart/runAgent.ts","../src/cli/configLoader.ts","../src/cli/env.ts","../src/cli/doctor.ts","../src/cli/templates.ts","../src/cli/init.ts","../src/cli/run.ts","../src/cli/index.ts"],"names":["z","JsonRecord","isAbortSignal","cp","isRecord","usage","logger","readString","readNonEmptyString","readContextCheckpointToolName","resolve","readStringField","readFile","mkdir","dirname","pathToFileURL"],"mappings":"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","file":"cli.js","sourcesContent":["export interface ParsedCli {\n command?: string;\n positional: string[];\n options: Record<string, string | boolean>;\n}\n\nexport function parseCliArgs(argv: readonly string[]): ParsedCli {\n const positional: string[] = [];\n const options: Record<string, string | boolean> = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token.startsWith('--')) {\n const raw = token.slice(2);\n const eqIndex = raw.indexOf('=');\n if (eqIndex >= 0) {\n options[raw.slice(0, eqIndex)] = raw.slice(eqIndex + 1);\n continue;\n }\n const next = argv[index + 1];\n if (next !== undefined && !next.startsWith('--')) {\n options[raw] = next;\n index += 1;\n } else {\n options[raw] = true;\n }\n continue;\n }\n positional.push(token);\n }\n\n const [command, ...rest] = positional;\n return { command, positional: rest, options };\n}\n\nexport function readStringOption(\n options: Record<string, string | boolean>,\n name: string,\n): string | undefined {\n const value = options[name];\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n","import { z } from 'zod';\n\nexport const ProviderReasoningDetails = z.array(z.unknown());\nexport type ProviderReasoningDetails = z.infer<typeof ProviderReasoningDetails>;\n\nexport const ToolCallExtraContent = z.object({\n google: z.object({\n thought_signature: z.string().optional(),\n }).passthrough().optional(),\n}).passthrough();\n\nexport type ToolCallExtraContent = z.infer<typeof ToolCallExtraContent>;\n\nexport const ToolCallWire = z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n extra_content: ToolCallExtraContent.optional(),\n}).passthrough();\n\nexport type ToolCallWire = z.infer<typeof ToolCallWire>;\n\nexport const HistorySummaryMeta = z.object({\n messageType: z.literal('summary'),\n originalMessageCount: z.number().int().positive(),\n compressionRatio: z.number().min(0).max(1).optional(),\n includedOldSummary: z.boolean(),\n replacedMessageIds: z.array(z.string()),\n summarySeq: z.number().int().nonnegative(),\n});\n\nexport type HistorySummaryMeta = z.infer<typeof HistorySummaryMeta>;\n\nexport const ToolCallsMeta = z.object({\n tool_calls: z.array(ToolCallWire),\n reasoning_details: ProviderReasoningDetails.optional(),\n});\n\nexport type ToolCallsMeta = z.infer<typeof ToolCallsMeta>;\n\nexport const ToolOutputMeta = z.object({\n tool_name: z.string(),\n args: z.record(z.unknown()).optional(),\n tool_call_id: z.string(),\n});\n\nexport type ToolOutputMeta = z.infer<typeof ToolOutputMeta>;\n\nexport const ImageInfoMeta = z.object({\n url: z.string().optional(),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n format: z.string().optional(),\n size: z.number().int().nonnegative().optional(),\n});\n\nexport type ImageInfoMeta = z.infer<typeof ImageInfoMeta>;\n\nexport const TaskTrackingMeta = z.object({\n taskType: z.string().optional(),\n taskId: z.string().optional(),\n taskStatus: z.enum(['requested', 'in_progress', 'completed', 'failed']).optional(),\n taskTrackingInfo: z.object({\n startTime: z.number().optional(),\n endTime: z.number().optional(),\n duration: z.number().optional(),\n retryCount: z.number().int().nonnegative().optional(),\n lastError: z.string().optional(),\n }).optional(),\n});\n\nexport type TaskTrackingMeta = z.infer<typeof TaskTrackingMeta>;\n\nexport const PersistentMetadata = z.object({\n messageType: z.literal('summary').optional(),\n originalMessageCount: z.number().int().positive().optional(),\n compressionRatio: z.number().min(0).max(1).optional(),\n includedOldSummary: z.boolean().optional(),\n replacedMessageIds: z.array(z.string()).optional(),\n summarySeq: z.number().int().nonnegative().optional(),\n tool_calls: z.array(ToolCallWire).optional(),\n reasoning_details: ProviderReasoningDetails.optional(),\n tool_name: z.string().optional(),\n args: z.record(z.unknown()).optional(),\n tool_call_id: z.string().optional(),\n raw_output: z.string().optional(),\n image_info: ImageInfoMeta.optional(),\n taskType: z.string().optional(),\n taskId: z.string().optional(),\n taskStatus: z.enum(['requested', 'in_progress', 'completed', 'failed']).optional(),\n taskTrackingInfo: z.object({\n startTime: z.number().optional(),\n endTime: z.number().optional(),\n duration: z.number().optional(),\n retryCount: z.number().int().nonnegative().optional(),\n lastError: z.string().optional(),\n }).optional(),\n fenceKind: z.string().optional(),\n fenceAttrs: z.record(z.unknown()).optional(),\n fencePlacement: z.string().optional(),\n}).passthrough();\n\nexport type PersistentMetadata = z.infer<typeof PersistentMetadata>;\n\nconst BaseMessage = z.object({\n id: z.string(),\n content: z.string(),\n timestamp: z.number().int().nonnegative(),\n metadata: PersistentMetadata.optional(),\n});\n\nexport const SystemMessage = BaseMessage.extend({\n role: z.literal('system'),\n type: z.enum(['system_prompt', 'history_summary', 'context_injection']),\n});\n\nexport type SystemMessage = z.infer<typeof SystemMessage>;\n\nexport const UserMessage = BaseMessage.extend({\n role: z.literal('user'),\n type: z.enum([\n 'user_input',\n 'context_injection',\n 'context_before',\n 'context_after',\n 'document_fragment',\n 'task_request',\n 'image',\n ]),\n});\n\nexport type UserMessage = z.infer<typeof UserMessage>;\n\nexport const AssistantMessage = BaseMessage.extend({\n role: z.literal('assistant'),\n type: z.enum([\n 'thought',\n 'final_answer',\n 'tool_code',\n 'tool_calls',\n 'task_completion',\n ]),\n});\n\nexport type AssistantMessage = z.infer<typeof AssistantMessage>;\n\nexport const ToolMessage = BaseMessage.extend({\n role: z.literal('tool'),\n type: z.literal('tool_output'),\n});\n\nexport type ToolMessage = z.infer<typeof ToolMessage>;\n\nexport const AiMessage = z.discriminatedUnion('role', [\n SystemMessage,\n UserMessage,\n AssistantMessage,\n ToolMessage,\n]);\n\nexport type AiMessage = z.infer<typeof AiMessage>;\n\nexport function createSystemMessage(\n type: SystemMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): SystemMessage {\n return {\n id: crypto.randomUUID(),\n role: 'system',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createUserMessage(\n type: UserMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): UserMessage {\n return {\n id: crypto.randomUUID(),\n role: 'user',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createAssistantMessage(\n type: AssistantMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): AssistantMessage {\n return {\n id: crypto.randomUUID(),\n role: 'assistant',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createToolMessage(\n content: string,\n toolCallId: string,\n toolName: string,\n metadata?: PersistentMetadata,\n): ToolMessage {\n return {\n id: crypto.randomUUID(),\n role: 'tool',\n type: 'tool_output',\n content,\n timestamp: Date.now(),\n metadata: {\n ...metadata,\n tool_call_id: toolCallId,\n tool_name: toolName,\n },\n };\n}\n\nexport function createHistorySummaryMessage(\n content: string,\n summaryMeta: HistorySummaryMeta,\n): SystemMessage {\n return {\n id: crypto.randomUUID(),\n role: 'system',\n type: 'history_summary',\n content,\n timestamp: Date.now(),\n metadata: summaryMeta,\n };\n}\n\nexport function validateAiMessage(data: unknown): z.SafeParseReturnType<unknown, AiMessage> {\n return AiMessage.safeParse(data);\n}\n\nexport function validateHistorySummaryMeta(\n data: unknown,\n): z.SafeParseReturnType<unknown, HistorySummaryMeta> {\n return HistorySummaryMeta.safeParse(data);\n}\n\nexport function isSystemMessage(message: AiMessage): message is SystemMessage {\n return message.role === 'system';\n}\n\nexport function isUserMessage(message: AiMessage): message is UserMessage {\n return message.role === 'user';\n}\n\nexport function isAssistantMessage(message: AiMessage): message is AssistantMessage {\n return message.role === 'assistant';\n}\n\nexport function isToolMessage(message: AiMessage): message is ToolMessage {\n return message.role === 'tool';\n}\n\nexport function isHistorySummaryMessage(message: AiMessage): message is SystemMessage {\n return message.role === 'system'\n && message.type === 'history_summary'\n && message.metadata?.messageType === 'summary';\n}\n\nexport function hasToolCalls(message: AiMessage): boolean {\n return message.role === 'assistant'\n && Array.isArray(message.metadata?.tool_calls)\n && message.metadata.tool_calls.length > 0;\n}\n","import { z } from 'zod';\n\ntype SerializableJsonValue =\n | string\n | number\n | boolean\n | null\n | SerializableJsonValue[]\n | { [key: string]: SerializableJsonValue };\n\nconst SerializableJsonValueSchema: z.ZodType<SerializableJsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(SerializableJsonValueSchema),\n z.record(z.string(), SerializableJsonValueSchema),\n ]),\n);\n\nconst SerializableJsonRecord = z.record(z.string(), SerializableJsonValueSchema);\n\nexport const AgentSpecMessageType = z.enum([\n 'system_prompt',\n 'history_summary',\n 'context_injection',\n 'user_input',\n 'context_before',\n 'context_after',\n 'document_fragment',\n 'task_request',\n 'image',\n 'thought',\n 'final_answer',\n 'tool_code',\n 'tool_calls',\n 'task_completion',\n 'tool_output',\n]);\nexport type AgentSpecMessageType = z.infer<typeof AgentSpecMessageType>;\n\nexport const AgentSpecBudgetPolicy = z.object({\n maxTokens: z.number().int().positive().optional(),\n reservedForResponse: z.number().int().nonnegative().optional(),\n workingMemoryBudgetPercentage: z.number().min(0).max(1).optional(),\n});\nexport type AgentSpecBudgetPolicy = z.infer<typeof AgentSpecBudgetPolicy>;\n\nexport const AgentSpecToolHistoryPolicy = z.object({\n strategy: z.enum(['per-pair', 'per-run', 'none']).optional(),\n keepLatestToolPairs: z.number().int().nonnegative().optional(),\n keepLatestRuns: z.number().int().nonnegative().optional(),\n maxInteractionGroups: z.number().int().nonnegative().optional(),\n overflowStrategy: z.enum(['keep-latest', 'fail-fast']).optional(),\n maxPairTokens: z.number().int().nonnegative().optional(),\n maxOutputSummaryTokens: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecToolHistoryPolicy = z.infer<typeof AgentSpecToolHistoryPolicy>;\n\nexport const AgentSpecToolObservationGovernancePolicy = z.object({\n enabled: z.boolean().optional(),\n maxChars: z.number().int().positive().optional(),\n maxLines: z.number().int().positive().optional(),\n});\nexport type AgentSpecToolObservationGovernancePolicy = z.infer<typeof AgentSpecToolObservationGovernancePolicy>;\n\nexport const AgentSpecToolOutputPolicy = z.object({\n observationGovernance: AgentSpecToolObservationGovernancePolicy.optional(),\n});\nexport type AgentSpecToolOutputPolicy = z.infer<typeof AgentSpecToolOutputPolicy>;\n\nexport const AgentSpecProviderReplayPolicy = z.object({\n provider: z.string().min(1).optional(),\n requiresReasoningDetailsForToolReplay: z.boolean().optional(),\n missingSidecarBehavior: z.enum(['allow', 'degrade_to_text', 'provider_empty_replay_field']).optional(),\n});\nexport type AgentSpecProviderReplayPolicy = z.infer<typeof AgentSpecProviderReplayPolicy>;\n\nexport const AgentSpecSummarizationPolicy = z.object({\n triggerThreshold: z.number().min(0).max(1).optional(),\n budgetPercentage: z.number().min(0).max(1).optional(),\n oldestMessagesPercentage: z.number().min(0).max(1).optional(),\n agentId: z.string().min(1).optional(),\n failureBehavior: z.enum(['fail-fast', 'continue-if-within-budget']).optional(),\n});\nexport type AgentSpecSummarizationPolicy = z.infer<typeof AgentSpecSummarizationPolicy>;\n\nexport const AgentSpecMustKeepTruncationRule = z.object({\n fenceKind: z.string().min(1),\n maxBudgetFraction: z.number().gt(0).max(1),\n strategyName: z.string().min(1),\n});\nexport type AgentSpecMustKeepTruncationRule = z.infer<typeof AgentSpecMustKeepTruncationRule>;\n\nexport const AgentSpecMustKeepPolicy = z.object({\n alwaysKeepTypes: z.array(AgentSpecMessageType).optional(),\n alwaysKeepFenceKinds: z.array(z.string().min(1)).optional(),\n truncationRules: z.array(AgentSpecMustKeepTruncationRule).optional(),\n});\nexport type AgentSpecMustKeepPolicy = z.infer<typeof AgentSpecMustKeepPolicy>;\n\nexport const AgentSpecWorkingMemoryPolicy = z.object({\n maxRecentToolInteractions: z.number().int().nonnegative().optional(),\n minToolInteractionsToKeep: z.number().int().nonnegative().optional(),\n toolPairingSearchRange: z.number().int().positive().optional(),\n});\nexport type AgentSpecWorkingMemoryPolicy = z.infer<typeof AgentSpecWorkingMemoryPolicy>;\n\nexport const AgentSpecCheckpointPolicy = z.object({\n keepPairsBefore: z.number().int().nonnegative().optional(),\n triggerToolName: z.string().min(1).optional(),\n});\nexport type AgentSpecCheckpointPolicy = z.infer<typeof AgentSpecCheckpointPolicy>;\n\nexport const AgentSpecReasoningRetentionPolicy = z.object({\n keepLatestThoughts: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecReasoningRetentionPolicy = z.infer<typeof AgentSpecReasoningRetentionPolicy>;\n\nexport const AgentSpecTokenEstimationPolicy = z.object({\n encoding: z.string().min(1).optional(),\n avgCharsPerToken: z.number().positive().optional(),\n toolCallOverhead: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecTokenEstimationPolicy = z.infer<typeof AgentSpecTokenEstimationPolicy>;\n\nexport const SYSTEM_REMINDER_BUILTIN_TRIGGER_KINDS = [\n 'phase-equals',\n 'remaining-steps-leq',\n 'step-count-modulo',\n 'tool-call-streak',\n 'budget-warning',\n 'agent-has-tool',\n] as const;\n\nexport const AgentSpecSystemReminderTrigger = z.object({\n kind: z.string().min(1),\n threshold: z.number().nonnegative().optional(),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n moduloStep: z.boolean().optional(),\n toolName: z.string().min(1).optional(),\n period: z.number().int().positive().optional(),\n minStep: z.number().int().nonnegative().optional(),\n ratio: z.number().min(0).max(1).optional(),\n config: SerializableJsonRecord.optional(),\n});\nexport type AgentSpecSystemReminderTrigger = z.infer<typeof AgentSpecSystemReminderTrigger>;\n\nexport const AgentSpecSystemReminderExtraRule = z.object({\n id: z.string().min(1),\n trigger: AgentSpecSystemReminderTrigger,\n contentTemplate: z.string().min(1),\n contentArgs: SerializableJsonRecord.optional(),\n});\nexport type AgentSpecSystemReminderExtraRule = z.infer<typeof AgentSpecSystemReminderExtraRule>;\n\nexport const AgentSpecSystemReminderPolicy = z.object({\n enabledRuleIds: z.array(z.string().min(1)).nullable().optional(),\n disabledRuleIds: z.array(z.string().min(1)).optional(),\n thresholds: z.object({\n toolCallStreak: z.number().int().nonnegative().optional(),\n taskstateReflectionPeriod: z.number().int().positive().optional(),\n budgetWarningRatio: z.number().min(0).max(1).optional(),\n lastStepsHintThreshold: z.number().int().nonnegative().optional(),\n }).optional(),\n extraRules: z.array(AgentSpecSystemReminderExtraRule).optional(),\n}).superRefine((value, ctx) => {\n if (value.enabledRuleIds !== undefined && value.enabledRuleIds !== null && value.disabledRuleIds?.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['disabledRuleIds'],\n message: 'enabledRuleIds and disabledRuleIds cannot be configured at the same time',\n });\n }\n});\nexport type AgentSpecSystemReminderPolicy = z.infer<typeof AgentSpecSystemReminderPolicy>;\n\nexport const AgentSpecContextTracePolicy = z.object({\n enabled: z.boolean().optional(),\n includeMessageIds: z.boolean().optional(),\n includeTokenBreakdown: z.boolean().optional(),\n maxTraceEvents: z.number().int().positive().optional(),\n});\nexport type AgentSpecContextTracePolicy = z.infer<typeof AgentSpecContextTracePolicy>;\n\nexport const AgentSpecContextPolicy = z.object({\n profileId: z.string().min(1),\n budget: AgentSpecBudgetPolicy.optional(),\n toolHistory: AgentSpecToolHistoryPolicy.optional(),\n toolOutput: AgentSpecToolOutputPolicy.optional(),\n providerReplay: AgentSpecProviderReplayPolicy.optional(),\n summarization: AgentSpecSummarizationPolicy.optional(),\n mustKeep: AgentSpecMustKeepPolicy.optional(),\n workingMemory: AgentSpecWorkingMemoryPolicy.optional(),\n checkpoint: AgentSpecCheckpointPolicy.optional(),\n reasoningRetention: AgentSpecReasoningRetentionPolicy.optional(),\n tokenEstimation: AgentSpecTokenEstimationPolicy.optional(),\n systemReminder: AgentSpecSystemReminderPolicy.optional(),\n contextTrace: AgentSpecContextTracePolicy.optional(),\n});\nexport type AgentSpecContextPolicy = z.infer<typeof AgentSpecContextPolicy>;\n\nexport type AgentSpecContextPolicyInput = Omit<z.input<typeof AgentSpecContextPolicy>, 'profileId'> & {\n profileId?: string;\n};\n\nconst DEFAULT_CONTEXT_POLICY: Required<AgentSpecContextPolicy> = {\n profileId: 'agent',\n budget: {\n maxTokens: 120000,\n reservedForResponse: 2400,\n workingMemoryBudgetPercentage: 0.7,\n },\n toolHistory: {\n strategy: 'per-run',\n keepLatestToolPairs: 2,\n keepLatestRuns: 1,\n maxInteractionGroups: 12,\n overflowStrategy: 'keep-latest',\n maxPairTokens: 6000,\n maxOutputSummaryTokens: 1000,\n },\n toolOutput: {\n observationGovernance: {\n enabled: true,\n maxChars: 20_000,\n maxLines: 1_200,\n },\n },\n providerReplay: {},\n summarization: {\n triggerThreshold: 0.7,\n budgetPercentage: 0.12,\n oldestMessagesPercentage: 0.75,\n failureBehavior: 'fail-fast',\n },\n mustKeep: {\n alwaysKeepTypes: ['system_prompt', 'user_input'],\n alwaysKeepFenceKinds: [],\n truncationRules: [],\n },\n workingMemory: {\n maxRecentToolInteractions: 2,\n minToolInteractionsToKeep: 2,\n toolPairingSearchRange: 10,\n },\n checkpoint: {\n keepPairsBefore: 2,\n triggerToolName: 'context_checkpoint',\n },\n reasoningRetention: {\n keepLatestThoughts: 1,\n },\n tokenEstimation: {\n encoding: 'cl100k_base',\n avgCharsPerToken: 2.0,\n toolCallOverhead: 50,\n },\n systemReminder: {\n enabledRuleIds: null,\n disabledRuleIds: [],\n thresholds: {\n toolCallStreak: 10,\n taskstateReflectionPeriod: 30,\n budgetWarningRatio: 0.9,\n lastStepsHintThreshold: 0,\n },\n extraRules: [],\n },\n contextTrace: {\n enabled: false,\n includeMessageIds: true,\n includeTokenBreakdown: true,\n maxTraceEvents: 200,\n },\n};\n\n/**\n * 创建完整 contextPolicy。\n *\n * 中文备注:\n * - schema 保持 optional,避免现有 host 的 `{ profileId: 'agent' }` 类型大面积变红;\n * - 需要完整默认值时走这个 helper,后续 F1.2/F1.3 的 adapter 与 fallback 会复用它。\n */\nexport function defineContextPolicy(input: AgentSpecContextPolicyInput = {}): AgentSpecContextPolicy {\n const merged: Required<AgentSpecContextPolicy> = {\n profileId: input.profileId ?? DEFAULT_CONTEXT_POLICY.profileId,\n budget: { ...DEFAULT_CONTEXT_POLICY.budget, ...input.budget },\n toolHistory: { ...DEFAULT_CONTEXT_POLICY.toolHistory, ...input.toolHistory },\n toolOutput: {\n ...DEFAULT_CONTEXT_POLICY.toolOutput,\n ...input.toolOutput,\n observationGovernance: {\n ...DEFAULT_CONTEXT_POLICY.toolOutput.observationGovernance,\n ...input.toolOutput?.observationGovernance,\n },\n },\n providerReplay: { ...DEFAULT_CONTEXT_POLICY.providerReplay, ...input.providerReplay },\n summarization: { ...DEFAULT_CONTEXT_POLICY.summarization, ...input.summarization },\n mustKeep: { ...DEFAULT_CONTEXT_POLICY.mustKeep, ...input.mustKeep },\n workingMemory: { ...DEFAULT_CONTEXT_POLICY.workingMemory, ...input.workingMemory },\n checkpoint: { ...DEFAULT_CONTEXT_POLICY.checkpoint, ...input.checkpoint },\n reasoningRetention: { ...DEFAULT_CONTEXT_POLICY.reasoningRetention, ...input.reasoningRetention },\n tokenEstimation: { ...DEFAULT_CONTEXT_POLICY.tokenEstimation, ...input.tokenEstimation },\n systemReminder: {\n ...DEFAULT_CONTEXT_POLICY.systemReminder,\n ...input.systemReminder,\n thresholds: {\n ...DEFAULT_CONTEXT_POLICY.systemReminder.thresholds,\n ...input.systemReminder?.thresholds,\n },\n extraRules: input.systemReminder?.extraRules ?? DEFAULT_CONTEXT_POLICY.systemReminder.extraRules,\n },\n contextTrace: { ...DEFAULT_CONTEXT_POLICY.contextTrace, ...input.contextTrace },\n };\n\n return AgentSpecContextPolicy.parse(merged);\n}\n","import { z } from 'zod';\nimport { AgentSpecContextPolicy } from './contextPolicy';\n\nconst JsonRecord = z.record(z.string(), z.unknown());\n\n/**\n * 工具参数 schema 在 AgentSpec 里是可序列化契约,不是运行时 zod 对象。\n * 这里主动拦截 zod-like 对象,避免把 `z.any()` 一类实现细节混进协议层。\n */\nconst ToolArgsSchemaSpec = JsonRecord.superRefine((value, ctx) => {\n const parse = value['parse'];\n const safeParse = value['safeParse'];\n const definition = value['_def'];\n if (typeof parse === 'function' && typeof safeParse === 'function' && definition !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'argsSchema must be a serializable record, not a runtime zod schema',\n });\n }\n});\n\nexport const AgentCapability = z.string().min(1);\nexport type AgentCapability = z.infer<typeof AgentCapability>;\n\nexport const ToolBindingSpec = z.object({\n toolId: z.string().min(1),\n bindingId: z.string().min(1).optional(),\n argsSchema: ToolArgsSchemaSpec.optional(),\n config: JsonRecord.optional(),\n metadata: JsonRecord.optional(),\n});\nexport type ToolBindingSpec = z.infer<typeof ToolBindingSpec>;\n\nexport const AgentSpecModelHints = z.object({\n preferredProviders: z.array(z.string().min(1)).optional(),\n preferredModels: z.array(z.string().min(1)).optional(),\n fallbackChain: z.array(z.string().min(1)).optional(),\n});\nexport type AgentSpecModelHints = z.infer<typeof AgentSpecModelHints>;\n\nexport const AgentSpecAuditConfig = z.object({\n redactionLevel: z.enum(['none', 'standard', 'strict']).optional(),\n pii: z.boolean().optional(),\n});\nexport type AgentSpecAuditConfig = z.infer<typeof AgentSpecAuditConfig>;\n\nexport const AgentSpec = z.object({\n id: z.string().min(1),\n version: z.string().min(1),\n role: z.string().optional(),\n description: z.string().optional(),\n capabilities: z.array(AgentCapability),\n tools: z.array(ToolBindingSpec),\n contextPolicy: AgentSpecContextPolicy,\n modelHints: AgentSpecModelHints.optional(),\n audit: AgentSpecAuditConfig.optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AgentSpec = z.infer<typeof AgentSpec>;\n","import { z } from 'zod';\n\nconst JsonRecord = z.record(z.string(), z.unknown());\n\nexport const AUDIT_ACTIONS = [\n 'model.select',\n 'model.fallback',\n 'tool.allow',\n 'tool.deny',\n 'wait_user.request',\n 'sandbox.decide',\n 'run.cancel',\n 'run.pause',\n 'run.resume',\n 'memory.write',\n] as const;\n\nexport const AUDIT_DECISION_OUTCOMES = [\n 'allowed',\n 'denied',\n 'fallback',\n 'retry',\n 'cancelled',\n 'paused',\n 'resumed',\n 'requested',\n 'recorded',\n] as const;\n\nexport const AuditActor = z.object({\n kind: z.enum(['system', 'host', 'agent', 'model', 'tool', 'user']),\n id: z.string().min(1).optional(),\n name: z.string().min(1).optional(),\n});\nexport type AuditActor = z.infer<typeof AuditActor>;\n\nexport const AuditDecision = z.object({\n outcome: z.enum(AUDIT_DECISION_OUTCOMES),\n reason: z.string().optional(),\n policy: z.string().optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditDecision = z.infer<typeof AuditDecision>;\n\nexport const AuditEvidence = z.object({\n kind: z.string().min(1),\n ref: z.string().min(1).optional(),\n summary: z.string().optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditEvidence = z.infer<typeof AuditEvidence>;\n\nexport const AuditCostDelta = z.object({\n tokensInput: z.number().int().nonnegative().optional(),\n tokensOutput: z.number().int().nonnegative().optional(),\n totalCostUsd: z.number().nonnegative().optional(),\n latencyMs: z.number().nonnegative().optional(),\n});\nexport type AuditCostDelta = z.infer<typeof AuditCostDelta>;\n\nexport const AuditScope = z.object({\n conversationId: z.string().min(1).optional(),\n runId: z.string().min(1).optional(),\n parentRunId: z.string().min(1).optional(),\n turnId: z.string().min(1).optional(),\n traceId: z.string().min(1).optional(),\n agentSpecId: z.string().min(1).optional(),\n toolCallId: z.string().min(1).optional(),\n toolName: z.string().min(1).optional(),\n modelId: z.string().min(1).optional(),\n nodeId: z.string().min(1).optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditScope = z.infer<typeof AuditScope>;\n\n/**\n * 标准审计信封。\n *\n * 中文备注:\n * - action 保持 string,以便 host 扩展自己的动作名;\n * - decision/evidence/costDelta 都是可选事实片段,避免把所有审计场景压成同一种形状;\n * - envelope 必须追加只读,更新/撤回应追加新的补偿 envelope。\n */\nexport const AuditEnvelope = z.object({\n envelopeId: z.string().min(1),\n runId: z.string().min(1),\n parentRunId: z.string().min(1).optional(),\n ts: z.number().int().nonnegative(),\n actor: AuditActor,\n action: z.string().min(1),\n decision: AuditDecision.optional(),\n evidence: z.array(AuditEvidence).optional(),\n costDelta: AuditCostDelta.optional(),\n scope: AuditScope.optional(),\n});\nexport type AuditEnvelope = z.infer<typeof AuditEnvelope>;\n","import { z } from 'zod';\nimport { AuditEnvelope } from './audit';\n\nexport const BaseEvent = z.object({\n id: z.string(),\n conversation_id: z.string(),\n timestamp: z.number(),\n metadata: z.record(z.unknown()).optional(),\n version: z.literal(1).default(1),\n turn_id: z.string(),\n ephemeral: z.boolean().optional(),\n});\n\nexport const ToolCallPhase = z.enum(['start', 'update', 'complete', 'error']);\nexport const Status = z.enum(['loading', 'success', 'error']);\nexport const AgentTodoStatus = z.enum(['pending', 'in_progress', 'completed', 'cancelled']);\n\nexport const AgentTodoItem = z.object({\n id: z.string(),\n content: z.string(),\n status: AgentTodoStatus,\n});\n\nexport const ProviderReasoningDetailsPayload = z.array(z.unknown());\nexport type ProviderReasoningDetailsPayload = z.infer<typeof ProviderReasoningDetailsPayload>;\n\nexport const ToolCallDecisionPayload = z.object({\n args: z.record(z.any()).optional(),\n tool_calls: z.array(z.unknown()).optional(),\n /**\n * 不透明 provider reasoning replay blocks。\n *\n * RuntimeEvent 层的标准位置是 assistant 产出事件携带 reasoning_details;\n * context-manager 会把它回放到 AiMessage.metadata.reasoning_details。\n */\n reasoning_details: ProviderReasoningDetailsPayload.optional(),\n}).passthrough();\n\nexport type ToolCallDecisionPayload = z.infer<typeof ToolCallDecisionPayload>;\n\nexport const RuntimeEvent = z.discriminatedUnion('type', [\n BaseEvent.extend({\n type: z.literal('user_input'),\n content: z.string(),\n raw_content: z.string().optional(),\n source: z.enum(['user', 'editor', 'system']).default('user'),\n }),\n BaseEvent.extend({\n type: z.literal('thought'),\n content: z.string(),\n thought_message_id: z.string().optional(),\n delta: z.string().optional(),\n is_complete: z.boolean().default(false),\n }),\n BaseEvent.extend({\n type: z.literal('tool_call_decision'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: ToolCallPhase,\n status: Status,\n args: z.record(z.any()).optional(),\n payload: ToolCallDecisionPayload.optional(),\n parent_tool_call_id: z.string().optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('tool_process'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: ToolCallPhase,\n status: Status,\n args: z.record(z.any()).optional(),\n payload: z.record(z.any()).optional(),\n parent_tool_call_id: z.string().optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('tool_output'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n status: z.enum(['success', 'error']),\n output: z.any().optional(),\n payload: z.record(z.any()).optional(),\n error: z.string().optional(),\n duration_ms: z.number().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('todo_updated'),\n todo_list_id: z.string(),\n todo_list_version: z.number().int().nonnegative(),\n items: z.array(AgentTodoItem),\n }),\n BaseEvent.extend({\n type: z.literal('subrun_trace'),\n parent_tool_call_id: z.string(),\n subrun_id: z.string(),\n subrun_parent_id: z.string().optional(),\n kind: z.enum([\n 'thought_delta',\n 'thought_complete',\n 'tool_call_decision',\n 'tool_process',\n 'tool_output',\n 'final_answer_chunk',\n 'final_answer',\n ]),\n delta: z.string().optional(),\n content: z.string().optional(),\n tool_name: z.string().optional(),\n tool_call_id: z.string().optional(),\n phase: ToolCallPhase.optional(),\n status: Status.optional(),\n args: z.unknown().optional(),\n output: z.unknown().optional(),\n duration_ms: z.number().optional(),\n meta: z.record(z.unknown()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('requires_user_interaction'),\n form: z.any().optional(),\n interaction_type: z.string().optional(),\n prompt: z.string().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('audit_envelope'),\n envelope: AuditEnvelope,\n }),\n BaseEvent.extend({\n type: z.literal('final_answer'),\n answer_id: z.string(),\n content: z.string(),\n is_complete: z.boolean().default(true),\n reasoning_details: ProviderReasoningDetailsPayload.optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('final_answer_chunk'),\n answer_id: z.string(),\n seq: z.number().int().nonnegative(),\n content: z.string(),\n is_last: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('history_summary'),\n content: z.string(),\n replaced_message_ids: z.array(z.string()),\n summary_seq: z.number().int().nonnegative(),\n original_message_count: z.number().int().nonnegative().optional(),\n compression_ratio: z.number().min(0).max(1).optional(),\n included_old_summary: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('error'),\n error: z.string(),\n details: z.any().optional(),\n error_code: z.string().optional(),\n retryable: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('control'),\n op: z.enum(['truncate_after', 'replace', 'redo', 'branch']),\n target_id: z.string().optional(),\n reason: z.string().optional(),\n meta: z.any().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('stream_end'),\n reason: z.enum(['complete', 'error', 'interrupted', 'timeout']).optional(),\n reason_message: z.string().optional(),\n stats: z.object({\n total_events: z.number().optional(),\n duration_ms: z.number().optional(),\n error_count: z.number().optional(),\n }).optional(),\n }),\n]);\n\nexport type RuntimeEvent = z.infer<typeof RuntimeEvent>;\nexport type UserInputEvent = Extract<RuntimeEvent, { type: 'user_input' }>;\nexport type ThoughtEvent = Extract<RuntimeEvent, { type: 'thought' }>;\nexport type ToolCallDecisionEvent = Extract<RuntimeEvent, { type: 'tool_call_decision' }>;\nexport type ToolProcessEvent = Extract<RuntimeEvent, { type: 'tool_process' }>;\nexport type ToolOutputEvent = Extract<RuntimeEvent, { type: 'tool_output' }>;\nexport type TodoUpdatedEvent = Extract<RuntimeEvent, { type: 'todo_updated' }>;\nexport type SubRunTraceEvent = Extract<RuntimeEvent, { type: 'subrun_trace' }>;\nexport type RequiresUserInteractionEvent = Extract<RuntimeEvent, { type: 'requires_user_interaction' }>;\nexport type AuditEnvelopeEvent = Extract<RuntimeEvent, { type: 'audit_envelope' }>;\nexport type FinalAnswerEvent = Extract<RuntimeEvent, { type: 'final_answer' }>;\nexport type FinalAnswerChunkEvent = Extract<RuntimeEvent, { type: 'final_answer_chunk' }>;\nexport type HistorySummaryEvent = Extract<RuntimeEvent, { type: 'history_summary' }>;\nexport type ErrorEvent = Extract<RuntimeEvent, { type: 'error' }>;\nexport type ControlEvent = Extract<RuntimeEvent, { type: 'control' }>;\nexport type StreamEndEvent = Extract<RuntimeEvent, { type: 'stream_end' }>;\n\nexport const validateRuntimeEvent = (event: unknown) => RuntimeEvent.safeParse(event);\nexport const validateRuntimeEvents = (events: unknown[]) => z.array(RuntimeEvent).safeParse(events);\n\nexport const createUserInputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n options: Partial<UserInputEvent> = {},\n): UserInputEvent => ({\n type: 'user_input',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n source: 'user',\n ...options,\n});\n\nexport const createThoughtEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n options: Partial<ThoughtEvent> = {},\n): ThoughtEvent => ({\n type: 'thought',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n is_complete: false,\n ...options,\n});\n\nexport const createToolCallDecisionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n options: Partial<ToolCallDecisionEvent> = {},\n): ToolCallDecisionEvent => ({\n type: 'tool_call_decision',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n ...options,\n});\n\nexport const createToolProcessEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n options: Partial<ToolProcessEvent> = {},\n): ToolProcessEvent => ({\n type: 'tool_process',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n ...options,\n});\n\nexport const createSubRunTraceEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n parentToolCallId: string,\n subrunId: string,\n kind: SubRunTraceEvent['kind'],\n options: Partial<SubRunTraceEvent> = {},\n): SubRunTraceEvent => ({\n type: 'subrun_trace',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n ephemeral: true,\n parent_tool_call_id: parentToolCallId,\n subrun_id: subrunId,\n kind,\n ...options,\n});\n\nexport const createToolOutputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n output: unknown,\n status: 'success' | 'error' = 'success',\n options: Partial<ToolOutputEvent> = {},\n): ToolOutputEvent => ({\n type: 'tool_output',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n status,\n output,\n ...options,\n});\n\nexport const createTodoUpdatedEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n todoListId: string,\n todoListVersion: number,\n items: TodoUpdatedEvent['items'],\n options: Partial<TodoUpdatedEvent> = {},\n): TodoUpdatedEvent => ({\n type: 'todo_updated',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n todo_list_id: todoListId,\n todo_list_version: todoListVersion,\n items,\n ...options,\n});\n\nexport const createFinalAnswerEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n content: string,\n options: Partial<FinalAnswerEvent> = {},\n): FinalAnswerEvent => ({\n type: 'final_answer',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n answer_id: answerId,\n content,\n is_complete: true,\n ...options,\n});\n\nexport const createAuditEnvelopeEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n envelope: AuditEnvelopeEvent['envelope'],\n options: Partial<AuditEnvelopeEvent> = {},\n): AuditEnvelopeEvent => ({\n type: 'audit_envelope',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: envelope.ts,\n version: 1,\n envelope,\n metadata: {\n audit_action: envelope.action,\n run_context: {\n runId: envelope.runId,\n parentId: envelope.parentRunId,\n traceId: envelope.scope?.traceId,\n },\n },\n ...options,\n});\n\nexport const createFinalAnswerChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n seq: number,\n content: string,\n options: Partial<FinalAnswerChunkEvent> = {},\n): FinalAnswerChunkEvent => ({\n type: 'final_answer_chunk',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n answer_id: answerId,\n seq,\n content,\n ...options,\n});\n\nexport const createHistorySummaryEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n replacedMessageIds: string[],\n summarySeq: number,\n options: Partial<HistorySummaryEvent> = {},\n): HistorySummaryEvent => ({\n type: 'history_summary',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n replaced_message_ids: replacedMessageIds,\n summary_seq: summarySeq,\n ...options,\n});\n\nexport const createErrorEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n error: string,\n options: Partial<ErrorEvent> = {},\n): ErrorEvent => ({\n type: 'error',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n error,\n ...options,\n});\n\nexport const createStreamEndEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<StreamEndEvent> = {},\n): StreamEndEvent => ({\n type: 'stream_end',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n ...options,\n});\n","export const DEFAULT_MAX_STEPS = 80;\n","import { z } from 'zod';\n\nexport const ExecutionTraceContext = z.object({\n execution_id: z.string().describe('The unique identifier for a single, complete execution flow.'),\n trace_id: z.string().optional().describe('An optional trace ID for correlating logs in an APM system.'),\n});\n\nconst EventEnvelopeSchema = z.object({\n seq: z.number().int().nonnegative().describe('A monotonically increasing sequence number within a single execution.'),\n timestamp: z.number().describe('The high-precision timestamp of when the event occurred.'),\n trace: ExecutionTraceContext,\n source: z.string().describe(\"The origin of the event, e.g., 'ai', 'tool:file_reader', 'system:summary'.\"),\n payload: z.unknown(),\n render_hint: z.object({\n card: z.enum(['normal', 'collapsible', 'none', 'image', 'interactive']).optional().describe('Hint for how the UI card should be rendered.'),\n content: z.enum(['markdown', 'text', 'json', 'image_url', 'code']).default('text').describe('Hint for how the content itself should be interpreted.'),\n }).optional(),\n run_location: z.enum(['frontend', 'backend']).optional().describe('Specifies where a tool action should be or was executed.'),\n});\n\nexport const EventEnvelope = EventEnvelopeSchema;\n\ntype EventEnvelopeBase = z.infer<typeof EventEnvelopeSchema>;\n\nexport type EventEnvelope<TPayload = unknown> = Omit<EventEnvelopeBase, 'payload'> & {\n payload: TPayload;\n};\n\nexport type ExecutionTraceContext = z.infer<typeof ExecutionTraceContext>;\n","import { z } from 'zod';\n\nexport const BaseSSEEvent = z.object({\n id: z.string(),\n timestamp: z.number(),\n conversation_id: z.string(),\n turn_id: z.string(),\n metadata: z.record(z.unknown()).optional(),\n});\n\nexport type BaseSSEEvent = z.infer<typeof BaseSSEEvent>;\n\nexport const SSEThoughtEvent = BaseSSEEvent.extend({\n type: z.literal('thought'),\n thought_message_id: z.string().optional(),\n delta: z.string().optional(),\n content: z.string().optional(),\n is_complete: z.boolean().default(false),\n});\n\nexport type SSEThoughtEvent = z.infer<typeof SSEThoughtEvent>;\n\nexport const SSEFinalAnswerChunkEvent = BaseSSEEvent.extend({\n type: z.literal('final_answer_chunk'),\n answer_id: z.string(),\n seq: z.number().int().nonnegative(),\n chunk: z.string(),\n is_last: z.boolean().optional(),\n});\n\nexport type SSEFinalAnswerChunkEvent = z.infer<typeof SSEFinalAnswerChunkEvent>;\n\nexport const SSEFinalAnswerEvent = BaseSSEEvent.extend({\n type: z.literal('final_answer'),\n answer_id: z.string(),\n content: z.string(),\n meta: z.record(z.any()).optional(),\n});\n\nexport type SSEFinalAnswerEvent = z.infer<typeof SSEFinalAnswerEvent>;\n\nexport const SSEMarkdownChunkEvent = BaseSSEEvent.extend({\n type: z.literal('markdown_chunk'),\n content_type: z.enum(['text', 'code', 'table', 'image']).default('text'),\n text: z.string(),\n seq: z.number().optional(),\n});\n\nexport type SSEMarkdownChunkEvent = z.infer<typeof SSEMarkdownChunkEvent>;\n\nconst BaseSSEToolLifecycleEvent = BaseSSEEvent.extend({\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: z.enum(['start', 'update', 'complete', 'error']),\n status: z.enum(['loading', 'success', 'error']),\n args: z.any().optional(),\n payload: z.any().optional(),\n meta: z.record(z.any()).optional(),\n});\n\nexport const SSEToolCallDecisionEvent = BaseSSEToolLifecycleEvent.extend({\n type: z.literal('tool_call_decision'),\n});\n\nexport type SSEToolCallDecisionEvent = z.infer<typeof SSEToolCallDecisionEvent>;\n\nexport const SSEToolProcessEvent = BaseSSEToolLifecycleEvent.extend({\n type: z.literal('tool_process'),\n});\n\nexport type SSEToolProcessEvent = z.infer<typeof SSEToolProcessEvent>;\n\nexport const SSEToolOutputEvent = BaseSSEEvent.extend({\n type: z.literal('tool_output'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n status: z.enum(['success', 'error']),\n output: z.any().optional(),\n payload: z.record(z.any()).optional(),\n duration_ms: z.number().optional(),\n});\n\nexport type SSEToolOutputEvent = z.infer<typeof SSEToolOutputEvent>;\n\nexport const SSETodoUpdatedEvent = BaseSSEEvent.extend({\n type: z.literal('todo_updated'),\n todo_list_id: z.string(),\n todo_list_version: z.number().int().nonnegative(),\n items: z.array(z.object({\n id: z.string(),\n content: z.string(),\n status: z.enum(['pending', 'in_progress', 'completed', 'cancelled']),\n })),\n});\n\nexport type SSETodoUpdatedEvent = z.infer<typeof SSETodoUpdatedEvent>;\n\nexport const SSESubRunTraceEvent = BaseSSEEvent.extend({\n type: z.literal('subrun_trace'),\n parent_tool_call_id: z.string(),\n subrun_id: z.string(),\n subrun_parent_id: z.string().optional(),\n kind: z.enum([\n 'thought_delta',\n 'thought_complete',\n 'tool_call_decision',\n 'tool_process',\n 'tool_output',\n 'final_answer_chunk',\n 'final_answer',\n ]),\n delta: z.string().optional(),\n content: z.string().optional(),\n tool_name: z.string().optional(),\n tool_call_id: z.string().optional(),\n phase: z.enum(['start', 'update', 'complete', 'error']).optional(),\n status: z.enum(['loading', 'success', 'error']).optional(),\n args: z.unknown().optional(),\n output: z.unknown().optional(),\n duration_ms: z.number().optional(),\n meta: z.record(z.unknown()).optional(),\n});\n\nexport type SSESubRunTraceEvent = z.infer<typeof SSESubRunTraceEvent>;\n\nexport const SSERequiresUserInteractionEvent = BaseSSEEvent.extend({\n type: z.literal('requires_user_interaction'),\n form: z.any().optional(),\n interaction_type: z.string().optional(),\n prompt: z.string().optional(),\n});\n\nexport type SSERequiresUserInteractionEvent = z.infer<typeof SSERequiresUserInteractionEvent>;\n\nexport const SSEErrorEvent = BaseSSEEvent.extend({\n type: z.literal('error'),\n error: z.string(),\n details: z.any().optional(),\n error_code: z.string().optional(),\n retryable: z.boolean().optional(),\n});\n\nexport type SSEErrorEvent = z.infer<typeof SSEErrorEvent>;\n\nexport const SSEStreamEndEvent = BaseSSEEvent.extend({\n type: z.literal('stream_end'),\n reason: z.enum(['complete', 'error', 'interrupted', 'timeout']).optional(),\n reason_message: z.string().optional(),\n stats: z.object({\n total_events: z.number().optional(),\n duration_ms: z.number().optional(),\n error_count: z.number().optional(),\n benchmark: z.record(z.unknown()).optional(),\n }).optional(),\n});\n\nexport type SSEStreamEndEvent = z.infer<typeof SSEStreamEndEvent>;\n\nexport const SSEHistorySummaryEvent = BaseSSEEvent.extend({\n type: z.literal('history_summary'),\n summary_id: z.string(),\n content: z.string(),\n original_message_count: z.number().int().nonnegative(),\n summary_seq: z.number().int().nonnegative(),\n});\n\nexport type SSEHistorySummaryEvent = z.infer<typeof SSEHistorySummaryEvent>;\n\nexport const SSESummarizationStartEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_start'),\n originalMessages: z.number().optional(),\n});\n\nexport type SSESummarizationStartEvent = z.infer<typeof SSESummarizationStartEvent>;\n\nexport const SSESummarizationEndEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_end'),\n originalMessages: z.number().optional(),\n compressedMessages: z.number().optional(),\n compressionRatio: z.string().optional(),\n timeSaved: z.string().optional(),\n});\n\nexport type SSESummarizationEndEvent = z.infer<typeof SSESummarizationEndEvent>;\n\nexport const SSESummarizationErrorEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_error'),\n error: z.string(),\n});\n\nexport type SSESummarizationErrorEvent = z.infer<typeof SSESummarizationErrorEvent>;\n\nexport const SSEEvent = z.discriminatedUnion('type', [\n SSEThoughtEvent,\n SSEFinalAnswerChunkEvent,\n SSEFinalAnswerEvent,\n SSEMarkdownChunkEvent,\n SSEToolCallDecisionEvent,\n SSEToolProcessEvent,\n SSEToolOutputEvent,\n SSETodoUpdatedEvent,\n SSESubRunTraceEvent,\n SSERequiresUserInteractionEvent,\n SSEErrorEvent,\n SSEStreamEndEvent,\n SSEHistorySummaryEvent,\n SSESummarizationStartEvent,\n SSESummarizationEndEvent,\n SSESummarizationErrorEvent,\n]);\n\nexport type SSEEvent = z.infer<typeof SSEEvent>;\n\nexport const validateSSEEvent = (event: unknown) => SSEEvent.safeParse(event);\n\nexport const createSSEThoughtEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: { thought_message_id?: string; delta?: string; content?: string; is_complete?: boolean } = {},\n): SSEThoughtEvent => ({\n type: 'thought',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n is_complete: false,\n ...options,\n});\n\nexport const createSSEFinalAnswerChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n seq: number,\n chunk: string,\n options: { is_last?: boolean } = {},\n): SSEFinalAnswerChunkEvent => ({\n type: 'final_answer_chunk',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n answer_id: answerId,\n seq,\n chunk,\n ...options,\n});\n\nexport const createSSEFinalAnswerEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n content: string,\n options: Partial<SSEFinalAnswerEvent> = {},\n): SSEFinalAnswerEvent => ({\n type: 'final_answer',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n answer_id: answerId,\n content,\n ...options,\n});\n\nexport const createSSEMarkdownChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n text: string,\n options: Partial<SSEMarkdownChunkEvent> = {},\n): SSEMarkdownChunkEvent => ({\n type: 'markdown_chunk',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n text,\n content_type: 'text',\n ...options,\n});\n\nexport const createSSEToolCallDecisionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n phase: SSEToolCallDecisionEvent['phase'],\n status: SSEToolCallDecisionEvent['status'],\n options: Partial<SSEToolCallDecisionEvent> = {},\n): SSEToolCallDecisionEvent => ({\n type: 'tool_call_decision',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase,\n status,\n ...options,\n});\n\nexport const createSSEToolProcessEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n phase: SSEToolProcessEvent['phase'],\n status: SSEToolProcessEvent['status'],\n options: Partial<SSEToolProcessEvent> = {},\n): SSEToolProcessEvent => ({\n type: 'tool_process',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase,\n status,\n ...options,\n});\n\nexport const createSSEToolOutputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n status: SSEToolOutputEvent['status'],\n output: unknown,\n options: Partial<SSEToolOutputEvent> = {},\n): SSEToolOutputEvent => ({\n type: 'tool_output',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n status,\n output,\n ...options,\n});\n\nexport const createSSETodoUpdatedEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n todoListId: string,\n todoListVersion: number,\n items: SSETodoUpdatedEvent['items'],\n options: Partial<SSETodoUpdatedEvent> = {},\n): SSETodoUpdatedEvent => ({\n type: 'todo_updated',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n todo_list_id: todoListId,\n todo_list_version: todoListVersion,\n items,\n ...options,\n});\n\nexport const createSSESubRunTraceEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n parentToolCallId: string,\n subrunId: string,\n kind: SSESubRunTraceEvent['kind'],\n options: Partial<SSESubRunTraceEvent> = {},\n): SSESubRunTraceEvent => ({\n type: 'subrun_trace',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n parent_tool_call_id: parentToolCallId,\n subrun_id: subrunId,\n kind,\n ...options,\n});\n\nexport const createSSERequiresUserInteractionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<SSERequiresUserInteractionEvent> = {},\n): SSERequiresUserInteractionEvent => ({\n type: 'requires_user_interaction',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n ...options,\n});\n\nexport const createSSEErrorEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n error: string,\n options: Partial<SSEErrorEvent> = {},\n): SSEErrorEvent => ({\n type: 'error',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n error,\n ...options,\n});\n\nexport const createSSEStreamEndEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<SSEStreamEndEvent> = {},\n): SSEStreamEndEvent => ({\n type: 'stream_end',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n ...options,\n});\n\nexport const createSSEHistorySummaryEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n summaryId: string,\n content: string,\n originalMessageCount: number,\n summarySeq: number,\n options: Partial<SSEHistorySummaryEvent> = {},\n): SSEHistorySummaryEvent => ({\n type: 'history_summary',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n summary_id: summaryId,\n content,\n original_message_count: originalMessageCount,\n summary_seq: summarySeq,\n ...options,\n});\n","import type { ToolParameterProperty, ToolParameterSchema } from '../runtime-kernel';\n\nfunction serializeToolProperty(property: ToolParameterProperty): Record<string, unknown> {\n return {\n type: property.type,\n description: property.description,\n ...(property.default !== undefined ? { default: property.default } : {}),\n ...(property.enum !== undefined ? { enum: [...property.enum] } : {}),\n ...(property.properties !== undefined\n ? {\n properties: Object.fromEntries(\n Object.entries(property.properties).map(([key, value]) => [key, serializeToolProperty(value)]),\n ),\n }\n : {}),\n ...(property.items !== undefined ? { items: serializeToolProperty(property.items) } : {}),\n ...(property.required !== undefined ? { required: [...property.required] } : {}),\n };\n}\n\nexport function serializeToolParameters(schema: ToolParameterSchema): Record<string, unknown> {\n return {\n type: schema.type,\n properties: Object.fromEntries(\n Object.entries(schema.properties).map(([key, value]) => [key, serializeToolProperty(value)]),\n ),\n ...(schema.required !== undefined ? { required: [...schema.required] } : {}),\n ...(schema.additionalProperties !== undefined\n ? { additionalProperties: schema.additionalProperties }\n : {}),\n };\n}\n","import type { AgentAiEngine } from '../ports';\nimport type { DefinedAgent, LinnkitQuickstartConfig } from './types';\n\nfunction isAgentAiEngine(value: unknown): value is AgentAiEngine {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { chatCompletion?: unknown }).chatCompletion === 'function' &&\n typeof (value as { chatCompletionStream?: unknown }).chatCompletionStream === 'function'\n );\n}\n\nfunction isLlmFactory(value: unknown): value is () => AgentAiEngine | Promise<AgentAiEngine> {\n return typeof value === 'function';\n}\n\nfunction validateAgents(agents: readonly DefinedAgent[]): void {\n if (!Array.isArray(agents) || agents.length === 0) {\n throw new Error('[linnkit] defineConfig requires at least one agent.');\n }\n\n const seen = new Set<string>();\n for (const agent of agents) {\n const id = agent?.spec?.id;\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new Error('[linnkit] defineConfig received an agent without spec.id.');\n }\n if (seen.has(id)) {\n throw new Error(`[linnkit] duplicate agent id in config: ${id}`);\n }\n seen.add(id);\n }\n}\n\n/**\n * Quickstart 配置构造器。\n *\n * 中文备注:\n * - 只做轻量运行时校验,避免 CLI 加载坏 config 后给出晦涩堆栈;\n * - 不接管生产 host 的完整配置系统。\n */\nexport function defineConfig(config: LinnkitQuickstartConfig): LinnkitQuickstartConfig {\n validateAgents(config.agents);\n if (!isAgentAiEngine(config.llm) && !isLlmFactory(config.llm)) {\n throw new Error('[linnkit] defineConfig requires llm to be an AgentAiEngine or a factory.');\n }\n\n return {\n agents: [...config.agents],\n llm: config.llm,\n defaultModelId: config.defaultModelId,\n };\n}\n\nexport async function resolveConfiguredLlm(\n config: LinnkitQuickstartConfig,\n): Promise<AgentAiEngine> {\n const llm = typeof config.llm === 'function' ? await config.llm() : config.llm;\n if (!isAgentAiEngine(llm)) {\n throw new Error('[linnkit] configured llm factory did not return an AgentAiEngine.');\n }\n return llm;\n}\n","/**\n * Isomorphic ID generators.\n *\n * 设计约束:\n * - linnkit 是同构 package(既会被 Node-side host 使用,也会被前端 renderer 通过\n * `linnkit/runtime-kernel/events` 等子入口透传 transitive import 拖入 bundle)。\n * - 因此本文件不允许 `import { randomUUID } from 'crypto'`:那会触发 vite\n * `__vite-browser-external` shim,构建时 named import 解析失败。\n * - 改用 Web Crypto API(`globalThis.crypto.randomUUID`),它在所有现代浏览器\n * 与 Node 19+ 上都内置;老 Node 也可通过 `globalThis.crypto.randomUUID` 访问\n * (Node 14.17+ 在 `node:crypto` 暴露了 `webcrypto`,并自 19 起把 `crypto`\n * 挂到 globalThis)。\n * - 极端 fallback:若运行环境同时缺 Web Crypto,则降级为 Math.random RFC4122 v4\n * 生成器;这些 ID 仅用于会话/消息/run/exec/trace 内部去重展示,不承担加密\n * 强度要求,降级在语义上是安全的。\n */\n\ntype WebCryptoLike = { randomUUID?: () => string };\n\nfunction isoRandomUUID(): string {\n const c = (globalThis as unknown as { crypto?: WebCryptoLike }).crypto;\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n // Fallback RFC4122 v4(非加密强度)\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n const v = ch === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nfunction shortRandomId(prefix: string): string {\n return `${prefix}-${isoRandomUUID().replace(/-/g, '').slice(0, 12)}`;\n}\n\nexport function generateMessageId(): string {\n return shortRandomId('msg');\n}\n\nexport function generateConversationId(): string {\n return shortRandomId('conv');\n}\n\nexport function generateRunId(): string {\n return shortRandomId('run');\n}\n\nexport function generateAuditEnvelopeId(): string {\n return shortRandomId('audit');\n}\n\nexport function generateAuditEnvelopeEventId(): string {\n return shortRandomId('audit_evt');\n}\n\nexport function generateExecutionId(): string {\n return shortRandomId('exec');\n}\n\nexport function generateTraceId(): string {\n return shortRandomId('trace');\n}\n","export { GraphExecutor } from './engine';\nexport { GraphAgentExecutor } from './executor';\nexport { LlmNode } from './nodes/llmNode';\nexport { ToolNode } from './nodes/toolNode';\nexport { UserNode } from './nodes/userNode';\nexport { WaitUserNode } from './nodes/waitUserNode';\nexport { AnswerNode } from './nodes/answerNode';\nexport { MemoryCheckpointer } from './checkpointer/memoryCheckpointer';\nexport { summarizeCheckpoint } from './checkpointer/base';\nexport { MemoryEventStore } from './event-store/memoryEventStore';\nexport { createMonotonicEventIdFactory } from './event-store/base';\nexport { ENGINE_STATE_SCHEMA_VERSION } from './types';\n\nexport type { GraphAgentExecutorDependencies } from './executor';\nexport type {\n GraphExecutorContextBuilder,\n GraphExecutorContextBuildInput,\n GraphExecutorContextBuildOutput,\n PendingContextRuntimeEvent,\n} from './executorContextBuilder';\nexport type {\n Checkpointer,\n CheckpointListFilter,\n CheckpointMeta,\n CheckpointSummary,\n} from './checkpointer/base';\nexport type { EventRangeOptions, EventStore, PersistedEvent } from './event-store/base';\nexport type { EngineState, ExecutorLocalState, GraphNode } from './types';\n","export enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\ntype LogPayload = Record<string, unknown> | undefined;\n\nconst DEFAULT_LEVEL = LogLevel.DEBUG;\n\nfunction formatPrefix(level: keyof Console, moduleName: string): string {\n return `[${new Date().toISOString()}] [${level.toUpperCase()}] [${moduleName}]`;\n}\n\nfunction shouldLog(level: LogLevel): boolean {\n return level >= DEFAULT_LEVEL;\n}\n\nexport class Logger {\n constructor(private readonly moduleName: string) {}\n\n debug(message: string, data?: LogPayload): void {\n this.log(LogLevel.DEBUG, 'debug', message, data);\n }\n\n info(message: string, data?: LogPayload): void {\n this.log(LogLevel.INFO, 'info', message, data);\n }\n\n warn(message: string, data?: LogPayload): void {\n this.log(LogLevel.WARN, 'warn', message, data);\n }\n\n error(message: string, data?: LogPayload): void {\n this.log(LogLevel.ERROR, 'error', message, data);\n }\n\n private log(level: LogLevel, method: keyof Console, message: string, data?: LogPayload): void {\n if (!shouldLog(level)) {\n return;\n }\n const prefix = formatPrefix(method, this.moduleName);\n const fullMessage = `${prefix} ${message}`;\n if (data === undefined) {\n switch (method) {\n case 'debug':\n console.debug(fullMessage);\n break;\n case 'info':\n console.info(fullMessage);\n break;\n case 'warn':\n console.warn(fullMessage);\n break;\n case 'error':\n console.error(fullMessage);\n break;\n default:\n console.log(fullMessage);\n }\n return;\n }\n switch (method) {\n case 'debug':\n console.debug(fullMessage, data);\n break;\n case 'info':\n console.info(fullMessage, data);\n break;\n case 'warn':\n console.warn(fullMessage, data);\n break;\n case 'error':\n console.error(fullMessage, data);\n break;\n default:\n console.log(fullMessage, data);\n }\n }\n}\n","import type { TelemetryPort } from './telemetryPort';\n\nexport const noopTelemetry: TelemetryPort = {\n emit(): void {\n // Intentionally empty: optional capability should preserve current behavior by default.\n },\n async flush(): Promise<void> {\n // No buffered state.\n },\n};\n","import type { ToolExecutionContext } from '../tools/toolExecutionContext';\nimport type { ToolCallExtraContent } from '../llm';\nimport type {\n AgentSpecSystemReminderPolicy,\n AgentSpecToolObservationGovernancePolicy,\n RuntimeEvent,\n} from '../../contracts';\n\nexport interface ExecutorLocalState {\n stepCount: number;\n phase?: 'running' | 'force_final_answer' | 'force_tools' | string;\n maxSteps?: number;\n remainingSteps?: number;\n finalStepPolicy?: 'final_answer' | 'force_tools';\n finalStepForcedTools?: string[];\n lastStepsHintThreshold?: number;\n systemReminderPolicy?: AgentSpecSystemReminderPolicy;\n toolObservationPolicy?: AgentSpecToolObservationGovernancePolicy;\n contextCheckpointToolName?: string;\n runLockedModelId?: string;\n}\n\nexport interface EngineLocalState extends Record<string, unknown> {\n conversationId?: string;\n turnId?: string;\n request?: Record<string, unknown>;\n toolContext?: ToolExecutionContext;\n history?: RuntimeEvent[];\n newEvents?: RuntimeEvent[];\n executorLocal?: ExecutorLocalState;\n pendingToolCalls?: StandardToolCall[];\n pendingInteractionSpec?: Record<string, unknown>;\n lastToolResult?: Record<string, unknown>;\n finalAnswer?: string;\n answerId?: string;\n chunkSeq?: number;\n signal?: AbortSignal;\n sseSink?: (evt: unknown) => RuntimeEvent[] | void;\n summarizationCallbacks?: {\n onSummarizationStart?: () => void;\n onSummarizationEnd?: (summaryInfo: unknown) => void;\n };\n}\n\nexport const ENGINE_STATE_SCHEMA_VERSION = 1;\n\nexport interface EngineState {\n nodeId: string;\n /**\n * 顶层 schema version,供持久化后端在不解读 local 结构时也能快速判断版本。\n *\n * 当前 save 路径会统一写入该字段;类型先保持向后兼容,直到旧测试/fixture 全部收敛。\n */\n schemaVersion?: number;\n local?: EngineLocalState;\n}\n\nexport interface NodeResult {\n kind: 'route' | 'yield' | 'pause';\n nextNodeId?: string;\n events?: RuntimeEvent[];\n}\n\nexport interface GraphNode {\n id: string;\n run(state: EngineState): Promise<NodeResult>;\n}\n\nexport interface StandardToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n extra_content?: ToolCallExtraContent;\n}\n","import { Logger } from '../../shared/logger';\nimport { noopTelemetry } from '../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\nimport type { Checkpointer } from './checkpointer/base';\nimport { ENGINE_STATE_SCHEMA_VERSION, type EngineState, type GraphNode, type NodeResult } from './types';\nimport { DEFAULT_MAX_STEPS, type RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('GraphExecutor');\n\nfunction asLocalRecord(local: EngineState['local']): Record<string, unknown> {\n return local && typeof local === 'object' ? { ...local } : {};\n}\n\nexport interface GraphExecutorConfig {\n maxSteps?: number;\n maxCheckpoints?: number;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(observability 默认关闭,零业务影响)。\n */\n telemetryPort?: TelemetryPort;\n}\n\nexport class GraphExecutor {\n private nodes: Map<string, GraphNode> = new Map();\n private ephemeralLocals: Map<string, Record<string, unknown>> = new Map();\n private readonly config: Required<Pick<GraphExecutorConfig, 'maxSteps' | 'maxCheckpoints'>>;\n private readonly telemetryPort: TelemetryPort;\n\n constructor(\n private readonly checkpointer: Checkpointer,\n config: GraphExecutorConfig = {}\n ) {\n this.config = {\n maxSteps: config.maxSteps ?? DEFAULT_MAX_STEPS,\n maxCheckpoints: config.maxCheckpoints ?? 10,\n };\n this.telemetryPort = config.telemetryPort ?? noopTelemetry;\n }\n\n registerNode(node: GraphNode): void {\n this.nodes.set(node.id, node);\n }\n\n async peekCheckpoint(conversationId: string): Promise<EngineState | null> {\n return await this.checkpointer.load(conversationId);\n }\n\n private sanitize(state: EngineState): EngineState {\n const local = asLocalRecord(state.local);\n if ('memory' in local) delete local.memory;\n if ('sseSink' in local) delete local.sseSink;\n return {\n nodeId: state.nodeId,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local,\n };\n }\n\n async prime(conversationId: string, local: Record<string, unknown>, nodeId: string = 'user'): Promise<void> {\n this.ephemeralLocals.set(conversationId, { ...(local || {}) });\n const localSansMemory = { ...(local || {}) };\n if ('memory' in localSansMemory) delete localSansMemory.memory;\n const state: EngineState = {\n nodeId,\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: localSansMemory,\n };\n await this.checkpointer.save(conversationId, state);\n }\n\n async setNode(conversationId: string, nodeId: string, localPatch?: Record<string, unknown>): Promise<void> {\n const current = (await this.checkpointer.load(conversationId)) || {\n nodeId: 'user',\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: {},\n };\n const mergedLocal = { ...(current.local || {}), ...(localPatch || {}) };\n if ('memory' in mergedLocal) delete mergedLocal.memory;\n const next: EngineState = {\n nodeId,\n schemaVersion: current.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local: mergedLocal,\n };\n await this.checkpointer.save(conversationId, next);\n }\n\n async runUntilYield(conversationId: string): Promise<{ events: RuntimeEvent[]; checkpoint: EngineState; stepCount: number }> {\n // B2-engine Batch 4: run_lifecycle 埋点\n // - 一次 runUntilYield 调用 = 一次 \"run\"\n // - 进入即 emit 'spawned',退出走 try/finally 决定 'completed' | 'failed' | 'cancelled'\n const runId = `run_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n let lifecyclePhase: 'completed' | 'failed' | 'cancelled' = 'completed';\n this.telemetryPort.emit({\n kind: 'run_lifecycle',\n runId,\n phase: 'spawned',\n scope: { conversationId: conversationId || undefined },\n });\n\n try {\n return await this.runUntilYieldInternal(conversationId);\n } catch (err) {\n lifecyclePhase = (err as Error | undefined)?.name === 'AbortError' ? 'cancelled' : 'failed';\n throw err;\n } finally {\n this.telemetryPort.emit({\n kind: 'run_lifecycle',\n runId,\n phase: lifecyclePhase,\n scope: { conversationId: conversationId || undefined },\n });\n }\n }\n\n private async runUntilYieldInternal(conversationId: string): Promise<{ events: RuntimeEvent[]; checkpoint: EngineState; stepCount: number }> {\n let state: EngineState = (await this.checkpointer.load(conversationId)) || {\n nodeId: 'user',\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: {},\n };\n const ephemeral = this.ephemeralLocals.get(conversationId) || {};\n state = {\n ...state,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local: { ...(state.local || {}), ...ephemeral },\n };\n\n const isAbortSignal = (v: unknown): v is AbortSignal => {\n return v !== null && typeof v === 'object' && 'aborted' in v;\n };\n const throwAbortError = (): never => {\n const err = new Error('The user aborted a request.');\n err.name = 'AbortError';\n throw err;\n };\n\n let stepCount = 0;\n let cycleStepCount = 0;\n let checkpointCount = 0;\n let allEvents: RuntimeEvent[] = [];\n logger.info('[GraphExecutor] 开始推理循环', {\n maxSteps: this.config.maxSteps,\n maxCheckpoints: this.config.maxCheckpoints,\n });\n\n const absoluteMaxSteps = this.config.maxSteps * (this.config.maxCheckpoints + 1);\n for (let i = 0; i < this.config.maxSteps && stepCount < absoluteMaxSteps; i++) {\n stepCount++;\n cycleStepCount++;\n\n const signalRaw = (state.local as Record<string, unknown> | undefined)?.signal;\n if (isAbortSignal(signalRaw) && signalRaw.aborted) {\n logger.warn('[GraphExecutor] 收到 AbortSignal,立即停止推理循环');\n this.ephemeralLocals.delete(conversationId);\n throwAbortError();\n }\n\n const isLastStep = cycleStepCount >= this.config.maxSteps;\n const rawLocal = state.local && typeof state.local === 'object' ? state.local : {};\n const localForStep: Record<string, unknown> = { ...(rawLocal as Record<string, unknown>) };\n\n const rawExecutorLocal = localForStep.executorLocal;\n const executorLocalForStep: Record<string, unknown> =\n rawExecutorLocal && typeof rawExecutorLocal === 'object' && !Array.isArray(rawExecutorLocal)\n ? { ...(rawExecutorLocal as Record<string, unknown>) }\n : {};\n executorLocalForStep.maxSteps = this.config.maxSteps;\n executorLocalForStep.stepCount = cycleStepCount;\n executorLocalForStep.remainingSteps = this.config.maxSteps - cycleStepCount;\n executorLocalForStep.checkpointCount = checkpointCount;\n\n const policyRaw = executorLocalForStep.finalStepPolicy;\n const finalStepPolicy =\n policyRaw === 'force_tools' || policyRaw === 'final_answer'\n ? (policyRaw as 'force_tools' | 'final_answer')\n : 'final_answer';\n\n const isPenultimateStep = cycleStepCount === this.config.maxSteps - 1;\n if (finalStepPolicy === 'force_tools') {\n executorLocalForStep.phase = isPenultimateStep\n ? 'force_tools'\n : (executorLocalForStep.phase ?? 'running');\n } else {\n executorLocalForStep.phase = isLastStep ? 'force_final_answer' : (executorLocalForStep.phase ?? 'running');\n }\n localForStep.executorLocal = executorLocalForStep;\n\n const shouldForceToLlm =\n finalStepPolicy === 'force_tools'\n ? isPenultimateStep\n : isLastStep;\n\n if (shouldForceToLlm && state.nodeId !== 'wait_user' && state.nodeId !== 'answer') {\n delete localForStep.pendingToolCalls;\n delete localForStep.pendingInteractionSpec;\n delete localForStep.lastToolResult;\n if (state.nodeId !== 'llm') {\n const reason =\n finalStepPolicy === 'force_tools'\n ? 'force tools before maxSteps'\n : 'force final answer at maxSteps';\n logger.warn('[GraphExecutor] 收尾策略强制切换到 llm 节点', {\n reason,\n fromNodeId: state.nodeId,\n });\n state = { ...state, nodeId: 'llm', local: localForStep };\n } else {\n state = { ...state, local: localForStep };\n }\n } else {\n state = { ...state, local: localForStep };\n }\n\n const node = this.nodes.get(state.nodeId);\n if (!node) {\n logger.info('[GraphExecutor] 推理完成,无可执行节点', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n this.ephemeralLocals.delete(conversationId);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n\n logger.info('[GraphExecutor] 节点切换', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n nodeId: state.nodeId,\n });\n\n // B2-engine Batch 3: 计时 graph_node 事件\n const nodeRunStartedAt = Date.now();\n const nodeIdForTelemetry = state.nodeId;\n let result: NodeResult;\n try {\n result = await node.run(state);\n } finally {\n const turnIdForTelemetry =\n typeof (state.local as Record<string, unknown> | undefined)?.turnId === 'string'\n ? ((state.local as Record<string, unknown>).turnId as string)\n : undefined;\n this.telemetryPort.emit({\n kind: 'graph_node',\n nodeId: nodeIdForTelemetry,\n durationMs: Date.now() - nodeRunStartedAt,\n scope: {\n conversationId: conversationId || undefined,\n turnId: turnIdForTelemetry,\n },\n });\n }\n\n if (Array.isArray(result.events) && result.events.length > 0) {\n logger.info('[GraphExecutor] 节点产生事件', {\n nodeId: state.nodeId,\n eventCount: result.events.length,\n events: result.events.map((event) => `${event.type}(${event.timestamp})`),\n });\n allEvents.push(...result.events);\n }\n\n const localAfterRun = (state.local && typeof state.local === 'object')\n ? state.local as Record<string, unknown>\n : undefined;\n if (localAfterRun?._checkpointStepReset === true) {\n delete localAfterRun._checkpointStepReset;\n checkpointCount++;\n if (checkpointCount > this.config.maxCheckpoints) {\n logger.warn('[GraphExecutor] 达到最大 checkpoint 次数,不再重置步数', {\n checkpointCount,\n maxCheckpoints: this.config.maxCheckpoints,\n });\n } else {\n logger.info('[GraphExecutor] checkpoint 重置步数预算', {\n checkpointCount,\n previousCycleStepCount: cycleStepCount,\n stepCount,\n });\n cycleStepCount = 0;\n i = -1;\n }\n }\n\n if (result.kind === 'route') {\n const nextNodeId = result.nextNodeId || 'user';\n logger.info('[GraphExecutor] 路由切换', {\n fromNodeId: state.nodeId,\n nextNodeId,\n });\n state = { ...state, nodeId: nextNodeId };\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n continue;\n }\n\n if (result.kind === 'yield') {\n logger.info('[GraphExecutor] 推理暂停,等待外部输入', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n\n if (result.kind === 'pause') {\n logger.info('[GraphExecutor] 推理暂停,等待用户交互', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n }\n\n logger.warn('[GraphExecutor] 达到步数上限,强制结束', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n this.ephemeralLocals.delete(conversationId);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/modelCatalog.ts\n *\n * @description\n * Agent runtime 对“模型目录”的最小协议定义。\n * runtime-kernel 只依赖这些查询能力,不直接依赖 app 的 model-registry 实现。\n */\n\nexport interface ModelCatalogEntry {\n id: string;\n enabled?: boolean;\n api_key?: string;\n api_base?: string;\n billing_mode?: 'byok' | 'cloud';\n /**\n * 是否允许客户端侧重试。\n *\n * 说明:\n * - runtime-kernel 会基于该字段与 billing_mode 决定重试策略;\n * - 该字段来自上层 model-registry(对齐 `src/model-registry/contracts.ts`),避免在 runtime 侧出现类型漂移。\n */\n enable_client_retry?: boolean;\n model_name?: string;\n provider?: string;\n capabilities?: readonly string[];\n ui_visibility?: readonly string[];\n}\n\nexport interface ModelCatalogLike {\n getModelById(id: string): ModelCatalogEntry | undefined;\n getModelsByCapability(capability: string): ModelCatalogEntry[];\n getModelsByUIVisibility(visibility: string): ModelCatalogEntry[];\n}\n\nexport function createEmptyModelCatalog(): ModelCatalogLike {\n return {\n getModelById(): ModelCatalogEntry | undefined {\n return undefined;\n },\n getModelsByCapability(): ModelCatalogEntry[] {\n return [];\n },\n getModelsByUIVisibility(): ModelCatalogEntry[] {\n return [];\n },\n };\n}\n","import { createEmptyModelCatalog, type ModelCatalogLike } from './modelCatalog';\n\nexport interface ModelResolverOptions {\n fallbackModelPreferredOrder?: readonly string[];\n modelCatalog?: ModelCatalogLike;\n}\n\nexport interface ModelResolverLike {\n resolveModelId(requestedModelId?: string): string;\n pickFallbackChatModel(excludedModelIds: Set<string>): string | null;\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object' && !Array.isArray(v);\n\nconst getString = (obj: unknown, key: string): string | undefined => {\n if (!isRecord(obj)) return undefined;\n const v = obj[key];\n return typeof v === 'string' ? v : undefined;\n};\n\nconst getBoolean = (obj: unknown, key: string): boolean | undefined => {\n if (!isRecord(obj)) return undefined;\n const v = obj[key];\n return typeof v === 'boolean' ? v : undefined;\n};\n\n/**\n * 模型解析职责单独收口,避免 caller / executor stage 混入 registry 选模细节。\n */\nexport class ModelResolver implements ModelResolverLike {\n private readonly fallbackModelPreferredOrder: readonly string[];\n private readonly modelCatalog: ModelCatalogLike;\n\n constructor(options: ModelResolverOptions = {}) {\n this.fallbackModelPreferredOrder = Array.isArray(options.fallbackModelPreferredOrder)\n ? options.fallbackModelPreferredOrder\n : [];\n this.modelCatalog = options.modelCatalog ?? createEmptyModelCatalog();\n }\n\n resolveModelId(requestedModelId?: string): string {\n return requestedModelId || this.getDefaultChatModel();\n }\n\n /**\n * 选模规则(严格、可解释):\n * - “默认聊天模型”应来自主对话下拉(ui_visibility: 'chat'),而不是“任何具备 chat capability 的模型”。\n *\n * 根因说明:\n * - default_models.json 中存在 mock-chat(capabilities: ['chat'],但 ui_visibility 是 'chat1');\n * - 若按 capability='chat' 取第一个,会导致内部流程(如 deep_search 子 Agent)默认落到 mock 模型,\n * 从而无法产生 tool_calls / final_answer(只会 yield thought)。\n */\n private getDefaultChatModel(): string {\n const uiChatModels = this.modelCatalog.getModelsByUIVisibility('chat');\n const preferred = uiChatModels.filter((model) => getBoolean(model, 'enabled') !== false);\n if (preferred.length > 0) {\n return preferred[0].id;\n }\n\n const chatModels = this.modelCatalog.getModelsByCapability('chat');\n const fallback = chatModels.filter((model) => getBoolean(model, 'enabled') !== false);\n if (fallback.length === 0) {\n throw new Error('没有可用的聊天模型');\n }\n return fallback[0].id;\n }\n\n /**\n * 选择一个可用的“策略切模备用聊天模型”:\n * - 必须具备 chat 能力\n * - 必须已解析到 api_key(否则必然失败)\n * - 尽量避开 openrouter(减少被路由到受限上游的概率)\n */\n pickFallbackChatModel(excludedModelIds: Set<string>): string | null {\n const chatModels = this.modelCatalog.getModelsByCapability('chat') || [];\n\n const enabled = chatModels\n .filter((model) => getBoolean(model, 'enabled') !== false)\n .filter((model) => {\n const key = getString(model, 'api_key');\n return typeof key === 'string' && key.length > 0;\n })\n .filter((model) => !excludedModelIds.has(model.id));\n\n if (enabled.length === 0) return null;\n\n for (const id of this.fallbackModelPreferredOrder) {\n const found = enabled.find((model) => model.id === id);\n if (found) return found.id;\n }\n\n const nonOpenRouter = enabled.find((model) => {\n const apiBase = getString(model, 'api_base') ?? '';\n return !apiBase.includes('openrouter.ai');\n });\n return (nonOpenRouter || enabled[0]).id;\n }\n}\n","import type { AuditPort } from '../../ports';\n\nexport const noopAudit: AuditPort = {\n emit(): void {\n // 审计是可选能力;默认 no-op 保持现有运行时无副作用。\n },\n flush(): void {\n // 无缓冲状态。\n },\n};\n","/**\n * @file src/agent/runtime-kernel/llm/toolCallUtils.ts\n *\n * @description\n * Tool-call 相关的纯函数工具:\n * - 解析/拆分“拼接的 JSON 对象”字符串(例如 \"{}{}\")\n * - 安全地把 JSON 字符串解析为 Record(不使用 any)\n *\n * 背景:\n * 部分 OpenAI-compat 供应商在流式工具调用中,可能会把多个 JSON 对象片段连续输出;\n * 如果直接拼接,会得到 `}{` 导致 arguments 不是合法 JSON,从而:\n * - 本地 JSON.parse 失败,工具拿到空参数\n * - 更严重:非法 tool_calls 被写入 history 并在下一轮回放,触发上游 400/500 校验错误\n */\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function tryParseJsonRecord(input: string): { ok: true; value: UnknownRecord } | { ok: false } {\n try {\n const parsed: unknown = JSON.parse(input);\n if (!isRecord(parsed)) {\n return { ok: false };\n }\n return { ok: true, value: parsed };\n } catch {\n return { ok: false };\n }\n}\n\n/**\n * 把形如 \"{}{}\" / \"{...}\\n{...}\" 的字符串按“顶层 JSON 对象”拆分为多个 JSON 字符串。\n *\n * 约束:\n * - 仅拆分顶层对象(以 '{' 开始、以配对 '}' 结束)\n * - 需要正确处理字符串字面量与转义,避免把字符串中的 '{' '}' 当作结构字符\n */\nexport function splitConcatenatedJsonObjects(input: string): string[] {\n const s = input.trim();\n if (!s) return [];\n\n const results: string[] = [];\n\n let inString = false;\n let escape = false;\n let depth = 0;\n let startIndex: number | null = null;\n\n for (let i = 0; i < s.length; i += 1) {\n const ch = s[i];\n\n if (escape) {\n escape = false;\n continue;\n }\n\n if (inString) {\n if (ch === '\\\\\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n if (depth === 0) {\n startIndex = i;\n }\n depth += 1;\n continue;\n }\n\n if (ch === '}') {\n if (depth > 0) {\n depth -= 1;\n if (depth === 0 && startIndex !== null) {\n const piece = s.slice(startIndex, i + 1).trim();\n if (piece) results.push(piece);\n startIndex = null;\n }\n }\n continue;\n }\n }\n\n return results;\n}\n\n","import { generateMessageId } from '../../../shared/ids';\nimport { splitConcatenatedJsonObjects, tryParseJsonRecord } from '../../llm/toolCallUtils';\nimport type { ToolExecutionContext } from '../../tools/toolExecutionContext';\nimport type { PendingContextRuntimeEvent } from '../executorContextBuilder';\nimport type { StandardToolCall } from '../types';\nimport type { LlmCallResponse, TickPipelineContext } from './types';\nimport type { RuntimeEvent } from '../../../contracts';\n\nexport function readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function resolveConversationIdForRuntimeEvents(toolContext: ToolExecutionContext | undefined): string {\n const fromCamel = readNonEmptyString(toolContext?.conversationId);\n if (fromCamel) return fromCamel;\n const fromSnake = toolContext ? readNonEmptyString(toolContext['conversation_id']) : undefined;\n if (fromSnake) return fromSnake;\n return generateMessageId();\n}\n\nexport function extractResponseText(response: LlmCallResponse | undefined): string {\n if (!response) {\n return '';\n }\n if (typeof response === 'string') {\n return response;\n }\n return typeof response.content === 'string' ? response.content : '';\n}\n\nexport function buildHistorySummaryRuntimeEvent(\n event: PendingContextRuntimeEvent,\n conversationId: string,\n turnId: string,\n): RuntimeEvent {\n return {\n ...(event as Record<string, unknown>),\n conversation_id: conversationId,\n turn_id: turnId,\n } as RuntimeEvent;\n}\n\nexport function isHistorySummaryEvent(event: PendingContextRuntimeEvent): boolean {\n return event.type === 'history_summary';\n}\n\nexport function normalizeToolCalls(rawCalls: StandardToolCall[]): StandardToolCall[] {\n const expanded: StandardToolCall[] = [];\n for (const toolCall of rawCalls) {\n const argsRaw = toolCall.function?.arguments ?? '';\n const parsedDirectly = typeof argsRaw === 'string' && tryParseJsonRecord(argsRaw.trim()).ok;\n if (parsedDirectly) {\n expanded.push(toolCall);\n continue;\n }\n\n const pieces = typeof argsRaw === 'string' ? splitConcatenatedJsonObjects(argsRaw) : [];\n const validPieces = pieces.length >= 2 && pieces.every((piece) => tryParseJsonRecord(piece).ok);\n if (validPieces) {\n expanded.push({\n ...toolCall,\n function: { ...toolCall.function, arguments: pieces[0] },\n });\n for (let index = 1; index < pieces.length; index += 1) {\n expanded.push({\n ...toolCall,\n id: generateMessageId(),\n function: { ...toolCall.function, arguments: pieces[index] },\n });\n }\n continue;\n }\n\n expanded.push({\n ...toolCall,\n });\n }\n return expanded;\n}\n\nexport function parsePrimaryToolArgs(toolCall: StandardToolCall | undefined): Record<string, unknown> {\n if (!toolCall?.function?.arguments) {\n return {};\n }\n try {\n const parsed = JSON.parse(toolCall.function.arguments);\n return typeof parsed === 'object' && parsed !== null ? parsed as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nexport function resolveUsage(response: LlmCallResponse | undefined): unknown {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return response.usage;\n}\n\nexport function resolveToolCalls(response: LlmCallResponse | undefined): StandardToolCall[] | undefined {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return Array.isArray(response.tool_calls) ? response.tool_calls : undefined;\n}\n\nexport function resolveReasoningDetails(response: LlmCallResponse | undefined): unknown[] | undefined {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return Array.isArray(response.reasoning_details) ? response.reasoning_details : undefined;\n}\n\nexport function resolveToolNamesForAudit(ctx: TickPipelineContext): string[] {\n if (ctx.forceFinalAnswer || ctx.request.enableTools === false || ctx.toolSchemas.length === 0) {\n return [];\n }\n return ctx.toolSchemas.map((tool) => tool.function.name);\n}\n","/**\n * @file src/agent/shared/llmAuditRecorder.ts\n *\n * @description\n * Agent runtime 对 LLM 审计的最小记录协议。\n *\n * 说明:\n * - runtime-kernel 只需要“记录”审计片段;\n * - AsyncLocalStorage、落盘、Documents 路径等都属于宿主实现,不应反向依赖到 agent package。\n */\n\nexport interface ContextManagerAuditRecordInput {\n mode: 'agent' | 'chat';\n payload?: unknown;\n llmMessages?: unknown[];\n toolNames?: string[];\n systemReminder?: {\n ruleIds?: string[];\n };\n contextTrace?: unknown;\n}\n\nexport interface ToolProtocolErrorAuditInput {\n mode: 'agent' | 'chat';\n toolName: string;\n toolCallId?: string;\n rawArguments?: string;\n parsedArguments?: Record<string, unknown>;\n error: string;\n}\n\nexport interface RunTranscriptAuditInput {\n mode: 'agent' | 'chat';\n transcriptMessages: unknown[];\n toolset?: {\n availableTools?: string[];\n };\n}\n\nexport interface LlmAuditRecorder {\n recordBeforeContextManager?(params: ContextManagerAuditRecordInput): void;\n recordAfterContextManager?(params: ContextManagerAuditRecordInput): void;\n recordAfterContextManagerOnSystemReminderHit?(params: ContextManagerAuditRecordInput): void;\n recordToolProtocolError?(params: ToolProtocolErrorAuditInput): void;\n recordRunTranscript?(params: RunTranscriptAuditInput): void;\n}\n\nlet recorder: LlmAuditRecorder | null = null;\n\nexport function setLlmAuditRecorder(next: LlmAuditRecorder | null): void {\n recorder = next;\n}\n\nexport function recordBeforeContextManager(params: ContextManagerAuditRecordInput): void {\n recorder?.recordBeforeContextManager?.(params);\n}\n\nexport function recordAfterContextManager(params: ContextManagerAuditRecordInput): void {\n recorder?.recordAfterContextManager?.(params);\n}\n\nexport function recordAfterContextManagerOnSystemReminderHit(params: ContextManagerAuditRecordInput): void {\n recorder?.recordAfterContextManagerOnSystemReminderHit?.(params);\n}\n\nexport function recordToolProtocolError(params: ToolProtocolErrorAuditInput): void {\n recorder?.recordToolProtocolError?.(params);\n}\n\nexport function recordRunTranscript(params: RunTranscriptAuditInput): void {\n recorder?.recordRunTranscript?.(params);\n}\n","import {\n recordAfterContextManager,\n recordAfterContextManagerOnSystemReminderHit,\n recordBeforeContextManager,\n} from '../../../../shared/llmAuditRecorder';\nimport { resolveToolNamesForAudit } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nexport const contextAuditMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n if (stage.id === 'build_context') {\n recordBeforeContextManager({\n mode: ctx.request.mode === 'chat' ? 'chat' : 'agent',\n payload: ctx.request.mode === 'chat'\n ? { request: ctx.request }\n : { request: ctx.request, history: ctx.history },\n });\n }\n\n await next();\n\n if (stage.id !== 'apply_system_reminder') {\n return;\n }\n\n const toolNamesForAudit = resolveToolNamesForAudit(ctx);\n recordAfterContextManager({\n mode: ctx.mode,\n llmMessages: ctx.llmMessages,\n toolNames: toolNamesForAudit,\n contextTrace: ctx.contextTrace,\n });\n\n if (Array.isArray(ctx.systemReminderHitRuleIds) && ctx.systemReminderHitRuleIds.length > 0) {\n recordAfterContextManagerOnSystemReminderHit({\n mode: ctx.mode,\n llmMessages: ctx.llmMessages,\n toolNames: toolNamesForAudit,\n systemReminder: { ruleIds: ctx.systemReminderHitRuleIds },\n contextTrace: ctx.contextTrace,\n });\n }\n};\n","import { get_encoding, Tiktoken } from 'tiktoken';\nimport type { LlmRequestMessage } from '../ports';\n\nexport type TokenEncodingName = Parameters<typeof get_encoding>[0];\n\nexport interface TokenEstimateOptions {\n /**\n * tiktoken encoding 名称,或历史兼容的模型标识。\n *\n * 中文说明:如果传入的是 `gpt-4o` / `claude` 这类模型名,会按旧逻辑映射到 encoding;\n * 如果传入的是 `cl100k_base` / `o200k_base`,则直接使用对应 encoding。\n */\n encoding?: string;\n /** tiktoken 不可用或未指定 encoding 时的字符/token 兜底比。 */\n avgCharsPerToken?: number;\n /** 单个 tool_call 的额外 token 开销估算。 */\n toolCallOverhead?: number;\n}\n\nexport class TokenCalculator {\n private static readonly BYTES_PER_TOKEN_LATIN = 4;\n private static readonly BYTES_PER_TOKEN_CJK = 3;\n private static readonly OVERHEAD_PER_MESSAGE = 5;\n private static readonly OVERHEAD_PER_TOOL_CALL = 10;\n private static encoderCache = new Map<TokenEncodingName, Tiktoken>();\n private static readonly DEFAULT_ENCODING: TokenEncodingName = 'cl100k_base';\n private static readonly SUPPORTED_ENCODINGS = [\n 'gpt2',\n 'r50k_base',\n 'p50k_base',\n 'p50k_edit',\n 'cl100k_base',\n 'o200k_base',\n ] as const satisfies readonly TokenEncodingName[];\n\n private static resolveEncodingFromModelIdentifier(modelIdentifier: string): TokenEncodingName {\n const normalized = (modelIdentifier || '').trim().toLowerCase();\n\n if (this.isSupportedEncodingName(normalized)) {\n return normalized;\n }\n\n if (normalized.includes('deepseek')) {\n return 'cl100k_base';\n }\n\n if (normalized.includes('gpt-4o') || normalized.startsWith('o1')) {\n return 'o200k_base';\n }\n\n if (normalized.includes('gemini') || normalized.includes('claude')) {\n return 'cl100k_base';\n }\n\n return this.DEFAULT_ENCODING;\n }\n\n private static isSupportedEncodingName(value: string): value is TokenEncodingName {\n return this.SUPPORTED_ENCODINGS.some(encoding => encoding === value);\n }\n\n private static getEncoder(modelIdentifierOrEncoding: string): Tiktoken {\n const encodingName = this.resolveEncodingFromModelIdentifier(modelIdentifierOrEncoding);\n const cached = this.encoderCache.get(encodingName);\n if (cached) {\n return cached;\n }\n\n const encoder = get_encoding(encodingName);\n this.encoderCache.set(encodingName, encoder);\n return encoder;\n }\n\n public static estimateTokensRough(text: string | null | undefined, _modelIdentifier?: string): number {\n if (!text) return 0;\n\n const hasCJK = /[\\u4e00-\\u9fa5]|[\\u3040-\\u30ff]|[\\uac00-\\ud7af]/.test(text);\n const ratio = hasCJK ? this.BYTES_PER_TOKEN_CJK : this.BYTES_PER_TOKEN_LATIN;\n const byteLength = new TextEncoder().encode(text).length;\n\n return Math.ceil(byteLength / ratio);\n }\n\n public static estimateTokens(text: string | null | undefined, options: TokenEstimateOptions = {}): number {\n if (!text) return 0;\n\n if (options.encoding) {\n try {\n return this.estimateTokensPrecise(text, options.encoding);\n } catch {\n // 中文备注:tiktoken 运行时不可用时退回声明式 avgCharsPerToken,保证上下文构建不中断。\n }\n }\n\n const avgCharsPerToken = normalizePositiveNumber(options.avgCharsPerToken, 2);\n return Math.ceil(text.length / avgCharsPerToken);\n }\n\n public static estimateTokensPrecise(text: string | null | undefined, modelIdentifier: string): number {\n if (!text) return 0;\n const encoder = this.getEncoder(modelIdentifier);\n return encoder.encode(text).length;\n }\n\n public static estimateMessageTokens(\n message: LlmRequestMessage,\n options: TokenEstimateOptions = {},\n ): number {\n let totalTokens = this.OVERHEAD_PER_MESSAGE;\n\n if (message.content) {\n totalTokens += this.estimateTokens(String(message.content), options);\n }\n\n const toolCalls = this.extractToolCallsForTokenEstimate(message);\n const toolCallOverhead = normalizeNonNegativeInteger(options.toolCallOverhead, this.OVERHEAD_PER_TOOL_CALL);\n for (const toolCall of toolCalls) {\n totalTokens += toolCallOverhead;\n const fn = toolCall['function'];\n if (fn && typeof fn === 'object' && !Array.isArray(fn)) {\n const fnRecord = fn as Record<string, unknown>;\n totalTokens += this.estimateTokens(String(fnRecord['name'] ?? ''), options);\n totalTokens += this.estimateTokens(String(fnRecord['arguments'] ?? ''), options);\n }\n }\n\n const toolCallId = this.extractToolCallIdForTokenEstimate(message);\n if (toolCallId) {\n totalTokens += this.estimateTokens(toolCallId, options);\n }\n\n return totalTokens;\n }\n\n public static estimateMessageTokensPrecise(message: LlmRequestMessage, modelIdentifier: string): number {\n return this.estimateMessageTokens(message, {\n encoding: modelIdentifier,\n toolCallOverhead: this.OVERHEAD_PER_TOOL_CALL,\n });\n }\n\n public static estimateMessagesTokensPrecise(messages: LlmRequestMessage[], modelIdentifier: string): number {\n return messages.reduce((total, msg) => total + this.estimateMessageTokensPrecise(msg, modelIdentifier), 0);\n }\n\n private static extractToolCallsForTokenEstimate(message: LlmRequestMessage): unknown[] {\n const direct = 'tool_calls' in message ? message.tool_calls : undefined;\n if (Array.isArray(direct)) return direct;\n\n const metadata = 'metadata' in message ? message.metadata : undefined;\n if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) return [];\n const metadataRecord = metadata as Record<string, unknown>;\n const metadataToolCalls = metadataRecord['tool_calls'];\n return Array.isArray(metadataToolCalls) ? metadataToolCalls : [];\n }\n\n private static extractToolCallIdForTokenEstimate(message: LlmRequestMessage): string | undefined {\n if ('tool_call_id' in message && typeof message.tool_call_id === 'string') {\n return message.tool_call_id;\n }\n\n const metadata = 'metadata' in message ? message.metadata : undefined;\n if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) return undefined;\n const metadataRecord = metadata as Record<string, unknown>;\n const toolCallId = metadataRecord['tool_call_id'];\n return typeof toolCallId === 'string' ? toolCallId : undefined;\n }\n\n public static truncateTextByTokens(\n text: string,\n maxTokens: number,\n modelIdentifier: string,\n strategy: 'start' | 'end' | 'middle' = 'end',\n ): string {\n if (!text || maxTokens <= 0) return '';\n\n const encoder = this.getEncoder(modelIdentifier);\n const tokens = encoder.encode(text);\n\n if (tokens.length <= maxTokens) {\n return text;\n }\n\n let truncatedTokens: Uint32Array;\n const ellipsis = '...';\n\n switch (strategy) {\n case 'start':\n truncatedTokens = tokens.slice(0, maxTokens);\n return encoder.decode(truncatedTokens) + ellipsis;\n case 'end':\n truncatedTokens = tokens.slice(tokens.length - maxTokens);\n return ellipsis + encoder.decode(truncatedTokens);\n case 'middle': {\n const half = Math.floor(maxTokens / 2);\n const head = tokens.slice(0, half);\n const tail = tokens.slice(tokens.length - (maxTokens - half));\n return encoder.decode(head) + ellipsis + encoder.decode(tail);\n }\n default:\n truncatedTokens = tokens.slice(0, maxTokens);\n return encoder.decode(truncatedTokens) + ellipsis;\n }\n }\n\n public static cleanup(): void {\n for (const encoder of this.encoderCache.values()) {\n encoder.free();\n }\n this.encoderCache.clear();\n }\n}\n\nfunction normalizePositiveNumber(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n return fallback;\n }\n return Math.max(0, Math.floor(value));\n}\n","/**\n * @file src/agent/shared/llmTelemetryContext.ts\n *\n * @description\n * LLM Telemetry 上下文(用于审计/统计,不进入模型上下文,不落库到 EventStore)。\n *\n * 中文备注(设计约束):\n * - 某些“多阶段/多子任务”的审计需要一个可聚合的数据源;\n * - 这些数据不适合塞进 RuntimeEvent(会污染主时间轴、跨端联动成本高);\n * - 因此这里用 AsyncLocalStorage 提供“同一条异步链路内可写入/可聚合”的基础设施;\n * - 默认不启用:只有当业务侧显式用 `withLLMTelemetryContext(...)` 包裹执行链路时才会收集。\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nexport type LlmUsageRaw = {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n /**\n * 兼容:部分 mock/自研 adapter 只返回 usage.tokens\n */\n tokens?: number;\n};\n\nexport type NormalizedLlmUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n};\n\nexport type LLMTelemetryContext = {\n /**\n * 预留:用于业务侧注入“聚合维度”。\n *\n * 中文备注:\n * - 该字段不进入模型上下文、不落库,仅用于本地统计/审计聚合;\n * - 建议只放稳定标识(如 conversationId/turnId/runId 等),避免塞入大对象。\n */\n scope?: {\n conversationId?: string;\n turnId?: string;\n runId?: string;\n stepId?: string;\n stepIndex?: number;\n };\n};\n\nexport type LlmCallTelemetry = {\n modelId: string;\n stream: boolean;\n startedAt: number;\n durationMs: number;\n usage?: NormalizedLlmUsage;\n};\n\ntype Store = {\n ctx: LLMTelemetryContext;\n calls: LlmCallTelemetry[];\n};\n\nconst als = new AsyncLocalStorage<Store>();\n\n/**\n * 轻量规范化:把 provider 的 usage(不同字段名)收敛为统一结构。\n */\nexport function normalizeLlmUsage(usage: unknown): NormalizedLlmUsage | undefined {\n if (!usage || typeof usage !== 'object' || Array.isArray(usage)) return undefined;\n const rec = usage as Record<string, unknown>;\n\n const promptTokensRaw = rec['prompt_tokens'];\n const completionTokensRaw = rec['completion_tokens'];\n const totalTokensRaw = rec['total_tokens'];\n const tokensRaw = rec['tokens'];\n\n const promptTokens = typeof promptTokensRaw === 'number' && Number.isFinite(promptTokensRaw) ? promptTokensRaw : 0;\n const completionTokens =\n typeof completionTokensRaw === 'number' && Number.isFinite(completionTokensRaw) ? completionTokensRaw : 0;\n const totalFromExplicit =\n typeof totalTokensRaw === 'number' && Number.isFinite(totalTokensRaw) ? totalTokensRaw : undefined;\n const totalFromTokens = typeof tokensRaw === 'number' && Number.isFinite(tokensRaw) ? tokensRaw : undefined;\n\n const totalTokens = totalFromExplicit ?? totalFromTokens ?? promptTokens + completionTokens;\n\n if (promptTokens === 0 && completionTokens === 0 && totalTokens === 0) return undefined;\n\n return { promptTokens, completionTokens, totalTokens };\n}\n\nexport function getCurrentLLMTelemetryContext(): LLMTelemetryContext | undefined {\n return als.getStore()?.ctx;\n}\n\nexport function recordLlmCallTelemetry(entry: LlmCallTelemetry): void {\n const store = als.getStore();\n if (!store) return;\n store.calls.push(entry);\n}\n\nexport async function withLLMTelemetryContext<T>(\n ctx: LLMTelemetryContext,\n fn: () => Promise<T>\n): Promise<{ value: T; calls: LlmCallTelemetry[] }> {\n const parent = als.getStore();\n const merged: LLMTelemetryContext = {\n ...(parent?.ctx ?? {}),\n ...(ctx ?? {}),\n };\n const store: Store = { ctx: merged, calls: [] };\n const value = await als.run(store, fn);\n return { value, calls: store.calls };\n}\n","import { TokenCalculator } from '../../../../shared/TokenCalculator';\nimport {\n normalizeLlmUsage,\n recordLlmCallTelemetry,\n} from '../../../../shared/llmTelemetryContext';\nimport { extractResponseText, resolveUsage } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nexport const llmTelemetryMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n await next();\n\n if (stage.id !== 'execute_llm' || ctx.llmCallStartedAt === undefined || ctx.llmCallDurationMs === undefined) {\n return;\n }\n\n const normalizedUsageFromProvider = normalizeLlmUsage(resolveUsage(ctx.llmResp));\n const respText = extractResponseText(ctx.llmResp);\n const normalizedUsage =\n normalizedUsageFromProvider ??\n (() => {\n try {\n const promptTokens = TokenCalculator.estimateMessagesTokensPrecise(ctx.llmMessages, ctx.modelId);\n const completionTokens = TokenCalculator.estimateTokensPrecise(respText, ctx.modelId);\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n };\n } catch {\n return undefined;\n }\n })();\n\n recordLlmCallTelemetry({\n modelId: ctx.modelId,\n stream: ctx.input.stream === true,\n startedAt: ctx.llmCallStartedAt,\n durationMs: ctx.llmCallDurationMs,\n usage: normalizedUsage,\n });\n\n // B2-engine Batch 1: 同步上报到宿主侧 TelemetryPort(默认 noopTelemetry,业务无感)\n // 与 ALS 写入互不影响:ALS 给 benchmark 等\"链路内聚合\"场景,TelemetryPort 给宿主全局 sink。\n ctx.telemetry.emit({\n kind: 'llm_call',\n modelId: ctx.modelId,\n stream: ctx.input.stream === true,\n durationMs: ctx.llmCallDurationMs,\n usage: normalizedUsage,\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n },\n });\n};\n","import { Logger } from '../../../../shared/logger';\nimport { readNonEmptyString } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport const runModelLockMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n await next();\n\n if (stage.id !== 'execute_llm') {\n return;\n }\n\n const normalized = readNonEmptyString(ctx.cloudQuotaFallbackAppliedModelId);\n if (!normalized) {\n return;\n }\n if (ctx.executorLocal?.runLockedModelId === normalized) {\n return;\n }\n if (ctx.executorLocal) {\n ctx.executorLocal.runLockedModelId = normalized;\n }\n logger.warn(`检测到云端额度降级,已锁定本 run 后续模型: ${ctx.modelId} -> ${normalized}`);\n};\n","import type { TickAroundMiddleware, TickPipelineContext, TickStage } from './types';\n\nexport async function runTickPipeline(\n ctx: TickPipelineContext,\n stages: readonly TickStage[],\n middlewares: readonly TickAroundMiddleware[] = [],\n): Promise<void> {\n for (const stage of stages) {\n let runner = () => stage.run(ctx);\n\n for (let index = middlewares.length - 1; index >= 0; index -= 1) {\n const middleware = middlewares[index]!;\n const next = runner;\n runner = () => middleware(ctx, stage, next);\n }\n\n await runner();\n }\n}\n","/**\n * @file shared/checkpointMarker.ts\n * @description 上下文 checkpoint 的跨模块共享协议常量。\n */\n\nexport const CHECKPOINT_MARKER_TYPE = 'context_checkpoint' as const;\nexport const DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME = CHECKPOINT_MARKER_TYPE;\n","import type { SystemReminderContext } from './types';\nexport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../shared/checkpointMarker';\n\nimport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../shared/checkpointMarker';\n\nexport function readNonEmptyStrings(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\n .filter((item) => item.length > 0);\n}\n\nexport function toDisplayStep(nodeSwitches: number): number {\n return Math.ceil(nodeSwitches / 2);\n}\n\nexport function readContextCheckpointToolName(ctx: SystemReminderContext): string {\n const configured = ctx.executorLocal?.contextCheckpointToolName;\n return typeof configured === 'string' && configured.trim().length > 0\n ? configured.trim()\n : DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME;\n}\n\nfunction isRuntimeEventLike(value: unknown): value is { type: unknown } {\n return !!value && typeof value === 'object' && !Array.isArray(value) && 'type' in value;\n}\n\n/**\n * 统计“本轮请求内”的工具调用次数(LLM 决策层)。\n *\n * 中文备注:只统计最后一个 user_input 之后的 tool_call_decision,避免旧事件或 ToolNode\n * 复用 action 语义时把同一轮工具调用重复计数。\n */\nexport function countToolCallsInCurrentRequest(history: ReadonlyArray<unknown>): number {\n let startIdx = 0;\n for (let index = history.length - 1; index >= 0; index -= 1) {\n const event = history[index];\n if (!isRuntimeEventLike(event)) continue;\n if (event.type === 'user_input') {\n startIdx = index + 1;\n break;\n }\n }\n\n let count = 0;\n for (let index = startIdx; index < history.length; index += 1) {\n const event = history[index];\n if (!isRuntimeEventLike(event)) continue;\n if (event.type === 'tool_call_decision') {\n count += 1;\n }\n }\n return count;\n}\n","import {\n countToolCallsInCurrentRequest,\n readContextCheckpointToolName,\n readNonEmptyStrings,\n toDisplayStep,\n} from './helpers';\nimport type { SystemReminderContentTemplate, SystemReminderContext } from './types';\n\nexport const maxStepsForceFinalAnswerTemplate: SystemReminderContentTemplate = () => [\n '你已达到最大步数限制:本轮工具已被禁用。',\n '你必须立刻给出最终答案,不要再尝试调用任何工具。',\n '若信息不完整,请明确说明关键假设和缺口,并给出当前最好的可用回答。',\n].join('\\n');\n\nexport const lastStepsHintTemplate: SystemReminderContentTemplate = (ctx) => {\n const el = ctx.executorLocal;\n if (!el) return '';\n const maxSteps = el.maxSteps;\n const stepCount = el.stepCount;\n const remainingSteps = el.remainingSteps;\n if (typeof maxSteps !== 'number' || typeof stepCount !== 'number' || typeof remainingSteps !== 'number') {\n return '';\n }\n\n const displayMaxSteps = toDisplayStep(maxSteps);\n const displayStepCount = toDisplayStep(stepCount);\n const displayRemainingSteps = toDisplayStep(remainingSteps);\n const finalStepPolicy = el.finalStepPolicy ?? 'final_answer';\n\n if (finalStepPolicy === 'force_tools') {\n const forcedTools = readNonEmptyStrings(el.finalStepForcedTools);\n const toolsText = forcedTools.length > 0 ? forcedTools.join(', ') : '(未配置 forcedTools)';\n return [\n `步数提醒:你当前处于第 ${displayStepCount}/${displayMaxSteps} 步,还剩 ${displayRemainingSteps} 步。`,\n `当剩余 1 步时:你必须立刻调用工具:${toolsText}(系统将只保留这些工具)。`,\n '最后 1 步将用于执行工具,因此不要在最后一步才尝试再调用其他工具。',\n ].join('\\n');\n }\n\n return [\n `步数提醒:你当前处于第 ${displayStepCount}/${displayMaxSteps} 步,还剩 ${displayRemainingSteps} 步。`,\n '建议你结束无关推理/无关工具调用,确保在步数耗尽前完成任务。',\n ].join('\\n');\n};\n\nexport const toolCallStreakTemplate: SystemReminderContentTemplate = (ctx) => {\n const count = countToolCallsInCurrentRequest(ctx.history);\n return [\n `你已连续执行了 ${count} 次工具调用。`,\n '如果问题比较复杂,考虑创建sub-agent,也就是task,以降低上下文占用。',\n '如果问题即将解决,请忽略本条提醒。',\n ].join('\\n');\n};\n\nexport const periodicTaskstateReflectionTemplate: SystemReminderContentTemplate = (ctx) => {\n const stepCount = ctx.executorLocal?.stepCount ?? 0;\n const displayStep = toDisplayStep(stepCount);\n return [\n `你已执行了 ${displayStep} 步。请暂停当前工作,花一步反思和整理:`,\n '1. 回顾你最近的 taskstate_write 输出,确认当前工作方向正确(没有偏离 Goal)。',\n '2. 调用 taskstate_write 更新 progress 和 next_steps,如有必要调整 current_plan。',\n '3. 如果任务复杂但尚未创建 TaskState,现在是创建的好时机。',\n '完成整理后继续执行任务。',\n ].join('\\n');\n};\n\nexport const contextBudgetWarningTemplate: SystemReminderContentTemplate = (ctx) => {\n const stepCount = ctx.executorLocal?.stepCount ?? 0;\n const maxSteps = ctx.executorLocal?.maxSteps ?? 0;\n const displayStep = toDisplayStep(stepCount);\n const displayMax = toDisplayStep(maxSteps);\n const checkpointToolName = readContextCheckpointToolName(ctx);\n return [\n `⚠️ 上下文预算告警:你已执行了 ${displayStep}/${displayMax} 步,上下文空间即将耗尽。`,\n '你必须立即执行以下操作以避免上下文溢出:',\n '1. 调用sharedmemory_write工具,将当前发现、总结、思考或者任何重要信息详细写入sharedmemory。',\n `2. 调用 ${checkpointToolName} 工具,传入 summary(阶段过渡摘要)和 taskstate(最新任务状态)。`,\n ' 这会一次性完成\"保存状态 + 清理历史\",checkpoint tool_output 中会保留你的 TaskState 快照。',\n '3. 清理后你的上下文将只保留:checkpoint 工具对(含摘要 + TaskState)+ 最近 2 对工具交互。重要信息会通过sharedmemory保存。',\n ].join('\\n');\n};\n\nexport const BUILTIN_SYSTEM_REMINDER_TEMPLATES: Record<string, SystemReminderContentTemplate> = {\n maxStepsForceFinalAnswer: maxStepsForceFinalAnswerTemplate,\n lastStepsHint: lastStepsHintTemplate,\n toolCallStreak: toolCallStreakTemplate,\n periodicTaskstateReflection: periodicTaskstateReflectionTemplate,\n contextBudgetWarning: contextBudgetWarningTemplate,\n};\n","import type { AgentSpecSystemReminderTrigger } from '../../contracts';\nimport { countToolCallsInCurrentRequest, readContextCheckpointToolName } from './helpers';\nimport type { SystemReminderContext, SystemReminderTriggerEvaluator } from './types';\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction getTriggerThreshold(trigger: AgentSpecSystemReminderTrigger): number | undefined {\n return readNumber(trigger.threshold);\n}\n\nexport const phaseEqualsTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const expected = readString(trigger.value);\n return !!expected && ctx.executorLocal?.phase === expected;\n};\n\nexport const remainingStepsLeqTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const remainingSteps = readNumber(ctx.executorLocal?.remainingSteps);\n const threshold = getTriggerThreshold(trigger) ?? readNumber(ctx.executorLocal?.lastStepsHintThreshold);\n if (remainingSteps === undefined || threshold === undefined || threshold <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n return remainingSteps <= threshold;\n};\n\nexport const stepCountModuloTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const stepCount = readNumber(ctx.executorLocal?.stepCount);\n const period = readNumber(trigger.period) ?? getTriggerThreshold(trigger);\n const minStep = readNumber(trigger.minStep) ?? period;\n if (stepCount === undefined || period === undefined || period <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n if (stepCount < (minStep ?? 0)) return false;\n return stepCount % period === 0;\n};\n\nexport const toolCallStreakTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const threshold = getTriggerThreshold(trigger) ?? 10;\n if (threshold <= 0) return false;\n const count = countToolCallsInCurrentRequest(ctx.history);\n if (count < threshold) return false;\n return trigger.moduloStep === false ? true : count % threshold === 0;\n};\n\nexport const budgetWarningTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const toolName = readString(trigger.toolName) ?? readContextCheckpointToolName(ctx);\n const tools = ctx.request.availableTools;\n if (!Array.isArray(tools) || !tools.includes(toolName)) return false;\n\n const stepCount = readNumber(ctx.executorLocal?.stepCount);\n const maxSteps = readNumber(ctx.executorLocal?.maxSteps);\n const ratio = readNumber(trigger.ratio) ?? 0.9;\n if (stepCount === undefined || maxSteps === undefined || maxSteps <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n\n const threshold = Math.floor(maxSteps * ratio);\n return stepCount >= threshold && stepCount < threshold + 4;\n};\n\nexport const agentHasToolTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const toolName = readString(trigger.toolName) ?? readString(trigger.value);\n if (!toolName || !Array.isArray(ctx.request.availableTools)) return false;\n return ctx.request.availableTools.includes(toolName);\n};\n\nexport const BUILTIN_SYSTEM_REMINDER_TRIGGERS: Record<string, SystemReminderTriggerEvaluator> = {\n 'phase-equals': phaseEqualsTrigger,\n 'remaining-steps-leq': remainingStepsLeqTrigger,\n 'step-count-modulo': stepCountModuloTrigger,\n 'tool-call-streak': toolCallStreakTrigger,\n 'budget-warning': budgetWarningTrigger,\n 'agent-has-tool': agentHasToolTrigger,\n};\n","import { BUILTIN_SYSTEM_REMINDER_TEMPLATES } from './templates';\nimport { BUILTIN_SYSTEM_REMINDER_TRIGGERS } from './triggers';\nimport type {\n SystemReminderContentTemplate,\n SystemReminderRule,\n SystemReminderRuleDefinition,\n SystemReminderTriggerEvaluator,\n} from './types';\n\nexport class SystemReminderRegistry {\n private readonly triggers = new Map<string, SystemReminderTriggerEvaluator>();\n private readonly templates = new Map<string, SystemReminderContentTemplate>();\n\n constructor(seed?: {\n triggers?: Record<string, SystemReminderTriggerEvaluator>;\n templates?: Record<string, SystemReminderContentTemplate>;\n }) {\n for (const [kind, evaluator] of Object.entries(seed?.triggers ?? {})) {\n this.registerTriggerKind(kind, evaluator);\n }\n for (const [name, template] of Object.entries(seed?.templates ?? {})) {\n this.registerContentTemplate(name, template);\n }\n }\n\n registerTriggerKind(kind: string, evaluator: SystemReminderTriggerEvaluator): void {\n const normalized = kind.trim();\n if (!normalized) {\n throw new Error('[SystemReminderRegistry] trigger kind 不能为空');\n }\n this.triggers.set(normalized, evaluator);\n }\n\n registerContentTemplate(name: string, template: SystemReminderContentTemplate): void {\n const normalized = name.trim();\n if (!normalized) {\n throw new Error('[SystemReminderRegistry] content template 不能为空');\n }\n this.templates.set(normalized, template);\n }\n\n buildRule(definition: SystemReminderRuleDefinition): SystemReminderRule | undefined {\n const trigger = this.triggers.get(definition.trigger.kind);\n const template = this.templates.get(definition.contentTemplate);\n if (!trigger || !template) {\n return undefined;\n }\n\n return {\n id: definition.id,\n when: (ctx) => trigger(ctx, definition.trigger),\n build: (ctx) => template(ctx, definition.contentArgs),\n };\n }\n}\n\nexport function createDefaultSystemReminderRegistry(): SystemReminderRegistry {\n return new SystemReminderRegistry({\n triggers: BUILTIN_SYSTEM_REMINDER_TRIGGERS,\n templates: BUILTIN_SYSTEM_REMINDER_TEMPLATES,\n });\n}\n\nexport const defaultSystemReminderRegistry = createDefaultSystemReminderRegistry();\n","/**\n * @file src/agent/runtime-kernel/system-reminder/rules.ts\n * @description SystemReminder 规则集合(注册式配置入口)\n *\n * 中文备注:\n * - 内置规则也走 trigger + template,和 host extraRules 使用同一套解释链路;\n * - spec 只引用 rule/template/trigger ID,不塞函数,保证可序列化、可回放、可审计。\n */\n\nimport type { AgentSpecSystemReminderPolicy } from '../../contracts';\nimport { defaultSystemReminderRegistry, type SystemReminderRegistry } from './registry';\nimport type { SystemReminderRule, SystemReminderRuleDefinition } from './types';\n\nexport const SYSTEM_REMINDER_RULES: ReadonlyArray<SystemReminderRuleDefinition> = [\n {\n id: 'max_steps_force_final_answer',\n trigger: { kind: 'phase-equals', value: 'force_final_answer' },\n contentTemplate: 'maxStepsForceFinalAnswer',\n },\n {\n id: 'last_steps_hint',\n trigger: { kind: 'remaining-steps-leq' },\n contentTemplate: 'lastStepsHint',\n },\n {\n id: 'tool_call_streak_every_ten',\n trigger: { kind: 'tool-call-streak', threshold: 10, moduloStep: true },\n contentTemplate: 'toolCallStreak',\n },\n {\n id: 'periodic_taskstate_reflection',\n trigger: { kind: 'step-count-modulo', period: 30, minStep: 30 },\n contentTemplate: 'periodicTaskstateReflection',\n },\n {\n id: 'context_budget_warning',\n trigger: { kind: 'budget-warning', ratio: 0.9 },\n contentTemplate: 'contextBudgetWarning',\n },\n];\n\nexport function createSystemReminderRules(params: {\n policy?: AgentSpecSystemReminderPolicy;\n registry?: SystemReminderRegistry;\n} = {}): ReadonlyArray<SystemReminderRule> {\n const registry = params.registry ?? defaultSystemReminderRegistry;\n const definitions = applySystemReminderPolicy(SYSTEM_REMINDER_RULES, params.policy);\n const extraDefinitions = params.policy?.extraRules ?? [];\n\n return [...definitions, ...extraDefinitions]\n .map((definition) => registry.buildRule(definition))\n .filter((rule): rule is SystemReminderRule => !!rule);\n}\n\nfunction applySystemReminderPolicy(\n definitions: ReadonlyArray<SystemReminderRuleDefinition>,\n policy: AgentSpecSystemReminderPolicy | undefined,\n): ReadonlyArray<SystemReminderRuleDefinition> {\n const withThresholds = definitions.map((definition) => applyThresholdOverrides(definition, policy));\n const enabledRuleIds = policy?.enabledRuleIds;\n if (Array.isArray(enabledRuleIds)) {\n const allow = new Set(enabledRuleIds);\n return withThresholds.filter((definition) => allow.has(definition.id));\n }\n\n const disabledRuleIds = policy?.disabledRuleIds;\n if (Array.isArray(disabledRuleIds) && disabledRuleIds.length > 0) {\n const deny = new Set(disabledRuleIds);\n return withThresholds.filter((definition) => !deny.has(definition.id));\n }\n\n return withThresholds;\n}\n\nfunction applyThresholdOverrides(\n definition: SystemReminderRuleDefinition,\n policy: AgentSpecSystemReminderPolicy | undefined,\n): SystemReminderRuleDefinition {\n const thresholds = policy?.thresholds;\n if (!thresholds) return definition;\n\n if (definition.id === 'tool_call_streak_every_ten' && thresholds.toolCallStreak !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, threshold: thresholds.toolCallStreak },\n };\n }\n if (definition.id === 'periodic_taskstate_reflection' && thresholds.taskstateReflectionPeriod !== undefined) {\n return {\n ...definition,\n trigger: {\n ...definition.trigger,\n period: thresholds.taskstateReflectionPeriod,\n minStep: thresholds.taskstateReflectionPeriod,\n },\n };\n }\n if (definition.id === 'context_budget_warning' && thresholds.budgetWarningRatio !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, ratio: thresholds.budgetWarningRatio },\n };\n }\n if (definition.id === 'last_steps_hint' && thresholds.lastStepsHintThreshold !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, threshold: thresholds.lastStepsHintThreshold },\n };\n }\n return definition;\n}\n","/**\n * @file src/agent/runtime-kernel/system-reminder/apply.ts\n * @description SystemReminder 注入引擎:把提醒追加到“最后一条将发送给 LLM 的 message.content”末尾\n *\n * 关键约束(根因级):\n * - 这里的注入只发生在“即将发给 LLM 的 messages”数组上\n * - 不生成 RuntimeEvent,不写入 history,不进入数据库(下一次 request 不可回放)\n * - 允许出现在 LLMRunAudit(after_context_manager)里:因为它属于“本次真实发给模型的输入”\n */\n\nimport type { AgentSpecSystemReminderPolicy } from '../../contracts';\nimport { createSystemReminderRules } from './rules';\nimport { defaultSystemReminderRegistry, type SystemReminderRegistry } from './registry';\nimport type { SystemReminderContext, SystemReminderRule } from './types';\nimport { Logger } from '../../shared/logger';\n\ntype LlmMessage = Record<string, unknown> & { content?: unknown };\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object' && !Array.isArray(v);\n\nconst logger = new Logger('SystemReminder');\n\nconst readString = (v: unknown): string | undefined => {\n if (typeof v !== 'string') return undefined;\n const s = v;\n return s.length > 0 ? s : undefined;\n};\n\nconst normalizeReminderText = (raw: string): string | undefined => {\n const t = raw.trim();\n return t.length > 0 ? t : undefined;\n};\n\nconst wrapSystemReminderTag = (body: string): string => {\n // 中文备注:统一用标签包裹,方便模型识别,也方便未来 UI/解析侧按标签提取\n return `<system-reminder>\\n${body}\\n</system-reminder>`;\n};\n\n/**\n * 将 system-reminder 追加到最后一条消息末尾(原地返回新数组,但不修改原数组引用)\n */\nexport function applySystemReminders(params: {\n llmMessages: unknown[];\n ctx: SystemReminderContext;\n rules?: ReadonlyArray<SystemReminderRule>;\n policy?: AgentSpecSystemReminderPolicy;\n registry?: SystemReminderRegistry;\n /**\n * 🔔 命中回调:仅当本次确实发生注入时触发\n *\n * 中文备注:\n * - 用于“审计增强”:在 after_context_manager 覆盖写语义下,仍能保留命中时刻的快照;\n * - 回调只传递最小信息(ruleIds),避免额外依赖和体积膨胀。\n */\n onInjected?: (info: { ruleIds: string[] }) => void;\n}): unknown[] {\n const { llmMessages, ctx } = params;\n const policy = params.policy ?? ctx.executorLocal?.systemReminderPolicy;\n const rules = params.rules ?? createSystemReminderRules({\n policy,\n registry: params.registry ?? defaultSystemReminderRegistry,\n });\n\n if (!Array.isArray(llmMessages) || llmMessages.length === 0) return llmMessages;\n\n // 1) 计算本 tick 的提醒文本列表\n const seenRuleIds = new Set<string>();\n const injectedRuleIds: string[] = [];\n const texts: string[] = [];\n for (const rule of rules) {\n if (!rule || typeof rule !== 'object') continue;\n if (typeof rule.id !== 'string' || rule.id.trim().length === 0) continue;\n if (seenRuleIds.has(rule.id)) continue;\n\n let hit = false;\n try {\n hit = rule.when(ctx);\n } catch {\n hit = false;\n }\n if (!hit) continue;\n\n seenRuleIds.add(rule.id);\n try {\n const built = rule.build(ctx);\n const normalized = normalizeReminderText(built);\n if (normalized) {\n injectedRuleIds.push(rule.id);\n texts.push(normalized);\n }\n } catch {\n // 中文备注:规则必须是纯函数且可控;这里不做“推测性兜底”,失败就跳过该规则\n }\n }\n\n if (texts.length === 0) return llmMessages;\n\n // 2) 组装一个标签块(多条提醒合并到同一个 <system-reminder> 中)\n const body = texts.map((t) => `- ${t.replace(/\\n/g, '\\n ')}`).join('\\n');\n const tag = wrapSystemReminderTag(body);\n\n // 3) 只追加到最后一条消息的 content 末尾(不新增消息)\n const lastIdx = llmMessages.length - 1;\n const last = llmMessages[lastIdx];\n if (!isRecord(last)) return llmMessages;\n\n const lastMsg: LlmMessage = last;\n const currentContent = readString(lastMsg.content) ?? '';\n const glue = currentContent.length > 0 && !currentContent.endsWith('\\n') ? '\\n\\n' : '\\n';\n const nextContent = `${currentContent}${glue}${tag}`;\n\n const nextMessages = [...llmMessages];\n nextMessages[lastIdx] = { ...lastMsg, content: nextContent };\n\n /**\n * ✅ 轻量审计日志(方案 B)\n *\n * 中文备注(根因级):\n * - after_context_manager 审计点只保留“最后一次 messages”,中途注入可能被覆盖;\n * - 因此这里在“确实发生注入”时打一条极简日志,便于确认触发时机(例如第 10 次 tool_calls)。\n * - 严格限制输出体积:只输出 ruleId 列表与少量 executorLocal 关键字段,避免每次 request 都刷屏。\n */\n if (typeof params.onInjected === 'function') {\n try {\n params.onInjected({ ruleIds: injectedRuleIds });\n } catch {\n // 中文备注:回调是可选扩展点;失败不应影响主链路\n }\n }\n logger.info('SystemReminder 已注入到 LLM 输入末尾', {\n ruleIds: injectedRuleIds.length > 0 ? injectedRuleIds : Array.from(seenRuleIds),\n promptKey: ctx.request.promptKey,\n executorLocal: {\n phase: ctx.executorLocal?.phase,\n stepCount: ctx.executorLocal?.stepCount,\n maxSteps: ctx.executorLocal?.maxSteps,\n remainingSteps: ctx.executorLocal?.remainingSteps,\n finalStepPolicy: ctx.executorLocal?.finalStepPolicy,\n lastStepsHintThreshold: ctx.executorLocal?.lastStepsHintThreshold,\n },\n });\n return nextMessages;\n}\n","import { applySystemReminders } from '../../../system-reminder/apply';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport type { AiMessage } from '../../../../contracts';\n\nexport function createApplySystemReminderStage(): TickStage {\n return {\n id: 'apply_system_reminder',\n async run(ctx: TickPipelineContext): Promise<void> {\n ctx.systemReminderHitRuleIds = undefined;\n ctx.llmMessages = applySystemReminders({\n llmMessages: ctx.llmMessages,\n ctx: {\n request: ctx.request,\n history: ctx.history,\n executorLocal: ctx.executorLocal,\n },\n policy: ctx.executorLocal?.systemReminderPolicy,\n onInjected: ({ ruleIds }) => {\n ctx.systemReminderHitRuleIds = Array.isArray(ruleIds) ? ruleIds : [];\n },\n }) as AiMessage[];\n },\n };\n}\n","import { Logger } from '../../../../shared/logger';\nimport type { GraphExecutorContextBuilder } from '../../executorContextBuilder';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport {\n buildHistorySummaryRuntimeEvent,\n isHistorySummaryEvent,\n} from '../helpers';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport interface BuildContextStageDependencies {\n contextBuilder: GraphExecutorContextBuilder;\n}\n\nexport function createBuildContextStage(\n dependencies: BuildContextStageDependencies,\n): TickStage {\n return {\n id: 'build_context',\n async run(ctx: TickPipelineContext): Promise<void> {\n const contextBuildResult = await dependencies.contextBuilder.build({\n request: ctx.request,\n history: ctx.history,\n summarizationCallbacks: ctx.summarizationCallbacks,\n modelId: ctx.modelId,\n signal: ctx.signal,\n });\n\n ctx.mode = contextBuildResult.mode;\n ctx.llmMessages = contextBuildResult.llmMessages;\n ctx.contextTrace = contextBuildResult.contextTrace;\n\n for (const event of contextBuildResult.summaryEvents) {\n if (!isHistorySummaryEvent(event)) {\n continue;\n }\n const runtimeEvent = buildHistorySummaryRuntimeEvent(event, ctx.conversationId, ctx.turnId);\n ctx.eventHandler?.(runtimeEvent);\n logger.info('[GraphAgentExecutor] 发出上下文构建摘要事件', {\n mode: ctx.mode,\n eventId: runtimeEvent.id,\n });\n }\n },\n };\n}\n","import { generateMessageId } from '../../../../shared/ids';\nimport type {\n FinalAnswerEvent,\n ToolCallDecisionEvent,\n} from '../../../events/agentEvents';\nimport type { ToolPresentationPort } from '../../../tools/ports';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport {\n extractResponseText,\n normalizeToolCalls,\n parsePrimaryToolArgs,\n resolveReasoningDetails,\n resolveToolCalls,\n} from '../helpers';\n\nexport interface BuildDecisionStageDependencies {\n toolPresentation: Pick<ToolPresentationPort, 'getDisplayOptions'>;\n}\n\nexport function createBuildDecisionStage(\n dependencies: BuildDecisionStageDependencies,\n): TickStage {\n return {\n id: 'build_decision',\n async run(ctx: TickPipelineContext): Promise<void> {\n const respText = extractResponseText(ctx.llmResp);\n const toolCallsRaw = resolveToolCalls(ctx.llmResp);\n const reasoningDetailsRaw = resolveReasoningDetails(ctx.llmResp);\n const toolCalls = ctx.forceFinalAnswer ? undefined : toolCallsRaw;\n\n if (toolCalls?.length) {\n const normalizedToolCalls = normalizeToolCalls(toolCalls);\n const firstToolCall = normalizedToolCalls[0];\n const primaryArgs = parsePrimaryToolArgs(firstToolCall);\n const primaryToolName = firstToolCall?.function?.name ?? 'unknown';\n const primaryToolCallId = firstToolCall?.id ?? '';\n\n const actionEvent: ToolCallDecisionEvent = {\n type: 'tool_call_decision',\n timestamp: Date.now(),\n tool_name: primaryToolName,\n tool_args: primaryArgs,\n tool_calls: normalizedToolCalls,\n tool_call_id: primaryToolCallId,\n status: 'loading',\n payload: {\n args: primaryArgs,\n tool_calls: normalizedToolCalls,\n ...(Array.isArray(reasoningDetailsRaw) && reasoningDetailsRaw.length > 0\n ? { reasoning_details: reasoningDetailsRaw }\n : {}),\n },\n meta: {\n displayOptions: dependencies.toolPresentation.getDisplayOptions(primaryToolName),\n primary_tool_call_id: primaryToolCallId,\n tool_call_ids: normalizedToolCalls.map((toolCall) => toolCall.id),\n tool_batch_size: normalizedToolCalls.length,\n },\n id: generateMessageId(),\n };\n\n ctx.eventHandler?.(actionEvent);\n ctx.decision = {\n kind: 'tool_calls',\n toolCalls: normalizedToolCalls,\n };\n return;\n }\n\n if (!ctx.input.stream) {\n const answerId = generateMessageId();\n const finalAnswerSidecar = Array.isArray(reasoningDetailsRaw) && reasoningDetailsRaw.length > 0\n ? { reasoning_details: reasoningDetailsRaw }\n : {};\n const finalEvent: FinalAnswerEvent = {\n type: 'final_answer',\n timestamp: Date.now(),\n answer: respText,\n id: generateMessageId(),\n ...finalAnswerSidecar,\n };\n ctx.eventHandler?.(finalEvent);\n ctx.newEvents.push({\n type: 'final_answer',\n id: finalEvent.id!,\n conversation_id: ctx.conversationId,\n turn_id: ctx.turnId,\n timestamp: finalEvent.timestamp,\n version: 1,\n answer_id: answerId,\n content: respText,\n is_complete: true,\n ...finalAnswerSidecar,\n });\n ctx.decision = { kind: 'final_answer', answer: respText };\n return;\n }\n\n ctx.decision = { kind: 'yield' };\n },\n };\n}\n","import type {\n AuditActor,\n AuditCostDelta,\n AuditDecision,\n AuditEvidence,\n AuditScope,\n} from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeId } from '../../shared/ids';\n\nexport interface EmitAuditEnvelopeParams {\n runId?: string;\n parentRunId?: string;\n actor?: AuditActor;\n action: string;\n decision?: AuditDecision;\n evidence?: AuditEvidence[];\n costDelta?: AuditCostDelta;\n scope: AuditScope;\n}\n\nfunction resolveRunId(params: EmitAuditEnvelopeParams): string {\n const runId = params.runId ?? params.scope.runId ?? params.scope.turnId;\n if (typeof runId === 'string' && runId.trim().length > 0) {\n return runId;\n }\n throw new Error(`Audit action ${params.action} requires runId or scope.turnId`);\n}\n\n/**\n * 统一发出 AuditEnvelope。\n *\n * 中文备注:\n * - 调用点只描述“谁做了什么决策”,这里统一补 envelopeId / ts / runId;\n * - 不吞 emit 异常,审计链路异常应由上层测试或 host 策略显式处理。\n */\nexport async function emitAuditEnvelope(\n auditPort: AuditPort,\n params: EmitAuditEnvelopeParams,\n): Promise<void> {\n const runId = resolveRunId(params);\n await auditPort.emit({\n envelopeId: generateAuditEnvelopeId(),\n runId,\n parentRunId: params.parentRunId ?? params.scope.parentRunId,\n ts: Date.now(),\n actor: params.actor ?? { kind: 'system' },\n action: params.action,\n decision: params.decision,\n evidence: params.evidence,\n costDelta: params.costDelta,\n scope: {\n ...params.scope,\n runId,\n },\n });\n}\n\nexport async function emitSandboxDecisionAudit(\n auditPort: AuditPort,\n params: {\n scope: AuditScope;\n allowed: boolean;\n reason?: string;\n policy?: string;\n evidence?: AuditEvidence[];\n },\n): Promise<void> {\n await emitAuditEnvelope(auditPort, {\n action: 'sandbox.decide',\n actor: { kind: 'system' },\n decision: {\n outcome: params.allowed ? 'allowed' : 'denied',\n reason: params.reason,\n policy: params.policy,\n },\n evidence: params.evidence,\n scope: params.scope,\n });\n}\n","import type { AnyAgentEvent } from '../../../events/agentEvents';\nimport type { LlmCaller } from '../../../llm/caller';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport { readNonEmptyString } from '../helpers';\nimport { emitAuditEnvelope } from '../../../audit/emitAudit';\n\nexport interface ExecuteLlmStageDependencies {\n llmCaller: Pick<LlmCaller, 'callWithRetries'>;\n}\n\nexport function createExecuteLlmStage(\n dependencies: ExecuteLlmStageDependencies,\n): TickStage {\n return {\n id: 'execute_llm',\n async run(ctx: TickPipelineContext): Promise<void> {\n ctx.cloudQuotaFallbackAppliedModelId = undefined;\n ctx.modelFallbackAudit = undefined;\n\n const streamEventHandler: ((event: AnyAgentEvent) => void) | undefined =\n ctx.input.stream && ctx.eventHandler\n ? (event: AnyAgentEvent) => {\n ctx.eventHandler?.(event);\n }\n : undefined;\n\n ctx.llmCallStartedAt = Date.now();\n ctx.llmResp = await dependencies.llmCaller.callWithRetries(\n ctx.modelId,\n ctx.llmMessages,\n ctx.llmOptions,\n streamEventHandler,\n ctx.signal,\n (fallbackModelId: string) => {\n ctx.cloudQuotaFallbackAppliedModelId = readNonEmptyString(fallbackModelId);\n },\n (info) => {\n ctx.modelFallbackAudit = info;\n },\n );\n ctx.llmCallDurationMs = Date.now() - ctx.llmCallStartedAt;\n\n if (ctx.modelFallbackAudit) {\n await emitAuditEnvelope(ctx.audit, {\n action: 'model.fallback',\n actor: { kind: 'system' },\n decision: {\n outcome: 'fallback',\n reason: ctx.modelFallbackAudit.reason,\n policy: ctx.modelFallbackAudit.policy,\n metadata: {\n fromModelId: ctx.modelFallbackAudit.fromModelId,\n toModelId: ctx.modelFallbackAudit.toModelId,\n },\n },\n evidence: [\n {\n kind: 'llm_error',\n summary: ctx.modelFallbackAudit.reason,\n },\n ],\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n modelId: ctx.modelFallbackAudit.toModelId,\n },\n });\n }\n },\n };\n}\n","import type { LlmCallOptions } from '../../../llm/caller';\nimport type { ModelCatalogLike } from '../../../llm/modelCatalog';\nimport type { ModelResolverLike } from '../../../llm/modelResolver';\nimport type { ToolCatalogPort } from '../../../tools/ports';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport { readNonEmptyString } from '../helpers';\nimport { emitAuditEnvelope } from '../../../audit/emitAudit';\n\nexport interface PrepareCallStageDependencies {\n modelResolver: Pick<ModelResolverLike, 'resolveModelId'>;\n modelCatalog: Pick<ModelCatalogLike, 'getModelById'>;\n toolCatalog: Pick<ToolCatalogPort, 'getToolSchemas'>;\n cloudQuotaFallbackModelId?: string;\n}\n\nexport function createPrepareCallStage(\n dependencies: PrepareCallStageDependencies,\n): TickStage {\n return {\n id: 'prepare_call',\n async run(ctx: TickPipelineContext): Promise<void> {\n const lockedRunModelId = readNonEmptyString(ctx.executorLocal?.runLockedModelId);\n const requestedModelId = lockedRunModelId ?? ctx.request.model_id;\n ctx.modelId = dependencies.modelResolver.resolveModelId(requestedModelId);\n await emitAuditEnvelope(ctx.audit, {\n action: 'model.select',\n actor: { kind: 'system' },\n decision: {\n outcome: 'recorded',\n reason: lockedRunModelId\n ? 'run model lock'\n : requestedModelId\n ? 'request model id'\n : 'default model resolver',\n metadata: {\n requestedModelId,\n lockedRunModelId,\n selectedModelId: ctx.modelId,\n },\n },\n evidence: [\n {\n kind: 'model_resolver',\n summary: `selected ${ctx.modelId}`,\n },\n ],\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n modelId: ctx.modelId,\n },\n });\n ctx.toolSchemas = dependencies.toolCatalog.getToolSchemas(ctx.request.availableTools, {\n imageGenerationModelId: ctx.request.imageGenerationModelId,\n });\n\n const llmOptions: LlmCallOptions = {};\n if (!ctx.forceFinalAnswer && ctx.request.enableTools !== false && ctx.toolSchemas.length > 0) {\n llmOptions.tools = ctx.toolSchemas;\n if (ctx.executorLocal?.phase === 'force_tools') {\n const firstToolName = ctx.toolSchemas[0]?.function?.name;\n llmOptions.tool_choice =\n typeof firstToolName === 'string' && firstToolName.trim().length > 0\n ? { type: 'function', function: { name: firstToolName.trim() } }\n : 'auto';\n } else {\n llmOptions.tool_choice = 'auto';\n }\n } else {\n llmOptions.tool_choice = 'none';\n }\n\n const modelConfig = dependencies.modelCatalog.getModelById(ctx.modelId);\n // 云端限额降级仅在 run 内续跑时生效,用户发起的首次 LLM 调用不降级(直接报错)。\n // 判定依据:user(step 1)→llm(step 2) 时 stepCount===2,属于用户发起;\n // 其余场景(tool 后续跑 stepCount>2、checkpoint 重置 stepCount=1、child-run stepCount=1)均为续跑。\n const stepCount = ctx.executorLocal?.stepCount;\n const isRunContinuation = typeof stepCount === 'number' && stepCount !== 2;\n if (\n dependencies.cloudQuotaFallbackModelId &&\n modelConfig?.billing_mode === 'cloud' &&\n ctx.modelId !== dependencies.cloudQuotaFallbackModelId &&\n isRunContinuation\n ) {\n llmOptions.cloud_quota_fallback_model_id = dependencies.cloudQuotaFallbackModelId;\n }\n\n ctx.llmOptions = llmOptions;\n },\n };\n}\n","/**\n * @file src/agent/runtime-kernel/graph-engine/executor.ts\n *\n * @brief 图执行引擎的单步推理执行器\n */\nimport type { LlmCaller } from '../llm/caller';\nimport { createEmptyModelCatalog, type ModelCatalogLike } from '../llm/modelCatalog';\nimport { ModelResolver, type ModelResolverLike } from '../llm/modelResolver';\nimport { noopTelemetry } from '../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\nimport { noopAudit } from '../audit/noopAudit';\nimport type { AuditPort } from '../../ports';\nimport type { ToolCatalogPort, ToolPresentationPort } from '../tools/ports';\nimport { Logger } from '../../shared/logger';\nimport type { GraphExecutorContextBuilder } from './executorContextBuilder';\nimport {\n resolveConversationIdForRuntimeEvents,\n readNonEmptyString,\n} from './tick-pipeline/helpers';\nimport { contextAuditMiddleware } from './tick-pipeline/middlewares/contextAuditMiddleware';\nimport { llmTelemetryMiddleware } from './tick-pipeline/middlewares/llmTelemetryMiddleware';\nimport { runModelLockMiddleware } from './tick-pipeline/middlewares/runModelLockMiddleware';\nimport { runTickPipeline } from './tick-pipeline/runTickPipeline';\nimport { createApplySystemReminderStage } from './tick-pipeline/stages/applySystemReminderStage';\nimport { createBuildContextStage } from './tick-pipeline/stages/buildContextStage';\nimport { createBuildDecisionStage } from './tick-pipeline/stages/buildDecisionStage';\nimport { createExecuteLlmStage } from './tick-pipeline/stages/executeLlmStage';\nimport { createPrepareCallStage } from './tick-pipeline/stages/prepareCallStage';\nimport type {\n TickAroundMiddleware,\n TickEvent,\n TickInput,\n TickOutput,\n TickPipelineContext,\n TickStage,\n} from './tick-pipeline/types';\n\nexport type {\n AgentStepDecision,\n TickEvent,\n TickInput,\n TickOutput,\n} from './tick-pipeline/types';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport interface GraphAgentExecutorOptions {\n cloudQuotaFallbackModelId?: string;\n modelCatalog?: ModelCatalogLike;\n modelResolver?: Pick<ModelResolverLike, 'resolveModelId'>;\n}\n\nexport interface GraphAgentExecutorToolRuntime\n extends Pick<ToolCatalogPort, 'getToolSchemas'>,\n Pick<ToolPresentationPort, 'getDisplayOptions'> {}\n\nexport interface GraphAgentExecutorLlmCaller\n extends Pick<LlmCaller, 'callWithRetries'> {}\n\nexport interface GraphAgentExecutorDependencies extends GraphAgentExecutorOptions {\n llmCaller: GraphAgentExecutorLlmCaller;\n toolRuntime: GraphAgentExecutorToolRuntime;\n contextBuilder: GraphExecutorContextBuilder;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(保持当前行为:observability 默认关闭,零业务影响)。\n */\n telemetryPort?: TelemetryPort;\n auditPort?: AuditPort;\n}\n\nexport class GraphAgentExecutor {\n private readonly llmCaller: GraphAgentExecutorLlmCaller;\n private readonly toolRuntime: GraphAgentExecutorToolRuntime;\n private readonly contextBuilder: GraphExecutorContextBuilder;\n private readonly cloudQuotaFallbackModelId?: string;\n private readonly modelResolver: Pick<ModelResolverLike, 'resolveModelId'>;\n private readonly modelCatalog: ModelCatalogLike;\n private readonly telemetryPort: TelemetryPort;\n private readonly auditPort: AuditPort;\n private readonly stages: TickStage[];\n private readonly middlewares: TickAroundMiddleware[];\n\n constructor(\n dependencies: GraphAgentExecutorDependencies,\n ) {\n this.llmCaller = dependencies.llmCaller;\n this.toolRuntime = dependencies.toolRuntime;\n this.contextBuilder = dependencies.contextBuilder;\n this.cloudQuotaFallbackModelId = readNonEmptyString(dependencies.cloudQuotaFallbackModelId);\n this.modelCatalog = dependencies.modelCatalog ?? createEmptyModelCatalog();\n this.modelResolver =\n dependencies.modelResolver ??\n new ModelResolver({\n modelCatalog: this.modelCatalog,\n });\n this.telemetryPort = dependencies.telemetryPort ?? noopTelemetry;\n this.auditPort = dependencies.auditPort ?? noopAudit;\n this.stages = [\n createPrepareCallStage({\n modelResolver: this.modelResolver,\n modelCatalog: this.modelCatalog,\n toolCatalog: this.toolRuntime,\n cloudQuotaFallbackModelId: this.cloudQuotaFallbackModelId,\n }),\n createBuildContextStage({\n contextBuilder: this.contextBuilder,\n }),\n createApplySystemReminderStage(),\n createExecuteLlmStage({\n llmCaller: this.llmCaller,\n }),\n createBuildDecisionStage({\n toolPresentation: this.toolRuntime,\n }),\n ];\n this.middlewares = [\n contextAuditMiddleware,\n llmTelemetryMiddleware,\n runModelLockMiddleware,\n ];\n }\n\n async tick(\n input: TickInput,\n eventHandler?: (event: TickEvent) => void,\n ): Promise<TickOutput> {\n const ctx: TickPipelineContext = {\n input,\n eventHandler,\n newEvents: [],\n request: input.request,\n history: input.history,\n signal: input.signal,\n forceFinalAnswer: input.forceFinalAnswer === true,\n executorLocal: input.executorLocal,\n summarizationCallbacks: input.summarizationCallbacks,\n modelId: '',\n toolSchemas: [],\n llmOptions: {},\n llmMessages: [],\n mode: input.request.mode === 'chat' ? 'chat' : 'agent',\n conversationId: resolveConversationIdForRuntimeEvents(input.toolContext),\n turnId: readNonEmptyString(input.toolContext?.turnId) ?? `turn_${Date.now()}`,\n telemetry: this.telemetryPort,\n audit: this.auditPort,\n };\n\n logger.info('[GraphAgentExecutor] tick 调用', {\n stream: input.stream === true,\n mode: ctx.mode,\n hasEventHandler: Boolean(eventHandler),\n hasSummarizationCallbacks: Boolean(input.summarizationCallbacks),\n });\n\n await runTickPipeline(ctx, this.stages, this.middlewares);\n\n return {\n decision: ctx.decision ?? { kind: 'yield' },\n newEvents: ctx.newEvents,\n };\n }\n}\n","import type { AgentInvocationRequest } from '../../ports';\nimport type { AnyAgentEvent } from '../events/agentEvents';\nimport type { ToolExecutionContext } from '../tools/toolExecutionContext';\nimport type { EngineLocalState, ExecutorLocalState } from './types';\nimport type { RuntimeEvent } from '../../contracts';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isAgentInvocationRequest(value: unknown): value is AgentInvocationRequest {\n if (!isRecord(value)) return false;\n if (typeof value.query !== 'string') return false;\n if (typeof value.promptKey !== 'string') return false;\n if (value.mode !== undefined && value.mode !== 'agent' && value.mode !== 'chat') return false;\n if (value.maxSteps !== undefined && typeof value.maxSteps !== 'number') return false;\n if (value.enableTools !== undefined && typeof value.enableTools !== 'boolean') return false;\n if (value.availableTools !== undefined) {\n if (!Array.isArray(value.availableTools)) return false;\n if (!value.availableTools.every((item) => typeof item === 'string')) return false;\n }\n return true;\n}\n\nfunction isToolExecutionContext(value: unknown): value is ToolExecutionContext {\n return isRecord(value);\n}\n\nfunction isRuntimeEventArray(value: unknown): value is RuntimeEvent[] {\n return Array.isArray(value);\n}\n\nfunction isExecutorLocalState(value: unknown): value is ExecutorLocalState {\n return isRecord(value) && typeof value.stepCount === 'number';\n}\n\ntype SummarizationCallbacks = NonNullable<EngineLocalState['summarizationCallbacks']>;\n\nfunction isSummarizationCallbacks(value: unknown): value is SummarizationCallbacks {\n return isRecord(value);\n}\n\ntype GraphSseSink = (evt: AnyAgentEvent | RuntimeEvent) => RuntimeEvent[] | void;\n\nfunction isGraphSseSink(value: unknown): value is GraphSseSink {\n return typeof value === 'function';\n}\n\nexport interface GraphAgentLocalView {\n conversationId: string;\n turnId?: string;\n request?: AgentInvocationRequest;\n toolContext?: ToolExecutionContext;\n history: RuntimeEvent[];\n sseSink?: GraphSseSink;\n executorLocal?: ExecutorLocalState;\n answerId?: string;\n chunkSeq: number;\n signal?: AbortSignal;\n summarizationCallbacks?: SummarizationCallbacks;\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function readGraphAgentLocal(local: EngineLocalState | undefined): GraphAgentLocalView {\n const source = local ?? {};\n const answerId = readNonEmptyString(source.answerId);\n const chunkSeq = Number.isInteger(source.chunkSeq) ? Number(source.chunkSeq) : 0;\n\n return {\n conversationId: readNonEmptyString(source.conversationId) ?? '',\n turnId: readNonEmptyString(source.turnId),\n request: isAgentInvocationRequest(source.request) ? source.request : undefined,\n toolContext: isToolExecutionContext(source.toolContext) ? source.toolContext : undefined,\n history: isRuntimeEventArray(source.history) ? source.history : [],\n sseSink: isGraphSseSink(source.sseSink) ? source.sseSink : undefined,\n executorLocal: isExecutorLocalState(source.executorLocal) ? source.executorLocal : undefined,\n answerId,\n chunkSeq,\n signal: source.signal instanceof AbortSignal ? source.signal : undefined,\n summarizationCallbacks: isSummarizationCallbacks(source.summarizationCallbacks)\n ? source.summarizationCallbacks\n : undefined,\n };\n}\n","import type { StandardToolCall } from '../types';\nimport type { RuntimeEvent } from '../../../contracts';\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 在单次 run() 执行期内管理的最小可变状态集。\n *\n * 中文备注:\n * - answerId / chunkSeq:流式答案分段与序列号,前端按 answer_id 归并。\n * - streamRuntimeEvents / seenRuntimeIds:运行时事件缓冲与去重。\n * - pendingToolCalls / finalAnswer / pendingInteractionSpec / lastToolResult:\n * 决策输出,最终回写到 EngineLocalState 供下游节点消费。\n */\nexport interface LlmNodeLocalState {\n /** 当前活动的答案段 ID(流式 chunk 归并用) */\n answerId: string | undefined;\n /** 当前答案段内已发出的 chunk 序号(下一个 chunk 使用的值) */\n chunkSeq: number;\n /** 已缓冲的 RuntimeEvent(含 sink 回灌事件),最终并入历史 */\n streamRuntimeEvents: RuntimeEvent[];\n /** 已缓冲的 RuntimeEvent ID 去重集合 */\n seenRuntimeIds: Set<string>;\n\n // ── 决策输出(由 tick 完成后的 decision 分支设置) ──\n pendingToolCalls: StandardToolCall[] | undefined;\n finalAnswer: string | undefined;\n pendingInteractionSpec: Record<string, unknown> | undefined;\n lastToolResult: Record<string, unknown> | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Actions\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode reducer 接受的动作类型。\n *\n * 命名规则:\n * - STREAM_* / FINAL_ANSWER_*:handleAgentEvent 内的事件驱动动作\n * - RUNTIME_EVENT_BUFFERED:运行时事件入缓冲\n * - TOOL_CALLS_* / FINAL_ANSWER_DECISION / WAIT_USER_DECISION:tick 决策后的状态写入\n */\nexport type LlmNodeAction =\n | {\n type: 'STREAM_CHUNK_RECEIVED';\n /** 上游事件自带的 answer_id(可能为 undefined) */\n incomingAnswerId: string | undefined;\n /**\n * 兜底 answer_id(调用方在 dispatch 前预生成):\n * - 若 state.answerId 已存在则传入该值(延续当前答案段)\n * - 若 state.answerId 为 undefined 则传入新生成的 ID\n */\n generatedAnswerId: string;\n }\n | { type: 'FINAL_ANSWER_IGNORED' }\n | { type: 'FINAL_ANSWER_RECEIVED' }\n | { type: 'RUNTIME_EVENT_BUFFERED'; event: RuntimeEvent }\n | { type: 'TOOL_CALLS_ACCEPTED'; toolCalls: StandardToolCall[] }\n | { type: 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL' }\n | { type: 'FINAL_ANSWER_DECISION'; answer: string }\n | {\n type: 'WAIT_USER_DECISION';\n spec: Record<string, unknown>;\n lastToolResult: Record<string, unknown>;\n };\n\n// ---------------------------------------------------------------------------\n// Reducer\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 状态 reducer(纯函数)。\n *\n * 中文备注:\n * - 每次返回一个新的状态对象(或在无变更时返回原引用)。\n * - STREAM_CHUNK_RECEIVED 后调用方应使用 `state.chunkSeq - 1` 作为本次 chunk 的 seq。\n */\nexport function llmNodeReducer(\n state: LlmNodeLocalState,\n action: LlmNodeAction,\n): LlmNodeLocalState {\n switch (action.type) {\n case 'STREAM_CHUNK_RECEIVED': {\n const resolvedAnswerId = action.incomingAnswerId ?? action.generatedAnswerId;\n const answerChanged = state.answerId !== resolvedAnswerId;\n const baseSeq = answerChanged ? 0 : state.chunkSeq;\n return {\n ...state,\n answerId: resolvedAnswerId,\n chunkSeq: baseSeq + 1,\n };\n }\n\n case 'FINAL_ANSWER_IGNORED':\n case 'FINAL_ANSWER_RECEIVED': {\n return {\n ...state,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n\n case 'RUNTIME_EVENT_BUFFERED': {\n if (state.seenRuntimeIds.has(action.event.id)) {\n return state;\n }\n const newSeen = new Set(state.seenRuntimeIds);\n newSeen.add(action.event.id);\n return {\n ...state,\n streamRuntimeEvents: [...state.streamRuntimeEvents, action.event],\n seenRuntimeIds: newSeen,\n };\n }\n\n case 'TOOL_CALLS_ACCEPTED': {\n return {\n ...state,\n pendingToolCalls: action.toolCalls,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n\n case 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL': {\n return state;\n }\n\n case 'FINAL_ANSWER_DECISION': {\n return {\n ...state,\n finalAnswer: action.answer,\n };\n }\n\n case 'WAIT_USER_DECISION': {\n return {\n ...state,\n pendingInteractionSpec: action.spec,\n lastToolResult: action.lastToolResult,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Init / WriteBack\n// ---------------------------------------------------------------------------\n\nexport interface LlmNodeStateInit {\n answerId: string | undefined;\n chunkSeq: number;\n}\n\n/**\n * 从 graphLocal 读取值初始化 reducer 状态。\n */\nexport function initLlmNodeState(init: LlmNodeStateInit): LlmNodeLocalState {\n return {\n answerId: init.answerId,\n chunkSeq: init.chunkSeq,\n streamRuntimeEvents: [],\n seenRuntimeIds: new Set(),\n pendingToolCalls: undefined,\n finalAnswer: undefined,\n pendingInteractionSpec: undefined,\n lastToolResult: undefined,\n };\n}\n\nexport interface WriteBackContext {\n conversationId: string;\n turnId: string;\n /** tick 前的初始历史 */\n history: RuntimeEvent[];\n /** tick 返回的 newEvents */\n newEvents: RuntimeEvent[];\n}\n\n/**\n * 把 reducer 状态回写为 EngineLocalState 补丁。\n *\n * 中文备注:\n * - 返回的对象应以 `{ ...existingLocal, ...patch }` 形式合并回 state.local,\n * 保留 request / toolContext / sseSink / signal 等非 reducer 管辖字段。\n * - 只有被决策 action 显式设置的字段才出现在补丁中(pendingToolCalls 等),\n * 避免意外覆盖其他节点写入的同名字段。\n */\nexport function buildLocalPatch(\n nodeState: LlmNodeLocalState,\n ctx: WriteBackContext,\n): Record<string, unknown> {\n const updatedHistory = [...ctx.history, ...ctx.newEvents, ...nodeState.streamRuntimeEvents];\n\n const patch: Record<string, unknown> = {\n answerId: nodeState.answerId,\n chunkSeq: nodeState.chunkSeq,\n conversationId: ctx.conversationId,\n turnId: ctx.turnId,\n history: updatedHistory,\n };\n\n if (nodeState.pendingToolCalls !== undefined) {\n patch.pendingToolCalls = nodeState.pendingToolCalls;\n }\n if (nodeState.finalAnswer !== undefined) {\n patch.finalAnswer = nodeState.finalAnswer;\n }\n if (nodeState.pendingInteractionSpec !== undefined) {\n patch.pendingInteractionSpec = nodeState.pendingInteractionSpec;\n }\n if (nodeState.lastToolResult !== undefined) {\n patch.lastToolResult = nodeState.lastToolResult;\n }\n\n return patch;\n}\n","/**\n * @file runtime-kernel/events/agentEvents.ts\n * @description graph 主执行链使用的最小 Agent 事件契约\n *\n * 中文备注:\n * - 该文件只承载 runtime-kernel 主链路真正需要识别的事件子集;\n * - 目标是让 `executor` / `llmNode` / `eventMappers` 不再反向依赖宿主或产品层事件定义;\n * - host/product 层若有更丰富的事件,只要结构兼容,仍可在边界透传进来。\n */\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport interface AgentEvent {\n type: string;\n timestamp: number;\n id?: string;\n /**\n * 中文备注:\n * - 该标记只在运行期内存中使用,用于避免同一事件被 SSE 重复分发;\n * - 不属于持久化协议字段。\n */\n __dispatched_via_sse__?: true;\n}\n\ninterface BaseToolLifecycleAgentEvent extends AgentEvent {\n tool_name: string;\n tool_args: Record<string, unknown>;\n tool_calls?: unknown[];\n tool_call_id?: string;\n phase?: 'start' | 'update' | 'complete' | 'error';\n status?: 'loading' | 'success' | 'error';\n payload?: Record<string, unknown>;\n meta?: Record<string, unknown>;\n}\n\nexport interface ThoughtEvent extends AgentEvent {\n type: 'thought';\n content: string;\n delta?: string;\n is_complete?: boolean;\n meta?: Record<string, unknown>;\n thought_message_id?: string;\n}\n\nexport interface ToolCallDecisionEvent extends BaseToolLifecycleAgentEvent {\n type: 'tool_call_decision';\n}\n\nexport interface ToolProcessEvent extends BaseToolLifecycleAgentEvent {\n type: 'tool_process';\n}\n\nexport interface ObservationEvent extends AgentEvent {\n type: 'observation';\n tool_name: string;\n tool_call_id?: string;\n output: string;\n success?: boolean;\n payload?: Record<string, unknown>;\n duration_ms?: number;\n}\n\nexport interface FinalAnswerEvent extends AgentEvent {\n type: 'final_answer';\n answer: string;\n answer_id?: string;\n answerId?: string;\n reasoning_details?: unknown[];\n meta?: Record<string, unknown>;\n}\n\nexport interface ErrorEvent extends AgentEvent {\n type: 'error';\n error: string;\n details?: string;\n}\n\nexport interface StreamChunkEvent extends AgentEvent {\n type: 'stream_chunk';\n content: string;\n answer_id?: string;\n seq?: number;\n is_last?: boolean;\n isLast?: boolean;\n}\n\nexport interface ProviderSidecarEvent extends AgentEvent {\n type: 'provider_sidecar';\n reasoning_details?: unknown[];\n}\n\nexport type AnyAgentEvent =\n | ThoughtEvent\n | ToolCallDecisionEvent\n | ToolProcessEvent\n | ObservationEvent\n | FinalAnswerEvent\n | ErrorEvent\n | StreamChunkEvent\n | ProviderSidecarEvent;\n\nexport function isMarkedAsSseDispatched(event: unknown): boolean {\n return isRecord(event) && event['__dispatched_via_sse__'] === true;\n}\n\nexport function readAgentEventAnswerId(event: unknown): string | undefined {\n if (!isRecord(event)) return undefined;\n\n const snake = event['answer_id'];\n if (typeof snake === 'string' && snake.trim().length > 0) {\n return snake.trim();\n }\n\n const camel = event['answerId'];\n if (typeof camel === 'string' && camel.trim().length > 0) {\n return camel.trim();\n }\n\n return undefined;\n}\n\nexport function readAgentEventSeq(event: unknown): number | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['seq'];\n return Number.isInteger(value) ? Number(value) : undefined;\n}\n","import type { AiMessage, RuntimeEvent, ToolCallWire } from '../../contracts';\nimport type { ToolPresentationPort } from '../tools/ports';\n\nexport interface EventMappingContext {\n conversationId: string;\n turnId: string;\n timestamp?: number;\n /**\n * 事件级扩展元数据(透传到 SSE/RuntimeEvent.metadata)。\n *\n * 中文备注:这里只放跨事件归类信息,不放 ui.hidden 这类单事件展示语义。\n */\n metadata?: Record<string, unknown>;\n}\n\nexport interface SSEMappingOptions {\n emitSse?: boolean;\n skipAlreadyDispatched?: boolean;\n toolPresentationPort?: ToolPresentationPort;\n}\n\nexport interface RuntimeMappingOptions {\n collectRuntime?: boolean;\n skipIncomplete?: boolean;\n toolPresentationPort?: ToolPresentationPort;\n}\n\n/**\n * RuntimeEvent 回放所需的最小会话内存端口。\n *\n * 中文备注:\n * - core 只依赖“写入消息”的最小能力;\n * - 具体产品实现只要结构兼容即可接入。\n */\nexport interface ConversationMemoryPort {\n addUserMessage(content: string, id?: string): void;\n addAssistantMessage(\n content: string | null,\n type: AiMessage['type'] & ('thought' | 'final_answer' | 'tool_calls'),\n metadata?: AiMessage['metadata'],\n id?: string\n ): void;\n addToolResponse(toolCallId: string, content: string, toolName?: string, id?: string): void;\n appendMessage(message: AiMessage): void;\n}\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nexport const isToolCallWire = (value: unknown): value is ToolCallWire => {\n if (!isRecord(value)) return false;\n if (typeof value.id !== 'string') return false;\n if (value.type !== 'function') return false;\n const fn = value.function;\n return isRecord(fn) && typeof fn.name === 'string' && typeof fn.arguments === 'string';\n};\n\nexport function resolveToolDisplayOptions(\n toolName: string,\n toolPresentationPort?: ToolPresentationPort,\n) {\n return toolPresentationPort?.getDisplayOptions(toolName);\n}\n\nexport function readAnswerIdFromEvent(event: unknown): string | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['answerId'];\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function readMetaFromEvent(event: unknown): Record<string, unknown> | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['meta'];\n return isRecord(value) ? value : undefined;\n}\n\nexport type HistorySummaryRuntimeEvent = RuntimeEvent & {\n type: 'history_summary';\n content: string;\n replaces_start_message_id?: string;\n replaces_end_message_id?: string;\n original_message_count?: number;\n compression_ratio?: number;\n generated_by?: string;\n included_old_summary?: boolean;\n replaced_message_ids?: string[];\n summary_seq?: number;\n};\n","import {\n AnyAgentEvent,\n ErrorEvent as AgentErrorEvent,\n FinalAnswerEvent as AgentFinalAnswerEvent,\n ObservationEvent as AgentObservationEvent,\n StreamChunkEvent as AgentStreamChunkEvent,\n ThoughtEvent as AgentThoughtEvent,\n ToolCallDecisionEvent as AgentToolCallDecisionEvent,\n ToolProcessEvent as AgentToolProcessEvent,\n readAgentEventAnswerId,\n readAgentEventSeq,\n} from './agentEvents';\nimport {\n RuntimeEvent,\n createErrorEvent,\n createFinalAnswerChunkEvent,\n createFinalAnswerEvent,\n createThoughtEvent,\n createToolCallDecisionEvent,\n createToolOutputEvent,\n createToolProcessEvent,\n} from '../../contracts';\nimport { generateMessageId } from '../../shared/ids';\nimport {\n type EventMappingContext,\n type RuntimeMappingOptions,\n isRecord,\n readAnswerIdFromEvent,\n readMetaFromEvent,\n resolveToolDisplayOptions,\n} from './provider-sidecar';\n\nexport function agentEventToRuntime(\n agentEvent: AnyAgentEvent | RuntimeEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions = {},\n): RuntimeEvent | null {\n if (!agentEvent || typeof agentEvent !== 'object') return null;\n\n if (isRecord(agentEvent) && agentEvent['type'] === 'history_summary') {\n const evt = agentEvent as RuntimeEvent;\n if (context.metadata) {\n evt.metadata = { ...(evt.metadata ?? {}), ...context.metadata };\n }\n return evt;\n }\n\n const typed = agentEvent as AnyAgentEvent;\n const { conversationId, turnId } = context;\n const timestamp = typed.timestamp ?? context.timestamp ?? Date.now();\n const id = typed.id ?? generateMessageId();\n const contextMeta = context.metadata;\n\n switch (typed.type) {\n case 'thought':\n return mapThoughtToRuntime(typed as AgentThoughtEvent, context, options, id, timestamp);\n\n case 'tool_call_decision':\n case 'tool_process':\n return mapToolProgressToRuntime(typed, context, options, id, timestamp);\n\n case 'observation': {\n const observationEvent = typed as AgentObservationEvent;\n const toolName = observationEvent.tool_name || 'unknown_tool';\n const toolCallId = observationEvent.tool_call_id || `call_${id}`;\n const success = observationEvent.success ?? !/^错误[::]/i.test(String(observationEvent.output ?? ''));\n const payload = observationEvent.payload || {};\n const event = createToolOutputEvent(\n id,\n conversationId,\n turnId,\n toolName,\n toolCallId,\n observationEvent.output,\n success ? 'success' : 'error',\n { timestamp, payload, duration_ms: payload.duration_ms as number | undefined },\n );\n event.ephemeral = false;\n if (contextMeta) event.metadata = { ...(event.metadata ?? {}), ...contextMeta };\n return event;\n }\n\n case 'final_answer': {\n const finalAnswerEvent = typed as AgentFinalAnswerEvent;\n const answerIdFromSnake =\n typeof finalAnswerEvent.answer_id === 'string' && finalAnswerEvent.answer_id.trim().length > 0\n ? finalAnswerEvent.answer_id.trim()\n : undefined;\n return createFinalAnswerEvent(\n id,\n conversationId,\n turnId,\n answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`,\n finalAnswerEvent.answer ?? '',\n {\n timestamp,\n reasoning_details: Array.isArray(finalAnswerEvent.reasoning_details)\n ? finalAnswerEvent.reasoning_details\n : undefined,\n meta: readMetaFromEvent(finalAnswerEvent),\n },\n );\n }\n\n case 'error': {\n const errorEvent = typed as AgentErrorEvent;\n return createErrorEvent(id, conversationId, turnId, errorEvent.error ?? 'Unknown error', {\n timestamp,\n details: errorEvent.details,\n });\n }\n\n case 'stream_chunk':\n return mapStreamChunkToRuntime(typed as AgentStreamChunkEvent, context, id, timestamp);\n\n default:\n return null;\n }\n}\n\nfunction mapThoughtToRuntime(\n thoughtEvent: AgentThoughtEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions,\n id: string,\n timestamp: number,\n): RuntimeEvent | null {\n const isComplete = 'is_complete' in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;\n if (options.skipIncomplete && !isComplete) return null;\n\n const thoughtMessageId =\n typeof thoughtEvent.thought_message_id === 'string' && thoughtEvent.thought_message_id.length > 0\n ? thoughtEvent.thought_message_id\n : undefined;\n const runtimeEvent = createThoughtEvent(id, context.conversationId, context.turnId, thoughtEvent.content ?? '', {\n timestamp,\n thought_message_id: thoughtMessageId,\n delta: thoughtEvent.delta,\n is_complete: isComplete,\n });\n if (!isComplete) runtimeEvent.ephemeral = true;\n const thoughtMeta = isRecord(thoughtEvent.meta) ? thoughtEvent.meta : undefined;\n if (context.metadata || thoughtMeta) {\n runtimeEvent.metadata = { ...(runtimeEvent.metadata ?? {}), ...(context.metadata ?? {}), ...(thoughtMeta ?? {}) };\n }\n return runtimeEvent;\n}\n\nfunction mapToolProgressToRuntime(\n toolEvent: AgentToolCallDecisionEvent | AgentToolProcessEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions,\n id: string,\n timestamp: number,\n): RuntimeEvent {\n const toolName = toolEvent.tool_name || 'unknown_tool';\n const toolCallId = toolEvent.tool_call_id || `call_${id}`;\n const meta = toolEvent.meta && typeof toolEvent.meta === 'object' ? { ...toolEvent.meta } : {};\n const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);\n if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;\n\n const event = toolEvent.type === 'tool_call_decision'\n ? createToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {\n timestamp,\n phase: toolEvent.phase ?? 'start',\n status: toolEvent.status ?? 'loading',\n args: toolEvent.tool_args || {},\n payload: toolEvent.payload || {},\n meta,\n })\n : createToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {\n timestamp,\n phase: toolEvent.phase ?? 'start',\n status: toolEvent.status ?? 'loading',\n args: toolEvent.tool_args || {},\n payload: toolEvent.payload || {},\n meta,\n });\n event.ephemeral = meta.ephemeral === true;\n if (context.metadata) event.metadata = { ...(event.metadata ?? {}), ...context.metadata };\n return event;\n}\n\nfunction mapStreamChunkToRuntime(\n streamEvent: AgentStreamChunkEvent,\n context: EventMappingContext,\n id: string,\n timestamp: number,\n): RuntimeEvent | null {\n const text = streamEvent.content ?? '';\n if (!text) return null;\n const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${context.turnId}`;\n const seq = readAgentEventSeq(streamEvent) ?? 0;\n const isLast = Boolean(\n ('isLast' in streamEvent && streamEvent.isLast) ||\n ('is_last' in streamEvent && streamEvent.is_last),\n );\n const chunkEvent = createFinalAnswerChunkEvent(id, context.conversationId, context.turnId, answerId, seq, text, {\n timestamp,\n is_last: isLast,\n });\n chunkEvent.ephemeral = true;\n if (context.metadata) chunkEvent.metadata = { ...(chunkEvent.metadata ?? {}), ...context.metadata };\n return chunkEvent;\n}\n","import type {\n AiMessage,\n RuntimeEvent,\n ThoughtEvent as RuntimeThoughtEvent,\n ToolCallDecisionEvent as RuntimeToolCallDecisionEvent,\n ToolOutputEvent as RuntimeToolOutputEvent,\n FinalAnswerEvent as RuntimeFinalAnswerEvent,\n UserInputEvent as RuntimeUserInputEvent,\n ToolCallWire,\n} from '../../contracts';\nimport {\n type ConversationMemoryPort,\n type HistorySummaryRuntimeEvent,\n isToolCallWire,\n} from './provider-sidecar';\n\nexport function applyRuntimeEventToMemory(event: RuntimeEvent, memory: ConversationMemoryPort): void {\n if (!event || !memory) return;\n\n switch (event.type) {\n case 'user_input': {\n const userEvent = event as RuntimeUserInputEvent;\n memory.addUserMessage(userEvent.content || '', userEvent.id);\n break;\n }\n\n case 'tool_call_decision':\n applyToolCallDecision(event as RuntimeToolCallDecisionEvent, memory);\n break;\n\n case 'tool_output':\n applyToolOutput(event as RuntimeToolOutputEvent, memory);\n break;\n\n case 'final_answer': {\n const answerEvent = event as RuntimeFinalAnswerEvent;\n const answerContent = answerEvent.content || '';\n if (answerContent.trim()) {\n const metadata = Array.isArray(answerEvent.reasoning_details)\n ? { reasoning_details: answerEvent.reasoning_details }\n : undefined;\n memory.addAssistantMessage(answerContent, 'final_answer', metadata, answerEvent.id);\n }\n break;\n }\n\n case 'thought': {\n const thoughtEvent = event as RuntimeThoughtEvent;\n memory.addAssistantMessage(thoughtEvent.content || '', 'thought', undefined, thoughtEvent.id);\n break;\n }\n\n case 'history_summary':\n applyHistorySummary(event as HistorySummaryRuntimeEvent, memory);\n break;\n\n case 'error':\n break;\n\n default:\n break;\n }\n}\n\nfunction applyToolCallDecision(event: RuntimeToolCallDecisionEvent, memory: ConversationMemoryPort): void {\n const payload = event.payload || {};\n const toolCalls = Array.isArray(payload.tool_calls)\n ? payload.tool_calls.filter(isToolCallWire)\n : [];\n const toolArgs = event.args || payload.args || {};\n const toolCallId = event.tool_call_id ||\n (toolCalls.length > 0 ? toolCalls[0].id : `call_${event.id || Date.now()}`);\n\n const normalizedToolCalls: ToolCallWire[] = toolCalls.length > 0\n ? toolCalls\n : [\n {\n id: toolCallId,\n type: 'function',\n function: { name: event.tool_name, arguments: JSON.stringify(toolArgs || {}) },\n },\n ];\n const reasoningDetails = Array.isArray(payload.reasoning_details)\n ? payload.reasoning_details\n : undefined;\n\n memory.addAssistantMessage(\n null,\n 'tool_calls',\n {\n tool_calls: normalizedToolCalls,\n ...(reasoningDetails ? { reasoning_details: reasoningDetails } : {}),\n },\n event.id,\n );\n}\n\nfunction applyToolOutput(event: RuntimeToolOutputEvent, memory: ConversationMemoryPort): void {\n if (!event.tool_call_id) return;\n const payload = event.payload || {};\n const outputValue = payload.result ?? payload.output ?? event.output;\n let serializedOutput: string;\n if (typeof outputValue === 'string') {\n serializedOutput = outputValue;\n } else {\n try {\n serializedOutput = JSON.stringify(outputValue ?? '');\n } catch {\n serializedOutput = String(outputValue ?? '');\n }\n }\n memory.addToolResponse(String(event.tool_call_id), serializedOutput, event.tool_name, event.id);\n}\n\nfunction applyHistorySummary(summaryEvent: HistorySummaryRuntimeEvent, memory: ConversationMemoryPort): void {\n const summaryMetadata: AiMessage['metadata'] = {\n messageType: 'summary',\n generatedBy: summaryEvent.generated_by || 'AgentSummarizationProvider',\n originalMessageCount: summaryEvent.original_message_count,\n compressionRatio: summaryEvent.compression_ratio,\n includedOldSummary: summaryEvent.included_old_summary,\n replacesStartMessageId: summaryEvent.replaces_start_message_id,\n replacesEndMessageId: summaryEvent.replaces_end_message_id,\n replacedMessageIds: Array.isArray(summaryEvent.replaced_message_ids) ? summaryEvent.replaced_message_ids : [],\n summarySeq: summaryEvent.summary_seq || 0,\n };\n\n const summaryMessage: AiMessage = {\n id: summaryEvent.id,\n role: 'system',\n type: 'history_summary',\n content: summaryEvent.content || '',\n timestamp: summaryEvent.timestamp,\n metadata: summaryMetadata,\n };\n\n memory.appendMessage(summaryMessage);\n}\n","import {\n AnyAgentEvent,\n ErrorEvent as AgentErrorEvent,\n FinalAnswerEvent as AgentFinalAnswerEvent,\n ObservationEvent as AgentObservationEvent,\n StreamChunkEvent as AgentStreamChunkEvent,\n ThoughtEvent as AgentThoughtEvent,\n ToolCallDecisionEvent as AgentToolCallDecisionEvent,\n ToolProcessEvent as AgentToolProcessEvent,\n isMarkedAsSseDispatched,\n readAgentEventAnswerId,\n readAgentEventSeq,\n} from './agentEvents';\nimport {\n createSSEErrorEvent,\n createSSEFinalAnswerChunkEvent,\n createSSEFinalAnswerEvent,\n createSSEThoughtEvent,\n createSSEToolCallDecisionEvent,\n createSSEToolOutputEvent,\n createSSEToolProcessEvent,\n type SSEEvent,\n} from '../../contracts';\nimport { generateMessageId } from '../../shared/ids';\nimport {\n type EventMappingContext,\n type SSEMappingOptions,\n isRecord,\n readAnswerIdFromEvent,\n readMetaFromEvent,\n resolveToolDisplayOptions,\n} from './provider-sidecar';\n\nexport function agentEventToSSE(\n agentEvent: AnyAgentEvent,\n context: EventMappingContext,\n options: SSEMappingOptions = {},\n): SSEEvent | null {\n if (!agentEvent || typeof agentEvent !== 'object') return null;\n if (options.skipAlreadyDispatched && isMarkedAsSseDispatched(agentEvent)) return null;\n\n const { conversationId, turnId } = context;\n const timestamp = agentEvent.timestamp ?? context.timestamp ?? Date.now();\n const id = agentEvent.id ?? generateMessageId();\n const contextMeta = context.metadata;\n\n switch (agentEvent.type) {\n case 'thought': {\n const thoughtEvent = agentEvent as AgentThoughtEvent;\n const rawContent = 'content' in thoughtEvent ? thoughtEvent.content : '';\n const delta = 'delta' in thoughtEvent ? thoughtEvent.delta : '';\n const isComplete = 'is_complete' in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;\n const thoughtMessageId =\n typeof thoughtEvent.thought_message_id === 'string' && thoughtEvent.thought_message_id.length > 0\n ? thoughtEvent.thought_message_id\n : undefined;\n\n const sse = createSSEThoughtEvent(id, conversationId, turnId, {\n thought_message_id: thoughtMessageId,\n content: isComplete ? (rawContent ?? '') : undefined,\n delta: !isComplete ? (delta ?? rawContent) : undefined,\n is_complete: isComplete,\n });\n sse.timestamp = timestamp;\n const thoughtMeta = isRecord(thoughtEvent.meta) ? thoughtEvent.meta : undefined;\n if (contextMeta || thoughtMeta) {\n sse.metadata = { ...(contextMeta ?? {}), ...(thoughtMeta ?? {}) };\n }\n return sse;\n }\n\n case 'tool_call_decision':\n case 'tool_process':\n return mapToolProgressToSse(agentEvent, context, options, id, timestamp);\n\n case 'observation': {\n const observationEvent = agentEvent as AgentObservationEvent;\n const toolName = observationEvent.tool_name || 'unknown_tool';\n const toolCallId = observationEvent.tool_call_id || `call_${id}`;\n const status: 'success' | 'error' = observationEvent.success === false ? 'error' : 'success';\n const payload = observationEvent.payload || {};\n const duration = payload.duration_ms as number | undefined;\n const sse = createSSEToolOutputEvent(\n id,\n conversationId,\n turnId,\n toolName,\n toolCallId,\n status,\n observationEvent.output,\n { timestamp, payload, duration_ms: duration },\n );\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'stream_chunk': {\n const streamEvent = agentEvent as AgentStreamChunkEvent;\n const text = streamEvent.content ?? '';\n if (!text) return null;\n const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${turnId}`;\n const seq = readAgentEventSeq(streamEvent) ?? 0;\n const isLast = Boolean(\n ('isLast' in streamEvent && streamEvent.isLast) ||\n ('is_last' in streamEvent && streamEvent.is_last),\n );\n const sse = createSSEFinalAnswerChunkEvent(id, conversationId, turnId, answerId, seq, text, {\n is_last: isLast,\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'final_answer': {\n const finalAnswerEvent = agentEvent as AgentFinalAnswerEvent;\n const answer = finalAnswerEvent.answer ?? '';\n const answerIdFromSnake =\n typeof finalAnswerEvent.answer_id === 'string' && finalAnswerEvent.answer_id.trim().length > 0\n ? finalAnswerEvent.answer_id.trim()\n : undefined;\n const answerId = answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`;\n const sse = createSSEFinalAnswerEvent(id, conversationId, turnId, answerId, answer, {\n meta: readMetaFromEvent(finalAnswerEvent),\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'error': {\n const errorEvent = agentEvent as AgentErrorEvent;\n const sse = createSSEErrorEvent(id, conversationId, turnId, errorEvent.error ?? 'Unknown error', {\n details: errorEvent.details,\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n default:\n return null;\n }\n}\n\nfunction mapToolProgressToSse(\n agentEvent: AgentToolCallDecisionEvent | AgentToolProcessEvent,\n context: EventMappingContext,\n options: SSEMappingOptions,\n id: string,\n timestamp: number,\n): SSEEvent {\n const toolName = agentEvent.tool_name || 'unknown_tool';\n const toolCallId = agentEvent.tool_call_id || `call_${id}`;\n const phase = agentEvent.phase ?? 'start';\n const status = agentEvent.status ?? 'loading';\n const args = agentEvent.tool_args || {};\n const payload = agentEvent.payload || {};\n const meta = agentEvent.meta && typeof agentEvent.meta === 'object' ? { ...agentEvent.meta } : {};\n const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);\n if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;\n\n const sse = agentEvent.type === 'tool_call_decision'\n ? createSSEToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {\n timestamp,\n args,\n payload,\n meta,\n })\n : createSSEToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {\n timestamp,\n args,\n payload,\n meta,\n });\n sse.timestamp = timestamp;\n if (context.metadata) sse.metadata = context.metadata;\n return sse;\n}\n","/**\n * @file src/agent/runtime-kernel/events/eventMappers.ts\n * @brief 统一事件映射器兼容出口\n *\n * @description\n * 具体职责已拆分:\n * - sse-projection.ts:AnyAgentEvent → SSEEvent\n * - agent-to-runtime.ts:AnyAgentEvent → RuntimeEvent\n * - runtime-to-ai-message.ts:RuntimeEvent → ConversationMemoryPort\n * - provider-sidecar.ts:sidecar/tool_call/displayOptions 相关共享工具与类型\n */\n\nimport type { AnyAgentEvent } from './agentEvents';\nimport type { RuntimeEvent } from '../../contracts';\nimport { agentEventToRuntime } from './agent-to-runtime';\nimport {\n type ConversationMemoryPort,\n type EventMappingContext,\n type RuntimeMappingOptions,\n type SSEMappingOptions,\n} from './provider-sidecar';\nimport { applyRuntimeEventToMemory } from './runtime-to-ai-message';\nimport { agentEventToSSE } from './sse-projection';\n\nexport { agentEventToRuntime } from './agent-to-runtime';\nexport {\n type ConversationMemoryPort,\n type EventMappingContext,\n type RuntimeMappingOptions,\n type SSEMappingOptions,\n} from './provider-sidecar';\nexport { applyRuntimeEventToMemory } from './runtime-to-ai-message';\nexport { agentEventToSSE } from './sse-projection';\n\n/**\n * 统一的事件映射器。\n *\n * 中文备注:\n * - 保持旧调用方式 `eventMapper.xxx` 不变;\n * - 新逻辑不要继续写回本文件,按职责放到拆分后的模块。\n */\nexport const eventMapper = {\n /**\n * 将 AgentEvent 转换为 SSEEvent。\n */\n agentToSse: agentEventToSSE,\n\n /**\n * 将 AgentEvent 转换为 RuntimeEvent。\n */\n agentToRuntime: agentEventToRuntime,\n\n /**\n * 将 RuntimeEvent 应用到 ConversationMemoryPort。\n */\n applyToMemory: applyRuntimeEventToMemory,\n\n /**\n * 批量处理 AgentEvent → SSEEvent + RuntimeEvent。\n */\n agentToBoth: (\n agentEvent: AnyAgentEvent,\n context: EventMappingContext,\n options: { sseOptions?: SSEMappingOptions; runtimeOptions?: RuntimeMappingOptions } = {},\n ) => {\n const sseEvent = agentEventToSSE(agentEvent, context, options.sseOptions);\n const runtimeEvent = agentEventToRuntime(agentEvent, context, options.runtimeOptions);\n return { sseEvent, runtimeEvent };\n },\n\n /**\n * 批量重建内存。\n */\n rebuildMemory: (events: RuntimeEvent[], memory: ConversationMemoryPort) => {\n for (const event of events) {\n applyRuntimeEventToMemory(event, memory);\n }\n },\n};\n","/**\n * @file src/core/graph-engine/nodes/llmNode.eventBridge.ts\n *\n * @description\n * LlmNode 事件桥接对象 —— Phase 1.5-2b 的核心产物。\n *\n * 动机:\n * - Phase 1.5-2a 把状态变更收口为 reducer,但 SSE 分发、事件映射、\n * stream_chunk 增强、final_answer 去重等副作用逻辑仍以闭包形式\n * 留在 LlmNode.run() 中,占据约一半的方法体。\n * - 本模块把这些\"事件分发职责\"抽为独立的 LlmNodeEventBridge 对象,\n * 使 LlmNode.run() 精简为:状态初始化 → 阶段/请求解析 → 创建 bridge\n * → tick → 决策 dispatch → 状态回写 → 路由。\n *\n * 约束:\n * - bridge 不持有可变状态,所有状态读写通过 deps.getState / deps.dispatch 完成。\n * - bridge 不知晓 EngineState / NodeResult 等图执行概念,只负责单事件处理。\n * - 不依赖 features 层任何类型。\n */\n\nimport type { AnyAgentEvent } from '../../events/agentEvents';\nimport { generateMessageId } from '../../../shared/ids';\nimport { eventMapper } from '../../events/eventMappers';\nimport { Logger } from '../../../shared/logger';\nimport type { LlmNodeLocalState, LlmNodeAction } from './llmNode.state';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('LlmNode');\n\n/** reasoner.tick 的事件类型(AnyAgentEvent 或 RuntimeEvent) */\nexport type TickEvent = AnyAgentEvent | RuntimeEvent;\n\n/** 经 LlmNode 增强后下发 SSE 的 stream_chunk(补全 answer_id / seq / turn_id) */\ntype SseEnrichedStreamChunk = Extract<TickEvent, { type: 'stream_chunk' }> & {\n answer_id: string;\n seq: number;\n turn_id: string;\n};\n\n// ---------------------------------------------------------------------------\n// 内部辅助函数(从 llmNode.ts 迁入)\n// ---------------------------------------------------------------------------\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * 从 agentEvent 中读取有效的 answer_id。\n *\n * 中文备注:\n * - 过滤掉空字符串和占位符 'temp_answer'\n * - 返回 undefined 表示上游未指定有效 answer_id\n */\nexport function readIncomingAnswerId(agentEvent: unknown): string | undefined {\n if (!isRecord(agentEvent)) {\n return undefined;\n }\n const raw = agentEvent['answer_id'];\n if (typeof raw !== 'string') return undefined;\n\n const value = raw.trim();\n if (!value || value === 'temp_answer') {\n return undefined;\n }\n\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// 依赖接口\n// ---------------------------------------------------------------------------\n\nexport interface LlmNodeEventBridgeDeps {\n /** 当前 reducer 状态的只读快照 */\n getState: () => LlmNodeLocalState;\n /** reducer 状态变更 dispatch */\n dispatch: (action: LlmNodeAction) => void;\n /**\n * SSE 下行出口(undefined 表示无前端连接)\n *\n * 中文备注:须与 graphLocal 的 GraphSseSink 一致(参数为 TickEvent,而非 unknown);\n * 否则在 strictFunctionTypes 下窄参数函数不能赋给宽参数占位。\n */\n sseSink: ((evt: TickEvent) => RuntimeEvent[] | void) | undefined;\n /** 当前会话 ID */\n conversationId: string;\n /** 当前轮次 ID */\n turnId: string;\n}\n\n// ---------------------------------------------------------------------------\n// LlmNodeEventBridge\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 事件桥接对象:封装 SSE 分发、事件映射、stream_chunk 增强、final_answer 去重。\n *\n * 中文备注:\n * - 每次 LlmNode.run() 创建一个实例,生命周期与单次 run 相同。\n * - `handle` 方法可直接作为 reasoner.tick() 的 eventHandler 回调传递。\n * - 状态读写均通过 deps.getState / deps.dispatch 完成,bridge 本身无可变状态。\n */\nexport class LlmNodeEventBridge {\n private readonly deps: LlmNodeEventBridgeDeps;\n\n constructor(deps: LlmNodeEventBridgeDeps) {\n this.deps = deps;\n }\n\n /**\n * 处理 reasoner.tick 产生的单个事件。\n * 可直接作为 eventHandler 回调传递给 reasoner.tick()。\n */\n handle = (agentEvent: TickEvent): void => {\n if (!agentEvent || typeof agentEvent !== 'object') return;\n\n const { conversationId, turnId } = this.deps;\n const context = { conversationId, turnId, timestamp: agentEvent.timestamp ?? Date.now() };\n\n if (agentEvent.type === 'stream_chunk') {\n this.handleStreamChunk(agentEvent);\n return;\n }\n\n // 如果已经产生过流式 chunk,则忽略 LLM 直接返回的 final_answer\n // (StreamCollector 已负责收集 chunk 并生成最终的 final_answer)\n const state = this.deps.getState();\n if (agentEvent.type === 'final_answer' && state.chunkSeq > 0) {\n logger.info(`[LlmNode] 忽略 final_answer(已有 ${state.chunkSeq} 个 chunk)`);\n this.deps.dispatch({ type: 'FINAL_ANSWER_IGNORED' });\n return;\n }\n\n this.dispatchSse(agentEvent);\n\n const runtimeEvent = eventMapper.agentToRuntime(agentEvent, context, { skipIncomplete: true });\n if (runtimeEvent) {\n this.deps.dispatch({ type: 'RUNTIME_EVENT_BUFFERED', event: runtimeEvent });\n }\n\n if (agentEvent.type === 'final_answer') {\n this.deps.dispatch({ type: 'FINAL_ANSWER_RECEIVED' });\n }\n };\n\n // ── 私有方法 ──────────────────────────────────────────────────────────\n\n /**\n * 处理 stream_chunk 事件:\n * - 解析/生成 answer_id\n * - dispatch STREAM_CHUNK_RECEIVED\n * - 构建增强事件(补充 answer_id、seq、turn_id)\n * - 通过 SSE 发送增强事件\n */\n private handleStreamChunk(agentEvent: Extract<TickEvent, { type: 'stream_chunk' }>): void {\n const state = this.deps.getState();\n const incomingAnswerId = readIncomingAnswerId(agentEvent);\n const generatedAnswerId = state.answerId ?? generateMessageId();\n // 与 llmNodeReducer 的 STREAM_CHUNK_RECEIVED 解析规则一致,保证此处为 string\n const resolvedAnswerId = incomingAnswerId ?? generatedAnswerId;\n\n this.deps.dispatch({ type: 'STREAM_CHUNK_RECEIVED', incomingAnswerId, generatedAnswerId });\n\n const newState = this.deps.getState();\n const enrichedEvent: SseEnrichedStreamChunk = {\n ...agentEvent,\n answer_id: resolvedAnswerId,\n seq: newState.chunkSeq - 1,\n turn_id: this.deps.turnId,\n };\n\n this.dispatchSse(enrichedEvent);\n }\n\n /**\n * 将事件发送到 SSE 出口,并处理 sink 反馈的回灌事件。\n */\n private dispatchSse(evt: TickEvent): void {\n const { sseSink } = this.deps;\n if (!sseSink) {\n return;\n }\n try {\n this.markDispatched(evt);\n const returnedEvents = sseSink(evt);\n if (Array.isArray(returnedEvents) && returnedEvents.length > 0) {\n logger.info('[LlmNode] 收到 sink 回灌事件', {\n eventCount: returnedEvents.length,\n });\n for (const event of returnedEvents) {\n if (event) {\n this.deps.dispatch({ type: 'RUNTIME_EVENT_BUFFERED', event });\n }\n }\n }\n } catch (error: unknown) {\n const payload =\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : { detail: error };\n logger.error('SSE dispatch failed:', payload);\n }\n }\n\n /**\n * 标记事件已通过 SSE 分发(用于下游去重判断)。\n */\n private markDispatched(evt: TickEvent): void {\n if (isRecord(evt)) {\n Object.defineProperty(evt, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n }\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport type { TickInput, TickOutput } from '../tick-pipeline/types';\nimport { Logger } from '../../../shared/logger';\nimport type { ExecutorLocalState } from '../types';\nimport { readGraphAgentLocal } from '../graphLocal';\nimport {\n initLlmNodeState,\n llmNodeReducer,\n buildLocalPatch,\n type LlmNodeAction,\n} from './llmNode.state';\nimport { LlmNodeEventBridge, type TickEvent } from './llmNode.eventBridge';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('LlmNode');\n\n/**\n * LlmNode 只依赖\"单步推理\"能力,不直接依赖具体执行器实现。\n *\n * 中文备注:\n * - 这样节点本身只关注图节点职责,不负责组装 `LlmCaller` / `ToolRegistry`;\n * - 默认依赖装配放到工厂里,方便测试替换,也降低构造函数耦合。\n */\nexport interface LlmNodeReasoner {\n tick(\n input: TickInput,\n eventHandler?: (event: TickEvent) => void,\n ): Promise<TickOutput>;\n}\n\nexport interface LlmNodeDependencies {\n reasoner: LlmNodeReasoner;\n}\n\nexport class LlmNode implements GraphNode {\n id = 'llm';\n private readonly reasoner: LlmNodeReasoner;\n\n constructor(dependencies: LlmNodeDependencies) {\n this.reasoner = dependencies.reasoner;\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = state.local ?? {};\n logger.info('[LlmNode] 开始执行 LLM 节点', {\n localKeys: Object.keys(local),\n });\n\n const graphLocal = readGraphAgentLocal(state.local);\n const { conversationId, request, toolContext, summarizationCallbacks, sseSink, signal, history } = graphLocal;\n logger.info('[LlmNode] 已加载历史事件', {\n historyCount: history.length,\n hasSummarizationCallbacks: Boolean(summarizationCallbacks),\n });\n\n const turnId = graphLocal.turnId ?? `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n if (!request) {\n logger.warn('Request object is missing, yielding.');\n return { kind: 'yield', events: [] };\n }\n\n // ── 阶段/请求解析 ──\n\n const phase = graphLocal.executorLocal?.phase;\n const forceFinalAnswer = phase === 'force_final_answer';\n const forceTools = phase === 'force_tools';\n\n const finalStepForcedTools = graphLocal.executorLocal?.finalStepForcedTools;\n const forcedTools = Array.isArray(finalStepForcedTools)\n ? finalStepForcedTools.filter((toolName) => typeof toolName === 'string' && toolName.length > 0)\n : [];\n\n const effectiveRequest = forceFinalAnswer\n ? { ...request, enableTools: false, availableTools: [] }\n : forceTools\n ? { ...request, enableTools: true, availableTools: forcedTools }\n : request;\n const executorLocal: ExecutorLocalState | undefined = graphLocal.executorLocal;\n\n // ── 状态 reducer ──\n\n let nodeState = initLlmNodeState({ answerId: graphLocal.answerId, chunkSeq: graphLocal.chunkSeq });\n const dispatch = (action: LlmNodeAction) => {\n nodeState = llmNodeReducer(nodeState, action);\n };\n\n // ── 事件桥(Phase 1.5-2b:SSE 分发与事件映射职责抽离) ──\n\n const bridge = new LlmNodeEventBridge({\n getState: () => nodeState,\n dispatch,\n sseSink,\n conversationId,\n turnId,\n });\n\n // ── 执行 tick ──\n\n const { decision, newEvents } = await this.reasoner.tick({\n request: effectiveRequest,\n toolContext,\n stream: true,\n history,\n signal,\n forceFinalAnswer,\n executorLocal,\n summarizationCallbacks,\n }, bridge.handle);\n\n // ── 决策 dispatch ──\n\n switch (decision.kind) {\n case 'tool_calls': {\n if (forceFinalAnswer) {\n dispatch({ type: 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL' });\n } else {\n dispatch({ type: 'TOOL_CALLS_ACCEPTED', toolCalls: decision.toolCalls });\n }\n break;\n }\n case 'final_answer': {\n dispatch({ type: 'FINAL_ANSWER_DECISION', answer: decision.answer });\n break;\n }\n case 'wait_user': {\n dispatch({\n type: 'WAIT_USER_DECISION',\n spec: decision.pendingInteractionSpec,\n lastToolResult: decision.lastToolResult,\n });\n break;\n }\n }\n\n // ── 一次性回写 state.local ──\n\n const patch = buildLocalPatch(nodeState, { conversationId, turnId, history, newEvents });\n state.local = { ...(state.local || {}), ...patch };\n\n const combinedEvents = [...newEvents, ...nodeState.streamRuntimeEvents];\n\n logger.info('[LlmNode] 历史事件已更新', {\n previousCount: history.length,\n nextCount: (patch.history as RuntimeEvent[]).length,\n newEventCount: newEvents.length,\n streamedEventCount: nodeState.streamRuntimeEvents.length,\n });\n\n logger.info('[LlmNode] 执行器决策完成', {\n decisionKind: decision.kind,\n emittedEventCount: combinedEvents.length,\n });\n\n // ── 路由 ──\n\n switch (decision.kind) {\n case 'tool_calls': {\n if (forceFinalAnswer) {\n return { kind: 'yield', events: combinedEvents };\n }\n return { kind: 'route', nextNodeId: 'tool', events: combinedEvents };\n }\n case 'final_answer': {\n return { kind: 'route', nextNodeId: 'answer', events: combinedEvents };\n }\n case 'wait_user': {\n return { kind: 'route', nextNodeId: 'wait_user', events: combinedEvents };\n }\n case 'yield': {\n return { kind: 'yield', events: combinedEvents };\n }\n case 'error': {\n // Logger 的载荷类型为 Record<string, unknown>,需将 Error 序列化为普通对象\n const { name, message, stack } = decision.error;\n logger.error('[LlmNode] Executor returned an error', { name, message, stack });\n return { kind: 'yield', events: combinedEvents };\n }\n default: {\n return { kind: 'yield', events: combinedEvents };\n }\n }\n }\n}\n","function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\n/**\n * 中文备注:\n * - 这里集中收口“工具输出如何投影为最终答案”的显式规则;\n * - ToolNode 只负责执行工具与路由,业务级映射规则放到单独模块,避免节点继续膨胀。\n */\nexport function resolveFinalAnswerFromToolResult(toolName: string, parsedResult: unknown): string | undefined {\n if (!isRecord(parsedResult)) {\n return undefined;\n }\n\n const data = parsedResult.data;\n if (!isRecord(data)) {\n if (toolName === 'write_report') {\n throw new Error('[write_report] 工具输出缺少 data(必须包含 data.report)');\n }\n if (toolName === 'research_run_writer') {\n throw new Error('[research_run_writer] 工具输出缺少 data(必须包含 data.success 与 data.final_answer)');\n }\n return undefined;\n }\n\n if (toolName === 'write_report') {\n const report = readNonEmptyString(data.report);\n if (!report) {\n throw new Error('[write_report] 工具输出缺少 data.report(必须提供完整报告正文)');\n }\n return report;\n }\n\n if (toolName === 'research_run_writer') {\n if (data.success !== true) {\n return undefined;\n }\n const finalAnswer = readNonEmptyString(data.final_answer);\n if (!finalAnswer) {\n throw new Error('[research_run_writer] 工具输出缺少 data.final_answer(success=true 时必须提供最终报告正文)');\n }\n return finalAnswer;\n }\n\n return undefined;\n}\n\n","import type { RuntimeEvent } from '../../../contracts';\n\nexport type UnknownRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function readString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport function parseJsonSafe(input: unknown): unknown {\n if (typeof input !== 'string' || input.length === 0) {\n return null;\n }\n try {\n return JSON.parse(input);\n } catch {\n return null;\n }\n}\n\nexport function computeCitationOffset(history: RuntimeEvent[], turnId: string): number {\n let citationOffset = 0;\n\n for (const event of history) {\n if (event.turn_id !== turnId || event.type !== 'tool_output') {\n continue;\n }\n\n const payload = isRecord(event.payload) ? event.payload : undefined;\n const result = payload && isRecord(payload.result) ? payload.result : undefined;\n const data = result && isRecord(result.data) ? result.data : undefined;\n const citationsMetadata = data && isRecord(data.citations) ? data.citations : undefined;\n const citations = citationsMetadata?.citations;\n\n if (Array.isArray(citations)) {\n citationOffset += citations.length;\n }\n }\n\n return citationOffset;\n}\n\n","import type {\n ObservationPreviewContext,\n ObservationPreviewMeta,\n ObservationPreviewPort,\n} from '../../tools/ports';\nimport type { AgentSpecToolObservationGovernancePolicy } from '../../../contracts';\nimport { isRecord, readString } from './toolNode.helpers';\n\nexport const DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY = {\n /**\n * 执行期 observation 预览阈值。\n *\n * 中文说明:\n * - 这里控制“工具刚执行完后,原始 observation 多长就落盘到 ToolOutputStore”;\n * - 这是执行期的网络/持久化/实时回放保护,不替代 context-manager 的 `MAX_TOOL_PAIR_TOKENS`;\n * - `MAX_TOOL_PAIR_TOKENS` 仍负责下一轮构建 LLM 上下文时,对整组 tool_calls + tool_output 做 token 预算兜底。\n */\n enabled: true,\n maxChars: 20_000,\n maxLines: 1_200,\n} as const;\n\nexport const TOOL_OBSERVATION_PREVIEW_LIMITS = DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY;\n\nexport function resolveToolObservationGovernancePolicy(\n policy: AgentSpecToolObservationGovernancePolicy | undefined,\n): Required<AgentSpecToolObservationGovernancePolicy> {\n return {\n enabled: policy?.enabled ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.enabled,\n maxChars: policy?.maxChars ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.maxChars,\n maxLines: policy?.maxLines ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.maxLines,\n };\n}\n\nfunction buildToolOutputUiMeta(params: {\n toolName: string;\n parsed: Record<string, unknown>;\n}): ObservationPreviewMeta | undefined {\n const data = params.parsed['data'];\n if (!isRecord(data)) {\n return undefined;\n }\n\n if (params.toolName === 'browse_document_by_chunk' || params.toolName === 'browse_document_content') {\n const filename = readString(data['filename']);\n return filename ? { filename } : undefined;\n }\n\n if (params.toolName === 'sharedmemory_read') {\n const docName = readString(data['doc_name']);\n return docName ? { doc_name: docName } : undefined;\n }\n\n if (params.toolName === 'resource_read') {\n const uri = readString(data['uri']);\n if (typeof uri === 'string' && uri.startsWith('shared_memory://docs/')) {\n const docName = readString(data['doc_name']);\n return docName ? { doc_name: docName } : undefined;\n }\n if (typeof uri === 'string' && (uri.startsWith('evidence://') || uri.startsWith('citation_snapshot://'))) {\n const bundleId = readString(data['bundle_id']);\n return bundleId ? { document_name: bundleId } : undefined;\n }\n }\n\n if (params.toolName === 'workspace_read_documents') {\n const documentName = readString(data['documentName']) ?? readString(data['document_name']);\n const docTypeRaw = readString(data['docType']) ?? readString(data['doc_type']);\n const doc_type = docTypeRaw === 'markdown' || docTypeRaw === 'mindmap' ? docTypeRaw : undefined;\n if (!documentName && !doc_type) {\n return undefined;\n }\n return {\n ...(documentName ? { document_name: documentName } : {}),\n ...(doc_type ? { doc_type } : {}),\n };\n }\n\n return undefined;\n}\n\nexport async function applyObservationGovernance(params: {\n parsed: unknown;\n toolName: string;\n toolContext: ObservationPreviewContext;\n structuredObservation: string | undefined;\n observationPreview: ObservationPreviewPort;\n policy?: AgentSpecToolObservationGovernancePolicy;\n}): Promise<void> {\n if (!params.structuredObservation || !isRecord(params.parsed)) {\n return;\n }\n\n const policy = resolveToolObservationGovernancePolicy(params.policy);\n if (!policy.enabled) {\n return;\n }\n\n const truncated = await params.observationPreview.truncateObservation({\n context: params.toolContext,\n toolName: params.toolName,\n text: params.structuredObservation,\n maxChars: policy.maxChars,\n maxLines: policy.maxLines,\n meta: buildToolOutputUiMeta({\n toolName: params.toolName,\n parsed: params.parsed,\n }),\n });\n\n if (!truncated.truncated) {\n return;\n }\n\n params.parsed['observation'] = truncated.preview;\n const data = params.parsed['data'];\n if (isRecord(data) && !('tool_output_store' in data)) {\n data['tool_output_store'] = { blob_id: truncated.blob_id };\n }\n}\n","import { recordToolProtocolError } from '../../../shared/llmAuditRecorder';\n\nexport const TOOL_PROTOCOL_ERROR_FUSE_THRESHOLD = 4;\n\ntype ProtocolExecLike = {\n errorKind?: 'protocol' | 'execution';\n error?: string;\n};\n\nexport function applyProtocolFuseState(local: Record<string, unknown>, nextCount: number): void {\n if (nextCount > 0) {\n local._consecutiveToolProtocolErrors = nextCount;\n return;\n }\n\n delete local._consecutiveToolProtocolErrors;\n}\n\nexport function checkProtocolFuse(params: {\n local: Record<string, unknown>;\n exec: ProtocolExecLike;\n toolName: string;\n toolCallId?: string;\n rawArguments?: string;\n parsedArguments: Record<string, unknown>;\n}): { isProtocolError: boolean; nextCount: number; shouldFuse: boolean } {\n const isProtocolError = params.exec.errorKind === 'protocol';\n\n if (isProtocolError) {\n recordToolProtocolError({\n mode: 'agent',\n toolName: params.toolName,\n toolCallId: params.toolCallId,\n rawArguments: params.rawArguments,\n parsedArguments: params.parsedArguments,\n error: params.exec.error ?? 'unknown protocol error',\n });\n }\n\n const previousCount =\n typeof params.local._consecutiveToolProtocolErrors === 'number'\n ? (params.local._consecutiveToolProtocolErrors as number)\n : 0;\n const nextCount = isProtocolError ? previousCount + 1 : 0;\n\n return {\n isProtocolError,\n nextCount,\n shouldFuse: isProtocolError && nextCount >= TOOL_PROTOCOL_ERROR_FUSE_THRESHOLD,\n };\n}\n\nexport function createToolProtocolFuseError(nextCount: number, error: string | undefined): Error {\n const fuseError = new Error(\n `[ToolNode] Consecutive tool protocol errors reached fuse threshold (${nextCount}): ${error ?? 'unknown protocol error'}`\n );\n fuseError.name = 'ToolProtocolFuseError';\n return fuseError;\n}\n","import type { ToolControlInfo } from '../../tools/ui-types';\nimport type { UnknownRecord } from './toolNode.helpers';\nimport { isRecord } from './toolNode.helpers';\nimport type { RuntimeEvent } from '../../../contracts';\n\nfunction mergeHistory(local: UnknownRecord, runtimeEvents: RuntimeEvent[]): RuntimeEvent[] {\n const history = (local.history as RuntimeEvent[]) || [];\n return [...history, ...runtimeEvents];\n}\n\nfunction stripAnswerState(local: UnknownRecord): UnknownRecord {\n const { answerId, chunkSeq, ...rest } = local;\n return rest;\n}\n\nexport function readStructuredObservation(parsed: unknown): string | undefined {\n return isRecord(parsed) && typeof parsed.observation === 'string' ? parsed.observation : undefined;\n}\n\nexport function extractToolControlInfo(parsed: unknown): ToolControlInfo | undefined {\n if (!isRecord(parsed) || !isRecord(parsed.control)) {\n return undefined;\n }\n\n const control = parsed.control;\n const requireUser = control.requireUser === true;\n const terminateRun = control.terminateRun === true;\n if (!requireUser && !terminateRun) {\n return undefined;\n }\n\n return {\n ...(requireUser ? { requireUser: true } : {}),\n ...(typeof control.questionnaireId === 'string' ? { questionnaireId: control.questionnaireId } : {}),\n ...(control.resumeStrategy === 'continue' ? { resumeStrategy: 'continue' } : {}),\n ...(terminateRun ? { terminateRun: true } : {}),\n ...(typeof control.reason === 'string' ? { reason: control.reason } : {}),\n };\n}\n\nexport function buildSuccessOutputPayload(execResult: string | undefined, parsed: unknown): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n output: execResult ?? '',\n };\n if (parsed && typeof parsed === 'object') {\n payload.result = parsed;\n }\n return payload;\n}\n\nexport function applyToolOutputIdempotencyMetadata(params: {\n runtimeToolOutput: RuntimeEvent | null;\n execIdempotency?: { key: string; cacheHit: boolean };\n}): void {\n if (!params.runtimeToolOutput || !params.execIdempotency) {\n return;\n }\n\n if (params.execIdempotency.cacheHit) {\n params.runtimeToolOutput.ephemeral = true;\n }\n\n params.runtimeToolOutput.metadata = {\n ...(params.runtimeToolOutput.metadata ?? {}),\n idempotency: {\n key: params.execIdempotency.key,\n cache_hit: params.execIdempotency.cacheHit,\n },\n };\n}\n\nexport function buildRequireUserLocalState(params: {\n local: UnknownRecord;\n parsed: unknown;\n toolCallId: string;\n toolName: string;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n}): UnknownRecord {\n return {\n ...params.local,\n pendingToolCalls: params.remainingCalls,\n pendingInteractionSpec: {\n ...(isRecord(params.parsed) && isRecord(params.parsed.control) ? params.parsed.control : {}),\n toolCallId: params.toolCallId,\n toolName: params.toolName,\n },\n lastToolResult: params.parsed as unknown,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n}\n\nexport function buildSuccessLocalState(params: {\n local: UnknownRecord;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n}): UnknownRecord {\n return {\n ...stripAnswerState(params.local),\n pendingToolCalls: params.remainingCalls,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n}\n\nexport function buildErrorLocalState(params: {\n local: UnknownRecord;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n nextProtocolErrorCount: number;\n}): UnknownRecord {\n const nextLocal: UnknownRecord = {\n ...stripAnswerState(params.local),\n pendingToolCalls: params.remainingCalls,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n\n if (params.nextProtocolErrorCount > 0) {\n nextLocal._consecutiveToolProtocolErrors = params.nextProtocolErrorCount;\n } else {\n delete nextLocal._consecutiveToolProtocolErrors;\n }\n\n return nextLocal;\n}\n","import type { ToolParameterProperty, ToolParameterSchema } from './toolContracts';\n\ntype UnknownRecord = Record<string, unknown>;\ntype NormalizeToolArgsOptions = {\n toolName?: string;\n path?: string;\n};\n\nfunction isRecord(v: unknown): v is UnknownRecord {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction tryParseJsonEncodedValue(v: unknown): unknown {\n if (typeof v !== 'string') return v;\n const trimmed = v.trim();\n if (trimmed.length === 0) return v;\n try {\n return JSON.parse(trimmed);\n } catch {\n return v;\n }\n}\n\nfunction joinPath(basePath: string | undefined, segment: string): string {\n return basePath ? `${basePath}.${segment}` : segment;\n}\n\nfunction logJsonEncodedNormalization(\n expectedType: 'array' | 'object',\n options: NormalizeToolArgsOptions,\n): void {\n const toolPrefix = options.toolName ? `${options.toolName}.` : '';\n const path = options.path ?? '<root>';\n console.warn(`[ToolArgNormalizer] Normalized JSON-encoded ${expectedType} string for ${toolPrefix}${path}`);\n}\n\nfunction normalizeBoolean(v: unknown): unknown {\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') {\n if (v === 1) return true;\n if (v === 0) return false;\n return v;\n }\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n if (s === 'true') return true;\n if (s === 'false') return false;\n }\n return v;\n}\n\nfunction normalizeNumber(v: unknown, kind: 'integer' | 'number'): unknown {\n if (typeof v === 'number' && Number.isFinite(v)) {\n if (kind === 'integer') return Number.isInteger(v) ? v : v;\n return v;\n }\n if (typeof v === 'string') {\n const s = v.trim();\n if (s.length === 0) return v;\n const parsed = Number(s);\n if (!Number.isFinite(parsed)) return v;\n if (kind === 'integer') return Number.isInteger(parsed) ? parsed : v;\n return parsed;\n }\n return v;\n}\n\nfunction normalizeByPropertySchema(\n prop: ToolParameterProperty,\n v: unknown,\n options: NormalizeToolArgsOptions,\n): unknown {\n switch (prop.type) {\n case 'boolean':\n return normalizeBoolean(v);\n case 'integer':\n return normalizeNumber(v, 'integer');\n case 'number':\n return normalizeNumber(v, 'number');\n case 'string':\n return v;\n case 'array': {\n const parsedValue = tryParseJsonEncodedValue(v);\n if (parsedValue !== v && Array.isArray(parsedValue)) {\n logJsonEncodedNormalization('array', options);\n }\n if (!Array.isArray(parsedValue) || !prop.items) return parsedValue;\n return parsedValue.map((item, index) => normalizeByPropertySchema(\n prop.items!,\n item,\n {\n ...options,\n path: joinPath(options.path, `[${index}]`),\n },\n ));\n }\n case 'object': {\n const parsedValue = tryParseJsonEncodedValue(v);\n if (parsedValue !== v && isRecord(parsedValue)) {\n logJsonEncodedNormalization('object', options);\n }\n if (!isRecord(parsedValue)) return parsedValue;\n if (!prop.properties || !isRecord(prop.properties)) return parsedValue;\n return normalizeToolArgs(\n { type: 'object', properties: prop.properties },\n parsedValue,\n options,\n );\n }\n default:\n return v;\n }\n}\n\nexport function normalizeToolArgs(\n schema: ToolParameterSchema,\n args: UnknownRecord,\n options: NormalizeToolArgsOptions = {},\n): UnknownRecord {\n const next: UnknownRecord = { ...args };\n\n for (const [key, prop] of Object.entries(schema.properties ?? {})) {\n if (!Object.prototype.hasOwnProperty.call(next, key)) continue;\n next[key] = normalizeByPropertySchema(prop, next[key], {\n ...options,\n path: joinPath(options.path, key),\n });\n }\n\n return next;\n}\n","import { createHash } from 'crypto';\nimport type { ToolExecutionContext } from '../toolExecutionContext';\nimport type { RuntimeEvent } from '../../../contracts';\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord(v: unknown): v is UnknownRecord {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport type ToolIdempotencyScope = 'conversation' | 'turn';\n\nexport type ToolIdempotencyPolicy = {\n scope: ToolIdempotencyScope;\n};\n\nfunction stableStringify(v: unknown): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n const t = typeof v;\n if (t === 'string') return JSON.stringify(v);\n if (t === 'number' || t === 'boolean') return String(v);\n if (Array.isArray(v)) return `[${v.map(stableStringify).join(',')}]`;\n if (isRecord(v)) {\n const keys = Object.keys(v).sort();\n const parts = keys.map((k) => `${JSON.stringify(k)}:${stableStringify(v[k])}`);\n return `{${parts.join(',')}}`;\n }\n return JSON.stringify(String(v));\n}\n\nfunction resolveScopeKey(scope: ToolIdempotencyScope, context: ToolExecutionContext): string {\n const ctx = context as unknown as UnknownRecord;\n if (scope === 'conversation') {\n const conversationId = ctx['conversationId'];\n if (typeof conversationId === 'string' && conversationId.trim().length > 0) return conversationId.trim();\n }\n const turnId = ctx['turnId'];\n return typeof turnId === 'string' && turnId.trim().length > 0 ? turnId.trim() : 'unknown_turn';\n}\n\nexport function computeToolIdempotencyKey(params: {\n policy: ToolIdempotencyPolicy;\n toolName: string;\n args: Record<string, unknown>;\n context: ToolExecutionContext;\n}): string {\n const scopeKey = resolveScopeKey(params.policy.scope, params.context);\n const json = stableStringify({ tool: params.toolName, args: params.args });\n return createHash('sha256').update(`${scopeKey}|${json}`).digest('hex').slice(0, 16);\n}\n\nexport function findCachedToolOutputByIdempotencyKey(params: {\n history: ReadonlyArray<RuntimeEvent>;\n toolName: string;\n idempotencyKey: string;\n}): { output: string } | undefined {\n for (let i = params.history.length - 1; i >= 0; i -= 1) {\n const e = params.history[i] as unknown as UnknownRecord;\n if (!e || typeof e !== 'object') continue;\n if (e['type'] !== 'tool_output') continue;\n if (e['tool_name'] !== params.toolName) continue;\n if (e['status'] !== 'success') continue;\n const meta = e['metadata'];\n if (!isRecord(meta)) continue;\n const idem = meta['idempotency'];\n if (!isRecord(idem)) continue;\n if (idem['key'] !== params.idempotencyKey) continue;\n const output = e['output'];\n if (typeof output !== 'string') continue;\n return { output };\n }\n return undefined;\n}\n","import type { ToolContextConversationView } from './conversationView';\nimport type { ToolExecutionContext } from './toolExecutionContext';\nimport type { RuntimeEvent } from '../../contracts';\n\ntype RuntimeEventSource = () => ReadonlyArray<RuntimeEvent>;\n\nexport interface ToolContextExecutionMeta {\n conversationId?: string;\n turnId?: string;\n runId?: string;\n parentRunId?: string;\n parentToolCallId?: string;\n citationOffset?: number;\n}\n\nexport interface ToolContextRuntimeBinding {\n readonly conversationView: ToolContextConversationView;\n getWorkingHistoryEvents(): ReadonlyArray<RuntimeEvent>;\n getPersistedHistoryEvents(): ReadonlyArray<RuntimeEvent>;\n setWorkingHistorySource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): void;\n setPersistedHistorySource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): void;\n bindExecutionMeta(meta: ToolContextExecutionMeta): void;\n readExecutionMeta(): Readonly<ToolContextExecutionMeta>;\n}\n\nexport const TOOL_CONTEXT_RUNTIME_RESERVED_KEYS = [\n 'conversationView',\n 'getConversationHistoryEvents',\n 'conversationId',\n 'turnId',\n 'runId',\n 'parentRunId',\n 'parentToolCallId',\n 'citationOffset',\n] as const;\n\nconst TOOL_CONTEXT_RUNTIME_BINDING_KEY = '__tool_context_runtime_binding__';\n\nfunction toEventSource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): RuntimeEventSource {\n if (typeof source === 'function') {\n return source;\n }\n return () => source;\n}\n\nfunction syncExecutionMetaToContext(context: ToolExecutionContext, meta: ToolContextExecutionMeta): void {\n if (typeof meta.conversationId === 'string') {\n context.conversationId = meta.conversationId;\n }\n if (typeof meta.turnId === 'string') {\n context.turnId = meta.turnId;\n }\n if (typeof meta.runId === 'string') {\n context.runId = meta.runId;\n }\n if (typeof meta.parentRunId === 'string') {\n context.parentRunId = meta.parentRunId;\n }\n if (typeof meta.parentToolCallId === 'string') {\n context.parentToolCallId = meta.parentToolCallId;\n }\n if (typeof meta.citationOffset === 'number' && Number.isFinite(meta.citationOffset)) {\n context.citationOffset = meta.citationOffset;\n }\n}\n\nfunction createRuntimeBinding(params: {\n context: ToolExecutionContext;\n persistedHistory: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n workingHistory: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n executionMeta?: ToolContextExecutionMeta;\n}): ToolContextRuntimeBinding {\n let persistedHistorySource = toEventSource(params.persistedHistory);\n let workingHistorySource = toEventSource(params.workingHistory);\n let executionMeta: ToolContextExecutionMeta = {};\n\n const conversationView: ToolContextConversationView = {\n getWorkingHistoryEvents: () => workingHistorySource(),\n getPersistedHistoryEvents: () => persistedHistorySource(),\n };\n\n const binding: ToolContextRuntimeBinding = {\n conversationView,\n getWorkingHistoryEvents: () => conversationView.getWorkingHistoryEvents(),\n getPersistedHistoryEvents: () => conversationView.getPersistedHistoryEvents(),\n setWorkingHistorySource: (source) => {\n workingHistorySource = toEventSource(source);\n },\n setPersistedHistorySource: (source) => {\n persistedHistorySource = toEventSource(source);\n },\n bindExecutionMeta: (meta) => {\n executionMeta = {\n ...executionMeta,\n ...meta,\n };\n syncExecutionMetaToContext(params.context, executionMeta);\n },\n readExecutionMeta: () => ({ ...executionMeta }),\n };\n\n if (params.executionMeta) {\n binding.bindExecutionMeta(params.executionMeta);\n }\n\n return binding;\n}\n\nfunction readBinding(context: ToolExecutionContext): ToolContextRuntimeBinding | undefined {\n const maybeBinding = (context as Record<string, unknown>)[TOOL_CONTEXT_RUNTIME_BINDING_KEY];\n return isRuntimeBinding(maybeBinding) ? maybeBinding : undefined;\n}\n\nfunction isRuntimeBinding(value: unknown): value is ToolContextRuntimeBinding {\n if (!value || typeof value !== 'object') {\n return false;\n }\n return (\n typeof (value as ToolContextRuntimeBinding).getWorkingHistoryEvents === 'function' &&\n typeof (value as ToolContextRuntimeBinding).getPersistedHistoryEvents === 'function' &&\n typeof (value as ToolContextRuntimeBinding).setWorkingHistorySource === 'function' &&\n typeof (value as ToolContextRuntimeBinding).setPersistedHistorySource === 'function' &&\n typeof (value as ToolContextRuntimeBinding).bindExecutionMeta === 'function' &&\n typeof (value as ToolContextRuntimeBinding).readExecutionMeta === 'function'\n );\n}\n\nfunction pickDefaultHistorySource(params: {\n preferred?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n fallback?: () => ReadonlyArray<RuntimeEvent>;\n}): ReadonlyArray<RuntimeEvent> | RuntimeEventSource {\n if (params.preferred !== undefined) {\n return params.preferred;\n }\n if (params.fallback) {\n return params.fallback;\n }\n return [];\n}\n\nfunction exposeCompatibilitySurface(context: ToolExecutionContext, binding: ToolContextRuntimeBinding): void {\n context.conversationView = binding.conversationView;\n context.getConversationHistoryEvents = () => binding.getWorkingHistoryEvents();\n}\n\nexport function ensureToolContextRuntimeCapability(params: {\n context: ToolExecutionContext;\n persistedHistory?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n workingHistory?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n executionMeta?: ToolContextExecutionMeta;\n}): ToolContextRuntimeBinding {\n let binding = readBinding(params.context);\n\n if (!binding) {\n const existingConversationView = params.context.conversationView;\n const existingHistoryGetter = params.context.getConversationHistoryEvents;\n binding = createRuntimeBinding({\n context: params.context,\n persistedHistory: pickDefaultHistorySource({\n preferred: params.persistedHistory,\n fallback: () =>\n existingConversationView?.getPersistedHistoryEvents() ??\n existingHistoryGetter?.() ??\n [],\n }),\n workingHistory: pickDefaultHistorySource({\n preferred: params.workingHistory,\n fallback: () =>\n existingConversationView?.getWorkingHistoryEvents() ??\n existingHistoryGetter?.() ??\n [],\n }),\n executionMeta: params.executionMeta,\n });\n\n Object.defineProperty(params.context, TOOL_CONTEXT_RUNTIME_BINDING_KEY, {\n value: binding,\n enumerable: false,\n configurable: true,\n writable: false,\n });\n } else {\n if (params.persistedHistory !== undefined) {\n binding.setPersistedHistorySource(params.persistedHistory);\n }\n if (params.workingHistory !== undefined) {\n binding.setWorkingHistorySource(params.workingHistory);\n }\n if (params.executionMeta) {\n binding.bindExecutionMeta(params.executionMeta);\n }\n }\n\n exposeCompatibilitySurface(params.context, binding);\n return binding;\n}\n\nexport function getToolContextRuntimeBinding(context: ToolExecutionContext): ToolContextRuntimeBinding | undefined {\n return readBinding(context);\n}\n\nexport function readToolContextWorkingHistory(context: ToolExecutionContext): ReadonlyArray<RuntimeEvent> {\n if (context.conversationView) {\n return context.conversationView.getWorkingHistoryEvents();\n }\n if (typeof context.getConversationHistoryEvents === 'function') {\n return context.getConversationHistoryEvents() ?? [];\n }\n return [];\n}\n\nexport function readToolContextPersistedHistory(context: ToolExecutionContext): ReadonlyArray<RuntimeEvent> {\n if (context.conversationView) {\n return context.conversationView.getPersistedHistoryEvents();\n }\n if (typeof context.getConversationHistoryEvents === 'function') {\n return context.getConversationHistoryEvents() ?? [];\n }\n return [];\n}\n\nexport function stripRuntimeReservedToolContextPatch(\n patch: Partial<ToolExecutionContext> | Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!patch) {\n return {};\n }\n\n const nextPatch: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(patch)) {\n if ((TOOL_CONTEXT_RUNTIME_RESERVED_KEYS as readonly string[]).includes(key)) {\n continue;\n }\n nextPatch[key] = value;\n }\n return nextPatch;\n}\n","import type {\n ToolProcessEvent as AgentToolProcessEvent,\n ObservationEvent as AgentObservationEvent,\n} from '../../events/agentEvents';\nimport { eventMapper, type EventMappingContext } from '../../events/eventMappers';\nimport { generateMessageId } from '../../../shared/ids';\nimport { Logger } from '../../../shared/logger';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('ToolNode');\n\ntype SseSink = ((evt: unknown) => void) | undefined;\n\nexport interface ToolNodeEventBridgeDeps {\n sseSink: SseSink;\n conversationId: string;\n turnId: string;\n toolName: string;\n toolCallId: string | undefined;\n toolArgs: Record<string, unknown>;\n displayOptions: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport class ToolNodeEventBridge {\n private readonly runtimeEvents: RuntimeEvent[] = [];\n private readonly deps: ToolNodeEventBridgeDeps;\n\n constructor(deps: ToolNodeEventBridgeDeps) {\n this.deps = deps;\n }\n\n emitToolProcess(\n phase: 'start' | 'update' | 'complete' | 'error',\n status: 'loading' | 'success' | 'error',\n payload: Record<string, unknown>\n ): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const agentEvent: AgentToolProcessEvent = {\n type: 'tool_process',\n id,\n timestamp,\n tool_name: this.deps.toolName,\n tool_args: this.readToolArgs(payload),\n ...(Array.isArray(payload.tool_calls) ? { tool_calls: payload.tool_calls } : {}),\n tool_call_id: this.deps.toolCallId,\n phase,\n status,\n payload: { ...payload },\n meta: { displayOptions: this.deps.displayOptions },\n };\n\n logger.info('[ToolNode] 发出 tool_process 事件', {\n phase,\n status,\n toolName: this.deps.toolName,\n toolCallId: this.deps.toolCallId,\n eventId: id,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n emitToolOutput(status: 'success' | 'error', payload: Record<string, unknown>): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const output = payload.output;\n const agentEvent: AgentObservationEvent = {\n type: 'observation',\n id,\n timestamp,\n tool_name: this.deps.toolName,\n tool_call_id: this.deps.toolCallId,\n output: typeof output === 'string' ? output : this.serializeOutput(output),\n success: status === 'success',\n payload,\n duration_ms: payload.duration_ms as number | undefined,\n };\n\n logger.info('[ToolNode] 发出 tool_output 事件', {\n status,\n toolName: this.deps.toolName,\n toolCallId: this.deps.toolCallId,\n eventId: id,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n emitFinalAnswer(params: { answer: string; sourceToolName: string }): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const agentEvent = {\n type: 'final_answer' as const,\n id,\n timestamp,\n answer: params.answer,\n answer_id: `answer_${this.deps.toolCallId}`,\n };\n\n logger.info('[ToolNode] 工具输出映射为 final_answer', {\n sourceToolName: params.sourceToolName,\n toolCallId: this.deps.toolCallId,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n answerChars: params.answer.length,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n getRuntimeEvents(): RuntimeEvent[] {\n return this.runtimeEvents;\n }\n\n private readToolArgs(payload: Record<string, unknown>): Record<string, unknown> {\n const maybeArgs = payload.args;\n if (maybeArgs && typeof maybeArgs === 'object' && !Array.isArray(maybeArgs)) {\n return maybeArgs as Record<string, unknown>;\n }\n return this.deps.toolArgs;\n }\n\n private serializeOutput(output: unknown): string {\n try {\n return JSON.stringify(output ?? '');\n } catch {\n return String(output ?? '');\n }\n }\n\n private dispatchAgentEvent(evt: unknown): void {\n if (!this.deps.sseSink) {\n return;\n }\n\n try {\n if (evt && typeof evt === 'object') {\n Object.defineProperty(evt, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n }\n this.deps.sseSink(evt);\n } catch (error) {\n console.warn('[ToolNode] Agent event dispatch failed:', error);\n }\n }\n\n private bufferRuntimeEvent(evt: unknown, timestamp: number): RuntimeEvent | null {\n const runtime = eventMapper.agentToRuntime(evt as never, this.getMappingContext(timestamp), {\n skipIncomplete: false,\n });\n if (runtime) {\n this.runtimeEvents.push(runtime);\n return runtime;\n }\n return null;\n }\n\n private getMappingContext(timestamp: number): EventMappingContext {\n return {\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n timestamp,\n metadata: this.deps.idempotencyKey ? { idempotency: { key: this.deps.idempotencyKey } } : undefined,\n };\n }\n}\n","import { normalizeToolArgs } from '../../tools/argNormalizer';\nimport type { ToolExecutionContext } from '../../tools/toolExecutionContext';\nimport { computeToolIdempotencyKey } from '../../tools/idempotency/toolIdempotency';\nimport type { ToolCatalogPort, ToolRuntimeDefinition } from '../../tools/ports';\nimport { ensureToolContextRuntimeCapability } from '../../tools/toolContextRuntime';\nimport type { EngineState, StandardToolCall } from '../types';\nimport { ToolNodeEventBridge } from './toolNode.eventBridge';\nimport { computeCitationOffset, isRecord, parseJsonSafe, type UnknownRecord } from './toolNode.helpers';\nimport type { RuntimeEvent } from '../../../contracts';\n\nexport type PreparedToolNodeContext = {\n state: EngineState;\n local: UnknownRecord;\n toolContext: ToolExecutionContext;\n conversationId: string;\n turnId: string;\n};\n\nexport type PreparedToolExecution = {\n call: StandardToolCall;\n toolName: string;\n toolCallId: string;\n rawArguments: string;\n toolArgs: Record<string, unknown>;\n protocolError?: string;\n bridge: ToolNodeEventBridge;\n};\n\ntype ParsedToolArgsResult =\n | { ok: true; value: Record<string, unknown> }\n | { ok: false; error: string };\n\nexport function parseToolArgs(call: StandardToolCall): ParsedToolArgsResult {\n const rawArguments = typeof call.function?.arguments === 'string' ? call.function.arguments : '';\n if (!rawArguments.trim()) {\n return {\n ok: false,\n error: 'Tool arguments must be a non-empty JSON object string.',\n };\n }\n\n try {\n const parsed = JSON.parse(rawArguments) as unknown;\n if (!isRecord(parsed)) {\n return {\n ok: false,\n error: 'Tool arguments must decode to a JSON object.',\n };\n }\n return { ok: true, value: parsed };\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'Unknown JSON parse error';\n console.warn('[ToolNode] Failed to parse tool arguments:', error);\n return {\n ok: false,\n error: `Tool arguments are not valid JSON: ${reason}`,\n };\n }\n}\n\nexport function prepareToolNodeContext(state: EngineState): PreparedToolNodeContext {\n const local: UnknownRecord = state.local || {};\n const toolContext: ToolExecutionContext = isRecord(local.toolContext)\n ? (local.toolContext as ToolExecutionContext)\n : {};\n if (!isRecord(local.toolContext)) {\n local.toolContext = toolContext as UnknownRecord;\n }\n\n const conversationId = typeof local.conversationId === 'string' ? local.conversationId : '';\n const turnId =\n typeof local.turnId === 'string'\n ? local.turnId\n : `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n local.turnId = turnId;\n\n const historyEvents = (local.history as RuntimeEvent[]) || [];\n const citationOffset = computeCitationOffset(historyEvents, turnId);\n const existingConversationId =\n typeof toolContext.conversationId === 'string' ? toolContext.conversationId.trim() : '';\n ensureToolContextRuntimeCapability({\n context: toolContext,\n executionMeta: {\n conversationId: existingConversationId || conversationId,\n turnId,\n citationOffset,\n },\n });\n attachWorkingHistoryView({ state, toolContext });\n\n return { state, local, toolContext, conversationId, turnId };\n}\n\nexport function prepareToolExecution(params: {\n prepared: PreparedToolNodeContext;\n call: StandardToolCall;\n toolCatalog?: Pick<ToolCatalogPort, 'getToolDefinition'>;\n}): PreparedToolExecution | null {\n const toolName = params.call.function?.name;\n if (!toolName) {\n return null;\n }\n\n const toolCallId = params.call.id;\n const rawArguments = typeof params.call.function?.arguments === 'string' ? params.call.function.arguments : '';\n let toolArgs: Record<string, unknown> = {};\n let protocolError: string | undefined;\n const parsedToolArgs = parseToolArgs(params.call);\n const toolCatalog = params.toolCatalog;\n const toolDefinition = toolCatalog?.getToolDefinition(toolName);\n if (parsedToolArgs.ok) {\n toolArgs = parsedToolArgs.value;\n } else {\n protocolError = parsedToolArgs.error;\n }\n\n if (!protocolError && toolDefinition) {\n toolArgs = normalizeToolArgs(toolDefinition.parameters, toolArgs, { toolName });\n }\n\n const displayOptions = (toolDefinition?.displayOptions ?? {}) as Record<string, unknown>;\n const idempotencyKey = protocolError\n ? undefined\n : computeIdempotencyKey({\n toolDefinition,\n toolName,\n toolArgs,\n toolContext: params.prepared.toolContext,\n });\n\n bindRuntimeToolContext({\n toolContext: params.prepared.toolContext,\n conversationId: params.prepared.conversationId,\n turnId: params.prepared.turnId,\n toolCallId,\n });\n\n const sseSink =\n typeof params.prepared.local.sseSink === 'function'\n ? (params.prepared.local.sseSink as (evt: unknown) => void)\n : undefined;\n const bridge = new ToolNodeEventBridge({\n sseSink,\n conversationId: params.prepared.conversationId,\n turnId: params.prepared.turnId,\n toolName,\n toolCallId,\n toolArgs,\n displayOptions,\n idempotencyKey,\n });\n\n return {\n call: params.call,\n toolName,\n toolCallId,\n rawArguments,\n toolArgs,\n protocolError,\n bridge,\n };\n}\n\nfunction attachWorkingHistoryView(params: {\n state: EngineState;\n toolContext: ToolExecutionContext;\n}): void {\n const historyEvents = ((params.state.local as UnknownRecord | undefined)?.history as RuntimeEvent[] | undefined) ?? [];\n const runtimeBinding = ensureToolContextRuntimeCapability({\n context: params.toolContext,\n workingHistory: historyEvents,\n });\n runtimeBinding.setWorkingHistorySource(() => {\n const currentLocal = params.state.local as UnknownRecord | undefined;\n const currentHistory = (currentLocal?.history as RuntimeEvent[] | undefined) ?? [];\n if (Array.isArray(currentHistory) && currentHistory.length > 0) {\n return currentHistory;\n }\n return runtimeBinding.getPersistedHistoryEvents();\n });\n}\n\nfunction computeIdempotencyKey(params: {\n toolDefinition: ToolRuntimeDefinition | undefined;\n toolName: string;\n toolArgs: Record<string, unknown>;\n toolContext: ToolExecutionContext;\n}): string | undefined {\n if (!params.toolDefinition?.idempotency) {\n return undefined;\n }\n\n try {\n return computeToolIdempotencyKey({\n policy: params.toolDefinition.idempotency,\n toolName: params.toolName,\n args: params.toolArgs,\n context: params.toolContext,\n });\n } catch {\n return undefined;\n }\n}\n\nfunction bindRuntimeToolContext(params: {\n toolContext: ToolExecutionContext;\n conversationId: string;\n turnId: string;\n toolCallId: string;\n}): void {\n const existingConversationId =\n typeof params.toolContext.conversationId === 'string' ? params.toolContext.conversationId.trim() : '';\n ensureToolContextRuntimeCapability({\n context: params.toolContext,\n executionMeta: {\n conversationId: existingConversationId || params.conversationId,\n turnId: params.turnId,\n parentToolCallId: params.toolCallId,\n citationOffset:\n typeof params.toolContext.citationOffset === 'number' && Number.isFinite(params.toolContext.citationOffset)\n ? params.toolContext.citationOffset\n : undefined,\n },\n });\n}\n\nexport { parseJsonSafe };\n","import { Logger } from '../../../shared/logger';\nimport { noopTelemetry } from '../../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../../telemetry/telemetryPort';\nimport { noopAudit } from '../../audit/noopAudit';\nimport { emitAuditEnvelope } from '../../audit/emitAudit';\nimport type { AuditPort } from '../../../ports';\nimport type { AgentSpecToolObservationGovernancePolicy } from '../../../contracts';\nimport type { ToolControlInfo } from '../../tools/ui-types';\nimport type {\n ObservationPreviewPort,\n ToolExecutionPort,\n ToolCatalogPort,\n ToolExecutionResult,\n} from '../../tools/ports';\nimport type { GraphNode, EngineState, NodeResult, StandardToolCall } from '../types';\nimport { resolveFinalAnswerFromToolResult } from './toolNode.finalAnswerProjector';\nimport { ToolNodeEventBridge } from './toolNode.eventBridge';\nimport { applyObservationGovernance } from './toolNode.observationGovernance';\nimport {\n applyProtocolFuseState,\n createToolProtocolFuseError,\n checkProtocolFuse,\n} from './toolNode.protocolFuse';\nimport { parseJsonSafe } from './toolNode.helpers';\nimport type { UnknownRecord } from './toolNode.helpers';\nimport {\n applyToolOutputIdempotencyMetadata,\n buildErrorLocalState,\n buildRequireUserLocalState,\n buildSuccessLocalState,\n buildSuccessOutputPayload,\n extractToolControlInfo,\n readStructuredObservation,\n} from './toolNode.stateTransitions';\nimport {\n prepareToolExecution,\n prepareToolNodeContext,\n type PreparedToolNodeContext,\n} from './toolNode.executionSetup';\nimport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../system-reminder/helpers';\n\nconst logger = new Logger('ToolNode');\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n return value !== null && typeof value === 'object' && 'aborted' in value;\n}\n\nfunction readContextCheckpointToolName(local: UnknownRecord): string {\n const executorLocal = local.executorLocal;\n if (executorLocal && typeof executorLocal === 'object' && !Array.isArray(executorLocal)) {\n const value = (executorLocal as Record<string, unknown>).contextCheckpointToolName;\n if (typeof value === 'string' && value.trim().length > 0) {\n return value.trim();\n }\n }\n return DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME;\n}\n\nfunction readToolObservationPolicy(local: UnknownRecord): AgentSpecToolObservationGovernancePolicy | undefined {\n const executorLocal = local.executorLocal;\n if (executorLocal && typeof executorLocal === 'object' && !Array.isArray(executorLocal)) {\n const value = (executorLocal as Record<string, unknown>).toolObservationPolicy;\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n const policy: AgentSpecToolObservationGovernancePolicy = {};\n if (typeof record.enabled === 'boolean') {\n policy.enabled = record.enabled;\n }\n if (typeof record.maxChars === 'number' && Number.isFinite(record.maxChars)) {\n policy.maxChars = record.maxChars;\n }\n if (typeof record.maxLines === 'number' && Number.isFinite(record.maxLines)) {\n policy.maxLines = record.maxLines;\n }\n return Object.keys(policy).length > 0 ? policy : undefined;\n }\n }\n return undefined;\n}\n\ntype ToolNodeSuccessContext = PreparedToolNodeContext & {\n calls: StandardToolCall[];\n toolName: string;\n toolCallId: string;\n exec: ToolExecutionResult;\n parsed: unknown;\n bridge: ToolNodeEventBridge;\n};\n\ntype ToolNodeErrorContext = PreparedToolNodeContext & {\n calls: StandardToolCall[];\n call: StandardToolCall;\n toolName: string;\n toolCallId: string;\n toolArgs: Record<string, unknown>;\n exec: ToolExecutionResult;\n bridge: ToolNodeEventBridge;\n};\n\nexport interface ToolNodeDependencies {\n toolRuntime: Pick<ToolCatalogPort, 'getToolDefinition'> & Pick<ToolExecutionPort, 'executeTool'>;\n observationPreview: ObservationPreviewPort;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(observability 默认关闭,业务零影响)。\n */\n telemetryPort?: TelemetryPort;\n auditPort?: AuditPort;\n}\n\nexport class ToolNode implements GraphNode {\n id = 'tool';\n private readonly toolRuntime: Pick<ToolCatalogPort, 'getToolDefinition'> & Pick<ToolExecutionPort, 'executeTool'>;\n private readonly observationPreview: ObservationPreviewPort;\n private readonly telemetryPort: TelemetryPort;\n private readonly auditPort: AuditPort;\n\n constructor(dependencies: ToolNodeDependencies) {\n this.toolRuntime = dependencies.toolRuntime;\n this.observationPreview = dependencies.observationPreview;\n this.telemetryPort = dependencies.telemetryPort ?? noopTelemetry;\n this.auditPort = dependencies.auditPort ?? noopAudit;\n }\n\n /**\n * B2-engine Batch 2: 上报 tool_call 事件到宿主侧 TelemetryPort。\n * 在 handleSuccess / handleError 入口处调用。\n */\n private emitToolCallTelemetry(args: {\n toolName: string;\n durationMs: number;\n ok: boolean;\n errorCode?: string;\n conversationId: string;\n turnId: string;\n runId?: string;\n parentRunId?: string;\n }): void {\n this.telemetryPort.emit({\n kind: 'tool_call',\n toolName: args.toolName,\n durationMs: args.durationMs,\n ok: args.ok,\n errorCode: args.errorCode,\n scope: {\n conversationId: args.conversationId || undefined,\n turnId: args.turnId,\n ...(args.runId === undefined ? {} : { runId: args.runId }),\n ...(args.parentRunId === undefined ? {} : { parentRunId: args.parentRunId }),\n },\n });\n }\n\n private async emitToolDecisionAudit(args: {\n action: 'tool.allow' | 'tool.deny';\n toolName: string;\n toolCallId: string;\n reason: string;\n conversationId: string;\n turnId: string;\n runId?: string;\n parentRunId?: string;\n errorKind?: string;\n }): Promise<void> {\n await emitAuditEnvelope(this.auditPort, {\n parentRunId: args.parentRunId,\n action: args.action,\n actor: { kind: 'system' },\n decision: {\n outcome: args.action === 'tool.allow' ? 'allowed' : 'denied',\n reason: args.reason,\n metadata: {\n toolCallId: args.toolCallId,\n errorKind: args.errorKind,\n },\n },\n evidence: [\n {\n kind: 'tool_call',\n ref: args.toolCallId,\n summary: `${args.action} ${args.toolName}`,\n },\n ],\n scope: {\n conversationId: args.conversationId || undefined,\n turnId: args.turnId,\n runId: args.runId ?? args.turnId,\n ...(args.parentRunId === undefined ? {} : { parentRunId: args.parentRunId }),\n toolName: args.toolName,\n toolCallId: args.toolCallId,\n },\n });\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const calls = (state.local?.pendingToolCalls as StandardToolCall[] | undefined) ?? [];\n const signalRaw = state.local?.signal;\n if (isAbortSignal(signalRaw) && signalRaw.aborted) {\n const abortError = new Error('The user aborted a request.');\n abortError.name = 'AbortError';\n throw abortError;\n }\n\n const prepared = prepareToolNodeContext(state);\n logger.info('[ToolNode] 开始执行工具节点', {\n conversationId: prepared.conversationId,\n turnId: prepared.turnId,\n pendingCallCount: calls.length,\n citationOffset: prepared.toolContext.citationOffset,\n });\n\n if (calls.length === 0) {\n return { kind: 'yield', events: [] };\n }\n\n const call = calls[0];\n const execution = prepareToolExecution({\n prepared,\n call,\n toolCatalog: this.toolRuntime,\n });\n if (!execution) {\n console.warn('[ToolNode] No tool name found in call');\n return { kind: 'yield', events: [] };\n }\n\n execution.bridge.emitToolProcess('start', 'loading', {\n args: execution.toolArgs,\n tool_calls: [call],\n });\n\n if (typeof execution.protocolError === 'string') {\n return this.handleError({\n ...prepared,\n calls,\n call,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n toolArgs: execution.toolArgs,\n exec: {\n success: false,\n error: execution.protocolError,\n errorKind: 'protocol',\n durationMs: 0,\n },\n bridge: execution.bridge,\n });\n }\n\n const exec = await this.toolRuntime.executeTool(\n execution.toolName,\n execution.toolArgs,\n prepared.toolContext,\n );\n if (exec.success) {\n const parsed = typeof exec.result === 'string' ? parseJsonSafe(exec.result) : exec.result;\n return this.handleSuccess({\n ...prepared,\n calls,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n exec,\n parsed,\n bridge: execution.bridge,\n });\n }\n\n return this.handleError({\n ...prepared,\n calls,\n call,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n toolArgs: execution.toolArgs,\n exec,\n bridge: execution.bridge,\n });\n }\n\n private async handleSuccess(context: ToolNodeSuccessContext): Promise<NodeResult> {\n await this.emitToolDecisionAudit({\n action: 'tool.allow',\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n reason: 'tool execution succeeded',\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n this.emitToolCallTelemetry({\n toolName: context.toolName,\n durationMs: context.exec.durationMs,\n ok: true,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n\n applyProtocolFuseState(context.local, 0);\n\n await applyObservationGovernance({\n parsed: context.parsed,\n toolName: context.toolName,\n toolContext: context.toolContext,\n structuredObservation: readStructuredObservation(context.parsed),\n observationPreview: this.observationPreview,\n policy: readToolObservationPolicy(context.local),\n });\n\n const control = extractToolControlInfo(context.parsed);\n if (control?.requireUser) {\n return this.handleRequireUserSuccess({ ...context, control });\n }\n\n const runtimeToolOutput = context.bridge.emitToolOutput(\n 'success',\n buildSuccessOutputPayload(context.exec.result, context.parsed),\n );\n const finalAnswerProjection = resolveFinalAnswerFromToolResult(context.toolName, context.parsed);\n if (typeof finalAnswerProjection === 'string') {\n context.bridge.emitFinalAnswer({\n answer: finalAnswerProjection,\n sourceToolName: context.toolName,\n });\n }\n\n applyToolOutputIdempotencyMetadata({\n runtimeToolOutput,\n execIdempotency: context.exec.idempotency,\n });\n\n const remainingCalls = context.calls.slice(1);\n context.state.local = buildSuccessLocalState({\n local: context.local,\n remainingCalls,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n });\n\n if (context.toolName === readContextCheckpointToolName(context.local)) {\n context.state.local._checkpointStepReset = true;\n logger.info('[ToolNode] context checkpoint 执行成功,设置步数重置标记', {\n toolName: context.toolName,\n });\n }\n\n if (control?.terminateRun) {\n logger.info('[ToolNode] 收到 control.terminateRun,执行完工具后直接 yield 结束本轮 run', {\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n conversationId: context.conversationId,\n turnId: context.turnId,\n });\n return { kind: 'yield', events: context.bridge.getRuntimeEvents() };\n }\n\n return {\n kind: 'route',\n nextNodeId: remainingCalls.length > 0 ? 'tool' : 'llm',\n events: context.bridge.getRuntimeEvents(),\n };\n }\n\n private handleRequireUserSuccess(\n context: ToolNodeSuccessContext & { control: ToolControlInfo }\n ): NodeResult {\n context.state.local = buildRequireUserLocalState({\n local: context.local,\n parsed: context.parsed,\n toolCallId: context.toolCallId,\n toolName: context.toolName,\n remainingCalls: context.calls.slice(1),\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n });\n\n return { kind: 'route', nextNodeId: 'wait_user', events: context.bridge.getRuntimeEvents() };\n }\n\n private async handleError(context: ToolNodeErrorContext): Promise<NodeResult> {\n await this.emitToolDecisionAudit({\n action: context.exec.errorKind === 'protocol' ? 'tool.deny' : 'tool.allow',\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n reason: context.exec.error ?? 'tool_error',\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n errorKind: context.exec.errorKind,\n });\n this.emitToolCallTelemetry({\n toolName: context.toolName,\n durationMs: context.exec.durationMs,\n ok: false,\n errorCode: context.exec.errorKind,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n\n const errorString = (() => {\n try {\n return JSON.stringify({ error: context.exec.error || 'tool_error' });\n } catch {\n return String(context.exec.error || 'tool_error');\n }\n })();\n\n context.bridge.emitToolOutput('error', {\n output: errorString,\n error: context.exec.error ?? errorString,\n });\n\n const fuse = checkProtocolFuse({\n local: context.local,\n exec: context.exec,\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n rawArguments: context.call.function?.arguments,\n parsedArguments: context.toolArgs,\n });\n\n context.state.local = buildErrorLocalState({\n local: context.local,\n remainingCalls: context.calls.slice(1),\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n nextProtocolErrorCount: fuse.nextCount,\n });\n\n if (fuse.shouldFuse) {\n throw createToolProtocolFuseError(fuse.nextCount, context.exec.error);\n }\n\n return { kind: 'route', nextNodeId: 'llm', events: context.bridge.getRuntimeEvents() };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport type { RuntimeEvent } from '../../../contracts';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isRuntimeEvent(value: unknown): value is RuntimeEvent {\n return isRecord(value) && typeof value.type === 'string';\n}\n\nexport class UserNode implements GraphNode {\n id = 'user';\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = isRecord(state.local) ? state.local : {};\n const newEvents = Array.isArray(local.newEvents) ? local.newEvents.filter(isRuntimeEvent) : [];\n const userInputEvent = newEvents.find((event) => event.type === 'user_input');\n\n if (!userInputEvent) {\n return { kind: 'yield', events: [] };\n }\n\n return { kind: 'route', nextNodeId: 'llm', events: [] };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport { generateMessageId } from '../../../shared/ids';\nimport { createSSERequiresUserInteractionEvent } from '../../../contracts';\nimport type { AuditPort } from '../../../ports';\nimport { emitAuditEnvelope } from '../../audit/emitAudit';\nimport { noopAudit } from '../../audit/noopAudit';\n\nexport interface WaitUserNodeDependencies {\n auditPort?: AuditPort;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction toStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const normalized = value\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\n .filter((item) => item.length > 0);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction buildResumeRequestSnapshot(request: unknown): Record<string, unknown> | undefined {\n if (!isRecord(request)) return undefined;\n\n const snapshot: Record<string, unknown> = {};\n const promptKey = toNonEmptyString(request['promptKey']);\n const mode = toNonEmptyString(request['mode']);\n const projectMetadata = request['project_metadata'];\n const documentMetadata = request['document_metadata'];\n const knowledgeBaseId = toNonEmptyString(request['knowledgeBaseId']);\n const availableTools = toStringArray(request['availableTools']);\n\n if (promptKey) snapshot['promptKey'] = promptKey;\n if (mode) snapshot['mode'] = mode;\n if (isRecord(projectMetadata)) snapshot['project_metadata'] = projectMetadata;\n if (isRecord(documentMetadata)) snapshot['document_metadata'] = documentMetadata;\n if (knowledgeBaseId) snapshot['knowledgeBaseId'] = knowledgeBaseId;\n if (typeof request['enableTools'] === 'boolean') snapshot['enableTools'] = request['enableTools'];\n if (availableTools) snapshot['availableTools'] = availableTools;\n\n return Object.keys(snapshot).length > 0 ? snapshot : undefined;\n}\n\nexport class WaitUserNode implements GraphNode {\n id = 'wait_user';\n private readonly auditPort: AuditPort;\n\n constructor(dependencies: WaitUserNodeDependencies = {}) {\n this.auditPort = dependencies.auditPort ?? noopAudit;\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const local: Record<string, unknown> = state.local || {};\n const spec = local.pendingInteractionSpec || {};\n const conversationId = typeof local.conversationId === 'string' ? (local.conversationId as string) : '';\n const turnId =\n typeof local.turnId === 'string'\n ? (local.turnId as string)\n : `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n local.turnId = turnId;\n const sseSink = typeof local.sseSink === 'function' ? (local.sseSink as (evt: unknown) => void) : undefined;\n const resumeRequestSnapshot = buildResumeRequestSnapshot(local.request);\n const toolContext = isRecord(local.toolContext) ? local.toolContext : undefined;\n const runId = toNonEmptyString(toolContext?.['runId']) ?? turnId;\n const parentRunId = toNonEmptyString(toolContext?.['parentRunId']);\n\n const timestamp = Date.now();\n const id = generateMessageId();\n const sse = createSSERequiresUserInteractionEvent(id, conversationId, turnId, {\n timestamp,\n form: spec as Record<string, unknown>,\n });\n sse.timestamp = timestamp;\n if (sseSink) {\n try {\n Object.defineProperty(sse, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n sseSink(sse);\n } catch (error) {\n console.warn('[WaitUserNode] SSE dispatch failed:', error);\n }\n }\n\n const runtimeEventMetadata: Record<string, unknown> = {\n run_context: {\n runId,\n ...(parentRunId === undefined ? {} : { parentRunId }),\n },\n };\n if (resumeRequestSnapshot) {\n runtimeEventMetadata.resume_request_snapshot = resumeRequestSnapshot;\n }\n\n const runtimeEvent = {\n type: 'requires_user_interaction' as const,\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp,\n version: 1 as const,\n form: spec,\n metadata: runtimeEventMetadata,\n };\n\n await emitAuditEnvelope(this.auditPort, {\n action: 'wait_user.request',\n actor: { kind: 'system' },\n decision: {\n outcome: 'requested',\n reason: 'graph paused for user interaction',\n },\n evidence: [\n {\n kind: 'requires_user_interaction',\n ref: id,\n summary: toNonEmptyString((spec as Record<string, unknown>)['prompt']) ?? 'requires user interaction',\n },\n ],\n scope: {\n conversationId: conversationId || undefined,\n turnId,\n runId,\n parentRunId,\n },\n });\n\n state.local = {\n ...local,\n pendingInteractionSpec: undefined,\n lastToolResult: undefined,\n conversationId,\n turnId,\n };\n return { kind: 'pause', events: [runtimeEvent] };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport { generateMessageId } from '../../../shared/ids';\nimport { Logger } from '../../../shared/logger';\nimport { createFinalAnswerEvent, RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('AnswerNode');\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class AnswerNode implements GraphNode {\n id = 'answer';\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = isRecord(state.local) ? state.local : {};\n const finalAnswer = typeof local.finalAnswer === 'string' ? local.finalAnswer : undefined;\n const conversationId = typeof local.conversationId === 'string' ? local.conversationId : '';\n const turnId = typeof local.turnId === 'string' ? local.turnId : `turn_${Date.now()}`;\n const answerId = typeof local.answerId === 'string' ? local.answerId : generateMessageId();\n\n logger.info('[AnswerNode] 开始执行最终答案节点', {\n conversationId,\n turnId,\n answerId,\n hasFinalAnswer: Boolean(finalAnswer),\n });\n\n if (!finalAnswer) {\n logger.warn('[AnswerNode] 没有 finalAnswer,返回空事件');\n return { kind: 'yield', events: [] };\n }\n\n const finalAnswerEvent = createFinalAnswerEvent(\n generateMessageId(),\n conversationId,\n turnId,\n answerId,\n finalAnswer,\n { is_complete: true }\n );\n\n logger.info('[AnswerNode] 生成 final_answer RuntimeEvent', {\n runtimeId: finalAnswerEvent.id,\n answerId: finalAnswerEvent.answer_id,\n contentLength: finalAnswerEvent.content?.length ?? 0,\n conversationId,\n turnId,\n });\n\n const events: RuntimeEvent[] = [finalAnswerEvent];\n\n logger.info('[AnswerNode] 返回最终答案事件', {\n eventCount: events.length,\n runtimeEventId: events[0]?.id,\n });\n\n return { kind: 'yield', events };\n }\n}\n","/**\n * @file checkpointer/base.ts\n * @description Engine-state Checkpointer 接口定义。\n *\n * ## 术语:这里说的 \"Checkpointer\" 是哪个 checkpoint?\n *\n * 在 agent 生态里,\"checkpoint\" 是个被严重重载的词。这个接口指的是\n * **graph engine 的执行状态快照**——也就是 `EngineState`:\n *\n * - `nodeId`: 图执行当前停在哪个节点\n * - `pendingToolCalls`: 已发出还未回收的 tool call\n * - `executorLocal.stepCount`: 循环步数计数\n * - `local`: 节点间共享的中间字典(含 history、checkpointCount 等)\n *\n * 这是 **执行控制层** 的概念:让一次 run 在被打断后能从断点恢复继续推理,\n * 让宿主能查询\"我现在停在哪个节点、还欠几个 tool call\"。\n *\n * ### 这个 Checkpointer **不是**:\n *\n * - **不是** 应用层的\"对话总结 / 上下文裁剪 checkpoint\"。那是上下文工程\n * 领域的概念,通常由宿主自己实现成一个 LLM tool(让模型主动写阶段总结,\n * 下一轮上下文构建时把摘要点之前的旧消息从 LLM context window 里裁掉)。\n * 那种产出本质上是一个 RuntimeEvent,落在宿主的 EventStore 里,跟本接口\n * 毫无关系。\n *\n * - **不是** RuntimeEvent 持久化。事件流的持久化由 `EventStore` 接口负责。\n *\n * - **不是** Run 元数据持久化。Run 注册由 `RunRegistryStore` 负责。\n *\n * 名字相同语义不同,是历史遗留。如果你在文档里同时看到 \"checkpoint\",\n * 请按上下文区分:本接口语境下的 checkpoint 永远指 EngineState 快照。\n */\n\nimport type { EngineState } from '../types';\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nexport type CheckpointMeta = {\n conversationId: string;\n schemaVersion: number;\n savedAt: number;\n currentNode?: string;\n iterations?: number;\n hasPendingToolCalls: boolean;\n};\n\nexport type CheckpointListFilter = {\n savedAfter?: number;\n limit?: number;\n cursor?: string;\n};\n\nexport type CheckpointSummary = CheckpointMeta;\n\nexport interface Checkpointer {\n load(conversationId: string): Promise<EngineState | null>;\n save(conversationId: string, state: EngineState): Promise<void>;\n clear(conversationId: string): Promise<void>;\n peekMeta?(conversationId: string): Promise<CheckpointMeta | null>;\n list?(filter?: CheckpointListFilter): Promise<CheckpointSummary[]>;\n}\n\nexport function summarizeCheckpoint(\n conversationId: string,\n state: EngineState,\n savedAt: number,\n): CheckpointSummary {\n const local = asRecord(state.local);\n const executorLocal = asRecord(local?.executorLocal);\n const pendingToolCalls = local?.pendingToolCalls;\n\n return {\n conversationId,\n schemaVersion: state.schemaVersion ?? 1,\n savedAt,\n currentNode: state.nodeId,\n iterations:\n typeof executorLocal?.stepCount === 'number' ? executorLocal.stepCount : undefined,\n hasPendingToolCalls: Array.isArray(pendingToolCalls) && pendingToolCalls.length > 0,\n };\n}\n","import { ENGINE_STATE_SCHEMA_VERSION, type EngineState } from '../types';\nimport {\n summarizeCheckpoint,\n type Checkpointer,\n type CheckpointListFilter,\n type CheckpointMeta,\n type CheckpointSummary,\n} from './base';\n\nexport class MemoryCheckpointer implements Checkpointer {\n private store = new Map<string, { state: EngineState; savedAt: number }>();\n\n private cloneState(state: EngineState): EngineState {\n return {\n ...state,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local:\n state.local && typeof state.local === 'object' && !Array.isArray(state.local)\n ? { ...state.local }\n : state.local,\n };\n }\n\n async load(conversationId: string): Promise<EngineState | null> {\n const entry = this.store.get(conversationId);\n return entry ? this.cloneState(entry.state) : null;\n }\n\n async save(conversationId: string, state: EngineState): Promise<void> {\n this.store.set(conversationId, {\n state: this.cloneState(state),\n savedAt: Date.now(),\n });\n }\n\n async clear(conversationId: string): Promise<void> {\n this.store.delete(conversationId);\n }\n\n async peekMeta(conversationId: string): Promise<CheckpointMeta | null> {\n const entry = this.store.get(conversationId);\n return entry ? summarizeCheckpoint(conversationId, entry.state, entry.savedAt) : null;\n }\n\n async list(filter: CheckpointListFilter = {}): Promise<CheckpointSummary[]> {\n const summaries = Array.from(this.store.entries())\n .map(([conversationId, entry]) => summarizeCheckpoint(conversationId, entry.state, entry.savedAt))\n .filter((summary) => (filter.savedAfter === undefined ? true : summary.savedAt > filter.savedAfter))\n .sort((left, right) => right.savedAt - left.savedAt);\n\n if (filter.limit === undefined) {\n return summaries;\n }\n\n return summaries.slice(0, filter.limit);\n }\n}\n","import type { EventRangeOptions, EventStore, PersistedEvent } from './base';\n\nfunction clonePersistedEvent(event: PersistedEvent): PersistedEvent {\n return {\n ...event,\n event: { ...event.event },\n };\n}\n\nexport class MemoryEventStore implements EventStore {\n private readonly store = new Map<string, PersistedEvent[]>();\n\n async append(conversationId: string, event: PersistedEvent): Promise<void> {\n const current = this.store.get(conversationId) ?? [];\n current.push(clonePersistedEvent(event));\n this.store.set(conversationId, current);\n }\n\n async range(conversationId: string, opts: EventRangeOptions = {}): Promise<PersistedEvent[]> {\n const events = [...(this.store.get(conversationId) ?? [])]\n .filter((event) => (opts.fromEventId ? event.eventId > opts.fromEventId : true))\n .filter((event) => (opts.toEventId ? event.eventId <= opts.toEventId : true));\n\n if (opts.limit === undefined) {\n return events.map(clonePersistedEvent);\n }\n\n return events.slice(0, opts.limit).map(clonePersistedEvent);\n }\n\n async latestEventId(conversationId: string): Promise<string | null> {\n const events = this.store.get(conversationId) ?? [];\n const latest = events.length > 0 ? events[events.length - 1] : undefined;\n return latest?.eventId ?? null;\n }\n\n async truncate(\n conversationId: string,\n opts: { beforeEventId?: string; beforeMs?: number },\n ): Promise<void> {\n const events = this.store.get(conversationId) ?? [];\n const retained = events.filter((event) => {\n if (opts.beforeEventId && event.eventId < opts.beforeEventId) {\n return false;\n }\n if (opts.beforeMs !== undefined && event.timestamp < opts.beforeMs) {\n return false;\n }\n return true;\n });\n this.store.set(conversationId, retained);\n }\n}\n","import type { RuntimeEvent } from '../../../contracts';\n\nexport type PersistedEvent = {\n eventId: string;\n timestamp: number;\n conversationId: string;\n runId?: string;\n event: RuntimeEvent;\n};\n\nexport type EventRangeOptions = {\n fromEventId?: string;\n toEventId?: string;\n limit?: number;\n};\n\nexport interface EventStore {\n append(conversationId: string, event: PersistedEvent): Promise<void>;\n range(conversationId: string, opts?: EventRangeOptions): Promise<PersistedEvent[]>;\n latestEventId(conversationId: string): Promise<string | null>;\n truncate?(conversationId: string, opts: { beforeEventId?: string; beforeMs?: number }): Promise<void>;\n}\n\nexport function createMonotonicEventIdFactory(\n nowProvider: () => number = () => Date.now(),\n): () => string {\n let lastTimestamp = 0;\n let counter = 0;\n\n return () => {\n const timestamp = nowProvider();\n if (timestamp === lastTimestamp) {\n counter += 1;\n } else {\n lastTimestamp = timestamp;\n counter = 0;\n }\n\n return `${String(timestamp).padStart(13, '0')}-${String(counter).padStart(4, '0')}`;\n };\n}\n","export { EventBus } from './event-bus';\nexport { EventSequencer } from './sequencer';\nexport { createRuntimeErrorEvent } from './runtimeErrorEventFactory';\n","/**\n * @file src/agent/runtime-kernel/execution/event-bus.ts\n * @description 内存中的事件总线\n *\n * 功能 (What):\n * - 提供一个中央事件中心,用于发布和订阅 `EventEnvelope` 事件。\n * - 解耦事件的产生方(如 Runners)和消费方(如持久化、SSE推送)。\n * - 保证事件处理的逻辑集中化。\n *\n * 这是一个简单的内存实现,为每个执行流程(execution)创建一个实例。\n */\n\nimport { Logger } from '../../shared/logger';\nimport type { EventEnvelope, RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('EventBus');\n\n// 定义事件总线可以发出的事件类型\ntype EventBusEvents = {\n 'event': (envelope: EventEnvelope<RuntimeEvent>) => void;\n 'error': (error: Error) => void;\n 'close': () => void;\n};\n\n// 使用轻量内存 emitter,避免 Node EventEmitter 的 any listener 边界污染公开类型。\ntype EventListener = (...args: never[]) => void;\n\nclass TypedEventEmitter<TEvents extends Record<string, EventListener>> {\n private readonly listeners = new Map<keyof TEvents, Set<TEvents[keyof TEvents]>>();\n private maxListeners = 10;\n\n on<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n const listeners = this.getListeners(event);\n listeners.add(listener);\n if (listeners.size > this.maxListeners) {\n logger.warn('EventBus listener count exceeds configured max', {\n event: String(event),\n count: listeners.size,\n maxListeners: this.maxListeners,\n });\n }\n return this;\n }\n\n off<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n\n once<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n const onceListener = ((...args: Parameters<TEvents[TEvent]>) => {\n this.off(event, onceListener);\n listener(...args);\n }) as TEvents[TEvent];\n this.on(event, onceListener);\n return this;\n }\n\n emit<TEvent extends keyof TEvents>(event: TEvent, ...args: Parameters<TEvents[TEvent]>): boolean {\n const listeners = this.listeners.get(event);\n if (!listeners || listeners.size === 0) {\n return false;\n }\n for (const listener of [...listeners]) {\n const typedListener = listener as TEvents[TEvent];\n typedListener(...args);\n }\n return true;\n }\n\n removeAllListeners<TEvent extends keyof TEvents>(event?: TEvent): this {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n\n setMaxListeners(n: number): this {\n this.maxListeners = n;\n return this;\n }\n\n private getListeners<TEvent extends keyof TEvents>(event: TEvent): Set<TEvents[keyof TEvents]> {\n const existing = this.listeners.get(event);\n if (existing) {\n return existing;\n }\n const created = new Set<TEvents[keyof TEvents]>();\n this.listeners.set(event, created);\n return created;\n }\n}\n\n/**\n * 事件总线类\n *\n * 为每一次执行(execution)实例化一次,管理该执行生命周期内的所有事件。\n */\nexport class EventBus extends TypedEventEmitter<EventBusEvents> {\n public readonly executionId: string; // 🔥 改为 public 以便外部访问\n\n constructor(executionId: string) {\n super();\n this.executionId = executionId;\n this.setMaxListeners(30); // 默认10个,增加一些以防多工具监听等场景\n logger.info(`EventBus created for execution ${this.executionId}`);\n }\n\n /**\n * 发布一个事件到总线\n * @param envelope - 经过序列器包装的事件信封\n */\n publish(envelope: EventEnvelope<RuntimeEvent>): void {\n if (envelope.trace.execution_id !== this.executionId) {\n const error = new Error('EventEnvelope execution_id does not match EventBus instance.');\n logger.error('Mismatched execution_id', {\n busExecutionId: this.executionId,\n eventExecutionId: envelope.trace.execution_id,\n eventSeq: envelope.seq,\n });\n this.emit('error', error);\n return;\n }\n\n this.emit('event', envelope);\n }\n\n /**\n * 关闭总线,清理所有监听器\n */\n close(): void {\n logger.info(`Closing EventBus for execution ${this.executionId}`);\n this.emit('close');\n this.removeAllListeners();\n }\n}\n","/**\n * @file src/agent/runtime-kernel/execution/sequencer.ts\n * @description 事件序列器 - 为事件分配序号和执行上下文\n * \n * 功能 (What):\n * - 为每个执行流程生成唯一的 execution_id\n * - 为事件分配单调递增的序号 (seq)\n * - 将 RuntimeEvent 包装为 EventEnvelope,提供追踪和渲染元数据\n * \n * 输入 (Input):\n * - RuntimeEvent 或原始事件数据\n * - source 信息(事件来源)\n * \n * 输出 (Output):\n * - EventEnvelope 包装的事件\n * \n * 副作用 (Side-effects):\n * - 维护内存中的序号状态\n */\n\nimport { generateExecutionId, generateTraceId } from '../../shared/ids';\nimport { Logger } from '../../shared/logger';\nimport type { EventEnvelope, ExecutionTraceContext, RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('EventSequencer');\n\n/**\n * 事件序列器类\n * \n * 职责:\n * - 管理执行上下文(execution_id, trace_id)\n * - 为事件分配严格递增的序号\n * - 提供事件包装功能\n */\nexport class EventSequencer {\n private readonly executionId: string;\n private readonly traceId: string;\n private currentSeq = 0;\n\n constructor(\n conversationId: string,\n traceId?: string\n ) {\n // 🔥 修复:使用标准化的 ID 生成函数,保持代码一致性\n this.executionId = generateExecutionId();\n this.traceId = traceId || generateTraceId();\n \n logger.info(`EventSequencer created for conversation ${conversationId}`, {\n executionId: this.executionId,\n traceId: this.traceId,\n });\n }\n\n /**\n * 获取执行上下文\n */\n getExecutionContext(): ExecutionTraceContext {\n return {\n execution_id: this.executionId,\n trace_id: this.traceId,\n };\n }\n\n /**\n * 获取下一个序号\n * 这个方法是线程安全的,因为 Node.js 是单线程的\n */\n private getNextSeq(): number {\n return ++this.currentSeq;\n }\n\n /**\n * 将 RuntimeEvent 包装为 EventEnvelope\n * \n * @param runtimeEvent - 需要包装的运行时事件\n * @param source - 事件来源标识\n * @param renderHint - 可选的渲染建议\n * @param runLocation - 可选的执行位置\n * @returns 包装后的事件信封\n */\n wrapEvent(\n runtimeEvent: RuntimeEvent,\n source: string,\n options: {\n renderHint?: EventEnvelope<RuntimeEvent>['render_hint'];\n runLocation?: EventEnvelope<RuntimeEvent>['run_location'];\n } = {}\n ): EventEnvelope<RuntimeEvent> {\n const envelope: EventEnvelope<RuntimeEvent> = {\n seq: this.getNextSeq(),\n timestamp: Date.now(),\n trace: this.getExecutionContext(),\n source,\n payload: runtimeEvent,\n render_hint: options.renderHint,\n run_location: options.runLocation,\n };\n\n return envelope;\n }\n\n /**\n * 获取当前序号(调试用)\n */\n getCurrentSeq(): number {\n return this.currentSeq;\n }\n\n /**\n * 获取执行ID(调试用)\n */\n getExecutionId(): string {\n return this.executionId;\n }\n}\n","/**\n * @file src/agent/shared/errorClassifier.ts\n *\n * @brief Agent runtime 自己拥有的错误分类器\n *\n * @description\n * 错误分类与重试策略属于 Agent runtime 的执行协议,不应该继续由 app shared owner 持有。\n */\n\nexport enum ErrorCategory {\n RETRYABLE = 'retryable',\n NON_RETRYABLE = 'non_retryable',\n RATE_LIMIT = 'rate_limit',\n}\n\nexport const ENGINE_ERROR_CODES = {\n LLM_RATE_LIMIT: 'llm.rate_limit',\n LLM_INVALID_TOOL_ARGS: 'llm.invalid_tool_args',\n LLM_PROVIDER_DOWN: 'llm.provider_down',\n LLM_UNSUPPORTED_CAPABILITY: 'llm.unsupported_capability',\n LLM_AUTH_FAILED: 'llm.auth_failed',\n LLM_INVALID_REQUEST: 'llm.invalid_request',\n LLM_RESOURCE_NOT_FOUND: 'llm.resource_not_found',\n TOOL_TIMEOUT: 'tool.timeout',\n TOOL_PROTOCOL_FUSE: 'tool.protocol_fuse',\n ENGINE_DELEGATE_DEPTH: 'engine.delegate_depth_exceeded',\n ENGINE_BUDGET_EXHAUSTED: 'engine.budget_exhausted',\n USER_CANCELLED: 'user.cancelled',\n ENGINE_UNKNOWN: 'engine.unknown',\n} as const;\n\nexport interface ErrorClassification {\n category: ErrorCategory;\n reason: string;\n suggestedDelay: number | null;\n errorCode: string;\n recoverable: boolean;\n retryAfterMs?: number;\n hint?: string;\n metadata?: Record<string, unknown>;\n}\n\ntype ClassificationExtras = Omit<ErrorClassification, 'category' | 'reason' | 'suggestedDelay'>;\n\nfunction createClassification(\n category: ErrorCategory,\n reason: string,\n suggestedDelay: number | null,\n extras: ClassificationExtras,\n): ErrorClassification {\n return {\n category,\n reason,\n suggestedDelay,\n ...extras,\n };\n}\n\nexport class ErrorClassifier {\n static classify(error: Error, context?: { logPrefix?: string }): ErrorClassification {\n type UnknownRecord = Record<string, unknown>;\n const isRecord = (v: unknown): v is UnknownRecord => !!v && typeof v === 'object' && !Array.isArray(v);\n\n const baseMsg = (error.message || '').toLowerCase();\n const causeMsg = (() => {\n const cause = (error as unknown as { cause?: unknown }).cause;\n if (typeof cause === 'string') return cause.toLowerCase();\n if (cause instanceof Error) return (cause.message || '').toLowerCase();\n if (isRecord(cause) && typeof cause['message'] === 'string') return String(cause['message']).toLowerCase();\n return '';\n })();\n const causeCode = (() => {\n const cause = (error as unknown as { cause?: unknown }).cause;\n if (isRecord(cause) && typeof cause['code'] === 'string') return String(cause['code']);\n return '';\n })();\n\n const errorMessage = `${baseMsg} ${causeMsg}`.trim();\n const logPrefix = context?.logPrefix || '[ErrorClassifier]';\n\n if (errorMessage.includes('invalid tool_call.arguments')) {\n console.log(`${logPrefix} 🔄 检测到流式 tool_call 参数损坏,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, '模型输出损坏: invalid tool_call.arguments', 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_INVALID_TOOL_ARGS,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_same_request',\n metadata: { matchedPattern: 'invalid tool_call.arguments' },\n });\n }\n\n const unsupportedPatterns = [\n 'no channels with claude tools support',\n 'does not support',\n 'not supported',\n 'tool calling is not available',\n 'feature not available',\n 'capability not supported',\n 'unsupported',\n ];\n\n for (const pattern of unsupportedPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到功能不支持错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `功能不支持: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_UNSUPPORTED_CAPABILITY,\n recoverable: false,\n hint: 'switch_model_or_disable_feature',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const quotaPatterns = ['已达上限', '免费期已结束'];\n for (const pattern of quotaPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到云端额度限制,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `云端额度限制: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: false,\n hint: 'check_billing_or_provider_status',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const authPatterns = [\n { pattern: 'unauthorized', code: '401' },\n { pattern: 'forbidden', code: '403' },\n { pattern: 'invalid api key', code: 'auth' },\n { pattern: 'invalid_api_key', code: 'auth' },\n { pattern: 'authentication failed', code: 'auth' },\n { pattern: 'api key not found', code: 'auth' },\n ];\n\n for (const { pattern, code } of authPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到认证/权限错误 (${code}),不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `认证/权限错误: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_AUTH_FAILED,\n recoverable: false,\n hint: 'check_credentials',\n metadata: { matchedPattern: pattern, authCode: code },\n });\n }\n }\n\n const formatPatterns = [\n 'bad request',\n '400',\n 'invalid request',\n 'invalid parameter',\n 'invalid arguments for function',\n 'convert_request_failed',\n 'validation error',\n 'malformed',\n 'invalid json',\n 'parse error',\n 'schema validation failed',\n ];\n\n for (const pattern of formatPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到请求格式错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `请求格式错误: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_INVALID_REQUEST,\n recoverable: false,\n hint: 'fix_request_payload',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const notFoundPatterns = [\n 'not found',\n '404',\n 'model not found',\n 'endpoint not found',\n 'resource not found',\n ];\n\n for (const pattern of notFoundPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到资源不存在错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `资源不存在: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_RESOURCE_NOT_FOUND,\n recoverable: false,\n hint: 'verify_resource_identifier',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const rateLimitPatterns = [\n 'rate limit',\n 'too many requests',\n '429',\n 'quota exceeded',\n 'throttled',\n ];\n\n for (const pattern of rateLimitPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} ⏱️ 检测到速率限制错误,将使用指数退避重试`);\n return createClassification(ErrorCategory.RATE_LIMIT, `速率限制: ${pattern}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_RATE_LIMIT,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const networkPatterns = [\n 'network error',\n 'timeout',\n 'econnrefused',\n 'econnreset',\n 'etimedout',\n 'connection refused',\n 'connection reset',\n 'socket hang up',\n 'fetch failed',\n 'network timeout',\n 'terminated',\n 'other side closed',\n ];\n\n for (const pattern of networkPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🔄 检测到网络错误,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `网络错误: ${pattern}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n if (causeCode.startsWith('UND_ERR_')) {\n console.log(`${logPrefix} 🔄 检测到 undici 错误码(${causeCode}),可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `网络错误(undici): ${causeCode}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: causeCode },\n });\n }\n\n const serverErrorPatterns = [\n { pattern: '500', name: 'Internal Server Error' },\n { pattern: '502', name: 'Bad Gateway' },\n { pattern: '503', name: 'Service Unavailable' },\n { pattern: '504', name: 'Gateway Timeout' },\n { pattern: 'internal server error', name: 'Internal Server Error' },\n { pattern: 'bad gateway', name: 'Bad Gateway' },\n { pattern: 'service unavailable', name: 'Service Unavailable' },\n { pattern: 'gateway timeout', name: 'Gateway Timeout' },\n ];\n\n for (const { pattern, name } of serverErrorPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🔄 检测到服务端临时错误 (${name}),可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `服务端临时错误: ${name}`, 2000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 2000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n if (errorMessage.includes('空响应') || errorMessage.includes('empty response')) {\n console.log(`${logPrefix} 🔄 检测到空响应错误,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, '空响应错误', 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: 'empty response' },\n });\n }\n\n const truncatedMessage =\n errorMessage.length > 100 ? `${errorMessage.substring(0, 100)}...` : errorMessage;\n\n console.log(`${logPrefix} ⚠️ 未知错误类型,默认不重试以避免浪费: ${truncatedMessage}`);\n return createClassification(ErrorCategory.NON_RETRYABLE, '未知错误类型(保守策略)', null, {\n errorCode: ENGINE_ERROR_CODES.ENGINE_UNKNOWN,\n recoverable: false,\n hint: 'inspect_logs',\n metadata: { matchedPattern: 'fallback' },\n });\n }\n\n static categorize(error: Error): ErrorCategory {\n return this.classify(error).category;\n }\n\n static shouldRetry(error: Error): boolean {\n const category = this.categorize(error);\n return category === ErrorCategory.RETRYABLE || category === ErrorCategory.RATE_LIMIT;\n }\n\n static calculateRetryDelay(\n error: Error,\n attemptNumber: number,\n baseDelay: number = 1000,\n maxDelay: number = 60000,\n ): number {\n const classification = this.classify(error);\n\n if (classification.category === ErrorCategory.NON_RETRYABLE) {\n return 0;\n }\n\n if (classification.category === ErrorCategory.RATE_LIMIT) {\n return Math.min(baseDelay * Math.pow(2, attemptNumber), maxDelay);\n }\n\n return classification.suggestedDelay || baseDelay;\n }\n\n static isCloudQuotaError(error: Error): boolean {\n const msg = (error.message || '').toLowerCase();\n const patterns = [\n '额度上限',\n '已达上限',\n '免费期已结束',\n '该模型暂不可用',\n ];\n return patterns.some((pattern) => msg.includes(pattern));\n }\n}\n\nexport const classifyError = (error: Error) => ErrorClassifier.classify(error);\nexport const categorizeError = (error: Error) => ErrorClassifier.categorize(error);\nexport const shouldRetryError = (error: Error) => ErrorClassifier.shouldRetry(error);\n","import { ENGINE_ERROR_CODES, ErrorClassifier } from '../../shared/errorClassifier';\nimport type { ErrorEvent } from '../../contracts';\nimport { createErrorEvent } from '../../contracts';\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst isRecord = (v: unknown): v is UnknownRecord => !!v && typeof v === 'object' && !Array.isArray(v);\n\nfunction safeJsonParse(text: string): unknown | undefined {\n const t = text.trim();\n if (!t) return undefined;\n if (!(t.startsWith('{') || t.startsWith('['))) return undefined;\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * 提取“嵌套 JSON 字符串”形态的上游错误信息。\n *\n * 典型示例(来自日志):\n * - Error.message 是 JSON 字符串(外层),其中 `error.message` 又是一段 JSON 字符串(内层 provider/router)。\n */\nexport function extractNestedProviderError(rawMessage: string): {\n outer?: unknown;\n inner?: unknown;\n innerType?: string;\n httpStatus?: number;\n innerMessage?: string;\n} {\n const outer = safeJsonParse(rawMessage);\n if (!isRecord(outer)) return {};\n\n const outerError = outer['error'];\n if (!isRecord(outerError)) return { outer };\n\n const innerMessageText = outerError['message'];\n if (typeof innerMessageText !== 'string') return { outer };\n\n const inner = safeJsonParse(innerMessageText);\n if (!isRecord(inner)) return { outer, inner: innerMessageText };\n\n const innerType = typeof inner['type'] === 'string' ? inner['type'] : undefined;\n const httpStatus = typeof inner['httpStatus'] === 'number' ? inner['httpStatus'] : undefined;\n const innerMessage = typeof inner['message'] === 'string' ? inner['message'] : undefined;\n\n return { outer, inner, innerType, httpStatus, innerMessage };\n}\n\nexport interface CreateRuntimeErrorEventInput {\n /**\n * 可选:由调用方提供稳定 id(例如 generateMessageId())。\n * 若不提供,工厂会生成一个临时 id。\n */\n id?: string;\n conversationId: string;\n turnId: string;\n error: unknown;\n /**\n * 事件来源,用于排查(不会直接展示给用户)。\n */\n source?: string;\n /**\n * 可选:覆盖 error_code(例如 SUMMARIZATION_FAILED)。\n */\n errorCode?: string;\n /**\n * 可选:覆盖 retryable。\n */\n retryable?: boolean;\n /**\n * 可选:覆盖 error 文本(默认使用原始 error.message)。\n * 注意:这不是“用户友好化文案”,只是允许在系统级错误里加上更明确的上下文前缀。\n */\n errorText?: string;\n /**\n * 可选:合并到 details 的附加字段(便于调用方补充上下文信息)。\n */\n detailsPatch?: Record<string, unknown>;\n}\n\n/**\n * 统一创建 RuntimeEvent(type='error')。\n *\n * 中文备注:\n * - `error` 字段保留原始 message(前端负责友好化);\n * - `error_code` 尽量稳定:优先上游结构化 type,否则 fallback 到分类结果;\n * - `retryable` 与 `details.classification` 使用同一份 classifier 输出,避免重复判断。\n */\nexport function createRuntimeErrorEvent(input: CreateRuntimeErrorEventInput): ErrorEvent {\n const rawMessage = input.error instanceof Error ? input.error.message : String(input.error);\n const errObj = input.error instanceof Error ? input.error : new Error(rawMessage);\n\n const nested = extractNestedProviderError(rawMessage);\n const classification = ErrorClassifier.classify(errObj, { logPrefix: '[RuntimeErrorEventFactory]' });\n\n const errorCodeComputed =\n (nested.innerType && nested.innerType.trim().length > 0 ? nested.innerType.trim() : undefined) ??\n (classification.errorCode && classification.errorCode.trim().length > 0\n ? classification.errorCode\n : undefined) ??\n ENGINE_ERROR_CODES.ENGINE_UNKNOWN;\n\n const errorTextComputed = rawMessage && rawMessage.trim().length > 0 ? rawMessage : 'Unknown error';\n const errorText = (input.errorText && input.errorText.trim().length > 0 ? input.errorText.trim() : undefined) ?? errorTextComputed;\n const errorCode = (input.errorCode && input.errorCode.trim().length > 0 ? input.errorCode.trim() : undefined) ?? errorCodeComputed;\n const retryable =\n typeof input.retryable === 'boolean' ? input.retryable : classification.recoverable;\n\n return createErrorEvent(\n // id 由调用方决定更灵活(这里用时间戳拼随机,避免引入 generateMessageId 依赖)\n (input.id && input.id.trim().length > 0 ? input.id.trim() : undefined) ?? `err_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,\n input.conversationId,\n input.turnId,\n errorText,\n {\n error_code: errorCode,\n retryable,\n details: {\n source: input.source,\n name: input.error instanceof Error ? input.error.name : undefined,\n stack: input.error instanceof Error ? input.error.stack : undefined,\n raw_message: rawMessage,\n nested,\n classification,\n ...(input.detailsPatch ? input.detailsPatch : {}),\n },\n }\n );\n}\n","/**\n * @file src/agent/runtime-kernel/llm/policies/policyEngine.ts\n *\n * @description\n * 统一的 LLM Policy Engine:\n * - 按 match 条件筛选 policies\n * - 固定调用点:beforeRequest / afterResponse / onError\n *\n * 主链路通过调用 PolicyEngine 达到“可扩展但不膨胀”的效果。\n */\n\nimport type {\n LLMPolicy,\n LLMPolicyMatchContext,\n LLMPolicyRequestContext,\n LLMPolicyResponseContext,\n LLMPolicyErrorDecision\n} from './types';\n\nexport class LLMPolicyEngine {\n private readonly policies: LLMPolicy[];\n\n constructor(policies: LLMPolicy[]) {\n this.policies = Array.isArray(policies) ? policies : [];\n }\n\n private matched(ctx: LLMPolicyMatchContext): LLMPolicy[] {\n return this.policies.filter(p => {\n try {\n return p.match(ctx);\n } catch {\n return false;\n }\n });\n }\n\n applyBeforeRequest(ctx: LLMPolicyRequestContext): { requestData: unknown; headers?: Record<string, string> } {\n const matched = this.matched(ctx);\n let requestData = ctx.requestData;\n let headers = ctx.headers;\n\n for (const p of matched) {\n if (!p.beforeRequest) continue;\n try {\n const out = p.beforeRequest({ ...ctx, requestData, headers });\n if (out?.requestData !== undefined) requestData = out.requestData;\n if (out?.headers !== undefined) headers = out.headers;\n } catch {\n // policy 不应影响主流程\n }\n }\n\n return { requestData, headers };\n }\n\n applyAfterResponse(ctx: LLMPolicyResponseContext): { responseData: unknown } {\n const matched = this.matched(ctx);\n let responseData = ctx.responseData;\n for (const p of matched) {\n if (!p.afterResponse) continue;\n try {\n const out = p.afterResponse({ ...ctx, responseData });\n if (out?.responseData !== undefined) responseData = out.responseData;\n } catch {\n // ignore\n }\n }\n return { responseData };\n }\n\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision {\n const matched = this.matched(ctx);\n for (const p of matched) {\n if (!p.onError) continue;\n try {\n const decision = p.onError(error, ctx);\n if (decision && decision.action !== 'none') return decision;\n } catch {\n // ignore\n }\n }\n return { action: 'none' };\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/policies/defaultPolicyEngine.ts\n *\n * @description\n * linnkit 的默认 PolicyEngine 不注册任何 provider/model 策略。\n *\n * provider 适配属于宿主集成层职责。宿主可以复用 `LLMPolicyEngine`\n * 并显式注入自己的 policies。\n */\n\nimport { LLMPolicyEngine } from './policyEngine';\n\nexport const defaultPolicyEngine = new LLMPolicyEngine([]);\n","import type { AgentAiEngine } from '../../ports';\nimport type { LlmRetryConfig } from './caller.types';\nimport type { LLMPolicyErrorDecision, LLMPolicyMatchContext } from './policies/types';\nimport type { ModelCatalogLike } from './modelCatalog';\nimport { ModelResolver, type ModelResolverLike } from './modelResolver';\nimport { defaultPolicyEngine } from './policies/defaultPolicyEngine';\n\nexport interface LlmCallerOptions {\n maxRetries?: number;\n enableEmptyResponseRetry?: boolean;\n retryDelayMs?: number;\n fallbackModelPreferredOrder?: readonly string[];\n modelResolver?: ModelResolverLike;\n modelCatalog?: ModelCatalogLike;\n policyEngine?: {\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision;\n };\n aiEngine: AgentAiEngine;\n}\n\nexport interface NormalizedLlmCallerDeps {\n retryConfig: LlmRetryConfig;\n modelResolver: ModelResolverLike;\n policyEngine: NonNullable<LlmCallerOptions['policyEngine']>;\n aiEngine: AgentAiEngine;\n}\n\nexport function isLlmCallerOptions(options: Partial<LlmRetryConfig> | LlmCallerOptions): options is LlmCallerOptions {\n return 'fallbackModelPreferredOrder' in options\n || 'modelResolver' in options\n || 'aiEngine' in options;\n}\n\nexport const createMissingAiEngine = (): AgentAiEngine => ({\n async chatCompletion(): Promise<never> {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n },\n async chatCompletionStream(): Promise<never> {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n },\n});\n\nexport function normalizeConstructorOptions(\n options?: Partial<LlmRetryConfig> | LlmCallerOptions,\n): LlmCallerOptions {\n if (!options) {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n }\n\n if (isLlmCallerOptions(options)) {\n return options;\n }\n\n return {\n ...options,\n aiEngine: createMissingAiEngine(),\n };\n}\n\nexport function buildLlmCallerDeps(\n options: LlmCallerOptions,\n fallbackModelCatalog: ModelCatalogLike,\n): NormalizedLlmCallerDeps {\n const modelCatalog = options.modelCatalog ?? fallbackModelCatalog;\n return {\n retryConfig: {\n maxRetries: options.maxRetries ?? 3,\n enableEmptyResponseRetry: options.enableEmptyResponseRetry ?? true,\n retryDelayMs: options.retryDelayMs ?? 1000,\n },\n modelResolver:\n options.modelResolver ??\n new ModelResolver({\n fallbackModelPreferredOrder: options.fallbackModelPreferredOrder,\n modelCatalog,\n }),\n policyEngine: options.policyEngine ?? defaultPolicyEngine,\n aiEngine: options.aiEngine,\n };\n}\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/toolCallStreamAccumulator.ts\n * @description\n * 流式 tool_calls 聚合器:把 ToolCallChunk[] 拼成稳定的 ToolCall[]。\n *\n * 说明:\n * - 该模块只做 tool_calls 的结构化聚合,不负责发送事件;\n * - 兼容 OpenAI 标准“arguments delta”与部分 OpenAI-compat 的异常形态(同 index 新 id、多顶层 JSON `}{` 等)。\n */\n\nimport { generateMessageId } from '../../../shared/ids';\nimport { splitConcatenatedJsonObjects, tryParseJsonRecord } from '../toolCallUtils';\nimport type { ToolCall, ToolCallChunk, ToolCallExtraContent } from '../caller.types';\n\nconst isToolCallChunk = (v: unknown): v is ToolCallChunk => {\n if (!v || typeof v !== 'object') return false;\n return 'index' in v;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeToolCallExtraContent(\n existing: ToolCallExtraContent | undefined,\n incoming: ToolCallExtraContent | undefined,\n): ToolCallExtraContent | undefined {\n if (!incoming) return existing;\n const merged: Record<string, unknown> = { ...(existing ?? {}) };\n\n for (const [namespace, incomingValue] of Object.entries(incoming)) {\n const existingValue = merged[namespace];\n merged[namespace] = isRecord(existingValue) && isRecord(incomingValue)\n ? { ...existingValue, ...incomingValue }\n : incomingValue;\n }\n\n return merged as ToolCallExtraContent;\n}\n\nexport class ToolCallStreamAccumulator {\n private toolCalls: ToolCall[] = [];\n private readonly emittedToolCallIds = new Set<string>();\n private readonly placeholderAllowlist: Set<string>;\n /**\n * 已发出的“可解析 args 快照”(按 tool_call_id 去重),用于避免 update 事件刷屏与 UI 抖动。\n *\n * 说明:\n * - 这里用“原始 JSON 字符串(trim 后)”作为快照指纹,比 JSON.stringify(object) 更稳定:\n * - 可保留模型/供应商的 key 顺序(避免 stringify 造成无意义 diff);\n * - 也能覆盖 “provider 直接发送完整 JSON snapshot” 的场景。\n */\n private readonly emittedArgsSnapshotByToolCallId = new Map<string, string>();\n private readonly lastArgsEmitAtByToolCallId = new Map<string, number>();\n\n constructor(placeholderToolAllowlist: Iterable<string>) {\n this.placeholderAllowlist = new Set<string>(placeholderToolAllowlist);\n }\n\n /**\n * @description\n * 在 tool_call id + name 都就绪时触发,用于上层发“占位 tool_process”。\n */\n private maybeEmitPlaceholder(toolCallId: string, toolName: string, onPlaceholder?: (toolCallId: string, toolName: string) => void): void {\n if (!onPlaceholder) return;\n if (!toolCallId || !toolName) return;\n if (!this.placeholderAllowlist.has(toolName)) return;\n if (this.emittedToolCallIds.has(toolCallId)) return;\n this.emittedToolCallIds.add(toolCallId);\n onPlaceholder(toolCallId, toolName);\n }\n\n /**\n * @description\n * 尝试在“arguments 已经是合法 JSON 对象”时发出 args 快照。\n *\n * 约束:\n * - 仅当 arguments 能 parse 成 Record 才触发(不做半吊子容错解析,避免补丁式行为);\n * - 默认做轻量节流(同一 tool_call_id 50ms 内最多 1 次),防止 provider 高频 snapshot 导致 UI 抖动。\n */\n private maybeEmitArgsSnapshot(\n toolCallId: string,\n toolName: string,\n rawArgsJson: string,\n onArgsSnapshot?: (toolCallId: string, toolName: string, args: Record<string, unknown>) => void\n ): void {\n if (!onArgsSnapshot) return;\n if (!toolCallId || !toolName) return;\n\n const now = Date.now();\n const lastAt = this.lastArgsEmitAtByToolCallId.get(toolCallId) ?? 0;\n if (now - lastAt < 50) return;\n\n const trimmed = rawArgsJson.trim();\n if (!trimmed) return;\n\n const prev = this.emittedArgsSnapshotByToolCallId.get(toolCallId);\n if (prev === trimmed) return;\n\n const parsed = tryParseJsonRecord(trimmed);\n if (!parsed.ok) return;\n\n this.emittedArgsSnapshotByToolCallId.set(toolCallId, trimmed);\n this.lastArgsEmitAtByToolCallId.set(toolCallId, now);\n onArgsSnapshot(toolCallId, toolName, parsed.value);\n }\n\n applyChunks(\n chunks: unknown[],\n onPlaceholder?: (toolCallId: string, toolName: string) => void,\n onArgsSnapshot?: (toolCallId: string, toolName: string, args: Record<string, unknown>) => void\n ): void {\n for (const toolCallChunk of chunks) {\n if (!isToolCallChunk(toolCallChunk)) continue;\n\n /**\n * OpenAI 标准:tool_calls[*].function.arguments 是“增量 delta”,可直接拼接。\n *\n * 但在部分 OpenAI-compat 供应商中,可能会出现以下异常流式形态:\n * - 同一 index 上出现“新的 tool_call id”(意味着其实是下一条 tool_call)\n * - arguments 在一个 index 上输出了多个完整 JSON 对象片段,导致拼接后出现 `}{`\n */\n let index = toolCallChunk.index;\n\n if (!this.toolCalls[index]) {\n this.toolCalls[index] = { id: '', type: 'function', function: { name: '', arguments: '' } };\n }\n\n if (toolCallChunk.id) {\n // 同一 index 出现“不同 id”:通常意味着 provider 把下一条 tool_call 仍标成旧 index。\n if (this.toolCalls[index].id && this.toolCalls[index].id !== toolCallChunk.id) {\n const nextIndex = this.toolCalls.length;\n this.toolCalls[nextIndex] = { id: toolCallChunk.id, type: 'function', function: { name: '', arguments: '' } };\n index = nextIndex;\n } else {\n this.toolCalls[index].id = toolCallChunk.id;\n }\n }\n\n // Provider replay sidecar:extra_content 是按 provider namespace 组织的不透明载荷。\n if (toolCallChunk.extra_content) {\n this.toolCalls[index].extra_content = mergeToolCallExtraContent(\n this.toolCalls[index].extra_content,\n toolCallChunk.extra_content,\n );\n }\n\n if (toolCallChunk.function?.name) {\n // 直接覆盖名称(OpenAI协议中名称通常一次性给出)\n this.toolCalls[index].function.name = toolCallChunk.function.name;\n }\n\n const readyId = this.toolCalls[index].id;\n const readyName = this.toolCalls[index].function.name;\n if (readyId && readyName) {\n this.maybeEmitPlaceholder(readyId, readyName, onPlaceholder);\n // 如果 provider 在“name/id 就绪”时就给出完整 JSON snapshot,可直接触发一次 update\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n\n if (toolCallChunk.function?.arguments) {\n const oldArgs = this.toolCalls[index].function.arguments;\n const newArgsChunk =\n typeof toolCallChunk.function.arguments === 'string'\n ? toolCallChunk.function.arguments\n : JSON.stringify(toolCallChunk.function.arguments);\n\n // 1) 若 newArgsChunk 自身是一个完整 JSON 对象,优先用“覆盖”语义(兼容非-delta 供应商)\n const newIsFullJson = tryParseJsonRecord(newArgsChunk.trim()).ok;\n const oldIsFullJson = tryParseJsonRecord(oldArgs.trim()).ok;\n\n if (newIsFullJson && (!oldArgs || !oldIsFullJson || newArgsChunk.trim().length >= oldArgs.trim().length)) {\n this.toolCalls[index].function.arguments = newArgsChunk;\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n continue;\n }\n\n // 2) 默认按 delta 追加\n const merged = oldArgs + newArgsChunk;\n\n // 3) 若拼接后出现多个顶层 JSON(典型表现为 `}{`),尝试拆分为多条 tool_call\n const pieces = splitConcatenatedJsonObjects(merged);\n if (pieces.length >= 2 && pieces.every(p => tryParseJsonRecord(p).ok)) {\n // 当前 index 保留第一段,其余段作为“后续 tool_call”追加\n this.toolCalls[index].function.arguments = pieces[0];\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n\n for (let pi = 1; pi < pieces.length; pi += 1) {\n const nextIndex = this.toolCalls.length;\n this.toolCalls[nextIndex] = {\n id: generateMessageId(),\n type: 'function',\n function: {\n name: this.toolCalls[index].function.name,\n arguments: pieces[pi]\n },\n // 仅透传一次 thought_signature(额外 tool_call 为兼容生成,不强行复制签名)\n extra_content: undefined\n };\n }\n continue;\n }\n\n this.toolCalls[index].function.arguments = merged;\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n }\n }\n }\n\n getToolCalls(): ToolCall[] {\n return this.toolCalls.filter(tc => tc && tc.function && tc.function.name);\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/markdownHeadingNormalizer.ts\n * @description\n * Markdown 增量拼接辅助:确保标题在流式 thought 拼接下仍能被正确识别。\n *\n * 背景:\n * - 模型在 thought 增量中可能突然输出 `### 标题` / `##标题`;\n * - 若前一段末尾没有换行,直接拼接会变成 `上一行内容### 标题`,markdown 解析不会识别为 heading。\n *\n * 策略(保守):\n * - 仅当 incoming 看起来是 heading 且 buffer 末尾不是换行时,补一个 `\\n`。\n * - 不改变非 heading 的增量,避免影响普通文本。\n */\n\nexport function normalizeThoughtDeltaForMarkdown(buffer: string, incoming: string): string {\n const chunk = String(incoming ?? '');\n if (!chunk) return chunk;\n if (!buffer) return chunk;\n\n // 已经在新行开始(或前面就是换行),无需处理\n if (buffer.endsWith('\\n')) return chunk;\n if (chunk.startsWith('\\n')) return chunk;\n\n // 识别 `### 标题` / `##标题`(不强制要求 # 后有空格)\n const looksLikeHeading = /^#{1,6}(?:\\s|[^\\s#])/.test(chunk);\n if (!looksLikeHeading) return chunk;\n\n return `\\n${chunk}`;\n}\n\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/thoughtStreamSegmenter.ts\n * @description\n * thought 流式段落管理(交错 thought 支持 + 精确计时)。\n *\n * 设计目标:\n * - 高内聚:只负责 thought 的“段落切分、缓冲、开始/结束锚点”;\n * - 低耦合:不直接发事件,由上层(LlmCaller)决定如何映射为 AnyAgentEvent。\n */\n\nimport { generateMessageId } from '../../../shared/ids';\nimport { normalizeThoughtDeltaForMarkdown } from './markdownHeadingNormalizer';\n\nexport type ThoughtDeltaEmission = {\n thoughtMessageId: string;\n timestamp: number;\n delta: string;\n thoughtStartedAt: number;\n};\n\nexport type ThoughtCompleteEmission = {\n thoughtMessageId: string;\n timestamp: number;\n content: string;\n thoughtStartedAt: number;\n thoughtCompletedAt: number;\n};\n\nexport class ThoughtStreamSegmenter {\n private currentThoughtMessageId: string | null = null;\n private currentThoughtBuffer = '';\n private thoughtStartedAt: number | null = null;\n private lastThoughtDeltaAt: number | null = null;\n private inAnswerPhase = false;\n\n private now(): number {\n return Date.now();\n }\n\n private beginIfNeeded(now: number): void {\n if (this.currentThoughtMessageId) return;\n this.currentThoughtMessageId = generateMessageId();\n this.currentThoughtBuffer = '';\n this.thoughtStartedAt = now;\n this.lastThoughtDeltaAt = now;\n }\n\n /**\n * @description\n * 当出现“答案内容 / 工具调用”等边界时调用:封口当前 thought 段落。\n * 注意:结束锚点取最后一次 thought delta 的时间(而不是下一个消息时间)。\n */\n onBoundary(): ThoughtCompleteEmission | null {\n if (!this.currentThoughtMessageId) {\n this.inAnswerPhase = true;\n return null;\n }\n this.inAnswerPhase = true;\n return this.finalizeIfNeeded();\n }\n\n onThoughtDelta(rawDelta: string): ThoughtDeltaEmission | null {\n const thought = String(rawDelta ?? '');\n if (!thought.trim()) return null;\n\n const now = this.now();\n\n // 交错 thought:如果已经进入答案阶段,则开启新段\n if (this.inAnswerPhase) {\n this.inAnswerPhase = false;\n }\n\n this.beginIfNeeded(now);\n this.lastThoughtDeltaAt = now;\n\n // 标题行修正:基于展示缓冲拼接\n const normalized = normalizeThoughtDeltaForMarkdown(this.currentThoughtBuffer, thought);\n this.currentThoughtBuffer += normalized;\n\n return {\n thoughtMessageId: this.currentThoughtMessageId ?? generateMessageId(),\n timestamp: now,\n delta: normalized,\n thoughtStartedAt: this.thoughtStartedAt ?? now,\n };\n }\n\n finalize(): ThoughtCompleteEmission | null {\n return this.finalizeIfNeeded();\n }\n\n private finalizeIfNeeded(): ThoughtCompleteEmission | null {\n if (!this.currentThoughtMessageId) return null;\n if (!this.currentThoughtBuffer.trim()) {\n this.reset();\n return null;\n }\n\n const startedAt = this.thoughtStartedAt ?? this.lastThoughtDeltaAt ?? this.now();\n const completedAt = this.lastThoughtDeltaAt ?? this.now();\n const thoughtMessageId = this.currentThoughtMessageId;\n const content = this.currentThoughtBuffer;\n\n this.reset();\n return {\n thoughtMessageId,\n timestamp: completedAt,\n content,\n thoughtStartedAt: startedAt,\n thoughtCompletedAt: completedAt,\n };\n }\n\n private reset(): void {\n this.currentThoughtMessageId = null;\n this.currentThoughtBuffer = '';\n this.thoughtStartedAt = null;\n this.lastThoughtDeltaAt = null;\n }\n}\n","import type { ToolCall } from './caller.types';\nimport { tryParseJsonRecord } from './toolCallUtils';\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst isToolCall = (value: unknown): value is ToolCall => {\n if (!isRecord(value)) return false;\n if (typeof value['id'] !== 'string') return false;\n if (value['type'] !== 'function') return false;\n const fn = value['function'];\n if (!isRecord(fn)) return false;\n return typeof fn['name'] === 'string' && typeof fn['arguments'] === 'string';\n};\n\nexport const toToolCalls = (value: unknown): ToolCall[] | undefined => {\n if (!Array.isArray(value)) return undefined;\n return value.filter(isToolCall);\n};\n\nfunction summarizeToolArguments(rawArguments: string): { length: number; head: string; tail: string } {\n const previewChars = 160;\n return {\n length: rawArguments.length,\n head: rawArguments.slice(0, previewChars),\n tail: rawArguments.slice(Math.max(0, rawArguments.length - previewChars)),\n };\n}\n\n/**\n * 流式工具调用回放守卫。\n *\n * 中文备注:\n * - 这里不尝试修复半截 JSON,因为那会把模型输出损坏伪装成合法工具调用;\n * - 抛错后由 retry/fallback 层决定是否重试或切模型。\n */\nexport function assertToolCallsHaveValidJsonArguments(toolCalls: ToolCall[]): void {\n for (const toolCall of toolCalls) {\n const rawArguments = toolCall.function.arguments;\n const parsed = tryParseJsonRecord(rawArguments.trim());\n if (parsed.ok) {\n continue;\n }\n\n const summary = summarizeToolArguments(rawArguments);\n const trimmed = rawArguments.trim();\n const endsWithClosingBrace = trimmed.endsWith('}');\n const startsWithOpeningBrace = trimmed.startsWith('{');\n const truncationHint = startsWithOpeningBrace && !endsWithClosingBrace\n ? '(疑似输出中途被截断,可能是 max_tokens 不足)'\n : '(非典型截断模式,需进一步排查)';\n\n throw new Error(\n [\n `[LlmCaller] Stream ended with invalid tool_call.arguments for ${toolCall.function.name} (${toolCall.id}).`,\n `length=${summary.length}`,\n `head=${summary.head}`,\n `tail=${summary.tail}`,\n truncationHint,\n ].join(' ')\n );\n }\n}\n","import type { AnyAgentEvent } from '../events/agentEvents';\nimport { generateMessageId } from '../../shared/ids';\nimport type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, LlmResponseContent } from './caller.types';\nimport { ToolCallStreamAccumulator } from './streaming/toolCallStreamAccumulator';\nimport { ThoughtStreamSegmenter } from './streaming/thoughtStreamSegmenter';\nimport { assertToolCallsHaveValidJsonArguments, isRecord } from './sidecar-replay';\nimport type { LlmCallResult } from './usage-telemetry';\n\nexport interface CallLlmStreamParams {\n aiEngine: AgentAiEngine;\n modelId: string;\n messages: LlmRequestMessage[];\n options?: LlmCallOptions;\n eventHandler: (event: AnyAgentEvent) => void;\n signal?: AbortSignal;\n}\n\nexport async function callLlmStream(params: CallLlmStreamParams): Promise<LlmCallResult> {\n const {\n aiEngine,\n modelId,\n messages,\n options = {},\n eventHandler,\n signal,\n } = params;\n\n let fullResponse = '';\n let streamError: Error | null = null;\n const reasoningDetails: unknown[] = [];\n const streamAnswerId = generateMessageId();\n let streamChunkSeq = 0;\n let capturedUsage: unknown | undefined = undefined;\n\n const toolAccumulator = new ToolCallStreamAccumulator([\n 'markdown_edit',\n 'text_to_image',\n 'ask_questions',\n 'ppt_plan',\n 'ppt_codegen',\n ]);\n const thoughtSegmenter = new ThoughtStreamSegmenter();\n\n const emitThoughtComplete = (completed: ReturnType<ThoughtStreamSegmenter['finalize']>): void => {\n if (!completed) return;\n eventHandler({\n type: 'thought',\n thought_message_id: completed.thoughtMessageId,\n id: generateMessageId(),\n timestamp: completed.timestamp,\n content: completed.content,\n is_complete: true,\n meta: {\n thought_started_at: completed.thoughtStartedAt,\n thought_completed_at: completed.thoughtCompletedAt,\n },\n });\n };\n\n const emitToolCallPlaceholder = (toolCallId: string, toolName: string): void => {\n if (!toolCallId || !toolName) return;\n eventHandler({\n type: 'tool_process',\n id: generateMessageId(),\n timestamp: Date.now(),\n tool_name: toolName,\n tool_args: {},\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n payload: { args: {} },\n meta: { ephemeral: true },\n });\n };\n\n const emitStreamChunk = (content: string): void => {\n eventHandler({\n type: 'stream_chunk',\n timestamp: Date.now(),\n content,\n id: generateMessageId(),\n answer_id: streamAnswerId,\n seq: streamChunkSeq++,\n });\n };\n\n const onContent = (chunk: string | LlmResponseContent): void => {\n if (typeof chunk === 'string') {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n fullResponse += chunk;\n emitStreamChunk(chunk);\n return;\n }\n\n if (typeof chunk !== 'object' || chunk === null) {\n return;\n }\n\n if (chunk.content) {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n fullResponse += chunk.content;\n emitStreamChunk(chunk.content);\n }\n\n const reasoning = isRecord(chunk) ? chunk['reasoning_details'] : undefined;\n if (reasoning !== undefined) {\n const newReasoningDetails = Array.isArray(reasoning) ? reasoning : [reasoning];\n reasoningDetails.push(...newReasoningDetails);\n eventHandler({\n type: 'provider_sidecar',\n id: generateMessageId(),\n timestamp: Date.now(),\n reasoning_details: newReasoningDetails,\n });\n }\n\n if (chunk.tool_calls) {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n toolAccumulator.applyChunks(\n chunk.tool_calls,\n emitToolCallPlaceholder,\n (toolCallId, toolName, args) => {\n eventHandler({\n type: 'tool_process',\n id: generateMessageId(),\n timestamp: Date.now(),\n tool_name: toolName,\n tool_args: args,\n tool_call_id: toolCallId,\n phase: 'update',\n status: 'loading',\n payload: { args },\n meta: { ephemeral: true },\n });\n },\n );\n }\n };\n\n const onError = (error: Error): void => {\n streamError = error;\n if (process.env.NODE_ENV !== 'production') {\n console.error('[LlmCaller][callStream] onError fired', {\n modelId,\n messageCount: Array.isArray(messages) ? messages.length : -1,\n errorMessage: error?.message,\n });\n }\n eventHandler({\n type: 'error',\n error: error.message,\n details: error.stack,\n timestamp: Date.now(),\n id: generateMessageId(),\n });\n };\n\n const onFinish = (_reason: string): void => {\n // onFinish 不发送事件,由 stream_end 信号处理。\n };\n\n const onThought = (thought: string): void => {\n const delta = thoughtSegmenter.onThoughtDelta(thought);\n if (!delta) return;\n\n eventHandler({\n type: 'thought',\n thought_message_id: delta.thoughtMessageId,\n id: generateMessageId(),\n timestamp: delta.timestamp,\n content: '',\n delta: delta.delta,\n is_complete: false,\n meta: {\n thought_started_at: delta.thoughtStartedAt,\n },\n });\n };\n\n const onUsage = (usage: unknown): void => {\n capturedUsage = usage;\n };\n\n await aiEngine.chatCompletionStream(\n modelId,\n messages,\n {\n ...options,\n signal,\n stream_options: { include_usage: true },\n },\n onContent,\n onError,\n onFinish,\n onThought,\n onUsage,\n );\n\n if (streamError) {\n throw streamError;\n }\n\n emitThoughtComplete(thoughtSegmenter.finalize());\n\n const mergedToolCalls = toolAccumulator.getToolCalls();\n assertToolCallsHaveValidJsonArguments(mergedToolCalls);\n if (mergedToolCalls.length > 0 || reasoningDetails.length > 0 || capturedUsage !== undefined) {\n return {\n content: fullResponse,\n tool_calls: mergedToolCalls,\n reasoning_details: reasoningDetails.length > 0 ? reasoningDetails : undefined,\n ...(capturedUsage !== undefined ? { usage: capturedUsage } : {}),\n };\n }\n\n return fullResponse;\n}\n","import { ErrorClassifier } from '../../shared/errorClassifier';\nimport type { LlmCallOptions } from './caller.types';\nimport type { RetryFallbackDeps } from './retry-fallback';\n\nexport function tryPolicyModelSwitch(\n deps: RetryFallbackDeps,\n activeModelId: string,\n excludedModelIds: Set<string>,\n error: Error,\n): string | null {\n const activeModelConfig = deps.modelCatalog.getModelById(activeModelId);\n const policyDecision = deps.policyEngine.decideOnError(error, {\n modelId: activeModelId,\n apiBase: activeModelConfig?.api_base,\n requestModelName: activeModelConfig?.model_name,\n });\n if (policyDecision.action !== 'switch_model') {\n return null;\n }\n\n const fallbackModelId = deps.modelResolver.pickFallbackChatModel(excludedModelIds);\n if (!fallbackModelId) {\n console.warn('[LlmCaller] 🧭 Policy要求切换模型,但未找到可用备用模型(可能未配置 API Key)');\n return null;\n }\n\n console.warn(`[LlmCaller] 🧭 Policy(${policyDecision.reason}),切换模型继续: ${activeModelId} -> ${fallbackModelId}`);\n return fallbackModelId;\n}\n\nexport function tryCloudQuotaFallback({\n deps,\n activeModelId,\n options,\n excludedModelIds,\n error,\n onCloudQuotaFallbackApplied,\n}: {\n deps: RetryFallbackDeps;\n activeModelId: string;\n options: LlmCallOptions;\n excludedModelIds: Set<string>;\n error: Error;\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void;\n}): string | null {\n const fallbackModelId = options.cloud_quota_fallback_model_id;\n if (\n !fallbackModelId ||\n !ErrorClassifier.isCloudQuotaError(error) ||\n excludedModelIds.has(fallbackModelId)\n ) {\n return null;\n }\n\n const fallbackConfig = deps.modelCatalog.getModelById(fallbackModelId);\n if (!fallbackConfig?.api_key) {\n console.warn(`[LlmCaller] ☁️ 云端限额降级目标不可用: ${fallbackModelId}(未注册或缺少 API Key)`);\n return null;\n }\n\n console.warn(`[LlmCaller] ☁️ 云端限额降级(run 内续跑): ${activeModelId} -> ${fallbackModelId}`, {\n reason: error.message,\n });\n onCloudQuotaFallbackApplied?.(fallbackModelId);\n return fallbackModelId;\n}\n","import type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, ToolCall } from './caller.types';\nimport { isRecord, toToolCalls } from './sidecar-replay';\n\nexport type LlmCallResult =\n | string\n | {\n content: string;\n tool_calls?: ToolCall[];\n reasoning_details?: unknown[];\n usage?: unknown;\n };\n\nexport async function callPlainCompletion(\n aiEngine: AgentAiEngine,\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n signal?: AbortSignal,\n): Promise<LlmCallResult> {\n const response = await aiEngine.chatCompletion(modelId, messages, { ...options, signal });\n return normalizeCompletionResponse(response);\n}\n\nexport function normalizeCompletionResponse(response: unknown): LlmCallResult {\n if (!response) {\n return String(response);\n }\n\n if (isRecord(response)) {\n const usage = response['usage'];\n const parsedToolCalls = toToolCalls(response['tool_calls']);\n if (parsedToolCalls) {\n const reasoningDetails = Array.isArray(response['reasoning_details'])\n ? response['reasoning_details']\n : undefined;\n return {\n content: typeof response['content'] === 'string' ? response['content'] : '',\n tool_calls: parsedToolCalls,\n reasoning_details: reasoningDetails,\n ...(usage !== undefined ? { usage } : {}),\n };\n }\n }\n\n if (typeof response === 'string') {\n return response;\n }\n\n if (typeof response === 'object') {\n if (isRecord(response) && (response['content'] !== undefined || response['reasoning_details'] !== undefined)) {\n const usage = response['usage'];\n return {\n content: typeof response['content'] === 'string' ? response['content'] : '',\n reasoning_details: Array.isArray(response['reasoning_details'])\n ? response['reasoning_details']\n : undefined,\n ...(usage !== undefined ? { usage } : {}),\n };\n }\n\n if (isRecord(response)) {\n const contentValue = response['content'];\n if (typeof contentValue === 'string') return contentValue;\n const textValue = response['text'];\n if (typeof textValue === 'string') return textValue;\n }\n\n return JSON.stringify(response);\n }\n\n return String(response);\n}\n\nexport function getLlmResultContent(result: LlmCallResult): string {\n return typeof result === 'object' ? result.content : result;\n}\n\nexport function getLlmResultToolCalls(result: LlmCallResult): ToolCall[] | undefined {\n return typeof result === 'object' ? result.tool_calls : undefined;\n}\n","import type { AnyAgentEvent, ErrorEvent as AgentErrorEvent } from '../events/agentEvents';\nimport { generateMessageId } from '../../shared/ids';\nimport { ErrorClassifier, ErrorCategory } from '../../shared/errorClassifier';\nimport type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, LlmRetryConfig } from './caller.types';\nimport type { LLMPolicyErrorDecision, LLMPolicyMatchContext } from './policies/types';\nimport type { ModelCatalogLike } from './modelCatalog';\nimport type { ModelResolverLike } from './modelResolver';\nimport { tryCloudQuotaFallback, tryPolicyModelSwitch } from './retry-fallback-routing';\nimport { callLlmStream } from './streaming-adapter';\nimport {\n callPlainCompletion,\n getLlmResultContent,\n getLlmResultToolCalls,\n type LlmCallResult,\n} from './usage-telemetry';\n\nexport interface RetryFallbackDeps {\n retryConfig: LlmRetryConfig;\n modelResolver: ModelResolverLike;\n modelCatalog: ModelCatalogLike;\n policyEngine: {\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision;\n };\n aiEngine: AgentAiEngine;\n}\n\nexport interface CallWithRetriesParams {\n deps: RetryFallbackDeps;\n modelId: string;\n messages: LlmRequestMessage[];\n options?: LlmCallOptions;\n eventHandler?: (event: AnyAgentEvent) => void;\n signal?: AbortSignal;\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void;\n onModelFallbackApplied?: (info: {\n fromModelId: string;\n toModelId: string;\n reason: string;\n policy: 'policy-switch' | 'cloud-quota';\n }) => void;\n}\n\nexport async function callWithRetryFallback(params: CallWithRetriesParams): Promise<LlmCallResult> {\n const {\n deps,\n modelId,\n messages,\n options = {},\n eventHandler,\n signal,\n onCloudQuotaFallbackApplied,\n onModelFallbackApplied,\n } = params;\n\n let lastError: Error | null = null;\n let actualAttempts = 0;\n let activeModelId = modelId;\n const excludedModelIds = new Set<string>([modelId]);\n const clientRetryEnabled = isClientRetryEnabledForModel(deps.modelCatalog, modelId, options);\n const configuredMaxRetries = deps.retryConfig.maxRetries;\n\n if (!clientRetryEnabled) {\n const activeCfg = deps.modelCatalog.getModelById(modelId);\n console.log('[LlmCaller] 🧾 默认禁用客户端重试(除非遇到本地纯网络错误)', {\n modelId,\n billing_mode: activeCfg?.billing_mode,\n reason: options.retry_policy === 'none' ? 'options.retry_policy=none' : 'model config (cloud billing or enable_client_retry=false)',\n });\n }\n\n for (let attempt = 0; attempt <= configuredMaxRetries; attempt++) {\n throwIfAborted(signal, '检测到取消信号,停止AI活动');\n\n const isRetry = attempt > 0;\n let pendingErrorEvent: AgentErrorEvent | null = null;\n const wrappedEventHandler = eventHandler\n ? createRetryAwareEventHandler(eventHandler, (evt) => {\n pendingErrorEvent = evt;\n }, attempt, () => activeModelId)\n : undefined;\n\n try {\n if (isRetry) {\n console.log(`[LlmCaller] 🔄 LLM调用 - 第 ${attempt} 次重试 (最大配置 ${configuredMaxRetries} 次)`);\n }\n\n actualAttempts++;\n const llmResponse = wrappedEventHandler\n ? await callLlmStream({\n aiEngine: deps.aiEngine,\n modelId: activeModelId,\n messages,\n options,\n eventHandler: wrappedEventHandler,\n signal,\n })\n : await callPlainCompletion(deps.aiEngine, activeModelId, messages, options, signal);\n\n const responseContent = getLlmResultContent(llmResponse);\n const toolCallsFromLLM = getLlmResultToolCalls(llmResponse);\n if (deps.retryConfig.enableEmptyResponseRetry && !responseContent?.trim() && !toolCallsFromLLM?.length) {\n throw new Error('LLM返回了空响应');\n }\n\n console.log(`[LlmCaller] ✅ LLM调用成功 (尝试 ${actualAttempts} 次)`);\n return llmResponse;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n const classification = ErrorClassifier.classify(lastError, { logPrefix: '[LlmCaller]' });\n let currentMaxRetries = clientRetryEnabled ? configuredMaxRetries : 0;\n\n if (!clientRetryEnabled && classification.category === ErrorCategory.RETRYABLE) {\n if (\n classification.reason.startsWith('网络错误') ||\n classification.reason === '空响应错误' ||\n classification.reason === '模型输出损坏: invalid tool_call.arguments'\n ) {\n console.log(`[LlmCaller] 🛟 云端模型检测到必须本地兜底的错误 (${classification.reason}),破例允许客户端重试`);\n currentMaxRetries = configuredMaxRetries;\n }\n }\n\n console.error(`[LlmCaller] ❌ LLM调用失败 (尝试 ${attempt + 1}/${currentMaxRetries + 1}):`, lastError.message);\n\n if (lastError.name === 'AbortError') {\n console.log('[LlmCaller] 🛑 收到 AbortError,直接向上抛出,不进入错误事件与重试流程');\n throw lastError;\n }\n\n const policySwitchModelId = tryPolicyModelSwitch(deps, activeModelId, excludedModelIds, lastError);\n if (policySwitchModelId) {\n onModelFallbackApplied?.({\n fromModelId: activeModelId,\n toModelId: policySwitchModelId,\n reason: lastError.message,\n policy: 'policy-switch',\n });\n activeModelId = policySwitchModelId;\n excludedModelIds.add(policySwitchModelId);\n attempt -= 1;\n continue;\n }\n\n const quotaFallbackModelId = tryCloudQuotaFallback({\n deps,\n activeModelId,\n options,\n excludedModelIds,\n error: lastError,\n onCloudQuotaFallbackApplied,\n });\n if (quotaFallbackModelId) {\n onModelFallbackApplied?.({\n fromModelId: activeModelId,\n toModelId: quotaFallbackModelId,\n reason: lastError.message,\n policy: 'cloud-quota',\n });\n activeModelId = quotaFallbackModelId;\n excludedModelIds.add(quotaFallbackModelId);\n attempt -= 1;\n continue;\n }\n\n if (classification.category === ErrorCategory.NON_RETRYABLE) {\n console.error(`[LlmCaller] 💥 错误不可重试,直接失败: ${classification.reason}`);\n emitFinalError(eventHandler, pendingErrorEvent, lastError);\n throw lastError;\n }\n\n if (attempt >= currentMaxRetries) {\n console.error(`[LlmCaller] 💥 已达到最大重试次数 (${currentMaxRetries}),放弃重试`);\n emitFinalError(eventHandler, pendingErrorEvent, lastError);\n throw lastError;\n }\n\n const retryDelay = ErrorClassifier.calculateRetryDelay(\n lastError,\n attempt,\n deps.retryConfig.retryDelayMs,\n 60000,\n );\n if (classification.category === ErrorCategory.RATE_LIMIT) {\n console.log(`[LlmCaller] ⏱️ 速率限制错误,延迟 ${retryDelay}ms 后重试 (${classification.reason})`);\n } else if (classification.category === ErrorCategory.RETRYABLE) {\n console.log(`[LlmCaller] 🔄 可重试错误,延迟 ${retryDelay}ms 后重试 (${classification.reason})`);\n }\n\n throwIfAborted(signal, '延迟等待前检测到取消信号,停止重试');\n if (retryDelay > 0) {\n await new Promise(resolve => setTimeout(resolve, retryDelay));\n }\n }\n }\n\n throw lastError || new Error('LLM调用在所有重试后都失败了');\n}\n\nfunction isClientRetryEnabledForModel(\n modelCatalog: ModelCatalogLike,\n modelId: string,\n options: LlmCallOptions,\n): boolean {\n if (options.retry_policy === 'none') return false;\n if (options.retry_policy === 'client') return true;\n\n const cfg = modelCatalog.getModelById(modelId);\n if (!cfg) return true;\n if (cfg.billing_mode === 'cloud') {\n return cfg.enable_client_retry === true;\n }\n if (cfg.enable_client_retry === false) return false;\n return true;\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined, message: string): void {\n if (!signal?.aborted) return;\n console.log(`[LlmCaller] 🛑 ${message}`);\n const cancelError = new Error('Request cancelled by user');\n cancelError.name = 'AbortError';\n throw cancelError;\n}\n\nfunction createRetryAwareEventHandler(\n eventHandler: (event: AnyAgentEvent) => void,\n setPendingErrorEvent: (event: AgentErrorEvent) => void,\n attempt: number,\n getActiveModelId: () => string,\n): (event: AnyAgentEvent) => void {\n return (evt: AnyAgentEvent) => {\n if (evt && typeof evt === 'object' && evt.type === 'error') {\n setPendingErrorEvent(evt);\n if (process.env.NODE_ENV !== 'production') {\n const rec = evt as { id?: unknown; error?: unknown; timestamp?: unknown };\n console.warn('[LlmCaller][callWithRetries] captured pending error event (will only forward if final failure)', {\n attempt,\n modelId: getActiveModelId(),\n eventId: typeof rec.id === 'string' ? rec.id : undefined,\n error: typeof rec.error === 'string' ? rec.error : undefined,\n timestamp: typeof rec.timestamp === 'number' ? rec.timestamp : undefined,\n });\n }\n return;\n }\n eventHandler(evt);\n };\n}\n\nfunction emitFinalError(\n eventHandler: ((event: AnyAgentEvent) => void) | undefined,\n pendingErrorEvent: AgentErrorEvent | null,\n error: Error,\n): void {\n if (!eventHandler) return;\n eventHandler(pendingErrorEvent ?? {\n type: 'error',\n id: generateMessageId(),\n timestamp: Date.now(),\n error: error.message,\n details: error.stack,\n });\n}\n","/**\n * @file src/agent/runtime-kernel/llm/caller.ts\n *\n * @brief LLM 调用器 - 统一管理 LLM 调用、流式适配与重试编排\n *\n * @description\n * 这个文件只保留 orchestrator 职责:\n * - 构造依赖;\n * - 暴露 call / callStream / callWithRetries 公共方法;\n * - 把具体实现委托给 request-builder / streaming-adapter / retry-fallback 等模块。\n */\n\nimport type { AnyAgentEvent } from '../events/agentEvents';\nimport type { LlmCallOptions, LlmRequestMessage, LlmRetryConfig, ToolCall } from './caller.types';\nimport { createEmptyModelCatalog, type ModelCatalogLike } from './modelCatalog';\nimport type { ModelResolverLike } from './modelResolver';\nimport {\n buildLlmCallerDeps,\n normalizeConstructorOptions,\n type LlmCallerOptions,\n type NormalizedLlmCallerDeps,\n} from './request-builder';\nimport { callLlmStream } from './streaming-adapter';\nimport { callWithRetryFallback } from './retry-fallback';\nimport { callPlainCompletion, type LlmCallResult } from './usage-telemetry';\n\nexport type { LlmCallOptions, LlmRequestMessage, LlmResponseContent, LlmRetryConfig, ToolCall } from './caller.types';\nexport type { LlmCallerOptions } from './request-builder';\n\n/**\n * LLM 调用器。\n *\n * 中文备注:\n * - 具体策略实现拆到同目录小模块,避免 caller.ts 再次膨胀;\n * - public method 签名保持原样,保护现有 host / testkit 调用方。\n */\nexport class LlmCaller {\n private readonly deps: NormalizedLlmCallerDeps & {\n modelCatalog: ModelCatalogLike;\n };\n private readonly modelResolver: ModelResolverLike;\n\n constructor(options?: Partial<LlmRetryConfig> | LlmCallerOptions) {\n const normalizedOptions = normalizeConstructorOptions(options);\n const modelCatalog = normalizedOptions.modelCatalog ?? createEmptyModelCatalog();\n const deps = buildLlmCallerDeps(normalizedOptions, modelCatalog);\n this.deps = {\n ...deps,\n modelCatalog,\n };\n this.modelResolver = deps.modelResolver;\n }\n\n /**\n * 非流式 LLM 调用。\n */\n async call(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n signal?: AbortSignal,\n ): Promise<LlmCallResult> {\n return callPlainCompletion(this.deps.aiEngine, modelId, messages, options, signal);\n }\n\n /**\n * 流式 LLM 调用。\n */\n async callStream(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n eventHandler: (event: AnyAgentEvent) => void,\n signal?: AbortSignal,\n ): Promise<LlmCallResult> {\n return callLlmStream({\n aiEngine: this.deps.aiEngine,\n modelId,\n messages,\n options,\n eventHandler,\n signal,\n });\n }\n\n /**\n * 带智能重试和模型降级的 LLM 调用。\n */\n async callWithRetries(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n eventHandler?: (event: AnyAgentEvent) => void,\n signal?: AbortSignal,\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void,\n onModelFallbackApplied?: (info: {\n fromModelId: string;\n toModelId: string;\n reason: string;\n policy: 'policy-switch' | 'cloud-quota';\n }) => void,\n ): Promise<LlmCallResult> {\n return callWithRetryFallback({\n deps: this.deps,\n modelId,\n messages,\n options,\n eventHandler,\n signal,\n onCloudQuotaFallbackApplied,\n onModelFallbackApplied,\n });\n }\n\n /**\n * 获取或使用默认模型 ID。\n */\n resolveModelId(requestedModelId?: string): string {\n return this.modelResolver.resolveModelId(requestedModelId);\n }\n}\n","export { MemoryRunRegistryStore } from './memoryRunRegistryStore';\nexport { DefaultRunHandle, runMetaFromRecord } from './runHandle';\nexport { DefaultRunSupervisor } from './runSupervisor';\nexport { NotImplementedError, RunAlreadyRegisteredError, RunNotFoundError } from './runErrors';\n\nexport type {\n ListRunsFilter,\n RunRecord,\n RunRegistryStore,\n RunStatus,\n} from './runRegistryStorePort';\nexport type {\n CancelOpts,\n DefaultRunHandleOptions,\n RunAwaitingUserPatch,\n RunCost,\n RunCostCollector,\n RunFailureInfo,\n RunHandle,\n RunLifecyclePatch,\n RunMeta,\n RunObserveFilter,\n RunRequestSnapshot,\n} from './runHandle';\nexport type {\n DefaultRunSupervisorOptions,\n FindActiveByConversationOptions,\n RunExecutionContext,\n RunExecutorPort,\n RunOutcome,\n RunRegistrationSpec,\n RunSnapshot,\n RunSupervisor,\n RunTerminalError,\n RunTerminalEvent,\n RunTerminalStatus,\n RunWaitForTerminalOptions,\n} from './runSupervisor';\n","import type { ListRunsFilter, RunRecord, RunRegistryStore, RunStatus } from './runRegistryStorePort';\n\nfunction cloneRunRecord(record: RunRecord): RunRecord {\n return {\n ...record,\n iterationBudget: record.iterationBudget ? { ...record.iterationBudget } : undefined,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: record.metadata ? { ...record.metadata } : undefined,\n };\n}\n\nfunction matchesStatus(candidate: RunStatus, filter: ListRunsFilter['status']): boolean {\n if (filter === undefined) {\n return true;\n }\n if (Array.isArray(filter)) {\n return filter.includes(candidate);\n }\n return candidate === filter;\n}\n\nexport class MemoryRunRegistryStore implements RunRegistryStore {\n private readonly store = new Map<string, RunRecord>();\n\n async save(record: RunRecord): Promise<void> {\n this.store.set(record.runId, cloneRunRecord(record));\n }\n\n async load(runId: string): Promise<RunRecord | null> {\n const record = this.store.get(runId);\n return record ? cloneRunRecord(record) : null;\n }\n\n async list(filter: ListRunsFilter = {}): Promise<{ runs: RunRecord[]; nextCursor?: string }> {\n const sorted = Array.from(this.store.values())\n .filter((record) => matchesStatus(record.status, filter.status))\n .filter((record) => (filter.parentRunId === undefined ? true : record.parentRunId === filter.parentRunId))\n .filter((record) => (filter.agentSpecId === undefined ? true : record.agentSpecId === filter.agentSpecId))\n .filter((record) => (filter.startedAfter === undefined ? true : record.startedAt > filter.startedAfter))\n .filter((record) => (filter.startedBefore === undefined ? true : record.startedAt < filter.startedBefore))\n .sort((left, right) => right.startedAt - left.startedAt || right.updatedAt - left.updatedAt);\n\n const offset = filter.cursor ? Number.parseInt(filter.cursor, 10) : 0;\n const page = filter.limit === undefined ? sorted.slice(offset) : sorted.slice(offset, offset + filter.limit);\n const nextOffset = filter.limit === undefined ? undefined : offset + page.length;\n const nextCursor =\n nextOffset !== undefined && nextOffset < sorted.length ? String(nextOffset) : undefined;\n\n return {\n runs: page.map(cloneRunRecord),\n nextCursor,\n };\n }\n\n async delete(runId: string): Promise<void> {\n this.store.delete(runId);\n }\n}\n","import { createAuditEnvelopeEvent } from '../../contracts';\nimport type { AuditEnvelope } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeEventId } from '../../shared/ids';\nimport type { EventStore } from '../graph-engine/event-store/base';\n\nexport interface EventStoreAuditOptions {\n eventStore: EventStore;\n}\n\nexport class AuditEnvelopePersistenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AuditEnvelopePersistenceError';\n }\n}\n\nfunction resolveConversationId(envelope: AuditEnvelope): string {\n const conversationId = envelope.scope?.conversationId;\n if (typeof conversationId === 'string' && conversationId.trim().length > 0) {\n return conversationId;\n }\n throw new AuditEnvelopePersistenceError(\n `AuditEnvelope ${envelope.envelopeId} cannot be persisted without scope.conversationId`,\n );\n}\n\nfunction resolveTurnId(envelope: AuditEnvelope): string {\n const turnId = envelope.scope?.turnId;\n if (typeof turnId === 'string' && turnId.trim().length > 0) {\n return turnId;\n }\n return envelope.runId;\n}\n\n/**\n * 默认 EventStore 审计 sink。\n *\n * 中文备注:\n * - 写入隐藏 RuntimeEvent:type=audit_envelope;\n * - 事件不进 UI、不进 agent context,只作为追加只读审计事实保留;\n * - conversationId 必须来自 envelope.scope,避免把跨会话审计混进同一条流。\n */\nexport class EventStoreAuditPort implements AuditPort {\n private readonly eventStore: EventStore;\n\n constructor(options: EventStoreAuditOptions) {\n this.eventStore = options.eventStore;\n }\n\n async emit(envelope: AuditEnvelope): Promise<void> {\n const conversationId = resolveConversationId(envelope);\n const turnId = resolveTurnId(envelope);\n const event = createAuditEnvelopeEvent(\n generateAuditEnvelopeEventId(),\n conversationId,\n turnId,\n envelope,\n );\n\n await this.eventStore.append(conversationId, {\n eventId: event.id,\n timestamp: event.timestamp,\n conversationId,\n runId: envelope.runId,\n event,\n });\n }\n}\n\nexport function createEventStoreAudit(options: EventStoreAuditOptions): AuditPort {\n return new EventStoreAuditPort(options);\n}\n","export class NotImplementedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotImplementedError';\n }\n}\n\nexport class RunNotFoundError extends Error {\n constructor(runId: string) {\n super(`Run not found: ${runId}`);\n this.name = 'RunNotFoundError';\n }\n}\n\nexport class RunAlreadyRegisteredError extends Error {\n readonly runId: string;\n\n constructor(runId: string) {\n super(`RunSupervisor: run ${runId} is already registered`);\n this.name = 'RunAlreadyRegisteredError';\n this.runId = runId;\n }\n}\n","import { AgentSpec as AgentSpecSchema } from '../../contracts';\nimport type { AgentSpec, EventEnvelope, RuntimeEvent } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeId } from '../../shared/ids';\nimport type { EventBus } from '../execution/event-bus';\nimport type { EventStore, PersistedEvent } from '../graph-engine/event-store/base';\nimport { createEventStoreAudit } from '../audit/eventStoreAudit';\nimport { NotImplementedError } from './runErrors';\nimport type { RunRecord, RunRegistryStore, RunStatus } from './runRegistryStorePort';\n\nexport type RunRequestSnapshot = Readonly<object>;\n\nexport interface CancelOpts {\n reason: string;\n forceCleanup?: boolean;\n timeout?: number;\n}\n\nexport interface RunCost {\n tokensInput: number;\n tokensOutput: number;\n totalCostUsd?: number;\n latencyMs?: number;\n childrenTotal?: RunCost;\n}\n\nexport interface RunCostCollector {\n snapshot(runId: string): RunCost | Promise<RunCost>;\n}\n\nexport interface RunLifecyclePatch {\n currentNode?: string;\n iterationsUsed?: number;\n}\n\nexport interface RunAwaitingUserPatch extends RunLifecyclePatch {\n reason?: string;\n eventId?: string;\n}\n\nexport interface RunFailureInfo {\n errorCode: string;\n message: string;\n recoverable: boolean;\n}\n\nexport interface RunMeta {\n runId: string;\n parentRunId?: string;\n agentSpecId?: string;\n conversationId: string;\n status: RunStatus;\n currentNode?: string;\n startedAt: number;\n updatedAt: number;\n pausedAt?: number;\n pauseReason?: string;\n iterationsUsed?: number;\n errorIfAny?: { errorCode: string; message: string; recoverable: boolean };\n}\n\nexport interface RunObserveFilter {\n /** RuntimeEvent 使用 type 作为主判别字段;保留 kinds 只是为了贴近 N-3 草案措辞。 */\n types?: RuntimeEvent['type'][];\n kinds?: RuntimeEvent['type'][];\n includePersisted?: boolean;\n}\n\nexport interface RunHandle<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n readonly runId: string;\n readonly parentRunId?: string;\n readonly signal: AbortSignal;\n spec(): Promise<AgentSpec>;\n request(): Promise<TRequest>;\n cancel(opts: CancelOpts): Promise<void>;\n observe(filter?: RunObserveFilter): AsyncIterable<RuntimeEvent>;\n cost(): Promise<RunCost>;\n meta(): Promise<RunMeta>;\n markRunning(patch?: RunLifecyclePatch): Promise<void>;\n markAwaitingUser(patch?: RunAwaitingUserPatch): Promise<void>;\n markCompleted(patch?: RunLifecyclePatch): Promise<void>;\n markFailed(error: RunFailureInfo, patch?: RunLifecyclePatch): Promise<void>;\n pause(reason?: string): Promise<never>;\n resume(): Promise<never>;\n}\n\nexport interface DefaultRunHandleOptions<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runRecord: RunRecord;\n abortController: AbortController;\n agentSpec: AgentSpec;\n request: TRequest;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n registryStore: RunRegistryStore;\n auditPort?: AuditPort;\n onCancelled?: (runId: string, opts: CancelOpts) => void;\n}\n\ntype EventQueueState = {\n queue: RuntimeEvent[];\n closed: boolean;\n error: Error | null;\n wake: (() => void) | null;\n};\n\nfunction cloneRequest<TRequest extends RunRequestSnapshot>(request: TRequest): TRequest {\n return structuredClone(request);\n}\n\nfunction cloneRuntimeEvent(event: RuntimeEvent): RuntimeEvent {\n return structuredClone(event);\n}\n\nfunction runRecordToMeta(record: RunRecord): RunMeta {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readStringField(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction getRunIdFromMetadata(event: RuntimeEvent): string | undefined {\n const metadata = event.metadata;\n if (!metadata) {\n return undefined;\n }\n\n const camelCaseRunId = readStringField(metadata, 'runId');\n if (camelCaseRunId) {\n return camelCaseRunId;\n }\n\n const snakeCaseRunId = readStringField(metadata, 'run_id');\n if (snakeCaseRunId) {\n return snakeCaseRunId;\n }\n\n // 有些 host 会把 run id 写进 metadata.run_context.runId;persisted replay 必须识别这个真实形状。\n const runContext = metadata['run_context'];\n if (isRecord(runContext)) {\n return readStringField(runContext, 'runId') ?? readStringField(runContext, 'run_id');\n }\n\n return undefined;\n}\n\nfunction matchesPersistedRunId(runId: string, event: PersistedEvent): boolean {\n return event.runId === runId || getRunIdFromMetadata(event.event) === runId;\n}\n\nfunction matchesEventType(event: RuntimeEvent, filter?: RunObserveFilter): boolean {\n const selectedTypes = filter?.types ?? filter?.kinds;\n return selectedTypes === undefined || selectedTypes.includes(event.type);\n}\n\nasync function waitForEventQueue(state: EventQueueState): Promise<void> {\n await new Promise<void>((resolve) => {\n state.wake = resolve;\n });\n state.wake = null;\n}\n\n/**\n * RunHandle 的默认实现只编织现有机制:\n * - cancel 只触发 AbortController,不改 GraphExecutor;\n * - observe 只包装 EventBus/EventStore;\n * - cost 只读取外部注入的 CostCollector。\n */\nexport class DefaultRunHandle<TRequest extends RunRequestSnapshot = RunRequestSnapshot>\n implements RunHandle<TRequest>\n{\n readonly runId: string;\n readonly parentRunId?: string;\n readonly signal: AbortSignal;\n\n private runRecord: RunRecord;\n private readonly abortController: AbortController;\n private readonly agentSpecSnapshot: AgentSpec;\n private readonly requestSnapshot: TRequest;\n private readonly eventBus: EventBus;\n private readonly eventStore: EventStore;\n private readonly costCollector: RunCostCollector;\n private readonly registryStore: RunRegistryStore;\n private readonly auditPort: AuditPort;\n private readonly onCancelled?: (runId: string, opts: CancelOpts) => void;\n\n constructor(options: DefaultRunHandleOptions<TRequest>) {\n this.runRecord = { ...options.runRecord };\n this.runId = options.runRecord.runId;\n this.parentRunId = options.runRecord.parentRunId;\n this.abortController = options.abortController;\n this.signal = options.abortController.signal;\n this.agentSpecSnapshot = AgentSpecSchema.parse(structuredClone(options.agentSpec));\n this.requestSnapshot = cloneRequest(options.request);\n this.eventBus = options.eventBus;\n this.eventStore = options.eventStore;\n this.costCollector = options.costCollector;\n this.registryStore = options.registryStore;\n this.auditPort = options.auditPort ?? createEventStoreAudit({ eventStore: options.eventStore });\n this.onCancelled = options.onCancelled;\n }\n\n async spec(): Promise<AgentSpec> {\n return AgentSpecSchema.parse(structuredClone(this.agentSpecSnapshot));\n }\n\n async request(): Promise<TRequest> {\n return cloneRequest(this.requestSnapshot);\n }\n\n async cancel(opts: CancelOpts): Promise<void> {\n this.abortController.abort(opts.reason);\n\n const latestRecord = await this.registryStore.load(this.runId);\n const nextRecord: RunRecord = {\n ...(latestRecord ?? this.runRecord),\n status: 'cancelled',\n updatedAt: Date.now(),\n errorIfAny: {\n errorCode: 'RUN_CANCELLED',\n message: opts.reason,\n recoverable: false,\n },\n metadata: {\n ...((latestRecord ?? this.runRecord).metadata ?? {}),\n cancel: {\n reason: opts.reason,\n forceCleanup: opts.forceCleanup ?? false,\n timeout: opts.timeout,\n },\n },\n };\n\n await this.registryStore.save(nextRecord);\n this.runRecord = { ...nextRecord };\n await this.auditPort.emit({\n envelopeId: generateAuditEnvelopeId(),\n runId: this.runId,\n parentRunId: this.parentRunId,\n ts: Date.now(),\n actor: { kind: 'host' },\n action: 'run.cancel',\n decision: {\n outcome: 'cancelled',\n reason: opts.reason,\n metadata: {\n forceCleanup: opts.forceCleanup ?? false,\n ...(opts.timeout === undefined ? {} : { timeout: opts.timeout }),\n },\n },\n evidence: [\n {\n kind: 'cancel_request',\n summary: opts.reason,\n },\n ],\n scope: {\n conversationId: nextRecord.conversationId,\n runId: this.runId,\n parentRunId: this.parentRunId,\n agentSpecId: nextRecord.agentSpecId,\n },\n });\n this.onCancelled?.(this.runId, opts);\n }\n\n async *observe(filter: RunObserveFilter = {}): AsyncIterable<RuntimeEvent> {\n if (filter.includePersisted) {\n const persistedEvents = await this.eventStore.range(this.runRecord.conversationId);\n for (const persistedEvent of persistedEvents) {\n if (matchesPersistedRunId(this.runId, persistedEvent) && matchesEventType(persistedEvent.event, filter)) {\n yield cloneRuntimeEvent(persistedEvent.event);\n }\n }\n }\n\n const state: EventQueueState = {\n queue: [],\n closed: false,\n error: null,\n wake: null,\n };\n\n const wake = (): void => {\n state.wake?.();\n };\n const onEvent = (envelope: EventEnvelope<RuntimeEvent>): void => {\n if (matchesEventType(envelope.payload, filter)) {\n state.queue.push(cloneRuntimeEvent(envelope.payload));\n wake();\n }\n };\n const onError = (error: Error): void => {\n state.error = error;\n wake();\n };\n const onClose = (): void => {\n state.closed = true;\n wake();\n };\n\n this.eventBus.on('event', onEvent);\n this.eventBus.on('error', onError);\n this.eventBus.on('close', onClose);\n\n try {\n while (!state.closed || state.queue.length > 0) {\n if (state.error) {\n throw state.error;\n }\n const nextEvent = state.queue.shift();\n if (nextEvent) {\n yield nextEvent;\n continue;\n }\n await waitForEventQueue(state);\n }\n } finally {\n this.eventBus.off('event', onEvent);\n this.eventBus.off('error', onError);\n this.eventBus.off('close', onClose);\n }\n }\n\n async cost(): Promise<RunCost> {\n return this.costCollector.snapshot(this.runId);\n }\n\n async meta(): Promise<RunMeta> {\n const latestRecord = await this.registryStore.load(this.runId);\n if (latestRecord) {\n this.runRecord = { ...latestRecord };\n }\n return runRecordToMeta(latestRecord ?? this.runRecord);\n }\n\n async markRunning(patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('running', patch);\n }\n\n async markAwaitingUser(patch: RunAwaitingUserPatch = {}): Promise<void> {\n await this.saveLifecycleStatus('awaiting_user', patch);\n }\n\n async markCompleted(patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('completed', patch);\n }\n\n async markFailed(error: RunFailureInfo, patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('failed', patch, error);\n }\n\n async pause(_reason?: string): Promise<never> {\n throw new NotImplementedError('RunHandle.pause is N-3.B; not implemented in N-3.A');\n }\n\n async resume(): Promise<never> {\n throw new NotImplementedError('RunHandle.resume is N-3.B; not implemented in N-3.A');\n }\n\n private async saveLifecycleStatus(\n status: Extract<RunStatus, 'running' | 'awaiting_user' | 'completed' | 'failed'>,\n patch: RunLifecyclePatch | RunAwaitingUserPatch,\n errorIfAny?: RunFailureInfo,\n ): Promise<void> {\n const latestRecord = await this.registryStore.load(this.runId);\n const baseRecord = latestRecord ?? this.runRecord;\n const awaitingUserPatch = status === 'awaiting_user' ? patch as RunAwaitingUserPatch : undefined;\n const updatedAt = Date.now();\n const nextRecord: RunRecord = {\n ...baseRecord,\n status,\n updatedAt,\n currentNode: patch.currentNode ?? baseRecord.currentNode,\n iterationsUsed: patch.iterationsUsed ?? baseRecord.iterationsUsed,\n pauseReason: status === 'awaiting_user' ? awaitingUserPatch?.reason ?? baseRecord.pauseReason : undefined,\n pausedAt: status === 'awaiting_user' ? updatedAt : undefined,\n errorIfAny,\n metadata: awaitingUserPatch?.eventId\n ? {\n ...(baseRecord.metadata ?? {}),\n awaitingUser: {\n eventId: awaitingUserPatch.eventId,\n reason: awaitingUserPatch.reason,\n },\n }\n : baseRecord.metadata,\n };\n\n await this.registryStore.save(nextRecord);\n this.runRecord = { ...nextRecord };\n }\n}\n\nexport function runMetaFromRecord(record: RunRecord): RunMeta {\n return runRecordToMeta(record);\n}\n","import type { AgentSpec, EventEnvelope, RuntimeEvent } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateRunId } from '../../shared/ids';\nimport type { EventBus } from '../execution/event-bus';\nimport type { EventStore } from '../graph-engine/event-store/base';\nimport { DefaultRunHandle } from './runHandle';\nimport type {\n CancelOpts,\n RunAwaitingUserPatch,\n RunCostCollector,\n RunHandle,\n RunMeta,\n RunObserveFilter,\n RunRequestSnapshot,\n} from './runHandle';\nimport { NotImplementedError, RunAlreadyRegisteredError, RunNotFoundError } from './runErrors';\nimport type { ListRunsFilter, RunRecord, RunRegistryStore } from './runRegistryStorePort';\n\nexport type RunTerminalStatus = Extract<RunRecord['status'], 'completed' | 'failed' | 'cancelled'>;\n\nexport type RunTerminalError = {\n errorCode: string;\n message: string;\n recoverable: boolean;\n};\n\nexport interface RunOutcome {\n runId: string;\n status: RunTerminalStatus;\n completedAt: number;\n currentNode?: string;\n iterationsUsed?: number;\n error?: RunTerminalError;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunSnapshot extends RunMeta {\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunTerminalEvent {\n runId: string;\n status: RunTerminalStatus;\n outcome: RunOutcome;\n}\n\nexport interface RunWaitForTerminalOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface FindActiveByConversationOptions {\n includeChildren?: boolean;\n agentSpecId?: string;\n}\n\nexport interface RunExecutionContext<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runId: string;\n parentRunId?: string;\n conversationId: string;\n agentSpec: AgentSpec;\n request: TRequest;\n signal: AbortSignal;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n query?: string;\n contextFences?: readonly unknown[];\n wakeSource?: string;\n ephemeral?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunExecutorPort<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n execute(context: RunExecutionContext<TRequest>): Promise<RunOutcome | void>;\n}\n\nexport interface RunRegistrationSpec<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runId?: string;\n parentRunId?: string;\n parentSignal?: AbortSignal;\n conversationId: string;\n agentSpec: AgentSpec;\n request: TRequest;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n iterationBudget?: RunRecord['iterationBudget'];\n query?: string;\n contextFences?: readonly unknown[];\n wakeSource?: string;\n ephemeral?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunSupervisor<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n registerRun(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>>;\n spawnDetached(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>>;\n observeRun(runId: string, filter?: RunObserveFilter): AsyncIterable<RuntimeEvent>;\n cancel(runId: string, opts: CancelOpts): Promise<void>;\n markAwaitingUser(runId: string, patch?: RunAwaitingUserPatch): Promise<void>;\n list(filter?: ListRunsFilter): Promise<{ runs: RunMeta[]; nextCursor?: string }>;\n peek(runId: string): Promise<RunMeta | null>;\n waitForTerminal(runId: string, opts?: RunWaitForTerminalOptions): Promise<RunOutcome>;\n findActiveByConversation(\n conversationId: string,\n opts?: FindActiveByConversationOptions,\n ): Promise<RunSnapshot[]>;\n drain(opts?: RunWaitForTerminalOptions): Promise<RunOutcome[]>;\n recoverOnBoot(reason?: string): Promise<RunOutcome[]>;\n pause(runId: string, reason?: string): Promise<never>;\n resume(runId: string): Promise<never>;\n runTree(rootRunId: string): Promise<never>;\n handleFailure(runId: string, error: unknown): Promise<never>;\n}\n\nexport interface DefaultRunSupervisorOptions<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n registryStore: RunRegistryStore;\n auditPort?: AuditPort;\n executor?: RunExecutorPort<TRequest>;\n runIdFactory?: () => string;\n now?: () => number;\n}\n\ntype TerminalWaiter = {\n resolve: (outcome: RunOutcome) => void;\n reject: (error: Error) => void;\n cleanup: () => void;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readStringField(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readRunIdFromRuntimeEvent(event: RuntimeEvent): string | undefined {\n const metadata = event.metadata;\n if (!metadata) {\n return undefined;\n }\n\n const directRunId = readStringField(metadata, 'runId') ?? readStringField(metadata, 'run_id');\n if (directRunId) {\n return directRunId;\n }\n\n const runContext = metadata['run_context'];\n if (!isRecord(runContext)) {\n return undefined;\n }\n\n return readStringField(runContext, 'runId') ?? readStringField(runContext, 'run_id');\n}\n\nfunction readAwaitingUserReason(event: RuntimeEvent): string | undefined {\n if (event.type !== 'requires_user_interaction') {\n return undefined;\n }\n\n if (typeof event.prompt === 'string' && event.prompt.trim().length > 0) {\n return event.prompt;\n }\n\n if (isRecord(event.form)) {\n const prompt = readStringField(event.form, 'prompt');\n if (prompt && prompt.trim().length > 0) {\n return prompt;\n }\n }\n\n return undefined;\n}\n\nfunction isTerminalStatus(status: RunRecord['status']): status is RunTerminalStatus {\n return status === 'completed' || status === 'failed' || status === 'cancelled';\n}\n\nfunction isActiveStatus(status: RunRecord['status']): boolean {\n return status === 'pending' || status === 'running' || status === 'awaiting_user' || status === 'paused';\n}\n\nfunction cloneMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n return metadata ? { ...metadata } : undefined;\n}\n\nfunction recordToSnapshot(record: RunRecord): RunSnapshot {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: cloneMetadata(record.metadata),\n };\n}\n\nfunction recordToTerminalOutcome(record: RunRecord, completedAt: number): RunOutcome {\n return {\n runId: record.runId,\n status: isTerminalStatus(record.status) ? record.status : 'failed',\n completedAt,\n currentNode: record.currentNode,\n iterationsUsed: record.iterationsUsed,\n error: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: cloneMetadata(record.metadata),\n };\n}\n\nfunction errorToTerminalError(error: unknown): RunTerminalError {\n if (error instanceof Error) {\n return {\n errorCode: error.name === 'AbortError' ? 'RUN_CANCELLED' : 'RUN_FAILED',\n message: error.message,\n recoverable: false,\n };\n }\n return {\n errorCode: 'RUN_FAILED',\n message: String(error),\n recoverable: false,\n };\n}\n\nexport class DefaultRunSupervisor<TRequest extends RunRequestSnapshot = RunRequestSnapshot>\n implements RunSupervisor<TRequest>\n{\n private readonly registryStore: RunRegistryStore;\n private readonly auditPort?: AuditPort;\n private readonly executor?: RunExecutorPort<TRequest>;\n private readonly runIdFactory: () => string;\n private readonly now: () => number;\n private readonly handles = new Map<string, RunHandle<TRequest>>();\n private readonly controllers = new Map<string, AbortController>();\n private readonly inFlight = new Map<string, Promise<RunOutcome>>();\n private readonly terminalOutcomes = new Map<string, RunOutcome>();\n private readonly terminalWaiters = new Map<string, Set<TerminalWaiter>>();\n\n constructor(options: DefaultRunSupervisorOptions<TRequest>) {\n this.registryStore = options.registryStore;\n this.auditPort = options.auditPort;\n this.executor = options.executor;\n this.runIdFactory = options.runIdFactory ?? generateRunId;\n this.now = options.now ?? (() => Date.now());\n }\n\n async registerRun(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>> {\n const runId = spec.runId ?? this.runIdFactory();\n if (this.handles.has(runId) || (await this.registryStore.load(runId))) {\n throw new RunAlreadyRegisteredError(runId);\n }\n\n const startedAt = this.now();\n const controller = new AbortController();\n if (spec.parentSignal) {\n if (spec.parentSignal.aborted) {\n controller.abort(spec.parentSignal.reason);\n } else {\n spec.parentSignal.addEventListener('abort', () => {\n controller.abort(spec.parentSignal?.reason);\n }, { once: true });\n }\n }\n\n const record: RunRecord = {\n runId,\n conversationId: spec.conversationId,\n parentRunId: spec.parentRunId,\n agentSpecId: spec.agentSpec.id,\n status: 'pending',\n startedAt,\n updatedAt: startedAt,\n iterationBudget: spec.iterationBudget ? { ...spec.iterationBudget } : undefined,\n metadata: spec.metadata ? { ...spec.metadata } : undefined,\n };\n\n await this.registryStore.save(record);\n\n const handle = new DefaultRunHandle<TRequest>({\n runRecord: record,\n abortController: controller,\n agentSpec: spec.agentSpec,\n request: spec.request,\n eventBus: spec.eventBus,\n eventStore: spec.eventStore,\n costCollector: spec.costCollector,\n registryStore: this.registryStore,\n auditPort: this.auditPort,\n onCancelled: (cancelledRunId) => {\n this.handles.delete(cancelledRunId);\n this.controllers.delete(cancelledRunId);\n void this.registryStore.load(cancelledRunId).then((cancelledRecord) => {\n if (cancelledRecord?.status === 'cancelled') {\n this.notifyTerminalWaiters(recordToTerminalOutcome(cancelledRecord, this.now()));\n }\n });\n },\n });\n\n this.handles.set(runId, handle);\n this.controllers.set(runId, controller);\n this.watchAwaitingUserEvents(spec.eventBus, handle);\n return handle;\n }\n\n async spawnDetached(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>> {\n if (!this.executor) {\n throw new NotImplementedError('RunSupervisor.spawnDetached requires a RunExecutorPort');\n }\n\n const handle = await this.registerRun(spec);\n const execution = this.executeDetachedRun(handle, spec);\n this.inFlight.set(handle.runId, execution);\n void execution.finally(() => {\n this.inFlight.delete(handle.runId);\n });\n return handle;\n }\n\n async *observeRun(runId: string, filter?: RunObserveFilter): AsyncIterable<RuntimeEvent> {\n const handle = this.getHandle(runId);\n yield* handle.observe(filter);\n }\n\n async cancel(runId: string, opts: CancelOpts): Promise<void> {\n await this.getHandle(runId).cancel(opts);\n const record = await this.registryStore.load(runId);\n if (record?.status === 'cancelled') {\n this.notifyTerminalWaiters(recordToTerminalOutcome(record, this.now()));\n }\n }\n\n async markAwaitingUser(runId: string, patch: RunAwaitingUserPatch = {}): Promise<void> {\n await this.getHandle(runId).markAwaitingUser(patch);\n }\n\n async list(filter?: ListRunsFilter): Promise<{ runs: RunMeta[]; nextCursor?: string }> {\n const result = await this.registryStore.list(filter);\n return {\n runs: result.runs.map((record) => this.toRunMeta(record)),\n nextCursor: result.nextCursor,\n };\n }\n\n async peek(runId: string): Promise<RunMeta | null> {\n const record = await this.registryStore.load(runId);\n return record ? this.toRunMeta(record) : null;\n }\n\n async waitForTerminal(runId: string, opts: RunWaitForTerminalOptions = {}): Promise<RunOutcome> {\n const cachedOutcome = this.terminalOutcomes.get(runId);\n if (cachedOutcome) {\n return { ...cachedOutcome, metadata: cloneMetadata(cachedOutcome.metadata) };\n }\n\n const record = await this.registryStore.load(runId);\n if (!record) {\n throw new RunNotFoundError(runId);\n }\n if (isTerminalStatus(record.status)) {\n return recordToTerminalOutcome(record, this.now());\n }\n\n return new Promise<RunOutcome>((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const waiters = this.getTerminalWaiters(runId);\n const waiter: TerminalWaiter = {\n resolve: (outcome) => {\n waiter.cleanup();\n resolve({ ...outcome, metadata: cloneMetadata(outcome.metadata) });\n },\n reject: (error) => {\n waiter.cleanup();\n reject(error);\n },\n cleanup: () => {\n waiters.delete(waiter);\n if (timeout) {\n clearTimeout(timeout);\n }\n opts.signal?.removeEventListener('abort', onAbort);\n },\n };\n const onAbort = (): void => {\n waiter.reject(new Error(`waitForTerminal aborted for run ${runId}`));\n };\n if (opts.signal?.aborted) {\n onAbort();\n return;\n }\n opts.signal?.addEventListener('abort', onAbort, { once: true });\n if (opts.timeoutMs !== undefined) {\n timeout = setTimeout(() => {\n waiter.reject(new Error(`waitForTerminal timed out for run ${runId}`));\n }, opts.timeoutMs);\n }\n waiters.add(waiter);\n });\n }\n\n async findActiveByConversation(\n conversationId: string,\n opts: FindActiveByConversationOptions = {},\n ): Promise<RunSnapshot[]> {\n const result = await this.registryStore.list({\n status: ['pending', 'running', 'awaiting_user', 'paused'],\n agentSpecId: opts.agentSpecId,\n });\n return result.runs\n .filter((record) => record.conversationId === conversationId)\n .filter((record) => opts.includeChildren === true || record.parentRunId === undefined)\n .map(recordToSnapshot);\n }\n\n async drain(opts: RunWaitForTerminalOptions = {}): Promise<RunOutcome[]> {\n const runIds = Array.from(this.inFlight.keys());\n return Promise.all(runIds.map((runId) => this.waitForTerminal(runId, opts)));\n }\n\n async recoverOnBoot(reason = 'process restarted before run reached terminal status'): Promise<RunOutcome[]> {\n const result = await this.registryStore.list({\n status: ['pending', 'running', 'awaiting_user', 'paused'],\n });\n const outcomes: RunOutcome[] = [];\n for (const record of result.runs) {\n const updatedAt = this.now();\n const nextRecord: RunRecord = {\n ...record,\n status: 'failed',\n updatedAt,\n errorIfAny: {\n errorCode: 'RUN_ABANDONED',\n message: reason,\n recoverable: true,\n },\n metadata: {\n ...(record.metadata ?? {}),\n recovery: {\n reason,\n recoveredAt: updatedAt,\n },\n },\n };\n await this.registryStore.save(nextRecord);\n const outcome = recordToTerminalOutcome(nextRecord, updatedAt);\n this.terminalOutcomes.set(record.runId, outcome);\n this.notifyTerminalWaiters(outcome);\n outcomes.push(outcome);\n }\n return outcomes;\n }\n\n async pause(_runId: string, _reason?: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.pause is N-3.B; not implemented in N-3.A');\n }\n\n async resume(_runId: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.resume is N-3.B; not implemented in N-3.A');\n }\n\n async runTree(_rootRunId: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.runTree is N-3.B; not implemented in N-3.A');\n }\n\n async handleFailure(_runId: string, _error: unknown): Promise<never> {\n throw new NotImplementedError('RunSupervisor.handleFailure is N-3.B; not implemented in N-3.A');\n }\n\n private async executeDetachedRun(\n handle: RunHandle<TRequest>,\n spec: RunRegistrationSpec<TRequest>,\n ): Promise<RunOutcome> {\n if (!this.executor) {\n throw new NotImplementedError('RunSupervisor.spawnDetached requires a RunExecutorPort');\n }\n\n try {\n await handle.markRunning({ currentNode: 'detached' });\n const executorOutcome = await this.executor.execute({\n runId: handle.runId,\n parentRunId: spec.parentRunId,\n conversationId: spec.conversationId,\n agentSpec: spec.agentSpec,\n request: spec.request,\n signal: handle.signal,\n eventBus: spec.eventBus,\n eventStore: spec.eventStore,\n costCollector: spec.costCollector,\n query: spec.query,\n contextFences: spec.contextFences,\n wakeSource: spec.wakeSource,\n ephemeral: spec.ephemeral,\n metadata: spec.metadata,\n });\n const outcome = await this.persistExecutorOutcome(handle, executorOutcome);\n this.notifyTerminalWaiters(outcome);\n return outcome;\n } catch (error) {\n const terminalError = errorToTerminalError(error);\n if (terminalError.errorCode === 'RUN_CANCELLED' || handle.signal.aborted) {\n await handle.cancel({\n reason: terminalError.message || 'detached run aborted',\n forceCleanup: true,\n });\n } else {\n await handle.markFailed(terminalError);\n }\n const record = await this.registryStore.load(handle.runId);\n const outcome = recordToTerminalOutcome(record ?? {\n runId: handle.runId,\n parentRunId: handle.parentRunId,\n conversationId: spec.conversationId,\n agentSpecId: spec.agentSpec.id,\n status: terminalError.errorCode === 'RUN_CANCELLED' ? 'cancelled' : 'failed',\n startedAt: this.now(),\n updatedAt: this.now(),\n errorIfAny: terminalError,\n }, this.now());\n this.terminalOutcomes.set(handle.runId, outcome);\n this.notifyTerminalWaiters(outcome);\n return outcome;\n }\n }\n\n private async persistExecutorOutcome(\n handle: RunHandle<TRequest>,\n executorOutcome: RunOutcome | void,\n ): Promise<RunOutcome> {\n if (!executorOutcome || executorOutcome.status === 'completed') {\n await handle.markCompleted({\n currentNode: executorOutcome?.currentNode,\n iterationsUsed: executorOutcome?.iterationsUsed,\n });\n } else if (executorOutcome.status === 'cancelled') {\n await handle.cancel({\n reason: executorOutcome.error?.message ?? 'detached run cancelled',\n forceCleanup: true,\n });\n } else {\n await handle.markFailed(executorOutcome.error ?? {\n errorCode: 'RUN_FAILED',\n message: 'detached run failed',\n recoverable: false,\n }, {\n currentNode: executorOutcome.currentNode,\n iterationsUsed: executorOutcome.iterationsUsed,\n });\n }\n\n const loadedRecord = await this.registryStore.load(handle.runId);\n const record = loadedRecord && executorOutcome?.metadata\n ? {\n ...loadedRecord,\n metadata: {\n ...(loadedRecord.metadata ?? {}),\n ...executorOutcome.metadata,\n },\n }\n : loadedRecord;\n if (record && executorOutcome?.metadata) {\n await this.registryStore.save(record);\n }\n const completedAt = executorOutcome?.completedAt ?? this.now();\n const outcome = recordToTerminalOutcome(record ?? {\n runId: handle.runId,\n parentRunId: handle.parentRunId,\n conversationId: '',\n status: executorOutcome?.status ?? 'completed',\n startedAt: completedAt,\n updatedAt: completedAt,\n }, completedAt);\n const nextOutcome: RunOutcome = {\n ...outcome,\n metadata: {\n ...(outcome.metadata ?? {}),\n ...(executorOutcome?.metadata ?? {}),\n },\n };\n this.terminalOutcomes.set(handle.runId, nextOutcome);\n return nextOutcome;\n }\n\n private getTerminalWaiters(runId: string): Set<TerminalWaiter> {\n const waiters = this.terminalWaiters.get(runId);\n if (waiters) {\n return waiters;\n }\n const created = new Set<TerminalWaiter>();\n this.terminalWaiters.set(runId, created);\n return created;\n }\n\n private notifyTerminalWaiters(outcome: RunOutcome): void {\n this.terminalOutcomes.set(outcome.runId, outcome);\n const waiters = this.terminalWaiters.get(outcome.runId);\n if (!waiters) {\n return;\n }\n for (const waiter of Array.from(waiters)) {\n waiter.resolve(outcome);\n }\n this.terminalWaiters.delete(outcome.runId);\n }\n\n private getHandle(runId: string): RunHandle<TRequest> {\n const handle = this.handles.get(runId);\n if (!handle) {\n throw new RunNotFoundError(runId);\n }\n return handle;\n }\n\n private watchAwaitingUserEvents(eventBus: EventBus, handle: RunHandle<TRequest>): void {\n const onEvent = (envelope: EventEnvelope<RuntimeEvent>): void => {\n const event = envelope.payload;\n if (event.type !== 'requires_user_interaction') {\n return;\n }\n\n const eventRunId = readRunIdFromRuntimeEvent(event);\n if (eventRunId !== handle.runId) {\n return;\n }\n\n // EventBus 是同步通知模型;生命周期写入异步执行,避免阻塞事件分发链路。\n void handle.markAwaitingUser({\n currentNode: 'wait_user',\n eventId: event.id,\n reason: readAwaitingUserReason(event),\n }).catch((error: unknown) => {\n console.warn('[RunSupervisor] failed to mark awaiting_user from requires_user_interaction', error);\n });\n };\n const onClose = (): void => {\n eventBus.off('event', onEvent);\n eventBus.off('close', onClose);\n };\n\n eventBus.on('event', onEvent);\n eventBus.on('close', onClose);\n }\n\n private toRunMeta(record: RunRecord): RunMeta {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n };\n }\n}\n","import type { AuditEnvelope } from '../../contracts';\nimport type { AuditPort } from '../../ports';\n\nexport interface ConsoleAuditOptions {\n sink?: Pick<Console, 'info'>;\n}\n\nexport function createConsoleAudit(options: ConsoleAuditOptions = {}): AuditPort {\n const sink = options.sink ?? console;\n return {\n emit(envelope: AuditEnvelope): void {\n sink.info('[linnkit:audit]', envelope);\n },\n };\n}\n\nexport const consoleAudit = createConsoleAudit();\n","import { GraphExecutor } from '../graph-engine/engine';\nimport { MemoryCheckpointer } from '../graph-engine/checkpointer/memoryCheckpointer';\nimport type { Checkpointer } from '../graph-engine/checkpointer/base';\nimport { AnswerNode } from '../graph-engine/nodes/answerNode';\nimport { ToolNode } from '../graph-engine/nodes/toolNode';\nimport { UserNode } from '../graph-engine/nodes/userNode';\nimport { WaitUserNode } from '../graph-engine/nodes/waitUserNode';\nimport type { GraphNode } from '../graph-engine/types';\nimport type { ObservationPreviewPort, ToolRuntimePort } from '../tools';\nimport type { AuditPort } from '../../ports';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\n\nexport interface DefaultGraphExecutorOptions {\n llmNode: GraphNode;\n toolRuntime: ToolRuntimePort;\n observationPreview: ObservationPreviewPort;\n maxSteps?: number;\n checkpointer?: Checkpointer;\n auditPort?: AuditPort;\n telemetryPort?: TelemetryPort;\n}\n\nexport function createDefaultGraphExecutor(\n options: DefaultGraphExecutorOptions,\n): GraphExecutor {\n const executor = new GraphExecutor(\n options.checkpointer ?? new MemoryCheckpointer(),\n { maxSteps: options.maxSteps ?? 8 },\n );\n executor.registerNode(new UserNode());\n executor.registerNode(options.llmNode);\n executor.registerNode(new ToolNode({\n toolRuntime: options.toolRuntime,\n observationPreview: options.observationPreview,\n auditPort: options.auditPort,\n telemetryPort: options.telemetryPort,\n }));\n executor.registerNode(new AnswerNode());\n executor.registerNode(new WaitUserNode({ auditPort: options.auditPort }));\n return executor;\n}\n","import type {\n GraphExecutorContextBuildInput,\n GraphExecutorContextBuildOutput,\n GraphExecutorContextBuilder,\n} from '../runtime-kernel';\nimport type { LlmRequestMessage } from '../ports';\nimport type { RuntimeEvent } from '../contracts';\nimport type { DefinedAgent } from './types';\n\nfunction runtimeEventToMessage(event: RuntimeEvent): LlmRequestMessage | undefined {\n switch (event.type) {\n case 'user_input':\n return { role: 'user', content: event.content };\n case 'final_answer':\n return { role: 'assistant', content: event.content };\n case 'tool_output':\n if (typeof event.tool_call_id === 'string') {\n return {\n role: 'tool',\n tool_call_id: event.tool_call_id,\n content: typeof event.output === 'string' ? event.output : JSON.stringify(event.output ?? event.payload ?? {}),\n };\n }\n return undefined;\n default:\n return undefined;\n }\n}\n\n/**\n * Quickstart 专用 context builder。\n *\n * 中文备注:\n * - 只覆盖 hello-agent 级别的 system + history + current user input;\n * - 生产 host 仍应接 `context-manager` 的 AgentMessageOrchestrator。\n */\nexport class QuickstartContextBuilder implements GraphExecutorContextBuilder {\n private readonly agent: DefinedAgent;\n\n constructor(agent: DefinedAgent) {\n this.agent = agent;\n }\n\n async build(input: GraphExecutorContextBuildInput): Promise<GraphExecutorContextBuildOutput> {\n const historyMessages = input.history\n .map(runtimeEventToMessage)\n .filter((message): message is LlmRequestMessage => message !== undefined);\n\n return {\n mode: 'agent',\n llmMessages: [\n { role: 'system', content: this.agent.systemPrompt },\n ...historyMessages,\n { role: 'user', content: input.request.query },\n ],\n summaryEvents: [],\n contextTrace: {\n kind: 'quickstart_context_trace',\n agentId: this.agent.spec.id,\n messageCount: historyMessages.length + 2,\n },\n };\n }\n}\n","import type {\n BaseTool,\n OpenAIToolSchema,\n ToolArgs,\n ToolExecutionContext,\n ToolExecutionResult,\n ToolRuntimeDefinition,\n} from '../runtime-kernel';\nimport type { QuickstartToolRuntime } from './types';\nimport { serializeToolParameters } from './toolSchema';\n\nfunction stringifyToolOutput(output: string): string {\n return output;\n}\n\nexport class QuickstartMemoryToolRuntime implements QuickstartToolRuntime {\n private readonly tools = new Map<string, BaseTool<ToolArgs, string>>();\n\n constructor(tools: readonly BaseTool<ToolArgs, string>[] = []) {\n for (const tool of tools) {\n if (this.tools.has(tool.name)) {\n throw new Error(`[linnkit] duplicate tool registered: ${tool.name}`);\n }\n this.tools.set(tool.name, tool);\n }\n }\n\n getToolSchemas(toolNames?: string[]): OpenAIToolSchema[] {\n const allowed = Array.isArray(toolNames) && toolNames.length > 0\n ? new Set(toolNames)\n : undefined;\n\n return [...this.tools.values()]\n .filter((tool) => !allowed || allowed.has(tool.name))\n .map((tool) => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: serializeToolParameters(tool.parameters),\n },\n }));\n }\n\n getToolDefinition(toolName: string): ToolRuntimeDefinition | undefined {\n const tool = this.tools.get(toolName);\n if (!tool) return undefined;\n return {\n parameters: tool.parameters,\n displayOptions: tool.displayOptions,\n idempotency: tool.idempotency,\n };\n }\n\n getDisplayOptions(toolName: string): BaseTool<ToolArgs, string>['displayOptions'] | undefined {\n return this.tools.get(toolName)?.displayOptions;\n }\n\n async executeTool(\n toolName: string,\n args: ToolArgs,\n context: ToolExecutionContext,\n ): Promise<ToolExecutionResult> {\n const tool = this.tools.get(toolName);\n const startedAt = Date.now();\n if (!tool) {\n return {\n success: false,\n error: `Unknown tool: ${toolName}`,\n errorKind: 'execution',\n durationMs: Date.now() - startedAt,\n };\n }\n\n try {\n const result = await tool.run(args, context);\n return {\n success: true,\n result: stringifyToolOutput(result),\n durationMs: Date.now() - startedAt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n errorKind: 'execution',\n durationMs: Date.now() - startedAt,\n };\n }\n }\n}\n","import type { runSupervisor, telemetry } from '../runtime-kernel';\n\ntype RunCost = runSupervisor.RunCost;\ntype RunCostCollector = runSupervisor.RunCostCollector;\ntype TelemetryEvent = telemetry.TelemetryEvent;\ntype TelemetryPort = telemetry.TelemetryPort;\n\ninterface CostBucket {\n tokensInput: number;\n tokensOutput: number;\n latencyMs: number;\n}\n\nfunction emptyCost(): RunCost {\n return { tokensInput: 0, tokensOutput: 0, latencyMs: 0 };\n}\n\nexport class QuickstartRunCostCollector implements RunCostCollector {\n private readonly buckets = new Map<string, CostBucket>();\n\n ingest(event: TelemetryEvent): void {\n if (event.kind !== 'llm_call') return;\n const runId = event.scope.runId ?? event.scope.turnId;\n if (!runId) return;\n\n const bucket = this.buckets.get(runId) ?? { tokensInput: 0, tokensOutput: 0, latencyMs: 0 };\n bucket.tokensInput += event.usage?.promptTokens ?? 0;\n bucket.tokensOutput += event.usage?.completionTokens ?? 0;\n bucket.latencyMs += event.durationMs;\n this.buckets.set(runId, bucket);\n }\n\n snapshot(runId: string): RunCost {\n const bucket = this.buckets.get(runId);\n if (!bucket) return emptyCost();\n return {\n tokensInput: bucket.tokensInput,\n tokensOutput: bucket.tokensOutput,\n latencyMs: bucket.latencyMs,\n };\n }\n}\n\nexport function createQuickstartTelemetryPort(\n collector: QuickstartRunCostCollector,\n): TelemetryPort {\n return {\n emit(event: TelemetryEvent): void {\n collector.ingest(event);\n },\n };\n}\n","import {\n createFinalAnswerChunkEvent,\n createUserInputEvent,\n type RuntimeEvent,\n} from '../contracts';\nimport { generateMessageId, generateRunId } from '../shared/ids';\nimport {\n GraphAgentExecutor,\n LlmCaller,\n LlmNode,\n MemoryCheckpointer,\n type ObservationPreviewPort,\n type ToolExecutionContext,\n createDefaultGraphExecutor,\n execution,\n graph,\n runSupervisor,\n} from '../runtime-kernel';\nimport type { DefinedAgent, RunAgentOptions, RunAgentResult } from './types';\nimport { QuickstartContextBuilder } from './contextBuilder';\nimport { QuickstartMemoryToolRuntime } from './toolRuntime';\nimport {\n QuickstartRunCostCollector,\n createQuickstartTelemetryPort,\n} from './runCost';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction resolveModelId(agent: DefinedAgent, options: RunAgentOptions): string {\n const modelId = readString(options.modelId) ?? readString(agent.modelId);\n if (!modelId) {\n throw new Error('[linnkit] runAgent requires modelId. Pass opts.modelId or defineAgent({ modelId }).');\n }\n return modelId;\n}\n\ninterface QuickstartStreamChunkEvent {\n type: 'stream_chunk';\n content: string;\n answer_id?: string;\n seq?: number;\n}\n\nfunction isQuickstartStreamChunkEvent(value: unknown): value is QuickstartStreamChunkEvent {\n return isRecord(value) && value.type === 'stream_chunk' && typeof value.content === 'string';\n}\n\nfunction createNoopObservationPreview(): ObservationPreviewPort {\n return {\n async truncateObservation(params) {\n return { truncated: false, preview: params.text };\n },\n };\n}\n\nfunction buildChunkRuntimeEvent(params: {\n event: QuickstartStreamChunkEvent;\n conversationId: string;\n turnId: string;\n}): RuntimeEvent[] {\n const content = params.event.content;\n if (!content) return [];\n const answerId = readString(params.event.answer_id) ?? `answer_${params.turnId}`;\n const seq = Number.isInteger(params.event.seq) ? Number(params.event.seq) : 0;\n return [\n createFinalAnswerChunkEvent(\n generateMessageId(),\n params.conversationId,\n params.turnId,\n answerId,\n seq,\n content,\n {\n ephemeral: true,\n metadata: {\n run_context: { runId: params.turnId },\n },\n },\n ),\n ];\n}\n\nfunction readFinalAnswer(events: RuntimeEvent[], checkpointLocal: unknown): string {\n const finalAnswerEvent = [...events].reverse().find((event) => event.type === 'final_answer');\n if (finalAnswerEvent?.type === 'final_answer') {\n return finalAnswerEvent.content;\n }\n\n const chunks = events\n .filter((event): event is Extract<RuntimeEvent, { type: 'final_answer_chunk' }> =>\n event.type === 'final_answer_chunk')\n .sort((a, b) => a.seq - b.seq)\n .map((event) => event.content);\n if (chunks.length > 0) {\n return chunks.join('');\n }\n\n if (isRecord(checkpointLocal)) {\n const finalAnswer = checkpointLocal['finalAnswer'];\n if (typeof finalAnswer === 'string') {\n return finalAnswer;\n }\n }\n\n return '';\n}\n\nfunction readContextTrace(checkpointLocal: unknown): unknown {\n if (!isRecord(checkpointLocal)) return undefined;\n return checkpointLocal['contextTrace'];\n}\n\nasync function emitRunEvent(\n event: RuntimeEvent,\n sink: RunAgentOptions['onEvent'],\n): Promise<void> {\n await sink?.(event);\n}\n\n/**\n * 运行一个 quickstart agent。\n *\n * 中文备注:\n * - 这个 helper 用于“npm install 后立即跑通”的最小体验;\n * - 生产 host 仍应自行装配 EventStore / ToolRuntime / ContextManager / RunSupervisor。\n */\nexport async function runAgent(\n agent: DefinedAgent,\n options: RunAgentOptions,\n): Promise<RunAgentResult> {\n const modelId = resolveModelId(agent, options);\n const conversationId = options.conversationId ?? `conv_${Date.now()}`;\n const runId = options.runId ?? generateRunId();\n const turnId = runId;\n const costCollector = new QuickstartRunCostCollector();\n const telemetryPort = createQuickstartTelemetryPort(costCollector);\n const toolRuntime = new QuickstartMemoryToolRuntime(agent.tools);\n const eventStore = new graph.MemoryEventStore();\n const eventBus = new execution.EventBus(`exec_${runId}`);\n const registryStore = new runSupervisor.MemoryRunRegistryStore();\n const supervisor = new runSupervisor.DefaultRunSupervisor({\n registryStore,\n });\n\n const handle = await supervisor.registerRun({\n runId,\n parentSignal: options.signal,\n conversationId,\n agentSpec: agent.spec,\n request: { query: options.input, promptKey: agent.spec.id, model_id: modelId },\n eventBus,\n eventStore,\n costCollector,\n });\n\n const llmCaller = new LlmCaller({\n aiEngine: options.llm,\n maxRetries: 0,\n enableEmptyResponseRetry: false,\n });\n const reasoner = new GraphAgentExecutor({\n llmCaller,\n toolRuntime,\n contextBuilder: new QuickstartContextBuilder(agent),\n telemetryPort,\n });\n const executor = createDefaultGraphExecutor({\n llmNode: new LlmNode({ reasoner }),\n toolRuntime,\n observationPreview: createNoopObservationPreview(),\n checkpointer: new MemoryCheckpointer(),\n telemetryPort,\n maxSteps: 8,\n });\n\n const runtimeEvents: RuntimeEvent[] = [\n createUserInputEvent(generateMessageId(), conversationId, turnId, options.input, {\n metadata: { run_context: { runId } },\n }),\n ];\n await emitRunEvent(runtimeEvents[0], options.onEvent);\n const toolContext: ToolExecutionContext = {\n runId,\n conversationId,\n turnId,\n abortSignal: handle.signal,\n };\n\n await handle.markRunning({ currentNode: 'user' });\n try {\n await executor.prime(conversationId, {\n conversationId,\n turnId,\n request: {\n query: options.input,\n promptKey: agent.spec.id,\n model_id: modelId,\n enableTools: agent.tools.length > 0,\n availableTools: agent.tools.map((tool) => tool.name),\n },\n history: [],\n newEvents: runtimeEvents,\n toolContext,\n signal: handle.signal,\n sseSink: (event: unknown) => {\n if (isQuickstartStreamChunkEvent(event)) {\n const chunkEvents = buildChunkRuntimeEvent({ event, conversationId, turnId });\n for (const chunkEvent of chunkEvents) {\n void emitRunEvent(chunkEvent, options.onEvent);\n }\n return chunkEvents;\n }\n return undefined;\n },\n });\n const result = await executor.runUntilYield(conversationId);\n runtimeEvents.push(...result.events);\n for (const event of result.events) {\n if (event.type === 'final_answer_chunk') continue;\n await emitRunEvent(event, options.onEvent);\n }\n for (const event of runtimeEvents) {\n await eventStore.append(conversationId, {\n eventId: event.id,\n timestamp: event.timestamp,\n conversationId,\n runId,\n event,\n });\n }\n await handle.markCompleted({ currentNode: result.checkpoint.nodeId, iterationsUsed: result.stepCount });\n return {\n runId,\n finalAnswer: readFinalAnswer(runtimeEvents, result.checkpoint.local),\n events: runtimeEvents,\n cost: await handle.cost(),\n contextTrace: readContextTrace(result.checkpoint.local),\n };\n } catch (error) {\n await handle.markFailed({\n errorCode: 'RUN_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n });\n throw error;\n } finally {\n eventBus.close();\n }\n}\n","import { pathToFileURL } from 'node:url';\nimport { resolve } from 'node:path';\nimport type { LinnkitQuickstartConfig } from '../quickstart';\nimport { defineConfig } from '../quickstart';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readDefaultExport(moduleValue: unknown): unknown {\n if (isRecord(moduleValue) && 'default' in moduleValue) {\n return moduleValue.default;\n }\n return moduleValue;\n}\n\nexport async function loadConfig(\n configPath: string,\n cwd: string,\n): Promise<LinnkitQuickstartConfig> {\n const absolutePath = resolve(cwd, configPath);\n const moduleUrl = pathToFileURL(absolutePath);\n moduleUrl.searchParams.set('t', String(Date.now()));\n const loaded = await import(moduleUrl.href);\n const config = readDefaultExport(loaded);\n if (!isRecord(config)) {\n throw new Error(`[linnkit] config must export an object: ${absolutePath}`);\n }\n return defineConfig(config as LinnkitQuickstartConfig);\n}\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nfunction parseEnvLine(line: string): readonly [string, string] | null {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) return null;\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex <= 0) return null;\n\n const key = trimmed.slice(0, eqIndex).trim();\n const rawValue = trimmed.slice(eqIndex + 1).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) return null;\n\n const value =\n (rawValue.startsWith('\"') && rawValue.endsWith('\"')) ||\n (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\"))\n ? rawValue.slice(1, -1)\n : rawValue;\n return [key, value] as const;\n}\n\n/**\n * 读取当前项目的 .env。\n *\n * 中文备注:quickstart 模板需要开箱即用,但 linnkit 不引入 dotenv 依赖;\n * 这里只支持 KEY=VALUE 的最小格式,生产项目应使用自己的配置系统。\n */\nexport async function loadDotEnv(cwd: string): Promise<void> {\n try {\n const content = await readFile(resolve(cwd, '.env'), 'utf8');\n for (const line of content.split(/\\r?\\n/)) {\n const parsed = parseEnvLine(line);\n if (!parsed) continue;\n const [key, value] = parsed;\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error\n ? (error as { code?: unknown }).code\n : undefined;\n if (code !== 'ENOENT') {\n throw error;\n }\n }\n}\n","import { access, readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { loadConfig } from './configLoader';\nimport { loadDotEnv } from './env';\nimport { resolveConfiguredLlm } from '../quickstart';\n\nexport interface DoctorCommandOptions {\n cwd: string;\n configPath: string;\n}\n\nexport interface DoctorReport {\n ok: boolean;\n lines: string[];\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isNode20OrNewer(version: string): boolean {\n const major = Number(version.split('.')[0]);\n return Number.isFinite(major) && major >= 20;\n}\n\nasync function hasLegacyGitHubPackagesRegistry(cwd: string): Promise<boolean> {\n const npmrc = resolve(cwd, '.npmrc');\n if (!(await pathExists(npmrc))) return false;\n const content = await readFile(npmrc, 'utf8');\n return content.includes('@linnlabs:registry=https://npm.pkg.github.com/');\n}\n\nfunction pass(label: string): string {\n return `✓ ${label}`;\n}\n\nfunction fail(label: string, reason: string): string {\n return `✗ ${label}: ${reason}`;\n}\n\nfunction warn(label: string, reason: string): string {\n return `! ${label}: ${reason}`;\n}\n\nexport async function runDoctorCommand(options: DoctorCommandOptions): Promise<DoctorReport> {\n await loadDotEnv(options.cwd);\n\n const lines: string[] = [];\n let ok = true;\n\n if (isNode20OrNewer(process.versions.node)) {\n lines.push(pass(`Node ${process.versions.node}`));\n } else {\n ok = false;\n lines.push(fail('Node version', `requires >= 20, current ${process.versions.node}`));\n }\n\n if (await hasLegacyGitHubPackagesRegistry(options.cwd)) {\n lines.push(warn('.npmrc legacy GitHub Packages registry', 'remove the @linnlabs registry override; linnkit is published on npmjs.com'));\n } else {\n lines.push(pass('npmjs public registry'));\n }\n\n if (process.env.OPENAI_API_KEY) {\n lines.push(pass('OPENAI_API_KEY'));\n } else {\n ok = false;\n lines.push(fail('OPENAI_API_KEY', 'set it in .env or export it before running a real provider'));\n }\n\n try {\n const config = await loadConfig(options.configPath, options.cwd);\n lines.push(pass(`config ${options.configPath}`));\n lines.push(pass(`agents: ${config.agents.map((agent) => agent.spec.id).join(', ')}`));\n\n await resolveConfiguredLlm(config);\n lines.push(pass('llm adapter shape'));\n } catch (error) {\n ok = false;\n lines.push(fail('config', error instanceof Error ? error.message : String(error)));\n }\n\n return { ok, lines };\n}\n","export interface TemplateFile {\n path: string;\n content: string;\n}\n\nexport function createQuickstartTemplateFiles(projectName: string): TemplateFile[] {\n return [\n {\n path: 'package.json',\n content: `${JSON.stringify({\n name: projectName,\n version: '0.1.0',\n private: true,\n type: 'module',\n scripts: {\n doctor: 'linnkit doctor',\n start: 'linnkit run hello --input \"你好,介绍一下你自己\"',\n },\n dependencies: {\n '@linnlabs/linnkit': '^0.8.0',\n zod: '^3.22.0',\n },\n devDependencies: {},\n }, null, 2)}\\n`,\n },\n {\n path: '.env.example',\n content: [\n 'OPENAI_API_KEY=',\n 'OPENAI_BASE_URL=https://api.openai.com/v1',\n 'OPENAI_MODEL=gpt-4.1-mini',\n '',\n ].join('\\n'),\n },\n {\n path: 'agents/hello.mjs',\n content: [\n \"import { defineAgent } from '@linnlabs/linnkit';\",\n '',\n 'export const helloAgent = defineAgent({',\n \" id: 'hello',\",\n \" version: '0.1.0',\",\n \" description: 'A tiny hello-world linnkit agent.',\",\n \" modelId: process.env.OPENAI_MODEL || 'gpt-4.1-mini',\",\n \" systemPrompt: 'You are a concise, warm assistant. Reply in the same language as the user.',\",\n ' tools: [],',\n ' contextPolicy: {',\n \" profileId: 'agent',\",\n ' contextTrace: { enabled: true },',\n ' },',\n '});',\n '',\n ].join('\\n'),\n },\n {\n path: 'adapters/openai-compatible.mjs',\n content: [\n 'function readContentDelta(choice) {',\n ' const delta = choice?.delta;',\n \" if (typeof delta?.content === 'string') return delta.content;\",\n \" if (typeof choice?.message?.content === 'string') return choice.message.content;\",\n \" return '';\",\n '}',\n '',\n 'function normalizeMessages(messages) {',\n ' return messages.map((message) => {',\n \" if (message.role === 'tool') {\",\n \" return { role: 'tool', tool_call_id: message.tool_call_id, content: String(message.content ?? '') };\",\n ' }',\n \" return { role: message.role, content: String(message.content ?? '') };\",\n ' });',\n '}',\n '',\n 'export function createOpenAICompatibleProvider(options = {}) {',\n ' const apiKey = options.apiKey ?? process.env.OPENAI_API_KEY;',\n \" const baseUrl = (options.baseUrl ?? process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1').replace(/\\\\/$/, '');\",\n '',\n ' async function request(modelId, messages, callOptions = {}, stream = false) {',\n ' if (!apiKey) {',\n \" throw new Error('Missing OPENAI_API_KEY. Copy .env.example to .env or export OPENAI_API_KEY.');\",\n ' }',\n ` const response = await fetch(\\`\\${baseUrl}/chat/completions\\`, {`,\n \" method: 'POST',\",\n ' headers: {',\n \" 'content-type': 'application/json',\",\n ' authorization: `Bearer ${apiKey}`,',\n ' },',\n ' body: JSON.stringify({',\n ' model: modelId,',\n ' messages: normalizeMessages(messages),',\n ' stream,',\n ' tools: callOptions.tools,',\n ' tool_choice: callOptions.tool_choice,',\n ' temperature: callOptions.temperature,',\n ' max_tokens: callOptions.max_tokens,',\n ' stream_options: stream ? callOptions.stream_options : undefined,',\n ' }),',\n ' signal: callOptions.signal,',\n ' });',\n '',\n ' if (!response.ok) {',\n ' const detail = await response.text();',\n ' throw new Error(`LLM request failed: ${response.status} ${detail}`);',\n ' }',\n ' return response;',\n ' }',\n '',\n ' return {',\n ' async chatCompletion(modelId, messages, callOptions = {}) {',\n ' const response = await request(modelId, messages, callOptions, false);',\n ' const json = await response.json();',\n ' const choice = json.choices?.[0];',\n ' return {',\n ' content: choice?.message?.content ?? \\'\\',',\n ' tool_calls: choice?.message?.tool_calls,',\n ' usage: json.usage,',\n ' };',\n ' },',\n '',\n ' async chatCompletionStream(modelId, messages, callOptions = {}, onContent, onError, onFinish, _onThought, onUsage) {',\n ' try {',\n ' const response = await request(modelId, messages, callOptions, true);',\n ' if (!response.body) throw new Error(\\'Streaming response body is empty.\\');',\n ' const reader = response.body.getReader();',\n ' const decoder = new TextDecoder();',\n \" let buffer = '';\",\n '',\n ' while (true) {',\n ' const { done, value } = await reader.read();',\n ' if (done) break;',\n ' buffer += decoder.decode(value, { stream: true });',\n \" const lines = buffer.split('\\\\n');\",\n ' buffer = lines.pop() ?? \\'\\';',\n '',\n ' for (const rawLine of lines) {',\n ' const line = rawLine.trim();',\n \" if (!line || !line.startsWith('data:')) continue;\",\n \" const payload = line.slice('data:'.length).trim();\",\n \" if (payload === '[DONE]') {\",\n \" onFinish?.('stop');\",\n ' return;',\n ' }',\n ' const parsed = JSON.parse(payload);',\n ' if (parsed.usage) onUsage?.(parsed.usage);',\n ' const choice = parsed.choices?.[0];',\n ' const content = readContentDelta(choice);',\n ' if (content) onContent?.(content);',\n ' if (choice?.finish_reason) onFinish?.(choice.finish_reason);',\n ' }',\n ' }',\n \" onFinish?.('stop');\",\n ' } catch (error) {',\n ' onError?.(error instanceof Error ? error : new Error(String(error)));',\n ' }',\n ' },',\n ' };',\n '}',\n '',\n ].join('\\n'),\n },\n {\n path: 'linnkit.config.mjs',\n content: [\n \"import { defineConfig } from '@linnlabs/linnkit';\",\n \"import { helloAgent } from './agents/hello.mjs';\",\n \"import { createOpenAICompatibleProvider } from './adapters/openai-compatible.mjs';\",\n '',\n 'export default defineConfig({',\n ' agents: [helloAgent],',\n ' defaultModelId: process.env.OPENAI_MODEL || helloAgent.modelId,',\n ' llm: () => createOpenAICompatibleProvider(),',\n '});',\n '',\n ].join('\\n'),\n },\n {\n path: 'README.md',\n content: [\n `# ${projectName}`,\n '',\n 'A minimal linnkit quickstart project.',\n '',\n '```bash',\n 'cp .env.example .env',\n 'npm install',\n 'export OPENAI_API_KEY=...',\n 'npx linnkit doctor',\n 'npx linnkit run hello --input \"你好\"',\n '```',\n '',\n ].join('\\n'),\n },\n ];\n}\n","import { mkdir, readdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { createQuickstartTemplateFiles } from './templates';\n\nexport interface InitCommandOptions {\n cwd: string;\n name: string;\n}\n\nasync function isDirectoryEmpty(path: string): Promise<boolean> {\n try {\n const entries = await readdir(path);\n return entries.length === 0;\n } catch {\n return true;\n }\n}\n\nexport async function runInitCommand(options: InitCommandOptions): Promise<string[]> {\n const targetDir = resolve(options.cwd, options.name);\n if (!(await isDirectoryEmpty(targetDir))) {\n throw new Error(`[linnkit] target directory is not empty: ${targetDir}`);\n }\n\n const written: string[] = [];\n for (const file of createQuickstartTemplateFiles(options.name)) {\n const filePath = join(targetDir, file.path);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content, 'utf8');\n written.push(file.path);\n }\n return written;\n}\n","import type { RuntimeEvent } from '../contracts';\nimport { resolveConfiguredLlm, runAgent } from '../quickstart';\nimport { loadConfig } from './configLoader';\nimport { loadDotEnv } from './env';\n\nexport interface RunCommandOptions {\n cwd: string;\n configPath: string;\n agentId: string;\n input: string;\n modelId?: string;\n write?: (text: string) => void;\n}\n\nfunction readEventText(event: RuntimeEvent): string | undefined {\n if (event.type === 'final_answer_chunk') {\n return event.content;\n }\n if (event.type === 'tool_call') {\n return `\\n[tool] ${event.tool_name}\\n`;\n }\n if (event.type === 'tool_output') {\n return `[tool-result] ${event.tool_name}\\n`;\n }\n return undefined;\n}\n\nexport async function runRunCommand(options: RunCommandOptions): Promise<number> {\n await loadDotEnv(options.cwd);\n const config = await loadConfig(options.configPath, options.cwd);\n const agent = config.agents.find((candidate) => candidate.spec.id === options.agentId);\n if (!agent) {\n throw new Error(`[linnkit] unknown agent id: ${options.agentId}`);\n }\n\n const llm = await resolveConfiguredLlm(config);\n const modelId = options.modelId ?? agent.modelId ?? config.defaultModelId;\n const write = options.write ?? ((text: string) => process.stdout.write(text));\n\n write(`[linnkit] agent=${agent.spec.id} model=${modelId ?? '(missing)'}\\n`);\n const result = await runAgent(agent, {\n input: options.input,\n llm,\n modelId,\n onEvent: (event) => {\n const text = readEventText(event);\n if (text) write(text);\n },\n });\n\n write('\\n');\n write(`[linnkit] runId=${result.runId}\\n`);\n write(`[linnkit] tokens input=${result.cost.tokensInput} output=${result.cost.tokensOutput}\\n`);\n return 0;\n}\n","#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { parseCliArgs, readStringOption } from './args';\nimport { runDoctorCommand } from './doctor';\nimport { runInitCommand } from './init';\nimport { runRunCommand } from './run';\n\nfunction usage(): string {\n return [\n 'linnkit v0 CLI',\n '',\n 'Usage:',\n ' linnkit init <name>',\n ' linnkit doctor [--config linnkit.config.mjs]',\n ' linnkit run <agent-id> --input \"...\" [--model \"...\"] [--config linnkit.config.mjs]',\n '',\n ].join('\\n');\n}\n\nfunction readConfigPath(options: Record<string, string | boolean>): string {\n return readStringOption(options, 'config') ?? 'linnkit.config.mjs';\n}\n\nexport async function runCli(\n argv: readonly string[],\n cwd = process.cwd(),\n write: (text: string) => void = (text) => process.stdout.write(text),\n writeError: (text: string) => void = (text) => process.stderr.write(text),\n): Promise<number> {\n const parsed = parseCliArgs(argv);\n if (!parsed.command || parsed.command === 'help' || parsed.options.help === true || parsed.options.h === true) {\n write(usage());\n return 0;\n }\n\n try {\n if (parsed.command === 'init') {\n const name = parsed.positional[0];\n if (!name) throw new Error('[linnkit] init requires a project name.');\n const files = await runInitCommand({ cwd, name });\n write(`Created ${name}\\n`);\n for (const file of files) {\n write(` ${file}\\n`);\n }\n write('\\nNext:\\n');\n write(` cd ${name}\\n`);\n write(' cp .env.example .env\\n');\n write(' npm install\\n');\n write(' npx linnkit doctor\\n');\n return 0;\n }\n\n if (parsed.command === 'doctor') {\n const report = await runDoctorCommand({\n cwd,\n configPath: readConfigPath(parsed.options),\n });\n write(`${report.lines.join('\\n')}\\n`);\n return report.ok ? 0 : 1;\n }\n\n if (parsed.command === 'run') {\n const agentId = parsed.positional[0];\n if (!agentId) throw new Error('[linnkit] run requires an agent id.');\n const input = readStringOption(parsed.options, 'input');\n if (!input) throw new Error('[linnkit] run requires --input \"...\".');\n return await runRunCommand({\n cwd,\n configPath: readConfigPath(parsed.options),\n agentId,\n input,\n modelId: readStringOption(parsed.options, 'model'),\n write,\n });\n }\n\n throw new Error(`[linnkit] unknown command: ${parsed.command}`);\n } catch (error) {\n writeError(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n}\n\nconst invokedPath = process.argv[1] ? pathToFileURL(process.argv[1]).href : undefined;\nif (invokedPath === import.meta.url) {\n void runCli(process.argv.slice(2)).then((exitCode) => {\n process.exitCode = exitCode;\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/args.ts","../src/contracts/messages.ts","../src/contracts/contextPolicy.ts","../src/contracts/agentSpec.ts","../src/contracts/audit.ts","../src/contracts/events.ts","../src/contracts/constants.ts","../src/contracts/execution.ts","../src/contracts/sse.ts","../src/quickstart/toolSchema.ts","../src/quickstart/defineConfig.ts","../src/shared/ids.ts","../src/runtime-kernel/graph-engine/index.ts","../src/shared/logger.ts","../src/runtime-kernel/telemetry/noopTelemetry.ts","../src/runtime-kernel/graph-engine/types.ts","../src/runtime-kernel/graph-engine/engine.ts","../src/runtime-kernel/llm/modelCatalog.ts","../src/runtime-kernel/llm/modelResolver.ts","../src/runtime-kernel/audit/noopAudit.ts","../src/runtime-kernel/llm/toolCallUtils.ts","../src/runtime-kernel/graph-engine/tick-pipeline/helpers.ts","../src/shared/llmAuditRecorder.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/contextAuditMiddleware.ts","../src/shared/TokenCalculator.ts","../src/shared/llmTelemetryContext.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/llmTelemetryMiddleware.ts","../src/runtime-kernel/graph-engine/tick-pipeline/middlewares/runModelLockMiddleware.ts","../src/runtime-kernel/graph-engine/tick-pipeline/runTickPipeline.ts","../src/shared/checkpointMarker.ts","../src/runtime-kernel/system-reminder/helpers.ts","../src/runtime-kernel/system-reminder/templates.ts","../src/runtime-kernel/system-reminder/triggers.ts","../src/runtime-kernel/system-reminder/registry.ts","../src/runtime-kernel/system-reminder/rules.ts","../src/runtime-kernel/system-reminder/apply.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/applySystemReminderStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/buildContextStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/buildDecisionStage.ts","../src/runtime-kernel/audit/emitAudit.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/executeLlmStage.ts","../src/runtime-kernel/graph-engine/tick-pipeline/stages/prepareCallStage.ts","../src/runtime-kernel/graph-engine/executor.ts","../src/runtime-kernel/graph-engine/graphLocal.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.state.ts","../src/runtime-kernel/events/agentEvents.ts","../src/runtime-kernel/events/provider-sidecar.ts","../src/runtime-kernel/events/agent-to-runtime.ts","../src/runtime-kernel/events/runtime-to-ai-message.ts","../src/runtime-kernel/events/sse-projection.ts","../src/runtime-kernel/events/eventMappers.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.eventBridge.ts","../src/runtime-kernel/graph-engine/nodes/llmNode.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.finalAnswerProjector.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.helpers.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.observationGovernance.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.protocolFuse.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.stateTransitions.ts","../src/runtime-kernel/tools/argNormalizer.ts","../src/runtime-kernel/tools/idempotency/toolIdempotency.ts","../src/runtime-kernel/tools/toolContextRuntime.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.eventBridge.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.executionSetup.ts","../src/runtime-kernel/graph-engine/nodes/toolNode.ts","../src/runtime-kernel/graph-engine/nodes/userNode.ts","../src/runtime-kernel/graph-engine/nodes/waitUserNode.ts","../src/runtime-kernel/graph-engine/nodes/answerNode.ts","../src/runtime-kernel/graph-engine/checkpointer/base.ts","../src/runtime-kernel/graph-engine/checkpointer/memoryCheckpointer.ts","../src/runtime-kernel/graph-engine/event-store/memoryEventStore.ts","../src/runtime-kernel/graph-engine/event-store/base.ts","../src/runtime-kernel/execution/index.ts","../src/runtime-kernel/execution/event-bus.ts","../src/runtime-kernel/execution/sequencer.ts","../src/shared/errorClassifier.ts","../src/runtime-kernel/execution/runtimeErrorEventFactory.ts","../src/runtime-kernel/llm/policies/policyEngine.ts","../src/runtime-kernel/llm/policies/defaultPolicyEngine.ts","../src/runtime-kernel/llm/request-builder.ts","../src/runtime-kernel/llm/streaming/toolCallStreamAccumulator.ts","../src/runtime-kernel/llm/streaming/markdownHeadingNormalizer.ts","../src/runtime-kernel/llm/streaming/thoughtStreamSegmenter.ts","../src/runtime-kernel/llm/sidecar-replay.ts","../src/runtime-kernel/llm/reasoning-details.ts","../src/runtime-kernel/llm/streaming-adapter.ts","../src/runtime-kernel/llm/retry-fallback-routing.ts","../src/runtime-kernel/llm/usage-telemetry.ts","../src/runtime-kernel/llm/retry-fallback.ts","../src/runtime-kernel/llm/caller.ts","../src/runtime-kernel/run-supervisor/index.ts","../src/runtime-kernel/run-supervisor/memoryRunRegistryStore.ts","../src/runtime-kernel/audit/eventStoreAudit.ts","../src/runtime-kernel/run-supervisor/runErrors.ts","../src/runtime-kernel/run-supervisor/runHandle.ts","../src/runtime-kernel/run-supervisor/runSupervisor.ts","../src/runtime-kernel/audit/consoleAudit.ts","../src/runtime-kernel/testkit/defaultGraphExecutor.ts","../src/quickstart/contextBuilder.ts","../src/quickstart/toolRuntime.ts","../src/quickstart/runCost.ts","../src/quickstart/runAgent.ts","../src/cli/configLoader.ts","../src/cli/env.ts","../src/cli/doctor.ts","../src/cli/templates.ts","../src/cli/init.ts","../src/cli/run.ts","../src/cli/index.ts"],"names":["z","JsonRecord","isAbortSignal","cp","isRecord","usage","logger","readString","readNonEmptyString","readContextCheckpointToolName","resolve","readStringField","readFile","mkdir","dirname","pathToFileURL"],"mappings":"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","file":"cli.js","sourcesContent":["export interface ParsedCli {\n command?: string;\n positional: string[];\n options: Record<string, string | boolean>;\n}\n\nexport function parseCliArgs(argv: readonly string[]): ParsedCli {\n const positional: string[] = [];\n const options: Record<string, string | boolean> = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token.startsWith('--')) {\n const raw = token.slice(2);\n const eqIndex = raw.indexOf('=');\n if (eqIndex >= 0) {\n options[raw.slice(0, eqIndex)] = raw.slice(eqIndex + 1);\n continue;\n }\n const next = argv[index + 1];\n if (next !== undefined && !next.startsWith('--')) {\n options[raw] = next;\n index += 1;\n } else {\n options[raw] = true;\n }\n continue;\n }\n positional.push(token);\n }\n\n const [command, ...rest] = positional;\n return { command, positional: rest, options };\n}\n\nexport function readStringOption(\n options: Record<string, string | boolean>,\n name: string,\n): string | undefined {\n const value = options[name];\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n","import { z } from 'zod';\n\nexport const ProviderReasoningDetails = z.array(z.unknown());\nexport type ProviderReasoningDetails = z.infer<typeof ProviderReasoningDetails>;\n\nexport const ToolCallExtraContent = z.object({\n google: z.object({\n thought_signature: z.string().optional(),\n }).passthrough().optional(),\n}).passthrough();\n\nexport type ToolCallExtraContent = z.infer<typeof ToolCallExtraContent>;\n\nexport const ToolCallWire = z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n extra_content: ToolCallExtraContent.optional(),\n}).passthrough();\n\nexport type ToolCallWire = z.infer<typeof ToolCallWire>;\n\nexport const HistorySummaryMeta = z.object({\n messageType: z.literal('summary'),\n originalMessageCount: z.number().int().positive(),\n compressionRatio: z.number().min(0).max(1).optional(),\n includedOldSummary: z.boolean(),\n replacedMessageIds: z.array(z.string()),\n summarySeq: z.number().int().nonnegative(),\n});\n\nexport type HistorySummaryMeta = z.infer<typeof HistorySummaryMeta>;\n\nexport const ToolCallsMeta = z.object({\n tool_calls: z.array(ToolCallWire),\n reasoning_details: ProviderReasoningDetails.optional(),\n});\n\nexport type ToolCallsMeta = z.infer<typeof ToolCallsMeta>;\n\nexport const ToolOutputMeta = z.object({\n tool_name: z.string(),\n args: z.record(z.unknown()).optional(),\n tool_call_id: z.string(),\n});\n\nexport type ToolOutputMeta = z.infer<typeof ToolOutputMeta>;\n\nexport const ImageInfoMeta = z.object({\n url: z.string().optional(),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n format: z.string().optional(),\n size: z.number().int().nonnegative().optional(),\n});\n\nexport type ImageInfoMeta = z.infer<typeof ImageInfoMeta>;\n\nexport const TaskTrackingMeta = z.object({\n taskType: z.string().optional(),\n taskId: z.string().optional(),\n taskStatus: z.enum(['requested', 'in_progress', 'completed', 'failed']).optional(),\n taskTrackingInfo: z.object({\n startTime: z.number().optional(),\n endTime: z.number().optional(),\n duration: z.number().optional(),\n retryCount: z.number().int().nonnegative().optional(),\n lastError: z.string().optional(),\n }).optional(),\n});\n\nexport type TaskTrackingMeta = z.infer<typeof TaskTrackingMeta>;\n\nexport const PersistentMetadata = z.object({\n messageType: z.literal('summary').optional(),\n originalMessageCount: z.number().int().positive().optional(),\n compressionRatio: z.number().min(0).max(1).optional(),\n includedOldSummary: z.boolean().optional(),\n replacedMessageIds: z.array(z.string()).optional(),\n summarySeq: z.number().int().nonnegative().optional(),\n tool_calls: z.array(ToolCallWire).optional(),\n reasoning_details: ProviderReasoningDetails.optional(),\n tool_name: z.string().optional(),\n args: z.record(z.unknown()).optional(),\n tool_call_id: z.string().optional(),\n raw_output: z.string().optional(),\n image_info: ImageInfoMeta.optional(),\n taskType: z.string().optional(),\n taskId: z.string().optional(),\n taskStatus: z.enum(['requested', 'in_progress', 'completed', 'failed']).optional(),\n taskTrackingInfo: z.object({\n startTime: z.number().optional(),\n endTime: z.number().optional(),\n duration: z.number().optional(),\n retryCount: z.number().int().nonnegative().optional(),\n lastError: z.string().optional(),\n }).optional(),\n fenceKind: z.string().optional(),\n fenceAttrs: z.record(z.unknown()).optional(),\n fencePlacement: z.string().optional(),\n}).passthrough();\n\nexport type PersistentMetadata = z.infer<typeof PersistentMetadata>;\n\nconst BaseMessage = z.object({\n id: z.string(),\n content: z.string(),\n timestamp: z.number().int().nonnegative(),\n metadata: PersistentMetadata.optional(),\n});\n\nexport const SystemMessage = BaseMessage.extend({\n role: z.literal('system'),\n type: z.enum(['system_prompt', 'history_summary', 'context_injection']),\n});\n\nexport type SystemMessage = z.infer<typeof SystemMessage>;\n\nexport const UserMessage = BaseMessage.extend({\n role: z.literal('user'),\n type: z.enum([\n 'user_input',\n 'context_injection',\n 'context_before',\n 'context_after',\n 'document_fragment',\n 'task_request',\n 'image',\n ]),\n});\n\nexport type UserMessage = z.infer<typeof UserMessage>;\n\nexport const AssistantMessage = BaseMessage.extend({\n role: z.literal('assistant'),\n type: z.enum([\n 'thought',\n 'final_answer',\n 'tool_code',\n 'tool_calls',\n 'task_completion',\n ]),\n});\n\nexport type AssistantMessage = z.infer<typeof AssistantMessage>;\n\nexport const ToolMessage = BaseMessage.extend({\n role: z.literal('tool'),\n type: z.literal('tool_output'),\n});\n\nexport type ToolMessage = z.infer<typeof ToolMessage>;\n\nexport const AiMessage = z.discriminatedUnion('role', [\n SystemMessage,\n UserMessage,\n AssistantMessage,\n ToolMessage,\n]);\n\nexport type AiMessage = z.infer<typeof AiMessage>;\n\nexport function createSystemMessage(\n type: SystemMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): SystemMessage {\n return {\n id: crypto.randomUUID(),\n role: 'system',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createUserMessage(\n type: UserMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): UserMessage {\n return {\n id: crypto.randomUUID(),\n role: 'user',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createAssistantMessage(\n type: AssistantMessage['type'],\n content: string,\n metadata?: PersistentMetadata,\n): AssistantMessage {\n return {\n id: crypto.randomUUID(),\n role: 'assistant',\n type,\n content,\n timestamp: Date.now(),\n metadata,\n };\n}\n\nexport function createToolMessage(\n content: string,\n toolCallId: string,\n toolName: string,\n metadata?: PersistentMetadata,\n): ToolMessage {\n return {\n id: crypto.randomUUID(),\n role: 'tool',\n type: 'tool_output',\n content,\n timestamp: Date.now(),\n metadata: {\n ...metadata,\n tool_call_id: toolCallId,\n tool_name: toolName,\n },\n };\n}\n\nexport function createHistorySummaryMessage(\n content: string,\n summaryMeta: HistorySummaryMeta,\n): SystemMessage {\n return {\n id: crypto.randomUUID(),\n role: 'system',\n type: 'history_summary',\n content,\n timestamp: Date.now(),\n metadata: summaryMeta,\n };\n}\n\nexport function validateAiMessage(data: unknown): z.SafeParseReturnType<unknown, AiMessage> {\n return AiMessage.safeParse(data);\n}\n\nexport function validateHistorySummaryMeta(\n data: unknown,\n): z.SafeParseReturnType<unknown, HistorySummaryMeta> {\n return HistorySummaryMeta.safeParse(data);\n}\n\nexport function isSystemMessage(message: AiMessage): message is SystemMessage {\n return message.role === 'system';\n}\n\nexport function isUserMessage(message: AiMessage): message is UserMessage {\n return message.role === 'user';\n}\n\nexport function isAssistantMessage(message: AiMessage): message is AssistantMessage {\n return message.role === 'assistant';\n}\n\nexport function isToolMessage(message: AiMessage): message is ToolMessage {\n return message.role === 'tool';\n}\n\nexport function isHistorySummaryMessage(message: AiMessage): message is SystemMessage {\n return message.role === 'system'\n && message.type === 'history_summary'\n && message.metadata?.messageType === 'summary';\n}\n\nexport function hasToolCalls(message: AiMessage): boolean {\n return message.role === 'assistant'\n && Array.isArray(message.metadata?.tool_calls)\n && message.metadata.tool_calls.length > 0;\n}\n","import { z } from 'zod';\n\ntype SerializableJsonValue =\n | string\n | number\n | boolean\n | null\n | SerializableJsonValue[]\n | { [key: string]: SerializableJsonValue };\n\nconst SerializableJsonValueSchema: z.ZodType<SerializableJsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(SerializableJsonValueSchema),\n z.record(z.string(), SerializableJsonValueSchema),\n ]),\n);\n\nconst SerializableJsonRecord = z.record(z.string(), SerializableJsonValueSchema);\n\nexport const AgentSpecMessageType = z.enum([\n 'system_prompt',\n 'history_summary',\n 'context_injection',\n 'user_input',\n 'context_before',\n 'context_after',\n 'document_fragment',\n 'task_request',\n 'image',\n 'thought',\n 'final_answer',\n 'tool_code',\n 'tool_calls',\n 'task_completion',\n 'tool_output',\n]);\nexport type AgentSpecMessageType = z.infer<typeof AgentSpecMessageType>;\n\nexport const AgentSpecBudgetPolicy = z.object({\n maxTokens: z.number().int().positive().optional(),\n reservedForResponse: z.number().int().nonnegative().optional(),\n workingMemoryBudgetPercentage: z.number().min(0).max(1).optional(),\n});\nexport type AgentSpecBudgetPolicy = z.infer<typeof AgentSpecBudgetPolicy>;\n\nexport const AgentSpecToolHistoryPolicy = z.object({\n strategy: z.enum(['per-pair', 'per-run', 'none']).optional(),\n keepLatestToolPairs: z.number().int().nonnegative().optional(),\n keepLatestRuns: z.number().int().nonnegative().optional(),\n maxInteractionGroups: z.number().int().nonnegative().optional(),\n overflowStrategy: z.enum(['keep-latest', 'fail-fast']).optional(),\n maxPairTokens: z.number().int().nonnegative().optional(),\n maxOutputSummaryTokens: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecToolHistoryPolicy = z.infer<typeof AgentSpecToolHistoryPolicy>;\n\nexport const AgentSpecToolObservationGovernancePolicy = z.object({\n enabled: z.boolean().optional(),\n maxChars: z.number().int().positive().optional(),\n maxLines: z.number().int().positive().optional(),\n});\nexport type AgentSpecToolObservationGovernancePolicy = z.infer<typeof AgentSpecToolObservationGovernancePolicy>;\n\nexport const AgentSpecToolOutputPolicy = z.object({\n observationGovernance: AgentSpecToolObservationGovernancePolicy.optional(),\n});\nexport type AgentSpecToolOutputPolicy = z.infer<typeof AgentSpecToolOutputPolicy>;\n\nexport const AgentSpecProviderReplayPolicy = z.object({\n provider: z.string().min(1).optional(),\n requiresReasoningDetailsForToolReplay: z.boolean().optional(),\n missingSidecarBehavior: z.enum(['allow', 'degrade_to_text', 'provider_empty_replay_field']).optional(),\n});\nexport type AgentSpecProviderReplayPolicy = z.infer<typeof AgentSpecProviderReplayPolicy>;\n\nexport const AgentSpecSummarizationPolicy = z.object({\n triggerThreshold: z.number().min(0).max(1).optional(),\n budgetPercentage: z.number().min(0).max(1).optional(),\n oldestMessagesPercentage: z.number().min(0).max(1).optional(),\n agentId: z.string().min(1).optional(),\n failureBehavior: z.enum(['fail-fast', 'continue-if-within-budget']).optional(),\n});\nexport type AgentSpecSummarizationPolicy = z.infer<typeof AgentSpecSummarizationPolicy>;\n\nexport const AgentSpecMustKeepTruncationRule = z.object({\n fenceKind: z.string().min(1),\n maxBudgetFraction: z.number().gt(0).max(1),\n strategyName: z.string().min(1),\n});\nexport type AgentSpecMustKeepTruncationRule = z.infer<typeof AgentSpecMustKeepTruncationRule>;\n\nexport const AgentSpecMustKeepPolicy = z.object({\n alwaysKeepTypes: z.array(AgentSpecMessageType).optional(),\n alwaysKeepFenceKinds: z.array(z.string().min(1)).optional(),\n truncationRules: z.array(AgentSpecMustKeepTruncationRule).optional(),\n});\nexport type AgentSpecMustKeepPolicy = z.infer<typeof AgentSpecMustKeepPolicy>;\n\nexport const AgentSpecWorkingMemoryPolicy = z.object({\n maxRecentToolInteractions: z.number().int().nonnegative().optional(),\n minToolInteractionsToKeep: z.number().int().nonnegative().optional(),\n toolPairingSearchRange: z.number().int().positive().optional(),\n});\nexport type AgentSpecWorkingMemoryPolicy = z.infer<typeof AgentSpecWorkingMemoryPolicy>;\n\nexport const AgentSpecCheckpointPolicy = z.object({\n keepPairsBefore: z.number().int().nonnegative().optional(),\n triggerToolName: z.string().min(1).optional(),\n});\nexport type AgentSpecCheckpointPolicy = z.infer<typeof AgentSpecCheckpointPolicy>;\n\nexport const AgentSpecReasoningRetentionPolicy = z.object({\n keepLatestThoughts: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecReasoningRetentionPolicy = z.infer<typeof AgentSpecReasoningRetentionPolicy>;\n\nexport const AgentSpecTokenEstimationPolicy = z.object({\n encoding: z.string().min(1).optional(),\n avgCharsPerToken: z.number().positive().optional(),\n toolCallOverhead: z.number().int().nonnegative().optional(),\n});\nexport type AgentSpecTokenEstimationPolicy = z.infer<typeof AgentSpecTokenEstimationPolicy>;\n\nexport const SYSTEM_REMINDER_BUILTIN_TRIGGER_KINDS = [\n 'phase-equals',\n 'remaining-steps-leq',\n 'step-count-modulo',\n 'tool-call-streak',\n 'budget-warning',\n 'agent-has-tool',\n] as const;\n\nexport const AgentSpecSystemReminderTrigger = z.object({\n kind: z.string().min(1),\n threshold: z.number().nonnegative().optional(),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n moduloStep: z.boolean().optional(),\n toolName: z.string().min(1).optional(),\n period: z.number().int().positive().optional(),\n minStep: z.number().int().nonnegative().optional(),\n ratio: z.number().min(0).max(1).optional(),\n config: SerializableJsonRecord.optional(),\n});\nexport type AgentSpecSystemReminderTrigger = z.infer<typeof AgentSpecSystemReminderTrigger>;\n\nexport const AgentSpecSystemReminderExtraRule = z.object({\n id: z.string().min(1),\n trigger: AgentSpecSystemReminderTrigger,\n contentTemplate: z.string().min(1),\n contentArgs: SerializableJsonRecord.optional(),\n});\nexport type AgentSpecSystemReminderExtraRule = z.infer<typeof AgentSpecSystemReminderExtraRule>;\n\nexport const AgentSpecSystemReminderPolicy = z.object({\n enabledRuleIds: z.array(z.string().min(1)).nullable().optional(),\n disabledRuleIds: z.array(z.string().min(1)).optional(),\n thresholds: z.object({\n toolCallStreak: z.number().int().nonnegative().optional(),\n taskstateReflectionPeriod: z.number().int().positive().optional(),\n budgetWarningRatio: z.number().min(0).max(1).optional(),\n lastStepsHintThreshold: z.number().int().nonnegative().optional(),\n }).optional(),\n extraRules: z.array(AgentSpecSystemReminderExtraRule).optional(),\n}).superRefine((value, ctx) => {\n if (value.enabledRuleIds !== undefined && value.enabledRuleIds !== null && value.disabledRuleIds?.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['disabledRuleIds'],\n message: 'enabledRuleIds and disabledRuleIds cannot be configured at the same time',\n });\n }\n});\nexport type AgentSpecSystemReminderPolicy = z.infer<typeof AgentSpecSystemReminderPolicy>;\n\nexport const AgentSpecContextTracePolicy = z.object({\n enabled: z.boolean().optional(),\n includeMessageIds: z.boolean().optional(),\n includeTokenBreakdown: z.boolean().optional(),\n maxTraceEvents: z.number().int().positive().optional(),\n});\nexport type AgentSpecContextTracePolicy = z.infer<typeof AgentSpecContextTracePolicy>;\n\nexport const AgentSpecContextPolicy = z.object({\n profileId: z.string().min(1),\n budget: AgentSpecBudgetPolicy.optional(),\n toolHistory: AgentSpecToolHistoryPolicy.optional(),\n toolOutput: AgentSpecToolOutputPolicy.optional(),\n providerReplay: AgentSpecProviderReplayPolicy.optional(),\n summarization: AgentSpecSummarizationPolicy.optional(),\n mustKeep: AgentSpecMustKeepPolicy.optional(),\n workingMemory: AgentSpecWorkingMemoryPolicy.optional(),\n checkpoint: AgentSpecCheckpointPolicy.optional(),\n reasoningRetention: AgentSpecReasoningRetentionPolicy.optional(),\n tokenEstimation: AgentSpecTokenEstimationPolicy.optional(),\n systemReminder: AgentSpecSystemReminderPolicy.optional(),\n contextTrace: AgentSpecContextTracePolicy.optional(),\n});\nexport type AgentSpecContextPolicy = z.infer<typeof AgentSpecContextPolicy>;\n\nexport type AgentSpecContextPolicyInput = Omit<z.input<typeof AgentSpecContextPolicy>, 'profileId'> & {\n profileId?: string;\n};\n\nconst DEFAULT_CONTEXT_POLICY: Required<AgentSpecContextPolicy> = {\n profileId: 'agent',\n budget: {\n maxTokens: 120000,\n reservedForResponse: 2400,\n workingMemoryBudgetPercentage: 0.7,\n },\n toolHistory: {\n strategy: 'per-run',\n keepLatestToolPairs: 2,\n keepLatestRuns: 1,\n maxInteractionGroups: 12,\n overflowStrategy: 'keep-latest',\n maxPairTokens: 6000,\n maxOutputSummaryTokens: 1000,\n },\n toolOutput: {\n observationGovernance: {\n enabled: true,\n maxChars: 20_000,\n maxLines: 1_200,\n },\n },\n providerReplay: {},\n summarization: {\n triggerThreshold: 0.7,\n budgetPercentage: 0.12,\n oldestMessagesPercentage: 0.75,\n failureBehavior: 'fail-fast',\n },\n mustKeep: {\n alwaysKeepTypes: ['system_prompt', 'user_input'],\n alwaysKeepFenceKinds: [],\n truncationRules: [],\n },\n workingMemory: {\n maxRecentToolInteractions: 2,\n minToolInteractionsToKeep: 2,\n toolPairingSearchRange: 10,\n },\n checkpoint: {\n keepPairsBefore: 2,\n triggerToolName: 'context_checkpoint',\n },\n reasoningRetention: {\n keepLatestThoughts: 1,\n },\n tokenEstimation: {\n encoding: 'cl100k_base',\n avgCharsPerToken: 2.0,\n toolCallOverhead: 50,\n },\n systemReminder: {\n enabledRuleIds: null,\n disabledRuleIds: [],\n thresholds: {\n toolCallStreak: 10,\n taskstateReflectionPeriod: 30,\n budgetWarningRatio: 0.9,\n lastStepsHintThreshold: 0,\n },\n extraRules: [],\n },\n contextTrace: {\n enabled: false,\n includeMessageIds: true,\n includeTokenBreakdown: true,\n maxTraceEvents: 200,\n },\n};\n\n/**\n * 创建完整 contextPolicy。\n *\n * 中文备注:\n * - schema 保持 optional,避免现有 host 的 `{ profileId: 'agent' }` 类型大面积变红;\n * - 需要完整默认值时走这个 helper,后续 F1.2/F1.3 的 adapter 与 fallback 会复用它。\n */\nexport function defineContextPolicy(input: AgentSpecContextPolicyInput = {}): AgentSpecContextPolicy {\n const merged: Required<AgentSpecContextPolicy> = {\n profileId: input.profileId ?? DEFAULT_CONTEXT_POLICY.profileId,\n budget: { ...DEFAULT_CONTEXT_POLICY.budget, ...input.budget },\n toolHistory: { ...DEFAULT_CONTEXT_POLICY.toolHistory, ...input.toolHistory },\n toolOutput: {\n ...DEFAULT_CONTEXT_POLICY.toolOutput,\n ...input.toolOutput,\n observationGovernance: {\n ...DEFAULT_CONTEXT_POLICY.toolOutput.observationGovernance,\n ...input.toolOutput?.observationGovernance,\n },\n },\n providerReplay: { ...DEFAULT_CONTEXT_POLICY.providerReplay, ...input.providerReplay },\n summarization: { ...DEFAULT_CONTEXT_POLICY.summarization, ...input.summarization },\n mustKeep: { ...DEFAULT_CONTEXT_POLICY.mustKeep, ...input.mustKeep },\n workingMemory: { ...DEFAULT_CONTEXT_POLICY.workingMemory, ...input.workingMemory },\n checkpoint: { ...DEFAULT_CONTEXT_POLICY.checkpoint, ...input.checkpoint },\n reasoningRetention: { ...DEFAULT_CONTEXT_POLICY.reasoningRetention, ...input.reasoningRetention },\n tokenEstimation: { ...DEFAULT_CONTEXT_POLICY.tokenEstimation, ...input.tokenEstimation },\n systemReminder: {\n ...DEFAULT_CONTEXT_POLICY.systemReminder,\n ...input.systemReminder,\n thresholds: {\n ...DEFAULT_CONTEXT_POLICY.systemReminder.thresholds,\n ...input.systemReminder?.thresholds,\n },\n extraRules: input.systemReminder?.extraRules ?? DEFAULT_CONTEXT_POLICY.systemReminder.extraRules,\n },\n contextTrace: { ...DEFAULT_CONTEXT_POLICY.contextTrace, ...input.contextTrace },\n };\n\n return AgentSpecContextPolicy.parse(merged);\n}\n","import { z } from 'zod';\nimport { AgentSpecContextPolicy } from './contextPolicy';\n\nconst JsonRecord = z.record(z.string(), z.unknown());\n\n/**\n * 工具参数 schema 在 AgentSpec 里是可序列化契约,不是运行时 zod 对象。\n * 这里主动拦截 zod-like 对象,避免把 `z.any()` 一类实现细节混进协议层。\n */\nconst ToolArgsSchemaSpec = JsonRecord.superRefine((value, ctx) => {\n const parse = value['parse'];\n const safeParse = value['safeParse'];\n const definition = value['_def'];\n if (typeof parse === 'function' && typeof safeParse === 'function' && definition !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'argsSchema must be a serializable record, not a runtime zod schema',\n });\n }\n});\n\nexport const AgentCapability = z.string().min(1);\nexport type AgentCapability = z.infer<typeof AgentCapability>;\n\nexport const ToolBindingSpec = z.object({\n toolId: z.string().min(1),\n bindingId: z.string().min(1).optional(),\n argsSchema: ToolArgsSchemaSpec.optional(),\n config: JsonRecord.optional(),\n metadata: JsonRecord.optional(),\n});\nexport type ToolBindingSpec = z.infer<typeof ToolBindingSpec>;\n\nexport const AgentSpecModelHints = z.object({\n preferredProviders: z.array(z.string().min(1)).optional(),\n preferredModels: z.array(z.string().min(1)).optional(),\n fallbackChain: z.array(z.string().min(1)).optional(),\n});\nexport type AgentSpecModelHints = z.infer<typeof AgentSpecModelHints>;\n\nexport const AgentSpecAuditConfig = z.object({\n redactionLevel: z.enum(['none', 'standard', 'strict']).optional(),\n pii: z.boolean().optional(),\n});\nexport type AgentSpecAuditConfig = z.infer<typeof AgentSpecAuditConfig>;\n\nexport const AgentSpec = z.object({\n id: z.string().min(1),\n version: z.string().min(1),\n role: z.string().optional(),\n description: z.string().optional(),\n capabilities: z.array(AgentCapability),\n tools: z.array(ToolBindingSpec),\n contextPolicy: AgentSpecContextPolicy,\n modelHints: AgentSpecModelHints.optional(),\n audit: AgentSpecAuditConfig.optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AgentSpec = z.infer<typeof AgentSpec>;\n","import { z } from 'zod';\n\nconst JsonRecord = z.record(z.string(), z.unknown());\n\nexport const AUDIT_ACTIONS = [\n 'model.select',\n 'model.fallback',\n 'tool.allow',\n 'tool.deny',\n 'wait_user.request',\n 'sandbox.decide',\n 'run.cancel',\n 'run.pause',\n 'run.resume',\n 'memory.write',\n] as const;\n\nexport const AUDIT_DECISION_OUTCOMES = [\n 'allowed',\n 'denied',\n 'fallback',\n 'retry',\n 'cancelled',\n 'paused',\n 'resumed',\n 'requested',\n 'recorded',\n] as const;\n\nexport const AuditActor = z.object({\n kind: z.enum(['system', 'host', 'agent', 'model', 'tool', 'user']),\n id: z.string().min(1).optional(),\n name: z.string().min(1).optional(),\n});\nexport type AuditActor = z.infer<typeof AuditActor>;\n\nexport const AuditDecision = z.object({\n outcome: z.enum(AUDIT_DECISION_OUTCOMES),\n reason: z.string().optional(),\n policy: z.string().optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditDecision = z.infer<typeof AuditDecision>;\n\nexport const AuditEvidence = z.object({\n kind: z.string().min(1),\n ref: z.string().min(1).optional(),\n summary: z.string().optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditEvidence = z.infer<typeof AuditEvidence>;\n\nexport const AuditCostDelta = z.object({\n tokensInput: z.number().int().nonnegative().optional(),\n tokensOutput: z.number().int().nonnegative().optional(),\n totalCostUsd: z.number().nonnegative().optional(),\n latencyMs: z.number().nonnegative().optional(),\n});\nexport type AuditCostDelta = z.infer<typeof AuditCostDelta>;\n\nexport const AuditScope = z.object({\n conversationId: z.string().min(1).optional(),\n runId: z.string().min(1).optional(),\n parentRunId: z.string().min(1).optional(),\n turnId: z.string().min(1).optional(),\n traceId: z.string().min(1).optional(),\n agentSpecId: z.string().min(1).optional(),\n toolCallId: z.string().min(1).optional(),\n toolName: z.string().min(1).optional(),\n modelId: z.string().min(1).optional(),\n nodeId: z.string().min(1).optional(),\n metadata: JsonRecord.optional(),\n});\nexport type AuditScope = z.infer<typeof AuditScope>;\n\n/**\n * 标准审计信封。\n *\n * 中文备注:\n * - action 保持 string,以便 host 扩展自己的动作名;\n * - decision/evidence/costDelta 都是可选事实片段,避免把所有审计场景压成同一种形状;\n * - envelope 必须追加只读,更新/撤回应追加新的补偿 envelope。\n */\nexport const AuditEnvelope = z.object({\n envelopeId: z.string().min(1),\n runId: z.string().min(1),\n parentRunId: z.string().min(1).optional(),\n ts: z.number().int().nonnegative(),\n actor: AuditActor,\n action: z.string().min(1),\n decision: AuditDecision.optional(),\n evidence: z.array(AuditEvidence).optional(),\n costDelta: AuditCostDelta.optional(),\n scope: AuditScope.optional(),\n});\nexport type AuditEnvelope = z.infer<typeof AuditEnvelope>;\n","import { z } from 'zod';\nimport { AuditEnvelope } from './audit';\n\nexport const BaseEvent = z.object({\n id: z.string(),\n conversation_id: z.string(),\n timestamp: z.number(),\n metadata: z.record(z.unknown()).optional(),\n version: z.literal(1).default(1),\n turn_id: z.string(),\n ephemeral: z.boolean().optional(),\n});\n\nexport const ToolCallPhase = z.enum(['start', 'update', 'complete', 'error']);\nexport const Status = z.enum(['loading', 'success', 'error']);\nexport const AgentTodoStatus = z.enum(['pending', 'in_progress', 'completed', 'cancelled']);\n\nexport const AgentTodoItem = z.object({\n id: z.string(),\n content: z.string(),\n status: AgentTodoStatus,\n});\n\nexport const ProviderReasoningDetailsPayload = z.array(z.unknown());\nexport type ProviderReasoningDetailsPayload = z.infer<typeof ProviderReasoningDetailsPayload>;\n\nexport const ToolCallDecisionPayload = z.object({\n args: z.record(z.any()).optional(),\n tool_calls: z.array(z.unknown()).optional(),\n /**\n * 不透明 provider reasoning replay blocks。\n *\n * RuntimeEvent 层的标准位置是 assistant 产出事件携带 reasoning_details;\n * context-manager 会把它回放到 AiMessage.metadata.reasoning_details。\n */\n reasoning_details: ProviderReasoningDetailsPayload.optional(),\n}).passthrough();\n\nexport type ToolCallDecisionPayload = z.infer<typeof ToolCallDecisionPayload>;\n\nexport const RuntimeEvent = z.discriminatedUnion('type', [\n BaseEvent.extend({\n type: z.literal('user_input'),\n content: z.string(),\n raw_content: z.string().optional(),\n source: z.enum(['user', 'editor', 'system']).default('user'),\n }),\n BaseEvent.extend({\n type: z.literal('thought'),\n content: z.string(),\n thought_message_id: z.string().optional(),\n delta: z.string().optional(),\n is_complete: z.boolean().default(false),\n }),\n BaseEvent.extend({\n type: z.literal('tool_call_decision'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: ToolCallPhase,\n status: Status,\n args: z.record(z.any()).optional(),\n payload: ToolCallDecisionPayload.optional(),\n parent_tool_call_id: z.string().optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('tool_process'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: ToolCallPhase,\n status: Status,\n args: z.record(z.any()).optional(),\n payload: z.record(z.any()).optional(),\n parent_tool_call_id: z.string().optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('tool_output'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n status: z.enum(['success', 'error']),\n output: z.any().optional(),\n payload: z.record(z.any()).optional(),\n error: z.string().optional(),\n duration_ms: z.number().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('todo_updated'),\n todo_list_id: z.string(),\n todo_list_version: z.number().int().nonnegative(),\n items: z.array(AgentTodoItem),\n }),\n BaseEvent.extend({\n type: z.literal('subrun_trace'),\n parent_tool_call_id: z.string(),\n subrun_id: z.string(),\n subrun_parent_id: z.string().optional(),\n kind: z.enum([\n 'thought_delta',\n 'thought_complete',\n 'tool_call_decision',\n 'tool_process',\n 'tool_output',\n 'final_answer_chunk',\n 'final_answer',\n ]),\n delta: z.string().optional(),\n content: z.string().optional(),\n tool_name: z.string().optional(),\n tool_call_id: z.string().optional(),\n phase: ToolCallPhase.optional(),\n status: Status.optional(),\n args: z.unknown().optional(),\n output: z.unknown().optional(),\n duration_ms: z.number().optional(),\n meta: z.record(z.unknown()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('requires_user_interaction'),\n form: z.any().optional(),\n interaction_type: z.string().optional(),\n prompt: z.string().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('audit_envelope'),\n envelope: AuditEnvelope,\n }),\n BaseEvent.extend({\n type: z.literal('final_answer'),\n answer_id: z.string(),\n content: z.string(),\n is_complete: z.boolean().default(true),\n reasoning_details: ProviderReasoningDetailsPayload.optional(),\n meta: z.record(z.any()).optional(),\n }),\n BaseEvent.extend({\n type: z.literal('final_answer_chunk'),\n answer_id: z.string(),\n seq: z.number().int().nonnegative(),\n content: z.string(),\n is_last: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('history_summary'),\n content: z.string(),\n replaced_message_ids: z.array(z.string()),\n summary_seq: z.number().int().nonnegative(),\n original_message_count: z.number().int().nonnegative().optional(),\n compression_ratio: z.number().min(0).max(1).optional(),\n included_old_summary: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('error'),\n error: z.string(),\n details: z.any().optional(),\n error_code: z.string().optional(),\n retryable: z.boolean().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('control'),\n op: z.enum(['truncate_after', 'replace', 'redo', 'branch']),\n target_id: z.string().optional(),\n reason: z.string().optional(),\n meta: z.any().optional(),\n }),\n BaseEvent.extend({\n type: z.literal('stream_end'),\n reason: z.enum(['complete', 'error', 'interrupted', 'timeout']).optional(),\n reason_message: z.string().optional(),\n stats: z.object({\n total_events: z.number().optional(),\n duration_ms: z.number().optional(),\n error_count: z.number().optional(),\n }).optional(),\n }),\n]);\n\nexport type RuntimeEvent = z.infer<typeof RuntimeEvent>;\nexport type UserInputEvent = Extract<RuntimeEvent, { type: 'user_input' }>;\nexport type ThoughtEvent = Extract<RuntimeEvent, { type: 'thought' }>;\nexport type ToolCallDecisionEvent = Extract<RuntimeEvent, { type: 'tool_call_decision' }>;\nexport type ToolProcessEvent = Extract<RuntimeEvent, { type: 'tool_process' }>;\nexport type ToolOutputEvent = Extract<RuntimeEvent, { type: 'tool_output' }>;\nexport type TodoUpdatedEvent = Extract<RuntimeEvent, { type: 'todo_updated' }>;\nexport type SubRunTraceEvent = Extract<RuntimeEvent, { type: 'subrun_trace' }>;\nexport type RequiresUserInteractionEvent = Extract<RuntimeEvent, { type: 'requires_user_interaction' }>;\nexport type AuditEnvelopeEvent = Extract<RuntimeEvent, { type: 'audit_envelope' }>;\nexport type FinalAnswerEvent = Extract<RuntimeEvent, { type: 'final_answer' }>;\nexport type FinalAnswerChunkEvent = Extract<RuntimeEvent, { type: 'final_answer_chunk' }>;\nexport type HistorySummaryEvent = Extract<RuntimeEvent, { type: 'history_summary' }>;\nexport type ErrorEvent = Extract<RuntimeEvent, { type: 'error' }>;\nexport type ControlEvent = Extract<RuntimeEvent, { type: 'control' }>;\nexport type StreamEndEvent = Extract<RuntimeEvent, { type: 'stream_end' }>;\n\nexport const validateRuntimeEvent = (event: unknown) => RuntimeEvent.safeParse(event);\nexport const validateRuntimeEvents = (events: unknown[]) => z.array(RuntimeEvent).safeParse(events);\n\nexport const createUserInputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n options: Partial<UserInputEvent> = {},\n): UserInputEvent => ({\n type: 'user_input',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n source: 'user',\n ...options,\n});\n\nexport const createThoughtEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n options: Partial<ThoughtEvent> = {},\n): ThoughtEvent => ({\n type: 'thought',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n is_complete: false,\n ...options,\n});\n\nexport const createToolCallDecisionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n options: Partial<ToolCallDecisionEvent> = {},\n): ToolCallDecisionEvent => ({\n type: 'tool_call_decision',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n ...options,\n});\n\nexport const createToolProcessEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n options: Partial<ToolProcessEvent> = {},\n): ToolProcessEvent => ({\n type: 'tool_process',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n ...options,\n});\n\nexport const createSubRunTraceEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n parentToolCallId: string,\n subrunId: string,\n kind: SubRunTraceEvent['kind'],\n options: Partial<SubRunTraceEvent> = {},\n): SubRunTraceEvent => ({\n type: 'subrun_trace',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n ephemeral: true,\n parent_tool_call_id: parentToolCallId,\n subrun_id: subrunId,\n kind,\n ...options,\n});\n\nexport const createToolOutputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n output: unknown,\n status: 'success' | 'error' = 'success',\n options: Partial<ToolOutputEvent> = {},\n): ToolOutputEvent => ({\n type: 'tool_output',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n tool_name: toolName,\n tool_call_id: toolCallId,\n status,\n output,\n ...options,\n});\n\nexport const createTodoUpdatedEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n todoListId: string,\n todoListVersion: number,\n items: TodoUpdatedEvent['items'],\n options: Partial<TodoUpdatedEvent> = {},\n): TodoUpdatedEvent => ({\n type: 'todo_updated',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n todo_list_id: todoListId,\n todo_list_version: todoListVersion,\n items,\n ...options,\n});\n\nexport const createFinalAnswerEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n content: string,\n options: Partial<FinalAnswerEvent> = {},\n): FinalAnswerEvent => ({\n type: 'final_answer',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n answer_id: answerId,\n content,\n is_complete: true,\n ...options,\n});\n\nexport const createAuditEnvelopeEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n envelope: AuditEnvelopeEvent['envelope'],\n options: Partial<AuditEnvelopeEvent> = {},\n): AuditEnvelopeEvent => ({\n type: 'audit_envelope',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: envelope.ts,\n version: 1,\n envelope,\n metadata: {\n audit_action: envelope.action,\n run_context: {\n runId: envelope.runId,\n parentId: envelope.parentRunId,\n traceId: envelope.scope?.traceId,\n },\n },\n ...options,\n});\n\nexport const createFinalAnswerChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n seq: number,\n content: string,\n options: Partial<FinalAnswerChunkEvent> = {},\n): FinalAnswerChunkEvent => ({\n type: 'final_answer_chunk',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n answer_id: answerId,\n seq,\n content,\n ...options,\n});\n\nexport const createHistorySummaryEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n content: string,\n replacedMessageIds: string[],\n summarySeq: number,\n options: Partial<HistorySummaryEvent> = {},\n): HistorySummaryEvent => ({\n type: 'history_summary',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n content,\n replaced_message_ids: replacedMessageIds,\n summary_seq: summarySeq,\n ...options,\n});\n\nexport const createErrorEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n error: string,\n options: Partial<ErrorEvent> = {},\n): ErrorEvent => ({\n type: 'error',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n error,\n ...options,\n});\n\nexport const createStreamEndEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<StreamEndEvent> = {},\n): StreamEndEvent => ({\n type: 'stream_end',\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp: Date.now(),\n version: 1,\n ...options,\n});\n","export const DEFAULT_MAX_STEPS = 80;\n","import { z } from 'zod';\n\nexport const ExecutionTraceContext = z.object({\n execution_id: z.string().describe('The unique identifier for a single, complete execution flow.'),\n trace_id: z.string().optional().describe('An optional trace ID for correlating logs in an APM system.'),\n});\n\nconst EventEnvelopeSchema = z.object({\n seq: z.number().int().nonnegative().describe('A monotonically increasing sequence number within a single execution.'),\n timestamp: z.number().describe('The high-precision timestamp of when the event occurred.'),\n trace: ExecutionTraceContext,\n source: z.string().describe(\"The origin of the event, e.g., 'ai', 'tool:file_reader', 'system:summary'.\"),\n payload: z.unknown(),\n render_hint: z.object({\n card: z.enum(['normal', 'collapsible', 'none', 'image', 'interactive']).optional().describe('Hint for how the UI card should be rendered.'),\n content: z.enum(['markdown', 'text', 'json', 'image_url', 'code']).default('text').describe('Hint for how the content itself should be interpreted.'),\n }).optional(),\n run_location: z.enum(['frontend', 'backend']).optional().describe('Specifies where a tool action should be or was executed.'),\n});\n\nexport const EventEnvelope = EventEnvelopeSchema;\n\ntype EventEnvelopeBase = z.infer<typeof EventEnvelopeSchema>;\n\nexport type EventEnvelope<TPayload = unknown> = Omit<EventEnvelopeBase, 'payload'> & {\n payload: TPayload;\n};\n\nexport type ExecutionTraceContext = z.infer<typeof ExecutionTraceContext>;\n","import { z } from 'zod';\n\nexport const BaseSSEEvent = z.object({\n id: z.string(),\n timestamp: z.number(),\n conversation_id: z.string(),\n turn_id: z.string(),\n metadata: z.record(z.unknown()).optional(),\n});\n\nexport type BaseSSEEvent = z.infer<typeof BaseSSEEvent>;\n\nexport const SSEThoughtEvent = BaseSSEEvent.extend({\n type: z.literal('thought'),\n thought_message_id: z.string().optional(),\n delta: z.string().optional(),\n content: z.string().optional(),\n is_complete: z.boolean().default(false),\n});\n\nexport type SSEThoughtEvent = z.infer<typeof SSEThoughtEvent>;\n\nexport const SSEFinalAnswerChunkEvent = BaseSSEEvent.extend({\n type: z.literal('final_answer_chunk'),\n answer_id: z.string(),\n seq: z.number().int().nonnegative(),\n chunk: z.string(),\n is_last: z.boolean().optional(),\n});\n\nexport type SSEFinalAnswerChunkEvent = z.infer<typeof SSEFinalAnswerChunkEvent>;\n\nexport const SSEFinalAnswerEvent = BaseSSEEvent.extend({\n type: z.literal('final_answer'),\n answer_id: z.string(),\n content: z.string(),\n meta: z.record(z.any()).optional(),\n});\n\nexport type SSEFinalAnswerEvent = z.infer<typeof SSEFinalAnswerEvent>;\n\nexport const SSEMarkdownChunkEvent = BaseSSEEvent.extend({\n type: z.literal('markdown_chunk'),\n content_type: z.enum(['text', 'code', 'table', 'image']).default('text'),\n text: z.string(),\n seq: z.number().optional(),\n});\n\nexport type SSEMarkdownChunkEvent = z.infer<typeof SSEMarkdownChunkEvent>;\n\nconst BaseSSEToolLifecycleEvent = BaseSSEEvent.extend({\n tool_name: z.string(),\n tool_call_id: z.string(),\n phase: z.enum(['start', 'update', 'complete', 'error']),\n status: z.enum(['loading', 'success', 'error']),\n args: z.any().optional(),\n payload: z.any().optional(),\n meta: z.record(z.any()).optional(),\n});\n\nexport const SSEToolCallDecisionEvent = BaseSSEToolLifecycleEvent.extend({\n type: z.literal('tool_call_decision'),\n});\n\nexport type SSEToolCallDecisionEvent = z.infer<typeof SSEToolCallDecisionEvent>;\n\nexport const SSEToolProcessEvent = BaseSSEToolLifecycleEvent.extend({\n type: z.literal('tool_process'),\n});\n\nexport type SSEToolProcessEvent = z.infer<typeof SSEToolProcessEvent>;\n\nexport const SSEToolOutputEvent = BaseSSEEvent.extend({\n type: z.literal('tool_output'),\n tool_name: z.string(),\n tool_call_id: z.string(),\n status: z.enum(['success', 'error']),\n output: z.any().optional(),\n payload: z.record(z.any()).optional(),\n duration_ms: z.number().optional(),\n});\n\nexport type SSEToolOutputEvent = z.infer<typeof SSEToolOutputEvent>;\n\nexport const SSETodoUpdatedEvent = BaseSSEEvent.extend({\n type: z.literal('todo_updated'),\n todo_list_id: z.string(),\n todo_list_version: z.number().int().nonnegative(),\n items: z.array(z.object({\n id: z.string(),\n content: z.string(),\n status: z.enum(['pending', 'in_progress', 'completed', 'cancelled']),\n })),\n});\n\nexport type SSETodoUpdatedEvent = z.infer<typeof SSETodoUpdatedEvent>;\n\nexport const SSESubRunTraceEvent = BaseSSEEvent.extend({\n type: z.literal('subrun_trace'),\n parent_tool_call_id: z.string(),\n subrun_id: z.string(),\n subrun_parent_id: z.string().optional(),\n kind: z.enum([\n 'thought_delta',\n 'thought_complete',\n 'tool_call_decision',\n 'tool_process',\n 'tool_output',\n 'final_answer_chunk',\n 'final_answer',\n ]),\n delta: z.string().optional(),\n content: z.string().optional(),\n tool_name: z.string().optional(),\n tool_call_id: z.string().optional(),\n phase: z.enum(['start', 'update', 'complete', 'error']).optional(),\n status: z.enum(['loading', 'success', 'error']).optional(),\n args: z.unknown().optional(),\n output: z.unknown().optional(),\n duration_ms: z.number().optional(),\n meta: z.record(z.unknown()).optional(),\n});\n\nexport type SSESubRunTraceEvent = z.infer<typeof SSESubRunTraceEvent>;\n\nexport const SSERequiresUserInteractionEvent = BaseSSEEvent.extend({\n type: z.literal('requires_user_interaction'),\n form: z.any().optional(),\n interaction_type: z.string().optional(),\n prompt: z.string().optional(),\n});\n\nexport type SSERequiresUserInteractionEvent = z.infer<typeof SSERequiresUserInteractionEvent>;\n\nexport const SSEErrorEvent = BaseSSEEvent.extend({\n type: z.literal('error'),\n error: z.string(),\n details: z.any().optional(),\n error_code: z.string().optional(),\n retryable: z.boolean().optional(),\n});\n\nexport type SSEErrorEvent = z.infer<typeof SSEErrorEvent>;\n\nexport const SSEStreamEndEvent = BaseSSEEvent.extend({\n type: z.literal('stream_end'),\n reason: z.enum(['complete', 'error', 'interrupted', 'timeout']).optional(),\n reason_message: z.string().optional(),\n stats: z.object({\n total_events: z.number().optional(),\n duration_ms: z.number().optional(),\n error_count: z.number().optional(),\n benchmark: z.record(z.unknown()).optional(),\n }).optional(),\n});\n\nexport type SSEStreamEndEvent = z.infer<typeof SSEStreamEndEvent>;\n\nexport const SSEHistorySummaryEvent = BaseSSEEvent.extend({\n type: z.literal('history_summary'),\n summary_id: z.string(),\n content: z.string(),\n original_message_count: z.number().int().nonnegative(),\n summary_seq: z.number().int().nonnegative(),\n});\n\nexport type SSEHistorySummaryEvent = z.infer<typeof SSEHistorySummaryEvent>;\n\nexport const SSESummarizationStartEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_start'),\n originalMessages: z.number().optional(),\n});\n\nexport type SSESummarizationStartEvent = z.infer<typeof SSESummarizationStartEvent>;\n\nexport const SSESummarizationEndEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_end'),\n originalMessages: z.number().optional(),\n compressedMessages: z.number().optional(),\n compressionRatio: z.string().optional(),\n timeSaved: z.string().optional(),\n});\n\nexport type SSESummarizationEndEvent = z.infer<typeof SSESummarizationEndEvent>;\n\nexport const SSESummarizationErrorEvent = BaseSSEEvent.extend({\n type: z.literal('summarization_error'),\n error: z.string(),\n});\n\nexport type SSESummarizationErrorEvent = z.infer<typeof SSESummarizationErrorEvent>;\n\nexport const SSEEvent = z.discriminatedUnion('type', [\n SSEThoughtEvent,\n SSEFinalAnswerChunkEvent,\n SSEFinalAnswerEvent,\n SSEMarkdownChunkEvent,\n SSEToolCallDecisionEvent,\n SSEToolProcessEvent,\n SSEToolOutputEvent,\n SSETodoUpdatedEvent,\n SSESubRunTraceEvent,\n SSERequiresUserInteractionEvent,\n SSEErrorEvent,\n SSEStreamEndEvent,\n SSEHistorySummaryEvent,\n SSESummarizationStartEvent,\n SSESummarizationEndEvent,\n SSESummarizationErrorEvent,\n]);\n\nexport type SSEEvent = z.infer<typeof SSEEvent>;\n\nexport const validateSSEEvent = (event: unknown) => SSEEvent.safeParse(event);\n\nexport const createSSEThoughtEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: { thought_message_id?: string; delta?: string; content?: string; is_complete?: boolean } = {},\n): SSEThoughtEvent => ({\n type: 'thought',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n is_complete: false,\n ...options,\n});\n\nexport const createSSEFinalAnswerChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n seq: number,\n chunk: string,\n options: { is_last?: boolean } = {},\n): SSEFinalAnswerChunkEvent => ({\n type: 'final_answer_chunk',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n answer_id: answerId,\n seq,\n chunk,\n ...options,\n});\n\nexport const createSSEFinalAnswerEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n answerId: string,\n content: string,\n options: Partial<SSEFinalAnswerEvent> = {},\n): SSEFinalAnswerEvent => ({\n type: 'final_answer',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n answer_id: answerId,\n content,\n ...options,\n});\n\nexport const createSSEMarkdownChunkEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n text: string,\n options: Partial<SSEMarkdownChunkEvent> = {},\n): SSEMarkdownChunkEvent => ({\n type: 'markdown_chunk',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n text,\n content_type: 'text',\n ...options,\n});\n\nexport const createSSEToolCallDecisionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n phase: SSEToolCallDecisionEvent['phase'],\n status: SSEToolCallDecisionEvent['status'],\n options: Partial<SSEToolCallDecisionEvent> = {},\n): SSEToolCallDecisionEvent => ({\n type: 'tool_call_decision',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase,\n status,\n ...options,\n});\n\nexport const createSSEToolProcessEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n phase: SSEToolProcessEvent['phase'],\n status: SSEToolProcessEvent['status'],\n options: Partial<SSEToolProcessEvent> = {},\n): SSEToolProcessEvent => ({\n type: 'tool_process',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n phase,\n status,\n ...options,\n});\n\nexport const createSSEToolOutputEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n toolName: string,\n toolCallId: string,\n status: SSEToolOutputEvent['status'],\n output: unknown,\n options: Partial<SSEToolOutputEvent> = {},\n): SSEToolOutputEvent => ({\n type: 'tool_output',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n tool_name: toolName,\n tool_call_id: toolCallId,\n status,\n output,\n ...options,\n});\n\nexport const createSSETodoUpdatedEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n todoListId: string,\n todoListVersion: number,\n items: SSETodoUpdatedEvent['items'],\n options: Partial<SSETodoUpdatedEvent> = {},\n): SSETodoUpdatedEvent => ({\n type: 'todo_updated',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n todo_list_id: todoListId,\n todo_list_version: todoListVersion,\n items,\n ...options,\n});\n\nexport const createSSESubRunTraceEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n parentToolCallId: string,\n subrunId: string,\n kind: SSESubRunTraceEvent['kind'],\n options: Partial<SSESubRunTraceEvent> = {},\n): SSESubRunTraceEvent => ({\n type: 'subrun_trace',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n parent_tool_call_id: parentToolCallId,\n subrun_id: subrunId,\n kind,\n ...options,\n});\n\nexport const createSSERequiresUserInteractionEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<SSERequiresUserInteractionEvent> = {},\n): SSERequiresUserInteractionEvent => ({\n type: 'requires_user_interaction',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n ...options,\n});\n\nexport const createSSEErrorEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n error: string,\n options: Partial<SSEErrorEvent> = {},\n): SSEErrorEvent => ({\n type: 'error',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n error,\n ...options,\n});\n\nexport const createSSEStreamEndEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n options: Partial<SSEStreamEndEvent> = {},\n): SSEStreamEndEvent => ({\n type: 'stream_end',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n ...options,\n});\n\nexport const createSSEHistorySummaryEvent = (\n id: string,\n conversationId: string,\n turnId: string,\n summaryId: string,\n content: string,\n originalMessageCount: number,\n summarySeq: number,\n options: Partial<SSEHistorySummaryEvent> = {},\n): SSEHistorySummaryEvent => ({\n type: 'history_summary',\n id,\n timestamp: Date.now(),\n conversation_id: conversationId,\n turn_id: turnId,\n summary_id: summaryId,\n content,\n original_message_count: originalMessageCount,\n summary_seq: summarySeq,\n ...options,\n});\n","import type { ToolParameterProperty, ToolParameterSchema } from '../runtime-kernel';\n\nfunction serializeToolProperty(property: ToolParameterProperty): Record<string, unknown> {\n return {\n type: property.type,\n description: property.description,\n ...(property.default !== undefined ? { default: property.default } : {}),\n ...(property.enum !== undefined ? { enum: [...property.enum] } : {}),\n ...(property.properties !== undefined\n ? {\n properties: Object.fromEntries(\n Object.entries(property.properties).map(([key, value]) => [key, serializeToolProperty(value)]),\n ),\n }\n : {}),\n ...(property.items !== undefined ? { items: serializeToolProperty(property.items) } : {}),\n ...(property.required !== undefined ? { required: [...property.required] } : {}),\n };\n}\n\nexport function serializeToolParameters(schema: ToolParameterSchema): Record<string, unknown> {\n return {\n type: schema.type,\n properties: Object.fromEntries(\n Object.entries(schema.properties).map(([key, value]) => [key, serializeToolProperty(value)]),\n ),\n ...(schema.required !== undefined ? { required: [...schema.required] } : {}),\n ...(schema.additionalProperties !== undefined\n ? { additionalProperties: schema.additionalProperties }\n : {}),\n };\n}\n","import type { AgentAiEngine } from '../ports';\nimport type { DefinedAgent, LinnkitQuickstartConfig } from './types';\n\nfunction isAgentAiEngine(value: unknown): value is AgentAiEngine {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as { chatCompletion?: unknown }).chatCompletion === 'function' &&\n typeof (value as { chatCompletionStream?: unknown }).chatCompletionStream === 'function'\n );\n}\n\nfunction isLlmFactory(value: unknown): value is () => AgentAiEngine | Promise<AgentAiEngine> {\n return typeof value === 'function';\n}\n\nfunction validateAgents(agents: readonly DefinedAgent[]): void {\n if (!Array.isArray(agents) || agents.length === 0) {\n throw new Error('[linnkit] defineConfig requires at least one agent.');\n }\n\n const seen = new Set<string>();\n for (const agent of agents) {\n const id = agent?.spec?.id;\n if (typeof id !== 'string' || id.trim().length === 0) {\n throw new Error('[linnkit] defineConfig received an agent without spec.id.');\n }\n if (seen.has(id)) {\n throw new Error(`[linnkit] duplicate agent id in config: ${id}`);\n }\n seen.add(id);\n }\n}\n\n/**\n * Quickstart 配置构造器。\n *\n * 中文备注:\n * - 只做轻量运行时校验,避免 CLI 加载坏 config 后给出晦涩堆栈;\n * - 不接管生产 host 的完整配置系统。\n */\nexport function defineConfig(config: LinnkitQuickstartConfig): LinnkitQuickstartConfig {\n validateAgents(config.agents);\n if (!isAgentAiEngine(config.llm) && !isLlmFactory(config.llm)) {\n throw new Error('[linnkit] defineConfig requires llm to be an AgentAiEngine or a factory.');\n }\n\n return {\n agents: [...config.agents],\n llm: config.llm,\n defaultModelId: config.defaultModelId,\n };\n}\n\nexport async function resolveConfiguredLlm(\n config: LinnkitQuickstartConfig,\n): Promise<AgentAiEngine> {\n const llm = typeof config.llm === 'function' ? await config.llm() : config.llm;\n if (!isAgentAiEngine(llm)) {\n throw new Error('[linnkit] configured llm factory did not return an AgentAiEngine.');\n }\n return llm;\n}\n","/**\n * Isomorphic ID generators.\n *\n * 设计约束:\n * - linnkit 是同构 package(既会被 Node-side host 使用,也会被前端 renderer 通过\n * `linnkit/runtime-kernel/events` 等子入口透传 transitive import 拖入 bundle)。\n * - 因此本文件不允许 `import { randomUUID } from 'crypto'`:那会触发 vite\n * `__vite-browser-external` shim,构建时 named import 解析失败。\n * - 改用 Web Crypto API(`globalThis.crypto.randomUUID`),它在所有现代浏览器\n * 与 Node 19+ 上都内置;老 Node 也可通过 `globalThis.crypto.randomUUID` 访问\n * (Node 14.17+ 在 `node:crypto` 暴露了 `webcrypto`,并自 19 起把 `crypto`\n * 挂到 globalThis)。\n * - 极端 fallback:若运行环境同时缺 Web Crypto,则降级为 Math.random RFC4122 v4\n * 生成器;这些 ID 仅用于会话/消息/run/exec/trace 内部去重展示,不承担加密\n * 强度要求,降级在语义上是安全的。\n */\n\ntype WebCryptoLike = { randomUUID?: () => string };\n\nfunction isoRandomUUID(): string {\n const c = (globalThis as unknown as { crypto?: WebCryptoLike }).crypto;\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n // Fallback RFC4122 v4(非加密强度)\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n const v = ch === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nfunction shortRandomId(prefix: string): string {\n return `${prefix}-${isoRandomUUID().replace(/-/g, '').slice(0, 12)}`;\n}\n\nexport function generateMessageId(): string {\n return shortRandomId('msg');\n}\n\nexport function generateConversationId(): string {\n return shortRandomId('conv');\n}\n\nexport function generateRunId(): string {\n return shortRandomId('run');\n}\n\nexport function generateAuditEnvelopeId(): string {\n return shortRandomId('audit');\n}\n\nexport function generateAuditEnvelopeEventId(): string {\n return shortRandomId('audit_evt');\n}\n\nexport function generateExecutionId(): string {\n return shortRandomId('exec');\n}\n\nexport function generateTraceId(): string {\n return shortRandomId('trace');\n}\n","export { GraphExecutor } from './engine';\nexport { GraphAgentExecutor } from './executor';\nexport { LlmNode } from './nodes/llmNode';\nexport { ToolNode } from './nodes/toolNode';\nexport { UserNode } from './nodes/userNode';\nexport { WaitUserNode } from './nodes/waitUserNode';\nexport { AnswerNode } from './nodes/answerNode';\nexport { MemoryCheckpointer } from './checkpointer/memoryCheckpointer';\nexport { summarizeCheckpoint } from './checkpointer/base';\nexport { MemoryEventStore } from './event-store/memoryEventStore';\nexport { createMonotonicEventIdFactory } from './event-store/base';\nexport { ENGINE_STATE_SCHEMA_VERSION } from './types';\n\nexport type { GraphAgentExecutorDependencies } from './executor';\nexport type {\n GraphExecutorContextBuilder,\n GraphExecutorContextBuildInput,\n GraphExecutorContextBuildOutput,\n PendingContextRuntimeEvent,\n} from './executorContextBuilder';\nexport type {\n Checkpointer,\n CheckpointListFilter,\n CheckpointMeta,\n CheckpointSummary,\n} from './checkpointer/base';\nexport type { EventRangeOptions, EventStore, PersistedEvent } from './event-store/base';\nexport type { EngineState, ExecutorLocalState, GraphNode } from './types';\n","export enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\ntype LogPayload = Record<string, unknown> | undefined;\n\nconst DEFAULT_LEVEL = LogLevel.DEBUG;\n\nfunction formatPrefix(level: keyof Console, moduleName: string): string {\n return `[${new Date().toISOString()}] [${level.toUpperCase()}] [${moduleName}]`;\n}\n\nfunction shouldLog(level: LogLevel): boolean {\n return level >= DEFAULT_LEVEL;\n}\n\nexport class Logger {\n constructor(private readonly moduleName: string) {}\n\n debug(message: string, data?: LogPayload): void {\n this.log(LogLevel.DEBUG, 'debug', message, data);\n }\n\n info(message: string, data?: LogPayload): void {\n this.log(LogLevel.INFO, 'info', message, data);\n }\n\n warn(message: string, data?: LogPayload): void {\n this.log(LogLevel.WARN, 'warn', message, data);\n }\n\n error(message: string, data?: LogPayload): void {\n this.log(LogLevel.ERROR, 'error', message, data);\n }\n\n private log(level: LogLevel, method: keyof Console, message: string, data?: LogPayload): void {\n if (!shouldLog(level)) {\n return;\n }\n const prefix = formatPrefix(method, this.moduleName);\n const fullMessage = `${prefix} ${message}`;\n if (data === undefined) {\n switch (method) {\n case 'debug':\n console.debug(fullMessage);\n break;\n case 'info':\n console.info(fullMessage);\n break;\n case 'warn':\n console.warn(fullMessage);\n break;\n case 'error':\n console.error(fullMessage);\n break;\n default:\n console.log(fullMessage);\n }\n return;\n }\n switch (method) {\n case 'debug':\n console.debug(fullMessage, data);\n break;\n case 'info':\n console.info(fullMessage, data);\n break;\n case 'warn':\n console.warn(fullMessage, data);\n break;\n case 'error':\n console.error(fullMessage, data);\n break;\n default:\n console.log(fullMessage, data);\n }\n }\n}\n","import type { TelemetryPort } from './telemetryPort';\n\nexport const noopTelemetry: TelemetryPort = {\n emit(): void {\n // Intentionally empty: optional capability should preserve current behavior by default.\n },\n async flush(): Promise<void> {\n // No buffered state.\n },\n};\n","import type { ToolExecutionContext } from '../tools/toolExecutionContext';\nimport type { ToolCallExtraContent } from '../llm';\nimport type {\n AgentSpecSystemReminderPolicy,\n AgentSpecToolObservationGovernancePolicy,\n RuntimeEvent,\n} from '../../contracts';\n\nexport interface ExecutorLocalState {\n stepCount: number;\n phase?: 'running' | 'force_final_answer' | 'force_tools' | string;\n maxSteps?: number;\n remainingSteps?: number;\n finalStepPolicy?: 'final_answer' | 'force_tools';\n finalStepForcedTools?: string[];\n lastStepsHintThreshold?: number;\n systemReminderPolicy?: AgentSpecSystemReminderPolicy;\n toolObservationPolicy?: AgentSpecToolObservationGovernancePolicy;\n contextCheckpointToolName?: string;\n runLockedModelId?: string;\n}\n\nexport interface EngineLocalState extends Record<string, unknown> {\n conversationId?: string;\n turnId?: string;\n request?: Record<string, unknown>;\n toolContext?: ToolExecutionContext;\n history?: RuntimeEvent[];\n newEvents?: RuntimeEvent[];\n executorLocal?: ExecutorLocalState;\n pendingToolCalls?: StandardToolCall[];\n pendingInteractionSpec?: Record<string, unknown>;\n lastToolResult?: Record<string, unknown>;\n finalAnswer?: string;\n answerId?: string;\n chunkSeq?: number;\n signal?: AbortSignal;\n sseSink?: (evt: unknown) => RuntimeEvent[] | void;\n summarizationCallbacks?: {\n onSummarizationStart?: () => void;\n onSummarizationEnd?: (summaryInfo: unknown) => void;\n };\n}\n\nexport const ENGINE_STATE_SCHEMA_VERSION = 1;\n\nexport interface EngineState {\n nodeId: string;\n /**\n * 顶层 schema version,供持久化后端在不解读 local 结构时也能快速判断版本。\n *\n * 当前 save 路径会统一写入该字段;类型先保持向后兼容,直到旧测试/fixture 全部收敛。\n */\n schemaVersion?: number;\n local?: EngineLocalState;\n}\n\nexport interface NodeResult {\n kind: 'route' | 'yield' | 'pause';\n nextNodeId?: string;\n events?: RuntimeEvent[];\n}\n\nexport interface GraphNode {\n id: string;\n run(state: EngineState): Promise<NodeResult>;\n}\n\nexport interface StandardToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n extra_content?: ToolCallExtraContent;\n}\n","import { Logger } from '../../shared/logger';\nimport { noopTelemetry } from '../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\nimport type { Checkpointer } from './checkpointer/base';\nimport { ENGINE_STATE_SCHEMA_VERSION, type EngineState, type GraphNode, type NodeResult } from './types';\nimport { DEFAULT_MAX_STEPS, type RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('GraphExecutor');\n\nfunction asLocalRecord(local: EngineState['local']): Record<string, unknown> {\n return local && typeof local === 'object' ? { ...local } : {};\n}\n\nexport interface GraphExecutorConfig {\n maxSteps?: number;\n maxCheckpoints?: number;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(observability 默认关闭,零业务影响)。\n */\n telemetryPort?: TelemetryPort;\n}\n\nexport class GraphExecutor {\n private nodes: Map<string, GraphNode> = new Map();\n private ephemeralLocals: Map<string, Record<string, unknown>> = new Map();\n private readonly config: Required<Pick<GraphExecutorConfig, 'maxSteps' | 'maxCheckpoints'>>;\n private readonly telemetryPort: TelemetryPort;\n\n constructor(\n private readonly checkpointer: Checkpointer,\n config: GraphExecutorConfig = {}\n ) {\n this.config = {\n maxSteps: config.maxSteps ?? DEFAULT_MAX_STEPS,\n maxCheckpoints: config.maxCheckpoints ?? 10,\n };\n this.telemetryPort = config.telemetryPort ?? noopTelemetry;\n }\n\n registerNode(node: GraphNode): void {\n this.nodes.set(node.id, node);\n }\n\n async peekCheckpoint(conversationId: string): Promise<EngineState | null> {\n return await this.checkpointer.load(conversationId);\n }\n\n private sanitize(state: EngineState): EngineState {\n const local = asLocalRecord(state.local);\n if ('memory' in local) delete local.memory;\n if ('sseSink' in local) delete local.sseSink;\n return {\n nodeId: state.nodeId,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local,\n };\n }\n\n async prime(conversationId: string, local: Record<string, unknown>, nodeId: string = 'user'): Promise<void> {\n this.ephemeralLocals.set(conversationId, { ...(local || {}) });\n const localSansMemory = { ...(local || {}) };\n if ('memory' in localSansMemory) delete localSansMemory.memory;\n const state: EngineState = {\n nodeId,\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: localSansMemory,\n };\n await this.checkpointer.save(conversationId, state);\n }\n\n async setNode(conversationId: string, nodeId: string, localPatch?: Record<string, unknown>): Promise<void> {\n const current = (await this.checkpointer.load(conversationId)) || {\n nodeId: 'user',\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: {},\n };\n const mergedLocal = { ...(current.local || {}), ...(localPatch || {}) };\n if ('memory' in mergedLocal) delete mergedLocal.memory;\n const next: EngineState = {\n nodeId,\n schemaVersion: current.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local: mergedLocal,\n };\n await this.checkpointer.save(conversationId, next);\n }\n\n async runUntilYield(conversationId: string): Promise<{ events: RuntimeEvent[]; checkpoint: EngineState; stepCount: number }> {\n // B2-engine Batch 4: run_lifecycle 埋点\n // - 一次 runUntilYield 调用 = 一次 \"run\"\n // - 进入即 emit 'spawned',退出走 try/finally 决定 'completed' | 'failed' | 'cancelled'\n const runId = `run_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n let lifecyclePhase: 'completed' | 'failed' | 'cancelled' = 'completed';\n this.telemetryPort.emit({\n kind: 'run_lifecycle',\n runId,\n phase: 'spawned',\n scope: { conversationId: conversationId || undefined },\n });\n\n try {\n return await this.runUntilYieldInternal(conversationId);\n } catch (err) {\n lifecyclePhase = (err as Error | undefined)?.name === 'AbortError' ? 'cancelled' : 'failed';\n throw err;\n } finally {\n this.telemetryPort.emit({\n kind: 'run_lifecycle',\n runId,\n phase: lifecyclePhase,\n scope: { conversationId: conversationId || undefined },\n });\n }\n }\n\n private async runUntilYieldInternal(conversationId: string): Promise<{ events: RuntimeEvent[]; checkpoint: EngineState; stepCount: number }> {\n let state: EngineState = (await this.checkpointer.load(conversationId)) || {\n nodeId: 'user',\n schemaVersion: ENGINE_STATE_SCHEMA_VERSION,\n local: {},\n };\n const ephemeral = this.ephemeralLocals.get(conversationId) || {};\n state = {\n ...state,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local: { ...(state.local || {}), ...ephemeral },\n };\n\n const isAbortSignal = (v: unknown): v is AbortSignal => {\n return v !== null && typeof v === 'object' && 'aborted' in v;\n };\n const throwAbortError = (): never => {\n const err = new Error('The user aborted a request.');\n err.name = 'AbortError';\n throw err;\n };\n\n let stepCount = 0;\n let cycleStepCount = 0;\n let checkpointCount = 0;\n let allEvents: RuntimeEvent[] = [];\n logger.info('[GraphExecutor] 开始推理循环', {\n maxSteps: this.config.maxSteps,\n maxCheckpoints: this.config.maxCheckpoints,\n });\n\n const absoluteMaxSteps = this.config.maxSteps * (this.config.maxCheckpoints + 1);\n for (let i = 0; i < this.config.maxSteps && stepCount < absoluteMaxSteps; i++) {\n stepCount++;\n cycleStepCount++;\n\n const signalRaw = (state.local as Record<string, unknown> | undefined)?.signal;\n if (isAbortSignal(signalRaw) && signalRaw.aborted) {\n logger.warn('[GraphExecutor] 收到 AbortSignal,立即停止推理循环');\n this.ephemeralLocals.delete(conversationId);\n throwAbortError();\n }\n\n const isLastStep = cycleStepCount >= this.config.maxSteps;\n const rawLocal = state.local && typeof state.local === 'object' ? state.local : {};\n const localForStep: Record<string, unknown> = { ...(rawLocal as Record<string, unknown>) };\n\n const rawExecutorLocal = localForStep.executorLocal;\n const executorLocalForStep: Record<string, unknown> =\n rawExecutorLocal && typeof rawExecutorLocal === 'object' && !Array.isArray(rawExecutorLocal)\n ? { ...(rawExecutorLocal as Record<string, unknown>) }\n : {};\n executorLocalForStep.maxSteps = this.config.maxSteps;\n executorLocalForStep.stepCount = cycleStepCount;\n executorLocalForStep.remainingSteps = this.config.maxSteps - cycleStepCount;\n executorLocalForStep.checkpointCount = checkpointCount;\n\n const policyRaw = executorLocalForStep.finalStepPolicy;\n const finalStepPolicy =\n policyRaw === 'force_tools' || policyRaw === 'final_answer'\n ? (policyRaw as 'force_tools' | 'final_answer')\n : 'final_answer';\n\n const isPenultimateStep = cycleStepCount === this.config.maxSteps - 1;\n if (finalStepPolicy === 'force_tools') {\n executorLocalForStep.phase = isPenultimateStep\n ? 'force_tools'\n : (executorLocalForStep.phase ?? 'running');\n } else {\n executorLocalForStep.phase = isLastStep ? 'force_final_answer' : (executorLocalForStep.phase ?? 'running');\n }\n localForStep.executorLocal = executorLocalForStep;\n\n const shouldForceToLlm =\n finalStepPolicy === 'force_tools'\n ? isPenultimateStep\n : isLastStep;\n\n if (shouldForceToLlm && state.nodeId !== 'wait_user' && state.nodeId !== 'answer') {\n delete localForStep.pendingToolCalls;\n delete localForStep.pendingInteractionSpec;\n delete localForStep.lastToolResult;\n if (state.nodeId !== 'llm') {\n const reason =\n finalStepPolicy === 'force_tools'\n ? 'force tools before maxSteps'\n : 'force final answer at maxSteps';\n logger.warn('[GraphExecutor] 收尾策略强制切换到 llm 节点', {\n reason,\n fromNodeId: state.nodeId,\n });\n state = { ...state, nodeId: 'llm', local: localForStep };\n } else {\n state = { ...state, local: localForStep };\n }\n } else {\n state = { ...state, local: localForStep };\n }\n\n const node = this.nodes.get(state.nodeId);\n if (!node) {\n logger.info('[GraphExecutor] 推理完成,无可执行节点', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n this.ephemeralLocals.delete(conversationId);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n\n logger.info('[GraphExecutor] 节点切换', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n nodeId: state.nodeId,\n });\n\n // B2-engine Batch 3: 计时 graph_node 事件\n const nodeRunStartedAt = Date.now();\n const nodeIdForTelemetry = state.nodeId;\n let result: NodeResult;\n try {\n result = await node.run(state);\n } finally {\n const turnIdForTelemetry =\n typeof (state.local as Record<string, unknown> | undefined)?.turnId === 'string'\n ? ((state.local as Record<string, unknown>).turnId as string)\n : undefined;\n this.telemetryPort.emit({\n kind: 'graph_node',\n nodeId: nodeIdForTelemetry,\n durationMs: Date.now() - nodeRunStartedAt,\n scope: {\n conversationId: conversationId || undefined,\n turnId: turnIdForTelemetry,\n },\n });\n }\n\n if (Array.isArray(result.events) && result.events.length > 0) {\n logger.info('[GraphExecutor] 节点产生事件', {\n nodeId: state.nodeId,\n eventCount: result.events.length,\n events: result.events.map((event) => `${event.type}(${event.timestamp})`),\n });\n allEvents.push(...result.events);\n }\n\n const localAfterRun = (state.local && typeof state.local === 'object')\n ? state.local as Record<string, unknown>\n : undefined;\n if (localAfterRun?._checkpointStepReset === true) {\n delete localAfterRun._checkpointStepReset;\n checkpointCount++;\n if (checkpointCount > this.config.maxCheckpoints) {\n logger.warn('[GraphExecutor] 达到最大 checkpoint 次数,不再重置步数', {\n checkpointCount,\n maxCheckpoints: this.config.maxCheckpoints,\n });\n } else {\n logger.info('[GraphExecutor] checkpoint 重置步数预算', {\n checkpointCount,\n previousCycleStepCount: cycleStepCount,\n stepCount,\n });\n cycleStepCount = 0;\n i = -1;\n }\n }\n\n if (result.kind === 'route') {\n const nextNodeId = result.nextNodeId || 'user';\n logger.info('[GraphExecutor] 路由切换', {\n fromNodeId: state.nodeId,\n nextNodeId,\n });\n state = { ...state, nodeId: nextNodeId };\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n continue;\n }\n\n if (result.kind === 'yield') {\n logger.info('[GraphExecutor] 推理暂停,等待外部输入', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n\n if (result.kind === 'pause') {\n logger.info('[GraphExecutor] 推理暂停,等待用户交互', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n }\n\n logger.warn('[GraphExecutor] 达到步数上限,强制结束', {\n cycleStepCount,\n maxSteps: this.config.maxSteps,\n stepCount,\n checkpointCount,\n });\n const cp = this.sanitize(state);\n await this.checkpointer.save(conversationId, cp);\n this.ephemeralLocals.delete(conversationId);\n return { events: allEvents, checkpoint: cp, stepCount };\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/modelCatalog.ts\n *\n * @description\n * Agent runtime 对“模型目录”的最小协议定义。\n * runtime-kernel 只依赖这些查询能力,不直接依赖 app 的 model-registry 实现。\n */\n\nexport interface ModelCatalogEntry {\n id: string;\n enabled?: boolean;\n api_key?: string;\n api_base?: string;\n billing_mode?: 'byok' | 'cloud';\n /**\n * 是否允许客户端侧重试。\n *\n * 说明:\n * - runtime-kernel 会基于该字段与 billing_mode 决定重试策略;\n * - 该字段来自上层 model-registry(对齐 `src/model-registry/contracts.ts`),避免在 runtime 侧出现类型漂移。\n */\n enable_client_retry?: boolean;\n model_name?: string;\n provider?: string;\n capabilities?: readonly string[];\n ui_visibility?: readonly string[];\n}\n\nexport interface ModelCatalogLike {\n getModelById(id: string): ModelCatalogEntry | undefined;\n getModelsByCapability(capability: string): ModelCatalogEntry[];\n getModelsByUIVisibility(visibility: string): ModelCatalogEntry[];\n}\n\nexport function createEmptyModelCatalog(): ModelCatalogLike {\n return {\n getModelById(): ModelCatalogEntry | undefined {\n return undefined;\n },\n getModelsByCapability(): ModelCatalogEntry[] {\n return [];\n },\n getModelsByUIVisibility(): ModelCatalogEntry[] {\n return [];\n },\n };\n}\n","import { createEmptyModelCatalog, type ModelCatalogLike } from './modelCatalog';\n\nexport interface ModelResolverOptions {\n fallbackModelPreferredOrder?: readonly string[];\n modelCatalog?: ModelCatalogLike;\n}\n\nexport interface ModelResolverLike {\n resolveModelId(requestedModelId?: string): string;\n pickFallbackChatModel(excludedModelIds: Set<string>): string | null;\n}\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object' && !Array.isArray(v);\n\nconst getString = (obj: unknown, key: string): string | undefined => {\n if (!isRecord(obj)) return undefined;\n const v = obj[key];\n return typeof v === 'string' ? v : undefined;\n};\n\nconst getBoolean = (obj: unknown, key: string): boolean | undefined => {\n if (!isRecord(obj)) return undefined;\n const v = obj[key];\n return typeof v === 'boolean' ? v : undefined;\n};\n\n/**\n * 模型解析职责单独收口,避免 caller / executor stage 混入 registry 选模细节。\n */\nexport class ModelResolver implements ModelResolverLike {\n private readonly fallbackModelPreferredOrder: readonly string[];\n private readonly modelCatalog: ModelCatalogLike;\n\n constructor(options: ModelResolverOptions = {}) {\n this.fallbackModelPreferredOrder = Array.isArray(options.fallbackModelPreferredOrder)\n ? options.fallbackModelPreferredOrder\n : [];\n this.modelCatalog = options.modelCatalog ?? createEmptyModelCatalog();\n }\n\n resolveModelId(requestedModelId?: string): string {\n return requestedModelId || this.getDefaultChatModel();\n }\n\n /**\n * 选模规则(严格、可解释):\n * - “默认聊天模型”应来自主对话下拉(ui_visibility: 'chat'),而不是“任何具备 chat capability 的模型”。\n *\n * 根因说明:\n * - default_models.json 中存在 mock-chat(capabilities: ['chat'],但 ui_visibility 是 'chat1');\n * - 若按 capability='chat' 取第一个,会导致内部流程(如 deep_search 子 Agent)默认落到 mock 模型,\n * 从而无法产生 tool_calls / final_answer(只会 yield thought)。\n */\n private getDefaultChatModel(): string {\n const uiChatModels = this.modelCatalog.getModelsByUIVisibility('chat');\n const preferred = uiChatModels.filter((model) => getBoolean(model, 'enabled') !== false);\n if (preferred.length > 0) {\n return preferred[0].id;\n }\n\n const chatModels = this.modelCatalog.getModelsByCapability('chat');\n const fallback = chatModels.filter((model) => getBoolean(model, 'enabled') !== false);\n if (fallback.length === 0) {\n throw new Error('没有可用的聊天模型');\n }\n return fallback[0].id;\n }\n\n /**\n * 选择一个可用的“策略切模备用聊天模型”:\n * - 必须具备 chat 能力\n * - 必须已解析到 api_key(否则必然失败)\n * - 尽量避开 openrouter(减少被路由到受限上游的概率)\n */\n pickFallbackChatModel(excludedModelIds: Set<string>): string | null {\n const chatModels = this.modelCatalog.getModelsByCapability('chat') || [];\n\n const enabled = chatModels\n .filter((model) => getBoolean(model, 'enabled') !== false)\n .filter((model) => {\n const key = getString(model, 'api_key');\n return typeof key === 'string' && key.length > 0;\n })\n .filter((model) => !excludedModelIds.has(model.id));\n\n if (enabled.length === 0) return null;\n\n for (const id of this.fallbackModelPreferredOrder) {\n const found = enabled.find((model) => model.id === id);\n if (found) return found.id;\n }\n\n const nonOpenRouter = enabled.find((model) => {\n const apiBase = getString(model, 'api_base') ?? '';\n return !apiBase.includes('openrouter.ai');\n });\n return (nonOpenRouter || enabled[0]).id;\n }\n}\n","import type { AuditPort } from '../../ports';\n\nexport const noopAudit: AuditPort = {\n emit(): void {\n // 审计是可选能力;默认 no-op 保持现有运行时无副作用。\n },\n flush(): void {\n // 无缓冲状态。\n },\n};\n","/**\n * @file src/agent/runtime-kernel/llm/toolCallUtils.ts\n *\n * @description\n * Tool-call 相关的纯函数工具:\n * - 解析/拆分“拼接的 JSON 对象”字符串(例如 \"{}{}\")\n * - 安全地把 JSON 字符串解析为 Record(不使用 any)\n *\n * 背景:\n * 部分 OpenAI-compat 供应商在流式工具调用中,可能会把多个 JSON 对象片段连续输出;\n * 如果直接拼接,会得到 `}{` 导致 arguments 不是合法 JSON,从而:\n * - 本地 JSON.parse 失败,工具拿到空参数\n * - 更严重:非法 tool_calls 被写入 history 并在下一轮回放,触发上游 400/500 校验错误\n */\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function tryParseJsonRecord(input: string): { ok: true; value: UnknownRecord } | { ok: false } {\n try {\n const parsed: unknown = JSON.parse(input);\n if (!isRecord(parsed)) {\n return { ok: false };\n }\n return { ok: true, value: parsed };\n } catch {\n return { ok: false };\n }\n}\n\n/**\n * 把形如 \"{}{}\" / \"{...}\\n{...}\" 的字符串按“顶层 JSON 对象”拆分为多个 JSON 字符串。\n *\n * 约束:\n * - 仅拆分顶层对象(以 '{' 开始、以配对 '}' 结束)\n * - 需要正确处理字符串字面量与转义,避免把字符串中的 '{' '}' 当作结构字符\n */\nexport function splitConcatenatedJsonObjects(input: string): string[] {\n const s = input.trim();\n if (!s) return [];\n\n const results: string[] = [];\n\n let inString = false;\n let escape = false;\n let depth = 0;\n let startIndex: number | null = null;\n\n for (let i = 0; i < s.length; i += 1) {\n const ch = s[i];\n\n if (escape) {\n escape = false;\n continue;\n }\n\n if (inString) {\n if (ch === '\\\\\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n if (depth === 0) {\n startIndex = i;\n }\n depth += 1;\n continue;\n }\n\n if (ch === '}') {\n if (depth > 0) {\n depth -= 1;\n if (depth === 0 && startIndex !== null) {\n const piece = s.slice(startIndex, i + 1).trim();\n if (piece) results.push(piece);\n startIndex = null;\n }\n }\n continue;\n }\n }\n\n return results;\n}\n\n","import { generateMessageId } from '../../../shared/ids';\nimport { splitConcatenatedJsonObjects, tryParseJsonRecord } from '../../llm/toolCallUtils';\nimport type { ToolExecutionContext } from '../../tools/toolExecutionContext';\nimport type { PendingContextRuntimeEvent } from '../executorContextBuilder';\nimport type { StandardToolCall } from '../types';\nimport type { LlmCallResponse, TickPipelineContext } from './types';\nimport type { RuntimeEvent } from '../../../contracts';\n\nexport function readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function resolveConversationIdForRuntimeEvents(toolContext: ToolExecutionContext | undefined): string {\n const fromCamel = readNonEmptyString(toolContext?.conversationId);\n if (fromCamel) return fromCamel;\n const fromSnake = toolContext ? readNonEmptyString(toolContext['conversation_id']) : undefined;\n if (fromSnake) return fromSnake;\n return generateMessageId();\n}\n\nexport function extractResponseText(response: LlmCallResponse | undefined): string {\n if (!response) {\n return '';\n }\n if (typeof response === 'string') {\n return response;\n }\n return typeof response.content === 'string' ? response.content : '';\n}\n\nexport function buildHistorySummaryRuntimeEvent(\n event: PendingContextRuntimeEvent,\n conversationId: string,\n turnId: string,\n): RuntimeEvent {\n return {\n ...(event as Record<string, unknown>),\n conversation_id: conversationId,\n turn_id: turnId,\n } as RuntimeEvent;\n}\n\nexport function isHistorySummaryEvent(event: PendingContextRuntimeEvent): boolean {\n return event.type === 'history_summary';\n}\n\nexport function normalizeToolCalls(rawCalls: StandardToolCall[]): StandardToolCall[] {\n const expanded: StandardToolCall[] = [];\n for (const toolCall of rawCalls) {\n const argsRaw = toolCall.function?.arguments ?? '';\n const parsedDirectly = typeof argsRaw === 'string' && tryParseJsonRecord(argsRaw.trim()).ok;\n if (parsedDirectly) {\n expanded.push(toolCall);\n continue;\n }\n\n const pieces = typeof argsRaw === 'string' ? splitConcatenatedJsonObjects(argsRaw) : [];\n const validPieces = pieces.length >= 2 && pieces.every((piece) => tryParseJsonRecord(piece).ok);\n if (validPieces) {\n expanded.push({\n ...toolCall,\n function: { ...toolCall.function, arguments: pieces[0] },\n });\n for (let index = 1; index < pieces.length; index += 1) {\n expanded.push({\n ...toolCall,\n id: generateMessageId(),\n function: { ...toolCall.function, arguments: pieces[index] },\n });\n }\n continue;\n }\n\n expanded.push({\n ...toolCall,\n });\n }\n return expanded;\n}\n\nexport function parsePrimaryToolArgs(toolCall: StandardToolCall | undefined): Record<string, unknown> {\n if (!toolCall?.function?.arguments) {\n return {};\n }\n try {\n const parsed = JSON.parse(toolCall.function.arguments);\n return typeof parsed === 'object' && parsed !== null ? parsed as Record<string, unknown> : {};\n } catch {\n return {};\n }\n}\n\nexport function resolveUsage(response: LlmCallResponse | undefined): unknown {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return response.usage;\n}\n\nexport function resolveToolCalls(response: LlmCallResponse | undefined): StandardToolCall[] | undefined {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return Array.isArray(response.tool_calls) ? response.tool_calls : undefined;\n}\n\nexport function resolveReasoningDetails(response: LlmCallResponse | undefined): unknown[] | undefined {\n if (!response || typeof response === 'string') {\n return undefined;\n }\n return Array.isArray(response.reasoning_details) ? response.reasoning_details : undefined;\n}\n\nexport function resolveToolNamesForAudit(ctx: TickPipelineContext): string[] {\n if (ctx.forceFinalAnswer || ctx.request.enableTools === false || ctx.toolSchemas.length === 0) {\n return [];\n }\n return ctx.toolSchemas.map((tool) => tool.function.name);\n}\n","/**\n * @file src/agent/shared/llmAuditRecorder.ts\n *\n * @description\n * Agent runtime 对 LLM 审计的最小记录协议。\n *\n * 说明:\n * - runtime-kernel 只需要“记录”审计片段;\n * - AsyncLocalStorage、落盘、Documents 路径等都属于宿主实现,不应反向依赖到 agent package。\n */\n\nexport interface ContextManagerAuditRecordInput {\n mode: 'agent' | 'chat';\n payload?: unknown;\n llmMessages?: unknown[];\n toolNames?: string[];\n systemReminder?: {\n ruleIds?: string[];\n };\n contextTrace?: unknown;\n}\n\nexport interface ToolProtocolErrorAuditInput {\n mode: 'agent' | 'chat';\n toolName: string;\n toolCallId?: string;\n rawArguments?: string;\n parsedArguments?: Record<string, unknown>;\n error: string;\n}\n\nexport interface RunTranscriptAuditInput {\n mode: 'agent' | 'chat';\n transcriptMessages: unknown[];\n toolset?: {\n availableTools?: string[];\n };\n}\n\nexport interface LlmAuditRecorder {\n recordBeforeContextManager?(params: ContextManagerAuditRecordInput): void;\n recordAfterContextManager?(params: ContextManagerAuditRecordInput): void;\n recordAfterContextManagerOnSystemReminderHit?(params: ContextManagerAuditRecordInput): void;\n recordToolProtocolError?(params: ToolProtocolErrorAuditInput): void;\n recordRunTranscript?(params: RunTranscriptAuditInput): void;\n}\n\nlet recorder: LlmAuditRecorder | null = null;\n\nexport function setLlmAuditRecorder(next: LlmAuditRecorder | null): void {\n recorder = next;\n}\n\nexport function recordBeforeContextManager(params: ContextManagerAuditRecordInput): void {\n recorder?.recordBeforeContextManager?.(params);\n}\n\nexport function recordAfterContextManager(params: ContextManagerAuditRecordInput): void {\n recorder?.recordAfterContextManager?.(params);\n}\n\nexport function recordAfterContextManagerOnSystemReminderHit(params: ContextManagerAuditRecordInput): void {\n recorder?.recordAfterContextManagerOnSystemReminderHit?.(params);\n}\n\nexport function recordToolProtocolError(params: ToolProtocolErrorAuditInput): void {\n recorder?.recordToolProtocolError?.(params);\n}\n\nexport function recordRunTranscript(params: RunTranscriptAuditInput): void {\n recorder?.recordRunTranscript?.(params);\n}\n","import {\n recordAfterContextManager,\n recordAfterContextManagerOnSystemReminderHit,\n recordBeforeContextManager,\n} from '../../../../shared/llmAuditRecorder';\nimport { resolveToolNamesForAudit } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nexport const contextAuditMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n if (stage.id === 'build_context') {\n recordBeforeContextManager({\n mode: ctx.request.mode === 'chat' ? 'chat' : 'agent',\n payload: ctx.request.mode === 'chat'\n ? { request: ctx.request }\n : { request: ctx.request, history: ctx.history },\n });\n }\n\n await next();\n\n if (stage.id !== 'apply_system_reminder') {\n return;\n }\n\n const toolNamesForAudit = resolveToolNamesForAudit(ctx);\n recordAfterContextManager({\n mode: ctx.mode,\n llmMessages: ctx.llmMessages,\n toolNames: toolNamesForAudit,\n contextTrace: ctx.contextTrace,\n });\n\n if (Array.isArray(ctx.systemReminderHitRuleIds) && ctx.systemReminderHitRuleIds.length > 0) {\n recordAfterContextManagerOnSystemReminderHit({\n mode: ctx.mode,\n llmMessages: ctx.llmMessages,\n toolNames: toolNamesForAudit,\n systemReminder: { ruleIds: ctx.systemReminderHitRuleIds },\n contextTrace: ctx.contextTrace,\n });\n }\n};\n","import { get_encoding, Tiktoken } from 'tiktoken';\nimport type { LlmRequestMessage } from '../ports';\n\nexport type TokenEncodingName = Parameters<typeof get_encoding>[0];\n\nexport interface TokenEstimateOptions {\n /**\n * tiktoken encoding 名称,或历史兼容的模型标识。\n *\n * 中文说明:如果传入的是 `gpt-4o` / `claude` 这类模型名,会按旧逻辑映射到 encoding;\n * 如果传入的是 `cl100k_base` / `o200k_base`,则直接使用对应 encoding。\n */\n encoding?: string;\n /** tiktoken 不可用或未指定 encoding 时的字符/token 兜底比。 */\n avgCharsPerToken?: number;\n /** 单个 tool_call 的额外 token 开销估算。 */\n toolCallOverhead?: number;\n}\n\nexport class TokenCalculator {\n private static readonly BYTES_PER_TOKEN_LATIN = 4;\n private static readonly BYTES_PER_TOKEN_CJK = 3;\n private static readonly OVERHEAD_PER_MESSAGE = 5;\n private static readonly OVERHEAD_PER_TOOL_CALL = 10;\n private static encoderCache = new Map<TokenEncodingName, Tiktoken>();\n private static readonly DEFAULT_ENCODING: TokenEncodingName = 'cl100k_base';\n private static readonly SUPPORTED_ENCODINGS = [\n 'gpt2',\n 'r50k_base',\n 'p50k_base',\n 'p50k_edit',\n 'cl100k_base',\n 'o200k_base',\n ] as const satisfies readonly TokenEncodingName[];\n\n private static resolveEncodingFromModelIdentifier(modelIdentifier: string): TokenEncodingName {\n const normalized = (modelIdentifier || '').trim().toLowerCase();\n\n if (this.isSupportedEncodingName(normalized)) {\n return normalized;\n }\n\n if (normalized.includes('deepseek')) {\n return 'cl100k_base';\n }\n\n if (normalized.includes('gpt-4o') || normalized.startsWith('o1')) {\n return 'o200k_base';\n }\n\n if (normalized.includes('gemini') || normalized.includes('claude')) {\n return 'cl100k_base';\n }\n\n return this.DEFAULT_ENCODING;\n }\n\n private static isSupportedEncodingName(value: string): value is TokenEncodingName {\n return this.SUPPORTED_ENCODINGS.some(encoding => encoding === value);\n }\n\n private static getEncoder(modelIdentifierOrEncoding: string): Tiktoken {\n const encodingName = this.resolveEncodingFromModelIdentifier(modelIdentifierOrEncoding);\n const cached = this.encoderCache.get(encodingName);\n if (cached) {\n return cached;\n }\n\n const encoder = get_encoding(encodingName);\n this.encoderCache.set(encodingName, encoder);\n return encoder;\n }\n\n public static estimateTokensRough(text: string | null | undefined, _modelIdentifier?: string): number {\n if (!text) return 0;\n\n const hasCJK = /[\\u4e00-\\u9fa5]|[\\u3040-\\u30ff]|[\\uac00-\\ud7af]/.test(text);\n const ratio = hasCJK ? this.BYTES_PER_TOKEN_CJK : this.BYTES_PER_TOKEN_LATIN;\n const byteLength = new TextEncoder().encode(text).length;\n\n return Math.ceil(byteLength / ratio);\n }\n\n public static estimateTokens(text: string | null | undefined, options: TokenEstimateOptions = {}): number {\n if (!text) return 0;\n\n if (options.encoding) {\n try {\n return this.estimateTokensPrecise(text, options.encoding);\n } catch {\n // 中文备注:tiktoken 运行时不可用时退回声明式 avgCharsPerToken,保证上下文构建不中断。\n }\n }\n\n const avgCharsPerToken = normalizePositiveNumber(options.avgCharsPerToken, 2);\n return Math.ceil(text.length / avgCharsPerToken);\n }\n\n public static estimateTokensPrecise(text: string | null | undefined, modelIdentifier: string): number {\n if (!text) return 0;\n const encoder = this.getEncoder(modelIdentifier);\n return encoder.encode(text).length;\n }\n\n public static estimateMessageTokens(\n message: LlmRequestMessage,\n options: TokenEstimateOptions = {},\n ): number {\n let totalTokens = this.OVERHEAD_PER_MESSAGE;\n\n if (message.content) {\n totalTokens += this.estimateTokens(String(message.content), options);\n }\n\n const toolCalls = this.extractToolCallsForTokenEstimate(message);\n const toolCallOverhead = normalizeNonNegativeInteger(options.toolCallOverhead, this.OVERHEAD_PER_TOOL_CALL);\n for (const toolCall of toolCalls) {\n totalTokens += toolCallOverhead;\n const fn = toolCall['function'];\n if (fn && typeof fn === 'object' && !Array.isArray(fn)) {\n const fnRecord = fn as Record<string, unknown>;\n totalTokens += this.estimateTokens(String(fnRecord['name'] ?? ''), options);\n totalTokens += this.estimateTokens(String(fnRecord['arguments'] ?? ''), options);\n }\n }\n\n const toolCallId = this.extractToolCallIdForTokenEstimate(message);\n if (toolCallId) {\n totalTokens += this.estimateTokens(toolCallId, options);\n }\n\n return totalTokens;\n }\n\n public static estimateMessageTokensPrecise(message: LlmRequestMessage, modelIdentifier: string): number {\n return this.estimateMessageTokens(message, {\n encoding: modelIdentifier,\n toolCallOverhead: this.OVERHEAD_PER_TOOL_CALL,\n });\n }\n\n public static estimateMessagesTokensPrecise(messages: LlmRequestMessage[], modelIdentifier: string): number {\n return messages.reduce((total, msg) => total + this.estimateMessageTokensPrecise(msg, modelIdentifier), 0);\n }\n\n private static extractToolCallsForTokenEstimate(message: LlmRequestMessage): unknown[] {\n const direct = 'tool_calls' in message ? message.tool_calls : undefined;\n if (Array.isArray(direct)) return direct;\n\n const metadata = 'metadata' in message ? message.metadata : undefined;\n if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) return [];\n const metadataRecord = metadata as Record<string, unknown>;\n const metadataToolCalls = metadataRecord['tool_calls'];\n return Array.isArray(metadataToolCalls) ? metadataToolCalls : [];\n }\n\n private static extractToolCallIdForTokenEstimate(message: LlmRequestMessage): string | undefined {\n if ('tool_call_id' in message && typeof message.tool_call_id === 'string') {\n return message.tool_call_id;\n }\n\n const metadata = 'metadata' in message ? message.metadata : undefined;\n if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) return undefined;\n const metadataRecord = metadata as Record<string, unknown>;\n const toolCallId = metadataRecord['tool_call_id'];\n return typeof toolCallId === 'string' ? toolCallId : undefined;\n }\n\n public static truncateTextByTokens(\n text: string,\n maxTokens: number,\n modelIdentifier: string,\n strategy: 'start' | 'end' | 'middle' = 'end',\n ): string {\n if (!text || maxTokens <= 0) return '';\n\n const encoder = this.getEncoder(modelIdentifier);\n const tokens = encoder.encode(text);\n\n if (tokens.length <= maxTokens) {\n return text;\n }\n\n let truncatedTokens: Uint32Array;\n const ellipsis = '...';\n\n switch (strategy) {\n case 'start':\n truncatedTokens = tokens.slice(0, maxTokens);\n return encoder.decode(truncatedTokens) + ellipsis;\n case 'end':\n truncatedTokens = tokens.slice(tokens.length - maxTokens);\n return ellipsis + encoder.decode(truncatedTokens);\n case 'middle': {\n const half = Math.floor(maxTokens / 2);\n const head = tokens.slice(0, half);\n const tail = tokens.slice(tokens.length - (maxTokens - half));\n return encoder.decode(head) + ellipsis + encoder.decode(tail);\n }\n default:\n truncatedTokens = tokens.slice(0, maxTokens);\n return encoder.decode(truncatedTokens) + ellipsis;\n }\n }\n\n public static cleanup(): void {\n for (const encoder of this.encoderCache.values()) {\n encoder.free();\n }\n this.encoderCache.clear();\n }\n}\n\nfunction normalizePositiveNumber(value: number | undefined, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n return fallback;\n }\n return Math.max(0, Math.floor(value));\n}\n","/**\n * @file src/agent/shared/llmTelemetryContext.ts\n *\n * @description\n * LLM Telemetry 上下文(用于审计/统计,不进入模型上下文,不落库到 EventStore)。\n *\n * 中文备注(设计约束):\n * - 某些“多阶段/多子任务”的审计需要一个可聚合的数据源;\n * - 这些数据不适合塞进 RuntimeEvent(会污染主时间轴、跨端联动成本高);\n * - 因此这里用 AsyncLocalStorage 提供“同一条异步链路内可写入/可聚合”的基础设施;\n * - 默认不启用:只有当业务侧显式用 `withLLMTelemetryContext(...)` 包裹执行链路时才会收集。\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nexport type LlmUsageRaw = {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n /**\n * 兼容:部分 mock/自研 adapter 只返回 usage.tokens\n */\n tokens?: number;\n};\n\nexport type NormalizedLlmUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n};\n\nexport type LLMTelemetryContext = {\n /**\n * 预留:用于业务侧注入“聚合维度”。\n *\n * 中文备注:\n * - 该字段不进入模型上下文、不落库,仅用于本地统计/审计聚合;\n * - 建议只放稳定标识(如 conversationId/turnId/runId 等),避免塞入大对象。\n */\n scope?: {\n conversationId?: string;\n turnId?: string;\n runId?: string;\n stepId?: string;\n stepIndex?: number;\n };\n};\n\nexport type LlmCallTelemetry = {\n modelId: string;\n stream: boolean;\n startedAt: number;\n durationMs: number;\n usage?: NormalizedLlmUsage;\n};\n\ntype Store = {\n ctx: LLMTelemetryContext;\n calls: LlmCallTelemetry[];\n};\n\nconst als = new AsyncLocalStorage<Store>();\n\n/**\n * 轻量规范化:把 provider 的 usage(不同字段名)收敛为统一结构。\n */\nexport function normalizeLlmUsage(usage: unknown): NormalizedLlmUsage | undefined {\n if (!usage || typeof usage !== 'object' || Array.isArray(usage)) return undefined;\n const rec = usage as Record<string, unknown>;\n\n const promptTokensRaw = rec['prompt_tokens'];\n const completionTokensRaw = rec['completion_tokens'];\n const totalTokensRaw = rec['total_tokens'];\n const tokensRaw = rec['tokens'];\n\n const promptTokens = typeof promptTokensRaw === 'number' && Number.isFinite(promptTokensRaw) ? promptTokensRaw : 0;\n const completionTokens =\n typeof completionTokensRaw === 'number' && Number.isFinite(completionTokensRaw) ? completionTokensRaw : 0;\n const totalFromExplicit =\n typeof totalTokensRaw === 'number' && Number.isFinite(totalTokensRaw) ? totalTokensRaw : undefined;\n const totalFromTokens = typeof tokensRaw === 'number' && Number.isFinite(tokensRaw) ? tokensRaw : undefined;\n\n const totalTokens = totalFromExplicit ?? totalFromTokens ?? promptTokens + completionTokens;\n\n if (promptTokens === 0 && completionTokens === 0 && totalTokens === 0) return undefined;\n\n return { promptTokens, completionTokens, totalTokens };\n}\n\nexport function getCurrentLLMTelemetryContext(): LLMTelemetryContext | undefined {\n return als.getStore()?.ctx;\n}\n\nexport function recordLlmCallTelemetry(entry: LlmCallTelemetry): void {\n const store = als.getStore();\n if (!store) return;\n store.calls.push(entry);\n}\n\nexport async function withLLMTelemetryContext<T>(\n ctx: LLMTelemetryContext,\n fn: () => Promise<T>\n): Promise<{ value: T; calls: LlmCallTelemetry[] }> {\n const parent = als.getStore();\n const merged: LLMTelemetryContext = {\n ...(parent?.ctx ?? {}),\n ...(ctx ?? {}),\n };\n const store: Store = { ctx: merged, calls: [] };\n const value = await als.run(store, fn);\n return { value, calls: store.calls };\n}\n","import { TokenCalculator } from '../../../../shared/TokenCalculator';\nimport {\n normalizeLlmUsage,\n recordLlmCallTelemetry,\n} from '../../../../shared/llmTelemetryContext';\nimport { extractResponseText, resolveUsage } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nexport const llmTelemetryMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n await next();\n\n if (stage.id !== 'execute_llm' || ctx.llmCallStartedAt === undefined || ctx.llmCallDurationMs === undefined) {\n return;\n }\n\n const normalizedUsageFromProvider = normalizeLlmUsage(resolveUsage(ctx.llmResp));\n const respText = extractResponseText(ctx.llmResp);\n const normalizedUsage =\n normalizedUsageFromProvider ??\n (() => {\n try {\n const promptTokens = TokenCalculator.estimateMessagesTokensPrecise(ctx.llmMessages, ctx.modelId);\n const completionTokens = TokenCalculator.estimateTokensPrecise(respText, ctx.modelId);\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n };\n } catch {\n return undefined;\n }\n })();\n\n recordLlmCallTelemetry({\n modelId: ctx.modelId,\n stream: ctx.input.stream === true,\n startedAt: ctx.llmCallStartedAt,\n durationMs: ctx.llmCallDurationMs,\n usage: normalizedUsage,\n });\n\n // B2-engine Batch 1: 同步上报到宿主侧 TelemetryPort(默认 noopTelemetry,业务无感)\n // 与 ALS 写入互不影响:ALS 给 benchmark 等\"链路内聚合\"场景,TelemetryPort 给宿主全局 sink。\n ctx.telemetry.emit({\n kind: 'llm_call',\n modelId: ctx.modelId,\n stream: ctx.input.stream === true,\n durationMs: ctx.llmCallDurationMs,\n usage: normalizedUsage,\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n },\n });\n};\n","import { Logger } from '../../../../shared/logger';\nimport { readNonEmptyString } from '../helpers';\nimport type { TickAroundMiddleware } from '../types';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport const runModelLockMiddleware: TickAroundMiddleware = async (ctx, stage, next) => {\n await next();\n\n if (stage.id !== 'execute_llm') {\n return;\n }\n\n const normalized = readNonEmptyString(ctx.cloudQuotaFallbackAppliedModelId);\n if (!normalized) {\n return;\n }\n if (ctx.executorLocal?.runLockedModelId === normalized) {\n return;\n }\n if (ctx.executorLocal) {\n ctx.executorLocal.runLockedModelId = normalized;\n }\n logger.warn(`检测到云端额度降级,已锁定本 run 后续模型: ${ctx.modelId} -> ${normalized}`);\n};\n","import type { TickAroundMiddleware, TickPipelineContext, TickStage } from './types';\n\nexport async function runTickPipeline(\n ctx: TickPipelineContext,\n stages: readonly TickStage[],\n middlewares: readonly TickAroundMiddleware[] = [],\n): Promise<void> {\n for (const stage of stages) {\n let runner = () => stage.run(ctx);\n\n for (let index = middlewares.length - 1; index >= 0; index -= 1) {\n const middleware = middlewares[index]!;\n const next = runner;\n runner = () => middleware(ctx, stage, next);\n }\n\n await runner();\n }\n}\n","/**\n * @file shared/checkpointMarker.ts\n * @description 上下文 checkpoint 的跨模块共享协议常量。\n */\n\nexport const CHECKPOINT_MARKER_TYPE = 'context_checkpoint' as const;\nexport const DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME = CHECKPOINT_MARKER_TYPE;\n","import type { SystemReminderContext } from './types';\nexport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../shared/checkpointMarker';\n\nimport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../shared/checkpointMarker';\n\nexport function readNonEmptyStrings(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\n .filter((item) => item.length > 0);\n}\n\nexport function toDisplayStep(nodeSwitches: number): number {\n return Math.ceil(nodeSwitches / 2);\n}\n\nexport function readContextCheckpointToolName(ctx: SystemReminderContext): string {\n const configured = ctx.executorLocal?.contextCheckpointToolName;\n return typeof configured === 'string' && configured.trim().length > 0\n ? configured.trim()\n : DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME;\n}\n\nfunction isRuntimeEventLike(value: unknown): value is { type: unknown } {\n return !!value && typeof value === 'object' && !Array.isArray(value) && 'type' in value;\n}\n\n/**\n * 统计“本轮请求内”的工具调用次数(LLM 决策层)。\n *\n * 中文备注:只统计最后一个 user_input 之后的 tool_call_decision,避免旧事件或 ToolNode\n * 复用 action 语义时把同一轮工具调用重复计数。\n */\nexport function countToolCallsInCurrentRequest(history: ReadonlyArray<unknown>): number {\n let startIdx = 0;\n for (let index = history.length - 1; index >= 0; index -= 1) {\n const event = history[index];\n if (!isRuntimeEventLike(event)) continue;\n if (event.type === 'user_input') {\n startIdx = index + 1;\n break;\n }\n }\n\n let count = 0;\n for (let index = startIdx; index < history.length; index += 1) {\n const event = history[index];\n if (!isRuntimeEventLike(event)) continue;\n if (event.type === 'tool_call_decision') {\n count += 1;\n }\n }\n return count;\n}\n","import {\n countToolCallsInCurrentRequest,\n readContextCheckpointToolName,\n readNonEmptyStrings,\n toDisplayStep,\n} from './helpers';\nimport type { SystemReminderContentTemplate, SystemReminderContext } from './types';\n\nexport const maxStepsForceFinalAnswerTemplate: SystemReminderContentTemplate = () => [\n '你已达到最大步数限制:本轮工具已被禁用。',\n '你必须立刻给出最终答案,不要再尝试调用任何工具。',\n '若信息不完整,请明确说明关键假设和缺口,并给出当前最好的可用回答。',\n].join('\\n');\n\nexport const lastStepsHintTemplate: SystemReminderContentTemplate = (ctx) => {\n const el = ctx.executorLocal;\n if (!el) return '';\n const maxSteps = el.maxSteps;\n const stepCount = el.stepCount;\n const remainingSteps = el.remainingSteps;\n if (typeof maxSteps !== 'number' || typeof stepCount !== 'number' || typeof remainingSteps !== 'number') {\n return '';\n }\n\n const displayMaxSteps = toDisplayStep(maxSteps);\n const displayStepCount = toDisplayStep(stepCount);\n const displayRemainingSteps = toDisplayStep(remainingSteps);\n const finalStepPolicy = el.finalStepPolicy ?? 'final_answer';\n\n if (finalStepPolicy === 'force_tools') {\n const forcedTools = readNonEmptyStrings(el.finalStepForcedTools);\n const toolsText = forcedTools.length > 0 ? forcedTools.join(', ') : '(未配置 forcedTools)';\n return [\n `步数提醒:你当前处于第 ${displayStepCount}/${displayMaxSteps} 步,还剩 ${displayRemainingSteps} 步。`,\n `当剩余 1 步时:你必须立刻调用工具:${toolsText}(系统将只保留这些工具)。`,\n '最后 1 步将用于执行工具,因此不要在最后一步才尝试再调用其他工具。',\n ].join('\\n');\n }\n\n return [\n `步数提醒:你当前处于第 ${displayStepCount}/${displayMaxSteps} 步,还剩 ${displayRemainingSteps} 步。`,\n '建议你结束无关推理/无关工具调用,确保在步数耗尽前完成任务。',\n ].join('\\n');\n};\n\nexport const toolCallStreakTemplate: SystemReminderContentTemplate = (ctx) => {\n const count = countToolCallsInCurrentRequest(ctx.history);\n return [\n `你已连续执行了 ${count} 次工具调用。`,\n '如果问题比较复杂,考虑创建sub-agent,也就是task,以降低上下文占用。',\n '如果问题即将解决,请忽略本条提醒。',\n ].join('\\n');\n};\n\nexport const periodicTaskstateReflectionTemplate: SystemReminderContentTemplate = (ctx) => {\n const stepCount = ctx.executorLocal?.stepCount ?? 0;\n const displayStep = toDisplayStep(stepCount);\n return [\n `你已执行了 ${displayStep} 步。请暂停当前工作,花一步反思和整理:`,\n '1. 回顾你最近的 taskstate_write 输出,确认当前工作方向正确(没有偏离 Goal)。',\n '2. 调用 taskstate_write 更新 progress 和 next_steps,如有必要调整 current_plan。',\n '3. 如果任务复杂但尚未创建 TaskState,现在是创建的好时机。',\n '完成整理后继续执行任务。',\n ].join('\\n');\n};\n\nexport const contextBudgetWarningTemplate: SystemReminderContentTemplate = (ctx) => {\n const stepCount = ctx.executorLocal?.stepCount ?? 0;\n const maxSteps = ctx.executorLocal?.maxSteps ?? 0;\n const displayStep = toDisplayStep(stepCount);\n const displayMax = toDisplayStep(maxSteps);\n const checkpointToolName = readContextCheckpointToolName(ctx);\n return [\n `⚠️ 上下文预算告警:你已执行了 ${displayStep}/${displayMax} 步,上下文空间即将耗尽。`,\n '你必须立即执行以下操作以避免上下文溢出:',\n '1. 调用sharedmemory_write工具,将当前发现、总结、思考或者任何重要信息详细写入sharedmemory。',\n `2. 调用 ${checkpointToolName} 工具,传入 summary(阶段过渡摘要)和 taskstate(最新任务状态)。`,\n ' 这会一次性完成\"保存状态 + 清理历史\",checkpoint tool_output 中会保留你的 TaskState 快照。',\n '3. 清理后你的上下文将只保留:checkpoint 工具对(含摘要 + TaskState)+ 最近 2 对工具交互。重要信息会通过sharedmemory保存。',\n ].join('\\n');\n};\n\nexport const BUILTIN_SYSTEM_REMINDER_TEMPLATES: Record<string, SystemReminderContentTemplate> = {\n maxStepsForceFinalAnswer: maxStepsForceFinalAnswerTemplate,\n lastStepsHint: lastStepsHintTemplate,\n toolCallStreak: toolCallStreakTemplate,\n periodicTaskstateReflection: periodicTaskstateReflectionTemplate,\n contextBudgetWarning: contextBudgetWarningTemplate,\n};\n","import type { AgentSpecSystemReminderTrigger } from '../../contracts';\nimport { countToolCallsInCurrentRequest, readContextCheckpointToolName } from './helpers';\nimport type { SystemReminderContext, SystemReminderTriggerEvaluator } from './types';\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction getTriggerThreshold(trigger: AgentSpecSystemReminderTrigger): number | undefined {\n return readNumber(trigger.threshold);\n}\n\nexport const phaseEqualsTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const expected = readString(trigger.value);\n return !!expected && ctx.executorLocal?.phase === expected;\n};\n\nexport const remainingStepsLeqTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const remainingSteps = readNumber(ctx.executorLocal?.remainingSteps);\n const threshold = getTriggerThreshold(trigger) ?? readNumber(ctx.executorLocal?.lastStepsHintThreshold);\n if (remainingSteps === undefined || threshold === undefined || threshold <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n return remainingSteps <= threshold;\n};\n\nexport const stepCountModuloTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const stepCount = readNumber(ctx.executorLocal?.stepCount);\n const period = readNumber(trigger.period) ?? getTriggerThreshold(trigger);\n const minStep = readNumber(trigger.minStep) ?? period;\n if (stepCount === undefined || period === undefined || period <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n if (stepCount < (minStep ?? 0)) return false;\n return stepCount % period === 0;\n};\n\nexport const toolCallStreakTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const threshold = getTriggerThreshold(trigger) ?? 10;\n if (threshold <= 0) return false;\n const count = countToolCallsInCurrentRequest(ctx.history);\n if (count < threshold) return false;\n return trigger.moduloStep === false ? true : count % threshold === 0;\n};\n\nexport const budgetWarningTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const toolName = readString(trigger.toolName) ?? readContextCheckpointToolName(ctx);\n const tools = ctx.request.availableTools;\n if (!Array.isArray(tools) || !tools.includes(toolName)) return false;\n\n const stepCount = readNumber(ctx.executorLocal?.stepCount);\n const maxSteps = readNumber(ctx.executorLocal?.maxSteps);\n const ratio = readNumber(trigger.ratio) ?? 0.9;\n if (stepCount === undefined || maxSteps === undefined || maxSteps <= 0) return false;\n if (ctx.executorLocal?.phase === 'force_final_answer') return false;\n\n const threshold = Math.floor(maxSteps * ratio);\n return stepCount >= threshold && stepCount < threshold + 4;\n};\n\nexport const agentHasToolTrigger: SystemReminderTriggerEvaluator = (ctx, trigger) => {\n const toolName = readString(trigger.toolName) ?? readString(trigger.value);\n if (!toolName || !Array.isArray(ctx.request.availableTools)) return false;\n return ctx.request.availableTools.includes(toolName);\n};\n\nexport const BUILTIN_SYSTEM_REMINDER_TRIGGERS: Record<string, SystemReminderTriggerEvaluator> = {\n 'phase-equals': phaseEqualsTrigger,\n 'remaining-steps-leq': remainingStepsLeqTrigger,\n 'step-count-modulo': stepCountModuloTrigger,\n 'tool-call-streak': toolCallStreakTrigger,\n 'budget-warning': budgetWarningTrigger,\n 'agent-has-tool': agentHasToolTrigger,\n};\n","import { BUILTIN_SYSTEM_REMINDER_TEMPLATES } from './templates';\nimport { BUILTIN_SYSTEM_REMINDER_TRIGGERS } from './triggers';\nimport type {\n SystemReminderContentTemplate,\n SystemReminderRule,\n SystemReminderRuleDefinition,\n SystemReminderTriggerEvaluator,\n} from './types';\n\nexport class SystemReminderRegistry {\n private readonly triggers = new Map<string, SystemReminderTriggerEvaluator>();\n private readonly templates = new Map<string, SystemReminderContentTemplate>();\n\n constructor(seed?: {\n triggers?: Record<string, SystemReminderTriggerEvaluator>;\n templates?: Record<string, SystemReminderContentTemplate>;\n }) {\n for (const [kind, evaluator] of Object.entries(seed?.triggers ?? {})) {\n this.registerTriggerKind(kind, evaluator);\n }\n for (const [name, template] of Object.entries(seed?.templates ?? {})) {\n this.registerContentTemplate(name, template);\n }\n }\n\n registerTriggerKind(kind: string, evaluator: SystemReminderTriggerEvaluator): void {\n const normalized = kind.trim();\n if (!normalized) {\n throw new Error('[SystemReminderRegistry] trigger kind 不能为空');\n }\n this.triggers.set(normalized, evaluator);\n }\n\n registerContentTemplate(name: string, template: SystemReminderContentTemplate): void {\n const normalized = name.trim();\n if (!normalized) {\n throw new Error('[SystemReminderRegistry] content template 不能为空');\n }\n this.templates.set(normalized, template);\n }\n\n buildRule(definition: SystemReminderRuleDefinition): SystemReminderRule | undefined {\n const trigger = this.triggers.get(definition.trigger.kind);\n const template = this.templates.get(definition.contentTemplate);\n if (!trigger || !template) {\n return undefined;\n }\n\n return {\n id: definition.id,\n when: (ctx) => trigger(ctx, definition.trigger),\n build: (ctx) => template(ctx, definition.contentArgs),\n };\n }\n}\n\nexport function createDefaultSystemReminderRegistry(): SystemReminderRegistry {\n return new SystemReminderRegistry({\n triggers: BUILTIN_SYSTEM_REMINDER_TRIGGERS,\n templates: BUILTIN_SYSTEM_REMINDER_TEMPLATES,\n });\n}\n\nexport const defaultSystemReminderRegistry = createDefaultSystemReminderRegistry();\n","/**\n * @file src/agent/runtime-kernel/system-reminder/rules.ts\n * @description SystemReminder 规则集合(注册式配置入口)\n *\n * 中文备注:\n * - 内置规则也走 trigger + template,和 host extraRules 使用同一套解释链路;\n * - spec 只引用 rule/template/trigger ID,不塞函数,保证可序列化、可回放、可审计。\n */\n\nimport type { AgentSpecSystemReminderPolicy } from '../../contracts';\nimport { defaultSystemReminderRegistry, type SystemReminderRegistry } from './registry';\nimport type { SystemReminderRule, SystemReminderRuleDefinition } from './types';\n\nexport const SYSTEM_REMINDER_RULES: ReadonlyArray<SystemReminderRuleDefinition> = [\n {\n id: 'max_steps_force_final_answer',\n trigger: { kind: 'phase-equals', value: 'force_final_answer' },\n contentTemplate: 'maxStepsForceFinalAnswer',\n },\n {\n id: 'last_steps_hint',\n trigger: { kind: 'remaining-steps-leq' },\n contentTemplate: 'lastStepsHint',\n },\n {\n id: 'tool_call_streak_every_ten',\n trigger: { kind: 'tool-call-streak', threshold: 10, moduloStep: true },\n contentTemplate: 'toolCallStreak',\n },\n {\n id: 'periodic_taskstate_reflection',\n trigger: { kind: 'step-count-modulo', period: 30, minStep: 30 },\n contentTemplate: 'periodicTaskstateReflection',\n },\n {\n id: 'context_budget_warning',\n trigger: { kind: 'budget-warning', ratio: 0.9 },\n contentTemplate: 'contextBudgetWarning',\n },\n];\n\nexport function createSystemReminderRules(params: {\n policy?: AgentSpecSystemReminderPolicy;\n registry?: SystemReminderRegistry;\n} = {}): ReadonlyArray<SystemReminderRule> {\n const registry = params.registry ?? defaultSystemReminderRegistry;\n const definitions = applySystemReminderPolicy(SYSTEM_REMINDER_RULES, params.policy);\n const extraDefinitions = params.policy?.extraRules ?? [];\n\n return [...definitions, ...extraDefinitions]\n .map((definition) => registry.buildRule(definition))\n .filter((rule): rule is SystemReminderRule => !!rule);\n}\n\nfunction applySystemReminderPolicy(\n definitions: ReadonlyArray<SystemReminderRuleDefinition>,\n policy: AgentSpecSystemReminderPolicy | undefined,\n): ReadonlyArray<SystemReminderRuleDefinition> {\n const withThresholds = definitions.map((definition) => applyThresholdOverrides(definition, policy));\n const enabledRuleIds = policy?.enabledRuleIds;\n if (Array.isArray(enabledRuleIds)) {\n const allow = new Set(enabledRuleIds);\n return withThresholds.filter((definition) => allow.has(definition.id));\n }\n\n const disabledRuleIds = policy?.disabledRuleIds;\n if (Array.isArray(disabledRuleIds) && disabledRuleIds.length > 0) {\n const deny = new Set(disabledRuleIds);\n return withThresholds.filter((definition) => !deny.has(definition.id));\n }\n\n return withThresholds;\n}\n\nfunction applyThresholdOverrides(\n definition: SystemReminderRuleDefinition,\n policy: AgentSpecSystemReminderPolicy | undefined,\n): SystemReminderRuleDefinition {\n const thresholds = policy?.thresholds;\n if (!thresholds) return definition;\n\n if (definition.id === 'tool_call_streak_every_ten' && thresholds.toolCallStreak !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, threshold: thresholds.toolCallStreak },\n };\n }\n if (definition.id === 'periodic_taskstate_reflection' && thresholds.taskstateReflectionPeriod !== undefined) {\n return {\n ...definition,\n trigger: {\n ...definition.trigger,\n period: thresholds.taskstateReflectionPeriod,\n minStep: thresholds.taskstateReflectionPeriod,\n },\n };\n }\n if (definition.id === 'context_budget_warning' && thresholds.budgetWarningRatio !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, ratio: thresholds.budgetWarningRatio },\n };\n }\n if (definition.id === 'last_steps_hint' && thresholds.lastStepsHintThreshold !== undefined) {\n return {\n ...definition,\n trigger: { ...definition.trigger, threshold: thresholds.lastStepsHintThreshold },\n };\n }\n return definition;\n}\n","/**\n * @file src/agent/runtime-kernel/system-reminder/apply.ts\n * @description SystemReminder 注入引擎:把提醒追加到“最后一条将发送给 LLM 的 message.content”末尾\n *\n * 关键约束(根因级):\n * - 这里的注入只发生在“即将发给 LLM 的 messages”数组上\n * - 不生成 RuntimeEvent,不写入 history,不进入数据库(下一次 request 不可回放)\n * - 允许出现在 LLMRunAudit(after_context_manager)里:因为它属于“本次真实发给模型的输入”\n */\n\nimport type { AgentSpecSystemReminderPolicy } from '../../contracts';\nimport { createSystemReminderRules } from './rules';\nimport { defaultSystemReminderRegistry, type SystemReminderRegistry } from './registry';\nimport type { SystemReminderContext, SystemReminderRule } from './types';\nimport { Logger } from '../../shared/logger';\n\ntype LlmMessage = Record<string, unknown> & { content?: unknown };\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => !!v && typeof v === 'object' && !Array.isArray(v);\n\nconst logger = new Logger('SystemReminder');\n\nconst readString = (v: unknown): string | undefined => {\n if (typeof v !== 'string') return undefined;\n const s = v;\n return s.length > 0 ? s : undefined;\n};\n\nconst normalizeReminderText = (raw: string): string | undefined => {\n const t = raw.trim();\n return t.length > 0 ? t : undefined;\n};\n\nconst wrapSystemReminderTag = (body: string): string => {\n // 中文备注:统一用标签包裹,方便模型识别,也方便未来 UI/解析侧按标签提取\n return `<system-reminder>\\n${body}\\n</system-reminder>`;\n};\n\n/**\n * 将 system-reminder 追加到最后一条消息末尾(原地返回新数组,但不修改原数组引用)\n */\nexport function applySystemReminders(params: {\n llmMessages: unknown[];\n ctx: SystemReminderContext;\n rules?: ReadonlyArray<SystemReminderRule>;\n policy?: AgentSpecSystemReminderPolicy;\n registry?: SystemReminderRegistry;\n /**\n * 🔔 命中回调:仅当本次确实发生注入时触发\n *\n * 中文备注:\n * - 用于“审计增强”:在 after_context_manager 覆盖写语义下,仍能保留命中时刻的快照;\n * - 回调只传递最小信息(ruleIds),避免额外依赖和体积膨胀。\n */\n onInjected?: (info: { ruleIds: string[] }) => void;\n}): unknown[] {\n const { llmMessages, ctx } = params;\n const policy = params.policy ?? ctx.executorLocal?.systemReminderPolicy;\n const rules = params.rules ?? createSystemReminderRules({\n policy,\n registry: params.registry ?? defaultSystemReminderRegistry,\n });\n\n if (!Array.isArray(llmMessages) || llmMessages.length === 0) return llmMessages;\n\n // 1) 计算本 tick 的提醒文本列表\n const seenRuleIds = new Set<string>();\n const injectedRuleIds: string[] = [];\n const texts: string[] = [];\n for (const rule of rules) {\n if (!rule || typeof rule !== 'object') continue;\n if (typeof rule.id !== 'string' || rule.id.trim().length === 0) continue;\n if (seenRuleIds.has(rule.id)) continue;\n\n let hit = false;\n try {\n hit = rule.when(ctx);\n } catch {\n hit = false;\n }\n if (!hit) continue;\n\n seenRuleIds.add(rule.id);\n try {\n const built = rule.build(ctx);\n const normalized = normalizeReminderText(built);\n if (normalized) {\n injectedRuleIds.push(rule.id);\n texts.push(normalized);\n }\n } catch {\n // 中文备注:规则必须是纯函数且可控;这里不做“推测性兜底”,失败就跳过该规则\n }\n }\n\n if (texts.length === 0) return llmMessages;\n\n // 2) 组装一个标签块(多条提醒合并到同一个 <system-reminder> 中)\n const body = texts.map((t) => `- ${t.replace(/\\n/g, '\\n ')}`).join('\\n');\n const tag = wrapSystemReminderTag(body);\n\n // 3) 只追加到最后一条消息的 content 末尾(不新增消息)\n const lastIdx = llmMessages.length - 1;\n const last = llmMessages[lastIdx];\n if (!isRecord(last)) return llmMessages;\n\n const lastMsg: LlmMessage = last;\n const currentContent = readString(lastMsg.content) ?? '';\n const glue = currentContent.length > 0 && !currentContent.endsWith('\\n') ? '\\n\\n' : '\\n';\n const nextContent = `${currentContent}${glue}${tag}`;\n\n const nextMessages = [...llmMessages];\n nextMessages[lastIdx] = { ...lastMsg, content: nextContent };\n\n /**\n * ✅ 轻量审计日志(方案 B)\n *\n * 中文备注(根因级):\n * - after_context_manager 审计点只保留“最后一次 messages”,中途注入可能被覆盖;\n * - 因此这里在“确实发生注入”时打一条极简日志,便于确认触发时机(例如第 10 次 tool_calls)。\n * - 严格限制输出体积:只输出 ruleId 列表与少量 executorLocal 关键字段,避免每次 request 都刷屏。\n */\n if (typeof params.onInjected === 'function') {\n try {\n params.onInjected({ ruleIds: injectedRuleIds });\n } catch {\n // 中文备注:回调是可选扩展点;失败不应影响主链路\n }\n }\n logger.info('SystemReminder 已注入到 LLM 输入末尾', {\n ruleIds: injectedRuleIds.length > 0 ? injectedRuleIds : Array.from(seenRuleIds),\n promptKey: ctx.request.promptKey,\n executorLocal: {\n phase: ctx.executorLocal?.phase,\n stepCount: ctx.executorLocal?.stepCount,\n maxSteps: ctx.executorLocal?.maxSteps,\n remainingSteps: ctx.executorLocal?.remainingSteps,\n finalStepPolicy: ctx.executorLocal?.finalStepPolicy,\n lastStepsHintThreshold: ctx.executorLocal?.lastStepsHintThreshold,\n },\n });\n return nextMessages;\n}\n","import { applySystemReminders } from '../../../system-reminder/apply';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport type { AiMessage } from '../../../../contracts';\n\nexport function createApplySystemReminderStage(): TickStage {\n return {\n id: 'apply_system_reminder',\n async run(ctx: TickPipelineContext): Promise<void> {\n ctx.systemReminderHitRuleIds = undefined;\n ctx.llmMessages = applySystemReminders({\n llmMessages: ctx.llmMessages,\n ctx: {\n request: ctx.request,\n history: ctx.history,\n executorLocal: ctx.executorLocal,\n },\n policy: ctx.executorLocal?.systemReminderPolicy,\n onInjected: ({ ruleIds }) => {\n ctx.systemReminderHitRuleIds = Array.isArray(ruleIds) ? ruleIds : [];\n },\n }) as AiMessage[];\n },\n };\n}\n","import { Logger } from '../../../../shared/logger';\nimport type { GraphExecutorContextBuilder } from '../../executorContextBuilder';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport {\n buildHistorySummaryRuntimeEvent,\n isHistorySummaryEvent,\n} from '../helpers';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport interface BuildContextStageDependencies {\n contextBuilder: GraphExecutorContextBuilder;\n}\n\nexport function createBuildContextStage(\n dependencies: BuildContextStageDependencies,\n): TickStage {\n return {\n id: 'build_context',\n async run(ctx: TickPipelineContext): Promise<void> {\n const contextBuildResult = await dependencies.contextBuilder.build({\n request: ctx.request,\n history: ctx.history,\n summarizationCallbacks: ctx.summarizationCallbacks,\n modelId: ctx.modelId,\n signal: ctx.signal,\n });\n\n ctx.mode = contextBuildResult.mode;\n ctx.llmMessages = contextBuildResult.llmMessages;\n ctx.contextTrace = contextBuildResult.contextTrace;\n\n for (const event of contextBuildResult.summaryEvents) {\n if (!isHistorySummaryEvent(event)) {\n continue;\n }\n const runtimeEvent = buildHistorySummaryRuntimeEvent(event, ctx.conversationId, ctx.turnId);\n ctx.eventHandler?.(runtimeEvent);\n logger.info('[GraphAgentExecutor] 发出上下文构建摘要事件', {\n mode: ctx.mode,\n eventId: runtimeEvent.id,\n });\n }\n },\n };\n}\n","import { generateMessageId } from '../../../../shared/ids';\nimport type {\n FinalAnswerEvent,\n ToolCallDecisionEvent,\n} from '../../../events/agentEvents';\nimport type { ToolPresentationPort } from '../../../tools/ports';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport {\n extractResponseText,\n normalizeToolCalls,\n parsePrimaryToolArgs,\n resolveReasoningDetails,\n resolveToolCalls,\n} from '../helpers';\n\nexport interface BuildDecisionStageDependencies {\n toolPresentation: Pick<ToolPresentationPort, 'getDisplayOptions'>;\n}\n\nexport function createBuildDecisionStage(\n dependencies: BuildDecisionStageDependencies,\n): TickStage {\n return {\n id: 'build_decision',\n async run(ctx: TickPipelineContext): Promise<void> {\n const respText = extractResponseText(ctx.llmResp);\n const toolCallsRaw = resolveToolCalls(ctx.llmResp);\n const reasoningDetailsRaw = resolveReasoningDetails(ctx.llmResp);\n const toolCalls = ctx.forceFinalAnswer ? undefined : toolCallsRaw;\n\n if (toolCalls?.length) {\n const normalizedToolCalls = normalizeToolCalls(toolCalls);\n const firstToolCall = normalizedToolCalls[0];\n const primaryArgs = parsePrimaryToolArgs(firstToolCall);\n const primaryToolName = firstToolCall?.function?.name ?? 'unknown';\n const primaryToolCallId = firstToolCall?.id ?? '';\n\n const actionEvent: ToolCallDecisionEvent = {\n type: 'tool_call_decision',\n timestamp: Date.now(),\n tool_name: primaryToolName,\n tool_args: primaryArgs,\n tool_calls: normalizedToolCalls,\n tool_call_id: primaryToolCallId,\n status: 'loading',\n payload: {\n args: primaryArgs,\n tool_calls: normalizedToolCalls,\n ...(Array.isArray(reasoningDetailsRaw) && reasoningDetailsRaw.length > 0\n ? { reasoning_details: reasoningDetailsRaw }\n : {}),\n },\n meta: {\n displayOptions: dependencies.toolPresentation.getDisplayOptions(primaryToolName),\n primary_tool_call_id: primaryToolCallId,\n tool_call_ids: normalizedToolCalls.map((toolCall) => toolCall.id),\n tool_batch_size: normalizedToolCalls.length,\n },\n id: generateMessageId(),\n };\n\n ctx.eventHandler?.(actionEvent);\n ctx.decision = {\n kind: 'tool_calls',\n toolCalls: normalizedToolCalls,\n };\n return;\n }\n\n if (!ctx.input.stream) {\n const answerId = generateMessageId();\n const finalAnswerSidecar = Array.isArray(reasoningDetailsRaw) && reasoningDetailsRaw.length > 0\n ? { reasoning_details: reasoningDetailsRaw }\n : {};\n const finalEvent: FinalAnswerEvent = {\n type: 'final_answer',\n timestamp: Date.now(),\n answer: respText,\n id: generateMessageId(),\n ...finalAnswerSidecar,\n };\n ctx.eventHandler?.(finalEvent);\n ctx.newEvents.push({\n type: 'final_answer',\n id: finalEvent.id!,\n conversation_id: ctx.conversationId,\n turn_id: ctx.turnId,\n timestamp: finalEvent.timestamp,\n version: 1,\n answer_id: answerId,\n content: respText,\n is_complete: true,\n ...finalAnswerSidecar,\n });\n ctx.decision = { kind: 'final_answer', answer: respText };\n return;\n }\n\n ctx.decision = { kind: 'yield' };\n },\n };\n}\n","import type {\n AuditActor,\n AuditCostDelta,\n AuditDecision,\n AuditEvidence,\n AuditScope,\n} from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeId } from '../../shared/ids';\n\nexport interface EmitAuditEnvelopeParams {\n runId?: string;\n parentRunId?: string;\n actor?: AuditActor;\n action: string;\n decision?: AuditDecision;\n evidence?: AuditEvidence[];\n costDelta?: AuditCostDelta;\n scope: AuditScope;\n}\n\nfunction resolveRunId(params: EmitAuditEnvelopeParams): string {\n const runId = params.runId ?? params.scope.runId ?? params.scope.turnId;\n if (typeof runId === 'string' && runId.trim().length > 0) {\n return runId;\n }\n throw new Error(`Audit action ${params.action} requires runId or scope.turnId`);\n}\n\n/**\n * 统一发出 AuditEnvelope。\n *\n * 中文备注:\n * - 调用点只描述“谁做了什么决策”,这里统一补 envelopeId / ts / runId;\n * - 不吞 emit 异常,审计链路异常应由上层测试或 host 策略显式处理。\n */\nexport async function emitAuditEnvelope(\n auditPort: AuditPort,\n params: EmitAuditEnvelopeParams,\n): Promise<void> {\n const runId = resolveRunId(params);\n await auditPort.emit({\n envelopeId: generateAuditEnvelopeId(),\n runId,\n parentRunId: params.parentRunId ?? params.scope.parentRunId,\n ts: Date.now(),\n actor: params.actor ?? { kind: 'system' },\n action: params.action,\n decision: params.decision,\n evidence: params.evidence,\n costDelta: params.costDelta,\n scope: {\n ...params.scope,\n runId,\n },\n });\n}\n\nexport async function emitSandboxDecisionAudit(\n auditPort: AuditPort,\n params: {\n scope: AuditScope;\n allowed: boolean;\n reason?: string;\n policy?: string;\n evidence?: AuditEvidence[];\n },\n): Promise<void> {\n await emitAuditEnvelope(auditPort, {\n action: 'sandbox.decide',\n actor: { kind: 'system' },\n decision: {\n outcome: params.allowed ? 'allowed' : 'denied',\n reason: params.reason,\n policy: params.policy,\n },\n evidence: params.evidence,\n scope: params.scope,\n });\n}\n","import type { AnyAgentEvent } from '../../../events/agentEvents';\nimport type { LlmCaller } from '../../../llm/caller';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport { readNonEmptyString } from '../helpers';\nimport { emitAuditEnvelope } from '../../../audit/emitAudit';\n\nexport interface ExecuteLlmStageDependencies {\n llmCaller: Pick<LlmCaller, 'callWithRetries'>;\n}\n\nexport function createExecuteLlmStage(\n dependencies: ExecuteLlmStageDependencies,\n): TickStage {\n return {\n id: 'execute_llm',\n async run(ctx: TickPipelineContext): Promise<void> {\n ctx.cloudQuotaFallbackAppliedModelId = undefined;\n ctx.modelFallbackAudit = undefined;\n\n const streamEventHandler: ((event: AnyAgentEvent) => void) | undefined =\n ctx.input.stream && ctx.eventHandler\n ? (event: AnyAgentEvent) => {\n ctx.eventHandler?.(event);\n }\n : undefined;\n\n ctx.llmCallStartedAt = Date.now();\n ctx.llmResp = await dependencies.llmCaller.callWithRetries(\n ctx.modelId,\n ctx.llmMessages,\n ctx.llmOptions,\n streamEventHandler,\n ctx.signal,\n (fallbackModelId: string) => {\n ctx.cloudQuotaFallbackAppliedModelId = readNonEmptyString(fallbackModelId);\n },\n (info) => {\n ctx.modelFallbackAudit = info;\n },\n );\n ctx.llmCallDurationMs = Date.now() - ctx.llmCallStartedAt;\n\n if (ctx.modelFallbackAudit) {\n await emitAuditEnvelope(ctx.audit, {\n action: 'model.fallback',\n actor: { kind: 'system' },\n decision: {\n outcome: 'fallback',\n reason: ctx.modelFallbackAudit.reason,\n policy: ctx.modelFallbackAudit.policy,\n metadata: {\n fromModelId: ctx.modelFallbackAudit.fromModelId,\n toModelId: ctx.modelFallbackAudit.toModelId,\n },\n },\n evidence: [\n {\n kind: 'llm_error',\n summary: ctx.modelFallbackAudit.reason,\n },\n ],\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n modelId: ctx.modelFallbackAudit.toModelId,\n },\n });\n }\n },\n };\n}\n","import type { LlmCallOptions } from '../../../llm/caller';\nimport type { ModelCatalogLike } from '../../../llm/modelCatalog';\nimport type { ModelResolverLike } from '../../../llm/modelResolver';\nimport type { ToolCatalogPort } from '../../../tools/ports';\nimport type { TickPipelineContext, TickStage } from '../types';\nimport { readNonEmptyString } from '../helpers';\nimport { emitAuditEnvelope } from '../../../audit/emitAudit';\n\nexport interface PrepareCallStageDependencies {\n modelResolver: Pick<ModelResolverLike, 'resolveModelId'>;\n modelCatalog: Pick<ModelCatalogLike, 'getModelById'>;\n toolCatalog: Pick<ToolCatalogPort, 'getToolSchemas'>;\n cloudQuotaFallbackModelId?: string;\n}\n\nexport function createPrepareCallStage(\n dependencies: PrepareCallStageDependencies,\n): TickStage {\n return {\n id: 'prepare_call',\n async run(ctx: TickPipelineContext): Promise<void> {\n const lockedRunModelId = readNonEmptyString(ctx.executorLocal?.runLockedModelId);\n const requestedModelId = lockedRunModelId ?? ctx.request.model_id;\n ctx.modelId = dependencies.modelResolver.resolveModelId(requestedModelId);\n await emitAuditEnvelope(ctx.audit, {\n action: 'model.select',\n actor: { kind: 'system' },\n decision: {\n outcome: 'recorded',\n reason: lockedRunModelId\n ? 'run model lock'\n : requestedModelId\n ? 'request model id'\n : 'default model resolver',\n metadata: {\n requestedModelId,\n lockedRunModelId,\n selectedModelId: ctx.modelId,\n },\n },\n evidence: [\n {\n kind: 'model_resolver',\n summary: `selected ${ctx.modelId}`,\n },\n ],\n scope: {\n conversationId: ctx.conversationId || undefined,\n turnId: ctx.turnId,\n runId: ctx.input.toolContext?.runId ?? ctx.turnId,\n parentRunId: ctx.input.toolContext?.parentRunId,\n modelId: ctx.modelId,\n },\n });\n ctx.toolSchemas = dependencies.toolCatalog.getToolSchemas(ctx.request.availableTools, {\n imageGenerationModelId: ctx.request.imageGenerationModelId,\n });\n\n const llmOptions: LlmCallOptions = {};\n if (!ctx.forceFinalAnswer && ctx.request.enableTools !== false && ctx.toolSchemas.length > 0) {\n llmOptions.tools = ctx.toolSchemas;\n if (ctx.executorLocal?.phase === 'force_tools') {\n const firstToolName = ctx.toolSchemas[0]?.function?.name;\n llmOptions.tool_choice =\n typeof firstToolName === 'string' && firstToolName.trim().length > 0\n ? { type: 'function', function: { name: firstToolName.trim() } }\n : 'auto';\n } else {\n llmOptions.tool_choice = 'auto';\n }\n } else {\n llmOptions.tool_choice = 'none';\n }\n\n const modelConfig = dependencies.modelCatalog.getModelById(ctx.modelId);\n // 云端限额降级仅在 run 内续跑时生效,用户发起的首次 LLM 调用不降级(直接报错)。\n // 判定依据:user(step 1)→llm(step 2) 时 stepCount===2,属于用户发起;\n // 其余场景(tool 后续跑 stepCount>2、checkpoint 重置 stepCount=1、child-run stepCount=1)均为续跑。\n const stepCount = ctx.executorLocal?.stepCount;\n const isRunContinuation = typeof stepCount === 'number' && stepCount !== 2;\n if (\n dependencies.cloudQuotaFallbackModelId &&\n modelConfig?.billing_mode === 'cloud' &&\n ctx.modelId !== dependencies.cloudQuotaFallbackModelId &&\n isRunContinuation\n ) {\n llmOptions.cloud_quota_fallback_model_id = dependencies.cloudQuotaFallbackModelId;\n }\n\n ctx.llmOptions = llmOptions;\n },\n };\n}\n","/**\n * @file src/agent/runtime-kernel/graph-engine/executor.ts\n *\n * @brief 图执行引擎的单步推理执行器\n */\nimport type { LlmCaller } from '../llm/caller';\nimport { createEmptyModelCatalog, type ModelCatalogLike } from '../llm/modelCatalog';\nimport { ModelResolver, type ModelResolverLike } from '../llm/modelResolver';\nimport { noopTelemetry } from '../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\nimport { noopAudit } from '../audit/noopAudit';\nimport type { AuditPort } from '../../ports';\nimport type { ToolCatalogPort, ToolPresentationPort } from '../tools/ports';\nimport { Logger } from '../../shared/logger';\nimport type { GraphExecutorContextBuilder } from './executorContextBuilder';\nimport {\n resolveConversationIdForRuntimeEvents,\n readNonEmptyString,\n} from './tick-pipeline/helpers';\nimport { contextAuditMiddleware } from './tick-pipeline/middlewares/contextAuditMiddleware';\nimport { llmTelemetryMiddleware } from './tick-pipeline/middlewares/llmTelemetryMiddleware';\nimport { runModelLockMiddleware } from './tick-pipeline/middlewares/runModelLockMiddleware';\nimport { runTickPipeline } from './tick-pipeline/runTickPipeline';\nimport { createApplySystemReminderStage } from './tick-pipeline/stages/applySystemReminderStage';\nimport { createBuildContextStage } from './tick-pipeline/stages/buildContextStage';\nimport { createBuildDecisionStage } from './tick-pipeline/stages/buildDecisionStage';\nimport { createExecuteLlmStage } from './tick-pipeline/stages/executeLlmStage';\nimport { createPrepareCallStage } from './tick-pipeline/stages/prepareCallStage';\nimport type {\n TickAroundMiddleware,\n TickEvent,\n TickInput,\n TickOutput,\n TickPipelineContext,\n TickStage,\n} from './tick-pipeline/types';\n\nexport type {\n AgentStepDecision,\n TickEvent,\n TickInput,\n TickOutput,\n} from './tick-pipeline/types';\n\nconst logger = new Logger('GraphAgentExecutor');\n\nexport interface GraphAgentExecutorOptions {\n cloudQuotaFallbackModelId?: string;\n modelCatalog?: ModelCatalogLike;\n modelResolver?: Pick<ModelResolverLike, 'resolveModelId'>;\n}\n\nexport interface GraphAgentExecutorToolRuntime\n extends Pick<ToolCatalogPort, 'getToolSchemas'>,\n Pick<ToolPresentationPort, 'getDisplayOptions'> {}\n\nexport interface GraphAgentExecutorLlmCaller\n extends Pick<LlmCaller, 'callWithRetries'> {}\n\nexport interface GraphAgentExecutorDependencies extends GraphAgentExecutorOptions {\n llmCaller: GraphAgentExecutorLlmCaller;\n toolRuntime: GraphAgentExecutorToolRuntime;\n contextBuilder: GraphExecutorContextBuilder;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(保持当前行为:observability 默认关闭,零业务影响)。\n */\n telemetryPort?: TelemetryPort;\n auditPort?: AuditPort;\n}\n\nexport class GraphAgentExecutor {\n private readonly llmCaller: GraphAgentExecutorLlmCaller;\n private readonly toolRuntime: GraphAgentExecutorToolRuntime;\n private readonly contextBuilder: GraphExecutorContextBuilder;\n private readonly cloudQuotaFallbackModelId?: string;\n private readonly modelResolver: Pick<ModelResolverLike, 'resolveModelId'>;\n private readonly modelCatalog: ModelCatalogLike;\n private readonly telemetryPort: TelemetryPort;\n private readonly auditPort: AuditPort;\n private readonly stages: TickStage[];\n private readonly middlewares: TickAroundMiddleware[];\n\n constructor(\n dependencies: GraphAgentExecutorDependencies,\n ) {\n this.llmCaller = dependencies.llmCaller;\n this.toolRuntime = dependencies.toolRuntime;\n this.contextBuilder = dependencies.contextBuilder;\n this.cloudQuotaFallbackModelId = readNonEmptyString(dependencies.cloudQuotaFallbackModelId);\n this.modelCatalog = dependencies.modelCatalog ?? createEmptyModelCatalog();\n this.modelResolver =\n dependencies.modelResolver ??\n new ModelResolver({\n modelCatalog: this.modelCatalog,\n });\n this.telemetryPort = dependencies.telemetryPort ?? noopTelemetry;\n this.auditPort = dependencies.auditPort ?? noopAudit;\n this.stages = [\n createPrepareCallStage({\n modelResolver: this.modelResolver,\n modelCatalog: this.modelCatalog,\n toolCatalog: this.toolRuntime,\n cloudQuotaFallbackModelId: this.cloudQuotaFallbackModelId,\n }),\n createBuildContextStage({\n contextBuilder: this.contextBuilder,\n }),\n createApplySystemReminderStage(),\n createExecuteLlmStage({\n llmCaller: this.llmCaller,\n }),\n createBuildDecisionStage({\n toolPresentation: this.toolRuntime,\n }),\n ];\n this.middlewares = [\n contextAuditMiddleware,\n llmTelemetryMiddleware,\n runModelLockMiddleware,\n ];\n }\n\n async tick(\n input: TickInput,\n eventHandler?: (event: TickEvent) => void,\n ): Promise<TickOutput> {\n const ctx: TickPipelineContext = {\n input,\n eventHandler,\n newEvents: [],\n request: input.request,\n history: input.history,\n signal: input.signal,\n forceFinalAnswer: input.forceFinalAnswer === true,\n executorLocal: input.executorLocal,\n summarizationCallbacks: input.summarizationCallbacks,\n modelId: '',\n toolSchemas: [],\n llmOptions: {},\n llmMessages: [],\n mode: input.request.mode === 'chat' ? 'chat' : 'agent',\n conversationId: resolveConversationIdForRuntimeEvents(input.toolContext),\n turnId: readNonEmptyString(input.toolContext?.turnId) ?? `turn_${Date.now()}`,\n telemetry: this.telemetryPort,\n audit: this.auditPort,\n };\n\n logger.info('[GraphAgentExecutor] tick 调用', {\n stream: input.stream === true,\n mode: ctx.mode,\n hasEventHandler: Boolean(eventHandler),\n hasSummarizationCallbacks: Boolean(input.summarizationCallbacks),\n });\n\n await runTickPipeline(ctx, this.stages, this.middlewares);\n\n return {\n decision: ctx.decision ?? { kind: 'yield' },\n newEvents: ctx.newEvents,\n };\n }\n}\n","import type { AgentInvocationRequest } from '../../ports';\nimport type { AnyAgentEvent } from '../events/agentEvents';\nimport type { ToolExecutionContext } from '../tools/toolExecutionContext';\nimport type { EngineLocalState, ExecutorLocalState } from './types';\nimport type { RuntimeEvent } from '../../contracts';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isAgentInvocationRequest(value: unknown): value is AgentInvocationRequest {\n if (!isRecord(value)) return false;\n if (typeof value.query !== 'string') return false;\n if (typeof value.promptKey !== 'string') return false;\n if (value.mode !== undefined && value.mode !== 'agent' && value.mode !== 'chat') return false;\n if (value.maxSteps !== undefined && typeof value.maxSteps !== 'number') return false;\n if (value.enableTools !== undefined && typeof value.enableTools !== 'boolean') return false;\n if (value.availableTools !== undefined) {\n if (!Array.isArray(value.availableTools)) return false;\n if (!value.availableTools.every((item) => typeof item === 'string')) return false;\n }\n return true;\n}\n\nfunction isToolExecutionContext(value: unknown): value is ToolExecutionContext {\n return isRecord(value);\n}\n\nfunction isRuntimeEventArray(value: unknown): value is RuntimeEvent[] {\n return Array.isArray(value);\n}\n\nfunction isExecutorLocalState(value: unknown): value is ExecutorLocalState {\n return isRecord(value) && typeof value.stepCount === 'number';\n}\n\ntype SummarizationCallbacks = NonNullable<EngineLocalState['summarizationCallbacks']>;\n\nfunction isSummarizationCallbacks(value: unknown): value is SummarizationCallbacks {\n return isRecord(value);\n}\n\ntype GraphSseSink = (evt: AnyAgentEvent | RuntimeEvent) => RuntimeEvent[] | void;\n\nfunction isGraphSseSink(value: unknown): value is GraphSseSink {\n return typeof value === 'function';\n}\n\nexport interface GraphAgentLocalView {\n conversationId: string;\n turnId?: string;\n request?: AgentInvocationRequest;\n toolContext?: ToolExecutionContext;\n history: RuntimeEvent[];\n sseSink?: GraphSseSink;\n executorLocal?: ExecutorLocalState;\n answerId?: string;\n chunkSeq: number;\n signal?: AbortSignal;\n summarizationCallbacks?: SummarizationCallbacks;\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function readGraphAgentLocal(local: EngineLocalState | undefined): GraphAgentLocalView {\n const source = local ?? {};\n const answerId = readNonEmptyString(source.answerId);\n const chunkSeq = Number.isInteger(source.chunkSeq) ? Number(source.chunkSeq) : 0;\n\n return {\n conversationId: readNonEmptyString(source.conversationId) ?? '',\n turnId: readNonEmptyString(source.turnId),\n request: isAgentInvocationRequest(source.request) ? source.request : undefined,\n toolContext: isToolExecutionContext(source.toolContext) ? source.toolContext : undefined,\n history: isRuntimeEventArray(source.history) ? source.history : [],\n sseSink: isGraphSseSink(source.sseSink) ? source.sseSink : undefined,\n executorLocal: isExecutorLocalState(source.executorLocal) ? source.executorLocal : undefined,\n answerId,\n chunkSeq,\n signal: source.signal instanceof AbortSignal ? source.signal : undefined,\n summarizationCallbacks: isSummarizationCallbacks(source.summarizationCallbacks)\n ? source.summarizationCallbacks\n : undefined,\n };\n}\n","import type { StandardToolCall } from '../types';\nimport type { RuntimeEvent } from '../../../contracts';\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 在单次 run() 执行期内管理的最小可变状态集。\n *\n * 中文备注:\n * - answerId / chunkSeq:流式答案分段与序列号,前端按 answer_id 归并。\n * - streamRuntimeEvents / seenRuntimeIds:运行时事件缓冲与去重。\n * - pendingToolCalls / finalAnswer / pendingInteractionSpec / lastToolResult:\n * 决策输出,最终回写到 EngineLocalState 供下游节点消费。\n */\nexport interface LlmNodeLocalState {\n /** 当前活动的答案段 ID(流式 chunk 归并用) */\n answerId: string | undefined;\n /** 当前答案段内已发出的 chunk 序号(下一个 chunk 使用的值) */\n chunkSeq: number;\n /** 已缓冲的 RuntimeEvent(含 sink 回灌事件),最终并入历史 */\n streamRuntimeEvents: RuntimeEvent[];\n /** 已缓冲的 RuntimeEvent ID 去重集合 */\n seenRuntimeIds: Set<string>;\n\n // ── 决策输出(由 tick 完成后的 decision 分支设置) ──\n pendingToolCalls: StandardToolCall[] | undefined;\n finalAnswer: string | undefined;\n pendingInteractionSpec: Record<string, unknown> | undefined;\n lastToolResult: Record<string, unknown> | undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Actions\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode reducer 接受的动作类型。\n *\n * 命名规则:\n * - STREAM_* / FINAL_ANSWER_*:handleAgentEvent 内的事件驱动动作\n * - RUNTIME_EVENT_BUFFERED:运行时事件入缓冲\n * - TOOL_CALLS_* / FINAL_ANSWER_DECISION / WAIT_USER_DECISION:tick 决策后的状态写入\n */\nexport type LlmNodeAction =\n | {\n type: 'STREAM_CHUNK_RECEIVED';\n /** 上游事件自带的 answer_id(可能为 undefined) */\n incomingAnswerId: string | undefined;\n /**\n * 兜底 answer_id(调用方在 dispatch 前预生成):\n * - 若 state.answerId 已存在则传入该值(延续当前答案段)\n * - 若 state.answerId 为 undefined 则传入新生成的 ID\n */\n generatedAnswerId: string;\n }\n | { type: 'FINAL_ANSWER_IGNORED' }\n | { type: 'FINAL_ANSWER_RECEIVED' }\n | { type: 'RUNTIME_EVENT_BUFFERED'; event: RuntimeEvent }\n | { type: 'TOOL_CALLS_ACCEPTED'; toolCalls: StandardToolCall[] }\n | { type: 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL' }\n | { type: 'FINAL_ANSWER_DECISION'; answer: string }\n | {\n type: 'WAIT_USER_DECISION';\n spec: Record<string, unknown>;\n lastToolResult: Record<string, unknown>;\n };\n\n// ---------------------------------------------------------------------------\n// Reducer\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 状态 reducer(纯函数)。\n *\n * 中文备注:\n * - 每次返回一个新的状态对象(或在无变更时返回原引用)。\n * - STREAM_CHUNK_RECEIVED 后调用方应使用 `state.chunkSeq - 1` 作为本次 chunk 的 seq。\n */\nexport function llmNodeReducer(\n state: LlmNodeLocalState,\n action: LlmNodeAction,\n): LlmNodeLocalState {\n switch (action.type) {\n case 'STREAM_CHUNK_RECEIVED': {\n const resolvedAnswerId = action.incomingAnswerId ?? action.generatedAnswerId;\n const answerChanged = state.answerId !== resolvedAnswerId;\n const baseSeq = answerChanged ? 0 : state.chunkSeq;\n return {\n ...state,\n answerId: resolvedAnswerId,\n chunkSeq: baseSeq + 1,\n };\n }\n\n case 'FINAL_ANSWER_IGNORED':\n case 'FINAL_ANSWER_RECEIVED': {\n return {\n ...state,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n\n case 'RUNTIME_EVENT_BUFFERED': {\n if (state.seenRuntimeIds.has(action.event.id)) {\n return state;\n }\n const newSeen = new Set(state.seenRuntimeIds);\n newSeen.add(action.event.id);\n return {\n ...state,\n streamRuntimeEvents: [...state.streamRuntimeEvents, action.event],\n seenRuntimeIds: newSeen,\n };\n }\n\n case 'TOOL_CALLS_ACCEPTED': {\n return {\n ...state,\n pendingToolCalls: action.toolCalls,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n\n case 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL': {\n return state;\n }\n\n case 'FINAL_ANSWER_DECISION': {\n return {\n ...state,\n finalAnswer: action.answer,\n };\n }\n\n case 'WAIT_USER_DECISION': {\n return {\n ...state,\n pendingInteractionSpec: action.spec,\n lastToolResult: action.lastToolResult,\n answerId: undefined,\n chunkSeq: 0,\n };\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Init / WriteBack\n// ---------------------------------------------------------------------------\n\nexport interface LlmNodeStateInit {\n answerId: string | undefined;\n chunkSeq: number;\n}\n\n/**\n * 从 graphLocal 读取值初始化 reducer 状态。\n */\nexport function initLlmNodeState(init: LlmNodeStateInit): LlmNodeLocalState {\n return {\n answerId: init.answerId,\n chunkSeq: init.chunkSeq,\n streamRuntimeEvents: [],\n seenRuntimeIds: new Set(),\n pendingToolCalls: undefined,\n finalAnswer: undefined,\n pendingInteractionSpec: undefined,\n lastToolResult: undefined,\n };\n}\n\nexport interface WriteBackContext {\n conversationId: string;\n turnId: string;\n /** tick 前的初始历史 */\n history: RuntimeEvent[];\n /** tick 返回的 newEvents */\n newEvents: RuntimeEvent[];\n}\n\n/**\n * 把 reducer 状态回写为 EngineLocalState 补丁。\n *\n * 中文备注:\n * - 返回的对象应以 `{ ...existingLocal, ...patch }` 形式合并回 state.local,\n * 保留 request / toolContext / sseSink / signal 等非 reducer 管辖字段。\n * - 只有被决策 action 显式设置的字段才出现在补丁中(pendingToolCalls 等),\n * 避免意外覆盖其他节点写入的同名字段。\n */\nexport function buildLocalPatch(\n nodeState: LlmNodeLocalState,\n ctx: WriteBackContext,\n): Record<string, unknown> {\n const updatedHistory = [...ctx.history, ...ctx.newEvents, ...nodeState.streamRuntimeEvents];\n\n const patch: Record<string, unknown> = {\n answerId: nodeState.answerId,\n chunkSeq: nodeState.chunkSeq,\n conversationId: ctx.conversationId,\n turnId: ctx.turnId,\n history: updatedHistory,\n };\n\n if (nodeState.pendingToolCalls !== undefined) {\n patch.pendingToolCalls = nodeState.pendingToolCalls;\n }\n if (nodeState.finalAnswer !== undefined) {\n patch.finalAnswer = nodeState.finalAnswer;\n }\n if (nodeState.pendingInteractionSpec !== undefined) {\n patch.pendingInteractionSpec = nodeState.pendingInteractionSpec;\n }\n if (nodeState.lastToolResult !== undefined) {\n patch.lastToolResult = nodeState.lastToolResult;\n }\n\n return patch;\n}\n","/**\n * @file runtime-kernel/events/agentEvents.ts\n * @description graph 主执行链使用的最小 Agent 事件契约\n *\n * 中文备注:\n * - 该文件只承载 runtime-kernel 主链路真正需要识别的事件子集;\n * - 目标是让 `executor` / `llmNode` / `eventMappers` 不再反向依赖宿主或产品层事件定义;\n * - host/product 层若有更丰富的事件,只要结构兼容,仍可在边界透传进来。\n */\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport interface AgentEvent {\n type: string;\n timestamp: number;\n id?: string;\n /**\n * 中文备注:\n * - 该标记只在运行期内存中使用,用于避免同一事件被 SSE 重复分发;\n * - 不属于持久化协议字段。\n */\n __dispatched_via_sse__?: true;\n}\n\ninterface BaseToolLifecycleAgentEvent extends AgentEvent {\n tool_name: string;\n tool_args: Record<string, unknown>;\n tool_calls?: unknown[];\n tool_call_id?: string;\n phase?: 'start' | 'update' | 'complete' | 'error';\n status?: 'loading' | 'success' | 'error';\n payload?: Record<string, unknown>;\n meta?: Record<string, unknown>;\n}\n\nexport interface ThoughtEvent extends AgentEvent {\n type: 'thought';\n content: string;\n delta?: string;\n is_complete?: boolean;\n meta?: Record<string, unknown>;\n thought_message_id?: string;\n}\n\nexport interface ToolCallDecisionEvent extends BaseToolLifecycleAgentEvent {\n type: 'tool_call_decision';\n}\n\nexport interface ToolProcessEvent extends BaseToolLifecycleAgentEvent {\n type: 'tool_process';\n}\n\nexport interface ObservationEvent extends AgentEvent {\n type: 'observation';\n tool_name: string;\n tool_call_id?: string;\n output: string;\n success?: boolean;\n payload?: Record<string, unknown>;\n duration_ms?: number;\n}\n\nexport interface FinalAnswerEvent extends AgentEvent {\n type: 'final_answer';\n answer: string;\n answer_id?: string;\n answerId?: string;\n reasoning_details?: unknown[];\n meta?: Record<string, unknown>;\n}\n\nexport interface ErrorEvent extends AgentEvent {\n type: 'error';\n error: string;\n details?: string;\n}\n\nexport interface StreamChunkEvent extends AgentEvent {\n type: 'stream_chunk';\n content: string;\n answer_id?: string;\n seq?: number;\n is_last?: boolean;\n isLast?: boolean;\n}\n\nexport interface ProviderSidecarEvent extends AgentEvent {\n type: 'provider_sidecar';\n reasoning_details?: unknown[];\n}\n\nexport type AnyAgentEvent =\n | ThoughtEvent\n | ToolCallDecisionEvent\n | ToolProcessEvent\n | ObservationEvent\n | FinalAnswerEvent\n | ErrorEvent\n | StreamChunkEvent\n | ProviderSidecarEvent;\n\nexport function isMarkedAsSseDispatched(event: unknown): boolean {\n return isRecord(event) && event['__dispatched_via_sse__'] === true;\n}\n\nexport function readAgentEventAnswerId(event: unknown): string | undefined {\n if (!isRecord(event)) return undefined;\n\n const snake = event['answer_id'];\n if (typeof snake === 'string' && snake.trim().length > 0) {\n return snake.trim();\n }\n\n const camel = event['answerId'];\n if (typeof camel === 'string' && camel.trim().length > 0) {\n return camel.trim();\n }\n\n return undefined;\n}\n\nexport function readAgentEventSeq(event: unknown): number | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['seq'];\n return Number.isInteger(value) ? Number(value) : undefined;\n}\n","import type { AiMessage, RuntimeEvent, ToolCallWire } from '../../contracts';\nimport type { ToolPresentationPort } from '../tools/ports';\n\nexport interface EventMappingContext {\n conversationId: string;\n turnId: string;\n timestamp?: number;\n /**\n * 事件级扩展元数据(透传到 SSE/RuntimeEvent.metadata)。\n *\n * 中文备注:这里只放跨事件归类信息,不放 ui.hidden 这类单事件展示语义。\n */\n metadata?: Record<string, unknown>;\n}\n\nexport interface SSEMappingOptions {\n emitSse?: boolean;\n skipAlreadyDispatched?: boolean;\n toolPresentationPort?: ToolPresentationPort;\n}\n\nexport interface RuntimeMappingOptions {\n collectRuntime?: boolean;\n skipIncomplete?: boolean;\n toolPresentationPort?: ToolPresentationPort;\n}\n\n/**\n * RuntimeEvent 回放所需的最小会话内存端口。\n *\n * 中文备注:\n * - core 只依赖“写入消息”的最小能力;\n * - 具体产品实现只要结构兼容即可接入。\n */\nexport interface ConversationMemoryPort {\n addUserMessage(content: string, id?: string): void;\n addAssistantMessage(\n content: string | null,\n type: AiMessage['type'] & ('thought' | 'final_answer' | 'tool_calls'),\n metadata?: AiMessage['metadata'],\n id?: string\n ): void;\n addToolResponse(toolCallId: string, content: string, toolName?: string, id?: string): void;\n appendMessage(message: AiMessage): void;\n}\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nexport const isToolCallWire = (value: unknown): value is ToolCallWire => {\n if (!isRecord(value)) return false;\n if (typeof value.id !== 'string') return false;\n if (value.type !== 'function') return false;\n const fn = value.function;\n return isRecord(fn) && typeof fn.name === 'string' && typeof fn.arguments === 'string';\n};\n\nexport function resolveToolDisplayOptions(\n toolName: string,\n toolPresentationPort?: ToolPresentationPort,\n) {\n return toolPresentationPort?.getDisplayOptions(toolName);\n}\n\nexport function readAnswerIdFromEvent(event: unknown): string | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['answerId'];\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function readMetaFromEvent(event: unknown): Record<string, unknown> | undefined {\n if (!isRecord(event)) return undefined;\n const value = event['meta'];\n return isRecord(value) ? value : undefined;\n}\n\nexport type HistorySummaryRuntimeEvent = RuntimeEvent & {\n type: 'history_summary';\n content: string;\n replaces_start_message_id?: string;\n replaces_end_message_id?: string;\n original_message_count?: number;\n compression_ratio?: number;\n generated_by?: string;\n included_old_summary?: boolean;\n replaced_message_ids?: string[];\n summary_seq?: number;\n};\n","import {\n AnyAgentEvent,\n ErrorEvent as AgentErrorEvent,\n FinalAnswerEvent as AgentFinalAnswerEvent,\n ObservationEvent as AgentObservationEvent,\n StreamChunkEvent as AgentStreamChunkEvent,\n ThoughtEvent as AgentThoughtEvent,\n ToolCallDecisionEvent as AgentToolCallDecisionEvent,\n ToolProcessEvent as AgentToolProcessEvent,\n readAgentEventAnswerId,\n readAgentEventSeq,\n} from './agentEvents';\nimport {\n RuntimeEvent,\n createErrorEvent,\n createFinalAnswerChunkEvent,\n createFinalAnswerEvent,\n createThoughtEvent,\n createToolCallDecisionEvent,\n createToolOutputEvent,\n createToolProcessEvent,\n} from '../../contracts';\nimport { generateMessageId } from '../../shared/ids';\nimport {\n type EventMappingContext,\n type RuntimeMappingOptions,\n isRecord,\n readAnswerIdFromEvent,\n readMetaFromEvent,\n resolveToolDisplayOptions,\n} from './provider-sidecar';\n\nexport function agentEventToRuntime(\n agentEvent: AnyAgentEvent | RuntimeEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions = {},\n): RuntimeEvent | null {\n if (!agentEvent || typeof agentEvent !== 'object') return null;\n\n if (isRecord(agentEvent) && agentEvent['type'] === 'history_summary') {\n const evt = agentEvent as RuntimeEvent;\n if (context.metadata) {\n evt.metadata = { ...(evt.metadata ?? {}), ...context.metadata };\n }\n return evt;\n }\n\n const typed = agentEvent as AnyAgentEvent;\n const { conversationId, turnId } = context;\n const timestamp = typed.timestamp ?? context.timestamp ?? Date.now();\n const id = typed.id ?? generateMessageId();\n const contextMeta = context.metadata;\n\n switch (typed.type) {\n case 'thought':\n return mapThoughtToRuntime(typed as AgentThoughtEvent, context, options, id, timestamp);\n\n case 'tool_call_decision':\n case 'tool_process':\n return mapToolProgressToRuntime(typed, context, options, id, timestamp);\n\n case 'observation': {\n const observationEvent = typed as AgentObservationEvent;\n const toolName = observationEvent.tool_name || 'unknown_tool';\n const toolCallId = observationEvent.tool_call_id || `call_${id}`;\n const success = observationEvent.success ?? !/^错误[::]/i.test(String(observationEvent.output ?? ''));\n const payload = observationEvent.payload || {};\n const event = createToolOutputEvent(\n id,\n conversationId,\n turnId,\n toolName,\n toolCallId,\n observationEvent.output,\n success ? 'success' : 'error',\n { timestamp, payload, duration_ms: payload.duration_ms as number | undefined },\n );\n event.ephemeral = false;\n if (contextMeta) event.metadata = { ...(event.metadata ?? {}), ...contextMeta };\n return event;\n }\n\n case 'final_answer': {\n const finalAnswerEvent = typed as AgentFinalAnswerEvent;\n const answerIdFromSnake =\n typeof finalAnswerEvent.answer_id === 'string' && finalAnswerEvent.answer_id.trim().length > 0\n ? finalAnswerEvent.answer_id.trim()\n : undefined;\n return createFinalAnswerEvent(\n id,\n conversationId,\n turnId,\n answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`,\n finalAnswerEvent.answer ?? '',\n {\n timestamp,\n reasoning_details: Array.isArray(finalAnswerEvent.reasoning_details)\n ? finalAnswerEvent.reasoning_details\n : undefined,\n meta: readMetaFromEvent(finalAnswerEvent),\n },\n );\n }\n\n case 'error': {\n const errorEvent = typed as AgentErrorEvent;\n return createErrorEvent(id, conversationId, turnId, errorEvent.error ?? 'Unknown error', {\n timestamp,\n details: errorEvent.details,\n });\n }\n\n case 'stream_chunk':\n return mapStreamChunkToRuntime(typed as AgentStreamChunkEvent, context, id, timestamp);\n\n default:\n return null;\n }\n}\n\nfunction mapThoughtToRuntime(\n thoughtEvent: AgentThoughtEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions,\n id: string,\n timestamp: number,\n): RuntimeEvent | null {\n const isComplete = 'is_complete' in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;\n if (options.skipIncomplete && !isComplete) return null;\n\n const thoughtMessageId =\n typeof thoughtEvent.thought_message_id === 'string' && thoughtEvent.thought_message_id.length > 0\n ? thoughtEvent.thought_message_id\n : undefined;\n const runtimeEvent = createThoughtEvent(id, context.conversationId, context.turnId, thoughtEvent.content ?? '', {\n timestamp,\n thought_message_id: thoughtMessageId,\n delta: thoughtEvent.delta,\n is_complete: isComplete,\n });\n if (!isComplete) runtimeEvent.ephemeral = true;\n const thoughtMeta = isRecord(thoughtEvent.meta) ? thoughtEvent.meta : undefined;\n if (context.metadata || thoughtMeta) {\n runtimeEvent.metadata = { ...(runtimeEvent.metadata ?? {}), ...(context.metadata ?? {}), ...(thoughtMeta ?? {}) };\n }\n return runtimeEvent;\n}\n\nfunction mapToolProgressToRuntime(\n toolEvent: AgentToolCallDecisionEvent | AgentToolProcessEvent,\n context: EventMappingContext,\n options: RuntimeMappingOptions,\n id: string,\n timestamp: number,\n): RuntimeEvent {\n const toolName = toolEvent.tool_name || 'unknown_tool';\n const toolCallId = toolEvent.tool_call_id || `call_${id}`;\n const meta = toolEvent.meta && typeof toolEvent.meta === 'object' ? { ...toolEvent.meta } : {};\n const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);\n if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;\n\n const event = toolEvent.type === 'tool_call_decision'\n ? createToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {\n timestamp,\n phase: toolEvent.phase ?? 'start',\n status: toolEvent.status ?? 'loading',\n args: toolEvent.tool_args || {},\n payload: toolEvent.payload || {},\n meta,\n })\n : createToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, {\n timestamp,\n phase: toolEvent.phase ?? 'start',\n status: toolEvent.status ?? 'loading',\n args: toolEvent.tool_args || {},\n payload: toolEvent.payload || {},\n meta,\n });\n event.ephemeral = meta.ephemeral === true;\n if (context.metadata) event.metadata = { ...(event.metadata ?? {}), ...context.metadata };\n return event;\n}\n\nfunction mapStreamChunkToRuntime(\n streamEvent: AgentStreamChunkEvent,\n context: EventMappingContext,\n id: string,\n timestamp: number,\n): RuntimeEvent | null {\n const text = streamEvent.content ?? '';\n if (!text) return null;\n const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${context.turnId}`;\n const seq = readAgentEventSeq(streamEvent) ?? 0;\n const isLast = Boolean(\n ('isLast' in streamEvent && streamEvent.isLast) ||\n ('is_last' in streamEvent && streamEvent.is_last),\n );\n const chunkEvent = createFinalAnswerChunkEvent(id, context.conversationId, context.turnId, answerId, seq, text, {\n timestamp,\n is_last: isLast,\n });\n chunkEvent.ephemeral = true;\n if (context.metadata) chunkEvent.metadata = { ...(chunkEvent.metadata ?? {}), ...context.metadata };\n return chunkEvent;\n}\n","import type {\n AiMessage,\n RuntimeEvent,\n ThoughtEvent as RuntimeThoughtEvent,\n ToolCallDecisionEvent as RuntimeToolCallDecisionEvent,\n ToolOutputEvent as RuntimeToolOutputEvent,\n FinalAnswerEvent as RuntimeFinalAnswerEvent,\n UserInputEvent as RuntimeUserInputEvent,\n ToolCallWire,\n} from '../../contracts';\nimport {\n type ConversationMemoryPort,\n type HistorySummaryRuntimeEvent,\n isToolCallWire,\n} from './provider-sidecar';\n\nexport function applyRuntimeEventToMemory(event: RuntimeEvent, memory: ConversationMemoryPort): void {\n if (!event || !memory) return;\n\n switch (event.type) {\n case 'user_input': {\n const userEvent = event as RuntimeUserInputEvent;\n memory.addUserMessage(userEvent.content || '', userEvent.id);\n break;\n }\n\n case 'tool_call_decision':\n applyToolCallDecision(event as RuntimeToolCallDecisionEvent, memory);\n break;\n\n case 'tool_output':\n applyToolOutput(event as RuntimeToolOutputEvent, memory);\n break;\n\n case 'final_answer': {\n const answerEvent = event as RuntimeFinalAnswerEvent;\n const answerContent = answerEvent.content || '';\n if (answerContent.trim()) {\n const metadata = Array.isArray(answerEvent.reasoning_details)\n ? { reasoning_details: answerEvent.reasoning_details }\n : undefined;\n memory.addAssistantMessage(answerContent, 'final_answer', metadata, answerEvent.id);\n }\n break;\n }\n\n case 'thought': {\n const thoughtEvent = event as RuntimeThoughtEvent;\n memory.addAssistantMessage(thoughtEvent.content || '', 'thought', undefined, thoughtEvent.id);\n break;\n }\n\n case 'history_summary':\n applyHistorySummary(event as HistorySummaryRuntimeEvent, memory);\n break;\n\n case 'error':\n break;\n\n default:\n break;\n }\n}\n\nfunction applyToolCallDecision(event: RuntimeToolCallDecisionEvent, memory: ConversationMemoryPort): void {\n const payload = event.payload || {};\n const toolCalls = Array.isArray(payload.tool_calls)\n ? payload.tool_calls.filter(isToolCallWire)\n : [];\n const toolArgs = event.args || payload.args || {};\n const toolCallId = event.tool_call_id ||\n (toolCalls.length > 0 ? toolCalls[0].id : `call_${event.id || Date.now()}`);\n\n const normalizedToolCalls: ToolCallWire[] = toolCalls.length > 0\n ? toolCalls\n : [\n {\n id: toolCallId,\n type: 'function',\n function: { name: event.tool_name, arguments: JSON.stringify(toolArgs || {}) },\n },\n ];\n const reasoningDetails = Array.isArray(payload.reasoning_details)\n ? payload.reasoning_details\n : undefined;\n\n memory.addAssistantMessage(\n null,\n 'tool_calls',\n {\n tool_calls: normalizedToolCalls,\n ...(reasoningDetails ? { reasoning_details: reasoningDetails } : {}),\n },\n event.id,\n );\n}\n\nfunction applyToolOutput(event: RuntimeToolOutputEvent, memory: ConversationMemoryPort): void {\n if (!event.tool_call_id) return;\n const payload = event.payload || {};\n const outputValue = payload.result ?? payload.output ?? event.output;\n let serializedOutput: string;\n if (typeof outputValue === 'string') {\n serializedOutput = outputValue;\n } else {\n try {\n serializedOutput = JSON.stringify(outputValue ?? '');\n } catch {\n serializedOutput = String(outputValue ?? '');\n }\n }\n memory.addToolResponse(String(event.tool_call_id), serializedOutput, event.tool_name, event.id);\n}\n\nfunction applyHistorySummary(summaryEvent: HistorySummaryRuntimeEvent, memory: ConversationMemoryPort): void {\n const summaryMetadata: AiMessage['metadata'] = {\n messageType: 'summary',\n generatedBy: summaryEvent.generated_by || 'AgentSummarizationProvider',\n originalMessageCount: summaryEvent.original_message_count,\n compressionRatio: summaryEvent.compression_ratio,\n includedOldSummary: summaryEvent.included_old_summary,\n replacesStartMessageId: summaryEvent.replaces_start_message_id,\n replacesEndMessageId: summaryEvent.replaces_end_message_id,\n replacedMessageIds: Array.isArray(summaryEvent.replaced_message_ids) ? summaryEvent.replaced_message_ids : [],\n summarySeq: summaryEvent.summary_seq || 0,\n };\n\n const summaryMessage: AiMessage = {\n id: summaryEvent.id,\n role: 'system',\n type: 'history_summary',\n content: summaryEvent.content || '',\n timestamp: summaryEvent.timestamp,\n metadata: summaryMetadata,\n };\n\n memory.appendMessage(summaryMessage);\n}\n","import {\n AnyAgentEvent,\n ErrorEvent as AgentErrorEvent,\n FinalAnswerEvent as AgentFinalAnswerEvent,\n ObservationEvent as AgentObservationEvent,\n StreamChunkEvent as AgentStreamChunkEvent,\n ThoughtEvent as AgentThoughtEvent,\n ToolCallDecisionEvent as AgentToolCallDecisionEvent,\n ToolProcessEvent as AgentToolProcessEvent,\n isMarkedAsSseDispatched,\n readAgentEventAnswerId,\n readAgentEventSeq,\n} from './agentEvents';\nimport {\n createSSEErrorEvent,\n createSSEFinalAnswerChunkEvent,\n createSSEFinalAnswerEvent,\n createSSEThoughtEvent,\n createSSEToolCallDecisionEvent,\n createSSEToolOutputEvent,\n createSSEToolProcessEvent,\n type SSEEvent,\n} from '../../contracts';\nimport { generateMessageId } from '../../shared/ids';\nimport {\n type EventMappingContext,\n type SSEMappingOptions,\n isRecord,\n readAnswerIdFromEvent,\n readMetaFromEvent,\n resolveToolDisplayOptions,\n} from './provider-sidecar';\n\nexport function agentEventToSSE(\n agentEvent: AnyAgentEvent,\n context: EventMappingContext,\n options: SSEMappingOptions = {},\n): SSEEvent | null {\n if (!agentEvent || typeof agentEvent !== 'object') return null;\n if (options.skipAlreadyDispatched && isMarkedAsSseDispatched(agentEvent)) return null;\n\n const { conversationId, turnId } = context;\n const timestamp = agentEvent.timestamp ?? context.timestamp ?? Date.now();\n const id = agentEvent.id ?? generateMessageId();\n const contextMeta = context.metadata;\n\n switch (agentEvent.type) {\n case 'thought': {\n const thoughtEvent = agentEvent as AgentThoughtEvent;\n const rawContent = 'content' in thoughtEvent ? thoughtEvent.content : '';\n const delta = 'delta' in thoughtEvent ? thoughtEvent.delta : '';\n const isComplete = 'is_complete' in thoughtEvent ? Boolean(thoughtEvent.is_complete) : false;\n const thoughtMessageId =\n typeof thoughtEvent.thought_message_id === 'string' && thoughtEvent.thought_message_id.length > 0\n ? thoughtEvent.thought_message_id\n : undefined;\n\n const sse = createSSEThoughtEvent(id, conversationId, turnId, {\n thought_message_id: thoughtMessageId,\n content: isComplete ? (rawContent ?? '') : undefined,\n delta: !isComplete ? (delta ?? rawContent) : undefined,\n is_complete: isComplete,\n });\n sse.timestamp = timestamp;\n const thoughtMeta = isRecord(thoughtEvent.meta) ? thoughtEvent.meta : undefined;\n if (contextMeta || thoughtMeta) {\n sse.metadata = { ...(contextMeta ?? {}), ...(thoughtMeta ?? {}) };\n }\n return sse;\n }\n\n case 'tool_call_decision':\n case 'tool_process':\n return mapToolProgressToSse(agentEvent, context, options, id, timestamp);\n\n case 'observation': {\n const observationEvent = agentEvent as AgentObservationEvent;\n const toolName = observationEvent.tool_name || 'unknown_tool';\n const toolCallId = observationEvent.tool_call_id || `call_${id}`;\n const status: 'success' | 'error' = observationEvent.success === false ? 'error' : 'success';\n const payload = observationEvent.payload || {};\n const duration = payload.duration_ms as number | undefined;\n const sse = createSSEToolOutputEvent(\n id,\n conversationId,\n turnId,\n toolName,\n toolCallId,\n status,\n observationEvent.output,\n { timestamp, payload, duration_ms: duration },\n );\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'stream_chunk': {\n const streamEvent = agentEvent as AgentStreamChunkEvent;\n const text = streamEvent.content ?? '';\n if (!text) return null;\n const answerId = readAgentEventAnswerId(streamEvent) ?? `answer_${turnId}`;\n const seq = readAgentEventSeq(streamEvent) ?? 0;\n const isLast = Boolean(\n ('isLast' in streamEvent && streamEvent.isLast) ||\n ('is_last' in streamEvent && streamEvent.is_last),\n );\n const sse = createSSEFinalAnswerChunkEvent(id, conversationId, turnId, answerId, seq, text, {\n is_last: isLast,\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'final_answer': {\n const finalAnswerEvent = agentEvent as AgentFinalAnswerEvent;\n const answer = finalAnswerEvent.answer ?? '';\n const answerIdFromSnake =\n typeof finalAnswerEvent.answer_id === 'string' && finalAnswerEvent.answer_id.trim().length > 0\n ? finalAnswerEvent.answer_id.trim()\n : undefined;\n const answerId = answerIdFromSnake ?? readAnswerIdFromEvent(finalAnswerEvent) ?? `answer_${turnId}`;\n const sse = createSSEFinalAnswerEvent(id, conversationId, turnId, answerId, answer, {\n meta: readMetaFromEvent(finalAnswerEvent),\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n case 'error': {\n const errorEvent = agentEvent as AgentErrorEvent;\n const sse = createSSEErrorEvent(id, conversationId, turnId, errorEvent.error ?? 'Unknown error', {\n details: errorEvent.details,\n });\n sse.timestamp = timestamp;\n if (contextMeta) sse.metadata = contextMeta;\n return sse;\n }\n\n default:\n return null;\n }\n}\n\nfunction mapToolProgressToSse(\n agentEvent: AgentToolCallDecisionEvent | AgentToolProcessEvent,\n context: EventMappingContext,\n options: SSEMappingOptions,\n id: string,\n timestamp: number,\n): SSEEvent {\n const toolName = agentEvent.tool_name || 'unknown_tool';\n const toolCallId = agentEvent.tool_call_id || `call_${id}`;\n const phase = agentEvent.phase ?? 'start';\n const status = agentEvent.status ?? 'loading';\n const args = agentEvent.tool_args || {};\n const payload = agentEvent.payload || {};\n const meta = agentEvent.meta && typeof agentEvent.meta === 'object' ? { ...agentEvent.meta } : {};\n const displayOptions = resolveToolDisplayOptions(toolName, options.toolPresentationPort);\n if (displayOptions && !meta.displayOptions) meta.displayOptions = displayOptions;\n\n const sse = agentEvent.type === 'tool_call_decision'\n ? createSSEToolCallDecisionEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {\n timestamp,\n args,\n payload,\n meta,\n })\n : createSSEToolProcessEvent(id, context.conversationId, context.turnId, toolName, toolCallId, phase, status, {\n timestamp,\n args,\n payload,\n meta,\n });\n sse.timestamp = timestamp;\n if (context.metadata) sse.metadata = context.metadata;\n return sse;\n}\n","/**\n * @file src/agent/runtime-kernel/events/eventMappers.ts\n * @brief 统一事件映射器兼容出口\n *\n * @description\n * 具体职责已拆分:\n * - sse-projection.ts:AnyAgentEvent → SSEEvent\n * - agent-to-runtime.ts:AnyAgentEvent → RuntimeEvent\n * - runtime-to-ai-message.ts:RuntimeEvent → ConversationMemoryPort\n * - provider-sidecar.ts:sidecar/tool_call/displayOptions 相关共享工具与类型\n */\n\nimport type { AnyAgentEvent } from './agentEvents';\nimport type { RuntimeEvent } from '../../contracts';\nimport { agentEventToRuntime } from './agent-to-runtime';\nimport {\n type ConversationMemoryPort,\n type EventMappingContext,\n type RuntimeMappingOptions,\n type SSEMappingOptions,\n} from './provider-sidecar';\nimport { applyRuntimeEventToMemory } from './runtime-to-ai-message';\nimport { agentEventToSSE } from './sse-projection';\n\nexport { agentEventToRuntime } from './agent-to-runtime';\nexport {\n type ConversationMemoryPort,\n type EventMappingContext,\n type RuntimeMappingOptions,\n type SSEMappingOptions,\n} from './provider-sidecar';\nexport { applyRuntimeEventToMemory } from './runtime-to-ai-message';\nexport { agentEventToSSE } from './sse-projection';\n\n/**\n * 统一的事件映射器。\n *\n * 中文备注:\n * - 保持旧调用方式 `eventMapper.xxx` 不变;\n * - 新逻辑不要继续写回本文件,按职责放到拆分后的模块。\n */\nexport const eventMapper = {\n /**\n * 将 AgentEvent 转换为 SSEEvent。\n */\n agentToSse: agentEventToSSE,\n\n /**\n * 将 AgentEvent 转换为 RuntimeEvent。\n */\n agentToRuntime: agentEventToRuntime,\n\n /**\n * 将 RuntimeEvent 应用到 ConversationMemoryPort。\n */\n applyToMemory: applyRuntimeEventToMemory,\n\n /**\n * 批量处理 AgentEvent → SSEEvent + RuntimeEvent。\n */\n agentToBoth: (\n agentEvent: AnyAgentEvent,\n context: EventMappingContext,\n options: { sseOptions?: SSEMappingOptions; runtimeOptions?: RuntimeMappingOptions } = {},\n ) => {\n const sseEvent = agentEventToSSE(agentEvent, context, options.sseOptions);\n const runtimeEvent = agentEventToRuntime(agentEvent, context, options.runtimeOptions);\n return { sseEvent, runtimeEvent };\n },\n\n /**\n * 批量重建内存。\n */\n rebuildMemory: (events: RuntimeEvent[], memory: ConversationMemoryPort) => {\n for (const event of events) {\n applyRuntimeEventToMemory(event, memory);\n }\n },\n};\n","/**\n * @file src/core/graph-engine/nodes/llmNode.eventBridge.ts\n *\n * @description\n * LlmNode 事件桥接对象 —— Phase 1.5-2b 的核心产物。\n *\n * 动机:\n * - Phase 1.5-2a 把状态变更收口为 reducer,但 SSE 分发、事件映射、\n * stream_chunk 增强、final_answer 去重等副作用逻辑仍以闭包形式\n * 留在 LlmNode.run() 中,占据约一半的方法体。\n * - 本模块把这些\"事件分发职责\"抽为独立的 LlmNodeEventBridge 对象,\n * 使 LlmNode.run() 精简为:状态初始化 → 阶段/请求解析 → 创建 bridge\n * → tick → 决策 dispatch → 状态回写 → 路由。\n *\n * 约束:\n * - bridge 不持有可变状态,所有状态读写通过 deps.getState / deps.dispatch 完成。\n * - bridge 不知晓 EngineState / NodeResult 等图执行概念,只负责单事件处理。\n * - 不依赖 features 层任何类型。\n */\n\nimport type { AnyAgentEvent } from '../../events/agentEvents';\nimport { generateMessageId } from '../../../shared/ids';\nimport { eventMapper } from '../../events/eventMappers';\nimport { Logger } from '../../../shared/logger';\nimport type { LlmNodeLocalState, LlmNodeAction } from './llmNode.state';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('LlmNode');\n\n/** reasoner.tick 的事件类型(AnyAgentEvent 或 RuntimeEvent) */\nexport type TickEvent = AnyAgentEvent | RuntimeEvent;\n\n/** 经 LlmNode 增强后下发 SSE 的 stream_chunk(补全 answer_id / seq / turn_id) */\ntype SseEnrichedStreamChunk = Extract<TickEvent, { type: 'stream_chunk' }> & {\n answer_id: string;\n seq: number;\n turn_id: string;\n};\n\n// ---------------------------------------------------------------------------\n// 内部辅助函数(从 llmNode.ts 迁入)\n// ---------------------------------------------------------------------------\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * 从 agentEvent 中读取有效的 answer_id。\n *\n * 中文备注:\n * - 过滤掉空字符串和占位符 'temp_answer'\n * - 返回 undefined 表示上游未指定有效 answer_id\n */\nexport function readIncomingAnswerId(agentEvent: unknown): string | undefined {\n if (!isRecord(agentEvent)) {\n return undefined;\n }\n const raw = agentEvent['answer_id'];\n if (typeof raw !== 'string') return undefined;\n\n const value = raw.trim();\n if (!value || value === 'temp_answer') {\n return undefined;\n }\n\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// 依赖接口\n// ---------------------------------------------------------------------------\n\nexport interface LlmNodeEventBridgeDeps {\n /** 当前 reducer 状态的只读快照 */\n getState: () => LlmNodeLocalState;\n /** reducer 状态变更 dispatch */\n dispatch: (action: LlmNodeAction) => void;\n /**\n * SSE 下行出口(undefined 表示无前端连接)\n *\n * 中文备注:须与 graphLocal 的 GraphSseSink 一致(参数为 TickEvent,而非 unknown);\n * 否则在 strictFunctionTypes 下窄参数函数不能赋给宽参数占位。\n */\n sseSink: ((evt: TickEvent) => RuntimeEvent[] | void) | undefined;\n /** 当前会话 ID */\n conversationId: string;\n /** 当前轮次 ID */\n turnId: string;\n}\n\n// ---------------------------------------------------------------------------\n// LlmNodeEventBridge\n// ---------------------------------------------------------------------------\n\n/**\n * LlmNode 事件桥接对象:封装 SSE 分发、事件映射、stream_chunk 增强、final_answer 去重。\n *\n * 中文备注:\n * - 每次 LlmNode.run() 创建一个实例,生命周期与单次 run 相同。\n * - `handle` 方法可直接作为 reasoner.tick() 的 eventHandler 回调传递。\n * - 状态读写均通过 deps.getState / deps.dispatch 完成,bridge 本身无可变状态。\n */\nexport class LlmNodeEventBridge {\n private readonly deps: LlmNodeEventBridgeDeps;\n\n constructor(deps: LlmNodeEventBridgeDeps) {\n this.deps = deps;\n }\n\n /**\n * 处理 reasoner.tick 产生的单个事件。\n * 可直接作为 eventHandler 回调传递给 reasoner.tick()。\n */\n handle = (agentEvent: TickEvent): void => {\n if (!agentEvent || typeof agentEvent !== 'object') return;\n\n const { conversationId, turnId } = this.deps;\n const context = { conversationId, turnId, timestamp: agentEvent.timestamp ?? Date.now() };\n\n if (agentEvent.type === 'stream_chunk') {\n this.handleStreamChunk(agentEvent);\n return;\n }\n\n // 如果已经产生过流式 chunk,则忽略 LLM 直接返回的 final_answer\n // (StreamCollector 已负责收集 chunk 并生成最终的 final_answer)\n const state = this.deps.getState();\n if (agentEvent.type === 'final_answer' && state.chunkSeq > 0) {\n logger.info(`[LlmNode] 忽略 final_answer(已有 ${state.chunkSeq} 个 chunk)`);\n this.deps.dispatch({ type: 'FINAL_ANSWER_IGNORED' });\n return;\n }\n\n this.dispatchSse(agentEvent);\n\n const runtimeEvent = eventMapper.agentToRuntime(agentEvent, context, { skipIncomplete: true });\n if (runtimeEvent) {\n this.deps.dispatch({ type: 'RUNTIME_EVENT_BUFFERED', event: runtimeEvent });\n }\n\n if (agentEvent.type === 'final_answer') {\n this.deps.dispatch({ type: 'FINAL_ANSWER_RECEIVED' });\n }\n };\n\n // ── 私有方法 ──────────────────────────────────────────────────────────\n\n /**\n * 处理 stream_chunk 事件:\n * - 解析/生成 answer_id\n * - dispatch STREAM_CHUNK_RECEIVED\n * - 构建增强事件(补充 answer_id、seq、turn_id)\n * - 通过 SSE 发送增强事件\n */\n private handleStreamChunk(agentEvent: Extract<TickEvent, { type: 'stream_chunk' }>): void {\n const state = this.deps.getState();\n const incomingAnswerId = readIncomingAnswerId(agentEvent);\n const generatedAnswerId = state.answerId ?? generateMessageId();\n // 与 llmNodeReducer 的 STREAM_CHUNK_RECEIVED 解析规则一致,保证此处为 string\n const resolvedAnswerId = incomingAnswerId ?? generatedAnswerId;\n\n this.deps.dispatch({ type: 'STREAM_CHUNK_RECEIVED', incomingAnswerId, generatedAnswerId });\n\n const newState = this.deps.getState();\n const enrichedEvent: SseEnrichedStreamChunk = {\n ...agentEvent,\n answer_id: resolvedAnswerId,\n seq: newState.chunkSeq - 1,\n turn_id: this.deps.turnId,\n };\n\n this.dispatchSse(enrichedEvent);\n }\n\n /**\n * 将事件发送到 SSE 出口,并处理 sink 反馈的回灌事件。\n */\n private dispatchSse(evt: TickEvent): void {\n const { sseSink } = this.deps;\n if (!sseSink) {\n return;\n }\n try {\n this.markDispatched(evt);\n const returnedEvents = sseSink(evt);\n if (Array.isArray(returnedEvents) && returnedEvents.length > 0) {\n logger.info('[LlmNode] 收到 sink 回灌事件', {\n eventCount: returnedEvents.length,\n });\n for (const event of returnedEvents) {\n if (event) {\n this.deps.dispatch({ type: 'RUNTIME_EVENT_BUFFERED', event });\n }\n }\n }\n } catch (error: unknown) {\n const payload =\n error instanceof Error\n ? { name: error.name, message: error.message, stack: error.stack }\n : { detail: error };\n logger.error('SSE dispatch failed:', payload);\n }\n }\n\n /**\n * 标记事件已通过 SSE 分发(用于下游去重判断)。\n */\n private markDispatched(evt: TickEvent): void {\n if (isRecord(evt)) {\n Object.defineProperty(evt, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n }\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport type { TickInput, TickOutput } from '../tick-pipeline/types';\nimport { Logger } from '../../../shared/logger';\nimport type { ExecutorLocalState } from '../types';\nimport { readGraphAgentLocal } from '../graphLocal';\nimport {\n initLlmNodeState,\n llmNodeReducer,\n buildLocalPatch,\n type LlmNodeAction,\n} from './llmNode.state';\nimport { LlmNodeEventBridge, type TickEvent } from './llmNode.eventBridge';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('LlmNode');\n\n/**\n * LlmNode 只依赖\"单步推理\"能力,不直接依赖具体执行器实现。\n *\n * 中文备注:\n * - 这样节点本身只关注图节点职责,不负责组装 `LlmCaller` / `ToolRegistry`;\n * - 默认依赖装配放到工厂里,方便测试替换,也降低构造函数耦合。\n */\nexport interface LlmNodeReasoner {\n tick(\n input: TickInput,\n eventHandler?: (event: TickEvent) => void,\n ): Promise<TickOutput>;\n}\n\nexport interface LlmNodeDependencies {\n reasoner: LlmNodeReasoner;\n}\n\nexport class LlmNode implements GraphNode {\n id = 'llm';\n private readonly reasoner: LlmNodeReasoner;\n\n constructor(dependencies: LlmNodeDependencies) {\n this.reasoner = dependencies.reasoner;\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = state.local ?? {};\n logger.info('[LlmNode] 开始执行 LLM 节点', {\n localKeys: Object.keys(local),\n });\n\n const graphLocal = readGraphAgentLocal(state.local);\n const { conversationId, request, toolContext, summarizationCallbacks, sseSink, signal, history } = graphLocal;\n logger.info('[LlmNode] 已加载历史事件', {\n historyCount: history.length,\n hasSummarizationCallbacks: Boolean(summarizationCallbacks),\n });\n\n const turnId = graphLocal.turnId ?? `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n if (!request) {\n logger.warn('Request object is missing, yielding.');\n return { kind: 'yield', events: [] };\n }\n\n // ── 阶段/请求解析 ──\n\n const phase = graphLocal.executorLocal?.phase;\n const forceFinalAnswer = phase === 'force_final_answer';\n const forceTools = phase === 'force_tools';\n\n const finalStepForcedTools = graphLocal.executorLocal?.finalStepForcedTools;\n const forcedTools = Array.isArray(finalStepForcedTools)\n ? finalStepForcedTools.filter((toolName) => typeof toolName === 'string' && toolName.length > 0)\n : [];\n\n const effectiveRequest = forceFinalAnswer\n ? { ...request, enableTools: false, availableTools: [] }\n : forceTools\n ? { ...request, enableTools: true, availableTools: forcedTools }\n : request;\n const executorLocal: ExecutorLocalState | undefined = graphLocal.executorLocal;\n\n // ── 状态 reducer ──\n\n let nodeState = initLlmNodeState({ answerId: graphLocal.answerId, chunkSeq: graphLocal.chunkSeq });\n const dispatch = (action: LlmNodeAction) => {\n nodeState = llmNodeReducer(nodeState, action);\n };\n\n // ── 事件桥(Phase 1.5-2b:SSE 分发与事件映射职责抽离) ──\n\n const bridge = new LlmNodeEventBridge({\n getState: () => nodeState,\n dispatch,\n sseSink,\n conversationId,\n turnId,\n });\n\n // ── 执行 tick ──\n\n const { decision, newEvents } = await this.reasoner.tick({\n request: effectiveRequest,\n toolContext,\n stream: true,\n history,\n signal,\n forceFinalAnswer,\n executorLocal,\n summarizationCallbacks,\n }, bridge.handle);\n\n // ── 决策 dispatch ──\n\n switch (decision.kind) {\n case 'tool_calls': {\n if (forceFinalAnswer) {\n dispatch({ type: 'TOOL_CALLS_REJECTED_BY_FORCE_FINAL' });\n } else {\n dispatch({ type: 'TOOL_CALLS_ACCEPTED', toolCalls: decision.toolCalls });\n }\n break;\n }\n case 'final_answer': {\n dispatch({ type: 'FINAL_ANSWER_DECISION', answer: decision.answer });\n break;\n }\n case 'wait_user': {\n dispatch({\n type: 'WAIT_USER_DECISION',\n spec: decision.pendingInteractionSpec,\n lastToolResult: decision.lastToolResult,\n });\n break;\n }\n }\n\n // ── 一次性回写 state.local ──\n\n const patch = buildLocalPatch(nodeState, { conversationId, turnId, history, newEvents });\n state.local = { ...(state.local || {}), ...patch };\n\n const combinedEvents = [...newEvents, ...nodeState.streamRuntimeEvents];\n\n logger.info('[LlmNode] 历史事件已更新', {\n previousCount: history.length,\n nextCount: (patch.history as RuntimeEvent[]).length,\n newEventCount: newEvents.length,\n streamedEventCount: nodeState.streamRuntimeEvents.length,\n });\n\n logger.info('[LlmNode] 执行器决策完成', {\n decisionKind: decision.kind,\n emittedEventCount: combinedEvents.length,\n });\n\n // ── 路由 ──\n\n switch (decision.kind) {\n case 'tool_calls': {\n if (forceFinalAnswer) {\n return { kind: 'yield', events: combinedEvents };\n }\n return { kind: 'route', nextNodeId: 'tool', events: combinedEvents };\n }\n case 'final_answer': {\n return { kind: 'route', nextNodeId: 'answer', events: combinedEvents };\n }\n case 'wait_user': {\n return { kind: 'route', nextNodeId: 'wait_user', events: combinedEvents };\n }\n case 'yield': {\n return { kind: 'yield', events: combinedEvents };\n }\n case 'error': {\n // Logger 的载荷类型为 Record<string, unknown>,需将 Error 序列化为普通对象\n const { name, message, stack } = decision.error;\n logger.error('[LlmNode] Executor returned an error', { name, message, stack });\n return { kind: 'yield', events: combinedEvents };\n }\n default: {\n return { kind: 'yield', events: combinedEvents };\n }\n }\n }\n}\n","function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\n/**\n * 中文备注:\n * - 这里集中收口“工具输出如何投影为最终答案”的显式规则;\n * - ToolNode 只负责执行工具与路由,业务级映射规则放到单独模块,避免节点继续膨胀。\n */\nexport function resolveFinalAnswerFromToolResult(toolName: string, parsedResult: unknown): string | undefined {\n if (!isRecord(parsedResult)) {\n return undefined;\n }\n\n const data = parsedResult.data;\n if (!isRecord(data)) {\n if (toolName === 'write_report') {\n throw new Error('[write_report] 工具输出缺少 data(必须包含 data.report)');\n }\n if (toolName === 'research_run_writer') {\n throw new Error('[research_run_writer] 工具输出缺少 data(必须包含 data.success 与 data.final_answer)');\n }\n return undefined;\n }\n\n if (toolName === 'write_report') {\n const report = readNonEmptyString(data.report);\n if (!report) {\n throw new Error('[write_report] 工具输出缺少 data.report(必须提供完整报告正文)');\n }\n return report;\n }\n\n if (toolName === 'research_run_writer') {\n if (data.success !== true) {\n return undefined;\n }\n const finalAnswer = readNonEmptyString(data.final_answer);\n if (!finalAnswer) {\n throw new Error('[research_run_writer] 工具输出缺少 data.final_answer(success=true 时必须提供最终报告正文)');\n }\n return finalAnswer;\n }\n\n return undefined;\n}\n\n","import type { RuntimeEvent } from '../../../contracts';\n\nexport type UnknownRecord = Record<string, unknown>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function readString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nexport function parseJsonSafe(input: unknown): unknown {\n if (typeof input !== 'string' || input.length === 0) {\n return null;\n }\n try {\n return JSON.parse(input);\n } catch {\n return null;\n }\n}\n\nexport function computeCitationOffset(history: RuntimeEvent[], turnId: string): number {\n let citationOffset = 0;\n\n for (const event of history) {\n if (event.turn_id !== turnId || event.type !== 'tool_output') {\n continue;\n }\n\n const payload = isRecord(event.payload) ? event.payload : undefined;\n const result = payload && isRecord(payload.result) ? payload.result : undefined;\n const data = result && isRecord(result.data) ? result.data : undefined;\n const citationsMetadata = data && isRecord(data.citations) ? data.citations : undefined;\n const citations = citationsMetadata?.citations;\n\n if (Array.isArray(citations)) {\n citationOffset += citations.length;\n }\n }\n\n return citationOffset;\n}\n\n","import type {\n ObservationPreviewContext,\n ObservationPreviewMeta,\n ObservationPreviewPort,\n} from '../../tools/ports';\nimport type { AgentSpecToolObservationGovernancePolicy } from '../../../contracts';\nimport { isRecord, readString } from './toolNode.helpers';\n\nexport const DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY = {\n /**\n * 执行期 observation 预览阈值。\n *\n * 中文说明:\n * - 这里控制“工具刚执行完后,原始 observation 多长就落盘到 ToolOutputStore”;\n * - 这是执行期的网络/持久化/实时回放保护,不替代 context-manager 的 `MAX_TOOL_PAIR_TOKENS`;\n * - `MAX_TOOL_PAIR_TOKENS` 仍负责下一轮构建 LLM 上下文时,对整组 tool_calls + tool_output 做 token 预算兜底。\n */\n enabled: true,\n maxChars: 20_000,\n maxLines: 1_200,\n} as const;\n\nexport const TOOL_OBSERVATION_PREVIEW_LIMITS = DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY;\n\nexport function resolveToolObservationGovernancePolicy(\n policy: AgentSpecToolObservationGovernancePolicy | undefined,\n): Required<AgentSpecToolObservationGovernancePolicy> {\n return {\n enabled: policy?.enabled ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.enabled,\n maxChars: policy?.maxChars ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.maxChars,\n maxLines: policy?.maxLines ?? DEFAULT_TOOL_OBSERVATION_GOVERNANCE_POLICY.maxLines,\n };\n}\n\nfunction buildToolOutputUiMeta(params: {\n toolName: string;\n parsed: Record<string, unknown>;\n}): ObservationPreviewMeta | undefined {\n const data = params.parsed['data'];\n if (!isRecord(data)) {\n return undefined;\n }\n\n if (params.toolName === 'browse_document_by_chunk' || params.toolName === 'browse_document_content') {\n const filename = readString(data['filename']);\n return filename ? { filename } : undefined;\n }\n\n if (params.toolName === 'sharedmemory_read') {\n const docName = readString(data['doc_name']);\n return docName ? { doc_name: docName } : undefined;\n }\n\n if (params.toolName === 'resource_read') {\n const uri = readString(data['uri']);\n if (typeof uri === 'string' && uri.startsWith('shared_memory://docs/')) {\n const docName = readString(data['doc_name']);\n return docName ? { doc_name: docName } : undefined;\n }\n if (typeof uri === 'string' && (uri.startsWith('evidence://') || uri.startsWith('citation_snapshot://'))) {\n const bundleId = readString(data['bundle_id']);\n return bundleId ? { document_name: bundleId } : undefined;\n }\n }\n\n if (params.toolName === 'workspace_read_documents') {\n const documentName = readString(data['documentName']) ?? readString(data['document_name']);\n const docTypeRaw = readString(data['docType']) ?? readString(data['doc_type']);\n const doc_type = docTypeRaw === 'markdown' || docTypeRaw === 'mindmap' ? docTypeRaw : undefined;\n if (!documentName && !doc_type) {\n return undefined;\n }\n return {\n ...(documentName ? { document_name: documentName } : {}),\n ...(doc_type ? { doc_type } : {}),\n };\n }\n\n return undefined;\n}\n\nexport async function applyObservationGovernance(params: {\n parsed: unknown;\n toolName: string;\n toolContext: ObservationPreviewContext;\n structuredObservation: string | undefined;\n observationPreview: ObservationPreviewPort;\n policy?: AgentSpecToolObservationGovernancePolicy;\n}): Promise<void> {\n if (!params.structuredObservation || !isRecord(params.parsed)) {\n return;\n }\n\n const policy = resolveToolObservationGovernancePolicy(params.policy);\n if (!policy.enabled) {\n return;\n }\n\n const truncated = await params.observationPreview.truncateObservation({\n context: params.toolContext,\n toolName: params.toolName,\n text: params.structuredObservation,\n maxChars: policy.maxChars,\n maxLines: policy.maxLines,\n meta: buildToolOutputUiMeta({\n toolName: params.toolName,\n parsed: params.parsed,\n }),\n });\n\n if (!truncated.truncated) {\n return;\n }\n\n params.parsed['observation'] = truncated.preview;\n const data = params.parsed['data'];\n if (isRecord(data) && !('tool_output_store' in data)) {\n data['tool_output_store'] = { blob_id: truncated.blob_id };\n }\n}\n","import { recordToolProtocolError } from '../../../shared/llmAuditRecorder';\n\nexport const TOOL_PROTOCOL_ERROR_FUSE_THRESHOLD = 4;\n\ntype ProtocolExecLike = {\n errorKind?: 'protocol' | 'execution';\n error?: string;\n};\n\nexport function applyProtocolFuseState(local: Record<string, unknown>, nextCount: number): void {\n if (nextCount > 0) {\n local._consecutiveToolProtocolErrors = nextCount;\n return;\n }\n\n delete local._consecutiveToolProtocolErrors;\n}\n\nexport function checkProtocolFuse(params: {\n local: Record<string, unknown>;\n exec: ProtocolExecLike;\n toolName: string;\n toolCallId?: string;\n rawArguments?: string;\n parsedArguments: Record<string, unknown>;\n}): { isProtocolError: boolean; nextCount: number; shouldFuse: boolean } {\n const isProtocolError = params.exec.errorKind === 'protocol';\n\n if (isProtocolError) {\n recordToolProtocolError({\n mode: 'agent',\n toolName: params.toolName,\n toolCallId: params.toolCallId,\n rawArguments: params.rawArguments,\n parsedArguments: params.parsedArguments,\n error: params.exec.error ?? 'unknown protocol error',\n });\n }\n\n const previousCount =\n typeof params.local._consecutiveToolProtocolErrors === 'number'\n ? (params.local._consecutiveToolProtocolErrors as number)\n : 0;\n const nextCount = isProtocolError ? previousCount + 1 : 0;\n\n return {\n isProtocolError,\n nextCount,\n shouldFuse: isProtocolError && nextCount >= TOOL_PROTOCOL_ERROR_FUSE_THRESHOLD,\n };\n}\n\nexport function createToolProtocolFuseError(nextCount: number, error: string | undefined): Error {\n const fuseError = new Error(\n `[ToolNode] Consecutive tool protocol errors reached fuse threshold (${nextCount}): ${error ?? 'unknown protocol error'}`\n );\n fuseError.name = 'ToolProtocolFuseError';\n return fuseError;\n}\n","import type { ToolControlInfo } from '../../tools/ui-types';\nimport type { UnknownRecord } from './toolNode.helpers';\nimport { isRecord } from './toolNode.helpers';\nimport type { RuntimeEvent } from '../../../contracts';\n\nfunction mergeHistory(local: UnknownRecord, runtimeEvents: RuntimeEvent[]): RuntimeEvent[] {\n const history = (local.history as RuntimeEvent[]) || [];\n return [...history, ...runtimeEvents];\n}\n\nfunction stripAnswerState(local: UnknownRecord): UnknownRecord {\n const { answerId, chunkSeq, ...rest } = local;\n return rest;\n}\n\nexport function readStructuredObservation(parsed: unknown): string | undefined {\n return isRecord(parsed) && typeof parsed.observation === 'string' ? parsed.observation : undefined;\n}\n\nexport function extractToolControlInfo(parsed: unknown): ToolControlInfo | undefined {\n if (!isRecord(parsed) || !isRecord(parsed.control)) {\n return undefined;\n }\n\n const control = parsed.control;\n const requireUser = control.requireUser === true;\n const terminateRun = control.terminateRun === true;\n if (!requireUser && !terminateRun) {\n return undefined;\n }\n\n return {\n ...(requireUser ? { requireUser: true } : {}),\n ...(typeof control.questionnaireId === 'string' ? { questionnaireId: control.questionnaireId } : {}),\n ...(control.resumeStrategy === 'continue' ? { resumeStrategy: 'continue' } : {}),\n ...(terminateRun ? { terminateRun: true } : {}),\n ...(typeof control.reason === 'string' ? { reason: control.reason } : {}),\n };\n}\n\nexport function buildSuccessOutputPayload(execResult: string | undefined, parsed: unknown): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n output: execResult ?? '',\n };\n if (parsed && typeof parsed === 'object') {\n payload.result = parsed;\n }\n return payload;\n}\n\nexport function applyToolOutputIdempotencyMetadata(params: {\n runtimeToolOutput: RuntimeEvent | null;\n execIdempotency?: { key: string; cacheHit: boolean };\n}): void {\n if (!params.runtimeToolOutput || !params.execIdempotency) {\n return;\n }\n\n if (params.execIdempotency.cacheHit) {\n params.runtimeToolOutput.ephemeral = true;\n }\n\n params.runtimeToolOutput.metadata = {\n ...(params.runtimeToolOutput.metadata ?? {}),\n idempotency: {\n key: params.execIdempotency.key,\n cache_hit: params.execIdempotency.cacheHit,\n },\n };\n}\n\nexport function buildRequireUserLocalState(params: {\n local: UnknownRecord;\n parsed: unknown;\n toolCallId: string;\n toolName: string;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n}): UnknownRecord {\n return {\n ...params.local,\n pendingToolCalls: params.remainingCalls,\n pendingInteractionSpec: {\n ...(isRecord(params.parsed) && isRecord(params.parsed.control) ? params.parsed.control : {}),\n toolCallId: params.toolCallId,\n toolName: params.toolName,\n },\n lastToolResult: params.parsed as unknown,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n}\n\nexport function buildSuccessLocalState(params: {\n local: UnknownRecord;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n}): UnknownRecord {\n return {\n ...stripAnswerState(params.local),\n pendingToolCalls: params.remainingCalls,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n}\n\nexport function buildErrorLocalState(params: {\n local: UnknownRecord;\n remainingCalls: unknown[];\n conversationId: string;\n turnId: string;\n runtimeEvents: RuntimeEvent[];\n nextProtocolErrorCount: number;\n}): UnknownRecord {\n const nextLocal: UnknownRecord = {\n ...stripAnswerState(params.local),\n pendingToolCalls: params.remainingCalls,\n conversationId: params.conversationId,\n turnId: params.turnId,\n history: mergeHistory(params.local, params.runtimeEvents),\n };\n\n if (params.nextProtocolErrorCount > 0) {\n nextLocal._consecutiveToolProtocolErrors = params.nextProtocolErrorCount;\n } else {\n delete nextLocal._consecutiveToolProtocolErrors;\n }\n\n return nextLocal;\n}\n","import type { ToolParameterProperty, ToolParameterSchema } from './toolContracts';\n\ntype UnknownRecord = Record<string, unknown>;\ntype NormalizeToolArgsOptions = {\n toolName?: string;\n path?: string;\n};\n\nfunction isRecord(v: unknown): v is UnknownRecord {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction tryParseJsonEncodedValue(v: unknown): unknown {\n if (typeof v !== 'string') return v;\n const trimmed = v.trim();\n if (trimmed.length === 0) return v;\n try {\n return JSON.parse(trimmed);\n } catch {\n return v;\n }\n}\n\nfunction joinPath(basePath: string | undefined, segment: string): string {\n return basePath ? `${basePath}.${segment}` : segment;\n}\n\nfunction logJsonEncodedNormalization(\n expectedType: 'array' | 'object',\n options: NormalizeToolArgsOptions,\n): void {\n const toolPrefix = options.toolName ? `${options.toolName}.` : '';\n const path = options.path ?? '<root>';\n console.warn(`[ToolArgNormalizer] Normalized JSON-encoded ${expectedType} string for ${toolPrefix}${path}`);\n}\n\nfunction normalizeBoolean(v: unknown): unknown {\n if (typeof v === 'boolean') return v;\n if (typeof v === 'number') {\n if (v === 1) return true;\n if (v === 0) return false;\n return v;\n }\n if (typeof v === 'string') {\n const s = v.trim().toLowerCase();\n if (s === 'true') return true;\n if (s === 'false') return false;\n }\n return v;\n}\n\nfunction normalizeNumber(v: unknown, kind: 'integer' | 'number'): unknown {\n if (typeof v === 'number' && Number.isFinite(v)) {\n if (kind === 'integer') return Number.isInteger(v) ? v : v;\n return v;\n }\n if (typeof v === 'string') {\n const s = v.trim();\n if (s.length === 0) return v;\n const parsed = Number(s);\n if (!Number.isFinite(parsed)) return v;\n if (kind === 'integer') return Number.isInteger(parsed) ? parsed : v;\n return parsed;\n }\n return v;\n}\n\nfunction normalizeByPropertySchema(\n prop: ToolParameterProperty,\n v: unknown,\n options: NormalizeToolArgsOptions,\n): unknown {\n switch (prop.type) {\n case 'boolean':\n return normalizeBoolean(v);\n case 'integer':\n return normalizeNumber(v, 'integer');\n case 'number':\n return normalizeNumber(v, 'number');\n case 'string':\n return v;\n case 'array': {\n const parsedValue = tryParseJsonEncodedValue(v);\n if (parsedValue !== v && Array.isArray(parsedValue)) {\n logJsonEncodedNormalization('array', options);\n }\n if (!Array.isArray(parsedValue) || !prop.items) return parsedValue;\n return parsedValue.map((item, index) => normalizeByPropertySchema(\n prop.items!,\n item,\n {\n ...options,\n path: joinPath(options.path, `[${index}]`),\n },\n ));\n }\n case 'object': {\n const parsedValue = tryParseJsonEncodedValue(v);\n if (parsedValue !== v && isRecord(parsedValue)) {\n logJsonEncodedNormalization('object', options);\n }\n if (!isRecord(parsedValue)) return parsedValue;\n if (!prop.properties || !isRecord(prop.properties)) return parsedValue;\n return normalizeToolArgs(\n { type: 'object', properties: prop.properties },\n parsedValue,\n options,\n );\n }\n default:\n return v;\n }\n}\n\nexport function normalizeToolArgs(\n schema: ToolParameterSchema,\n args: UnknownRecord,\n options: NormalizeToolArgsOptions = {},\n): UnknownRecord {\n const next: UnknownRecord = { ...args };\n\n for (const [key, prop] of Object.entries(schema.properties ?? {})) {\n if (!Object.prototype.hasOwnProperty.call(next, key)) continue;\n next[key] = normalizeByPropertySchema(prop, next[key], {\n ...options,\n path: joinPath(options.path, key),\n });\n }\n\n return next;\n}\n","import { createHash } from 'crypto';\nimport type { ToolExecutionContext } from '../toolExecutionContext';\nimport type { RuntimeEvent } from '../../../contracts';\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord(v: unknown): v is UnknownRecord {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport type ToolIdempotencyScope = 'conversation' | 'turn';\n\nexport type ToolIdempotencyPolicy = {\n scope: ToolIdempotencyScope;\n};\n\nfunction stableStringify(v: unknown): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n const t = typeof v;\n if (t === 'string') return JSON.stringify(v);\n if (t === 'number' || t === 'boolean') return String(v);\n if (Array.isArray(v)) return `[${v.map(stableStringify).join(',')}]`;\n if (isRecord(v)) {\n const keys = Object.keys(v).sort();\n const parts = keys.map((k) => `${JSON.stringify(k)}:${stableStringify(v[k])}`);\n return `{${parts.join(',')}}`;\n }\n return JSON.stringify(String(v));\n}\n\nfunction resolveScopeKey(scope: ToolIdempotencyScope, context: ToolExecutionContext): string {\n const ctx = context as unknown as UnknownRecord;\n if (scope === 'conversation') {\n const conversationId = ctx['conversationId'];\n if (typeof conversationId === 'string' && conversationId.trim().length > 0) return conversationId.trim();\n }\n const turnId = ctx['turnId'];\n return typeof turnId === 'string' && turnId.trim().length > 0 ? turnId.trim() : 'unknown_turn';\n}\n\nexport function computeToolIdempotencyKey(params: {\n policy: ToolIdempotencyPolicy;\n toolName: string;\n args: Record<string, unknown>;\n context: ToolExecutionContext;\n}): string {\n const scopeKey = resolveScopeKey(params.policy.scope, params.context);\n const json = stableStringify({ tool: params.toolName, args: params.args });\n return createHash('sha256').update(`${scopeKey}|${json}`).digest('hex').slice(0, 16);\n}\n\nexport function findCachedToolOutputByIdempotencyKey(params: {\n history: ReadonlyArray<RuntimeEvent>;\n toolName: string;\n idempotencyKey: string;\n}): { output: string } | undefined {\n for (let i = params.history.length - 1; i >= 0; i -= 1) {\n const e = params.history[i] as unknown as UnknownRecord;\n if (!e || typeof e !== 'object') continue;\n if (e['type'] !== 'tool_output') continue;\n if (e['tool_name'] !== params.toolName) continue;\n if (e['status'] !== 'success') continue;\n const meta = e['metadata'];\n if (!isRecord(meta)) continue;\n const idem = meta['idempotency'];\n if (!isRecord(idem)) continue;\n if (idem['key'] !== params.idempotencyKey) continue;\n const output = e['output'];\n if (typeof output !== 'string') continue;\n return { output };\n }\n return undefined;\n}\n","import type { ToolContextConversationView } from './conversationView';\nimport type { ToolExecutionContext } from './toolExecutionContext';\nimport type { RuntimeEvent } from '../../contracts';\n\ntype RuntimeEventSource = () => ReadonlyArray<RuntimeEvent>;\n\nexport interface ToolContextExecutionMeta {\n conversationId?: string;\n turnId?: string;\n runId?: string;\n parentRunId?: string;\n parentToolCallId?: string;\n citationOffset?: number;\n}\n\nexport interface ToolContextRuntimeBinding {\n readonly conversationView: ToolContextConversationView;\n getWorkingHistoryEvents(): ReadonlyArray<RuntimeEvent>;\n getPersistedHistoryEvents(): ReadonlyArray<RuntimeEvent>;\n setWorkingHistorySource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): void;\n setPersistedHistorySource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): void;\n bindExecutionMeta(meta: ToolContextExecutionMeta): void;\n readExecutionMeta(): Readonly<ToolContextExecutionMeta>;\n}\n\nexport const TOOL_CONTEXT_RUNTIME_RESERVED_KEYS = [\n 'conversationView',\n 'getConversationHistoryEvents',\n 'conversationId',\n 'turnId',\n 'runId',\n 'parentRunId',\n 'parentToolCallId',\n 'citationOffset',\n] as const;\n\nconst TOOL_CONTEXT_RUNTIME_BINDING_KEY = '__tool_context_runtime_binding__';\n\nfunction toEventSource(source: ReadonlyArray<RuntimeEvent> | RuntimeEventSource): RuntimeEventSource {\n if (typeof source === 'function') {\n return source;\n }\n return () => source;\n}\n\nfunction syncExecutionMetaToContext(context: ToolExecutionContext, meta: ToolContextExecutionMeta): void {\n if (typeof meta.conversationId === 'string') {\n context.conversationId = meta.conversationId;\n }\n if (typeof meta.turnId === 'string') {\n context.turnId = meta.turnId;\n }\n if (typeof meta.runId === 'string') {\n context.runId = meta.runId;\n }\n if (typeof meta.parentRunId === 'string') {\n context.parentRunId = meta.parentRunId;\n }\n if (typeof meta.parentToolCallId === 'string') {\n context.parentToolCallId = meta.parentToolCallId;\n }\n if (typeof meta.citationOffset === 'number' && Number.isFinite(meta.citationOffset)) {\n context.citationOffset = meta.citationOffset;\n }\n}\n\nfunction createRuntimeBinding(params: {\n context: ToolExecutionContext;\n persistedHistory: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n workingHistory: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n executionMeta?: ToolContextExecutionMeta;\n}): ToolContextRuntimeBinding {\n let persistedHistorySource = toEventSource(params.persistedHistory);\n let workingHistorySource = toEventSource(params.workingHistory);\n let executionMeta: ToolContextExecutionMeta = {};\n\n const conversationView: ToolContextConversationView = {\n getWorkingHistoryEvents: () => workingHistorySource(),\n getPersistedHistoryEvents: () => persistedHistorySource(),\n };\n\n const binding: ToolContextRuntimeBinding = {\n conversationView,\n getWorkingHistoryEvents: () => conversationView.getWorkingHistoryEvents(),\n getPersistedHistoryEvents: () => conversationView.getPersistedHistoryEvents(),\n setWorkingHistorySource: (source) => {\n workingHistorySource = toEventSource(source);\n },\n setPersistedHistorySource: (source) => {\n persistedHistorySource = toEventSource(source);\n },\n bindExecutionMeta: (meta) => {\n executionMeta = {\n ...executionMeta,\n ...meta,\n };\n syncExecutionMetaToContext(params.context, executionMeta);\n },\n readExecutionMeta: () => ({ ...executionMeta }),\n };\n\n if (params.executionMeta) {\n binding.bindExecutionMeta(params.executionMeta);\n }\n\n return binding;\n}\n\nfunction readBinding(context: ToolExecutionContext): ToolContextRuntimeBinding | undefined {\n const maybeBinding = (context as Record<string, unknown>)[TOOL_CONTEXT_RUNTIME_BINDING_KEY];\n return isRuntimeBinding(maybeBinding) ? maybeBinding : undefined;\n}\n\nfunction isRuntimeBinding(value: unknown): value is ToolContextRuntimeBinding {\n if (!value || typeof value !== 'object') {\n return false;\n }\n return (\n typeof (value as ToolContextRuntimeBinding).getWorkingHistoryEvents === 'function' &&\n typeof (value as ToolContextRuntimeBinding).getPersistedHistoryEvents === 'function' &&\n typeof (value as ToolContextRuntimeBinding).setWorkingHistorySource === 'function' &&\n typeof (value as ToolContextRuntimeBinding).setPersistedHistorySource === 'function' &&\n typeof (value as ToolContextRuntimeBinding).bindExecutionMeta === 'function' &&\n typeof (value as ToolContextRuntimeBinding).readExecutionMeta === 'function'\n );\n}\n\nfunction pickDefaultHistorySource(params: {\n preferred?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n fallback?: () => ReadonlyArray<RuntimeEvent>;\n}): ReadonlyArray<RuntimeEvent> | RuntimeEventSource {\n if (params.preferred !== undefined) {\n return params.preferred;\n }\n if (params.fallback) {\n return params.fallback;\n }\n return [];\n}\n\nfunction exposeCompatibilitySurface(context: ToolExecutionContext, binding: ToolContextRuntimeBinding): void {\n context.conversationView = binding.conversationView;\n context.getConversationHistoryEvents = () => binding.getWorkingHistoryEvents();\n}\n\nexport function ensureToolContextRuntimeCapability(params: {\n context: ToolExecutionContext;\n persistedHistory?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n workingHistory?: ReadonlyArray<RuntimeEvent> | RuntimeEventSource;\n executionMeta?: ToolContextExecutionMeta;\n}): ToolContextRuntimeBinding {\n let binding = readBinding(params.context);\n\n if (!binding) {\n const existingConversationView = params.context.conversationView;\n const existingHistoryGetter = params.context.getConversationHistoryEvents;\n binding = createRuntimeBinding({\n context: params.context,\n persistedHistory: pickDefaultHistorySource({\n preferred: params.persistedHistory,\n fallback: () =>\n existingConversationView?.getPersistedHistoryEvents() ??\n existingHistoryGetter?.() ??\n [],\n }),\n workingHistory: pickDefaultHistorySource({\n preferred: params.workingHistory,\n fallback: () =>\n existingConversationView?.getWorkingHistoryEvents() ??\n existingHistoryGetter?.() ??\n [],\n }),\n executionMeta: params.executionMeta,\n });\n\n Object.defineProperty(params.context, TOOL_CONTEXT_RUNTIME_BINDING_KEY, {\n value: binding,\n enumerable: false,\n configurable: true,\n writable: false,\n });\n } else {\n if (params.persistedHistory !== undefined) {\n binding.setPersistedHistorySource(params.persistedHistory);\n }\n if (params.workingHistory !== undefined) {\n binding.setWorkingHistorySource(params.workingHistory);\n }\n if (params.executionMeta) {\n binding.bindExecutionMeta(params.executionMeta);\n }\n }\n\n exposeCompatibilitySurface(params.context, binding);\n return binding;\n}\n\nexport function getToolContextRuntimeBinding(context: ToolExecutionContext): ToolContextRuntimeBinding | undefined {\n return readBinding(context);\n}\n\nexport function readToolContextWorkingHistory(context: ToolExecutionContext): ReadonlyArray<RuntimeEvent> {\n if (context.conversationView) {\n return context.conversationView.getWorkingHistoryEvents();\n }\n if (typeof context.getConversationHistoryEvents === 'function') {\n return context.getConversationHistoryEvents() ?? [];\n }\n return [];\n}\n\nexport function readToolContextPersistedHistory(context: ToolExecutionContext): ReadonlyArray<RuntimeEvent> {\n if (context.conversationView) {\n return context.conversationView.getPersistedHistoryEvents();\n }\n if (typeof context.getConversationHistoryEvents === 'function') {\n return context.getConversationHistoryEvents() ?? [];\n }\n return [];\n}\n\nexport function stripRuntimeReservedToolContextPatch(\n patch: Partial<ToolExecutionContext> | Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!patch) {\n return {};\n }\n\n const nextPatch: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(patch)) {\n if ((TOOL_CONTEXT_RUNTIME_RESERVED_KEYS as readonly string[]).includes(key)) {\n continue;\n }\n nextPatch[key] = value;\n }\n return nextPatch;\n}\n","import type {\n ToolProcessEvent as AgentToolProcessEvent,\n ObservationEvent as AgentObservationEvent,\n} from '../../events/agentEvents';\nimport { eventMapper, type EventMappingContext } from '../../events/eventMappers';\nimport { generateMessageId } from '../../../shared/ids';\nimport { Logger } from '../../../shared/logger';\nimport type { RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('ToolNode');\n\ntype SseSink = ((evt: unknown) => void) | undefined;\n\nexport interface ToolNodeEventBridgeDeps {\n sseSink: SseSink;\n conversationId: string;\n turnId: string;\n toolName: string;\n toolCallId: string | undefined;\n toolArgs: Record<string, unknown>;\n displayOptions: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport class ToolNodeEventBridge {\n private readonly runtimeEvents: RuntimeEvent[] = [];\n private readonly deps: ToolNodeEventBridgeDeps;\n\n constructor(deps: ToolNodeEventBridgeDeps) {\n this.deps = deps;\n }\n\n emitToolProcess(\n phase: 'start' | 'update' | 'complete' | 'error',\n status: 'loading' | 'success' | 'error',\n payload: Record<string, unknown>\n ): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const agentEvent: AgentToolProcessEvent = {\n type: 'tool_process',\n id,\n timestamp,\n tool_name: this.deps.toolName,\n tool_args: this.readToolArgs(payload),\n ...(Array.isArray(payload.tool_calls) ? { tool_calls: payload.tool_calls } : {}),\n tool_call_id: this.deps.toolCallId,\n phase,\n status,\n payload: { ...payload },\n meta: { displayOptions: this.deps.displayOptions },\n };\n\n logger.info('[ToolNode] 发出 tool_process 事件', {\n phase,\n status,\n toolName: this.deps.toolName,\n toolCallId: this.deps.toolCallId,\n eventId: id,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n emitToolOutput(status: 'success' | 'error', payload: Record<string, unknown>): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const output = payload.output;\n const agentEvent: AgentObservationEvent = {\n type: 'observation',\n id,\n timestamp,\n tool_name: this.deps.toolName,\n tool_call_id: this.deps.toolCallId,\n output: typeof output === 'string' ? output : this.serializeOutput(output),\n success: status === 'success',\n payload,\n duration_ms: payload.duration_ms as number | undefined,\n };\n\n logger.info('[ToolNode] 发出 tool_output 事件', {\n status,\n toolName: this.deps.toolName,\n toolCallId: this.deps.toolCallId,\n eventId: id,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n emitFinalAnswer(params: { answer: string; sourceToolName: string }): RuntimeEvent | null {\n const id = generateMessageId();\n const timestamp = Date.now();\n const agentEvent = {\n type: 'final_answer' as const,\n id,\n timestamp,\n answer: params.answer,\n answer_id: `answer_${this.deps.toolCallId}`,\n };\n\n logger.info('[ToolNode] 工具输出映射为 final_answer', {\n sourceToolName: params.sourceToolName,\n toolCallId: this.deps.toolCallId,\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n answerChars: params.answer.length,\n });\n\n this.dispatchAgentEvent(agentEvent);\n return this.bufferRuntimeEvent(agentEvent, timestamp);\n }\n\n getRuntimeEvents(): RuntimeEvent[] {\n return this.runtimeEvents;\n }\n\n private readToolArgs(payload: Record<string, unknown>): Record<string, unknown> {\n const maybeArgs = payload.args;\n if (maybeArgs && typeof maybeArgs === 'object' && !Array.isArray(maybeArgs)) {\n return maybeArgs as Record<string, unknown>;\n }\n return this.deps.toolArgs;\n }\n\n private serializeOutput(output: unknown): string {\n try {\n return JSON.stringify(output ?? '');\n } catch {\n return String(output ?? '');\n }\n }\n\n private dispatchAgentEvent(evt: unknown): void {\n if (!this.deps.sseSink) {\n return;\n }\n\n try {\n if (evt && typeof evt === 'object') {\n Object.defineProperty(evt, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n }\n this.deps.sseSink(evt);\n } catch (error) {\n console.warn('[ToolNode] Agent event dispatch failed:', error);\n }\n }\n\n private bufferRuntimeEvent(evt: unknown, timestamp: number): RuntimeEvent | null {\n const runtime = eventMapper.agentToRuntime(evt as never, this.getMappingContext(timestamp), {\n skipIncomplete: false,\n });\n if (runtime) {\n this.runtimeEvents.push(runtime);\n return runtime;\n }\n return null;\n }\n\n private getMappingContext(timestamp: number): EventMappingContext {\n return {\n conversationId: this.deps.conversationId,\n turnId: this.deps.turnId,\n timestamp,\n metadata: this.deps.idempotencyKey ? { idempotency: { key: this.deps.idempotencyKey } } : undefined,\n };\n }\n}\n","import { normalizeToolArgs } from '../../tools/argNormalizer';\nimport type { ToolExecutionContext } from '../../tools/toolExecutionContext';\nimport { computeToolIdempotencyKey } from '../../tools/idempotency/toolIdempotency';\nimport type { ToolCatalogPort, ToolRuntimeDefinition } from '../../tools/ports';\nimport { ensureToolContextRuntimeCapability } from '../../tools/toolContextRuntime';\nimport type { EngineState, StandardToolCall } from '../types';\nimport { ToolNodeEventBridge } from './toolNode.eventBridge';\nimport { computeCitationOffset, isRecord, parseJsonSafe, type UnknownRecord } from './toolNode.helpers';\nimport type { RuntimeEvent } from '../../../contracts';\n\nexport type PreparedToolNodeContext = {\n state: EngineState;\n local: UnknownRecord;\n toolContext: ToolExecutionContext;\n conversationId: string;\n turnId: string;\n};\n\nexport type PreparedToolExecution = {\n call: StandardToolCall;\n toolName: string;\n toolCallId: string;\n rawArguments: string;\n toolArgs: Record<string, unknown>;\n protocolError?: string;\n bridge: ToolNodeEventBridge;\n};\n\ntype ParsedToolArgsResult =\n | { ok: true; value: Record<string, unknown> }\n | { ok: false; error: string };\n\nexport function parseToolArgs(call: StandardToolCall): ParsedToolArgsResult {\n const rawArguments = typeof call.function?.arguments === 'string' ? call.function.arguments : '';\n if (!rawArguments.trim()) {\n return {\n ok: false,\n error: 'Tool arguments must be a non-empty JSON object string.',\n };\n }\n\n try {\n const parsed = JSON.parse(rawArguments) as unknown;\n if (!isRecord(parsed)) {\n return {\n ok: false,\n error: 'Tool arguments must decode to a JSON object.',\n };\n }\n return { ok: true, value: parsed };\n } catch (error) {\n const reason = error instanceof Error ? error.message : 'Unknown JSON parse error';\n console.warn('[ToolNode] Failed to parse tool arguments:', error);\n return {\n ok: false,\n error: `Tool arguments are not valid JSON: ${reason}`,\n };\n }\n}\n\nexport function prepareToolNodeContext(state: EngineState): PreparedToolNodeContext {\n const local: UnknownRecord = state.local || {};\n const toolContext: ToolExecutionContext = isRecord(local.toolContext)\n ? (local.toolContext as ToolExecutionContext)\n : {};\n if (!isRecord(local.toolContext)) {\n local.toolContext = toolContext as UnknownRecord;\n }\n\n const conversationId = typeof local.conversationId === 'string' ? local.conversationId : '';\n const turnId =\n typeof local.turnId === 'string'\n ? local.turnId\n : `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n local.turnId = turnId;\n\n const historyEvents = (local.history as RuntimeEvent[]) || [];\n const citationOffset = computeCitationOffset(historyEvents, turnId);\n const existingConversationId =\n typeof toolContext.conversationId === 'string' ? toolContext.conversationId.trim() : '';\n ensureToolContextRuntimeCapability({\n context: toolContext,\n executionMeta: {\n conversationId: existingConversationId || conversationId,\n turnId,\n citationOffset,\n },\n });\n attachWorkingHistoryView({ state, toolContext });\n\n return { state, local, toolContext, conversationId, turnId };\n}\n\nexport function prepareToolExecution(params: {\n prepared: PreparedToolNodeContext;\n call: StandardToolCall;\n toolCatalog?: Pick<ToolCatalogPort, 'getToolDefinition'>;\n}): PreparedToolExecution | null {\n const toolName = params.call.function?.name;\n if (!toolName) {\n return null;\n }\n\n const toolCallId = params.call.id;\n const rawArguments = typeof params.call.function?.arguments === 'string' ? params.call.function.arguments : '';\n let toolArgs: Record<string, unknown> = {};\n let protocolError: string | undefined;\n const parsedToolArgs = parseToolArgs(params.call);\n const toolCatalog = params.toolCatalog;\n const toolDefinition = toolCatalog?.getToolDefinition(toolName);\n if (parsedToolArgs.ok) {\n toolArgs = parsedToolArgs.value;\n } else {\n protocolError = parsedToolArgs.error;\n }\n\n if (!protocolError && toolDefinition) {\n toolArgs = normalizeToolArgs(toolDefinition.parameters, toolArgs, { toolName });\n }\n\n const displayOptions = (toolDefinition?.displayOptions ?? {}) as Record<string, unknown>;\n const idempotencyKey = protocolError\n ? undefined\n : computeIdempotencyKey({\n toolDefinition,\n toolName,\n toolArgs,\n toolContext: params.prepared.toolContext,\n });\n\n bindRuntimeToolContext({\n toolContext: params.prepared.toolContext,\n conversationId: params.prepared.conversationId,\n turnId: params.prepared.turnId,\n toolCallId,\n });\n\n const sseSink =\n typeof params.prepared.local.sseSink === 'function'\n ? (params.prepared.local.sseSink as (evt: unknown) => void)\n : undefined;\n const bridge = new ToolNodeEventBridge({\n sseSink,\n conversationId: params.prepared.conversationId,\n turnId: params.prepared.turnId,\n toolName,\n toolCallId,\n toolArgs,\n displayOptions,\n idempotencyKey,\n });\n\n return {\n call: params.call,\n toolName,\n toolCallId,\n rawArguments,\n toolArgs,\n protocolError,\n bridge,\n };\n}\n\nfunction attachWorkingHistoryView(params: {\n state: EngineState;\n toolContext: ToolExecutionContext;\n}): void {\n const historyEvents = ((params.state.local as UnknownRecord | undefined)?.history as RuntimeEvent[] | undefined) ?? [];\n const runtimeBinding = ensureToolContextRuntimeCapability({\n context: params.toolContext,\n workingHistory: historyEvents,\n });\n runtimeBinding.setWorkingHistorySource(() => {\n const currentLocal = params.state.local as UnknownRecord | undefined;\n const currentHistory = (currentLocal?.history as RuntimeEvent[] | undefined) ?? [];\n if (Array.isArray(currentHistory) && currentHistory.length > 0) {\n return currentHistory;\n }\n return runtimeBinding.getPersistedHistoryEvents();\n });\n}\n\nfunction computeIdempotencyKey(params: {\n toolDefinition: ToolRuntimeDefinition | undefined;\n toolName: string;\n toolArgs: Record<string, unknown>;\n toolContext: ToolExecutionContext;\n}): string | undefined {\n if (!params.toolDefinition?.idempotency) {\n return undefined;\n }\n\n try {\n return computeToolIdempotencyKey({\n policy: params.toolDefinition.idempotency,\n toolName: params.toolName,\n args: params.toolArgs,\n context: params.toolContext,\n });\n } catch {\n return undefined;\n }\n}\n\nfunction bindRuntimeToolContext(params: {\n toolContext: ToolExecutionContext;\n conversationId: string;\n turnId: string;\n toolCallId: string;\n}): void {\n const existingConversationId =\n typeof params.toolContext.conversationId === 'string' ? params.toolContext.conversationId.trim() : '';\n ensureToolContextRuntimeCapability({\n context: params.toolContext,\n executionMeta: {\n conversationId: existingConversationId || params.conversationId,\n turnId: params.turnId,\n parentToolCallId: params.toolCallId,\n citationOffset:\n typeof params.toolContext.citationOffset === 'number' && Number.isFinite(params.toolContext.citationOffset)\n ? params.toolContext.citationOffset\n : undefined,\n },\n });\n}\n\nexport { parseJsonSafe };\n","import { Logger } from '../../../shared/logger';\nimport { noopTelemetry } from '../../telemetry/noopTelemetry';\nimport type { TelemetryPort } from '../../telemetry/telemetryPort';\nimport { noopAudit } from '../../audit/noopAudit';\nimport { emitAuditEnvelope } from '../../audit/emitAudit';\nimport type { AuditPort } from '../../../ports';\nimport type { AgentSpecToolObservationGovernancePolicy, RuntimeEvent } from '../../../contracts';\nimport type { ToolControlInfo } from '../../tools/ui-types';\nimport type {\n ObservationPreviewPort,\n ToolExecutionPort,\n ToolCatalogPort,\n ToolExecutionResult,\n} from '../../tools/ports';\nimport type { GraphNode, EngineState, NodeResult, StandardToolCall } from '../types';\nimport { resolveFinalAnswerFromToolResult } from './toolNode.finalAnswerProjector';\nimport { ToolNodeEventBridge } from './toolNode.eventBridge';\nimport { applyObservationGovernance } from './toolNode.observationGovernance';\nimport {\n applyProtocolFuseState,\n createToolProtocolFuseError,\n checkProtocolFuse,\n} from './toolNode.protocolFuse';\nimport { parseJsonSafe } from './toolNode.helpers';\nimport type { UnknownRecord } from './toolNode.helpers';\nimport {\n applyToolOutputIdempotencyMetadata,\n buildErrorLocalState,\n buildRequireUserLocalState,\n buildSuccessLocalState,\n buildSuccessOutputPayload,\n extractToolControlInfo,\n readStructuredObservation,\n} from './toolNode.stateTransitions';\nimport {\n prepareToolExecution,\n prepareToolNodeContext,\n type PreparedToolNodeContext,\n} from './toolNode.executionSetup';\nimport { DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME } from '../../system-reminder/helpers';\n\nconst logger = new Logger('ToolNode');\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n return value !== null && typeof value === 'object' && 'aborted' in value;\n}\n\nfunction readContextCheckpointToolName(local: UnknownRecord): string {\n const executorLocal = local.executorLocal;\n if (executorLocal && typeof executorLocal === 'object' && !Array.isArray(executorLocal)) {\n const value = (executorLocal as Record<string, unknown>).contextCheckpointToolName;\n if (typeof value === 'string' && value.trim().length > 0) {\n return value.trim();\n }\n }\n return DEFAULT_CONTEXT_CHECKPOINT_TOOL_NAME;\n}\n\nfunction readToolObservationPolicy(local: UnknownRecord): AgentSpecToolObservationGovernancePolicy | undefined {\n const executorLocal = local.executorLocal;\n if (executorLocal && typeof executorLocal === 'object' && !Array.isArray(executorLocal)) {\n const value = (executorLocal as Record<string, unknown>).toolObservationPolicy;\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n const policy: AgentSpecToolObservationGovernancePolicy = {};\n if (typeof record.enabled === 'boolean') {\n policy.enabled = record.enabled;\n }\n if (typeof record.maxChars === 'number' && Number.isFinite(record.maxChars)) {\n policy.maxChars = record.maxChars;\n }\n if (typeof record.maxLines === 'number' && Number.isFinite(record.maxLines)) {\n policy.maxLines = record.maxLines;\n }\n return Object.keys(policy).length > 0 ? policy : undefined;\n }\n }\n return undefined;\n}\n\ntype ToolNodeSuccessContext = PreparedToolNodeContext & {\n calls: StandardToolCall[];\n toolName: string;\n toolCallId: string;\n exec: ToolExecutionResult;\n parsed: unknown;\n bridge: ToolNodeEventBridge;\n};\n\ntype ToolNodeErrorContext = PreparedToolNodeContext & {\n calls: StandardToolCall[];\n call: StandardToolCall;\n toolName: string;\n toolCallId: string;\n toolArgs: Record<string, unknown>;\n exec: ToolExecutionResult;\n bridge: ToolNodeEventBridge;\n};\n\nexport interface ToolNodeDependencies {\n toolRuntime: Pick<ToolCatalogPort, 'getToolDefinition'> & Pick<ToolExecutionPort, 'executeTool'>;\n observationPreview: ObservationPreviewPort;\n /**\n * 可选:宿主提供的 TelemetryPort 实现。\n * 不传时使用 noopTelemetry(observability 默认关闭,业务零影响)。\n */\n telemetryPort?: TelemetryPort;\n auditPort?: AuditPort;\n}\n\nexport class ToolNode implements GraphNode {\n id = 'tool';\n private readonly toolRuntime: Pick<ToolCatalogPort, 'getToolDefinition'> & Pick<ToolExecutionPort, 'executeTool'>;\n private readonly observationPreview: ObservationPreviewPort;\n private readonly telemetryPort: TelemetryPort;\n private readonly auditPort: AuditPort;\n\n constructor(dependencies: ToolNodeDependencies) {\n this.toolRuntime = dependencies.toolRuntime;\n this.observationPreview = dependencies.observationPreview;\n this.telemetryPort = dependencies.telemetryPort ?? noopTelemetry;\n this.auditPort = dependencies.auditPort ?? noopAudit;\n }\n\n /**\n * B2-engine Batch 2: 上报 tool_call 事件到宿主侧 TelemetryPort。\n * 在 handleSuccess / handleError 入口处调用。\n */\n private emitToolCallTelemetry(args: {\n toolName: string;\n durationMs: number;\n ok: boolean;\n errorCode?: string;\n conversationId: string;\n turnId: string;\n runId?: string;\n parentRunId?: string;\n }): void {\n this.telemetryPort.emit({\n kind: 'tool_call',\n toolName: args.toolName,\n durationMs: args.durationMs,\n ok: args.ok,\n errorCode: args.errorCode,\n scope: {\n conversationId: args.conversationId || undefined,\n turnId: args.turnId,\n ...(args.runId === undefined ? {} : { runId: args.runId }),\n ...(args.parentRunId === undefined ? {} : { parentRunId: args.parentRunId }),\n },\n });\n }\n\n private async emitToolDecisionAudit(args: {\n action: 'tool.allow' | 'tool.deny';\n toolName: string;\n toolCallId: string;\n reason: string;\n conversationId: string;\n turnId: string;\n runId?: string;\n parentRunId?: string;\n errorKind?: string;\n }): Promise<void> {\n await emitAuditEnvelope(this.auditPort, {\n parentRunId: args.parentRunId,\n action: args.action,\n actor: { kind: 'system' },\n decision: {\n outcome: args.action === 'tool.allow' ? 'allowed' : 'denied',\n reason: args.reason,\n metadata: {\n toolCallId: args.toolCallId,\n errorKind: args.errorKind,\n },\n },\n evidence: [\n {\n kind: 'tool_call',\n ref: args.toolCallId,\n summary: `${args.action} ${args.toolName}`,\n },\n ],\n scope: {\n conversationId: args.conversationId || undefined,\n turnId: args.turnId,\n runId: args.runId ?? args.turnId,\n ...(args.parentRunId === undefined ? {} : { parentRunId: args.parentRunId }),\n toolName: args.toolName,\n toolCallId: args.toolCallId,\n },\n });\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const events: RuntimeEvent[] = [];\n\n while (true) {\n const result = await this.runNextPendingToolCall(state);\n if (Array.isArray(result.events) && result.events.length > 0) {\n events.push(...result.events);\n }\n\n if (result.kind === 'route' && result.nextNodeId === 'tool') {\n continue;\n }\n\n return {\n ...result,\n events,\n };\n }\n }\n\n private async runNextPendingToolCall(state: EngineState): Promise<NodeResult> {\n const calls = (state.local?.pendingToolCalls as StandardToolCall[] | undefined) ?? [];\n const signalRaw = state.local?.signal;\n if (isAbortSignal(signalRaw) && signalRaw.aborted) {\n const abortError = new Error('The user aborted a request.');\n abortError.name = 'AbortError';\n throw abortError;\n }\n\n const prepared = prepareToolNodeContext(state);\n logger.info('[ToolNode] 开始执行工具节点', {\n conversationId: prepared.conversationId,\n turnId: prepared.turnId,\n pendingCallCount: calls.length,\n citationOffset: prepared.toolContext.citationOffset,\n });\n\n if (calls.length === 0) {\n return { kind: 'yield', events: [] };\n }\n\n const call = calls[0];\n const execution = prepareToolExecution({\n prepared,\n call,\n toolCatalog: this.toolRuntime,\n });\n if (!execution) {\n console.warn('[ToolNode] No tool name found in call');\n return { kind: 'yield', events: [] };\n }\n\n execution.bridge.emitToolProcess('start', 'loading', {\n args: execution.toolArgs,\n tool_calls: [call],\n });\n\n if (typeof execution.protocolError === 'string') {\n return this.handleError({\n ...prepared,\n calls,\n call,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n toolArgs: execution.toolArgs,\n exec: {\n success: false,\n error: execution.protocolError,\n errorKind: 'protocol',\n durationMs: 0,\n },\n bridge: execution.bridge,\n });\n }\n\n const exec = await this.toolRuntime.executeTool(\n execution.toolName,\n execution.toolArgs,\n prepared.toolContext,\n );\n if (exec.success) {\n const parsed = typeof exec.result === 'string' ? parseJsonSafe(exec.result) : exec.result;\n return this.handleSuccess({\n ...prepared,\n calls,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n exec,\n parsed,\n bridge: execution.bridge,\n });\n }\n\n return this.handleError({\n ...prepared,\n calls,\n call,\n toolName: execution.toolName,\n toolCallId: execution.toolCallId,\n toolArgs: execution.toolArgs,\n exec,\n bridge: execution.bridge,\n });\n }\n\n private async handleSuccess(context: ToolNodeSuccessContext): Promise<NodeResult> {\n await this.emitToolDecisionAudit({\n action: 'tool.allow',\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n reason: 'tool execution succeeded',\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n this.emitToolCallTelemetry({\n toolName: context.toolName,\n durationMs: context.exec.durationMs,\n ok: true,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n\n applyProtocolFuseState(context.local, 0);\n\n await applyObservationGovernance({\n parsed: context.parsed,\n toolName: context.toolName,\n toolContext: context.toolContext,\n structuredObservation: readStructuredObservation(context.parsed),\n observationPreview: this.observationPreview,\n policy: readToolObservationPolicy(context.local),\n });\n\n const control = extractToolControlInfo(context.parsed);\n if (control?.requireUser) {\n return this.handleRequireUserSuccess({ ...context, control });\n }\n\n const runtimeToolOutput = context.bridge.emitToolOutput(\n 'success',\n buildSuccessOutputPayload(context.exec.result, context.parsed),\n );\n const finalAnswerProjection = resolveFinalAnswerFromToolResult(context.toolName, context.parsed);\n if (typeof finalAnswerProjection === 'string') {\n context.bridge.emitFinalAnswer({\n answer: finalAnswerProjection,\n sourceToolName: context.toolName,\n });\n }\n\n applyToolOutputIdempotencyMetadata({\n runtimeToolOutput,\n execIdempotency: context.exec.idempotency,\n });\n\n const remainingCalls = context.calls.slice(1);\n context.state.local = buildSuccessLocalState({\n local: context.local,\n remainingCalls,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n });\n\n if (context.toolName === readContextCheckpointToolName(context.local)) {\n context.state.local._checkpointStepReset = true;\n logger.info('[ToolNode] context checkpoint 执行成功,设置步数重置标记', {\n toolName: context.toolName,\n });\n }\n\n if (control?.terminateRun) {\n logger.info('[ToolNode] 收到 control.terminateRun,执行完工具后直接 yield 结束本轮 run', {\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n conversationId: context.conversationId,\n turnId: context.turnId,\n });\n return { kind: 'yield', events: context.bridge.getRuntimeEvents() };\n }\n\n return {\n kind: 'route',\n nextNodeId: remainingCalls.length > 0 ? 'tool' : 'llm',\n events: context.bridge.getRuntimeEvents(),\n };\n }\n\n private handleRequireUserSuccess(\n context: ToolNodeSuccessContext & { control: ToolControlInfo }\n ): NodeResult {\n context.state.local = buildRequireUserLocalState({\n local: context.local,\n parsed: context.parsed,\n toolCallId: context.toolCallId,\n toolName: context.toolName,\n remainingCalls: context.calls.slice(1),\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n });\n\n return { kind: 'route', nextNodeId: 'wait_user', events: context.bridge.getRuntimeEvents() };\n }\n\n private async handleError(context: ToolNodeErrorContext): Promise<NodeResult> {\n await this.emitToolDecisionAudit({\n action: context.exec.errorKind === 'protocol' ? 'tool.deny' : 'tool.allow',\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n reason: context.exec.error ?? 'tool_error',\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n errorKind: context.exec.errorKind,\n });\n this.emitToolCallTelemetry({\n toolName: context.toolName,\n durationMs: context.exec.durationMs,\n ok: false,\n errorCode: context.exec.errorKind,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runId: context.toolContext.runId,\n parentRunId: context.toolContext.parentRunId,\n });\n\n const errorString = (() => {\n try {\n return JSON.stringify({ error: context.exec.error || 'tool_error' });\n } catch {\n return String(context.exec.error || 'tool_error');\n }\n })();\n\n context.bridge.emitToolOutput('error', {\n output: errorString,\n error: context.exec.error ?? errorString,\n });\n\n const fuse = checkProtocolFuse({\n local: context.local,\n exec: context.exec,\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n rawArguments: context.call.function?.arguments,\n parsedArguments: context.toolArgs,\n });\n const remainingCalls = context.calls.slice(1);\n\n context.state.local = buildErrorLocalState({\n local: context.local,\n remainingCalls,\n conversationId: context.conversationId,\n turnId: context.turnId,\n runtimeEvents: context.bridge.getRuntimeEvents(),\n nextProtocolErrorCount: fuse.nextCount,\n });\n\n if (fuse.shouldFuse && remainingCalls.length === 0) {\n throw createToolProtocolFuseError(fuse.nextCount, context.exec.error);\n }\n\n return {\n kind: 'route',\n // 同一个 assistant.tool_calls batch 必须为每个 call 产出 tool_output。\n // 出错时也继续消费剩余 call,ToolNode.run 会在本节点内 drain 完 batch 再回 LLM。\n nextNodeId: remainingCalls.length > 0 ? 'tool' : 'llm',\n events: context.bridge.getRuntimeEvents(),\n };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport type { RuntimeEvent } from '../../../contracts';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isRuntimeEvent(value: unknown): value is RuntimeEvent {\n return isRecord(value) && typeof value.type === 'string';\n}\n\nexport class UserNode implements GraphNode {\n id = 'user';\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = isRecord(state.local) ? state.local : {};\n const newEvents = Array.isArray(local.newEvents) ? local.newEvents.filter(isRuntimeEvent) : [];\n const userInputEvent = newEvents.find((event) => event.type === 'user_input');\n\n if (!userInputEvent) {\n return { kind: 'yield', events: [] };\n }\n\n return { kind: 'route', nextNodeId: 'llm', events: [] };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport { generateMessageId } from '../../../shared/ids';\nimport { createSSERequiresUserInteractionEvent } from '../../../contracts';\nimport type { AuditPort } from '../../../ports';\nimport { emitAuditEnvelope } from '../../audit/emitAudit';\nimport { noopAudit } from '../../audit/noopAudit';\n\nexport interface WaitUserNodeDependencies {\n auditPort?: AuditPort;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction toStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const normalized = value\n .map((item) => (typeof item === 'string' ? item.trim() : ''))\n .filter((item) => item.length > 0);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction buildResumeRequestSnapshot(request: unknown): Record<string, unknown> | undefined {\n if (!isRecord(request)) return undefined;\n\n const snapshot: Record<string, unknown> = {};\n const promptKey = toNonEmptyString(request['promptKey']);\n const mode = toNonEmptyString(request['mode']);\n const projectMetadata = request['project_metadata'];\n const documentMetadata = request['document_metadata'];\n const knowledgeBaseId = toNonEmptyString(request['knowledgeBaseId']);\n const availableTools = toStringArray(request['availableTools']);\n\n if (promptKey) snapshot['promptKey'] = promptKey;\n if (mode) snapshot['mode'] = mode;\n if (isRecord(projectMetadata)) snapshot['project_metadata'] = projectMetadata;\n if (isRecord(documentMetadata)) snapshot['document_metadata'] = documentMetadata;\n if (knowledgeBaseId) snapshot['knowledgeBaseId'] = knowledgeBaseId;\n if (typeof request['enableTools'] === 'boolean') snapshot['enableTools'] = request['enableTools'];\n if (availableTools) snapshot['availableTools'] = availableTools;\n\n return Object.keys(snapshot).length > 0 ? snapshot : undefined;\n}\n\nexport class WaitUserNode implements GraphNode {\n id = 'wait_user';\n private readonly auditPort: AuditPort;\n\n constructor(dependencies: WaitUserNodeDependencies = {}) {\n this.auditPort = dependencies.auditPort ?? noopAudit;\n }\n\n async run(state: EngineState): Promise<NodeResult> {\n const local: Record<string, unknown> = state.local || {};\n const spec = local.pendingInteractionSpec || {};\n const conversationId = typeof local.conversationId === 'string' ? (local.conversationId as string) : '';\n const turnId =\n typeof local.turnId === 'string'\n ? (local.turnId as string)\n : `turn_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n local.turnId = turnId;\n const sseSink = typeof local.sseSink === 'function' ? (local.sseSink as (evt: unknown) => void) : undefined;\n const resumeRequestSnapshot = buildResumeRequestSnapshot(local.request);\n const toolContext = isRecord(local.toolContext) ? local.toolContext : undefined;\n const runId = toNonEmptyString(toolContext?.['runId']) ?? turnId;\n const parentRunId = toNonEmptyString(toolContext?.['parentRunId']);\n\n const timestamp = Date.now();\n const id = generateMessageId();\n const sse = createSSERequiresUserInteractionEvent(id, conversationId, turnId, {\n timestamp,\n form: spec as Record<string, unknown>,\n });\n sse.timestamp = timestamp;\n if (sseSink) {\n try {\n Object.defineProperty(sse, '__dispatched_via_sse__', {\n value: true,\n enumerable: false,\n configurable: true,\n });\n sseSink(sse);\n } catch (error) {\n console.warn('[WaitUserNode] SSE dispatch failed:', error);\n }\n }\n\n const runtimeEventMetadata: Record<string, unknown> = {\n run_context: {\n runId,\n ...(parentRunId === undefined ? {} : { parentRunId }),\n },\n };\n if (resumeRequestSnapshot) {\n runtimeEventMetadata.resume_request_snapshot = resumeRequestSnapshot;\n }\n\n const runtimeEvent = {\n type: 'requires_user_interaction' as const,\n id,\n conversation_id: conversationId,\n turn_id: turnId,\n timestamp,\n version: 1 as const,\n form: spec,\n metadata: runtimeEventMetadata,\n };\n\n await emitAuditEnvelope(this.auditPort, {\n action: 'wait_user.request',\n actor: { kind: 'system' },\n decision: {\n outcome: 'requested',\n reason: 'graph paused for user interaction',\n },\n evidence: [\n {\n kind: 'requires_user_interaction',\n ref: id,\n summary: toNonEmptyString((spec as Record<string, unknown>)['prompt']) ?? 'requires user interaction',\n },\n ],\n scope: {\n conversationId: conversationId || undefined,\n turnId,\n runId,\n parentRunId,\n },\n });\n\n state.local = {\n ...local,\n pendingInteractionSpec: undefined,\n lastToolResult: undefined,\n conversationId,\n turnId,\n };\n return { kind: 'pause', events: [runtimeEvent] };\n }\n}\n","import { GraphNode, EngineState, NodeResult } from '../types';\nimport { generateMessageId } from '../../../shared/ids';\nimport { Logger } from '../../../shared/logger';\nimport { createFinalAnswerEvent, RuntimeEvent } from '../../../contracts';\n\nconst logger = new Logger('AnswerNode');\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class AnswerNode implements GraphNode {\n id = 'answer';\n\n async run(state: EngineState): Promise<NodeResult> {\n const local = isRecord(state.local) ? state.local : {};\n const finalAnswer = typeof local.finalAnswer === 'string' ? local.finalAnswer : undefined;\n const conversationId = typeof local.conversationId === 'string' ? local.conversationId : '';\n const turnId = typeof local.turnId === 'string' ? local.turnId : `turn_${Date.now()}`;\n const answerId = typeof local.answerId === 'string' ? local.answerId : generateMessageId();\n\n logger.info('[AnswerNode] 开始执行最终答案节点', {\n conversationId,\n turnId,\n answerId,\n hasFinalAnswer: Boolean(finalAnswer),\n });\n\n if (!finalAnswer) {\n logger.warn('[AnswerNode] 没有 finalAnswer,返回空事件');\n return { kind: 'yield', events: [] };\n }\n\n const finalAnswerEvent = createFinalAnswerEvent(\n generateMessageId(),\n conversationId,\n turnId,\n answerId,\n finalAnswer,\n { is_complete: true }\n );\n\n logger.info('[AnswerNode] 生成 final_answer RuntimeEvent', {\n runtimeId: finalAnswerEvent.id,\n answerId: finalAnswerEvent.answer_id,\n contentLength: finalAnswerEvent.content?.length ?? 0,\n conversationId,\n turnId,\n });\n\n const events: RuntimeEvent[] = [finalAnswerEvent];\n\n logger.info('[AnswerNode] 返回最终答案事件', {\n eventCount: events.length,\n runtimeEventId: events[0]?.id,\n });\n\n return { kind: 'yield', events };\n }\n}\n","/**\n * @file checkpointer/base.ts\n * @description Engine-state Checkpointer 接口定义。\n *\n * ## 术语:这里说的 \"Checkpointer\" 是哪个 checkpoint?\n *\n * 在 agent 生态里,\"checkpoint\" 是个被严重重载的词。这个接口指的是\n * **graph engine 的执行状态快照**——也就是 `EngineState`:\n *\n * - `nodeId`: 图执行当前停在哪个节点\n * - `pendingToolCalls`: 已发出还未回收的 tool call\n * - `executorLocal.stepCount`: 循环步数计数\n * - `local`: 节点间共享的中间字典(含 history、checkpointCount 等)\n *\n * 这是 **执行控制层** 的概念:让一次 run 在被打断后能从断点恢复继续推理,\n * 让宿主能查询\"我现在停在哪个节点、还欠几个 tool call\"。\n *\n * ### 这个 Checkpointer **不是**:\n *\n * - **不是** 应用层的\"对话总结 / 上下文裁剪 checkpoint\"。那是上下文工程\n * 领域的概念,通常由宿主自己实现成一个 LLM tool(让模型主动写阶段总结,\n * 下一轮上下文构建时把摘要点之前的旧消息从 LLM context window 里裁掉)。\n * 那种产出本质上是一个 RuntimeEvent,落在宿主的 EventStore 里,跟本接口\n * 毫无关系。\n *\n * - **不是** RuntimeEvent 持久化。事件流的持久化由 `EventStore` 接口负责。\n *\n * - **不是** Run 元数据持久化。Run 注册由 `RunRegistryStore` 负责。\n *\n * 名字相同语义不同,是历史遗留。如果你在文档里同时看到 \"checkpoint\",\n * 请按上下文区分:本接口语境下的 checkpoint 永远指 EngineState 快照。\n */\n\nimport type { EngineState } from '../types';\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nexport type CheckpointMeta = {\n conversationId: string;\n schemaVersion: number;\n savedAt: number;\n currentNode?: string;\n iterations?: number;\n hasPendingToolCalls: boolean;\n};\n\nexport type CheckpointListFilter = {\n savedAfter?: number;\n limit?: number;\n cursor?: string;\n};\n\nexport type CheckpointSummary = CheckpointMeta;\n\nexport interface Checkpointer {\n load(conversationId: string): Promise<EngineState | null>;\n save(conversationId: string, state: EngineState): Promise<void>;\n clear(conversationId: string): Promise<void>;\n peekMeta?(conversationId: string): Promise<CheckpointMeta | null>;\n list?(filter?: CheckpointListFilter): Promise<CheckpointSummary[]>;\n}\n\nexport function summarizeCheckpoint(\n conversationId: string,\n state: EngineState,\n savedAt: number,\n): CheckpointSummary {\n const local = asRecord(state.local);\n const executorLocal = asRecord(local?.executorLocal);\n const pendingToolCalls = local?.pendingToolCalls;\n\n return {\n conversationId,\n schemaVersion: state.schemaVersion ?? 1,\n savedAt,\n currentNode: state.nodeId,\n iterations:\n typeof executorLocal?.stepCount === 'number' ? executorLocal.stepCount : undefined,\n hasPendingToolCalls: Array.isArray(pendingToolCalls) && pendingToolCalls.length > 0,\n };\n}\n","import { ENGINE_STATE_SCHEMA_VERSION, type EngineState } from '../types';\nimport {\n summarizeCheckpoint,\n type Checkpointer,\n type CheckpointListFilter,\n type CheckpointMeta,\n type CheckpointSummary,\n} from './base';\n\nexport class MemoryCheckpointer implements Checkpointer {\n private store = new Map<string, { state: EngineState; savedAt: number }>();\n\n private cloneState(state: EngineState): EngineState {\n return {\n ...state,\n schemaVersion: state.schemaVersion ?? ENGINE_STATE_SCHEMA_VERSION,\n local:\n state.local && typeof state.local === 'object' && !Array.isArray(state.local)\n ? { ...state.local }\n : state.local,\n };\n }\n\n async load(conversationId: string): Promise<EngineState | null> {\n const entry = this.store.get(conversationId);\n return entry ? this.cloneState(entry.state) : null;\n }\n\n async save(conversationId: string, state: EngineState): Promise<void> {\n this.store.set(conversationId, {\n state: this.cloneState(state),\n savedAt: Date.now(),\n });\n }\n\n async clear(conversationId: string): Promise<void> {\n this.store.delete(conversationId);\n }\n\n async peekMeta(conversationId: string): Promise<CheckpointMeta | null> {\n const entry = this.store.get(conversationId);\n return entry ? summarizeCheckpoint(conversationId, entry.state, entry.savedAt) : null;\n }\n\n async list(filter: CheckpointListFilter = {}): Promise<CheckpointSummary[]> {\n const summaries = Array.from(this.store.entries())\n .map(([conversationId, entry]) => summarizeCheckpoint(conversationId, entry.state, entry.savedAt))\n .filter((summary) => (filter.savedAfter === undefined ? true : summary.savedAt > filter.savedAfter))\n .sort((left, right) => right.savedAt - left.savedAt);\n\n if (filter.limit === undefined) {\n return summaries;\n }\n\n return summaries.slice(0, filter.limit);\n }\n}\n","import type { EventRangeOptions, EventStore, PersistedEvent } from './base';\n\nfunction clonePersistedEvent(event: PersistedEvent): PersistedEvent {\n return {\n ...event,\n event: { ...event.event },\n };\n}\n\nexport class MemoryEventStore implements EventStore {\n private readonly store = new Map<string, PersistedEvent[]>();\n\n async append(conversationId: string, event: PersistedEvent): Promise<void> {\n const current = this.store.get(conversationId) ?? [];\n current.push(clonePersistedEvent(event));\n this.store.set(conversationId, current);\n }\n\n async range(conversationId: string, opts: EventRangeOptions = {}): Promise<PersistedEvent[]> {\n const events = [...(this.store.get(conversationId) ?? [])]\n .filter((event) => (opts.fromEventId ? event.eventId > opts.fromEventId : true))\n .filter((event) => (opts.toEventId ? event.eventId <= opts.toEventId : true));\n\n if (opts.limit === undefined) {\n return events.map(clonePersistedEvent);\n }\n\n return events.slice(0, opts.limit).map(clonePersistedEvent);\n }\n\n async latestEventId(conversationId: string): Promise<string | null> {\n const events = this.store.get(conversationId) ?? [];\n const latest = events.length > 0 ? events[events.length - 1] : undefined;\n return latest?.eventId ?? null;\n }\n\n async truncate(\n conversationId: string,\n opts: { beforeEventId?: string; beforeMs?: number },\n ): Promise<void> {\n const events = this.store.get(conversationId) ?? [];\n const retained = events.filter((event) => {\n if (opts.beforeEventId && event.eventId < opts.beforeEventId) {\n return false;\n }\n if (opts.beforeMs !== undefined && event.timestamp < opts.beforeMs) {\n return false;\n }\n return true;\n });\n this.store.set(conversationId, retained);\n }\n}\n","import type { RuntimeEvent } from '../../../contracts';\n\nexport type PersistedEvent = {\n eventId: string;\n timestamp: number;\n conversationId: string;\n runId?: string;\n event: RuntimeEvent;\n};\n\nexport type EventRangeOptions = {\n fromEventId?: string;\n toEventId?: string;\n limit?: number;\n};\n\nexport interface EventStore {\n append(conversationId: string, event: PersistedEvent): Promise<void>;\n range(conversationId: string, opts?: EventRangeOptions): Promise<PersistedEvent[]>;\n latestEventId(conversationId: string): Promise<string | null>;\n truncate?(conversationId: string, opts: { beforeEventId?: string; beforeMs?: number }): Promise<void>;\n}\n\nexport function createMonotonicEventIdFactory(\n nowProvider: () => number = () => Date.now(),\n): () => string {\n let lastTimestamp = 0;\n let counter = 0;\n\n return () => {\n const timestamp = nowProvider();\n if (timestamp === lastTimestamp) {\n counter += 1;\n } else {\n lastTimestamp = timestamp;\n counter = 0;\n }\n\n return `${String(timestamp).padStart(13, '0')}-${String(counter).padStart(4, '0')}`;\n };\n}\n","export { EventBus } from './event-bus';\nexport { EventSequencer } from './sequencer';\nexport { createRuntimeErrorEvent } from './runtimeErrorEventFactory';\n","/**\n * @file src/agent/runtime-kernel/execution/event-bus.ts\n * @description 内存中的事件总线\n *\n * 功能 (What):\n * - 提供一个中央事件中心,用于发布和订阅 `EventEnvelope` 事件。\n * - 解耦事件的产生方(如 Runners)和消费方(如持久化、SSE推送)。\n * - 保证事件处理的逻辑集中化。\n *\n * 这是一个简单的内存实现,为每个执行流程(execution)创建一个实例。\n */\n\nimport { Logger } from '../../shared/logger';\nimport type { EventEnvelope, RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('EventBus');\n\n// 定义事件总线可以发出的事件类型\ntype EventBusEvents = {\n 'event': (envelope: EventEnvelope<RuntimeEvent>) => void;\n 'error': (error: Error) => void;\n 'close': () => void;\n};\n\n// 使用轻量内存 emitter,避免 Node EventEmitter 的 any listener 边界污染公开类型。\ntype EventListener = (...args: never[]) => void;\n\nclass TypedEventEmitter<TEvents extends Record<string, EventListener>> {\n private readonly listeners = new Map<keyof TEvents, Set<TEvents[keyof TEvents]>>();\n private maxListeners = 10;\n\n on<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n const listeners = this.getListeners(event);\n listeners.add(listener);\n if (listeners.size > this.maxListeners) {\n logger.warn('EventBus listener count exceeds configured max', {\n event: String(event),\n count: listeners.size,\n maxListeners: this.maxListeners,\n });\n }\n return this;\n }\n\n off<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n\n once<TEvent extends keyof TEvents>(event: TEvent, listener: TEvents[TEvent]): this {\n const onceListener = ((...args: Parameters<TEvents[TEvent]>) => {\n this.off(event, onceListener);\n listener(...args);\n }) as TEvents[TEvent];\n this.on(event, onceListener);\n return this;\n }\n\n emit<TEvent extends keyof TEvents>(event: TEvent, ...args: Parameters<TEvents[TEvent]>): boolean {\n const listeners = this.listeners.get(event);\n if (!listeners || listeners.size === 0) {\n return false;\n }\n for (const listener of [...listeners]) {\n const typedListener = listener as TEvents[TEvent];\n typedListener(...args);\n }\n return true;\n }\n\n removeAllListeners<TEvent extends keyof TEvents>(event?: TEvent): this {\n if (event) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n\n setMaxListeners(n: number): this {\n this.maxListeners = n;\n return this;\n }\n\n private getListeners<TEvent extends keyof TEvents>(event: TEvent): Set<TEvents[keyof TEvents]> {\n const existing = this.listeners.get(event);\n if (existing) {\n return existing;\n }\n const created = new Set<TEvents[keyof TEvents]>();\n this.listeners.set(event, created);\n return created;\n }\n}\n\n/**\n * 事件总线类\n *\n * 为每一次执行(execution)实例化一次,管理该执行生命周期内的所有事件。\n */\nexport class EventBus extends TypedEventEmitter<EventBusEvents> {\n public readonly executionId: string; // 🔥 改为 public 以便外部访问\n\n constructor(executionId: string) {\n super();\n this.executionId = executionId;\n this.setMaxListeners(30); // 默认10个,增加一些以防多工具监听等场景\n logger.info(`EventBus created for execution ${this.executionId}`);\n }\n\n /**\n * 发布一个事件到总线\n * @param envelope - 经过序列器包装的事件信封\n */\n publish(envelope: EventEnvelope<RuntimeEvent>): void {\n if (envelope.trace.execution_id !== this.executionId) {\n const error = new Error('EventEnvelope execution_id does not match EventBus instance.');\n logger.error('Mismatched execution_id', {\n busExecutionId: this.executionId,\n eventExecutionId: envelope.trace.execution_id,\n eventSeq: envelope.seq,\n });\n this.emit('error', error);\n return;\n }\n\n this.emit('event', envelope);\n }\n\n /**\n * 关闭总线,清理所有监听器\n */\n close(): void {\n logger.info(`Closing EventBus for execution ${this.executionId}`);\n this.emit('close');\n this.removeAllListeners();\n }\n}\n","/**\n * @file src/agent/runtime-kernel/execution/sequencer.ts\n * @description 事件序列器 - 为事件分配序号和执行上下文\n * \n * 功能 (What):\n * - 为每个执行流程生成唯一的 execution_id\n * - 为事件分配单调递增的序号 (seq)\n * - 将 RuntimeEvent 包装为 EventEnvelope,提供追踪和渲染元数据\n * \n * 输入 (Input):\n * - RuntimeEvent 或原始事件数据\n * - source 信息(事件来源)\n * \n * 输出 (Output):\n * - EventEnvelope 包装的事件\n * \n * 副作用 (Side-effects):\n * - 维护内存中的序号状态\n */\n\nimport { generateExecutionId, generateTraceId } from '../../shared/ids';\nimport { Logger } from '../../shared/logger';\nimport type { EventEnvelope, ExecutionTraceContext, RuntimeEvent } from '../../contracts';\n\nconst logger = new Logger('EventSequencer');\n\n/**\n * 事件序列器类\n * \n * 职责:\n * - 管理执行上下文(execution_id, trace_id)\n * - 为事件分配严格递增的序号\n * - 提供事件包装功能\n */\nexport class EventSequencer {\n private readonly executionId: string;\n private readonly traceId: string;\n private currentSeq = 0;\n\n constructor(\n conversationId: string,\n traceId?: string\n ) {\n // 🔥 修复:使用标准化的 ID 生成函数,保持代码一致性\n this.executionId = generateExecutionId();\n this.traceId = traceId || generateTraceId();\n \n logger.info(`EventSequencer created for conversation ${conversationId}`, {\n executionId: this.executionId,\n traceId: this.traceId,\n });\n }\n\n /**\n * 获取执行上下文\n */\n getExecutionContext(): ExecutionTraceContext {\n return {\n execution_id: this.executionId,\n trace_id: this.traceId,\n };\n }\n\n /**\n * 获取下一个序号\n * 这个方法是线程安全的,因为 Node.js 是单线程的\n */\n private getNextSeq(): number {\n return ++this.currentSeq;\n }\n\n /**\n * 将 RuntimeEvent 包装为 EventEnvelope\n * \n * @param runtimeEvent - 需要包装的运行时事件\n * @param source - 事件来源标识\n * @param renderHint - 可选的渲染建议\n * @param runLocation - 可选的执行位置\n * @returns 包装后的事件信封\n */\n wrapEvent(\n runtimeEvent: RuntimeEvent,\n source: string,\n options: {\n renderHint?: EventEnvelope<RuntimeEvent>['render_hint'];\n runLocation?: EventEnvelope<RuntimeEvent>['run_location'];\n } = {}\n ): EventEnvelope<RuntimeEvent> {\n const envelope: EventEnvelope<RuntimeEvent> = {\n seq: this.getNextSeq(),\n timestamp: Date.now(),\n trace: this.getExecutionContext(),\n source,\n payload: runtimeEvent,\n render_hint: options.renderHint,\n run_location: options.runLocation,\n };\n\n return envelope;\n }\n\n /**\n * 获取当前序号(调试用)\n */\n getCurrentSeq(): number {\n return this.currentSeq;\n }\n\n /**\n * 获取执行ID(调试用)\n */\n getExecutionId(): string {\n return this.executionId;\n }\n}\n","/**\n * @file src/agent/shared/errorClassifier.ts\n *\n * @brief Agent runtime 自己拥有的错误分类器\n *\n * @description\n * 错误分类与重试策略属于 Agent runtime 的执行协议,不应该继续由 app shared owner 持有。\n */\n\nexport enum ErrorCategory {\n RETRYABLE = 'retryable',\n NON_RETRYABLE = 'non_retryable',\n RATE_LIMIT = 'rate_limit',\n}\n\nexport const ENGINE_ERROR_CODES = {\n LLM_RATE_LIMIT: 'llm.rate_limit',\n LLM_INVALID_TOOL_ARGS: 'llm.invalid_tool_args',\n LLM_PROVIDER_DOWN: 'llm.provider_down',\n LLM_UNSUPPORTED_CAPABILITY: 'llm.unsupported_capability',\n LLM_AUTH_FAILED: 'llm.auth_failed',\n LLM_INVALID_REQUEST: 'llm.invalid_request',\n LLM_RESOURCE_NOT_FOUND: 'llm.resource_not_found',\n TOOL_TIMEOUT: 'tool.timeout',\n TOOL_PROTOCOL_FUSE: 'tool.protocol_fuse',\n ENGINE_DELEGATE_DEPTH: 'engine.delegate_depth_exceeded',\n ENGINE_BUDGET_EXHAUSTED: 'engine.budget_exhausted',\n USER_CANCELLED: 'user.cancelled',\n ENGINE_UNKNOWN: 'engine.unknown',\n} as const;\n\nexport interface ErrorClassification {\n category: ErrorCategory;\n reason: string;\n suggestedDelay: number | null;\n errorCode: string;\n recoverable: boolean;\n retryAfterMs?: number;\n hint?: string;\n metadata?: Record<string, unknown>;\n}\n\ntype ClassificationExtras = Omit<ErrorClassification, 'category' | 'reason' | 'suggestedDelay'>;\n\nfunction createClassification(\n category: ErrorCategory,\n reason: string,\n suggestedDelay: number | null,\n extras: ClassificationExtras,\n): ErrorClassification {\n return {\n category,\n reason,\n suggestedDelay,\n ...extras,\n };\n}\n\nexport class ErrorClassifier {\n static classify(error: Error, context?: { logPrefix?: string }): ErrorClassification {\n type UnknownRecord = Record<string, unknown>;\n const isRecord = (v: unknown): v is UnknownRecord => !!v && typeof v === 'object' && !Array.isArray(v);\n\n const baseMsg = (error.message || '').toLowerCase();\n const causeMsg = (() => {\n const cause = (error as unknown as { cause?: unknown }).cause;\n if (typeof cause === 'string') return cause.toLowerCase();\n if (cause instanceof Error) return (cause.message || '').toLowerCase();\n if (isRecord(cause) && typeof cause['message'] === 'string') return String(cause['message']).toLowerCase();\n return '';\n })();\n const causeCode = (() => {\n const cause = (error as unknown as { cause?: unknown }).cause;\n if (isRecord(cause) && typeof cause['code'] === 'string') return String(cause['code']);\n return '';\n })();\n\n const errorMessage = `${baseMsg} ${causeMsg}`.trim();\n const logPrefix = context?.logPrefix || '[ErrorClassifier]';\n\n if (errorMessage.includes('invalid tool_call.arguments')) {\n console.log(`${logPrefix} 🔄 检测到流式 tool_call 参数损坏,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, '模型输出损坏: invalid tool_call.arguments', 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_INVALID_TOOL_ARGS,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_same_request',\n metadata: { matchedPattern: 'invalid tool_call.arguments' },\n });\n }\n\n const unsupportedPatterns = [\n 'no channels with claude tools support',\n 'does not support',\n 'not supported',\n 'tool calling is not available',\n 'feature not available',\n 'capability not supported',\n 'unsupported',\n ];\n\n for (const pattern of unsupportedPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到功能不支持错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `功能不支持: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_UNSUPPORTED_CAPABILITY,\n recoverable: false,\n hint: 'switch_model_or_disable_feature',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const quotaPatterns = ['已达上限', '免费期已结束'];\n for (const pattern of quotaPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到云端额度限制,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `云端额度限制: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: false,\n hint: 'check_billing_or_provider_status',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const authPatterns = [\n { pattern: 'unauthorized', code: '401' },\n { pattern: 'forbidden', code: '403' },\n { pattern: 'invalid api key', code: 'auth' },\n { pattern: 'invalid_api_key', code: 'auth' },\n { pattern: 'authentication failed', code: 'auth' },\n { pattern: 'api key not found', code: 'auth' },\n ];\n\n for (const { pattern, code } of authPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到认证/权限错误 (${code}),不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `认证/权限错误: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_AUTH_FAILED,\n recoverable: false,\n hint: 'check_credentials',\n metadata: { matchedPattern: pattern, authCode: code },\n });\n }\n }\n\n const formatPatterns = [\n 'bad request',\n '400',\n 'invalid request',\n 'invalid parameter',\n 'invalid arguments for function',\n 'convert_request_failed',\n 'validation error',\n 'malformed',\n 'invalid json',\n 'parse error',\n 'schema validation failed',\n ];\n\n for (const pattern of formatPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到请求格式错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `请求格式错误: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_INVALID_REQUEST,\n recoverable: false,\n hint: 'fix_request_payload',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const notFoundPatterns = [\n 'not found',\n '404',\n 'model not found',\n 'endpoint not found',\n 'resource not found',\n ];\n\n for (const pattern of notFoundPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🚫 检测到资源不存在错误,不重试`);\n return createClassification(ErrorCategory.NON_RETRYABLE, `资源不存在: ${pattern}`, null, {\n errorCode: ENGINE_ERROR_CODES.LLM_RESOURCE_NOT_FOUND,\n recoverable: false,\n hint: 'verify_resource_identifier',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const rateLimitPatterns = [\n 'rate limit',\n 'too many requests',\n '429',\n 'quota exceeded',\n 'throttled',\n ];\n\n for (const pattern of rateLimitPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} ⏱️ 检测到速率限制错误,将使用指数退避重试`);\n return createClassification(ErrorCategory.RATE_LIMIT, `速率限制: ${pattern}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_RATE_LIMIT,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n const networkPatterns = [\n 'network error',\n 'timeout',\n 'econnrefused',\n 'econnreset',\n 'etimedout',\n 'connection refused',\n 'connection reset',\n 'socket hang up',\n 'fetch failed',\n 'network timeout',\n 'terminated',\n 'other side closed',\n ];\n\n for (const pattern of networkPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🔄 检测到网络错误,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `网络错误: ${pattern}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n if (causeCode.startsWith('UND_ERR_')) {\n console.log(`${logPrefix} 🔄 检测到 undici 错误码(${causeCode}),可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `网络错误(undici): ${causeCode}`, 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: causeCode },\n });\n }\n\n const serverErrorPatterns = [\n { pattern: '500', name: 'Internal Server Error' },\n { pattern: '502', name: 'Bad Gateway' },\n { pattern: '503', name: 'Service Unavailable' },\n { pattern: '504', name: 'Gateway Timeout' },\n { pattern: 'internal server error', name: 'Internal Server Error' },\n { pattern: 'bad gateway', name: 'Bad Gateway' },\n { pattern: 'service unavailable', name: 'Service Unavailable' },\n { pattern: 'gateway timeout', name: 'Gateway Timeout' },\n ];\n\n for (const { pattern, name } of serverErrorPatterns) {\n if (errorMessage.includes(pattern)) {\n console.log(`${logPrefix} 🔄 检测到服务端临时错误 (${name}),可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, `服务端临时错误: ${name}`, 2000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 2000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: pattern },\n });\n }\n }\n\n if (errorMessage.includes('空响应') || errorMessage.includes('empty response')) {\n console.log(`${logPrefix} 🔄 检测到空响应错误,可以重试`);\n return createClassification(ErrorCategory.RETRYABLE, '空响应错误', 1000, {\n errorCode: ENGINE_ERROR_CODES.LLM_PROVIDER_DOWN,\n recoverable: true,\n retryAfterMs: 1000,\n hint: 'retry_with_backoff',\n metadata: { matchedPattern: 'empty response' },\n });\n }\n\n const truncatedMessage =\n errorMessage.length > 100 ? `${errorMessage.substring(0, 100)}...` : errorMessage;\n\n console.log(`${logPrefix} ⚠️ 未知错误类型,默认不重试以避免浪费: ${truncatedMessage}`);\n return createClassification(ErrorCategory.NON_RETRYABLE, '未知错误类型(保守策略)', null, {\n errorCode: ENGINE_ERROR_CODES.ENGINE_UNKNOWN,\n recoverable: false,\n hint: 'inspect_logs',\n metadata: { matchedPattern: 'fallback' },\n });\n }\n\n static categorize(error: Error): ErrorCategory {\n return this.classify(error).category;\n }\n\n static shouldRetry(error: Error): boolean {\n const category = this.categorize(error);\n return category === ErrorCategory.RETRYABLE || category === ErrorCategory.RATE_LIMIT;\n }\n\n static calculateRetryDelay(\n error: Error,\n attemptNumber: number,\n baseDelay: number = 1000,\n maxDelay: number = 60000,\n ): number {\n const classification = this.classify(error);\n\n if (classification.category === ErrorCategory.NON_RETRYABLE) {\n return 0;\n }\n\n if (classification.category === ErrorCategory.RATE_LIMIT) {\n return Math.min(baseDelay * Math.pow(2, attemptNumber), maxDelay);\n }\n\n return classification.suggestedDelay || baseDelay;\n }\n\n static isCloudQuotaError(error: Error): boolean {\n const msg = (error.message || '').toLowerCase();\n const patterns = [\n '额度上限',\n '已达上限',\n '免费期已结束',\n '该模型暂不可用',\n ];\n return patterns.some((pattern) => msg.includes(pattern));\n }\n}\n\nexport const classifyError = (error: Error) => ErrorClassifier.classify(error);\nexport const categorizeError = (error: Error) => ErrorClassifier.categorize(error);\nexport const shouldRetryError = (error: Error) => ErrorClassifier.shouldRetry(error);\n","import { ENGINE_ERROR_CODES, ErrorClassifier } from '../../shared/errorClassifier';\nimport type { ErrorEvent } from '../../contracts';\nimport { createErrorEvent } from '../../contracts';\n\ntype UnknownRecord = Record<string, unknown>;\n\nconst isRecord = (v: unknown): v is UnknownRecord => !!v && typeof v === 'object' && !Array.isArray(v);\n\nfunction safeJsonParse(text: string): unknown | undefined {\n const t = text.trim();\n if (!t) return undefined;\n if (!(t.startsWith('{') || t.startsWith('['))) return undefined;\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * 提取“嵌套 JSON 字符串”形态的上游错误信息。\n *\n * 典型示例(来自日志):\n * - Error.message 是 JSON 字符串(外层),其中 `error.message` 又是一段 JSON 字符串(内层 provider/router)。\n */\nexport function extractNestedProviderError(rawMessage: string): {\n outer?: unknown;\n inner?: unknown;\n innerType?: string;\n httpStatus?: number;\n innerMessage?: string;\n} {\n const outer = safeJsonParse(rawMessage);\n if (!isRecord(outer)) return {};\n\n const outerError = outer['error'];\n if (!isRecord(outerError)) return { outer };\n\n const innerMessageText = outerError['message'];\n if (typeof innerMessageText !== 'string') return { outer };\n\n const inner = safeJsonParse(innerMessageText);\n if (!isRecord(inner)) return { outer, inner: innerMessageText };\n\n const innerType = typeof inner['type'] === 'string' ? inner['type'] : undefined;\n const httpStatus = typeof inner['httpStatus'] === 'number' ? inner['httpStatus'] : undefined;\n const innerMessage = typeof inner['message'] === 'string' ? inner['message'] : undefined;\n\n return { outer, inner, innerType, httpStatus, innerMessage };\n}\n\nexport interface CreateRuntimeErrorEventInput {\n /**\n * 可选:由调用方提供稳定 id(例如 generateMessageId())。\n * 若不提供,工厂会生成一个临时 id。\n */\n id?: string;\n conversationId: string;\n turnId: string;\n error: unknown;\n /**\n * 事件来源,用于排查(不会直接展示给用户)。\n */\n source?: string;\n /**\n * 可选:覆盖 error_code(例如 SUMMARIZATION_FAILED)。\n */\n errorCode?: string;\n /**\n * 可选:覆盖 retryable。\n */\n retryable?: boolean;\n /**\n * 可选:覆盖 error 文本(默认使用原始 error.message)。\n * 注意:这不是“用户友好化文案”,只是允许在系统级错误里加上更明确的上下文前缀。\n */\n errorText?: string;\n /**\n * 可选:合并到 details 的附加字段(便于调用方补充上下文信息)。\n */\n detailsPatch?: Record<string, unknown>;\n}\n\n/**\n * 统一创建 RuntimeEvent(type='error')。\n *\n * 中文备注:\n * - `error` 字段保留原始 message(前端负责友好化);\n * - `error_code` 尽量稳定:优先上游结构化 type,否则 fallback 到分类结果;\n * - `retryable` 与 `details.classification` 使用同一份 classifier 输出,避免重复判断。\n */\nexport function createRuntimeErrorEvent(input: CreateRuntimeErrorEventInput): ErrorEvent {\n const rawMessage = input.error instanceof Error ? input.error.message : String(input.error);\n const errObj = input.error instanceof Error ? input.error : new Error(rawMessage);\n\n const nested = extractNestedProviderError(rawMessage);\n const classification = ErrorClassifier.classify(errObj, { logPrefix: '[RuntimeErrorEventFactory]' });\n\n const errorCodeComputed =\n (nested.innerType && nested.innerType.trim().length > 0 ? nested.innerType.trim() : undefined) ??\n (classification.errorCode && classification.errorCode.trim().length > 0\n ? classification.errorCode\n : undefined) ??\n ENGINE_ERROR_CODES.ENGINE_UNKNOWN;\n\n const errorTextComputed = rawMessage && rawMessage.trim().length > 0 ? rawMessage : 'Unknown error';\n const errorText = (input.errorText && input.errorText.trim().length > 0 ? input.errorText.trim() : undefined) ?? errorTextComputed;\n const errorCode = (input.errorCode && input.errorCode.trim().length > 0 ? input.errorCode.trim() : undefined) ?? errorCodeComputed;\n const retryable =\n typeof input.retryable === 'boolean' ? input.retryable : classification.recoverable;\n\n return createErrorEvent(\n // id 由调用方决定更灵活(这里用时间戳拼随机,避免引入 generateMessageId 依赖)\n (input.id && input.id.trim().length > 0 ? input.id.trim() : undefined) ?? `err_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,\n input.conversationId,\n input.turnId,\n errorText,\n {\n error_code: errorCode,\n retryable,\n details: {\n source: input.source,\n name: input.error instanceof Error ? input.error.name : undefined,\n stack: input.error instanceof Error ? input.error.stack : undefined,\n raw_message: rawMessage,\n nested,\n classification,\n ...(input.detailsPatch ? input.detailsPatch : {}),\n },\n }\n );\n}\n","/**\n * @file src/agent/runtime-kernel/llm/policies/policyEngine.ts\n *\n * @description\n * 统一的 LLM Policy Engine:\n * - 按 match 条件筛选 policies\n * - 固定调用点:beforeRequest / afterResponse / onError\n *\n * 主链路通过调用 PolicyEngine 达到“可扩展但不膨胀”的效果。\n */\n\nimport type {\n LLMPolicy,\n LLMPolicyMatchContext,\n LLMPolicyRequestContext,\n LLMPolicyResponseContext,\n LLMPolicyErrorDecision\n} from './types';\n\nexport class LLMPolicyEngine {\n private readonly policies: LLMPolicy[];\n\n constructor(policies: LLMPolicy[]) {\n this.policies = Array.isArray(policies) ? policies : [];\n }\n\n private matched(ctx: LLMPolicyMatchContext): LLMPolicy[] {\n return this.policies.filter(p => {\n try {\n return p.match(ctx);\n } catch {\n return false;\n }\n });\n }\n\n applyBeforeRequest(ctx: LLMPolicyRequestContext): { requestData: unknown; headers?: Record<string, string> } {\n const matched = this.matched(ctx);\n let requestData = ctx.requestData;\n let headers = ctx.headers;\n\n for (const p of matched) {\n if (!p.beforeRequest) continue;\n try {\n const out = p.beforeRequest({ ...ctx, requestData, headers });\n if (out?.requestData !== undefined) requestData = out.requestData;\n if (out?.headers !== undefined) headers = out.headers;\n } catch {\n // policy 不应影响主流程\n }\n }\n\n return { requestData, headers };\n }\n\n applyAfterResponse(ctx: LLMPolicyResponseContext): { responseData: unknown } {\n const matched = this.matched(ctx);\n let responseData = ctx.responseData;\n for (const p of matched) {\n if (!p.afterResponse) continue;\n try {\n const out = p.afterResponse({ ...ctx, responseData });\n if (out?.responseData !== undefined) responseData = out.responseData;\n } catch {\n // ignore\n }\n }\n return { responseData };\n }\n\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision {\n const matched = this.matched(ctx);\n for (const p of matched) {\n if (!p.onError) continue;\n try {\n const decision = p.onError(error, ctx);\n if (decision && decision.action !== 'none') return decision;\n } catch {\n // ignore\n }\n }\n return { action: 'none' };\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/policies/defaultPolicyEngine.ts\n *\n * @description\n * linnkit 的默认 PolicyEngine 不注册任何 provider/model 策略。\n *\n * provider 适配属于宿主集成层职责。宿主可以复用 `LLMPolicyEngine`\n * 并显式注入自己的 policies。\n */\n\nimport { LLMPolicyEngine } from './policyEngine';\n\nexport const defaultPolicyEngine = new LLMPolicyEngine([]);\n","import type { AgentAiEngine } from '../../ports';\nimport type { LlmRetryConfig } from './caller.types';\nimport type { LLMPolicyErrorDecision, LLMPolicyMatchContext } from './policies/types';\nimport type { ModelCatalogLike } from './modelCatalog';\nimport { ModelResolver, type ModelResolverLike } from './modelResolver';\nimport { defaultPolicyEngine } from './policies/defaultPolicyEngine';\n\nexport interface LlmCallerOptions {\n maxRetries?: number;\n enableEmptyResponseRetry?: boolean;\n retryDelayMs?: number;\n fallbackModelPreferredOrder?: readonly string[];\n modelResolver?: ModelResolverLike;\n modelCatalog?: ModelCatalogLike;\n policyEngine?: {\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision;\n };\n aiEngine: AgentAiEngine;\n}\n\nexport interface NormalizedLlmCallerDeps {\n retryConfig: LlmRetryConfig;\n modelResolver: ModelResolverLike;\n policyEngine: NonNullable<LlmCallerOptions['policyEngine']>;\n aiEngine: AgentAiEngine;\n}\n\nexport function isLlmCallerOptions(options: Partial<LlmRetryConfig> | LlmCallerOptions): options is LlmCallerOptions {\n return 'fallbackModelPreferredOrder' in options\n || 'modelResolver' in options\n || 'aiEngine' in options;\n}\n\nexport const createMissingAiEngine = (): AgentAiEngine => ({\n async chatCompletion(): Promise<never> {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n },\n async chatCompletionStream(): Promise<never> {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n },\n});\n\nexport function normalizeConstructorOptions(\n options?: Partial<LlmRetryConfig> | LlmCallerOptions,\n): LlmCallerOptions {\n if (!options) {\n throw new Error('[LlmCaller] aiEngine is required. Inject it from host assembly or test harness.');\n }\n\n if (isLlmCallerOptions(options)) {\n return options;\n }\n\n return {\n ...options,\n aiEngine: createMissingAiEngine(),\n };\n}\n\nexport function buildLlmCallerDeps(\n options: LlmCallerOptions,\n fallbackModelCatalog: ModelCatalogLike,\n): NormalizedLlmCallerDeps {\n const modelCatalog = options.modelCatalog ?? fallbackModelCatalog;\n return {\n retryConfig: {\n maxRetries: options.maxRetries ?? 3,\n enableEmptyResponseRetry: options.enableEmptyResponseRetry ?? true,\n retryDelayMs: options.retryDelayMs ?? 1000,\n },\n modelResolver:\n options.modelResolver ??\n new ModelResolver({\n fallbackModelPreferredOrder: options.fallbackModelPreferredOrder,\n modelCatalog,\n }),\n policyEngine: options.policyEngine ?? defaultPolicyEngine,\n aiEngine: options.aiEngine,\n };\n}\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/toolCallStreamAccumulator.ts\n * @description\n * 流式 tool_calls 聚合器:把 ToolCallChunk[] 拼成稳定的 ToolCall[]。\n *\n * 说明:\n * - 该模块只做 tool_calls 的结构化聚合,不负责发送事件;\n * - 兼容 OpenAI 标准“arguments delta”与部分 OpenAI-compat 的异常形态(同 index 新 id、多顶层 JSON `}{` 等)。\n */\n\nimport { generateMessageId } from '../../../shared/ids';\nimport { splitConcatenatedJsonObjects, tryParseJsonRecord } from '../toolCallUtils';\nimport type { ToolCall, ToolCallChunk, ToolCallExtraContent } from '../caller.types';\n\nconst isToolCallChunk = (v: unknown): v is ToolCallChunk => {\n if (!v || typeof v !== 'object') return false;\n return 'index' in v;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeToolCallExtraContent(\n existing: ToolCallExtraContent | undefined,\n incoming: ToolCallExtraContent | undefined,\n): ToolCallExtraContent | undefined {\n if (!incoming) return existing;\n const merged: Record<string, unknown> = { ...(existing ?? {}) };\n\n for (const [namespace, incomingValue] of Object.entries(incoming)) {\n const existingValue = merged[namespace];\n merged[namespace] = isRecord(existingValue) && isRecord(incomingValue)\n ? { ...existingValue, ...incomingValue }\n : incomingValue;\n }\n\n return merged as ToolCallExtraContent;\n}\n\nexport class ToolCallStreamAccumulator {\n private toolCalls: ToolCall[] = [];\n private readonly emittedToolCallIds = new Set<string>();\n private readonly placeholderAllowlist: Set<string>;\n /**\n * 已发出的“可解析 args 快照”(按 tool_call_id 去重),用于避免 update 事件刷屏与 UI 抖动。\n *\n * 说明:\n * - 这里用“原始 JSON 字符串(trim 后)”作为快照指纹,比 JSON.stringify(object) 更稳定:\n * - 可保留模型/供应商的 key 顺序(避免 stringify 造成无意义 diff);\n * - 也能覆盖 “provider 直接发送完整 JSON snapshot” 的场景。\n */\n private readonly emittedArgsSnapshotByToolCallId = new Map<string, string>();\n private readonly lastArgsEmitAtByToolCallId = new Map<string, number>();\n\n constructor(placeholderToolAllowlist: Iterable<string>) {\n this.placeholderAllowlist = new Set<string>(placeholderToolAllowlist);\n }\n\n /**\n * @description\n * 在 tool_call id + name 都就绪时触发,用于上层发“占位 tool_process”。\n */\n private maybeEmitPlaceholder(toolCallId: string, toolName: string, onPlaceholder?: (toolCallId: string, toolName: string) => void): void {\n if (!onPlaceholder) return;\n if (!toolCallId || !toolName) return;\n if (!this.placeholderAllowlist.has(toolName)) return;\n if (this.emittedToolCallIds.has(toolCallId)) return;\n this.emittedToolCallIds.add(toolCallId);\n onPlaceholder(toolCallId, toolName);\n }\n\n /**\n * @description\n * 尝试在“arguments 已经是合法 JSON 对象”时发出 args 快照。\n *\n * 约束:\n * - 仅当 arguments 能 parse 成 Record 才触发(不做半吊子容错解析,避免补丁式行为);\n * - 默认做轻量节流(同一 tool_call_id 50ms 内最多 1 次),防止 provider 高频 snapshot 导致 UI 抖动。\n */\n private maybeEmitArgsSnapshot(\n toolCallId: string,\n toolName: string,\n rawArgsJson: string,\n onArgsSnapshot?: (toolCallId: string, toolName: string, args: Record<string, unknown>) => void\n ): void {\n if (!onArgsSnapshot) return;\n if (!toolCallId || !toolName) return;\n\n const now = Date.now();\n const lastAt = this.lastArgsEmitAtByToolCallId.get(toolCallId) ?? 0;\n if (now - lastAt < 50) return;\n\n const trimmed = rawArgsJson.trim();\n if (!trimmed) return;\n\n const prev = this.emittedArgsSnapshotByToolCallId.get(toolCallId);\n if (prev === trimmed) return;\n\n const parsed = tryParseJsonRecord(trimmed);\n if (!parsed.ok) return;\n\n this.emittedArgsSnapshotByToolCallId.set(toolCallId, trimmed);\n this.lastArgsEmitAtByToolCallId.set(toolCallId, now);\n onArgsSnapshot(toolCallId, toolName, parsed.value);\n }\n\n applyChunks(\n chunks: unknown[],\n onPlaceholder?: (toolCallId: string, toolName: string) => void,\n onArgsSnapshot?: (toolCallId: string, toolName: string, args: Record<string, unknown>) => void\n ): void {\n for (const toolCallChunk of chunks) {\n if (!isToolCallChunk(toolCallChunk)) continue;\n\n /**\n * OpenAI 标准:tool_calls[*].function.arguments 是“增量 delta”,可直接拼接。\n *\n * 但在部分 OpenAI-compat 供应商中,可能会出现以下异常流式形态:\n * - 同一 index 上出现“新的 tool_call id”(意味着其实是下一条 tool_call)\n * - arguments 在一个 index 上输出了多个完整 JSON 对象片段,导致拼接后出现 `}{`\n */\n let index = toolCallChunk.index;\n\n if (!this.toolCalls[index]) {\n this.toolCalls[index] = { id: '', type: 'function', function: { name: '', arguments: '' } };\n }\n\n if (toolCallChunk.id) {\n // 同一 index 出现“不同 id”:通常意味着 provider 把下一条 tool_call 仍标成旧 index。\n if (this.toolCalls[index].id && this.toolCalls[index].id !== toolCallChunk.id) {\n const nextIndex = this.toolCalls.length;\n this.toolCalls[nextIndex] = { id: toolCallChunk.id, type: 'function', function: { name: '', arguments: '' } };\n index = nextIndex;\n } else {\n this.toolCalls[index].id = toolCallChunk.id;\n }\n }\n\n // Provider replay sidecar:extra_content 是按 provider namespace 组织的不透明载荷。\n if (toolCallChunk.extra_content) {\n this.toolCalls[index].extra_content = mergeToolCallExtraContent(\n this.toolCalls[index].extra_content,\n toolCallChunk.extra_content,\n );\n }\n\n if (toolCallChunk.function?.name) {\n // 直接覆盖名称(OpenAI协议中名称通常一次性给出)\n this.toolCalls[index].function.name = toolCallChunk.function.name;\n }\n\n const readyId = this.toolCalls[index].id;\n const readyName = this.toolCalls[index].function.name;\n if (readyId && readyName) {\n this.maybeEmitPlaceholder(readyId, readyName, onPlaceholder);\n // 如果 provider 在“name/id 就绪”时就给出完整 JSON snapshot,可直接触发一次 update\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n\n if (toolCallChunk.function?.arguments) {\n const oldArgs = this.toolCalls[index].function.arguments;\n const newArgsChunk =\n typeof toolCallChunk.function.arguments === 'string'\n ? toolCallChunk.function.arguments\n : JSON.stringify(toolCallChunk.function.arguments);\n\n // 1) 若 newArgsChunk 自身是一个完整 JSON 对象,优先用“覆盖”语义(兼容非-delta 供应商)\n const newIsFullJson = tryParseJsonRecord(newArgsChunk.trim()).ok;\n const oldIsFullJson = tryParseJsonRecord(oldArgs.trim()).ok;\n\n if (newIsFullJson && (!oldArgs || !oldIsFullJson || newArgsChunk.trim().length >= oldArgs.trim().length)) {\n this.toolCalls[index].function.arguments = newArgsChunk;\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n continue;\n }\n\n // 2) 默认按 delta 追加\n const merged = oldArgs + newArgsChunk;\n\n // 3) 若拼接后出现多个顶层 JSON(典型表现为 `}{`),尝试拆分为多条 tool_call\n const pieces = splitConcatenatedJsonObjects(merged);\n if (pieces.length >= 2 && pieces.every(p => tryParseJsonRecord(p).ok)) {\n // 当前 index 保留第一段,其余段作为“后续 tool_call”追加\n this.toolCalls[index].function.arguments = pieces[0];\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n\n for (let pi = 1; pi < pieces.length; pi += 1) {\n const nextIndex = this.toolCalls.length;\n this.toolCalls[nextIndex] = {\n id: generateMessageId(),\n type: 'function',\n function: {\n name: this.toolCalls[index].function.name,\n arguments: pieces[pi]\n },\n // 仅透传一次 thought_signature(额外 tool_call 为兼容生成,不强行复制签名)\n extra_content: undefined\n };\n }\n continue;\n }\n\n this.toolCalls[index].function.arguments = merged;\n if (readyId && readyName) {\n this.maybeEmitArgsSnapshot(readyId, readyName, this.toolCalls[index].function.arguments, onArgsSnapshot);\n }\n }\n }\n }\n\n getToolCalls(): ToolCall[] {\n return this.toolCalls.filter(tc => tc && tc.function && tc.function.name);\n }\n}\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/markdownHeadingNormalizer.ts\n * @description\n * Markdown 增量拼接辅助:确保标题在流式 thought 拼接下仍能被正确识别。\n *\n * 背景:\n * - 模型在 thought 增量中可能突然输出 `### 标题` / `##标题`;\n * - 若前一段末尾没有换行,直接拼接会变成 `上一行内容### 标题`,markdown 解析不会识别为 heading。\n *\n * 策略(保守):\n * - 仅当 incoming 看起来是 heading 且 buffer 末尾不是换行时,补一个 `\\n`。\n * - 不改变非 heading 的增量,避免影响普通文本。\n */\n\nexport function normalizeThoughtDeltaForMarkdown(buffer: string, incoming: string): string {\n const chunk = String(incoming ?? '');\n if (!chunk) return chunk;\n if (!buffer) return chunk;\n\n // 已经在新行开始(或前面就是换行),无需处理\n if (buffer.endsWith('\\n')) return chunk;\n if (chunk.startsWith('\\n')) return chunk;\n\n // 识别 `### 标题` / `##标题`(不强制要求 # 后有空格)\n const looksLikeHeading = /^#{1,6}(?:\\s|[^\\s#])/.test(chunk);\n if (!looksLikeHeading) return chunk;\n\n return `\\n${chunk}`;\n}\n\n","/**\n * @file src/agent/runtime-kernel/llm/streaming/thoughtStreamSegmenter.ts\n * @description\n * thought 流式段落管理(交错 thought 支持 + 精确计时)。\n *\n * 设计目标:\n * - 高内聚:只负责 thought 的“段落切分、缓冲、开始/结束锚点”;\n * - 低耦合:不直接发事件,由上层(LlmCaller)决定如何映射为 AnyAgentEvent。\n */\n\nimport { generateMessageId } from '../../../shared/ids';\nimport { normalizeThoughtDeltaForMarkdown } from './markdownHeadingNormalizer';\n\nexport type ThoughtDeltaEmission = {\n thoughtMessageId: string;\n timestamp: number;\n delta: string;\n thoughtStartedAt: number;\n};\n\nexport type ThoughtCompleteEmission = {\n thoughtMessageId: string;\n timestamp: number;\n content: string;\n thoughtStartedAt: number;\n thoughtCompletedAt: number;\n};\n\nexport class ThoughtStreamSegmenter {\n private currentThoughtMessageId: string | null = null;\n private currentThoughtBuffer = '';\n private thoughtStartedAt: number | null = null;\n private lastThoughtDeltaAt: number | null = null;\n private inAnswerPhase = false;\n\n private now(): number {\n return Date.now();\n }\n\n private beginIfNeeded(now: number): void {\n if (this.currentThoughtMessageId) return;\n this.currentThoughtMessageId = generateMessageId();\n this.currentThoughtBuffer = '';\n this.thoughtStartedAt = now;\n this.lastThoughtDeltaAt = now;\n }\n\n /**\n * @description\n * 当出现“答案内容 / 工具调用”等边界时调用:封口当前 thought 段落。\n * 注意:结束锚点取最后一次 thought delta 的时间(而不是下一个消息时间)。\n */\n onBoundary(): ThoughtCompleteEmission | null {\n if (!this.currentThoughtMessageId) {\n this.inAnswerPhase = true;\n return null;\n }\n this.inAnswerPhase = true;\n return this.finalizeIfNeeded();\n }\n\n onThoughtDelta(rawDelta: string): ThoughtDeltaEmission | null {\n const thought = String(rawDelta ?? '');\n if (!thought.trim()) return null;\n\n const now = this.now();\n\n // 交错 thought:如果已经进入答案阶段,则开启新段\n if (this.inAnswerPhase) {\n this.inAnswerPhase = false;\n }\n\n this.beginIfNeeded(now);\n this.lastThoughtDeltaAt = now;\n\n // 标题行修正:基于展示缓冲拼接\n const normalized = normalizeThoughtDeltaForMarkdown(this.currentThoughtBuffer, thought);\n this.currentThoughtBuffer += normalized;\n\n return {\n thoughtMessageId: this.currentThoughtMessageId ?? generateMessageId(),\n timestamp: now,\n delta: normalized,\n thoughtStartedAt: this.thoughtStartedAt ?? now,\n };\n }\n\n finalize(): ThoughtCompleteEmission | null {\n return this.finalizeIfNeeded();\n }\n\n private finalizeIfNeeded(): ThoughtCompleteEmission | null {\n if (!this.currentThoughtMessageId) return null;\n if (!this.currentThoughtBuffer.trim()) {\n this.reset();\n return null;\n }\n\n const startedAt = this.thoughtStartedAt ?? this.lastThoughtDeltaAt ?? this.now();\n const completedAt = this.lastThoughtDeltaAt ?? this.now();\n const thoughtMessageId = this.currentThoughtMessageId;\n const content = this.currentThoughtBuffer;\n\n this.reset();\n return {\n thoughtMessageId,\n timestamp: completedAt,\n content,\n thoughtStartedAt: startedAt,\n thoughtCompletedAt: completedAt,\n };\n }\n\n private reset(): void {\n this.currentThoughtMessageId = null;\n this.currentThoughtBuffer = '';\n this.thoughtStartedAt = null;\n this.lastThoughtDeltaAt = null;\n }\n}\n","import type { ToolCall } from './caller.types';\nimport { tryParseJsonRecord } from './toolCallUtils';\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst isToolCall = (value: unknown): value is ToolCall => {\n if (!isRecord(value)) return false;\n if (typeof value['id'] !== 'string') return false;\n if (value['type'] !== 'function') return false;\n const fn = value['function'];\n if (!isRecord(fn)) return false;\n return typeof fn['name'] === 'string' && typeof fn['arguments'] === 'string';\n};\n\nexport const toToolCalls = (value: unknown): ToolCall[] | undefined => {\n if (!Array.isArray(value)) return undefined;\n return value.filter(isToolCall);\n};\n\nfunction summarizeToolArguments(rawArguments: string): { length: number; head: string; tail: string } {\n const previewChars = 160;\n return {\n length: rawArguments.length,\n head: rawArguments.slice(0, previewChars),\n tail: rawArguments.slice(Math.max(0, rawArguments.length - previewChars)),\n };\n}\n\n/**\n * 流式工具调用回放守卫。\n *\n * 中文备注:\n * - 这里不尝试修复半截 JSON,因为那会把模型输出损坏伪装成合法工具调用;\n * - 抛错后由 retry/fallback 层决定是否重试或切模型。\n */\nexport function assertToolCallsHaveValidJsonArguments(toolCalls: ToolCall[]): void {\n for (const toolCall of toolCalls) {\n const rawArguments = toolCall.function.arguments;\n const parsed = tryParseJsonRecord(rawArguments.trim());\n if (parsed.ok) {\n continue;\n }\n\n const summary = summarizeToolArguments(rawArguments);\n const trimmed = rawArguments.trim();\n const endsWithClosingBrace = trimmed.endsWith('}');\n const startsWithOpeningBrace = trimmed.startsWith('{');\n const truncationHint = startsWithOpeningBrace && !endsWithClosingBrace\n ? '(疑似输出中途被截断,可能是 max_tokens 不足)'\n : '(非典型截断模式,需进一步排查)';\n\n throw new Error(\n [\n `[LlmCaller] Stream ended with invalid tool_call.arguments for ${toolCall.function.name} (${toolCall.id}).`,\n `length=${summary.length}`,\n `head=${summary.head}`,\n `tail=${summary.tail}`,\n truncationHint,\n ].join(' ')\n );\n }\n}\n","type UnknownRecord = Record<string, unknown>;\n\nconst mergeableTextFields = ['reasoning_content'] as const;\n\ntype MergeableTextField = (typeof mergeableTextFields)[number];\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction findMergeableTextField(detail: unknown): MergeableTextField | undefined {\n if (!isRecord(detail)) return undefined;\n if (typeof detail.provider !== 'string') return undefined;\n if (typeof detail.type !== 'string') return undefined;\n\n for (const field of mergeableTextFields) {\n if (typeof detail[field] === 'string') {\n return field;\n }\n }\n return undefined;\n}\n\nfunction hasOnlyStableTextDetailFields(detail: UnknownRecord, textField: MergeableTextField): boolean {\n const allowedKeys = new Set<string>(['provider', 'type', textField]);\n return Object.keys(detail).every((key) => allowedKeys.has(key));\n}\n\nfunction canMergeTextDetails(previous: unknown, incoming: unknown): previous is UnknownRecord {\n if (!isRecord(previous) || !isRecord(incoming)) return false;\n\n const previousField = findMergeableTextField(previous);\n const incomingField = findMergeableTextField(incoming);\n if (!previousField || previousField !== incomingField) return false;\n\n return previous.provider === incoming.provider\n && previous.type === incoming.type\n && hasOnlyStableTextDetailFields(previous, previousField)\n && hasOnlyStableTextDetailFields(incoming, incomingField);\n}\n\nfunction mergeStreamingText(previous: string, incoming: string): string {\n if (!previous) return incoming;\n if (!incoming) return previous;\n\n // provider 可能按 delta 发,也可能按 snapshot 发。这里只归并“同 provider/type 的纯文本 sidecar”,\n // 带签名、索引等私有元数据的 detail 保持原样,避免破坏 replay 契约。\n if (incoming.startsWith(previous)) {\n return incoming;\n }\n if (previous.endsWith(incoming)) {\n return previous;\n }\n return `${previous}${incoming}`;\n}\n\nexport function appendStreamingProviderReasoningDetails(existing: unknown[], incoming: unknown[]): unknown[] {\n const next = [...existing];\n\n for (const detail of incoming) {\n const previous = next[next.length - 1];\n if (canMergeTextDetails(previous, detail)) {\n const textField = findMergeableTextField(previous);\n if (textField && isRecord(detail)) {\n const mergedText = mergeStreamingText(String(previous[textField]), String(detail[textField]));\n if (mergedText === previous[textField]) {\n continue;\n }\n next[next.length - 1] = {\n ...previous,\n [textField]: mergedText,\n };\n continue;\n }\n }\n next.push(detail);\n }\n\n return next;\n}\n\nexport function compactProviderReasoningDetails(reasoningDetails: unknown[]): unknown[] {\n return appendStreamingProviderReasoningDetails([], reasoningDetails);\n}\n\nexport function compactReasoningDetailsInValue<T>(value: T): T {\n return compactValue(value) as T;\n}\n\nfunction compactValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => compactValue(item));\n }\n if (!isRecord(value)) {\n return value;\n }\n\n const compacted: UnknownRecord = {};\n for (const [key, childValue] of Object.entries(value)) {\n if (key === 'reasoning_details' && Array.isArray(childValue)) {\n compacted[key] = compactProviderReasoningDetails(childValue);\n continue;\n }\n compacted[key] = compactValue(childValue);\n }\n return compacted;\n}\n","import type { AnyAgentEvent } from '../events/agentEvents';\nimport { generateMessageId } from '../../shared/ids';\nimport type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, LlmResponseContent } from './caller.types';\nimport { ToolCallStreamAccumulator } from './streaming/toolCallStreamAccumulator';\nimport { ThoughtStreamSegmenter } from './streaming/thoughtStreamSegmenter';\nimport { assertToolCallsHaveValidJsonArguments, isRecord } from './sidecar-replay';\nimport type { LlmCallResult } from './usage-telemetry';\nimport { appendStreamingProviderReasoningDetails } from './reasoning-details';\n\nexport interface CallLlmStreamParams {\n aiEngine: AgentAiEngine;\n modelId: string;\n messages: LlmRequestMessage[];\n options?: LlmCallOptions;\n eventHandler: (event: AnyAgentEvent) => void;\n signal?: AbortSignal;\n}\n\nexport async function callLlmStream(params: CallLlmStreamParams): Promise<LlmCallResult> {\n const {\n aiEngine,\n modelId,\n messages,\n options = {},\n eventHandler,\n signal,\n } = params;\n\n let fullResponse = '';\n let streamError: Error | null = null;\n let reasoningDetails: unknown[] = [];\n const streamAnswerId = generateMessageId();\n let streamChunkSeq = 0;\n let capturedUsage: unknown | undefined = undefined;\n\n const toolAccumulator = new ToolCallStreamAccumulator([\n 'markdown_edit',\n 'text_to_image',\n 'ask_questions',\n 'ppt_plan',\n 'ppt_codegen',\n ]);\n const thoughtSegmenter = new ThoughtStreamSegmenter();\n\n const emitThoughtComplete = (completed: ReturnType<ThoughtStreamSegmenter['finalize']>): void => {\n if (!completed) return;\n eventHandler({\n type: 'thought',\n thought_message_id: completed.thoughtMessageId,\n id: generateMessageId(),\n timestamp: completed.timestamp,\n content: completed.content,\n is_complete: true,\n meta: {\n thought_started_at: completed.thoughtStartedAt,\n thought_completed_at: completed.thoughtCompletedAt,\n },\n });\n };\n\n const emitToolCallPlaceholder = (toolCallId: string, toolName: string): void => {\n if (!toolCallId || !toolName) return;\n eventHandler({\n type: 'tool_process',\n id: generateMessageId(),\n timestamp: Date.now(),\n tool_name: toolName,\n tool_args: {},\n tool_call_id: toolCallId,\n phase: 'start',\n status: 'loading',\n payload: { args: {} },\n meta: { ephemeral: true },\n });\n };\n\n const emitStreamChunk = (content: string): void => {\n eventHandler({\n type: 'stream_chunk',\n timestamp: Date.now(),\n content,\n id: generateMessageId(),\n answer_id: streamAnswerId,\n seq: streamChunkSeq++,\n });\n };\n\n const onContent = (chunk: string | LlmResponseContent): void => {\n if (typeof chunk === 'string') {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n fullResponse += chunk;\n emitStreamChunk(chunk);\n return;\n }\n\n if (typeof chunk !== 'object' || chunk === null) {\n return;\n }\n\n if (chunk.content) {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n fullResponse += chunk.content;\n emitStreamChunk(chunk.content);\n }\n\n const reasoning = isRecord(chunk) ? chunk['reasoning_details'] : undefined;\n if (reasoning !== undefined) {\n const newReasoningDetails = Array.isArray(reasoning) ? reasoning : [reasoning];\n const previousReasoningDetails = reasoningDetails;\n const previousLength = previousReasoningDetails.length;\n const compactedReasoningDetails = appendStreamingProviderReasoningDetails(reasoningDetails, newReasoningDetails);\n reasoningDetails = compactedReasoningDetails;\n const previousLastChanged =\n previousLength > 0 && compactedReasoningDetails[previousLength - 1] !== previousReasoningDetails[previousLength - 1];\n const emitFromIndex = previousLastChanged ? previousLength - 1 : previousLength;\n const emittedReasoningDetails = compactedReasoningDetails.slice(Math.max(0, emitFromIndex));\n if (emittedReasoningDetails.length > 0) {\n eventHandler({\n type: 'provider_sidecar',\n id: generateMessageId(),\n timestamp: Date.now(),\n reasoning_details: emittedReasoningDetails,\n });\n }\n }\n\n if (chunk.tool_calls) {\n emitThoughtComplete(thoughtSegmenter.onBoundary());\n toolAccumulator.applyChunks(\n chunk.tool_calls,\n emitToolCallPlaceholder,\n (toolCallId, toolName, args) => {\n eventHandler({\n type: 'tool_process',\n id: generateMessageId(),\n timestamp: Date.now(),\n tool_name: toolName,\n tool_args: args,\n tool_call_id: toolCallId,\n phase: 'update',\n status: 'loading',\n payload: { args },\n meta: { ephemeral: true },\n });\n },\n );\n }\n };\n\n const onError = (error: Error): void => {\n streamError = error;\n if (process.env.NODE_ENV !== 'production') {\n console.error('[LlmCaller][callStream] onError fired', {\n modelId,\n messageCount: Array.isArray(messages) ? messages.length : -1,\n errorMessage: error?.message,\n });\n }\n eventHandler({\n type: 'error',\n error: error.message,\n details: error.stack,\n timestamp: Date.now(),\n id: generateMessageId(),\n });\n };\n\n const onFinish = (_reason: string): void => {\n // onFinish 不发送事件,由 stream_end 信号处理。\n };\n\n const onThought = (thought: string): void => {\n const delta = thoughtSegmenter.onThoughtDelta(thought);\n if (!delta) return;\n\n eventHandler({\n type: 'thought',\n thought_message_id: delta.thoughtMessageId,\n id: generateMessageId(),\n timestamp: delta.timestamp,\n content: '',\n delta: delta.delta,\n is_complete: false,\n meta: {\n thought_started_at: delta.thoughtStartedAt,\n },\n });\n };\n\n const onUsage = (usage: unknown): void => {\n capturedUsage = usage;\n };\n\n await aiEngine.chatCompletionStream(\n modelId,\n messages,\n {\n ...options,\n signal,\n stream_options: { include_usage: true },\n },\n onContent,\n onError,\n onFinish,\n onThought,\n onUsage,\n );\n\n if (streamError) {\n throw streamError;\n }\n\n emitThoughtComplete(thoughtSegmenter.finalize());\n\n const mergedToolCalls = toolAccumulator.getToolCalls();\n assertToolCallsHaveValidJsonArguments(mergedToolCalls);\n if (mergedToolCalls.length > 0 || reasoningDetails.length > 0 || capturedUsage !== undefined) {\n return {\n content: fullResponse,\n tool_calls: mergedToolCalls,\n reasoning_details: reasoningDetails.length > 0 ? reasoningDetails : undefined,\n ...(capturedUsage !== undefined ? { usage: capturedUsage } : {}),\n };\n }\n\n return fullResponse;\n}\n","import { ErrorClassifier } from '../../shared/errorClassifier';\nimport type { LlmCallOptions } from './caller.types';\nimport type { RetryFallbackDeps } from './retry-fallback';\n\nexport function tryPolicyModelSwitch(\n deps: RetryFallbackDeps,\n activeModelId: string,\n excludedModelIds: Set<string>,\n error: Error,\n): string | null {\n const activeModelConfig = deps.modelCatalog.getModelById(activeModelId);\n const policyDecision = deps.policyEngine.decideOnError(error, {\n modelId: activeModelId,\n apiBase: activeModelConfig?.api_base,\n requestModelName: activeModelConfig?.model_name,\n });\n if (policyDecision.action !== 'switch_model') {\n return null;\n }\n\n const fallbackModelId = deps.modelResolver.pickFallbackChatModel(excludedModelIds);\n if (!fallbackModelId) {\n console.warn('[LlmCaller] 🧭 Policy要求切换模型,但未找到可用备用模型(可能未配置 API Key)');\n return null;\n }\n\n console.warn(`[LlmCaller] 🧭 Policy(${policyDecision.reason}),切换模型继续: ${activeModelId} -> ${fallbackModelId}`);\n return fallbackModelId;\n}\n\nexport function tryCloudQuotaFallback({\n deps,\n activeModelId,\n options,\n excludedModelIds,\n error,\n onCloudQuotaFallbackApplied,\n}: {\n deps: RetryFallbackDeps;\n activeModelId: string;\n options: LlmCallOptions;\n excludedModelIds: Set<string>;\n error: Error;\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void;\n}): string | null {\n const fallbackModelId = options.cloud_quota_fallback_model_id;\n if (\n !fallbackModelId ||\n !ErrorClassifier.isCloudQuotaError(error) ||\n excludedModelIds.has(fallbackModelId)\n ) {\n return null;\n }\n\n const fallbackConfig = deps.modelCatalog.getModelById(fallbackModelId);\n if (!fallbackConfig?.api_key) {\n console.warn(`[LlmCaller] ☁️ 云端限额降级目标不可用: ${fallbackModelId}(未注册或缺少 API Key)`);\n return null;\n }\n\n console.warn(`[LlmCaller] ☁️ 云端限额降级(run 内续跑): ${activeModelId} -> ${fallbackModelId}`, {\n reason: error.message,\n });\n onCloudQuotaFallbackApplied?.(fallbackModelId);\n return fallbackModelId;\n}\n","import type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, ToolCall } from './caller.types';\nimport { isRecord, toToolCalls } from './sidecar-replay';\n\nexport type LlmCallResult =\n | string\n | {\n content: string;\n tool_calls?: ToolCall[];\n reasoning_details?: unknown[];\n usage?: unknown;\n };\n\nexport async function callPlainCompletion(\n aiEngine: AgentAiEngine,\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n signal?: AbortSignal,\n): Promise<LlmCallResult> {\n const response = await aiEngine.chatCompletion(modelId, messages, { ...options, signal });\n return normalizeCompletionResponse(response);\n}\n\nexport function normalizeCompletionResponse(response: unknown): LlmCallResult {\n if (!response) {\n return String(response);\n }\n\n if (isRecord(response)) {\n const usage = response['usage'];\n const parsedToolCalls = toToolCalls(response['tool_calls']);\n if (parsedToolCalls) {\n const reasoningDetails = Array.isArray(response['reasoning_details'])\n ? response['reasoning_details']\n : undefined;\n return {\n content: typeof response['content'] === 'string' ? response['content'] : '',\n tool_calls: parsedToolCalls,\n reasoning_details: reasoningDetails,\n ...(usage !== undefined ? { usage } : {}),\n };\n }\n }\n\n if (typeof response === 'string') {\n return response;\n }\n\n if (typeof response === 'object') {\n if (isRecord(response) && (response['content'] !== undefined || response['reasoning_details'] !== undefined)) {\n const usage = response['usage'];\n return {\n content: typeof response['content'] === 'string' ? response['content'] : '',\n reasoning_details: Array.isArray(response['reasoning_details'])\n ? response['reasoning_details']\n : undefined,\n ...(usage !== undefined ? { usage } : {}),\n };\n }\n\n if (isRecord(response)) {\n const contentValue = response['content'];\n if (typeof contentValue === 'string') return contentValue;\n const textValue = response['text'];\n if (typeof textValue === 'string') return textValue;\n }\n\n return JSON.stringify(response);\n }\n\n return String(response);\n}\n\nexport function getLlmResultContent(result: LlmCallResult): string {\n return typeof result === 'object' ? result.content : result;\n}\n\nexport function getLlmResultToolCalls(result: LlmCallResult): ToolCall[] | undefined {\n return typeof result === 'object' ? result.tool_calls : undefined;\n}\n","import type { AnyAgentEvent, ErrorEvent as AgentErrorEvent } from '../events/agentEvents';\nimport { generateMessageId } from '../../shared/ids';\nimport { ErrorClassifier, ErrorCategory } from '../../shared/errorClassifier';\nimport type { AgentAiEngine } from '../../ports';\nimport type { LlmCallOptions, LlmRequestMessage, LlmRetryConfig } from './caller.types';\nimport type { LLMPolicyErrorDecision, LLMPolicyMatchContext } from './policies/types';\nimport type { ModelCatalogLike } from './modelCatalog';\nimport type { ModelResolverLike } from './modelResolver';\nimport { tryCloudQuotaFallback, tryPolicyModelSwitch } from './retry-fallback-routing';\nimport { callLlmStream } from './streaming-adapter';\nimport {\n callPlainCompletion,\n getLlmResultContent,\n getLlmResultToolCalls,\n type LlmCallResult,\n} from './usage-telemetry';\n\nexport interface RetryFallbackDeps {\n retryConfig: LlmRetryConfig;\n modelResolver: ModelResolverLike;\n modelCatalog: ModelCatalogLike;\n policyEngine: {\n decideOnError(error: Error, ctx: LLMPolicyMatchContext): LLMPolicyErrorDecision;\n };\n aiEngine: AgentAiEngine;\n}\n\nexport interface CallWithRetriesParams {\n deps: RetryFallbackDeps;\n modelId: string;\n messages: LlmRequestMessage[];\n options?: LlmCallOptions;\n eventHandler?: (event: AnyAgentEvent) => void;\n signal?: AbortSignal;\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void;\n onModelFallbackApplied?: (info: {\n fromModelId: string;\n toModelId: string;\n reason: string;\n policy: 'policy-switch' | 'cloud-quota';\n }) => void;\n}\n\nexport async function callWithRetryFallback(params: CallWithRetriesParams): Promise<LlmCallResult> {\n const {\n deps,\n modelId,\n messages,\n options = {},\n eventHandler,\n signal,\n onCloudQuotaFallbackApplied,\n onModelFallbackApplied,\n } = params;\n\n let lastError: Error | null = null;\n let actualAttempts = 0;\n let activeModelId = modelId;\n const excludedModelIds = new Set<string>([modelId]);\n const clientRetryEnabled = isClientRetryEnabledForModel(deps.modelCatalog, modelId, options);\n const configuredMaxRetries = deps.retryConfig.maxRetries;\n\n if (!clientRetryEnabled) {\n const activeCfg = deps.modelCatalog.getModelById(modelId);\n console.log('[LlmCaller] 🧾 默认禁用客户端重试(除非遇到本地纯网络错误)', {\n modelId,\n billing_mode: activeCfg?.billing_mode,\n reason: options.retry_policy === 'none' ? 'options.retry_policy=none' : 'model config (cloud billing or enable_client_retry=false)',\n });\n }\n\n for (let attempt = 0; attempt <= configuredMaxRetries; attempt++) {\n throwIfAborted(signal, '检测到取消信号,停止AI活动');\n\n const isRetry = attempt > 0;\n let pendingErrorEvent: AgentErrorEvent | null = null;\n const wrappedEventHandler = eventHandler\n ? createRetryAwareEventHandler(eventHandler, (evt) => {\n pendingErrorEvent = evt;\n }, attempt, () => activeModelId)\n : undefined;\n\n try {\n if (isRetry) {\n console.log(`[LlmCaller] 🔄 LLM调用 - 第 ${attempt} 次重试 (最大配置 ${configuredMaxRetries} 次)`);\n }\n\n actualAttempts++;\n const llmResponse = wrappedEventHandler\n ? await callLlmStream({\n aiEngine: deps.aiEngine,\n modelId: activeModelId,\n messages,\n options,\n eventHandler: wrappedEventHandler,\n signal,\n })\n : await callPlainCompletion(deps.aiEngine, activeModelId, messages, options, signal);\n\n const responseContent = getLlmResultContent(llmResponse);\n const toolCallsFromLLM = getLlmResultToolCalls(llmResponse);\n if (deps.retryConfig.enableEmptyResponseRetry && !responseContent?.trim() && !toolCallsFromLLM?.length) {\n throw new Error('LLM返回了空响应');\n }\n\n console.log(`[LlmCaller] ✅ LLM调用成功 (尝试 ${actualAttempts} 次)`);\n return llmResponse;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n const classification = ErrorClassifier.classify(lastError, { logPrefix: '[LlmCaller]' });\n let currentMaxRetries = clientRetryEnabled ? configuredMaxRetries : 0;\n\n if (!clientRetryEnabled && classification.category === ErrorCategory.RETRYABLE) {\n if (\n classification.reason.startsWith('网络错误') ||\n classification.reason === '空响应错误' ||\n classification.reason === '模型输出损坏: invalid tool_call.arguments'\n ) {\n console.log(`[LlmCaller] 🛟 云端模型检测到必须本地兜底的错误 (${classification.reason}),破例允许客户端重试`);\n currentMaxRetries = configuredMaxRetries;\n }\n }\n\n console.error(`[LlmCaller] ❌ LLM调用失败 (尝试 ${attempt + 1}/${currentMaxRetries + 1}):`, lastError.message);\n\n if (lastError.name === 'AbortError') {\n console.log('[LlmCaller] 🛑 收到 AbortError,直接向上抛出,不进入错误事件与重试流程');\n throw lastError;\n }\n\n const policySwitchModelId = tryPolicyModelSwitch(deps, activeModelId, excludedModelIds, lastError);\n if (policySwitchModelId) {\n onModelFallbackApplied?.({\n fromModelId: activeModelId,\n toModelId: policySwitchModelId,\n reason: lastError.message,\n policy: 'policy-switch',\n });\n activeModelId = policySwitchModelId;\n excludedModelIds.add(policySwitchModelId);\n attempt -= 1;\n continue;\n }\n\n const quotaFallbackModelId = tryCloudQuotaFallback({\n deps,\n activeModelId,\n options,\n excludedModelIds,\n error: lastError,\n onCloudQuotaFallbackApplied,\n });\n if (quotaFallbackModelId) {\n onModelFallbackApplied?.({\n fromModelId: activeModelId,\n toModelId: quotaFallbackModelId,\n reason: lastError.message,\n policy: 'cloud-quota',\n });\n activeModelId = quotaFallbackModelId;\n excludedModelIds.add(quotaFallbackModelId);\n attempt -= 1;\n continue;\n }\n\n if (classification.category === ErrorCategory.NON_RETRYABLE) {\n console.error(`[LlmCaller] 💥 错误不可重试,直接失败: ${classification.reason}`);\n emitFinalError(eventHandler, pendingErrorEvent, lastError);\n throw lastError;\n }\n\n if (attempt >= currentMaxRetries) {\n console.error(`[LlmCaller] 💥 已达到最大重试次数 (${currentMaxRetries}),放弃重试`);\n emitFinalError(eventHandler, pendingErrorEvent, lastError);\n throw lastError;\n }\n\n const retryDelay = ErrorClassifier.calculateRetryDelay(\n lastError,\n attempt,\n deps.retryConfig.retryDelayMs,\n 60000,\n );\n if (classification.category === ErrorCategory.RATE_LIMIT) {\n console.log(`[LlmCaller] ⏱️ 速率限制错误,延迟 ${retryDelay}ms 后重试 (${classification.reason})`);\n } else if (classification.category === ErrorCategory.RETRYABLE) {\n console.log(`[LlmCaller] 🔄 可重试错误,延迟 ${retryDelay}ms 后重试 (${classification.reason})`);\n }\n\n throwIfAborted(signal, '延迟等待前检测到取消信号,停止重试');\n if (retryDelay > 0) {\n await new Promise(resolve => setTimeout(resolve, retryDelay));\n }\n }\n }\n\n throw lastError || new Error('LLM调用在所有重试后都失败了');\n}\n\nfunction isClientRetryEnabledForModel(\n modelCatalog: ModelCatalogLike,\n modelId: string,\n options: LlmCallOptions,\n): boolean {\n if (options.retry_policy === 'none') return false;\n if (options.retry_policy === 'client') return true;\n\n const cfg = modelCatalog.getModelById(modelId);\n if (!cfg) return true;\n if (cfg.billing_mode === 'cloud') {\n return cfg.enable_client_retry === true;\n }\n if (cfg.enable_client_retry === false) return false;\n return true;\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined, message: string): void {\n if (!signal?.aborted) return;\n console.log(`[LlmCaller] 🛑 ${message}`);\n const cancelError = new Error('Request cancelled by user');\n cancelError.name = 'AbortError';\n throw cancelError;\n}\n\nfunction createRetryAwareEventHandler(\n eventHandler: (event: AnyAgentEvent) => void,\n setPendingErrorEvent: (event: AgentErrorEvent) => void,\n attempt: number,\n getActiveModelId: () => string,\n): (event: AnyAgentEvent) => void {\n return (evt: AnyAgentEvent) => {\n if (evt && typeof evt === 'object' && evt.type === 'error') {\n setPendingErrorEvent(evt);\n if (process.env.NODE_ENV !== 'production') {\n const rec = evt as { id?: unknown; error?: unknown; timestamp?: unknown };\n console.warn('[LlmCaller][callWithRetries] captured pending error event (will only forward if final failure)', {\n attempt,\n modelId: getActiveModelId(),\n eventId: typeof rec.id === 'string' ? rec.id : undefined,\n error: typeof rec.error === 'string' ? rec.error : undefined,\n timestamp: typeof rec.timestamp === 'number' ? rec.timestamp : undefined,\n });\n }\n return;\n }\n eventHandler(evt);\n };\n}\n\nfunction emitFinalError(\n eventHandler: ((event: AnyAgentEvent) => void) | undefined,\n pendingErrorEvent: AgentErrorEvent | null,\n error: Error,\n): void {\n if (!eventHandler) return;\n eventHandler(pendingErrorEvent ?? {\n type: 'error',\n id: generateMessageId(),\n timestamp: Date.now(),\n error: error.message,\n details: error.stack,\n });\n}\n","/**\n * @file src/agent/runtime-kernel/llm/caller.ts\n *\n * @brief LLM 调用器 - 统一管理 LLM 调用、流式适配与重试编排\n *\n * @description\n * 这个文件只保留 orchestrator 职责:\n * - 构造依赖;\n * - 暴露 call / callStream / callWithRetries 公共方法;\n * - 把具体实现委托给 request-builder / streaming-adapter / retry-fallback 等模块。\n */\n\nimport type { AnyAgentEvent } from '../events/agentEvents';\nimport type { LlmCallOptions, LlmRequestMessage, LlmRetryConfig, ToolCall } from './caller.types';\nimport { createEmptyModelCatalog, type ModelCatalogLike } from './modelCatalog';\nimport type { ModelResolverLike } from './modelResolver';\nimport {\n buildLlmCallerDeps,\n normalizeConstructorOptions,\n type LlmCallerOptions,\n type NormalizedLlmCallerDeps,\n} from './request-builder';\nimport { callLlmStream } from './streaming-adapter';\nimport { callWithRetryFallback } from './retry-fallback';\nimport { callPlainCompletion, type LlmCallResult } from './usage-telemetry';\n\nexport type { LlmCallOptions, LlmRequestMessage, LlmResponseContent, LlmRetryConfig, ToolCall } from './caller.types';\nexport type { LlmCallerOptions } from './request-builder';\n\n/**\n * LLM 调用器。\n *\n * 中文备注:\n * - 具体策略实现拆到同目录小模块,避免 caller.ts 再次膨胀;\n * - public method 签名保持原样,保护现有 host / testkit 调用方。\n */\nexport class LlmCaller {\n private readonly deps: NormalizedLlmCallerDeps & {\n modelCatalog: ModelCatalogLike;\n };\n private readonly modelResolver: ModelResolverLike;\n\n constructor(options?: Partial<LlmRetryConfig> | LlmCallerOptions) {\n const normalizedOptions = normalizeConstructorOptions(options);\n const modelCatalog = normalizedOptions.modelCatalog ?? createEmptyModelCatalog();\n const deps = buildLlmCallerDeps(normalizedOptions, modelCatalog);\n this.deps = {\n ...deps,\n modelCatalog,\n };\n this.modelResolver = deps.modelResolver;\n }\n\n /**\n * 非流式 LLM 调用。\n */\n async call(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n signal?: AbortSignal,\n ): Promise<LlmCallResult> {\n return callPlainCompletion(this.deps.aiEngine, modelId, messages, options, signal);\n }\n\n /**\n * 流式 LLM 调用。\n */\n async callStream(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n eventHandler: (event: AnyAgentEvent) => void,\n signal?: AbortSignal,\n ): Promise<LlmCallResult> {\n return callLlmStream({\n aiEngine: this.deps.aiEngine,\n modelId,\n messages,\n options,\n eventHandler,\n signal,\n });\n }\n\n /**\n * 带智能重试和模型降级的 LLM 调用。\n */\n async callWithRetries(\n modelId: string,\n messages: LlmRequestMessage[],\n options: LlmCallOptions = {},\n eventHandler?: (event: AnyAgentEvent) => void,\n signal?: AbortSignal,\n onCloudQuotaFallbackApplied?: (fallbackModelId: string) => void,\n onModelFallbackApplied?: (info: {\n fromModelId: string;\n toModelId: string;\n reason: string;\n policy: 'policy-switch' | 'cloud-quota';\n }) => void,\n ): Promise<LlmCallResult> {\n return callWithRetryFallback({\n deps: this.deps,\n modelId,\n messages,\n options,\n eventHandler,\n signal,\n onCloudQuotaFallbackApplied,\n onModelFallbackApplied,\n });\n }\n\n /**\n * 获取或使用默认模型 ID。\n */\n resolveModelId(requestedModelId?: string): string {\n return this.modelResolver.resolveModelId(requestedModelId);\n }\n}\n","export { MemoryRunRegistryStore } from './memoryRunRegistryStore';\nexport { DefaultRunHandle, runMetaFromRecord } from './runHandle';\nexport { DefaultRunSupervisor } from './runSupervisor';\nexport { NotImplementedError, RunAlreadyRegisteredError, RunNotFoundError } from './runErrors';\n\nexport type {\n ListRunsFilter,\n RunRecord,\n RunRegistryStore,\n RunStatus,\n} from './runRegistryStorePort';\nexport type {\n CancelOpts,\n DefaultRunHandleOptions,\n RunAwaitingUserPatch,\n RunCost,\n RunCostCollector,\n RunFailureInfo,\n RunHandle,\n RunLifecyclePatch,\n RunMeta,\n RunObserveFilter,\n RunRequestSnapshot,\n} from './runHandle';\nexport type {\n DefaultRunSupervisorOptions,\n FindActiveByConversationOptions,\n RunExecutionContext,\n RunExecutorPort,\n RunOutcome,\n RunRegistrationSpec,\n RunSnapshot,\n RunSupervisor,\n RunTerminalError,\n RunTerminalEvent,\n RunTerminalStatus,\n RunWaitForTerminalOptions,\n} from './runSupervisor';\n","import type { ListRunsFilter, RunRecord, RunRegistryStore, RunStatus } from './runRegistryStorePort';\n\nfunction cloneRunRecord(record: RunRecord): RunRecord {\n return {\n ...record,\n iterationBudget: record.iterationBudget ? { ...record.iterationBudget } : undefined,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: record.metadata ? { ...record.metadata } : undefined,\n };\n}\n\nfunction matchesStatus(candidate: RunStatus, filter: ListRunsFilter['status']): boolean {\n if (filter === undefined) {\n return true;\n }\n if (Array.isArray(filter)) {\n return filter.includes(candidate);\n }\n return candidate === filter;\n}\n\nexport class MemoryRunRegistryStore implements RunRegistryStore {\n private readonly store = new Map<string, RunRecord>();\n\n async save(record: RunRecord): Promise<void> {\n this.store.set(record.runId, cloneRunRecord(record));\n }\n\n async load(runId: string): Promise<RunRecord | null> {\n const record = this.store.get(runId);\n return record ? cloneRunRecord(record) : null;\n }\n\n async list(filter: ListRunsFilter = {}): Promise<{ runs: RunRecord[]; nextCursor?: string }> {\n const sorted = Array.from(this.store.values())\n .filter((record) => matchesStatus(record.status, filter.status))\n .filter((record) => (filter.parentRunId === undefined ? true : record.parentRunId === filter.parentRunId))\n .filter((record) => (filter.agentSpecId === undefined ? true : record.agentSpecId === filter.agentSpecId))\n .filter((record) => (filter.startedAfter === undefined ? true : record.startedAt > filter.startedAfter))\n .filter((record) => (filter.startedBefore === undefined ? true : record.startedAt < filter.startedBefore))\n .sort((left, right) => right.startedAt - left.startedAt || right.updatedAt - left.updatedAt);\n\n const offset = filter.cursor ? Number.parseInt(filter.cursor, 10) : 0;\n const page = filter.limit === undefined ? sorted.slice(offset) : sorted.slice(offset, offset + filter.limit);\n const nextOffset = filter.limit === undefined ? undefined : offset + page.length;\n const nextCursor =\n nextOffset !== undefined && nextOffset < sorted.length ? String(nextOffset) : undefined;\n\n return {\n runs: page.map(cloneRunRecord),\n nextCursor,\n };\n }\n\n async delete(runId: string): Promise<void> {\n this.store.delete(runId);\n }\n}\n","import { createAuditEnvelopeEvent } from '../../contracts';\nimport type { AuditEnvelope } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeEventId } from '../../shared/ids';\nimport type { EventStore } from '../graph-engine/event-store/base';\n\nexport interface EventStoreAuditOptions {\n eventStore: EventStore;\n}\n\nexport class AuditEnvelopePersistenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AuditEnvelopePersistenceError';\n }\n}\n\nfunction resolveConversationId(envelope: AuditEnvelope): string {\n const conversationId = envelope.scope?.conversationId;\n if (typeof conversationId === 'string' && conversationId.trim().length > 0) {\n return conversationId;\n }\n throw new AuditEnvelopePersistenceError(\n `AuditEnvelope ${envelope.envelopeId} cannot be persisted without scope.conversationId`,\n );\n}\n\nfunction resolveTurnId(envelope: AuditEnvelope): string {\n const turnId = envelope.scope?.turnId;\n if (typeof turnId === 'string' && turnId.trim().length > 0) {\n return turnId;\n }\n return envelope.runId;\n}\n\n/**\n * 默认 EventStore 审计 sink。\n *\n * 中文备注:\n * - 写入隐藏 RuntimeEvent:type=audit_envelope;\n * - 事件不进 UI、不进 agent context,只作为追加只读审计事实保留;\n * - conversationId 必须来自 envelope.scope,避免把跨会话审计混进同一条流。\n */\nexport class EventStoreAuditPort implements AuditPort {\n private readonly eventStore: EventStore;\n\n constructor(options: EventStoreAuditOptions) {\n this.eventStore = options.eventStore;\n }\n\n async emit(envelope: AuditEnvelope): Promise<void> {\n const conversationId = resolveConversationId(envelope);\n const turnId = resolveTurnId(envelope);\n const event = createAuditEnvelopeEvent(\n generateAuditEnvelopeEventId(),\n conversationId,\n turnId,\n envelope,\n );\n\n await this.eventStore.append(conversationId, {\n eventId: event.id,\n timestamp: event.timestamp,\n conversationId,\n runId: envelope.runId,\n event,\n });\n }\n}\n\nexport function createEventStoreAudit(options: EventStoreAuditOptions): AuditPort {\n return new EventStoreAuditPort(options);\n}\n","export class NotImplementedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotImplementedError';\n }\n}\n\nexport class RunNotFoundError extends Error {\n constructor(runId: string) {\n super(`Run not found: ${runId}`);\n this.name = 'RunNotFoundError';\n }\n}\n\nexport class RunAlreadyRegisteredError extends Error {\n readonly runId: string;\n\n constructor(runId: string) {\n super(`RunSupervisor: run ${runId} is already registered`);\n this.name = 'RunAlreadyRegisteredError';\n this.runId = runId;\n }\n}\n","import { AgentSpec as AgentSpecSchema } from '../../contracts';\nimport type { AgentSpec, EventEnvelope, RuntimeEvent } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateAuditEnvelopeId } from '../../shared/ids';\nimport type { EventBus } from '../execution/event-bus';\nimport type { EventStore, PersistedEvent } from '../graph-engine/event-store/base';\nimport { createEventStoreAudit } from '../audit/eventStoreAudit';\nimport { NotImplementedError } from './runErrors';\nimport type { RunRecord, RunRegistryStore, RunStatus } from './runRegistryStorePort';\n\nexport type RunRequestSnapshot = Readonly<object>;\n\nexport interface CancelOpts {\n reason: string;\n forceCleanup?: boolean;\n timeout?: number;\n}\n\nexport interface RunCost {\n tokensInput: number;\n tokensOutput: number;\n totalCostUsd?: number;\n latencyMs?: number;\n childrenTotal?: RunCost;\n}\n\nexport interface RunCostCollector {\n snapshot(runId: string): RunCost | Promise<RunCost>;\n}\n\nexport interface RunLifecyclePatch {\n currentNode?: string;\n iterationsUsed?: number;\n}\n\nexport interface RunAwaitingUserPatch extends RunLifecyclePatch {\n reason?: string;\n eventId?: string;\n}\n\nexport interface RunFailureInfo {\n errorCode: string;\n message: string;\n recoverable: boolean;\n}\n\nexport interface RunMeta {\n runId: string;\n parentRunId?: string;\n agentSpecId?: string;\n conversationId: string;\n status: RunStatus;\n currentNode?: string;\n startedAt: number;\n updatedAt: number;\n pausedAt?: number;\n pauseReason?: string;\n iterationsUsed?: number;\n errorIfAny?: { errorCode: string; message: string; recoverable: boolean };\n}\n\nexport interface RunObserveFilter {\n /** RuntimeEvent 使用 type 作为主判别字段;保留 kinds 只是为了贴近 N-3 草案措辞。 */\n types?: RuntimeEvent['type'][];\n kinds?: RuntimeEvent['type'][];\n includePersisted?: boolean;\n}\n\nexport interface RunHandle<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n readonly runId: string;\n readonly parentRunId?: string;\n readonly signal: AbortSignal;\n spec(): Promise<AgentSpec>;\n request(): Promise<TRequest>;\n cancel(opts: CancelOpts): Promise<void>;\n observe(filter?: RunObserveFilter): AsyncIterable<RuntimeEvent>;\n cost(): Promise<RunCost>;\n meta(): Promise<RunMeta>;\n markRunning(patch?: RunLifecyclePatch): Promise<void>;\n markAwaitingUser(patch?: RunAwaitingUserPatch): Promise<void>;\n markCompleted(patch?: RunLifecyclePatch): Promise<void>;\n markFailed(error: RunFailureInfo, patch?: RunLifecyclePatch): Promise<void>;\n pause(reason?: string): Promise<never>;\n resume(): Promise<never>;\n}\n\nexport interface DefaultRunHandleOptions<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runRecord: RunRecord;\n abortController: AbortController;\n agentSpec: AgentSpec;\n request: TRequest;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n registryStore: RunRegistryStore;\n auditPort?: AuditPort;\n onCancelled?: (runId: string, opts: CancelOpts) => void;\n}\n\ntype EventQueueState = {\n queue: RuntimeEvent[];\n closed: boolean;\n error: Error | null;\n wake: (() => void) | null;\n};\n\nfunction cloneRequest<TRequest extends RunRequestSnapshot>(request: TRequest): TRequest {\n return structuredClone(request);\n}\n\nfunction cloneRuntimeEvent(event: RuntimeEvent): RuntimeEvent {\n return structuredClone(event);\n}\n\nfunction runRecordToMeta(record: RunRecord): RunMeta {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readStringField(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction getRunIdFromMetadata(event: RuntimeEvent): string | undefined {\n const metadata = event.metadata;\n if (!metadata) {\n return undefined;\n }\n\n const camelCaseRunId = readStringField(metadata, 'runId');\n if (camelCaseRunId) {\n return camelCaseRunId;\n }\n\n const snakeCaseRunId = readStringField(metadata, 'run_id');\n if (snakeCaseRunId) {\n return snakeCaseRunId;\n }\n\n // 有些 host 会把 run id 写进 metadata.run_context.runId;persisted replay 必须识别这个真实形状。\n const runContext = metadata['run_context'];\n if (isRecord(runContext)) {\n return readStringField(runContext, 'runId') ?? readStringField(runContext, 'run_id');\n }\n\n return undefined;\n}\n\nfunction matchesPersistedRunId(runId: string, event: PersistedEvent): boolean {\n return event.runId === runId || getRunIdFromMetadata(event.event) === runId;\n}\n\nfunction matchesEventType(event: RuntimeEvent, filter?: RunObserveFilter): boolean {\n const selectedTypes = filter?.types ?? filter?.kinds;\n return selectedTypes === undefined || selectedTypes.includes(event.type);\n}\n\nasync function waitForEventQueue(state: EventQueueState): Promise<void> {\n await new Promise<void>((resolve) => {\n state.wake = resolve;\n });\n state.wake = null;\n}\n\n/**\n * RunHandle 的默认实现只编织现有机制:\n * - cancel 只触发 AbortController,不改 GraphExecutor;\n * - observe 只包装 EventBus/EventStore;\n * - cost 只读取外部注入的 CostCollector。\n */\nexport class DefaultRunHandle<TRequest extends RunRequestSnapshot = RunRequestSnapshot>\n implements RunHandle<TRequest>\n{\n readonly runId: string;\n readonly parentRunId?: string;\n readonly signal: AbortSignal;\n\n private runRecord: RunRecord;\n private readonly abortController: AbortController;\n private readonly agentSpecSnapshot: AgentSpec;\n private readonly requestSnapshot: TRequest;\n private readonly eventBus: EventBus;\n private readonly eventStore: EventStore;\n private readonly costCollector: RunCostCollector;\n private readonly registryStore: RunRegistryStore;\n private readonly auditPort: AuditPort;\n private readonly onCancelled?: (runId: string, opts: CancelOpts) => void;\n\n constructor(options: DefaultRunHandleOptions<TRequest>) {\n this.runRecord = { ...options.runRecord };\n this.runId = options.runRecord.runId;\n this.parentRunId = options.runRecord.parentRunId;\n this.abortController = options.abortController;\n this.signal = options.abortController.signal;\n this.agentSpecSnapshot = AgentSpecSchema.parse(structuredClone(options.agentSpec));\n this.requestSnapshot = cloneRequest(options.request);\n this.eventBus = options.eventBus;\n this.eventStore = options.eventStore;\n this.costCollector = options.costCollector;\n this.registryStore = options.registryStore;\n this.auditPort = options.auditPort ?? createEventStoreAudit({ eventStore: options.eventStore });\n this.onCancelled = options.onCancelled;\n }\n\n async spec(): Promise<AgentSpec> {\n return AgentSpecSchema.parse(structuredClone(this.agentSpecSnapshot));\n }\n\n async request(): Promise<TRequest> {\n return cloneRequest(this.requestSnapshot);\n }\n\n async cancel(opts: CancelOpts): Promise<void> {\n this.abortController.abort(opts.reason);\n\n const latestRecord = await this.registryStore.load(this.runId);\n const nextRecord: RunRecord = {\n ...(latestRecord ?? this.runRecord),\n status: 'cancelled',\n updatedAt: Date.now(),\n errorIfAny: {\n errorCode: 'RUN_CANCELLED',\n message: opts.reason,\n recoverable: false,\n },\n metadata: {\n ...((latestRecord ?? this.runRecord).metadata ?? {}),\n cancel: {\n reason: opts.reason,\n forceCleanup: opts.forceCleanup ?? false,\n timeout: opts.timeout,\n },\n },\n };\n\n await this.registryStore.save(nextRecord);\n this.runRecord = { ...nextRecord };\n await this.auditPort.emit({\n envelopeId: generateAuditEnvelopeId(),\n runId: this.runId,\n parentRunId: this.parentRunId,\n ts: Date.now(),\n actor: { kind: 'host' },\n action: 'run.cancel',\n decision: {\n outcome: 'cancelled',\n reason: opts.reason,\n metadata: {\n forceCleanup: opts.forceCleanup ?? false,\n ...(opts.timeout === undefined ? {} : { timeout: opts.timeout }),\n },\n },\n evidence: [\n {\n kind: 'cancel_request',\n summary: opts.reason,\n },\n ],\n scope: {\n conversationId: nextRecord.conversationId,\n runId: this.runId,\n parentRunId: this.parentRunId,\n agentSpecId: nextRecord.agentSpecId,\n },\n });\n this.onCancelled?.(this.runId, opts);\n }\n\n async *observe(filter: RunObserveFilter = {}): AsyncIterable<RuntimeEvent> {\n if (filter.includePersisted) {\n const persistedEvents = await this.eventStore.range(this.runRecord.conversationId);\n for (const persistedEvent of persistedEvents) {\n if (matchesPersistedRunId(this.runId, persistedEvent) && matchesEventType(persistedEvent.event, filter)) {\n yield cloneRuntimeEvent(persistedEvent.event);\n }\n }\n }\n\n const state: EventQueueState = {\n queue: [],\n closed: false,\n error: null,\n wake: null,\n };\n\n const wake = (): void => {\n state.wake?.();\n };\n const onEvent = (envelope: EventEnvelope<RuntimeEvent>): void => {\n if (matchesEventType(envelope.payload, filter)) {\n state.queue.push(cloneRuntimeEvent(envelope.payload));\n wake();\n }\n };\n const onError = (error: Error): void => {\n state.error = error;\n wake();\n };\n const onClose = (): void => {\n state.closed = true;\n wake();\n };\n\n this.eventBus.on('event', onEvent);\n this.eventBus.on('error', onError);\n this.eventBus.on('close', onClose);\n\n try {\n while (!state.closed || state.queue.length > 0) {\n if (state.error) {\n throw state.error;\n }\n const nextEvent = state.queue.shift();\n if (nextEvent) {\n yield nextEvent;\n continue;\n }\n await waitForEventQueue(state);\n }\n } finally {\n this.eventBus.off('event', onEvent);\n this.eventBus.off('error', onError);\n this.eventBus.off('close', onClose);\n }\n }\n\n async cost(): Promise<RunCost> {\n return this.costCollector.snapshot(this.runId);\n }\n\n async meta(): Promise<RunMeta> {\n const latestRecord = await this.registryStore.load(this.runId);\n if (latestRecord) {\n this.runRecord = { ...latestRecord };\n }\n return runRecordToMeta(latestRecord ?? this.runRecord);\n }\n\n async markRunning(patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('running', patch);\n }\n\n async markAwaitingUser(patch: RunAwaitingUserPatch = {}): Promise<void> {\n await this.saveLifecycleStatus('awaiting_user', patch);\n }\n\n async markCompleted(patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('completed', patch);\n }\n\n async markFailed(error: RunFailureInfo, patch: RunLifecyclePatch = {}): Promise<void> {\n await this.saveLifecycleStatus('failed', patch, error);\n }\n\n async pause(_reason?: string): Promise<never> {\n throw new NotImplementedError('RunHandle.pause is N-3.B; not implemented in N-3.A');\n }\n\n async resume(): Promise<never> {\n throw new NotImplementedError('RunHandle.resume is N-3.B; not implemented in N-3.A');\n }\n\n private async saveLifecycleStatus(\n status: Extract<RunStatus, 'running' | 'awaiting_user' | 'completed' | 'failed'>,\n patch: RunLifecyclePatch | RunAwaitingUserPatch,\n errorIfAny?: RunFailureInfo,\n ): Promise<void> {\n const latestRecord = await this.registryStore.load(this.runId);\n const baseRecord = latestRecord ?? this.runRecord;\n const awaitingUserPatch = status === 'awaiting_user' ? patch as RunAwaitingUserPatch : undefined;\n const updatedAt = Date.now();\n const nextRecord: RunRecord = {\n ...baseRecord,\n status,\n updatedAt,\n currentNode: patch.currentNode ?? baseRecord.currentNode,\n iterationsUsed: patch.iterationsUsed ?? baseRecord.iterationsUsed,\n pauseReason: status === 'awaiting_user' ? awaitingUserPatch?.reason ?? baseRecord.pauseReason : undefined,\n pausedAt: status === 'awaiting_user' ? updatedAt : undefined,\n errorIfAny,\n metadata: awaitingUserPatch?.eventId\n ? {\n ...(baseRecord.metadata ?? {}),\n awaitingUser: {\n eventId: awaitingUserPatch.eventId,\n reason: awaitingUserPatch.reason,\n },\n }\n : baseRecord.metadata,\n };\n\n await this.registryStore.save(nextRecord);\n this.runRecord = { ...nextRecord };\n }\n}\n\nexport function runMetaFromRecord(record: RunRecord): RunMeta {\n return runRecordToMeta(record);\n}\n","import type { AgentSpec, EventEnvelope, RuntimeEvent } from '../../contracts';\nimport type { AuditPort } from '../../ports';\nimport { generateRunId } from '../../shared/ids';\nimport type { EventBus } from '../execution/event-bus';\nimport type { EventStore } from '../graph-engine/event-store/base';\nimport { DefaultRunHandle } from './runHandle';\nimport type {\n CancelOpts,\n RunAwaitingUserPatch,\n RunCostCollector,\n RunHandle,\n RunMeta,\n RunObserveFilter,\n RunRequestSnapshot,\n} from './runHandle';\nimport { NotImplementedError, RunAlreadyRegisteredError, RunNotFoundError } from './runErrors';\nimport type { ListRunsFilter, RunRecord, RunRegistryStore } from './runRegistryStorePort';\n\nexport type RunTerminalStatus = Extract<RunRecord['status'], 'completed' | 'failed' | 'cancelled'>;\n\nexport type RunTerminalError = {\n errorCode: string;\n message: string;\n recoverable: boolean;\n};\n\nexport interface RunOutcome {\n runId: string;\n status: RunTerminalStatus;\n completedAt: number;\n currentNode?: string;\n iterationsUsed?: number;\n error?: RunTerminalError;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunSnapshot extends RunMeta {\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunTerminalEvent {\n runId: string;\n status: RunTerminalStatus;\n outcome: RunOutcome;\n}\n\nexport interface RunWaitForTerminalOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface FindActiveByConversationOptions {\n includeChildren?: boolean;\n agentSpecId?: string;\n}\n\nexport interface RunExecutionContext<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runId: string;\n parentRunId?: string;\n conversationId: string;\n agentSpec: AgentSpec;\n request: TRequest;\n signal: AbortSignal;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n query?: string;\n contextFences?: readonly unknown[];\n wakeSource?: string;\n ephemeral?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunExecutorPort<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n execute(context: RunExecutionContext<TRequest>): Promise<RunOutcome | void>;\n}\n\nexport interface RunRegistrationSpec<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n runId?: string;\n parentRunId?: string;\n parentSignal?: AbortSignal;\n conversationId: string;\n agentSpec: AgentSpec;\n request: TRequest;\n eventBus: EventBus;\n eventStore: EventStore;\n costCollector: RunCostCollector;\n iterationBudget?: RunRecord['iterationBudget'];\n query?: string;\n contextFences?: readonly unknown[];\n wakeSource?: string;\n ephemeral?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RunSupervisor<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n registerRun(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>>;\n spawnDetached(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>>;\n observeRun(runId: string, filter?: RunObserveFilter): AsyncIterable<RuntimeEvent>;\n cancel(runId: string, opts: CancelOpts): Promise<void>;\n markAwaitingUser(runId: string, patch?: RunAwaitingUserPatch): Promise<void>;\n list(filter?: ListRunsFilter): Promise<{ runs: RunMeta[]; nextCursor?: string }>;\n peek(runId: string): Promise<RunMeta | null>;\n waitForTerminal(runId: string, opts?: RunWaitForTerminalOptions): Promise<RunOutcome>;\n findActiveByConversation(\n conversationId: string,\n opts?: FindActiveByConversationOptions,\n ): Promise<RunSnapshot[]>;\n drain(opts?: RunWaitForTerminalOptions): Promise<RunOutcome[]>;\n recoverOnBoot(reason?: string): Promise<RunOutcome[]>;\n pause(runId: string, reason?: string): Promise<never>;\n resume(runId: string): Promise<never>;\n runTree(rootRunId: string): Promise<never>;\n handleFailure(runId: string, error: unknown): Promise<never>;\n}\n\nexport interface DefaultRunSupervisorOptions<TRequest extends RunRequestSnapshot = RunRequestSnapshot> {\n registryStore: RunRegistryStore;\n auditPort?: AuditPort;\n executor?: RunExecutorPort<TRequest>;\n runIdFactory?: () => string;\n now?: () => number;\n}\n\ntype TerminalWaiter = {\n resolve: (outcome: RunOutcome) => void;\n reject: (error: Error) => void;\n cleanup: () => void;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readStringField(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction readRunIdFromRuntimeEvent(event: RuntimeEvent): string | undefined {\n const metadata = event.metadata;\n if (!metadata) {\n return undefined;\n }\n\n const directRunId = readStringField(metadata, 'runId') ?? readStringField(metadata, 'run_id');\n if (directRunId) {\n return directRunId;\n }\n\n const runContext = metadata['run_context'];\n if (!isRecord(runContext)) {\n return undefined;\n }\n\n return readStringField(runContext, 'runId') ?? readStringField(runContext, 'run_id');\n}\n\nfunction readAwaitingUserReason(event: RuntimeEvent): string | undefined {\n if (event.type !== 'requires_user_interaction') {\n return undefined;\n }\n\n if (typeof event.prompt === 'string' && event.prompt.trim().length > 0) {\n return event.prompt;\n }\n\n if (isRecord(event.form)) {\n const prompt = readStringField(event.form, 'prompt');\n if (prompt && prompt.trim().length > 0) {\n return prompt;\n }\n }\n\n return undefined;\n}\n\nfunction isTerminalStatus(status: RunRecord['status']): status is RunTerminalStatus {\n return status === 'completed' || status === 'failed' || status === 'cancelled';\n}\n\nfunction isActiveStatus(status: RunRecord['status']): boolean {\n return status === 'pending' || status === 'running' || status === 'awaiting_user' || status === 'paused';\n}\n\nfunction cloneMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined {\n return metadata ? { ...metadata } : undefined;\n}\n\nfunction recordToSnapshot(record: RunRecord): RunSnapshot {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: cloneMetadata(record.metadata),\n };\n}\n\nfunction recordToTerminalOutcome(record: RunRecord, completedAt: number): RunOutcome {\n return {\n runId: record.runId,\n status: isTerminalStatus(record.status) ? record.status : 'failed',\n completedAt,\n currentNode: record.currentNode,\n iterationsUsed: record.iterationsUsed,\n error: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n metadata: cloneMetadata(record.metadata),\n };\n}\n\nfunction errorToTerminalError(error: unknown): RunTerminalError {\n if (error instanceof Error) {\n return {\n errorCode: error.name === 'AbortError' ? 'RUN_CANCELLED' : 'RUN_FAILED',\n message: error.message,\n recoverable: false,\n };\n }\n return {\n errorCode: 'RUN_FAILED',\n message: String(error),\n recoverable: false,\n };\n}\n\nexport class DefaultRunSupervisor<TRequest extends RunRequestSnapshot = RunRequestSnapshot>\n implements RunSupervisor<TRequest>\n{\n private readonly registryStore: RunRegistryStore;\n private readonly auditPort?: AuditPort;\n private readonly executor?: RunExecutorPort<TRequest>;\n private readonly runIdFactory: () => string;\n private readonly now: () => number;\n private readonly handles = new Map<string, RunHandle<TRequest>>();\n private readonly controllers = new Map<string, AbortController>();\n private readonly inFlight = new Map<string, Promise<RunOutcome>>();\n private readonly terminalOutcomes = new Map<string, RunOutcome>();\n private readonly terminalWaiters = new Map<string, Set<TerminalWaiter>>();\n\n constructor(options: DefaultRunSupervisorOptions<TRequest>) {\n this.registryStore = options.registryStore;\n this.auditPort = options.auditPort;\n this.executor = options.executor;\n this.runIdFactory = options.runIdFactory ?? generateRunId;\n this.now = options.now ?? (() => Date.now());\n }\n\n async registerRun(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>> {\n const runId = spec.runId ?? this.runIdFactory();\n if (this.handles.has(runId) || (await this.registryStore.load(runId))) {\n throw new RunAlreadyRegisteredError(runId);\n }\n\n const startedAt = this.now();\n const controller = new AbortController();\n if (spec.parentSignal) {\n if (spec.parentSignal.aborted) {\n controller.abort(spec.parentSignal.reason);\n } else {\n spec.parentSignal.addEventListener('abort', () => {\n controller.abort(spec.parentSignal?.reason);\n }, { once: true });\n }\n }\n\n const record: RunRecord = {\n runId,\n conversationId: spec.conversationId,\n parentRunId: spec.parentRunId,\n agentSpecId: spec.agentSpec.id,\n status: 'pending',\n startedAt,\n updatedAt: startedAt,\n iterationBudget: spec.iterationBudget ? { ...spec.iterationBudget } : undefined,\n metadata: spec.metadata ? { ...spec.metadata } : undefined,\n };\n\n await this.registryStore.save(record);\n\n const handle = new DefaultRunHandle<TRequest>({\n runRecord: record,\n abortController: controller,\n agentSpec: spec.agentSpec,\n request: spec.request,\n eventBus: spec.eventBus,\n eventStore: spec.eventStore,\n costCollector: spec.costCollector,\n registryStore: this.registryStore,\n auditPort: this.auditPort,\n onCancelled: (cancelledRunId) => {\n this.handles.delete(cancelledRunId);\n this.controllers.delete(cancelledRunId);\n void this.registryStore.load(cancelledRunId).then((cancelledRecord) => {\n if (cancelledRecord?.status === 'cancelled') {\n this.notifyTerminalWaiters(recordToTerminalOutcome(cancelledRecord, this.now()));\n }\n });\n },\n });\n\n this.handles.set(runId, handle);\n this.controllers.set(runId, controller);\n this.watchAwaitingUserEvents(spec.eventBus, handle);\n return handle;\n }\n\n async spawnDetached(spec: RunRegistrationSpec<TRequest>): Promise<RunHandle<TRequest>> {\n if (!this.executor) {\n throw new NotImplementedError('RunSupervisor.spawnDetached requires a RunExecutorPort');\n }\n\n const handle = await this.registerRun(spec);\n const execution = this.executeDetachedRun(handle, spec);\n this.inFlight.set(handle.runId, execution);\n void execution.finally(() => {\n this.inFlight.delete(handle.runId);\n });\n return handle;\n }\n\n async *observeRun(runId: string, filter?: RunObserveFilter): AsyncIterable<RuntimeEvent> {\n const handle = this.getHandle(runId);\n yield* handle.observe(filter);\n }\n\n async cancel(runId: string, opts: CancelOpts): Promise<void> {\n await this.getHandle(runId).cancel(opts);\n const record = await this.registryStore.load(runId);\n if (record?.status === 'cancelled') {\n this.notifyTerminalWaiters(recordToTerminalOutcome(record, this.now()));\n }\n }\n\n async markAwaitingUser(runId: string, patch: RunAwaitingUserPatch = {}): Promise<void> {\n await this.getHandle(runId).markAwaitingUser(patch);\n }\n\n async list(filter?: ListRunsFilter): Promise<{ runs: RunMeta[]; nextCursor?: string }> {\n const result = await this.registryStore.list(filter);\n return {\n runs: result.runs.map((record) => this.toRunMeta(record)),\n nextCursor: result.nextCursor,\n };\n }\n\n async peek(runId: string): Promise<RunMeta | null> {\n const record = await this.registryStore.load(runId);\n return record ? this.toRunMeta(record) : null;\n }\n\n async waitForTerminal(runId: string, opts: RunWaitForTerminalOptions = {}): Promise<RunOutcome> {\n const cachedOutcome = this.terminalOutcomes.get(runId);\n if (cachedOutcome) {\n return { ...cachedOutcome, metadata: cloneMetadata(cachedOutcome.metadata) };\n }\n\n const record = await this.registryStore.load(runId);\n if (!record) {\n throw new RunNotFoundError(runId);\n }\n if (isTerminalStatus(record.status)) {\n return recordToTerminalOutcome(record, this.now());\n }\n\n return new Promise<RunOutcome>((resolve, reject) => {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const waiters = this.getTerminalWaiters(runId);\n const waiter: TerminalWaiter = {\n resolve: (outcome) => {\n waiter.cleanup();\n resolve({ ...outcome, metadata: cloneMetadata(outcome.metadata) });\n },\n reject: (error) => {\n waiter.cleanup();\n reject(error);\n },\n cleanup: () => {\n waiters.delete(waiter);\n if (timeout) {\n clearTimeout(timeout);\n }\n opts.signal?.removeEventListener('abort', onAbort);\n },\n };\n const onAbort = (): void => {\n waiter.reject(new Error(`waitForTerminal aborted for run ${runId}`));\n };\n if (opts.signal?.aborted) {\n onAbort();\n return;\n }\n opts.signal?.addEventListener('abort', onAbort, { once: true });\n if (opts.timeoutMs !== undefined) {\n timeout = setTimeout(() => {\n waiter.reject(new Error(`waitForTerminal timed out for run ${runId}`));\n }, opts.timeoutMs);\n }\n waiters.add(waiter);\n });\n }\n\n async findActiveByConversation(\n conversationId: string,\n opts: FindActiveByConversationOptions = {},\n ): Promise<RunSnapshot[]> {\n const result = await this.registryStore.list({\n status: ['pending', 'running', 'awaiting_user', 'paused'],\n agentSpecId: opts.agentSpecId,\n });\n return result.runs\n .filter((record) => record.conversationId === conversationId)\n .filter((record) => opts.includeChildren === true || record.parentRunId === undefined)\n .map(recordToSnapshot);\n }\n\n async drain(opts: RunWaitForTerminalOptions = {}): Promise<RunOutcome[]> {\n const runIds = Array.from(this.inFlight.keys());\n return Promise.all(runIds.map((runId) => this.waitForTerminal(runId, opts)));\n }\n\n async recoverOnBoot(reason = 'process restarted before run reached terminal status'): Promise<RunOutcome[]> {\n const result = await this.registryStore.list({\n status: ['pending', 'running', 'awaiting_user', 'paused'],\n });\n const outcomes: RunOutcome[] = [];\n for (const record of result.runs) {\n const updatedAt = this.now();\n const nextRecord: RunRecord = {\n ...record,\n status: 'failed',\n updatedAt,\n errorIfAny: {\n errorCode: 'RUN_ABANDONED',\n message: reason,\n recoverable: true,\n },\n metadata: {\n ...(record.metadata ?? {}),\n recovery: {\n reason,\n recoveredAt: updatedAt,\n },\n },\n };\n await this.registryStore.save(nextRecord);\n const outcome = recordToTerminalOutcome(nextRecord, updatedAt);\n this.terminalOutcomes.set(record.runId, outcome);\n this.notifyTerminalWaiters(outcome);\n outcomes.push(outcome);\n }\n return outcomes;\n }\n\n async pause(_runId: string, _reason?: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.pause is N-3.B; not implemented in N-3.A');\n }\n\n async resume(_runId: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.resume is N-3.B; not implemented in N-3.A');\n }\n\n async runTree(_rootRunId: string): Promise<never> {\n throw new NotImplementedError('RunSupervisor.runTree is N-3.B; not implemented in N-3.A');\n }\n\n async handleFailure(_runId: string, _error: unknown): Promise<never> {\n throw new NotImplementedError('RunSupervisor.handleFailure is N-3.B; not implemented in N-3.A');\n }\n\n private async executeDetachedRun(\n handle: RunHandle<TRequest>,\n spec: RunRegistrationSpec<TRequest>,\n ): Promise<RunOutcome> {\n if (!this.executor) {\n throw new NotImplementedError('RunSupervisor.spawnDetached requires a RunExecutorPort');\n }\n\n try {\n await handle.markRunning({ currentNode: 'detached' });\n const executorOutcome = await this.executor.execute({\n runId: handle.runId,\n parentRunId: spec.parentRunId,\n conversationId: spec.conversationId,\n agentSpec: spec.agentSpec,\n request: spec.request,\n signal: handle.signal,\n eventBus: spec.eventBus,\n eventStore: spec.eventStore,\n costCollector: spec.costCollector,\n query: spec.query,\n contextFences: spec.contextFences,\n wakeSource: spec.wakeSource,\n ephemeral: spec.ephemeral,\n metadata: spec.metadata,\n });\n const outcome = await this.persistExecutorOutcome(handle, executorOutcome);\n this.notifyTerminalWaiters(outcome);\n return outcome;\n } catch (error) {\n const terminalError = errorToTerminalError(error);\n if (terminalError.errorCode === 'RUN_CANCELLED' || handle.signal.aborted) {\n await handle.cancel({\n reason: terminalError.message || 'detached run aborted',\n forceCleanup: true,\n });\n } else {\n await handle.markFailed(terminalError);\n }\n const record = await this.registryStore.load(handle.runId);\n const outcome = recordToTerminalOutcome(record ?? {\n runId: handle.runId,\n parentRunId: handle.parentRunId,\n conversationId: spec.conversationId,\n agentSpecId: spec.agentSpec.id,\n status: terminalError.errorCode === 'RUN_CANCELLED' ? 'cancelled' : 'failed',\n startedAt: this.now(),\n updatedAt: this.now(),\n errorIfAny: terminalError,\n }, this.now());\n this.terminalOutcomes.set(handle.runId, outcome);\n this.notifyTerminalWaiters(outcome);\n return outcome;\n }\n }\n\n private async persistExecutorOutcome(\n handle: RunHandle<TRequest>,\n executorOutcome: RunOutcome | void,\n ): Promise<RunOutcome> {\n if (!executorOutcome || executorOutcome.status === 'completed') {\n await handle.markCompleted({\n currentNode: executorOutcome?.currentNode,\n iterationsUsed: executorOutcome?.iterationsUsed,\n });\n } else if (executorOutcome.status === 'cancelled') {\n await handle.cancel({\n reason: executorOutcome.error?.message ?? 'detached run cancelled',\n forceCleanup: true,\n });\n } else {\n await handle.markFailed(executorOutcome.error ?? {\n errorCode: 'RUN_FAILED',\n message: 'detached run failed',\n recoverable: false,\n }, {\n currentNode: executorOutcome.currentNode,\n iterationsUsed: executorOutcome.iterationsUsed,\n });\n }\n\n const loadedRecord = await this.registryStore.load(handle.runId);\n const record = loadedRecord && executorOutcome?.metadata\n ? {\n ...loadedRecord,\n metadata: {\n ...(loadedRecord.metadata ?? {}),\n ...executorOutcome.metadata,\n },\n }\n : loadedRecord;\n if (record && executorOutcome?.metadata) {\n await this.registryStore.save(record);\n }\n const completedAt = executorOutcome?.completedAt ?? this.now();\n const outcome = recordToTerminalOutcome(record ?? {\n runId: handle.runId,\n parentRunId: handle.parentRunId,\n conversationId: '',\n status: executorOutcome?.status ?? 'completed',\n startedAt: completedAt,\n updatedAt: completedAt,\n }, completedAt);\n const nextOutcome: RunOutcome = {\n ...outcome,\n metadata: {\n ...(outcome.metadata ?? {}),\n ...(executorOutcome?.metadata ?? {}),\n },\n };\n this.terminalOutcomes.set(handle.runId, nextOutcome);\n return nextOutcome;\n }\n\n private getTerminalWaiters(runId: string): Set<TerminalWaiter> {\n const waiters = this.terminalWaiters.get(runId);\n if (waiters) {\n return waiters;\n }\n const created = new Set<TerminalWaiter>();\n this.terminalWaiters.set(runId, created);\n return created;\n }\n\n private notifyTerminalWaiters(outcome: RunOutcome): void {\n this.terminalOutcomes.set(outcome.runId, outcome);\n const waiters = this.terminalWaiters.get(outcome.runId);\n if (!waiters) {\n return;\n }\n for (const waiter of Array.from(waiters)) {\n waiter.resolve(outcome);\n }\n this.terminalWaiters.delete(outcome.runId);\n }\n\n private getHandle(runId: string): RunHandle<TRequest> {\n const handle = this.handles.get(runId);\n if (!handle) {\n throw new RunNotFoundError(runId);\n }\n return handle;\n }\n\n private watchAwaitingUserEvents(eventBus: EventBus, handle: RunHandle<TRequest>): void {\n const onEvent = (envelope: EventEnvelope<RuntimeEvent>): void => {\n const event = envelope.payload;\n if (event.type !== 'requires_user_interaction') {\n return;\n }\n\n const eventRunId = readRunIdFromRuntimeEvent(event);\n if (eventRunId !== handle.runId) {\n return;\n }\n\n // EventBus 是同步通知模型;生命周期写入异步执行,避免阻塞事件分发链路。\n void handle.markAwaitingUser({\n currentNode: 'wait_user',\n eventId: event.id,\n reason: readAwaitingUserReason(event),\n }).catch((error: unknown) => {\n console.warn('[RunSupervisor] failed to mark awaiting_user from requires_user_interaction', error);\n });\n };\n const onClose = (): void => {\n eventBus.off('event', onEvent);\n eventBus.off('close', onClose);\n };\n\n eventBus.on('event', onEvent);\n eventBus.on('close', onClose);\n }\n\n private toRunMeta(record: RunRecord): RunMeta {\n return {\n runId: record.runId,\n parentRunId: record.parentRunId,\n agentSpecId: record.agentSpecId,\n conversationId: record.conversationId,\n status: record.status,\n currentNode: record.currentNode,\n startedAt: record.startedAt,\n updatedAt: record.updatedAt,\n pausedAt: record.pausedAt,\n pauseReason: record.pauseReason,\n iterationsUsed: record.iterationsUsed,\n errorIfAny: record.errorIfAny ? { ...record.errorIfAny } : undefined,\n };\n }\n}\n","import type { AuditEnvelope } from '../../contracts';\nimport type { AuditPort } from '../../ports';\n\nexport interface ConsoleAuditOptions {\n sink?: Pick<Console, 'info'>;\n}\n\nexport function createConsoleAudit(options: ConsoleAuditOptions = {}): AuditPort {\n const sink = options.sink ?? console;\n return {\n emit(envelope: AuditEnvelope): void {\n sink.info('[linnkit:audit]', envelope);\n },\n };\n}\n\nexport const consoleAudit = createConsoleAudit();\n","import { GraphExecutor } from '../graph-engine/engine';\nimport { MemoryCheckpointer } from '../graph-engine/checkpointer/memoryCheckpointer';\nimport type { Checkpointer } from '../graph-engine/checkpointer/base';\nimport { AnswerNode } from '../graph-engine/nodes/answerNode';\nimport { ToolNode } from '../graph-engine/nodes/toolNode';\nimport { UserNode } from '../graph-engine/nodes/userNode';\nimport { WaitUserNode } from '../graph-engine/nodes/waitUserNode';\nimport type { GraphNode } from '../graph-engine/types';\nimport type { ObservationPreviewPort, ToolRuntimePort } from '../tools';\nimport type { AuditPort } from '../../ports';\nimport type { TelemetryPort } from '../telemetry/telemetryPort';\n\nexport interface DefaultGraphExecutorOptions {\n llmNode: GraphNode;\n toolRuntime: ToolRuntimePort;\n observationPreview: ObservationPreviewPort;\n maxSteps?: number;\n checkpointer?: Checkpointer;\n auditPort?: AuditPort;\n telemetryPort?: TelemetryPort;\n}\n\nexport function createDefaultGraphExecutor(\n options: DefaultGraphExecutorOptions,\n): GraphExecutor {\n const executor = new GraphExecutor(\n options.checkpointer ?? new MemoryCheckpointer(),\n { maxSteps: options.maxSteps ?? 8 },\n );\n executor.registerNode(new UserNode());\n executor.registerNode(options.llmNode);\n executor.registerNode(new ToolNode({\n toolRuntime: options.toolRuntime,\n observationPreview: options.observationPreview,\n auditPort: options.auditPort,\n telemetryPort: options.telemetryPort,\n }));\n executor.registerNode(new AnswerNode());\n executor.registerNode(new WaitUserNode({ auditPort: options.auditPort }));\n return executor;\n}\n","import type {\n GraphExecutorContextBuildInput,\n GraphExecutorContextBuildOutput,\n GraphExecutorContextBuilder,\n} from '../runtime-kernel';\nimport type { LlmRequestMessage } from '../ports';\nimport type { RuntimeEvent } from '../contracts';\nimport type { DefinedAgent } from './types';\n\nfunction runtimeEventToMessage(event: RuntimeEvent): LlmRequestMessage | undefined {\n switch (event.type) {\n case 'user_input':\n return { role: 'user', content: event.content };\n case 'final_answer':\n return { role: 'assistant', content: event.content };\n case 'tool_output':\n if (typeof event.tool_call_id === 'string') {\n return {\n role: 'tool',\n tool_call_id: event.tool_call_id,\n content: typeof event.output === 'string' ? event.output : JSON.stringify(event.output ?? event.payload ?? {}),\n };\n }\n return undefined;\n default:\n return undefined;\n }\n}\n\n/**\n * Quickstart 专用 context builder。\n *\n * 中文备注:\n * - 只覆盖 hello-agent 级别的 system + history + current user input;\n * - 生产 host 仍应接 `context-manager` 的 AgentMessageOrchestrator。\n */\nexport class QuickstartContextBuilder implements GraphExecutorContextBuilder {\n private readonly agent: DefinedAgent;\n\n constructor(agent: DefinedAgent) {\n this.agent = agent;\n }\n\n async build(input: GraphExecutorContextBuildInput): Promise<GraphExecutorContextBuildOutput> {\n const historyMessages = input.history\n .map(runtimeEventToMessage)\n .filter((message): message is LlmRequestMessage => message !== undefined);\n\n return {\n mode: 'agent',\n llmMessages: [\n { role: 'system', content: this.agent.systemPrompt },\n ...historyMessages,\n { role: 'user', content: input.request.query },\n ],\n summaryEvents: [],\n contextTrace: {\n kind: 'quickstart_context_trace',\n agentId: this.agent.spec.id,\n messageCount: historyMessages.length + 2,\n },\n };\n }\n}\n","import type {\n BaseTool,\n OpenAIToolSchema,\n ToolArgs,\n ToolExecutionContext,\n ToolExecutionResult,\n ToolRuntimeDefinition,\n} from '../runtime-kernel';\nimport type { QuickstartToolRuntime } from './types';\nimport { serializeToolParameters } from './toolSchema';\n\nfunction stringifyToolOutput(output: string): string {\n return output;\n}\n\nexport class QuickstartMemoryToolRuntime implements QuickstartToolRuntime {\n private readonly tools = new Map<string, BaseTool<ToolArgs, string>>();\n\n constructor(tools: readonly BaseTool<ToolArgs, string>[] = []) {\n for (const tool of tools) {\n if (this.tools.has(tool.name)) {\n throw new Error(`[linnkit] duplicate tool registered: ${tool.name}`);\n }\n this.tools.set(tool.name, tool);\n }\n }\n\n getToolSchemas(toolNames?: string[]): OpenAIToolSchema[] {\n const allowed = Array.isArray(toolNames) && toolNames.length > 0\n ? new Set(toolNames)\n : undefined;\n\n return [...this.tools.values()]\n .filter((tool) => !allowed || allowed.has(tool.name))\n .map((tool) => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: serializeToolParameters(tool.parameters),\n },\n }));\n }\n\n getToolDefinition(toolName: string): ToolRuntimeDefinition | undefined {\n const tool = this.tools.get(toolName);\n if (!tool) return undefined;\n return {\n parameters: tool.parameters,\n displayOptions: tool.displayOptions,\n idempotency: tool.idempotency,\n };\n }\n\n getDisplayOptions(toolName: string): BaseTool<ToolArgs, string>['displayOptions'] | undefined {\n return this.tools.get(toolName)?.displayOptions;\n }\n\n async executeTool(\n toolName: string,\n args: ToolArgs,\n context: ToolExecutionContext,\n ): Promise<ToolExecutionResult> {\n const tool = this.tools.get(toolName);\n const startedAt = Date.now();\n if (!tool) {\n return {\n success: false,\n error: `Unknown tool: ${toolName}`,\n errorKind: 'execution',\n durationMs: Date.now() - startedAt,\n };\n }\n\n try {\n const result = await tool.run(args, context);\n return {\n success: true,\n result: stringifyToolOutput(result),\n durationMs: Date.now() - startedAt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n errorKind: 'execution',\n durationMs: Date.now() - startedAt,\n };\n }\n }\n}\n","import type { runSupervisor, telemetry } from '../runtime-kernel';\n\ntype RunCost = runSupervisor.RunCost;\ntype RunCostCollector = runSupervisor.RunCostCollector;\ntype TelemetryEvent = telemetry.TelemetryEvent;\ntype TelemetryPort = telemetry.TelemetryPort;\n\ninterface CostBucket {\n tokensInput: number;\n tokensOutput: number;\n latencyMs: number;\n}\n\nfunction emptyCost(): RunCost {\n return { tokensInput: 0, tokensOutput: 0, latencyMs: 0 };\n}\n\nexport class QuickstartRunCostCollector implements RunCostCollector {\n private readonly buckets = new Map<string, CostBucket>();\n\n ingest(event: TelemetryEvent): void {\n if (event.kind !== 'llm_call') return;\n const runId = event.scope.runId ?? event.scope.turnId;\n if (!runId) return;\n\n const bucket = this.buckets.get(runId) ?? { tokensInput: 0, tokensOutput: 0, latencyMs: 0 };\n bucket.tokensInput += event.usage?.promptTokens ?? 0;\n bucket.tokensOutput += event.usage?.completionTokens ?? 0;\n bucket.latencyMs += event.durationMs;\n this.buckets.set(runId, bucket);\n }\n\n snapshot(runId: string): RunCost {\n const bucket = this.buckets.get(runId);\n if (!bucket) return emptyCost();\n return {\n tokensInput: bucket.tokensInput,\n tokensOutput: bucket.tokensOutput,\n latencyMs: bucket.latencyMs,\n };\n }\n}\n\nexport function createQuickstartTelemetryPort(\n collector: QuickstartRunCostCollector,\n): TelemetryPort {\n return {\n emit(event: TelemetryEvent): void {\n collector.ingest(event);\n },\n };\n}\n","import {\n createFinalAnswerChunkEvent,\n createUserInputEvent,\n type RuntimeEvent,\n} from '../contracts';\nimport { generateMessageId, generateRunId } from '../shared/ids';\nimport {\n GraphAgentExecutor,\n LlmCaller,\n LlmNode,\n MemoryCheckpointer,\n type ObservationPreviewPort,\n type ToolExecutionContext,\n createDefaultGraphExecutor,\n execution,\n graph,\n runSupervisor,\n} from '../runtime-kernel';\nimport type { DefinedAgent, RunAgentOptions, RunAgentResult } from './types';\nimport { QuickstartContextBuilder } from './contextBuilder';\nimport { QuickstartMemoryToolRuntime } from './toolRuntime';\nimport {\n QuickstartRunCostCollector,\n createQuickstartTelemetryPort,\n} from './runCost';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value : undefined;\n}\n\nfunction resolveModelId(agent: DefinedAgent, options: RunAgentOptions): string {\n const modelId = readString(options.modelId) ?? readString(agent.modelId);\n if (!modelId) {\n throw new Error('[linnkit] runAgent requires modelId. Pass opts.modelId or defineAgent({ modelId }).');\n }\n return modelId;\n}\n\ninterface QuickstartStreamChunkEvent {\n type: 'stream_chunk';\n content: string;\n answer_id?: string;\n seq?: number;\n}\n\nfunction isQuickstartStreamChunkEvent(value: unknown): value is QuickstartStreamChunkEvent {\n return isRecord(value) && value.type === 'stream_chunk' && typeof value.content === 'string';\n}\n\nfunction createNoopObservationPreview(): ObservationPreviewPort {\n return {\n async truncateObservation(params) {\n return { truncated: false, preview: params.text };\n },\n };\n}\n\nfunction buildChunkRuntimeEvent(params: {\n event: QuickstartStreamChunkEvent;\n conversationId: string;\n turnId: string;\n}): RuntimeEvent[] {\n const content = params.event.content;\n if (!content) return [];\n const answerId = readString(params.event.answer_id) ?? `answer_${params.turnId}`;\n const seq = Number.isInteger(params.event.seq) ? Number(params.event.seq) : 0;\n return [\n createFinalAnswerChunkEvent(\n generateMessageId(),\n params.conversationId,\n params.turnId,\n answerId,\n seq,\n content,\n {\n ephemeral: true,\n metadata: {\n run_context: { runId: params.turnId },\n },\n },\n ),\n ];\n}\n\nfunction readFinalAnswer(events: RuntimeEvent[], checkpointLocal: unknown): string {\n const finalAnswerEvent = [...events].reverse().find((event) => event.type === 'final_answer');\n if (finalAnswerEvent?.type === 'final_answer') {\n return finalAnswerEvent.content;\n }\n\n const chunks = events\n .filter((event): event is Extract<RuntimeEvent, { type: 'final_answer_chunk' }> =>\n event.type === 'final_answer_chunk')\n .sort((a, b) => a.seq - b.seq)\n .map((event) => event.content);\n if (chunks.length > 0) {\n return chunks.join('');\n }\n\n if (isRecord(checkpointLocal)) {\n const finalAnswer = checkpointLocal['finalAnswer'];\n if (typeof finalAnswer === 'string') {\n return finalAnswer;\n }\n }\n\n return '';\n}\n\nfunction readContextTrace(checkpointLocal: unknown): unknown {\n if (!isRecord(checkpointLocal)) return undefined;\n return checkpointLocal['contextTrace'];\n}\n\nasync function emitRunEvent(\n event: RuntimeEvent,\n sink: RunAgentOptions['onEvent'],\n): Promise<void> {\n await sink?.(event);\n}\n\n/**\n * 运行一个 quickstart agent。\n *\n * 中文备注:\n * - 这个 helper 用于“npm install 后立即跑通”的最小体验;\n * - 生产 host 仍应自行装配 EventStore / ToolRuntime / ContextManager / RunSupervisor。\n */\nexport async function runAgent(\n agent: DefinedAgent,\n options: RunAgentOptions,\n): Promise<RunAgentResult> {\n const modelId = resolveModelId(agent, options);\n const conversationId = options.conversationId ?? `conv_${Date.now()}`;\n const runId = options.runId ?? generateRunId();\n const turnId = runId;\n const costCollector = new QuickstartRunCostCollector();\n const telemetryPort = createQuickstartTelemetryPort(costCollector);\n const toolRuntime = new QuickstartMemoryToolRuntime(agent.tools);\n const eventStore = new graph.MemoryEventStore();\n const eventBus = new execution.EventBus(`exec_${runId}`);\n const registryStore = new runSupervisor.MemoryRunRegistryStore();\n const supervisor = new runSupervisor.DefaultRunSupervisor({\n registryStore,\n });\n\n const handle = await supervisor.registerRun({\n runId,\n parentSignal: options.signal,\n conversationId,\n agentSpec: agent.spec,\n request: { query: options.input, promptKey: agent.spec.id, model_id: modelId },\n eventBus,\n eventStore,\n costCollector,\n });\n\n const llmCaller = new LlmCaller({\n aiEngine: options.llm,\n maxRetries: 0,\n enableEmptyResponseRetry: false,\n });\n const reasoner = new GraphAgentExecutor({\n llmCaller,\n toolRuntime,\n contextBuilder: new QuickstartContextBuilder(agent),\n telemetryPort,\n });\n const executor = createDefaultGraphExecutor({\n llmNode: new LlmNode({ reasoner }),\n toolRuntime,\n observationPreview: createNoopObservationPreview(),\n checkpointer: new MemoryCheckpointer(),\n telemetryPort,\n maxSteps: 8,\n });\n\n const runtimeEvents: RuntimeEvent[] = [\n createUserInputEvent(generateMessageId(), conversationId, turnId, options.input, {\n metadata: { run_context: { runId } },\n }),\n ];\n await emitRunEvent(runtimeEvents[0], options.onEvent);\n const toolContext: ToolExecutionContext = {\n runId,\n conversationId,\n turnId,\n abortSignal: handle.signal,\n };\n\n await handle.markRunning({ currentNode: 'user' });\n try {\n await executor.prime(conversationId, {\n conversationId,\n turnId,\n request: {\n query: options.input,\n promptKey: agent.spec.id,\n model_id: modelId,\n enableTools: agent.tools.length > 0,\n availableTools: agent.tools.map((tool) => tool.name),\n },\n history: [],\n newEvents: runtimeEvents,\n toolContext,\n signal: handle.signal,\n sseSink: (event: unknown) => {\n if (isQuickstartStreamChunkEvent(event)) {\n const chunkEvents = buildChunkRuntimeEvent({ event, conversationId, turnId });\n for (const chunkEvent of chunkEvents) {\n void emitRunEvent(chunkEvent, options.onEvent);\n }\n return chunkEvents;\n }\n return undefined;\n },\n });\n const result = await executor.runUntilYield(conversationId);\n runtimeEvents.push(...result.events);\n for (const event of result.events) {\n if (event.type === 'final_answer_chunk') continue;\n await emitRunEvent(event, options.onEvent);\n }\n for (const event of runtimeEvents) {\n await eventStore.append(conversationId, {\n eventId: event.id,\n timestamp: event.timestamp,\n conversationId,\n runId,\n event,\n });\n }\n await handle.markCompleted({ currentNode: result.checkpoint.nodeId, iterationsUsed: result.stepCount });\n return {\n runId,\n finalAnswer: readFinalAnswer(runtimeEvents, result.checkpoint.local),\n events: runtimeEvents,\n cost: await handle.cost(),\n contextTrace: readContextTrace(result.checkpoint.local),\n };\n } catch (error) {\n await handle.markFailed({\n errorCode: 'RUN_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n });\n throw error;\n } finally {\n eventBus.close();\n }\n}\n","import { pathToFileURL } from 'node:url';\nimport { resolve } from 'node:path';\nimport type { LinnkitQuickstartConfig } from '../quickstart';\nimport { defineConfig } from '../quickstart';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readDefaultExport(moduleValue: unknown): unknown {\n if (isRecord(moduleValue) && 'default' in moduleValue) {\n return moduleValue.default;\n }\n return moduleValue;\n}\n\nexport async function loadConfig(\n configPath: string,\n cwd: string,\n): Promise<LinnkitQuickstartConfig> {\n const absolutePath = resolve(cwd, configPath);\n const moduleUrl = pathToFileURL(absolutePath);\n moduleUrl.searchParams.set('t', String(Date.now()));\n const loaded = await import(moduleUrl.href);\n const config = readDefaultExport(loaded);\n if (!isRecord(config)) {\n throw new Error(`[linnkit] config must export an object: ${absolutePath}`);\n }\n return defineConfig(config as LinnkitQuickstartConfig);\n}\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nfunction parseEnvLine(line: string): readonly [string, string] | null {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) return null;\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex <= 0) return null;\n\n const key = trimmed.slice(0, eqIndex).trim();\n const rawValue = trimmed.slice(eqIndex + 1).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) return null;\n\n const value =\n (rawValue.startsWith('\"') && rawValue.endsWith('\"')) ||\n (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\"))\n ? rawValue.slice(1, -1)\n : rawValue;\n return [key, value] as const;\n}\n\n/**\n * 读取当前项目的 .env。\n *\n * 中文备注:quickstart 模板需要开箱即用,但 linnkit 不引入 dotenv 依赖;\n * 这里只支持 KEY=VALUE 的最小格式,生产项目应使用自己的配置系统。\n */\nexport async function loadDotEnv(cwd: string): Promise<void> {\n try {\n const content = await readFile(resolve(cwd, '.env'), 'utf8');\n for (const line of content.split(/\\r?\\n/)) {\n const parsed = parseEnvLine(line);\n if (!parsed) continue;\n const [key, value] = parsed;\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n } catch (error) {\n const code =\n typeof error === 'object' && error !== null && 'code' in error\n ? (error as { code?: unknown }).code\n : undefined;\n if (code !== 'ENOENT') {\n throw error;\n }\n }\n}\n","import { access, readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { loadConfig } from './configLoader';\nimport { loadDotEnv } from './env';\nimport { resolveConfiguredLlm } from '../quickstart';\n\nexport interface DoctorCommandOptions {\n cwd: string;\n configPath: string;\n}\n\nexport interface DoctorReport {\n ok: boolean;\n lines: string[];\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isNode20OrNewer(version: string): boolean {\n const major = Number(version.split('.')[0]);\n return Number.isFinite(major) && major >= 20;\n}\n\nasync function hasLegacyGitHubPackagesRegistry(cwd: string): Promise<boolean> {\n const npmrc = resolve(cwd, '.npmrc');\n if (!(await pathExists(npmrc))) return false;\n const content = await readFile(npmrc, 'utf8');\n return content.includes('@linnlabs:registry=https://npm.pkg.github.com/');\n}\n\nfunction pass(label: string): string {\n return `✓ ${label}`;\n}\n\nfunction fail(label: string, reason: string): string {\n return `✗ ${label}: ${reason}`;\n}\n\nfunction warn(label: string, reason: string): string {\n return `! ${label}: ${reason}`;\n}\n\nexport async function runDoctorCommand(options: DoctorCommandOptions): Promise<DoctorReport> {\n await loadDotEnv(options.cwd);\n\n const lines: string[] = [];\n let ok = true;\n\n if (isNode20OrNewer(process.versions.node)) {\n lines.push(pass(`Node ${process.versions.node}`));\n } else {\n ok = false;\n lines.push(fail('Node version', `requires >= 20, current ${process.versions.node}`));\n }\n\n if (await hasLegacyGitHubPackagesRegistry(options.cwd)) {\n lines.push(warn('.npmrc legacy GitHub Packages registry', 'remove the @linnlabs registry override; linnkit is published on npmjs.com'));\n } else {\n lines.push(pass('npmjs public registry'));\n }\n\n if (process.env.OPENAI_API_KEY) {\n lines.push(pass('OPENAI_API_KEY'));\n } else {\n ok = false;\n lines.push(fail('OPENAI_API_KEY', 'set it in .env or export it before running a real provider'));\n }\n\n try {\n const config = await loadConfig(options.configPath, options.cwd);\n lines.push(pass(`config ${options.configPath}`));\n lines.push(pass(`agents: ${config.agents.map((agent) => agent.spec.id).join(', ')}`));\n\n await resolveConfiguredLlm(config);\n lines.push(pass('llm adapter shape'));\n } catch (error) {\n ok = false;\n lines.push(fail('config', error instanceof Error ? error.message : String(error)));\n }\n\n return { ok, lines };\n}\n","export interface TemplateFile {\n path: string;\n content: string;\n}\n\nexport function createQuickstartTemplateFiles(projectName: string): TemplateFile[] {\n return [\n {\n path: 'package.json',\n content: `${JSON.stringify({\n name: projectName,\n version: '0.1.0',\n private: true,\n type: 'module',\n scripts: {\n doctor: 'linnkit doctor',\n start: 'linnkit run hello --input \"你好,介绍一下你自己\"',\n },\n dependencies: {\n '@linnlabs/linnkit': '^0.8.0',\n zod: '^3.22.0',\n },\n devDependencies: {},\n }, null, 2)}\\n`,\n },\n {\n path: '.env.example',\n content: [\n 'OPENAI_API_KEY=',\n 'OPENAI_BASE_URL=https://api.openai.com/v1',\n 'OPENAI_MODEL=gpt-4.1-mini',\n '',\n ].join('\\n'),\n },\n {\n path: 'agents/hello.mjs',\n content: [\n \"import { defineAgent } from '@linnlabs/linnkit';\",\n '',\n 'export const helloAgent = defineAgent({',\n \" id: 'hello',\",\n \" version: '0.1.0',\",\n \" description: 'A tiny hello-world linnkit agent.',\",\n \" modelId: process.env.OPENAI_MODEL || 'gpt-4.1-mini',\",\n \" systemPrompt: 'You are a concise, warm assistant. Reply in the same language as the user.',\",\n ' tools: [],',\n ' contextPolicy: {',\n \" profileId: 'agent',\",\n ' contextTrace: { enabled: true },',\n ' },',\n '});',\n '',\n ].join('\\n'),\n },\n {\n path: 'adapters/openai-compatible.mjs',\n content: [\n 'function readContentDelta(choice) {',\n ' const delta = choice?.delta;',\n \" if (typeof delta?.content === 'string') return delta.content;\",\n \" if (typeof choice?.message?.content === 'string') return choice.message.content;\",\n \" return '';\",\n '}',\n '',\n 'function normalizeMessages(messages) {',\n ' return messages.map((message) => {',\n \" if (message.role === 'tool') {\",\n \" return { role: 'tool', tool_call_id: message.tool_call_id, content: String(message.content ?? '') };\",\n ' }',\n \" return { role: message.role, content: String(message.content ?? '') };\",\n ' });',\n '}',\n '',\n 'export function createOpenAICompatibleProvider(options = {}) {',\n ' const apiKey = options.apiKey ?? process.env.OPENAI_API_KEY;',\n \" const baseUrl = (options.baseUrl ?? process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1').replace(/\\\\/$/, '');\",\n '',\n ' async function request(modelId, messages, callOptions = {}, stream = false) {',\n ' if (!apiKey) {',\n \" throw new Error('Missing OPENAI_API_KEY. Copy .env.example to .env or export OPENAI_API_KEY.');\",\n ' }',\n ` const response = await fetch(\\`\\${baseUrl}/chat/completions\\`, {`,\n \" method: 'POST',\",\n ' headers: {',\n \" 'content-type': 'application/json',\",\n ' authorization: `Bearer ${apiKey}`,',\n ' },',\n ' body: JSON.stringify({',\n ' model: modelId,',\n ' messages: normalizeMessages(messages),',\n ' stream,',\n ' tools: callOptions.tools,',\n ' tool_choice: callOptions.tool_choice,',\n ' temperature: callOptions.temperature,',\n ' max_tokens: callOptions.max_tokens,',\n ' stream_options: stream ? callOptions.stream_options : undefined,',\n ' }),',\n ' signal: callOptions.signal,',\n ' });',\n '',\n ' if (!response.ok) {',\n ' const detail = await response.text();',\n ' throw new Error(`LLM request failed: ${response.status} ${detail}`);',\n ' }',\n ' return response;',\n ' }',\n '',\n ' return {',\n ' async chatCompletion(modelId, messages, callOptions = {}) {',\n ' const response = await request(modelId, messages, callOptions, false);',\n ' const json = await response.json();',\n ' const choice = json.choices?.[0];',\n ' return {',\n ' content: choice?.message?.content ?? \\'\\',',\n ' tool_calls: choice?.message?.tool_calls,',\n ' usage: json.usage,',\n ' };',\n ' },',\n '',\n ' async chatCompletionStream(modelId, messages, callOptions = {}, onContent, onError, onFinish, _onThought, onUsage) {',\n ' try {',\n ' const response = await request(modelId, messages, callOptions, true);',\n ' if (!response.body) throw new Error(\\'Streaming response body is empty.\\');',\n ' const reader = response.body.getReader();',\n ' const decoder = new TextDecoder();',\n \" let buffer = '';\",\n '',\n ' while (true) {',\n ' const { done, value } = await reader.read();',\n ' if (done) break;',\n ' buffer += decoder.decode(value, { stream: true });',\n \" const lines = buffer.split('\\\\n');\",\n ' buffer = lines.pop() ?? \\'\\';',\n '',\n ' for (const rawLine of lines) {',\n ' const line = rawLine.trim();',\n \" if (!line || !line.startsWith('data:')) continue;\",\n \" const payload = line.slice('data:'.length).trim();\",\n \" if (payload === '[DONE]') {\",\n \" onFinish?.('stop');\",\n ' return;',\n ' }',\n ' const parsed = JSON.parse(payload);',\n ' if (parsed.usage) onUsage?.(parsed.usage);',\n ' const choice = parsed.choices?.[0];',\n ' const content = readContentDelta(choice);',\n ' if (content) onContent?.(content);',\n ' if (choice?.finish_reason) onFinish?.(choice.finish_reason);',\n ' }',\n ' }',\n \" onFinish?.('stop');\",\n ' } catch (error) {',\n ' onError?.(error instanceof Error ? error : new Error(String(error)));',\n ' }',\n ' },',\n ' };',\n '}',\n '',\n ].join('\\n'),\n },\n {\n path: 'linnkit.config.mjs',\n content: [\n \"import { defineConfig } from '@linnlabs/linnkit';\",\n \"import { helloAgent } from './agents/hello.mjs';\",\n \"import { createOpenAICompatibleProvider } from './adapters/openai-compatible.mjs';\",\n '',\n 'export default defineConfig({',\n ' agents: [helloAgent],',\n ' defaultModelId: process.env.OPENAI_MODEL || helloAgent.modelId,',\n ' llm: () => createOpenAICompatibleProvider(),',\n '});',\n '',\n ].join('\\n'),\n },\n {\n path: 'README.md',\n content: [\n `# ${projectName}`,\n '',\n 'A minimal linnkit quickstart project.',\n '',\n '```bash',\n 'cp .env.example .env',\n 'npm install',\n 'export OPENAI_API_KEY=...',\n 'npx linnkit doctor',\n 'npx linnkit run hello --input \"你好\"',\n '```',\n '',\n ].join('\\n'),\n },\n ];\n}\n","import { mkdir, readdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, resolve } from 'node:path';\nimport { createQuickstartTemplateFiles } from './templates';\n\nexport interface InitCommandOptions {\n cwd: string;\n name: string;\n}\n\nasync function isDirectoryEmpty(path: string): Promise<boolean> {\n try {\n const entries = await readdir(path);\n return entries.length === 0;\n } catch {\n return true;\n }\n}\n\nexport async function runInitCommand(options: InitCommandOptions): Promise<string[]> {\n const targetDir = resolve(options.cwd, options.name);\n if (!(await isDirectoryEmpty(targetDir))) {\n throw new Error(`[linnkit] target directory is not empty: ${targetDir}`);\n }\n\n const written: string[] = [];\n for (const file of createQuickstartTemplateFiles(options.name)) {\n const filePath = join(targetDir, file.path);\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, file.content, 'utf8');\n written.push(file.path);\n }\n return written;\n}\n","import type { RuntimeEvent } from '../contracts';\nimport { resolveConfiguredLlm, runAgent } from '../quickstart';\nimport { loadConfig } from './configLoader';\nimport { loadDotEnv } from './env';\n\nexport interface RunCommandOptions {\n cwd: string;\n configPath: string;\n agentId: string;\n input: string;\n modelId?: string;\n write?: (text: string) => void;\n}\n\nfunction readEventText(event: RuntimeEvent): string | undefined {\n if (event.type === 'final_answer_chunk') {\n return event.content;\n }\n if (event.type === 'tool_call') {\n return `\\n[tool] ${event.tool_name}\\n`;\n }\n if (event.type === 'tool_output') {\n return `[tool-result] ${event.tool_name}\\n`;\n }\n return undefined;\n}\n\nexport async function runRunCommand(options: RunCommandOptions): Promise<number> {\n await loadDotEnv(options.cwd);\n const config = await loadConfig(options.configPath, options.cwd);\n const agent = config.agents.find((candidate) => candidate.spec.id === options.agentId);\n if (!agent) {\n throw new Error(`[linnkit] unknown agent id: ${options.agentId}`);\n }\n\n const llm = await resolveConfiguredLlm(config);\n const modelId = options.modelId ?? agent.modelId ?? config.defaultModelId;\n const write = options.write ?? ((text: string) => process.stdout.write(text));\n\n write(`[linnkit] agent=${agent.spec.id} model=${modelId ?? '(missing)'}\\n`);\n const result = await runAgent(agent, {\n input: options.input,\n llm,\n modelId,\n onEvent: (event) => {\n const text = readEventText(event);\n if (text) write(text);\n },\n });\n\n write('\\n');\n write(`[linnkit] runId=${result.runId}\\n`);\n write(`[linnkit] tokens input=${result.cost.tokensInput} output=${result.cost.tokensOutput}\\n`);\n return 0;\n}\n","#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { parseCliArgs, readStringOption } from './args';\nimport { runDoctorCommand } from './doctor';\nimport { runInitCommand } from './init';\nimport { runRunCommand } from './run';\n\nfunction usage(): string {\n return [\n 'linnkit v0 CLI',\n '',\n 'Usage:',\n ' linnkit init <name>',\n ' linnkit doctor [--config linnkit.config.mjs]',\n ' linnkit run <agent-id> --input \"...\" [--model \"...\"] [--config linnkit.config.mjs]',\n '',\n ].join('\\n');\n}\n\nfunction readConfigPath(options: Record<string, string | boolean>): string {\n return readStringOption(options, 'config') ?? 'linnkit.config.mjs';\n}\n\nexport async function runCli(\n argv: readonly string[],\n cwd = process.cwd(),\n write: (text: string) => void = (text) => process.stdout.write(text),\n writeError: (text: string) => void = (text) => process.stderr.write(text),\n): Promise<number> {\n const parsed = parseCliArgs(argv);\n if (!parsed.command || parsed.command === 'help' || parsed.options.help === true || parsed.options.h === true) {\n write(usage());\n return 0;\n }\n\n try {\n if (parsed.command === 'init') {\n const name = parsed.positional[0];\n if (!name) throw new Error('[linnkit] init requires a project name.');\n const files = await runInitCommand({ cwd, name });\n write(`Created ${name}\\n`);\n for (const file of files) {\n write(` ${file}\\n`);\n }\n write('\\nNext:\\n');\n write(` cd ${name}\\n`);\n write(' cp .env.example .env\\n');\n write(' npm install\\n');\n write(' npx linnkit doctor\\n');\n return 0;\n }\n\n if (parsed.command === 'doctor') {\n const report = await runDoctorCommand({\n cwd,\n configPath: readConfigPath(parsed.options),\n });\n write(`${report.lines.join('\\n')}\\n`);\n return report.ok ? 0 : 1;\n }\n\n if (parsed.command === 'run') {\n const agentId = parsed.positional[0];\n if (!agentId) throw new Error('[linnkit] run requires an agent id.');\n const input = readStringOption(parsed.options, 'input');\n if (!input) throw new Error('[linnkit] run requires --input \"...\".');\n return await runRunCommand({\n cwd,\n configPath: readConfigPath(parsed.options),\n agentId,\n input,\n modelId: readStringOption(parsed.options, 'model'),\n write,\n });\n }\n\n throw new Error(`[linnkit] unknown command: ${parsed.command}`);\n } catch (error) {\n writeError(`${error instanceof Error ? error.message : String(error)}\\n`);\n return 1;\n }\n}\n\nconst invokedPath = process.argv[1] ? pathToFileURL(process.argv[1]).href : undefined;\nif (invokedPath === import.meta.url) {\n void runCli(process.argv.slice(2)).then((exitCode) => {\n process.exitCode = exitCode;\n });\n}\n"]}
|