@sema-agent/client-core 0.77.1 → 0.78.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 +42 -1
- package/README.md +6 -5
- 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 +3 -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 +23 -371
- package/dist/hitl/persistedRulesWire.js +62 -329
- 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 +1 -249
- package/dist/request/taskRequest.js +20 -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 +78 -5
- package/package.json +3 -3
|
@@ -1,318 +1,73 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B6 批搬迁(2026-07-27,设计稿 §3 B6 + §2.5 拆缝表):cli `src/sema/fleetClient.ts` 的
|
|
3
|
-
* **帧消费半场** —— `applyFrame` 的帧体 upsert + own/foreign 判别 + `recordOwnEngineRun` /
|
|
4
|
-
* `recordBgParentRun` / `recordBgTerminalFacts` 台账三写 + `retained` 终态留存池 + 帧间时钟
|
|
5
|
-
* 补偿 + 模块级 bg 读面(`readEngineActiveBgTasks` / `isFleetSessionScoped`)。
|
|
6
|
-
*
|
|
7
|
-
* 留在 TUI(设计稿 §2.4.2-B):`AgentClient` 构造与 consume/重连循环 · `main` 合成行 ·
|
|
8
|
-
* `selection` 游标 · `viewed` 的所有者(AppState)· `SEMA_DEBUG_FILE` 行字段落盘探针 ·
|
|
9
|
-
* hook_notice 的**写 store** 半场(判定在 notifications.ts,本文件只做分发)。
|
|
10
|
-
*
|
|
11
|
-
* ── B6 三处删债(每条都有直证,不是「看起来能删」)──────────────────────────────────────────
|
|
12
|
-
*
|
|
13
|
-
* 🔴 **P1-4 / `makeSessionScopingFetch` 退役**:壳里为了给 fleet 流塞 `?session=` 注了一个自定义
|
|
14
|
-
* `fetch`(fleetClient.ts:201-227,注入点 :604)—— 归属过滤是最不该留在端上的东西。SDK 0.0.117
|
|
15
|
-
* `fleet.stream({ session })` / `fleet.snapshot({ session })` 已是一等参数(`resources/fleet.d.ts`
|
|
16
|
-
* 实读),本包出 `fleetStreamOptions()` 直接给出那个参数,**壳侧删掉整个 fetch 包装器**。
|
|
17
|
-
*
|
|
18
|
-
* 🔴 **G12 / `rowSessionTag` 整条删(比任务书说的更彻底,附直证)**:任务书写「ownerSessionId /
|
|
19
|
-
* rootSessionId 防御读删」。实测 server **1.291.0** `dist/http/server.js` 的 `streamFleet`:
|
|
20
|
-
* ```js
|
|
21
|
-
* const stripT = (r) => { const { scope: _s, sessionId: _sid, ...rest } = r; … }
|
|
22
|
-
* const stripW = (r) => { const { scope: _s, sessionId: _sid, ...rest } = r; … }
|
|
23
|
-
* ```
|
|
24
|
-
* ⇒ task/workflow **行**上 `scope` 与 `sessionId` **双双被剥**,而 `rootSessionId`/`ownerSessionId`
|
|
25
|
-
* 在 `FleetTaskRow`/`FleetWorkflowRow` 里**从来就不存在**(server 自己的 `fleet-bus.d.ts` 实读)。
|
|
26
|
-
* ⇒ `rowSessionTag(row)` 三个键**全部恒 undefined**,整条腿是死的 —— 不是「删两个键留一个」。
|
|
27
|
-
* 后果方向核过:这条腿在 `ownTaskRow` 里是**放行**位(命中即判 own),死 ⇒ 从不放行 ⇒ 删掉
|
|
28
|
-
* **零可观测差异**(其余两腿:祖链 own-run 台账 / `sessionScoped` 让位,原样保留)。
|
|
29
|
-
* ⚠️ 对照:`bg_notification` 帧上 server 只剥 `ownerScope`/`ownerSessionId`,**`rootSessionId`
|
|
30
|
-
* 与 `sessionId` 照发** ⇒ 通知臂的 `ownByRoot` 那条腿**是活的,保留**。同一个名字两条腿、
|
|
31
|
-
* 一死一活 —— 这正是「判据锚在决定结果的量上」要求逐条核而不是按名字一刀切的地方。
|
|
32
|
-
*
|
|
33
|
-
* 🔴 **G19 / 一次性快照**:`fleet.snapshot({session})` 已是 SDK 一等 verb(开流→取 snapshot 帧→
|
|
34
|
-
* 关流封装),壳的 `engineBgProbe.ts:8-9` 自述「引擎 fleet 面只有 SSE,没有一次性口」已过期。
|
|
35
|
-
* 本包出 `fleetSnapshotOptions()`;`engineBgProbe` 的手抄开流即断由壳侧换 verb(见交接报告)。
|
|
36
|
-
*
|
|
37
|
-
* ── design/285(P-31 正位解,批 0+1)—— per-stream ingress + epoch ──────────────────────────────
|
|
38
|
-
* `fleetStreamOptions()` / `fleetSnapshotOptions()` 是 **module 级、只认默认槽会话**的形,对单会话
|
|
39
|
-
* 宿主(cli 及今天的三端)**正确**,原样保留。keyed 多会话宿主不给它们加 `*For` 兄弟 —— 一个
|
|
40
|
-
* module 级 keyed helper 与 ledger 的绑定状态**互不可见**,会造出两条互斥的假象(用 B 参数开了 B 流
|
|
41
|
-
* 而 ledger 显示未绑定 / 调了 helper 却把返回值丢掉而 ledger 显示已绑定):它测的是「你调了哪个
|
|
42
|
-
* helper」,不是「流是按哪个 key 开的」。
|
|
43
|
-
* ⇒ **keyed 开流参数的唯一正身 = `ledger.issueStream()` 发的 ingress**:它在开流那一刻**一次性捕获**
|
|
44
|
-
* `{sessionKey, session, epoch}` 并且**帧只能经它进入 ledger**,于是「绑定」不再是一句声明,而是
|
|
45
|
-
* 帧真正走过的那条通道。重连 = 新 ingress + epoch+1,旧 ingress 的迟到帧丢弃并计数
|
|
46
|
-
* (`droppedStaleIngress`)—— 结构性堵死「{旧 runId, 新 session}」这类错组合。
|
|
47
|
-
* snapshot 走**独立 ingress**,绝不改写 stream 锚。
|
|
48
|
-
* 🔴 本设计**挡不住**宿主把 A 会话的流喂进 B 的 ingress —— 所以可信谓词**按臂拆分**:内容自校的
|
|
49
|
-
* `own_root` 解封,零内容自校的 `server_fail_closed` 在 keyed 上恒封顶。见
|
|
50
|
-
* {@link BgNotificationAcceptEvidence} 与 `docs/INTEGRATION-CLIENTS.md` §7c P-31。
|
|
51
|
-
*
|
|
52
|
-
* ── 单实例纪律(REF-CC-044,fleet2-06:per-sessionKey 化,W1/design/161 同款原语)────────────────
|
|
53
|
-
* `liveBgViews` 是 module 级 `Map<sessionKey, Set<LiveBgView>>`:写者 = 每个 `createFleetLedger()`
|
|
54
|
-
* (登记进自己的 `opts.sessionKey`,零参 = `DEFAULT_SESSION_KEY`),读者 = 引擎温切门
|
|
55
|
-
* (`readEngineActiveBgTasks[For]`)与代际让位读面(`isFleetSessionScoped[For]`)。同一 sessionKey
|
|
56
|
-
* 两份实例 = 温切门恒读空 ⇒ respawn 会静默杀掉在飞 bg 子代;per-session 化同时堵住了跨会话污染
|
|
57
|
-
* (A 会话的 `clearAllRetainedFleetRows` 不该清掉 B 会话的池,B 断线也不该把 A 标 fresh)。
|
|
58
|
-
*/
|
|
59
1
|
import type { FleetFrame, FleetTaskRow, FleetWorkflowRow } from '@sema-agent/sdk';
|
|
60
2
|
import { type FleetTaskView, type FleetWorkflowView, type ProjectTasksOptions } from './fleetProjection.js';
|
|
61
|
-
/** 终态行留存宽限窗(187 的 agents 页把完成会话留在列表;窗过即净,防长会话堆行)。 */
|
|
62
3
|
export declare const TERMINAL_RETAIN_MS = 60000;
|
|
63
4
|
export interface EngineActiveBgTask {
|
|
64
5
|
id: string;
|
|
65
6
|
name?: string;
|
|
66
7
|
status: string;
|
|
67
|
-
/** fleet 行的 parentId(spawn 该子代的 run 行 id;顶层 run 行缺席)—— killed 残局合成通知的
|
|
68
|
-
* own/foreign 判别用。 */
|
|
69
8
|
parentId?: string;
|
|
70
|
-
/**
|
|
71
|
-
* 🔴 #242 批 3(E4-7 解耦,design-242 §2.2-5):true = 该行由 **belt(终态通知)退休**、且仍在
|
|
72
|
-
* `TERMINAL_RETAIN_MS` 窗内。行帧车道**没有**为它 settle 过(终态行帧丢失,状态由通知车道推定)。
|
|
73
|
-
* 语义与消费纪律:
|
|
74
|
-
* · 这行**按在飞计**是保守默认(在读面里出现 ⇒ 温切/升级门 defer)——通知车道没有代际号,
|
|
75
|
-
* 误退休(旧周期回声退休了复活行)不可排除,而「多等一窗可恢复,杀错在跑子代不可恢复」;
|
|
76
|
-
* · 消费方**可以自裁**:它的 `status` 是终态词(诚实),带本标 ⇒ 「通知说它完了、行帧没确认」。
|
|
77
|
-
* 🔴 残局 killed 合成(温切 cap 强切 / configDrift respawn)必须**跳过**带本标的行 ——
|
|
78
|
-
* 对一条已 completed 的行合成 killed 通知是谎报;
|
|
79
|
-
* · 窗过(`TERMINAL_RETAIN_MS`)即从读面消失;行帧车道一旦重新开口(终态行帧到达覆盖 /
|
|
80
|
-
* 非终态行帧复活)本标即撤。
|
|
81
|
-
* 行帧车道 settle 的行(终态行帧 + task_remove)**从不**带本标,也从不进这个读面(与旧行为同)。
|
|
82
|
-
*/
|
|
83
9
|
retiredByNotification?: boolean;
|
|
84
10
|
}
|
|
85
11
|
export interface EngineActiveBgReading {
|
|
86
12
|
tasks: EngineActiveBgTask[];
|
|
87
|
-
/** true = 至少一条 fleet 流当前连着(读数新鲜);false = 断线期 last-known(可能 stale)或无 live 源。 */
|
|
88
13
|
fresh: boolean;
|
|
89
14
|
}
|
|
90
|
-
/**
|
|
91
|
-
* server 代际证据读面:任一 live fleet 源的 meta 报过 `sessionScoped=true`。
|
|
92
|
-
* true ⇒ 到达本连接的**行帧**已经过 server 会话过滤,端侧行级 own 判别可以让位。
|
|
93
|
-
* 🔴 只覆盖【行帧】:通知帧的 own-run 台账判别不看本标,恒开(1.244 对缺 ownerSessionId 的通知
|
|
94
|
-
* 仍广播,fail-closed 是 1.245+)。
|
|
95
|
-
*/
|
|
96
15
|
export declare function isFleetSessionScoped(): boolean;
|
|
97
|
-
/** W1 keyed variant:只看**这一个会话**登记的视图(REF-CC-044)。 */
|
|
98
16
|
export declare function isFleetSessionScopedFor(sessionKey: string): boolean;
|
|
99
|
-
/** 引擎侧在飞 bg 子代读数(union 所有未 dispose 的源,按 row.id 去重)。无 live 源 ⇒ `{[], false}`。 */
|
|
100
17
|
export declare function readEngineActiveBgTasks(): EngineActiveBgReading;
|
|
101
|
-
/** W1 keyed variant(REF-CC-044):只 union **这一个会话**登记的视图,不跨会话泄漏。 */
|
|
102
18
|
export declare function readEngineActiveBgTasksFor(sessionKey: string): EngineActiveBgReading;
|
|
103
|
-
/**
|
|
104
|
-
* 清空**这一个会话**的所有 live 源的终态留存池 —— 会话切换(/clear、REPL 内 resume、fork)信号
|
|
105
|
-
* 一到就调。R7:留存池是渲染层宽限窗,快照臂刻意不清它(重连不该抽走行);但换了会话继续渲上一
|
|
106
|
-
* 会话的终态行(名字 = objective 派生)就是跨会话残影。
|
|
107
|
-
*/
|
|
108
19
|
export declare function clearAllRetainedFleetRows(): void;
|
|
109
|
-
/** W1 keyed variant(REF-CC-044):只清**这一个会话**的池,不广播到别的会话。 */
|
|
110
20
|
export declare function clearAllRetainedFleetRowsFor(sessionKey: string): void;
|
|
111
|
-
/** 测试钩:摘掉所有登记的视图(同进程多组断言之间互不污染)。 */
|
|
112
21
|
export declare function __resetFleetLedgerRegistryForTests(): void;
|
|
113
|
-
/**
|
|
114
|
-
* `client.fleet.stream(...)` 的会话过滤参数。缺席(端未装 SessionPort / 还没有会话 id)⇒ `{}`
|
|
115
|
-
* = principal 级视图,**与 1.37 之前逐字同行为**(不是错误态)。
|
|
116
|
-
*
|
|
117
|
-
* 🔴 **默认槽形**(design/285 §2.1):读的是 `DEFAULT_SESSION_KEY` 槽的 `SessionPort`。单会话宿主
|
|
118
|
-
* (cli 及今天的三端)用它**正确**;**keyed 多会话宿主别用它开流** —— 用
|
|
119
|
-
* `createFleetLedger(hooks, { sessionKey }).issueStream()` 拿 `ingress.options`,那是本包对
|
|
120
|
-
* keyed 开流参数的唯一承诺形(理由见文件头 design/285 段)。
|
|
121
|
-
*/
|
|
122
22
|
export declare function fleetStreamOptions(): {
|
|
123
23
|
session?: string;
|
|
124
24
|
};
|
|
125
|
-
/** G19:`client.fleet.snapshot(...)` 的参数(同上,同为默认槽形;首屏/温切探针用)。
|
|
126
|
-
* keyed 宿主走 `ledger.issueSnapshot(opts)`。 */
|
|
127
25
|
export declare function fleetSnapshotOptions(opts?: {
|
|
128
26
|
timeoutMs?: number;
|
|
129
27
|
}): {
|
|
130
28
|
session?: string;
|
|
131
29
|
timeoutMs?: number;
|
|
132
30
|
};
|
|
133
|
-
/**
|
|
134
|
-
* ingress 的公共面(stream / snapshot 两形共用)。
|
|
135
|
-
*
|
|
136
|
-
* 🔴 **不可变捕获**:`session` 在 `issueStream()`/`issueSnapshot()` 的**那一刻**从本 ledger 的
|
|
137
|
-
* `sessionKey` 槽解析一次,之后**永不重读**(与 owner 台账 tick 腿「开流时一次性捕获,不逐帧
|
|
138
|
-
* 现读」同一条纪律)。
|
|
139
|
-
* 🔴 **帧只能经 ingress 进入 ledger**:这样「这条流是替谁开的」不再是宿主的一句声明,而是帧真正
|
|
140
|
-
* 走过的通道。旧 ingress(重连后 epoch 落后)或已 `close()` 的 ingress 上到达的帧一律丢弃并计
|
|
141
|
-
* `droppedStaleIngress`。
|
|
142
|
-
*/
|
|
143
31
|
export interface FleetIngressBase {
|
|
144
|
-
/**
|
|
145
|
-
* 本 ingress 的会话锚(= `options.session`);`undefined` = principal 级流(该键未装 SessionPort
|
|
146
|
-
* 或端自己还没有会话 id)。
|
|
147
|
-
*
|
|
148
|
-
* 🔴 空锚下 `own_root` **结构性不可能成立** —— 它要拿 `rootSessionId` 与本锚**逐值比对**,没有锚就
|
|
149
|
-
* 比不了(`ownByRoot` 恒 false)。
|
|
150
|
-
* ⚠️ 但 `server_fail_closed` **不受空锚影响**:那一臂的前提是「这条流是替谁开的」,**与本端会话端口
|
|
151
|
-
* 无关**(端可能根本没装 `SessionPort`,而流是宿主自己按别的方式按会话开的)。所以默认槽 + 空锚 +
|
|
152
|
-
* 生产 meta 仍报 `server_fail_closed`(与 0.32.0 逐字同);keyed 上它本来就恒封顶,与锚空不空无关。
|
|
153
|
-
*/
|
|
154
32
|
readonly session: string | undefined;
|
|
155
|
-
/** 发放本 ingress 的 ledger 的会话槽键。 */
|
|
156
33
|
readonly sessionKey: string;
|
|
157
|
-
/** 发放序号(ledger 内单调递增;`issueStream()` 一次 +1,旧 stream ingress 随即作废)。 */
|
|
158
34
|
readonly epoch: number;
|
|
159
|
-
/** 🔴 帧的唯一入口 —— 经本 ingress 进入 ledger,携带本 ingress 的不可变捕获。 */
|
|
160
35
|
applyFrame(frame: FleetFrame): void;
|
|
161
|
-
/** 关闭:此后本 ingress 的 `applyFrame` 全部丢弃并计数(迟到帧不再污染台账)。 */
|
|
162
36
|
close(): void;
|
|
163
37
|
}
|
|
164
|
-
/** `client.fleet.stream(...)` 的 keyed 开流参数 + 帧入口。 */
|
|
165
38
|
export interface FleetIngress extends FleetIngressBase {
|
|
166
|
-
/** 开这条流要用的参数(不可变;本 ingress 生命期内恒定)。 */
|
|
167
39
|
readonly options: {
|
|
168
40
|
readonly session?: string;
|
|
169
41
|
};
|
|
170
42
|
}
|
|
171
|
-
/** `client.fleet.snapshot(...)` 的 keyed 参数 + 帧入口(**独立** ingress,绝不改写 stream 锚)。 */
|
|
172
43
|
export interface FleetSnapshotIngress extends FleetIngressBase {
|
|
173
44
|
readonly options: {
|
|
174
45
|
readonly session?: string;
|
|
175
46
|
readonly timeoutMs?: number;
|
|
176
47
|
};
|
|
177
|
-
/**
|
|
178
|
-
* 🔴 SDK `client.fleet.snapshot(opts)` 的返回形是 **`{tasks, workflows}`,不是帧**(它内部开流→取
|
|
179
|
-
* `snapshot` 帧→关流,`type`/`ts`/`meta` 都在封装里被吞掉)—— 所以 `applyFrame` 那条口接不上它。
|
|
180
|
-
* 本口**直吃那个返回值**并在库内合成 `snapshot` 帧,省掉端手抄一份会漂的帧形。
|
|
181
|
-
*
|
|
182
|
-
* ⚠️ 一次性快照拿不到 `meta` 帧 ⇒ 本 ledger 的 `sessionScoped` / `bgNotifyFailClosed` 两位**不会**被它
|
|
183
|
-
* 填上(诚实:那两位说的是「这条连接」的性质,快照封装里的那条连接已经关了)。要那两位就走 stream。
|
|
184
|
-
*
|
|
185
|
-
* 🔴 **发放那一刻有活流的快照一律不落账**(「活流」含两形:`issueStream()` 发过的 ingress 流,
|
|
186
|
-
* **以及**兼容入口消费、由 `setConnected(true)` 自报的流)(丢弃 + 计 `droppedStaleIngress`,`applyFrame` 同闸;
|
|
187
|
-
* 判据固化在**发放**时,不是落账时现查 —— 否则「流活着时签发 → 快照在路上、流先 `close()` → 落账」
|
|
188
|
-
* 会因 close 把流模式位清零而反而通过闸,而那只快照当初跳过了连接级 meta 复位,会沿用一条**已关连接**
|
|
189
|
-
* 的信任位给自己带回来的行背书):
|
|
190
|
-
* ①两条连接两个写者而本口是无条件 REPLACE —— 「取样之后、落账之前」流又推了一帧时,照落会把更新的行
|
|
191
|
-
* 覆盖回旧值,而 fleet 是 latest-state 总线,没有后续帧保证修回来;②快照连接的行**自带零 scoping
|
|
192
|
-
* 断言**,落进一本正持着别条连接 `sessionScoped=true` 的账里会被那条不相干连接的信任位放行投影。
|
|
193
|
-
* 而 live stream 本身就是「snapshot 先行的 latest-state 总线」,此时再落一份一次性快照零收益。
|
|
194
|
-
* 一次性快照的正当场景(首屏 / 温切探针)本来就发生在**没有 live stream**的时候。
|
|
195
|
-
*/
|
|
196
48
|
applySnapshot(snapshot: {
|
|
197
49
|
tasks: FleetTaskRow[];
|
|
198
50
|
workflows: FleetWorkflowRow[];
|
|
199
51
|
}): void;
|
|
200
52
|
}
|
|
201
|
-
/** REF-CC-047(fleet2-09):hook_notice 具名臂(B2 禁 unknown 出公开面;Extract 同款手法已在
|
|
202
|
-
* 文件内的 `BgNotificationWire` 示范过)。 */
|
|
203
53
|
export type HookNoticeFrame = Extract<FleetFrame, {
|
|
204
54
|
type: 'hook_notice';
|
|
205
55
|
}>;
|
|
206
|
-
/**
|
|
207
|
-
* 🔴 #284:`onBgNotificationAccepted` 的**证据等级** —— 这条通知是**凭哪一条**放行的。
|
|
208
|
-
*
|
|
209
|
-
* 为什么钩子要说这个:四条放行臂的证据强度**不一样**,而旧签名把它们压成一个「已放行」布尔事实,
|
|
210
|
-
* 端因此无法对不同强度的证据分级处置(强证据可直接落库/翻卡,弱证据宜先渲染、别拿它当归属结论)。
|
|
211
|
-
* 判据锚在**实际命中的那条臂**上,不是锚在「有没有 parentTaskId」这类前置条件上。
|
|
212
|
-
*
|
|
213
|
-
* 🔴 **每个词命名的是「放行臂」,不是「归属结论」**(对抗复审两轮收紧:首版把 `own_parent` 写成
|
|
214
|
-
* 「硬证据」、二版只给 `own_root` 挂了会话锚警告,都是过度声称)。强度分档如下 —— 前两格的
|
|
215
|
-
* 会话级读法**带前提**,第三格永远只是进程级,第四格根本不是证据。
|
|
216
|
-
*
|
|
217
|
-
* 🔴 **可信谓词按臂拆分**(design/285 §2.3.3,0.45.0 起;此前是「非默认 `sessionKey` 一律封顶」
|
|
218
|
-
* 这一刀切):两条会话级臂**不同命**,因为它们**自校能力不同**。
|
|
219
|
-
*
|
|
220
|
-
* · `own_root` 是**内容自校臂** —— 拿通知里的 `rootSessionId` 与**本 ledger 的会话锚**逐值比对。
|
|
221
|
-
* 宿主就算把 A 会话的流喂进 B 的 ingress,A 的通知带的是 `rootSessionId = sid-A ≠ sid-B` ⇒ 值不等,
|
|
222
|
-
* 自动拒。所以锚一换成 per-key,这一臂就**真的可信**:
|
|
223
|
-
* · 默认槽(零参装配的单会话宿主)恒可信 —— 与 0.32.0 逐字同;
|
|
224
|
-
* · keyed ledger 上,帧**经 `ledger.issueStream()` 的 ingress** 到达即可信(ingress 在开流那一刻
|
|
225
|
-
* 一次性捕获会话);宿主直喂 `ledger.applyFrame` 的兼容入口上仍**封顶**(没有通道证据)。
|
|
226
|
-
* · `server_fail_closed` **零内容自校** —— 它只读 meta 的两个布尔位,不读任何会话、不比对任何值。
|
|
227
|
-
* **任何**一条 session-bound 流的 meta 都长这样 ⇒ 把 A 流喂给 B 的 ingress 时,A 的每一条通知
|
|
228
|
-
* 都会在 B 上命中这一臂、绕过 `own_root` 与 foreign 门、被标成最强档,而 ingress 证明不了帧的
|
|
229
|
-
* 来源连接。⇒ **keyed ledger 上这一臂恒封顶**,直到上游在 fleet `meta` 帧上回显本连接的
|
|
230
|
-
* session id、本端校验相等为止(在册局限 **P-31** 的残余半场,`docs/INTEGRATION-CLIENTS.md` §7c)。
|
|
231
|
-
*
|
|
232
|
-
* · **会话级证明**:
|
|
233
|
-
* · `server_fail_closed` — server 侧注入路已 fail-closed(meta `bgNotifyFailClosed` ∧ 本连接
|
|
234
|
-
* session-bound):最强,到达即**这条流的**会话,端侧台账判别整体让位([1510])。
|
|
235
|
-
* ⚠️ 这一臂**完全不读会话端口**,它信的就是「这条流是替谁开的」——前提破了它也不会报错,
|
|
236
|
-
* 所以它只在**默认槽**(前提可成立的那一格)出现;
|
|
237
|
-
* · `own_root` — 通知带 `rootSessionId`(委托树 root 宿主会话,固定点语义)=== **本 ledger 的
|
|
238
|
-
* 会话锚**(经 ingress 到达 ⇒ 该 ingress 开流那一刻捕获的会话;兼容入口 ⇒
|
|
239
|
-
* `engineSessionParamFor(sessionKey)` 现读)。
|
|
240
|
-
* · **进程级成员证明**(只证明「本进程曾亲手驱动过这条 run」,🔴 **不区分会话代际**):
|
|
241
|
-
* · `own_parent` — `parentTaskId`(spawn 该子代的 leader run)∈ 本端 own-run 台账。台账真源
|
|
242
|
-
* `subagentContentStore.ownEngineRuns` 是**进程级 `Set`、按会话零分区**(它自己的头注:
|
|
243
|
-
* 「进程内存态,壳重启即空」),所以 `/clear` 或换会话之后,**旧会话**登记的 run 仍然命中
|
|
244
|
-
* —— 这正是在册局限 **P-13**(`docs/INTEGRATION-CLIENTS.md` §7c)在通知面的同一张脸。
|
|
245
|
-
* ⇒ 端不得把它当作「属于当前会话」的证明;要按会话归属做事,自注入会话粒度的 own-run
|
|
246
|
-
* 判据(P-13 给的出路),或只认上面那两格。
|
|
247
|
-
* · **封顶词(非证据)**:
|
|
248
|
-
* · `session_anchor_untrusted` — 会话级臂放行了,但**那一臂在本 ledger 上不可自校**。今天恰有
|
|
249
|
-
* 两格产出它:①keyed ledger 上的 `server_fail_closed`(结构性,零内容自校);②keyed ledger
|
|
250
|
-
* **未经 ingress**(宿主直喂 `ledger.applyFrame`)时的 `own_root`。不冒充前两格,也不谎标
|
|
251
|
-
* `own_parent`(经会话级臂放行的帧,其 `parentTaskId` 可能是 foreign —— 标进程成员比错标会话
|
|
252
|
-
* 更糟)、不标 `absent_parent`(键可能在场)。端按非证据档自裁。
|
|
253
|
-
* 🔴 单会话宿主(默认槽)**结构性不出现此词**。
|
|
254
|
-
* · **非证据**:
|
|
255
|
-
* · `absent_parent` — 通知**没带** `parentTaskId`:🔴 **这不是证据,是 absent-放行姿势**
|
|
256
|
-
* (老引擎/老帧形不带该键,fail-closed 会把自家通知整批吞掉,故按放行处理)。端要拿归属做
|
|
257
|
-
* 有副作用的事(落库、跨会话搬运、翻别人的卡)时,这一格应当自裁为「未证明」。
|
|
258
|
-
*
|
|
259
|
-
* 臂序 = `applyBgNotification` 放行判据的求值序,**但只在「成立 ∧ 可信」的会话级臂之间排序**
|
|
260
|
-
* (0.45.0 收紧):生产 meta 组合下两位恒 true,若无条件先报 `server_fail_closed`,keyed 车道就
|
|
261
|
-
* **永远走不到** `own_root` —— 哪怕内容自校(`rootSessionId` === 本锚)已经成立。那等于把一条真的
|
|
262
|
-
* 会话级证明扔掉换一个封顶的非证据词。规矩:第一条**成立且可信**的会话级臂胜出;一条都没有而至少
|
|
263
|
-
* 有一条成立 ⇒ 封顶词 `session_anchor_untrusted`;🔴 **绝不下探到 `own_parent`**(会话级臂放行的帧
|
|
264
|
-
* 没验过 `parentTaskId ∈ own-run 台账`,报进程成员就是谎报)。
|
|
265
|
-
* 开集只在本包加臂时扩,端按未知词兜底(`default` 当 `absent_parent` 一档处理最安全)。
|
|
266
|
-
*/
|
|
267
56
|
export type BgNotificationAcceptEvidence = 'server_fail_closed' | 'own_root' | 'session_anchor_untrusted' | 'own_parent' | 'absent_parent';
|
|
268
|
-
/**
|
|
269
|
-
* 0.74.0 —— 一条 fleet 行**离场**(`task_remove` 帧)的读口载荷。
|
|
270
|
-
* 🔴 离场**不是终局证据**:`task_remove` 在任何形态下都只说「这一行离场了」,结算的属主在 durable 侧;
|
|
271
|
-
* 要终局去读 run 面,本包不据它 settle。`removeReason`(开集原词;今天只有 `orphaned`)与 `cycleSeq`
|
|
272
|
-
* (被退那一代的代际号)**在场才带**,缺席不编。
|
|
273
|
-
*/
|
|
274
57
|
export interface FleetTaskRemoval {
|
|
275
58
|
readonly id: string;
|
|
276
59
|
readonly removeReason?: string;
|
|
277
60
|
readonly cycleSeq?: number;
|
|
278
|
-
/** 只在这条退场帧退的是**前一代**、而账本里这一行已经是更新的一代时在场:前代迟到帧,**行没有被删**。 */
|
|
279
61
|
readonly stale?: true;
|
|
280
|
-
/** 只在账本里本来就没有这一行时在场(晚连接者收到的退场帧;端可以直接忽略)。 */
|
|
281
62
|
readonly unknownRow?: true;
|
|
282
63
|
}
|
|
283
64
|
export interface FleetLedgerHooks {
|
|
284
|
-
/**
|
|
285
|
-
* 0.74.0 —— `task_remove` 帧的读口(见 {@link FleetTaskRemoval})。不给 = 行为逐字同旧(只删行)。
|
|
286
|
-
* 回调抛错被吞(fail-soft):宿主的渲染 bug 不许打断账本。
|
|
287
|
-
*/
|
|
288
65
|
onTaskRemoved?(removal: FleetTaskRemoval): void;
|
|
289
|
-
/**
|
|
290
|
-
* hook_notice 帧的**写 store** 半场(判定在 `classifyHookNoticeFrame`,本台账只做分发)。
|
|
291
|
-
* 返回值忽略;不给 = 该帧被静默丢弃(端没有承载面时的正确行为)。
|
|
292
|
-
*/
|
|
293
66
|
onHookNotice?(frame: HookNoticeFrame, sessionScoped: boolean): void;
|
|
294
|
-
/**
|
|
295
|
-
* 🔴 #242 批 3(design-242 §2.2-3,壳侧 fleetClient「长线正解已记账:请 client-core 在归属判定
|
|
296
|
-
* **通过之后**给一个 accepted 钩子,壳改接它」的兑现):`bg_notification` 帧经本台账的
|
|
297
|
-
* own/foreign 判别(serverFailClosed / ownByRoot / parentTaskId ∈ own-run 台账)**放行之后**回调。
|
|
298
|
-
* · 被隔离丢弃(foreign)/畸形早退的通知**不**回调 —— 钩子的语义就是「归属判定已通过」;
|
|
299
|
-
* · 终态与非终态通知都回调(状态筛选归消费方);
|
|
300
|
-
* · `rowIds` = 到达时刻 live 集里按键域(整行 id + 尾段)命中的行 id(可能为空 = 行帧车道
|
|
301
|
-
* 没有这行;可能多条 = server 双生行)。快照取在退休动作**之前**;
|
|
302
|
-
* · `evidence`(#284,additive 第三参)= **凭哪一条臂放行的**,见
|
|
303
|
-
* {@link BgNotificationAcceptEvidence} —— 四条臂证据强度不同,`absent_parent` 尤其**不是
|
|
304
|
-
* 归属证明**。两参消费方(0.31.0 形)零改动照旧;
|
|
305
|
-
* · 钩子抛错不拆台账(try/catch + debug 留痕),与帧消费循环隔离。
|
|
306
|
-
* 端从此**零归属逻辑、零复刻**(壳侧 meta 两位门 [cross-repo-fix-at-source] 同批整条删)。
|
|
307
|
-
*/
|
|
308
67
|
onBgNotificationAccepted?(n: FleetBgNotificationWire, rowIds: readonly string[], evidence: BgNotificationAcceptEvidence): void;
|
|
309
68
|
}
|
|
310
|
-
/** REF-CC-044(fleet2-06)/REF-CC-039(fleet2-01):`createFleetLedger` 的可选装配位。 */
|
|
311
69
|
export interface CreateFleetLedgerOptions {
|
|
312
|
-
/** per-session 注册键(W1 同款;多会话宿主每会话一份,零参 = `DEFAULT_SESSION_KEY`)。 */
|
|
313
70
|
sessionKey?: string;
|
|
314
|
-
/** 本地接收时钟注入(测试用确定性时钟;默认 `Date.now`)。REF-CC-039:帧到达时刻的**单一铸点**,
|
|
315
|
-
* 绝不能用 wire 上的 server 时刻(`frame.ts`)顶替 —— 两个不同时钟域的算术是缺陷,不是特性。 */
|
|
316
71
|
nowFn?: () => number;
|
|
317
72
|
}
|
|
318
73
|
export interface FleetLedgerStatus {
|
|
@@ -323,94 +78,31 @@ export interface FleetLedgerStatus {
|
|
|
323
78
|
bgNotifyFailClosed: boolean;
|
|
324
79
|
taskCount: number;
|
|
325
80
|
workflowCount: number;
|
|
326
|
-
/** REF-CC-051(fleet2-13):畸形帧/通知早退的留痕计数(C5 静默丢数据零容忍)。 */
|
|
327
81
|
droppedMalformed: number;
|
|
328
|
-
/** 🔴 [2393] notif-F12(2026-08-03 全窗复审):REF-CC-051 只补了「畸形」一类,补完之后新的不
|
|
329
|
-
* 对称是 —— `default:` 未知帧型这条**同样会丢数据**的路径连一行 debug 都没有,而策略性丢弃
|
|
330
|
-
* (foreign/unowned)有 debug 却无计数。三条丢弃路径现在三个方向都可读:
|
|
331
|
-
* · `droppedUnknownFrame` = 未知帧型(开集,**正当**;>0 = 上游发了本端还不认识的帧型,
|
|
332
|
-
* 是提货信号,不是错误);
|
|
333
|
-
* · `droppedForeignBgNotification` = 隔离优先丢弃的外来 bg 通知(**正当但需可查**:
|
|
334
|
-
* 判别锚一旦错了,自家通知会整批落进这一格)。 */
|
|
335
82
|
droppedUnknownFrame: number;
|
|
336
83
|
droppedForeignBgNotification: number;
|
|
337
|
-
/**
|
|
338
|
-
* design/285 批 1 additive 三键 —— 会话锚的可观察面(黑盒判据的着力点)。
|
|
339
|
-
*
|
|
340
|
-
* `sessionAnchorEpoch` = stream ingress 的发放序号;**`0` = 不在流模式** —— 从未 `issueStream()`,
|
|
341
|
-
* **或当代 stream 已 `close()`**(两者都不在流模式,读面不必也不该把它们分开)。
|
|
342
|
-
*
|
|
343
|
-
* `sessionAnchor` = 本 ledger 此刻的**判据 / 内容所属**会话锚,**三态**:
|
|
344
|
-
* ① 有 live stream ⇒ 该 ingress 开流那一刻捕获的会话(它的帧就按这个判);
|
|
345
|
-
* ② 不在流模式但**账里有内容** ⇒ 内容归属锚 —— 绝不改报一个还没被用过的现读值,否则
|
|
346
|
-
* 「`close()` 之后槽会话轮换」那一刻本读面就会报新会话而账里装的还是旧会话的行;
|
|
347
|
-
* ③ 空账 + 不在流模式 ⇒ 兼容入口下一帧会**现读**的那个值。
|
|
348
|
-
* `undefined` = 该键未装 `SessionPort` / 端还没有会话 id。
|
|
349
|
-
* ⚠️ 只有第③态会真的去读端口(与兼容入口判据同一次取值口径),该键未装 `SessionPort` 时照常计
|
|
350
|
-
* miss —— 那正是 `hostPortMissesFor(sessionKey)` 该报的事,不是本读面的副作用。
|
|
351
|
-
*/
|
|
352
84
|
sessionAnchor: string | undefined;
|
|
353
|
-
/** stream ingress 的发放序号;**0 = 不在流模式**(从未 `issueStream()`,或当代 stream 已 `close()`)。 */
|
|
354
85
|
sessionAnchorEpoch: number;
|
|
355
|
-
/**
|
|
356
|
-
* 迟到帧丢弃计数,三形共用一个量:①旧 epoch 的 ingress(重连后);②已 `close()` 的 ingress;
|
|
357
|
-
* ③**有 live stream 时到达的快照帧**(两个写者 + 无条件 REPLACE 会把更新的行覆盖回旧值;而且快照
|
|
358
|
-
* 连接的行自带零 scoping 断言,不该被另一条连接的信任位放行 —— 详见 `applySnapshot` 顶注)。
|
|
359
|
-
*/
|
|
360
86
|
droppedStaleIngress: number;
|
|
361
87
|
}
|
|
362
88
|
export interface FleetLedger {
|
|
363
|
-
/**
|
|
364
|
-
* 消费一帧(consumer-side active-set update-in-place / remove)。
|
|
365
|
-
*
|
|
366
|
-
* 🔴 **兼容入口**(design/285 §3.1):单会话默认槽宿主的既有姿势,语义逐字不变(`epoch` 记 0 =
|
|
367
|
-
* 「未经 ingress」,会话锚走 `engineSessionParamFor(sessionKey)` 现读)。**keyed 多会话宿主只许用
|
|
368
|
-
* `issueStream()` 的 ingress** —— 走这条入口的 keyed ledger 上,会话级臂一律封顶
|
|
369
|
-
* (没有通道证据,见 {@link BgNotificationAcceptEvidence})。
|
|
370
|
-
*/
|
|
371
89
|
applyFrame(frame: FleetFrame): void;
|
|
372
|
-
/**
|
|
373
|
-
* 开一条新 stream ingress(design/285 批 1):解析本 ledger `sessionKey` 槽的会话并**一次性捕获**,
|
|
374
|
-
* `epoch` +1,**旧 stream ingress 随即作废**(其上的迟到帧丢弃并计 `droppedStaleIngress`)。
|
|
375
|
-
*
|
|
376
|
-
* 宿主用法(keyed 开流的单一正道):
|
|
377
|
-
* ```ts
|
|
378
|
-
* const ingress = ledger.issueStream()
|
|
379
|
-
* const stream = client.fleet.stream({ ...ingress.options, signal })
|
|
380
|
-
* for await (const frame of stream) ingress.applyFrame(frame)
|
|
381
|
-
* ingress.close()
|
|
382
|
-
* ```
|
|
383
|
-
*/
|
|
384
90
|
issueStream(): FleetIngress;
|
|
385
|
-
/** 🔴 **独立** ingress(design/285 §2.3.2):一次探针快照绝不改写正在跑的 stream 锚与 epoch。 */
|
|
386
91
|
issueSnapshot(opts?: {
|
|
387
92
|
timeoutMs?: number;
|
|
388
93
|
}): FleetSnapshotIngress;
|
|
389
|
-
/** 连接态由宿主的 consume 循环告知(台账自己不开流)。 */
|
|
390
94
|
setConnected(v: boolean): void;
|
|
391
|
-
/**
|
|
392
|
-
* 把当前 Map 投影成渲染行。`nowMs` 驱动帧间时钟补偿与留存池过期。
|
|
393
|
-
* `rowFilter` 必填(端专属决策,见 fleetProjection 头注)。
|
|
394
|
-
*/
|
|
395
95
|
project(nowMs: number, opts: ProjectTasksOptions & {
|
|
396
|
-
/** 正在被查看的行不过期(用户读报告中途被抽走=清障变添堵)。 */
|
|
397
96
|
viewingTaskId?: string | undefined;
|
|
398
97
|
}): {
|
|
399
98
|
tasks: FleetTaskView[];
|
|
400
99
|
workflows: FleetWorkflowView[];
|
|
401
100
|
};
|
|
402
101
|
status(): FleetLedgerStatus;
|
|
403
|
-
/** 摘掉模块级读面登记(宿主 dispose 时必调,否则温切门读到僵尸源)。 */
|
|
404
102
|
dispose(): void;
|
|
405
|
-
/** 测试直取:当前 task 行原样(顺序 = 插入序)。 */
|
|
406
103
|
__rowsForTest(): FleetTaskRow[];
|
|
407
104
|
}
|
|
408
105
|
export declare function createFleetLedger(hooks?: FleetLedgerHooks, opts?: CreateFleetLedgerOptions): FleetLedger;
|
|
409
|
-
/**
|
|
410
|
-
* `bg_notification` 帧的通知体 wire 形(SDK `FleetFrame` 联合的具名臂投影)。
|
|
411
|
-
* #242 批 3 起公开导出 —— `FleetLedgerHooks.onBgNotificationAccepted` 的参数型,端(壳/web/桌面)
|
|
412
|
-
* 接钩子要能写出这个签名。开集读纪律不变:键随 SDK 走,消费方防御读。
|
|
413
|
-
*/
|
|
414
106
|
export type FleetBgNotificationWire = Extract<FleetFrame, {
|
|
415
107
|
type: 'bg_notification';
|
|
416
108
|
}>['notification'];
|