@openrig/cli 0.3.1 → 0.3.2

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 (264) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
  2. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  3. package/daemon/dist/adapters/codex-runtime-adapter.js +2 -1
  4. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  5. package/daemon/dist/adapters/tmux.d.ts +36 -0
  6. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  7. package/daemon/dist/adapters/tmux.js +66 -0
  8. package/daemon/dist/adapters/tmux.js.map +1 -1
  9. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +5 -1
  10. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -1
  11. package/daemon/dist/db/migrations/037_mission_control_actions.js +5 -1
  12. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -1
  13. package/daemon/dist/db/migrations/041_rig_policy.d.ts +32 -0
  14. package/daemon/dist/db/migrations/041_rig_policy.d.ts.map +1 -0
  15. package/daemon/dist/db/migrations/041_rig_policy.js +47 -0
  16. package/daemon/dist/db/migrations/041_rig_policy.js.map +1 -0
  17. package/daemon/dist/domain/agent-images/resume-token-discovery.js +1 -1
  18. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
  19. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -1
  20. package/daemon/dist/domain/agent-images/snapshot-capturer.js +2 -1
  21. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -1
  22. package/daemon/dist/domain/agent-manifest.js +27 -0
  23. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  24. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  25. package/daemon/dist/domain/bootstrap-orchestrator.js +86 -6
  26. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  27. package/daemon/dist/domain/bundle-agent-images-router.d.ts +95 -0
  28. package/daemon/dist/domain/bundle-agent-images-router.d.ts.map +1 -0
  29. package/daemon/dist/domain/bundle-agent-images-router.js +140 -0
  30. package/daemon/dist/domain/bundle-agent-images-router.js.map +1 -0
  31. package/daemon/dist/domain/bundle-assembler.d.ts +18 -1
  32. package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -1
  33. package/daemon/dist/domain/bundle-assembler.js +11 -1
  34. package/daemon/dist/domain/bundle-assembler.js.map +1 -1
  35. package/daemon/dist/domain/bundle-audit.d.ts +89 -0
  36. package/daemon/dist/domain/bundle-audit.d.ts.map +1 -0
  37. package/daemon/dist/domain/bundle-audit.js +87 -0
  38. package/daemon/dist/domain/bundle-audit.js.map +1 -0
  39. package/daemon/dist/domain/bundle-conflict-detector.d.ts +57 -0
  40. package/daemon/dist/domain/bundle-conflict-detector.d.ts.map +1 -0
  41. package/daemon/dist/domain/bundle-conflict-detector.js +49 -0
  42. package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -0
  43. package/daemon/dist/domain/bundle-context-packs-router.d.ts +100 -0
  44. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -0
  45. package/daemon/dist/domain/bundle-context-packs-router.js +158 -0
  46. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -0
  47. package/daemon/dist/domain/bundle-plugins-router.d.ts +69 -0
  48. package/daemon/dist/domain/bundle-plugins-router.d.ts.map +1 -0
  49. package/daemon/dist/domain/bundle-plugins-router.js +87 -0
  50. package/daemon/dist/domain/bundle-plugins-router.js.map +1 -0
  51. package/daemon/dist/domain/bundle-skills-router.d.ts +62 -0
  52. package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -0
  53. package/daemon/dist/domain/bundle-skills-router.js +90 -0
  54. package/daemon/dist/domain/bundle-skills-router.js.map +1 -0
  55. package/daemon/dist/domain/bundle-types.d.ts +106 -0
  56. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  57. package/daemon/dist/domain/bundle-types.js +375 -0
  58. package/daemon/dist/domain/bundle-types.js.map +1 -1
  59. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts +94 -0
  60. package/daemon/dist/domain/bundle-workflow-specs-router.d.ts.map +1 -0
  61. package/daemon/dist/domain/bundle-workflow-specs-router.js +144 -0
  62. package/daemon/dist/domain/bundle-workflow-specs-router.js.map +1 -0
  63. package/daemon/dist/domain/context-monitor.d.ts +5 -1
  64. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  65. package/daemon/dist/domain/context-monitor.js +28 -15
  66. package/daemon/dist/domain/context-monitor.js.map +1 -1
  67. package/daemon/dist/domain/graph-projection.d.ts +6 -0
  68. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  69. package/daemon/dist/domain/graph-projection.js +6 -0
  70. package/daemon/dist/domain/graph-projection.js.map +1 -1
  71. package/daemon/dist/domain/native-resume-probe.js +7 -7
  72. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  73. package/daemon/dist/domain/node-inventory.d.ts +18 -0
  74. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  75. package/daemon/dist/domain/node-inventory.js +98 -0
  76. package/daemon/dist/domain/node-inventory.js.map +1 -1
  77. package/daemon/dist/domain/node-launcher.d.ts +12 -0
  78. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  79. package/daemon/dist/domain/node-launcher.js +25 -1
  80. package/daemon/dist/domain/node-launcher.js.map +1 -1
  81. package/daemon/dist/domain/pod-bundle-assembler.d.ts +16 -1
  82. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  83. package/daemon/dist/domain/pod-bundle-assembler.js +11 -1
  84. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  85. package/daemon/dist/domain/profile-resolver.d.ts +10 -0
  86. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  87. package/daemon/dist/domain/profile-resolver.js +4 -0
  88. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  89. package/daemon/dist/domain/ps-projection.d.ts +22 -0
  90. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  91. package/daemon/dist/domain/ps-projection.js +57 -0
  92. package/daemon/dist/domain/ps-projection.js.map +1 -1
  93. package/daemon/dist/domain/queue-repository.d.ts +37 -1
  94. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  95. package/daemon/dist/domain/queue-repository.js +99 -2
  96. package/daemon/dist/domain/queue-repository.js.map +1 -1
  97. package/daemon/dist/domain/restore-check-service.d.ts +4 -0
  98. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  99. package/daemon/dist/domain/restore-check-service.js +16 -7
  100. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  101. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts +48 -0
  102. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +1 -0
  103. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js +96 -0
  104. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +1 -0
  105. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts +46 -0
  106. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +1 -0
  107. package/daemon/dist/domain/rig-policy/rig-policy-store.js +171 -0
  108. package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +1 -0
  109. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts +145 -0
  110. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +1 -0
  111. package/daemon/dist/domain/rig-policy/rig-policy-types.js +52 -0
  112. package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +1 -0
  113. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts +58 -0
  114. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +1 -0
  115. package/daemon/dist/domain/rig-policy/rig-policy-validator.js +211 -0
  116. package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +1 -0
  117. package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -1
  118. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  119. package/daemon/dist/domain/rigspec-instantiator.js +109 -18
  120. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  121. package/daemon/dist/domain/seat-activity-service.d.ts +79 -0
  122. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -0
  123. package/daemon/dist/domain/seat-activity-service.js +123 -0
  124. package/daemon/dist/domain/seat-activity-service.js.map +1 -0
  125. package/daemon/dist/domain/slices/slice-indexer.d.ts +12 -0
  126. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  127. package/daemon/dist/domain/slices/slice-indexer.js +23 -0
  128. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  129. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  130. package/daemon/dist/domain/spec-library-service.js +19 -0
  131. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  132. package/daemon/dist/domain/types.d.ts +79 -3
  133. package/daemon/dist/domain/types.d.ts.map +1 -1
  134. package/daemon/dist/domain/types.js.map +1 -1
  135. package/daemon/dist/domain/workflow-spec-cache.d.ts +22 -0
  136. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  137. package/daemon/dist/domain/workflow-spec-cache.js +37 -0
  138. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  139. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +7 -0
  140. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  141. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +156 -3
  142. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  143. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +197 -0
  144. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -0
  145. package/daemon/dist/domain/workspace/workspace-doctor.js +448 -0
  146. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -0
  147. package/daemon/dist/index.d.ts.map +1 -1
  148. package/daemon/dist/index.js +11 -0
  149. package/daemon/dist/index.js.map +1 -1
  150. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  151. package/daemon/dist/routes/bundles.js +966 -7
  152. package/daemon/dist/routes/bundles.js.map +1 -1
  153. package/daemon/dist/routes/config.d.ts.map +1 -1
  154. package/daemon/dist/routes/config.js +19 -2
  155. package/daemon/dist/routes/config.js.map +1 -1
  156. package/daemon/dist/routes/info.d.ts +3 -0
  157. package/daemon/dist/routes/info.d.ts.map +1 -0
  158. package/daemon/dist/routes/info.js +20 -0
  159. package/daemon/dist/routes/info.js.map +1 -0
  160. package/daemon/dist/routes/queue.d.ts +18 -0
  161. package/daemon/dist/routes/queue.d.ts.map +1 -1
  162. package/daemon/dist/routes/queue.js +97 -5
  163. package/daemon/dist/routes/queue.js.map +1 -1
  164. package/daemon/dist/routes/rig-policy.d.ts +9 -0
  165. package/daemon/dist/routes/rig-policy.d.ts.map +1 -0
  166. package/daemon/dist/routes/rig-policy.js +174 -0
  167. package/daemon/dist/routes/rig-policy.js.map +1 -0
  168. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  169. package/daemon/dist/routes/rigs.js +10 -2
  170. package/daemon/dist/routes/rigs.js.map +1 -1
  171. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  172. package/daemon/dist/routes/sessions.js +26 -3
  173. package/daemon/dist/routes/sessions.js.map +1 -1
  174. package/daemon/dist/routes/up.d.ts +25 -0
  175. package/daemon/dist/routes/up.d.ts.map +1 -1
  176. package/daemon/dist/routes/up.js +70 -3
  177. package/daemon/dist/routes/up.js.map +1 -1
  178. package/daemon/dist/routes/workspace.d.ts.map +1 -1
  179. package/daemon/dist/routes/workspace.js +80 -1
  180. package/daemon/dist/routes/workspace.js.map +1 -1
  181. package/daemon/dist/server.d.ts +10 -0
  182. package/daemon/dist/server.d.ts.map +1 -1
  183. package/daemon/dist/server.js +11 -0
  184. package/daemon/dist/server.js.map +1 -1
  185. package/daemon/dist/startup.d.ts.map +1 -1
  186. package/daemon/dist/startup.js +45 -4
  187. package/daemon/dist/startup.js.map +1 -1
  188. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +28 -4
  189. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +285 -8
  190. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +2 -2
  191. package/daemon/specs/rigs/launch/conveyor/rig.yaml +1 -1
  192. package/dist/client.d.ts +3 -0
  193. package/dist/client.d.ts.map +1 -1
  194. package/dist/client.js +13 -1
  195. package/dist/client.js.map +1 -1
  196. package/dist/commands/bundle.d.ts.map +1 -1
  197. package/dist/commands/bundle.js +123 -2
  198. package/dist/commands/bundle.js.map +1 -1
  199. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  200. package/dist/commands/config-init-workspace.js +40 -5
  201. package/dist/commands/config-init-workspace.js.map +1 -1
  202. package/dist/commands/ps.d.ts.map +1 -1
  203. package/dist/commands/ps.js +51 -8
  204. package/dist/commands/ps.js.map +1 -1
  205. package/dist/commands/queue.d.ts +6 -0
  206. package/dist/commands/queue.d.ts.map +1 -1
  207. package/dist/commands/queue.js +103 -5
  208. package/dist/commands/queue.js.map +1 -1
  209. package/dist/commands/rig-policy.d.ts +48 -0
  210. package/dist/commands/rig-policy.d.ts.map +1 -0
  211. package/dist/commands/rig-policy.js +429 -0
  212. package/dist/commands/rig-policy.js.map +1 -0
  213. package/dist/commands/scope.d.ts +6 -0
  214. package/dist/commands/scope.d.ts.map +1 -0
  215. package/dist/commands/scope.js +659 -0
  216. package/dist/commands/scope.js.map +1 -0
  217. package/dist/commands/up.d.ts.map +1 -1
  218. package/dist/commands/up.js +47 -0
  219. package/dist/commands/up.js.map +1 -1
  220. package/dist/commands/workflow.d.ts +9 -0
  221. package/dist/commands/workflow.d.ts.map +1 -1
  222. package/dist/commands/workflow.js +139 -1
  223. package/dist/commands/workflow.js.map +1 -1
  224. package/dist/commands/workspace.d.ts +20 -0
  225. package/dist/commands/workspace.d.ts.map +1 -1
  226. package/dist/commands/workspace.js +138 -7
  227. package/dist/commands/workspace.js.map +1 -1
  228. package/dist/daemon-lifecycle.d.ts +25 -1
  229. package/dist/daemon-lifecycle.d.ts.map +1 -1
  230. package/dist/daemon-lifecycle.js +33 -2
  231. package/dist/daemon-lifecycle.js.map +1 -1
  232. package/dist/index.d.ts +2 -0
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +5 -0
  235. package/dist/index.js.map +1 -1
  236. package/dist/lib/scope/dot-id.d.ts +43 -0
  237. package/dist/lib/scope/dot-id.d.ts.map +1 -0
  238. package/dist/lib/scope/dot-id.js +165 -0
  239. package/dist/lib/scope/dot-id.js.map +1 -0
  240. package/dist/lib/scope/scope-fs.d.ts +79 -0
  241. package/dist/lib/scope/scope-fs.d.ts.map +1 -0
  242. package/dist/lib/scope/scope-fs.js +468 -0
  243. package/dist/lib/scope/scope-fs.js.map +1 -0
  244. package/dist/lib/scope/templates.d.ts +38 -0
  245. package/dist/lib/scope/templates.d.ts.map +1 -0
  246. package/dist/lib/scope/templates.js +109 -0
  247. package/dist/lib/scope/templates.js.map +1 -0
  248. package/dist/lib/scope/types.d.ts +61 -0
  249. package/dist/lib/scope/types.d.ts.map +1 -0
  250. package/dist/lib/scope/types.js +38 -0
  251. package/dist/lib/scope/types.js.map +1 -0
  252. package/dist/lib/scope-templates/backlog-deprecation.md +26 -0
  253. package/dist/lib/scope-templates/backlog-tech-debt.md +22 -0
  254. package/dist/lib/scope-templates/bug-fix.md +30 -0
  255. package/dist/lib/scope-templates/mission-notes.md +97 -0
  256. package/dist/lib/scope-templates/mission-placeholder.md +20 -0
  257. package/dist/lib/scope-templates/mission-release.md +25 -0
  258. package/dist/lib/scope-templates/placeholder.md +30 -0
  259. package/dist/lib/scope-templates/release-feature.md +26 -0
  260. package/dist/lib/scope-templates/research.md +22 -0
  261. package/package.json +2 -2
  262. package/ui/dist/assets/index-GjTxfi9S.js +547 -0
  263. package/ui/dist/index.html +1 -1
  264. package/ui/dist/assets/index-Rl3ZBrUg.js +0 -547
