@jeger-ai/opengantry 3.2.5 → 3.3.0

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 (461) hide show
  1. package/README.md +10 -3
  2. package/dist/cli/commands/deps.d.ts +18 -0
  3. package/dist/cli/commands/deps.d.ts.map +1 -0
  4. package/dist/cli/commands/deps.js +63 -0
  5. package/dist/cli/commands/deps.js.map +1 -0
  6. package/dist/cli/commands/doctor.d.ts +3 -6
  7. package/dist/cli/commands/doctor.d.ts.map +1 -1
  8. package/dist/cli/commands/doctor.js +8 -1
  9. package/dist/cli/commands/doctor.js.map +1 -1
  10. package/dist/cli/commands/events-push.d.ts +9 -0
  11. package/dist/cli/commands/events-push.d.ts.map +1 -0
  12. package/dist/cli/commands/events-push.js +84 -0
  13. package/dist/cli/commands/events-push.js.map +1 -0
  14. package/dist/cli/commands/interrogate.js +3 -3
  15. package/dist/cli/commands/interrogate.js.map +1 -1
  16. package/dist/cli/commands/ledger.d.ts +24 -0
  17. package/dist/cli/commands/ledger.d.ts.map +1 -0
  18. package/dist/cli/commands/ledger.js +88 -0
  19. package/dist/cli/commands/ledger.js.map +1 -0
  20. package/dist/cli/commands/mission.d.ts +6 -0
  21. package/dist/cli/commands/mission.d.ts.map +1 -1
  22. package/dist/cli/commands/mission.js +43 -3
  23. package/dist/cli/commands/mission.js.map +1 -1
  24. package/dist/cli/commands/perimeter.d.ts.map +1 -1
  25. package/dist/cli/commands/perimeter.js +4 -0
  26. package/dist/cli/commands/perimeter.js.map +1 -1
  27. package/dist/cli/commands/policy.d.ts +10 -0
  28. package/dist/cli/commands/policy.d.ts.map +1 -0
  29. package/dist/cli/commands/policy.js +49 -0
  30. package/dist/cli/commands/policy.js.map +1 -0
  31. package/dist/cli/commands/report.d.ts +8 -0
  32. package/dist/cli/commands/report.d.ts.map +1 -0
  33. package/dist/cli/commands/report.js +23 -0
  34. package/dist/cli/commands/report.js.map +1 -0
  35. package/dist/cli/commands/tmvc-guard.d.ts.map +1 -1
  36. package/dist/cli/commands/tmvc-guard.js +20 -0
  37. package/dist/cli/commands/tmvc-guard.js.map +1 -1
  38. package/dist/cli/commands/triage.d.ts.map +1 -1
  39. package/dist/cli/commands/triage.js +2 -1
  40. package/dist/cli/commands/triage.js.map +1 -1
  41. package/dist/cli/commands/verify.d.ts.map +1 -1
  42. package/dist/cli/commands/verify.js +30 -11
  43. package/dist/cli/commands/verify.js.map +1 -1
  44. package/dist/cli/kernel.d.ts +10 -3
  45. package/dist/cli/kernel.d.ts.map +1 -1
  46. package/dist/cli/kernel.js +18 -2
  47. package/dist/cli/kernel.js.map +1 -1
  48. package/dist/cli/lib/adapter-preflight-checks.d.ts +55 -0
  49. package/dist/cli/lib/adapter-preflight-checks.d.ts.map +1 -0
  50. package/dist/cli/lib/adapter-preflight-checks.js +275 -0
  51. package/dist/cli/lib/adapter-preflight-checks.js.map +1 -0
  52. package/dist/cli/lib/atomic-fs.d.ts +3 -0
  53. package/dist/cli/lib/atomic-fs.d.ts.map +1 -1
  54. package/dist/cli/lib/atomic-fs.js +39 -0
  55. package/dist/cli/lib/atomic-fs.js.map +1 -1
  56. package/dist/cli/lib/attest-mission.d.ts.map +1 -1
  57. package/dist/cli/lib/attest-mission.js +7 -0
  58. package/dist/cli/lib/attest-mission.js.map +1 -1
  59. package/dist/cli/lib/break-glass.d.ts +1 -1
  60. package/dist/cli/lib/break-glass.d.ts.map +1 -1
  61. package/dist/cli/lib/break-glass.js +6 -0
  62. package/dist/cli/lib/break-glass.js.map +1 -1
  63. package/dist/cli/lib/command-boundary.d.ts +7 -3
  64. package/dist/cli/lib/command-boundary.d.ts.map +1 -1
  65. package/dist/cli/lib/command-boundary.js +20 -4
  66. package/dist/cli/lib/command-boundary.js.map +1 -1
  67. package/dist/cli/lib/constants.d.ts +15 -0
  68. package/dist/cli/lib/constants.d.ts.map +1 -1
  69. package/dist/cli/lib/constants.js +15 -0
  70. package/dist/cli/lib/constants.js.map +1 -1
  71. package/dist/cli/lib/context-feed-remediation.d.ts +2 -2
  72. package/dist/cli/lib/context-feed-remediation.d.ts.map +1 -1
  73. package/dist/cli/lib/context-feed-remediation.js +28 -26
  74. package/dist/cli/lib/context-feed-remediation.js.map +1 -1
  75. package/dist/cli/lib/context-feed-store.d.ts +10 -2
  76. package/dist/cli/lib/context-feed-store.d.ts.map +1 -1
  77. package/dist/cli/lib/context-feed-store.js +8 -28
  78. package/dist/cli/lib/context-feed-store.js.map +1 -1
  79. package/dist/cli/lib/defensive-profile-presets.d.ts +6 -0
  80. package/dist/cli/lib/defensive-profile-presets.d.ts.map +1 -1
  81. package/dist/cli/lib/defensive-profile-presets.js +15 -1
  82. package/dist/cli/lib/defensive-profile-presets.js.map +1 -1
  83. package/dist/cli/lib/deps/deps-fetch.d.ts +4 -0
  84. package/dist/cli/lib/deps/deps-fetch.d.ts.map +1 -0
  85. package/dist/cli/lib/deps/deps-fetch.js +16 -0
  86. package/dist/cli/lib/deps/deps-fetch.js.map +1 -0
  87. package/dist/cli/lib/deps/deps-resolve.d.ts +18 -0
  88. package/dist/cli/lib/deps/deps-resolve.d.ts.map +1 -0
  89. package/dist/cli/lib/deps/deps-resolve.js +66 -0
  90. package/dist/cli/lib/deps/deps-resolve.js.map +1 -0
  91. package/dist/cli/lib/deps/deps-slug.d.ts +5 -0
  92. package/dist/cli/lib/deps/deps-slug.d.ts.map +1 -0
  93. package/dist/cli/lib/deps/deps-slug.js +44 -0
  94. package/dist/cli/lib/deps/deps-slug.js.map +1 -0
  95. package/dist/cli/lib/doctor-adapter-preflight.d.ts +24 -0
  96. package/dist/cli/lib/doctor-adapter-preflight.d.ts.map +1 -0
  97. package/dist/cli/lib/doctor-adapter-preflight.js +98 -0
  98. package/dist/cli/lib/doctor-adapter-preflight.js.map +1 -0
  99. package/dist/cli/lib/doctor-core.d.ts +7 -1
  100. package/dist/cli/lib/doctor-core.d.ts.map +1 -1
  101. package/dist/cli/lib/doctor-core.js +36 -5
  102. package/dist/cli/lib/doctor-core.js.map +1 -1
  103. package/dist/cli/lib/doctor-integration.d.ts +2 -0
  104. package/dist/cli/lib/doctor-integration.d.ts.map +1 -1
  105. package/dist/cli/lib/doctor-integration.js +4 -2
  106. package/dist/cli/lib/doctor-integration.js.map +1 -1
  107. package/dist/cli/lib/doctor-preflight/eslint.d.ts +4 -0
  108. package/dist/cli/lib/doctor-preflight/eslint.d.ts.map +1 -0
  109. package/dist/cli/lib/doctor-preflight/eslint.js +41 -0
  110. package/dist/cli/lib/doctor-preflight/eslint.js.map +1 -0
  111. package/dist/cli/lib/doctor-preflight/index.d.ts +3 -0
  112. package/dist/cli/lib/doctor-preflight/index.d.ts.map +1 -0
  113. package/dist/cli/lib/doctor-preflight/index.js +3 -0
  114. package/dist/cli/lib/doctor-preflight/index.js.map +1 -0
  115. package/dist/cli/lib/doctor-preflight/tsc.d.ts +4 -0
  116. package/dist/cli/lib/doctor-preflight/tsc.d.ts.map +1 -0
  117. package/dist/cli/lib/doctor-preflight/tsc.js +42 -0
  118. package/dist/cli/lib/doctor-preflight/tsc.js.map +1 -0
  119. package/dist/cli/lib/doctor-substrate.d.ts +2 -2
  120. package/dist/cli/lib/doctor-substrate.d.ts.map +1 -1
  121. package/dist/cli/lib/doctor-types.d.ts +4 -4
  122. package/dist/cli/lib/doctor-types.d.ts.map +1 -1
  123. package/dist/cli/lib/draft-token.d.ts +3 -0
  124. package/dist/cli/lib/draft-token.d.ts.map +1 -1
  125. package/dist/cli/lib/draft-token.js +7 -0
  126. package/dist/cli/lib/draft-token.js.map +1 -1
  127. package/dist/cli/lib/event-spool.d.ts +17 -0
  128. package/dist/cli/lib/event-spool.d.ts.map +1 -0
  129. package/dist/cli/lib/event-spool.js +57 -0
  130. package/dist/cli/lib/event-spool.js.map +1 -0
  131. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts +41 -0
  132. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts.map +1 -0
  133. package/dist/cli/lib/gate-adapters/adapter-findings.js +99 -0
  134. package/dist/cli/lib/gate-adapters/adapter-findings.js.map +1 -0
  135. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts +14 -0
  136. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts.map +1 -0
  137. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js +63 -0
  138. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js.map +1 -0
  139. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts +10 -0
  140. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts.map +1 -0
  141. package/dist/cli/lib/gate-adapters/gate-adapter-id.js +12 -0
  142. package/dist/cli/lib/gate-adapters/gate-adapter-id.js.map +1 -0
  143. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts +17 -0
  144. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts.map +1 -0
  145. package/dist/cli/lib/gate-adapters/gate-adapter-types.js +2 -0
  146. package/dist/cli/lib/gate-adapters/gate-adapter-types.js.map +1 -0
  147. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts +4 -0
  148. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts.map +1 -0
  149. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js +12 -0
  150. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js.map +1 -0
  151. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts +5 -0
  152. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts.map +1 -0
  153. package/dist/cli/lib/gate-adapters/parsing-adapter.js +13 -0
  154. package/dist/cli/lib/gate-adapters/parsing-adapter.js.map +1 -0
  155. package/dist/cli/lib/gate-adapters/registry.d.ts +6 -0
  156. package/dist/cli/lib/gate-adapters/registry.d.ts.map +1 -0
  157. package/dist/cli/lib/gate-adapters/registry.js +13 -0
  158. package/dist/cli/lib/gate-adapters/registry.js.map +1 -0
  159. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts +36 -0
  160. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts.map +1 -0
  161. package/dist/cli/lib/gate-adapters/spawn-stream-core.js +99 -0
  162. package/dist/cli/lib/gate-adapters/spawn-stream-core.js.map +1 -0
  163. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts +16 -0
  164. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts.map +1 -0
  165. package/dist/cli/lib/gate-adapters/tsc-adapter.js +51 -0
  166. package/dist/cli/lib/gate-adapters/tsc-adapter.js.map +1 -0
  167. package/dist/cli/lib/gate-log-writer.d.ts +13 -0
  168. package/dist/cli/lib/gate-log-writer.d.ts.map +1 -0
  169. package/dist/cli/lib/gate-log-writer.js +64 -0
  170. package/dist/cli/lib/gate-log-writer.js.map +1 -0
  171. package/dist/cli/lib/gate.d.ts +2 -0
  172. package/dist/cli/lib/gate.d.ts.map +1 -1
  173. package/dist/cli/lib/gate.js +2 -2
  174. package/dist/cli/lib/gate.js.map +1 -1
  175. package/dist/cli/lib/git-metrics.d.ts +12 -0
  176. package/dist/cli/lib/git-metrics.d.ts.map +1 -1
  177. package/dist/cli/lib/git-metrics.js +34 -11
  178. package/dist/cli/lib/git-metrics.js.map +1 -1
  179. package/dist/cli/lib/git.d.ts +8 -2
  180. package/dist/cli/lib/git.d.ts.map +1 -1
  181. package/dist/cli/lib/git.js +14 -7
  182. package/dist/cli/lib/git.js.map +1 -1
  183. package/dist/cli/lib/gxt-config.d.ts +9 -0
  184. package/dist/cli/lib/gxt-config.d.ts.map +1 -1
  185. package/dist/cli/lib/gxt-config.js +16 -0
  186. package/dist/cli/lib/gxt-config.js.map +1 -1
  187. package/dist/cli/lib/gxt-error-codes.d.ts +13 -0
  188. package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
  189. package/dist/cli/lib/gxt-error-codes.js +13 -0
  190. package/dist/cli/lib/gxt-error-codes.js.map +1 -1
  191. package/dist/cli/lib/ingest-wait.d.ts +21 -0
  192. package/dist/cli/lib/ingest-wait.d.ts.map +1 -0
  193. package/dist/cli/lib/ingest-wait.js +24 -0
  194. package/dist/cli/lib/ingest-wait.js.map +1 -0
  195. package/dist/cli/lib/init-tutorial.js +3 -4
  196. package/dist/cli/lib/init-tutorial.js.map +1 -1
  197. package/dist/cli/lib/kpi-scan.js +5 -1
  198. package/dist/cli/lib/kpi-scan.js.map +1 -1
  199. package/dist/cli/lib/ledger/ledger-append.d.ts +14 -0
  200. package/dist/cli/lib/ledger/ledger-append.d.ts.map +1 -0
  201. package/dist/cli/lib/ledger/ledger-append.js +63 -0
  202. package/dist/cli/lib/ledger/ledger-append.js.map +1 -0
  203. package/dist/cli/lib/ledger/ledger-chain.d.ts +24 -0
  204. package/dist/cli/lib/ledger/ledger-chain.d.ts.map +1 -0
  205. package/dist/cli/lib/ledger/ledger-chain.js +101 -0
  206. package/dist/cli/lib/ledger/ledger-chain.js.map +1 -0
  207. package/dist/cli/lib/ledger/ledger-entry.d.ts +79 -0
  208. package/dist/cli/lib/ledger/ledger-entry.d.ts.map +1 -0
  209. package/dist/cli/lib/ledger/ledger-entry.js +36 -0
  210. package/dist/cli/lib/ledger/ledger-entry.js.map +1 -0
  211. package/dist/cli/lib/ledger/ledger-export.d.ts +28 -0
  212. package/dist/cli/lib/ledger/ledger-export.d.ts.map +1 -0
  213. package/dist/cli/lib/ledger/ledger-export.js +36 -0
  214. package/dist/cli/lib/ledger/ledger-export.js.map +1 -0
  215. package/dist/cli/lib/legislate-gate-options.d.ts +3 -4
  216. package/dist/cli/lib/legislate-gate-options.d.ts.map +1 -1
  217. package/dist/cli/lib/legislate-gate-options.js +9 -4
  218. package/dist/cli/lib/legislate-gate-options.js.map +1 -1
  219. package/dist/cli/lib/legislate-policy-warn.d.ts +3 -0
  220. package/dist/cli/lib/legislate-policy-warn.d.ts.map +1 -0
  221. package/dist/cli/lib/legislate-policy-warn.js +17 -0
  222. package/dist/cli/lib/legislate-policy-warn.js.map +1 -0
  223. package/dist/cli/lib/legislate.d.ts +3 -1
  224. package/dist/cli/lib/legislate.d.ts.map +1 -1
  225. package/dist/cli/lib/legislate.js +14 -12
  226. package/dist/cli/lib/legislate.js.map +1 -1
  227. package/dist/cli/lib/mcp-doctor.d.ts +18 -0
  228. package/dist/cli/lib/mcp-doctor.d.ts.map +1 -0
  229. package/dist/cli/lib/mcp-doctor.js +35 -0
  230. package/dist/cli/lib/mcp-doctor.js.map +1 -0
  231. package/dist/cli/lib/mcp-draft-legislation.d.ts.map +1 -1
  232. package/dist/cli/lib/mcp-draft-legislation.js +12 -7
  233. package/dist/cli/lib/mcp-draft-legislation.js.map +1 -1
  234. package/dist/cli/lib/mcp-execute-legislation.d.ts.map +1 -1
  235. package/dist/cli/lib/mcp-execute-legislation.js +1 -0
  236. package/dist/cli/lib/mcp-execute-legislation.js.map +1 -1
  237. package/dist/cli/lib/mcp-governance-shared.d.ts +3 -1
  238. package/dist/cli/lib/mcp-governance-shared.d.ts.map +1 -1
  239. package/dist/cli/lib/mcp-governance-shared.js.map +1 -1
  240. package/dist/cli/lib/mcp-interrogate.js +3 -3
  241. package/dist/cli/lib/mcp-interrogate.js.map +1 -1
  242. package/dist/cli/lib/mcp-org.d.ts +19 -0
  243. package/dist/cli/lib/mcp-org.d.ts.map +1 -0
  244. package/dist/cli/lib/mcp-org.js +51 -0
  245. package/dist/cli/lib/mcp-org.js.map +1 -0
  246. package/dist/cli/lib/mcp-runtime.d.ts +1 -1
  247. package/dist/cli/lib/mcp-runtime.d.ts.map +1 -1
  248. package/dist/cli/lib/mcp-runtime.js +1 -1
  249. package/dist/cli/lib/mcp-runtime.js.map +1 -1
  250. package/dist/cli/lib/mcp-start-orchestration.d.ts.map +1 -1
  251. package/dist/cli/lib/mcp-start-orchestration.js +1 -0
  252. package/dist/cli/lib/mcp-start-orchestration.js.map +1 -1
  253. package/dist/cli/lib/mcp-tools-register.d.ts.map +1 -1
  254. package/dist/cli/lib/mcp-tools-register.js +90 -17
  255. package/dist/cli/lib/mcp-tools-register.js.map +1 -1
  256. package/dist/cli/lib/mission-changed.d.ts +27 -0
  257. package/dist/cli/lib/mission-changed.d.ts.map +1 -0
  258. package/dist/cli/lib/mission-changed.js +107 -0
  259. package/dist/cli/lib/mission-changed.js.map +1 -0
  260. package/dist/cli/lib/missions/formatter.d.ts +1 -1
  261. package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
  262. package/dist/cli/lib/missions/formatter.js +3 -0
  263. package/dist/cli/lib/missions/formatter.js.map +1 -1
  264. package/dist/cli/lib/missions/parser.d.ts +3 -1
  265. package/dist/cli/lib/missions/parser.d.ts.map +1 -1
  266. package/dist/cli/lib/missions/parser.js +16 -0
  267. package/dist/cli/lib/missions/parser.js.map +1 -1
  268. package/dist/cli/lib/msn-allocate.d.ts.map +1 -1
  269. package/dist/cli/lib/msn-allocate.js +17 -24
  270. package/dist/cli/lib/msn-allocate.js.map +1 -1
  271. package/dist/cli/lib/planner-signature.d.ts +7 -0
  272. package/dist/cli/lib/planner-signature.d.ts.map +1 -1
  273. package/dist/cli/lib/planner-signature.js +18 -1
  274. package/dist/cli/lib/planner-signature.js.map +1 -1
  275. package/dist/cli/lib/policy/policy-bundle.d.ts +6 -0
  276. package/dist/cli/lib/policy/policy-bundle.d.ts.map +1 -0
  277. package/dist/cli/lib/policy/policy-bundle.js +62 -0
  278. package/dist/cli/lib/policy/policy-bundle.js.map +1 -0
  279. package/dist/cli/lib/policy/policy-doctor.d.ts +4 -0
  280. package/dist/cli/lib/policy/policy-doctor.d.ts.map +1 -0
  281. package/dist/cli/lib/policy/policy-doctor.js +34 -0
  282. package/dist/cli/lib/policy/policy-doctor.js.map +1 -0
  283. package/dist/cli/lib/policy/policy-fetch.d.ts +10 -0
  284. package/dist/cli/lib/policy/policy-fetch.d.ts.map +1 -0
  285. package/dist/cli/lib/policy/policy-fetch.js +78 -0
  286. package/dist/cli/lib/policy/policy-fetch.js.map +1 -0
  287. package/dist/cli/lib/policy/policy-resolve.d.ts +38 -0
  288. package/dist/cli/lib/policy/policy-resolve.d.ts.map +1 -0
  289. package/dist/cli/lib/policy/policy-resolve.js +194 -0
  290. package/dist/cli/lib/policy/policy-resolve.js.map +1 -0
  291. package/dist/cli/lib/policy/policy-types.d.ts +76 -0
  292. package/dist/cli/lib/policy/policy-types.d.ts.map +1 -0
  293. package/dist/cli/lib/policy/policy-types.js +3 -0
  294. package/dist/cli/lib/policy/policy-types.js.map +1 -0
  295. package/dist/cli/lib/policy-digest-doctor.d.ts +1 -0
  296. package/dist/cli/lib/policy-digest-doctor.d.ts.map +1 -1
  297. package/dist/cli/lib/policy-digest-doctor.js +4 -2
  298. package/dist/cli/lib/policy-digest-doctor.js.map +1 -1
  299. package/dist/cli/lib/report-demo-fixtures.d.ts +8 -0
  300. package/dist/cli/lib/report-demo-fixtures.d.ts.map +1 -0
  301. package/dist/cli/lib/report-demo-fixtures.js +48 -0
  302. package/dist/cli/lib/report-demo-fixtures.js.map +1 -0
  303. package/dist/cli/lib/report-demo-mode.d.ts +8 -0
  304. package/dist/cli/lib/report-demo-mode.d.ts.map +1 -0
  305. package/dist/cli/lib/report-demo-mode.js +33 -0
  306. package/dist/cli/lib/report-demo-mode.js.map +1 -0
  307. package/dist/cli/lib/report-overview-projector.d.ts +53 -0
  308. package/dist/cli/lib/report-overview-projector.d.ts.map +1 -0
  309. package/dist/cli/lib/report-overview-projector.js +179 -0
  310. package/dist/cli/lib/report-overview-projector.js.map +1 -0
  311. package/dist/cli/lib/report-projector.d.ts +60 -0
  312. package/dist/cli/lib/report-projector.d.ts.map +1 -0
  313. package/dist/cli/lib/report-projector.js +166 -0
  314. package/dist/cli/lib/report-projector.js.map +1 -0
  315. package/dist/cli/lib/report-server.d.ts +20 -0
  316. package/dist/cli/lib/report-server.d.ts.map +1 -0
  317. package/dist/cli/lib/report-server.js +221 -0
  318. package/dist/cli/lib/report-server.js.map +1 -0
  319. package/dist/cli/lib/report-template-css.d.ts +4 -0
  320. package/dist/cli/lib/report-template-css.d.ts.map +1 -0
  321. package/dist/cli/lib/report-template-css.js +196 -0
  322. package/dist/cli/lib/report-template-css.js.map +1 -0
  323. package/dist/cli/lib/report-template-html.d.ts +6 -0
  324. package/dist/cli/lib/report-template-html.d.ts.map +1 -0
  325. package/dist/cli/lib/report-template-html.js +189 -0
  326. package/dist/cli/lib/report-template-html.js.map +1 -0
  327. package/dist/cli/lib/report-template-overview.d.ts +3 -0
  328. package/dist/cli/lib/report-template-overview.d.ts.map +1 -0
  329. package/dist/cli/lib/report-template-overview.js +200 -0
  330. package/dist/cli/lib/report-template-overview.js.map +1 -0
  331. package/dist/cli/lib/report-template-shared.d.ts +8 -0
  332. package/dist/cli/lib/report-template-shared.d.ts.map +1 -0
  333. package/dist/cli/lib/report-template-shared.js +52 -0
  334. package/dist/cli/lib/report-template-shared.js.map +1 -0
  335. package/dist/cli/lib/runtime-exec.d.ts.map +1 -1
  336. package/dist/cli/lib/runtime-exec.js +1 -1
  337. package/dist/cli/lib/runtime-exec.js.map +1 -1
  338. package/dist/cli/lib/start-orchestration.d.ts +2 -1
  339. package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
  340. package/dist/cli/lib/start-orchestration.js +5 -3
  341. package/dist/cli/lib/start-orchestration.js.map +1 -1
  342. package/dist/cli/lib/surgeons/banned-import.js +1 -1
  343. package/dist/cli/lib/surgeons/banned-import.js.map +1 -1
  344. package/dist/cli/lib/surgeons/import-layer.d.ts.map +1 -1
  345. package/dist/cli/lib/surgeons/import-layer.js +1 -1
  346. package/dist/cli/lib/surgeons/import-layer.js.map +1 -1
  347. package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
  348. package/dist/cli/lib/surgeons/registry.js +2 -4
  349. package/dist/cli/lib/surgeons/registry.js.map +1 -1
  350. package/dist/cli/lib/telemetry-log.d.ts +1 -1
  351. package/dist/cli/lib/telemetry-log.d.ts.map +1 -1
  352. package/dist/cli/lib/telemetry-log.js +14 -1
  353. package/dist/cli/lib/telemetry-log.js.map +1 -1
  354. package/dist/cli/lib/types.d.ts +23 -0
  355. package/dist/cli/lib/types.d.ts.map +1 -1
  356. package/dist/cli/lib/types.js +5 -1
  357. package/dist/cli/lib/types.js.map +1 -1
  358. package/dist/cli/lib/verify-engine.d.ts +7 -3
  359. package/dist/cli/lib/verify-engine.d.ts.map +1 -1
  360. package/dist/cli/lib/verify-engine.js +83 -181
  361. package/dist/cli/lib/verify-engine.js.map +1 -1
  362. package/dist/cli/lib/verify-evidence-snippet.d.ts +7 -0
  363. package/dist/cli/lib/verify-evidence-snippet.d.ts.map +1 -0
  364. package/dist/cli/lib/verify-evidence-snippet.js +29 -0
  365. package/dist/cli/lib/verify-evidence-snippet.js.map +1 -0
  366. package/dist/cli/lib/verify-export.d.ts.map +1 -1
  367. package/dist/cli/lib/verify-export.js +18 -2
  368. package/dist/cli/lib/verify-export.js.map +1 -1
  369. package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
  370. package/dist/cli/lib/verify-failure-normalize.js +20 -4
  371. package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
  372. package/dist/cli/lib/verify-failure.d.ts +24 -5
  373. package/dist/cli/lib/verify-failure.d.ts.map +1 -1
  374. package/dist/cli/lib/verify-finding-fingerprint.d.ts +26 -0
  375. package/dist/cli/lib/verify-finding-fingerprint.d.ts.map +1 -0
  376. package/dist/cli/lib/verify-finding-fingerprint.js +117 -0
  377. package/dist/cli/lib/verify-finding-fingerprint.js.map +1 -0
  378. package/dist/cli/lib/verify-finding-gate-projector.d.ts +4 -0
  379. package/dist/cli/lib/verify-finding-gate-projector.d.ts.map +1 -0
  380. package/dist/cli/lib/verify-finding-gate-projector.js +31 -0
  381. package/dist/cli/lib/verify-finding-gate-projector.js.map +1 -0
  382. package/dist/cli/lib/verify-finding.d.ts +17 -4
  383. package/dist/cli/lib/verify-finding.d.ts.map +1 -1
  384. package/dist/cli/lib/verify-finding.js +9 -3
  385. package/dist/cli/lib/verify-finding.js.map +1 -1
  386. package/dist/cli/lib/verify-hints.d.ts.map +1 -1
  387. package/dist/cli/lib/verify-hints.js +14 -3
  388. package/dist/cli/lib/verify-hints.js.map +1 -1
  389. package/dist/cli/lib/verify-options.d.ts +6 -0
  390. package/dist/cli/lib/verify-options.d.ts.map +1 -1
  391. package/dist/cli/lib/verify-org-phases.d.ts +18 -0
  392. package/dist/cli/lib/verify-org-phases.d.ts.map +1 -0
  393. package/dist/cli/lib/verify-org-phases.js +61 -0
  394. package/dist/cli/lib/verify-org-phases.js.map +1 -0
  395. package/dist/cli/lib/verify-payload.d.ts +5 -4
  396. package/dist/cli/lib/verify-payload.d.ts.map +1 -1
  397. package/dist/cli/lib/verify-payload.js +59 -38
  398. package/dist/cli/lib/verify-payload.js.map +1 -1
  399. package/dist/cli/lib/verify-phase-clock.d.ts +17 -0
  400. package/dist/cli/lib/verify-phase-clock.d.ts.map +1 -0
  401. package/dist/cli/lib/verify-phase-clock.js +52 -0
  402. package/dist/cli/lib/verify-phase-clock.js.map +1 -0
  403. package/dist/cli/lib/verify-phase-steps.d.ts +61 -0
  404. package/dist/cli/lib/verify-phase-steps.d.ts.map +1 -0
  405. package/dist/cli/lib/verify-phase-steps.js +167 -0
  406. package/dist/cli/lib/verify-phase-steps.js.map +1 -0
  407. package/dist/cli/lib/verify-presenters.d.ts +3 -0
  408. package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
  409. package/dist/cli/lib/verify-presenters.js +102 -18
  410. package/dist/cli/lib/verify-presenters.js.map +1 -1
  411. package/dist/cli/lib/verify-remediation-pipeline.d.ts +36 -0
  412. package/dist/cli/lib/verify-remediation-pipeline.d.ts.map +1 -0
  413. package/dist/cli/lib/verify-remediation-pipeline.js +99 -0
  414. package/dist/cli/lib/verify-remediation-pipeline.js.map +1 -0
  415. package/dist/cli/lib/verify-run-ring.d.ts +56 -0
  416. package/dist/cli/lib/verify-run-ring.d.ts.map +1 -0
  417. package/dist/cli/lib/verify-run-ring.js +165 -0
  418. package/dist/cli/lib/verify-run-ring.js.map +1 -0
  419. package/dist/cli/lib/verify-run.d.ts +2 -2
  420. package/dist/cli/lib/verify-run.d.ts.map +1 -1
  421. package/dist/cli/lib/verify-run.js +63 -19
  422. package/dist/cli/lib/verify-run.js.map +1 -1
  423. package/dist/cli/lib/version.gen.d.ts +1 -1
  424. package/dist/cli/lib/version.gen.js +1 -1
  425. package/dist/cli/lib/virtual-scratch-store.d.ts.map +1 -1
  426. package/dist/cli/lib/virtual-scratch-store.js +2 -16
  427. package/dist/cli/lib/virtual-scratch-store.js.map +1 -1
  428. package/dist/cli/program-core.d.ts +1 -1
  429. package/dist/cli/program-core.d.ts.map +1 -1
  430. package/dist/cli/program-core.js +79 -5
  431. package/dist/cli/program-core.js.map +1 -1
  432. package/dist/cli/program-mission.d.ts.map +1 -1
  433. package/dist/cli/program-mission.js +59 -35
  434. package/dist/cli/program-mission.js.map +1 -1
  435. package/dist/cli/program-org.d.ts +3 -0
  436. package/dist/cli/program-org.d.ts.map +1 -0
  437. package/dist/cli/program-org.js +119 -0
  438. package/dist/cli/program-org.js.map +1 -0
  439. package/dist/cli/program-workflow.d.ts +2 -1
  440. package/dist/cli/program-workflow.d.ts.map +1 -1
  441. package/dist/cli/program-workflow.js +54 -3
  442. package/dist/cli/program-workflow.js.map +1 -1
  443. package/dist/cli/program.d.ts.map +1 -1
  444. package/dist/cli/program.js +11 -0
  445. package/dist/cli/program.js.map +1 -1
  446. package/package.json +2 -1
  447. package/templates/.gitagent/config.json +4 -0
  448. package/templates/.gitagent/foreman/MANIFEST.json +1 -0
  449. package/templates/.gitagent/foreman/PLANNER.signing.pub +3 -0
  450. package/templates/.gitagent/foreman/POLICY.pointer.json +11 -0
  451. package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
  452. package/templates/.gitagent/planner/MISSION.schema.yaml +51 -0
  453. package/templates/.gitagent/planner/ORG-POLICY.schema.yaml +174 -0
  454. package/templates/.gitagent/planner/RULES.md +36 -2
  455. package/templates/.github/workflows/gxt-attest-ingest.yml +82 -6
  456. package/templates/.github/workflows/gxt-validate.yml +33 -0
  457. package/templates/.gitignore.gxt +1 -0
  458. package/templates/integrations/asset-catalog.json +2 -0
  459. package/templates/integrations/compatibility.json +1 -1
  460. package/templates/scripts/validate-mcp-dogfood.mjs +5 -0
  461. package/templates/scripts/verify-pr-missions.sh +20 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-spool.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/event-spool.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAUD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAWrH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQrD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAe5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAInE"}
