@monoes/monomindcli 2.15.6 → 2.16.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 (304) hide show
  1. package/.claude/helpers/build-skill-registry.cjs +23 -2
  2. package/.claude/helpers/handlers/route-handler.cjs +89 -3
  3. package/.claude/helpers/handlers/session-restore-handler.cjs +1 -1
  4. package/.claude/helpers/jev-picker.cjs +499 -0
  5. package/.claude/helpers/redact-secrets.cjs +69 -0
  6. package/.claude/skills/mastermind-agent-select/SKILL.md +28 -0
  7. package/dist/src/catalog/blueprints.d.ts +39 -0
  8. package/dist/src/catalog/blueprints.d.ts.map +1 -0
  9. package/dist/src/catalog/blueprints.js +78 -0
  10. package/dist/src/catalog/blueprints.js.map +1 -0
  11. package/dist/src/catalog/digest.d.ts +16 -0
  12. package/dist/src/catalog/digest.d.ts.map +1 -0
  13. package/dist/src/catalog/digest.js +62 -0
  14. package/dist/src/catalog/digest.js.map +1 -0
  15. package/dist/src/catalog/frontmatter.d.ts +23 -0
  16. package/dist/src/catalog/frontmatter.d.ts.map +1 -0
  17. package/dist/src/catalog/frontmatter.js +80 -0
  18. package/dist/src/catalog/frontmatter.js.map +1 -0
  19. package/dist/src/catalog/lifecycle.d.ts +31 -0
  20. package/dist/src/catalog/lifecycle.d.ts.map +1 -0
  21. package/dist/src/catalog/lifecycle.js +78 -0
  22. package/dist/src/catalog/lifecycle.js.map +1 -0
  23. package/dist/src/catalog/projection.d.ts +57 -0
  24. package/dist/src/catalog/projection.d.ts.map +1 -0
  25. package/dist/src/catalog/projection.js +272 -0
  26. package/dist/src/catalog/projection.js.map +1 -0
  27. package/dist/src/catalog/scan.d.ts +37 -0
  28. package/dist/src/catalog/scan.d.ts.map +1 -0
  29. package/dist/src/catalog/scan.js +214 -0
  30. package/dist/src/catalog/scan.js.map +1 -0
  31. package/dist/src/catalog/snapshot.d.ts +62 -0
  32. package/dist/src/catalog/snapshot.d.ts.map +1 -0
  33. package/dist/src/catalog/snapshot.js +183 -0
  34. package/dist/src/catalog/snapshot.js.map +1 -0
  35. package/dist/src/catalog/stage.d.ts +26 -0
  36. package/dist/src/catalog/stage.d.ts.map +1 -0
  37. package/dist/src/catalog/stage.js +316 -0
  38. package/dist/src/catalog/stage.js.map +1 -0
  39. package/dist/src/catalog/state.d.ts +23 -0
  40. package/dist/src/catalog/state.d.ts.map +1 -0
  41. package/dist/src/catalog/state.js +102 -0
  42. package/dist/src/catalog/state.js.map +1 -0
  43. package/dist/src/catalog/types.d.ts +289 -0
  44. package/dist/src/catalog/types.d.ts.map +1 -0
  45. package/dist/src/catalog/types.js +118 -0
  46. package/dist/src/catalog/types.js.map +1 -0
  47. package/dist/src/commands/catalog.d.ts +14 -0
  48. package/dist/src/commands/catalog.d.ts.map +1 -0
  49. package/dist/src/commands/catalog.js +392 -0
  50. package/dist/src/commands/catalog.js.map +1 -0
  51. package/dist/src/commands/doctor-catalog-checks.d.ts +3 -0
  52. package/dist/src/commands/doctor-catalog-checks.d.ts.map +1 -0
  53. package/dist/src/commands/doctor-catalog-checks.js +69 -0
  54. package/dist/src/commands/doctor-catalog-checks.js.map +1 -0
  55. package/dist/src/commands/doctor-decision-checks.d.ts +10 -0
  56. package/dist/src/commands/doctor-decision-checks.d.ts.map +1 -0
  57. package/dist/src/commands/doctor-decision-checks.js +82 -0
  58. package/dist/src/commands/doctor-decision-checks.js.map +1 -0
  59. package/dist/src/commands/doctor.d.ts.map +1 -1
  60. package/dist/src/commands/doctor.js +9 -1
  61. package/dist/src/commands/doctor.js.map +1 -1
  62. package/dist/src/commands/index.d.ts +2 -2
  63. package/dist/src/commands/index.d.ts.map +1 -1
  64. package/dist/src/commands/index.js +4 -1
  65. package/dist/src/commands/index.js.map +1 -1
  66. package/dist/src/commands/org-observe.d.ts.map +1 -1
  67. package/dist/src/commands/org-observe.js +7 -1
  68. package/dist/src/commands/org-observe.js.map +1 -1
  69. package/dist/src/commands/org-skills.d.ts.map +1 -1
  70. package/dist/src/commands/org-skills.js +14 -4
  71. package/dist/src/commands/org-skills.js.map +1 -1
  72. package/dist/src/commands/org.d.ts.map +1 -1
  73. package/dist/src/commands/org.js +8 -1
  74. package/dist/src/commands/org.js.map +1 -1
  75. package/dist/src/commands/pick.d.ts +4 -0
  76. package/dist/src/commands/pick.d.ts.map +1 -0
  77. package/dist/src/commands/pick.js +77 -0
  78. package/dist/src/commands/pick.js.map +1 -0
  79. package/dist/src/commands/route.js +1 -1
  80. package/dist/src/commands/route.js.map +1 -1
  81. package/dist/src/decision/catalogs.d.ts +20 -0
  82. package/dist/src/decision/catalogs.d.ts.map +1 -0
  83. package/dist/src/decision/catalogs.js +64 -0
  84. package/dist/src/decision/catalogs.js.map +1 -0
  85. package/dist/src/decision/jev.d.ts +85 -0
  86. package/dist/src/decision/jev.d.ts.map +1 -0
  87. package/dist/src/decision/jev.js +72 -0
  88. package/dist/src/decision/jev.js.map +1 -0
  89. package/dist/src/decision/picks.d.ts +50 -0
  90. package/dist/src/decision/picks.d.ts.map +1 -0
  91. package/dist/src/decision/picks.js +100 -0
  92. package/dist/src/decision/picks.js.map +1 -0
  93. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  94. package/dist/src/init/helpers-generator.js +7 -0
  95. package/dist/src/init/helpers-generator.js.map +1 -1
  96. package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
  97. package/dist/src/orgrt/checkpoint-ops.js +6 -1
  98. package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
  99. package/dist/src/orgrt/completion-gate.d.ts +15 -0
  100. package/dist/src/orgrt/completion-gate.d.ts.map +1 -1
  101. package/dist/src/orgrt/completion-gate.js +59 -3
  102. package/dist/src/orgrt/completion-gate.js.map +1 -1
  103. package/dist/src/orgrt/daemon.d.ts +18 -1
  104. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  105. package/dist/src/orgrt/daemon.js +33 -3
  106. package/dist/src/orgrt/daemon.js.map +1 -1
  107. package/dist/src/orgrt/decisions.d.ts +24 -0
  108. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  109. package/dist/src/orgrt/decisions.js +164 -18
  110. package/dist/src/orgrt/decisions.js.map +1 -1
  111. package/dist/src/orgrt/review-packet.d.ts +1 -1
  112. package/dist/src/orgrt/review-packet.d.ts.map +1 -1
  113. package/dist/src/orgrt/review-packet.js +2 -2
  114. package/dist/src/orgrt/review-packet.js.map +1 -1
  115. package/dist/src/orgrt/session.d.ts +9 -0
  116. package/dist/src/orgrt/session.d.ts.map +1 -1
  117. package/dist/src/orgrt/session.js +24 -2
  118. package/dist/src/orgrt/session.js.map +1 -1
  119. package/dist/src/orgrt/skill-library.d.ts +10 -1
  120. package/dist/src/orgrt/skill-library.d.ts.map +1 -1
  121. package/dist/src/orgrt/skill-library.js +53 -4
  122. package/dist/src/orgrt/skill-library.js.map +1 -1
  123. package/dist/src/orgrt/task-dag.d.ts +3 -0
  124. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  125. package/dist/src/orgrt/task-dag.js +6 -0
  126. package/dist/src/orgrt/task-dag.js.map +1 -1
  127. package/dist/src/orgrt/types.d.ts +2 -0
  128. package/dist/src/orgrt/types.d.ts.map +1 -1
  129. package/dist/src/orgrt/types.js +4 -0
  130. package/dist/src/orgrt/types.js.map +1 -1
  131. package/dist/src/platform-adapters/mutation.d.ts +34 -0
  132. package/dist/src/platform-adapters/mutation.d.ts.map +1 -0
  133. package/dist/src/platform-adapters/mutation.js +188 -0
  134. package/dist/src/platform-adapters/mutation.js.map +1 -0
  135. package/dist/src/platform-adapters/operations.d.ts +7 -1
  136. package/dist/src/platform-adapters/operations.d.ts.map +1 -1
  137. package/dist/src/platform-adapters/operations.js +18 -76
  138. package/dist/src/platform-adapters/operations.js.map +1 -1
  139. package/dist/src/routing/jev-step.d.ts +17 -0
  140. package/dist/src/routing/jev-step.d.ts.map +1 -0
  141. package/dist/src/routing/jev-step.js +27 -0
  142. package/dist/src/routing/jev-step.js.map +1 -0
  143. package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
  144. package/dist/src/routing/route-layer-factory.js +16 -1
  145. package/dist/src/routing/route-layer-factory.js.map +1 -1
  146. package/dist/src/utils/redaction.d.ts.map +1 -1
  147. package/dist/src/utils/redaction.js +19 -4
  148. package/dist/src/utils/redaction.js.map +1 -1
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +4 -4
  151. package/.claude/skills/monodesign/SKILL.md +0 -257
  152. package/.claude/skills/monodesign/adapt.md +0 -53
  153. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  154. package/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  155. package/.claude/skills/monodesign/animate.md +0 -65
  156. package/.claude/skills/monodesign/audit.md +0 -89
  157. package/.claude/skills/monodesign/bolder.md +0 -50
  158. package/.claude/skills/monodesign/clarify.md +0 -64
  159. package/.claude/skills/monodesign/colorize.md +0 -68
  160. package/.claude/skills/monodesign/craft.md +0 -51
  161. package/.claude/skills/monodesign/critique.md +0 -66
  162. package/.claude/skills/monodesign/delight.md +0 -47
  163. package/.claude/skills/monodesign/distill.md +0 -56
  164. package/.claude/skills/monodesign/document.md +0 -83
  165. package/.claude/skills/monodesign/extract.md +0 -74
  166. package/.claude/skills/monodesign/harden.md +0 -65
  167. package/.claude/skills/monodesign/init.md +0 -30
  168. package/.claude/skills/monodesign/layout.md +0 -36
  169. package/.claude/skills/monodesign/live.md +0 -34
  170. package/.claude/skills/monodesign/onboard.md +0 -50
  171. package/.claude/skills/monodesign/optimize.md +0 -64
  172. package/.claude/skills/monodesign/overdrive.md +0 -56
  173. package/.claude/skills/monodesign/polish.md +0 -68
  174. package/.claude/skills/monodesign/quieter.md +0 -57
  175. package/.claude/skills/monodesign/reference/adapt.md +0 -312
  176. package/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  177. package/.claude/skills/monodesign/reference/android.md +0 -40
  178. package/.claude/skills/monodesign/reference/animate.md +0 -203
  179. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  180. package/.claude/skills/monodesign/reference/audit.md +0 -135
  181. package/.claude/skills/monodesign/reference/audit.native.md +0 -139
  182. package/.claude/skills/monodesign/reference/bolder.md +0 -120
  183. package/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  184. package/.claude/skills/monodesign/reference/brand.md +0 -108
  185. package/.claude/skills/monodesign/reference/clarify.md +0 -288
  186. package/.claude/skills/monodesign/reference/codex.md +0 -105
  187. package/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  188. package/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  189. package/.claude/skills/monodesign/reference/colorize.md +0 -257
  190. package/.claude/skills/monodesign/reference/component-specs.md +0 -260
  191. package/.claude/skills/monodesign/reference/component-states.md +0 -274
  192. package/.claude/skills/monodesign/reference/component-system.md +0 -358
  193. package/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  194. package/.claude/skills/monodesign/reference/craft.md +0 -123
  195. package/.claude/skills/monodesign/reference/critique.md +0 -780
  196. package/.claude/skills/monodesign/reference/delight.md +0 -302
  197. package/.claude/skills/monodesign/reference/design-principles.md +0 -246
  198. package/.claude/skills/monodesign/reference/distill.md +0 -111
  199. package/.claude/skills/monodesign/reference/document.md +0 -429
  200. package/.claude/skills/monodesign/reference/extract.md +0 -69
  201. package/.claude/skills/monodesign/reference/harden.md +0 -347
  202. package/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  203. package/.claude/skills/monodesign/reference/hooks.md +0 -92
  204. package/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  205. package/.claude/skills/monodesign/reference/init.md +0 -221
  206. package/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  207. package/.claude/skills/monodesign/reference/ios.md +0 -45
  208. package/.claude/skills/monodesign/reference/layout.md +0 -185
  209. package/.claude/skills/monodesign/reference/live.md +0 -710
  210. package/.claude/skills/monodesign/reference/motion-design.md +0 -109
  211. package/.claude/skills/monodesign/reference/onboard.md +0 -234
  212. package/.claude/skills/monodesign/reference/optimize.md +0 -258
  213. package/.claude/skills/monodesign/reference/overdrive.md +0 -130
  214. package/.claude/skills/monodesign/reference/personas.md +0 -179
  215. package/.claude/skills/monodesign/reference/polish.md +0 -241
  216. package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  217. package/.claude/skills/monodesign/reference/product.md +0 -60
  218. package/.claude/skills/monodesign/reference/quieter.md +0 -99
  219. package/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  220. package/.claude/skills/monodesign/reference/shape.md +0 -165
  221. package/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  222. package/.claude/skills/monodesign/reference/teach.md +0 -10
  223. package/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  224. package/.claude/skills/monodesign/reference/typeset.md +0 -301
  225. package/.claude/skills/monodesign/reference/typography.md +0 -159
  226. package/.claude/skills/monodesign/reference/ux-research.md +0 -143
  227. package/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  228. package/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  229. package/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  230. package/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  231. package/.claude/skills/monodesign/scripts/context.mjs +0 -1065
  232. package/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  233. package/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -193
  234. package/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  235. package/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1960
  236. package/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  237. package/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  238. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5628
  239. package/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  240. package/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  241. package/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -339
  242. package/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  243. package/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1016
  244. package/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  245. package/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  246. package/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  247. package/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  248. package/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  249. package/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  250. package/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  251. package/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  252. package/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  253. package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3024
  254. package/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  255. package/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  256. package/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  257. package/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  258. package/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  259. package/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -694
  260. package/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  261. package/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1785
  262. package/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  263. package/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -809
  264. package/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  265. package/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  266. package/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  267. package/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  268. package/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  269. package/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  270. package/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  271. package/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  272. package/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  273. package/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  274. package/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  275. package/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  276. package/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  277. package/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  278. package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -279
  279. package/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  280. package/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  281. package/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  282. package/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -147
  283. package/.claude/skills/monodesign/scripts/live-browser-session.js +0 -124
  284. package/.claude/skills/monodesign/scripts/live-browser.js +0 -11213
  285. package/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  286. package/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  287. package/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  288. package/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  289. package/.claude/skills/monodesign/scripts/live-inject.mjs +0 -596
  290. package/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  291. package/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  292. package/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  293. package/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  294. package/.claude/skills/monodesign/scripts/live-server.mjs +0 -1210
  295. package/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  296. package/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  297. package/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -884
  298. package/.claude/skills/monodesign/scripts/live.mjs +0 -297
  299. package/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  300. package/.claude/skills/monodesign/scripts/palette.mjs +0 -635
  301. package/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  302. package/.claude/skills/monodesign/shape.md +0 -71
  303. package/.claude/skills/monodesign/teach.md +0 -18
  304. package/.claude/skills/monodesign/typeset.md +0 -59
