@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,40 @@
1
+ /**
2
+ * `shrk docs check` — verify the docs / README content.
3
+ *
4
+ * Read-only. Verifies:
5
+ * - required docs exist (`docs/<canonical>.md`)
6
+ * - README contains required sections (heading keywords)
7
+ * - relative docs links in README point to files that exist
8
+ * - safety statement is present in README
9
+ * - no obvious stale command references (when a catalog is provided)
10
+ *
11
+ * The check is intentionally minimal — it answers "would a new reader find
12
+ * the runnable bits?", not "are the docs prose-quality".
13
+ */
14
+ export declare const DOCS_CHECK_SCHEMA = "sharkcraft.docs-check/v1";
15
+ export interface IDocsCheckFinding {
16
+ code: 'required-doc-missing' | 'readme-section-missing' | 'readme-link-broken' | 'safety-statement-missing' | 'mcp-readonly-statement-missing' | 'stale-command-reference';
17
+ severity: 'info' | 'warning' | 'error';
18
+ message: string;
19
+ file?: string;
20
+ suggestion?: string;
21
+ }
22
+ export interface IDocsCheckReport {
23
+ schema: typeof DOCS_CHECK_SCHEMA;
24
+ generatedAt: string;
25
+ projectRoot: string;
26
+ findings: readonly IDocsCheckFinding[];
27
+ readmePresent: boolean;
28
+ docsFolderPresent: boolean;
29
+ requiredDocsPresent: number;
30
+ requiredDocsExpected: number;
31
+ ok: boolean;
32
+ }
33
+ export interface IBuildDocsCheckOptions {
34
+ /** Known CLI subcommand strings (e.g. ['shrk doctor', 'shrk brief']).
35
+ * Used to detect stale references. */
36
+ knownCommands?: readonly string[];
37
+ }
38
+ export declare function buildDocsCheck(projectRoot: string, options?: IBuildDocsCheckOptions): IDocsCheckReport;
39
+ export declare function renderDocsCheckText(report: IDocsCheckReport): string;
40
+ //# sourceMappingURL=docs-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-check.d.ts","sourceRoot":"","sources":["../src/docs-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EACA,sBAAsB,GACtB,wBAAwB,GACxB,oBAAoB,GACpB,0BAA0B,GAC1B,gCAAgC,GAChC,yBAAyB,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,iBAAiB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,EAAE,EAAE,OAAO,CAAC;CACb;AAwCD,MAAM,WAAW,sBAAsB;IACrC;2CACuC;IACvC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,sBAA2B,GACnC,gBAAgB,CA+IlB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAepE"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * `shrk docs check` — verify the docs / README content.
3
+ *
4
+ * Read-only. Verifies:
5
+ * - required docs exist (`docs/<canonical>.md`)
6
+ * - README contains required sections (heading keywords)
7
+ * - relative docs links in README point to files that exist
8
+ * - safety statement is present in README
9
+ * - no obvious stale command references (when a catalog is provided)
10
+ *
11
+ * The check is intentionally minimal — it answers "would a new reader find
12
+ * the runnable bits?", not "are the docs prose-quality".
13
+ */
14
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
15
+ import * as nodePath from 'node:path';
16
+ export const DOCS_CHECK_SCHEMA = 'sharkcraft.docs-check/v1';
17
+ const REQUIRED_DOCS = [
18
+ 'overview.md',
19
+ 'philosophy.md',
20
+ 'safety-model.md',
21
+ 'testing.md',
22
+ ];
23
+ const README_REQUIRED_KEYWORDS = ['quick demo', 'onboard', 'safety'];
24
+ const README_SAFETY_KEYWORDS = ['mcp', 'read-only', 'never writes', 'safety'];
25
+ function readSafe(file) {
26
+ if (!existsSync(file))
27
+ return null;
28
+ try {
29
+ return readFileSync(file, 'utf8');
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ function extractMarkdownLinks(body) {
36
+ const out = [];
37
+ const re = /\[([^\]]+)\]\(([^)]+)\)/g;
38
+ let m;
39
+ while ((m = re.exec(body))) {
40
+ out.push({ text: m[1], href: m[2] });
41
+ }
42
+ return out;
43
+ }
44
+ function safeReaddir(dir) {
45
+ try {
46
+ return readdirSync(dir);
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ export function buildDocsCheck(projectRoot, options = {}) {
53
+ const findings = [];
54
+ const readmeFile = nodePath.join(projectRoot, 'README.md');
55
+ const readmeBody = readSafe(readmeFile);
56
+ const readmePresent = readmeBody !== null;
57
+ const docsDir = nodePath.join(projectRoot, 'docs');
58
+ const docsFolderPresent = existsSync(docsDir);
59
+ let requiredDocsPresent = 0;
60
+ for (const rel of REQUIRED_DOCS) {
61
+ const file = nodePath.join(docsDir, rel);
62
+ if (existsSync(file)) {
63
+ requiredDocsPresent += 1;
64
+ }
65
+ else {
66
+ findings.push({
67
+ code: 'required-doc-missing',
68
+ severity: 'error',
69
+ message: `Required doc missing: docs/${rel}`,
70
+ file: `docs/${rel}`,
71
+ suggestion: 'Add the canonical doc; release-readiness checks for it.',
72
+ });
73
+ }
74
+ }
75
+ if (readmePresent) {
76
+ const lower = readmeBody.toLowerCase();
77
+ for (const keyword of README_REQUIRED_KEYWORDS) {
78
+ if (!lower.includes(keyword)) {
79
+ findings.push({
80
+ code: 'readme-section-missing',
81
+ severity: 'warning',
82
+ message: `README does not mention "${keyword}".`,
83
+ file: 'README.md',
84
+ suggestion: `Add a section that includes the word "${keyword}".`,
85
+ });
86
+ }
87
+ }
88
+ const safetyHits = README_SAFETY_KEYWORDS.filter((k) => lower.includes(k));
89
+ if (safetyHits.length < 2) {
90
+ findings.push({
91
+ code: 'safety-statement-missing',
92
+ severity: 'warning',
93
+ message: 'README does not include a clear safety statement.',
94
+ file: 'README.md',
95
+ suggestion: 'Add a paragraph that says MCP never writes and the CLI is the only write path.',
96
+ });
97
+ }
98
+ if (!lower.includes('mcp') || !lower.includes('read-only')) {
99
+ findings.push({
100
+ code: 'mcp-readonly-statement-missing',
101
+ severity: 'warning',
102
+ message: 'README does not explicitly state that MCP is read-only.',
103
+ file: 'README.md',
104
+ suggestion: 'Include the phrase "MCP is read-only" so adopters can scan-find it.',
105
+ });
106
+ }
107
+ // Validate internal links.
108
+ for (const link of extractMarkdownLinks(readmeBody)) {
109
+ if (/^https?:/.test(link.href) || link.href.startsWith('#'))
110
+ continue;
111
+ const target = link.href.split('#')[0];
112
+ const abs = nodePath.resolve(projectRoot, target);
113
+ if (!existsSync(abs)) {
114
+ findings.push({
115
+ code: 'readme-link-broken',
116
+ severity: 'warning',
117
+ message: `README links to ${target} but that file does not exist.`,
118
+ file: 'README.md',
119
+ suggestion: `Either create ${target} or update the link.`,
120
+ });
121
+ }
122
+ }
123
+ // Detect stale `shrk …` references when a catalog is supplied.
124
+ if (options.knownCommands && options.knownCommands.length > 0) {
125
+ const knownSet = new Set(options.knownCommands);
126
+ const re = /\bshrk\s+([\w-]+(?:\s+[\w-]+)?)/g;
127
+ let m;
128
+ while ((m = re.exec(readmeBody))) {
129
+ const command = `shrk ${m[1].trim()}`;
130
+ // Allow partial prefix matches (some commands have arguments after).
131
+ let known = false;
132
+ for (const k of knownSet) {
133
+ if (k === command || k.startsWith(command) || command.startsWith(k)) {
134
+ known = true;
135
+ break;
136
+ }
137
+ }
138
+ if (!known) {
139
+ findings.push({
140
+ code: 'stale-command-reference',
141
+ severity: 'info',
142
+ message: `README references "${command}" which is not in the command catalog.`,
143
+ file: 'README.md',
144
+ suggestion: 'Check whether the command was renamed or removed.',
145
+ });
146
+ }
147
+ }
148
+ }
149
+ }
150
+ else {
151
+ findings.push({
152
+ code: 'required-doc-missing',
153
+ severity: 'error',
154
+ message: 'README.md is missing at the project root.',
155
+ file: 'README.md',
156
+ });
157
+ }
158
+ // Cross-check docs/ for broken intra-doc links.
159
+ if (docsFolderPresent) {
160
+ for (const entry of safeReaddir(docsDir)) {
161
+ if (!entry.endsWith('.md'))
162
+ continue;
163
+ const file = nodePath.join(docsDir, entry);
164
+ try {
165
+ if (!statSync(file).isFile())
166
+ continue;
167
+ }
168
+ catch {
169
+ continue;
170
+ }
171
+ const body = readSafe(file);
172
+ if (!body)
173
+ continue;
174
+ for (const link of extractMarkdownLinks(body)) {
175
+ if (/^https?:/.test(link.href) || link.href.startsWith('#'))
176
+ continue;
177
+ const target = link.href.split('#')[0];
178
+ const abs = nodePath.resolve(docsDir, target);
179
+ if (!existsSync(abs)) {
180
+ findings.push({
181
+ code: 'readme-link-broken',
182
+ severity: 'info',
183
+ message: `docs/${entry} links to ${target} but it does not exist.`,
184
+ file: `docs/${entry}`,
185
+ suggestion: `Either create ${target} or update the link.`,
186
+ });
187
+ }
188
+ }
189
+ }
190
+ }
191
+ const ok = findings.filter((f) => f.severity === 'error').length === 0;
192
+ return {
193
+ schema: DOCS_CHECK_SCHEMA,
194
+ generatedAt: new Date().toISOString(),
195
+ projectRoot,
196
+ findings,
197
+ readmePresent,
198
+ docsFolderPresent,
199
+ requiredDocsPresent,
200
+ requiredDocsExpected: REQUIRED_DOCS.length,
201
+ ok,
202
+ };
203
+ }
204
+ export function renderDocsCheckText(report) {
205
+ const lines = [];
206
+ lines.push('# Docs check');
207
+ lines.push(`OK: ${report.ok ? 'yes' : 'no'} · README present: ${report.readmePresent}`);
208
+ lines.push(`Required docs: ${report.requiredDocsPresent}/${report.requiredDocsExpected}`);
209
+ if (report.findings.length === 0) {
210
+ lines.push('No findings.');
211
+ }
212
+ else {
213
+ lines.push('Findings:');
214
+ for (const f of report.findings) {
215
+ lines.push(` [${f.severity}] ${f.code}: ${f.message}`);
216
+ if (f.suggestion)
217
+ lines.push(` → ${f.suggestion}`);
218
+ }
219
+ }
220
+ return lines.join('\n') + '\n';
221
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Doctor acknowledgements.
3
+ *
4
+ * Thin layer on top of the suppression system: an "acknowledgement" is a
5
+ * suppression that REQUIRES a non-empty `reason` and an explicit expiry.
6
+ * The on-disk format is the same `sharkcraft/doctor.suppressions.json`, so
7
+ * existing tooling continues to work.
8
+ *
9
+ * Provides:
10
+ * - `parseExpiresIn(value)` — `7d` / `48h` / `2w` → ISO date string.
11
+ * - `buildAcknowledgement(input)` — validates reason + expiry and returns
12
+ * a suppression entry that the existing save path accepts.
13
+ * - `summarizeAcknowledgements(suppressions, now)` — splits live / expired
14
+ * / suppression-only entries so a "doctor --fail-on-expired-acknowledgement"
15
+ * run can decide the exit code.
16
+ *
17
+ * Read-only: no file mutation here; the CLI persistence calls
18
+ * `saveDoctorSuppressions` from the suppressions module.
19
+ */
20
+ import type { IDoctorSuppressionEntry } from './doctor-suppressions.js';
21
+ export declare const DOCTOR_ACKNOWLEDGEMENT_SCHEMA = "sharkcraft.doctor-acknowledgements/v1";
22
+ export interface IBuildAcknowledgementInput {
23
+ /** Finding id (preferred) — matches the stable id from doctor-suppressions. */
24
+ id?: string;
25
+ /** Finding code/category (`actionhints-...`). */
26
+ code?: string;
27
+ /** Category bucket (`action-hint-quality`). */
28
+ category?: string;
29
+ /** Required free-form reason. */
30
+ reason: string;
31
+ /** Either `expiresAt` (ISO date) or `expiresIn` (`7d`, `48h`, `2w`). */
32
+ expiresAt?: string;
33
+ expiresIn?: string;
34
+ /** Permit acknowledging an error finding. Default false. */
35
+ allowError?: boolean;
36
+ /** Used to evaluate `expiresIn` against a reference clock. Defaults to now. */
37
+ now?: Date;
38
+ }
39
+ export interface IBuildAcknowledgementResult {
40
+ ok: boolean;
41
+ entry?: IDoctorSuppressionEntry;
42
+ error?: string;
43
+ }
44
+ /**
45
+ * Parse `7d`, `48h`, `2w` style relative durations into an ISO date string
46
+ * computed from `now`. Returns null if the value is unparsable.
47
+ */
48
+ export declare function parseExpiresIn(value: string, now?: Date): string | null;
49
+ export declare function buildAcknowledgement(input: IBuildAcknowledgementInput): IBuildAcknowledgementResult;
50
+ export interface IAcknowledgementSummary {
51
+ /** Entries that look like acknowledgements (have reason + expiresAt). */
52
+ acknowledgements: ReadonlyArray<IDoctorSuppressionEntry>;
53
+ /** Entries with no expiry — bare suppressions, not acknowledgements. */
54
+ bareSuppressions: ReadonlyArray<IDoctorSuppressionEntry>;
55
+ /** Acknowledgements whose expiry already passed. */
56
+ expired: ReadonlyArray<IDoctorSuppressionEntry>;
57
+ /** Acknowledgements expiring within `expiringSoonDays`. */
58
+ expiringSoon: ReadonlyArray<IDoctorSuppressionEntry>;
59
+ /** Total active (non-expired) acknowledgement count. */
60
+ activeCount: number;
61
+ }
62
+ export interface ISummarizeOptions {
63
+ now?: Date;
64
+ /** Default 7. Acknowledgements within this window are flagged expiring soon. */
65
+ expiringSoonDays?: number;
66
+ }
67
+ export declare function summarizeAcknowledgements(entries: ReadonlyArray<IDoctorSuppressionEntry>, options?: ISummarizeOptions): IAcknowledgementSummary;
68
+ export declare function renderAcknowledgementsText(summary: IAcknowledgementSummary): string;
69
+ //# sourceMappingURL=doctor-acknowledgements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-acknowledgements.d.ts","sourceRoot":"","sources":["../src/doctor-acknowledgements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,eAAO,MAAM,6BAA6B,0CAA0C,CAAC;AAErF,MAAM,WAAW,0BAA0B;IACzC,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAYnF;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAgD7B;AAED,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,gBAAgB,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACzD,wEAAwE;IACxE,gBAAgB,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACzD,oDAAoD;IACpD,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAChD,2DAA2D;IAC3D,YAAY,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACrD,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAC/C,OAAO,GAAE,iBAAsB,GAC9B,uBAAuB,CAgCzB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAwCnF"}
@@ -0,0 +1,150 @@
1
+ export const DOCTOR_ACKNOWLEDGEMENT_SCHEMA = 'sharkcraft.doctor-acknowledgements/v1';
2
+ const DURATION_RE = /^(\d+)\s*(d|day|days|h|hour|hours|w|week|weeks|m|min|minute|minutes)$/i;
3
+ /**
4
+ * Parse `7d`, `48h`, `2w` style relative durations into an ISO date string
5
+ * computed from `now`. Returns null if the value is unparsable.
6
+ */
7
+ export function parseExpiresIn(value, now = new Date()) {
8
+ const m = DURATION_RE.exec(value.trim());
9
+ if (!m)
10
+ return null;
11
+ const n = Number(m[1]);
12
+ if (!Number.isFinite(n) || n <= 0)
13
+ return null;
14
+ const unit = (m[2] ?? 'd').toLowerCase();
15
+ let ms;
16
+ if (unit.startsWith('w'))
17
+ ms = n * 7 * 24 * 60 * 60 * 1000;
18
+ else if (unit.startsWith('h'))
19
+ ms = n * 60 * 60 * 1000;
20
+ else if (unit.startsWith('m') && !unit.startsWith('mo'))
21
+ ms = n * 60 * 1000;
22
+ else
23
+ ms = n * 24 * 60 * 60 * 1000;
24
+ return new Date(now.getTime() + ms).toISOString();
25
+ }
26
+ export function buildAcknowledgement(input) {
27
+ const reason = (input.reason ?? '').trim();
28
+ if (reason.length === 0) {
29
+ return { ok: false, error: 'reason is required and must be non-empty' };
30
+ }
31
+ if (reason.toUpperCase().startsWith('TODO')) {
32
+ return {
33
+ ok: false,
34
+ error: 'reason starts with TODO; acknowledgements need a justification, not a placeholder',
35
+ };
36
+ }
37
+ if (!input.id && !input.code && !input.category) {
38
+ return { ok: false, error: 'one of id / code / category is required' };
39
+ }
40
+ let expiresAt = input.expiresAt;
41
+ if (!expiresAt && input.expiresIn) {
42
+ const parsed = parseExpiresIn(input.expiresIn, input.now ?? new Date());
43
+ if (!parsed) {
44
+ return {
45
+ ok: false,
46
+ error: `expiresIn "${input.expiresIn}" is not a duration (try 7d / 48h / 2w)`,
47
+ };
48
+ }
49
+ expiresAt = parsed;
50
+ }
51
+ if (!expiresAt) {
52
+ return {
53
+ ok: false,
54
+ error: 'an acknowledgement requires either --expires-at or --expires-in',
55
+ };
56
+ }
57
+ // Sanity-check the expiry is in the future (and not in the distant past).
58
+ const ts = new Date(expiresAt).getTime();
59
+ if (!Number.isFinite(ts)) {
60
+ return { ok: false, error: `expiresAt "${expiresAt}" is not a valid ISO date` };
61
+ }
62
+ const now = input.now ?? new Date();
63
+ if (ts <= now.getTime()) {
64
+ return { ok: false, error: `expiresAt "${expiresAt}" is already in the past` };
65
+ }
66
+ const entry = { reason };
67
+ if (input.id)
68
+ entry.id = input.id;
69
+ if (input.code)
70
+ entry.code = input.code;
71
+ if (input.category)
72
+ entry.category = input.category;
73
+ entry.expiresAt = expiresAt;
74
+ if (input.allowError)
75
+ entry.allowError = input.allowError;
76
+ return { ok: true, entry };
77
+ }
78
+ export function summarizeAcknowledgements(entries, options = {}) {
79
+ const now = options.now ?? new Date();
80
+ const window = (options.expiringSoonDays ?? 7) * 24 * 60 * 60 * 1000;
81
+ const acknowledgements = [];
82
+ const bareSuppressions = [];
83
+ const expired = [];
84
+ const expiringSoon = [];
85
+ for (const e of entries) {
86
+ if (!e.expiresAt) {
87
+ bareSuppressions.push(e);
88
+ continue;
89
+ }
90
+ const ts = new Date(e.expiresAt).getTime();
91
+ if (!Number.isFinite(ts)) {
92
+ bareSuppressions.push(e);
93
+ continue;
94
+ }
95
+ if (ts < now.getTime()) {
96
+ expired.push(e);
97
+ continue;
98
+ }
99
+ acknowledgements.push(e);
100
+ if (ts - now.getTime() <= window)
101
+ expiringSoon.push(e);
102
+ }
103
+ return {
104
+ acknowledgements,
105
+ bareSuppressions,
106
+ expired,
107
+ expiringSoon,
108
+ activeCount: acknowledgements.length,
109
+ };
110
+ }
111
+ export function renderAcknowledgementsText(summary) {
112
+ const lines = [];
113
+ lines.push('=== Doctor acknowledgements ===');
114
+ lines.push(` active ${summary.acknowledgements.length}`);
115
+ lines.push(` expiringSoon ${summary.expiringSoon.length}`);
116
+ lines.push(` expired ${summary.expired.length}`);
117
+ lines.push(` bare-suppressions (no expiry) ${summary.bareSuppressions.length}`);
118
+ if (summary.acknowledgements.length > 0) {
119
+ lines.push('');
120
+ lines.push('Active:');
121
+ for (const e of summary.acknowledgements) {
122
+ lines.push(` • ${describeKey(e)} [until ${e.expiresAt}] — ${e.reason}`);
123
+ }
124
+ }
125
+ if (summary.expiringSoon.length > 0) {
126
+ lines.push('');
127
+ lines.push('Expiring soon:');
128
+ for (const e of summary.expiringSoon) {
129
+ lines.push(` • ${describeKey(e)} [until ${e.expiresAt}]`);
130
+ }
131
+ }
132
+ if (summary.expired.length > 0) {
133
+ lines.push('');
134
+ lines.push('Expired (re-evaluate):');
135
+ for (const e of summary.expired) {
136
+ lines.push(` • ${describeKey(e)} [expired ${e.expiresAt}] — ${e.reason}`);
137
+ }
138
+ }
139
+ if (summary.bareSuppressions.length > 0) {
140
+ lines.push('');
141
+ lines.push('Bare suppressions (no expiry — consider converting to acknowledgements):');
142
+ for (const e of summary.bareSuppressions) {
143
+ lines.push(` • ${describeKey(e)} — ${e.reason}`);
144
+ }
145
+ }
146
+ return lines.join('\n') + '\n';
147
+ }
148
+ function describeKey(e) {
149
+ return e.id ?? e.code ?? e.category ?? '(unknown)';
150
+ }
@@ -0,0 +1,51 @@
1
+ export declare enum DoctorSeverity {
2
+ Ok = "ok",
3
+ Info = "info",
4
+ Warning = "warning",
5
+ Error = "error"
6
+ }
7
+ export interface IDoctorCheck {
8
+ id: string;
9
+ title: string;
10
+ severity: DoctorSeverity;
11
+ message: string;
12
+ fix?: string;
13
+ /**
14
+ * Optional warning-quality fields. Backwards compatible: every
15
+ * field is optional and existing checks render unchanged when absent.
16
+ *
17
+ * - `category`: stable bucket (e.g. `action-hint-quality`,
18
+ * `pack-doctor`, `boundary`). Used by `--hide` and acknowledgements.
19
+ * - `code`: stable per-finding code (e.g. `missing-verification`).
20
+ * Distinguishes related findings inside the same category.
21
+ * - `recommendedFix`: a copy-pasteable command that addresses the
22
+ * finding (e.g. `shrk fix preview --action-hints --target <id>`).
23
+ * - `whyThisMatters`: a one-line explanation of the consequence of
24
+ * ignoring the finding. Designed to fight "permanent yellow noise".
25
+ * - `advisory`: true if the finding is for an advisory rule and
26
+ * should be presented as informational rather than actionable.
27
+ */
28
+ category?: string;
29
+ code?: string;
30
+ recommendedFix?: string;
31
+ whyThisMatters?: string;
32
+ advisory?: boolean;
33
+ }
34
+ export interface IDoctorResult {
35
+ passed: boolean;
36
+ checks: readonly IDoctorCheck[];
37
+ summary: {
38
+ ok: number;
39
+ info: number;
40
+ warnings: number;
41
+ errors: number;
42
+ /**
43
+ * Count of checks marked `advisory: true` OR `severity: info`.
44
+ * These are the findings the default text render collapses behind
45
+ * `--show-advisory`. JSON consumers see the same count
46
+ * here without needing to re-derive it from `checks[]`.
47
+ */
48
+ advisoryCount?: number;
49
+ };
50
+ }
51
+ //# sourceMappingURL=doctor-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-result.d.ts","sourceRoot":"","sources":["../src/doctor-result.ts"],"names":[],"mappings":"AAAA,oBAAY,cAAc;IACxB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf;;;;;WAKG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH"}
@@ -0,0 +1,7 @@
1
+ export var DoctorSeverity;
2
+ (function (DoctorSeverity) {
3
+ DoctorSeverity["Ok"] = "ok";
4
+ DoctorSeverity["Info"] = "info";
5
+ DoctorSeverity["Warning"] = "warning";
6
+ DoctorSeverity["Error"] = "error";
7
+ })(DoctorSeverity || (DoctorSeverity = {}));
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Doctor warning noise control.
3
+ *
4
+ * Reads `sharkcraft/doctor.suppressions.json` (and, optionally, a
5
+ * `doctorSuppressions` field on `sharkcraft.config.ts`) and lets callers
6
+ * mark specific findings as suppressed.
7
+ *
8
+ * Rules:
9
+ * - Suppressed findings are counted, not deleted. Renderers know to hide
10
+ * them from the headline output but include the count in summary.
11
+ * - Expired suppressions surface as a warning so authors notice.
12
+ * - Errors are NOT suppressed unless the suppression explicitly marks
13
+ * `allowError: true`. The aggregate output also tells the user that
14
+ * one or more errors were force-suppressed.
15
+ *
16
+ * Schema: sharkcraft.doctor-suppressions/v1
17
+ */
18
+ import type { IDoctorCheck, IDoctorResult } from './doctor-result.js';
19
+ export declare const DOCTOR_SUPPRESSIONS_SCHEMA = "sharkcraft.doctor-suppressions/v1";
20
+ export interface IDoctorSuppressionEntry {
21
+ /** Stable id of the finding (preferred match). */
22
+ id?: string;
23
+ /** Optional code/category — any finding with this code matches. */
24
+ code?: string;
25
+ /** Optional category bucket — matches against the derived category. */
26
+ category?: string;
27
+ /** Required reason for suppression — surfaces in audit output. */
28
+ reason: string;
29
+ /** Optional ISO date after which the suppression no longer applies. */
30
+ expiresAt?: string;
31
+ /** Set true to allow suppressing errors. Default false. */
32
+ allowError?: boolean;
33
+ }
34
+ export interface IDoctorSuppressionsConfig {
35
+ schema?: typeof DOCTOR_SUPPRESSIONS_SCHEMA;
36
+ doctorSuppressions: ReadonlyArray<IDoctorSuppressionEntry>;
37
+ }
38
+ export interface IDoctorFindingWithStableId extends IDoctorCheck {
39
+ /** Stable id derived from `id` + a hash slug for repeated rows. */
40
+ stableId: string;
41
+ /** Best-effort category derived from the id prefix. */
42
+ category: string;
43
+ }
44
+ export interface IDoctorFilteredResult {
45
+ schema: 'sharkcraft.doctor-filtered/v1';
46
+ passed: boolean;
47
+ checks: ReadonlyArray<IDoctorFindingWithStableId>;
48
+ suppressedChecks: ReadonlyArray<IDoctorFindingWithStableId>;
49
+ expiredSuppressions: ReadonlyArray<IDoctorSuppressionEntry>;
50
+ appliedSuppressions: ReadonlyArray<{
51
+ entry: IDoctorSuppressionEntry;
52
+ matched: number;
53
+ }>;
54
+ summary: {
55
+ ok: number;
56
+ info: number;
57
+ warnings: number;
58
+ errors: number;
59
+ suppressedWarnings: number;
60
+ suppressedInfo: number;
61
+ suppressedErrors: number;
62
+ };
63
+ }
64
+ export interface IDoctorFilterOptions {
65
+ focus?: ReadonlyArray<'errors' | 'warnings' | 'warnings-new' | 'info' | 'ok' | 'all'>;
66
+ hide?: ReadonlyArray<string>;
67
+ quietKnown?: boolean;
68
+ suppressions?: ReadonlyArray<IDoctorSuppressionEntry>;
69
+ }
70
+ /** Default file path for doctor suppressions. */
71
+ export declare function doctorSuppressionsFile(projectRoot: string): string;
72
+ export declare function loadDoctorSuppressions(projectRoot: string): IDoctorSuppressionsConfig;
73
+ export declare function saveDoctorSuppressions(projectRoot: string, config: IDoctorSuppressionsConfig): string;
74
+ /**
75
+ * Derive a stable id for a finding so the same warning can be suppressed
76
+ * across runs even when the message text shifts slightly.
77
+ */
78
+ export declare function deriveStableId(check: IDoctorCheck): string;
79
+ export declare function deriveCategory(check: IDoctorCheck): string;
80
+ export declare function filterDoctorResult(doctor: IDoctorResult, options?: IDoctorFilterOptions): IDoctorFilteredResult;
81
+ export interface IBuildSuppressionEntryInput {
82
+ /** Pass a stableId or finding code. */
83
+ id?: string;
84
+ code?: string;
85
+ category?: string;
86
+ reason: string;
87
+ expiresAt?: string;
88
+ allowError?: boolean;
89
+ }
90
+ export declare function buildSuppressionEntry(input: IBuildSuppressionEntryInput): IDoctorSuppressionEntry;
91
+ //# sourceMappingURL=doctor-suppressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-suppressions.d.ts","sourceRoot":"","sources":["../src/doctor-suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGtE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,kDAAkD;IAClD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,OAAO,0BAA0B,CAAC;IAC3C,kBAAkB,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,+BAA+B,CAAC;IACxC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;IAClD,gBAAgB,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAC;IAC5D,mBAAmB,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAC5D,mBAAmB,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,uBAAuB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,aAAa,CAAC,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;IACtF,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;CACvD;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAClB,yBAAyB,CAe3B;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,yBAAyB,GAChC,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAU1D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ1D;AAyCD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,oBAAyB,GACjC,qBAAqB,CAgGvB;AAED,MAAM,WAAW,2BAA2B;IAC1C,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,2BAA2B,GAAG,uBAAuB,CAQjG"}