@sema-agent/client-core 0.77.1 → 0.77.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/README.md +5 -4
- package/dist/abortableSleep.d.ts +0 -28
- package/dist/abortableSleep.js +0 -28
- package/dist/adapt/arms.d.ts +0 -46
- package/dist/adapt/arms.js +9 -544
- package/dist/adapt/ids.d.ts +0 -58
- package/dist/adapt/ids.js +0 -63
- package/dist/adapt/instanceLedger.d.ts +0 -25
- package/dist/adapt/instanceLedger.js +0 -20
- package/dist/adapt/panelTasks.d.ts +0 -69
- package/dist/adapt/panelTasks.js +0 -95
- package/dist/adapt/textSegmentAuthority.d.ts +1 -137
- package/dist/adapt/textSegmentAuthority.js +0 -54
- package/dist/adapt/textStream.d.ts +0 -252
- package/dist/adapt/textStream.js +2 -281
- package/dist/adapt/toolCards.d.ts +0 -46
- package/dist/adapt/toolCards.js +0 -23
- package/dist/adapt/turnFlags.d.ts +0 -54
- package/dist/adapt/turnFlags.js +1 -17
- package/dist/adapt/wireShapes.d.ts +0 -92
- package/dist/adapt/wireShapes.js +0 -83
- package/dist/adapt.d.ts +0 -55
- package/dist/adapt.js +1 -120
- package/dist/adapter/activeRunSelfHeal.d.ts +22 -515
- package/dist/adapter/activeRunSelfHeal.js +10 -625
- package/dist/adapter/downstream/eventToSdkMessage.d.ts +2 -305
- package/dist/adapter/downstream/eventToSdkMessage.js +2 -867
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +2 -314
- package/dist/adapter/downstream/terminalToSdkResult.js +13 -560
- package/dist/adapter/downstream/turnUsageToModelUsage.d.ts +0 -95
- package/dist/adapter/downstream/turnUsageToModelUsage.js +2 -31
- package/dist/adapter/runStream.d.ts +0 -206
- package/dist/adapter/runStream.js +6 -596
- package/dist/adapter/types.d.ts +0 -111
- package/dist/adapter/types.js +0 -29
- package/dist/agentSession/backgroundView.d.ts +0 -106
- package/dist/agentSession/backgroundView.js +3 -49
- package/dist/agentSession/contract.d.ts +0 -98
- package/dist/agentSession/contract.js +0 -12
- package/dist/agentsWireCaps.d.ts +0 -72
- package/dist/agentsWireCaps.js +4 -72
- package/dist/approvalsStreamLiveCapability.d.ts +0 -25
- package/dist/approvalsStreamLiveCapability.js +0 -31
- package/dist/argvFlagValue.d.ts +0 -33
- package/dist/argvFlagValue.js +3 -35
- package/dist/attachmentsWireCaps.d.ts +0 -127
- package/dist/attachmentsWireCaps.js +0 -144
- package/dist/autoModeUnavailable.d.ts +0 -120
- package/dist/autoModeUnavailable.js +0 -144
- package/dist/classifierStatus.d.ts +0 -72
- package/dist/classifierStatus.js +0 -167
- package/dist/classifierVerdictWire.d.ts +0 -54
- package/dist/classifierVerdictWire.js +0 -133
- package/dist/clientContextWireCaps.d.ts +0 -37
- package/dist/clientContextWireCaps.js +0 -36
- package/dist/clientSlice.d.ts +0 -63
- package/dist/clientSlice.js +0 -45
- package/dist/cloudConfigWireCaps.d.ts +0 -86
- package/dist/cloudConfigWireCaps.js +2 -65
- package/dist/compensations.d.ts +0 -52
- package/dist/compensations.js +2 -63
- package/dist/controlRouter.d.ts +2 -208
- package/dist/controlRouter.js +1 -129
- package/dist/coreValuePorts.d.ts +0 -84
- package/dist/coreValuePorts.js +0 -29
- package/dist/decideReceipt.d.ts +0 -110
- package/dist/decideReceipt.js +0 -84
- package/dist/detachWire.d.ts +0 -130
- package/dist/detachWire.js +1 -130
- package/dist/deviceExecutorManagementCapability.d.ts +2 -35
- package/dist/deviceExecutorManagementCapability.js +1 -37
- package/dist/diagnostics.d.ts +0 -8
- package/dist/diagnostics.js +0 -8
- package/dist/diff/patch.d.ts +0 -17
- package/dist/diff/patch.js +0 -19
- package/dist/effectiveFacts.d.ts +0 -40
- package/dist/effectiveFacts.js +0 -22
- package/dist/effortWire.d.ts +0 -11
- package/dist/effortWire.js +0 -12
- package/dist/engineAgentPanelStore.d.ts +0 -169
- package/dist/engineAgentPanelStore.js +13 -293
- package/dist/engineCapReader.d.ts +0 -62
- package/dist/engineCapReader.js +1 -43
- package/dist/engineCapsCache.d.ts +0 -177
- package/dist/engineCapsCache.js +0 -199
- package/dist/engineCapsGenerationGuard.d.ts +0 -2
- package/dist/engineCapsGenerationGuard.js +0 -11
- package/dist/engineErrorCodes.d.ts +1 -316
- package/dist/engineErrorCodes.js +0 -427
- package/dist/engineHttpTools.d.ts +0 -29
- package/dist/engineHttpTools.js +0 -29
- package/dist/engineIdentity.d.ts +0 -83
- package/dist/engineIdentity.js +0 -88
- package/dist/engineInlineTaskStats.d.ts +0 -57
- package/dist/engineInlineTaskStats.js +1 -42
- package/dist/engineNoticeCodes.d.ts +0 -190
- package/dist/engineNoticeCodes.js +0 -182
- package/dist/engineSessionParam.d.ts +0 -30
- package/dist/engineSessionParam.js +0 -52
- package/dist/engineToolLabelStore.d.ts +0 -29
- package/dist/engineToolLabelStore.js +0 -31
- package/dist/engineWireSdk.d.ts +0 -90
- package/dist/engineWireSdk.js +0 -74
- package/dist/engineWireTarget.d.ts +0 -14
- package/dist/engineWireTarget.js +0 -39
- package/dist/env/localeGeo.d.ts +0 -12
- package/dist/env/localeGeo.js +2 -77
- package/dist/env/localeTag.d.ts +0 -34
- package/dist/env/localeTag.js +0 -32
- package/dist/env/uiLanguage.d.ts +0 -13
- package/dist/env/uiLanguage.js +0 -25
- package/dist/envFlag.d.ts +0 -37
- package/dist/envFlag.js +0 -40
- package/dist/executionLaneCapability.d.ts +0 -48
- package/dist/executionLaneCapability.js +0 -54
- package/dist/finalVerifyWire.d.ts +0 -67
- package/dist/finalVerifyWire.js +3 -43
- package/dist/fleet/fleetLedger.d.ts +0 -308
- package/dist/fleet/fleetLedger.js +10 -429
- package/dist/fleet/fleetProjection.d.ts +0 -240
- package/dist/fleet/fleetProjection.js +0 -189
- package/dist/fleet/fleetRowAgentType.d.ts +0 -6
- package/dist/fleet/fleetRowAgentType.js +1 -32
- package/dist/fleet/workflowSizeWarning.d.ts +0 -47
- package/dist/fleet/workflowSizeWarning.js +1 -46
- package/dist/fleetAgentPanelProjection.d.ts +0 -48
- package/dist/fleetAgentPanelProjection.js +8 -173
- package/dist/fleetTaskDesc.d.ts +0 -39
- package/dist/fleetTaskDesc.js +0 -69
- package/dist/forkWireCaps.d.ts +0 -23
- package/dist/forkWireCaps.js +1 -24
- package/dist/gateOutcome.d.ts +0 -140
- package/dist/gateOutcome.js +0 -85
- package/dist/gateVocabulary.d.ts +0 -114
- package/dist/gateVocabulary.js +1 -161
- package/dist/goalStopHook.d.ts +0 -127
- package/dist/goalStopHook.js +0 -178
- package/dist/headlessPermissionModeWire.d.ts +0 -76
- package/dist/headlessPermissionModeWire.js +1 -155
- package/dist/headlessReconnectWire.d.ts +0 -84
- package/dist/headlessReconnectWire.js +13 -67
- package/dist/hitl/approvalDecisionNoteAudit.d.ts +0 -49
- package/dist/hitl/approvalDecisionNoteAudit.js +0 -56
- package/dist/hitl/approvalOutcomeNote.d.ts +0 -2
- package/dist/hitl/approvalOutcomeNote.js +0 -20
- package/dist/hitl/approvalResolution.d.ts +0 -113
- package/dist/hitl/approvalResolution.js +0 -66
- package/dist/hitl/approvalsFeed.d.ts +0 -183
- package/dist/hitl/approvalsFeed.js +12 -243
- package/dist/hitl/armedGateRegistry.d.ts +0 -55
- package/dist/hitl/armedGateRegistry.js +0 -146
- package/dist/hitl/askGateWire.d.ts +0 -86
- package/dist/hitl/askGateWire.js +1 -95
- package/dist/hitl/askParkRowRouting.d.ts +0 -123
- package/dist/hitl/askParkRowRouting.js +1 -89
- package/dist/hitl/crashConverged.d.ts +0 -148
- package/dist/hitl/crashConverged.js +0 -214
- package/dist/hitl/editedRuleTextPrecheck.d.ts +0 -109
- package/dist/hitl/editedRuleTextPrecheck.js +0 -71
- package/dist/hitl/frameRouter.d.ts +0 -134
- package/dist/hitl/frameRouter.js +6 -378
- package/dist/hitl/gateIdentity.d.ts +0 -39
- package/dist/hitl/gateIdentity.js +0 -41
- package/dist/hitl/gateLedger.d.ts +0 -267
- package/dist/hitl/gateLedger.js +0 -121
- package/dist/hitl/hitlBridge.d.ts +7 -431
- package/dist/hitl/hitlBridge.js +7 -476
- package/dist/hitl/hitlHostSurface.d.ts +0 -150
- package/dist/hitl/hitlHostSurface.js +0 -169
- package/dist/hitl/livePendingAsk.d.ts +0 -91
- package/dist/hitl/livePendingAsk.js +0 -74
- package/dist/hitl/localAllowRule.d.ts +0 -62
- package/dist/hitl/localAllowRule.js +1 -33
- package/dist/hitl/parkOwnership.d.ts +0 -56
- package/dist/hitl/parkOwnership.js +0 -22
- package/dist/hitl/parkResolver.d.ts +3 -88
- package/dist/hitl/parkResolver.js +8 -349
- package/dist/hitl/parkRowBirthWait.d.ts +2 -26
- package/dist/hitl/parkRowBirthWait.js +3 -93
- package/dist/hitl/persistedRulesWire.d.ts +13 -358
- package/dist/hitl/persistedRulesWire.js +0 -310
- package/dist/hitl/planReviewWire.d.ts +4 -176
- package/dist/hitl/planReviewWire.js +9 -312
- package/dist/hitl/resumeRunningCard.d.ts +0 -105
- package/dist/hitl/resumeRunningCard.js +0 -105
- package/dist/hitl/sessionPolicyWire.d.ts +11 -191
- package/dist/hitl/sessionPolicyWire.js +0 -149
- package/dist/hitl/suspendedReopen.d.ts +3 -24
- package/dist/hitl/suspendedReopen.js +0 -14
- package/dist/hitl/toolApprovalWire.d.ts +5 -1308
- package/dist/hitl/toolApprovalWire.js +5 -945
- package/dist/hooksWireCaps.d.ts +0 -38
- package/dist/hooksWireCaps.js +0 -190
- package/dist/host.d.ts +0 -105
- package/dist/host.js +0 -33
- package/dist/hostEnv.d.ts +0 -14
- package/dist/hostEnv.js +0 -13
- package/dist/imagesWireCaps.d.ts +0 -21
- package/dist/imagesWireCaps.js +0 -22
- package/dist/index.d.ts +0 -134
- package/dist/index.js +0 -476
- package/dist/interactiveHalt.d.ts +5 -153
- package/dist/interactiveHalt.js +0 -111
- package/dist/interactiveToolsWire.d.ts +0 -62
- package/dist/interactiveToolsWire.js +1 -67
- package/dist/leaderConflict.d.ts +0 -59
- package/dist/leaderConflict.js +0 -48
- package/dist/limitsWire.d.ts +0 -125
- package/dist/limitsWire.js +2 -120
- package/dist/liveInitToolFace.d.ts +0 -77
- package/dist/liveInitToolFace.js +1 -109
- package/dist/liveModelCatalog.d.ts +0 -52
- package/dist/liveModelCatalog.js +0 -48
- package/dist/liveQuestionStore.d.ts +0 -87
- package/dist/liveQuestionStore.js +1 -56
- package/dist/mcpLiveness.d.ts +0 -151
- package/dist/mcpLiveness.js +0 -122
- package/dist/mcpPanel.d.ts +0 -104
- package/dist/mcpPanel.js +0 -49
- package/dist/mcpReconnect.d.ts +0 -58
- package/dist/mcpReconnect.js +0 -69
- package/dist/mcpWireCaps.d.ts +0 -55
- package/dist/mcpWireCaps.js +1 -13
- package/dist/memoryComplianceCapability.d.ts +3 -57
- package/dist/memoryComplianceCapability.js +0 -57
- package/dist/memoryEntriesWire.d.ts +6 -198
- package/dist/memoryEntriesWire.js +0 -144
- package/dist/memoryOriginCapability.d.ts +3 -53
- package/dist/memoryOriginCapability.js +0 -50
- package/dist/memorySpecWire.d.ts +0 -116
- package/dist/memorySpecWire.js +0 -150
- package/dist/model/catalog.d.ts +0 -111
- package/dist/model/catalog.js +0 -87
- package/dist/model/catalogLoader.d.ts +0 -114
- package/dist/model/catalogLoader.js +2 -139
- package/dist/model/modelSupplyRules.d.ts +1 -55
- package/dist/model/modelSupplyRules.js +0 -62
- package/dist/model/providerAuth.d.ts +0 -103
- package/dist/model/providerAuth.js +2 -38
- package/dist/model/providerCatalog.d.ts +0 -45
- package/dist/model/providerCatalog.js +0 -37
- package/dist/model/providerPresets.d.ts +0 -33
- package/dist/model/providerPresets.js +2 -91
- package/dist/model/tierVocabulary.d.ts +0 -31
- package/dist/model/tierVocabulary.js +0 -27
- package/dist/modelBudgetRule.d.ts +0 -39
- package/dist/modelBudgetRule.js +0 -39
- package/dist/modelCapabilityProbe.d.ts +0 -175
- package/dist/modelCapabilityProbe.js +0 -147
- package/dist/modelWireCaps.d.ts +0 -13
- package/dist/modelWireCaps.js +0 -13
- package/dist/notifications.d.ts +0 -233
- package/dist/notifications.js +14 -492
- package/dist/oneShotWireCaps.d.ts +0 -34
- package/dist/oneShotWireCaps.js +0 -35
- package/dist/ownKey.d.ts +0 -33
- package/dist/ownKey.js +0 -33
- package/dist/panelRunningHistory.d.ts +0 -28
- package/dist/panelRunningHistory.js +0 -43
- package/dist/peerFrames.d.ts +0 -71
- package/dist/peerFrames.js +0 -168
- package/dist/peerLaneCapability.d.ts +0 -44
- package/dist/peerLaneCapability.js +0 -52
- package/dist/permissionRuleIssue.d.ts +0 -30
- package/dist/permissionRuleIssue.js +0 -78
- package/dist/permissionRulesWriteCapability.d.ts +0 -46
- package/dist/permissionRulesWriteCapability.js +0 -54
- package/dist/permissionWireCaps.d.ts +0 -37
- package/dist/permissionWireCaps.js +0 -37
- package/dist/postureKnob.d.ts +0 -71
- package/dist/postureKnob.js +0 -86
- package/dist/principalWire.d.ts +0 -17
- package/dist/principalWire.js +0 -17
- package/dist/printToolResultFrame.d.ts +0 -100
- package/dist/printToolResultFrame.js +0 -33
- package/dist/promptProfileWireCaps.d.ts +0 -13
- package/dist/promptProfileWireCaps.js +0 -13
- package/dist/readFacePosture.d.ts +0 -43
- package/dist/readFacePosture.js +0 -46
- package/dist/request/printNotification.d.ts +0 -20
- package/dist/request/printNotification.js +0 -55
- package/dist/request/taskRequest.d.ts +0 -249
- package/dist/request/taskRequest.js +6 -498
- package/dist/resumeRefusalCopy.d.ts +0 -136
- package/dist/resumeRefusalCopy.js +1 -117
- package/dist/retainBackgroundWireCaps.d.ts +0 -48
- package/dist/retainBackgroundWireCaps.js +0 -48
- package/dist/retryStatus.d.ts +2 -221
- package/dist/retryStatus.js +0 -107
- package/dist/rewindWireCaps.d.ts +0 -27
- package/dist/rewindWireCaps.js +0 -24
- package/dist/runCancelContext.d.ts +1 -20
- package/dist/runCancelContext.js +0 -34
- package/dist/runTerminal.d.ts +0 -273
- package/dist/runTerminal.js +0 -177
- package/dist/sandboxWire.d.ts +0 -38
- package/dist/sandboxWire.js +0 -82
- package/dist/scenarioWire.d.ts +0 -60
- package/dist/scenarioWire.js +0 -68
- package/dist/scratchpadWireCaps.d.ts +0 -11
- package/dist/scratchpadWireCaps.js +0 -32
- package/dist/sdkWireTransit.d.ts +0 -38
- package/dist/sdkWireTransit.js +0 -30
- package/dist/seam.d.ts +18 -853
- package/dist/seam.js +0 -52
- package/dist/seatContract.d.ts +0 -555
- package/dist/seatContract.js +5 -304
- package/dist/selfOrchestrationDenial.d.ts +0 -189
- package/dist/selfOrchestrationDenial.js +0 -162
- package/dist/selfOrchestrationWireCaps.d.ts +0 -38
- package/dist/selfOrchestrationWireCaps.js +0 -38
- package/dist/sessionMap.d.ts +0 -60
- package/dist/sessionMap.js +0 -37
- package/dist/sessionMemoryStatus.d.ts +11 -114
- package/dist/sessionMemoryStatus.js +0 -112
- package/dist/sessionModelLatch.d.ts +0 -29
- package/dist/sessionModelLatch.js +0 -40
- package/dist/sessionPolicyCapability.d.ts +3 -53
- package/dist/sessionPolicyCapability.js +0 -52
- package/dist/sessionSlot.d.ts +0 -26
- package/dist/sessionSlot.js +0 -17
- package/dist/skillsWireCaps.d.ts +0 -87
- package/dist/skillsWireCaps.js +0 -38
- package/dist/sqlEngineCapability.d.ts +0 -118
- package/dist/sqlEngineCapability.js +0 -134
- package/dist/sseIdleTriage.d.ts +0 -79
- package/dist/sseIdleTriage.js +1 -80
- package/dist/steering.d.ts +0 -54
- package/dist/steering.js +0 -63
- package/dist/subagent/engineCompactWire.d.ts +0 -34
- package/dist/subagent/engineCompactWire.js +4 -134
- package/dist/subagent/engineDelegatedPrompt.d.ts +0 -31
- package/dist/subagent/engineDelegatedPrompt.js +1 -103
- package/dist/subagent/engineRowStopGate.d.ts +0 -20
- package/dist/subagent/engineRowStopGate.js +0 -49
- package/dist/subagent/engineSubagentOutput.d.ts +0 -7
- package/dist/subagent/engineSubagentOutput.js +1 -51
- package/dist/subagent/engineSubagentResume.d.ts +2 -279
- package/dist/subagent/engineSubagentResume.js +2 -129
- package/dist/subagent/engineSubagentSteer.d.ts +0 -26
- package/dist/subagent/engineSubagentSteer.js +0 -63
- package/dist/subagent/engineSubagentTail.d.ts +0 -38
- package/dist/subagent/engineSubagentTail.js +2 -110
- package/dist/subagent/engineTaskHandleWire.d.ts +6 -67
- package/dist/subagent/engineTaskHandleWire.js +0 -126
- package/dist/subagent/subagentOwnerAbsence.d.ts +0 -2
- package/dist/subagent/subagentOwnerAbsence.js +0 -25
- package/dist/subagentContentStore.d.ts +3 -260
- package/dist/subagentContentStore.js +7 -540
- package/dist/systemReminderTag.d.ts +0 -49
- package/dist/systemReminderTag.js +0 -61
- package/dist/toolResult.d.ts +1 -211
- package/dist/toolResult.js +1 -358
- package/dist/toolRoster.d.ts +0 -140
- package/dist/toolRoster.js +0 -66
- package/dist/typePins.d.ts +0 -46
- package/dist/types/engineState.d.ts +0 -71
- package/dist/types/engineState.js +0 -16
- package/dist/ultracodeWireCaps.d.ts +0 -75
- package/dist/ultracodeWireCaps.js +0 -92
- package/dist/unrefTimer.d.ts +0 -27
- package/dist/webSearchBackendCapability.d.ts +0 -72
- package/dist/webSearchBackendCapability.js +0 -79
- package/dist/webSearchWireCaps.d.ts +0 -37
- package/dist/webSearchWireCaps.js +0 -34
- package/dist/websearch/searchProviderPresets.d.ts +0 -81
- package/dist/websearch/searchProviderPresets.js +0 -27
- package/dist/wireErrorTriage.d.ts +4 -160
- package/dist/wireErrorTriage.js +0 -171
- package/dist/wireRefusalCopy.d.ts +0 -28
- package/dist/wireRefusalCopy.js +0 -28
- package/dist/workflow.d.ts +0 -40
- package/dist/workflow.js +0 -52
- package/dist/workflowClient.d.ts +0 -122
- package/dist/workflowClient.js +8 -360
- package/dist/workflowMonitor.d.ts +2 -72
- package/dist/workflowMonitor.js +0 -26
- package/dist/writeProtectionCapability.d.ts +0 -112
- package/dist/writeProtectionCapability.js +0 -109
- package/docs/INTEGRATION-CLIENTS.md +30 -1
- package/package.json +1 -1
|
@@ -1,25 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* approvalsStreamLiveCapability — `GET /v1/capabilities.approvalsStreamLive`(server ≥7.87.1;sdk 9.7.1 `Capabilities.approvalsStreamLive?: boolean`)
|
|
3
|
-
* 的三端共用读面(0.73.3;与 sql / writeProtection / webSearch.backend / executionLane 四只兄弟同一套四态词汇)。
|
|
4
|
-
*
|
|
5
|
-
* ── 这一位答的是哪一个问题 ────────────────────────────────────────────────────────────────
|
|
6
|
-
* 「这台引擎会不会在 `approvals.stream` 上推流内 ask 的进出(`live_pending` / `live_resolved`)」= checkpointStore ∧ toolApproval。
|
|
7
|
-
* 它决定 feed 消费方要不要**靠**推面:位为 true ⇒ 推面可靠,对账节拍(`ApprovalsFeedOptions.reconcile`)只是兜底;
|
|
8
|
-
* 位为 false / 键缺席 / 从没观测 ⇒ 推面**不可靠或判不出**,对账节拍是悬挂 ask 的唯一拉面 —— **别等** `live_pending`。
|
|
9
|
-
*
|
|
10
|
-
* ── 🔴 读法 ─────────────────────────────────────────────────────────────────────────────────
|
|
11
|
-
* ① **键缺席 ≠ false**:老 server(<7.87.1)不报这一位 ⇒ `not_reported`(判不出),按「要拉」处理;折成 false 是替引擎断言「不推」。
|
|
12
|
-
* ② 严格布尔;`null` / 串 / 数 / 数组 / 对象 ⇒ 畸形(删格 ⇒ `unobserved`)。
|
|
13
|
-
* ③ 「要不要对账」的判据归包:{@link livePendingNeedsReconcile} —— 只有 present 且 true 才 false;其余一律 true(少查一次 = 一只等人的 ask 迟迟不出现)。
|
|
14
|
-
*/
|
|
15
1
|
import { engineWireTarget } from './engineWireTarget.js';
|
|
16
2
|
import { createEngineCapReader } from './engineCapReader.js';
|
|
17
|
-
/** caps 回体 → 本格读数;畸形一律 `undefined`(= 这一格不写 ⇒ 读口答 `unobserved`)。 */
|
|
18
3
|
export function projectApprovalsStreamLiveCapability(caps) {
|
|
19
4
|
if (caps === null || typeof caps !== 'object')
|
|
20
5
|
return undefined;
|
|
21
|
-
// 0.77.0 整族改齐:① 非对象 / 数组 caps 不是能力表 ⇒ 畸形(投影答 undefined ⇒ 删格 ⇒ 读口答 unobserved),不再答 not_reported
|
|
22
|
-
// (那是把「取不到」冒充「报了但没提」);② 在场判据改 hasOwn —— 原型链上的同名键永远不会被序列化上 wire,读成在场 = 凭空造一格。
|
|
23
6
|
if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
|
|
24
7
|
return undefined;
|
|
25
8
|
if (!Object.hasOwn(caps, 'approvalsStreamLive'))
|
|
@@ -31,32 +14,20 @@ export function projectApprovalsStreamLiveCapability(caps) {
|
|
|
31
14
|
return undefined;
|
|
32
15
|
return { kind: 'present', live: v };
|
|
33
16
|
}
|
|
34
|
-
/**
|
|
35
|
-
* 本格的 per-baseUrl 读账 + tee / 读口 / 失效口 / 测试钩四口 —— 各只能力位读器**共用同一份实现**
|
|
36
|
-
* ({@link createEngineCapReader});本文件只留这一格真正不同的部分:投影函数 {@link projectApprovalsStreamLiveCapability}、doctor 措辞表,以及本位自己的判据助手(如有)。
|
|
37
|
-
* 🔴 Map 在工厂闭包里,**一只读器一张**:收到读不懂的回体只删自己这一格,绝不连坐别的能力面。
|
|
38
|
-
*/
|
|
39
17
|
const reader = createEngineCapReader({
|
|
40
18
|
name: 'approvalsStreamLive',
|
|
41
19
|
project: projectApprovalsStreamLiveCapability,
|
|
42
20
|
makeUnobserved: () => ({ kind: 'unobserved' }),
|
|
43
21
|
});
|
|
44
|
-
/** 宿主 caps probe 的读面 tee 落点(与四只兄弟并列)。绝不 throw;畸形 ⇒ 删格;`opts.generation` 关掉旧探测覆盖新读数的竞态。 */
|
|
45
22
|
export function noteEngineCapsForApprovalsStreamLive(baseUrl, caps, opts) {
|
|
46
23
|
reader.note(baseUrl, caps, opts);
|
|
47
24
|
}
|
|
48
|
-
/** 本进程观测到的读数;这一格空缺 ⇒ `{kind:'unobserved'}`。 */
|
|
49
25
|
export function observedApprovalsStreamLive(baseUrl = engineWireTarget()?.baseUrl) {
|
|
50
26
|
return reader.observed(baseUrl);
|
|
51
27
|
}
|
|
52
|
-
/**
|
|
53
|
-
* feed 消费方「要不要靠对账节拍拉悬挂 ask」的判据单源:只有引擎明说会推(present ∧ true)才 `false`;
|
|
54
|
-
* 位为 false / 老 server 判不出 / 从没观测 ⇒ `true`。fail-safe 方向定在「查」(与 `shouldPoll` 同一条理由)。
|
|
55
|
-
*/
|
|
56
28
|
export function livePendingNeedsReconcile(reading) {
|
|
57
29
|
return !(reading.kind === 'present' && reading.live === true);
|
|
58
30
|
}
|
|
59
|
-
/** doctor 那一行的 detail 串,唯一措辞真源。🔴 `not_reported` 句不许暗示「不推」。 */
|
|
60
31
|
export function approvalsStreamLiveDoctorDetail(reading) {
|
|
61
32
|
switch (reading.kind) {
|
|
62
33
|
case 'unobserved':
|
|
@@ -69,11 +40,9 @@ export function approvalsStreamLiveDoctorDetail(reading) {
|
|
|
69
40
|
: 'live approval push off on this deployment (no checkpoint store or tool approvals disabled) — suspended asks are only visible through the reconcile cadence, so the client polls for them';
|
|
70
41
|
}
|
|
71
42
|
}
|
|
72
|
-
/** 换代失效口(引擎温切成功后调):清成未观测。空串 ⇒ no-op;绝不 throw。 */
|
|
73
43
|
export function forgetApprovalsStreamLiveReading(baseUrl) {
|
|
74
44
|
reader.forget(baseUrl);
|
|
75
45
|
}
|
|
76
|
-
/** 测试钩子。 */
|
|
77
46
|
export function __resetApprovalsStreamLiveReadingsForTests() {
|
|
78
47
|
reader.__resetForTests();
|
|
79
48
|
}
|
package/dist/argvFlagValue.d.ts
CHANGED
|
@@ -1,41 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/argvFlagValue.ts — shared CC/commander-style "last flag value" argv-scan primitive
|
|
3
|
-
* (REF-CC-143 / REF-CC-dup-07, P3 wave1 卡C-argv, 2026-08-01;缺值策略位补于 wave1 回炉,
|
|
4
|
-
* blocker 修复,同日).
|
|
5
|
-
*
|
|
6
|
-
* Five call sites (limitsWire / sandboxWire / scenarioWire / headlessPermissionModeWire —
|
|
7
|
-
* interactiveToolsWire's own copy folds away entirely per REF-CC-dup-10, delegating to
|
|
8
|
-
* headlessPermissionModeWire instead) each hand-rolled the identical loop: scan everything
|
|
9
|
-
* before a bare `--` (positionals are never flags), accept both `--name <v>` and `--name=<v>`
|
|
10
|
-
* forms, repeated flag ⇒ LAST wins (commander convention).
|
|
11
|
-
*
|
|
12
|
-
* 缺值策略(收编口径,`onMissingValue` 显式位):当某一次 occurrence 的值缺席/长得像另一个 flag
|
|
13
|
-
* 时,这个共用叶提供两种可命名的处置——**调用方选,不由本叶替调用方决定**:
|
|
14
|
-
* · `'invalidate'`(缺省,limitsWire/sandboxWire/scenarioWire 用这个):那次缺值让整个旗的最终
|
|
15
|
-
* 取值塌缩成「有旗、无值」(`{present:true}`,raw 缺席)——与这三处一直以来的 fail-LOUD 立场
|
|
16
|
-
* 一致:重复旗严格 LAST occurrence 定生死,哪怕最后一次是缺值也不会回落到更早的合法值。
|
|
17
|
-
* · `'latch-previous'`(headlessPermissionModeWire 用这个):那次缺值被当作「这次 occurrence 没
|
|
18
|
-
* 提供新信息」,直接跳过,锁存(latch)住之前已经取到的合法值不动——这是收编前那份手写循环
|
|
19
|
-
* 的原语义(`if (typeof v === 'string' && !v.startsWith('-')) { mode = v }`,缺值分支从不碰
|
|
20
|
-
* `mode`),收编成共用叶不能悄悄把它改造成 invalidate 语义。
|
|
21
|
-
* 两种策略都遵守同一条不变量:**从未出现过合法值** ⇒ 恒回 `{present:true}`(raw 缺席),从不
|
|
22
|
-
* 编造一个值;调用方各自决定「有旗无值」之后怎么办(fail-loud 用法提示,或落到下一车道)。
|
|
23
|
-
*/
|
|
24
|
-
/** `lastFlagValue` 的判别式返回型(非法组合 `{present:false, raw:'x'}` 在类型层就不可构造)。 */
|
|
25
1
|
export type FlagValue = {
|
|
26
2
|
present: false;
|
|
27
3
|
} | {
|
|
28
4
|
present: true;
|
|
29
5
|
raw?: string;
|
|
30
6
|
};
|
|
31
|
-
/** 缺值(occurrence 存在但值缺席/长得像另一个 flag)时的处置策略——见上方模块 doc。 */
|
|
32
7
|
export type OnMissingFlagValue = 'invalidate' | 'latch-previous';
|
|
33
|
-
/**
|
|
34
|
-
* Pull the LAST value of a `--name <v>` / `--name=<v>` flag out of an argv slice (everything
|
|
35
|
-
* before a bare `--` — positionals are never flags). Returns:
|
|
36
|
-
* {present:false} — flag absent
|
|
37
|
-
* {present:true, raw} — flag present with a value token (possibly empty string)
|
|
38
|
-
* {present:true, raw:undefined} — flag present but no value was ever captured (see
|
|
39
|
-
* `onMissingValue` for what "captured" means across repeats)
|
|
40
|
-
*/
|
|
41
8
|
export declare function lastFlagValue(argv: readonly string[], name: string, onMissingValue?: OnMissingFlagValue): FlagValue;
|
package/dist/argvFlagValue.js
CHANGED
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* src/argvFlagValue.ts — shared CC/commander-style "last flag value" argv-scan primitive
|
|
3
|
-
* (REF-CC-143 / REF-CC-dup-07, P3 wave1 卡C-argv, 2026-08-01;缺值策略位补于 wave1 回炉,
|
|
4
|
-
* blocker 修复,同日).
|
|
5
|
-
*
|
|
6
|
-
* Five call sites (limitsWire / sandboxWire / scenarioWire / headlessPermissionModeWire —
|
|
7
|
-
* interactiveToolsWire's own copy folds away entirely per REF-CC-dup-10, delegating to
|
|
8
|
-
* headlessPermissionModeWire instead) each hand-rolled the identical loop: scan everything
|
|
9
|
-
* before a bare `--` (positionals are never flags), accept both `--name <v>` and `--name=<v>`
|
|
10
|
-
* forms, repeated flag ⇒ LAST wins (commander convention).
|
|
11
|
-
*
|
|
12
|
-
* 缺值策略(收编口径,`onMissingValue` 显式位):当某一次 occurrence 的值缺席/长得像另一个 flag
|
|
13
|
-
* 时,这个共用叶提供两种可命名的处置——**调用方选,不由本叶替调用方决定**:
|
|
14
|
-
* · `'invalidate'`(缺省,limitsWire/sandboxWire/scenarioWire 用这个):那次缺值让整个旗的最终
|
|
15
|
-
* 取值塌缩成「有旗、无值」(`{present:true}`,raw 缺席)——与这三处一直以来的 fail-LOUD 立场
|
|
16
|
-
* 一致:重复旗严格 LAST occurrence 定生死,哪怕最后一次是缺值也不会回落到更早的合法值。
|
|
17
|
-
* · `'latch-previous'`(headlessPermissionModeWire 用这个):那次缺值被当作「这次 occurrence 没
|
|
18
|
-
* 提供新信息」,直接跳过,锁存(latch)住之前已经取到的合法值不动——这是收编前那份手写循环
|
|
19
|
-
* 的原语义(`if (typeof v === 'string' && !v.startsWith('-')) { mode = v }`,缺值分支从不碰
|
|
20
|
-
* `mode`),收编成共用叶不能悄悄把它改造成 invalidate 语义。
|
|
21
|
-
* 两种策略都遵守同一条不变量:**从未出现过合法值** ⇒ 恒回 `{present:true}`(raw 缺席),从不
|
|
22
|
-
* 编造一个值;调用方各自决定「有旗无值」之后怎么办(fail-loud 用法提示,或落到下一车道)。
|
|
23
|
-
*/
|
|
24
|
-
/**
|
|
25
|
-
* Pull the LAST value of a `--name <v>` / `--name=<v>` flag out of an argv slice (everything
|
|
26
|
-
* before a bare `--` — positionals are never flags). Returns:
|
|
27
|
-
* {present:false} — flag absent
|
|
28
|
-
* {present:true, raw} — flag present with a value token (possibly empty string)
|
|
29
|
-
* {present:true, raw:undefined} — flag present but no value was ever captured (see
|
|
30
|
-
* `onMissingValue` for what "captured" means across repeats)
|
|
31
|
-
*/
|
|
32
1
|
export function lastFlagValue(argv, name, onMissingValue = 'invalidate') {
|
|
33
2
|
const eq = `${name}=`;
|
|
34
3
|
let present = false;
|
|
@@ -39,21 +8,20 @@ export function lastFlagValue(argv, name, onMissingValue = 'invalidate') {
|
|
|
39
8
|
if (a === undefined)
|
|
40
9
|
continue;
|
|
41
10
|
if (a === '--')
|
|
42
|
-
break;
|
|
11
|
+
break;
|
|
43
12
|
if (a === name) {
|
|
44
13
|
present = true;
|
|
45
14
|
const nxt = argv[i + 1];
|
|
46
15
|
if (nxt === undefined || nxt.startsWith('-')) {
|
|
47
|
-
// a value that LOOKS like another flag (or is plain missing) is not a value.
|
|
48
16
|
if (onMissingValue === 'latch-previous')
|
|
49
|
-
continue;
|
|
17
|
+
continue;
|
|
50
18
|
valueMissing = true;
|
|
51
19
|
raw = undefined;
|
|
52
20
|
continue;
|
|
53
21
|
}
|
|
54
22
|
valueMissing = false;
|
|
55
23
|
raw = nxt;
|
|
56
|
-
i++;
|
|
24
|
+
i++;
|
|
57
25
|
}
|
|
58
26
|
else if (a.startsWith(eq)) {
|
|
59
27
|
present = true;
|
|
@@ -1,146 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/attachmentsWireCaps.ts 逐字搬入(零依赖)。
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* src/sema/attachmentsWireCaps.ts — design/133 + G1 turn-boundary attachments WIRE pure-projection:
|
|
6
|
-
* the shell's intent → the top-level `TaskRequest.attachments` object the service normalizes
|
|
7
|
-
* (spec-fields.ts normalizeAttachments) → core `TaskSpec.attachments`.
|
|
8
|
-
*
|
|
9
|
-
* DEFAULT ON for the TOC live path ([487]② — CC parity): CC's own /compact announces the still
|
|
10
|
-
* pending/running background tasks after compaction and notices newly-available deferred tools at
|
|
11
|
-
* boundaries — a TOC user gets that behavior without flipping anything. The default therefore
|
|
12
|
-
* carries the G1 announce pair `{backgroundTasks, toolsDelta}`:
|
|
13
|
-
* - both are ONE-SHOT/quiet engine-side (no compaction ⇒ backgroundTasks permanently silent; no
|
|
14
|
-
* deferred-tool materialization ⇒ toolsDelta permanently silent), so the default costs nothing
|
|
15
|
-
* on an ordinary session;
|
|
16
|
-
* - the design/133 reminder trio (todoReminder/changedFiles/planModeReminder) stays OPT-IN
|
|
17
|
-
* (`SEMA_ATTACHMENTS=full`) — core's own default-face judgment (evidence from autonomous legs
|
|
18
|
-
* only; interactive deployments stay byte-identical) is respected until a behavior leg says
|
|
19
|
-
* otherwise.
|
|
20
|
-
*
|
|
21
|
-
* ══ 🔴 FIX⑤(2026-08-07)—— 这个字段下面其实躺着**两族契约**,此前只实现了一族 ═══════════════
|
|
22
|
-
*
|
|
23
|
-
* 契约真源 = `@sema-agent/sdk` `types.d.ts` 的 `TaskRequest.attachments`(6.3.0 起 10 键)。
|
|
24
|
-
* 两族的「关」是两种**不同**的动作,混为一谈就必然有一族关不掉:
|
|
25
|
-
*
|
|
26
|
-
* ① **literal-true 族**(7 员:todoReminder / changedFiles / planModeReminder / budgetUsd /
|
|
27
|
-
* backgroundTasks / toolsDelta / mcpInstructions,外加取值型的 todoReminderMode):
|
|
28
|
-
* 引擎侧默认**关**,键在场即开。板 [479] ask-2 的原话是「off = DELETE the key, never send
|
|
29
|
-
* false」—— 对这一族,发 `false` 是违约(核心根本没有「显式关」这个语义位),所以本模块对
|
|
30
|
-
* 它们**永不产出 false**:OFF ⇒ 键不出现。
|
|
31
|
-
*
|
|
32
|
-
* ② **explicit-false 族**(3 员:agentListing / skillsListing / **backgroundTasks**):
|
|
33
|
-
* 它们在 core 里是 **DEFAULT-ON**,SDK 头注写死「`agentListing`/`skillsListing` 是 core
|
|
34
|
-
* DEFAULT-ON —— **explicit false 才关**(1.254 起 false 真透传;更老 server 静默丢)」。
|
|
35
|
-
* 于是「删键」在这一族上的含义是**保持开着**,而不是关掉。旧的 `AttachmentsSpec` 把全部键
|
|
36
|
-
* 钉成 `?: true`,literal 类型层面就表达不出 `false` ⇒ 这两个 DEFAULT-ON 的附件**没有任何
|
|
37
|
-
* 路径可以关闭**(不是「难关」,是类型层封死)。本批把这两键的类型放宽成 `boolean` 并给出
|
|
38
|
-
* 产出 `false` 的路径。
|
|
39
|
-
*
|
|
40
|
-
* ══ 🔴 [4982] 候选①(P0-KPI,0.42.0)—— **第三员漏族:`backgroundTasks`** ════════════════════
|
|
41
|
-
*
|
|
42
|
-
* core **5.12.0 (BREAKING)** 把 `attachments.backgroundTasks` 与 `agentListing`/`skillsListing`
|
|
43
|
-
* **同批**翻成 DEFAULT-ON(core `types.d.ts` 逐字:「Post-compact background-task restatement —
|
|
44
|
-
* DEFAULT ON since 5.12.0 (**boolean, not `true`**: explicit `false` is the opt-out; **same contract
|
|
45
|
-
* as the listing family below**)」)。三兄弟同批翻转,本模块**跟修了后两个、漏了第一个** ——
|
|
46
|
-
* `backgroundTasks` 一直留在 ① 族(off = 删键,永不发 false)。
|
|
47
|
-
* 后果是这个旋钮上最坏的一种失效:`SEMA_ATTACHMENTS=off`(文件自称「真·全关」)对这一位与
|
|
48
|
-
* **什么都不配**逐字节同效(两条路都不发这个键 = 都是「开」),**且零报错** —— 用户以为关掉了,
|
|
49
|
-
* 附件照进上下文,没有任何一处会说出来。与 ② 族当初那个洞是同一个病形的第三例。
|
|
50
|
-
*
|
|
51
|
-
* ── 修法:把「能不能显式打开」与「能不能显式关掉」拆成**两条正交的轴** ────────────────────────
|
|
52
|
-
* `backgroundTasks` 同时住两族,这不是分类含糊,这**就是**它的契约:
|
|
53
|
-
* · **轴 A(可显式开)** = `full` 会全开的那 7 员 —— `backgroundTasks` 在内,**membership 不动**;
|
|
54
|
-
* · **轴 B(可显式关)** = core DEFAULT-ON 的 3 员 —— `backgroundTasks` 新入。
|
|
55
|
-
* 只把它整个搬进 ② 族(= 从轴 A 里删掉)是**错的修法**,两条理由都是硬的:
|
|
56
|
-
* ① `full` / `default` / `+backgroundTasks` 三条既有路会当场少发一个 `backgroundTasks: true`
|
|
57
|
-
* —— 对 core ≥5.12.0 行为等价(默认就是开),但对**更老引擎**那是真的从「开」变成「关」,
|
|
58
|
-
* 而本模块手里没有 server 版本这个量(见下面 §能力边界),没资格替用户做那个降级;
|
|
59
|
-
* ② 空 env 的默认产出 `{backgroundTasks: true, toolsDelta: true}` 是 [487]② CC-parity 那一对的
|
|
60
|
-
* 字面承诺,删掉它就是把「默认逐字节不变」这条本模块的立身纪律自己破了。
|
|
61
|
-
* ⇒ 本批**只加一条出路**(`off` 与 `-backgroundTasks` 产出 `false`),其余取值逐字节不变。
|
|
62
|
-
*
|
|
63
|
-
* ── env 面(`SEMA_ATTACHMENTS`)的取值语法,以及为什么选这一种 ────────────────────────────────
|
|
64
|
-
* 目标是「**默认行为逐字节不变** + 有路可关 DEFAULT-ON 两键」,所以选了**在既有值上加逗号 token
|
|
65
|
-
* 列表**,而不是新开一个 env:
|
|
66
|
-
* · 新开一个 env(如 `SEMA_ATTACHMENTS_OFF`)会让「附件面怎么配」有两个入口,而两个入口之间的
|
|
67
|
-
* 优先级又要再定义一次 —— 这类第二真源正是本仓反复登记的病族;
|
|
68
|
-
* · 逗号 token 列表对**存量取值零影响**:`unset` / `full` / `all` / off 拼法四种老写法解析结果
|
|
69
|
-
* 逐字节不变(FIX7 段 ⑤ 有正面钉),新语法只在用户真写了逗号 token 时才被触发。
|
|
70
|
-
* 语法(逗号分隔,大小写不敏感,允许空白):
|
|
71
|
-
* · `off|0|false|no|none`(整值) ⇒ **真·全关**:只可显式开的那一族一个不发(它们的 off 就是
|
|
72
|
-
* 删键)+ DEFAULT-ON **三键**(agentListing / skillsListing /
|
|
73
|
-
* backgroundTasks)发 `false`。
|
|
74
|
-
* 🔴 对抗复审 [medium](2026-08-07)判的真病:这一支此前直接 `return undefined`(不发字段),
|
|
75
|
-
* 而「不发字段」对 DEFAULT-ON 两键的含义**恰恰是保持开着** —— 一个叫 off 的总开关关不掉十件里
|
|
76
|
-
* 的两件,且用户没有任何办法察觉。旧行为在 <1.254 的 server 上与新行为**逐字节等价**(那些
|
|
77
|
-
* server 静默丢 false),在 ≥1.254 上新行为才第一次兑现这个旋钮的字面承诺。
|
|
78
|
-
* ⚠️ **能力边界说清楚**(对抗复审二轮):本模块是**纯 env→spec 投影**,手里没有 server
|
|
79
|
-
* 版本/capability 这个量,所以对 <1.254 的部署它兑现不了「全关」—— 那两键仍会默认开着,而
|
|
80
|
-
* 壳侧无从察觉。补这个洞的正位在**请求装配层**(按已探到的 capability 判,与 limitsWire 的
|
|
81
|
-
* 两道地板同族),已记进 docs/refactor/README.md 的宿主/上游工单表。本层只保证两件:
|
|
82
|
-
* ① 新行为在任何 server 代际上都**不比旧行为差**(旧行为在所有代际上都关不掉那两键);
|
|
83
|
-
* ② 不在自己的能力之外说大话 —— 所以上面那句「真·全关」的适用范围就是 ≥1.254。
|
|
84
|
-
* · `full` / `all` ⇒ literal-true 族 7 员全开(**不含** DEFAULT-ON 两键 ——
|
|
85
|
-
* 不发 = 保持 core 默认开,壳不替 core 做那个决定)
|
|
86
|
-
* · `default` ⇒ CC-parity 那一对(显式写出「默认」这个意思)
|
|
87
|
-
* · `<key>` / `+<key>` ⇒ 单点打开一个「可显式开」族成员(轴 A 的 7 员)
|
|
88
|
-
* · `-agentListing` / `-skillsListing` / `-backgroundTasks` ⇒ 产出 **`false`**(DEFAULT-ON 三键
|
|
89
|
-
* 唯一的关法;`-backgroundTasks` 是 [4982] 候选① 补的那条)
|
|
90
|
-
* · `todoReminderMode=baseline|off` ⇒ 取值型键
|
|
91
|
-
* 🔴 未登记 token / 对 literal-true 族用 `-` / todoReminderMode 取闭集外的值 ⇒ **fail-loud 抛错**。
|
|
92
|
-
* 静默忽略是这条链上最坏的失效形:用户以为自己关掉了 agentListing,而请求照发、附件照进上下文,
|
|
93
|
-
* 并且没有任何一处会说出来。
|
|
94
|
-
*
|
|
95
|
-
* PURE — no env/file IO of its own (callers pass `env`), the verified wireCaps pattern. The CALLER
|
|
96
|
-
* (seamQuery / the print-mode ask) gates the read to LIVE mode so the mock request shape never
|
|
97
|
-
* changes.
|
|
98
|
-
*/
|
|
99
1
|
import { type EnvLike } from './hostEnv.js';
|
|
100
|
-
/** The env key the shell reads. 取值语法见文件头注 §env。 */
|
|
101
2
|
export declare const ATTACHMENTS_ENV: "SEMA_ATTACHMENTS";
|
|
102
|
-
/**
|
|
103
|
-
* Mirror of `@sema-agent/sdk` `TaskRequest.attachments`(6.3.0,`types.d.ts`)—— **10 键全镜像**。
|
|
104
|
-
* 两族的类型形不同,而这个不同**就是**契约本身(见文件头注):literal-true 族只能是 `true`
|
|
105
|
-
* (发 `false` 违约),DEFAULT-ON 两族是 `boolean`(`false` 才是它们的关)。
|
|
106
|
-
*/
|
|
107
3
|
export interface AttachmentsSpec {
|
|
108
4
|
todoReminder?: true;
|
|
109
|
-
/** 取值型:`"baseline"` | `"off"`(缺席 = 引擎默认)。 */
|
|
110
5
|
todoReminderMode?: 'baseline' | 'off';
|
|
111
6
|
changedFiles?: true | {
|
|
112
7
|
maxFiles?: number;
|
|
113
8
|
};
|
|
114
9
|
planModeReminder?: true;
|
|
115
10
|
budgetUsd?: true;
|
|
116
|
-
/**
|
|
117
|
-
* 🔴 **两族兼属**([4982] 候选①,0.42.0):它在轴 A(`full` 会开)也在轴 B(core ≥5.12.0
|
|
118
|
-
* DEFAULT-ON,`false` 才是关)。类型因此是 `boolean` 而不是 `true` —— 钉成 `true` 正是
|
|
119
|
-
* 「关不掉」那个洞的类型层根因。
|
|
120
|
-
*/
|
|
121
11
|
backgroundTasks?: boolean;
|
|
122
12
|
toolsDelta?: true;
|
|
123
13
|
mcpInstructions?: true;
|
|
124
14
|
agentListing?: boolean;
|
|
125
15
|
skillsListing?: boolean;
|
|
126
16
|
}
|
|
127
|
-
/** 键面台账(机读位):加键必须同批登记,否则下方 `Covers` 双向钉编译红。 */
|
|
128
17
|
export declare const ATTACHMENTS_SPEC_KEYS: readonly ["todoReminder", "todoReminderMode", "changedFiles", "planModeReminder", "budgetUsd", "backgroundTasks", "toolsDelta", "mcpInstructions", "agentListing", "skillsListing"];
|
|
129
|
-
/**
|
|
130
|
-
* **轴 B —— 可显式关**(core DEFAULT-ON,`false` 才是关;`-<key>` 与总开关 `off` 的作用面)。
|
|
131
|
-
* 🔴 [4982] 候选①(0.42.0):`backgroundTasks` 补入 —— core 5.12.0 与另两员**同批**翻 DEFAULT-ON,
|
|
132
|
-
* 本模块当时只跟修了两员。这张表**不是** ① 族的补集(`backgroundTasks` 两族兼属,见 AttachmentsSpec
|
|
133
|
-
* 上的键注与文件头注的「两条正交的轴」段)。
|
|
134
|
-
*/
|
|
135
18
|
export declare const ATTACHMENTS_DEFAULT_ON_KEYS: readonly ["agentListing", "skillsListing", "backgroundTasks"];
|
|
136
|
-
/**
|
|
137
|
-
* ENV source → the `TaskRequest.attachments` stamp.
|
|
138
|
-
*
|
|
139
|
-
* 恒返回一个对象:literal-true 族永远只出现 `true`(core 契约:off = 删键),而
|
|
140
|
-
* `agentListing`/`skillsListing` 只在被显式关掉时出现,值恒为 `false`(它们的 core 默认是开,
|
|
141
|
-
* 不发 = 不动那个默认)。返回型保留 `| undefined` 是给未来留位,今天没有分支产出它。
|
|
142
|
-
*
|
|
143
|
-
* @throws 未登记 token / 对 literal-true 族用 `-` / todoReminderMode 取闭集外的值(fail-loud:
|
|
144
|
-
* 静默忽略会让「我明明关了」与「它其实还开着」同时为真)。
|
|
145
|
-
*/
|
|
146
19
|
export declare function attachmentsForRequest(env?: EnvLike): AttachmentsSpec | undefined;
|
|
@@ -1,106 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/attachmentsWireCaps.ts 逐字搬入(零依赖)。
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* src/sema/attachmentsWireCaps.ts — design/133 + G1 turn-boundary attachments WIRE pure-projection:
|
|
6
|
-
* the shell's intent → the top-level `TaskRequest.attachments` object the service normalizes
|
|
7
|
-
* (spec-fields.ts normalizeAttachments) → core `TaskSpec.attachments`.
|
|
8
|
-
*
|
|
9
|
-
* DEFAULT ON for the TOC live path ([487]② — CC parity): CC's own /compact announces the still
|
|
10
|
-
* pending/running background tasks after compaction and notices newly-available deferred tools at
|
|
11
|
-
* boundaries — a TOC user gets that behavior without flipping anything. The default therefore
|
|
12
|
-
* carries the G1 announce pair `{backgroundTasks, toolsDelta}`:
|
|
13
|
-
* - both are ONE-SHOT/quiet engine-side (no compaction ⇒ backgroundTasks permanently silent; no
|
|
14
|
-
* deferred-tool materialization ⇒ toolsDelta permanently silent), so the default costs nothing
|
|
15
|
-
* on an ordinary session;
|
|
16
|
-
* - the design/133 reminder trio (todoReminder/changedFiles/planModeReminder) stays OPT-IN
|
|
17
|
-
* (`SEMA_ATTACHMENTS=full`) — core's own default-face judgment (evidence from autonomous legs
|
|
18
|
-
* only; interactive deployments stay byte-identical) is respected until a behavior leg says
|
|
19
|
-
* otherwise.
|
|
20
|
-
*
|
|
21
|
-
* ══ 🔴 FIX⑤(2026-08-07)—— 这个字段下面其实躺着**两族契约**,此前只实现了一族 ═══════════════
|
|
22
|
-
*
|
|
23
|
-
* 契约真源 = `@sema-agent/sdk` `types.d.ts` 的 `TaskRequest.attachments`(6.3.0 起 10 键)。
|
|
24
|
-
* 两族的「关」是两种**不同**的动作,混为一谈就必然有一族关不掉:
|
|
25
|
-
*
|
|
26
|
-
* ① **literal-true 族**(7 员:todoReminder / changedFiles / planModeReminder / budgetUsd /
|
|
27
|
-
* backgroundTasks / toolsDelta / mcpInstructions,外加取值型的 todoReminderMode):
|
|
28
|
-
* 引擎侧默认**关**,键在场即开。板 [479] ask-2 的原话是「off = DELETE the key, never send
|
|
29
|
-
* false」—— 对这一族,发 `false` 是违约(核心根本没有「显式关」这个语义位),所以本模块对
|
|
30
|
-
* 它们**永不产出 false**:OFF ⇒ 键不出现。
|
|
31
|
-
*
|
|
32
|
-
* ② **explicit-false 族**(3 员:agentListing / skillsListing / **backgroundTasks**):
|
|
33
|
-
* 它们在 core 里是 **DEFAULT-ON**,SDK 头注写死「`agentListing`/`skillsListing` 是 core
|
|
34
|
-
* DEFAULT-ON —— **explicit false 才关**(1.254 起 false 真透传;更老 server 静默丢)」。
|
|
35
|
-
* 于是「删键」在这一族上的含义是**保持开着**,而不是关掉。旧的 `AttachmentsSpec` 把全部键
|
|
36
|
-
* 钉成 `?: true`,literal 类型层面就表达不出 `false` ⇒ 这两个 DEFAULT-ON 的附件**没有任何
|
|
37
|
-
* 路径可以关闭**(不是「难关」,是类型层封死)。本批把这两键的类型放宽成 `boolean` 并给出
|
|
38
|
-
* 产出 `false` 的路径。
|
|
39
|
-
*
|
|
40
|
-
* ══ 🔴 [4982] 候选①(P0-KPI,0.42.0)—— **第三员漏族:`backgroundTasks`** ════════════════════
|
|
41
|
-
*
|
|
42
|
-
* core **5.12.0 (BREAKING)** 把 `attachments.backgroundTasks` 与 `agentListing`/`skillsListing`
|
|
43
|
-
* **同批**翻成 DEFAULT-ON(core `types.d.ts` 逐字:「Post-compact background-task restatement —
|
|
44
|
-
* DEFAULT ON since 5.12.0 (**boolean, not `true`**: explicit `false` is the opt-out; **same contract
|
|
45
|
-
* as the listing family below**)」)。三兄弟同批翻转,本模块**跟修了后两个、漏了第一个** ——
|
|
46
|
-
* `backgroundTasks` 一直留在 ① 族(off = 删键,永不发 false)。
|
|
47
|
-
* 后果是这个旋钮上最坏的一种失效:`SEMA_ATTACHMENTS=off`(文件自称「真·全关」)对这一位与
|
|
48
|
-
* **什么都不配**逐字节同效(两条路都不发这个键 = 都是「开」),**且零报错** —— 用户以为关掉了,
|
|
49
|
-
* 附件照进上下文,没有任何一处会说出来。与 ② 族当初那个洞是同一个病形的第三例。
|
|
50
|
-
*
|
|
51
|
-
* ── 修法:把「能不能显式打开」与「能不能显式关掉」拆成**两条正交的轴** ────────────────────────
|
|
52
|
-
* `backgroundTasks` 同时住两族,这不是分类含糊,这**就是**它的契约:
|
|
53
|
-
* · **轴 A(可显式开)** = `full` 会全开的那 7 员 —— `backgroundTasks` 在内,**membership 不动**;
|
|
54
|
-
* · **轴 B(可显式关)** = core DEFAULT-ON 的 3 员 —— `backgroundTasks` 新入。
|
|
55
|
-
* 只把它整个搬进 ② 族(= 从轴 A 里删掉)是**错的修法**,两条理由都是硬的:
|
|
56
|
-
* ① `full` / `default` / `+backgroundTasks` 三条既有路会当场少发一个 `backgroundTasks: true`
|
|
57
|
-
* —— 对 core ≥5.12.0 行为等价(默认就是开),但对**更老引擎**那是真的从「开」变成「关」,
|
|
58
|
-
* 而本模块手里没有 server 版本这个量(见下面 §能力边界),没资格替用户做那个降级;
|
|
59
|
-
* ② 空 env 的默认产出 `{backgroundTasks: true, toolsDelta: true}` 是 [487]② CC-parity 那一对的
|
|
60
|
-
* 字面承诺,删掉它就是把「默认逐字节不变」这条本模块的立身纪律自己破了。
|
|
61
|
-
* ⇒ 本批**只加一条出路**(`off` 与 `-backgroundTasks` 产出 `false`),其余取值逐字节不变。
|
|
62
|
-
*
|
|
63
|
-
* ── env 面(`SEMA_ATTACHMENTS`)的取值语法,以及为什么选这一种 ────────────────────────────────
|
|
64
|
-
* 目标是「**默认行为逐字节不变** + 有路可关 DEFAULT-ON 两键」,所以选了**在既有值上加逗号 token
|
|
65
|
-
* 列表**,而不是新开一个 env:
|
|
66
|
-
* · 新开一个 env(如 `SEMA_ATTACHMENTS_OFF`)会让「附件面怎么配」有两个入口,而两个入口之间的
|
|
67
|
-
* 优先级又要再定义一次 —— 这类第二真源正是本仓反复登记的病族;
|
|
68
|
-
* · 逗号 token 列表对**存量取值零影响**:`unset` / `full` / `all` / off 拼法四种老写法解析结果
|
|
69
|
-
* 逐字节不变(FIX7 段 ⑤ 有正面钉),新语法只在用户真写了逗号 token 时才被触发。
|
|
70
|
-
* 语法(逗号分隔,大小写不敏感,允许空白):
|
|
71
|
-
* · `off|0|false|no|none`(整值) ⇒ **真·全关**:只可显式开的那一族一个不发(它们的 off 就是
|
|
72
|
-
* 删键)+ DEFAULT-ON **三键**(agentListing / skillsListing /
|
|
73
|
-
* backgroundTasks)发 `false`。
|
|
74
|
-
* 🔴 对抗复审 [medium](2026-08-07)判的真病:这一支此前直接 `return undefined`(不发字段),
|
|
75
|
-
* 而「不发字段」对 DEFAULT-ON 两键的含义**恰恰是保持开着** —— 一个叫 off 的总开关关不掉十件里
|
|
76
|
-
* 的两件,且用户没有任何办法察觉。旧行为在 <1.254 的 server 上与新行为**逐字节等价**(那些
|
|
77
|
-
* server 静默丢 false),在 ≥1.254 上新行为才第一次兑现这个旋钮的字面承诺。
|
|
78
|
-
* ⚠️ **能力边界说清楚**(对抗复审二轮):本模块是**纯 env→spec 投影**,手里没有 server
|
|
79
|
-
* 版本/capability 这个量,所以对 <1.254 的部署它兑现不了「全关」—— 那两键仍会默认开着,而
|
|
80
|
-
* 壳侧无从察觉。补这个洞的正位在**请求装配层**(按已探到的 capability 判,与 limitsWire 的
|
|
81
|
-
* 两道地板同族),已记进 docs/refactor/README.md 的宿主/上游工单表。本层只保证两件:
|
|
82
|
-
* ① 新行为在任何 server 代际上都**不比旧行为差**(旧行为在所有代际上都关不掉那两键);
|
|
83
|
-
* ② 不在自己的能力之外说大话 —— 所以上面那句「真·全关」的适用范围就是 ≥1.254。
|
|
84
|
-
* · `full` / `all` ⇒ literal-true 族 7 员全开(**不含** DEFAULT-ON 两键 ——
|
|
85
|
-
* 不发 = 保持 core 默认开,壳不替 core 做那个决定)
|
|
86
|
-
* · `default` ⇒ CC-parity 那一对(显式写出「默认」这个意思)
|
|
87
|
-
* · `<key>` / `+<key>` ⇒ 单点打开一个「可显式开」族成员(轴 A 的 7 员)
|
|
88
|
-
* · `-agentListing` / `-skillsListing` / `-backgroundTasks` ⇒ 产出 **`false`**(DEFAULT-ON 三键
|
|
89
|
-
* 唯一的关法;`-backgroundTasks` 是 [4982] 候选① 补的那条)
|
|
90
|
-
* · `todoReminderMode=baseline|off` ⇒ 取值型键
|
|
91
|
-
* 🔴 未登记 token / 对 literal-true 族用 `-` / todoReminderMode 取闭集外的值 ⇒ **fail-loud 抛错**。
|
|
92
|
-
* 静默忽略是这条链上最坏的失效形:用户以为自己关掉了 agentListing,而请求照发、附件照进上下文,
|
|
93
|
-
* 并且没有任何一处会说出来。
|
|
94
|
-
*
|
|
95
|
-
* PURE — no env/file IO of its own (callers pass `env`), the verified wireCaps pattern. The CALLER
|
|
96
|
-
* (seamQuery / the print-mode ask) gates the read to LIVE mode so the mock request shape never
|
|
97
|
-
* changes.
|
|
98
|
-
*/
|
|
99
1
|
import { hostEnv } from './hostEnv.js';
|
|
100
2
|
import { envFlagOff } from './envFlag.js';
|
|
101
|
-
/** The env key the shell reads. 取值语法见文件头注 §env。 */
|
|
102
3
|
export const ATTACHMENTS_ENV = 'SEMA_ATTACHMENTS';
|
|
103
|
-
/** 键面台账(机读位):加键必须同批登记,否则下方 `Covers` 双向钉编译红。 */
|
|
104
4
|
export const ATTACHMENTS_SPEC_KEYS = [
|
|
105
5
|
'todoReminder',
|
|
106
6
|
'todoReminderMode',
|
|
@@ -113,19 +13,7 @@ export const ATTACHMENTS_SPEC_KEYS = [
|
|
|
113
13
|
'agentListing',
|
|
114
14
|
'skillsListing',
|
|
115
15
|
];
|
|
116
|
-
/**
|
|
117
|
-
* **轴 B —— 可显式关**(core DEFAULT-ON,`false` 才是关;`-<key>` 与总开关 `off` 的作用面)。
|
|
118
|
-
* 🔴 [4982] 候选①(0.42.0):`backgroundTasks` 补入 —— core 5.12.0 与另两员**同批**翻 DEFAULT-ON,
|
|
119
|
-
* 本模块当时只跟修了两员。这张表**不是** ① 族的补集(`backgroundTasks` 两族兼属,见 AttachmentsSpec
|
|
120
|
-
* 上的键注与文件头注的「两条正交的轴」段)。
|
|
121
|
-
*/
|
|
122
16
|
export const ATTACHMENTS_DEFAULT_ON_KEYS = ['agentListing', 'skillsListing', 'backgroundTasks'];
|
|
123
|
-
/**
|
|
124
|
-
* **轴 A —— 可显式开**:`full` 会全开的那 7 员(`todoReminderMode` 是取值型,不搭 full 的车)。
|
|
125
|
-
* 🔴 `backgroundTasks` **留在本表**([4982] 候选① 的取舍,理由见文件头注):把它从这里删掉会让
|
|
126
|
-
* `full`/`default`/`+backgroundTasks` 三条既有路少发一个 `true`,对 core <5.12.0 是真的从
|
|
127
|
-
* 「开」变成「关」,而本模块手里没有 server 版本这个量。
|
|
128
|
-
*/
|
|
129
17
|
const OPT_IN_KEYS = [
|
|
130
18
|
'todoReminder',
|
|
131
19
|
'changedFiles',
|
|
@@ -135,47 +23,25 @@ const OPT_IN_KEYS = [
|
|
|
135
23
|
'toolsDelta',
|
|
136
24
|
'mcpInstructions',
|
|
137
25
|
];
|
|
138
|
-
/**
|
|
139
|
-
* **只可显式关、不可显式开**的那两员(轴 B ∖ 轴 A)。`+agentListing` 这类写法的 fail-loud 判据
|
|
140
|
-
* 锚在**本表**而不是整个轴 B —— 锚轴 B 会把 `+backgroundTasks` / `full` 一起误拒([4982] 候选①
|
|
141
|
-
* 修复批的判别力所在:两条轴各判各的,不许拿一条去代另一条)。
|
|
142
|
-
*/
|
|
143
26
|
const DEFAULT_ON_ONLY_KEYS = ['agentListing', 'skillsListing'];
|
|
144
|
-
/** CC-parity 默认对(TOC live 路径,[487]②)。 */
|
|
145
27
|
const DEFAULT_PAIR = ['backgroundTasks', 'toolsDelta'];
|
|
146
28
|
const _attachmentsKeyPins = [true, true, true, true, true, true];
|
|
147
29
|
void _attachmentsKeyPins;
|
|
148
30
|
const TODO_REMINDER_MODES = ['baseline', 'off'];
|
|
149
|
-
/** fail-loud 的统一措辞:说清**哪个 token 坏了**、以及合法形是什么(判词要指得出下一步)。 */
|
|
150
31
|
function refuse(token, why) {
|
|
151
32
|
throw new Error(`${ATTACHMENTS_ENV}: refusing token "${token}" — ${why}. ` +
|
|
152
33
|
`Legal tokens: off | full | all | default | <literalTrueKey> | +<literalTrueKey> | ` +
|
|
153
34
|
`-agentListing | -skillsListing | todoReminderMode=baseline|off`);
|
|
154
35
|
}
|
|
155
|
-
/**
|
|
156
|
-
* ENV source → the `TaskRequest.attachments` stamp.
|
|
157
|
-
*
|
|
158
|
-
* 恒返回一个对象:literal-true 族永远只出现 `true`(core 契约:off = 删键),而
|
|
159
|
-
* `agentListing`/`skillsListing` 只在被显式关掉时出现,值恒为 `false`(它们的 core 默认是开,
|
|
160
|
-
* 不发 = 不动那个默认)。返回型保留 `| undefined` 是给未来留位,今天没有分支产出它。
|
|
161
|
-
*
|
|
162
|
-
* @throws 未登记 token / 对 literal-true 族用 `-` / todoReminderMode 取闭集外的值(fail-loud:
|
|
163
|
-
* 静默忽略会让「我明明关了」与「它其实还开着」同时为真)。
|
|
164
|
-
*/
|
|
165
36
|
export function attachmentsForRequest(env = hostEnv()) {
|
|
166
37
|
const raw = (env[ATTACHMENTS_ENV] ?? '').trim().toLowerCase();
|
|
167
|
-
// 总开关 off = 真·全关(见文件头注 §env 的 复审 [medium] 登记),不是「不发字段」。
|
|
168
38
|
if (envFlagOff(raw))
|
|
169
39
|
return allDefaultOnOff();
|
|
170
40
|
const tokens = raw.split(',').map(t => t.trim()).filter(t => t.length > 0);
|
|
171
|
-
// 存量取值零变化:空 / `full` / `all` 单 token 走与本批之前逐字节相同的两条老路。
|
|
172
41
|
if (tokens.length === 0)
|
|
173
42
|
return { backgroundTasks: true, toolsDelta: true };
|
|
174
43
|
if (tokens.length === 1 && (tokens[0] === 'full' || tokens[0] === 'all'))
|
|
175
44
|
return allLiteralTrue();
|
|
176
|
-
// 单 token 且不是任何已登记词 ⇒ 维持历史语义(「unset/anything else ⇒ 默认对」),不 fail-loud:
|
|
177
|
-
// 那是本模块自建起就写在头注里的契约,收紧它属于行为面改动,不在本批。多 token 形是**本批新增
|
|
178
|
-
// 的语法**,没有存量语义可破,所以它逐 token fail-loud。
|
|
179
45
|
if (tokens.length === 1 && !isKnownToken(tokens[0])) {
|
|
180
46
|
return { backgroundTasks: true, toolsDelta: true };
|
|
181
47
|
}
|
|
@@ -215,9 +81,6 @@ export function attachmentsForRequest(env = hostEnv()) {
|
|
|
215
81
|
const key = canonicalKey(lhs.startsWith('+') ? lhs.slice(1) : lhs);
|
|
216
82
|
if (key === undefined)
|
|
217
83
|
refuse(token, 'unknown attachments key');
|
|
218
|
-
// 🔴 判据锚 `DEFAULT_ON_ONLY_KEYS`(轴 B ∖ 轴 A),**不是**整个轴 B:0.42.0 起
|
|
219
|
-
// `backgroundTasks` 两族兼属,拿轴 B 判会把 `+backgroundTasks` 一起误拒(而它在
|
|
220
|
-
// `full` 里本来就开得出来,拒它等于同一件事有两个答案)。
|
|
221
84
|
if (isDefaultOnOnlyKey(key)) {
|
|
222
85
|
refuse(token, `"${key}" is core DEFAULT-ON — turning it "on" is a no-op that would send a redundant true; ` +
|
|
223
86
|
`use "-${key}" to turn it OFF`);
|
|
@@ -228,8 +91,6 @@ export function attachmentsForRequest(env = hostEnv()) {
|
|
|
228
91
|
}
|
|
229
92
|
return spec;
|
|
230
93
|
}
|
|
231
|
-
/** 总开关 off 的产出:只可显式开的那族一个不发(删键即关)+ DEFAULT-ON **三键**显式 `false`
|
|
232
|
-
* ([4982] 候选①:`backgroundTasks` 从 0.42.0 起真的在这条路上被关掉)。 */
|
|
233
94
|
function allDefaultOnOff() {
|
|
234
95
|
const out = {};
|
|
235
96
|
for (const k of ATTACHMENTS_DEFAULT_ON_KEYS)
|
|
@@ -242,24 +103,19 @@ function allLiteralTrue() {
|
|
|
242
103
|
out[k] = true;
|
|
243
104
|
return out;
|
|
244
105
|
}
|
|
245
|
-
/** `k=v` 的一次拆分(值里再有 `=` 一律归右侧,交给取值校验去拒)。 */
|
|
246
106
|
function splitAssign(token) {
|
|
247
107
|
const i = token.indexOf('=');
|
|
248
108
|
return i < 0 ? [token, undefined] : [token.slice(0, i).trim(), token.slice(i + 1).trim()];
|
|
249
109
|
}
|
|
250
|
-
/** 大小写不敏感的键名归一(env 值整体已 lowercase,而键名是 camelCase)。 */
|
|
251
110
|
function canonicalKey(lower) {
|
|
252
111
|
return ATTACHMENTS_SPEC_KEYS.find(k => k.toLowerCase() === lower);
|
|
253
112
|
}
|
|
254
|
-
/** 轴 B:可显式关(`-<key>` 的合法作用面)。 */
|
|
255
113
|
function isDefaultOnKey(k) {
|
|
256
114
|
return ATTACHMENTS_DEFAULT_ON_KEYS.includes(k);
|
|
257
115
|
}
|
|
258
|
-
/** 轴 B ∖ 轴 A:只可关不可开(`+<key>` 的 fail-loud 作用面)。 */
|
|
259
116
|
function isDefaultOnOnlyKey(k) {
|
|
260
117
|
return DEFAULT_ON_ONLY_KEYS.includes(k);
|
|
261
118
|
}
|
|
262
|
-
/** 单 token 形的历史回落判据(见 `attachmentsForRequest` 里那段注释)。 */
|
|
263
119
|
function isKnownToken(token) {
|
|
264
120
|
if (token === 'full' || token === 'all' || token === 'default')
|
|
265
121
|
return true;
|