agent-bober 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +25 -0
  4. package/README.md +169 -6
  5. package/dist/chat/answerer.d.ts +17 -0
  6. package/dist/chat/answerer.d.ts.map +1 -0
  7. package/dist/chat/answerer.js +52 -0
  8. package/dist/chat/answerer.js.map +1 -0
  9. package/dist/chat/approval-cursor.d.ts +25 -0
  10. package/dist/chat/approval-cursor.d.ts.map +1 -0
  11. package/dist/chat/approval-cursor.js +61 -0
  12. package/dist/chat/approval-cursor.js.map +1 -0
  13. package/dist/chat/approval-reader.d.ts +11 -0
  14. package/dist/chat/approval-reader.d.ts.map +1 -0
  15. package/dist/chat/approval-reader.js +20 -0
  16. package/dist/chat/approval-reader.js.map +1 -0
  17. package/dist/chat/careful-sidecar.d.ts +15 -0
  18. package/dist/chat/careful-sidecar.d.ts.map +1 -0
  19. package/dist/chat/careful-sidecar.js +39 -0
  20. package/dist/chat/careful-sidecar.js.map +1 -0
  21. package/dist/chat/chat-session.d.ts +129 -0
  22. package/dist/chat/chat-session.d.ts.map +1 -0
  23. package/dist/chat/chat-session.js +470 -0
  24. package/dist/chat/chat-session.js.map +1 -0
  25. package/dist/chat/completion-tailer.d.ts +27 -0
  26. package/dist/chat/completion-tailer.d.ts.map +1 -0
  27. package/dist/chat/completion-tailer.js +187 -0
  28. package/dist/chat/completion-tailer.js.map +1 -0
  29. package/dist/chat/conversation-store.d.ts +22 -0
  30. package/dist/chat/conversation-store.d.ts.map +1 -0
  31. package/dist/chat/conversation-store.js +66 -0
  32. package/dist/chat/conversation-store.js.map +1 -0
  33. package/dist/chat/cursor-store.d.ts +23 -0
  34. package/dist/chat/cursor-store.d.ts.map +1 -0
  35. package/dist/chat/cursor-store.js +42 -0
  36. package/dist/chat/cursor-store.js.map +1 -0
  37. package/dist/chat/pid-sidecar.d.ts +22 -0
  38. package/dist/chat/pid-sidecar.d.ts.map +1 -0
  39. package/dist/chat/pid-sidecar.js +42 -0
  40. package/dist/chat/pid-sidecar.js.map +1 -0
  41. package/dist/chat/roster-reader.d.ts +16 -0
  42. package/dist/chat/roster-reader.d.ts.map +1 -0
  43. package/dist/chat/roster-reader.js +39 -0
  44. package/dist/chat/roster-reader.js.map +1 -0
  45. package/dist/chat/run-spawner.d.ts +71 -0
  46. package/dist/chat/run-spawner.d.ts.map +1 -0
  47. package/dist/chat/run-spawner.js +121 -0
  48. package/dist/chat/run-spawner.js.map +1 -0
  49. package/dist/chat/slash-commands.d.ts +36 -0
  50. package/dist/chat/slash-commands.d.ts.map +1 -0
  51. package/dist/chat/slash-commands.js +133 -0
  52. package/dist/chat/slash-commands.js.map +1 -0
  53. package/dist/chat/steer-cleanup.d.ts +12 -0
  54. package/dist/chat/steer-cleanup.d.ts.map +1 -0
  55. package/dist/chat/steer-cleanup.js +60 -0
  56. package/dist/chat/steer-cleanup.js.map +1 -0
  57. package/dist/chat/turn-classifier.d.ts +43 -0
  58. package/dist/chat/turn-classifier.d.ts.map +1 -0
  59. package/dist/chat/turn-classifier.js +150 -0
  60. package/dist/chat/turn-classifier.js.map +1 -0
  61. package/dist/cli/commands/blackboard.d.ts +33 -0
  62. package/dist/cli/commands/blackboard.d.ts.map +1 -0
  63. package/dist/cli/commands/blackboard.js +114 -0
  64. package/dist/cli/commands/blackboard.js.map +1 -0
  65. package/dist/cli/commands/chat.d.ts +13 -0
  66. package/dist/cli/commands/chat.d.ts.map +1 -0
  67. package/dist/cli/commands/chat.js +43 -0
  68. package/dist/cli/commands/chat.js.map +1 -0
  69. package/dist/cli/commands/evolve.d.ts +18 -0
  70. package/dist/cli/commands/evolve.d.ts.map +1 -0
  71. package/dist/cli/commands/evolve.js +72 -0
  72. package/dist/cli/commands/evolve.js.map +1 -0
  73. package/dist/cli/commands/facts.d.ts +15 -0
  74. package/dist/cli/commands/facts.d.ts.map +1 -0
  75. package/dist/cli/commands/facts.js +213 -0
  76. package/dist/cli/commands/facts.js.map +1 -0
  77. package/dist/cli/commands/init.d.ts +9 -0
  78. package/dist/cli/commands/init.d.ts.map +1 -1
  79. package/dist/cli/commands/init.js +1 -1
  80. package/dist/cli/commands/init.js.map +1 -1
  81. package/dist/cli/commands/medical.d.ts +24 -0
  82. package/dist/cli/commands/medical.d.ts.map +1 -0
  83. package/dist/cli/commands/medical.js +132 -0
  84. package/dist/cli/commands/medical.js.map +1 -0
  85. package/dist/cli/commands/memory.d.ts +2 -1
  86. package/dist/cli/commands/memory.d.ts.map +1 -1
  87. package/dist/cli/commands/memory.js +94 -7
  88. package/dist/cli/commands/memory.js.map +1 -1
  89. package/dist/cli/commands/plan.d.ts.map +1 -1
  90. package/dist/cli/commands/plan.js +29 -3
  91. package/dist/cli/commands/plan.js.map +1 -1
  92. package/dist/cli/commands/replay.d.ts +17 -0
  93. package/dist/cli/commands/replay.d.ts.map +1 -0
  94. package/dist/cli/commands/replay.js +261 -0
  95. package/dist/cli/commands/replay.js.map +1 -0
  96. package/dist/cli/commands/run.d.ts +9 -0
  97. package/dist/cli/commands/run.d.ts.map +1 -1
  98. package/dist/cli/commands/run.js +27 -1
  99. package/dist/cli/commands/run.js.map +1 -1
  100. package/dist/cli/commands/sprint.d.ts.map +1 -1
  101. package/dist/cli/commands/sprint.js +17 -3
  102. package/dist/cli/commands/sprint.js.map +1 -1
  103. package/dist/cli/commands/update.d.ts +18 -0
  104. package/dist/cli/commands/update.d.ts.map +1 -0
  105. package/dist/cli/commands/update.js +81 -0
  106. package/dist/cli/commands/update.js.map +1 -0
  107. package/dist/cli/index.js +15 -0
  108. package/dist/cli/index.js.map +1 -1
  109. package/dist/config/defaults.d.ts.map +1 -1
  110. package/dist/config/defaults.js +8 -0
  111. package/dist/config/defaults.js.map +1 -1
  112. package/dist/config/role-providers.d.ts +1 -1
  113. package/dist/config/role-providers.d.ts.map +1 -1
  114. package/dist/config/role-providers.js +6 -1
  115. package/dist/config/role-providers.js.map +1 -1
  116. package/dist/config/schema.d.ts +467 -222
  117. package/dist/config/schema.d.ts.map +1 -1
  118. package/dist/config/schema.js +25 -0
  119. package/dist/config/schema.js.map +1 -1
  120. package/dist/contracts/eval-result.d.ts +84 -84
  121. package/dist/contracts/spec.d.ts +28 -28
  122. package/dist/contracts/sprint-contract.d.ts +4 -4
  123. package/dist/fleet/critic-deep.d.ts +53 -0
  124. package/dist/fleet/critic-deep.d.ts.map +1 -0
  125. package/dist/fleet/critic-deep.js +199 -0
  126. package/dist/fleet/critic-deep.js.map +1 -0
  127. package/dist/fleet/decomposer-deep-constants.d.ts +4 -0
  128. package/dist/fleet/decomposer-deep-constants.d.ts.map +1 -0
  129. package/dist/fleet/decomposer-deep-constants.js +14 -0
  130. package/dist/fleet/decomposer-deep-constants.js.map +1 -0
  131. package/dist/fleet/decomposer-deep-types.d.ts +8 -0
  132. package/dist/fleet/decomposer-deep-types.d.ts.map +1 -0
  133. package/dist/fleet/decomposer-deep-types.js +9 -0
  134. package/dist/fleet/decomposer-deep-types.js.map +1 -0
  135. package/dist/fleet/decomposer-deep.d.ts +51 -0
  136. package/dist/fleet/decomposer-deep.d.ts.map +1 -0
  137. package/dist/fleet/decomposer-deep.js +261 -0
  138. package/dist/fleet/decomposer-deep.js.map +1 -0
  139. package/dist/fleet/decomposer.d.ts +22 -0
  140. package/dist/fleet/decomposer.d.ts.map +1 -0
  141. package/dist/fleet/decomposer.js +144 -0
  142. package/dist/fleet/decomposer.js.map +1 -0
  143. package/dist/fleet/index.d.ts +93 -0
  144. package/dist/fleet/index.d.ts.map +1 -1
  145. package/dist/fleet/index.js +230 -2
  146. package/dist/fleet/index.js.map +1 -1
  147. package/dist/fleet/manifest-write.d.ts +30 -0
  148. package/dist/fleet/manifest-write.d.ts.map +1 -0
  149. package/dist/fleet/manifest-write.js +90 -0
  150. package/dist/fleet/manifest-write.js.map +1 -0
  151. package/dist/fleet/manifest.d.ts +6 -6
  152. package/dist/fleet/shared-blackboard.d.ts +51 -0
  153. package/dist/fleet/shared-blackboard.d.ts.map +1 -0
  154. package/dist/fleet/shared-blackboard.js +79 -0
  155. package/dist/fleet/shared-blackboard.js.map +1 -0
  156. package/dist/fleet/synthesis.d.ts +16 -0
  157. package/dist/fleet/synthesis.d.ts.map +1 -0
  158. package/dist/fleet/synthesis.js +22 -0
  159. package/dist/fleet/synthesis.js.map +1 -0
  160. package/dist/fleet/tier-policy.d.ts +18 -0
  161. package/dist/fleet/tier-policy.d.ts.map +1 -0
  162. package/dist/fleet/tier-policy.js +53 -0
  163. package/dist/fleet/tier-policy.js.map +1 -0
  164. package/dist/fleet/tool-role-guard.d.ts +24 -0
  165. package/dist/fleet/tool-role-guard.d.ts.map +1 -0
  166. package/dist/fleet/tool-role-guard.js +55 -0
  167. package/dist/fleet/tool-role-guard.js.map +1 -0
  168. package/dist/incident/resolution-verify.d.ts +4 -4
  169. package/dist/incident/types.d.ts +8 -8
  170. package/dist/mcp/run-manager.d.ts +9 -1
  171. package/dist/mcp/run-manager.d.ts.map +1 -1
  172. package/dist/mcp/run-manager.js.map +1 -1
  173. package/dist/medical/adapters/apple-health.d.ts +32 -0
  174. package/dist/medical/adapters/apple-health.d.ts.map +1 -0
  175. package/dist/medical/adapters/apple-health.js +100 -0
  176. package/dist/medical/adapters/apple-health.js.map +1 -0
  177. package/dist/medical/audit.d.ts +31 -0
  178. package/dist/medical/audit.d.ts.map +1 -0
  179. package/dist/medical/audit.js +56 -0
  180. package/dist/medical/audit.js.map +1 -0
  181. package/dist/medical/consent.d.ts +37 -0
  182. package/dist/medical/consent.d.ts.map +1 -0
  183. package/dist/medical/consent.js +73 -0
  184. package/dist/medical/consent.js.map +1 -0
  185. package/dist/medical/disclaimer.d.ts +11 -0
  186. package/dist/medical/disclaimer.d.ts.map +1 -0
  187. package/dist/medical/disclaimer.js +21 -0
  188. package/dist/medical/disclaimer.js.map +1 -0
  189. package/dist/medical/egress.d.ts +30 -0
  190. package/dist/medical/egress.d.ts.map +1 -0
  191. package/dist/medical/egress.js +50 -0
  192. package/dist/medical/egress.js.map +1 -0
  193. package/dist/medical/engine.d.ts +73 -0
  194. package/dist/medical/engine.d.ts.map +1 -0
  195. package/dist/medical/engine.js +333 -0
  196. package/dist/medical/engine.js.map +1 -0
  197. package/dist/medical/guardrails.d.ts +47 -0
  198. package/dist/medical/guardrails.d.ts.map +1 -0
  199. package/dist/medical/guardrails.js +92 -0
  200. package/dist/medical/guardrails.js.map +1 -0
  201. package/dist/medical/health-store.d.ts +80 -0
  202. package/dist/medical/health-store.d.ts.map +1 -0
  203. package/dist/medical/health-store.js +204 -0
  204. package/dist/medical/health-store.js.map +1 -0
  205. package/dist/medical/inference.d.ts +22 -0
  206. package/dist/medical/inference.d.ts.map +1 -0
  207. package/dist/medical/inference.js +39 -0
  208. package/dist/medical/inference.js.map +1 -0
  209. package/dist/medical/ingestion.d.ts +33 -0
  210. package/dist/medical/ingestion.d.ts.map +1 -0
  211. package/dist/medical/ingestion.js +52 -0
  212. package/dist/medical/ingestion.js.map +1 -0
  213. package/dist/medical/numerics.d.ts +66 -0
  214. package/dist/medical/numerics.d.ts.map +1 -0
  215. package/dist/medical/numerics.js +216 -0
  216. package/dist/medical/numerics.js.map +1 -0
  217. package/dist/medical/red-flag.d.ts +42 -0
  218. package/dist/medical/red-flag.d.ts.map +1 -0
  219. package/dist/medical/red-flag.js +161 -0
  220. package/dist/medical/red-flag.js.map +1 -0
  221. package/dist/medical/refusal.d.ts +46 -0
  222. package/dist/medical/refusal.d.ts.map +1 -0
  223. package/dist/medical/refusal.js +131 -0
  224. package/dist/medical/refusal.js.map +1 -0
  225. package/dist/medical/retrieval/grounding-critic.d.ts +34 -0
  226. package/dist/medical/retrieval/grounding-critic.d.ts.map +1 -0
  227. package/dist/medical/retrieval/grounding-critic.js +153 -0
  228. package/dist/medical/retrieval/grounding-critic.js.map +1 -0
  229. package/dist/medical/retrieval/literature.d.ts +78 -0
  230. package/dist/medical/retrieval/literature.d.ts.map +1 -0
  231. package/dist/medical/retrieval/literature.js +292 -0
  232. package/dist/medical/retrieval/literature.js.map +1 -0
  233. package/dist/medical/retrieval/medline-source.d.ts +72 -0
  234. package/dist/medical/retrieval/medline-source.d.ts.map +1 -0
  235. package/dist/medical/retrieval/medline-source.js +120 -0
  236. package/dist/medical/retrieval/medline-source.js.map +1 -0
  237. package/dist/medical/team.d.ts +15 -0
  238. package/dist/medical/team.d.ts.map +1 -0
  239. package/dist/medical/team.js +44 -0
  240. package/dist/medical/team.js.map +1 -0
  241. package/dist/medical/types.d.ts +175 -0
  242. package/dist/medical/types.d.ts.map +1 -0
  243. package/dist/medical/types.js +8 -0
  244. package/dist/medical/types.js.map +1 -0
  245. package/dist/medical/whoop/whoop-client.d.ts +114 -0
  246. package/dist/medical/whoop/whoop-client.d.ts.map +1 -0
  247. package/dist/medical/whoop/whoop-client.js +226 -0
  248. package/dist/medical/whoop/whoop-client.js.map +1 -0
  249. package/dist/medical/whoop/whoop-sync.d.ts +25 -0
  250. package/dist/medical/whoop/whoop-sync.d.ts.map +1 -0
  251. package/dist/medical/whoop/whoop-sync.js +97 -0
  252. package/dist/medical/whoop/whoop-sync.js.map +1 -0
  253. package/dist/medical/whoop/whoop-token.d.ts +44 -0
  254. package/dist/medical/whoop/whoop-token.d.ts.map +1 -0
  255. package/dist/medical/whoop/whoop-token.js +66 -0
  256. package/dist/medical/whoop/whoop-token.js.map +1 -0
  257. package/dist/orchestrator/context-handoff.d.ts +60 -60
  258. package/dist/orchestrator/contract-materialization.d.ts +33 -0
  259. package/dist/orchestrator/contract-materialization.d.ts.map +1 -0
  260. package/dist/orchestrator/contract-materialization.js +113 -0
  261. package/dist/orchestrator/contract-materialization.js.map +1 -0
  262. package/dist/orchestrator/memory/distill.d.ts +4 -1
  263. package/dist/orchestrator/memory/distill.d.ts.map +1 -1
  264. package/dist/orchestrator/memory/distill.js +41 -1
  265. package/dist/orchestrator/memory/distill.js.map +1 -1
  266. package/dist/orchestrator/memory/fact-detector.d.ts +61 -0
  267. package/dist/orchestrator/memory/fact-detector.d.ts.map +1 -0
  268. package/dist/orchestrator/memory/fact-detector.js +153 -0
  269. package/dist/orchestrator/memory/fact-detector.js.map +1 -0
  270. package/dist/orchestrator/memory/fact-judge.d.ts +19 -0
  271. package/dist/orchestrator/memory/fact-judge.d.ts.map +1 -0
  272. package/dist/orchestrator/memory/fact-judge.js +121 -0
  273. package/dist/orchestrator/memory/fact-judge.js.map +1 -0
  274. package/dist/orchestrator/memory/fact-retrieve.d.ts +52 -0
  275. package/dist/orchestrator/memory/fact-retrieve.d.ts.map +1 -0
  276. package/dist/orchestrator/memory/fact-retrieve.js +117 -0
  277. package/dist/orchestrator/memory/fact-retrieve.js.map +1 -0
  278. package/dist/orchestrator/memory/hygiene.d.ts +66 -0
  279. package/dist/orchestrator/memory/hygiene.d.ts.map +1 -0
  280. package/dist/orchestrator/memory/hygiene.js +153 -0
  281. package/dist/orchestrator/memory/hygiene.js.map +1 -0
  282. package/dist/orchestrator/memory/reconcile.d.ts +47 -0
  283. package/dist/orchestrator/memory/reconcile.d.ts.map +1 -0
  284. package/dist/orchestrator/memory/reconcile.js +116 -0
  285. package/dist/orchestrator/memory/reconcile.js.map +1 -0
  286. package/dist/orchestrator/memory/retrieve.d.ts +5 -3
  287. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -1
  288. package/dist/orchestrator/memory/retrieve.js +9 -6
  289. package/dist/orchestrator/memory/retrieve.js.map +1 -1
  290. package/dist/orchestrator/pipeline.d.ts +19 -3
  291. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  292. package/dist/orchestrator/pipeline.js +63 -52
  293. package/dist/orchestrator/pipeline.js.map +1 -1
  294. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  295. package/dist/orchestrator/planner-agent.js +16 -1
  296. package/dist/orchestrator/planner-agent.js.map +1 -1
  297. package/dist/orchestrator/selfimprove/eval-guards.d.ts +51 -0
  298. package/dist/orchestrator/selfimprove/eval-guards.d.ts.map +1 -0
  299. package/dist/orchestrator/selfimprove/eval-guards.js +120 -0
  300. package/dist/orchestrator/selfimprove/eval-guards.js.map +1 -0
  301. package/dist/orchestrator/selfimprove/gepa.d.ts +74 -0
  302. package/dist/orchestrator/selfimprove/gepa.d.ts.map +1 -0
  303. package/dist/orchestrator/selfimprove/gepa.js +227 -0
  304. package/dist/orchestrator/selfimprove/gepa.js.map +1 -0
  305. package/dist/orchestrator/selfimprove/replay-harness.d.ts +65 -0
  306. package/dist/orchestrator/selfimprove/replay-harness.d.ts.map +1 -0
  307. package/dist/orchestrator/selfimprove/replay-harness.js +134 -0
  308. package/dist/orchestrator/selfimprove/replay-harness.js.map +1 -0
  309. package/dist/orchestrator/selfimprove/replay-store.d.ts +45 -0
  310. package/dist/orchestrator/selfimprove/replay-store.d.ts.map +1 -0
  311. package/dist/orchestrator/selfimprove/replay-store.js +119 -0
  312. package/dist/orchestrator/selfimprove/replay-store.js.map +1 -0
  313. package/dist/orchestrator/selfimprove/replay-types.d.ts +32 -0
  314. package/dist/orchestrator/selfimprove/replay-types.d.ts.map +1 -0
  315. package/dist/orchestrator/selfimprove/replay-types.js +15 -0
  316. package/dist/orchestrator/selfimprove/replay-types.js.map +1 -0
  317. package/dist/orchestrator/workflow/engine.d.ts +3 -1
  318. package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
  319. package/dist/orchestrator/workflow/selector.d.ts +18 -0
  320. package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
  321. package/dist/orchestrator/workflow/selector.js +41 -0
  322. package/dist/orchestrator/workflow/selector.js.map +1 -1
  323. package/dist/orchestrator/workflow/ts-engine.d.ts +3 -1
  324. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -1
  325. package/dist/orchestrator/workflow/ts-engine.js +2 -2
  326. package/dist/orchestrator/workflow/ts-engine.js.map +1 -1
  327. package/dist/orchestrator/workflow/workflow-engine.d.ts +3 -1
  328. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -1
  329. package/dist/orchestrator/workflow/workflow-engine.js +3 -3
  330. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -1
  331. package/dist/state/facts.d.ts +110 -0
  332. package/dist/state/facts.d.ts.map +1 -0
  333. package/dist/state/facts.js +208 -0
  334. package/dist/state/facts.js.map +1 -0
  335. package/dist/state/guidance.d.ts +37 -0
  336. package/dist/state/guidance.d.ts.map +1 -0
  337. package/dist/state/guidance.js +144 -0
  338. package/dist/state/guidance.js.map +1 -0
  339. package/dist/state/history.d.ts +2 -2
  340. package/dist/state/index.d.ts +1 -1
  341. package/dist/state/index.d.ts.map +1 -1
  342. package/dist/state/index.js +1 -1
  343. package/dist/state/index.js.map +1 -1
  344. package/dist/state/memory.d.ts +43 -11
  345. package/dist/state/memory.d.ts.map +1 -1
  346. package/dist/state/memory.js +93 -15
  347. package/dist/state/memory.js.map +1 -1
  348. package/dist/state/pause.d.ts +47 -0
  349. package/dist/state/pause.d.ts.map +1 -0
  350. package/dist/state/pause.js +146 -0
  351. package/dist/state/pause.js.map +1 -0
  352. package/dist/state/sprint-state.d.ts +8 -0
  353. package/dist/state/sprint-state.d.ts.map +1 -1
  354. package/dist/state/sprint-state.js +32 -1
  355. package/dist/state/sprint-state.js.map +1 -1
  356. package/dist/teams/registry.d.ts +16 -0
  357. package/dist/teams/registry.d.ts.map +1 -0
  358. package/dist/teams/registry.js +53 -0
  359. package/dist/teams/registry.js.map +1 -0
  360. package/dist/teams/types.d.ts +25 -0
  361. package/dist/teams/types.d.ts.map +1 -0
  362. package/dist/teams/types.js +2 -0
  363. package/dist/teams/types.js.map +1 -0
  364. package/package.json +3 -1
