@openrig/cli 0.5.12 → 0.5.14

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 (584) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +40 -5
  2. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  3. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +89 -10
  4. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  5. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  6. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  7. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  8. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  9. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  10. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  11. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  12. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +40 -5
  13. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  56. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  57. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  58. package/daemon/dist/attention-surface.d.ts +38 -0
  59. package/daemon/dist/attention-surface.d.ts.map +1 -0
  60. package/daemon/dist/attention-surface.js +3 -0
  61. package/daemon/dist/attention-surface.js.map +1 -0
  62. package/daemon/dist/build-info.js +3 -3
  63. package/daemon/dist/db/all-migrations.d.ts +1 -1
  64. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  65. package/daemon/dist/db/all-migrations.js +12 -2
  66. package/daemon/dist/db/all-migrations.js.map +1 -1
  67. package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
  68. package/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
  69. package/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
  70. package/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
  71. package/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
  72. package/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
  73. package/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
  74. package/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
  75. package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
  76. package/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
  77. package/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
  78. package/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
  79. package/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
  80. package/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
  81. package/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
  82. package/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
  83. package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
  84. package/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
  85. package/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
  86. package/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
  87. package/daemon/dist/domain/execution-view.d.ts +1 -0
  88. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  89. package/daemon/dist/domain/execution-view.js +38 -19
  90. package/daemon/dist/domain/execution-view.js.map +1 -1
  91. package/daemon/dist/domain/files/file-read.d.ts +17 -0
  92. package/daemon/dist/domain/files/file-read.d.ts.map +1 -0
  93. package/daemon/dist/domain/files/file-read.js +24 -0
  94. package/daemon/dist/domain/files/file-read.js.map +1 -0
  95. package/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
  96. package/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
  97. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  98. package/daemon/dist/domain/gateway/slack/message.js +40 -77
  99. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  100. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
  101. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  102. package/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
  103. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  104. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
  105. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  106. package/daemon/dist/domain/gateway/slack/queue-access.js +2 -0
  107. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  108. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -1
  109. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  110. package/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
  111. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  112. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  113. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +8 -1
  114. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  115. package/daemon/dist/domain/health-context.d.ts +3 -0
  116. package/daemon/dist/domain/health-context.d.ts.map +1 -1
  117. package/daemon/dist/domain/health-context.js +78 -6
  118. package/daemon/dist/domain/health-context.js.map +1 -1
  119. package/daemon/dist/domain/health-detectors.d.ts +2 -1
  120. package/daemon/dist/domain/health-detectors.d.ts.map +1 -1
  121. package/daemon/dist/domain/health-detectors.js +8 -2
  122. package/daemon/dist/domain/health-detectors.js.map +1 -1
  123. package/daemon/dist/domain/health-diagnosis.d.ts +51 -1
  124. package/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  125. package/daemon/dist/domain/health-diagnosis.js +60 -9
  126. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  127. package/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
  128. package/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  129. package/daemon/dist/domain/health-passive-ceremony.js +59 -26
  130. package/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  131. package/daemon/dist/domain/health-projection.d.ts +2 -0
  132. package/daemon/dist/domain/health-projection.d.ts.map +1 -1
  133. package/daemon/dist/domain/health-projection.js.map +1 -1
  134. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
  135. package/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
  136. package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
  137. package/daemon/dist/domain/proof/judgments.d.ts +10 -3
  138. package/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  139. package/daemon/dist/domain/proof/judgments.js +26 -8
  140. package/daemon/dist/domain/proof/judgments.js.map +1 -1
  141. package/daemon/dist/domain/queue-repository.d.ts +19 -6
  142. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  143. package/daemon/dist/domain/queue-repository.js +61 -11
  144. package/daemon/dist/domain/queue-repository.js.map +1 -1
  145. package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  146. package/daemon/dist/domain/queue-retention.js +6 -2
  147. package/daemon/dist/domain/queue-retention.js.map +1 -1
  148. package/daemon/dist/domain/queue-transition-log.d.ts +1 -0
  149. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  150. package/daemon/dist/domain/queue-transition-log.js +19 -7
  151. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  152. package/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
  153. package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
  154. package/daemon/dist/domain/review/fleet-compose.js +25 -11
  155. package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
  156. package/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
  157. package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
  158. package/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
  159. package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
  160. package/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
  161. package/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
  162. package/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
  163. package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
  164. package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
  165. package/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
  166. package/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
  167. package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
  168. package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
  169. package/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
  170. package/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
  171. package/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
  172. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  173. package/daemon/dist/domain/scope/scope-view-projection.js +2 -2
  174. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  175. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
  176. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  177. package/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
  178. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  179. package/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
  180. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  181. package/daemon/dist/domain/slices/slice-indexer.js +10 -1
  182. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  183. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
  184. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  185. package/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
  186. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  187. package/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
  188. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  189. package/daemon/dist/domain/terminal/terminal-service.js +53 -13
  190. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  191. package/daemon/dist/domain/view-projector.d.ts +2 -0
  192. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  193. package/daemon/dist/domain/view-projector.js +1 -1
  194. package/daemon/dist/domain/view-projector.js.map +1 -1
  195. package/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
  196. package/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
  197. package/daemon/dist/domain/workspace/project-catalog.js +66 -0
  198. package/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
  199. package/daemon/dist/domain/workspace/project-read.d.ts +29 -0
  200. package/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
  201. package/daemon/dist/domain/workspace/project-read.js +125 -0
  202. package/daemon/dist/domain/workspace/project-read.js.map +1 -0
  203. package/daemon/dist/health-projection-surface.d.ts +1 -0
  204. package/daemon/dist/health-projection-surface.d.ts.map +1 -1
  205. package/daemon/dist/local-reading-surface.d.ts +3 -0
  206. package/daemon/dist/local-reading-surface.d.ts.map +1 -0
  207. package/daemon/dist/local-reading-surface.js +3 -0
  208. package/daemon/dist/local-reading-surface.js.map +1 -0
  209. package/daemon/dist/project-catalog-surface.d.ts +2 -0
  210. package/daemon/dist/project-catalog-surface.d.ts.map +1 -0
  211. package/daemon/dist/project-catalog-surface.js +2 -0
  212. package/daemon/dist/project-catalog-surface.js.map +1 -0
  213. package/daemon/dist/routes/attention.d.ts +3 -0
  214. package/daemon/dist/routes/attention.d.ts.map +1 -0
  215. package/daemon/dist/routes/attention.js +155 -0
  216. package/daemon/dist/routes/attention.js.map +1 -0
  217. package/daemon/dist/routes/files.d.ts +1 -1
  218. package/daemon/dist/routes/files.d.ts.map +1 -1
  219. package/daemon/dist/routes/files.js +4 -24
  220. package/daemon/dist/routes/files.js.map +1 -1
  221. package/daemon/dist/routes/queue.d.ts +4 -18
  222. package/daemon/dist/routes/queue.d.ts.map +1 -1
  223. package/daemon/dist/routes/queue.js +23 -33
  224. package/daemon/dist/routes/queue.js.map +1 -1
  225. package/daemon/dist/routes/review.js +1 -1
  226. package/daemon/dist/routes/rig-mode.d.ts.map +1 -1
  227. package/daemon/dist/routes/rig-mode.js +67 -14
  228. package/daemon/dist/routes/rig-mode.js.map +1 -1
  229. package/daemon/dist/routes/rigs.js +5 -1
  230. package/daemon/dist/routes/rigs.js.map +1 -1
  231. package/daemon/dist/routes/scopes.d.ts.map +1 -1
  232. package/daemon/dist/routes/scopes.js +74 -20
  233. package/daemon/dist/routes/scopes.js.map +1 -1
  234. package/daemon/dist/routes/slices.d.ts +2 -2
  235. package/daemon/dist/routes/slices.d.ts.map +1 -1
  236. package/daemon/dist/routes/slices.js +18 -1
  237. package/daemon/dist/routes/slices.js.map +1 -1
  238. package/daemon/dist/routes/spec-library.d.ts.map +1 -1
  239. package/daemon/dist/routes/spec-library.js +11 -2
  240. package/daemon/dist/routes/spec-library.js.map +1 -1
  241. package/daemon/dist/routes/terminal.d.ts.map +1 -1
  242. package/daemon/dist/routes/terminal.js +14 -4
  243. package/daemon/dist/routes/terminal.js.map +1 -1
  244. package/daemon/dist/routes/views.d.ts.map +1 -1
  245. package/daemon/dist/routes/views.js +11 -1
  246. package/daemon/dist/routes/views.js.map +1 -1
  247. package/daemon/dist/server.d.ts +1 -0
  248. package/daemon/dist/server.d.ts.map +1 -1
  249. package/daemon/dist/server.js +3 -0
  250. package/daemon/dist/server.js.map +1 -1
  251. package/daemon/dist/startup.d.ts.map +1 -1
  252. package/daemon/dist/startup.js +19 -5
  253. package/daemon/dist/startup.js.map +1 -1
  254. package/daemon/docs/reference/getting-started.md +13 -1
  255. package/daemon/docs/reference/health-diagnosis.md +83 -6
  256. package/daemon/docs/reference/project-workspace.md +23 -0
  257. package/daemon/docs/reference/scoped-operating-posture.md +95 -0
  258. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +40 -5
  259. package/dist/build-info.js +3 -3
  260. package/dist/commands/context.d.ts.map +1 -1
  261. package/dist/commands/context.js +66 -124
  262. package/dist/commands/context.js.map +1 -1
  263. package/dist/commands/health.d.ts.map +1 -1
  264. package/dist/commands/health.js +17 -2
  265. package/dist/commands/health.js.map +1 -1
  266. package/dist/commands/queue.d.ts.map +1 -1
  267. package/dist/commands/queue.js +5 -1
  268. package/dist/commands/queue.js.map +1 -1
  269. package/dist/commands/rig-mode.d.ts +2 -2
  270. package/dist/commands/rig-mode.d.ts.map +1 -1
  271. package/dist/commands/rig-mode.js +36 -11
  272. package/dist/commands/rig-mode.js.map +1 -1
  273. package/dist/lib/context-git.d.ts +141 -0
  274. package/dist/lib/context-git.d.ts.map +1 -0
  275. package/dist/lib/context-git.js +256 -0
  276. package/dist/lib/context-git.js.map +1 -0
  277. package/dist/lib/context-install.d.ts +5 -0
  278. package/dist/lib/context-install.d.ts.map +1 -0
  279. package/dist/lib/context-install.js +125 -0
  280. package/dist/lib/context-install.js.map +1 -0
  281. package/dist/lib/work-install.d.ts.map +1 -1
  282. package/dist/lib/work-install.js +11 -36
  283. package/dist/lib/work-install.js.map +1 -1
  284. package/dist/local-reading.d.ts +31 -0
  285. package/dist/local-reading.d.ts.map +1 -0
  286. package/dist/local-reading.js +62 -0
  287. package/dist/local-reading.js.map +1 -0
  288. package/node_modules/@openrig/daemon/dist/attention-surface.d.ts +38 -0
  289. package/node_modules/@openrig/daemon/dist/attention-surface.d.ts.map +1 -0
  290. package/node_modules/@openrig/daemon/dist/attention-surface.js +3 -0
  291. package/node_modules/@openrig/daemon/dist/attention-surface.js.map +1 -0
  292. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  293. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
  294. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
  295. package/node_modules/@openrig/daemon/dist/db/all-migrations.js +12 -2
  296. package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
  297. package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts +4 -0
  298. package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.d.ts.map +1 -0
  299. package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js +21 -0
  300. package/node_modules/@openrig/daemon/dist/db/migrations/080_scoped_operating_posture.js.map +1 -0
  301. package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts +3 -0
  302. package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.d.ts.map +1 -0
  303. package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js +9 -0
  304. package/node_modules/@openrig/daemon/dist/db/migrations/081_human_notification_intent.js.map +1 -0
  305. package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts +5 -0
  306. package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.d.ts.map +1 -0
  307. package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js +7 -0
  308. package/node_modules/@openrig/daemon/dist/db/migrations/082_archive_identity_provenance.js.map +1 -0
  309. package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts +4 -0
  310. package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.d.ts.map +1 -0
  311. package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js +12 -0
  312. package/node_modules/@openrig/daemon/dist/db/migrations/083_review_read_indexes.js.map +1 -0
  313. package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts +5 -0
  314. package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.d.ts.map +1 -0
  315. package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js +14 -0
  316. package/node_modules/@openrig/daemon/dist/db/migrations/084_inventory_event_indexes.js.map +1 -0
  317. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts +1 -0
  318. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
  319. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +38 -19
  320. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
  321. package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts +17 -0
  322. package/node_modules/@openrig/daemon/dist/domain/files/file-read.d.ts.map +1 -0
  323. package/node_modules/@openrig/daemon/dist/domain/files/file-read.js +24 -0
  324. package/node_modules/@openrig/daemon/dist/domain/files/file-read.js.map +1 -0
  325. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +4 -4
  326. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +13 -12
  327. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  328. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +40 -77
  329. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  330. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +2 -0
  331. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  332. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +2 -0
  333. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  334. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +2 -0
  335. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  336. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +2 -0
  337. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  338. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -1
  339. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  340. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +85 -3
  341. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  342. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  343. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +8 -1
  344. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  345. package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts +3 -0
  346. package/node_modules/@openrig/daemon/dist/domain/health-context.d.ts.map +1 -1
  347. package/node_modules/@openrig/daemon/dist/domain/health-context.js +78 -6
  348. package/node_modules/@openrig/daemon/dist/domain/health-context.js.map +1 -1
  349. package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts +2 -1
  350. package/node_modules/@openrig/daemon/dist/domain/health-detectors.d.ts.map +1 -1
  351. package/node_modules/@openrig/daemon/dist/domain/health-detectors.js +8 -2
  352. package/node_modules/@openrig/daemon/dist/domain/health-detectors.js.map +1 -1
  353. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts +51 -1
  354. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.d.ts.map +1 -1
  355. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +60 -9
  356. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
  357. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts +7 -1
  358. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.d.ts.map +1 -1
  359. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js +59 -26
  360. package/node_modules/@openrig/daemon/dist/domain/health-passive-ceremony.js.map +1 -1
  361. package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts +2 -0
  362. package/node_modules/@openrig/daemon/dist/domain/health-projection.d.ts.map +1 -1
  363. package/node_modules/@openrig/daemon/dist/domain/health-projection.js.map +1 -1
  364. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -1
  365. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +23 -3
  366. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -1
  367. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts +10 -3
  368. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.d.ts.map +1 -1
  369. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js +26 -8
  370. package/node_modules/@openrig/daemon/dist/domain/proof/judgments.js.map +1 -1
  371. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +19 -6
  372. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  373. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +61 -11
  374. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  375. package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  376. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +6 -2
  377. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
  378. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +1 -0
  379. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  380. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +19 -7
  381. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
  382. package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts +7 -6
  383. package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -1
  384. package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js +25 -11
  385. package/node_modules/@openrig/daemon/dist/domain/review/fleet-compose.js.map +1 -1
  386. package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts +49 -0
  387. package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -0
  388. package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js +255 -0
  389. package/node_modules/@openrig/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -0
  390. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -1
  391. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js +20 -0
  392. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -1
  393. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts +2 -2
  394. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -1
  395. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js +19 -3
  396. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -1
  397. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts +12 -7
  398. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -1
  399. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js +14 -3
  400. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -1
  401. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts +2 -2
  402. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  403. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +2 -2
  404. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  405. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts +1 -0
  406. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  407. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +3 -0
  408. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  409. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts +4 -0
  410. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  411. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +10 -1
  412. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  413. package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts +2 -0
  414. package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  415. package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js +1 -1
  416. package/node_modules/@openrig/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  417. package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts +30 -2
  418. package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  419. package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js +53 -13
  420. package/node_modules/@openrig/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  421. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +2 -0
  422. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  423. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +1 -1
  424. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  425. package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts +18 -0
  426. package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -0
  427. package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js +66 -0
  428. package/node_modules/@openrig/daemon/dist/domain/workspace/project-catalog.js.map +1 -0
  429. package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts +29 -0
  430. package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.d.ts.map +1 -0
  431. package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js +125 -0
  432. package/node_modules/@openrig/daemon/dist/domain/workspace/project-read.js.map +1 -0
  433. package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts +1 -0
  434. package/node_modules/@openrig/daemon/dist/health-projection-surface.d.ts.map +1 -1
  435. package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts +3 -0
  436. package/node_modules/@openrig/daemon/dist/local-reading-surface.d.ts.map +1 -0
  437. package/node_modules/@openrig/daemon/dist/local-reading-surface.js +3 -0
  438. package/node_modules/@openrig/daemon/dist/local-reading-surface.js.map +1 -0
  439. package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts +2 -0
  440. package/node_modules/@openrig/daemon/dist/project-catalog-surface.d.ts.map +1 -0
  441. package/node_modules/@openrig/daemon/dist/project-catalog-surface.js +2 -0
  442. package/node_modules/@openrig/daemon/dist/project-catalog-surface.js.map +1 -0
  443. package/node_modules/@openrig/daemon/dist/routes/attention.d.ts +3 -0
  444. package/node_modules/@openrig/daemon/dist/routes/attention.d.ts.map +1 -0
  445. package/node_modules/@openrig/daemon/dist/routes/attention.js +155 -0
  446. package/node_modules/@openrig/daemon/dist/routes/attention.js.map +1 -0
  447. package/node_modules/@openrig/daemon/dist/routes/files.d.ts +1 -1
  448. package/node_modules/@openrig/daemon/dist/routes/files.d.ts.map +1 -1
  449. package/node_modules/@openrig/daemon/dist/routes/files.js +4 -24
  450. package/node_modules/@openrig/daemon/dist/routes/files.js.map +1 -1
  451. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts +4 -18
  452. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  453. package/node_modules/@openrig/daemon/dist/routes/queue.js +23 -33
  454. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  455. package/node_modules/@openrig/daemon/dist/routes/review.js +1 -1
  456. package/node_modules/@openrig/daemon/dist/routes/rig-mode.d.ts.map +1 -1
  457. package/node_modules/@openrig/daemon/dist/routes/rig-mode.js +67 -14
  458. package/node_modules/@openrig/daemon/dist/routes/rig-mode.js.map +1 -1
  459. package/node_modules/@openrig/daemon/dist/routes/rigs.js +5 -1
  460. package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
  461. package/node_modules/@openrig/daemon/dist/routes/scopes.d.ts.map +1 -1
  462. package/node_modules/@openrig/daemon/dist/routes/scopes.js +74 -20
  463. package/node_modules/@openrig/daemon/dist/routes/scopes.js.map +1 -1
  464. package/node_modules/@openrig/daemon/dist/routes/slices.d.ts +2 -2
  465. package/node_modules/@openrig/daemon/dist/routes/slices.d.ts.map +1 -1
  466. package/node_modules/@openrig/daemon/dist/routes/slices.js +18 -1
  467. package/node_modules/@openrig/daemon/dist/routes/slices.js.map +1 -1
  468. package/node_modules/@openrig/daemon/dist/routes/spec-library.d.ts.map +1 -1
  469. package/node_modules/@openrig/daemon/dist/routes/spec-library.js +11 -2
  470. package/node_modules/@openrig/daemon/dist/routes/spec-library.js.map +1 -1
  471. package/node_modules/@openrig/daemon/dist/routes/terminal.d.ts.map +1 -1
  472. package/node_modules/@openrig/daemon/dist/routes/terminal.js +14 -4
  473. package/node_modules/@openrig/daemon/dist/routes/terminal.js.map +1 -1
  474. package/node_modules/@openrig/daemon/dist/routes/views.d.ts.map +1 -1
  475. package/node_modules/@openrig/daemon/dist/routes/views.js +11 -1
  476. package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
  477. package/node_modules/@openrig/daemon/dist/server.d.ts +1 -0
  478. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  479. package/node_modules/@openrig/daemon/dist/server.js +3 -0
  480. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  481. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  482. package/node_modules/@openrig/daemon/dist/startup.js +19 -5
  483. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  484. package/node_modules/@openrig/daemon/package.json +13 -1
  485. package/package.json +1 -1
  486. package/tui/dist/attention/attention-model.d.ts +23 -0
  487. package/tui/dist/attention/attention-model.d.ts.map +1 -0
  488. package/tui/dist/attention/attention-model.js +85 -0
  489. package/tui/dist/attention/attention-model.js.map +1 -0
  490. package/tui/dist/attention/source-continuity.d.ts +9 -0
  491. package/tui/dist/attention/source-continuity.d.ts.map +1 -0
  492. package/tui/dist/attention/source-continuity.js +38 -0
  493. package/tui/dist/attention/source-continuity.js.map +1 -0
  494. package/tui/dist/commands/help.d.ts +4 -0
  495. package/tui/dist/commands/help.d.ts.map +1 -0
  496. package/tui/dist/commands/help.js +43 -0
  497. package/tui/dist/commands/help.js.map +1 -0
  498. package/tui/dist/commands/registry.d.ts.map +1 -1
  499. package/tui/dist/commands/registry.js +15 -1
  500. package/tui/dist/commands/registry.js.map +1 -1
  501. package/tui/dist/config/config-model.d.ts.map +1 -1
  502. package/tui/dist/config/config-model.js +33 -9
  503. package/tui/dist/config/config-model.js.map +1 -1
  504. package/tui/dist/connections/connections-model.js +1 -1
  505. package/tui/dist/connections/connections-model.js.map +1 -1
  506. package/tui/dist/daemon-client.d.ts +39 -7
  507. package/tui/dist/daemon-client.d.ts.map +1 -1
  508. package/tui/dist/daemon-client.js +74 -15
  509. package/tui/dist/daemon-client.js.map +1 -1
  510. package/tui/dist/demo-data.d.ts.map +1 -1
  511. package/tui/dist/demo-data.js +1 -0
  512. package/tui/dist/demo-data.js.map +1 -1
  513. package/tui/dist/detail.d.ts.map +1 -1
  514. package/tui/dist/detail.js +20 -7
  515. package/tui/dist/detail.js.map +1 -1
  516. package/tui/dist/execution/execution-model.d.ts +1 -0
  517. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  518. package/tui/dist/execution/execution-model.js +88 -119
  519. package/tui/dist/execution/execution-model.js.map +1 -1
  520. package/tui/dist/health/health-model.d.ts.map +1 -1
  521. package/tui/dist/health/health-model.js +26 -34
  522. package/tui/dist/health/health-model.js.map +1 -1
  523. package/tui/dist/hydrate.d.ts +1 -1
  524. package/tui/dist/hydrate.d.ts.map +1 -1
  525. package/tui/dist/hydrate.js +89 -23
  526. package/tui/dist/hydrate.js.map +1 -1
  527. package/tui/dist/input.d.ts.map +1 -1
  528. package/tui/dist/input.js +20 -3
  529. package/tui/dist/input.js.map +1 -1
  530. package/tui/dist/live.d.ts +3 -1
  531. package/tui/dist/live.d.ts.map +1 -1
  532. package/tui/dist/live.js +66 -7
  533. package/tui/dist/live.js.map +1 -1
  534. package/tui/dist/local-reading.d.ts +54 -0
  535. package/tui/dist/local-reading.d.ts.map +1 -0
  536. package/tui/dist/local-reading.js +122 -0
  537. package/tui/dist/local-reading.js.map +1 -0
  538. package/tui/dist/main.js +121 -34
  539. package/tui/dist/main.js.map +1 -1
  540. package/tui/dist/motion.d.ts +2 -0
  541. package/tui/dist/motion.d.ts.map +1 -1
  542. package/tui/dist/motion.js +4 -0
  543. package/tui/dist/motion.js.map +1 -1
  544. package/tui/dist/navigator.d.ts.map +1 -1
  545. package/tui/dist/navigator.js +14 -3
  546. package/tui/dist/navigator.js.map +1 -1
  547. package/tui/dist/page-read.d.ts +19 -0
  548. package/tui/dist/page-read.d.ts.map +1 -0
  549. package/tui/dist/page-read.js +84 -0
  550. package/tui/dist/page-read.js.map +1 -0
  551. package/tui/dist/pulse/pulse-model.d.ts.map +1 -1
  552. package/tui/dist/pulse/pulse-model.js +3 -4
  553. package/tui/dist/pulse/pulse-model.js.map +1 -1
  554. package/tui/dist/reading.d.ts +36 -0
  555. package/tui/dist/reading.d.ts.map +1 -0
  556. package/tui/dist/reading.js +89 -0
  557. package/tui/dist/reading.js.map +1 -0
  558. package/tui/dist/render.d.ts +5 -0
  559. package/tui/dist/render.d.ts.map +1 -1
  560. package/tui/dist/render.js +190 -174
  561. package/tui/dist/render.js.map +1 -1
  562. package/tui/dist/scopes/scopes-model.d.ts +3 -0
  563. package/tui/dist/scopes/scopes-model.d.ts.map +1 -1
  564. package/tui/dist/scopes/scopes-model.js +8 -2
  565. package/tui/dist/scopes/scopes-model.js.map +1 -1
  566. package/tui/dist/sections.d.ts +2 -0
  567. package/tui/dist/sections.d.ts.map +1 -1
  568. package/tui/dist/sections.js +9 -5
  569. package/tui/dist/sections.js.map +1 -1
  570. package/tui/dist/startup.d.ts +10 -1
  571. package/tui/dist/startup.d.ts.map +1 -1
  572. package/tui/dist/startup.js +99 -27
  573. package/tui/dist/startup.js.map +1 -1
  574. package/tui/dist/state.d.ts.map +1 -1
  575. package/tui/dist/state.js +121 -22
  576. package/tui/dist/state.js.map +1 -1
  577. package/tui/dist/stylize.js +28 -28
  578. package/tui/dist/stylize.js.map +1 -1
  579. package/tui/dist/terminals/terminal-model.d.ts +57 -0
  580. package/tui/dist/terminals/terminal-model.d.ts.map +1 -0
  581. package/tui/dist/terminals/terminal-model.js +113 -0
  582. package/tui/dist/terminals/terminal-model.js.map +1 -0
  583. package/tui/dist/types.d.ts +84 -1
  584. package/tui/dist/types.d.ts.map +1 -1
