@sema-agent/client-core 0.77.0 → 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 +23 -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 +1 -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 +10 -496
- 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 +11 -65
- package/dist/subagent/engineTaskHandleWire.js +20 -131
- 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 +62 -1
- package/package.json +1 -1
package/dist/adapter/types.d.ts
CHANGED
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B3 批搬迁(2026-07-27,多端改造设计稿 §3 B3 / §2.4.1-C):cli `src/seam/adapter/types.ts` 的
|
|
3
|
-
* **运行时半场**搬入(`eventSeq` / `uuid` / `stamp` / `EmitContext`),外加 B3 的两个注入位。
|
|
4
|
-
*
|
|
5
|
-
* 🔴 **这个文件是「拆」不是「整搬」**,拆缝写明(设计稿 §2.5 同款口径):
|
|
6
|
-
* · 搬进来的 = 三个纯函数 + EmitContext(零依赖,浏览器可跑);
|
|
7
|
-
* · **留在壳里的 = 那 8 行 zod 推断型别名**(`z.infer<ReturnType<typeof SDKMessageSchema>>` …,
|
|
8
|
-
* 真源 = 壳内 CC 自带的 `src/entrypoints/sdk/coreSchemas.ts`)。
|
|
9
|
-
* 为什么不搬:① 搬它就得把 coreSchemas.ts(1,996 行 CC 自带 zod)一起 vendor 进本包并新增
|
|
10
|
-
* `zod` 运行时依赖 —— 本包至今 `dependencies: {}`;② 那是 CC 自带文件,本包是**公开 npm 包**;
|
|
11
|
-
* ③ 本仓既定词表来源是 `@sema-agent/agent-types`(全量镜像,非 curation)。
|
|
12
|
-
* ⇒ 壳侧 shim 里 `export type SDKMessage = z.infer<…>` 这几行**原样保留**,壳的消费面看到的
|
|
13
|
-
* 仍然是 zod 推断真身,一个消费点都不换型。本包内部用 agent-types 的同名镜像。
|
|
14
|
-
*
|
|
15
|
-
* 🔴 **两个 `SDKMessage` 不是同一个 symbol**(B1 发现#4,printToolResultFrame.ts 同款记账):
|
|
16
|
-
* 两者都镜像 CC 的同一个 union,但是两条独立的类型来源。本包搬入的三个文件里 `SDKMessage`
|
|
17
|
-
* **只当不透明返回型用**(每个构造点都走 `as unknown as SDKMessage`),所以这个选择在本包内
|
|
18
|
-
* 零后果;真正的接触点在壳侧 shim 那一刻的 tsc —— 报错就是真信号,不许 any 压。
|
|
19
|
-
*
|
|
20
|
-
* ── 以下为原文件头(逐字保留)────────────────────────────────────────────────────────────────
|
|
21
|
-
* Adapter-internal shared types + id-stamp / emit / uuid helpers (T21).
|
|
22
|
-
*
|
|
23
|
-
* The seam runs ONE direction here: downstream `@sema-ai/sdk` `AgentEvent`s
|
|
24
|
-
* (events.ts:14-41) are projected into Claude Code `SDKMessage` arms
|
|
25
|
-
* (coreSchemas.ts:1854 union) that the verbatim-copied REPL renders.
|
|
26
|
-
*
|
|
27
|
-
* Two laws this file pins (contract 02 §0-§1, 08 branding/altitude invariants):
|
|
28
|
-
* - contract-sovereign: the WIRE shape is `AgentEvent`; CC's `SDKMessage` is
|
|
29
|
-
* the *reference shape we reproduce* for the renderer. We DOWN-map (drop
|
|
30
|
-
* fields), never demand the SDK grow.
|
|
31
|
-
* - provider-agnostic: NO Anthropic symbol crosses this seam — no raw
|
|
32
|
-
* `APIAssistantMessage` block array, no `RawMessageStreamEvent` wire, no
|
|
33
|
-
* rate-limit window taxonomy, no `effort`/`fast_mode` vocabulary
|
|
34
|
-
* (events.ts:6-10; contract 02 §5). Those fields are simply never populated.
|
|
35
|
-
*/
|
|
36
1
|
import type { AgentEvent } from '@sema-agent/sdk';
|
|
37
2
|
import type { ModelUsage, SDKMessage } from '@sema-agent/agent-types';
|
|
38
3
|
import type { ChromeEvent } from '../seam.js';
|
|
@@ -40,76 +5,20 @@ export type { ModelUsage, SDKMessage };
|
|
|
40
5
|
export type StampedAgentEvent = AgentEvent & {
|
|
41
6
|
id?: string;
|
|
42
7
|
};
|
|
43
|
-
/** Read the stamped durable seq off an AgentEvent, if present. */
|
|
44
8
|
export declare function eventSeq(ev: AgentEvent): string | undefined;
|
|
45
9
|
export declare function uuid(): string;
|
|
46
|
-
/**
|
|
47
|
-
* 一条被丢弃的引擎帧的**结构化留痕**([C77]①,`EmitContext.onDroppedFrame` 的载荷)。
|
|
48
|
-
* 两个位都取自 `EventProjection` 的 `dropped` 臂原值,包侧不做任何加工:
|
|
49
|
-
* · `type` = 引擎那一帧的 `type`(未知臂/畸形帧的臂名);
|
|
50
|
-
* · `why` = 投影器给的判词(今天是 `unknown_arm` / `malformed` / `turn_end_usage_absent`)。
|
|
51
|
-
* 🔴 第三个词是 **0.68.0 新加**(core 7.17.0 #711 之后 `turn_end.usage` 恒在场 ⇒ 缺席是
|
|
52
|
-
* **契约违约**而不是一条合法形):它是本包第一处「不是渲不出来,而是上游违约」的判词,
|
|
53
|
-
* 正因为 `why` 是开集,宿主不必改型就能收到它。
|
|
54
|
-
* 🔴 **不是**开集枚举:`why` 故意留成 string —— 投影器长出新判词时宿主不该编译不过,
|
|
55
|
-
* 它本来就是「说给人看的一句判词」,不是控制流上的判别位。
|
|
56
|
-
*/
|
|
57
10
|
export interface DroppedFrameInfo {
|
|
58
11
|
readonly type: string;
|
|
59
12
|
readonly why: string;
|
|
60
|
-
/**
|
|
61
|
-
* CC-13(0.69.2,additive):与 `why` 配套的人读判词(= `droppedWhySentence(why)`;开集 why 落缺省句)。
|
|
62
|
-
* 本包铸的载荷恒带;宿主自构造的载荷可缺席 ⇒ 读方 `info.sentence ?? droppedWhySentence(info.why)`。
|
|
63
|
-
*/
|
|
64
13
|
readonly sentence?: string;
|
|
65
14
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Per-stream identity context. `session_id` threads every emitted arm; it is the
|
|
68
|
-
* service-minted sessionId (TaskResult.sessionId / RunReceipt.sessionId) once
|
|
69
|
-
* known, falling back to a locally-minted placeholder before the first reply.
|
|
70
|
-
*/
|
|
71
15
|
export interface EmitContext {
|
|
72
16
|
sessionId: string;
|
|
73
|
-
/** Wall-clock ms when the stream started draining (runStream stamps it once) — the terminal projector
|
|
74
|
-
* derives the CC `duration_ms` from it (P1-5: the wire carries no duration; 0 was a fake constant). */
|
|
75
17
|
startedAtMs?: number;
|
|
76
|
-
/**
|
|
77
|
-
* L-215③(0.65.0)—— **这条流跑在哪个模型上**,由**宿主开流时钉**(与 `sessionId` 同一类:
|
|
78
|
-
* 请求是宿主构造的,模型 id 是它自己写进 `TaskRequest` 的那一个;wire 的内容帧上没有这一格)。
|
|
79
|
-
*
|
|
80
|
-
* 用途:`assistant` 臂的 `message.model` —— CC 的 `SDKAssistantMessage.message` 上本来就有这一位,
|
|
81
|
-
* 而本包此前交给渲染端的是**裸** `{role, content}`,于是宿主十几处消费面只能各自猜。
|
|
82
|
-
* 🔴 **缺席 ⇒ 那一位不铸,绝不猜**:一个猜错的模型名比没有更坏(账单/能力面会拿它去查表)。
|
|
83
|
-
* ⚠️ **它是「这条流声明的模型」,不是「这一轮真正服务的模型」**:mid-run degrade / 网关重路由
|
|
84
|
-
* 不改写它(与 `TaskResult.model` 同一条纪律,core 的 `task_progress.model` 臂注逐字写过)。
|
|
85
|
-
* 要「真正服务的那一个」请读终帧的 `TaskResult.model` / `degraded`。
|
|
86
|
-
*/
|
|
87
18
|
model?: string;
|
|
88
|
-
/**
|
|
89
|
-
* B3 新增(设计稿 §5.2 两条外向边的落点)—— chrome 事件下泄口。runStream 里那两条
|
|
90
|
-
* `import('../../sema/…')` 动态边改走这里:宿主注入一个 sink,库侧只发事件。
|
|
91
|
-
* 缺席 = 该宿主不消费(**语义 = 那个 UI 面在这个宿主上是哑的**,不是报错)。
|
|
92
|
-
*
|
|
93
|
-
* 返回 `Promise` 时 runStream 只在 **cli 原本 await 的那一处** await(plan_review park),
|
|
94
|
-
* 其余点 fire-and-forget —— 与搬迁前的时序逐点对齐,别顺手改成全 await。
|
|
95
|
-
*/
|
|
96
19
|
emitChrome?(event: ChromeEvent): void | Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* [C77]① 新增(协作板 web-client 请托)—— **丢帧留痕的宿主出口**。runStream 的 `dropped` 臂
|
|
99
|
-
* (引擎发了一帧、这个 build 渲不出来)此前只有包侧一行 `console.error`,宿主拿不到结构化的
|
|
100
|
-
* `{type, why}`:web 想把它并进自己的 frame-warnings 面只能去 scrape stderr,而 Ink 宿主
|
|
101
|
-
* 干脆把 console 吞了。形制与上面的 `emitChrome` 同款 —— **可选注入,缺席 = 该宿主不消费**
|
|
102
|
-
* (缺省行为一字不变:仍走那行 console.error)。
|
|
103
|
-
*
|
|
104
|
-
* 语义三条(实现在 `runStream.ts` 的 `reportDroppedFrame`):
|
|
105
|
-
* · **每一条丢帧都发**,不去重 —— 去重是 console 那条腿为了不刷屏才有的;替宿主去重 =
|
|
106
|
-
* 替它撒谎(两条同型丢帧在它的告警面上会变成一条,计数就不是真的了);
|
|
107
|
-
* · 装了 sink ⇒ console 那行**让位**(sink 是更强的通道,两条腿同时喊会打乱 TUI 渲染);
|
|
108
|
-
* · sink 抛错**绝不影响流**,并且痕迹落回 console —— 让位的前提是它真接住了。
|
|
109
|
-
*/
|
|
110
20
|
onDroppedFrame?(info: DroppedFrameInfo): void;
|
|
111
21
|
}
|
|
112
|
-
/** Stamp `uuid` + `session_id` onto a freshly-built arm body. */
|
|
113
22
|
export declare function stamp<T extends {
|
|
114
23
|
uuid?: string | undefined;
|
|
115
24
|
session_id?: string | undefined;
|
|
@@ -117,27 +26,7 @@ export declare function stamp<T extends {
|
|
|
117
26
|
uuid: string;
|
|
118
27
|
session_id: string;
|
|
119
28
|
};
|
|
120
|
-
/**
|
|
121
|
-
* CC-13(0.69.2):段末帧(`text_end` / `reasoning_end`)的**子流身份三键**(sdk `EventIdentity`)。任一在场 =
|
|
122
|
-
* 这条段边界不是 leader 的。此前只在 `adapt/arms.ts` 私有,自建管线的端(print 车道 / 座位层)只能逐字复刻一份;
|
|
123
|
-
* §37y ② 的义务在包,判定也该在包 —— 端改调本判定,别再自铸。住在本文件 = 内核闭包既有文件(portability 棘轮零抬)。
|
|
124
|
-
*/
|
|
125
29
|
export declare const SEGMENT_END_IDENTITY_KEYS: readonly ["parentToolCallId", "sourceTaskId", "bgAgentId"];
|
|
126
|
-
/**
|
|
127
|
-
* CC-13:段末帧是不是子流的(三键任一**在场**)。按「键在不在」判,不按「是不是串」判 —— 坏值已在投影口
|
|
128
|
-
* fail-closed(malformed);这一道是给非投影口喂进来的帧(宿主自建管线 / 重放存量转录)用的。
|
|
129
|
-
* 参数收任意对象(帧型不限;typeshape 纪律:边界层不让 `unknown` 出境)。
|
|
130
|
-
*/
|
|
131
30
|
export declare function isSubFlowSegmentEnd(m: object): boolean;
|
|
132
|
-
/**
|
|
133
|
-
* 身份四键(`eventId` + 三只子流键)的**一次性快照**:每键恰读一次,读取抛错 ⇒ `null`(= 整帧不可信,调用方拒帧)。
|
|
134
|
-
*
|
|
135
|
-
* 🔴 投影口与 adapt 侧的**每一条**读身份的臂都必须走这一只(0.76.1;外部验收方对 0.76.0 的两条发现):
|
|
136
|
-
* 0.76.0 只把投影口换成了一次性快照,adapt 侧的 compaction 臂仍先判子流再取 `parentToolCallId`(读两次),
|
|
137
|
-
* text_end / reasoning_end 的投影更是在同一个表达式里读两次 ⇒ 值随读变的帧让「投影口 → 内部臂」与
|
|
138
|
-
* 「直喂 adapt()」两条路分叉 —— 正是一次性快照要消灭的那一形,却只修了一侧。
|
|
139
|
-
* 读了两次的两个值不能相信任何一个;读一次的那一份,两条路都拿同一份。
|
|
140
|
-
*/
|
|
141
31
|
export declare function snapshotSegmentIdentity(m: object): Record<string, unknown> | null;
|
|
142
|
-
/** 与 {@link isSubFlowSegmentEnd} 同一条判据,但吃的是快照(不再回头读帧)。 */
|
|
143
32
|
export declare function snapshotIsSubFlow(snap: Record<string, unknown>): boolean;
|
package/dist/adapter/types.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
/** Read the stamped durable seq off an AgentEvent, if present. */
|
|
2
1
|
export function eventSeq(ev) {
|
|
3
2
|
return ev.id;
|
|
4
3
|
}
|
|
5
|
-
// ── identity mock-fill (contract 02 §4: AgentEvents are anonymous) ────────────
|
|
6
|
-
// CC SDKMessage arms require `uuid` + `session_id`. The wire drops them, so the
|
|
7
|
-
// adapter mints them client-side. A v4-shaped uuid is sufficient for the
|
|
8
|
-
// renderer's keying; it is NEVER smuggled onto the wire.
|
|
9
4
|
export function uuid() {
|
|
10
|
-
// RFC4122-v4 shape; crypto.randomUUID when available, else a deterministic-enough fallback.
|
|
11
5
|
const g = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;
|
|
12
6
|
if (g && typeof g.randomUUID === 'function')
|
|
13
7
|
return g.randomUUID();
|
|
@@ -17,21 +11,10 @@ export function uuid() {
|
|
|
17
11
|
return v.toString(16);
|
|
18
12
|
});
|
|
19
13
|
}
|
|
20
|
-
/** Stamp `uuid` + `session_id` onto a freshly-built arm body. */
|
|
21
14
|
export function stamp(ctx, body) {
|
|
22
15
|
return { ...body, uuid: body.uuid ?? uuid(), session_id: ctx.sessionId };
|
|
23
16
|
}
|
|
24
|
-
/**
|
|
25
|
-
* CC-13(0.69.2):段末帧(`text_end` / `reasoning_end`)的**子流身份三键**(sdk `EventIdentity`)。任一在场 =
|
|
26
|
-
* 这条段边界不是 leader 的。此前只在 `adapt/arms.ts` 私有,自建管线的端(print 车道 / 座位层)只能逐字复刻一份;
|
|
27
|
-
* §37y ② 的义务在包,判定也该在包 —— 端改调本判定,别再自铸。住在本文件 = 内核闭包既有文件(portability 棘轮零抬)。
|
|
28
|
-
*/
|
|
29
17
|
export const SEGMENT_END_IDENTITY_KEYS = Object.freeze(['parentToolCallId', 'sourceTaskId', 'bgAgentId']);
|
|
30
|
-
/**
|
|
31
|
-
* CC-13:段末帧是不是子流的(三键任一**在场**)。按「键在不在」判,不按「是不是串」判 —— 坏值已在投影口
|
|
32
|
-
* fail-closed(malformed);这一道是给非投影口喂进来的帧(宿主自建管线 / 重放存量转录)用的。
|
|
33
|
-
* 参数收任意对象(帧型不限;typeshape 纪律:边界层不让 `unknown` 出境)。
|
|
34
|
-
*/
|
|
35
18
|
export function isSubFlowSegmentEnd(m) {
|
|
36
19
|
const rec = m;
|
|
37
20
|
for (const k of SEGMENT_END_IDENTITY_KEYS)
|
|
@@ -39,15 +22,6 @@ export function isSubFlowSegmentEnd(m) {
|
|
|
39
22
|
return true;
|
|
40
23
|
return false;
|
|
41
24
|
}
|
|
42
|
-
/**
|
|
43
|
-
* 身份四键(`eventId` + 三只子流键)的**一次性快照**:每键恰读一次,读取抛错 ⇒ `null`(= 整帧不可信,调用方拒帧)。
|
|
44
|
-
*
|
|
45
|
-
* 🔴 投影口与 adapt 侧的**每一条**读身份的臂都必须走这一只(0.76.1;外部验收方对 0.76.0 的两条发现):
|
|
46
|
-
* 0.76.0 只把投影口换成了一次性快照,adapt 侧的 compaction 臂仍先判子流再取 `parentToolCallId`(读两次),
|
|
47
|
-
* text_end / reasoning_end 的投影更是在同一个表达式里读两次 ⇒ 值随读变的帧让「投影口 → 内部臂」与
|
|
48
|
-
* 「直喂 adapt()」两条路分叉 —— 正是一次性快照要消灭的那一形,却只修了一侧。
|
|
49
|
-
* 读了两次的两个值不能相信任何一个;读一次的那一份,两条路都拿同一份。
|
|
50
|
-
*/
|
|
51
25
|
export function snapshotSegmentIdentity(m) {
|
|
52
26
|
const rec = m;
|
|
53
27
|
const snap = {};
|
|
@@ -56,13 +30,10 @@ export function snapshotSegmentIdentity(m) {
|
|
|
56
30
|
snap[k] = rec[k];
|
|
57
31
|
}
|
|
58
32
|
catch {
|
|
59
|
-
// §C1 带理由的吞:读身份键本身抛 = 这一帧连自己是谁都说不出 ⇒ 整帧拒,由调用方决定「丢」的姿势
|
|
60
|
-
// (投影口判 malformed 留痕、adapt 侧零 chrome);再向上抛会从两个入口逸出、打断整条 adapt 流。
|
|
61
33
|
return null;
|
|
62
34
|
}
|
|
63
35
|
return snap;
|
|
64
36
|
}
|
|
65
|
-
/** 与 {@link isSubFlowSegmentEnd} 同一条判据,但吃的是快照(不再回头读帧)。 */
|
|
66
37
|
export function snapshotIsSubFlow(snap) {
|
|
67
38
|
for (const k of SEGMENT_END_IDENTITY_KEYS)
|
|
68
39
|
if (snap[k] !== undefined)
|
|
@@ -1,105 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* backgroundView — design/161 平行入口 `createBackgroundView(client)` 的实现(实现批 A,2026-07-30)。
|
|
3
|
-
*
|
|
4
|
-
* 契约锚 = ./contract.ts(类型已冻结,clay 二裁/终裁):`assistant.tasks` 与 `fleet` 都是**会话外
|
|
5
|
-
* 读面**(assistant 跨 session;fleet 是 idle 壳唯一保持订阅的常驻 SSE),生命周期不绑任何会话的
|
|
6
|
-
* dispose(),所以归一投影在 createAgentSession 之外单开一门。
|
|
7
|
-
*
|
|
8
|
-
* ── 两源两张映射表(第三套中性 7 值词表,不用任一方词表)────────────────────────────────────
|
|
9
|
-
* · assistant(SDK types.d.ts AssistantTask.status,3 值闭集):活跃调度行词表 —— 无终态臂。
|
|
10
|
-
* · fleet(SDK resources/fleet.d.ts FleetTaskStatus,9 值 wire 闭集 / 读侧开)。
|
|
11
|
-
* 两张表各自显式穷举 + `never` 卫兵:上游加词当天**编译红**,不静默落兜底;wire 真发了未知词
|
|
12
|
-
* (更新的 server × 旧 SDK)时走注释里的 open-set 回落 —— 与 workflowClient coerce 族同姿势。
|
|
13
|
-
*
|
|
14
|
-
* ── 拉取姿势(照 workflowClient 0.11.15 的订阅纪律)─────────────────────────────────────────
|
|
15
|
-
* · 轮询(可配 intervalMs 缺省 2000)+ **解析即通知**(首帧不等宿主 tick)+ **订阅即对账**
|
|
16
|
-
* (已解析后订阅同步补一发 —— 配对机制必须共享前提);订阅者抛异常吞;dispose abort 在飞
|
|
17
|
-
* 请求(含 fleet.snapshot 的 SSE 短连)并停循环。
|
|
18
|
-
* · 两源**独立拉取独立降级**:一源挂另一源照常;本源绝不 throw 进宿主。
|
|
19
|
-
* · fleet 快照走 SDK `fleet.snapshot()`(G19 一次性快照 verb:开流取首 snapshot 帧即断 ——
|
|
20
|
-
* fleet 面无独立 REST 快照端点,这是契约形不是绕路)。
|
|
21
|
-
*
|
|
22
|
-
* ── 'not-configured' 判别(诚实缺席纪律)────────────────────────────────────────────────────
|
|
23
|
-
* · fleet:面 gated off 时路由在任何帧之前答 **501**(typed)—— 501 ⇒ 'not-configured',
|
|
24
|
-
* 其它错 ⇒ 'unavailable'(拒绝形分档;错误判型走 controlRouter.errCodes 单源)。
|
|
25
|
-
* · assistant:无 run store 时 worker 回 `{tasks:[]}` **原样透传** —— wire 上与真空不可区分。
|
|
26
|
-
* 能探则探:`GET /v1/capabilities` 的 **`approvals`** 位为 false ⇒ 'not-configured';
|
|
27
|
-
* caps 面自己不可达 ⇒ 判别缺席,**如实回 'ok'**(绝不编造判别)。
|
|
28
|
-
*
|
|
29
|
-
* 🔴 件 3 取证(读错键的定谳,协作板 [C33]③.3 → server [C34],server 3.13.0 已把辖域写进
|
|
30
|
-
* 代码注与 ARCHITECTURE):本实现此前读 `scheduler`,那是**错的键**。
|
|
31
|
-
* · `/v1/assistant/*` 的挂载条件是 `checkpointStore`(server `routes/approvals-assistant.ts:67`
|
|
32
|
-
* 的分支头:`if (deps.checkpointStore && (url.startsWith("/v1/approvals") ||
|
|
33
|
-
* url.startsWith("/v1/assistant")))`),而 caps 里**同一个谓词**的键是 `approvals`
|
|
34
|
-
* (`capabilities.ts:56` `approvals: Boolean(deps.checkpointStore)`)。键名窄(approvals)、
|
|
35
|
-
* 辖域宽(整条 assistant 车道)——按名字猜会猜错,这是上游文档欠账不是消费端不小心。
|
|
36
|
-
* · `scheduler` 是**另一回事**:host 单用户腿的自唤醒 cron 工具(CronCreate/CronDelete/
|
|
37
|
-
* CronList),它对自己承诺的东西是诚实的,与「计划运行视图在不在」无关。
|
|
38
|
-
* · 实测后果(3.7.0 local 形,DB_BACKEND=local 无 DURABLE_APPROVAL):caps.scheduler=true 而
|
|
39
|
-
* `GET /v1/assistant/tasks`=404 ⇒ 面板**永久**渲「Scheduled runs can't be reached right now」。
|
|
40
|
-
* · 🔴 两个看似更省事的修法都**不采**(server [C34] 逐条否掉):(a) 把 404 并进
|
|
41
|
-
* not-configured —— 会吞掉「caps 说有路由却 404」这个真信号(真的漏注册/误删就再也看不见);
|
|
42
|
-
* (b) server 把 checkpointStore 与进 scheduler —— 会污染一个本来准确的键。
|
|
43
|
-
* **判别规则一个字没改,只改读哪个键。**
|
|
44
|
-
* · 🔴 换键**不**收口的残余缺口(照旧候引擎位,本实现不猜):`approvals:true`(checkpointStore
|
|
45
|
-
* 在)而 run store 未配时,worker 仍回 `{tasks:[]}` —— 那份空列表与「真的没有任务」在
|
|
46
|
-
* wire 上依旧同形。要收口需要 wire 长出判别位(caps 或响应信封),不是客户端能推出来的。
|
|
47
|
-
*
|
|
48
|
-
* 字段纪律:缺席=键不在场(undefined),🔴 绝不 `?? 0` / `?? false` / `?? ''`;ISO→epoch ms 只在
|
|
49
|
-
* assistant 行边界转一次(updatedAt/createdAt 同一个转换器,fleet 的 startedAt 本就是 epoch ms
|
|
50
|
-
* 直出);fleet 复合 id("<runId> <taskId>")整串不拆;fleet 子行(parentId 在场)不进 rows
|
|
51
|
-
* (子代不是用户的独立后台任务)。两源的时间锚是**两个不同的量**,各占各的契约位、互不顶替:
|
|
52
|
-
* assistant 给 `createdAtMs`(创建时刻)、fleet 给 `startedAtMs`(launch 时刻)——见 contract.ts
|
|
53
|
-
* 两处逐位说明。fleet 行的 `sessionId`/`scope` 被 server `stripT` 剥掉不上 wire,别在投影里等。
|
|
54
|
-
*
|
|
55
|
-
* ── 📋 下一批工单(件 4 调研,不在本批实现):BackgroundRow 的 canonical stop 能力判别 ────────
|
|
56
|
-
* 起因(协作板 [C33]③.4):web 报「`runs.cancel` 的 id 空间是 taskId,而 fleet 顶层行 id 是 runId、
|
|
57
|
-
* 子行是复合 id」⇒ 他们对 fleet 行**不渲 Stop**(没有已挣得的取消路径就不摆按钮 —— 这个处置本身
|
|
58
|
-
* 是对的,server [C34] 也同意)。主会话裁定:**不是「fleet 行没有停止路径」,而是要按行类型分**。
|
|
59
|
-
* 下一批要落的形状(本批只调研落档,不新建 API):
|
|
60
|
-
* ① **能力判别**应当是行上的一等位(建议 `stop?: { verb, target }` 或等价判别),由包算、端只读
|
|
61
|
-
* —— 端各自判 = 每端一份猜测,正是本批修的那类病。缺席即「本行不可停」,端据此**显隐** Stop。
|
|
62
|
-
* ② **verb × id 映射**(包内既有件,全部已核实):
|
|
63
|
-
* · agent 行(fleet 顶层/子行):`runs.taskStop(hostRunId, handle)`,包内封装 =
|
|
64
|
-
* `src/subagent/engineTaskHandleWire.ts`(`POST /v1/runs/:id/tasks/:handle/stop?session=`)。
|
|
65
|
-
* **handle 取法**:复合 id `"<runId> <taskId>"` 取尾段 = 引擎 taskId —— 包内已有同语义实现
|
|
66
|
-
* `rowIdTail()`(`src/workflow.ts:24`,导出;`src/fleetAgentPanelProjection.ts:94` 有零依赖叶
|
|
67
|
-
* 的私有同款副本);宿主 run 解析走 `getBgParentRun(handle)`(#242 批 3 起台账缺席即诚实缺席,绝不回落活跃 run)。
|
|
68
|
-
* **能力门** = `capabilities.taskHandles`(`src/subagent/engineRowStopGate.ts`
|
|
69
|
-
* `engineTaskHandlesCapable()`),🔴 别 trial-by-404。
|
|
70
|
-
* **回执纪律**(同文件 `engineRowNeedsStopConfirm()`):只有 **200 算停了**;409
|
|
71
|
-
* `stop.not_landed` / `stop.not_local` 一律保持原状(引擎里可能还在跑),端绝不自己翻 killed。
|
|
72
|
-
* · 顶层 durable run 行:`runs.cancel(taskId)`(包内 `controlRouter.cancel`,202 ack)。
|
|
73
|
-
* 🔴 但 **park 住的行不能走它**:suspended/needs_review 行要 cancel-by-DENY
|
|
74
|
-
* (`src/hitl/hitlBridge.ts:283` / `src/hitl/askGateWire.ts:417` 逐字纪律)——
|
|
75
|
-
* 所以「行在等人」(status==='waiting-on-human')时 stop 判别必须映射到决断面而不是 cancel。
|
|
76
|
-
* · workflow 行:**今天包/SDK 面上没有 workflow 的停止 verb** —— 实装 SDK 2.0.0 的
|
|
77
|
-
* `WorkflowsResource` 只有 list/get/journal/stream/steerAgent(逐个核过);而 `runs.d.ts:224`
|
|
78
|
-
* 写着「a workflow handle 404s — stop workflows via their cancel face」,那个 "cancel face"
|
|
79
|
-
* **不在 SDK 公面上**。⇒ 下一批第一步是找 server 把它钉出来(是 `runs.cancel(w* runId)`
|
|
80
|
-
* 还是独立端点),🔴 在拿到 server 的确证之前不许猜、不许在端上摆 Stop。
|
|
81
|
-
* ③ **不可停时端凭什么显隐**:凭①的键缺席,而**不是**凭 status —— 例如 'stopping' 行是「已经在
|
|
82
|
-
* 停」(不该再给 Stop),park 行是「要走决断面」,老引擎无 taskHandles 是「面不在」,三者语义
|
|
83
|
-
* 不同但都落在「不给 Stop」上;把它们压进一个 status 判断会在下一次加词时静默错。
|
|
84
|
-
*/
|
|
85
1
|
import type { AgentClient, AssistantTask, FleetTaskRow, FleetTaskStatus } from '@sema-agent/sdk';
|
|
86
2
|
import type { BackgroundRow, BackgroundSourceHealth, BackgroundStatus, BackgroundView, CreateBackgroundView } from './contract.js';
|
|
87
|
-
/** assistant 3 值 → 中性 7 值。suspended(durable HITL park)与 needs_review(plan_review/dry-run
|
|
88
|
-
* park)都是「引擎停着等人」⇒ 同落 'waiting-on-human'(区分度由行上 gate.kind 携带,不铸新词)。 */
|
|
89
3
|
export declare function backgroundStatusFromAssistant(s: AssistantTask['status']): BackgroundStatus;
|
|
90
|
-
/** fleet 9 值 → 中性 7 值。'waiting'(durable suspend)与 'awaiting approval'(needs-review /
|
|
91
|
-
* plan-approval park)都在等人;'idle' 是「活着但此刻没在推进」—— 中性词表无此臂,按活跃行渲
|
|
92
|
-
* 'running'(诚实取舍:它既不 queued 也不终态,更不是在等人)。 */
|
|
93
4
|
export declare function backgroundStatusFromFleet(s: FleetTaskStatus): BackgroundStatus;
|
|
94
|
-
/** 一行 AssistantTask → BackgroundRow。gate 是 `AssistantGate | null`(wire 显式 null 形)——
|
|
95
|
-
* null 折成键缺席,非 null 原引用透传(契约位是 unknown,包不重构造)。
|
|
96
|
-
* 🔴 [C33]③.1 三键(name / sessionId / createdAtMs)按 wire 在场性投影:缺席=键缺席,绝不
|
|
97
|
-
* `?? 0` / `?? ''` —— 端渲的是「不知道」,不是「0 秒前创建的无名任务」。 */
|
|
98
5
|
export declare function assistantTaskToBackgroundRow(t: AssistantTask): BackgroundRow;
|
|
99
|
-
/** 一行 FleetTaskRow → BackgroundRow;子行(parentId 在场)⇒ null(调用方剔除)。
|
|
100
|
-
* 复合 id 不拆;`currentTool` 契约位是一行字符串 —— 优先 server 已 redact 的 `currentAction`
|
|
101
|
-
* 原文,缺席时从结构化 `currentTool` 合成;`needsAttention` fleet wire 无显式位,从 park 态
|
|
102
|
-
* 推导(awaiting approval / awaitingPlanApproval / waiting),非 park 行键缺席(缺席≠false)。 */
|
|
103
6
|
export declare function fleetTaskToBackgroundRow(r: FleetTaskRow): BackgroundRow | null;
|
|
104
7
|
export interface BackgroundViewInputs {
|
|
105
8
|
readonly assistant: {
|
|
@@ -111,17 +14,8 @@ export interface BackgroundViewInputs {
|
|
|
111
14
|
readonly tasks: readonly FleetTaskRow[];
|
|
112
15
|
};
|
|
113
16
|
}
|
|
114
|
-
/** 纯组合:两源(各带三态健康位)→ BackgroundView。行序 = assistant 先(core 已按 triage 排,
|
|
115
|
-
* 消费方不再排)、fleet 后(帧到达序);非 'ok' 源的行不出(那份列表不是证词);sources 三态
|
|
116
|
-
* 恒在场 —— 源不可用/未配置与「空列表」是三件事,端必须渲它。 */
|
|
117
17
|
export declare function projectBackgroundView(i: BackgroundViewInputs): BackgroundView;
|
|
118
18
|
export interface BackgroundViewOptions {
|
|
119
|
-
/** 轮询间隔(缺省 2000ms)。 */
|
|
120
19
|
readonly intervalMs?: number;
|
|
121
20
|
}
|
|
122
|
-
/**
|
|
123
|
-
* createBackgroundView(client, opts?) — 后台任务归一视图(契约 `CreateBackgroundView`;第二参是
|
|
124
|
-
* 实现旋钮,可选参不缩窄契约形)。生命周期:构造即起后台轮询;`snapshot()` 首解析前 null;
|
|
125
|
-
* `subscribe` 解析即通知 + 订阅即对账;`dispose()` abort 在飞请求、停循环、清订阅。
|
|
126
|
-
*/
|
|
127
21
|
export declare function createBackgroundView(client: AgentClient, opts?: BackgroundViewOptions): ReturnType<CreateBackgroundView>;
|
|
@@ -2,9 +2,6 @@ import { abortableSleep } from '../abortableSleep.js';
|
|
|
2
2
|
import { errCodes } from '../controlRouter.js';
|
|
3
3
|
import { engineWireDebugEnabled } from '../engineWireTarget.js';
|
|
4
4
|
import { hostLog } from '../host.js';
|
|
5
|
-
// ── status 映射表 ×2(显式穷举 + never 卫兵)──────────────────────────────────────────────────
|
|
6
|
-
/** assistant 3 值 → 中性 7 值。suspended(durable HITL park)与 needs_review(plan_review/dry-run
|
|
7
|
-
* park)都是「引擎停着等人」⇒ 同落 'waiting-on-human'(区分度由行上 gate.kind 携带,不铸新词)。 */
|
|
8
5
|
export function backgroundStatusFromAssistant(s) {
|
|
9
6
|
switch (s) {
|
|
10
7
|
case 'running':
|
|
@@ -14,17 +11,12 @@ export function backgroundStatusFromAssistant(s) {
|
|
|
14
11
|
case 'needs_review':
|
|
15
12
|
return 'waiting-on-human';
|
|
16
13
|
default: {
|
|
17
|
-
const exhaustive = s;
|
|
14
|
+
const exhaustive = s;
|
|
18
15
|
void exhaustive;
|
|
19
|
-
// A-004.10:wire 开集回落改诚实形——此前未知新词按「活着」渲 'running',上游若加的是
|
|
20
|
-
// 终态词就是幽灵活跃行(#182 同病)。'unknown' = 不编造任何一头。
|
|
21
16
|
return 'unknown';
|
|
22
17
|
}
|
|
23
18
|
}
|
|
24
19
|
}
|
|
25
|
-
/** fleet 9 值 → 中性 7 值。'waiting'(durable suspend)与 'awaiting approval'(needs-review /
|
|
26
|
-
* plan-approval park)都在等人;'idle' 是「活着但此刻没在推进」—— 中性词表无此臂,按活跃行渲
|
|
27
|
-
* 'running'(诚实取舍:它既不 queued 也不终态,更不是在等人)。 */
|
|
28
20
|
export function backgroundStatusFromFleet(s) {
|
|
29
21
|
switch (s) {
|
|
30
22
|
case 'queued':
|
|
@@ -46,26 +38,19 @@ export function backgroundStatusFromFleet(s) {
|
|
|
46
38
|
case 'killed':
|
|
47
39
|
return 'stopped';
|
|
48
40
|
default: {
|
|
49
|
-
const exhaustive = s;
|
|
41
|
+
const exhaustive = s;
|
|
50
42
|
void exhaustive;
|
|
51
43
|
return 'unknown';
|
|
52
44
|
}
|
|
53
45
|
}
|
|
54
46
|
}
|
|
55
|
-
// ── 行投影 ×2 ────────────────────────────────────────────────────────────────────────────────
|
|
56
|
-
/** ISO 串 → epoch ms,只在这一处转;烂串 ⇒ undefined(诚实缺席,绝不 NaN/0 外泄)。 */
|
|
57
47
|
function isoToEpochMs(iso) {
|
|
58
48
|
const ms = Date.parse(iso);
|
|
59
49
|
return Number.isFinite(ms) ? ms : undefined;
|
|
60
50
|
}
|
|
61
|
-
/** 非空串才算「有值」:空串是「没有名字」,不是名字(占位归端)。 */
|
|
62
51
|
function nonEmptyString(v) {
|
|
63
52
|
return typeof v === 'string' && v !== '' ? v : undefined;
|
|
64
53
|
}
|
|
65
|
-
/** 一行 AssistantTask → BackgroundRow。gate 是 `AssistantGate | null`(wire 显式 null 形)——
|
|
66
|
-
* null 折成键缺席,非 null 原引用透传(契约位是 unknown,包不重构造)。
|
|
67
|
-
* 🔴 [C33]③.1 三键(name / sessionId / createdAtMs)按 wire 在场性投影:缺席=键缺席,绝不
|
|
68
|
-
* `?? 0` / `?? ''` —— 端渲的是「不知道」,不是「0 秒前创建的无名任务」。 */
|
|
69
54
|
export function assistantTaskToBackgroundRow(t) {
|
|
70
55
|
const wire = t;
|
|
71
56
|
const updatedAtMs = isoToEpochMs(t.updatedAt);
|
|
@@ -83,10 +68,6 @@ export function assistantTaskToBackgroundRow(t) {
|
|
|
83
68
|
...(t.gate !== null ? { gate: t.gate } : {}),
|
|
84
69
|
};
|
|
85
70
|
}
|
|
86
|
-
/** 一行 FleetTaskRow → BackgroundRow;子行(parentId 在场)⇒ null(调用方剔除)。
|
|
87
|
-
* 复合 id 不拆;`currentTool` 契约位是一行字符串 —— 优先 server 已 redact 的 `currentAction`
|
|
88
|
-
* 原文,缺席时从结构化 `currentTool` 合成;`needsAttention` fleet wire 无显式位,从 park 态
|
|
89
|
-
* 推导(awaiting approval / awaitingPlanApproval / waiting),非 park 行键缺席(缺席≠false)。 */
|
|
90
71
|
export function fleetTaskToBackgroundRow(r) {
|
|
91
72
|
if (typeof r.parentId === 'string' && r.parentId !== '')
|
|
92
73
|
return null;
|
|
@@ -96,10 +77,6 @@ export function fleetTaskToBackgroundRow(r) {
|
|
|
96
77
|
? `${r.currentTool.toolName}${r.currentTool.target !== undefined ? ` ${r.currentTool.target}` : ''}`
|
|
97
78
|
: undefined;
|
|
98
79
|
const parked = r.status === 'awaiting approval' || r.status === 'waiting' || r.awaitingPlanApproval === true;
|
|
99
|
-
// [C33]③.2 / server [C36]:launch 时刻 epoch ms(revive 行=本 revive 周期 wake 时刻),
|
|
100
|
-
// ADDITIVE / tolerate-absent —— 排队中的行本就没有,缺席即键缺席(0 不是「1970 年启动」)。
|
|
101
|
-
// 两腿同一个 mapper:`snapshot` 首帧行与 `task` 增量帧行(POST-MERGE FULL row)都过这里。
|
|
102
|
-
// 与 fleet 投影同律:只有**有限正数**算 launch 锚(非有限值渲不出时长,只会变成 `null`)。
|
|
103
80
|
const startedAtMs = typeof r.startedAt === 'number' && Number.isFinite(r.startedAt) && r.startedAt > 0 ? r.startedAt : undefined;
|
|
104
81
|
return {
|
|
105
82
|
key: { source: 'fleet', rowId: r.id },
|
|
@@ -113,9 +90,6 @@ export function fleetTaskToBackgroundRow(r) {
|
|
|
113
90
|
...(currentTool !== undefined ? { currentTool } : {}),
|
|
114
91
|
};
|
|
115
92
|
}
|
|
116
|
-
/** 纯组合:两源(各带三态健康位)→ BackgroundView。行序 = assistant 先(core 已按 triage 排,
|
|
117
|
-
* 消费方不再排)、fleet 后(帧到达序);非 'ok' 源的行不出(那份列表不是证词);sources 三态
|
|
118
|
-
* 恒在场 —— 源不可用/未配置与「空列表」是三件事,端必须渲它。 */
|
|
119
93
|
export function projectBackgroundView(i) {
|
|
120
94
|
const rows = [];
|
|
121
95
|
if (i.assistant.health === 'ok') {
|
|
@@ -134,7 +108,6 @@ export function projectBackgroundView(i) {
|
|
|
134
108
|
rows,
|
|
135
109
|
};
|
|
136
110
|
}
|
|
137
|
-
/** 501 判读走 errCodes 单源(SDK typed APIError 的 status;`statusCode` 变体同吃)。 */
|
|
138
111
|
function isNotImplemented(err) {
|
|
139
112
|
const { status } = errCodes(err);
|
|
140
113
|
return status === 501;
|
|
@@ -143,17 +116,11 @@ function debugLog(msg) {
|
|
|
143
116
|
if (engineWireDebugEnabled())
|
|
144
117
|
hostLog('debug', `[client-core][backgroundView] ${msg}`);
|
|
145
118
|
}
|
|
146
|
-
/**
|
|
147
|
-
* createBackgroundView(client, opts?) — 后台任务归一视图(契约 `CreateBackgroundView`;第二参是
|
|
148
|
-
* 实现旋钮,可选参不缩窄契约形)。生命周期:构造即起后台轮询;`snapshot()` 首解析前 null;
|
|
149
|
-
* `subscribe` 解析即通知 + 订阅即对账;`dispose()` abort 在飞请求、停循环、清订阅。
|
|
150
|
-
*/
|
|
151
119
|
export function createBackgroundView(client, opts) {
|
|
152
120
|
const intervalMs = opts?.intervalMs ?? 2000;
|
|
153
121
|
let disposed = false;
|
|
154
122
|
let current = null;
|
|
155
123
|
let lastSerialized = null;
|
|
156
|
-
/** caps 探针结果:null = 还没探到/caps 面不可达(判别缺席);boolean = approvals 位(见头注件 3)。 */
|
|
157
124
|
let capsApprovals = null;
|
|
158
125
|
const listeners = new Set();
|
|
159
126
|
const abort = new AbortController();
|
|
@@ -169,8 +136,6 @@ export function createBackgroundView(client, opts) {
|
|
|
169
136
|
}
|
|
170
137
|
}
|
|
171
138
|
}
|
|
172
|
-
/** caps 只需探到一次;失败保持 null 下轮重试(caps 面挂 ≠ assistant 面挂,判别缺席不编造)。
|
|
173
|
-
* 🔴 读的是 `approvals` 不是 `scheduler` —— 取证见头注「'not-configured' 判别」节件 3。 */
|
|
174
139
|
async function probeCaps() {
|
|
175
140
|
if (capsApprovals !== null)
|
|
176
141
|
return;
|
|
@@ -185,26 +150,21 @@ export function createBackgroundView(client, opts) {
|
|
|
185
150
|
async function pullAssistant() {
|
|
186
151
|
try {
|
|
187
152
|
const { tasks } = await client.assistant.tasks({ signal: abort.signal });
|
|
188
|
-
// 0.72.12 CC-50(#59 A-17):200 回体缺 tasks 键 = 读不出,不是「零任务」⇒ unavailable(空表 + ok 是编的)。
|
|
189
153
|
if (!Array.isArray(tasks))
|
|
190
154
|
return { health: 'unavailable', tasks: [] };
|
|
191
155
|
return { health: capsApprovals === false ? 'not-configured' : 'ok', tasks };
|
|
192
156
|
}
|
|
193
157
|
catch (err) {
|
|
194
158
|
debugLog(`assistant.tasks degrade: ${String(err)}`);
|
|
195
|
-
// 🔴 只有 approvals:false(面本就没挂)与 501(路由自报 gated off)算 not-configured。
|
|
196
|
-
// 「caps 说有(approvals:true)却 404」**留在 unavailable** —— 那是两个真源对不上的报警,
|
|
197
|
-
// 吞掉它以后真的漏注册/误删路由就再也看不见了(server [C34] 明确否掉的修法 (a))。
|
|
198
159
|
const health = capsApprovals === false || isNotImplemented(err) ? 'not-configured' : 'unavailable';
|
|
199
160
|
return { health, tasks: [] };
|
|
200
161
|
}
|
|
201
162
|
}
|
|
202
163
|
async function pullFleet() {
|
|
203
164
|
try {
|
|
204
|
-
// G19 一次性快照 verb:SDK 内部开 SSE 流取首 snapshot 帧即断;abort.signal 直通 ⇒ dispose 能掐在飞连接。
|
|
205
165
|
const { tasks } = await client.fleet.snapshot({ signal: abort.signal });
|
|
206
166
|
if (!Array.isArray(tasks))
|
|
207
|
-
return { health: 'unavailable', tasks: [] };
|
|
167
|
+
return { health: 'unavailable', tasks: [] };
|
|
208
168
|
return { health: 'ok', tasks };
|
|
209
169
|
}
|
|
210
170
|
catch (err) {
|
|
@@ -214,7 +174,6 @@ export function createBackgroundView(client, opts) {
|
|
|
214
174
|
}
|
|
215
175
|
async function pollOnce() {
|
|
216
176
|
await probeCaps();
|
|
217
|
-
// 两源并行、各自 try/catch —— 独立拉取独立降级,一源挂另一源照常。
|
|
218
177
|
const [assistant, fleet] = await Promise.all([pullAssistant(), pullFleet()]);
|
|
219
178
|
if (disposed || abort.signal.aborted)
|
|
220
179
|
return;
|
|
@@ -231,13 +190,10 @@ export function createBackgroundView(client, opts) {
|
|
|
231
190
|
await pollOnce();
|
|
232
191
|
}
|
|
233
192
|
catch (err) {
|
|
234
|
-
// pullAssistant/pullFleet 各自兜底,这里只剩投影/通知的意外 —— 记录不外抛(本源绝不 throw 进宿主)。
|
|
235
193
|
debugLog(`poll cycle error (kept alive): ${String(err)}`);
|
|
236
194
|
}
|
|
237
195
|
if (disposed || abort.signal.aborted)
|
|
238
196
|
return;
|
|
239
|
-
// REF-CC-147:abort 感知的 sleep(dispose 立即唤醒并清定时器,不留悬挂 timer 拖住宿主
|
|
240
|
-
// 进程)——本函数原实现已抽成共享叶 ../abortableSleep.js,workflowClient.ts 同款消费。
|
|
241
197
|
await abortableSleep(intervalMs, abort.signal);
|
|
242
198
|
}
|
|
243
199
|
}
|
|
@@ -248,7 +204,6 @@ export function createBackgroundView(client, opts) {
|
|
|
248
204
|
},
|
|
249
205
|
subscribe(onChange) {
|
|
250
206
|
listeners.add(onChange);
|
|
251
|
-
// 订阅即对账:订阅前已解析的话,notify 那一发已经打空 —— 同步补一发,宿主不用白等一个 tick。
|
|
252
207
|
if (current !== null && !disposed) {
|
|
253
208
|
try {
|
|
254
209
|
onChange();
|
|
@@ -268,5 +223,4 @@ export function createBackgroundView(client, opts) {
|
|
|
268
223
|
},
|
|
269
224
|
};
|
|
270
225
|
}
|
|
271
|
-
// 契约锚(编译期钉):实现必须可赋给冻结契约形 —— 参数缩窄/返回面缺员在这里红,不等运行期。
|
|
272
226
|
void createBackgroundView;
|