@sema-agent/client-core 0.107.0 → 0.109.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 (165) hide show
  1. package/CHANGELOG.md +239 -0
  2. package/README.md +54 -36
  3. package/dist/adapt/arms.js +23 -8
  4. package/dist/adapt/textStream.d.ts +2 -0
  5. package/dist/adapt/textStream.js +37 -16
  6. package/dist/adapter/activeRunSelfHeal.d.ts +2 -0
  7. package/dist/adapter/activeRunSelfHeal.js +21 -4
  8. package/dist/adapter/downstream/eventToSdkMessage.js +2 -1
  9. package/dist/agentSession/engineAgentRegistryRead.js +2 -0
  10. package/dist/bashExitReading.d.ts +12 -0
  11. package/dist/bashExitReading.js +44 -0
  12. package/dist/checkpointRowVerdict.d.ts +6 -1
  13. package/dist/checkpointRowVerdict.js +30 -2
  14. package/dist/cloudConfigWireCaps.d.ts +10 -0
  15. package/dist/cloudConfigWireCaps.js +33 -0
  16. package/dist/compensations.js +1 -1
  17. package/dist/coreValuePorts.d.ts +17 -1
  18. package/dist/coreValuePorts.js +5 -0
  19. package/dist/decideReceipt.js +2 -1
  20. package/dist/engineAgentAbsence.d.ts +2 -0
  21. package/dist/engineAgentAbsence.js +28 -0
  22. package/dist/engineErrorCodes.d.ts +9 -0
  23. package/dist/engineErrorCodes.js +9 -0
  24. package/dist/engineHealthFacts.d.ts +17 -0
  25. package/dist/engineHealthFacts.js +42 -3
  26. package/dist/engineNoticeCodes.d.ts +147 -1
  27. package/dist/engineNoticeCodes.js +694 -57
  28. package/dist/engineTargetSeat.js +1 -0
  29. package/dist/errorSupplementRoles.js +6 -1
  30. package/dist/eventLeg.js +1 -1
  31. package/dist/executionLaneWords.js +2 -1
  32. package/dist/fleetTaskDesc.js +3 -3
  33. package/dist/gateOutcome.d.ts +10 -1
  34. package/dist/gateOutcome.js +48 -1
  35. package/dist/generated/engineFactTables.d.ts +2 -0
  36. package/dist/generated/engineFactTables.js +11 -0
  37. package/dist/generated/engineNoticeTables.js +6 -0
  38. package/dist/generated/settingsSchemaFns.d.ts +4 -2
  39. package/dist/generated/settingsSchemaFns.js +9 -3
  40. package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -1
  41. package/dist/generated/settingsSchemaMcpRequestEntry.js +9 -18
  42. package/dist/generated/settingsSchemaReservedMemberName.d.ts +1 -0
  43. package/dist/generated/settingsSchemaReservedMemberName.js +7 -0
  44. package/dist/generated/settingsSchemaTables.d.ts +2 -0
  45. package/dist/generated/settingsSchemaTables.js +10 -0
  46. package/dist/generated/settingsSchemaWireName.d.ts +1 -0
  47. package/dist/generated/settingsSchemaWireName.js +8 -0
  48. package/dist/headlessReconnectWire.js +12 -7
  49. package/dist/hitl/approvalAskers.d.ts +13 -0
  50. package/dist/hitl/approvalAskers.js +79 -0
  51. package/dist/hitl/approvalCardReasons.js +22 -4
  52. package/dist/hitl/approvalRequestFrameReading.d.ts +14 -0
  53. package/dist/hitl/approvalRequestFrameReading.js +79 -0
  54. package/dist/hitl/approvalResolution.d.ts +3 -0
  55. package/dist/hitl/approvalResolution.js +22 -4
  56. package/dist/hitl/approvalsFeed.js +4 -13
  57. package/dist/hitl/askParkRowRouting.js +10 -3
  58. package/dist/hitl/automaticAnswerVerdict.d.ts +5 -2
  59. package/dist/hitl/automaticAnswerVerdict.js +16 -2
  60. package/dist/hitl/decisionConflict.d.ts +2 -1
  61. package/dist/hitl/decisionConflict.js +4 -1
  62. package/dist/hitl/decisionRefusal.d.ts +1 -0
  63. package/dist/hitl/decisionRefusal.js +5 -2
  64. package/dist/hitl/decisionSend.js +2 -6
  65. package/dist/hitl/frameRouter.d.ts +3 -2
  66. package/dist/hitl/frameRouter.js +37 -7
  67. package/dist/hitl/gateLedger.d.ts +2 -0
  68. package/dist/hitl/gateLedger.js +3 -1
  69. package/dist/hitl/hitlBridge.d.ts +4 -0
  70. package/dist/hitl/hitlBridge.js +11 -8
  71. package/dist/hitl/livePendingAsk.js +17 -16
  72. package/dist/hitl/localAllowRule.js +2 -1
  73. package/dist/hitl/noAllowCause.d.ts +1 -1
  74. package/dist/hitl/noAllowCause.js +4 -2
  75. package/dist/hitl/parkExpiryJudgements.js +26 -1
  76. package/dist/hitl/parkOwnership.d.ts +2 -0
  77. package/dist/hitl/parkOwnership.js +48 -8
  78. package/dist/hitl/parkResolver.js +39 -30
  79. package/dist/hitl/parkRowBirthWait.d.ts +2 -0
  80. package/dist/hitl/parkRowBirthWait.js +8 -1
  81. package/dist/hitl/parkedUnresumable.d.ts +13 -0
  82. package/dist/hitl/parkedUnresumable.js +80 -0
  83. package/dist/hitl/permissionRuleScope.d.ts +4 -0
  84. package/dist/hitl/permissionRuleScope.js +31 -0
  85. package/dist/hitl/persistedRulesWire.d.ts +7 -1
  86. package/dist/hitl/persistedRulesWire.js +25 -8
  87. package/dist/hitl/planReviewWire.js +12 -16
  88. package/dist/hitl/policyDenyCause.d.ts +3 -0
  89. package/dist/hitl/policyDenyCause.js +16 -0
  90. package/dist/hitl/sessionAllowRoute.js +5 -4
  91. package/dist/hitl/sessionPolicyDeliverable.js +1 -1
  92. package/dist/hitl/standingRows.d.ts +1 -5
  93. package/dist/hitl/standingRows.js +15 -14
  94. package/dist/hitl/toolApprovalWire.d.ts +16 -4
  95. package/dist/hitl/toolApprovalWire.js +57 -17
  96. package/dist/hooksReaderGenerations.d.ts +1 -0
  97. package/dist/hooksReaderGenerations.js +12 -0
  98. package/dist/hooksWireCaps.js +12 -7
  99. package/dist/hostSettingsSource.js +2 -0
  100. package/dist/i18n/messages.en.d.ts +206 -1
  101. package/dist/i18n/messages.en.js +209 -4
  102. package/dist/i18n/messages.zh.js +214 -4
  103. package/dist/index.d.ts +35 -8
  104. package/dist/index.js +20 -5
  105. package/dist/liveModelCatalog.d.ts +4 -2
  106. package/dist/liveModelCatalog.js +164 -26
  107. package/dist/localEngineJudge.d.ts +75 -0
  108. package/dist/localEngineJudge.js +242 -0
  109. package/dist/localEngineOccupancy.d.ts +88 -0
  110. package/dist/localEngineOccupancy.js +269 -0
  111. package/dist/localEngineSeatReading.d.ts +29 -0
  112. package/dist/localEngineSeatReading.js +294 -0
  113. package/dist/localEngineSpawn.d.ts +113 -0
  114. package/dist/localEngineSpawn.js +486 -0
  115. package/dist/localEngineStep.d.ts +286 -0
  116. package/dist/localEngineStep.js +1086 -0
  117. package/dist/localEngineStopLadder.d.ts +29 -0
  118. package/dist/localEngineStopLadder.js +139 -0
  119. package/dist/localEngineSwapCard.d.ts +43 -0
  120. package/dist/localEngineSwapCard.js +205 -0
  121. package/dist/localEngineTiming.d.ts +8 -0
  122. package/dist/localEngineTiming.js +8 -0
  123. package/dist/mcpReconnect.js +12 -5
  124. package/dist/mcpWireCaps.js +2 -2
  125. package/dist/memoryEntriesWire.d.ts +1 -1
  126. package/dist/memoryEntriesWire.js +5 -0
  127. package/dist/model/catalogDefault.d.ts +25 -0
  128. package/dist/model/catalogDefault.js +44 -0
  129. package/dist/noticePresentation.d.ts +2 -0
  130. package/dist/noticePresentation.js +79 -1
  131. package/dist/ownKey.d.ts +10 -0
  132. package/dist/ownKey.js +15 -1
  133. package/dist/permissionWireCaps.d.ts +1 -0
  134. package/dist/permissionWireCaps.js +11 -0
  135. package/dist/pluginHooksWire.d.ts +5 -3
  136. package/dist/pluginHooksWire.js +116 -7
  137. package/dist/queuedDelivery.d.ts +1 -0
  138. package/dist/queuedDelivery.js +12 -0
  139. package/dist/resultFrameKeys.js +4 -2
  140. package/dist/resumeRefusalCopy.js +15 -8
  141. package/dist/ruleReadings.js +1 -1
  142. package/dist/runPermissionModeSwitch.d.ts +2 -1
  143. package/dist/runPermissionModeSwitch.js +16 -6
  144. package/dist/seam.d.ts +13 -2
  145. package/dist/seam.js +8 -1
  146. package/dist/seatContract.d.ts +103 -12
  147. package/dist/seatContract.js +344 -14
  148. package/dist/sessionBackground.js +2 -0
  149. package/dist/sessionEngine.d.ts +2 -1
  150. package/dist/sessionEngine.js +5 -0
  151. package/dist/settingsHooksSalvage.d.ts +5 -0
  152. package/dist/settingsHooksSalvage.js +54 -0
  153. package/dist/subagentContentStore.d.ts +12 -0
  154. package/dist/subagentContentStore.js +73 -12
  155. package/dist/supportFloor.js +2 -0
  156. package/dist/taskNotificationAdmission.d.ts +19 -0
  157. package/dist/taskNotificationAdmission.js +84 -0
  158. package/dist/toolResult.js +20 -6
  159. package/dist/webSearchWireCaps.js +9 -4
  160. package/dist/wireFailureShape.d.ts +20 -0
  161. package/dist/wireFailureShape.js +37 -6
  162. package/dist/wireRefusalCopy.d.ts +23 -2
  163. package/dist/wireRefusalCopy.js +93 -4
  164. package/docs/INTEGRATION-CLIENTS.md +1959 -15
  165. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { engineRefOf, sameEngineRef, TRANSCRIPT_ROW_SIDECAR_KEYS } from './engin
