@devenius/junamis-skills 0.0.0-stage → 1.1.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 (311) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/LICENSE +21 -0
  3. package/README.md +231 -2
  4. package/SECURITY.md +81 -0
  5. package/bin/junamis-skills.js +7 -0
  6. package/dist/cli.d.ts +59 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +564 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/color.d.ts +40 -0
  11. package/dist/color.d.ts.map +1 -0
  12. package/dist/color.js +55 -0
  13. package/dist/color.js.map +1 -0
  14. package/dist/design/atomic.d.ts +4 -0
  15. package/dist/design/atomic.d.ts.map +1 -0
  16. package/dist/design/atomic.js +14 -0
  17. package/dist/design/atomic.js.map +1 -0
  18. package/dist/design/bootstrap.d.ts +23 -0
  19. package/dist/design/bootstrap.d.ts.map +1 -0
  20. package/dist/design/bootstrap.js +411 -0
  21. package/dist/design/bootstrap.js.map +1 -0
  22. package/dist/design/cli.d.ts +86 -0
  23. package/dist/design/cli.d.ts.map +1 -0
  24. package/dist/design/cli.js +425 -0
  25. package/dist/design/cli.js.map +1 -0
  26. package/dist/design/delta.d.ts +45 -0
  27. package/dist/design/delta.d.ts.map +1 -0
  28. package/dist/design/delta.js +557 -0
  29. package/dist/design/delta.js.map +1 -0
  30. package/dist/design/drift.d.ts +26 -0
  31. package/dist/design/drift.d.ts.map +1 -0
  32. package/dist/design/drift.js +341 -0
  33. package/dist/design/drift.js.map +1 -0
  34. package/dist/design/errors.d.ts +25 -0
  35. package/dist/design/errors.d.ts.map +1 -0
  36. package/dist/design/errors.js +30 -0
  37. package/dist/design/errors.js.map +1 -0
  38. package/dist/design/events.d.ts +18 -0
  39. package/dist/design/events.d.ts.map +1 -0
  40. package/dist/design/events.js +44 -0
  41. package/dist/design/events.js.map +1 -0
  42. package/dist/design/fingerprint.d.ts +10 -0
  43. package/dist/design/fingerprint.d.ts.map +1 -0
  44. package/dist/design/fingerprint.js +66 -0
  45. package/dist/design/fingerprint.js.map +1 -0
  46. package/dist/design/index-gen.d.ts +16 -0
  47. package/dist/design/index-gen.d.ts.map +1 -0
  48. package/dist/design/index-gen.js +94 -0
  49. package/dist/design/index-gen.js.map +1 -0
  50. package/dist/design/schema.d.ts +54 -0
  51. package/dist/design/schema.d.ts.map +1 -0
  52. package/dist/design/schema.js +408 -0
  53. package/dist/design/schema.js.map +1 -0
  54. package/dist/design/yaml.d.ts +12 -0
  55. package/dist/design/yaml.d.ts.map +1 -0
  56. package/dist/design/yaml.js +264 -0
  57. package/dist/design/yaml.js.map +1 -0
  58. package/dist/external.d.ts +61 -0
  59. package/dist/external.d.ts.map +1 -0
  60. package/dist/external.js +426 -0
  61. package/dist/external.js.map +1 -0
  62. package/dist/guide.d.ts +17 -0
  63. package/dist/guide.d.ts.map +1 -0
  64. package/dist/guide.js +219 -0
  65. package/dist/guide.js.map +1 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +7 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/install-external.d.ts +3 -0
  71. package/dist/install-external.d.ts.map +1 -0
  72. package/dist/install-external.js +37 -0
  73. package/dist/install-external.js.map +1 -0
  74. package/dist/library-install.d.ts +39 -0
  75. package/dist/library-install.d.ts.map +1 -0
  76. package/dist/library-install.js +663 -0
  77. package/dist/library-install.js.map +1 -0
  78. package/dist/orchestrator/boot.d.ts +3 -0
  79. package/dist/orchestrator/boot.d.ts.map +1 -0
  80. package/dist/orchestrator/boot.js +515 -0
  81. package/dist/orchestrator/boot.js.map +1 -0
  82. package/dist/orchestrator/cli.d.ts +37 -0
  83. package/dist/orchestrator/cli.d.ts.map +1 -0
  84. package/dist/orchestrator/cli.js +563 -0
  85. package/dist/orchestrator/cli.js.map +1 -0
  86. package/dist/orchestrator/commands.d.ts +46 -0
  87. package/dist/orchestrator/commands.d.ts.map +1 -0
  88. package/dist/orchestrator/commands.js +752 -0
  89. package/dist/orchestrator/commands.js.map +1 -0
  90. package/dist/orchestrator/compaction.d.ts +21 -0
  91. package/dist/orchestrator/compaction.d.ts.map +1 -0
  92. package/dist/orchestrator/compaction.js +93 -0
  93. package/dist/orchestrator/compaction.js.map +1 -0
  94. package/dist/orchestrator/drift.d.ts +11 -0
  95. package/dist/orchestrator/drift.d.ts.map +1 -0
  96. package/dist/orchestrator/drift.js +181 -0
  97. package/dist/orchestrator/drift.js.map +1 -0
  98. package/dist/orchestrator/errors.d.ts +52 -0
  99. package/dist/orchestrator/errors.d.ts.map +1 -0
  100. package/dist/orchestrator/errors.js +96 -0
  101. package/dist/orchestrator/errors.js.map +1 -0
  102. package/dist/orchestrator/frontmatter.d.ts +6 -0
  103. package/dist/orchestrator/frontmatter.d.ts.map +1 -0
  104. package/dist/orchestrator/frontmatter.js +50 -0
  105. package/dist/orchestrator/frontmatter.js.map +1 -0
  106. package/dist/orchestrator/fsx.d.ts +45 -0
  107. package/dist/orchestrator/fsx.d.ts.map +1 -0
  108. package/dist/orchestrator/fsx.js +295 -0
  109. package/dist/orchestrator/fsx.js.map +1 -0
  110. package/dist/orchestrator/handoff.d.ts +8 -0
  111. package/dist/orchestrator/handoff.d.ts.map +1 -0
  112. package/dist/orchestrator/handoff.js +246 -0
  113. package/dist/orchestrator/handoff.js.map +1 -0
  114. package/dist/orchestrator/hash.d.ts +10 -0
  115. package/dist/orchestrator/hash.d.ts.map +1 -0
  116. package/dist/orchestrator/hash.js +65 -0
  117. package/dist/orchestrator/hash.js.map +1 -0
  118. package/dist/orchestrator/journal.d.ts +35 -0
  119. package/dist/orchestrator/journal.d.ts.map +1 -0
  120. package/dist/orchestrator/journal.js +163 -0
  121. package/dist/orchestrator/journal.js.map +1 -0
  122. package/dist/orchestrator/lease.d.ts +31 -0
  123. package/dist/orchestrator/lease.d.ts.map +1 -0
  124. package/dist/orchestrator/lease.js +175 -0
  125. package/dist/orchestrator/lease.js.map +1 -0
  126. package/dist/orchestrator/plan.d.ts +27 -0
  127. package/dist/orchestrator/plan.d.ts.map +1 -0
  128. package/dist/orchestrator/plan.js +240 -0
  129. package/dist/orchestrator/plan.js.map +1 -0
  130. package/dist/orchestrator/report.d.ts +49 -0
  131. package/dist/orchestrator/report.d.ts.map +1 -0
  132. package/dist/orchestrator/report.js +244 -0
  133. package/dist/orchestrator/report.js.map +1 -0
  134. package/dist/orchestrator/state.d.ts +43 -0
  135. package/dist/orchestrator/state.d.ts.map +1 -0
  136. package/dist/orchestrator/state.js +369 -0
  137. package/dist/orchestrator/state.js.map +1 -0
  138. package/dist/orchestrator/store.d.ts +42 -0
  139. package/dist/orchestrator/store.d.ts.map +1 -0
  140. package/dist/orchestrator/store.js +202 -0
  141. package/dist/orchestrator/store.js.map +1 -0
  142. package/dist/orchestrator/test-hooks.d.ts +5 -0
  143. package/dist/orchestrator/test-hooks.d.ts.map +1 -0
  144. package/dist/orchestrator/test-hooks.js +31 -0
  145. package/dist/orchestrator/test-hooks.js.map +1 -0
  146. package/dist/orchestrator/time.d.ts +11 -0
  147. package/dist/orchestrator/time.d.ts.map +1 -0
  148. package/dist/orchestrator/time.js +38 -0
  149. package/dist/orchestrator/time.js.map +1 -0
  150. package/dist/paths.d.ts +9 -0
  151. package/dist/paths.d.ts.map +1 -0
  152. package/dist/paths.js +42 -0
  153. package/dist/paths.js.map +1 -0
  154. package/dist/pinned-source.d.ts +13 -0
  155. package/dist/pinned-source.d.ts.map +1 -0
  156. package/dist/pinned-source.js +238 -0
  157. package/dist/pinned-source.js.map +1 -0
  158. package/dist/reconcile/cli.d.ts +17 -0
  159. package/dist/reconcile/cli.d.ts.map +1 -0
  160. package/dist/reconcile/cli.js +171 -0
  161. package/dist/reconcile/cli.js.map +1 -0
  162. package/dist/reconcile/detectors.d.ts +29 -0
  163. package/dist/reconcile/detectors.d.ts.map +1 -0
  164. package/dist/reconcile/detectors.js +294 -0
  165. package/dist/reconcile/detectors.js.map +1 -0
  166. package/dist/reconcile/manifest.d.ts +11 -0
  167. package/dist/reconcile/manifest.d.ts.map +1 -0
  168. package/dist/reconcile/manifest.js +118 -0
  169. package/dist/reconcile/manifest.js.map +1 -0
  170. package/dist/reconcile/queue.d.ts +3 -0
  171. package/dist/reconcile/queue.d.ts.map +1 -0
  172. package/dist/reconcile/queue.js +723 -0
  173. package/dist/reconcile/queue.js.map +1 -0
  174. package/dist/reconcile/score.d.ts +19 -0
  175. package/dist/reconcile/score.d.ts.map +1 -0
  176. package/dist/reconcile/score.js +58 -0
  177. package/dist/reconcile/score.js.map +1 -0
  178. package/dist/scripts/check-opencode-config.d.ts +12 -0
  179. package/dist/scripts/check-opencode-config.d.ts.map +1 -0
  180. package/dist/scripts/check-opencode-config.js +216 -0
  181. package/dist/scripts/check-opencode-config.js.map +1 -0
  182. package/dist/scripts/check-pack.d.ts +3 -0
  183. package/dist/scripts/check-pack.d.ts.map +1 -0
  184. package/dist/scripts/check-pack.js +74 -0
  185. package/dist/scripts/check-pack.js.map +1 -0
  186. package/dist/scripts/check-pins.d.ts +9 -0
  187. package/dist/scripts/check-pins.d.ts.map +1 -0
  188. package/dist/scripts/check-pins.js +65 -0
  189. package/dist/scripts/check-pins.js.map +1 -0
  190. package/dist/scripts/check-security.d.ts +3 -0
  191. package/dist/scripts/check-security.d.ts.map +1 -0
  192. package/dist/scripts/check-security.js +47 -0
  193. package/dist/scripts/check-security.js.map +1 -0
  194. package/dist/scripts/check-skills-lock.d.ts +7 -0
  195. package/dist/scripts/check-skills-lock.d.ts.map +1 -0
  196. package/dist/scripts/check-skills-lock.js +36 -0
  197. package/dist/scripts/check-skills-lock.js.map +1 -0
  198. package/dist/scripts/check-skills-sync.d.ts +7 -0
  199. package/dist/scripts/check-skills-sync.d.ts.map +1 -0
  200. package/dist/scripts/check-skills-sync.js +146 -0
  201. package/dist/scripts/check-skills-sync.js.map +1 -0
  202. package/dist/scripts/check-yaml.d.ts +3 -0
  203. package/dist/scripts/check-yaml.d.ts.map +1 -0
  204. package/dist/scripts/check-yaml.js +41 -0
  205. package/dist/scripts/check-yaml.js.map +1 -0
  206. package/dist/scripts/publish-npm.d.ts +3 -0
  207. package/dist/scripts/publish-npm.d.ts.map +1 -0
  208. package/dist/scripts/publish-npm.js +67 -0
  209. package/dist/scripts/publish-npm.js.map +1 -0
  210. package/dist/scripts/release-check.d.ts +3 -0
  211. package/dist/scripts/release-check.d.ts.map +1 -0
  212. package/dist/scripts/release-check.js +97 -0
  213. package/dist/scripts/release-check.js.map +1 -0
  214. package/dist/scripts/support.d.ts +41 -0
  215. package/dist/scripts/support.d.ts.map +1 -0
  216. package/dist/scripts/support.js +78 -0
  217. package/dist/scripts/support.js.map +1 -0
  218. package/dist/targets/claude.d.ts +4 -0
  219. package/dist/targets/claude.d.ts.map +1 -0
  220. package/dist/targets/claude.js +42 -0
  221. package/dist/targets/claude.js.map +1 -0
  222. package/dist/targets/cline.d.ts +4 -0
  223. package/dist/targets/cline.d.ts.map +1 -0
  224. package/dist/targets/cline.js +39 -0
  225. package/dist/targets/cline.js.map +1 -0
  226. package/dist/targets/cursor.d.ts +4 -0
  227. package/dist/targets/cursor.d.ts.map +1 -0
  228. package/dist/targets/cursor.js +40 -0
  229. package/dist/targets/cursor.js.map +1 -0
  230. package/dist/targets/index.d.ts +4 -0
  231. package/dist/targets/index.d.ts.map +1 -0
  232. package/dist/targets/index.js +11 -0
  233. package/dist/targets/index.js.map +1 -0
  234. package/dist/targets/opencode.d.ts +4 -0
  235. package/dist/targets/opencode.d.ts.map +1 -0
  236. package/dist/targets/opencode.js +48 -0
  237. package/dist/targets/opencode.js.map +1 -0
  238. package/dist/targets/windsurf.d.ts +4 -0
  239. package/dist/targets/windsurf.d.ts.map +1 -0
  240. package/dist/targets/windsurf.js +41 -0
  241. package/dist/targets/windsurf.js.map +1 -0
  242. package/dist/types/common.d.ts +193 -0
  243. package/dist/types/common.d.ts.map +1 -0
  244. package/dist/types/common.js +6 -0
  245. package/dist/types/common.js.map +1 -0
  246. package/dist/types/design.d.ts +185 -0
  247. package/dist/types/design.d.ts.map +1 -0
  248. package/dist/types/design.js +3 -0
  249. package/dist/types/design.js.map +1 -0
  250. package/dist/types/guards.d.ts +13 -0
  251. package/dist/types/guards.d.ts.map +1 -0
  252. package/dist/types/guards.js +64 -0
  253. package/dist/types/guards.js.map +1 -0
  254. package/dist/types/handoff.d.ts +29 -0
  255. package/dist/types/handoff.d.ts.map +1 -0
  256. package/dist/types/handoff.js +3 -0
  257. package/dist/types/handoff.js.map +1 -0
  258. package/dist/types/index.d.ts +7 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +11 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/types/orchestrator.d.ts +414 -0
  263. package/dist/types/orchestrator.d.ts.map +1 -0
  264. package/dist/types/orchestrator.js +4 -0
  265. package/dist/types/orchestrator.js.map +1 -0
  266. package/dist/types/reconcile.d.ts +160 -0
  267. package/dist/types/reconcile.d.ts.map +1 -0
  268. package/dist/types/reconcile.js +3 -0
  269. package/dist/types/reconcile.js.map +1 -0
  270. package/docs/RECONCILE.md +505 -0
  271. package/docs/design/_schema.md +506 -0
  272. package/junamis-skills.yml +328 -0
  273. package/library/EXTERNAL.md +35 -0
  274. package/library/HANDOFF.md +93 -0
  275. package/library/RESUME.md +429 -0
  276. package/library/SAFETY.md +83 -0
  277. package/library/agents/context-keeper.md +41 -0
  278. package/library/agents/frontend.md +43 -0
  279. package/library/agents/maintainer.md +44 -0
  280. package/library/agents/nestjs.md +40 -0
  281. package/library/agents/nextjs.md +40 -0
  282. package/library/agents/operator.md +42 -0
  283. package/library/agents/orchestrator.md +313 -0
  284. package/library/agents/researcher.md +40 -0
  285. package/library/agents/reviewer.md +40 -0
  286. package/library/skills/db-migrate/SKILL.md +50 -0
  287. package/library/skills/decision-record/SKILL.md +74 -0
  288. package/library/skills/dependency-upgrade/SKILL.md +57 -0
  289. package/library/skills/deploy-verify/SKILL.md +51 -0
  290. package/library/skills/document/SKILL.md +51 -0
  291. package/library/skills/env-doctor/SKILL.md +65 -0
  292. package/library/skills/frontend/SKILL.md +63 -0
  293. package/library/skills/handoff/SKILL.md +79 -0
  294. package/library/skills/incident-response/SKILL.md +69 -0
  295. package/library/skills/nestjs/SKILL.md +49 -0
  296. package/library/skills/nextjs/SKILL.md +48 -0
  297. package/library/skills/perf-budget/SKILL.md +62 -0
  298. package/library/skills/refactor-safely/SKILL.md +48 -0
  299. package/library/skills/release-prep/SKILL.md +75 -0
  300. package/library/skills/research/SKILL.md +66 -0
  301. package/library/skills/rollback/SKILL.md +49 -0
  302. package/library/skills/route/SKILL.md +107 -0
  303. package/library/skills/route-external/SKILL.md +67 -0
  304. package/library/skills/security-audit/SKILL.md +64 -0
  305. package/library/skills/skill-author/SKILL.md +49 -0
  306. package/opencode.json +5906 -0
  307. package/package.json +88 -4
  308. package/scripts/design-registry.mjs +7 -0
  309. package/scripts/orchestrator-state.mjs +7 -0
  310. package/scripts/reconcile.mjs +7 -0
  311. package/skills-lock.json +197 -0
