@openrig/cli 0.7.0 → 0.7.1

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 (1007) hide show
  1. package/README.md +9 -8
  2. package/daemon/assets/claude-statusline-context.cjs +13 -3
  3. package/daemon/assets/guidance/openrig-seat-skills.md +1 -0
  4. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  6. package/daemon/assets/plugins/openrig-core/hooks/claude.json +11 -11
  7. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +9 -8
  8. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus-health.cjs +2 -2
  9. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +9 -6
  10. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +1 -1
  11. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +13 -8
  12. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +19 -4
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +167 -46
  14. package/daemon/assets/skills/rigs/SKILL.md +2 -1
  15. package/daemon/context-packs/help/manifest.yaml +1 -1
  16. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  17. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +206 -28
  18. package/daemon/context-packs/reference/getting-started.md +65 -6
  19. package/daemon/context-packs/reference/manifest.yaml +1 -1
  20. package/daemon/context-packs/reference/rig-spec.md +82 -2
  21. package/daemon/context-packs/reference/whats-new.md +162 -113
  22. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/claude-compaction-restore/scripts/precompact-hook.mjs +1 -1
  27. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +19 -4
  32. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/openrig-herdr/SKILL.md +3 -0
  36. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +2 -2
  40. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +13 -8
  49. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/openrig-user/SKILL.md +167 -46
  54. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  80. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  81. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  82. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  83. package/daemon/dist/adapters/claude-code-adapter.js +94 -26
  84. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  85. package/daemon/dist/adapters/claude-resume.d.ts +2 -1
  86. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  87. package/daemon/dist/adapters/claude-resume.js +10 -3
  88. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  89. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +10 -4
  90. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  91. package/daemon/dist/adapters/codex-runtime-adapter.js +231 -41
  92. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  93. package/daemon/dist/adapters/community-harness-runtime-adapter.d.ts +21 -2
  94. package/daemon/dist/adapters/community-harness-runtime-adapter.d.ts.map +1 -1
  95. package/daemon/dist/adapters/community-harness-runtime-adapter.js +90 -8
  96. package/daemon/dist/adapters/community-harness-runtime-adapter.js.map +1 -1
  97. package/daemon/dist/adapters/pi-runner.d.ts +11 -0
  98. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  99. package/daemon/dist/adapters/pi-runner.js +59 -16
  100. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  101. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  102. package/daemon/dist/adapters/pi-runtime-adapter.js +9 -6
  103. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  104. package/daemon/dist/adapters/stub-runtime-adapter.d.ts.map +1 -1
  105. package/daemon/dist/adapters/stub-runtime-adapter.js +9 -5
  106. package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
  107. package/daemon/dist/adapters/tmux.d.ts +15 -4
  108. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  109. package/daemon/dist/adapters/tmux.js +68 -26
  110. package/daemon/dist/adapters/tmux.js.map +1 -1
  111. package/daemon/dist/attention-surface.d.ts +14 -0
  112. package/daemon/dist/attention-surface.d.ts.map +1 -1
  113. package/daemon/dist/attention-surface.js.map +1 -1
  114. package/daemon/dist/build-info.js +3 -3
  115. package/daemon/dist/daemon-db-path.d.ts +6 -0
  116. package/daemon/dist/daemon-db-path.d.ts.map +1 -1
  117. package/daemon/dist/daemon-db-path.js +65 -1
  118. package/daemon/dist/daemon-db-path.js.map +1 -1
  119. package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
  120. package/daemon/dist/daemon-shutdown.js +4 -2
  121. package/daemon/dist/daemon-shutdown.js.map +1 -1
  122. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  123. package/daemon/dist/db/all-migrations.js +16 -0
  124. package/daemon/dist/db/all-migrations.js.map +1 -1
  125. package/daemon/dist/db/migrations/124_context_usage_watchdog_units.d.ts +4 -0
  126. package/daemon/dist/db/migrations/124_context_usage_watchdog_units.d.ts.map +1 -0
  127. package/daemon/dist/db/migrations/124_context_usage_watchdog_units.js +9 -0
  128. package/daemon/dist/db/migrations/124_context_usage_watchdog_units.js.map +1 -0
  129. package/daemon/dist/db/migrations/125_node_advisor.d.ts +3 -0
  130. package/daemon/dist/db/migrations/125_node_advisor.d.ts.map +1 -0
  131. package/daemon/dist/db/migrations/125_node_advisor.js +8 -0
  132. package/daemon/dist/db/migrations/125_node_advisor.js.map +1 -0
  133. package/daemon/dist/db/migrations/127_operation_correlation.d.ts +3 -0
  134. package/daemon/dist/db/migrations/127_operation_correlation.d.ts.map +1 -0
  135. package/daemon/dist/db/migrations/127_operation_correlation.js +10 -0
  136. package/daemon/dist/db/migrations/127_operation_correlation.js.map +1 -0
  137. package/daemon/dist/db/migrations/128_terminal_policy.d.ts +3 -0
  138. package/daemon/dist/db/migrations/128_terminal_policy.d.ts.map +1 -0
  139. package/daemon/dist/db/migrations/128_terminal_policy.js +37 -0
  140. package/daemon/dist/db/migrations/128_terminal_policy.js.map +1 -0
  141. package/daemon/dist/db/migrations/129_stream_dispositions.d.ts +10 -0
  142. package/daemon/dist/db/migrations/129_stream_dispositions.d.ts.map +1 -0
  143. package/daemon/dist/db/migrations/129_stream_dispositions.js +35 -0
  144. package/daemon/dist/db/migrations/129_stream_dispositions.js.map +1 -0
  145. package/daemon/dist/db/migrations/130_stream_subscriptions.d.ts +11 -0
  146. package/daemon/dist/db/migrations/130_stream_subscriptions.d.ts.map +1 -0
  147. package/daemon/dist/db/migrations/130_stream_subscriptions.js +33 -0
  148. package/daemon/dist/db/migrations/130_stream_subscriptions.js.map +1 -0
  149. package/daemon/dist/db/migrations/131_stream_retention_floor.d.ts +8 -0
  150. package/daemon/dist/db/migrations/131_stream_retention_floor.d.ts.map +1 -0
  151. package/daemon/dist/db/migrations/131_stream_retention_floor.js +20 -0
  152. package/daemon/dist/db/migrations/131_stream_retention_floor.js.map +1 -0
  153. package/daemon/dist/db/migrations/135_seat_identity_process_evidence.d.ts +3 -0
  154. package/daemon/dist/db/migrations/135_seat_identity_process_evidence.d.ts.map +1 -0
  155. package/daemon/dist/db/migrations/135_seat_identity_process_evidence.js +16 -0
  156. package/daemon/dist/db/migrations/135_seat_identity_process_evidence.js.map +1 -0
  157. package/daemon/dist/domain/active-occupant.d.ts +3 -0
  158. package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
  159. package/daemon/dist/domain/active-occupant.js +6 -2
  160. package/daemon/dist/domain/active-occupant.js.map +1 -1
  161. package/daemon/dist/domain/activity-taxonomy.d.ts +3 -0
  162. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -1
  163. package/daemon/dist/domain/activity-taxonomy.js.map +1 -1
  164. package/daemon/dist/domain/agent-activity-store.d.ts +6 -2
  165. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  166. package/daemon/dist/domain/agent-activity-store.js +13 -4
  167. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  168. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  169. package/daemon/dist/domain/agent-manifest.js +14 -2
  170. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  171. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +3 -0
  172. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  173. package/daemon/dist/domain/bootstrap-orchestrator.js +20 -6
  174. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  175. package/daemon/dist/domain/builtin-startup-files.d.ts.map +1 -1
  176. package/daemon/dist/domain/builtin-startup-files.js +2 -0
  177. package/daemon/dist/domain/builtin-startup-files.js.map +1 -1
  178. package/daemon/dist/domain/bundle-behaviour.d.ts.map +1 -1
  179. package/daemon/dist/domain/bundle-behaviour.js +28 -1
  180. package/daemon/dist/domain/bundle-behaviour.js.map +1 -1
  181. package/daemon/dist/domain/claim-service.d.ts +19 -1
  182. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  183. package/daemon/dist/domain/claim-service.js +67 -19
  184. package/daemon/dist/domain/claim-service.js.map +1 -1
  185. package/daemon/dist/domain/classification-attempts.d.ts +4 -1
  186. package/daemon/dist/domain/classification-attempts.d.ts.map +1 -1
  187. package/daemon/dist/domain/classification-attempts.js +10 -1
  188. package/daemon/dist/domain/classification-attempts.js.map +1 -1
  189. package/daemon/dist/domain/classification-sources.d.ts +38 -0
  190. package/daemon/dist/domain/classification-sources.d.ts.map +1 -1
  191. package/daemon/dist/domain/classification-sources.js +24 -1
  192. package/daemon/dist/domain/classification-sources.js.map +1 -1
  193. package/daemon/dist/domain/claude-activity-hooks.d.ts +2 -2
  194. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
  195. package/daemon/dist/domain/claude-activity-hooks.js +8 -7
  196. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
  197. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +109 -7
  198. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  199. package/daemon/dist/domain/claude-compaction-enforcer.js +447 -52
  200. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  201. package/daemon/dist/domain/claude-core-plugin-env.d.ts +4 -1
  202. package/daemon/dist/domain/claude-core-plugin-env.d.ts.map +1 -1
  203. package/daemon/dist/domain/claude-core-plugin-env.js +23 -12
  204. package/daemon/dist/domain/claude-core-plugin-env.js.map +1 -1
  205. package/daemon/dist/domain/claude-managed-launch.d.ts +1 -1
  206. package/daemon/dist/domain/claude-managed-launch.d.ts.map +1 -1
  207. package/daemon/dist/domain/claude-managed-launch.js +33 -15
  208. package/daemon/dist/domain/claude-managed-launch.js.map +1 -1
  209. package/daemon/dist/domain/codex-owned-plugin-trust.d.ts +26 -0
  210. package/daemon/dist/domain/codex-owned-plugin-trust.d.ts.map +1 -0
  211. package/daemon/dist/domain/codex-owned-plugin-trust.js +187 -0
  212. package/daemon/dist/domain/codex-owned-plugin-trust.js.map +1 -0
  213. package/daemon/dist/domain/codex-rebuild-permissions.d.ts +54 -0
  214. package/daemon/dist/domain/codex-rebuild-permissions.d.ts.map +1 -0
  215. package/daemon/dist/domain/codex-rebuild-permissions.js +134 -0
  216. package/daemon/dist/domain/codex-rebuild-permissions.js.map +1 -0
  217. package/daemon/dist/domain/community-harness-launch-result.d.ts +33 -0
  218. package/daemon/dist/domain/community-harness-launch-result.d.ts.map +1 -0
  219. package/daemon/dist/domain/community-harness-launch-result.js +93 -0
  220. package/daemon/dist/domain/community-harness-launch-result.js.map +1 -0
  221. package/daemon/dist/domain/community-harness-presets.d.ts +27 -2
  222. package/daemon/dist/domain/community-harness-presets.d.ts.map +1 -1
  223. package/daemon/dist/domain/community-harness-presets.js +49 -5
  224. package/daemon/dist/domain/community-harness-presets.js.map +1 -1
  225. package/daemon/dist/domain/composer-prompts.d.ts +5 -2
  226. package/daemon/dist/domain/composer-prompts.d.ts.map +1 -1
  227. package/daemon/dist/domain/composer-prompts.js +2 -2
  228. package/daemon/dist/domain/composer-prompts.js.map +1 -1
  229. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  230. package/daemon/dist/domain/context-monitor.js +2 -1
  231. package/daemon/dist/domain/context-monitor.js.map +1 -1
  232. package/daemon/dist/domain/continuity-policy-materializer.d.ts +1 -0
  233. package/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -1
  234. package/daemon/dist/domain/continuity-policy-materializer.js +2 -0
  235. package/daemon/dist/domain/continuity-policy-materializer.js.map +1 -1
  236. package/daemon/dist/domain/draft-aware-delivery.d.ts.map +1 -1
  237. package/daemon/dist/domain/draft-aware-delivery.js +1 -1
  238. package/daemon/dist/domain/draft-aware-delivery.js.map +1 -1
  239. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  240. package/daemon/dist/domain/execution-view.js +7 -6
  241. package/daemon/dist/domain/execution-view.js.map +1 -1
  242. package/daemon/dist/domain/footprint-choice.d.ts +41 -0
  243. package/daemon/dist/domain/footprint-choice.d.ts.map +1 -0
  244. package/daemon/dist/domain/footprint-choice.js +42 -0
  245. package/daemon/dist/domain/footprint-choice.js.map +1 -0
  246. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +3 -0
  247. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -1
  248. package/daemon/dist/domain/gateway/delivery-rules-engine.js +1 -1
  249. package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -1
  250. package/daemon/dist/domain/gateway/human-registry.d.ts +32 -0
  251. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  252. package/daemon/dist/domain/gateway/human-registry.js +71 -4
  253. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  254. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  255. package/daemon/dist/domain/gateway/slack/inbound.js +52 -4
  256. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  257. package/daemon/dist/domain/gateway/slack/message.d.ts +3 -0
  258. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  259. package/daemon/dist/domain/gateway/slack/message.js +9 -2
  260. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  261. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +7 -0
  262. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  263. package/daemon/dist/domain/gateway/slack/queue-access.js +14 -2
  264. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  265. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +1 -3
  266. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  267. package/daemon/dist/domain/gateway/slack/slack-delivery.js +22 -22
  268. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  269. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  270. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +4 -7
  271. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  272. package/daemon/dist/domain/generated-file-hygiene.js +1 -1
  273. package/daemon/dist/domain/generated-file-hygiene.js.map +1 -1
  274. package/daemon/dist/domain/graph-projection.d.ts +3 -0
  275. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  276. package/daemon/dist/domain/graph-projection.js +2 -0
  277. package/daemon/dist/domain/graph-projection.js.map +1 -1
  278. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  279. package/daemon/dist/domain/health-diagnosis.js +14 -6
  280. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  281. package/daemon/dist/domain/hot-potato-enforcer.d.ts +1 -1
  282. package/daemon/dist/domain/human-questions.d.ts +2 -0
  283. package/daemon/dist/domain/human-questions.d.ts.map +1 -1
  284. package/daemon/dist/domain/human-questions.js +5 -0
  285. package/daemon/dist/domain/human-questions.js.map +1 -1
  286. package/daemon/dist/domain/kernel-boot.d.ts +5 -1
  287. package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
  288. package/daemon/dist/domain/kernel-boot.js +34 -4
  289. package/daemon/dist/domain/kernel-boot.js.map +1 -1
  290. package/daemon/dist/domain/managed-blocks.d.ts +32 -1
  291. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  292. package/daemon/dist/domain/managed-blocks.js +109 -11
  293. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  294. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
  295. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
  296. package/daemon/dist/domain/mission-control/mission-control-action-log.js +3 -0
  297. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
  298. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +21 -0
  299. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  300. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +110 -0
  301. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  302. package/daemon/dist/domain/model-divergence/current-model-reader.d.ts +2 -0
  303. package/daemon/dist/domain/model-divergence/current-model-reader.d.ts.map +1 -1
  304. package/daemon/dist/domain/model-divergence/current-model-reader.js +7 -0
  305. package/daemon/dist/domain/model-divergence/current-model-reader.js.map +1 -1
  306. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +10 -1
  307. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
  308. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +24 -5
  309. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
  310. package/daemon/dist/domain/native-process-lineage.d.ts +3 -0
  311. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  312. package/daemon/dist/domain/native-process-lineage.js +60 -2
  313. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  314. package/daemon/dist/domain/native-resume-probe-evidence.d.ts +19 -0
  315. package/daemon/dist/domain/native-resume-probe-evidence.d.ts.map +1 -0
  316. package/daemon/dist/domain/native-resume-probe-evidence.js +37 -0
  317. package/daemon/dist/domain/native-resume-probe-evidence.js.map +1 -0
  318. package/daemon/dist/domain/native-resume-probe.d.ts +7 -0
  319. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  320. package/daemon/dist/domain/native-resume-probe.js +12 -9
  321. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  322. package/daemon/dist/domain/node-inventory.d.ts +49 -1
  323. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  324. package/daemon/dist/domain/node-inventory.js +119 -45
  325. package/daemon/dist/domain/node-inventory.js.map +1 -1
  326. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  327. package/daemon/dist/domain/node-launcher.js +9 -3
  328. package/daemon/dist/domain/node-launcher.js.map +1 -1
  329. package/daemon/dist/domain/occupant-invalidator.d.ts +16 -4
  330. package/daemon/dist/domain/occupant-invalidator.d.ts.map +1 -1
  331. package/daemon/dist/domain/occupant-invalidator.js +25 -5
  332. package/daemon/dist/domain/occupant-invalidator.js.map +1 -1
  333. package/daemon/dist/domain/operation-correlation.d.ts +78 -0
  334. package/daemon/dist/domain/operation-correlation.d.ts.map +1 -0
  335. package/daemon/dist/domain/operation-correlation.js +54 -0
  336. package/daemon/dist/domain/operation-correlation.js.map +1 -0
  337. package/daemon/dist/domain/permission-account.d.ts +28 -0
  338. package/daemon/dist/domain/permission-account.d.ts.map +1 -0
  339. package/daemon/dist/domain/permission-account.js +102 -0
  340. package/daemon/dist/domain/permission-account.js.map +1 -0
  341. package/daemon/dist/domain/permission-drift.d.ts.map +1 -1
  342. package/daemon/dist/domain/permission-drift.js +11 -7
  343. package/daemon/dist/domain/permission-drift.js.map +1 -1
  344. package/daemon/dist/domain/pod-bundle-assembler.d.ts +1 -0
  345. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  346. package/daemon/dist/domain/pod-bundle-assembler.js +25 -0
  347. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  348. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +7 -0
  349. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -1
  350. package/daemon/dist/domain/policies/artifact-pool-helpers.js +8 -4
  351. package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -1
  352. package/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -1
  353. package/daemon/dist/domain/policies/context-usage-threshold.js +109 -21
  354. package/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -1
  355. package/daemon/dist/domain/policies/edge-artifact-required.d.ts +6 -1
  356. package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -1
  357. package/daemon/dist/domain/policies/edge-artifact-required.js +18 -13
  358. package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -1
  359. package/daemon/dist/domain/policies/mode-scheduled-end.d.ts +2 -0
  360. package/daemon/dist/domain/policies/mode-scheduled-end.d.ts.map +1 -1
  361. package/daemon/dist/domain/policies/mode-scheduled-end.js +5 -1
  362. package/daemon/dist/domain/policies/mode-scheduled-end.js.map +1 -1
  363. package/daemon/dist/domain/policies/periodic-reminder.d.ts +10 -0
  364. package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -1
  365. package/daemon/dist/domain/policies/periodic-reminder.js +11 -6
  366. package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -1
  367. package/daemon/dist/domain/policies/types.d.ts +25 -0
  368. package/daemon/dist/domain/policies/types.d.ts.map +1 -1
  369. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +6 -1
  370. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  371. package/daemon/dist/domain/policies/workflow-keepalive.js +11 -5
  372. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  373. package/daemon/dist/domain/profile-resolution-worker.d.ts +7 -0
  374. package/daemon/dist/domain/profile-resolution-worker.d.ts.map +1 -0
  375. package/daemon/dist/domain/profile-resolution-worker.js +83 -0
  376. package/daemon/dist/domain/profile-resolution-worker.js.map +1 -0
  377. package/daemon/dist/domain/profile-resolver.d.ts +6 -0
  378. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  379. package/daemon/dist/domain/profile-resolver.js +14 -2
  380. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  381. package/daemon/dist/domain/project-classifier.d.ts +7 -0
  382. package/daemon/dist/domain/project-classifier.d.ts.map +1 -1
  383. package/daemon/dist/domain/project-classifier.js +26 -0
  384. package/daemon/dist/domain/project-classifier.js.map +1 -1
  385. package/daemon/dist/domain/provider/subscription-move-report.d.ts +86 -0
  386. package/daemon/dist/domain/provider/subscription-move-report.d.ts.map +1 -0
  387. package/daemon/dist/domain/provider/subscription-move-report.js +227 -0
  388. package/daemon/dist/domain/provider/subscription-move-report.js.map +1 -0
  389. package/daemon/dist/domain/ps-projection.d.ts +6 -35
  390. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  391. package/daemon/dist/domain/ps-projection.js +14 -55
  392. package/daemon/dist/domain/ps-projection.js.map +1 -1
  393. package/daemon/dist/domain/queue-owner.d.ts +6 -3
  394. package/daemon/dist/domain/queue-owner.d.ts.map +1 -1
  395. package/daemon/dist/domain/queue-owner.js +10 -5
  396. package/daemon/dist/domain/queue-owner.js.map +1 -1
  397. package/daemon/dist/domain/queue-pickup.d.ts +5 -2
  398. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
  399. package/daemon/dist/domain/queue-pickup.js +19 -2
  400. package/daemon/dist/domain/queue-pickup.js.map +1 -1
  401. package/daemon/dist/domain/queue-repository.d.ts +54 -21
  402. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  403. package/daemon/dist/domain/queue-repository.js +257 -97
  404. package/daemon/dist/domain/queue-repository.js.map +1 -1
  405. package/daemon/dist/domain/queue-retention.d.ts +18 -0
  406. package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  407. package/daemon/dist/domain/queue-retention.js +74 -0
  408. package/daemon/dist/domain/queue-retention.js.map +1 -1
  409. package/daemon/dist/domain/queue-stuck-sweep.d.ts +2 -0
  410. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  411. package/daemon/dist/domain/queue-stuck-sweep.js +37 -3
  412. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  413. package/daemon/dist/domain/queue-wait-backoff.d.ts +3 -0
  414. package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
  415. package/daemon/dist/domain/queue-wait-backoff.js +9 -0
  416. package/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
  417. package/daemon/dist/domain/queue-waiting.d.ts +2 -0
  418. package/daemon/dist/domain/queue-waiting.d.ts.map +1 -1
  419. package/daemon/dist/domain/queue-waiting.js.map +1 -1
  420. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  421. package/daemon/dist/domain/queue-wake-ladder.js +18 -6
  422. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  423. package/daemon/dist/domain/reconciler.d.ts +23 -0
  424. package/daemon/dist/domain/reconciler.d.ts.map +1 -1
  425. package/daemon/dist/domain/reconciler.js +44 -1
  426. package/daemon/dist/domain/reconciler.js.map +1 -1
  427. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  428. package/daemon/dist/domain/rehydrate-eligibility.js +2 -3
  429. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  430. package/daemon/dist/domain/restore-guidance.d.ts +7 -0
  431. package/daemon/dist/domain/restore-guidance.d.ts.map +1 -1
  432. package/daemon/dist/domain/restore-guidance.js +20 -8
  433. package/daemon/dist/domain/restore-guidance.js.map +1 -1
  434. package/daemon/dist/domain/restore-orchestrator.d.ts +13 -1
  435. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  436. package/daemon/dist/domain/restore-orchestrator.js +151 -26
  437. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  438. package/daemon/dist/domain/restore-plan-preview.d.ts +7 -2
  439. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  440. package/daemon/dist/domain/restore-plan-preview.js +28 -7
  441. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  442. package/daemon/dist/domain/restore-policy.d.ts +4 -0
  443. package/daemon/dist/domain/restore-policy.d.ts.map +1 -1
  444. package/daemon/dist/domain/restore-policy.js +11 -0
  445. package/daemon/dist/domain/restore-policy.js.map +1 -1
  446. package/daemon/dist/domain/rig-edge-ops.d.ts +58 -0
  447. package/daemon/dist/domain/rig-edge-ops.d.ts.map +1 -0
  448. package/daemon/dist/domain/rig-edge-ops.js +113 -0
  449. package/daemon/dist/domain/rig-edge-ops.js.map +1 -0
  450. package/daemon/dist/domain/rig-name-override.d.ts +14 -0
  451. package/daemon/dist/domain/rig-name-override.d.ts.map +1 -0
  452. package/daemon/dist/domain/rig-name-override.js +38 -0
  453. package/daemon/dist/domain/rig-name-override.js.map +1 -0
  454. package/daemon/dist/domain/rig-repository.d.ts +10 -2
  455. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  456. package/daemon/dist/domain/rig-repository.js +14 -0
  457. package/daemon/dist/domain/rig-repository.js.map +1 -1
  458. package/daemon/dist/domain/rig-status-compose.d.ts +1 -1
  459. package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -1
  460. package/daemon/dist/domain/rig-status-compose.js +3 -1
  461. package/daemon/dist/domain/rig-status-compose.js.map +1 -1
  462. package/daemon/dist/domain/rig-teardown.d.ts +19 -0
  463. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  464. package/daemon/dist/domain/rig-teardown.js +78 -8
  465. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  466. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  467. package/daemon/dist/domain/rigspec-codec.js +10 -0
  468. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  469. package/daemon/dist/domain/rigspec-exporter.d.ts +3 -0
  470. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  471. package/daemon/dist/domain/rigspec-exporter.js +22 -0
  472. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  473. package/daemon/dist/domain/rigspec-instantiator.d.ts +30 -2
  474. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  475. package/daemon/dist/domain/rigspec-instantiator.js +262 -47
  476. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  477. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  478. package/daemon/dist/domain/rigspec-preflight.js +15 -2
  479. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  480. package/daemon/dist/domain/rigspec-schema.d.ts +3 -0
  481. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  482. package/daemon/dist/domain/rigspec-schema.js +67 -3
  483. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  484. package/daemon/dist/domain/runtime-adapter.d.ts +20 -1
  485. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  486. package/daemon/dist/domain/runtime-adapter.js +5 -1
  487. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  488. package/daemon/dist/domain/scope/scope-view-projection.d.ts +6 -0
  489. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  490. package/daemon/dist/domain/scope/scope-view-projection.js +26 -10
  491. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  492. package/daemon/dist/domain/seat-activity-service.d.ts +4 -2
  493. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  494. package/daemon/dist/domain/seat-activity-service.js +13 -5
  495. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  496. package/daemon/dist/domain/seat-attention-reconciler.d.ts +19 -0
  497. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  498. package/daemon/dist/domain/seat-attention-reconciler.js +60 -6
  499. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  500. package/daemon/dist/domain/seat-delivery-guard.d.ts +20 -1
  501. package/daemon/dist/domain/seat-delivery-guard.d.ts.map +1 -1
  502. package/daemon/dist/domain/seat-delivery-guard.js +66 -11
  503. package/daemon/dist/domain/seat-delivery-guard.js.map +1 -1
  504. package/daemon/dist/domain/seat-handover-service.d.ts +8 -0
  505. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  506. package/daemon/dist/domain/seat-handover-service.js +74 -4
  507. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  508. package/daemon/dist/domain/seat-identity-store.d.ts +11 -1
  509. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
  510. package/daemon/dist/domain/seat-identity-store.js +29 -4
  511. package/daemon/dist/domain/seat-identity-store.js.map +1 -1
  512. package/daemon/dist/domain/seat-launch-additions.d.ts +115 -0
  513. package/daemon/dist/domain/seat-launch-additions.d.ts.map +1 -0
  514. package/daemon/dist/domain/seat-launch-additions.js +439 -0
  515. package/daemon/dist/domain/seat-launch-additions.js.map +1 -0
  516. package/daemon/dist/domain/seat-launch-environment.d.ts +1 -1
  517. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -1
  518. package/daemon/dist/domain/seat-launch-environment.js +1 -1
  519. package/daemon/dist/domain/seat-launch-environment.js.map +1 -1
  520. package/daemon/dist/domain/seat-lifecycle-service.d.ts +79 -4
  521. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  522. package/daemon/dist/domain/seat-lifecycle-service.js +202 -12
  523. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  524. package/daemon/dist/domain/seat-skill-apply.d.ts +139 -0
  525. package/daemon/dist/domain/seat-skill-apply.d.ts.map +1 -0
  526. package/daemon/dist/domain/seat-skill-apply.js +221 -0
  527. package/daemon/dist/domain/seat-skill-apply.js.map +1 -0
  528. package/daemon/dist/domain/seat-skill-storage.d.ts +295 -0
  529. package/daemon/dist/domain/seat-skill-storage.d.ts.map +1 -0
  530. package/daemon/dist/domain/seat-skill-storage.js +850 -0
  531. package/daemon/dist/domain/seat-skill-storage.js.map +1 -0
  532. package/daemon/dist/domain/seat-status-service.d.ts +9 -0
  533. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  534. package/daemon/dist/domain/seat-status-service.js +15 -3
  535. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  536. package/daemon/dist/domain/session-registry.d.ts +4 -0
  537. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  538. package/daemon/dist/domain/session-registry.js +13 -0
  539. package/daemon/dist/domain/session-registry.js.map +1 -1
  540. package/daemon/dist/domain/session-transport.d.ts +52 -21
  541. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  542. package/daemon/dist/domain/session-transport.js +150 -47
  543. package/daemon/dist/domain/session-transport.js.map +1 -1
  544. package/daemon/dist/domain/skill-catalog.d.ts +16 -0
  545. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  546. package/daemon/dist/domain/skill-catalog.js +15 -6
  547. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  548. package/daemon/dist/domain/skill-discovery.d.ts +17 -2
  549. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
  550. package/daemon/dist/domain/skill-discovery.js +44 -5
  551. package/daemon/dist/domain/skill-discovery.js.map +1 -1
  552. package/daemon/dist/domain/startup-orchestrator.d.ts +26 -2
  553. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  554. package/daemon/dist/domain/startup-orchestrator.js +226 -14
  555. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  556. package/daemon/dist/domain/stream-dispositions.d.ts +51 -0
  557. package/daemon/dist/domain/stream-dispositions.d.ts.map +1 -0
  558. package/daemon/dist/domain/stream-dispositions.js +112 -0
  559. package/daemon/dist/domain/stream-dispositions.js.map +1 -0
  560. package/daemon/dist/domain/stream-store.d.ts +22 -0
  561. package/daemon/dist/domain/stream-store.d.ts.map +1 -1
  562. package/daemon/dist/domain/stream-store.js +49 -6
  563. package/daemon/dist/domain/stream-store.js.map +1 -1
  564. package/daemon/dist/domain/stream-subscriptions.d.ts +94 -0
  565. package/daemon/dist/domain/stream-subscriptions.d.ts.map +1 -0
  566. package/daemon/dist/domain/stream-subscriptions.js +160 -0
  567. package/daemon/dist/domain/stream-subscriptions.js.map +1 -0
  568. package/daemon/dist/domain/successor-session-launcher.d.ts +6 -0
  569. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  570. package/daemon/dist/domain/successor-session-launcher.js +5 -2
  571. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  572. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
  573. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  574. package/daemon/dist/domain/terminal/herdr-adapter.js +104 -1
  575. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  576. package/daemon/dist/domain/terminal/herdr-sessions.d.ts +9 -0
  577. package/daemon/dist/domain/terminal/herdr-sessions.d.ts.map +1 -0
  578. package/daemon/dist/domain/terminal/herdr-sessions.js +23 -0
  579. package/daemon/dist/domain/terminal/herdr-sessions.js.map +1 -0
  580. package/daemon/dist/domain/terminal/terminal-provider.d.ts +4 -0
  581. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  582. package/daemon/dist/domain/terminal/terminal-service.d.ts +12 -3
  583. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  584. package/daemon/dist/domain/terminal/terminal-service.js +42 -17
  585. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  586. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  587. package/daemon/dist/domain/terminal/view-composer.js +1 -0
  588. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  589. package/daemon/dist/domain/terminal-policy.d.ts +80 -0
  590. package/daemon/dist/domain/terminal-policy.d.ts.map +1 -0
  591. package/daemon/dist/domain/terminal-policy.js +117 -0
  592. package/daemon/dist/domain/terminal-policy.js.map +1 -0
  593. package/daemon/dist/domain/terminal-seat.d.ts +9 -0
  594. package/daemon/dist/domain/terminal-seat.d.ts.map +1 -0
  595. package/daemon/dist/domain/terminal-seat.js +37 -0
  596. package/daemon/dist/domain/terminal-seat.js.map +1 -0
  597. package/daemon/dist/domain/topology-converge.d.ts +25 -2
  598. package/daemon/dist/domain/topology-converge.d.ts.map +1 -1
  599. package/daemon/dist/domain/topology-converge.js +14 -1
  600. package/daemon/dist/domain/topology-converge.js.map +1 -1
  601. package/daemon/dist/domain/types.d.ts +58 -2
  602. package/daemon/dist/domain/types.d.ts.map +1 -1
  603. package/daemon/dist/domain/types.js.map +1 -1
  604. package/daemon/dist/domain/urgent-line.d.ts +4 -0
  605. package/daemon/dist/domain/urgent-line.d.ts.map +1 -0
  606. package/daemon/dist/domain/urgent-line.js +7 -0
  607. package/daemon/dist/domain/urgent-line.js.map +1 -0
  608. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  609. package/daemon/dist/domain/usage-series.js +6 -2
  610. package/daemon/dist/domain/usage-series.js.map +1 -1
  611. package/daemon/dist/domain/user-settings/settings-browser.js +2 -2
  612. package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -1
  613. package/daemon/dist/domain/user-settings/settings-store.d.ts +3 -1
  614. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  615. package/daemon/dist/domain/user-settings/settings-store.js +73 -1
  616. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  617. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  618. package/daemon/dist/domain/view-projector.js +2 -1
  619. package/daemon/dist/domain/view-projector.js.map +1 -1
  620. package/daemon/dist/domain/watchdog-delivery.js +1 -1
  621. package/daemon/dist/domain/watchdog-delivery.js.map +1 -1
  622. package/daemon/dist/domain/watchdog-job-update.d.ts +21 -0
  623. package/daemon/dist/domain/watchdog-job-update.d.ts.map +1 -0
  624. package/daemon/dist/domain/watchdog-job-update.js +143 -0
  625. package/daemon/dist/domain/watchdog-job-update.js.map +1 -0
  626. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +63 -7
  627. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  628. package/daemon/dist/domain/watchdog-jobs-repository.js +190 -21
  629. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  630. package/daemon/dist/domain/watchdog-policy-engine.d.ts +23 -0
  631. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  632. package/daemon/dist/domain/watchdog-policy-engine.js +46 -13
  633. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  634. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  635. package/daemon/dist/domain/workflow-exception-escalation.js +7 -3
  636. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  637. package/daemon/dist/domain/workflow-projector.d.ts +5 -2
  638. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  639. package/daemon/dist/domain/workflow-projector.js +16 -7
  640. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  641. package/daemon/dist/domain/workflow-runtime.d.ts +8 -2
  642. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  643. package/daemon/dist/domain/workflow-runtime.js +30 -7
  644. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  645. package/daemon/dist/domain/workspace/project-read.d.ts +2 -0
  646. package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -1
  647. package/daemon/dist/domain/workspace/project-read.js +10 -1
  648. package/daemon/dist/domain/workspace/project-read.js.map +1 -1
  649. package/daemon/dist/index.d.ts.map +1 -1
  650. package/daemon/dist/index.js +2 -0
  651. package/daemon/dist/index.js.map +1 -1
  652. package/daemon/dist/router-line-surface.d.ts +2 -0
  653. package/daemon/dist/router-line-surface.d.ts.map +1 -0
  654. package/daemon/dist/router-line-surface.js +3 -0
  655. package/daemon/dist/router-line-surface.js.map +1 -0
  656. package/daemon/dist/routes/activity.d.ts.map +1 -1
  657. package/daemon/dist/routes/activity.js +3 -0
  658. package/daemon/dist/routes/activity.js.map +1 -1
  659. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  660. package/daemon/dist/routes/agent-images.js +10 -2
  661. package/daemon/dist/routes/agent-images.js.map +1 -1
  662. package/daemon/dist/routes/attention.d.ts.map +1 -1
  663. package/daemon/dist/routes/attention.js +30 -3
  664. package/daemon/dist/routes/attention.js.map +1 -1
  665. package/daemon/dist/routes/bootstrap-failure-response.js +2 -2
  666. package/daemon/dist/routes/bootstrap-failure-response.js.map +1 -1
  667. package/daemon/dist/routes/bundles.js +1 -1
  668. package/daemon/dist/routes/bundles.js.map +1 -1
  669. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  670. package/daemon/dist/routes/compaction.js +31 -10
  671. package/daemon/dist/routes/compaction.js.map +1 -1
  672. package/daemon/dist/routes/hosts.d.ts.map +1 -1
  673. package/daemon/dist/routes/hosts.js +2 -0
  674. package/daemon/dist/routes/hosts.js.map +1 -1
  675. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  676. package/daemon/dist/routes/mission-control.js +5 -1
  677. package/daemon/dist/routes/mission-control.js.map +1 -1
  678. package/daemon/dist/routes/projects.d.ts.map +1 -1
  679. package/daemon/dist/routes/projects.js +59 -12
  680. package/daemon/dist/routes/projects.js.map +1 -1
  681. package/daemon/dist/routes/proof.js +2 -2
  682. package/daemon/dist/routes/proof.js.map +1 -1
  683. package/daemon/dist/routes/provider.d.ts.map +1 -1
  684. package/daemon/dist/routes/provider.js +87 -0
  685. package/daemon/dist/routes/provider.js.map +1 -1
  686. package/daemon/dist/routes/queue.d.ts.map +1 -1
  687. package/daemon/dist/routes/queue.js +52 -3
  688. package/daemon/dist/routes/queue.js.map +1 -1
  689. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  690. package/daemon/dist/routes/rigs.js +75 -10
  691. package/daemon/dist/routes/rigs.js.map +1 -1
  692. package/daemon/dist/routes/rigspec.d.ts.map +1 -1
  693. package/daemon/dist/routes/rigspec.js +38 -12
  694. package/daemon/dist/routes/rigspec.js.map +1 -1
  695. package/daemon/dist/routes/scopes.d.ts.map +1 -1
  696. package/daemon/dist/routes/scopes.js +30 -7
  697. package/daemon/dist/routes/scopes.js.map +1 -1
  698. package/daemon/dist/routes/seat.d.ts.map +1 -1
  699. package/daemon/dist/routes/seat.js +19 -3
  700. package/daemon/dist/routes/seat.js.map +1 -1
  701. package/daemon/dist/routes/sessions.js +5 -0
  702. package/daemon/dist/routes/sessions.js.map +1 -1
  703. package/daemon/dist/routes/skills.d.ts.map +1 -1
  704. package/daemon/dist/routes/skills.js +54 -1
  705. package/daemon/dist/routes/skills.js.map +1 -1
  706. package/daemon/dist/routes/stream.d.ts.map +1 -1
  707. package/daemon/dist/routes/stream.js +62 -13
  708. package/daemon/dist/routes/stream.js.map +1 -1
  709. package/daemon/dist/routes/terminal.d.ts.map +1 -1
  710. package/daemon/dist/routes/terminal.js +20 -11
  711. package/daemon/dist/routes/terminal.js.map +1 -1
  712. package/daemon/dist/routes/transport.d.ts.map +1 -1
  713. package/daemon/dist/routes/transport.js +24 -2
  714. package/daemon/dist/routes/transport.js.map +1 -1
  715. package/daemon/dist/routes/up.js +5 -0
  716. package/daemon/dist/routes/up.js.map +1 -1
  717. package/daemon/dist/routes/watchdog.d.ts +1 -0
  718. package/daemon/dist/routes/watchdog.d.ts.map +1 -1
  719. package/daemon/dist/routes/watchdog.js +52 -3
  720. package/daemon/dist/routes/watchdog.js.map +1 -1
  721. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  722. package/daemon/dist/routes/workflow.js +24 -13
  723. package/daemon/dist/routes/workflow.js.map +1 -1
  724. package/daemon/dist/server.d.ts +2 -0
  725. package/daemon/dist/server.d.ts.map +1 -1
  726. package/daemon/dist/server.js +4 -1
  727. package/daemon/dist/server.js.map +1 -1
  728. package/daemon/dist/skill-loadout-surface.d.ts +2 -0
  729. package/daemon/dist/skill-loadout-surface.d.ts.map +1 -1
  730. package/daemon/dist/skill-loadout-surface.js +2 -0
  731. package/daemon/dist/skill-loadout-surface.js.map +1 -1
  732. package/daemon/dist/startup.d.ts.map +1 -1
  733. package/daemon/dist/startup.js +54 -21
  734. package/daemon/dist/startup.js.map +1 -1
  735. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  736. package/daemon/dist/terminal/TerminalSessionBroker.js +9 -2
  737. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  738. package/daemon/docs/reference/a2a-agents.md +343 -0
  739. package/daemon/docs/reference/acp-agents.md +77 -0
  740. package/daemon/docs/reference/agent-spec.md +7 -5
  741. package/daemon/docs/reference/agent-startup-guide.md +46 -0
  742. package/daemon/docs/reference/agent-state-taxonomy.md +27 -2
  743. package/daemon/docs/reference/checked-seat-stop.md +11 -0
  744. package/daemon/docs/reference/community-harness-examples/cursor/cursor.yaml +13 -0
  745. package/daemon/docs/reference/community-harness-examples/cursor/openrig-cursor-launch +61 -0
  746. package/daemon/docs/reference/community-harness-examples/hermes/config.yaml.example +18 -0
  747. package/daemon/docs/reference/community-harness-examples/hermes/hermes.yaml +12 -0
  748. package/daemon/docs/reference/community-harness-examples/hermes/openrig-hermes-launch +34 -0
  749. package/daemon/docs/reference/community-harness-examples/openclaw/openclaw.yaml +13 -0
  750. package/daemon/docs/reference/community-harness-examples/openclaw/openrig-openclaw-launch +38 -0
  751. package/daemon/docs/reference/community-harness-presets.md +179 -0
  752. package/daemon/docs/reference/getting-started.md +65 -6
  753. package/daemon/docs/reference/operation-correlation.md +9 -0
  754. package/daemon/docs/reference/project-workspace.md +6 -0
  755. package/daemon/docs/reference/quickstart.md +1 -1
  756. package/daemon/docs/reference/refocus-channel.md +6 -4
  757. package/daemon/docs/reference/rig-spec.md +82 -2
  758. package/daemon/docs/reference/seat-delivery.md +73 -2
  759. package/daemon/docs/reference/slack-app-setup.md +3 -1
  760. package/daemon/docs/reference/stream-classifier-worker.md +28 -0
  761. package/daemon/docs/reference/telemetry.md +3 -0
  762. package/daemon/docs/reference/terminal-sessions.md +90 -0
  763. package/daemon/docs/reference/topology-naming.md +1 -1
  764. package/daemon/docs/reference/whats-new.md +162 -113
  765. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +0 -3
  766. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +19 -4
  767. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +3 -0
  768. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +2 -2
  769. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +36 -10
  770. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +11 -0
  771. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -1
  772. package/daemon/specs/rigs/launch/secrets-manager/secrets-manager.compose.yaml +1 -1
  773. package/dist/acp/connector.d.ts +72 -0
  774. package/dist/acp/connector.d.ts.map +1 -0
  775. package/dist/acp/connector.js +218 -0
  776. package/dist/acp/connector.js.map +1 -0
  777. package/dist/acp/json-rpc-stdio.d.ts +53 -0
  778. package/dist/acp/json-rpc-stdio.d.ts.map +1 -0
  779. package/dist/acp/json-rpc-stdio.js +141 -0
  780. package/dist/acp/json-rpc-stdio.js.map +1 -0
  781. package/dist/acp/run-processes.d.ts +10 -0
  782. package/dist/acp/run-processes.d.ts.map +1 -0
  783. package/dist/acp/run-processes.js +33 -0
  784. package/dist/acp/run-processes.js.map +1 -0
  785. package/dist/build-info.js +3 -3
  786. package/dist/client.d.ts +7 -2
  787. package/dist/client.d.ts.map +1 -1
  788. package/dist/client.js +14 -7
  789. package/dist/client.js.map +1 -1
  790. package/dist/commands/acp.d.ts +11 -0
  791. package/dist/commands/acp.d.ts.map +1 -0
  792. package/dist/commands/acp.js +198 -0
  793. package/dist/commands/acp.js.map +1 -0
  794. package/dist/commands/attach.js +1 -1
  795. package/dist/commands/attach.js.map +1 -1
  796. package/dist/commands/auth.d.ts +3 -0
  797. package/dist/commands/auth.d.ts.map +1 -1
  798. package/dist/commands/auth.js +39 -10
  799. package/dist/commands/auth.js.map +1 -1
  800. package/dist/commands/compact-plan.d.ts +2 -0
  801. package/dist/commands/compact-plan.d.ts.map +1 -1
  802. package/dist/commands/compact-plan.js +38 -3
  803. package/dist/commands/compact-plan.js.map +1 -1
  804. package/dist/commands/compact.js +1 -1
  805. package/dist/commands/compact.js.map +1 -1
  806. package/dist/commands/config.d.ts.map +1 -1
  807. package/dist/commands/config.js +7 -1
  808. package/dist/commands/config.js.map +1 -1
  809. package/dist/commands/create.js +2 -2
  810. package/dist/commands/create.js.map +1 -1
  811. package/dist/commands/daemon.d.ts.map +1 -1
  812. package/dist/commands/daemon.js +2 -0
  813. package/dist/commands/daemon.js.map +1 -1
  814. package/dist/commands/down.d.ts +5 -1
  815. package/dist/commands/down.d.ts.map +1 -1
  816. package/dist/commands/down.js +87 -3
  817. package/dist/commands/down.js.map +1 -1
  818. package/dist/commands/edge.d.ts +4 -0
  819. package/dist/commands/edge.d.ts.map +1 -0
  820. package/dist/commands/edge.js +135 -0
  821. package/dist/commands/edge.js.map +1 -0
  822. package/dist/commands/export.d.ts +1 -0
  823. package/dist/commands/export.d.ts.map +1 -1
  824. package/dist/commands/export.js +51 -0
  825. package/dist/commands/export.js.map +1 -1
  826. package/dist/commands/fork.d.ts.map +1 -1
  827. package/dist/commands/fork.js +19 -2
  828. package/dist/commands/fork.js.map +1 -1
  829. package/dist/commands/gateway.d.ts.map +1 -1
  830. package/dist/commands/gateway.js +2 -1
  831. package/dist/commands/gateway.js.map +1 -1
  832. package/dist/commands/grow.js +2 -2
  833. package/dist/commands/grow.js.map +1 -1
  834. package/dist/commands/launch.js +1 -1
  835. package/dist/commands/launch.js.map +1 -1
  836. package/dist/commands/mcp.d.ts.map +1 -1
  837. package/dist/commands/mcp.js +113 -1
  838. package/dist/commands/mcp.js.map +1 -1
  839. package/dist/commands/project-worker.d.ts +25 -1
  840. package/dist/commands/project-worker.d.ts.map +1 -1
  841. package/dist/commands/project-worker.js +9 -7
  842. package/dist/commands/project-worker.js.map +1 -1
  843. package/dist/commands/project.d.ts +2 -0
  844. package/dist/commands/project.d.ts.map +1 -1
  845. package/dist/commands/project.js +64 -1
  846. package/dist/commands/project.js.map +1 -1
  847. package/dist/commands/provider.d.ts.map +1 -1
  848. package/dist/commands/provider.js +101 -0
  849. package/dist/commands/provider.js.map +1 -1
  850. package/dist/commands/ps.d.ts +12 -1
  851. package/dist/commands/ps.d.ts.map +1 -1
  852. package/dist/commands/ps.js +50 -47
  853. package/dist/commands/ps.js.map +1 -1
  854. package/dist/commands/queue.d.ts +4 -2
  855. package/dist/commands/queue.d.ts.map +1 -1
  856. package/dist/commands/queue.js +24 -15
  857. package/dist/commands/queue.js.map +1 -1
  858. package/dist/commands/reconcile-session.d.ts.map +1 -1
  859. package/dist/commands/reconcile-session.js +6 -0
  860. package/dist/commands/reconcile-session.js.map +1 -1
  861. package/dist/commands/seat.d.ts +2 -0
  862. package/dist/commands/seat.d.ts.map +1 -1
  863. package/dist/commands/seat.js +124 -6
  864. package/dist/commands/seat.js.map +1 -1
  865. package/dist/commands/send.d.ts.map +1 -1
  866. package/dist/commands/send.js +62 -55
  867. package/dist/commands/send.js.map +1 -1
  868. package/dist/commands/setup.d.ts +24 -0
  869. package/dist/commands/setup.d.ts.map +1 -1
  870. package/dist/commands/setup.js +160 -7
  871. package/dist/commands/setup.js.map +1 -1
  872. package/dist/commands/skill.d.ts.map +1 -1
  873. package/dist/commands/skill.js +116 -3
  874. package/dist/commands/skill.js.map +1 -1
  875. package/dist/commands/start.d.ts.map +1 -1
  876. package/dist/commands/start.js +18 -25
  877. package/dist/commands/start.js.map +1 -1
  878. package/dist/commands/status.d.ts.map +1 -1
  879. package/dist/commands/status.js +4 -1
  880. package/dist/commands/status.js.map +1 -1
  881. package/dist/commands/stream-outcome.d.ts +157 -0
  882. package/dist/commands/stream-outcome.d.ts.map +1 -0
  883. package/dist/commands/stream-outcome.js +81 -0
  884. package/dist/commands/stream-outcome.js.map +1 -0
  885. package/dist/commands/stream.d.ts.map +1 -1
  886. package/dist/commands/stream.js +64 -2
  887. package/dist/commands/stream.js.map +1 -1
  888. package/dist/commands/terminal.d.ts +1 -0
  889. package/dist/commands/terminal.d.ts.map +1 -1
  890. package/dist/commands/terminal.js +35 -6
  891. package/dist/commands/terminal.js.map +1 -1
  892. package/dist/commands/topology-default-agent.d.ts +2 -2
  893. package/dist/commands/topology-default-agent.d.ts.map +1 -1
  894. package/dist/commands/topology-default-agent.js +5 -3
  895. package/dist/commands/topology-default-agent.js.map +1 -1
  896. package/dist/commands/up.d.ts.map +1 -1
  897. package/dist/commands/up.js +75 -30
  898. package/dist/commands/up.js.map +1 -1
  899. package/dist/commands/watchdog.d.ts.map +1 -1
  900. package/dist/commands/watchdog.js +80 -5
  901. package/dist/commands/watchdog.js.map +1 -1
  902. package/dist/commands/workflow-errors.js +1 -1
  903. package/dist/commands/workflow-errors.js.map +1 -1
  904. package/dist/commands/workflow-render.js +4 -4
  905. package/dist/commands/workflow-render.js.map +1 -1
  906. package/dist/commands/workflow.d.ts.map +1 -1
  907. package/dist/commands/workflow.js +34 -15
  908. package/dist/commands/workflow.js.map +1 -1
  909. package/dist/config-store.d.ts +15 -1
  910. package/dist/config-store.d.ts.map +1 -1
  911. package/dist/config-store.js +86 -4
  912. package/dist/config-store.js.map +1 -1
  913. package/dist/daemon-lifecycle.d.ts +4 -0
  914. package/dist/daemon-lifecycle.d.ts.map +1 -1
  915. package/dist/daemon-lifecycle.js +73 -21
  916. package/dist/daemon-lifecycle.js.map +1 -1
  917. package/dist/decisions/decisions.d.ts +203 -0
  918. package/dist/decisions/decisions.d.ts.map +1 -0
  919. package/dist/decisions/decisions.js +374 -0
  920. package/dist/decisions/decisions.js.map +1 -0
  921. package/dist/decisions/stream-consumer.d.ts +255 -0
  922. package/dist/decisions/stream-consumer.d.ts.map +1 -0
  923. package/dist/decisions/stream-consumer.js +282 -0
  924. package/dist/decisions/stream-consumer.js.map +1 -0
  925. package/dist/decisions/templates.d.ts +8 -0
  926. package/dist/decisions/templates.d.ts.map +1 -0
  927. package/dist/decisions/templates.js +34 -0
  928. package/dist/decisions/templates.js.map +1 -0
  929. package/dist/fresh-seat-command.d.ts +18 -0
  930. package/dist/fresh-seat-command.d.ts.map +1 -0
  931. package/dist/fresh-seat-command.js +36 -0
  932. package/dist/fresh-seat-command.js.map +1 -0
  933. package/dist/front-door.d.ts +4 -0
  934. package/dist/front-door.d.ts.map +1 -1
  935. package/dist/front-door.js +8 -4
  936. package/dist/front-door.js.map +1 -1
  937. package/dist/host-bindings.d.ts.map +1 -1
  938. package/dist/host-bindings.js +16 -9
  939. package/dist/host-bindings.js.map +1 -1
  940. package/dist/index.d.ts +2 -0
  941. package/dist/index.d.ts.map +1 -1
  942. package/dist/index.js +4 -0
  943. package/dist/index.js.map +1 -1
  944. package/dist/lazy-program.d.ts.map +1 -1
  945. package/dist/lazy-program.js +2 -0
  946. package/dist/lazy-program.js.map +1 -1
  947. package/dist/lib/run-on-host.d.ts +29 -0
  948. package/dist/lib/run-on-host.d.ts.map +1 -0
  949. package/dist/lib/run-on-host.js +69 -0
  950. package/dist/lib/run-on-host.js.map +1 -0
  951. package/dist/lib/seat-activity.d.ts +17 -0
  952. package/dist/lib/seat-activity.d.ts.map +1 -0
  953. package/dist/lib/seat-activity.js +29 -0
  954. package/dist/lib/seat-activity.js.map +1 -0
  955. package/dist/local-daemon-owner.d.ts +4 -0
  956. package/dist/local-daemon-owner.d.ts.map +1 -1
  957. package/dist/local-daemon-owner.js +1 -1
  958. package/dist/local-daemon-owner.js.map +1 -1
  959. package/dist/mcp-http.d.ts +42 -0
  960. package/dist/mcp-http.d.ts.map +1 -0
  961. package/dist/mcp-http.js +232 -0
  962. package/dist/mcp-http.js.map +1 -0
  963. package/dist/mcp-server.d.ts +30 -2
  964. package/dist/mcp-server.d.ts.map +1 -1
  965. package/dist/mcp-server.js +1112 -436
  966. package/dist/mcp-server.js.map +1 -1
  967. package/dist/seat-launch-additions-lines.d.ts +11 -0
  968. package/dist/seat-launch-additions-lines.d.ts.map +1 -0
  969. package/dist/seat-launch-additions-lines.js +14 -0
  970. package/dist/seat-launch-additions-lines.js.map +1 -0
  971. package/dist/terminal-window.d.ts +1 -1
  972. package/dist/terminal-window.d.ts.map +1 -1
  973. package/dist/terminal-window.js +50 -22
  974. package/dist/terminal-window.js.map +1 -1
  975. package/package.json +1 -1
  976. package/tui/dist/attention/attention-model.d.ts +3 -1
  977. package/tui/dist/attention/attention-model.d.ts.map +1 -1
  978. package/tui/dist/attention/attention-model.js +68 -1
  979. package/tui/dist/attention/attention-model.js.map +1 -1
  980. package/tui/dist/commands/registry.d.ts.map +1 -1
  981. package/tui/dist/commands/registry.js +2 -0
  982. package/tui/dist/commands/registry.js.map +1 -1
  983. package/tui/dist/config/config-model.d.ts.map +1 -1
  984. package/tui/dist/config/config-model.js +2 -0
  985. package/tui/dist/config/config-model.js.map +1 -1
  986. package/tui/dist/daemon-client.d.ts +18 -0
  987. package/tui/dist/daemon-client.d.ts.map +1 -1
  988. package/tui/dist/daemon-client.js +4 -0
  989. package/tui/dist/daemon-client.js.map +1 -1
  990. package/tui/dist/hydrate.d.ts.map +1 -1
  991. package/tui/dist/hydrate.js +9 -6
  992. package/tui/dist/hydrate.js.map +1 -1
  993. package/tui/dist/main.js +15 -1
  994. package/tui/dist/main.js.map +1 -1
  995. package/tui/dist/render.d.ts.map +1 -1
  996. package/tui/dist/render.js +10 -3
  997. package/tui/dist/render.js.map +1 -1
  998. package/tui/dist/topology/fixture.js +1 -1
  999. package/tui/dist/topology/fixture.js.map +1 -1
  1000. package/tui/dist/topology/glyphs.js +1 -1
  1001. package/tui/dist/topology/glyphs.js.map +1 -1
  1002. package/tui/dist/topology/graph-types.d.ts +1 -0
  1003. package/tui/dist/topology/graph-types.d.ts.map +1 -1
  1004. package/tui/dist/types.d.ts +25 -0
  1005. package/tui/dist/types.d.ts.map +1 -1
  1006. package/ui/dist/assets/{index-CVgod3Pm.js → index-Blg-p32B.js} +92 -92
  1007. package/ui/dist/index.html +1 -1
