cohorte 3.0.0-dev.5 → 3.0.0-dev.7

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 (95) hide show
  1. package/assets/manifest.json +16 -6
  2. package/assets/prompts/agents/brainstormer.md +3 -0
  3. package/assets/prompts/agents/spec-author.md +3 -0
  4. package/assets/schemas/commands.schema.json +7 -0
  5. package/assets/schemas/config.schema.json +22 -0
  6. package/dist/bundle-manifest.json +72 -48
  7. package/dist/chunks/align-ds-r_X_1aQ_.mjs +93 -0
  8. package/dist/chunks/align-ds-r_X_1aQ_.mjs.map +1 -0
  9. package/dist/chunks/audit-B4ZWQ_DI.mjs +179 -0
  10. package/dist/chunks/audit-B4ZWQ_DI.mjs.map +1 -0
  11. package/dist/chunks/brainstorm-DasVwI1D.mjs +123 -0
  12. package/dist/chunks/brainstorm-DasVwI1D.mjs.map +1 -0
  13. package/dist/chunks/build-crOld8gE.mjs +19 -0
  14. package/dist/chunks/build-crOld8gE.mjs.map +1 -0
  15. package/dist/chunks/{catalogue-B5uFqfzJ.mjs → catalogue-IaCJdfB8.mjs} +4 -4
  16. package/dist/chunks/{catalogue-B5uFqfzJ.mjs.map → catalogue-IaCJdfB8.mjs.map} +1 -1
  17. package/dist/chunks/{compose-CKo_q39e.mjs → compose-DRKjQcn0.mjs} +42 -23
  18. package/dist/chunks/compose-DRKjQcn0.mjs.map +1 -0
  19. package/dist/chunks/{config-DefHA2Lw.mjs → config-Cqu5XQoP.mjs} +2 -2
  20. package/dist/chunks/{config-DefHA2Lw.mjs.map → config-Cqu5XQoP.mjs.map} +1 -1
  21. package/dist/chunks/{contract-BkMjU1kR.mjs → contract-DjssDPpS.mjs} +66 -26
  22. package/dist/chunks/contract-DjssDPpS.mjs.map +1 -0
  23. package/dist/chunks/{diff-D_0hBwHl.mjs → diff-Qw0II0sj.mjs} +2 -2
  24. package/dist/chunks/{diff-D_0hBwHl.mjs.map → diff-Qw0II0sj.mjs.map} +1 -1
  25. package/dist/chunks/{discover-BJMwXyGL.mjs → discover-BZPolSZG.mjs} +2 -2
  26. package/dist/chunks/{discover-BJMwXyGL.mjs.map → discover-BZPolSZG.mjs.map} +1 -1
  27. package/dist/chunks/{doctor-CginW8y8.mjs → doctor-DcDFPvQM.mjs} +6 -6
  28. package/dist/chunks/{doctor-CginW8y8.mjs.map → doctor-DcDFPvQM.mjs.map} +1 -1
  29. package/dist/chunks/fix-B_oGzGVn.mjs +82 -0
  30. package/dist/chunks/fix-B_oGzGVn.mjs.map +1 -0
  31. package/dist/chunks/fleet-yWHQY2ya.mjs +297 -0
  32. package/dist/chunks/fleet-yWHQY2ya.mjs.map +1 -0
  33. package/dist/chunks/{init-CP6puNbE.mjs → init--FxxkrcT.mjs} +2 -2
  34. package/dist/chunks/{init-CP6puNbE.mjs.map → init--FxxkrcT.mjs.map} +1 -1
  35. package/dist/chunks/intake-Dd1KVXnO.mjs +12 -0
  36. package/dist/chunks/intake-Dd1KVXnO.mjs.map +1 -0
  37. package/dist/chunks/loop-BWsUpyus.mjs +212 -0
  38. package/dist/chunks/loop-BWsUpyus.mjs.map +1 -0
  39. package/dist/chunks/{migrate-DybihKzZ.mjs → migrate-DuYCAbE3.mjs} +2 -2
  40. package/dist/chunks/{migrate-DybihKzZ.mjs.map → migrate-DuYCAbE3.mjs.map} +1 -1
  41. package/dist/chunks/obsidian-BHLkXx_H.mjs +235 -0
  42. package/dist/chunks/obsidian-BHLkXx_H.mjs.map +1 -0
  43. package/dist/chunks/patch-sAgVqjpx.mjs +50 -0
  44. package/dist/chunks/patch-sAgVqjpx.mjs.map +1 -0
  45. package/dist/chunks/{policy-Clypo20s.mjs → policy-Du7WVBFX.mjs} +4 -4
  46. package/dist/chunks/{policy-Clypo20s.mjs.map → policy-Du7WVBFX.mjs.map} +1 -1
  47. package/dist/chunks/{reconcile-czNaLOP6.mjs → reconcile-BHn66X3C.mjs} +3 -3
  48. package/dist/chunks/{reconcile-czNaLOP6.mjs.map → reconcile-BHn66X3C.mjs.map} +1 -1
  49. package/dist/chunks/refactor-CoNoqLZr.mjs +153 -0
  50. package/dist/chunks/refactor-CoNoqLZr.mjs.map +1 -0
  51. package/dist/chunks/retro-Dr-2RTNN.mjs +78 -0
  52. package/dist/chunks/retro-Dr-2RTNN.mjs.map +1 -0
  53. package/dist/chunks/review-ZsBqp3vZ.mjs +35 -0
  54. package/dist/chunks/review-ZsBqp3vZ.mjs.map +1 -0
  55. package/dist/chunks/{run-CgTWYlcd.mjs → run-NGAxdsIX.mjs} +28 -5
  56. package/dist/chunks/run-NGAxdsIX.mjs.map +1 -0
  57. package/dist/chunks/{schema-C9QbUW4H.mjs → schema-Bq9qtgsd.mjs} +9 -4
  58. package/dist/chunks/schema-Bq9qtgsd.mjs.map +1 -0
  59. package/dist/chunks/ship-BizfUe62.mjs +140 -0
  60. package/dist/chunks/ship-BizfUe62.mjs.map +1 -0
  61. package/dist/chunks/spec-C2h3U64g.mjs +65 -0
  62. package/dist/chunks/spec-C2h3U64g.mjs.map +1 -0
  63. package/dist/chunks/spec-path-tptqR7W8.mjs +10 -0
  64. package/dist/chunks/spec-path-tptqR7W8.mjs.map +1 -0
  65. package/dist/chunks/{src-r0ECB1UJ.mjs → src-Bfr1yzsn.mjs} +3 -3
  66. package/dist/chunks/{src-r0ECB1UJ.mjs.map → src-Bfr1yzsn.mjs.map} +1 -1
  67. package/dist/chunks/{src-DZazJCp1.mjs → src-CPW2_Ons.mjs} +101 -17
  68. package/dist/chunks/src-CPW2_Ons.mjs.map +1 -0
  69. package/dist/chunks/{src-CmFjh4M0.mjs → src-DNsLSxgm.mjs} +2 -2
  70. package/dist/chunks/{src-CmFjh4M0.mjs.map → src-DNsLSxgm.mjs.map} +1 -1
  71. package/dist/chunks/{src-DcU4IXMe.mjs → src-DbS9gkJy.mjs} +2 -2
  72. package/dist/chunks/{src-DcU4IXMe.mjs.map → src-DbS9gkJy.mjs.map} +1 -1
  73. package/dist/chunks/{src-s7YRvk0t.mjs → src-yi5whv3n.mjs} +4 -2
  74. package/dist/chunks/src-yi5whv3n.mjs.map +1 -0
  75. package/dist/chunks/update-pipeline-Du-Gu1Pl.mjs +56 -0
  76. package/dist/chunks/update-pipeline-Du-Gu1Pl.mjs.map +1 -0
  77. package/dist/cli.mjs +29 -18
  78. package/dist/cli.mjs.map +1 -1
  79. package/package.json +1 -1
  80. package/dist/chunks/brainstorm-BwKA6yZP.mjs +0 -7
  81. package/dist/chunks/brainstorm-BwKA6yZP.mjs.map +0 -1
  82. package/dist/chunks/compose-CKo_q39e.mjs.map +0 -1
  83. package/dist/chunks/contract-BkMjU1kR.mjs.map +0 -1
  84. package/dist/chunks/fix-D4Tj8RVA.mjs +0 -18
  85. package/dist/chunks/fix-D4Tj8RVA.mjs.map +0 -1
  86. package/dist/chunks/review-BDdjb6kB.mjs +0 -17
  87. package/dist/chunks/review-BDdjb6kB.mjs.map +0 -1
  88. package/dist/chunks/run-CgTWYlcd.mjs.map +0 -1
  89. package/dist/chunks/schema-C9QbUW4H.mjs.map +0 -1
  90. package/dist/chunks/ship-DTuLGoaJ.mjs +0 -19
  91. package/dist/chunks/ship-DTuLGoaJ.mjs.map +0 -1
  92. package/dist/chunks/spec-Bq0P3jVh.mjs +0 -20
  93. package/dist/chunks/spec-Bq0P3jVh.mjs.map +0 -1
  94. package/dist/chunks/src-DZazJCp1.mjs.map +0 -1
  95. package/dist/chunks/src-s7YRvk0t.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "manifestVersion": 1,