@@ -8,6 +8,12 @@ not declare a pathology or perform corrective actions.
8
8
 
9
9
  ## Enable a bounded diagnosis loop
10
10
 
11
+ Process-only diagnosis also requires an explicit delegated operating posture at the
12
+ finding's resolved scope. Human-led is the visible product default for resolved
13
+ unset scopes; failed or ambiguous scope reads stay unknown. Findings remain
14
+ inspectable in either case. See [scoped operating posture](scoped-operating-posture.md)
15
+ for deliberate transitions, phase/source information and the shared health contract.
16
+
11
17
  ```sh
12
18
  rig health policy --json > effective-policy.json
13
19
  jq '.policy' effective-policy.json > health-policy.json
@@ -74,7 +80,7 @@ and 99. CLI/TUI finding explanations show the policy version used.
74
80
 
75
81
  Ordinary queue activity can admit a diagnosis without a health checkpoint.
76
82
  The source discovers declared handoff families touched in the observation window,
77
- uses their explicit `mission:` / `slice:` tags, and collects exact transition IDs,
83
+ uses their explicit `project:` / `mission:` / `slice:` tags and workflow membership, and collects exact transition IDs,
78
84
  normal project/mission/slice authority, progress and proof references, and workflow
79
85
  closure evidence. It never interprets Markdown or counts proof files, approvals,
80
86
  C1 pairing, commits, tests, or terminal rows as accepted product outcomes.
@@ -125,13 +131,15 @@ traffic in the same family starts a new episode. Repeated reads never advance
125
131
  these boundaries. One occurrence and the existing owner cooldown apply to each
126
132
  episode; a disposition stops repeated requests.
127
133
 
128
- This bounded source covers explicitly tagged mission work: at most 2,000 touched
134
+ This bounded source covers explicitly linked project or mission work: at most 2,000 touched
129
135
  qitems, 200 roots, 1,000 members / 10,000 transitions per family, 200 workflow
130
136
  receipts, 200 declared slices, and 100 proof files per selected slice. Overflow
131
137
  refuses visibly. Context files are bounded to 64 KiB. A lineage beginning before
132
138
  the retained window remains indeterminate, with the missing interval named.
133
- Untagged or ambiguously mission-tagged work is outside this source's coverage;
134
- absence is not health. The packet includes missing context references so an agent
139
+ Project planning does not require a successor mission: an explicit project identity
140
+ resolves its current context, with mission and phase absent unless evidenced.
141
+ Unlinked or ambiguous work retains unknown scope and cannot infer delegated
142
+ interruption. Absence is not health. The packet includes missing context references so an agent
135
143
  can name or repair its own knowledge gap without manufacturing source truth.
136
144
 
137
145
  ## Optional outcome-boundary checkpoint
@@ -215,7 +223,7 @@ indeterminate source truth and cannot admit a diagnosis. Availability is checked
215
223
  again on every projection; presence does not certify the artifact's meaning.
216
224
  This authority assessment is distinct from the
217
225
  project/mission/slice documents supplied to the diagnosing agent. Embedded
218
- context is limited to canonical `SPEC.md` and project/mission/slice YAML files
226
+ authority is limited to canonical `SPEC.md` and project/mission/slice YAML files
219
227
  at their corresponding work-tree nodes, at most 64 KiB each. Other paths and
220
228
  symlink aliases are reported unavailable without embedding their contents.
221
229
  Each entry retains its authority level. Project files must be at the configured
@@ -225,6 +233,46 @@ mission when declared). A sibling slice or another mission is unavailable even
225
233
  when its filename is canonical. Without mission/slice scope, those authority
226
234
  levels remain unavailable.
227
235
 
236
+ ## Current selected context and correction
237
+
238
+ `diagnosis show` and `list` refresh top-level `authority` at `authorityReadAt`.
239
+ The original `packet.authority` and presentation receipts remain historical
240
+ snapshots. Current `guidance` also remains available when the retained packet
241
+ predates this guidance. Full reads include contents; summaries retain addresses,
242
+ hashes, availability, selection provenance and reasons for unavailable sources.
243
+
244
+ The reader reuses `project.yaml`'s `install.context` and the selected
245
+ `lifecycle.profiles[profile].workflow.context_refs`, plus the current mission's
246
+ `lifecycle.workflow.context_refs`. Project owners can select planning authority
247
+ and relevant causal corrections there, even before any mission exists:
248
+
249
+ ```yaml
250
+ install:
251
+ context:
252
+ - PREFLIGHT.md#current-authority
253
+ - evidence/process-correction.md
254
+ ```
255
+
256
+ These are authored selections, not inferred authority or executable adoption.
257
+ Paths resolve relative to the declaring manifest and must stay within the
258
+ resolved project. Local `file.md#h2/h3` addresses use the existing Markdown
259
+ reader. Missing/ambiguous sections, aliases, unsupported addresses, unknown scope
260
+ and missing selections' files remain unavailable. No links are followed
261
+ recursively and no successor mission is guessed. The reader accepts at most 32
262
+ selected addresses, each source file at most 64 KiB, with 128 KiB of selected
263
+ content in total; exceeded limits are visible as unavailable references. A hash
264
+ for a section covers exactly the returned section bytes. Bare library refs and
265
+ remote URLs are not fetched by this local reader.
266
+
267
+ Authority and current usefulness are separate questions. An incomplete global
268
+ outcome census cannot justify retaining a particular restriction whose premise
269
+ was disproved. Read current corrections before interpreting historical
270
+ dispositions, preserve unrelated valid boundaries such as publication authority,
271
+ and distinguish automatic wake/receipt bookkeeping from useful owner action.
272
+ Normal interactive planning is not itself pathology. State the relevance and
273
+ cost of the interruption in the assessment; do not turn the signal into a
274
+ recurring self-audit or require a universal outside reviewer.
275
+
228
276
  Checkpoints are audited under `health/checkpoints/history/`; replaying identical