15
15
  export { isReplayMarked } from './replayBody.js';
16
16
  export { composeEventLeg, EVENT_LEG_KINDS, EVENT_LEG_TABLE, approvalFrameContextOf } from './eventLeg.js';
17
17
  export { frameBindingOf, inheritFrameBinding } from './frameBinding.js';
18
- export { __resetSubagentContentStoreConfigForTests, __resetSubagentOwnerLedgerForTests, clearSubagentContent, coerceOutput, configureSubagentContentStore, getBgParentRun, getBgParentRunOwner, getBgTerminalFacts, getSubagentContentSnapshot, isOwnEngineRun, parentToolCallIdOf, planSubagentViewSlots, publishSubagentContentEvent, pushSubagentLocalEcho, recordBgParentRun, recordOwnEngineRun, recordSubagentOwner, recordSubagentOwnerFromProgress, registerSubagentAlias, settleSubagentContent, SUBAGENT_CONTENT_STORE_DEFAULTS, subagentContentStoreConfig, subagentOwnerSessionConflicts, subscribeSubagentContent, subagentContentEventOf, } from './subagentContentStore.js';
18
+ export { __resetSubagentContentStoreConfigForTests, __resetSubagentOwnerLedgerForTests, clearSubagentContent, coerceOutput, configureSubagentContentStore, getBgParentRun, getBgParentRunOwner, getBgTerminalFacts, getSubagentContentSnapshot, isOwnEngineRun, noteSeatSubagentAlias, parentToolCallIdOf, planSubagentViewSlots, publishSubagentContentEvent, pushSubagentLocalEcho, recordBgParentRun, recordOwnEngineRun, recordSubagentOwner, readSeatSubagentAlias, recordSubagentOwnerFromProgress, registerSubagentAlias, settleSubagentContent, SUBAGENT_CONTENT_STORE_DEFAULTS, subagentContentStoreConfig, subagentOwnerSessionConflicts, subscribeSubagentContent, subagentContentEventOf, } from './subagentContentStore.js';
19
19
  export * from './engineAgentPanelStore.js';
