@openrig/cli 0.6.14 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (778) hide show
  1. package/README.md +10 -9
  2. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  3. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  4. package/daemon/assets/plugins/openrig-core/README.md +11 -4
  5. package/daemon/assets/plugins/openrig-core/hooks/codex.json +6 -6
  6. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +13 -1
  7. package/daemon/assets/plugins/openrig-core/hooks/scripts/codex-hook-trust.cjs +49 -0
  8. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +26 -5
  9. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -2
  10. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +3 -2
  11. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +24 -0
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +2 -2
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +28 -18
  14. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +10 -4
  15. package/daemon/assets/skills/rigs/SKILL.md +24 -5
  16. package/daemon/context-packs/help/manifest.yaml +1 -1
  17. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  18. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +4 -6
  19. package/daemon/context-packs/reference/getting-started.md +87 -21
  20. package/daemon/context-packs/reference/manifest.yaml +1 -1
  21. package/daemon/context-packs/reference/rig-spec.md +1 -1
  22. package/daemon/context-packs/reference/whats-new.md +123 -68
  23. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +9 -2
  27. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +24 -0
  33. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +2 -2
  38. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +11 -5
  41. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +3 -2
  50. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/openrig-user/SKILL.md +28 -18
  55. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/pods/development-team/SKILL.md +2 -0
  65. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +3 -1
  66. package/daemon/context-packs/skills/pods/development-team/references/refactoring.md +11 -0
  67. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/pods/review-team/SKILL.md +46 -96
  70. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +17 -80
  78. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +5 -3
  79. package/daemon/context-packs/skills/process/verification-before-completion/references/performance-claims.md +12 -0
  80. package/daemon/context-packs/skills/queue-handoff/SKILL.md +10 -4
  81. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  82. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  87. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  88. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  89. package/daemon/dist/adapters/claude-code-adapter.d.ts +6 -2
  90. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  91. package/daemon/dist/adapters/claude-code-adapter.js +33 -6
  92. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  93. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  94. package/daemon/dist/adapters/codex-resume.js +2 -7
  95. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  96. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +68 -2
  97. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  98. package/daemon/dist/adapters/codex-runtime-adapter.js +371 -60
  99. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  100. package/daemon/dist/adapters/compose-services-adapter.d.ts +16 -0
  101. package/daemon/dist/adapters/compose-services-adapter.d.ts.map +1 -1
  102. package/daemon/dist/adapters/compose-services-adapter.js +52 -9
  103. package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
  104. package/daemon/dist/adapters/kernel-authority.d.ts.map +1 -1
  105. package/daemon/dist/adapters/kernel-authority.js +9 -5
  106. package/daemon/dist/adapters/kernel-authority.js.map +1 -1
  107. package/daemon/dist/adapters/pi-runner.d.ts +2 -0
  108. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  109. package/daemon/dist/adapters/pi-runner.js +5 -0
  110. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  111. package/daemon/dist/adapters/runtime-probe-exec.d.ts +11 -0
  112. package/daemon/dist/adapters/runtime-probe-exec.d.ts.map +1 -0
  113. package/daemon/dist/adapters/runtime-probe-exec.js +25 -0
  114. package/daemon/dist/adapters/runtime-probe-exec.js.map +1 -0
  115. package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
  116. package/daemon/dist/adapters/stub-runner.js +2 -0
  117. package/daemon/dist/adapters/stub-runner.js.map +1 -1
  118. package/daemon/dist/adapters/tmux.d.ts +21 -1
  119. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  120. package/daemon/dist/adapters/tmux.js +100 -13
  121. package/daemon/dist/adapters/tmux.js.map +1 -1
  122. package/daemon/dist/build-info.js +3 -3
  123. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  124. package/daemon/dist/db/all-migrations.js +12 -0
  125. package/daemon/dist/db/all-migrations.js.map +1 -1
  126. package/daemon/dist/db/migrations/116_queue_item_wake_input_box.d.ts +3 -0
  127. package/daemon/dist/db/migrations/116_queue_item_wake_input_box.d.ts.map +1 -0
  128. package/daemon/dist/db/migrations/116_queue_item_wake_input_box.js +8 -0
  129. package/daemon/dist/db/migrations/116_queue_item_wake_input_box.js.map +1 -0
  130. package/daemon/dist/db/migrations/118_human_quiet_windows.d.ts +3 -0
  131. package/daemon/dist/db/migrations/118_human_quiet_windows.d.ts.map +1 -0
  132. package/daemon/dist/db/migrations/118_human_quiet_windows.js +30 -0
  133. package/daemon/dist/db/migrations/118_human_quiet_windows.js.map +1 -0
  134. package/daemon/dist/db/migrations/119_seat_identity_pane_pid.d.ts +3 -0
  135. package/daemon/dist/db/migrations/119_seat_identity_pane_pid.d.ts.map +1 -0
  136. package/daemon/dist/db/migrations/119_seat_identity_pane_pid.js +7 -0
  137. package/daemon/dist/db/migrations/119_seat_identity_pane_pid.js.map +1 -0
  138. package/daemon/dist/db/migrations/121_rig_startup_layers.d.ts +13 -0
  139. package/daemon/dist/db/migrations/121_rig_startup_layers.d.ts.map +1 -0
  140. package/daemon/dist/db/migrations/121_rig_startup_layers.js +17 -0
  141. package/daemon/dist/db/migrations/121_rig_startup_layers.js.map +1 -0
  142. package/daemon/dist/db/migrations/122_human_operating_modes.d.ts +3 -0
  143. package/daemon/dist/db/migrations/122_human_operating_modes.d.ts.map +1 -0
  144. package/daemon/dist/db/migrations/122_human_operating_modes.js +55 -0
  145. package/daemon/dist/db/migrations/122_human_operating_modes.js.map +1 -0
  146. package/daemon/dist/db/migrations/123_queue_delegated_decision.d.ts +3 -0
  147. package/daemon/dist/db/migrations/123_queue_delegated_decision.d.ts.map +1 -0
  148. package/daemon/dist/db/migrations/123_queue_delegated_decision.js +10 -0
  149. package/daemon/dist/db/migrations/123_queue_delegated_decision.js.map +1 -0
  150. package/daemon/dist/domain/active-occupant.d.ts +5 -3
  151. package/daemon/dist/domain/active-occupant.d.ts.map +1 -1
  152. package/daemon/dist/domain/active-occupant.js +2 -2
  153. package/daemon/dist/domain/active-occupant.js.map +1 -1
  154. package/daemon/dist/domain/activity-taxonomy.d.ts +16 -1
  155. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -1
  156. package/daemon/dist/domain/activity-taxonomy.js +21 -0
  157. package/daemon/dist/domain/activity-taxonomy.js.map +1 -1
  158. package/daemon/dist/domain/agent-activity-store.d.ts +20 -0
  159. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  160. package/daemon/dist/domain/agent-activity-store.js +41 -5
  161. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  162. package/daemon/dist/domain/agent-images/evidence-guard.js +3 -3
  163. package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -1
  164. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -1
  165. package/daemon/dist/domain/agent-images/resume-token-discovery.js +2 -10
  166. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
  167. package/daemon/dist/domain/ask-service.d.ts +1 -0
  168. package/daemon/dist/domain/ask-service.d.ts.map +1 -1
  169. package/daemon/dist/domain/ask-service.js +7 -1
  170. package/daemon/dist/domain/ask-service.js.map +1 -1
  171. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +2 -0
  172. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  173. package/daemon/dist/domain/bootstrap-orchestrator.js +5 -6
  174. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  175. package/daemon/dist/domain/claim-service.d.ts +1 -1
  176. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  177. package/daemon/dist/domain/claim-service.js +7 -0
  178. package/daemon/dist/domain/claim-service.js.map +1 -1
  179. package/daemon/dist/domain/classification-sources.d.ts.map +1 -1
  180. package/daemon/dist/domain/classification-sources.js +2 -0
  181. package/daemon/dist/domain/classification-sources.js.map +1 -1
  182. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +17 -4
  183. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  184. package/daemon/dist/domain/claude-compaction-enforcer.js +88 -24
  185. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  186. package/daemon/dist/domain/claude-core-plugin-env.d.ts +11 -0
  187. package/daemon/dist/domain/claude-core-plugin-env.d.ts.map +1 -1
  188. package/daemon/dist/domain/claude-core-plugin-env.js +15 -0
  189. package/daemon/dist/domain/claude-core-plugin-env.js.map +1 -1
  190. package/daemon/dist/domain/codex-core-plugin-install.d.ts +41 -0
  191. package/daemon/dist/domain/codex-core-plugin-install.d.ts.map +1 -0
  192. package/daemon/dist/domain/codex-core-plugin-install.js +126 -0
  193. package/daemon/dist/domain/codex-core-plugin-install.js.map +1 -0
  194. package/daemon/dist/domain/codex-thread-id.d.ts +23 -1
  195. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  196. package/daemon/dist/domain/codex-thread-id.js +58 -17
  197. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  198. package/daemon/dist/domain/context-monitor.d.ts +13 -5
  199. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  200. package/daemon/dist/domain/context-monitor.js +47 -13
  201. package/daemon/dist/domain/context-monitor.js.map +1 -1
  202. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  203. package/daemon/dist/domain/context-usage-store.js +3 -0
  204. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  205. package/daemon/dist/domain/current-work.d.ts +18 -0
  206. package/daemon/dist/domain/current-work.d.ts.map +1 -1
  207. package/daemon/dist/domain/current-work.js +17 -3
  208. package/daemon/dist/domain/current-work.js.map +1 -1
  209. package/daemon/dist/domain/draft-aware-delivery.d.ts +7 -7
  210. package/daemon/dist/domain/draft-aware-delivery.d.ts.map +1 -1
  211. package/daemon/dist/domain/draft-aware-delivery.js +61 -82
  212. package/daemon/dist/domain/draft-aware-delivery.js.map +1 -1
  213. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  214. package/daemon/dist/domain/execution-view.js +2 -1
  215. package/daemon/dist/domain/execution-view.js.map +1 -1
  216. package/daemon/dist/domain/existing-rig-restore.d.ts +110 -0
  217. package/daemon/dist/domain/existing-rig-restore.d.ts.map +1 -0
  218. package/daemon/dist/domain/existing-rig-restore.js +254 -0
  219. package/daemon/dist/domain/existing-rig-restore.js.map +1 -0
  220. package/daemon/dist/domain/fresh-occupant-relation.d.ts.map +1 -1
  221. package/daemon/dist/domain/fresh-occupant-relation.js +9 -2
  222. package/daemon/dist/domain/fresh-occupant-relation.js.map +1 -1
  223. package/daemon/dist/domain/gateway/channel-operations.d.ts +3 -4
  224. package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
  225. package/daemon/dist/domain/gateway/channel-operations.js.map +1 -1
  226. package/daemon/dist/domain/gateway/connections-projection.d.ts +0 -5
  227. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
  228. package/daemon/dist/domain/gateway/connections-projection.js +3 -46
  229. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
  230. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +11 -1
  231. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -1
  232. package/daemon/dist/domain/gateway/delivery-rules-engine.js +12 -2
  233. package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -1
  234. package/daemon/dist/domain/gateway/dispatch-buffer.d.ts +4 -0
  235. package/daemon/dist/domain/gateway/dispatch-buffer.d.ts.map +1 -1
  236. package/daemon/dist/domain/gateway/dispatch-buffer.js +18 -0
  237. package/daemon/dist/domain/gateway/dispatch-buffer.js.map +1 -1
  238. package/daemon/dist/domain/gateway/human-mode-account.d.ts +61 -0
  239. package/daemon/dist/domain/gateway/human-mode-account.d.ts.map +1 -0
  240. package/daemon/dist/domain/gateway/human-mode-account.js +112 -0
  241. package/daemon/dist/domain/gateway/human-mode-account.js.map +1 -0
  242. package/daemon/dist/domain/gateway/human-operating-modes.d.ts +171 -0
  243. package/daemon/dist/domain/gateway/human-operating-modes.d.ts.map +1 -0
  244. package/daemon/dist/domain/gateway/human-operating-modes.js +422 -0
  245. package/daemon/dist/domain/gateway/human-operating-modes.js.map +1 -0
  246. package/daemon/dist/domain/gateway/human-quiet-windows.d.ts +121 -0
  247. package/daemon/dist/domain/gateway/human-quiet-windows.d.ts.map +1 -0
  248. package/daemon/dist/domain/gateway/human-quiet-windows.js +217 -0
  249. package/daemon/dist/domain/gateway/human-quiet-windows.js.map +1 -0
  250. package/daemon/dist/domain/gateway/human-registry.d.ts +23 -2
  251. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  252. package/daemon/dist/domain/gateway/human-registry.js +67 -5
  253. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  254. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -1
  255. package/daemon/dist/domain/gateway/operator-delivery-engine.js +9 -0
  256. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -1
  257. package/daemon/dist/domain/gateway/slack/inbound.d.ts +10 -2
  258. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  259. package/daemon/dist/domain/gateway/slack/inbound.js +24 -2
  260. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  261. package/daemon/dist/domain/gateway/slack/message.d.ts +1 -0
  262. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  263. package/daemon/dist/domain/gateway/slack/message.js +5 -1
  264. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  265. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +9 -3
  266. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  267. package/daemon/dist/domain/gateway/slack/outbound-driver.js +40 -6
  268. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  269. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +19 -1
  270. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  271. package/daemon/dist/domain/gateway/slack/slack-delivery.js +128 -41
  272. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  273. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +3 -2
  274. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  275. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +268 -50
  276. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  277. package/daemon/dist/domain/health-passive-ceremony.d.ts +4 -0
  278. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  279. package/daemon/dist/domain/health-passive-ceremony.js +34 -4
  280. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  281. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +3 -1
  282. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  283. package/daemon/dist/domain/hosts/hosts-registry-reader.js +9 -9
  284. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  285. package/daemon/dist/domain/hosts/learned-host-bindings.d.ts +28 -0
  286. package/daemon/dist/domain/hosts/learned-host-bindings.d.ts.map +1 -0
  287. package/daemon/dist/domain/hosts/learned-host-bindings.js +77 -0
  288. package/daemon/dist/domain/hosts/learned-host-bindings.js.map +1 -0
  289. package/daemon/dist/domain/hot-potato-enforcer.d.ts +7 -5
  290. package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -1
  291. package/daemon/dist/domain/hot-potato-enforcer.js +19 -10
  292. package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -1
  293. package/daemon/dist/domain/human-questions.d.ts +8 -1
  294. package/daemon/dist/domain/human-questions.d.ts.map +1 -1
  295. package/daemon/dist/domain/human-questions.js.map +1 -1
  296. package/daemon/dist/domain/kernel-boot-tracker.d.ts +17 -1
  297. package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -1
  298. package/daemon/dist/domain/kernel-boot-tracker.js +44 -3
  299. package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -1
  300. package/daemon/dist/domain/kernel-boot.d.ts +21 -0
  301. package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
  302. package/daemon/dist/domain/kernel-boot.js +57 -2
  303. package/daemon/dist/domain/kernel-boot.js.map +1 -1
  304. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +2 -1
  305. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  306. package/daemon/dist/domain/model-divergence/current-generation-record.js +8 -3
  307. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  308. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  309. package/daemon/dist/domain/native-process-lineage.js +43 -15
  310. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  311. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  312. package/daemon/dist/domain/node-inventory.js +26 -12
  313. package/daemon/dist/domain/node-inventory.js.map +1 -1
  314. package/daemon/dist/domain/node-launcher.d.ts +5 -3
  315. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  316. package/daemon/dist/domain/node-launcher.js +29 -25
  317. package/daemon/dist/domain/node-launcher.js.map +1 -1
  318. package/daemon/dist/domain/outbox-handler.d.ts +3 -5
  319. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -1
  320. package/daemon/dist/domain/outbox-handler.js +9 -19
  321. package/daemon/dist/domain/outbox-handler.js.map +1 -1
  322. package/daemon/dist/domain/park-wake-text.d.ts +11 -0
  323. package/daemon/dist/domain/park-wake-text.d.ts.map +1 -0
  324. package/daemon/dist/domain/park-wake-text.js +26 -0
  325. package/daemon/dist/domain/park-wake-text.js.map +1 -0
  326. package/daemon/dist/domain/plugin-vendor-service.d.ts +4 -0
  327. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  328. package/daemon/dist/domain/plugin-vendor-service.js +29 -6
  329. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  330. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts +1 -0
  331. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
  332. package/daemon/dist/domain/policies/delivery-digest-flush.js +25 -4
  333. package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
  334. package/daemon/dist/domain/policies/mode-scheduled-end.d.ts +37 -0
  335. package/daemon/dist/domain/policies/mode-scheduled-end.d.ts.map +1 -0
  336. package/daemon/dist/domain/policies/mode-scheduled-end.js +161 -0
  337. package/daemon/dist/domain/policies/mode-scheduled-end.js.map +1 -0
  338. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +11 -7
  339. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -1
  340. package/daemon/dist/domain/policies/parked-owner-consumer.js +82 -113
  341. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -1
  342. package/daemon/dist/domain/policies/quiet-release.d.ts +109 -0
  343. package/daemon/dist/domain/policies/quiet-release.d.ts.map +1 -0
  344. package/daemon/dist/domain/policies/quiet-release.js +213 -0
  345. package/daemon/dist/domain/policies/quiet-release.js.map +1 -0
  346. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  347. package/daemon/dist/domain/profile-resolver.js +8 -3
  348. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  349. package/daemon/dist/domain/proof/source-watch.js +2 -2
  350. package/daemon/dist/domain/proof/source-watch.js.map +1 -1
  351. package/daemon/dist/domain/queue-destination-check.d.ts +6 -0
  352. package/daemon/dist/domain/queue-destination-check.d.ts.map +1 -0
  353. package/daemon/dist/domain/queue-destination-check.js +35 -0
  354. package/daemon/dist/domain/queue-destination-check.js.map +1 -0
  355. package/daemon/dist/domain/queue-owner.d.ts.map +1 -1
  356. package/daemon/dist/domain/queue-owner.js +2 -1
  357. package/daemon/dist/domain/queue-owner.js.map +1 -1
  358. package/daemon/dist/domain/queue-recovery.d.ts +1 -1
  359. package/daemon/dist/domain/queue-recovery.d.ts.map +1 -1
  360. package/daemon/dist/domain/queue-recovery.js +3 -2
  361. package/daemon/dist/domain/queue-recovery.js.map +1 -1
  362. package/daemon/dist/domain/queue-repository.d.ts +108 -67
  363. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  364. package/daemon/dist/domain/queue-repository.js +316 -140
  365. package/daemon/dist/domain/queue-repository.js.map +1 -1
  366. package/daemon/dist/domain/queue-stuck-sweep.d.ts +13 -1
  367. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  368. package/daemon/dist/domain/queue-stuck-sweep.js +95 -13
  369. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  370. package/daemon/dist/domain/queue-transition-log.d.ts +5 -0
  371. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  372. package/daemon/dist/domain/queue-transition-log.js +25 -8
  373. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  374. package/daemon/dist/domain/queue-wake-ladder.d.ts +2 -0
  375. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  376. package/daemon/dist/domain/queue-wake-ladder.js +94 -11
  377. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  378. package/daemon/dist/domain/quiet-hold-custody.d.ts +24 -0
  379. package/daemon/dist/domain/quiet-hold-custody.d.ts.map +1 -0
  380. package/daemon/dist/domain/quiet-hold-custody.js +85 -0
  381. package/daemon/dist/domain/quiet-hold-custody.js.map +1 -0
  382. package/daemon/dist/domain/rehydrate-eligibility.d.ts +12 -1
  383. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  384. package/daemon/dist/domain/rehydrate-eligibility.js +47 -9
  385. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  386. package/daemon/dist/domain/restore-orchestrator.d.ts +11 -0
  387. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  388. package/daemon/dist/domain/restore-orchestrator.js +144 -15
  389. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  390. package/daemon/dist/domain/restore-plan-preview.d.ts +3 -1
  391. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  392. package/daemon/dist/domain/restore-plan-preview.js +30 -13
  393. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  394. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  395. package/daemon/dist/domain/review/gather.js +8 -5
  396. package/daemon/dist/domain/review/gather.js.map +1 -1
  397. package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -1
  398. package/daemon/dist/domain/rig-mode/operating-posture.js +3 -1
  399. package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -1
  400. package/daemon/dist/domain/rig-repository.d.ts +11 -1
  401. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  402. package/daemon/dist/domain/rig-repository.js +27 -3
  403. package/daemon/dist/domain/rig-repository.js.map +1 -1
  404. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  405. package/daemon/dist/domain/rig-teardown.js +31 -4
  406. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  407. package/daemon/dist/domain/rigspec-instantiator.d.ts +9 -0
  408. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  409. package/daemon/dist/domain/rigspec-instantiator.js +59 -28
  410. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  411. package/daemon/dist/domain/rigspec-schema.d.ts +5 -0
  412. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  413. package/daemon/dist/domain/rigspec-schema.js +30 -0
  414. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  415. package/daemon/dist/domain/runtime-adapter.d.ts +27 -2
  416. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  417. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  418. package/daemon/dist/domain/seat-activity-service.d.ts +18 -3
  419. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  420. package/daemon/dist/domain/seat-activity-service.js +124 -57
  421. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  422. package/daemon/dist/domain/seat-attention-reconciler.d.ts +8 -1
  423. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  424. package/daemon/dist/domain/seat-attention-reconciler.js +3 -1
  425. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  426. package/daemon/dist/domain/seat-delivery-guard.d.ts.map +1 -1
  427. package/daemon/dist/domain/seat-delivery-guard.js +21 -5
  428. package/daemon/dist/domain/seat-delivery-guard.js.map +1 -1
  429. package/daemon/dist/domain/seat-handover-service.d.ts +2 -2
  430. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  431. package/daemon/dist/domain/seat-handover-service.js +28 -2
  432. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  433. package/daemon/dist/domain/seat-identity-reconciler.js +1 -1
  434. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  435. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
  436. package/daemon/dist/domain/seat-identity-store.js +5 -2
  437. package/daemon/dist/domain/seat-identity-store.js.map +1 -1
  438. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -1
  439. package/daemon/dist/domain/seat-launch-environment.js +17 -1
  440. package/daemon/dist/domain/seat-launch-environment.js.map +1 -1
  441. package/daemon/dist/domain/seat-lifecycle-service.d.ts +4 -0
  442. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  443. package/daemon/dist/domain/seat-restart-in-place.d.ts +33 -14
  444. package/daemon/dist/domain/seat-restart-in-place.d.ts.map +1 -1
  445. package/daemon/dist/domain/seat-restart-in-place.js +102 -30
  446. package/daemon/dist/domain/seat-restart-in-place.js.map +1 -1
  447. package/daemon/dist/domain/self-attach-service.d.ts +3 -2
  448. package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
  449. package/daemon/dist/domain/self-attach-service.js +18 -1
  450. package/daemon/dist/domain/self-attach-service.js.map +1 -1
  451. package/daemon/dist/domain/services-readiness.d.ts.map +1 -1
  452. package/daemon/dist/domain/services-readiness.js +14 -3
  453. package/daemon/dist/domain/services-readiness.js.map +1 -1
  454. package/daemon/dist/domain/session-registry.d.ts +45 -0
  455. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  456. package/daemon/dist/domain/session-registry.js +124 -0
  457. package/daemon/dist/domain/session-registry.js.map +1 -1
  458. package/daemon/dist/domain/session-transport.d.ts +24 -6
  459. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  460. package/daemon/dist/domain/session-transport.js +58 -41
  461. package/daemon/dist/domain/session-transport.js.map +1 -1
  462. package/daemon/dist/domain/skill-discovery.d.ts +7 -1
  463. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
  464. package/daemon/dist/domain/skill-discovery.js +41 -7
  465. package/daemon/dist/domain/skill-discovery.js.map +1 -1
  466. package/daemon/dist/domain/snapshot-repository.d.ts +1 -0
  467. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  468. package/daemon/dist/domain/snapshot-repository.js +23 -10
  469. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  470. package/daemon/dist/domain/startup-orchestrator.d.ts +21 -3
  471. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  472. package/daemon/dist/domain/startup-orchestrator.js +66 -16
  473. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  474. package/daemon/dist/domain/startup-submission-evidence.d.ts +4 -11
  475. package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -1
  476. package/daemon/dist/domain/startup-submission-evidence.js +11 -17
  477. package/daemon/dist/domain/startup-submission-evidence.js.map +1 -1
  478. package/daemon/dist/domain/successor-session-launcher.d.ts +2 -1
  479. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  480. package/daemon/dist/domain/successor-session-launcher.js +3 -1
  481. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  482. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +1 -1
  483. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  484. package/daemon/dist/domain/terminal/herdr-adapter.js +22 -4
  485. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  486. package/daemon/dist/domain/types.d.ts +15 -4
  487. package/daemon/dist/domain/types.d.ts.map +1 -1
  488. package/daemon/dist/domain/types.js.map +1 -1
  489. package/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -1
  490. package/daemon/dist/domain/user-settings/settings-browser.js +2 -0
  491. package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -1
  492. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  493. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  494. package/daemon/dist/domain/user-settings/settings-store.js +33 -7
  495. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  496. package/daemon/dist/domain/watchdog-delivery.d.ts +3 -23
  497. package/daemon/dist/domain/watchdog-delivery.d.ts.map +1 -1
  498. package/daemon/dist/domain/watchdog-delivery.js +12 -89
  499. package/daemon/dist/domain/watchdog-delivery.js.map +1 -1
  500. package/daemon/dist/domain/watchdog-history-log.d.ts +5 -2
  501. package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -1
  502. package/daemon/dist/domain/watchdog-history-log.js.map +1 -1
  503. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -2
  504. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  505. package/daemon/dist/domain/watchdog-jobs-repository.js +4 -0
  506. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  507. package/daemon/dist/domain/watchdog-policy-engine.d.ts +16 -24
  508. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  509. package/daemon/dist/domain/watchdog-policy-engine.js +44 -43
  510. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  511. package/daemon/dist/domain/whoami-service.d.ts +2 -0
  512. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  513. package/daemon/dist/domain/whoami-service.js +23 -6
  514. package/daemon/dist/domain/whoami-service.js.map +1 -1
  515. package/daemon/dist/domain/workflow-boot-sweep.d.ts +2 -1
  516. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  517. package/daemon/dist/domain/workflow-boot-sweep.js +11 -5
  518. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  519. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  520. package/daemon/dist/domain/workflow-exception-escalation.js +2 -1
  521. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  522. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  523. package/daemon/dist/domain/workflow-projector.js +5 -2
  524. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  525. package/daemon/dist/domain/workflow-role-context.js +2 -2
  526. package/daemon/dist/domain/workflow-role-context.js.map +1 -1
  527. package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
  528. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  529. package/daemon/dist/domain/workflow-runtime.js +2 -0
  530. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  531. package/daemon/dist/routes/activity.d.ts +13 -1
  532. package/daemon/dist/routes/activity.d.ts.map +1 -1
  533. package/daemon/dist/routes/activity.js +67 -2
  534. package/daemon/dist/routes/activity.js.map +1 -1
  535. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  536. package/daemon/dist/routes/agent-images.js +2 -0
  537. package/daemon/dist/routes/agent-images.js.map +1 -1
  538. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  539. package/daemon/dist/routes/compaction.js +7 -2
  540. package/daemon/dist/routes/compaction.js.map +1 -1
  541. package/daemon/dist/routes/discovery.js +3 -0
  542. package/daemon/dist/routes/discovery.js.map +1 -1
  543. package/daemon/dist/routes/down.js +9 -1
  544. package/daemon/dist/routes/down.js.map +1 -1
  545. package/daemon/dist/routes/gateway.d.ts +2 -0
  546. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  547. package/daemon/dist/routes/gateway.js +181 -1
  548. package/daemon/dist/routes/gateway.js.map +1 -1
  549. package/daemon/dist/routes/kernel-status.js +6 -1
  550. package/daemon/dist/routes/kernel-status.js.map +1 -1
  551. package/daemon/dist/routes/provider.d.ts.map +1 -1
  552. package/daemon/dist/routes/provider.js +0 -73
  553. package/daemon/dist/routes/provider.js.map +1 -1
  554. package/daemon/dist/routes/queue.d.ts.map +1 -1
  555. package/daemon/dist/routes/queue.js +73 -13
  556. package/daemon/dist/routes/queue.js.map +1 -1
  557. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  558. package/daemon/dist/routes/rigs.js +29 -10
  559. package/daemon/dist/routes/rigs.js.map +1 -1
  560. package/daemon/dist/routes/rigspec.js +2 -3
  561. package/daemon/dist/routes/rigspec.js.map +1 -1
  562. package/daemon/dist/routes/seat.js +2 -2
  563. package/daemon/dist/routes/seat.js.map +1 -1
  564. package/daemon/dist/routes/skills.js +2 -2
  565. package/daemon/dist/routes/skills.js.map +1 -1
  566. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  567. package/daemon/dist/routes/transcripts.js +7 -3
  568. package/daemon/dist/routes/transcripts.js.map +1 -1
  569. package/daemon/dist/routes/transport.js +1 -1
  570. package/daemon/dist/routes/transport.js.map +1 -1
  571. package/daemon/dist/routes/up.js +36 -52
  572. package/daemon/dist/routes/up.js.map +1 -1
  573. package/daemon/dist/startup.d.ts.map +1 -1
  574. package/daemon/dist/startup.js +102 -60
  575. package/daemon/dist/startup.js.map +1 -1
  576. package/daemon/docs/reference/agent-state-taxonomy.md +17 -2
  577. package/daemon/docs/reference/getting-started.md +87 -21
  578. package/daemon/docs/reference/quickstart.md +33 -20
  579. package/daemon/docs/reference/refocus-channel.md +9 -3
  580. package/daemon/docs/reference/rig-spec.md +1 -1
  581. package/daemon/docs/reference/seat-delivery.md +57 -18
  582. package/daemon/docs/reference/slack-app-setup.md +49 -2
  583. package/daemon/docs/reference/whats-new.md +123 -68
  584. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +24 -0
  585. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +2 -2
  586. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +11 -5
  587. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +2 -0
  588. package/daemon/specs/agents/shared/skills/pods/development-team/references/refactoring.md +11 -0
  589. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +46 -96
  590. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +17 -80
  591. package/daemon/specs/agents/shared/skills/process/verification-before-completion/references/performance-claims.md +12 -0
  592. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +93 -14
  593. package/dist/build-info.js +3 -3
  594. package/dist/cli-error.d.ts +4 -0
  595. package/dist/cli-error.d.ts.map +1 -1
  596. package/dist/cli-error.js +6 -0
  597. package/dist/cli-error.js.map +1 -1
  598. package/dist/commands/agent-image.d.ts.map +1 -1
  599. package/dist/commands/agent-image.js +15 -7
  600. package/dist/commands/agent-image.js.map +1 -1
  601. package/dist/commands/archive.d.ts.map +1 -1
  602. package/dist/commands/archive.js +17 -3
  603. package/dist/commands/archive.js.map +1 -1
  604. package/dist/commands/attach.d.ts.map +1 -1
  605. package/dist/commands/attach.js +6 -4
  606. package/dist/commands/attach.js.map +1 -1
  607. package/dist/commands/broadcast.js +2 -0
  608. package/dist/commands/broadcast.js.map +1 -1
  609. package/dist/commands/community-harness.d.ts.map +1 -1
  610. package/dist/commands/community-harness.js +2 -1
  611. package/dist/commands/community-harness.js.map +1 -1
  612. package/dist/commands/compact-plan.d.ts.map +1 -1
  613. package/dist/commands/compact-plan.js +2 -1
  614. package/dist/commands/compact-plan.js.map +1 -1
  615. package/dist/commands/compact.d.ts.map +1 -1
  616. package/dist/commands/compact.js +10 -3
  617. package/dist/commands/compact.js.map +1 -1
  618. package/dist/commands/config.d.ts.map +1 -1
  619. package/dist/commands/config.js +10 -2
  620. package/dist/commands/config.js.map +1 -1
  621. package/dist/commands/context.d.ts.map +1 -1
  622. package/dist/commands/context.js +16 -9
  623. package/dist/commands/context.js.map +1 -1
  624. package/dist/commands/expand.d.ts.map +1 -1
  625. package/dist/commands/expand.js +16 -2
  626. package/dist/commands/expand.js.map +1 -1
  627. package/dist/commands/export.d.ts.map +1 -1
  628. package/dist/commands/export.js +9 -2
  629. package/dist/commands/export.js.map +1 -1
  630. package/dist/commands/fork.d.ts.map +1 -1
  631. package/dist/commands/fork.js +3 -1
  632. package/dist/commands/fork.js.map +1 -1
  633. package/dist/commands/gateway.d.ts +39 -0
  634. package/dist/commands/gateway.d.ts.map +1 -1
  635. package/dist/commands/gateway.js +310 -3
  636. package/dist/commands/gateway.js.map +1 -1
  637. package/dist/commands/health.js +3 -2
  638. package/dist/commands/health.js.map +1 -1
  639. package/dist/commands/host.d.ts +1 -1
  640. package/dist/commands/host.d.ts.map +1 -1
  641. package/dist/commands/host.js +2 -2
  642. package/dist/commands/host.js.map +1 -1
  643. package/dist/commands/launch.d.ts.map +1 -1
  644. package/dist/commands/launch.js +9 -2
  645. package/dist/commands/launch.js.map +1 -1
  646. package/dist/commands/plugin.d.ts.map +1 -1
  647. package/dist/commands/plugin.js +2 -1
  648. package/dist/commands/plugin.js.map +1 -1
  649. package/dist/commands/provider.d.ts.map +1 -1
  650. package/dist/commands/provider.js +0 -73
  651. package/dist/commands/provider.js.map +1 -1
  652. package/dist/commands/ps.d.ts +4 -0
  653. package/dist/commands/ps.d.ts.map +1 -1
  654. package/dist/commands/ps.js +95 -5
  655. package/dist/commands/ps.js.map +1 -1
  656. package/dist/commands/queue.d.ts +4 -0
  657. package/dist/commands/queue.d.ts.map +1 -1
  658. package/dist/commands/queue.js +78 -3
  659. package/dist/commands/queue.js.map +1 -1
  660. package/dist/commands/release.d.ts.map +1 -1
  661. package/dist/commands/release.js +16 -2
  662. package/dist/commands/release.js.map +1 -1
  663. package/dist/commands/restore-check.d.ts.map +1 -1
  664. package/dist/commands/restore-check.js +2 -1
  665. package/dist/commands/restore-check.js.map +1 -1
  666. package/dist/commands/restore-packet.d.ts.map +1 -1
  667. package/dist/commands/restore-packet.js +2 -1
  668. package/dist/commands/restore-packet.js.map +1 -1
  669. package/dist/commands/restore.d.ts.map +1 -1
  670. package/dist/commands/restore.js +23 -6
  671. package/dist/commands/restore.js.map +1 -1
  672. package/dist/commands/scope.d.ts.map +1 -1
  673. package/dist/commands/scope.js +5 -2
  674. package/dist/commands/scope.js.map +1 -1
  675. package/dist/commands/seat.js +0 -4
  676. package/dist/commands/seat.js.map +1 -1
  677. package/dist/commands/send.d.ts.map +1 -1
  678. package/dist/commands/send.js +27 -3
  679. package/dist/commands/send.js.map +1 -1
  680. package/dist/commands/setup.d.ts +3 -0
  681. package/dist/commands/setup.d.ts.map +1 -1
  682. package/dist/commands/setup.js +29 -9
  683. package/dist/commands/setup.js.map +1 -1
  684. package/dist/commands/shrink.d.ts.map +1 -1
  685. package/dist/commands/shrink.js +16 -2
  686. package/dist/commands/shrink.js.map +1 -1
  687. package/dist/commands/slack.d.ts.map +1 -1
  688. package/dist/commands/slack.js +11 -24
  689. package/dist/commands/slack.js.map +1 -1
  690. package/dist/commands/snapshot.d.ts.map +1 -1
  691. package/dist/commands/snapshot.js +36 -10
  692. package/dist/commands/snapshot.js.map +1 -1
  693. package/dist/commands/specs.d.ts.map +1 -1
  694. package/dist/commands/specs.js +11 -5
  695. package/dist/commands/specs.js.map +1 -1
  696. package/dist/commands/start.d.ts.map +1 -1
  697. package/dist/commands/start.js +36 -10
  698. package/dist/commands/start.js.map +1 -1
  699. package/dist/commands/status.d.ts.map +1 -1
  700. package/dist/commands/status.js +4 -1
  701. package/dist/commands/status.js.map +1 -1
  702. package/dist/commands/transcript.d.ts.map +1 -1
  703. package/dist/commands/transcript.js +12 -7
  704. package/dist/commands/transcript.js.map +1 -1
  705. package/dist/commands/unarchive.d.ts.map +1 -1
  706. package/dist/commands/unarchive.js +16 -2
  707. package/dist/commands/unarchive.js.map +1 -1
  708. package/dist/commands/up.d.ts.map +1 -1
  709. package/dist/commands/up.js +33 -7
  710. package/dist/commands/up.js.map +1 -1
  711. package/dist/commands/walk.d.ts.map +1 -1
  712. package/dist/commands/walk.js +2 -1
  713. package/dist/commands/walk.js.map +1 -1
  714. package/dist/commands/whoami.d.ts.map +1 -1
  715. package/dist/commands/whoami.js +3 -0
  716. package/dist/commands/whoami.js.map +1 -1
  717. package/dist/config-store.d.ts +4 -2
  718. package/dist/config-store.d.ts.map +1 -1
  719. package/dist/config-store.js +34 -7
  720. package/dist/config-store.js.map +1 -1
  721. package/dist/daemon-lifecycle.d.ts +9 -4
  722. package/dist/daemon-lifecycle.d.ts.map +1 -1
  723. package/dist/daemon-lifecycle.js +27 -9
  724. package/dist/daemon-lifecycle.js.map +1 -1
  725. package/dist/daemon-reachability.d.ts +13 -0
  726. package/dist/daemon-reachability.d.ts.map +1 -1
  727. package/dist/daemon-reachability.js +28 -0
  728. package/dist/daemon-reachability.js.map +1 -1
  729. package/dist/fetch-with-timeout.d.ts.map +1 -1
  730. package/dist/fetch-with-timeout.js +19 -16
  731. package/dist/fetch-with-timeout.js.map +1 -1
  732. package/dist/host-bindings.d.ts +6 -0
  733. package/dist/host-bindings.d.ts.map +1 -1
  734. package/dist/host-bindings.js +7 -4
  735. package/dist/host-bindings.js.map +1 -1
  736. package/dist/lib/bundle-check.d.ts.map +1 -1
  737. package/dist/lib/bundle-check.js +13 -5
  738. package/dist/lib/bundle-check.js.map +1 -1
  739. package/dist/mcp-server.d.ts.map +1 -1
  740. package/dist/mcp-server.js +57 -14
  741. package/dist/mcp-server.js.map +1 -1
  742. package/dist/rig-handle.d.ts +18 -1
  743. package/dist/rig-handle.d.ts.map +1 -1
  744. package/dist/rig-handle.js +19 -2
  745. package/dist/rig-handle.js.map +1 -1
  746. package/package.json +1 -1
  747. package/tui/dist/config/config-model.js +1 -1
  748. package/tui/dist/config/config-model.js.map +1 -1
  749. package/tui/dist/connections/connections-model.d.ts +0 -5
  750. package/tui/dist/connections/connections-model.d.ts.map +1 -1
  751. package/tui/dist/connections/connections-model.js +1 -1
  752. package/tui/dist/connections/connections-model.js.map +1 -1
  753. package/tui/dist/daemon-client.d.ts +2 -0
  754. package/tui/dist/daemon-client.d.ts.map +1 -1
  755. package/tui/dist/daemon-client.js +23 -0
  756. package/tui/dist/daemon-client.js.map +1 -1
  757. package/tui/dist/hydrate.d.ts.map +1 -1
  758. package/tui/dist/hydrate.js +13 -1
  759. package/tui/dist/hydrate.js.map +1 -1
  760. package/tui/dist/live.d.ts +10 -1
  761. package/tui/dist/live.d.ts.map +1 -1
  762. package/tui/dist/live.js +56 -7
  763. package/tui/dist/live.js.map +1 -1
  764. package/tui/dist/main.js +35 -2
  765. package/tui/dist/main.js.map +1 -1
  766. package/tui/dist/render.d.ts.map +1 -1
  767. package/tui/dist/render.js +111 -7
  768. package/tui/dist/render.js.map +1 -1
  769. package/tui/dist/types.d.ts +53 -0
  770. package/tui/dist/types.d.ts.map +1 -1
  771. package/tui/dist/version-skew.d.ts +24 -0
  772. package/tui/dist/version-skew.d.ts.map +1 -0
  773. package/tui/dist/version-skew.js +37 -0
  774. package/tui/dist/version-skew.js.map +1 -0
  775. package/daemon/dist/domain/provider/subscription-moves.d.ts +0 -77
  776. package/daemon/dist/domain/provider/subscription-moves.d.ts.map +0 -1
  777. package/daemon/dist/domain/provider/subscription-moves.js +0 -140
  778. package/daemon/dist/domain/provider/subscription-moves.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-mode-account.js","sourceRoot":"","sources":["../../../src/domain/gateway/human-mode-account.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAA6B,MAAM,8BAA8B,CAAC;AAEjK,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAyBzD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,kEAAkE;IAClE,wIAAwI;CACzI,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAQjC;IACC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC5E,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC9B,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;gBAC1I,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,SAAU,EAAE;YACzG,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClD,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;YAC1F,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC;iBAChE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC3I,OAAO,EAAE,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;YACrC,UAAU,EAAE,WAAW;SACxB,EAAE,CAAC;AACN,CAAC;AAED;+HAC+H;AAC/H,KAAK,UAAU,UAAU,CAAC,KAAwC,EAAE,GAAoB;IACtF,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9B,yHAAyH;IACzH,yBAAyB;IACzB,MAAM,IAAI,GAAG,CAAC,OAAkC,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,OAAO,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;eAClE,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACnG,CAAC,CAAC;IACF,MAAM,IAAI,GAAI,EAAE,CAAC,OAAO,CAAC,wHAAwH,CAAC;SAC/I,GAAG,EAA0F;SAC7F,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAI,EAAE,CAAC,OAAO,CAAC,sIAAsI,CAAC;SACnK,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1F,kHAAkH;IAClH,sHAAsH;IACtH,2DAA2D;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,uDAAuD,oBAAoB,GAAG,CAAC,CAAC,GAAG,EAAkC,EAAE,CAAC;QACjJ,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,QAAQ,IAAI,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,EAAqD,EAAE,CAAC;QAC5I,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,2GAA2G;YAC3G,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACpG,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,wHAAwH;YACxH,wHAAwH;YACxH,8CAA8C;YAC9C,IAAI,MAAM;gBAAE,SAAS;YACrB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,IAAI,mBAAmB,EAAE,CAAC,CAAC;YACpH,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5F,IAAI,MAAM,EAAE,CAAC;YACX,qFAAqF;YACrF,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAChH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACrI,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9E,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC;aACzG,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;;YACpG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,171 @@
