@code-yeongyu/senpi 2026.8.9 → 2026.8.11
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 +84 -0
- package/dist/core/agent-session.d.ts +4 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +19 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/builtin/cache-keepalive/index.d.ts +30 -0
- package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/cache-keepalive/index.js +281 -0
- package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/index.js +9 -9
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +21 -8
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts +11 -2
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.js +16 -0
- package/dist/core/extensions/builtin/goal/cache-warm.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +31 -1
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +2 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +115 -54
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/prompt.js +4 -4
- package/dist/core/extensions/builtin/goal/prompt.js.map +1 -1
- package/dist/core/extensions/builtin/goal/store-changed-event.d.ts +8 -0
- package/dist/core/extensions/builtin/goal/store-changed-event.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/store-changed-event.js +9 -0
- package/dist/core/extensions/builtin/goal/store-changed-event.js.map +1 -0
- package/dist/core/extensions/builtin/goal/wait-progress.js +5 -5
- package/dist/core/extensions/builtin/goal/wait-progress.js.map +1 -1
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +2 -0
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/monitor-state-event.d.ts +16 -0
- package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
- package/dist/core/extensions/builtin/monitor-state-event.js +15 -0
- package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +7 -8
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts +3 -3
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +7 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +4 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +19 -2
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +50 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +1 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +0 -7
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts +4 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +10 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +14 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +12 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/filesystem-policy.d.ts +10 -0
- package/dist/core/tools/filesystem-policy.d.ts.map +1 -0
- package/dist/core/tools/filesystem-policy.js +59 -0
- package/dist/core/tools/filesystem-policy.js.map +1 -0
- package/dist/core/tools/find.d.ts +3 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +15 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +3 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +16 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts +3 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +11 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +3 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +13 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +3 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +12 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/app-server/threads/goal-handlers.d.ts.map +1 -1
- package/dist/modes/app-server/threads/goal-handlers.js +7 -0
- package/dist/modes/app-server/threads/goal-handlers.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -6
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/extensions.md +76 -0
- package/docs/providers.md +23 -3
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +38 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/{resumption-channel.ts → wake-source-state.ts} +9 -9
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +7 -7
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/detached-cell-manager.ts +12 -11
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +13 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +6 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +6 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.d.ts +17 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js +52 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/warm-prompt-cache.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/recovery-stream.js +120 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/antml/recovery-stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js +17 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/prompt-cache-ttl.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-pty/native/prebuilds/darwin-arm64/senpi_pty.darwin-arm64.node +0 -0
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +6 -6
- package/dist/core/extensions/builtin/resumption-channel-event.d.ts +0 -13
- package/dist/core/extensions/builtin/resumption-channel-event.d.ts.map +0 -1
- package/dist/core/extensions/builtin/resumption-channel-event.js +0 -13
- package/dist/core/extensions/builtin/resumption-channel-event.js.map +0 -1
- package/dist/core/omo-native-detect.d.ts +0 -3
- package/dist/core/omo-native-detect.d.ts.map +0 -1
- package/dist/core/omo-native-detect.js +0 -58
- package/dist/core/omo-native-detect.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Tool } from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport type {\n\tContextUsage,\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionBeforeCompactEvent,\n\tSessionCompactEvent,\n} from \"../../types.ts\";\nimport * as checkpointState from \"./checkpoint-state.ts\";\nimport * as breaker from \"./circuit-breaker.ts\";\nimport {\n\tBUILTIN_CONTEXT_REDUCTION_OPTIONS,\n\treduceContextMessages,\n\tshouldApplyContextReduction,\n} from \"./context-reduction.ts\";\nimport {\n\tcreateDegradationMonitorState,\n\thandleMessageEnd,\n\thandleTurnEnd,\n\tRECOVERY_INSTRUCTIONS,\n\tresetOnSessionCompact,\n} from \"./degradation-monitor.ts\";\nimport {\n\tclassifyRequiredCompactionFallbackFailure,\n\tcreateRequiredCompactionFallback,\n} from \"./deterministic-fallback.ts\";\nimport * as idle from \"./idle.ts\";\nimport * as idleRetry from \"./idle-retry.ts\";\nimport {\n\tCLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE,\n\tcollectCompactBoundaryEntries,\n\tcreateCompactionLanePolicy,\n\tSDK_NATIVE_LANE_REJECTION_REASON,\n} from \"./lane-policy.ts\";\nimport { type CompactionLogger, createCompactionLogger } from \"./log.ts\";\nimport {\n\tmarkOpenAiRemoteReplayBoundary,\n\ttype OpenAiRemoteCompactionDependencies,\n\trewriteOpenAiPayloadWithRemoteCompaction,\n\trunOpenAiRemoteCompaction,\n\tSENPI_COMPACTION_EVENT,\n} from \"./openai-remote.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport * as cap from \"./per-turn-cap.ts\";\nimport * as policy from \"./policy.ts\";\nimport { repairOrphanedToolResults } from \"./repair-tool-pairs.ts\";\nimport * as restoration from \"./restoration-tracker.ts\";\nimport {\n\tapplyGeneratedCompaction,\n\tcreateEmergencyPruneLatch,\n\tcreateSpeculativeCompactionSnapshot,\n\tgetPromptVariant,\n\thardLimitEmergencyPrune,\n\trunExtensionCompaction,\n\ttype SpeculativeCompactionResult,\n\ttype SpeculativeCompactionSnapshot,\n\tSummaryGenerationError,\n} from \"./speculative.ts\";\nimport { type CompactionExtensionState, createInitialState, resetTurnCounter } from \"./state.ts\";\nimport { resolveInheritedTaskIntent } from \"./task-intent.ts\";\nimport * as todoBridge from \"./todo-bridge.ts\";\nimport { isTransientSummarizationFailure } from \"./transient-failure.ts\";\nimport { isIneffectiveCompaction } from \"./yield.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 200_000;\nconst EMERGENCY_COMPACTION_INSTRUCTIONS =\n\t\"EMERGENCY: hard context limit reached. Produce an aggressive recovery summary that preserves current goal, constraints, files touched, tool outcomes, and exact next steps. Prefer concise factual state over transcript detail.\";\nconst PROACTIVE_COMPACTION_INSTRUCTIONS = \"Proactively compact before the next agent turn.\";\nconst MAX_PENDING_METADATA = 8;\nconst IMAGE_PROMPT_TOKEN_ESTIMATE = 1_200;\nconst MAX_OUTPUT_RESERVE_RATIO = 0.5;\n\ninterface PendingCompactionMetadata {\n\tcheckpoint: checkpointState.AgentCheckpoint;\n\ttodoSnapshot: todoBridge.TodoSnapshotPayload;\n}\n\nfunction approxTokens(text: string): number {\n\treturn Math.ceil(text.length / 4);\n}\n\nfunction estimatePendingPromptTokens(event: { prompt?: string; images?: readonly unknown[] }): number {\n\treturn approxTokens(event.prompt ?? \"\") + (event.images?.length ?? 0) * IMAGE_PROMPT_TOKEN_ESTIMATE;\n}\n\nfunction getPromptContextWindow(contextWindow: number, maxTokens: number | undefined): number {\n\tif (typeof maxTokens !== \"number\" || !Number.isFinite(maxTokens) || maxTokens <= 0 || contextWindow <= 0) {\n\t\treturn contextWindow;\n\t}\n\tconst outputReserve = Math.min(maxTokens, Math.floor(contextWindow * MAX_OUTPUT_RESERVE_RATIO));\n\treturn contextWindow - outputReserve;\n}\n\nfunction withAdditionalTokens(usage: ContextUsage, additionalTokens: number): ContextUsage {\n\tif (usage.tokens === null || additionalTokens <= 0) return usage;\n\tconst tokens = usage.tokens + additionalTokens;\n\treturn {\n\t\t...usage,\n\t\ttokens,\n\t\tpercent: usage.contextWindow > 0 ? (tokens / usage.contextWindow) * 100 : usage.percent,\n\t};\n}\n\nfunction isMonitorableMessageEvent(event: { message: AgentMessage }): event is {\n\tmessage: AgentMessage & { content: Array<{ type: string; text?: string }> };\n} {\n\treturn \"content\" in event.message && Array.isArray(event.message.content);\n}\n\nfunction isAbortedAssistantMessage(event: { message: AgentMessage }): boolean {\n\treturn event.message.role === \"assistant\" && \"stopReason\" in event.message && event.message.stopReason === \"aborted\";\n}\n\nfunction isRequiredCompactionFallbackReason(reason: SessionBeforeCompactEvent[\"reason\"]): boolean {\n\treturn reason === \"threshold\" || reason === \"overflow\";\n}\n\nfunction recentCheckpoint(ctx: ExtensionContext): checkpointState.AgentCheckpoint | null {\n\tconst checkpoint = checkpointState.getLatestCheckpoint(ctx);\n\tif (!checkpoint?.timestamp) return null;\n\treturn Date.now() - checkpoint.timestamp <= 60_000 ? checkpoint : null;\n}\n\nfunction shouldEndFeedback(result: SpeculativeCompactionResult): boolean {\n\treturn !result.applied && result.reason !== \"rejected\";\n}\n\nfunction endCompactionFeedback(\n\tctx: ExtensionContext,\n\tsignal: AbortSignal | undefined,\n\tresult: SpeculativeCompactionResult,\n): void {\n\tif (shouldEndFeedback(result)) {\n\t\tctx.endCompaction?.({ reason: \"extension\", signal, aborted: signal?.aborted });\n\t}\n}\n\nfunction linkAbortSignal(source: AbortSignal | undefined, target: AbortController): () => void {\n\tif (!source) return () => {};\n\tif (source.aborted) {\n\t\ttarget.abort();\n\t\treturn () => {};\n\t}\n\tconst abort = () => target.abort();\n\tsource.addEventListener(\"abort\", abort, { once: true });\n\treturn () => source.removeEventListener(\"abort\", abort);\n}\n\nfunction createBlockingRemoteCompactionEvent(\n\tctx: ExtensionContext,\n\tsnapshot: SpeculativeCompactionSnapshot,\n\tcustomInstructions: string,\n\tsignal: AbortSignal,\n): SessionBeforeCompactEvent {\n\treturn {\n\t\ttype: \"session_before_compact\",\n\t\treason: \"extension\",\n\t\twillRetry: false,\n\t\trequestId: randomUUID(),\n\t\tpreparation: snapshot.preparation,\n\t\tbranchEntries: ctx.sessionManager.getBranch(),\n\t\tcustomInstructions,\n\t\tsignal,\n\t};\n}\n\nexport default function compactionExtension(\n\tpi: ExtensionAPI,\n\tremoteCompactionDependencies: OpenAiRemoteCompactionDependencies = {},\n): void {\n\tlet state: CompactionExtensionState = createInitialState();\n\tconst lanePolicy = createCompactionLanePolicy();\n\tconst restorationDirectiveState = checkpointState.createRestorationDirectiveState();\n\tconst emergencyPruneLatch = createEmergencyPruneLatch();\n\tconst degradationState = createDegradationMonitorState();\n\tconst restorationState = state.restoration ?? restoration.createRestorationTrackerState();\n\tstate = { ...state, restoration: restorationState };\n\tlet speculativeGeneration = 0;\n\tlet speculativeJob:\n\t\t| {\n\t\t\t\tgeneration: number;\n\t\t\t\tsnapshot: SpeculativeCompactionSnapshot;\n\t\t\t\tcontroller: AbortController;\n\t\t\t\tpromise: Promise<CompactionResult | undefined>;\n\t\t\t\tfailure: Promise<Error | undefined>;\n\t\t }\n\t\t| undefined;\n\tconst pendingMetadata = new Map<string, PendingCompactionMetadata>();\n\tlet logger: CompactionLogger | undefined;\n\tconst getLogger = (ctx: ExtensionContext): CompactionLogger => (logger ??= createCompactionLogger(ctx.agentDir));\n\n\tfunction getSummarizationTools(): Tool[] {\n\t\tif (typeof pi.getAllTools !== \"function\" || typeof pi.getActiveTools !== \"function\") return [];\n\t\ttry {\n\t\t\tconst definitionsByName = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));\n\t\t\treturn pi.getActiveTools().flatMap((name) => {\n\t\t\t\tconst tool = definitionsByName.get(name);\n\t\t\t\treturn tool ? [{ name: tool.name, description: tool.description, parameters: tool.parameters }] : [];\n\t\t\t});\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tlet idleWarmupTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet idleWarmupAttempt = 0;\n\n\tfunction cancelIdleWarmupRetry(): void {\n\t\tif (idleWarmupTimer === undefined) return;\n\t\tclearTimeout(idleWarmupTimer);\n\t\tidleWarmupTimer = undefined;\n\t}\n\n\t// Fenced on the observed job: a prompt, invalidation, or newer warm-up\n\t// stands this watcher down before it can start a duplicate summarization.\n\tfunction armIdleWarmupRetry(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\tvoid job.failure.then((failure) => {\n\t\t\tif (failure === undefined) {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (speculativeJob !== job) return;\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\tconst retryDecision: idleRetry.IdleWarmupRetryDecision = {\n\t\t\t\tattempt: idleWarmupAttempt,\n\t\t\t\ttransient: isTransientSummarizationFailure(failure, failure.message),\n\t\t\t\tisIdle: ctx.isIdle(),\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tstillOverThreshold:\n\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\tpolicy.shouldTriggerCompaction(\n\t\t\t\t\t\tusage,\n\t\t\t\t\t\tcontextWindow,\n\t\t\t\t\t\tctx.getCompactionSettings(),\n\t\t\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\t\t),\n\t\t\t};\n\t\t\tif (!idleRetry.shouldRetryIdleWarmup(retryDecision)) return;\n\t\t\tcancelIdleWarmupRetry();\n\t\t\tidleWarmupTimer = setTimeout(() => {\n\t\t\t\tidleWarmupTimer = undefined;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tidleWarmupAttempt += 1;\n\t\t\t\tgetLogger(ctx).debug(\"idle_trigger\", {\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\ttokens: usage?.tokens ?? 0,\n\t\t\t\t\tcount: idleWarmupAttempt,\n\t\t\t\t});\n\t\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t}, idleRetry.IDLE_WARMUP_RETRY_DELAY_MS);\n\t\t});\n\t}\n\n\tfunction invalidateSpeculativeCompaction(ctx: ExtensionContext): void {\n\t\tconst previousGeneration = speculativeGeneration;\n\t\tspeculativeGeneration++;\n\t\tgetLogger(ctx).debug(\"speculative_invalidated\", { generation: previousGeneration });\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t}\n\n\tfunction startSpeculativeCompaction(ctx: ExtensionContext, customInstructions: string): void {\n\t\tif (speculativeJob) return;\n\t\tconst generation = ++speculativeGeneration;\n\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\tgeneration,\n\t\t\tcustomInstructions,\n\t\t\torigin: \"speculative\",\n\t\t\ttools: getSummarizationTools(),\n\t\t});\n\t\tif (!snapshot) return;\n\t\tgetLogger(ctx).debug(\"speculative_started\", { generation, origin: \"speculative\" });\n\t\tconst controller = new AbortController();\n\t\tconst settled = runExtensionCompaction(ctx, snapshot, controller.signal).then(\n\t\t\t(result) => ({ result, error: undefined }),\n\t\t\t(error: unknown) => ({ result: undefined, error: error instanceof Error ? error : new Error(String(error)) }),\n\t\t);\n\t\tconst promise = settled.then(({ result }) => result);\n\t\tconst failure = settled.then(({ error }) => error);\n\t\tspeculativeJob = { generation, snapshot, controller, promise, failure };\n\t}\n\n\tfunction capturePendingMetadata(requestId: string, ctx: ExtensionContext): void {\n\t\tpendingMetadata.set(requestId, {\n\t\t\tcheckpoint: checkpointState.captureAgentCheckpoint(pi, ctx),\n\t\t\ttodoSnapshot: todoBridge.createTodoSnapshot(ctx),\n\t\t});\n\t\twhile (pendingMetadata.size > MAX_PENDING_METADATA) {\n\t\t\tconst oldestRequestId = pendingMetadata.keys().next().value;\n\t\t\tif (oldestRequestId === undefined) break;\n\t\t\tpendingMetadata.delete(oldestRequestId);\n\t\t}\n\t}\n\n\tfunction persistAcceptedMetadata(requestId: string): void {\n\t\tconst metadata = pendingMetadata.get(requestId);\n\t\tif (!metadata) return;\n\t\tpendingMetadata.delete(requestId);\n\t\tcheckpointState.persistCheckpoint(pi, metadata.checkpoint);\n\t\ttodoBridge.persistTodoSnapshot(pi, metadata.todoSnapshot);\n\t}\n\n\tasync function applyBlockingCompaction(\n\t\tctx: ExtensionContext,\n\t\tcustomInstructions: string,\n\t): Promise<SpeculativeCompactionResult> {\n\t\tif (breaker.isTripped(state, Date.now())) {\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tlet feedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\ttry {\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) {\n\t\t\t\tconst remoteGeneration = speculativeGeneration + 1;\n\t\t\t\tconst remoteSnapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\t\tgeneration: remoteGeneration,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\torigin: \"blocking\",\n\t\t\t\t});\n\t\t\t\tgetLogger(ctx).debug(\"blocking_started\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\tif (remoteSnapshot) {\n\t\t\t\t\tconst remoteSignal = feedbackSignal ?? new AbortController().signal;\n\t\t\t\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tcreateBlockingRemoteCompactionEvent(ctx, remoteSnapshot, customInstructions, remoteSignal),\n\t\t\t\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t\t);\n\t\t\t\t\tif (remoteCompaction) {\n\t\t\t\t\t\tif (speculativeGeneration !== remoteGeneration - 1) {\n\t\t\t\t\t\t\tconst result = { applied: false, reason: \"stale\" } as const;\n\t\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: remoteGeneration });\n\t\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspeculativeGeneration = remoteGeneration;\n\t\t\t\t\t\tspeculativeJob?.controller.abort();\n\t\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tremoteSnapshot,\n\t\t\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\t\t\tremoteCompaction,\n\t\t\t\t\t\t\tfeedbackSignal,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pendingJob = speculativeJob;\n\t\t\tif (pendingJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(feedbackSignal, pendingJob.controller);\n\t\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\t\tlet inheritedFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcompaction = await pendingJob.promise;\n\t\t\t\t\tinheritedFailure = await pendingJob.failure;\n\t\t\t\t\tif (compaction)\n\t\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: pendingJob.generation, route: \"speculative\" });\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (inheritedFailure !== undefined) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tif (isTransientSummarizationFailure(inheritedFailure, inheritedFailure.message)) {\n\t\t\t\t\t\tctx.endCompaction?.({\n\t\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\t\t\t\terrorMessage: `Compaction failed: ${inheritedFailure.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tpendingJob.snapshot,\n\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\tcompaction,\n\t\t\t\t\tfeedbackSignal,\n\t\t\t\t);\n\t\t\t\tif (result.applied || result.reason === \"stale\") {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tif (result.applied)\n\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", {\n\t\t\t\t\t\t\tgeneration: pendingJob.generation,\n\t\t\t\t\t\t\torigin: \"speculative\",\n\t\t\t\t\t\t});\n\t\t\t\t\telse getLogger(ctx).debug(\"speculative_stale\", { generation: pendingJob.generation });\n\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (result.reason === \"rejected\") {\n\t\t\t\t\tfeedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\t\t\t}\n\t\t\t\tspeculativeJob = undefined;\n\t\t\t}\n\n\t\t\tconst generation = ++speculativeGeneration;\n\t\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\tgeneration,\n\t\t\t\tcustomInstructions,\n\t\t\t\torigin: \"core-route\",\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t});\n\t\t\tif (!snapshot) {\n\t\t\t\tconst result = { applied: false, reason: \"unavailable\" } as const;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: \"unavailable\" });\n\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, feedbackSignal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({\n\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof SummaryGenerationError)) throw error;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: error.kind });\n\t\t\t}\n\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\tctx,\n\t\t\t\tsnapshot,\n\t\t\t\t() => speculativeGeneration,\n\t\t\t\tcompaction,\n\t\t\t\tfeedbackSignal,\n\t\t\t);\n\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tctx.endCompaction?.({\n\t\t\t\treason: \"extension\",\n\t\t\t\tsignal: feedbackSignal,\n\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\terrorMessage: `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tconst transient = isTransientSummarizationFailure(error, message);\n\t\t\tif (transient) {\n\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpi.on(\"session_before_compact\", async (event: SessionBeforeCompactEvent, ctx) => {\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\treturn { cancel: true, reason: SDK_NATIVE_LANE_REJECTION_REASON };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { reason: event.reason, count: state.acceptedAbsolute });\n\t\t\treturn {\n\t\t\t\tcancel: true,\n\t\t\t\trejectionCause: \"per-turn-cap\",\n\t\t\t\treason: \"absolute compaction cap reached for this session\",\n\t\t\t};\n\t\t}\n\t\tconst now = Date.now();\n\t\tif (breaker.isTripped(state, now) && !breaker.shouldBypass(state, { reason: event.reason })) {\n\t\t\tconst remainingMs = state.trippedAt !== null ? Math.max(0, state.trippedAt + breaker.COOLDOWN_MS - now) : 0;\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { reason: event.reason, remainingSec: Math.ceil(remainingMs / 1000) });\n\t\t\treturn {\n\t\t\t\tcancel: true,\n\t\t\t\trejectionCause: \"circuit-breaker\",\n\t\t\t\treason: `compaction circuit breaker cooling down (${Math.ceil(remainingMs / 1000)}s left)`,\n\t\t\t};\n\t\t}\n\n\t\tcapturePendingMetadata(event.requestId, ctx);\n\n\t\tconst model = ctx.model;\n\t\tif (!model) return undefined;\n\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\tctx,\n\t\t\tevent,\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\tremoteCompactionDependencies,\n\t\t);\n\t\tif (remoteCompaction) {\n\t\t\tgetLogger(ctx).debug(\"core_route_generated\", { route: \"core-route\", requestId: event.requestId });\n\t\t\treturn { compaction: remoteCompaction };\n\t\t}\n\n\t\tconst snapshot = {\n\t\t\tgeneration: ++speculativeGeneration,\n\t\t\texpectedRevision: ctx.getMessageRevision(),\n\t\t\tmodel,\n\t\t\tcontextWindow: ctx.getContextUsage()?.contextWindow ?? model.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\tpreparation: event.preparation,\n\t\t\tbranchEntries: event.branchEntries,\n\t\t\tpromptVariant: getPromptVariant(event),\n\t\t\torigin: \"core-route\" as const,\n\t\t\tcustomInstructions: event.customInstructions,\n\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\ttools: getSummarizationTools(),\n\t\t};\n\t\tlet compaction: CompactionResult | undefined;\n\t\ttry {\n\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, event.signal, (delta) =>\n\t\t\t\tctx.updateCompaction?.({ reason: event.reason, signal: event.signal, delta }),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(error);\n\t\t\tif (isRequiredCompactionFallbackReason(event.reason) && failureKind !== undefined && !event.signal.aborted) {\n\t\t\t\tconst fallback = createRequiredCompactionFallback(\n\t\t\t\t\tsnapshot.preparation,\n\t\t\t\t\tsnapshot.contextWindow,\n\t\t\t\t\tfailureKind,\n\t\t\t\t\t{ taskIntent: resolveInheritedTaskIntent(event.branchEntries) },\n\t\t\t\t\tevent.branchEntries,\n\t\t\t\t);\n\t\t\t\tif (fallback) return { compaction: fallback };\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\treason: \"deterministic compaction fallback cannot retain the prepared suffix\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\tif (error instanceof SummaryGenerationError) {\n\t\t\t\treturn { cancel: true, reason: error.message };\n\t\t\t}\n\t\t\treturn { cancel: true, reason: `compaction generator failed: ${message}` };\n\t\t}\n\t\tif (!compaction) {\n\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\tif (event.signal.aborted) {\n\t\t\t\treturn { cancel: true };\n\t\t\t}\n\t\t\treturn { cancel: true, reason: \"compaction generator returned no summary\" };\n\t\t}\n\n\t\treturn {\n\t\t\tcompaction,\n\t\t};\n\t});\n\n\tpi.on(\"model_select\", (event, ctx) => {\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\treturn;\n\t\t}\n\t\tconst jobModel = speculativeJob?.snapshot.model;\n\t\tconst selectedModel = ctx.model;\n\t\tconst alreadySpeculatingForSelectedModel =\n\t\t\tjobModel !== undefined &&\n\t\t\tselectedModel !== undefined &&\n\t\t\tjobModel.api === selectedModel.api &&\n\t\t\tjobModel.provider === selectedModel.provider &&\n\t\t\tjobModel.id === selectedModel.id &&\n\t\t\tjobModel.baseUrl === selectedModel.baseUrl &&\n\t\t\tjobModel.contextWindow === selectedModel.contextWindow;\n\t\tif (!alreadySpeculatingForSelectedModel) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tconst previousWindow = event.previousModel?.contextWindow ?? 0;\n\t\tconst contextWindow = ctx.model?.contextWindow ?? 0;\n\t\tif (previousWindow <= contextWindow) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tif (!usage) return;\n\t\tif (breaker.isTripped(state, Date.now())) return;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (policy.shouldStartSpeculativeCompaction(usage, contextWindow, settings, state.lastYield ?? undefined)) {\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\t});\n\n\tpi.on(\"session_compact\", async (event: SessionCompactEvent, ctx) => {\n\t\tconst compactEvent = event;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (compactEvent.accepted) {\n\t\t\tpersistAcceptedMetadata(compactEvent.requestId);\n\t\t\tconst branchEntries = ctx.sessionManager.getBranch();\n\t\t\tconst firstKeptIndex = branchEntries.findIndex(\n\t\t\t\t(entry) => entry.id === compactEvent.compactionEntry.firstKeptEntryId,\n\t\t\t);\n\t\t\tconst keptEntries = firstKeptIndex === -1 ? [] : branchEntries.slice(firstKeptIndex);\n\t\t\tstate = cap.incrementAccepted(state);\n\t\t\tstate = breaker.recordSuccess(state);\n\t\t\tconst details = compactEvent.compactionEntry.details as\n\t\t\t\t| { structuralYield?: { savedTokens: number; savingsRatio: number } }\n\t\t\t\t| undefined;\n\t\t\tconst sy = details?.structuralYield;\n\t\t\tif (sy && typeof sy.savedTokens === \"number\" && typeof sy.savingsRatio === \"number\") {\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tlastYield: { savedTokens: sy.savedTokens, tokensBefore: compactEvent.compactionEntry.tokensBefore },\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\tisIneffectiveCompaction({\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstate = cap.incrementIneffective(state);\n\t\t\t\t\tgetLogger(ctx).debug(\"ineffective_counted\", {\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tresetOnSessionCompact(degradationState);\n\t\t\ttodoBridge.restoreTodosIfMissing(pi, ctx);\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tif (settings.restorationEnabled ?? true) {\n\t\t\t\trestoration.preparePendingPayload(restorationState, {\n\t\t\t\t\taccepted: true,\n\t\t\t\t\treason: compactEvent.reason,\n\t\t\t\t\tcompactionEntryId: compactEvent.compactionEntry.id,\n\t\t\t\t\tcontextWindow: usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\t\t\treserveTokens: settings.reserveTokens,\n\t\t\t\t\tsettings,\n\t\t\t\t\tkeptMessages: keptEntries.flatMap((entry) => {\n\t\t\t\t\t\tif (entry.type !== \"message\") return [];\n\t\t\t\t\t\treturn [entry.message];\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tstate = breaker.recordFailure(state, Date.now(), { route: compactEvent.reason });\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tcancelIdleWarmupRetry();\n\t\tconst message = checkpointState.attachRestorationDirective(\n\t\t\trestorationDirectiveState,\n\t\t\trecentCheckpoint(ctx),\n\t\t\trestoration.consumePendingPayload(restorationState),\n\t\t);\n\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst pendingPromptTokens = estimatePendingPromptTokens(event);\n\t\tconst usageWithPendingPrompt = usage ? withAdditionalTokens(usage, pendingPromptTokens) : undefined;\n\t\t// The SDK owns this lane's context entirely, so even the hard-limit valve stands down;\n\t\t// the circuit breaker never blocks that valve for senpi-owned lanes.\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerCoolingDown = breaker.isTripped(state, Date.now()) || laneOwnsCompaction;\n\t\tif (\n\t\t\t!laneOwnsCompaction &&\n\t\t\tusage &&\n\t\t\tpolicy.isAtHardLimit(usage, contextWindow, settings.reserveTokens, pendingPromptTokens)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"hard_limit_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usage.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, EMERGENCY_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldTriggerCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"threshold_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldStartSpeculativeCompaction(\n\t\t\t\tusageWithPendingPrompt,\n\t\t\t\tcontextWindow,\n\t\t\t\tsettings,\n\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"emergency_prune\", {\n\t\t\t\troute: \"context-event\",\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t});\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\n\t\treturn message ? { message } : undefined;\n\t});\n\n\tpi.on(\"context\", (event, ctx) => {\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst promptContextWindow = getPromptContextWindow(contextWindow, ctx.model?.maxTokens);\n\t\tconst sourceMessages = shouldApplyContextReduction({\n\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\tcontextWindow,\n\t\t\tisProviderNativeCompactionPath:\n\t\t\t\tisOpenAiRemoteCompactionModel(ctx.model) || lanePolicy.disablesSenpiCompaction(ctx),\n\t\t})\n\t\t\t? reduceContextMessages(event.messages, BUILTIN_CONTEXT_REDUCTION_OPTIONS).messages\n\t\t\t: event.messages;\n\t\t// The claude-sdk-oauth lane stands down from senpi compaction entirely:\n\t\t// destructively pruning the provider context near the hard limit would\n\t\t// break the resident SDK session's continuity the same way the gated\n\t\t// reduction lane would.\n\t\tconst emergency = lanePolicy.disablesSenpiCompaction(ctx)\n\t\t\t? { messages: sourceMessages, needsAggressiveCompaction: false }\n\t\t\t: hardLimitEmergencyPrune(sourceMessages, promptContextWindow, emergencyPruneLatch);\n\t\tconst marked = markOpenAiRemoteReplayBoundary(emergency.messages, {\n\t\t\tmodel: ctx.model,\n\t\t\tbranchEntries: ctx.sessionManager.getBranch(),\n\t\t});\n\t\treturn { messages: repairOrphanedToolResults(convertToLlm(marked)) };\n\t});\n\n\tpi.on(\"before_provider_request\", async (event, ctx) => {\n\t\tconst model = event.model ?? ctx.model;\n\t\tif (!isOpenAiRemoteCompactionModel(model)) return undefined;\n\t\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (!auth.ok) return undefined;\n\t\tconst effectiveModel =\n\t\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t\t? {\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t\t}\n\t\t\t\t: model;\n\t\tconst headers = createOpenAiRemoteCompactionHeaders(\n\t\t\teffectiveModel,\n\t\t\t{ ...auth, headers: event.headers ?? auth.headers },\n\t\t\tctx.sessionManager.getSessionId(),\n\t\t);\n\t\tif (!headers) return undefined;\n\t\tconst origin = openAiRemoteCompactionOrigin(effectiveModel, headers);\n\t\treturn rewriteOpenAiPayloadWithRemoteCompaction(\n\t\t\tevent.payload,\n\t\t\t{ model: effectiveModel, branchEntries: ctx.sessionManager.getBranch(), origin },\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t);\n\t});\n\n\tpi.on(\"turn_end\", async (_event, ctx) => {\n\t\ttry {\n\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\thandleTurnEnd(degradationState);\n\t\t\tif (degradationState.recoveryTriggeredThisCycle) return;\n\t\t\tif (state.lastYield && state.lastYield.savedTokens <= 0) {\n\t\t\t\tvoid applyBlockingCompaction(ctx, RECOVERY_INSTRUCTIONS).catch(() => {});\n\t\t\t}\n\t\t} finally {\n\t\t\tstate = resetTurnCounter(state, \"\");\n\t\t}\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tstate = resetTurnCounter(state, \"\");\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (\n\t\t\tidle.shouldRunIdleCompaction({\n\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\taborted: event.aborted === true,\n\t\t\t\tsettings,\n\t\t\t\tusage,\n\t\t\t\tcontextWindow,\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\tmode: ctx.mode,\n\t\t\t})\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"idle_trigger\", { contextWindow, tokens: usage?.tokens ?? 0 });\n\t\t\tidleWarmupAttempt = 0;\n\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\tarmIdleWarmupRetry(ctx);\n\t\t}\n\t});\n\n\tpi.on(\"message_end\", async (event, ctx) => {\n\t\tfor (const entry of collectCompactBoundaryEntries(event.message)) {\n\t\t\tpi.appendEntry(CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE, entry);\n\t\t}\n\t\tif (isAbortedAssistantMessage(event)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tif (isMonitorableMessageEvent(event) && !lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tawait handleMessageEnd(degradationState, event, {\n\t\t\t\tapplyCompaction: async (options) => {\n\t\t\t\t\treturn await applyBlockingCompaction(ctx, options.customInstructions);\n\t\t\t\t},\n\t\t\t\tnotify: (message) => ctx.ui.notify(message, \"warning\"),\n\t\t\t});\n\t\t}\n\t});\n\n\tpi.on(\"tool_call\", (event) => {\n\t\trestoration.trackToolCall(restorationState, event);\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Tool } from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport type {\n\tContextUsage,\n\tExtensionAPI,\n\tExtensionContext,\n\tSessionBeforeCompactEvent,\n\tSessionCompactEvent,\n} from \"../../types.ts\";\nimport * as checkpointState from \"./checkpoint-state.ts\";\nimport * as breaker from \"./circuit-breaker.ts\";\nimport {\n\tBUILTIN_CONTEXT_REDUCTION_OPTIONS,\n\treduceContextMessages,\n\tshouldApplyContextReduction,\n} from \"./context-reduction.ts\";\nimport {\n\tcreateDegradationMonitorState,\n\thandleMessageEnd,\n\thandleTurnEnd,\n\tRECOVERY_INSTRUCTIONS,\n\tresetOnSessionCompact,\n} from \"./degradation-monitor.ts\";\nimport {\n\tclassifyRequiredCompactionFallbackFailure,\n\tcreateRequiredCompactionFallback,\n} from \"./deterministic-fallback.ts\";\nimport * as idle from \"./idle.ts\";\nimport * as idleRetry from \"./idle-retry.ts\";\nimport {\n\tCLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE,\n\tcollectCompactBoundaryEntries,\n\tcreateCompactionLanePolicy,\n\tSDK_NATIVE_LANE_REJECTION_REASON,\n} from \"./lane-policy.ts\";\nimport { type CompactionLogger, createCompactionLogger } from \"./log.ts\";\nimport {\n\tmarkOpenAiRemoteReplayBoundary,\n\ttype OpenAiRemoteCompactionDependencies,\n\trewriteOpenAiPayloadWithRemoteCompaction,\n\trunOpenAiRemoteCompaction,\n\tSENPI_COMPACTION_EVENT,\n} from \"./openai-remote.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport * as cap from \"./per-turn-cap.ts\";\nimport * as policy from \"./policy.ts\";\nimport { repairOrphanedToolResults } from \"./repair-tool-pairs.ts\";\nimport * as restoration from \"./restoration-tracker.ts\";\nimport {\n\tapplyGeneratedCompaction,\n\tcreateEmergencyPruneLatch,\n\tcreateSpeculativeCompactionSnapshot,\n\tgetPromptVariant,\n\thardLimitEmergencyPrune,\n\trunExtensionCompaction,\n\ttype SpeculativeCompactionResult,\n\ttype SpeculativeCompactionSnapshot,\n\tSummaryGenerationError,\n} from \"./speculative.ts\";\nimport { type CompactionExtensionState, createInitialState, resetTurnCounter } from \"./state.ts\";\nimport { resolveInheritedTaskIntent } from \"./task-intent.ts\";\nimport * as todoBridge from \"./todo-bridge.ts\";\nimport { isTransientSummarizationFailure } from \"./transient-failure.ts\";\nimport { isIneffectiveCompaction } from \"./yield.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 200_000;\nconst EMERGENCY_COMPACTION_INSTRUCTIONS =\n\t\"EMERGENCY: hard context limit reached. Produce an aggressive recovery summary that preserves current goal, constraints, files touched, tool outcomes, and exact next steps. Prefer concise factual state over transcript detail.\";\nconst PROACTIVE_COMPACTION_INSTRUCTIONS = \"Proactively compact before the next agent turn.\";\nconst MAX_PENDING_METADATA = 8;\nconst IMAGE_PROMPT_TOKEN_ESTIMATE = 1_200;\nconst MAX_OUTPUT_RESERVE_RATIO = 0.5;\n\ninterface PendingCompactionMetadata {\n\tcheckpoint: checkpointState.AgentCheckpoint;\n\ttodoSnapshot: todoBridge.TodoSnapshotPayload;\n}\n\nfunction approxTokens(text: string): number {\n\treturn Math.ceil(text.length / 4);\n}\n\nfunction estimatePendingPromptTokens(event: { prompt?: string; images?: readonly unknown[] }): number {\n\treturn approxTokens(event.prompt ?? \"\") + (event.images?.length ?? 0) * IMAGE_PROMPT_TOKEN_ESTIMATE;\n}\n\nfunction getPromptContextWindow(contextWindow: number, maxTokens: number | undefined): number {\n\tif (typeof maxTokens !== \"number\" || !Number.isFinite(maxTokens) || maxTokens <= 0 || contextWindow <= 0) {\n\t\treturn contextWindow;\n\t}\n\tconst outputReserve = Math.min(maxTokens, Math.floor(contextWindow * MAX_OUTPUT_RESERVE_RATIO));\n\treturn contextWindow - outputReserve;\n}\n\nfunction withAdditionalTokens(usage: ContextUsage, additionalTokens: number): ContextUsage {\n\tif (usage.tokens === null || additionalTokens <= 0) return usage;\n\tconst tokens = usage.tokens + additionalTokens;\n\treturn {\n\t\t...usage,\n\t\ttokens,\n\t\tpercent: usage.contextWindow > 0 ? (tokens / usage.contextWindow) * 100 : usage.percent,\n\t};\n}\n\nfunction isMonitorableMessageEvent(event: { message: AgentMessage }): event is {\n\tmessage: AgentMessage & { content: Array<{ type: string; text?: string }> };\n} {\n\treturn \"content\" in event.message && Array.isArray(event.message.content);\n}\n\nfunction isAbortedAssistantMessage(event: { message: AgentMessage }): boolean {\n\treturn event.message.role === \"assistant\" && \"stopReason\" in event.message && event.message.stopReason === \"aborted\";\n}\n\nfunction isRequiredCompactionFallbackReason(reason: SessionBeforeCompactEvent[\"reason\"]): boolean {\n\treturn reason === \"threshold\" || reason === \"overflow\";\n}\n\nfunction recentCheckpoint(ctx: ExtensionContext): checkpointState.AgentCheckpoint | null {\n\tconst checkpoint = checkpointState.getLatestCheckpoint(ctx);\n\tif (!checkpoint?.timestamp) return null;\n\treturn Date.now() - checkpoint.timestamp <= 60_000 ? checkpoint : null;\n}\n\nfunction shouldEndFeedback(result: SpeculativeCompactionResult): boolean {\n\treturn !result.applied && result.reason !== \"rejected\";\n}\n\nfunction endCompactionFeedback(\n\tctx: ExtensionContext,\n\tsignal: AbortSignal | undefined,\n\tresult: SpeculativeCompactionResult,\n): void {\n\tif (shouldEndFeedback(result)) {\n\t\tctx.endCompaction?.({ reason: \"extension\", signal, aborted: signal?.aborted });\n\t}\n}\n\nfunction linkAbortSignal(source: AbortSignal | undefined, target: AbortController): () => void {\n\tif (!source) return () => {};\n\tif (source.aborted) {\n\t\ttarget.abort();\n\t\treturn () => {};\n\t}\n\tconst abort = () => target.abort();\n\tsource.addEventListener(\"abort\", abort, { once: true });\n\treturn () => source.removeEventListener(\"abort\", abort);\n}\n\nfunction createBlockingRemoteCompactionEvent(\n\tctx: ExtensionContext,\n\tsnapshot: SpeculativeCompactionSnapshot,\n\tcustomInstructions: string,\n\tsignal: AbortSignal,\n): SessionBeforeCompactEvent {\n\treturn {\n\t\ttype: \"session_before_compact\",\n\t\treason: \"extension\",\n\t\twillRetry: false,\n\t\trequestId: randomUUID(),\n\t\tpreparation: snapshot.preparation,\n\t\tbranchEntries: ctx.sessionManager.getBranch(),\n\t\tcustomInstructions,\n\t\tsignal,\n\t};\n}\n\nexport default function compactionExtension(\n\tpi: ExtensionAPI,\n\tremoteCompactionDependencies: OpenAiRemoteCompactionDependencies = {},\n): void {\n\tlet state: CompactionExtensionState = createInitialState();\n\tconst lanePolicy = createCompactionLanePolicy();\n\tconst restorationDirectiveState = checkpointState.createRestorationDirectiveState();\n\tconst emergencyPruneLatch = createEmergencyPruneLatch();\n\tconst degradationState = createDegradationMonitorState();\n\tconst restorationState = state.restoration ?? restoration.createRestorationTrackerState();\n\tstate = { ...state, restoration: restorationState };\n\tlet speculativeGeneration = 0;\n\tlet speculativeJob:\n\t\t| {\n\t\t\t\tgeneration: number;\n\t\t\t\tsnapshot: SpeculativeCompactionSnapshot;\n\t\t\t\tcontroller: AbortController;\n\t\t\t\tpromise: Promise<CompactionResult | undefined>;\n\t\t\t\tfailure: Promise<Error | undefined>;\n\t\t }\n\t\t| undefined;\n\tconst pendingMetadata = new Map<string, PendingCompactionMetadata>();\n\tlet logger: CompactionLogger | undefined;\n\tconst getLogger = (ctx: ExtensionContext): CompactionLogger => (logger ??= createCompactionLogger(ctx.agentDir));\n\n\tfunction getSummarizationTools(): Tool[] {\n\t\tif (typeof pi.getAllTools !== \"function\" || typeof pi.getActiveTools !== \"function\") return [];\n\t\ttry {\n\t\t\tconst definitionsByName = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));\n\t\t\treturn pi.getActiveTools().flatMap((name) => {\n\t\t\t\tconst tool = definitionsByName.get(name);\n\t\t\t\treturn tool ? [{ name: tool.name, description: tool.description, parameters: tool.parameters }] : [];\n\t\t\t});\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tlet idleWarmupTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet idleWarmupAttempt = 0;\n\n\tfunction cancelIdleWarmupRetry(): void {\n\t\tif (idleWarmupTimer === undefined) return;\n\t\tclearTimeout(idleWarmupTimer);\n\t\tidleWarmupTimer = undefined;\n\t}\n\n\t// Fenced on the observed job: a prompt, invalidation, or newer warm-up\n\t// stands this watcher down before it can start a duplicate summarization.\n\tfunction armIdleWarmupRetry(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\tvoid job.failure.then((failure) => {\n\t\t\tif (failure === undefined) {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (speculativeJob !== job) return;\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\tconst retryDecision: idleRetry.IdleWarmupRetryDecision = {\n\t\t\t\tattempt: idleWarmupAttempt,\n\t\t\t\ttransient: isTransientSummarizationFailure(failure, failure.message),\n\t\t\t\tisIdle: ctx.isIdle(),\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tstillOverThreshold:\n\t\t\t\t\tusage !== undefined &&\n\t\t\t\t\tpolicy.shouldTriggerCompaction(\n\t\t\t\t\t\tusage,\n\t\t\t\t\t\tcontextWindow,\n\t\t\t\t\t\tctx.getCompactionSettings(),\n\t\t\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\t\t),\n\t\t\t};\n\t\t\tif (!idleRetry.shouldRetryIdleWarmup(retryDecision)) return;\n\t\t\tcancelIdleWarmupRetry();\n\t\t\tidleWarmupTimer = setTimeout(() => {\n\t\t\t\tidleWarmupTimer = undefined;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tidleWarmupAttempt += 1;\n\t\t\t\tgetLogger(ctx).debug(\"idle_trigger\", {\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\ttokens: usage?.tokens ?? 0,\n\t\t\t\t\tcount: idleWarmupAttempt,\n\t\t\t\t});\n\t\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t}, idleRetry.IDLE_WARMUP_RETRY_DELAY_MS);\n\t\t});\n\t}\n\n\tfunction invalidateSpeculativeCompaction(ctx: ExtensionContext): void {\n\t\tconst previousGeneration = speculativeGeneration;\n\t\tspeculativeGeneration++;\n\t\tgetLogger(ctx).debug(\"speculative_invalidated\", { generation: previousGeneration });\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t}\n\n\tfunction startSpeculativeCompaction(ctx: ExtensionContext, customInstructions: string): void {\n\t\tif (speculativeJob) return;\n\t\tconst generation = ++speculativeGeneration;\n\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\tgeneration,\n\t\t\tcustomInstructions,\n\t\t\torigin: \"speculative\",\n\t\t\ttools: getSummarizationTools(),\n\t\t});\n\t\tif (!snapshot) return;\n\t\tgetLogger(ctx).debug(\"speculative_started\", { generation, origin: \"speculative\" });\n\t\tconst controller = new AbortController();\n\t\tconst settled = runExtensionCompaction(ctx, snapshot, controller.signal).then(\n\t\t\t(result) => ({ result, error: undefined }),\n\t\t\t(error: unknown) => ({ result: undefined, error: error instanceof Error ? error : new Error(String(error)) }),\n\t\t);\n\t\tconst promise = settled.then(({ result }) => result);\n\t\tconst failure = settled.then(({ error }) => error);\n\t\tspeculativeJob = { generation, snapshot, controller, promise, failure };\n\t}\n\n\tfunction capturePendingMetadata(requestId: string, ctx: ExtensionContext): void {\n\t\tpendingMetadata.set(requestId, {\n\t\t\tcheckpoint: checkpointState.captureAgentCheckpoint(pi, ctx),\n\t\t\ttodoSnapshot: todoBridge.createTodoSnapshot(ctx),\n\t\t});\n\t\twhile (pendingMetadata.size > MAX_PENDING_METADATA) {\n\t\t\tconst oldestRequestId = pendingMetadata.keys().next().value;\n\t\t\tif (oldestRequestId === undefined) break;\n\t\t\tpendingMetadata.delete(oldestRequestId);\n\t\t}\n\t}\n\n\tfunction persistAcceptedMetadata(requestId: string): void {\n\t\tconst metadata = pendingMetadata.get(requestId);\n\t\tif (!metadata) return;\n\t\tpendingMetadata.delete(requestId);\n\t\tcheckpointState.persistCheckpoint(pi, metadata.checkpoint);\n\t\ttodoBridge.persistTodoSnapshot(pi, metadata.todoSnapshot);\n\t}\n\n\tasync function applyBlockingCompaction(\n\t\tctx: ExtensionContext,\n\t\tcustomInstructions: string,\n\t): Promise<SpeculativeCompactionResult> {\n\t\tif (breaker.isTripped(state, Date.now())) {\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tlet feedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\ttry {\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) {\n\t\t\t\tconst remoteGeneration = speculativeGeneration + 1;\n\t\t\t\tconst remoteSnapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\t\tgeneration: remoteGeneration,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\torigin: \"blocking\",\n\t\t\t\t});\n\t\t\t\tgetLogger(ctx).debug(\"blocking_started\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\tif (remoteSnapshot) {\n\t\t\t\t\tconst remoteSignal = feedbackSignal ?? new AbortController().signal;\n\t\t\t\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tcreateBlockingRemoteCompactionEvent(ctx, remoteSnapshot, customInstructions, remoteSignal),\n\t\t\t\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t\t);\n\t\t\t\t\tif (remoteCompaction) {\n\t\t\t\t\t\tif (speculativeGeneration !== remoteGeneration - 1) {\n\t\t\t\t\t\t\tconst result = { applied: false, reason: \"stale\" } as const;\n\t\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: remoteGeneration });\n\t\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspeculativeGeneration = remoteGeneration;\n\t\t\t\t\t\tspeculativeJob?.controller.abort();\n\t\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tremoteSnapshot,\n\t\t\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\t\t\tremoteCompaction,\n\t\t\t\t\t\t\tfeedbackSignal,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pendingJob = speculativeJob;\n\t\t\tif (pendingJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(feedbackSignal, pendingJob.controller);\n\t\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\t\tlet inheritedFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcompaction = await pendingJob.promise;\n\t\t\t\t\tinheritedFailure = await pendingJob.failure;\n\t\t\t\t\tif (compaction)\n\t\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: pendingJob.generation, route: \"speculative\" });\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (inheritedFailure !== undefined) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tif (isTransientSummarizationFailure(inheritedFailure, inheritedFailure.message)) {\n\t\t\t\t\t\tctx.endCompaction?.({\n\t\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\t\t\t\terrorMessage: `Compaction failed: ${inheritedFailure.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tpendingJob.snapshot,\n\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\tcompaction,\n\t\t\t\t\tfeedbackSignal,\n\t\t\t\t);\n\t\t\t\tif (result.applied) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", {\n\t\t\t\t\t\tgeneration: pendingJob.generation,\n\t\t\t\t\t\torigin: \"speculative\",\n\t\t\t\t\t});\n\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (result.reason === \"stale\") {\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: pendingJob.generation });\n\t\t\t\t} else if (result.reason === \"rejected\") {\n\t\t\t\t\tfeedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\t\t\t}\n\t\t\t\tspeculativeJob = undefined;\n\t\t\t}\n\n\t\t\tconst generation = ++speculativeGeneration;\n\t\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\tgeneration,\n\t\t\t\tcustomInstructions,\n\t\t\t\torigin: \"core-route\",\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t});\n\t\t\tif (!snapshot) {\n\t\t\t\tconst result = { applied: false, reason: \"unavailable\" } as const;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: \"unavailable\" });\n\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, feedbackSignal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({\n\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof SummaryGenerationError)) throw error;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: error.kind });\n\t\t\t}\n\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\tctx,\n\t\t\t\tsnapshot,\n\t\t\t\t() => speculativeGeneration,\n\t\t\t\tcompaction,\n\t\t\t\tfeedbackSignal,\n\t\t\t);\n\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tctx.endCompaction?.({\n\t\t\t\treason: \"extension\",\n\t\t\t\tsignal: feedbackSignal,\n\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\terrorMessage: `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tconst transient = isTransientSummarizationFailure(error, message);\n\t\t\tif (transient) {\n\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpi.on(\"session_before_compact\", async (event: SessionBeforeCompactEvent, ctx) => {\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\treturn { cancel: true, reason: SDK_NATIVE_LANE_REJECTION_REASON };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { reason: event.reason, count: state.acceptedAbsolute });\n\t\t\treturn {\n\t\t\t\tcancel: true,\n\t\t\t\trejectionCause: \"per-turn-cap\",\n\t\t\t\treason: \"absolute compaction cap reached for this session\",\n\t\t\t};\n\t\t}\n\t\tconst now = Date.now();\n\t\tif (breaker.isTripped(state, now) && !breaker.shouldBypass(state, { reason: event.reason })) {\n\t\t\tconst remainingMs = state.trippedAt !== null ? Math.max(0, state.trippedAt + breaker.COOLDOWN_MS - now) : 0;\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { reason: event.reason, remainingSec: Math.ceil(remainingMs / 1000) });\n\t\t\treturn {\n\t\t\t\tcancel: true,\n\t\t\t\trejectionCause: \"circuit-breaker\",\n\t\t\t\treason: `compaction circuit breaker cooling down (${Math.ceil(remainingMs / 1000)}s left)`,\n\t\t\t};\n\t\t}\n\n\t\tcapturePendingMetadata(event.requestId, ctx);\n\n\t\tconst model = ctx.model;\n\t\tif (!model) return undefined;\n\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\tctx,\n\t\t\tevent,\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\tremoteCompactionDependencies,\n\t\t);\n\t\tif (remoteCompaction) {\n\t\t\tgetLogger(ctx).debug(\"core_route_generated\", { route: \"core-route\", requestId: event.requestId });\n\t\t\treturn { compaction: remoteCompaction };\n\t\t}\n\n\t\tconst snapshot = {\n\t\t\tgeneration: ++speculativeGeneration,\n\t\t\texpectedRevision: ctx.getMessageRevision(),\n\t\t\tmodel,\n\t\t\tcontextWindow: ctx.getContextUsage()?.contextWindow ?? model.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\tpreparation: event.preparation,\n\t\t\tbranchEntries: event.branchEntries,\n\t\t\tpromptVariant: getPromptVariant(event),\n\t\t\torigin: \"core-route\" as const,\n\t\t\tcustomInstructions: event.customInstructions,\n\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\ttools: getSummarizationTools(),\n\t\t};\n\t\tlet compaction: CompactionResult | undefined;\n\t\ttry {\n\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, event.signal, (delta) =>\n\t\t\t\tctx.updateCompaction?.({ reason: event.reason, signal: event.signal, delta }),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(error);\n\t\t\tif (isRequiredCompactionFallbackReason(event.reason) && failureKind !== undefined && !event.signal.aborted) {\n\t\t\t\tconst fallback = createRequiredCompactionFallback(\n\t\t\t\t\tsnapshot.preparation,\n\t\t\t\t\tsnapshot.contextWindow,\n\t\t\t\t\tfailureKind,\n\t\t\t\t\t{ taskIntent: resolveInheritedTaskIntent(event.branchEntries) },\n\t\t\t\t\tevent.branchEntries,\n\t\t\t\t);\n\t\t\t\tif (fallback) return { compaction: fallback };\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\treason: \"deterministic compaction fallback cannot retain the prepared suffix\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\tif (error instanceof SummaryGenerationError) {\n\t\t\t\treturn { cancel: true, reason: error.message };\n\t\t\t}\n\t\t\treturn { cancel: true, reason: `compaction generator failed: ${message}` };\n\t\t}\n\t\tif (!compaction) {\n\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\tif (event.signal.aborted) {\n\t\t\t\treturn { cancel: true };\n\t\t\t}\n\t\t\treturn { cancel: true, reason: \"compaction generator returned no summary\" };\n\t\t}\n\n\t\treturn {\n\t\t\tcompaction,\n\t\t};\n\t});\n\n\tpi.on(\"model_select\", (event, ctx) => {\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\treturn;\n\t\t}\n\t\tconst jobModel = speculativeJob?.snapshot.model;\n\t\tconst selectedModel = ctx.model;\n\t\tconst alreadySpeculatingForSelectedModel =\n\t\t\tjobModel !== undefined &&\n\t\t\tselectedModel !== undefined &&\n\t\t\tjobModel.api === selectedModel.api &&\n\t\t\tjobModel.provider === selectedModel.provider &&\n\t\t\tjobModel.id === selectedModel.id &&\n\t\t\tjobModel.baseUrl === selectedModel.baseUrl &&\n\t\t\tjobModel.contextWindow === selectedModel.contextWindow;\n\t\tif (!alreadySpeculatingForSelectedModel) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tconst previousWindow = event.previousModel?.contextWindow ?? 0;\n\t\tconst contextWindow = ctx.model?.contextWindow ?? 0;\n\t\tif (previousWindow <= contextWindow) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tif (!usage) return;\n\t\tif (breaker.isTripped(state, Date.now())) return;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (policy.shouldStartSpeculativeCompaction(usage, contextWindow, settings, state.lastYield ?? undefined)) {\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\t});\n\n\tpi.on(\"session_compact\", async (event: SessionCompactEvent, ctx) => {\n\t\tconst compactEvent = event;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (compactEvent.accepted) {\n\t\t\tpersistAcceptedMetadata(compactEvent.requestId);\n\t\t\tconst branchEntries = ctx.sessionManager.getBranch();\n\t\t\tconst firstKeptIndex = branchEntries.findIndex(\n\t\t\t\t(entry) => entry.id === compactEvent.compactionEntry.firstKeptEntryId,\n\t\t\t);\n\t\t\tconst keptEntries = firstKeptIndex === -1 ? [] : branchEntries.slice(firstKeptIndex);\n\t\t\tstate = cap.incrementAccepted(state);\n\t\t\tstate = breaker.recordSuccess(state);\n\t\t\tconst details = compactEvent.compactionEntry.details as\n\t\t\t\t| { structuralYield?: { savedTokens: number; savingsRatio: number } }\n\t\t\t\t| undefined;\n\t\t\tconst sy = details?.structuralYield;\n\t\t\tif (sy && typeof sy.savedTokens === \"number\" && typeof sy.savingsRatio === \"number\") {\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tlastYield: { savedTokens: sy.savedTokens, tokensBefore: compactEvent.compactionEntry.tokensBefore },\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\tisIneffectiveCompaction({\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstate = cap.incrementIneffective(state);\n\t\t\t\t\tgetLogger(ctx).debug(\"ineffective_counted\", {\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tresetOnSessionCompact(degradationState);\n\t\t\ttodoBridge.restoreTodosIfMissing(pi, ctx);\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tif (settings.restorationEnabled ?? true) {\n\t\t\t\trestoration.preparePendingPayload(restorationState, {\n\t\t\t\t\taccepted: true,\n\t\t\t\t\treason: compactEvent.reason,\n\t\t\t\t\tcompactionEntryId: compactEvent.compactionEntry.id,\n\t\t\t\t\tcontextWindow: usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\t\t\treserveTokens: settings.reserveTokens,\n\t\t\t\t\tsettings,\n\t\t\t\t\tkeptMessages: keptEntries.flatMap((entry) => {\n\t\t\t\t\t\tif (entry.type !== \"message\") return [];\n\t\t\t\t\t\treturn [entry.message];\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tstate = breaker.recordFailure(state, Date.now(), { route: compactEvent.reason });\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tcancelIdleWarmupRetry();\n\t\tconst message = checkpointState.attachRestorationDirective(\n\t\t\trestorationDirectiveState,\n\t\t\trecentCheckpoint(ctx),\n\t\t\trestoration.consumePendingPayload(restorationState),\n\t\t);\n\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst pendingPromptTokens = estimatePendingPromptTokens(event);\n\t\tconst usageWithPendingPrompt = usage ? withAdditionalTokens(usage, pendingPromptTokens) : undefined;\n\t\t// The SDK owns this lane's context entirely, so even the hard-limit valve stands down;\n\t\t// the circuit breaker never blocks that valve for senpi-owned lanes.\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerCoolingDown = breaker.isTripped(state, Date.now()) || laneOwnsCompaction;\n\t\tif (\n\t\t\t!laneOwnsCompaction &&\n\t\t\tusage &&\n\t\t\tpolicy.isAtHardLimit(usage, contextWindow, settings.reserveTokens, pendingPromptTokens)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"hard_limit_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usage.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, EMERGENCY_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldTriggerCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"threshold_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldStartSpeculativeCompaction(\n\t\t\t\tusageWithPendingPrompt,\n\t\t\t\tcontextWindow,\n\t\t\t\tsettings,\n\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"emergency_prune\", {\n\t\t\t\troute: \"context-event\",\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t});\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\n\t\treturn message ? { message } : undefined;\n\t});\n\n\tpi.on(\"context\", (event, ctx) => {\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst promptContextWindow = getPromptContextWindow(contextWindow, ctx.model?.maxTokens);\n\t\tconst sourceMessages = shouldApplyContextReduction({\n\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\tcontextWindow,\n\t\t\tisProviderNativeCompactionPath:\n\t\t\t\tisOpenAiRemoteCompactionModel(ctx.model) || lanePolicy.disablesSenpiCompaction(ctx),\n\t\t})\n\t\t\t? reduceContextMessages(event.messages, BUILTIN_CONTEXT_REDUCTION_OPTIONS).messages\n\t\t\t: event.messages;\n\t\t// The claude-sdk-oauth lane stands down from senpi compaction entirely:\n\t\t// destructively pruning the provider context near the hard limit would\n\t\t// break the resident SDK session's continuity the same way the gated\n\t\t// reduction lane would.\n\t\tconst emergency = lanePolicy.disablesSenpiCompaction(ctx)\n\t\t\t? { messages: sourceMessages, needsAggressiveCompaction: false }\n\t\t\t: hardLimitEmergencyPrune(sourceMessages, promptContextWindow, emergencyPruneLatch);\n\t\tconst marked = markOpenAiRemoteReplayBoundary(emergency.messages, {\n\t\t\tmodel: ctx.model,\n\t\t\tbranchEntries: ctx.sessionManager.getBranch(),\n\t\t});\n\t\treturn { messages: repairOrphanedToolResults(convertToLlm(marked)) };\n\t});\n\n\tpi.on(\"before_provider_request\", async (event, ctx) => {\n\t\tconst model = event.model ?? ctx.model;\n\t\tif (!isOpenAiRemoteCompactionModel(model)) return undefined;\n\t\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (!auth.ok) return undefined;\n\t\tconst effectiveModel =\n\t\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t\t? {\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t\t}\n\t\t\t\t: model;\n\t\tconst headers = createOpenAiRemoteCompactionHeaders(\n\t\t\teffectiveModel,\n\t\t\t{ ...auth, headers: event.headers ?? auth.headers },\n\t\t\tctx.sessionManager.getSessionId(),\n\t\t);\n\t\tif (!headers) return undefined;\n\t\tconst origin = openAiRemoteCompactionOrigin(effectiveModel, headers);\n\t\treturn rewriteOpenAiPayloadWithRemoteCompaction(\n\t\t\tevent.payload,\n\t\t\t{ model: effectiveModel, branchEntries: ctx.sessionManager.getBranch(), origin },\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t);\n\t});\n\n\tpi.on(\"turn_end\", async (_event, ctx) => {\n\t\ttry {\n\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\thandleTurnEnd(degradationState);\n\t\t\tif (degradationState.recoveryTriggeredThisCycle) return;\n\t\t\tif (state.lastYield && state.lastYield.savedTokens <= 0) {\n\t\t\t\tvoid applyBlockingCompaction(ctx, RECOVERY_INSTRUCTIONS).catch(() => {});\n\t\t\t}\n\t\t} finally {\n\t\t\tstate = resetTurnCounter(state, \"\");\n\t\t}\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tstate = resetTurnCounter(state, \"\");\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (\n\t\t\tidle.shouldRunIdleCompaction({\n\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\taborted: event.aborted === true,\n\t\t\t\tsettings,\n\t\t\t\tusage,\n\t\t\t\tcontextWindow,\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\tmode: ctx.mode,\n\t\t\t})\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"idle_trigger\", { contextWindow, tokens: usage?.tokens ?? 0 });\n\t\t\tidleWarmupAttempt = 0;\n\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\tarmIdleWarmupRetry(ctx);\n\t\t}\n\t});\n\n\tpi.on(\"message_end\", async (event, ctx) => {\n\t\tfor (const entry of collectCompactBoundaryEntries(event.message)) {\n\t\t\tpi.appendEntry(CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE, entry);\n\t\t}\n\t\tif (isAbortedAssistantMessage(event)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tif (isMonitorableMessageEvent(event) && !lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tawait handleMessageEnd(degradationState, event, {\n\t\t\t\tapplyCompaction: async (options) => {\n\t\t\t\t\treturn await applyBlockingCompaction(ctx, options.customInstructions);\n\t\t\t\t},\n\t\t\t\tnotify: (message) => ctx.ui.notify(message, \"warning\"),\n\t\t\t});\n\t\t}\n\t});\n\n\tpi.on(\"tool_call\", (event) => {\n\t\trestoration.trackToolCall(restorationState, event);\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-warm-renderer.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"cache-warm-renderer.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAKN,KAAK,wBAAwB,EAC7B,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,wBAAwB,CAU7E,CAAC"}
|
|
@@ -4,7 +4,7 @@ export const renderGoalCacheWarmupEntry = noticeEntryRenderer((entry) => {
|
|
|
4
4
|
const data = entry.data;
|
|
5
5
|
if (data === undefined)
|
|
6
6
|
return undefined;
|
|
7
|
-
const warm = warmLine(data
|
|
7
|
+
const warm = warmLine(data);
|
|
8
8
|
return {
|
|
9
9
|
title: titleLine(data),
|
|
10
10
|
why: whyLine(data),
|
|
@@ -13,31 +13,44 @@ export const renderGoalCacheWarmupEntry = noticeEntryRenderer((entry) => {
|
|
|
13
13
|
};
|
|
14
14
|
});
|
|
15
15
|
function titleLine(data) {
|
|
16
|
-
const
|
|
16
|
+
const wakeSources = data.activeMonitorCount === 1 ? "1 wake source on duty" : `${data.activeMonitorCount} wake sources on duty`;
|
|
17
|
+
const iteration = validIteration(data.iteration);
|
|
18
|
+
const iterationText = iteration === undefined ? "" : ` · iteration ${iteration}`;
|
|
17
19
|
switch (data.phase) {
|
|
18
20
|
case "scheduled":
|
|
19
|
-
return `⚡ Cache-warm wait · ${
|
|
21
|
+
return `⚡ Cache-warm wait${iterationText} · ${wakeSources}`;
|
|
20
22
|
case "resumed":
|
|
21
|
-
return `⚡ Cache-warm wake · waited ${formatWakeDuration(data.waitedMs ?? data.delayMs)} · ${
|
|
23
|
+
return `⚡ Cache-warm wake${iterationText} · waited ${formatWakeDuration(data.waitedMs ?? data.delayMs)} · ${wakeSources}`;
|
|
22
24
|
}
|
|
23
25
|
}
|
|
26
|
+
function validIteration(value) {
|
|
27
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined;
|
|
28
|
+
}
|
|
24
29
|
function whyLine(data) {
|
|
25
30
|
switch (data.phase) {
|
|
26
31
|
case "scheduled": {
|
|
27
32
|
const deferred = `Continuation deferred ${formatWakeDuration(data.delayMs)}`;
|
|
28
|
-
|
|
33
|
+
if (data.cache?.ttlSeconds === undefined) {
|
|
34
|
+
return `${deferred} - the monitor wakes the goal the moment decisive output lands.`;
|
|
35
|
+
}
|
|
36
|
+
return data.delayMs < data.cache.ttlSeconds * 1000
|
|
29
37
|
? `${deferred} - the timed wake stays inside the ${formatCacheTtl(data.cache.ttlSeconds)} prompt-cache TTL.`
|
|
30
|
-
: `${deferred} - the
|
|
38
|
+
: `${deferred} - the prompt-cache TTL may elapse before the timed wake.`;
|
|
31
39
|
}
|
|
32
40
|
case "resumed":
|
|
33
41
|
return "Woke on schedule to keep pursuing the goal.";
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
|
-
function warmLine(
|
|
44
|
+
function warmLine(data) {
|
|
45
|
+
const cache = data.cache;
|
|
37
46
|
if (cache === undefined || cache.cachedTokens <= 0)
|
|
38
47
|
return undefined;
|
|
39
48
|
const tokens = `~${formatWarmTokenCount(cache.cachedTokens)} tokens`;
|
|
40
|
-
const
|
|
49
|
+
const ttlMayHaveElapsed = cache.ttlSeconds !== undefined && (data.waitedMs ?? data.delayMs) >= cache.ttlSeconds * 1000;
|
|
50
|
+
if (ttlMayHaveElapsed) {
|
|
51
|
+
return `${tokens} were cached after the prior turn · prompt-cache TTL may have elapsed before this wake`;
|
|
52
|
+
}
|
|
53
|
+
const body = data.phase === "scheduled" ? `${tokens} kept warm` : `${tokens} stayed warm in the prompt cache`;
|
|
41
54
|
const saved = cache.estimatedSavedUsd !== undefined && cache.estimatedSavedUsd > 0
|
|
42
55
|
? ` · est. ${formatSavedUsd(cache.estimatedSavedUsd)} saved vs a cold re-read`
|
|
43
56
|
: "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-warm-renderer.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EACN,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"cache-warm-renderer.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EACN,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GAEpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,0BAA0B,GAA4C,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE;IAChH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO;QACN,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;QACtB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;QAClB,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAClE,YAAY,EAAE,QAAQ,IAAI,CAAC,MAAM,oBAAoB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;KACvF,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,IAA8B;IAChD,MAAM,WAAW,GAChB,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,uBAAuB,CAAC;IAC7G,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,SAAS,EAAE,CAAC;IACjF,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,WAAW;YACf,OAAO,oBAAoB,aAAa,MAAM,WAAW,EAAE,CAAC;QAC7D,KAAK,SAAS;YACb,OAAO,oBAAoB,aAAa,aAAa,kBAAkB,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,WAAW,EAAE,CAAC;IAC5H,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9F,CAAC;AAED,SAAS,OAAO,CAAC,IAA8B;IAC9C,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,WAAW,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,yBAAyB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,GAAG,QAAQ,iEAAiE,CAAC;YACrF,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;gBACjD,CAAC,CAAC,GAAG,QAAQ,sCAAsC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB;gBAC5G,CAAC,CAAC,GAAG,QAAQ,2DAA2D,CAAC;QAC3E,CAAC;QACD,KAAK,SAAS;YACb,OAAO,6CAA6C,CAAC;IACvD,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAC,IAA8B;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;IACrE,MAAM,iBAAiB,GACtB,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9F,IAAI,iBAAiB,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,wFAAwF,CAAC;IAC1G,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,kCAAkC,CAAC;IAC9G,MAAM,KAAK,GACV,KAAK,CAAC,iBAAiB,KAAK,SAAS,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC;QACnE,CAAC,CAAC,WAAW,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,0BAA0B;QAC9E,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["import { noticeEntryRenderer } from \"../../notice/index.ts\";\nimport type { EntryRenderer } from \"../../types.ts\";\nimport {\n\tformatCacheTtl,\n\tformatSavedUsd,\n\tformatWakeDuration,\n\tformatWarmTokenCount,\n\ttype GoalCacheWarmupEntryData,\n} from \"./cache-warm.ts\";\n\nexport const renderGoalCacheWarmupEntry: EntryRenderer<GoalCacheWarmupEntryData> = noticeEntryRenderer((entry) => {\n\tconst data = entry.data;\n\tif (data === undefined) return undefined;\n\tconst warm = warmLine(data);\n\treturn {\n\t\ttitle: titleLine(data),\n\t\twhy: whyLine(data),\n\t\textra: warm === undefined ? [] : [{ text: warm, tone: \"success\" }],\n\t\texpandedLine: `goal ${data.goalId} · planned delay ${formatWakeDuration(data.delayMs)}`,\n\t};\n});\n\nfunction titleLine(data: GoalCacheWarmupEntryData): string {\n\tconst wakeSources =\n\t\tdata.activeMonitorCount === 1 ? \"1 wake source on duty\" : `${data.activeMonitorCount} wake sources on duty`;\n\tconst iteration = validIteration(data.iteration);\n\tconst iterationText = iteration === undefined ? \"\" : ` · iteration ${iteration}`;\n\tswitch (data.phase) {\n\t\tcase \"scheduled\":\n\t\t\treturn `⚡ Cache-warm wait${iterationText} · ${wakeSources}`;\n\t\tcase \"resumed\":\n\t\t\treturn `⚡ Cache-warm wake${iterationText} · waited ${formatWakeDuration(data.waitedMs ?? data.delayMs)} · ${wakeSources}`;\n\t}\n}\n\nfunction validIteration(value: number | undefined): number | undefined {\n\treturn typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : undefined;\n}\n\nfunction whyLine(data: GoalCacheWarmupEntryData): string {\n\tswitch (data.phase) {\n\t\tcase \"scheduled\": {\n\t\t\tconst deferred = `Continuation deferred ${formatWakeDuration(data.delayMs)}`;\n\t\t\tif (data.cache?.ttlSeconds === undefined) {\n\t\t\t\treturn `${deferred} - the monitor wakes the goal the moment decisive output lands.`;\n\t\t\t}\n\t\t\treturn data.delayMs < data.cache.ttlSeconds * 1000\n\t\t\t\t? `${deferred} - the timed wake stays inside the ${formatCacheTtl(data.cache.ttlSeconds)} prompt-cache TTL.`\n\t\t\t\t: `${deferred} - the prompt-cache TTL may elapse before the timed wake.`;\n\t\t}\n\t\tcase \"resumed\":\n\t\t\treturn \"Woke on schedule to keep pursuing the goal.\";\n\t}\n}\n\nfunction warmLine(data: GoalCacheWarmupEntryData): string | undefined {\n\tconst cache = data.cache;\n\tif (cache === undefined || cache.cachedTokens <= 0) return undefined;\n\tconst tokens = `~${formatWarmTokenCount(cache.cachedTokens)} tokens`;\n\tconst ttlMayHaveElapsed =\n\t\tcache.ttlSeconds !== undefined && (data.waitedMs ?? data.delayMs) >= cache.ttlSeconds * 1000;\n\tif (ttlMayHaveElapsed) {\n\t\treturn `${tokens} were cached after the prior turn · prompt-cache TTL may have elapsed before this wake`;\n\t}\n\tconst body = data.phase === \"scheduled\" ? `${tokens} kept warm` : `${tokens} stayed warm in the prompt cache`;\n\tconst saved =\n\t\tcache.estimatedSavedUsd !== undefined && cache.estimatedSavedUsd > 0\n\t\t\t? ` · est. ${formatSavedUsd(cache.estimatedSavedUsd)} saved vs a cold re-read`\n\t\t\t: \"\";\n\treturn `${body}${saved}`;\n}\n"]}
|
|
@@ -2,6 +2,8 @@ import type { Api, Model } from "@earendil-works/pi-ai";
|
|
|
2
2
|
import type { TokenUsageSnapshot } from "./types.ts";
|
|
3
3
|
/** Custom session-entry type carrying the cache-warm continuation story. */
|
|
4
4
|
export declare const GOAL_CACHE_WARMUP_ENTRY_TYPE = "goal-cache-warmup";
|
|
5
|
+
export declare const GOAL_MONITOR_CONTINUATION_FALLBACK_DELAY_MS = 240000;
|
|
6
|
+
export declare function resolveGoalMonitorContinuationDelayMs(cacheSafeWaitSeconds: number | undefined, goalBackstopMaxSeconds?: number): number;
|
|
5
7
|
/** Cache context captured when a monitor-wait continuation is scheduled. */
|
|
6
8
|
export interface GoalCacheWarmMetrics {
|
|
7
9
|
/** Prompt-cache TTL of the active model in seconds, when known. */
|
|
@@ -20,15 +22,22 @@ export type GoalCacheWarmupPhase = "scheduled" | "resumed";
|
|
|
20
22
|
export interface GoalCacheWarmupEntryData {
|
|
21
23
|
readonly phase: GoalCacheWarmupPhase;
|
|
22
24
|
readonly goalId: string;
|
|
25
|
+
/** Display ordinal within the current in-memory Goal/wake epoch; absent on legacy persisted entries. */
|
|
26
|
+
readonly iteration?: number;
|
|
23
27
|
/** Planned continuation delay in milliseconds. */
|
|
24
28
|
readonly delayMs: number;
|
|
25
29
|
/** Actual wait in milliseconds; present on the `resumed` phase only. */
|
|
26
30
|
readonly waitedMs?: number;
|
|
31
|
+
/** Backward-compatible field containing the total active wake-source count. */
|
|
27
32
|
readonly activeMonitorCount: number;
|
|
28
|
-
/** Full source-keyed snapshot; absent on entries written before
|
|
29
|
-
readonly
|
|
33
|
+
/** Full source-keyed snapshot; absent on entries written before wake sources were generalized. */
|
|
34
|
+
readonly wakeSources?: Readonly<Record<string, number>>;
|
|
30
35
|
readonly cache?: GoalCacheWarmMetrics;
|
|
31
36
|
}
|
|
37
|
+
/** Live entries always carry an iteration; the ordinal is intentionally not persisted into Goal state. */
|
|
38
|
+
export type LiveGoalCacheWarmupEntryData = GoalCacheWarmupEntryData & {
|
|
39
|
+
readonly iteration: number;
|
|
40
|
+
};
|
|
32
41
|
export declare function estimateCacheWarmMetrics(model: Model<Api> | undefined, env: NodeJS.ProcessEnv, lastTurnUsage: Pick<TokenUsageSnapshot, "cacheRead" | "cacheWrite"> | undefined): GoalCacheWarmMetrics | undefined;
|
|
33
42
|
export declare function formatWarmTokenCount(tokens: number): string;
|
|
34
43
|
export declare function formatWakeDuration(ms: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-warm.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAe,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACpC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,SAAS,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"cache-warm.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAe,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,eAAO,MAAM,2CAA2C,SAAU,CAAC;AAInE,wBAAgB,qCAAqC,CACpD,oBAAoB,EAAE,MAAM,GAAG,SAAS,EACxC,sBAAsB,CAAC,EAAE,MAAM,GAC7B,MAAM,CAeR;AAED,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACpC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,SAAS,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,kGAAkG;IAClG,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,0GAA0G;AAC1G,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAIrG,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,GAAG,SAAS,GAC7E,oBAAoB,GAAG,SAAS,CAalC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASrD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { resolvePromptCacheTtlSeconds } from "@earendil-works/pi-ai";
|
|
2
2
|
/** Custom session-entry type carrying the cache-warm continuation story. */
|
|
3
3
|
export const GOAL_CACHE_WARMUP_ENTRY_TYPE = "goal-cache-warmup";
|
|
4
|
+
export const GOAL_MONITOR_CONTINUATION_FALLBACK_DELAY_MS = 240_000;
|
|
5
|
+
const GOAL_MONITOR_CONTINUATION_MIN_DELAY_MS = 1_000;
|
|
6
|
+
const GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS = 3_600_000;
|
|
7
|
+
export function resolveGoalMonitorContinuationDelayMs(cacheSafeWaitSeconds, goalBackstopMaxSeconds) {
|
|
8
|
+
if (typeof cacheSafeWaitSeconds !== "number" ||
|
|
9
|
+
!Number.isFinite(cacheSafeWaitSeconds) ||
|
|
10
|
+
cacheSafeWaitSeconds <= 0) {
|
|
11
|
+
return GOAL_MONITOR_CONTINUATION_FALLBACK_DELAY_MS;
|
|
12
|
+
}
|
|
13
|
+
const configuredCeilingMs = typeof goalBackstopMaxSeconds === "number" &&
|
|
14
|
+
Number.isFinite(goalBackstopMaxSeconds) &&
|
|
15
|
+
goalBackstopMaxSeconds > 0
|
|
16
|
+
? Math.min(goalBackstopMaxSeconds * 1000, GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS)
|
|
17
|
+
: GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS;
|
|
18
|
+
return Math.max(GOAL_MONITOR_CONTINUATION_MIN_DELAY_MS, Math.min(cacheSafeWaitSeconds * 1000, configuredCeilingMs));
|
|
19
|
+
}
|
|
4
20
|
const TOKENS_PER_PRICE_UNIT = 1_000_000;
|
|
5
21
|
export function estimateCacheWarmMetrics(model, env, lastTurnUsage) {
|
|
6
22
|
const cachedTokens = clampTokens(lastTurnUsage?.cacheRead) + clampTokens(lastTurnUsage?.cacheWrite);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-warm.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAGrE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,4BAA4B,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cache-warm.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/cache-warm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model, ProviderEnv } from \"@earendil-works/pi-ai\";\nimport { resolvePromptCacheTtlSeconds } from \"@earendil-works/pi-ai\";\nimport type { TokenUsageSnapshot } from \"./types.ts\";\n\n/** Custom session-entry type carrying the cache-warm continuation story. */\nexport const GOAL_CACHE_WARMUP_ENTRY_TYPE = \"goal-cache-warmup\";\n\nexport const GOAL_MONITOR_CONTINUATION_FALLBACK_DELAY_MS = 240_000;\nconst GOAL_MONITOR_CONTINUATION_MIN_DELAY_MS = 1_000;\nconst GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS = 3_600_000;\n\nexport function resolveGoalMonitorContinuationDelayMs(\n\tcacheSafeWaitSeconds: number | undefined,\n\tgoalBackstopMaxSeconds?: number,\n): number {\n\tif (\n\t\ttypeof cacheSafeWaitSeconds !== \"number\" ||\n\t\t!Number.isFinite(cacheSafeWaitSeconds) ||\n\t\tcacheSafeWaitSeconds <= 0\n\t) {\n\t\treturn GOAL_MONITOR_CONTINUATION_FALLBACK_DELAY_MS;\n\t}\n\tconst configuredCeilingMs =\n\t\ttypeof goalBackstopMaxSeconds === \"number\" &&\n\t\tNumber.isFinite(goalBackstopMaxSeconds) &&\n\t\tgoalBackstopMaxSeconds > 0\n\t\t\t? Math.min(goalBackstopMaxSeconds * 1000, GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS)\n\t\t\t: GOAL_MONITOR_CONTINUATION_HARD_CEILING_MS;\n\treturn Math.max(GOAL_MONITOR_CONTINUATION_MIN_DELAY_MS, Math.min(cacheSafeWaitSeconds * 1000, configuredCeilingMs));\n}\n\n/** Cache context captured when a monitor-wait continuation is scheduled. */\nexport interface GoalCacheWarmMetrics {\n\t/** Prompt-cache TTL of the active model in seconds, when known. */\n\treadonly ttlSeconds?: number;\n\t/** Tokens sitting warm in the provider prompt cache after the last turn. */\n\treadonly cachedTokens: number;\n\t/** Estimated USD saved by re-reading those tokens from cache instead of paying a cold input read. */\n\treadonly estimatedSavedUsd?: number;\n}\n\nexport type GoalCacheWarmupPhase = \"scheduled\" | \"resumed\";\n\n/**\n * Durable payload appended as a `goal-cache-warmup` custom entry and carried by\n * the `goal_continuation_scheduled` / `goal_continuation_resumed` pi-events, so\n * external consumers (for example omo-desktop-app) can render the story later.\n */\nexport interface GoalCacheWarmupEntryData {\n\treadonly phase: GoalCacheWarmupPhase;\n\treadonly goalId: string;\n\t/** Display ordinal within the current in-memory Goal/wake epoch; absent on legacy persisted entries. */\n\treadonly iteration?: number;\n\t/** Planned continuation delay in milliseconds. */\n\treadonly delayMs: number;\n\t/** Actual wait in milliseconds; present on the `resumed` phase only. */\n\treadonly waitedMs?: number;\n\t/** Backward-compatible field containing the total active wake-source count. */\n\treadonly activeMonitorCount: number;\n\t/** Full source-keyed snapshot; absent on entries written before wake sources were generalized. */\n\treadonly wakeSources?: Readonly<Record<string, number>>;\n\treadonly cache?: GoalCacheWarmMetrics;\n}\n\n/** Live entries always carry an iteration; the ordinal is intentionally not persisted into Goal state. */\nexport type LiveGoalCacheWarmupEntryData = GoalCacheWarmupEntryData & { readonly iteration: number };\n\nconst TOKENS_PER_PRICE_UNIT = 1_000_000;\n\nexport function estimateCacheWarmMetrics(\n\tmodel: Model<Api> | undefined,\n\tenv: NodeJS.ProcessEnv,\n\tlastTurnUsage: Pick<TokenUsageSnapshot, \"cacheRead\" | \"cacheWrite\"> | undefined,\n): GoalCacheWarmMetrics | undefined {\n\tconst cachedTokens = clampTokens(lastTurnUsage?.cacheRead) + clampTokens(lastTurnUsage?.cacheWrite);\n\tconst ttlSeconds = model === undefined ? undefined : resolvePromptCacheTtlSeconds(model, toProviderEnv(env));\n\tif (ttlSeconds === undefined && cachedTokens === 0) return undefined;\n\tconst estimatedSavedUsd =\n\t\tmodel !== undefined && cachedTokens > 0\n\t\t\t? (Math.max(0, model.cost.input - model.cost.cacheRead) * cachedTokens) / TOKENS_PER_PRICE_UNIT\n\t\t\t: undefined;\n\treturn {\n\t\tcachedTokens,\n\t\t...(ttlSeconds !== undefined ? { ttlSeconds } : {}),\n\t\t...(estimatedSavedUsd !== undefined ? { estimatedSavedUsd } : {}),\n\t};\n}\n\nexport function formatWarmTokenCount(tokens: number): string {\n\tif (tokens >= 1_000_000) return `${trimTrailingZero((tokens / 1_000_000).toFixed(1))}M`;\n\tif (tokens >= 1000) return `${trimTrailingZero((tokens / 1000).toFixed(1))}K`;\n\treturn String(Math.max(0, Math.trunc(tokens)));\n}\n\nexport function formatWakeDuration(ms: number): string {\n\tconst seconds = Math.round(ms / 1000);\n\tif (seconds < 60) return `${seconds}s`;\n\tconst minutes = Math.floor(seconds / 60);\n\tconst restSeconds = seconds % 60;\n\tif (minutes < 60) return restSeconds === 0 ? `${minutes}m` : `${minutes}m ${restSeconds}s`;\n\tconst hours = Math.floor(minutes / 60);\n\tconst restMinutes = minutes % 60;\n\treturn restMinutes === 0 ? `${hours}h` : `${hours}h ${restMinutes}m`;\n}\n\nexport function formatCacheTtl(seconds: number): string {\n\tif (seconds % 3600 === 0) return `${seconds / 3600}h`;\n\tif (seconds % 60 === 0) return `${seconds / 60}m`;\n\treturn `${seconds}s`;\n}\n\nexport function formatSavedUsd(value: number): string {\n\tif (value < 0.0005) return \"<$0.001\";\n\tif (value < 1) return `$${value.toFixed(3)}`;\n\treturn `$${value.toFixed(2)}`;\n}\n\nfunction trimTrailingZero(value: string): string {\n\treturn value.endsWith(\".0\") ? value.slice(0, -2) : value;\n}\n\nfunction clampTokens(value: number | undefined): number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0 ? Math.trunc(value) : 0;\n}\n\nfunction toProviderEnv(env: NodeJS.ProcessEnv): ProviderEnv {\n\tconst resolved: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(env)) {\n\t\tif (value !== undefined) resolved[key] = value;\n\t}\n\treturn resolved;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAiCrE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAsX5D"}
|
|
@@ -9,9 +9,10 @@ import { GoalDirectInputLifecycle } from "./direct-input-lifecycle.js";
|
|
|
9
9
|
import { GoalElapsedTicker } from "./elapsed-ticker.js";
|
|
10
10
|
import { formatGoalForTool, goalStatusLabel } from "./format.js";
|
|
11
11
|
import { isResumeOfStoppedGoal, queueGoalContinuation } from "./lifecycle-helpers.js";
|
|
12
|
-
import { MonitorAwareGoalContinuation } from "./monitor-continuation.js";
|
|
12
|
+
import { GOAL_CONTINUATION_SCHEDULED_EVENT, MonitorAwareGoalContinuation } from "./monitor-continuation.js";
|
|
13
13
|
import { migrateLegacyGoalFile } from "./persistence.js";
|
|
14
14
|
import { accountGoalUsage, readGoal, updateGoal } from "./store.js";
|
|
15
|
+
import { GOAL_STORE_CHANGED_EVENT, isGoalStoreChangedEvent } from "./store-changed-event.js";
|
|
15
16
|
import { goalStoreRef as buildGoalStoreRef } from "./store-ref.js";
|
|
16
17
|
import { didTerminalProviderErrorEndTurn } from "./terminal-provider-error.js";
|
|
17
18
|
import { staleGoalTodoReminder, todoResultAddsOpenTasks } from "./todo-gate.js";
|
|
@@ -29,6 +30,7 @@ export default function goalExtension(pi) {
|
|
|
29
30
|
let blockedThisTurnGoalId = null;
|
|
30
31
|
let completedThisTurnGoalId = null;
|
|
31
32
|
let continuationPending = false;
|
|
33
|
+
let activeContext;
|
|
32
34
|
const turnUsage = new TurnUsageTracker();
|
|
33
35
|
const goalWaitTicker = new GoalWaitTicker({
|
|
34
36
|
render: (renderCtx, status) => {
|
|
@@ -86,7 +88,33 @@ export default function goalExtension(pi) {
|
|
|
86
88
|
},
|
|
87
89
|
refreshGoalUi,
|
|
88
90
|
});
|
|
91
|
+
const unsubscribeGoalStoreChanged = pi.events?.on(GOAL_STORE_CHANGED_EVENT, async (data) => {
|
|
92
|
+
if (!isGoalStoreChangedEvent(data))
|
|
93
|
+
return;
|
|
94
|
+
const ctx = data.ctx ?? activeContext;
|
|
95
|
+
if (ctx === undefined ||
|
|
96
|
+
ctx.sessionManager.getSessionId() !== data.threadId ||
|
|
97
|
+
!ctx.isIdle() ||
|
|
98
|
+
ctx.hasPendingMessages()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const goal = await readGoal(goalStoreRef(ctx));
|
|
102
|
+
if (goal?.status !== "active")
|
|
103
|
+
return;
|
|
104
|
+
monitorContinuation.syncGoal(goal);
|
|
105
|
+
beginAgentGoalAccounting(goal);
|
|
106
|
+
refreshGoalUiBestEffort(ctx, goal);
|
|
107
|
+
pi.events?.emit(GOAL_CONTINUATION_SCHEDULED_EVENT, {
|
|
108
|
+
goalId: goal.id,
|
|
109
|
+
delayMs: 0,
|
|
110
|
+
activeMonitorCount: 0,
|
|
111
|
+
wakeSources: {},
|
|
112
|
+
reason: GOAL_STORE_CHANGED_EVENT,
|
|
113
|
+
});
|
|
114
|
+
await queueGoalContinuationForCurrentSession(pi, ctx, goal);
|
|
115
|
+
}) ?? (() => { });
|
|
89
116
|
pi.on("session_start", async (event, ctx) => {
|
|
117
|
+
activeContext = ctx;
|
|
90
118
|
monitorContinuation.start(ctx);
|
|
91
119
|
directInputLifecycle.reset();
|
|
92
120
|
const ref = goalStoreRef(ctx);
|
|
@@ -210,6 +238,8 @@ export default function goalExtension(pi) {
|
|
|
210
238
|
}
|
|
211
239
|
});
|
|
212
240
|
pi.on("session_shutdown", async (_event, ctx) => {
|
|
241
|
+
activeContext = undefined;
|
|
242
|
+
unsubscribeGoalStoreChanged();
|
|
213
243
|
if (agentGoalAccounting !== null) {
|
|
214
244
|
await accountCurrentAgentTurn(ctx, "active");
|
|
215
245
|
}
|