20
20
  export * from './engineAgentAbsence.js';
21
21
  export * from './fleetAgentPanelProjection.js';
@@ -76,6 +76,14 @@ export * from './gateOutcome.js';
76
76
  export * from './postureKnob.js';
77
77
  export * from './engineIdentity.js';
78
78
  export { readEngineHealthFacts } from './engineHealthFacts.js';
79
+ export { localEngineAnchorOf, localEnginePlanDriftOf, judgeLocalEngine, localEngineLaneOf, localEngineVerdictSentence } from './localEngineJudge.js';
80
+ export { countClientRegistry, fleetBackgroundLiveOf, localEngineSelfOf, localEngineRegistryStatusOf, localEngineIdle, localEngineDemandOf, localEngineExitFate, localEngineExitFateSentence, } from './localEngineOccupancy.js';
81
+ export { LOCAL_ENGINE_SWAP_CAUSES, localEngineSwapAutoable, engineSwapCardOf, engineSwapCardText } from './localEngineSwapCard.js';
82
+ export { LOCAL_ENGINE_SPAWN_ENV, LOCAL_ENGINE_HOST_BITS, LOCAL_ENGINE_SPAWN_SHAPE, localEngineOperatorSingleUserOf, localEngineSpawnEnv, localEngineSeedEnv, localEnginePrincipalOf, localEnginePrincipalSentence, engineBootRefusalOf, engineBootRefusalSentence, localEngineFirstShareSentence, } from './localEngineSpawn.js';
83
+ export { LOCAL_ENGINE_STOP_LADDER, stopLadderStep } from './localEngineStopLadder.js';
84
+ export { LOCAL_ENGINE_INITIAL_STATE, LOCAL_ENGINE_FAIL_CODES, localEngineStep, engineSwapAnswerOutcomeOf } from './localEngineStep.js';
85
+ export { LOCAL_ENGINE_TIMING } from './localEngineTiming.js';
86
+ export { localEngineSeatReadingOf, localEngineSeatSentence, localEngineNoticeText, localEngineFailText, engineTargetLocalOf, engineRestartOutcomeOf, } from './localEngineSeatReading.js';
79
87
  export { transportFailureScene } from './engineWireFor.js';
80
88
  export { engineUrlTransportVerdict, normalizeEngineBaseUrl } from './engineUrl.js';
81
89
  export { submitStreamWithBoundedReopen } from './submitReopen.js';
@@ -103,7 +111,7 @@ export * from './engineWireSdk.js';
103
111
  export * from './classifierVerdictWire.js';
104
112
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
105
113
  export { findSystemReminderOpenTag } from './systemReminderTag.js';
106
- export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_K8S_LANE_REQUIRED, 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_MCP_SERVER_NAME_COLLISION, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_TOOL_FACE_CONTROL, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_ROW_UNREVIVABLE, 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, idempotencyPayloadMismatchContent, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDecideRowUnrevivableCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, 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, MCP_TOOL_DECLARATION_CHANGED, MCP_TOOL_LISTING_UNREACHED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, PROMPT_ASSEMBLED_ROLE_REFUSED, 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, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, ATTACHMENT_BOUND_ELSEWHERE, ATTACHMENT_BUNDLE_INVALID, ATTACHMENT_BUNDLE_LANE_NOT_ISOLATED, ATTACHMENT_BUNDLE_SEED_FIXED, CONFLICT_SESSION_MEMORY_UNOBSERVED, CONFLICT_SESSION_ARCHIVE_STAMPED, ENV_HOME_UNCONFIRMED, } from './engineErrorCodes.js';
114
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_K8S_LANE_REQUIRED, 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_MCP_SERVER_NAME_COLLISION, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_TOOL_FACE_CONTROL, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_ROW_UNREVIVABLE, 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, idempotencyPayloadMismatchContent, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDecideRowUnrevivableCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, 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, MCP_TOOL_DECLARATION_CHANGED, MCP_TOOL_LISTING_UNREACHED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, PROMPT_ASSEMBLED_ROLE_REFUSED, 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, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, ATTACHMENT_BOUND_ELSEWHERE, ATTACHMENT_BUNDLE_INVALID, ATTACHMENT_BUNDLE_LANE_NOT_ISOLATED, ATTACHMENT_BUNDLE_SEED_FIXED, CONFLICT_SESSION_MEMORY_UNOBSERVED, CONFLICT_SESSION_ARCHIVE_STAMPED, ENV_HOME_UNCONFIRMED, REQUEST_ENV_CREDENTIAL_REFUSED, CONFLICT_SESSION_ID_RETIRED, } from './engineErrorCodes.js';
107
115
  export { prepareRefusalCodeOf, prepareRefusalNoteOf } from './prepareRefusal.js';
108
116
  export * from './agentsWireCaps.js';
109
117
  export { engineToolDirectoryOf } from './engineToolDirectory.js';