229
277
  bytes writes nothing. Later censuses advance observation time. High-to-high
230
278
  observations retain episode identity; a clearing checkpoint and later recurrence
@@ -245,7 +293,7 @@ not a closed evidence set.
245
293
  {
246
294
  "verdict": "insufficient evidence",
247
295
  "causalStart": null,
248
- "steering": "Inspect the product-outcome census before changing work.",
296
+ "steering": "Inspect the missing outcome evidence; apply separately established corrections within current authority.",
249
297
  "uncertainty": "The cited artifact does not yet establish the denominator.",
250
298
  "evidenceRefs": ["<inspected-evidence-path>"]
251
299
  }
@@ -263,6 +311,35 @@ it does not close or alter the underlying product work. Changed dispositions
263
311
  retain earlier testimony; exact replay is a no-op. A detector clearing is
264
312
  recorded separately from an agent declaring the problem resolved.
265
313
 
314
+ An optional `correction` keeps the causal judgment, proposed or taken action,
315
+ and later behavioral effect distinct. It does not require a complete `progress`
316
+ census. For example, a retained-case assessment can record:
317
+
318
+ ```json
319
+ {
320
+ "applicability": "The retired emergency restriction no longer applies; publication still needs its separate decision.",
321
+ "causalJudgment": "The retained trace attributes persistence of the restriction to a disproved premise.",
322
+ "action": {"state": "taken", "summary": "The authorized restriction was retired in the retained case.", "evidenceRefs": ["evidence/correction-action.md"]},
323
+ "effect": {"state": "unobserved", "summary": "No later natural opportunity has been observed.", "evidenceRefs": []}
324
+ }
325
+ ```
326
+
327
+ Put this object beside `verdict`, `causalStart`, `steering`, `uncertainty` and
328
+ `evidenceRefs` in the existing disposition. Action states are `proposed` or
329
+ `taken`; effect states are `unobserved` or `observed`. Every referenced artifact
330
+ must be available locally; `taken` and `observed` each require evidence. These
331
+ checks establish availability, not causal truth. The receipt retains evidence
332
+ hashes and `assessment` identifies the actual queue actor, time and transition.
333
+ `behavioralEffect` is the latest owner's reported effect, defaulting to
334
+ `unobserved` for legacy dispositions. It is not an independent certification.
335
+ A later owner submission preserves previous testimony. Record an observed
336
+ effect only from a real later opportunity, with its next decision, useful work,
337
+ recurrence and interruption burden; a scripted replay proves mechanics only.
338
+ Closing a row, changing a prompt or clearing a numerical signal never supplies
339
+ that evidence automatically. No opportunity means unobserved, with the release
340
+ claim left to its decision owner. This guidance neither re-enables diagnosis nor
341
+ assigns corrective work.
342
+
266
343
  ## Human delivery
