@cortexkit/opencode-magic-context 0.49.14 → 0.49.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/{context-cpxqpkzv.js → context-0m46day0.js} +106 -8
  2. package/dist/features/magic-context/dreamer/verify.d.ts +22 -3
  3. package/dist/features/magic-context/dreamer/verify.d.ts.map +1 -1
  4. package/dist/hooks/magic-context/compartment-runner-types.d.ts +2 -2
  5. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  6. package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
  7. package/dist/hooks/magic-context/historian-prompt.generated.d.ts +1 -1
  8. package/dist/hooks/magic-context/historian-prompt.generated.d.ts.map +1 -1
  9. package/dist/{index-kf4epshg.js → index-1vc7jrkg.js} +1 -1
  10. package/dist/{index-5591fg8y.js → index-42vcjcwe.js} +15 -6
  11. package/dist/{index-tyckte5c.js → index-mc1cqza6.js} +2 -2
  12. package/dist/{index-t4q9zbbf.js → index-snp5wbge.js} +94 -7
  13. package/dist/{index-w900fbhd.js → index-ts1hjk1h.js} +1 -1
  14. package/dist/index.js +8 -8
  15. package/dist/{recomp-orchestrator-xqb9gwgm.js → recomp-orchestrator-nwzcfhx4.js} +2 -2
  16. package/dist/{transform-postprocess-phase-k5t63qm5.js → transform-postprocess-phase-ne3z1zmt.js} +2 -2
  17. package/dist/v2/{context-k4jrq71s.js → context-4qczzck7.js} +115 -8
  18. package/dist/v2/hidden-completion.d.ts +20 -1
  19. package/dist/v2/hidden-completion.d.ts.map +1 -1
  20. package/dist/v2/hooks/context.d.ts.map +1 -1
  21. package/dist/v2/hooks/hidden-child.d.ts +19 -0
  22. package/dist/v2/hooks/hidden-child.d.ts.map +1 -1
  23. package/dist/v2/{recomp-orchestrator-1j1nqrrr.js → recomp-orchestrator-5zhxtwha.js} +1 -1
  24. package/dist/v2/{server-fnqxt9j6.js → server-dd0tz6cn.js} +94 -7
  25. package/dist/v2/server.js +2 -2
  26. package/dist/v2/store-reader.d.ts +27 -1
  27. package/dist/v2/store-reader.d.ts.map +1 -1
  28. package/dist/v2/{wrapup-orchestrator-hkv8apcc.js → wrapup-orchestrator-65pwye0d.js} +1 -1
  29. package/dist/{wrapup-orchestrator-kxqj4rwh.js → wrapup-orchestrator-28xzsj5q.js} +3 -3
  30. package/package.json +1 -1
@@ -3482,6 +3482,7 @@ Examples:
3482
3482
  - Every displayed raw message ordinal MUST appear in exactly one compartment. Gaps between compartments are invalid. When a displayed block is pure tool-only noise with no narrative text, do NOT skip it — extend the preceding compartment's \`end\` to absorb the range, or fold it into the current compartment if it's part of an ongoing work unit. Never create a dedicated compartment just to cover a tool-only run.
3483
3483
  - If a chunk is entirely tool-only with no narrative text (a long autonomous coding stretch), produce a single compartment whose narrative is derived from what the tools collectively accomplished.
