@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
@@ -5,47 +5,405 @@ const patterns_1 = require("./patterns");
5
5
  function leadingWhitespace(line) {
6
6
  return line.match(/^(\s*)/)?.[1] ?? '';
7
7
  }
8
- // Replace the matched DB call line with a service-layer redirect comment.
8
+ function extractRequestAccess(line) {
9
+ const match = line.match(/\b(req|request)\.(body|params|query)\b/);
10
+ if (!match)
11
+ return null;
12
+ return {
13
+ receiver: match[1],
14
+ field: match[2],
15
+ };
16
+ }
17
+ function detectResponseReceiver(lines, lineIndex) {
18
+ const start = Math.max(0, lineIndex - 40);
19
+ for (let idx = lineIndex; idx >= start; idx -= 1) {
20
+ const line = lines[idx];
21
+ const match = line.match(/\(\s*(?:req|request)\s*,\s*(res|response|reply)\b/);
22
+ if (match) {
23
+ return match[1];
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ function extractAccessedFields(lines, lineIndex, access) {
29
+ const stopIndex = Math.min(lines.length - 1, lineIndex + 60);
30
+ const fieldRegex = new RegExp(`\\b${access.receiver}\\.${access.field}\\.([A-Za-z_$][\\w$]*)\\b`, 'g');
31
+ const seen = new Set();
32
+ const out = [];
33
+ for (let idx = lineIndex; idx <= stopIndex; idx += 1) {
34
+ const line = lines[idx];
35
+ if (/\bcatch\s*\(/.test(line))
36
+ break;
37
+ fieldRegex.lastIndex = 0;
38
+ let match = fieldRegex.exec(line);
39
+ while (match) {
40
+ const fieldName = match[1];
41
+ if (!seen.has(fieldName)) {
42
+ seen.add(fieldName);
43
+ out.push(fieldName);
44
+ }
45
+ match = fieldRegex.exec(line);
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+ function buildMetadata(input) {
51
+ return {
52
+ recipeId: input.recipeId,
53
+ summary: input.summary,
54
+ expectedOutcome: input.expectedOutcome,
55
+ riskLevel: input.riskLevel,
56
+ deterministic: true,
57
+ requiresManualReview: input.requiresManualReview === true,
58
+ };
59
+ }
9
60
  function applyDbAccessFix(lines, lineIndex) {
10
61
  const indent = leadingWhitespace(lines[lineIndex]);
11
62
  const updated = [...lines];
12
63
  updated[lineIndex] = `${indent}// [NEURCODE] Move to service layer — replace direct DB call with a service method`;
13
- return updated;
64
+ return {
65
+ updatedContent: updated.join('\n'),
66
+ metadata: buildMetadata({
67
+ recipeId: 'db-service-boundary-placeholder.v1',
68
+ summary: 'Replaces direct DB access with deterministic service-boundary placeholder.',
69
+ expectedOutcome: 'Direct DB call is blocked until service-layer refactor is completed.',
70
+ riskLevel: 'medium',
71
+ requiresManualReview: true,
72
+ }),
73
+ };
14
74
  }
15
- // Insert a validation reminder line immediately before the req.body/params/query access.
16
75
  function applyValidationFix(lines, lineIndex) {
17
76
  const indent = leadingWhitespace(lines[lineIndex]);
18
- const comment = `${indent}// [NEURCODE] Add validation — e.g. const { error } = schema.validate(req.body); ` +
19
- `if (error) return res.status(400).json({ error: error.message });`;
77
+ const access = extractRequestAccess(lines[lineIndex]);
78
+ const receiver = access?.receiver ?? 'req';
79
+ const field = access?.field ?? 'body';
80
+ const responseReceiver = detectResponseReceiver(lines, lineIndex);
81
+ const requiredFields = extractAccessedFields(lines, lineIndex, { receiver, field });
82
+ const accessExpr = `${receiver}.${field}`;
83
+ const invalidErrorCode = field === 'body'
84
+ ? 'invalid_request_body'
85
+ : field === 'params'
86
+ ? 'invalid_request_params'
87
+ : 'invalid_request_query';
88
+ const missingErrorCode = field === 'body'
89
+ ? 'missing_required_body_fields'
90
+ : field === 'params'
91
+ ? 'missing_required_params_fields'
92
+ : 'missing_required_query_fields';
93
+ const guardLines = [
94
+ `${indent}if (!${accessExpr} || typeof ${accessExpr} !== 'object' || Array.isArray(${accessExpr})) {`,
95
+ ];
96
+ if (responseReceiver) {
97
+ guardLines.push(`${indent} return ${responseReceiver}.status(400).json({ error: '${invalidErrorCode}' });`);
98
+ }
99
+ else {
100
+ guardLines.push(`${indent} throw new Error('${invalidErrorCode}');`);
101
+ }
102
+ guardLines.push(`${indent}}`);
103
+ if (requiredFields.length > 0) {
104
+ const requiredFieldLiteral = `[${requiredFields.map((fieldName) => `'${fieldName}'`).join(', ')}]`;
105
+ guardLines.push(`${indent}const missingFields = ${requiredFieldLiteral}.filter((field) => ${accessExpr}[field] == null);`, `${indent}if (missingFields.length > 0) {`);
106
+ if (responseReceiver) {
107
+ guardLines.push(`${indent} return ${responseReceiver}.status(400).json({ error: '${missingErrorCode}', fields: missingFields });`);
108
+ }
109
+ else {
110
+ guardLines.push(`${indent} throw new Error('${missingErrorCode}');`);
111
+ }
112
+ guardLines.push(`${indent}}`);
113
+ }
20
114
  const updated = [...lines];
21
- updated.splice(lineIndex, 0, comment);
22
- return updated;
115
+ updated.splice(lineIndex, 0, ...guardLines);
116
+ return {
117
+ updatedContent: updated.join('\n'),
118
+ metadata: buildMetadata({
119
+ recipeId: 'api-validation-guard.v2',
120
+ summary: 'Adds deterministic API boundary validation before request input usage.',
121
+ expectedOutcome: 'Invalid request input returns HTTP 400 before business logic runs.',
122
+ riskLevel: 'low',
123
+ }),
124
+ };
23
125
  }
24
- // Remove the TODO/FIXME comment line entirely.
25
126
  function applyTodoRemoval(lines, lineIndex) {
26
127
  const updated = [...lines];
27
128
  updated.splice(lineIndex, 1);
28
- return updated;
129
+ return {
130
+ updatedContent: updated.join('\n'),
131
+ metadata: buildMetadata({
132
+ recipeId: 'todo-removal.v1',
133
+ summary: 'Removes TODO/FIXME marker flagged by governance policy.',
134
+ expectedOutcome: 'Marker debt signal is removed; implementation still requires review.',
135
+ riskLevel: 'medium',
136
+ requiresManualReview: true,
137
+ }),
138
+ };
139
+ }
140
+ function applyAuthMiddlewareFix(lines, lineIndex) {
141
+ const updated = [...lines];
142
+ const line = updated[lineIndex];
143
+ if (/requireAuth|authMiddleware|authenticate|withAuth/.test(line))
144
+ return null;
145
+ const routeMatch = line.match(/^(\s*(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*)(.*)$/i);
146
+ if (!routeMatch)
147
+ return null;
148
+ updated[lineIndex] = `${routeMatch[1]}requireAuth, ${routeMatch[2]}`;
149
+ return {
150
+ updatedContent: updated.join('\n'),
151
+ metadata: buildMetadata({
152
+ recipeId: 'route-auth-middleware.v1',
153
+ summary: 'Injects authentication middleware into route definition.',
154
+ expectedOutcome: 'Route requires authentication before handler execution.',
155
+ riskLevel: 'medium',
156
+ requiresManualReview: true,
157
+ }),
158
+ };
159
+ }
160
+ function applyRateLimitingFix(lines, lineIndex) {
161
+ const updated = [...lines];
162
+ const line = updated[lineIndex];
163
+ if (/rateLimit|rateLimiter|throttle/.test(line))
164
+ return null;
165
+ const routeMatch = line.match(/^(\s*(?:app|router)\.(?:get|post|put|patch|delete)\s*\(\s*[^,]+\s*,\s*)(.*)$/i);
166
+ if (!routeMatch)
167
+ return null;
168
+ updated[lineIndex] = `${routeMatch[1]}rateLimitGuard, ${routeMatch[2]}`;
169
+ return {
170
+ updatedContent: updated.join('\n'),
171
+ metadata: buildMetadata({
172
+ recipeId: 'route-rate-limit-middleware.v1',
173
+ summary: 'Injects deterministic rate-limiting middleware into route definition.',
174
+ expectedOutcome: 'Route is guarded from uncontrolled request bursts.',
175
+ riskLevel: 'medium',
176
+ requiresManualReview: true,
177
+ }),
178
+ };
179
+ }
180
+ function applyTokenExpiryFix(lines, lineIndex) {
181
+ const updated = [...lines];
182
+ const line = updated[lineIndex];
183
+ if (!/\bjwt\.sign\s*\(/i.test(line))
184
+ return null;
185
+ if (/expiresIn\s*:/i.test(line))
186
+ return null;
187
+ const replaced = line.replace(/\)\s*;?\s*$/, ", { expiresIn: '1h' });");
188
+ if (replaced === line)
189
+ return null;
190
+ updated[lineIndex] = replaced;
191
+ return {
192
+ updatedContent: updated.join('\n'),
193
+ metadata: buildMetadata({
194
+ recipeId: 'jwt-expiry-enforcement.v1',
195
+ summary: 'Adds deterministic default token expiry to jwt.sign usage.',
196
+ expectedOutcome: 'Issued tokens expire automatically instead of lasting indefinitely.',
197
+ riskLevel: 'medium',
198
+ requiresManualReview: true,
199
+ }),
200
+ };
201
+ }
202
+ function applyUnsafeInnerHtmlFix(lines, lineIndex) {
203
+ const updated = [...lines];
204
+ updated[lineIndex] = updated[lineIndex].replace(/\.innerHTML\s*=/, '.textContent =');
205
+ return {
206
+ updatedContent: updated.join('\n'),
207
+ metadata: buildMetadata({
208
+ recipeId: 'dom-innerhtml-to-textcontent.v1',
209
+ summary: 'Replaces unsafe innerHTML assignment with textContent assignment.',
210
+ expectedOutcome: 'DOM write becomes non-HTML rendering, reducing injection risk.',
211
+ riskLevel: 'low',
212
+ }),
213
+ };
214
+ }
215
+ function applyUnsafeSensitiveLoggingFix(lines, lineIndex) {
216
+ const updated = [...lines];
217
+ const indent = leadingWhitespace(updated[lineIndex]);
218
+ updated[lineIndex] = `${indent}console.warn('[NEURCODE] sensitive logging removed');`;
219
+ return {
220
+ updatedContent: updated.join('\n'),
221
+ metadata: buildMetadata({
222
+ recipeId: 'sensitive-log-redaction-placeholder.v1',
223
+ summary: 'Replaces sensitive logging line with deterministic redaction marker.',
224
+ expectedOutcome: 'Potential secret/token logging path is removed.',
225
+ riskLevel: 'medium',
226
+ requiresManualReview: true,
227
+ }),
228
+ };
229
+ }
230
+ function applyTimeoutHandlingFix(lines, lineIndex) {
231
+ const updated = [...lines];
232
+ const line = updated[lineIndex];
233
+ if (!/\bfetch\s*\(/.test(line))
234
+ return null;
235
+ if (/AbortSignal\.timeout|signal\s*:/.test(line))
236
+ return null;
237
+ let replaced = line;
238
+ const singleArgMatch = line.match(/\bfetch\s*\(\s*([^,()]+?)\s*\)/);
239
+ if (singleArgMatch) {
240
+ replaced = line.replace(/\bfetch\s*\(\s*([^,()]+?)\s*\)/, 'fetch($1, { signal: AbortSignal.timeout(10000) })');
241
+ }
242
+ else {
243
+ const twoArgMatch = line.match(/\bfetch\s*\(\s*([^,]+?)\s*,\s*([^)]+)\)/);
244
+ if (!twoArgMatch)
245
+ return null;
246
+ const urlArg = twoArgMatch[1].trim();
247
+ const optionsArg = twoArgMatch[2].trim();
248
+ replaced = line.replace(/\bfetch\s*\(\s*([^,]+?)\s*,\s*([^)]+)\)/, `fetch(${urlArg}, { ...(${optionsArg}), signal: (${optionsArg})?.signal ?? AbortSignal.timeout(10000) })`);
249
+ }
250
+ if (replaced === line)
251
+ return null;
252
+ updated[lineIndex] = replaced;
253
+ return {
254
+ updatedContent: updated.join('\n'),
255
+ metadata: buildMetadata({
256
+ recipeId: 'fetch-timeout-guard.v1',
257
+ summary: 'Adds deterministic timeout guard to fetch call.',
258
+ expectedOutcome: 'Outbound request aborts after timeout instead of hanging indefinitely.',
259
+ riskLevel: 'medium',
260
+ requiresManualReview: true,
261
+ }),
262
+ };
263
+ }
264
+ function applyRetryGuardFix(lines, lineIndex) {
265
+ const updated = [...lines];
266
+ const line = updated[lineIndex];
267
+ if (!/\bfetch\s*\(/.test(line))
268
+ return null;
269
+ if (/\bneurcodeFetchWithRetry\s*\(/.test(line))
270
+ return null;
271
+ const helperName = 'neurcodeFetchWithRetry';
272
+ const helperExists = updated.some((entry) => new RegExp(`\\b${helperName}\\b`).test(entry));
273
+ if (!helperExists) {
274
+ const helperLines = [
275
+ `const ${helperName} = async (operation, retries = 2) => {`,
276
+ ` let lastError = null;`,
277
+ ` for (let attempt = 0; attempt <= retries; attempt += 1) {`,
278
+ ` try {`,
279
+ ` return await operation();`,
280
+ ` } catch (error) {`,
281
+ ` lastError = error;`,
282
+ ` if (attempt === retries) break;`,
283
+ ` }`,
284
+ ` }`,
285
+ ` throw lastError instanceof Error ? lastError : new Error('retry_failed');`,
286
+ `};`,
287
+ ``,
288
+ ];
289
+ let insertionIndex = 0;
290
+ while (insertionIndex < updated.length && /^\s*import\s+/.test(updated[insertionIndex])) {
291
+ insertionIndex += 1;
292
+ }
293
+ updated.splice(insertionIndex, 0, ...helperLines);
294
+ }
295
+ const fetchCallMatch = line.match(/fetch\s*\((.*)\)\s*;?\s*$/);
296
+ if (!fetchCallMatch)
297
+ return null;
298
+ const hasSemicolon = /;\s*$/.test(line);
299
+ const replaced = line.replace(/fetch\s*\((.*)\)\s*;?\s*$/, `${helperName}(() => fetch($1), 2)${hasSemicolon ? ';' : ''}`);
300
+ if (replaced === line)
301
+ return null;
302
+ updated[lineIndex] = replaced;
303
+ return {
304
+ updatedContent: updated.join('\n'),
305
+ metadata: buildMetadata({
306
+ recipeId: 'fetch-retry-guard.v1',
307
+ summary: 'Wraps fetch call with deterministic retry guard.',
308
+ expectedOutcome: 'Transient network failures retry before failing the request path.',
309
+ riskLevel: 'medium',
310
+ requiresManualReview: true,
311
+ }),
312
+ };
313
+ }
314
+ function applyIdempotencyKeyFix(lines, lineIndex) {
315
+ const updated = [...lines];
316
+ const line = updated[lineIndex];
317
+ const indent = leadingWhitespace(line);
318
+ if (!/\b(?:charge|payment|checkout|order|transaction)\b/i.test(line))
319
+ return null;
320
+ if (updated.some((entry) => /idempotency[_-]?key/i.test(entry)))
321
+ return null;
322
+ const responseReceiver = detectResponseReceiver(lines, lineIndex);
323
+ const guardLines = [
324
+ `${indent}const neurcodeIdempotencyKey = req.headers?.['idempotency-key'] || req.headers?.['x-idempotency-key'];`,
325
+ `${indent}if (!neurcodeIdempotencyKey) {`,
326
+ responseReceiver
327
+ ? `${indent} return ${responseReceiver}.status(400).json({ error: 'missing_idempotency_key' });`
328
+ : `${indent} throw new Error('missing_idempotency_key');`,
329
+ `${indent}}`,
330
+ ];
331
+ updated.splice(lineIndex, 0, ...guardLines);
332
+ return {
333
+ updatedContent: updated.join('\n'),
334
+ metadata: buildMetadata({
335
+ recipeId: 'api-idempotency-key-guard.v1',
336
+ summary: 'Adds deterministic idempotency-key guard before payment/order side effects.',
337
+ expectedOutcome: 'Duplicate mutation requests without idempotency key are rejected.',
338
+ riskLevel: 'medium',
339
+ requiresManualReview: true,
340
+ }),
341
+ };
342
+ }
343
+ function applyUnsafeFileUploadFix(lines, lineIndex) {
344
+ const updated = [...lines];
345
+ const line = updated[lineIndex];
346
+ if (!/\b(?:req\.files|req\.file|upload|multer)\b/i.test(line))
347
+ return null;
348
+ if (updated.some((entry) => /invalid_upload_payload|allowedMimeTypes|maxUploadBytes/.test(entry)))
349
+ return null;
350
+ const indent = leadingWhitespace(line);
351
+ const responseReceiver = detectResponseReceiver(lines, lineIndex);
352
+ const guardLines = [
353
+ `${indent}const uploadedFiles = Array.isArray(req.files) ? req.files : (req.file ? [req.file] : []);`,
354
+ `${indent}const allowedMimeTypes = ['image/png', 'image/jpeg', 'application/pdf'];`,
355
+ `${indent}const maxUploadBytes = 5 * 1024 * 1024;`,
356
+ `${indent}const invalidUpload = uploadedFiles.find((file) => !allowedMimeTypes.includes(file?.mimetype) || Number(file?.size || 0) > maxUploadBytes);`,
357
+ `${indent}if (invalidUpload) {`,
358
+ responseReceiver
359
+ ? `${indent} return ${responseReceiver}.status(400).json({ error: 'invalid_upload_payload' });`
360
+ : `${indent} throw new Error('invalid_upload_payload');`,
361
+ `${indent}}`,
362
+ ];
363
+ updated.splice(lineIndex, 0, ...guardLines);
364
+ return {
365
+ updatedContent: updated.join('\n'),
366
+ metadata: buildMetadata({
367
+ recipeId: 'upload-mime-size-guard.v1',
368
+ summary: 'Adds deterministic upload MIME/size validation guard.',
369
+ expectedOutcome: 'Unsafe uploads are rejected before file handling logic executes.',
370
+ riskLevel: 'medium',
371
+ requiresManualReview: true,
372
+ }),
373
+ };
29
374
  }
30
375
  function generatePatch(input) {
31
376
  const lines = input.fileContent.split('\n');
32
377
  const lineIndex = (0, patterns_1.detectPattern)(input.fileContent, input.patternKind);
33
378
  if (lineIndex === null)
34
379
  return null;
35
- let updatedLines;
36
380
  switch (input.patternKind) {
37
381
  case 'db_in_ui':
38
- updatedLines = applyDbAccessFix(lines, lineIndex);
39
- break;
382
+ return applyDbAccessFix(lines, lineIndex);
40
383
  case 'missing_validation':
41
- updatedLines = applyValidationFix(lines, lineIndex);
42
- break;
384
+ return applyValidationFix(lines, lineIndex);
43
385
  case 'todo_fixme':
44
- updatedLines = applyTodoRemoval(lines, lineIndex);
45
- break;
386
+ return applyTodoRemoval(lines, lineIndex);
387
+ case 'missing_auth_middleware':
388
+ return applyAuthMiddlewareFix(lines, lineIndex);
389
+ case 'missing_rate_limiting':
390
+ return applyRateLimitingFix(lines, lineIndex);
391
+ case 'missing_token_expiry':
392
+ return applyTokenExpiryFix(lines, lineIndex);
393
+ case 'unsafe_inner_html_usage':
394
+ return applyUnsafeInnerHtmlFix(lines, lineIndex);
395
+ case 'unsafe_sensitive_logging':
396
+ return applyUnsafeSensitiveLoggingFix(lines, lineIndex);
397
+ case 'missing_timeout_handling':
398
+ return applyTimeoutHandlingFix(lines, lineIndex);
399
+ case 'unsafe_fetch_without_retries':
400
+ return applyRetryGuardFix(lines, lineIndex);
401
+ case 'missing_idempotency_keys':
402
+ return applyIdempotencyKeyFix(lines, lineIndex);
403
+ case 'unsafe_file_uploads':
404
+ return applyUnsafeFileUploadFix(lines, lineIndex);
46
405
  default:
47
406
  return null;
48
407
  }
49
- return { updatedContent: updatedLines.join('\n') };
50
408
  }
51
409
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/patch-engine/generator.ts"],"names":[],"mappings":";;AA4CA,sCAqBC;AAjED,yCAA6D;AAc7D,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,SAAS,gBAAgB,CAAC,KAAe,EAAE,SAAiB;IAC1D,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,MAAM,oFAAoF,CAAC;IACnH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yFAAyF;AACzF,SAAS,kBAAkB,CAAC,KAAe,EAAE,SAAiB;IAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GACX,GAAG,MAAM,mFAAmF;QAC5F,mEAAmE,CAAC;IACtE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+CAA+C;AAC/C,SAAS,gBAAgB,CAAC,KAAe,EAAE,SAAiB;IAC1D,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,aAAa,CAAC,KAAiB;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,YAAsB,CAAC;IAC3B,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC;QAC1B,KAAK,UAAU;YACb,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM;QACR,KAAK,oBAAoB;YACvB,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACpD,MAAM;QACR,KAAK,YAAY;YACf,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM;QACR;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/patch-engine/generator.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,43 @@
1
1
  import { type PatternKind } from './patterns';
2
- export type { PatternKind };
3
- export type PatchConfidence = 'high' | 'medium' | 'low';
2
+ import { type PatchRecipeMetadata } from './generator';
3
+ import { type PatchPreviewTokenPayload } from './transaction';
4
+ import { type PatchConfidence, type PatchValidationReport } from './safety';
5
+ export type { PatternKind, PatchConfidence, PatchValidationReport, PatchPreviewTokenPayload };
4
6
  export type SuggestionPatch = {
5
7
  file: string;
6
8
  diff: string;
7
9
  patchConfidence: PatchConfidence;
10
+ patternKind: PatternKind;
11
+ validation: PatchValidationReport;
12
+ recipe: PatchRecipeMetadata;
8
13
  };
14
+ export interface GeneratedPatchBundle {
15
+ updatedContent: string;
16
+ patternKind: PatternKind;
17
+ patchConfidence: PatchConfidence;
18
+ diff: string;
19
+ validation: PatchValidationReport;
20
+ previewToken: string;
21
+ patchHash: string;
22
+ recipe: PatchRecipeMetadata;
23
+ beforeHash: string;
24
+ afterHash: string;
25
+ }
9
26
  /**
10
27
  * Apply a unified diff (as produced by generateUnifiedDiff) to fileContent.
11
28
  *
12
- * Parses the single-hunk diff format, verifies every context and removal line
13
- * matches the current file, then reconstructs the updated content.
14
- *
15
- * Returns null when:
16
- * - no hunk header found
17
- * - a context or removal line does not match current file content (file changed)
29
+ * Parses a single-hunk diff format, verifies every context/removal line matches
30
+ * the current file, then reconstructs updated content.
18
31
  */
19
32
  export declare function applyUnifiedDiff(fileContent: string, diff: string): string | null;
20
33
  /**
21
- * Detect the first matching patchable pattern in fileContent and return the
22
- * updated content. Tries patterns in priority order: db_in_ui → missing_validation
23
- * → todo_fixme. Validates safety before returning.
34
+ * Deterministically build a patch bundle for the first matching remediation kind.
24
35
  *
25
- * Used by `neurcode patch --file` to apply a patch without needing suggestion metadata.
36
+ * Returns null when no deterministic recipe matches the target file.
26
37
  */
27
- export declare function applyFirstMatchingPatch(filePath: string, fileContent: string): {
28
- updatedContent: string;
29
- patternKind: PatternKind;
30
- patchConfidence: PatchConfidence;
31
- } | null;
38
+ export declare function applyFirstMatchingPatch(filePath: string, fileContent: string): GeneratedPatchBundle | null;
32
39
  /**
33
- * Given a fix suggestion and the current content of suggestion.file,
34
- * attempts to generate a deterministic, safety-validated code patch.
35
- *
36
- * Returns null when:
37
- * - the violation type has no patchable pattern
38
- * - the pattern is not found in the file content
39
- * - the generated patch produces no diff
40
- * - the patch fails the safety gate (isPatchSafe)
40
+ * Generate a deterministic patch for a specific verify/fix suggestion.
41
41
  */
42
42
  export declare function generatePatchForSuggestion(suggestion: {
43
43
  file: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patch-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAIjE,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAqCF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiEjF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CA0B/F;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3D,WAAW,EAAE,MAAM,GAClB,eAAe,GAAG,IAAI,CAuBxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patch-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAE9F,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,qBAAqB,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,qBAAqB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AA2HD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuDjF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,oBAAoB,GAAG,IAAI,CAW7B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3D,WAAW,EAAE,MAAM,GAClB,eAAe,GAAG,IAAI,CAoCxB"}