@sema-agent/client-core 0.99.0 → 0.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +572 -0
- package/README.md +174 -114
- package/dist/adapt/arms.js +109 -50
- package/dist/adapt/panelTasks.d.ts +2 -1
- package/dist/adapt/panelTasks.js +32 -9
- package/dist/adapt/textStream.d.ts +1 -1
- package/dist/adapt/textStream.js +58 -32
- package/dist/adapt/toolCards.js +9 -8
- package/dist/adapt.js +7 -1
- package/dist/adapter/activeRunSelfHeal.d.ts +31 -2
- package/dist/adapter/activeRunSelfHeal.js +162 -13
- package/dist/adapter/downstream/eventToSdkMessage.d.ts +25 -6
- package/dist/adapter/downstream/eventToSdkMessage.js +157 -20
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +60 -1
- package/dist/adapter/downstream/terminalToSdkResult.js +219 -39
- package/dist/adapter/downstream/wiringManifestView.d.ts +3 -1
- package/dist/adapter/downstream/wiringManifestView.js +1 -0
- package/dist/adapter/runStream.d.ts +4 -4
- package/dist/adapter/runStream.js +184 -42
- package/dist/adapter/types.d.ts +2 -0
- package/dist/agentsWireCaps.d.ts +9 -7
- package/dist/agentsWireCaps.js +101 -17
- package/dist/approvalDecidedByCapability.js +2 -2
- package/dist/approvalFrameFamilies.d.ts +33 -0
- package/dist/approvalFrameFamilies.js +120 -0
- package/dist/approvalsStreamLiveCapability.js +2 -2
- package/dist/attachmentsWireCaps.js +41 -13
- package/dist/callerCwdCapability.js +2 -2
- package/dist/centerWiringCapability.js +2 -2
- package/dist/clockReading.d.ts +2 -0
- package/dist/clockReading.js +4 -0
- package/dist/cloudConfigWireCaps.d.ts +28 -5
- package/dist/cloudConfigWireCaps.js +334 -103
- package/dist/compactionStatus.d.ts +34 -0
- package/dist/compactionStatus.js +196 -0
- package/dist/coreValuePorts.d.ts +12 -2
- package/dist/coreValuePorts.js +9 -0
- package/dist/decideFailureNote.js +8 -6
- package/dist/decideReceipt.js +2 -2
- package/dist/deviceExecutorManagementCapability.js +2 -2
- package/dist/deviceFlowPolling.js +1 -1
- package/dist/disableSkillsWire.d.ts +1 -1
- package/dist/disableSkillsWire.js +4 -3
- package/dist/displayUntrusted.d.ts +1 -0
- package/dist/displayUntrusted.js +215 -13
- package/dist/engineAgentPanelStore.d.ts +7 -4
- package/dist/engineCapReader.js +1 -1
- package/dist/engineConfigDrift.js +1 -1
- package/dist/engineErrorCodes.d.ts +23 -6
- package/dist/engineErrorCodes.js +36 -11
- package/dist/engineGenerationConvergence.d.ts +39 -0
- package/dist/engineGenerationConvergence.js +95 -0
- package/dist/engineGenerationPort.d.ts +61 -0
- package/dist/engineGenerationPort.js +144 -0
- package/dist/engineHealthFacts.d.ts +23 -0
- package/dist/engineHealthFacts.js +92 -0
- package/dist/engineIdentity.d.ts +4 -0
- package/dist/engineIdentity.js +11 -0
- package/dist/engineNoticeCodes.d.ts +2 -5
- package/dist/engineRowRef.js +4 -0
- package/dist/engineSessionMessages.js +2 -2
- package/dist/engineToolDirectory.d.ts +3 -0
- package/dist/engineToolDirectory.js +6 -4
- package/dist/engineWireFor.d.ts +99 -0
- package/dist/engineWireFor.js +248 -6
- package/dist/engineWireTarget.d.ts +1 -0
- package/dist/engineWireTarget.js +8 -0
- package/dist/env/uiLanguage.js +1 -1
- package/dist/errorSupplementRoles.d.ts +3 -0
- package/dist/errorSupplementRoles.js +37 -0
- package/dist/eventLeg.d.ts +1 -7
- package/dist/eventLeg.js +7 -8
- package/dist/executionLaneCapability.js +2 -2
- package/dist/fileHistoryCaptureCapability.d.ts +0 -3
- package/dist/fileHistoryCaptureCapability.js +3 -7
- package/dist/finalVerifyWire.d.ts +6 -3
- package/dist/finalVerifyWire.js +6 -23
- package/dist/flagInput.d.ts +4 -0
- package/dist/flagInput.js +24 -0
- package/dist/fleet/fleetLedger.js +5 -2
- package/dist/fleet/fleetProjection.d.ts +1 -0
- package/dist/fleet/fleetProjection.js +15 -2
- package/dist/gateVocabulary.js +3 -0
- package/dist/generated/engineFactTables.d.ts +7 -2
- package/dist/generated/engineFactTables.js +79 -0
- package/dist/generated/engineNoticeTables.js +15 -0
- package/dist/generated/settingsSchemaActiveTiers.d.ts +1 -0
- package/dist/generated/settingsSchemaActiveTiers.js +14 -0
- package/dist/generated/settingsSchemaCallerTextEcho.d.ts +1 -0
- package/dist/generated/settingsSchemaCallerTextEcho.js +8 -0
- package/dist/generated/settingsSchemaControlAndBidi.d.ts +1 -0
- package/dist/generated/settingsSchemaControlAndBidi.js +8 -0
- package/dist/generated/settingsSchemaDefaultModel.d.ts +11 -0
- package/dist/generated/settingsSchemaDefaultModel.js +25 -0
- package/dist/generated/settingsSchemaFns.d.ts +66 -0
- package/dist/generated/settingsSchemaFns.js +38 -0
- package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -0
- package/dist/generated/settingsSchemaMcpRequestEntry.js +156 -0
- package/dist/generated/settingsSchemaSafetyMergeSpec.d.ts +1 -0
- package/dist/generated/settingsSchemaSafetyMergeSpec.js +95 -0
- package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -0
- package/dist/generated/settingsSchemaSettingsSources.js +58 -0
- package/dist/generated/settingsSchemaTables.d.ts +3 -0
- package/dist/generated/settingsSchemaTables.js +18 -0
- package/dist/generated/settingsSchemaTypes.d.ts +28 -0
- package/dist/generated/settingsSchemaUrlPattern.d.ts +1 -0
- package/dist/generated/settingsSchemaUrlPattern.js +183 -0
- package/dist/headlessPermissionModeWire.d.ts +18 -2
- package/dist/headlessPermissionModeWire.js +30 -19
- package/dist/hitl/allowRuleShadow.js +9 -7
- package/dist/hitl/approvalCardReading.d.ts +3 -0
- package/dist/hitl/approvalCardReading.js +17 -0
- package/dist/hitl/approvalCardReasons.js +2 -2
- package/dist/hitl/approvalCompleteParked.js +1 -1
- package/dist/hitl/approvalDelivery.d.ts +87 -0
- package/dist/hitl/approvalDelivery.js +193 -0
- package/dist/hitl/approvalHolds.d.ts +14 -0
- package/dist/hitl/approvalHolds.js +41 -0
- package/dist/hitl/approvalResolution.d.ts +11 -0
- package/dist/hitl/approvalResolution.js +50 -11
- package/dist/hitl/askClassPair.d.ts +8 -2
- package/dist/hitl/askClassPair.js +31 -4
- package/dist/hitl/askParkAutoReopenBlock.d.ts +30 -0
- package/dist/hitl/askParkAutoReopenBlock.js +117 -0
- package/dist/hitl/askParkRowRouting.js +4 -1
- package/dist/hitl/attributionLadder.d.ts +62 -0
- package/dist/hitl/attributionLadder.js +138 -0
- package/dist/hitl/automaticAnswerVerdict.d.ts +6 -1
- package/dist/hitl/automaticAnswerVerdict.js +46 -11
- package/dist/hitl/crashConverged.js +2 -2
- package/dist/hitl/decisionConflict.d.ts +6 -2
- package/dist/hitl/decisionConflict.js +24 -9
- package/dist/hitl/decisionLedger.d.ts +55 -0
- package/dist/hitl/decisionLedger.js +156 -0
- package/dist/hitl/decisionRefusal.d.ts +21 -10
- package/dist/hitl/decisionRefusal.js +100 -55
- package/dist/hitl/decisionSend.d.ts +116 -0
- package/dist/hitl/decisionSend.js +563 -0
- package/dist/hitl/frameRouter.d.ts +1 -0
- package/dist/hitl/frameRouter.js +9 -2
- package/dist/hitl/hitlBridge.d.ts +18 -6
- package/dist/hitl/hitlBridge.js +59 -43
- package/dist/hitl/livePendingAsk.js +4 -3
- package/dist/hitl/noAllowCause.js +1 -1
- package/dist/hitl/parkResolver.js +3 -2
- package/dist/hitl/persistedRulesWire.js +1 -0
- package/dist/hitl/planReviewWire.d.ts +4 -0
- package/dist/hitl/planReviewWire.js +104 -106
- package/dist/hitl/resumeRunningCard.d.ts +3 -2
- package/dist/hitl/resumeRunningCard.js +17 -11
- package/dist/hitl/sessionPolicyDeliverable.d.ts +5 -2
- package/dist/hitl/sessionPolicyDeliverable.js +65 -35
- package/dist/hitl/sessionPolicyWire.d.ts +13 -3
- package/dist/hitl/sessionPolicyWire.js +81 -16
- package/dist/hitl/standingRows.js +1 -1
- package/dist/hitl/toolApprovalWire.d.ts +9 -10
- package/dist/hitl/toolApprovalWire.js +103 -151
- package/dist/hookMatcherVerdict.d.ts +2 -0
- package/dist/hookMatcherVerdict.js +12 -0
- package/dist/hooksCompactTransition.d.ts +19 -0
- package/dist/hooksCompactTransition.js +41 -0
- package/dist/hooksWireCaps.d.ts +1 -1
- package/dist/hooksWireCaps.js +202 -203
- package/dist/host.d.ts +1 -14
- package/dist/host.js +0 -8
- package/dist/hostCallbackGuard.d.ts +1 -0
- package/dist/hostCallbackGuard.js +1 -1
- package/dist/hostSettingsSource.d.ts +172 -0
- package/dist/hostSettingsSource.js +675 -0
- package/dist/hostTurnSettings.d.ts +114 -19
- package/dist/hostTurnSettings.js +966 -68
- package/dist/httpHookPolicy.d.ts +37 -0
- package/dist/httpHookPolicy.js +176 -0
- package/dist/humanTurn.d.ts +4 -2
- package/dist/humanTurn.js +40 -10
- package/dist/humanTurnRead.js +4 -3
- package/dist/humanTurnSentences.d.ts +10 -0
- package/dist/humanTurnSentences.js +74 -0
- package/dist/i18n/messages.en.d.ts +313 -0
- package/dist/i18n/messages.en.js +326 -13
- package/dist/i18n/messages.zh.js +341 -13
- package/dist/i18n/translate.js +3 -3
- package/dist/index.d.ts +85 -15
- package/dist/index.js +53 -12
- package/dist/inheritEnvCapability.d.ts +4 -1
- package/dist/inheritEnvCapability.js +38 -17
- package/dist/inheritEnvWire.d.ts +2 -1
- package/dist/inheritEnvWire.js +11 -5
- package/dist/injectionLaneNotice.d.ts +5 -0
- package/dist/injectionLaneNotice.js +46 -0
- package/dist/interactiveToolsWire.d.ts +4 -2
- package/dist/interactiveToolsWire.js +5 -5
- package/dist/jsonFaithful.d.ts +20 -0
- package/dist/jsonFaithful.js +152 -0
- package/dist/limitsWire.d.ts +7 -2
- package/dist/limitsWire.js +19 -13
- package/dist/liveInitToolFace.d.ts +6 -1
- package/dist/liveInitToolFace.js +5 -3
- package/dist/liveModelCatalog.d.ts +22 -0
- package/dist/liveModelCatalog.js +132 -18
- package/dist/mcpPanel.js +3 -1
- package/dist/mcpProbeCapability.js +2 -2
- package/dist/mcpReconnect.js +2 -2
- package/dist/mcpStatusSupersetKeys.d.ts +24 -0
- package/dist/mcpStatusSupersetKeys.js +45 -0
- package/dist/mcpToolToggles.d.ts +6 -0
- package/dist/mcpToolToggles.js +47 -0
- package/dist/mcpWireCaps.d.ts +48 -4
- package/dist/mcpWireCaps.js +338 -99
- package/dist/mcpWireTransport.d.ts +4 -0
- package/dist/mcpWireTransport.js +18 -0
- package/dist/memoryComplianceCapability.js +2 -2
- package/dist/memoryOriginCapability.js +2 -2
- package/dist/model/catalogDefault.d.ts +24 -0
- package/dist/model/catalogDefault.js +4 -0
- package/dist/model/liveCatalogShape.js +5 -4
- package/dist/model/modelsPolicy.js +4 -3
- package/dist/model/onboardJudgement.d.ts +1 -0
- package/dist/model/onboardJudgement.js +1 -1
- package/dist/model/subagentModelWord.js +2 -2
- package/dist/modelCapabilityProbe.d.ts +2 -1
- package/dist/modelCapabilityProbe.js +16 -15
- package/dist/modelIdentityResolvability.d.ts +12 -1
- package/dist/modelIdentityResolvability.js +69 -28
- package/dist/modsKernelIdentity.d.ts +10 -0
- package/dist/modsKernelIdentity.js +103 -0
- package/dist/modsKernelTransit.d.ts +8 -0
- package/dist/modsKernelTransit.js +6 -0
- package/dist/notifications.d.ts +30 -12
- package/dist/notifications.js +241 -53
- package/dist/outputStyleSeatCapability.js +2 -2
- package/dist/ownKey.d.ts +37 -0
- package/dist/ownKey.js +238 -2
- package/dist/panelReduce.d.ts +5 -0
- package/dist/panelReduce.js +45 -13
- package/dist/panelStateHolder.d.ts +1 -0
- package/dist/panelStateHolder.js +10 -1
- package/dist/peerFrames.d.ts +1 -1
- package/dist/peerFrames.js +6 -2
- package/dist/peerLaneCapability.js +2 -2
- package/dist/permissionModesCapability.js +4 -4
- package/dist/permissionRuleIssue.d.ts +2 -1
- package/dist/permissionRuleIssue.js +24 -21
- package/dist/permissionRulesWriteCapability.js +2 -2
- package/dist/permissionsAllowGrantCapability.js +2 -2
- package/dist/permissionsDeclaration.d.ts +43 -4
- package/dist/permissionsDeclaration.js +102 -35
- package/dist/pluginHooksWire.d.ts +20 -4
- package/dist/pluginHooksWire.js +101 -60
- package/dist/prepareRefusal.d.ts +9 -0
- package/dist/prepareRefusal.js +90 -0
- package/dist/printInitToolFace.js +2 -2
- package/dist/printModelStatus.js +1 -1
- package/dist/projectMemory.d.ts +32 -0
- package/dist/projectMemory.js +70 -0
- package/dist/promptBlockedCopy.d.ts +2 -1
- package/dist/promptBlockedCopy.js +2 -1
- package/dist/promptDelivery.d.ts +23 -3
- package/dist/promptDelivery.js +169 -30
- package/dist/providerRejection.d.ts +19 -1
- package/dist/providerRejection.js +75 -4
- package/dist/queuedDelivery.d.ts +48 -0
- package/dist/queuedDelivery.js +233 -0
- package/dist/reattachWindow.d.ts +94 -0
- package/dist/reattachWindow.js +127 -0
- package/dist/request/printNotification.d.ts +1 -1
- package/dist/request/printNotification.js +5 -1
- package/dist/request/submissionIdentity.d.ts +37 -0
- package/dist/request/submissionIdentity.js +65 -0
- package/dist/request/taskRequest.d.ts +22 -14
- package/dist/request/taskRequest.js +312 -202
- package/dist/resultFrameKeys.d.ts +1 -0
- package/dist/resultFrameKeys.js +4 -1
- package/dist/resumeRefusalCopy.d.ts +3 -1
- package/dist/resumeRefusalCopy.js +22 -4
- package/dist/retryStatus.d.ts +26 -0
- package/dist/retryStatus.js +133 -28
- package/dist/rewindArchiveCapability.js +2 -2
- package/dist/rewindEngineAction.d.ts +2 -0
- package/dist/rewindEngineAction.js +23 -1
- package/dist/rowKind.d.ts +36 -0
- package/dist/rowKind.js +97 -0
- package/dist/ruleCompileVerdict.d.ts +18 -0
- package/dist/ruleCompileVerdict.js +67 -2
- package/dist/ruleReadings.d.ts +58 -0
- package/dist/ruleReadings.js +132 -0
- package/dist/ruleRefusalSentence.d.ts +8 -0
- package/dist/ruleRefusalSentence.js +64 -0
- package/dist/runCancelContext.d.ts +0 -1
- package/dist/runCancelContext.js +1 -2
- package/dist/runTerminal.d.ts +5 -0
- package/dist/runTerminal.js +52 -17
- package/dist/sandboxWire.d.ts +3 -2
- package/dist/sandboxWire.js +59 -27
- package/dist/scenarioRefusal.d.ts +2 -1
- package/dist/scenarioRefusal.js +6 -6
- package/dist/scenarioSkills.d.ts +20 -0
- package/dist/scenarioSkills.js +72 -0
- package/dist/scenarioWire.d.ts +5 -2
- package/dist/scenarioWire.js +9 -9
- package/dist/sealedKeyCapability.js +2 -2
- package/dist/seam.d.ts +26 -9
- package/dist/seam.js +44 -4
- package/dist/seatContract.d.ts +62 -9
- package/dist/seatContract.js +70 -25
- package/dist/selfOrchestrationDenial.js +1 -1
- package/dist/sessionPolicyCapability.js +2 -2
- package/dist/sessionRulesChildrenReadLive.d.ts +6 -0
- package/dist/sessionRulesChildrenReadLive.js +5 -0
- package/dist/sessionRulesNamespaceFormsCapability.d.ts +12 -0
- package/dist/sessionRulesNamespaceFormsCapability.js +29 -0
- package/dist/sessionSyncFileHistoryCapability.js +2 -2
- package/dist/settingsCredentialKeyPaths.d.ts +8 -0
- package/dist/settingsCredentialKeyPaths.js +274 -0
- package/dist/settingsHooksSalvage.d.ts +1 -0
- package/dist/settingsHooksSalvage.js +7 -1
- package/dist/settingsLayerAdmission.d.ts +4 -0
- package/dist/settingsLayerAdmission.js +16 -0
- package/dist/skillToolListsCapability.js +6 -5
- package/dist/skillsWireCaps.d.ts +14 -3
- package/dist/skillsWireCaps.js +48 -18
- package/dist/slashCommandGate.d.ts +24 -0
- package/dist/slashCommandGate.js +74 -0
- package/dist/slashCommandTable.d.ts +14 -0
- package/dist/slashCommandTable.js +99 -0
- package/dist/sqlEngineCapability.js +2 -2
- package/dist/steerPriorityCapability.js +2 -2
- package/dist/storePostureCapability.js +2 -2
- package/dist/subagent/agentStateDetail.js +1 -1
- package/dist/subagent/engineDelegatedPrompt.d.ts +9 -0
- package/dist/subagent/engineDelegatedPrompt.js +38 -7
- package/dist/subagent/engineRowStopGate.js +2 -2
- package/dist/subagent/engineSubagentResume.js +3 -3
- package/dist/subagent/engineTaskHandleWire.d.ts +1 -0
- package/dist/subagent/engineTaskHandleWire.js +10 -0
- package/dist/subagentContentStore.d.ts +1 -0
- package/dist/subagentContentStore.js +135 -27
- package/dist/submitFailure.d.ts +8 -0
- package/dist/submitFailure.js +17 -0
- package/dist/supportFloor.d.ts +1 -0
- package/dist/supportFloor.js +7 -0
- package/dist/terminationIntent.d.ts +55 -0
- package/dist/terminationIntent.js +352 -0
- package/dist/toolHistoryMismatch.d.ts +8 -0
- package/dist/toolHistoryMismatch.js +37 -6
- package/dist/toolResult.d.ts +13 -3
- package/dist/toolResult.js +158 -9
- package/dist/toolResultContent.d.ts +13 -0
- package/dist/toolResultContent.js +82 -7
- package/dist/toolRoster.d.ts +18 -0
- package/dist/toolRoster.js +64 -0
- package/dist/toolsFlagNames.d.ts +8 -0
- package/dist/toolsFlagNames.js +110 -0
- package/dist/turnFailurePresentation.js +41 -96
- package/dist/usageLimitAutoResume.d.ts +74 -0
- package/dist/usageLimitAutoResume.js +227 -0
- package/dist/userAttachmentEnvelope.js +1 -1
- package/dist/userAttachmentSeat.js +5 -5
- package/dist/userInvokedSkillsCapability.js +2 -2
- package/dist/webSearchBackendCapability.js +2 -2
- package/dist/wireErrorTriage.js +99 -50
- package/dist/wireFailureShape.d.ts +25 -1
- package/dist/wireFailureShape.js +92 -5
- package/dist/wireRefusalCopy.d.ts +75 -18
- package/dist/wireRefusalCopy.js +532 -148
- package/dist/wiringFleetDoctor.d.ts +3 -0
- package/dist/wiringFleetDoctor.js +21 -0
- package/dist/workflow.d.ts +2 -1
- package/dist/workflow.js +38 -1
- package/dist/workflowClient.d.ts +2 -7
- package/dist/workflowsJournalCapability.js +2 -2
- package/dist/writeProtectionCapability.js +2 -2
- package/docs/INTEGRATION-CLIENTS.md +1013 -190
- package/package.json +15 -4
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { usableClockMs } from './clockReading.js';
|
|
2
|
+
import { displayUntrusted } from './displayUntrusted.js';
|
|
3
|
+
import { linkedAbortSignal, readSignalAborted, readSignalReason, tryListenAbortOnce, tryUnlistenAbort } from './engineWireFor.js';
|
|
4
|
+
import { msg, renderMessage } from './i18n/translate.js';
|
|
5
|
+
import { abortableSleep } from './abortableSleep.js';
|
|
6
|
+
import { isSdkRunParked, isSdkRunTerminal } from './terminalStatuses.js';
|
|
7
|
+
export const TERMINATION_INTENT_TTL_MS = 60_000;
|
|
8
|
+
export const TERMINATION_INTENT_WEAK_SOURCE = 'esc-abort';
|
|
9
|
+
export const INTERRUPTED_SETTLE_BUDGET_MS = 10_000;
|
|
10
|
+
export const INTERRUPTED_SETTLE_POLL_MS = 1_000;
|
|
11
|
+
const MAX_ROWS = 256;
|
|
12
|
+
const MAX_TRACKED_WRITES = 1024;
|
|
13
|
+
const validId = (taskId) => typeof taskId === 'string' && taskId.length > 0;
|
|
14
|
+
const validSource = (s) => typeof s === 'string' && s.length > 0;
|
|
15
|
+
function readSnapshot(s) {
|
|
16
|
+
try {
|
|
17
|
+
if (typeof s !== 'object' || s === null)
|
|
18
|
+
return null;
|
|
19
|
+
const raw = s;
|
|
20
|
+
const source = raw.source;
|
|
21
|
+
const at = raw.at;
|
|
22
|
+
const abortAt = raw.abortAt;
|
|
23
|
+
if (!validSource(source) || usableClockMs(at) === null)
|
|
24
|
+
return null;
|
|
25
|
+
return { source, at: at, abortAt: typeof abortAt === 'number' && usableClockMs(abortAt) !== null ? abortAt : null };
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function createTerminationIntentLedger(options) {
|
|
32
|
+
if (typeof options !== 'object' || options === null || typeof options.now !== 'function') {
|
|
33
|
+
throw new TypeError('createTerminationIntentLedger: options.now must be a function returning milliseconds');
|
|
34
|
+
}
|
|
35
|
+
const readClock = options.now;
|
|
36
|
+
const ttl = typeof options.ttlMs === 'number' && Number.isFinite(options.ttlMs) && options.ttlMs > 0 ? options.ttlMs : TERMINATION_INTENT_TTL_MS;
|
|
37
|
+
const exempt = Object.freeze([...(options.exemptAbortReasons ?? ['background'])]);
|
|
38
|
+
const rows = new Map();
|
|
39
|
+
let nextVersion = 1;
|
|
40
|
+
const priors = new Map();
|
|
41
|
+
const refused = new Set();
|
|
42
|
+
const trackBounded = (m, k, v) => {
|
|
43
|
+
m.set(k, v);
|
|
44
|
+
while (m.size > MAX_TRACKED_WRITES) {
|
|
45
|
+
const oldest = m.keys().next();
|
|
46
|
+
if (oldest.done === true)
|
|
47
|
+
break;
|
|
48
|
+
m.delete(oldest.value);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const markRefused = (version) => {
|
|
52
|
+
if (typeof version !== 'number')
|
|
53
|
+
return;
|
|
54
|
+
refused.add(version);
|
|
55
|
+
while (refused.size > MAX_TRACKED_WRITES) {
|
|
56
|
+
const oldest = refused.values().next();
|
|
57
|
+
if (oldest.done === true)
|
|
58
|
+
break;
|
|
59
|
+
refused.delete(oldest.value);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const effectivePrior = (version) => {
|
|
63
|
+
if (!priors.has(version))
|
|
64
|
+
return { known: false, row: null };
|
|
65
|
+
let row = priors.get(version) ?? null;
|
|
66
|
+
for (let hops = 0; row !== null && refused.has(row.version) && priors.has(row.version) && hops < MAX_TRACKED_WRITES; hops += 1)
|
|
67
|
+
row = priors.get(row.version) ?? null;
|
|
68
|
+
return { known: true, row };
|
|
69
|
+
};
|
|
70
|
+
const clock = () => {
|
|
71
|
+
try {
|
|
72
|
+
return usableClockMs(readClock());
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const isFresh = (now, at) => {
|
|
79
|
+
const age = now - at;
|
|
80
|
+
return age >= 0 && age < ttl;
|
|
81
|
+
};
|
|
82
|
+
const purge = (now) => {
|
|
83
|
+
for (const [taskId, row] of rows) {
|
|
84
|
+
if (isFresh(now, row.at))
|
|
85
|
+
continue;
|
|
86
|
+
if (row.abortAt !== null && isFresh(now, row.abortAt)) {
|
|
87
|
+
rows.set(taskId, { at: row.abortAt, source: TERMINATION_INTENT_WEAK_SOURCE, abortAt: row.abortAt, version: nextVersion++ });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
rows.delete(taskId);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const put = (taskId, row) => {
|
|
95
|
+
rows.delete(taskId);
|
|
96
|
+
while (rows.size >= MAX_ROWS) {
|
|
97
|
+
const oldest = rows.keys().next();
|
|
98
|
+
if (oldest.done === true)
|
|
99
|
+
break;
|
|
100
|
+
rows.delete(oldest.value);
|
|
101
|
+
}
|
|
102
|
+
rows.set(taskId, row);
|
|
103
|
+
};
|
|
104
|
+
const record = (taskId, source) => {
|
|
105
|
+
if (!validId(taskId) || !validSource(source))
|
|
106
|
+
return 0;
|
|
107
|
+
const now = clock();
|
|
108
|
+
if (now === null)
|
|
109
|
+
return 0;
|
|
110
|
+
purge(now);
|
|
111
|
+
const prev = rows.get(taskId);
|
|
112
|
+
const abortAt = prev?.abortAt ?? (source === TERMINATION_INTENT_WEAK_SOURCE ? now : null);
|
|
113
|
+
const version = nextVersion++;
|
|
114
|
+
trackBounded(priors, version, prev ?? null);
|
|
115
|
+
put(taskId, { at: now, source, abortAt, version });
|
|
116
|
+
return version;
|
|
117
|
+
};
|
|
118
|
+
const rollback = (taskId, prior) => {
|
|
119
|
+
if (!validId(taskId))
|
|
120
|
+
return;
|
|
121
|
+
const now = clock();
|
|
122
|
+
if (now === null)
|
|
123
|
+
return;
|
|
124
|
+
purge(now);
|
|
125
|
+
if (prior !== null && validSource(prior) && prior !== TERMINATION_INTENT_WEAK_SOURCE) {
|
|
126
|
+
record(taskId, prior);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const row = rows.get(taskId);
|
|
130
|
+
const abortAt = row?.abortAt ?? null;
|
|
131
|
+
if (abortAt !== null && isFresh(now, abortAt)) {
|
|
132
|
+
put(taskId, { at: abortAt, source: TERMINATION_INTENT_WEAK_SOURCE, abortAt, version: nextVersion++ });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
rows.delete(taskId);
|
|
136
|
+
};
|
|
137
|
+
const restoreTo = (taskId, row, target, now) => {
|
|
138
|
+
if (target === null) {
|
|
139
|
+
rollback(taskId, null);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const abortAt = target.abortAt === null ? row.abortAt : row.abortAt === null ? target.abortAt : Math.max(target.abortAt, row.abortAt);
|
|
143
|
+
put(taskId, { at: target.at, source: target.source, abortAt, version: target.version ?? nextVersion++ });
|
|
144
|
+
purge(now);
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
record,
|
|
148
|
+
snapshot(taskId) {
|
|
149
|
+
if (!validId(taskId))
|
|
150
|
+
return null;
|
|
151
|
+
const now = clock();
|
|
152
|
+
if (now === null)
|
|
153
|
+
return null;
|
|
154
|
+
purge(now);
|
|
155
|
+
const row = rows.get(taskId);
|
|
156
|
+
return row === undefined ? null : Object.freeze({ source: row.source, at: row.at, abortAt: row.abortAt });
|
|
157
|
+
},
|
|
158
|
+
restoreIf(taskId, version, snapshot) {
|
|
159
|
+
if (!validId(taskId))
|
|
160
|
+
return false;
|
|
161
|
+
const now = clock();
|
|
162
|
+
if (now === null)
|
|
163
|
+
return false;
|
|
164
|
+
purge(now);
|
|
165
|
+
markRefused(version);
|
|
166
|
+
const row = rows.get(taskId);
|
|
167
|
+
if (row === undefined || row.version !== version)
|
|
168
|
+
return false;
|
|
169
|
+
const eff = effectivePrior(version);
|
|
170
|
+
restoreTo(taskId, row, eff.known ? eff.row : readSnapshot(snapshot), now);
|
|
171
|
+
return true;
|
|
172
|
+
},
|
|
173
|
+
rollbackIf(taskId, version, prior) {
|
|
174
|
+
if (!validId(taskId))
|
|
175
|
+
return false;
|
|
176
|
+
const now = clock();
|
|
177
|
+
if (now === null)
|
|
178
|
+
return false;
|
|
179
|
+
purge(now);
|
|
180
|
+
markRefused(version);
|
|
181
|
+
const row = rows.get(taskId);
|
|
182
|
+
if (row === undefined || row.version !== version)
|
|
183
|
+
return false;
|
|
184
|
+
const eff = effectivePrior(version);
|
|
185
|
+
if (eff.known)
|
|
186
|
+
restoreTo(taskId, row, eff.row, now);
|
|
187
|
+
else
|
|
188
|
+
rollback(taskId, prior);
|
|
189
|
+
return true;
|
|
190
|
+
},
|
|
191
|
+
rollback,
|
|
192
|
+
wasRecentlyTerminatedByUs(taskId) {
|
|
193
|
+
if (!validId(taskId))
|
|
194
|
+
return false;
|
|
195
|
+
const now = clock();
|
|
196
|
+
if (now === null)
|
|
197
|
+
return false;
|
|
198
|
+
purge(now);
|
|
199
|
+
return rows.has(taskId);
|
|
200
|
+
},
|
|
201
|
+
sourceOf(taskId) {
|
|
202
|
+
if (!validId(taskId))
|
|
203
|
+
return null;
|
|
204
|
+
const now = clock();
|
|
205
|
+
if (now === null)
|
|
206
|
+
return null;
|
|
207
|
+
purge(now);
|
|
208
|
+
return rows.get(taskId)?.source ?? null;
|
|
209
|
+
},
|
|
210
|
+
armOnAbort(signal, taskId) {
|
|
211
|
+
if (signal === undefined || signal === null || !validId(taskId))
|
|
212
|
+
return;
|
|
213
|
+
const onAbort = () => {
|
|
214
|
+
const read = readSignalReason(signal);
|
|
215
|
+
if (read === null)
|
|
216
|
+
return;
|
|
217
|
+
if (typeof read.reason === 'string' && exempt.includes(read.reason))
|
|
218
|
+
return;
|
|
219
|
+
const now = clock();
|
|
220
|
+
if (now === null)
|
|
221
|
+
return;
|
|
222
|
+
purge(now);
|
|
223
|
+
const existing = rows.get(taskId);
|
|
224
|
+
if (existing !== undefined && existing.source !== TERMINATION_INTENT_WEAK_SOURCE) {
|
|
225
|
+
put(taskId, { ...existing, abortAt: now });
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
put(taskId, { at: now, source: TERMINATION_INTENT_WEAK_SOURCE, abortAt: now, version: nextVersion++ });
|
|
229
|
+
};
|
|
230
|
+
const aborted = readSignalAborted(signal);
|
|
231
|
+
if (aborted === null)
|
|
232
|
+
return;
|
|
233
|
+
if (aborted) {
|
|
234
|
+
onAbort();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
tryListenAbortOnce(signal, onAbort);
|
|
238
|
+
},
|
|
239
|
+
forget(taskId) {
|
|
240
|
+
if (!validId(taskId))
|
|
241
|
+
return;
|
|
242
|
+
rows.delete(taskId);
|
|
243
|
+
},
|
|
244
|
+
size() {
|
|
245
|
+
const now = clock();
|
|
246
|
+
if (now !== null)
|
|
247
|
+
purge(now);
|
|
248
|
+
return rows.size;
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function readStatus(row) {
|
|
253
|
+
try {
|
|
254
|
+
const s = row?.status;
|
|
255
|
+
return typeof s === 'string' && s.length > 0 ? s : null;
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const PROBE_STOPPED = Symbol('sema.interruptedSettleProbeStopped');
|
|
262
|
+
const PROBE_FAILED = Symbol('sema.interruptedSettleProbeFailed');
|
|
263
|
+
const positive = (v, fallback) => (typeof v === 'number' && Number.isFinite(v) && v > 0 ? v : fallback);
|
|
264
|
+
export async function awaitInterruptedRunSettle(taskId, deps) {
|
|
265
|
+
const getRun = deps?.getRun;
|
|
266
|
+
if (typeof getRun !== 'function')
|
|
267
|
+
return { kind: 'unknown' };
|
|
268
|
+
if (!validId(taskId))
|
|
269
|
+
return { kind: 'unknown' };
|
|
270
|
+
const budgetMs = positive(deps.budgetMs, INTERRUPTED_SETTLE_BUDGET_MS);
|
|
271
|
+
const intervalMs = positive(deps.intervalMs, INTERRUPTED_SETTLE_POLL_MS);
|
|
272
|
+
const clockNow = typeof deps.now === 'function' ? deps.now : () => performance.now();
|
|
273
|
+
const readNow = () => {
|
|
274
|
+
try {
|
|
275
|
+
const t = clockNow();
|
|
276
|
+
return Number.isFinite(t) ? t : 0;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return 0;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const started = readNow();
|
|
283
|
+
let sawRunning = false;
|
|
284
|
+
const isAborted = () => deps.signal?.aborted === true;
|
|
285
|
+
const budgetAc = new AbortController();
|
|
286
|
+
let budgetSpent = false;
|
|
287
|
+
let markStopped = () => { };
|
|
288
|
+
const stopped = new Promise((resolve) => {
|
|
289
|
+
markStopped = () => resolve(PROBE_STOPPED);
|
|
290
|
+
});
|
|
291
|
+
const onCallerAbort = () => markStopped();
|
|
292
|
+
const budgetTimer = setTimeout(() => {
|
|
293
|
+
budgetSpent = true;
|
|
294
|
+
budgetAc.abort();
|
|
295
|
+
markStopped();
|
|
296
|
+
}, budgetMs);
|
|
297
|
+
if (deps.signal !== undefined)
|
|
298
|
+
tryListenAbortOnce(deps.signal, onCallerAbort);
|
|
299
|
+
if (isAborted())
|
|
300
|
+
markStopped();
|
|
301
|
+
const linked = linkedAbortSignal(deps.signal, budgetAc.signal);
|
|
302
|
+
const probeSignal = linked.signal;
|
|
303
|
+
try {
|
|
304
|
+
for (;;) {
|
|
305
|
+
if (isAborted())
|
|
306
|
+
return { kind: 'unknown' };
|
|
307
|
+
if (budgetSpent)
|
|
308
|
+
break;
|
|
309
|
+
let probe;
|
|
310
|
+
try {
|
|
311
|
+
probe = Promise.resolve(getRun(taskId, { signal: probeSignal })).then((row) => row, () => PROBE_FAILED);
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
probe = Promise.resolve(PROBE_FAILED);
|
|
315
|
+
}
|
|
316
|
+
const outcome = await Promise.race([probe, stopped]);
|
|
317
|
+
if (isAborted())
|
|
318
|
+
return { kind: 'unknown' };
|
|
319
|
+
const status = outcome === PROBE_STOPPED || outcome === PROBE_FAILED ? null : readStatus(outcome);
|
|
320
|
+
if (status !== null) {
|
|
321
|
+
if (isSdkRunTerminal(status))
|
|
322
|
+
return { kind: 'settled', status };
|
|
323
|
+
if (isSdkRunParked(status))
|
|
324
|
+
return { kind: 'parked', status };
|
|
325
|
+
if (status === 'running')
|
|
326
|
+
sawRunning = true;
|
|
327
|
+
}
|
|
328
|
+
if (budgetSpent)
|
|
329
|
+
break;
|
|
330
|
+
const left = started + budgetMs - readNow();
|
|
331
|
+
if (left <= 0)
|
|
332
|
+
break;
|
|
333
|
+
await abortableSleep(Math.min(intervalMs, left), probeSignal);
|
|
334
|
+
if (isAborted())
|
|
335
|
+
return { kind: 'unknown' };
|
|
336
|
+
}
|
|
337
|
+
if (isAborted())
|
|
338
|
+
return { kind: 'unknown' };
|
|
339
|
+
return sawRunning ? { kind: 'still-running', waitedMs: Math.max(0, readNow() - started) } : { kind: 'unknown' };
|
|
340
|
+
}
|
|
341
|
+
finally {
|
|
342
|
+
clearTimeout(budgetTimer);
|
|
343
|
+
linked.dispose();
|
|
344
|
+
if (deps.signal !== undefined)
|
|
345
|
+
tryUnlistenAbort(deps.signal, onCallerAbort);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
export function interruptedRunSettleRow(taskId, verdict, lang) {
|
|
349
|
+
if (typeof verdict !== 'object' || verdict === null || verdict.kind !== 'settled')
|
|
350
|
+
return null;
|
|
351
|
+
return renderMessage(msg('session.selfHeal.row.interrupted.settled', { taskId: displayUntrusted(String(taskId), { max: 120 }) }), lang);
|
|
352
|
+
}
|
|
@@ -29,6 +29,8 @@ export interface ToolHistoryMismatchRowKey {
|
|
|
29
29
|
}
|
|
30
30
|
export declare function toolHistoryMismatchRowKey(m: ToolHistoryMismatch, consecutive: number | undefined, rewindOffered: boolean): ToolHistoryMismatchRowKey;
|
|
31
31
|
export declare function readToolHistoryMismatchKey(v: object | null | undefined): ToolHistoryMismatchRowKey | undefined;
|
|
32
|
+
export declare const SEMA_TOOL_HISTORY_ACCEPTED_KEY = "_sema_tool_history_accepted";
|
|
33
|
+
export declare function readToolHistoryAcceptedKey(frame: object | null | undefined): true | undefined;
|
|
32
34
|
export declare const TOOL_HISTORY_LEDGER_CAP = 64;
|
|
33
35
|
export declare function openToolHistoryGeneration(): number;
|
|
34
36
|
export interface ToolHistoryTerminalNote {
|
|
@@ -38,8 +40,14 @@ export interface ToolHistoryTerminalNote {
|
|
|
38
40
|
runId: string | undefined;
|
|
39
41
|
replay: boolean;
|
|
40
42
|
mismatch: ToolHistoryMismatch | null;
|
|
43
|
+
accepted?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ToolHistoryTerminalFacts {
|
|
46
|
+
readonly consecutive: number | undefined;
|
|
47
|
+
readonly acceptedSinceMismatch: true | undefined;
|
|
41
48
|
}
|
|
42
49
|
export declare function noteToolHistoryTerminal(note: ToolHistoryTerminalNote): number | undefined;
|
|
50
|
+
export declare function noteToolHistoryTerminalFacts(note: ToolHistoryTerminalNote): ToolHistoryTerminalFacts;
|
|
43
51
|
export declare function _resetToolHistoryLedgerForTest(): void;
|
|
44
52
|
export interface ToolHistoryRow {
|
|
45
53
|
readonly toolUseIds?: readonly string[];
|
|
@@ -286,6 +286,18 @@ function ownDataMember(o, k) {
|
|
|
286
286
|
return undefined;
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
|
+
export const SEMA_TOOL_HISTORY_ACCEPTED_KEY = '_sema_tool_history_accepted';
|
|
290
|
+
export function readToolHistoryAcceptedKey(frame) {
|
|
291
|
+
try {
|
|
292
|
+
if (typeof frame !== 'object' || frame === null)
|
|
293
|
+
return undefined;
|
|
294
|
+
const d = Object.getOwnPropertyDescriptor(frame, SEMA_TOOL_HISTORY_ACCEPTED_KEY);
|
|
295
|
+
return d !== undefined && Object.hasOwn(d, 'value') && d.value === true ? true : undefined;
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return undefined;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
289
301
|
export const TOOL_HISTORY_LEDGER_CAP = 64;
|
|
290
302
|
const PRIOR_RUN_IDS_CAP = 16;
|
|
291
303
|
const ECHOED_SESSION_IDS_CAP = TOOL_HISTORY_LEDGER_CAP * 4;
|
|
@@ -308,16 +320,30 @@ export function openToolHistoryGeneration() {
|
|
|
308
320
|
return toolHistoryGenerationSeq;
|
|
309
321
|
}
|
|
310
322
|
const fingerprintOf = (m) => `${m.kind}\u0000${m.toolUseId ?? ''}`;
|
|
323
|
+
function acceptanceStep(prev, note, attributed) {
|
|
324
|
+
if (note.replay)
|
|
325
|
+
return { awaiting: prev, accepted: undefined };
|
|
326
|
+
if (note.mismatch !== null)
|
|
327
|
+
return { awaiting: true, accepted: undefined };
|
|
328
|
+
if (note.accepted === true)
|
|
329
|
+
return attributed ? { awaiting: false, accepted: prev ? true : undefined } : { awaiting: prev, accepted: undefined };
|
|
330
|
+
return { awaiting: prev, accepted: undefined };
|
|
331
|
+
}
|
|
311
332
|
export function noteToolHistoryTerminal(note) {
|
|
333
|
+
return noteToolHistoryTerminalFacts(note).consecutive;
|
|
334
|
+
}
|
|
335
|
+
export function noteToolHistoryTerminalFacts(note) {
|
|
336
|
+
const none = { consecutive: undefined, acceptedSinceMismatch: undefined };
|
|
312
337
|
const { sessionId, generation, runId, replay, mismatch } = note;
|
|
313
338
|
if (typeof sessionId !== 'string' || sessionId.length === 0) {
|
|
314
339
|
unattributedTerminalSeq += 1;
|
|
315
|
-
return
|
|
340
|
+
return none;
|
|
316
341
|
}
|
|
317
342
|
if (note.sessionEchoed === true)
|
|
318
343
|
rememberEchoedSession(sessionId);
|
|
319
344
|
else if (!echoedSessionIds.has(sessionId))
|
|
320
345
|
unattributedTerminalSeq += 1;
|
|
346
|
+
const attributed = note.sessionEchoed === true || echoedSessionIds.has(sessionId);
|
|
321
347
|
const row = toolHistoryLedger.get(sessionId);
|
|
322
348
|
const fingerprint = mismatch === null ? null : fingerprintOf(mismatch);
|
|
323
349
|
const run = !replay && typeof runId === 'string' && runId.length > 0 ? runId : undefined;
|
|
@@ -330,25 +356,29 @@ export function noteToolHistoryTerminal(note) {
|
|
|
330
356
|
unattributedMark: unattributedTerminalSeq,
|
|
331
357
|
lastRunId: undefined,
|
|
332
358
|
recentRunIds: run !== undefined ? [...row.recentRunIds, run].slice(-PRIOR_RUN_IDS_CAP) : row.recentRunIds,
|
|
359
|
+
awaitingAcceptance: row.awaitingAcceptance,
|
|
333
360
|
});
|
|
334
361
|
}
|
|
335
|
-
return
|
|
362
|
+
return none;
|
|
336
363
|
}
|
|
337
364
|
if (row !== undefined)
|
|
338
365
|
row.writtenGeneration = generation;
|
|
339
366
|
const interrupted = row !== undefined && row.unattributedMark < unattributedTerminalSeq;
|
|
340
367
|
if (run !== undefined && row !== undefined && (row.segmentRunIds.has(run) || row.recentRunIds.includes(run))) {
|
|
341
|
-
|
|
368
|
+
const repeated = !interrupted && row.lastRunId === run && fingerprint !== null && row.fingerprint === fingerprint ? row.segmentRunIds.size : undefined;
|
|
369
|
+
return { consecutive: repeated, acceptedSinceMismatch: undefined };
|
|
342
370
|
}
|
|
371
|
+
const acceptance = acceptanceStep(row?.awaitingAcceptance ?? false, note, attributed);
|
|
343
372
|
if (row !== undefined && row.fingerprint === fingerprint && !(interrupted && fingerprint !== null && run !== undefined)) {
|
|
373
|
+
row.awaitingAcceptance = acceptance.awaiting;
|
|
344
374
|
if (run === undefined)
|
|
345
|
-
return undefined;
|
|
375
|
+
return { consecutive: undefined, acceptedSinceMismatch: acceptance.accepted };
|
|
346
376
|
if (fingerprint !== null)
|
|
347
377
|
row.segmentRunIds.add(run);
|
|
348
378
|
row.lastRunId = run;
|
|
349
379
|
row.recentRunIds = [...row.recentRunIds, run].slice(-PRIOR_RUN_IDS_CAP);
|
|
350
380
|
touchLedgerRow(sessionId, row);
|
|
351
|
-
return fingerprint === null ? undefined : row.segmentRunIds.size;
|
|
381
|
+
return { consecutive: fingerprint === null ? undefined : row.segmentRunIds.size, acceptedSinceMismatch: acceptance.accepted };
|
|
352
382
|
}
|
|
353
383
|
touchLedgerRow(sessionId, {
|
|
354
384
|
fingerprint,
|
|
@@ -357,8 +387,9 @@ export function noteToolHistoryTerminal(note) {
|
|
|
357
387
|
unattributedMark: unattributedTerminalSeq,
|
|
358
388
|
lastRunId: run,
|
|
359
389
|
recentRunIds: run !== undefined ? [...(row?.recentRunIds ?? []), run].slice(-PRIOR_RUN_IDS_CAP) : [...(row?.recentRunIds ?? [])],
|
|
390
|
+
awaitingAcceptance: acceptance.awaiting,
|
|
360
391
|
});
|
|
361
|
-
return fingerprint !== null && run !== undefined ? 1 : undefined;
|
|
392
|
+
return { consecutive: fingerprint !== null && run !== undefined ? 1 : undefined, acceptedSinceMismatch: acceptance.accepted };
|
|
362
393
|
}
|
|
363
394
|
function touchLedgerRow(sessionId, row) {
|
|
364
395
|
toolHistoryLedger.delete(sessionId);
|
package/dist/toolResult.d.ts
CHANGED
|
@@ -112,21 +112,31 @@ export interface ToolResultRowFlags {
|
|
|
112
112
|
}
|
|
113
113
|
export declare function toolResultRowFlagsOf(row: object | null | undefined): ToolResultRowFlags;
|
|
114
114
|
export type ToolKillCause = NonNullable<ReturnType<typeof toolKillCauseAcrossEngineIdentity>> | 'memory_pressure';
|
|
115
|
-
export declare function wireOutputToBody(toolName: string, output: unknown, isError: boolean, truncated: boolean, flatten: FlattenWireOutput,
|
|
115
|
+
export declare function wireOutputToBody(toolName: string, output: unknown, isError: boolean, truncated: boolean, flatten: FlattenWireOutput, structuredIn?: unknown, leaderLedger?: boolean, killCauseOf?: () => ToolKillCause | undefined): ToolResultBody;
|
|
116
116
|
export declare function structuredToToolUseResult(structured: unknown, modelText?: string, leaderLedger?: boolean): {
|
|
117
117
|
toolUseResult: unknown;
|
|
118
118
|
isError?: boolean;
|
|
119
119
|
} | null;
|
|
120
|
+
export interface WebSearchSource {
|
|
121
|
+
readonly title: string;
|
|
122
|
+
readonly url: string;
|
|
123
|
+
}
|
|
124
|
+
export type WebSearchSources = readonly WebSearchSource[] & {
|
|
125
|
+
readonly droppedCount: number;
|
|
126
|
+
};
|
|
127
|
+
export declare function webSearchSourcesOf(toolEnd: {} | null | undefined): WebSearchSources | undefined;
|
|
120
128
|
export interface EngineBgShellRegistration {
|
|
121
129
|
kind: 'register';
|
|
122
130
|
taskId: string;
|
|
131
|
+
toolUseId?: string;
|
|
123
132
|
command: string;
|
|
124
133
|
description?: string;
|
|
125
134
|
receipt: string;
|
|
135
|
+
outputFile?: string;
|
|
126
136
|
source: 'bash' | 'monitor';
|
|
127
137
|
}
|
|
128
|
-
export declare function detectEngineBgShellReceipt(toolName: string, rawInput: unknown, outputText: string | undefined, structured?: unknown): EngineBgShellRegistration | null;
|
|
129
|
-
export declare function detectEngineBgShellDetach(toolName: string, rawInput: unknown, structured: unknown, outputText: string | undefined): EngineBgShellRegistration | null;
|
|
138
|
+
export declare function detectEngineBgShellReceipt(toolName: string, rawInput: unknown, outputText: string | undefined, structured?: unknown, toolUseId?: string): EngineBgShellRegistration | null;
|
|
139
|
+
export declare function detectEngineBgShellDetach(toolName: string, rawInput: unknown, structured: unknown, outputText: string | undefined, toolUseId?: string): EngineBgShellRegistration | null;
|
|
130
140
|
export declare function todoWriteToolUseResult(rawInput: unknown, oldTodos: unknown[], isError: boolean): {
|
|
131
141
|
toolUseResult: unknown;
|
|
132
142
|
isError: boolean;
|