@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,270 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { buildUniversalSearch, entrypointBanner, explainTaskRouting, inspectSharkcraft, recommendCommands, renderUncertaintyReportText, } from '@shrkcrft/inspector';
3
+ import { flagBool, flagNumber, flagString, resolveCwd, } from "../command-registry.js";
4
+ import { asJson } from "../output/format-output.js";
5
+ import { loadSurfaceContext } from "../surface/load-surface-context.js";
6
+ import { buildSurfaceSummary, findCommandInSummary, } from "../surface/surface-summary.js";
7
+ export const recommendCommand = {
8
+ name: 'recommend',
9
+ description: 'Recommend commands based on a free-form query, role, or stderr blob. Deterministic — no AI.',
10
+ usage: 'shrk recommend "<what I want to do>" [--from-error <stderr-file>] [--role developer|reviewer|architect|release-manager|security|ai-agent] [--json]',
11
+ async run(args) {
12
+ const query = args.positional.join(' ').trim();
13
+ const fromErrorFile = flagString(args, 'from-error');
14
+ let fromError = '';
15
+ if (fromErrorFile) {
16
+ try {
17
+ fromError = readFileSync(fromErrorFile, 'utf8');
18
+ }
19
+ catch (err) {
20
+ process.stderr.write(`Failed to read --from-error file: ${err instanceof Error ? err.message : String(err)}\n`);
21
+ return 1;
22
+ }
23
+ }
24
+ if (!query && !fromError) {
25
+ process.stderr.write('Usage: shrk recommend "<query>" or --from-error <file>\n');
26
+ return 2;
27
+ }
28
+ const cwd = resolveCwd(args);
29
+ const inspection = await inspectSharkcraft({ cwd });
30
+ const role = flagString(args, 'role');
31
+ const reportRaw = await recommendCommands(inspection, query || fromError, {
32
+ ...(fromError ? { fromError } : {}),
33
+ ...(role ? { role } : {}),
34
+ });
35
+ // DX#2 — when the task text looks like a planning thread (planning
36
+ // verb at the start, or a "plan/design/review for X" shape), prepend
37
+ // `shrk grounding "<task>"` as the top recommendation. The existing
38
+ // recommender output slides down. Pure-text classifier; no LLM.
39
+ if (query.length > 0 && looksLikePlanning(query)) {
40
+ const groundingRec = {
41
+ command: `shrk grounding "${query.replace(/"/g, '\\"')}" --json`,
42
+ why: 'DX#2: query looks like planning — start with grounding (task-relevant rules / knowledge / templates / verification IDs) before picking a write verb.',
43
+ safetyLevel: 'read-only',
44
+ };
45
+ // Avoid duplicating if the recommender already surfaced grounding.
46
+ const alreadyHasGrounding = reportRaw.recommendations.some((r) => r.command.startsWith('shrk grounding') || r.command.startsWith('bun run shrk grounding'));
47
+ if (!alreadyHasGrounding) {
48
+ reportRaw.recommendations = [
49
+ groundingRec,
50
+ ...reportRaw.recommendations,
51
+ ];
52
+ }
53
+ }
54
+ // Gate by surface tier. Recommendations whose underlying command is
55
+ // experimental + not enabled get moved to a "gated" bucket with an
56
+ // enable hint. Callable ones stay in `recommendations`.
57
+ const { context: surfaceContext } = await loadSurfaceContext({ cwd, inspection });
58
+ const surface = buildSurfaceSummary(surfaceContext);
59
+ const includeGated = flagBool(args, 'include-gated');
60
+ const { keep, gated } = partitionByCallable(reportRaw.recommendations, surface, includeGated);
61
+ const report = { ...reportRaw, recommendations: keep };
62
+ // Combine recommender output with routing hints + universal search.
63
+ const wantsCommandsFirst = flagBool(args, 'commands-first');
64
+ const actionsOnly = flagBool(args, 'actions-only');
65
+ const machineJson = flagBool(args, 'json') || flagBool(args, 'machine-json');
66
+ let routingMatches = [];
67
+ let searchReport = null;
68
+ if (query.length > 0) {
69
+ try {
70
+ routingMatches = await explainTaskRouting(inspection, query);
71
+ }
72
+ catch {
73
+ // ignore
74
+ }
75
+ try {
76
+ searchReport = await buildUniversalSearch(inspection, query, {});
77
+ }
78
+ catch {
79
+ searchReport = null;
80
+ }
81
+ }
82
+ if (machineJson) {
83
+ process.stdout.write(asJson({
84
+ ...report,
85
+ routingMatches,
86
+ search: searchReport,
87
+ gated,
88
+ }) + '\n');
89
+ return 0;
90
+ }
91
+ // Default human output: verdict + top 3 commands + next command +
92
+ // details flag. `--verbose` / `--full` brings back the long form.
93
+ const verbose = flagBool(args, 'verbose') || flagBool(args, 'full');
94
+ const topN = flagNumber(args, 'top') ?? (verbose ? report.recommendations.length : 3);
95
+ const visibleRecs = report.recommendations.slice(0, topN);
96
+ if (!actionsOnly) {
97
+ // Entrypoint banner: promote shrk recommend as the human entrypoint.
98
+ process.stdout.write(`(${entrypointBanner('recommend')})\n\n`);
99
+ process.stdout.write(`=== Recommended commands (top ${visibleRecs.length}) ===\n`);
100
+ for (const r of visibleRecs) {
101
+ if (verbose) {
102
+ process.stdout.write(` $ ${r.command}\n why: ${r.why}\n safety: ${r.safetyLevel}\n`);
103
+ if (r.docsLink)
104
+ process.stdout.write(` docs: ${r.docsLink}\n`);
105
+ }
106
+ else {
107
+ process.stdout.write(` $ ${r.command} [${r.safetyLevel}] — ${r.why}\n`);
108
+ }
109
+ }
110
+ if (report.recommendations.length > visibleRecs.length) {
111
+ process.stdout.write(` … (${report.recommendations.length - visibleRecs.length} more — pass --verbose to see all)\n`);
112
+ }
113
+ }
114
+ if (routingMatches.length > 0 && !actionsOnly && verbose) {
115
+ process.stdout.write('\nRouting hints:\n');
116
+ for (const m of routingMatches.slice(0, 5)) {
117
+ process.stdout.write(` • ${m.hint.id} (score=${m.score}) ${m.hint.title}\n`);
118
+ }
119
+ }
120
+ if (searchReport && !actionsOnly && verbose) {
121
+ const top = (searchReport.sections.bestActions ?? []).slice(0, 5);
122
+ if (top.length > 0) {
123
+ process.stdout.write('\nBest actions (from universal search):\n');
124
+ for (const a of top) {
125
+ const action = a.action ?? a.command;
126
+ if (action)
127
+ process.stdout.write(` • ${action}\n`);
128
+ }
129
+ }
130
+ }
131
+ // Coverage gap — explicit if recommendations look thin and no routing hint fired.
132
+ if (report.recommendations.length <= 1 &&
133
+ routingMatches.length === 0 &&
134
+ query.length > 0) {
135
+ process.stdout.write(`\n⚠ Coverage gap — no recipe, no routing hint, and no helper/template matched "${query}".\n` +
136
+ ` Suggest:\n` +
137
+ ` shrk coverage scaffolds --task "${query}"\n` +
138
+ ` shrk feedback actions\n` +
139
+ ` (or contribute a pack template / helper / routing hint)\n`);
140
+ }
141
+ if (gated.length > 0 && !actionsOnly) {
142
+ process.stdout.write(`\nGated (experimental, not enabled in this repo):\n`);
143
+ for (const g of gated.slice(0, 3)) {
144
+ process.stdout.write(` $ ${g.command} — ${g.why}\n`);
145
+ process.stdout.write(` Enable: shrk surface enable ${g.viewCommand} --write\n`);
146
+ }
147
+ if (gated.length > 3) {
148
+ process.stdout.write(` … (${gated.length - 3} more — pass --include-gated --json to inspect)\n`);
149
+ }
150
+ }
151
+ process.stdout.write(`\nNext command:\n $ ${report.nextCommand}\n`);
152
+ if (!actionsOnly && verbose) {
153
+ process.stdout.write('\n' + renderUncertaintyReportText(report.uncertainty) + '\n');
154
+ }
155
+ else if (!actionsOnly) {
156
+ // Tighten the default — show count + one-liner pointer to detail.
157
+ const u = report.uncertainty;
158
+ const issues = u.missingSignals.length + u.conflictingSignals.length;
159
+ if (issues > 0) {
160
+ process.stdout.write(`\nUncertainty: ${u.confidence} confidence, ${issues} signal(s) — pass --verbose for the full report.\n`);
161
+ }
162
+ }
163
+ if (wantsCommandsFirst) {
164
+ // commands-first formatting was the default — nothing more to do.
165
+ }
166
+ return 0;
167
+ },
168
+ };
169
+ /**
170
+ * Partition recommender output by whether the underlying CLI command is
171
+ * callable in this project's surface. Gated commands (experimental +
172
+ * not in `surface.enabled[]`) are moved to a separate bucket the
173
+ * renderer surfaces with an enable hint. Callable commands (core,
174
+ * extended, or already-enabled experimental) stay in `keep`.
175
+ *
176
+ * The match strategy: extract the first 1-2 tokens after `shrk` from
177
+ * `command`. Try the full path then the top-level token (mirrors the
178
+ * resolver's behavior in main.ts).
179
+ */
180
+ function partitionByCallable(recs, summary, includeGated) {
181
+ const keep = [];
182
+ const gated = [];
183
+ for (const r of recs) {
184
+ const view = resolveView(r.command, summary);
185
+ if (!view || view.callable) {
186
+ keep.push(r);
187
+ continue;
188
+ }
189
+ if (includeGated)
190
+ keep.push(r);
191
+ gated.push({
192
+ command: r.command,
193
+ viewCommand: view.command,
194
+ why: r.why ?? '',
195
+ enableHint: `shrk surface enable ${view.command} --write`,
196
+ });
197
+ }
198
+ return { keep, gated };
199
+ }
200
+ function resolveView(rawCommand, summary) {
201
+ const tokens = rawCommand.trim().split(/\s+/).filter(Boolean);
202
+ if (tokens.length === 0)
203
+ return undefined;
204
+ // Drop leading `shrk` / `bun run shrk` / `$`
205
+ let i = 0;
206
+ if (tokens[i] === '$')
207
+ i += 1;
208
+ if (tokens[i] === 'bun' && tokens[i + 1] === 'run')
209
+ i += 2;
210
+ if (tokens[i] === 'shrk')
211
+ i += 1;
212
+ const verbTokens = [];
213
+ for (let j = i; j < tokens.length; j += 1) {
214
+ const t = tokens[j];
215
+ if (t.startsWith('-') || t.startsWith('<') || t.startsWith('"'))
216
+ break;
217
+ verbTokens.push(t);
218
+ if (verbTokens.length >= 2)
219
+ break;
220
+ }
221
+ if (verbTokens.length === 0)
222
+ return undefined;
223
+ const fullPath = verbTokens.join(' ');
224
+ return findCommandInSummary(summary, fullPath) ?? findCommandInSummary(summary, verbTokens[0]);
225
+ }
226
+ /**
227
+ * DX#2 — detect "planning" intent in a task string.
228
+ *
229
+ * Triggers on:
230
+ * - a leading verb from the planning set (plan/design/review/audit/…)
231
+ * - the same verb appearing in "plan for X" / "design X" patterns
232
+ *
233
+ * Pure heuristic. No LLM. Conservative — false negatives are fine
234
+ * (the original ranker still fires); false positives just push an extra
235
+ * read-only suggestion that the user can ignore.
236
+ */
237
+ const PLANNING_VERBS = new Set([
238
+ 'plan',
239
+ 'design',
240
+ 'propose',
241
+ 'review',
242
+ 'audit',
243
+ 'analyze',
244
+ 'analyse',
245
+ 'explore',
246
+ 'consider',
247
+ 'investigate',
248
+ 'survey',
249
+ 'compare',
250
+ 'evaluate',
251
+ 'assess',
252
+ ]);
253
+ export function looksLikePlanning(query) {
254
+ const tokens = query
255
+ .toLowerCase()
256
+ .replace(/[^a-z0-9\s]/g, ' ')
257
+ .split(/\s+/)
258
+ .filter((t) => t.length > 0);
259
+ if (tokens.length === 0)
260
+ return false;
261
+ // Leading verb form: "plan a thing", "design the system".
262
+ if (PLANNING_VERBS.has(tokens[0]))
263
+ return true;
264
+ // "Help me plan X" / "I want to design Y" — verb in slots 1–3.
265
+ for (let i = 1; i < Math.min(4, tokens.length); i++) {
266
+ if (PLANNING_VERBS.has(tokens[i]))
267
+ return true;
268
+ }
269
+ return false;
270
+ }
@@ -0,0 +1,3 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const registrationsCommand: ICommandHandler;
3
+ //# sourceMappingURL=registrations.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registrations.command.d.ts","sourceRoot":"","sources":["../../src/commands/registrations.command.ts"],"names":[],"mappings":"AAoBA,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAyRhC,eAAO,MAAM,oBAAoB,EAAE,eAgBlC,CAAC"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * `shrk registrations` subcommands.
3
+ *
4
+ * Pack-driven registration hints describe downstream registration steps that
5
+ * generated constructs typically need (e.g. composer wiring, route entries).
6
+ * The engine never auto-applies a hint; the human applies after preview.
7
+ *
8
+ * shrk registrations list [--source local|pack] [--json]
9
+ * shrk registrations get <id> [--json]
10
+ * shrk registrations doctor [--json]
11
+ * shrk registrations preview <id> [--var key=value ...] [--json]
12
+ */
13
+ import * as nodePath from 'node:path';
14
+ import { inspectSharkcraft, listRegistrationHints, listRegistrationHintIssues, getRegistrationHint, previewRegistrationHint, } from '@shrkcrft/inspector';
15
+ import { flagBool, flagString, flagVars, resolveCwd, } from "../command-registry.js";
16
+ import { asJson, header } from "../output/format-output.js";
17
+ import { savePlanToFile, signPlan } from '@shrkcrft/generator';
18
+ const REGISTRATION_HINT_SYNTHETIC_TEMPLATE = '__registration-hint__';
19
+ const registrationsListCommand = {
20
+ name: 'list',
21
+ description: 'List registered registration hints (local + pack).',
22
+ usage: 'shrk registrations list [--source local|pack] [--json]',
23
+ async run(args) {
24
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
25
+ const source = flagString(args, 'source');
26
+ const all = await listRegistrationHints(inspection);
27
+ const filtered = source ? all.filter((e) => e.source === source) : all;
28
+ if (flagBool(args, 'json')) {
29
+ process.stdout.write(asJson(filtered) + '\n');
30
+ return 0;
31
+ }
32
+ process.stdout.write(header(`Registration hints (${filtered.length})`));
33
+ for (const e of filtered) {
34
+ process.stdout.write(` • ${e.hint.id.padEnd(36)} ${e.hint.title}${e.source === 'pack' && e.packageName ? ` [pack:${e.packageName}]` : ''}\n`);
35
+ }
36
+ if (filtered.length === 0) {
37
+ process.stdout.write(' (no registration hints contributed — packs add them via registrationHintFiles[])\n');
38
+ }
39
+ return 0;
40
+ },
41
+ };
42
+ const registrationsGetCommand = {
43
+ name: 'get',
44
+ description: 'Show a registration hint by id.',
45
+ usage: 'shrk registrations get <id> [--json]',
46
+ async run(args) {
47
+ const id = args.positional[0];
48
+ if (!id) {
49
+ process.stderr.write('Usage: shrk registrations get <id>\n');
50
+ return 2;
51
+ }
52
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
53
+ const entry = await getRegistrationHint(inspection, id);
54
+ if (!entry) {
55
+ process.stderr.write(`Registration hint "${id}" not found.\n`);
56
+ return 1;
57
+ }
58
+ if (flagBool(args, 'json')) {
59
+ process.stdout.write(asJson(entry) + '\n');
60
+ return 0;
61
+ }
62
+ process.stdout.write(header(`Registration hint: ${entry.hint.id}`));
63
+ process.stdout.write(` title ${entry.hint.title}\n`);
64
+ if (entry.hint.description)
65
+ process.stdout.write(` description ${entry.hint.description}\n`);
66
+ process.stdout.write(` source ${entry.source}${entry.packageName ? ` (${entry.packageName})` : ''}\n`);
67
+ if (entry.hint.discovery.targetFile) {
68
+ process.stdout.write(` target file ${entry.hint.discovery.targetFile}\n`);
69
+ }
70
+ if (entry.hint.discovery.targetGlobs && entry.hint.discovery.targetGlobs.length > 0) {
71
+ process.stdout.write(` target globs ${entry.hint.discovery.targetGlobs.join(', ')}\n`);
72
+ }
73
+ if (entry.hint.requiresHumanReview) {
74
+ process.stdout.write(` ⚠ requires human review\n`);
75
+ }
76
+ process.stdout.write('\nOperations:\n');
77
+ for (const op of entry.hint.operations) {
78
+ process.stdout.write(` • ${op.kind}${op.anchor ? ` anchor="${op.anchor}"` : ''}\n`);
79
+ }
80
+ if (entry.hint.validationCommands && entry.hint.validationCommands.length > 0) {
81
+ process.stdout.write('\nValidation commands:\n');
82
+ for (const c of entry.hint.validationCommands)
83
+ process.stdout.write(` $ ${c}\n`);
84
+ }
85
+ return 0;
86
+ },
87
+ };
88
+ const registrationsDoctorCommand = {
89
+ name: 'doctor',
90
+ description: 'Validate registration hint registries (local + pack).',
91
+ usage: 'shrk registrations doctor [--json]',
92
+ async run(args) {
93
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
94
+ const issues = await listRegistrationHintIssues(inspection);
95
+ if (flagBool(args, 'json')) {
96
+ process.stdout.write(asJson({ issues }) + '\n');
97
+ return issues.some((i) => i.severity === 'error') ? 1 : 0;
98
+ }
99
+ process.stdout.write(header(`Registration hint doctor (${issues.length} issue(s))`));
100
+ if (issues.length === 0) {
101
+ process.stdout.write(' OK\n');
102
+ return 0;
103
+ }
104
+ for (const i of issues) {
105
+ process.stdout.write(` ${i.severity.toUpperCase().padEnd(7)} ${i.code.padEnd(28)} ${i.message}\n`);
106
+ }
107
+ return issues.some((i) => i.severity === 'error') ? 1 : 0;
108
+ },
109
+ };
110
+ const registrationsPreviewCommand = {
111
+ name: 'preview',
112
+ description: 'Preview a registration hint against the live file system. Read-only — no edits are made.',
113
+ usage: 'shrk registrations preview <id> [--var key=value ...] [--json]',
114
+ async run(args) {
115
+ const id = args.positional[0];
116
+ if (!id) {
117
+ process.stderr.write('Usage: shrk registrations preview <id>\n');
118
+ return 2;
119
+ }
120
+ const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
121
+ const variables = flagVars(args);
122
+ const preview = await previewRegistrationHint(inspection, id, { variables });
123
+ if (!preview) {
124
+ process.stderr.write(`Registration hint "${id}" not found.\n`);
125
+ return 1;
126
+ }
127
+ if (flagBool(args, 'json')) {
128
+ process.stdout.write(asJson(preview) + '\n');
129
+ return 0;
130
+ }
131
+ process.stdout.write(header(`Registration hint preview: ${preview.hintId}`));
132
+ process.stdout.write(` title ${preview.title}\n`);
133
+ process.stdout.write(` target file ${preview.targetFile ?? '(ambiguous — multiple candidates)'}\n`);
134
+ if (preview.candidates.length > 1) {
135
+ process.stdout.write(` candidates ${preview.candidates.length}\n`);
136
+ for (const c of preview.candidates)
137
+ process.stdout.write(` • ${c}\n`);
138
+ }
139
+ process.stdout.write(` ambiguous ${preview.ambiguous ? 'YES' : 'no'}\n`);
140
+ process.stdout.write(` human review ${preview.requiresHumanReview ? 'required' : 'optional'}\n`);
141
+ if (preview.missingVariables.length > 0) {
142
+ process.stdout.write(`\n ⚠ missing required variables: ${preview.missingVariables.join(', ')}\n`);
143
+ }
144
+ process.stdout.write('\nOperations:\n');
145
+ for (const op of preview.operations) {
146
+ process.stdout.write(` • ${op.description}\n`);
147
+ if (op.snippet) {
148
+ const snippet = op.snippet.split('\n').map((l) => ' ' + l).join('\n');
149
+ process.stdout.write(snippet + '\n');
150
+ }
151
+ }
152
+ if (preview.safetyNotes.length > 0) {
153
+ process.stdout.write('\nSafety notes:\n');
154
+ for (const s of preview.safetyNotes)
155
+ process.stdout.write(` • ${s}\n`);
156
+ }
157
+ if (preview.validationCommands.length > 0) {
158
+ process.stdout.write('\nValidation commands:\n');
159
+ for (const c of preview.validationCommands)
160
+ process.stdout.write(` $ ${c}\n`);
161
+ }
162
+ process.stdout.write(`\n${preview.nextCommand}\n`);
163
+ return 0;
164
+ },
165
+ };
166
+ const registrationsPlanCommand = {
167
+ name: 'plan',
168
+ description: 'Emit a saved plan from a registration hint. Ambiguous targets must be resolved by passing --target <file>. Read-only at the inspector level; the resulting saved plan flows through `shrk apply --verify-signature` like any other plan.',
169
+ usage: 'shrk registrations plan <id> [--target <file>] [--var key=value ...] [--save-plan <file>] [--sign] [--json]',
170
+ async run(args) {
171
+ const id = args.positional[0];
172
+ if (!id) {
173
+ process.stderr.write('Usage: shrk registrations plan <id> [--target <file>]\n');
174
+ return 2;
175
+ }
176
+ const cwd = resolveCwd(args);
177
+ const inspection = await inspectSharkcraft({ cwd });
178
+ const entry = await getRegistrationHint(inspection, id);
179
+ if (!entry) {
180
+ process.stderr.write(`Registration hint "${id}" not found.\n`);
181
+ return 1;
182
+ }
183
+ const target = flagString(args, 'target');
184
+ const variables = flagVars(args);
185
+ const preview = await previewRegistrationHint(inspection, id, { variables });
186
+ if (!preview) {
187
+ process.stderr.write(`Failed to build preview for "${id}".\n`);
188
+ return 1;
189
+ }
190
+ // Ambiguous target must be refused unless --target is given.
191
+ if (preview.ambiguous && !target) {
192
+ if (flagBool(args, 'json')) {
193
+ process.stdout.write(asJson({
194
+ error: 'ambiguous-target',
195
+ hintId: id,
196
+ candidates: preview.candidates,
197
+ suggestion: `Pass --target <file> to pick one of the ${preview.candidates.length} candidates.`,
198
+ }) + '\n');
199
+ }
200
+ else {
201
+ process.stderr.write(`Registration hint "${id}" has ${preview.candidates.length} candidate target files; pass --target <file>:\n`);
202
+ for (const c of preview.candidates)
203
+ process.stderr.write(` • ${c}\n`);
204
+ }
205
+ return 1;
206
+ }
207
+ // Missing target -> conflict.
208
+ const resolvedTarget = target ?? preview.targetFile;
209
+ if (!resolvedTarget) {
210
+ process.stderr.write(`Registration hint "${id}" has no resolvable target (no targetFile, no --target).\n`);
211
+ return 1;
212
+ }
213
+ if (preview.missingVariables.length > 0) {
214
+ process.stderr.write(`Missing required variables: ${preview.missingVariables.join(', ')}\n`);
215
+ return 1;
216
+ }
217
+ // Build the saved plan: each hint operation becomes an expectedChange
218
+ // against the resolved target file.
219
+ const expectedChanges = preview.operations.map((op) => {
220
+ const operation = { kind: op.kind };
221
+ if (op.anchor !== undefined)
222
+ operation['anchor'] = op.anchor;
223
+ if (op.snippet !== undefined)
224
+ operation['snippet'] = op.snippet;
225
+ const sizeBytes = op.snippet ? Buffer.byteLength(op.snippet, 'utf8') : 0;
226
+ return {
227
+ type: op.kind,
228
+ relativePath: resolvedTarget,
229
+ sizeBytes,
230
+ operation,
231
+ };
232
+ });
233
+ const saved = {
234
+ schema: 'sharkcraft.plan/v2',
235
+ templateId: REGISTRATION_HINT_SYNTHETIC_TEMPLATE,
236
+ variables: { hintId: id, target: resolvedTarget, ...variables },
237
+ projectRoot: cwd,
238
+ createdAt: new Date().toISOString(),
239
+ expectedChanges,
240
+ note: preview.requiresHumanReview ? 'Human review required before apply.' : undefined,
241
+ };
242
+ const savePlanPath = flagString(args, 'save-plan');
243
+ if (savePlanPath) {
244
+ let toWrite = saved;
245
+ if (flagBool(args, 'sign')) {
246
+ const signed = signPlan(toWrite);
247
+ if (signed.ok)
248
+ toWrite = signed.value;
249
+ }
250
+ const abs = nodePath.isAbsolute(savePlanPath)
251
+ ? savePlanPath
252
+ : nodePath.resolve(cwd, savePlanPath);
253
+ const writeResult = savePlanToFile(toWrite, abs);
254
+ if (!writeResult.ok) {
255
+ process.stderr.write(`Failed to save plan: ${writeResult.error.message}\n`);
256
+ return 1;
257
+ }
258
+ if (!flagBool(args, 'json')) {
259
+ process.stdout.write(`Saved registration-hint plan to ${abs}\n`);
260
+ process.stdout.write(`Apply: shrk apply ${abs} --verify-signature\n`);
261
+ }
262
+ else {
263
+ process.stdout.write(asJson({ saved: abs, plan: saved }) + '\n');
264
+ }
265
+ return 0;
266
+ }
267
+ if (flagBool(args, 'json')) {
268
+ process.stdout.write(asJson(saved) + '\n');
269
+ }
270
+ else {
271
+ process.stdout.write(header(`Registration hint plan: ${id}`));
272
+ process.stdout.write(` target file ${resolvedTarget}\n`);
273
+ process.stdout.write(` human review ${preview.requiresHumanReview ? 'required' : 'optional'}\n`);
274
+ process.stdout.write(` operations ${expectedChanges.length}\n`);
275
+ process.stdout.write('\nPass --save-plan <file> to write the saved plan.\n');
276
+ }
277
+ return 0;
278
+ },
279
+ };
280
+ export const registrationsCommand = {
281
+ name: 'registrations',
282
+ description: 'Inspect/preview/plan pack-contributed registration hints (downstream registration steps for generated constructs).',
283
+ usage: 'shrk registrations <list|get|doctor|preview|plan> ...',
284
+ async run(args) {
285
+ const sub = args.positional[0];
286
+ const rest = { ...args, positional: args.positional.slice(1) };
287
+ if (sub === 'list')
288
+ return (await registrationsListCommand.run(rest));
289
+ if (sub === 'get')
290
+ return (await registrationsGetCommand.run(rest));
291
+ if (sub === 'doctor')
292
+ return (await registrationsDoctorCommand.run(rest));
293
+ if (sub === 'preview')
294
+ return (await registrationsPreviewCommand.run(rest));
295
+ if (sub === 'plan')
296
+ return (await registrationsPlanCommand.run(rest));
297
+ process.stderr.write('Usage: shrk registrations <list|get|doctor|preview|plan> ...\n');
298
+ return 2;
299
+ },
300
+ };
@@ -0,0 +1,4 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const registryLifecycleCommand: ICommandHandler;
3
+ export declare const registryCommand: ICommandHandler;
4
+ //# sourceMappingURL=registry.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.command.d.ts","sourceRoot":"","sources":["../../src/commands/registry.command.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAGhC,eAAO,MAAM,wBAAwB,EAAE,eActC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAa7B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `shrk registry` commands.
3
+ *
4
+ * shrk registry lifecycle [--json]
5
+ */
6
+ import { buildRegistryLifecycleReport, renderRegistryLifecycleReportText, } from '@shrkcrft/inspector';
7
+ import { flagBool, resolveCwd, } from "../command-registry.js";
8
+ import { asJson } from "../output/format-output.js";
9
+ export const registryLifecycleCommand = {
10
+ name: 'lifecycle',
11
+ description: 'Scan the workspace for register*/remove* symmetry. Read-only.',
12
+ usage: 'shrk registry lifecycle [--json]',
13
+ async run(args) {
14
+ const cwd = resolveCwd(args);
15
+ const report = buildRegistryLifecycleReport({ projectRoot: cwd });
16
+ if (flagBool(args, 'json')) {
17
+ process.stdout.write(asJson(report) + '\n');
18
+ return report.missingRemovers.length === 0 ? 0 : 1;
19
+ }
20
+ process.stdout.write(renderRegistryLifecycleReportText(report));
21
+ return report.missingRemovers.length === 0 ? 0 : 1;
22
+ },
23
+ };
24
+ export const registryCommand = {
25
+ name: 'registry',
26
+ description: 'Registry inspections (lifecycle symmetry, etc.). Read-only.',
27
+ usage: 'shrk registry lifecycle',
28
+ async run(args) {
29
+ const sub = args.positional[0];
30
+ if (sub === 'lifecycle') {
31
+ args.positional = args.positional.slice(1);
32
+ return registryLifecycleCommand.run(args);
33
+ }
34
+ process.stderr.write('Usage: shrk registry lifecycle\n');
35
+ return 2;
36
+ },
37
+ };
@@ -0,0 +1,4 @@
1
+ import { type ICommandHandler } from '../command-registry.js';
2
+ export declare const releaseCommand: ICommandHandler;
3
+ export declare const installSmokeCommand: ICommandHandler;
4
+ //# sourceMappingURL=release.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.command.d.ts","sourceRoot":"","sources":["../../src/commands/release.command.ts"],"names":[],"mappings":"AA2BA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AA2pBhC,eAAO,MAAM,cAAc,EAAE,eAY5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAKjC,CAAC"}