@neurcode-ai/cli 0.9.64 → 0.9.66

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 (323) hide show
  1. package/LICENSE +201 -0
  2. package/dist/commands/bootstrap-policy.d.ts +29 -0
  3. package/dist/commands/bootstrap-policy.d.ts.map +1 -0
  4. package/dist/commands/bootstrap-policy.js +334 -0
  5. package/dist/commands/bootstrap-policy.js.map +1 -0
  6. package/dist/commands/brain.d.ts.map +1 -1
  7. package/dist/commands/brain.js +273 -0
  8. package/dist/commands/brain.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +82 -0
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/pilot-report.d.ts +9 -0
  13. package/dist/commands/pilot-report.d.ts.map +1 -0
  14. package/dist/commands/pilot-report.js +176 -0
  15. package/dist/commands/pilot-report.js.map +1 -0
  16. package/dist/commands/quickstart.d.ts +21 -0
  17. package/dist/commands/quickstart.d.ts.map +1 -0
  18. package/dist/commands/quickstart.js +178 -0
  19. package/dist/commands/quickstart.js.map +1 -0
  20. package/dist/commands/remediate-export.d.ts +31 -0
  21. package/dist/commands/remediate-export.d.ts.map +1 -0
  22. package/dist/commands/remediate-export.js +283 -0
  23. package/dist/commands/remediate-export.js.map +1 -0
  24. package/dist/commands/remediate-governance.d.ts +54 -0
  25. package/dist/commands/remediate-governance.d.ts.map +1 -0
  26. package/dist/commands/remediate-governance.js +375 -0
  27. package/dist/commands/remediate-governance.js.map +1 -0
  28. package/dist/commands/remediate.d.ts.map +1 -1
  29. package/dist/commands/remediate.js.map +1 -1
  30. package/dist/commands/replay.d.ts.map +1 -1
  31. package/dist/commands/replay.js +30 -0
  32. package/dist/commands/replay.js.map +1 -1
  33. package/dist/commands/verify.d.ts.map +1 -1
  34. package/dist/commands/verify.js +409 -30
  35. package/dist/commands/verify.js.map +1 -1
  36. package/dist/daemon/server.d.ts.map +1 -1
  37. package/dist/daemon/server.js +1078 -0
  38. package/dist/daemon/server.js.map +1 -1
  39. package/dist/explainability/DeterminismClassifier.d.ts +34 -0
  40. package/dist/explainability/DeterminismClassifier.d.ts.map +1 -0
  41. package/dist/explainability/DeterminismClassifier.js +104 -0
  42. package/dist/explainability/DeterminismClassifier.js.map +1 -0
  43. package/dist/explainability/ViolationFormatter.d.ts +32 -0
  44. package/dist/explainability/ViolationFormatter.d.ts.map +1 -0
  45. package/dist/explainability/ViolationFormatter.js +252 -0
  46. package/dist/explainability/ViolationFormatter.js.map +1 -0
  47. package/dist/explainability/index.d.ts +15 -0
  48. package/dist/explainability/index.d.ts.map +1 -0
  49. package/dist/explainability/index.js +94 -0
  50. package/dist/explainability/index.js.map +1 -0
  51. package/dist/explainability/types.d.ts +37 -0
  52. package/dist/explainability/types.d.ts.map +1 -0
  53. package/dist/explainability/types.js +3 -0
  54. package/dist/explainability/types.js.map +1 -0
  55. package/dist/governance/canonical-invariants.d.ts +88 -0
  56. package/dist/governance/canonical-invariants.d.ts.map +1 -0
  57. package/dist/governance/canonical-invariants.js +197 -0
  58. package/dist/governance/canonical-invariants.js.map +1 -0
  59. package/dist/governance/canonical-ordering.d.ts +76 -0
  60. package/dist/governance/canonical-ordering.d.ts.map +1 -0
  61. package/dist/governance/canonical-ordering.js +189 -0
  62. package/dist/governance/canonical-ordering.js.map +1 -0
  63. package/dist/governance/canonical-pipeline.d.ts +45 -0
  64. package/dist/governance/canonical-pipeline.d.ts.map +1 -0
  65. package/dist/governance/canonical-pipeline.js +616 -0
  66. package/dist/governance/canonical-pipeline.js.map +1 -0
  67. package/dist/governance/diff-line-provenance.d.ts +59 -0
  68. package/dist/governance/diff-line-provenance.d.ts.map +1 -0
  69. package/dist/governance/diff-line-provenance.js +118 -0
  70. package/dist/governance/diff-line-provenance.js.map +1 -0
  71. package/dist/governance/pilot-readiness.d.ts +34 -0
  72. package/dist/governance/pilot-readiness.d.ts.map +1 -0
  73. package/dist/governance/pilot-readiness.js +226 -0
  74. package/dist/governance/pilot-readiness.js.map +1 -0
  75. package/dist/governance/policy-parity-validator.d.ts +62 -0
  76. package/dist/governance/policy-parity-validator.d.ts.map +1 -0
  77. package/dist/governance/policy-parity-validator.js +137 -0
  78. package/dist/governance/policy-parity-validator.js.map +1 -0
  79. package/dist/governance/remediation-boundary.d.ts +55 -0
  80. package/dist/governance/remediation-boundary.d.ts.map +1 -0
  81. package/dist/governance/remediation-boundary.js +120 -0
  82. package/dist/governance/remediation-boundary.js.map +1 -0
  83. package/dist/governance/structural-cache.d.ts +103 -0
  84. package/dist/governance/structural-cache.d.ts.map +1 -0
  85. package/dist/governance/structural-cache.js +240 -0
  86. package/dist/governance/structural-cache.js.map +1 -0
  87. package/dist/governance/structural-on-diff.d.ts +33 -0
  88. package/dist/governance/structural-on-diff.d.ts.map +1 -0
  89. package/dist/governance/structural-on-diff.js +67 -0
  90. package/dist/governance/structural-on-diff.js.map +1 -0
  91. package/dist/governance/structural-policy-merge.d.ts +22 -0
  92. package/dist/governance/structural-policy-merge.d.ts.map +1 -0
  93. package/dist/governance/structural-policy-merge.js +32 -0
  94. package/dist/governance/structural-policy-merge.js.map +1 -0
  95. package/dist/governance/verify-runtime-guard.d.ts +99 -0
  96. package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
  97. package/dist/governance/verify-runtime-guard.js +129 -0
  98. package/dist/governance/verify-runtime-guard.js.map +1 -0
  99. package/dist/index.js +107 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/integrations/review-compression/index.d.ts +50 -0
  102. package/dist/integrations/review-compression/index.d.ts.map +1 -0
  103. package/dist/integrations/review-compression/index.js +158 -0
  104. package/dist/integrations/review-compression/index.js.map +1 -0
  105. package/dist/intent-engine/domain-taxonomy.d.ts +42 -0
  106. package/dist/intent-engine/domain-taxonomy.d.ts.map +1 -0
  107. package/dist/intent-engine/domain-taxonomy.js +534 -0
  108. package/dist/intent-engine/domain-taxonomy.js.map +1 -0
  109. package/dist/intent-engine/index.d.ts +1 -0
  110. package/dist/intent-engine/index.d.ts.map +1 -1
  111. package/dist/intent-engine/index.js +6 -1
  112. package/dist/intent-engine/index.js.map +1 -1
  113. package/dist/intent-engine/parser.d.ts.map +1 -1
  114. package/dist/intent-engine/parser.js +47 -0
  115. package/dist/intent-engine/parser.js.map +1 -1
  116. package/dist/intent-engine/repo-classifier.d.ts +64 -0
  117. package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
  118. package/dist/intent-engine/repo-classifier.js +178 -0
  119. package/dist/intent-engine/repo-classifier.js.map +1 -0
  120. package/dist/intent-engine/semantic-expander.d.ts +104 -0
  121. package/dist/intent-engine/semantic-expander.d.ts.map +1 -0
  122. package/dist/intent-engine/semantic-expander.js +480 -0
  123. package/dist/intent-engine/semantic-expander.js.map +1 -0
  124. package/dist/patch-engine/patterns.d.ts.map +1 -1
  125. package/dist/patch-engine/patterns.js +8 -4
  126. package/dist/patch-engine/patterns.js.map +1 -1
  127. package/dist/semantic/index.d.ts +14 -0
  128. package/dist/semantic/index.d.ts.map +1 -0
  129. package/dist/semantic/index.js +30 -0
  130. package/dist/semantic/index.js.map +1 -0
  131. package/dist/semantic/tfidf-engine.d.ts +81 -0
  132. package/dist/semantic/tfidf-engine.d.ts.map +1 -0
  133. package/dist/semantic/tfidf-engine.js +278 -0
  134. package/dist/semantic/tfidf-engine.js.map +1 -0
  135. package/dist/semantic/vector-store.d.ts +108 -0
  136. package/dist/semantic/vector-store.d.ts.map +1 -0
  137. package/dist/semantic/vector-store.js +321 -0
  138. package/dist/semantic/vector-store.js.map +1 -0
  139. package/dist/structural-rules/context-severity.d.ts +46 -0
  140. package/dist/structural-rules/context-severity.d.ts.map +1 -0
  141. package/dist/structural-rules/context-severity.js +115 -0
  142. package/dist/structural-rules/context-severity.js.map +1 -0
  143. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts +11 -0
  144. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts.map +1 -0
  145. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js +212 -0
  146. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js.map +1 -0
  147. package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts +11 -0
  148. package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts.map +1 -0
  149. package/dist/structural-rules/distributed/DS002-missing-correlation-id.js +213 -0
  150. package/dist/structural-rules/distributed/DS002-missing-correlation-id.js.map +1 -0
  151. package/dist/structural-rules/distributed/index.d.ts +3 -0
  152. package/dist/structural-rules/distributed/index.d.ts.map +1 -0
  153. package/dist/structural-rules/distributed/index.js +8 -0
  154. package/dist/structural-rules/distributed/index.js.map +1 -0
  155. package/dist/structural-rules/engine.d.ts +25 -0
  156. package/dist/structural-rules/engine.d.ts.map +1 -0
  157. package/dist/structural-rules/engine.js +90 -0
  158. package/dist/structural-rules/engine.js.map +1 -0
  159. package/dist/structural-rules/index.d.ts +45 -0
  160. package/dist/structural-rules/index.d.ts.map +1 -0
  161. package/dist/structural-rules/index.js +158 -0
  162. package/dist/structural-rules/index.js.map +1 -0
  163. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts +11 -0
  164. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts.map +1 -0
  165. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js +66 -0
  166. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js.map +1 -0
  167. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts +11 -0
  168. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts.map +1 -0
  169. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js +135 -0
  170. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js.map +1 -0
  171. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +32 -0
  172. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -0
  173. package/dist/structural-rules/python/PY003-broad-except-clause.js +277 -0
  174. package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -0
  175. package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts +11 -0
  176. package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts.map +1 -0
  177. package/dist/structural-rules/python/PY004-swallowed-async-exception.js +167 -0
  178. package/dist/structural-rules/python/PY004-swallowed-async-exception.js.map +1 -0
  179. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts +11 -0
  180. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts.map +1 -0
  181. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js +154 -0
  182. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js.map +1 -0
  183. package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts +11 -0
  184. package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts.map +1 -0
  185. package/dist/structural-rules/python/PY006-blocking-io-in-async.js +130 -0
  186. package/dist/structural-rules/python/PY006-blocking-io-in-async.js.map +1 -0
  187. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts +11 -0
  188. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts.map +1 -0
  189. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js +93 -0
  190. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js.map +1 -0
  191. package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts +11 -0
  192. package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts.map +1 -0
  193. package/dist/structural-rules/python/PY008-celery-task-without-retry.js +154 -0
  194. package/dist/structural-rules/python/PY008-celery-task-without-retry.js.map +1 -0
  195. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts +11 -0
  196. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts.map +1 -0
  197. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js +133 -0
  198. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js.map +1 -0
  199. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts +11 -0
  200. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts.map +1 -0
  201. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js +80 -0
  202. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js.map +1 -0
  203. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
  204. package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
  205. package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
  206. package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
  207. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
  208. package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
  209. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
  210. package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
  211. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
  212. package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
  213. package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
  214. package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
  215. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
  216. package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
  217. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
  218. package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
  219. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts +11 -0
  220. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts.map +1 -0
  221. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js +145 -0
  222. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js.map +1 -0
  223. package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts +11 -0
  224. package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts.map +1 -0
  225. package/dist/structural-rules/rules/SR002-unbounded-collection.js +196 -0
  226. package/dist/structural-rules/rules/SR002-unbounded-collection.js.map +1 -0
  227. package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts +11 -0
  228. package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts.map +1 -0
  229. package/dist/structural-rules/rules/SR003-timer-without-cleanup.js +148 -0
  230. package/dist/structural-rules/rules/SR003-timer-without-cleanup.js.map +1 -0
  231. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts +11 -0
  232. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts.map +1 -0
  233. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js +162 -0
  234. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js.map +1 -0
  235. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts +11 -0
  236. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts.map +1 -0
  237. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js +150 -0
  238. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js.map +1 -0
  239. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts +11 -0
  240. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts.map +1 -0
  241. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js +161 -0
  242. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js.map +1 -0
  243. package/dist/structural-rules/rules/SR007-cross-request-error.d.ts +11 -0
  244. package/dist/structural-rules/rules/SR007-cross-request-error.d.ts.map +1 -0
  245. package/dist/structural-rules/rules/SR007-cross-request-error.js +175 -0
  246. package/dist/structural-rules/rules/SR007-cross-request-error.js.map +1 -0
  247. package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts +11 -0
  248. package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts.map +1 -0
  249. package/dist/structural-rules/rules/SR008-background-task-orphan.js +176 -0
  250. package/dist/structural-rules/rules/SR008-background-task-orphan.js.map +1 -0
  251. package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts +11 -0
  252. package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts.map +1 -0
  253. package/dist/structural-rules/rules/SR009-missing-retry-backoff.js +168 -0
  254. package/dist/structural-rules/rules/SR009-missing-retry-backoff.js.map +1 -0
  255. package/dist/structural-rules/rules/SR010-retry-storm.d.ts +11 -0
  256. package/dist/structural-rules/rules/SR010-retry-storm.d.ts.map +1 -0
  257. package/dist/structural-rules/rules/SR010-retry-storm.js +181 -0
  258. package/dist/structural-rules/rules/SR010-retry-storm.js.map +1 -0
  259. package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts +11 -0
  260. package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts.map +1 -0
  261. package/dist/structural-rules/rules/SR011-event-listener-leak.js +208 -0
  262. package/dist/structural-rules/rules/SR011-event-listener-leak.js.map +1 -0
  263. package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts +11 -0
  264. package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts.map +1 -0
  265. package/dist/structural-rules/rules/SR012-promise-race-leak.js +191 -0
  266. package/dist/structural-rules/rules/SR012-promise-race-leak.js.map +1 -0
  267. package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts +11 -0
  268. package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts.map +1 -0
  269. package/dist/structural-rules/rules/SR013-missing-idempotency-key.js +219 -0
  270. package/dist/structural-rules/rules/SR013-missing-idempotency-key.js.map +1 -0
  271. package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts +11 -0
  272. package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts.map +1 -0
  273. package/dist/structural-rules/rules/SR014-mutable-closure-async.js +208 -0
  274. package/dist/structural-rules/rules/SR014-mutable-closure-async.js.map +1 -0
  275. package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts +11 -0
  276. package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts.map +1 -0
  277. package/dist/structural-rules/rules/SR015-dangling-abort-controller.js +190 -0
  278. package/dist/structural-rules/rules/SR015-dangling-abort-controller.js.map +1 -0
  279. package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts +11 -0
  280. package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts.map +1 -0
  281. package/dist/structural-rules/rules/SR016-unsafe-json-parse.js +187 -0
  282. package/dist/structural-rules/rules/SR016-unsafe-json-parse.js.map +1 -0
  283. package/dist/structural-rules/suppressions.d.ts +43 -0
  284. package/dist/structural-rules/suppressions.d.ts.map +1 -0
  285. package/dist/structural-rules/suppressions.js +115 -0
  286. package/dist/structural-rules/suppressions.js.map +1 -0
  287. package/dist/structural-rules/types.d.ts +55 -0
  288. package/dist/structural-rules/types.d.ts.map +1 -0
  289. package/dist/structural-rules/types.js +3 -0
  290. package/dist/structural-rules/types.js.map +1 -0
  291. package/dist/utils/brain-cache.d.ts +100 -0
  292. package/dist/utils/brain-cache.d.ts.map +1 -0
  293. package/dist/utils/brain-cache.js +346 -0
  294. package/dist/utils/brain-cache.js.map +1 -0
  295. package/dist/utils/governance-provenance.d.ts +95 -0
  296. package/dist/utils/governance-provenance.d.ts.map +1 -0
  297. package/dist/utils/governance-provenance.js +187 -0
  298. package/dist/utils/governance-provenance.js.map +1 -0
  299. package/dist/utils/pilot-metrics.d.ts +46 -0
  300. package/dist/utils/pilot-metrics.d.ts.map +1 -0
  301. package/dist/utils/pilot-metrics.js +240 -0
  302. package/dist/utils/pilot-metrics.js.map +1 -0
  303. package/dist/utils/replay-runtime.d.ts +34 -0
  304. package/dist/utils/replay-runtime.d.ts.map +1 -1
  305. package/dist/utils/replay-runtime.js +207 -0
  306. package/dist/utils/replay-runtime.js.map +1 -1
  307. package/dist/utils/verify-runtime-stability.d.ts +142 -0
  308. package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
  309. package/dist/utils/verify-runtime-stability.js +230 -0
  310. package/dist/utils/verify-runtime-stability.js.map +1 -0
  311. package/dist/workspace/cross-repo-graph.d.ts +111 -0
  312. package/dist/workspace/cross-repo-graph.d.ts.map +1 -0
  313. package/dist/workspace/cross-repo-graph.js +450 -0
  314. package/dist/workspace/cross-repo-graph.js.map +1 -0
  315. package/dist/workspace/federated-context.d.ts +144 -0
  316. package/dist/workspace/federated-context.d.ts.map +1 -0
  317. package/dist/workspace/federated-context.js +347 -0
  318. package/dist/workspace/federated-context.js.map +1 -0
  319. package/dist/workspace/index.d.ts +38 -0
  320. package/dist/workspace/index.d.ts.map +1 -0
  321. package/dist/workspace/index.js +48 -0
  322. package/dist/workspace/index.js.map +1 -0
  323. package/package.json +9 -9