@@ -209,6 +217,7 @@ export { encodeHumanTurn, deliveredUuidsOf, imageSentOnUnknownVision, otherBodyB
209
217
  export { batchCompatible, planQueuedDelivery, humanTurnCapsOf, humanTextForKeywordScan, selfHealSteerEligible } from './queuedDelivery.js';
210
218
  export { SUBMISSION_SURFACES, SUBMISSION_ORIGINS, SUBMISSION_TOOLS, SUBMISSION_KINDS, submissionProvenanceOf, submissionIdentityOf, requestLaneOf, submissionOriginOf, } from './request/submissionIdentity.js';
211
219
  export { taskNotificationOf, taskNotificationQueueCommand } from './notifications.js';
220
+ export { taskNotificationAdmissionOf } from './taskNotificationAdmission.js';
212
221
  export { resultErrorCodeInTextOf } from './resultFrameKeys.js';
213
222
  export { humanTurnRefusalSentence, humanTurnDegradedSentence, printImageVisionSentence } from './humanTurnSentences.js';
214
223
  export { observedUserAttachmentSeat, projectUserAttachmentSeatCapability, userAttachmentSeatAdmits } from './userAttachmentSeat.js';
@@ -252,9 +261,10 @@ export { ENGINE_ABORT_TOOL_RESULT } from './hitl/frameRouter.js';
252
261
  export { toolEndOutputText } from './toolResultContent.js';
253
262
  export { toolOutputMediaAbsenceOf, toolOutputMediaAbsenceSentence } from './toolResultContent.js';
254
263
  export { _resetHitlHostSurfaceForTest, APPROVAL_PARKING_WARN_TEXT, approvalParkingNoticeText, CANCEL_DENY_BUDGET_MS, CANCEL_DENY_WARN_TEXT, EDIT_NOT_FORWARDED_WARN_TEXT, EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT, hitlHostSurfaceFor, hitlHostSurfaceMisses, hitlHostSurfaceMissesFor, installHitlHostSurface, installHitlHostSurfaceFor, observeCancelByDeny, REMEMBER_NOT_APPLIED_WARN_TEXT, REPLAYED_APPROVAL_LIST_UNREADABLE_WARN_TEXT, RULE_NOT_SENT_REJECTED_WARN_TEXT, RULE_NOT_SENT_WARN_TEXT, surfaceEditRefusedOnBlindAsk, surfaceForCurrentSession, surfaceRememberNotApplied, } from './hitl/hitlHostSurface.js';
255
- export * from './hitl/toolApprovalWire.js';
264
+ export { APPROVAL_DENY_SETTLED_BY_WORDS, ASK_ORIGIN_WORDS, RESPOND_DECISIONS, RETRACTED_CARD_DECISION_KIND, RULE_OFFERS_ABSENCE_REASONS, RULE_OFFER_BATCH_MEMBER_KINDS, RULE_OFFER_MATCHES, RULE_OFFER_UNCOVERED_REASONS, TOOL_APPROVAL_FRAME_KEYS_MIRROR, __resetSettledApprovalsForTests, _resetApprovalCardPortForTest, answerCarriage, answerPayloadFor, approvalBoundGrantsDetail, approvalCardFactsOfFrame, approvalCardFactsOfGeneric, approvalCardFactsOfV1, approvalCardFactsOfV1Frame, approvalCardPortFor, approvalCardPortMisses, approvalCardPortMissesFor, approvalIsMandated, approvalPriorCardsDetail, approvalSupersedesDetail, askProbeReasonDetail, claimApprovalCard, classifierNoRulingDetail, decisionAttributionKeyOf, hasApprovalCardPort, hasApprovalCardPortFor, installApprovalCardPort, installApprovalCardPortFor, isFromSubagent, isToolApprovalFrame, isToolApprovalGate, isToolApprovalRespondReplayed, joinApprovalHolder, observeApprovalAnswerCommitted, readApprovalBoundGrants, readApprovalCardWord, readApprovalClassifierNoRuling, readApprovalDenySettledBy, readApprovalMandate, readApprovalRememberRefused, readBoundGrantEntry, readDenialLimitFallback, readRuleOfferSupply, readRuleOffers, readToolApprovalRespondAck, readToolApprovalRespondParking, rememberRefusalOf, structurallyEqual, surfaceApprovalCard, surfaceFsApprovalAndDecide, surfaceToolApprovalFrameAndRespond, toolNameIsFsWrite, toolNameIsShellExec, toolPermissionRequestAskBits } from './hitl/toolApprovalWire.js';
256
265
  export * from './hitl/approvalCardReading.js';
257
266
  export * from './hitl/approvalCardReasons.js';
267
+ export { approvalRequestFrameReadingOf, APPROVAL_REQUEST_FRAME_UNREADABLE_WHYS } from './hitl/approvalRequestFrameReading.js';
258
268
  export { askClassReasonOf, askClassReasonsOf } from './hitl/askClassPair.js';
259
269
  export * from './hitl/editedRuleTextPrecheck.js';
260
270
  export * from './coreValuePorts.js';
@@ -269,7 +279,7 @@ export { ASK_PARK_AUTO_REOPEN_BLOCKS, askParkAutoReopenBlockedContent, askParkAu
269
279
  export { HITL_DECISION_FAMILIES, HITL_DECISION_NOT_APPLIED_CAUSES, HITL_DECISION_NOT_SENT_CAUSES, HITL_DECISION_UNCONFIRMED_CAUSES, sendHitlDecision, hitlDecisionOutcomeContent, } from './hitl/decisionSend.js';
270
280
  export { PLAN_REVIEW_QUESTION_ID_PREFIX, REOPEN_ID_TAIL, approvalCallKey, askGateQuestionId, planReviewQuestionId, liveFrameCallKey, armedKeyFromQuestionId, } from './hitl/gateIdentity.js';
271
281
  export { _resetArmedGateRegistryForTest, _setGateArmedWaitMsForTest, clearArmedGate, gateArmedWaitMs, notePlanReviewAnswered, onGateArmed, planReviewArmedKey, registerArmedGate, registerArmedGateFor, registerArmedGateFromQuestionId, registerArmedGateFromQuestionIdFor, waitForGateArmed, wasGateArmed, wasGateArmedFor, } from './hitl/armedGateRegistry.js';
272
- export * from './hitl/parkOwnership.js';
282
+ export { askQuestionsFromPending, isHitlSafetyErrorLike, pendingRowIsOwnedByThisSession, pendingRowOwnershipOf, } from './hitl/parkOwnership.js';
273
283
  export * from './hitl/parkRowBirthWait.js';
274
284
  export * from './hitl/approvalDecisionNoteAudit.js';
275
285
  export * from './hitl/askParkRowRouting.js';
@@ -291,11 +301,14 @@ export { MODE_ARBITRATION, automaticAnswerVerdict, mandatedApprovalDetailOf, cro
291
301
  export { standingRowsOf, rememberOfferable, localAllowRuleEnforceable, } from './hitl/standingRows.js';
292
302
  export { classifyDecisionRefusal, liveAskPendingReading, decisionRefusalClosesOut, undeliverableDecisionContent, decideRowUnrevivableNotice, decisionRefusalAskReading, readDecisionRefusalReading, } from './hitl/decisionRefusal.js';
293
303
  export { decisionGrantChangedContent } from './hitl/decisionConflict.js';
304
+ export { decideFailureNote } from './decideFailureNote.js';
305
+ export { decisionAnswerInvalidContent } from './hitl/decisionConflict.js';
294
306
  export { noAllowCauseOf } from './hitl/noAllowCause.js';
295
307
  export { policyDenyReason } from './hitl/frameRouter.js';
296
308
  export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, allowRuleShadowSentence, } from './hitl/allowRuleShadow.js';
297
309
  export { projectCrashConverged } from './hitl/crashConverged.js';
298
310
  export { checkpointQueueRowSortOf } from './hitl/approvalQueueRow.js';
311
+ export { subagentSourceSessionOf } from './hitl/subagentSource.js';
299
312
  export * from './hitl/crashConvergedNotice.js';
300
313
  export { approvalCompleteParked } from './hitl/approvalCompleteParked.js';
301
314
  export { approvalCompleteCauseOf } from './hitl/approvalEndingCause.js';
@@ -323,6 +336,8 @@ export * from './agentSession/contract.js';
323
336
  export * from './agentSession/backgroundView.js';
324
337
  export { readAssistantInbox } from './assistantInbox.js';
325
338
  export { checkpointRowVerdictOf } from './checkpointRowVerdict.js';
339
+ export { checkpointRowBarOf, checkpointRowBarSentence } from './checkpointRowVerdict.js';
340
+ export { parkedUnresumableRowsOf, parkedUnresumableLine } from './hitl/parkedUnresumable.js';
326
341
  export { checkpointRequirementsDamagedOf } from './checkpointRowVerdict.js';
327
342
  export { READ_CREDENTIAL_NOT_ACCEPTED_NOTICE, isReadCredentialRefusal } from './readCredentialRefusal.js';
328
343
  export { readEngineAgentRegistry, isEngineAgentRegistryListingSuperseded } from './agentSession/engineAgentRegistryRead.js';
@@ -358,5 +373,5 @@ export { PROJECT_MEMORY_WORDS, projectMemoryOf, observedProjectMemoryCapability,
358
373
  export { sessionRulesChildrenReadLiveOf } from './sessionRulesChildrenReadLive.js';
359
374
  export { scenarioSkillsOf, observedScenarioSkillsCapability } from './scenarioSkills.js';
360
375
  export { observedApprovalFrameFamilies, approvalFrameFamiliesDeclaration } from './approvalFrameFamilies.js';
361
- export { sessionEngineBindingFor, commitSessionEngine, readSessionEngine, sessionDispatchTarget } from './sessionEngine.js';
376
+ export { sessionEngineBindingFor, commitSessionEngine, readSessionEngine, sessionDispatchTarget, sessionDispatchRefusedFor } from './sessionEngine.js';
362
377
  export { foldSessionPlacement } from './deviceRebind.js';
@@ -23,6 +23,7 @@ export interface LiveModelCatalog {
23
23
  droppedEntries?: readonly LiveModelDroppedEntry[];
24
24
  candidateRejected?: unknown;
25
25
  modelPlane?: {} | null;
26
+ aliases?: {} | null;
26
27
  }
27
28
  export declare function setLiveModelCatalog(next: LiveModelCatalog | null): void;
28
29
  export declare function setLiveModelCatalogRefresher(fn: (() => Promise<LiveModelCatalog | null>) | null): void;
@@ -51,12 +52,12 @@ export declare function effortLevelHonored(reading: EffortLevelsReading, level:
51
52
  export declare function liveDefaultModelName(): string | null;
52
53
  export type ModelAcceptanceReading = {
53
54
  readonly verdict: 'accepted';
54
- readonly why: 'listed';
55
+ readonly why: 'listed' | 'aliased';
55
56
  readonly model: string;
56
57
  readonly defaultModel?: string;
57
58
  } | {
58
59
  readonly verdict: 'refused';
59
- readonly why: 'not_listed' | 'disabled';
60
+ readonly why: 'not_listed' | 'disabled' | 'not_at_mentionable';
60
61
  readonly model: string;
61
62
  readonly defaultModel?: string;
62
63
  } | {
@@ -118,6 +119,7 @@ export type ModelPlaneReading = {
118
119
  readonly kind: 'unreadable';
119
120
  };
120
121
  export declare function modelPlaneOf(catalog?: LiveModelCatalog | null): ModelPlaneReading;
122
+ export declare function modelPlaneSentence(reading: ModelPlaneReading, lang?: UiLanguage): string | undefined;
121
123
  export declare function modelCandidateRejectedContent(reading: ModelCandidateRejectedReading, lang?: UiLanguage): string | undefined;
122
124
  export interface RoutePairingVerdict {
123
125
  verdict: 'ok' | 'broken' | 'unknown';
@@ -189,6 +189,45 @@ function rowIdentityUnreadable(row) {
189
189
  return true;
190
190
  }
191
191
  }
192
+ function aliasesOf(cat) {
193
+ const ALIASES_ABSENT = Object.freeze({ kind: 'absent' });
194
+ const ALIASES_UNREADABLE = Object.freeze({ kind: 'unreadable' });
195
+ try {
196
+ const d = Object.getOwnPropertyDescriptor(cat, 'aliases');
197
+ if (d === undefined)
198
+ return ALIASES_ABSENT;
199
+ if (!Object.hasOwn(d, 'value'))
200
+ return ALIASES_UNREADABLE;
201
+ const raw = d.value;
202
+ if (raw === undefined)
203
+ return ALIASES_ABSENT;
204
+ if (!Array.isArray(raw))
205
+ return ALIASES_UNREADABLE;
206
+ const n = ownDataOf(raw, 'length');
207
+ if (typeof n !== 'number' || !Number.isSafeInteger(n) || n < 0)
208
+ return ALIASES_UNREADABLE;
209
+ const entries = [];
210
+ for (let i = 0; i < n; i += 1) {
211
+ const ed = Object.getOwnPropertyDescriptor(raw, String(i));
212
+ if (ed === undefined || !Object.hasOwn(ed, 'value'))
213
+ return ALIASES_UNREADABLE;
214
+ const e = ed.value;
215
+ if (e === null || typeof e !== 'object' || !isPlainRecord(e))
216
+ return ALIASES_UNREADABLE;
217
+ const nd = Object.getOwnPropertyDescriptor(e, 'name');
218
+ if (nd === undefined || !Object.hasOwn(nd, 'value') || typeof nd.value !== 'string' || nd.value.length === 0)
219
+ return ALIASES_UNREADABLE;
220
+ const bit = atMentionBitOf(e);
221
+ if (bit === 'malformed' || bit === 'unreadable')
222
+ return ALIASES_UNREADABLE;
223
+ appendOwnElement(entries, Object.freeze({ name: nd.value, bit }));
224
+ }
225
+ return Object.freeze({ kind: 'listed', entries: Object.freeze(entries) });
226
+ }
227
+ catch {
228
+ return ALIASES_UNREADABLE;
229
+ }
230
+ }
192
231
  export function modelAcceptanceOf(model, catalog = getLiveModelCatalog()) {
193
232
  const name = typeof model === 'string' && model.length > 0 ? model : undefined;
194
233
  try {
@@ -211,22 +250,45 @@ export function modelAcceptanceOf(model, catalog = getLiveModelCatalog()) {
211
250
  defaultModel = undefined;
212
251
  }
213
252
  const withDefault = defaultModel === undefined ? {} : { defaultModel };
253
+ const cannotSay = () => Object.freeze({ verdict: 'unknown', why: 'catalog_unreadable', model: name });
214
254
  const reservedReading = () => Object.freeze({ verdict: 'unknown', why: 'reserved_word', model: name, ...withDefault });
215
- if (reserved)
216
- return reservedReading();
217
- const row = liveModelRowOf(catalog, name);
218
- if (row !== undefined) {
219
- const normalized = ownDataOf(row, 'name');
220
- if (typeof normalized !== 'string' || normalized.length === 0)
221
- return Object.freeze({ verdict: 'unknown', why: 'catalog_unreadable', model: name });
222
- if (isReservedModelWord(normalized))
255
+ const notMentionable = () => Object.freeze({ verdict: 'refused', why: 'not_at_mentionable', model: name, ...withDefault });
256
+ const byRow = (row) => {
257
+ if (ownDataOf(row, 'enabled') === false)
258
+ return Object.freeze({ verdict: 'refused', why: 'disabled', model: name, ...withDefault });
259
+ const bit = atMentionBitOf(row);
260
+ if (bit === 'refused')
261
+ return notMentionable();
262
+ if (bit === 'malformed' || bit === 'unreadable')
263
+ return cannotSay();
264
+ return Object.freeze({ verdict: 'accepted', why: 'listed', model: name, ...withDefault });
265
+ };
266
+ const aliases = aliasesOf(catalog);
267
+ if (aliases.kind === 'absent') {
268
+ if (reserved)
223
269
  return reservedReading();
224
- return ownDataOf(row, 'enabled') === false
225
- ? Object.freeze({ verdict: 'refused', why: 'disabled', model: name, ...withDefault })
226
- : Object.freeze({ verdict: 'accepted', why: 'listed', model: name, ...withDefault });
270
+ const row = liveModelRowOf(catalog, name);
271
+ if (row !== undefined) {
272
+ const normalized = ownDataOf(row, 'name');
273
+ if (typeof normalized !== 'string' || normalized.length === 0)
274
+ return cannotSay();
275
+ if (isReservedModelWord(normalized))
276
+ return reservedReading();
277
+ return byRow(row);
278
+ }
279
+ }
280
+ else {
281
+ const row = rows.find((r) => ownDataOf(r, 'name') === name);
282
+ if (row !== undefined)
283
+ return byRow(row);
284
+ if (aliases.kind === 'unreadable')
285
+ return cannotSay();
286
+ const alias = aliases.entries.find((a) => a.name === name);
287
+ if (alias !== undefined)
288
+ return alias.bit === 'refused' ? notMentionable() : Object.freeze({ verdict: 'accepted', why: 'aliased', model: name, ...withDefault });
227
289
  }
228
290
  if (rows.some(rowIdentityUnreadable))
229
- return Object.freeze({ verdict: 'unknown', why: 'catalog_unreadable', model: name });
291
+ return cannotSay();
230
292
  const dropped = droppedModelEntriesOf(catalog);
231
293
  if (droppedDisabledNamed(dropped, name))
232
294
  return Object.freeze({ verdict: 'refused', why: 'disabled', model: name, ...withDefault });
@@ -246,7 +308,7 @@ export function modelNotServedNotice(reading, lang) {
246
308
  if (ownDataOf(reading, 'verdict') !== 'refused')
247
309
  return undefined;
248
310
  const why = ownDataOf(reading, 'why');
249
- if (why !== 'not_listed' && why !== 'disabled')
311
+ if (why !== 'not_listed' && why !== 'disabled' && why !== 'not_at_mentionable')
250
312
  return undefined;
251
313
  const model = ownDataOf(reading, 'model');
252
314
  const shown = typeof model === 'string' && model.length > 0 ? quoteUntrustedForSentence(model, NOT_SERVED_NAME_MAX) : undefined;
@@ -254,6 +316,11 @@ export function modelNotServedNotice(reading, lang) {
254
316
  return undefined;
255
317
  const dm = ownDataOf(reading, 'defaultModel');
256
318
  const fallback = typeof dm === 'string' && dm.length > 0 ? quoteUntrustedForSentence(dm, NOT_SERVED_NAME_MAX) : undefined;
319
+ if (why === 'not_at_mentionable') {
320
+ return fallback === undefined
321
+ ? renderMessage(msg('model.notMentionable.noDefault', { model: shown }), lang)
322
+ : renderMessage(msg('model.notMentionable.withDefault', { model: shown, default: fallback }), lang);
323
+ }
257
324
  return fallback === undefined
258
325
  ? renderMessage(msg('model.notServed.noDefault', { model: shown }), lang)
259
326
  : renderMessage(msg('model.notServed.withDefault', { model: shown, default: fallback }), lang);
@@ -420,6 +487,24 @@ export function modelPlaneOf(catalog = getLiveModelCatalog()) {
420
487
  return unreadable;
421
488
  }
422
489
  }
490
+ export function modelPlaneSentence(reading, lang) {
491
+ try {
492
+ if (reading === null || typeof reading !== 'object' || Array.isArray(reading))
493
+ return undefined;
494
+ if (ownDataOf(reading, 'kind') !== 'read')
495
+ return undefined;
496
+ const served = ownDataOf(reading, 'servedTable');
497
+ const stance = ownDataOf(reading, 'catalog');
498
+ if (served !== 'env')
499
+ return undefined;
500
+ if (stance !== 'absent' && stance !== 'refused')
501
+ return undefined;
502
+ return renderMessage(msg('model.catalog.envServed', { stance }), lang);
503
+ }
504
+ catch {
505
+ return undefined;
506
+ }
507
+ }
423
508
  const CONFIG_DOMAIN_WORD = /^[a-z][a-z0-9_.-]{0,63}$/;
424
509
  export function modelCandidateRejectedContent(reading, lang) {
425
510
  try {
@@ -467,6 +552,7 @@ export function readLiveModelCatalog(body) {
467
552
  const droppedKey = envelopeKey(body, 'droppedEntries');
468
553
  const candidateKey = envelopeKey(body, 'candidateRejected');
469
554
  const planeKey = envelopeKey(body, 'modelPlane');
555
+ const aliasesKey = envelopeKey(body, 'aliases');
470
556
  const raw = modelsKey.present ? modelsKey.value : undefined;
471
557
  if (!Array.isArray(raw))
472
558
  return unreadableCatalog('models_not_array');
@@ -479,7 +565,7 @@ export function readLiveModelCatalog(body) {
479
565
  let unreadableRows = 0;
480
566
  for (let i = 0; i < len; i += 1) {
481
567
  const d = Object.getOwnPropertyDescriptor(raw, String(i));
482
- const row = d !== undefined && Object.hasOwn(d, 'value') ? liveModelRowCopy(d.value) : undefined;
568
+ const row = d !== undefined && Object.hasOwn(d, 'value') ? modelRowTransitCopy(d.value) : undefined;
483
569
  if (row === undefined || names.has(row.name)) {
484
570
  unreadableRows += 1;
485
571
  continue;
@@ -504,12 +590,60 @@ export function readLiveModelCatalog(body) {
504
590
  out.candidateRejected = frozenJsonCopyOf(candidateKey.value) ?? null;
505
591
  if (planeKey.present && planeKey.value !== undefined)
506
592
  out.modelPlane = frozenJsonCopyOf(planeKey.value) ?? null;
593
+ if (aliasesKey.present && aliasesKey.value !== undefined)
594
+ out.aliases = aliasesTransitCopy(aliasesKey.value);
507
595
  return Object.freeze({ kind: 'read', catalog: Object.freeze(out), unreadableRows, ...(defaultModelMalformed ? { defaultModelMalformed: true } : {}) });
508
596
  }
509
597
  catch {
510
598
  return unreadableCatalog('unreadable');
511
599
  }
512
600
  }
601
+ function aliasesTransitCopy(v) {
602
+ const copy = frozenJsonCopyOf(v);
603
+ if (copy === undefined)
604
+ return null;
605
+ const before = aliasesOf({ aliases: v });
606
+ const after = aliasesOf({ aliases: copy });
607
+ if (before.kind !== after.kind)
608
+ return null;
609
+ if (before.kind === 'listed' && after.kind === 'listed') {
610
+ if (before.entries.length !== after.entries.length)
611
+ return null;
612
+ for (let i = 0; i < before.entries.length; i += 1) {
613
+ const b = before.entries[i];
614
+ const a = after.entries[i];
615
+ if (b === undefined || a === undefined || b.name !== a.name || b.bit !== a.bit)
616
+ return null;
617
+ }
618
+ }
619
+ return copy;
620
+ }
621
+ const ACCEPTANCE_ROW_KEYS = Object.freeze(['id', 'enabled', 'atMentionable']);
622
+ function modelRowTransitCopy(row) {
623
+ const copy = liveModelRowCopy(row);
624
+ if (copy === undefined || row === null || typeof row !== 'object')
625
+ return copy;
626
+ let restated;
627
+ for (const key of ACCEPTANCE_ROW_KEYS) {
628
+ if (Object.hasOwn(copy, key))
629
+ continue;
630
+ let value;
631
+ try {
632
+ const d = Object.getOwnPropertyDescriptor(row, key);
633
+ if (d === undefined)
634
+ continue;
635
+ value = Object.hasOwn(d, 'value') ? (d.value === undefined ? undefined : (frozenJsonCopyOf(d.value) ?? null)) : null;
636
+ }
637
+ catch {
638
+ value = null;
639
+ }
640
+ if (value === undefined)
641
+ continue;
642
+ restated ??= { ...copy };
643
+ Object.defineProperty(restated, key, { value, enumerable: true, writable: true, configurable: true });
644
+ }
645
+ return restated === undefined ? copy : Object.freeze(restated);
646
+ }
513
647
  function droppedEntriesCopy(v) {
514
648
  if (!Array.isArray(v))
515
649
  return frozenJsonCopyOf(v) ?? null;
@@ -544,23 +678,27 @@ export function liveDefaultModelOf(catalog = getLiveModelCatalog()) {
544
678
  return Object.freeze({ kind: 'unknown', why: 'unreadable' });
545
679
  }
546
680
  }
681
+ function atMentionBitOf(o) {
682
+ const d = Object.getOwnPropertyDescriptor(o, 'atMentionable');
683
+ if (d === undefined)
684
+ return 'not_governed';
685
+ if (!(Object.hasOwn(d, 'value')))
686
+ return 'unreadable';
687
+ if (d.value === undefined)
688
+ return 'not_governed';
689
+ if (d.value === true)
690
+ return 'allowed';
691
+ if (d.value === false)
692
+ return 'refused';
693
+ return 'malformed';
694
+ }
547
695
  export function atMentionOf(model, catalog = getLiveModelCatalog()) {
548
696
  try {
549
697
  const target = targetRowOf(model, catalog);
550
698
  if (target.kind !== 'row')
551
699
  return Object.freeze({ kind: 'unknown', why: target.why });
552
- const d = Object.getOwnPropertyDescriptor(target.row, 'atMentionable');
553
- if (d === undefined)
554
- return Object.freeze({ kind: 'not_governed' });
555
- if (!(Object.hasOwn(d, 'value')))
556
- return Object.freeze({ kind: 'unknown', why: 'unreadable' });
557
- if (d.value === undefined)
558
- return Object.freeze({ kind: 'not_governed' });
559
- if (d.value === true)
560
- return Object.freeze({ kind: 'allowed' });
561
- if (d.value === false)
562
- return Object.freeze({ kind: 'refused' });
563
- return Object.freeze({ kind: 'unknown', why: 'malformed' });
700
+ const bit = atMentionBitOf(target.row);
701
+ return bit === 'malformed' || bit === 'unreadable' ? Object.freeze({ kind: 'unknown', why: bit }) : Object.freeze({ kind: bit });
564
702
  }
565
703
  catch {
566
704
  return Object.freeze({ kind: 'unknown', why: 'unreadable' });
@@ -0,0 +1,75 @@
1
+ import { type EngineIdentityView } from './engineIdentity.js';
2
+ import type { UiLanguage } from './env/uiLanguage.js';
3
+ export interface LocalEnginePlanFingerprint {
4
+ readonly group: string;
5
+ readonly fingerprint: string;
6
+ }
7
+ export interface LocalEngineAnchorReading {
8
+ readonly pid: number;
9
+ readonly port: number;
10
+ readonly identity: EngineIdentityView;
11
+ readonly planFingerprints?: readonly LocalEnginePlanFingerprint[];
12
+ readonly logPath?: string;
13
+ }
14
+ export interface LocalEnginePlanDrift {
15
+ readonly group: string;
16
+ readonly drift: 'same' | 'different' | 'unknown';
17
+ }
18
+ export type LocalEngineAnchorPidState = 'gone' | 'alive' | 'recycled' | 'unknown';
19
+ export type LocalEngineDataRootRelation = 'same' | 'different' | 'unknown';
20
+ export interface LocalEngineJudgeInput {
21
+ readonly anchor: unknown;
22
+ readonly anchorPid: LocalEngineAnchorPidState;
23
+ readonly health: object | null;
24
+ readonly dataRootRelation: LocalEngineDataRootRelation;
25
+ readonly ownVersion: string | undefined;
26
+ }
27
+ export interface LocalEngineRef {
28
+ readonly pid: number;
29
+ readonly port: number;
30
+ readonly identity: EngineIdentityView;
31
+ readonly version?: string;
32
+ }
33
+ export interface LocalEngineAnchoredProcess {
34
+ readonly pid: number;
35
+ readonly startedAt?: number;
36
+ }
37
+ export type LocalEngineVerdict = {
38
+ readonly kind: 'none';
39
+ readonly blocked?: 'high-water-unreadable';
40
+ } | {
41
+ readonly kind: 'unanswered';
42
+ readonly pid: number;
43
+ readonly startedAt?: number;
44
+ readonly reason: 'no-answer' | 'unverifiable';
45
+ } | {
46
+ readonly kind: 'stranger';
47
+ readonly mismatch: 'pid' | 'generation' | 'data-root';
48
+ readonly anchored: LocalEngineAnchoredProcess | null;
49
+ } | {
50
+ readonly kind: 'draining';
51
+ readonly engine: LocalEngineRef;
52
+ readonly deadlineAt: number;
53
+ } | {
54
+ readonly kind: 'attach' | 'version-unknown';
55
+ readonly engine: LocalEngineRef;
56
+ } | {
57
+ readonly kind: 'ahead';
58
+ readonly engine: LocalEngineRef;
59
+ readonly running: string;
60
+ readonly own: string;
61
+ readonly servesWhileWaiting: boolean;
62
+ } | {
63
+ readonly kind: 'behind';
64
+ readonly engine: LocalEngineRef | null;
65
+ readonly running: string;
66
+ readonly own: string;
67
+ readonly source: 'running' | 'high-water';
68
+ };
69
+ export type LocalEngineUpgradePath = 'cli-update' | 'app-update';
70
+ export declare function localEngineAnchorOf(raw: unknown): LocalEngineAnchorReading | null;
71
+ export declare function localEnginePlanDriftOf(anchor: unknown, ownPlan: readonly LocalEnginePlanFingerprint[]): readonly LocalEnginePlanDrift[];
72
+ export declare function sameLocalEngineInstance(x: object, y: object, anchorPidAlive: boolean): boolean;
73
+ export declare function judgeLocalEngine(input: LocalEngineJudgeInput): LocalEngineVerdict;
74
+ export declare function localEngineLaneOf(verdict: LocalEngineVerdict): 'self-spawned' | undefined;
75
+ export declare function localEngineVerdictSentence(verdict: LocalEngineVerdict, upgrade: LocalEngineUpgradePath | undefined, lang?: UiLanguage): string | undefined;