@@ -0,0 +1,448 @@
1
+ // Slice-21 FR-5 — workspace doctor readiness checks for `rig workspace doctor`.
2
+ //
3
+ // 7 checks (this file ships pure check helpers; daemon route + CLI
4
+ // subcommand wiring land in follow-on commits):
5
+ // 1. Workspace root reachable (env > file > default precedence)
6
+ // 2. Missions folder present
7
+ // 3. File allowlist sane (named-pair ConfigStore key, NOT a file)
8
+ // 4. Daemon points at this workspace
9
+ // 5. Daemon reload needed
10
+ // 6. Optional slice docs (warn-only)
11
+ // 7. MISSION_NOTES presence
12
+ //
13
+ // Per-check return shape is `{check, status: "ok"|"warn"|"fail",
14
+ // message, fixHint?, evidence?}` per FR-5 IMPL-PRD §76-78. The shape
15
+ // diverges intentionally from the install-health `rig doctor`'s
16
+ // DoctorCheck shape (pass|warn|fail|skipped, reason/fix) — different
17
+ // concerns warrant different schemas (workspace-readiness vs install-
18
+ // health); the divergence is orch-marshal-accepted per cont.43-followup.
19
+ import * as fs from "node:fs";
20
+ import * as path from "node:path";
21
+ import { decodeAllowlist } from "../files/path-safety.js";
22
+ const ENV_FIX_HINT = "unset OPENRIG_WORKSPACE_ROOT or set it to an existing directory; run `rig config init-workspace` to scaffold a fresh one";
23
+ const FILE_FIX_HINT = "update workspace.root in config.json to an existing directory; run `rig config init-workspace` to scaffold a fresh one";
24
+ const DEFAULT_FIX_HINT = "run `rig config init-workspace` to scaffold the default workspace at the configured root";
25
+ function fixHintForSource(source) {
26
+ switch (source) {
27
+ case "env":
28
+ return ENV_FIX_HINT;
29
+ case "file":
30
+ return FILE_FIX_HINT;
31
+ case "default":
32
+ return DEFAULT_FIX_HINT;
33
+ }
34
+ }
35
+ /**
36
+ * Check #1 — workspace root reachable.
37
+ *
38
+ * Verifies the resolved workspace root exists as a directory. The
39
+ * `source` (env / file / default) is propagated into the fix-hint so
40
+ * the operator gets the right remediation channel.
41
+ */
42
+ export function checkWorkspaceRootReachable(opts) {
43
+ const { workspaceRoot, source } = opts;
44
+ let stat;
45
+ try {
46
+ stat = fs.statSync(workspaceRoot);
47
+ }
48
+ catch (err) {
49
+ const code = err.code;
50
+ return {
51
+ check: "workspace_root_reachable",
52
+ status: "fail",
53
+ message: code === "ENOENT"
54
+ ? `workspace root '${workspaceRoot}' does not exist (resolved from ${source})`
55
+ : `workspace root '${workspaceRoot}' is not reachable: ${err.message}`,
56
+ fixHint: fixHintForSource(source),
57
+ evidence: { workspaceRoot, source, errorCode: code ?? "unknown" },
58
+ };
59
+ }
60
+ if (!stat.isDirectory()) {
61
+ return {
62
+ check: "workspace_root_reachable",
63
+ status: "fail",
64
+ message: `workspace root '${workspaceRoot}' exists but is not a directory (resolved from ${source})`,
65
+ fixHint: fixHintForSource(source),
66
+ evidence: { workspaceRoot, source, kind: "not_a_directory" },
67
+ };
68
+ }
69
+ return {
70
+ check: "workspace_root_reachable",
71
+ status: "ok",
72
+ message: `workspace root '${workspaceRoot}' is a reachable directory`,
73
+ evidence: { workspaceRoot, source },
74
+ };
75
+ }
76
+ /**
77
+ * Check #2 — missions folder present.
78
+ *
79
+ * Verifies the resolved missions folder (per ConfigStore `workspace.
80
+ * slicesRoot` — defaults to `<workspaceRoot>/missions`) exists as a
81
+ * directory. Fail on absence or wrong-shape; this is the load-bearing
82
+ * folder for Project UI projection.
83
+ */
84
+ export function checkMissionsFolder(opts) {
85
+ const { workspaceRoot, slicesRoot } = opts;
86
+ let stat;
87
+ try {
88
+ stat = fs.statSync(slicesRoot);
89
+ }
90
+ catch (err) {
91
+ const code = err.code;
92
+ return {
93
+ check: "missions_folder_present",
94
+ status: "fail",
95
+ message: code === "ENOENT"
96
+ ? `missions folder '${slicesRoot}' does not exist`
97
+ : `missions folder '${slicesRoot}' is not reachable: ${err.message}`,
98
+ fixHint: slicesRoot === path.join(workspaceRoot, "missions")
99
+ ? "run `rig config init-workspace` to scaffold the default missions/ folder"
100
+ : "create the configured missions folder or unset workspace.slices_root to use the default `<workspaceRoot>/missions/`",
101
+ evidence: { slicesRoot, workspaceRoot, errorCode: code ?? "unknown" },
102
+ };
103
+ }
104
+ if (!stat.isDirectory()) {
105
+ return {
106
+ check: "missions_folder_present",
107
+ status: "fail",
108
+ message: `missions folder '${slicesRoot}' exists but is not a directory`,
109
+ fixHint: "remove or rename the conflicting file and run `rig config init-workspace` to scaffold the missions folder",
110
+ evidence: { slicesRoot, workspaceRoot, kind: "not_a_directory" },
111
+ };
112
+ }
113
+ return {
114
+ check: "missions_folder_present",
115
+ status: "ok",
116
+ message: `missions folder '${slicesRoot}' is present`,
117
+ evidence: { slicesRoot, workspaceRoot },
118
+ };
119
+ }
120
+ /**
121
+ * Check #3 — file allowlist sane.
122
+ *
123
+ * IMPL-PRD §43 references `<workspace-root>/.openrig/file-allowlist`
124
+ * as a file — the shipped surface (ConfigStore `files.allowlist` key,
125
+ * env OPENRIG_FILES_ALLOWLIST, default `workspace:${workspaceRoot}`)
126
+ * is a CONFIGSTORE STRING KEY holding comma-separated `name:/abs/path`
127
+ * pairs. There is no per-workspace file. Check #3 verifies the
128
+ * resolved value decodes to at least one USABLE entry (canonical,
129
+ * absolute) covering the workspaceRoot — the same usable-root
130
+ * semantics the shipped file API at /api/files/* enforces via
131
+ * `decodeAllowlist` in domain/files/path-safety.ts:60-80 (silently
132
+ * drops non-absolute paths at line 71).
133
+ *
134
+ * Decoding via the canonical decoder (not a local re-implementation)
135
+ * guarantees the doctor's verdict matches the actual file-API
136
+ * behavior — `workspace:.` or `workspace:relative-root` evaluates
137
+ * to zero usable entries here, mirroring the file API's silent skip.
138
+ */
139
+ export function checkFileAllowlist(opts) {
140
+ const { workspaceRoot, allowlistValue, allowlistSource } = opts;
141
+ const entries = opts.parsedEntries
142
+ ?? decodeAllowlist(allowlistValue).map((r) => ({ name: r.name, path: r.canonicalPath }));
143
+ if (entries.length === 0) {
144
+ return {
145
+ check: "file_allowlist_sane",
146
+ status: "fail",
147
+ message: `files.allowlist resolved to no usable entries (raw='${allowlistValue}', source=${allowlistSource}); non-absolute or malformed pairs are silently dropped to match the shipped file API`,
148
+ fixHint: "set OPENRIG_FILES_ALLOWLIST or run `rig config set files.allowlist workspace:<absoluteWorkspaceRoot>` so the file surface has a readable root (absolute paths only)",
149
+ evidence: { allowlistValue, allowlistSource, entryCount: 0 },
150
+ };
151
+ }
152
+ const covers = entries.some((e) => allowlistPathCoversRoot(e.path, workspaceRoot));
153
+ if (!covers) {
154
+ return {
155
+ check: "file_allowlist_sane",
156
+ status: "warn",
157
+ message: `files.allowlist has ${entries.length} usable entr${entries.length === 1 ? "y" : "ies"} but none cover workspace root '${workspaceRoot}'`,
158
+ fixHint: "add a `workspace:<absoluteWorkspaceRoot>` entry to files.allowlist (or set OPENRIG_FILES_ALLOWLIST) so workspace files are read-allowed",
159
+ evidence: {
160
+ allowlistValue,
161
+ allowlistSource,
162
+ entryCount: entries.length,
163
+ workspaceRoot,
164
+ entries,
165
+ },
166
+ };
167
+ }
168
+ return {
169
+ check: "file_allowlist_sane",
170
+ status: "ok",
171
+ message: `files.allowlist has ${entries.length} usable entr${entries.length === 1 ? "y" : "ies"} covering workspace root`,
172
+ evidence: { allowlistValue, allowlistSource, entryCount: entries.length, entries },
173
+ };
174
+ }
175
+ function allowlistPathCoversRoot(allowlistPath, workspaceRoot) {
176
+ // Canonical entry paths from decodeAllowlist are already absolute
177
+ // + realpath-resolved. workspaceRoot we resolve + try-to-realpath
178
+ // here so callers can pass an un-canonical workspace path and
179
+ // coverage still matches when the entry was realpath'd through a
180
+ // symlink (e.g. macOS `/var/folders/...` → `/private/var/...`).
181
+ const normEntry = allowlistPath;
182
+ let normRoot;
183
+ try {
184
+ normRoot = fs.realpathSync(workspaceRoot);
185
+ }
186
+ catch {
187
+ normRoot = path.resolve(workspaceRoot);
188
+ }
189
+ if (normEntry === normRoot)
190
+ return true;
191
+ const rel = path.relative(normEntry, normRoot);
192
+ return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
193
+ }
194
+ /**
195
+ * Check #4 — daemon points at this workspace.
196
+ *
197
+ * Reports divergence between the workspace.root the daemon resolved at
198
+ * start-time vs the workspace.root the doctor caller expects. The
199
+ * common cause is the daemon being started in a shell with a different
200
+ * OPENRIG_WORKSPACE_ROOT than the operator's current shell.
201
+ */
202
+ export function checkDaemonWorkspace(opts) {
203
+ const { daemonResolvedRoot, expectedRoot } = opts;
204
+ const normDaemon = path.resolve(daemonResolvedRoot);
205
+ const normExpected = path.resolve(expectedRoot);
206
+ if (normDaemon === normExpected) {
207
+ return {
208
+ check: "daemon_points_at_this_workspace",
209
+ status: "ok",
210
+ message: `daemon and caller agree on workspace root '${normDaemon}'`,
211
+ evidence: { daemonResolvedRoot: normDaemon, expectedRoot: normExpected },
212
+ };
213
+ }
214
+ return {
215
+ check: "daemon_points_at_this_workspace",
216
+ status: "fail",
217
+ message: `daemon resolved workspace root '${normDaemon}' but caller expected '${normExpected}'`,
218
+ fixHint: "restart the daemon (`rig daemon restart`) in a shell where OPENRIG_WORKSPACE_ROOT matches the expected workspace, or unset OPENRIG_WORKSPACE_ROOT to fall through to config + default",
219
+ evidence: { daemonResolvedRoot: normDaemon, expectedRoot: normExpected },
220
+ };
221
+ }
222
+ /**
223
+ * Check #5 — daemon reload needed.
224
+ *
225
+ * Compares config-file mtime to the daemon's start-time. A newer
226
+ * mtime means the operator edited config (via CLI / UI) after the
227
+ * daemon started, and the daemon hasn't picked the change up yet.
228
+ * Missing config file is not a fail — fresh installs without an
229
+ * operator-written config use defaults entirely and never need a
230
+ * reload.
231
+ */
232
+ export function checkDaemonReload(opts) {
233
+ const { configFilePath, daemonStartTime } = opts;
234
+ let stat;
235
+ try {
236
+ stat = fs.statSync(configFilePath);
237
+ }
238
+ catch (err) {
239
+ const code = err.code;
240
+ if (code === "ENOENT") {
241
+ return {
242
+ check: "daemon_reload_needed",
243
+ status: "ok",
244
+ message: `no config file at '${configFilePath}'; daemon is running on defaults only`,
245
+ evidence: { configFilePath, configFileExists: false },
246
+ };
247
+ }
248
+ return {
249
+ check: "daemon_reload_needed",
250
+ status: "warn",
251
+ message: `cannot stat config file '${configFilePath}': ${err.message}`,
252
+ fixHint: "verify file permissions on the config file path so the daemon can detect freshness",
253
+ evidence: { configFilePath, errorCode: code ?? "unknown" },
254
+ };
255
+ }
256
+ const mtimeMs = stat.mtime.getTime();
257
+ const startMs = daemonStartTime.getTime();
258
+ if (mtimeMs > startMs) {
259
+ return {
260
+ check: "daemon_reload_needed",
261
+ status: "warn",
262
+ message: `config file mtime ${stat.mtime.toISOString()} is newer than daemon start ${daemonStartTime.toISOString()}`,
263
+ fixHint: "run `rig daemon restart` to pick up the latest config",
264
+ evidence: {
265
+ configFilePath,
266
+ configMtime: stat.mtime.toISOString(),
267
+ daemonStartTime: daemonStartTime.toISOString(),
268
+ staleMs: mtimeMs - startMs,
269
+ },
270
+ };
271
+ }
272
+ return {
273
+ check: "daemon_reload_needed",
274
+ status: "ok",
275
+ message: `config file mtime ${stat.mtime.toISOString()} is older than daemon start ${daemonStartTime.toISOString()}`,
276
+ evidence: {
277
+ configFilePath,
278
+ configMtime: stat.mtime.toISOString(),
279
+ daemonStartTime: daemonStartTime.toISOString(),
280
+ },
281
+ };
282
+ }
283
+ const SLICE_DOC_FILES = ["README.md", "IMPLEMENTATION-PRD.md", "IMPL-PRD.md"];
284
+ /**
285
+ * Check #6 — optional slice docs.
286
+ *
287
+ * Walks each mission's slices subdirectory and reports slices that
288
+ * have NEITHER a README.md, IMPLEMENTATION-PRD.md, nor IMPL-PRD.md.
289
+ * Warn-only (empty slices are sometimes intentional staging per
290
+ * IMPL-PRD §57-59). The walk is bounded to one mission + one slice
291
+ * level; we don't recurse into slice subdirs.
292
+ */
293
+ export function checkOptionalSliceDocs(opts) {
294
+ const { missionsRoot } = opts;
295
+ let missions;
296
+ try {
297
+ missions = fs.readdirSync(missionsRoot, { withFileTypes: true })
298
+ .filter((d) => d.isDirectory())
299
+ .map((d) => d.name);
300
+ }
301
+ catch (err) {
302
+ const code = err.code;
303
+ return {
304
+ check: "optional_slice_docs",
305
+ status: "warn",
306
+ message: code === "ENOENT"
307
+ ? `missions root '${missionsRoot}' does not exist; no slice docs to check`
308
+ : `cannot read missions root '${missionsRoot}': ${err.message}`,
309
+ evidence: { missionsRoot, errorCode: code ?? "unknown" },
310
+ };
311
+ }
312
+ const bareSlices = [];
313
+ for (const mission of missions) {
314
+ const slicesDir = path.join(missionsRoot, mission, "slices");
315
+ let slices;
316
+ try {
317
+ slices = fs.readdirSync(slicesDir, { withFileTypes: true })
318
+ .filter((d) => d.isDirectory())
319
+ .map((d) => d.name);
320
+ }
321
+ catch {
322
+ continue; // no slices subdir is fine — mission may not be slice-organized
323
+ }
324
+ for (const slice of slices) {
325
+ const slicePath = path.join(slicesDir, slice);
326
+ const hasDoc = SLICE_DOC_FILES.some((f) => fs.existsSync(path.join(slicePath, f)));
327
+ if (!hasDoc) {
328
+ bareSlices.push({ mission, slice, path: slicePath });
329
+ }
330
+ }
331
+ }
332
+ if (bareSlices.length === 0) {
333
+ return {
334
+ check: "optional_slice_docs",
335
+ status: "ok",
336
+ message: `every slice under '${missionsRoot}' has a README, IMPLEMENTATION-PRD, or IMPL-PRD`,
337
+ evidence: { missionsRoot, bareSlices: [] },
338
+ };
339
+ }
340
+ return {
341
+ check: "optional_slice_docs",
342
+ status: "warn",
343
+ message: `${bareSlices.length} slice${bareSlices.length === 1 ? " has" : "s have"} no README / IMPLEMENTATION-PRD / IMPL-PRD`,
344
+ fixHint: "author a README.md, IMPLEMENTATION-PRD.md, or IMPL-PRD.md in each bare slice directory; warn-only because empty slices are sometimes intentional staging",
345
+ evidence: { missionsRoot, bareSlices },
346
+ };
347
+ }
348
+ /**
349
+ * Check #7 — MISSION_NOTES presence.
350
+ *
351
+ * Verifies each mission directory has a `MISSION_NOTES.md` (per the
352
+ * FR-3 convention that just merged at LOCAL main e154a5ce). Warn-
353
+ * only because legacy missions predate the convention; the
354
+ * operator can run `rig scope mission create` (which now auto-
355
+ * scaffolds the file per FR-3) for new missions.
356
+ */
357
+ export function checkMissionNotesPresence(opts) {
358
+ const { missionsRoot } = opts;
359
+ let missions;
360
+ try {
361
+ missions = fs.readdirSync(missionsRoot, { withFileTypes: true })
362
+ .filter((d) => d.isDirectory())
363
+ .map((d) => d.name);
364
+ }
365
+ catch (err) {
366
+ const code = err.code;
367
+ return {
368
+ check: "mission_notes_presence",
369
+ status: "warn",
370
+ message: code === "ENOENT"
371
+ ? `missions root '${missionsRoot}' does not exist; no MISSION_NOTES to check`
372
+ : `cannot read missions root '${missionsRoot}': ${err.message}`,
373
+ evidence: { missionsRoot, errorCode: code ?? "unknown" },
374
+ };
375
+ }
376
+ const missing = [];
377
+ for (const mission of missions) {
378
+ const missionDir = path.join(missionsRoot, mission);
379
+ const notesPath = path.join(missionDir, "MISSION_NOTES.md");
380
+ if (!fs.existsSync(notesPath)) {
381
+ missing.push({ mission, path: missionDir });
382
+ }
383
+ }
384
+ if (missing.length === 0) {
385
+ return {
386
+ check: "mission_notes_presence",
387
+ status: "ok",
388
+ message: `every mission under '${missionsRoot}' has MISSION_NOTES.md`,
389
+ evidence: { missionsRoot, missing: [] },
390
+ };
391
+ }
392
+ return {
393
+ check: "mission_notes_presence",
394
+ status: "warn",
395
+ message: `${missing.length} mission${missing.length === 1 ? " has" : "s have"} no MISSION_NOTES.md`,
396
+ fixHint: "scaffold via `rig scope mission create <id>` (FR-3 auto-scaffold) for new missions, or copy from `<substrate>/openrig-work/conventions/mission-notes/TEMPLATE.md` for existing ones",
397
+ evidence: { missionsRoot, missing },
398
+ };
399
+ }
400
+ /**
401
+ * Orchestrator — runs all 7 checks in fixed order and returns a
402
+ * structured DoctorReport with aggregate counts. Pure function;
403
+ * filesystem effects are bounded to the individual check helpers
404
+ * (statSync / readdirSync / existsSync). Used by the daemon route
405
+ * POST /api/workspace/doctor (FR-5c) and by the CLI's --json
406
+ * formatter (FR-5d).
407
+ */
408
+ export function runWorkspaceDoctor(input) {
409
+ const checks = [
410
+ checkWorkspaceRootReachable({
411
+ workspaceRoot: input.workspaceRoot,
412
+ source: input.workspaceRootSource,
413
+ }),
414
+ checkMissionsFolder({
415
+ workspaceRoot: input.workspaceRoot,
416
+ slicesRoot: input.slicesRoot,
417
+ }),
418
+ checkFileAllowlist({
419
+ workspaceRoot: input.workspaceRoot,
420
+ allowlistValue: input.allowlistValue,
421
+ allowlistSource: input.allowlistSource,
422
+ }),
423
+ checkDaemonWorkspace({
424
+ daemonResolvedRoot: input.daemonResolvedWorkspaceRoot,
425
+ expectedRoot: input.workspaceRoot,
426
+ }),
427
+ checkDaemonReload({
428
+ configFilePath: input.configFilePath,
429
+ daemonStartTime: input.daemonStartTime,
430
+ }),
431
+ checkOptionalSliceDocs({
432
+ missionsRoot: input.slicesRoot,
433
+ }),
434
+ checkMissionNotesPresence({
435
+ missionsRoot: input.slicesRoot,
436
+ }),
437
+ ];
438
+ const summary = { ok: 0, warn: 0, fail: 0 };
439
+ for (const c of checks)
440
+ summary[c.status]++;
441
+ return {
442
+ workspaceRoot: input.workspaceRoot,
443
+ checks,
444
+ summary,
445
+ daemonResolvedAt: new Date().toISOString(),
446
+ };
447
+ }
448
+ //# sourceMappingURL=workspace-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-doctor.js","sourceRoot":"","sources":["../../../src/domain/workspace/workspace-doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ3D,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,uBAgF9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ3D,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,uBA0F9C"}
@@ -44,6 +44,11 @@ export async function startServer(port) {
44
44
  // tree post-bind so the HTTP surface is ready before the first
45
45
  // tick (matches contextMonitor pattern).
46
46
  deps.watchdogScheduler?.start();
47
+ // Slice 15 — start the seat-activity scheduler (1Hz default).
48
+ // Polls every running tmux-bound seat's silence_flag so
49
+ // PsProjectionService + node-inventory enrichment serve
50
+ // fresh data on each request.
51
+ deps.seatActivityService?.start(deps.rigRepo.db);
47
52
  }
48
53
  });
49
54
  servers.push(srv);
@@ -59,6 +64,12 @@ export async function startServer(port) {
59
64
  catch (err) {
60
65
  console.error("[watchdog] shutdown error", err);
61
66
  }
67
+ try {
68
+ deps.seatActivityService?.stop();
69
+ }
70
+ catch (err) {
71
+ console.error("[seat-activity] shutdown error", err);
72
+ }
62
73
  await Promise.all(servers.map((srv) => new Promise((resolve) => {
63
74
  try {
64
75
  srv.close(() => resolve());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bundles.d.ts","sourceRoot":"","sources":["../../src/routes/bundles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAiB5B,eAAO,MAAM,YAAY,4EAAa,CAAC"}
1
+ {"version":3,"file":"bundles.d.ts","sourceRoot":"","sources":["../../src/routes/bundles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA+N5B,eAAO,MAAM,YAAY,4EAAa,CAAC"}