tracegrove 0.0.0-stage → 0.3.1

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 (703) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +61 -2
  3. package/dist/adapters/browser/capabilities.d.ts +45 -0
  4. package/dist/adapters/browser/capabilities.js +14 -0
  5. package/dist/adapters/browser/capabilities.js.map +1 -0
  6. package/dist/adapters/browser/driver.d.ts +45 -0
  7. package/dist/adapters/browser/driver.js +295 -0
  8. package/dist/adapters/browser/driver.js.map +1 -0
  9. package/dist/adapters/browser/session.d.ts +21 -0
  10. package/dist/adapters/browser/session.js +87 -0
  11. package/dist/adapters/browser/session.js.map +1 -0
  12. package/dist/adapters/http/capabilities.d.ts +2 -0
  13. package/dist/adapters/http/capabilities.js +21 -0
  14. package/dist/adapters/http/capabilities.js.map +1 -0
  15. package/dist/adapters/http/driver.d.ts +55 -0
  16. package/dist/adapters/http/driver.js +125 -0
  17. package/dist/adapters/http/driver.js.map +1 -0
  18. package/dist/adapters/job/capabilities.d.ts +45 -0
  19. package/dist/adapters/job/capabilities.js +8 -0
  20. package/dist/adapters/job/capabilities.js.map +1 -0
  21. package/dist/adapters/job/driver.d.ts +26 -0
  22. package/dist/adapters/job/driver.js +110 -0
  23. package/dist/adapters/job/driver.js.map +1 -0
  24. package/dist/adapters/job/types.d.ts +9 -0
  25. package/dist/adapters/job/types.js +2 -0
  26. package/dist/adapters/job/types.js.map +1 -0
  27. package/dist/adapters/mcp/capabilities.d.ts +46 -0
  28. package/dist/adapters/mcp/capabilities.js +17 -0
  29. package/dist/adapters/mcp/capabilities.js.map +1 -0
  30. package/dist/adapters/mcp/driver.d.ts +10 -0
  31. package/dist/adapters/mcp/driver.js +83 -0
  32. package/dist/adapters/mcp/driver.js.map +1 -0
  33. package/dist/adapters/poll.d.ts +12 -0
  34. package/dist/adapters/poll.js +31 -0
  35. package/dist/adapters/poll.js.map +1 -0
  36. package/dist/authoring/activity.d.ts +17 -0
  37. package/dist/authoring/activity.js +18 -0
  38. package/dist/authoring/activity.js.map +1 -0
  39. package/dist/authoring/agent.d.ts +70 -0
  40. package/dist/authoring/agent.js +268 -0
  41. package/dist/authoring/agent.js.map +1 -0
  42. package/dist/authoring/appLaunch.d.ts +7 -0
  43. package/dist/authoring/appLaunch.js +32 -0
  44. package/dist/authoring/appLaunch.js.map +1 -0
  45. package/dist/authoring/appLocation.d.ts +2 -0
  46. package/dist/authoring/appLocation.js +5 -0
  47. package/dist/authoring/appLocation.js.map +1 -0
  48. package/dist/authoring/browser.d.ts +15 -0
  49. package/dist/authoring/browser.js +20 -0
  50. package/dist/authoring/browser.js.map +1 -0
  51. package/dist/authoring/compile.d.ts +47 -0
  52. package/dist/authoring/compile.js +508 -0
  53. package/dist/authoring/compile.js.map +1 -0
  54. package/dist/authoring/discover.d.ts +43 -0
  55. package/dist/authoring/discover.js +149 -0
  56. package/dist/authoring/discover.js.map +1 -0
  57. package/dist/authoring/environmentTemplates.d.ts +3 -0
  58. package/dist/authoring/environmentTemplates.js +24 -0
  59. package/dist/authoring/environmentTemplates.js.map +1 -0
  60. package/dist/authoring/heal.d.ts +108 -0
  61. package/dist/authoring/heal.js +723 -0
  62. package/dist/authoring/heal.js.map +1 -0
  63. package/dist/authoring/index.d.ts +14 -0
  64. package/dist/authoring/index.js +15 -0
  65. package/dist/authoring/index.js.map +1 -0
  66. package/dist/authoring/init.d.ts +21 -0
  67. package/dist/authoring/init.js +141 -0
  68. package/dist/authoring/init.js.map +1 -0
  69. package/dist/authoring/localSettings.d.ts +33 -0
  70. package/dist/authoring/localSettings.js +31 -0
  71. package/dist/authoring/localSettings.js.map +1 -0
  72. package/dist/authoring/media.d.ts +10 -0
  73. package/dist/authoring/media.js +37 -0
  74. package/dist/authoring/media.js.map +1 -0
  75. package/dist/authoring/module.d.ts +2 -0
  76. package/dist/authoring/module.js +38 -0
  77. package/dist/authoring/module.js.map +1 -0
  78. package/dist/authoring/run.d.ts +74 -0
  79. package/dist/authoring/run.js +242 -0
  80. package/dist/authoring/run.js.map +1 -0
  81. package/dist/authoring/runSource.d.ts +6 -0
  82. package/dist/authoring/runSource.js +24 -0
  83. package/dist/authoring/runSource.js.map +1 -0
  84. package/dist/authoring/savedRun.d.ts +13 -0
  85. package/dist/authoring/savedRun.js +94 -0
  86. package/dist/authoring/savedRun.js.map +1 -0
  87. package/dist/authoring/schema.d.ts +574 -0
  88. package/dist/authoring/schema.js +147 -0
  89. package/dist/authoring/schema.js.map +1 -0
  90. package/dist/authoring/snapshotSource.d.ts +13 -0
  91. package/dist/authoring/snapshotSource.js +41 -0
  92. package/dist/authoring/snapshotSource.js.map +1 -0
  93. package/dist/authoring/sourceSelection.d.ts +34 -0
  94. package/dist/authoring/sourceSelection.js +13 -0
  95. package/dist/authoring/sourceSelection.js.map +1 -0
  96. package/dist/authoring/sources.d.ts +5 -0
  97. package/dist/authoring/sources.js +65 -0
  98. package/dist/authoring/sources.js.map +1 -0
  99. package/dist/authoring/status.d.ts +48 -0
  100. package/dist/authoring/status.js +100 -0
  101. package/dist/authoring/status.js.map +1 -0
  102. package/dist/authoring/typed.d.ts +6 -0
  103. package/dist/authoring/typed.js +5 -0
  104. package/dist/authoring/typed.js.map +1 -0
  105. package/dist/authoring/ui.d.ts +10 -0
  106. package/dist/authoring/ui.js +486 -0
  107. package/dist/authoring/ui.js.map +1 -0
  108. package/dist/authoring/uiPage.d.ts +1 -0
  109. package/dist/authoring/uiPage.js +358 -0
  110. package/dist/authoring/uiPage.js.map +1 -0
  111. package/dist/authoring/uiSourceControls.d.ts +2 -0
  112. package/dist/authoring/uiSourceControls.js +41 -0
  113. package/dist/authoring/uiSourceControls.js.map +1 -0
  114. package/dist/authoring/verificationSource.d.ts +41 -0
  115. package/dist/authoring/verificationSource.js +46 -0
  116. package/dist/authoring/verificationSource.js.map +1 -0
  117. package/dist/authoring/workspace.d.ts +33 -0
  118. package/dist/authoring/workspace.js +58 -0
  119. package/dist/authoring/workspace.js.map +1 -0
  120. package/dist/cli/arguments.d.ts +288 -0
  121. package/dist/cli/arguments.js +121 -0
  122. package/dist/cli/arguments.js.map +1 -0
  123. package/dist/cli/cleanup.d.ts +18 -0
  124. package/dist/cli/cleanup.js +40 -0
  125. package/dist/cli/cleanup.js.map +1 -0
  126. package/dist/cli/doctor.d.ts +51 -0
  127. package/dist/cli/doctor.js +118 -0
  128. package/dist/cli/doctor.js.map +1 -0
  129. package/dist/cli/errors.d.ts +2 -0
  130. package/dist/cli/errors.js +84 -0
  131. package/dist/cli/errors.js.map +1 -0
  132. package/dist/cli/jsonFile.d.ts +2 -0
  133. package/dist/cli/jsonFile.js +15 -0
  134. package/dist/cli/jsonFile.js.map +1 -0
  135. package/dist/cli/main.d.ts +2 -0
  136. package/dist/cli/main.js +603 -0
  137. package/dist/cli/main.js.map +1 -0
  138. package/dist/cli/render.d.ts +22 -0
  139. package/dist/cli/render.js +150 -0
  140. package/dist/cli/render.js.map +1 -0
  141. package/dist/cli/samples/catalog.d.ts +10 -0
  142. package/dist/cli/samples/catalog.js +3 -0
  143. package/dist/cli/samples/catalog.js.map +1 -0
  144. package/dist/cli/samples/write.d.ts +5 -0
  145. package/dist/cli/samples/write.js +64 -0
  146. package/dist/cli/samples/write.js.map +1 -0
  147. package/dist/cli/source.d.ts +41 -0
  148. package/dist/cli/source.js +59 -0
  149. package/dist/cli/source.js.map +1 -0
  150. package/dist/core/activationDecision.d.ts +153 -0
  151. package/dist/core/activationDecision.js +34 -0
  152. package/dist/core/activationDecision.js.map +1 -0
  153. package/dist/core/artifacts.d.ts +18 -0
  154. package/dist/core/artifacts.js +79 -0
  155. package/dist/core/artifacts.js.map +1 -0
  156. package/dist/core/atomicFiles.d.ts +9 -0
  157. package/dist/core/atomicFiles.js +76 -0
  158. package/dist/core/atomicFiles.js.map +1 -0
  159. package/dist/core/boundedFile.d.ts +2 -0
  160. package/dist/core/boundedFile.js +28 -0
  161. package/dist/core/boundedFile.js.map +1 -0
  162. package/dist/core/bundle.d.ts +77 -0
  163. package/dist/core/bundle.js +375 -0
  164. package/dist/core/bundle.js.map +1 -0
  165. package/dist/core/bundleArchive.d.ts +10 -0
  166. package/dist/core/bundleArchive.js +47 -0
  167. package/dist/core/bundleArchive.js.map +1 -0
  168. package/dist/core/bundleEvidence.d.ts +12 -0
  169. package/dist/core/bundleEvidence.js +169 -0
  170. package/dist/core/bundleEvidence.js.map +1 -0
  171. package/dist/core/bundleExport.d.ts +12 -0
  172. package/dist/core/bundleExport.js +36 -0
  173. package/dist/core/bundleExport.js.map +1 -0
  174. package/dist/core/bundleFiles.d.ts +5 -0
  175. package/dist/core/bundleFiles.js +47 -0
  176. package/dist/core/bundleFiles.js.map +1 -0
  177. package/dist/core/bundlePaths.d.ts +2 -0
  178. package/dist/core/bundlePaths.js +7 -0
  179. package/dist/core/bundlePaths.js.map +1 -0
  180. package/dist/core/bundleSnapshot.d.ts +26 -0
  181. package/dist/core/bundleSnapshot.js +71 -0
  182. package/dist/core/bundleSnapshot.js.map +1 -0
  183. package/dist/core/capabilityBoundary.d.ts +1452 -0
  184. package/dist/core/capabilityBoundary.js +361 -0
  185. package/dist/core/capabilityBoundary.js.map +1 -0
  186. package/dist/core/capabilityLifecycle.d.ts +366 -0
  187. package/dist/core/capabilityLifecycle.js +79 -0
  188. package/dist/core/capabilityLifecycle.js.map +1 -0
  189. package/dist/core/cleanup.d.ts +35 -0
  190. package/dist/core/cleanup.js +71 -0
  191. package/dist/core/cleanup.js.map +1 -0
  192. package/dist/core/cleanupActions.d.ts +5 -0
  193. package/dist/core/cleanupActions.js +15 -0
  194. package/dist/core/cleanupActions.js.map +1 -0
  195. package/dist/core/cleanupAttestation.d.ts +23 -0
  196. package/dist/core/cleanupAttestation.js +57 -0
  197. package/dist/core/cleanupAttestation.js.map +1 -0
  198. package/dist/core/clock.d.ts +4 -0
  199. package/dist/core/clock.js +14 -0
  200. package/dist/core/clock.js.map +1 -0
  201. package/dist/core/compiler.d.ts +19 -0
  202. package/dist/core/compiler.js +200 -0
  203. package/dist/core/compiler.js.map +1 -0
  204. package/dist/core/controller.d.ts +7 -0
  205. package/dist/core/controller.js +132 -0
  206. package/dist/core/controller.js.map +1 -0
  207. package/dist/core/coordination.d.ts +72 -0
  208. package/dist/core/coordination.js +118 -0
  209. package/dist/core/coordination.js.map +1 -0
  210. package/dist/core/corpus.d.ts +60 -0
  211. package/dist/core/corpus.js +216 -0
  212. package/dist/core/corpus.js.map +1 -0
  213. package/dist/core/deadline.d.ts +12 -0
  214. package/dist/core/deadline.js +38 -0
  215. package/dist/core/deadline.js.map +1 -0
  216. package/dist/core/deliveryJournal.d.ts +37 -0
  217. package/dist/core/deliveryJournal.js +85 -0
  218. package/dist/core/deliveryJournal.js.map +1 -0
  219. package/dist/core/environmentPreflight.d.ts +14 -0
  220. package/dist/core/environmentPreflight.js +179 -0
  221. package/dist/core/environmentPreflight.js.map +1 -0
  222. package/dist/core/errors.d.ts +22 -0
  223. package/dist/core/errors.js +29 -0
  224. package/dist/core/errors.js.map +1 -0
  225. package/dist/core/events.d.ts +14 -0
  226. package/dist/core/events.js +37 -0
  227. package/dist/core/events.js.map +1 -0
  228. package/dist/core/executionInspection.d.ts +90 -0
  229. package/dist/core/executionInspection.js +31 -0
  230. package/dist/core/executionInspection.js.map +1 -0
  231. package/dist/core/executionOwnership.d.ts +72 -0
  232. package/dist/core/executionOwnership.js +82 -0
  233. package/dist/core/executionOwnership.js.map +1 -0
  234. package/dist/core/executionPreparation.d.ts +362 -0
  235. package/dist/core/executionPreparation.js +93 -0
  236. package/dist/core/executionPreparation.js.map +1 -0
  237. package/dist/core/executionReadback.d.ts +15 -0
  238. package/dist/core/executionReadback.js +21 -0
  239. package/dist/core/executionReadback.js.map +1 -0
  240. package/dist/core/executor.d.ts +46 -0
  241. package/dist/core/executor.js +616 -0
  242. package/dist/core/executor.js.map +1 -0
  243. package/dist/core/frozenBundle.d.ts +314 -0
  244. package/dist/core/frozenBundle.js +24 -0
  245. package/dist/core/frozenBundle.js.map +1 -0
  246. package/dist/core/fsDurability.d.ts +2 -0
  247. package/dist/core/fsDurability.js +12 -0
  248. package/dist/core/fsDurability.js.map +1 -0
  249. package/dist/core/generators.d.ts +4 -0
  250. package/dist/core/generators.js +71 -0
  251. package/dist/core/generators.js.map +1 -0
  252. package/dist/core/gitSnapshot.d.ts +63 -0
  253. package/dist/core/gitSnapshot.js +55 -0
  254. package/dist/core/gitSnapshot.js.map +1 -0
  255. package/dist/core/gitSources.d.ts +29 -0
  256. package/dist/core/gitSources.js +97 -0
  257. package/dist/core/gitSources.js.map +1 -0
  258. package/dist/core/ledger.d.ts +38 -0
  259. package/dist/core/ledger.js +169 -0
  260. package/dist/core/ledger.js.map +1 -0
  261. package/dist/core/ledgerInspection.d.ts +18 -0
  262. package/dist/core/ledgerInspection.js +66 -0
  263. package/dist/core/ledgerInspection.js.map +1 -0
  264. package/dist/core/ledgerRecords.d.ts +23 -0
  265. package/dist/core/ledgerRecords.js +29 -0
  266. package/dist/core/ledgerRecords.js.map +1 -0
  267. package/dist/core/localActivationState.d.ts +260 -0
  268. package/dist/core/localActivationState.js +49 -0
  269. package/dist/core/localActivationState.js.map +1 -0
  270. package/dist/core/localPromotionState.d.ts +387 -0
  271. package/dist/core/localPromotionState.js +22 -0
  272. package/dist/core/localPromotionState.js.map +1 -0
  273. package/dist/core/localQualificationResults.d.ts +39 -0
  274. package/dist/core/localQualificationResults.js +160 -0
  275. package/dist/core/localQualificationResults.js.map +1 -0
  276. package/dist/core/localReviewStore.d.ts +28 -0
  277. package/dist/core/localReviewStore.js +167 -0
  278. package/dist/core/localReviewStore.js.map +1 -0
  279. package/dist/core/localScenarioActivation.d.ts +6 -0
  280. package/dist/core/localScenarioActivation.js +70 -0
  281. package/dist/core/localScenarioActivation.js.map +1 -0
  282. package/dist/core/localScenarioOwner.d.ts +20 -0
  283. package/dist/core/localScenarioOwner.js +2 -0
  284. package/dist/core/localScenarioOwner.js.map +1 -0
  285. package/dist/core/localScenarioPromotion.d.ts +9 -0
  286. package/dist/core/localScenarioPromotion.js +49 -0
  287. package/dist/core/localScenarioPromotion.js.map +1 -0
  288. package/dist/core/localScenarioState.d.ts +2297 -0
  289. package/dist/core/localScenarioState.js +117 -0
  290. package/dist/core/localScenarioState.js.map +1 -0
  291. package/dist/core/localScenarioStore.d.ts +838 -0
  292. package/dist/core/localScenarioStore.js +218 -0
  293. package/dist/core/localScenarioStore.js.map +1 -0
  294. package/dist/core/localScenarioStructure.d.ts +4 -0
  295. package/dist/core/localScenarioStructure.js +52 -0
  296. package/dist/core/localScenarioStructure.js.map +1 -0
  297. package/dist/core/localStructureState.d.ts +2 -0
  298. package/dist/core/localStructureState.js +22 -0
  299. package/dist/core/localStructureState.js.map +1 -0
  300. package/dist/core/lookup.d.ts +662 -0
  301. package/dist/core/lookup.js +55 -0
  302. package/dist/core/lookup.js.map +1 -0
  303. package/dist/core/ownership.d.ts +3 -0
  304. package/dist/core/ownership.js +24 -0
  305. package/dist/core/ownership.js.map +1 -0
  306. package/dist/core/planInspection.d.ts +108 -0
  307. package/dist/core/planInspection.js +44 -0
  308. package/dist/core/planInspection.js.map +1 -0
  309. package/dist/core/planner.d.ts +14 -0
  310. package/dist/core/planner.js +261 -0
  311. package/dist/core/planner.js.map +1 -0
  312. package/dist/core/qualification.d.ts +26 -0
  313. package/dist/core/qualification.js +58 -0
  314. package/dist/core/qualification.js.map +1 -0
  315. package/dist/core/qualificationBundle.d.ts +6 -0
  316. package/dist/core/qualificationBundle.js +51 -0
  317. package/dist/core/qualificationBundle.js.map +1 -0
  318. package/dist/core/qualificationExecution.d.ts +879 -0
  319. package/dist/core/qualificationExecution.js +54 -0
  320. package/dist/core/qualificationExecution.js.map +1 -0
  321. package/dist/core/recoveryStatus.d.ts +6 -0
  322. package/dist/core/recoveryStatus.js +123 -0
  323. package/dist/core/recoveryStatus.js.map +1 -0
  324. package/dist/core/reducer.d.ts +56 -0
  325. package/dist/core/reducer.js +355 -0
  326. package/dist/core/reducer.js.map +1 -0
  327. package/dist/core/replayAssessment.d.ts +15 -0
  328. package/dist/core/replayAssessment.js +78 -0
  329. package/dist/core/replayAssessment.js.map +1 -0
  330. package/dist/core/replayEvidence.d.ts +7 -0
  331. package/dist/core/replayEvidence.js +58 -0
  332. package/dist/core/replayEvidence.js.map +1 -0
  333. package/dist/core/repositorySelectionEvidence.d.ts +3 -0
  334. package/dist/core/repositorySelectionEvidence.js +58 -0
  335. package/dist/core/repositorySelectionEvidence.js.map +1 -0
  336. package/dist/core/rerun.d.ts +3 -0
  337. package/dist/core/rerun.js +24 -0
  338. package/dist/core/rerun.js.map +1 -0
  339. package/dist/core/resultSink.d.ts +52 -0
  340. package/dist/core/resultSink.js +120 -0
  341. package/dist/core/resultSink.js.map +1 -0
  342. package/dist/core/review.d.ts +22 -0
  343. package/dist/core/review.js +65 -0
  344. package/dist/core/review.js.map +1 -0
  345. package/dist/core/runnerCapabilities.d.ts +22 -0
  346. package/dist/core/runnerCapabilities.js +44 -0
  347. package/dist/core/runnerCapabilities.js.map +1 -0
  348. package/dist/core/scenario.d.ts +32 -0
  349. package/dist/core/scenario.js +119 -0
  350. package/dist/core/scenario.js.map +1 -0
  351. package/dist/core/scenarioActivation.d.ts +16 -0
  352. package/dist/core/scenarioActivation.js +47 -0
  353. package/dist/core/scenarioActivation.js.map +1 -0
  354. package/dist/core/scenarioStructure.d.ts +400 -0
  355. package/dist/core/scenarioStructure.js +72 -0
  356. package/dist/core/scenarioStructure.js.map +1 -0
  357. package/dist/core/snapshotEvidence.d.ts +3 -0
  358. package/dist/core/snapshotEvidence.js +37 -0
  359. package/dist/core/snapshotEvidence.js.map +1 -0
  360. package/dist/core/snapshotRepository.d.ts +48 -0
  361. package/dist/core/snapshotRepository.js +47 -0
  362. package/dist/core/snapshotRepository.js.map +1 -0
  363. package/dist/core/source-analysis.d.ts +18 -0
  364. package/dist/core/source-analysis.js +99 -0
  365. package/dist/core/source-analysis.js.map +1 -0
  366. package/dist/core/source-citation.d.ts +53 -0
  367. package/dist/core/source-citation.js +59 -0
  368. package/dist/core/source-citation.js.map +1 -0
  369. package/dist/core/sourcePromotion.d.ts +929 -0
  370. package/dist/core/sourcePromotion.js +92 -0
  371. package/dist/core/sourcePromotion.js.map +1 -0
  372. package/dist/core/sourceReviewEvidence.d.ts +271 -0
  373. package/dist/core/sourceReviewEvidence.js +24 -0
  374. package/dist/core/sourceReviewEvidence.js.map +1 -0
  375. package/dist/core/targetObservation.d.ts +3 -0
  376. package/dist/core/targetObservation.js +26 -0
  377. package/dist/core/targetObservation.js.map +1 -0
  378. package/dist/hosts/launchTemplates.d.ts +2 -0
  379. package/dist/hosts/launchTemplates.js +5 -0
  380. package/dist/hosts/launchTemplates.js.map +1 -0
  381. package/dist/hosts/local.d.ts +17 -0
  382. package/dist/hosts/local.js +311 -0
  383. package/dist/hosts/local.js.map +1 -0
  384. package/dist/hosts/localSupervisor.d.ts +1 -0
  385. package/dist/hosts/localSupervisor.js +115 -0
  386. package/dist/hosts/localSupervisor.js.map +1 -0
  387. package/dist/hosts/mock.d.ts +4 -0
  388. package/dist/hosts/mock.js +82 -0
  389. package/dist/hosts/mock.js.map +1 -0
  390. package/dist/hosts/pinnedArguments.d.ts +3 -0
  391. package/dist/hosts/pinnedArguments.js +39 -0
  392. package/dist/hosts/pinnedArguments.js.map +1 -0
  393. package/dist/hosts/runtime.d.ts +5 -0
  394. package/dist/hosts/runtime.js +60 -0
  395. package/dist/hosts/runtime.js.map +1 -0
  396. package/dist/hosts/sourceIdentity.d.ts +54 -0
  397. package/dist/hosts/sourceIdentity.js +27 -0
  398. package/dist/hosts/sourceIdentity.js.map +1 -0
  399. package/dist/hosts/types.d.ts +39 -0
  400. package/dist/hosts/types.js +2 -0
  401. package/dist/hosts/types.js.map +1 -0
  402. package/dist/index.d.ts +56 -0
  403. package/dist/index.js +52 -0
  404. package/dist/index.js.map +1 -0
  405. package/dist/integrations/awr/attachment.d.ts +34 -0
  406. package/dist/integrations/awr/attachment.js +120 -0
  407. package/dist/integrations/awr/attachment.js.map +1 -0
  408. package/dist/integrations/awr/attachmentContracts.d.ts +273 -0
  409. package/dist/integrations/awr/attachmentContracts.js +39 -0
  410. package/dist/integrations/awr/attachmentContracts.js.map +1 -0
  411. package/dist/integrations/awr/attachmentHttp.d.ts +9 -0
  412. package/dist/integrations/awr/attachmentHttp.js +19 -0
  413. package/dist/integrations/awr/attachmentHttp.js.map +1 -0
  414. package/dist/integrations/awr/cli.d.ts +7 -0
  415. package/dist/integrations/awr/cli.js +43 -0
  416. package/dist/integrations/awr/cli.js.map +1 -0
  417. package/dist/integrations/awr/contracts.d.ts +54 -0
  418. package/dist/integrations/awr/contracts.js +33 -0
  419. package/dist/integrations/awr/contracts.js.map +1 -0
  420. package/dist/integrations/awr/http.d.ts +8 -0
  421. package/dist/integrations/awr/http.js +23 -0
  422. package/dist/integrations/awr/http.js.map +1 -0
  423. package/dist/integrations/awr/index.d.ts +7 -0
  424. package/dist/integrations/awr/index.js +8 -0
  425. package/dist/integrations/awr/index.js.map +1 -0
  426. package/dist/integrations/awr/jsonHttp.d.ts +15 -0
  427. package/dist/integrations/awr/jsonHttp.js +69 -0
  428. package/dist/integrations/awr/jsonHttp.js.map +1 -0
  429. package/dist/integrations/awr/outbox.d.ts +28 -0
  430. package/dist/integrations/awr/outbox.js +88 -0
  431. package/dist/integrations/awr/outbox.js.map +1 -0
  432. package/dist/integrations/awr/projection.d.ts +4 -0
  433. package/dist/integrations/awr/projection.js +54 -0
  434. package/dist/integrations/awr/projection.js.map +1 -0
  435. package/dist/protocol/canonical.d.ts +41 -0
  436. package/dist/protocol/canonical.js +114 -0
  437. package/dist/protocol/canonical.js.map +1 -0
  438. package/dist/protocol/index.d.ts +9620 -0
  439. package/dist/protocol/index.js +185 -0
  440. package/dist/protocol/index.js.map +1 -0
  441. package/dist/protocol/primitives.d.ts +63 -0
  442. package/dist/protocol/primitives.js +46 -0
  443. package/dist/protocol/primitives.js.map +1 -0
  444. package/dist/protocol/schemas/browser.d.ts +153 -0
  445. package/dist/protocol/schemas/browser.js +29 -0
  446. package/dist/protocol/schemas/browser.js.map +1 -0
  447. package/dist/protocol/schemas/capability.d.ts +2126 -0
  448. package/dist/protocol/schemas/capability.js +165 -0
  449. package/dist/protocol/schemas/capability.js.map +1 -0
  450. package/dist/protocol/schemas/capabilityLifecycle.d.ts +509 -0
  451. package/dist/protocol/schemas/capabilityLifecycle.js +47 -0
  452. package/dist/protocol/schemas/capabilityLifecycle.js.map +1 -0
  453. package/dist/protocol/schemas/cleanup.d.ts +109 -0
  454. package/dist/protocol/schemas/cleanup.js +59 -0
  455. package/dist/protocol/schemas/cleanup.js.map +1 -0
  456. package/dist/protocol/schemas/cli.d.ts +121 -0
  457. package/dist/protocol/schemas/cli.js +24 -0
  458. package/dist/protocol/schemas/cli.js.map +1 -0
  459. package/dist/protocol/schemas/config.d.ts +59 -0
  460. package/dist/protocol/schemas/config.js +32 -0
  461. package/dist/protocol/schemas/config.js.map +1 -0
  462. package/dist/protocol/schemas/corpus.d.ts +36 -0
  463. package/dist/protocol/schemas/corpus.js +10 -0
  464. package/dist/protocol/schemas/corpus.js.map +1 -0
  465. package/dist/protocol/schemas/definitions.d.ts +3409 -0
  466. package/dist/protocol/schemas/definitions.js +431 -0
  467. package/dist/protocol/schemas/definitions.js.map +1 -0
  468. package/dist/protocol/schemas/evidenceProjection.d.ts +146 -0
  469. package/dist/protocol/schemas/evidenceProjection.js +18 -0
  470. package/dist/protocol/schemas/evidenceProjection.js.map +1 -0
  471. package/dist/protocol/schemas/execution.d.ts +3179 -0
  472. package/dist/protocol/schemas/execution.js +500 -0
  473. package/dist/protocol/schemas/execution.js.map +1 -0
  474. package/dist/protocol/schemas/gitSources.d.ts +330 -0
  475. package/dist/protocol/schemas/gitSources.js +32 -0
  476. package/dist/protocol/schemas/gitSources.js.map +1 -0
  477. package/dist/protocol/schemas/mcp.d.ts +24 -0
  478. package/dist/protocol/schemas/mcp.js +16 -0
  479. package/dist/protocol/schemas/mcp.js.map +1 -0
  480. package/dist/protocol/schemas/nativeJob.d.ts +106 -0
  481. package/dist/protocol/schemas/nativeJob.js +16 -0
  482. package/dist/protocol/schemas/nativeJob.js.map +1 -0
  483. package/dist/protocol/schemas/portableEnvironment.d.ts +1256 -0
  484. package/dist/protocol/schemas/portableEnvironment.js +108 -0
  485. package/dist/protocol/schemas/portableEnvironment.js.map +1 -0
  486. package/dist/protocol/schemas/promotion.d.ts +132 -0
  487. package/dist/protocol/schemas/promotion.js +9 -0
  488. package/dist/protocol/schemas/promotion.js.map +1 -0
  489. package/dist/protocol/schemas/protocol.d.ts +146 -0
  490. package/dist/protocol/schemas/protocol.js +25 -0
  491. package/dist/protocol/schemas/protocol.js.map +1 -0
  492. package/dist/protocol/schemas/recoveryStatus.d.ts +88 -0
  493. package/dist/protocol/schemas/recoveryStatus.js +20 -0
  494. package/dist/protocol/schemas/recoveryStatus.js.map +1 -0
  495. package/dist/protocol/schemas/resultSink.d.ts +80 -0
  496. package/dist/protocol/schemas/resultSink.js +14 -0
  497. package/dist/protocol/schemas/resultSink.js.map +1 -0
  498. package/dist/protocol/schemas/review.d.ts +248 -0
  499. package/dist/protocol/schemas/review.js +45 -0
  500. package/dist/protocol/schemas/review.js.map +1 -0
  501. package/dist/protocol/schemas/scenario.d.ts +810 -0
  502. package/dist/protocol/schemas/scenario.js +53 -0
  503. package/dist/protocol/schemas/scenario.js.map +1 -0
  504. package/dist/protocol/schemas/source.d.ts +300 -0
  505. package/dist/protocol/schemas/source.js +25 -0
  506. package/dist/protocol/schemas/source.js.map +1 -0
  507. package/dist/source/git.d.ts +36 -0
  508. package/dist/source/git.js +159 -0
  509. package/dist/source/git.js.map +1 -0
  510. package/dist/source/gitObjectProof.d.ts +12 -0
  511. package/dist/source/gitObjectProof.js +115 -0
  512. package/dist/source/gitObjectProof.js.map +1 -0
  513. package/dist/source/snapshotPaths.d.ts +2 -0
  514. package/dist/source/snapshotPaths.js +24 -0
  515. package/dist/source/snapshotPaths.js.map +1 -0
  516. package/dist/source/snapshotTree.d.ts +15 -0
  517. package/dist/source/snapshotTree.js +79 -0
  518. package/dist/source/snapshotTree.js.map +1 -0
  519. package/docs/agent-guide.md +21 -0
  520. package/docs/browser-driver.md +146 -0
  521. package/docs/getting-started.md +13 -0
  522. package/docs/git-object-proof.md +100 -0
  523. package/docs/local-execution-recovery.md +55 -0
  524. package/docs/mcp-driver.md +87 -0
  525. package/docs/native-jobs.md +96 -0
  526. package/docs/result-sink.md +87 -0
  527. package/docs/verified-bundles.md +175 -0
  528. package/package.json +98 -4
  529. package/samples/django-notes/manage.py +8 -0
  530. package/samples/django-notes/notes/__init__.py +0 -0
  531. package/samples/django-notes/notes/auth.py +14 -0
  532. package/samples/django-notes/notes/migrations/0001_initial.py +19 -0
  533. package/samples/django-notes/notes/migrations/__init__.py +0 -0
  534. package/samples/django-notes/notes/models.py +13 -0
  535. package/samples/django-notes/notes/views.py +33 -0
  536. package/samples/django-notes/notesite/__init__.py +0 -0
  537. package/samples/django-notes/notesite/settings.py +17 -0
  538. package/samples/django-notes/notesite/urls.py +9 -0
  539. package/samples/django-notes/requirements.txt +1 -0
  540. package/samples/django-notes/tracegrove/notes/crud.flow.yaml +27 -0
  541. package/samples/django-notes/tracegrove.config.yaml +7 -0
  542. package/samples/fastapi-notes/app/__init__.py +0 -0
  543. package/samples/fastapi-notes/app/main.py +69 -0
  544. package/samples/fastapi-notes/requirements.txt +2 -0
  545. package/samples/fastapi-notes/tracegrove/notes/crud.flow.yaml +27 -0
  546. package/samples/fastapi-notes/tracegrove.config.yaml +8 -0
  547. package/samples/notes-api/app/app.mjs +67 -0
  548. package/samples/notes-api/app/http.mjs +16 -0
  549. package/samples/notes-api/tracegrove/fixtures/existing-note.fixture.yaml +12 -0
  550. package/samples/notes-api/tracegrove/notes/create-read-delete.flow.yaml +35 -0
  551. package/samples/notes-api/tracegrove/notes/list.flow.yaml +25 -0
  552. package/samples/notes-api/tracegrove.config.yaml +15 -0
  553. package/samples/notes-api/verification/actions/notes.registry.yaml +6 -0
  554. package/samples/notes-api/verification/auth/host-issued-owner.yaml +6 -0
  555. package/samples/notes-api/verification/cases/notes.contract.yaml +51 -0
  556. package/samples/notes-api/verification/cases/notes.create.yaml +123 -0
  557. package/samples/notes-api/verification/cases/notes.suite.yaml +5 -0
  558. package/samples/notes-api/verification/components/notes-api-stub.profile.yaml +8 -0
  559. package/samples/notes-api/verification/components/notes-api.profile.yaml +15 -0
  560. package/samples/notes-api/verification/environments/local-notes.yaml +11 -0
  561. package/samples/notes-api/verification/environments/mock-notes.yaml +11 -0
  562. package/samples/notes-api/verification/fidelity/full-live-sandbox.yaml +7 -0
  563. package/samples/notes-api/verification/fidelity/mock-contract.yaml +6 -0
  564. package/samples/notes-api/verification/fixtures/existing-note.payload.yaml +15 -0
  565. package/samples/notes-api/verification/fixtures/existing-note.plan.yaml +9 -0
  566. package/samples/notes-api/verification/fixtures/existing-note.recipe.yaml +29 -0
  567. package/samples/notes-api/verification/hosts/local-process.yaml +27 -0
  568. package/samples/notes-api/verification/hosts/mock-loopback.yaml +14 -0
  569. package/samples/notes-api/verification/mocks/notes.responses.yaml +5 -0
  570. package/samples/notes-api/verification/personas/owner.yaml +16 -0
  571. package/samples/notes-api/verification/policies/no-authoring-inference.yaml +10 -0
  572. package/samples/notes-api/verification/runners/http.yaml +5 -0
  573. package/samples/notes-api/verification/surfaces/http-api.binding.yaml +11 -0
  574. package/samples/notes-api/verification/surfaces/http-api.pack.yaml +7 -0
  575. package/samples/notes-api/verification/workflow.yaml +27 -0
  576. package/samples/notes-browser/tracegrove/notes/browser.flow.yaml +19 -0
  577. package/samples/notes-browser/verification/cases/notes.browser.yaml +63 -0
  578. package/samples/notes-browser/verification/cases/notes.suite.yaml +4 -0
  579. package/samples/notes-browser/verification/runners/http.yaml +5 -0
  580. package/samples/notes-browser/verification/surfaces/http-api.binding.yaml +11 -0
  581. package/samples/notes-browser/verification/surfaces/http-api.pack.yaml +7 -0
  582. package/samples/notes-django/README.md +21 -0
  583. package/samples/notes-django/app/django_app.py +119 -0
  584. package/samples/notes-django/app/requirements.lock +4 -0
  585. package/samples/notes-mcp/app/mcp.mjs +47 -0
  586. package/samples/notes-mcp/tracegrove/notes.flow.yaml +20 -0
  587. package/samples/notes-mcp/tracegrove.config.yaml +13 -0
  588. package/samples/report-jobs/README.md +30 -0
  589. package/samples/report-jobs/app/jobs-api.mjs +65 -0
  590. package/samples/report-jobs/app/native-bridge.mjs +30 -0
  591. package/samples/report-jobs/app/store.mjs +74 -0
  592. package/samples/report-jobs/app/worker.mjs +22 -0
  593. package/samples/report-jobs/tracegrove/fixtures/failed-job.fixture.yaml +12 -0
  594. package/samples/report-jobs/tracegrove/fixtures/held-job.fixture.yaml +12 -0
  595. package/samples/report-jobs/tracegrove/fixtures/success-job.fixture.yaml +12 -0
  596. package/samples/report-jobs/tracegrove/reports/cancellation.flow.yaml +15 -0
  597. package/samples/report-jobs/tracegrove/reports/completion.flow.yaml +31 -0
  598. package/samples/report-jobs/tracegrove/reports/failure.flow.yaml +12 -0
  599. package/samples/report-jobs/tracegrove.config.yaml +10 -0
  600. package/samples/report-native/README.md +11 -0
  601. package/samples/report-native/tracegrove/cancellation.flow.yaml +11 -0
  602. package/samples/report-native/tracegrove/completion.flow.yaml +22 -0
  603. package/samples/report-native/tracegrove/failure.flow.yaml +7 -0
  604. package/samples/report-native/tracegrove.config.yaml +11 -0
  605. package/schema/tracegrove_cli-error_v1.json +156 -0
  606. package/schema/tracegrove_config_v1.json +233 -0
  607. package/schema/tracegrove_fixture_v1.json +297 -0
  608. package/schema/tracegrove_flow_v1.json +960 -0
  609. package/schema/tracegrove_recovery-status_v1.json +234 -0
  610. package/schema/tracegrove_run-video_v1.json +25 -0
  611. package/schema/workflow_action-registry_v1.json +303 -0
  612. package/schema/workflow_auth-recipe_v1.json +146 -0
  613. package/schema/workflow_boundary-observation_v1.json +515 -0
  614. package/schema/workflow_browser-command_v1.json +292 -0
  615. package/schema/workflow_browser-locator_v1.json +74 -0
  616. package/schema/workflow_browser-network-observation_v1.json +48 -0
  617. package/schema/workflow_browser-observation_v1.json +53 -0
  618. package/schema/workflow_budget-reservation_v1.json +150 -0
  619. package/schema/workflow_campaign-result_v1.json +382 -0
  620. package/schema/workflow_capability-artifact-manifest_v1.json +529 -0
  621. package/schema/workflow_capability-descriptor_v1.json +351 -0
  622. package/schema/workflow_capability-lifecycle-checkpoint_v1.json +510 -0
  623. package/schema/workflow_capability-observation_v1.json +1707 -0
  624. package/schema/workflow_capability-operation_v1.json +3212 -0
  625. package/schema/workflow_capability-replay-plan_v1.json +1247 -0
  626. package/schema/workflow_capability-retry-policy_v1.json +39 -0
  627. package/schema/workflow_capability-retry-state_v1.json +242 -0
  628. package/schema/workflow_case_v1.json +4222 -0
  629. package/schema/workflow_change-model_v1.json +614 -0
  630. package/schema/workflow_cleanup-expectation_v1.json +108 -0
  631. package/schema/workflow_cleanup-followup_v1.json +145 -0
  632. package/schema/workflow_component-profile_v1.json +219 -0
  633. package/schema/workflow_config_v1.json +180 -0
  634. package/schema/workflow_corpus_v1.json +172 -0
  635. package/schema/workflow_cost-observation_v1.json +366 -0
  636. package/schema/workflow_credential-lease_v1.json +222 -0
  637. package/schema/workflow_effective-config_v1.json +214 -0
  638. package/schema/workflow_environment-plan_v1.json +445 -0
  639. package/schema/workflow_environment_v1.json +1827 -0
  640. package/schema/workflow_evidence-projection_v1.json +636 -0
  641. package/schema/workflow_execution_v1.json +4086 -0
  642. package/schema/workflow_fidelity-plan_v1.json +512 -0
  643. package/schema/workflow_fidelity-profile_v1.json +396 -0
  644. package/schema/workflow_fixture-manifest_v1.json +918 -0
  645. package/schema/workflow_fixture-plan_v1.json +594 -0
  646. package/schema/workflow_git-source-request_v1.json +124 -0
  647. package/schema/workflow_git-source-resolution_v1.json +660 -0
  648. package/schema/workflow_git-source-snapshot_v1.json +287 -0
  649. package/schema/workflow_host-lease_v1.json +321 -0
  650. package/schema/workflow_host-observation_v1.json +282 -0
  651. package/schema/workflow_host-plan_v1.json +719 -0
  652. package/schema/workflow_identity-attestation_v1.json +412 -0
  653. package/schema/workflow_intelligence-policy_v1.json +153 -0
  654. package/schema/workflow_logical-payload_v1.json +206 -0
  655. package/schema/workflow_mcp-tool-call_v1.json +70 -0
  656. package/schema/workflow_mcp-tool-observation_v1.json +125 -0
  657. package/schema/workflow_mock-responses_v1.json +185 -0
  658. package/schema/workflow_native-job-action_v1.json +123 -0
  659. package/schema/workflow_native-job-observation_v1.json +138 -0
  660. package/schema/workflow_native-job-ready_v1.json +31 -0
  661. package/schema/workflow_native-job-request_v1.json +155 -0
  662. package/schema/workflow_native-job-response_v1.json +125 -0
  663. package/schema/workflow_ownership_v1.json +116 -0
  664. package/schema/workflow_persona_v1.json +499 -0
  665. package/schema/workflow_plan-edit-projection_v1.json +152 -0
  666. package/schema/workflow_plan-review_v1.json +246 -0
  667. package/schema/workflow_portable-environment-intent_v1.json +499 -0
  668. package/schema/workflow_portable-environment-profile_v1.json +1429 -0
  669. package/schema/workflow_portable-preflight_v1.json +2281 -0
  670. package/schema/workflow_qualification-admission_v1.json +467 -0
  671. package/schema/workflow_qualification-intent_v1.json +98 -0
  672. package/schema/workflow_qualification-policy_v1.json +109 -0
  673. package/schema/workflow_qualification-round_v1.json +226 -0
  674. package/schema/workflow_replay-assessment_v1.json +197 -0
  675. package/schema/workflow_replay-finding_v1.json +147 -0
  676. package/schema/workflow_request_v1.json +1567 -0
  677. package/schema/workflow_result-ingest_v1.json +343 -0
  678. package/schema/workflow_revisions_v1.json +334 -0
  679. package/schema/workflow_routing-decision_v1.json +482 -0
  680. package/schema/workflow_runner-capabilities_v1.json +316 -0
  681. package/schema/workflow_runner-profile_v1.json +119 -0
  682. package/schema/workflow_runner-protocol_v1_host.json +382 -0
  683. package/schema/workflow_runner-protocol_v1_plugin.json +491 -0
  684. package/schema/workflow_scenario-activation-intent_v1.json +346 -0
  685. package/schema/workflow_scenario-activation_v1.json +562 -0
  686. package/schema/workflow_scenario-projection_v1.json +221 -0
  687. package/schema/workflow_scenario-promotion_v1.json +455 -0
  688. package/schema/workflow_scenario-replay-assessment_v1.json +696 -0
  689. package/schema/workflow_scenario-revision-token_v1.json +115 -0
  690. package/schema/workflow_scenario-structure_v1.json +368 -0
  691. package/schema/workflow_scenario_v1.json +401 -0
  692. package/schema/workflow_scoped-resource_v1.json +550 -0
  693. package/schema/workflow_seed-recipe_v1.json +724 -0
  694. package/schema/workflow_selection_v1.json +1108 -0
  695. package/schema/workflow_signed-cleanup-followup_v1.json +175 -0
  696. package/schema/workflow_source-plan_v1.json +756 -0
  697. package/schema/workflow_source-selection_v1.json +456 -0
  698. package/schema/workflow_source-validation_v1.json +366 -0
  699. package/schema/workflow_step-event_v1.json +228 -0
  700. package/schema/workflow_stream-transcript_v1.json +1030 -0
  701. package/schema/workflow_suite_v1.json +64 -0
  702. package/schema/workflow_surface-binding_v1.json +411 -0
  703. package/schema/workflow_surface-pack_v1.json +159 -0
