@neurcode-ai/cli 0.9.63 → 0.9.65

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 (308) hide show
  1. package/LICENSE +201 -0
  2. package/dist/commands/brain.d.ts.map +1 -1
  3. package/dist/commands/brain.js +273 -0
  4. package/dist/commands/brain.js.map +1 -1
  5. package/dist/commands/control-plane.js +7 -7
  6. package/dist/commands/control-plane.js.map +1 -1
  7. package/dist/commands/fix.d.ts.map +1 -1
  8. package/dist/commands/fix.js +108 -1
  9. package/dist/commands/fix.js.map +1 -1
  10. package/dist/commands/patch-apply.d.ts +2 -0
  11. package/dist/commands/patch-apply.d.ts.map +1 -1
  12. package/dist/commands/patch-apply.js +331 -19
  13. package/dist/commands/patch-apply.js.map +1 -1
  14. package/dist/commands/pilot-report.d.ts +9 -0
  15. package/dist/commands/pilot-report.d.ts.map +1 -0
  16. package/dist/commands/pilot-report.js +176 -0
  17. package/dist/commands/pilot-report.js.map +1 -0
  18. package/dist/commands/remediate-governance.d.ts +54 -0
  19. package/dist/commands/remediate-governance.d.ts.map +1 -0
  20. package/dist/commands/remediate-governance.js +375 -0
  21. package/dist/commands/remediate-governance.js.map +1 -0
  22. package/dist/commands/remediate.d.ts.map +1 -1
  23. package/dist/commands/remediate.js.map +1 -1
  24. package/dist/commands/replay.d.ts.map +1 -1
  25. package/dist/commands/replay.js +35 -5
  26. package/dist/commands/replay.js.map +1 -1
  27. package/dist/commands/verify.d.ts.map +1 -1
  28. package/dist/commands/verify.js +336 -25
  29. package/dist/commands/verify.js.map +1 -1
  30. package/dist/commands/workspace.js +7 -7
  31. package/dist/commands/workspace.js.map +1 -1
  32. package/dist/daemon/server.d.ts +2 -2
  33. package/dist/daemon/server.d.ts.map +1 -1
  34. package/dist/daemon/server.js +2113 -32
  35. package/dist/daemon/server.js.map +1 -1
  36. package/dist/explainability/DeterminismClassifier.d.ts +34 -0
  37. package/dist/explainability/DeterminismClassifier.d.ts.map +1 -0
  38. package/dist/explainability/DeterminismClassifier.js +104 -0
  39. package/dist/explainability/DeterminismClassifier.js.map +1 -0
  40. package/dist/explainability/ViolationFormatter.d.ts +32 -0
  41. package/dist/explainability/ViolationFormatter.d.ts.map +1 -0
  42. package/dist/explainability/ViolationFormatter.js +252 -0
  43. package/dist/explainability/ViolationFormatter.js.map +1 -0
  44. package/dist/explainability/index.d.ts +15 -0
  45. package/dist/explainability/index.d.ts.map +1 -0
  46. package/dist/explainability/index.js +94 -0
  47. package/dist/explainability/index.js.map +1 -0
  48. package/dist/explainability/types.d.ts +37 -0
  49. package/dist/explainability/types.d.ts.map +1 -0
  50. package/dist/explainability/types.js +3 -0
  51. package/dist/explainability/types.js.map +1 -0
  52. package/dist/governance/canonical-pipeline.d.ts +38 -0
  53. package/dist/governance/canonical-pipeline.d.ts.map +1 -0
  54. package/dist/governance/canonical-pipeline.js +448 -0
  55. package/dist/governance/canonical-pipeline.js.map +1 -0
  56. package/dist/governance/structural-on-diff.d.ts +13 -0
  57. package/dist/governance/structural-on-diff.d.ts.map +1 -0
  58. package/dist/governance/structural-on-diff.js +35 -0
  59. package/dist/governance/structural-on-diff.js.map +1 -0
  60. package/dist/governance/structural-policy-merge.d.ts +14 -0
  61. package/dist/governance/structural-policy-merge.d.ts.map +1 -0
  62. package/dist/governance/structural-policy-merge.js +25 -0
  63. package/dist/governance/structural-policy-merge.js.map +1 -0
  64. package/dist/index.js +86 -4
  65. package/dist/index.js.map +1 -1
  66. package/dist/integrations/review-compression/index.d.ts +50 -0
  67. package/dist/integrations/review-compression/index.d.ts.map +1 -0
  68. package/dist/integrations/review-compression/index.js +158 -0
  69. package/dist/integrations/review-compression/index.js.map +1 -0
  70. package/dist/intent-engine/domain-taxonomy.d.ts +42 -0
  71. package/dist/intent-engine/domain-taxonomy.d.ts.map +1 -0
  72. package/dist/intent-engine/domain-taxonomy.js +534 -0
  73. package/dist/intent-engine/domain-taxonomy.js.map +1 -0
  74. package/dist/intent-engine/index.d.ts +1 -0
  75. package/dist/intent-engine/index.d.ts.map +1 -1
  76. package/dist/intent-engine/index.js +6 -1
  77. package/dist/intent-engine/index.js.map +1 -1
  78. package/dist/intent-engine/matcher.d.ts.map +1 -1
  79. package/dist/intent-engine/matcher.js +2 -0
  80. package/dist/intent-engine/matcher.js.map +1 -1
  81. package/dist/intent-engine/parser.d.ts.map +1 -1
  82. package/dist/intent-engine/parser.js +47 -0
  83. package/dist/intent-engine/parser.js.map +1 -1
  84. package/dist/intent-engine/semantic-expander.d.ts +104 -0
  85. package/dist/intent-engine/semantic-expander.d.ts.map +1 -0
  86. package/dist/intent-engine/semantic-expander.js +480 -0
  87. package/dist/intent-engine/semantic-expander.js.map +1 -0
  88. package/dist/patch-engine/diff.d.ts +1 -1
  89. package/dist/patch-engine/diff.js +1 -1
  90. package/dist/patch-engine/generator.d.ts +9 -0
  91. package/dist/patch-engine/generator.d.ts.map +1 -1
  92. package/dist/patch-engine/generator.js +375 -17
  93. package/dist/patch-engine/generator.js.map +1 -1
  94. package/dist/patch-engine/index.d.ts +25 -25
  95. package/dist/patch-engine/index.d.ts.map +1 -1
  96. package/dist/patch-engine/index.js +134 -87
  97. package/dist/patch-engine/index.js.map +1 -1
  98. package/dist/patch-engine/patterns.d.ts +1 -1
  99. package/dist/patch-engine/patterns.d.ts.map +1 -1
  100. package/dist/patch-engine/patterns.js +282 -41
  101. package/dist/patch-engine/patterns.js.map +1 -1
  102. package/dist/patch-engine/rollback.d.ts +31 -0
  103. package/dist/patch-engine/rollback.d.ts.map +1 -0
  104. package/dist/patch-engine/rollback.js +275 -0
  105. package/dist/patch-engine/rollback.js.map +1 -0
  106. package/dist/patch-engine/safety.d.ts +28 -0
  107. package/dist/patch-engine/safety.d.ts.map +1 -0
  108. package/dist/patch-engine/safety.js +122 -0
  109. package/dist/patch-engine/safety.js.map +1 -0
  110. package/dist/patch-engine/transaction.d.ts +52 -0
  111. package/dist/patch-engine/transaction.d.ts.map +1 -0
  112. package/dist/patch-engine/transaction.js +93 -0
  113. package/dist/patch-engine/transaction.js.map +1 -0
  114. package/dist/semantic/index.d.ts +14 -0
  115. package/dist/semantic/index.d.ts.map +1 -0
  116. package/dist/semantic/index.js +30 -0
  117. package/dist/semantic/index.js.map +1 -0
  118. package/dist/semantic/tfidf-engine.d.ts +81 -0
  119. package/dist/semantic/tfidf-engine.d.ts.map +1 -0
  120. package/dist/semantic/tfidf-engine.js +278 -0
  121. package/dist/semantic/tfidf-engine.js.map +1 -0
  122. package/dist/semantic/vector-store.d.ts +108 -0
  123. package/dist/semantic/vector-store.d.ts.map +1 -0
  124. package/dist/semantic/vector-store.js +321 -0
  125. package/dist/semantic/vector-store.js.map +1 -0
  126. package/dist/structural-rules/context-severity.d.ts +46 -0
  127. package/dist/structural-rules/context-severity.d.ts.map +1 -0
  128. package/dist/structural-rules/context-severity.js +115 -0
  129. package/dist/structural-rules/context-severity.js.map +1 -0
  130. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts +11 -0
  131. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts.map +1 -0
  132. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js +212 -0
  133. package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js.map +1 -0
  134. package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts +11 -0
  135. package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts.map +1 -0
  136. package/dist/structural-rules/distributed/DS002-missing-correlation-id.js +213 -0
  137. package/dist/structural-rules/distributed/DS002-missing-correlation-id.js.map +1 -0
  138. package/dist/structural-rules/distributed/index.d.ts +3 -0
  139. package/dist/structural-rules/distributed/index.d.ts.map +1 -0
  140. package/dist/structural-rules/distributed/index.js +8 -0
  141. package/dist/structural-rules/distributed/index.js.map +1 -0
  142. package/dist/structural-rules/engine.d.ts +25 -0
  143. package/dist/structural-rules/engine.d.ts.map +1 -0
  144. package/dist/structural-rules/engine.js +90 -0
  145. package/dist/structural-rules/engine.js.map +1 -0
  146. package/dist/structural-rules/index.d.ts +41 -0
  147. package/dist/structural-rules/index.d.ts.map +1 -0
  148. package/dist/structural-rules/index.js +141 -0
  149. package/dist/structural-rules/index.js.map +1 -0
  150. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts +11 -0
  151. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts.map +1 -0
  152. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js +66 -0
  153. package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js.map +1 -0
  154. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts +11 -0
  155. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts.map +1 -0
  156. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js +135 -0
  157. package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js.map +1 -0
  158. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +11 -0
  159. package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -0
  160. package/dist/structural-rules/python/PY003-broad-except-clause.js +86 -0
  161. package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -0
  162. package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts +11 -0
  163. package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts.map +1 -0
  164. package/dist/structural-rules/python/PY004-swallowed-async-exception.js +167 -0
  165. package/dist/structural-rules/python/PY004-swallowed-async-exception.js.map +1 -0
  166. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts +11 -0
  167. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts.map +1 -0
  168. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js +154 -0
  169. package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js.map +1 -0
  170. package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts +11 -0
  171. package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts.map +1 -0
  172. package/dist/structural-rules/python/PY006-blocking-io-in-async.js +130 -0
  173. package/dist/structural-rules/python/PY006-blocking-io-in-async.js.map +1 -0
  174. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts +11 -0
  175. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts.map +1 -0
  176. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js +93 -0
  177. package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js.map +1 -0
  178. package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts +11 -0
  179. package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts.map +1 -0
  180. package/dist/structural-rules/python/PY008-celery-task-without-retry.js +154 -0
  181. package/dist/structural-rules/python/PY008-celery-task-without-retry.js.map +1 -0
  182. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts +11 -0
  183. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts.map +1 -0
  184. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js +133 -0
  185. package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js.map +1 -0
  186. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts +11 -0
  187. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts.map +1 -0
  188. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js +80 -0
  189. package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js.map +1 -0
  190. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts +11 -0
  191. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts.map +1 -0
  192. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js +145 -0
  193. package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js.map +1 -0
  194. package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts +11 -0
  195. package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts.map +1 -0
  196. package/dist/structural-rules/rules/SR002-unbounded-collection.js +196 -0
  197. package/dist/structural-rules/rules/SR002-unbounded-collection.js.map +1 -0
  198. package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts +11 -0
  199. package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts.map +1 -0
  200. package/dist/structural-rules/rules/SR003-timer-without-cleanup.js +148 -0
  201. package/dist/structural-rules/rules/SR003-timer-without-cleanup.js.map +1 -0
  202. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts +11 -0
  203. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts.map +1 -0
  204. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js +162 -0
  205. package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js.map +1 -0
  206. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts +11 -0
  207. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts.map +1 -0
  208. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js +150 -0
  209. package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js.map +1 -0
  210. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts +11 -0
  211. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts.map +1 -0
  212. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js +161 -0
  213. package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js.map +1 -0
  214. package/dist/structural-rules/rules/SR007-cross-request-error.d.ts +11 -0
  215. package/dist/structural-rules/rules/SR007-cross-request-error.d.ts.map +1 -0
  216. package/dist/structural-rules/rules/SR007-cross-request-error.js +175 -0
  217. package/dist/structural-rules/rules/SR007-cross-request-error.js.map +1 -0
  218. package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts +11 -0
  219. package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts.map +1 -0
  220. package/dist/structural-rules/rules/SR008-background-task-orphan.js +176 -0
  221. package/dist/structural-rules/rules/SR008-background-task-orphan.js.map +1 -0
  222. package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts +11 -0
  223. package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts.map +1 -0
  224. package/dist/structural-rules/rules/SR009-missing-retry-backoff.js +168 -0
  225. package/dist/structural-rules/rules/SR009-missing-retry-backoff.js.map +1 -0
  226. package/dist/structural-rules/rules/SR010-retry-storm.d.ts +11 -0
  227. package/dist/structural-rules/rules/SR010-retry-storm.d.ts.map +1 -0
  228. package/dist/structural-rules/rules/SR010-retry-storm.js +181 -0
  229. package/dist/structural-rules/rules/SR010-retry-storm.js.map +1 -0
  230. package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts +11 -0
  231. package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts.map +1 -0
  232. package/dist/structural-rules/rules/SR011-event-listener-leak.js +208 -0
  233. package/dist/structural-rules/rules/SR011-event-listener-leak.js.map +1 -0
  234. package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts +11 -0
  235. package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts.map +1 -0
  236. package/dist/structural-rules/rules/SR012-promise-race-leak.js +191 -0
  237. package/dist/structural-rules/rules/SR012-promise-race-leak.js.map +1 -0
  238. package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts +11 -0
  239. package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts.map +1 -0
  240. package/dist/structural-rules/rules/SR013-missing-idempotency-key.js +219 -0
  241. package/dist/structural-rules/rules/SR013-missing-idempotency-key.js.map +1 -0
  242. package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts +11 -0
  243. package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts.map +1 -0
  244. package/dist/structural-rules/rules/SR014-mutable-closure-async.js +208 -0
  245. package/dist/structural-rules/rules/SR014-mutable-closure-async.js.map +1 -0
  246. package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts +11 -0
  247. package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts.map +1 -0
  248. package/dist/structural-rules/rules/SR015-dangling-abort-controller.js +190 -0
  249. package/dist/structural-rules/rules/SR015-dangling-abort-controller.js.map +1 -0
  250. package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts +11 -0
  251. package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts.map +1 -0
  252. package/dist/structural-rules/rules/SR016-unsafe-json-parse.js +187 -0
  253. package/dist/structural-rules/rules/SR016-unsafe-json-parse.js.map +1 -0
  254. package/dist/structural-rules/suppressions.d.ts +43 -0
  255. package/dist/structural-rules/suppressions.d.ts.map +1 -0
  256. package/dist/structural-rules/suppressions.js +115 -0
  257. package/dist/structural-rules/suppressions.js.map +1 -0
  258. package/dist/structural-rules/types.d.ts +43 -0
  259. package/dist/structural-rules/types.d.ts.map +1 -0
  260. package/dist/structural-rules/types.js +3 -0
  261. package/dist/structural-rules/types.js.map +1 -0
  262. package/dist/utils/advisory-signals.d.ts +5 -0
  263. package/dist/utils/advisory-signals.d.ts.map +1 -1
  264. package/dist/utils/advisory-signals.js +50 -12
  265. package/dist/utils/advisory-signals.js.map +1 -1
  266. package/dist/utils/ai-debt-budget.d.ts.map +1 -1
  267. package/dist/utils/ai-debt-budget.js +5 -2
  268. package/dist/utils/ai-debt-budget.js.map +1 -1
  269. package/dist/utils/brain-cache.d.ts +100 -0
  270. package/dist/utils/brain-cache.d.ts.map +1 -0
  271. package/dist/utils/brain-cache.js +346 -0
  272. package/dist/utils/brain-cache.js.map +1 -0
  273. package/dist/utils/cli-json.d.ts.map +1 -1
  274. package/dist/utils/cli-json.js +80 -12
  275. package/dist/utils/cli-json.js.map +1 -1
  276. package/dist/utils/execution-bus.d.ts +10 -0
  277. package/dist/utils/execution-bus.d.ts.map +1 -1
  278. package/dist/utils/execution-bus.js +16 -0
  279. package/dist/utils/execution-bus.js.map +1 -1
  280. package/dist/utils/governance-provenance.d.ts +95 -0
  281. package/dist/utils/governance-provenance.d.ts.map +1 -0
  282. package/dist/utils/governance-provenance.js +187 -0
  283. package/dist/utils/governance-provenance.js.map +1 -0
  284. package/dist/utils/pilot-metrics.d.ts +46 -0
  285. package/dist/utils/pilot-metrics.d.ts.map +1 -0
  286. package/dist/utils/pilot-metrics.js +240 -0
  287. package/dist/utils/pilot-metrics.js.map +1 -0
  288. package/dist/utils/policy-compiler.d.ts +6 -0
  289. package/dist/utils/policy-compiler.d.ts.map +1 -1
  290. package/dist/utils/policy-compiler.js +20 -0
  291. package/dist/utils/policy-compiler.js.map +1 -1
  292. package/dist/utils/replay-runtime.d.ts +34 -0
  293. package/dist/utils/replay-runtime.d.ts.map +1 -1
  294. package/dist/utils/replay-runtime.js +207 -0
  295. package/dist/utils/replay-runtime.js.map +1 -1
  296. package/dist/workspace/cross-repo-graph.d.ts +111 -0
  297. package/dist/workspace/cross-repo-graph.d.ts.map +1 -0
  298. package/dist/workspace/cross-repo-graph.js +450 -0
  299. package/dist/workspace/cross-repo-graph.js.map +1 -0
  300. package/dist/workspace/federated-context.d.ts +144 -0
  301. package/dist/workspace/federated-context.d.ts.map +1 -0
  302. package/dist/workspace/federated-context.js +347 -0
  303. package/dist/workspace/federated-context.js.map +1 -0
  304. package/dist/workspace/index.d.ts +38 -0
  305. package/dist/workspace/index.d.ts.map +1 -0
  306. package/dist/workspace/index.js +48 -0
  307. package/dist/workspace/index.js.map +1 -0
  308. package/package.json +10 -10
