@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/toolRoster.d.ts
CHANGED
|
@@ -1,62 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/toolRoster.ts — 一条腿的**工具名册**(`wiring_manifest.tools: ToolRoster`)窄读器 +
|
|
3
|
-
* `tool_roster_delta` 应用(0.63.0;L-161;engine >=7.66.0 有臂 / >=7.9.0 真推 /
|
|
4
|
-
* sdk 8.6.0 型面 + 8.7.0 `pathTarget` 三键)。
|
|
5
|
-
*
|
|
6
|
-
* -- 名册回答的是三端一直在猜的那一问 --------------------------------------------------------
|
|
7
|
-
* 「这条腿到底挂了哪些工具、每一只是什么面」此前只能猜:`liveInitToolFace.ts` 那三张词表
|
|
8
|
-
* (`ENGINE_HANDS_BAND` / `ENGINE_SCENARIO_EXTRAS_DEFAULT` / `ENGINE_RUNNER_FACE`)是 2026-07-16
|
|
9
|
-
* 一次 tap 实测的**估计值**,按 pin 的引擎版本定稿;外接别的引擎、别的场景、别的 env 门就会偏。
|
|
10
|
-
* 名册是**引擎自己说的**:每只工具的身份(契约 id / 形状指纹 / 能力 id)、轴(effect / egress /
|
|
11
|
-
* irreversibility)、面(family / pathTarget / renderHints)。
|
|
12
|
-
* 🔴 **名册在场用名册,缺席才回落三表**。本批**不删**那三张表(名册只在 effective 半场、且只有
|
|
13
|
-
* >=7.9.0 的引擎才真推,回落还得留着);`liveInitToolFace.ts` 的头注登记了退役条款:
|
|
14
|
-
* **名册恒在场的版本到货即删表**。
|
|
15
|
-
*
|
|
16
|
-
* -- 🔴 绝不半张名册(照抄上游的纪律)--------------------------------------------------------
|
|
17
|
-
* 引擎的 fail-open 台账逐字写着:载荷过不了 core 自己的判形器 => 那一段缺席 / 那一帧不发,
|
|
18
|
-
* **绝不半张脸上 wire**;并写明反方向更坏 ——「把一份判不了形的名册照发,消费端会把读不出的行
|
|
19
|
-
* 当成**这只工具没挂**」。本窄读器照抄这条:**任一行读不出 => 整只 `undefined`**;`count` 与真实
|
|
20
|
-
* 行数对不上同理(core 在铸点 run-time 断言两者相等)。少几行的名册比没有名册坏。
|
|
21
|
-
* ⚠️ 例外只有**面**:一行的 `pathTarget` / `renderHints` 自己形坏时只丢那一格,行还在 —— 面不是
|
|
22
|
-
* 身份,丢一张面不等于「这只工具没挂」。
|
|
23
|
-
*
|
|
24
|
-
* -- 🔴 `fromDigest` 对不上**不是拒绝** ------------------------------------------------------
|
|
25
|
-
* 契约里唯一的硬话:`fromDigest` 对不上时,**携带的整只名册无论如何都是新状态**,只有 `summary`
|
|
26
|
-
* 变得不可用(消费端记一次 skew 后按快照重同步)。所以 {@link applyToolRosterDelta} 在 skew 时
|
|
27
|
-
* **照换名册、只丢 summary**。拒绝换会让消费端永远抱着一份过期名册 —— 那比一次 skew 坏得多,
|
|
28
|
-
* 而且它把「位置从名册来、永远不从 summary 来」这条契约反过来用了。
|
|
29
|
-
*
|
|
30
|
-
* -- 开集读 -----------------------------------------------------------------------------------
|
|
31
|
-
* `source`(七词)/ `effect` / `family` / `access` / 三个 `*Provenance` 等词表的属主都是引擎,一律
|
|
32
|
-
* **原样透传**,不窄读成枚举 —— 那会在引擎加词当天把一份真名册判没。
|
|
33
|
-
*
|
|
34
|
-
* -- 🔴 逐键窄读器 vs 上游的逐字透传(L-290 的病形,0.68.1)-----------------------------------
|
|
35
|
-
* server(`src/trace/project.ts` 的 `tools` 段)对名册的姿势是**整只判形 + 逐字透传**,理由逐字:
|
|
36
|
-
* 成员表由 core 以 typebox schema 单点持有,手抄一张挑键表 = 立刻多一份会漂的镜像。本读器**确实**
|
|
37
|
-
* 是那份镜像(本包要给三端一个窄化过的视图,不能把 30 余键的开集原样甩出去)—— 所以镜像必须有账:
|
|
38
|
-
* `scripts/run-tool-roster-projection-test.mjs` **G 段**拿**实装 core 的 schema 成员表**与本读器
|
|
39
|
-
* 真挑出来的键集逐键对账,core 的每一个成员要么被挑、要么在账上写明「为什么不挑」;上游加一个
|
|
40
|
-
* 成员而账上没有 ⇒ 当天红。没有这本账,「挑漏一个键 = 那个键在包边界上不存在」就会一直无声发生。
|
|
41
|
-
*/
|
|
42
|
-
/** 一只工具的**路径目标**(引擎的 `pathTarget`;`base`/`absent`/`patternParam` 是 core 7.9.1 #635 加的)。 */
|
|
43
1
|
export interface ToolRosterPathTargetView {
|
|
44
|
-
/** 输入里哪个键是路径。 */
|
|
45
2
|
param: string;
|
|
46
|
-
/** `read` / `create` / `edit`;**开集读**。 */
|
|
47
3
|
access: string;
|
|
48
|
-
/** 同义键。 */
|
|
49
4
|
aliases?: readonly string[];
|
|
50
5
|
skillScopeEligible?: true;
|
|
51
|
-
/** 相对路径按哪个基解析(`cwd` 活目录 / `root` 任务根);**声明时才在场**,缺席就是缺席。 */
|
|
52
6
|
base?: string;
|
|
53
|
-
/** 参数缺席时目标是什么(`none` 无 / `base` 基目录)。同上,缺席不铸默认。 */
|
|
54
7
|
absent?: string;
|
|
55
|
-
/** 承载 glob **模式**的输入键(如 `Glob.pattern`)。 */
|
|
56
8
|
patternParam?: string;
|
|
57
9
|
}
|
|
58
|
-
/** 一只工具的**渲染提示**(引擎自己给的人话名 / 进行时文案 / 摘要参数 / 结果卡 / 审批卡型)。
|
|
59
|
-
* 🔴 端渲这只工具时用它,**别按工具名猜** —— 按名字猜正是 `liveInitToolFace` 三张估计词表的病根。 */
|
|
60
10
|
export interface ToolRosterRenderHintsView {
|
|
61
11
|
userFacingName?: string;
|
|
62
12
|
activity?: string;
|
|
@@ -64,13 +14,10 @@ export interface ToolRosterRenderHintsView {
|
|
|
64
14
|
resultCards?: readonly string[];
|
|
65
15
|
approvalCard?: string;
|
|
66
16
|
}
|
|
67
|
-
/** 名册里的一行。身份两键必填,其余全可选(缺席即缺席,绝不铸默认)。 */
|
|
68
17
|
export interface ToolRosterEntryView {
|
|
69
18
|
name: string;
|
|
70
19
|
aliases?: readonly string[];
|
|
71
|
-
/** `builtin` / `caller` / `host` / `mcp` / `a2a` / `external` / `synthetic`;**开集读**。 */
|
|
72
20
|
source: string;
|
|
73
|
-
/** mcp / a2a / external 行才有的出身(`peer` = 声明名)。 */
|
|
74
21
|
origin?: {
|
|
75
22
|
peer: string;
|
|
76
23
|
declaredBy?: string;
|
|
@@ -81,38 +28,14 @@ export interface ToolRosterEntryView {
|
|
|
81
28
|
};
|
|
82
29
|
shapeDigest?: string;
|
|
83
30
|
wireSchemaDigest?: string;
|
|
84
|
-
/** 卡的身份。**同名不同身的两行按两只 id 去重,不按 `name`**。 */
|
|
85
31
|
cardId?: string;
|
|
86
32
|
capabilityId?: string;
|
|
87
|
-
/** `read` / `write` / `idempotent`;开集读。 */
|
|
88
33
|
effect?: string;
|
|
89
|
-
/**
|
|
90
|
-
* `effect` 这根轴**是谁说的**(`declared` 定义自报 / `caller` 调用方声明 / `synthetic` 引擎合成 /
|
|
91
|
-
* `default` 谁都没说,落默认);**开集读**。见下面 {@link ToolRosterEntryView.contentOriginProvenance}
|
|
92
|
-
* 的头注 —— 三个出身键同生同灭。
|
|
93
|
-
*/
|
|
94
34
|
effectProvenance?: string;
|
|
95
35
|
egress?: boolean;
|
|
96
|
-
/** `egress` 这根轴的出身(`declared` / `caller` / `default`);**开集读**,读法同上。 */
|
|
97
36
|
egressProvenance?: string;
|
|
98
|
-
/** `never` / `maybe` / `always`;开集读。 */
|
|
99
37
|
irreversibility?: string;
|
|
100
38
|
contentOrigin?: string;
|
|
101
|
-
/**
|
|
102
|
-
* `contentOrigin` 这根轴的出身(`declared` 定义自报 / `server` mcp·a2a 行由服务端定 /
|
|
103
|
-
* `exempted` 在受信工具豁免名单里 / `default` 谁都没说);**开集读**(L-290,0.68.1)。
|
|
104
|
-
*
|
|
105
|
-
* 🔴 **为什么要有这一位**:轴的**值**说的是「这只工具的产出算不算外来内容」,而一个
|
|
106
|
-
* `contentOrigin: "local"` 到底是**工具自己声明**的、还是**因为它在豁免名单里**才这样 ——
|
|
107
|
-
* 在信任面上是两件事。诊断行(壳 `/doctor` 的「Tools (engine leg)」)读的正是后者。
|
|
108
|
-
* 🔴 **族扫(同形存量清剿)**:server `src/trace/project.ts` 的 `tools` 段是**整只判形 + 逐字
|
|
109
|
-
* 透传**,而本读器是**逐键挑** —— 挑漏的键在包边界上等于不存在。三根轴各有一个出身键,漏的形
|
|
110
|
-
* 一模一样,所以三个一起挑,不是只补被点名的那一个;核过之后 core `ToolRosterEntry` 的**每一个**
|
|
111
|
-
* 成员在 `scripts/run-tool-roster-projection-test.mjs` G 段都有一行处置(挑 / 不挑 + 理由),
|
|
112
|
-
* 上游再加成员当天红。
|
|
113
|
-
* ⚠️ 出身键是**诊断面**,刻意**不进** {@link ToolShim}(那是渲染面:人话名 / 卡型 / 三根轴的
|
|
114
|
-
* **值**)—— 端渲一只工具时要的是「它是什么」,不是「这句话是谁说的」。
|
|
115
|
-
*/
|
|
116
39
|
contentOriginProvenance?: string;
|
|
117
40
|
family?: string;
|
|
118
41
|
pathTarget?: ToolRosterPathTargetView;
|
|
@@ -122,36 +45,14 @@ export interface ToolRosterEntryView {
|
|
|
122
45
|
params?: readonly string[];
|
|
123
46
|
};
|
|
124
47
|
}
|
|
125
|
-
/** 一条腿的整只名册。 */
|
|
126
48
|
export interface ToolRosterView {
|
|
127
49
|
schemaVersion: number;
|
|
128
|
-
/** 引擎自报的行数;本读器已核过它等于 `entries.length`(对不上 => 整只判没)。 */
|
|
129
50
|
count: number;
|
|
130
|
-
/** 整只名册的指纹,**恰 16 位小写 hex**;任一轴/面/契约/别名变化都会移动它。重同步的锚。 */
|
|
131
51
|
digest: string;
|
|
132
|
-
/** **声明序 = 模型看到的 `tools[]` 序**(不排序、不去重、不重排)。 */
|
|
133
52
|
entries: readonly ToolRosterEntryView[];
|
|
134
53
|
}
|
|
135
|
-
/**
|
|
136
|
-
* `wiring_manifest` 的 `tools` 段 → 名册视图;整段缺席 / 任一行读不出 / `count` 对不上 =>
|
|
137
|
-
* `undefined`,绝不抛出。
|
|
138
|
-
*
|
|
139
|
-
* ⚠️ **空名册是正面事实**(这条腿一只工具都没挂),照读成 0 行 —— 与 `wiring_manifest.mcp[]` 的
|
|
140
|
-
* 空数组同一条已定谳的纪律,把它折成缺席等于把引擎明说的一句话读成「不知道」。
|
|
141
|
-
* ⚠️ 只在 **effective 半场**(live 帧)才有;诊断端点返回的 `static` 半场恒无 —— 那里的缺席是
|
|
142
|
-
* 结构性的,不是「这台引擎太老」。
|
|
143
|
-
*/
|
|
144
54
|
export declare function projectToolRoster(manifest: unknown): ToolRosterView | undefined;
|
|
145
|
-
/** 名册里的工具名,**按声明序**(= 模型看到的 `tools[]` 序)。 */
|
|
146
55
|
export declare function toolRosterNames(roster: ToolRosterView | undefined): readonly string[];
|
|
147
|
-
/**
|
|
148
|
-
* 端渲一只工具时要用的那张**面**(`liveInitToolFace.ts` 三张估计词表的继任形)。
|
|
149
|
-
*
|
|
150
|
-
* 🔴 **面只从名册的行取,绝不从工具名猜**:一个叫 `Bash` 的行不一定是 shell 家族(caller 挂的
|
|
151
|
-
* 同名工具、mcp 命名空间下的同名工具都可能),而「按名字猜出来的面」正是三张估计词表的病根。
|
|
152
|
-
* 🔴 **缺席就是缺席**:轴(`egress` / `irreversibility` / `effect`)读不出时留空,**绝不**填
|
|
153
|
-
* `false` / `'never'` —— 那会把「不知道」渲成「安全」,是这条面上最贵的一种谎。
|
|
154
|
-
*/
|
|
155
56
|
export interface ToolShim {
|
|
156
57
|
name: string;
|
|
157
58
|
source: string;
|
|
@@ -163,73 +64,32 @@ export interface ToolShim {
|
|
|
163
64
|
effect?: string;
|
|
164
65
|
egress?: boolean;
|
|
165
66
|
irreversibility?: string;
|
|
166
|
-
/** 输入里哪个键是路径(端渲写卡/围栏提示要用)。 */
|
|
167
67
|
pathTargetParam?: string;
|
|
168
|
-
/** mcp / a2a / external 行的声明名。 */
|
|
169
68
|
peer?: string;
|
|
170
|
-
/** 身份两只 id:**同名不同身的两行按它们去重,不按 `name`**。 */
|
|
171
69
|
cardId?: string;
|
|
172
70
|
capabilityId?: string;
|
|
173
71
|
}
|
|
174
|
-
/** 名册的一行 → 端用的面。行不成形(身份两键读不出)=> `undefined`,绝不抛出。 */
|
|
175
72
|
export declare function toolShimFromRoster(entry: unknown): ToolShim | undefined;
|
|
176
|
-
/** 一次 `tool_roster_delta` 应用之后的状态。 */
|
|
177
73
|
export interface ToolRosterDeltaApplication {
|
|
178
|
-
/** 应用后消费端该持有的名册。帧判不出形 => 原样是入参那一份(什么都没发生)。 */
|
|
179
74
|
roster: ToolRosterView | undefined;
|
|
180
|
-
/** 这一帧被采纳了吗(帧判不出形 => `false`)。 */
|
|
181
75
|
applied: boolean;
|
|
182
|
-
/**
|
|
183
|
-
* `fromDigest` 与手上那份对不上(或手上压根没有名册)。
|
|
184
|
-
* 🔴 **这不是拒绝** —— 名册照换,只有 {@link summary} 变得不可用。消费端据此记一次偏斜。
|
|
185
|
-
*/
|
|
186
76
|
skew: boolean;
|
|
187
|
-
/**
|
|
188
|
-
* 三张**互不相交**的名单。`skew` 为真、或这一段自己形坏时**缺席** —— 交一份对不上的名单比
|
|
189
|
-
* 不交更坏(位置永远从名册来,从来不从 summary 来)。
|
|
190
|
-
* ⚠️ 三张全空是**正面事实**(一次字节相同的 re-mint 也会发帧),不是「读不出」。
|
|
191
|
-
*/
|
|
192
77
|
summary?: ToolRosterDeltaSummary;
|
|
193
78
|
}
|
|
194
|
-
/**
|
|
195
|
-
* 一次名册变更的**名字摘要**:三张**互不相交**的名单。
|
|
196
|
-
* ⚠️ 位置永远从名册来,从来不从这里来 —— 这三张名单只回答「变了哪些名字」。
|
|
197
|
-
* ⚠️ 三张全空是**正面事实**(一次字节相同的 re-mint 也会发帧),不是「读不出」。
|
|
198
|
-
*/
|
|
199
79
|
export interface ToolRosterDeltaSummary {
|
|
200
80
|
added: readonly string[];
|
|
201
81
|
removed: readonly string[];
|
|
202
82
|
changed: readonly string[];
|
|
203
83
|
}
|
|
204
|
-
/**
|
|
205
|
-
* `tool_roster_delta` → 新的持有状态。**纯函数**(不改入参)。
|
|
206
|
-
*
|
|
207
|
-
* 🔴 `fromDigest` 对不上**不是拒绝**(契约里唯一的硬话):携带的整只名册无论如何都是新状态,
|
|
208
|
-
* 只有 `summary` 变得不可用。拒绝换会让消费端永远抱着一份过期名册 —— 比一次 skew 坏得多。
|
|
209
|
-
* 🔴 手上**没有**名册(首帧就是 delta)同样算 `skew`:没有可比的 digest 就是比不出来,而
|
|
210
|
-
* 「比不出来」不许被读成「对上了」。
|
|
211
|
-
* 🔴 帧本身判不出形 => **什么都没发生**:原样交回入参那一份(不清空 —— 清空会把一次读不懂的帧
|
|
212
|
-
* 变成一次「所有工具都没挂」)。
|
|
213
|
-
*/
|
|
214
|
-
/** CC-08(0.71.0):一帧 `tool_roster_delta` 的**视图**(不应用、不比对 digest —— 那是持名册的宿主的事)。 */
|
|
215
84
|
export interface ToolRosterDeltaView {
|
|
216
|
-
/** 这一帧假定消费端手上那份名册的 digest。对不上 = 记 skew 后整只替换,不是拒绝。 */
|
|
217
85
|
fromDigest: string;
|
|
218
|
-
/** 变更**之后**的整只名册(位置信息一律从它读)。 */
|
|
219
86
|
roster: ToolRosterView;
|
|
220
|
-
/** 三个两两不相交的名字列表;读不出(半张名单)⇒ 整键缺席,名册照交。 */
|
|
221
87
|
summary?: ToolRosterSummaryView;
|
|
222
88
|
}
|
|
223
|
-
/** CC-08(0.71.0):`tool_roster_delta.summary` —— 三个两两不相交的名字列表(`changed` 里那个名字的新行在 `roster` 里)。 */
|
|
224
89
|
export interface ToolRosterSummaryView {
|
|
225
90
|
added: readonly string[];
|
|
226
91
|
removed: readonly string[];
|
|
227
92
|
changed: readonly string[];
|
|
228
93
|
}
|
|
229
|
-
/**
|
|
230
|
-
* CC-08(0.71.0):`tool_roster_delta.delta` → 视图;`fromDigest` 非空串 ∧ `roster` 读得出才成形,否则 `undefined`
|
|
231
|
-
* (server 判不出 core 的形就整帧不发,所以本层读不出 = 坏帧,由投影口报 malformed)。
|
|
232
|
-
* 宿主拿它喂 {@link applyToolRosterDelta}(那只吃 raw,这里给的是已窄读的同形;两只读法同源 `readRoster`)。
|
|
233
|
-
*/
|
|
234
94
|
export declare function projectToolRosterDelta(delta: unknown): ToolRosterDeltaView | undefined;
|
|
235
95
|
export declare function applyToolRosterDelta(held: ToolRosterView | undefined, delta: unknown): ToolRosterDeltaApplication;
|
package/dist/toolRoster.js
CHANGED
|
@@ -1,48 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/toolRoster.ts — 一条腿的**工具名册**(`wiring_manifest.tools: ToolRoster`)窄读器 +
|
|
3
|
-
* `tool_roster_delta` 应用(0.63.0;L-161;engine >=7.66.0 有臂 / >=7.9.0 真推 /
|
|
4
|
-
* sdk 8.6.0 型面 + 8.7.0 `pathTarget` 三键)。
|
|
5
|
-
*
|
|
6
|
-
* -- 名册回答的是三端一直在猜的那一问 --------------------------------------------------------
|
|
7
|
-
* 「这条腿到底挂了哪些工具、每一只是什么面」此前只能猜:`liveInitToolFace.ts` 那三张词表
|
|
8
|
-
* (`ENGINE_HANDS_BAND` / `ENGINE_SCENARIO_EXTRAS_DEFAULT` / `ENGINE_RUNNER_FACE`)是 2026-07-16
|
|
9
|
-
* 一次 tap 实测的**估计值**,按 pin 的引擎版本定稿;外接别的引擎、别的场景、别的 env 门就会偏。
|
|
10
|
-
* 名册是**引擎自己说的**:每只工具的身份(契约 id / 形状指纹 / 能力 id)、轴(effect / egress /
|
|
11
|
-
* irreversibility)、面(family / pathTarget / renderHints)。
|
|
12
|
-
* 🔴 **名册在场用名册,缺席才回落三表**。本批**不删**那三张表(名册只在 effective 半场、且只有
|
|
13
|
-
* >=7.9.0 的引擎才真推,回落还得留着);`liveInitToolFace.ts` 的头注登记了退役条款:
|
|
14
|
-
* **名册恒在场的版本到货即删表**。
|
|
15
|
-
*
|
|
16
|
-
* -- 🔴 绝不半张名册(照抄上游的纪律)--------------------------------------------------------
|
|
17
|
-
* 引擎的 fail-open 台账逐字写着:载荷过不了 core 自己的判形器 => 那一段缺席 / 那一帧不发,
|
|
18
|
-
* **绝不半张脸上 wire**;并写明反方向更坏 ——「把一份判不了形的名册照发,消费端会把读不出的行
|
|
19
|
-
* 当成**这只工具没挂**」。本窄读器照抄这条:**任一行读不出 => 整只 `undefined`**;`count` 与真实
|
|
20
|
-
* 行数对不上同理(core 在铸点 run-time 断言两者相等)。少几行的名册比没有名册坏。
|
|
21
|
-
* ⚠️ 例外只有**面**:一行的 `pathTarget` / `renderHints` 自己形坏时只丢那一格,行还在 —— 面不是
|
|
22
|
-
* 身份,丢一张面不等于「这只工具没挂」。
|
|
23
|
-
*
|
|
24
|
-
* -- 🔴 `fromDigest` 对不上**不是拒绝** ------------------------------------------------------
|
|
25
|
-
* 契约里唯一的硬话:`fromDigest` 对不上时,**携带的整只名册无论如何都是新状态**,只有 `summary`
|
|
26
|
-
* 变得不可用(消费端记一次 skew 后按快照重同步)。所以 {@link applyToolRosterDelta} 在 skew 时
|
|
27
|
-
* **照换名册、只丢 summary**。拒绝换会让消费端永远抱着一份过期名册 —— 那比一次 skew 坏得多,
|
|
28
|
-
* 而且它把「位置从名册来、永远不从 summary 来」这条契约反过来用了。
|
|
29
|
-
*
|
|
30
|
-
* -- 开集读 -----------------------------------------------------------------------------------
|
|
31
|
-
* `source`(七词)/ `effect` / `family` / `access` / 三个 `*Provenance` 等词表的属主都是引擎,一律
|
|
32
|
-
* **原样透传**,不窄读成枚举 —— 那会在引擎加词当天把一份真名册判没。
|
|
33
|
-
*
|
|
34
|
-
* -- 🔴 逐键窄读器 vs 上游的逐字透传(L-290 的病形,0.68.1)-----------------------------------
|
|
35
|
-
* server(`src/trace/project.ts` 的 `tools` 段)对名册的姿势是**整只判形 + 逐字透传**,理由逐字:
|
|
36
|
-
* 成员表由 core 以 typebox schema 单点持有,手抄一张挑键表 = 立刻多一份会漂的镜像。本读器**确实**
|
|
37
|
-
* 是那份镜像(本包要给三端一个窄化过的视图,不能把 30 余键的开集原样甩出去)—— 所以镜像必须有账:
|
|
38
|
-
* `scripts/run-tool-roster-projection-test.mjs` **G 段**拿**实装 core 的 schema 成员表**与本读器
|
|
39
|
-
* 真挑出来的键集逐键对账,core 的每一个成员要么被挑、要么在账上写明「为什么不挑」;上游加一个
|
|
40
|
-
* 成员而账上没有 ⇒ 当天红。没有这本账,「挑漏一个键 = 那个键在包边界上不存在」就会一直无声发生。
|
|
41
|
-
*/
|
|
42
1
|
const str = (v) => typeof v === 'string' && v.length > 0 ? v : undefined;
|
|
43
2
|
const strArr = (v) => Array.isArray(v) ? v.filter((x) => typeof x === 'string') : undefined;
|
|
44
3
|
const obj = (v) => typeof v === 'object' && v !== null && !Array.isArray(v) ? v : undefined;
|
|
45
|
-
/** 指纹判据:**恰** 16 位小写 hex(引擎铸的就是这个形;放宽会让一个坏锚看起来能用)。 */
|
|
46
4
|
const DIGEST_RE = /^[0-9a-f]{16}$/;
|
|
47
5
|
function readPathTarget(raw) {
|
|
48
6
|
const o = obj(raw);
|
|
@@ -50,7 +8,6 @@ function readPathTarget(raw) {
|
|
|
50
8
|
return undefined;
|
|
51
9
|
const param = str(o.param);
|
|
52
10
|
const access = str(o.access);
|
|
53
|
-
// 两必填键读不出 => 这张面不成形。**只丢面,不丢行**(面不是身份)。
|
|
54
11
|
if (param === undefined || access === undefined)
|
|
55
12
|
return undefined;
|
|
56
13
|
const aliases = strArr(o.aliases);
|
|
@@ -73,7 +30,6 @@ function readEntry(raw) {
|
|
|
73
30
|
return undefined;
|
|
74
31
|
const name = str(o.name);
|
|
75
32
|
const source = str(o.source);
|
|
76
|
-
// 身份两键读不出 => 这一行不成形 => 由调用方把**整只名册**判没(见模块顶注)。
|
|
77
33
|
if (name === undefined || source === undefined)
|
|
78
34
|
return undefined;
|
|
79
35
|
const originRaw = obj(o.origin);
|
|
@@ -99,7 +55,6 @@ function readEntry(raw) {
|
|
|
99
55
|
...(str(o.cardId) !== undefined ? { cardId: str(o.cardId) } : {}),
|
|
100
56
|
...(str(o.capabilityId) !== undefined ? { capabilityId: str(o.capabilityId) } : {}),
|
|
101
57
|
...(str(o.effect) !== undefined ? { effect: str(o.effect) } : {}),
|
|
102
|
-
// L-290 族扫:三根轴各自的**出身**键(开集读,`str()` 同律;坏形只丢这一格,行还在 —— 出身不是身份)。
|
|
103
58
|
...(str(o.effectProvenance) !== undefined ? { effectProvenance: str(o.effectProvenance) } : {}),
|
|
104
59
|
...(typeof o.egress === 'boolean' ? { egress: o.egress } : {}),
|
|
105
60
|
...(str(o.egressProvenance) !== undefined ? { egressProvenance: str(o.egressProvenance) } : {}),
|
|
@@ -133,7 +88,6 @@ function readEntry(raw) {
|
|
|
133
88
|
: {}),
|
|
134
89
|
};
|
|
135
90
|
}
|
|
136
|
-
/** 一只**已经剥出来**的名册体(不带 `tools` 包层)→ 视图;坏形 => `undefined`。 */
|
|
137
91
|
function readRoster(raw) {
|
|
138
92
|
const o = obj(raw);
|
|
139
93
|
if (o === undefined)
|
|
@@ -145,13 +99,11 @@ function readRoster(raw) {
|
|
|
145
99
|
return undefined;
|
|
146
100
|
if (typeof o.count !== 'number' || !Number.isInteger(o.count) || o.count < 0)
|
|
147
101
|
return undefined;
|
|
148
|
-
// 🔴 count 是引擎在铸点 run-time 断言过的量;对不上 => 这份载荷在路上被改过或被半截序列化。
|
|
149
102
|
if (o.count !== o.entries.length)
|
|
150
103
|
return undefined;
|
|
151
104
|
const entries = [];
|
|
152
105
|
for (const raw2 of o.entries) {
|
|
153
106
|
const e = readEntry(raw2);
|
|
154
|
-
// 🔴 绝不半张名册:一行读不出 => 整只判没(见模块顶注)。
|
|
155
107
|
if (e === undefined)
|
|
156
108
|
return undefined;
|
|
157
109
|
entries.push(e);
|
|
@@ -159,15 +111,6 @@ function readRoster(raw) {
|
|
|
159
111
|
const schemaVersion = typeof o.schemaVersion === 'number' && Number.isFinite(o.schemaVersion) ? o.schemaVersion : 1;
|
|
160
112
|
return { schemaVersion, count: o.count, digest, entries };
|
|
161
113
|
}
|
|
162
|
-
/**
|
|
163
|
-
* `wiring_manifest` 的 `tools` 段 → 名册视图;整段缺席 / 任一行读不出 / `count` 对不上 =>
|
|
164
|
-
* `undefined`,绝不抛出。
|
|
165
|
-
*
|
|
166
|
-
* ⚠️ **空名册是正面事实**(这条腿一只工具都没挂),照读成 0 行 —— 与 `wiring_manifest.mcp[]` 的
|
|
167
|
-
* 空数组同一条已定谳的纪律,把它折成缺席等于把引擎明说的一句话读成「不知道」。
|
|
168
|
-
* ⚠️ 只在 **effective 半场**(live 帧)才有;诊断端点返回的 `static` 半场恒无 —— 那里的缺席是
|
|
169
|
-
* 结构性的,不是「这台引擎太老」。
|
|
170
|
-
*/
|
|
171
114
|
export function projectToolRoster(manifest) {
|
|
172
115
|
const o = obj(manifest);
|
|
173
116
|
if (o === undefined)
|
|
@@ -176,11 +119,9 @@ export function projectToolRoster(manifest) {
|
|
|
176
119
|
return undefined;
|
|
177
120
|
return readRoster(o.tools);
|
|
178
121
|
}
|
|
179
|
-
/** 名册里的工具名,**按声明序**(= 模型看到的 `tools[]` 序)。 */
|
|
180
122
|
export function toolRosterNames(roster) {
|
|
181
123
|
return roster?.entries.map((e) => e.name) ?? [];
|
|
182
124
|
}
|
|
183
|
-
/** 名册的一行 → 端用的面。行不成形(身份两键读不出)=> `undefined`,绝不抛出。 */
|
|
184
125
|
export function toolShimFromRoster(entry) {
|
|
185
126
|
const e = readEntry(entry);
|
|
186
127
|
if (e === undefined)
|
|
@@ -211,23 +152,16 @@ function readSummary(raw) {
|
|
|
211
152
|
const changed = strArr(o.changed);
|
|
212
153
|
if (added === undefined || removed === undefined || changed === undefined)
|
|
213
154
|
return undefined;
|
|
214
|
-
// 数组里混进非串时 `strArr` 会静默滤掉 —— 那等于交一份少了名字的名单,与「绝不半张」同罪。
|
|
215
155
|
if (!Array.isArray(o.added) || added.length !== o.added.length ||
|
|
216
156
|
!Array.isArray(o.removed) || removed.length !== o.removed.length ||
|
|
217
157
|
!Array.isArray(o.changed) || changed.length !== o.changed.length) {
|
|
218
158
|
return undefined;
|
|
219
159
|
}
|
|
220
|
-
// 契约:三张名单**互不相交**。交了集就是坏 summary。
|
|
221
160
|
const all = [...added, ...removed, ...changed];
|
|
222
161
|
if (new Set(all).size !== all.length)
|
|
223
162
|
return undefined;
|
|
224
163
|
return { added, removed, changed };
|
|
225
164
|
}
|
|
226
|
-
/**
|
|
227
|
-
* CC-08(0.71.0):`tool_roster_delta.delta` → 视图;`fromDigest` 非空串 ∧ `roster` 读得出才成形,否则 `undefined`
|
|
228
|
-
* (server 判不出 core 的形就整帧不发,所以本层读不出 = 坏帧,由投影口报 malformed)。
|
|
229
|
-
* 宿主拿它喂 {@link applyToolRosterDelta}(那只吃 raw,这里给的是已窄读的同形;两只读法同源 `readRoster`)。
|
|
230
|
-
*/
|
|
231
165
|
export function projectToolRosterDelta(delta) {
|
|
232
166
|
const d = obj(delta);
|
|
233
167
|
if (d === undefined)
|
package/dist/typePins.d.ts
CHANGED
|
@@ -1,51 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/typePins.ts — shared type-only "bidirectional exhaustiveness pin" primitive
|
|
3
|
-
* (REF-CC-145 / REF-CC-dup-12, P3 wave1 卡C-argv, 2026-08-01).
|
|
4
|
-
*
|
|
5
|
-
* 🔴 [2006] B-CC-2(2026-07-29):a `readonly X[]` annotation only proves "every element is a
|
|
6
|
-
* legal X" — it never proves the reverse ("every X has an element"). Add an eighth arm to a
|
|
7
|
-
* literal union and forget to add it to the matching const tuple and the compiler stays silent;
|
|
8
|
-
* the new arm is then silently dropped by whatever `Set`/`switch` consumes the tuple at runtime.
|
|
9
|
-
* `Covers<A, B>` is the door's single mint point: `Exclude<A, B> extends never` collapses to
|
|
10
|
-
* `never` exactly when "every member of A is also in B"; pinning it to `true` turns a violation
|
|
11
|
-
* into a compile-time red. Callers crib a pair per axis: `[Covers<A, B>, Covers<B, A>]`.
|
|
12
|
-
*
|
|
13
|
-
* type-only export: zero runtime cost, zero transitive dependency (the portability door's
|
|
14
|
-
* value-level closure scan strips type-only edges before walking the graph — see
|
|
15
|
-
* run-client-core-portability-test.mjs 头注 "①源码级传递闭包…剥 type-only").
|
|
16
|
-
*/
|
|
17
1
|
export type Covers<A, B> = Exclude<A, B> extends never ? true : never;
|
|
18
|
-
/**
|
|
19
|
-
* 🔴 `AllReadonly<T>`(0.48.0,对抗复审 [medium] 采纳后铸的第二把钉)—— 「T 的**每一个**顶层
|
|
20
|
-
* 属性都是 `readonly`」的编译期判据。`true` = 全只读;`false` = 至少有一个可写位。
|
|
21
|
-
*
|
|
22
|
-
* 为什么需要它:把一个自铸形换成上游形的**别名**时,成员名与成员类型都能逐个对上,唯独
|
|
23
|
-
* **修饰符**会静默丢失 —— 而 `readonly` 是已发布的类型契约的一部分。本批实翻:0.47.0 的
|
|
24
|
-
* `GateCurrentPending` 三位全 `readonly`(那三位是 D-1 坐标,契约是**逐字回显、绝不本地重算**),
|
|
25
|
-
* 换成上游 `ApprovalStaleCurrentPending` 的别名之后三位都变成可写 —— 名字、字段、行为门全绿,
|
|
26
|
-
* 只有消费方手上的契约悄悄弱了一档。这类退化**没有任何行为门看得见**(它不改变任何运行期字节),
|
|
27
|
-
* 只有编译期判据抓得住。
|
|
28
|
-
*
|
|
29
|
-
* 实现锚 = TS 的「同一性」惯用法:两个泛型函数签名只有在类型**完全相同**(含修饰符)时才互相
|
|
30
|
-
* 赋值兼容,所以某个位与「剥掉它 readonly 的同一个位」相等 ⇔ 那个位本来就没有 readonly。
|
|
31
|
-
*
|
|
32
|
-
* 🔴 **逐位判,不是整形判**(本批自查命中,首版就是错的):整形写法
|
|
33
|
-
* `IdenticalTo<T, {-readonly [K in keyof T]: T[K]}, false, true>` 只要**有一位**是 readonly 就答
|
|
34
|
-
* `true` —— 它其实是 `SomeReadonly`,名字比它做的事强一档。实测反证:
|
|
35
|
-
* `{readonly a: string; b: number}`(一半只读)在整形写法下答 `true`,于是「三位里有两位被改成可写」
|
|
36
|
-
* 这类**部分退化**能整个溜过去。⇒ 改成把每一位单独拎出来判,全体无可写位才 `true`。
|
|
37
|
-
* (`[X] extends [never]` 的方括号是必须的:裸 `X extends never` 在 X 是联合时会分配,空联合恒真。)
|
|
38
|
-
*
|
|
39
|
-
* 🔴 **守到哪、没守到哪(明写,免得下一棒over-trust 这把钉)**:本判据是**浅层**的 —— 它只判 T 的
|
|
40
|
-
* **顶层**属性(可选位也进得来,`-?` 管这一格)。嵌套对象**内部**的成员是否 readonly、数组元素是否
|
|
41
|
-
* `readonly T[]`,它一概不看,`Readonly<T>` 本身也只做一层。所以它能抓的是「整形/部分位的顶层
|
|
42
|
-
* readonly 退化」,抓不到「某个嵌套成员从 readonly 变可写」。
|
|
43
|
-
* 今天的唯一消费者 `GateCurrentPending` 三位全是**扁平标量**(两 `string` + 一可选 `string`),
|
|
44
|
-
* 浅层判据对它是**完备**的;哪天有人拿它去钉一个带嵌套对象的形,先回来读这一段
|
|
45
|
-
* ——「一道只守住一半却被当成守住全部的门」比没有门更坏([surfacing-is-not-gating] 同族)。
|
|
46
|
-
*/
|
|
47
2
|
type IdenticalTo<X, Y, Yes, No> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? Yes : No;
|
|
48
|
-
/** T 里**可写**位的名字联合(全只读 ⇒ `never`)。`-?` 让可选位也进得来。 */
|
|
49
3
|
type WritableKeys<T> = {
|
|
50
4
|
[P in keyof T]-?: IdenticalTo<{
|
|
51
5
|
[Q in P]: T[P];
|
|
@@ -1,116 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B1 批搬迁(2026-07-27,多端改造设计稿 §2.4.1-B):cli src/sema/types/engineState.ts 逐字搬入(纯类型,零运行时;壳侧改 re-export)。
|
|
3
|
-
* ⚠️ 归属注记:`EngineInstance`/`TOCConfig` 描述的是**宿主**职责(spawn/端口/日志路径),逻辑本体
|
|
4
|
-
* (engineLifecycleManager)按设计稿 §2.4.2-A 留 TUI;搬进本包的只是**形状**,让 desktop 宿主与
|
|
5
|
-
* TUI 宿主共用同一套 /health 与 engine.port 契约类型,不代表生命周期逻辑下沉。
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* TOC 一体化 (TP-A-P0-IMPL Step 5) — Engine Lifecycle 状态类型。
|
|
9
|
-
*
|
|
10
|
-
* 壳一体化起本地引擎(ai-agent-service file 模式),对用户透明,体验等同 CC 单进程。
|
|
11
|
-
* 本文件只定义跨 lifecycle 流转的纯数据形状,不含逻辑(逻辑在 engineLifecycleManager.ts)。
|
|
12
|
-
*
|
|
13
|
-
* 真相源契约:engine.port 文件是壳↔引擎的「当前活引擎」单一发现锚点(flock 串行化写,
|
|
14
|
-
* write-temp+fsync+mv 原子落盘)。HealthResponse 字段与引擎 server.ts:645-660 /health 逐字对齐
|
|
15
|
-
* (W2 同约定实现):instanceId/dataRoot/configHash/pid —— 壳据此判断「连对引擎」防陈旧 port 连错。
|
|
16
|
-
*/
|
|
17
|
-
/** 引擎 GET /health 返回体(与 ai-agent-service server.ts:645-660 对齐;字段大多 additive 可缺)。 */
|
|
18
1
|
export interface HealthResponse {
|
|
19
|
-
/** 恒为 'ok';非 200 / 非此值 = 不健康。 */
|
|
20
2
|
status: string;
|
|
21
|
-
/** 当前模型 id(configHash 的一部分,信息性)。 */
|
|
22
3
|
model?: string;
|
|
23
|
-
/** 会话存储后端('file' for TOC local)。 */
|
|
24
4
|
sessionBackend?: string;
|
|
25
|
-
/** 活跃 session 数(信息性)。 */
|
|
26
5
|
sessions?: number;
|
|
27
|
-
/** 引擎实例身份(uuidv7,每次 boot 唯一)。陈旧 port 连错引擎时此值会变 → 拒连。 */
|
|
28
6
|
instanceId?: string;
|
|
29
|
-
/** 引擎 localDataRoot 解析结果。壳校验 === assembleChildEnv 注入的 LOCAL_DATA_ROOT。 */
|
|
30
7
|
dataRoot?: string;
|
|
31
|
-
/** restart-relevant config 的稳定指纹(无 secret)。drift 检测:configHash 变 → 拒连旧引擎。 */
|
|
32
8
|
configHash?: string;
|
|
33
|
-
/** 引擎进程 pid。orphan reap 的 kill-0 目标 + heartbeat 死活判定。 */
|
|
34
9
|
pid?: number;
|
|
35
|
-
/** 引擎监听端口。 */
|
|
36
10
|
port?: number;
|
|
37
|
-
/** 引擎请求重启(center restart 信号);壳侧信息性。 */
|
|
38
11
|
restartRequired?: boolean;
|
|
39
|
-
/** 引擎 build 版本自述(service 1.96+,[392]ask②)。复用时与本地 dist 版本比对,不一致=陈旧代码拒复用。 */
|
|
40
12
|
version?: string;
|
|
41
13
|
}
|
|
42
|
-
/**
|
|
43
|
-
* engine.port 文件落盘的 JSON 形状(write-temp+fsync+mv 原子写)。
|
|
44
|
-
* 壳启动时读此文件做引擎发现:存在且 kill-0 活 + /health 身份匹配 → 复用;否则 reap + spawn。
|
|
45
|
-
* 🔴 secrets 边界:绝不写入任何明文 token/secret(只透传到 child env)。grep engine.port 不得见 secret。
|
|
46
|
-
*/
|
|
47
14
|
export interface EnginePortFile {
|
|
48
|
-
/** 引擎监听端口。 */
|
|
49
15
|
port: number;
|
|
50
|
-
/** spawn 出的引擎子进程 pid(kill-0 存活检测 / orphan reap 目标)。 */
|
|
51
16
|
pid: number;
|
|
52
|
-
/** 引擎实例身份(uuidv7);连接前用 /health 复验,不匹配 = 陈旧 port。 */
|
|
53
17
|
instanceId?: string;
|
|
54
|
-
/** 引擎 localDataRoot;身份校验用。 */
|
|
55
18
|
dataRoot?: string;
|
|
56
|
-
/** boot 时记录的 configHash;drift 检测基线。 */
|
|
57
19
|
configHash?: string;
|
|
58
|
-
/** 引擎日志文件路径(<configHome>/engine-<pid>.log),壳可 tail 诊断。 */
|
|
59
20
|
logPath: string;
|
|
60
|
-
/** 落盘时间戳(epoch ms);信息性 / 调试用。 */
|
|
61
21
|
startedAt: number;
|
|
62
|
-
/** 写文件的格式版本(向后兼容);当前 1。 */
|
|
63
22
|
version: number;
|
|
64
|
-
/**
|
|
65
|
-
* P2 云配置整体开关:spawn 该引擎时生效的配置源标签('local' | 'cloud:<profile>')。
|
|
66
|
-
* ADDITIVE 可缺(老文件缺 = 'local')。boot 复用检查:与当前 desiredEngineConfigSource() 不一致
|
|
67
|
-
* → 视同配置漂移 reap+respawn(models 域走 CONFIG_LOCAL_DIR shadow,restart-to-apply)。
|
|
68
|
-
*/
|
|
69
23
|
configSource?: string;
|
|
70
24
|
}
|
|
71
|
-
/**
|
|
72
|
-
* 内存中持有的「已托管引擎实例」句柄。lifecycle 全程持有,shutdown 时据此 SIGTERM/SIGKILL。
|
|
73
|
-
*/
|
|
74
25
|
export interface EngineInstance {
|
|
75
|
-
/** 监听端口。 */
|
|
76
26
|
port: number;
|
|
77
|
-
/** 子进程 pid。 */
|
|
78
27
|
pid: number;
|
|
79
|
-
/** baseUrl = http://127.0.0.1:<port>,壳设到 SEMA_LIVE_BASEURL。 */
|
|
80
28
|
baseUrl: string;
|
|
81
|
-
/** /health 校验拿到的身份(复用既有引擎时可能来自 probe,而非自己 spawn)。 */
|
|
82
29
|
instanceId?: string;
|
|
83
|
-
/** 引擎 dataRoot。 */
|
|
84
30
|
dataRoot?: string;
|
|
85
|
-
/** boot configHash 基线(heartbeat drift 检测)。 */
|
|
86
31
|
configHash?: string;
|
|
87
|
-
/** 日志文件路径(自己 spawn 的才有;复用既有引擎为 undefined)。 */
|
|
88
32
|
logPath?: string;
|
|
89
|
-
/** true = 本壳 spawn 出来的(shutdown 时负责回收);false = 复用既有引擎(不杀)。 */
|
|
90
33
|
ownedByThisShell: boolean;
|
|
91
|
-
/** node ChildProcess 句柄(仅自己 spawn 时有;复用既有为 undefined)。as unknown 避免类型耦合 child_process。 */
|
|
92
34
|
child?: unknown;
|
|
93
35
|
}
|
|
94
|
-
/**
|
|
95
|
-
* 壳注入给引擎子进程的 TOC env pack(§3.1)。引擎默认偏云(PORT=8090/DB_BACKEND=tidb/
|
|
96
|
-
* CONFIG_PROVIDER=undefined),壳必须显式覆盖为 local 单用户模式,绝不依赖引擎默认。
|
|
97
|
-
* secrets(ANTHROPIC_API_KEY/E2B_API_KEY 等)仅在父 env 存在时透传到 child,不落任何文件。
|
|
98
|
-
*/
|
|
99
36
|
export interface TOCConfig {
|
|
100
|
-
/** 选定端口(显式 pin SEMA_ENGINE_PORT 优先;无 pin 按 config dir 派生 + 空闲探测,P0-2)。 */
|
|
101
37
|
port: number;
|
|
102
|
-
/** 引擎数据根 = <configHome>/engine-data;引擎 LOCAL_DATA_ROOT 优先级链最高项。 */
|
|
103
38
|
localDataRoot: string;
|
|
104
|
-
/** 本地 config.d 目录 = <configHome>/config.d(引擎 CONFIG_LOCAL_DIR)。 */
|
|
105
39
|
configLocalDir: string;
|
|
106
|
-
/** 壳配置主目录(getClaudeConfigHomeDir());也作 SEMA_CONFIG_DIR 注入对齐路径。 */
|
|
107
40
|
configHome: string;
|
|
108
|
-
/** per-spawn 随机服务令牌(uuid),SERVICE_AUTH_TOKENS="<uuid>=system:shell-local";不落 .env。 */
|
|
109
41
|
serviceAuthToken: string;
|
|
110
|
-
/** 引擎入口文件绝对路径(ai-agent-service/dist/main.js,缺则回退 tsx src/main.ts)。 */
|
|
111
42
|
engineEntry: string;
|
|
112
|
-
/** 引擎入口的工作目录(ai-agent-service 根)。 */
|
|
113
43
|
engineCwd: string;
|
|
114
|
-
/** 引擎日志输出文件(<configHome>/engine-<pid>.log;pid spawn 后回填,先用占位)。 */
|
|
115
44
|
logPath: string;
|
|
116
45
|
}
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B1 批搬迁(2026-07-27,多端改造设计稿 §2.4.1-B):cli src/sema/types/engineState.ts 逐字搬入(纯类型,零运行时;壳侧改 re-export)。
|
|
3
|
-
* ⚠️ 归属注记:`EngineInstance`/`TOCConfig` 描述的是**宿主**职责(spawn/端口/日志路径),逻辑本体
|
|
4
|
-
* (engineLifecycleManager)按设计稿 §2.4.2-A 留 TUI;搬进本包的只是**形状**,让 desktop 宿主与
|
|
5
|
-
* TUI 宿主共用同一套 /health 与 engine.port 契约类型,不代表生命周期逻辑下沉。
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* TOC 一体化 (TP-A-P0-IMPL Step 5) — Engine Lifecycle 状态类型。
|
|
9
|
-
*
|
|
10
|
-
* 壳一体化起本地引擎(ai-agent-service file 模式),对用户透明,体验等同 CC 单进程。
|
|
11
|
-
* 本文件只定义跨 lifecycle 流转的纯数据形状,不含逻辑(逻辑在 engineLifecycleManager.ts)。
|
|
12
|
-
*
|
|
13
|
-
* 真相源契约:engine.port 文件是壳↔引擎的「当前活引擎」单一发现锚点(flock 串行化写,
|
|
14
|
-
* write-temp+fsync+mv 原子落盘)。HealthResponse 字段与引擎 server.ts:645-660 /health 逐字对齐
|
|
15
|
-
* (W2 同约定实现):instanceId/dataRoot/configHash/pid —— 壳据此判断「连对引擎」防陈旧 port 连错。
|
|
16
|
-
*/
|
|
17
1
|
export {};
|
|
@@ -1,87 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/ultracodeWireCaps.ts 逐字搬入(零依赖;🔴 模块级 ultracodePreset 是 sticky 单实例态,写口 setUltracodePreset 与读口 ultracodeForWire 必须同实例)。
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* src/sema/ultracodeWireCaps.ts — the shell's TWO opt-in sources for the CC-parity `settings.ultracode` PRESET,
|
|
6
|
-
* projected onto `TaskRequest.settings.ultracode` (a typed boolean the SERVICE — ai-agent-service 1.48.0 — reads
|
|
7
|
-
* and EXPANDS to `thinking:"max"` + `selfOrchestration:true`; both core's existing orthogonal axes, fail-closed
|
|
8
|
-
* gates unchanged). design/111 (core/search AI 2026-06-30): ultracode is a STANDALONE settings boolean folding
|
|
9
|
-
* "max thinking × workflow orchestration", surfaced in sema as the top notch of the `/effort` dial.
|
|
10
|
-
*
|
|
11
|
-
* Two sources, ONE structured-spec output (`settings.ultracode:true` — never prompt text):
|
|
12
|
-
*
|
|
13
|
-
* ① L2 dial preset (STICKY): the `/effort ultracode` pick. The effort dial COERCES the reasoning axis to `xhigh`
|
|
14
|
-
* (overrides/effort.tsx executeEffortSema — "ultracode runs at xhigh effort"), which would LOSE the
|
|
15
|
-
* orchestration axis. So the dial separately latches this module-level preset: ON when `ultracode` is picked,
|
|
16
|
-
* OFF when any OTHER effort level is picked (a sticky session setting, like CC's settings.ultracode boolean).
|
|
17
|
-
*
|
|
18
|
-
* ② L3 keyword (PER-TURN): a client-side scan of the REAL human turn input for the literal word "ultracode".
|
|
19
|
-
* 🔴 RED LINE (design/111 L3, the ONLY injection risk): scan ONLY the human's current-turn submission, BEFORE
|
|
20
|
-
* any untrusted content (tool results / file reads / web / subagent / MCP) is concatenated. NEVER scan the
|
|
21
|
-
* assembled prompt server-side — a malicious file containing "ultracode" would be a privilege-escalation
|
|
22
|
-
* injection. The keyword is a UX convenience switch, NOT a security decision point: privilege STILL passes the
|
|
23
|
-
* service's fail-closed per-principal `allowWorkflows` gate (core deliberately refuses prompt scanning,
|
|
24
|
-
* prepare-task.ts:1612 — that boundary is correct). The output is a STRUCTURED spec (the boolean), never
|
|
25
|
-
* injected prompt text.
|
|
26
|
-
*
|
|
27
|
-
* Both sources are OR'd live-side by `toTaskRequest`; the SAME `SEMA_LIVE_BASEURL` gate the other capability wires
|
|
28
|
-
* use keeps the mock request shape unchanged (the stamp IS the opt-in; absent ⇒ the engine never expands ultracode).
|
|
29
|
-
*
|
|
30
|
-
* The PRESET state is module-level (mirrors seamQuery's seam* injectors): the dial (a React override) latches it,
|
|
31
|
-
* the seam reads it. The KEYWORD scan is a PURE function (caller passes the human input) so it bundles + unit-tests
|
|
32
|
-
* without React/AppState.
|
|
33
|
-
*/
|
|
34
1
|
import { type EnvLike } from './hostEnv.js';
|
|
35
|
-
/** Latch the dial preset. `effort.tsx` calls this whenever an effort level is APPLIED: `true` for the `ultracode`
|
|
36
|
-
* notch, `false` for every other level (so switching the dial OFF ultracode clears the workflow-orchestration axis
|
|
37
|
-
* while the reasoning axis follows the picked level). */
|
|
38
2
|
export declare function setUltracodePreset(on: boolean): void;
|
|
39
|
-
/** Read the sticky dial preset (the L2 source). */
|
|
40
3
|
export declare function getUltracodePreset(): boolean;
|
|
41
|
-
/** Test/boot reset — clears the latched preset (e.g. a fresh session). */
|
|
42
4
|
export declare function _resetUltracodePreset(): void;
|
|
43
|
-
/**
|
|
44
|
-
* L3 keyword source: `true` iff the REAL human turn input contains the "ultracode" keyword, else `undefined`.
|
|
45
|
-
* 🔴 The caller MUST pass ONLY the human's current-turn submission (seamQuery's `objective`, derived from the
|
|
46
|
-
* projectable user message) — NOT any assembled/untrusted content. Returns `true | undefined` (never `false`) to
|
|
47
|
-
* mirror the strict additive-stamp discipline of the other wire caps (a stamped `false` would needlessly change
|
|
48
|
-
* the default request shape).
|
|
49
|
-
*/
|
|
50
5
|
export declare function ultracodeFromInput(humanInput: string | undefined): true | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* Combine the two sources into the structured spec the seam stamps. `true` when EITHER the sticky dial preset is on
|
|
53
|
-
* OR the human's current-turn input contains the keyword; otherwise `undefined` (⇒ no stamp ⇒ default behaviour).
|
|
54
|
-
* Returns `true | undefined` so the seam can spread `...(ultracode ? { ultracode } : {})` without changing the
|
|
55
|
-
* default request shape. The CALLER gates this to LIVE mode (mock parity).
|
|
56
|
-
*/
|
|
57
6
|
export declare function ultracodeForRequest(humanInput: string | undefined): true | undefined;
|
|
58
7
|
export declare function workflowFromInput(humanInput: string | undefined): true | undefined;
|
|
59
|
-
/**
|
|
60
|
-
* [1052]① 收官形(clay 裁 B 的 core deferred 机制件,cli 接线半场):Workflow「全局默认开但不暴露」——
|
|
61
|
-
* 未命中激活源的 TaskRequest 带 `deferTools:["Workflow"]`(core 1.314 对已挂载工具做 design/36 延迟披露:
|
|
62
|
-
* 占位符上 wire、schema 字节撤出缓存前缀、ToolSearch 可激活=中途激活通路);命中任一激活源 ⇒ `undefined`
|
|
63
|
-
* (不 defer=名字+schema 全量上 wire):
|
|
64
|
-
* a) 用户当轮说 "workflow"(workflowFromInput,只扫真人输入);
|
|
65
|
-
* b) "ultracode" 关键词(L3,同一红线);
|
|
66
|
-
* c) `/effort ultracode` sticky dial(L2 preset)。
|
|
67
|
-
* CALLER 前置两门:live 门(mock 形不变)+ selfOrchestration stamp 存在(opt-out 时 Workflow 根本不挂载,
|
|
68
|
-
* defer 无意义)。前缀缓存注记:defer↔不 defer 的翻转只发生在真人激活当轮,与 CC 209 ToolSearch materialize
|
|
69
|
-
* 同一形——非激活轮的前缀指纹稳定([1044]② clay 硬约束 ii 的解)。
|
|
70
|
-
*/
|
|
71
8
|
export declare function workflowDeferForRequest(humanInput: string | undefined, env?: EnvLike): ['Workflow'] | undefined;
|
|
72
|
-
/** [1077]④ 低频工具惰性注入:`SEMA_DEFER_TOOLS=<csv>`(wire 名)追加进 deferTools(core 1.314
|
|
73
|
-
* 延迟披露腿)。**缺省翻转已裁(clay [1212]⑤,2026-07-19)**:九件低频工具缺省 defer——判决数=
|
|
74
|
-
* -2,484 tok/首调用+多轮 gate 零行为退化;defer≠禁用(占位符在,模型 ToolSearch 随取)。
|
|
75
|
-
* 逃生门:`SEMA_DEFER_LOWFREQ=0/false/no/off` 关缺省名单(九件恢复全量上前缀)。 */
|
|
76
9
|
export declare const DEFER_TOOLS_ENV: "SEMA_DEFER_TOOLS";
|
|
77
10
|
export declare const DEFER_LOWFREQ_ENV: "SEMA_DEFER_LOWFREQ";
|
|
78
|
-
/** clay 裁定的缺省惰性名单([1076]④ 评测九件原单,[1090]② 判决数)。 */
|
|
79
11
|
export declare const DEFAULT_LOWFREQ_DEFER: readonly string[];
|
|
80
|
-
/**
|
|
81
|
-
* The FULL deferTools list for a request: the Workflow default-defer lane (activation sources, see
|
|
82
|
-
* {@link workflowDeferForRequest}) + the DEFAULT low-frequency list (clay [1212]⑤, opt-out via
|
|
83
|
-
* SEMA_DEFER_LOWFREQ) + the SEMA_DEFER_TOOLS extra list, deduped. An activation hit removes ONLY
|
|
84
|
-
* Workflow (the user asked for it by name); the other lanes are source-independent. Empty ⇒
|
|
85
|
-
* `undefined` (no stamp, request shape unchanged).
|
|
86
|
-
*/
|
|
87
12
|
export declare function deferToolsForRequest(humanInput: string | undefined, env?: EnvLike): string[] | undefined;
|