@@ -0,0 +1,603 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * tracegrove CLI (also installed as workflow-verify). Every command goes through the same resolver, admission and reducer as
4
+ * the library API. Exit codes: 0 pass, 1 assertion failure, 2 blocked/inconclusive,
5
+ * 3 infrastructure failure, 4 cancelled. Non-execution commands exit 0 for their own success only.
6
+ */
7
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
8
+ import { dirname, join, resolve } from 'node:path';
9
+ import { SampleName } from "./samples/catalog.js";
10
+ import { loadProject, localScope } from "../core/corpus.js";
11
+ import { plan } from "../core/planner.js";
12
+ import { EXIT_CODES, executeBundle } from "../core/executor.js";
13
+ import { LocalLedger } from "../core/ledger.js";
14
+ import { LocalResultSink } from "../core/resultSink.js";
15
+ import { delegateRun, startController } from "../core/controller.js";
16
+ import { searchCases } from "../core/lookup.js";
17
+ import { createRerun } from "../core/rerun.js";
18
+ import { exportVerifiedBundle, verifyBundle, VerifiedBundleSnapshot } from "../core/bundle.js";
19
+ import { createDurableDirectory } from "../core/atomicFiles.js";
20
+ import { readFrozenBundle } from "../core/frozenBundle.js";
21
+ import { inspectFrozenPlan } from "../core/planInspection.js";
22
+ import { inspectExecution, inspectFailedSteps } from "../core/executionInspection.js";
23
+ import { checkCleanupFiles } from "./cleanup.js";
24
+ import { readConfigurationJson } from "./jsonFile.js";
25
+ import { jsonRequested, parseArgs } from "./arguments.js";
26
+ import { cliErrorReport } from "./errors.js";
27
+ import { inspectRecoveryStatus } from "../core/recoveryStatus.js";
28
+ import { Blocked, Conflict, InfrastructureFailure } from "../core/errors.js";
29
+ import { SchemaViolation, CaseFixturePlan, CaseSpec, SeedRecipe, LogicalPayload, ExecutionReceipt, CampaignResult, HostPlan, RunRequest, parseAs, refKey } from "../protocol/index.js";
30
+ import { inspectDoctor, doctorFailure } from "./doctor.js";
31
+ import { writeSample } from "./samples/write.js";
32
+ import { resolveSourceFiles, materializeSourceFiles } from "./source.js";
33
+ import { readGitSnapshotTree } from "../source/snapshotTree.js";
34
+ import { sameScope } from "../protocol/canonical.js";
35
+ import { compileProject, findConfig } from "../authoring/compile.js";
36
+ import { resolveRun, runTests } from "../authoring/run.js";
37
+ import { initProject } from "../authoring/init.js";
38
+ import { startUi } from "../authoring/ui.js";
39
+ import { checkProject, discoverProject, draftWithAgent } from "../authoring/workspace.js";
40
+ import { detectAgents, readLocalSettings, resolveAgentSettings, writeLocalSettings } from "../authoring/agent.js";
41
+ import { loadAuthoringConfig } from "../authoring/compile.js";
42
+ import { heal, undoHeal } from "../authoring/heal.js";
43
+ import { projectRoot, projectStatus } from "../authoring/status.js";
44
+ import { runActivity } from "../authoring/activity.js";
45
+ import { paint, progressLine, renderHeal, renderStatus, renderTree } from "./render.js";
46
+ import { previewVerificationSource, savedVerificationSource } from "../authoring/verificationSource.js";
47
+ function flag(args, name) {
48
+ const value = args.flags[name];
49
+ return typeof value === 'string' ? value : null;
50
+ }
51
+ function out(args, value, text) {
52
+ if (('json' in args.flags && args.flags.json) || ('jsonl' in args.flags && args.flags.jsonl))
53
+ process.stdout.write(`${JSON.stringify(value)}\n`);
54
+ else
55
+ process.stdout.write(`${text}\n`);
56
+ }
57
+ function stateDirFor(projectRoot) {
58
+ return join(projectRoot, '.workflow-verify');
59
+ }
60
+ function samplesDir() {
61
+ // dist/cli/main.js -> ../../samples ; src/cli/main.ts -> ../samples
62
+ const candidates = [resolve(import.meta.dirname, '..', '..', 'samples'), resolve(import.meta.dirname, '..', 'samples')];
63
+ const found = candidates.find((dir) => existsSync(dir));
64
+ if (!found)
65
+ throw new InfrastructureFailure('sample packs are not installed with this distribution');
66
+ return found;
67
+ }
68
+ const HELP = `tracegrove <command> [--flags]
69
+
70
+ Everyday commands (tracegrove.config.yaml or tracegrove.config.ts, found by walking up from the current folder):
71
+ (no command) where this project stands and what to run next
72
+ init [--dir <dir>] [--force] detect FastAPI / Django / Node and write a config + example flow
73
+ test [--grep <text>] [--tag a,b] [--json|--jsonl] compile, plan, run and verify; writes .tracegrove/runs/<run>/
74
+ [--heal] on failure, heal and re-run (see heal)
75
+ [--source-snapshot <snapshot.json>] verify and launch an owner-bound private source copy
76
+ [--source-repository-role <role>] bind the verified resolver head to a repository role
77
+ heal [--dir <dir>] [--no-agent] [--dry-run] fix setup and drifted tests, prove each fix by re-running, keep only
78
+ [--agent claude|codex] [--model <m>] what passes; product bugs are reported, never hidden
79
+ heal --undo <id|latest> put back every change a heal kept
80
+ status [--dir <dir>] [--json] project health plus ordered next commands (for people and agents)
81
+ list [--json] list flows with their ids, tags and steps
82
+ show [--run latest|<name>] [--json] print a run's summary
83
+ compile [--json] [--source-snapshot <snapshot.json>] write the derived v1 corpus to .tracegrove/compiled/
84
+ [--source-repository-role <role>] bind a single resolver-head repository
85
+ ui [--dir <dir>] [--branch <branch>] [--port <n>] local web UI: config, flows, runs, discovery, agent drafts, settings
86
+
87
+ Agent-friendly commands (every one takes --json and never starts the app):
88
+ discover [--dir <dir>] [--branch <branch>] routes in the code vs. flows that cover them; changed-on-branch first
89
+ check [--dir <dir>] compile flows only; exit 0 when clean, 2 with file-located issues
90
+ draft [--intent "<what to verify>"] [--branch <b>] have Claude Code or Codex write flows into tracegrove/discovered/,
91
+ [--agent claude|codex] [--model <m>] then check them (default: Claude Code on haiku, its cheapest model)
92
+ settings [--agent claude|codex|none] [--model <m>] show or save your agent choice in .tracegrove/settings.json
93
+ [--source-snapshot <snapshot.json> | --working-tree] save the next run's input; never edits team config
94
+ test, list, show and compile take --config <tracegrove.config.yaml|tracegrove.config.ts>; the commands above use --dir.
95
+
96
+ Low-level corpus commands (the strict workflow.*/v1 files):
97
+ sample-config --sample ${SampleName.options.join('|')} --output <dir> write a sample project (real app + corpus)
98
+ validate --config <workflow.yaml> validate schemas, references and digests
99
+ doctor [--dir <dir>|--config <yaml>] [--profile <name>]\n inspect native setup and plan; never launch the app
100
+ plan --config <workflow.yaml> [--profile <name>] --output <request.json>
101
+ [--work-binding <json>] freeze an existing work ID and requirement refs before execution
102
+ seed --request <request.json> --preview show planned fixture resources and cleanup (no effects)
103
+ run --request <request.json> [--jsonl] admit and execute the frozen request
104
+ controller --state-dir <dir> --project-root <dir> own the local ledger; CLI runs delegate
105
+ cases --config <workflow.yaml> [--id <id>] [--cursor <cursor>]
106
+ rerun --request <request.json> --output <new.json> freeze a fresh attempt on the same cases
107
+ inspect --execution <id> --state-dir <dir> [--failed-step]
108
+ recovery-status --execution <id> --state-dir <dir> inspect recorded recovery state; no effects or authority
109
+ inspect --bundle <dir> [--failed-step] inspect independently verified saved evidence
110
+ inspect --request <request.json> inspect frozen structure; no runtime or authority checks
111
+ export --execution <id> --state-dir <dir> --output <dir>
112
+ verify-bundle --bundle <dir> recheck hashes, digests and re-reduce the verdict
113
+ result-ingest --bundle <dir> --sink <dir> retain verified local evidence; does not qualify or activate it
114
+ awr-prepare --sink <dir> --id <result-id> --destination <json>
115
+ freeze a redacted AWR export and exact destination; no network
116
+ awr-inspect --sink <dir> --id <result-id> show saved delivery and acknowledgement state
117
+ awr-deliver --sink <dir> --id <result-id> [--credential-env <name>]
118
+ retry the frozen import; default secret env TRACEGROVE_ORGX_TOKEN
119
+ report-prepare --sink <dir> --id <result-id> --target <json>
120
+ freeze attachment to the exact bound work; no network
121
+ report-inspect --sink <dir> --id <result-id> inspect independent attachment acknowledgement state
122
+ report-attach --sink <dir> --id <result-id> [--credential-env <name>]
123
+ recheck the imported receipt, then attach it in review; no completion
124
+ results --sink <dir> [--id <record-id>] list receipts; --id re-verifies its retained archive
125
+ [--limit 1..100] [--cursor <opaque>] bounded, snapshot-stable pages; issuer remains unverified
126
+ verify-cleanup --proof <json> --expectation <json> --trust <json> [--json]
127
+ check signed follow-up integrity; no hosted release
128
+ schema --output <dir> export JSON Schemas
129
+ source-resolve --input <repositories.json> --output <source.json>
130
+ source-materialize --input <source.json> --repository <id> --root <local-repo> --side base|head --output <new-dir>
131
+ freeze local Git commit pairs and complete diffs (no fetch or review)
132
+
133
+ Exit codes: 0 pass, 1 assertion failure, 2 blocked/inconclusive, 3 infrastructure failure, 4 cancelled.`;
134
+ async function main(argv) {
135
+ const args = parseArgs(argv);
136
+ switch (args.command) {
137
+ case 'help': {
138
+ // Bare `tracegrove` inside a project is a home screen; --help (or no project) is the reference.
139
+ if (argv.length === 0 && projectRoot('.')) {
140
+ process.stdout.write(`${renderStatus(projectStatus('.'), paint())}\n`);
141
+ return 0;
142
+ }
143
+ process.stdout.write(`${HELP}\n`);
144
+ return 0;
145
+ }
146
+ case 'status': {
147
+ const status = projectStatus(flag(args, 'dir') ?? '.');
148
+ out(args, status, renderStatus(status, paint()));
149
+ return 0;
150
+ }
151
+ case 'heal': {
152
+ const dir = projectRoot(flag(args, 'dir') ?? '.') ?? resolve(flag(args, 'dir') ?? '.');
153
+ const undo = flag(args, 'undo');
154
+ if (undo !== null) {
155
+ const result = undoHeal(dir, undo);
156
+ out(args, result, `${result.restored.length ? `restored:\n${result.restored.map((f) => ` ${f}`).join('\n')}` : 'nothing restored'}${result.skipped.length ? `\nskipped:\n${result.skipped.map((s) => ` ${s.file}: ${s.why}`).join('\n')}` : ''}\nnext: tracegrove test`);
157
+ return result.skipped.length ? 2 : 0;
158
+ }
159
+ const controller = new AbortController();
160
+ const onSignal = () => controller.abort(new Error('user_cancelled'));
161
+ process.on('SIGINT', onSignal);
162
+ const live = args.flags.json ? { update: () => { }, done: () => { } } : progressLine();
163
+ try {
164
+ const report = await heal({ dir, agent: args.flags['no-agent'] !== true, dryRun: args.flags['dry-run'] === true, overrides: { provider: flag(args, 'agent'), model: flag(args, 'model') }, signal: controller.signal,
165
+ onProgress: (phase, detail) => live.update(`${phase}${detail ? ` · ${detail}` : ''}`), onAgentActivity: (line) => live.update(`agent · ${line.replaceAll(`${dir}/`, '')}`) });
166
+ live.done();
167
+ out(args, report, renderHeal(report, dir, paint()));
168
+ return report.exitCode;
169
+ }
170
+ finally {
171
+ live.done();
172
+ process.off('SIGINT', onSignal);
173
+ }
174
+ }
175
+ case 'source-resolve': {
176
+ const result = await resolveSourceFiles(args.flags.input, args.flags.output);
177
+ out(args, result.summary, result.text);
178
+ return 0;
179
+ }
180
+ case 'source-materialize': {
181
+ const result = await materializeSourceFiles(args.flags.input, args.flags.repository, args.flags.root, args.flags.side, args.flags.output);
182
+ out(args, result.summary, result.text);
183
+ return 0;
184
+ }
185
+ case 'init': {
186
+ const dir = resolve(flag(args, 'dir') ?? '.');
187
+ const result = initProject(dir, { force: args.flags.force === true });
188
+ out(args, result, `${result.detection.reason}: adapter ${result.detection.adapter}\nwrote:\n${result.files.map((f) => ` ${f}`).join('\n')}\n\nAdd this to your app's test-mode auth so personas work:\n\n${result.snippet}\n\nnext: tracegrove test`);
189
+ return 0;
190
+ }
191
+ case 'compile': {
192
+ const compiled = compileProject(findConfig(flag(args, 'config') ?? '.'), { sourceSnapshot: flag(args, 'source-snapshot') ? resolve(flag(args, 'source-snapshot')) : undefined, sourceRepositoryRole: flag(args, 'source-repository-role') ?? undefined });
193
+ out(args, compiled, `compiled ${compiled.flows.length} flow(s) into ${compiled.compiledDir}\napp source digest ${compiled.sourceDigest.slice(0, 12)} over ${compiled.sourceFiles.length} file(s)\nlow-level: workflow-verify plan --config ${compiled.workflowConfigPath} --output request.json`);
194
+ return 0;
195
+ }
196
+ case 'list': {
197
+ const compiled = compileProject(findConfig(flag(args, 'config') ?? '.'));
198
+ out(args, compiled.flows, compiled.flows.map((f) => `${f.caseId} [${f.tags.join(', ')}] ${f.file}\n ${f.title}\n${f.steps.map((s) => ` - ${s.name}: ${s.method} ${s.path}${s.as !== Object.keys(compiled.config.personas)[0] ? ` (as ${s.as})` : ''}`).join('\n')}`).join('\n'));
199
+ return 0;
200
+ }
201
+ case 'test': {
202
+ const configPath = findConfig(flag(args, 'config') ?? '.');
203
+ const controller = new AbortController();
204
+ const onSignal = () => { process.stderr.write('stop requested; revoking action authority, cleanup continues\n'); controller.abort(new Error('user_cancelled')); };
205
+ process.on('SIGINT', onSignal);
206
+ process.on('SIGTERM', onSignal);
207
+ const live = args.flags.json || args.flags.jsonl ? { update: () => { }, done: () => { } } : progressLine();
208
+ try {
209
+ const tags = flag(args, 'tag')?.split(',').map((t) => t.trim()).filter(Boolean);
210
+ live.update('Compiling flows and starting the app');
211
+ const { report, compiled } = await runTests({ configPath, grep: flag(args, 'grep') ?? undefined, tags, sourceSnapshot: flag(args, 'source-snapshot') ? resolve(flag(args, 'source-snapshot')) : undefined, sourceRepositoryRole: flag(args, 'source-repository-role') ?? undefined, signal: controller.signal,
212
+ onEvent: (event) => {
213
+ if (args.flags.jsonl)
214
+ process.stdout.write(`${JSON.stringify(event)}\n`);
215
+ else
216
+ live.update(runActivity(event).label);
217
+ } });
218
+ live.done();
219
+ const p = paint();
220
+ if (args.flags.heal && report.exitCode !== 0 && report.exitCode !== 4) {
221
+ if (!args.flags.json)
222
+ process.stdout.write(`${renderTree(report, compiled.root, p)}\n\n`);
223
+ const healed = await heal({ dir: compiled.root, report, signal: controller.signal, onProgress: (phase, detail) => live.update(`${phase}${detail ? ` · ${detail}` : ''}`), onAgentActivity: (line) => live.update(`agent · ${line.replaceAll(`${compiled.root}/`, '')}`) });
224
+ live.done();
225
+ out(args, { report, heal: healed }, renderHeal(healed, compiled.root, p));
226
+ return healed.exitCode;
227
+ }
228
+ out(args, report, renderTree(report, compiled.root, p));
229
+ return report.exitCode;
230
+ }
231
+ finally {
232
+ live.done();
233
+ process.off('SIGINT', onSignal);
234
+ process.off('SIGTERM', onSignal);
235
+ }
236
+ }
237
+ case 'show': {
238
+ const configPath = findConfig(flag(args, 'config') ?? '.');
239
+ const root = dirname(configPath);
240
+ const runDir = resolveRun(root, flag(args, 'run') ?? 'latest');
241
+ if (!runDir || !existsSync(join(runDir, 'summary.json')))
242
+ throw new Blocked([{ code: 'run_not_found', detail: flag(args, 'run') ?? 'latest', owner: 'operator', action: 'run tracegrove test first, or pass --run <folder name>' }]);
243
+ const report = JSON.parse(readFileSync(join(runDir, 'summary.json'), 'utf8'));
244
+ out(args, report, renderTree(report, root, paint()));
245
+ return 0;
246
+ }
247
+ case 'ui': {
248
+ const port = flag(args, 'port');
249
+ if (port !== null && !/^\d{1,5}$/.test(port))
250
+ throw new Blocked([{ code: 'invalid_port', detail: port, owner: 'operator', action: 'pass --port <number>, or leave it out for a free port' }]);
251
+ const server = await startUi({ dir: flag(args, 'dir') ?? '.', branch: flag(args, 'branch') ?? null, ...(port ? { port: Number(port) } : {}) });
252
+ process.stdout.write(`tracegrove ui on ${server.url}\n(loopback only; Ctrl+C to stop)\n`);
253
+ await new Promise((done, fail) => {
254
+ let stopping = false;
255
+ const stop = () => {
256
+ if (stopping)
257
+ return;
258
+ stopping = true;
259
+ process.stderr.write('Stopping UI; waiting for the owned verification to settle. Inspect saved receipts for cleanup status.\n');
260
+ const unlisten = () => { process.off('SIGINT', stop); process.off('SIGTERM', stop); };
261
+ void server.close().then(() => { unlisten(); done(); }, error => { unlisten(); fail(error); });
262
+ };
263
+ process.on('SIGINT', stop);
264
+ process.on('SIGTERM', stop);
265
+ });
266
+ return 0;
267
+ }
268
+ case 'discover': {
269
+ const result = discoverProject(flag(args, 'dir') ?? '.', flag(args, 'branch'));
270
+ out(args, result, `${result.source}: ${result.routes.length} route(s), ${result.uncovered} uncovered${result.changedFiles.length ? `, ${result.changedFiles.length} changed file(s) vs ${result.base}` : ''}\n${result.routes.map((r) => ` ${r.coveredBy.length ? 'covered ' : 'UNCOVERED'} ${r.method.padEnd(6)} ${r.path} ${r.file}:${r.line}${r.changed ? ' (changed)' : ''}`).join('\n')}`);
271
+ return 0;
272
+ }
273
+ case 'check': {
274
+ const result = checkProject(flag(args, 'dir') ?? '.');
275
+ out(args, result, result.ok ? `ok: ${result.flows.length} flow(s) compile` : `${result.issues.length} issue(s):\n${result.issues.map((i) => ` ${i.detail}\n → ${i.action}`).join('\n')}`);
276
+ return result.ok ? 0 : 2;
277
+ }
278
+ case 'settings': {
279
+ const dir = resolve(flag(args, 'dir') ?? '.');
280
+ const provider = flag(args, 'agent');
281
+ const model = flag(args, 'model');
282
+ const snapshot = flag(args, 'source-snapshot');
283
+ const workingTree = args.flags['working-tree'] === true;
284
+ if (snapshot !== null && workingTree)
285
+ throw new Conflict('Choose --source-snapshot or --working-tree, not both');
286
+ if (provider !== null || model !== null || snapshot !== null || workingTree) {
287
+ const current = readLocalSettings(dir);
288
+ const agent = { ...current.agent };
289
+ if (provider !== null && provider !== agent.provider && model === null)
290
+ delete agent.model;
291
+ const source = snapshot !== null ? previewVerificationSource(dir, resolve(snapshot), loadAuthoringConfig(findConfig(dir))).selection
292
+ : workingTree ? { kind: 'working_tree' } : null;
293
+ writeLocalSettings(dir, { ...current,
294
+ ...(provider !== null || model !== null ? { agent: { ...agent, ...(provider !== null ? { provider } : {}), ...(model !== null ? { model } : {}) } } : {}),
295
+ ...(source ? { verification: { source } } : {}),
296
+ });
297
+ }
298
+ let config = null;
299
+ try {
300
+ config = loadAuthoringConfig(findConfig(dir));
301
+ }
302
+ catch {
303
+ config = null;
304
+ }
305
+ const settings = resolveAgentSettings(dir, config);
306
+ const detected = detectAgents();
307
+ const verificationSource = savedVerificationSource(dir);
308
+ out(args, { settings, detected, verificationSource }, `agent: ${settings.provider} (from ${settings.source.provider})\nmodel: ${settings.model ?? 'CLI default'} (from ${settings.source.model})\nclaude: ${detected.claude ?? 'not installed'}\ncodex: ${detected.codex ?? 'not installed'}\nverification input: ${verificationSource.kind === 'snapshot' ? verificationSource.path + ' (pinned local snapshot)' : 'working tree'}`);
309
+ return 0;
310
+ }
311
+ case 'draft': {
312
+ const controller = new AbortController();
313
+ const onSignal = () => controller.abort(new Error('user_cancelled'));
314
+ process.on('SIGINT', onSignal);
315
+ const live = args.flags.json ? { update: () => { }, done: () => { } } : progressLine();
316
+ live.update('Discovering routes and briefing the agent');
317
+ try {
318
+ const result = await draftWithAgent({ dir: flag(args, 'dir') ?? '.', branch: flag(args, 'branch'), intent: flag(args, 'intent'), overrides: { provider: flag(args, 'agent'), model: flag(args, 'model') }, signal: controller.signal,
319
+ ...(args.flags.json ? {} : { onActivity: (line) => live.update(`agent · ${line.replaceAll(`${resolve(flag(args, 'dir') ?? '.')}/`, '')}`) }) });
320
+ live.done();
321
+ const { agent, check } = result;
322
+ out(args, result, `\n${agent.provider}${agent.model ? ` (${agent.model})` : ''} exited ${agent.exitCode}; ${agent.files.length} flow file(s) written:\n${agent.files.map((f) => ` ${f}`).join('\n') || ' (none)'}\n\n${agent.output}\n\ncheck: ${check.ok ? `ok, ${check.flows.length} flow(s) compile` : check.issues.map((i) => ` ${i.detail}`).join('\n')}\nnext: tracegrove test --grep discovered`);
323
+ return agent.exitCode === 0 && check.ok ? 0 : 2;
324
+ }
325
+ finally {
326
+ live.done();
327
+ process.off('SIGINT', onSignal);
328
+ }
329
+ }
330
+ case 'sample-config': {
331
+ const sample = args.flags.sample ?? 'notes-api';
332
+ const output = resolve(args.flags['output']);
333
+ const config = writeSample(samplesDir(), sample, output);
334
+ const next = sample === 'notes-django' ? `install the pinned Python dependencies as described in ${join(output, 'README.md')}, then run doctor` : `workflow-verify doctor --config ${config}`;
335
+ out(args, { sample, output, config }, `wrote sample ${sample} to ${output}\nnext: ${next}`);
336
+ return 0;
337
+ }
338
+ case 'validate': {
339
+ const project = loadProject(args.flags['config']);
340
+ out(args, { project: project.config.project, corpusDigest: project.corpus.manifest.ref.digest.hex, members: project.corpus.manifest.members.length, cases: project.suiteCases.map((c) => c.ref.id) }, `valid: ${project.corpus.manifest.members.length} definitions, corpus ${project.corpus.manifest.ref.digest.hex.slice(0, 12)}; ${project.suiteCases.length} suite cases. Validation approves nothing and verifies no product.`);
341
+ return 0;
342
+ }
343
+ case 'cases': {
344
+ const project = loadProject(args.flags['config']);
345
+ const query = {};
346
+ for (const name of ['id', 'workflow', 'surface', 'text', 'cursor']) {
347
+ const value = flag(args, name);
348
+ if (value)
349
+ query[name] = value;
350
+ }
351
+ if (flag(args, 'limit'))
352
+ query.limit = Number(flag(args, 'limit'));
353
+ const page = searchCases(project, query);
354
+ out(args, page, JSON.stringify(page, null, 2));
355
+ return 0;
356
+ }
357
+ case 'rerun': {
358
+ const bundle = createRerun(readBundle(args.flags['request']));
359
+ const output = resolve(args.flags['output']);
360
+ mkdirSync(dirname(output), { recursive: true });
361
+ writeFileSync(output, `${JSON.stringify(bundle, null, 2)}\n`);
362
+ out(args, { output, requestRef: bundle.request.ref, replayOf: bundle.request.replayOf }, `fresh rerun request: ${output}`);
363
+ return 0;
364
+ }
365
+ case 'recovery-status': {
366
+ const report = inspectRecoveryStatus({ stateDir: args.flags['state-dir'], executionId: args.flags.execution, scope: localScope() });
367
+ out(args, report, `${report.code}\n${report.recovery}\nRecorded resources: ${report.resources ? JSON.stringify(report.resources) : 'unavailable'}\nNo cleanup or execution was attempted; this report grants no action authority.`);
368
+ return report.exitCode;
369
+ }
370
+ case 'doctor': {
371
+ const report = await inspectDoctor(args.flags);
372
+ out(args, report, report.checks.map(c => `${c.state.padEnd(8)} ${c.check}: ${c.detail}${c.action !== 'none' ? `\n action: ${c.action}` : ''}`).join('\n') +
373
+ report.errors.map(e => `\nBLOCKED ${e.code}: ${e.detail}\n action: ${e.action}`).join('') +
374
+ `\n${report.blocked ? 'BLOCKED: resolve the items above' : 'Metadata checks passed; application execution and verification have not started.'}\n` +
375
+ `${report.selection?.compiledFilesWritten ? 'Derived corpus files were written. ' : ''}Doctor never launches the app; interpreter --version probes may run. No running product was observed.`);
376
+ return report.exitCode;
377
+ }
378
+ case 'plan': {
379
+ const project = loadProject(args.flags['config']);
380
+ const profileName = flag(args, 'profile') ?? project.config.defaultProfile;
381
+ const output = resolve(args.flags['output']);
382
+ const workBinding = args.flags['work-binding'] ? RunRequest.shape.workBinding.parse(readConfigurationJson(args.flags['work-binding'], 262144)) : null;
383
+ const bundle = plan({ project, profileName, scope: localScope(), purpose: args.flags.purpose ?? 'trial', workBinding });
384
+ mkdirSync(dirname(output), { recursive: true });
385
+ writeFileSync(output, `${JSON.stringify(bundle, null, 2)}\n`);
386
+ const summary = { output, profile: profileName, requestDigest: bundle.request?.ref.digest.hex ?? null, idempotencyKey: bundle.request?.idempotencyKey ?? null, cells: bundle.request?.caseRefs.length ?? 0, excluded: bundle.excludedCells, blockers: bundle.blockers, estimatedCostCents: bundle.estimatedCostCents, requirements: bundle.requirements };
387
+ out(args, summary, bundle.blockers.length === 0
388
+ ? `frozen request ${bundle.request.ref.digest.hex.slice(0, 12)} (${summary.cells} cell(s), ${bundle.excludedCells.length} excluded) -> ${output}\nestimated cost: ${bundle.estimatedCostCents} cents; no effects performed`
389
+ : `BLOCKED plan written to ${output}:\n${bundle.blockers.map((b) => ` ${b.code} [${b.cellId ?? 'campaign'}] ${b.detail}\n owner: ${b.owner}; action: ${b.action}`).join('\n')}`);
390
+ return bundle.blockers.length === 0 ? 0 : 2;
391
+ }
392
+ case 'seed': {
393
+ const bundle = readBundle(args.flags['request']);
394
+ if (!args.flags.preview)
395
+ throw new Blocked([{ code: 'seed_apply_not_separate', detail: 'seed --apply is not implemented in this prototype; run prepares the same admitted attempt once', owner: 'operator', action: 'use seed --preview or run' }]);
396
+ if (!bundle.request) {
397
+ out(args, { blockers: bundle.blockers }, `plan is blocked; nothing to preview`);
398
+ return 2;
399
+ }
400
+ const rows = [];
401
+ for (const caseRef of bundle.request.caseRefs) {
402
+ const spec = parseAs(CaseSpec, bundle.documents[refKey(caseRef)], 'case');
403
+ if (!spec.fixturePlanRef) {
404
+ rows.push({ case: spec.ref.id, fixtures: 'none' });
405
+ continue;
406
+ }
407
+ const planDoc = parseAs(CaseFixturePlan, bundle.documents[refKey(spec.fixturePlanRef)], 'fixture plan');
408
+ const recipe = parseAs(SeedRecipe, bundle.documents[refKey(planDoc.seedRecipeRef)], 'recipe');
409
+ const payload = parseAs(LogicalPayload, bundle.documents[refKey(planDoc.logicalPayloadRef)], 'payload');
410
+ for (const entity of recipe.entities) {
411
+ rows.push({ case: spec.ref.id, entity: entity.entityKey, action: entity.actionId, values: payload.entities.find((e) => e.entityKey === entity.entityKey)?.values ?? {}, readback: entity.readback?.actionId ?? null, cleanup: entity.cleanup?.actionId ?? null, payloadDigest: payload.ref.digest.hex.slice(0, 12) });
412
+ }
413
+ }
414
+ out(args, { preview: rows }, rows.map((r) => JSON.stringify(r)).join('\n') + '\nestimated records only; nothing was created');
415
+ return 0;
416
+ }
417
+ case 'controller': {
418
+ const controller = await startController(args.flags['state-dir'], args.flags['project-root']);
419
+ out(args, { endpoint: controller.endpoint }, `controller ready: ${controller.endpoint}`);
420
+ await new Promise((done) => {
421
+ const stop = () => { process.off('SIGINT', stop); process.off('SIGTERM', stop); done(); };
422
+ process.on('SIGINT', stop);
423
+ process.on('SIGTERM', stop);
424
+ });
425
+ await controller.close();
426
+ return 0;
427
+ }
428
+ case 'run': {
429
+ const bundle = readBundle(args.flags['request']);
430
+ if (!bundle.request) {
431
+ out(args, { outcome: 'blocked', blockers: bundle.blockers }, `BLOCKED: ${bundle.blockers.map((b) => b.code).join(', ')}`);
432
+ return 2;
433
+ }
434
+ const stateDir = flag(args, 'state-dir') ?? stateDirFor(bundle.projectRoot);
435
+ let ledger = null;
436
+ try {
437
+ ledger = LocalLedger.open(stateDir);
438
+ }
439
+ catch (error) {
440
+ if (!(error instanceof Conflict))
441
+ throw error;
442
+ }
443
+ const controller = new AbortController();
444
+ const onSignal = () => { process.stderr.write('stop requested; revoking action authority, cleanup continues\n'); controller.abort(new Error('user_cancelled')); };
445
+ process.on('SIGINT', onSignal);
446
+ process.on('SIGTERM', onSignal);
447
+ try {
448
+ const summary = ledger
449
+ ? await executeBundle({ bundle, stateDir, ledger, scope: localScope(), signal: controller.signal, ...(args.flags.jsonl ? { onEvent: (event) => { process.stdout.write(`${JSON.stringify(event)}\n`); } } : {}) })
450
+ : await delegateRun(stateDir, bundle, controller.signal);
451
+ const result = { executionId: summary.executionId, attemptId: summary.attemptId, campaignId: summary.campaignId, outcome: summary.outcome, exitCode: summary.exitCode, reasonCodes: summary.reasonCodes, redelivered: summary.redelivered, executionDir: summary.executionDir, cells: summary.receipts.map((r) => ({ cell: r.selectionCellId, outcome: r.outcome, proofClaim: r.proofClaim, firstFailure: r.steps.find((s) => s.result !== 'completed')?.stepId ?? null, failedAssertions: r.assertions.filter((a) => a.result === 'fail').map((a) => a.assertionId) })) };
452
+ out(args, result, `${summary.outcome.toUpperCase()} (${summary.redelivered ? 'reconciled existing execution ' : 'execution '}${summary.executionId})\n` + result.cells.map((c) => ` ${c.cell}: ${c.outcome}${c.firstFailure ? `; first failure at step ${c.firstFailure}` : ''}${c.failedAssertions.length ? `; failed ${c.failedAssertions.join(', ')}` : ''}`).join('\n') + `\nreasons: ${summary.reasonCodes.join(', ') || 'none'}\nbundle: ${summary.executionDir}`);
453
+ return summary.exitCode;
454
+ }
455
+ finally {
456
+ process.off('SIGINT', onSignal);
457
+ process.off('SIGTERM', onSignal);
458
+ ledger?.close();
459
+ }
460
+ }
461
+ case 'inspect': {
462
+ if (args.flags.request) {
463
+ const inspection = inspectFrozenPlan(readBundle(args.flags.request), localScope());
464
+ out(args, inspection, `${inspection.structural.toUpperCase()} frozen structure · ${inspection.cells.length} cell(s)\nexecution authority: ${inspection.executionAuthority}\n` +
465
+ inspection.blockers.map(b => `${b.code}: ${b.detail}`).join('\n'));
466
+ return inspection.structural === 'valid' ? 0 : 2;
467
+ }
468
+ const executionId = args.flags.execution ?? null;
469
+ const dir = args.flags.bundle ? resolve(args.flags.bundle) : join(resolve(args.flags['state-dir']), 'executions', executionId);
470
+ if (!existsSync(dir))
471
+ throw new Blocked([{ code: 'execution_not_found', detail: dir, owner: 'operator', action: 'check the bundle or execution path' }]);
472
+ const snapshot = VerifiedBundleSnapshot.open(dir);
473
+ if (args.flags['failed-step']) {
474
+ const inspection = inspectFailedSteps(snapshot, executionId);
475
+ const { failed } = inspection;
476
+ out(args, inspection, failed.length ? failed.map((f) => `${f.cell} step ${f.step}: ${f.result} (${f.reason ?? 'no reason'})\n${JSON.stringify(f.output, null, 2)}`).join('\n') : 'no failed step');
477
+ return 0;
478
+ }
479
+ const inspection = inspectExecution(snapshot, executionId);
480
+ out(args, inspection, `${inspection.outcome.toUpperCase()} campaign ${inspection.campaignId} · evidence verified\n` +
481
+ inspection.cells.map(r => ` ${r.cell}: ${r.outcome} [${r.reasonCodes.join(', ') || 'no reasons'}]\n steps: ${r.steps.join(' ')}\n assertions: ${r.assertions.join(' ')}`).join('\n'));
482
+ return 0;
483
+ }
484
+ case 'export': {
485
+ const stateDir = resolve(args.flags['state-dir']);
486
+ const executionId = args.flags['execution'];
487
+ const output = resolve(args.flags['output']);
488
+ const dir = join(stateDir, 'executions', executionId);
489
+ if (!existsSync(dir))
490
+ throw new Blocked([{ code: 'execution_not_found', detail: executionId }]);
491
+ createDurableDirectory(dirname(output));
492
+ const verification = exportVerifiedBundle(dir, output);
493
+ out(args, { output, verification, published: verification.ok }, verification.ok ? `exported to ${output}; verification ok` : `bundle invalid; no output published: ${verification.problems.join('; ')}`);
494
+ return verification.ok ? 0 : 2;
495
+ }
496
+ case 'verify-bundle': {
497
+ const verification = verifyBundle(resolve(args.flags['bundle']));
498
+ out(args, verification, verification.ok ? `bundle ok: ${verification.receipts} receipt(s), re-reduced outcome ${verification.outcome}` : `bundle INVALID:\n ${verification.problems.join('\n ')}`);
499
+ return verification.ok ? 0 : 2;
500
+ }
501
+ case 'awr-prepare':
502
+ case 'awr-inspect':
503
+ case 'awr-deliver':
504
+ case 'report-prepare':
505
+ case 'report-inspect':
506
+ case 'report-attach': {
507
+ const { runAwrCommand } = await import("../integrations/awr/cli.js").catch(() => {
508
+ throw new Conflict('AWR integration unavailable; install the optional peer @useorgx/agent-work-receipt@0.3.0');
509
+ });
510
+ const state = await runAwrCommand(args.command, args.flags);
511
+ out(args, state, `${state.status}: ${state.prepared.ref.id}\nAttempts: ${state.attempts}; target verdict is in the saved receipt.\nImported evidence remains unverified; native acceptance and outcomes are separate.`);
512
+ return 0;
513
+ }
514
+ case 'result-ingest':
515
+ case 'results': {
516
+ if (args.command === 'results' && args.flags.id && (args.flags.cursor !== undefined || args.flags.limit !== undefined))
517
+ throw new Conflict('Choose --id or pagination options, not both');
518
+ const scope = localScope();
519
+ const ledger = LocalLedger.open(resolve(args.flags.sink));
520
+ try {
521
+ const sink = new LocalResultSink(ledger, scope, { authorize: async (requested) => {
522
+ if (!sameScope(requested, scope))
523
+ throw new Conflict('Result scope differs from the local operator');
524
+ } });
525
+ if (args.command === 'result-ingest') {
526
+ const result = await sink.ingest(resolve(args.flags.bundle));
527
+ out(args, result, `${result.replayed ? 'already retained' : 'retained'}: ${result.receipt.ref.id}\noutcome: ${result.receipt.retainedOutcome}; planned lanes: ${result.receipt.plannedLanes.join(', ') || 'unavailable'}\nissuer unverified; qualification not evaluated\narchive: ${result.bundleDir}`);
528
+ }
529
+ else if (args.flags.id) {
530
+ const result = await sink.get(args.flags.id);
531
+ out(args, result, `${result.receipt.ref.id}\nretained outcome: ${result.receipt.retainedOutcome}; archive re-verified\nplanned lanes: ${result.receipt.plannedLanes.join(', ') || 'unavailable'}\nissuer unverified; qualification not evaluated\narchive: ${result.bundleDir}`);
532
+ }
533
+ else {
534
+ const page = await sink.list({ ...(args.flags.cursor ? { cursor: args.flags.cursor } : {}), ...(args.flags.limit ? { limit: Number(args.flags.limit) } : {}) });
535
+ out(args, page, `${page.records.map(record => `${record.ref.id} ${record.retainedOutcome} [${record.plannedLanes.join(', ')}] ${record.campaignRef.id}`).join('\n') || 'No retained results.'}\nStored receipts only; archives not checked. Issuers unverified; qualification not evaluated.${page.nextCursor ? `\nnext cursor: ${page.nextCursor}` : ''}`);
536
+ }
537
+ return 0;
538
+ }
539
+ finally {
540
+ ledger.close();
541
+ }
542
+ }
543
+ case 'verify-cleanup': {
544
+ const result = checkCleanupFiles(resolve(args.flags['proof']), resolve(args.flags['expectation']), resolve(args.flags['trust']));
545
+ out(args, result, result.ok
546
+ ? `cleanup follow-up integrity valid: ${result.proofDigest}\n${result.resourceCount} resource(s); hosted release is not admitted`
547
+ : `cleanup follow-up INVALID:\n ${result.problems.join('\n ')}`);
548
+ return result.ok ? 0 : 2;
549
+ }
550
+ case 'schema': {
551
+ const { exportJsonSchemas } = await import("../protocol/index.js");
552
+ const output = resolve(args.flags['output']);
553
+ mkdirSync(output, { recursive: true });
554
+ const schemas = exportJsonSchemas();
555
+ for (const [name, schema] of Object.entries(schemas))
556
+ writeFileSync(join(output, `${name.replace(/[\/.]/g, '_')}.json`), `${JSON.stringify(schema, null, 2)}\n`);
557
+ out(args, { output, count: Object.keys(schemas).length }, `exported ${Object.keys(schemas).length} schemas to ${output}`);
558
+ return 0;
559
+ }
560
+ default: {
561
+ const unreachable = args;
562
+ void unreachable;
563
+ throw new InfrastructureFailure('Parsed CLI command has no implementation');
564
+ }
565
+ }
566
+ }
567
+ function readBundle(path) {
568
+ return readFrozenBundle(resolve(path));
569
+ }
570
+ main(process.argv.slice(2)).then((code) => { process.exitCode = code; }).catch((error) => {
571
+ // Argument failures happen before the doctor handler; retain its structured JSON contract.
572
+ if (jsonRequested(process.argv.slice(2))) {
573
+ const report = process.argv[2] === 'doctor' ? doctorFailure(error) : cliErrorReport(error, process.argv[2]);
574
+ process.stdout.write(`${JSON.stringify(report)}\n`);
575
+ process.exitCode = report.exitCode;
576
+ return;
577
+ }
578
+ if (error instanceof Blocked) {
579
+ process.stderr.write(`BLOCKED: ${error.reasons.map((r) => `${r.code}: ${r.detail} (owner: ${r.owner}; action: ${r.action})`).join('\n')}\n`);
580
+ process.exitCode = 2;
581
+ return;
582
+ }
583
+ if (error instanceof Conflict) {
584
+ process.stderr.write(`CONFLICT: ${error.message}\n`);
585
+ process.exitCode = 2;
586
+ return;
587
+ }
588
+ if (error instanceof SchemaViolation) {
589
+ process.stderr.write(`INVALID: ${error.message}\n`);
590
+ process.exitCode = 2;
591
+ return;
592
+ }
593
+ if (error instanceof InfrastructureFailure) {
594
+ process.stderr.write(`INFRASTRUCTURE FAILURE: ${error.message}\n`);
595
+ process.exitCode = 3;
596
+ return;
597
+ }
598
+ process.stderr.write(`ERROR: ${error.stack ?? String(error)}\n`);
599
+ process.exitCode = 3;
600
+ });
601
+ void EXIT_CODES;
602
+ void null;
603
+ //# sourceMappingURL=main.js.map