@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 @@
1
+ {"version":3,"file":"drift.command.d.ts","sourceRoot":"","sources":["../../src/commands/drift.command.ts"],"names":[],"mappings":"AAUA,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAOhC,eAAO,MAAM,YAAY,EAAE,eA4E1B,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { buildDriftReport, classifyChangedScope, classifyRuleDrift, inspectSharkcraft, resolveChangedFiles, RuleEnforcementState, summariseChangedScope, } from '@shrkcrft/inspector';
2
+ import { flagBool, flagString, flagList, resolveCwd, } from "../command-registry.js";
3
+ import { asJson, header, kv } from "../output/format-output.js";
4
+ // `drift baseline {create|compare|update}` removed.
5
+ // The baseline machinery was hidden / unused; `drift rules` and the
6
+ // core `drift` report cover the actionable cases.
7
+ export const driftCommand = {
8
+ name: 'drift',
9
+ description: 'Detect architecture drift: boundary violations, broken preset references, pipeline/template links, missing pack assets. Also: `shrk drift rules` — classify each rule as ENFORCED/PARTIAL/MANUAL/ASPIRATIONAL/STALE.',
10
+ usage: 'shrk [--cwd <dir>] drift [--skip-boundaries] [--json] | shrk drift rules [--strict] [--json]',
11
+ async run(args) {
12
+ if (args.positional[0] === 'rules') {
13
+ const sub = { ...args, positional: args.positional.slice(1) };
14
+ return runDriftRules(sub);
15
+ }
16
+ const cwd = resolveCwd(args);
17
+ const inspection = await inspectSharkcraft({ cwd });
18
+ const report = buildDriftReport(inspection, {
19
+ runBoundaries: !flagBool(args, 'skip-boundaries'),
20
+ });
21
+ const changedOnly = flagBool(args, 'changed-only');
22
+ const since = flagString(args, 'since');
23
+ const staged = flagBool(args, 'staged');
24
+ const files = flagList(args, 'files');
25
+ const changedScopeOpts = changedOnly || since || staged || files.length > 0
26
+ ? {
27
+ projectRoot: cwd,
28
+ ...(since ? { since } : {}),
29
+ ...(staged ? { staged: true } : {}),
30
+ ...(files.length > 0 ? { files } : {}),
31
+ includeWorktree: changedOnly || !since,
32
+ }
33
+ : null;
34
+ const classification = changedScopeOpts
35
+ ? (() => {
36
+ const resolved = resolveChangedFiles(changedScopeOpts);
37
+ return classifyChangedScope({
38
+ projectRoot: cwd,
39
+ current: report.findings.map((f) => {
40
+ const file = f.evidence?.file;
41
+ return {
42
+ key: `${f.category}:${f.message}:${file ?? ''}`,
43
+ code: f.category,
44
+ severity: f.severity,
45
+ message: f.message,
46
+ ...(file ? { file } : {}),
47
+ };
48
+ }),
49
+ changedFiles: resolved.files,
50
+ });
51
+ })()
52
+ : null;
53
+ if (flagBool(args, 'json')) {
54
+ process.stdout.write(asJson({ ...report, ...(classification ? { changedScope: classification } : {}) }) + '\n');
55
+ return report.counts.error > 0 ? 1 : 0;
56
+ }
57
+ process.stdout.write(header('Drift report'));
58
+ process.stdout.write(kv('totals', `${report.counts.error} errors, ${report.counts.warning} warnings, ${report.counts.info} info`) + '\n\n');
59
+ if (classification) {
60
+ process.stdout.write(`changed-scope: ${summariseChangedScope(classification)}\n\n`);
61
+ }
62
+ if (report.findings.length === 0) {
63
+ process.stdout.write('No drift detected.\n');
64
+ return 0;
65
+ }
66
+ for (const f of report.findings) {
67
+ const tag = f.severity.toUpperCase().padEnd(8);
68
+ process.stdout.write(` ${tag} ${f.category.padEnd(22)} ${f.message}\n`);
69
+ if (f.suggestedFix)
70
+ process.stdout.write(` ↳ ${f.suggestedFix}\n`);
71
+ }
72
+ return report.counts.error > 0 ? 1 : 0;
73
+ },
74
+ };
75
+ /**
76
+ * `shrk drift rules`. Classifies every rule into ENFORCED /
77
+ * PARTIALLY_ENFORCED / MANUAL_ONLY / ASPIRATIONAL / STALE / UNKNOWN so a
78
+ * maintainer can see whether the rule system is real or ceremonial.
79
+ *
80
+ * `--strict` fails when ASPIRATIONAL or STALE rules exist.
81
+ * `--json` emits the structured report.
82
+ */
83
+ async function runDriftRules(args) {
84
+ const cwd = resolveCwd(args);
85
+ const inspection = await inspectSharkcraft({ cwd });
86
+ const report = classifyRuleDrift(inspection);
87
+ const strict = flagBool(args, 'strict');
88
+ if (flagBool(args, 'json')) {
89
+ process.stdout.write(asJson(report) + '\n');
90
+ return strict &&
91
+ (report.summary[RuleEnforcementState.Aspirational] > 0 ||
92
+ report.summary[RuleEnforcementState.Stale] > 0)
93
+ ? 1
94
+ : 0;
95
+ }
96
+ process.stdout.write(header('Rule enforcement drift'));
97
+ process.stdout.write(kv('totals', Object.entries(report.summary)
98
+ .filter(([, n]) => n > 0)
99
+ .map(([k, n]) => `${k}: ${n}`)
100
+ .join(', ') || 'no rules') + '\n\n');
101
+ if (report.entries.length === 0) {
102
+ process.stdout.write('No rules registered.\n');
103
+ return 0;
104
+ }
105
+ for (const e of report.entries) {
106
+ const tag = e.state.toUpperCase().padEnd(20);
107
+ const src = e.source.type === 'pack' ? `[${e.source.packageName ?? 'pack'}]` : '[local]';
108
+ process.stdout.write(` ${tag} ${e.id.padEnd(36)} ${src} — ${e.reason}\n`);
109
+ }
110
+ if (report.nextCommands.length > 0) {
111
+ process.stdout.write('\nNext:\n');
112
+ for (const c of report.nextCommands)
113
+ process.stdout.write(` ${c}\n`);
114
+ }
115
+ if (strict) {
116
+ const failing = report.summary[RuleEnforcementState.Aspirational] +
117
+ report.summary[RuleEnforcementState.Stale];
118
+ if (failing > 0) {
119
+ process.stdout.write(`\nStrict mode: failing because ${failing} rule(s) are aspirational or stale.\n`);
120
+ return 1;
121
+ }
122
+ }
123
+ return 0;
124
+ }
@@ -0,0 +1,7 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const eslintScaffoldCommand: ICommandHandler;
3
+ export declare const eslintReportCommand: ICommandHandler;
4
+ export declare const eslintRulesCommand: ICommandHandler;
5
+ export declare const eslintExplainLimitationsCommand: ICommandHandler;
6
+ export declare const eslintCommand: ICommandHandler;
7
+ //# sourceMappingURL=eslint.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint.command.d.ts","sourceRoot":"","sources":["../../src/commands/eslint.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AA2DhC,eAAO,MAAM,qBAAqB,EAAE,eA8DnC,CAAC;AAiCF,eAAO,MAAM,mBAAmB,EAAE,eAiFjC,CAAC;AAgFF,eAAO,MAAM,kBAAkB,EAAE,eAsDhC,CAAC;AAkCF,eAAO,MAAM,+BAA+B,EAAE,eAyC7C,CAAC;AAmBF,eAAO,MAAM,aAAa,EAAE,eAuC3B,CAAC"}
@@ -0,0 +1,423 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import * as nodePath from 'node:path';
3
+ import { inspectSharkcraft } from '@shrkcrft/inspector';
4
+ import { flagBool, flagString, resolveCwd, } from "../command-registry.js";
5
+ import { asJson, bullet, header } from "../output/format-output.js";
6
+ /**
7
+ * ESLint bridge. NOT a full ESLint plugin: a thin adapter that
8
+ * (a) scaffolds a minimal flat-config snippet for repos that want to
9
+ * keep their existing ESLint setup but co-exist cleanly with
10
+ * SharkCraft (mainly: don't lint the generated paths SharkCraft
11
+ * tracks);
12
+ * (b) re-emits `shrk check boundaries` JSON in the ESLint result format
13
+ * so ESLint-result-consuming tooling (annotators, reviewdog,
14
+ * etc.) can surface SharkCraft boundary violations on PRs without
15
+ * adopting the SharkCraft CLI directly.
16
+ *
17
+ * Both subcommands default to dry-run. The scaffold is intentionally
18
+ * small — the goal is integration, not opinion imposition.
19
+ */
20
+ const SCAFFOLD_BANNER = "// Generated by `shrk eslint scaffold`. Edit freely — re-running with --force overwrites.";
21
+ const SCAFFOLD_DEFAULT_RELPATH = 'eslint.sharkcraft.config.mjs';
22
+ function renderEslintFlatConfigSnippet(generatedPathGlobs, paths) {
23
+ const globs = generatedPathGlobs.length
24
+ ? generatedPathGlobs.map((g) => ` '${g}',`).join('\n')
25
+ : " // No generated paths declared in sharkcraft/paths.ts — add globs here as you adopt SharkCraft path conventions.";
26
+ const pathDocs = paths.length
27
+ ? paths.map((p) => `// - ${p.id}${p.description ? ` — ${p.description}` : ''}`).join('\n')
28
+ : '// (no SharkCraft path conventions declared yet — run `shrk paths list` after `shrk init --zero-config`)';
29
+ return `${SCAFFOLD_BANNER}
30
+ //
31
+ // This file is a starter snippet — import or merge it from your top-level
32
+ // eslint.config.mjs. It does NOT replace your existing rules. It adds:
33
+ // - "ignores" for paths SharkCraft tracks as generated.
34
+ // - a comment block linking to the SharkCraft boundary check, which
35
+ // enforces cross-layer / cross-package discipline that ESLint cannot
36
+ // express.
37
+ //
38
+ // Known SharkCraft path conventions:
39
+ ${pathDocs}
40
+ //
41
+ // For cross-layer boundary enforcement run:
42
+ // $ shrk check boundaries --changed-only --json
43
+ //
44
+ export default [
45
+ {
46
+ ignores: [
47
+ ${globs}
48
+ ],
49
+ },
50
+ ];
51
+ `;
52
+ }
53
+ export const eslintScaffoldCommand = {
54
+ name: 'scaffold',
55
+ description: 'Scaffold a minimal ESLint flat-config snippet that co-exists with SharkCraft (ignores generated paths + links to `shrk check boundaries`). Dry-run by default; `--write` persists.',
56
+ usage: 'shrk eslint scaffold [--output <path>] [--preset auto] [--write] [--force] [--json]',
57
+ async run(args) {
58
+ const cwd = resolveCwd(args);
59
+ const presetMode = flagString(args, 'preset');
60
+ if (presetMode && presetMode !== 'auto') {
61
+ process.stderr.write(`Unknown --preset value "${presetMode}" (only "auto" is supported).\n`);
62
+ return 2;
63
+ }
64
+ // Pull path conventions + generated-dir globs from the live SharkCraft
65
+ // inspection. We tolerate missing config — small repos may not have
66
+ // adopted sharkcraft/ yet.
67
+ let pathDescriptors = [];
68
+ let generatedGlobs = [];
69
+ try {
70
+ const inspection = await inspectSharkcraft({ cwd });
71
+ const pathList = inspection.pathService.list();
72
+ pathDescriptors = pathList.map((p) => ({
73
+ id: p.id,
74
+ description: typeof p.metadata?.description === 'string' ? p.metadata.description : undefined,
75
+ }));
76
+ generatedGlobs = pathList
77
+ .filter((p) => p.tags?.some((t) => /generated|build|dist|output/i.test(t)))
78
+ .map((p) => (typeof p.metadata?.path === 'string' ? p.metadata.path : null))
79
+ .filter((g) => typeof g === 'string' && g.length > 0);
80
+ }
81
+ catch {
82
+ // best-effort — the scaffold still works without sharkcraft/.
83
+ }
84
+ const body = renderEslintFlatConfigSnippet(generatedGlobs, pathDescriptors);
85
+ const outputRel = flagString(args, 'output') ?? SCAFFOLD_DEFAULT_RELPATH;
86
+ const outputAbs = nodePath.isAbsolute(outputRel) ? outputRel : nodePath.join(cwd, outputRel);
87
+ if (flagBool(args, 'json')) {
88
+ const mode = flagBool(args, 'write') ? 'write' : 'dry-run';
89
+ process.stdout.write(asJson({ mode, output: outputAbs, bytes: body.length, body }) + '\n');
90
+ if (mode !== 'write')
91
+ return 0;
92
+ }
93
+ if (!flagBool(args, 'write')) {
94
+ process.stdout.write(header('ESLint scaffold — dry-run'));
95
+ process.stdout.write(`output: ${outputAbs}\n`);
96
+ process.stdout.write(`bytes: ${body.length}\n\n`);
97
+ process.stdout.write(body);
98
+ process.stdout.write('\nRun with --write to persist.\n');
99
+ return 0;
100
+ }
101
+ if (existsSync(outputAbs) && !flagBool(args, 'force')) {
102
+ process.stderr.write(`Refusing to overwrite existing file: ${outputAbs}. Pass --force.\n`);
103
+ return 1;
104
+ }
105
+ mkdirSync(nodePath.dirname(outputAbs), { recursive: true });
106
+ writeFileSync(outputAbs, body, 'utf8');
107
+ process.stdout.write(`Wrote ${outputAbs}\n`);
108
+ return 0;
109
+ },
110
+ };
111
+ export const eslintReportCommand = {
112
+ name: 'report',
113
+ description: 'Re-emit `shrk check boundaries --json` output in the ESLint result format (array of { filePath, messages[] }) so ESLint-aware tooling can consume SharkCraft boundary violations.',
114
+ usage: 'shrk eslint report [--from <path>] [--output <path>] [--json]',
115
+ async run(args) {
116
+ const cwd = resolveCwd(args);
117
+ const from = flagString(args, 'from');
118
+ const fromAbs = from
119
+ ? nodePath.isAbsolute(from)
120
+ ? from
121
+ : nodePath.join(cwd, from)
122
+ : null;
123
+ if (fromAbs && !existsSync(fromAbs)) {
124
+ process.stderr.write(`--from file not found: ${fromAbs}\n`);
125
+ return 1;
126
+ }
127
+ let report;
128
+ if (fromAbs) {
129
+ const raw = readFileSync(fromAbs, 'utf8');
130
+ try {
131
+ report = JSON.parse(raw);
132
+ }
133
+ catch (e) {
134
+ process.stderr.write(`Failed to parse boundary report JSON: ${e.message}\n`);
135
+ return 1;
136
+ }
137
+ }
138
+ else {
139
+ // No --from: tell the user the canonical pipeline.
140
+ process.stderr.write('No --from <boundary-report.json> passed. Generate one first:\n' +
141
+ ' $ shrk check boundaries --json > boundaries.json\n' +
142
+ ' $ shrk eslint report --from boundaries.json > eslint-results.json\n');
143
+ return 2;
144
+ }
145
+ const byFile = new Map();
146
+ for (const v of report.violations ?? []) {
147
+ const file = v.file ?? '<unknown>';
148
+ if (!byFile.has(file)) {
149
+ byFile.set(file, {
150
+ filePath: nodePath.isAbsolute(file) ? file : nodePath.join(cwd, file),
151
+ messages: [],
152
+ errorCount: 0,
153
+ warningCount: 0,
154
+ fixableErrorCount: 0,
155
+ fixableWarningCount: 0,
156
+ });
157
+ }
158
+ const entry = byFile.get(file);
159
+ const msg = {
160
+ ruleId: 'sharkcraft/boundary-violation',
161
+ severity: 2,
162
+ message: (v.reason ?? 'SharkCraft boundary violation') +
163
+ (v.source && v.target ? ` (${v.source} → ${v.target})` : ''),
164
+ line: v.line ?? 1,
165
+ column: v.column ?? 1,
166
+ };
167
+ entry.messages.push(msg);
168
+ entry.errorCount += 1;
169
+ }
170
+ const out = Array.from(byFile.values());
171
+ const wantJson = flagBool(args, 'json') || !!flagString(args, 'output');
172
+ const outputRel = flagString(args, 'output');
173
+ const text = wantJson ? asJson(out) + '\n' : renderEslintReportText(out);
174
+ if (outputRel) {
175
+ const outputAbs = nodePath.isAbsolute(outputRel) ? outputRel : nodePath.join(cwd, outputRel);
176
+ mkdirSync(nodePath.dirname(outputAbs), { recursive: true });
177
+ writeFileSync(outputAbs, text, 'utf8');
178
+ process.stdout.write(`Wrote ${outputAbs}\n`);
179
+ }
180
+ else {
181
+ process.stdout.write(text);
182
+ }
183
+ return out.length > 0 ? 1 : 0;
184
+ },
185
+ };
186
+ function buildBridgeInventory(rules, paths) {
187
+ const rows = [];
188
+ for (const r of rules) {
189
+ const tagText = (r.tags ?? []).join(' ').toLowerCase();
190
+ const id = r.id.toLowerCase();
191
+ let status = 'not-bridgeable';
192
+ let notes = 'SharkCraft-only enforcement.';
193
+ if (tagText.includes('import') || tagText.includes('boundary') || id.includes('layer') || id.includes('import')) {
194
+ status = 'bridgeable';
195
+ notes = 'Representable via no-restricted-imports / boundary plugin.';
196
+ }
197
+ else if (tagText.includes('naming') || tagText.includes('file-shape')) {
198
+ status = 'bridgeable';
199
+ notes = 'Representable via @typescript-eslint naming or filename plugin.';
200
+ }
201
+ else if (tagText.includes('safety') || tagText.includes('signing') || tagText.includes('plan')) {
202
+ status = 'not-bridgeable';
203
+ notes = 'Plan / signing / safety semantics — keep in `shrk safety audit`.';
204
+ }
205
+ else if (tagText.includes('pack')) {
206
+ status = 'not-bridgeable';
207
+ notes = 'Pack-level — enforce with `shrk packs doctor`.';
208
+ }
209
+ else {
210
+ status = 'adjacent';
211
+ notes = '`shrk eslint report` re-emits findings in the ESLint result format.';
212
+ }
213
+ rows.push({ kind: 'rule', id: r.id, status, notes });
214
+ }
215
+ for (const p of paths) {
216
+ const tagText = (p.tags ?? []).join(' ').toLowerCase();
217
+ const isGenerated = /generated|build|dist|output/.test(tagText);
218
+ rows.push({
219
+ kind: 'path',
220
+ id: p.id,
221
+ status: isGenerated ? 'bridgeable' : 'adjacent',
222
+ notes: isGenerated
223
+ ? 'Goes in ESLint `ignores`.'
224
+ : 'Adjacent: surfaced for context; not directly enforceable by ESLint.',
225
+ });
226
+ }
227
+ rows.push({
228
+ kind: 'boundary',
229
+ id: 'check-boundaries',
230
+ status: 'adjacent',
231
+ notes: '`shrk eslint report` emits boundary violations in ESLint result format.',
232
+ });
233
+ rows.push({
234
+ kind: 'check',
235
+ id: 'custom-checks (sharkcraft.custom-check/v1)',
236
+ status: 'adjacent',
237
+ notes: '`shrk checks convert eslint <file>` round-trips ESLint into the SharkCraft protocol.',
238
+ });
239
+ rows.push({
240
+ kind: 'safety',
241
+ id: 'plan-signing / pack-signatures / knowledge-stale / template-drift',
242
+ status: 'not-bridgeable',
243
+ notes: 'CI gate only. ESLint has no semantic for any of these.',
244
+ });
245
+ return rows;
246
+ }
247
+ export const eslintRulesCommand = {
248
+ name: 'rules',
249
+ description: 'Inventory which SharkCraft constructs can be bridged to ESLint (bridgeable / adjacent / not-bridgeable). Read-only.',
250
+ usage: 'shrk eslint rules [--json] [--filter bridgeable|adjacent|not-bridgeable]',
251
+ async run(args) {
252
+ const cwd = resolveCwd(args);
253
+ let rules = [];
254
+ let paths = [];
255
+ try {
256
+ const inspection = await inspectSharkcraft({ cwd });
257
+ rules = inspection.ruleService.list().map((r) => ({
258
+ id: r.id,
259
+ description: typeof r.metadata?.description === 'string' ? r.metadata.description : undefined,
260
+ tags: r.tags ?? [],
261
+ }));
262
+ paths = inspection.pathService.list().map((p) => ({
263
+ id: p.id,
264
+ description: typeof p.metadata?.description === 'string' ? p.metadata.description : undefined,
265
+ tags: p.tags ?? [],
266
+ }));
267
+ }
268
+ catch {
269
+ // best-effort
270
+ }
271
+ const inventory = buildBridgeInventory(rules, paths);
272
+ const filter = flagString(args, 'filter');
273
+ const filtered = filter
274
+ ? inventory.filter((r) => r.status === filter)
275
+ : inventory;
276
+ if (flagBool(args, 'json')) {
277
+ process.stdout.write(asJson({ total: inventory.length, rows: filtered }) + '\n');
278
+ return 0;
279
+ }
280
+ process.stdout.write(header(`ESLint bridge inventory (${filtered.length} of ${inventory.length})`));
281
+ const buckets = {
282
+ bridgeable: [],
283
+ adjacent: [],
284
+ 'not-bridgeable': [],
285
+ };
286
+ for (const r of filtered)
287
+ buckets[r.status].push(r);
288
+ for (const status of ['bridgeable', 'adjacent', 'not-bridgeable']) {
289
+ const rows = buckets[status];
290
+ if (!rows.length)
291
+ continue;
292
+ process.stdout.write(`\n[${status}] ${rows.length}\n`);
293
+ for (const r of rows) {
294
+ process.stdout.write(` ${r.kind.padEnd(9)} ${r.id}\n`);
295
+ process.stdout.write(` ${r.notes}\n`);
296
+ }
297
+ }
298
+ process.stdout.write('\nKeep in CI: `shrk check boundaries`, `shrk safety audit`, `shrk packs doctor`, `shrk knowledge stale-check`, `shrk templates drift`.\n');
299
+ return 0;
300
+ },
301
+ };
302
+ const ESLINT_LIMITATIONS = `\
303
+ # ESLint bridge — limitations
304
+
305
+ What the bridge **can** do today:
306
+
307
+ • \`shrk eslint scaffold\` — emit a flat-config snippet that ignores
308
+ SharkCraft generated paths and points at \`shrk check boundaries\`.
309
+ • \`shrk eslint report\` — re-emit \`shrk check boundaries --json\` in
310
+ the ESLint result format so existing ESLint-aware tooling
311
+ (reviewdog, GitHub annotations, …) shows SharkCraft violations.
312
+ • \`shrk eslint rules\` — inventory which SharkCraft constructs are
313
+ bridgeable, which are adjacent, which are not.
314
+
315
+ What the bridge **cannot** express in ESLint:
316
+
317
+ • Plan safety (signing, divergence, \`--verify-signature\`). These
318
+ are write-path checks and belong in the SharkCraft CLI / CI.
319
+ • Pack signatures and \`shrk packs signature-status\`. ESLint has
320
+ no notion of distributed signed assets.
321
+ • Knowledge stale-check and template drift. They depend on the
322
+ SharkCraft registry, not on the source tree alone.
323
+ • Self-config doctor and the deep safety audit. These reason over
324
+ the whole config tree, not single source files.
325
+
326
+ Recommendation: keep \`shrk doctor\`, \`shrk check boundaries\`,
327
+ \`shrk safety audit\`, and (if you ship packs) \`shrk packs doctor\`
328
+ in CI. Use ESLint for source-file linting only.
329
+
330
+ Integration over competition: SharkCraft does not aim to replace
331
+ ESLint. It rides alongside.
332
+ `;
333
+ export const eslintExplainLimitationsCommand = {
334
+ name: 'explain-limitations',
335
+ description: 'Print the honest list of what cannot be bridged from SharkCraft to ESLint and what to keep in CI.',
336
+ usage: 'shrk eslint explain-limitations [--json]',
337
+ async run(args) {
338
+ if (flagBool(args, 'json')) {
339
+ process.stdout.write(asJson({
340
+ bridgeable: [
341
+ 'no-restricted-imports (forbidden imports / layer boundaries)',
342
+ 'generated path ignores',
343
+ 'naming / file-shape rules (via @typescript-eslint)',
344
+ ],
345
+ adjacent: [
346
+ 'shrk check boundaries (re-emitted in ESLint result format)',
347
+ 'custom-check reports (round-trip via `shrk checks convert eslint`)',
348
+ ],
349
+ notBridgeable: [
350
+ 'plan signing / --verify-signature',
351
+ 'pack signatures',
352
+ 'knowledge stale-check',
353
+ 'template drift',
354
+ 'self-config doctor',
355
+ 'safety audit --deep',
356
+ ],
357
+ keepInCi: [
358
+ 'shrk doctor',
359
+ 'shrk check boundaries',
360
+ 'shrk safety audit',
361
+ 'shrk packs doctor',
362
+ 'shrk knowledge stale-check',
363
+ 'shrk templates drift',
364
+ ],
365
+ }) + '\n');
366
+ return 0;
367
+ }
368
+ process.stdout.write(ESLINT_LIMITATIONS);
369
+ return 0;
370
+ },
371
+ };
372
+ function renderEslintReportText(files) {
373
+ if (files.length === 0) {
374
+ return 'SharkCraft boundary report contained no violations.\n';
375
+ }
376
+ const lines = [];
377
+ lines.push(header('SharkCraft → ESLint result format'));
378
+ for (const f of files) {
379
+ lines.push(f.filePath);
380
+ for (const m of f.messages) {
381
+ lines.push(` ${m.line}:${m.column} ${m.ruleId} ${m.message}`);
382
+ }
383
+ }
384
+ lines.push('');
385
+ lines.push(bullet(`${files.length} file(s) with violations`));
386
+ return lines.join('\n') + '\n';
387
+ }
388
+ export const eslintCommand = {
389
+ name: 'eslint',
390
+ description: 'ESLint bridge. `scaffold` emits a flat-config snippet that ignores SharkCraft generated paths; `report` re-emits boundary violations in the ESLint result format; `rules` inventories what is bridgeable; `explain-limitations` documents what cannot be bridged. `config` is an alias for `scaffold`.',
391
+ usage: 'shrk eslint <scaffold|config|report|rules|explain-limitations> [...flags]',
392
+ async run(args) {
393
+ const verb = args.positional[0];
394
+ if (verb === 'scaffold' || verb === 'config') {
395
+ // `eslint config --preset auto` is the preferred shape;
396
+ // it routes to `scaffold` which already accepts `--preset auto`.
397
+ return eslintScaffoldCommand.run({
398
+ ...args,
399
+ positional: args.positional.slice(1),
400
+ });
401
+ }
402
+ if (verb === 'report') {
403
+ return eslintReportCommand.run({
404
+ ...args,
405
+ positional: args.positional.slice(1),
406
+ });
407
+ }
408
+ if (verb === 'rules') {
409
+ return eslintRulesCommand.run({
410
+ ...args,
411
+ positional: args.positional.slice(1),
412
+ });
413
+ }
414
+ if (verb === 'explain-limitations') {
415
+ return eslintExplainLimitationsCommand.run({
416
+ ...args,
417
+ positional: args.positional.slice(1),
418
+ });
419
+ }
420
+ process.stderr.write('Usage: shrk eslint <scaffold|config|report|rules|explain-limitations> [...flags]\n');
421
+ return 2;
422
+ },
423
+ };
@@ -0,0 +1,3 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const exploreCommand: ICommandHandler;
3
+ //# sourceMappingURL=explore.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.command.d.ts","sourceRoot":"","sources":["../../src/commands/explore.command.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAqBhC,eAAO,MAAM,cAAc,EAAE,eA6C5B,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { exploreArea, inspectSharkcraft, renderAreaExploreMarkdown, renderAreaExploreText, } from '@shrkcrft/inspector';
2
+ import { flagBool, flagString, resolveCwd, } from "../command-registry.js";
3
+ import { asJson } from "../output/format-output.js";
4
+ import { COMMAND_CATALOG } from "./command-catalog.js";
5
+ const ALL_MCP_TOOL_NAMES = [];
6
+ async function getMcpToolNames() {
7
+ if (ALL_MCP_TOOL_NAMES.length > 0)
8
+ return ALL_MCP_TOOL_NAMES;
9
+ try {
10
+ const mod = (await import('@shrkcrft/mcp-server'));
11
+ if (mod?.ALL_TOOLS) {
12
+ for (const t of mod.ALL_TOOLS)
13
+ ALL_MCP_TOOL_NAMES.push(t.name);
14
+ }
15
+ }
16
+ catch {
17
+ // mcp-server not loadable from this entry — leave the list empty.
18
+ }
19
+ return ALL_MCP_TOOL_NAMES;
20
+ }
21
+ export const exploreCommand = {
22
+ name: 'explore',
23
+ description: 'Explore a directory: area kind, key modules, related commands/MCP tools, tests, conventions, risks. Read-only.',
24
+ usage: 'shrk explore <path> [--format text|markdown|json] [--top N]',
25
+ async run(args) {
26
+ const rawPath = args.positional[0];
27
+ if (!rawPath) {
28
+ process.stderr.write('Usage: shrk explore <path> [--format text|markdown|json]\n');
29
+ return 2;
30
+ }
31
+ const cwd = resolveCwd(args);
32
+ const inspection = await inspectSharkcraft({ cwd });
33
+ const mcpToolNames = await getMcpToolNames();
34
+ const pathConventions = inspection.pathService.list().map((p) => ({
35
+ id: p.id,
36
+ pattern: p.metadata?.path,
37
+ }));
38
+ const top = (() => {
39
+ const n = flagString(args, 'top');
40
+ if (!n)
41
+ return undefined;
42
+ const v = Number(n);
43
+ return Number.isFinite(v) && v > 0 ? v : undefined;
44
+ })();
45
+ const report = exploreArea({
46
+ inspection,
47
+ path: rawPath,
48
+ commandCatalog: COMMAND_CATALOG,
49
+ mcpToolNames,
50
+ pathConventions,
51
+ ...(top ? { topFiles: top } : {}),
52
+ });
53
+ const format = flagString(args, 'format') ?? (flagBool(args, 'json') ? 'json' : 'text');
54
+ if (format === 'json') {
55
+ process.stdout.write(asJson(report) + '\n');
56
+ return report.exists ? 0 : 1;
57
+ }
58
+ if (format === 'markdown') {
59
+ process.stdout.write(renderAreaExploreMarkdown(report));
60
+ return report.exists ? 0 : 1;
61
+ }
62
+ process.stdout.write(renderAreaExploreText(report));
63
+ return report.exists ? 0 : 1;
64
+ },
65
+ };
@@ -0,0 +1,6 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const exportBundleCommand: ICommandHandler;
3
+ export declare const exportSessionCommand: ICommandHandler;
4
+ export declare const exportQualityCommand: ICommandHandler;
5
+ export declare const exportReviewCommand: ICommandHandler;
6
+ //# sourceMappingURL=export-bundle.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-bundle.command.d.ts","sourceRoot":"","sources":["../../src/commands/export-bundle.command.ts"],"names":[],"mappings":"AASA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAOhC,eAAO,MAAM,mBAAmB,EAAE,eAqBjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAqBlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAclC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAqBjC,CAAC"}