3
- "cohorteVersion": "3.0.0-dev.5",
3
+ "cohorteVersion": "3.0.0-dev.7",
4
4
  "algorithm": "sha256",
5
- "treeSha256": "b0988b7a3040d59aa44b1e5637dec54344b144c7991deac7b8e1f055aad8f2aa",
5
+ "treeSha256": "6c53a3c70941285ec350b879b77d54ebe2f7f50c869c6a9544d615efab4872b0",
6
6
  "files": [
7
7
  {
8
8
  "path": "migrations/config/README.md",
@@ -19,6 +19,11 @@
19
19
  "size": 743,
20
20
  "sha256": "f1cd0d36eb65f1a3fdfd86d4b4fbef94d01cb1c64c9b69777d3e3efe5fb0d8bf"
21
21
  },
22
+ {
23
+ "path": "prompts/agents/brainstormer.md",
24
+ "size": 283,
25
+ "sha256": "ce64dd294bf9d4e7c7109d33e8038550d9a0d01838c0ec42faf405714e947d49"
26
+ },
22
27
  {
23
28
  "path": "prompts/agents/fixer.md",
24
29
  "size": 437,
@@ -39,6 +44,11 @@
39
44
  "size": 376,
40
45
  "sha256": "081771595c2fcb4a7dfe61c484849efa30f39e33cb3ebe28120a0dc0d552562c"
41
46
  },
47
+ {
48
+ "path": "prompts/agents/spec-author.md",
49
+ "size": 293,
50
+ "sha256": "2c6b6a7bfffa444c59effec128e0d811b3abeecf9a870cd78e56ed60d4dcc628"
51
+ },
42
52
  {
43
53
  "path": "prompts/phases/build.md",
44
54
  "size": 286,
@@ -76,13 +86,13 @@
76
86
  },
77
87
  {
78
88
  "path": "schemas/commands.schema.json",
79
- "size": 23292,
80
- "sha256": "7e573865f4b201d22cea48327881d46e01fd5d7520374acbd3bd957b836706fd"
89
+ "size": 23504,
90
+ "sha256": "b03842d708295ebd1b29ea06da42c3813a1715fd6573b4b64db9dca2b4908f3a"
81
91
  },
82
92
  {
83
93
  "path": "schemas/config.schema.json",
84
- "size": 63320,
85
- "sha256": "8f8187f9eadce71291c8221f317d23911542774711023e958871af641867912c"
94
+ "size": 63784,
95
+ "sha256": "e48f1baff0aaec2f69c72efb58399e74126c047f6c5d727b224856f23401c1dd"
86
96
  },
87
97
  {
88
98
  "path": "schemas/doctor-report.schema.json",
@@ -0,0 +1,3 @@
1
+ # Brainstormer
2
+
3
+ Challenge the idea before implementation. Return a structured brief with the problem, users, desired outcome, non-goals, risks, open questions, acceptance hypotheses, and affected surfaces. Do not edit the repository. Use only evidence available in the task context.
@@ -0,0 +1,3 @@
1
+ # Spec author
2
+
3
+ Turn the reviewed brief into a precise, testable specification. State the observable behavior, contracts, data and security implications, affected surfaces, acceptance criteria, and explicit non-goals. Do not implement code. Do not silently resolve open questions; record them.
@@ -134,6 +134,13 @@
134
134
  }
135
135
  ]
136
136
  },
137
+ "surfaces": {
138
+ "type": "array",
139
+ "items": {
140
+ "type": "string",
141
+ "pattern": "^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$"
142
+ }
143
+ },
137
144
  "reviewTarget": {
138
145
  "anyOf": [
139
146
  {
@@ -2254,6 +2254,28 @@
2254
2254
  "type": "boolean"
2255
2255
  }
2256
2256
  }
2257
+ },
2258
+ "integrations": {
2259
+ "type": "object",
2260
+ "properties": {
2261
+ "obsidian": {
2262
+ "type": "object",
2263
+ "required": [
2264
+ "vaultPath",
2265
+ "board"
2266
+ ],
2267
+ "properties": {
2268
+ "vaultPath": {
2269
+ "type": "string",
2270
+ "minLength": 1
2271
+ },
2272
+ "board": {
2273
+ "type": "string",
2274
+ "minLength": 1
2275
+ }
2276
+ }
2277
+ }
2278
+ }
2257
2279
  }
2258
2280
  }
2259
2281
  }
@@ -3,102 +3,126 @@
3
3
  "agent-host.mjs.map": "6d988de47815f2a51d484a53708b57e3a653a89d9b0475318f0a03ffced7a31d",
4
4
  "chunks/__host-DgGPyco9.mjs": "dae3c5c218ed458777eb7623c4498c2fecd68b26835126fbff9cafbdaf8f465c",
5
5
  "chunks/__host-DgGPyco9.mjs.map": "7b176d8a1dcf578536ef3533ce5fe22312baf974a536f182d93dcae2b1200043",
6
+ "chunks/align-ds-r_X_1aQ_.mjs": "f6370a084617c014e8d617217988ca7d8401482bac3894aa0c7f9d501bd21bb3",
7
+ "chunks/align-ds-r_X_1aQ_.mjs.map": "79fde41c0d508456002c966ea5a1a005214972e3b02c658ba92e049452910d2b",
6
8
  "chunks/approve-Cv135UqI.mjs": "5792232a4f805005219dd2bc3717c0d4006fd5abc9904c0286141083e26ec2f1",
7
9
  "chunks/approve-Cv135UqI.mjs.map": "591ec1c955d716ff701ffc80547b35501637fe9394eb5e7f890573256ba58671",
10
+ "chunks/audit-B4ZWQ_DI.mjs": "43dff5842ccf9dc99894ac2c0712ba02b9813fea6c64d2fb1a4554cd9ca0773e",
11
+ "chunks/audit-B4ZWQ_DI.mjs.map": "930e31d0059e12f6b79d14d4141a5241c6b51d082636ad6e7d1f3205becd6619",
8
12
  "chunks/auth-BT5oVp76.mjs": "dc3e23b73b9315625cd6e6f29724b19cfbbc1a6e4f6ef8fb3bcb5043e4fa024d",
9
13
  "chunks/auth-BT5oVp76.mjs.map": "d2f9f55f7e62812dc5b51ed2c19e8868c2da10598f111b0e0efbdabdb1f2ff21",
10
14
  "chunks/auth-Dnlksuo5.mjs": "52a6f8492d257e2f2a0a616c83dbc45829340cc0bb49fa82229121f062b4c264",
11
15
  "chunks/auth-Dnlksuo5.mjs.map": "546c1e45dd5999a4d6dc51fdb6ab95b7409083d7b27e1581a7de8096da9e2382",
12
- "chunks/brainstorm-BwKA6yZP.mjs": "d462fe4cc908205599a49af9870ee1cc945e6bfa13006b60b15af838fafa41bd",
13
- "chunks/brainstorm-BwKA6yZP.mjs.map": "6ae68c1ea9b8fc80f08a33c08a2a5dbb5b1940119143b81cff400a233e0137fc",
16
+ "chunks/brainstorm-DasVwI1D.mjs": "2b73b82e3b6cafe7fa43a2f714eecd31d4bd778a7236fcdf757718863fd0c068",
17
+ "chunks/brainstorm-DasVwI1D.mjs.map": "82b566e60e098dbc676397a669b86c5d17709f45ba3b68987da7b6488a9b855d",
18
+ "chunks/build-crOld8gE.mjs": "ddf4d56e935f7a537a7b3ad7848eaaa7fb8419e1bd8cd1ea5603ad748e795ef4",
19
+ "chunks/build-crOld8gE.mjs.map": "4dc742cb216d9cb7ccc3978ec7c89620b8fc15db5e1c7d174c675a093da7b3f2",
14
20
  "chunks/cancel-KV_cpsqS.mjs": "a58787b67ff0e4e36f301f01bf683e7a39340fcc7a9f8201887afc250a248155",
15
21
  "chunks/cancel-KV_cpsqS.mjs.map": "d95aa4e6b9ba3388b200f834c124dab064eafb119b08aba8f69fea560643d7dc",
16
22
  "chunks/canonical-C8UxeEmB.mjs": "81de21827f9dcbb402599424cbbc0850bcfdf51eb71d7d6e9cf6fb094a40e17b",
17
23
  "chunks/canonical-C8UxeEmB.mjs.map": "7f683738f91a995f0181c224be62d6b13889dab16e308839329762c87f2244c1",
