@shrkcrft/inspector 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 (705) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/acceptance-replay.d.ts +63 -0
  4. package/dist/acceptance-replay.d.ts.map +1 -0
  5. package/dist/acceptance-replay.js +240 -0
  6. package/dist/action-hint-diagnostics.d.ts +32 -0
  7. package/dist/action-hint-diagnostics.d.ts.map +1 -0
  8. package/dist/action-hint-diagnostics.js +133 -0
  9. package/dist/adoption-check.d.ts +28 -0
  10. package/dist/adoption-check.d.ts.map +1 -0
  11. package/dist/adoption-check.js +181 -0
  12. package/dist/adoption-checkpoint.d.ts +97 -0
  13. package/dist/adoption-checkpoint.d.ts.map +1 -0
  14. package/dist/adoption-checkpoint.js +209 -0
  15. package/dist/adoption-merge-preview.d.ts +28 -0
  16. package/dist/adoption-merge-preview.d.ts.map +1 -0
  17. package/dist/adoption-merge-preview.js +254 -0
  18. package/dist/adoption-report-renderer.d.ts +33 -0
  19. package/dist/adoption-report-renderer.d.ts.map +1 -0
  20. package/dist/adoption-report-renderer.js +257 -0
  21. package/dist/adoption-state.d.ts +100 -0
  22. package/dist/adoption-state.d.ts.map +1 -0
  23. package/dist/adoption-state.js +296 -0
  24. package/dist/adoption-three-way.d.ts +46 -0
  25. package/dist/adoption-three-way.d.ts.map +1 -0
  26. package/dist/adoption-three-way.js +181 -0
  27. package/dist/agent-brief.d.ts +77 -0
  28. package/dist/agent-brief.d.ts.map +1 -0
  29. package/dist/agent-brief.js +490 -0
  30. package/dist/agent-contract-gate.d.ts +108 -0
  31. package/dist/agent-contract-gate.d.ts.map +1 -0
  32. package/dist/agent-contract-gate.js +412 -0
  33. package/dist/agent-contract-templates.d.ts +63 -0
  34. package/dist/agent-contract-templates.d.ts.map +1 -0
  35. package/dist/agent-contract-templates.js +346 -0
  36. package/dist/agent-contract.d.ts +65 -0
  37. package/dist/agent-contract.d.ts.map +1 -0
  38. package/dist/agent-contract.js +555 -0
  39. package/dist/agent-handoff.d.ts +123 -0
  40. package/dist/agent-handoff.d.ts.map +1 -0
  41. package/dist/agent-handoff.js +470 -0
  42. package/dist/agent-instructions.d.ts +2 -0
  43. package/dist/agent-instructions.d.ts.map +1 -0
  44. package/dist/agent-instructions.js +21 -0
  45. package/dist/agent-orchestration.d.ts +61 -0
  46. package/dist/agent-orchestration.d.ts.map +1 -0
  47. package/dist/agent-orchestration.js +285 -0
  48. package/dist/agent-task-prep.d.ts +31 -0
  49. package/dist/agent-task-prep.d.ts.map +1 -0
  50. package/dist/agent-task-prep.js +73 -0
  51. package/dist/ai-readiness.d.ts +30 -0
  52. package/dist/ai-readiness.d.ts.map +1 -0
  53. package/dist/ai-readiness.js +279 -0
  54. package/dist/api-report.d.ts +51 -0
  55. package/dist/api-report.d.ts.map +1 -0
  56. package/dist/api-report.js +254 -0
  57. package/dist/apply-dispatch-trace.d.ts +93 -0
  58. package/dist/apply-dispatch-trace.d.ts.map +1 -0
  59. package/dist/apply-dispatch-trace.js +283 -0
  60. package/dist/apply-gate-result.d.ts +52 -0
  61. package/dist/apply-gate-result.d.ts.map +1 -0
  62. package/dist/apply-gate-result.js +44 -0
  63. package/dist/architecture-map.d.ts +118 -0
  64. package/dist/architecture-map.d.ts.map +1 -0
  65. package/dist/architecture-map.js +543 -0
  66. package/dist/area-explore.d.ts +75 -0
  67. package/dist/area-explore.d.ts.map +1 -0
  68. package/dist/area-explore.js +438 -0
  69. package/dist/area-map.d.ts +43 -0
  70. package/dist/area-map.d.ts.map +1 -0
  71. package/dist/area-map.js +197 -0
  72. package/dist/asset-provenance.d.ts +123 -0
  73. package/dist/asset-provenance.d.ts.map +1 -0
  74. package/dist/asset-provenance.js +209 -0
  75. package/dist/barrel-operations.d.ts +45 -0
  76. package/dist/barrel-operations.d.ts.map +1 -0
  77. package/dist/barrel-operations.js +159 -0
  78. package/dist/boundaries-changed-only.d.ts +62 -0
  79. package/dist/boundaries-changed-only.d.ts.map +1 -0
  80. package/dist/boundaries-changed-only.js +97 -0
  81. package/dist/boundary-suggestions.d.ts +20 -0
  82. package/dist/boundary-suggestions.d.ts.map +1 -0
  83. package/dist/boundary-suggestions.js +51 -0
  84. package/dist/bundle-diff.d.ts +98 -0
  85. package/dist/bundle-diff.d.ts.map +1 -0
  86. package/dist/bundle-diff.js +531 -0
  87. package/dist/bundle-replay.d.ts +68 -0
  88. package/dist/bundle-replay.d.ts.map +1 -0
  89. package/dist/bundle-replay.js +273 -0
  90. package/dist/bundle-validate-html.d.ts +11 -0
  91. package/dist/bundle-validate-html.d.ts.map +1 -0
  92. package/dist/bundle-validate-html.js +60 -0
  93. package/dist/change-intent.d.ts +36 -0
  94. package/dist/change-intent.d.ts.map +1 -0
  95. package/dist/change-intent.js +259 -0
  96. package/dist/changed-preflight.d.ts +59 -0
  97. package/dist/changed-preflight.d.ts.map +1 -0
  98. package/dist/changed-preflight.js +358 -0
  99. package/dist/changed-scope.d.ts +112 -0
  100. package/dist/changed-scope.d.ts.map +1 -0
  101. package/dist/changed-scope.js +172 -0
  102. package/dist/changes-summary.d.ts +87 -0
  103. package/dist/changes-summary.d.ts.map +1 -0
  104. package/dist/changes-summary.js +323 -0
  105. package/dist/check-result-v1.d.ts +90 -0
  106. package/dist/check-result-v1.d.ts.map +1 -0
  107. package/dist/check-result-v1.js +335 -0
  108. package/dist/ci-integrity-report.d.ts +38 -0
  109. package/dist/ci-integrity-report.d.ts.map +1 -0
  110. package/dist/ci-integrity-report.js +324 -0
  111. package/dist/ci-permissions-fix.d.ts +38 -0
  112. package/dist/ci-permissions-fix.d.ts.map +1 -0
  113. package/dist/ci-permissions-fix.js +201 -0
  114. package/dist/ci-permissions.d.ts +51 -0
  115. package/dist/ci-permissions.d.ts.map +1 -0
  116. package/dist/ci-permissions.js +431 -0
  117. package/dist/ci-predict.d.ts +42 -0
  118. package/dist/ci-predict.d.ts.map +1 -0
  119. package/dist/ci-predict.js +300 -0
  120. package/dist/ci-scaffold.d.ts +47 -0
  121. package/dist/ci-scaffold.d.ts.map +1 -0
  122. package/dist/ci-scaffold.js +638 -0
  123. package/dist/codemod-assist.d.ts +97 -0
  124. package/dist/codemod-assist.d.ts.map +1 -0
  125. package/dist/codemod-assist.js +261 -0
  126. package/dist/command-recommender.d.ts +25 -0
  127. package/dist/command-recommender.d.ts.map +1 -0
  128. package/dist/command-recommender.js +145 -0
  129. package/dist/command-suggester.d.ts +61 -0
  130. package/dist/command-suggester.d.ts.map +1 -0
  131. package/dist/command-suggester.js +159 -0
  132. package/dist/command-taxonomy.d.ts +38 -0
  133. package/dist/command-taxonomy.d.ts.map +1 -0
  134. package/dist/command-taxonomy.js +164 -0
  135. package/dist/compliance-evidence.d.ts +58 -0
  136. package/dist/compliance-evidence.d.ts.map +1 -0
  137. package/dist/compliance-evidence.js +260 -0
  138. package/dist/compliance-profiles.d.ts +42 -0
  139. package/dist/compliance-profiles.d.ts.map +1 -0
  140. package/dist/compliance-profiles.js +171 -0
  141. package/dist/construct-adoption-diff.d.ts +55 -0
  142. package/dist/construct-adoption-diff.d.ts.map +1 -0
  143. package/dist/construct-adoption-diff.js +331 -0
  144. package/dist/construct-adoption.d.ts +71 -0
  145. package/dist/construct-adoption.d.ts.map +1 -0
  146. package/dist/construct-adoption.js +331 -0
  147. package/dist/construct-inference.d.ts +44 -0
  148. package/dist/construct-inference.d.ts.map +1 -0
  149. package/dist/construct-inference.js +391 -0
  150. package/dist/construct-registry.d.ts +32 -0
  151. package/dist/construct-registry.d.ts.map +1 -0
  152. package/dist/construct-registry.js +198 -0
  153. package/dist/contract-file-rule.d.ts +37 -0
  154. package/dist/contract-file-rule.d.ts.map +1 -0
  155. package/dist/contract-file-rule.js +99 -0
  156. package/dist/contract-template-registry.d.ts +28 -0
  157. package/dist/contract-template-registry.d.ts.map +1 -0
  158. package/dist/contract-template-registry.js +161 -0
  159. package/dist/contradictions.d.ts +52 -0
  160. package/dist/contradictions.d.ts.map +1 -0
  161. package/dist/contradictions.js +391 -0
  162. package/dist/convention-registry.d.ts +44 -0
  163. package/dist/convention-registry.d.ts.map +1 -0
  164. package/dist/convention-registry.js +195 -0
  165. package/dist/coverage-report.d.ts +25 -0
  166. package/dist/coverage-report.d.ts.map +1 -0
  167. package/dist/coverage-report.js +190 -0
  168. package/dist/custom-checks.d.ts +146 -0
  169. package/dist/custom-checks.d.ts.map +1 -0
  170. package/dist/custom-checks.js +260 -0
  171. package/dist/dashboard/dashboard-data.d.ts +59 -0
  172. package/dist/dashboard/dashboard-data.d.ts.map +1 -0
  173. package/dist/dashboard/dashboard-data.js +653 -0
  174. package/dist/dashboard-export.d.ts +67 -0
  175. package/dist/dashboard-export.d.ts.map +1 -0
  176. package/dist/dashboard-export.js +203 -0
  177. package/dist/decision-records.d.ts +47 -0
  178. package/dist/decision-records.d.ts.map +1 -0
  179. package/dist/decision-records.js +255 -0
  180. package/dist/demo-package.d.ts +49 -0
  181. package/dist/demo-package.d.ts.map +1 -0
  182. package/dist/demo-package.js +305 -0
  183. package/dist/demo-script.d.ts +25 -0
  184. package/dist/demo-script.d.ts.map +1 -0
  185. package/dist/demo-script.js +198 -0
  186. package/dist/demo-workflow.d.ts +28 -0
  187. package/dist/demo-workflow.d.ts.map +1 -0
  188. package/dist/demo-workflow.js +178 -0
  189. package/dist/dev-cycle.d.ts +41 -0
  190. package/dist/dev-cycle.d.ts.map +1 -0
  191. package/dist/dev-cycle.js +94 -0
  192. package/dist/dev-session-html.d.ts +13 -0
  193. package/dist/dev-session-html.d.ts.map +1 -0
  194. package/dist/dev-session-html.js +223 -0
  195. package/dist/dev-session-report.d.ts +11 -0
  196. package/dist/dev-session-report.d.ts.map +1 -0
  197. package/dist/dev-session-report.js +206 -0
  198. package/dist/dev-session.d.ts +257 -0
  199. package/dist/dev-session.d.ts.map +1 -0
  200. package/dist/dev-session.js +568 -0
  201. package/dist/diagnostics-suggest.d.ts +17 -0
  202. package/dist/diagnostics-suggest.d.ts.map +1 -0
  203. package/dist/diagnostics-suggest.js +69 -0
  204. package/dist/docs-check.d.ts +40 -0
  205. package/dist/docs-check.d.ts.map +1 -0
  206. package/dist/docs-check.js +221 -0
  207. package/dist/doctor-acknowledgements.d.ts +69 -0
  208. package/dist/doctor-acknowledgements.d.ts.map +1 -0
  209. package/dist/doctor-acknowledgements.js +150 -0
  210. package/dist/doctor-result.d.ts +51 -0
  211. package/dist/doctor-result.d.ts.map +1 -0
  212. package/dist/doctor-result.js +7 -0
  213. package/dist/doctor-suppressions.d.ts +91 -0
  214. package/dist/doctor-suppressions.d.ts.map +1 -0
  215. package/dist/doctor-suppressions.js +238 -0
  216. package/dist/drift-baseline.d.ts +29 -0
  217. package/dist/drift-baseline.d.ts.map +1 -0
  218. package/dist/drift-baseline.js +80 -0
  219. package/dist/drift.d.ts +38 -0
  220. package/dist/drift.d.ts.map +1 -0
  221. package/dist/drift.js +107 -0
  222. package/dist/entrypoint-matrix.d.ts +61 -0
  223. package/dist/entrypoint-matrix.d.ts.map +1 -0
  224. package/dist/entrypoint-matrix.js +221 -0
  225. package/dist/examples-check.d.ts +36 -0
  226. package/dist/examples-check.d.ts.map +1 -0
  227. package/dist/examples-check.js +168 -0
  228. package/dist/execution-graph.d.ts +98 -0
  229. package/dist/execution-graph.d.ts.map +1 -0
  230. package/dist/execution-graph.js +484 -0
  231. package/dist/export-bundle.d.ts +10 -0
  232. package/dist/export-bundle.d.ts.map +1 -0
  233. package/dist/export-bundle.js +90 -0
  234. package/dist/failure-diagnostics.d.ts +63 -0
  235. package/dist/failure-diagnostics.d.ts.map +1 -0
  236. package/dist/failure-diagnostics.js +243 -0
  237. package/dist/feature-bundle.d.ts +111 -0
  238. package/dist/feature-bundle.d.ts.map +1 -0
  239. package/dist/feature-bundle.js +211 -0
  240. package/dist/feedback-actions-v2.d.ts +65 -0
  241. package/dist/feedback-actions-v2.d.ts.map +1 -0
  242. package/dist/feedback-actions-v2.js +183 -0
  243. package/dist/feedback-ingestion.d.ts +96 -0
  244. package/dist/feedback-ingestion.d.ts.map +1 -0
  245. package/dist/feedback-ingestion.js +400 -0
  246. package/dist/fix-preview.d.ts +82 -0
  247. package/dist/fix-preview.d.ts.map +1 -0
  248. package/dist/fix-preview.js +365 -0
  249. package/dist/fuzzy-impact.d.ts +50 -0
  250. package/dist/fuzzy-impact.d.ts.map +1 -0
  251. package/dist/fuzzy-impact.js +446 -0
  252. package/dist/generated-code.d.ts +97 -0
  253. package/dist/generated-code.d.ts.map +1 -0
  254. package/dist/generated-code.js +395 -0
  255. package/dist/git-helpers.d.ts +26 -0
  256. package/dist/git-helpers.d.ts.map +1 -0
  257. package/dist/git-helpers.js +110 -0
  258. package/dist/golden-output.d.ts +33 -0
  259. package/dist/golden-output.d.ts.map +1 -0
  260. package/dist/golden-output.js +92 -0
  261. package/dist/grounding/build-grounding.d.ts +53 -0
  262. package/dist/grounding/build-grounding.d.ts.map +1 -0
  263. package/dist/grounding/build-grounding.js +51 -0
  264. package/dist/grounding/nx-projects.d.ts +29 -0
  265. package/dist/grounding/nx-projects.d.ts.map +1 -0
  266. package/dist/grounding/nx-projects.js +109 -0
  267. package/dist/grounding/validate-extracted-plan.d.ts +20 -0
  268. package/dist/grounding/validate-extracted-plan.d.ts.map +1 -0
  269. package/dist/grounding/validate-extracted-plan.js +127 -0
  270. package/dist/healing-plan.d.ts +33 -0
  271. package/dist/healing-plan.d.ts.map +1 -0
  272. package/dist/healing-plan.js +346 -0
  273. package/dist/helper-registry.d.ts +90 -0
  274. package/dist/helper-registry.d.ts.map +1 -0
  275. package/dist/helper-registry.js +529 -0
  276. package/dist/impact-analysis.d.ts +150 -0
  277. package/dist/impact-analysis.d.ts.map +1 -0
  278. package/dist/impact-analysis.js +697 -0
  279. package/dist/impact-graph-render.d.ts +51 -0
  280. package/dist/impact-graph-render.d.ts.map +1 -0
  281. package/dist/impact-graph-render.js +139 -0
  282. package/dist/impact-graph.d.ts +17 -0
  283. package/dist/impact-graph.d.ts.map +1 -0
  284. package/dist/impact-graph.js +119 -0
  285. package/dist/impact-render.d.ts +22 -0
  286. package/dist/impact-render.d.ts.map +1 -0
  287. package/dist/impact-render.js +413 -0
  288. package/dist/import-graph-analysis.d.ts +28 -0
  289. package/dist/import-graph-analysis.d.ts.map +1 -0
  290. package/dist/import-graph-analysis.js +193 -0
  291. package/dist/import-hygiene.d.ts +93 -0
  292. package/dist/import-hygiene.d.ts.map +1 -0
  293. package/dist/import-hygiene.js +366 -0
  294. package/dist/index.d.ts +223 -0
  295. package/dist/index.d.ts.map +1 -0
  296. package/dist/index.js +233 -0
  297. package/dist/ingest-adoption.d.ts +50 -0
  298. package/dist/ingest-adoption.d.ts.map +1 -0
  299. package/dist/ingest-adoption.js +183 -0
  300. package/dist/ingest-apply.d.ts +80 -0
  301. package/dist/ingest-apply.d.ts.map +1 -0
  302. package/dist/ingest-apply.js +227 -0
  303. package/dist/ingest-body-extractor.d.ts +28 -0
  304. package/dist/ingest-body-extractor.d.ts.map +1 -0
  305. package/dist/ingest-body-extractor.js +129 -0
  306. package/dist/ingest-drafts.d.ts +16 -0
  307. package/dist/ingest-drafts.d.ts.map +1 -0
  308. package/dist/ingest-drafts.js +482 -0
  309. package/dist/inspector-cache.d.ts +41 -0
  310. package/dist/inspector-cache.d.ts.map +1 -0
  311. package/dist/inspector-cache.js +104 -0
  312. package/dist/install-smoke.d.ts +44 -0
  313. package/dist/install-smoke.d.ts.map +1 -0
  314. package/dist/install-smoke.js +31 -0
  315. package/dist/knowledge-authoring.d.ts +151 -0
  316. package/dist/knowledge-authoring.d.ts.map +1 -0
  317. package/dist/knowledge-authoring.js +586 -0
  318. package/dist/knowledge-graph.d.ts +76 -0
  319. package/dist/knowledge-graph.d.ts.map +1 -0
  320. package/dist/knowledge-graph.js +336 -0
  321. package/dist/knowledge-lint.d.ts +97 -0
  322. package/dist/knowledge-lint.d.ts.map +1 -0
  323. package/dist/knowledge-lint.js +302 -0
  324. package/dist/knowledge-rename.d.ts +38 -0
  325. package/dist/knowledge-rename.d.ts.map +1 -0
  326. package/dist/knowledge-rename.js +88 -0
  327. package/dist/knowledge-stale.d.ts +124 -0
  328. package/dist/knowledge-stale.d.ts.map +1 -0
  329. package/dist/knowledge-stale.js +892 -0
  330. package/dist/languages/command-inference.d.ts +27 -0
  331. package/dist/languages/command-inference.d.ts.map +1 -0
  332. package/dist/languages/command-inference.js +214 -0
  333. package/dist/languages/dependency-scan.d.ts +33 -0
  334. package/dist/languages/dependency-scan.d.ts.map +1 -0
  335. package/dist/languages/dependency-scan.js +343 -0
  336. package/dist/languages/index.d.ts +14 -0
  337. package/dist/languages/index.d.ts.map +1 -0
  338. package/dist/languages/index.js +13 -0
  339. package/dist/languages/language-boundaries.d.ts +30 -0
  340. package/dist/languages/language-boundaries.d.ts.map +1 -0
  341. package/dist/languages/language-boundaries.js +176 -0
  342. package/dist/languages/language-cache.d.ts +54 -0
  343. package/dist/languages/language-cache.d.ts.map +1 -0
  344. package/dist/languages/language-cache.js +236 -0
  345. package/dist/languages/language-detection.d.ts +30 -0
  346. package/dist/languages/language-detection.d.ts.map +1 -0
  347. package/dist/languages/language-detection.js +584 -0
  348. package/dist/languages/language-id.d.ts +15 -0
  349. package/dist/languages/language-id.d.ts.map +1 -0
  350. package/dist/languages/language-id.js +15 -0
  351. package/dist/languages/language-runner.d.ts +90 -0
  352. package/dist/languages/language-runner.d.ts.map +1 -0
  353. package/dist/languages/language-runner.js +346 -0
  354. package/dist/languages/polyglot-boundary.d.ts +80 -0
  355. package/dist/languages/polyglot-boundary.d.ts.map +1 -0
  356. package/dist/languages/polyglot-boundary.js +373 -0
  357. package/dist/languages/polyglot-ci.d.ts +25 -0
  358. package/dist/languages/polyglot-ci.d.ts.map +1 -0
  359. package/dist/languages/polyglot-ci.js +278 -0
  360. package/dist/languages/test-impact.d.ts +19 -0
  361. package/dist/languages/test-impact.d.ts.map +1 -0
  362. package/dist/languages/test-impact.js +157 -0
  363. package/dist/loader-diagnostics.d.ts +40 -0
  364. package/dist/loader-diagnostics.d.ts.map +1 -0
  365. package/dist/loader-diagnostics.js +49 -0
  366. package/dist/memory-diff.d.ts +60 -0
  367. package/dist/memory-diff.d.ts.map +1 -0
  368. package/dist/memory-diff.js +302 -0
  369. package/dist/migration-profile-registry.d.ts +26 -0
  370. package/dist/migration-profile-registry.d.ts.map +1 -0
  371. package/dist/migration-profile-registry.js +135 -0
  372. package/dist/migration-readiness.d.ts +101 -0
  373. package/dist/migration-readiness.d.ts.map +1 -0
  374. package/dist/migration-readiness.js +253 -0
  375. package/dist/monorepo-onboarding.d.ts +51 -0
  376. package/dist/monorepo-onboarding.d.ts.map +1 -0
  377. package/dist/monorepo-onboarding.js +235 -0
  378. package/dist/onboarding-adoption-diff.d.ts +53 -0
  379. package/dist/onboarding-adoption-diff.d.ts.map +1 -0
  380. package/dist/onboarding-adoption-diff.js +285 -0
  381. package/dist/onboarding-adoption.d.ts +136 -0
  382. package/dist/onboarding-adoption.d.ts.map +1 -0
  383. package/dist/onboarding-adoption.js +702 -0
  384. package/dist/onboarding-agent-import.d.ts +40 -0
  385. package/dist/onboarding-agent-import.d.ts.map +1 -0
  386. package/dist/onboarding-agent-import.js +114 -0
  387. package/dist/onboarding-diff.d.ts +39 -0
  388. package/dist/onboarding-diff.d.ts.map +1 -0
  389. package/dist/onboarding-diff.js +240 -0
  390. package/dist/onboarding-drafts.d.ts +28 -0
  391. package/dist/onboarding-drafts.d.ts.map +1 -0
  392. package/dist/onboarding-drafts.js +234 -0
  393. package/dist/onboarding-report.d.ts +8 -0
  394. package/dist/onboarding-report.d.ts.map +1 -0
  395. package/dist/onboarding-report.js +239 -0
  396. package/dist/onboarding.d.ts +134 -0
  397. package/dist/onboarding.d.ts.map +1 -0
  398. package/dist/onboarding.js +729 -0
  399. package/dist/ownership.d.ts +38 -0
  400. package/dist/ownership.d.ts.map +1 -0
  401. package/dist/ownership.js +102 -0
  402. package/dist/pack-author-ux.d.ts +58 -0
  403. package/dist/pack-author-ux.d.ts.map +1 -0
  404. package/dist/pack-author-ux.js +219 -0
  405. package/dist/pack-author.d.ts +94 -0
  406. package/dist/pack-author.d.ts.map +1 -0
  407. package/dist/pack-author.js +208 -0
  408. package/dist/pack-compatibility.d.ts +21 -0
  409. package/dist/pack-compatibility.d.ts.map +1 -0
  410. package/dist/pack-compatibility.js +114 -0
  411. package/dist/pack-contributions-inventory.d.ts +121 -0
  412. package/dist/pack-contributions-inventory.d.ts.map +1 -0
  413. package/dist/pack-contributions-inventory.js +732 -0
  414. package/dist/pack-docs.d.ts +11 -0
  415. package/dist/pack-docs.d.ts.map +1 -0
  416. package/dist/pack-docs.js +101 -0
  417. package/dist/pack-doctor.d.ts +50 -0
  418. package/dist/pack-doctor.d.ts.map +1 -0
  419. package/dist/pack-doctor.js +302 -0
  420. package/dist/pack-helper-registry.d.ts +29 -0
  421. package/dist/pack-helper-registry.d.ts.map +1 -0
  422. package/dist/pack-helper-registry.js +144 -0
  423. package/dist/pack-pending.d.ts +68 -0
  424. package/dist/pack-pending.d.ts.map +1 -0
  425. package/dist/pack-pending.js +189 -0
  426. package/dist/pack-quality-score.d.ts +44 -0
  427. package/dist/pack-quality-score.d.ts.map +1 -0
  428. package/dist/pack-quality-score.js +155 -0
  429. package/dist/pack-release-check.d.ts +24 -0
  430. package/dist/pack-release-check.d.ts.map +1 -0
  431. package/dist/pack-release-check.js +258 -0
  432. package/dist/pack-signature-status.d.ts +72 -0
  433. package/dist/pack-signature-status.d.ts.map +1 -0
  434. package/dist/pack-signature-status.js +222 -0
  435. package/dist/pack-symbol-compat.d.ts +60 -0
  436. package/dist/pack-symbol-compat.d.ts.map +1 -0
  437. package/dist/pack-symbol-compat.js +371 -0
  438. package/dist/pack-test-runner.d.ts +59 -0
  439. package/dist/pack-test-runner.d.ts.map +1 -0
  440. package/dist/pack-test-runner.js +211 -0
  441. package/dist/pipeline-command-dictionary.d.ts +2 -0
  442. package/dist/pipeline-command-dictionary.d.ts.map +1 -0
  443. package/dist/pipeline-command-dictionary.js +20 -0
  444. package/dist/pipeline-lint.d.ts +30 -0
  445. package/dist/pipeline-lint.d.ts.map +1 -0
  446. package/dist/pipeline-lint.js +134 -0
  447. package/dist/plan-dependency-graph.d.ts +25 -0
  448. package/dist/plan-dependency-graph.d.ts.map +1 -0
  449. package/dist/plan-dependency-graph.js +195 -0
  450. package/dist/plan-review.d.ts +64 -0
  451. package/dist/plan-review.d.ts.map +1 -0
  452. package/dist/plan-review.js +242 -0
  453. package/dist/plan-simulation.d.ts +108 -0
  454. package/dist/plan-simulation.d.ts.map +1 -0
  455. package/dist/plan-simulation.js +767 -0
  456. package/dist/playbook-registry.d.ts +25 -0
  457. package/dist/playbook-registry.d.ts.map +1 -0
  458. package/dist/playbook-registry.js +148 -0
  459. package/dist/playbook-script.d.ts +60 -0
  460. package/dist/playbook-script.d.ts.map +1 -0
  461. package/dist/playbook-script.js +161 -0
  462. package/dist/plugin-lifecycle-profile-registry.d.ts +52 -0
  463. package/dist/plugin-lifecycle-profile-registry.d.ts.map +1 -0
  464. package/dist/plugin-lifecycle-profile-registry.js +202 -0
  465. package/dist/plugin-lifecycle.d.ts +132 -0
  466. package/dist/plugin-lifecycle.d.ts.map +1 -0
  467. package/dist/plugin-lifecycle.js +477 -0
  468. package/dist/policy-engine.d.ts +101 -0
  469. package/dist/policy-engine.d.ts.map +1 -0
  470. package/dist/policy-engine.js +321 -0
  471. package/dist/policy-override-audit.d.ts +18 -0
  472. package/dist/policy-override-audit.d.ts.map +1 -0
  473. package/dist/policy-override-audit.js +54 -0
  474. package/dist/policy-overrides.d.ts +35 -0
  475. package/dist/policy-overrides.d.ts.map +1 -0
  476. package/dist/policy-overrides.js +84 -0
  477. package/dist/policy-test.d.ts +83 -0
  478. package/dist/policy-test.d.ts.map +1 -0
  479. package/dist/policy-test.js +342 -0
  480. package/dist/pr-summary.d.ts +34 -0
  481. package/dist/pr-summary.d.ts.map +1 -0
  482. package/dist/pr-summary.js +220 -0
  483. package/dist/product-coherence.d.ts +21 -0
  484. package/dist/product-coherence.d.ts.map +1 -0
  485. package/dist/product-coherence.js +158 -0
  486. package/dist/profile-registry.d.ts +42 -0
  487. package/dist/profile-registry.d.ts.map +1 -0
  488. package/dist/profile-registry.js +104 -0
  489. package/dist/project-coupling-audit.d.ts +64 -0
  490. package/dist/project-coupling-audit.d.ts.map +1 -0
  491. package/dist/project-coupling-audit.js +282 -0
  492. package/dist/project-overview.d.ts +14 -0
  493. package/dist/project-overview.d.ts.map +1 -0
  494. package/dist/project-overview.js +27 -0
  495. package/dist/propose-knowledge.d.ts +64 -0
  496. package/dist/propose-knowledge.d.ts.map +1 -0
  497. package/dist/propose-knowledge.js +367 -0
  498. package/dist/quality-baseline.d.ts +123 -0
  499. package/dist/quality-baseline.d.ts.map +1 -0
  500. package/dist/quality-baseline.js +433 -0
  501. package/dist/quality-html.d.ts +7 -0
  502. package/dist/quality-html.d.ts.map +1 -0
  503. package/dist/quality-html.js +64 -0
  504. package/dist/quality-report.d.ts +49 -0
  505. package/dist/quality-report.d.ts.map +1 -0
  506. package/dist/quality-report.js +296 -0
  507. package/dist/query-resolver.d.ts +38 -0
  508. package/dist/query-resolver.d.ts.map +1 -0
  509. package/dist/query-resolver.js +163 -0
  510. package/dist/ranker-explainability.d.ts +91 -0
  511. package/dist/ranker-explainability.d.ts.map +1 -0
  512. package/dist/ranker-explainability.js +550 -0
  513. package/dist/reference-lookup.d.ts +8 -0
  514. package/dist/reference-lookup.d.ts.map +1 -0
  515. package/dist/reference-lookup.js +18 -0
  516. package/dist/registration-hint-registry.d.ts +55 -0
  517. package/dist/registration-hint-registry.d.ts.map +1 -0
  518. package/dist/registration-hint-registry.js +327 -0
  519. package/dist/registry-lifecycle.d.ts +47 -0
  520. package/dist/registry-lifecycle.d.ts.map +1 -0
  521. package/dist/registry-lifecycle.js +214 -0
  522. package/dist/release-readiness.d.ts +64 -0
  523. package/dist/release-readiness.d.ts.map +1 -0
  524. package/dist/release-readiness.js +456 -0
  525. package/dist/release-smoke.d.ts +138 -0
  526. package/dist/release-smoke.d.ts.map +1 -0
  527. package/dist/release-smoke.js +459 -0
  528. package/dist/release-train.d.ts +33 -0
  529. package/dist/release-train.d.ts.map +1 -0
  530. package/dist/release-train.js +104 -0
  531. package/dist/repo-memory.d.ts +95 -0
  532. package/dist/repo-memory.d.ts.map +1 -0
  533. package/dist/repo-memory.js +614 -0
  534. package/dist/report-site.d.ts +92 -0
  535. package/dist/report-site.d.ts.map +1 -0
  536. package/dist/report-site.js +658 -0
  537. package/dist/reposet.d.ts +56 -0
  538. package/dist/reposet.d.ts.map +1 -0
  539. package/dist/reposet.js +160 -0
  540. package/dist/repository-intelligence.d.ts +145 -0
  541. package/dist/repository-intelligence.d.ts.map +1 -0
  542. package/dist/repository-intelligence.js +729 -0
  543. package/dist/repository-knowledge-model.d.ts +218 -0
  544. package/dist/repository-knowledge-model.d.ts.map +1 -0
  545. package/dist/repository-knowledge-model.js +939 -0
  546. package/dist/repository-map.d.ts +72 -0
  547. package/dist/repository-map.d.ts.map +1 -0
  548. package/dist/repository-map.js +332 -0
  549. package/dist/repository-stats.d.ts +66 -0
  550. package/dist/repository-stats.d.ts.map +1 -0
  551. package/dist/repository-stats.js +329 -0
  552. package/dist/review-comment-renderer.d.ts +59 -0
  553. package/dist/review-comment-renderer.d.ts.map +1 -0
  554. package/dist/review-comment-renderer.js +181 -0
  555. package/dist/review-comment-v2.d.ts +9 -0
  556. package/dist/review-comment-v2.d.ts.map +1 -0
  557. package/dist/review-comment-v2.js +178 -0
  558. package/dist/review-html.d.ts +13 -0
  559. package/dist/review-html.d.ts.map +1 -0
  560. package/dist/review-html.js +79 -0
  561. package/dist/review-packet-v2.d.ts +29 -0
  562. package/dist/review-packet-v2.d.ts.map +1 -0
  563. package/dist/review-packet-v2.js +71 -0
  564. package/dist/review-packet-v3.d.ts +22 -0
  565. package/dist/review-packet-v3.d.ts.map +1 -0
  566. package/dist/review-packet-v3.js +181 -0
  567. package/dist/review-packet.d.ts +49 -0
  568. package/dist/review-packet.d.ts.map +1 -0
  569. package/dist/review-packet.js +129 -0
  570. package/dist/risk-signals.d.ts +28 -0
  571. package/dist/risk-signals.d.ts.map +1 -0
  572. package/dist/risk-signals.js +68 -0
  573. package/dist/role-views.d.ts +50 -0
  574. package/dist/role-views.d.ts.map +1 -0
  575. package/dist/role-views.js +334 -0
  576. package/dist/rounds.d.ts +52 -0
  577. package/dist/rounds.d.ts.map +1 -0
  578. package/dist/rounds.js +172 -0
  579. package/dist/rule-drift.d.ts +42 -0
  580. package/dist/rule-drift.d.ts.map +1 -0
  581. package/dist/rule-drift.js +148 -0
  582. package/dist/rule-quality.d.ts +73 -0
  583. package/dist/rule-quality.d.ts.map +1 -0
  584. package/dist/rule-quality.js +356 -0
  585. package/dist/rule-scaffold.d.ts +71 -0
  586. package/dist/rule-scaffold.d.ts.map +1 -0
  587. package/dist/rule-scaffold.js +258 -0
  588. package/dist/safety-audit-deep.d.ts +38 -0
  589. package/dist/safety-audit-deep.d.ts.map +1 -0
  590. package/dist/safety-audit-deep.js +162 -0
  591. package/dist/safety-audit.d.ts +91 -0
  592. package/dist/safety-audit.d.ts.map +1 -0
  593. package/dist/safety-audit.js +138 -0
  594. package/dist/safety-html.d.ts +7 -0
  595. package/dist/safety-html.d.ts.map +1 -0
  596. package/dist/safety-html.js +70 -0
  597. package/dist/scaffold-coverage.d.ts +46 -0
  598. package/dist/scaffold-coverage.d.ts.map +1 -0
  599. package/dist/scaffold-coverage.js +273 -0
  600. package/dist/scaffold-patterns.d.ts +38 -0
  601. package/dist/scaffold-patterns.d.ts.map +1 -0
  602. package/dist/scaffold-patterns.js +282 -0
  603. package/dist/schema-inventory.d.ts +55 -0
  604. package/dist/schema-inventory.d.ts.map +1 -0
  605. package/dist/schema-inventory.js +301 -0
  606. package/dist/search-index.d.ts +75 -0
  607. package/dist/search-index.d.ts.map +1 -0
  608. package/dist/search-index.js +531 -0
  609. package/dist/search-tuning-explain.d.ts +68 -0
  610. package/dist/search-tuning-explain.d.ts.map +1 -0
  611. package/dist/search-tuning-explain.js +207 -0
  612. package/dist/search-tuning-registry.d.ts +54 -0
  613. package/dist/search-tuning-registry.d.ts.map +1 -0
  614. package/dist/search-tuning-registry.js +303 -0
  615. package/dist/self-audit.d.ts +59 -0
  616. package/dist/self-audit.d.ts.map +1 -0
  617. package/dist/self-audit.js +192 -0
  618. package/dist/self-config-doctor-v2.d.ts +57 -0
  619. package/dist/self-config-doctor-v2.d.ts.map +1 -0
  620. package/dist/self-config-doctor-v2.js +653 -0
  621. package/dist/self-config-doctor.d.ts +47 -0
  622. package/dist/self-config-doctor.d.ts.map +1 -0
  623. package/dist/self-config-doctor.js +432 -0
  624. package/dist/sharkcraft-inspector.d.ts +73 -0
  625. package/dist/sharkcraft-inspector.d.ts.map +1 -0
  626. package/dist/sharkcraft-inspector.js +745 -0
  627. package/dist/spec/spec-cross-validate.d.ts +17 -0
  628. package/dist/spec/spec-cross-validate.d.ts.map +1 -0
  629. package/dist/spec/spec-cross-validate.js +53 -0
  630. package/dist/spec/spec-discovery.d.ts +27 -0
  631. package/dist/spec/spec-discovery.d.ts.map +1 -0
  632. package/dist/spec/spec-discovery.js +78 -0
  633. package/dist/spec/spec-review.d.ts +36 -0
  634. package/dist/spec/spec-review.d.ts.map +1 -0
  635. package/dist/spec/spec-review.js +37 -0
  636. package/dist/stability-map.d.ts +62 -0
  637. package/dist/stability-map.d.ts.map +1 -0
  638. package/dist/stability-map.js +404 -0
  639. package/dist/start-here.d.ts +49 -0
  640. package/dist/start-here.d.ts.map +1 -0
  641. package/dist/start-here.js +259 -0
  642. package/dist/surface-profile-detect.d.ts +42 -0
  643. package/dist/surface-profile-detect.d.ts.map +1 -0
  644. package/dist/surface-profile-detect.js +76 -0
  645. package/dist/symbol-index.d.ts +108 -0
  646. package/dist/symbol-index.d.ts.map +1 -0
  647. package/dist/symbol-index.js +483 -0
  648. package/dist/task-decompose.d.ts +38 -0
  649. package/dist/task-decompose.d.ts.map +1 -0
  650. package/dist/task-decompose.js +154 -0
  651. package/dist/task-packet.d.ts +104 -0
  652. package/dist/task-packet.d.ts.map +1 -0
  653. package/dist/task-packet.js +156 -0
  654. package/dist/task-ranker.d.ts +51 -0
  655. package/dist/task-ranker.d.ts.map +1 -0
  656. package/dist/task-ranker.js +410 -0
  657. package/dist/task-risk.d.ts +84 -0
  658. package/dist/task-risk.d.ts.map +1 -0
  659. package/dist/task-risk.js +731 -0
  660. package/dist/task-routing-hint-registry.d.ts +36 -0
  661. package/dist/task-routing-hint-registry.d.ts.map +1 -0
  662. package/dist/task-routing-hint-registry.js +186 -0
  663. package/dist/template-authoring.d.ts +113 -0
  664. package/dist/template-authoring.d.ts.map +1 -0
  665. package/dist/template-authoring.js +521 -0
  666. package/dist/template-body-inference-v2.d.ts +19 -0
  667. package/dist/template-body-inference-v2.d.ts.map +1 -0
  668. package/dist/template-body-inference-v2.js +468 -0
  669. package/dist/template-body-inference.d.ts +59 -0
  670. package/dist/template-body-inference.d.ts.map +1 -0
  671. package/dist/template-body-inference.js +277 -0
  672. package/dist/template-drift.d.ts +39 -0
  673. package/dist/template-drift.d.ts.map +1 -0
  674. package/dist/template-drift.js +353 -0
  675. package/dist/template-lint.d.ts +31 -0
  676. package/dist/template-lint.d.ts.map +1 -0
  677. package/dist/template-lint.js +113 -0
  678. package/dist/test-definitions.d.ts +41 -0
  679. package/dist/test-definitions.d.ts.map +1 -0
  680. package/dist/test-definitions.js +6 -0
  681. package/dist/test-impact.d.ts +30 -0
  682. package/dist/test-impact.d.ts.map +1 -0
  683. package/dist/test-impact.js +173 -0
  684. package/dist/test-runner.d.ts +87 -0
  685. package/dist/test-runner.d.ts.map +1 -0
  686. package/dist/test-runner.js +560 -0
  687. package/dist/uncertainty-report.d.ts +46 -0
  688. package/dist/uncertainty-report.d.ts.map +1 -0
  689. package/dist/uncertainty-report.js +108 -0
  690. package/dist/uncertainty.d.ts +38 -0
  691. package/dist/uncertainty.d.ts.map +1 -0
  692. package/dist/uncertainty.js +115 -0
  693. package/dist/universal-search.d.ts +64 -0
  694. package/dist/universal-search.d.ts.map +1 -0
  695. package/dist/universal-search.js +347 -0
  696. package/dist/upgrade-advisor.d.ts +22 -0
  697. package/dist/upgrade-advisor.d.ts.map +1 -0
  698. package/dist/upgrade-advisor.js +109 -0
  699. package/dist/why-file.d.ts +75 -0
  700. package/dist/why-file.d.ts.map +1 -0
  701. package/dist/why-file.js +202 -0
  702. package/dist/workflow-simulation.d.ts +46 -0
  703. package/dist/workflow-simulation.d.ts.map +1 -0
  704. package/dist/workflow-simulation.js +154 -0
  705. package/package.json +66 -0