@@ -1,31 +1,143 @@
1
1
  "use strict";
2
- // Detection rules for deterministic patch generation.
3
- // Each function returns the 0-based line index of the first match, or null.
2
+ // Deterministic detection + classification rules for remediation patch generation.
3
+ // Each detector returns the 0-based line index of the first match, or null.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.classifyViolation = classifyViolation;
6
6
  exports.detectPattern = detectPattern;
7
- // ---------------------------------------------------------------------------
8
- // Classifiy a fix suggestion into a patchable pattern kind
9
- // ---------------------------------------------------------------------------
10
- function classifyViolation(issue, policy) {
11
- const combined = `${issue} ${policy}`.toLowerCase();
12
- if (combined.includes('todo') || combined.includes('fixme'))
13
- return 'todo_fixme';
14
- if (combined.includes('db') || combined.includes('database') ||
15
- combined.includes('query') || combined.includes('data access') ||
16
- combined.includes('direct access') ||
17
- policy.includes('layer') || policy.includes('layering') || policy.includes('db')) {
18
- return 'db_in_ui';
19
- }
20
- if (combined.includes('validation') || combined.includes('validate') ||
21
- combined.includes('input') || policy.includes('validation')) {
22
- return 'missing_validation';
23
- }
24
- return null;
25
- }
26
- // ---------------------------------------------------------------------------
27
- // Pattern detectors (work on pre-split line arrays)
28
- // ---------------------------------------------------------------------------
7
+ const CLASSIFICATION_RULES = [
8
+ {
9
+ kind: 'missing_validation',
10
+ keywords: ['missing_validation', 'missing validation', 'request validation', 'input validation', 'validate req.body', 'validate request'],
11
+ },
12
+ {
13
+ kind: 'missing_auth_middleware',
14
+ keywords: ['missing auth middleware', 'missing authentication middleware', 'auth middleware missing', 'unauthenticated route'],
15
+ },
16
+ {
17
+ kind: 'missing_role_checks',
18
+ keywords: ['missing role checks', 'missing role check', 'authorization missing', 'missing rbac', 'role guard'],
19
+ },
20
+ {
21
+ kind: 'unsafe_jwt_usage',
22
+ keywords: ['unsafe jwt', 'jwt misuse', 'weak jwt', 'jwt without safeguards'],
23
+ },
24
+ {
25
+ kind: 'missing_token_expiry',
26
+ keywords: ['missing token expiry', 'token expiry missing', 'jwt expiry missing', 'missing expiresin'],
27
+ },
28
+ {
29
+ kind: 'unsafe_secret_exposure',
30
+ keywords: ['unsafe secret exposure', 'secret exposure', 'secret leak', 'token leak', 'credential leak'],
31
+ },
32
+ {
33
+ kind: 'insecure_cookie_configuration',
34
+ keywords: ['insecure cookie', 'cookie insecure', 'missing httponly', 'missing secure cookie'],
35
+ },
36
+ {
37
+ kind: 'missing_csrf_protection',
38
+ keywords: ['missing csrf', 'csrf protection missing'],
39
+ },
40
+ {
41
+ kind: 'missing_rate_limiting',
42
+ keywords: ['missing rate limiting', 'rate limit missing', 'no rate limit'],
43
+ },
44
+ {
45
+ kind: 'missing_try_catch',
46
+ keywords: ['missing try/catch', 'missing try catch', 'unhandled exception path'],
47
+ },
48
+ {
49
+ kind: 'missing_timeout_handling',
50
+ keywords: ['missing timeout', 'timeout handling missing', 'no timeout'],
51
+ },
52
+ {
53
+ kind: 'unsafe_fetch_without_retries',
54
+ keywords: ['fetch without retries', 'missing retry', 'no retries for fetch'],
55
+ },
56
+ {
57
+ kind: 'missing_idempotency_keys',
58
+ keywords: ['missing idempotency key', 'idempotency missing'],
59
+ },
60
+ {
61
+ kind: 'unsafe_webhook_verification',
62
+ keywords: ['unsafe webhook verification', 'webhook verification missing', 'unverified webhook'],
63
+ },
64
+ {
65
+ kind: 'unsafe_serialization',
66
+ keywords: ['unsafe serialization', 'serialize unsafely', 'json stringify unsafe'],
67
+ },
68
+ {
69
+ kind: 'missing_transaction_wrappers',
70
+ keywords: ['missing transaction', 'transaction wrapper missing', 'no transaction wrapper'],
71
+ },
72
+ {
73
+ kind: 'unsafe_sql_string_concatenation',
74
+ keywords: ['unsafe sql string concatenation', 'sql string concat', 'raw sql concat'],
75
+ },
76
+ {
77
+ kind: 'unsafe_file_uploads',
78
+ keywords: ['unsafe file upload', 'file upload unsafe'],
79
+ },
80
+ {
81
+ kind: 'missing_mime_validation',
82
+ keywords: ['missing mime validation', 'mime validation missing'],
83
+ },
84
+ {
85
+ kind: 'missing_size_limits',
86
+ keywords: ['missing size limits', 'upload size limit missing'],
87
+ },
88
+ {
89
+ kind: 'unsafe_path_traversal_usage',
90
+ keywords: ['path traversal', 'unsafe path usage'],
91
+ },
92
+ {
93
+ kind: 'dangerous_useeffect_cleanup',
94
+ keywords: ['dangerous useeffect cleanup', 'useeffect cleanup missing', 'unsafe useeffect cleanup'],
95
+ },
96
+ {
97
+ kind: 'missing_abort_controller_cleanup',
98
+ keywords: ['abort controller cleanup missing', 'missing abort controller cleanup'],
99
+ },
100
+ {
101
+ kind: 'unsafe_inner_html_usage',
102
+ keywords: ['unsafe innerhtml', 'dangerous innerhtml', 'innerhtml usage'],
103
+ },
104
+ {
105
+ kind: 'unhandled_promise_chains',
106
+ keywords: ['unhandled promise', 'promise chain unhandled'],
107
+ },
108
+ {
109
+ kind: 'unsafe_websocket_lifecycle',
110
+ keywords: ['unsafe websocket lifecycle', 'websocket lifecycle missing cleanup'],
111
+ },
112
+ {
113
+ kind: 'missing_audit_logs',
114
+ keywords: ['missing audit logs', 'audit log missing'],
115
+ },
116
+ {
117
+ kind: 'unsafe_sensitive_logging',
118
+ keywords: ['unsafe sensitive logging', 'sensitive logging', 'logs secret', 'logs token'],
119
+ },
120
+ {
121
+ kind: 'missing_error_boundaries',
122
+ keywords: ['missing error boundaries', 'error boundary missing'],
123
+ },
124
+ {
125
+ kind: 'missing_tracing_wrappers',
126
+ keywords: ['missing tracing wrappers', 'tracing wrapper missing', 'missing tracing'],
127
+ },
128
+ {
129
+ kind: 'deprecated_package_migration_mappings',
130
+ keywords: ['deprecated package migration', 'deprecated package mapping', 'migration mapping deprecated'],
131
+ },
132
+ {
133
+ kind: 'unsafe_env_usage',
134
+ keywords: ['unsafe env usage', 'unsafe environment variable usage', 'process.env unsafe'],
135
+ },
136
+ {
137
+ kind: 'dangerous_hardcoded_credentials',
138
+ keywords: ['hardcoded credentials', 'hardcoded password', 'hardcoded secret', 'hardcoded token'],
139
+ },
140
+ ];
29
141
  const DB_ACCESS_PATTERNS = [
30
142
  /\bdb\s*\.\s*query\s*\(/,
31
143
  /\bdb\s*\.\s*execute\s*\(/,
@@ -47,31 +159,73 @@ const VALIDATION_PATTERNS = [
47
159
  /\bzod\s*\./,
48
160
  /\bajv\s*\.\s*compile/,
49
161
  ];
50
- // Matches the request/response parameter pair in a handler signature
51
- const REQ_HANDLER_RE = /\b(?:req|request)\s*,\s*(?:res|response|reply)\b/;
52
- // Matches direct access to incoming data without a prior validation call
162
+ // Matches both JavaScript `(req, res)` and TypeScript `(req: Request, res: Response)`
163
+ // TypeScript handlers include optional type annotations: (req: Type, res: Type)
164
+ const REQ_HANDLER_RE = /\b(?:req|request)\s*(?::\s*\w+)?\s*,\s*(?:res|response|reply)\s*(?::\s*\w+)?\b/;
53
165
  const REQ_INPUT_RE = /\b(?:req|request)\.(?:body|params|query)\b/;
54
166
  const TODO_FIXME_RE = /\/\/\s*(?:TODO|FIXME)\b/;
55
- // ---------------------------------------------------------------------------
56
- function findDbAccessLine(lines) {
57
- for (let i = 0; i < lines.length; i++) {
58
- const trimmed = lines[i].trimStart();
59
- // Skip lines that are themselves comments
60
- if (trimmed.startsWith('//') || trimmed.startsWith('*'))
167
+ // Updated to handle TypeScript-typed handler parameters (req: Request, res: Response)
168
+ const ROUTE_WITHOUT_AUTH_RE = /\b(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*(?:(?!requireAuth|authMiddleware|authenticate|withAuth).)*\b(?:async\s+)?\(?\s*(?:req|request)\s*(?::\s*\w+)?\s*,\s*(?:res|response|reply)/i;
169
+ const ROUTE_WITHOUT_RATE_LIMIT_RE = /\b(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*(?:(?!rateLimit|rateLimiter|throttle).)*\b(?:async\s+)?\(?\s*(?:req|request)\s*(?::\s*\w+)?\s*,\s*(?:res|response|reply)/i;
170
+ const JWT_SIGN_NO_EXPIRY_RE = /\bjwt\.sign\s*\((?:(?!expiresIn).)*\)/i;
171
+ const INNER_HTML_RE = /\.innerHTML\s*=/;
172
+ const SENSITIVE_LOG_RE = /\bconsole\.(?:log|info|warn|error)\s*\([^\n]*(?:authorization|password|secret|token|apiKey|api_key)[^\n]*\)/i;
173
+ const SQL_STRING_CONCAT_RE = /\b(?:query|execute|run)\s*\((?:\s*`[^`]*\$\{|[^\n]*\+[^\n]*)/i;
174
+ const HARDCODED_SECRET_RE = /\b(?:password|secret|token|api[_-]?key)\b\s*[:=]\s*['"`][^'"`]+['"`]/i;
175
+ const FETCH_WITHOUT_TIMEOUT_RE = /\bfetch\s*\((?![^\n]*signal:)/;
176
+ // Handles both JS `(req, res) =>` and TS `(req: Request, res: Response) =>`
177
+ const ROUTE_WITHOUT_TRY_CATCH_RE = /\b(?:async\s+)?\(?\s*(?:req|request)\s*(?::\s*\w+)?\s*,\s*(?:res|response|reply)\s*(?::\s*\w+)?\s*\)?\s*(?:,\s*\w+\s*(?::\s*\w+)?\s*)?\)?\s*(?:=>\s*\{|\{)/;
178
+ const MISSING_AUDIT_LOG_RE = /\b(?:create|update|delete|remove|transfer|refund|charge)\b/i;
179
+ const UNSAFE_ENV_USAGE_RE = /\bprocess\.env\.[A-Z0-9_]+\b/;
180
+ const GENERIC_LINE_MATCHERS = {
181
+ missing_role_checks: [/\b(?:req|request)\.user\b/i],
182
+ unsafe_jwt_usage: [/\bjwt\.(?:sign|verify)\s*\(/i],
183
+ unsafe_secret_exposure: [HARDCODED_SECRET_RE],
184
+ insecure_cookie_configuration: [/\b(?:res|response)\.cookie\s*\(/i],
185
+ missing_csrf_protection: [/\b(?:app|router)\.(?:post|put|patch|delete)\s*\(/i],
186
+ missing_timeout_handling: [FETCH_WITHOUT_TIMEOUT_RE],
187
+ unsafe_fetch_without_retries: [/\bfetch\s*\(/i],
188
+ missing_idempotency_keys: [/\b(?:charge|payment|checkout|order|transaction)\b/i],
189
+ unsafe_webhook_verification: [/\bwebhook\b/i],
190
+ unsafe_serialization: [/\bJSON\.stringify\s*\(/],
191
+ missing_transaction_wrappers: [/\b(?:create|update|delete)\b/i],
192
+ unsafe_file_uploads: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
193
+ missing_mime_validation: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
194
+ missing_size_limits: [/\b(?:multer|upload|req\.files|req\.file)\b/i],
195
+ unsafe_path_traversal_usage: [/\b(?:path\.join|path\.resolve|fs\.(?:readFile|writeFile|createReadStream|createWriteStream))\b/i],
196
+ dangerous_useeffect_cleanup: [/\buseEffect\s*\(\s*\(\s*\)\s*=>\s*\{/],
197
+ missing_abort_controller_cleanup: [/\bAbortController\s*\(/],
198
+ unhandled_promise_chains: [/\b\.then\s*\(/],
199
+ unsafe_websocket_lifecycle: [/\bnew\s+WebSocket\s*\(/],
200
+ missing_error_boundaries: [/\bReact\.(?:Suspense|Fragment)\b|<Route\b/i],
201
+ missing_tracing_wrappers: [/\b(?:handle|process|execute|run)\b/i],
202
+ deprecated_package_migration_mappings: [/\bdeprecated\b|\bmigration\b/i],
203
+ unsafe_env_usage: [UNSAFE_ENV_USAGE_RE],
204
+ dangerous_hardcoded_credentials: [HARDCODED_SECRET_RE],
205
+ };
206
+ function isCommentLine(line) {
207
+ const trimmed = line.trimStart();
208
+ return trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*');
209
+ }
210
+ function findLineByRegex(lines, patterns) {
211
+ for (let i = 0; i < lines.length; i += 1) {
212
+ if (isCommentLine(lines[i]))
61
213
  continue;
62
- if (DB_ACCESS_PATTERNS.some((re) => re.test(lines[i])))
214
+ if (patterns.some((re) => re.test(lines[i])))
63
215
  return i;
64
216
  }
65
217
  return null;
66
218
  }
219
+ function findDbAccessLine(lines) {
220
+ return findLineByRegex(lines, DB_ACCESS_PATTERNS);
221
+ }
67
222
  function findMissingValidationLine(lines) {
68
223
  let handlerStartIndex = -1;
69
- for (let i = 0; i < lines.length; i++) {
224
+ for (let i = 0; i < lines.length; i += 1) {
70
225
  if (REQ_HANDLER_RE.test(lines[i])) {
71
226
  handlerStartIndex = i;
72
227
  }
73
228
  if (handlerStartIndex !== -1 && REQ_INPUT_RE.test(lines[i])) {
74
- // Look backward from this line (within the handler) for a validation call
75
229
  const searchFrom = Math.max(handlerStartIndex, i - 30);
76
230
  const priorLines = lines.slice(searchFrom, i);
77
231
  const hasValidation = priorLines.some((l) => VALIDATION_PATTERNS.some((re) => re.test(l)));
@@ -82,18 +236,105 @@ function findMissingValidationLine(lines) {
82
236
  return null;
83
237
  }
84
238
  function findTodoLine(lines) {
85
- for (let i = 0; i < lines.length; i++) {
86
- if (TODO_FIXME_RE.test(lines[i]))
239
+ return findLineByRegex(lines, [TODO_FIXME_RE]);
240
+ }
241
+ function findMissingAuthMiddlewareLine(lines) {
242
+ return findLineByRegex(lines, [ROUTE_WITHOUT_AUTH_RE]);
243
+ }
244
+ function findMissingRateLimitingLine(lines) {
245
+ return findLineByRegex(lines, [ROUTE_WITHOUT_RATE_LIMIT_RE]);
246
+ }
247
+ function findMissingTokenExpiryLine(lines) {
248
+ return findLineByRegex(lines, [JWT_SIGN_NO_EXPIRY_RE]);
249
+ }
250
+ function findUnsafeInnerHtmlLine(lines) {
251
+ return findLineByRegex(lines, [INNER_HTML_RE]);
252
+ }
253
+ function findUnsafeSensitiveLoggingLine(lines) {
254
+ return findLineByRegex(lines, [SENSITIVE_LOG_RE]);
255
+ }
256
+ function findUnsafeSqlStringConcatLine(lines) {
257
+ return findLineByRegex(lines, [SQL_STRING_CONCAT_RE]);
258
+ }
259
+ function findMissingTryCatchLine(lines) {
260
+ for (let i = 0; i < lines.length; i += 1) {
261
+ const line = lines[i];
262
+ if (!ROUTE_WITHOUT_TRY_CATCH_RE.test(line))
263
+ continue;
264
+ const end = Math.min(lines.length - 1, i + 40);
265
+ const blockSlice = lines.slice(i, end + 1).join('\n');
266
+ if (blockSlice.includes('await ') && !blockSlice.includes('try {')) {
267
+ return i;
268
+ }
269
+ }
270
+ return null;
271
+ }
272
+ function findMissingAuditLogLine(lines) {
273
+ for (let i = 0; i < lines.length; i += 1) {
274
+ const line = lines[i];
275
+ if (isCommentLine(line))
276
+ continue;
277
+ if (!MISSING_AUDIT_LOG_RE.test(line))
278
+ continue;
279
+ const contextStart = Math.max(0, i - 6);
280
+ const context = lines.slice(contextStart, i + 1).join('\n');
281
+ if (!/audit|logger|telemetry|trace/i.test(context)) {
87
282
  return i;
283
+ }
284
+ }
285
+ return null;
286
+ }
287
+ function classifyViolation(issue, policy) {
288
+ const combined = `${issue} ${policy}`.toLowerCase();
289
+ if (combined.includes('todo') || combined.includes('fixme'))
290
+ return 'todo_fixme';
291
+ if (combined.includes('db')
292
+ || combined.includes('database')
293
+ || combined.includes('query')
294
+ || combined.includes('data access')
295
+ || combined.includes('direct access')
296
+ || combined.includes('layering')
297
+ || combined.includes('layer')) {
298
+ return 'db_in_ui';
299
+ }
300
+ for (const rule of CLASSIFICATION_RULES) {
301
+ if (rule.keywords.some((keyword) => combined.includes(keyword))) {
302
+ return rule.kind;
303
+ }
88
304
  }
89
305
  return null;
90
306
  }
91
307
  function detectPattern(content, kind) {
92
308
  const lines = content.split('\n');
93
309
  switch (kind) {
94
- case 'db_in_ui': return findDbAccessLine(lines);
95
- case 'missing_validation': return findMissingValidationLine(lines);
96
- case 'todo_fixme': return findTodoLine(lines);
310
+ case 'db_in_ui':
311
+ return findDbAccessLine(lines);
312
+ case 'missing_validation':
313
+ return findMissingValidationLine(lines);
314
+ case 'todo_fixme':
315
+ return findTodoLine(lines);
316
+ case 'missing_auth_middleware':
317
+ return findMissingAuthMiddlewareLine(lines);
318
+ case 'missing_rate_limiting':
319
+ return findMissingRateLimitingLine(lines);
320
+ case 'missing_token_expiry':
321
+ return findMissingTokenExpiryLine(lines);
322
+ case 'unsafe_inner_html_usage':
323
+ return findUnsafeInnerHtmlLine(lines);
324
+ case 'unsafe_sensitive_logging':
325
+ return findUnsafeSensitiveLoggingLine(lines);
326
+ case 'unsafe_sql_string_concatenation':
327
+ return findUnsafeSqlStringConcatLine(lines);
328
+ case 'missing_try_catch':
329
+ return findMissingTryCatchLine(lines);
330
+ case 'missing_audit_logs':
331
+ return findMissingAuditLogLine(lines);
332
+ default: {
333
+ const patterns = GENERIC_LINE_MATCHERS[kind];
334
+ if (!patterns || patterns.length === 0)
335
+ return null;
336
+ return findLineByRegex(lines, patterns);
337
+ }
97
338
  }
98
339
  }
99
340
  //# sourceMappingURL=patterns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/patch-engine/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type PatchTransactionReceipt } from './transaction';
2
+ export interface PersistRollbackSnapshotResult {
3
+ saved: boolean;
4
+ snapshotId: string | null;
5
+ reason: string | null;
6
+ }
7
+ export interface RollbackApplyResult {
8
+ success: boolean;
9
+ file: string;
10
+ snapshotId: string;
11
+ transactionId: string;
12
+ transactionHash: string;
13
+ status: 'rollback_applied' | 'rollback_rejected' | 'rollback_stale';
14
+ changed: boolean;
15
+ staleReason: string | null;
16
+ staleDetails: Record<string, unknown> | null;
17
+ message: string;
18
+ }
19
+ export declare function persistPatchRollbackSnapshot(input: {
20
+ cwd: string;
21
+ file: string;
22
+ beforeContent: string;
23
+ receipt: PatchTransactionReceipt;
24
+ retention?: number;
25
+ }): PersistRollbackSnapshotResult;
26
+ export declare function applyPatchRollback(input: {
27
+ cwd: string;
28
+ snapshotId: string;
29
+ file?: string;
30
+ }): RollbackApplyResult;
31
+ //# sourceMappingURL=rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/patch-engine/rollback.ts"],"names":[],"mappings":"AAUA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAyB7E,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAwFD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,6BAA6B,CAsChC;AAkBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,mBAAmB,CAqHtB"}