@@ -0,0 +1,114 @@
1
+ /**
2
+ * `agent-bober blackboard publish|read` — inter-agent fleet blackboard CLI (Phase B).
3
+ *
4
+ * Subcommands:
5
+ * publish <value> [--round N] — Publish a finding to the shared fleet blackboard.
6
+ * read [--all] — Print findings from the shared fleet blackboard.
7
+ *
8
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1 and
9
+ * return on all errors. Pattern mirrors src/cli/commands/facts.ts.
10
+ *
11
+ * The db path is read from config.fleet.blackboardDbPath ONLY — never re-derived
12
+ * from cwd. This is the child-visible seam: the scaffolder wrote the absolute path
13
+ * into each child's bober.config.json so children in different cwds can share one db.
14
+ */
15
+ import chalk from "chalk";
16
+ import { findProjectRoot } from "../../utils/fs.js";
17
+ import { loadConfig } from "../../config/loader.js";
18
+ import { SharedBlackboard } from "../../fleet/shared-blackboard.js";
19
+ // ── Root resolver ─────────────────────────────────────────────────────
20
+ async function resolveRoot() {
21
+ const root = await findProjectRoot();
22
+ return root ?? process.cwd();
23
+ }
24
+ // ── runBlackboardPublish ──────────────────────────────────────────────
25
+ /**
26
+ * Core for `blackboard publish` — DI'd projectRoot + nowIso for tests.
27
+ * Reads the absolute db path from config.fleet only (never re-derives from cwd).
28
+ * Clean exit-1 (no throw) when no fleet section is present.
29
+ */
30
+ export async function runBlackboardPublish(projectRoot, value, opts, nowIso = new Date().toISOString()) {
31
+ let bb;
32
+ try {
33
+ const config = await loadConfig(projectRoot);
34
+ if (!config.fleet) {
35
+ process.stderr.write(chalk.red("No fleet section in bober.config.json — this child is not part of a fleet blackboard run.\n"));
36
+ process.exitCode = 1;
37
+ return;
38
+ }
39
+ bb = await SharedBlackboard.open({
40
+ dbPath: config.fleet.blackboardDbPath,
41
+ namespace: config.fleet.blackboardNamespace,
42
+ maxRounds: config.fleet.maxRounds,
43
+ });
44
+ bb.publish({
45
+ childFolder: config.fleet.blackboardSubject,
46
+ round: opts.round !== undefined ? Number(opts.round) : 1,
47
+ payload: value,
48
+ }, nowIso);
49
+ process.stdout.write(chalk.green(`Published finding for ${config.fleet.blackboardSubject}\n`));
50
+ }
51
+ catch (err) {
52
+ process.stderr.write(chalk.red(`Failed to publish: ${err instanceof Error ? err.message : String(err)}\n`));
53
+ process.exitCode = 1;
54
+ }
55
+ finally {
56
+ bb?.close();
57
+ }
58
+ }
59
+ // ── runBlackboardRead ─────────────────────────────────────────────────
60
+ /**
61
+ * Core for `blackboard read [--all]` — DI'd projectRoot for tests.
62
+ * Reads the absolute db path from config.fleet only (never re-derives from cwd).
63
+ * Clean exit-1 (no throw) when no fleet section is present.
64
+ */
65
+ export async function runBlackboardRead(projectRoot, opts) {
66
+ let bb;
67
+ try {
68
+ const config = await loadConfig(projectRoot);
69
+ if (!config.fleet) {
70
+ process.stderr.write(chalk.red("No fleet section in bober.config.json — this child is not part of a fleet blackboard run.\n"));
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+ bb = await SharedBlackboard.open({
75
+ dbPath: config.fleet.blackboardDbPath,
76
+ namespace: config.fleet.blackboardNamespace,
77
+ maxRounds: config.fleet.maxRounds,
78
+ });
79
+ const findings = opts.all
80
+ ? bb.readAll()
81
+ : bb.readSiblings(config.fleet.blackboardSubject);
82
+ for (const f of findings) {
83
+ process.stdout.write(`[${f.subject}] ${f.value}\n`);
84
+ }
85
+ }
86
+ catch (err) {
87
+ process.stderr.write(chalk.red(`Failed to read: ${err instanceof Error ? err.message : String(err)}\n`));
88
+ process.exitCode = 1;
89
+ }
90
+ finally {
91
+ bb?.close();
92
+ }
93
+ }
94
+ // ── registerBlackboardCommand ─────────────────────────────────────────
95
+ export function registerBlackboardCommand(program) {
96
+ const bbCmd = program
97
+ .command("blackboard")
98
+ .description("Inter-agent fleet blackboard (publish/read findings)");
99
+ bbCmd
100
+ .command("publish <value>")
101
+ .description("Publish a finding to the shared fleet blackboard")
102
+ .option("--round <n>", "Round number (default 1)")
103
+ .action(async (value, opts) => {
104
+ await runBlackboardPublish(await resolveRoot(), value, opts);
105
+ });
106
+ bbCmd
107
+ .command("read")
108
+ .description("Read findings from the shared fleet blackboard")
109
+ .option("--all", "Show all findings (default: siblings only)")
110
+ .action(async (opts) => {
111
+ await runBlackboardRead(await resolveRoot(), opts);
112
+ });
113
+ }
114
+ //# sourceMappingURL=blackboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackboard.js","sourceRoot":"","sources":["../../../src/cli/commands/blackboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `bober chat [team]` — Start an interactive bober chat session.
3
+ *
4
+ * The optional [team] positional argument selects the active team, routing
5
+ * memory distill and spawned runs to that team's namespace. Omitting it uses
6
+ * the built-in 'programming' team (default .bober/memory/ path).
7
+ *
8
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1
9
+ * and return on all errors. Pattern mirrors src/cli/commands/memory.ts.
10
+ */
11
+ import type { Command } from "commander";
12
+ export declare function registerChatCommand(program: Command): void;
13
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC1D"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `bober chat [team]` — Start an interactive bober chat session.
3
+ *
4
+ * The optional [team] positional argument selects the active team, routing
5
+ * memory distill and spawned runs to that team's namespace. Omitting it uses
6
+ * the built-in 'programming' team (default .bober/memory/ path).
7
+ *
8
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1
9
+ * and return on all errors. Pattern mirrors src/cli/commands/memory.ts.
10
+ */
11
+ import { findProjectRoot } from "../../utils/fs.js";
12
+ import { loadConfig } from "../../config/loader.js";
13
+ import { resolveRoleProviders } from "../../config/role-providers.js";
14
+ import { createClient } from "../../providers/factory.js";
15
+ import { ChatSession } from "../../chat/chat-session.js";
16
+ import { loadTeam } from "../../teams/registry.js";
17
+ // ── registerChatCommand ───────────────────────────────────────────────
18
+ export function registerChatCommand(program) {
19
+ program
20
+ .command("chat [team]")
21
+ .description("Start an interactive bober chat session")
22
+ .action(async (team) => {
23
+ const projectRoot = (await findProjectRoot()) ?? process.cwd();
24
+ try {
25
+ const config = await loadConfig(projectRoot);
26
+ const activeTeam = loadTeam(config, team);
27
+ const providers = resolveRoleProviders(config);
28
+ const client = createClient(providers.chat, config.chat?.endpoint ?? null, config.chat?.providerConfig, config.chat?.model, "chat");
29
+ const session = new ChatSession({
30
+ llm: client,
31
+ projectRoot,
32
+ sessionId: "default",
33
+ memoryNamespace: activeTeam.memoryNamespace || undefined,
34
+ });
35
+ await session.start();
36
+ }
37
+ catch (err) {
38
+ process.stderr.write(`bober chat failed: ${err instanceof Error ? err.message : String(err)}\n`);
39
+ process.exitCode = 1;
40
+ }
41
+ });
42
+ }
43
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,yEAAyE;AAEzE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,EAAE;QAC9B,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,YAAY,CACzB,SAAS,CAAC,IAAI,EACd,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,EAC7B,MAAM,CAAC,IAAI,EAAE,cAAc,EAC3B,MAAM,CAAC,IAAI,EAAE,KAAK,EAClB,MAAM,CACP,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;gBAC9B,GAAG,EAAE,MAAM;gBACX,WAAW;gBACX,SAAS,EAAE,SAAS;gBACpB,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,SAAS;aACzD,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC3E,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `bober evolve` — offline replay-gated prompt evolution.
3
+ *
4
+ * Reads the generator or evaluator agent prompt, proposes deterministic variants,
5
+ * scores each ONLY via the Sprint 2 runReplayHarness gate (never live LLM runs),
6
+ * keeps the Pareto frontier, and writes a promoted prompt under
7
+ * .bober/evolve/<runId>/promoted/ ONLY when a variant beats the baseline with
8
+ * zero regressions.
9
+ *
10
+ * SAFETY: this command NEVER writes under the live agent definitions directory.
11
+ * All outputs are confined to .bober/evolve/<runId>/.
12
+ *
13
+ * Error handling: handler MUST NOT throw. Sets process.exitCode=1 and returns
14
+ * on all errors. Pattern mirrors src/cli/commands/facts.ts and replay.ts.
15
+ */
16
+ import type { Command } from "commander";
17
+ export declare function registerEvolveCommand(program: Command): void;
18
+ //# sourceMappingURL=evolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE5D"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * `bober evolve` — offline replay-gated prompt evolution.
3
+ *
4
+ * Reads the generator or evaluator agent prompt, proposes deterministic variants,
5
+ * scores each ONLY via the Sprint 2 runReplayHarness gate (never live LLM runs),
6
+ * keeps the Pareto frontier, and writes a promoted prompt under
7
+ * .bober/evolve/<runId>/promoted/ ONLY when a variant beats the baseline with
8
+ * zero regressions.
9
+ *
10
+ * SAFETY: this command NEVER writes under the live agent definitions directory.
11
+ * All outputs are confined to .bober/evolve/<runId>/.
12
+ *
13
+ * Error handling: handler MUST NOT throw. Sets process.exitCode=1 and returns
14
+ * on all errors. Pattern mirrors src/cli/commands/facts.ts and replay.ts.
15
+ */
16
+ import chalk from "chalk";
17
+ import { findProjectRoot } from "../../utils/fs.js";
18
+ import { loadConfig } from "../../config/loader.js";
19
+ import { evolve } from "../../orchestrator/selfimprove/gepa.js";
20
+ // ── Root resolver ─────────────────────────────────────────────────────────────
21
+ async function resolveRoot() {
22
+ const root = await findProjectRoot();
23
+ return root ?? process.cwd();
24
+ }
25
+ // ── registerEvolveCommand ─────────────────────────────────────────────────────
26
+ export function registerEvolveCommand(program) {
27
+ program
28
+ .command("evolve")
29
+ .description("Offline replay-gated prompt evolution (scores via frozen corpus, never writes live agent definitions, never live)")
30
+ .requiredOption("--role <role>", "Agent role to evolve: generator | evaluator")
31
+ .option("--seed <n>", "Deterministic PRNG seed for variant generation", "0")
32
+ .option("--dry-run", "Score and report variants without writing any promoted file")
33
+ .action(async (opts) => {
34
+ const projectRoot = await resolveRoot();
35
+ try {
36
+ // Tolerant config load — absence of bober.config.json is non-fatal.
37
+ // Mirror replay.ts:278-293.
38
+ let config;
39
+ try {
40
+ config = await loadConfig(projectRoot);
41
+ }
42
+ catch {
43
+ config = {
44
+ project: { name: "evolve", mode: "greenfield" },
45
+ selfImprove: {
46
+ deterministicGate: false,
47
+ rubricIsolation: false,
48
+ requireCitedArtifact: false,
49
+ replayDir: ".bober/replay",
50
+ },
51
+ };
52
+ }
53
+ const role = opts.role;
54
+ const seed = Number(opts.seed) || 0;
55
+ const dryRun = Boolean(opts.dryRun);
56
+ process.stdout.write(chalk.bold(`bober evolve: role=${role} seed=${seed} dryRun=${dryRun}\n`));
57
+ const result = await evolve(projectRoot, config, { role, seed, dryRun });
58
+ process.stdout.write(chalk.bold(`Variants tried: ${result.variantsTried}\n`));
59
+ if (result.promoted) {
60
+ process.stdout.write(chalk.green(`Promoted → ${result.winnerPath ?? "(path unavailable)"}\n`));
61
+ }
62
+ else {
63
+ process.stdout.write(chalk.gray(`No variant beat the baseline (zero-regression + strictly-more-improvements). Nothing promoted.\n`));
64
+ }
65
+ }
66
+ catch (err) {
67
+ process.stderr.write(chalk.red(`Failed to evolve: ${err instanceof Error ? err.message : String(err)}\n`));
68
+ process.exitCode = 1;
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=evolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../src/cli/commands/evolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `bober facts <add|list|show|invalidate>` — manage semantic bi-temporal facts.
3
+ *
4
+ * Subcommands:
5
+ * add — Insert a new fact into the store.
6
+ * list — Print active (non-invalidated) facts.
7
+ * show <id> — Print one fact including provenance and temporal fields.
8
+ * invalidate — Soft-delete a fact (sets t_invalidated; never removes the row).
9
+ *
10
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1 and
11
+ * return on all errors. Pattern mirrors src/cli/commands/memory.ts.
12
+ */
13
+ import type { Command } from "commander";
14
+ export declare function registerFactsCommand(program: Command): void;
15
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuP3D"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * `bober facts <add|list|show|invalidate>` — manage semantic bi-temporal facts.
3
+ *
4
+ * Subcommands:
5
+ * add — Insert a new fact into the store.
6
+ * list — Print active (non-invalidated) facts.
7
+ * show <id> — Print one fact including provenance and temporal fields.
8
+ * invalidate — Soft-delete a fact (sets t_invalidated; never removes the row).
9
+ *
10
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1 and
11
+ * return on all errors. Pattern mirrors src/cli/commands/memory.ts.
12
+ */
13
+ import chalk from "chalk";
14
+ import { findProjectRoot } from "../../utils/fs.js";
15
+ import { loadConfig } from "../../config/loader.js";
16
+ import { loadTeam } from "../../teams/registry.js";
17
+ import { FactStore, factsDbPath, ensureFactsDir, writeFact, } from "../../state/facts.js";
18
+ // ── Root resolver ─────────────────────────────────────────────────────
19
+ async function resolveRoot() {
20
+ const root = await findProjectRoot();
21
+ return root ?? process.cwd();
22
+ }
23
+ // ── Namespace resolver ────────────────────────────────────────────────
24
+ /**
25
+ * Resolve the active memory namespace from the default team.
26
+ * Falls back to undefined (current .bober/memory/ path) if config is missing.
27
+ * Never throws — config absence is not fatal for facts commands.
28
+ */
29
+ async function resolveDefaultNamespace(projectRoot) {
30
+ try {
31
+ const config = await loadConfig(projectRoot);
32
+ return loadTeam(config, undefined).memoryNamespace || undefined;
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ // ── registerFactsCommand ──────────────────────────────────────────────
39
+ export function registerFactsCommand(program) {
40
+ const factsCmd = program
41
+ .command("facts")
42
+ .description("Inspect and manage semantic bi-temporal facts (add, list, show, invalidate)");
43
+ // ── facts add ────────────────────────────────────────────────────
44
+ factsCmd
45
+ .command("add")
46
+ .description("Insert a new semantic fact into the store")
47
+ .requiredOption("--scope <scope>", "Fact scope (e.g. programming)", "programming")
48
+ .requiredOption("--subject <subject>", "Fact subject (e.g. project)")
49
+ .requiredOption("--predicate <predicate>", "Fact predicate (e.g. testCommand)")
50
+ .requiredOption("--value <value>", "Fact value (e.g. vitest)")
51
+ .option("--confidence <n>", "Confidence score 0.0-1.0", "1")
52
+ .option("--run-id <runId>", "Source run id")
53
+ .action(async (opts) => {
54
+ const projectRoot = await resolveRoot();
55
+ try {
56
+ const ns = await resolveDefaultNamespace(projectRoot);
57
+ await ensureFactsDir(projectRoot, ns);
58
+ // Stamp wall-clock time at handler boundary — NEVER inside the store
59
+ const now = new Date().toISOString();
60
+ const input = {
61
+ scope: opts.scope,
62
+ subject: opts.subject,
63
+ predicate: opts.predicate,
64
+ value: opts.value,
65
+ confidence: Math.max(0, Math.min(1, Number(opts.confidence) || 1)),
66
+ sourceRunId: opts.runId ?? null,
67
+ tValid: now,
68
+ tCreated: now,
69
+ };
70
+ const store = new FactStore(factsDbPath(projectRoot, ns));
71
+ try {
72
+ // Route through writeFact so duplicate/supersede reconciliation runs.
73
+ // No judge wired here — deterministic ADD/UPDATE/NOOP only.
74
+ const action = await writeFact(store, input, { now });
75
+ if (action === "noop") {
76
+ process.stdout.write(chalk.gray(`Fact unchanged (identical value already active).\n`));
77
+ process.stdout.write(` scope: ${input.scope}\n`);
78
+ process.stdout.write(` subject: ${input.subject}\n`);
79
+ process.stdout.write(` predicate: ${input.predicate}\n`);
80
+ process.stdout.write(` value: ${input.value}\n`);
81
+ }
82
+ else if (action === "update") {
83
+ process.stdout.write(chalk.yellow(`Superseded — prior fact invalidated.\n`));
84
+ process.stdout.write(` scope: ${input.scope}\n`);
85
+ process.stdout.write(` subject: ${input.subject}\n`);
86
+ process.stdout.write(` predicate: ${input.predicate}\n`);
87
+ process.stdout.write(` value: ${input.value}\n`);
88
+ process.stdout.write(` t_created: ${input.tCreated}\n`);
89
+ }
90
+ else {
91
+ // "add" (including deterministic fallback from ambiguity branch)
92
+ process.stdout.write(chalk.green(`Added fact\n`));
93
+ process.stdout.write(` scope: ${input.scope}\n`);
94
+ process.stdout.write(` subject: ${input.subject}\n`);
95
+ process.stdout.write(` predicate: ${input.predicate}\n`);
96
+ process.stdout.write(` value: ${input.value}\n`);
97
+ process.stdout.write(` t_created: ${input.tCreated}\n`);
98
+ }
99
+ }
100
+ finally {
101
+ store.close();
102
+ }
103
+ }
104
+ catch (err) {
105
+ process.stderr.write(chalk.red(`Failed to add fact: ${err instanceof Error ? err.message : String(err)}\n`));
106
+ process.exitCode = 1;
107
+ }
108
+ });
109
+ // ── facts list ───────────────────────────────────────────────────
110
+ factsCmd
111
+ .command("list")
112
+ .description("Print active (non-invalidated) facts")
113
+ .option("--scope <scope>", "Filter by scope", "programming")
114
+ .option("--subject <subject>", "Filter by subject")
115
+ .option("--predicate <predicate>", "Filter by predicate")
116
+ .action(async (opts) => {
117
+ const projectRoot = await resolveRoot();
118
+ try {
119
+ const ns = await resolveDefaultNamespace(projectRoot);
120
+ await ensureFactsDir(projectRoot, ns);
121
+ const store = new FactStore(factsDbPath(projectRoot, ns));
122
+ try {
123
+ const records = store.getActiveFacts(opts.scope, opts.subject, opts.predicate);
124
+ if (records.length === 0) {
125
+ process.stdout.write(chalk.gray("No active facts found.\n"));
126
+ return;
127
+ }
128
+ process.stdout.write(chalk.bold(`${"ID".padEnd(18)} ${"SUBJECT".padEnd(20)} ${"PREDICATE".padEnd(22)} VALUE\n`));
129
+ process.stdout.write(`${"-".repeat(90)}\n`);
130
+ for (const r of records) {
131
+ const valueSnippet = r.value.length > 30 ? `${r.value.slice(0, 27)}...` : r.value;
132
+ process.stdout.write(`${r.id.padEnd(18)} ${r.subject.padEnd(20)} ${r.predicate.padEnd(22)} ${valueSnippet}\n`);
133
+ }
134
+ }
135
+ finally {
136
+ store.close();
137
+ }
138
+ }
139
+ catch (err) {
140
+ process.stderr.write(chalk.red(`Failed to list facts: ${err instanceof Error ? err.message : String(err)}\n`));
141
+ process.exitCode = 1;
142
+ }
143
+ });
144
+ // ── facts show <id> ──────────────────────────────────────────────
145
+ factsCmd
146
+ .command("show <id>")
147
+ .description("Print one fact with full provenance and temporal fields")
148
+ .action(async (id) => {
149
+ const projectRoot = await resolveRoot();
150
+ try {
151
+ const ns = await resolveDefaultNamespace(projectRoot);
152
+ await ensureFactsDir(projectRoot, ns);
153
+ const store = new FactStore(factsDbPath(projectRoot, ns));
154
+ try {
155
+ const rec = store.getFact(id);
156
+ if (rec === null) {
157
+ process.stderr.write(chalk.yellow(`Fact not found: ${id}\n`));
158
+ process.exitCode = 1;
159
+ return;
160
+ }
161
+ process.stdout.write(chalk.bold(`Fact: ${rec.id}\n`));
162
+ process.stdout.write(` scope: ${rec.scope}\n`);
163
+ process.stdout.write(` subject: ${rec.subject}\n`);
164
+ process.stdout.write(` predicate: ${rec.predicate}\n`);
165
+ process.stdout.write(` value: ${rec.value}\n`);
166
+ process.stdout.write(` confidence: ${rec.confidence}\n`);
167
+ process.stdout.write(` source_run: ${rec.sourceRunId ?? "(none)"}\n`);
168
+ process.stdout.write(` t_valid: ${rec.tValid}\n`);
169
+ process.stdout.write(` t_invalid: ${rec.tInvalid ?? "(none)"}\n`);
170
+ process.stdout.write(` t_created: ${rec.tCreated}\n`);
171
+ process.stdout.write(` t_invalidated: ${rec.tInvalidated ?? chalk.green("(active)")}\n`);
172
+ }
173
+ finally {
174
+ store.close();
175
+ }
176
+ }
177
+ catch (err) {
178
+ process.stderr.write(chalk.red(`Failed to show fact: ${err instanceof Error ? err.message : String(err)}\n`));
179
+ process.exitCode = 1;
180
+ }
181
+ });
182
+ // ── facts invalidate <id> ────────────────────────────────────────
183
+ factsCmd
184
+ .command("invalidate <id>")
185
+ .description("Soft-delete a fact (sets t_invalidated; row is kept)")
186
+ .action(async (id) => {
187
+ const projectRoot = await resolveRoot();
188
+ try {
189
+ const ns = await resolveDefaultNamespace(projectRoot);
190
+ await ensureFactsDir(projectRoot, ns);
191
+ // Stamp wall-clock time at handler boundary — NEVER inside the store
192
+ const now = new Date().toISOString();
193
+ const store = new FactStore(factsDbPath(projectRoot, ns));
194
+ try {
195
+ const changed = store.invalidateFact(id, now);
196
+ if (!changed) {
197
+ process.stderr.write(chalk.yellow(`Fact ${id} not found or already invalidated.\n`));
198
+ process.exitCode = 1;
199
+ return;
200
+ }
201
+ process.stdout.write(chalk.green(`Fact ${chalk.bold(id)} invalidated at ${now}\n`));
202
+ }
203
+ finally {
204
+ store.close();
205
+ }
206
+ }
207
+ catch (err) {
208
+ process.stderr.write(chalk.red(`Failed to invalidate fact: ${err instanceof Error ? err.message : String(err)}\n`));
209
+ process.exitCode = 1;
210
+ }
211
+ });
212
+ }
213
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/cli/commands/facts.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
+ import type { ProjectMode } from "../../config/schema.js";
1
2
  export interface InitCommandOptions {
2
3
  preset?: string;
3
4
  }
4
5
  export declare function runInitCommand(projectRoot: string, options?: InitCommandOptions): Promise<void>;
6
+ /**
7
+ * Copy SKILL.md files from the package's skills/ directory into
8
+ * the project's .claude/commands/ directory so they appear as
9
+ * /bober-plan, /bober-sprint, etc. in Claude Code.
10
+ *
11
+ * Also copies agent definitions into .claude/agents/.
12
+ */
13
+ export declare function installClaudeCommands(projectRoot: string, mode: ProjectMode, preset?: string): Promise<void>;
5
14
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgaA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAyEf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AA0Z5E,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAyEf;AA0eD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoHf"}
@@ -856,7 +856,7 @@ const STACK_SPECIFIC_COMMANDS = {
856
856
  *
857
857
  * Also copies agent definitions into .claude/agents/.
858
858
  */
859
- async function installClaudeCommands(projectRoot, mode, preset) {
859
+ export async function installClaudeCommands(projectRoot, mode, preset) {
860
860
  const __filename = fileURLToPath(import.meta.url);
861
861
  // From dist/cli/commands/init.js → go up to package root
862
862
  const packageRoot = join(dirname(__filename), "..", "..", "..");