@caupulican/pi-adaptative 0.96.4 → 0.96.5
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 +12 -0
- package/README.md +8 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-contracts.d.ts +1 -1
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +29 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js +5 -1
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +3 -1
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +32 -7
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/learning/durable-learning-state.d.ts +76 -0
- package/dist/core/learning/durable-learning-state.d.ts.map +1 -0
- package/dist/core/learning/durable-learning-state.js +493 -0
- package/dist/core/learning/durable-learning-state.js.map +1 -0
- package/dist/core/reflection-controller.d.ts +37 -7
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +278 -49
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +6 -3
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/docs/durable-learning-state-design.md +217 -0
- package/docs/settings.md +5 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflection-controller.js","sourceRoot":"","sources":["../../src/core/reflection-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Root-session reflection cue + explicit learning-write controller.\n *\n * Automatic reflection is a hidden cue in the root orchestrator's ordinary provider turn. This\n * controller never schedules an automatic provider request. The isolated completion and structured\n * reflection pass remain explicit compatibility/application seams for owner-invoked callers. Every\n * durable effect goes through the bundled memory tool, the session log (via deps), or the skills dir.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Agent } from \"@caupulican/pi-agent-core/agent\";\nimport { runAgentLoop, startAgentProviderRequest } from \"@caupulican/pi-agent-core/agent-loop\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/session\";\nimport type { AgentContext, AgentLoopConfig, AgentMessage, ThinkingLevel } from \"@caupulican/pi-agent-core/types\";\nimport { resolveModelThinkingLevel } from \"@caupulican/pi-ai/models\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTextContent,\n\tUsage,\n} from \"@caupulican/pi-ai/types\";\nimport {\n\tcomputeLaneAffinityKey,\n\tDEFAULT_ISOLATED_LANE_KIND,\n\ttype IsolatedCompletionOptions,\n\ttype IsolatedCompletionResult,\n} from \"./agent-session-contracts.ts\";\nimport type { LearningDecision } from \"./autonomy/contracts.ts\";\nimport { AUTONOMY_TELEMETRY_EVENT_TYPES, type AutonomyTelemetryEvent } from \"./autonomy/telemetry-events.ts\";\nimport { PI_OKF_TYPES, type PiOkfType } from \"./context/okf-memory.ts\";\nimport { isCurrentSessionReflectionEnabled, resolveAutoLearnSettings } from \"./learning/auto-learn-settings.ts\";\nimport {\n\tAPPLY_WRITE_REFUSED_REASON_CODE,\n\tappendLearningAuditSnapshot,\n\tcontradictionsForReflectionWrite,\n\tgetLearningAuditSnapshots,\n\ttype LearningAuditRecord,\n\tproposalFromReflectionWrite,\n\trollbackPlanForReflectionWrite,\n} from \"./learning/learning-audit.ts\";\nimport { evaluateLearningDecision } from \"./learning/learning-gate.ts\";\nimport { ObservationStore, observationKey } from \"./learning/observation-store.ts\";\nimport {\n\ttype DemandSignals,\n\tdecideDemand,\n\tReflectionEngine,\n\ttype ReflectionResult,\n\ttype ReflectionWrite,\n} from \"./learning/reflection-engine.ts\";\nimport { analyzeReflectionTurn, type ReflectionTurnAnalysis } from \"./learning/reflection-turn-analysis.ts\";\nimport type { MemoryManager } from \"./memory/memory-manager.ts\";\nimport type {\n\tStructuredReflectionApplyResult,\n\tStructuredReflectionRollback,\n\tStructuredReflectionWrite,\n} from \"./memory/providers/file-store.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport { registerInFlightWork } from \"./reload-blockers.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { DEFAULT_BOUNDED_SKILL_AUDIT_LIMITS, runSkillAudit } from \"./tools/skill-audit.ts\";\n\nexport interface ReflectionControllerDeps {\n\t/** Current session model (fallback for an isolated call that omits its own model). */\n\tgetModel(): Model<Api> | undefined;\n\t/** The underlying agent — its `streamFn` runs the isolated completion. */\n\tgetAgent(): Agent;\n\t/** True when the session's stream fn is the raw `streamSimple` provider (auth must be injected). */\n\tisRawStreamSimple(): boolean;\n\t/** Model registry for API-key/header resolution on the raw-provider path. */\n\tgetModelRegistry(): ModelRegistry;\n\t/** Memory subsystem — the bundled `memory` tool applies durable writes; fresh block feeds reflection. */\n\tgetMemoryManager(): MemoryManager;\n\t/** Fresh bounded structured OKF snapshot, read at reflection time for confront-before-write. */\n\tgetFreshOkfMemoryForReflection(): string;\n\t/** Main-orchestrator-only structured memory mutation port. */\n\tapplyStructuredReflectionWrite(\n\t\twrite: StructuredReflectionWrite,\n\t\tsignal?: AbortSignal,\n\t): Promise<StructuredReflectionApplyResult>;\n\t/** Main-orchestrator-only inverse for an audited structured write. */\n\trollbackStructuredReflectionWrite(rollback: StructuredReflectionRollback, signal?: AbortSignal): Promise<boolean>;\n\t/** Settings — the learning-apply policy (gate thresholds, auto-apply layers) is read here. */\n\tgetSettingsManager(): SettingsManager;\n\t/** Session log — audit snapshots and learning-audit reads go through this. */\n\tgetSessionManager(): SessionManager;\n\t/** Agent dir — reflection-promoted skills are written under `<agentDir>/skills/`. */\n\tgetAgentDir(): string;\n\t/** Child sessions must not learn — the pass returns null for them. */\n\tisChildSession(): boolean;\n\t/** Disposal short-circuits: no completion, no writes against a dead session. */\n\tisDisposed(): boolean;\n\t/** Session-lifetime abort signal — aborts an in-flight reflection completion on dispose. */\n\tgetReflectionSignal(): AbortSignal;\n\t/** Archive a promoted skill (rollback of a `promote_skill` write). */\n\tarchivePromotedSkill(name: string): boolean;\n\t/** Make a just-written or archived skill visible to this session's skill vault. */\n\trefreshLiveSkills?(): void;\n\t/** G3/G8 autonomy telemetry sink for learning-gate outcomes and approval requests. */\n\temitAutonomyTelemetry(event: AutonomyTelemetryEvent): void;\n\t/** Account the reflection pass's token spend into the cost roll-up (idempotent on reportId). */\n\taddSpawnedUsage(\n\t\tusage: Usage,\n\t\topts?: { label?: string; sourceSessionId?: string; reportId?: string },\n\t): string | undefined;\n\t/** Persist a learning-gate decision snapshot to the session log. */\n\tsaveLearningDecisionSnapshot(decision: LearningDecision): string;\n\t/** Resolve text-tool fallback for the selected isolated model, not the foreground model. */\n\tresolveTextToolCallProtocol(model: Model<Api>): SimpleStreamOptions[\"textToolCallProtocol\"];\n\t/** Ensure a managed-local model is running/resident before any isolated lane calls it. */\n\tensureModelReady(model: Model<Api>): Promise<void>;\n\t/**\n\t * Session working directory — feeds the skill-overlap audit's project-local skill discovery, the\n\t * same `cwd` the model-invoked `skillify`/`skill_audit` tools already receive (tools/index.ts).\n\t * Optional so a host that has not wired it yet still resolves (falls back to `process.cwd()`,\n\t * mirroring the existing profile-resolution fallback in settings-manager.ts).\n\t */\n\tgetCwd?(): string;\n\t/** Already-loaded root skill universe; avoids a second unbounded filesystem discovery during reflection. */\n\tgetSkillsForAudit?(): readonly Skill[];\n}\n\n// reasonCode when an automatic skill promotion is blocked by an overlap with an existing skill\n// (skill_audit's similarity threshold) and routed to a consolidation proposal instead of a blind write.\nexport const SKILL_OVERLAP_CONSOLIDATION_REASON_CODE = \"skill_overlap_consolidation_proposed\";\n// reasonCode when the overlap audit itself fails — the promotion is held (not written unaudited)\n// rather than silently skipping the check.\nexport const SKILL_AUDIT_UNAVAILABLE_REASON_CODE = \"skill_audit_unavailable\";\n\nexport const CURRENT_TURN_REFLECTION_CUSTOM_TYPE = \"reflection_cue\";\nexport const CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE = \"reflection_cue_state\";\n\nexport type CurrentTurnReflectionTrigger = \"root-turn\" | Exclude<DemandSignals[\"trigger\"], \"none\">;\n\nexport interface CurrentTurnReflectionCueState {\n\tversion: 1;\n\trevision: number;\n\tcueId: string;\n\tstatus: \"pending\" | \"consumed\" | \"dismissed\";\n\ttriggers: CurrentTurnReflectionTrigger[];\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\nexport interface CurrentTurnReflectionCuePlan {\n\tmessage: AgentMessage;\n\tisCurrent(): boolean;\n\tcommit(): void;\n}\n\nconst CURRENT_TURN_REFLECTION_CUE = [\n\t\"Root reflection contract for this current turn:\",\n\t\"- Decide during this same turn whether the request or resulting evidence warrants durable learning.\",\n\t\"- When warranted, confront existing memory first, then use this root session's memory or skill tools now.\",\n\t\"- Do not defer reflection, request another model turn, call an isolated completion, or launch a background learner or worker for reflection.\",\n\t\"- When nothing durable is warranted, continue normally and do not mention this cue.\",\n].join(\"\\n\");\n\nconst CURRENT_TURN_REFLECTION_TRIGGERS = new Set<CurrentTurnReflectionTrigger>([\n\t\"root-turn\",\n\t\"complex\",\n\t\"corrective\",\n\t\"durable\",\n\t\"session-end\",\n]);\n\nfunction parseCurrentTurnReflectionCueState(value: unknown): CurrentTurnReflectionCueState | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst candidate = value as Partial<CurrentTurnReflectionCueState>;\n\tif (\n\t\tcandidate.version !== 1 ||\n\t\ttypeof candidate.revision !== \"number\" ||\n\t\t!Number.isSafeInteger(candidate.revision) ||\n\t\tcandidate.revision < 1 ||\n\t\ttypeof candidate.cueId !== \"string\" ||\n\t\t(candidate.status !== \"pending\" && candidate.status !== \"consumed\" && candidate.status !== \"dismissed\") ||\n\t\t!Array.isArray(candidate.triggers) ||\n\t\tcandidate.triggers.length === 0 ||\n\t\tcandidate.triggers.some((trigger) => !CURRENT_TURN_REFLECTION_TRIGGERS.has(trigger)) ||\n\t\ttypeof candidate.createdAt !== \"string\" ||\n\t\ttypeof candidate.updatedAt !== \"string\"\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tversion: 1,\n\t\trevision: candidate.revision,\n\t\tcueId: candidate.cueId,\n\t\tstatus: candidate.status,\n\t\ttriggers: [...new Set(candidate.triggers)],\n\t\tcreatedAt: candidate.createdAt,\n\t\tupdatedAt: candidate.updatedAt,\n\t};\n}\n\ninterface ReflectionApplyResult {\n\tapplied: boolean;\n\trollback?: LearningAuditRecord[\"rollback\"];\n}\n\nfunction parseOkfRollbackTarget(target: string | undefined): { type: PiOkfType; title: string } | undefined {\n\tif (!target) return undefined;\n\tconst separator = target.indexOf(\"\\0\");\n\tif (separator <= 0 || separator === target.length - 1) return undefined;\n\tconst type = target.slice(0, separator);\n\tif (!PI_OKF_TYPES.includes(type as PiOkfType)) return undefined;\n\treturn { type: type as PiOkfType, title: target.slice(separator + 1) };\n}\n\nexport class ReflectionController {\n\tprivate readonly deps: ReflectionControllerDeps;\n\tprivate readonly unsubscribeSettingsChanges: () => void;\n\tprivate cueStateCacheInitialized = false;\n\tprivate cueStateCache: CurrentTurnReflectionCueState | undefined;\n\n\tconstructor(deps: ReflectionControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.unsubscribeSettingsChanges = deps.getSettingsManager().subscribeChanges(() => {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t});\n\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t}\n\n\tdispose(): void {\n\t\tthis.unsubscribeSettingsChanges();\n\t}\n\n\tprivate isAutomaticReflectionEnabled(): boolean {\n\t\tconst settingsManager = this.deps.getSettingsManager();\n\t\tconst settings = resolveAutoLearnSettings(\n\t\t\tsettingsManager.getAutonomySettings().mode,\n\t\t\tsettingsManager.getAutoLearnSettings(),\n\t\t);\n\t\treturn isCurrentSessionReflectionEnabled(settings) && !this.deps.isChildSession() && !this.deps.isDisposed();\n\t}\n\n\t/** Latest durable cue snapshot on the active session branch; custom state never enters model context. */\n\tgetCurrentTurnCueState(): CurrentTurnReflectionCueState | undefined {\n\t\tif (this.cueStateCacheInitialized) return this.cueStateCache;\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tlet fromId: string | undefined;\n\t\twhile (true) {\n\t\t\tconst entry = sessionManager.getLatestCustomEntryOnBranch(CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE, fromId);\n\t\t\tif (!entry) break;\n\t\t\tconst state = parseCurrentTurnReflectionCueState(entry.data);\n\t\t\tif (state) {\n\t\t\t\tthis.cueStateCache = state;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!entry.parentId) break;\n\t\t\tfromId = entry.parentId;\n\t\t}\n\t\tthis.cueStateCacheInitialized = true;\n\t\treturn this.cueStateCache;\n\t}\n\n\t/** Branch/session navigation invalidates the lazy latest-state index; ordinary appends do not. */\n\tinvalidateCurrentTurnCueStateCache(): void {\n\t\tthis.cueStateCacheInitialized = false;\n\t\tthis.cueStateCache = undefined;\n\t}\n\n\tprivate persistCurrentTurnCueState(state: CurrentTurnReflectionCueState): void {\n\t\tthis.deps.getSessionManager().appendCustomEntry(CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE, state);\n\t\tthis.cueStateCache = state;\n\t\tthis.cueStateCacheInitialized = true;\n\t}\n\n\tprivate synchronizeCurrentTurnCueWithSettings(): void {\n\t\tif (this.isAutomaticReflectionEnabled()) return;\n\t\tconst current = this.getCurrentTurnCueState();\n\t\tif (current?.status !== \"pending\") return;\n\t\tthis.persistCurrentTurnCueState({\n\t\t\t...current,\n\t\t\trevision: current.revision + 1,\n\t\t\tstatus: \"dismissed\",\n\t\t\tupdatedAt: new Date().toISOString(),\n\t\t});\n\t}\n\n\t/**\n\t * Persist one logical pending cue. Repeated triggers merge into the existing pending snapshot;\n\t * they never append competing pending cues or retain raw transcript text.\n\t */\n\tqueueCurrentTurnCue(trigger: CurrentTurnReflectionTrigger): boolean {\n\t\tif (!this.isAutomaticReflectionEnabled()) {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t\treturn false;\n\t\t}\n\t\tconst current = this.getCurrentTurnCueState();\n\t\tconst updatedAt = new Date().toISOString();\n\t\tif (current?.status === \"pending\") {\n\t\t\tif (current.triggers.includes(trigger)) return false;\n\t\t\tconst next = {\n\t\t\t\t...current,\n\t\t\t\trevision: current.revision + 1,\n\t\t\t\ttriggers: [...current.triggers, trigger],\n\t\t\t\tupdatedAt,\n\t\t\t} satisfies CurrentTurnReflectionCueState;\n\t\t\tthis.persistCurrentTurnCueState(next);\n\t\t\treturn true;\n\t\t}\n\t\tconst next = {\n\t\t\tversion: 1,\n\t\t\trevision: 1,\n\t\t\tcueId: randomUUID(),\n\t\t\tstatus: \"pending\",\n\t\t\ttriggers: [trigger],\n\t\t\tcreatedAt: updatedAt,\n\t\t\tupdatedAt,\n\t\t} satisfies CurrentTurnReflectionCueState;\n\t\tthis.persistCurrentTurnCueState(next);\n\t\treturn true;\n\t}\n\n\t/**\n\t * Preview one transient provider-only cue. Discarded/replanned previews do nothing; the accepted\n\t * provider-plan commit closes exactly the captured cue id + revision.\n\t */\n\tpreviewCurrentTurnCue(): CurrentTurnReflectionCuePlan | undefined {\n\t\tconst current = this.getCurrentTurnCueState();\n\t\tif (current?.status !== \"pending\" || !this.isAutomaticReflectionEnabled()) return undefined;\n\t\tconst cueId = current.cueId;\n\t\tconst revision = current.revision;\n\t\tconst message: AgentMessage = {\n\t\t\trole: \"custom\",\n\t\t\tcustomType: CURRENT_TURN_REFLECTION_CUSTOM_TYPE,\n\t\t\tcontent: `${CURRENT_TURN_REFLECTION_CUE}\\n- Pending evidence classes: ${current.triggers.join(\", \")}.`,\n\t\t\tdisplay: false,\n\t\t\tdetails: {\n\t\t\t\tversion: 1,\n\t\t\t\tscope: \"root-current-turn\",\n\t\t\t\tautomaticProviderRequests: 0,\n\t\t\t\tcueId: current.cueId,\n\t\t\t\ttriggers: current.triggers,\n\t\t\t},\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tconst isCurrent = (): boolean => {\n\t\t\tconst latest = this.getCurrentTurnCueState();\n\t\t\treturn (\n\t\t\t\tthis.isAutomaticReflectionEnabled() &&\n\t\t\t\tlatest?.status === \"pending\" &&\n\t\t\t\tlatest.cueId === cueId &&\n\t\t\t\tlatest.revision === revision\n\t\t\t);\n\t\t};\n\t\treturn {\n\t\t\tmessage,\n\t\t\tisCurrent,\n\t\t\tcommit: () => {\n\t\t\t\tif (!isCurrent()) throw new Error(\"Reflection cue changed before provider-plan commit\");\n\t\t\t\tconst latest = this.getCurrentTurnCueState();\n\t\t\t\tif (!latest) throw new Error(\"Reflection cue disappeared before provider-plan commit\");\n\t\t\t\tconst next = {\n\t\t\t\t\t...latest,\n\t\t\t\t\trevision: latest.revision + 1,\n\t\t\t\t\tstatus: \"consumed\",\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t} satisfies CurrentTurnReflectionCueState;\n\t\t\t\tthis.persistCurrentTurnCueState(next);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Pure completed-turn projection used only by deterministic memory synchronization. */\n\tanalyzeCompletedTurn(messages: AgentMessage[]): ReflectionTurnAnalysis {\n\t\tconst settingsManager = this.deps.getSettingsManager();\n\t\tconst settings = resolveAutoLearnSettings(\n\t\t\tsettingsManager.getAutonomySettings().mode,\n\t\t\tsettingsManager.getAutoLearnSettings(),\n\t\t);\n\t\treturn analyzeReflectionTurn(messages, settings.complexTaskToolCalls);\n\t}\n\n\t/**\n\t * Run an explicit LLM completion fully ISOLATED from the main session for bounded host-owned\n\t * consumers. Automatic reflection never reaches this primitive.\n\t *\n\t * Isolation invariants (audited by codex): builds fresh context (no main history), defaults to no\n\t * tools, and passes **no real `sessionId`** — only a deterministic SYNTHETIC cache-affinity key\n\t * (see {@link computeLaneAffinityKey}) derived from `(laneKind, model, systemPrompt)`, which can never\n\t * equal or embed the real session id. A tool-enabled call receives only caller-owned tools and hooks,\n\t * and applies a turn bound only when its owner explicitly supplies one. It cannot mutate `agent.state.messages`, append session entries, or touch the\n\t * foreground tool registry. Mirrors `generateSummary()`'s one-shot mechanics otherwise.\n\t *\n\t * Returns the result even on an error/aborted stop reason; the explicit caller decides whether to\n\t * act, and a model-level error is returned rather than thrown.\n\t */\n\tasync runIsolatedCompletion(opts: IsolatedCompletionOptions): Promise<IsolatedCompletionResult> {\n\t\tif (opts.maxTurns !== undefined && (!Number.isSafeInteger(opts.maxTurns) || opts.maxTurns <= 0)) {\n\t\t\tthrow new Error(\"runIsolatedCompletion: maxTurns must be a positive safe integer when provided\");\n\t\t}\n\t\tconst model = opts.model ?? this.deps.getModel();\n\t\tif (!model) {\n\t\t\tthrow new Error(\"runIsolatedCompletion: no model available\");\n\t\t}\n\t\tawait this.deps.ensureModelReady(model);\n\t\tconst thinkingLevel = resolveModelThinkingLevel(model, opts.thinkingLevel, \"off\");\n\n\t\t// Registered for the full isolated-completion call (one-shot or child-loop) so the\n\t\t// reload gate waits it out — this is the SINGLE choke point every isolated completion in the\n\t\t// codebase runs through (reflection, research/worker/fitness lanes, context-pipeline curation,\n\t\t// model-router judge calls). registerInFlightWork is a pure sync map op (cannot throw), so\n\t\t// placing it as the last statement before `try` still guarantees the matching finally always\n\t\t// runs, on every return path below and on any thrown error.\n\t\tconst deregisterInFlight = registerInFlightWork(\n\t\t\tthis.deps.getAgentDir(),\n\t\t\t\"isolated-completion\",\n\t\t\topts.laneKind ?? DEFAULT_ISOLATED_LANE_KIND,\n\t\t);\n\t\ttry {\n\t\t\t// Fresh, isolated context: explicit messages, caller-owned tools only, nothing from the main session.\n\t\t\tconst history = opts.history ?? [];\n\t\t\tconst context: AgentContext = {\n\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\tmessages: [...history, ...opts.messages],\n\t\t\t\ttools: opts.tools ?? [],\n\t\t\t};\n\n\t\t\t// Isolate the prompt cache from the main session by DELIBERATELY never sending the real\n\t\t\t// sessionId. In its place, a deterministic SYNTHETIC affinity key lets providers with\n\t\t\t// session-affinity headers / prompt_cache_key route repeat calls from the SAME lane (same\n\t\t\t// laneKind+model+systemPrompt) to the same cache-warm backend, without entangling this call\n\t\t\t// with — or leaking any identity of — the main session.\n\t\t\tconst affinityKey = computeLaneAffinityKey(\n\t\t\t\topts.laneKind ?? DEFAULT_ISOLATED_LANE_KIND,\n\t\t\t\tmodel,\n\t\t\t\topts.systemPrompt,\n\t\t\t);\n\t\t\tconst options: SimpleStreamOptions = {\n\t\t\t\tmaxTokens: opts.maxTokens,\n\t\t\t\tsignal: opts.signal,\n\t\t\t\tinteractionMode: \"background\",\n\t\t\t\tcacheRetention: opts.cacheRetention,\n\t\t\t\treasoning: thinkingLevel,\n\t\t\t\tsessionId: affinityKey,\n\t\t\t};\n\n\t\t\t// When streamFn is the raw streamSimple (e.g. in tests), auth must be injected explicitly.\n\t\t\t// Throw only when auth genuinely fails — providers that authenticate without an API key\n\t\t\t// (OAuth, local no-key) legitimately return ok with an undefined apiKey.\n\t\t\tif (this.deps.isRawStreamSimple()) {\n\t\t\t\tconst auth = await this.deps.getModelRegistry().getApiKeyAndHeaders(model);\n\t\t\t\tif (!auth.ok) {\n\t\t\t\t\tthrow new Error(auth.error);\n\t\t\t\t}\n\t\t\t\toptions.apiKey = auth.apiKey;\n\t\t\t\toptions.headers = auth.headers;\n\t\t\t}\n\t\t\tconst agent = this.deps.getAgent();\n\t\t\tconst foregroundModel = agent.state.model;\n\t\t\tconst usesForegroundModel = foregroundModel?.provider === model.provider && foregroundModel.id === model.id;\n\t\t\tconst textToolCallProtocol = this.deps.resolveTextToolCallProtocol(model);\n\t\t\tconst maxTurns = opts.maxTurns;\n\t\t\tlet completedTurns = 0;\n\t\t\tconst loopConfig: AgentLoopConfig = {\n\t\t\t\tmodel,\n\t\t\t\tinteractionMode: \"background\",\n\t\t\t\tmaxTokens: opts.maxTokens,\n\t\t\t\tcacheRetention: opts.cacheRetention,\n\t\t\t\treasoning: thinkingLevel,\n\t\t\t\t// Same synthetic per-lane affinity key as the one-shot path above — never the real sessionId.\n\t\t\t\tsessionId: affinityKey,\n\t\t\t\t...(options.apiKey !== undefined ? { apiKey: options.apiKey } : {}),\n\t\t\t\t...(options.headers !== undefined ? { headers: options.headers } : {}),\n\t\t\t\tgetApiKey: agent.getApiKey,\n\t\t\t\tresolveRequestReasoning: agent.resolveRequestReasoning,\n\t\t\t\ttemperature: textToolCallProtocol ? 0 : undefined,\n\t\t\t\ttextToolCallProtocol,\n\t\t\t\tonTextToolProtocolParse: usesForegroundModel ? agent.onTextToolProtocolParse : undefined,\n\t\t\t\ttransport: agent.transport,\n\t\t\t\tthinkingBudgets: agent.thinkingBudgets,\n\t\t\t\tmaxRetryDelayMs: agent.maxRetryDelayMs,\n\t\t\t\t// This remains independent from an owner-provided turn budget: it stops only repeated\n\t\t\t\t// identical tool calls, so legitimate long-running work can continue until completion.\n\t\t\t\tmaxStallTurns: agent.maxStallTurns,\n\t\t\t\tonRunawayStop: usesForegroundModel ? agent.onRunawayStop : undefined,\n\t\t\t\ttoolExecution: \"sequential\",\n\t\t\t\ttoolArgumentTeachEnabled: agent.toolArgumentTeachEnabled,\n\t\t\t\tonToolArgumentValidation: usesForegroundModel ? agent.onToolArgumentValidation : undefined,\n\t\t\t\ttoolValidationEscalationThreshold: agent.toolValidationEscalationThreshold,\n\t\t\t\tonToolValidationEscalation: usesForegroundModel ? agent.onToolValidationEscalation : undefined,\n\t\t\t\tbeforeToolCall: opts.beforeToolCall,\n\t\t\t\tafterToolCall: opts.afterToolCall,\n\t\t\t\tgetSteeringMessages: opts.getSteeringMessages,\n\t\t\t\tgetFollowUpMessages: opts.getFollowUpMessages,\n\t\t\t\ttransformContext: opts.transformContext,\n\t\t\t\trequestPreflight: opts.requestPreflight,\n\t\t\t\t...(maxTurns === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tshouldStopAfterTurn: () => {\n\t\t\t\t\t\t\t\tcompletedTurns += 1;\n\t\t\t\t\t\t\t\treturn completedTurns >= maxTurns;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\tconvertToLlm: agent.convertToLlm,\n\t\t\t};\n\n\t\t\t// An explicitly supplied surface owns a child tool loop even when it is empty: a model may\n\t\t\t// hallucinate an unavailable tool and must receive the bounded unknown-tool result so it can\n\t\t\t// repair. Only an omitted tools option selects the one-shot completion path.\n\t\t\tif (opts.tools !== undefined) {\n\t\t\t\tconst childContext: AgentContext = {\n\t\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\t\tmessages: [...history],\n\t\t\t\t\ttools: [...opts.tools],\n\t\t\t\t};\n\t\t\t\tconst messages = await runAgentLoop(\n\t\t\t\t\topts.messages,\n\t\t\t\t\tchildContext,\n\t\t\t\t\tloopConfig,\n\t\t\t\t\tasync (event) => {\n\t\t\t\t\t\tif (event.type === \"message_end\") await opts.onMessage?.(event.message as Message, event.origin);\n\t\t\t\t\t},\n\t\t\t\t\topts.signal,\n\t\t\t\t\tagent.streamFn,\n\t\t\t\t);\n\t\t\t\tconst assistantMessages = messages.filter(\n\t\t\t\t\t(message): message is AssistantMessage => message.role === \"assistant\",\n\t\t\t\t);\n\t\t\t\tlet finalAssistant = assistantMessages.at(-1);\n\t\t\t\tif (!finalAssistant) {\n\t\t\t\t\tthrow new Error(\"runIsolatedCompletion: child loop produced no assistant message\");\n\t\t\t\t}\n\n\t\t\t\tconst hasFinalText = finalAssistant.content.some(\n\t\t\t\t\t(content) => content.type === \"text\" && content.text.trim().length > 0,\n\t\t\t\t);\n\t\t\t\tconst endedOnToolCall = finalAssistant.content.some((content) => content.type === \"toolCall\");\n\t\t\t\tif (opts.finalTextPrompt && !hasFinalText && endedOnToolCall && !opts.signal?.aborted) {\n\t\t\t\t\t// A hard turn bound may stop immediately after successful tool execution. Preserve that bound,\n\t\t\t\t\t// then allow exactly one tool-free synthesis call so the gathered work is not thrown away.\n\t\t\t\t\tconst finalizationPrompt: Message = {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: opts.finalTextPrompt,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\tawait opts.onMessage?.(finalizationPrompt);\n\t\t\t\t\tconst finalizationContext: AgentContext = {\n\t\t\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\t\t\tmessages: [...history, ...messages, finalizationPrompt],\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t};\n\t\t\t\t\tconst finalizationStream = await startAgentProviderRequest(\n\t\t\t\t\t\tfinalizationContext,\n\t\t\t\t\t\tloopConfig,\n\t\t\t\t\t\topts.signal,\n\t\t\t\t\t\tagent.streamFn,\n\t\t\t\t\t);\n\t\t\t\t\tfinalAssistant = await finalizationStream.result();\n\t\t\t\t\tawait opts.onMessage?.(finalAssistant);\n\t\t\t\t\tassistantMessages.push(finalAssistant);\n\t\t\t\t\tmessages.push(finalizationPrompt, finalAssistant);\n\t\t\t\t}\n\n\t\t\t\tconst usage = assistantMessages.reduce<Usage>(\n\t\t\t\t\t(total, message) => ({\n\t\t\t\t\t\tinput: total.input + message.usage.input,\n\t\t\t\t\t\toutput: total.output + message.usage.output,\n\t\t\t\t\t\tcacheRead: total.cacheRead + message.usage.cacheRead,\n\t\t\t\t\t\tcacheWrite: total.cacheWrite + message.usage.cacheWrite,\n\t\t\t\t\t\ttotalTokens: total.totalTokens + message.usage.totalTokens,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: total.cost.input + message.usage.cost.input,\n\t\t\t\t\t\t\toutput: total.cost.output + message.usage.cost.output,\n\t\t\t\t\t\t\tcacheRead: total.cost.cacheRead + message.usage.cost.cacheRead,\n\t\t\t\t\t\t\tcacheWrite: total.cost.cacheWrite + message.usage.cost.cacheWrite,\n\t\t\t\t\t\t\ttotal: total.cost.total + message.usage.cost.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst text = finalAssistant.content\n\t\t\t\t\t.filter((content): content is TextContent => content.type === \"text\")\n\t\t\t\t\t.map((content) => content.text)\n\t\t\t\t\t.join(\"\");\n\t\t\t\t// Isolated inputs are Message values and this loop only adds assistant/tool-result messages,\n\t\t\t\t// so the child transcript is safely representable by the public Message[] contract.\n\t\t\t\treturn {\n\t\t\t\t\ttext,\n\t\t\t\t\tusage,\n\t\t\t\t\tstopReason: finalAssistant.stopReason,\n\t\t\t\t\t...(finalAssistant.errorMessage ? { errorMessage: finalAssistant.errorMessage } : {}),\n\t\t\t\t\tmessages: [...history, ...(messages as Message[])],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (const message of opts.messages) await opts.onMessage?.(message);\n\t\t\tconst stream = await startAgentProviderRequest(context, loopConfig, opts.signal, agent.streamFn);\n\t\t\tconst result = await stream.result();\n\t\t\tawait opts.onMessage?.(result);\n\t\t\tconst text = result.content\n\t\t\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t\t\t.map((c) => c.text)\n\t\t\t\t.join(\"\");\n\t\t\tconst usage: Usage = result.usage ?? {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t};\n\t\t\treturn {\n\t\t\t\ttext,\n\t\t\t\tusage,\n\t\t\t\tstopReason: result.stopReason,\n\t\t\t\t...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),\n\t\t\t\tmessages: [...history, ...opts.messages, result],\n\t\t\t};\n\t\t} finally {\n\t\t\tderegisterInFlight();\n\t\t}\n\t}\n\n\t/**\n\t * Explicit compatibility/application seam for an owner-invoked structured reflection pass. This\n\t * method can make an isolated provider request, so automatic current-turn reflection never calls\n\t * it. Demand-gates (zero-I/O), applies resulting writes through the bundled `memory` tool, and\n\t * accounts the explicitly requested pass through the spawned-usage surface.\n\t *\n\t * Returns `null` when the gate skips (or in a child session, which must not learn). The whole pass\n\t * is best-effort: a model/parse error yields no writes, never throws into the caller.\n\t */\n\tasync runReflectionPass(input: {\n\t\tsignals: DemandSignals;\n\t\trecentTurnText: string;\n\t\tmodel?: Model<Api>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tsignal?: AbortSignal;\n\t\t/** Stable id so a duplicate scheduling/retry of the same pass can't double-count its cost. */\n\t\treportId?: string;\n\t\t/** True only when every turn in this pass explicitly asked Pi to remember durable information. */\n\t\texplicitUserMemoryInstruction?: boolean;\n\t}): Promise<ReflectionResult | null> {\n\t\tif (this.deps.isChildSession() || this.deps.isDisposed()) return null;\n\t\tconst plan = decideDemand(input.signals);\n\t\tif (plan.act === \"skip\") return null;\n\n\t\t// Bug #21: tie this background pass to the session lifetime. Disposing the session aborts the\n\t\t// in-flight completion (input.signal can add a more specific abort).\n\t\tconst signal = input.signal\n\t\t\t? AbortSignal.any([input.signal, this.deps.getReflectionSignal()])\n\t\t\t: this.deps.getReflectionSignal();\n\n\t\tconst complete = (systemPrompt: string, userPrompt: string) =>\n\t\t\tthis.runIsolatedCompletion({\n\t\t\t\tsystemPrompt,\n\t\t\t\tmessages: [{ role: \"user\", content: [{ type: \"text\", text: userPrompt }], timestamp: Date.now() }],\n\t\t\t\tmodel: input.model,\n\t\t\t\tthinkingLevel: input.thinkingLevel ?? \"low\",\n\t\t\t\tmaxTokens: plan.tokenBudget,\n\t\t\t\tsignal,\n\t\t\t\t// The reflection system prompt is static (#33) — let the provider cache the prefix so\n\t\t\t\t// repeated passes only pay for the variable tail.\n\t\t\t\tcacheRetention: \"short\",\n\t\t\t\tlaneKind: \"reflection\",\n\t\t\t});\n\n\t\tconst result = await new ReflectionEngine().reflect({\n\t\t\trecentTurnText: input.recentTurnText,\n\t\t\t// Read memory FRESH (not the prefix-cache-frozen system-prompt block) so confront-before-write\n\t\t\t// sees writes made earlier this session, including bounded structured OKF records.\n\t\t\texistingMemory: [\n\t\t\t\tthis.deps.getMemoryManager().buildSystemPromptBlockFresh(),\n\t\t\t\tthis.deps.getFreshOkfMemoryForReflection(),\n\t\t\t]\n\t\t\t\t.filter((block) => block.trim().length > 0)\n\t\t\t\t.join(\"\\n\\n\"),\n\t\t\tplan,\n\t\t\tcomplete,\n\t\t});\n\n\t\t// Bug #21: if the session was disposed while the completion was in flight, do NOT write memory\n\t\t// or skills against the dead session.\n\t\tif (this.deps.isDisposed()) return result;\n\n\t\t// Learning apply policy: every durable write is converted to a proposal, decided by the\n\t\t// learning gate, and audited with a rollback plan. When the policy is explicitly disabled,\n\t\t// legacy direct-apply behavior is preserved — but now leaves audit records with rollback info.\n\t\tconst policy = this.deps.getSettingsManager().getLearningPolicySettings();\n\t\t// The audit id sequence counts STORED snapshots only: it reseeds from the stored count on\n\t\t// every pass, so advancing it for a no-op (which stores nothing) would make later passes\n\t\t// reuse ids — and rollback keys on the id, so a collision blocks or misdirects rollback.\n\t\tlet auditSequence = getLearningAuditSnapshots(this.deps.getSessionManager().getEntries()).length;\n\t\t// G6 evidence strength: durable proposals accumulate observation counts across passes/sessions\n\t\t// so the gate can distinguish a one-off cue from a repeatedly-confirmed lesson. Built once per\n\t\t// pass; every increment is best-effort (store IO must never break reflection).\n\t\tconst observationStore = ObservationStore.forAgentDir(this.deps.getAgentDir());\n\t\tlet writeIndex = 0;\n\t\tfor (const write of result.writes) {\n\t\t\twriteIndex += 1;\n\t\t\tconst proposalId = `${input.reportId ?? \"reflection\"}-w${writeIndex}`;\n\t\t\tconst proposal = proposalFromReflectionWrite(write, proposalId);\n\t\t\tconst plannedRollback = rollbackPlanForReflectionWrite(write);\n\t\t\tlet observations = 1;\n\t\t\tif (policy.enabled) {\n\t\t\t\ttry {\n\t\t\t\t\tobservations = observationStore.increment(observationKey(proposal.layer, proposal.summary));\n\t\t\t\t} catch {\n\t\t\t\t\t// A store read/write failure falls back to a fresh count of 1, which keeps the gate\n\t\t\t\t\t// proposal-first (never spuriously auto-applies) rather than crashing the pass.\n\t\t\t\t\tobservations = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst explicitUserMemoryWrite =\n\t\t\t\tinput.explicitUserMemoryInstruction === true &&\n\t\t\t\t(write.kind === \"memory_add\" || write.kind === \"memory_replace\");\n\t\t\t// Additive skill promotion is the skill counterpart of a memory fact: a repeatable\n\t\t\t// procedure should land as a loadable SKILL.md (overlap audit still holds the write).\n\t\t\t// An owner who enabled auto-apply and omitted \"skill\" from the allow-list keeps that ceiling.\n\t\t\tconst ownerExcludedSkillLayer =\n\t\t\t\tpolicy.enabled && policy.autoApplyEnabled && !policy.allowedAutoApplyLayers.includes(\"skill\");\n\t\t\tconst additiveSkillPromotion = write.kind === \"promote_skill\" && !ownerExcludedSkillLayer;\n\t\t\tlet decision: LearningDecision;\n\t\t\tif (explicitUserMemoryWrite) {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"explicit_user_memory_instruction\",\n\t\t\t\t\tconfidence: 100,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t} else if (additiveSkillPromotion) {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"additive_skill_promotion\",\n\t\t\t\t\tconfidence: policy.reflectionSourceConfidence,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t} else if (policy.enabled) {\n\t\t\t\tdecision = evaluateLearningDecision({\n\t\t\t\t\tproposal,\n\t\t\t\t\tconfidence: policy.reflectionSourceConfidence,\n\t\t\t\t\tobservations,\n\t\t\t\t\t// A replace/remove supersedes an existing durable fact — the reflection engine's\n\t\t\t\t\t// confront-before-write conflict signal — so it routes through approval instead of\n\t\t\t\t\t// silently overwriting prior memory. Additive writes contradict nothing.\n\t\t\t\t\tcontradictions: contradictionsForReflectionWrite(write),\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tautoApplyEnabled: policy.autoApplyEnabled,\n\t\t\t\t\t\tconfidenceThreshold: policy.confidenceThreshold,\n\t\t\t\t\t\tminObservations: policy.minObservations,\n\t\t\t\t\t\tallowedAutoApplyLayers: policy.allowedAutoApplyLayers,\n\t\t\t\t\t\trequireRollbackPlan: policy.requireRollbackPlan,\n\t\t\t\t\t\tautoApplySupersessions: policy.autoApplySupersessions,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"learning_policy_disabled_legacy_apply\",\n\t\t\t\t\tconfidence: 0,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.deps.saveLearningDecisionSnapshot(decision);\n\t\t\t// G3: learning-gate outcome. Codes/numbers only — never the proposal summary/memory text.\n\t\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.learningDecision,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tpayload: {\n\t\t\t\t\tkind: decision.kind,\n\t\t\t\t\treasonCode: decision.reasonCode,\n\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\tconfidence: decision.confidence,\n\t\t\t\t\trequiresApproval: decision.requiresApproval,\n\t\t\t\t},\n\t\t\t});\n\t\t\t// G8: a proposal that needs human sign-off is an approval REQUEST. Codes/layer only —\n\t\t\t// never the proposal summary/memory text (those live only in the audit snapshot).\n\t\t\tif (decision.requiresApproval) {\n\t\t\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.approvalRequest,\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tkind: decision.kind,\n\t\t\t\t\t\treasonCode: decision.reasonCode,\n\t\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\t// An automatic skill promotion the gate would otherwise apply must still clear the same\n\t\t\t// skill_audit overlap check the model-invoked `skillify` tool enforces — otherwise reflection\n\t\t\t// can silently write a near-duplicate SKILL.md. A non-overlapping skill is unaffected\n\t\t\t// (skillPromotionBlock stays undefined) and promotes exactly as before.\n\t\t\tconst skillPromotionBlock =\n\t\t\t\twrite.kind === \"promote_skill\" && decision.kind === \"apply\"\n\t\t\t\t\t? this._checkSkillPromotionOverlap(write)\n\t\t\t\t\t: undefined;\n\n\t\t\t// The gate's decision and the write's actual outcome are two different questions: the memory\n\t\t\t// tool can refuse a write (budget exceeded, drift, threat) via details.success:false without\n\t\t\t// throwing. Capture that outcome instead of assuming \"decision.kind === apply\" means it landed\n\t\t\t// — otherwise a refused write leaves a phantom \"apply\" audit whose rollback later fails\n\t\t\t// not-found (or, worse, misfires against whatever now occupies that text).\n\t\t\tconst applyResult =\n\t\t\t\tdecision.kind === \"apply\" && !skillPromotionBlock\n\t\t\t\t\t? await this._applyReflectionWrite(write, signal)\n\t\t\t\t\t: { applied: false };\n\t\t\tconst writeFailed = decision.kind === \"apply\" && !skillPromotionBlock && !applyResult.applied;\n\t\t\tif (decision.kind !== \"no-op\") {\n\t\t\t\tauditSequence += 1;\n\t\t\t\tappendLearningAuditSnapshot(this.deps.getSessionManager(), {\n\t\t\t\t\tid: `audit-${auditSequence}`,\n\t\t\t\t\tproposalId,\n\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\taction: skillPromotionBlock\n\t\t\t\t\t\t? \"propose\"\n\t\t\t\t\t\t: writeFailed\n\t\t\t\t\t\t\t? \"apply_failed\"\n\t\t\t\t\t\t\t: decision.kind === \"apply\"\n\t\t\t\t\t\t\t\t? \"apply\"\n\t\t\t\t\t\t\t\t: \"propose\",\n\t\t\t\t\tsummary: skillPromotionBlock ? `${proposal.summary} — ${skillPromotionBlock.note}` : proposal.summary,\n\t\t\t\t\treasonCode: skillPromotionBlock\n\t\t\t\t\t\t? skillPromotionBlock.reasonCode\n\t\t\t\t\t\t: writeFailed\n\t\t\t\t\t\t\t? APPLY_WRITE_REFUSED_REASON_CODE\n\t\t\t\t\t\t\t: decision.reasonCode,\n\t\t\t\t\tdecision,\n\t\t\t\t\t// No rollback plan on a failed apply or a held/proposed promotion — nothing durable\n\t\t\t\t\t// landed in either case, so there is nothing to undo.\n\t\t\t\t\trollback:\n\t\t\t\t\t\tdecision.kind === \"apply\" && !skillPromotionBlock && !writeFailed\n\t\t\t\t\t\t\t? (applyResult.rollback ?? plannedRollback)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Account the reflection's spend so it surfaces in the footer roll-up (net-token visibility).\n\t\t// Idempotent on reportId so a retried/duplicated pass cannot double-count.\n\t\tif (result.usage.cost.total > 0 || result.usage.totalTokens > 0) {\n\t\t\tthis.deps.addSpawnedUsage(result.usage, { label: \"reflection\", reportId: input.reportId });\n\t\t}\n\t\treturn result;\n\t}\n\n\tgetLearningAuditRecords(): LearningAuditRecord[] {\n\t\treturn getLearningAuditSnapshots(this.deps.getSessionManager().getEntries());\n\t}\n\n\t/**\n\t * Roll back one applied durable learning change by executing the inverse operation recorded in\n\t * its audit record (memory ops run through the same bundled memory-tool path as the original\n\t * apply; promoted skills are archived). Appends a linked \"rollback\" audit record on success so\n\t * the change history stays complete and a change cannot be rolled back twice.\n\t */\n\tasync rollbackLearningWrite(auditId: string): Promise<{ ok: boolean; reason: string }> {\n\t\tif (this.deps.isDisposed()) return { ok: false, reason: \"session_disposed\" };\n\n\t\tconst audits = this.getLearningAuditRecords();\n\t\tconst audit = audits.find((record) => record.id === auditId);\n\t\tif (!audit) return { ok: false, reason: \"audit_not_found\" };\n\t\tif (audit.action !== \"apply\") return { ok: false, reason: \"not_an_applied_change\" };\n\t\tif (audits.some((record) => record.action === \"rollback\" && record.rollbackOf === auditId)) {\n\t\t\treturn { ok: false, reason: \"already_rolled_back\" };\n\t\t}\n\t\tconst rollback = audit.rollback;\n\t\tif (!rollback) return { ok: false, reason: \"no_rollback_plan\" };\n\n\t\t// Every inverse must be VERIFIED-applied before the rollback audit is appended: a silently\n\t\t// failed inverse that still recorded \"rollback\" would permanently self-lock the change\n\t\t// behind already_rolled_back while the durable write is in fact still live.\n\t\tswitch (rollback.kind) {\n\t\t\tcase \"memory_remove\": {\n\t\t\t\tif (!rollback.target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tif (!(await this._applyReflectionWrite({ kind: \"memory_remove\", target: rollback.target })).applied) {\n\t\t\t\t\treturn { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"memory_restore\": {\n\t\t\t\tif (!rollback.target || rollback.previous === undefined) {\n\t\t\t\t\treturn { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\t}\n\t\t\t\tconst applied = await this._applyReflectionWrite({\n\t\t\t\t\tkind: \"memory_replace\",\n\t\t\t\t\ttarget: rollback.target,\n\t\t\t\t\ttext: rollback.previous,\n\t\t\t\t});\n\t\t\t\tif (!applied.applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"memory_add\": {\n\t\t\t\tif (rollback.previous === undefined) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this._applyReflectionWrite({\n\t\t\t\t\tkind: \"memory_add\",\n\t\t\t\t\tsection: \"MEMORY\",\n\t\t\t\t\ttext: rollback.previous,\n\t\t\t\t});\n\t\t\t\tif (!applied.applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"okf_remove\": {\n\t\t\t\tconst target = parseOkfRollbackTarget(rollback.target);\n\t\t\t\tif (!target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this.deps.rollbackStructuredReflectionWrite({\n\t\t\t\t\t...target,\n\t\t\t\t\texpectedDigest: rollback.expectedDigest,\n\t\t\t\t\tremoveRecord: true,\n\t\t\t\t});\n\t\t\t\tif (!applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"okf_organize\": {\n\t\t\t\tif (!rollback.target || rollback.previous === undefined) {\n\t\t\t\t\treturn { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\t}\n\t\t\t\tconst target = parseOkfRollbackTarget(rollback.target);\n\t\t\t\tif (!target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this.deps.rollbackStructuredReflectionWrite({\n\t\t\t\t\t...target,\n\t\t\t\t\texpectedDigest: rollback.expectedDigest,\n\t\t\t\t\tsourceText: rollback.previous,\n\t\t\t\t\tremoveRecord: rollback.removeOkf === true,\n\t\t\t\t});\n\t\t\t\tif (!applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"archive_skill\": {\n\t\t\t\tif (!rollback.target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tif (!this.deps.archivePromotedSkill(rollback.target)) {\n\t\t\t\t\treturn { ok: false, reason: \"skill_archive_failed\" };\n\t\t\t\t}\n\t\t\t\tthis.deps.refreshLiveSkills?.();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tappendLearningAuditSnapshot(this.deps.getSessionManager(), {\n\t\t\tid: `${audit.id}-rollback`,\n\t\t\tproposalId: audit.proposalId,\n\t\t\tlayer: audit.layer,\n\t\t\taction: \"rollback\",\n\t\t\tsummary: `Rolled back: ${audit.summary}`,\n\t\t\treasonCode: \"user_requested_rollback\",\n\t\t\tdecision: audit.decision,\n\t\t\trollbackOf: audit.id,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t});\n\t\treturn { ok: true, reason: \"rollback_applied\" };\n\t}\n\n\t/**\n\t * Apply one reflection write through the bundled `memory` tool. `memory_replace`/`memory_remove`\n\t * don't carry a target file, so we try MEMORY.md first and fall back to USER.md when the substring\n\t * isn't found there. Never throws (reflection must never break a turn); returns whether the write\n\t * actually applied so callers that MUST know — rollback's once-only accounting — can react instead\n\t * of recording a success that never happened.\n\t */\n\tprivate async _applyReflectionWrite(write: ReflectionWrite, signal?: AbortSignal): Promise<ReflectionApplyResult> {\n\t\t// R7 memory-to-behavior: a recurring procedure is compiled into an executable skill file rather\n\t\t// than stored as a flat fact. Written under the agent skills dir so it loads like any user skill.\n\t\tif (write.kind === \"promote_skill\") {\n\t\t\tconst promoted = this._promoteReflectionSkill(write.name, write.description, write.body);\n\t\t\tif (promoted) this.deps.refreshLiveSkills?.();\n\t\t\treturn { applied: promoted };\n\t\t}\n\t\tif (write.kind === \"okf_add\" || write.kind === \"okf_organize\") {\n\t\t\ttry {\n\t\t\t\tconst result = await this.deps.applyStructuredReflectionWrite(write, signal);\n\t\t\t\tif (!result.applied || result.digest === undefined) return { applied: false };\n\t\t\t\treturn {\n\t\t\t\t\tapplied: true,\n\t\t\t\t\trollback:\n\t\t\t\t\t\twrite.kind === \"okf_add\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tkind: \"okf_remove\",\n\t\t\t\t\t\t\t\t\ttarget: `${write.type}\\0${write.title}`,\n\t\t\t\t\t\t\t\t\texpectedDigest: result.digest,\n\t\t\t\t\t\t\t\t\tinstructions: \"Remove only the exact structured OKF record created by this reflection.\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tkind: \"okf_organize\",\n\t\t\t\t\t\t\t\t\ttarget: `${write.type}\\0${write.title}`,\n\t\t\t\t\t\t\t\t\tprevious: write.sourceText,\n\t\t\t\t\t\t\t\t\texpectedDigest: result.digest,\n\t\t\t\t\t\t\t\t\tremoveOkf: result.created,\n\t\t\t\t\t\t\t\t\tinstructions:\n\t\t\t\t\t\t\t\t\t\t\"Restore the exact hot-memory source first, then remove only the OKF record created by this reflection.\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn { applied: false };\n\t\t\t}\n\t\t}\n\n\t\ttype MemResult = { details?: { success?: boolean; error?: string } };\n\t\ttype MemExec = (\n\t\t\ttoolCallId: string,\n\t\t\tparams: {\n\t\t\t\taction: string;\n\t\t\t\ttarget: string;\n\t\t\t\tcontent?: string;\n\t\t\t\toldContent?: string;\n\t\t\t\ttype?: string;\n\t\t\t\ttitle?: string;\n\t\t\t\tdescription?: string;\n\t\t\t\tscope?: string;\n\t\t\t\ttags?: string[];\n\t\t\t\tevidenceRefs?: string[];\n\t\t\t},\n\t\t\tsignal: AbortSignal | undefined,\n\t\t\tonUpdate: undefined,\n\t\t\tctx: undefined,\n\t\t) => Promise<MemResult>;\n\t\tconst memTool = this.deps\n\t\t\t.getMemoryManager()\n\t\t\t.getToolDefinitions()\n\t\t\t.find((t) => t.name === \"memory\");\n\t\tconst exec = memTool?.execute as unknown as MemExec | undefined;\n\t\tif (!exec) return { applied: false };\n\n\t\tconst run = (params: Parameters<MemExec>[1]) => exec(\"reflection\", params, signal, undefined, undefined);\n\n\t\tif (write.kind === \"memory_add\") {\n\t\t\ttry {\n\t\t\t\tconst res = await run({\n\t\t\t\t\taction: \"add\",\n\t\t\t\t\ttarget: write.section === \"USER\" ? \"user\" : \"memory\",\n\t\t\t\t\tcontent: write.text,\n\t\t\t\t});\n\t\t\t\treturn { applied: res?.details?.success === true };\n\t\t\t} catch {\n\t\t\t\t// best-effort; reflection writes must never throw into the turn loop\n\t\t\t\treturn { applied: false };\n\t\t\t}\n\t\t}\n\n\t\t// replace / remove carry no target file — try MEMORY.md, then USER.md. The memory tool reports\n\t\t// outcomes via `details.success` (it catches its own errors rather than throwing). Only a\n\t\t// genuine \"not found in the file\" justifies trying the other file; a real failure for a file\n\t\t// (budget exceeded / drift) must NOT fall through and mutate the wrong target.\n\t\tfor (const target of [\"memory\", \"user\"] as const) {\n\t\t\ttry {\n\t\t\t\tconst params =\n\t\t\t\t\twrite.kind === \"memory_replace\"\n\t\t\t\t\t\t? { action: \"replace\", target, oldContent: write.target, content: write.text }\n\t\t\t\t\t\t: { action: \"remove\", target, oldContent: write.target };\n\t\t\t\tconst res = await run(params);\n\t\t\t\tif (res?.details?.success === true) return { applied: true }; // applied\n\t\t\t\tif (!/not found/i.test(String(res?.details?.error ?? \"\"))) return { applied: false }; // real failure\n\t\t\t\t// substring simply absent from this file — try the next target\n\t\t\t} catch {\n\t\t\t\t// defensive: if the tool ever does throw, try the next target\n\t\t\t}\n\t\t}\n\t\treturn { applied: false };\n\t}\n\n\t/**\n\t * The same skill_audit overlap check the model-invoked `skillify` tool enforces\n\t * (tools/skillify.ts → tools/skill-audit.ts's `runSkillAudit`), run before an AUTOMATIC promotion\n\t * so the reflection engine can never silently write a near-duplicate SKILL.md. Reuses the audit\n\t * seam unchanged (never duplicated) against the same already-loaded skills universe skillify\n\t * compares a draft against. Returns a block reason when the draft overlaps an existing skill above\n\t * the audit's own similarity threshold, or when the audit itself fails (the promotion is held, not\n\t * written unaudited); undefined when clear to promote. Never throws — mirrors every other\n\t * best-effort check in this file.\n\t */\n\tprivate _checkSkillPromotionOverlap(write: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tbody: string;\n\t}): { reasonCode: string; note: string } | undefined {\n\t\ttry {\n\t\t\tconst cwd = this.deps.getCwd?.() ?? process.cwd();\n\t\t\tconst audit = runSkillAudit(\n\t\t\t\tcwd,\n\t\t\t\twrite,\n\t\t\t\tthis.deps.getSkillsForAudit?.(),\n\t\t\t\tundefined,\n\t\t\t\tDEFAULT_BOUNDED_SKILL_AUDIT_LIMITS,\n\t\t\t);\n\t\t\tif (audit.truncated) {\n\t\t\t\treturn {\n\t\t\t\t\treasonCode: SKILL_AUDIT_UNAVAILABLE_REASON_CODE,\n\t\t\t\t\tnote: \"skill overlap audit exceeded its bounded universe; promotion held rather than written unaudited\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst overlap = audit.nearDuplicates.find((d) => d.a === \"[draft]\" || d.b === \"[draft]\");\n\t\t\tif (!overlap) return undefined;\n\t\t\tconst otherPath = overlap.a === \"[draft]\" ? overlap.b : overlap.a;\n\t\t\t// Every skill file is named \"SKILL.md\" — unlike skillify's own display formatter (which takes\n\t\t\t// the path's last segment and always shows that literal filename), look up the declared\n\t\t\t// frontmatter name so the proposal actually names the skill it overlaps with.\n\t\t\tconst otherName = audit.skills.find((s) => s.path === otherPath)?.name ?? otherPath;\n\t\t\treturn {\n\t\t\t\treasonCode: SKILL_OVERLAP_CONSOLIDATION_REASON_CODE,\n\t\t\t\tnote: `overlaps existing skill \"${otherName}\" (${(overlap.similarity * 100).toFixed(0)}% similar) — consolidation proposed instead of a duplicate write`,\n\t\t\t};\n\t\t} catch {\n\t\t\t// Bounded, observable degradation via the promote path's existing error-reporting shape: an\n\t\t\t// audit failure must never throw into the reflection pass, but it also must not silently\n\t\t\t// fall through to an unaudited write — hold the promotion and record why.\n\t\t\treturn {\n\t\t\t\treasonCode: SKILL_AUDIT_UNAVAILABLE_REASON_CODE,\n\t\t\t\tnote: \"skill overlap audit failed; promotion held rather than written unaudited\",\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * R7: write a reflection-promoted skill as `<agentDir>/skills/<name>/SKILL.md` so it loads like any\n\t * user skill. Best-effort; never clobbers an existing (hand-authored) skill of the same name. The\n\t * overlap audit runs at the call site in {@link runReflectionPass} — a write only reaches here\n\t * once the draft has already cleared it.\n\t */\n\tprivate _promoteReflectionSkill(rawName: string, description: string, body: string): boolean {\n\t\tconst name = rawName\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 64);\n\t\tif (!name || !body.trim()) return false;\n\t\ttry {\n\t\t\tconst dir = join(this.deps.getAgentDir(), \"skills\", name);\n\t\t\tconst file = join(dir, \"SKILL.md\");\n\t\t\tif (existsSync(file)) return false; // do not overwrite an existing skill\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\tconst safeDescription = description.replace(/[\\r\\n]+/g, \" \").trim();\n\t\t\t// `promoted: true` marks this as reflection-generated so the curator (#32) can lifecycle-manage\n\t\t\t// it (archive/consolidate) WITHOUT ever touching hand-authored user skills.\n\t\t\tconst content = `---\\nname: ${name}\\ndescription: ${safeDescription}\\npromoted: true\\n---\\n\\n<!-- Auto-generated by the reflection engine (R7 memory-to-behavior). Review and refine. -->\\n\\n${body.trim()}\\n`;\n\t\t\twriteFileSync(file, content, \"utf-8\");\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// promotion must never break a turn\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reflection-controller.js","sourceRoot":"","sources":["../../src/core/reflection-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Root-session reflection cue + explicit learning-write controller.\n *\n * Automatic reflection is a hidden cue in the root orchestrator's ordinary provider turn. This\n * controller never schedules an automatic provider request. The isolated completion and structured\n * reflection pass remain explicit compatibility/application seams for owner-invoked callers. Every\n * durable effect goes through the bundled memory tool, the session log (via deps), or the skills dir.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Agent } from \"@caupulican/pi-agent-core/agent\";\nimport { runAgentLoop, startAgentProviderRequest } from \"@caupulican/pi-agent-core/agent-loop\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/session\";\nimport type { AgentContext, AgentLoopConfig, AgentMessage, ThinkingLevel } from \"@caupulican/pi-agent-core/types\";\nimport { resolveModelThinkingLevel } from \"@caupulican/pi-ai/models\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTextContent,\n\tUsage,\n} from \"@caupulican/pi-ai/types\";\nimport {\n\tcomputeLaneAffinityKey,\n\tDEFAULT_ISOLATED_LANE_KIND,\n\ttype IsolatedCompletionOptions,\n\ttype IsolatedCompletionResult,\n} from \"./agent-session-contracts.ts\";\nimport type { LearningDecision } from \"./autonomy/contracts.ts\";\nimport { AUTONOMY_TELEMETRY_EVENT_TYPES, type AutonomyTelemetryEvent } from \"./autonomy/telemetry-events.ts\";\nimport { PI_OKF_TYPES, type PiOkfType } from \"./context/okf-memory.ts\";\nimport { isCurrentSessionReflectionEnabled, resolveAutoLearnSettings } from \"./learning/auto-learn-settings.ts\";\nimport {\n\ttype DurableLearningClaimToken,\n\ttype DurableLearningCueAttachOutcome,\n\ttype DurableLearningReviewMetadata,\n\ttype DurableLearningState,\n\tisDurableLearningClaimToken,\n\tisDurableLearningReviewMetadata,\n} from \"./learning/durable-learning-state.ts\";\nimport {\n\tAPPLY_WRITE_REFUSED_REASON_CODE,\n\tappendLearningAuditSnapshot,\n\tcontradictionsForReflectionWrite,\n\tgetLearningAuditSnapshots,\n\ttype LearningAuditRecord,\n\tproposalFromReflectionWrite,\n\trollbackPlanForReflectionWrite,\n} from \"./learning/learning-audit.ts\";\nimport { evaluateLearningDecision } from \"./learning/learning-gate.ts\";\nimport { ObservationStore, observationKey } from \"./learning/observation-store.ts\";\nimport {\n\ttype DemandSignals,\n\tdecideDemand,\n\tReflectionEngine,\n\ttype ReflectionResult,\n\ttype ReflectionWrite,\n} from \"./learning/reflection-engine.ts\";\nimport { analyzeReflectionTurn, type ReflectionTurnAnalysis } from \"./learning/reflection-turn-analysis.ts\";\nimport type { MemoryManager } from \"./memory/memory-manager.ts\";\nimport type {\n\tStructuredReflectionApplyResult,\n\tStructuredReflectionRollback,\n\tStructuredReflectionWrite,\n} from \"./memory/providers/file-store.ts\";\nimport type { ModelRegistry } from \"./model-registry.ts\";\nimport { registerInFlightWork } from \"./reload-blockers.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { DEFAULT_BOUNDED_SKILL_AUDIT_LIMITS, runSkillAudit } from \"./tools/skill-audit.ts\";\n\nexport interface ReflectionControllerDeps {\n\t/** Current session model (fallback for an isolated call that omits its own model). */\n\tgetModel(): Model<Api> | undefined;\n\t/** The underlying agent — its `streamFn` runs the isolated completion. */\n\tgetAgent(): Agent;\n\t/** True when the session's stream fn is the raw `streamSimple` provider (auth must be injected). */\n\tisRawStreamSimple(): boolean;\n\t/** Model registry for API-key/header resolution on the raw-provider path. */\n\tgetModelRegistry(): ModelRegistry;\n\t/** Memory subsystem — the bundled `memory` tool applies durable writes; fresh block feeds reflection. */\n\tgetMemoryManager(): MemoryManager;\n\t/** Fresh bounded structured OKF snapshot, read at reflection time for confront-before-write. */\n\tgetFreshOkfMemoryForReflection(): string;\n\t/** Main-orchestrator-only structured memory mutation port. */\n\tapplyStructuredReflectionWrite(\n\t\twrite: StructuredReflectionWrite,\n\t\tsignal?: AbortSignal,\n\t): Promise<StructuredReflectionApplyResult>;\n\t/** Main-orchestrator-only inverse for an audited structured write. */\n\trollbackStructuredReflectionWrite(rollback: StructuredReflectionRollback, signal?: AbortSignal): Promise<boolean>;\n\t/** Settings — the learning-apply policy (gate thresholds, auto-apply layers) is read here. */\n\tgetSettingsManager(): SettingsManager;\n\t/** Session log — audit snapshots and learning-audit reads go through this. */\n\tgetSessionManager(): SessionManager;\n\t/** Agent dir — reflection-promoted skills are written under `<agentDir>/skills/`. */\n\tgetAgentDir(): string;\n\t/** Child sessions must not learn — the pass returns null for them. */\n\tisChildSession(): boolean;\n\t/** Disposal short-circuits: no completion, no writes against a dead session. */\n\tisDisposed(): boolean;\n\t/** Session-lifetime abort signal — aborts an in-flight reflection completion on dispose. */\n\tgetReflectionSignal(): AbortSignal;\n\t/** Archive a promoted skill (rollback of a `promote_skill` write). */\n\tarchivePromotedSkill(name: string): boolean;\n\t/** Make a just-written or archived skill visible to this session's skill vault. */\n\trefreshLiveSkills?(): void;\n\t/** G3/G8 autonomy telemetry sink for learning-gate outcomes and approval requests. */\n\temitAutonomyTelemetry(event: AutonomyTelemetryEvent): void;\n\t/** Account the reflection pass's token spend into the cost roll-up (idempotent on reportId). */\n\taddSpawnedUsage(\n\t\tusage: Usage,\n\t\topts?: { label?: string; sourceSessionId?: string; reportId?: string },\n\t): string | undefined;\n\t/** Persist a learning-gate decision snapshot to the session log. */\n\tsaveLearningDecisionSnapshot(decision: LearningDecision): string;\n\t/** Resolve text-tool fallback for the selected isolated model, not the foreground model. */\n\tresolveTextToolCallProtocol(model: Model<Api>): SimpleStreamOptions[\"textToolCallProtocol\"];\n\t/** Ensure a managed-local model is running/resident before any isolated lane calls it. */\n\tensureModelReady(model: Model<Api>): Promise<void>;\n\t/**\n\t * Session working directory — feeds the skill-overlap audit's project-local skill discovery, the\n\t * same `cwd` the model-invoked `skillify`/`skill_audit` tools already receive (tools/index.ts).\n\t * Optional so a host that has not wired it yet still resolves (falls back to `process.cwd()`,\n\t * mirroring the existing profile-resolution fallback in settings-manager.ts).\n\t */\n\tgetCwd?(): string;\n\t/** Already-loaded root skill universe; avoids a second unbounded filesystem discovery during reflection. */\n\tgetSkillsForAudit?(): readonly Skill[];\n\t/** Root-owned durable version transition state; omitted by legacy or test hosts. */\n\tgetDurableLearningState?(): DurableLearningState | undefined;\n\t/** Installed runtime identity used only for root-owned durable transition detection. */\n\tgetRuntimeVersion?(): string | undefined;\n\t/** Versioned durable-memory interpretation policy. */\n\tgetMemoryPolicyVersion?(): string | undefined;\n\t/** Bounded host warning sink for fail-safe state degradation. */\n\twarn?(message: string): void;\n}\n\n// reasonCode when an automatic skill promotion is blocked by an overlap with an existing skill\n// (skill_audit's similarity threshold) and routed to a consolidation proposal instead of a blind write.\nexport const SKILL_OVERLAP_CONSOLIDATION_REASON_CODE = \"skill_overlap_consolidation_proposed\";\n// reasonCode when the overlap audit itself fails — the promotion is held (not written unaudited)\n// rather than silently skipping the check.\nexport const SKILL_AUDIT_UNAVAILABLE_REASON_CODE = \"skill_audit_unavailable\";\n\nexport const CURRENT_TURN_REFLECTION_CUSTOM_TYPE = \"reflection_cue\";\nexport const CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE = \"reflection_cue_state\";\n\nexport type CurrentTurnReflectionTrigger = \"root-turn\" | \"version-change\" | Exclude<DemandSignals[\"trigger\"], \"none\">;\n\nexport interface CurrentTurnReflectionCueState {\n\tversion: 1;\n\trevision: number;\n\tcueId: string;\n\tstatus: \"pending\" | \"consumed\" | \"dismissed\";\n\ttriggers: CurrentTurnReflectionTrigger[];\n\tcreatedAt: string;\n\tupdatedAt: string;\n\t/** Provider-hidden token proving exact ownership of one version transition. */\n\tversionChange?: {\n\t\ttoken: DurableLearningClaimToken;\n\t\tmetadata: DurableLearningReviewMetadata;\n\t};\n\t/** Provider-hidden identity of the currently accepted cue-bearing request. */\n\tactiveRunToken?: string;\n}\n\nexport interface CurrentTurnReflectionCuePlan {\n\tmessage: AgentMessage;\n\tisCurrent(): boolean;\n\tcommit(): void;\n}\n\nconst CURRENT_TURN_REFLECTION_CUE = [\n\t\"Root reflection contract for this current turn:\",\n\t\"- Decide during this same turn whether the request or resulting evidence warrants durable learning.\",\n\t\"- When warranted, confront existing memory first, then use this root session's memory or skill tools now.\",\n\t\"- Route canonical project semantics and evidence to OKF; keep ICM/workflow context as status plus OKF references, never duplicated project truth.\",\n\t\"- Route stable collaborator preferences to USER, compact hot facts to MEMORY, and reusable procedures to skills.\",\n\t\"- Do not defer reflection, request another model turn, call an isolated completion, or launch a background learner or worker for reflection.\",\n\t\"- When nothing durable is warranted, continue normally and do not mention this cue.\",\n].join(\"\\n\");\n\nconst CURRENT_TURN_REFLECTION_TRIGGERS = new Set<CurrentTurnReflectionTrigger>([\n\t\"root-turn\",\n\t\"version-change\",\n\t\"complex\",\n\t\"corrective\",\n\t\"durable\",\n\t\"session-end\",\n]);\n\nfunction parseCurrentTurnReflectionCueState(value: unknown): CurrentTurnReflectionCueState | undefined {\n\tif (!value || typeof value !== \"object\") return undefined;\n\tconst candidate = value as Partial<CurrentTurnReflectionCueState>;\n\tif (\n\t\tcandidate.version !== 1 ||\n\t\ttypeof candidate.revision !== \"number\" ||\n\t\t!Number.isSafeInteger(candidate.revision) ||\n\t\tcandidate.revision < 1 ||\n\t\ttypeof candidate.cueId !== \"string\" ||\n\t\t(candidate.status !== \"pending\" && candidate.status !== \"consumed\" && candidate.status !== \"dismissed\") ||\n\t\t!Array.isArray(candidate.triggers) ||\n\t\tcandidate.triggers.length === 0 ||\n\t\tcandidate.triggers.some((trigger) => !CURRENT_TURN_REFLECTION_TRIGGERS.has(trigger)) ||\n\t\ttypeof candidate.createdAt !== \"string\" ||\n\t\ttypeof candidate.updatedAt !== \"string\" ||\n\t\t(candidate.activeRunToken !== undefined && typeof candidate.activeRunToken !== \"string\") ||\n\t\t(candidate.versionChange !== undefined &&\n\t\t\t(!candidate.versionChange ||\n\t\t\t\t!isDurableLearningClaimToken(candidate.versionChange.token) ||\n\t\t\t\t!isDurableLearningReviewMetadata(candidate.versionChange.metadata)))\n\t) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tversion: 1,\n\t\trevision: candidate.revision,\n\t\tcueId: candidate.cueId,\n\t\tstatus: candidate.status,\n\t\ttriggers: [...new Set(candidate.triggers)],\n\t\tcreatedAt: candidate.createdAt,\n\t\tupdatedAt: candidate.updatedAt,\n\t\t...(candidate.versionChange\n\t\t\t? {\n\t\t\t\t\tversionChange: {\n\t\t\t\t\t\ttoken: { ...candidate.versionChange.token },\n\t\t\t\t\t\tmetadata: { ...candidate.versionChange.metadata },\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(candidate.activeRunToken ? { activeRunToken: candidate.activeRunToken } : {}),\n\t};\n}\n\nfunction versionClaimTokensMatch(left: DurableLearningClaimToken, right: DurableLearningClaimToken): boolean {\n\treturn (\n\t\tleft.transitionId === right.transitionId &&\n\t\tleft.claimId === right.claimId &&\n\t\tleft.ownerId === right.ownerId &&\n\t\tleft.runtimeVersion === right.runtimeVersion &&\n\t\tleft.memoryPolicyVersion === right.memoryPolicyVersion\n\t);\n}\n\nfunction hasStrictSuccessfulAssistantTerminal(messages: AgentMessage[]): boolean {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (message.role !== \"assistant\") continue;\n\t\tif (message.stopReason !== \"stop\" || message.errorMessage) return false;\n\t\treturn message.content.some((part) => part.type === \"text\" && part.text.trim().length > 0);\n\t}\n\treturn false;\n}\n\ninterface ReflectionApplyResult {\n\tapplied: boolean;\n\trollback?: LearningAuditRecord[\"rollback\"];\n}\n\nfunction parseOkfRollbackTarget(target: string | undefined): { type: PiOkfType; title: string } | undefined {\n\tif (!target) return undefined;\n\tconst separator = target.indexOf(\"\\0\");\n\tif (separator <= 0 || separator === target.length - 1) return undefined;\n\tconst type = target.slice(0, separator);\n\tif (!PI_OKF_TYPES.includes(type as PiOkfType)) return undefined;\n\treturn { type: type as PiOkfType, title: target.slice(separator + 1) };\n}\n\nexport class ReflectionController {\n\tprivate readonly deps: ReflectionControllerDeps;\n\tprivate readonly unsubscribeSettingsChanges: () => void;\n\tprivate readonly durableLearningOwnerId = randomUUID();\n\tprivate readonly emittedWarningCodes = new Set<string>();\n\tprivate cueStateCacheInitialized = false;\n\tprivate cueStateCache: CurrentTurnReflectionCueState | undefined;\n\tprivate activeRunToken: string | undefined;\n\n\tconstructor(deps: ReflectionControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.unsubscribeSettingsChanges = deps.getSettingsManager().subscribeChanges(() => {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t});\n\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t}\n\n\tdispose(): void {\n\t\tthis.dismissCurrentTurnCue();\n\t\tthis.unsubscribeSettingsChanges();\n\t}\n\n\tprivate isAutomaticReflectionEnabled(): boolean {\n\t\tconst settingsManager = this.deps.getSettingsManager();\n\t\tconst settings = resolveAutoLearnSettings(\n\t\t\tsettingsManager.getAutonomySettings().mode,\n\t\t\tsettingsManager.getAutoLearnSettings(),\n\t\t);\n\t\treturn isCurrentSessionReflectionEnabled(settings) && !this.deps.isChildSession() && !this.deps.isDisposed();\n\t}\n\n\t/** Latest durable cue snapshot on the active session branch; custom state never enters model context. */\n\tgetCurrentTurnCueState(): CurrentTurnReflectionCueState | undefined {\n\t\tif (this.cueStateCacheInitialized) return this.cueStateCache;\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tlet fromId: string | undefined;\n\t\twhile (true) {\n\t\t\tconst entry = sessionManager.getLatestCustomEntryOnBranch(CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE, fromId);\n\t\t\tif (!entry) break;\n\t\t\tconst state = parseCurrentTurnReflectionCueState(entry.data);\n\t\t\tif (state) {\n\t\t\t\tthis.cueStateCache = state;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!entry.parentId) break;\n\t\t\tfromId = entry.parentId;\n\t\t}\n\t\tthis.cueStateCacheInitialized = true;\n\t\treturn this.cueStateCache;\n\t}\n\n\t/** Branch/session navigation invalidates the lazy latest-state index; ordinary appends do not. */\n\tinvalidateCurrentTurnCueStateCache(options: { releaseActiveClaim?: boolean } = {}): void {\n\t\tif (options.releaseActiveClaim) {\n\t\t\tconst current = this.cueStateCacheInitialized ? this.cueStateCache : undefined;\n\t\t\tconst isActive =\n\t\t\t\tcurrent?.status === \"pending\" ||\n\t\t\t\t(current?.status === \"consumed\" &&\n\t\t\t\t\t!!current.activeRunToken &&\n\t\t\t\t\tcurrent.activeRunToken === this.activeRunToken);\n\t\t\tif (isActive && current?.versionChange) {\n\t\t\t\tthis.deps.getDurableLearningState?.()?.releaseClaim(current.versionChange.token);\n\t\t\t}\n\t\t\tthis.activeRunToken = undefined;\n\t\t}\n\t\tthis.cueStateCacheInitialized = false;\n\t\tthis.cueStateCache = undefined;\n\t}\n\n\tprivate persistCurrentTurnCueState(state: CurrentTurnReflectionCueState): void {\n\t\tthis.deps.getSessionManager().appendCustomEntry(CURRENT_TURN_REFLECTION_STATE_CUSTOM_TYPE, state);\n\t\tthis.cueStateCache = state;\n\t\tthis.cueStateCacheInitialized = true;\n\t}\n\n\tprivate warnOnce(code: string, message: string): void {\n\t\tif (this.emittedWarningCodes.has(code)) return;\n\t\tthis.emittedWarningCodes.add(code);\n\t\tthis.deps.warn?.(message);\n\t}\n\n\tprivate dismissCurrentTurnCue(): void {\n\t\tconst current = this.getCurrentTurnCueState();\n\t\tconst isActive =\n\t\t\tcurrent?.status === \"pending\" ||\n\t\t\t(current?.status === \"consumed\" && !!current.activeRunToken && current.activeRunToken === this.activeRunToken);\n\t\tif (!current || !isActive) return;\n\t\ttry {\n\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t...current,\n\t\t\t\trevision: current.revision + 1,\n\t\t\t\tstatus: \"dismissed\",\n\t\t\t\tactiveRunToken: undefined,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t});\n\t\t} catch {\n\t\t\tthis.warnOnce(\n\t\t\t\t\"cue-dismiss-failed\",\n\t\t\t\t\"Automatic reflection cue dismissal failed; its durable claim will expire safely.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis.activeRunToken = undefined;\n\t\tif (current.versionChange) this.deps.getDurableLearningState?.()?.releaseClaim(current.versionChange.token);\n\t}\n\n\tprivate synchronizeCurrentTurnCueWithSettings(): void {\n\t\tif (this.isAutomaticReflectionEnabled()) return;\n\t\tthis.dismissCurrentTurnCue();\n\t}\n\n\tprivate attachCurrentTurnCue(\n\t\ttrigger: CurrentTurnReflectionTrigger,\n\t\tversionChange?: { token: DurableLearningClaimToken; metadata: DurableLearningReviewMetadata },\n\t\tclearVersionChange = false,\n\t): DurableLearningCueAttachOutcome {\n\t\tif (!this.isAutomaticReflectionEnabled()) {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t\treturn \"disabled\";\n\t\t}\n\t\ttry {\n\t\t\tconst current = this.getCurrentTurnCueState();\n\t\t\tconst updatedAt = new Date().toISOString();\n\t\t\tif (current?.status === \"pending\") {\n\t\t\t\tif (clearVersionChange && current.versionChange) {\n\t\t\t\t\tconst triggers: CurrentTurnReflectionTrigger[] = current.triggers.filter(\n\t\t\t\t\t\t(existing) => existing !== \"version-change\",\n\t\t\t\t\t);\n\t\t\t\t\tif (!triggers.includes(trigger)) triggers.push(trigger);\n\t\t\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\trevision: current.revision + 1,\n\t\t\t\t\t\ttriggers,\n\t\t\t\t\t\tversionChange: undefined,\n\t\t\t\t\t\tupdatedAt,\n\t\t\t\t\t});\n\t\t\t\t\treturn \"replaced-stale\";\n\t\t\t\t}\n\t\t\t\tconst alreadyHasTrigger = current.triggers.includes(trigger);\n\t\t\t\tconst alreadyHasVersionTrigger = !versionChange || current.triggers.includes(\"version-change\");\n\t\t\t\tconst sameVersionClaim =\n\t\t\t\t\t!versionChange ||\n\t\t\t\t\t(!!current.versionChange && versionClaimTokensMatch(current.versionChange.token, versionChange.token));\n\t\t\t\tif (alreadyHasTrigger && alreadyHasVersionTrigger && sameVersionClaim) return \"coalesced\";\n\t\t\t\tconst replacingVersionClaim = !!versionChange && !!current.versionChange && !sameVersionClaim;\n\t\t\t\tconst triggers = [...current.triggers];\n\t\t\t\tif (!triggers.includes(trigger)) triggers.push(trigger);\n\t\t\t\tif (versionChange && !triggers.includes(\"version-change\")) triggers.push(\"version-change\");\n\t\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t\t...current,\n\t\t\t\t\trevision: current.revision + 1,\n\t\t\t\t\ttriggers,\n\t\t\t\t\tupdatedAt,\n\t\t\t\t\t...(versionChange ? { versionChange } : {}),\n\t\t\t\t});\n\t\t\t\treturn replacingVersionClaim ? \"replaced-stale\" : \"attached\";\n\t\t\t}\n\t\t\tconst triggers: CurrentTurnReflectionTrigger[] = [trigger];\n\t\t\tif (versionChange && !triggers.includes(\"version-change\")) triggers.push(\"version-change\");\n\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\tversion: 1,\n\t\t\t\trevision: 1,\n\t\t\t\tcueId: randomUUID(),\n\t\t\t\tstatus: \"pending\",\n\t\t\t\ttriggers,\n\t\t\t\tcreatedAt: updatedAt,\n\t\t\t\tupdatedAt,\n\t\t\t\t...(versionChange ? { versionChange } : {}),\n\t\t\t});\n\t\t\treturn \"attached\";\n\t\t} catch {\n\t\t\tthis.warnOnce(\n\t\t\t\t\"cue-attach-failed\",\n\t\t\t\t\"Automatic reflection cue persistence failed; durable learning was not claimed.\",\n\t\t\t);\n\t\t\treturn \"failed\";\n\t\t}\n\t}\n\n\t/** Persist one logical ordinary cue without exposing claim metadata to callers. */\n\tqueueCurrentTurnCue(trigger: CurrentTurnReflectionTrigger): boolean {\n\t\tconst outcome = this.attachCurrentTurnCue(trigger);\n\t\treturn outcome === \"attached\" || outcome === \"replaced-stale\";\n\t}\n\n\t/**\n\t * Root-turn entrypoint: reconcile installed runtime/policy state and atomically attach any exact\n\t * version claim to the same provider cue. Fail-safe state faults degrade to an ordinary root cue.\n\t */\n\tqueueExternalRootTurnCue(): DurableLearningCueAttachOutcome {\n\t\tif (!this.isAutomaticReflectionEnabled()) {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t\treturn \"disabled\";\n\t\t}\n\t\tconst state = this.deps.getDurableLearningState?.();\n\t\tconst runtimeVersion = this.deps.getRuntimeVersion?.();\n\t\tconst memoryPolicyVersion = this.deps.getMemoryPolicyVersion?.();\n\t\tif (!state || !runtimeVersion || !memoryPolicyVersion) {\n\t\t\tif (state && (!runtimeVersion || !memoryPolicyVersion)) {\n\t\t\t\tthis.warnOnce(\n\t\t\t\t\t\"version-identity-unavailable\",\n\t\t\t\t\t\"Installed runtime identity is unavailable; continuing with ordinary root reflection only.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn this.attachCurrentTurnCue(\"root-turn\", undefined, true);\n\t\t}\n\t\tconst result = state.reconcileClaimAndAttach(\n\t\t\t{ runtimeVersion, memoryPolicyVersion },\n\t\t\tthis.durableLearningOwnerId,\n\t\t\t(token, metadata) => this.attachCurrentTurnCue(\"root-turn\", { token, metadata }),\n\t\t);\n\t\tif (result.warningCode) {\n\t\t\tthis.warnOnce(\n\t\t\t\tresult.warningCode,\n\t\t\t\t`Durable learning state warning (${result.warningCode}); semantic memory remained unchanged.`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tresult.status === \"attached\" ||\n\t\t\tresult.status === \"coalesced\" ||\n\t\t\tresult.status === \"replaced-stale\" ||\n\t\t\tresult.status === \"disabled\" ||\n\t\t\tresult.status === \"failed\"\n\t\t) {\n\t\t\treturn result.status;\n\t\t}\n\t\treturn this.attachCurrentTurnCue(\"root-turn\", undefined, true);\n\t}\n\n\t/**\n\t * Preview one transient provider-only cue. An accepted cue remains visible across provider-tool\n\t * continuation requests until AgentSession reports one strict terminal success or failure.\n\t */\n\tpreviewCurrentTurnCue(): CurrentTurnReflectionCuePlan | undefined {\n\t\tlet current = this.getCurrentTurnCueState();\n\t\tif (!current || !this.isAutomaticReflectionEnabled()) return undefined;\n\t\tlet pending = current.status === \"pending\";\n\t\tlet continuing =\n\t\t\tcurrent.status === \"consumed\" && !!this.activeRunToken && current.activeRunToken === this.activeRunToken;\n\t\tif (!pending && !continuing) return undefined;\n\t\tif (continuing && current.versionChange) {\n\t\t\tconst renewed = this.deps.getDurableLearningState?.()?.renewClaim(current.versionChange.token) ?? false;\n\t\t\tif (!renewed) {\n\t\t\t\tconst withoutStaleClaim = {\n\t\t\t\t\t...current,\n\t\t\t\t\trevision: current.revision + 1,\n\t\t\t\t\ttriggers: current.triggers.filter((trigger) => trigger !== \"version-change\"),\n\t\t\t\t\tversionChange: undefined,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t} satisfies CurrentTurnReflectionCueState;\n\t\t\t\ttry {\n\t\t\t\t\tthis.persistCurrentTurnCueState(withoutStaleClaim);\n\t\t\t\t\tcurrent = withoutStaleClaim;\n\t\t\t\t\tpending = false;\n\t\t\t\t\tcontinuing = true;\n\t\t\t\t} catch {\n\t\t\t\t\tthis.warnOnce(\n\t\t\t\t\t\t\"cue-stale-claim-removal-failed\",\n\t\t\t\t\t\t\"A stale durable version claim could not be removed from provider cue state; version metadata was withheld.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst cueId = current.cueId;\n\t\tconst revision = current.revision;\n\t\tconst expectedStatus = current.status;\n\t\tconst expectedRunToken = current.activeRunToken;\n\t\tconst versionLine = current.versionChange\n\t\t\t? `\\n- Installed-state transition: ${current.versionChange.metadata.reason}; runtime ${current.versionChange.metadata.previousRuntimeVersion ?? \"unobserved\"} to ${current.versionChange.metadata.runtimeVersion}; memory policy ${current.versionChange.metadata.previousMemoryPolicyVersion ?? \"unobserved\"} to ${current.versionChange.metadata.memoryPolicyVersion}. First observation is audit-only, and version movement alone is never semantic evidence. Revalidate current sources; update only the canonical durable owner when warranted.`\n\t\t\t: \"\";\n\t\tconst message: AgentMessage = {\n\t\t\trole: \"custom\",\n\t\t\tcustomType: CURRENT_TURN_REFLECTION_CUSTOM_TYPE,\n\t\t\tcontent: `${CURRENT_TURN_REFLECTION_CUE}\\n- Pending evidence classes: ${current.triggers.join(\", \")}.${versionLine}`,\n\t\t\tdisplay: false,\n\t\t\tdetails: {\n\t\t\t\tversion: 1,\n\t\t\t\tscope: \"root-current-turn\",\n\t\t\t\tautomaticProviderRequests: 0,\n\t\t\t\tcueId: current.cueId,\n\t\t\t\ttriggers: current.triggers,\n\t\t\t\t...(current.versionChange ? { versionChange: { ...current.versionChange.metadata } } : {}),\n\t\t\t},\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tconst isCurrent = (): boolean => {\n\t\t\tconst latest = this.getCurrentTurnCueState();\n\t\t\treturn (\n\t\t\t\tthis.isAutomaticReflectionEnabled() &&\n\t\t\t\tlatest?.status === expectedStatus &&\n\t\t\t\tlatest.cueId === cueId &&\n\t\t\t\tlatest.revision === revision &&\n\t\t\t\tlatest.activeRunToken === expectedRunToken\n\t\t\t);\n\t\t};\n\t\treturn {\n\t\t\tmessage,\n\t\t\tisCurrent,\n\t\t\tcommit: () => {\n\t\t\t\tif (!isCurrent()) throw new Error(\"Reflection cue changed before provider-plan commit\");\n\t\t\t\tif (expectedStatus === \"consumed\") return;\n\t\t\t\tconst latest = this.getCurrentTurnCueState();\n\t\t\t\tif (!latest) throw new Error(\"Reflection cue disappeared before provider-plan commit\");\n\t\t\t\tconst activeRunToken = randomUUID();\n\t\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t\t...latest,\n\t\t\t\t\trevision: latest.revision + 1,\n\t\t\t\t\tstatus: \"consumed\",\n\t\t\t\t\tactiveRunToken,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t});\n\t\t\t\tthis.activeRunToken = activeRunToken;\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Settle one accepted cue-bearing provider run at its authoritative AgentSession boundary. */\n\tfinishCurrentTurnCue(messages: AgentMessage[], options: { willRetry: boolean }): void {\n\t\tif (!this.isAutomaticReflectionEnabled()) {\n\t\t\tthis.synchronizeCurrentTurnCueWithSettings();\n\t\t\treturn;\n\t\t}\n\t\tconst current = this.getCurrentTurnCueState();\n\t\tif (current?.status !== \"consumed\" || !current.activeRunToken || current.activeRunToken !== this.activeRunToken) {\n\t\t\treturn;\n\t\t}\n\t\tconst state = this.deps.getDurableLearningState?.();\n\t\tif (options.willRetry) {\n\t\t\tlet versionChange = current.versionChange;\n\t\t\tif (versionChange && !state?.renewClaim(versionChange.token)) versionChange = undefined;\n\t\t\ttry {\n\t\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t\t...current,\n\t\t\t\t\trevision: current.revision + 1,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tactiveRunToken: undefined,\n\t\t\t\t\ttriggers: versionChange\n\t\t\t\t\t\t? current.triggers\n\t\t\t\t\t\t: current.triggers.filter((trigger) => trigger !== \"version-change\"),\n\t\t\t\t\tversionChange,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t});\n\t\t\t\tthis.activeRunToken = undefined;\n\t\t\t} catch {\n\t\t\t\tthis.warnOnce(\n\t\t\t\t\t\"cue-retry-failed\",\n\t\t\t\t\t\"Automatic reflection cue retry persistence failed; any durable claim will expire safely.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst success = hasStrictSuccessfulAssistantTerminal(messages);\n\t\ttry {\n\t\t\tthis.persistCurrentTurnCueState({\n\t\t\t\t...current,\n\t\t\t\trevision: current.revision + 1,\n\t\t\t\tactiveRunToken: undefined,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t});\n\t\t\tthis.activeRunToken = undefined;\n\t\t} catch {\n\t\t\tthis.warnOnce(\n\t\t\t\t\"cue-finish-failed\",\n\t\t\t\t\"Automatic reflection cue completion persistence failed; any durable claim will expire safely.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (!current.versionChange || !state) return;\n\t\tconst settled = success\n\t\t\t? state.completeReview(current.versionChange.token)\n\t\t\t: state.releaseClaim(current.versionChange.token);\n\t\tif (!settled) {\n\t\t\tthis.warnOnce(\n\t\t\t\t\"version-claim-settle-failed\",\n\t\t\t\t\"Durable version claim no longer matched its exact transition; no semantic memory state was marked complete.\",\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Pure completed-turn projection used only by deterministic memory synchronization. */\n\tanalyzeCompletedTurn(messages: AgentMessage[]): ReflectionTurnAnalysis {\n\t\tconst settingsManager = this.deps.getSettingsManager();\n\t\tconst settings = resolveAutoLearnSettings(\n\t\t\tsettingsManager.getAutonomySettings().mode,\n\t\t\tsettingsManager.getAutoLearnSettings(),\n\t\t);\n\t\treturn analyzeReflectionTurn(messages, settings.complexTaskToolCalls);\n\t}\n\n\t/**\n\t * Run an explicit LLM completion fully ISOLATED from the main session for bounded host-owned\n\t * consumers. Automatic reflection never reaches this primitive.\n\t *\n\t * Isolation invariants (audited by codex): builds fresh context (no main history), defaults to no\n\t * tools, and passes **no real `sessionId`** — only a deterministic SYNTHETIC cache-affinity key\n\t * (see {@link computeLaneAffinityKey}) derived from `(laneKind, model, systemPrompt)`, which can never\n\t * equal or embed the real session id. A tool-enabled call receives only caller-owned tools and hooks,\n\t * and applies a turn bound only when its owner explicitly supplies one. It cannot mutate `agent.state.messages`, append session entries, or touch the\n\t * foreground tool registry. Mirrors `generateSummary()`'s one-shot mechanics otherwise.\n\t *\n\t * Returns the result even on an error/aborted stop reason; the explicit caller decides whether to\n\t * act, and a model-level error is returned rather than thrown.\n\t */\n\tasync runIsolatedCompletion(opts: IsolatedCompletionOptions): Promise<IsolatedCompletionResult> {\n\t\tif (opts.maxTurns !== undefined && (!Number.isSafeInteger(opts.maxTurns) || opts.maxTurns <= 0)) {\n\t\t\tthrow new Error(\"runIsolatedCompletion: maxTurns must be a positive safe integer when provided\");\n\t\t}\n\t\tconst model = opts.model ?? this.deps.getModel();\n\t\tif (!model) {\n\t\t\tthrow new Error(\"runIsolatedCompletion: no model available\");\n\t\t}\n\t\tawait this.deps.ensureModelReady(model);\n\t\tconst thinkingLevel = resolveModelThinkingLevel(model, opts.thinkingLevel, \"off\");\n\n\t\t// Registered for the full isolated-completion call (one-shot or child-loop) so the\n\t\t// reload gate waits it out — this is the SINGLE choke point every isolated completion in the\n\t\t// codebase runs through (reflection, research/worker/fitness lanes, context-pipeline curation,\n\t\t// model-router judge calls). registerInFlightWork is a pure sync map op (cannot throw), so\n\t\t// placing it as the last statement before `try` still guarantees the matching finally always\n\t\t// runs, on every return path below and on any thrown error.\n\t\tconst deregisterInFlight = registerInFlightWork(\n\t\t\tthis.deps.getAgentDir(),\n\t\t\t\"isolated-completion\",\n\t\t\topts.laneKind ?? DEFAULT_ISOLATED_LANE_KIND,\n\t\t);\n\t\ttry {\n\t\t\t// Fresh, isolated context: explicit messages, caller-owned tools only, nothing from the main session.\n\t\t\tconst history = opts.history ?? [];\n\t\t\tconst context: AgentContext = {\n\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\tmessages: [...history, ...opts.messages],\n\t\t\t\ttools: opts.tools ?? [],\n\t\t\t};\n\n\t\t\t// Isolate the prompt cache from the main session by DELIBERATELY never sending the real\n\t\t\t// sessionId. In its place, a deterministic SYNTHETIC affinity key lets providers with\n\t\t\t// session-affinity headers / prompt_cache_key route repeat calls from the SAME lane (same\n\t\t\t// laneKind+model+systemPrompt) to the same cache-warm backend, without entangling this call\n\t\t\t// with — or leaking any identity of — the main session.\n\t\t\tconst affinityKey = computeLaneAffinityKey(\n\t\t\t\topts.laneKind ?? DEFAULT_ISOLATED_LANE_KIND,\n\t\t\t\tmodel,\n\t\t\t\topts.systemPrompt,\n\t\t\t);\n\t\t\tconst options: SimpleStreamOptions = {\n\t\t\t\tmaxTokens: opts.maxTokens,\n\t\t\t\tsignal: opts.signal,\n\t\t\t\tinteractionMode: \"background\",\n\t\t\t\tcacheRetention: opts.cacheRetention,\n\t\t\t\treasoning: thinkingLevel,\n\t\t\t\tsessionId: affinityKey,\n\t\t\t};\n\n\t\t\t// When streamFn is the raw streamSimple (e.g. in tests), auth must be injected explicitly.\n\t\t\t// Throw only when auth genuinely fails — providers that authenticate without an API key\n\t\t\t// (OAuth, local no-key) legitimately return ok with an undefined apiKey.\n\t\t\tif (this.deps.isRawStreamSimple()) {\n\t\t\t\tconst auth = await this.deps.getModelRegistry().getApiKeyAndHeaders(model);\n\t\t\t\tif (!auth.ok) {\n\t\t\t\t\tthrow new Error(auth.error);\n\t\t\t\t}\n\t\t\t\toptions.apiKey = auth.apiKey;\n\t\t\t\toptions.headers = auth.headers;\n\t\t\t}\n\t\t\tconst agent = this.deps.getAgent();\n\t\t\tconst foregroundModel = agent.state.model;\n\t\t\tconst usesForegroundModel = foregroundModel?.provider === model.provider && foregroundModel.id === model.id;\n\t\t\tconst textToolCallProtocol = this.deps.resolveTextToolCallProtocol(model);\n\t\t\tconst maxTurns = opts.maxTurns;\n\t\t\tlet completedTurns = 0;\n\t\t\tconst loopConfig: AgentLoopConfig = {\n\t\t\t\tmodel,\n\t\t\t\tinteractionMode: \"background\",\n\t\t\t\tmaxTokens: opts.maxTokens,\n\t\t\t\tcacheRetention: opts.cacheRetention,\n\t\t\t\treasoning: thinkingLevel,\n\t\t\t\t// Same synthetic per-lane affinity key as the one-shot path above — never the real sessionId.\n\t\t\t\tsessionId: affinityKey,\n\t\t\t\t...(options.apiKey !== undefined ? { apiKey: options.apiKey } : {}),\n\t\t\t\t...(options.headers !== undefined ? { headers: options.headers } : {}),\n\t\t\t\tgetApiKey: agent.getApiKey,\n\t\t\t\tresolveRequestReasoning: agent.resolveRequestReasoning,\n\t\t\t\ttemperature: textToolCallProtocol ? 0 : undefined,\n\t\t\t\ttextToolCallProtocol,\n\t\t\t\tonTextToolProtocolParse: usesForegroundModel ? agent.onTextToolProtocolParse : undefined,\n\t\t\t\ttransport: agent.transport,\n\t\t\t\tthinkingBudgets: agent.thinkingBudgets,\n\t\t\t\tmaxRetryDelayMs: agent.maxRetryDelayMs,\n\t\t\t\t// This remains independent from an owner-provided turn budget: it stops only repeated\n\t\t\t\t// identical tool calls, so legitimate long-running work can continue until completion.\n\t\t\t\tmaxStallTurns: agent.maxStallTurns,\n\t\t\t\tonRunawayStop: usesForegroundModel ? agent.onRunawayStop : undefined,\n\t\t\t\ttoolExecution: \"sequential\",\n\t\t\t\ttoolArgumentTeachEnabled: agent.toolArgumentTeachEnabled,\n\t\t\t\tonToolArgumentValidation: usesForegroundModel ? agent.onToolArgumentValidation : undefined,\n\t\t\t\ttoolValidationEscalationThreshold: agent.toolValidationEscalationThreshold,\n\t\t\t\tonToolValidationEscalation: usesForegroundModel ? agent.onToolValidationEscalation : undefined,\n\t\t\t\tbeforeToolCall: opts.beforeToolCall,\n\t\t\t\tafterToolCall: opts.afterToolCall,\n\t\t\t\tgetSteeringMessages: opts.getSteeringMessages,\n\t\t\t\tgetFollowUpMessages: opts.getFollowUpMessages,\n\t\t\t\ttransformContext: opts.transformContext,\n\t\t\t\trequestPreflight: opts.requestPreflight,\n\t\t\t\t...(maxTurns === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tshouldStopAfterTurn: () => {\n\t\t\t\t\t\t\t\tcompletedTurns += 1;\n\t\t\t\t\t\t\t\treturn completedTurns >= maxTurns;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\tconvertToLlm: agent.convertToLlm,\n\t\t\t};\n\n\t\t\t// An explicitly supplied surface owns a child tool loop even when it is empty: a model may\n\t\t\t// hallucinate an unavailable tool and must receive the bounded unknown-tool result so it can\n\t\t\t// repair. Only an omitted tools option selects the one-shot completion path.\n\t\t\tif (opts.tools !== undefined) {\n\t\t\t\tconst childContext: AgentContext = {\n\t\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\t\tmessages: [...history],\n\t\t\t\t\ttools: [...opts.tools],\n\t\t\t\t};\n\t\t\t\tconst messages = await runAgentLoop(\n\t\t\t\t\topts.messages,\n\t\t\t\t\tchildContext,\n\t\t\t\t\tloopConfig,\n\t\t\t\t\tasync (event) => {\n\t\t\t\t\t\tif (event.type === \"message_end\") await opts.onMessage?.(event.message as Message, event.origin);\n\t\t\t\t\t},\n\t\t\t\t\topts.signal,\n\t\t\t\t\tagent.streamFn,\n\t\t\t\t);\n\t\t\t\tconst assistantMessages = messages.filter(\n\t\t\t\t\t(message): message is AssistantMessage => message.role === \"assistant\",\n\t\t\t\t);\n\t\t\t\tlet finalAssistant = assistantMessages.at(-1);\n\t\t\t\tif (!finalAssistant) {\n\t\t\t\t\tthrow new Error(\"runIsolatedCompletion: child loop produced no assistant message\");\n\t\t\t\t}\n\n\t\t\t\tconst hasFinalText = finalAssistant.content.some(\n\t\t\t\t\t(content) => content.type === \"text\" && content.text.trim().length > 0,\n\t\t\t\t);\n\t\t\t\tconst endedOnToolCall = finalAssistant.content.some((content) => content.type === \"toolCall\");\n\t\t\t\tif (opts.finalTextPrompt && !hasFinalText && endedOnToolCall && !opts.signal?.aborted) {\n\t\t\t\t\t// A hard turn bound may stop immediately after successful tool execution. Preserve that bound,\n\t\t\t\t\t// then allow exactly one tool-free synthesis call so the gathered work is not thrown away.\n\t\t\t\t\tconst finalizationPrompt: Message = {\n\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\tcontent: opts.finalTextPrompt,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\tawait opts.onMessage?.(finalizationPrompt);\n\t\t\t\t\tconst finalizationContext: AgentContext = {\n\t\t\t\t\t\tsystemPrompt: opts.systemPrompt,\n\t\t\t\t\t\tmessages: [...history, ...messages, finalizationPrompt],\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t};\n\t\t\t\t\tconst finalizationStream = await startAgentProviderRequest(\n\t\t\t\t\t\tfinalizationContext,\n\t\t\t\t\t\tloopConfig,\n\t\t\t\t\t\topts.signal,\n\t\t\t\t\t\tagent.streamFn,\n\t\t\t\t\t);\n\t\t\t\t\tfinalAssistant = await finalizationStream.result();\n\t\t\t\t\tawait opts.onMessage?.(finalAssistant);\n\t\t\t\t\tassistantMessages.push(finalAssistant);\n\t\t\t\t\tmessages.push(finalizationPrompt, finalAssistant);\n\t\t\t\t}\n\n\t\t\t\tconst usage = assistantMessages.reduce<Usage>(\n\t\t\t\t\t(total, message) => ({\n\t\t\t\t\t\tinput: total.input + message.usage.input,\n\t\t\t\t\t\toutput: total.output + message.usage.output,\n\t\t\t\t\t\tcacheRead: total.cacheRead + message.usage.cacheRead,\n\t\t\t\t\t\tcacheWrite: total.cacheWrite + message.usage.cacheWrite,\n\t\t\t\t\t\ttotalTokens: total.totalTokens + message.usage.totalTokens,\n\t\t\t\t\t\tcost: {\n\t\t\t\t\t\t\tinput: total.cost.input + message.usage.cost.input,\n\t\t\t\t\t\t\toutput: total.cost.output + message.usage.cost.output,\n\t\t\t\t\t\t\tcacheRead: total.cost.cacheRead + message.usage.cost.cacheRead,\n\t\t\t\t\t\t\tcacheWrite: total.cost.cacheWrite + message.usage.cost.cacheWrite,\n\t\t\t\t\t\t\ttotal: total.cost.total + message.usage.cost.total,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\t{\n\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst text = finalAssistant.content\n\t\t\t\t\t.filter((content): content is TextContent => content.type === \"text\")\n\t\t\t\t\t.map((content) => content.text)\n\t\t\t\t\t.join(\"\");\n\t\t\t\t// Isolated inputs are Message values and this loop only adds assistant/tool-result messages,\n\t\t\t\t// so the child transcript is safely representable by the public Message[] contract.\n\t\t\t\treturn {\n\t\t\t\t\ttext,\n\t\t\t\t\tusage,\n\t\t\t\t\tstopReason: finalAssistant.stopReason,\n\t\t\t\t\t...(finalAssistant.errorMessage ? { errorMessage: finalAssistant.errorMessage } : {}),\n\t\t\t\t\tmessages: [...history, ...(messages as Message[])],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (const message of opts.messages) await opts.onMessage?.(message);\n\t\t\tconst stream = await startAgentProviderRequest(context, loopConfig, opts.signal, agent.streamFn);\n\t\t\tconst result = await stream.result();\n\t\t\tawait opts.onMessage?.(result);\n\t\t\tconst text = result.content\n\t\t\t\t.filter((c): c is TextContent => c.type === \"text\")\n\t\t\t\t.map((c) => c.text)\n\t\t\t\t.join(\"\");\n\t\t\tconst usage: Usage = result.usage ?? {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t};\n\t\t\treturn {\n\t\t\t\ttext,\n\t\t\t\tusage,\n\t\t\t\tstopReason: result.stopReason,\n\t\t\t\t...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),\n\t\t\t\tmessages: [...history, ...opts.messages, result],\n\t\t\t};\n\t\t} finally {\n\t\t\tderegisterInFlight();\n\t\t}\n\t}\n\n\t/**\n\t * Explicit compatibility/application seam for an owner-invoked structured reflection pass. This\n\t * method can make an isolated provider request, so automatic current-turn reflection never calls\n\t * it. Demand-gates (zero-I/O), applies resulting writes through the bundled `memory` tool, and\n\t * accounts the explicitly requested pass through the spawned-usage surface.\n\t *\n\t * Returns `null` when the gate skips (or in a child session, which must not learn). The whole pass\n\t * is best-effort: a model/parse error yields no writes, never throws into the caller.\n\t */\n\tasync runReflectionPass(input: {\n\t\tsignals: DemandSignals;\n\t\trecentTurnText: string;\n\t\tmodel?: Model<Api>;\n\t\tthinkingLevel?: ThinkingLevel;\n\t\tsignal?: AbortSignal;\n\t\t/** Stable id so a duplicate scheduling/retry of the same pass can't double-count its cost. */\n\t\treportId?: string;\n\t\t/** True only when every turn in this pass explicitly asked Pi to remember durable information. */\n\t\texplicitUserMemoryInstruction?: boolean;\n\t}): Promise<ReflectionResult | null> {\n\t\tif (this.deps.isChildSession() || this.deps.isDisposed()) return null;\n\t\tconst plan = decideDemand(input.signals);\n\t\tif (plan.act === \"skip\") return null;\n\n\t\t// Bug #21: tie this background pass to the session lifetime. Disposing the session aborts the\n\t\t// in-flight completion (input.signal can add a more specific abort).\n\t\tconst signal = input.signal\n\t\t\t? AbortSignal.any([input.signal, this.deps.getReflectionSignal()])\n\t\t\t: this.deps.getReflectionSignal();\n\n\t\tconst complete = (systemPrompt: string, userPrompt: string) =>\n\t\t\tthis.runIsolatedCompletion({\n\t\t\t\tsystemPrompt,\n\t\t\t\tmessages: [{ role: \"user\", content: [{ type: \"text\", text: userPrompt }], timestamp: Date.now() }],\n\t\t\t\tmodel: input.model,\n\t\t\t\tthinkingLevel: input.thinkingLevel ?? \"low\",\n\t\t\t\tmaxTokens: plan.tokenBudget,\n\t\t\t\tsignal,\n\t\t\t\t// The reflection system prompt is static (#33) — let the provider cache the prefix so\n\t\t\t\t// repeated passes only pay for the variable tail.\n\t\t\t\tcacheRetention: \"short\",\n\t\t\t\tlaneKind: \"reflection\",\n\t\t\t});\n\n\t\tconst result = await new ReflectionEngine().reflect({\n\t\t\trecentTurnText: input.recentTurnText,\n\t\t\t// Read memory FRESH (not the prefix-cache-frozen system-prompt block) so confront-before-write\n\t\t\t// sees writes made earlier this session, including bounded structured OKF records.\n\t\t\texistingMemory: [\n\t\t\t\tthis.deps.getMemoryManager().buildSystemPromptBlockFresh(),\n\t\t\t\tthis.deps.getFreshOkfMemoryForReflection(),\n\t\t\t]\n\t\t\t\t.filter((block) => block.trim().length > 0)\n\t\t\t\t.join(\"\\n\\n\"),\n\t\t\tplan,\n\t\t\tcomplete,\n\t\t});\n\n\t\t// Bug #21: if the session was disposed while the completion was in flight, do NOT write memory\n\t\t// or skills against the dead session.\n\t\tif (this.deps.isDisposed()) return result;\n\n\t\t// Learning apply policy: every durable write is converted to a proposal, decided by the\n\t\t// learning gate, and audited with a rollback plan. When the policy is explicitly disabled,\n\t\t// legacy direct-apply behavior is preserved — but now leaves audit records with rollback info.\n\t\tconst policy = this.deps.getSettingsManager().getLearningPolicySettings();\n\t\t// The audit id sequence counts STORED snapshots only: it reseeds from the stored count on\n\t\t// every pass, so advancing it for a no-op (which stores nothing) would make later passes\n\t\t// reuse ids — and rollback keys on the id, so a collision blocks or misdirects rollback.\n\t\tlet auditSequence = getLearningAuditSnapshots(this.deps.getSessionManager().getEntries()).length;\n\t\t// G6 evidence strength: durable proposals accumulate observation counts across passes/sessions\n\t\t// so the gate can distinguish a one-off cue from a repeatedly-confirmed lesson. Built once per\n\t\t// pass; every increment is best-effort (store IO must never break reflection).\n\t\tconst observationStore = ObservationStore.forAgentDir(this.deps.getAgentDir());\n\t\tlet writeIndex = 0;\n\t\tfor (const write of result.writes) {\n\t\t\twriteIndex += 1;\n\t\t\tconst proposalId = `${input.reportId ?? \"reflection\"}-w${writeIndex}`;\n\t\t\tconst proposal = proposalFromReflectionWrite(write, proposalId);\n\t\t\tconst plannedRollback = rollbackPlanForReflectionWrite(write);\n\t\t\tlet observations = 1;\n\t\t\tif (policy.enabled) {\n\t\t\t\ttry {\n\t\t\t\t\tobservations = observationStore.increment(observationKey(proposal.layer, proposal.summary));\n\t\t\t\t} catch {\n\t\t\t\t\t// A store read/write failure falls back to a fresh count of 1, which keeps the gate\n\t\t\t\t\t// proposal-first (never spuriously auto-applies) rather than crashing the pass.\n\t\t\t\t\tobservations = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst explicitUserMemoryWrite =\n\t\t\t\tinput.explicitUserMemoryInstruction === true &&\n\t\t\t\t(write.kind === \"memory_add\" || write.kind === \"memory_replace\");\n\t\t\t// Additive skill promotion is the skill counterpart of a memory fact: a repeatable\n\t\t\t// procedure should land as a loadable SKILL.md (overlap audit still holds the write).\n\t\t\t// An owner who enabled auto-apply and omitted \"skill\" from the allow-list keeps that ceiling.\n\t\t\tconst ownerExcludedSkillLayer =\n\t\t\t\tpolicy.enabled && policy.autoApplyEnabled && !policy.allowedAutoApplyLayers.includes(\"skill\");\n\t\t\tconst additiveSkillPromotion = write.kind === \"promote_skill\" && !ownerExcludedSkillLayer;\n\t\t\tlet decision: LearningDecision;\n\t\t\tif (explicitUserMemoryWrite) {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"explicit_user_memory_instruction\",\n\t\t\t\t\tconfidence: 100,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t} else if (additiveSkillPromotion) {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"additive_skill_promotion\",\n\t\t\t\t\tconfidence: policy.reflectionSourceConfidence,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t} else if (policy.enabled) {\n\t\t\t\tdecision = evaluateLearningDecision({\n\t\t\t\t\tproposal,\n\t\t\t\t\tconfidence: policy.reflectionSourceConfidence,\n\t\t\t\t\tobservations,\n\t\t\t\t\t// A replace/remove supersedes an existing durable fact — the reflection engine's\n\t\t\t\t\t// confront-before-write conflict signal — so it routes through approval instead of\n\t\t\t\t\t// silently overwriting prior memory. Additive writes contradict nothing.\n\t\t\t\t\tcontradictions: contradictionsForReflectionWrite(write),\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tautoApplyEnabled: policy.autoApplyEnabled,\n\t\t\t\t\t\tconfidenceThreshold: policy.confidenceThreshold,\n\t\t\t\t\t\tminObservations: policy.minObservations,\n\t\t\t\t\t\tallowedAutoApplyLayers: policy.allowedAutoApplyLayers,\n\t\t\t\t\t\trequireRollbackPlan: policy.requireRollbackPlan,\n\t\t\t\t\t\tautoApplySupersessions: policy.autoApplySupersessions,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdecision = {\n\t\t\t\t\tkind: \"apply\",\n\t\t\t\t\treasonCode: \"learning_policy_disabled_legacy_apply\",\n\t\t\t\t\tconfidence: 0,\n\t\t\t\t\tsummary: proposal.summary,\n\t\t\t\t\trequiresApproval: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.deps.saveLearningDecisionSnapshot(decision);\n\t\t\t// G3: learning-gate outcome. Codes/numbers only — never the proposal summary/memory text.\n\t\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.learningDecision,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tpayload: {\n\t\t\t\t\tkind: decision.kind,\n\t\t\t\t\treasonCode: decision.reasonCode,\n\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\tconfidence: decision.confidence,\n\t\t\t\t\trequiresApproval: decision.requiresApproval,\n\t\t\t\t},\n\t\t\t});\n\t\t\t// G8: a proposal that needs human sign-off is an approval REQUEST. Codes/layer only —\n\t\t\t// never the proposal summary/memory text (those live only in the audit snapshot).\n\t\t\tif (decision.requiresApproval) {\n\t\t\t\tthis.deps.emitAutonomyTelemetry({\n\t\t\t\t\ttype: AUTONOMY_TELEMETRY_EVENT_TYPES.approvalRequest,\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tkind: decision.kind,\n\t\t\t\t\t\treasonCode: decision.reasonCode,\n\t\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\t// An automatic skill promotion the gate would otherwise apply must still clear the same\n\t\t\t// skill_audit overlap check the model-invoked `skillify` tool enforces — otherwise reflection\n\t\t\t// can silently write a near-duplicate SKILL.md. A non-overlapping skill is unaffected\n\t\t\t// (skillPromotionBlock stays undefined) and promotes exactly as before.\n\t\t\tconst skillPromotionBlock =\n\t\t\t\twrite.kind === \"promote_skill\" && decision.kind === \"apply\"\n\t\t\t\t\t? this._checkSkillPromotionOverlap(write)\n\t\t\t\t\t: undefined;\n\n\t\t\t// The gate's decision and the write's actual outcome are two different questions: the memory\n\t\t\t// tool can refuse a write (budget exceeded, drift, threat) via details.success:false without\n\t\t\t// throwing. Capture that outcome instead of assuming \"decision.kind === apply\" means it landed\n\t\t\t// — otherwise a refused write leaves a phantom \"apply\" audit whose rollback later fails\n\t\t\t// not-found (or, worse, misfires against whatever now occupies that text).\n\t\t\tconst applyResult =\n\t\t\t\tdecision.kind === \"apply\" && !skillPromotionBlock\n\t\t\t\t\t? await this._applyReflectionWrite(write, signal)\n\t\t\t\t\t: { applied: false };\n\t\t\tconst writeFailed = decision.kind === \"apply\" && !skillPromotionBlock && !applyResult.applied;\n\t\t\tif (decision.kind !== \"no-op\") {\n\t\t\t\tauditSequence += 1;\n\t\t\t\tappendLearningAuditSnapshot(this.deps.getSessionManager(), {\n\t\t\t\t\tid: `audit-${auditSequence}`,\n\t\t\t\t\tproposalId,\n\t\t\t\t\tlayer: proposal.layer,\n\t\t\t\t\taction: skillPromotionBlock\n\t\t\t\t\t\t? \"propose\"\n\t\t\t\t\t\t: writeFailed\n\t\t\t\t\t\t\t? \"apply_failed\"\n\t\t\t\t\t\t\t: decision.kind === \"apply\"\n\t\t\t\t\t\t\t\t? \"apply\"\n\t\t\t\t\t\t\t\t: \"propose\",\n\t\t\t\t\tsummary: skillPromotionBlock ? `${proposal.summary} — ${skillPromotionBlock.note}` : proposal.summary,\n\t\t\t\t\treasonCode: skillPromotionBlock\n\t\t\t\t\t\t? skillPromotionBlock.reasonCode\n\t\t\t\t\t\t: writeFailed\n\t\t\t\t\t\t\t? APPLY_WRITE_REFUSED_REASON_CODE\n\t\t\t\t\t\t\t: decision.reasonCode,\n\t\t\t\t\tdecision,\n\t\t\t\t\t// No rollback plan on a failed apply or a held/proposed promotion — nothing durable\n\t\t\t\t\t// landed in either case, so there is nothing to undo.\n\t\t\t\t\trollback:\n\t\t\t\t\t\tdecision.kind === \"apply\" && !skillPromotionBlock && !writeFailed\n\t\t\t\t\t\t\t? (applyResult.rollback ?? plannedRollback)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tcreatedAt: new Date().toISOString(),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Account the reflection's spend so it surfaces in the footer roll-up (net-token visibility).\n\t\t// Idempotent on reportId so a retried/duplicated pass cannot double-count.\n\t\tif (result.usage.cost.total > 0 || result.usage.totalTokens > 0) {\n\t\t\tthis.deps.addSpawnedUsage(result.usage, { label: \"reflection\", reportId: input.reportId });\n\t\t}\n\t\treturn result;\n\t}\n\n\tgetLearningAuditRecords(): LearningAuditRecord[] {\n\t\treturn getLearningAuditSnapshots(this.deps.getSessionManager().getEntries());\n\t}\n\n\t/**\n\t * Roll back one applied durable learning change by executing the inverse operation recorded in\n\t * its audit record (memory ops run through the same bundled memory-tool path as the original\n\t * apply; promoted skills are archived). Appends a linked \"rollback\" audit record on success so\n\t * the change history stays complete and a change cannot be rolled back twice.\n\t */\n\tasync rollbackLearningWrite(auditId: string): Promise<{ ok: boolean; reason: string }> {\n\t\tif (this.deps.isDisposed()) return { ok: false, reason: \"session_disposed\" };\n\n\t\tconst audits = this.getLearningAuditRecords();\n\t\tconst audit = audits.find((record) => record.id === auditId);\n\t\tif (!audit) return { ok: false, reason: \"audit_not_found\" };\n\t\tif (audit.action !== \"apply\") return { ok: false, reason: \"not_an_applied_change\" };\n\t\tif (audits.some((record) => record.action === \"rollback\" && record.rollbackOf === auditId)) {\n\t\t\treturn { ok: false, reason: \"already_rolled_back\" };\n\t\t}\n\t\tconst rollback = audit.rollback;\n\t\tif (!rollback) return { ok: false, reason: \"no_rollback_plan\" };\n\n\t\t// Every inverse must be VERIFIED-applied before the rollback audit is appended: a silently\n\t\t// failed inverse that still recorded \"rollback\" would permanently self-lock the change\n\t\t// behind already_rolled_back while the durable write is in fact still live.\n\t\tswitch (rollback.kind) {\n\t\t\tcase \"memory_remove\": {\n\t\t\t\tif (!rollback.target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tif (!(await this._applyReflectionWrite({ kind: \"memory_remove\", target: rollback.target })).applied) {\n\t\t\t\t\treturn { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"memory_restore\": {\n\t\t\t\tif (!rollback.target || rollback.previous === undefined) {\n\t\t\t\t\treturn { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\t}\n\t\t\t\tconst applied = await this._applyReflectionWrite({\n\t\t\t\t\tkind: \"memory_replace\",\n\t\t\t\t\ttarget: rollback.target,\n\t\t\t\t\ttext: rollback.previous,\n\t\t\t\t});\n\t\t\t\tif (!applied.applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"memory_add\": {\n\t\t\t\tif (rollback.previous === undefined) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this._applyReflectionWrite({\n\t\t\t\t\tkind: \"memory_add\",\n\t\t\t\t\tsection: \"MEMORY\",\n\t\t\t\t\ttext: rollback.previous,\n\t\t\t\t});\n\t\t\t\tif (!applied.applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"okf_remove\": {\n\t\t\t\tconst target = parseOkfRollbackTarget(rollback.target);\n\t\t\t\tif (!target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this.deps.rollbackStructuredReflectionWrite({\n\t\t\t\t\t...target,\n\t\t\t\t\texpectedDigest: rollback.expectedDigest,\n\t\t\t\t\tremoveRecord: true,\n\t\t\t\t});\n\t\t\t\tif (!applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"okf_organize\": {\n\t\t\t\tif (!rollback.target || rollback.previous === undefined) {\n\t\t\t\t\treturn { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\t}\n\t\t\t\tconst target = parseOkfRollbackTarget(rollback.target);\n\t\t\t\tif (!target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tconst applied = await this.deps.rollbackStructuredReflectionWrite({\n\t\t\t\t\t...target,\n\t\t\t\t\texpectedDigest: rollback.expectedDigest,\n\t\t\t\t\tsourceText: rollback.previous,\n\t\t\t\t\tremoveRecord: rollback.removeOkf === true,\n\t\t\t\t});\n\t\t\t\tif (!applied) return { ok: false, reason: \"rollback_apply_failed\" };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"archive_skill\": {\n\t\t\t\tif (!rollback.target) return { ok: false, reason: \"missing_rollback_target\" };\n\t\t\t\tif (!this.deps.archivePromotedSkill(rollback.target)) {\n\t\t\t\t\treturn { ok: false, reason: \"skill_archive_failed\" };\n\t\t\t\t}\n\t\t\t\tthis.deps.refreshLiveSkills?.();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tappendLearningAuditSnapshot(this.deps.getSessionManager(), {\n\t\t\tid: `${audit.id}-rollback`,\n\t\t\tproposalId: audit.proposalId,\n\t\t\tlayer: audit.layer,\n\t\t\taction: \"rollback\",\n\t\t\tsummary: `Rolled back: ${audit.summary}`,\n\t\t\treasonCode: \"user_requested_rollback\",\n\t\t\tdecision: audit.decision,\n\t\t\trollbackOf: audit.id,\n\t\t\tcreatedAt: new Date().toISOString(),\n\t\t});\n\t\treturn { ok: true, reason: \"rollback_applied\" };\n\t}\n\n\t/**\n\t * Apply one reflection write through the bundled `memory` tool. `memory_replace`/`memory_remove`\n\t * don't carry a target file, so we try MEMORY.md first and fall back to USER.md when the substring\n\t * isn't found there. Never throws (reflection must never break a turn); returns whether the write\n\t * actually applied so callers that MUST know — rollback's once-only accounting — can react instead\n\t * of recording a success that never happened.\n\t */\n\tprivate async _applyReflectionWrite(write: ReflectionWrite, signal?: AbortSignal): Promise<ReflectionApplyResult> {\n\t\t// R7 memory-to-behavior: a recurring procedure is compiled into an executable skill file rather\n\t\t// than stored as a flat fact. Written under the agent skills dir so it loads like any user skill.\n\t\tif (write.kind === \"promote_skill\") {\n\t\t\tconst promoted = this._promoteReflectionSkill(write.name, write.description, write.body);\n\t\t\tif (promoted) this.deps.refreshLiveSkills?.();\n\t\t\treturn { applied: promoted };\n\t\t}\n\t\tif (write.kind === \"okf_add\" || write.kind === \"okf_organize\") {\n\t\t\ttry {\n\t\t\t\tconst result = await this.deps.applyStructuredReflectionWrite(write, signal);\n\t\t\t\tif (!result.applied || result.digest === undefined) return { applied: false };\n\t\t\t\treturn {\n\t\t\t\t\tapplied: true,\n\t\t\t\t\trollback:\n\t\t\t\t\t\twrite.kind === \"okf_add\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tkind: \"okf_remove\",\n\t\t\t\t\t\t\t\t\ttarget: `${write.type}\\0${write.title}`,\n\t\t\t\t\t\t\t\t\texpectedDigest: result.digest,\n\t\t\t\t\t\t\t\t\tinstructions: \"Remove only the exact structured OKF record created by this reflection.\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tkind: \"okf_organize\",\n\t\t\t\t\t\t\t\t\ttarget: `${write.type}\\0${write.title}`,\n\t\t\t\t\t\t\t\t\tprevious: write.sourceText,\n\t\t\t\t\t\t\t\t\texpectedDigest: result.digest,\n\t\t\t\t\t\t\t\t\tremoveOkf: result.created,\n\t\t\t\t\t\t\t\t\tinstructions:\n\t\t\t\t\t\t\t\t\t\t\"Restore the exact hot-memory source first, then remove only the OKF record created by this reflection.\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn { applied: false };\n\t\t\t}\n\t\t}\n\n\t\ttype MemResult = { details?: { success?: boolean; error?: string } };\n\t\ttype MemExec = (\n\t\t\ttoolCallId: string,\n\t\t\tparams: {\n\t\t\t\taction: string;\n\t\t\t\ttarget: string;\n\t\t\t\tcontent?: string;\n\t\t\t\toldContent?: string;\n\t\t\t\ttype?: string;\n\t\t\t\ttitle?: string;\n\t\t\t\tdescription?: string;\n\t\t\t\tscope?: string;\n\t\t\t\ttags?: string[];\n\t\t\t\tevidenceRefs?: string[];\n\t\t\t},\n\t\t\tsignal: AbortSignal | undefined,\n\t\t\tonUpdate: undefined,\n\t\t\tctx: undefined,\n\t\t) => Promise<MemResult>;\n\t\tconst memTool = this.deps\n\t\t\t.getMemoryManager()\n\t\t\t.getToolDefinitions()\n\t\t\t.find((t) => t.name === \"memory\");\n\t\tconst exec = memTool?.execute as unknown as MemExec | undefined;\n\t\tif (!exec) return { applied: false };\n\n\t\tconst run = (params: Parameters<MemExec>[1]) => exec(\"reflection\", params, signal, undefined, undefined);\n\n\t\tif (write.kind === \"memory_add\") {\n\t\t\ttry {\n\t\t\t\tconst res = await run({\n\t\t\t\t\taction: \"add\",\n\t\t\t\t\ttarget: write.section === \"USER\" ? \"user\" : \"memory\",\n\t\t\t\t\tcontent: write.text,\n\t\t\t\t});\n\t\t\t\treturn { applied: res?.details?.success === true };\n\t\t\t} catch {\n\t\t\t\t// best-effort; reflection writes must never throw into the turn loop\n\t\t\t\treturn { applied: false };\n\t\t\t}\n\t\t}\n\n\t\t// replace / remove carry no target file — try MEMORY.md, then USER.md. The memory tool reports\n\t\t// outcomes via `details.success` (it catches its own errors rather than throwing). Only a\n\t\t// genuine \"not found in the file\" justifies trying the other file; a real failure for a file\n\t\t// (budget exceeded / drift) must NOT fall through and mutate the wrong target.\n\t\tfor (const target of [\"memory\", \"user\"] as const) {\n\t\t\ttry {\n\t\t\t\tconst params =\n\t\t\t\t\twrite.kind === \"memory_replace\"\n\t\t\t\t\t\t? { action: \"replace\", target, oldContent: write.target, content: write.text }\n\t\t\t\t\t\t: { action: \"remove\", target, oldContent: write.target };\n\t\t\t\tconst res = await run(params);\n\t\t\t\tif (res?.details?.success === true) return { applied: true }; // applied\n\t\t\t\tif (!/not found/i.test(String(res?.details?.error ?? \"\"))) return { applied: false }; // real failure\n\t\t\t\t// substring simply absent from this file — try the next target\n\t\t\t} catch {\n\t\t\t\t// defensive: if the tool ever does throw, try the next target\n\t\t\t}\n\t\t}\n\t\treturn { applied: false };\n\t}\n\n\t/**\n\t * The same skill_audit overlap check the model-invoked `skillify` tool enforces\n\t * (tools/skillify.ts → tools/skill-audit.ts's `runSkillAudit`), run before an AUTOMATIC promotion\n\t * so the reflection engine can never silently write a near-duplicate SKILL.md. Reuses the audit\n\t * seam unchanged (never duplicated) against the same already-loaded skills universe skillify\n\t * compares a draft against. Returns a block reason when the draft overlaps an existing skill above\n\t * the audit's own similarity threshold, or when the audit itself fails (the promotion is held, not\n\t * written unaudited); undefined when clear to promote. Never throws — mirrors every other\n\t * best-effort check in this file.\n\t */\n\tprivate _checkSkillPromotionOverlap(write: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tbody: string;\n\t}): { reasonCode: string; note: string } | undefined {\n\t\ttry {\n\t\t\tconst cwd = this.deps.getCwd?.() ?? process.cwd();\n\t\t\tconst audit = runSkillAudit(\n\t\t\t\tcwd,\n\t\t\t\twrite,\n\t\t\t\tthis.deps.getSkillsForAudit?.(),\n\t\t\t\tundefined,\n\t\t\t\tDEFAULT_BOUNDED_SKILL_AUDIT_LIMITS,\n\t\t\t);\n\t\t\tif (audit.truncated) {\n\t\t\t\treturn {\n\t\t\t\t\treasonCode: SKILL_AUDIT_UNAVAILABLE_REASON_CODE,\n\t\t\t\t\tnote: \"skill overlap audit exceeded its bounded universe; promotion held rather than written unaudited\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst overlap = audit.nearDuplicates.find((d) => d.a === \"[draft]\" || d.b === \"[draft]\");\n\t\t\tif (!overlap) return undefined;\n\t\t\tconst otherPath = overlap.a === \"[draft]\" ? overlap.b : overlap.a;\n\t\t\t// Every skill file is named \"SKILL.md\" — unlike skillify's own display formatter (which takes\n\t\t\t// the path's last segment and always shows that literal filename), look up the declared\n\t\t\t// frontmatter name so the proposal actually names the skill it overlaps with.\n\t\t\tconst otherName = audit.skills.find((s) => s.path === otherPath)?.name ?? otherPath;\n\t\t\treturn {\n\t\t\t\treasonCode: SKILL_OVERLAP_CONSOLIDATION_REASON_CODE,\n\t\t\t\tnote: `overlaps existing skill \"${otherName}\" (${(overlap.similarity * 100).toFixed(0)}% similar) — consolidation proposed instead of a duplicate write`,\n\t\t\t};\n\t\t} catch {\n\t\t\t// Bounded, observable degradation via the promote path's existing error-reporting shape: an\n\t\t\t// audit failure must never throw into the reflection pass, but it also must not silently\n\t\t\t// fall through to an unaudited write — hold the promotion and record why.\n\t\t\treturn {\n\t\t\t\treasonCode: SKILL_AUDIT_UNAVAILABLE_REASON_CODE,\n\t\t\t\tnote: \"skill overlap audit failed; promotion held rather than written unaudited\",\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * R7: write a reflection-promoted skill as `<agentDir>/skills/<name>/SKILL.md` so it loads like any\n\t * user skill. Best-effort; never clobbers an existing (hand-authored) skill of the same name. The\n\t * overlap audit runs at the call site in {@link runReflectionPass} — a write only reaches here\n\t * once the draft has already cleared it.\n\t */\n\tprivate _promoteReflectionSkill(rawName: string, description: string, body: string): boolean {\n\t\tconst name = rawName\n\t\t\t.trim()\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 64);\n\t\tif (!name || !body.trim()) return false;\n\t\ttry {\n\t\t\tconst dir = join(this.deps.getAgentDir(), \"skills\", name);\n\t\t\tconst file = join(dir, \"SKILL.md\");\n\t\t\tif (existsSync(file)) return false; // do not overwrite an existing skill\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\tconst safeDescription = description.replace(/[\\r\\n]+/g, \" \").trim();\n\t\t\t// `promoted: true` marks this as reflection-generated so the curator (#32) can lifecycle-manage\n\t\t\t// it (archive/consolidate) WITHOUT ever touching hand-authored user skills.\n\t\t\tconst content = `---\\nname: ${name}\\ndescription: ${safeDescription}\\npromoted: true\\n---\\n\\n<!-- Auto-generated by the reflection engine (R7 memory-to-behavior). Review and refine. -->\\n\\n${body.trim()}\\n`;\n\t\t\twriteFileSync(file, content, \"utf-8\");\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// promotion must never break a turn\n\t\t\treturn false;\n\t\t}\n\t}\n}\n"]}
|