18
- "chunks/catalogue-B5uFqfzJ.mjs": "58716aede8cc56b09305edee2d48fdf1f57420fc492c763ae4e75de1b64bf70c",
19
- "chunks/catalogue-B5uFqfzJ.mjs.map": "bb796e82d4c7d03d6d8eb88d13f5cb90484aa5e532fce8908563ccc8e8957903",
20
- "chunks/compose-CKo_q39e.mjs": "e87ea5136fd05e85f27a64049cfc2478bb3dcc6d3aaa03167682218dc606e8ea",
21
- "chunks/compose-CKo_q39e.mjs.map": "e5280dc848439c0b7794e8f40c78c57c1de78fcaac2ec2126c6a7bf26af79ab6",
22
- "chunks/config-DefHA2Lw.mjs": "89695a150a5a9a9aa0c0091e3f6a3e2cb8c372ef5a10a51c7243a57ab5e20d4f",
23
- "chunks/config-DefHA2Lw.mjs.map": "a8d12fad50d509410461860ee41b92234a5021b43488a73fb510bd9cb2a79195",
24
- "chunks/contract-BkMjU1kR.mjs": "d9cea311263df193ec80357701d4a58cd5494954cf00b97d47440ce88fe3033e",
25
- "chunks/contract-BkMjU1kR.mjs.map": "d6d295ac3b9f240f30157c92ab14925be2ff5448494e83e4dc0294cfdd685267",
24
+ "chunks/catalogue-IaCJdfB8.mjs": "3ad7401993bc6ca2f1390b42ce187060cd06f3cd3eb74d9e4ff4c063c76d506b",
25
+ "chunks/catalogue-IaCJdfB8.mjs.map": "f23376ac4b722fd5c3d611a5087e04cead0f55cfbeac2ef747214125ea8e1240",
26
+ "chunks/compose-DRKjQcn0.mjs": "ec813441ff07d807eb203170cd57dbc9a1ea9ad37d25914c355b141f4b13bd8b",
27
+ "chunks/compose-DRKjQcn0.mjs.map": "12b61250f892bb17e79ee83b3829216fffa5d11aa01b2f7e2f31ac95fe16a804",
28
+ "chunks/config-Cqu5XQoP.mjs": "3499f83ab31e749bf834f2ef3a99b3fcb4d62e997b09c9a90a240f4c2c057f9b",
29
+ "chunks/config-Cqu5XQoP.mjs.map": "f5f03fa206812fc791fe1bc1f2f7bd7b056ba3c930e59ddb71c1f7ccaad5455d",
30
+ "chunks/contract-DjssDPpS.mjs": "277b44b673dde5bcef5f460f122ea16264f3eecb3d8f077d80382819e2e3cfdb",
31
+ "chunks/contract-DjssDPpS.mjs.map": "e82e4b9ebf104fed826eda39e0b5d37b35799019ce83d6b387c1b647632373b1",
26
32
  "chunks/contract-bQ9FJl4N.mjs": "17552c7a1df8d3b64df4b498bb5593b429b0404b48acf382a4ef3126efe0f9c7",
27
33
  "chunks/contract-bQ9FJl4N.mjs.map": "ae3848d143086a45de307396ed2c683e002efb3efa7b780d4a72222c29999807",
28
34
  "chunks/deny-ClTxSvHJ.mjs": "c15d9da9cd878b6d630db16db1c1ceac39768052e361e92326ed311254ae6efd",
29
35
  "chunks/deny-ClTxSvHJ.mjs.map": "d9e2562664a51cb652d35904de61354921adf3596b3f2de42316a70664c6f5f6",
30
- "chunks/diff-D_0hBwHl.mjs": "5dd7c2f0816aad91f44268c232341e5e798cf50c8754c5829165dc13c8c3c330",
31
- "chunks/diff-D_0hBwHl.mjs.map": "e60b18d708904de2926e5a60653bb4e74afe99a339f6289a77acf72561b49df2",
32
- "chunks/discover-BJMwXyGL.mjs": "6847f9d7d011c25b76ac397633df3b54760b71815b434e49ed88baee11d96140",
33
- "chunks/discover-BJMwXyGL.mjs.map": "f6f84635e5ee1462ddb431f2a15705ecf5e752b2193dad95de392275adcc58ec",
34
- "chunks/doctor-CginW8y8.mjs": "3f0d4b3962b92d7371b9ca245c8e8a67bd01f4689c18c7bdb884ee4bcc43737c",
35
- "chunks/doctor-CginW8y8.mjs.map": "d6d6cf03da48af9bd0e3bf0379c4082a0b9486d4f8f8a9c4514a82eeea50845f",
36
- "chunks/fix-D4Tj8RVA.mjs": "921fb776daf53262fce2e57c351c7412b68604cba3733779b7b1a27deaa29b90",
37
- "chunks/fix-D4Tj8RVA.mjs.map": "5526a0af1fc1de5f56b17b9794a87f3d56767f86f0800e24a82e93a82a1c4c8c",
36
+ "chunks/diff-Qw0II0sj.mjs": "9f04abefb2458fa3d04695354ad4a1f441f5c60259761a02c7349f1db9bcb834",
37
+ "chunks/diff-Qw0II0sj.mjs.map": "92d3e83f85953c7d6ad0c4e38711021096e134c545c2067a788491301b679777",
38
+ "chunks/discover-BZPolSZG.mjs": "8ddeeab7a4c5c40f131a9e1651e4a5d74844e3a607e0f091dcaf258ba2d3d889",
39
+ "chunks/discover-BZPolSZG.mjs.map": "396d11b9ccdc0b8fe879a1e5fcfbfb04c056c1916191ef15b5bd36165fff085b",
40
+ "chunks/doctor-DcDFPvQM.mjs": "d08f6ecc79b75cfb82a3b6f4c3145cbd9b35ae7431ff933f3d35e072e25d425d",
41
+ "chunks/doctor-DcDFPvQM.mjs.map": "7ee779e9419a358ab2444edde39b3338e638ffc4706e507acaf5d6cb789fac18",
42
+ "chunks/fix-B_oGzGVn.mjs": "406e603b6a515ab54cafbb4ee40e4cd2e96ed1f20d911bf12f780a7108c90619",
43
+ "chunks/fix-B_oGzGVn.mjs.map": "1e71f29617586213c43695b53ef30bf5031f074c7ccdb66752680b71a0e5eccc",
44
+ "chunks/fleet-yWHQY2ya.mjs": "2df278b37aadcb285fe929dfb0423ab07b8bd8c0dcd6a03168ab2001df64e11f",
45
+ "chunks/fleet-yWHQY2ya.mjs.map": "c18184e24858e9c26fbca4d94bb9bad8dce827e8e8bb77f0523197bd124ab752",
38
46
  "chunks/gc-BBXlBF5w.mjs": "8d5e39d1aee4be244d065c25ed7e43fcbf47218e241903c772f772bcf201b317",
39
47
  "chunks/gc-BBXlBF5w.mjs.map": "6358cd4f286770853e181b5c2aa8f02d05c7d8d5f0ec95a9a0b4a167edb43592",
40
- "chunks/init-CP6puNbE.mjs": "d1a80fb5458e9ccd0a5793c6060b6dd998760c191d7e08bce6ca724997df651b",
41
- "chunks/init-CP6puNbE.mjs.map": "dc60c45214a3130451f1403a1ee4b5e6ef2198c31867a3d853391f078f540304",
48
+ "chunks/init--FxxkrcT.mjs": "aef6b097fd17c660791fa371021adb0baf7288757477211cfa2c0f0194305a26",
49
+ "chunks/init--FxxkrcT.mjs.map": "df0af94f86e7238dc61dd195a7e7373840414a9e0a5d41646cb76093e08e674e",
42
50
  "chunks/inspect-Buby4cQD.mjs": "bc5b0fc2eb07d1baaaf9de9437d4a3f78ce8175b730c06e1e5eff8ac6f012a1f",
43
51
  "chunks/inspect-Buby4cQD.mjs.map": "2d14f18044a5a6626f3239ff845886c777d083b1e67c7d3154fccdfce4346e50",
52
+ "chunks/intake-Dd1KVXnO.mjs": "2ad8b276f1210bcc499b0595dc132dfb2ec006f9759c39dc47a35597efa67763",
53
+ "chunks/intake-Dd1KVXnO.mjs.map": "c7491d60d900c90018bfc14e991a7db6fc5c2a95f89771e1422a4b25afffa3f0",
44
54
  "chunks/logs-Giq5sUau.mjs": "9ab8d3b016b9f68b8881ebedcdb4dd1a5bf5da9e9a7e6d44d375a159e5f7bb8b",
45
55
  "chunks/logs-Giq5sUau.mjs.map": "3bc0a5b2d7d52c7b33e9f942595486444b17c8105b495d43b4e77ccb69545bb5",
