@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
package/dist/adapt/toolCards.js
CHANGED
|
@@ -5,7 +5,7 @@ import { flattenWireOutput } from './wireShapes.js';
|
|
|
5
5
|
import { toolResultBlocksOf } from '../toolResultContent.js';
|
|
6
6
|
import { bashExitOf, bashExitReadingFailed } from '../bashExitReading.js';
|
|
7
7
|
import { isCcToolDenialKind } from '../gateVocabulary.js';
|
|
8
|
-
import { guardedRead, readFrameStringKey, readFrameTrueMark } from '../ownKey.js';
|
|
8
|
+
import { guardedRead, ownSnapshotWhenTyped, readFrameStringKey, readFrameTrueMark } from '../ownKey.js';
|
|
9
9
|
import { gateOutcomeOf, isApprovalWindowExpiredGate, isDenialLimitAutoDeniedGate } from '../gateOutcome.js';
|
|
10
10
|
import { TOOL_END_INTERRUPTED_NEVER_STARTED } from '../engineErrorCodes.js';
|
|
11
11
|
function toolUseResultParts(v) {
|
|
@@ -14,18 +14,19 @@ function toolUseResultParts(v) {
|
|
|
14
14
|
export function toolResultOutcomeOf(toolName, end, rawInput, owner, ledgerTier, killCauseOf) {
|
|
15
15
|
const isError = end?.isError ?? false;
|
|
16
16
|
const leaderLedger = owner === 'leader';
|
|
17
|
+
const structured = ownSnapshotWhenTyped(end?.structured, 'task-output');
|
|
17
18
|
const body = end && end.output !== undefined
|
|
18
|
-
? wireOutputToBody(toolName, end.output, isError, end.truncated === true, flattenWireOutput,
|
|
19
|
+
? wireOutputToBody(toolName, end.output, isError, end.truncated === true, flattenWireOutput, structured, leaderLedger, killCauseOf)
|
|
19
20
|
: degradedToolResultBody(isError);
|
|
20
|
-
let rich =
|
|
21
|
-
? structuredToToolUseResult(
|
|
21
|
+
let rich = structured !== undefined
|
|
22
|
+
? structuredToToolUseResult(structured, end?.output !== undefined ? flattenWireOutput(end.output) : undefined, leaderLedger)
|
|
22
23
|
: null;
|
|
23
24
|
if (rich === null && ledgerTier !== undefined)
|
|
24
25
|
rich = ledgerTier(isError);
|
|
25
26
|
if (rich === null && !isError && toolName === 'ReportFindings') {
|
|
26
|
-
rich = reportFindingsToolUseResult(
|
|
27
|
+
rich = reportFindingsToolUseResult(structured, rawInput);
|
|
27
28
|
}
|
|
28
|
-
const failed = body.isError || rich?.isError === true || bashExitReadingFailed(bashExitOf(
|
|
29
|
+
const failed = body.isError || rich?.isError === true || bashExitReadingFailed(bashExitOf(structured, () => null));
|
|
29
30
|
const settled = failed && !body.isError ? { ...body, isError: true } : body;
|
|
30
31
|
return { body: withContentBlocks(settled, end), rich };
|
|
31
32
|
}
|
|
@@ -73,8 +74,8 @@ export function createToolCardLedger(ctx, idOf) {
|
|
|
73
74
|
const parentToolCallId = end?.parentToolCallId ?? p.parentToolCallId;
|
|
74
75
|
if ((p.name === 'Bash' || p.name === 'Monitor') && !isError) {
|
|
75
76
|
const outputText = end?.output !== undefined ? flattenWireOutput(end.output) : undefined;
|
|
76
|
-
const reg = detectEngineBgShellDetach(p.name, p.rawInput, end?.structured, outputText) ??
|
|
77
|
-
detectEngineBgShellReceipt(p.name, p.rawInput, outputText, end?.structured);
|
|
77
|
+
const reg = detectEngineBgShellDetach(p.name, p.rawInput, end?.structured, outputText, p.id) ??
|
|
78
|
+
detectEngineBgShellReceipt(p.name, p.rawInput, outputText, end?.structured, p.id);
|
|
78
79
|
if (reg !== null) {
|
|
79
80
|
yield chrome({ kind: 'bgshell_register', laneProof: parentToolCallId === undefined ? mainLane() : { lane: 'subagent', parentToolCallId }, taskId: reg.taskId, registration: reg });
|
|
80
81
|
}
|
package/dist/adapt.js
CHANGED
|
@@ -8,6 +8,7 @@ import { createPanelTaskLedger } from './adapt/panelTasks.js';
|
|
|
8
8
|
import { createAdapterInstanceLedger } from './adapt/instanceLedger.js';
|
|
9
9
|
import { createTurnFlags } from './adapt/turnFlags.js';
|
|
10
10
|
import { ARMS } from './adapt/arms.js';
|
|
11
|
+
import { guardedRead, ownSnapshotTyped, readOwnDataNonEmptyString } from './ownKey.js';
|
|
11
12
|
export const ADAPTER_COVERAGE = {
|
|
12
13
|
frames: [
|
|
13
14
|
'assistant',
|
|
@@ -221,9 +222,14 @@ class WireToCcAdapterImpl {
|
|
|
221
222
|
const rawFrame = step.value;
|
|
222
223
|
if (ctx.signal?.aborted)
|
|
223
224
|
break;
|
|
224
|
-
|
|
225
|
+
let m = rawFrame;
|
|
225
226
|
if (m === null || typeof m !== 'object')
|
|
226
227
|
continue;
|
|
228
|
+
{
|
|
229
|
+
const noticeWord = guardedRead(() => readOwnDataNonEmptyString(m, 'type'));
|
|
230
|
+
if (noticeWord === 'task_notification' || noticeWord === 'workflow_complete')
|
|
231
|
+
m = ownSnapshotTyped(m) ?? {};
|
|
232
|
+
}
|
|
227
233
|
yield* flags.onFrameBeforeDispatch(m);
|
|
228
234
|
if (m.type !== 'stream_event')
|
|
229
235
|
yield* text.drainLive();
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { UiLanguage } from '../env/uiLanguage.js';
|
|
2
2
|
import type { ActiveRunBusySignal } from './runStream.js';
|
|
3
|
+
import type { RejectedSubmissionOrigin } from '../request/submissionIdentity.js';
|
|
3
4
|
import type { PlanReviewReopenTrigger } from '../hitl/planReviewWire.js';
|
|
5
|
+
import { type AskParkAutoReopenBlock } from '../hitl/askParkAutoReopenBlock.js';
|
|
4
6
|
import { atMostOnceFailureClass } from '../atMostOnce.js';
|
|
5
7
|
export declare const PLAN_REVIEW_GATE_KIND = "plan_review";
|
|
6
8
|
export type DurableDecideLeg = 'approval' | 'plan_review' | 'other_gate' | 'unreadable' | 'absent';
|
|
@@ -40,11 +42,15 @@ export type ReopenCardVerdict = {
|
|
|
40
42
|
dismissedByUser?: true;
|
|
41
43
|
_sema_noPresentationSurface?: true;
|
|
42
44
|
_sema_errorCode?: string;
|
|
45
|
+
_sema_reopenRefusal?: PlanReviewReopenRefusal;
|
|
46
|
+
_sema_policyBlocked?: AskParkAutoReopenBlock;
|
|
43
47
|
} | {
|
|
44
48
|
reopened: true;
|
|
45
49
|
firstSight: boolean;
|
|
46
50
|
presented?: boolean;
|
|
47
51
|
};
|
|
52
|
+
export declare const PLAN_REVIEW_REOPEN_REFUSALS: readonly ["invalid_call", "no_delivery_path", "not_presented", "gate_record_gone", "internal_error"];
|
|
53
|
+
export type PlanReviewReopenRefusal = (typeof PLAN_REVIEW_REOPEN_REFUSALS)[number];
|
|
48
54
|
export interface RunningChoiceRequest {
|
|
49
55
|
taskId: string;
|
|
50
56
|
status: string;
|
|
@@ -57,6 +63,11 @@ export interface StaleParkChoiceRequest {
|
|
|
57
63
|
status: string;
|
|
58
64
|
canCancel: boolean;
|
|
59
65
|
}
|
|
66
|
+
export interface InterruptedSettleWindow {
|
|
67
|
+
budgetMs?: number;
|
|
68
|
+
intervalMs?: number;
|
|
69
|
+
now?: () => number;
|
|
70
|
+
}
|
|
60
71
|
export interface ActiveRunSelfHealDeps {
|
|
61
72
|
hasPendingDecision?: () => boolean;
|
|
62
73
|
listOwnedPendingApprovals?: (opts?: {
|
|
@@ -65,7 +76,9 @@ export interface ActiveRunSelfHealDeps {
|
|
|
65
76
|
reopenPlanReview?: (taskId: string, opts?: {
|
|
66
77
|
trigger?: PlanReviewReopenTrigger;
|
|
67
78
|
}) => ReopenCardVerdict | Promise<ReopenCardVerdict>;
|
|
68
|
-
reopenAskPark?: (taskId: string
|
|
79
|
+
reopenAskPark?: (taskId: string, opts?: {
|
|
80
|
+
trigger?: PlanReviewReopenTrigger;
|
|
81
|
+
}) => Promise<ReopenCardVerdict>;
|
|
69
82
|
offerRunningChoice?: (req: RunningChoiceRequest) => Promise<'steer' | 'cancel' | 'wait' | 'attach'>;
|
|
70
83
|
canAttachRunning?: boolean;
|
|
71
84
|
offerStaleParkChoice?: (req: StaleParkChoiceRequest) => Promise<'cancel' | 'wait'>;
|
|
@@ -74,6 +87,8 @@ export interface ActiveRunSelfHealDeps {
|
|
|
74
87
|
cancelReleaseWaitMs?: number;
|
|
75
88
|
submissionOrigin?: RejectedSubmissionOrigin;
|
|
76
89
|
sessionId?: string;
|
|
90
|
+
wasRecentlyTerminatedByUs?: (taskId: string) => boolean;
|
|
91
|
+
interruptedSettle?: InterruptedSettleWindow;
|
|
77
92
|
}
|
|
78
93
|
export type SelfHealOutcome = {
|
|
79
94
|
kind: 'ask-reopened';
|
|
@@ -95,6 +110,7 @@ export type SelfHealOutcome = {
|
|
|
95
110
|
dismissedByUser?: true;
|
|
96
111
|
noPresentationSurface?: true;
|
|
97
112
|
errorCode?: string;
|
|
113
|
+
reopenRefusal?: PlanReviewReopenRefusal;
|
|
98
114
|
} | {
|
|
99
115
|
kind: 'not-parked';
|
|
100
116
|
taskId: string;
|
|
@@ -108,6 +124,14 @@ export type SelfHealOutcome = {
|
|
|
108
124
|
kind: 'running-settled';
|
|
109
125
|
taskId: string;
|
|
110
126
|
status: string;
|
|
127
|
+
} | {
|
|
128
|
+
kind: 'interrupted-settled';
|
|
129
|
+
taskId: string;
|
|
130
|
+
status: string;
|
|
131
|
+
} | {
|
|
132
|
+
kind: 'interrupted-still-finishing';
|
|
133
|
+
taskId: string;
|
|
134
|
+
waitedMs: number;
|
|
111
135
|
} | {
|
|
112
136
|
kind: 'state-unknown';
|
|
113
137
|
taskId: string | null;
|
|
@@ -120,6 +144,7 @@ export type SelfHealOutcome = {
|
|
|
120
144
|
pendingRowGone?: true;
|
|
121
145
|
noPresentationSurface?: true;
|
|
122
146
|
errorCode?: string;
|
|
147
|
+
policyBlocked?: AskParkAutoReopenBlock;
|
|
123
148
|
} | {
|
|
124
149
|
kind: 'ask-decided-without-card';
|
|
125
150
|
taskId: string;
|
|
@@ -140,6 +165,8 @@ export type SelfHealOutcome = {
|
|
|
140
165
|
taskId: string;
|
|
141
166
|
detail: string;
|
|
142
167
|
delivery: 'rejected' | 'unknown';
|
|
168
|
+
errorCode?: string;
|
|
169
|
+
runStatus?: string;
|
|
143
170
|
} | {
|
|
144
171
|
kind: 'running-attach';
|
|
145
172
|
taskId: string;
|
|
@@ -186,7 +213,7 @@ export type SelfHealOutcome = {
|
|
|
186
213
|
status: string;
|
|
187
214
|
alreadyOffered?: true;
|
|
188
215
|
};
|
|
189
|
-
export type RejectedSubmissionOrigin
|
|
216
|
+
export type { RejectedSubmissionOrigin };
|
|
190
217
|
export type SelfHealSubmissionDisposition = 'held-for-decision' | 'resending' | 'handed-off' | 'not-delivered';
|
|
191
218
|
export declare function selfHealSubmissionDisposition(outcome: SelfHealOutcome): SelfHealSubmissionDisposition;
|
|
192
219
|
export type SteerFollowIntent = {
|
|
@@ -229,6 +256,8 @@ export interface ActiveRunSelfHealCopy {
|
|
|
229
256
|
freshSession?: string;
|
|
230
257
|
keepSessionWayOut?: () => string | null;
|
|
231
258
|
engineDecidePath?: boolean;
|
|
259
|
+
endRun?: string;
|
|
260
|
+
wakeSession?: string | null;
|
|
232
261
|
rowFor?: (outcome: SelfHealOutcome, signal: ActiveRunBusySignal | null | undefined) => string | undefined;
|
|
233
262
|
headlessRowFor?: (signal: ActiveRunBusySignal) => string | undefined;
|
|
234
263
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { abortableSleep } from '../abortableSleep.js';
|
|
2
2
|
import { EN_MESSAGES } from '../i18n/messages.en.js';
|
|
3
3
|
import { msg, renderMessage } from '../i18n/translate.js';
|
|
4
|
+
import { ASK_PARK_AUTO_REOPEN_BLOCKS, askParkAutoReopenBlockedContent } from '../hitl/askParkAutoReopenBlock.js';
|
|
4
5
|
import { corruptStoredRowContent, corruptStoredRowWhere, effectiveWireErrorCode } from '../wireErrorTriage.js';
|
|
5
6
|
import { readThrownStatusSlot } from '../wireFailureShape.js';
|
|
6
7
|
import { steerBodyOf, UNOBSERVED_STEER_PRIORITY } from '../controlRouter.js';
|
|
@@ -8,6 +9,7 @@ import { atMostOnceFailureClass } from '../atMostOnce.js';
|
|
|
8
9
|
import { readSteerReceipt } from '../steerReceipt.js';
|
|
9
10
|
import { resumeAttachReplayDisclosure, runningAttachOffered } from '../hitl/resumeRunningCard.js';
|
|
10
11
|
import { isSdkRunParked, isSdkRunTerminal, SDK_RUN_LIVE_STATUSES } from '../terminalStatuses.js';
|
|
12
|
+
import { awaitInterruptedRunSettle, interruptedRunSettleRow } from '../terminationIntent.js';
|
|
11
13
|
import { SDK_APPROVAL_DECIDE_GATE_KINDS, SDK_PLAN_REVIEW_GATE_KINDS } from '../generated/sdkFactTables.js';
|
|
12
14
|
export const PLAN_REVIEW_GATE_KIND = 'plan_review';
|
|
13
15
|
const APPROVAL_LEG_GATE_KINDS = SDK_APPROVAL_DECIDE_GATE_KINDS;
|
|
@@ -44,6 +46,7 @@ export const PLAN_REVIEW_STATES = Object.freeze(['needs_review']);
|
|
|
44
46
|
export const ASK_PARK_STATES = Object.freeze(['suspended']);
|
|
45
47
|
export const RUNNING_STATES = Object.freeze(['running']);
|
|
46
48
|
export const CLAIM_HELD_STATES = SDK_RUN_LIVE_STATUSES;
|
|
49
|
+
export const PLAN_REVIEW_REOPEN_REFUSALS = Object.freeze(['invalid_call', 'no_delivery_path', 'not_presented', 'gate_record_gone', 'internal_error']);
|
|
47
50
|
export function selfHealSubmissionDisposition(outcome) {
|
|
48
51
|
switch (outcome.kind) {
|
|
49
52
|
case 'decision-pending':
|
|
@@ -59,6 +62,10 @@ export function selfHealSubmissionDisposition(outcome) {
|
|
|
59
62
|
return 'not-delivered';
|
|
60
63
|
case 'running-steered':
|
|
61
64
|
return 'handed-off';
|
|
65
|
+
case 'interrupted-settled':
|
|
66
|
+
return 'resending';
|
|
67
|
+
case 'interrupted-still-finishing':
|
|
68
|
+
return 'not-delivered';
|
|
62
69
|
case 'running-attach':
|
|
63
70
|
return 'not-delivered';
|
|
64
71
|
default:
|
|
@@ -135,6 +142,8 @@ const REOPEN_VERDICT_KEYS = [
|
|
|
135
142
|
'dismissedByUser',
|
|
136
143
|
'_sema_noPresentationSurface',
|
|
137
144
|
'_sema_errorCode',
|
|
145
|
+
'_sema_reopenRefusal',
|
|
146
|
+
'_sema_policyBlocked',
|
|
138
147
|
];
|
|
139
148
|
function snapshotReopenVerdict(raw) {
|
|
140
149
|
if (raw === null || raw === undefined)
|
|
@@ -237,6 +246,28 @@ function reopenErrorCodeOf(verdict) {
|
|
|
237
246
|
return undefined;
|
|
238
247
|
}
|
|
239
248
|
}
|
|
249
|
+
function reopenPolicyBlockedOf(verdict) {
|
|
250
|
+
try {
|
|
251
|
+
if (verdict.reopened !== false)
|
|
252
|
+
return undefined;
|
|
253
|
+
const v = verdict._sema_policyBlocked;
|
|
254
|
+
return typeof v === 'string' && ASK_PARK_AUTO_REOPEN_BLOCKS.includes(v) ? v : undefined;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function reopenRefusalOf(verdict) {
|
|
261
|
+
try {
|
|
262
|
+
if (verdict.reopened !== false)
|
|
263
|
+
return undefined;
|
|
264
|
+
const v = verdict._sema_reopenRefusal;
|
|
265
|
+
return typeof v === 'string' && PLAN_REVIEW_REOPEN_REFUSALS.includes(v) ? v : undefined;
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
240
271
|
function failureWireCode(e) {
|
|
241
272
|
try {
|
|
242
273
|
return effectiveWireErrorCode(e);
|
|
@@ -414,7 +445,58 @@ async function readOwnedPendingCount(read, deps) {
|
|
|
414
445
|
recheckCtl.abort(new Error('owned-pending recheck settled'));
|
|
415
446
|
}
|
|
416
447
|
}
|
|
448
|
+
async function interruptedShortCircuit(signal, runs, deps) {
|
|
449
|
+
try {
|
|
450
|
+
return await interruptedShortCircuitUnguarded(signal, runs, deps);
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
async function interruptedShortCircuitUnguarded(signal, runs, deps) {
|
|
457
|
+
const taskId = signal.activeTaskId;
|
|
458
|
+
if (typeof taskId !== 'string' || taskId === '')
|
|
459
|
+
return null;
|
|
460
|
+
const callerAborted = () => deps?.signal?.aborted === true;
|
|
461
|
+
if (callerAborted())
|
|
462
|
+
return null;
|
|
463
|
+
const port = deps?.wasRecentlyTerminatedByUs;
|
|
464
|
+
if (deps === undefined || typeof port !== 'function')
|
|
465
|
+
return null;
|
|
466
|
+
let ours = false;
|
|
467
|
+
try {
|
|
468
|
+
ours = port.call(deps, taskId) === true;
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
ours = false;
|
|
472
|
+
}
|
|
473
|
+
if (!ours)
|
|
474
|
+
return null;
|
|
475
|
+
const verbs = runs;
|
|
476
|
+
if (verbs === undefined || typeof verbs.get !== 'function')
|
|
477
|
+
return null;
|
|
478
|
+
const callerSignal = deps.signal;
|
|
479
|
+
const settleDeps = {
|
|
480
|
+
getRun: async (id, o) => {
|
|
481
|
+
const row = await verbs.get(id, { ...sessionOpts(deps), ...(o?.signal !== undefined ? { signal: o.signal } : {}) });
|
|
482
|
+
return row === null ? null : { status: readStatusGuarded(row) };
|
|
483
|
+
},
|
|
484
|
+
...(callerSignal !== undefined ? { signal: callerSignal } : {}),
|
|
485
|
+
...(deps.interruptedSettle ?? {}),
|
|
486
|
+
};
|
|
487
|
+
const verdict = await awaitInterruptedRunSettle(taskId, settleDeps);
|
|
488
|
+
if (callerAborted())
|
|
489
|
+
return null;
|
|
490
|
+
if (verdict.kind === 'settled')
|
|
491
|
+
return { kind: 'interrupted-settled', taskId, status: verdict.status };
|
|
492
|
+
if (verdict.kind === 'still-running')
|
|
493
|
+
return { kind: 'interrupted-still-finishing', taskId, waitedMs: verdict.waitedMs };
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
417
496
|
export async function attemptActiveRunSelfHeal(signal, runs, deps) {
|
|
497
|
+
const interrupted = await interruptedShortCircuit(signal, runs, deps);
|
|
498
|
+
if (interrupted !== null)
|
|
499
|
+
return interrupted;
|
|
418
500
|
let pending = false;
|
|
419
501
|
try {
|
|
420
502
|
pending = deps?.hasPendingDecision?.() === true;
|
|
@@ -490,7 +572,8 @@ async function planVerdict(taskId, deps) {
|
|
|
490
572
|
}
|
|
491
573
|
async function askVerdict(taskId, deps) {
|
|
492
574
|
try {
|
|
493
|
-
|
|
575
|
+
const trigger = planReviewReopenTriggerFor(deps?.submissionOrigin);
|
|
576
|
+
return snapshotReopenVerdict(await (trigger === undefined ? deps?.reopenAskPark?.(taskId) : deps?.reopenAskPark?.(taskId, { trigger })));
|
|
494
577
|
}
|
|
495
578
|
catch (e) {
|
|
496
579
|
if (deps?.signal?.aborted === true)
|
|
@@ -506,6 +589,7 @@ async function planReviewArm(taskId, signal, deps) {
|
|
|
506
589
|
const dismissed = reopenRefusedForUserDismissal(verdict);
|
|
507
590
|
const noView = reopenRefusedForNoPresentationSurface(verdict);
|
|
508
591
|
const errorCode = inFlight || dismissed || noView ? undefined : reopenErrorCodeOf(verdict);
|
|
592
|
+
const reopenRefusal = inFlight || dismissed || noView ? undefined : reopenRefusalOf(verdict);
|
|
509
593
|
return {
|
|
510
594
|
kind: 'plan-review-reopen-failed',
|
|
511
595
|
taskId,
|
|
@@ -515,6 +599,7 @@ async function planReviewArm(taskId, signal, deps) {
|
|
|
515
599
|
...(dismissed ? { dismissedByUser: true } : {}),
|
|
516
600
|
...(noView ? { noPresentationSurface: true } : {}),
|
|
517
601
|
...(errorCode !== undefined ? { errorCode } : {}),
|
|
602
|
+
...(reopenRefusal !== undefined ? { reopenRefusal } : {}),
|
|
518
603
|
};
|
|
519
604
|
}
|
|
520
605
|
async function askParkArm(taskId, signal, runs, deps) {
|
|
@@ -550,7 +635,8 @@ async function askParkArm(taskId, signal, runs, deps) {
|
|
|
550
635
|
return staleParkArm(taskId, signal, runs, deps);
|
|
551
636
|
}
|
|
552
637
|
const noView = reopenRefusedForNoPresentationSurface(verdict);
|
|
553
|
-
const
|
|
638
|
+
const policyBlocked = inFlight || noView ? undefined : reopenPolicyBlockedOf(verdict);
|
|
639
|
+
const errorCode = inFlight || noView || reopenRefusedForUserDismissal(verdict) || policyBlocked !== undefined ? undefined : reopenErrorCodeOf(verdict);
|
|
554
640
|
return {
|
|
555
641
|
kind: 'ask-reopen-failed',
|
|
556
642
|
taskId,
|
|
@@ -559,6 +645,7 @@ async function askParkArm(taskId, signal, runs, deps) {
|
|
|
559
645
|
...(verdict.pendingRowGone === true ? { pendingRowGone: true } : {}),
|
|
560
646
|
...(noView ? { noPresentationSurface: true } : {}),
|
|
561
647
|
...(errorCode !== undefined ? { errorCode } : {}),
|
|
648
|
+
...(policyBlocked !== undefined ? { policyBlocked } : {}),
|
|
562
649
|
};
|
|
563
650
|
}
|
|
564
651
|
async function probeRunStatusOnce(taskId, durable, durableGet, deps) {
|
|
@@ -790,7 +877,22 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
|
|
|
790
877
|
return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: null };
|
|
791
878
|
}
|
|
792
879
|
catch (e) {
|
|
793
|
-
|
|
880
|
+
const delivery = atMostOnceFailureClass(e);
|
|
881
|
+
const errorCode = failureWireCode(e);
|
|
882
|
+
let runStatus;
|
|
883
|
+
if (delivery === 'rejected' && errorCode === STEER_NOT_RUNNING_CODE && typeof runs.get === 'function' && !probeCallerAborted()) {
|
|
884
|
+
const probe = await probeRunStatusOnce(taskId, runs, runs.get, deps);
|
|
885
|
+
if (probe.status !== null)
|
|
886
|
+
runStatus = probe.status;
|
|
887
|
+
}
|
|
888
|
+
return {
|
|
889
|
+
kind: 'running-steer-failed',
|
|
890
|
+
taskId,
|
|
891
|
+
detail: describeFailure(e),
|
|
892
|
+
delivery,
|
|
893
|
+
...(errorCode !== undefined ? { errorCode } : {}),
|
|
894
|
+
...(runStatus !== undefined ? { runStatus } : {}),
|
|
895
|
+
};
|
|
794
896
|
}
|
|
795
897
|
}
|
|
796
898
|
if (choice === 'cancel' && canCancel && runs?.cancel !== undefined && runs.get !== undefined) {
|
|
@@ -839,6 +941,37 @@ const say = (lang, key, params) => renderMessage(msg(key, params), lang);
|
|
|
839
941
|
function gateKindPhrase(kind, lang) {
|
|
840
942
|
return kind ? say(lang, 'session.selfHeal.gate.kind', { kind }) : say(lang, 'session.selfHeal.gate.generic');
|
|
841
943
|
}
|
|
944
|
+
function endRunClause(copy, taskId, lang, face = 'headless') {
|
|
945
|
+
let host;
|
|
946
|
+
try {
|
|
947
|
+
host = copy?.endRun;
|
|
948
|
+
}
|
|
949
|
+
catch {
|
|
950
|
+
host = undefined;
|
|
951
|
+
}
|
|
952
|
+
const phrase = typeof host === 'string' ? host.trim().replace(/[\s.;。;!!??]+$/u, '') : '';
|
|
953
|
+
if (/[\p{L}\p{N}]/u.test(phrase))
|
|
954
|
+
return phrase;
|
|
955
|
+
if (face === 'interactive') {
|
|
956
|
+
return taskId ? say(lang, 'session.selfHeal.endRun.engineInteractive', { taskId }) : say(lang, 'session.selfHeal.endRun.engineInteractive.noId');
|
|
957
|
+
}
|
|
958
|
+
return say(lang, 'session.selfHeal.endRun.engine', { cancelPath: `POST /v1/runs/${taskId ? taskId : '<id>'}/cancel` });
|
|
959
|
+
}
|
|
960
|
+
function wakeSessionClause(copy, lang) {
|
|
961
|
+
let host;
|
|
962
|
+
try {
|
|
963
|
+
host = copy?.wakeSession;
|
|
964
|
+
}
|
|
965
|
+
catch {
|
|
966
|
+
host = undefined;
|
|
967
|
+
}
|
|
968
|
+
if (host === null)
|
|
969
|
+
return '';
|
|
970
|
+
if (typeof host === 'string' && host.trim().length > 0)
|
|
971
|
+
return say(lang, 'session.selfHeal.wakeOn.host', { where: host.trim() });
|
|
972
|
+
return say(lang, 'session.selfHeal.wakeOn.engine');
|
|
973
|
+
}
|
|
974
|
+
const STEER_NOT_RUNNING_CODE = 'steering.not_running';
|
|
842
975
|
function decidePathClause(signal, lang) {
|
|
843
976
|
const decidePath = signal?.pendingGate?.decidePath;
|
|
844
977
|
if (!decidePath)
|
|
@@ -869,7 +1002,7 @@ export function activeRunSelfHealRow(outcome, signal, copy, origin, follow, lang
|
|
|
869
1002
|
(outcome.kind !== 'plan-review-reopen-failed' || outcome.dismissedByUser !== true)
|
|
870
1003
|
? keepSessionWayOutOf(copy)
|
|
871
1004
|
: null;
|
|
872
|
-
const base = activeRunSelfHealBaseRow(outcome, copy?.wayOut ?? say(lang, 'session.selfHeal.wayOut.interactive'), following, keep, engineDecide, lang);
|
|
1005
|
+
const base = activeRunSelfHealBaseRow(outcome, copy?.wayOut ?? say(lang, 'session.selfHeal.wayOut.interactive'), following, keep, engineDecide, lang, copy);
|
|
873
1006
|
const viaEngine = engineDecide ? decidePathClause(signal, lang) : '';
|
|
874
1007
|
switch (outcome.kind) {
|
|
875
1008
|
case 'not-parked':
|
|
@@ -893,6 +1026,9 @@ function injectedSubmissionRow(outcome, following = false, lang) {
|
|
|
893
1026
|
if ((outcome.kind === 'ask-reopen-failed' || outcome.kind === 'plan-review-reopen-failed') && outcome.decisionInFlight === true) {
|
|
894
1027
|
return say(lang, 'session.selfHeal.injected.decisionInFlight', { lead, id });
|
|
895
1028
|
}
|
|
1029
|
+
if (outcome.kind === 'ask-reopen-failed' && outcome.policyBlocked !== undefined) {
|
|
1030
|
+
return askParkAutoReopenBlockedContent(outcome.policyBlocked, outcome.taskId, 'interactive', lang);
|
|
1031
|
+
}
|
|
896
1032
|
if (outcome.kind === 'plan-review-reopen-failed' && outcome.dismissedByUser === true) {
|
|
897
1033
|
return say(lang, 'session.selfHeal.injected.dismissedPlan', { lead, id, closed: msg('session.selfHeal.userClosedCardNotPutBack') });
|
|
898
1034
|
}
|
|
@@ -917,6 +1053,8 @@ function injectedSubmissionRow(outcome, following = false, lang) {
|
|
|
917
1053
|
? say(lang, 'session.selfHeal.injected.unknownDeliveryFollowing', { unknown })
|
|
918
1054
|
: say(lang, 'session.selfHeal.injected.unknownDeliveryWatch', { unknown });
|
|
919
1055
|
}
|
|
1056
|
+
if (outcome.kind === 'interrupted-still-finishing')
|
|
1057
|
+
return say(lang, 'session.selfHeal.injected.interruptedFinishing', { lead, id });
|
|
920
1058
|
switch (selfHealSubmissionDisposition(outcome)) {
|
|
921
1059
|
case 'held-for-decision':
|
|
922
1060
|
return say(lang, 'session.selfHeal.injected.heldForDecision', { lead, id });
|
|
@@ -953,7 +1091,7 @@ function keepSessionWayOutOf(copy) {
|
|
|
953
1091
|
return null;
|
|
954
1092
|
}
|
|
955
1093
|
}
|
|
956
|
-
function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessionWayOut = null, engineDecide = true, lang) {
|
|
1094
|
+
function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessionWayOut = null, engineDecide = true, lang, copy) {
|
|
957
1095
|
switch (outcome.kind) {
|
|
958
1096
|
case 'decision-pending':
|
|
959
1097
|
return say(lang, 'session.selfHeal.row.decisionPending', { handle: outcome.taskId ? msg('session.selfHeal.handle.run', { taskId: outcome.taskId }) : '' });
|
|
@@ -977,6 +1115,8 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
|
|
|
977
1115
|
case 'ask-reopen-failed': {
|
|
978
1116
|
if (outcome.decisionInFlight === true)
|
|
979
1117
|
return decisionInFlightRow('ask', outcome.taskId, lang);
|
|
1118
|
+
if (outcome.policyBlocked !== undefined)
|
|
1119
|
+
return askParkAutoReopenBlockedContent(outcome.policyBlocked, outcome.taskId, 'interactive', lang);
|
|
980
1120
|
const viaEngine = engineDecide && outcome.decidePath ? msg('session.selfHeal.viaEngine', { decidePath: outcome.decidePath }) : '';
|
|
981
1121
|
const noView = outcome.noPresentationSurface === true ? msg('session.selfHeal.noCardView.afterColon') : '';
|
|
982
1122
|
return keepSessionWayOut !== null
|
|
@@ -1021,7 +1161,7 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
|
|
|
1021
1161
|
return say(lang, 'session.selfHeal.row.steered.queued', { taskId, parked, next, textOnly });
|
|
1022
1162
|
}
|
|
1023
1163
|
if (outcome.delivery === 'parked_for_wake') {
|
|
1024
|
-
return say(lang, 'session.selfHeal.row.steered.parkedForWake', { taskId, textOnly });
|
|
1164
|
+
return say(lang, 'session.selfHeal.row.steered.parkedForWake', { taskId, textOnly, wakeOn: wakeSessionClause(copy, lang) });
|
|
1025
1165
|
}
|
|
1026
1166
|
return say(lang, 'session.selfHeal.row.steered.unknown', {
|
|
1027
1167
|
taskId,
|
|
@@ -1031,6 +1171,9 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
|
|
|
1031
1171
|
});
|
|
1032
1172
|
}
|
|
1033
1173
|
case 'running-steer-failed':
|
|
1174
|
+
if (outcome.delivery === 'rejected' && outcome.errorCode === STEER_NOT_RUNNING_CODE && outcome.runStatus !== undefined && isSdkRunTerminal(outcome.runStatus)) {
|
|
1175
|
+
return say(lang, 'session.selfHeal.row.steerFailed.runEnded', { taskId: outcome.taskId, status: outcome.runStatus });
|
|
1176
|
+
}
|
|
1034
1177
|
return outcome.delivery === 'rejected'
|
|
1035
1178
|
? say(lang, 'session.selfHeal.row.steerFailed.rejected', { taskId: outcome.taskId, detail: outcome.detail })
|
|
1036
1179
|
: say(lang, 'session.selfHeal.row.steerFailed.unknown', { taskId: outcome.taskId, detail: outcome.detail });
|
|
@@ -1078,15 +1221,21 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
|
|
|
1078
1221
|
return say(lang, 'session.selfHeal.row.cancelFailed.rejected', { taskId: outcome.taskId, detail: outcome.detail, wayOut });
|
|
1079
1222
|
case 'stale-park-wait':
|
|
1080
1223
|
return outcome.alreadyOffered === true
|
|
1081
|
-
? say(lang, 'session.selfHeal.row.stale.wait.offered', { taskId: outcome.taskId, status: outcome.status, wayOut })
|
|
1082
|
-
: say(lang, 'session.selfHeal.row.stale.wait.first', { taskId: outcome.taskId, status: outcome.status, wayOut });
|
|
1224
|
+
? say(lang, 'session.selfHeal.row.stale.wait.offered', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') })
|
|
1225
|
+
: say(lang, 'session.selfHeal.row.stale.wait.first', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') });
|
|
1083
1226
|
case 'running-not-found':
|
|
1084
1227
|
return say(lang, 'session.selfHeal.row.runNotFound', { taskId: outcome.taskId, wayOut });
|
|
1228
|
+
case 'interrupted-settled':
|
|
1229
|
+
return interruptedRunSettleRow(outcome.taskId, { kind: 'settled', status: outcome.status }, lang) ?? '';
|
|
1230
|
+
case 'interrupted-still-finishing': {
|
|
1231
|
+
const waited = `${String(Math.max(1, Math.round(outcome.waitedMs / 1000)))}s`;
|
|
1232
|
+
return say(lang, 'session.selfHeal.row.interrupted.stillFinishing', { taskId: outcome.taskId, waited });
|
|
1233
|
+
}
|
|
1085
1234
|
case 'running-settled':
|
|
1086
1235
|
return say(lang, 'session.selfHeal.row.runSettled', { taskId: outcome.taskId, status: outcome.status, wayOut });
|
|
1087
1236
|
case 'not-parked':
|
|
1088
1237
|
if (outcome.alreadyOffered === true) {
|
|
1089
|
-
return say(lang, 'session.selfHeal.row.notParked.offered', { taskId: outcome.taskId, status: outcome.status, wayOut });
|
|
1238
|
+
return say(lang, 'session.selfHeal.row.notParked.offered', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') });
|
|
1090
1239
|
}
|
|
1091
1240
|
const parkedOn = outcome.pendingGateKind !== undefined
|
|
1092
1241
|
? gateKindPhrase(outcome.pendingGateKind, lang)
|
|
@@ -1111,7 +1260,7 @@ export function activeRunBusyHeadlessRow(signal, copy, lang) {
|
|
|
1111
1260
|
return override;
|
|
1112
1261
|
const activeTaskId = signal.activeTaskId;
|
|
1113
1262
|
const handle = activeTaskId ? msg('session.selfHeal.handle.run', { taskId: activeTaskId }) : '';
|
|
1114
|
-
const
|
|
1263
|
+
const endRun = endRunClause(copy, activeTaskId, lang);
|
|
1115
1264
|
const status = signal.activeTaskStatus;
|
|
1116
1265
|
const decidePath = signal.pendingGate?.decidePath ?? null;
|
|
1117
1266
|
const hostFresh = copy?.freshSession ?? undefined;
|
|
@@ -1122,13 +1271,13 @@ export function activeRunBusyHeadlessRow(signal, copy, lang) {
|
|
|
1122
1271
|
status: status ? msg('session.selfHeal.headless.status', { status }) : '',
|
|
1123
1272
|
gate: gateKindPhrase(signal.pendingGate?.kind, lang),
|
|
1124
1273
|
decidePath,
|
|
1125
|
-
|
|
1274
|
+
endRun,
|
|
1126
1275
|
freshSession,
|
|
1127
1276
|
governance: governanceOriginClause(signal, lang),
|
|
1128
1277
|
});
|
|
1129
1278
|
}
|
|
1130
1279
|
if (status)
|
|
1131
|
-
return say(lang, 'session.selfHeal.headless.statusOnly', { handle, status,
|
|
1280
|
+
return say(lang, 'session.selfHeal.headless.statusOnly', { handle, status, endRun, freshSession });
|
|
1132
1281
|
const startOver = hostFresh !== undefined ? `${hostFresh.charAt(0).toUpperCase()}${hostFresh.slice(1)}` : say(lang, 'session.selfHeal.freshSession.defaultCapitalized');
|
|
1133
|
-
return say(lang, 'session.selfHeal.headless.neverReleased', { handle, startOver,
|
|
1282
|
+
return say(lang, 'session.selfHeal.headless.neverReleased', { handle, startOver, endRun });
|
|
1134
1283
|
}
|
|
@@ -2,7 +2,7 @@ import type { AgentEvent, CheckpointGate, TaskResult } from '@sema-agent/sdk';
|
|
|
2
2
|
import { type WiringManifestView } from './wiringManifestView.js';
|
|
3
3
|
import { type SDKMessage, type EmitContext, type ModelUsage } from '../types.js';
|
|
4
4
|
import { type McpLivenessView } from '../../mcpLiveness.js';
|
|
5
|
-
import { type ContextUsageSectionRow } from '../../ownKey.js';
|
|
5
|
+
import { type ContextUsageSectionRow, type PromptIdentityLayersRow, type PromptManifestIdentityRow, type PromptManifestSectionRow } from '../../ownKey.js';
|
|
6
6
|
export declare const INTERNAL_SDK_ARM_TYPES: ReadonlySet<string>;
|
|
7
7
|
export type EventProjectionNoneReason = 'usage_only' | 'terminal_delegated' | 'hitl_out_of_slice' | 'not_in_slice' | 'empty_payload';
|
|
8
8
|
export type EventProjectionDropReason = 'malformed' | 'unknown_arm' | 'unsupported_arm';
|
|
@@ -67,12 +67,31 @@ export interface WiringManifestLspSeamView {
|
|
|
67
67
|
mounted: boolean;
|
|
68
68
|
lane?: string;
|
|
69
69
|
}
|
|
70
|
-
export
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
slot?: string;
|
|
70
|
+
export interface WiringManifestModSkipView {
|
|
71
|
+
readonly registration: string;
|
|
72
|
+
readonly cause: string;
|
|
73
|
+
readonly reason: string;
|
|
75
74
|
}
|
|
75
|
+
export interface WiringManifestModMountedView {
|
|
76
|
+
readonly name: string;
|
|
77
|
+
readonly seat: string;
|
|
78
|
+
readonly tier: string;
|
|
79
|
+
readonly events: readonly string[];
|
|
80
|
+
readonly observe?: readonly string[];
|
|
81
|
+
readonly skipped?: readonly WiringManifestModSkipView[];
|
|
82
|
+
}
|
|
83
|
+
export interface WiringManifestModRefusedView {
|
|
84
|
+
readonly name: string;
|
|
85
|
+
readonly seat: string;
|
|
86
|
+
readonly tier: string;
|
|
87
|
+
readonly refusedBy: string;
|
|
88
|
+
readonly reason: string;
|
|
89
|
+
}
|
|
90
|
+
export type WiringManifestModView = WiringManifestModMountedView | WiringManifestModRefusedView;
|
|
91
|
+
export type ContextUsageSectionView = ContextUsageSectionRow;
|
|
92
|
+
export type PromptManifestSectionView = PromptManifestSectionRow;
|
|
93
|
+
export type PromptManifestIdentityView = PromptManifestIdentityRow;
|
|
94
|
+
export type PromptIdentityLayersView = PromptIdentityLayersRow;
|
|
76
95
|
export interface PromptManifestBlockView {
|
|
77
96
|
id: string;
|
|
78
97
|
chars: number;
|