@@ -0,0 +1,57 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ export const EVENT_SPOOL_DIR = ".gitagent/history/events";
5
+ function spoolRoot(root) {
6
+ return path.join(root, EVENT_SPOOL_DIR);
7
+ }
8
+ function eventIdFor(body) {
9
+ return crypto.createHash("sha256").update(JSON.stringify(body)).digest("hex");
10
+ }
11
+ export function appendEventSpool(root, event) {
12
+ const dir = spoolRoot(root);
13
+ fs.mkdirSync(dir, { recursive: true });
14
+ const ts = event.ts ?? new Date().toISOString();
15
+ const body = { ...event, ts };
16
+ const event_id = eventIdFor(body);
17
+ const record = { ...body, event_id };
18
+ const day = ts.slice(0, 10);
19
+ const file = path.join(dir, `${day}.jsonl`);
20
+ fs.appendFileSync(file, `${JSON.stringify(record)}\n`, "utf8");
21
+ return event_id;
22
+ }
23
+ export function listSpoolFiles(root) {
24
+ const dir = spoolRoot(root);
25
+ if (!fs.existsSync(dir))
26
+ return [];
27
+ return fs
28
+ .readdirSync(dir)
29
+ .filter((f) => f.endsWith(".jsonl"))
30
+ .map((f) => path.join(dir, f))
31
+ .sort();
32
+ }
33
+ export function readSpoolEvents(root) {
34
+ const events = [];
35
+ for (const file of listSpoolFiles(root)) {
36
+ const lines = fs.readFileSync(file, "utf8").split("\n");
37
+ for (const line of lines) {
38
+ const trimmed = line.trim();
39
+ if (!trimmed)
40
+ continue;
41
+ try {
42
+ events.push(JSON.parse(trimmed));
43
+ }
44
+ catch {
45
+ // skip corrupt lines
46
+ }
47
+ }
48
+ }
49
+ return events;
50
+ }
51
+ export function clearSpoolFiles(root, files) {
52
+ for (const file of files) {
53
+ if (fs.existsSync(file))
54
+ fs.unlinkSync(file);
55
+ }
56
+ }
57
+ //# sourceMappingURL=event-spool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-spool.js","sourceRoot":"","sources":["../../../src/cli/lib/event-spool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type VerifyFinding, type VerifyFindingSeverity } from "../verify-finding.js";
2
+ import type { GateExecContext } from "./gate-adapter-types.js";
3
+ /** Hard cap on findings per gate run; the remainder is summarized in one finding. */
4
+ export declare const MAX_ADAPTER_FINDINGS = 200;
5
+ export interface ParsedDiagnostic {
6
+ file: string;
7
+ line: number;
8
+ column: number;
9
+ endLine?: number;
10
+ endColumn?: number;
11
+ severity: VerifyFindingSeverity;
12
+ ruleId: string;
13
+ message: string;
14
+ }
15
+ /** Repo-relative POSIX path from an absolute or cwd-relative tool path. */
16
+ export declare function normalizeOffendingFile(ctx: GateExecContext, file: string): string;
17
+ export declare function diagnosticToFinding(ctx: GateExecContext, d: ParsedDiagnostic): VerifyFinding;
18
+ /** Sorted, capped findings so `findings_digest` is stable across runs. */
19
+ export declare function diagnosticsToFindings(ctx: GateExecContext, toolId: string, diagnostics: ParsedDiagnostic[]): VerifyFinding[];
20
+ export declare function stdoutTruncatedFinding(toolId: string): VerifyFinding;
21
+ export declare function genericGateFailureFinding(exitCode: number | null, matched: boolean): VerifyFinding;
22
+ export type AdapterParseResult = {
23
+ ok: true;
24
+ diagnostics: ParsedDiagnostic[];
25
+ } | {
26
+ ok: false;
27
+ reason: string;
28
+ };
29
+ export interface GateRunSnapshot {
30
+ exitCode: number | null;
31
+ successSubstringMatched: boolean;
32
+ stdout: string;
33
+ stdoutTruncated: boolean;
34
+ }
35
+ /**
36
+ * Single findings policy for every adapter: success-substring short-circuit,
37
+ * then truncation (parse prefix when possible, never emit unparseable-on-truncation),
38
+ * then parse / generic fallback.
39
+ */
40
+ export declare function findingsFromRun(toolId: string, ctx: GateExecContext, run: GateRunSnapshot, parse?: (stdout: string) => AdapterParseResult): VerifyFinding[];
41
+ //# sourceMappingURL=adapter-findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-findings.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/adapter-findings.ts"],"names":[],"mappings":"AASA,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAa5F;AAUD,0EAA0E;AAC1E,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,gBAAgB,EAAE,GAC9B,aAAa,EAAE,CAcjB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAOpE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAKlG;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,eAAe,EACpB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAC7C,aAAa,EAAE,CAwBjB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Shared helpers for tool adapters that turn parsed diagnostics into envelope
3
+ * v3 findings (ADR-0040/ADR-0041): path normalization, evidence, deterministic
4
+ * ordering, output caps, and the truncation finding.
5
+ */
6
+ import path from "node:path";
7
+ import { toPosixRel } from "../cli-io.js";
8
+ import { MAX_IO_BUFFER_BYTES } from "../gate.js";
9
+ import { readEvidenceSnippet } from "../verify-evidence-snippet.js";
10
+ import { verifyFinding } from "../verify-finding.js";
11
+ /** Hard cap on findings per gate run; the remainder is summarized in one finding. */
12
+ export const MAX_ADAPTER_FINDINGS = 200;
13
+ function findingsRoot(ctx) {
14
+ return ctx.repoRoot ?? ctx.cwd;
15
+ }
16
+ /** Repo-relative POSIX path from an absolute or cwd-relative tool path. */
17
+ export function normalizeOffendingFile(ctx, file) {
18
+ const trimmed = file.trim();
19
+ if (trimmed.length === 0)
20
+ return "";
21
+ const abs = path.isAbsolute(trimmed) ? trimmed : path.resolve(ctx.cwd, trimmed);
22
+ const rel = toPosixRel(findingsRoot(ctx), abs);
23
+ return rel.startsWith("..") ? abs.split(path.sep).join("/") : rel;
24
+ }
25
+ export function diagnosticToFinding(ctx, d) {
26
+ const offendingFile = normalizeOffendingFile(ctx, d.file);
27
+ const evidence = readEvidenceSnippet(findingsRoot(ctx), offendingFile, d.line, d.column);
28
+ return verifyFinding("gate", d.message, {
29
+ offending_file: offendingFile,
30
+ line: d.line,
31
+ ...(d.endLine !== undefined ? { end_line: d.endLine } : {}),
32
+ ...(d.column > 0 ? { start_column: d.column } : {}),
33
+ ...(d.endColumn !== undefined ? { end_column: d.endColumn } : {}),
34
+ severity: d.severity,
35
+ rule_id: d.ruleId,
36
+ ...(evidence !== undefined ? { evidence } : {}),
37
+ });
38
+ }
39
+ function compareDiagnostics(a, b) {
40
+ if (a.file !== b.file)
41
+ return a.file < b.file ? -1 : 1;
42
+ if (a.line !== b.line)
43
+ return a.line - b.line;
44
+ if (a.column !== b.column)
45
+ return a.column - b.column;
46
+ if (a.ruleId !== b.ruleId)
47
+ return a.ruleId < b.ruleId ? -1 : 1;
48
+ return a.message < b.message ? -1 : a.message > b.message ? 1 : 0;
49
+ }
50
+ /** Sorted, capped findings so `findings_digest` is stable across runs. */
51
+ export function diagnosticsToFindings(ctx, toolId, diagnostics) {
52
+ const sorted = [...diagnostics].sort(compareDiagnostics);
53
+ const kept = sorted.slice(0, MAX_ADAPTER_FINDINGS).map((d) => diagnosticToFinding(ctx, d));
54
+ const overflow = sorted.length - kept.length;
55
+ if (overflow > 0) {
56
+ kept.push(verifyFinding("gate", `${overflow} additional ${toolId} diagnostic(s) omitted (cap ${MAX_ADAPTER_FINDINGS}); see gate log`, { rule_id: `${toolId}/findings-capped`, severity: "warning" }));
57
+ }
58
+ return kept;
59
+ }
60
+ export function stdoutTruncatedFinding(toolId) {
61
+ const mib = Math.round(MAX_IO_BUFFER_BYTES / (1024 * 1024));
62
+ return verifyFinding("gate", `${toolId} output exceeded the ${mib} MiB stdout capture bound; narrow the gate target or split the gate. Full output is in the gate log.`, { rule_id: `${toolId}/stdout-truncated` });
63
+ }
64
+ export function genericGateFailureFinding(exitCode, matched) {
65
+ return verifyFinding("gate", exitCode === 0 && !matched ? "gate success substring not found in output" : "gate command failed");
66
+ }
67
+ /**
68
+ * Single findings policy for every adapter: success-substring short-circuit,
69
+ * then truncation (parse prefix when possible, never emit unparseable-on-truncation),
70
+ * then parse / generic fallback.
71
+ */
72
+ export function findingsFromRun(toolId, ctx, run, parse) {
73
+ if (run.exitCode === 0 && run.successSubstringMatched)
74
+ return [];
75
+ if (run.stdoutTruncated) {
76
+ if (parse) {
77
+ const parsed = parse(run.stdout);
78
+ if (parsed.ok && parsed.diagnostics.length > 0) {
79
+ return [...diagnosticsToFindings(ctx, toolId, parsed.diagnostics), stdoutTruncatedFinding(toolId)];
80
+ }
81
+ }
82
+ return [stdoutTruncatedFinding(toolId)];
83
+ }
84
+ if (!parse)
85
+ return [genericGateFailureFinding(run.exitCode, run.successSubstringMatched)];
86
+ const parsed = parse(run.stdout);
87
+ if (!parsed.ok) {
88
+ return [
89
+ verifyFinding("gate", `${toolId} adapter: ${parsed.reason}; gate_command must run ${toolId} with --format json`, {
90
+ rule_id: `${toolId}/unparseable-output`,
91
+ }),
92
+ ];
93
+ }
94
+ if (parsed.diagnostics.length === 0) {
95
+ return [genericGateFailureFinding(run.exitCode, run.successSubstringMatched)];
96
+ }
97
+ return diagnosticsToFindings(ctx, toolId, parsed.diagnostics);
98
+ }
99
+ //# sourceMappingURL=adapter-findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-findings.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/adapter-findings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ESLint adapter (ADR-0041): gate_command MUST run `eslint --format json`.
3
+ * Maps `results[].messages[]` to envelope v3 findings. Selected only via the
4
+ * mission `gate_adapter: eslint` field, never inferred from the command text.
5
+ */
6
+ import type { VerifyFinding } from "../verify-finding.js";
7
+ import { type AdapterParseResult, type GateRunSnapshot } from "./adapter-findings.js";
8
+ import type { GateExecContext } from "./gate-adapter-types.js";
9
+ export type EslintParseResult = AdapterParseResult;
10
+ /** Pure parser for `eslint --format json` stdout. */
11
+ export declare function parseEslintJsonOutput(stdout: string): EslintParseResult;
12
+ export declare function eslintFindingsFromRun(ctx: GateExecContext, run: GateRunSnapshot): VerifyFinding[];
13
+ export declare const eslintJsonAdapter: import("./gate-adapter-types.js").GateExecAdapter;
14
+ //# sourceMappingURL=eslint-json-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint-json-adapter.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/eslint-json-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAmB/D,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAsCnD,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgBvE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,aAAa,EAAE,CAEjG;AAED,eAAO,MAAM,iBAAiB,mDAAkD,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { findingsFromRun, } from "./adapter-findings.js";
2
+ import { parsingAdapter } from "./parsing-adapter.js";
3
+ function isRecord(v) {
4
+ return typeof v === "object" && v !== null;
5
+ }
6
+ function tryParseJsonArray(text) {
7
+ const trimmed = text.trim();
8
+ const attempts = [trimmed];
9
+ const start = trimmed.indexOf("[");
10
+ const end = trimmed.lastIndexOf("]");
11
+ if (start > 0 && end > start)
12
+ attempts.push(trimmed.slice(start, end + 1));
13
+ for (const candidate of attempts) {
14
+ try {
15
+ const parsed = JSON.parse(candidate);
16
+ if (Array.isArray(parsed))
17
+ return parsed;
18
+ }
19
+ catch {
20
+ // try next candidate
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+ function messageToDiagnostic(filePath, m) {
26
+ const fatal = m.fatal === true;
27
+ const ruleId = typeof m.ruleId === "string" && m.ruleId.length > 0 ? m.ruleId : fatal ? "eslint/parse" : "eslint";
28
+ return {
29
+ file: filePath,
30
+ line: typeof m.line === "number" && m.line > 0 ? m.line : 0,
31
+ column: typeof m.column === "number" && m.column > 0 ? m.column : 0,
32
+ ...(typeof m.endLine === "number" ? { endLine: m.endLine } : {}),
33
+ ...(typeof m.endColumn === "number" ? { endColumn: m.endColumn } : {}),
34
+ severity: m.severity === 2 || fatal ? "error" : "warning",
35
+ ruleId,
36
+ message: typeof m.message === "string" && m.message.length > 0 ? m.message : `${ruleId} violation`,
37
+ };
38
+ }
39
+ /** Pure parser for `eslint --format json` stdout. */
40
+ export function parseEslintJsonOutput(stdout) {
41
+ const results = tryParseJsonArray(stdout);
42
+ if (results === null) {
43
+ return { ok: false, reason: "stdout is not an ESLint JSON results array" };
44
+ }
45
+ const diagnostics = [];
46
+ for (const entry of results) {
47
+ if (!isRecord(entry))
48
+ continue;
49
+ const result = entry;
50
+ const filePath = typeof result.filePath === "string" ? result.filePath : "";
51
+ for (const m of result.messages ?? []) {
52
+ if (!isRecord(m))
53
+ continue;
54
+ diagnostics.push(messageToDiagnostic(filePath, m));
55
+ }
56
+ }
57
+ return { ok: true, diagnostics };
58
+ }
59
+ export function eslintFindingsFromRun(ctx, run) {
60
+ return findingsFromRun("eslint", ctx, run, parseEslintJsonOutput);
61
+ }
62
+ export const eslintJsonAdapter = parsingAdapter("eslint", parseEslintJsonOutput);
63
+ //# sourceMappingURL=eslint-json-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint-json-adapter.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/eslint-json-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Explicit gate output parser (ADR-0041). Never inferred from gate_command text. */
2
+ export declare const GATE_ADAPTER_IDS: readonly ["generic", "eslint", "tsc"];
3
+ export type GateAdapterId = (typeof GATE_ADAPTER_IDS)[number];
4
+ /** Adapters that parse structured compiler/linter output (not the generic spawn). */
5
+ export declare const TYPED_GATE_ADAPTER_IDS: readonly ["tsc", "eslint"];
6
+ export type TypedGateAdapterId = (typeof TYPED_GATE_ADAPTER_IDS)[number];
7
+ export declare const DEFAULT_GATE_ADAPTER: GateAdapterId;
8
+ export declare function isGateAdapterId(value: unknown): value is GateAdapterId;
9
+ export declare function isTypedGateAdapterId(value: unknown): value is TypedGateAdapterId;
10
+ //# sourceMappingURL=gate-adapter-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-adapter-id.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/gate-adapter-id.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,uCAAwC,CAAC;AACtE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,4BAA6B,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,eAAO,MAAM,oBAAoB,EAAE,aAAyB,CAAC;AAE7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEhF"}
@@ -0,0 +1,12 @@
1
+ /** Explicit gate output parser (ADR-0041). Never inferred from gate_command text. */
2
+ export const GATE_ADAPTER_IDS = ["generic", "eslint", "tsc"];
3
+ /** Adapters that parse structured compiler/linter output (not the generic spawn). */
4
+ export const TYPED_GATE_ADAPTER_IDS = ["tsc", "eslint"];
5
+ export const DEFAULT_GATE_ADAPTER = "generic";
6
+ export function isGateAdapterId(value) {
7
+ return typeof value === "string" && GATE_ADAPTER_IDS.includes(value);
8
+ }
9
+ export function isTypedGateAdapterId(value) {
10
+ return typeof value === "string" && TYPED_GATE_ADAPTER_IDS.includes(value);
11
+ }
12
+ //# sourceMappingURL=gate-adapter-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-adapter-id.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/gate-adapter-id.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAGtE,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAC;AAGjE,MAAM,CAAC,MAAM,oBAAoB,GAAkB,SAAS,CAAC;AAE7D,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,sBAA4C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { VerifyFinding } from "../verify-finding.js";
2
+ import type { GateAdapterId } from "./gate-adapter-id.js";
3
+ export interface GateExecContext {
4
+ cwd: string;
5
+ /** Repository root for repo-relative `offending_file`; defaults to `cwd`. */
6
+ repoRoot?: string;
7
+ /** Absolute path for streaming gate subprocess I/O. */
8
+ gateLogPath: string;
9
+ successSubstring: string | null;
10
+ }
11
+ export interface GateExecutionResult {
12
+ exitCode: number | null;
13
+ adapter_id: GateAdapterId | string;
14
+ findings: VerifyFinding[];
15
+ }
16
+ export type GateExecAdapter = (command: string, ctx: GateExecContext) => Promise<GateExecutionResult>;
17
+ //# sourceMappingURL=gate-adapter-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-adapter-types.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/gate-adapter-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,aAAa,GAAG,MAAM,CAAC;IACnC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,eAAe,KACjB,OAAO,CAAC,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gate-adapter-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-adapter-types.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/gate-adapter-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { GateExecAdapter } from "./gate-adapter-types.js";
2
+ /** Exit code + optional success substring; one coarse finding on failure. */
3
+ export declare const genericSpawnAdapter: GateExecAdapter;
4
+ //# sourceMappingURL=generic-spawn-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-spawn-adapter.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/generic-spawn-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,eAOjC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { findingsFromRun } from "./adapter-findings.js";
2
+ import { spawnGateStreaming } from "./spawn-stream-core.js";
3
+ /** Exit code + optional success substring; one coarse finding on failure. */
4
+ export const genericSpawnAdapter = async (command, ctx) => {
5
+ const run = await spawnGateStreaming(command, ctx);
6
+ return {
7
+ exitCode: run.exitCode,
8
+ adapter_id: "generic",
9
+ findings: findingsFromRun("generic", ctx, run),
10
+ };
11
+ };
12
+ //# sourceMappingURL=generic-spawn-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-spawn-adapter.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/generic-spawn-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAoB,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;IACzE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;KAC/C,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type AdapterParseResult } from "./adapter-findings.js";
2
+ import type { TypedGateAdapterId } from "./gate-adapter-id.js";
3
+ import type { GateExecAdapter } from "./gate-adapter-types.js";
4
+ export declare function parsingAdapter(toolId: TypedGateAdapterId, parse: (stdout: string) => AdapterParseResult): GateExecAdapter;
5
+ //# sourceMappingURL=parsing-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing-adapter.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/parsing-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAC5C,eAAe,CASjB"}
@@ -0,0 +1,13 @@
1
+ import { findingsFromRun } from "./adapter-findings.js";
2
+ import { spawnGateStreaming } from "./spawn-stream-core.js";
3
+ export function parsingAdapter(toolId, parse) {
4
+ return async (command, ctx) => {
5
+ const run = await spawnGateStreaming(command, ctx, { captureStdout: true });
6
+ return {
7
+ exitCode: run.exitCode,
8
+ adapter_id: toolId,
9
+ findings: findingsFromRun(toolId, ctx, run, parse),
10
+ };
11
+ };
12
+ }
13
+ //# sourceMappingURL=parsing-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing-adapter.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/parsing-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA2B,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,cAAc,CAC5B,MAA0B,EAC1B,KAA6C;IAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { GateAdapterId } from "./gate-adapter-id.js";
2
+ import type { GateExecAdapter } from "./gate-adapter-types.js";
3
+ /** Explicit routing from mission `gate_adapter` (ADR-0041). Exhaustive by construction. */
4
+ export declare const GATE_EXEC_ADAPTERS: Record<GateAdapterId, GateExecAdapter>;
5
+ export declare function resolveGateExecAdapter(id: GateAdapterId | undefined): GateExecAdapter;
6
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAK/D,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,CAIrE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,GAAG,eAAe,CAErF"}
@@ -0,0 +1,13 @@
1
+ import { eslintJsonAdapter } from "./eslint-json-adapter.js";
2
+ import { genericSpawnAdapter } from "./generic-spawn-adapter.js";
3
+ import { tscAdapter } from "./tsc-adapter.js";
4
+ /** Explicit routing from mission `gate_adapter` (ADR-0041). Exhaustive by construction. */
5
+ export const GATE_EXEC_ADAPTERS = {
6
+ generic: genericSpawnAdapter,
7
+ eslint: eslintJsonAdapter,
8
+ tsc: tscAdapter,
9
+ };
10
+ export function resolveGateExecAdapter(id) {
11
+ return GATE_EXEC_ADAPTERS[id ?? "generic"];
12
+ }
13
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kBAAkB,GAA2C;IACxE,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,iBAAiB;IACzB,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,EAA6B;IAClE,OAAO,kBAAkB,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared subprocess core for gate adapters: spawn via shell, stream stdout+stderr
3
+ * to `gateLogPath`, and optionally capture stdout in memory (bounded by
4
+ * MAX_IO_BUFFER_BYTES, truncation flagged). Success-substring is checked after
5
+ * close against the written log (fixes multibyte chunk-split false negatives).
6
+ *
7
+ * Adapter-layer module: imports only gate.ts, gate-log-writer, and sibling types.
8
+ */
9
+ import { spawn, type ChildProcess } from "node:child_process";
10
+ import fs from "node:fs";
11
+ import type { GateExecContext } from "./gate-adapter-types.js";
12
+ export interface SpawnStreamOptions {
13
+ /** Keep a bounded copy of stdout in memory for structured parsing. */
14
+ captureStdout?: boolean;
15
+ }
16
+ export interface SpawnStreamResult {
17
+ exitCode: number | null;
18
+ successSubstringMatched: boolean;
19
+ /** Captured stdout (UTF-8); empty when capture disabled. */
20
+ stdout: string;
21
+ /** True when stdout byte count reached MAX_IO_BUFFER_BYTES and capture stopped. */
22
+ stdoutTruncated: boolean;
23
+ }
24
+ export declare function spawnOrDestroyStream(spawnFn: typeof spawn, writeStream: fs.WriteStream, command: string, options: Parameters<typeof spawn>[2]): ChildProcess;
25
+ export declare class BoundedStdoutCapture {
26
+ private readonly enabled;
27
+ private readonly limit;
28
+ private readonly chunks;
29
+ private bytes;
30
+ truncated: boolean;
31
+ constructor(enabled: boolean, limit: number);
32
+ push(chunk: Buffer): void;
33
+ text(): string;
34
+ }
35
+ export declare function spawnGateStreaming(command: string, ctx: GateExecContext, options?: SpawnStreamOptions): Promise<SpawnStreamResult>;
36
+ //# sourceMappingURL=spawn-stream-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-stream-core.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/spawn-stream-core.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,eAAe,EAAE,OAAO,CAAC;CAC1B;AAkBD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,KAAK,EACrB,WAAW,EAAE,EAAE,CAAC,WAAW,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GACnC,YAAY,CAOd;AAED,qBAAa,oBAAoB;IAM7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,KAAK,CAAK;IAClB,SAAS,UAAS;gBAGC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM;IAGhC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAazB,IAAI,IAAI,MAAM;CAGf;AAMD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAqC5B"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Shared subprocess core for gate adapters: spawn via shell, stream stdout+stderr
3
+ * to `gateLogPath`, and optionally capture stdout in memory (bounded by
4
+ * MAX_IO_BUFFER_BYTES, truncation flagged). Success-substring is checked after
5
+ * close against the written log (fixes multibyte chunk-split false negatives).
6
+ *
7
+ * Adapter-layer module: imports only gate.ts, gate-log-writer, and sibling types.
8
+ */
9
+ import { spawn } from "node:child_process";
10
+ import fs from "node:fs";
11
+ import { MAX_IO_BUFFER_BYTES, shellForPlatform } from "../gate.js";
12
+ import { readGateLogAbs } from "../gate-log-writer.js";
13
+ function waitForChildClose(child) {
14
+ return new Promise((resolve, reject) => {
15
+ child.once("error", reject);
16
+ child.once("close", (code, signal) => resolve({ exitCode: code, signal }));
17
+ });
18
+ }
19
+ function endWriteStream(stream) {
20
+ return new Promise((resolve, reject) => {
21
+ stream.once("error", reject);
22
+ stream.end(() => resolve());
23
+ });
24
+ }
25
+ export function spawnOrDestroyStream(spawnFn, writeStream, command, options) {
26
+ try {
27
+ return spawnFn(command, [], options);
28
+ }
29
+ catch (spawnErr) {
30
+ writeStream.destroy();
31
+ throw spawnErr;
32
+ }
33
+ }
34
+ export class BoundedStdoutCapture {
35
+ enabled;
36
+ limit;
37
+ chunks = [];
38
+ bytes = 0;
39
+ truncated = false;
40
+ constructor(enabled, limit) {
41
+ this.enabled = enabled;
42
+ this.limit = limit;
43
+ }
44
+ push(chunk) {
45
+ if (!this.enabled || this.truncated)
46
+ return;
47
+ const remaining = this.limit - this.bytes;
48
+ if (chunk.length >= remaining) {
49
+ this.chunks.push(chunk.subarray(0, remaining));
50
+ this.bytes = this.limit;
51
+ this.truncated = true;
52
+ return;
53
+ }
54
+ this.chunks.push(chunk);
55
+ this.bytes += chunk.length;
56
+ }
57
+ text() {
58
+ return this.enabled ? Buffer.concat(this.chunks).toString("utf8") : "";
59
+ }
60
+ }
61
+ function toBuffer(chunk) {
62
+ return Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, "utf8");
63
+ }
64
+ export async function spawnGateStreaming(command, ctx, options = {}) {
65
+ const capture = new BoundedStdoutCapture(options.captureStdout === true, MAX_IO_BUFFER_BYTES);
66
+ const stream = fs.createWriteStream(ctx.gateLogPath, { flags: "w" });
67
+ try {
68
+ const child = spawnOrDestroyStream(spawn, stream, command, {
69
+ cwd: ctx.cwd,
70
+ shell: shellForPlatform(),
71
+ env: process.env,
72
+ stdio: ["ignore", "pipe", "pipe"],
73
+ });
74
+ const forward = (chunk) => {
75
+ stream.write(toBuffer(chunk));
76
+ };
77
+ child.stdout?.on("data", (chunk) => {
78
+ const buf = toBuffer(chunk);
79
+ capture.push(buf);
80
+ forward(buf);
81
+ });
82
+ child.stderr?.on("data", forward);
83
+ const { exitCode } = await waitForChildClose(child);
84
+ await endWriteStream(stream);
85
+ const needle = ctx.successSubstring ?? "";
86
+ const logText = readGateLogAbs(ctx.gateLogPath);
87
+ return {
88
+ exitCode,
89
+ successSubstringMatched: needle.length === 0 || logText.includes(needle),
90
+ stdout: capture.text(),
91
+ stdoutTruncated: capture.truncated,
92
+ };
93
+ }
94
+ catch (e) {
95
+ stream.destroy();
96
+ throw e;
97
+ }
98
+ }
99
+ //# sourceMappingURL=spawn-stream-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn-stream-core.js","sourceRoot":"","sources":["../../../../src/cli/lib/gate-adapters/spawn-stream-core.ts"],"names":[],"mappings":"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"}