@@ -1,13 +1,15 @@
1
1
  import { PROMPT_ALERT_TAG, readWakeLadderBackstop } from "./queue-wake-ladder.js";
2
+ import { withUrgentLine } from "./urgent-line.js";
2
3
  import { quietCustodyBackstop, quietHoldCustody } from "./quiet-hold-custody.js";
3
4
  import { createHash } from "node:crypto";
4
- import { loadHumanRegistry, resolveRegisteredHumanAddress } from "./gateway/human-registry.js";
5
+ import { loadHumanRegistry, resolveRegisteredHumanAddress, slackSubscriptionFor, withHumanAlertTag } from "./gateway/human-registry.js";
5
6
  import { resolveExternal } from "./gateway/external-admission.js";
6
7
  import { QueueTransitionLog } from "./queue-transition-log.js";
7
8
  import { WAKE_INTENT_PREFIX } from "./outbox-handler.js";
8
9
  import { derivePickup } from "./queue-pickup.js";
9
10
  import { lastMeaningfulTransition, readWaitingView } from "./queue-waiting.js";
10
11
  import { wrapPaneEnvelope } from "../lib/pane-envelope.js";
12
+ import { isBoundTerminalSeat } from "./terminal-seat.js";
11
13
  import { renderQueueHandoffNudge } from "./queue-nudge-text.js";