3484
3484
  - If the chunk ends mid-topic, leave the unfinished portion out and report its first message index in \`<unprocessed_from>\`.
3485
+ - If every message in the chunk is covered by a compartment, nothing is unprocessed: set \`<unprocessed_from>\` to the chunk's last message index + 1. Never write \`0\` or the last covered index in that case.
3485
3486
 
3486
3487
  ---
3487
3488
 
@@ -5129,6 +5130,9 @@ class V2StoreReaderPool {
5129
5130
  capacity;
5130
5131
  connections = new Map;
5131
5132
  closed = false;
5133
+ closing = false;
5134
+ holds = 0;
5135
+ idleWaiters = new Set;
5132
5136
  constructor(capacity = 4) {
5133
5137
  this.capacity = capacity;
5134
5138
  if (!Number.isSafeInteger(capacity) || capacity < 1)
@@ -5173,13 +5177,63 @@ class V2StoreReaderPool {
5173
5177
  if (connection.leases === 0)
5174
5178
  closeConnection(connection);
5175
5179
  }
5180
+ hold() {
5181
+ if (this.closed || this.closing)
5182
+ throw new Error("Store reader pool is closed");
5183
+ this.holds++;
5184
+ let released = false;
5185
+ return () => {
5186
+ if (released)
5187
+ return;
5188
+ released = true;
5189
+ this.holds--;
5190
+ if (this.holds === 0 && this.closing)
5191
+ this.finishClose();
5192
+ };
5193
+ }
5194
+ isClosed() {
5195
+ return this.closed;
5196
+ }
5197
+ holdCount() {
5198
+ return this.holds;
5199
+ }
5176
5200
  close() {
5201
+ if (this.closed || this.closing)
5202
+ return;
5203
+ this.closing = true;
5204
+ if (this.holds === 0)
5205
+ this.finishClose();
5206
+ }
5207
+ async closeWhenIdle(timeoutMs) {
5208
+ this.close();
5209
+ if (this.closed)
5210
+ return true;
5211
+ let timer;
5212
+ let waiter;
5213
+ try {
5214
+ await new Promise((resolve) => {
5215
+ waiter = resolve;
5216
+ this.idleWaiters.add(resolve);
5217
+ timer = setTimeout(resolve, Math.max(0, timeoutMs));
5218
+ });
5219
+ } finally {
5220
+ if (timer)
5221
+ clearTimeout(timer);
5222
+ if (waiter)
5223
+ this.idleWaiters.delete(waiter);
5224
+ }
5225
+ return this.closed;
5226
+ }
5227
+ finishClose() {
5177
5228
  if (this.closed)
5178
5229
  return;
5179
5230
  this.closed = true;
5180
5231
  for (const connection of this.connections.values())
5181
5232
  this.retire(connection);
5182
5233
  this.connections.clear();
5234
+ for (const resolve of this.idleWaiters)
5235
+ resolve();
5236
+ this.idleWaiters.clear();
5183
5237
  }
5184
5238
  }
5185
5239
 
@@ -8966,6 +9020,28 @@ function hiddenToolLoop(identity) {
8966
9020
  function hiddenAgentAllowedTools(agent) {
8967
9021
  return agent !== undefined && Object.hasOwn(AGENT_TOOLS, agent) ? AGENT_TOOLS[agent] : undefined;
8968
9022
  }
9023
+ var HIDDEN_RUN_DISPOSED_REASON = "the Magic Context plugin instance that started this hidden run was disposed (OpenCode reloaded the plugin), so the run was cancelled; the work is retried on a later run";
9024
+ var DISPOSED_CHILDREN_KEY = Symbol.for("@cortexkit/magic-context/v2/disposed-hidden-children");
9025
+ var DISPOSED_CHILDREN_LIMIT = 512;
9026
+ function disposedChildren() {
9027
+ const store = globalThis;
9028
+ store[DISPOSED_CHILDREN_KEY] ??= new Set;
9029
+ return store[DISPOSED_CHILDREN_KEY];
9030
+ }
9031
+ function noteChildOfDisposedInstance(sessionID) {
9032
+ const children = disposedChildren();
9033
+ children.delete(sessionID);
9034
+ children.add(sessionID);
9035
+ while (children.size > DISPOSED_CHILDREN_LIMIT) {
9036
+ const oldest = children.values().next().value;
9037
+ if (oldest === undefined)
9038
+ break;
9039
+ children.delete(oldest);
9040
+ }
9041
+ }
9042
+ function isChildOfDisposedInstance(sessionID) {
9043
+ return disposedChildren().has(sessionID);
9044
+ }
8969
9045
  function hiddenChildPermissions(agent, providerID) {
8970
9046
  const tools = AGENT_TOOLS[agent] ?? [];
8971
9047
  const visible = tools.length === 0 && needsBlockedRead(agent, providerID) ? ["read"] : tools;
@@ -8997,6 +9073,8 @@ async function registerHiddenChildAgents(agent) {
8997
9073
  }
8998
9074
  function hiddenToolCallRefusal(call, hook) {
8999
9075
  const owned = hook.owns(call.sessionID);
9076
+ if (!owned && isChildOfDisposedInstance(call.sessionID))
9077
+ return `Magic Context hidden child ${call.sessionID} refused: ${HIDDEN_RUN_DISPOSED_REASON}; ${call.tool} refused`;
9000
9078
  const agent = owned ? hook.agentFor(call.sessionID) ?? call.agent : call.agent;
9001
9079
  const allowed = hiddenAgentAllowedTools(agent);
9002
9080
  if (allowed === undefined) {
@@ -9126,6 +9204,9 @@ class HiddenChildHook {
9126
9204
  }
9127
9205
  compactionSummary(sessionID, agent) {
9128
9206
  if (!this.owns(sessionID)) {
9207
+ if (isChildOfDisposedInstance(sessionID)) {
9208
+ this.refuse(`Refusing to compact a Magic Context hidden child of a disposed plugin instance: ${HIDDEN_RUN_DISPOSED_REASON}`, { sessionID, messages: [] }, undefined, undefined, "hidden_instance_disposed");
9209
+ }
9129
9210
  if (hiddenAgentAllowedTools(agent) !== undefined) {
9130
9211
  this.refuse("Refusing to compact a Magic Context hidden-agent session this instance did not register", { sessionID, messages: [] }, undefined);
9131
9212
  }
@@ -9140,7 +9221,7 @@ class HiddenChildHook {
9140
9221
  }
9141
9222
  return marker;
9142
9223
  }
9143
- refuse(reason, draft, raw, inFlight) {
9224
+ refuse(reason, draft, raw, inFlight, code = "hidden_prompt_unrecognized") {
9144
9225
  const registered = [...this.attempts.values()].filter((attempt) => attempt.childSessionId === draft.sessionID && attempt.marker).map((attempt) => {
9145
9226
  const marker = attempt.marker;
9146
9227
  return {
@@ -9161,7 +9242,7 @@ class HiddenChildHook {
9161
9242
  active: this.active.has(draft.sessionID),
9162
9243
  ...inFlight === undefined ? {} : { in_flight: inFlight }
9163
9244
  })}`);
