@sema-agent/client-core 0.105.0 → 0.106.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 (132) hide show
  1. package/CHANGELOG.md +220 -0
  2. package/README.md +26 -11
  3. package/dist/adapt/arms.js +10 -1
  4. package/dist/adapter/activeRunSelfHeal.d.ts +13 -2
  5. package/dist/adapter/activeRunSelfHeal.js +80 -7
  6. package/dist/adapter/downstream/eventToSdkMessage.d.ts +0 -5
  7. package/dist/adapter/downstream/eventToSdkMessage.js +20 -19
  8. package/dist/adapter/downstream/terminalToSdkResult.js +2 -3
  9. package/dist/adapter/downstream/wiringManifestView.d.ts +1 -3
  10. package/dist/adapter/downstream/wiringManifestView.js +0 -1
  11. package/dist/adapter/runStream.js +3 -4
  12. package/dist/approvalReachWire.d.ts +1 -0
  13. package/dist/approvalReachWire.js +4 -1
  14. package/dist/approvalSeat.d.ts +21 -0
  15. package/dist/approvalSeat.js +73 -0
  16. package/dist/assistantInbox.d.ts +2 -0
  17. package/dist/assistantInbox.js +3 -0
  18. package/dist/checkpointRowVerdict.d.ts +23 -0
  19. package/dist/checkpointRowVerdict.js +89 -0
  20. package/dist/coreValuePorts.d.ts +12 -1
  21. package/dist/coreValuePorts.js +10 -0
  22. package/dist/decideFailureNote.js +3 -1
  23. package/dist/decideReceipt.d.ts +9 -0
  24. package/dist/decideReceipt.js +29 -1
  25. package/dist/declared/supportFloorDeclared.js +2 -2
  26. package/dist/deviceRebind.d.ts +7 -0
  27. package/dist/deviceRebind.js +39 -5
  28. package/dist/engineAddress.d.ts +3 -0
  29. package/dist/engineAddress.js +25 -0
  30. package/dist/engineDirectory.js +9 -17
  31. package/dist/engineErrorCodes.d.ts +8 -0
  32. package/dist/engineErrorCodes.js +8 -0
  33. package/dist/engineNoticeCodes.d.ts +26 -3
  34. package/dist/engineNoticeCodes.js +52 -7
  35. package/dist/engineRowRef.js +1 -1
  36. package/dist/errorSupplementRoles.js +2 -0
  37. package/dist/eventLeg.d.ts +2 -2
  38. package/dist/eventLeg.js +2 -1
  39. package/dist/fleet/fleetProjection.js +26 -5
  40. package/dist/generated/engineFactTables.d.ts +2 -1
  41. package/dist/generated/engineFactTables.js +3 -1
  42. package/dist/generated/engineNoticeTables.js +19 -4
  43. package/dist/generated/sdkFactTables.d.ts +3 -0
  44. package/dist/generated/sdkFactTables.js +15 -0
  45. package/dist/generated/settingsSchemaFns.d.ts +11 -0
  46. package/dist/generated/settingsSchemaFns.js +2 -1
  47. package/dist/generated/settingsSchemaSafetyMergeSpec.js +1 -1
  48. package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -1
  49. package/dist/generated/settingsSchemaSettingsSources.js +22 -2
  50. package/dist/hitl/approvalLiveFace.d.ts +17 -0
  51. package/dist/hitl/approvalLiveFace.js +35 -0
  52. package/dist/hitl/approvalQueueRow.d.ts +21 -0
  53. package/dist/hitl/approvalQueueRow.js +69 -0
  54. package/dist/hitl/approvalsFeed.d.ts +5 -4
  55. package/dist/hitl/approvalsFeed.js +38 -6
  56. package/dist/hitl/askParkRowRouting.d.ts +4 -3
  57. package/dist/hitl/askParkRowRouting.js +15 -3
  58. package/dist/hitl/automaticAnswerVerdict.js +13 -10
  59. package/dist/hitl/crashConverged.d.ts +5 -1
  60. package/dist/hitl/decisionConflict.js +2 -1
  61. package/dist/hitl/decisionRefusal.js +1 -1
  62. package/dist/hitl/decisionSend.d.ts +1 -0
  63. package/dist/hitl/decisionSend.js +14 -2
  64. package/dist/hitl/frameRouter.js +4 -5
  65. package/dist/hitl/hitlBridge.d.ts +1 -1
  66. package/dist/hitl/hitlBridge.js +26 -5
  67. package/dist/hitl/livePendingAsk.d.ts +5 -0
  68. package/dist/hitl/livePendingAsk.js +6 -1
  69. package/dist/hitl/planReviewCard.d.ts +2 -0
  70. package/dist/hitl/planReviewCard.js +21 -0
  71. package/dist/hitl/planReviewWire.d.ts +2 -2
  72. package/dist/hitl/planReviewWire.js +101 -36
  73. package/dist/hitl/sessionAllowRoute.d.ts +2 -0
  74. package/dist/hitl/sessionAllowRoute.js +7 -0
  75. package/dist/hitl/sessionPolicyWire.d.ts +1 -7
  76. package/dist/hitl/sessionPolicyWire.js +3 -43
  77. package/dist/hitl/subagentSource.d.ts +1 -0
  78. package/dist/hitl/subagentSource.js +13 -0
  79. package/dist/hitl/toolApprovalWire.d.ts +3 -2
  80. package/dist/hitl/toolApprovalWire.js +79 -37
  81. package/dist/hostSettingsSource.d.ts +4 -1
  82. package/dist/hostSettingsSource.js +11 -6
  83. package/dist/hostTurnSettings.d.ts +4 -5
  84. package/dist/hostTurnSettings.js +80 -19
  85. package/dist/i18n/messages.en.d.ts +35 -12
  86. package/dist/i18n/messages.en.js +36 -13
  87. package/dist/i18n/messages.zh.js +38 -13
  88. package/dist/index.d.ts +21 -2
  89. package/dist/index.js +11 -2
  90. package/dist/liveInitToolFace.js +0 -1
  91. package/dist/liveModelCatalog.d.ts +15 -0
  92. package/dist/liveModelCatalog.js +40 -0
  93. package/dist/mcpWireCaps.js +1 -1
  94. package/dist/modelCapabilityProbe.js +66 -33
  95. package/dist/ownKey.d.ts +0 -1
  96. package/dist/ownKey.js +0 -2
  97. package/dist/permissionsDeclaration.d.ts +2 -2
  98. package/dist/permissionsDeclaration.js +12 -14
  99. package/dist/projectSeed.d.ts +39 -0
  100. package/dist/projectSeed.js +80 -0
  101. package/dist/promptDelivery.js +1 -1
  102. package/dist/replayBody.d.ts +7 -6
  103. package/dist/replayBody.js +62 -7
  104. package/dist/request/taskRequest.js +3 -4
  105. package/dist/ruleCompileVerdict.d.ts +0 -2
  106. package/dist/ruleCompileVerdict.js +0 -31
  107. package/dist/ruleRefusalSentence.js +0 -3
  108. package/dist/runReattachPolicy.d.ts +3 -0
  109. package/dist/runReattachPolicy.js +15 -2
  110. package/dist/runTerminal.js +30 -8
  111. package/dist/sandboxWire.d.ts +0 -3
  112. package/dist/sandboxWire.js +0 -9
  113. package/dist/seam.d.ts +14 -7
  114. package/dist/seam.js +12 -0
  115. package/dist/seatContract.d.ts +57 -7
  116. package/dist/seatContract.js +132 -3
  117. package/dist/serverSupportRange.d.ts +18 -0
  118. package/dist/serverSupportRange.js +25 -0
  119. package/dist/sessionEngine.d.ts +156 -0
  120. package/dist/sessionEngine.js +464 -0
  121. package/dist/sessionMap.d.ts +11 -1
  122. package/dist/sessionMap.js +35 -9
  123. package/dist/sessionMemorySync.d.ts +31 -0
  124. package/dist/sessionMemorySync.js +95 -0
  125. package/dist/sessionRowTag.d.ts +4 -0
  126. package/dist/sessionRowTag.js +18 -0
  127. package/dist/settingsLayerAdmission.d.ts +1 -0
  128. package/dist/settingsLayerAdmission.js +4 -1
  129. package/dist/toolResult.js +1 -1
  130. package/dist/wireRefusalCopy.js +2 -6
  131. package/docs/INTEGRATION-CLIENTS.md +1022 -16
  132. package/package.json +5 -5
