@sema-agent/client-core 0.93.1 → 0.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +30 -19
  3. package/dist/adapt/arms.js +8 -5
  4. package/dist/adapter/downstream/terminalToSdkResult.js +2 -3
  5. package/dist/agentSession/engineSessionBackgroundStop.js +2 -1
  6. package/dist/agentsWireCaps.d.ts +15 -0
  7. package/dist/agentsWireCaps.js +111 -1
  8. package/dist/approvalReachWire.d.ts +18 -0
  9. package/dist/approvalReachWire.js +58 -0
  10. package/dist/approvalsStreamLiveCapability.js +16 -11
  11. package/dist/callerCwdCapability.d.ts +16 -0
  12. package/dist/callerCwdCapability.js +47 -0
  13. package/dist/controlRouter.js +3 -10
  14. package/dist/coreValuePorts.d.ts +64 -1
  15. package/dist/coreValuePorts.js +30 -0
  16. package/dist/detachWire.d.ts +1 -4
  17. package/dist/detachWire.js +1 -1
  18. package/dist/deviceExecutorManagementCapability.js +39 -34
  19. package/dist/deviceFlowPolling.d.ts +5 -0
  20. package/dist/deviceFlowPolling.js +28 -0
  21. package/dist/displayUntrusted.js +652 -21
  22. package/dist/engineErrorCodes.d.ts +5 -1
  23. package/dist/engineErrorCodes.js +9 -12
  24. package/dist/engineNoticeCodes.d.ts +22 -2
  25. package/dist/engineNoticeCodes.js +73 -6
  26. package/dist/engineRefusedToolName.d.ts +1 -0
  27. package/dist/engineRefusedToolName.js +8 -0
  28. package/dist/executionLaneCapability.js +14 -9
  29. package/dist/fileHistoryCaptureCapability.js +14 -9
  30. package/dist/fileHistoryLegNotice.d.ts +11 -0
  31. package/dist/fileHistoryLegNotice.js +50 -13
  32. package/dist/fleet/fleetLedger.js +5 -0
  33. package/dist/gateOutcome.d.ts +2 -1
  34. package/dist/gateOutcome.js +3 -0
  35. package/dist/gateVocabulary.js +1 -1
  36. package/dist/generated/engineAskFaceTables.d.ts +3 -0
  37. package/dist/generated/engineAskFaceTables.js +12 -0
  38. package/dist/generated/engineFactTables.d.ts +4 -2
  39. package/dist/generated/engineFactTables.js +13 -0
  40. package/dist/generated/engineNoticeTables.d.ts +5 -0
  41. package/dist/generated/engineNoticeTables.js +7 -0
  42. package/dist/generated/sdkFactTables.d.ts +3 -0
  43. package/dist/generated/sdkFactTables.js +17 -0
  44. package/dist/generated/settingsSchemaTables.d.ts +3 -0
  45. package/dist/generated/settingsSchemaTables.js +3 -0
  46. package/dist/headlessPermissionModeWire.d.ts +2 -2
  47. package/dist/headlessPermissionModeWire.js +11 -21
  48. package/dist/hitl/approvalHolds.d.ts +36 -0
  49. package/dist/hitl/approvalHolds.js +89 -0
  50. package/dist/hitl/approvalOutcomeNote.js +2 -1
  51. package/dist/hitl/approvalResolution.js +9 -1
  52. package/dist/hitl/approvalsFeed.js +5 -0
  53. package/dist/hitl/askGateWire.js +3 -0
  54. package/dist/hitl/automaticAnswerVerdict.d.ts +8 -2
  55. package/dist/hitl/automaticAnswerVerdict.js +69 -21
  56. package/dist/hitl/decisionRefusal.d.ts +19 -0
  57. package/dist/hitl/decisionRefusal.js +63 -0
  58. package/dist/hitl/frameRouter.d.ts +10 -0
  59. package/dist/hitl/frameRouter.js +59 -3
  60. package/dist/hitl/gateLedger.d.ts +3 -0
  61. package/dist/hitl/gateLedger.js +17 -0
  62. package/dist/hitl/hitlBridge.d.ts +2 -2
  63. package/dist/hitl/hitlBridge.js +8 -10
  64. package/dist/hitl/hitlHostSurface.d.ts +3 -0
  65. package/dist/hitl/hitlHostSurface.js +14 -4
  66. package/dist/hitl/localAllowRule.js +2 -1
  67. package/dist/hitl/noAllowCause.d.ts +9 -0
  68. package/dist/hitl/noAllowCause.js +26 -0
  69. package/dist/hitl/parkResolver.js +6 -3
  70. package/dist/hitl/parkRowBirthWait.js +2 -1
  71. package/dist/hitl/persistedRulesWire.d.ts +6 -1
  72. package/dist/hitl/persistedRulesWire.js +12 -4
  73. package/dist/hitl/planReviewWire.d.ts +0 -1
  74. package/dist/hitl/planReviewWire.js +30 -9
  75. package/dist/hitl/sessionPolicyDeliverable.d.ts +1 -1
  76. package/dist/hitl/sessionPolicyDeliverable.js +3 -8
  77. package/dist/hitl/sessionPolicyWire.js +1 -1
  78. package/dist/hitl/toolApprovalWire.d.ts +27 -2
  79. package/dist/hitl/toolApprovalWire.js +258 -23
  80. package/dist/humanTurnRead.d.ts +15 -1
  81. package/dist/humanTurnRead.js +28 -2
  82. package/dist/index.d.ts +18 -6
  83. package/dist/index.js +14 -5
  84. package/dist/limitsWire.d.ts +0 -1
  85. package/dist/limitsWire.js +2 -10
  86. package/dist/liveModelCatalog.d.ts +14 -0
  87. package/dist/liveModelCatalog.js +61 -0
  88. package/dist/mcpProbeCapability.js +14 -9
  89. package/dist/mcpReconnect.js +13 -8
  90. package/dist/memoryComplianceCapability.js +15 -10
  91. package/dist/memoryOriginCapability.js +15 -10
  92. package/dist/modelIdentityResolvability.d.ts +4 -2
  93. package/dist/modelIdentityResolvability.js +31 -4
  94. package/dist/outputStyleSeatCapability.d.ts +16 -0
  95. package/dist/outputStyleSeatCapability.js +47 -0
  96. package/dist/ownKey.d.ts +1 -0
  97. package/dist/ownKey.js +10 -0
  98. package/dist/peerLaneCapability.js +16 -11
  99. package/dist/permissionRuleIssue.js +1 -1
  100. package/dist/permissionRulesWriteCapability.js +16 -11
  101. package/dist/permissionsAllowGrantCapability.d.ts +2 -0
  102. package/dist/permissionsAllowGrantCapability.js +38 -16
  103. package/dist/permissionsDeclaration.d.ts +10 -1
  104. package/dist/permissionsDeclaration.js +97 -15
  105. package/dist/protocolSegment.d.ts +1 -0
  106. package/dist/protocolSegment.js +13 -1
  107. package/dist/request/taskRequest.d.ts +11 -3
  108. package/dist/request/taskRequest.js +13 -1
  109. package/dist/resultFrameKeys.d.ts +4 -0
  110. package/dist/resultFrameKeys.js +13 -0
  111. package/dist/resumeRefusalCopy.js +6 -16
  112. package/dist/retryStatus.js +6 -4
  113. package/dist/rewindArchiveCapability.js +13 -8
  114. package/dist/{hitl/rosterMountedNames.d.ts → rosterMountedNames.d.ts} +1 -1
  115. package/dist/runCancelContext.js +2 -1
  116. package/dist/sealedKeyCapability.js +19 -14
  117. package/dist/seatContract.d.ts +33 -5
  118. package/dist/seatContract.js +143 -2
  119. package/dist/sessionPolicyCapability.js +15 -10
  120. package/dist/sessionReadRedactionCapability.d.ts +16 -0
  121. package/dist/sessionReadRedactionCapability.js +47 -0
  122. package/dist/sessionSyncFileHistoryCapability.js +14 -9
  123. package/dist/skillToolListsCapability.js +14 -9
  124. package/dist/sqlEngineCapability.js +18 -13
  125. package/dist/steerPriorityCapability.js +21 -16
  126. package/dist/subagent/agentStateDetail.d.ts +1 -0
  127. package/dist/subagent/agentStateDetail.js +41 -0
  128. package/dist/subagent/engineCompactWire.d.ts +15 -0
  129. package/dist/subagent/engineCompactWire.js +75 -13
  130. package/dist/supportFloor.js +1 -1
  131. package/dist/taskRequestWords.d.ts +2 -4
  132. package/dist/taskRequestWords.js +3 -2
  133. package/dist/types/engineState.d.ts +1 -1
  134. package/dist/userAttachmentEnvelope.d.ts +22 -1
  135. package/dist/userAttachmentEnvelope.js +90 -2
  136. package/dist/userInvokedSkillsCapability.js +14 -9
  137. package/dist/webSearchBackendCapability.js +21 -16
  138. package/dist/wireErrorTriage.d.ts +11 -0
  139. package/dist/wireErrorTriage.js +35 -0
  140. package/dist/wireFailureShape.d.ts +6 -0
  141. package/dist/wireFailureShape.js +30 -3
  142. package/dist/wireRefusalCopy.d.ts +6 -1
  143. package/dist/wireRefusalCopy.js +22 -8
  144. package/dist/wiringInstructionsAttribution.d.ts +10 -0
  145. package/dist/wiringInstructionsAttribution.js +67 -0
  146. package/dist/workflowClient.js +22 -1
  147. package/dist/workflowsJournalCapability.js +14 -9
  148. package/dist/writeProtectionCapability.js +28 -23
  149. package/docs/INTEGRATION-CLIENTS.md +719 -45
  150. package/package.json +5 -5
  151. package/dist/askSurvivesStandingAnswer.d.ts +0 -13
  152. package/dist/askSurvivesStandingAnswer.js +0 -53
  153. package/dist/hitl/askSurvivesPosture.d.ts +0 -20
  154. package/dist/hitl/askSurvivesPosture.js +0 -48
  155. /package/dist/{hitl/rosterMountedNames.js → rosterMountedNames.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -57,6 +57,8 @@ export * from './skillToolListsCapability.js';
57
57
  export * from './steerPriorityCapability.js';
58
58
  export * from './permissionModesCapability.js';
59
59
  export * from './approvalDecidedByCapability.js';
60
+ export * from './sessionReadRedactionCapability.js';
61
+ export * from './outputStyleSeatCapability.js';
60
62
  export * from './mcpProbeWire.js';
61
63
  export * from './effectiveFacts.js';
62
64
  export * from './gateOutcome.js';
@@ -86,7 +88,7 @@ export * from './engineWireSdk.js';
86
88
  export * from './classifierVerdictWire.js';
87
89
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
88
90
  export { findSystemReminderOpenTag, type SystemReminderOpenTagSpan } from './systemReminderTag.js';
89
- export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
91
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
90
92
  export type { DelegationCapDisposition, ModelFallbackReason, OperatorGateRefusal, RunDeathVerdictCode, } from './engineErrorCodes.js';
91
93
  export * from './agentsWireCaps.js';
92
94
  export * from './attachmentsWireCaps.js';
@@ -105,6 +107,9 @@ export * from './rewindArchiveCapability.js';
105
107
  export * from './fileHistoryCaptureCapability.js';
106
108
  export { FILE_HISTORY_LEG_VERDICTS, fileHistoryLegNoticeVerdict, fileHistoryLegNoticeSentence, fileHistoryDeclarationOfBody, createFileHistoryDeclarationLedger, } from './fileHistoryLegNotice.js';
107
109
  export type { FileHistoryDeclarationFact, FileHistoryLegNoticeVerdict, FileHistoryLegNoticeInput, FileHistoryDeclarationLedger } from './fileHistoryLegNotice.js';
110
+ export * from './callerCwdCapability.js';
111
+ export { legCwdOfBody, engineSelectedInstructionsFile } from './wiringInstructionsAttribution.js';
112
+ export type { InstructionsAttributionInput } from './wiringInstructionsAttribution.js';
108
113
  export * from './sealedKeyCapability.js';
109
114
  export * from './storePostureCapability.js';
110
115
  export * from './centerWiringCapability.js';
@@ -124,13 +129,16 @@ export * from './adapter/downstream/turnUsageToModelUsage.js';
124
129
  export * from './adapter/downstream/eventToSdkMessage.js';
125
130
  export type { WiringManifestView, WiringManifestSections, WiringManifestFleetView } from './adapter/downstream/wiringManifestView.js';
126
131
  export * from './adapter/downstream/terminalToSdkResult.js';
132
+ export { resultErrorCodeOf, resultSelectedModelOf, resultSalvagedResultOf, resultParkFailedReasonOf } from './resultFrameKeys.js';
127
133
  export * from './adapter/runStream.js';
128
134
  export * from './adapter/activeRunSelfHeal.js';
129
135
  export * from './request/taskRequest.js';
130
136
  export { disableSkillsDeclaration, disableSkillsDeclarationSettled } from './disableSkillsWire.js';
137
+ export { approvalReachDeclaration, approvalReachDeclarationSettled } from './approvalReachWire.js';
138
+ export type { ApprovalReachDeclaration, ApprovalReachWithheldCause, ApprovalReachWord } from './approvalReachWire.js';
131
139
  export type { DisableSkillsDeclaration } from './disableSkillsWire.js';
132
- export { PERMISSIONS_KEPT_REASONS, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
133
- export type { PermissionsDeclaration, PermissionsDeclarationBuckets, PermissionsDeclarationInput, PermissionsDeclarationReport, PermissionsKeptReason, PermissionsKeptRule, PermissionsRewrittenRule, PermissionsUncheckedRule, PermissionsUnreachableRule, WireRuleOrigin, WireRuleOrigins, } from './permissionsDeclaration.js';
140
+ export { PERMISSIONS_KEPT_REASONS, WIRE_RULE_TRUST_ORDER, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
141
+ export type { PermissionsClientOwnedStatement, PermissionsDeclaration, PermissionsDeclarationBuckets, PermissionsDeclarationInput, PermissionsDeclarationReport, PermissionsKeptReason, PermissionsKeptRule, PermissionsRewrittenRule, PermissionsUncheckedRule, PermissionsUnreachableRule, WireRuleOrigin, WireRuleOrigins, } from './permissionsDeclaration.js';
134
142
  export * from './clientSlice.js';
135
143
  export * from './host.js';
136
144
  export { abortableSleep } from './abortableSleep.js';
@@ -158,6 +166,7 @@ export type { RetainWithoutWakeInput, RetainWithoutWakeVerdict, SubagentOwnerCon
158
166
  export * from './subagent/engineTaskHandleWire.js';
159
167
  export * from './subagent/engineCompactWire.js';
160
168
  export * from './subagent/engineSubagentTail.js';
169
+ export { subagentStateDetail } from './subagent/agentStateDetail.js';
161
170
  export { __resetBgOwnerAbsenceForTests, } from './subagent/subagentOwnerAbsence.js';
162
171
  export * from './engineSessionParam.js';
163
172
  export { engineWireTarget, engineWireTargetFor, installEngineWireTarget, installEngineWireTargetFor, } from './engineWireTarget.js';
@@ -171,6 +180,8 @@ export type { ToolHistoryMismatchRowKey } from './toolHistoryMismatch.js';
171
180
  export { toolHistoryBadTurnSentence } from './toolHistoryBadTurn.js';
172
181
  export { classifyRegistryConflict, isScopeGoneError } from './registryConflict.js';
173
182
  export type { RegistryConflictClass } from './registryConflict.js';
183
+ export { deviceFlowPollingPlan } from './deviceFlowPolling.js';
184
+ export type { DeviceFlowPollingPlan } from './deviceFlowPolling.js';
174
185
  export { createPromptDeliveryLedger, promptKnownUndelivered, withoutUndeliveredPrompts } from './promptDelivery.js';
175
186
  export type { PromptDeliveryLedger, PromptDeliveryRecord } from './promptDelivery.js';
176
187
  export { mintUserAttachmentEnvelope } from './userAttachmentEnvelope.js';
@@ -196,7 +207,6 @@ export { hookMatcherVerdict } from './hookMatcherVerdict.js';
196
207
  export type { HookMatcherVerdict, HookMatcherUnjudgedReason } from './hookMatcherVerdict.js';
197
208
  export { ASK_EVIDENCE_ABSENCE_VALUES, SYSTEM_INJECTION_PRIORITIES } from './engineClosedSets.js';
198
209
  export { READ_DENY_BUILTIN_TIERS, READ_DENY_DEFAULT_TIERS, parseReadDenyBuiltinTiers, type ReadDenyBuiltinTiersParse } from './readDenyTiers.js';
199
- export { MODE_ARBITRATION, askSurvivesStandingAnswer, type StandingAnswerVerdict } from './askSurvivesStandingAnswer.js';
200
210
  export * from './liveInitToolFace.js';
201
211
  export * from './printInitToolFace.js';
202
212
  export * from './model/providerPresets.js';
@@ -228,8 +238,10 @@ export * from './hitl/approvalsFeed.js';
228
238
  export * from './hitl/livePendingAsk.js';
229
239
  export { replayedApprovalDisposition } from './hitl/replayedApproval.js';
230
240
  export type { ReplayedApprovalDisposition, ReplayPendingBasis } from './hitl/replayedApproval.js';
231
- export * from './hitl/askSurvivesPosture.js';
232
- export { automaticAnswerVerdict, type AutomaticAnswerLane, type AutomaticAnswerFacts, type AutomaticAnswerRoad, type AutomaticAnswerUnknownWhy, type AutomaticAnswerVerdict, } from './hitl/automaticAnswerVerdict.js';
241
+ export { MODE_ARBITRATION, automaticAnswerVerdict, mandatedApprovalDetailOf, permissionRequestHookScope, type AutomaticAnswerLane, type AutomaticAnswerAskFace, type AutomaticAnswerFacts, type AutomaticAnswerRoad, type AutomaticAnswerUnknownWhy, type AutomaticAnswerVerdict, type PermissionRequestHookScope, } from './hitl/automaticAnswerVerdict.js';
242
+ export { classifyDecisionRefusal, liveAskPendingReading, decisionRefusalClosesOut, undeliverableDecisionContent, type DecisionRefusalStanding, type DecisionRefusalClassified, type LiveAskPendingReading, type UndeliverableDecisionEnd, type UndeliverableDecisionFacts, } from './hitl/decisionRefusal.js';
243
+ export { noAllowCauseOf, type NoAllowCause, type RuleLadderNoAllowFacts } from './hitl/noAllowCause.js';
244
+ export { policyDenyReason, type PolicyDenyLane, type PolicyDenyReasonFacts } from './hitl/frameRouter.js';
233
245
  export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, type ApprovalAllowRuleShadow, type ApprovalAllowRuleShadowMember, type AllowRuleShadowedWireMember, } from './hitl/allowRuleShadow.js';
234
246
  export { projectCrashConverged } from './hitl/crashConverged.js';
235
247
  export type { ApprovalsListEnvelope, CrashConvergedOrphanState, CrashConvergedProjection, CrashConvergedRow } from './hitl/crashConverged.js';
package/dist/index.js CHANGED
@@ -51,6 +51,8 @@ export * from './skillToolListsCapability.js';
51
51
  export * from './steerPriorityCapability.js';
52
52
  export * from './permissionModesCapability.js';
53
53
  export * from './approvalDecidedByCapability.js';
54
+ export * from './sessionReadRedactionCapability.js';
55
+ export * from './outputStyleSeatCapability.js';
54
56
  export * from './mcpProbeWire.js';
55
57
  export * from './effectiveFacts.js';
56
58
  export * from './gateOutcome.js';
@@ -77,7 +79,7 @@ export * from './engineWireSdk.js';
77
79
  export * from './classifierVerdictWire.js';
78
80
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
79
81
  export { findSystemReminderOpenTag } from './systemReminderTag.js';
80
- export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
82
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
81
83
  export * from './agentsWireCaps.js';
82
84
  export * from './attachmentsWireCaps.js';
83
85
  export * from './clientContextWireCaps.js';
@@ -94,6 +96,8 @@ export * from './rewindWireCaps.js';
94
96
  export * from './rewindArchiveCapability.js';
95
97
  export * from './fileHistoryCaptureCapability.js';
96
98
  export { FILE_HISTORY_LEG_VERDICTS, fileHistoryLegNoticeVerdict, fileHistoryLegNoticeSentence, fileHistoryDeclarationOfBody, createFileHistoryDeclarationLedger, } from './fileHistoryLegNotice.js';
99
+ export * from './callerCwdCapability.js';
100
+ export { legCwdOfBody, engineSelectedInstructionsFile } from './wiringInstructionsAttribution.js';
97
101
  export * from './sealedKeyCapability.js';
98
102
  export * from './storePostureCapability.js';
99
103
  export * from './centerWiringCapability.js';
@@ -112,11 +116,13 @@ export * from './adapter/types.js';
112
116
  export * from './adapter/downstream/turnUsageToModelUsage.js';
113
117
  export * from './adapter/downstream/eventToSdkMessage.js';
114
118
  export * from './adapter/downstream/terminalToSdkResult.js';
119
+ export { resultErrorCodeOf, resultSelectedModelOf, resultSalvagedResultOf, resultParkFailedReasonOf } from './resultFrameKeys.js';
115
120
  export * from './adapter/runStream.js';
116
121
  export * from './adapter/activeRunSelfHeal.js';
117
122
  export * from './request/taskRequest.js';
118
123
  export { disableSkillsDeclaration, disableSkillsDeclarationSettled } from './disableSkillsWire.js';
119
- export { PERMISSIONS_KEPT_REASONS, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
124
+ export { approvalReachDeclaration, approvalReachDeclarationSettled } from './approvalReachWire.js';
125
+ export { PERMISSIONS_KEPT_REASONS, WIRE_RULE_TRUST_ORDER, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
120
126
  export * from './clientSlice.js';
121
127
  export * from './host.js';
122
128
  export { abortableSleep } from './abortableSleep.js';
@@ -142,6 +148,7 @@ export { __resetRetainWithoutWakeWarningForTests, auditRetainWithoutWake, classi
142
148
  export * from './subagent/engineTaskHandleWire.js';
143
149
  export * from './subagent/engineCompactWire.js';
144
150
  export * from './subagent/engineSubagentTail.js';
151
+ export { subagentStateDetail } from './subagent/agentStateDetail.js';
145
152
  export { __resetBgOwnerAbsenceForTests, } from './subagent/subagentOwnerAbsence.js';
146
153
  export * from './engineSessionParam.js';
147
154
  export { engineWireTarget, engineWireTargetFor, installEngineWireTarget, installEngineWireTargetFor, } from './engineWireTarget.js';
@@ -152,6 +159,7 @@ export * from './corruptSessionCopy.js';
152
159
  export { classifyToolHistoryMismatch, readToolHistoryMismatchKey, resolveToolHistoryRewindTarget } from './toolHistoryMismatch.js';
153
160
  export { toolHistoryBadTurnSentence } from './toolHistoryBadTurn.js';
154
161
  export { classifyRegistryConflict, isScopeGoneError } from './registryConflict.js';
162
+ export { deviceFlowPollingPlan } from './deviceFlowPolling.js';
155
163
  export { createPromptDeliveryLedger, promptKnownUndelivered, withoutUndeliveredPrompts } from './promptDelivery.js';
156
164
  export { mintUserAttachmentEnvelope } from './userAttachmentEnvelope.js';
157
165
  export { encodeHumanTurn, deliveredUuidsOf } from './humanTurn.js';
@@ -171,7 +179,6 @@ export { hookToolAliasesOf, canonicalHookToolName } from './hookToolAliases.js';
171
179
  export { hookMatcherVerdict } from './hookMatcherVerdict.js';
172
180
  export { ASK_EVIDENCE_ABSENCE_VALUES, SYSTEM_INJECTION_PRIORITIES } from './engineClosedSets.js';
173
181
  export { READ_DENY_BUILTIN_TIERS, READ_DENY_DEFAULT_TIERS, parseReadDenyBuiltinTiers } from './readDenyTiers.js';
174
- export { MODE_ARBITRATION, askSurvivesStandingAnswer } from './askSurvivesStandingAnswer.js';
175
182
  export * from './liveInitToolFace.js';
176
183
  export * from './printInitToolFace.js';
177
184
  export * from './model/providerPresets.js';
@@ -200,8 +207,10 @@ export * from './hitl/sessionPolicyDeliverable.js';
200
207
  export * from './hitl/approvalsFeed.js';
201
208
  export * from './hitl/livePendingAsk.js';
202
209
  export { replayedApprovalDisposition } from './hitl/replayedApproval.js';
203
- export * from './hitl/askSurvivesPosture.js';
204
- export { automaticAnswerVerdict, } from './hitl/automaticAnswerVerdict.js';
210
+ export { MODE_ARBITRATION, automaticAnswerVerdict, mandatedApprovalDetailOf, permissionRequestHookScope, } from './hitl/automaticAnswerVerdict.js';
211
+ export { classifyDecisionRefusal, liveAskPendingReading, decisionRefusalClosesOut, undeliverableDecisionContent, } from './hitl/decisionRefusal.js';
212
+ export { noAllowCauseOf } from './hitl/noAllowCause.js';
213
+ export { policyDenyReason } from './hitl/frameRouter.js';
205
214
  export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, } from './hitl/allowRuleShadow.js';
206
215
  export { projectCrashConverged } from './hitl/crashConverged.js';
207
216
  export * from './hitl/crashConvergedNotice.js';
@@ -16,7 +16,6 @@ export interface HeadlessLimits {
16
16
  export type LimitsParseResult = {
17
17
  ok: true;
18
18
  limits?: HeadlessLimits;
19
- flaggedFlags: string[];
20
19
  } | {
21
20
  ok: false;
22
21
  error: string;
@@ -39,14 +39,12 @@ function hasAnyLimit(l) {
39
39
  }
40
40
  export function parseLimitsArgv(argv) {
41
41
  const limits = {};
42
- const flaggedFlags = [];
43
42
  const dl = lastFlagValue(argv, '--deadline');
44
43
  if (dl.present) {
45
44
  const n = dl.raw !== undefined ? parseIntInDomain(dl.raw, DEADLINE_SEC_MIN, DEADLINE_SEC_MAX) : null;
46
45
  if (n === null)
47
46
  return { ok: false, error: DEADLINE_USAGE };
48
47
  limits.maxWalltimeMs = n * SEC_TO_MS;
49
- flaggedFlags.push('--deadline');
50
48
  }
51
49
  const mt = lastFlagValue(argv, '--max-turns');
52
50
  if (mt.present) {
@@ -54,7 +52,6 @@ export function parseLimitsArgv(argv) {
54
52
  if (n === null)
55
53
  return { ok: false, error: MAX_TURNS_USAGE };
56
54
  limits.maxTurns = n;
57
- flaggedFlags.push('--max-turns');
58
55
  }
59
56
  const mk = lastFlagValue(argv, '--max-tokens');
60
57
  if (mk.present) {
@@ -62,13 +59,8 @@ export function parseLimitsArgv(argv) {
62
59
  if (n === null)
63
60
  return { ok: false, error: MAX_TOKENS_USAGE };
64
61
  limits.maxOutputTokens = n;
65
- flaggedFlags.push('--max-tokens');
66
62
  }
67
- return {
68
- ok: true,
69
- ...(flaggedFlags.length > 0 ? { limits } : {}),
70
- flaggedFlags,
71
- };
63
+ return { ok: true, ...(hasAnyLimit(limits) ? { limits } : {}) };
72
64
  }
73
65
  export function headlessLimitsFromEnv(env = hostEnv()) {
74
66
  const out = {};
@@ -109,5 +101,5 @@ export function limitsForPrint(argv, env = hostEnv()) {
109
101
  if (!fromEnv.ok)
110
102
  return { ok: false, error: fromEnv.error };
111
103
  const merged = { ...(fromEnv.limits ?? {}), ...(parsed.limits ?? {}) };
112
- return { ok: true, ...(hasAnyLimit(merged) ? { limits: merged } : {}), flaggedFlags: parsed.flaggedFlags };
104
+ return { ok: true, ...(hasAnyLimit(merged) ? { limits: merged } : {}) };
113
105
  }
@@ -5,6 +5,7 @@ export interface LiveModelInfo {
5
5
  reasoning?: boolean;
6
6
  vision?: boolean;
7
7
  routePairing?: string;
8
+ supportedEffortLevels?: string[];
8
9
  [k: string]: unknown;
9
10
  }
10
11
  export interface LiveModelCatalog {
@@ -18,6 +19,19 @@ export declare function getLiveModelCatalog(): LiveModelCatalog | null;
18
19
  export declare function normalizeLiveModelRef(ref: string): string;
19
20
  export type ImageVision = 'yes' | 'no' | 'unknown';
20
21
  export declare function imageVisionOf(model: string | undefined, catalog?: LiveModelCatalog | null): ImageVision;
22
+ export type EffortLevelsReading = {
23
+ readonly kind: 'clamped';
24
+ readonly levels: readonly string[];
25
+ } | {
26
+ readonly kind: 'not_clamped';
27
+ } | {
28
+ readonly kind: 'not_applicable';
29
+ } | {
30
+ readonly kind: 'unknown';
31
+ readonly why: 'no_catalog' | 'model_not_listed' | 'reasoning_unreported' | 'levels_malformed' | 'unreadable';
32
+ };
33
+ export declare function effortLevelsOf(model: string | undefined, catalog?: LiveModelCatalog | null): EffortLevelsReading;
34
+ export declare function effortLevelHonored(reading: EffortLevelsReading, level: string): 'yes' | 'no' | 'unknown';
21
35
  export declare function liveDefaultModelName(): string | null;
22
36
  export interface RoutePairingVerdict {
23
37
  verdict: 'ok' | 'broken' | 'unknown';
@@ -79,6 +79,67 @@ export function imageVisionOf(model, catalog = getLiveModelCatalog()) {
79
79
  return 'unknown';
80
80
  }
81
81
  }
82
+ const NOT_CLAMPED = Object.freeze({ kind: 'not_clamped' });
83
+ const NOT_APPLICABLE = Object.freeze({ kind: 'not_applicable' });
84
+ const unknownEffort = (why) => Object.freeze({ kind: 'unknown', why });
85
+ export function effortLevelsOf(model, catalog = getLiveModelCatalog()) {
86
+ try {
87
+ if (model !== undefined && typeof model !== 'string')
88
+ return unknownEffort('unreadable');
89
+ if (catalog === null || typeof catalog !== 'object' || Array.isArray(catalog))
90
+ return unknownEffort('no_catalog');
91
+ let target = model !== undefined && model.length > 0 ? model : undefined;
92
+ if (target === undefined) {
93
+ const def = ownDataOf(catalog, 'default');
94
+ target = typeof def === 'string' && def.length > 0 ? def : undefined;
95
+ }
96
+ if (target === undefined)
97
+ return unknownEffort('model_not_listed');
98
+ const row = liveModelRowOf(catalog, target);
99
+ if (row === undefined)
100
+ return unknownEffort('model_not_listed');
101
+ const levels = ownDataOf(row, 'supportedEffortLevels');
102
+ if (levels !== undefined) {
103
+ if (!Array.isArray(levels))
104
+ return unknownEffort('levels_malformed');
105
+ const n = ownDataOf(levels, 'length');
106
+ if (typeof n !== 'number' || !Number.isSafeInteger(n) || n <= 0)
107
+ return unknownEffort('levels_malformed');
108
+ const out = [];
109
+ for (let i = 0; i < n; i += 1) {
110
+ const w = ownDataOf(levels, String(i));
111
+ if (typeof w !== 'string' || w.length === 0)
112
+ return unknownEffort('levels_malformed');
113
+ if (!out.includes(w))
114
+ out.push(w);
115
+ }
116
+ return Object.freeze({ kind: 'clamped', levels: Object.freeze(out) });
117
+ }
118
+ const reasoning = ownDataOf(row, 'reasoning');
119
+ if (reasoning === true)
120
+ return NOT_CLAMPED;
121
+ if (reasoning === false)
122
+ return NOT_APPLICABLE;
123
+ return unknownEffort('reasoning_unreported');
124
+ }
125
+ catch {
126
+ return unknownEffort('unreadable');
127
+ }
128
+ }
129
+ export function effortLevelHonored(reading, level) {
130
+ if (typeof level !== 'string' || level.length === 0)
131
+ return 'unknown';
132
+ switch (reading?.kind) {
133
+ case 'clamped':
134
+ return Array.isArray(reading.levels) && reading.levels.includes(level) ? 'yes' : 'no';
135
+ case 'not_clamped':
136
+ return 'yes';
137
+ case 'not_applicable':
138
+ return 'no';
139
+ default:
140
+ return 'unknown';
141
+ }
142
+ }
82
143
  export function liveDefaultModelName() {
83
144
  if (!catalog?.default)
84
145
  return null;
@@ -1,16 +1,21 @@
1
1
  import { engineWireTarget } from './engineWireTarget.js';
2
2
  import { createEngineCapReader } from './engineCapReader.js';
3
3
  export function projectMcpProbeCapability(caps) {
4
- if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
5
- return undefined;
6
- if (!Object.hasOwn(caps, 'mcpProbe'))
7
- return { kind: 'not_reported' };
8
- const v = caps.mcpProbe;
9
- if (v === undefined)
10
- return { kind: 'not_reported' };
11
- if (typeof v !== 'boolean')
4
+ try {
5
+ if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
6
+ return undefined;
7
+ if (!Object.hasOwn(caps, 'mcpProbe'))
8
+ return { kind: 'not_reported' };
9
+ const v = caps.mcpProbe;
10
+ if (v === undefined)
11
+ return { kind: 'not_reported' };
12
+ if (typeof v !== 'boolean')
13
+ return undefined;
14
+ return v ? { kind: 'present' } : { kind: 'absent' };
15
+ }
16
+ catch {
12
17
  return undefined;
13
- return v ? { kind: 'present' } : { kind: 'absent' };
18
+ }
14
19
  }
15
20
  const reader = createEngineCapReader({
16
21
  name: 'mcpProbe',
@@ -163,15 +163,20 @@ export async function reconnectMcpServer(client, sessionId, server, opts) {
163
163
  }
164
164
  }
165
165
  export function projectMcpReconnectCapability(caps) {
166
- if (!isRecord(caps))
166
+ try {
167
+ if (!isRecord(caps))
168
+ return undefined;
169
+ if (!Object.hasOwn(caps, 'mcpReconnect') || caps.mcpReconnect === undefined)
170
+ return 'not_reported';
171
+ if (caps.mcpReconnect === true)
172
+ return 'available';
173
+ if (caps.mcpReconnect === false)
174
+ return 'unavailable';
175
+ return undefined;
176
+ }
177
+ catch {
167
178
  return undefined;
168
- if (!Object.hasOwn(caps, 'mcpReconnect') || caps.mcpReconnect === undefined)
169
- return 'not_reported';
170
- if (caps.mcpReconnect === true)
171
- return 'available';
172
- if (caps.mcpReconnect === false)
173
- return 'unavailable';
174
- return undefined;
179
+ }
175
180
  }
176
181
  export function mcpReconnectOutcomeDetail(view) {
177
182
  const name = capForDisplay(view.server, RECONNECT_WORD_MAX);
@@ -2,17 +2,22 @@ import { engineWireTarget } from './engineWireTarget.js';
2
2
  import { createEngineCapReader } from './engineCapReader.js';
3
3
  export const MEMORY_ENGINE_REQUIRED_CODE = 'capability.memory_engine_required';
4
4
  export function projectMemoryComplianceCapability(caps) {
5
- if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
6
- return undefined;
7
- const c = caps;
8
- if (!Object.hasOwn(c, 'memoryCompliance'))
9
- return { kind: 'not_reported' };
10
- const v = c.memoryCompliance;
11
- if (v === undefined)
12
- return { kind: 'not_reported' };
13
- if (typeof v !== 'boolean')
5
+ try {
6
+ if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
7
+ return undefined;
8
+ const c = caps;
9
+ if (!Object.hasOwn(c, 'memoryCompliance'))
10
+ return { kind: 'not_reported' };
11
+ const v = c.memoryCompliance;
12
+ if (v === undefined)
13
+ return { kind: 'not_reported' };
14
+ if (typeof v !== 'boolean')
15
+ return undefined;
16
+ return v ? { kind: 'present' } : { kind: 'absent' };
17
+ }
18
+ catch {
14
19
  return undefined;
15
- return v ? { kind: 'present' } : { kind: 'absent' };
20
+ }
16
21
  }
17
22
  const reader = createEngineCapReader({
18
23
  name: 'memoryCompliance',
@@ -2,17 +2,22 @@ import { engineWireTarget } from './engineWireTarget.js';
2
2
  import { createEngineCapReader } from './engineCapReader.js';
3
3
  import { MEMORY_ENGINE_REQUIRED_CODE } from './memoryComplianceCapability.js';
4
4
  export function projectMemoryOriginCapability(caps) {
5
- if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
6
- return undefined;
7
- const c = caps;
8
- if (!Object.hasOwn(c, 'memoryOrigin'))
9
- return { kind: 'not_reported' };
10
- const v = c.memoryOrigin;
11
- if (v === undefined)
12
- return { kind: 'not_reported' };
13
- if (typeof v !== 'boolean')
5
+ try {
6
+ if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
7
+ return undefined;
8
+ const c = caps;
9
+ if (!Object.hasOwn(c, 'memoryOrigin'))
10
+ return { kind: 'not_reported' };
11
+ const v = c.memoryOrigin;
12
+ if (v === undefined)
13
+ return { kind: 'not_reported' };
14
+ if (typeof v !== 'boolean')
15
+ return undefined;
16
+ return v ? { kind: 'present' } : { kind: 'absent' };
17
+ }
18
+ catch {
14
19
  return undefined;
15
- return v ? { kind: 'present' } : { kind: 'absent' };
20
+ }
16
21
  }
17
22
  const reader = createEngineCapReader({
18
23
  name: 'memoryOrigin',
@@ -16,17 +16,19 @@ export interface LocalEngineModelIdentityReading {
16
16
  lanes: ModelIdentityLanes;
17
17
  engineAnswer?: EngineAnswerObservation;
18
18
  engineAcceptsCatalogDefault?: boolean;
19
+ routeGap?: ModelRouteGapReading;
19
20
  }
21
+ export type ModelRouteGapReading = 'endpoint_missing' | 'lane_credential_missing' | 'none';
20
22
  export interface RemoteEngineModelIdentityReading {
21
23
  engine: 'remote';
22
24
  engineAnswer: EngineAnswerObservation;
23
25
  }
24
26
  export type ModelIdentityReading = LocalEngineModelIdentityReading | RemoteEngineModelIdentityReading;
25
27
  export type ModelIdentityResolvability = 'resolvable' | 'not_resolvable' | 'unknown';
26
- export type ModelSetupDecision = 'offer_setup' | 'explain_unconfigured' | 'proceed';
28
+ export type ModelSetupDecision = 'offer_setup' | 'explain_unconfigured' | 'explain_route_gap' | 'proceed';
27
29
  export declare function modelIdentityResolvability(reading: ModelIdentityReading): ModelIdentityResolvability;
28
30
  export declare function modelIdentityDetail(reading: ModelIdentityReading): string;
29
- export declare function modelSetupDecision(identity: ModelIdentityResolvability, hostCanConfigureModel: boolean): ModelSetupDecision;
31
+ export declare function modelSetupDecision(identity: ModelIdentityResolvability | ModelIdentityReading, hostCanConfigureModel: boolean): ModelSetupDecision;
30
32
  export declare function modelSetupNotice(decision: ModelSetupDecision): string | null;
31
33
  export declare function observedEngineAnswer(baseUrl?: string | undefined): EngineAnswerObservation;
32
34
  export {};
@@ -26,6 +26,10 @@ function catalogDefaultEvidence(catalog, accepts) {
26
26
  void _evidencePin;
27
27
  return catalog === 'complete' && accepts === true ? { catalog, engineAccepts: accepts } : undefined;
28
28
  }
29
+ function routeGapOf(reading) {
30
+ const v = own(reading, 'routeGap')?.v;
31
+ return v === 'endpoint_missing' || v === 'lane_credential_missing' || v === 'none' ? v : undefined;
32
+ }
29
33
  function analyse(reading) {
30
34
  try {
31
35
  if (!isPlainObject(reading))
@@ -69,7 +73,10 @@ function analyse(reading) {
69
73
  }
70
74
  }
71
75
  else if (s === 'complete') {
72
- return { verdict: 'resolvable', why: 'lane', lane };
76
+ const route = routeGapOf(reading);
77
+ if (route === 'endpoint_missing' || route === 'lane_credential_missing')
78
+ return { verdict: 'not_resolvable', why: 'route_gap', lane, gap: route };
79
+ return { verdict: 'resolvable', why: 'lane', lane, route: route === 'none' ? 'none' : 'unreported' };
73
80
  }
74
81
  if (s === 'partial')
75
82
  partial.push(lane);
@@ -83,7 +90,7 @@ function analyse(reading) {
83
90
  if (unreadable.length > 0 || unreported.length > 0 || unusable.length > 0 || catalogUnconfirmed !== null) {
84
91
  return { verdict: 'unknown', why: 'lanes', unreadable, unreported, unusable, catalogUnconfirmed, catalogRefused };
85
92
  }
86
- return { verdict: 'not_resolvable', partial, catalogRefused };
93
+ return { verdict: 'not_resolvable', why: 'lanes', partial, catalogRefused };
87
94
  }
88
95
  catch {
89
96
  return malformed();
@@ -121,8 +128,16 @@ export function modelIdentityDetail(reading) {
121
128
  if (a.why === 'catalog_default') {
122
129
  return `${laneLabel('modelCatalogFile')} supplies a model name as its default, and the local engine accepts a catalog default in place of a startup model name, so it can start with it — whether its gateway accepts that name is a separate check`;
123
130
  }
124
- return `${laneLabel(a.lane)} supplies a model name, so the local engine can start with it — whether its gateway accepts that name is a separate check`;
131
+ if (a.route === 'none') {
132
+ return `${laneLabel(a.lane)} supplies a model name and the local engine has a route to reach it, so it can start with it — whether its gateway accepts that name is a separate check`;
133
+ }
134
+ return `${laneLabel(a.lane)} supplies a model name for the local engine — whether the engine also has a route to reach that model (an endpoint, or credentials for the channel it names) and whether its gateway accepts the name are separate checks`;
125
135
  case 'not_resolvable': {
136
+ if (a.why === 'route_gap') {
137
+ return a.gap === 'endpoint_missing'
138
+ ? `${laneLabel(a.lane)} supplies a model name, but the local engine has no route to reach it — the model rides the OpenAI-compatible route and no gateway address (MODEL_GATEWAY_BASEURL) is set, and the engine refuses to start without one`
139
+ : `${laneLabel(a.lane)} supplies a model name, but the local engine has no route to reach it — the anthropic channel is selected (MODEL_PROVIDER=anthropic), neither ANTHROPIC_API_KEY nor ANTHROPIC_AUTH_TOKEN is set, and there is no gateway address (MODEL_GATEWAY_BASEURL) to fall back to, so the engine cannot start on any route`;
140
+ }
126
141
  const others = a.catalogRefused ? a.partial.filter((l) => l !== 'modelCatalogFile') : a.partial;
127
142
  const partialClause = others.length > 0
128
143
  ? `${joinPhrases(others.map(laneLabel))} ${others.length > 1 ? 'carry' : 'carries'} part of a model configuration (such as a gateway address or a credential) but no model name`
@@ -164,7 +179,17 @@ export function modelIdentityDetail(reading) {
164
179
  }
165
180
  }
166
181
  export function modelSetupDecision(identity, hostCanConfigureModel) {
167
- if (identity !== 'not_resolvable')
182
+ let verdict;
183
+ if (typeof identity === 'string') {
184
+ verdict = identity;
185
+ }
186
+ else {
187
+ const a = analyse(identity);
188
+ if (a.verdict === 'not_resolvable' && a.why === 'route_gap')
189
+ return 'explain_route_gap';
190
+ verdict = a.verdict;
191
+ }
192
+ if (verdict !== 'not_resolvable')
168
193
  return 'proceed';
169
194
  if (hostCanConfigureModel === true)
170
195
  return 'offer_setup';
@@ -178,6 +203,8 @@ export function modelSetupNotice(decision) {
178
203
  return 'no model name is configured for the engine, and it does not start without one — opening model setup';
179
204
  case 'explain_unconfigured':
180
205
  return 'this engine has no model configured, and it cannot be configured from this client — ask whoever runs the engine to set one up';
206
+ case 'explain_route_gap':
207
+ return 'a model name is configured, but the engine has no route to reach that model (a gateway address, or credentials for the channel it names), so it does not start — fix the route; model setup will not help';
181
208
  default:
182
209
  return null;
183
210
  }
@@ -0,0 +1,16 @@
1
+ export type OutputStyleSeatReading = {
2
+ kind: 'unobserved';
3
+ } | {
4
+ kind: 'not_reported';
5
+ } | {
6
+ kind: 'present';
7
+ value: true;
8
+ };
9
+ export declare function projectOutputStyleSeatCapability(caps: unknown): OutputStyleSeatReading | undefined;
10
+ export declare function noteEngineCapsForOutputStyleSeat(baseUrl: string, caps: unknown, opts?: {
11
+ generation?: number;
12
+ }): void;
13
+ export declare function observedOutputStyleSeat(baseUrl?: string | undefined): OutputStyleSeatReading;
14
+ export declare function outputStyleSeatAdmitted(reading: OutputStyleSeatReading | undefined): boolean;
15
+ export declare function forgetOutputStyleSeatReading(baseUrl: string | undefined): void;
16
+ export declare function __resetOutputStyleSeatReadingsForTests(): void;
@@ -0,0 +1,47 @@
1
+ import { engineWireTarget } from './engineWireTarget.js';
2
+ import { createEngineCapReader } from './engineCapReader.js';
3
+ import { readOwnDataValue } from './ownKey.js';
4
+ export function projectOutputStyleSeatCapability(caps) {
5
+ try {
6
+ if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
7
+ return undefined;
8
+ if (!Object.hasOwn(caps, 'outputStyle'))
9
+ return { kind: 'not_reported' };
10
+ const v = caps.outputStyle;
11
+ if (v === undefined)
12
+ return { kind: 'not_reported' };
13
+ return v === true ? { kind: 'present', value: true } : undefined;
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ }
19
+ const reader = createEngineCapReader({
20
+ name: 'outputStyleSeat',
21
+ project: projectOutputStyleSeatCapability,
22
+ makeUnobserved: () => ({ kind: 'unobserved' }),
23
+ });
24
+ export function noteEngineCapsForOutputStyleSeat(baseUrl, caps, opts) {
25
+ reader.note(baseUrl, caps, opts);
26
+ }
27
+ export function observedOutputStyleSeat(baseUrl = engineWireTarget()?.baseUrl) {
28
+ return reader.observed(baseUrl);
29
+ }
30
+ export function outputStyleSeatAdmitted(reading) {
31
+ try {
32
+ if (reading === null || reading === undefined || typeof reading !== 'object' || Array.isArray(reading))
33
+ return false;
34
+ if (readOwnDataValue(reading, 'kind') !== 'present')
35
+ return false;
36
+ return readOwnDataValue(reading, 'value') === true;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ export function forgetOutputStyleSeatReading(baseUrl) {
43
+ reader.forget(baseUrl);
44
+ }
45
+ export function __resetOutputStyleSeatReadingsForTests() {
46
+ reader.__resetForTests();
47
+ }
package/dist/ownKey.d.ts CHANGED
@@ -2,3 +2,4 @@ export declare function putOwnKey<T>(table: Record<string, T>, key: string, valu
2
2
  export declare function readOwnNonEmptyString(v: object | null | undefined, key: string): string | undefined;
3
3
  export declare function readOwnDataNonEmptyString(v: object | null | undefined, key: string): string | undefined;
4
4
  export declare function readOwnDataValue<T>(v: object | null | undefined, key: string): T | undefined;
5
+ export declare function readFrameStringKey(frame: unknown, key: string): string | undefined;