12
14
  import { getSelfHostId } from "./hosts/fanout-contract.js";
13
15
  import { parseSessionName, isHumanSeatSessionRef } from "./session-name.js";
@@ -63,6 +65,10 @@ export function hasLiveHumanGate(item) {
63
65
  return isBlockerLive(item.state) && isHumanSeatSessionRef(item.destinationSession);
64
66
  }
65
67
  const AUTO_UNPARK_WAKE_TAG = "queue:auto-unpark:blocker";
68
+ /** A durable wake OpenRig's own scheduling triggered (an auto-unpark, a row OpenRig creates), not an agent's create or
69
+ * handoff: it keeps that source when it's replayed later. Send, broadcast, queue create and the cross-host forward never
70
+ * set it from a request; the trusted local outbox recorder (/api/queue/outbox/record) accepts caller tags by design. */
71
+ const WAKE_TRIGGER_OPENRIG_TAG = "queue:wake-trigger:openrig";
66
72
  const AUTO_UNPARK_BLOCKER_TAG_PREFIX = "queue:auto-unpark:blocker-ref:";
67
73
  /** The actor on the transition routeToFallback writes; the row's own history is how a later reroute finds the line it wrote. */
68
74
  const FALLBACK_ACTOR = "system:queue-fallback";
@@ -125,33 +131,15 @@ export function classifyNudgeFailure(lastNudgeResult) {
125
131
  return "unknown";
126
132
  }
