@sema-agent/client-core 0.77.1 → 0.77.2
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 +13 -1
- package/README.md +5 -4
- package/dist/abortableSleep.d.ts +0 -28
- package/dist/abortableSleep.js +0 -28
- package/dist/adapt/arms.d.ts +0 -46
- package/dist/adapt/arms.js +9 -544
- package/dist/adapt/ids.d.ts +0 -58
- package/dist/adapt/ids.js +0 -63
- package/dist/adapt/instanceLedger.d.ts +0 -25
- package/dist/adapt/instanceLedger.js +0 -20
- package/dist/adapt/panelTasks.d.ts +0 -69
- package/dist/adapt/panelTasks.js +0 -95
- package/dist/adapt/textSegmentAuthority.d.ts +1 -137
- package/dist/adapt/textSegmentAuthority.js +0 -54
- package/dist/adapt/textStream.d.ts +0 -252
- package/dist/adapt/textStream.js +2 -281
- package/dist/adapt/toolCards.d.ts +0 -46
- package/dist/adapt/toolCards.js +0 -23
- package/dist/adapt/turnFlags.d.ts +0 -54
- package/dist/adapt/turnFlags.js +1 -17
- package/dist/adapt/wireShapes.d.ts +0 -92
- package/dist/adapt/wireShapes.js +0 -83
- package/dist/adapt.d.ts +0 -55
- package/dist/adapt.js +1 -120
- package/dist/adapter/activeRunSelfHeal.d.ts +22 -515
- package/dist/adapter/activeRunSelfHeal.js +10 -625
- package/dist/adapter/downstream/eventToSdkMessage.d.ts +2 -305
- package/dist/adapter/downstream/eventToSdkMessage.js +2 -867
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +2 -314
- package/dist/adapter/downstream/terminalToSdkResult.js +13 -560
- package/dist/adapter/downstream/turnUsageToModelUsage.d.ts +0 -95
- package/dist/adapter/downstream/turnUsageToModelUsage.js +2 -31
- package/dist/adapter/runStream.d.ts +0 -206
- package/dist/adapter/runStream.js +6 -596
- package/dist/adapter/types.d.ts +0 -111
- package/dist/adapter/types.js +0 -29
- package/dist/agentSession/backgroundView.d.ts +0 -106
- package/dist/agentSession/backgroundView.js +3 -49
- package/dist/agentSession/contract.d.ts +0 -98
- package/dist/agentSession/contract.js +0 -12
- package/dist/agentsWireCaps.d.ts +0 -72
- package/dist/agentsWireCaps.js +4 -72
- package/dist/approvalsStreamLiveCapability.d.ts +0 -25
- package/dist/approvalsStreamLiveCapability.js +0 -31
- package/dist/argvFlagValue.d.ts +0 -33
- package/dist/argvFlagValue.js +3 -35
- package/dist/attachmentsWireCaps.d.ts +0 -127
- package/dist/attachmentsWireCaps.js +0 -144
- package/dist/autoModeUnavailable.d.ts +0 -120
- package/dist/autoModeUnavailable.js +0 -144
- package/dist/classifierStatus.d.ts +0 -72
- package/dist/classifierStatus.js +0 -167
- package/dist/classifierVerdictWire.d.ts +0 -54
- package/dist/classifierVerdictWire.js +0 -133
- package/dist/clientContextWireCaps.d.ts +0 -37
- package/dist/clientContextWireCaps.js +0 -36
- package/dist/clientSlice.d.ts +0 -63
- package/dist/clientSlice.js +0 -45
- package/dist/cloudConfigWireCaps.d.ts +0 -86
- package/dist/cloudConfigWireCaps.js +2 -65
- package/dist/compensations.d.ts +0 -52
- package/dist/compensations.js +2 -63
- package/dist/controlRouter.d.ts +2 -208
- package/dist/controlRouter.js +1 -129
- package/dist/coreValuePorts.d.ts +0 -84
- package/dist/coreValuePorts.js +0 -29
- package/dist/decideReceipt.d.ts +0 -110
- package/dist/decideReceipt.js +0 -84
- package/dist/detachWire.d.ts +0 -130
- package/dist/detachWire.js +1 -130
- package/dist/deviceExecutorManagementCapability.d.ts +2 -35
- package/dist/deviceExecutorManagementCapability.js +1 -37
- package/dist/diagnostics.d.ts +0 -8
- package/dist/diagnostics.js +0 -8
- package/dist/diff/patch.d.ts +0 -17
- package/dist/diff/patch.js +0 -19
- package/dist/effectiveFacts.d.ts +0 -40
- package/dist/effectiveFacts.js +0 -22
- package/dist/effortWire.d.ts +0 -11
- package/dist/effortWire.js +0 -12
- package/dist/engineAgentPanelStore.d.ts +0 -169
- package/dist/engineAgentPanelStore.js +13 -293
- package/dist/engineCapReader.d.ts +0 -62
- package/dist/engineCapReader.js +1 -43
- package/dist/engineCapsCache.d.ts +0 -177
- package/dist/engineCapsCache.js +0 -199
- package/dist/engineCapsGenerationGuard.d.ts +0 -2
- package/dist/engineCapsGenerationGuard.js +0 -11
- package/dist/engineErrorCodes.d.ts +1 -316
- package/dist/engineErrorCodes.js +0 -427
- package/dist/engineHttpTools.d.ts +0 -29
- package/dist/engineHttpTools.js +0 -29
- package/dist/engineIdentity.d.ts +0 -83
- package/dist/engineIdentity.js +0 -88
- package/dist/engineInlineTaskStats.d.ts +0 -57
- package/dist/engineInlineTaskStats.js +1 -42
- package/dist/engineNoticeCodes.d.ts +0 -190
- package/dist/engineNoticeCodes.js +0 -182
- package/dist/engineSessionParam.d.ts +0 -30
- package/dist/engineSessionParam.js +0 -52
- package/dist/engineToolLabelStore.d.ts +0 -29
- package/dist/engineToolLabelStore.js +0 -31
- package/dist/engineWireSdk.d.ts +0 -90
- package/dist/engineWireSdk.js +0 -74
- package/dist/engineWireTarget.d.ts +0 -14
- package/dist/engineWireTarget.js +0 -39
- package/dist/env/localeGeo.d.ts +0 -12
- package/dist/env/localeGeo.js +2 -77
- package/dist/env/localeTag.d.ts +0 -34
- package/dist/env/localeTag.js +0 -32
- package/dist/env/uiLanguage.d.ts +0 -13
- package/dist/env/uiLanguage.js +0 -25
- package/dist/envFlag.d.ts +0 -37
- package/dist/envFlag.js +0 -40
- package/dist/executionLaneCapability.d.ts +0 -48
- package/dist/executionLaneCapability.js +0 -54
- package/dist/finalVerifyWire.d.ts +0 -67
- package/dist/finalVerifyWire.js +3 -43
- package/dist/fleet/fleetLedger.d.ts +0 -308
- package/dist/fleet/fleetLedger.js +10 -429
- package/dist/fleet/fleetProjection.d.ts +0 -240
- package/dist/fleet/fleetProjection.js +0 -189
- package/dist/fleet/fleetRowAgentType.d.ts +0 -6
- package/dist/fleet/fleetRowAgentType.js +1 -32
- package/dist/fleet/workflowSizeWarning.d.ts +0 -47
- package/dist/fleet/workflowSizeWarning.js +1 -46
- package/dist/fleetAgentPanelProjection.d.ts +0 -48
- package/dist/fleetAgentPanelProjection.js +8 -173
- package/dist/fleetTaskDesc.d.ts +0 -39
- package/dist/fleetTaskDesc.js +0 -69
- package/dist/forkWireCaps.d.ts +0 -23
- package/dist/forkWireCaps.js +1 -24
- package/dist/gateOutcome.d.ts +0 -140
- package/dist/gateOutcome.js +0 -85
- package/dist/gateVocabulary.d.ts +0 -114
- package/dist/gateVocabulary.js +1 -161
- package/dist/goalStopHook.d.ts +0 -127
- package/dist/goalStopHook.js +0 -178
- package/dist/headlessPermissionModeWire.d.ts +0 -76
- package/dist/headlessPermissionModeWire.js +1 -155
- package/dist/headlessReconnectWire.d.ts +0 -84
- package/dist/headlessReconnectWire.js +13 -67
- package/dist/hitl/approvalDecisionNoteAudit.d.ts +0 -49
- package/dist/hitl/approvalDecisionNoteAudit.js +0 -56
- package/dist/hitl/approvalOutcomeNote.d.ts +0 -2
- package/dist/hitl/approvalOutcomeNote.js +0 -20
- package/dist/hitl/approvalResolution.d.ts +0 -113
- package/dist/hitl/approvalResolution.js +0 -66
- package/dist/hitl/approvalsFeed.d.ts +0 -183
- package/dist/hitl/approvalsFeed.js +12 -243
- package/dist/hitl/armedGateRegistry.d.ts +0 -55
- package/dist/hitl/armedGateRegistry.js +0 -146
- package/dist/hitl/askGateWire.d.ts +0 -86
- package/dist/hitl/askGateWire.js +1 -95
- package/dist/hitl/askParkRowRouting.d.ts +0 -123
- package/dist/hitl/askParkRowRouting.js +1 -89
- package/dist/hitl/crashConverged.d.ts +0 -148
- package/dist/hitl/crashConverged.js +0 -214
- package/dist/hitl/editedRuleTextPrecheck.d.ts +0 -109
- package/dist/hitl/editedRuleTextPrecheck.js +0 -71
- package/dist/hitl/frameRouter.d.ts +0 -134
- package/dist/hitl/frameRouter.js +6 -378
- package/dist/hitl/gateIdentity.d.ts +0 -39
- package/dist/hitl/gateIdentity.js +0 -41
- package/dist/hitl/gateLedger.d.ts +0 -267
- package/dist/hitl/gateLedger.js +0 -121
- package/dist/hitl/hitlBridge.d.ts +7 -431
- package/dist/hitl/hitlBridge.js +7 -476
- package/dist/hitl/hitlHostSurface.d.ts +0 -150
- package/dist/hitl/hitlHostSurface.js +0 -169
- package/dist/hitl/livePendingAsk.d.ts +0 -91
- package/dist/hitl/livePendingAsk.js +0 -74
- package/dist/hitl/localAllowRule.d.ts +0 -62
- package/dist/hitl/localAllowRule.js +1 -33
- package/dist/hitl/parkOwnership.d.ts +0 -56
- package/dist/hitl/parkOwnership.js +0 -22
- package/dist/hitl/parkResolver.d.ts +3 -88
- package/dist/hitl/parkResolver.js +8 -349
- package/dist/hitl/parkRowBirthWait.d.ts +2 -26
- package/dist/hitl/parkRowBirthWait.js +3 -93
- package/dist/hitl/persistedRulesWire.d.ts +13 -358
- package/dist/hitl/persistedRulesWire.js +0 -310
- package/dist/hitl/planReviewWire.d.ts +4 -176
- package/dist/hitl/planReviewWire.js +9 -312
- package/dist/hitl/resumeRunningCard.d.ts +0 -105
- package/dist/hitl/resumeRunningCard.js +0 -105
- package/dist/hitl/sessionPolicyWire.d.ts +11 -191
- package/dist/hitl/sessionPolicyWire.js +0 -149
- package/dist/hitl/suspendedReopen.d.ts +3 -24
- package/dist/hitl/suspendedReopen.js +0 -14
- package/dist/hitl/toolApprovalWire.d.ts +5 -1308
- package/dist/hitl/toolApprovalWire.js +5 -945
- package/dist/hooksWireCaps.d.ts +0 -38
- package/dist/hooksWireCaps.js +0 -190
- package/dist/host.d.ts +0 -105
- package/dist/host.js +0 -33
- package/dist/hostEnv.d.ts +0 -14
- package/dist/hostEnv.js +0 -13
- package/dist/imagesWireCaps.d.ts +0 -21
- package/dist/imagesWireCaps.js +0 -22
- package/dist/index.d.ts +0 -134
- package/dist/index.js +0 -476
- package/dist/interactiveHalt.d.ts +5 -153
- package/dist/interactiveHalt.js +0 -111
- package/dist/interactiveToolsWire.d.ts +0 -62
- package/dist/interactiveToolsWire.js +1 -67
- package/dist/leaderConflict.d.ts +0 -59
- package/dist/leaderConflict.js +0 -48
- package/dist/limitsWire.d.ts +0 -125
- package/dist/limitsWire.js +2 -120
- package/dist/liveInitToolFace.d.ts +0 -77
- package/dist/liveInitToolFace.js +1 -109
- package/dist/liveModelCatalog.d.ts +0 -52
- package/dist/liveModelCatalog.js +0 -48
- package/dist/liveQuestionStore.d.ts +0 -87
- package/dist/liveQuestionStore.js +1 -56
- package/dist/mcpLiveness.d.ts +0 -151
- package/dist/mcpLiveness.js +0 -122
- package/dist/mcpPanel.d.ts +0 -104
- package/dist/mcpPanel.js +0 -49
- package/dist/mcpReconnect.d.ts +0 -58
- package/dist/mcpReconnect.js +0 -69
- package/dist/mcpWireCaps.d.ts +0 -55
- package/dist/mcpWireCaps.js +1 -13
- package/dist/memoryComplianceCapability.d.ts +3 -57
- package/dist/memoryComplianceCapability.js +0 -57
- package/dist/memoryEntriesWire.d.ts +6 -198
- package/dist/memoryEntriesWire.js +0 -144
- package/dist/memoryOriginCapability.d.ts +3 -53
- package/dist/memoryOriginCapability.js +0 -50
- package/dist/memorySpecWire.d.ts +0 -116
- package/dist/memorySpecWire.js +0 -150
- package/dist/model/catalog.d.ts +0 -111
- package/dist/model/catalog.js +0 -87
- package/dist/model/catalogLoader.d.ts +0 -114
- package/dist/model/catalogLoader.js +2 -139
- package/dist/model/modelSupplyRules.d.ts +1 -55
- package/dist/model/modelSupplyRules.js +0 -62
- package/dist/model/providerAuth.d.ts +0 -103
- package/dist/model/providerAuth.js +2 -38
- package/dist/model/providerCatalog.d.ts +0 -45
- package/dist/model/providerCatalog.js +0 -37
- package/dist/model/providerPresets.d.ts +0 -33
- package/dist/model/providerPresets.js +2 -91
- package/dist/model/tierVocabulary.d.ts +0 -31
- package/dist/model/tierVocabulary.js +0 -27
- package/dist/modelBudgetRule.d.ts +0 -39
- package/dist/modelBudgetRule.js +0 -39
- package/dist/modelCapabilityProbe.d.ts +0 -175
- package/dist/modelCapabilityProbe.js +0 -147
- package/dist/modelWireCaps.d.ts +0 -13
- package/dist/modelWireCaps.js +0 -13
- package/dist/notifications.d.ts +0 -233
- package/dist/notifications.js +14 -492
- package/dist/oneShotWireCaps.d.ts +0 -34
- package/dist/oneShotWireCaps.js +0 -35
- package/dist/ownKey.d.ts +0 -33
- package/dist/ownKey.js +0 -33
- package/dist/panelRunningHistory.d.ts +0 -28
- package/dist/panelRunningHistory.js +0 -43
- package/dist/peerFrames.d.ts +0 -71
- package/dist/peerFrames.js +0 -168
- package/dist/peerLaneCapability.d.ts +0 -44
- package/dist/peerLaneCapability.js +0 -52
- package/dist/permissionRuleIssue.d.ts +0 -30
- package/dist/permissionRuleIssue.js +0 -78
- package/dist/permissionRulesWriteCapability.d.ts +0 -46
- package/dist/permissionRulesWriteCapability.js +0 -54
- package/dist/permissionWireCaps.d.ts +0 -37
- package/dist/permissionWireCaps.js +0 -37
- package/dist/postureKnob.d.ts +0 -71
- package/dist/postureKnob.js +0 -86
- package/dist/principalWire.d.ts +0 -17
- package/dist/principalWire.js +0 -17
- package/dist/printToolResultFrame.d.ts +0 -100
- package/dist/printToolResultFrame.js +0 -33
- package/dist/promptProfileWireCaps.d.ts +0 -13
- package/dist/promptProfileWireCaps.js +0 -13
- package/dist/readFacePosture.d.ts +0 -43
- package/dist/readFacePosture.js +0 -46
- package/dist/request/printNotification.d.ts +0 -20
- package/dist/request/printNotification.js +0 -55
- package/dist/request/taskRequest.d.ts +0 -249
- package/dist/request/taskRequest.js +6 -498
- package/dist/resumeRefusalCopy.d.ts +0 -136
- package/dist/resumeRefusalCopy.js +1 -117
- package/dist/retainBackgroundWireCaps.d.ts +0 -48
- package/dist/retainBackgroundWireCaps.js +0 -48
- package/dist/retryStatus.d.ts +2 -221
- package/dist/retryStatus.js +0 -107
- package/dist/rewindWireCaps.d.ts +0 -27
- package/dist/rewindWireCaps.js +0 -24
- package/dist/runCancelContext.d.ts +1 -20
- package/dist/runCancelContext.js +0 -34
- package/dist/runTerminal.d.ts +0 -273
- package/dist/runTerminal.js +0 -177
- package/dist/sandboxWire.d.ts +0 -38
- package/dist/sandboxWire.js +0 -82
- package/dist/scenarioWire.d.ts +0 -60
- package/dist/scenarioWire.js +0 -68
- package/dist/scratchpadWireCaps.d.ts +0 -11
- package/dist/scratchpadWireCaps.js +0 -32
- package/dist/sdkWireTransit.d.ts +0 -38
- package/dist/sdkWireTransit.js +0 -30
- package/dist/seam.d.ts +18 -853
- package/dist/seam.js +0 -52
- package/dist/seatContract.d.ts +0 -555
- package/dist/seatContract.js +5 -304
- package/dist/selfOrchestrationDenial.d.ts +0 -189
- package/dist/selfOrchestrationDenial.js +0 -162
- package/dist/selfOrchestrationWireCaps.d.ts +0 -38
- package/dist/selfOrchestrationWireCaps.js +0 -38
- package/dist/sessionMap.d.ts +0 -60
- package/dist/sessionMap.js +0 -37
- package/dist/sessionMemoryStatus.d.ts +11 -114
- package/dist/sessionMemoryStatus.js +0 -112
- package/dist/sessionModelLatch.d.ts +0 -29
- package/dist/sessionModelLatch.js +0 -40
- package/dist/sessionPolicyCapability.d.ts +3 -53
- package/dist/sessionPolicyCapability.js +0 -52
- package/dist/sessionSlot.d.ts +0 -26
- package/dist/sessionSlot.js +0 -17
- package/dist/skillsWireCaps.d.ts +0 -87
- package/dist/skillsWireCaps.js +0 -38
- package/dist/sqlEngineCapability.d.ts +0 -118
- package/dist/sqlEngineCapability.js +0 -134
- package/dist/sseIdleTriage.d.ts +0 -79
- package/dist/sseIdleTriage.js +1 -80
- package/dist/steering.d.ts +0 -54
- package/dist/steering.js +0 -63
- package/dist/subagent/engineCompactWire.d.ts +0 -34
- package/dist/subagent/engineCompactWire.js +4 -134
- package/dist/subagent/engineDelegatedPrompt.d.ts +0 -31
- package/dist/subagent/engineDelegatedPrompt.js +1 -103
- package/dist/subagent/engineRowStopGate.d.ts +0 -20
- package/dist/subagent/engineRowStopGate.js +0 -49
- package/dist/subagent/engineSubagentOutput.d.ts +0 -7
- package/dist/subagent/engineSubagentOutput.js +1 -51
- package/dist/subagent/engineSubagentResume.d.ts +2 -279
- package/dist/subagent/engineSubagentResume.js +2 -129
- package/dist/subagent/engineSubagentSteer.d.ts +0 -26
- package/dist/subagent/engineSubagentSteer.js +0 -63
- package/dist/subagent/engineSubagentTail.d.ts +0 -38
- package/dist/subagent/engineSubagentTail.js +2 -110
- package/dist/subagent/engineTaskHandleWire.d.ts +6 -67
- package/dist/subagent/engineTaskHandleWire.js +0 -126
- package/dist/subagent/subagentOwnerAbsence.d.ts +0 -2
- package/dist/subagent/subagentOwnerAbsence.js +0 -25
- package/dist/subagentContentStore.d.ts +3 -260
- package/dist/subagentContentStore.js +7 -540
- package/dist/systemReminderTag.d.ts +0 -49
- package/dist/systemReminderTag.js +0 -61
- package/dist/toolResult.d.ts +1 -211
- package/dist/toolResult.js +1 -358
- package/dist/toolRoster.d.ts +0 -140
- package/dist/toolRoster.js +0 -66
- package/dist/typePins.d.ts +0 -46
- package/dist/types/engineState.d.ts +0 -71
- package/dist/types/engineState.js +0 -16
- package/dist/ultracodeWireCaps.d.ts +0 -75
- package/dist/ultracodeWireCaps.js +0 -92
- package/dist/unrefTimer.d.ts +0 -27
- package/dist/webSearchBackendCapability.d.ts +0 -72
- package/dist/webSearchBackendCapability.js +0 -79
- package/dist/webSearchWireCaps.d.ts +0 -37
- package/dist/webSearchWireCaps.js +0 -34
- package/dist/websearch/searchProviderPresets.d.ts +0 -81
- package/dist/websearch/searchProviderPresets.js +0 -27
- package/dist/wireErrorTriage.d.ts +4 -160
- package/dist/wireErrorTriage.js +0 -171
- package/dist/wireRefusalCopy.d.ts +0 -28
- package/dist/wireRefusalCopy.js +0 -28
- package/dist/workflow.d.ts +0 -40
- package/dist/workflow.js +0 -52
- package/dist/workflowClient.d.ts +0 -122
- package/dist/workflowClient.js +8 -360
- package/dist/workflowMonitor.d.ts +2 -72
- package/dist/workflowMonitor.js +0 -26
- package/dist/writeProtectionCapability.d.ts +0 -112
- package/dist/writeProtectionCapability.js +0 -109
- package/docs/INTEGRATION-CLIENTS.md +30 -1
- package/package.json +1 -1
package/dist/retryStatus.d.ts
CHANGED
|
@@ -1,156 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
* retryStatus.ts — BrainStatus liveness(§E3/§E10 `status` 臂)→ spinner retry 行状态(PURE)。
|
|
3
|
-
* cli src/sema/retryStatusStore.ts 的 mapBrainStatusToRetry 逐字搬运,唯一改动 = **时钟注入**
|
|
4
|
-
* (原版读 Date.now(),库里由调用方给 nowMs,跨端确定性 + 可测)。187 语义对位:
|
|
5
|
-
* reconnecting → stalled → '✻ Waiting for API response · will retry in Ns · check your network'
|
|
6
|
-
* retrying → error → '✻ API error · Retrying in Ns'(非终态;187 硬编码 'API error')
|
|
7
|
-
* rate_limited → error → '✻ Usage limit reached · Retrying in Ns'(rateLimits 真 ⇒ 终态)
|
|
8
|
-
* circuit_open → error → '✻ <detail|Service temporarily unavailable> · Retrying in Ns'
|
|
9
|
-
* recovered → null → 覆盖层摘掉(重试**成功**,不是错误 —— 见下)
|
|
10
|
-
* gave_up → error+terminal → '✻ <detail>'(重试用尽的终态;与 recovered 反向。**打 terminal 位**,
|
|
11
|
-
* 渲染面据此不得再接「· Retrying in Ns」——已经没有下一次了)
|
|
12
|
-
* waiting_first_token → waiting → '✻ Waiting for the model's first token · Ns [/ Ns]'(core 7.3.0 /
|
|
13
|
-
* #530;0.55.0 接。**非错误、非重连**:模型已连上,正在生成前的静默。
|
|
14
|
-
* 携 elapsedMs/timeoutMs;本臂是 error 臂的结构超集 —— 老宿主的
|
|
15
|
-
* else 臂照旧渲 0.54.0 那一行,零行为差异零崩渲,见该臂顶注)
|
|
16
|
-
* 绝不捏造 attempt 计数——只用引擎真给的 phase / detail / retryInSec / retryInMs / attempt /
|
|
17
|
-
* maxRetries / errClass / retryAtMs / errorStatus(core 7.0.x 起**九键**、7.3.0 起 +`elapsedMs`/`timeoutMs` 成**十一键**;0.48.0 补齐后两位,
|
|
18
|
-
* 族扫账见 {@link BRAIN_STATUS_PAYLOAD_KEYS} 末段)。
|
|
19
|
-
*
|
|
20
|
-
* 🔴 员数与字段补全(2026-08-08,#3004 跟修批)。此前本文件只列 4 相 + 3 字段,而引擎侧
|
|
21
|
-
* (core `BrainStatusPhase` / `BrainStatus`,dist/core/types.d.ts)是 **6 相 + 6 字段**,server 两腿的
|
|
22
|
-
* `brainStatusEventData`(dist/trace/project.js)把 attempt/maxRetries/retryInMs 全发。两处后果:
|
|
23
|
-
* · `recovered`(引擎重试**成功**的终态)落 `default:` 臂 ⇒ 被渲成 `kind:'error'`,即
|
|
24
|
-
* 「刚刚恢复」被渲成「API error · Retrying」—— 方向完全相反的谎报;
|
|
25
|
-
* · attempt/maxRetries/retryInMs 在本层被剥掉 ⇒ `RetryStatus` 上早就留好的 attempt/maxRetries
|
|
26
|
-
* 两位恒缺席。这不是「不许编造」(那条纪律没错),是**供给方给了却没接**。
|
|
27
|
-
* 反漂移腿:`scripts/run-engine-vocab-floor-test.mjs` G2-b/G2-c 拿下面两张运行期镜像对**实装
|
|
28
|
-
* @sema-agent/core** 的 `BrainStatusPhase` / `BrainStatus` 逐词逐键对账 —— 引擎再加相/加键,那边先红。
|
|
29
|
-
*/
|
|
30
|
-
export type RetryStatus =
|
|
31
|
-
/** 等 API 响应(`reconnecting`)。**计数两位在场**:实装 core 的 reconnecting 帧与 retrying/
|
|
32
|
-
* rate_limited 同形,六字段全发(`stream-engine.js` 三处 `sleepAnnouncingRetry` 逐处实测)——
|
|
33
|
-
* 丢掉它们正好是在「用户最需要看重连进度」的那一刻把进度藏起来(2026-08-08 对抗复审命中)。 */
|
|
34
|
-
{
|
|
1
|
+
export type RetryStatus = {
|
|
35
2
|
kind: 'stalled';
|
|
36
3
|
deadline: number;
|
|
37
4
|
attempt?: number;
|
|
38
5
|
maxRetries?: number;
|
|
39
|
-
/** 见 {@link BrainStatusPayload.errClass}(引擎给了才在场;本层只透传,措辞是壳半场)。 */
|
|
40
6
|
errClass?: BrainRetryErrClass | (string & {});
|
|
41
|
-
/** 见 {@link BrainStatusPayload.retryAtMs}。🔴 **产生者铸的墙钟截止点**;在场时端应当拿它
|
|
42
|
-
* 渲倒计时,而不是拿 {@link deadline} —— 后者是**本层**按 `nowMs + 剩余量` 现算的,跨进程跳
|
|
43
|
-
* 的传输耗时已经把它推后了(core 顶注点名的正是这个病)。缺席 ⇒ 退回 `deadline`。 */
|
|
44
7
|
retryAtMs?: number;
|
|
45
|
-
/** 见 {@link BrainStatusPayload.errorStatus}(引擎给了才在场;缺席禁渲成 0/未知码)。 */
|
|
46
8
|
errorStatus?: number;
|
|
47
|
-
/** 见 {@link BrainStatusPayload.elapsedMs}(引擎给了才在场;本层零重算)。 */
|
|
48
9
|
elapsedMs?: number;
|
|
49
|
-
/** 见 {@link BrainStatusPayload.timeoutMs}(引擎给了才在场;缺席禁渲成 0)。 */
|
|
50
10
|
timeoutMs?: number;
|
|
51
|
-
/**
|
|
52
|
-
* 🔴 0.68.0(L-246)—— 引擎给的**中性人话提示**(`BrainStatus.detail`;server 已脱敏 + 限 300 字)。
|
|
53
|
-
*
|
|
54
|
-
* 修前这一位只在两条 `error` 臂上被读(`circuit_open` / `gave_up` 各拿它当 `error.formatted`),
|
|
55
|
-
* `stalled` 臂**整只丢掉**它 —— 于是「为什么还在等」这句唯一由引擎产出的解释,恰恰在**最长的
|
|
56
|
-
* 那一段等待**上看不见,端只好自己按 `errClass` 拼一句泛泛的话(而那正是措辞该由产生者单铸的
|
|
57
|
-
* 反例)。⇒ 原样透传,**一个字不改写、不截断**(显示封顶归端,它才知道自己的行宽)。
|
|
58
|
-
* 🔴 缺席 ⇒ 键不铸(空串同理):一格空白的解释比没有解释更坏。
|
|
59
|
-
*/
|
|
60
11
|
detail?: string;
|
|
61
12
|
} | {
|
|
62
13
|
kind: 'error';
|
|
63
14
|
deadline: number;
|
|
64
15
|
attempt?: number;
|
|
65
16
|
maxRetries?: number;
|
|
66
|
-
/** 见 {@link BrainStatusPayload.errClass}(引擎给了才在场;本层只透传,措辞是壳半场)。 */
|
|
67
17
|
errClass?: BrainRetryErrClass | (string & {});
|
|
68
|
-
/** 见 {@link BrainStatusPayload.retryAtMs}(与 `stalled` 臂同义同纪律:在场优先于 `deadline`)。 */
|
|
69
18
|
retryAtMs?: number;
|
|
70
|
-
/** 见 {@link BrainStatusPayload.errorStatus}。CC parity:`system/api_retry.error_status`
|
|
71
|
-
* 就是这个数,端可据它渲「API error 529」这类**点名失败方**的行(CC 语料直证该行是小写 `API error`
|
|
72
|
-
* 且不渲码;状态码是端的超集追加 —— 档 §3g 取证订正 2026-09-01)。 */
|
|
73
19
|
errorStatus?: number;
|
|
74
|
-
/**
|
|
75
|
-
* 🔴 **终态位**(2026-08-08 对抗复审命中):`true` ⇔ 引擎**不会再重试了**(`gave_up` 相)。
|
|
76
|
-
* 缺席 = 仍在重试循环里(retrying / rate_limited / circuit_open)。
|
|
77
|
-
*
|
|
78
|
-
* 为什么必须有这一位:`deadline` 的语义是「距下次重试」,而 gave_up 根本没有下次 —— 实装 core
|
|
79
|
-
* 的 finally 只发 `{phase:'gave_up', detail:'retries exhausted'}`(**不带** attempt/maxRetries,
|
|
80
|
-
* 所以消费方也无法靠「3/3」推出耗尽)。没有这一位,187 那套「<detail> · Retrying in Ns」句式
|
|
81
|
-
* 会把一次**已经放弃**渲成「正在重试,还剩 0 秒」——终帧稍有延迟,这句谎就一直挂着。
|
|
82
|
-
* 渲染措辞是壳半场(本包不渲染),本位只保证那个事实到得了壳。
|
|
83
|
-
*/
|
|
84
20
|
terminal?: true;
|
|
85
21
|
error: RetryStatusErrorPayload;
|
|
86
|
-
/** 见 {@link BrainStatusPayload.elapsedMs}(引擎给了才在场;本层零重算)。 */
|
|
87
22
|
elapsedMs?: number;
|
|
88
|
-
/** 见 {@link BrainStatusPayload.timeoutMs}(引擎给了才在场;缺席禁渲成 0)。 */
|
|
89
23
|
timeoutMs?: number;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* **等第一个 token**(core 7.3.0 / #530 的 `waiting_first_token` 相,0.55.0 接):请求已经发出、
|
|
93
|
-
* 模型已经连上,只是**还没吐出第一个字**。它既不是错误,也不是重连 —— 没有任何一次尝试失败过,
|
|
94
|
-
* 引擎也不是在**宣告**一次等待,而是在**观测**一次等待(core 顶注逐字:"no wait is being
|
|
95
|
-
* announced, a wait is being OBSERVED")。
|
|
96
|
-
*
|
|
97
|
-
* 🔴 **为什么必须单开一个 kind**(病形:上游闭集加员落 default 臂 ⇒ 新状态被渲成**最像的旧状态**):
|
|
98
|
-
* 0.54.0 及以前本相落 `mapBrainStatusToRetry` 的 `default:` 臂 ⇒ 投成 `{kind:'error'}`,壳把
|
|
99
|
-
* 「在等第一个字」渲成一条**错误色**的 `API error` 行(无 eta、无 attempt)。方向相反的谎报,
|
|
100
|
-
* 与 #3004 修的 `recovered`(重试**成功**被渲成 `API error`)逐字同族。用户报案形正是这一条。
|
|
101
|
-
*
|
|
102
|
-
* 🔴 **本臂刻意是 `error` 臂的结构超集 —— 这是加员的兼容形,不是冗余**:一个还不认得
|
|
103
|
-
* `'waiting'` 的宿主(desktop / web-client 尚未跟车)其 `if (kind==='stalled') … else …` 的
|
|
104
|
-
* else 臂会照旧读到 `error` / `deadline` / `terminal`,渲出与 **0.54.0 逐字节相同**的那一行。
|
|
105
|
-
* 少了 `error` 这一位,老宿主的 `status.error.rateLimits` 就是一次 TypeError —— 渲染路径裸抛
|
|
106
|
-
* = 整屏崩([render-path-must-not-throw]),把「一行渲错」升级成「一屏全没」。
|
|
107
|
-
* 判据写进门:`run-client-core-pure-test.mjs` G6-d「老宿主归约视图对本相的输出 ≡ 0.54.0 对
|
|
108
|
-
* 同一 payload 的输出」。认得本 kind 的宿主拿 {@link elapsedMs} / {@link timeoutMs} 渲真话。
|
|
109
|
-
*/
|
|
110
|
-
| {
|
|
24
|
+
} | {
|
|
111
25
|
kind: 'waiting';
|
|
112
|
-
/**
|
|
113
|
-
* 🔴 **兼容位,不是一个真等待的截止点**:core 明说本相**绝不带** `retryInMs`/`retryAtMs`
|
|
114
|
-
* (它不宣告等待),故本位恒 = 映射时刻的 `nowMs` ⇒ 渲染面按「剩余量 ≤ 0」自然不渲倒计时。
|
|
115
|
-
* 它在场只为让**老宿主**的 else 臂算得出数而不是 NaN;**认得本 kind 的宿主不得拿它渲倒计时**
|
|
116
|
-
* ——「距下次重试」在本相根本没有所指。要渲进度,读 {@link elapsedMs} / {@link timeoutMs}。
|
|
117
|
-
*/
|
|
118
26
|
deadline: number;
|
|
119
27
|
attempt?: number;
|
|
120
28
|
maxRetries?: number;
|
|
121
|
-
/** 见 {@link BrainStatusPayload.errClass}(core 不变式:本相恒缺席;本层不写特判,给了就透)。 */
|
|
122
29
|
errClass?: BrainRetryErrClass | (string & {});
|
|
123
|
-
/** 见 {@link BrainStatusPayload.retryAtMs}(core 不变式:本相恒缺席;本层不写特判,给了就透)。 */
|
|
124
30
|
retryAtMs?: number;
|
|
125
|
-
/** 见 {@link BrainStatusPayload.errorStatus}(core 不变式:本相恒缺席;本层不写特判,给了就透)。 */
|
|
126
31
|
errorStatus?: number;
|
|
127
|
-
/** 已经等了多久(ms)。见 {@link BrainStatusPayload.elapsedMs};缺席 = 引擎没给,禁渲 0。 */
|
|
128
32
|
elapsedMs?: number;
|
|
129
|
-
/** 这次等待的天花板(ms)。见 {@link BrainStatusPayload.timeoutMs};缺席 = 不渲「/ Ns」。 */
|
|
130
33
|
timeoutMs?: number;
|
|
131
|
-
/**
|
|
132
|
-
* 🔴 **恒缺席**(`?: never`):等第一个 token **不是**终态 —— 引擎还在等,首 token 到了会补
|
|
133
|
-
* `recovered`、彻底失败会补 `gave_up`。这一位写在型上只为让**老宿主**那句 `status.terminal`
|
|
134
|
-
* 在加员后仍然编译得过(union 各员都得有这个键才允许直接读),值上永不 stamp。
|
|
135
|
-
*/
|
|
136
34
|
terminal?: never;
|
|
137
|
-
/**
|
|
138
|
-
* 🔴 **兼容位**:`formatted` 恒为空串 —— 与 0.54.0 的 `default:` 臂逐字节相同(那一臂也是
|
|
139
|
-
* `{ formatted: '' }`)。本相**没有错误**,所以这里也不许编一句错误文案出来;它存在的唯一
|
|
140
|
-
* 理由是老宿主的 else 臂要读得到这个对象(见上文 G6-d)。新宿主**不得**读本位当错误证据 ——
|
|
141
|
-
* 判「有没有错」的量是 `kind`,不是这个恒空的壳([anchor-on-the-deciding-quantity])。
|
|
142
|
-
*/
|
|
143
35
|
error: RetryStatusErrorPayload;
|
|
144
36
|
};
|
|
145
|
-
/**
|
|
146
|
-
* `error` 载荷的**具名形**。
|
|
147
|
-
* 🔴 具名不是风格偏好,是 typeshape 门 B4 的硬要求:导出签名里的**内联匿名形(≥3 成员)**受棘轮
|
|
148
|
-
* 管(只降不升)—— 0.55.0 的 `waiting` 臂复用同一个形,再内联抄一份就是把同一个结构写第三遍、
|
|
149
|
-
* 并把棘轮顶高一格。具名后结构与此前**逐字节相同**(TS 结构化类型 ⇒ 对消费端零差异,不是收窄),
|
|
150
|
-
* 而且这一形从此只有**一处**定义 —— 三个臂再也不可能各自漂。
|
|
151
|
-
* 🔴 **刻意不导出**:它是 `RetryStatus` 的内部构件,公面契约仍是 `RetryStatus` 本身
|
|
152
|
-
* (公面导出表是登记制,加一个名字要走那张表;这一位没有独立的消费理由)。
|
|
153
|
-
*/
|
|
154
37
|
interface RetryStatusErrorPayload {
|
|
155
38
|
formatted: string;
|
|
156
39
|
isNetworkDown?: boolean;
|
|
@@ -162,124 +45,22 @@ interface RetryStatusErrorPayload {
|
|
|
162
45
|
rateLimitType?: string;
|
|
163
46
|
} | null;
|
|
164
47
|
}
|
|
165
|
-
/**
|
|
166
|
-
* core `BrainStatusPhase` 的**运行期值拷贝**(engine-vocab 门 G2-b 拿它对实装 core 对账)。
|
|
167
|
-
* 引擎侧是闭集,**读时按开集处理** —— 一个部署可以在自己的通道上冒出别的相,认得的分支照走,
|
|
168
|
-
* 认不得的落 `default:` 兜底(见 {@link mapBrainStatusToRetry} 末臂)。
|
|
169
|
-
*/
|
|
170
48
|
export declare const BRAIN_STATUS_PHASES: readonly ["rate_limited", "retrying", "reconnecting", "circuit_open", "recovered", "gave_up", "waiting_first_token"];
|
|
171
49
|
export type BrainStatusPhase = (typeof BRAIN_STATUS_PHASES)[number];
|
|
172
|
-
/**
|
|
173
|
-
* core `BrainRetryErrClass`(5.43.0)的**类型面镜像** —— 一次重试等待的**原因分桶**,
|
|
174
|
-
* provider 中立(绝不是 HTTP 状态码 / syscall code / provider 分类法;那些不许过这条通道):
|
|
175
|
-
* · `connect_refused` 目标本身给了确定否定(该地址没人 accept / 名字无地址)—— 短梯队服务的那一类;
|
|
176
|
-
* · `transport` 其余传输层失败(connect 超时 / reset / 流中断)—— 全梯队;
|
|
177
|
-
* · `stall` 连上了、也没断,但**不出字节**(流停滞)—— 与 `transport` 分家的理由见下;
|
|
178
|
-
* · `rate_limit` provider 要求放慢;
|
|
179
|
-
* · `server` provider 自报自己这边出错;
|
|
180
|
-
* · `http` 状态谓词判终态、但 provider 自己的显式重试裁定说重试;
|
|
181
|
-
* · `output_cap` 根本不是连接失败:provider 报上下文超限后按更低 output cap 重发(无退避)。
|
|
182
|
-
*
|
|
183
|
-
* 🔴 **刻意没有运行期值镜像**(与 {@link BRAIN_STATUS_PHASES} 不同):本包对 errClass **零分支**
|
|
184
|
-
* (纯透传),少一个成员没有任何行为后果 —— 开集读会把不认得的桶原样带过去。而 phase 是有 switch
|
|
185
|
-
* 分支的,少一相会落 default 臂被渲成错话,所以那张表才需要运行期镜像 + engine-vocab 等值门。
|
|
186
|
-
* 判据锚在「真正决定结果的量」上:决定结果的是有没有分支,不是有没有一张表。
|
|
187
|
-
*/
|
|
188
50
|
export type BrainRetryErrClass = 'connect_refused' | 'transport' | 'stall' | 'rate_limit' | 'server' | 'http' | 'output_cap';
|
|
189
|
-
/** wire 上 `status` 臂的载荷(= core `BrainStatus`;server 两腿白名单原样转发这 **11** 键(7.3.0 起含 `elapsedMs`/`timeoutMs`)——
|
|
190
|
-
* 真源 = server 7.58.0 `dist/trace/project.js` 的 `brainStatusEventData`,逐条条件拷贝)。 */
|
|
191
51
|
export interface BrainStatusPayload {
|
|
192
|
-
/** 闭集 + `(string & {})`:未知相仍可携带(开集读),不必先改类型再解析。 */
|
|
193
52
|
phase: BrainStatusPhase | (string & {});
|
|
194
|
-
/** 中性人话提示(无 provider/HTTP 细节;server 已脱敏 + 限 300 字)。 */
|
|
195
53
|
detail?: string;
|
|
196
|
-
/** 距下次重试的秒数(= `ceil(retryInMs/1000)`,core circuit-breaker 与 ms 位同发)。 */
|
|
197
54
|
retryInSec?: number;
|
|
198
|
-
/** 距下次重试的毫秒数 —— **更精的同一个量**,在场时优先于 `retryInSec`。 */
|
|
199
55
|
retryInMs?: number;
|
|
200
|
-
/** 引擎真实的第几次尝试(1-based)。缺席 = 引擎没给,绝不折成 0。 */
|
|
201
56
|
attempt?: number;
|
|
202
|
-
/** 引擎这一轮的重试上限。与 `attempt` 一起才能渲「2/5」。 */
|
|
203
57
|
maxRetries?: number;
|
|
204
|
-
/**
|
|
205
|
-
* core 7.0.x(#506 ㋑;server ≥7.53 `brainStatusEventData` 真发;ADDITIVE,0.48.0 补)——
|
|
206
|
-
* 本次退避**预计结束的墙钟时刻**(epoch ms)= 发帧那一刻的 `Date.now() + retryInMs`,
|
|
207
|
-
* **由产生者铸**。不变式(core 顶注逐字):`retryInMs` 在场时它必在场,不宣告等待的帧
|
|
208
|
-
* (`recovered` / `gave_up` / output-cap 立即重发)上必缺席。
|
|
209
|
-
*
|
|
210
|
-
* 🔴 **为什么这一位必须由上游给、消费端不许自己算**(core 顶注的原话,也是本包接它的理由):
|
|
211
|
-
* `Date.now() + retryInMs` 只对**瞬时收到帧**的读者成立。中间隔了若干进程跳(core → server →
|
|
212
|
-
* 本包 → 端)之后再自己加,得到的截止点已经被传输耗时推后了;而 core 对 >30s 的等待会每 30s
|
|
213
|
-
* **重播一帧并递减**,于是「自己算」的倒计时在每个重播片上**重新起跳**而不是收敛。
|
|
214
|
-
* 🔴 **时钟域,明说以消除歧义**:墙钟(`Date.now()`),**不是**单调钟。端不得拿它与自己的
|
|
215
|
-
* 单调计时器比;跨机器/跨授时校正时它是**近似值** —— 权威的**相对**量始终是 `retryInMs`,
|
|
216
|
-
* 本位是由它派生的绝对便利位。
|
|
217
|
-
*/
|
|
218
58
|
retryAtMs?: number;
|
|
219
|
-
/**
|
|
220
|
-
* core 7.0.x(#506 ㋑;server ≥7.53 `brainStatusEventData` 真发;ADDITIVE,0.48.0 补)——
|
|
221
|
-
* **刚刚失败的那次尝试**的 HTTP 状态码。这条通道上**唯一**一个 provider 自报的数字
|
|
222
|
-
* (其余一切仍走引擎自己的中性分桶 `phase` / `errClass`)。
|
|
223
|
-
*
|
|
224
|
-
* 🔴 **为什么这条一贯拒绝 HTTP 细节的通道要收它**(core 顶注的原话):要让操作者判断
|
|
225
|
-
* 「该等,还是该去修点什么」,两个中性桶**供不出**这个信息 —— `rate_limit` 同时盖住
|
|
226
|
-
* 「provider 自己会清掉的 429」与「账号配额耗尽的 429」,`server` 同时盖住 500 与
|
|
227
|
-
* 负载均衡器后面的 503。CC 在**同一场合**报同一个数(`system/api_retry.error_status`,
|
|
228
|
-
* 读自 `APIError.status`)⇒ 接它同时满足 CC parity 与本通道的中立契约。
|
|
229
|
-
* 🔴 **在场面是封闭的,缺席不许反推**:只在「这次尝试拿到了一个**点名了失败**的应答」时在场
|
|
230
|
-
* (连接梯的 retry 等待 + output-cap 的 400)。**恒缺席**于:传输层失败(压根没有应答)、
|
|
231
|
-
* 流中断(那条应答自己的状态是**成功**,一个什么都没失败的状态不许被当成重试的原因)、
|
|
232
|
-
* `circuit_open`(本地快失败,没发出去)、`recovered`/`gave_up`(不宣告任何尝试)。
|
|
233
|
-
* ⇒ 端**禁**把缺席渲成 0 或「未知错误码」;那两类的因由由 `errClass` 按构造点名。
|
|
234
|
-
* 🔴 **与 CC 的可空必填不同**:CC 有一整条 `system/api_retry` 消息专供重试场合,能把键设成
|
|
235
|
-
* 必填可空;本形是**所有 phase 共用的一个形**,所以是可选位(core 顶注同款理由)。
|
|
236
|
-
*/
|
|
237
59
|
errorStatus?: number;
|
|
238
|
-
/**
|
|
239
|
-
* core 5.43.0(#307 双扫 S44,2026-08-19;ADDITIVE)——**这次等待的原因分桶**
|
|
240
|
-
* (core `BrainRetryErrClass`,provider 中立闭集)。与 `phase`(引擎正在**做什么**)互补:
|
|
241
|
-
* 本键说的是**为什么**。只在**重试等待帧**上在场且引擎分得出类;`recovered`/`gave_up` 两个终态帧
|
|
242
|
-
* 与 `circuit_open`(本地快失败,不是观测到的失败)上刻意缺席。
|
|
243
|
-
*
|
|
244
|
-
* 🔴 **闭集 + `(string & {})`,读时按开集处理**,与 `phase` 同款纪律:一个部署可以在自己的通道上
|
|
245
|
-
* 冒出别的桶,认得的照走、认不得的原样带过去 —— 绝不因为「不认得」就把这次等待的原因抹成缺席
|
|
246
|
-
* (那是把引擎真给的量在本层剥掉,#3004 那批修的正是这一类)。
|
|
247
|
-
* 缺席 = 引擎没分类,**不得**被渲成某个默认桶。
|
|
248
|
-
*
|
|
249
|
-
* 分工:本包只负责让这个事实到得了壳(投影/透传保真),措辞与是否上屏是壳半场。
|
|
250
|
-
*/
|
|
251
60
|
errClass?: BrainRetryErrClass | (string & {});
|
|
252
|
-
/**
|
|
253
|
-
* core 7.3.0(#530;server ≥7.58 `brainStatusEventData` 真发;ADDITIVE,0.55.0 补)——
|
|
254
|
-
* 在一帧 `waiting_first_token` 上:**第一个 token 已经被等了多久**(ms,发帧那一刻,发帧进程
|
|
255
|
-
* 自己的钟;跨进程跳是近似值)。core 顶注:`Absent on every other phase`。
|
|
256
|
-
*
|
|
257
|
-
* 🔴 缺席禁折 0:「不知道等了多久」与「等了 0 毫秒」是两件事,后者会让屏上那行秒数恒 0
|
|
258
|
-
* ([honest-absence-not-fabricated-zero])。
|
|
259
|
-
*/
|
|
260
61
|
elapsedMs?: number;
|
|
261
|
-
/**
|
|
262
|
-
* core 7.3.0(#530;server ≥7.58 `brainStatusEventData` 真发;ADDITIVE,0.55.0 补)——
|
|
263
|
-
* 在一帧 `waiting_first_token` 上:**已武装的首 token 看门狗**(ms)= 这次等待的天花板,
|
|
264
|
-
* 消费方据它渲「45s of 120s」。core 顶注:`Absent on every other phase`。
|
|
265
|
-
*
|
|
266
|
-
* 🔴 与 `retryInMs` 不是同一个量,**绝不可互换**:那一位是「还要等多久才重试」(引擎在宣告一次
|
|
267
|
-
* 等待),本位是「这次等待最多容忍多久」(引擎在观测一次等待)。把本位当倒计时渲,渲出来的是
|
|
268
|
-
* 一个从不递减的数。
|
|
269
|
-
*/
|
|
270
62
|
timeoutMs?: number;
|
|
271
63
|
}
|
|
272
|
-
/**
|
|
273
|
-
* 上面那个 interface 的**运行期键镜像**(照 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 先例):
|
|
274
|
-
* engine-vocab 门 G2-c 拿它与 core `BrainStatus` 的键集逐元素比 ⇒ 引擎 additive 增键当天红。
|
|
275
|
-
* 下面两个类型钉保证镜像与 interface 之间不可能漂移(少键/多键都是编译错)。
|
|
276
|
-
*/
|
|
277
64
|
export declare const BRAIN_STATUS_PAYLOAD_KEYS: readonly ["phase", "detail", "retryInSec", "retryInMs", "attempt", "maxRetries", "errClass", "retryAtMs", "errorStatus", "elapsedMs", "timeoutMs"];
|
|
278
|
-
/**
|
|
279
|
-
* BrainStatus 载荷 → spinner 行状态。
|
|
280
|
-
*
|
|
281
|
-
* 返回 **`null` = 没有覆盖层**(不是「不知道」):今天只有 `recovered` 走这条 —— 引擎明说这次重试
|
|
282
|
-
* 已经成功,行就该摘掉。此前本函数返回型钉死非空,于是 `recovered` 只能被塞进 error 臂。
|
|
283
|
-
*/
|
|
284
65
|
export declare function mapBrainStatusToRetry(p: BrainStatusPayload, nowMs: number): RetryStatus | null;
|
|
285
66
|
export {};
|
package/dist/retryStatus.js
CHANGED
|
@@ -1,37 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* retryStatus.ts — BrainStatus liveness(§E3/§E10 `status` 臂)→ spinner retry 行状态(PURE)。
|
|
3
|
-
* cli src/sema/retryStatusStore.ts 的 mapBrainStatusToRetry 逐字搬运,唯一改动 = **时钟注入**
|
|
4
|
-
* (原版读 Date.now(),库里由调用方给 nowMs,跨端确定性 + 可测)。187 语义对位:
|
|
5
|
-
* reconnecting → stalled → '✻ Waiting for API response · will retry in Ns · check your network'
|
|
6
|
-
* retrying → error → '✻ API error · Retrying in Ns'(非终态;187 硬编码 'API error')
|
|
7
|
-
* rate_limited → error → '✻ Usage limit reached · Retrying in Ns'(rateLimits 真 ⇒ 终态)
|
|
8
|
-
* circuit_open → error → '✻ <detail|Service temporarily unavailable> · Retrying in Ns'
|
|
9
|
-
* recovered → null → 覆盖层摘掉(重试**成功**,不是错误 —— 见下)
|
|
10
|
-
* gave_up → error+terminal → '✻ <detail>'(重试用尽的终态;与 recovered 反向。**打 terminal 位**,
|
|
11
|
-
* 渲染面据此不得再接「· Retrying in Ns」——已经没有下一次了)
|
|
12
|
-
* waiting_first_token → waiting → '✻ Waiting for the model's first token · Ns [/ Ns]'(core 7.3.0 /
|
|
13
|
-
* #530;0.55.0 接。**非错误、非重连**:模型已连上,正在生成前的静默。
|
|
14
|
-
* 携 elapsedMs/timeoutMs;本臂是 error 臂的结构超集 —— 老宿主的
|
|
15
|
-
* else 臂照旧渲 0.54.0 那一行,零行为差异零崩渲,见该臂顶注)
|
|
16
|
-
* 绝不捏造 attempt 计数——只用引擎真给的 phase / detail / retryInSec / retryInMs / attempt /
|
|
17
|
-
* maxRetries / errClass / retryAtMs / errorStatus(core 7.0.x 起**九键**、7.3.0 起 +`elapsedMs`/`timeoutMs` 成**十一键**;0.48.0 补齐后两位,
|
|
18
|
-
* 族扫账见 {@link BRAIN_STATUS_PAYLOAD_KEYS} 末段)。
|
|
19
|
-
*
|
|
20
|
-
* 🔴 员数与字段补全(2026-08-08,#3004 跟修批)。此前本文件只列 4 相 + 3 字段,而引擎侧
|
|
21
|
-
* (core `BrainStatusPhase` / `BrainStatus`,dist/core/types.d.ts)是 **6 相 + 6 字段**,server 两腿的
|
|
22
|
-
* `brainStatusEventData`(dist/trace/project.js)把 attempt/maxRetries/retryInMs 全发。两处后果:
|
|
23
|
-
* · `recovered`(引擎重试**成功**的终态)落 `default:` 臂 ⇒ 被渲成 `kind:'error'`,即
|
|
24
|
-
* 「刚刚恢复」被渲成「API error · Retrying」—— 方向完全相反的谎报;
|
|
25
|
-
* · attempt/maxRetries/retryInMs 在本层被剥掉 ⇒ `RetryStatus` 上早就留好的 attempt/maxRetries
|
|
26
|
-
* 两位恒缺席。这不是「不许编造」(那条纪律没错),是**供给方给了却没接**。
|
|
27
|
-
* 反漂移腿:`scripts/run-engine-vocab-floor-test.mjs` G2-b/G2-c 拿下面两张运行期镜像对**实装
|
|
28
|
-
* @sema-agent/core** 的 `BrainStatusPhase` / `BrainStatus` 逐词逐键对账 —— 引擎再加相/加键,那边先红。
|
|
29
|
-
*/
|
|
30
|
-
/**
|
|
31
|
-
* core `BrainStatusPhase` 的**运行期值拷贝**(engine-vocab 门 G2-b 拿它对实装 core 对账)。
|
|
32
|
-
* 引擎侧是闭集,**读时按开集处理** —— 一个部署可以在自己的通道上冒出别的相,认得的分支照走,
|
|
33
|
-
* 认不得的落 `default:` 兜底(见 {@link mapBrainStatusToRetry} 末臂)。
|
|
34
|
-
*/
|
|
35
1
|
export const BRAIN_STATUS_PHASES = [
|
|
36
2
|
'rate_limited',
|
|
37
3
|
'retrying',
|
|
@@ -39,17 +5,8 @@ export const BRAIN_STATUS_PHASES = [
|
|
|
39
5
|
'circuit_open',
|
|
40
6
|
'recovered',
|
|
41
7
|
'gave_up',
|
|
42
|
-
// core 7.3.0 跟车一相(#530;0.55.0)——「等第一个 token」。加员的**理由**与 recovered 那一相
|
|
43
|
-
// 逐字同族:少一相 ⇒ 它落 `mapBrainStatusToRetry` 的 default 臂被渲成错误行。engine-vocab G2-b
|
|
44
|
-
// 对**实装 core** 逐词对账(本批 devDep ^7.1.0 → ^7.4.0 后那道门先红后绿,红文逐字:
|
|
45
|
-
// 「漏:waiting_first_token」)。
|
|
46
8
|
'waiting_first_token',
|
|
47
9
|
];
|
|
48
|
-
/**
|
|
49
|
-
* 上面那个 interface 的**运行期键镜像**(照 `TOOL_APPROVAL_FRAME_KEYS_MIRROR` 先例):
|
|
50
|
-
* engine-vocab 门 G2-c 拿它与 core `BrainStatus` 的键集逐元素比 ⇒ 引擎 additive 增键当天红。
|
|
51
|
-
* 下面两个类型钉保证镜像与 interface 之间不可能漂移(少键/多键都是编译错)。
|
|
52
|
-
*/
|
|
53
10
|
export const BRAIN_STATUS_PAYLOAD_KEYS = [
|
|
54
11
|
'phase',
|
|
55
12
|
'detail',
|
|
@@ -57,70 +14,24 @@ export const BRAIN_STATUS_PAYLOAD_KEYS = [
|
|
|
57
14
|
'retryInMs',
|
|
58
15
|
'attempt',
|
|
59
16
|
'maxRetries',
|
|
60
|
-
// core 5.43.0 跟车一键(#307 双扫 S44,2026-08-19):engine-vocab G2-c 对实装 core 逐键对账。
|
|
61
17
|
'errClass',
|
|
62
|
-
// ── core 7.0.x 跟车**两键**(0.48.0;#506 ㋑)────────────────────────────────────────────
|
|
63
|
-
// 🔴 **族扫的产物,不是只补触发本批的那一个**([same-shape-residue-constitution]):本批的
|
|
64
|
-
// 派工单只点名了 `errorStatus`。族扫 = 把实装 core 的 `BrainStatus` **整个键集**与本镜像逐一
|
|
65
|
-
// 对表(而不是只补被点名的那一位),当场捞出**存量**漏键 `retryAtMs` —— 它与 errorStatus 同批
|
|
66
|
-
// 进 core、同在 server `brainStatusEventData` 的白名单里真发,只是没人提。
|
|
67
|
-
// 病形与 0.47.0 的 `task_progress.model` 逐字同族:上游真发、本层闭形镜像剥掉、两边代码看着都对。
|
|
68
|
-
// engine-vocab G2-c 的等值门本批**先红后绿**,红文逐字:「漏:retryAtMs,errorStatus」。
|
|
69
18
|
'retryAtMs',
|
|
70
19
|
'errorStatus',
|
|
71
|
-
// ── core 7.3.0 跟车**两键**(0.55.0;#530)────────────────────────────────────────────────
|
|
72
|
-
// 与 4) 的相位加员同一批上游变更:core 在 `BrainStatus` 上加了 elapsedMs/timeoutMs 两位,
|
|
73
|
-
// server 7.58.0 的 `brainStatusEventData` 白名单同批放行。镜像不跟 ⇒ G2-c 等值门红。
|
|
74
20
|
'elapsedMs',
|
|
75
21
|
'timeoutMs',
|
|
76
22
|
];
|
|
77
23
|
const _brainStatusKeyPin = [true, true];
|
|
78
24
|
void _brainStatusKeyPin;
|
|
79
|
-
/**
|
|
80
|
-
* BrainStatus 载荷 → spinner 行状态。
|
|
81
|
-
*
|
|
82
|
-
* 返回 **`null` = 没有覆盖层**(不是「不知道」):今天只有 `recovered` 走这条 —— 引擎明说这次重试
|
|
83
|
-
* 已经成功,行就该摘掉。此前本函数返回型钉死非空,于是 `recovered` 只能被塞进 error 臂。
|
|
84
|
-
*/
|
|
85
25
|
export function mapBrainStatusToRetry(p, nowMs) {
|
|
86
|
-
// 退避剩余量:ms 位在场就用 ms(1200ms 用 sec 位会被 ceil 成 2s,行上少一秒多一秒都是谎)。
|
|
87
26
|
const remainingMs = typeof p.retryInMs === 'number' ? p.retryInMs : (p.retryInSec ?? 0) * 1000;
|
|
88
27
|
const deadline = nowMs + Math.max(0, remainingMs);
|
|
89
|
-
/** 引擎真给的计数才落位;缺席 ⇒ 键不 stamp(诚实缺席,不造 0)。 */
|
|
90
28
|
const counts = {
|
|
91
29
|
...(typeof p.attempt === 'number' ? { attempt: p.attempt } : {}),
|
|
92
30
|
...(typeof p.maxRetries === 'number' ? { maxRetries: p.maxRetries } : {}),
|
|
93
31
|
};
|
|
94
|
-
/**
|
|
95
|
-
* 原因桶(#307 S44):引擎真给的**非空串**才落位。缺席 / 空串 / 非串 ⇒ 键不 stamp
|
|
96
|
-
* ——「不知道为什么等」渲成缺席,绝不折成某个默认桶。开集:不认得的桶原样带过去
|
|
97
|
-
* (本层零分支,认不得也没有可落错的臂)。
|
|
98
|
-
*/
|
|
99
32
|
const cause = typeof p.errClass === 'string' && p.errClass.length > 0 ? { errClass: p.errClass } : {};
|
|
100
|
-
/**
|
|
101
|
-
* core 7.0.x 跟车两位(0.48.0),**原样透传、零重算**:
|
|
102
|
-
* · `retryAtMs` —— 产生者铸的墙钟截止点。本层**刻意不拿它去改写** `deadline`:那一位是已发布的
|
|
103
|
-
* 行为面(0.29.0 起端就在读),换算法 = 一次静默的行为改动。两位并存、端自己选(在场优先),
|
|
104
|
-
* 是 additive 的唯一诚实形。
|
|
105
|
-
* · `errorStatus` —— 刚失败那次尝试的 HTTP 状态。
|
|
106
|
-
* 🔴 **两位在终态帧(`recovered`/`gave_up`)与 `circuit_open` 上按 core 的不变式本就缺席**,
|
|
107
|
-
* 所以这里不写「终态就不透」的特判:该由 `terminal` 位管的事(渲染面不得再接倒计时)已经
|
|
108
|
-
* 有位管了,再加一道按键在场性的特判,等于让本层替上游重述一遍它自己的不变式 —— 上游哪天
|
|
109
|
-
* 改了不变式,特判就成了**本层单方面剥键**。判据锚在真正决定渲染的量(`terminal`)上,
|
|
110
|
-
* 不锚一个恰好同时成立的第二事实([anchor-on-the-deciding-quantity])。
|
|
111
|
-
*/
|
|
112
33
|
const producerTiming = typeof p.retryAtMs === 'number' ? { retryAtMs: p.retryAtMs } : {};
|
|
113
34
|
const failureStatus = typeof p.errorStatus === 'number' ? { errorStatus: p.errorStatus } : {};
|
|
114
|
-
/**
|
|
115
|
-
* core 7.3.0 跟车两位(0.55.0),**原样透传、零重算**,并且**与其它键一样进 `extra`**
|
|
116
|
-
* (= 每个臂都透,不按相位写特判)。理由与上面 `producerTiming`/`failureStatus` 那段逐字同源:
|
|
117
|
-
* core 的不变式说这两位只在 `waiting_first_token` 上在场 —— 但**由 core 说,不由本层复述**。
|
|
118
|
-
* 本层若写「只有 waiting 臂才透 elapsedMs」,上游哪天把它铺到别的相,本层就成了单方面剥键
|
|
119
|
-
* (`task_progress.model` / `retryAtMs` 两次同形存量的病根)。判据锚在真正决定渲染的量
|
|
120
|
-
* (`kind`),不锚一个恰好同时成立的第二事实([anchor-on-the-deciding-quantity])。
|
|
121
|
-
*/
|
|
122
|
-
// 两个进度位是引擎快照(ms):负数 / NaN / Infinity 不是「等了负久」,一律当缺席(0.55.0 发包扫描 [low] 采;
|
|
123
|
-
// 同一包的 eventToSdkMessage 腿对数值位同样只认有限非负数,两条腿同律)。
|
|
124
35
|
const saneMs = (v) => typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : undefined;
|
|
125
36
|
const elapsedMs = saneMs(p.elapsedMs);
|
|
126
37
|
const timeoutMs = saneMs(p.timeoutMs);
|
|
@@ -128,12 +39,9 @@ export function mapBrainStatusToRetry(p, nowMs) {
|
|
|
128
39
|
...(elapsedMs !== undefined ? { elapsedMs } : {}),
|
|
129
40
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
130
41
|
};
|
|
131
|
-
// 🔴 0.68.0(L-246):引擎那句中性提示。**只进 `stalled` 臂** —— 两条 error 臂上它已经是
|
|
132
|
-
// `error.formatted` 的来源,同一句话在同一只读数上出现两次会让端不知道该渲哪一份。
|
|
133
42
|
const stalledDetail = typeof p.detail === 'string' && p.detail.length > 0 ? { detail: p.detail } : {};
|
|
134
43
|
const extra = { ...counts, ...cause, ...producerTiming, ...failureStatus, ...waitProgress };
|
|
135
44
|
switch (p.phase) {
|
|
136
|
-
// 🔴 引擎直报「恢复」:摘行。绝不落 error 臂 —— 那是把成功渲成失败。
|
|
137
45
|
case 'recovered':
|
|
138
46
|
return null;
|
|
139
47
|
case 'reconnecting':
|
|
@@ -147,23 +55,8 @@ export function mapBrainStatusToRetry(p, nowMs) {
|
|
|
147
55
|
...extra,
|
|
148
56
|
error: { formatted: p.detail ?? 'Service temporarily unavailable', isNetworkDown: true },
|
|
149
57
|
};
|
|
150
|
-
// 重试用尽:仍是错误行(与 recovered 反向,绝不许一起归成「结束了 ⇒ 清行」),但**打终态位** ——
|
|
151
|
-
// 实装 core 的 finally 只发 `{phase, detail}`(detail = 'retries exhausted' / 'cancelled while
|
|
152
|
-
// retrying'),既没有计数也没有 retryIn*,所以「不会再重试了」这件事**只能**由本位表达;
|
|
153
|
-
// 靠 attempt===maxRetries 去推是错的(供给方根本不发那两位)。
|
|
154
58
|
case 'gave_up':
|
|
155
59
|
return { kind: 'error', deadline, terminal: true, ...extra, error: { formatted: p.detail ?? '' } };
|
|
156
|
-
/**
|
|
157
|
-
* 🔴 core 7.3.0 / #530 加的第七相 —— 等第一个 token。**必须在 default 臂之前落自己的 kind**:
|
|
158
|
-
* 这一相走到 `default:` 就是本 bug 的根因(B-003 / L-108①)——「模型正在生成前的静默」被投成
|
|
159
|
-
* `{kind:'error'}`,壳照 `kind` 渲成错误色的 `API error` 行,用户看到的是「在重试」,而事实是
|
|
160
|
-
* 「在等第一个字」。这不是措辞问题:方向是反的(没有任何一次尝试失败过)。
|
|
161
|
-
*
|
|
162
|
-
* `error: { formatted: '' }` 与 `deadline` 是**兼容位**(见 `RetryStatus` 的 `waiting` 臂顶注):
|
|
163
|
-
* 老宿主的 else 臂据它们渲出与 0.54.0 **逐字节相同**的那一行 ⇒ 加员对未跟车的端零行为差异、
|
|
164
|
-
* 零崩渲。`terminal` 永不 stamp —— 首 token 到了 core 补 `recovered`(壳摘行),彻底失败补
|
|
165
|
-
* `gave_up`(壳翻终态错误行),等待本身从来不是终态。
|
|
166
|
-
*/
|
|
167
60
|
case 'waiting_first_token':
|
|
168
61
|
return { kind: 'waiting', deadline, ...extra, error: { formatted: '' } };
|
|
169
62
|
case 'retrying':
|
package/dist/rewindWireCaps.d.ts
CHANGED
|
@@ -1,36 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/rewindWireCaps.ts 逐字搬入(零依赖)。
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* src/sema/rewindWireCaps.ts — PURE CC Rewind (E18) field projection (no deps, testable). seamQuery imports it.
|
|
6
|
-
*
|
|
7
|
-
* Maps the CC /rewind MessageSelector modes → the engine's rewind fields (SDK TaskRequest, core 1.166.0;
|
|
8
|
-
* resumeAtMode: core 1.292 [833]):
|
|
9
|
-
* both = { resumeAt, resumeAtMode:"before", rewindFiles:true } fork BEFORE the user message + tree
|
|
10
|
-
* conversation = { resumeAt, resumeAtMode:"before" } fork BEFORE the user message only
|
|
11
|
-
* code = { rewindFilesTo } restore the tree only, NO conversation fork (no setLeafId)
|
|
12
|
-
* The target is a USER-MESSAGE SessionTreeEntry.id (server anchors user-message boundaries). Plus the per-turn
|
|
13
|
-
* CAPTURE stamp (rewindFiles:true on a normal turn) so the engine snapshots the tree (else nothing to restore).
|
|
14
|
-
*
|
|
15
|
-
* resumeAtMode "before"(排他截,core 1.292):CC /rewind 的语义是「回到发这条消息之前」——被选中的
|
|
16
|
-
* user message 回填输入框、从对话里移除;engine 侧对应 setLeafId(entry.parentId)。旧的含目标(inclusive
|
|
17
|
-
* "at")形状会把该 user message 留在引擎历史里 → 模型仍记得(暗号复现 bug)。老 server 未透传该字段时
|
|
18
|
-
* 行为退回含目标(version-safe,无回归——等 server 透传)。
|
|
19
|
-
*/
|
|
20
|
-
/** A one-shot rewind RESTORE instruction (or the per-turn capture stamp) projected onto a request. */
|
|
21
1
|
export interface SeamRewindSpec {
|
|
22
2
|
resumeAt?: string;
|
|
23
|
-
/** core 1.292([833]):"before" = 排他截(setLeafId(entry.parentId));缺省 "at" = 含目标。 */
|
|
24
3
|
resumeAtMode?: 'at' | 'before';
|
|
25
4
|
rewindFiles?: boolean;
|
|
26
5
|
rewindFilesTo?: string;
|
|
27
6
|
}
|
|
28
|
-
/** The CC /rewind restore modes that hit the engine (summarize = compact, handled elsewhere). */
|
|
29
7
|
export type RewindMode = 'both' | 'conversation' | 'code';
|
|
30
|
-
/** Build the engine rewind fields for a chosen mode + target user-message entryId. */
|
|
31
8
|
export declare function rewindSpecForMode(mode: RewindMode, targetEntryId: string): SeamRewindSpec;
|
|
32
|
-
/**
|
|
33
|
-
* PURE projection (no state): an armed one-shot RESTORE wins; else the per-turn CAPTURE stamp (when enabled);
|
|
34
|
-
* else nothing. The caller consumes (clears) the arm after a restore.
|
|
35
|
-
*/
|
|
36
9
|
export declare function projectRewind(pending: SeamRewindSpec | undefined, captureEnabled: boolean): SeamRewindSpec;
|
package/dist/rewindWireCaps.js
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/rewindWireCaps.ts 逐字搬入(零依赖)。
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* src/sema/rewindWireCaps.ts — PURE CC Rewind (E18) field projection (no deps, testable). seamQuery imports it.
|
|
6
|
-
*
|
|
7
|
-
* Maps the CC /rewind MessageSelector modes → the engine's rewind fields (SDK TaskRequest, core 1.166.0;
|
|
8
|
-
* resumeAtMode: core 1.292 [833]):
|
|
9
|
-
* both = { resumeAt, resumeAtMode:"before", rewindFiles:true } fork BEFORE the user message + tree
|
|
10
|
-
* conversation = { resumeAt, resumeAtMode:"before" } fork BEFORE the user message only
|
|
11
|
-
* code = { rewindFilesTo } restore the tree only, NO conversation fork (no setLeafId)
|
|
12
|
-
* The target is a USER-MESSAGE SessionTreeEntry.id (server anchors user-message boundaries). Plus the per-turn
|
|
13
|
-
* CAPTURE stamp (rewindFiles:true on a normal turn) so the engine snapshots the tree (else nothing to restore).
|
|
14
|
-
*
|
|
15
|
-
* resumeAtMode "before"(排他截,core 1.292):CC /rewind 的语义是「回到发这条消息之前」——被选中的
|
|
16
|
-
* user message 回填输入框、从对话里移除;engine 侧对应 setLeafId(entry.parentId)。旧的含目标(inclusive
|
|
17
|
-
* "at")形状会把该 user message 留在引擎历史里 → 模型仍记得(暗号复现 bug)。老 server 未透传该字段时
|
|
18
|
-
* 行为退回含目标(version-safe,无回归——等 server 透传)。
|
|
19
|
-
*/
|
|
20
|
-
/** Build the engine rewind fields for a chosen mode + target user-message entryId. */
|
|
21
1
|
export function rewindSpecForMode(mode, targetEntryId) {
|
|
22
2
|
switch (mode) {
|
|
23
3
|
case 'both':
|
|
@@ -28,10 +8,6 @@ export function rewindSpecForMode(mode, targetEntryId) {
|
|
|
28
8
|
return { rewindFilesTo: targetEntryId };
|
|
29
9
|
}
|
|
30
10
|
}
|
|
31
|
-
/**
|
|
32
|
-
* PURE projection (no state): an armed one-shot RESTORE wins; else the per-turn CAPTURE stamp (when enabled);
|
|
33
|
-
* else nothing. The caller consumes (clears) the arm after a restore.
|
|
34
|
-
*/
|
|
35
11
|
export function projectRewind(pending, captureEnabled) {
|
|
36
12
|
if (pending)
|
|
37
13
|
return { ...pending };
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* runCancelContext — run 记录上 server 自铸的**取消现场**侧记键 `cancelContext`(server ≥7.87.3 `PersistedTaskResult =
|
|
3
|
-
* TaskResult & { cancelContext? }`,`dist/plugins/store-contracts.d.ts` `RunCancelContext` 四座)的三端共用读面,与
|
|
4
|
-
* `turn_aborted{reason:'engine_error'}` 之后「到底是谁把这条 run 结掉的」的**成因判定**(0.74.3 CC-71;cli L-212 (a) 消费半场归包)。
|
|
5
|
-
* sdk 9.7.1 对该键无型 ⇒ 按契约结构读。
|
|
6
|
-
*
|
|
7
|
-
* ── 🔴 读法 ─────────────────────────────────────────────────────────────────────────────────
|
|
8
|
-
* ① `cancelContext` 缺席 = 老 server / 这条 run 不是被取消的 / 记录形不带 —— **不折成「未取消」**,读数是 `not_reported`。
|
|
9
|
-
* ② 四座各自可缺席、各自防御读:`lastEventKind`(串)/ `lastEventAgeMs`(≥0 有限数)/ `elapsedMs`(≥0 有限数;绝不折 0)/
|
|
10
|
-
* `lastBrainStatus`(对象,原样带出不窄读)。「有 age 无 kind」是合法读数。
|
|
11
|
-
* ③ 成因判定 {@link classifyRunAbortCause}:只由 run 记录上的**机读证据**得出 —— `errorCode` ∈ 取消码 ⇒ `cancelled_by_user`;
|
|
12
|
-
* `cancelContext` 在场而码不是取消码 ⇒ 仍按码判(现场只是附注);码缺席 / 认不出 ⇒ `unknown`。**缺席不猜**。
|
|
13
|
-
*/
|
|
14
|
-
/** 四座读数(在场才带)。 */
|
|
15
1
|
export interface RunCancelContextView {
|
|
16
2
|
readonly lastEventKind?: string;
|
|
17
3
|
readonly lastEventAgeMs?: number;
|
|
@@ -24,7 +10,6 @@ export type RunCancelContextReading = {
|
|
|
24
10
|
kind: 'present';
|
|
25
11
|
context: RunCancelContextView;
|
|
26
12
|
};
|
|
27
|
-
/** run 记录(`runs.get` 回体 / `done.result`)→ 取消现场读数;记录非对象 ⇒ `undefined`(判不出,与 not_reported 分开)。 */
|
|
28
13
|
export declare function readRunCancelContext(record: unknown): RunCancelContextReading | undefined;
|
|
29
14
|
import { type RunTerminalRead } from './runTerminal.js';
|
|
30
15
|
export type RunAbortCause = {
|
|
@@ -34,16 +19,12 @@ export type RunAbortCause = {
|
|
|
34
19
|
kind: 'engine_error';
|
|
35
20
|
code?: string;
|
|
36
21
|
message?: string;
|
|
37
|
-
}
|
|
38
|
-
/** run 记录仍非终态:流断了而 run 还在(壳这一端的事实,不是 run 的成因)。`status` 原词。 */
|
|
39
|
-
| {
|
|
22
|
+
} | {
|
|
40
23
|
kind: 'run_still_live';
|
|
41
24
|
status?: string;
|
|
42
25
|
} | {
|
|
43
26
|
kind: 'unknown';
|
|
44
27
|
terminal?: RunTerminalRead['kind'];
|
|
45
28
|
};
|
|
46
|
-
/** 取消码常量(server `CANCELLED_CODE` / sdk runs.d.ts 逐字)。 */
|
|
47
29
|
export declare const RUN_CANCELLED_CODE: "cancelled";
|
|
48
|
-
/** 壳带 `engineTaskId` 去 `runs.get` 拿回的记录 ⇒ 成因。只由机读证据得出;缺席不猜。 */
|
|
49
30
|
export declare function classifyRunAbortCause(record: unknown): RunAbortCause;
|
package/dist/runCancelContext.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* runCancelContext — run 记录上 server 自铸的**取消现场**侧记键 `cancelContext`(server ≥7.87.3 `PersistedTaskResult =
|
|
3
|
-
* TaskResult & { cancelContext? }`,`dist/plugins/store-contracts.d.ts` `RunCancelContext` 四座)的三端共用读面,与
|
|
4
|
-
* `turn_aborted{reason:'engine_error'}` 之后「到底是谁把这条 run 结掉的」的**成因判定**(0.74.3 CC-71;cli L-212 (a) 消费半场归包)。
|
|
5
|
-
* sdk 9.7.1 对该键无型 ⇒ 按契约结构读。
|
|
6
|
-
*
|
|
7
|
-
* ── 🔴 读法 ─────────────────────────────────────────────────────────────────────────────────
|
|
8
|
-
* ① `cancelContext` 缺席 = 老 server / 这条 run 不是被取消的 / 记录形不带 —— **不折成「未取消」**,读数是 `not_reported`。
|
|
9
|
-
* ② 四座各自可缺席、各自防御读:`lastEventKind`(串)/ `lastEventAgeMs`(≥0 有限数)/ `elapsedMs`(≥0 有限数;绝不折 0)/
|
|
10
|
-
* `lastBrainStatus`(对象,原样带出不窄读)。「有 age 无 kind」是合法读数。
|
|
11
|
-
* ③ 成因判定 {@link classifyRunAbortCause}:只由 run 记录上的**机读证据**得出 —— `errorCode` ∈ 取消码 ⇒ `cancelled_by_user`;
|
|
12
|
-
* `cancelContext` 在场而码不是取消码 ⇒ 仍按码判(现场只是附注);码缺席 / 认不出 ⇒ `unknown`。**缺席不猜**。
|
|
13
|
-
*/
|
|
14
1
|
function nonNegFinite(v) {
|
|
15
2
|
return typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : undefined;
|
|
16
3
|
}
|
|
17
|
-
/**
|
|
18
|
-
* 记录形两种:顶层 `result`(PersistedTaskResult)或已经是 result 本身。只有 `result` 长得像一份 run 结果(带 terminal / status /
|
|
19
|
-
* cancelContext 任一键)才下钻 —— `TaskResult` 自己也有个 `result` 键(今天是串),哪天成了对象也不该被当成结果记录(test [7702] §七 ④)。
|
|
20
|
-
*/
|
|
21
4
|
function runResultHolder(r) {
|
|
22
5
|
const inner = r.result;
|
|
23
6
|
if (inner === null || typeof inner !== 'object' || Array.isArray(inner))
|
|
@@ -25,12 +8,10 @@ function runResultHolder(r) {
|
|
|
25
8
|
const o = inner;
|
|
26
9
|
return Object.hasOwn(o, 'terminal') || Object.hasOwn(o, 'status') || Object.hasOwn(o, 'cancelContext') ? o : r;
|
|
27
10
|
}
|
|
28
|
-
/** run 记录(`runs.get` 回体 / `done.result`)→ 取消现场读数;记录非对象 ⇒ `undefined`(判不出,与 not_reported 分开)。 */
|
|
29
11
|
export function readRunCancelContext(record) {
|
|
30
12
|
if (record === null || typeof record !== 'object')
|
|
31
13
|
return undefined;
|
|
32
14
|
const r = record;
|
|
33
|
-
// 记录形两种:顶层 `result.cancelContext`(PersistedTaskResult)或已经是 result 本身。
|
|
34
15
|
const holder = runResultHolder(r);
|
|
35
16
|
if (!Object.hasOwn(holder, 'cancelContext') || holder.cancelContext === undefined)
|
|
36
17
|
return { kind: 'not_reported' };
|
|
@@ -52,20 +33,9 @@ export function readRunCancelContext(record) {
|
|
|
52
33
|
},
|
|
53
34
|
};
|
|
54
35
|
}
|
|
55
|
-
// ── 成因判定(闭集四词;cli L-212 (a) 对齐)────────────────────────────────────────────────
|
|
56
|
-
//
|
|
57
|
-
// 字节出处(cli 亲 grep server 7.87.3 dist):
|
|
58
|
-
// · 被取消 = 唯一铸点 `run-cancel-context.js` `mintCancelledResult` ⇒ `terminal:{kind:"failed", code:"cancelled"}`,
|
|
59
|
-
// 且**只有这条路**挂 `cancelContext`;
|
|
60
|
-
// · 引擎错 = `terminal.kind === "failed"` 且 code !== "cancelled";code 是 core 的**开集**(network / brain.* / limits.* …)⇒ 只渲原码,不枚举;
|
|
61
|
-
// · 客户端断连**没有独立字节**:server 走的是 detach / park(durable run 继续跑、在等的 ask 停驻),run 记录不会因此失败 ⇒
|
|
62
|
-
// 它不是 run 的成因,是壳这一端的事实 —— 判法 = run 记录仍非终态(running / queued / suspended / needs_review)⇒ `run_still_live`。
|
|
63
|
-
// · 别的(完成 / 挡住 / 读不出终态词)⇒ `unknown`,不猜。
|
|
64
36
|
import { readRunTerminal } from './runTerminal.js';
|
|
65
|
-
/** 取消码常量(server `CANCELLED_CODE` / sdk runs.d.ts 逐字)。 */
|
|
66
37
|
export const RUN_CANCELLED_CODE = 'cancelled';
|
|
67
38
|
const LIVE_STATUSES = new Set(['running', 'queued', 'suspended', 'needs_review']);
|
|
68
|
-
/** 壳带 `engineTaskId` 去 `runs.get` 拿回的记录 ⇒ 成因。只由机读证据得出;缺席不猜。 */
|
|
69
39
|
export function classifyRunAbortCause(record) {
|
|
70
40
|
if (record === null || typeof record !== 'object')
|
|
71
41
|
return { kind: 'unknown' };
|
|
@@ -79,12 +49,8 @@ export function classifyRunAbortCause(record) {
|
|
|
79
49
|
}
|
|
80
50
|
return { kind: 'engine_error', ...(read.code !== undefined ? { code: read.code } : {}), ...(read.message !== undefined ? { message: read.message } : {}) };
|
|
81
51
|
}
|
|
82
|
-
// 非终态 = run 还活着:嵌套 paused 臂 / 平面 paused 词 / 行上 status 仍是在飞词(平面读器对 running / queued 答 unknown{word},
|
|
83
|
-
// 那不是「读不出」,是「还没结」—— 所以先看 status 再落 unknown)。
|
|
84
52
|
if (read !== null && read.kind === 'paused')
|
|
85
53
|
return { kind: 'run_still_live', ...(status !== undefined ? { status } : {}) };
|
|
86
|
-
// 异源复审 R2 [medium]:result 已是终态(completed / blocked)而行上 status 还是在飞词 = 两处证据矛盾 ⇒ unknown(带观测到的终态词),
|
|
87
|
-
// 不按外层 status 说「还活着」——result 是终局记录,行状态可能滞后;矛盾不是 liveness 的证据。
|
|
88
54
|
if ((read === null || read.kind === 'unknown') && status !== undefined && LIVE_STATUSES.has(status))
|
|
89
55
|
return { kind: 'run_still_live', status };
|
|
90
56
|
return { kind: 'unknown', ...(read !== null ? { terminal: read.kind } : {}) };
|