1
+ import type Database from "better-sqlite3";
2
+ import { HumanQuietStore } from "./human-quiet-windows.js";
3
+ export type Availability = "available" | "focus" | "away" | "off";
4
+ /** A quiet rule in the quiet-hours store's own shapes: a daily local rule, or until the application's end. */
5
+ export type QuietRule = {
6
+ kind: "daily";
7
+ start: string;
8
+ end: string;
9
+ timezone: string;
10
+ } | {
11
+ kind: "until-end";
12
+ timezone: string;
13
+ };
14
+ export interface SavedMode {
15
+ entityId: string;
16
+ name: string;
17
+ availability: {
18
+ value: Availability | null;
19
+ expectedBack: string | null;
20
+ };
21
+ /** Null: no decision room. Never inferred from the mode's name. */
22
+ decisionRoom: {
23
+ words: string;
24
+ exclusions: string[];
25
+ } | null;
26
+ delivery: {
27
+ quiet: QuietRule | null;
28
+ account: string | null;
29
+ };
30
+ setBy: string;
31
+ setAt: string;
32
+ }
33
+ export type EffectConsumer = "availability" | "quiet" | "decision-room";
34
+ /** `handed-off`: a later mode applied while this effect's restore was still owed took over restoring its prior value. */
35
+ export type EffectState = "active" | "pending" | "failed" | "ended" | "kept" | "handed-off";
36
+ export interface ModeEffect {
37
+ consumer: EffectConsumer;
38
+ prior: unknown;
39
+ changeIdentity: unknown;
40
+ state: EffectState;
41
+ detail: string | null;
42
+ updatedAt: string;
43
+ }
44
+ export interface ModeApplication {
45
+ applicationId: string;
46
+ entityId: string;
47
+ modeName: string;
48
+ settings: SavedMode;
49
+ startedBy: string;
50
+ startedAt: string;
51
+ scheduledEnd: string | null;
52
+ endedAt: string | null;
53
+ endedBy: string | null;
54
+ endReason: EndReason | null;
55
+ effects: ModeEffect[];
56
+ }
57
+ export type EndReason = "back" | "scheduled" | "switched";
58
+ export declare class ModeError extends Error {
59
+ readonly code: "invalid_mode" | "mode_not_found" | "end_required";
60
+ constructor(code: "invalid_mode" | "mode_not_found" | "end_required", message: string);
61
+ }
62
+ /** The two writers a mode changes outside its own tables; tests inject failing ones. */
63
+ export interface AvailabilityAccess {
64
+ /** The authored value, and the id of the latest change recorded through the registry's writers (null: none yet). */
65
+ read(entityId: string): {
66
+ ok: true;
67
+ availability: string | undefined;
68
+ changeId?: string | null;
69
+ away?: boolean;
70
+ } | {
71
+ ok: false;
72
+ error: string;
73
+ };
74
+ /** changeId: the change record this write left (also on an error after the fragment and record were written). */
75
+ write(entityId: string, value: Availability | "unset"): {
76
+ ok: true;
77
+ changeId?: string;
78
+ } | {
79
+ ok: false;
80
+ error: string;
81
+ changeId?: string;
82
+ };
83
+ /** Set the legacy `away` flag. Ending a mode only clears one set while the mode's away was on; one the person had
84
+ * before the mode is left as it is. */
85
+ setLegacyAway?(entityId: string, on: boolean): {
86
+ ok: true;
87
+ } | {
88
+ ok: false;
89
+ error: string;
90
+ };
91
+ }
92
+ export declare function registryAvailability(home: string): AvailabilityAccess;
93
+ /** Mode names are compared in one spelling: lower case, words joined by hyphens ("Away from desk" is away-from-desk). */
94
+ export declare function modeName(raw: string): string;
95
+ export declare const AT_DESK = "at-desk";
96
+ export declare class HumanModeService {
97
+ private readonly deps;
98
+ private readonly quiet;
99
+ /** `availability` is needed only to apply or end a mode; reading saved modes and applications works without it. */
100
+ /** `armScheduledEnd` arms the timer that ends an application at its scheduled end; it runs with the application's insert,
101
+ * so one never commits without the other. */
102
+ constructor(deps: {
103
+ db: Database.Database;
104
+ availability?: AvailabilityAccess;
105
+ quiet?: HumanQuietStore;
106
+ now?: () => Date;
107
+ armScheduledEnd?: (application: {
108
+ applicationId: string;
109
+ entityId: string;
110
+ scheduledEnd: string;
111
+ }) => void;
112
+ });
113
+ private get availability();
114
+ private now;
115
+ save(entityId: string, input: {
116
+ name: string;
117
+ availability?: {
118
+ value?: string | null;
119
+ expectedBack?: string | null;
120
+ };
121
+ decisionRoom?: {
122
+ words?: string | null;
123
+ exclusions?: string[];
124
+ } | null;
125
+ delivery?: {
126
+ quiet?: QuietRule | null;
127
+ account?: string | null;
128
+ };
129
+ }, actor: string): SavedMode;
130
+ saved(entityId: string, name: string): SavedMode | null;
131
+ list(entityId: string): SavedMode[];
132
+ /** The person's active application, or null: at desk. */
133
+ current(entityId: string): ModeApplication | null;
134
+ get(applicationId: string): ModeApplication | null;
135
+ /** Apply a saved mode. At desk ends the current application and applies nothing. Another active mode is ended first
136
+ * (a switch), so a person has at most one. */
137
+ apply(entityId: string, name: string, input: {
138
+ scheduledEnd?: Date | null;
139
+ }, actor: string): {
140
+ application: ModeApplication | null;
141
+ ended: ModeApplication | null;
142
+ };
143
+ /** End the person's active application: each effect ends only if the latest change is still its own. Returns the
144
+ * ended application, or null when none was active. Every time, restorations still pending or failed from earlier
145
+ * applications are tried again (see unresolved), so a later mode never hides an older one's. */
146
+ end(entityId: string, reason: EndReason, actor: string): ModeApplication | null;
147
+ /** End this application, and only while it's still the one on: a timer armed for it never ends a later mode the person
148
+ * switched to. Null when it has already ended. */
149
+ endIfStill(applicationId: string, reason: EndReason, actor: string): ModeApplication | null;
150
+ /** Restorations from ended applications that are still pending or failed: owed in the coming-back report, and tried
151
+ * again by every end. Oldest application first. */
152
+ unresolved(entityId: string): Array<{
153
+ applicationId: string;
154
+ modeName: string;
155
+ endedAt: string;
156
+ effect: ModeEffect;
157
+ }>;
158
+ private unresolvedApplicationIds;
159
+ private endEffects;
160
+ /** The latest earlier application's still-owed restore of this consumer, if its change is still the live one. */
161
+ private owedStillOwn;
162
+ /** Close an earlier effect whose restore a later mode took over: not kept (nobody chose otherwise), not ended (nothing
163
+ * was restored yet), but handed to the mode that now restores its prior value. */
164
+ private handOff;
165
+ private endAvailability;
166
+ private endQuiet;
167
+ private effect;
168
+ private effects;
169
+ private application;
170
+ }
171
+ //# sourceMappingURL=human-operating-modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-operating-modes.d.ts","sourceRoot":"","sources":["../../../src/domain/gateway/human-operating-modes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,422 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { HumanQuietStore } from "./human-quiet-windows.js";
3
+ import { readHumanAvailability, setHumanField } from "./human-registry.js";
4
+ const AVAILABILITY = new Set(["available", "focus", "away", "off"]);
5
+ export class ModeError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.code = code;
10
+ this.name = "ModeError";
11
+ }
12
+ }
13
+ export function registryAvailability(home) {
14
+ return {
15
+ read: (entityId) => readHumanAvailability(entityId, home),
16
+ write: (entityId, value) => {
17
+ const res = setHumanField(entityId, "availability", value, home);
18
+ return res.ok ? { ok: true, changeId: res.changeId } : { ok: false, error: res.error, changeId: res.changeId };
19
+ },
20
+ setLegacyAway: (entityId, on) => {
21
+ const res = setHumanField(entityId, "away", on ? "true" : "false", home);
22
+ return res.ok ? { ok: true } : { ok: false, error: res.error };
23
+ },
24
+ };
25
+ }
26
+ /** Mode names are compared in one spelling: lower case, words joined by hyphens ("Away from desk" is away-from-desk). */
27
+ export function modeName(raw) {
28
+ return raw.trim().toLowerCase().replace(/[\s_]+/g, "-");
29
+ }
30
+ export const AT_DESK = "at-desk";
31
+ export class HumanModeService {
32
+ deps;
33
+ quiet;
34
+ /** `availability` is needed only to apply or end a mode; reading saved modes and applications works without it. */
35
+ /** `armScheduledEnd` arms the timer that ends an application at its scheduled end; it runs with the application's insert,
36
+ * so one never commits without the other. */
37
+ constructor(deps) {
38
+ this.deps = deps;
39
+ this.quiet = deps.quiet ?? new HumanQuietStore(deps.db);
40
+ }
41
+ get availability() {
42
+ if (!this.deps.availability)
43
+ throw new Error("applying or ending a mode needs the availability writer");
44
+ return this.deps.availability;
45
+ }
46
+ now() { return this.deps.now?.() ?? new Date(); }
47
+ save(entityId, input, actor) {
48
+ const name = modeName(input.name);
49
+ if (!name)
50
+ throw new ModeError("invalid_mode", "a mode needs a name");
51
+ if (name === AT_DESK)
52
+ throw new ModeError("invalid_mode", "at desk is no mode applied, so it isn't saved: apply it to end the current mode");
53
+ const value = input.availability?.value ?? null;
54
+ if (value !== null && !AVAILABILITY.has(value))
55
+ throw new ModeError("invalid_mode", `availability must be one of available|focus|away|off (got "${value}")`);
56
+ const words = input.decisionRoom?.words?.trim() || null;
57
+ const exclusions = input.decisionRoom?.exclusions ?? [];
58
+ if (!words && exclusions.length > 0)
59
+ throw new ModeError("invalid_mode", "exclusions read back from a decision room need the person's words for it");
60
+ const quiet = input.delivery?.quiet ?? null;
61
+ if (quiet)
62
+ validateQuietRule(quiet);
63
+ const at = this.now().toISOString();
64
+ this.deps.db.prepare(`INSERT INTO human_saved_modes (entity_id, name, availability, expected_back, decision_room_words,
65
+ decision_room_exclusions, quiet_rule, account_destination, set_by, set_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
66
+ ON CONFLICT (entity_id, name) DO UPDATE SET availability = excluded.availability, expected_back = excluded.expected_back,
67
+ decision_room_words = excluded.decision_room_words, decision_room_exclusions = excluded.decision_room_exclusions,
68
+ quiet_rule = excluded.quiet_rule, account_destination = excluded.account_destination, set_by = excluded.set_by,
69
+ set_at = excluded.set_at`)
70
+ .run(entityId, name, value, input.availability?.expectedBack ?? null, words, JSON.stringify(words ? exclusions : []), quiet ? JSON.stringify(quiet) : null, input.delivery?.account ?? null, actor, at);
71
+ return this.saved(entityId, name);
72
+ }
73
+ saved(entityId, name) {
74
+ const row = this.deps.db.prepare(`SELECT * FROM human_saved_modes WHERE entity_id = ? AND name = ?`).get(entityId, modeName(name));
75
+ return row ? toSaved(row) : null;
76
+ }
77
+ list(entityId) {
78
+ return this.deps.db.prepare(`SELECT * FROM human_saved_modes WHERE entity_id = ? ORDER BY name`).all(entityId).map(toSaved);
79
+ }
80
+ /** The person's active application, or null: at desk. */
81
+ current(entityId) {
82
+ const row = this.deps.db.prepare(`SELECT * FROM human_mode_applications WHERE entity_id = ? AND ended_at IS NULL`).get(entityId);
83
+ return row ? this.application(row) : null;
84
+ }
85
+ get(applicationId) {
86
+ const row = this.deps.db.prepare(`SELECT * FROM human_mode_applications WHERE application_id = ?`).get(applicationId);
87
+ return row ? this.application(row) : null;
88
+ }
89
+ /** Apply a saved mode. At desk ends the current application and applies nothing. Another active mode is ended first
90
+ * (a switch), so a person has at most one. */
91
+ apply(entityId, name, input, actor) {
92
+ const wanted = modeName(name);
93
+ const at = this.now();
94
+ if (wanted === AT_DESK)
95
+ return { application: null, ended: this.end(entityId, "back", actor) };
96
+ const mode = this.saved(entityId, wanted);
97
+ if (!mode)
98
+ throw new ModeError("mode_not_found", `${entityId} has no saved mode "${wanted}": save it first`);
99
+ const scheduledEnd = input.scheduledEnd ?? null;
100
+ if (scheduledEnd && scheduledEnd.getTime() <= at.getTime())
101
+ throw new ModeError("end_required", `${scheduledEnd.toISOString()} has already passed`);
102
+ if (mode.delivery.quiet?.kind === "until-end" && !scheduledEnd) {
103
+ throw new ModeError("end_required", `"${wanted}" keeps quiet hours until the mode ends, so applying it needs an end time`);
104
+ }
105
+ const ended = this.end(entityId, "switched", actor);
106
+ const applicationId = randomUUID();
107
+ this.deps.db.transaction(() => {
108
+ this.deps.db.prepare(`INSERT INTO human_mode_applications (application_id, entity_id, mode_name, settings, started_by, started_at, scheduled_end)
109
+ VALUES (?, ?, ?, ?, ?, ?, ?)`).run(applicationId, entityId, wanted, JSON.stringify(mode), actor, at.toISOString(), scheduledEnd?.toISOString() ?? null);
110
+ if (scheduledEnd)
111
+ this.deps.armScheduledEnd?.({ applicationId, entityId, scheduledEnd: scheduledEnd.toISOString() });
112
+ })();
113
+ // Each effect is its own step: one that throws is recorded as that effect's failure and never stops the others, so the
114
+ // record always shows every effect's real state.
115
+ const step = (consumer, run) => {
116
+ try {
117
+ run();
118
+ }
119
+ catch (error) {
120
+ this.effect(applicationId, consumer, null, null, "failed", `couldn't apply it: ${error.message}`);
121
+ }
122
+ };
123
+ if (mode.availability.value) {
124
+ const value = mode.availability.value;
125
+ step("availability", () => {
126
+ const prior = this.availability.read(entityId);
127
+ if (!prior.ok) {
128
+ this.effect(applicationId, "availability", null, null, "failed", `couldn't read the current availability: ${prior.error}`);
129
+ return;
130
+ }
131
+ // An earlier mode whose restore is still owed, and whose change is still the live one: its prior is the real one.
132
+ const owed = this.owedStillOwn(entityId, "availability", (identity) => {
133
+ // Absence compares as absence: the registry reads an unset value as undefined, and a partial unset restore is
134
+ // recorded with null.
135
+ const id = identity;
136
+ return (prior.availability ?? null) === (id.availability ?? null) && (id.changeId == null || prior.changeId === id.changeId);
137
+ });
138
+ const wrote = this.availability.write(entityId, value);
139
+ // The change identity is the change record the mode's own write left, as the writer returns it (so a manual write
140
+ // landing right after it is never taken for the mode's), with the value. A write can also fail after the fragment
141
+ // and record are saved (re-projecting it fails); its id comes back with the error, the value is live on the next
142
+ // load, and the change is still the mode's own, so ending puts the prior value back. A writer that returns no id
143
+ // (an injected one, or a record that couldn't be written) falls back to reading the record back after the write.
144
+ const after = wrote.changeId ? null : this.availability.read(entityId);
145
+ const landed = wrote.changeId ? { availability: value, changeId: wrote.changeId }
146
+ : after?.ok && after.availability === value ? { availability: value, changeId: after.changeId ?? null } : null;
147
+ // The prior state is the authored availability and the legacy away flag, so ending can put back exactly what the
148
+ // person had (an inherited prior carries both).
149
+ const priorValue = owed?.effect.prior
150
+ ?? { availability: prior.availability ?? null, away: prior.away ?? false };
151
+ if (wrote.ok && landed)
152
+ this.effect(applicationId, "availability", priorValue, landed, "active", null);
153
+ else
154
+ this.effect(applicationId, "availability", priorValue, landed, "failed", wrote.ok ? "written, but it didn't read back as written" : wrote.error);
155
+ if (owed && landed)
156
+ this.handOff(owed, applicationId, mode.name, `availability ${priorValue.availability ?? "not set"}`);
157
+ });
158
+ }
159
+ if (mode.delivery.quiet) {
160
+ const rule = mode.delivery.quiet;
161
+ step("quiet", () => {
162
+ let prior;
163
+ try {
164
+ prior = this.quiet.show(entityId);
165
+ }
166
+ catch (error) {
167
+ // Nothing is written when what's there now can't be read: there would be nothing honest to restore.
168
+ this.effect(applicationId, "quiet", null, null, "failed", `couldn't read the current quiet hours: ${error.message}`);
169
+ return;
170
+ }
171
+ const owed = this.owedStillOwn(entityId, "quiet", (identity) => {
172
+ const id = identity;
173
+ return !!prior && prior.revision === id.revision && prior.source === id.source;
174
+ });
175
+ if (owed)
176
+ prior = owed.effect.prior;
177
+ const source = `mode-application:${applicationId}`;
178
+ try {
179
+ const window = rule.kind === "daily"
180
+ ? this.quiet.setDaily(entityId, { start: rule.start, end: rule.end, timezone: rule.timezone, setBy: actor, now: at, source })
181
+ : this.quiet.setUntil(entityId, { until: scheduledEnd, timezone: rule.timezone, setBy: actor, now: at, source });
182
+ this.effect(applicationId, "quiet", prior, { windowId: window.windowId, revision: window.revision, source }, "active", null);
183
+ if (owed)
184
+ this.handOff(owed, applicationId, mode.name, describeQuiet(prior));
185
+ }
186
+ catch (error) {
187
+ this.effect(applicationId, "quiet", prior, null, "failed", error.message);
188
+ }
189
+ });
190
+ }
191
+ if (mode.decisionRoom)
192
+ step("decision-room", () => this.effect(applicationId, "decision-room", null, { applicationId }, "active", null));
193
+ // The switch's ended snapshot is read again, so it shows any effect this apply has since handed off.
194
+ return { application: this.get(applicationId), ended: ended ? this.get(ended.applicationId) : null };
195
+ }
196
+ /** End the person's active application: each effect ends only if the latest change is still its own. Returns the
197
+ * ended application, or null when none was active. Every time, restorations still pending or failed from earlier
198
+ * applications are tried again (see unresolved), so a later mode never hides an older one's. */
199
+ end(entityId, reason, actor) {
200
+ const at = this.now();
201
+ const row = this.deps.db.prepare(`SELECT * FROM human_mode_applications WHERE entity_id = ? AND ended_at IS NULL`).get(entityId);
202
+ if (row) {
203
+ this.deps.db.prepare(`UPDATE human_mode_applications SET ended_at = ?, ended_by = ?, end_reason = ? WHERE application_id = ?`)
204
+ .run(at.toISOString(), actor, reason, row.application_id);
205
+ this.endEffects(entityId, row.application_id, actor, at);
206
+ }
207
+ for (const earlier of this.unresolvedApplicationIds(entityId)) {
208
+ if (earlier !== row?.application_id)
209
+ this.endEffects(entityId, earlier, actor, at);
210
+ }
211
+ return row ? this.get(row.application_id) : null;
212
+ }
213
+ /** End this application, and only while it's still the one on: a timer armed for it never ends a later mode the person
214
+ * switched to. Null when it has already ended. */
215
+ endIfStill(applicationId, reason, actor) {
216
+ const row = this.deps.db.prepare(`SELECT entity_id FROM human_mode_applications WHERE application_id = ? AND ended_at IS NULL`)
217
+ .get(applicationId);
218
+ return row ? this.end(row.entity_id, reason, actor) : null;
219
+ }
220
+ /** Restorations from ended applications that are still pending or failed: owed in the coming-back report, and tried
221
+ * again by every end. Oldest application first. */
222
+ unresolved(entityId) {
223
+ const out = [];
224
+ for (const id of this.unresolvedApplicationIds(entityId)) {
225
+ const app = this.get(id);
226
+ for (const effect of app.effects) {
227
+ if (effect.state === "pending" || (effect.state === "failed" && effect.changeIdentity !== null)) {
228
+ out.push({ applicationId: id, modeName: app.modeName, endedAt: app.endedAt, effect });
229
+ }
230
+ }
231
+ }
232
+ return out;
233
+ }
234
+ unresolvedApplicationIds(entityId) {
235
+ return this.deps.db.prepare(`SELECT DISTINCT a.application_id AS id, a.started_at FROM human_mode_applications a
236
+ JOIN human_mode_effects e ON e.application_id = a.application_id
237
+ WHERE a.entity_id = ? AND a.ended_at IS NOT NULL
238
+ AND (e.state = 'pending' OR (e.state = 'failed' AND e.change_identity IS NOT NULL))
239
+ ORDER BY a.started_at`).all(entityId).map((r) => r.id);
240
+ }
241
+ endEffects(entityId, applicationId, actor, at) {
242
+ for (const effect of this.effects(applicationId)) {
243
+ if (effect.state === "ended" || effect.state === "kept" || effect.state === "handed-off")
244
+ continue;
245
+ if (effect.state === "failed" && effect.changeIdentity === null) {
246
+ this.effect(applicationId, effect.consumer, effect.prior, null, "ended", "it never took effect when the mode started, so there was nothing to undo");
247
+ continue;
248
+ }
249
+ // As when applying: a throw while ending one effect is that effect's failure, never the others'.
250
+ try {
251
+ if (effect.consumer === "decision-room")
252
+ this.effect(applicationId, "decision-room", null, effect.changeIdentity, "ended", null);
253
+ else if (effect.consumer === "availability")
254
+ this.endAvailability(entityId, applicationId, effect);
255
+ else
256
+ this.endQuiet(entityId, applicationId, effect, actor, at);
257
+ }
258
+ catch (error) {
259
+ this.effect(applicationId, effect.consumer, effect.prior, effect.changeIdentity, "failed", `couldn't end it: ${error.message}`);
260
+ }
261
+ }
262
+ }
263
+ /** The latest earlier application's still-owed restore of this consumer, if its change is still the live one. */
264
+ owedStillOwn(entityId, consumer, stillOwn) {
265
+ const owed = this.unresolved(entityId).filter((u) => u.effect.consumer === consumer).at(-1);
266
+ return owed && owed.effect.changeIdentity !== null && stillOwn(owed.effect.changeIdentity) ? owed : null;
267
+ }
268
+ /** Close an earlier effect whose restore a later mode took over: not kept (nobody chose otherwise), not ended (nothing
269
+ * was restored yet), but handed to the mode that now restores its prior value. */
270
+ handOff(owed, toApplicationId, toMode, prior) {
271
+ this.effect(owed.applicationId, owed.effect.consumer, owed.effect.prior, owed.effect.changeIdentity, "handed-off", `handed to ${toMode} (${toApplicationId}), which restores ${prior} when it ends`);
272
+ }
273
+ endAvailability(entityId, applicationId, effect) {
274
+ // The identity is what the mode itself last wrote: its own value when the mode started, or, after a restore that
275
+ // saved but failed to re-project, the restored value with that restore's change id (so a retry finishes it).
276
+ const identity = effect.changeIdentity;
277
+ const wrote = identity.availability ?? null;
278
+ // A snapshot without `away` (only in data from before the flag was recorded, never merged) reads as false.
279
+ const { availability: prior, away: priorAway = false } = effect.prior;
280
+ const now = this.availability.read(entityId);
281
+ if (!now.ok) {
282
+ this.effect(applicationId, "availability", effect.prior, effect.changeIdentity, "pending", `couldn't read the current availability to check it's still this mode's: ${now.error}`);
283
+ return;
284
+ }
285
+ // Still the mode's own only if the latest recorded change is the mode's (so away, then focus, then away by hand is
286
+ // not) and the value is the one it wrote (so a hand edit of the file is not). A record from before change ids
287
+ // existed falls back to the value alone.
288
+ const sameChange = identity.changeId == null || now.changeId === identity.changeId;
289
+ const nowValue = now.availability ?? null; // an unset value reads undefined, and is recorded as null
290
+ if (nowValue !== wrote || !sameChange) {
291
+ this.effect(applicationId, "availability", effect.prior, effect.changeIdentity, "kept", `changed since the mode started (now ${now.availability ?? "not set"}${nowValue === wrote ? ", set again since" : ""}); that choice stands`);
292
+ return;
293
+ }
294
+ // A legacy `away: true` added while the mode's away was on only agreed with it, and it would contradict a value being
295
+ // put back (the registry refuses the pair), so it goes first, while availability is still authored (then clearing it
296
+ // changes nothing about availability and leaves the change record alone). A flag the person had before the mode is
297
+ // theirs and is left as it is.
298
+ const setAway = this.availability.setLegacyAway;
299
+ if (now.away && !priorAway && prior !== "away" && setAway) {
300
+ const cleared = setAway(entityId, false);
301
+ if (!cleared.ok) {
302
+ this.effect(applicationId, "availability", effect.prior, effect.changeIdentity, "failed", `couldn't clear away before restoring ${prior ?? "not set"}: ${cleared.error}`);
303
+ return;
304
+ }
305
+ }
306
+ const restored = this.availability.write(entityId, (prior ?? "unset"));
307
+ // A restore that failed after the fragment and record were written (re-projecting failed) carries its change id: the
308
+ // live state is the mode's own restore, so the failure records that restore's identity, the retry recognises it and
309
+ // finishes, and a later manual change still reads as the person's. The prior stays.
310
+ if (!restored.ok) {
311
+ const restoredIdentity = restored.changeId ? { availability: prior, changeId: restored.changeId } : null;
312
+ this.effect(applicationId, "availability", effect.prior, restoredIdentity ?? effect.changeIdentity, "failed", `couldn't restore ${prior ?? "not set"}: ${restored.error}`);
313
+ return;
314
+ }
315
+ let detail = `restored to ${prior ?? "not set"}`;
316
+ if (prior === null && priorAway) {
317
+ // Their own legacy away from before the mode is left as it is: OpenRig never clears a flag that was on before, so if
318
+ // it's off now the person turned it off during the mode, and that's their "I'm back".
319
+ detail += now.away ? "; away stays on, as it was before the mode" : "; away was turned off during the mode; that choice stands";
320
+ }
321
+ else if (now.away && !priorAway && prior !== "away") {
322
+ detail += "; the away flag set during it is cleared";
323
+ }
324
+ this.effect(applicationId, "availability", effect.prior, effect.changeIdentity, "ended", detail);
325
+ }
326
+ endQuiet(entityId, applicationId, effect, actor, at) {
327
+ const wrote = effect.changeIdentity;
328
+ const prior = effect.prior;
329
+ try {
330
+ const now = this.quiet.show(entityId);
331
+ if (!now || now.revision !== wrote.revision || now.source !== wrote.source) {
332
+ this.effect(applicationId, "quiet", effect.prior, effect.changeIdentity, "kept", now ? `quiet hours were changed since the mode started (now revision ${now.revision}, set by ${now.setBy}); they stay as set`
333
+ : "quiet hours were cleared since the mode started; they stay cleared");
334
+ return;
335
+ }
336
+ // Still the mode's own rule: put back what was there before it, as it was, in one transaction with any ended mark
337
+ // carried across, so no reader sees quiet restarted in between. The mark is the person's own "I'm back" for
338
+ // tonight during the mode (a manual end changes tonight, not the rule), or the prior window's mark for an
339
+ // occurrence that is still the current one.
340
+ const personEnded = now.ended ?? null;
341
+ let detail = "";
342
+ this.deps.db.transaction(() => {
343
+ if (prior && prior.kind === "daily") {
344
+ const w = this.quiet.setDaily(entityId, { start: prior.start, end: prior.end, timezone: prior.timezone, setBy: actor, now: at, source: prior.source });
345
+ detail = `restored the daily quiet hours ${prior.start}-${prior.end} ${prior.timezone} (revision ${w.revision})`;
346
+ }
347
+ else if (prior && prior.kind === "until" && Date.parse(prior.until) > at.getTime()) {
348
+ const w = this.quiet.setUntil(entityId, { until: new Date(prior.until), timezone: prior.timezone, setBy: actor, now: at, source: prior.source });
349
+ detail = `restored quiet hours until ${prior.until} (revision ${w.revision})`;
350
+ }
351
+ else {
352
+ const c = this.quiet.clear(entityId, { clearedBy: actor, now: at });
353
+ detail = prior ? `the quiet hours before it had already run out, so none were restored (revision ${c.revision})` : `cleared the mode's quiet hours (revision ${c.revision})`;
354
+ return;
355
+ }
356
+ const state = this.quiet.quietStateFor(entityId, at);
357
+ if (!state.active)
358
+ return;
359
+ // A mark carries only if the person ended quiet within the occurrence that is on now: from its start up to now.
360
+ // Judged by time, not by the occurrence's label (the person's mark may be on a different rule's occurrence), so
361
+ // neither an earlier night's mark nor an old one from before this occurrence began carries. A restored
362
+ // until-window's one occurrence began when the prior rule was set (the restore itself writes a new set time).
363
+ const occurrenceStart = Date.parse(prior?.kind === "until" ? prior.setAt : state.occurrenceStart);
364
+ const tonight = (ended) => ended && Date.parse(ended.at) >= occurrenceStart && Date.parse(ended.at) < at.getTime() ? ended : null;
365
+ const mark = tonight(personEnded) ?? tonight(prior?.ended);
366
+ if (!mark)
367
+ return;
368
+ this.quiet.restoreEnded(entityId, state.revision, { occurrence: state.occurrence, by: mark.by, at: mark.at });
369
+ detail += "; tonight stays off, as you set it";
370
+ })();
371
+ this.effect(applicationId, "quiet", effect.prior, effect.changeIdentity, "ended", detail);
372
+ }
373
+ catch (error) {
374
+ this.effect(applicationId, "quiet", effect.prior, effect.changeIdentity, "failed", `couldn't restore quiet hours: ${error.message}`);
375
+ }
376
+ }
377
+ effect(applicationId, consumer, prior, changeIdentity, state, detail) {
378
+ this.deps.db.prepare(`INSERT INTO human_mode_effects (application_id, consumer, prior, change_identity, state, detail, updated_at)
379
+ VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (application_id, consumer) DO UPDATE SET prior = excluded.prior,
380
+ change_identity = excluded.change_identity, state = excluded.state, detail = excluded.detail, updated_at = excluded.updated_at`)
381
+ .run(applicationId, consumer, prior === undefined ? null : JSON.stringify(prior), changeIdentity === null ? null : JSON.stringify(changeIdentity), state, detail, this.now().toISOString());
382
+ }
383
+ effects(applicationId) {
384
+ return this.deps.db.prepare(`SELECT * FROM human_mode_effects WHERE application_id = ? ORDER BY consumer`).all(applicationId)
385
+ .map((r) => ({ consumer: r.consumer, prior: r.prior === null ? null : JSON.parse(r.prior), changeIdentity: r.change_identity === null ? null : JSON.parse(r.change_identity),
386
+ state: r.state, detail: r.detail, updatedAt: r.updated_at }));
387
+ }
388
+ application(row) {
389
+ return { applicationId: row.application_id, entityId: row.entity_id, modeName: row.mode_name, settings: JSON.parse(row.settings),
390
+ startedBy: row.started_by, startedAt: row.started_at, scheduledEnd: row.scheduled_end, endedAt: row.ended_at, endedBy: row.ended_by,
391
+ endReason: row.end_reason, effects: this.effects(row.application_id) };
392
+ }
393
+ }
394
+ function validateQuietRule(rule) {
395
+ const hhmm = /^([01]\d|2[0-3]):([0-5]\d)$/;
396
+ if (rule.kind === "daily") {
397
+ if (!hhmm.test(rule.start) || !hhmm.test(rule.end))
398
+ throw new ModeError("invalid_mode", "a daily quiet rule needs start and end as 24-hour HH:MM");
399
+ if (rule.start === rule.end)
400
+ throw new ModeError("invalid_mode", "a daily quiet rule's start and end are the same time");
401
+ }
402
+ else if (rule.kind !== "until-end") {
403
+ throw new ModeError("invalid_mode", `a quiet rule is daily or until-end (got "${rule.kind}")`);
404
+ }
405
+ if (!rule.timezone)
406
+ throw new ModeError("invalid_mode", "a quiet rule needs a timezone");
407
+ }
408
+ function toSaved(row) {
409
+ return {
410
+ entityId: row.entity_id, name: row.name,
411
+ availability: { value: row.availability, expectedBack: row.expected_back },
412
+ decisionRoom: row.decision_room_words ? { words: row.decision_room_words, exclusions: JSON.parse(row.decision_room_exclusions) } : null,
413
+ delivery: { quiet: row.quiet_rule ? JSON.parse(row.quiet_rule) : null, account: row.account_destination },
414
+ setBy: row.set_by, setAt: row.set_at,
415
+ };
416
+ }
417
+ function describeQuiet(window) {
418
+ if (!window)
419
+ return "no quiet hours";
420
+ return window.kind === "daily" ? `the daily quiet hours ${window.start}-${window.end} ${window.timezone}` : `quiet hours until ${window.until}`;
421
+ }
422
+ //# sourceMappingURL=human-operating-modes.js.map