127
133
  export const QUEUE_PRIORITIES = ["routine", "urgent", "critical"];
128
- /** #1278: reject incomplete or invalid readings and keep only the four diagnostic fields. */
129
- function inputBoxReading(inputBox) {
130
- if (!inputBox || typeof inputBox !== "object")
131
- return undefined;
132
- const { seat, before, after, sameProcess } = inputBox;
133
- if (!["idle", "not-idle", "unknown", "unchecked"].includes(seat) || typeof sameProcess !== "boolean")
134
- return undefined;
135
- const readings = ["exact", "ambiguous", "empty", "queued", "hidden", "other", "unrecognized", "unavailable", "unchecked"];
136
- if (!readings.includes(before) || !readings.includes(after))
137
- return undefined;
138
- return { seat, before, after, sameProcess };
139
- }
140
- /** #1278: read a stored reading back; an absent or unreadable value reads unknown (null). The
141
- * reading carries its attempt's timestamp (`at`), and reads unknown unless that is still the row's
142
- * latest attempt: an older daemon records an attempt without touching this column, so a reading
143
- * left behind by an earlier attempt must not read as the latest one's. */
144
- function parseNudgeInputBox(stored, lastAttempt) {
145
- if (!stored || !lastAttempt)
146
- return null;
147
- try {
148
- const parsed = JSON.parse(stored);
149
- if (parsed?.at !== lastAttempt)
150
- return null;
151
- return inputBoxReading(parsed) ?? null;
134
+ /** Adds the handoff-successor and updated-since filters both list paths share. */
135
+ function pushFollowThroughFilters(opts, conditions, params) {
136
+ if (opts?.handedOffFrom) {
137
+ conditions.push("handed_off_from = ?");
138
+ params.push(opts.handedOffFrom);
152
139
  }
153
- catch {
154
- return null;
140
+ if (opts?.updatedSince) {
141
+ conditions.push("ts_updated >= ?");
142
+ params.push(opts.updatedSince);
155
143
  }
156
144
  }
157
145
  /** The message a `--wake-after` park timer carries when its owner gives none. */
@@ -292,7 +280,6 @@ function detectTable(db, tableName) {
292
280
  // and named in fieldsElided, never backfilled as empty.
293
281
  const COMPACT_ELIDED_FIELDS = [
294
282
  "body", "evidenceRef", "humanDetail", "waiting", "chainOfRecord", "replyTo", "humanQuestions", "humanAnswers", "delegatedDecision",
295
- "lastNudgeInputBox",
296
283
  ];
297
284
  function compactRow(item) {
298
285
  const row = { ...item, fieldsElided: [...COMPACT_ELIDED_FIELDS] };
@@ -453,8 +440,6 @@ export class QueueRepository {
453
440
  hasHumanQuestionsColumn;
454
441
  hasDelegatedDecisionColumn;
455
442
  hasEvidenceRefColumn;
456
- /** #1278 — migration 116; older fixtures without it record no reading. */
457
- hasNudgeInputBoxColumn;
458
443
  hasMintingGenColumn;
459
444
  hasClaimedGenColumn;
460
445
  hasQueueTransitionsTable;
@@ -484,7 +469,6 @@ export class QueueRepository {
484
469
  this.hasHumanQuestionsColumn = detectQueueColumn(db, "human_questions");
485
470
  this.hasDelegatedDecisionColumn = detectQueueColumn(db, "delegated_decision");
486
471
  this.hasEvidenceRefColumn = detectQueueColumn(db, "evidence_ref");
487
- this.hasNudgeInputBoxColumn = detectQueueColumn(db, "last_nudge_input_box");
488
472
  this.hasQueueTransitionsTable = detectTable(db, "queue_transitions");
489
473
  const transitionColumns = this.hasQueueTransitionsTable
490
474
  ? new Set(db.prepare("PRAGMA table_info(queue_transitions)").all().map((column) => column.name))
@@ -561,23 +545,30 @@ export class QueueRepository {
561
545
  .get(entry.auditPointer);
562
546
  return expected === latest?.transition_id;
563
547
  }
548
+ /** A wake's source and urgency at the seat's level: the trigger decides the source; the row's priority (urgent or
549
+ * critical) makes it urgent, marked by whoever created the row. */
550
+ wakeAdmission(qitemId, trigger) {
551
+ const row = this.getById(qitemId);
552
+ const urgent = row?.priority === "urgent" || row?.priority === "critical";
553
+ // OpenRig's own row is marked urgent by OpenRig, not by the person whose obligation it's about.
554
+ return { source: trigger, urgent, ...(urgent && row ? { urgentBy: trigger === "openrig" ? "OpenRig" : row.sourceSession } : {}) };
555
+ }
564
556
  classifyWakeResult(res) {
565
- // #1278: the reading rides along unchanged; it never alters the classification.
566
- const inputBox = inputBoxReading(res.inputBox);
567
- const reading = inputBox ? { inputBox } : {};
557
+ // Held by the seat's hold or interruption level (on purpose; a retry is held again) is the typing guard's; any other
558
+ // retention is the draft-aware delivery's (a draft, an unreadable input, a native prompt), which can clear.
568
559
  if (res.outcome === "retained")
569
- return { classified: "retained", nudgeResult: res.reason?.startsWith("draft_")
570
- ? "retained:draft_aware" : "retained:typing_guard", ...reading };
560
+ return { classified: "retained", nudgeResult: res.reason === "typing_guard_enabled"
561
+ ? "retained:typing_guard" : "retained:draft_aware" };
571
562
  if (res.ok)
572
- return res.verified ? { classified: "verified", nudgeResult: "verified", ...reading } : { classified: "indeterminate", nudgeResult: "delivered-ack-pending", ...reading };
563
+ return res.verified ? { classified: "verified", nudgeResult: "verified" } : { classified: "indeterminate", nudgeResult: "delivered-ack-pending" };
573
564
  const detail = res.error ?? res.reason ?? "unknown";
574
565
  // Input evidence survives receipt removal: an issued paste or uncertain Enter is never an unsent failure.
575
566
  const inputUncertain = res.sent === true || res.inputPhase === "attempted" || res.inputPhase === "written"
576
567
  || (res.sent !== false && res.inputPhase !== "not_reached" && (res.reason === "delivery_indeterminate" || res.reason === "submit_failed"));
577
568
  if (inputUncertain || isWakeTimeoutSignal(res.reason) || isWakeTimeoutSignal(res.error)) {
578
- return { classified: "indeterminate", nudgeResult: `indeterminate:${detail}`, ...reading };
569
+ return { classified: "indeterminate", nudgeResult: `indeterminate:${detail}` };
579
570
  }
580
- return { classified: "failed", nudgeResult: `failed:${detail}`, ...reading };
571
+ return { classified: "failed", nudgeResult: `failed:${detail}` };
581
572
  }
582
573
  /**
583
574
  * W1 (transactional closure): attach the durable wake-intent store AFTER
@@ -611,9 +602,13 @@ export class QueueRepository {
611
602
  return { kind: "human-required", level: "ALERT" };
612
603
  const destinationHuman = resolveRegisteredHumanAddress(input.destinationSession, registry.entities);
613
604
  if (input.action === "create" && destinationHuman !== null) {
605
+ // The person's Slack subscription decides: `every-ask` (the default) posts every ask (ALERT); `urgent-only` posts only
606
+ // one marked --alert, and a plain ask lands on Steering and the TUI (RECORD: below the posting dial, so no post is owed).
607
+ const person = registry.entities.find((entity) => entity.address === destinationHuman);
608
+ const posts = input.humanAlert === true || slackSubscriptionFor(person).preset === "every-ask";
614
609
  return input.humanIntent === "update"
615
610
  ? { kind: "human-update", level: "NOTICE" }
616
- : { kind: "human-required", level: "ALERT" };
611
+ : { kind: "human-required", level: posts ? "ALERT" : "RECORD" };
617
612
  }
618
613
  return null;
619
614
  }
@@ -635,7 +630,7 @@ export class QueueRepository {
635
630
  * `nudge:false` intends no wake ⇒ no intent. A missing outbox is enforced by the
636
631
  * guard (fail-closed, MF2), not silently skipped here.
637
632
  */
638
- stageWakeIntent(successorQitemId, fromSession, toSession, identityProvenance, nudge) {
633
+ stageWakeIntent(successorQitemId, fromSession, toSession, identityProvenance, nudge, trigger = "agent") {
639
634
  // No wake intended (nudge:false) ⇒ no durable intent to make durable. The
640
635
  // W1-c guard is nudge-aware for the same reason: absence of an intent is a
641
636
  // defect only when a wake WAS intended.
@@ -651,7 +646,9 @@ export class QueueRepository {
651
646
  toSession,
652
647
  identityProvenance,
653
648
  bareBody: renderQueueHandoffNudge(successorQitemId, successor?.summary),
654
- tags: successor?.handedOffFrom ? [`queue:return:${successor.handedOffFrom}`] : undefined,
649
+ tags: successor?.handedOffFrom || trigger === "openrig"
650
+ ? [...(successor?.handedOffFrom ? [`queue:return:${successor.handedOffFrom}`] : []), ...(trigger === "openrig" ? [WAKE_TRIGGER_OPENRIG_TAG] : [])]
651
+ : undefined,
655
652
  });
656
653
  }
657
654
  recordWakeIntent(input) {
@@ -662,11 +659,15 @@ export class QueueRepository {
662
659
  const stampISO = new Date().toISOString();
663
660
  const genUuid = this.resolveOccupantGeneration?.(input.fromSession) ?? undefined;
664
661
  const frozenEnvelope = wrapPaneEnvelope(input.fromSession, input.toSession, input.bareBody, { stampISO, genUuid });
662
+ const admission = this.wakeAdmission(input.auditPointer, input.tags?.includes(WAKE_TRIGGER_OPENRIG_TAG) ? "openrig" : "agent");
663
+ // An urgent wake's frozen body carries the line naming who marked it, so a person reading it held sees it too; the
664
+ // transport won't add it a second time when it's delivered.
665
665
  const record = {
666
666
  outboxId: input.outboxId, senderSession: input.fromSession, destinationSession: input.toSession,
667
- body: frozenEnvelope, tags: input.tags, auditPointer: input.auditPointer, identityProvenance: input.identityProvenance,
667
+ body: admission.urgentBy ? withUrgentLine(frozenEnvelope, admission.urgentBy) : frozenEnvelope, tags: input.tags, auditPointer: input.auditPointer, identityProvenance: input.identityProvenance,
668
+ ...(admission.urgent ? { urgency: "urgent" } : {}),
668
669
  };
669
- const target = this.transport?.retentionTarget?.(input.toSession);
670
+ const target = this.transport?.retentionTarget?.(input.toSession, admission);
670
671
  if (target)
671
672
  this.outbox.retain(record, target);
672
673
  else {
@@ -691,7 +692,7 @@ export class QueueRepository {
691
692
  toSession: input.destinationSession,
692
693
  identityProvenance: input.identityProvenance,
693
694
  bareBody: `Blocker ${input.blockerQitemId} resolved; parked qitem ${input.qitemId} is pending. Resume the recorded continuation and update the row.`,
694
- tags: [AUTO_UNPARK_WAKE_TAG, `${AUTO_UNPARK_BLOCKER_TAG_PREFIX}${input.blockerQitemId}`, `queue:return:${input.blockerQitemId}`],
695
+ tags: [AUTO_UNPARK_WAKE_TAG, WAKE_TRIGGER_OPENRIG_TAG, `${AUTO_UNPARK_BLOCKER_TAG_PREFIX}${input.blockerQitemId}`, `queue:return:${input.blockerQitemId}`],
695
696
  });
696
697
  }
697
698
  deliverWakeIntentAfterCommit(outboxId) {
@@ -739,12 +740,12 @@ export class QueueRepository {
739
740
  * hold is left alone; failed/uncertain history permits another attempt. A recovery
740
741
  * pass tracks its coalesced members only in memory so each is attempted once per pass.
741
742
  */
742
- async deliverWakeIntent(outboxId, attempted) {
743
+ async deliverWakeIntent(outboxId, attempted = new Set()) {
743
744
  if (!this.outbox)
744
745
  return "skipped";
745
746
  if (!this.transport)
746
747
  return "skipped"; // no transport → stays pending for a later drain
747
- if (attempted?.has(outboxId))
748
+ if (attempted.has(outboxId))
748
749
  return "skipped";
749
750
  const alreadyHeld = this.outbox.getById(outboxId);
750
751
  if (alreadyHeld?.deliveryState === "retained" || alreadyHeld?.deliveryState === "retired") {
@@ -754,9 +755,9 @@ export class QueueRepository {
754
755
  }
755
756
  let recovering = false;
756
757
  const claim = (entry) => {
757
- if (attempted?.has(entry.outboxId) || !this.outbox.claimForDelivery(entry.outboxId))
758
+ if (attempted.has(entry.outboxId) || !this.outbox.claimForDelivery(entry.outboxId))
758
759
  return false;
759
- attempted?.add(entry.outboxId);
760
+ attempted.add(entry.outboxId);
760
761
  recovering ||= entry.deliveryState !== "pending";
761
762
  return true;
762
763
  };
@@ -782,6 +783,16 @@ export class QueueRepository {
782
783
  const first = candidate; // Keep each member's pre-claim uncertainty.
783
784
  const intents = [first];
784
785
  const correlation = first.tags?.find(tag => tag.startsWith("queue:return:"));
786
+ // Group by outcome at the seat's current level: each member is admitted with its own source and urgency, and only
787
+ // members with the first one's outcome (typed or held) go together. With no level (off, draft-aware), everything is
788
+ // admitted, so a returned result and its resume still go as one send. At a level, a routine wake never rides in on
789
+ // an urgent one, nor an urgent one under a routine one's hold; any other member waits for its own delivery.
790
+ const outcome = (entry) => {
791
+ const trigger = entry.tags?.includes(WAKE_TRIGGER_OPENRIG_TAG) ? "openrig" : "agent";
792
+ const admission = entry.auditPointer ? this.wakeAdmission(entry.auditPointer, trigger) : { source: trigger, urgent: false };
793
+ return this.transport?.retentionTarget?.(entry.destinationSession, { source: admission.source, urgent: admission.urgent }) ? "held" : "typed";
794
+ };
795
+ const firstOutcome = outcome(first);
785
796
  if (correlation) {
786
797
  const peers = this.db.prepare(`SELECT outbox_id FROM outbox_entries
787
798
  WHERE delivery_state IN ('pending','failed','indeterminate') AND destination_session = ? AND substr(outbox_id, 1, ?) = ?
@@ -789,6 +800,8 @@ export class QueueRepository {
789
800
  ORDER BY outbox_id`).all(first.destinationSession, WAKE_INTENT_PREFIX.length, WAKE_INTENT_PREFIX, correlation);
790
801
  for (const peer of peers) {
791
802
  const entry = this.outbox.getById(peer.outbox_id);
803
+ if (outcome(entry) !== firstOutcome)
804
+ continue;
792
805
  if (actionable(entry) && claim(entry))
793
806
  intents.push(entry);
794
807
  }
@@ -809,9 +822,34 @@ export class QueueRepository {
809
822
  const qitemId = intent.auditPointer ?? outboxId;
810
823
  // Preserve the original envelope/source generation; add context without rewriting its stored bytes.
811
824
  const recoveryNotice = recovering ? "Recovered queue notification: delivery may repeat after an earlier unconfirmed attempt.\n" : "";
812
- const outcome = await this.performWakeSend(qitemId, intent.destinationSession, intent.senderSession, undefined, recoveryNotice + group.map(entry => entry.body).join("\n"), group.map(entry => entry.outboxId));
825
+ // The group was formed on the first member's outcome, so its own source and urgency reach that same outcome at the
826
+ // send; the other members' bodies keep their own frozen urgent lines.
827
+ const trigger = group[0].tags?.includes(WAKE_TRIGGER_OPENRIG_TAG) ? "openrig" : "agent";
828
+ // The level can change while this send waits for the seat's lease. Under the lease, each member is admitted again with
829
+ // its own source and urgency; only those with the first member's outcome go with this send, and the others go back
830
+ // to their state before this claim (never marked delivered, held or failed) for their own delivery.
831
+ const released = [];
832
+ const recheckMembers = group.length < 2 ? undefined : (holds, held) => {
833
+ const keep = group.filter((entry, i) => {
834
+ if (i === 0)
835
+ return true;
836
+ const memberTrigger = entry.tags?.includes(WAKE_TRIGGER_OPENRIG_TAG) ? "openrig" : "agent";
837
+ const admission = this.wakeAdmission(entry.auditPointer, memberTrigger);
838
+ return holds({ source: admission.source, urgent: admission.urgent }) === held;
839
+ });
840
+ for (const entry of group) {
841
+ if (keep.includes(entry))
842
+ continue;
843
+ this.db.prepare("UPDATE outbox_entries SET delivery_state = ? WHERE outbox_id = ? AND delivery_state = 'sending'").run(entry.deliveryState, entry.outboxId);
844
+ released.push(entry);
845
+ }
846
+ return { text: recoveryNotice + keep.map(entry => entry.body).join("\n"), outboxIds: keep.map(entry => entry.outboxId) };
847
+ };
848
+ const outcome = await this.performWakeSend(qitemId, intent.destinationSession, intent.senderSession, undefined, recoveryNotice + group.map(entry => entry.body).join("\n"), group.map(entry => entry.outboxId), trigger, recheckMembers);
813
849
  let reportedState = outcome.classified === "verified" ? "delivered" : outcome.classified;
814
850
  for (const intent of group) {
851
+ if (released.includes(intent))
852
+ continue;
815
853
  // A no-write retry cannot settle whether an earlier attempt landed.
816
854
  const earlierUnknown = intent.deliveryState === "indeterminate" && outcome.classified === "failed";
817
855
  const finalState = earlierUnknown ? "indeterminate" : outcome.classified === "verified" ? "delivered" : outcome.classified;
@@ -825,8 +863,7 @@ export class QueueRepository {
825
863
  ?.slice(AUTO_UNPARK_BLOCKER_TAG_PREFIX.length)
826
864
  : undefined;
827
865
  const wakeEvent = this.db.transaction(() => {
828
- // #1278: a coalesced wake is one send, so every row it woke gets that send's reading.
829
- this.recordNudgeAttempt(qitemId, nudgeResult, outcome.inputBox);
866
+ this.recordNudgeAttempt(qitemId, nudgeResult);
830
867
  this.outbox.finalizeDelivery(intent.outboxId, finalState);
831
868
  if (!blockerRef)
832
869
  return null;
@@ -859,6 +896,14 @@ export class QueueRepository {
859
896
  if (wakeEvent)
860
897
  this.eventBus.notifySubscribers(wakeEvent);
861
898
  }
899
+ // Each released member is delivered on its own now, so this drain finishes only once every member has its outcome.
900
+ // One attempt per member for the whole pass: they inherit this pass's history, less themselves (released before any
901
+ // send, so never attempted), so nothing already sent here is regrouped, and each released member gets one attempt.
902
+ for (const entry of released)
903
+ attempted.delete(entry.outboxId);
904
+ for (const entry of released) {
905
+ await this.deliverWakeIntent(entry.outboxId, attempted).catch((err) => console.error(`Queue wake delivery failed for ${entry.outboxId}:`, err));
906
+ }
862
907
  return reportedState;
863
908
  }
864
909
  /** Deliver after the queue transaction commits, never from inside it. The shared
@@ -941,13 +986,13 @@ export class QueueRepository {
941
986
  * copies were deleted, refused at the seat boundary instead); this
942
987
  * site holds no copy of its own.
943
988
  */
944
- async maybeNudge(qitemId, destinationSession, nudgeOpt, sourceSession, bodyOverride) {
989
+ async maybeNudge(qitemId, destinationSession, nudgeOpt, sourceSession, bodyOverride, trigger = "agent") {
945
990
  if (nudgeOpt === false)
946
991
  return;
947
992
  if (!this.transport)
948
993
  return;
949
- const outcome = await this.performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride);
950
- this.recordNudgeAttempt(qitemId, outcome.nudgeResult, outcome.inputBox);
994
+ const outcome = await this.performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, undefined, undefined, trigger);
995
+ this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
951
996
  }
952
997
  /** The following startup intent drain owns durable pending wakes. Legacy packets
953
998
  * and overdue claimed work (not eligible for that drain) still use the nudge path. */
@@ -955,7 +1000,8 @@ export class QueueRepository {
955
1000
  const outboxId = `${WAKE_INTENT_PREFIX}${qitemId}`;
956
1001
  if (this.outbox?.getById(outboxId) && this.getById(qitemId)?.state === "pending")
957
1002
  return;
958
- await this.maybeNudge(qitemId, destinationSession, undefined, sourceSession);
1003
+ // Boot recovery is OpenRig's own scheduling, whoever created the row.
1004
+ await this.maybeNudge(qitemId, destinationSession, undefined, sourceSession, undefined, "openrig");
959
1005
  }
960
1006
  /**
961
1007
  * W1 (transactional closure): the shared wake-send CORE. Builds the pane
@@ -970,7 +1016,7 @@ export class QueueRepository {
970
1016
  * (the "delivered-ack-pending" nudge literal). It is never promoted to
971
1017
  * delivered nor demoted to failed.
972
1018
  */
973
- async performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, prebuiltText, committedOutboxIds) {
1019
+ async performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, prebuiltText, committedOutboxIds, trigger = "agent", recheckMembers) {
974
1020
  // DEFECT FIX qitem-20260827065907-b9ae334c (S1-class, 3 live specimens): a virtual
975
1021
  // @external destination has NO pane — the queue row ITSELF is the gateway
976
1022
  // subsystem's input (the Slack connector polls human-destined rows and its own
@@ -1000,6 +1046,16 @@ export class QueueRepository {
1000
1046
  if (destClass.class === "unroutable") {
1001
1047
  return { classified: "failed", nudgeResult: destClass.teaching };
1002
1048
  }
1049
+ // A terminal seat runs a shell or a TUI, not an agent. Typed wake text would run there as a
1050
+ // command line (it carries the row's summary), and nothing there can claim the row. So nothing
1051
+ // is typed; the row stays queued and visible. `failed:` keeps it on the wake ladder, whose
1052
+ // retries come back here and type nothing before it escalates.
1053
+ if (isBoundTerminalSeat(this.db, destinationSession)) {
1054
+ return {
1055
+ classified: "failed",
1056
+ nudgeResult: `failed:terminal-seat: '${destinationSession}' is a terminal seat (runtime: terminal), not an agent, so no wake was typed into it and nothing there can claim this row. The row stays queued; route it to an agent seat.`,
1057
+ };
1058
+ }
1003
1059
  const stampISO = new Date().toISOString();
1004
1060
  let text;
1005
1061
  if (prebuiltText !== undefined) {
@@ -1029,7 +1085,11 @@ export class QueueRepository {
1029
1085
  text = held.body;
1030
1086
  }
1031
1087
  try {
1032
- const res = await this.transport.send(destinationSession, text, { verify: true, stampISO, actorSession: sourceSession, committedOutboxIds, deliveryId: committedOutboxIds ? undefined : deliveryId, auditPointer: qitemId, queueWake: true });
1088
+ const admission = this.wakeAdmission(qitemId, trigger);
1089
+ const res = await this.transport.send(destinationSession, text, { verify: true, stampISO, actorSession: sourceSession, committedOutboxIds,
1090
+ deliveryId: committedOutboxIds ? undefined : deliveryId, auditPointer: qitemId, queueWake: true,
1091
+ ...(trigger === "openrig" ? { openrigNotice: true } : {}), ...(admission.urgentBy ? { urgent: { by: admission.urgentBy } } : {}),
1092
+ ...(recheckMembers ? { recheckMembers } : {}) });
1033
1093
  // OPR.0.3.2.21.FR-4(c) — wording rename: the prior literal
1034
1094
  // "sent-unverified" read as a failure even in the common case
1035
1095
  // (delivery confirmed but the synchronous ack window expired,
@@ -1052,6 +1112,30 @@ export class QueueRepository {
1052
1112
  return { classified: "failed", nudgeResult: `failed:${msg}` };
1053
1113
  }
1054
1114
  }
1115
+ /** First committed return of a direct ask, including pre-shared-ID Slack replies. */
1116
+ getHumanAnswer(qitemId, actorSession) {
1117
+ const ask = this.getById(qitemId);
1118
+ if (!this.hasReplyToColumn || !ask || ask.destinationSession !== actorSession
1119
+ || ask.humanIntent === "update" || !this.isPersonAddress(actorSession))
1120
+ return null;
1121
+ const row = this.db.prepare(`SELECT qitem_id FROM queue_items
1122
+ WHERE reply_to = ? AND source_session = ? AND destination_session = ?
1123
+ AND (EXISTS (SELECT 1 FROM json_each(queue_items.tags) WHERE value = 'human-answer')
1124
+ OR (qitem_id LIKE 'qitem-slack-inbound-%' AND COALESCE(summary, '') NOT LIKE '[Recovered after gap] %'))
1125
+ ORDER BY ts_created, rowid LIMIT 1`).get(qitemId, actorSession, ask.sourceSession);
1126
+ return row ? this.getById(row.qitem_id) : null;
1127
+ }
1128
+ /** The lookup and create's insert run synchronously before its first delivery await.
1129
+ * Every new surface uses the same ID; old IDs and their original bodies remain intact. */
1130
+ async createHumanAnswer(input) {
1131
+ const existing = this.getHumanAnswer(input.inboundReplyTo, input.sourceSession);
1132
+ if (existing)
1133
+ return existing;
1134
+ return this.create({ ...input,
1135
+ qitemId: `qitem-human-answer-${createHash("sha256").update(input.inboundReplyTo).digest("hex").slice(0, 20)}`,
1136
+ tags: [...new Set([...(input.tags ?? []), "human-answer"])],
1137
+ });
1138
+ }
1055
1139
  async create(input) {
1056
1140
  // FOUNDER ROOT INVARIANT (2026-08-27, supersedes 51-09 incr 4 / ruling cb19867f Q2):
1057
1141
  // a LOCAL write stores the bare transport identity — no self-host suffix inside one
@@ -1068,7 +1152,7 @@ export class QueueRepository {
1068
1152
  try {
1069
1153
  // A savepoint removes any partial intent when staging fails, while
1070
1154
  // preserving ordinary create's existing acceptance of the task.
1071
- this.db.transaction(() => this.stageWakeIntent(created.qitemId, input.sourceSession, input.destinationSession, input.identityProvenance ?? null, input.nudge))();
1155
+ this.db.transaction(() => this.stageWakeIntent(created.qitemId, input.sourceSession, input.destinationSession, input.identityProvenance ?? null, input.nudge, input.wakeTrigger))();
1072
1156
  wakeStaged = true;
1073
1157
  }
1074
1158
  catch (err) {
@@ -1129,7 +1213,7 @@ export class QueueRepository {
1129
1213
  this.deliverWakeIntentAfterCommit(`${WAKE_INTENT_PREFIX}${id}`);
1130
1214
  }
1131
1215
  else {
1132
- await this.maybeNudge(id, input.destinationSession, input.nudge, input.sourceSession);
1216
+ await this.maybeNudge(id, input.destinationSession, input.nudge, input.sourceSession, undefined, input.wakeTrigger);
1133
1217
  }
1134
1218
  return this.getByIdOrThrow(id);
1135
1219
  }
@@ -1220,11 +1304,13 @@ export class QueueRepository {
1220
1304
  throw new QueueRepositoryError("invalid_human_questions", "humanQuestions require the current queue schema; they were not saved.");
1221
1305
  humanQuestions = parsed.questions;
1222
1306
  }
1307
+ this.assertHumanAlert(input.humanAlert, input.destinationSession, input.humanIntent);
1223
1308
  const id = input.qitemId ?? newQitemId();
1224
1309
  const ts = new Date().toISOString();
1225
1310
  const priority = input.priority ?? "routine";
1226
1311
  const tier = input.tier ?? null;
1227
- const tags = input.tags ? JSON.stringify(input.tags) : null;
1312
+ const taggedAsk = withHumanAlertTag(input.tags, input.humanAlert);
1313
+ const tags = taggedAsk ? JSON.stringify(taggedAsk) : null;
1228
1314
  const chain = input.chainOfRecord ? JSON.stringify(input.chainOfRecord) : null;
1229
1315
  const expiresAt = input.expiresAt ?? null;
1230
1316
  const targetRepo = input.targetRepo ?? null;
@@ -1264,6 +1350,7 @@ export class QueueRepository {
1264
1350
  const notification = this.classifyOwnerNotification({
1265
1351
  action: "create",
1266
1352
  humanIntent: input.humanIntent,
1353
+ humanAlert: input.humanAlert,
1267
1354
  destinationSession: input.destinationSession,
1268
1355
  nextState: "pending",
1269
1356
  });
@@ -1287,6 +1374,25 @@ export class QueueRepository {
1287
1374
  });
1288
1375
  return { qitemId: id, persistedEvent };
1289
1376
  }
1377
+ /** humanAlert marks an ask to a person: a person by address or by the registry (a registered person may be addressed as
1378
+ * their seat), as the classifier reads it, and never an update. */
1379
+ assertHumanAlert(humanAlert, destination, humanIntent) {
1380
+ if (humanAlert != null && typeof humanAlert !== "boolean") {
1381
+ throw new QueueRepositoryError("invalid_human_notification", "humanAlert is true or false.");
1382
+ }
1383
+ if (humanAlert !== true)
1384
+ return;
1385
+ if (!this.isPersonAddress(destination) || humanIntent === "update") {
1386
+ throw new QueueRepositoryError("invalid_human_notification", "humanAlert marks an ask to a person as alert-worthy: it needs a human destination, and an update isn't an ask.");
1387
+ }
1388
+ }
1389
+ /** A person by address or by the registry: a registered person may be addressed as their seat or an alias. */
1390
+ isPersonAddress(destination) {
1391
+ if (isHumanSeatSessionRef(destination))
1392
+ return true;
1393
+ const registry = this.loadHumanRegistryFn();
1394
+ return registry.ok && resolveRegisteredHumanAddress(destination, registry.entities) !== null;
1395
+ }
1290
1396
  validateReplyTo(replyTo, humanIntent) {
1291
1397
  if (humanIntent !== "update") {
1292
1398
  throw new QueueRepositoryError("reply_to_requires_update", "replyTo is accepted only with humanIntent update; a decision keeps its own thread so its reply stays unambiguous.");
@@ -1314,12 +1420,14 @@ export class QueueRepository {
1314
1420
  if (!this.validateRig(input.toSession)) {
1315
1421
  throw destinationValidationError("to_session", input.toSession, this.loadHumanRegistryFn);
1316
1422
  }
1423
+ this.assertHumanAlert(input.humanAlert, input.toSession);
1317
1424
  const newId = newQitemId();
1318
1425
  const ts = new Date().toISOString();
1319
1426
  const body = input.body ?? source.body;
1320
1427
  const priority = input.priority ?? source.priority;
1321
1428
  const tier = input.tier ?? source.tier;
1322
- const tags = input.tags ? JSON.stringify(input.tags) : (source.tags ? JSON.stringify(source.tags) : null);
1429
+ const handedTags = withHumanAlertTag(input.tags ?? source.tags, input.humanAlert);
1430
+ const tags = handedTags ? JSON.stringify(handedTags) : null;
1323
1431
  const chain = JSON.stringify([...(source.chainOfRecord ?? []), source.qitemId]);
1324
1432
  const targetRepo = input.targetRepo === undefined ? source.targetRepo : input.targetRepo;
1325
1433
  // OPR.0.4.4.19 FR-4/FR-5 — the handoff authors a NEW qitem; when that
@@ -1382,6 +1490,7 @@ export class QueueRepository {
1382
1490
  const successorNotification = this.classifyOwnerNotification({
1383
1491
  action: "create",
1384
1492
  destinationSession: input.toSession,
1493
+ humanAlert: input.humanAlert,
1385
1494
  nextState: "pending",
1386
1495
  });
1387
1496
  this.transitionLog.append({
@@ -1463,12 +1572,14 @@ export class QueueRepository {
1463
1572
  if (!this.validateRig(input.toSession)) {
1464
1573
  throw destinationValidationError("to_session", input.toSession, this.loadHumanRegistryFn);
1465
1574
  }
1575
+ this.assertHumanAlert(input.humanAlert, input.toSession);
1466
1576
  const newId = newQitemId();
1467
1577
  const ts = new Date().toISOString();
1468
1578
  const body = input.body ?? source.body;
1469
1579
  const priority = input.priority ?? source.priority;
1470
1580
  const tier = input.tier ?? source.tier;
1471
- const tags = input.tags ? JSON.stringify(input.tags) : (source.tags ? JSON.stringify(source.tags) : null);
1581
+ const handedTags = withHumanAlertTag(input.tags ?? source.tags, input.humanAlert);
1582
+ const tags = handedTags ? JSON.stringify(handedTags) : null;
1472
1583
  const chain = JSON.stringify([...(source.chainOfRecord ?? []), source.qitemId]);
1473
1584
  const targetRepo = input.targetRepo === undefined ? source.targetRepo : input.targetRepo;
1474
1585
  // OPR.0.4.4.19 FR-4/FR-5 — same new-item enforcement as handoff().
@@ -1528,6 +1639,7 @@ export class QueueRepository {
1528
1639
  const successorNotification = this.classifyOwnerNotification({
1529
1640
  action: "create",
1530
1641
  destinationSession: input.toSession,
1642
+ humanAlert: input.humanAlert,
1531
1643
  nextState: "pending",
1532
1644
  });
1533
1645
  this.transitionLog.append({
@@ -2065,6 +2177,8 @@ export class QueueRepository {
2065
2177
  throw new QueueRepositoryError("invalid_human_notification", "An informational delivery cannot become a human approval park; author a separate decision request.");
2066
2178
  }
2067
2179
  const isHumanPark = input.state === "blocked" && isHumanSeatSession(effectiveBlockedOn);
2180
+ // A done close can also store the artifact the work produced, so the finished row carries its link.
2181
+ const isDoneClose = input.state === "done";
2068
2182
  // OPR.0.5.1 slice-51-06 D2 — summary/evidence_ref are persist-able ONLY at a human-seat park
2069
2183
  // (see the FR-6 note below). Silently ignoring them on any other transition is a data-loss trap
2070
2184
  // (the operator believes the metadata was saved). HARD-REJECT before ANY UPDATE/log/event so the
@@ -2074,11 +2188,14 @@ export class QueueRepository {
2074
2188
  const invalidFields = [];
2075
2189
  if (input.summary != null)
2076
2190
  invalidFields.push("summary");
2077
- if (input.evidenceRef != null)
2191
+ if (input.evidenceRef != null && !isDoneClose)
2078
2192
  invalidFields.push("evidenceRef");
2079
2193
  if (invalidFields.length > 0) {
2080
2194
  const flags = invalidFields.map((f) => (f === "summary" ? "--summary" : "--evidence-ref")).join(" / ");
2081
- throw new QueueRepositoryError("summary_evidence_not_persistable", `${invalidFields.join(" + ")} persist only on a human-seat park (state=blocked on a human seat); the '${input.state}' transition cannot store them. Remove ${flags}, or park the item (rig queue block --on <human-seat> --summary … --evidence-ref …).`, { invalidFields });
2195
+ const where = invalidFields.map((f) => f === "summary"
2196
+ ? "summary persists on a human-seat park, or on its own (rig queue update <id> --summary … with no --state)"
2197
+ : "evidenceRef persists on a human-seat park or a done close").join("; ");
2198
+ throw new QueueRepositoryError("summary_evidence_not_persistable", `${where}; the '${input.state}' transition cannot store ${invalidFields.length > 1 ? "them" : "it"}. Remove ${flags}, or use one of those.`, { invalidFields });
2082
2199
  }
2083
2200
  }
2084
2201
  // SWEEP-a (shape f2576102) — closure/blocked-field COHERENCE, beside the reference
@@ -2246,11 +2363,14 @@ export class QueueRepository {
2246
2363
  .run(input.state, ts, validation.closureReason, validation.closureTarget, input.handedOffTo ?? null, nextBlockedOn, nextResolution, input.qitemId);
2247
2364
  // FR-6: park-time summary/evidence_ref are PERSISTED onto the existing
2248
2365
  // item (not merely validated-then-dropped) — visible to the attention
2249
- // query and to Packet 2. Only the park path writes them.
2366
+ // query and to Packet 2. A done close writes evidence_ref the same way.
2250
2367
  if (isHumanPark) {
2251
2368
  this.persistSummary(input.qitemId, input.summary ?? null);
2252
2369
  this.persistEvidenceRef(input.qitemId, input.evidenceRef ?? null);
2253
2370
  }
2371
+ else if (isDoneClose) {
2372
+ this.persistEvidenceRef(input.qitemId, input.evidenceRef ?? null);
2373
+ }
2254
2374
  const transition = this.transitionLog.append({
2255
2375
  qitemId: input.qitemId,
2256
2376
  state: input.state,
@@ -2603,7 +2723,7 @@ export class QueueRepository {
2603
2723
  const item = this.getById(input.qitemId);
2604
2724
  if (item?.state !== "pending" || item.humanIntent === "update"
2605
2725
  || item.destinationSession !== input.actorSession
2606
- || parseSessionName(item.destinationSession).kind !== "external")
2726
+ || !this.isPersonAddress(item.destinationSession))
2607
2727
  return null;
2608
2728
  const text = input.decision.trim();
2609
2729
  const unanswered = this.hasHumanQuestionsColumn && text && text !== "[file reply]"
@@ -2886,6 +3006,7 @@ export class QueueRepository {
2886
3006
  conditions.push("target_repo = ?");
2887
3007
  params.push(opts.targetRepo);
2888
3008
  }
3009
+ pushFollowThroughFilters(opts, conditions, params);
2889
3010
  const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
2890
3011
  const columns = opts?.compact ? this.compactColumns() : "*";
2891
3012
  const useActiveFirst = !!(opts?.rig || opts?.asSession || opts?.activeOnly);
@@ -2992,11 +3113,22 @@ export class QueueRepository {
2992
3113
  // clause: a qitem parked as state=blocked on a HUMAN-seat blocker is a
2993
3114
  // decision the human owes. Blocking on another qitem (today's shipped
2994
3115
  // usage) does NOT match — is_human_seat_session rejects qitem ids.
3116
+ // An ask to a person lands here by its classification (isCurrentHumanAsk), alerted or not, so one to a registered
3117
+ // person addressed as a seat or an alias is on Steering too; a reroute ends that.
3118
+ const quietAsk = this.hasOwnerNotificationColumns ? `
3119
+ OR EXISTS (SELECT 1 FROM queue_transitions ask
3120
+ WHERE ask.qitem_id = queue_items.qitem_id AND ask.state = 'pending'
3121
+ AND ask.owner_notification_kind = 'human-required'
3122
+ AND ask.transition_id = (SELECT MAX(latest.transition_id) FROM queue_transitions latest
3123
+ WHERE latest.qitem_id = queue_items.qitem_id AND latest.owner_notification_level IS NOT NULL
3124
+ AND latest.owner_notification_kind <> 'human-decision-resolved')
3125
+ AND NOT EXISTS (SELECT 1 FROM queue_transitions moved WHERE moved.qitem_id = ask.qitem_id
3126
+ AND moved.transition_id > ask.transition_id AND moved.transition_note LIKE 'fallback-routed:%'))` : "";
2995
3127
  const conditions = [
2996
3128
  `state IN (${statePlaceholders})`,
2997
3129
  `(
2998
3130
  is_human_seat_session(destination_session) = 1
2999
- OR (state = 'blocked' AND is_human_seat_session(blocked_on) = 1)
3131
+ OR (state = 'blocked' AND is_human_seat_session(blocked_on) = 1)${quietAsk}
3000
3132
  )`,
3001
3133
  ];
3002
3134
  if (this.hasHumanIntentColumn)
@@ -3016,6 +3148,7 @@ export class QueueRepository {
3016
3148
  conditions.push("target_repo = ?");
3017
3149
  params.push(opts.targetRepo);
3018
3150
  }
3151
+ pushFollowThroughFilters(opts, conditions, params);
3019
3152
  params.push(limit);
3020
3153
  const sql = `
3021
3154
  SELECT * FROM queue_items
@@ -3264,8 +3397,11 @@ export class QueueRepository {
3264
3397
  : item.state === "blocked"
3265
3398
  ? resolveRegisteredHumanAddress(item.blockedOn, registry.entities)
3266
3399
  : resolveRegisteredHumanAddress(item.destinationSession, registry.entities);
3400
+ // An ask placed on Steering without an alert (RECORD) owes no post: its ledger reports a real receipt (a posting
3401
+ // dial set to RECORD posts it) and never a missing one.
3267
3402
  return humanAddress
3268
- ? { notificationKey: `${item.qitemId}:${transition.transitionId}`, startedAt: transition.ts }
3403
+ ? { notificationKey: `${item.qitemId}:${transition.transitionId}`, startedAt: transition.ts,
3404
+ ...(transition.ownerNotificationLevel === "RECORD" ? { quiet: true } : {}) }
3269
3405
  : "inactive";
3270
3406
  }
3271
3407
  /** OPR.0.5.6.14 — derive the current episode's delivery ledger. Receipt
@@ -3283,21 +3419,46 @@ export class QueueRepository {
3283
3419
  humanNotificationPostedThisEpisode(qitemId, listed) {
3284
3420
  if (!this.hasQueueTransitionsTable)
3285
3421
  return false;
3286
- // Only the ask's own notification binds a recipient: create writes it in state pending, to the destination of
3287
- // that moment. A park notice (its recipient is not retained), a resolution notice, or a later destination change
3288
- // (routeToFallback opens no new episode) cannot establish that the current destination received this ask.
3289
3422
  const owners = listed?.owners ?? this.transitionLog.ownerNotificationsForQitems([qitemId]).get(qitemId) ?? [];
3423
+ const owner = this.currentAskNotification(qitemId, owners);
3424
+ if (!owner)
3425
+ return false;
3426
+ // The ledger's episode exists only when the destination resolves to a registered human (aliases included).
3427
+ const ledger = listed ? listed.ledger : this.deliveryLedger(qitemId, owners);
3428
+ return ledger !== null && ledger.outcome === "posted" && ledger.episode?.notificationKey === `${qitemId}:${owner.transitionId}`;
3429
+ }
3430
+ /** The ask's own notification while it still binds its recipient. Only that notification does: create writes it in
3431
+ * state pending, to the destination of that moment. A park notice (its recipient is not retained), a resolution notice,
3432
+ * or a later destination change (routeToFallback opens no new episode) can't establish who has the ask now. */
3433
+ currentAskNotification(qitemId, owners) {
3290
3434
  const owner = owners[0];
3291
3435
  if (!owner || owner.state !== "pending")
3292
- return false;
3436
+ return null;
3293
3437
  if (owner.ownerNotificationKind !== "human-required" && owner.ownerNotificationKind !== "human-update")
3294
- return false;
3438
+ return null;
3295
3439
  const rerouted = this.db.prepare("SELECT 1 FROM queue_transitions WHERE qitem_id = ? AND transition_id > ? AND transition_note LIKE 'fallback-routed:%' LIMIT 1").get(qitemId, owner.transitionId);
3296
- if (rerouted)
3440
+ return rerouted ? null : owner;
3441
+ }
3442
+ /** True when this row is an ask to a person that's still theirs: its own create-time human-required notification, at
3443
+ * any level, not rerouted since. Every attention reader (listAttention, the list route, the Feed) uses this one
3444
+ * membership, whatever happened to its Slack post. */
3445
+ isCurrentHumanAsk(qitemId, listed) {
3446
+ if (!this.hasQueueTransitionsTable)
3297
3447
  return false;
3298
- // The ledger's episode exists only when the destination resolves to a registered human (aliases included).
3299
- const ledger = listed ? listed.ledger : this.deliveryLedger(qitemId, owners);
3300
- return ledger !== null && ledger.outcome === "posted" && ledger.episode?.notificationKey === `${qitemId}:${owner.transitionId}`;
3448
+ const owners = listed?.owners ?? this.transitionLog.ownerNotificationsForQitems([qitemId]).get(qitemId) ?? [];
3449
+ return this.currentAskNotification(qitemId, owners)?.ownerNotificationKind === "human-required";
3450
+ }
3451
+ /** True when this row's current ask was placed on Steering without a Slack alert (human-required at RECORD) and is still
3452
+ * with that person (not rerouted): it waits on them there by design, like a posted ask, so it isn't stuck and nothing
3453
+ * re-offers it. */
3454
+ humanAskWithoutAlert(qitemId, listed) {
3455
+ if (!this.hasQueueTransitionsTable)
3456
+ return false;
3457
+ const owners = listed?.owners ?? this.transitionLog.ownerNotificationsForQitems([qitemId]).get(qitemId) ?? [];
3458
+ const owner = this.currentAskNotification(qitemId, owners);
3459
+ // Slack never posts a quiet ask; one that was posted anyway is a posted ask, reported by its receipt.
3460
+ return owner?.ownerNotificationKind === "human-required" && owner.ownerNotificationLevel === "RECORD"
3461
+ && !this.humanNotificationPostedThisEpisode(qitemId, listed);
3301
3462
  }
3302
3463
  /** owners: the row's owner notifications as ownerNotificationsForQitems gives them, when the caller read them. */
3303
3464
  deliveryLedger(qitemId, owners) {
@@ -3369,6 +3530,8 @@ export class QueueRepository {
3369
3530
  const failed = currentNotes.find((note) => note.startsWith("slack-owner-notification-transport-failed "));
3370
3531
  if (failed)
3371
3532
  return { outcome: "transport-failed", detail: failed, episode };
3533
+ if (episode?.quiet)
3534
+ return null;
3372
3535
  const startedAt = episode?.startedAt ?? item.tsCreated;
3373
3536
  const gatewayRouted = episode !== null || item.lastNudgeResult?.startsWith("gateway-owned") === true;
3374
3537
  if (gatewayRouted) {
@@ -3383,22 +3546,9 @@ export class QueueRepository {
3383
3546
  /** The grace window before a receiptless gateway-routed row honestly reads
3384
3547
  * never-posted (the connector sweep cadence bounds normal posting latency). */
3385
3548
  static NEVER_POSTED_WINDOW_MS = 120_000;
3386
- /**
3387
- * Record one wake attempt. #1278: `inputBox` is that attempt's input-box reading, when the
3388
- * transport returned one. It is written with the attempt every time, so an attempt without a
3389
- * reading clears an earlier attempt's reading rather than leaving it to read as current.
3390
- */
3391
- recordNudgeAttempt(qitemId, result, inputBox) {
3549
+ /** Record one wake attempt. */
3550
+ recordNudgeAttempt(qitemId, result) {
3392
3551
  const ts = new Date().toISOString();
3393
- if (this.hasNudgeInputBoxColumn) {
3394
- const reading = inputBoxReading(inputBox);
3395
- this.db
3396
- .prepare(`UPDATE queue_items
3397
- SET last_nudge_attempt = ?, last_nudge_result = ?, last_nudge_input_box = ?
3398
- WHERE qitem_id = ?`)
3399
- .run(ts, result, reading ? JSON.stringify({ ...reading, at: ts }) : null, qitemId);
3400
- return;
3401
- }
3402
3552
  this.db
3403
3553
  .prepare(`UPDATE queue_items
3404
3554
  SET last_nudge_attempt = ?, last_nudge_result = ?
@@ -3618,9 +3768,13 @@ export class QueueRepository {
3618
3768
  if (view && ["pending", "in-progress"].includes(view.state)) {
3619
3769
  // #514 — the unclaimed sweep skips a pending ask already posted to its human in the current
3620
3770
  // episode (same predicate as runStuckSweep), so the view must not promise that sweep.
3621
- const awaitingHuman = view.state === "pending" && this.humanNotificationPostedThisEpisode(qitemId, listed);
3771
+ const posted = view.state === "pending" && this.humanNotificationPostedThisEpisode(qitemId, listed);
3772
+ const onSteering = !posted && view.state === "pending" && this.humanAskWithoutAlert(qitemId, listed);
3773
+ const awaitingHuman = posted || onSteering;
3622
3774
  if (awaitingHuman) {
3623
- view.nextBackstop = { owner: view.owner, mechanism: "none (posted to the human; awaiting their decision)", dueAt: null, intervalSeconds: null };
3775
+ view.nextBackstop = { owner: view.owner, mechanism: onSteering
3776
+ ? "none (on Steering for the human, with no Slack alert; awaiting their decision)"
3777
+ : "none (posted to the human; awaiting their decision)", dueAt: null, intervalSeconds: null };
3624
3778
  }
3625
3779
  // Quiet hours: a held ask is owned by its window's release job until it posts.
3626
3780
  const quiet = awaitingHuman ? null : quietCustodyBackstop(view.owner, quietHoldCustody(this.db, qitemId));
@@ -3634,6 +3788,13 @@ export class QueueRepository {
3634
3788
  view.laterBackstop = { ...view.nextBackstop, note: "Conditional safety net; current delivery/recovery ownership is evaluated first." };
3635
3789
  view.nextBackstop = recovery;
3636
3790
  }
3791
+ else if (!awaitingHuman && view.state === "pending" && this.db.prepare("SELECT last_nudge_result FROM queue_items WHERE qitem_id = ?")
3792
+ .get(qitemId)?.last_nudge_result === "retained:typing_guard") {
3793
+ // Held at the seat on purpose: not stuck, and not picked up. Nothing replays it; reading or delivering it is a
3794
+ // deliberate step.
3795
+ view.nextBackstop = { owner: view.owner, mechanism: "held by the seat's typing guard", dueAt: null, intervalSeconds: null, held: true,
3796
+ note: `Nothing was typed into ${view.owner}. Read it with rig seat held-messages ${view.owner}; changing the seat's level doesn't replay it.` };
3797
+ }
3637
3798
  }
3638
3799
  if (view?.state === "blocked") {
3639
3800
  // A row parked on a person carries that person's notification, which quiet hours can hold. Its quiet custody is the
@@ -3684,6 +3845,7 @@ export class QueueRepository {
3684
3845
  lastMeaningfulAt: meaningful?.at,
3685
3846
  activity: activity?.activity,
3686
3847
  needsInput: activity?.needsInput.count,
3848
+ needsInputReason: activity?.needsInput.reason,
3687
3849
  claimedAt: row.claimed_at,
3688
3850
  lastHeartbeat: row.last_heartbeat,
3689
3851
  postClaimMotionCount: 0, // this reader supplies the current meaningful timestamp
@@ -3727,8 +3889,6 @@ export class QueueRepository {
3727
3889
  lastNudgeAttempt: row.last_nudge_attempt,
3728
3890
  lastNudgeResult: presentedNudgeResult(row.last_nudge_result, row.claimed_at),
3729
3891
  lastNudgeWireResult: row.last_nudge_result,
3730
- // #1278: absent before migration 116 and on compact rows (elided there), so null.
3731
- lastNudgeInputBox: parseNudgeInputBox(row.last_nudge_input_box, row.last_nudge_attempt),
3732
3892
  lastHeartbeat: row.last_heartbeat,
3733
3893
  resolution: row.resolution,
3734
3894
  // PL-007: target_repo present only when migration 038 has applied;