267
344
 
268
345
  An assigned agent may explicitly request human escalation:
@@ -73,6 +73,29 @@ ownership receipt. A later seat start with no project-world input preserves it;
73
73
  an explicit install whose `install.skills` is empty clears it. This keeps
74
74
  "project not supplied" distinct from "project deliberately selects no skills."
75
75
 
76
+ ## TUI project selection
77
+
78
+ Open **PROJECTS** (or enter `projects`) to choose an ID and root from the
79
+ configured workspace catalog. `project <id>` selects an exact catalog entry;
80
+ `mission <directory>` then opens that project's execution view. The historical
81
+ `scopes` machine section ID remains valid. Project selection and its canonical
82
+ root travel through mission, slice, source-file and Back navigation. Changing a
83
+ catalog root requires selecting it again. Missing or malformed sources remain
84
+ unavailable; another project's matching work ID is never a fallback.
85
+
86
+ `source` opens the current project, mission or slice's actual source through the
87
+ existing file-reader allowlist. Catalog membership does not grant file-read or
88
+ execution permission. These views only read; they do not select a lifecycle
89
+ operation or activate a mission. Execution and slice queue membership require
90
+ an exact `project:<id>` tag; lifecycle instances use their authored project
91
+ identity. Unscoped historical queue rows and global review artifacts without
92
+ project binding are excluded from project-specific claims.
93
+
94
+ The read API adds `GET /api/scopes/projects` and optional `project` and
95
+ `projectRoot` parameters to scopes, execution and slice-detail reads. Slice
96
+ detail also requires the selected mission directory. Existing reads without a
97
+ project parameter keep their legacy contract.
98
+
76
99
  ## UI Mapping