46
- "chunks/migrate-DybihKzZ.mjs": "b99e202a99e4fff8850ff03678e3c4c7440a5596b1b93a425986c19a6b693a51",
47
- "chunks/migrate-DybihKzZ.mjs.map": "31417468b7bdc6b2306668a2128652f75350e9598b4a0e3e0e3554d80785c543",
56
+ "chunks/loop-BWsUpyus.mjs": "4cad29a23228663b6943887f8752e2012b1488f439da922b09cc347f2a4f64d0",
57
+ "chunks/loop-BWsUpyus.mjs.map": "d73da30f37a612c520215641b310a4444f223d82eea19749c6d504b10b90e82b",
58
+ "chunks/migrate-DuYCAbE3.mjs": "2765e4a4b6ac6d4a08036848615ee4bf678eebfc839e5c3ea5edcc5d3046288c",
59
+ "chunks/migrate-DuYCAbE3.mjs.map": "b439a187ee057b5028a5c2a2365b4e6c2a0bc615c874346f53ce3ba5f2f82d3a",
48
60
  "chunks/models-Btp6X2YZ.mjs": "13e8ec4e472714e61ee09dfe3c8dc3bc3bb4e5ce1c4d31ac8f19ebc6a8cfa1a2",
49
61
  "chunks/models-Btp6X2YZ.mjs.map": "2973e5a7d3cf68f2006df821da5458f62ab892b7a79b1003a200f4cd07b446b8",
62
+ "chunks/obsidian-BHLkXx_H.mjs": "d750a47b82c26feaeb144c738a0f09c2957a88432090ac012965f82b4d9d271a",
63
+ "chunks/obsidian-BHLkXx_H.mjs.map": "e162a3efd13a8d728ca93e336b54be441fc0c727410f2a18378884bfc3e69241",
64
+ "chunks/patch-sAgVqjpx.mjs": "72fa381388c007260ad5c3fedb173c8620a2abb2d56a0ca825afec6cc4a8dfcd",
65
+ "chunks/patch-sAgVqjpx.mjs.map": "ce843318e3b19c08d0f60c60dd829117e8bee6ed8bfd054e6c8308633a3223d0",
50
66
  "chunks/pause-BASBfKLO.mjs": "f689005d4da154c6ecaabc8219879506353227cd54e5cbb966f820b5404d1572",
51
67
  "chunks/pause-BASBfKLO.mjs.map": "c4a5e4acea758923384e6cead9a04cf4c72bfd3c143d36b5b5f193282a643099",
52
- "chunks/policy-Clypo20s.mjs": "95dfe7d213c8c553d8c6487f16335b6ef92496f492d8da815dcb2a15a3c6df2c",
53
- "chunks/policy-Clypo20s.mjs.map": "8decec17a5147e058b843b1237ab12c2bbd18505aa62ee59f17c62ecde095389",
68
+ "chunks/policy-Du7WVBFX.mjs": "27df4a286f119bec614464d2d59ba76af09b5dc1ea28d4fa41f6ecb65b493693",
69
+ "chunks/policy-Du7WVBFX.mjs.map": "475f823bbaa898beefcf6eaf5514bb779aa53de22bee5687118f9e0cafa05d7a",
54
70
  "chunks/providers-Dx78imKj.mjs": "08b94fa141f4d4a13258304f441a0e8f29dc6b103107c031a7fa1c9357e5aaba",
55
71
  "chunks/providers-Dx78imKj.mjs.map": "a57182df4581da66ce5d02d852d3f083d7752801290918342dd6094acb959576",
56
- "chunks/reconcile-czNaLOP6.mjs": "88894aea04139b31e039b2d21d19b0378c7aa26f64e45afc18276ec047dcf78b",
57
- "chunks/reconcile-czNaLOP6.mjs.map": "127e89bb0015bb8abb4710909c51996598a8b0ca8f5e9d165b05e319c457c2b6",
72
+ "chunks/reconcile-BHn66X3C.mjs": "80a63fbf5917ac7743239e81f22a1a5f248b4dc95c28c136a393bac6d74b474b",
73
+ "chunks/reconcile-BHn66X3C.mjs.map": "bc900c4b21386388eccc88b279b703925638d7b6e0d3e562ee37ae1a014e3682",
74
+ "chunks/refactor-CoNoqLZr.mjs": "346cd3f160d757dda714e2e2ca6a11e388dd6879700ac3a75092cf307c0f179e",
75
+ "chunks/refactor-CoNoqLZr.mjs.map": "8d1a1f2129569ea479db0d4aab56cd87ed2987545622ec68a642bf03c549a3f6",
58
76
  "chunks/render-DyZr5Lgi.mjs": "8d4c9b51ad6048e11cdbc7338cb7d07abe7b7814fe5e14f8428d802fc1b978a5",
59
77
  "chunks/render-DyZr5Lgi.mjs.map": "831346f7b83596ab50faa0e592926c41268de624ba52ec3bebedbaf25fd425b4",
60
78
  "chunks/resume-GJQRb2Eb.mjs": "5688498415a41acada1a0a98cbbd800ee0b0ca4552b484b46328f54cb7f6339a",
61
79
  "chunks/resume-GJQRb2Eb.mjs.map": "d1dcddd36684809ec3a1098142a76cb2e6a3e25f6fb57e899742d5c9dbcbbd9a",
80
+ "chunks/retro-Dr-2RTNN.mjs": "a3976b816e836192ff62861fdcfbe6f4dd96d0fc9086adbaee49c47d9849664a",
81
+ "chunks/retro-Dr-2RTNN.mjs.map": "cb5c10d2c2cae2ec8771ec6ba9b4c2fda4ee94d0b26787507fb6fa648fee311c",
62
82
  "chunks/retry-CLrUem1H.mjs": "be894519da0175f5bd5b818a6dc6a52d569a49f3552d381ae4197c9907e7894b",
63
83
  "chunks/retry-CLrUem1H.mjs.map": "a060e5390b03042ff85d68e7c341f4e42df139d534ec80eb9af041c22f889e63",
64
- "chunks/review-BDdjb6kB.mjs": "26f842e54fd2c5cbd1c96bf4215471ce0f72332a0467f54a50070bd26e0b1e8c",
65
- "chunks/review-BDdjb6kB.mjs.map": "b40557329960a3e3ee44d4f9b8b65ccb1de68e3c7dec9c5b0a0b317126de3f39",
66
- "chunks/run-CgTWYlcd.mjs": "0ebb291b91d46e65f962d9104080e2999e1899a2854a671862d5401e532bf4e5",
67
- "chunks/run-CgTWYlcd.mjs.map": "f94f688ffad696d05e72d7e6b3504c256f9724d82ef569c81d6736126fc54f7a",
84
+ "chunks/review-ZsBqp3vZ.mjs": "977b0e0e1006ffa23c042247de58e6d6ea69dd1a23d65fe110c8585909ce574d",
85
+ "chunks/review-ZsBqp3vZ.mjs.map": "40e858ee0bac1b347e4b07f06a70ef1445c2b9ff0b0c6a7793db682259d86b14",
86
+ "chunks/run-NGAxdsIX.mjs": "ded64a643af765afd0720a7d27d6084d5b7eb4ead7a57fca6dd1800f10598826",
87
+ "chunks/run-NGAxdsIX.mjs.map": "48d4902b5dfc4e3a45d1015480689a20d4d286bcf34f105bcb8d365e2c612aa8",
68
88
  "chunks/run-tool-C3rAv4XF.mjs": "d2f87bc9b0e51b20fe0c96b98b2606e4d475e3e8e7e607da30848f6f72d8776d",
69
89
  "chunks/run-tool-C3rAv4XF.mjs.map": "fd8f084a10550f3cedbc1e5c0269e624af28d6c6283592b4e893c74b67911a55",
70
90
  "chunks/scan-C5uDr7Yq.mjs": "d7f51a0929a093b4c80866396503391bf696909ef9f09315be15ce082f9cd66e",
71
91
  "chunks/scan-C5uDr7Yq.mjs.map": "06996ed06056ce63015993154c1252a6c957c6c5e8286809bda1be37eef8c0b3",
72
- "chunks/schema-C9QbUW4H.mjs": "b736be59e13bc85157479a7fb16da8e12472bc3b997abe7e640e6beb23c04a09",
73
- "chunks/schema-C9QbUW4H.mjs.map": "f9780d35d9808d16b1e714e80ce5cab8d74f62cf462f0e8a3344cd2d54939975",
92
+ "chunks/schema-Bq9qtgsd.mjs": "2f975e7a84a0a9547dcc1775ddd909f8309bc764193b1bfcc0e588f5a6a8da57",
93
+ "chunks/schema-Bq9qtgsd.mjs.map": "3efef87f8ab419a7b9ef5d7217c2fa95650b4df8b42f7c7238ec5c94b710df6b",
74
94
  "chunks/send-BdnJ85Nz.mjs": "9ec95330632def69298e57b32a095165a92106f9958b7054cc6802191e58b0cd",
