@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
package/dist/leaderConflict.js
CHANGED
|
@@ -1,41 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* leaderConflict — leader run 终局 `needs_human` + `result.conflict` 的**三端共用读面**(0.72.10;server ≥7.83.0 C-R63 ④;
|
|
3
|
-
* 契约 §15;sdk `LeaderRecord.result` 声明为 `unknown`,本读器是它在客户端的唯一形)。
|
|
4
|
-
*
|
|
5
|
-
* ── 这一口答的是哪件事 ────────────────────────────────────────────────────────────────────
|
|
6
|
-
* 7.83.0 起 worker 分支合不上时,leader run **不再**起任何模型去解冲突,而是把冲突**列给用户**:`status:"needs_human"` +
|
|
7
|
-
* `result.conflict { baseSha, files[], filesTruncated?, workers[], rejHead? }` + `result.salvaged[]`(全部 worker 各一份补丁,尽力而为)。
|
|
8
|
-
* 壳只有「列出来 + 把补丁落盘」两件事;缺席语义 / 坏形判别 / 措辞三端各写一遍必各错一遍 ⇒ 归包。
|
|
9
|
-
*
|
|
10
|
-
* ── 🔴 五条契约读法(§15 逐字)──────────────────────────────────────────────────────────────
|
|
11
|
-
* ① **缺席不可分**:`result` 无 `conflict` 键 = 这一趟没有冲突,**或**对面是老 server(<7.83.0,那时冲突走别的终局)。
|
|
12
|
-
* 两者 wire 上不可区分 ⇒ 读数 `none`,措辞把两种可能都摆出来,不替 server 断言其中一种。
|
|
13
|
-
* ② **在场但读不懂 ≠ 缺席**:`conflict` 在场但必填座缺 / 形坏 ⇒ `unreadable`。它和 `none` 是两个词 —— server 明明报了冲突,
|
|
14
|
-
* 壳若因读不懂而渲成「没冲突」,用户会把一棵带冲突标记的树当干净树用。
|
|
15
|
-
* ③ **`filesTruncated` 只在清单被截断时在场且恒 `true`;缺席 = 这就是全部**。在场却不是 `true` ⇒ unreadable,不编「全部」也不编「截断」。
|
|
16
|
-
* ④ **`workers[].applied` 是布尔事实**:`false` = 这只 worker 的补丁没进树(冲突者本人,或排在它后面没轮到的)。`salvaged[].patch`
|
|
17
|
-
* 是**工件**(给落盘口),原样透传、不消毒、不截断;`rejHead` 是**屏上诊断片段**(server 已脱敏 ≤2 KiB),呈前按 UNTRUSTED-for-display
|
|
18
|
-
* 再过一次(转义控制符 + 封长)。两者在 server 侧走同一只脱敏口,客户端只按用途分「落盘 / 上屏」,不再加第二套判据。
|
|
19
|
-
* ⑤ **`needs_human` 是「等人」不是「失败」**:契约明令不许据它自动重试一条 leader run。措辞单源 {@link leaderConflictDetail},
|
|
20
|
-
* 句子里不出现重试;壳零自拼句子。
|
|
21
|
-
*
|
|
22
|
-
* ── 防御读纪律(与 `mcpReconnect` / `sessionMemoryStatus` 同律)─────────────────────────────
|
|
23
|
-
* · 永不抛:载体非对象 / 敌意 getter ⇒ `undefined`(记录本身不成形);`status` 缺席或非串 ⇒ `undefined`;
|
|
24
|
-
* · `status` 按**开集**透传(契约闭集四词,但客户端不替 server 断言闭集 —— 新词照带,壳 switch 必带 default);
|
|
25
|
-
* · 多余成员不过境,数组是新拷贝(壳改视图不回写 wire 体)。
|
|
26
|
-
*/
|
|
27
1
|
import { capForDisplay } from './fleetTaskDesc.js';
|
|
28
|
-
/** 契约 §15 `GET /v1/leader/:id` 的 `status` 四词(仅作词表;读器按开集透传)。 */
|
|
29
2
|
export const LEADER_RUN_STATUSES = Object.freeze(['running', 'completed', 'failed', 'needs_human']);
|
|
30
|
-
/** `rejHead` 上屏封长(显示字符;server 侧已 ≤2 KiB,这里是呈前的第二道,与工件字节无关)。 */
|
|
31
3
|
export const LEADER_REJ_HEAD_DISPLAY_MAX = 2048;
|
|
32
|
-
/** 冲突句里最多点名几条冲突路径(其余以「and N more」收口;路径是 UNTRUSTED-for-display,逐条消毒)。 */
|
|
33
4
|
const DETAIL_FILES_MAX = 5;
|
|
34
5
|
const DETAIL_PATH_MAX = 120;
|
|
35
6
|
const DETAIL_BRANCH_MAX = 80;
|
|
36
7
|
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
37
8
|
const nonEmptyString = (v) => typeof v === 'string' && v.length > 0;
|
|
38
|
-
/** JSON 永远带不来 `undefined`;本地拼出来的 `{ key: undefined }` 按缺席读,与 wire 上整键缺席同义。 */
|
|
39
9
|
const present = (o, key) => Object.hasOwn(o, key) && o[key] !== undefined;
|
|
40
10
|
function readWorkers(v) {
|
|
41
11
|
if (!Array.isArray(v))
|
|
@@ -71,10 +41,6 @@ function readConflict(v) {
|
|
|
71
41
|
}
|
|
72
42
|
return out;
|
|
73
43
|
}
|
|
74
|
-
/**
|
|
75
|
-
* 尽力而为的表:坏行逐行丢弃(一行坏不该让用户拿不到别的 worker 的补丁);`patch` 原样。
|
|
76
|
-
* 返回 `{ rows, incomplete }`:`incomplete` = 在场但读不全(非数组 / 非空全坏 / 混合);缺席、`[]`、全好 ⇒ false。
|
|
77
|
-
*/
|
|
78
44
|
function readSalvaged(result) {
|
|
79
45
|
if (!isRecord(result) || !present(result, 'salvaged'))
|
|
80
46
|
return { rows: [], incomplete: false };
|
|
@@ -91,10 +57,6 @@ function readSalvaged(result) {
|
|
|
91
57
|
}
|
|
92
58
|
return { rows, incomplete: dropped > 0 };
|
|
93
59
|
}
|
|
94
|
-
/**
|
|
95
|
-
* 把 `GET /v1/leader/:id` 的记录(sdk `LeaderRecord`,`result` 为 `unknown`)投成 {@link LeaderConflictView}。
|
|
96
|
-
* 永不抛;记录本身不成形(非对象 / `status` 缺席或非串 / 敌意 getter)⇒ `undefined`。
|
|
97
|
-
*/
|
|
98
60
|
export function projectLeaderConflict(record) {
|
|
99
61
|
try {
|
|
100
62
|
if (!isRecord(record) || !nonEmptyString(record.status))
|
|
@@ -115,7 +77,6 @@ export function projectLeaderConflict(record) {
|
|
|
115
77
|
}
|
|
116
78
|
}
|
|
117
79
|
const plural = (n, one, many) => `${n} ${n === 1 ? one : many}`;
|
|
118
|
-
/** 打捞补丁句(三形共用):有数带数;读不全 ⇒ 说材料存在但读不出、去看原始结果,绝不落到「没有补丁」;零且读全 ⇒ 如实说没有。 */
|
|
119
80
|
function salvageSentence(view) {
|
|
120
81
|
const n = view.salvaged.length;
|
|
121
82
|
if (view.salvagedIncomplete) {
|
|
@@ -125,15 +86,6 @@ function salvageSentence(view) {
|
|
|
125
86
|
}
|
|
126
87
|
return n === 0 ? 'No salvaged patches were returned.' : `${plural(n, 'salvaged patch', 'salvaged patches')} available to save.`;
|
|
127
88
|
}
|
|
128
|
-
/**
|
|
129
|
-
* 一句措辞的**唯一铸点**(三端共用;壳零自拼)。
|
|
130
|
-
* · `conflict`:等人 + 基点短 sha + 冲突文件数(截断则明说)+ 哪几支进了树 / 没进 + 打捞补丁句;
|
|
131
|
-
* · `none`:只说「没有报告冲突详情」,🔴 **明说这不证明已经合并**(异源对抗复审采纳:`running` 与未进合并的 `failed` 也走这句,
|
|
132
|
-
* 缺席只证明没有冲突报告,不证明执行过合并 —— 说成「已无冲突合并」会让用户以为工作已合入而不去恢复);
|
|
133
|
-
* · `unreadable`:server 报了冲突但读不出,让用户去 server 侧看。
|
|
134
|
-
* 三句都带同一条打捞补丁句(有数带数 / 零则如实说没有 / 读不全则说材料存在但读不出,绝不说「没有」)。
|
|
135
|
-
* 🔴 句子里不出现重试(契约:`needs_human` 在等人)。`rejHead` / `patch` 一个字节都不进句子。
|
|
136
|
-
*/
|
|
137
89
|
export function leaderConflictDetail(view) {
|
|
138
90
|
const salvage = salvageSentence(view);
|
|
139
91
|
if (view.kind === 'none') {
|
package/dist/limitsWire.d.ts
CHANGED
|
@@ -1,114 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/limitsWire.ts — headless `-p` run-limits wire: expose the engine's TASK-LEVEL budget face on
|
|
3
|
-
* the headless `-p` path via `TaskRequest.limits`.
|
|
4
|
-
*
|
|
5
|
-
* ── core 5.8.0 词表迁移([2489],2026-08-04)────────────────────────────────────────────
|
|
6
|
-
* `limits` 是**唯一预算面,默认全空 = 无限制**。本模块拼的三个键都骑 5.8.0 的新词表:
|
|
7
|
-
* · `maxWalltimeMs`(**毫秒**;5.7 的 `limits.timeoutSec` 已删,单位一并变)
|
|
8
|
-
* · `maxTurns`
|
|
9
|
-
* · `maxOutputTokens`(5.8.0 的**主限**——time 退出任务轴之后,token 是首选的预算旋钮;
|
|
10
|
-
* wire 键名自 5.7 起一直是 maxOutputTokens,core 内部才叫 maxTokens——[2569] 案订正)。
|
|
11
|
-
* 🔴 到限形订正([2592]/[2593] 案):这是**单请求输出上限**不是累计预算——撞线=生成中被
|
|
12
|
-
* 截断(工具调用参数途中被砍以 provider 截断披露上浮,core 3dfdb8f 起披露点名 cap),
|
|
13
|
-
* **不出** `limits.max_tokens_exceeded`(那是 core 内部累计预算键 `maxTokens` 的码,本 wire
|
|
14
|
-
* 从不发那个键 ⇒ 消费端别拿那个码当 --max-tokens 的到限判据)。
|
|
15
|
-
* 到限语义也换了:**没有配速机器了**。5.8.0 删掉了 deadlineNudge / callCapByDeadline /
|
|
16
|
-
* gracefulFinalize 那一套(以及引擎侧 1000 轮安全网、fork 200、session-bg 30min 暗注等全部隐式
|
|
17
|
-
* 默认),走到 `maxWalltimeMs` 不再是「引擎自己减速然后优雅收尾」,而是**响亮终局**:
|
|
18
|
-
* `status:'failed'` + `errorCode:'limits.max_walltime_exceeded'`(`status:'timeout'` 这个词整体退役)。
|
|
19
|
-
* 四个新码 `limits.max_{tokens,cost,turns,walltime}_exceeded` 的下游投影见
|
|
20
|
-
* `adapter/downstream/terminalToSdkResult.ts`。
|
|
21
|
-
*
|
|
22
|
-
* ✅ **窗口期已关闭(退役批,2026-08-04)**:交付时点壳的引擎是 server 5.14.0(捆 core 5.7),它
|
|
23
|
-
* **不认识** `maxWalltimeMs`/`maxTokens`(5.7 只认 `timeoutSec`/`maxOutputTokens`/`maxTurns`,未知键
|
|
24
|
-
* 静默丢弃),所以那段时间三个键里只有 `maxTurns` 真的生效。**server 6.0.0 已捆 core 5.8.0 发车**
|
|
25
|
-
* ⇒ 新键集在班车上生效,读面的双代兜底(`adapter/downstream/terminalToSdkResult.ts`)本批一并退役。
|
|
26
|
-
* 写面从头到尾是**单一新形**,不做两代并发(同时发 `timeoutSec` + `maxWalltimeMs` 会在 5.8 引擎上撞
|
|
27
|
-
* `config.limit_unknown_key` 当场失败,那是拿窗口期的一次静默无视换班车到货后的确定性失败)。
|
|
28
|
-
*
|
|
29
|
-
* THREE FLAGS, THREE ALIGNMENT BUCKETS:
|
|
30
|
-
* · `--deadline <sec>` → limits.maxWalltimeMs(用户面仍是**秒**,拼 wire 时 ×1000)。Upstream
|
|
31
|
-
* CC 2.1.207 has NO deadline flag → SUPERSET, help copy says so.
|
|
32
|
-
* · `--max-turns <n>` → limits.maxTurns. Upstream CC 2.1.207 HAS `--max-turns` (source 199676 /
|
|
33
|
-
* 793380) → ALIGNMENT-GAP fill: the flag was already registered (main.tsx CC-inherited surface) and
|
|
34
|
-
* drove the local query loop, but the seam path executes turns ENGINE-side — this wire finally
|
|
35
|
-
* carries the cap to where the turns actually run.
|
|
36
|
-
* · `--max-tokens <n>` → limits.maxOutputTokens(5.8.0 主限;wire 键名见接口注——绝不直发
|
|
37
|
-
* core 内部键 maxTokens,[2569] 案)。Upstream CC 2.1.207 has no run-level
|
|
38
|
-
* token budget flag → SUPERSET.
|
|
39
|
-
*
|
|
40
|
-
* PRECEDENCE per knob (flag > settings > none), scenarioWire 三件套同款:
|
|
41
|
-
* a) explicit flag → strict validation, FAIL-LOUD on an invalid
|
|
42
|
-
* value (integer domain below; a mis-typed budget bound must not quietly run unbounded).
|
|
43
|
-
* b) settings env lane (settings.json `env` block → 1a-envseed → process.env):
|
|
44
|
-
* `SEMA_HEADLESS_DEADLINE_SEC` / `SEMA_HEADLESS_MAX_TURNS` / `SEMA_HEADLESS_MAX_TOKENS`
|
|
45
|
-
* → 同 a) FAIL-LOUD on an invalid value(#132 / test [2508] 2026-08-04 推翻旧 batch-E
|
|
46
|
-
* 「静默降级」形;见 headlessLimitsFromEnv 的 JSDoc——非法值 {ok:false} 上抛,caller exit 1,
|
|
47
|
-
* 常驻门 run-limits-env-failloud-test.mjs 守此形)。
|
|
48
|
-
* c) neither → NO stamp = today's behaviour, verbatim.
|
|
49
|
-
*
|
|
50
|
-
* DOMAINS (integer, inclusive): deadline 30..86400 **秒**(→ 30_000..86_400_000 ms 上 wire)·
|
|
51
|
-
* maxTurns / maxTokens = **正整数**(上界 = JS 安全整数)。maxTurns 此前钉 1..1000,那个上界抄的是
|
|
52
|
-
* 引擎侧 1000 轮安全网;5.8.0 把该安全网整体退役了,壳再替它守一个不存在的墙就是凭空拒绝合法配置。
|
|
53
|
-
*
|
|
54
|
-
* VERSION GATE (triage risk ③ — an OLD server SILENTLY SWALLOWS unknown body fields, worse than not
|
|
55
|
-
* shipping): the self-spawned engine is release-pinned ≥1.197.0 so the dev/release lanes are safe by
|
|
56
|
-
* construction; but a user-supplied SEMA_ENGINE_URL may point at an older engine. When the user
|
|
57
|
-
* EXPLICITLY passed a flag (env-lane defaults stay quiet) and SEMA_ENGINE_URL is in play, the caller
|
|
58
|
-
* probes `${baseUrl}/health` (the engine self-describes `version` since 1.96) and prints ONE honest
|
|
59
|
-
* stderr line when version <1.196.0 — the request still goes out unchanged (warn, don't block).
|
|
60
|
-
* Unreachable /health or an unparsable version stays silent (can't confirm staleness — fail-soft).
|
|
61
|
-
*
|
|
62
|
-
* 📐 **两道地板,守的不是同一件事**(退役批补记,2026-08-04):
|
|
63
|
-
* · 第一地板 `LIMITS_WIRE_MIN_ENGINE = 1.196.0` = 「`limits` 这个**字段**存不存在」(server 1.196.0
|
|
64
|
-
* 起接受 body.limits);低于它,整个预算面被丢。
|
|
65
|
-
* · 第二地板 **server ≥ 6.0.0** = 「**新键集**认不认」。6.0.0 是第一个捆 core 5.8.0 的 server 版本,
|
|
66
|
-
* 也就是第一个认识 `maxWalltimeMs` 的版本(5.7 只认 `timeoutSec`/`maxOutputTokens`/`maxTurns`,
|
|
67
|
-
* 未知键静默丢弃)。**[2569] 案订正**:`maxOutputTokens` 自 5.7 就在 wire 词表,本模块此前
|
|
68
|
-
* 直发 core 内部键 `maxTokens` 才是被静默无视的那个(server 6.3.0 起 400);对 1.196.0 ≤
|
|
69
|
-
* version < 6.0.0 的引擎,`maxTurns`/`maxOutputTokens` 生效而 `maxWalltimeMs` 被静默无视。
|
|
70
|
-
* 之所以过去写不出这条:/health 自报的是 server 版本,而键名代际取决于它捆的 core 版本,当时
|
|
71
|
-
* 两者没有可从 wire 读出的映射;6.0.0 这班车把映射钉死了(6.0.0 ⇒ core ≥5.8),这条地板才成立。
|
|
72
|
-
* · 本文件的运行期探针目前只对第一地板发声(warn, don't block);第二地板先落成契约事实写在这里,
|
|
73
|
-
* 要不要给它也配一条 stderr 提示是**行为面**决定,按宪法三问单独走,不在退役批里顺手加。
|
|
74
|
-
*/
|
|
75
1
|
import { type EnvLike } from './hostEnv.js';
|
|
76
|
-
/** Settings-lane env knobs (settings.json `env` block → 1a-envseed → process.env). */
|
|
77
2
|
export declare const HEADLESS_DEADLINE_ENV = "SEMA_HEADLESS_DEADLINE_SEC";
|
|
78
3
|
export declare const HEADLESS_MAX_TURNS_ENV = "SEMA_HEADLESS_MAX_TURNS";
|
|
79
4
|
export declare const HEADLESS_MAX_TOKENS_ENV = "SEMA_HEADLESS_MAX_TOKENS";
|
|
80
|
-
/** `--deadline` 的**用户面**整数域(秒;30s..24h)。上 wire 前 ×1000 换成 `maxWalltimeMs`。 */
|
|
81
5
|
export declare const DEADLINE_SEC_MIN = 30;
|
|
82
6
|
export declare const DEADLINE_SEC_MAX = 86400;
|
|
83
|
-
/**
|
|
84
|
-
* `maxTurns` / `maxTokens` 的整数域 = **正整数**(上界只到 JS 安全整数,再大就不是「一个精确的
|
|
85
|
-
* 轮数/token 数」而是浮点近似了 —— 那种值静默夹取比拒绝更坏)。
|
|
86
|
-
*
|
|
87
|
-
* `MAX_TURNS_MAX` 此前是 `1_000`,抄的是引擎侧的 1000 轮安全网;core 5.8.0 把那张网**整体退役**
|
|
88
|
-
* (「零配置任务现在没有任何任务级兜底」,[2489]),壳再守它 = 替一堵不存在的墙拒绝合法配置。
|
|
89
|
-
* 常量名保留(它仍然是这个域的上界,只是值换成了真上界),消费者的 help 文案请按「正整数」写。
|
|
90
|
-
*/
|
|
91
7
|
export declare const MAX_TURNS_MIN = 1;
|
|
92
8
|
export declare const MAX_TURNS_MAX: number;
|
|
93
9
|
export declare const MAX_TOKENS_MIN = 1;
|
|
94
10
|
export declare const MAX_TOKENS_MAX: number;
|
|
95
|
-
/** First server version whose /v1/tasks|/v1/tasks/stream accept body.limits (board [857]). */
|
|
96
11
|
export declare const LIMITS_WIRE_MIN_ENGINE: readonly [number, number, number];
|
|
97
|
-
/**
|
|
98
|
-
* `TaskRequest.limits` 的壳侧子集(core 5.8.0 词表)。引擎那份还有
|
|
99
|
-
* `maxCostUsd`/`maxOutputTokens`/`approachNotice`/`degrade`/… —— 本模块只拼 CLI flag 暴露的三个键,
|
|
100
|
-
* 其余键由别的配置面负责,别在这里悄悄补默认值(默认全空 = 无限制,是 5.8.0 的显式设计)。
|
|
101
|
-
*/
|
|
102
12
|
export interface HeadlessLimits {
|
|
103
|
-
/** 墙钟预算,**毫秒**(用户面 `--deadline` 是秒)。到限 ⇒ failed + `limits.max_walltime_exceeded`。 */
|
|
104
13
|
maxWalltimeMs?: number;
|
|
105
|
-
/** 轮数预算。到限 ⇒ failed + `limits.max_turns_exceeded`。 */
|
|
106
14
|
maxTurns?: number;
|
|
107
|
-
/** token 预算(5.8.0 主限)。到限 ⇒ failed + `limits.max_tokens_exceeded`(result 带已产出正文)。
|
|
108
|
-
* 🔴 wire 键=**maxOutputTokens**(sdk 6.2.0 types.d.ts:472 实测词表;[2569] 案定谳):
|
|
109
|
-
* `maxTokens` 是 core TaskSpec 内部键,server 从未从 wire 采纳它(此前 200 静默空转,
|
|
110
|
-
* 6.3.0 起对 limits.maxTokens 直接 400)。用户面 `--max-tokens`/`SEMA_HEADLESS_MAX_TOKENS`
|
|
111
|
-
* 名称不变——变的只是上 wire 的键名。[same-name-different-meaning-crosses-layers] 同族。 */
|
|
112
15
|
maxOutputTokens?: number;
|
|
113
16
|
}
|
|
114
17
|
export type LimitsParseResult = {
|
|
@@ -119,22 +22,7 @@ export type LimitsParseResult = {
|
|
|
119
22
|
ok: false;
|
|
120
23
|
error: string;
|
|
121
24
|
};
|
|
122
|
-
/**
|
|
123
|
-
* Parse `--deadline` + `--max-turns` + `--max-tokens` out of an argv slice. No flags ⇒ `{ok:true}`
|
|
124
|
-
* with no limits. Repeated flag ⇒ LAST wins (commander convention). Missing value / non-integer /
|
|
125
|
-
* out-of-domain ⇒ fail-LOUD parse error (never a silent default — same stance as
|
|
126
|
-
* `--scenario`/`--sandbox`). `flaggedFlags` names the flags that EXPLICITLY contributed (the
|
|
127
|
-
* version-gate probe trigger).
|
|
128
|
-
*/
|
|
129
25
|
export declare function parseLimitsArgv(argv: string[]): LimitsParseResult;
|
|
130
|
-
/**
|
|
131
|
-
* The settings-lane defaults. FAIL-LOUD on a bad value (#132 / test [2508],2026-08-04,推翻旧
|
|
132
|
-
* batch-E「静默降级」形):设置了 SEMA_HEADLESS_* 却是非法值时,旧行为=不开 SEMA_DEBUG 完全无声、
|
|
133
|
-
* 按「无限期限」跑——用户以为设了预算,实际什么都没设,这正是 [honest-absence] 禁的那类静默谎报。
|
|
134
|
-
* 现与 flag 路径同拍响亮拒(同文案形,caller exit 1):配置错了要在第一次跑就知道,而不是在一个
|
|
135
|
-
* 本该 300s 停的任务跑了一夜之后。返回判别联合;唯一消费者是下面的 limitsForPrint(仓际零外部
|
|
136
|
-
* 消费,干净切不设兼容)。
|
|
137
|
-
*/
|
|
138
26
|
export type HeadlessEnvLimitsResult = {
|
|
139
27
|
ok: true;
|
|
140
28
|
limits: HeadlessLimits | undefined;
|
|
@@ -143,21 +31,8 @@ export type HeadlessEnvLimitsResult = {
|
|
|
143
31
|
error: string;
|
|
144
32
|
};
|
|
145
33
|
export declare function headlessLimitsFromEnv(env?: EnvLike): HeadlessEnvLimitsResult;
|
|
146
|
-
/**
|
|
147
|
-
* Resolve the limits for a headless `-p` submit: explicit flags > settings env defaults > none
|
|
148
|
-
* (= no stamp, today's behaviour). Merge is PER-KNOB: `--deadline 300` + SEMA_HEADLESS_MAX_TURNS=50
|
|
149
|
-
* yields {maxWalltimeMs:300000, maxTurns:50}. Flag parse errors propagate fail-loud; the caller exits.
|
|
150
|
-
*/
|
|
151
34
|
export declare function limitsForPrint(argv: string[], env?: EnvLike): LimitsParseResult;
|
|
152
|
-
/** True when the engine version string satisfies the limits-wire minimum (≥1.196.0). Unparsable ⇒ false. */
|
|
153
35
|
export declare function versionSupportsLimits(v: string | undefined): boolean;
|
|
154
|
-
/**
|
|
155
|
-
* Version-gate probe (triage risk ③): GET `${baseUrl}/health`, read `version`, and return ONE honest
|
|
156
|
-
* stderr line when the engine is confirmed <1.196.0 — the caller prints it and SENDS ANYWAY (the old
|
|
157
|
-
* server drops the field server-side; warn, don't block). Returns undefined when the engine is new
|
|
158
|
-
* enough, unreachable, or self-describes no parsable version (can't confirm staleness — fail-soft
|
|
159
|
-
* silent; the release-pinned self-spawn lane never even reaches this probe).
|
|
160
|
-
*/
|
|
161
36
|
export declare function engineLimitsSupportWarning(baseUrl: string, flaggedFlags: string[], opts?: {
|
|
162
37
|
fetchImpl?: typeof fetch;
|
|
163
38
|
timeoutMs?: number;
|
package/dist/limitsWire.js
CHANGED
|
@@ -1,101 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/limitsWire.ts — headless `-p` run-limits wire: expose the engine's TASK-LEVEL budget face on
|
|
3
|
-
* the headless `-p` path via `TaskRequest.limits`.
|
|
4
|
-
*
|
|
5
|
-
* ── core 5.8.0 词表迁移([2489],2026-08-04)────────────────────────────────────────────
|
|
6
|
-
* `limits` 是**唯一预算面,默认全空 = 无限制**。本模块拼的三个键都骑 5.8.0 的新词表:
|
|
7
|
-
* · `maxWalltimeMs`(**毫秒**;5.7 的 `limits.timeoutSec` 已删,单位一并变)
|
|
8
|
-
* · `maxTurns`
|
|
9
|
-
* · `maxOutputTokens`(5.8.0 的**主限**——time 退出任务轴之后,token 是首选的预算旋钮;
|
|
10
|
-
* wire 键名自 5.7 起一直是 maxOutputTokens,core 内部才叫 maxTokens——[2569] 案订正)。
|
|
11
|
-
* 🔴 到限形订正([2592]/[2593] 案):这是**单请求输出上限**不是累计预算——撞线=生成中被
|
|
12
|
-
* 截断(工具调用参数途中被砍以 provider 截断披露上浮,core 3dfdb8f 起披露点名 cap),
|
|
13
|
-
* **不出** `limits.max_tokens_exceeded`(那是 core 内部累计预算键 `maxTokens` 的码,本 wire
|
|
14
|
-
* 从不发那个键 ⇒ 消费端别拿那个码当 --max-tokens 的到限判据)。
|
|
15
|
-
* 到限语义也换了:**没有配速机器了**。5.8.0 删掉了 deadlineNudge / callCapByDeadline /
|
|
16
|
-
* gracefulFinalize 那一套(以及引擎侧 1000 轮安全网、fork 200、session-bg 30min 暗注等全部隐式
|
|
17
|
-
* 默认),走到 `maxWalltimeMs` 不再是「引擎自己减速然后优雅收尾」,而是**响亮终局**:
|
|
18
|
-
* `status:'failed'` + `errorCode:'limits.max_walltime_exceeded'`(`status:'timeout'` 这个词整体退役)。
|
|
19
|
-
* 四个新码 `limits.max_{tokens,cost,turns,walltime}_exceeded` 的下游投影见
|
|
20
|
-
* `adapter/downstream/terminalToSdkResult.ts`。
|
|
21
|
-
*
|
|
22
|
-
* ✅ **窗口期已关闭(退役批,2026-08-04)**:交付时点壳的引擎是 server 5.14.0(捆 core 5.7),它
|
|
23
|
-
* **不认识** `maxWalltimeMs`/`maxTokens`(5.7 只认 `timeoutSec`/`maxOutputTokens`/`maxTurns`,未知键
|
|
24
|
-
* 静默丢弃),所以那段时间三个键里只有 `maxTurns` 真的生效。**server 6.0.0 已捆 core 5.8.0 发车**
|
|
25
|
-
* ⇒ 新键集在班车上生效,读面的双代兜底(`adapter/downstream/terminalToSdkResult.ts`)本批一并退役。
|
|
26
|
-
* 写面从头到尾是**单一新形**,不做两代并发(同时发 `timeoutSec` + `maxWalltimeMs` 会在 5.8 引擎上撞
|
|
27
|
-
* `config.limit_unknown_key` 当场失败,那是拿窗口期的一次静默无视换班车到货后的确定性失败)。
|
|
28
|
-
*
|
|
29
|
-
* THREE FLAGS, THREE ALIGNMENT BUCKETS:
|
|
30
|
-
* · `--deadline <sec>` → limits.maxWalltimeMs(用户面仍是**秒**,拼 wire 时 ×1000)。Upstream
|
|
31
|
-
* CC 2.1.207 has NO deadline flag → SUPERSET, help copy says so.
|
|
32
|
-
* · `--max-turns <n>` → limits.maxTurns. Upstream CC 2.1.207 HAS `--max-turns` (source 199676 /
|
|
33
|
-
* 793380) → ALIGNMENT-GAP fill: the flag was already registered (main.tsx CC-inherited surface) and
|
|
34
|
-
* drove the local query loop, but the seam path executes turns ENGINE-side — this wire finally
|
|
35
|
-
* carries the cap to where the turns actually run.
|
|
36
|
-
* · `--max-tokens <n>` → limits.maxOutputTokens(5.8.0 主限;wire 键名见接口注——绝不直发
|
|
37
|
-
* core 内部键 maxTokens,[2569] 案)。Upstream CC 2.1.207 has no run-level
|
|
38
|
-
* token budget flag → SUPERSET.
|
|
39
|
-
*
|
|
40
|
-
* PRECEDENCE per knob (flag > settings > none), scenarioWire 三件套同款:
|
|
41
|
-
* a) explicit flag → strict validation, FAIL-LOUD on an invalid
|
|
42
|
-
* value (integer domain below; a mis-typed budget bound must not quietly run unbounded).
|
|
43
|
-
* b) settings env lane (settings.json `env` block → 1a-envseed → process.env):
|
|
44
|
-
* `SEMA_HEADLESS_DEADLINE_SEC` / `SEMA_HEADLESS_MAX_TURNS` / `SEMA_HEADLESS_MAX_TOKENS`
|
|
45
|
-
* → 同 a) FAIL-LOUD on an invalid value(#132 / test [2508] 2026-08-04 推翻旧 batch-E
|
|
46
|
-
* 「静默降级」形;见 headlessLimitsFromEnv 的 JSDoc——非法值 {ok:false} 上抛,caller exit 1,
|
|
47
|
-
* 常驻门 run-limits-env-failloud-test.mjs 守此形)。
|
|
48
|
-
* c) neither → NO stamp = today's behaviour, verbatim.
|
|
49
|
-
*
|
|
50
|
-
* DOMAINS (integer, inclusive): deadline 30..86400 **秒**(→ 30_000..86_400_000 ms 上 wire)·
|
|
51
|
-
* maxTurns / maxTokens = **正整数**(上界 = JS 安全整数)。maxTurns 此前钉 1..1000,那个上界抄的是
|
|
52
|
-
* 引擎侧 1000 轮安全网;5.8.0 把该安全网整体退役了,壳再替它守一个不存在的墙就是凭空拒绝合法配置。
|
|
53
|
-
*
|
|
54
|
-
* VERSION GATE (triage risk ③ — an OLD server SILENTLY SWALLOWS unknown body fields, worse than not
|
|
55
|
-
* shipping): the self-spawned engine is release-pinned ≥1.197.0 so the dev/release lanes are safe by
|
|
56
|
-
* construction; but a user-supplied SEMA_ENGINE_URL may point at an older engine. When the user
|
|
57
|
-
* EXPLICITLY passed a flag (env-lane defaults stay quiet) and SEMA_ENGINE_URL is in play, the caller
|
|
58
|
-
* probes `${baseUrl}/health` (the engine self-describes `version` since 1.96) and prints ONE honest
|
|
59
|
-
* stderr line when version <1.196.0 — the request still goes out unchanged (warn, don't block).
|
|
60
|
-
* Unreachable /health or an unparsable version stays silent (can't confirm staleness — fail-soft).
|
|
61
|
-
*
|
|
62
|
-
* 📐 **两道地板,守的不是同一件事**(退役批补记,2026-08-04):
|
|
63
|
-
* · 第一地板 `LIMITS_WIRE_MIN_ENGINE = 1.196.0` = 「`limits` 这个**字段**存不存在」(server 1.196.0
|
|
64
|
-
* 起接受 body.limits);低于它,整个预算面被丢。
|
|
65
|
-
* · 第二地板 **server ≥ 6.0.0** = 「**新键集**认不认」。6.0.0 是第一个捆 core 5.8.0 的 server 版本,
|
|
66
|
-
* 也就是第一个认识 `maxWalltimeMs` 的版本(5.7 只认 `timeoutSec`/`maxOutputTokens`/`maxTurns`,
|
|
67
|
-
* 未知键静默丢弃)。**[2569] 案订正**:`maxOutputTokens` 自 5.7 就在 wire 词表,本模块此前
|
|
68
|
-
* 直发 core 内部键 `maxTokens` 才是被静默无视的那个(server 6.3.0 起 400);对 1.196.0 ≤
|
|
69
|
-
* version < 6.0.0 的引擎,`maxTurns`/`maxOutputTokens` 生效而 `maxWalltimeMs` 被静默无视。
|
|
70
|
-
* 之所以过去写不出这条:/health 自报的是 server 版本,而键名代际取决于它捆的 core 版本,当时
|
|
71
|
-
* 两者没有可从 wire 读出的映射;6.0.0 这班车把映射钉死了(6.0.0 ⇒ core ≥5.8),这条地板才成立。
|
|
72
|
-
* · 本文件的运行期探针目前只对第一地板发声(warn, don't block);第二地板先落成契约事实写在这里,
|
|
73
|
-
* 要不要给它也配一条 stderr 提示是**行为面**决定,按宪法三问单独走,不在退役批里顺手加。
|
|
74
|
-
*/
|
|
75
1
|
import { hostEnv } from './hostEnv.js';
|
|
76
2
|
import { lastFlagValue } from './argvFlagValue.js';
|
|
77
|
-
/** Settings-lane env knobs (settings.json `env` block → 1a-envseed → process.env). */
|
|
78
3
|
export const HEADLESS_DEADLINE_ENV = 'SEMA_HEADLESS_DEADLINE_SEC';
|
|
79
4
|
export const HEADLESS_MAX_TURNS_ENV = 'SEMA_HEADLESS_MAX_TURNS';
|
|
80
5
|
export const HEADLESS_MAX_TOKENS_ENV = 'SEMA_HEADLESS_MAX_TOKENS';
|
|
81
|
-
/** `--deadline` 的**用户面**整数域(秒;30s..24h)。上 wire 前 ×1000 换成 `maxWalltimeMs`。 */
|
|
82
6
|
export const DEADLINE_SEC_MIN = 30;
|
|
83
7
|
export const DEADLINE_SEC_MAX = 86_400;
|
|
84
|
-
/**
|
|
85
|
-
* `maxTurns` / `maxTokens` 的整数域 = **正整数**(上界只到 JS 安全整数,再大就不是「一个精确的
|
|
86
|
-
* 轮数/token 数」而是浮点近似了 —— 那种值静默夹取比拒绝更坏)。
|
|
87
|
-
*
|
|
88
|
-
* `MAX_TURNS_MAX` 此前是 `1_000`,抄的是引擎侧的 1000 轮安全网;core 5.8.0 把那张网**整体退役**
|
|
89
|
-
* (「零配置任务现在没有任何任务级兜底」,[2489]),壳再守它 = 替一堵不存在的墙拒绝合法配置。
|
|
90
|
-
* 常量名保留(它仍然是这个域的上界,只是值换成了真上界),消费者的 help 文案请按「正整数」写。
|
|
91
|
-
*/
|
|
92
8
|
export const MAX_TURNS_MIN = 1;
|
|
93
9
|
export const MAX_TURNS_MAX = Number.MAX_SAFE_INTEGER;
|
|
94
10
|
export const MAX_TOKENS_MIN = 1;
|
|
95
11
|
export const MAX_TOKENS_MAX = Number.MAX_SAFE_INTEGER;
|
|
96
|
-
/** 用户面秒 → wire 毫秒(core 5.8.0 `limits.maxWalltimeMs` 的单位)。 */
|
|
97
12
|
const SEC_TO_MS = 1_000;
|
|
98
|
-
/** First server version whose /v1/tasks|/v1/tasks/stream accept body.limits (board [857]). */
|
|
99
13
|
export const LIMITS_WIRE_MIN_ENGINE = [1, 196, 0];
|
|
100
14
|
const DEADLINE_USAGE = `sema: --deadline expects a whole number of seconds between ${DEADLINE_SEC_MIN} and ${DEADLINE_SEC_MAX}.\n` +
|
|
101
15
|
' --deadline <sec> wall-clock budget for this run (sema superset — no upstream equivalent):\n' +
|
|
@@ -111,15 +25,7 @@ const MAX_TOKENS_USAGE = 'sema: --max-tokens expects a positive whole number of
|
|
|
111
25
|
' generation mid-stream (a cut inside tool-call arguments surfaces as a\n' +
|
|
112
26
|
' provider truncation error)\n' +
|
|
113
27
|
' (no flag) no output-token cap — today\'s behaviour';
|
|
114
|
-
/** STRICT integer shape for explicit flag values: ASCII digits only (no sign/decimal/exponent/space). */
|
|
115
28
|
const INT_RE = /^\d+$/;
|
|
116
|
-
// `lastFlagValue` (the `--name <v>`/`--name=<v>`/repeated-flag-last-wins scan) now lives in
|
|
117
|
-
// argvFlagValue.ts (REF-CC-143/dup-07, P3 wave1 卡C-argv, 2026-08-01) — this was the fullest of five
|
|
118
|
-
// hand-rolled copies (present/raw/valueMissing three-state) and is the one the shared leaf was cribbed
|
|
119
|
-
// from verbatim; see that file's header for the shared 缺值 contract. All three flags are
|
|
120
|
-
// all-positive domains, so a NEGATIVE number (which looks flag-shaped to the scanner) correctly
|
|
121
|
-
// falls into the same fail-loud usage-hint path as a genuinely missing value below.
|
|
122
|
-
/** Validate a RAW flag value against an inclusive integer domain. Returns the number or null. */
|
|
123
29
|
function parseIntInDomain(raw, min, max) {
|
|
124
30
|
const v = raw.trim();
|
|
125
31
|
if (!INT_RE.test(v))
|
|
@@ -129,17 +35,9 @@ function parseIntInDomain(raw, min, max) {
|
|
|
129
35
|
return null;
|
|
130
36
|
return n;
|
|
131
37
|
}
|
|
132
|
-
/** 三个键任一在场 ⇒ 值得 stamp(空对象绝不上 wire —— 那是「配了个空预算」不是「没配」)。 */
|
|
133
38
|
function hasAnyLimit(l) {
|
|
134
39
|
return l.maxWalltimeMs !== undefined || l.maxTurns !== undefined || l.maxOutputTokens !== undefined;
|
|
135
40
|
}
|
|
136
|
-
/**
|
|
137
|
-
* Parse `--deadline` + `--max-turns` + `--max-tokens` out of an argv slice. No flags ⇒ `{ok:true}`
|
|
138
|
-
* with no limits. Repeated flag ⇒ LAST wins (commander convention). Missing value / non-integer /
|
|
139
|
-
* out-of-domain ⇒ fail-LOUD parse error (never a silent default — same stance as
|
|
140
|
-
* `--scenario`/`--sandbox`). `flaggedFlags` names the flags that EXPLICITLY contributed (the
|
|
141
|
-
* version-gate probe trigger).
|
|
142
|
-
*/
|
|
143
41
|
export function parseLimitsArgv(argv) {
|
|
144
42
|
const limits = {};
|
|
145
43
|
const flaggedFlags = [];
|
|
@@ -148,7 +46,6 @@ export function parseLimitsArgv(argv) {
|
|
|
148
46
|
const n = dl.raw !== undefined ? parseIntInDomain(dl.raw, DEADLINE_SEC_MIN, DEADLINE_SEC_MAX) : null;
|
|
149
47
|
if (n === null)
|
|
150
48
|
return { ok: false, error: DEADLINE_USAGE };
|
|
151
|
-
// 用户面是秒,wire 面是毫秒(core 5.8.0 `maxWalltimeMs`)—— 换算只在这一个方向、这一个点做。
|
|
152
49
|
limits.maxWalltimeMs = n * SEC_TO_MS;
|
|
153
50
|
flaggedFlags.push('--deadline');
|
|
154
51
|
}
|
|
@@ -185,7 +82,7 @@ export function headlessLimitsFromEnv(env = hostEnv()) {
|
|
|
185
82
|
error: `Error: ${HEADLESS_DEADLINE_ENV}="${dl}" is not an integer in ${DEADLINE_SEC_MIN}..${DEADLINE_SEC_MAX} (seconds). Fix or unset it.`,
|
|
186
83
|
};
|
|
187
84
|
}
|
|
188
|
-
out.maxWalltimeMs = n * SEC_TO_MS;
|
|
85
|
+
out.maxWalltimeMs = n * SEC_TO_MS;
|
|
189
86
|
}
|
|
190
87
|
const mt = env[HEADLESS_MAX_TURNS_ENV]?.trim();
|
|
191
88
|
if (mt) {
|
|
@@ -205,23 +102,16 @@ export function headlessLimitsFromEnv(env = hostEnv()) {
|
|
|
205
102
|
}
|
|
206
103
|
return { ok: true, limits: hasAnyLimit(out) ? out : undefined };
|
|
207
104
|
}
|
|
208
|
-
/**
|
|
209
|
-
* Resolve the limits for a headless `-p` submit: explicit flags > settings env defaults > none
|
|
210
|
-
* (= no stamp, today's behaviour). Merge is PER-KNOB: `--deadline 300` + SEMA_HEADLESS_MAX_TURNS=50
|
|
211
|
-
* yields {maxWalltimeMs:300000, maxTurns:50}. Flag parse errors propagate fail-loud; the caller exits.
|
|
212
|
-
*/
|
|
213
105
|
export function limitsForPrint(argv, env = hostEnv()) {
|
|
214
106
|
const parsed = parseLimitsArgv(argv);
|
|
215
107
|
if (!parsed.ok)
|
|
216
108
|
return parsed;
|
|
217
|
-
// #132:env 面非法值与 flag 同拍响亮拒(见 headlessLimitsFromEnv 头注)。
|
|
218
109
|
const fromEnv = headlessLimitsFromEnv(env);
|
|
219
110
|
if (!fromEnv.ok)
|
|
220
111
|
return { ok: false, error: fromEnv.error };
|
|
221
112
|
const merged = { ...(fromEnv.limits ?? {}), ...(parsed.limits ?? {}) };
|
|
222
113
|
return { ok: true, ...(hasAnyLimit(merged) ? { limits: merged } : {}), flaggedFlags: parsed.flaggedFlags };
|
|
223
114
|
}
|
|
224
|
-
/** True when the engine version string satisfies the limits-wire minimum (≥1.196.0). Unparsable ⇒ false. */
|
|
225
115
|
export function versionSupportsLimits(v) {
|
|
226
116
|
const m = v ? /^(\d+)\.(\d+)\.(\d+)/.exec(v) : null;
|
|
227
117
|
if (!m)
|
|
@@ -234,13 +124,6 @@ export function versionSupportsLimits(v) {
|
|
|
234
124
|
return b > mb;
|
|
235
125
|
return c >= mc;
|
|
236
126
|
}
|
|
237
|
-
/**
|
|
238
|
-
* Version-gate probe (triage risk ③): GET `${baseUrl}/health`, read `version`, and return ONE honest
|
|
239
|
-
* stderr line when the engine is confirmed <1.196.0 — the caller prints it and SENDS ANYWAY (the old
|
|
240
|
-
* server drops the field server-side; warn, don't block). Returns undefined when the engine is new
|
|
241
|
-
* enough, unreachable, or self-describes no parsable version (can't confirm staleness — fail-soft
|
|
242
|
-
* silent; the release-pinned self-spawn lane never even reaches this probe).
|
|
243
|
-
*/
|
|
244
127
|
export async function engineLimitsSupportWarning(baseUrl, flaggedFlags, opts) {
|
|
245
128
|
const fetchImpl = opts?.fetchImpl ?? fetch;
|
|
246
129
|
const controller = new AbortController();
|
|
@@ -254,14 +137,13 @@ export async function engineLimitsSupportWarning(baseUrl, flaggedFlags, opts) {
|
|
|
254
137
|
return undefined;
|
|
255
138
|
const body = (await res.json());
|
|
256
139
|
const version = typeof body?.version === 'string' ? body.version : undefined;
|
|
257
|
-
// No version field = pre-1.96 engine — definitely older than 1.196.0, warn honestly.
|
|
258
140
|
if (versionSupportsLimits(version))
|
|
259
141
|
return undefined;
|
|
260
142
|
const flags = flaggedFlags.length > 0 ? flaggedFlags.join('/') : '--deadline/--max-turns/--max-tokens';
|
|
261
143
|
return `[sema] engine ${version ?? '(unversioned, pre-1.96)'} does not support ${flags} (needs ≥1.196.0); the flag will be ignored by the engine`;
|
|
262
144
|
}
|
|
263
145
|
catch {
|
|
264
|
-
return undefined;
|
|
146
|
+
return undefined;
|
|
265
147
|
}
|
|
266
148
|
finally {
|
|
267
149
|
clearTimeout(timer);
|
|
@@ -1,97 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B6 批搬迁(2026-07-27,设计稿 §3 B6 · B2 判给后批的**宿主耦合六件**之一):cli
|
|
3
|
-
* `src/sema/liveInitToolFace.ts` 整搬。B2 当时不搬的理由 = 它 `await import('./engineTarget.js')`
|
|
4
|
-
* 取凭证,而 engineTarget 是 fs 重图;B4 的 §8-2 收编把凭证解析定到了 `resolveWireAuth`
|
|
5
|
-
* (engineWireSdk,零依赖),那条理由随之消失。
|
|
6
|
-
*
|
|
7
|
-
* 🔴 搬迁三处差分(行为一字节不变):
|
|
8
|
-
* ① 凭证:`engineTarget.resolveLiveAuthToken(baseUrl)`(其 token 缺省 = `process.env.SEMA_LIVE_TOKEN`)
|
|
9
|
-
* → `resolveWireAuth(baseUrl, env.SEMA_LIVE_TOKEN)`。两者是同一套 #118 三态,`resolveWireAuth`
|
|
10
|
-
* 的头注自述就是它的收编口。取值面完全一致:三态里只有**真 token 串**与 `'anon'` 是 string,
|
|
11
|
-
* `{mode:'loopback-unauthed'}` 是对象 ⇒ 原文那句 `typeof t === 'string' ? t : undefined` 语义照搬。
|
|
12
|
-
* ② 三个 `await import('./xxxWire.js')` fail-soft 动态 import → **静态 import**(scenarioWire /
|
|
13
|
-
* interactiveToolsWire / webSearchWireCaps 三件 B5 都已在本包内)。原文那三层 try/catch 的
|
|
14
|
-
* 目的是「模块缺席也别挡首帧」,包内它们不可能缺席;**try/catch 仍逐条保留**——它护的另一半是
|
|
15
|
-
* 「函数自己抛」,那半在包内照样成立。
|
|
16
|
-
* ③ `process.env` → 入参 `EnvLike`(签名本来就显式收 env;缺省值不存在,调用方必传)。
|
|
17
|
-
*
|
|
18
|
-
* 🔴 模块级状态:`cached`(baseUrl+scenario+旋钮 键控的一次性探测缓存)。写读口都在本文件;
|
|
19
|
-
* 两份实例只是多探一次(不是静默失效),但仍登记进单实例清单。
|
|
20
|
-
*
|
|
21
|
-
* ── 以下为原文件的领域说明(逐字保留)────────────────────────────────────────────────────────
|
|
22
|
-
*
|
|
23
|
-
* liveInitToolFace — 件1(core [931] 壳半场):headless `-p` live 车道 `system/init` 首帧的
|
|
24
|
-
* `tools` 自报面,从「壳静态工具表」改为「引擎实挂 wire 词表」生成。
|
|
25
|
-
*
|
|
26
|
-
* 根因(core [931]/CC209 裁决):壳自报静态表(TodoWrite 在、TaskCreate 族不在)而引擎 wire 实挂
|
|
27
|
-
* TaskCreate 族(core 1.296+ 默认)且不挂 TodoWrite ⇒ SDK/自动化消费者照自报面配
|
|
28
|
-
* `--disallowedTools TodoWrite` 之类静默无效(fail-open)。core 1.300 已在引擎侧加名单池审计
|
|
29
|
-
* advisory(config.toolpolicy.unmatched_names)兜观测面;这里是壳半场 = 自报按实挂生成。
|
|
30
|
-
*
|
|
31
|
-
* 真源层级(gap-check 2026-07-16 实测读数,server 1.214.0 / core 1.300.0):
|
|
32
|
-
* 1. server 无全量挂载探测面:GET /v1/capabilities 只有能力布尔;
|
|
33
|
-
* GET /v1/capabilities/scenarios/:name 只含【场景附加】工具(default/code →
|
|
34
|
-
* Now/WebFetch/Agent/TaskCreate 族七具),首方 band(Bash/Read/…)由 core prepare-task
|
|
35
|
-
* 另挂、不进该面 ⇒ 整表无法远端取。
|
|
36
|
-
* 2. 故缺省场景用壳已知 wire 词表(下表):观测 tap 记录壳 `-p` live 车道 LLM 请求体
|
|
37
|
-
* tools[].name(REMOTE_EXEC=host 生产姿势)实测定稿,再按壳自己 stamp 的请求旋钮修正
|
|
38
|
-
* (interactiveTools≠false → AskUserQuestion;settings.webSearch 在 → WebSearch)。
|
|
39
|
-
* 3. per-scenario 差异如实标注:非缺省 scenario(--scenario/SEMA_HEADLESS_SCENARIO)的工具面
|
|
40
|
-
* 由部署定义(scan/oa = repo-readonly 面,首方 band 是否在位壳无法确证)⇒ 尽力探场景详情面
|
|
41
|
-
* GET /v1/capabilities/scenarios/:name 报【场景附加】工具 + runner 恒挂段,并经
|
|
42
|
-
* SEMA_DEBUG 如实标注是探测面而非整表;探测失败回退缺省词表(fail-soft,绝不阻塞首帧)。
|
|
43
|
-
* 4. mock/离线车道(无 SEMA_LIVE_BASEURL)返回 null,调用方保持现状静态表 —— 宪法三问的
|
|
44
|
-
* 补偿轴:离线态回退静态表,行为字节不变。
|
|
45
|
-
*
|
|
46
|
-
* 已知局限(如实):词表按 pin 的 server/core 版本定稿,外接旧引擎或无执行底座的 worker
|
|
47
|
-
* (REMOTE_EXEC 缺省的裸 worker 不挂 hands band)会有偏差 —— 但相比旧静态表(TodoWrite 幻影 +
|
|
48
|
-
* TaskCreate 族缺席)已是严格更准的自报;整表探测面等引擎侧补(见 [931] 报告)。
|
|
49
|
-
*/
|
|
50
1
|
import { type EngineProbeOpts } from './engineWireSdk.js';
|
|
51
2
|
import type { EnvLike } from './hostEnv.js';
|
|
52
|
-
/** hands band(本地/远程执行底座在位时 prepare-task 挂载;壳自 spawn 恒 REMOTE_EXEC=host ⇒ 在位)。 */
|
|
53
3
|
export declare const ENGINE_HANDS_BAND: readonly string[];
|
|
54
|
-
/** 缺省(code/default)场景附加段 —— 与 GET /v1/capabilities/scenarios/{code,default} 详情面
|
|
55
|
-
* 实测逐字一致(场景工厂 nowTool + assembleFullBodyTools)。
|
|
56
|
-
* ⚠️ TodoWrite 故意不在(core 1.296+ 默认 taskList:true ⇒ TodoWrite 不挂,[931] 本案根因);
|
|
57
|
-
* TaskCreate 族在 —— 这两条就是本修要对齐的实况。 */
|
|
58
4
|
export declare const ENGINE_SCENARIO_EXTRAS_DEFAULT: readonly string[];
|
|
59
|
-
/** runner 恒挂段(prepare-task 按请求旋钮挂载、场景无关):壳 `-p` 恒 stamp
|
|
60
|
-
* selfOrchestration→Workflow、attachments.backgroundTasks→TaskOutput/TaskStop/Monitor/
|
|
61
|
-
* SendMessage/AgentTranscript;ReadToolResult/ReportBlocked/ReportFindings/Skill/Cron 族/
|
|
62
|
-
* ScheduleWakeup 为 runner 缺省注入。 */
|
|
63
5
|
export declare const ENGINE_RUNNER_FACE: readonly string[];
|
|
64
|
-
/** [1036]/clay 裁:runner 恒挂段按壳已知 env 门过滤——print 宿主前置 SCHEDULER_ENABLED=false
|
|
65
|
-
* (scheduler 族 headless 不挂)/SELF_ORCHESTRATION_ENABLED=false(Workflow 卸)时,自报面
|
|
66
|
-
* 必须跟实挂(此前静态词表在 env 门形态失真=自报 32 实挂 28,消融实测逮到)。 */
|
|
67
6
|
export declare function runnerFaceForEnv(env: EnvLike): string[];
|
|
68
7
|
export type LiveInitToolFace = {
|
|
69
8
|
tools: Array<{
|
|
70
9
|
name: string;
|
|
71
10
|
}>;
|
|
72
|
-
/** 'wire-vocabulary' = 缺省词表;'scenario-probe' = 非缺省场景 + 详情面探测成功。 */
|
|
73
11
|
source: 'wire-vocabulary' | 'scenario-probe';
|
|
74
12
|
};
|
|
75
|
-
/** 测试钩子:清缓存。 */
|
|
76
13
|
export declare function _resetLiveInitToolFaceForTest(): void;
|
|
77
|
-
/** 非缺省场景的详情面探测:SDK 0.0.52 scenarioCapabilities(name)(GET /v1/capabilities/scenarios/:name,
|
|
78
|
-
* 同 wire 同 encodeURIComponent)→ { tools(场景附加段), toolset }。fail-soft:任何失败(网络/404/
|
|
79
|
-
* 形状不符/超时)返回 null,调用层回退缺省词表。等价性记账:超时经 client timeoutMs(缺省 2s 同预算,
|
|
80
|
-
* maxRetries=0 单发同原语义);ScenarioDetail 类型面之外仍保留逐字段运行时校验(引擎回什么不轻信)。
|
|
81
|
-
* principal 头:SDK 6.11 起值检查删头(缺席不发;F-011 停发后单机形恒缺席)——原手抄在无 principal
|
|
82
|
-
* 时省略该头;principal-first 宪法姿势,对 requirePrincipal 部署是 fail-open 改善。 */
|
|
83
14
|
export declare function probeScenarioTools(baseUrl: string, scenario: string, opts?: EngineProbeOpts): Promise<{
|
|
84
15
|
tools: string[];
|
|
85
16
|
toolset?: string;
|
|
86
17
|
} | null>;
|
|
87
|
-
/**
|
|
88
|
-
* resolveLiveInitToolFace — live 车道 init 首帧 `tools` 的实挂投影。
|
|
89
|
-
* · 无 SEMA_LIVE_BASEURL ⇒ null(mock/离线车道,调用方维持静态表现状);
|
|
90
|
-
* · 缺省场景 ⇒ hands band + runner 恒挂段 + 旋钮修正(词表车道,零 IO);
|
|
91
|
-
* · 非缺省场景 ⇒ 详情面探测成功用【场景附加 + runner 恒挂】(如实标注:hands band 是否在位
|
|
92
|
-
* 由部署定,不妄报),失败回退缺省词表;
|
|
93
|
-
* · 任何内部错误 fail-soft 返回 null(调用方回退静态表,首帧永不因此缺席)。
|
|
94
|
-
*/
|
|
95
18
|
export declare function resolveLiveInitToolFace(argv: readonly string[], env: EnvLike, opts?: {
|
|
96
19
|
fetchImpl?: typeof fetch;
|
|
97
20
|
timeoutMs?: number;
|