@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,15 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const constructsListCommand: ICommandHandler;
3
+ export declare const constructsGetCommand: ICommandHandler;
4
+ export declare const constructsTraceCommand: ICommandHandler;
5
+ export declare const constructsImpactCommand: ICommandHandler;
6
+ export declare const constructsRelatedCommand: ICommandHandler;
7
+ export declare const constructsFilesCommand: ICommandHandler;
8
+ export declare const constructsApiCommand: ICommandHandler;
9
+ export declare const constructsEventsCommand: ICommandHandler;
10
+ export declare const constructsTokensCommand: ICommandHandler;
11
+ export declare const constructsFacetsCommand: ICommandHandler;
12
+ export declare const constructsSearchCommand: ICommandHandler;
13
+ export declare const constructsInferCommand: ICommandHandler;
14
+ export declare const constructsAdoptCommand: ICommandHandler;
15
+ //# sourceMappingURL=constructs.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructs.command.d.ts","sourceRoot":"","sources":["../../src/commands/constructs.command.ts"],"names":[],"mappings":"AA6BA,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAahC,eAAO,MAAM,qBAAqB,EAAE,eAqBnC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAoDlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eA8DpC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAmFrC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAmCtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAwBpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAiClC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAiBrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAiBrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eA4BrC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eA8BrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eA0DpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eA0LpC,CAAC"}
@@ -0,0 +1,669 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import * as nodePath from 'node:path';
3
+ import { AdoptionCheckpointStatus, buildConstructAdoptionDiff, buildConstructAdoptionPlan, buildSearchIndex, ConstructAdoptionCategory, evaluateAdoptionCheckpoint, hashDiffBody, inferConstructs, InferredConstructConfidence, inspectSharkcraft, loadConstructs, loadPlaybooks, readAdoptionCheckpoint, readConstructAdoptionStatus, recordAdoptionCheckpoint, renderConstructAdoptionDiff, renderConstructAdoptionMarkdown, renderConstructDraftsModule, searchIndex, SearchKind, traceConstruct, writeConstructAdoption, } from '@shrkcrft/inspector';
4
+ import { flagBool, flagNumber, flagString, resolveCwd, } from "../command-registry.js";
5
+ import { asJson, header } from "../output/format-output.js";
6
+ async function loadAll(args) {
7
+ const cwd = resolveCwd(args);
8
+ const inspection = await inspectSharkcraft({ cwd });
9
+ const constructs = await loadConstructs(inspection);
10
+ return { constructs, inspection };
11
+ }
12
+ export const constructsListCommand = {
13
+ name: 'list',
14
+ description: 'List registered constructs.',
15
+ usage: 'shrk constructs list [--type <type>] [--json]',
16
+ async run(args) {
17
+ const { constructs } = await loadAll(args);
18
+ const type = flagString(args, 'type');
19
+ const list = type ? constructs.filter((c) => c.type === type) : constructs;
20
+ if (flagBool(args, 'json')) {
21
+ process.stdout.write(asJson(list) + '\n');
22
+ return 0;
23
+ }
24
+ process.stdout.write(header(`Constructs (${list.length})`));
25
+ if (list.length === 0)
26
+ process.stdout.write(' (none)\n');
27
+ for (const c of list) {
28
+ process.stdout.write(` ${c.id.padEnd(40)} ${c.type.padEnd(12)} ${c.title}\n`);
29
+ }
30
+ return 0;
31
+ },
32
+ };
33
+ export const constructsGetCommand = {
34
+ name: 'get',
35
+ description: 'Show construct details.',
36
+ usage: 'shrk constructs get <id> [--json]',
37
+ async run(args) {
38
+ const id = args.positional[0];
39
+ if (!id) {
40
+ process.stderr.write('Usage: shrk constructs get <id>\n');
41
+ return 2;
42
+ }
43
+ const { constructs } = await loadAll(args);
44
+ const c = constructs.find((x) => x.id === id);
45
+ if (!c) {
46
+ process.stderr.write(`No construct "${id}"\n`);
47
+ return 1;
48
+ }
49
+ if (flagBool(args, 'json')) {
50
+ process.stdout.write(asJson(c) + '\n');
51
+ return 0;
52
+ }
53
+ process.stdout.write(header(`Construct: ${c.id}`));
54
+ process.stdout.write(` type: ${c.type}\n`);
55
+ process.stdout.write(` title: ${c.title}\n`);
56
+ if (c.description)
57
+ process.stdout.write(` description: ${c.description}\n`);
58
+ if (c.tags?.length)
59
+ process.stdout.write(` tags: ${c.tags.join(', ')}\n`);
60
+ process.stdout.write(` source: ${c.source}${c.packageName ? ' (' + c.packageName + ')' : ''}\n`);
61
+ if (c.files?.length) {
62
+ process.stdout.write(` files (${c.files.length}):\n`);
63
+ for (const f of c.files.slice(0, 10))
64
+ process.stdout.write(` - ${f}\n`);
65
+ }
66
+ if (c.publicApi?.length) {
67
+ process.stdout.write(` publicApi:\n`);
68
+ for (const a of c.publicApi)
69
+ process.stdout.write(` - ${a}\n`);
70
+ }
71
+ if (c.events?.length) {
72
+ process.stdout.write(` events: ${c.events.join(', ')}\n`);
73
+ }
74
+ if (c.tokens?.length) {
75
+ process.stdout.write(` tokens: ${c.tokens.join(', ')}\n`);
76
+ }
77
+ if (c.commands?.length) {
78
+ process.stdout.write(` commands:\n`);
79
+ for (const x of c.commands)
80
+ process.stdout.write(` $ ${x}\n`);
81
+ }
82
+ if (c.facets) {
83
+ for (const [kind, list] of Object.entries(c.facets)) {
84
+ process.stdout.write(` facet ${kind}:\n`);
85
+ for (const f of list)
86
+ process.stdout.write(` - ${f.value}${f.description ? ' — ' + f.description : ''}\n`);
87
+ }
88
+ }
89
+ return 0;
90
+ },
91
+ };
92
+ export const constructsTraceCommand = {
93
+ name: 'trace',
94
+ description: 'Trace all files / publicApi / events / tokens belonging to a construct. --deep adds related/sandbox/test pointers when present.',
95
+ usage: 'shrk constructs trace <id> [--deep] [--json]',
96
+ async run(args) {
97
+ const id = args.positional[0];
98
+ if (!id) {
99
+ process.stderr.write('Usage: shrk constructs trace <id>\n');
100
+ return 2;
101
+ }
102
+ const { constructs } = await loadAll(args);
103
+ const c = constructs.find((x) => x.id === id);
104
+ if (!c) {
105
+ process.stderr.write(`No construct "${id}"\n`);
106
+ return 1;
107
+ }
108
+ const trace = traceConstruct(c);
109
+ const deep = flagBool(args, 'deep');
110
+ const relatedAll = [
111
+ ...(c.relatedKnowledge ?? []),
112
+ ...(c.relatedRules ?? []),
113
+ ...(c.relatedTemplates ?? []),
114
+ ...(c.relatedPipelines ?? []),
115
+ ...(c.relatedPathConventions ?? []),
116
+ ];
117
+ const deepBlock = deep
118
+ ? {
119
+ related: relatedAll,
120
+ tags: c.tags ?? [],
121
+ registryHints: c.tags?.filter((t) => /(registry|composer|defaults|sandbox|demo|barrel)/i.test(t)) ?? [],
122
+ }
123
+ : undefined;
124
+ if (flagBool(args, 'json')) {
125
+ process.stdout.write(asJson({ ...trace, ...(deepBlock ? { deep: deepBlock } : {}) }) + '\n');
126
+ return 0;
127
+ }
128
+ process.stdout.write(header(`Trace: ${id}`));
129
+ process.stdout.write(`Files (${trace.files.length}):\n`);
130
+ for (const f of trace.files)
131
+ process.stdout.write(` • ${f}\n`);
132
+ if (trace.publicApi.length > 0) {
133
+ process.stdout.write(`Public API:\n`);
134
+ for (const a of trace.publicApi)
135
+ process.stdout.write(` → ${a}\n`);
136
+ }
137
+ if (trace.events.length > 0) {
138
+ process.stdout.write(`Events: ${trace.events.join(', ')}\n`);
139
+ }
140
+ if (trace.tokens.length > 0) {
141
+ process.stdout.write(`Tokens: ${trace.tokens.join(', ')}\n`);
142
+ }
143
+ if (trace.warnings.length > 0) {
144
+ process.stdout.write('Warnings:\n');
145
+ for (const w of trace.warnings)
146
+ process.stdout.write(` ! ${w}\n`);
147
+ }
148
+ if (deepBlock) {
149
+ process.stdout.write('\nDeep:\n');
150
+ if (deepBlock.related.length > 0)
151
+ process.stdout.write(` related: ${deepBlock.related.join(', ')}\n`);
152
+ if (deepBlock.tags.length > 0)
153
+ process.stdout.write(` tags: ${deepBlock.tags.join(', ')}\n`);
154
+ if (deepBlock.registryHints.length > 0)
155
+ process.stdout.write(` registry hints: ${deepBlock.registryHints.join(', ')}\n`);
156
+ }
157
+ return 0;
158
+ },
159
+ };
160
+ export const constructsImpactCommand = {
161
+ name: 'impact',
162
+ description: 'Construct impact view: files + publicApi + events + tokens + registries + tests + verification commands + risk level + suggested next commands.',
163
+ usage: 'shrk constructs impact <id> [--json]',
164
+ async run(args) {
165
+ const id = args.positional[0];
166
+ if (!id) {
167
+ process.stderr.write('Usage: shrk constructs impact <id>\n');
168
+ return 2;
169
+ }
170
+ const { constructs, inspection } = await loadAll(args);
171
+ const c = constructs.find((x) => x.id === id);
172
+ if (!c) {
173
+ process.stderr.write(`No construct "${id}"\n`);
174
+ return 1;
175
+ }
176
+ const trace = traceConstruct(c);
177
+ /**
178
+ * Registry touch-points are inferred from the active plugin
179
+ * lifecycle profile (key-table + barrels). The engine no longer
180
+ * hardcodes project-specific paths.
181
+ */
182
+ const registryTouchPoints = [];
183
+ try {
184
+ const { listPluginLifecycleProfiles } = await import('@shrkcrft/inspector');
185
+ const profiles = await listPluginLifecycleProfiles(inspection);
186
+ for (const entry of profiles) {
187
+ const p = entry.profile;
188
+ if (c.tags?.some((t) => /plugin-key|key-table/i.test(t)) && p.keyTable) {
189
+ registryTouchPoints.push(p.keyTable.path);
190
+ }
191
+ if (c.tags?.some((t) => /barrel|public-api/i.test(t)) && p.barrels) {
192
+ for (const b of p.barrels)
193
+ registryTouchPoints.push(b.path);
194
+ }
195
+ }
196
+ }
197
+ catch {
198
+ // Best-effort enrichment; absence of profiles just means no touch-points.
199
+ }
200
+ const verificationCommands = [
201
+ 'shrk check boundaries --changed-only',
202
+ 'shrk doctor',
203
+ 'bun x tsc -p tsconfig.base.json --noEmit',
204
+ ];
205
+ const verCfg = inspection.config?.verificationCommands ?? [];
206
+ for (const v of verCfg.slice(0, 3))
207
+ verificationCommands.push(v.command);
208
+ const fileCount = trace.files.length;
209
+ const risk = fileCount > 12 ? 'high' : fileCount > 4 ? 'medium' : 'low';
210
+ const humanReview = risk !== 'low';
211
+ const report = {
212
+ schema: 'sharkcraft.construct-impact/v1',
213
+ id,
214
+ files: trace.files,
215
+ publicApi: trace.publicApi,
216
+ events: trace.events,
217
+ tokens: trace.tokens,
218
+ registryTouchPoints,
219
+ tests: [],
220
+ verificationCommands,
221
+ risk,
222
+ humanReviewRequired: humanReview,
223
+ suggestedNextCommands: [
224
+ `shrk constructs trace ${id} --deep`,
225
+ `shrk impact <file>`,
226
+ `shrk check boundaries --changed-only`,
227
+ ],
228
+ };
229
+ if (flagBool(args, 'json')) {
230
+ process.stdout.write(asJson(report) + '\n');
231
+ return 0;
232
+ }
233
+ process.stdout.write(header(`Impact: ${id}`));
234
+ process.stdout.write(`Files (${report.files.length}):\n`);
235
+ for (const f of report.files)
236
+ process.stdout.write(` • ${f}\n`);
237
+ if (report.registryTouchPoints.length > 0) {
238
+ process.stdout.write('Registry touch points:\n');
239
+ for (const r of report.registryTouchPoints)
240
+ process.stdout.write(` → ${r}\n`);
241
+ }
242
+ process.stdout.write(`risk: ${report.risk}; human review: ${report.humanReviewRequired ? 'yes' : 'no'}\n`);
243
+ process.stdout.write('Verification:\n');
244
+ for (const v of report.verificationCommands)
245
+ process.stdout.write(` $ ${v}\n`);
246
+ return 0;
247
+ },
248
+ };
249
+ export const constructsRelatedCommand = {
250
+ name: 'related',
251
+ description: 'Show related constructs (declared via `related` field).',
252
+ usage: 'shrk constructs related <id> [--json]',
253
+ async run(args) {
254
+ const id = args.positional[0];
255
+ if (!id) {
256
+ process.stderr.write('Usage: shrk constructs related <id>\n');
257
+ return 2;
258
+ }
259
+ const { constructs } = await loadAll(args);
260
+ const c = constructs.find((x) => x.id === id);
261
+ if (!c) {
262
+ process.stderr.write(`No construct "${id}"\n`);
263
+ return 1;
264
+ }
265
+ const related = [
266
+ ...(c.relatedKnowledge ?? []).map((id) => ({ kind: 'knowledge', id })),
267
+ ...(c.relatedRules ?? []).map((id) => ({ kind: 'rule', id })),
268
+ ...(c.relatedTemplates ?? []).map((id) => ({ kind: 'template', id })),
269
+ ...(c.relatedPipelines ?? []).map((id) => ({ kind: 'pipeline', id })),
270
+ ...(c.relatedPathConventions ?? []).map((id) => ({ kind: 'path', id })),
271
+ ];
272
+ if (flagBool(args, 'json')) {
273
+ process.stdout.write(asJson({ id, related }) + '\n');
274
+ return 0;
275
+ }
276
+ process.stdout.write(header(`Related: ${id}`));
277
+ if (related.length === 0) {
278
+ process.stdout.write(' (none)\n');
279
+ return 0;
280
+ }
281
+ for (const r of related)
282
+ process.stdout.write(` • [${r.kind}] ${r.id}\n`);
283
+ return 0;
284
+ },
285
+ };
286
+ export const constructsFilesCommand = {
287
+ name: 'files',
288
+ description: 'Just the files (one per line) belonging to a construct. Read-only.',
289
+ usage: 'shrk constructs files <id> [--json]',
290
+ async run(args) {
291
+ const id = args.positional[0];
292
+ if (!id) {
293
+ process.stderr.write('Usage: shrk constructs files <id>\n');
294
+ return 2;
295
+ }
296
+ const { constructs } = await loadAll(args);
297
+ const c = constructs.find((x) => x.id === id);
298
+ if (!c) {
299
+ process.stderr.write(`No construct "${id}"\n`);
300
+ return 1;
301
+ }
302
+ const trace = traceConstruct(c);
303
+ if (flagBool(args, 'json')) {
304
+ process.stdout.write(asJson({ id, files: trace.files }) + '\n');
305
+ return 0;
306
+ }
307
+ for (const f of trace.files)
308
+ process.stdout.write(`${f}\n`);
309
+ return 0;
310
+ },
311
+ };
312
+ export const constructsApiCommand = {
313
+ name: 'api',
314
+ description: 'Show public-API entries for a construct. --public-only emits the raw list with no header.',
315
+ usage: 'shrk constructs api <id> [--public-only] [--json]',
316
+ async run(args) {
317
+ const id = args.positional[0];
318
+ if (!id) {
319
+ process.stderr.write('Usage: shrk constructs api <id>\n');
320
+ return 2;
321
+ }
322
+ const { constructs } = await loadAll(args);
323
+ const c = constructs.find((x) => x.id === id);
324
+ if (!c) {
325
+ process.stderr.write(`No construct "${id}"\n`);
326
+ return 1;
327
+ }
328
+ const publicApi = c.publicApi ?? [];
329
+ if (flagBool(args, 'json')) {
330
+ process.stdout.write(asJson({ id, publicApi }) + '\n');
331
+ return 0;
332
+ }
333
+ if (flagBool(args, 'public-only')) {
334
+ for (const a of publicApi)
335
+ process.stdout.write(`${a}\n`);
336
+ return 0;
337
+ }
338
+ process.stdout.write(header(`Public API: ${id}`));
339
+ if (publicApi.length === 0) {
340
+ process.stdout.write(' (none declared)\n');
341
+ return 0;
342
+ }
343
+ for (const a of publicApi)
344
+ process.stdout.write(` → ${a}\n`);
345
+ return 0;
346
+ },
347
+ };
348
+ export const constructsEventsCommand = {
349
+ name: 'events',
350
+ description: 'List events emitted/consumed by constructs.',
351
+ usage: 'shrk constructs events [<id>] [--json]',
352
+ async run(args) {
353
+ const id = args.positional[0];
354
+ const { constructs } = await loadAll(args);
355
+ const filtered = id ? constructs.filter((c) => c.id === id) : constructs;
356
+ const rows = filtered.flatMap((c) => (c.events ?? []).map((e) => ({ constructId: c.id, event: e })));
357
+ if (flagBool(args, 'json')) {
358
+ process.stdout.write(asJson(rows) + '\n');
359
+ return 0;
360
+ }
361
+ process.stdout.write(header(`Events (${rows.length})`));
362
+ for (const r of rows)
363
+ process.stdout.write(` ${r.constructId.padEnd(30)} ${r.event}\n`);
364
+ return 0;
365
+ },
366
+ };
367
+ export const constructsTokensCommand = {
368
+ name: 'tokens',
369
+ description: 'List tokens contributed by constructs.',
370
+ usage: 'shrk constructs tokens [<id>] [--json]',
371
+ async run(args) {
372
+ const id = args.positional[0];
373
+ const { constructs } = await loadAll(args);
374
+ const filtered = id ? constructs.filter((c) => c.id === id) : constructs;
375
+ const rows = filtered.flatMap((c) => (c.tokens ?? []).map((t) => ({ constructId: c.id, token: t })));
376
+ if (flagBool(args, 'json')) {
377
+ process.stdout.write(asJson(rows) + '\n');
378
+ return 0;
379
+ }
380
+ process.stdout.write(header(`Tokens (${rows.length})`));
381
+ for (const r of rows)
382
+ process.stdout.write(` ${r.constructId.padEnd(30)} ${r.token}\n`);
383
+ return 0;
384
+ },
385
+ };
386
+ export const constructsFacetsCommand = {
387
+ name: 'facets',
388
+ description: 'List facets of a construct.',
389
+ usage: 'shrk constructs facets <id> [--json]',
390
+ async run(args) {
391
+ const id = args.positional[0];
392
+ if (!id) {
393
+ process.stderr.write('Usage: shrk constructs facets <id>\n');
394
+ return 2;
395
+ }
396
+ const { constructs } = await loadAll(args);
397
+ const c = constructs.find((x) => x.id === id);
398
+ if (!c) {
399
+ process.stderr.write(`No construct "${id}"\n`);
400
+ return 1;
401
+ }
402
+ const facets = c.facets ?? {};
403
+ if (flagBool(args, 'json')) {
404
+ process.stdout.write(asJson({ id, facets }) + '\n');
405
+ return 0;
406
+ }
407
+ process.stdout.write(header(`Facets: ${id}`));
408
+ for (const [kind, list] of Object.entries(facets)) {
409
+ process.stdout.write(`${kind}:\n`);
410
+ for (const f of list)
411
+ process.stdout.write(` - ${f.value}${f.description ? ' — ' + f.description : ''}\n`);
412
+ }
413
+ return 0;
414
+ },
415
+ };
416
+ export const constructsSearchCommand = {
417
+ name: 'search',
418
+ description: 'Search constructs and facets.',
419
+ usage: 'shrk constructs search <query> [--limit N] [--json]',
420
+ async run(args) {
421
+ const query = args.positional.join(' ').trim();
422
+ if (!query) {
423
+ process.stderr.write('Usage: shrk constructs search <query>\n');
424
+ return 2;
425
+ }
426
+ const cwd = resolveCwd(args);
427
+ const inspection = await inspectSharkcraft({ cwd });
428
+ await loadConstructs(inspection);
429
+ await loadPlaybooks(inspection);
430
+ const index = buildSearchIndex(inspection);
431
+ const result = searchIndex(index, {
432
+ query,
433
+ kinds: [SearchKind.Construct, SearchKind.ConstructFacet],
434
+ limit: flagNumber(args, 'limit') ?? 20,
435
+ });
436
+ if (flagBool(args, 'json')) {
437
+ process.stdout.write(asJson(result.hits) + '\n');
438
+ return 0;
439
+ }
440
+ process.stdout.write(header(`Constructs matching "${query}"`));
441
+ for (const h of result.hits) {
442
+ process.stdout.write(` ${h.score.toString().padStart(6)} ${h.document.id} — ${h.document.title}\n`);
443
+ }
444
+ return 0;
445
+ },
446
+ };
447
+ export const constructsInferCommand = {
448
+ name: 'infer',
449
+ description: 'Infer construct candidates from path conventions, filenames, and the import graph.',
450
+ usage: 'shrk constructs infer [--type X] [--confidence high|medium|low] [--limit N] [--json] [--write-drafts]',
451
+ async run(args) {
452
+ const cwd = resolveCwd(args);
453
+ const inspection = await inspectSharkcraft({ cwd });
454
+ await loadConstructs(inspection);
455
+ const minConfidenceRaw = flagString(args, 'confidence');
456
+ const valid = new Set(Object.values(InferredConstructConfidence));
457
+ if (minConfidenceRaw && !valid.has(minConfidenceRaw)) {
458
+ process.stderr.write(`Unknown --confidence "${minConfidenceRaw}"\n`);
459
+ return 2;
460
+ }
461
+ const result = await inferConstructs(inspection, {
462
+ ...(flagString(args, 'type') ? { type: flagString(args, 'type') } : {}),
463
+ ...(minConfidenceRaw
464
+ ? { minConfidence: minConfidenceRaw }
465
+ : {}),
466
+ ...(flagNumber(args, 'limit') ? { limit: flagNumber(args, 'limit') } : {}),
467
+ });
468
+ if (flagBool(args, 'write-drafts')) {
469
+ const dir = inspection.sharkcraftDir
470
+ ? nodePath.join(inspection.sharkcraftDir, 'construct-drafts')
471
+ : nodePath.join(cwd, 'sharkcraft', 'construct-drafts');
472
+ mkdirSync(dir, { recursive: true });
473
+ const file = nodePath.join(dir, 'constructs.draft.ts');
474
+ writeFileSync(file, renderConstructDraftsModule(result), 'utf8');
475
+ if (flagBool(args, 'json')) {
476
+ process.stdout.write(asJson({ ...result, draftFile: file }) + '\n');
477
+ }
478
+ else {
479
+ process.stdout.write(`Wrote draft: ${file}\n`);
480
+ process.stdout.write(`Candidates: ${result.candidates.length}\n`);
481
+ }
482
+ return 0;
483
+ }
484
+ if (flagBool(args, 'json')) {
485
+ process.stdout.write(asJson(result) + '\n');
486
+ return 0;
487
+ }
488
+ process.stdout.write(header(`Construct candidates (${result.candidates.length})`));
489
+ for (const c of result.candidates) {
490
+ process.stdout.write(` [${c.confidence.padEnd(6)}] ${c.id.padEnd(40)} ${c.type.padEnd(12)} ${c.title}\n`);
491
+ if (c.evidence.length > 0)
492
+ process.stdout.write(` evidence: ${c.evidence.slice(0, 2).join('; ')}\n`);
493
+ process.stdout.write(` files: ${c.files.slice(0, 3).join(', ')}${c.files.length > 3 ? '…' : ''}\n`);
494
+ }
495
+ if (result.warnings.length > 0) {
496
+ process.stdout.write('\nWarnings:\n');
497
+ for (const w of result.warnings)
498
+ process.stdout.write(` ! ${w}\n`);
499
+ }
500
+ return 0;
501
+ },
502
+ };
503
+ export const constructsAdoptCommand = {
504
+ name: 'adopt',
505
+ description: 'Build a construct-adoption plan from inferred drafts; classify safe / manual / low-confidence / already-covered / conflict. Never modifies constructs.ts.',
506
+ usage: 'shrk constructs adopt [--dry-run|--write-patch] [--confidence high|medium|low] [--include facets,publicApi,events,tokens] [--json]\n shrk constructs adopt status [--json]\n shrk constructs adopt review [--json]\n shrk constructs adopt diff [--format text|markdown|html|json]',
507
+ async run(args) {
508
+ const cwd = resolveCwd(args);
509
+ const inspection = await inspectSharkcraft({ cwd });
510
+ await loadConstructs(inspection);
511
+ const sub = args.positional[0];
512
+ if (sub === 'diff') {
513
+ const formatRaw = (flagString(args, 'format') ?? 'text');
514
+ const valid = new Set(['text', 'markdown', 'html', 'json']);
515
+ if (!valid.has(formatRaw)) {
516
+ process.stderr.write(`Unknown --format "${formatRaw}". Use text|markdown|html|json.\n`);
517
+ return 2;
518
+ }
519
+ const diff = await buildConstructAdoptionDiff(inspection);
520
+ const rendered = renderConstructAdoptionDiff(diff, formatRaw);
521
+ process.stdout.write(rendered);
522
+ if (flagBool(args, 'record-checkpoint')) {
523
+ // Use the JSON form as the canonical diff hash so format choice
524
+ // doesn't change the checkpoint identity.
525
+ const canonical = renderConstructAdoptionDiff(diff, 'json');
526
+ const diffHash = hashDiffBody(canonical);
527
+ const targets = diff.constructsFile
528
+ ? [nodePath.relative(cwd, diff.constructsFile).split(nodePath.sep).join('/')]
529
+ : [];
530
+ const draftsRel = diff.constructsFile
531
+ ? [
532
+ nodePath
533
+ .relative(cwd, nodePath.join(nodePath.dirname(diff.constructsFile), 'construct-drafts/constructs.draft.ts'))
534
+ .split(nodePath.sep)
535
+ .join('/'),
536
+ ]
537
+ : [];
538
+ const checkpoint = recordAdoptionCheckpoint({
539
+ projectRoot: cwd,
540
+ kind: 'construct',
541
+ command: 'shrk constructs adopt diff --record-checkpoint',
542
+ diffHash,
543
+ targets,
544
+ drafts: draftsRel,
545
+ });
546
+ process.stdout.write(`\nRecorded checkpoint at ${nodePath.relative(cwd, nodePath.join(cwd, 'sharkcraft/construct-drafts/adoption/adoption-checkpoint.json'))} (diff hash ${checkpoint.diffHash.slice(0, 12)}…)\n`);
547
+ }
548
+ return 0;
549
+ }
550
+ if (sub === 'status') {
551
+ const status = readConstructAdoptionStatus(inspection);
552
+ const checkpointRead = readAdoptionCheckpoint(cwd, 'construct');
553
+ const maxAgeDaysRaw = flagNumber(args, 'max-age-days');
554
+ // If a checkpoint exists, evaluate its freshness vs the current diff.
555
+ let checkpointEval = null;
556
+ if (checkpointRead.checkpoint) {
557
+ const diff = await buildConstructAdoptionDiff(inspection);
558
+ const canonical = renderConstructAdoptionDiff(diff, 'json');
559
+ checkpointEval = evaluateAdoptionCheckpoint(cwd, checkpointRead.checkpoint, hashDiffBody(canonical), maxAgeDaysRaw !== undefined ? { maxAgeDays: maxAgeDaysRaw } : {});
560
+ }
561
+ if (flagBool(args, 'json')) {
562
+ process.stdout.write(asJson({
563
+ ...status,
564
+ checkpoint: checkpointRead.checkpoint,
565
+ checkpointStatus: checkpointEval?.status ?? AdoptionCheckpointStatus.Missing,
566
+ checkpointReasons: checkpointEval?.reasons ?? ['no checkpoint'],
567
+ }) + '\n');
568
+ return 0;
569
+ }
570
+ process.stdout.write(header('Construct adoption status'));
571
+ if (!status.exists) {
572
+ process.stdout.write(' (no adoption plan yet — run `shrk constructs adopt --write-patch`)\n');
573
+ return 0;
574
+ }
575
+ process.stdout.write(` plan: ${status.paths?.planFile}\n`);
576
+ if (status.summary) {
577
+ process.stdout.write(` total=${status.summary.total} safe=${status.summary.safeToAdopt} review=${status.summary.manualReview} low=${status.summary.lowConfidence} covered=${status.summary.alreadyCovered} conflict=${status.summary.conflict}\n`);
578
+ }
579
+ if (status.planAgeMs !== null)
580
+ process.stdout.write(` ageDays=${Math.round(status.planAgeMs / 86_400_000)}\n`);
581
+ if (checkpointRead.checkpoint && checkpointEval) {
582
+ process.stdout.write(` checkpoint: ${checkpointEval.status}\n`);
583
+ for (const r of checkpointEval.reasons)
584
+ process.stdout.write(` - ${r}\n`);
585
+ }
586
+ else {
587
+ process.stdout.write(' checkpoint: missing (use `shrk constructs adopt diff --record-checkpoint`)\n');
588
+ }
589
+ return 0;
590
+ }
591
+ if (sub === 'review') {
592
+ const plan = await buildConstructAdoptionPlan(inspection);
593
+ if (flagBool(args, 'json')) {
594
+ process.stdout.write(asJson(plan) + '\n');
595
+ return 0;
596
+ }
597
+ process.stdout.write(renderConstructAdoptionMarkdown(plan));
598
+ return 0;
599
+ }
600
+ const confidenceFlag = flagString(args, 'confidence');
601
+ const valid = new Set(Object.values(InferredConstructConfidence));
602
+ if (confidenceFlag && !valid.has(confidenceFlag)) {
603
+ process.stderr.write(`Unknown --confidence "${confidenceFlag}".\n`);
604
+ return 2;
605
+ }
606
+ const includeFlag = flagString(args, 'include');
607
+ const includeRaw = (includeFlag ? includeFlag.split(',') : []);
608
+ const validInclude = new Set(['facets', 'publicApi', 'events', 'tokens']);
609
+ const include = includeRaw.filter((x) => validInclude.has(x));
610
+ const plan = await buildConstructAdoptionPlan(inspection, {
611
+ ...(confidenceFlag ? { minConfidence: confidenceFlag } : {}),
612
+ ...(include.length > 0 ? { include } : {}),
613
+ });
614
+ if (flagBool(args, 'write-patch')) {
615
+ const result = writeConstructAdoption(inspection, plan);
616
+ // Auto-record adoption checkpoint so subsequent `adopt status` calls
617
+ // can tell whether anything drifted.
618
+ const diff = await buildConstructAdoptionDiff(inspection);
619
+ const canonical = renderConstructAdoptionDiff(diff, 'json');
620
+ const targets = diff.constructsFile
621
+ ? [nodePath.relative(cwd, diff.constructsFile).split(nodePath.sep).join('/')]
622
+ : [];
623
+ const draftsRel = diff.constructsFile
624
+ ? [
625
+ nodePath
626
+ .relative(cwd, nodePath.join(nodePath.dirname(diff.constructsFile), 'construct-drafts/constructs.draft.ts'))
627
+ .split(nodePath.sep)
628
+ .join('/'),
629
+ ]
630
+ : [];
631
+ recordAdoptionCheckpoint({
632
+ projectRoot: cwd,
633
+ kind: 'construct',
634
+ command: 'shrk constructs adopt --write-patch',
635
+ diffHash: hashDiffBody(canonical),
636
+ targets,
637
+ drafts: draftsRel,
638
+ });
639
+ if (flagBool(args, 'json')) {
640
+ process.stdout.write(asJson({ ...plan, written: result.files }) + '\n');
641
+ return 0;
642
+ }
643
+ process.stdout.write(header(`Construct adoption (${plan.summary.total})`));
644
+ for (const f of result.files)
645
+ process.stdout.write(` + ${f}\n`);
646
+ process.stdout.write(`\nsafe=${plan.summary.safeToAdopt} review=${plan.summary.manualReview} low=${plan.summary.lowConfidence} covered=${plan.summary.alreadyCovered} conflict=${plan.summary.conflict}\n`);
647
+ return 0;
648
+ }
649
+ if (flagBool(args, 'json')) {
650
+ process.stdout.write(asJson(plan) + '\n');
651
+ return 0;
652
+ }
653
+ process.stdout.write(header(`Construct adoption (dry-run, ${plan.summary.total})`));
654
+ for (const e of plan.entries) {
655
+ process.stdout.write(` [${e.category.padEnd(16)}] ${e.id.padEnd(36)} ${e.confidence.padEnd(6)} ${e.title}\n`);
656
+ for (const r of e.reasons.slice(0, 2))
657
+ process.stdout.write(` ${r}\n`);
658
+ }
659
+ if (plan.warnings.length > 0) {
660
+ process.stdout.write('\nWarnings:\n');
661
+ for (const w of plan.warnings)
662
+ process.stdout.write(` ! ${w}\n`);
663
+ }
664
+ process.stdout.write('\nPass --write-patch to write the adoption pseudo-patch.\n');
665
+ return 0;
666
+ },
667
+ };
668
+ void ConstructAdoptionCategory;
669
+ void asJson;