77
100
 
78
101
  - `workspace.root` maps to the Project workspace.
@@ -0,0 +1,95 @@
1
+ # Scoped operating posture
2
+
3
+ Human-led work is quiet by default for process-only diagnosis. Delegated work can
4
+ receive oversight during planning as well as implementation. This preference does
5
+ not grant execution authority or change permissions, work phase, workflow reminders,
6
+ context/continuity health, or health policy.
7
+
8
+ ## Inspect and choose
9
+
10
+ Use the existing `rig mode` surface. Give an exact rig or authored work scope:
11
+
12
+ ```sh
13
+ rig mode effective --rig my-rig --json
14
+ rig mode effective --project my-project --mission release-1 --json
15
+ rig mode effective --qitem my-packet --json
16
+ rig mode set delegated --scope mission --qualifier my-project/release-1 --evidence "Operator delegated this outcome"
17
+ # The proposal above exits 2 without writing. Apply the deliberate choice:
18
+ rig mode set delegated --scope mission --qualifier my-project/release-1 --evidence "Operator delegated this outcome" --confirm
19
+ rig mode set human-led --scope mission --qualifier my-project/release-1 --evidence "Return to interactive planning" --confirm
20
+ rig mode unset mission my-project/release-1
21
+ ```
22
+
23
+ Unsetting reveals the next applicable explicit choice, or the visible human-led
24
+ product default. A new, resolved rig with no binding reports `human-led`,
25
+ `source: product-default`, and `binding: null`. Missing scope identity, conflicting
26
+ linkage, unavailable storage or malformed authored context reports `unknown` with
27
+ a reason. Calling `effective` without a scope does not select a rig implicitly.
28
+ The existing operator bearer requirement still applies. `set` requires `--confirm`;
29
+ `unset` is an explicit deletion command and applies immediately.
30
+
31
+ ## One scope and phase contract
32
+
33
+ `GET /api/rig-mode/effective` accepts `rig`, `project`, `mission`, `workstream`, and
34
+ `qitem`. Its additive `operatingPosture` object is also attached to health records
35
+ and diagnosis findings. CLI explanation and TUI health detail display the same data.
36
+ Consumers of posture, phase, and health should use this object rather than invent
37
+ another preference store or infer delegation from workflow existence or activity.
38
+
39
+ | Field | Meaning |
40
+ | --- | --- |
41
+ | `posture` | `human-led`, `delegated`, or `unknown` |
42
+ | `source` | `product-default`, `binding`, or `unknown` |
43
+ | `context` | Resolved rig/project/mission/workstream/qitem IDs, source addresses, canonical authored paths and phase; null if scope resolution failed |
44
+ | `context.phase` | `{value, source}` from an explicit workflow packet step, otherwise slice stage/status, otherwise mission release phase/status; null fields when unavailable |
45
+ | `binding` | Winning binding ID, scope, timestamp and evidence citation; null for default/unknown |
46
+ | `reason` | Explanation of the result or the missing/conflicting fact |
47
+ | `grantsAuthority` | Always `false` |
48
+ | `members` | For queue-backed findings, each member's qitem, posture, source and binding ID; differing or unknown member postures yield unknown aggregate posture |
49
+
50
+ The existing SQLite mode-binding table remains the only preference store. Matching
51
+ posture bindings resolve in this order: qitem, workstream, mission, project, rig,
52
+ global host. The qualifiers are respectively a qitem ID, `project/mission/slice-id`,
53
+ `project/mission`, project ID, canonical rig ID, and null. Rig names resolve to IDs.
54
+ The workstream is an existing authored slice, found by its directory or SPEC ID;
55
+ the returned identity uses its SPEC ID and project/mission qualification.
56
+
57
+ Project selection reads `workspace.yaml`'s declared `projects: [{id, root}]`
58
+ catalog, or the workspace's own `project.yaml` when no catalog exists. Multiple
59
+ projects require an explicit project selection. A sole project may be derived.
60
+ The project manifest validates identity and supplies `missions.root` (default
61
+ `missions`). Mission and slice identities come from those authored work nodes;
62
+ missing, duplicate or conflicting identities remain unknown. The selected work
63
+ must stay inside its canonical project root.
64
+
65
+ Qitem reads join explicit `project:`, `mission:`, `slice:`/`workstream:` tags,
66
+ destination rig, and the existing workflow packet binding. Workflow lifecycle
67
+ project/mission identity must agree with the tags and requested scope. The bound
68
+ packet's exact step is the phase source; phase names are not classified by guess.
69
+ An unlinked qitem does not silently inherit the default. Scope reads are observational.
70
+
71
+ Legacy ergonomic modes (`sleep`, `desk`, `mobile`, `away`, `focus`, `debug`) retain
72
+ their bindings and ten-field records. They do not imply either operating posture.
73
+ Only human-led/delegated bindings participate in posture precedence. The legacy
74
+ `effective` and `posture: known|unknown_posture` fields remain for compatibility;
75
+ `unknown_posture` there means no legacy mode binding and does not override the
76
+ new `operatingPosture.source: product-default` result. Setting another mode at the
77
+ same scope replaces that row; inspect effective posture after any mode change.
78
+
79
+ ## Diagnosis effects
80
+
81
+ Process-category findings remain visible under human-led or unknown posture, but
82
+ new diagnosis presentations, re-presentations and human notifications require
83
+ explicit delegated posture. Retained occurrences are not canceled or rewritten
84
+ when posture changes. Their current finding is refreshed for inspection and
85
+ notification; unavailable current findings cannot reuse old delegated posture.
86
+ Notification admission is rechecked after readiness I/O.
87
+
88
+ Delegation is necessary for process interruptions and is insufficient by itself:
89
+ enabled diagnosis policy, detector selection, source freshness, custody, cooldown,
90
+ recurrence limits and human delivery readiness still apply. Other health categories
91
+ and ordinary queue/workflow reminders retain their existing behavior. The automatic
92
+ ceremony source reads declared catalog projects through the same resolver; unresolved
93
+ lineages remain visible with unknown scope instead of acquiring invented authority.
94
+
95
+ See [health diagnosis](health-diagnosis.md) for policy, evidence and disposition.
@@ -42,16 +42,44 @@ Check readiness: configured, enabled, active, ready, reason, and next action.
42
42
  `indeterminate` is not ready. Follow the reported next inspection; do not enable