@@ -0,0 +1,93 @@
1
+ export declare const IMPORT_HYGIENE_SCHEMA = "sharkcraft.import-hygiene/v1";
2
+ export declare enum ImportHygieneFindingKind {
3
+ InlineTypeImport = "inline-type-import",
4
+ RuntimeRequire = "runtime-require",
5
+ DynamicImport = "dynamic-import"
6
+ }
7
+ export type ImportHygieneSeverity = 'info' | 'warning' | 'error';
8
+ export interface IImportHygieneFinding {
9
+ readonly file: string;
10
+ readonly line: number;
11
+ readonly column?: number;
12
+ readonly kind: ImportHygieneFindingKind;
13
+ readonly severity: ImportHygieneSeverity;
14
+ readonly snippet: string;
15
+ readonly suggestedFix: string;
16
+ readonly allowlisted: boolean;
17
+ readonly reason?: string;
18
+ }
19
+ export interface IImportHygieneReport {
20
+ readonly schema: typeof IMPORT_HYGIENE_SCHEMA;
21
+ readonly generatedAt: string;
22
+ readonly projectRoot: string;
23
+ readonly findings: readonly IImportHygieneFinding[];
24
+ readonly counts: Readonly<Record<string, number>>;
25
+ readonly verdict: 'ok' | 'warnings' | 'errors';
26
+ readonly nextCommand: string;
27
+ }
28
+ export interface IImportHygieneOptions {
29
+ /** Restrict scan to a set of relative file paths (e.g. changed files). */
30
+ readonly files?: readonly string[];
31
+ /** Roots to scan; defaults to `packages/*\/src`. */
32
+ readonly roots?: readonly string[];
33
+ /** Skip allowlist loading; useful for tests. */
34
+ readonly skipAllowlist?: boolean;
35
+ /** Path to the allowlist JSON; defaults to `sharkcraft/import-hygiene.allowlist.json`. */
36
+ readonly allowlistFile?: string;
37
+ /**
38
+ * Strict mode: treat allowlist entries with TODO-shaped reasons as
39
+ * un-allowlisted. The finding then keeps its original severity instead of
40
+ * being downgraded to info.
41
+ */
42
+ readonly strictAllowlistReasons?: boolean;
43
+ }
44
+ /**
45
+ * Sentinel value used by the draft-allowlist generator for the
46
+ * `reason` field. A human is expected to replace this with a real
47
+ * justification before the entry is allowed to suppress a finding.
48
+ */
49
+ export declare const ALLOWLIST_TODO_REASON_PREFIX = "TODO:";
50
+ export declare function isTodoReason(reason: string | undefined | null): boolean;
51
+ export interface IAllowlistEntry {
52
+ /** Relative file path. */
53
+ readonly path: string;
54
+ /** Optional: restrict to specific finding kind. */
55
+ readonly kind?: ImportHygieneFindingKind;
56
+ /** Free-form reason — required. */
57
+ readonly reason: string;
58
+ /** Optional ISO date after which this allowlist entry should be re-evaluated. */
59
+ readonly expiresAt?: string;
60
+ }
61
+ export declare function buildImportHygieneReport(projectRoot: string, options?: IImportHygieneOptions): IImportHygieneReport;
62
+ export interface IImportHygieneAllowlistDraft {
63
+ readonly schema: 'sharkcraft.import-hygiene-allowlist/v1';
64
+ readonly comment: string;
65
+ readonly allow: ReadonlyArray<IAllowlistEntry>;
66
+ }
67
+ export interface IEmitAllowlistOptions {
68
+ /**
69
+ * Restrict the emitted draft to a specific finding kind. Defaults to
70
+ * `dynamic-import` — runtime requires and inline type imports require
71
+ * deliberate justification per case and should never be batched.
72
+ */
73
+ readonly kind?: ImportHygieneFindingKind | 'all';
74
+ /** Skip entries that already appear in the loaded allowlist. */
75
+ readonly skipExisting?: boolean;
76
+ }
77
+ /**
78
+ * Build a draft allowlist JSON from the current report. Each candidate
79
+ * gets a `TODO:` reason placeholder so the operator MUST fill in real
80
+ * justification before strict mode will accept it.
81
+ *
82
+ * Behaviour:
83
+ * - Only findings that are NOT already allowlisted are emitted (unless
84
+ * `skipExisting=false`).
85
+ * - For `dynamic-import`, entries are batched by path so a single CLI
86
+ * boundary file collapses to one entry instead of N.
87
+ * - `runtime-require` and `inline-type-import` are NOT included by default
88
+ * and must be opted-in via `kind=all` or the specific kind — those
89
+ * patterns require per-case justification.
90
+ */
91
+ export declare function emitImportHygieneAllowlistDraft(report: IImportHygieneReport, options?: IEmitAllowlistOptions): IImportHygieneAllowlistDraft;
92
+ export declare function renderImportHygieneText(report: IImportHygieneReport): string;
93
+ //# sourceMappingURL=import-hygiene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-hygiene.d.ts","sourceRoot":"","sources":["../src/import-hygiene.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,oBAAY,wBAAwB;IAClC,gBAAgB,uBAAuB;IACvC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;CACjC;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAKvE;AAED,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAwOD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CAwCtB;AAID,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,wCAAwC,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAC;IACjD,gEAAgE;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,4BAA4B,CAyB9B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAiB5E"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Import hygiene checker.
3
+ *
4
+ * Detects bad import patterns that hide module dependencies or invent
5
+ * cycles where none exist:
6
+ *
7
+ * - inline-type-import: `import('./x').Type` used as a type annotation.
8
+ * - runtime-require: `require('./x')` inside a normal TS/TSX source.
9
+ * - dynamic-import: `await import('./x')` or `import('./x')` used
10
+ * as a runtime escape hatch in normal engine
11
+ * source. Allowlisted entries (e.g. legitimate
12
+ * lazy-load boundaries between CLI subcommand
13
+ * modules) opt out via
14
+ * `sharkcraft/import-hygiene.allowlist.json`.
15
+ *
16
+ * Read-only: scans source files; never writes.
17
+ *
18
+ * Schema: sharkcraft.import-hygiene/v1
19
+ */
20
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
21
+ import * as nodePath from 'node:path';
22
+ export const IMPORT_HYGIENE_SCHEMA = 'sharkcraft.import-hygiene/v1';
23
+ export var ImportHygieneFindingKind;
24
+ (function (ImportHygieneFindingKind) {
25
+ ImportHygieneFindingKind["InlineTypeImport"] = "inline-type-import";
26
+ ImportHygieneFindingKind["RuntimeRequire"] = "runtime-require";
27
+ ImportHygieneFindingKind["DynamicImport"] = "dynamic-import";
28
+ })(ImportHygieneFindingKind || (ImportHygieneFindingKind = {}));
29
+ /**
30
+ * Sentinel value used by the draft-allowlist generator for the
31
+ * `reason` field. A human is expected to replace this with a real
32
+ * justification before the entry is allowed to suppress a finding.
33
+ */
34
+ export const ALLOWLIST_TODO_REASON_PREFIX = 'TODO:';
35
+ export function isTodoReason(reason) {
36
+ if (!reason)
37
+ return true;
38
+ const trimmed = reason.trim();
39
+ if (trimmed.length === 0)
40
+ return true;
41
+ return trimmed.toUpperCase().startsWith('TODO');
42
+ }
43
+ const INLINE_TYPE_RE = /import\s*\(\s*['"][^'"]+['"]\s*\)\s*\./g;
44
+ const RUNTIME_REQUIRE_RE = /\brequire\s*\(\s*['"][^'"]+['"]\s*\)/g;
45
+ const DYNAMIC_IMPORT_RE = /(?:^|[^.\w])(?:await\s+)?import\s*\(\s*['"][^'"]+['"]\s*\)/g;
46
+ /** Type-only `typeof import('x')` is a TS type expression — never a runtime call. */
47
+ const TYPEOF_IMPORT_PREFIX = /typeof\s+$/;
48
+ function loadAllowlist(projectRoot, allowlistFile) {
49
+ const path = allowlistFile
50
+ ? (nodePath.isAbsolute(allowlistFile) ? allowlistFile : nodePath.join(projectRoot, allowlistFile))
51
+ : nodePath.join(projectRoot, 'sharkcraft', 'import-hygiene.allowlist.json');
52
+ if (!existsSync(path))
53
+ return [];
54
+ try {
55
+ const raw = readFileSync(path, 'utf8');
56
+ const json = JSON.parse(raw);
57
+ return json.allow ?? [];
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
63
+ function listSourceFiles(root) {
64
+ const out = [];
65
+ function walk(dir) {
66
+ let entries = [];
67
+ try {
68
+ entries = readdirSync(dir, { withFileTypes: true });
69
+ }
70
+ catch {
71
+ return;
72
+ }
73
+ for (const e of entries) {
74
+ const name = String(e.name);
75
+ if (name === 'node_modules' || name === 'dist' || name === '.sharkcraft')
76
+ continue;
77
+ const abs = nodePath.join(dir, name);
78
+ if (e.isDirectory())
79
+ walk(abs);
80
+ else if (e.isFile()) {
81
+ if (/\.(ts|tsx)$/.test(name) && !/\.d\.ts$/.test(name))
82
+ out.push(abs);
83
+ }
84
+ }
85
+ }
86
+ if (existsSync(root) && statSync(root).isDirectory())
87
+ walk(root);
88
+ return out;
89
+ }
90
+ function scanFile(projectRoot, absFile, allowlist, strictReasons = false) {
91
+ const findings = [];
92
+ let rawContent;
93
+ try {
94
+ rawContent = readFileSync(absFile, 'utf8');
95
+ }
96
+ catch {
97
+ return findings;
98
+ }
99
+ const relFile = nodePath.relative(projectRoot, absFile);
100
+ const lines = rawContent.split('\n');
101
+ // Strip block and line comments before regex scanning so the checker
102
+ // doesn't false-positive on docstrings / inline comments. Replace each
103
+ // comment character with a space so line/column offsets stay accurate.
104
+ const content = stripCommentsPreservingOffsets(rawContent);
105
+ function lineColOf(idx) {
106
+ let line = 1;
107
+ let lineStart = 0;
108
+ for (let i = 0; i < idx; i++) {
109
+ if (content[i] === '\n') {
110
+ line += 1;
111
+ lineStart = i + 1;
112
+ }
113
+ }
114
+ return { line, column: idx - lineStart + 1 };
115
+ }
116
+ function isAllowed(kind) {
117
+ return allowlist.find((a) => a.path === relFile && (a.kind === undefined || a.kind === kind));
118
+ }
119
+ function record(kind, idx, severity) {
120
+ const allowed = isAllowed(kind);
121
+ // In strict mode, allowlist entries with empty/TODO reasons do NOT
122
+ // suppress findings. The entry is still surfaced (allowlisted=true,
123
+ // reasonAccepted=false) so the operator can see what needs explaining.
124
+ const reasonAccepted = allowed ? !isTodoReason(allowed.reason) : false;
125
+ const effectiveAllowed = allowed && (!strictReasons || reasonAccepted);
126
+ const { line, column } = lineColOf(idx);
127
+ const snippet = (lines[line - 1] ?? '').trim().slice(0, 200);
128
+ let suggestedFix = '';
129
+ switch (kind) {
130
+ case ImportHygieneFindingKind.InlineTypeImport:
131
+ suggestedFix = `Replace with a top-level \`import type { ... } from './...';\` statement.`;
132
+ break;
133
+ case ImportHygieneFindingKind.RuntimeRequire:
134
+ suggestedFix = `Replace with a top-level \`import { ... } from '...';\`. Node built-ins gain nothing from lazy require (they're already in memory); for real circular dependencies, extract the shared types into a neutral lower-level module instead of hiding the cycle.`;
135
+ break;
136
+ case ImportHygieneFindingKind.DynamicImport:
137
+ suggestedFix = effectiveAllowed
138
+ ? `Allowlisted as intentional lazy-load.`
139
+ : allowed && !reasonAccepted
140
+ ? `Allowlist entry has a TODO/empty reason — replace it with a real justification or remove the entry.`
141
+ : `Convert to a top-level import; if this is intentional code-splitting, add an allowlist entry with a justification.`;
142
+ break;
143
+ }
144
+ findings.push({
145
+ file: relFile,
146
+ line,
147
+ column,
148
+ kind,
149
+ severity: effectiveAllowed ? 'info' : severity,
150
+ snippet,
151
+ suggestedFix,
152
+ allowlisted: allowed !== undefined,
153
+ ...(allowed?.reason ? { reason: allowed.reason } : {}),
154
+ });
155
+ }
156
+ // 1) Inline type imports: `import('./...').Type`.
157
+ INLINE_TYPE_RE.lastIndex = 0;
158
+ let m;
159
+ while ((m = INLINE_TYPE_RE.exec(content)) !== null) {
160
+ record(ImportHygieneFindingKind.InlineTypeImport, m.index, 'error');
161
+ }
162
+ // 2) Runtime `require(...)`.
163
+ // Always `error`. Node built-ins (`node:fs`, `node:path`, …) are
164
+ // already resolved before any user code runs — there is no lazy-load
165
+ // benefit, and `require('node:fs') as typeof import('node:fs')` is
166
+ // a hack to satisfy strict TS where a top-level `import` would have
167
+ // typed the call for free. Cross-module requires are even worse —
168
+ // they hide dependencies from static analysis. Use the allowlist
169
+ // (with a documented `reason`) for the rare legitimate case.
170
+ RUNTIME_REQUIRE_RE.lastIndex = 0;
171
+ while ((m = RUNTIME_REQUIRE_RE.exec(content)) !== null) {
172
+ record(ImportHygieneFindingKind.RuntimeRequire, m.index, 'error');
173
+ }
174
+ // 3) Dynamic `import(...)` / `await import(...)`.
175
+ DYNAMIC_IMPORT_RE.lastIndex = 0;
176
+ while ((m = DYNAMIC_IMPORT_RE.exec(content)) !== null) {
177
+ // Skip the inline-type-import case (already recorded by INLINE_TYPE_RE).
178
+ const after = content.slice(m.index + m[0].length, m.index + m[0].length + 2);
179
+ if (after.startsWith('.'))
180
+ continue;
181
+ // Skip TS type-only `typeof import('x')` — it's a type expression.
182
+ const before = content.slice(Math.max(0, m.index - 16), m.index + (m[0][0] === 'i' ? 0 : 1));
183
+ if (TYPEOF_IMPORT_PREFIX.test(before))
184
+ continue;
185
+ record(ImportHygieneFindingKind.DynamicImport, m.index, 'warning');
186
+ }
187
+ return findings;
188
+ }
189
+ /**
190
+ * Replace comment characters with spaces so regex scans don't false-positive
191
+ * on docstrings / inline comments. Strings are SKIPPED (their contents are
192
+ * preserved verbatim) so we can still extract the module specifier from a
193
+ * `require('x')` call after this pass. Line and column offsets stay accurate
194
+ * because every replacement is character-for-character.
195
+ */
196
+ function stripCommentsPreservingOffsets(source) {
197
+ const buf = [];
198
+ let i = 0;
199
+ while (i < source.length) {
200
+ const ch = source[i];
201
+ const next = source[i + 1];
202
+ // Block comment.
203
+ if (ch === '/' && next === '*') {
204
+ buf.push(' ');
205
+ i += 2;
206
+ while (i < source.length) {
207
+ const c = source[i];
208
+ const n = source[i + 1];
209
+ if (c === '*' && n === '/') {
210
+ buf.push(' ');
211
+ i += 2;
212
+ break;
213
+ }
214
+ buf.push(c === '\n' ? '\n' : ' ');
215
+ i += 1;
216
+ }
217
+ continue;
218
+ }
219
+ // Line comment.
220
+ if (ch === '/' && next === '/') {
221
+ while (i < source.length && source[i] !== '\n') {
222
+ buf.push(' ');
223
+ i += 1;
224
+ }
225
+ continue;
226
+ }
227
+ // String literal — preserve contents verbatim. We do walk through it
228
+ // so that comment delimiters inside strings (e.g. `"//"` as data) don't
229
+ // start a fake comment.
230
+ if (ch === '"' || ch === '\'' || ch === '`') {
231
+ const quote = ch;
232
+ buf.push(ch);
233
+ i += 1;
234
+ while (i < source.length) {
235
+ const c = source[i] ?? '';
236
+ if (c === '\\' && i + 1 < source.length) {
237
+ buf.push(c);
238
+ buf.push(source[i + 1] ?? '');
239
+ i += 2;
240
+ continue;
241
+ }
242
+ buf.push(c);
243
+ i += 1;
244
+ if (c === quote)
245
+ break;
246
+ }
247
+ continue;
248
+ }
249
+ buf.push(ch ?? '');
250
+ i += 1;
251
+ }
252
+ return buf.join('');
253
+ }
254
+ function defaultRoots(projectRoot) {
255
+ const pkgsDir = nodePath.join(projectRoot, 'packages');
256
+ if (!existsSync(pkgsDir))
257
+ return [projectRoot];
258
+ const out = [];
259
+ for (const name of readdirSync(pkgsDir)) {
260
+ const src = nodePath.join(pkgsDir, name, 'src');
261
+ if (existsSync(src) && statSync(src).isDirectory())
262
+ out.push(src);
263
+ }
264
+ return out;
265
+ }
266
+ export function buildImportHygieneReport(projectRoot, options = {}) {
267
+ const allowlist = options.skipAllowlist
268
+ ? []
269
+ : loadAllowlist(projectRoot, options.allowlistFile);
270
+ const roots = options.roots ?? defaultRoots(projectRoot);
271
+ let scanned;
272
+ if (options.files && options.files.length > 0) {
273
+ scanned = options.files
274
+ .map((f) => (nodePath.isAbsolute(f) ? f : nodePath.join(projectRoot, f)))
275
+ .filter((f) => existsSync(f) && /\.(ts|tsx)$/.test(f) && !/\.d\.ts$/.test(f));
276
+ }
277
+ else {
278
+ scanned = roots.flatMap(listSourceFiles).filter((f) => !/__tests__|\/__fixtures__/.test(f));
279
+ }
280
+ const findings = [];
281
+ const strictReasons = options.strictAllowlistReasons === true;
282
+ for (const f of scanned)
283
+ findings.push(...scanFile(projectRoot, f, allowlist, strictReasons));
284
+ const counts = { total: findings.length };
285
+ for (const f of findings) {
286
+ counts[f.kind] = (counts[f.kind] ?? 0) + 1;
287
+ counts[f.severity] = (counts[f.severity] ?? 0) + 1;
288
+ }
289
+ const errorCount = counts['error'] ?? 0;
290
+ const warnCount = counts['warning'] ?? 0;
291
+ const verdict = errorCount > 0 ? 'errors' : warnCount > 0 ? 'warnings' : 'ok';
292
+ return {
293
+ schema: IMPORT_HYGIENE_SCHEMA,
294
+ generatedAt: new Date().toISOString(),
295
+ projectRoot,
296
+ findings,
297
+ counts,
298
+ verdict,
299
+ nextCommand: verdict === 'errors'
300
+ ? 'Replace inline imports and runtime requires with top-level ESM imports.'
301
+ : verdict === 'warnings'
302
+ ? 'Review dynamic imports; allowlist legitimate lazy-load boundaries with a reason.'
303
+ : 'shrk check imports --changed-only',
304
+ };
305
+ }
306
+ /**
307
+ * Build a draft allowlist JSON from the current report. Each candidate
308
+ * gets a `TODO:` reason placeholder so the operator MUST fill in real
309
+ * justification before strict mode will accept it.
310
+ *
311
+ * Behaviour:
312
+ * - Only findings that are NOT already allowlisted are emitted (unless
313
+ * `skipExisting=false`).
314
+ * - For `dynamic-import`, entries are batched by path so a single CLI
315
+ * boundary file collapses to one entry instead of N.
316
+ * - `runtime-require` and `inline-type-import` are NOT included by default
317
+ * and must be opted-in via `kind=all` or the specific kind — those
318
+ * patterns require per-case justification.
319
+ */
320
+ export function emitImportHygieneAllowlistDraft(report, options = {}) {
321
+ const allowKind = options.kind ?? ImportHygieneFindingKind.DynamicImport;
322
+ const wantKind = (k) => allowKind === 'all' || allowKind === k;
323
+ // Group: path|kind → reason placeholder.
324
+ const seen = new Map();
325
+ for (const f of report.findings) {
326
+ if (!wantKind(f.kind))
327
+ continue;
328
+ if (options.skipExisting !== false && f.allowlisted)
329
+ continue;
330
+ const key = `${f.file}|${f.kind}`;
331
+ if (seen.has(key))
332
+ continue;
333
+ const placeholder = `${ALLOWLIST_TODO_REASON_PREFIX} explain why this ${f.kind} is intentional (added by shrk check imports --emit-allowlist)`;
334
+ seen.set(key, { path: f.file, kind: f.kind, reason: placeholder });
335
+ }
336
+ // Sort deterministically.
337
+ const entries = [...seen.values()].sort((a, b) => {
338
+ if (a.path !== b.path)
339
+ return a.path.localeCompare(b.path);
340
+ return (a.kind ?? '').localeCompare(b.kind ?? '');
341
+ });
342
+ return {
343
+ schema: 'sharkcraft.import-hygiene-allowlist/v1',
344
+ comment: 'Allowlist for legitimate dynamic imports. Each entry must carry a non-TODO reason. The checker downgrades these from warning to info; strict mode (--fail-on-unexplained-allowlist) rejects entries whose reason is still a TODO placeholder.',
345
+ allow: entries,
346
+ };
347
+ }
348
+ export function renderImportHygieneText(report) {
349
+ const lines = [];
350
+ lines.push(`=== Import hygiene (${report.verdict.toUpperCase()}) ===`);
351
+ lines.push(` scanned files (with findings) ${new Set(report.findings.map((f) => f.file)).size}`);
352
+ lines.push(` errors ${report.counts['error'] ?? 0}`);
353
+ lines.push(` warnings ${report.counts['warning'] ?? 0}`);
354
+ lines.push(` info ${report.counts['info'] ?? 0}`);
355
+ lines.push('');
356
+ for (const f of report.findings) {
357
+ const tag = f.allowlisted ? '[allowlisted]' : `[${f.severity}]`;
358
+ lines.push(` ${tag} ${f.file}:${f.line}:${f.column ?? 0} ${f.kind}`);
359
+ lines.push(` ${f.snippet}`);
360
+ if (!f.allowlisted)
361
+ lines.push(` fix: ${f.suggestedFix}`);
362
+ }
363
+ lines.push('');
364
+ lines.push(`Next: ${report.nextCommand}`);
365
+ return lines.join('\n') + '\n';
366
+ }