@jeger-ai/opengantry 3.2.6 → 3.4.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 +12 -2
  2. package/dist/cli/commands/contract.d.ts +21 -0
  3. package/dist/cli/commands/contract.d.ts.map +1 -0
  4. package/dist/cli/commands/contract.js +113 -0
  5. package/dist/cli/commands/contract.js.map +1 -0
  6. package/dist/cli/commands/deps.d.ts +18 -0
  7. package/dist/cli/commands/deps.d.ts.map +1 -0
  8. package/dist/cli/commands/deps.js +63 -0
  9. package/dist/cli/commands/deps.js.map +1 -0
  10. package/dist/cli/commands/doctor.d.ts +3 -6
  11. package/dist/cli/commands/doctor.d.ts.map +1 -1
  12. package/dist/cli/commands/doctor.js +8 -1
  13. package/dist/cli/commands/doctor.js.map +1 -1
  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/tmvc-guard.d.ts.map +1 -1
  32. package/dist/cli/commands/tmvc-guard.js +1 -0
  33. package/dist/cli/commands/tmvc-guard.js.map +1 -1
  34. package/dist/cli/commands/triage.d.ts.map +1 -1
  35. package/dist/cli/commands/triage.js +2 -1
  36. package/dist/cli/commands/triage.js.map +1 -1
  37. package/dist/cli/commands/verify.d.ts.map +1 -1
  38. package/dist/cli/commands/verify.js +2 -11
  39. package/dist/cli/commands/verify.js.map +1 -1
  40. package/dist/cli/kernel.d.ts +10 -3
  41. package/dist/cli/kernel.d.ts.map +1 -1
  42. package/dist/cli/kernel.js +18 -2
  43. package/dist/cli/kernel.js.map +1 -1
  44. package/dist/cli/lib/adapter-preflight-checks.d.ts +55 -0
  45. package/dist/cli/lib/adapter-preflight-checks.d.ts.map +1 -0
  46. package/dist/cli/lib/adapter-preflight-checks.js +275 -0
  47. package/dist/cli/lib/adapter-preflight-checks.js.map +1 -0
  48. package/dist/cli/lib/attest-mission.d.ts.map +1 -1
  49. package/dist/cli/lib/attest-mission.js +7 -0
  50. package/dist/cli/lib/attest-mission.js.map +1 -1
  51. package/dist/cli/lib/break-glass.d.ts +1 -1
  52. package/dist/cli/lib/break-glass.d.ts.map +1 -1
  53. package/dist/cli/lib/break-glass.js +6 -0
  54. package/dist/cli/lib/break-glass.js.map +1 -1
  55. package/dist/cli/lib/command-boundary.d.ts +7 -3
  56. package/dist/cli/lib/command-boundary.d.ts.map +1 -1
  57. package/dist/cli/lib/command-boundary.js +20 -4
  58. package/dist/cli/lib/command-boundary.js.map +1 -1
  59. package/dist/cli/lib/constants.d.ts +13 -0
  60. package/dist/cli/lib/constants.d.ts.map +1 -1
  61. package/dist/cli/lib/constants.js +13 -0
  62. package/dist/cli/lib/constants.js.map +1 -1
  63. package/dist/cli/lib/contract/approve-prompt.d.ts +22 -0
  64. package/dist/cli/lib/contract/approve-prompt.d.ts.map +1 -0
  65. package/dist/cli/lib/contract/approve-prompt.js +71 -0
  66. package/dist/cli/lib/contract/approve-prompt.js.map +1 -0
  67. package/dist/cli/lib/contract/contract-hash.d.ts +19 -0
  68. package/dist/cli/lib/contract/contract-hash.d.ts.map +1 -0
  69. package/dist/cli/lib/contract/contract-hash.js +67 -0
  70. package/dist/cli/lib/contract/contract-hash.js.map +1 -0
  71. package/dist/cli/lib/contract/contract-scan.d.ts +27 -0
  72. package/dist/cli/lib/contract/contract-scan.d.ts.map +1 -0
  73. package/dist/cli/lib/contract/contract-scan.js +167 -0
  74. package/dist/cli/lib/contract/contract-scan.js.map +1 -0
  75. package/dist/cli/lib/contract/contract-types.d.ts +38 -0
  76. package/dist/cli/lib/contract/contract-types.d.ts.map +1 -0
  77. package/dist/cli/lib/contract/contract-types.js +11 -0
  78. package/dist/cli/lib/contract/contract-types.js.map +1 -0
  79. package/dist/cli/lib/contract/effective-scope.d.ts +21 -0
  80. package/dist/cli/lib/contract/effective-scope.d.ts.map +1 -0
  81. package/dist/cli/lib/contract/effective-scope.js +77 -0
  82. package/dist/cli/lib/contract/effective-scope.js.map +1 -0
  83. package/dist/cli/lib/contract/format.d.ts +20 -0
  84. package/dist/cli/lib/contract/format.d.ts.map +1 -0
  85. package/dist/cli/lib/contract/format.js +48 -0
  86. package/dist/cli/lib/contract/format.js.map +1 -0
  87. package/dist/cli/lib/contract/propose-gate.d.ts +21 -0
  88. package/dist/cli/lib/contract/propose-gate.d.ts.map +1 -0
  89. package/dist/cli/lib/contract/propose-gate.js +57 -0
  90. package/dist/cli/lib/contract/propose-gate.js.map +1 -0
  91. package/dist/cli/lib/contract/propose-imports.d.ts +26 -0
  92. package/dist/cli/lib/contract/propose-imports.d.ts.map +1 -0
  93. package/dist/cli/lib/contract/propose-imports.js +128 -0
  94. package/dist/cli/lib/contract/propose-imports.js.map +1 -0
  95. package/dist/cli/lib/contract/propose.d.ts +25 -0
  96. package/dist/cli/lib/contract/propose.d.ts.map +1 -0
  97. package/dist/cli/lib/contract/propose.js +100 -0
  98. package/dist/cli/lib/contract/propose.js.map +1 -0
  99. package/dist/cli/lib/contract/resolve-specifier.d.ts +34 -0
  100. package/dist/cli/lib/contract/resolve-specifier.d.ts.map +1 -0
  101. package/dist/cli/lib/contract/resolve-specifier.js +93 -0
  102. package/dist/cli/lib/contract/resolve-specifier.js.map +1 -0
  103. package/dist/cli/lib/defensive-profile-presets.d.ts +6 -0
  104. package/dist/cli/lib/defensive-profile-presets.d.ts.map +1 -1
  105. package/dist/cli/lib/defensive-profile-presets.js +15 -1
  106. package/dist/cli/lib/defensive-profile-presets.js.map +1 -1
  107. package/dist/cli/lib/deps/deps-fetch.d.ts +4 -0
  108. package/dist/cli/lib/deps/deps-fetch.d.ts.map +1 -0
  109. package/dist/cli/lib/deps/deps-fetch.js +16 -0
  110. package/dist/cli/lib/deps/deps-fetch.js.map +1 -0
  111. package/dist/cli/lib/deps/deps-resolve.d.ts +18 -0
  112. package/dist/cli/lib/deps/deps-resolve.d.ts.map +1 -0
  113. package/dist/cli/lib/deps/deps-resolve.js +66 -0
  114. package/dist/cli/lib/deps/deps-resolve.js.map +1 -0
  115. package/dist/cli/lib/deps/deps-slug.d.ts +5 -0
  116. package/dist/cli/lib/deps/deps-slug.d.ts.map +1 -0
  117. package/dist/cli/lib/deps/deps-slug.js +44 -0
  118. package/dist/cli/lib/deps/deps-slug.js.map +1 -0
  119. package/dist/cli/lib/doctor-adapter-preflight.d.ts +24 -0
  120. package/dist/cli/lib/doctor-adapter-preflight.d.ts.map +1 -0
  121. package/dist/cli/lib/doctor-adapter-preflight.js +98 -0
  122. package/dist/cli/lib/doctor-adapter-preflight.js.map +1 -0
  123. package/dist/cli/lib/doctor-core.d.ts +7 -1
  124. package/dist/cli/lib/doctor-core.d.ts.map +1 -1
  125. package/dist/cli/lib/doctor-core.js +36 -5
  126. package/dist/cli/lib/doctor-core.js.map +1 -1
  127. package/dist/cli/lib/doctor-integration.d.ts +2 -0
  128. package/dist/cli/lib/doctor-integration.d.ts.map +1 -1
  129. package/dist/cli/lib/doctor-integration.js +4 -2
  130. package/dist/cli/lib/doctor-integration.js.map +1 -1
  131. package/dist/cli/lib/doctor-preflight/eslint.d.ts +4 -0
  132. package/dist/cli/lib/doctor-preflight/eslint.d.ts.map +1 -0
  133. package/dist/cli/lib/doctor-preflight/eslint.js +41 -0
  134. package/dist/cli/lib/doctor-preflight/eslint.js.map +1 -0
  135. package/dist/cli/lib/doctor-preflight/index.d.ts +3 -0
  136. package/dist/cli/lib/doctor-preflight/index.d.ts.map +1 -0
  137. package/dist/cli/lib/doctor-preflight/index.js +3 -0
  138. package/dist/cli/lib/doctor-preflight/index.js.map +1 -0
  139. package/dist/cli/lib/doctor-preflight/tsc.d.ts +4 -0
  140. package/dist/cli/lib/doctor-preflight/tsc.d.ts.map +1 -0
  141. package/dist/cli/lib/doctor-preflight/tsc.js +42 -0
  142. package/dist/cli/lib/doctor-preflight/tsc.js.map +1 -0
  143. package/dist/cli/lib/doctor-substrate.d.ts +2 -2
  144. package/dist/cli/lib/doctor-substrate.d.ts.map +1 -1
  145. package/dist/cli/lib/doctor-types.d.ts +4 -4
  146. package/dist/cli/lib/doctor-types.d.ts.map +1 -1
  147. package/dist/cli/lib/draft-token.d.ts +7 -1
  148. package/dist/cli/lib/draft-token.d.ts.map +1 -1
  149. package/dist/cli/lib/draft-token.js +25 -3
  150. package/dist/cli/lib/draft-token.js.map +1 -1
  151. package/dist/cli/lib/errors.d.ts +2 -0
  152. package/dist/cli/lib/errors.d.ts.map +1 -1
  153. package/dist/cli/lib/errors.js +15 -2
  154. package/dist/cli/lib/errors.js.map +1 -1
  155. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts +41 -0
  156. package/dist/cli/lib/gate-adapters/adapter-findings.d.ts.map +1 -0
  157. package/dist/cli/lib/gate-adapters/adapter-findings.js +99 -0
  158. package/dist/cli/lib/gate-adapters/adapter-findings.js.map +1 -0
  159. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts +14 -0
  160. package/dist/cli/lib/gate-adapters/eslint-json-adapter.d.ts.map +1 -0
  161. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js +63 -0
  162. package/dist/cli/lib/gate-adapters/eslint-json-adapter.js.map +1 -0
  163. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts +10 -0
  164. package/dist/cli/lib/gate-adapters/gate-adapter-id.d.ts.map +1 -0
  165. package/dist/cli/lib/gate-adapters/gate-adapter-id.js +12 -0
  166. package/dist/cli/lib/gate-adapters/gate-adapter-id.js.map +1 -0
  167. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts +17 -0
  168. package/dist/cli/lib/gate-adapters/gate-adapter-types.d.ts.map +1 -0
  169. package/dist/cli/lib/gate-adapters/gate-adapter-types.js +2 -0
  170. package/dist/cli/lib/gate-adapters/gate-adapter-types.js.map +1 -0
  171. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts +4 -0
  172. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.d.ts.map +1 -0
  173. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js +12 -0
  174. package/dist/cli/lib/gate-adapters/generic-spawn-adapter.js.map +1 -0
  175. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts +5 -0
  176. package/dist/cli/lib/gate-adapters/parsing-adapter.d.ts.map +1 -0
  177. package/dist/cli/lib/gate-adapters/parsing-adapter.js +13 -0
  178. package/dist/cli/lib/gate-adapters/parsing-adapter.js.map +1 -0
  179. package/dist/cli/lib/gate-adapters/registry.d.ts +6 -0
  180. package/dist/cli/lib/gate-adapters/registry.d.ts.map +1 -0
  181. package/dist/cli/lib/gate-adapters/registry.js +13 -0
  182. package/dist/cli/lib/gate-adapters/registry.js.map +1 -0
  183. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts +36 -0
  184. package/dist/cli/lib/gate-adapters/spawn-stream-core.d.ts.map +1 -0
  185. package/dist/cli/lib/gate-adapters/spawn-stream-core.js +99 -0
  186. package/dist/cli/lib/gate-adapters/spawn-stream-core.js.map +1 -0
  187. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts +16 -0
  188. package/dist/cli/lib/gate-adapters/tsc-adapter.d.ts.map +1 -0
  189. package/dist/cli/lib/gate-adapters/tsc-adapter.js +51 -0
  190. package/dist/cli/lib/gate-adapters/tsc-adapter.js.map +1 -0
  191. package/dist/cli/lib/gate-log-writer.d.ts +8 -0
  192. package/dist/cli/lib/gate-log-writer.d.ts.map +1 -1
  193. package/dist/cli/lib/gate-log-writer.js +35 -0
  194. package/dist/cli/lib/gate-log-writer.js.map +1 -1
  195. package/dist/cli/lib/gate.d.ts +2 -0
  196. package/dist/cli/lib/gate.d.ts.map +1 -1
  197. package/dist/cli/lib/gate.js +2 -2
  198. package/dist/cli/lib/gate.js.map +1 -1
  199. package/dist/cli/lib/git.d.ts +14 -2
  200. package/dist/cli/lib/git.d.ts.map +1 -1
  201. package/dist/cli/lib/git.js +22 -7
  202. package/dist/cli/lib/git.js.map +1 -1
  203. package/dist/cli/lib/gxt-config.d.ts +9 -0
  204. package/dist/cli/lib/gxt-config.d.ts.map +1 -1
  205. package/dist/cli/lib/gxt-config.js +16 -0
  206. package/dist/cli/lib/gxt-config.js.map +1 -1
  207. package/dist/cli/lib/gxt-error-codes.d.ts +17 -0
  208. package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
  209. package/dist/cli/lib/gxt-error-codes.js +18 -0
  210. package/dist/cli/lib/gxt-error-codes.js.map +1 -1
  211. package/dist/cli/lib/import-scanner.d.ts +13 -3
  212. package/dist/cli/lib/import-scanner.d.ts.map +1 -1
  213. package/dist/cli/lib/import-scanner.js +185 -23
  214. package/dist/cli/lib/import-scanner.js.map +1 -1
  215. package/dist/cli/lib/init-tutorial.js +3 -4
  216. package/dist/cli/lib/init-tutorial.js.map +1 -1
  217. package/dist/cli/lib/interrogate/gaps.d.ts +2 -0
  218. package/dist/cli/lib/interrogate/gaps.d.ts.map +1 -1
  219. package/dist/cli/lib/interrogate/gaps.js +3 -4
  220. package/dist/cli/lib/interrogate/gaps.js.map +1 -1
  221. package/dist/cli/lib/interrogate/run.d.ts +1 -0
  222. package/dist/cli/lib/interrogate/run.d.ts.map +1 -1
  223. package/dist/cli/lib/interrogate/run.js +1 -0
  224. package/dist/cli/lib/interrogate/run.js.map +1 -1
  225. package/dist/cli/lib/kpi-scan.js +5 -1
  226. package/dist/cli/lib/kpi-scan.js.map +1 -1
  227. package/dist/cli/lib/ledger/ledger-append.d.ts +14 -0
  228. package/dist/cli/lib/ledger/ledger-append.d.ts.map +1 -0
  229. package/dist/cli/lib/ledger/ledger-append.js +63 -0
  230. package/dist/cli/lib/ledger/ledger-append.js.map +1 -0
  231. package/dist/cli/lib/ledger/ledger-chain.d.ts +24 -0
  232. package/dist/cli/lib/ledger/ledger-chain.d.ts.map +1 -0
  233. package/dist/cli/lib/ledger/ledger-chain.js +101 -0
  234. package/dist/cli/lib/ledger/ledger-chain.js.map +1 -0
  235. package/dist/cli/lib/ledger/ledger-entry.d.ts +79 -0
  236. package/dist/cli/lib/ledger/ledger-entry.d.ts.map +1 -0
  237. package/dist/cli/lib/ledger/ledger-entry.js +36 -0
  238. package/dist/cli/lib/ledger/ledger-entry.js.map +1 -0
  239. package/dist/cli/lib/ledger/ledger-export.d.ts +28 -0
  240. package/dist/cli/lib/ledger/ledger-export.d.ts.map +1 -0
  241. package/dist/cli/lib/ledger/ledger-export.js +36 -0
  242. package/dist/cli/lib/ledger/ledger-export.js.map +1 -0
  243. package/dist/cli/lib/legislate-from-intent.d.ts +9 -0
  244. package/dist/cli/lib/legislate-from-intent.d.ts.map +1 -0
  245. package/dist/cli/lib/legislate-from-intent.js +59 -0
  246. package/dist/cli/lib/legislate-from-intent.js.map +1 -0
  247. package/dist/cli/lib/legislate-gate-options.d.ts +3 -4
  248. package/dist/cli/lib/legislate-gate-options.d.ts.map +1 -1
  249. package/dist/cli/lib/legislate-gate-options.js +9 -4
  250. package/dist/cli/lib/legislate-gate-options.js.map +1 -1
  251. package/dist/cli/lib/legislate-policy-warn.d.ts +3 -0
  252. package/dist/cli/lib/legislate-policy-warn.d.ts.map +1 -0
  253. package/dist/cli/lib/legislate-policy-warn.js +17 -0
  254. package/dist/cli/lib/legislate-policy-warn.js.map +1 -0
  255. package/dist/cli/lib/legislate.d.ts +5 -1
  256. package/dist/cli/lib/legislate.d.ts.map +1 -1
  257. package/dist/cli/lib/legislate.js +38 -12
  258. package/dist/cli/lib/legislate.js.map +1 -1
  259. package/dist/cli/lib/mcp-doctor.d.ts +18 -0
  260. package/dist/cli/lib/mcp-doctor.d.ts.map +1 -0
  261. package/dist/cli/lib/mcp-doctor.js +35 -0
  262. package/dist/cli/lib/mcp-doctor.js.map +1 -0
  263. package/dist/cli/lib/mcp-draft-legislation.d.ts.map +1 -1
  264. package/dist/cli/lib/mcp-draft-legislation.js +39 -16
  265. package/dist/cli/lib/mcp-draft-legislation.js.map +1 -1
  266. package/dist/cli/lib/mcp-execute-legislation.d.ts.map +1 -1
  267. package/dist/cli/lib/mcp-execute-legislation.js +2 -0
  268. package/dist/cli/lib/mcp-execute-legislation.js.map +1 -1
  269. package/dist/cli/lib/mcp-governance-shared.d.ts +4 -1
  270. package/dist/cli/lib/mcp-governance-shared.d.ts.map +1 -1
  271. package/dist/cli/lib/mcp-governance-shared.js.map +1 -1
  272. package/dist/cli/lib/mcp-interrogate.js +3 -3
  273. package/dist/cli/lib/mcp-interrogate.js.map +1 -1
  274. package/dist/cli/lib/mcp-org.d.ts +19 -0
  275. package/dist/cli/lib/mcp-org.d.ts.map +1 -0
  276. package/dist/cli/lib/mcp-org.js +51 -0
  277. package/dist/cli/lib/mcp-org.js.map +1 -0
  278. package/dist/cli/lib/mcp-propose-contract.d.ts +22 -0
  279. package/dist/cli/lib/mcp-propose-contract.d.ts.map +1 -0
  280. package/dist/cli/lib/mcp-propose-contract.js +51 -0
  281. package/dist/cli/lib/mcp-propose-contract.js.map +1 -0
  282. package/dist/cli/lib/mcp-runtime.d.ts +1 -1
  283. package/dist/cli/lib/mcp-runtime.d.ts.map +1 -1
  284. package/dist/cli/lib/mcp-runtime.js +1 -1
  285. package/dist/cli/lib/mcp-runtime.js.map +1 -1
  286. package/dist/cli/lib/mcp-start-orchestration.d.ts.map +1 -1
  287. package/dist/cli/lib/mcp-start-orchestration.js +1 -0
  288. package/dist/cli/lib/mcp-start-orchestration.js.map +1 -1
  289. package/dist/cli/lib/mcp-tools-register.d.ts.map +1 -1
  290. package/dist/cli/lib/mcp-tools-register.js +110 -17
  291. package/dist/cli/lib/mcp-tools-register.js.map +1 -1
  292. package/dist/cli/lib/mission-changed.d.ts +27 -0
  293. package/dist/cli/lib/mission-changed.d.ts.map +1 -0
  294. package/dist/cli/lib/mission-changed.js +107 -0
  295. package/dist/cli/lib/mission-changed.js.map +1 -0
  296. package/dist/cli/lib/missions/formatter.d.ts +1 -1
  297. package/dist/cli/lib/missions/formatter.d.ts.map +1 -1
  298. package/dist/cli/lib/missions/formatter.js +5 -0
  299. package/dist/cli/lib/missions/formatter.js.map +1 -1
  300. package/dist/cli/lib/missions/parser.d.ts +3 -1
  301. package/dist/cli/lib/missions/parser.d.ts.map +1 -1
  302. package/dist/cli/lib/missions/parser.js +30 -0
  303. package/dist/cli/lib/missions/parser.js.map +1 -1
  304. package/dist/cli/lib/msn-allocate.d.ts.map +1 -1
  305. package/dist/cli/lib/msn-allocate.js +17 -24
  306. package/dist/cli/lib/msn-allocate.js.map +1 -1
  307. package/dist/cli/lib/planner-signature.d.ts +7 -0
  308. package/dist/cli/lib/planner-signature.d.ts.map +1 -1
  309. package/dist/cli/lib/planner-signature.js +18 -1
  310. package/dist/cli/lib/planner-signature.js.map +1 -1
  311. package/dist/cli/lib/policy/policy-bundle.d.ts +6 -0
  312. package/dist/cli/lib/policy/policy-bundle.d.ts.map +1 -0
  313. package/dist/cli/lib/policy/policy-bundle.js +62 -0
  314. package/dist/cli/lib/policy/policy-bundle.js.map +1 -0
  315. package/dist/cli/lib/policy/policy-doctor.d.ts +4 -0
  316. package/dist/cli/lib/policy/policy-doctor.d.ts.map +1 -0
  317. package/dist/cli/lib/policy/policy-doctor.js +34 -0
  318. package/dist/cli/lib/policy/policy-doctor.js.map +1 -0
  319. package/dist/cli/lib/policy/policy-fetch.d.ts +10 -0
  320. package/dist/cli/lib/policy/policy-fetch.d.ts.map +1 -0
  321. package/dist/cli/lib/policy/policy-fetch.js +78 -0
  322. package/dist/cli/lib/policy/policy-fetch.js.map +1 -0
  323. package/dist/cli/lib/policy/policy-resolve.d.ts +38 -0
  324. package/dist/cli/lib/policy/policy-resolve.d.ts.map +1 -0
  325. package/dist/cli/lib/policy/policy-resolve.js +194 -0
  326. package/dist/cli/lib/policy/policy-resolve.js.map +1 -0
  327. package/dist/cli/lib/policy/policy-types.d.ts +76 -0
  328. package/dist/cli/lib/policy/policy-types.d.ts.map +1 -0
  329. package/dist/cli/lib/policy/policy-types.js +3 -0
  330. package/dist/cli/lib/policy/policy-types.js.map +1 -0
  331. package/dist/cli/lib/policy-digest-doctor.d.ts +1 -0
  332. package/dist/cli/lib/policy-digest-doctor.d.ts.map +1 -1
  333. package/dist/cli/lib/policy-digest-doctor.js +4 -2
  334. package/dist/cli/lib/policy-digest-doctor.js.map +1 -1
  335. package/dist/cli/lib/runtime-env.d.ts +3 -0
  336. package/dist/cli/lib/runtime-env.d.ts.map +1 -1
  337. package/dist/cli/lib/runtime-env.js +12 -2
  338. package/dist/cli/lib/runtime-env.js.map +1 -1
  339. package/dist/cli/lib/runtime-exec.d.ts +5 -1
  340. package/dist/cli/lib/runtime-exec.d.ts.map +1 -1
  341. package/dist/cli/lib/runtime-exec.js +18 -1
  342. package/dist/cli/lib/runtime-exec.js.map +1 -1
  343. package/dist/cli/lib/staged-tmvc-guard.d.ts +3 -0
  344. package/dist/cli/lib/staged-tmvc-guard.d.ts.map +1 -1
  345. package/dist/cli/lib/staged-tmvc-guard.js +4 -2
  346. package/dist/cli/lib/staged-tmvc-guard.js.map +1 -1
  347. package/dist/cli/lib/start-orchestration.d.ts +2 -1
  348. package/dist/cli/lib/start-orchestration.d.ts.map +1 -1
  349. package/dist/cli/lib/start-orchestration.js +5 -3
  350. package/dist/cli/lib/start-orchestration.js.map +1 -1
  351. package/dist/cli/lib/surgeons/banned-import.js +1 -1
  352. package/dist/cli/lib/surgeons/banned-import.js.map +1 -1
  353. package/dist/cli/lib/surgeons/import-layer.d.ts.map +1 -1
  354. package/dist/cli/lib/surgeons/import-layer.js +1 -1
  355. package/dist/cli/lib/surgeons/import-layer.js.map +1 -1
  356. package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
  357. package/dist/cli/lib/surgeons/registry.js +2 -4
  358. package/dist/cli/lib/surgeons/registry.js.map +1 -1
  359. package/dist/cli/lib/types.d.ts +30 -0
  360. package/dist/cli/lib/types.d.ts.map +1 -1
  361. package/dist/cli/lib/types.js +5 -1
  362. package/dist/cli/lib/types.js.map +1 -1
  363. package/dist/cli/lib/verify-contract.d.ts +22 -0
  364. package/dist/cli/lib/verify-contract.d.ts.map +1 -0
  365. package/dist/cli/lib/verify-contract.js +110 -0
  366. package/dist/cli/lib/verify-contract.js.map +1 -0
  367. package/dist/cli/lib/verify-engine.d.ts +1 -1
  368. package/dist/cli/lib/verify-engine.d.ts.map +1 -1
  369. package/dist/cli/lib/verify-engine.js +38 -17
  370. package/dist/cli/lib/verify-engine.js.map +1 -1
  371. package/dist/cli/lib/verify-evidence-snippet.d.ts +7 -0
  372. package/dist/cli/lib/verify-evidence-snippet.d.ts.map +1 -0
  373. package/dist/cli/lib/verify-evidence-snippet.js +29 -0
  374. package/dist/cli/lib/verify-evidence-snippet.js.map +1 -0
  375. package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
  376. package/dist/cli/lib/verify-failure-normalize.js +30 -4
  377. package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
  378. package/dist/cli/lib/verify-failure.d.ts +27 -5
  379. package/dist/cli/lib/verify-failure.d.ts.map +1 -1
  380. package/dist/cli/lib/verify-finding-gate-projector.d.ts +1 -1
  381. package/dist/cli/lib/verify-finding-gate-projector.d.ts.map +1 -1
  382. package/dist/cli/lib/verify-finding-gate-projector.js +6 -28
  383. package/dist/cli/lib/verify-finding-gate-projector.js.map +1 -1
  384. package/dist/cli/lib/verify-finding.d.ts +1 -1
  385. package/dist/cli/lib/verify-finding.d.ts.map +1 -1
  386. package/dist/cli/lib/verify-finding.js.map +1 -1
  387. package/dist/cli/lib/verify-hints.d.ts.map +1 -1
  388. package/dist/cli/lib/verify-hints.js +27 -3
  389. package/dist/cli/lib/verify-hints.js.map +1 -1
  390. package/dist/cli/lib/verify-interrogation.d.ts +2 -0
  391. package/dist/cli/lib/verify-interrogation.d.ts.map +1 -1
  392. package/dist/cli/lib/verify-interrogation.js +2 -2
  393. package/dist/cli/lib/verify-interrogation.js.map +1 -1
  394. package/dist/cli/lib/verify-options.d.ts +5 -14
  395. package/dist/cli/lib/verify-options.d.ts.map +1 -1
  396. package/dist/cli/lib/verify-org-phases.d.ts +18 -0
  397. package/dist/cli/lib/verify-org-phases.d.ts.map +1 -0
  398. package/dist/cli/lib/verify-org-phases.js +61 -0
  399. package/dist/cli/lib/verify-org-phases.js.map +1 -0
  400. package/dist/cli/lib/verify-payload.d.ts +1 -1
  401. package/dist/cli/lib/verify-payload.d.ts.map +1 -1
  402. package/dist/cli/lib/verify-payload.js +49 -27
  403. package/dist/cli/lib/verify-payload.js.map +1 -1
  404. package/dist/cli/lib/verify-phase-clock.d.ts +3 -2
  405. package/dist/cli/lib/verify-phase-clock.d.ts.map +1 -1
  406. package/dist/cli/lib/verify-phase-clock.js +17 -5
  407. package/dist/cli/lib/verify-phase-clock.js.map +1 -1
  408. package/dist/cli/lib/verify-phase-steps.d.ts +14 -7
  409. package/dist/cli/lib/verify-phase-steps.d.ts.map +1 -1
  410. package/dist/cli/lib/verify-phase-steps.js +33 -24
  411. package/dist/cli/lib/verify-phase-steps.js.map +1 -1
  412. package/dist/cli/lib/verify-presenters.d.ts +1 -0
  413. package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
  414. package/dist/cli/lib/verify-presenters.js +15 -4
  415. package/dist/cli/lib/verify-presenters.js.map +1 -1
  416. package/dist/cli/lib/verify-remediation-pipeline.d.ts +2 -0
  417. package/dist/cli/lib/verify-remediation-pipeline.d.ts.map +1 -1
  418. package/dist/cli/lib/verify-remediation-pipeline.js +5 -2
  419. package/dist/cli/lib/verify-remediation-pipeline.js.map +1 -1
  420. package/dist/cli/lib/verify-run.d.ts +2 -2
  421. package/dist/cli/lib/verify-run.d.ts.map +1 -1
  422. package/dist/cli/lib/verify-run.js +27 -13
  423. package/dist/cli/lib/verify-run.js.map +1 -1
  424. package/dist/cli/lib/version.gen.d.ts +1 -1
  425. package/dist/cli/lib/version.gen.js +1 -1
  426. package/dist/cli/program-core.d.ts +1 -1
  427. package/dist/cli/program-core.d.ts.map +1 -1
  428. package/dist/cli/program-core.js +62 -5
  429. package/dist/cli/program-core.js.map +1 -1
  430. package/dist/cli/program-mission.d.ts.map +1 -1
  431. package/dist/cli/program-mission.js +97 -35
  432. package/dist/cli/program-mission.js.map +1 -1
  433. package/dist/cli/program-org.d.ts +3 -0
  434. package/dist/cli/program-org.d.ts.map +1 -0
  435. package/dist/cli/program-org.js +119 -0
  436. package/dist/cli/program-org.js.map +1 -0
  437. package/dist/cli/program-workflow.d.ts +6 -2
  438. package/dist/cli/program-workflow.d.ts.map +1 -1
  439. package/dist/cli/program-workflow.js +63 -6
  440. package/dist/cli/program-workflow.js.map +1 -1
  441. package/dist/cli/program.d.ts.map +1 -1
  442. package/dist/cli/program.js +11 -0
  443. package/dist/cli/program.js.map +1 -1
  444. package/package.json +2 -1
  445. package/templates/.gitagent/config.json +4 -0
  446. package/templates/.gitagent/foreman/MANIFEST.json +1 -0
  447. package/templates/.gitagent/foreman/PLANNER.signing.pub +3 -0
  448. package/templates/.gitagent/foreman/POLICY.pointer.json +11 -0
  449. package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
  450. package/templates/.gitagent/planner/MISSION-ARCHITECT.md +26 -5
  451. package/templates/.gitagent/planner/MISSION.schema.yaml +103 -0
  452. package/templates/.gitagent/planner/ORG-POLICY.schema.yaml +174 -0
  453. package/templates/.gitagent/planner/RULES.md +75 -22
  454. package/templates/.githooks/pre-commit +12 -0
  455. package/templates/.github/workflows/gxt-attest-ingest.yml +56 -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,167 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { importMatchesBan } from "../ast-discovery.js";