43
43
  or reconfigure a connector merely to make the check pass.
44
44
 
45
- Write the decision, evidence, and continuation in a body file. The sole outbound
46
- human-message primitive is:
45
+ Author for the person reading on a phone: a short subject in `--summary`, then
46
+ one complete brief in `--body-file`. State why it matters, your recommendation
47
+ and material tradeoff, the bounded action if approved, and the choice requested.
48
+ For an update, state the user-visible outcome and “No action needed.” Aim for
49
+ roughly 100–150 words; this is guidance, not a semantic validator. Keep technical
50
+ continuation, exact candidate/revision and evidence on the owning agent row and
51
+ in the durable artifact behind `--evidence-ref`. A local path is not a phone link
52
+ and Markdown evidence files are not automatically attached.
53
+
54
+ For example, a synthetic brief could say:
55
+
56
+ > The repaired status view is ready. I recommend updating this instance; live
57
+ > status will briefly pause. Sessions will be preserved. Approve this instance
58
+ > update, or hold? Supporting test detail follows in this thread.
59
+
60
+ This example grants no authority. Choose `--human-intent decision` for a request
61
+ or `--human-intent update` for a quiet FYI. Omission retains legacy decision
62
+ behavior; words such as “FYI” and tags do not change intent.
63
+
64
+ The sole outbound human-message primitive is:
47
65
 
48
66
  ```bash
49
67
  rig queue create --destination <entityId>@external \
50
- --summary "<decision or update>" --body-file <packet-file> \
68
+ --human-intent decision --summary "<short subject>" --body-file <brief-file> \
51
69
  --evidence-ref <durable-evidence> --verify --json
52
70
  ```
53
71
 
54
- If an existing agent-owned row must wait, block it on the **new live qitem ID**
72
+ An optional `--human-detail-file <path>` supplies one coherent supplemental
73
+ reply in the same thread. Announce its purpose in the brief; the product also
74
+ marks that a detail reply follows. The primary must already contain the complete
75
+ scope, options and action. Do not split an agent dump blindly or move the essential
76
+ choice into overflow. Rendering checks every part and its accessibility fallback
77
+ before posting; an oversized request is refused with a field-specific correction,
78
+ never silently clipped. Shorten the brief or related detail as directed. Inspect
79
+ the failed row, then deliberately cancel/replace the authored request if its
80
+ content needs correction; a timeout alone is never a reason to replace it.
81
+
82
+ If an existing agent-owned row must wait for a **decision**, block it on the **new live qitem ID**
55
83
  (`rig queue block <work-id> --on <human-qitem-id> ...`), not on the human address.
56
84
  Completion of the human qitem resumes its dependants. Blocking on the human as
57
85
  well would issue another notification for the same decision.
@@ -66,7 +94,14 @@ or blindly resend because verification timed out.
66
94
  rig queue transitions <qitem-id>
