@shrkcrft/cli 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/asset-preview/apply-action-hint-stub.d.ts +28 -0
  4. package/dist/asset-preview/apply-action-hint-stub.d.ts.map +1 -0
  5. package/dist/asset-preview/apply-action-hint-stub.js +170 -0
  6. package/dist/asset-preview/apply-asset-preview.d.ts +31 -0
  7. package/dist/asset-preview/apply-asset-preview.d.ts.map +1 -0
  8. package/dist/asset-preview/apply-asset-preview.js +210 -0
  9. package/dist/asset-preview/apply-knowledge-stale-fix.d.ts +37 -0
  10. package/dist/asset-preview/apply-knowledge-stale-fix.d.ts.map +1 -0
  11. package/dist/asset-preview/apply-knowledge-stale-fix.js +344 -0
  12. package/dist/asset-preview/apply-missing-barrel.d.ts +15 -0
  13. package/dist/asset-preview/apply-missing-barrel.d.ts.map +1 -0
  14. package/dist/asset-preview/apply-missing-barrel.js +65 -0
  15. package/dist/asset-preview/apply-template-drift-fix.d.ts +21 -0
  16. package/dist/asset-preview/apply-template-drift-fix.d.ts.map +1 -0
  17. package/dist/asset-preview/apply-template-drift-fix.js +125 -0
  18. package/dist/asset-preview/apply-template-update.d.ts +43 -0
  19. package/dist/asset-preview/apply-template-update.d.ts.map +1 -0
  20. package/dist/asset-preview/apply-template-update.js +257 -0
  21. package/dist/asset-preview/entry-mutator.d.ts +106 -0
  22. package/dist/asset-preview/entry-mutator.d.ts.map +1 -0
  23. package/dist/asset-preview/entry-mutator.js +428 -0
  24. package/dist/authoring/authoring-kit.d.ts +36 -0
  25. package/dist/authoring/authoring-kit.d.ts.map +1 -0
  26. package/dist/authoring/authoring-kit.js +106 -0
  27. package/dist/command-registry.d.ts +158 -0
  28. package/dist/command-registry.d.ts.map +1 -0
  29. package/dist/command-registry.js +348 -0
  30. package/dist/commands/apply.command.d.ts +3 -0
  31. package/dist/commands/apply.command.d.ts.map +1 -0
  32. package/dist/commands/apply.command.js +879 -0
  33. package/dist/commands/architecture.command.d.ts +5 -0
  34. package/dist/commands/architecture.command.d.ts.map +1 -0
  35. package/dist/commands/architecture.command.js +141 -0
  36. package/dist/commands/ask.command.d.ts +3 -0
  37. package/dist/commands/ask.command.d.ts.map +1 -0
  38. package/dist/commands/ask.command.js +58 -0
  39. package/dist/commands/audit.command.d.ts +3 -0
  40. package/dist/commands/audit.command.d.ts.map +1 -0
  41. package/dist/commands/audit.command.js +141 -0
  42. package/dist/commands/biome.command.d.ts +7 -0
  43. package/dist/commands/biome.command.d.ts.map +1 -0
  44. package/dist/commands/biome.command.js +350 -0
  45. package/dist/commands/boundaries.command.d.ts +9 -0
  46. package/dist/commands/boundaries.command.d.ts.map +1 -0
  47. package/dist/commands/boundaries.command.js +314 -0
  48. package/dist/commands/brief.command.d.ts +3 -0
  49. package/dist/commands/brief.command.d.ts.map +1 -0
  50. package/dist/commands/brief.command.js +206 -0
  51. package/dist/commands/bundle.command.d.ts +3 -0
  52. package/dist/commands/bundle.command.d.ts.map +1 -0
  53. package/dist/commands/bundle.command.js +1183 -0
  54. package/dist/commands/changes.command.d.ts +3 -0
  55. package/dist/commands/changes.command.d.ts.map +1 -0
  56. package/dist/commands/changes.command.js +155 -0
  57. package/dist/commands/check.command.d.ts +3 -0
  58. package/dist/commands/check.command.d.ts.map +1 -0
  59. package/dist/commands/check.command.js +553 -0
  60. package/dist/commands/checks.command.d.ts +29 -0
  61. package/dist/commands/checks.command.d.ts.map +1 -0
  62. package/dist/commands/checks.command.js +521 -0
  63. package/dist/commands/ci.command.d.ts +3 -0
  64. package/dist/commands/ci.command.d.ts.map +1 -0
  65. package/dist/commands/ci.command.js +680 -0
  66. package/dist/commands/codemod.command.d.ts +3 -0
  67. package/dist/commands/codemod.command.d.ts.map +1 -0
  68. package/dist/commands/codemod.command.js +130 -0
  69. package/dist/commands/command-catalog.d.ts +265 -0
  70. package/dist/commands/command-catalog.d.ts.map +1 -0
  71. package/dist/commands/command-catalog.js +3242 -0
  72. package/dist/commands/commands.command.d.ts +92 -0
  73. package/dist/commands/commands.command.d.ts.map +1 -0
  74. package/dist/commands/commands.command.js +1208 -0
  75. package/dist/commands/constructs.command.d.ts +15 -0
  76. package/dist/commands/constructs.command.d.ts.map +1 -0
  77. package/dist/commands/constructs.command.js +669 -0
  78. package/dist/commands/context.command.d.ts +3 -0
  79. package/dist/commands/context.command.d.ts.map +1 -0
  80. package/dist/commands/context.command.js +120 -0
  81. package/dist/commands/contract-gate.command.d.ts +5 -0
  82. package/dist/commands/contract-gate.command.d.ts.map +1 -0
  83. package/dist/commands/contract-gate.command.js +208 -0
  84. package/dist/commands/contract-templates.command.d.ts +8 -0
  85. package/dist/commands/contract-templates.command.d.ts.map +1 -0
  86. package/dist/commands/contract-templates.command.js +151 -0
  87. package/dist/commands/contract.command.d.ts +3 -0
  88. package/dist/commands/contract.command.d.ts.map +1 -0
  89. package/dist/commands/contract.command.js +105 -0
  90. package/dist/commands/conventions.command.d.ts +8 -0
  91. package/dist/commands/conventions.command.d.ts.map +1 -0
  92. package/dist/commands/conventions.command.js +169 -0
  93. package/dist/commands/coverage.command.d.ts +3 -0
  94. package/dist/commands/coverage.command.d.ts.map +1 -0
  95. package/dist/commands/coverage.command.js +56 -0
  96. package/dist/commands/daily.commands.d.ts +5 -0
  97. package/dist/commands/daily.commands.d.ts.map +1 -0
  98. package/dist/commands/daily.commands.js +224 -0
  99. package/dist/commands/dashboard-export.command.d.ts +4 -0
  100. package/dist/commands/dashboard-export.command.d.ts.map +1 -0
  101. package/dist/commands/dashboard-export.command.js +86 -0
  102. package/dist/commands/dashboard.command.d.ts +3 -0
  103. package/dist/commands/dashboard.command.d.ts.map +1 -0
  104. package/dist/commands/dashboard.command.js +106 -0
  105. package/dist/commands/dev.command.d.ts +3 -0
  106. package/dist/commands/dev.command.d.ts.map +1 -0
  107. package/dist/commands/dev.command.js +1392 -0
  108. package/dist/commands/diagnostics.command.d.ts +5 -0
  109. package/dist/commands/diagnostics.command.d.ts.map +1 -0
  110. package/dist/commands/diagnostics.command.js +97 -0
  111. package/dist/commands/docs.command.d.ts +4 -0
  112. package/dist/commands/docs.command.d.ts.map +1 -0
  113. package/dist/commands/docs.command.js +34 -0
  114. package/dist/commands/doctor.command.d.ts +7 -0
  115. package/dist/commands/doctor.command.d.ts.map +1 -0
  116. package/dist/commands/doctor.command.js +681 -0
  117. package/dist/commands/drift.command.d.ts +3 -0
  118. package/dist/commands/drift.command.d.ts.map +1 -0
  119. package/dist/commands/drift.command.js +124 -0
  120. package/dist/commands/eslint.command.d.ts +7 -0
  121. package/dist/commands/eslint.command.d.ts.map +1 -0
  122. package/dist/commands/eslint.command.js +423 -0
  123. package/dist/commands/explore.command.d.ts +3 -0
  124. package/dist/commands/explore.command.d.ts.map +1 -0
  125. package/dist/commands/explore.command.js +65 -0
  126. package/dist/commands/export-bundle.command.d.ts +6 -0
  127. package/dist/commands/export-bundle.command.d.ts.map +1 -0
  128. package/dist/commands/export-bundle.command.js +96 -0
  129. package/dist/commands/export.command.d.ts +3 -0
  130. package/dist/commands/export.command.d.ts.map +1 -0
  131. package/dist/commands/export.command.js +83 -0
  132. package/dist/commands/feedback-dispatch.command.d.ts +12 -0
  133. package/dist/commands/feedback-dispatch.command.d.ts.map +1 -0
  134. package/dist/commands/feedback-dispatch.command.js +63 -0
  135. package/dist/commands/feedback.command.d.ts +11 -0
  136. package/dist/commands/feedback.command.d.ts.map +1 -0
  137. package/dist/commands/feedback.command.js +336 -0
  138. package/dist/commands/fix.command.d.ts +3 -0
  139. package/dist/commands/fix.command.d.ts.map +1 -0
  140. package/dist/commands/fix.command.js +776 -0
  141. package/dist/commands/gen.command.d.ts +3 -0
  142. package/dist/commands/gen.command.d.ts.map +1 -0
  143. package/dist/commands/gen.command.js +136 -0
  144. package/dist/commands/git.command.d.ts +6 -0
  145. package/dist/commands/git.command.d.ts.map +1 -0
  146. package/dist/commands/git.command.js +81 -0
  147. package/dist/commands/graph.command.d.ts +3 -0
  148. package/dist/commands/graph.command.d.ts.map +1 -0
  149. package/dist/commands/graph.command.js +287 -0
  150. package/dist/commands/grounding.command.d.ts +7 -0
  151. package/dist/commands/grounding.command.d.ts.map +1 -0
  152. package/dist/commands/grounding.command.js +54 -0
  153. package/dist/commands/help.command.d.ts +20 -0
  154. package/dist/commands/help.command.d.ts.map +1 -0
  155. package/dist/commands/help.command.js +127 -0
  156. package/dist/commands/helper.command.d.ts +6 -0
  157. package/dist/commands/helper.command.d.ts.map +1 -0
  158. package/dist/commands/helper.command.js +170 -0
  159. package/dist/commands/ide.command.d.ts +6 -0
  160. package/dist/commands/ide.command.d.ts.map +1 -0
  161. package/dist/commands/ide.command.js +340 -0
  162. package/dist/commands/impact.command.d.ts +3 -0
  163. package/dist/commands/impact.command.d.ts.map +1 -0
  164. package/dist/commands/impact.command.js +819 -0
  165. package/dist/commands/import.command.d.ts +3 -0
  166. package/dist/commands/import.command.d.ts.map +1 -0
  167. package/dist/commands/import.command.js +115 -0
  168. package/dist/commands/infer.command.d.ts +3 -0
  169. package/dist/commands/infer.command.d.ts.map +1 -0
  170. package/dist/commands/infer.command.js +227 -0
  171. package/dist/commands/ingest.command.d.ts +6 -0
  172. package/dist/commands/ingest.command.d.ts.map +1 -0
  173. package/dist/commands/ingest.command.js +532 -0
  174. package/dist/commands/init.command.d.ts +3 -0
  175. package/dist/commands/init.command.d.ts.map +1 -0
  176. package/dist/commands/init.command.js +301 -0
  177. package/dist/commands/inspect.command.d.ts +3 -0
  178. package/dist/commands/inspect.command.d.ts.map +1 -0
  179. package/dist/commands/inspect.command.js +122 -0
  180. package/dist/commands/knowledge-author.command.d.ts +22 -0
  181. package/dist/commands/knowledge-author.command.d.ts.map +1 -0
  182. package/dist/commands/knowledge-author.command.js +366 -0
  183. package/dist/commands/knowledge-propose.command.d.ts +3 -0
  184. package/dist/commands/knowledge-propose.command.d.ts.map +1 -0
  185. package/dist/commands/knowledge-propose.command.js +125 -0
  186. package/dist/commands/knowledge.command.d.ts +18 -0
  187. package/dist/commands/knowledge.command.d.ts.map +1 -0
  188. package/dist/commands/knowledge.command.js +538 -0
  189. package/dist/commands/languages.command.d.ts +3 -0
  190. package/dist/commands/languages.command.d.ts.map +1 -0
  191. package/dist/commands/languages.command.js +300 -0
  192. package/dist/commands/lint.command.d.ts +15 -0
  193. package/dist/commands/lint.command.d.ts.map +1 -0
  194. package/dist/commands/lint.command.js +194 -0
  195. package/dist/commands/mcp.command.d.ts +3 -0
  196. package/dist/commands/mcp.command.d.ts.map +1 -0
  197. package/dist/commands/mcp.command.js +74 -0
  198. package/dist/commands/memory.command.d.ts +11 -0
  199. package/dist/commands/memory.command.d.ts.map +1 -0
  200. package/dist/commands/memory.command.js +264 -0
  201. package/dist/commands/onboard.command.d.ts +3 -0
  202. package/dist/commands/onboard.command.d.ts.map +1 -0
  203. package/dist/commands/onboard.command.js +650 -0
  204. package/dist/commands/orchestrate.command.d.ts +3 -0
  205. package/dist/commands/orchestrate.command.d.ts.map +1 -0
  206. package/dist/commands/orchestrate.command.js +49 -0
  207. package/dist/commands/owners.command.d.ts +5 -0
  208. package/dist/commands/owners.command.d.ts.map +1 -0
  209. package/dist/commands/owners.command.js +113 -0
  210. package/dist/commands/ownership.command.d.ts +5 -0
  211. package/dist/commands/ownership.command.d.ts.map +1 -0
  212. package/dist/commands/ownership.command.js +117 -0
  213. package/dist/commands/pack-author.command.d.ts +30 -0
  214. package/dist/commands/pack-author.command.d.ts.map +1 -0
  215. package/dist/commands/pack-author.command.js +242 -0
  216. package/dist/commands/packs-new.d.ts +27 -0
  217. package/dist/commands/packs-new.d.ts.map +1 -0
  218. package/dist/commands/packs-new.js +805 -0
  219. package/dist/commands/packs.command.d.ts +15 -0
  220. package/dist/commands/packs.command.d.ts.map +1 -0
  221. package/dist/commands/packs.command.js +958 -0
  222. package/dist/commands/paths.command.d.ts +6 -0
  223. package/dist/commands/paths.command.d.ts.map +1 -0
  224. package/dist/commands/paths.command.js +97 -0
  225. package/dist/commands/pipelines.command.d.ts +9 -0
  226. package/dist/commands/pipelines.command.d.ts.map +1 -0
  227. package/dist/commands/pipelines.command.js +308 -0
  228. package/dist/commands/plan-check.command.d.ts +27 -0
  229. package/dist/commands/plan-check.command.d.ts.map +1 -0
  230. package/dist/commands/plan-check.command.js +150 -0
  231. package/dist/commands/plan-simulate.command.d.ts +3 -0
  232. package/dist/commands/plan-simulate.command.d.ts.map +1 -0
  233. package/dist/commands/plan-simulate.command.js +60 -0
  234. package/dist/commands/plan.command.d.ts +8 -0
  235. package/dist/commands/plan.command.d.ts.map +1 -0
  236. package/dist/commands/plan.command.js +139 -0
  237. package/dist/commands/playbooks.command.d.ts +10 -0
  238. package/dist/commands/playbooks.command.d.ts.map +1 -0
  239. package/dist/commands/playbooks.command.js +296 -0
  240. package/dist/commands/plugin.command.d.ts +11 -0
  241. package/dist/commands/plugin.command.d.ts.map +1 -0
  242. package/dist/commands/plugin.command.js +394 -0
  243. package/dist/commands/policy.command.d.ts +8 -0
  244. package/dist/commands/policy.command.d.ts.map +1 -0
  245. package/dist/commands/policy.command.js +451 -0
  246. package/dist/commands/pr.command.d.ts +3 -0
  247. package/dist/commands/pr.command.d.ts.map +1 -0
  248. package/dist/commands/pr.command.js +132 -0
  249. package/dist/commands/preflight.command.d.ts +3 -0
  250. package/dist/commands/preflight.command.d.ts.map +1 -0
  251. package/dist/commands/preflight.command.js +102 -0
  252. package/dist/commands/presets.command.d.ts +17 -0
  253. package/dist/commands/presets.command.d.ts.map +1 -0
  254. package/dist/commands/presets.command.js +647 -0
  255. package/dist/commands/profiles.command.d.ts +7 -0
  256. package/dist/commands/profiles.command.d.ts.map +1 -0
  257. package/dist/commands/profiles.command.js +151 -0
  258. package/dist/commands/provenance.command.d.ts +26 -0
  259. package/dist/commands/provenance.command.d.ts.map +1 -0
  260. package/dist/commands/provenance.command.js +237 -0
  261. package/dist/commands/quality.command.d.ts +5 -0
  262. package/dist/commands/quality.command.d.ts.map +1 -0
  263. package/dist/commands/quality.command.js +69 -0
  264. package/dist/commands/recommend.command.d.ts +4 -0
  265. package/dist/commands/recommend.command.d.ts.map +1 -0
  266. package/dist/commands/recommend.command.js +270 -0
  267. package/dist/commands/registrations.command.d.ts +3 -0
  268. package/dist/commands/registrations.command.d.ts.map +1 -0
  269. package/dist/commands/registrations.command.js +300 -0
  270. package/dist/commands/registry.command.d.ts +4 -0
  271. package/dist/commands/registry.command.d.ts.map +1 -0
  272. package/dist/commands/registry.command.js +37 -0
  273. package/dist/commands/release.command.d.ts +4 -0
  274. package/dist/commands/release.command.d.ts.map +1 -0
  275. package/dist/commands/release.command.js +639 -0
  276. package/dist/commands/repo.command.d.ts +3 -0
  277. package/dist/commands/repo.command.d.ts.map +1 -0
  278. package/dist/commands/repo.command.js +24 -0
  279. package/dist/commands/report.command.d.ts +3 -0
  280. package/dist/commands/report.command.d.ts.map +1 -0
  281. package/dist/commands/report.command.js +511 -0
  282. package/dist/commands/reposet.command.d.ts +6 -0
  283. package/dist/commands/reposet.command.d.ts.map +1 -0
  284. package/dist/commands/reposet.command.js +120 -0
  285. package/dist/commands/review.command.d.ts +3 -0
  286. package/dist/commands/review.command.d.ts.map +1 -0
  287. package/dist/commands/review.command.js +354 -0
  288. package/dist/commands/risk.command.d.ts +3 -0
  289. package/dist/commands/risk.command.d.ts.map +1 -0
  290. package/dist/commands/risk.command.js +56 -0
  291. package/dist/commands/rounds.command.d.ts +8 -0
  292. package/dist/commands/rounds.command.d.ts.map +1 -0
  293. package/dist/commands/rounds.command.js +180 -0
  294. package/dist/commands/rules.command.d.ts +49 -0
  295. package/dist/commands/rules.command.d.ts.map +1 -0
  296. package/dist/commands/rules.command.js +435 -0
  297. package/dist/commands/runtime.command.d.ts +3 -0
  298. package/dist/commands/runtime.command.d.ts.map +1 -0
  299. package/dist/commands/runtime.command.js +56 -0
  300. package/dist/commands/safety.command.d.ts +3 -0
  301. package/dist/commands/safety.command.d.ts.map +1 -0
  302. package/dist/commands/safety.command.js +117 -0
  303. package/dist/commands/scaffolds.command.d.ts +5 -0
  304. package/dist/commands/scaffolds.command.d.ts.map +1 -0
  305. package/dist/commands/scaffolds.command.js +122 -0
  306. package/dist/commands/schemas.command.d.ts +21 -0
  307. package/dist/commands/schemas.command.d.ts.map +1 -0
  308. package/dist/commands/schemas.command.js +296 -0
  309. package/dist/commands/search.command.d.ts +12 -0
  310. package/dist/commands/search.command.d.ts.map +1 -0
  311. package/dist/commands/search.command.js +275 -0
  312. package/dist/commands/self-config.command.d.ts +7 -0
  313. package/dist/commands/self-config.command.d.ts.map +1 -0
  314. package/dist/commands/self-config.command.js +156 -0
  315. package/dist/commands/self.command.d.ts +3 -0
  316. package/dist/commands/self.command.d.ts.map +1 -0
  317. package/dist/commands/self.command.js +117 -0
  318. package/dist/commands/simulate.command.d.ts +3 -0
  319. package/dist/commands/simulate.command.d.ts.map +1 -0
  320. package/dist/commands/simulate.command.js +54 -0
  321. package/dist/commands/spec.command.d.ts +29 -0
  322. package/dist/commands/spec.command.d.ts.map +1 -0
  323. package/dist/commands/spec.command.js +985 -0
  324. package/dist/commands/start-here.command.d.ts +3 -0
  325. package/dist/commands/start-here.command.d.ts.map +1 -0
  326. package/dist/commands/start-here.command.js +35 -0
  327. package/dist/commands/stats.command.d.ts +3 -0
  328. package/dist/commands/stats.command.d.ts.map +1 -0
  329. package/dist/commands/stats.command.js +88 -0
  330. package/dist/commands/surface.command.d.ts +15 -0
  331. package/dist/commands/surface.command.d.ts.map +1 -0
  332. package/dist/commands/surface.command.js +328 -0
  333. package/dist/commands/task-context.command.d.ts +7 -0
  334. package/dist/commands/task-context.command.d.ts.map +1 -0
  335. package/dist/commands/task-context.command.js +646 -0
  336. package/dist/commands/task.command.d.ts +3 -0
  337. package/dist/commands/task.command.d.ts.map +1 -0
  338. package/dist/commands/task.command.js +301 -0
  339. package/dist/commands/template-quality.command.d.ts +5 -0
  340. package/dist/commands/template-quality.command.d.ts.map +1 -0
  341. package/dist/commands/template-quality.command.js +128 -0
  342. package/dist/commands/templates.command.d.ts +26 -0
  343. package/dist/commands/templates.command.d.ts.map +1 -0
  344. package/dist/commands/templates.command.js +964 -0
  345. package/dist/commands/test.command.d.ts +3 -0
  346. package/dist/commands/test.command.d.ts.map +1 -0
  347. package/dist/commands/test.command.js +262 -0
  348. package/dist/commands/tests.command.d.ts +5 -0
  349. package/dist/commands/tests.command.d.ts.map +1 -0
  350. package/dist/commands/tests.command.js +97 -0
  351. package/dist/commands/trace.command.d.ts +3 -0
  352. package/dist/commands/trace.command.d.ts.map +1 -0
  353. package/dist/commands/trace.command.js +121 -0
  354. package/dist/commands/upgrade.command.d.ts +4 -0
  355. package/dist/commands/upgrade.command.d.ts.map +1 -0
  356. package/dist/commands/upgrade.command.js +43 -0
  357. package/dist/commands/version.command.d.ts +3 -0
  358. package/dist/commands/version.command.d.ts.map +1 -0
  359. package/dist/commands/version.command.js +10 -0
  360. package/dist/commands/why.command.d.ts +24 -0
  361. package/dist/commands/why.command.d.ts.map +1 -0
  362. package/dist/commands/why.command.js +119 -0
  363. package/dist/dashboard/dashboard-api-server.d.ts +21 -0
  364. package/dist/dashboard/dashboard-api-server.d.ts.map +1 -0
  365. package/dist/dashboard/dashboard-api-server.js +410 -0
  366. package/dist/dashboard/live-session-server.d.ts +18 -0
  367. package/dist/dashboard/live-session-server.d.ts.map +1 -0
  368. package/dist/dashboard/live-session-server.js +133 -0
  369. package/dist/diff/collect-changed-paths.d.ts +27 -0
  370. package/dist/diff/collect-changed-paths.d.ts.map +1 -0
  371. package/dist/diff/collect-changed-paths.js +68 -0
  372. package/dist/doctor/doctor-tags.d.ts +63 -0
  373. package/dist/doctor/doctor-tags.d.ts.map +1 -0
  374. package/dist/doctor/doctor-tags.js +146 -0
  375. package/dist/export/export-formats.d.ts +22 -0
  376. package/dist/export/export-formats.d.ts.map +1 -0
  377. package/dist/export/export-formats.js +135 -0
  378. package/dist/index.d.ts +22 -0
  379. package/dist/index.d.ts.map +1 -0
  380. package/dist/index.js +21 -0
  381. package/dist/init/detected-block.d.ts +57 -0
  382. package/dist/init/detected-block.d.ts.map +1 -0
  383. package/dist/init/detected-block.js +197 -0
  384. package/dist/init/gitignore.d.ts +30 -0
  385. package/dist/init/gitignore.d.ts.map +1 -0
  386. package/dist/init/gitignore.js +110 -0
  387. package/dist/init/init-templates.d.ts +6 -0
  388. package/dist/init/init-templates.d.ts.map +1 -0
  389. package/dist/init/init-templates.js +413 -0
  390. package/dist/main.d.ts +18 -0
  391. package/dist/main.d.ts.map +1 -0
  392. package/dist/main.js +699 -0
  393. package/dist/output/failure-hints.d.ts +55 -0
  394. package/dist/output/failure-hints.d.ts.map +1 -0
  395. package/dist/output/failure-hints.js +159 -0
  396. package/dist/output/format-output.d.ts +9 -0
  397. package/dist/output/format-output.d.ts.map +1 -0
  398. package/dist/output/format-output.js +26 -0
  399. package/dist/output/print-error.d.ts +3 -0
  400. package/dist/output/print-error.d.ts.map +1 -0
  401. package/dist/output/print-error.js +14 -0
  402. package/dist/output/watch-loop.d.ts +37 -0
  403. package/dist/output/watch-loop.d.ts.map +1 -0
  404. package/dist/output/watch-loop.js +115 -0
  405. package/dist/schemas/json-schemas.d.ts +1630 -0
  406. package/dist/schemas/json-schemas.d.ts.map +1 -0
  407. package/dist/schemas/json-schemas.js +811 -0
  408. package/dist/surface/about.d.ts +10 -0
  409. package/dist/surface/about.d.ts.map +1 -0
  410. package/dist/surface/about.js +53 -0
  411. package/dist/surface/load-surface-context.d.ts +34 -0
  412. package/dist/surface/load-surface-context.d.ts.map +1 -0
  413. package/dist/surface/load-surface-context.js +100 -0
  414. package/dist/surface/no-args-landing.d.ts +7 -0
  415. package/dist/surface/no-args-landing.d.ts.map +1 -0
  416. package/dist/surface/no-args-landing.js +36 -0
  417. package/dist/surface/not-enabled-error.d.ts +24 -0
  418. package/dist/surface/not-enabled-error.d.ts.map +1 -0
  419. package/dist/surface/not-enabled-error.js +36 -0
  420. package/dist/surface/profiles.d.ts +37 -0
  421. package/dist/surface/profiles.d.ts.map +1 -0
  422. package/dist/surface/profiles.js +151 -0
  423. package/dist/surface/shape-defaults.d.ts +21 -0
  424. package/dist/surface/shape-defaults.d.ts.map +1 -0
  425. package/dist/surface/shape-defaults.js +50 -0
  426. package/dist/surface/spine-extractor.d.ts +38 -0
  427. package/dist/surface/spine-extractor.d.ts.map +1 -0
  428. package/dist/surface/spine-extractor.js +100 -0
  429. package/dist/surface/surface-config-writer.d.ts +59 -0
  430. package/dist/surface/surface-config-writer.d.ts.map +1 -0
  431. package/dist/surface/surface-config-writer.js +135 -0
  432. package/dist/surface/surface-summary.d.ts +66 -0
  433. package/dist/surface/surface-summary.d.ts.map +1 -0
  434. package/dist/surface/surface-summary.js +162 -0
  435. package/dist/surface/tier.d.ts +100 -0
  436. package/dist/surface/tier.d.ts.map +1 -0
  437. package/dist/surface/tier.js +172 -0
  438. package/dist/task-next/apply-batch-runner.d.ts +42 -0
  439. package/dist/task-next/apply-batch-runner.d.ts.map +1 -0
  440. package/dist/task-next/apply-batch-runner.js +192 -0
  441. package/dist/task-next/task-next-ranker.d.ts +75 -0
  442. package/dist/task-next/task-next-ranker.d.ts.map +1 -0
  443. package/dist/task-next/task-next-ranker.js +179 -0
  444. package/dist/usage/usage-log.d.ts +54 -0
  445. package/dist/usage/usage-log.d.ts.map +1 -0
  446. package/dist/usage/usage-log.js +105 -0
  447. package/dist/validation/run-validation-loop.d.ts +38 -0
  448. package/dist/validation/run-validation-loop.d.ts.map +1 -0
  449. package/dist/validation/run-validation-loop.js +100 -0
  450. package/package.json +73 -0