@@ -122,6 +122,11 @@ declare const EN: {
122
122
  'session.devices.probeFailedTransport': string;
123
123
  'session.devices.probeFailedRefused': string;
124
124
  'session.devices.probeFailedUnreadable': string;
125
+ 'session.engine.selfNotLocal': string;
126
+ 'session.engine.dispatch.notWired': string;
127
+ 'session.engine.dispatch.scopeMismatch': string;
128
+ 'session.engine.dispatch.scopeUnproven': string;
129
+ 'session.engine.dispatch.unresolved': string;
125
130
  'config.cloudLogin.accessDenied': string;
126
131
  'config.cloudLogin.expiredToken': string;
127
132
  'config.cloudLogin.invalidGrant': string;
@@ -141,6 +146,7 @@ declare const EN: {
141
146
  'config.engineTarget.loginFailed': string;
142
147
  'config.engineTarget.storageUnavailable': string;
143
148
  'config.engineTarget.noLocalRuntime': string;
149
+ 'config.engineTarget.serverBelowSupportFloor': string;
144
150
  'config.engineTarget.input': string;
145
151
  'config.engineTarget.unknown': string;
146
152
  'onboard.probe.endpointReachable': string;
@@ -240,6 +246,7 @@ declare const EN: {
240
246
  'approval.settle.cause.broadcastLost': string;
241
247
  'approval.settle.cause.streamDisconnected': string;
242
248
  'approval.settle.cause.undeliverable': string;
249
+ 'approval.decide.requiresBinding': string;
243
250
  'approval.decision.grantChanged': string;
244
251
  'approval.decision.settledElsewhereContrary.deniedFirst': string;
245
252
  'approval.decision.settledElsewhereContrary.approvedFirst': string;
@@ -295,6 +302,13 @@ declare const EN: {
295
302
  'session.crashConverged.cause.neutral': string;
296
303
  'session.crashConverged.cause.withClause': string;
297
304
  'session.corrupt.content': string;
305
+ 'session.projectSeed.invalid': string;
306
+ 'session.projectSeed.invalidAt': string;
307
+ 'session.projectSeed.laneNotIsolated': string;
308
+ 'session.projectSeed.seedFixed': string;
309
+ 'session.projectSeed.boundElsewhere': string;
310
+ 'session.projectSeed.laneUnknown': string;
311
+ 'session.projectSeed.missing': string;
298
312
  'resume.reopen.first.envFailed': string;
299
313
  'resume.reopen.first.toolUnavailable': string;
300
314
  'resume.reopen.first.toolContractMismatch': string;
@@ -394,6 +408,8 @@ declare const EN: {
394
408
  'session.selfHeal.injected.handedOffWatch': string;
395
409
  'session.selfHeal.injected.interruptedFinishing': string;
396
410
  'session.selfHeal.injected.notDelivered': string;
411
+ 'session.selfHeal.injected.redundant': string;
412
+ 'session.selfHeal.injected.deferred': string;
397
413
  'session.selfHeal.decisionInFlight': string;
398
414
  'session.selfHeal.parkedOn.ask': string;
399
415
  'session.selfHeal.parkedOn.plan': string;
@@ -545,6 +561,11 @@ declare const EN: {
545
561
  'approval.boundGrants.denyPart.one': string;
546
562
  'approval.boundGrants.denyPart.other': string;
547
563
  'approval.boundGrants.activates': string;
564
+ 'approval.boundGrants.allowPart.named.one': string;
565
+ 'approval.boundGrants.allowPart.named.other': string;
566
+ 'approval.boundGrants.denyPart.named.one': string;
567
+ 'approval.boundGrants.denyPart.named.other': string;
568
+ 'approval.boundGrants.more': string;
548
569
  'session.fileHistoryRefusal.notYet': string;
549
570
  'session.fileHistoryRefusal.notSaid': string;
550
571
  'session.fileHistoryRefusal.unrecognized': string;
@@ -556,6 +577,12 @@ declare const EN: {
556
577
  'session.memorySync.parkedUnnamed.other': string;
557
578
  'session.memorySync.wayOut.deleteCursor': string;
558
579
  'session.memorySync.wayOut.unrecognized': string;
580
+ 'session.memorySyncTrigger.notConfigured': string;
581
+ 'session.memorySyncTrigger.noSettledRun': string;
582
+ 'session.memorySyncTrigger.runUnobserved': string;
583
+ 'session.memorySyncTrigger.memoryNotMounted': string;
584
+ 'session.memorySyncTrigger.noLeaf': string;
585
+ 'session.memorySyncTrigger.unobtainable': string;
559
586
  'session.hostSettings.memorySwitchMalformed': string;
560
587
  'session.hostSettings.fileHistoryRestoreConflict': string;
561
588
  'session.hostSettings.projectionUnchecked': string;
@@ -565,11 +592,14 @@ declare const EN: {
565
592
  'session.hostSettings.layerNotLoaded.hold.unreadable': string;
566
593
  'session.hostSettings.layerNotLoaded.hold.rejected': string;
567
594
  'session.hostSettings.layerNotLoaded.sent.unreadable': string;
595
+ 'session.hostSettings.layerNotLoaded.restrictions.hold': string;
596
+ 'session.hostSettings.layerNotLoaded.restrictions.sent': string;
568
597
  'session.hostSettings.layer.policySettings': string;
569
598
  'session.hostSettings.layer.userSettings': string;
570
599
  'session.hostSettings.layer.projectSettings': string;
571
600
  'session.hostSettings.layer.localSettings': string;
572
601
  'session.hostSettings.layer.flagSettings': string;
602
+ 'session.hostSettings.layer.foreignProjectSettings': string;
573
603
  'session.hostSettings.heldPrevious': string;
574
604
  'session.hostSettings.styleMissing': string;
575
605
  'session.hostSettings.styleSafeMode': string;
@@ -603,7 +633,6 @@ declare const EN: {
603
633
  'rules.refusal.list.more': string;
604
634
  'rules.refusal.reason.toolName': string;
605
635
  'rules.refusal.reason.homePath': string;
606
- 'rules.refusal.reason.neverMatches': string;
607
636
  'rules.nearMiss.sentence.one': string;
608
637
  'rules.nearMiss.sentence.other': string;
609
638
  'rules.nearMiss.reason': string;
@@ -734,17 +763,6 @@ declare const EN: {
734
763
  'notice.capability.hands.unknownRosterUnreadable': string;
735
764
  'notice.capability.hands.unknownMountConditionAbsent': string;
736
765
  'rules.sessionPolicy.tighten.written': string;
737
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.counts': string;
738
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unreadable': string;
739
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unseen': string;
740
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.one': string;
741
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.many': string;
742
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.one': string;
743
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.many': string;
744
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.one': string;
745
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.many': string;
746
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.two': string;
747
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.three': string;
748
766
  'rules.sessionPolicy.tighten.conflict': string;
749
767
  'rules.sessionPolicy.tighten.loosenForbidden': string;
750
768
  'rules.sessionPolicy.tighten.capabilityAbsent': string;
@@ -1101,6 +1119,11 @@ declare const EN: {
1101
1119
  'approval.planReview.askAgain.notCarried': string;
1102
1120
  'approval.planReview.askAgain.unknown': string;
1103
1121
  'approval.planReview.askAgain.withNote': string;
1122
+ 'approval.planReview.decision.notSent': string;
1123
+ 'approval.planReview.decision.refused': string;
1124
+ 'approval.planReview.decision.cardMissing': string;
1125
+ 'approval.planReview.decision.gateMoved': string;
1126
+ 'approval.planReview.decision.gateUntrusted': string;
1104
1127
  'approval.planReview.option.askAgain.label': string;
1105
1128
  'approval.planReview.option.askAgain.description': string;
1106
1129
  };
@@ -122,6 +122,11 @@ const EN = {
122
122
  'session.devices.probeFailedTransport': "Couldn't reach the engine to check for a remote-control lane — try again",
123
123
  'session.devices.probeFailedRefused': 'The engine refused the device-list check — try again',
124
124
  'session.devices.probeFailedUnreadable': "The engine's device list couldn't be read — try again",
125
+ 'session.engine.selfNotLocal': "This session runs on the engine this app started on this device, but it was started as a Cloud session. Nothing was changed — check how this session was opened.",
126
+ 'session.engine.dispatch.notWired': "This session's engine isn't connected right now, so nothing was sent. Connect to that engine, then try again.",
127
+ 'session.engine.dispatch.scopeMismatch': "This session belongs to an engine in a different space from the one you're signed in to, so nothing was sent. Switch to that space, then try again.",
128
+ 'session.engine.dispatch.scopeUnproven': "Your current sign-in can't be confirmed to reach this session's engine, so nothing was sent. Sign in to that engine's space (or connect to the engine directly), then try again.",
129
+ 'session.engine.dispatch.unresolved': "This session's engine isn't known yet, so nothing was sent. Choose the engine for this session once, then try again.",
125
130
  'config.cloudLogin.accessDenied': 'Sign-in was declined.',
126
131
  'config.cloudLogin.expiredToken': 'The sign-in code expired before it was approved — start again.',
127
132
  'config.cloudLogin.invalidGrant': 'The Cloud sign-in can no longer be renewed — sign in again.',
@@ -141,6 +146,7 @@ const EN = {
141
146
  'config.engineTarget.loginFailed': 'Sign-in failed.',
142
147
  'config.engineTarget.storageUnavailable': "Secure storage isn't available on this device, so the Cloud credential can't be kept. Nothing was changed.",
143
148
  'config.engineTarget.noLocalRuntime': "There's no local engine on this device.",
149
+ 'config.engineTarget.serverBelowSupportFloor': 'This server reports version {version}, older than {floor} — the oldest server this client supports. Requests to it may be refused or not behave as described; connect to a server at {floor} or newer.',
144
150
  'config.engineTarget.input': "The request wasn't in the expected shape, so nothing was changed.",
145
151
  'config.engineTarget.unknown': "The engine switch didn't go through.",
146
152
  'onboard.probe.endpointReachable': '{method} {path} → {status} (endpoint reachable)',
@@ -240,6 +246,7 @@ const EN = {
240
246
  'approval.settle.cause.broadcastLost': 'it never reached any open connection',
241
247
  'approval.settle.cause.streamDisconnected': 'the connection carrying this card dropped',
242
248
  'approval.settle.cause.undeliverable': 'it could not be delivered to any approval surface',
249
+ 'approval.decide.requiresBinding': 'This decision was sent without the binding that ties it to the exact action on the approval card, so the engine refused it · Nothing was decided and the approval is still pending · Fetch the pending approvals again and decide from the card as it is listed now; if the listed card itself carries no binding, it cannot be decided here — cancel the run or let the approval expire',
243
250
  'approval.decision.grantChanged': 'The engine refused this approval because the skill grant it was bound to has changed since the card was shown · Nothing was decided and the request is still waiting, but approving it again will be refused the same way · Deny this request so the model can activate the skill again',
244
251
  'approval.decision.settledElsewhereContrary.deniedFirst': 'This request was already answered elsewhere and denied, so your approval did not take effect.',
245
252
  'approval.decision.settledElsewhereContrary.approvedFirst': 'This request was already answered elsewhere and approved, so your denial did not take effect.',
@@ -295,6 +302,13 @@ const EN = {
295
302
  'session.crashConverged.cause.neutral': 'the decision converged automatically',
296
303
  'session.crashConverged.cause.withClause': '{clause}, and the decision converged automatically',
297
304
  'session.corrupt.content': "This session's saved history cannot be read — its stored log is damaged — so the engine cannot open this session. Retrying will not help: whoever operates this engine has to repair or remove that stored log. Until then, continue in a new session.",
305
+ 'session.projectSeed.invalid': 'The project package was refused: it is not a usable project archive. It has to be a gzip tar of the project folder within the size and entry limits, holding only regular files, folders and links that stay inside the folder, each path once, and nothing named .git or attachments at the top level. Fix the folder and upload it again.',
306
+ 'session.projectSeed.invalidAt': '{sentence} Problem entry: {path}',
307
+ 'session.projectSeed.laneNotIsolated': 'The execution lane for this session is not a sandbox, so a project package cannot become its workspace. Hand off a project with a pushed git commit instead, or run the session on a sandboxed lane.',
308
+ 'session.projectSeed.seedFixed': 'A session can start from only one project package: this session already has one, or this submission carried more than one. Send a single package, or start a new session to begin from a different one.',
309
+ 'session.projectSeed.boundElsewhere': 'This upload is already bound to another session, and an upload cannot be moved to a different session, so this submission was not accepted. Upload the project package again for this session.',
310
+ 'session.projectSeed.laneUnknown': 'The engine has not said whether it runs sessions in a sandbox, so a project package cannot be offered as the workspace yet.',
311
+ 'session.projectSeed.missing': 'Upload the project package before handing the session off.',
298
312
  'resume.reopen.first.envFailed': 'The execution environment for this parked work could not be brought back',
299
313
  'resume.reopen.first.toolUnavailable': 'The tool this approval was granted for is not available on this engine',
300
314
  'resume.reopen.first.toolContractMismatch': 'The tool this approval was granted for has changed since the approval was recorded',
@@ -394,6 +408,8 @@ const EN = {
394
408
  'session.selfHeal.injected.handedOffWatch': '{lead} was passed to the reply already in progress{id} instead of starting a new one — watch that reply for what it does with it.',
395
409
  'session.selfHeal.injected.interruptedFinishing': '{lead} was not delivered: the earlier reply{id} that was stopped is still finishing, so sema did not send it and did not retry — the model has not seen it. Give it a moment, then try again.',
396
410
  'session.selfHeal.injected.notDelivered': '{lead} was not delivered: this session was still busy with an earlier reply{id}, and there was no open card you could answer to free it{noView}. sema did not retry, so the model has not seen it.',
411
+ 'session.selfHeal.injected.redundant': '{lead} was not passed on: it was about the reply already in progress{id}, which has already resumed on its own, so it has nothing to add.',
412
+ 'session.selfHeal.injected.deferred': '{lead} is waiting: this session is busy with an earlier reply{id}, so sema kept the message and will send it as a new message once that reply has finished or paused.',
397
413
  'session.selfHeal.decisionInFlight': 'The previous turn is parked {parkedOn} and your answer to that card is still on its way to the engine, so sema did not show the card again — answering it a second time would send a second decision. It did NOT cancel the run. Your message was NOT sent; send it again in a moment, once the engine has applied that decision.',
398
414
  'session.selfHeal.parkedOn.ask': 'waiting for your decision (run {taskId})',
399
415
  'session.selfHeal.parkedOn.plan': 'on a plan review (run {taskId})',
@@ -545,6 +561,11 @@ const EN = {
545
561
  'approval.boundGrants.denyPart.one': '1 tool entry is refused for the rest of this run',
546
562
  'approval.boundGrants.denyPart.other': '{count} tool entries are refused for the rest of this run',
547
563
  'approval.boundGrants.activates': 'Approving this activates the skill shown on the card: {allow}, and {deny}.',
564
+ 'approval.boundGrants.allowPart.named.one': '1 tool entry it lists runs without asking once it is active ({names})',
565
+ 'approval.boundGrants.allowPart.named.other': '{count} tool entries it lists run without asking once it is active ({names})',
566
+ 'approval.boundGrants.denyPart.named.one': '1 tool entry is refused for the rest of this run ({names})',
567
+ 'approval.boundGrants.denyPart.named.other': '{count} tool entries are refused for the rest of this run ({names})',
568
+ 'approval.boundGrants.more': 'and {count} more',
548
569
  'session.fileHistoryRefusal.notYet': "Nothing was sent: file checkpointing is turned off in your settings, but this engine's capabilities have not been read yet, so whether it can stop recording file history for a session is unknown and sending now could record it anyway. Try again in a moment; to send regardless and let file history be recorded this time, turn file checkpointing back on in your settings.",
549
570
  'session.fileHistoryRefusal.notSaid': 'Nothing was sent: file checkpointing is turned off in your settings, but this engine did not report whether it can stop recording file history for a session, so sending now could record it anyway. Trying again will not change that while this engine reports the same; to send and let file history be recorded this time, turn file checkpointing back on in your settings.',
550
571
  'session.fileHistoryRefusal.unrecognized': 'Nothing was sent: file checkpointing is turned off in your settings, but this engine reported a file-history capture mode this client does not recognize, so whether it can stop recording file history for a session is unknown and sending now could record it anyway. Trying again will not change that while this engine reports the same; to send and let file history be recorded this time, turn file checkpointing back on in your settings.',
@@ -556,6 +577,12 @@ const EN = {
556
577
  'session.memorySync.parkedUnnamed.other': 'Memory sync is paused on this deployment for {count} layers: their sync cursors could not be used. {wayOut}',
557
578
  'session.memorySync.wayOut.deleteCursor': 'Syncing resumes once an operator deletes the sync cursor of each paused layer on the server; entries deleted on only one side since the last sync will come back and need to be deleted again.',
558
579
  'session.memorySync.wayOut.unrecognized': 'The deployment named a way out that this client does not recognize, so none is suggested here.',
580
+ 'session.memorySyncTrigger.notConfigured': 'Nothing to sync: this session does not use any memory.',
581
+ 'session.memorySyncTrigger.noSettledRun': 'Memory cannot be synced yet: no run in this session has finished with a record of which memory it reads. Run a task in this session (or let the one in progress finish), then sync again.',
582
+ 'session.memorySyncTrigger.runUnobserved': 'Memory cannot be synced: the latest finished run in this session has no record of which memory it read, and an earlier run is never used in its place. Run another task in this session (if that run was refused, fix what refused it first), then sync again.',
583
+ 'session.memorySyncTrigger.memoryNotMounted': 'Memory cannot be synced: memory was set up for the latest finished run in this session but did not load, so which memory this session reads is unknown. Run another task in this session (if its memory fails to load again, fix that first), then sync again.',
584
+ 'session.memorySyncTrigger.noLeaf': 'Memory cannot be synced yet: this session has no conversation yet, so there is nothing to sync from. Run a task in it (or let the one in progress finish), then sync again.',
585
+ 'session.memorySyncTrigger.unobtainable': 'Memory cannot be synced: which memory this session reads could not be determined. Run a task in this session (or let the one in progress finish), then sync again.',
559
586
  'session.hostSettings.memorySwitchMalformed': 'The memory setting in your settings file could not be read, so turning memory off was not applied: this request was sent with memory available. Fix the memory section (memory.enabled must be true or false) to turn it off.',
560
587
  'session.hostSettings.fileHistoryRestoreConflict': 'Nothing was sent: file checkpointing was turned off in your settings after this request was prepared, but this request also restores files from a checkpoint, and a request cannot do both. To restore the files, turn file checkpointing back on in your settings; otherwise send the request without the file restore.',
561
588
  'session.hostSettings.projectionUnchecked': 'The settings for this request could not be checked before sending, so the request is not sent. Reload your settings and try again.',
@@ -565,11 +592,14 @@ const EN = {
565
592
  'session.hostSettings.layerNotLoaded.hold.unreadable': '{layer} could not be read, so the rules and hooks in that file would not apply to this request. Continue without these settings, or cancel and fix the file first.',
566
593
  'session.hostSettings.layerNotLoaded.hold.rejected': '{layer} were not loaded because a hook guarding tool use in that file is malformed, so the rules and hooks in that file would not apply to this request. Continue without these settings, or cancel and fix the file first.',
567
594
  'session.hostSettings.layerNotLoaded.sent.unreadable': '{layer} could not be read: this request was sent without the rules and hooks in that file.',
595
+ 'session.hostSettings.layerNotLoaded.restrictions.hold': '{layer} could not be read, so the restrictions in that file (deny and ask rules) would not apply to this request. Continue without them, or cancel and fix the file first.',
596
+ 'session.hostSettings.layerNotLoaded.restrictions.sent': '{layer} could not be read: this request was sent without the restrictions in that file (deny and ask rules).',
568
597
  'session.hostSettings.layer.policySettings': 'Managed settings',
569
598
  'session.hostSettings.layer.userSettings': 'Your user settings',
570
599
  'session.hostSettings.layer.projectSettings': 'The project settings',
571
600
  'session.hostSettings.layer.localSettings': 'The local project settings',
572
601
  'session.hostSettings.layer.flagSettings': 'The settings passed at launch',
602
+ 'session.hostSettings.layer.foreignProjectSettings': "The project's settings for another tool",
573
603
  'session.hostSettings.heldPrevious': 'A settings file could not be read cleanly just now (it may be in the middle of being saved), so the permission rules from the last clean read are still applied.',
574
604
  'session.hostSettings.styleMissing': 'The output style "{name}" selected in your settings could not be found or read, so it is not applied to this request.',
575
605
  'session.hostSettings.styleSafeMode': 'Safe mode is on, so the output style from your settings is not applied.',
@@ -603,7 +633,6 @@ const EN = {
603
633
  'rules.refusal.list.more': '{shown} and {count} more',
604
634
  'rules.refusal.reason.toolName': 'its tool name is not one this engine recognizes',
605
635
  'rules.refusal.reason.homePath': 'it uses a ~/ path this engine cannot anchor — write the path relative to the project or as an absolute path',
606
- 'rules.refusal.reason.neverMatches': 'this rule form cannot match as a deny or ask rule for this tool, so the engine would never apply it — to block the tool altogether, write its name alone',
607
636
  'rules.nearMiss.sentence.one': 'permissions: 1 rule names a tool by a spelling no tool of this run answers to, so it can never match — {list}',
608
637
  'rules.nearMiss.sentence.other': 'permissions: {count} rules name a tool by a spelling no tool of this run answers to, so they can never match — {list}',
609
638
  'rules.nearMiss.reason': 'write the name as "{mounted}"',
@@ -734,17 +763,6 @@ const EN = {
734
763
  'notice.capability.hands.unknownRosterUnreadable': 'whether this run has file-and-shell tools is unknown — the tool roster could not be read in the shape this reader knows',
735
764
  'notice.capability.hands.unknownMountConditionAbsent': 'whether this run has file-and-shell tools is unknown — this engine does not report which condition mounted each tool, so an empty count here would be a fact about the reader, not about the run',
736
765
  'rules.sessionPolicy.tighten.written': 'Session rules saved (version {rev}) — the record now holds everything it already had plus the entries sent here, and it applies from this session’s next tool gate onward; the step already running is not interrupted.',
737
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.counts': "Still running, and possibly started before this session's first rule: {list}. Anything that started before that first rule keeps running without this one — to make the rule apply to it now, stop it.",
738
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unreadable': "This client could not read which background agents or workflows are running now. Anything that started before this session's first rule keeps running without this one — stop whatever must not keep running without it.",
739
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unseen': 'Work whose start has not reached this client yet may not read this rule either.',
740
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.one': '{n} background agent',
741
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.many': '{n} background agents',
742
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.one': '{n} workflow',
743
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.many': '{n} workflows',
744
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.one': '{n} background item this client stopped tracking',
745
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.many': '{n} background items this client stopped tracking',
746
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.two': '{a} and {b}',
747
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.three': '{a}, {b} and {c}',
748
766
  'rules.sessionPolicy.tighten.conflict': 'Session rules were changed by someone else while this tightening was being written, twice in a row — nothing was written. Re-read the current rules and try again, or let the other writer finish first.',
749
767
  'rules.sessionPolicy.tighten.loosenForbidden': 'The engine refused this write because it would relax the session rules: at least one entry sent here widens what is allowed rather than narrowing it. Only entries that add restrictions are accepted on this path.',
750
768
  'rules.sessionPolicy.tighten.capabilityAbsent': 'This deployment does not keep per-session tool rules, so there is nothing to tighten here.',
@@ -1078,7 +1096,7 @@ const EN = {
1078
1096
  'follow.notFollowed.headTurn': "This screen is no longer following this turn's run{reason}{ending}{exit}",
1079
1097
  'follow.notFollowed.reason.exhaustedDraining': ": the engine instance serving it was going down when its last event stream closed, and this client's re-attach allowance has run out.",
1080
1098
  'follow.notFollowed.reason.exhaustedConnectionLost': ": the connection dropped on the last attempt, and this client's re-attach allowance has run out.",
1081
- 'follow.notFollowed.reason.exhaustedStreamCap': ": its event stream hit the engine's time limit on the last attempt, and this client's re-attach allowance has run out.",
1099
+ 'follow.notFollowed.reason.exhaustedStreamCap': ": the engine ended its event stream with a stream-limit notice on the last attempt, and this client's re-attach allowance has run out.",
1082
1100
  'follow.notFollowed.reason.exhausted': ": this client's re-attach allowance has run out.",
1083
1101
  'follow.notFollowed.reason.badInput': ': this client hit an internal error while re-attaching.',
1084
1102
  'follow.notFollowed.reason.noRunId': ': this client never learned which run it was, so there is nothing to re-attach to.',
@@ -1101,6 +1119,11 @@ const EN = {
1101
1119
  'approval.planReview.askAgain.notCarried': 'The user could not approve this plan: its text did not reach the approval card (it may be too long). Present a shorter plan.',
1102
1120
  'approval.planReview.askAgain.unknown': 'The user could not approve this plan: the approval card could not show it. Present the plan again.',
1103
1121
  'approval.planReview.askAgain.withNote': '{sentence} The user added: {note}',
1122
+ 'approval.planReview.decision.notSent': 'The plan_review {decision} could NOT be sent; the plan is still waiting for a decision.',
1123
+ 'approval.planReview.decision.refused': 'This {decision} was not applied: the engine refused it and changed nothing.',
1124
+ 'approval.planReview.decision.cardMissing': 'Approving a plan needs the card that showed it, and none came with this approval.',
1125
+ 'approval.planReview.decision.gateMoved': 'The plan on this card is no longer the one waiting for approval.',
1126
+ 'approval.planReview.decision.gateUntrusted': "The engine could not recognise this review's gate id (the server's record of it looks damaged; an operator should check it). The card still shows the plan that is waiting: answering again sends the answer without the gate id, and that answer is not protected against the plan having changed.",
1104
1127
  'approval.planReview.option.askAgain.label': 'No, ask for the plan to be presented again',
1105
1128
  'approval.planReview.option.askAgain.description': 'Do not approve; ask the model to present the plan again',
1106
1129
  };
@@ -122,6 +122,11 @@ const ZH = {
122
122
  'session.devices.probeFailedTransport': '连不上引擎,查不了远程控制车道 —— 请重试',
123
123
  'session.devices.probeFailedRefused': '引擎拒绝了设备清单查询 —— 请重试',
124
124
  'session.devices.probeFailedUnreadable': '读不懂引擎给的设备清单 —— 请重试',
125
+ 'session.engine.selfNotLocal': '这只会话跑在本机这个应用自己起的引擎上,却是按 Cloud 会话开的。什么都没改 —— 请检查这只会话是怎么打开的。',
126
+ 'session.engine.dispatch.notWired': '这只会话所在的引擎此刻没接上,什么都没发。先连上那台引擎,再试一次。',
127
+ 'session.engine.dispatch.scopeMismatch': '这只会话属于另一个空间里的引擎,和你当前登录的空间不同,什么都没发。切到那个空间后再试一次。',
128
+ 'session.engine.dispatch.scopeUnproven': '确认不了你当前的登录能到达这只会话所在的引擎,什么都没发。先登录那台引擎所在的空间(或直接连上那台引擎),再试一次。',
129
+ 'session.engine.dispatch.unresolved': '这只会话所在的引擎还不知道,什么都没发。先为这只会话选一次引擎,再试一次。',
125
130
  'config.cloudLogin.accessDenied': '登录被拒绝了。',
126
131
  'config.cloudLogin.expiredToken': '登录码在批准之前过期了 —— 请重新开始。',
127
132
  'config.cloudLogin.invalidGrant': 'Cloud 登录已无法续期 —— 请重新登录。',
@@ -141,6 +146,7 @@ const ZH = {
141
146
  'config.engineTarget.loginFailed': '登录失败。',
142
147
  'config.engineTarget.storageUnavailable': '这台设备上没有可用的安全存储,保存不了 Cloud 凭据。什么都没改。',
143
148
  'config.engineTarget.noLocalRuntime': '这台设备上没有本机引擎。',
149
+ 'config.engineTarget.serverBelowSupportFloor': '这台服务端自报版本 {version},低于本客户端支持的最低服务端版本 {floor}。发给它的请求可能被拒,或与这里描述的行为不一致;请连接 {floor} 或更新的服务端。',
144
150
  'config.engineTarget.input': '请求的形状不对,什么都没改。',
145
151
  'config.engineTarget.unknown': '引擎切换没有完成。',
146
152
  'onboard.probe.endpointReachable': '{method} {path} → {status}(端点可达)',
@@ -240,6 +246,7 @@ const ZH = {
240
246
  'approval.settle.cause.broadcastLost': '它没有送达任何一个打开着的连接',
241
247
  'approval.settle.cause.streamDisconnected': '承载这张卡的连接断了',
242
248
  'approval.settle.cause.undeliverable': '它没能送达任何审批界面',
249
+ 'approval.decide.requiresBinding': '这次决定没有带上把它绑到审批卡上那个具体动作的绑定,引擎拒绝了 · 什么都没有决定,这条审批仍在等待 · 请重新获取待决审批,按现在列出的那张卡再决定;如果列出的卡本身就没有绑定,这里决不了 —— 取消这次运行,或等这条审批过期',
243
250
  'approval.decision.grantChanged': '引擎拒收了这次批准:它绑定的技能授予在卡呈出之后已经变了 · 什么都没有决定,这一请求仍在等待,但再批一次会以同样的理由被拒 · 请拒绝这一请求,让模型重新激活那个技能',
244
251
  'approval.decision.settledElsewhereContrary.deniedFirst': '这一请求已在别处被答复为拒绝,你的批准没有生效。',
245
252
  'approval.decision.settledElsewhereContrary.approvedFirst': '这一请求已在别处被答复为批准,你的拒绝没有生效。',
@@ -295,6 +302,13 @@ const ZH = {
295
302
  'session.crashConverged.cause.neutral': '这个决断被自动收敛了',
296
303
  'session.crashConverged.cause.withClause': '{clause},这个决断被自动收敛了',
297
304
  'session.corrupt.content': '这个会话保存的历史读不出来 —— 它存的日志已损坏 —— 所以引擎打不开这个会话。重试没有用:得由运维这台引擎的人修复或移除那份存储的日志。在那之前,请在新会话里继续。',
305
+ 'session.projectSeed.invalid': '项目包被拒了:它不是能用的项目归档。项目包须是项目文件夹打成的 gzip tar,大小与条目数在上限之内,只含普通文件、文件夹和不指出文件夹的链接,每条路径只出现一次,顶层不能有名为 .git 或 attachments 的条目。请修好文件夹后重新上传。',
306
+ 'session.projectSeed.invalidAt': '{sentence} 出问题的条目:{path}',
307
+ 'session.projectSeed.laneNotIsolated': '这个会话的执行车道不是沙箱,所以项目包不能当作它的工作区。请改用已推送 git 提交的项目交接,或让会话跑在带沙箱的车道上。',
308
+ 'session.projectSeed.seedFixed': '一个会话只能从一个项目包起始:这个会话已经有了,或这次提交带了不止一个。请只带一个项目包,或新开会话从另一个项目包开始。',
309
+ 'session.projectSeed.boundElsewhere': '这次上传已经绑在另一个会话上,上传一经绑定就不能改绑到别的会话,所以这次提交没有被受理。请为这个会话重新上传项目包。',
310
+ 'session.projectSeed.laneUnknown': '引擎还没说明它是否在沙箱里跑会话,所以暂时不能把项目包作为工作区交出去。',
311
+ 'session.projectSeed.missing': '请先上传项目包,再交接这个会话。',
298
312
  'resume.reopen.first.envFailed': '这件 parked 的工作所需的执行环境没能恢复',
299
313
  'resume.reopen.first.toolUnavailable': '这个审批所授予的工具在这台引擎上不可用',
300
314
  'resume.reopen.first.toolContractMismatch': '这个审批所授予的工具,自审批记录以来已经变了',
@@ -394,6 +408,8 @@ const ZH = {
394
408
  'session.selfHeal.injected.handedOffWatch': '{lead}已交给正在进行的那一轮回复{id},没有另开一轮 —— 请留意那一轮回复怎么处理它。',
395
409
  'session.selfHeal.injected.interruptedFinishing': '{lead}没有送达:被叫停的较早那一轮回复{id}仍在收尾,sema 没有发送它也没有重试,所以模型没有看到它。稍等片刻后再试一次。',
396
410
  'session.selfHeal.injected.notDelivered': '{lead}没有送达:这个会话还被较早的一轮回复占着{id},而且没有可以回答来放行的打开的卡{noView}。sema 没有重试,所以模型没有看到它。',
411
+ 'session.selfHeal.injected.redundant': '{lead}没有转交:它说的就是正在进行的那一轮回复{id},那一轮回复已经自己接着往下走了,它没有什么可补充的。',
412
+ 'session.selfHeal.injected.deferred': '{lead}正在等待:这个会话正被较早的一轮回复{id}占着,sema 保留了这条消息,等那一轮回复结束或暂停后再作为一条新消息发送。',
397
413
  'session.selfHeal.decisionInFlight': '上一个 turn 处于 parked 状态,{parkedOn},而你对那张卡的回答还在送往引擎的路上,所以 sema 没有再次显示那张卡 —— 再回答一次会发出第二个决断。它没有取消这次 run。你的消息没有发出;请稍等片刻,等引擎应用了那个决断之后再发一次。',
398
414
  'session.selfHeal.parkedOn.ask': '在等你的决断(run {taskId})',
399
415
  'session.selfHeal.parkedOn.plan': '停在一次计划审阅上(run {taskId})',
@@ -545,6 +561,11 @@ const ZH = {
545
561
  'approval.boundGrants.denyPart.one': '1 条工具条目在本次 run 剩余的时间里被拒绝',
546
562
  'approval.boundGrants.denyPart.other': '{count} 条工具条目在本次 run 剩余的时间里被拒绝',
547
563
  'approval.boundGrants.activates': '批准这一张会激活卡上的技能:{allow},且 {deny}。',
564
+ 'approval.boundGrants.allowPart.named.one': '它列出的 1 条工具条目({names}),在技能激活后免问运行',
565
+ 'approval.boundGrants.allowPart.named.other': '它列出的 {count} 条工具条目({names}),在技能激活后免问运行',
566
+ 'approval.boundGrants.denyPart.named.one': '1 条工具条目({names})在本次 run 剩余的时间里被拒绝',
567
+ 'approval.boundGrants.denyPart.named.other': '{count} 条工具条目({names})在本次 run 剩余的时间里被拒绝',
568
+ 'approval.boundGrants.more': '另有 {count} 条',
548
569
  'session.fileHistoryRefusal.notYet': '没有发送:你的设置里已关闭文件检查点,但这台引擎的能力信息还没读到,所以不知道它能否按会话停止记录文件历史,现在发送仍可能把它记录下来。请稍后再试;如果要照常发送、并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
549
570
  'session.fileHistoryRefusal.notSaid': '没有发送:你的设置里已关闭文件检查点,但这台引擎没有报告它能否按会话停止记录文件历史,所以现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
550
571
  'session.fileHistoryRefusal.unrecognized': '没有发送:你的设置里已关闭文件检查点,但这台引擎报告了一个本客户端不认识的文件历史捕获模式,所以不知道它能否按会话停止记录文件历史,现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
@@ -556,6 +577,12 @@ const ZH = {
556
577
  'session.memorySync.parkedUnnamed.other': '这台部署上 {count} 层的记忆同步已暂停:它们的同步游标用不了。{wayOut}',
557
578
  'session.memorySync.wayOut.deleteCursor': '运维在服务器上删掉每个暂停层的同步游标后,同步即恢复;自上次同步以来只在一侧删掉的条目会回来,需要再删一次。',
558
579
  'session.memorySync.wayOut.unrecognized': '部署给出的出路本客户端认不出,这里不给建议。',
580
+ 'session.memorySyncTrigger.notConfigured': '没有可同步的:这条会话没有使用任何记忆。',
581
+ 'session.memorySyncTrigger.noSettledRun': '暂时无法同步记忆:这条会话里还没有一条跑完、并记下了它读哪些记忆的任务。请在这条会话里跑一条任务(或等正在跑的那条结束),再同步。',
582
+ 'session.memorySyncTrigger.runUnobserved': '无法同步记忆:这条会话里最近跑完的那条任务没有记下它读了哪些记忆,而更早的任务不会拿来顶替。请在这条会话里再跑一条任务(如果那条任务被拒了,先改好拒它的地方),再同步。',
583
+ 'session.memorySyncTrigger.memoryNotMounted': '无法同步记忆:这条会话里最近跑完的那条任务配了记忆却没有加载成功,所以不知道这条会话读哪些记忆。请在这条会话里再跑一条任务(如果记忆再次加载失败,先修好它),再同步。',
584
+ 'session.memorySyncTrigger.noLeaf': '暂时无法同步记忆:这条会话还没有任何对话内容,没有可以同步的起点。请在这条会话里跑一条任务(或等正在跑的那条结束),再同步。',
585
+ 'session.memorySyncTrigger.unobtainable': '无法同步记忆:无法确定这条会话读哪些记忆。请在这条会话里跑一条任务(或等正在跑的那条结束),再同步。',
559
586
  'session.hostSettings.memorySwitchMalformed': '设置文件里的记忆设置读不出,所以「关闭记忆」没有生效:这一次请求照常带着记忆发出。改好记忆那一段(memory.enabled 只能是 true 或 false)即可关闭。',
560
587
  'session.hostSettings.fileHistoryRestoreConflict': '没有发送:这次请求准备好之后,你在设置里关闭了文件检查点,但这次请求同时要从检查点还原文件,两者不能放在同一个请求里。要还原文件,请在设置里把文件检查点重新打开;否则请去掉文件还原再发送。',
561
588
  'session.hostSettings.projectionUnchecked': '这一次请求要带的设置在发出前没法核对,所以没有发送。请重新载入设置后再试。',
@@ -565,11 +592,14 @@ const ZH = {
565
592
  'session.hostSettings.layerNotLoaded.hold.unreadable': '{layer}读不出,那份文件里的规则和 hooks 不会作用于这一次请求。可以不带这些设置继续,或者先取消、改好文件。',
566
593
  'session.hostSettings.layerNotLoaded.hold.rejected': '{layer}没有装上:那份文件里一个守着工具调用的 hook 写坏了,文件里的规则和 hooks 不会作用于这一次请求。可以不带这些设置继续,或者先取消、改好文件。',
567
594
  'session.hostSettings.layerNotLoaded.sent.unreadable': '{layer}读不出:这一次请求没有带那份文件里的规则和 hooks。',
595
+ 'session.hostSettings.layerNotLoaded.restrictions.hold': '{layer}读不出,那份文件里的限制(deny 与 ask 规则)不会作用于这一次请求。可以不带它们继续,或者先取消、改好文件。',
596
+ 'session.hostSettings.layerNotLoaded.restrictions.sent': '{layer}读不出:这一次请求没有带那份文件里的限制(deny 与 ask 规则)。',
568
597
  'session.hostSettings.layer.policySettings': '托管设置',
569
598
  'session.hostSettings.layer.userSettings': '你的用户设置',
570
599
  'session.hostSettings.layer.projectSettings': '项目设置',
571
600
  'session.hostSettings.layer.localSettings': '本地项目设置',
572
601
  'session.hostSettings.layer.flagSettings': '启动时传入的设置',
602
+ 'session.hostSettings.layer.foreignProjectSettings': '写给另一个工具的项目设置',
573
603
  'session.hostSettings.heldPrevious': '刚才有一份设置文件没能完整读出(可能正在保存),所以仍按上一次完整读到的权限规则执行。',
574
604
  'session.hostSettings.styleMissing': '设置里选中的输出风格「{name}」找不到或读不出,这一次请求不套用它。',
575
605
  'session.hostSettings.styleSafeMode': '安全模式已开启,设置里的输出风格不套用。',
@@ -603,7 +633,6 @@ const ZH = {
603
633
  'rules.refusal.list.more': '{shown},另有 {count} 条',
604
634
  'rules.refusal.reason.toolName': '它的工具名不是这台引擎认得的名字',
605
635
  'rules.refusal.reason.homePath': '它用了引擎无法锚定的 ~/ 路径 —— 请改写成相对项目的路径或绝对路径',
606
- 'rules.refusal.reason.neverMatches': '这种写法作为这只工具的拒绝或询问规则永远匹配不上,引擎不会执行它 —— 要整只拦下这只工具,请只写工具名',
607
636
  'rules.nearMiss.sentence.one': '权限:有 1 条规则写的工具名拼法,本次运行里没有任何工具认,所以永远匹配不上 —— {list}',
608
637
  'rules.nearMiss.sentence.other': '权限:有 {count} 条规则写的工具名拼法,本次运行里没有任何工具认,所以永远匹配不上 —— {list}',
609
638
  'rules.nearMiss.reason': '请把名字写成「{mounted}」',
@@ -734,17 +763,6 @@ const ZH = {
734
763
  'notice.capability.hands.unknownRosterUnreadable': '这次 run 有没有文件与 shell 工具,目前不知道 —— 工具名册不是这个读口认识的形状,读不出来',
735
764
  'notice.capability.hands.unknownMountConditionAbsent': '这次 run 有没有文件与 shell 工具,目前不知道 —— 这台引擎不报每个工具是由哪个条件挂载的,所以这里数出一个空的计数,说的是读口的事,不是这次 run 的事',
736
765
  'rules.sessionPolicy.tighten.written': '会话规则已保存(版本 {rev})—— 记录现在包含它原有的全部内容加上这里送来的条目,并从这个会话的下一道工具门起生效;已经在跑的那一步不会被打断。',
737
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.counts': '仍在运行,而且可能是在这个会话的第一条规则之前启动的:{list}。凡是在那第一条规则之前启动的,都会不带这条规则继续运行 —— 要让它立即生效,请停掉它们。',
738
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unreadable': '本客户端读不出现在有哪些后台子代或工作流在运行。凡是在这个会话的第一条规则之前启动的,都会不带这条规则继续运行 —— 不该继续运行的请停掉。',
739
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unseen': '起跑还没报到本客户端的工作,可能也读不到这条规则。',
740
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.one': '{n} 个后台子代',
741
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.many': '{n} 个后台子代',
742
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.one': '{n} 个工作流',
743
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.many': '{n} 个工作流',
744
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.one': '{n} 个本客户端已不再跟踪的后台项',
745
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.many': '{n} 个本客户端已不再跟踪的后台项',
746
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.two': '{a}和 {b}',
747
- 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.three': '{a}、{b}和 {c}',
748
766
  'rules.sessionPolicy.tighten.conflict': '写入这次收紧的过程中,会话规则被别人改了,连续两次 —— 什么都没写。请重新读一遍当前的规则再试,或者先让另一个写入方写完。',
749
767
  'rules.sessionPolicy.tighten.loosenForbidden': '引擎拒绝了这次写入,因为它会放宽会话规则:这里送来的条目里至少有一条是放宽允许范围而不是收窄。这条路上只接受增加限制的条目。',
750
768
  'rules.sessionPolicy.tighten.capabilityAbsent': '这个部署不保存会话级的工具规则,所以这里没有什么可收紧的。',
@@ -1078,7 +1096,7 @@ const ZH = {
1078
1096
  'follow.notFollowed.headTurn': '这块屏已不再跟着这一轮的 run{reason}{ending}{exit}',
1079
1097
  'follow.notFollowed.reason.exhaustedDraining': ':服务它的那台引擎实例在它最后一条事件流关闭时正在下线,而这个客户端的重新附着次数已经用完。',
1080
1098
  'follow.notFollowed.reason.exhaustedConnectionLost': ':最后一次尝试时连接断了,而这个客户端的重新附着次数已经用完。',
1081
- 'follow.notFollowed.reason.exhaustedStreamCap': ':最后一次尝试时它的事件流撞上了引擎的时长上限,而这个客户端的重新附着次数已经用完。',
1099
+ 'follow.notFollowed.reason.exhaustedStreamCap': ':最后一次尝试时引擎以流上限通知收了它的事件流,而这个客户端的重新附着次数已经用完。',
1082
1100
  'follow.notFollowed.reason.exhausted': ':这个客户端的重新附着次数已经用完。',
1083
1101
  'follow.notFollowed.reason.badInput': ':这个客户端在重新附着时出了内部错误。',
1084
1102
  'follow.notFollowed.reason.noRunId': ':这个客户端始终不知道它是哪一次 run,所以没有可以重新附着的对象。',
@@ -1101,6 +1119,11 @@ const ZH = {
1101
1119
  'approval.planReview.askAgain.notCarried': '用户没法批准这份计划:计划正文没有到达审批卡(可能过长)。请呈上一份更短的计划。',
1102
1120
  'approval.planReview.askAgain.unknown': '用户没法批准这份计划:审批卡显示不了它。请重新呈上计划。',
1103
1121
  'approval.planReview.askAgain.withNote': '{sentence} 用户补充:{note}',
1122
+ 'approval.planReview.decision.notSent': '这次计划审阅的 {decision} 没能发出;计划仍在等决断。',
1123
+ 'approval.planReview.decision.refused': '这次 {decision} 没有生效:引擎拒了它,什么都没改。',
1124
+ 'approval.planReview.decision.cardMissing': '批准一份计划需要附上呈出它的那张卡,这次批准没有附卡。',
1125
+ 'approval.planReview.decision.gateMoved': '这张卡上的计划已不是在等批的那份。',
1126
+ 'approval.planReview.decision.gateUntrusted': '引擎认不出这道审阅门的编号(服务端那一行记录看起来坏了,请运维检查)。卡上就是当前在等批的计划:再答一次将不带门编号提交,那一次没有「计划已换」的保护。',
1104
1127
  'approval.planReview.option.askAgain.label': '不,要模型重新呈上计划',
1105
1128
  'approval.planReview.option.askAgain.description': '不批准;要模型重新呈上计划',
1106
1129
  };
@@ -1232,6 +1255,8 @@ export const TERM_SLOTS = Object.freeze({
1232
1255
  'approval.origin.hook': ['hook'],
1233
1256
  'approval.boundGrants.denyPart.one': ['run'],
1234
1257
  'approval.boundGrants.denyPart.other': ['run'],
1258
+ 'approval.boundGrants.denyPart.named.one': ['run'],
1259
+ 'approval.boundGrants.denyPart.named.other': ['run'],
1235
1260
  'session.steerRefusal.notRunning.happened': ['run'],
1236
1261
  'session.steerRefusal.notRunning.nextStep': ['run'],
1237
1262
  'session.steerRefusal.queueFull.happened': ['run'],
package/dist/index.d.ts CHANGED
@@ -123,7 +123,7 @@ export * from './engineWireSdk.js';
123
123
  export * from './classifierVerdictWire.js';
124
124
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
125
125
  export { findSystemReminderOpenTag, type SystemReminderOpenTagSpan } from './systemReminderTag.js';
126
- 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, } from './engineErrorCodes.js';
126
+ 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';
127
127
  export type { DelegationCapDisposition, ModelFallbackReason, OperatorGateRefusal, RunDeathVerdictCode, } from './engineErrorCodes.js';
128
128
  export { prepareRefusalCodeOf, prepareRefusalNoteOf, type PrepareRefusalCode, type PrepareRefusalNoteFacts } from './prepareRefusal.js';
129
129
  export * from './agentsWireCaps.js';
@@ -184,6 +184,8 @@ export * from './request/taskRequest.js';
184
184
  export { disableSkillsDeclaration, disableSkillsDeclarationSettled } from './disableSkillsWire.js';
185
185
  export { approvalReachDeclaration, approvalReachDeclarationSettled } from './approvalReachWire.js';
186
186
  export type { ApprovalReachDeclaration, ApprovalReachWithheldCause, ApprovalReachWord } from './approvalReachWire.js';
187
+ export { approvalSeatOf, APPROVAL_SEAT_STATES, APPROVAL_SEAT_BASES } from './approvalSeat.js';
188
+ export type { ApprovalSeatInput, ApprovalSeatReading, ApprovalSeatState } from './approvalSeat.js';
187
189
  export type { DisableSkillsDeclaration } from './disableSkillsWire.js';
188
190
  export { PERMISSIONS_KEPT_REASONS, WIRE_RULE_TRUST_ORDER, permissionsAllowKeptNotice, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
189
191
  export type { PermissionsAllowKeptFacts, PermissionsClientOwnedStatement, PermissionsDeclaration, PermissionsDeclarationBuckets, PermissionsDeclarationInput, PermissionsDeclarationReport, PermissionsKeptReason, PermissionsKeptRule, PermissionsRewrittenRule, WireRuleOrigin, WireRuleOrigins, } from './permissionsDeclaration.js';
@@ -228,7 +230,7 @@ export { guardedRead, readOwnDataFiniteNumber, readOwnDataNonEmptyString } from
228
230
  export { contextUsageReadingOf, type ContextUsageReading } from './ownKey.js';
229
231
  export { TURN_FAILURE_CATEGORIES, turnFailurePresentation, type TurnFailureCategory, type TurnFailurePresentation, type TurnFailureRetry } from './turnFailurePresentation.js';
230
232
  export { readSeatTurnFailure, seatTurnFailureOf, type SeatTurnFailure } from './turnFailurePresentation.js';
231
- export { REATTACH_BUDGET_FRESH, REATTACH_BUDGET_NONE, REATTACH_MAX_TRIES, runReattachPolicy, type ReattachBudget, type ReattachDecision, type ReattachDrainingEvent, type ReattachEvent, } from './runReattachPolicy.js';
233
+ export { REATTACH_BUDGET_FRESH, REATTACH_BUDGET_NONE, REATTACH_MAX_TRIES, STREAM_CAP_CREDIBLE_AFTER_MS, runReattachPolicy, type ReattachBudget, type ReattachDecision, type ReattachDrainingEvent, type ReattachEvent, } from './runReattachPolicy.js';
232
234
  export { runNotFollowedNotice, runNotFollowedOf, type ReattachBreak, type RunNotFollowed, type RunNotFollowedCause } from './runFollow.js';
233
235
  export * from './corruptSession.js';
234
236
  export * from './corruptSessionCopy.js';
@@ -274,6 +276,8 @@ export * from './inheritEnvWire.js';
274
276
  export * from './inheritEnvCapability.js';
275
277
  export { SUPPORT_FLOOR, supportFloorOf, engineVersionTier, engineSupportFloorEffective, coreVersionTier, compareReleaseVersions } from './supportFloor.js';
276
278
  export type { SupportFloor, SupportFloorComponent, EngineVersionTier } from './supportFloor.js';
279
+ export { SERVER_SUPPORT_RANGE_REASONS, serverSupportRangeVerdict, serverSupportRangeSentence } from './serverSupportRange.js';
280
+ export type { ServerSupportRangeReason, ServerSupportRangeVerdict } from './serverSupportRange.js';
277
281
  export * from './decideReceipt.js';
278
282
  export * from './sessionMap.js';
279
283
  export * from './detachWire.js';
@@ -360,6 +364,7 @@ export { policyDenyReason, type PolicyDenyLane, type PolicyDenyReasonFacts } fro
360
364
  export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, allowRuleShadowSentence, type ApprovalAllowRuleShadow, type ApprovalAllowRuleShadowMember, type AllowRuleShadowedWireMember, } from './hitl/allowRuleShadow.js';
361
365
  export { projectCrashConverged } from './hitl/crashConverged.js';
362
366
  export type { ApprovalsListEnvelope, CrashConvergedOrphanState, CrashConvergedProjection, CrashConvergedRowReading } from './hitl/crashConverged.js';
367
+ export type { ApprovalQueueKindedRow, ApprovalQueueRow } from './hitl/crashConverged.js';
363
368
  export * from './hitl/crashConvergedNotice.js';
364
369
  export { approvalCompleteParked } from './hitl/approvalCompleteParked.js';
365
370
  export { approvalCompleteCauseOf } from './hitl/approvalEndingCause.js';
@@ -383,6 +388,12 @@ export * from './request/printNotification.js';
383
388
  export * from './seatContract.js';
384
389
  export { sessionRowTagOf, sessionRowPatchRefusalOf } from './sessionRowTag.js';
385
390
  export type { SessionRowCurrentReading, SessionRowPatchRefusal } from './sessionRowTag.js';
391
+ export { sessionRowUnreadableOf } from './sessionRowTag.js';
392
+ export type { SessionRowUnreadable } from './sessionRowTag.js';
393
+ export { projectSeedGateContent, projectSeedGateOf, projectSeedRefusalContent, projectSeedRefusalOf } from './projectSeed.js';
394
+ export type { ProjectSeedArm, ProjectSeedGate, ProjectSeedGateInput, ProjectSeedRefusal } from './projectSeed.js';
395
+ export { sessionMemorySyncNotice, sessionMemorySyncStateOf } from './sessionMemorySync.js';
396
+ export type { SessionMemorySyncReportReading, SessionMemorySyncSettled, SessionMemorySyncState } from './sessionMemorySync.js';
386
397
  export { mcpToolTogglesToExcludeTools } from './mcpToolToggles.js';
387
398
  export type { McpToolToggleKey, McpMountedServers } from './mcpToolToggles.js';
388
399
  export { readThinkingLatch, writeThinkingLatch, thinkingLatchView, thinkingLatchSentence, thinkingLatchRowWordOf, readSeatThinkingLatch } from './thinkingLatch.js';
@@ -397,6 +408,10 @@ export * from './agentSession/contract.js';
397
408
  export * from './agentSession/backgroundView.js';
398
409
  export { readAssistantInbox } from './assistantInbox.js';
399
410
  export type { AssistantInboxVerb, AssistantInboxEntry, AssistantInboxReading, AssistantInboxUnavailableReason } from './assistantInbox.js';
411
+ export { checkpointRowVerdictOf } from './checkpointRowVerdict.js';
412
+ export type { CheckpointRowVerdictReading } from './checkpointRowVerdict.js';
413
+ export { checkpointRequirementsDamagedOf } from './checkpointRowVerdict.js';
414
+ export type { CheckpointRequirementsDamagedReading } from './checkpointRowVerdict.js';
400
415
  export { READ_CREDENTIAL_NOT_ACCEPTED_NOTICE, isReadCredentialRefusal } from './readCredentialRefusal.js';
401
416
  export { readEngineAgentRegistry, isEngineAgentRegistryListingSuperseded } from './agentSession/engineAgentRegistryRead.js';
402
417
  export type { EngineAgentRegistryClient } from './agentSession/engineAgentRegistryRead.js';
@@ -449,3 +464,7 @@ export { scenarioSkillsOf, observedScenarioSkillsCapability } from './scenarioSk
449
464
  export type { ScenarioCardSkill, ScenarioSkillsCapabilityReading } from './scenarioSkills.js';
450
465
  export { observedApprovalFrameFamilies, approvalFrameFamiliesDeclaration } from './approvalFrameFamilies.js';
451
466
  export type { ApprovalFrameFamiliesReading, ApprovalFrameFamiliesDeclaration, ApprovalFrameFamiliesWithheld, ApprovalFrameFamiliesWithheldCause, } from './approvalFrameFamilies.js';
467
+ export { sessionEngineBindingFor, commitSessionEngine, readSessionEngine, sessionDispatchTarget } from './sessionEngine.js';
468
+ export type { SessionEngineKind, SessionEngineIdentityKind, SessionEngineBindingInput, SessionEngineRowInput, SessionEngineBindingFailure, SessionEngineSelfPresentation, SessionEngineDeclaredPresentation, SessionEngineAddressPresentation, SessionEngineBindingOk, SessionEngineSelfBinding, SessionEngineDeclaredBinding, SessionEngineAddressBinding, SessionEngineBinding, SessionEngineAssignment, SessionEngineView, SessionEngineSelfView, SessionEngineDeclaredView, SessionEngineAddressView, SessionEngineReading, SessionEngineBoundReading, SessionEngineSessionRef, SessionEngineCommitRequest, SessionEngineRecoverRequest, SessionEngineUnresolvedReason, SessionEngineCommitResult, SessionEngineCommitted, SessionEngineWiring, SessionDispatchRefusal, SessionDispatchDecision, SessionDispatchUrlTarget, SessionDispatchRefused, } from './sessionEngine.js';
469
+ export { foldSessionPlacement } from './deviceRebind.js';
470
+ export type { SessionPlacementView } from './deviceRebind.js';
package/dist/index.js CHANGED
@@ -103,7 +103,7 @@ export * from './engineWireSdk.js';
103
103
  export * from './classifierVerdictWire.js';
104
104
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
105
105
  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, } from './engineErrorCodes.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';
107
107
  export { prepareRefusalCodeOf, prepareRefusalNoteOf } from './prepareRefusal.js';
108
108
  export * from './agentsWireCaps.js';
109
109
  export { engineToolDirectoryOf } from './engineToolDirectory.js';
@@ -156,6 +156,7 @@ export * from './adapter/activeRunSelfHeal.js';
156
156
  export * from './request/taskRequest.js';
157
157
  export { disableSkillsDeclaration, disableSkillsDeclarationSettled } from './disableSkillsWire.js';
158
158
  export { approvalReachDeclaration, approvalReachDeclarationSettled } from './approvalReachWire.js';
159
+ export { approvalSeatOf, APPROVAL_SEAT_STATES, APPROVAL_SEAT_BASES } from './approvalSeat.js';
159
160
  export { PERMISSIONS_KEPT_REASONS, WIRE_RULE_TRUST_ORDER, permissionsAllowKeptNotice, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
160
161
  export { ASSEMBLY_REFUSAL_CAUSES, assemblyRefusalOf } from './wireFailureShape.js';
161
162
  export * from './clientSlice.js';
@@ -195,7 +196,7 @@ export { guardedRead, readOwnDataFiniteNumber, readOwnDataNonEmptyString } from
195
196
  export { contextUsageReadingOf } from './ownKey.js';
196
197
  export { TURN_FAILURE_CATEGORIES, turnFailurePresentation } from './turnFailurePresentation.js';
197
198
  export { readSeatTurnFailure, seatTurnFailureOf } from './turnFailurePresentation.js';
198
- export { REATTACH_BUDGET_FRESH, REATTACH_BUDGET_NONE, REATTACH_MAX_TRIES, runReattachPolicy, } from './runReattachPolicy.js';
199
+ export { REATTACH_BUDGET_FRESH, REATTACH_BUDGET_NONE, REATTACH_MAX_TRIES, STREAM_CAP_CREDIBLE_AFTER_MS, runReattachPolicy, } from './runReattachPolicy.js';
199
200
  export { runNotFollowedNotice, runNotFollowedOf } from './runFollow.js';
200
201
  export * from './corruptSession.js';
201
202
  export * from './corruptSessionCopy.js';
@@ -223,6 +224,7 @@ export { POISON_FRAME_RAW_MAX, REATTACH_BACKOFF_CAP_MS, REATTACH_BACKOFF_START_M
223
224
  export * from './inheritEnvWire.js';
224
225
  export * from './inheritEnvCapability.js';
225
226
  export { SUPPORT_FLOOR, supportFloorOf, engineVersionTier, engineSupportFloorEffective, coreVersionTier, compareReleaseVersions } from './supportFloor.js';
227
+ export { SERVER_SUPPORT_RANGE_REASONS, serverSupportRangeVerdict, serverSupportRangeSentence } from './serverSupportRange.js';
226
228
  export * from './decideReceipt.js';
227
229
  export * from './sessionMap.js';
228
230
  export * from './detachWire.js';
@@ -308,6 +310,9 @@ export * from './compensations.js';
308
310
  export * from './request/printNotification.js';
309
311
  export * from './seatContract.js';
310
312
  export { sessionRowTagOf, sessionRowPatchRefusalOf } from './sessionRowTag.js';
313
+ export { sessionRowUnreadableOf } from './sessionRowTag.js';
314
+ export { projectSeedGateContent, projectSeedGateOf, projectSeedRefusalContent, projectSeedRefusalOf } from './projectSeed.js';
315
+ export { sessionMemorySyncNotice, sessionMemorySyncStateOf } from './sessionMemorySync.js';
311
316
  export { mcpToolTogglesToExcludeTools } from './mcpToolToggles.js';
312
317
  export { readThinkingLatch, writeThinkingLatch, thinkingLatchView, thinkingLatchSentence, thinkingLatchRowWordOf, readSeatThinkingLatch } from './thinkingLatch.js';
313
318
  export { devicesFaceOf, devicesWritesAllowed, devicesFaceDetail } from './devicesFace.js';
@@ -316,6 +321,8 @@ export { KEY_SLOT_PREFIX, keyEnvNameForEntry, onboardBaseUrlProblem, onboardRefu
316
321
  export * from './agentSession/contract.js';
317
322
  export * from './agentSession/backgroundView.js';
318
323
  export { readAssistantInbox } from './assistantInbox.js';
324
+ export { checkpointRowVerdictOf } from './checkpointRowVerdict.js';
325
+ export { checkpointRequirementsDamagedOf } from './checkpointRowVerdict.js';
319
326
  export { READ_CREDENTIAL_NOT_ACCEPTED_NOTICE, isReadCredentialRefusal } from './readCredentialRefusal.js';
320
327
  export { readEngineAgentRegistry, isEngineAgentRegistryListingSuperseded } from './agentSession/engineAgentRegistryRead.js';
321
328
  export { stopEngineSessionBackground, engineSessionBackgroundReceiptReadingOf, ENGINE_SESSION_BACKGROUND_RECEIPT_STATES, } from './agentSession/engineSessionBackgroundStop.js';
@@ -350,3 +357,5 @@ export { PROJECT_MEMORY_WORDS, projectMemoryOf, observedProjectMemoryCapability,
350
357
  export { sessionRulesChildrenReadLiveOf } from './sessionRulesChildrenReadLive.js';
351
358
  export { scenarioSkillsOf, observedScenarioSkillsCapability } from './scenarioSkills.js';
352
359
  export { observedApprovalFrameFamilies, approvalFrameFamiliesDeclaration } from './approvalFrameFamilies.js';
360
+ export { sessionEngineBindingFor, commitSessionEngine, readSessionEngine, sessionDispatchTarget } from './sessionEngine.js';
361
+ export { foldSessionPlacement } from './deviceRebind.js';