9164
- const refusal = new HiddenCompletionRefusal("hidden_prompt_unrecognized", reason, true);
9245
+ const refusal = new HiddenCompletionRefusal(code, reason, true);
9165
9246
  for (const attempt of this.attempts.values()) {
9166
9247
  if (attempt.childSessionId === draft.sessionID)
9167
9248
  attempt.refusal = refusal;
@@ -9176,6 +9257,9 @@ class HiddenChildHook {
9176
9257
  }
9177
9258
  apply(draft) {
9178
9259
  if (!this.owns(draft.sessionID)) {
9260
+ if (isChildOfDisposedInstance(draft.sessionID)) {
9261
+ this.refuse(`Refusing a turn of a Magic Context hidden child of a disposed plugin instance: ${HIDDEN_RUN_DISPOSED_REASON}`, draft, newestUserText(draft), undefined, "hidden_instance_disposed");
9262
+ }
9179
9263
  if (hiddenAgentAllowedTools(draft.agent) !== undefined) {
9180
9264
  this.refuse("Refusing a Magic Context hidden-agent turn this instance did not register", draft, newestUserText(draft));
9181
9265
  }
@@ -10701,16 +10785,19 @@ function validateParsedCompartments(compartments, chunkStart, chunkEnd, unproces
10701
10785
  expectedStart = compartment.endMessage + 1;
10702
10786
  }
10703
10787
  if (unprocessedFrom !== null) {
10788
+ if (expectedStart <= chunkEnd) {
10789
+ if (unprocessedFrom !== expectedStart) {
10790
+ return `<unprocessed_from> ${unprocessedFrom} does not match next uncovered message ${expectedStart}`;
10791
+ }
10792
+ return null;
10793
+ }
10704
10794
  if (unprocessedFrom === chunkEnd + 1) {
10705
10795
  return null;
10706
10796
  }
10707
10797
  if (unprocessedFrom < chunkStart || unprocessedFrom > chunkEnd) {
10708
10798
  return `<unprocessed_from> ${unprocessedFrom} is outside chunk ${chunkStart}-${chunkEnd}`;
10709
10799
  }
10710
- if (unprocessedFrom !== expectedStart) {
10711
- return `<unprocessed_from> ${unprocessedFrom} does not match next uncovered message ${expectedStart}`;
10712
- }
10713
- return null;
10800
+ return `<unprocessed_from> ${unprocessedFrom} does not match completed chunk boundary ${chunkEnd + 1}`;
10714
10801
  }
10715
10802
  if (expectedStart <= chunkEnd) {
10716
10803
  return `output left uncovered messages ${expectedStart}-${chunkEnd} without <unprocessed_from>`;
@@ -21842,4 +21929,4 @@ async function executeContextRecomp(deps, options = {}) {
21842
21929
  return (await executeContextRecompWithResult(deps, options)).message;
21843
21930
  }
21844
21931
 
21845
- export { denyTaskRoutingToCallerAgents, buildHiddenAgentRegistrations, buildZenReadAgentRegistrations, buildHiddenAgentConfig, getMagicContextBuiltinCommands, formatConfigParseStatusLine, claimConfigParseFailuresOnce, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, loadPluginConfigDetailed, historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, createDreamerOutputCapSampler, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, gaDatabasePath, RAW_MESSAGE_TYPES, V2StoreReaderPool, V2StoreReader, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, markSessionCleanupPending, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, clearSession, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, isHeldHeadForRequest, deferDeliveredSystemRefresh, retirePendingSystemPromptDelivery, lkgProviderInputTotal, beginV2LkgRequest, claimLkgRequestIdentity, currentLkgRequestIdentity, noteCapturedLkgRequest, noteLkgProviderResponse, measuredLkgPrefix, clearLkgMeasuredRequest, saveLkgSlotToDb, clearPersistedLkgSlotStrict, loadPersistedLkgSlot, drainStaleLkgSlots, createDbLkgPersistence, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, registerLkgPersistence, beginLkgPass, visitMessageContentFields, contentSnapshotValue, messageContentFields, signatureForFields, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, forgetInMemorySlot, dropSlot, noteEntry, getLkgSlotHeapStats, TOOL_SWEEP_SCOPED_MARKER, useScopedToolSweep, createPreAdoptionToolSweepResolver, copySessionStateForClone, queueMemoryMutation, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, createChildSessionWithFence, HiddenCompletionRefusal, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, HIDDEN_HISTORIAN_AGENT, HIDDEN_DREAMER_AGENT, HIDDEN_CURATE_AGENT, hiddenAgentFor, hiddenToolLoop, hiddenChildPermissions, registerHiddenChildAgents, hiddenToolCallRefusal, HiddenAgentStepLimit, HiddenChildHook, extractLatestAssistantText, hasLengthCappedOutput, parseProviderModel, modelBodyField, toModelEntry, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, failedInvocationStatus, sumTokensFromChildMessages, recordChildInvocation, recordPromptSessionError, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, setKeepSubagents, teardownChildSession, getCompartmentEvents, runTokenLog, formatRunTokenLog, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, extractM0Block, formatDate, TEMPORAL_MARKER_REPLAY_PATTERN, collectTemporalCandidates, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, selectHiddenMessagesAtCompactionSeam, prepareCompartmentInjection, renderCompartmentInjection, MaterializeContentionError, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, materializeM0, hydrateCachedM0Mural, resetPrefixTrimFallbackState, findHostCompactionWindow, capturePrefixTrimSourceOrder, prepareCachedM0M1Replay, hasCompleteCachedM0M1, injectM0M1, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, readCoordinateGeneration, readCoordinateRebaseNotice, formatCoordinateRebaseNotice, rebaseSessionCoordinatesAsync, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, snapRangeToCompartments, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, executeContextRecomp };
21932
+ export { denyTaskRoutingToCallerAgents, buildHiddenAgentRegistrations, buildZenReadAgentRegistrations, buildHiddenAgentConfig, getMagicContextBuiltinCommands, formatConfigParseStatusLine, claimConfigParseFailuresOnce, cortexKitUserConfigBasePath, cortexKitProjectConfigBasePath, resolveLegacyConfigSources, migrateMagicContextConfigLocations, getProtectedTokensTierOverrides, loadPluginConfigDetailed, historianRunConfig, dreamerRunConfig, pluginConfigReader, currentPluginConfigReader, withLiveDreamerOutputCap, createDreamerOutputCapSampler, COMPARTMENT_AGENT_SYSTEM_PROMPT, HISTORIAN_EDITOR_SYSTEM_PROMPT, COMPARTMENT_STRUCTURAL_SYSTEM_PROMPT, clampProducerAtomChars, producerInputTokenLimit, historianProducerReserve, producerPromptFailureReason, DREAMER_AGENT, DREAMER_RETROSPECTIVE_AGENT, DREAMER_PRIMER_INVESTIGATOR_AGENT, DREAMER_MEMORY_MAPPER_AGENT, DREAMER_CLASSIFIER_AGENT, DREAMER_DOCS_AGENT, DREAMER_REVIEWER_AGENT, COMPARTMENT_LEASE_RENEWAL_MS, acquireCompartmentLease, renewCompartmentLease, releaseCompartmentLeaseBestEffort, isCompartmentLeaseHeld, queueM0Mutation, getMaxM0MutationId, getCompartments, getLastCompartmentEndMessage, getLastCompartmentEndMessageId, getUncoveredCompartmentEndsThrough, providerResponseFailed, isSuccessfulProviderCompletion, rememberUnpublishedAutoSearchNoHint, getUnpublishedAutoSearchNoHint, forgetUnpublishedAutoSearchNoHint, registerAutoSearchWork, cancelAutoSearchWork, gaDatabasePath, RAW_MESSAGE_TYPES, V2StoreReaderPool, V2StoreReader, getOrCreateSessionMeta, updateSessionMeta, advanceToolReclaimWatermark, markSessionCleanupPending, retryPendingSessionCleanups, retryPendingRustSessionCleanupsForProject, clearSession, requestPendingMaterialization, pendingMaterializationOrigin, hasPendingMaterializationOrigin, clearPendingMaterialization, recordSystemPromptForRequest, recordHeldHeadForRequest, bindSystemPromptResponse, isHeldHeadForRequest, deferDeliveredSystemRefresh, retirePendingSystemPromptDelivery, lkgProviderInputTotal, beginV2LkgRequest, claimLkgRequestIdentity, currentLkgRequestIdentity, noteCapturedLkgRequest, noteLkgProviderResponse, measuredLkgPrefix, clearLkgMeasuredRequest, saveLkgSlotToDb, clearPersistedLkgSlotStrict, loadPersistedLkgSlot, drainStaleLkgSlots, createDbLkgPersistence, resolveLkgModelKeys, createLkgEntryProjector, captureLkgSlot, validateAnthropicReasoningRuns, validateLkgSeam, replayLkg, coldStartRawServedIndex, coldStartUncapturedReplay, noteUncertifiedNormalLkg, hasProcessLocalLkgProof, lkgDirtyRevision, rememberLkgDirtyRevision, noteLkgRecoveryPrefix, readLkgRecoveryPrefix, noteLkgHealthyPrefix, lkgRecoveryReplayUnproven, lkgRecoveryEntryUnproven, registerLkgPersistence, beginLkgPass, visitMessageContentFields, contentSnapshotValue, messageContentFields, signatureForFields, exactReusablePrefix, incrementalLkgContentDigests, lkgSlotRejection, captureSlot, getInMemorySlot, getSlot, forgetInMemorySlot, dropSlot, noteEntry, getLkgSlotHeapStats, TOOL_SWEEP_SCOPED_MARKER, useScopedToolSweep, createPreAdoptionToolSweepResolver, copySessionStateForClone, queueMemoryMutation, getMaxMemoryMutationIdForProjects, GLOBAL_USER_PROFILE_PROJECT_PATH, getProjectState, bumpProjectUserProfileVersion, saveSourceContent, replaceSourceContent, getSourceContents, createChildSessionWithFence, HiddenCompletionRefusal, DreamerProviderOutputFailureError, withDreamerModelCooldown, providerOutputFailureFromInvalidManifest, HIDDEN_HISTORIAN_AGENT, HIDDEN_DREAMER_AGENT, HIDDEN_CURATE_AGENT, hiddenAgentFor, hiddenToolLoop, HIDDEN_RUN_DISPOSED_REASON, noteChildOfDisposedInstance, hiddenChildPermissions, registerHiddenChildAgents, hiddenToolCallRefusal, HiddenAgentStepLimit, HiddenChildHook, extractLatestAssistantText, hasLengthCappedOutput, parseProviderModel, modelBodyField, toModelEntry, isPromptTimeoutError, getPromptFailureDetail, raceWithSignal, promptSyncWithValidatedOutputRetry, normalizeSDKResponse, failedInvocationStatus, sumTokensFromChildMessages, recordChildInvocation, recordPromptSessionError, createPromptAsyncTransport, CTX_NOTE_LIGHT_DESCRIPTION, ACTIVE_TOOL_IDS, systemPromptFingerprint, createPromptSurfaceRuntime, createPromptSurfaceGuidanceEpochCache, setKeepSubagents, teardownChildSession, getCompartmentEvents, runTokenLog, formatRunTokenLog, buildMagicContextSection, getMuralIdentity, getMural, modelKeyAcceptsImages, resolveMuralWire, USER_MEMORY_CANDIDATE_TTL_MS, insertUserMemoryCandidates, getUserMemoryCandidates, deleteUserMemoryCandidates, pruneExpiredUserMemoryCandidates, insertUserMemory, getActiveUserMemories, updateUserMemoryContent, dismissUserMemory, getOpenCodeDbPath, compareOpenCodeMessagesByCanonicalOrder, prepareCompactionMarkerCandidates, removeMcOwnedCompactionMarkers, MARKER_SUMMARY_TEXT, markerUpdateDefinitelyDidNotCut, applyDeferredCompactionMarker, removeCompactionMarkerForSession, checkCompactionMarkerConsistency, extractM0Block, formatDate, TEMPORAL_MARKER_REPLAY_PATTERN, collectTemporalCandidates, injectTemporalMarkers, clearInjectionCache, getVisibleMemoryIds, selectHiddenMessagesAtCompactionSeam, prepareCompartmentInjection, renderCompartmentInjection, MaterializeContentionError, mustMaterialize, trimMemoriesToBudgetV2, renderMemoryBlockV2, materializeM0, hydrateCachedM0Mural, resetPrefixTrimFallbackState, findHostCompactionWindow, capturePrefixTrimSourceOrder, prepareCachedM0M1Replay, hasCompleteCachedM0M1, injectM0M1, resolveHiddenCompletionExecutor, createV1HiddenCompletionExecutor, readCoordinateGeneration, readCoordinateRebaseNotice, formatCoordinateRebaseNotice, rebaseSessionCoordinatesAsync, EMPTY_READ_REPLY, noteTouchedAt, renderGlance, renderNotesById, formatWriteReply, observeNoteNudgeServe, onNoteTrigger, peekNoteNudgeText, markNoteNudgeDelivered, clearNoteNudgeTriggerAndCooldown, resetNoteNudgeCooldownOnly, clearNoteNudgeTriggerOnly, describeBoundaryDiagnostics, RECOVERY_NO_HEAD_LIMIT, deriveProtectedTailTokenTarget, selectPerRunCap, resolveOpenCodeProtectedTailBoundary, resolveWrapupProtectedTailBoundary, getRawHistoryEligibility, hasRunnableCompartmentWindow, recordHighPressureNoEligibleHead, noteTransformPassForExactOrdinalReads, runCompartmentAgent, snapRangeToCompartments, getActiveCompartmentRun, markActiveCompartmentRunPublished, registerActiveCompartmentRun, startCompartmentAgent, executeContextRecomp };
@@ -228,7 +228,7 @@ import {
228
228
  peekNoteNudgeText,
229
229
  markNoteNudgeDelivered,
230
230
  getActiveCompartmentRun
231
- } from "./index-t4q9zbbf.js";
231
+ } from "./index-snp5wbge.js";
232
232
  import {
233
233
  runSessionWarmupWorker
234
234
  } from "./index-mmfa86mt.js";
package/dist/index.js CHANGED
@@ -97,7 +97,7 @@ import {
97
97
  checkCompactionMarkerConsistency,
98
98
  clearInjectionCache,
99
99
  clearNoteNudgeTriggerOnly
100
- } from "./index-t4q9zbbf.js";
100
+ } from "./index-snp5wbge.js";
101
101
  import"./index-sd3egckz.js";
102
102
  import {
103
103
  hasTrustedAbsoluteWall,
@@ -185,7 +185,7 @@ import {
185
185
  parameterDescriptionsFor,
186
186
  MagicContextRpcServer,
187
187
  applyHiddenSubagentTemperature
188
- } from "./index-5591fg8y.js";
188
+ } from "./index-42vcjcwe.js";
189
189
  import {
190
190
  resolveOpenCodeDbPath,
191
191
  openCodeDbPathExists,
@@ -308,10 +308,10 @@ import {
308
308
  setCtxReduceRegisteredGlobally,
309
309
  clearToolPermissionDenied,
310
310
  resetDegradedCacheCount2
311
- } from "./index-w900fbhd.js";
311
+ } from "./index-ts1hjk1h.js";
312
312
  import {
313
313
  runManagedRecomp2
314
- } from "./index-kf4epshg.js";
314
+ } from "./index-1vc7jrkg.js";
315
315
  import {
316
316
  isValidSemver,
317
317
  compareSemverCore
@@ -319,7 +319,7 @@ import {
319
319
  import"./index-fmsr7v69.js";
320
320
  import {
321
321
  runManagedWrapup2
322
- } from "./index-tyckte5c.js";
322
+ } from "./index-mc1cqza6.js";
323
323
  import {
324
324
  isDreamerRunnable,
325
325
  isSmartNoteSurfaceAvailable,
@@ -8187,7 +8187,7 @@ var require_src2 = __commonJS(function(exports, module) {
8187
8187
  // package.json
8188
8188
  var package_default = {
8189
8189
  name: "@cortexkit/opencode-magic-context",
8190
- version: "0.49.14",
8190
+ version: "0.49.15",
8191
8191
  type: "module",
8192
8192
  description: "OpenCode plugin for Magic Context — cross-session memory and context management",
8193
8193
  main: "dist/index.js",
@@ -12033,7 +12033,7 @@ async function setup(context) {
12033
12033
  if (claimStorageBackupWarningCheck() && isMagicContextStorageOutsideEngram(storageDir)) {
12034
12034
  log2(`[magic-context] Magic Context storage is at ${storageDir}, outside the folder Engram backs up (~/.local/share/cortexkit/magic-context). It is not included in CortexKit backups.`);
12035
12035
  }
12036
- const { registerContext } = await import("./context-cpxqpkzv.js");
12036
+ const { registerContext } = await import("./context-0m46day0.js");
12037
12037
  setHarness2("opencode2");
12038
12038
  bindStaleBuildNotice({}, import.meta.url, "opencode2");
12039
12039
  const duties = await registerContext(context);
@@ -12510,7 +12510,7 @@ var server = async (ctx) => {
12510
12510
  rustReplayParticipant: () => magicContextRuntime.magicContext?.getRustReplayParticipant?.() ?? null,
12511
12511
  onStorageBusyRefusal: async (sessionId, message) => {
12512
12512
  const { sendStatusNotification } = await importPluginModule(() => import("./send-session-notification-24r4esbh.js"));
12513
- const { abortSessionFailClosed } = await importPluginModule(() => import("./transform-postprocess-phase-k5t63qm5.js"));
12513
+ const { abortSessionFailClosed } = await importPluginModule(() => import("./transform-postprocess-phase-ne3z1zmt.js"));
12514
12514
  await sendStatusNotification(ctx.client, sessionId, message, {
12515
12515
  toastDurationMs: 15000
12516
12516
  });
@@ -7,8 +7,8 @@ import {
7
7
  setRecompTerminal2,
8
8
  buildRecompDeps2,
9
9
  runManagedRecomp2
10
- } from "./index-kf4epshg.js";
11
- import"./index-t4q9zbbf.js";
10
+ } from "./index-1vc7jrkg.js";
11
+ import"./index-snp5wbge.js";
12
12
  import"./index-f71thw8j.js";
13
13
  import"./index-bxdg2nbt.js";
14
14
  import"./index-thvnpfsv.js";
@@ -18,8 +18,8 @@ import {
18
18
  finalizeMessageRepresentation2,
19
19
  runPostTransformPhase2,
20
20
  checkM0MutationDriftAndSignal2
21
- } from "./index-w900fbhd.js";
22
- import"./index-t4q9zbbf.js";
21
+ } from "./index-ts1hjk1h.js";
22
+ import"./index-snp5wbge.js";
23
23
  import"./index-f71thw8j.js";
24
24
  import"./index-bxdg2nbt.js";
25
25
  import"./index-thvnpfsv.js";
@@ -195,6 +195,8 @@ import {
195
195
  HIDDEN_CURATE_AGENT,
196
196
  hiddenAgentFor,
197
197
  hiddenToolLoop,
198
+ HIDDEN_RUN_DISPOSED_REASON,
199
+ noteChildOfDisposedInstance,
198
200
  hiddenChildPermissions,
199
201
  registerHiddenChildAgents,
200
202
  hiddenToolCallRefusal,
@@ -281,7 +283,7 @@ import {
281
283
  startCompartmentAgent,
282
284
  setRecompStarting2,
283
285
  setRecompTerminal2
284
- } from "./server-fnqxt9j6.js";
286
+ } from "./server-dd0tz6cn.js";
285
287
  import {
286
288
  resolveHistorianModel2
287
289
  } from "./server-8cd2j99z.js";
@@ -22724,7 +22726,7 @@ function registerRpcHandlers(rpcServer, args) {
22724
22726
  const db = readDatabase();
22725
22727
  if (!db)
22726
22728
  return { ok: false, error: "db unavailable" };
22727
- const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-1j1nqrrr.js"));
22729
+ const { runManagedRecomp } = await importPluginModule(() => import("./recomp-orchestrator-5zhxtwha.js"));
22728
22730
  const { sendIgnoredMessage } = await importPluginModule(() => import("./send-session-notification-8ghn9tnv.js"));
22729
22731
  log2(`[rpc] recomp requested for session ${sessionId}`);
22730
22732
  if (!args.client && !args.hiddenCompletionExecutor) {
@@ -22809,7 +22811,7 @@ function registerRpcHandlers(rpcServer, args) {
22809
22811
  const db = readDatabase();
22810
22812
  if (!db)
22811
22813
  return { ok: false, error: "db unavailable" };
22812
- const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-hkv8apcc.js"));
22814
+ const { runManagedWrapup } = await importPluginModule(() => import("./wrapup-orchestrator-65pwye0d.js"));
22813
22815
  const model = liveSessionState.liveModelBySession.get(sessionId);
22814
22816
  const contextLimit = model ? resolveContextLimit(model.providerID, model.modelID, { db, sessionID: sessionId }) : 128000;
22815
22817
  const ctx = {
@@ -25613,6 +25615,25 @@ function subagentTemperature(model, metadata, temperature, log) {
25613
25615
  }
25614
25616
 
25615
25617
  // src/v2/hidden-completion.ts
25618
+ var DEFAULT_DISPOSE_DRAIN_MS = 2000;
25619
+ async function settleWithin(work, ms) {
25620
+ let timer;
25621
+ try {
25622
+ await Promise.race([
25623
+ work.then(() => {
25624
+ return;
25625
+ }, () => {
25626
+ return;
25627
+ }),
25628
+ new Promise((resolve) => {
25629
+ timer = setTimeout(resolve, Math.max(0, ms));
25630
+ })
25631
+ ]);
25632
+ } finally {
25633
+ if (timer)
25634
+ clearTimeout(timer);
25635
+ }
25636
+ }
25616
25637
  var POLL_INTERVAL_MS = 200;
25617
25638
  function modelKey(model) {
25618
25639
  return `${model.providerID}/${model.modelID}`;
@@ -25776,6 +25797,9 @@ function isProviderFailure(error) {
25776
25797
  }
25777
25798
  async function awaitAssistantRow(openReader, readSessionError, localFailure, childID, afterSeq, deadline, signal) {
25778
25799
  for (;; ) {
25800
+ const refusedBefore = localFailure();
25801
+ if (refusedBefore)
25802
+ throw refusedBefore;
25779
25803
  const { assistant, idle } = withReader(openReader, (reader) => ({
25780
25804
  assistant: reader.latestAssistant(childID),
25781
25805
  idle: reader.latestIdle(childID)
@@ -25851,6 +25875,9 @@ async function createV2HiddenCompletionExecutor(host, options) {
25851
25875
  const generation = options.generation ?? "opencode2";
25852
25876
  const roleTails = new Map;
25853
25877
  const note = options.log ?? log2;
25878
+ let disposed;
25879
+ const openRuns = new Set;
25880
+ const inFlight = new Set;
25854
25881
  const removeSession = host.removeSession;
25855
25882
  if (!removeSession)
25856
25883
  throw new Error("Magic Context requires OpenCode 2.0.22 session.remove");
@@ -25945,10 +25972,17 @@ async function createV2HiddenCompletionExecutor(host, options) {
25945
25972
  return {
25946
25973
  capabilities: V2_HIDDEN_EXECUTOR_CAPABILITIES,
25947
25974
  async open(identity) {
25975
+ if (disposed)
25976
+ throw disposed;
25948
25977
  const role = roleFor(identity);
25949
- const releaseRole = await acquireRole(role);
25978
+ const releaseStore = options.holdStore?.() ?? (() => {});
25979
+ let releaseRole;
25950
25980
  let openedChild;
25981
+ let opened;
25951
25982
  try {
25983
+ releaseRole = await acquireRole(role);
25984
+ if (disposed)
25985
+ throw disposed;
25952
25986
  await options.ensureAgent?.();
25953
25987
  const head = await resolveHead(identity);
25954
25988
  const active = await lifecycle.open(identity, role, head);
@@ -25961,17 +25995,25 @@ async function createV2HiddenCompletionExecutor(host, options) {
25961
25995
  role,
25962
25996
  child: active,
25963
25997
  releaseRole,
25998
+ releaseStore,
25964
25999
  failed: false,
25965
26000
  unsettledFailure: false,
25966
26001
  retired: false
25967
26002
  };
25968
26003
  runs.set(handle, run);
26004
+ opened = run;
26005
+ openRuns.add(run);
26006
+ if (disposed)
26007
+ noteChildOfDisposedInstance(active.id);
25969
26008
  await switchChildModel(run, head);
25970
26009
  return handle;
25971
26010
  } catch (error) {
25972
26011
  if (openedChild)
25973
26012
  lifecycle.retire(openedChild, "hidden-run-open-failed");
25974
- releaseRole();
26013
+ if (opened)
26014
+ openRuns.delete(opened);
26015
+ releaseRole?.();
26016
+ releaseStore();
25975
26017
  throw error;
25976
26018
  }
25977
26019
  },
@@ -25979,6 +26021,15 @@ async function createV2HiddenCompletionExecutor(host, options) {
25979
26021
  const run = runs.get(handle);
25980
26022
  if (!run)
25981
26023
  throw new Error("Unknown hidden completion run");
26024
+ const refuseDisposed = () => {
26025
+ if (!disposed)
26026
+ return;
26027
+ run.failed = true;
26028
+ run.unsettledFailure = true;
26029
+ retire(run, "plugin-instance-disposed");
26030
+ throw disposed;
26031
+ };
26032
+ refuseDisposed();
25982
26033
  if (request.signal?.aborted) {
25983
26034
  await interruptAndRetire(run, "aborted-before-prompt");
25984
26035
  throw new Error("Hidden completion prompt aborted");
@@ -26016,6 +26067,7 @@ async function createV2HiddenCompletionExecutor(host, options) {
26016
26067
  handle.childSessionId = run.child.id;
26017
26068
  }
26018
26069
  await switchChildModel(run, requested);
26070
+ refuseDisposed();
26019
26071
  const baseline = withReader(options.openReader, (reader) => reader.latestSequence(run.child.id));
26020
26072
  const marker = `mc:hidden:${crypto.randomUUID()}:${crypto.randomUUID()}`;
26021
26073
  run.completion = undefined;
@@ -26083,6 +26135,28 @@ async function createV2HiddenCompletionExecutor(host, options) {
26083
26135
  interruptAndRetire(run, "prompt-timeout").finally(() => abortReject(new Error("Hidden completion prompt timed out")));
26084
26136
  }, Math.max(0, deadline - Date.now()));
26085
26137
  request.signal?.addEventListener("abort", onAbort, { once: true });
26138
+ let settle;
26139
+ const entry = {
26140
+ cancel: async (refusal) => {
26141
+ attempt.refusal ??= refusal;
26142
+ noteChildOfDisposedInstance(run.child.id);
26143
+ try {
26144
+ await interruptAndRetire(run, "plugin-instance-disposed");
26145
+ } catch (error) {
26146
+ note(`[magic-context] hidden child ${run.child.id} could not be interrupted on dispose: ${errorText(error)}`);
26147
+ } finally {
26148
+ abortReject(refusal);
26149
+ }
26150
+ },
26151
+ reject: (refusal) => {
26152
+ attempt.refusal ??= refusal;
26153
+ abortReject(refusal);
26154
+ },
26155
+ settled: new Promise((resolve) => {
26156
+ settle = resolve;
26157
+ })
26158
+ };
26159
+ inFlight.add(entry);
26086
26160
  try {
26087
26161
  await Promise.race([
26088
26162
  host.prompt({ sessionID: run.child.id, text: marker }),
@@ -26162,6 +26236,8 @@ async function createV2HiddenCompletionExecutor(host, options) {
26162
26236
  clearInterval(budgetPoll);
26163
26237
  request.signal?.removeEventListener("abort", onAbort);
26164
26238
  options.hook.releaseAttempt(marker);
26239
+ inFlight.delete(entry);
26240
+ settle();
26165
26241
  }
26166
26242
  },
26167
26243
  async collect(handle) {
@@ -26185,9 +26261,27 @@ async function createV2HiddenCompletionExecutor(host, options) {
26185
26261
  }
26186
26262
  } finally {
26187
26263
  runs.delete(handle);
26264
+ openRuns.delete(run);
26188
26265
  run.releaseRole();
26266
+ run.releaseStore();
26189
26267
  }
26190
26268
  await lifecycle.finish(run.child, run.retired);
26269
+ },
26270
+ async dispose() {
26271
+ disposed ??= new HiddenCompletionRefusal("hidden_instance_disposed", HIDDEN_RUN_DISPOSED_REASON, true);
26272
+ const refusal = disposed;
26273
+ for (const run of openRuns)
26274
+ noteChildOfDisposedInstance(run.child.id);
26275
+ const entries = [...inFlight];
26276
+ if (entries.length === 0)
26277
+ return;
26278
+ note(`[magic-context] plugin instance disposed with ${entries.length} hidden run(s) in flight; cancelling them`);
26279
+ const bound = options.disposeDrainMs ?? DEFAULT_DISPOSE_DRAIN_MS;
26280
+ const deadline = Date.now() + bound;
26281
+ await settleWithin(Promise.allSettled(entries.map((entry) => entry.cancel(refusal))), bound);
26282
+ for (const entry of entries)
26283
+ entry.reject(refusal);
26284
+ await settleWithin(Promise.allSettled(entries.map((entry) => entry.settled)), deadline - Date.now());
26191
26285
  }
26192
26286
  };
26193
26287
  }
@@ -32510,6 +32604,7 @@ var VERIFY_BATCH_SIZE = 5;
32510
32604
  var VERIFY_TOKENS_PER_MEMORY = 1e5;
32511
32605
  var VERIFY_RUN_TOKEN_BUDGET = 2500000;
32512
32606
  var VERIFY_RUN_SLICE_MS = 240000;
32607
+ var VERIFY_IN_FLIGHT_GRACE_MS = 120000;
32513
32608
  function verifyBatchTokenBudget(size, configured) {
32514
32609
  return Math.min(configured ?? Number.MAX_SAFE_INTEGER, size * VERIFY_TOKENS_PER_MEMORY);
32515
32610
  }
@@ -32596,7 +32691,15 @@ async function runVerifyWithCooldown(args) {
32596
32691
  const runTokenBudget = Math.min(args.tokenBudget ?? VERIFY_RUN_TOKEN_BUDGET, VERIFY_RUN_TOKEN_BUDGET);
32597
32692
  try {
32598
32693
  for (let i = 0;i < batches.length; i += 1) {
32599
- const remainingMs = Math.max(0, Math.min(args.deadline, sliceDeadline) - Date.now());
32694
+ const now = Date.now();
32695
+ const startCutoff = Math.min(args.deadline, sliceDeadline);
32696
+ const hardStop = Math.min(args.deadline, sliceDeadline + VERIFY_IN_FLIGHT_GRACE_MS);
32697
+ const remainingMs = Math.max(0, hardStop - now);
32698
+ if (now >= startCutoff) {
32699
+ result.stopReason = "deadline";
32700
+ log2(`[dreamer] ${args.forceBroad ? "verify-broad" : "verify"}: stopping before batch ${i + 1}/${batches.length} — the run deadline passed ${now - startCutoff}ms ago`);
32701
+ break;
32702
+ }
32600
32703
  if (remainingMs < VERIFY_BATCH_FLOOR_MS) {
32601
32704
  result.stopReason = "deadline";
32602
32705
  log2(`[dreamer] ${args.forceBroad ? "verify-broad" : "verify"}: stopping before batch ${i + 1}/${batches.length} — remaining budget ${remainingMs}ms is below the ${VERIFY_BATCH_FLOOR_MS}ms batch floor`);
@@ -51096,6 +51199,7 @@ function persistV2UsageReading(args) {
51096
51199
  class V2LkgAdmissionReplay extends Error {
51097
51200
  }
51098
51201
  var HIDDEN_SESSION_ERROR_GRACE_MS = 50;
51202
+ var STORE_POOL_DISPOSE_WAIT_MS = 1000;
51099
51203
  function isBlockingV2TransformError(error) {
51100
51204
  return error instanceof EmergencyFailClosedError || error instanceof UnresolvedHistoryBoundaryError || error instanceof UnmanagedOverWindowError || error instanceof DegradedPassRefusalError || isFailClosedBlockingError(error);
51101
51205
  }
@@ -51443,7 +51547,8 @@ async function registerContext(context) {
51443
51547
  ensureAgent: () => hiddenAgentsReady ??= context.agent.reload(),
51444
51548
  modelCatalog: () => Promise.resolve(context.model.list()),
51445
51549
  historianTemperature: () => config.historian?.temperature,
51446
- openReader: openStoreReader
51550
+ openReader: openStoreReader,
51551
+ holdStore: () => readerPool.hold()
51447
51552
  });
51448
51553
  };
51449
51554
  const dreamerAtBoot = config.dreamer;
@@ -52474,6 +52579,7 @@ ${baseline}
52474
52579
  }, 0));
52475
52580
  return {
52476
52581
  async dispose() {
52582
+ await hiddenCompletionExecutor?.dispose();
52477
52583
  rpcStopped = true;
52478
52584
  rpcServer.stop();
52479
52585
  transform?.disposeRust();
@@ -52487,7 +52593,8 @@ ${baseline}
52487
52593
  release();
52488
52594
  rawProviders.clear();
52489
52595
  restoredRows.clear();
52490
- readerPool.close();
52596
+ if (!await readerPool.closeWhenIdle(STORE_POOL_DISPOSE_WAIT_MS))
52597
+ log2(`[magic-context] v2 store reader pool still held by ${readerPool.holdCount()} hidden run(s) at dispose; it closes when they finish`);
52491
52598
  clearSyntheticCandidates(context);
52492
52599
  }
52493
52600
  };
@@ -31,6 +31,25 @@ export interface V2HiddenCompletionOptions {
31
31
  * receive it.
32
32
  */
33
33
  historianTemperature?: () => number | undefined;
34
+ /**
35
+ * Keep the store reader pool open for one hidden run; returns its release. The run
36
+ * reads the store from its first attempt until it is closed, so a pool closed in the
37
+ * meantime must wait for it rather than refuse its next read.
38
+ */
39
+ holdStore?: () => () => void;
40
+ /** Maximum time `dispose` waits for cancelled runs to settle. */
41
+ disposeDrainMs?: number;
42
+ }
43
+ /** The OpenCode 2 executor, plus the cancellation its plugin instance runs on dispose. */
44
+ export interface V2HiddenCompletionExecutor extends HiddenCompletionExecutor {
45
+ /**
46
+ * Cancel every hidden run in flight and refuse new ones, with
47
+ * `HIDDEN_RUN_DISPOSED_REASON`. Each in-flight child is interrupted at the host, so
48
+ * the host stops stepping it before this instance's hooks are removed and the
49
+ * instance that replaces it never receives its turns. Waits at most
50
+ * `disposeDrainMs` for the cancelled attempts to settle.
51
+ */
52
+ dispose(): Promise<void>;
34
53
  }
35
54
  /**
36
55
  * Rebuild the child's assistant text and tool calls in the host message shape the dreamer validators read
@@ -60,5 +79,5 @@ export declare const V2_HIDDEN_EXECUTOR_CAPABILITIES: HiddenCompletionExecutor["
60
79
  * first successful open later reaches them without a restart.
61
80
  */
62
81
  export declare function createLateHiddenExecutor(current: () => HiddenCompletionExecutor | undefined): HiddenCompletionExecutor;
63
- export declare function createV2HiddenCompletionExecutor(host: HiddenChildHost, options: V2HiddenCompletionOptions): Promise<HiddenCompletionExecutor>;
82
+ export declare function createV2HiddenCompletionExecutor(host: HiddenChildHost, options: V2HiddenCompletionOptions): Promise<V2HiddenCompletionExecutor>;
64
83
  //# sourceMappingURL=hidden-completion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hidden-completion.d.ts","sourceRoot":"","sources":["../../src/v2/hidden-completion.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAER,wBAAwB,EAG3B,MAAM,iDAAiD,CAAC;AASzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAGH,KAAK,eAAe,EAIpB,KAAK,eAAe,EAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGH,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI9E,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,QAAQ,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,eAAe,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACnD;AAwFD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,CAAC,EAAE,SAAS,QAAQ,CAAC,WAAW,CAAC,EAAE,GACxC,OAAO,EAAE,CA+EX;AAoBD;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO;CAKlE;AA4GD,uEAAuE;AACvE,eAAO,MAAM,+BAA+B,EAAE,wBAAwB,CAAC,cAAc,CAGpF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,MAAM,wBAAwB,GAAG,SAAS,GACpD,wBAAwB,CAiB1B;AAED,wBAAsB,gCAAgC,CAClD,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,wBAAwB,CAAC,CA2enC"}
1
+ {"version":3,"file":"hidden-completion.d.ts","sourceRoot":"","sources":["../../src/v2/hidden-completion.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAER,wBAAwB,EAG3B,MAAM,iDAAiD,CAAC;AASzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAGH,KAAK,eAAe,EAIpB,KAAK,eAAe,EAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIH,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI9E,MAAM,WAAW,yBAAyB;IACtC,EAAE,EAAE,QAAQ,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,eAAe,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,4FAA4F;IAC5F,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,MAAM,IAAI,CAAC;IAC7B,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0FAA0F;AAC1F,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IACxE;;;;;;OAMG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAoHD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,CAAC,EAAE,SAAS,QAAQ,CAAC,WAAW,CAAC,EAAE,GACxC,OAAO,EAAE,CA+EX;AAoBD;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO;CAKlE;AA+GD,uEAAuE;AACvE,eAAO,MAAM,+BAA+B,EAAE,wBAAwB,CAAC,cAAc,CAGpF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,MAAM,wBAAwB,GAAG,SAAS,GACpD,wBAAwB,CAiB1B;AAED,wBAAsB,gCAAgC,CAClD,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,yBAAyB,GACnC,OAAO,CAAC,0BAA0B,CAAC,CA6jBrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/v2/hooks/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/v2/hooks/context.ts"],"names":[],"mappings":"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"}