package/dist/color.js ADDED
@@ -0,0 +1,55 @@
1
+ // A tiny, dependency-free ANSI color helper.
2
+ //
3
+ // Nothing here decides policy about when color is safe except `colorsEnabled`,
4
+ // which follows the NO_COLOR convention, TERM=dumb, and TTY detection. Callers
5
+ // build one palette per run and pass `{ enabled }` down, so output stays plain
6
+ // in tests and in a pipe.
7
+ const ANSI = {
8
+ cyan: 36,
9
+ green: 32,
10
+ yellow: 33,
11
+ red: 31,
12
+ gray: 90,
13
+ bold: 1,
14
+ };
15
+ /** Wrap `text` in an ANSI SGR code, or return it unchanged when disabled. */
16
+ export function paint(code, text, options) {
17
+ if (!options.enabled)
18
+ return text;
19
+ return `\u001b[${code}m${text}\u001b[0m`;
20
+ }
21
+ /** Build a palette bound to one enabled/disabled decision. */
22
+ export function createColors(options) {
23
+ const colorize = (code) => (text) => paint(code, text, options);
24
+ return {
25
+ cyan: colorize(ANSI.cyan),
26
+ green: colorize(ANSI.green),
27
+ yellow: colorize(ANSI.yellow),
28
+ red: colorize(ANSI.red),
29
+ gray: colorize(ANSI.gray),
30
+ bold: colorize(ANSI.bold),
31
+ };
32
+ }
33
+ const ANSI_PATTERN = /\u001b\[[0-9;]*m/g;
34
+ /** Remove every ANSI SGR sequence from `text`. */
35
+ export function stripAnsi(text) {
36
+ return text.replace(ANSI_PATTERN, "");
37
+ }
38
+ /**
39
+ * Decide whether colored output is appropriate.
40
+ *
41
+ * NO_COLOR (any non-empty value) and TERM=dumb force color off. FORCE_COLOR=1
42
+ * forces it on. Otherwise color follows whether the stream is a TTY, so a
43
+ * captured pipe stays plain by default.
44
+ */
45
+ export function colorsEnabled(env = process.env, stream = process.stdout) {
46
+ const noColor = env["NO_COLOR"];
47
+ if (noColor !== undefined && noColor !== "")
48
+ return false;
49
+ if (env["TERM"] === "dumb")
50
+ return false;
51
+ if (env["FORCE_COLOR"] === "1")
52
+ return true;
53
+ return stream.isTTY === true;
54
+ }
55
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../src/color.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,0BAA0B;AAE1B,MAAM,IAAI,GAAG;IACX,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,CAAC;CACC,CAAC;AAQX,6EAA6E;AAC7E,MAAM,UAAU,KAAK,CAAC,IAAuB,EAAE,IAAY,EAAE,OAAqB;IAChF,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,UAAU,IAAI,IAAI,IAAI,WAAW,CAAC;AAC3C,CAAC;AAWD,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,OAAqB;IAChD,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAG,GAAiD,OAAO,CAAC,GAAG,EAC/D,MAAM,GAAc,OAAO,CAAC,MAAM;IAElC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1D,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const DESIGN_FILE_MODE = 420;
2
+ export declare function atomicWriteText(path: string, text: string): Promise<void>;
3
+ export declare function atomicWriteJson(path: string, value: unknown): Promise<void>;
4
+ //# sourceMappingURL=atomic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../src/design/atomic.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,MAAQ,CAAC;AAEtC,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF"}
@@ -0,0 +1,14 @@
1
+ // Atomic writes for the design registry.
2
+ //
3
+ // The protocol is the state engine's, reused rather than reimplemented:
4
+ // temp file in the same directory, fsync, rename over the target, fsync the
5
+ // parent directory.
6
+ import { atomicWriteFile } from "../orchestrator/fsx.js";
7
+ export const DESIGN_FILE_MODE = 0o644;
8
+ export async function atomicWriteText(path, text) {
9
+ await atomicWriteFile(path, text, { mode: DESIGN_FILE_MODE });
10
+ }
11
+ export async function atomicWriteJson(path, value) {
12
+ await atomicWriteText(path, `${JSON.stringify(value, null, 2)}\n`);
13
+ }
14
+ //# sourceMappingURL=atomic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../src/design/atomic.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,oBAAoB;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IAC9D,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAc;IAChE,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { BootstrapResult, BootstrapTarget, DesignKind } from "../types/design.js";
2
+ export declare function detectKind(dir: string, pkg?: Record<string, unknown> | null): Promise<DesignKind>;
3
+ export declare function discoverWorkspaces(projectRoot: string): Promise<string[]>;
4
+ export interface OverviewBodyInput {
5
+ readonly kind: DesignKind;
6
+ readonly app?: string | null;
7
+ readonly codePaths?: readonly string[];
8
+ readonly date: string;
9
+ readonly monorepo?: boolean;
10
+ }
11
+ export declare function overviewBody({ kind, app, codePaths, date, monorepo }: OverviewBodyInput): string;
12
+ export interface ProjectMapBodyInput {
13
+ readonly projectName: string;
14
+ readonly targets: readonly BootstrapTarget[];
15
+ readonly date: string;
16
+ }
17
+ export declare function projectMapBody({ projectName, targets, date }: ProjectMapBodyInput): string;
18
+ export interface BootstrapOptions {
19
+ readonly projectRoot: string;
20
+ readonly now?: string | null;
21
+ }
22
+ export declare function bootstrapRegistry({ projectRoot, now }: BootstrapOptions): Promise<BootstrapResult>;
23
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/design/bootstrap.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAoEvF,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmB7G;AA+CD,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe/E;AA6FD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,GAAU,EAAE,SAAc,EAAE,IAAI,EAAE,QAAgB,EAAE,EAAE,iBAAiB,GAAG,MAAM,CAUpH;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAKD,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAuB1F;AA+DD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,iBAAiB,CAAC,EAAE,WAAW,EAAE,GAAU,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2F/G"}
@@ -0,0 +1,411 @@
1
+ // Per-project and monorepo design registry bootstrap.
2
+ //
3
+ // The project root is the caller's cwd. The registry always lives at
4
+ // <projectRoot>/docs/design. A monorepo gets one draft overview per app or
5
+ // package, under a kind folder that reflects what the workspace actually is.
6
+ // A single project gets one draft overview under the detected kind.
7
+ //
8
+ // Bootstrap copies the package's normative schema when the project has none,
9
+ // creates _registry.json, and writes INDEX.md. It never overwrites an existing
10
+ // surface and never promotes a draft.
11
+ import { basename, join, relative, resolve } from "node:path";
12
+ import { fileURLToPath } from "node:url";
13
+ import { exists, listDir, readJsonFile, readText, statSafe } from "../orchestrator/fsx.js";
14
+ import { atomicWriteJson, atomicWriteText } from "./atomic.js";
15
+ import { headCommit, renderDesignFile } from "./delta.js";
16
+ import { writeIndex } from "./index-gen.js";
17
+ import { computeDesignChecksum, surfacePath, validateDesignText } from "./schema.js";
18
+ import { parseYaml } from "./yaml.js";
19
+ import { isRecord } from "../types/guards.js";
20
+ const WORKSPACE_DIRS = ["apps", "packages", "services", "libs", "plugins"];
21
+ const SOURCE_ROOTS = ["src", "bin", "scripts", "app", "pages", "lib"];
22
+ const WEB_DEPS = ["react", "next", "vue", "nuxt", "svelte", "@angular/core", "solid-js"];
23
+ const API_DEPS = ["@nestjs/core", "express", "fastify", "koa", "hapi"];
24
+ const DATA_DEPS = ["prisma", "@prisma/client", "drizzle-orm", "typeorm", "sequelize", "mongoose"];
25
+ const INFRA_FILES = ["Dockerfile", "docker-compose.yml", "docker-compose.yaml", "serverless.yml"];
26
+ const INFRA_DIRS = ["terraform", "k8s", "helm", "pulumi"];
27
+ function today(now) {
28
+ if (!now)
29
+ return new Date().toISOString().slice(0, 10);
30
+ const value = String(now).slice(0, 10);
31
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value))
32
+ throw new Error("--now must be a YYYY-MM-DD date");
33
+ return value;
34
+ }
35
+ function toPosix(path) {
36
+ return path.split("\\").join("/");
37
+ }
38
+ async function isDirectory(path) {
39
+ const stat = await statSafe(path);
40
+ return Boolean(stat?.isDirectory());
41
+ }
42
+ async function isFile(path) {
43
+ const stat = await statSafe(path);
44
+ return Boolean(stat?.isFile());
45
+ }
46
+ async function readPackage(dir) {
47
+ const parsed = await readJsonFile(join(dir, "package.json"));
48
+ if (!parsed.exists || parsed.error || !isRecord(parsed.value))
49
+ return null;
50
+ return parsed.value;
51
+ }
52
+ function depsOf(pkg, key) {
53
+ const value = pkg?.[key];
54
+ return isRecord(value) ? value : {};
55
+ }
56
+ function packageDependencies(pkg) {
57
+ return {
58
+ ...depsOf(pkg, "dependencies"),
59
+ ...depsOf(pkg, "devDependencies"),
60
+ ...depsOf(pkg, "peerDependencies"),
61
+ };
62
+ }
63
+ function hasDependency(deps, names) {
64
+ return names.some((name) => Object.prototype.hasOwnProperty.call(deps, name));
65
+ }
66
+ async function hasAnyDir(base, names) {
67
+ for (const name of names) {
68
+ if (await isDirectory(join(base, name)))
69
+ return true;
70
+ }
71
+ return false;
72
+ }
73
+ async function hasAnyFile(base, names) {
74
+ for (const name of names) {
75
+ if (await isFile(join(base, name)))
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ export async function detectKind(dir, pkg = null) {
81
+ const deps = packageDependencies(pkg);
82
+ if (hasDependency(deps, WEB_DEPS) || (await hasAnyDir(dir, ["app", "pages", "src/app", "src/pages"]))) {
83
+ return "web";
84
+ }
85
+ if (hasDependency(deps, API_DEPS) || (await hasAnyDir(dir, ["src/routes", "src/controllers", "api"]))) {
86
+ return "api";
87
+ }
88
+ if (hasDependency(deps, DATA_DEPS) || (await hasAnyDir(dir, ["prisma", "migrations", "db", "models"]))) {
89
+ return "data";
90
+ }
91
+ if ((await hasAnyFile(dir, INFRA_FILES)) || (await hasAnyDir(dir, INFRA_DIRS))) {
92
+ return "infra";
93
+ }
94
+ if (pkg?.["bin"] || (await hasAnyDir(dir, ["src/cli", "bin"]))) {
95
+ return "cli";
96
+ }
97
+ return "other";
98
+ }
99
+ async function workspacePatterns(projectRoot) {
100
+ const patterns = [];
101
+ const rootPackage = await readPackage(projectRoot);
102
+ const workspaces = rootPackage?.["workspaces"];
103
+ if (Array.isArray(workspaces)) {
104
+ patterns.push(...workspaces.filter((value) => typeof value === "string"));
105
+ }
106
+ else if (isRecord(workspaces) && Array.isArray(workspaces["packages"])) {
107
+ patterns.push(...workspaces["packages"].filter((value) => typeof value === "string"));
108
+ }
109
+ const pnpmText = await readText(join(projectRoot, "pnpm-workspace.yaml"));
110
+ if (pnpmText !== null) {
111
+ try {
112
+ const parsed = parseYaml(pnpmText, { label: "pnpm-workspace.yaml" });
113
+ if (isRecord(parsed) && Array.isArray(parsed["packages"])) {
114
+ patterns.push(...parsed["packages"].filter((value) => typeof value === "string"));
115
+ }
116
+ }
117
+ catch {
118
+ // A malformed workspace file is not a reason to refuse a bootstrap. The
119
+ // direct-directory scan below still finds conventional workspaces.
120
+ }
121
+ }
122
+ return patterns;
123
+ }
124
+ async function expandPattern(projectRoot, pattern) {
125
+ const cleaned = String(pattern).trim().replace(/^\.\//, "").replace(/\/+$/, "");
126
+ if (cleaned.length === 0 || cleaned.startsWith("!"))
127
+ return [];
128
+ if (cleaned.endsWith("/*") && !cleaned.slice(0, -2).includes("*")) {
129
+ const prefix = cleaned.slice(0, -2);
130
+ const entries = await listDir(join(projectRoot, prefix));
131
+ const out = [];
132
+ for (const entry of entries) {
133
+ if (!entry.isDirectory())
134
+ continue;
135
+ const relativeDir = `${prefix}/${entry.name}`;
136
+ if (await isFile(join(projectRoot, relativeDir, "package.json")))
137
+ out.push(relativeDir);
138
+ }
139
+ return out;
140
+ }
141
+ if (cleaned.includes("*"))
142
+ return [];
143
+ if (await isFile(join(projectRoot, cleaned, "package.json")))
144
+ return [cleaned];
145
+ return [];
146
+ }
147
+ export async function discoverWorkspaces(projectRoot) {
148
+ const dirs = new Set();
149
+ const patterns = await workspacePatterns(projectRoot);
150
+ for (const pattern of patterns) {
151
+ for (const dir of await expandPattern(projectRoot, pattern))
152
+ dirs.add(toPosix(dir));
153
+ }
154
+ for (const root of WORKSPACE_DIRS) {
155
+ const entries = await listDir(join(projectRoot, root));
156
+ for (const entry of entries) {
157
+ if (!entry.isDirectory())
158
+ continue;
159
+ const relativeDir = `${root}/${entry.name}`;
160
+ if (await isFile(join(projectRoot, relativeDir, "package.json")))
161
+ dirs.add(relativeDir);
162
+ }
163
+ }
164
+ return [...dirs].sort((a, b) => Buffer.compare(Buffer.from(a, "utf8"), Buffer.from(b, "utf8")));
165
+ }
166
+ function safeAppName(dir) {
167
+ const raw = basename(dir)
168
+ .toLowerCase()
169
+ .replace(/[^a-z0-9]+/g, "-")
170
+ .replace(/^-+|-+$/g, "");
171
+ return raw.length > 0 ? raw : "app";
172
+ }
173
+ async function discoverTargets(projectRoot) {
174
+ const workspaces = await discoverWorkspaces(projectRoot);
175
+ if (workspaces.length === 0) {
176
+ return [{ dir: ".", app: null, monorepo: false }];
177
+ }
178
+ const used = new Map();
179
+ return workspaces.map((dir) => {
180
+ const base = safeAppName(dir);
181
+ const count = used.get(base) ?? 0;
182
+ used.set(base, count + 1);
183
+ return {
184
+ dir,
185
+ app: count === 0 ? base : `${base}-${count + 1}`,
186
+ monorepo: true,
187
+ };
188
+ });
189
+ }
190
+ async function sourceRoots(projectRoot) {
191
+ const out = [];
192
+ for (const root of SOURCE_ROOTS) {
193
+ if (await isDirectory(join(projectRoot, root)))
194
+ out.push(`${root}/**`);
195
+ }
196
+ return out.length > 0 ? out : ["src/**"];
197
+ }
198
+ function section(title, content) {
199
+ return `## ${title}\n\n${content}`;
200
+ }
201
+ function table(headers, separator) {
202
+ return `${headers}\n${separator}\n| (none yet) |${" |".repeat(headers.split("|").length - 3)}`;
203
+ }
204
+ function kindSections(kind, subject) {
205
+ if (kind === "web") {
206
+ return [
207
+ section("Structure", `Describe the component tree and layout for ${subject}.`),
208
+ section("Routes", table("| path | component | auth | notes |", "|------|-----------|------|-------|")),
209
+ section("State & data", table("| name | source | shape | notes |", "|------|--------|-------|-------|")),
210
+ section("Props & events", table("| component | props | events |", "|-----------|-------|--------|")),
211
+ section("Accessibility", "Record the accessibility requirements and test status."),
212
+ ];
213
+ }
214
+ if (kind === "api") {
215
+ return [
216
+ section("Endpoint", "- Method: `TBD`\n- Path: `TBD`\n- Auth: `TBD`\n- Rate limit: `TBD`"),
217
+ section("Request", table("| field | in | type | required | notes |", "|-------|----|------|----------|-------|")),
218
+ section("Response — 200", table("| field | type | nullable | notes |", "|-------|------|----------|-------|")),
219
+ section("Errors", table("| status | code | meaning |", "|--------|------|---------|")),
220
+ section("Examples", "```json\n{}\n```"),
221
+ ];
222
+ }
223
+ if (kind === "data") {
224
+ return [
225
+ section("Entities", `Describe the entities owned by ${subject}.`),
226
+ section("Indexes", table("| name | columns | type |", "|------|---------|------|")),
227
+ section("Migrations", table("| id | applied | description |", "|----|---------|-------------|")),
228
+ ];
229
+ }
230
+ if (kind === "infra") {
231
+ return [
232
+ section("Topology", `Describe the named resources and their relations for ${subject}.`),
233
+ section("Resources", table("| name | type | spec | notes |", "|------|------|------|-------|")),
234
+ section("Env & secrets", table("| name | kind | source |", "|------|------|--------|")),
235
+ ];
236
+ }
237
+ if (kind === "cli") {
238
+ return [
239
+ section("Command", "`<tool> [args]`"),
240
+ section("Flags", table("| flag | type | default | notes |", "|------|------|---------|-------|")),
241
+ section("Output", "Describe stdout/stderr format and exit codes."),
242
+ ];
243
+ }
244
+ return [];
245
+ }
246
+ export function overviewBody({ kind, app = null, codePaths = [], date, monorepo = false }) {
247
+ const subject = monorepo && app ? `the ${app} workspace` : "this project";
248
+ const paths = codePaths.length > 0 ? codePaths.map((path) => `\`${path}\``).join(", ") : "no source path yet";
249
+ return [
250
+ section("Intent", `Describe the ${kind} surface for ${subject}. This draft is the overview that later page, endpoint, entity, or resource surfaces will split from.`),
251
+ section("Current state", `Draft overview created by the design registry bootstrap for ${subject}. It covers ${paths}. No behavior has been reviewed yet.`),
252
+ section("Known gaps", "- Split page, endpoint, entity, or resource surfaces out of this overview as work begins.\n- Confirm the surface boundary and owner."),
253
+ ...kindSections(kind, subject),
254
+ section("Change log", `- ${date} · v0.1.0 · Created draft overview · bootstrap · library/document`),
255
+ ].join("\n\n");
256
+ }
257
+ // The project-wide map is the entry point to the registry: it names every
258
+ // discovered target and links the reader to the per-surface docs. It is always
259
+ // a draft and never claims a code path of its own.
260
+ export function projectMapBody({ projectName, targets, date }) {
261
+ const rows = targets.map((target) => {
262
+ const paths = target.code_paths.length > 0
263
+ ? target.code_paths.map((path) => `\`${path}\``).join(", ")
264
+ : "(none)";
265
+ return `| \`${target.dir}\` | ${target.kind} | \`${target.surface_id}\` | ${paths} |`;
266
+ });
267
+ const state = [
268
+ `Project: \`${projectName}\`. Bootstrap discovered ${targets.length} target${targets.length === 1 ? "" : "s"}.`,
269
+ "",
270
+ "| workspace | kind | surface_id | code_paths |",
271
+ "|-----------|------|------------|------------|",
272
+ ...(rows.length > 0 ? rows : ["| `(root)` | other | - | (none) |"]),
273
+ ].join("\n");
274
+ return [
275
+ section("Intent", "This is the project-wide design map. Read it with `_schema.md`, `INDEX.md`, and the per-surface docs."),
276
+ section("Current state", state),
277
+ section("Known gaps", "- Confirm each target boundary and owner.\n- Split page, endpoint, entity, or resource surfaces out of the target overviews as work begins.\n- Fill in cross-target contracts."),
278
+ section("Change log", `- ${date} · v0.1.0 · Created the project-wide design map · bootstrap · library/document`),
279
+ ].join("\n\n");
280
+ }
281
+ function surfaceText({ surfaceId, kind, app, codePaths, body, date, commit }) {
282
+ const frontmatter = {
283
+ surface_id: surfaceId,
284
+ ...(app ? { app } : {}),
285
+ kind,
286
+ status: "draft",
287
+ version: "0.1.0",
288
+ owner: "library/document",
289
+ code_paths: codePaths,
290
+ depends_on: [],
291
+ related_tasks: [],
292
+ last_reviewed: date,
293
+ design_checksum: computeDesignChecksum(body, kind),
294
+ ...(commit ? { last_reviewed_commit: commit } : {}),
295
+ };
296
+ return renderDesignFile(frontmatter, body);
297
+ }
298
+ async function writeSurface({ designRoot, surfaceId, text, created, skipped }) {
299
+ const file = surfacePath(designRoot, surfaceId);
300
+ if (await exists(file)) {
301
+ skipped.push(surfaceId);
302
+ return false;
303
+ }
304
+ const validated = validateDesignText(text, { file, designRoot, requireChecksum: true });
305
+ if (!validated.ok) {
306
+ throw new Error(`bootstrap produced an invalid ${surfaceId}: ${validated.errors.join("; ")}`);
307
+ }
308
+ await atomicWriteText(file, text);
309
+ created.push(relative(designRoot, file).split("\\").join("/"));
310
+ return true;
311
+ }
312
+ async function ensureSchema(designRoot) {
313
+ const target = join(designRoot, "_schema.md");
314
+ if (await exists(target))
315
+ return false;
316
+ const source = fileURLToPath(new URL("../../docs/design/_schema.md", import.meta.url));
317
+ const text = await readText(source);
318
+ if (text === null)
319
+ throw new Error(`package design schema not found at ${source}`);
320
+ await atomicWriteText(target, text);
321
+ return true;
322
+ }
323
+ export async function bootstrapRegistry({ projectRoot, now = null }) {
324
+ if (typeof projectRoot !== "string" || projectRoot.length === 0) {
325
+ throw new Error("bootstrap needs a project root");
326
+ }
327
+ const root = resolve(projectRoot);
328
+ const designRoot = join(root, "docs", "design");
329
+ const date = today(now);
330
+ const commit = headCommit(root);
331
+ const created = [];
332
+ const skipped = [];
333
+ const targets = [];
334
+ const schemaCopied = await ensureSchema(designRoot);
335
+ const rootPackage = await readPackage(root);
336
+ const projectName = typeof rootPackage?.["name"] === "string" && rootPackage["name"].length > 0
337
+ ? rootPackage["name"]
338
+ : basename(root);
339
+ const discovered = await discoverTargets(root);
340
+ for (const target of discovered) {
341
+ const dir = target.dir === "." ? root : join(root, target.dir);
342
+ const pkg = await readPackage(dir);
343
+ const kind = await detectKind(dir, pkg);
344
+ const codePaths = target.monorepo ? [`${target.dir}/**`] : await sourceRoots(root);
345
+ const surfaceId = target.monorepo
346
+ ? `${kind}/${target.app}/overview`
347
+ : `${kind}/overview`;
348
+ const body = overviewBody({
349
+ kind,
350
+ app: target.app,
351
+ codePaths,
352
+ date,
353
+ monorepo: target.monorepo,
354
+ });
355
+ const text = surfaceText({
356
+ surfaceId,
357
+ kind,
358
+ app: target.app,
359
+ codePaths,
360
+ body,
361
+ date,
362
+ commit,
363
+ });
364
+ await writeSurface({ designRoot, surfaceId, text, created, skipped });
365
+ targets.push({
366
+ dir: target.dir,
367
+ app: target.app,
368
+ kind,
369
+ surface_id: surfaceId,
370
+ code_paths: codePaths,
371
+ });
372
+ }
373
+ const registryPath = join(designRoot, "_registry.json");
374
+ let registryCreated = false;
375
+ if (!(await exists(registryPath))) {
376
+ await atomicWriteJson(registryPath, { bootstrap_complete: false });
377
+ registryCreated = true;
378
+ }
379
+ // Every registry gets one project-wide map. It is written after the target
380
+ // overviews so its table can list them, and it is never rewritten when it
381
+ // already exists.
382
+ const projectMapSurfaceId = "other/project";
383
+ const projectMapText = surfaceText({
384
+ surfaceId: projectMapSurfaceId,
385
+ kind: "other",
386
+ app: null,
387
+ codePaths: [],
388
+ body: projectMapBody({ projectName, targets, date }),
389
+ date,
390
+ commit,
391
+ });
392
+ await writeSurface({
393
+ designRoot,
394
+ surfaceId: projectMapSurfaceId,
395
+ text: projectMapText,
396
+ created,
397
+ skipped,
398
+ });
399
+ const index = await writeIndex({ designRoot });
400
+ return {
401
+ created,
402
+ skipped,
403
+ schemaCopied,
404
+ registryCreated,
405
+ targets,
406
+ index: { path: index.path, generatedAt: index.generatedAt },
407
+ date,
408
+ commit,
409
+ };
410
+ }
411
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/design/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { DesignFingerprint } from "../types/design.js";
2
+ export interface DesignOptions {
3
+ json: boolean;
4
+ quiet: boolean;
5
+ write: boolean;
6
+ check: boolean;
7
+ project: string | null;
8
+ designRoot: string | null;
9
+ stateRoot: string | null;
10
+ surface: string | null;
11
+ codePath: string | null;
12
+ delta: string | null;
13
+ generatedAt: string | null;
14
+ now: string | null;
15
+ rest: string[];
16
+ }
17
+ export type DesignParsedArgs = {
18
+ readonly help: true;
19
+ } | {
20
+ readonly help: false;
21
+ readonly command: string;
22
+ readonly options: DesignOptions;
23
+ };
24
+ export interface DesignContext {
25
+ readonly projectRoot: string;
26
+ readonly designRoot: string;
27
+ readonly stateRoot: string;
28
+ readonly json: boolean;
29
+ readonly quiet: boolean;
30
+ readonly write: boolean;
31
+ readonly check: boolean;
32
+ readonly now: string | null;
33
+ readonly generatedAt: string | null;
34
+ readonly surface: string | null;
35
+ readonly codePath: string | null;
36
+ readonly delta: string | null;
37
+ readonly rest: readonly string[];
38
+ }
39
+ export interface DesignContextOptions {
40
+ readonly env?: NodeJS.ProcessEnv;
41
+ readonly cwd?: string;
42
+ }
43
+ export declare function resolveContext(options: DesignOptions, { env, cwd }?: DesignContextOptions): DesignContext;
44
+ export interface ValidateResult {
45
+ readonly status: string;
46
+ readonly count: number;
47
+ readonly files: readonly string[];
48
+ readonly errors: readonly string[];
49
+ }
50
+ export interface LoadSurfaceSummary {
51
+ readonly surface_id: string;
52
+ readonly app: string | null;
53
+ readonly kind: string | null;
54
+ readonly status: string | null;
55
+ readonly checksum: string | null;
56
+ readonly body: string | null;
57
+ }
58
+ export interface LoadResult {
59
+ readonly design_context?: string;
60
+ readonly surfaces?: readonly LoadSurfaceSummary[];
61
+ readonly surface_id?: string;
62
+ readonly frontmatter?: unknown;
63
+ readonly checksum?: string | null;
64
+ readonly body?: string | null;
65
+ }
66
+ export interface IndexCommandResult {
67
+ readonly check?: boolean;
68
+ readonly match?: boolean;
69
+ readonly path: string | null;
70
+ readonly generatedAt: string;
71
+ readonly surfaceCount: number;
72
+ readonly statusCounts: Record<string, number>;
73
+ readonly content: string;
74
+ readonly current?: string | null;
75
+ readonly exitCode?: number;
76
+ }
77
+ export interface FingerprintResult {
78
+ readonly designRegistry: DesignFingerprint | null;
79
+ readonly designRegistryFiles: Record<string, string> | null;
80
+ }
81
+ export interface DesignRunOptions {
82
+ readonly env?: NodeJS.ProcessEnv;
83
+ readonly cwd?: string;
84
+ }
85
+ export declare function run(argv: readonly string[], { env, cwd }?: DesignRunOptions): Promise<number>;
86
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/design/cli.ts"],"names":[],"mappings":"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"}