67
95
  ```
68
96
 
69
- A correlated reply binds to that exact human and qitem and records the resolution
97
+ For `update`, confirmed complete delivery may close the delivery obligation.
98
+ It creates no approval obligation and cannot be used as a decision blocker.
99
+ Delivered updates remain queryable for Feed; a failure or ambiguous send stays
100
+ separate. A root message alone does not prove supplemental delivery. Retries
101
+ reconcile stable part identities and send only missing parts. An FYI reply is
102
+ not a human decision.
103
+
104
+ For a decision, a correlated reply binds to that exact human and qitem and records the resolution
70
105
  that resumes the owner. Check the recorded result before claiming the decision
71
106
  arrived; a delivery receipt alone is not acceptance.
72
107
 
@@ -1,9 +1,9 @@
1
1
  // GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
2
2
  export const BUILD_INFO = {
3
- semver: "0.5.12",
4
- commit: "b6c8d8f0444bc721d0ba4062a7384d25601c1c6f",
3
+ semver: "0.5.14",
4
+ commit: "cc75efdd17fb967bde7cff6c5805791986af78d8",
5
5
  dirty: false,
6
- builtAt: "2026-09-09T12:31:47Z",
6
+ builtAt: "2026-09-14T22:11:49Z",
7
7
  };
8
8
  export function stampFields(info = BUILD_INFO) {
9
9
  if (!info.commit) return {};
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqT9C,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAypBjE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAyL9C,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAysBjE"}
@@ -10,11 +10,12 @@
10
10
  // $OPENRIG_HOME/context/<name>/ — host-symlink-free contract,
11
11
  // matches `rig specs add` shape (regular files only; no symlinks).
12
12
  import { Command } from "commander";
13
- import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
13
+ import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
14
14
  import { dirname } from "node:path";
15
- import { basename, extname, isAbsolute, join, resolve } from "node:path";
15
+ import { basename, join, resolve } from "node:path";
16
16
  import { parse as parseYaml } from "yaml";
17
- import { ATOM_TAXONOMIES, TAXONOMY_TEACHING } from "@openrig/daemon/context-pack-taxonomy";
17
+ import { assertSafeInstallRef, assertTreeHasNoSymlinks, assertDestinationNamespaceContained, validateContextPackManifestForInstall } from "../lib/context-install.js";
18
+ import { addGitContext, inspectGitContext, updateGitContext } from "../lib/context-git.js";
18
19
  import { ConfigStore } from "../config-store.js";
19
20
  import { DaemonClient } from "../client.js";
20
21
  import { enumArg } from "../cli-error.js";
@@ -41,129 +42,15 @@ function printWorkInstallSelectors(result, topologySkills) {
41
42
  console.log(`skills topology=${selectedIds(topologySkills, "(none)")}`);
42
43
  console.log(`skills project=${selectedIds(result.skills, "(none)")}`);
43
44
  }
44
- // Slice-03 Atom 2 — mirror the daemon's per-segment ref contract at the
45
- // local install boundary. This must run before creating the context store.
46
45
  const SAFE_REF_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
47
- // Slice-03 lineage repair (R2 HIGH-2): the install boundary mirrors the daemon
48
- // bounded, delimiter-free version token (ref-safety.SAFE_VERSION) so an unsafe
49
- // version is rejected BEFORE any local write — matching the per-segment ref
50
- // mirror above.
51
- const SAFE_INSTALL_VERSION = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$/;
52
- function assertSafeInstallRef(ref) {
53
- const safe = ref.length > 0 &&
54
- ref.split("/").every((segment) => segment.length > 0 && segment !== "." && segment !== ".." && SAFE_REF_SEGMENT.test(segment));
55
- if (!safe) {
56
- throw new Error(`unsafe install ref '${ref}' — a ref must be one or more '/'-separated segments, each matching ` +
57
- `[A-Za-z0-9][A-Za-z0-9._-]{0,63} (no '.'/'..', no absolute path, no empty segment, no ` +
58
- `whitespace or injection), so packs stay inside the context store root.`);
59
- }
60
- }
61
46
  function assertSafeTopologySegment(kind, value) {
62
47
  if (value === "." || value === ".." || !SAFE_REF_SEGMENT.test(value)) {
63
48
  throw new Error(`unsafe ${kind} segment '${value}' — topology addresses require one bounded path segment`);
64
49
  }
65
50
  }
66
- function assertTreeHasNoSymlinks(root) {
67
- const stack = [root];
68
- while (stack.length > 0) {
69
- const current = stack.pop();
70
- for (const entry of readdirSync(current, { withFileTypes: true })) {
71
- const absPath = join(current, entry.name);
72
- if (entry.isSymbolicLink()) {
73
- throw new Error(`Context pack directories must not contain symlinks: ${absPath}`);
74
- }
75
- if (entry.isDirectory())
76
- stack.push(absPath);
77
- }
78
- }
79
- }
80
- // Slice-03 lineage repair (R2 HIGH-1): a lexically-safe path-like install ref
81
- // can still escape the store if one of its parent namespace segments is a
82
- // symlink (or a non-directory). Walk every ANCESTOR segment under the store root
83
- // and reject before the copy — the FS-canonical containment the lexical ref
84
- // check alone cannot give, mirroring the daemon compose namespace walk
85
- // (context-pack-library-service.ts). A not-yet-created segment (ENOENT) is safe:
86
- // cpSync will materialize it as a real directory.
87
- function assertDestinationNamespaceContained(targetRoot, installName) {
88
- const segments = installName.split("/");
89
- let cursor = targetRoot;
90
- for (const segment of segments.slice(0, -1)) {
91
- cursor = join(cursor, segment);
92
- let stat;
93
- try {
94
- stat = lstatSync(cursor);
95
- }
96
- catch (err) {
97
- if (err.code === "ENOENT")
98
- break;
99
- throw err;
100
- }
101
- if (stat.isSymbolicLink() || !stat.isDirectory()) {
102
- throw new Error(`unsafe install ref '${installName}' — its namespace segment '${cursor}' is a symlink or non-directory, ` +
103
- `so the copy would escape the context store root. Remove it or install under a different --name.`);
104
- }
105
- }
106
- }
107
- // Kept in lockstep with the daemon parser's ALLOWED_FILE_SUFFIXES (manifest-parser.ts).
108
- // OPR.0.5.3.7 R2 added .sh/.ts (skill helper assets, served as text); the install
109
- // validator must accept what the daemon will serve.
110
- const ALLOWED_CONTEXT_PACK_SUFFIXES = new Set([".md", ".markdown", ".yaml", ".yml", ".txt", ".sh", ".ts"]);
111
- function validateContextPackManifestForInstall(manifestPath) {
112
- let parsed;
113
- try {
114
- parsed = parseYaml(readFileSync(manifestPath, "utf-8"));
115
- }
116
- catch (err) {
117
- throw new Error(`manifest at ${manifestPath} is not valid YAML: ${err.message}`);
118
- }
119
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
120
- throw new Error(`manifest at ${manifestPath} must be a YAML object at the root`);
121
- }
122
- const obj = parsed;
123
- if (typeof obj["name"] !== "string" || obj["name"].length === 0) {
124
- throw new Error(`manifest at ${manifestPath} is missing required field 'name' (string)`);
125
- }
126
- if (obj["version"] === undefined || obj["version"] === null) {
127
- throw new Error(`manifest at ${manifestPath} is missing required field 'version'`);
128
- }
129
- const versionStr = String(obj["version"]);
130
- if (!SAFE_INSTALL_VERSION.test(versionStr)) {
131
- throw new Error(`manifest at ${manifestPath} has an invalid version '${versionStr}' — a version must be a single bounded ` +
132
- `token [A-Za-z0-9][A-Za-z0-9._+-]{0,31} (no ':' or separator, no whitespace, ≤32 chars).`);
133
- }
134
- // OPR.0.5.6.10 — teach the classification refusal at ADD time, not first
135
- // daemon scan (desk ruling T2). Enum + teaching text imported from the
136
- // daemon's one definition site; never a second value list here.
137
- const taxonomy = obj["taxonomy"];
138
- if (taxonomy === undefined || taxonomy === null) {
139
- throw new Error(`manifest at ${manifestPath} is missing required field 'taxonomy' — every context pack declares what kind of context it is. ${TAXONOMY_TEACHING}`);
140
- }
141
- if (typeof taxonomy !== "string" || !ATOM_TAXONOMIES.includes(taxonomy)) {
142
- throw new Error(`manifest at ${manifestPath} has invalid taxonomy ${JSON.stringify(taxonomy)}. ${TAXONOMY_TEACHING}`);
143
- }
144
- const files = obj["files"];
145
- if (!Array.isArray(files)) {
146
- throw new Error(`manifest at ${manifestPath} must declare 'files: [...]'`);
147
- }
148
- for (let i = 0; i < files.length; i++) {
149
- const entry = files[i];
150
- if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
151
- throw new Error(`manifest at ${manifestPath} has malformed entry at files[${i}]`);
152
- }
153
- const file = entry;
154
- const relPath = file["path"];
155
- if (typeof relPath !== "string" || relPath.length === 0) {
156
- throw new Error(`manifest at ${manifestPath} files[${i}] missing 'path' (string)`);
157
- }
158
- if (relPath.includes("..") || isAbsolute(relPath) || relPath.startsWith("\\")) {
159
- throw new Error(`manifest at ${manifestPath} files[${i}].path '${relPath}' must be a relative path inside the pack (no '..' segments, no leading '/')`);
160
- }
161
- if (!ALLOWED_CONTEXT_PACK_SUFFIXES.has(extname(relPath))) {
162
- throw new Error(`manifest at ${manifestPath} files[${i}].path '${relPath}' has an unsupported suffix; allowed: ${Array.from(ALLOWED_CONTEXT_PACK_SUFFIXES).join(", ")}`);
163
- }
164
- if (typeof file["role"] !== "string" || file["role"].length === 0) {
165
- throw new Error(`manifest at ${manifestPath} files[${i}] missing 'role' (string)`);
166
- }
51
+ function assertLocalGitClient(client) {
52
+ if (!["127.0.0.1", "localhost", "[::1]"].includes(new URL(client.baseUrl).hostname)) {
53
+ throw new Error("Run Git source selection/inspection/update on the daemon host through its loopback URL; these commands use local Git and filesystem paths.");
167
54
  }
168
55
  }
169
56
  function isHttpUrl(source) {
@@ -842,9 +729,12 @@ Examples:
842
729
  }
843
730
  });
844
731
  cmd.command("add")
845
- .argument("<source>", "Local directory OR http(s):// URL of a context pack (manifest.yaml + files)")
846
- .description("Install a context pack from a local directory or a URL into the configured context library")
732
+ .argument("<source>", "Pack directory/manifest URL, or Git repository path/URL with --git")
733
+ .description("Install a pack; --git discovers a pack in a Git repository and retains its update relationship")
847
734
  .option("--name <name>", "Override the install name (defaults to the manifest name / source basename)")
735
+ .option("--git", "Clone a Git repository path/URL with existing Git credentials; select a pack snapshot")
736
+ .option("--checkout", "With --git, select an existing checkout instead of cloning; updates may merge in it")
737
+ .option("--pack <path>", "With --git, select a repository-relative pack; default discovers manifest.yaml or .openrig/context-packs")
848
738
  .option("--json", "JSON output")
849
739
  .action(async (source, opts) => {
850
740
  try {
@@ -852,7 +742,15 @@ Examples:
852
742
  // never a hardcoded ~/.openrig literal; the daemon resolves the same key.
853
743
  const targetRoot = new ConfigStore().resolve().context.root;
854
744
  let targetDir;
855
- if (isHttpUrl(source)) {
745
+ let gitSelection;
746
+ if ((opts.pack || opts.checkout) && !opts.git)
747
+ throw new Error("--pack and --checkout require --git.");
748
+ if (opts.git) {
749
+ const gitClient = await getClient();
750
+ assertLocalGitClient(gitClient);
751
+ ({ installedAt: targetDir, selected: gitSelection } = addGitContext(source, opts, targetRoot));
752
+ }
753
+ else if (isHttpUrl(source)) {
856
754
  // R4 — URL install: fetch → validate → atomic stage+rename (no partial pack).
857
755
  ({ targetDir } = await installPackFromUrl(source, opts.name, targetRoot));
858
756
  }
@@ -914,11 +812,16 @@ Examples:
914
812
  if (syncError) {
915
813
  throw new Error(`Installed at ${targetDir}, but daemon rejected the pack during sync: ${syncError.error}`);
916
814
  }
815
+ if (gitSelection && !syncRes.data.entries.some((entry) => resolve(entry.sourcePath) === resolve(targetDir))) {
816
+ throw new Error(`Git selection retained at ${targetDir}, but this daemon does not serve it. Check context.root and workspace ref precedence before using it.`);
817
+ }
917
818
  if (opts.json) {
918
- console.log(JSON.stringify({ installedAt: targetDir, count: syncRes.data.count }, null, 2));
819
+ console.log(JSON.stringify({ installedAt: targetDir, count: syncRes.data.count, ...(gitSelection ? { gitSource: gitSelection } : {}) }, null, 2));
919
820
  }
920
821
  else {
921
822
  console.log(`Installed at ${targetDir}. Library now has ${syncRes.data.count} context pack(s).`);
823
+ if (gitSelection)
824
+ console.log(`Git ${gitSelection.revision} from ${gitSelection.checkout}; inspect/update with rig context source.`);
922
825
  }
923
826
  }
924
827
  catch (err) {
@@ -926,6 +829,45 @@ Examples:
926
829
  process.exitCode = 1;
927
830
  }
928
831
  });
832
+ const source = cmd.command("source")
833
+ .description("Inspect Git checkout vs served context, or explicitly fetch/merge and select an update")
834
+ .addHelpText("after", "\nStart: rig context add <repository-path-or-URL> --git [--pack path]\nEdit/commit in the reported checkout with ordinary Git. Updates never push or reset.\nConflicts retain the old selection; resolve/commit or abort in the checkout before retrying.\nSelection does not prove agent consumption; use context get and check the actual consumer.\n");
835
+ for (const operation of ["inspect", "update"]) {
836
+ source.command(operation)
837
+ .argument("<ref>", "Selected Git-backed context pack ref")
838
+ .description(operation === "inspect"
839
+ ? "Read local revision, edits, conflicts and selection; no fetch or consumption claim"
840
+ : "Explicitly fetch/merge the upstream, then select the clean pack; refuse local selection edits")
841
+ .option("--json", "JSON output")
842
+ .action(async (ref, opts) => {
843
+ try {
844
+ const client = await getClient();
845
+ assertLocalGitClient(client);
846
+ const entry = await resolvePack(client, ref);
847
+ const localRoot = new ConfigStore().resolve().context.root;
848
+ if (resolve(entry.sourcePath) !== resolve(localRoot, entry.relativePath))
849
+ throw new Error("This pack is not in the locally configured context library. Run Git source commands on its owning instance.");
850
+ if (entry.sourceType === "builtin")
851
+ throw new Error("Builtin context is not a writable Git selection.");
852
+ const result = operation === "inspect" ? inspectGitContext(entry.sourcePath) : updateGitContext(entry.sourcePath);
853
+ if (operation === "update") {
854
+ const sync = await client.post("/api/context-packs/library/sync");
855
+ if (sync.status !== 200)
856
+ throw new Error(`Selection updated, but library sync failed (HTTP ${sync.status}); run rig context sync.`);
857
+ if (!sync.data.entries.some((candidate) => resolve(candidate.sourcePath) === resolve(entry.sourcePath)))
858
+ throw new Error(`Selection retained, but the daemon cannot serve it: ${sync.data.errors?.map((error) => error.error).join("; ") || "check context root and ref precedence"}`);
859
+ }
860
+ // Structured output keeps checkout/selected bytes/consumption distinct
861
+ // in both terminal and machine use, without a second status renderer.
862
+ console.log(JSON.stringify(result, null, 2));
863
+ }
864
+ catch (err) {
865
+ const message = err.message;
866
+ console.error(opts.json ? JSON.stringify({ error: message }) : message);
867
+ process.exitCode = 1;
868
+ }
869
+ });
870
+ }
929
871
  cmd.command("rm")
930
872
  .argument("<ref>", "Path-like ref of the context pack to remove (e.g. packs/compaction-restore)")
931
873
  .description("Remove a context pack from the library by its path-like ref")