75
95
  "chunks/send-BdnJ85Nz.mjs.map": "f2d81cc6ffc8dc0c9f9873fe7faf5695ad26f0dad3fbbac2460a4baf09949d3b",
76
- "chunks/ship-DTuLGoaJ.mjs": "eeaca57bba994a21644c3c27762d560f7223b2bc9b43bf0469650b433dce50fa",
77
- "chunks/ship-DTuLGoaJ.mjs.map": "41b2ad127b53b08a45f35b78f43726f4a2fa1c4f0f2887f62fcf50fbbb27e218",
96
+ "chunks/ship-BizfUe62.mjs": "cdc435ae5299fb616ab7affd01aee6074ebe8fa17124f87734e9a55da2452b76",
97
+ "chunks/ship-BizfUe62.mjs.map": "88758f9ea08404061d00d4fa3bdd2e863d7911389822a6eb5c2755f692366d62",
78
98
  "chunks/shutdown-BM92Iyv2.mjs": "aa1e4d08e8ccab3ecdd3cbccfa72719fa517796712d4a6b8fc14e418e67fc95c",
79
99
  "chunks/shutdown-BM92Iyv2.mjs.map": "8801fb8ecea02a9839146daff821ec0e43249ef1b6337cf2223069814daacf1b",
80
100
  "chunks/skip-DZG5kpcH.mjs": "44944eaf67e41143dc37f32c606c4de52d00df95ffcb039d5fce81c0cb5bcb6c",
81
101
  "chunks/skip-DZG5kpcH.mjs.map": "77fcc41d0188d23b5ad17321258beb24b90bcd7aad80c6f952b23317e06ba2cd",
82
- "chunks/spec-Bq0P3jVh.mjs": "08674514e132059f6ddc67b0f92edbf44ad5e3ad65811a7957d85b13fc0deaea",
83
- "chunks/spec-Bq0P3jVh.mjs.map": "9746f35b366ec599dc920cc56977832b17612fdd9e6b13c2b2f2eabd0f03f4d1",
84
- "chunks/src-CmFjh4M0.mjs": "3b904a86c1f26746f4b1483a563dee68bc26d4b4b42a5498954a563e16bd5a52",
85
- "chunks/src-CmFjh4M0.mjs.map": "5f9110f9a53f07d27413388b8ab48eb6cad3bdfb1ae160fac6d3b59d45b3d2af",
102
+ "chunks/spec-C2h3U64g.mjs": "ad98789d244db01d113e0ba67fa9dda755750fdc54f2fd9a51e5ce50da2d343a",
103
+ "chunks/spec-C2h3U64g.mjs.map": "444415f15c93320a63db9e15c84e414f2d661753b5c2a6244efb413f73a45241",
104
+ "chunks/spec-path-tptqR7W8.mjs": "645c2e7fb223e3aa28eef1f1fe3b07ea04fba10c94bb581ba4a7f3a91c3b2ff3",
105
+ "chunks/spec-path-tptqR7W8.mjs.map": "8cab0561f9562523b3e09f246471b01a6119202336ad63a2cbb42b646939cc97",
106
+ "chunks/src-Bfr1yzsn.mjs": "0dbd907c86c071723409ab96ab5f6bf7207864e53e2cf3086fba6b3a3f7366a6",
107
+ "chunks/src-Bfr1yzsn.mjs.map": "37bdda5d92f20eeaaa1d497f5b9886fb3c85147987b692cf96c2570706e7115e",
108
+ "chunks/src-CPW2_Ons.mjs": "b18dc5300b9acb252b8d0cb9641570dc36dca9889806b7f46eac1f3068978294",
109
+ "chunks/src-CPW2_Ons.mjs.map": "6fd432e66340c5944db992ba282248b1acecae3a0a1d7205a5ec2f5842c2ec91",
86
110
  "chunks/src-Cu3TxNob.mjs": "462fa47682c4613351dea593a703bed0e098f9d2753f527d1878fb041ce00481",
87
111
  "chunks/src-Cu3TxNob.mjs.map": "c7ee88bb5230c2132a16bfd156bb849644e9ab5b3da4fdfd22191dd7d943a792",
88
- "chunks/src-DZazJCp1.mjs": "861aeb557fef7fb1103e66ccc6dfa82470e6e6fd8a5b5620c3880f8630b450a9",
89
- "chunks/src-DZazJCp1.mjs.map": "9ac557ccc7a72d020ff48d4dfd24a8f8c2fbdad009ec074506a9c105be513f77",
90
- "chunks/src-DcU4IXMe.mjs": "652f7db3cf70f79c7194d03382176c60cc5ddc745bd68619b95efff1a2e95adc",
91
- "chunks/src-DcU4IXMe.mjs.map": "6a266ea715e71c303de472458d15a4c8f284dc0a212773d86426da5318fd1b88",
92
- "chunks/src-r0ECB1UJ.mjs": "94b7580d1eb852c1c5c3681c8322132617913a76b56e5ea0bde0cbcb96700a87",
93
- "chunks/src-r0ECB1UJ.mjs.map": "e7792478b0f36fda418bf082352f116fe64206ae125ac5a95d43bede9677a0d5",
94
- "chunks/src-s7YRvk0t.mjs": "54f73aae29cf07720cefded111799db4f1668b7cb66f847490f9a02f5b39fbb2",
95
- "chunks/src-s7YRvk0t.mjs.map": "c1b77cf4696d58dcea0b568a52e4dc123dca57df48c593eceaaa53c21e53466a",
112
+ "chunks/src-DNsLSxgm.mjs": "39b53c130819b5f52777c828fc0fe440f033a14a5a1d3fe228340adabb0933ac",
113
+ "chunks/src-DNsLSxgm.mjs.map": "20aaa34d0fe442de7a133bf1ecbe4eb6391f7b9d5cbd75575d9b44e975ba66db",
114
+ "chunks/src-DbS9gkJy.mjs": "b2de05577678109ae060bf8503d632edf26ac16f656b69e7d50c234f717ae473",
115
+ "chunks/src-DbS9gkJy.mjs.map": "1f8cc4fb914f38f7f0a8513941caa131d5f81c2d3e8a7fa4d11d905c33cc6888",
116
+ "chunks/src-yi5whv3n.mjs": "d128a999de312d12f1a6981c0ed619233617a5047e6eb7678ea51852be996cd2",
117
+ "chunks/src-yi5whv3n.mjs.map": "41179aa1d6ea3770eb17386290e5caa18ad4bb08e2c376d0a0bc0f523393fe66",
96
118
  "chunks/status-SMjiOMYy.mjs": "01c0dbc2fd6573bfb5134de328b6df1d6631e4a8f47fd65da56e16375e73f63f",
97
119
  "chunks/status-SMjiOMYy.mjs.map": "0d6c69794a939d83a7d296e10669c707edeb271678bc3fd91d8f7099ca3e0161",
98
120
  "chunks/tail-BuhT-2PH.mjs": "674e19acf0865fb93d5f71826f7f5c29903116b2372b9877011f3bc24428d05b",
99
121
  "chunks/tail-BuhT-2PH.mjs.map": "5d44106e9044ca20a281f499d543c1f1955007a97f5427ee89550c3bbd129725",
100
122
  "chunks/update-BXIppsbi.mjs": "0207788cf68937696d41f94ed082c823ae0782e6afc624e741d35015879bd0d9",
101
123
  "chunks/update-BXIppsbi.mjs.map": "ef6972b3c42b9abd0e7dcc12b6e92ecfd980bfe5cf2a304138fd4afca6ec3adc",
102
- "cli.mjs": "a0df03736e00146707bfab757d39c8746dc530b8c0a3e0666018ba5bea20d947",
103
- "cli.mjs.map": "5918136809ab4e4d653d5bf36dbe57117d35137db52405fe741737624967f151"
124
+ "chunks/update-pipeline-Du-Gu1Pl.mjs": "820c09282249c9ea241de05bd8ade83fa5fc3e7b9a230d8a8a12c59daa442116",
125
+ "chunks/update-pipeline-Du-Gu1Pl.mjs.map": "16ce3e605d68be2dfeb77ce2763329fd0f10c07adf87d0050740c042832c8783",
126
+ "cli.mjs": "69c012d8dc821cbc21f2795914d6d0aaf79f6b4f61372ad293e7abcf0ffbb14d",
127
+ "cli.mjs.map": "00aec3e28efa8ff3a79859220d2cda35f89390cabeaa215086ac932e50d616d5"
104
128
  }