4
+ import { toPosixRel } from "../cli-io.js";
5
+ import { gitRunOk } from "../git.js";
6
+ import { GXT_ERROR } from "../gxt-error-codes.js";
7
+ import { extractImportSites } from "../import-scanner.js";
8
+ import { isPathUnderRoot, normalizeRepoRelativePath } from "../tmvc-path.js";
9
+ import { classifySpecifier, loadTsconfigPaths } from "./resolve-specifier.js";
10
+ const SOURCE_EXT = new Set([".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"]);
11
+ const SKIP_DIRS = new Set(["node_modules", "dist", "build", "coverage"]);
12
+ export function isScannableSource(fileRel) {
13
+ const ext = path.extname(fileRel).toLowerCase();
14
+ return SOURCE_EXT.has(ext) && !fileRel.endsWith(".d.ts");
15
+ }
16
+ function walkSources(repoRoot, absRoot, out) {
17
+ if (!fs.existsSync(absRoot))
18
+ return;
19
+ const stat = fs.statSync(absRoot);
20
+ if (stat.isFile()) {
21
+ if (isScannableSource(absRoot))
22
+ out.push(toPosixRel(repoRoot, absRoot));
23
+ return;
24
+ }
25
+ if (!stat.isDirectory())
26
+ return;
27
+ for (const ent of fs.readdirSync(absRoot, { withFileTypes: true })) {
28
+ const child = path.join(absRoot, ent.name);
29
+ if (ent.isDirectory()) {
30
+ if (SKIP_DIRS.has(ent.name) || ent.name.startsWith("."))
31
+ continue;
32
+ walkSources(repoRoot, child, out);
33
+ }
34
+ else if (ent.isFile() && isScannableSource(ent.name)) {
35
+ out.push(toPosixRel(repoRoot, child));
36
+ }
37
+ }
38
+ }
39
+ /** Repo-relative source files under the effective TMVC roots (sorted, deduped). */
40
+ export function listSourcesUnderRoots(repoRoot, roots) {
41
+ const out = [];
42
+ for (const root of roots)
43
+ walkSources(repoRoot, path.join(repoRoot, root), out);
44
+ return [...new Set(out)].sort();
45
+ }
46
+ function addGitNames(repoRoot, args, out) {
47
+ const r = gitRunOk(repoRoot, [...args, "--"]);
48
+ if (!r.ok)
49
+ return false;
50
+ for (const line of r.stdout.split(/\r?\n/))
51
+ if (line.trim())
52
+ out.add(line.trim());
53
+ return true;
54
+ }
55
+ /**
56
+ * Dirty sources: `git diff --name-only HEAD` ∪ untracked. On an unborn branch (no HEAD) the
57
+ * index (`ls-files --cached`) stands in for the diff. Every argv ends with `--` so a path that
58
+ * looks like a flag is never parsed as one. Missing/deleted paths are dropped.
59
+ */
60
+ export function listChangedSourceFiles(repoRoot) {
61
+ const out = new Set();
62
+ if (!addGitNames(repoRoot, ["diff", "--name-only", "HEAD"], out)) {
63
+ addGitNames(repoRoot, ["ls-files", "--cached"], out);
64
+ }
65
+ addGitNames(repoRoot, ["ls-files", "--others", "--exclude-standard"], out);
66
+ return [...out]
67
+ .filter((rel) => isScannableSource(rel) && fs.existsSync(path.join(repoRoot, rel)))
68
+ .sort();
69
+ }
70
+ export function contractViolationCode(kind) {
71
+ switch (kind) {
72
+ case "banned":
73
+ return GXT_ERROR.CONTRACT_IMPORT_BANNED;
74
+ case "unlisted":
75
+ return GXT_ERROR.CONTRACT_IMPORT_UNLISTED;
76
+ case "dynamic":
77
+ return GXT_ERROR.CONTRACT_IMPORT_DYNAMIC;
78
+ case "scope_escape":
79
+ return GXT_ERROR.CONTRACT_SCOPE_ESCAPE;
80
+ default: {
81
+ const _exhaustive = kind;
82
+ return _exhaustive;
83
+ }
84
+ }
85
+ }
86
+ function violation(kind, file, site, specifier, detail) {
87
+ return { kind, file, line: site.line, column: site.column, specifier, detail };
88
+ }
89
+ function checkBareSpecifier(scope, file, site, spec) {
90
+ const banned = scope.bannedImports.find((b) => importMatchesBan(spec, b));
91
+ if (banned) {
92
+ return violation("banned", file, site, spec, `import of banned specifier "${spec}" (banned: ${banned})`);
93
+ }
94
+ if (scope.allowedImports.length > 0 && !scope.allowedImports.some((a) => importMatchesBan(spec, a))) {
95
+ return violation("unlisted", file, site, spec, `import "${spec}" is not in contract.allowed_imports`);
96
+ }
97
+ return null;
98
+ }
99
+ function checkResolvedPath(scope, file, site, spec, resolvedRepoRel) {
100
+ const forbidden = scope.forbiddenZones.find((fz) => isPathUnderRoot(resolvedRepoRel, fz));
101
+ if (forbidden) {
102
+ return violation("scope_escape", file, site, spec, `import resolves into forbidden zone ${forbidden} (${resolvedRepoRel})`);
103
+ }
104
+ if (scope.strictRelativeImports && scope.tmvcRoots.length > 0) {
105
+ const inside = scope.tmvcRoots.some((r) => isPathUnderRoot(resolvedRepoRel, r));
106
+ if (!inside) {
107
+ return violation("scope_escape", file, site, spec, `import resolves outside effective TMVC roots (${resolvedRepoRel})`);
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ function checkSite(scope, file, site, ts) {
113
+ if (site.spec === null) {
114
+ if (scope.allowDynamicSpecifiers)
115
+ return null;
116
+ return violation("dynamic", file, site, site.expression ?? "", `non-literal ${site.kind === "require_expr" ? "require" : "import"}(${site.expression ?? ""}) is not allowed (contract.allow_dynamic_specifiers=false)`);
117
+ }
118
+ const cls = classifySpecifier(site.spec, file, ts);
119
+ switch (cls.kind) {
120
+ case "builtin":
121
+ return null;
122
+ case "bare":
123
+ return checkBareSpecifier(scope, file, site, cls.specifier);
124
+ case "relative":
125
+ case "alias":
126
+ return checkResolvedPath(scope, file, site, cls.specifier, cls.resolvedRepoRel);
127
+ default: {
128
+ const _exhaustive = cls;
129
+ return _exhaustive;
130
+ }
131
+ }
132
+ }
133
+ /** Scan a single source file's import sites against the effective scope. */
134
+ export function scanFileImports(repoRoot, fileRel, scope, ts = loadTsconfigPaths(repoRoot)) {
135
+ const abs = path.join(repoRoot, fileRel);
136
+ if (!fs.existsSync(abs) || !fs.statSync(abs).isFile())
137
+ return [];
138
+ const norm = normalizeRepoRelativePath(fileRel);
139
+ const out = [];
140
+ for (const site of extractImportSites(fs.readFileSync(abs, "utf8"))) {
141
+ const v = checkSite(scope, norm, site, ts);
142
+ if (v)
143
+ out.push(v);
144
+ }
145
+ return out;
146
+ }
147
+ /**
148
+ * Import-site scan for the effective cage: banned / unlisted bare specifiers, non-literal dynamic
149
+ * specifiers, and relative or alias imports resolving into forbidden zones (or outside TMVC when
150
+ * `strict_relative_imports`). Deterministic ordering by file, line, column.
151
+ */
152
+ export function scanContractImports(repoRoot, scope, options = {}) {
153
+ const files = options.files
154
+ ? [...new Set(options.files.map(normalizeRepoRelativePath))].filter(isScannableSource).sort()
155
+ : scope.tmvcRoots.length > 0
156
+ ? listSourcesUnderRoots(repoRoot, scope.tmvcRoots)
157
+ : listChangedSourceFiles(repoRoot);
158
+ const ts = loadTsconfigPaths(repoRoot);
159
+ const out = [];
160
+ for (const file of files)
161
+ out.push(...scanFileImports(repoRoot, file, scope, ts));
162
+ return out.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line || a.column - b.column);
163
+ }
164
+ export function formatContractViolation(v) {
165
+ return `[${contractViolationCode(v.kind)}] ${v.file}:${v.line}:${v.column} ${v.detail}`;
166
+ }
167
+ //# sourceMappingURL=contract-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-scan.js","sourceRoot":"","sources":["../../../../src/cli/lib/contract/contract-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /** Planner-sealed mission cage (ADR-0045). All fields optional; absent = inherit skill/policy. */
2
+ export interface MissionContract {
3
+ tmvc_roots?: string[];
4
+ forbidden_zones?: string[];
5
+ allowed_imports?: string[];
6
+ banned_imports?: string[];
7
+ allow_dynamic_specifiers?: boolean;
8
+ strict_relative_imports?: boolean;
9
+ }
10
+ /** Effective cage after merging skill roots, mission contract, and org policy (tighten-only). */
11
+ export interface EffectiveScope {
12
+ /** Repo-relative TMVC roots (contract narrowing when present, else skill roots). */
13
+ tmvcRoots: string[];
14
+ /** Union of skill, contract, and policy forbidden zones. */
15
+ forbiddenZones: string[];
16
+ /** Bare-specifier allowlist; empty = no allowlist enforced. */
17
+ allowedImports: string[];
18
+ /** Union of contract and policy banned bare specifiers (exact or prefix match). */
19
+ bannedImports: string[];
20
+ allowDynamicSpecifiers: boolean;
21
+ strictRelativeImports: boolean;
22
+ /** True when the mission declared a contract block. */
23
+ hasContract: boolean;
24
+ }
25
+ export type ContractViolationKind = "banned" | "unlisted" | "dynamic" | "scope_escape";
26
+ export interface ContractImportViolation {
27
+ kind: ContractViolationKind;
28
+ /** Repo-relative importing file. */
29
+ file: string;
30
+ line: number;
31
+ column: number;
32
+ /** Specifier text, or the raw expression for dynamic sites. */
33
+ specifier: string;
34
+ detail: string;
35
+ }
36
+ export declare const CONTRACT_ARRAY_KEYS: readonly ["tmvc_roots", "forbidden_zones", "allowed_imports", "banned_imports"];
37
+ export declare const CONTRACT_BOOLEAN_KEYS: readonly ["allow_dynamic_specifiers", "strict_relative_imports"];
38
+ //# sourceMappingURL=contract-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-types.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/contract/contract-types.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,iGAAiG;AACjG,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uDAAuD;IACvD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CAAC;AAEvF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,iFAKuB,CAAC;AAExD,eAAO,MAAM,qBAAqB,kEAGqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const CONTRACT_ARRAY_KEYS = [
2
+ "tmvc_roots",
3
+ "forbidden_zones",
4
+ "allowed_imports",
5
+ "banned_imports",
6
+ ];
7
+ export const CONTRACT_BOOLEAN_KEYS = [
8
+ "allow_dynamic_specifiers",
9
+ "strict_relative_imports",
10
+ ];
11
+ //# sourceMappingURL=contract-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-types.js","sourceRoot":"","sources":["../../../../src/cli/lib/contract/contract-types.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;CACqC,CAAC;AAExD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,0BAA0B;IAC1B,yBAAyB;CAC4B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { OrgPolicyBundle } from "../policy/policy-types.js";
2
+ import type { Manifest, ParsedMission } from "../types.js";
3
+ import type { EffectiveScope, MissionContract } from "./contract-types.js";
4
+ export interface ResolveEffectiveScopeInput {
5
+ manifest: Manifest;
6
+ skillKey: string;
7
+ contract: MissionContract | null;
8
+ /** Cached org policy bundle (ADR-0042); null when absent or unreadable. */
9
+ policy?: OrgPolicyBundle | null;
10
+ }
11
+ /** Best-effort offline policy bundle; verify's policy phase owns failure reporting. */
12
+ export declare function loadPolicyBundleQuiet(root: string): OrgPolicyBundle | null;
13
+ /**
14
+ * Tighten-only merge (RULES §4, §8): TMVC = contract narrowing or skill roots; forbidden zones and
15
+ * banned imports are unions of skill, contract, and policy. Throws GXT_CONTRACT_SCOPE_ESCAPE when the
16
+ * contract tries to widen scope.
17
+ */
18
+ export declare function resolveEffectiveScope(input: ResolveEffectiveScopeInput): EffectiveScope;
19
+ /** Convenience for callers holding a parsed mission and repo root (loads policy quietly). */
20
+ export declare function resolveEffectiveScopeForMission(root: string, manifest: Manifest, mission: ParsedMission): EffectiveScope;
21
+ //# sourceMappingURL=effective-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-scope.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/contract/effective-scope.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAI1E;AA+BD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,cAAc,CAyBvF;AAED,6FAA6F;AAC7F,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAWxH"}
@@ -0,0 +1,77 @@
1
+ import { GantryUserError } from "../errors.js";
2
+ import { GXT_ERROR } from "../gxt-error-codes.js";
3
+ import { resolveOrgPolicy } from "../policy/policy-resolve.js";
4
+ import { resolveManifestSkillKey } from "../skill-key.js";
5
+ import { isPathUnderRoot } from "../tmvc-path.js";
6
+ import { normalizeContract, normalizeContractPath } from "./contract-hash.js";
7
+ /** Best-effort offline policy bundle; verify's policy phase owns failure reporting. */
8
+ export function loadPolicyBundleQuiet(root) {
9
+ const resolved = resolveOrgPolicy(root);
10
+ if (!resolved.ok || !resolved.present)
11
+ return null;
12
+ return resolved.bundle;
13
+ }
14
+ function unionSorted(...lists) {
15
+ const out = new Set();
16
+ for (const list of lists)
17
+ for (const v of list)
18
+ if (v.trim())
19
+ out.add(v);
20
+ return [...out].sort();
21
+ }
22
+ function assertSubsetOfSkillRoots(contractRoots, skillRoots, skillKey) {
23
+ if (skillRoots.length === 0)
24
+ return;
25
+ const escaped = contractRoots.filter((r) => !skillRoots.some((s) => isPathUnderRoot(r, s)));
26
+ if (escaped.length === 0)
27
+ return;
28
+ throw new GantryUserError(GXT_ERROR.CONTRACT_SCOPE_ESCAPE, `${GXT_ERROR.CONTRACT_SCOPE_ESCAPE}: contract.tmvc_roots must stay inside skill ${skillKey} roots (${skillRoots.join(", ")}); escaped: ${escaped.join(", ")}`, "Narrow contract.tmvc_roots to a subset of the manifest skill tmvc_roots, or legislate under a skill that owns those roots.", 2);
29
+ }
30
+ function assertRootsOutsideForbidden(contractRoots, forbidden) {
31
+ const hits = contractRoots.filter((r) => forbidden.some((fz) => isPathUnderRoot(r, fz)));
32
+ if (hits.length === 0)
33
+ return;
34
+ throw new GantryUserError(GXT_ERROR.CONTRACT_SCOPE_ESCAPE, `${GXT_ERROR.CONTRACT_SCOPE_ESCAPE}: contract.tmvc_roots overlap forbidden zones: ${hits.join(", ")}`, "Remove the forbidden path from contract.tmvc_roots; forbidden zones are tighten-only and cannot be re-opened by a mission.", 2);
35
+ }
36
+ /**
37
+ * Tighten-only merge (RULES §4, §8): TMVC = contract narrowing or skill roots; forbidden zones and
38
+ * banned imports are unions of skill, contract, and policy. Throws GXT_CONTRACT_SCOPE_ESCAPE when the
39
+ * contract tries to widen scope.
40
+ */
41
+ export function resolveEffectiveScope(input) {
42
+ const skillKey = resolveManifestSkillKey(input.manifest, input.skillKey);
43
+ const skill = input.manifest.skills[skillKey];
44
+ const skillRoots = (skill?.tmvc_roots ?? []).map(normalizeContractPath);
45
+ const skillForbidden = (skill?.forbidden_zones ?? []).map(normalizeContractPath);
46
+ const contract = input.contract ? normalizeContract(input.contract) : {};
47
+ const policy = input.policy ?? null;
48
+ const policyForbidden = (policy?.manifest_constraints?.forbidden_zones_add ?? []).map(normalizeContractPath);
49
+ const policyBanned = (policy?.banned_imports ?? []).map((b) => b.specifier.trim());
50
+ const forbiddenZones = unionSorted(skillForbidden, contract.forbidden_zones ?? [], policyForbidden);
51
+ const contractRoots = contract.tmvc_roots ?? [];
52
+ assertSubsetOfSkillRoots(contractRoots, skillRoots, skillKey);
53
+ assertRootsOutsideForbidden(contractRoots, forbiddenZones);
54
+ return {
55
+ tmvcRoots: contractRoots.length > 0 ? contractRoots : skillRoots,
56
+ forbiddenZones,
57
+ allowedImports: [...(contract.allowed_imports ?? [])],
58
+ bannedImports: unionSorted(contract.banned_imports ?? [], policyBanned),
59
+ allowDynamicSpecifiers: contract.allow_dynamic_specifiers === true,
60
+ strictRelativeImports: contract.strict_relative_imports === true,
61
+ hasContract: input.contract !== null,
62
+ };
63
+ }
64
+ /** Convenience for callers holding a parsed mission and repo root (loads policy quietly). */
65
+ export function resolveEffectiveScopeForMission(root, manifest, mission) {
66
+ const skillKey = mission.skillKey?.trim();
67
+ if (!skillKey) {
68
+ throw new GantryUserError("MISSION_SCHEMA_INVALID", `mission missing skill_key (${mission.rawPath})`, undefined, 2);
69
+ }
70
+ return resolveEffectiveScope({
71
+ manifest,
72
+ skillKey,
73
+ contract: mission.contract,
74
+ policy: loadPolicyBundleQuiet(root),
75
+ });
76
+ }
77
+ //# sourceMappingURL=effective-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-scope.js","sourceRoot":"","sources":["../../../../src/cli/lib/contract/effective-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { EffectiveScope, MissionContract } from "./contract-types.js";
2
+ import type { ProposedGate } from "./propose-gate.js";
3
+ export interface CageFormatInput {
4
+ tmvcRoots?: readonly string[];
5
+ forbiddenZones?: readonly string[];
6
+ allowedImports?: readonly string[];
7
+ bannedImports?: readonly string[];
8
+ allowDynamicSpecifiers?: boolean;
9
+ strictRelativeImports?: boolean;
10
+ emptyRoots?: string;
11
+ emptyForbidden?: string;
12
+ emptyAllowed?: string;
13
+ emptyBanned?: string;
14
+ gate?: ProposedGate | null;
15
+ }
16
+ /** Four cage lists + flags. Check, show, and propose share this. */
17
+ export declare function formatCage(input: CageFormatInput): string;
18
+ export declare function formatContractBlock(contract: MissionContract, gate?: ProposedGate | null): string;
19
+ export declare function formatEffectiveScope(scope: EffectiveScope, gate?: ProposedGate | null): string;
20
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/contract/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC5B;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAmBzD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,CAUjG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,CAc9F"}
@@ -0,0 +1,48 @@
1
+ function csv(values, empty) {
2
+ return values && values.length > 0 ? values.join(", ") : empty;
3
+ }
4
+ /** Four cage lists + flags. Check, show, and propose share this. */
5
+ export function formatCage(input) {
6
+ const lines = [
7
+ "Scope:",
8
+ ` ${csv(input.tmvcRoots, input.emptyRoots ?? "(inherit skill roots)")}`,
9
+ "Forbidden:",
10
+ ` ${csv(input.forbiddenZones, input.emptyForbidden ?? "(none beyond skill/policy)")}`,
11
+ ];
12
+ if (input.gate !== undefined) {
13
+ lines.push("Gate:", ` ${input.gate?.command ?? "(unchanged)"}`);
14
+ }
15
+ lines.push("Allowed Imports:", ` ${csv(input.allowedImports, input.emptyAllowed ?? "(any bare specifier)")}`, "Banned Imports:", ` ${csv(input.bannedImports, input.emptyBanned ?? "(none)")}`);
16
+ if (input.allowDynamicSpecifiers === true)
17
+ lines.push("Dynamic specifiers: allowed");
18
+ if (input.strictRelativeImports === true)
19
+ lines.push("Strict relative imports: on");
20
+ return lines.join("\n");
21
+ }
22
+ export function formatContractBlock(contract, gate) {
23
+ return formatCage({
24
+ tmvcRoots: contract.tmvc_roots,
25
+ forbiddenZones: contract.forbidden_zones,
26
+ allowedImports: contract.allowed_imports,
27
+ bannedImports: contract.banned_imports,
28
+ allowDynamicSpecifiers: contract.allow_dynamic_specifiers,
29
+ strictRelativeImports: contract.strict_relative_imports,
30
+ gate: gate ?? null,
31
+ });
32
+ }
33
+ export function formatEffectiveScope(scope, gate) {
34
+ return formatCage({
35
+ tmvcRoots: scope.tmvcRoots,
36
+ forbiddenZones: scope.forbiddenZones,
37
+ allowedImports: scope.allowedImports,
38
+ bannedImports: scope.bannedImports,
39
+ allowDynamicSpecifiers: scope.allowDynamicSpecifiers,
40
+ strictRelativeImports: scope.strictRelativeImports,
41
+ emptyRoots: "(none)",
42
+ emptyForbidden: "(none)",
43
+ emptyAllowed: "(any)",
44
+ emptyBanned: "(none)",
45
+ gate,
46
+ });
47
+ }
48
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/cli/lib/contract/format.ts"],"names":[],"mappings":"AAGA,SAAS,GAAG,CAAC,MAAqC,EAAE,KAAa;IAC/D,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AAgBD,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,uBAAuB,CAAC,EAAE;QACxE,YAAY;QACZ,KAAK,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,4BAA4B,CAAC,EAAE;KACvF,CAAC;IACF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,CAAC,IAAI,CACR,kBAAkB,EAClB,KAAK,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,IAAI,sBAAsB,CAAC,EAAE,EAC9E,iBAAiB,EACjB,KAAK,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,EAAE,CAC/D,CAAC;IACF,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACrF,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAyB,EAAE,IAA0B;IACvF,OAAO,UAAU,CAAC;QAChB,SAAS,EAAE,QAAQ,CAAC,UAAU;QAC9B,cAAc,EAAE,QAAQ,CAAC,eAAe;QACxC,cAAc,EAAE,QAAQ,CAAC,eAAe;QACxC,aAAa,EAAE,QAAQ,CAAC,cAAc;QACtC,sBAAsB,EAAE,QAAQ,CAAC,wBAAwB;QACzD,qBAAqB,EAAE,QAAQ,CAAC,uBAAuB;QACvD,IAAI,EAAE,IAAI,IAAI,IAAI;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAqB,EAAE,IAA0B;IACpF,OAAO,UAAU,CAAC;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,QAAQ;QACrB,IAAI;KACL,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { SkillEntry } from "../types.js";
2
+ export interface ProposedGate {
3
+ command: string;
4
+ successSubstring: string | null;
5
+ }
6
+ /**
7
+ * Prefer a skill allowlist entry whose text names a proposed TMVC root segment (e.g. `test:billing`),
8
+ * else the first allowlisted command. `package.json` script names are a secondary signal when no
9
+ * allowlist exists. Falls back to `echo OK` so interrogation can raise `missing_test_criteria`.
10
+ */
11
+ export declare function proposeGate(input: {
12
+ root: string;
13
+ skill: SkillEntry | undefined;
14
+ proposedRoots: readonly string[];
15
+ explicitCommand?: string;
16
+ explicitSuccess?: string;
17
+ }): {
18
+ gate: ProposedGate;
19
+ rationale: string;
20
+ };
21
+ //# sourceMappingURL=propose-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-gate.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/contract/propose-gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAsBD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA8B5C"}
@@ -0,0 +1,57 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ function packageScripts(root) {
4
+ const abs = path.join(root, "package.json");
5
+ if (!fs.existsSync(abs))
6
+ return [];
7
+ try {
8
+ const scripts = JSON.parse(fs.readFileSync(abs, "utf8")).scripts;
9
+ return scripts ? Object.keys(scripts).sort() : [];
10
+ }
11
+ catch {
12
+ return [];
13
+ }
14
+ }
15
+ function rootSegmentHits(command, roots) {
16
+ let hits = 0;
17
+ for (const root of roots) {
18
+ const seg = root.replace(/\/$/, "").split("/").filter(Boolean).pop();
19
+ if (seg && command.includes(seg))
20
+ hits += 1;
21
+ }
22
+ return hits;
23
+ }
24
+ /**
25
+ * Prefer a skill allowlist entry whose text names a proposed TMVC root segment (e.g. `test:billing`),
26
+ * else the first allowlisted command. `package.json` script names are a secondary signal when no
27
+ * allowlist exists. Falls back to `echo OK` so interrogation can raise `missing_test_criteria`.
28
+ */
29
+ export function proposeGate(input) {
30
+ if (input.explicitCommand?.trim()) {
31
+ const command = input.explicitCommand.trim();
32
+ return {
33
+ gate: {
34
+ command,
35
+ successSubstring: input.explicitSuccess !== undefined ? input.explicitSuccess.trim() || null : null,
36
+ },
37
+ rationale: `gate_command from --gate-command: ${command}`,
38
+ };
39
+ }
40
+ const allow = input.skill?.gate_commands ?? [];
41
+ if (allow.length > 0) {
42
+ const ranked = [...allow].sort((a, b) => rootSegmentHits(b, input.proposedRoots) - rootSegmentHits(a, input.proposedRoots) || a.localeCompare(b));
43
+ const command = ranked[0];
44
+ return { gate: { command, successSubstring: null }, rationale: `gate_command from skill allowlist: ${command}` };
45
+ }
46
+ const scripts = packageScripts(input.root);
47
+ const scriptHit = scripts.find((s) => rootSegmentHits(`npm run ${s}`, input.proposedRoots) > 0);
48
+ if (scriptHit) {
49
+ const command = `npm run ${scriptHit}`;
50
+ return { gate: { command, successSubstring: null }, rationale: `gate_command from package.json script matching a TMVC segment: ${command}` };
51
+ }
52
+ return {
53
+ gate: { command: "echo OK", successSubstring: "OK" },
54
+ rationale: "gate_command fallback echo OK (no skill allowlist; interrogation may raise missing_test_criteria)",
55
+ };
56
+ }
57
+ //# sourceMappingURL=propose-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-gate.js","sourceRoot":"","sources":["../../../../src/cli/lib/contract/propose-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { OrgPolicyBundle } from "../policy/policy-types.js";
2
+ export interface WorkspacePackage {
3
+ name: string;
4
+ dir: string;
5
+ }
6
+ /** Workspace packages from root `package.json` `workspaces` (no npm expand). */
7
+ export declare function listWorkspacePackages(root: string): WorkspacePackage[];
8
+ export interface ProposeImportsInput {
9
+ root: string;
10
+ proposedRoots: readonly string[];
11
+ forbiddenZones: readonly string[];
12
+ policy: OrgPolicyBundle | null;
13
+ }
14
+ export interface ProposeImportsResult {
15
+ allowed_imports: string[];
16
+ banned_imports: string[];
17
+ extraForbidden: string[];
18
+ rationale: string[];
19
+ }
20
+ /**
21
+ * Allowed = bare specifiers already imported under proposed roots. Banned = policy ∪ arch
22
+ * substring rules ∪ specifiers seen only in forbidden zones. Workspace packages named by a
23
+ * banned specifier have their directory appended so relative traversal cannot substitute.
24
+ */
25
+ export declare function proposeImports(input: ProposeImportsInput): ProposeImportsResult;
26
+ //# sourceMappingURL=propose-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose-imports.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/contract/propose-imports.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAuBD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAsBtE;AAoCD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA0B/E"}