@@ -0,0 +1,32 @@
1
+ import type { ExplainedViolation, ViolationReport } from './types';
2
+ export declare class ViolationFormatter {
3
+ /**
4
+ * Format a single violation into a concise, actionable terminal string.
5
+ *
6
+ * Example:
7
+ * ┌─ SR001 · BLOCKING · deterministic-structural (confidence: 97%)
8
+ * │ File: packages/server/src/middleware/requestCoalescer.ts:43
9
+ * │ Pattern: .catch() callback contains no throw/reject path
10
+ * │ Code: .catch((err) => { this.pending.delete(key); console.error(err); })
11
+ * │ Risk: All coalesced waiters receive undefined instead of rejection
12
+ * │ Fix: Add `throw err;` before the closing brace of the .catch callback
13
+ * └─────────────────────────────────────────────────────────────────────────────
14
+ */
15
+ formatSingle(v: ExplainedViolation): string;
16
+ /**
17
+ * Format a ViolationReport into a full terminal report.
18
+ * Sections: Summary header, Blocking violations (grouped by file),
19
+ * Advisory violations (grouped by file), Determinism breakdown.
20
+ */
21
+ formatReport(report: ViolationReport): string;
22
+ /**
23
+ * Format as GitHub PR comment markdown.
24
+ * Uses GitHub markdown: collapsible sections, code blocks, tables.
25
+ */
26
+ formatGitHubPRComment(report: ViolationReport, planId?: string): string;
27
+ /**
28
+ * Format as compact JSON for CI/CD pipeline consumption.
29
+ */
30
+ formatJSON(report: ViolationReport): string;
31
+ }
32
+ //# sourceMappingURL=ViolationFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolationFormatter.d.ts","sourceRoot":"","sources":["../../src/explainability/ViolationFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAoB,MAAM,SAAS,CAAC;AAkBrF,qBAAa,kBAAkB;IAC7B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM;IA8B3C;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAsF7C;;;OAGG;IACH,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAiIvE;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;CAG5C"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ViolationFormatter = void 0;
4
+ const DeterminismClassifier_1 = require("./DeterminismClassifier");
5
+ // ── Terminal box-drawing helpers ──────────────────────────────────────────────
6
+ const HR = '─'.repeat(77);
7
+ function pad(s, width) {
8
+ return s.length >= width ? s : s + ' '.repeat(width - s.length);
9
+ }
10
+ function truncate(s, maxLen) {
11
+ if (s.length <= maxLen)
12
+ return s;
13
+ return s.slice(0, maxLen - 3) + '...';
14
+ }
15
+ // ── ViolationFormatter ────────────────────────────────────────────────────────
16
+ class ViolationFormatter {
17
+ /**
18
+ * Format a single violation into a concise, actionable terminal string.
19
+ *
20
+ * Example:
21
+ * ┌─ SR001 · BLOCKING · deterministic-structural (confidence: 97%)
22
+ * │ File: packages/server/src/middleware/requestCoalescer.ts:43
23
+ * │ Pattern: .catch() callback contains no throw/reject path
24
+ * │ Code: .catch((err) => { this.pending.delete(key); console.error(err); })
25
+ * │ Risk: All coalesced waiters receive undefined instead of rejection
26
+ * │ Fix: Add `throw err;` before the closing brace of the .catch callback
27
+ * └─────────────────────────────────────────────────────────────────────────────
28
+ */
29
+ formatSingle(v) {
30
+ const pct = Math.round(v.confidence * 100);
31
+ const icon = DeterminismClassifier_1.DeterminismClassifier.icon(v.determinism);
32
+ const lines = [];
33
+ lines.push(`┌─ ${v.ruleId} · ${v.severity} · ${v.determinism} (confidence: ${pct}%)`);
34
+ lines.push(`│ File: ${v.filePath}:${v.line}`);
35
+ lines.push(`│ Pattern: ${truncate(v.evidence.matchReason, 72)}`);
36
+ const snippet = v.evidence.codeSnippet.replace(/\n/g, ' ').trim();
37
+ lines.push(`│ Code: ${truncate(snippet, 72)}`);
38
+ lines.push(`│ Risk: ${truncate(v.operationalRisk, 72)}`);
39
+ lines.push(`│ Fix: ${truncate(v.remediation, 72)}`);
40
+ if (v.remediationCode) {
41
+ const codeLines = v.remediationCode.split('\n');
42
+ lines.push(`│ Suggested code:`);
43
+ for (const cl of codeLines) {
44
+ lines.push(`│ ${cl}`);
45
+ }
46
+ }
47
+ lines.push(`│ Trust: ${icon} ${DeterminismClassifier_1.DeterminismClassifier.label(v.determinism)}`);
48
+ lines.push(`└${HR}`);
49
+ return lines.join('\n');
50
+ }
51
+ /**
52
+ * Format a ViolationReport into a full terminal report.
53
+ * Sections: Summary header, Blocking violations (grouped by file),
54
+ * Advisory violations (grouped by file), Determinism breakdown.
55
+ */
56
+ formatReport(report) {
57
+ const lines = [];
58
+ const ts = report.generatedAt;
59
+ lines.push('');
60
+ lines.push('╔══════════════════════════════════════════════════════════════════════════╗');
61
+ lines.push('║ NEURCODE GOVERNANCE REPORT ║');
62
+ lines.push('╚══════════════════════════════════════════════════════════════════════════╝');
63
+ lines.push(` Generated: ${ts}`);
64
+ lines.push(` Repo: ${report.repoRoot}`);
65
+ lines.push('');
66
+ // Summary
67
+ const blockingCount = report.blocking.length;
68
+ const advisoryCount = report.advisory.length;
69
+ const status = blockingCount === 0 ? 'PASS' : 'FAIL';
70
+ lines.push(` Status: ${status}`);
71
+ lines.push(` Blocking: ${blockingCount}`);
72
+ lines.push(` Advisory: ${advisoryCount}`);
73
+ lines.push(` Total: ${report.totalViolations}`);
74
+ lines.push(` Deterministic findings: ${report.deterministicCount}`);
75
+ lines.push(` Heuristic findings: ${report.heuristicCount}`);
76
+ lines.push(` False-positive risk: ${report.falsePositiveRisk}`);
77
+ lines.push('');
78
+ // Blocking violations grouped by file
79
+ if (blockingCount > 0) {
80
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
81
+ lines.push(' BLOCKING VIOLATIONS');
82
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
83
+ lines.push('');
84
+ for (const [filePath, violations] of Object.entries(report.byFile)) {
85
+ const blockingInFile = violations.filter(v => v.severity === 'BLOCKING');
86
+ if (blockingInFile.length === 0)
87
+ continue;
88
+ lines.push(` ${filePath}`);
89
+ for (const v of blockingInFile) {
90
+ lines.push(this.formatSingle(v).split('\n').map(l => ' ' + l).join('\n'));
91
+ }
92
+ lines.push('');
93
+ }
94
+ }
95
+ // Advisory violations grouped by file
96
+ if (advisoryCount > 0) {
97
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
98
+ lines.push(' ADVISORY VIOLATIONS');
99
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
100
+ lines.push('');
101
+ for (const [filePath, violations] of Object.entries(report.byFile)) {
102
+ const advisoryInFile = violations.filter(v => v.severity === 'ADVISORY');
103
+ if (advisoryInFile.length === 0)
104
+ continue;
105
+ lines.push(` ${filePath}`);
106
+ for (const v of advisoryInFile) {
107
+ lines.push(this.formatSingle(v).split('\n').map(l => ' ' + l).join('\n'));
108
+ }
109
+ lines.push('');
110
+ }
111
+ }
112
+ // Determinism breakdown
113
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
114
+ lines.push(' DETERMINISM BREAKDOWN');
115
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
116
+ lines.push('');
117
+ const classes = [
118
+ 'deterministic-structural',
119
+ 'deterministic-semantic',
120
+ 'heuristic-advisory',
121
+ 'llm-assisted-planning',
122
+ ];
123
+ for (const cls of classes) {
124
+ const count = report.byDeterminism[cls] ?? 0;
125
+ const icon = DeterminismClassifier_1.DeterminismClassifier.icon(cls);
126
+ const label = DeterminismClassifier_1.DeterminismClassifier.label(cls);
127
+ lines.push(` ${icon} ${pad(label, 42)} ${count}`);
128
+ }
129
+ lines.push('');
130
+ return lines.join('\n');
131
+ }
132
+ /**
133
+ * Format as GitHub PR comment markdown.
134
+ * Uses GitHub markdown: collapsible sections, code blocks, tables.
135
+ */
136
+ formatGitHubPRComment(report, planId) {
137
+ const blockingCount = report.blocking.length;
138
+ const advisoryCount = report.advisory.length;
139
+ const ts = report.generatedAt;
140
+ const planRef = planId ? ` · Plan ID: ${planId}` : '';
141
+ const parts = [];
142
+ // Header
143
+ if (blockingCount === 0) {
144
+ parts.push('## ✅ Governance: PASS\n');
145
+ parts.push(`No blocking violations found. ${advisoryCount} advisory finding${advisoryCount !== 1 ? 's' : ''}.\n`);
146
+ }
147
+ else {
148
+ parts.push('## 🔍 Neurcode Governance Report\n');
149
+ }
150
+ // Summary table
151
+ const aggResult = DeterminismClassifier_1.DeterminismClassifier.aggregate([
152
+ ...report.blocking,
153
+ ...report.advisory,
154
+ ]);
155
+ parts.push('### Summary\n');
156
+ parts.push('| Category | Count |');
157
+ parts.push('|---|---|');
158
+ parts.push(`| 🚫 Blocking | ${blockingCount} |`);
159
+ parts.push(`| ⚠️ Advisory | ${advisoryCount} |`);
160
+ parts.push(`| ⚙️ Deterministic | ${report.deterministicCount} |`);
161
+ parts.push(`| ⚡ Heuristic | ${report.heuristicCount} |`);
162
+ parts.push(`| Trust score | ${aggResult.trustScore}/100 |`);
163
+ parts.push(`| False-positive risk | ${report.falsePositiveRisk} |`);
164
+ parts.push('');
165
+ // Blocking violations
166
+ if (blockingCount > 0) {
167
+ parts.push('### 🚫 Blocking Violations\n');
168
+ parts.push('These must be resolved before merging.\n');
169
+ for (const v of report.blocking) {
170
+ const pct = Math.round(v.confidence * 100);
171
+ const icon = DeterminismClassifier_1.DeterminismClassifier.icon(v.determinism);
172
+ const label = DeterminismClassifier_1.DeterminismClassifier.label(v.determinism);
173
+ parts.push(`<details>`);
174
+ parts.push(`<summary><strong>${v.ruleId}</strong> — ${v.ruleName} · <code>${v.filePath}:${v.line}</code></summary>\n`);
175
+ parts.push(`**Policy:** \`${v.policyRef}\` `);
176
+ parts.push(`**Severity:** \`BLOCKING\` `);
177
+ parts.push(`**Trust:** ${icon} ${label} (${pct}% confidence)\n`);
178
+ parts.push(`**Location:** \`${v.filePath}\` line ${v.line}, col ${v.column}\n`);
179
+ parts.push(`**Pattern matched:** ${v.evidence.matchReason} `);
180
+ parts.push(`**AST node:** \`${v.evidence.astNodeType}\`\n`);
181
+ parts.push(`\`\`\`${v.language}`);
182
+ parts.push(v.evidence.codeSnippet);
183
+ parts.push('```\n');
184
+ parts.push(`**Operational risk:** ${v.operationalRisk}\n`);
185
+ parts.push(`**Worst case:** ${v.worstCase}\n`);
186
+ parts.push(`**Remediation:** ${v.remediation}\n`);
187
+ if (v.remediationCode) {
188
+ parts.push(`**Suggested fix:**`);
189
+ parts.push(`\`\`\`${v.language}`);
190
+ parts.push(v.remediationCode);
191
+ parts.push('```\n');
192
+ }
193
+ parts.push('</details>\n');
194
+ }
195
+ }
196
+ // Advisory violations (collapsed by default)
197
+ if (advisoryCount > 0) {
198
+ parts.push('### ⚠️ Advisory Violations\n');
199
+ parts.push('These are non-blocking findings. Review and address where feasible.\n');
200
+ for (const v of report.advisory) {
201
+ const pct = Math.round(v.confidence * 100);
202
+ const icon = DeterminismClassifier_1.DeterminismClassifier.icon(v.determinism);
203
+ parts.push(`<details>`);
204
+ parts.push(`<summary>${v.ruleId} — ${v.ruleName} · <code>${v.filePath}:${v.line}</code> · ${icon} ${pct}%</summary>\n`);
205
+ parts.push(`**Policy:** \`${v.policyRef}\` `);
206
+ parts.push(`**Trust:** ${DeterminismClassifier_1.DeterminismClassifier.label(v.determinism)}\n`);
207
+ parts.push(`\`\`\`${v.language}`);
208
+ parts.push(v.evidence.codeSnippet);
209
+ parts.push('```\n');
210
+ parts.push(`**Risk:** ${v.operationalRisk} `);
211
+ parts.push(`**Fix:** ${v.remediation}\n`);
212
+ parts.push('</details>\n');
213
+ }
214
+ }
215
+ // Determinism breakdown
216
+ parts.push('<details>');
217
+ parts.push('<summary>Determinism breakdown</summary>\n');
218
+ parts.push('| Class | Label | Count |');
219
+ parts.push('|---|---|---|');
220
+ const classes = [
221
+ 'deterministic-structural',
222
+ 'deterministic-semantic',
223
+ 'heuristic-advisory',
224
+ 'llm-assisted-planning',
225
+ ];
226
+ for (const cls of classes) {
227
+ const count = report.byDeterminism[cls] ?? 0;
228
+ const icon = DeterminismClassifier_1.DeterminismClassifier.icon(cls);
229
+ parts.push(`| ${icon} \`${cls}\` | ${DeterminismClassifier_1.DeterminismClassifier.label(cls)} | ${count} |`);
230
+ }
231
+ parts.push('');
232
+ parts.push('</details>\n');
233
+ // Footer
234
+ parts.push(`---`);
235
+ parts.push(`*Generated by Neurcode${planRef} · ${ts}*`);
236
+ const result = parts.join('\n');
237
+ // Enforce GitHub PR comment character limit (65,536)
238
+ if (result.length > 65000) {
239
+ const truncationNotice = '\n\n> **Note:** Report truncated to fit GitHub PR comment limit. See CI logs for full output.';
240
+ return result.slice(0, 65000 - truncationNotice.length) + truncationNotice;
241
+ }
242
+ return result;
243
+ }
244
+ /**
245
+ * Format as compact JSON for CI/CD pipeline consumption.
246
+ */
247
+ formatJSON(report) {
248
+ return JSON.stringify(report, null, 2);
249
+ }
250
+ }
251
+ exports.ViolationFormatter = ViolationFormatter;
252
+ //# sourceMappingURL=ViolationFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolationFormatter.js","sourceRoot":"","sources":["../../src/explainability/ViolationFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { ViolationFormatter } from './ViolationFormatter';
2
+ export { DeterminismClassifier } from './DeterminismClassifier';
3
+ export type { ExplainedViolation, ViolationReport, DeterminismClass } from './types';
4
+ import type { ViolationReport } from './types';
5
+ import type { StructuralViolation } from '../structural-rules/types';
6
+ /**
7
+ * Build a ViolationReport from structural rule violations.
8
+ * This is the bridge between the structural rule engine output
9
+ * and the explainability layer.
10
+ *
11
+ * Deterministic violationId: `${ruleId}:${filePath}:${line}:${column}`
12
+ * Same input always produces the same ID.
13
+ */
14
+ export declare function buildViolationReport(violations: StructuralViolation[], repoRoot: string): ViolationReport;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explainability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErF,OAAO,KAAK,EAAsB,eAAe,EAAoB,MAAM,SAAS,CAAC;AACrF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,mBAAmB,EAAE,EACjC,QAAQ,EAAE,MAAM,GACf,eAAe,CAoFjB"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeterminismClassifier = exports.ViolationFormatter = void 0;
4
+ exports.buildViolationReport = buildViolationReport;
5
+ var ViolationFormatter_1 = require("./ViolationFormatter");
6
+ Object.defineProperty(exports, "ViolationFormatter", { enumerable: true, get: function () { return ViolationFormatter_1.ViolationFormatter; } });
7
+ var DeterminismClassifier_1 = require("./DeterminismClassifier");
8
+ Object.defineProperty(exports, "DeterminismClassifier", { enumerable: true, get: function () { return DeterminismClassifier_1.DeterminismClassifier; } });
9
+ const DeterminismClassifier_2 = require("./DeterminismClassifier");
10
+ // ── buildViolationReport ──────────────────────────────────────────────────────
11
+ /**
12
+ * Build a ViolationReport from structural rule violations.
13
+ * This is the bridge between the structural rule engine output
14
+ * and the explainability layer.
15
+ *
16
+ * Deterministic violationId: `${ruleId}:${filePath}:${line}:${column}`
17
+ * Same input always produces the same ID.
18
+ */
19
+ function buildViolationReport(violations, repoRoot) {
20
+ const generatedAt = new Date().toISOString();
21
+ const explained = violations.map(v => {
22
+ const violationId = `${v.ruleId}:${v.filePath}:${v.line}:${v.column}`;
23
+ // Map DeterminismLevel from structural-rules/types to DeterminismClass.
24
+ // The structural-rules types only define three levels (no llm-assisted-planning),
25
+ // so the cast is safe here.
26
+ const determinism = v.determinism;
27
+ return {
28
+ violationId,
29
+ ruleId: v.ruleId,
30
+ ruleName: v.ruleName,
31
+ policyRef: v.policyRef,
32
+ severity: v.severity,
33
+ filePath: v.filePath,
34
+ line: v.line,
35
+ column: v.column,
36
+ evidence: {
37
+ codeSnippet: v.evidence,
38
+ astNodeType: '', // not available from StructuralViolation; callers may enrich
39
+ matchReason: v.evidence, // use the evidence string as the match reason
40
+ },
41
+ operationalRisk: v.operationalRisk,
42
+ worstCase: '', // not in StructuralViolation; callers may enrich
43
+ remediation: v.remediation,
44
+ determinism,
45
+ confidence: v.confidence,
46
+ language: v.language,
47
+ };
48
+ });
49
+ // Split by severity
50
+ const blocking = explained.filter(v => v.severity === 'BLOCKING');
51
+ const advisory = explained.filter(v => v.severity === 'ADVISORY');
52
+ // byFile aggregate
53
+ const byFile = {};
54
+ for (const v of explained) {
55
+ if (!byFile[v.filePath])
56
+ byFile[v.filePath] = [];
57
+ byFile[v.filePath].push(v);
58
+ }
59
+ // byRule aggregate
60
+ const byRule = {};
61
+ for (const v of explained) {
62
+ if (!byRule[v.ruleId])
63
+ byRule[v.ruleId] = [];
64
+ byRule[v.ruleId].push(v);
65
+ }
66
+ // byDeterminism counts
67
+ const byDeterminism = {
68
+ 'deterministic-structural': 0,
69
+ 'deterministic-semantic': 0,
70
+ 'heuristic-advisory': 0,
71
+ 'llm-assisted-planning': 0,
72
+ };
73
+ for (const v of explained) {
74
+ byDeterminism[v.determinism] += 1;
75
+ }
76
+ const deterministicCount = byDeterminism['deterministic-structural'] +
77
+ byDeterminism['deterministic-semantic'];
78
+ const heuristicCount = byDeterminism['heuristic-advisory'];
79
+ const { falsePositiveRisk } = DeterminismClassifier_2.DeterminismClassifier.aggregate(explained);
80
+ return {
81
+ generatedAt,
82
+ repoRoot,
83
+ totalViolations: explained.length,
84
+ blocking,
85
+ advisory,
86
+ byFile,
87
+ byRule,
88
+ byDeterminism,
89
+ deterministicCount,
90
+ heuristicCount,
91
+ falsePositiveRisk,
92
+ };
93
+ }
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explainability/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export type DeterminismClass = 'deterministic-structural' | 'deterministic-semantic' | 'heuristic-advisory' | 'llm-assisted-planning';
2
+ export interface ExplainedViolation {
3
+ violationId: string;
4
+ ruleId: string;
5
+ ruleName: string;
6
+ policyRef: string;
7
+ severity: 'BLOCKING' | 'ADVISORY';
8
+ filePath: string;
9
+ line: number;
10
+ column: number;
11
+ evidence: {
12
+ codeSnippet: string;
13
+ astNodeType: string;
14
+ matchReason: string;
15
+ };
16
+ operationalRisk: string;
17
+ worstCase: string;
18
+ remediation: string;
19
+ remediationCode?: string;
20
+ determinism: DeterminismClass;
21
+ confidence: number;
22
+ language: string;
23
+ }
24
+ export interface ViolationReport {
25
+ generatedAt: string;
26
+ repoRoot: string;
27
+ totalViolations: number;
28
+ blocking: ExplainedViolation[];
29
+ advisory: ExplainedViolation[];
30
+ byFile: Record<string, ExplainedViolation[]>;
31
+ byRule: Record<string, ExplainedViolation[]>;
32
+ byDeterminism: Record<DeterminismClass, number>;
33
+ deterministicCount: number;
34
+ heuristicCount: number;
35
+ falsePositiveRisk: 'low' | 'medium' | 'high';
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/explainability/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,wBAAwB,GACxB,oBAAoB,GACpB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IAEjC,WAAW,EAAM,MAAM,CAAC;IACxB,MAAM,EAAW,MAAM,CAAC;IACxB,QAAQ,EAAS,MAAM,CAAC;IACxB,SAAS,EAAQ,MAAM,CAAC;IACxB,QAAQ,EAAS,UAAU,GAAG,UAAU,CAAC;IAGzC,QAAQ,EAAS,MAAM,CAAC;IACxB,IAAI,EAAa,MAAM,CAAC;IACxB,MAAM,EAAW,MAAM,CAAC;IAGxB,QAAQ,EAAE;QACR,WAAW,EAAM,MAAM,CAAC;QACxB,WAAW,EAAM,MAAM,CAAC;QACxB,WAAW,EAAM,MAAM,CAAC;KACzB,CAAC;IAGF,eAAe,EAAG,MAAM,CAAC;IACzB,SAAS,EAAS,MAAM,CAAC;IAGzB,WAAW,EAAO,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,WAAW,EAAO,gBAAgB,CAAC;IACnC,UAAU,EAAQ,MAAM,CAAC;IACzB,QAAQ,EAAU,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAM,MAAM,CAAC;IACxB,QAAQ,EAAS,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAS,kBAAkB,EAAE,CAAC;IACtC,QAAQ,EAAS,kBAAkB,EAAE,CAAC;IAGtC,MAAM,EAAW,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACtD,MAAM,EAAW,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACtD,aAAa,EAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAGlD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAM,MAAM,CAAC;IAC3B,iBAAiB,EAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC/C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/explainability/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Canonical Finding Invariants (Phase 1 + Phase 3)
3
+ *
4
+ * Two responsibilities:
5
+ *
6
+ * 1. Architectural invariant enforcement (Phase 1):
7
+ * - Assert that policyViolations never contain structural:* rows
8
+ * - If violated, emit a deterministic console warning (never throw)
9
+ * - This guards against regressions where future code re-introduces the merge
10
+ *
11
+ * 2. Replay determinism (Phase 3):
12
+ * - computeCanonicalFindingChecksum(): deterministic SHA-256 over finding set
13
+ * - sortFindingsDeterministically(): canonical sort order for stable checksums
14
+ *
15
+ * Both functions are pure and dependency-free (only Node 'crypto').
16
+ */
17
+ import type { GovernanceFinding } from '@neurcode-ai/contracts';
18
+ import type { RuleViolation } from '@neurcode-ai/policy-engine';
19
+ /**
20
+ * Assert that the policyViolations array contains no structural:* prefixed rows.
21
+ *
22
+ * Structural violations MUST flow only through `payload.structuralViolations`
23
+ * into the canonical pipeline. Structural rows in policyViolations cause
24
+ * cross-source duplicate GovernanceFinding objects.
25
+ *
26
+ * This guard emits a console.warn if violated — it NEVER throws. The intention
27
+ * is observability and regression detection, not hard failure. The pipeline's
28
+ * stripStructuralPolicyRows() provides the actual cleanup.
29
+ *
30
+ * @param violations The policyViolations array before it reaches the pipeline
31
+ * @param context Caller label for the warning message (e.g. 'verify:policy-only')
32
+ * @returns Count of structural rows found (0 = invariant holds)
33
+ */
34
+ export declare function assertNoStructuralPolicyRows(violations: RuleViolation[], context: string): number;
35
+ /**
36
+ * Sort findings into a canonical deterministic order.
37
+ *
38
+ * Sort key (descending priority):
39
+ * 1. determinismClassification rank (descending — structural first)
40
+ * 2. severity rank (descending — BLOCKING first)
41
+ * 3. filePath (ascending — lexicographic)
42
+ * 4. line number (ascending)
43
+ * 5. id (ascending — stable tiebreaker)
44
+ *
45
+ * This order is stable across multiple runs on the same input, enabling
46
+ * reliable replay checksum comparison.
47
+ *
48
+ * NEVER mutates the input array — returns a new sorted array.
49
+ */
50
+ export declare function sortFindingsDeterministically(findings: GovernanceFinding[]): GovernanceFinding[];
51
+ /**
52
+ * Compute a deterministic SHA-256 checksum over the canonical finding set.
53
+ *
54
+ * Checksum input is built from sorted findings:
55
+ * for each finding (in canonical sort order):
56
+ * id + '\x1e' + severity + '\x1e' + determinismClassification +
57
+ * '\x1e' + filePath + '\x1e' + line
58
+ * joined with '\x00'
59
+ *
60
+ * This checksum:
61
+ * - Changes if any finding is added, removed, or has severity/determinism changed
62
+ * - Changes if canonical ordering changes (sort key must be stable)
63
+ * - Is stable across process restarts on the same input
64
+ * - Is used to detect replay drift (same commit + diff + rules → same checksum)
65
+ *
66
+ * @param findings Raw findings from the canonical pipeline (NOT pre-sorted)
67
+ * @returns hex SHA-256 string (64 chars)
68
+ */
69
+ export declare function computeCanonicalFindingChecksum(findings: GovernanceFinding[]): string;
70
+ /**
71
+ * Compare two sets of findings for replay equivalence.
72
+ *
73
+ * Returns a structured comparison result:
74
+ * - 'exact': checksums match — identical governance output
75
+ * - 'drift-detected': checksums differ — replay divergence
76
+ *
77
+ * @param baseline Findings from the baseline (e.g. cached) run
78
+ * @param replay Findings from the current run
79
+ */
80
+ export declare function compareForReplayEquivalence(baseline: GovernanceFinding[], replay: GovernanceFinding[]): {
81
+ status: 'exact' | 'drift-detected';
82
+ baselineChecksum: string;
83
+ replayChecksum: string;
84
+ baselineCount: number;
85
+ replayCount: number;
86
+ driftDetails?: string;
87
+ };
88
+ //# sourceMappingURL=canonical-invariants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-invariants.d.ts","sourceRoot":"","sources":["../../src/governance/canonical-invariants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,MAAM,GACd,MAAM,CAYR;AA4BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAyBhG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAgBrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,EAAE,iBAAiB,EAAE,GAC1B;IACD,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CA2CA"}