@shrkcrft/inspector 0.1.0-alpha.1

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 (708) 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 +57 -0
  70. package/dist/area-map.d.ts.map +1 -0
  71. package/dist/area-map.js +214 -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 +382 -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 +38 -0
  256. package/dist/git-helpers.d.ts.map +1 -0
  257. package/dist/git-helpers.js +173 -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 +422 -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 +224 -0
  295. package/dist/index.d.ts.map +1 -0
  296. package/dist/index.js +234 -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-merge.d.ts +71 -0
  391. package/dist/onboarding-drafts-merge.d.ts.map +1 -0
  392. package/dist/onboarding-drafts-merge.js +174 -0
  393. package/dist/onboarding-drafts.d.ts +42 -0
  394. package/dist/onboarding-drafts.d.ts.map +1 -0
  395. package/dist/onboarding-drafts.js +268 -0
  396. package/dist/onboarding-report.d.ts +8 -0
  397. package/dist/onboarding-report.d.ts.map +1 -0
  398. package/dist/onboarding-report.js +239 -0
  399. package/dist/onboarding.d.ts +134 -0
  400. package/dist/onboarding.d.ts.map +1 -0
  401. package/dist/onboarding.js +729 -0
  402. package/dist/ownership.d.ts +38 -0
  403. package/dist/ownership.d.ts.map +1 -0
  404. package/dist/ownership.js +102 -0
  405. package/dist/pack-author-ux.d.ts +58 -0
  406. package/dist/pack-author-ux.d.ts.map +1 -0
  407. package/dist/pack-author-ux.js +219 -0
  408. package/dist/pack-author.d.ts +94 -0
  409. package/dist/pack-author.d.ts.map +1 -0
  410. package/dist/pack-author.js +208 -0
  411. package/dist/pack-compatibility.d.ts +21 -0
  412. package/dist/pack-compatibility.d.ts.map +1 -0
  413. package/dist/pack-compatibility.js +114 -0
  414. package/dist/pack-contributions-inventory.d.ts +121 -0
  415. package/dist/pack-contributions-inventory.d.ts.map +1 -0
  416. package/dist/pack-contributions-inventory.js +732 -0
  417. package/dist/pack-docs.d.ts +11 -0
  418. package/dist/pack-docs.d.ts.map +1 -0
  419. package/dist/pack-docs.js +101 -0
  420. package/dist/pack-doctor.d.ts +50 -0
  421. package/dist/pack-doctor.d.ts.map +1 -0
  422. package/dist/pack-doctor.js +302 -0
  423. package/dist/pack-helper-registry.d.ts +29 -0
  424. package/dist/pack-helper-registry.d.ts.map +1 -0
  425. package/dist/pack-helper-registry.js +144 -0
  426. package/dist/pack-pending.d.ts +68 -0
  427. package/dist/pack-pending.d.ts.map +1 -0
  428. package/dist/pack-pending.js +189 -0
  429. package/dist/pack-quality-score.d.ts +44 -0
  430. package/dist/pack-quality-score.d.ts.map +1 -0
  431. package/dist/pack-quality-score.js +155 -0
  432. package/dist/pack-release-check.d.ts +24 -0
  433. package/dist/pack-release-check.d.ts.map +1 -0
  434. package/dist/pack-release-check.js +258 -0
  435. package/dist/pack-signature-status.d.ts +72 -0
  436. package/dist/pack-signature-status.d.ts.map +1 -0
  437. package/dist/pack-signature-status.js +222 -0
  438. package/dist/pack-symbol-compat.d.ts +73 -0
  439. package/dist/pack-symbol-compat.d.ts.map +1 -0
  440. package/dist/pack-symbol-compat.js +519 -0
  441. package/dist/pack-test-runner.d.ts +59 -0
  442. package/dist/pack-test-runner.d.ts.map +1 -0
  443. package/dist/pack-test-runner.js +211 -0
  444. package/dist/pipeline-command-dictionary.d.ts +2 -0
  445. package/dist/pipeline-command-dictionary.d.ts.map +1 -0
  446. package/dist/pipeline-command-dictionary.js +20 -0
  447. package/dist/pipeline-lint.d.ts +30 -0
  448. package/dist/pipeline-lint.d.ts.map +1 -0
  449. package/dist/pipeline-lint.js +134 -0
  450. package/dist/plan-dependency-graph.d.ts +25 -0
  451. package/dist/plan-dependency-graph.d.ts.map +1 -0
  452. package/dist/plan-dependency-graph.js +195 -0
  453. package/dist/plan-review.d.ts +64 -0
  454. package/dist/plan-review.d.ts.map +1 -0
  455. package/dist/plan-review.js +242 -0
  456. package/dist/plan-simulation.d.ts +108 -0
  457. package/dist/plan-simulation.d.ts.map +1 -0
  458. package/dist/plan-simulation.js +767 -0
  459. package/dist/playbook-registry.d.ts +25 -0
  460. package/dist/playbook-registry.d.ts.map +1 -0
  461. package/dist/playbook-registry.js +148 -0
  462. package/dist/playbook-script.d.ts +60 -0
  463. package/dist/playbook-script.d.ts.map +1 -0
  464. package/dist/playbook-script.js +161 -0
  465. package/dist/plugin-lifecycle-profile-registry.d.ts +52 -0
  466. package/dist/plugin-lifecycle-profile-registry.d.ts.map +1 -0
  467. package/dist/plugin-lifecycle-profile-registry.js +202 -0
  468. package/dist/plugin-lifecycle.d.ts +132 -0
  469. package/dist/plugin-lifecycle.d.ts.map +1 -0
  470. package/dist/plugin-lifecycle.js +477 -0
  471. package/dist/policy-engine.d.ts +101 -0
  472. package/dist/policy-engine.d.ts.map +1 -0
  473. package/dist/policy-engine.js +321 -0
  474. package/dist/policy-override-audit.d.ts +18 -0
  475. package/dist/policy-override-audit.d.ts.map +1 -0
  476. package/dist/policy-override-audit.js +54 -0
  477. package/dist/policy-overrides.d.ts +35 -0
  478. package/dist/policy-overrides.d.ts.map +1 -0
  479. package/dist/policy-overrides.js +84 -0
  480. package/dist/policy-test.d.ts +83 -0
  481. package/dist/policy-test.d.ts.map +1 -0
  482. package/dist/policy-test.js +342 -0
  483. package/dist/pr-summary.d.ts +34 -0
  484. package/dist/pr-summary.d.ts.map +1 -0
  485. package/dist/pr-summary.js +220 -0
  486. package/dist/product-coherence.d.ts +21 -0
  487. package/dist/product-coherence.d.ts.map +1 -0
  488. package/dist/product-coherence.js +158 -0
  489. package/dist/profile-registry.d.ts +42 -0
  490. package/dist/profile-registry.d.ts.map +1 -0
  491. package/dist/profile-registry.js +104 -0
  492. package/dist/project-coupling-audit.d.ts +64 -0
  493. package/dist/project-coupling-audit.d.ts.map +1 -0
  494. package/dist/project-coupling-audit.js +282 -0
  495. package/dist/project-overview.d.ts +14 -0
  496. package/dist/project-overview.d.ts.map +1 -0
  497. package/dist/project-overview.js +27 -0
  498. package/dist/propose-knowledge.d.ts +64 -0
  499. package/dist/propose-knowledge.d.ts.map +1 -0
  500. package/dist/propose-knowledge.js +367 -0
  501. package/dist/quality-baseline.d.ts +123 -0
  502. package/dist/quality-baseline.d.ts.map +1 -0
  503. package/dist/quality-baseline.js +433 -0
  504. package/dist/quality-html.d.ts +7 -0
  505. package/dist/quality-html.d.ts.map +1 -0
  506. package/dist/quality-html.js +64 -0
  507. package/dist/quality-report.d.ts +49 -0
  508. package/dist/quality-report.d.ts.map +1 -0
  509. package/dist/quality-report.js +296 -0
  510. package/dist/query-resolver.d.ts +38 -0
  511. package/dist/query-resolver.d.ts.map +1 -0
  512. package/dist/query-resolver.js +163 -0
  513. package/dist/ranker-explainability.d.ts +91 -0
  514. package/dist/ranker-explainability.d.ts.map +1 -0
  515. package/dist/ranker-explainability.js +550 -0
  516. package/dist/reference-lookup.d.ts +8 -0
  517. package/dist/reference-lookup.d.ts.map +1 -0
  518. package/dist/reference-lookup.js +18 -0
  519. package/dist/registration-hint-registry.d.ts +55 -0
  520. package/dist/registration-hint-registry.d.ts.map +1 -0
  521. package/dist/registration-hint-registry.js +327 -0
  522. package/dist/registry-lifecycle.d.ts +47 -0
  523. package/dist/registry-lifecycle.d.ts.map +1 -0
  524. package/dist/registry-lifecycle.js +214 -0
  525. package/dist/release-readiness.d.ts +64 -0
  526. package/dist/release-readiness.d.ts.map +1 -0
  527. package/dist/release-readiness.js +456 -0
  528. package/dist/release-smoke.d.ts +138 -0
  529. package/dist/release-smoke.d.ts.map +1 -0
  530. package/dist/release-smoke.js +459 -0
  531. package/dist/release-train.d.ts +33 -0
  532. package/dist/release-train.d.ts.map +1 -0
  533. package/dist/release-train.js +104 -0
  534. package/dist/repo-memory.d.ts +95 -0
  535. package/dist/repo-memory.d.ts.map +1 -0
  536. package/dist/repo-memory.js +614 -0
  537. package/dist/report-site.d.ts +92 -0
  538. package/dist/report-site.d.ts.map +1 -0
  539. package/dist/report-site.js +658 -0
  540. package/dist/reposet.d.ts +56 -0
  541. package/dist/reposet.d.ts.map +1 -0
  542. package/dist/reposet.js +160 -0
  543. package/dist/repository-intelligence.d.ts +145 -0
  544. package/dist/repository-intelligence.d.ts.map +1 -0
  545. package/dist/repository-intelligence.js +729 -0
  546. package/dist/repository-knowledge-model.d.ts +218 -0
  547. package/dist/repository-knowledge-model.d.ts.map +1 -0
  548. package/dist/repository-knowledge-model.js +939 -0
  549. package/dist/repository-map.d.ts +72 -0
  550. package/dist/repository-map.d.ts.map +1 -0
  551. package/dist/repository-map.js +332 -0
  552. package/dist/repository-stats.d.ts +66 -0
  553. package/dist/repository-stats.d.ts.map +1 -0
  554. package/dist/repository-stats.js +329 -0
  555. package/dist/review-comment-renderer.d.ts +59 -0
  556. package/dist/review-comment-renderer.d.ts.map +1 -0
  557. package/dist/review-comment-renderer.js +181 -0
  558. package/dist/review-comment-v2.d.ts +9 -0
  559. package/dist/review-comment-v2.d.ts.map +1 -0
  560. package/dist/review-comment-v2.js +178 -0
  561. package/dist/review-html.d.ts +13 -0
  562. package/dist/review-html.d.ts.map +1 -0
  563. package/dist/review-html.js +79 -0
  564. package/dist/review-packet-v2.d.ts +29 -0
  565. package/dist/review-packet-v2.d.ts.map +1 -0
  566. package/dist/review-packet-v2.js +81 -0
  567. package/dist/review-packet-v3.d.ts +22 -0
  568. package/dist/review-packet-v3.d.ts.map +1 -0
  569. package/dist/review-packet-v3.js +181 -0
  570. package/dist/review-packet.d.ts +49 -0
  571. package/dist/review-packet.d.ts.map +1 -0
  572. package/dist/review-packet.js +129 -0
  573. package/dist/risk-signals.d.ts +28 -0
  574. package/dist/risk-signals.d.ts.map +1 -0
  575. package/dist/risk-signals.js +68 -0
  576. package/dist/role-views.d.ts +50 -0
  577. package/dist/role-views.d.ts.map +1 -0
  578. package/dist/role-views.js +334 -0
  579. package/dist/rounds.d.ts +52 -0
  580. package/dist/rounds.d.ts.map +1 -0
  581. package/dist/rounds.js +172 -0
  582. package/dist/rule-drift.d.ts +42 -0
  583. package/dist/rule-drift.d.ts.map +1 -0
  584. package/dist/rule-drift.js +148 -0
  585. package/dist/rule-quality.d.ts +73 -0
  586. package/dist/rule-quality.d.ts.map +1 -0
  587. package/dist/rule-quality.js +356 -0
  588. package/dist/rule-scaffold.d.ts +71 -0
  589. package/dist/rule-scaffold.d.ts.map +1 -0
  590. package/dist/rule-scaffold.js +258 -0
  591. package/dist/safety-audit-deep.d.ts +38 -0
  592. package/dist/safety-audit-deep.d.ts.map +1 -0
  593. package/dist/safety-audit-deep.js +162 -0
  594. package/dist/safety-audit.d.ts +91 -0
  595. package/dist/safety-audit.d.ts.map +1 -0
  596. package/dist/safety-audit.js +138 -0
  597. package/dist/safety-html.d.ts +7 -0
  598. package/dist/safety-html.d.ts.map +1 -0
  599. package/dist/safety-html.js +70 -0
  600. package/dist/scaffold-coverage.d.ts +46 -0
  601. package/dist/scaffold-coverage.d.ts.map +1 -0
  602. package/dist/scaffold-coverage.js +273 -0
  603. package/dist/scaffold-patterns.d.ts +38 -0
  604. package/dist/scaffold-patterns.d.ts.map +1 -0
  605. package/dist/scaffold-patterns.js +282 -0
  606. package/dist/schema-inventory.d.ts +55 -0
  607. package/dist/schema-inventory.d.ts.map +1 -0
  608. package/dist/schema-inventory.js +301 -0
  609. package/dist/search-index.d.ts +75 -0
  610. package/dist/search-index.d.ts.map +1 -0
  611. package/dist/search-index.js +531 -0
  612. package/dist/search-tuning-explain.d.ts +68 -0
  613. package/dist/search-tuning-explain.d.ts.map +1 -0
  614. package/dist/search-tuning-explain.js +207 -0
  615. package/dist/search-tuning-registry.d.ts +54 -0
  616. package/dist/search-tuning-registry.d.ts.map +1 -0
  617. package/dist/search-tuning-registry.js +303 -0
  618. package/dist/self-audit.d.ts +59 -0
  619. package/dist/self-audit.d.ts.map +1 -0
  620. package/dist/self-audit.js +192 -0
  621. package/dist/self-config-doctor-v2.d.ts +57 -0
  622. package/dist/self-config-doctor-v2.d.ts.map +1 -0
  623. package/dist/self-config-doctor-v2.js +653 -0
  624. package/dist/self-config-doctor.d.ts +47 -0
  625. package/dist/self-config-doctor.d.ts.map +1 -0
  626. package/dist/self-config-doctor.js +432 -0
  627. package/dist/sharkcraft-inspector.d.ts +73 -0
  628. package/dist/sharkcraft-inspector.d.ts.map +1 -0
  629. package/dist/sharkcraft-inspector.js +745 -0
  630. package/dist/spec/spec-cross-validate.d.ts +17 -0
  631. package/dist/spec/spec-cross-validate.d.ts.map +1 -0
  632. package/dist/spec/spec-cross-validate.js +53 -0
  633. package/dist/spec/spec-discovery.d.ts +27 -0
  634. package/dist/spec/spec-discovery.d.ts.map +1 -0
  635. package/dist/spec/spec-discovery.js +78 -0
  636. package/dist/spec/spec-review.d.ts +36 -0
  637. package/dist/spec/spec-review.d.ts.map +1 -0
  638. package/dist/spec/spec-review.js +37 -0
  639. package/dist/stability-map.d.ts +62 -0
  640. package/dist/stability-map.d.ts.map +1 -0
  641. package/dist/stability-map.js +404 -0
  642. package/dist/start-here.d.ts +49 -0
  643. package/dist/start-here.d.ts.map +1 -0
  644. package/dist/start-here.js +259 -0
  645. package/dist/surface-profile-detect.d.ts +42 -0
  646. package/dist/surface-profile-detect.d.ts.map +1 -0
  647. package/dist/surface-profile-detect.js +76 -0
  648. package/dist/symbol-index.d.ts +108 -0
  649. package/dist/symbol-index.d.ts.map +1 -0
  650. package/dist/symbol-index.js +483 -0
  651. package/dist/task-decompose.d.ts +38 -0
  652. package/dist/task-decompose.d.ts.map +1 -0
  653. package/dist/task-decompose.js +154 -0
  654. package/dist/task-packet.d.ts +104 -0
  655. package/dist/task-packet.d.ts.map +1 -0
  656. package/dist/task-packet.js +156 -0
  657. package/dist/task-ranker.d.ts +51 -0
  658. package/dist/task-ranker.d.ts.map +1 -0
  659. package/dist/task-ranker.js +410 -0
  660. package/dist/task-risk.d.ts +84 -0
  661. package/dist/task-risk.d.ts.map +1 -0
  662. package/dist/task-risk.js +731 -0
  663. package/dist/task-routing-hint-registry.d.ts +36 -0
  664. package/dist/task-routing-hint-registry.d.ts.map +1 -0
  665. package/dist/task-routing-hint-registry.js +186 -0
  666. package/dist/template-authoring.d.ts +113 -0
  667. package/dist/template-authoring.d.ts.map +1 -0
  668. package/dist/template-authoring.js +521 -0
  669. package/dist/template-body-inference-v2.d.ts +19 -0
  670. package/dist/template-body-inference-v2.d.ts.map +1 -0
  671. package/dist/template-body-inference-v2.js +468 -0
  672. package/dist/template-body-inference.d.ts +59 -0
  673. package/dist/template-body-inference.d.ts.map +1 -0
  674. package/dist/template-body-inference.js +277 -0
  675. package/dist/template-drift.d.ts +39 -0
  676. package/dist/template-drift.d.ts.map +1 -0
  677. package/dist/template-drift.js +353 -0
  678. package/dist/template-lint.d.ts +31 -0
  679. package/dist/template-lint.d.ts.map +1 -0
  680. package/dist/template-lint.js +113 -0
  681. package/dist/test-definitions.d.ts +41 -0
  682. package/dist/test-definitions.d.ts.map +1 -0
  683. package/dist/test-definitions.js +6 -0
  684. package/dist/test-impact.d.ts +30 -0
  685. package/dist/test-impact.d.ts.map +1 -0
  686. package/dist/test-impact.js +173 -0
  687. package/dist/test-runner.d.ts +87 -0
  688. package/dist/test-runner.d.ts.map +1 -0
  689. package/dist/test-runner.js +560 -0
  690. package/dist/uncertainty-report.d.ts +46 -0
  691. package/dist/uncertainty-report.d.ts.map +1 -0
  692. package/dist/uncertainty-report.js +108 -0
  693. package/dist/uncertainty.d.ts +38 -0
  694. package/dist/uncertainty.d.ts.map +1 -0
  695. package/dist/uncertainty.js +115 -0
  696. package/dist/universal-search.d.ts +64 -0
  697. package/dist/universal-search.d.ts.map +1 -0
  698. package/dist/universal-search.js +347 -0
  699. package/dist/upgrade-advisor.d.ts +22 -0
  700. package/dist/upgrade-advisor.d.ts.map +1 -0
  701. package/dist/upgrade-advisor.js +109 -0
  702. package/dist/why-file.d.ts +75 -0
  703. package/dist/why-file.d.ts.map +1 -0
  704. package/dist/why-file.js +202 -0
  705. package/dist/workflow-simulation.d.ts +46 -0
  706. package/dist/workflow-simulation.d.ts.map +1 -0
  707. package/dist/workflow-simulation.js +154 -0
  708. package/package.json +65 -0