@@ -0,0 +1,553 @@
1
+ import { buildAiReadinessReport, buildImportHygieneReport, buildPackDoctorReport, ChangedScopeMode, diagnoseActionHints, emitImportHygieneAllowlistDraft, filterViolationsToChangedScope, ImportHygieneFindingKind, inspectSharkcraft, isTodoReason, renderImportHygieneText, resolveChangedFiles, runDoctor, suggestBoundaryFixes, } from '@shrkcrft/inspector';
2
+ import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
3
+ import * as nodePath from 'node:path';
4
+ import { flagBool, flagNumber, flagString, flagVars, resolveCwd, } from "../command-registry.js";
5
+ import { asJson, header, kv } from "../output/format-output.js";
6
+ import { validateTemplateVariables } from '@shrkcrft/templates';
7
+ import { FileChangeType, planGeneration } from '@shrkcrft/generator';
8
+ import { evaluateBoundaries, loadTsconfigPaths, scanImports, summarizeImports, } from '@shrkcrft/boundaries';
9
+ function knowledgeGroup(inspection) {
10
+ const dup = inspection.validationIssues.filter((i) => i.code === 'duplicate-id');
11
+ const missing = inspection.validationIssues.filter((i) => i.code !== 'duplicate-id');
12
+ return {
13
+ name: 'knowledge',
14
+ passed: missing.length === 0 && dup.length === 0,
15
+ errors: missing.length,
16
+ warnings: dup.length,
17
+ details: [
18
+ ...missing.map((m) => `error: ${m.code} on ${m.entryId}`),
19
+ ...dup.map((m) => `warn: duplicate id ${m.entryId}`),
20
+ ],
21
+ };
22
+ }
23
+ function templatesGroup(inspection) {
24
+ const details = [];
25
+ let errors = 0;
26
+ let warnings = 0;
27
+ for (const t of inspection.templates) {
28
+ if (!t.id) {
29
+ errors += 1;
30
+ details.push(`error: template missing id`);
31
+ }
32
+ if (!t.description || t.description.trim().length < 5) {
33
+ warnings += 1;
34
+ details.push(`warn: template ${t.id} description short/missing`);
35
+ }
36
+ if (!t.files && !t.changes && !(t.targetPath && t.content)) {
37
+ errors += 1;
38
+ details.push(`error: template ${t.id} missing files, changes, or targetPath+content`);
39
+ }
40
+ }
41
+ return {
42
+ name: 'templates',
43
+ passed: errors === 0,
44
+ errors,
45
+ warnings,
46
+ details,
47
+ };
48
+ }
49
+ function pipelinesGroup(inspection) {
50
+ const details = [];
51
+ let errors = 0;
52
+ let warnings = 0;
53
+ for (const p of inspection.pipelines) {
54
+ if (!p.steps || p.steps.length === 0) {
55
+ errors += 1;
56
+ details.push(`error: pipeline ${p.id} has no steps`);
57
+ }
58
+ const stepIds = new Set();
59
+ for (const step of p.steps ?? []) {
60
+ if (stepIds.has(step.id)) {
61
+ errors += 1;
62
+ details.push(`error: pipeline ${p.id} duplicate step ${step.id}`);
63
+ }
64
+ stepIds.add(step.id);
65
+ }
66
+ if (!p.description) {
67
+ warnings += 1;
68
+ details.push(`warn: pipeline ${p.id} has no description`);
69
+ }
70
+ }
71
+ return {
72
+ name: 'pipelines',
73
+ passed: errors === 0,
74
+ errors,
75
+ warnings,
76
+ details,
77
+ };
78
+ }
79
+ function packsGroup(inspection) {
80
+ const report = buildPackDoctorReport(inspection);
81
+ return {
82
+ name: 'packs',
83
+ passed: report.passed,
84
+ errors: report.summary.errors,
85
+ warnings: report.summary.warnings,
86
+ details: report.issues.map((i) => `${i.severity}: ${i.packageName} ${i.code} — ${i.message}`),
87
+ };
88
+ }
89
+ function actionHintsGroup(inspection) {
90
+ const report = diagnoseActionHints(inspection.knowledgeEntries);
91
+ return {
92
+ name: 'action-hints',
93
+ passed: true, // warnings only — they do not fail unless --strict
94
+ errors: 0,
95
+ warnings: report.issues.length,
96
+ details: report.issues.map((i) => `warn: ${i.code} on ${i.entryId}`),
97
+ };
98
+ }
99
+ function doctorGroup(inspection) {
100
+ const result = runDoctor(inspection);
101
+ return {
102
+ name: 'doctor',
103
+ passed: result.passed,
104
+ errors: result.summary.errors,
105
+ warnings: result.summary.warnings,
106
+ details: result.checks
107
+ .filter((c) => c.severity === 'error' || c.severity === 'warning')
108
+ .map((c) => `${c.severity}: ${c.title} — ${c.message}`),
109
+ };
110
+ }
111
+ function renderReport(args, groups, readinessLine) {
112
+ const totalErrors = groups.reduce((s, g) => s + g.errors, 0);
113
+ const totalWarnings = groups.reduce((s, g) => s + g.warnings, 0);
114
+ const passed = totalErrors === 0;
115
+ const strict = flagBool(args, 'strict');
116
+ const minScore = flagNumber(args, 'min-score');
117
+ if (flagBool(args, 'json')) {
118
+ process.stdout.write(asJson({
119
+ passed,
120
+ groups,
121
+ totals: { errors: totalErrors, warnings: totalWarnings },
122
+ readinessLine,
123
+ }) + '\n');
124
+ return passed && (!strict || totalWarnings === 0) ? 0 : 1;
125
+ }
126
+ process.stdout.write(header('Check summary'));
127
+ for (const g of groups) {
128
+ process.stdout.write(` ${g.passed ? 'OK ' : 'FAIL '} ${g.name.padEnd(16)} errors=${g.errors} warnings=${g.warnings}\n`);
129
+ }
130
+ process.stdout.write(`\nTotals: ${totalErrors} errors, ${totalWarnings} warnings\n`);
131
+ if (readinessLine)
132
+ process.stdout.write(`\n${readinessLine}\n`);
133
+ if (!passed) {
134
+ process.stdout.write('\nDetails (errors):\n');
135
+ for (const g of groups) {
136
+ for (const d of g.details ?? [])
137
+ if (d.startsWith('error:'))
138
+ process.stdout.write(` • ${d}\n`);
139
+ }
140
+ }
141
+ if (strict && totalWarnings > 0) {
142
+ process.stdout.write('\nstrict mode: warnings cause non-zero exit.\n');
143
+ }
144
+ const minOk = minScore === undefined ? true : true; // readiness floor already enforced by shrk doctor; only echo here
145
+ void minOk;
146
+ return passed && (!strict || totalWarnings === 0) ? 0 : 1;
147
+ }
148
+ // ────────────────────────────────────────────────────────────────────────
149
+ // Subcommand: imports
150
+ // ────────────────────────────────────────────────────────────────────────
151
+ async function checkImports(args) {
152
+ const cwd = resolveCwd(args);
153
+ const changedOnly = flagBool(args, 'changed-only');
154
+ const since = flagString(args, 'since');
155
+ let files;
156
+ if (changedOnly || since) {
157
+ const changed = resolveChangedFiles({
158
+ projectRoot: cwd,
159
+ ...(since ? { since } : {}),
160
+ ...(changedOnly && !since ? { includeWorktree: true } : {}),
161
+ });
162
+ files = changed.files;
163
+ }
164
+ // Strict mode rejects allowlist entries with TODO/empty reasons.
165
+ const failOnUnexplained = flagBool(args, 'fail-on-unexplained-allowlist');
166
+ const reportOptions = {};
167
+ if (files)
168
+ reportOptions.files = files;
169
+ if (failOnUnexplained)
170
+ reportOptions.strictAllowlistReasons = true;
171
+ const report = buildImportHygieneReport(cwd, reportOptions);
172
+ // `--emit-allowlist <file>` writes a draft JSON allowlist for
173
+ // human review. Each draft entry has a TODO reason placeholder.
174
+ const emitTarget = flagString(args, 'emit-allowlist');
175
+ const onlyCandidates = flagBool(args, 'only-allowlist-candidates');
176
+ if (emitTarget || onlyCandidates) {
177
+ const kindRaw = flagString(args, 'emit-allowlist-kind');
178
+ const kind = kindRaw === 'all'
179
+ ? 'all'
180
+ : kindRaw === 'dynamic-import'
181
+ ? ImportHygieneFindingKind.DynamicImport
182
+ : kindRaw === 'runtime-require'
183
+ ? ImportHygieneFindingKind.RuntimeRequire
184
+ : kindRaw === 'inline-type-import'
185
+ ? ImportHygieneFindingKind.InlineTypeImport
186
+ : ImportHygieneFindingKind.DynamicImport;
187
+ const draft = emitImportHygieneAllowlistDraft(report, { kind });
188
+ if (emitTarget) {
189
+ const abs = nodePath.isAbsolute(emitTarget)
190
+ ? emitTarget
191
+ : nodePath.resolve(cwd, emitTarget);
192
+ mkdirSync(nodePath.dirname(abs), { recursive: true });
193
+ writeFileSync(abs, JSON.stringify(draft, null, 2) + '\n', 'utf8');
194
+ if (!flagBool(args, 'json')) {
195
+ process.stdout.write(`Wrote draft allowlist with ${draft.allow.length} entry/entries → ${nodePath.relative(cwd, abs)}\n`);
196
+ process.stdout.write(`Edit each entry's "reason" to replace the TODO placeholder before strict mode will accept it.\n`);
197
+ }
198
+ }
199
+ if (flagBool(args, 'json')) {
200
+ process.stdout.write(asJson({ draft, report }) + '\n');
201
+ return 0;
202
+ }
203
+ if (onlyCandidates && !emitTarget) {
204
+ process.stdout.write(asJson(draft) + '\n');
205
+ }
206
+ return 0;
207
+ }
208
+ if (flagBool(args, 'json')) {
209
+ process.stdout.write(asJson(report) + '\n');
210
+ return report.verdict === 'errors' ? 1 : 0;
211
+ }
212
+ process.stdout.write(renderImportHygieneText(report));
213
+ // When --fail-on-unexplained-allowlist is set, warn on existing
214
+ // entries whose reason is still TODO/empty. The scanner has already
215
+ // un-suppressed them, but we also surface a separate accounting line.
216
+ if (failOnUnexplained) {
217
+ const allowlistPath = nodePath.join(cwd, 'sharkcraft', 'import-hygiene.allowlist.json');
218
+ if (existsSync(allowlistPath)) {
219
+ try {
220
+ const raw = JSON.parse(readFileSync(allowlistPath, 'utf8'));
221
+ const unexplained = (raw.allow ?? []).filter((e) => isTodoReason(e.reason));
222
+ if (unexplained.length > 0) {
223
+ process.stdout.write(`\nUnexplained allowlist entries (${unexplained.length}):\n`);
224
+ for (const e of unexplained) {
225
+ process.stdout.write(` • ${e.path}${e.kind ? ` [${e.kind}]` : ''} — reason: ${e.reason ?? '(empty)'}\n`);
226
+ }
227
+ process.stdout.write('Strict mode failing — replace the TODO reason with a real justification or remove the entry.\n');
228
+ return 1;
229
+ }
230
+ }
231
+ catch {
232
+ // ignore parse errors here; the regular scanner has already surfaced them.
233
+ }
234
+ }
235
+ }
236
+ return report.verdict === 'errors' ? 1 : 0;
237
+ }
238
+ // ────────────────────────────────────────────────────────────────────────
239
+ // Subcommand: generation
240
+ // ────────────────────────────────────────────────────────────────────────
241
+ async function checkGeneration(args) {
242
+ const templateId = args.positional[1];
243
+ const name = args.positional[2];
244
+ if (!templateId || !name) {
245
+ process.stderr.write('Usage: shrk check generation <templateId> <name> [--var k=v ...]\n');
246
+ return 2;
247
+ }
248
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
249
+ const template = inspection.templateRegistry.get(templateId);
250
+ if (!template) {
251
+ process.stderr.write(`No template with id "${templateId}".\n`);
252
+ return 1;
253
+ }
254
+ const vars = flagVars(args);
255
+ const validation = validateTemplateVariables(template.variables, { ...vars, name });
256
+ if (!validation.valid) {
257
+ process.stderr.write('Variable validation failed:\n');
258
+ for (const i of validation.issues)
259
+ process.stderr.write(` • ${i.variable}: ${i.message}\n`);
260
+ return 1;
261
+ }
262
+ const result = planGeneration(template, {
263
+ templateId,
264
+ projectRoot: inspection.projectRoot,
265
+ name,
266
+ variables: validation.resolved,
267
+ });
268
+ const plan = result.plan;
269
+ const conflicts = plan.changes.filter((c) => c.type === FileChangeType.Conflict);
270
+ const safe = result.safe;
271
+ if (flagBool(args, 'json')) {
272
+ process.stdout.write(asJson({ templateId, name, safe, conflicts, plan }) + '\n');
273
+ return safe ? 0 : 1;
274
+ }
275
+ process.stdout.write(header(`Check generation: ${templateId} ${name}`));
276
+ process.stdout.write(kv('safe', safe ? 'yes' : 'no') + '\n');
277
+ process.stdout.write(kv('conflicts', String(conflicts.length)) + '\n\n');
278
+ for (const c of plan.changes) {
279
+ process.stdout.write(` ${c.type.padEnd(8)} ${c.relativePath} (${c.reason ?? ''})\n`);
280
+ }
281
+ return safe ? 0 : 1;
282
+ }
283
+ // ────────────────────────────────────────────────────────────────────────
284
+ // Subcommand: boundaries
285
+ // ────────────────────────────────────────────────────────────────────────
286
+ function readChangedScopeOptions(args, cwd) {
287
+ const changedOnly = flagBool(args, 'changed-only');
288
+ const staged = flagBool(args, 'staged');
289
+ const since = flagString(args, 'since');
290
+ const filesRaw = flagString(args, 'files');
291
+ const files = filesRaw
292
+ ? filesRaw.split(',').map((s) => s.trim()).filter((s) => s.length > 0)
293
+ : [];
294
+ if (!changedOnly && !staged && !since && files.length === 0)
295
+ return null;
296
+ const out = { projectRoot: cwd };
297
+ if (files.length > 0)
298
+ out.files = files;
299
+ else if (staged)
300
+ out.staged = true;
301
+ else if (since)
302
+ out.since = since;
303
+ else
304
+ out.includeWorktree = true;
305
+ return out;
306
+ }
307
+ async function checkBoundaries(args) {
308
+ const cwd = resolveCwd(args);
309
+ const inspection = await inspectSharkcraft({ cwd });
310
+ const rules = inspection.boundaryRegistry.list();
311
+ const ruleFilter = flagString(args, 'rule');
312
+ const polyglot = flagBool(args, 'polyglot');
313
+ const changedScope = readChangedScopeOptions(args, cwd);
314
+ if (polyglot) {
315
+ // Emit the polyglot boundary report alongside (or instead of) the
316
+ // existing TS-aware engine. Default is `both` — append polyglot section
317
+ // after the TS one. JSON mode returns a combined payload.
318
+ const { buildPolyglotBoundaryReport } = await import('@shrkcrft/inspector');
319
+ const polyglotReport = buildPolyglotBoundaryReport({ projectRoot: cwd });
320
+ // Apply changed-only filter before emit.
321
+ const polyglotFiltered = changedScope
322
+ ? filterViolationsToChangedScope(polyglotReport.violations, changedScope)
323
+ : null;
324
+ const polyglotViolations = polyglotFiltered
325
+ ? polyglotFiltered.includedViolations
326
+ : polyglotReport.violations;
327
+ const polyglotErrors = polyglotViolations.filter((v) => v.severity === 'error').length;
328
+ const polyglotWarnings = polyglotViolations.filter((v) => v.severity === 'warning').length;
329
+ if (flagBool(args, 'json')) {
330
+ // We still run the TS engine when rules exist, but always tack on the
331
+ // polyglot report so CI/integrators get both surfaces.
332
+ const tsScan = rules.length > 0 ? scanImports({ projectRoot: cwd }) : null;
333
+ const tsEval = tsScan ? evaluateBoundaries(tsScan, rules, {
334
+ ...(ruleFilter ? { onlyRuleId: ruleFilter } : {}),
335
+ }) : null;
336
+ const tsFiltered = tsEval && changedScope
337
+ ? filterViolationsToChangedScope(tsEval.violations, changedScope)
338
+ : null;
339
+ const tsViolations = tsFiltered ? tsFiltered.includedViolations : tsEval?.violations ?? [];
340
+ const tsErrors = tsViolations.filter((v) => v.severity === 'error').length;
341
+ process.stdout.write(asJson({
342
+ polyglot: {
343
+ counts: { errors: polyglotErrors, warnings: polyglotWarnings, rules: polyglotReport.counts.rules },
344
+ languages: polyglotReport.languages,
345
+ violations: polyglotViolations,
346
+ },
347
+ typescript: tsEval ? {
348
+ counts: { ...tsEval.counts, error: tsErrors },
349
+ violations: tsViolations,
350
+ } : null,
351
+ ...(changedScope
352
+ ? {
353
+ changedScope: {
354
+ mode: polyglotFiltered?.mode ?? ChangedScopeMode.ChangedOnly,
355
+ changedFiles: polyglotFiltered?.changedFiles ?? [],
356
+ ignoredLegacyCount: (polyglotFiltered?.ignoredLegacyCount ?? 0) + (tsFiltered?.ignoredLegacyCount ?? 0),
357
+ ignoredLegacyByRule: {
358
+ ...(polyglotFiltered?.ignoredLegacyByRule ?? {}),
359
+ ...(tsFiltered?.ignoredLegacyByRule ?? {}),
360
+ },
361
+ },
362
+ }
363
+ : {}),
364
+ }) + '\n');
365
+ return polyglotErrors > 0 || tsErrors > 0 ? 1 : 0;
366
+ }
367
+ process.stdout.write(header('Polyglot boundaries'));
368
+ process.stdout.write(kv('languages', polyglotReport.languages.join(', ') || '(none)') + '\n');
369
+ process.stdout.write(kv('rules', String(polyglotReport.counts.rules)) + '\n');
370
+ process.stdout.write(kv('violations', `${polyglotErrors} errors, ${polyglotWarnings} warnings`) + '\n');
371
+ if (polyglotFiltered) {
372
+ process.stdout.write(kv('mode', polyglotFiltered.mode) + '\n');
373
+ process.stdout.write(kv('changed files', String(polyglotFiltered.changedFiles.length)) + '\n');
374
+ process.stdout.write(kv('legacy ignored', String(polyglotFiltered.ignoredLegacyCount)) + '\n');
375
+ }
376
+ if (polyglotViolations.length > 0) {
377
+ for (const v of polyglotViolations) {
378
+ process.stdout.write(` ${v.severity.toUpperCase().padEnd(8)} ${v.ruleId} ${v.fromFile}\n`);
379
+ process.stdout.write(` import: "${v.importSpecifier}"\n`);
380
+ process.stdout.write(` ↳ ${v.suggestedFix}\n`);
381
+ }
382
+ }
383
+ else if (polyglotFiltered) {
384
+ process.stdout.write(' No boundary violations introduced by changed files.\n');
385
+ }
386
+ if (polyglotErrors > 0)
387
+ return 1;
388
+ process.stdout.write('\n');
389
+ // Fall through to the TS engine below so callers see both views.
390
+ }
391
+ if (rules.length === 0) {
392
+ if (flagBool(args, 'json')) {
393
+ process.stdout.write(asJson({ rules: 0, violations: [], note: 'no boundary rules configured' }) + '\n');
394
+ return 0;
395
+ }
396
+ process.stdout.write(header('Boundaries'));
397
+ process.stdout.write(' No boundary rules configured. Add `sharkcraft/boundaries.ts` or install a pack with `boundaryFiles`.\n');
398
+ return 0;
399
+ }
400
+ const scan = scanImports({ projectRoot: cwd });
401
+ const tsconfigPaths = loadTsconfigPaths(cwd);
402
+ const evalResultRaw = evaluateBoundaries(scan, rules, {
403
+ ...(ruleFilter ? { onlyRuleId: ruleFilter } : {}),
404
+ ...(tsconfigPaths.aliases.size > 0 ? { tsconfigPaths } : {}),
405
+ });
406
+ // Changed-only filtering on the TS engine output.
407
+ const changedFiltered = changedScope
408
+ ? filterViolationsToChangedScope(evalResultRaw.violations, changedScope)
409
+ : null;
410
+ const evalResult = changedFiltered
411
+ ? {
412
+ ...evalResultRaw,
413
+ violations: changedFiltered.includedViolations,
414
+ counts: {
415
+ error: changedFiltered.includedViolations.filter((v) => v.severity === 'error').length,
416
+ warning: changedFiltered.includedViolations.filter((v) => v.severity === 'warning').length,
417
+ info: changedFiltered.includedViolations.filter((v) => v.severity === 'info').length,
418
+ },
419
+ }
420
+ : evalResultRaw;
421
+ const summary = summarizeImports(scan);
422
+ const strict = flagBool(args, 'strict');
423
+ const failed = evalResult.counts.error > 0 || (strict && evalResult.counts.warning > 0);
424
+ const wantFixSuggestions = flagBool(args, 'fix-suggestions');
425
+ const fixSuggestions = wantFixSuggestions
426
+ ? suggestBoundaryFixes(inspection, evalResult.violations.map((v) => ({
427
+ ruleId: v.ruleId,
428
+ file: v.file,
429
+ line: v.line,
430
+ importSpecifier: v.importSpecifier,
431
+ ...(v.suggestedFix ? { suggestedFix: v.suggestedFix } : {}),
432
+ })))
433
+ : [];
434
+ if (flagBool(args, 'json')) {
435
+ process.stdout.write(asJson({
436
+ passed: !failed,
437
+ rulesEvaluated: evalResult.rulesEvaluated,
438
+ edgesEvaluated: evalResult.edgesEvaluated,
439
+ counts: evalResult.counts,
440
+ violations: evalResult.violations,
441
+ importGraph: summary,
442
+ ...(wantFixSuggestions ? { fixSuggestions } : {}),
443
+ ...(changedFiltered
444
+ ? {
445
+ changedScope: {
446
+ mode: changedFiltered.mode,
447
+ changedFiles: changedFiltered.changedFiles,
448
+ includedViolations: changedFiltered.includedViolations,
449
+ ignoredLegacyCount: changedFiltered.ignoredLegacyCount,
450
+ ignoredLegacyByRule: changedFiltered.ignoredLegacyByRule,
451
+ },
452
+ }
453
+ : {}),
454
+ }) + '\n');
455
+ return failed ? 1 : 0;
456
+ }
457
+ process.stdout.write(header('Boundaries'));
458
+ process.stdout.write(kv('rules', String(evalResult.rulesEvaluated)) + '\n');
459
+ process.stdout.write(kv('files scanned', String(summary.filesScanned)) + '\n');
460
+ process.stdout.write(kv('imports', String(summary.totalImports)) + '\n');
461
+ process.stdout.write(kv('violations', `${evalResult.counts.error} errors, ${evalResult.counts.warning} warnings, ${evalResult.counts.info} info`) + '\n');
462
+ if (changedFiltered) {
463
+ process.stdout.write(kv('mode', changedFiltered.mode) + '\n');
464
+ process.stdout.write(kv('changed files', String(changedFiltered.changedFiles.length)) + '\n');
465
+ process.stdout.write(kv('legacy ignored', String(changedFiltered.ignoredLegacyCount)) + '\n');
466
+ }
467
+ process.stdout.write('\n');
468
+ if (evalResult.violations.length === 0) {
469
+ if (changedFiltered) {
470
+ process.stdout.write('No boundary violations introduced by changed files.\n');
471
+ }
472
+ else {
473
+ process.stdout.write('No violations.\n');
474
+ }
475
+ return 0;
476
+ }
477
+ for (const v of evalResult.violations) {
478
+ const tag = v.severity.toUpperCase().padEnd(8);
479
+ process.stdout.write(` ${tag} ${v.ruleId.padEnd(28)} ${v.file}:${v.line}\n`);
480
+ process.stdout.write(` import: "${v.importSpecifier}"\n`);
481
+ if (v.matchedForbidden) {
482
+ process.stdout.write(` matched forbidden pattern: ${v.matchedForbidden}\n`);
483
+ }
484
+ else if (v.notAllowed) {
485
+ process.stdout.write(` not in allowed list for ${v.ruleId}\n`);
486
+ }
487
+ process.stdout.write(` ${v.message}\n`);
488
+ if (v.suggestedFix)
489
+ process.stdout.write(` ↳ ${v.suggestedFix}\n`);
490
+ }
491
+ if (wantFixSuggestions && fixSuggestions.length > 0) {
492
+ process.stdout.write('\nFix suggestions:\n');
493
+ for (const s of fixSuggestions) {
494
+ process.stdout.write(` ${s.file}:${s.line}\n`);
495
+ for (const sug of s.suggestions)
496
+ process.stdout.write(` ↳ ${sug}\n`);
497
+ }
498
+ }
499
+ process.stdout.write(`\nVerdict: ${failed ? 'boundary violations need attention' : 'OK ✓'}\n`);
500
+ return failed ? 1 : 0;
501
+ }
502
+ // ────────────────────────────────────────────────────────────────────────
503
+ // Main shrk check + subcommands
504
+ // ────────────────────────────────────────────────────────────────────────
505
+ export const checkCommand = {
506
+ name: 'check',
507
+ description: 'Run SharkCraft-level validation across knowledge / rules / templates / pipelines / packs / action hints / doctor.',
508
+ usage: 'shrk [--cwd <dir>] check [packs|pipelines|knowledge|generation] [--strict] [--min-score <0-100>] [--json]',
509
+ async run(args) {
510
+ const sub = args.positional[0];
511
+ if (sub === 'generation')
512
+ return checkGeneration(args);
513
+ if (sub === 'boundaries')
514
+ return checkBoundaries(args);
515
+ if (sub === 'imports' || sub === 'import-hygiene')
516
+ return checkImports(args);
517
+ if (sub === 'registry-lifecycle') {
518
+ const cwd = resolveCwd(args);
519
+ const { buildRegistryLifecycleReport, renderRegistryLifecycleReportText } = await import('@shrkcrft/inspector');
520
+ const report = buildRegistryLifecycleReport({ projectRoot: cwd });
521
+ if (flagBool(args, 'json')) {
522
+ process.stdout.write(asJson(report) + '\n');
523
+ return report.missingRemovers.length === 0 ? 0 : 1;
524
+ }
525
+ process.stdout.write(renderRegistryLifecycleReportText(report));
526
+ return report.missingRemovers.length === 0 ? 0 : 1;
527
+ }
528
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
529
+ const readiness = buildAiReadinessReport(inspection);
530
+ const readinessLine = `AI-readiness: ${readiness.score}/100 (${readiness.grade})`;
531
+ if (sub === 'packs') {
532
+ return renderReport(args, [packsGroup(inspection)], readinessLine);
533
+ }
534
+ if (sub === 'pipelines') {
535
+ return renderReport(args, [pipelinesGroup(inspection)], readinessLine);
536
+ }
537
+ if (sub === 'knowledge') {
538
+ return renderReport(args, [knowledgeGroup(inspection)], readinessLine);
539
+ }
540
+ if (sub === 'templates') {
541
+ return renderReport(args, [templatesGroup(inspection)], readinessLine);
542
+ }
543
+ // Default: full sweep.
544
+ return renderReport(args, [
545
+ doctorGroup(inspection),
546
+ knowledgeGroup(inspection),
547
+ templatesGroup(inspection),
548
+ pipelinesGroup(inspection),
549
+ packsGroup(inspection),
550
+ actionHintsGroup(inspection),
551
+ ], readinessLine);
552
+ },
553
+ };
@@ -0,0 +1,29 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const checksListCommand: ICommandHandler;
3
+ export declare const checksDoctorCommand: ICommandHandler;
4
+ export declare const checksRunCommand: ICommandHandler;
5
+ export declare const checksParseReportCommand: ICommandHandler;
6
+ /**
7
+ * `shrk checks import <file>`. Read a v1 report, or convert a
8
+ * known third-party format (ESLint JSON for now), and store the
9
+ * canonical result under `.sharkcraft/checks/`.
10
+ */
11
+ export declare const checksImportCommand: ICommandHandler;
12
+ /**
13
+ * `shrk checks aggregate`. Read every v1 result under
14
+ * `.sharkcraft/checks/` and produce a rollup. Writes to
15
+ * `.sharkcraft/checks/aggregate.json` unless `--no-write` is set.
16
+ */
17
+ export declare const checksAggregateCommand: ICommandHandler;
18
+ /**
19
+ * `shrk checks report`. Render the aggregate (or each individual
20
+ * imported result if no aggregate exists yet) as text / markdown / json.
21
+ */
22
+ export declare const checksReportCommand: ICommandHandler;
23
+ /**
24
+ * `shrk checks convert <eslint|biome> <file>`. One-shot
25
+ * conversion from a third-party format to a v1 check-result. Writes
26
+ * to stdout unless `--output` is set.
27
+ */
28
+ export declare const checksConvertCommand: ICommandHandler;
29
+ //# sourceMappingURL=checks.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.command.d.ts","sourceRoot":"","sources":["../../src/commands/checks.command.ts"],"names":[],"mappings":"AAiCA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAKhC,eAAO,MAAM,iBAAiB,EAAE,eA6C/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eA+BjC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAgD9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAkCtC,CAAC;AAwCF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,eA8DjC,CAAC;AAUF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,eA0CpC,CAAC;AAyBF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAsCjC,CAAC;AA0EF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA6ClC,CAAC"}