@@ -1,293 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { getLegacyLiveSessionsDir, getLiveSessionsDir } from '../lib/monodesign-paths.mjs';
4
-
5
- // steer_done is terminal too: a steer session has no pending work after the
6
- // agent's reply, and leaving it "active" makes live-status suggest recovery
7
- // for finished steers forever (the browser's trailing steer checkpoint would
8
- // also re-stamp phase "steer"; terminal phases ignore late checkpoints).
9
- const COMPLETED_PHASES = new Set(['completed', 'discarded', 'steer_done']);
10
-
11
- export function createLiveSessionStore({ cwd = process.cwd(), sessionId } = {}) {
12
- const rootDir = getLiveSessionsDir(cwd);
13
- const legacyRootDir = getLegacyLiveSessionsDir(cwd);
14
- fs.mkdirSync(rootDir, { recursive: true });
15
- const snapshotCache = new Map();
16
-
17
- function loadCachedOrRebuild(id) {
18
- const cached = snapshotCache.get(id);
19
- if (cached) return cached;
20
- const journalPath = getReadableJournalPath(id);
21
- const rebuilt = rebuildSnapshotFromJournal(journalPath, id);
22
- snapshotCache.set(id, rebuilt);
23
- return rebuilt;
24
- }
25
-
26
- function getReadableJournalPath(id) {
27
- const primary = getJournalPath(rootDir, id);
28
- if (fs.existsSync(primary)) return primary;
29
- const legacy = getJournalPath(legacyRootDir, id);
30
- if (fs.existsSync(legacy)) return legacy;
31
- return primary;
32
- }
33
-
34
- return {
35
- rootDir,
36
- legacyRootDir,
37
- appendEvent(event) {
38
- const normalized = normalizeEvent(event, sessionId);
39
- const journalPath = getJournalPath(rootDir, normalized.id);
40
- const snapshotPath = getSnapshotPath(rootDir, normalized.id);
41
- const legacyJournalPath = getJournalPath(legacyRootDir, normalized.id);
42
- if (!fs.existsSync(journalPath) && fs.existsSync(legacyJournalPath)) {
43
- fs.copyFileSync(legacyJournalPath, journalPath);
44
- }
45
- const prior = loadCachedOrRebuild(normalized.id);
46
- const seq = prior.nextSeq;
47
- const entry = {
48
- seq,
49
- id: normalized.id,
50
- type: normalized.type,
51
- ts: new Date().toISOString(),
52
- event: normalized,
53
- };
54
- fs.appendFileSync(journalPath, `${JSON.stringify(entry)}\n`);
55
- const next = applyEvent(prior.snapshot, entry, prior.diagnostics);
56
- snapshotCache.set(normalized.id, { snapshot: next, diagnostics: next.diagnostics || [], nextSeq: seq + 1 });
57
- writeSnapshot(snapshotPath, next);
58
- return next;
59
- },
60
- getSnapshot(id = sessionId, opts = {}) {
61
- if (!id) throw new Error('session id required');
62
- const journalPath = getReadableJournalPath(id);
63
- const snapshotPath = getSnapshotPath(rootDir, id);
64
- const rebuilt = rebuildSnapshotFromJournal(journalPath, id);
65
- snapshotCache.set(id, rebuilt);
66
- writeSnapshot(snapshotPath, rebuilt.snapshot);
67
- if (!opts.includeCompleted && COMPLETED_PHASES.has(rebuilt.snapshot.phase)) return null;
68
- return rebuilt.snapshot;
69
- },
70
- listActiveSessions() {
71
- const ids = new Set();
72
- for (const dir of [legacyRootDir, rootDir]) {
73
- if (!fs.existsSync(dir)) continue;
74
- for (const name of fs.readdirSync(dir)) {
75
- if (name.endsWith('.jsonl')) ids.add(name.slice(0, -'.jsonl'.length));
76
- }
77
- }
78
- return [...ids]
79
- .sort()
80
- .map((id) => this.getSnapshot(id))
81
- .filter(Boolean);
82
- },
83
- };
84
- }
85
-
86
- function normalizeEvent(event, fallbackId) {
87
- if (!event || typeof event !== 'object') throw new Error('event object required');
88
- const id = event.id || fallbackId;
89
- if (!id || typeof id !== 'string') throw new Error('event id required');
90
- if (!event.type || typeof event.type !== 'string') throw new Error('event type required');
91
- return { ...event, id };
92
- }
93
-
94
- function getJournalPath(rootDir, id) {
95
- return path.join(rootDir, `${safeSessionId(id)}.jsonl`);
96
- }
97
-
98
- function getSnapshotPath(rootDir, id) {
99
- return path.join(rootDir, `${safeSessionId(id)}.snapshot.json`);
100
- }
101
-
102
- function safeSessionId(id) {
103
- if (!/^[A-Za-z0-9_-]{1,128}$/.test(id)) throw new Error(`invalid session id: ${id}`);
104
- return id;
105
- }
106
-
107
- function baseSnapshot(id) {
108
- return {
109
- id,
110
- phase: 'new',
111
- pageUrl: null,
112
- sourceFile: null,
113
- previewFile: null,
114
- previewMode: null,
115
- expectedVariants: 0,
116
- arrivedVariants: 0,
117
- visibleVariant: null,
118
- paramValues: {},
119
- pendingEventSeq: null,
120
- pendingEvent: null,
121
- deliveryLease: null,
122
- checkpointRevision: 0,
123
- activeOwner: null,
124
- sourceMarkers: {},
125
- fallbackMode: null,
126
- annotationArtifacts: [],
127
- diagnostics: [],
128
- updatedAt: null,
129
- };
130
- }
131
-
132
- function rebuildSnapshotFromJournal(journalPath, id) {
133
- let snapshot = baseSnapshot(id);
134
- const diagnostics = [];
135
- let nextSeq = 1;
136
- if (!fs.existsSync(journalPath)) return { snapshot, diagnostics, nextSeq };
137
-
138
- const lines = fs.readFileSync(journalPath, 'utf-8').split('\n');
139
- for (let i = 0; i < lines.length; i++) {
140
- const line = lines[i];
141
- if (!line.trim()) continue;
142
- try {
143
- const entry = JSON.parse(line);
144
- if (!entry || typeof entry !== 'object') throw new Error('entry is not object');
145
- if (Number.isInteger(entry.seq)) nextSeq = Math.max(nextSeq, entry.seq + 1);
146
- snapshot = applyEvent(snapshot, entry);
147
- } catch (err) {
148
- diagnostics.push({
149
- error: 'journal_parse_failed',
150
- line: i + 1,
151
- message: err.message,
152
- });
153
- }
154
- }
155
- snapshot.diagnostics = [...snapshot.diagnostics, ...diagnostics];
156
- return { snapshot, diagnostics, nextSeq };
157
- }
158
-
159
- function applyEvent(snapshot, entry, inheritedDiagnostics = []) {
160
- const event = entry.event || entry;
161
- const next = {
162
- ...snapshot,
163
- paramValues: { ...(snapshot.paramValues || {}) },
164
- sourceMarkers: { ...(snapshot.sourceMarkers || {}) },
165
- annotationArtifacts: [...(snapshot.annotationArtifacts || [])],
166
- diagnostics: [...(snapshot.diagnostics || [])],
167
- updatedAt: entry.ts || new Date().toISOString(),
168
- };
169
-
170
- if (inheritedDiagnostics.length && next.diagnostics.length === 0) {
171
- next.diagnostics = [...inheritedDiagnostics];
172
- }
173
-
174
- switch (event.type) {
175
- case 'generate':
176
- next.phase = 'generate_requested';
177
- next.pageUrl = event.pageUrl ?? next.pageUrl;
178
- next.expectedVariants = event.count ?? next.expectedVariants;
179
- next.pendingEventSeq = entry.seq ?? next.pendingEventSeq;
180
- next.pendingEvent = toPendingEvent(event);
181
- if (event.screenshotPath) upsertArtifact(next.annotationArtifacts, { type: 'screenshot', path: event.screenshotPath });
182
- break;
183
- case 'variants_ready':
184
- case 'agent_done':
185
- next.phase = event.carbonize === true ? 'carbonize_required' : 'variants_ready';
186
- next.sourceFile = event.sourceFile ?? event.file ?? next.sourceFile;
187
- next.previewFile = event.previewFile ?? next.previewFile;
188
- next.previewMode = event.previewMode ?? next.previewMode;
189
- next.arrivedVariants = event.arrivedVariants ?? (next.expectedVariants || next.arrivedVariants || 0);
190
- next.pendingEventSeq = null;
191
- next.pendingEvent = null;
192
- if (event.carbonize === true) {
193
- next.diagnostics.push({
194
- error: 'carbonize_cleanup_required',
195
- file: event.file || null,
196
- message: 'Accepted variant still has carbonize markers that must be folded into source CSS.',
197
- });
198
- }
199
- break;
200
- case 'checkpoint':
201
- if (COMPLETED_PHASES.has(next.phase)) {
202
- next.diagnostics.push({ error: 'checkpoint_after_terminal_ignored', phase: event.phase ?? null, revision: event.revision ?? null });
203
- break;
204
- }
205
- if ((event.revision ?? 0) >= (next.checkpointRevision ?? 0)) {
206
- next.phase = event.phase ?? next.phase;
207
- next.checkpointRevision = event.revision ?? next.checkpointRevision;
208
- next.activeOwner = event.owner ?? next.activeOwner;
209
- next.arrivedVariants = event.arrivedVariants ?? next.arrivedVariants;
210
- next.visibleVariant = event.visibleVariant ?? next.visibleVariant;
211
- next.sourceFile = event.sourceFile ?? next.sourceFile;
212
- next.previewFile = event.previewFile ?? next.previewFile;
213
- next.previewMode = event.previewMode ?? next.previewMode;
214
- if (event.paramValues) next.paramValues = { ...event.paramValues };
215
- } else {
216
- next.diagnostics.push({ error: 'stale_checkpoint_ignored', revision: event.revision });
217
- }
218
- break;
219
- case 'accept':
220
- case 'accept_intent':
221
- next.phase = 'accept_requested';
222
- next.visibleVariant = Number(event.variantId ?? next.visibleVariant);
223
- if (event.paramValues) next.paramValues = { ...event.paramValues };
224
- next.pendingEventSeq = entry.seq ?? next.pendingEventSeq;
225
- next.pendingEvent = toPendingEvent(event);
226
- break;
227
- case 'manual_edit_apply':
228
- next.phase = 'manual_edit_apply_requested';
229
- next.pageUrl = event.pageUrl ?? next.pageUrl;
230
- next.pendingEventSeq = entry.seq ?? next.pendingEventSeq;
231
- next.pendingEvent = toPendingEvent(event);
232
- break;
233
- case 'steer':
234
- next.phase = 'steer_requested';
235
- next.pageUrl = event.pageUrl ?? next.pageUrl;
236
- next.pendingEventSeq = entry.seq ?? next.pendingEventSeq;
237
- next.pendingEvent = toPendingEvent(event);
238
- break;
239
- case 'steer_done':
240
- next.phase = 'steer_done';
241
- next.sourceFile = event.sourceFile ?? event.file ?? next.sourceFile;
242
- next.previewFile = event.previewFile ?? next.previewFile;
243
- next.previewMode = event.previewMode ?? next.previewMode;
244
- next.message = event.message ?? next.message;
245
- next.pendingEventSeq = null;
246
- next.pendingEvent = null;
247
- break;
248
- case 'discard':
249
- next.phase = 'discard_requested';
250
- next.pendingEventSeq = entry.seq ?? next.pendingEventSeq;
251
- next.pendingEvent = toPendingEvent(event);
252
- break;
253
- case 'discarded':
254
- next.phase = 'discarded';
255
- next.pendingEventSeq = null;
256
- next.pendingEvent = null;
257
- break;
258
- case 'complete':
259
- next.phase = 'completed';
260
- next.sourceFile = event.sourceFile ?? event.file ?? next.sourceFile;
261
- next.previewFile = event.previewFile ?? next.previewFile;
262
- next.previewMode = event.previewMode ?? next.previewMode;
263
- next.pendingEventSeq = null;
264
- next.pendingEvent = null;
265
- break;
266
- case 'agent_error':
267
- next.phase = 'agent_error';
268
- next.pendingEventSeq = null;
269
- next.pendingEvent = null;
270
- next.diagnostics.push({ error: 'agent_error', message: event.message || 'unknown agent error' });
271
- break;
272
- default:
273
- next.diagnostics.push({ error: 'unknown_event_type', type: event.type });
274
- break;
275
- }
276
- return next;
277
- }
278
-
279
- function toPendingEvent(event) {
280
- const pending = { ...event };
281
- delete pending.token;
282
- return pending;
283
- }
284
-
285
- function upsertArtifact(artifacts, artifact) {
286
- if (!artifacts.some((existing) => existing.path === artifact.path && existing.type === artifact.type)) {
287
- artifacts.push(artifact);
288
- }
289
- }
290
-
291
- function writeSnapshot(snapshotPath, snapshot) {
292
- fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\n`);
293
- }