@@ -0,0 +1,83 @@
1
+ import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
2
+ import { PolicySeverity, type IPolicyCheck, type IPolicyCheckRegistration } from './policy-engine.js';
3
+ export declare const POLICY_TEST_SCHEMA = "sharkcraft.policy-test/v1";
4
+ export declare const POLICY_SNAPSHOT_SCHEMA = "sharkcraft.policy-snapshot/v1";
5
+ export interface IPolicyTestExpectation {
6
+ /** When provided, fail unless the test result.passed matches. */
7
+ passed?: boolean;
8
+ /** Substring that must appear in any emitted check.message. */
9
+ messageContains?: string;
10
+ /** Minimum severity that must appear. */
11
+ minSeverity?: PolicySeverity;
12
+ }
13
+ export interface IPolicyTestInput {
14
+ policyId?: string;
15
+ /** Optional pre-built input object — overrides the loader. */
16
+ policyInput?: {
17
+ projectRoot?: string;
18
+ planTargets?: readonly string[];
19
+ bundleAffectedFiles?: readonly string[];
20
+ };
21
+ fixtureDir?: string;
22
+ expected?: IPolicyTestExpectation;
23
+ }
24
+ export interface IPolicyTestResult {
25
+ policyId: string;
26
+ passed: boolean;
27
+ inputSource: string;
28
+ evidence: readonly string[];
29
+ checks: readonly IPolicyCheck[];
30
+ registration: IPolicyCheckRegistration | null;
31
+ expectation?: IPolicyTestExpectation;
32
+ expectationOutcome?: {
33
+ matched: boolean;
34
+ mismatches: readonly string[];
35
+ };
36
+ }
37
+ export interface IPolicyTestBatch {
38
+ schema: typeof POLICY_TEST_SCHEMA;
39
+ results: readonly IPolicyTestResult[];
40
+ summary: {
41
+ total: number;
42
+ passed: number;
43
+ failed: number;
44
+ };
45
+ }
46
+ export declare function runPolicyTest(inspection: ISharkcraftInspection, input: IPolicyTestInput): Promise<IPolicyTestResult>;
47
+ export interface IPolicySnapshot {
48
+ schema: typeof POLICY_SNAPSHOT_SCHEMA;
49
+ policyId: string;
50
+ inputHash: string;
51
+ capturedAt: string;
52
+ passed: boolean;
53
+ severityHighest: PolicySeverity | null;
54
+ /** First message of the first emitted check. */
55
+ message: string | null;
56
+ /** Concise evidence summary. */
57
+ evidence: readonly string[];
58
+ }
59
+ export interface IPolicySnapshotInput {
60
+ /** Where the snapshot file lives. */
61
+ snapshotFile: string;
62
+ /** When true, write a new snapshot regardless of current state. */
63
+ updateSnapshot?: boolean;
64
+ }
65
+ export interface IPolicySnapshotOutcome {
66
+ schema: typeof POLICY_SNAPSHOT_SCHEMA;
67
+ policyId: string;
68
+ inputSource: string;
69
+ snapshotFile: string;
70
+ /** Current run result (re-uses the policy-test machinery). */
71
+ result: IPolicyTestResult;
72
+ snapshot: IPolicySnapshot;
73
+ /** When false, the current run differs from the saved snapshot. */
74
+ matchesSnapshot: boolean;
75
+ /** When updateSnapshot was set and a new snapshot was written. */
76
+ updated: boolean;
77
+ diffs: readonly string[];
78
+ }
79
+ export declare function runPolicySnapshot(inspection: ISharkcraftInspection, testInput: IPolicyTestInput, snapshot: IPolicySnapshotInput): Promise<IPolicySnapshotOutcome>;
80
+ export declare function runPolicyTestsForAll(inspection: ISharkcraftInspection, options?: {
81
+ fixtureDir?: string;
82
+ }): Promise<IPolicyTestBatch>;
83
+ //# sourceMappingURL=policy-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-test.d.ts","sourceRoot":"","sources":["../src/policy-test.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAEL,cAAc,EAEd,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAC9D,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAChC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACzC,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,YAAY,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC1E;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA0ID,wBAAsB,aAAa,CACjC,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAqF5B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,gDAAgD;IAChD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gCAAgC;IAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,sBAAsB,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,mEAAmE;IACnE,eAAe,EAAE,OAAO,CAAC;IACzB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AA0CD,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,qBAAqB,EACjC,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CA2DjC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAuC3B"}
@@ -0,0 +1,342 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { createHash } from 'node:crypto';
10
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
11
+ import * as nodePath from 'node:path';
12
+ import { pathToFileURL } from 'node:url';
13
+ import { evaluatePolicy, PolicySeverity, } from "./policy-engine.js";
14
+ export const POLICY_TEST_SCHEMA = 'sharkcraft.policy-test/v1';
15
+ export const POLICY_SNAPSHOT_SCHEMA = 'sharkcraft.policy-snapshot/v1';
16
+ function readJsonOptional(path) {
17
+ if (!existsSync(path))
18
+ return null;
19
+ try {
20
+ return JSON.parse(readFileSync(path, 'utf8'));
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function readFixtureInput(fixtureDir) {
27
+ const inputFile = nodePath.join(fixtureDir, 'policy-input.json');
28
+ const expectedFile = nodePath.join(fixtureDir, 'expected.json');
29
+ const expected = readJsonOptional(expectedFile) ?? undefined;
30
+ const direct = readJsonOptional(inputFile);
31
+ if (direct) {
32
+ return {
33
+ source: nodePath.relative(fixtureDir, inputFile) || 'policy-input.json',
34
+ input: direct,
35
+ ...(expected ? { expected } : {}),
36
+ };
37
+ }
38
+ // Synthesize input from planTargets.json + bundleAffectedFiles.json.
39
+ const planTargets = readJsonOptional(nodePath.join(fixtureDir, 'planTargets.json'));
40
+ const bundleAffectedFiles = readJsonOptional(nodePath.join(fixtureDir, 'bundleAffectedFiles.json'));
41
+ const input = {
42
+ projectRoot: fixtureDir,
43
+ planTargets: planTargets ?? [],
44
+ bundleAffectedFiles: bundleAffectedFiles ?? [],
45
+ };
46
+ return {
47
+ source: 'planTargets+bundleAffectedFiles',
48
+ input,
49
+ ...(expected ? { expected } : {}),
50
+ };
51
+ }
52
+ async function loadLocalPolicyChecks(inspection, localFiles) {
53
+ const out = [];
54
+ const sharkcraftDir = inspection.sharkcraftDir;
55
+ const localCandidates = localFiles ?? [
56
+ sharkcraftDir ? nodePath.join(sharkcraftDir, 'policies.ts') : null,
57
+ sharkcraftDir ? nodePath.join(sharkcraftDir, 'policies.js') : null,
58
+ ].filter((x) => Boolean(x));
59
+ for (const file of localCandidates) {
60
+ if (!existsSync(file))
61
+ continue;
62
+ try {
63
+ const mod = (await import(__rewriteRelativeImportExtension(pathToFileURL(file).href)));
64
+ const decls = mod.default ?? mod.policyChecks ?? [];
65
+ for (const d of decls)
66
+ out.push({ check: d, sourceFile: file, isLocal: true });
67
+ }
68
+ catch {
69
+ /* ignore */
70
+ }
71
+ }
72
+ // Pack-contributed policies — read directly so we can test individual ids.
73
+ for (const pack of inspection.packs.validPacks ?? []) {
74
+ const contributions = (pack.manifest?.contributions ?? {});
75
+ for (const rel of contributions.policyCheckFiles ?? []) {
76
+ const file = nodePath.resolve(pack.packageRoot, rel);
77
+ if (!existsSync(file))
78
+ continue;
79
+ try {
80
+ const mod = (await import(__rewriteRelativeImportExtension(pathToFileURL(file).href)));
81
+ const decls = mod.default ?? mod.policyChecks ?? [];
82
+ for (const d of decls)
83
+ out.push({ check: d, sourceFile: file, isLocal: false });
84
+ }
85
+ catch {
86
+ /* ignore */
87
+ }
88
+ }
89
+ }
90
+ return { decls: out };
91
+ }
92
+ function severityRank(s) {
93
+ switch (s) {
94
+ case PolicySeverity.Critical:
95
+ return 4;
96
+ case PolicySeverity.Error:
97
+ return 3;
98
+ case PolicySeverity.Warning:
99
+ return 2;
100
+ case PolicySeverity.Info:
101
+ return 1;
102
+ }
103
+ return 0;
104
+ }
105
+ function evaluateExpectation(result, expected) {
106
+ if (!expected)
107
+ return undefined;
108
+ const mismatches = [];
109
+ if (typeof expected.passed === 'boolean' && expected.passed !== result.passed) {
110
+ mismatches.push(`expected passed=${expected.passed}, got passed=${result.passed}`);
111
+ }
112
+ if (expected.messageContains) {
113
+ const found = result.checks.some((c) => c.message.includes(expected.messageContains));
114
+ if (!found)
115
+ mismatches.push(`no check message contained "${expected.messageContains}"`);
116
+ }
117
+ if (expected.minSeverity) {
118
+ const max = result.checks.reduce((acc, c) => Math.max(acc, severityRank(c.severity)), 0);
119
+ if (max < severityRank(expected.minSeverity)) {
120
+ mismatches.push(`min severity ${expected.minSeverity} not reached`);
121
+ }
122
+ }
123
+ return { matched: mismatches.length === 0, mismatches };
124
+ }
125
+ export async function runPolicyTest(inspection, input) {
126
+ let source = 'live';
127
+ let evidence = [];
128
+ let expected = input.expected;
129
+ // Resolve fixture if requested.
130
+ let policyInput = input.policyInput;
131
+ if (input.fixtureDir && existsSync(input.fixtureDir)) {
132
+ const fx = readFixtureInput(input.fixtureDir);
133
+ policyInput = policyInput ?? fx.input;
134
+ source = `fixture:${nodePath.basename(input.fixtureDir)}`;
135
+ if (!expected && fx.expected)
136
+ expected = fx.expected;
137
+ evidence.push(`fixture: ${fx.source}`);
138
+ }
139
+ // If no specific id is provided, we run the live engine and surface
140
+ // everything.
141
+ const id = input.policyId;
142
+ const policyEvalInput = {};
143
+ if (id)
144
+ policyEvalInput.onlyId = id;
145
+ const report = await evaluatePolicy(inspection, policyEvalInput);
146
+ // Filter checks/registrations to the requested id when provided.
147
+ const checks = id
148
+ ? report.checks.filter((c) => c.id === id || c.id.startsWith(id + ':'))
149
+ : report.checks;
150
+ const registration = id
151
+ ? report.registrations.find((r) => r.id === id || r.id === `local:${id}` || r.id === `pack:${id}`) ?? null
152
+ : null;
153
+ // Optionally override with a synthetic evaluation when an explicit policyInput was passed.
154
+ let extraChecks = [];
155
+ if (policyInput && id) {
156
+ const { decls } = await loadLocalPolicyChecks(inspection);
157
+ const match = decls.find((d) => d.check.id === id);
158
+ if (match) {
159
+ try {
160
+ const evalResult = match.check.evaluate({
161
+ projectRoot: policyInput.projectRoot ?? inspection.projectRoot,
162
+ planTargets: policyInput.planTargets ?? [],
163
+ bundleAffectedFiles: policyInput.bundleAffectedFiles ?? [],
164
+ });
165
+ if (evalResult !== true) {
166
+ const detail = typeof evalResult === 'object'
167
+ ? evalResult
168
+ : { message: 'Policy check failed (synthetic fixture)' };
169
+ extraChecks.push({
170
+ id: match.check.id,
171
+ title: match.check.title,
172
+ severity: match.check.severity ?? PolicySeverity.Warning,
173
+ checkType: match.check.checkType ?? 'path',
174
+ message: detail.message,
175
+ ...(detail.suggestedFix ? { suggestedFix: detail.suggestedFix } : {}),
176
+ ...(detail.context ? { context: detail.context } : {}),
177
+ });
178
+ }
179
+ evidence.push(`evaluated ${match.check.id} against fixture input`);
180
+ }
181
+ catch (e) {
182
+ extraChecks.push({
183
+ id: `${match.check.id}:error`,
184
+ title: match.check.title,
185
+ severity: PolicySeverity.Warning,
186
+ checkType: match.check.checkType ?? 'path',
187
+ message: `Policy check threw: ${e.message}`,
188
+ });
189
+ }
190
+ }
191
+ }
192
+ const allChecks = [...checks, ...extraChecks];
193
+ const passed = allChecks.length === 0;
194
+ const result = {
195
+ policyId: id ?? '<all>',
196
+ passed,
197
+ inputSource: source,
198
+ evidence,
199
+ checks: allChecks,
200
+ registration,
201
+ };
202
+ const outcome = evaluateExpectation(result, expected);
203
+ return {
204
+ ...result,
205
+ ...(expected ? { expectation: expected } : {}),
206
+ ...(outcome ? { expectationOutcome: outcome } : {}),
207
+ };
208
+ }
209
+ function hashInput(input) {
210
+ const canon = JSON.stringify({
211
+ projectRoot: input.projectRoot ?? '',
212
+ planTargets: [...(input.planTargets ?? [])].sort(),
213
+ bundleAffectedFiles: [...(input.bundleAffectedFiles ?? [])].sort(),
214
+ });
215
+ return createHash('sha256').update(canon).digest('hex').slice(0, 16);
216
+ }
217
+ function summarizeChecks(checks) {
218
+ if (checks.length === 0)
219
+ return { severityHighest: null, message: null, evidence: [] };
220
+ let max = PolicySeverity.Info;
221
+ for (const c of checks) {
222
+ if (severityRank(c.severity) > severityRank(max))
223
+ max = c.severity;
224
+ }
225
+ return {
226
+ severityHighest: max,
227
+ message: checks[0].message,
228
+ evidence: checks.slice(0, 5).map((c) => `[${c.severity}] ${c.id}`),
229
+ };
230
+ }
231
+ function snapshotsEqual(a, b) {
232
+ const diffs = [];
233
+ if (a.passed !== b.passed)
234
+ diffs.push(`passed: ${a.passed} → ${b.passed}`);
235
+ if (a.severityHighest !== b.severityHighest)
236
+ diffs.push(`severityHighest: ${a.severityHighest ?? 'null'} → ${b.severityHighest ?? 'null'}`);
237
+ if ((a.message ?? '') !== (b.message ?? ''))
238
+ diffs.push(`message: "${a.message ?? ''}" → "${b.message ?? ''}"`);
239
+ if (JSON.stringify(a.evidence) !== JSON.stringify(b.evidence))
240
+ diffs.push('evidence: changed');
241
+ if (a.inputHash !== b.inputHash)
242
+ diffs.push(`inputHash: ${a.inputHash} → ${b.inputHash}`);
243
+ return diffs;
244
+ }
245
+ export async function runPolicySnapshot(inspection, testInput, snapshot) {
246
+ const result = await runPolicyTest(inspection, testInput);
247
+ const policyInput = testInput.policyInput ?? {
248
+ projectRoot: inspection.projectRoot,
249
+ planTargets: [],
250
+ bundleAffectedFiles: [],
251
+ };
252
+ const summary = summarizeChecks(result.checks);
253
+ const next = {
254
+ schema: POLICY_SNAPSHOT_SCHEMA,
255
+ policyId: result.policyId,
256
+ inputHash: hashInput(policyInput),
257
+ capturedAt: new Date().toISOString(),
258
+ passed: result.passed,
259
+ severityHighest: summary.severityHighest,
260
+ message: summary.message,
261
+ evidence: summary.evidence,
262
+ };
263
+ let saved = null;
264
+ if (existsSync(snapshot.snapshotFile)) {
265
+ try {
266
+ saved = JSON.parse(readFileSync(snapshot.snapshotFile, 'utf8'));
267
+ }
268
+ catch {
269
+ saved = null;
270
+ }
271
+ }
272
+ let matchesSnapshot = true;
273
+ let diffs = [];
274
+ if (saved) {
275
+ diffs = snapshotsEqual(saved, next);
276
+ matchesSnapshot = diffs.length === 0;
277
+ }
278
+ else {
279
+ matchesSnapshot = false;
280
+ diffs = ['no snapshot found'];
281
+ }
282
+ let updated = false;
283
+ if (snapshot.updateSnapshot || !saved) {
284
+ // Snapshot writes always live under fixture dir / caller-specified location;
285
+ // never under project source. Create parent dirs but only mkdir, never resolve outside.
286
+ mkdirSync(nodePath.dirname(snapshot.snapshotFile), { recursive: true });
287
+ writeFileSync(snapshot.snapshotFile, JSON.stringify(next, null, 2) + '\n', 'utf8');
288
+ updated = true;
289
+ if (snapshot.updateSnapshot)
290
+ matchesSnapshot = true;
291
+ }
292
+ return {
293
+ schema: POLICY_SNAPSHOT_SCHEMA,
294
+ policyId: result.policyId,
295
+ inputSource: result.inputSource,
296
+ snapshotFile: snapshot.snapshotFile,
297
+ result,
298
+ snapshot: next,
299
+ matchesSnapshot,
300
+ updated,
301
+ diffs,
302
+ };
303
+ }
304
+ export async function runPolicyTestsForAll(inspection, options = {}) {
305
+ const dir = options.fixtureDir;
306
+ const results = [];
307
+ if (!dir) {
308
+ // Run every registered policy with no fixture.
309
+ const report = await evaluatePolicy(inspection);
310
+ for (const reg of report.registrations) {
311
+ const checks = report.checks.filter((c) => c.id === reg.id || c.id.startsWith(reg.id + ':'));
312
+ results.push({
313
+ policyId: reg.id,
314
+ passed: checks.length === 0,
315
+ inputSource: 'live',
316
+ evidence: [],
317
+ checks,
318
+ registration: reg,
319
+ });
320
+ }
321
+ }
322
+ else {
323
+ // Iterate over <dir>/<policyId>/ subfolders.
324
+ const subdirs = existsSync(dir)
325
+ ? readdirSync(dir, { withFileTypes: true }).filter((e) => e.isDirectory())
326
+ : [];
327
+ for (const sub of subdirs) {
328
+ const fixturePath = nodePath.join(dir, sub.name);
329
+ results.push(await runPolicyTest(inspection, { policyId: sub.name, fixtureDir: fixturePath }));
330
+ }
331
+ }
332
+ const passed = results.filter((r) => r.passed).length;
333
+ return {
334
+ schema: POLICY_TEST_SCHEMA,
335
+ results,
336
+ summary: {
337
+ total: results.length,
338
+ passed,
339
+ failed: results.length - passed,
340
+ },
341
+ };
342
+ }
@@ -0,0 +1,34 @@
1
+ import { type IUncertaintyReport } from './uncertainty-report.js';
2
+ import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
3
+ export declare const PR_SUMMARY_SCHEMA = "sharkcraft.pr-summary/v1";
4
+ export interface IPrSummarySection {
5
+ title: string;
6
+ body: string;
7
+ }
8
+ export interface IPrSummaryReport {
9
+ schema: typeof PR_SUMMARY_SCHEMA;
10
+ generatedAt: string;
11
+ sections: readonly IPrSummarySection[];
12
+ /** Final rendered Markdown body. */
13
+ markdown: string;
14
+ /** Uncertainty report (confidence + signals + safe fallback). */
15
+ uncertainty?: IUncertaintyReport;
16
+ }
17
+ export interface IPrSummaryOptions {
18
+ /** Diff input — same shape as IChangesSummaryOptions. */
19
+ since?: string;
20
+ staged?: boolean;
21
+ files?: readonly string[];
22
+ /** Cap items per list. Default 12. */
23
+ maxItems?: number;
24
+ /** Include raw links to reports (kept off by default). */
25
+ includeRawLinks?: boolean;
26
+ /** Reports directory. Default `.sharkcraft/reports`. */
27
+ reportsDir?: string;
28
+ /** Build the summary from a dev session's applied-plan files. */
29
+ fromSession?: string;
30
+ /** Build the summary from a bundle's plan files. */
31
+ fromBundle?: string;
32
+ }
33
+ export declare function buildPrSummary(inspection: ISharkcraftInspection, options?: IPrSummaryOptions): Promise<IPrSummaryReport>;
34
+ //# sourceMappingURL=pr-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-summary.d.ts","sourceRoot":"","sources":["../src/pr-summary.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,iBAAiB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwBD,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA2K3B"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * PR summary / description generator.
3
+ *
4
+ * Builds a single PR-description blob from the changes summary + review
5
+ * packet + CI report (if present) + release-readiness + safety audit.
6
+ *
7
+ * Read-only; deterministic; no AI. Schema: sharkcraft.pr-summary/v1.
8
+ */
9
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
10
+ import * as nodePath from 'node:path';
11
+ import { buildChangesSummary } from "./changes-summary.js";
12
+ import { buildUncertaintyReport } from "./uncertainty-report.js";
13
+ import { readDevSessionState } from "./dev-session.js";
14
+ export const PR_SUMMARY_SCHEMA = 'sharkcraft.pr-summary/v1';
15
+ function loadJson(file) {
16
+ if (!existsSync(file))
17
+ return null;
18
+ try {
19
+ return JSON.parse(readFileSync(file, 'utf8'));
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function readMaybe(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 cap(arr, limit) {
36
+ return arr.slice(0, limit);
37
+ }
38
+ export async function buildPrSummary(inspection, options = {}) {
39
+ const maxItems = options.maxItems ?? 12;
40
+ const cwd = inspection.projectRoot;
41
+ const reportsDir = nodePath.isAbsolute(options.reportsDir ?? '.sharkcraft/reports')
42
+ ? (options.reportsDir ?? '.sharkcraft/reports')
43
+ : nodePath.join(cwd, options.reportsDir ?? '.sharkcraft/reports');
44
+ const changesOpts = {};
45
+ if (options.since)
46
+ changesOpts.since = options.since;
47
+ if (options.staged)
48
+ changesOpts.staged = true;
49
+ if (options.files && options.files.length > 0)
50
+ changesOpts.files = options.files;
51
+ // Derive `files` from a session or bundle if requested.
52
+ if (options.fromSession && !changesOpts.files) {
53
+ try {
54
+ const state = readDevSessionState(cwd, options.fromSession);
55
+ if (state) {
56
+ const sessionFiles = state.appliedPlans.flatMap((p) => p.changedFiles ?? []);
57
+ if (sessionFiles.length > 0)
58
+ changesOpts.files = Array.from(new Set(sessionFiles));
59
+ }
60
+ }
61
+ catch {
62
+ // ignore — empty files leaves the standard `working-tree` mode.
63
+ }
64
+ }
65
+ if (options.fromBundle && !changesOpts.files) {
66
+ // Bundle resolution: read the bundle's plan-list JSON if present under
67
+ // `.sharkcraft/bundles/<id>/manifest.json`.
68
+ const bundleManifest = nodePath.join(cwd, '.sharkcraft', 'bundles', options.fromBundle, 'manifest.json');
69
+ if (existsSync(bundleManifest)) {
70
+ try {
71
+ const json = JSON.parse(readFileSync(bundleManifest, 'utf8'));
72
+ const bundleFiles = (json.plans ?? []).flatMap((p) => p.changedFiles ?? []);
73
+ if (bundleFiles.length > 0)
74
+ changesOpts.files = Array.from(new Set(bundleFiles));
75
+ }
76
+ catch {
77
+ // ignore
78
+ }
79
+ }
80
+ }
81
+ const changes = await buildChangesSummary(inspection, changesOpts);
82
+ const sections = [];
83
+ // Summary
84
+ sections.push({
85
+ title: 'Summary',
86
+ body: changes.likelyPrSummary,
87
+ });
88
+ // Why
89
+ sections.push({
90
+ title: 'Why',
91
+ body: 'Edit this section to describe the motivation. The PR generator surfaces what changed; the human writes why.',
92
+ });
93
+ // What changed
94
+ const whatChanged = [];
95
+ for (const [area, files] of Object.entries(changes.filesByArea)) {
96
+ whatChanged.push(`- **${area}** (${files.length}):`);
97
+ for (const f of cap(files, maxItems))
98
+ whatChanged.push(` - \`${f}\``);
99
+ if (files.length > maxItems)
100
+ whatChanged.push(` - … ${files.length - maxItems} more`);
101
+ }
102
+ sections.push({
103
+ title: 'What changed',
104
+ body: whatChanged.join('\n'),
105
+ });
106
+ // Safety
107
+ const safetyBody = [];
108
+ if (changes.touchedMcpTools.length > 0) {
109
+ safetyBody.push(`- MCP tool files touched (${changes.touchedMcpTools.length}). Read-only invariant must be re-verified.`);
110
+ for (const m of cap(changes.touchedMcpTools, maxItems))
111
+ safetyBody.push(` - \`${m}\``);
112
+ }
113
+ if (changes.safetyRelevantFiles.length > 0) {
114
+ safetyBody.push(`- Safety-relevant files: ${changes.safetyRelevantFiles.length}`);
115
+ for (const m of cap(changes.safetyRelevantFiles, maxItems))
116
+ safetyBody.push(` - \`${m}\``);
117
+ }
118
+ if (safetyBody.length === 0)
119
+ safetyBody.push('No safety-relevant files touched.');
120
+ sections.push({ title: 'Safety', body: safetyBody.join('\n') });
121
+ // Validation
122
+ sections.push({
123
+ title: 'Validation',
124
+ body: changes.suggestedValidationCommands.map((c) => `- \`${c}\``).join('\n'),
125
+ });
126
+ // Risk / review notes
127
+ const risk = [`Risk: **${changes.risk}**`];
128
+ for (const r of changes.riskReasons)
129
+ risk.push(`- ${r}`);
130
+ sections.push({ title: 'Risk / review notes', body: risk.join('\n') });
131
+ // Breaking changes
132
+ sections.push({
133
+ title: 'Breaking changes',
134
+ body: 'None known. Edit if this PR removes/renames public exports or changes write-path defaults.',
135
+ });
136
+ // Migration notes
137
+ sections.push({
138
+ title: 'Migration notes',
139
+ body: 'None. Edit if downstream consumers need an upgrade path.',
140
+ });
141
+ // Known limitations
142
+ sections.push({
143
+ title: 'Known limitations',
144
+ body: 'None. Edit if any TODO / partial implementation remains.',
145
+ });
146
+ // Follow-ups
147
+ sections.push({
148
+ title: 'Follow-ups',
149
+ body: 'Edit to list deferred items.',
150
+ });
151
+ // Commands run
152
+ sections.push({
153
+ title: 'Commands run',
154
+ body: changes.suggestedValidationCommands.map((c) => `- \`${c}\``).join('\n'),
155
+ });
156
+ // Reports / artifacts
157
+ const reports = collectReports(reportsDir);
158
+ const reportLines = [];
159
+ if (reports.length === 0)
160
+ reportLines.push('_(no reports under `.sharkcraft/reports/`)_');
161
+ for (const r of cap(reports, maxItems))
162
+ reportLines.push(`- \`${r}\``);
163
+ sections.push({ title: 'Reports / artifacts', body: reportLines.join('\n') });
164
+ const markdown = sections
165
+ .map((s) => `## ${s.title}\n\n${s.body}\n`)
166
+ .join('\n');
167
+ // Uncertainty.
168
+ let confidence = 'high';
169
+ const reasons = [];
170
+ const missing = [];
171
+ if (!changesOpts.files && !options.since && !options.staged) {
172
+ confidence = 'medium';
173
+ reasons.push('Diff scope was inferred from working tree — explicit --since or --files is more reliable.');
174
+ missing.push({
175
+ id: 'no-explicit-scope',
176
+ message: 'No --since / --from-session / --from-bundle scope provided.',
177
+ });
178
+ }
179
+ if ((options.fromSession || options.fromBundle) && !changesOpts.files) {
180
+ confidence = 'low';
181
+ reasons.push('Session/bundle scope was requested but no files were resolved.');
182
+ missing.push({
183
+ id: 'session-or-bundle-empty',
184
+ message: 'Session/bundle had no applied-plan files.',
185
+ });
186
+ }
187
+ const uncertainty = buildUncertaintyReport({
188
+ confidence,
189
+ reasons,
190
+ missingSignals: missing,
191
+ suggestedCommands: [
192
+ 'shrk pr summary --since main',
193
+ 'shrk pr summary --from-session <id>',
194
+ ],
195
+ safeFallbackCommand: 'shrk impact --since main',
196
+ });
197
+ return {
198
+ schema: PR_SUMMARY_SCHEMA,
199
+ generatedAt: new Date().toISOString(),
200
+ sections,
201
+ markdown,
202
+ uncertainty,
203
+ };
204
+ }
205
+ function collectReports(dir) {
206
+ if (!existsSync(dir))
207
+ return [];
208
+ const out = [];
209
+ for (const name of readdirSync(dir)) {
210
+ const full = nodePath.join(dir, name);
211
+ try {
212
+ if (statSync(full).isFile())
213
+ out.push(nodePath.relative(process.cwd(), full));
214
+ }
215
+ catch {
216
+ // ignore
217
+ }
218
+ }
219
+ return out.sort();
220
+ }