@@ -0,0 +1,93 @@
1
+ import { createHash } from "node:crypto";
2
+ import { access, cp, readFile, readdir } from "node:fs/promises";
3
+ import { join, relative, resolve } from "node:path";
4
+ import { parse } from "yaml";
5
+ //#region src/commands/align-ds/index.ts
6
+ const exists = async (path) => {
7
+ try {
8
+ await access(path);
9
+ return true;
10
+ } catch {
11
+ return false;
12
+ }
13
+ };
14
+ const walk = async (root, dir = root) => {
15
+ const out = [];
16
+ for (const e of await readdir(dir, { withFileTypes: true })) {
17
+ const p = join(dir, e.name);
18
+ if (e.isDirectory()) out.push(...await walk(root, p));
19
+ else if (e.isFile()) out.push(relative(root, p));
20
+ }
21
+ return out;
22
+ };
23
+ const alignDs = {
24
+ verb: "align-ds",
25
+ async run(ctx, args) {
26
+ let profile = {};
27
+ try {
28
+ const source = await readFile(join(ctx.cwd, "PIPELINE.md"), "utf8");
29
+ const match = /```yaml pipeline-profile\s*\n([\s\S]*?)\n```/u.exec(source);
30
+ profile = match?.[1] ? parse(match[1]) ?? {} : {};
31
+ } catch {}
32
+ const design = profile.design && typeof profile.design === "object" ? profile.design : {};
33
+ if (design.enabled !== true) {
34
+ ctx.stdio.stdout.write("design system disabled; nothing to align\n");
35
+ return 0;
36
+ }
37
+ const snapshot = typeof design.snapshot_dir === "string" ? resolve(ctx.cwd, design.snapshot_dir) : void 0;
38
+ const liveSource = typeof design.live_snapshot_dir === "string" ? resolve(ctx.cwd, design.live_snapshot_dir) : snapshot;
39
+ const uiKit = typeof design.ui_kit_path === "string" ? resolve(ctx.cwd, design.ui_kit_path) : void 0;
40
+ const tokens = typeof design.tokens_path === "string" ? resolve(ctx.cwd, design.tokens_path) : void 0;
41
+ if (!snapshot || !liveSource || !uiKit || !tokens) {
42
+ ctx.stdio.stderr.write("design system enabled but snapshot_dir, ui_kit_path and tokens_path are required\n");
43
+ return 10;
44
+ }
45
+ if (!await exists(liveSource) || !await exists(snapshot) || !await exists(uiKit) || !await exists(tokens)) {
46
+ ctx.stdio.stderr.write("design system paths are missing; configure a live source, committed snapshot and code targets\n");
47
+ return 10;
48
+ }
49
+ const files = (await walk(liveSource)).filter((file) => file !== "README.md");
50
+ const missing = [];
51
+ const changed = [];
52
+ for (const file of files) {
53
+ const source = await readFile(join(liveSource, file));
54
+ try {
55
+ const target = await readFile(join(snapshot, file));
56
+ if (createHash("sha256").update(source).digest("hex") !== createHash("sha256").update(target).digest("hex")) changed.push(file);
57
+ } catch {
58
+ missing.push(file);
59
+ }
60
+ try {
61
+ const target = await readFile(join(uiKit, file));
62
+ if (createHash("sha256").update(source).digest("hex") !== createHash("sha256").update(target).digest("hex")) changed.push(file);
63
+ } catch {
64
+ if (!missing.includes(file)) missing.push(file);
65
+ }
66
+ }
67
+ const snapshotSet = new Set(files);
68
+ const removed = (await walk(snapshot)).filter((file) => !snapshotSet.has(file));
69
+ const uniqueMissing = [...new Set(missing)];
70
+ const uniqueChanged = [...new Set(changed)];
71
+ const result = {
72
+ source: liveSource,
73
+ snapshot,
74
+ uiKit,
75
+ tokens,
76
+ files,
77
+ missing: uniqueMissing,
78
+ changed: uniqueChanged,
79
+ removed,
80
+ delta: uniqueMissing.length + uniqueChanged.length
81
+ };
82
+ if (args.positionals.includes("--apply")) {
83
+ for (const file of [...uniqueMissing, ...uniqueChanged]) await cp(join(liveSource, file), join(snapshot, file), { recursive: true });
84
+ for (const file of [...uniqueMissing, ...uniqueChanged]) await cp(join(liveSource, file), join(uiKit, file), { recursive: true });
85
+ ctx.stdio.stdout.write(`aligned ${result.delta} design-system file(s); ${removed.length} stale file(s) reported\n`);
86
+ } else ctx.stdio.stdout.write(`${args.json ? JSON.stringify(result) : `${result.delta} design-system file(s) require alignment; ${removed.length} stale file(s)`}\n`);
87
+ return 0;
88
+ }
89
+ };
90
+ //#endregion
91
+ export { alignDs as default };
92
+
93
+ //# sourceMappingURL=align-ds-r_X_1aQ_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align-ds-r_X_1aQ_.mjs","names":[],"sources":["../../../../apps/cli/src/commands/align-ds/index.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { access, cp, readdir, readFile } from 'node:fs/promises';\nimport { join, relative, resolve } from 'node:path';\nimport { parse } from 'yaml';\nimport type { CommandModule } from '../../contract/index.ts';\n\nconst exists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n};\nconst walk = async (root: string, dir = root): Promise<string[]> => {\n const out: string[] = [];\n for (const e of await readdir(dir, { withFileTypes: true })) {\n const p = join(dir, e.name);\n if (e.isDirectory()) out.push(...(await walk(root, p)));\n else if (e.isFile()) out.push(relative(root, p));\n }\n return out;\n};\nconst alignDs: CommandModule = {\n verb: 'align-ds',\n async run(ctx, args) {\n let profile: Record<string, unknown> = {};\n try {\n const source = await readFile(join(ctx.cwd, 'PIPELINE.md'), 'utf8');\n const match = /```yaml pipeline-profile\\s*\\n([\\s\\S]*?)\\n```/u.exec(source);\n profile = match?.[1] ? ((parse(match[1]) as Record<string, unknown>) ?? {}) : {};\n } catch {}\n const design =\n profile.design && typeof profile.design === 'object' ? (profile.design as Record<string, unknown>) : {};\n if (design.enabled !== true) {\n ctx.stdio.stdout.write('design system disabled; nothing to align\\n');\n return 0;\n }\n const snapshot = typeof design.snapshot_dir === 'string' ? resolve(ctx.cwd, design.snapshot_dir) : undefined;\n const liveSource =\n typeof design.live_snapshot_dir === 'string' ? resolve(ctx.cwd, design.live_snapshot_dir) : snapshot;\n const uiKit = typeof design.ui_kit_path === 'string' ? resolve(ctx.cwd, design.ui_kit_path) : undefined;\n const tokens = typeof design.tokens_path === 'string' ? resolve(ctx.cwd, design.tokens_path) : undefined;\n if (!snapshot || !liveSource || !uiKit || !tokens) {\n ctx.stdio.stderr.write('design system enabled but snapshot_dir, ui_kit_path and tokens_path are required\\n');\n return 10;\n }\n if (!(await exists(liveSource)) || !(await exists(snapshot)) || !(await exists(uiKit)) || !(await exists(tokens))) {\n ctx.stdio.stderr.write(\n 'design system paths are missing; configure a live source, committed snapshot and code targets\\n',\n );\n return 10;\n }\n const files = (await walk(liveSource)).filter((file) => file !== 'README.md');\n const missing: string[] = [];\n const changed: string[] = [];\n for (const file of files) {\n const source = await readFile(join(liveSource, file));\n try {\n const target = await readFile(join(snapshot, file));\n if (createHash('sha256').update(source).digest('hex') !== createHash('sha256').update(target).digest('hex'))\n changed.push(file);\n } catch {\n missing.push(file);\n }\n try {\n const target = await readFile(join(uiKit, file));\n if (createHash('sha256').update(source).digest('hex') !== createHash('sha256').update(target).digest('hex'))\n changed.push(file);\n } catch {\n if (!missing.includes(file)) missing.push(file);\n }\n }\n const snapshotSet = new Set(files);\n const removed = (await walk(snapshot)).filter((file) => !snapshotSet.has(file));\n const uniqueMissing = [...new Set(missing)];\n const uniqueChanged = [...new Set(changed)];\n const result = {\n source: liveSource,\n snapshot,\n uiKit,\n tokens,\n files,\n missing: uniqueMissing,\n changed: uniqueChanged,\n removed,\n delta: uniqueMissing.length + uniqueChanged.length,\n };\n if (args.positionals.includes('--apply')) {\n for (const file of [...uniqueMissing, ...uniqueChanged])\n await cp(join(liveSource, file), join(snapshot, file), { recursive: true });\n for (const file of [...uniqueMissing, ...uniqueChanged])\n await cp(join(liveSource, file), join(uiKit, file), { recursive: true });\n ctx.stdio.stdout.write(\n `aligned ${result.delta} design-system file(s); ${removed.length} stale file(s) reported\\n`,\n );\n } else\n ctx.stdio.stdout.write(\n `${args.json ? JSON.stringify(result) : `${result.delta} design-system file(s) require alignment; ${removed.length} stale file(s)`}\\n`,\n );\n return 0;\n },\n};\nexport default alignDs;\n"],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import review from "./review-ZsBqp3vZ.mjs";
2
+ import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
3
+ import { join, relative } from "node:path";
4
+ import { parse } from "yaml";
5
+ import { execFile } from "node:child_process";
6
+ import { promisify } from "node:util";
7
+ //#region src/commands/audit/index.ts
8
+ const exec = promisify(execFile);
9
+ async function configuredDomains(root) {
10
+ try {
11
+ const pipeline = await readFile(join(root, "PIPELINE.md"), "utf8");
12
+ const block = /```yaml pipeline-profile\s*\n([\s\S]*?)\n```/u.exec(pipeline)?.[1];
13
+ const keys = ((block ? parse(block) : {}).surfaces ?? []).flatMap((surface) => surface && typeof surface === "object" && "key" in surface && typeof surface.key === "string" ? [surface.key] : []);
14
+ return [.../* @__PURE__ */ new Set([...keys, "shared"])];
15
+ } catch {
16
+ return [];
17
+ }
18
+ }
19
+ async function configuredGates(root) {
20
+ try {
21
+ const pipeline = await readFile(join(root, "PIPELINE.md"), "utf8");
22
+ const block = /```yaml pipeline-profile\s*\n([\s\S]*?)\n```/u.exec(pipeline)?.[1];
23
+ const commands = block ? parse(block)?.commands : void 0;
24
+ if (!commands) return [];
25
+ return [
26
+ "format",
27
+ "lint",
28
+ "typecheck",
29
+ "test"
30
+ ].map((key) => commands[key]).filter((value) => typeof value === "string" && value.length > 0 && !value.startsWith("<"));
31
+ } catch {
32
+ return [];
33
+ }
34
+ }
35
+ async function runGates(root) {
36
+ const commands = await configuredGates(root);
37
+ if (commands.length === 0) try {
38
+ return `git diff --check\n${(await exec("git", ["diff", "--check"], {
39
+ cwd: root,
40
+ maxBuffer: 1e6
41
+ })).stdout || "clean\n"}`;
42
+ } catch (error) {
43
+ return `git diff --check\n${error instanceof Error ? error.message : String(error)}\n`;
44
+ }
45
+ const chunks = [];
46
+ for (const command of commands) try {
47
+ const result = await exec("sh", ["-lc", command], {
48
+ cwd: root,
49
+ maxBuffer: 2e6
50
+ });
51
+ chunks.push(`$ ${command}\n${result.stdout || "(no output)"}${result.stderr || ""}`);
52
+ } catch (error) {
53
+ const failure = error;
54
+ chunks.push(`$ ${command}\n${failure.stdout ?? ""}${failure.stderr ?? failure.message ?? String(error)}\n`);
55
+ }
56
+ return `${chunks.join("\n")}\n`;
57
+ }
58
+ async function readExistingFindings(root) {
59
+ const reports = join(root, "specs", "reports");
60
+ let names;
61
+ try {
62
+ names = (await readdir(reports)).filter((name) => /\.(json|md|txt)$/u.test(name));
63
+ } catch {
64
+ return [];
65
+ }
66
+ const items = [];
67
+ for (const name of names) {
68
+ const path = join(reports, name);
69
+ let text = "";
70
+ try {
71
+ text = await readFile(path, "utf8");
72
+ } catch {
73
+ continue;
74
+ }
75
+ try {
76
+ const value = JSON.parse(text);
77
+ const visit = (node) => {
78
+ if (Array.isArray(node)) {
79
+ for (const child of node) visit(child);
80
+ return;
81
+ }
82
+ if (!node || typeof node !== "object") return;
83
+ const row = node;
84
+ if (typeof row.file === "string" && typeof row.fix === "string") items.push({
85
+ severity: typeof row.severity === "string" ? row.severity : "MEDIUM",
86
+ file: row.file,
87
+ line: typeof row.line === "number" ? row.line : 1,
88
+ kind: typeof row.kind === "string" ? row.kind : "tdd",
89
+ fix: row.fix
90
+ });
91
+ for (const child of Object.values(row)) visit(child);
92
+ };
93
+ visit(value);
94
+ } catch {
95
+ for (const line of text.split(/\r?\n/u)) {
96
+ const match = /^- \[ \] (?:(CRITICAL|HIGH|MEDIUM|LOW) · )?([^:]+):(\d+) · ([^·]+) · (.+)$/u.exec(line);
97
+ if (match) items.push({
98
+ severity: match[1] ?? "MEDIUM",
99
+ file: match[2] ?? "unknown",
100
+ line: Number(match[3]),
101
+ kind: match[4]?.trim() ?? "tdd",
102
+ fix: match[5]?.trim() ?? "inspect and fix"
103
+ });
104
+ }
105
+ }
106
+ }
107
+ return items;
108
+ }
109
+ function domainFor(file) {
110
+ const parts = file.replaceAll("\\", "/").split("/");
111
+ if (parts[0] === "apps" || parts[0] === "packages") return parts.slice(0, 2).join("/") || "shared";
112
+ return parts[0] && !["scripts", "specs"].includes(parts[0]) ? parts[0] : "shared";
113
+ }
114
+ const audit = {
115
+ verb: "audit",
116
+ async run(ctx, args) {
117
+ const target = args.positionals.find((value) => !value.startsWith("--"));
118
+ if (target === void 0 && args.positionals.length > 0) return 2;
119
+ await mkdir(join(ctx.cwd, "specs", "reports"), { recursive: true });
120
+ const gatePath = join(ctx.cwd, "specs", "reports", "audit-gates.txt");
121
+ await writeFile(gatePath, await runGates(ctx.cwd), "utf8");
122
+ const findings = (await readExistingFindings(ctx.cwd)).filter((item) => target === void 0 || item.file.includes(target) || domainFor(item.file) === target).filter((item, index, all) => all.findIndex((other) => JSON.stringify(other) === JSON.stringify(item)) === index).sort((a, b) => a.severity.localeCompare(b.severity) || a.file.localeCompare(b.file) || a.line - b.line);
123
+ const grouped = /* @__PURE__ */ new Map();
124
+ for (const item of findings) {
125
+ const domain = domainFor(item.file);
126
+ grouped.set(domain, [...grouped.get(domain) ?? [], item]);
127
+ }
128
+ const backlog = [
129
+ "# Refactor backlog",
130
+ "",
131
+ `> Generated by cohorte audit (${ctx.clock.now()}).`
132
+ ];
133
+ for (const [domain, items] of [...grouped.entries()].sort(([a], [b]) => a.localeCompare(b))) {
134
+ backlog.push("", `## ${domain}`, "");
135
+ for (const item of items) backlog.push(`- [ ] ${item.severity} · ${item.file}:${item.line} · ${item.kind} · ${item.fix}`);
136
+ }
137
+ if (findings.length === 0) backlog.push("", "No open findings were recovered from the durable reports.", "");
138
+ const backlogPath = join(ctx.cwd, "specs", "refactor-backlog.md");
139
+ await writeFile(backlogPath, `${backlog.join("\n")}\n`, "utf8");
140
+ const configured = await configuredDomains(ctx.cwd);
141
+ const domains = configured.filter((domain) => !target || target === domain || domain.startsWith(target));
142
+ const dispatch = domains.length > 0 ? domains : [target ?? "all"];
143
+ const outcomes = await Promise.all(dispatch.map(async (domain) => {
144
+ try {
145
+ return {
146
+ domain,
147
+ status: await review.run(ctx, {
148
+ ...args,
149
+ positionals: configured.length === 0 && target === void 0 ? args.positionals : [
150
+ "--surface",
151
+ domain,
152
+ ...args.positionals.filter((value) => value.startsWith("--"))
153
+ ]
154
+ })
155
+ };
156
+ } catch (error) {
157
+ return {
158
+ domain,
159
+ status: 3,
160
+ error: error instanceof Error ? error.message : String(error)
161
+ };
162
+ }
163
+ }));
164
+ const dispatchPath = join(ctx.cwd, "specs", "reports", "audit-dispatch.json");
165
+ await writeFile(dispatchPath, `${JSON.stringify({
166
+ generatedAt: ctx.clock.now(),
167
+ requestedTarget: target ?? null,
168
+ domains: outcomes,
169
+ deadDomains: outcomes.filter((item) => item.error).map((item) => item.domain)
170
+ }, null, 2)}\n`, "utf8");
171
+ const result = outcomes.some((item) => item.status === 3) ? 3 : outcomes.some((item) => item.status === 4) ? 4 : 0;
172
+ ctx.stdio.stdout.write(`audit gates written to ${relative(ctx.cwd, gatePath)}; backlog written to ${relative(ctx.cwd, backlogPath)}; review dispatched for ${outcomes.length} domain(s)\n`);
173
+ return result;
174
+ }
175
+ };
176
+ //#endregion
177
+ export { audit as default };
178
+
179
+ //# sourceMappingURL=audit-B4ZWQ_DI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-B4ZWQ_DI.mjs","names":[],"sources":["../../../../apps/cli/src/commands/audit/index.ts"],"sourcesContent":["import { execFile } from 'node:child_process';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join, relative } from 'node:path';\nimport { promisify } from 'node:util';\nimport { parse } from 'yaml';\nimport type { CommandModule } from '../../contract/index.ts';\nimport review from '../review/index.ts';\n\nconst exec = promisify(execFile);\n\ntype BacklogItem = { severity: string; file: string; line: number; kind: string; fix: string };\n\nasync function configuredDomains(root: string): Promise<string[]> {\n try {\n const pipeline = await readFile(join(root, 'PIPELINE.md'), 'utf8');\n const block = /```yaml pipeline-profile\\s*\\n([\\s\\S]*?)\\n```/u.exec(pipeline)?.[1];\n const profile = block ? (parse(block) as { surfaces?: unknown[] }) : {};\n const keys = (profile.surfaces ?? []).flatMap((surface) =>\n surface && typeof surface === 'object' && 'key' in surface && typeof surface.key === 'string'\n ? [surface.key]\n : [],\n );\n return [...new Set([...keys, 'shared'])];\n } catch {\n return [];\n }\n}\n\nasync function configuredGates(root: string): Promise<string[]> {\n try {\n const pipeline = await readFile(join(root, 'PIPELINE.md'), 'utf8');\n const block = /```yaml pipeline-profile\\s*\\n([\\s\\S]*?)\\n```/u.exec(pipeline)?.[1];\n const commands = block ? (parse(block) as { commands?: Record<string, unknown> })?.commands : undefined;\n if (!commands) return [];\n return ['format', 'lint', 'typecheck', 'test']\n .map((key) => commands[key])\n .filter((value): value is string => typeof value === 'string' && value.length > 0 && !value.startsWith('<'));\n } catch {\n return [];\n }\n}\n\nasync function runGates(root: string): Promise<string> {\n const commands = await configuredGates(root);\n if (commands.length === 0) {\n try {\n const result = await exec('git', ['diff', '--check'], { cwd: root, maxBuffer: 1_000_000 });\n return `git diff --check\\n${result.stdout || 'clean\\n'}`;\n } catch (error) {\n return `git diff --check\\n${error instanceof Error ? error.message : String(error)}\\n`;\n }\n }\n const chunks: string[] = [];\n for (const command of commands) {\n try {\n const result = await exec('sh', ['-lc', command], { cwd: root, maxBuffer: 2_000_000 });\n chunks.push(`$ ${command}\\n${result.stdout || '(no output)'}${result.stderr || ''}`);\n } catch (error) {\n const failure = error as { stdout?: string; stderr?: string; message?: string };\n chunks.push(`$ ${command}\\n${failure.stdout ?? ''}${failure.stderr ?? failure.message ?? String(error)}\\n`);\n }\n }\n return `${chunks.join('\\n')}\\n`;\n}\n\nasync function readExistingFindings(root: string): Promise<BacklogItem[]> {\n const reports = join(root, 'specs', 'reports');\n let names: string[];\n try {\n names = (await readdir(reports)).filter((name) => /\\.(json|md|txt)$/u.test(name));\n } catch {\n return [];\n }\n const items: BacklogItem[] = [];\n for (const name of names) {\n const path = join(reports, name);\n let text = '';\n try {\n text = await readFile(path, 'utf8');\n } catch {\n continue;\n }\n try {\n const value = JSON.parse(text) as unknown;\n const visit = (node: unknown): void => {\n if (Array.isArray(node)) {\n for (const child of node) visit(child);\n return;\n }\n if (!node || typeof node !== 'object') return;\n const row = node as Record<string, unknown>;\n if (typeof row.file === 'string' && typeof row.fix === 'string') {\n items.push({\n severity: typeof row.severity === 'string' ? row.severity : 'MEDIUM',\n file: row.file,\n line: typeof row.line === 'number' ? row.line : 1,\n kind: typeof row.kind === 'string' ? row.kind : 'tdd',\n fix: row.fix,\n });\n }\n for (const child of Object.values(row)) visit(child);\n };\n visit(value);\n } catch {\n for (const line of text.split(/\\r?\\n/u)) {\n const match = /^- \\[ \\] (?:(CRITICAL|HIGH|MEDIUM|LOW) · )?([^:]+):(\\d+) · ([^·]+) · (.+)$/u.exec(line);\n if (match)\n items.push({\n severity: match[1] ?? 'MEDIUM',\n file: match[2] ?? 'unknown',\n line: Number(match[3]),\n kind: match[4]?.trim() ?? 'tdd',\n fix: match[5]?.trim() ?? 'inspect and fix',\n });\n }\n }\n }\n return items;\n}\n\nfunction domainFor(file: string): string {\n const normalized = file.replaceAll('\\\\', '/');\n const parts = normalized.split('/');\n if (parts[0] === 'apps' || parts[0] === 'packages') return parts.slice(0, 2).join('/') || 'shared';\n return parts[0] && !['scripts', 'specs'].includes(parts[0]) ? parts[0] : 'shared';\n}\n\nconst audit: CommandModule = {\n verb: 'audit',\n async run(ctx, args) {\n const target = args.positionals.find((value) => !value.startsWith('--'));\n if (target === undefined && args.positionals.length > 0) return 2;\n await mkdir(join(ctx.cwd, 'specs', 'reports'), { recursive: true });\n const gatePath = join(ctx.cwd, 'specs', 'reports', 'audit-gates.txt');\n await writeFile(gatePath, await runGates(ctx.cwd), 'utf8');\n const findings = (await readExistingFindings(ctx.cwd))\n .filter((item) => target === undefined || item.file.includes(target) || domainFor(item.file) === target)\n .filter((item, index, all) => all.findIndex((other) => JSON.stringify(other) === JSON.stringify(item)) === index)\n .sort((a, b) => a.severity.localeCompare(b.severity) || a.file.localeCompare(b.file) || a.line - b.line);\n const grouped = new Map<string, BacklogItem[]>();\n for (const item of findings) {\n const domain = domainFor(item.file);\n grouped.set(domain, [...(grouped.get(domain) ?? []), item]);\n }\n const backlog = ['# Refactor backlog', '', `> Generated by cohorte audit (${ctx.clock.now()}).`];\n for (const [domain, items] of [...grouped.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n backlog.push('', `## ${domain}`, '');\n for (const item of items)\n backlog.push(`- [ ] ${item.severity} · ${item.file}:${item.line} · ${item.kind} · ${item.fix}`);\n }\n if (findings.length === 0) backlog.push('', 'No open findings were recovered from the durable reports.', '');\n const backlogPath = join(ctx.cwd, 'specs', 'refactor-backlog.md');\n await writeFile(backlogPath, `${backlog.join('\\n')}\\n`, 'utf8');\n const configured = await configuredDomains(ctx.cwd);\n const domains = configured.filter((domain) => !target || target === domain || domain.startsWith(target));\n const dispatch = domains.length > 0 ? domains : [target ?? 'all'];\n const outcomes = await Promise.all(\n dispatch.map(async (domain) => {\n try {\n const result = await review.run(ctx, {\n ...args,\n // Audit targets are domains/paths, not feature spec IDs. Forward each\n // domain as a review surface so Pi reviews one ownership slice at a time.\n positionals:\n configured.length === 0 && target === undefined\n ? args.positionals\n : ['--surface', domain, ...args.positionals.filter((value) => value.startsWith('--'))],\n });\n return { domain, status: result };\n } catch (error) {\n return { domain, status: 3, error: error instanceof Error ? error.message : String(error) };\n }\n }),\n );\n const dispatchPath = join(ctx.cwd, 'specs', 'reports', 'audit-dispatch.json');\n await writeFile(\n dispatchPath,\n `${JSON.stringify(\n {\n generatedAt: ctx.clock.now(),\n requestedTarget: target ?? null,\n domains: outcomes,\n deadDomains: outcomes.filter((item) => item.error).map((item) => item.domain),\n },\n null,\n 2,\n )}\\n`,\n 'utf8',\n );\n const result = outcomes.some((item) => item.status === 3) ? 3 : outcomes.some((item) => item.status === 4) ? 4 : 0;\n ctx.stdio.stdout.write(\n `audit gates written to ${relative(ctx.cwd, gatePath)}; backlog written to ${relative(ctx.cwd, backlogPath)}; ` +\n `review dispatched for ${outcomes.length} domain(s)\\n`,\n );\n return result;\n },\n};\n\nexport default audit;\n"],"mappings":"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"}