agentskeptic 0.2.1 → 1.0.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 (386) hide show
  1. package/README.md +39 -39
  2. package/config/marketing.json +187 -0
  3. package/dist/actionableFailure.d.ts.map +1 -1
  4. package/dist/actionableFailure.js +95 -0
  5. package/dist/actionableFailure.js.map +1 -1
  6. package/dist/actionableFailure.remediationExhaustive.test.js +4 -4
  7. package/dist/actionableFailure.remediationExhaustive.test.js.map +1 -1
  8. package/dist/agentRunBundle.d.ts +2 -0
  9. package/dist/agentRunBundle.d.ts.map +1 -1
  10. package/dist/agentRunBundle.js +4 -0
  11. package/dist/agentRunBundle.js.map +1 -1
  12. package/dist/assurance/assurancePathArgs.d.ts.map +1 -1
  13. package/dist/assurance/assurancePathArgs.js +1 -0
  14. package/dist/assurance/assurancePathArgs.js.map +1 -1
  15. package/dist/assurance/buildAssuranceOutput.d.ts +29 -0
  16. package/dist/assurance/buildAssuranceOutput.d.ts.map +1 -0
  17. package/dist/assurance/buildAssuranceOutput.js +53 -0
  18. package/dist/assurance/buildAssuranceOutput.js.map +1 -0
  19. package/dist/assurance/checkStale.d.ts +7 -0
  20. package/dist/assurance/checkStale.d.ts.map +1 -1
  21. package/dist/assurance/checkStale.js +14 -3
  22. package/dist/assurance/checkStale.js.map +1 -1
  23. package/dist/assurance/runAssurance.d.ts.map +1 -1
  24. package/dist/assurance/runAssurance.js +26 -3
  25. package/dist/assurance/runAssurance.js.map +1 -1
  26. package/dist/bootstrap/executeBootstrapPack.d.ts.map +1 -1
  27. package/dist/bootstrap/executeBootstrapPack.js +3 -2
  28. package/dist/bootstrap/executeBootstrapPack.js.map +1 -1
  29. package/dist/certificateDigest.d.ts +4 -0
  30. package/dist/certificateDigest.d.ts.map +1 -0
  31. package/dist/certificateDigest.js +7 -0
  32. package/dist/certificateDigest.js.map +1 -0
  33. package/dist/certificateDigest.test.d.ts +2 -0
  34. package/dist/certificateDigest.test.d.ts.map +1 -0
  35. package/dist/certificateDigest.test.js +14 -0
  36. package/dist/certificateDigest.test.js.map +1 -0
  37. package/dist/ciLockWorkflow.js +1 -1
  38. package/dist/cli/lockOrchestration.d.ts.map +1 -1
  39. package/dist/cli/lockOrchestration.js +81 -50
  40. package/dist/cli/lockOrchestration.js.map +1 -1
  41. package/dist/cli/lockOrchestration.test.js +7 -1
  42. package/dist/cli/lockOrchestration.test.js.map +1 -1
  43. package/dist/cli/runFunnelAnonSet.js +1 -1
  44. package/dist/cli.js +147 -136
  45. package/dist/cli.js.map +1 -1
  46. package/dist/cliArgv.d.ts +4 -1
  47. package/dist/cliArgv.d.ts.map +1 -1
  48. package/dist/cliArgv.js +9 -4
  49. package/dist/cliArgv.js.map +1 -1
  50. package/dist/cliArgv.test.d.ts +2 -0
  51. package/dist/cliArgv.test.d.ts.map +1 -0
  52. package/dist/cliArgv.test.js +34 -0
  53. package/dist/cliArgv.test.js.map +1 -0
  54. package/dist/cliOperationalCodes.d.ts +8 -0
  55. package/dist/cliOperationalCodes.d.ts.map +1 -1
  56. package/dist/cliOperationalCodes.js +8 -0
  57. package/dist/cliOperationalCodes.js.map +1 -1
  58. package/dist/commercial/activationCorrelation.d.ts +3 -0
  59. package/dist/commercial/activationCorrelation.d.ts.map +1 -0
  60. package/dist/commercial/activationCorrelation.js +6 -0
  61. package/dist/commercial/activationCorrelation.js.map +1 -0
  62. package/dist/commercial/getCurrentUsage.d.ts +16 -0
  63. package/dist/commercial/getCurrentUsage.d.ts.map +1 -0
  64. package/dist/commercial/getCurrentUsage.js +33 -0
  65. package/dist/commercial/getCurrentUsage.js.map +1 -0
  66. package/dist/commercial/licensePreflight.d.ts +1 -0
  67. package/dist/commercial/licensePreflight.d.ts.map +1 -1
  68. package/dist/commercial/licensePreflight.js +27 -8
  69. package/dist/commercial/licensePreflight.js.map +1 -1
  70. package/dist/commercial/postVerifyOutcomeBeacon.d.ts +5 -3
  71. package/dist/commercial/postVerifyOutcomeBeacon.d.ts.map +1 -1
  72. package/dist/commercial/postVerifyOutcomeBeacon.js +17 -10
  73. package/dist/commercial/postVerifyOutcomeBeacon.js.map +1 -1
  74. package/dist/commercial/verifyOutcomeBeaconBody.d.ts +12 -0
  75. package/dist/commercial/verifyOutcomeBeaconBody.d.ts.map +1 -0
  76. package/dist/commercial/verifyOutcomeBeaconBody.js +26 -0
  77. package/dist/commercial/verifyOutcomeBeaconBody.js.map +1 -0
  78. package/dist/commercial/verifyWorkloadClassify.d.ts +2 -7
  79. package/dist/commercial/verifyWorkloadClassify.d.ts.map +1 -1
  80. package/dist/commercial/verifyWorkloadClassify.js +1 -1
  81. package/dist/commercial/verifyWorkloadClassify.js.map +1 -1
  82. package/dist/commercial/verifyWorkloadClassify.test.js +7 -0
  83. package/dist/commercial/verifyWorkloadClassify.test.js.map +1 -1
  84. package/dist/compare.acceptance.test.js +25 -0
  85. package/dist/compare.acceptance.test.js.map +1 -1
  86. package/dist/compareRunManifest.d.ts +32 -0
  87. package/dist/compareRunManifest.d.ts.map +1 -0
  88. package/dist/compareRunManifest.js +60 -0
  89. package/dist/compareRunManifest.js.map +1 -0
  90. package/dist/crossing/crossingDecisionReadyFooter.d.ts +1 -1
  91. package/dist/crossing/crossingDecisionReadyFooter.js +1 -1
  92. package/dist/crossing/runCrossingSubcommand.js +8 -8
  93. package/dist/debug-ui/app.css +42 -0
  94. package/dist/debug-ui/app.js +206 -15
  95. package/dist/debug-ui/index.html +11 -4
  96. package/dist/debug-ui/urlState.d.ts +15 -0
  97. package/dist/debug-ui/urlState.js +92 -0
  98. package/dist/debugCorpus.test.js +33 -7
  99. package/dist/debugCorpus.test.js.map +1 -1
  100. package/dist/debugPanels.d.ts +0 -3
  101. package/dist/debugPanels.d.ts.map +1 -1
  102. package/dist/debugPanels.js +0 -23
  103. package/dist/debugPanels.js.map +1 -1
  104. package/dist/debugPanels.test.js +16 -15
  105. package/dist/debugPanels.test.js.map +1 -1
  106. package/dist/debugServer.d.ts.map +1 -1
  107. package/dist/debugServer.js +19 -16
  108. package/dist/debugServer.js.map +1 -1
  109. package/dist/debugServer.test.js +18 -9
  110. package/dist/debugServer.test.js.map +1 -1
  111. package/dist/debugUiUrlState.test.d.ts +2 -0
  112. package/dist/debugUiUrlState.test.d.ts.map +1 -0
  113. package/dist/debugUiUrlState.test.js +49 -0
  114. package/dist/debugUiUrlState.test.js.map +1 -0
  115. package/dist/decisionBlocker.contract.test.d.ts +2 -0
  116. package/dist/decisionBlocker.contract.test.d.ts.map +1 -0
  117. package/dist/decisionBlocker.contract.test.js +51 -0
  118. package/dist/decisionBlocker.contract.test.js.map +1 -0
  119. package/dist/decisionBlocker.d.ts +10 -0
  120. package/dist/decisionBlocker.d.ts.map +1 -0
  121. package/dist/decisionBlocker.js +66 -0
  122. package/dist/decisionBlocker.js.map +1 -0
  123. package/dist/decisionGate.assertSafe.test.d.ts +2 -0
  124. package/dist/decisionGate.assertSafe.test.d.ts.map +1 -0
  125. package/dist/decisionGate.assertSafe.test.js +52 -0
  126. package/dist/decisionGate.assertSafe.test.js.map +1 -0
  127. package/dist/decisionGate.d.ts +23 -0
  128. package/dist/decisionGate.d.ts.map +1 -0
  129. package/dist/decisionGate.js +85 -0
  130. package/dist/decisionGate.js.map +1 -0
  131. package/dist/decisionGate.persistBundle.test.d.ts +2 -0
  132. package/dist/decisionGate.persistBundle.test.d.ts.map +1 -0
  133. package/dist/{withWorkflowVerification.persistBundle.test.js → decisionGate.persistBundle.test.js} +31 -19
  134. package/dist/decisionGate.persistBundle.test.js.map +1 -0
  135. package/dist/decisionUnsafeError.d.ts +8 -0
  136. package/dist/decisionUnsafeError.d.ts.map +1 -0
  137. package/dist/decisionUnsafeError.js +12 -0
  138. package/dist/decisionUnsafeError.js.map +1 -0
  139. package/dist/discovery-payload-v1.json +167 -59
  140. package/dist/enforceCli.d.ts.map +1 -1
  141. package/dist/enforceCli.js +15 -40
  142. package/dist/enforceCli.js.map +1 -1
  143. package/dist/enforceStateful.d.ts +2 -0
  144. package/dist/enforceStateful.d.ts.map +1 -0
  145. package/dist/enforceStateful.js +106 -0
  146. package/dist/enforceStateful.js.map +1 -0
  147. package/dist/enforcementProjection.d.ts +17 -0
  148. package/dist/enforcementProjection.d.ts.map +1 -0
  149. package/dist/enforcementProjection.js +20 -0
  150. package/dist/enforcementProjection.js.map +1 -0
  151. package/dist/executionPathFindings.d.ts +1 -1
  152. package/dist/executionPathFindings.d.ts.map +1 -1
  153. package/dist/executionPathFindings.js +2 -2
  154. package/dist/executionPathFindings.js.map +1 -1
  155. package/dist/executionTrace.js +2 -2
  156. package/dist/executionTrace.js.map +1 -1
  157. package/dist/executionTrace.test.js +35 -0
  158. package/dist/executionTrace.test.js.map +1 -1
  159. package/dist/executionTraceDiff.d.ts +36 -0
  160. package/dist/executionTraceDiff.d.ts.map +1 -0
  161. package/dist/executionTraceDiff.js +86 -0
  162. package/dist/executionTraceDiff.js.map +1 -0
  163. package/dist/executionTraceDiff.test.d.ts +2 -0
  164. package/dist/executionTraceDiff.test.d.ts.map +1 -0
  165. package/dist/executionTraceDiff.test.js +44 -0
  166. package/dist/executionTraceDiff.test.js.map +1 -0
  167. package/dist/failureCatalog.d.ts +1 -0
  168. package/dist/failureCatalog.d.ts.map +1 -1
  169. package/dist/failureCatalog.js +1 -0
  170. package/dist/failureCatalog.js.map +1 -1
  171. package/dist/failureOriginCatalog.d.ts.map +1 -1
  172. package/dist/failureOriginCatalog.js +20 -0
  173. package/dist/failureOriginCatalog.js.map +1 -1
  174. package/dist/firstFiveMinutesChecklist.d.ts +11 -0
  175. package/dist/firstFiveMinutesChecklist.d.ts.map +1 -0
  176. package/dist/firstFiveMinutesChecklist.js +18 -0
  177. package/dist/firstFiveMinutesChecklist.js.map +1 -0
  178. package/dist/funnel/workflowLineageClassify.d.ts +1 -1
  179. package/dist/funnel/workflowLineageClassify.js +1 -1
  180. package/dist/index.d.ts +22 -7
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +15 -6
  183. package/dist/index.js.map +1 -1
  184. package/dist/langGraphCheckpointTrustGate.d.ts +38 -0
  185. package/dist/langGraphCheckpointTrustGate.d.ts.map +1 -0
  186. package/dist/langGraphCheckpointTrustGate.js +124 -0
  187. package/dist/langGraphCheckpointTrustGate.js.map +1 -0
  188. package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts +8 -0
  189. package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts.map +1 -0
  190. package/dist/langGraphCheckpointTrustIneligibleCertificate.js +17 -0
  191. package/dist/langGraphCheckpointTrustIneligibleCertificate.js.map +1 -0
  192. package/dist/langGraphCheckpointTrustUnsafeError.d.ts +8 -0
  193. package/dist/langGraphCheckpointTrustUnsafeError.d.ts.map +1 -0
  194. package/dist/langGraphCheckpointTrustUnsafeError.js +12 -0
  195. package/dist/langGraphCheckpointTrustUnsafeError.js.map +1 -0
  196. package/dist/loadEvents.d.ts +5 -0
  197. package/dist/loadEvents.d.ts.map +1 -1
  198. package/dist/loadEvents.js +32 -0
  199. package/dist/loadEvents.js.map +1 -1
  200. package/dist/operationalDisposition.d.ts +64 -0
  201. package/dist/operationalDisposition.d.ts.map +1 -1
  202. package/dist/operationalDisposition.js +64 -0
  203. package/dist/operationalDisposition.js.map +1 -1
  204. package/dist/outcomeCertificate.d.ts +60 -0
  205. package/dist/outcomeCertificate.d.ts.map +1 -0
  206. package/dist/outcomeCertificate.js +254 -0
  207. package/dist/outcomeCertificate.js.map +1 -0
  208. package/dist/outcomeCertificate.test.d.ts +2 -0
  209. package/dist/outcomeCertificate.test.d.ts.map +1 -0
  210. package/dist/outcomeCertificate.test.js +74 -0
  211. package/dist/outcomeCertificate.test.js.map +1 -0
  212. package/dist/pipeline.d.ts +19 -17
  213. package/dist/pipeline.d.ts.map +1 -1
  214. package/dist/pipeline.js +61 -167
  215. package/dist/pipeline.js.map +1 -1
  216. package/dist/planTransition.test.js +4 -4
  217. package/dist/publicDistribution.generated.d.ts +2 -2
  218. package/dist/publicDistribution.generated.d.ts.map +1 -1
  219. package/dist/publicDistribution.generated.js +7 -8
  220. package/dist/publicDistribution.generated.js.map +1 -1
  221. package/dist/quickVerify/quickVerifyScope.d.ts +1 -1
  222. package/dist/quickVerify/quickVerifyScope.js +1 -1
  223. package/dist/quickVerify/runQuickVerify.js +1 -1
  224. package/dist/quickVerify/runQuickVerify.js.map +1 -1
  225. package/dist/quickVerify/verifyExecution.d.ts +1 -1
  226. package/dist/quickVerify/verifyExecution.d.ts.map +1 -1
  227. package/dist/quickVerify/verifyExecution.js +3 -2
  228. package/dist/quickVerify/verifyExecution.js.map +1 -1
  229. package/dist/reconciler.d.ts +6 -2
  230. package/dist/reconciler.d.ts.map +1 -1
  231. package/dist/reconciler.js +17 -11
  232. package/dist/reconciler.js.map +1 -1
  233. package/dist/registryDraft/createRegistryDraftAjv.d.ts +1 -1
  234. package/dist/registryDraft/createRegistryDraftAjv.js +1 -1
  235. package/dist/regressionArtifact.d.ts +63 -0
  236. package/dist/regressionArtifact.d.ts.map +1 -0
  237. package/dist/regressionArtifact.js +290 -0
  238. package/dist/regressionArtifact.js.map +1 -0
  239. package/dist/relationalInvariant.d.ts +13 -3
  240. package/dist/relationalInvariant.d.ts.map +1 -1
  241. package/dist/relationalInvariant.existsSql.test.js +1 -1
  242. package/dist/relationalInvariant.existsSql.test.js.map +1 -1
  243. package/dist/relationalInvariant.js +59 -39
  244. package/dist/relationalInvariant.js.map +1 -1
  245. package/dist/relationalInvariant.test.js +2 -2
  246. package/dist/relationalInvariant.test.js.map +1 -1
  247. package/dist/resolveExpectation.d.ts +18 -2
  248. package/dist/resolveExpectation.d.ts.map +1 -1
  249. package/dist/resolveExpectation.js +332 -1
  250. package/dist/resolveExpectation.js.map +1 -1
  251. package/dist/resolveExpectation.test.js +25 -0
  252. package/dist/resolveExpectation.test.js.map +1 -1
  253. package/dist/runComparison.d.ts +0 -1
  254. package/dist/runComparison.d.ts.map +1 -1
  255. package/dist/runComparison.js +18 -86
  256. package/dist/runComparison.js.map +1 -1
  257. package/dist/runComparison.test.js +101 -57
  258. package/dist/runComparison.test.js.map +1 -1
  259. package/dist/schema-validation.test.js +29 -0
  260. package/dist/schema-validation.test.js.map +1 -1
  261. package/dist/schemaLoad.d.ts +1 -1
  262. package/dist/schemaLoad.d.ts.map +1 -1
  263. package/dist/schemaLoad.js +15 -0
  264. package/dist/schemaLoad.js.map +1 -1
  265. package/dist/shareReport/postPublicVerificationReport.d.ts +6 -0
  266. package/dist/shareReport/postPublicVerificationReport.d.ts.map +1 -1
  267. package/dist/shareReport/postPublicVerificationReport.js +3 -1
  268. package/dist/shareReport/postPublicVerificationReport.js.map +1 -1
  269. package/dist/sortedJsonStringify.d.ts +2 -0
  270. package/dist/sortedJsonStringify.d.ts.map +1 -0
  271. package/dist/sortedJsonStringify.js +23 -0
  272. package/dist/sortedJsonStringify.js.map +1 -0
  273. package/dist/sqlDialect.d.ts +8 -0
  274. package/dist/sqlDialect.d.ts.map +1 -0
  275. package/dist/sqlDialect.js +37 -0
  276. package/dist/sqlDialect.js.map +1 -0
  277. package/dist/standardVerifyWorkflowCli.d.ts +20 -5
  278. package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
  279. package/dist/standardVerifyWorkflowCli.js +56 -24
  280. package/dist/standardVerifyWorkflowCli.js.map +1 -1
  281. package/dist/stateWitness.d.ts +4 -0
  282. package/dist/stateWitness.d.ts.map +1 -0
  283. package/dist/stateWitness.js +383 -0
  284. package/dist/stateWitness.js.map +1 -0
  285. package/dist/stateWitness.test.d.ts +2 -0
  286. package/dist/stateWitness.test.d.ts.map +1 -0
  287. package/dist/stateWitness.test.js +120 -0
  288. package/dist/stateWitness.test.js.map +1 -0
  289. package/dist/telemetry/maybeEmitOssClaimTicketUrl.d.ts +2 -0
  290. package/dist/telemetry/maybeEmitOssClaimTicketUrl.d.ts.map +1 -1
  291. package/dist/telemetry/maybeEmitOssClaimTicketUrl.js +13 -2
  292. package/dist/telemetry/maybeEmitOssClaimTicketUrl.js.map +1 -1
  293. package/dist/telemetry/ossClaimOrigin.d.ts +1 -1
  294. package/dist/telemetry/ossClaimOrigin.js +1 -1
  295. package/dist/telemetry/postOssClaimContinuation.d.ts +1 -1
  296. package/dist/telemetry/postOssClaimContinuation.d.ts.map +1 -1
  297. package/dist/telemetry/postOssClaimContinuation.js +10 -6
  298. package/dist/telemetry/postOssClaimContinuation.js.map +1 -1
  299. package/dist/telemetry/postOssClaimTicket.d.ts +8 -0
  300. package/dist/telemetry/postOssClaimTicket.d.ts.map +1 -1
  301. package/dist/telemetry/postOssClaimTicket.js +31 -5
  302. package/dist/telemetry/postOssClaimTicket.js.map +1 -1
  303. package/dist/telemetry/verificationHypothesisContract.d.ts +1 -1
  304. package/dist/telemetry/verificationHypothesisContract.js +1 -1
  305. package/dist/trustDecision.d.ts +8 -0
  306. package/dist/trustDecision.d.ts.map +1 -0
  307. package/dist/trustDecision.js +13 -0
  308. package/dist/trustDecision.js.map +1 -0
  309. package/dist/types.d.ts +139 -7
  310. package/dist/types.d.ts.map +1 -1
  311. package/dist/types.js.map +1 -1
  312. package/dist/verificationConnections.d.ts +10 -0
  313. package/dist/verificationConnections.d.ts.map +1 -0
  314. package/dist/verificationConnections.js +190 -0
  315. package/dist/verificationConnections.js.map +1 -0
  316. package/dist/verificationDatabaseUrl.d.ts +11 -0
  317. package/dist/verificationDatabaseUrl.d.ts.map +1 -0
  318. package/dist/verificationDatabaseUrl.js +41 -0
  319. package/dist/verificationDatabaseUrl.js.map +1 -0
  320. package/dist/verificationDatabaseUrl.test.d.ts +2 -0
  321. package/dist/verificationDatabaseUrl.test.d.ts.map +1 -0
  322. package/dist/verificationDatabaseUrl.test.js +66 -0
  323. package/dist/verificationDatabaseUrl.test.js.map +1 -0
  324. package/dist/verificationDiagnostics.d.ts.map +1 -1
  325. package/dist/verificationDiagnostics.js +33 -9
  326. package/dist/verificationDiagnostics.js.map +1 -1
  327. package/dist/verificationDiagnostics.test.js +15 -0
  328. package/dist/verificationDiagnostics.test.js.map +1 -1
  329. package/dist/verificationPolicy.d.ts +2 -1
  330. package/dist/verificationPolicy.d.ts.map +1 -1
  331. package/dist/verificationPolicy.js +97 -0
  332. package/dist/verificationPolicy.js.map +1 -1
  333. package/dist/verificationPolicy.test.js +7 -0
  334. package/dist/verificationPolicy.test.js.map +1 -1
  335. package/dist/verificationRunContext.d.ts.map +1 -1
  336. package/dist/verificationRunContext.js +3 -0
  337. package/dist/verificationRunContext.js.map +1 -1
  338. package/dist/verificationUserPhrases.d.ts.map +1 -1
  339. package/dist/verificationUserPhrases.js +21 -0
  340. package/dist/verificationUserPhrases.js.map +1 -1
  341. package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
  342. package/dist/verify/batchVerifyTelemetrySubcommand.js +131 -33
  343. package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
  344. package/dist/verifyAgentskeptic.d.ts +4 -8
  345. package/dist/verifyAgentskeptic.d.ts.map +1 -1
  346. package/dist/verifyAgentskeptic.js +16 -21
  347. package/dist/verifyAgentskeptic.js.map +1 -1
  348. package/dist/verifyAgentskeptic.test.js +10 -12
  349. package/dist/verifyAgentskeptic.test.js.map +1 -1
  350. package/dist/verifyRunStateFromBufferedRunEvents.d.ts +18 -0
  351. package/dist/verifyRunStateFromBufferedRunEvents.d.ts.map +1 -0
  352. package/dist/verifyRunStateFromBufferedRunEvents.js +65 -0
  353. package/dist/verifyRunStateFromBufferedRunEvents.js.map +1 -0
  354. package/dist/vitestMonorepoRoot.d.ts +10 -0
  355. package/dist/vitestMonorepoRoot.d.ts.map +1 -0
  356. package/dist/vitestMonorepoRoot.js +97 -0
  357. package/dist/vitestMonorepoRoot.js.map +1 -0
  358. package/dist/wireReasonCodes.d.ts +21 -0
  359. package/dist/wireReasonCodes.d.ts.map +1 -1
  360. package/dist/wireReasonCodes.js +21 -0
  361. package/dist/wireReasonCodes.js.map +1 -1
  362. package/package.json +63 -40
  363. package/schemas/assurance-output-v1.schema.json +81 -0
  364. package/schemas/compare-run-manifest-v1.schema.json +65 -0
  365. package/schemas/conformance-normalized-result.schema.json +73 -0
  366. package/schemas/connector-capabilities.schema.json +38 -0
  367. package/schemas/event.schema.json +35 -0
  368. package/schemas/execution-trace-view.schema.json +1 -1
  369. package/schemas/openapi-commercial-v1.in.yaml +616 -17
  370. package/schemas/openapi-commercial-v1.yaml +616 -17
  371. package/schemas/outcome-certificate-v1.schema.json +89 -0
  372. package/schemas/public-verification-report-v2.schema.json +15 -0
  373. package/schemas/quick-verify-report.schema.json +1 -1
  374. package/schemas/regression-artifact-v1.schema.json +212 -0
  375. package/schemas/tools-registry.schema.json +103 -0
  376. package/schemas/workflow-engine-result.schema.json +71 -2
  377. package/schemas/workflow-truth-report.schema.json +12 -0
  378. package/scripts/discovery-acquisition.lib.cjs +60 -97
  379. package/scripts/discovery-payload.lib.cjs +41 -7
  380. package/scripts/emit-primary-marketing.cjs +326 -0
  381. package/scripts/origin.cjs +52 -0
  382. package/scripts/public-product-anchors.cjs +3 -0
  383. package/scripts/validate-marketing.cjs +156 -0
  384. package/dist/withWorkflowVerification.persistBundle.test.d.ts +0 -2
  385. package/dist/withWorkflowVerification.persistBundle.test.d.ts.map +0 -1
  386. package/dist/withWorkflowVerification.persistBundle.test.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { readFileSync, mkdtempSync, rmSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { tmpdir } from "node:os";
4
+ import { fileURLToPath } from "node:url";
5
+ import { DatabaseSync } from "node:sqlite";
6
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
7
+ import { createDecisionGate } from "./decisionGate.js";
8
+ import { DecisionUnsafeError } from "./decisionUnsafeError.js";
9
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
10
+ describe("DecisionGate.assertSafeForIrreversibleAction", () => {
11
+ /** Seeded SQLite under tmp — `examples/demo.db` is gitignored and absent on clean CI. */
12
+ let workDir;
13
+ let dbPath;
14
+ beforeAll(() => {
15
+ workDir = mkdtempSync(join(tmpdir(), "agentskeptic-assert-safe-"));
16
+ dbPath = join(workDir, "demo.db");
17
+ const sql = readFileSync(join(root, "examples", "seed.sql"), "utf8");
18
+ const db = new DatabaseSync(dbPath);
19
+ db.exec(sql);
20
+ db.close();
21
+ });
22
+ afterAll(() => {
23
+ rmSync(workDir, { recursive: true, force: true });
24
+ });
25
+ it("throws DecisionUnsafeError when DB does not match (wf_missing)", async () => {
26
+ const eventsPath = join(root, "examples", "events.ndjson");
27
+ const registryPath = join(root, "examples", "tools.json");
28
+ const lines = readFileSync(eventsPath, "utf8").split(/\r?\n/).filter((l) => l.trim().length > 0);
29
+ const gate = createDecisionGate({
30
+ workflowId: "wf_missing",
31
+ registryPath,
32
+ databaseUrl: dbPath,
33
+ projectRoot: root,
34
+ logStep: () => { },
35
+ truthReport: () => { },
36
+ });
37
+ for (const line of lines) {
38
+ const ev = JSON.parse(line);
39
+ if (ev.workflowId === "wf_missing") {
40
+ gate.appendRunEvent(ev);
41
+ }
42
+ }
43
+ await expect(gate.assertSafeForIrreversibleAction()).rejects.toSatisfy((e) => {
44
+ if (!(e instanceof DecisionUnsafeError))
45
+ return false;
46
+ if (e.trustDecision !== "unsafe")
47
+ return false;
48
+ return e.message.split("\n").length === 6;
49
+ });
50
+ });
51
+ });
52
+ //# sourceMappingURL=decisionGate.assertSafe.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionGate.assertSafe.test.js","sourceRoot":"","sources":["../src/decisionGate.assertSafe.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type OutcomeCertificateV1 } from "./outcomeCertificate.js";
2
+ import type { VerificationPolicy, WorkflowResult } from "./types.js";
3
+ export type CreateDecisionGateOptions = {
4
+ workflowId: string;
5
+ registryPath: string;
6
+ databaseUrl: string;
7
+ projectRoot?: string;
8
+ verificationPolicy?: VerificationPolicy;
9
+ logStep?: (line: object) => void;
10
+ truthReport?: (report: string) => void;
11
+ };
12
+ export type DecisionGate = {
13
+ appendRunEvent(value: unknown): void;
14
+ toNdjsonUtf8(): Buffer;
15
+ evaluate(): Promise<WorkflowResult>;
16
+ evaluateCertificate(): Promise<OutcomeCertificateV1>;
17
+ assertSafeForIrreversibleAction(): Promise<void>;
18
+ };
19
+ /**
20
+ * Runtime integration: buffer structured run events, evaluate against the registry + DB, assert before irreversible work.
21
+ */
22
+ export declare function createDecisionGate(options: CreateDecisionGateOptions): DecisionGate;
23
+ //# sourceMappingURL=decisionGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionGate.d.ts","sourceRoot":"","sources":["../src/decisionGate.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAA0C,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAW7G,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,YAAY,IAAI,MAAM,CAAC;IACvB,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACpC,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACrD,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CA+EnF"}
@@ -0,0 +1,85 @@
1
+ import path from "node:path";
2
+ import { parseVerificationDatabaseUrl } from "./verificationDatabaseUrl.js";
3
+ import { CLI_OPERATIONAL_CODES, runLevelIssue } from "./failureCatalog.js";
4
+ import { buildOutcomeCertificateFromWorkflowResult, } from "./outcomeCertificate.js";
5
+ import { verifyRunStateFromBufferedRunEvents } from "./verifyRunStateFromBufferedRunEvents.js";
6
+ import { loadSchemaValidator } from "./schemaLoad.js";
7
+ import { resolveVerificationPolicyInput } from "./verificationPolicy.js";
8
+ import { TruthLayerError } from "./truthLayerError.js";
9
+ import { trustDecisionFromCertificate } from "./trustDecision.js";
10
+ import { formatDecisionBlockerForHumans } from "./decisionBlocker.js";
11
+ import { DecisionUnsafeError } from "./decisionUnsafeError.js";
12
+ const validateEvent = loadSchemaValidator("event");
13
+ function verificationDatabaseFromUrl(databaseUrl, projectRoot) {
14
+ return parseVerificationDatabaseUrl(databaseUrl, projectRoot);
15
+ }
16
+ /**
17
+ * Runtime integration: buffer structured run events, evaluate against the registry + DB, assert before irreversible work.
18
+ */
19
+ export function createDecisionGate(options) {
20
+ const projectRoot = path.resolve(options.projectRoot ?? process.cwd());
21
+ const registryPath = path.resolve(projectRoot, options.registryPath);
22
+ const verificationPolicy = resolveVerificationPolicyInput(options.verificationPolicy);
23
+ const database = verificationDatabaseFromUrl(options.databaseUrl, projectRoot);
24
+ const logStep = options.logStep ?? (() => { });
25
+ const truthReport = options.truthReport ?? (() => { });
26
+ const bufferedRunEvents = [];
27
+ const runLevelReasons = [];
28
+ const api = {};
29
+ api.appendRunEvent = (value) => {
30
+ if (typeof value !== "object" || value === null) {
31
+ runLevelReasons.push(runLevelIssue("MALFORMED_EVENT_LINE"));
32
+ return;
33
+ }
34
+ if (!validateEvent(value)) {
35
+ runLevelReasons.push(runLevelIssue("MALFORMED_EVENT_LINE"));
36
+ return;
37
+ }
38
+ const ev = value;
39
+ if (ev.workflowId !== options.workflowId) {
40
+ return;
41
+ }
42
+ bufferedRunEvents.push(ev);
43
+ };
44
+ api.toNdjsonUtf8 = () => {
45
+ const parts = [];
46
+ for (const ev of bufferedRunEvents) {
47
+ parts.push(`${JSON.stringify(ev)}\n`);
48
+ }
49
+ return Buffer.from(parts.join(""), "utf8");
50
+ };
51
+ api.evaluate = async () => {
52
+ if (!bufferedRunEvents.length && !runLevelReasons.length) {
53
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, "DecisionGate.evaluate requires at least one buffered run event for the workflow.");
54
+ }
55
+ return verifyRunStateFromBufferedRunEvents({
56
+ workflowId: options.workflowId,
57
+ registryPath,
58
+ database,
59
+ projectRoot,
60
+ bufferedRunEvents,
61
+ runLevelReasons,
62
+ verificationPolicy,
63
+ logStep,
64
+ truthReport,
65
+ });
66
+ };
67
+ api.evaluateCertificate = async () => {
68
+ const result = await api.evaluate();
69
+ const certificate = buildOutcomeCertificateFromWorkflowResult(result, "contract_sql");
70
+ const validateCert = loadSchemaValidator("outcome-certificate-v1");
71
+ if (!validateCert(certificate)) {
72
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.WORKFLOW_RESULT_SCHEMA_INVALID, JSON.stringify(validateCert.errors ?? []));
73
+ }
74
+ return certificate;
75
+ };
76
+ api.assertSafeForIrreversibleAction = async () => {
77
+ const certificate = await api.evaluateCertificate();
78
+ if (trustDecisionFromCertificate(certificate) !== "safe") {
79
+ const { lines } = formatDecisionBlockerForHumans(certificate);
80
+ throw new DecisionUnsafeError(certificate, lines);
81
+ }
82
+ };
83
+ return api;
84
+ }
85
+ //# sourceMappingURL=decisionGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionGate.js","sourceRoot":"","sources":["../src/decisionGate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACL,yCAAyC,GAE1C,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mCAAmC,EAAE,MAAM,0CAA0C,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAEnD,SAAS,2BAA2B,CAAC,WAAmB,EAAE,WAAmB;IAC3E,OAAO,4BAA4B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAoBD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,kBAAkB,GAAG,8BAA8B,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtD,MAAM,iBAAiB,GAAe,EAAE,CAAC;IACzC,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,MAAM,GAAG,GAAG,EAAkB,CAAC;IAE/B,GAAG,CAAC,cAAc,GAAG,CAAC,KAAc,EAAQ,EAAE;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,KAAiB,CAAC;QAC7B,IAAI,EAAE,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,GAAG,CAAC,YAAY,GAAG,GAAW,EAAE;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,GAAG,CAAC,QAAQ,GAAG,KAAK,IAA6B,EAAE;QACjD,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACzD,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,SAAS,EAC/B,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,mCAAmC,CAAC;YACzC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY;YACZ,QAAQ;YACR,WAAW;YACX,iBAAiB;YACjB,eAAe;YACf,kBAAkB;YAClB,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,GAAG,CAAC,mBAAmB,GAAG,KAAK,IAAmC,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,yCAAyC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,8BAA8B,EACpD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,CAAC,CAC1C,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,GAAG,CAAC,+BAA+B,GAAG,KAAK,IAAmB,EAAE;QAC9D,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpD,IAAI,4BAA4B,CAAC,WAAW,CAAC,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,EAAE,KAAK,EAAE,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;YAC9D,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decisionGate.persistBundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionGate.persistBundle.test.d.ts","sourceRoot":"","sources":["../src/decisionGate.persistBundle.test.ts"],"names":[],"mappings":""}
@@ -7,14 +7,15 @@ import { DatabaseSync } from "node:sqlite";
7
7
  import { describe, expect, it, beforeAll, afterAll } from "vitest";
8
8
  import { normalizeSpkiPemForSidecar } from "./workflowResultSignature.js";
9
9
  import { loadCorpusRun, resolveCorpusRootReal } from "./debugCorpus.js";
10
- import { withWorkflowVerification } from "./pipeline.js";
10
+ import { createDecisionGate } from "./decisionGate.js";
11
+ import { writeRunBundleFromDecisionGate } from "./agentRunBundle.js";
11
12
  import { verifyRunBundleSignature } from "./verifyRunBundleSignature.js";
12
13
  const root = join(fileURLToPath(import.meta.url), "..", "..");
13
- describe("withWorkflowVerification persistBundle", () => {
14
+ describe("DecisionGate run bundle write", () => {
14
15
  let workDir;
15
16
  let dbPath;
16
17
  beforeAll(() => {
17
- workDir = mkdtempSync(join(tmpdir(), "etl-wfv-persist-"));
18
+ workDir = mkdtempSync(join(tmpdir(), "etl-dg-persist-"));
18
19
  dbPath = join(workDir, "demo.db");
19
20
  const sql = readFileSync(join(root, "examples", "seed.sql"), "utf8");
20
21
  const db = new DatabaseSync(dbPath);
@@ -34,19 +35,24 @@ describe("withWorkflowVerification persistBundle", () => {
34
35
  const runId = "hook_run";
35
36
  const outDir = join(bundleParent, runId);
36
37
  try {
37
- const result = await withWorkflowVerification({
38
+ const gate = createDecisionGate({
38
39
  workflowId: wfId,
39
40
  registryPath,
40
- dbPath,
41
+ databaseUrl: dbPath,
42
+ projectRoot: root,
41
43
  truthReport: () => { },
42
- persistBundle: { outDir },
43
- }, (observeStep) => {
44
- for (const ev of events) {
45
- observeStep(ev);
46
- }
47
44
  });
45
+ for (const ev of events) {
46
+ gate.appendRunEvent(ev);
47
+ }
48
+ const result = await gate.evaluate();
48
49
  expect(result.steps.length).toBe(1);
49
50
  expect(result.steps[0].status).toBe("verified");
51
+ writeRunBundleFromDecisionGate({
52
+ outDir,
53
+ eventsNdjson: gate.toNdjsonUtf8(),
54
+ workflowResult: result,
55
+ });
50
56
  const loaded = loadCorpusRun(resolveCorpusRootReal(bundleParent), runId);
51
57
  expect(loaded.loadStatus).toBe("ok");
52
58
  const written = readFileSync(join(outDir, "events.ndjson"), "utf8").trim().split(/\r?\n/);
@@ -57,7 +63,7 @@ describe("withWorkflowVerification persistBundle", () => {
57
63
  rmSync(bundleParent, { recursive: true, force: true });
58
64
  }
59
65
  });
60
- it("persistBundle with ed25519PrivateKeyPemPath writes v2 bundle verifiable by verifyRunBundleSignature", async () => {
66
+ it("ed25519PrivateKeyPemPath writes v2 bundle verifiable by verifyRunBundleSignature", async () => {
61
67
  const eventsPath = join(root, "examples", "events.ndjson");
62
68
  const registryPath = join(root, "examples", "tools.json");
63
69
  const wfId = "wf_complete";
@@ -74,16 +80,22 @@ describe("withWorkflowVerification persistBundle", () => {
74
80
  writeFileSync(keyPath, privatePem, "utf8");
75
81
  writeFileSync(pubPath, normalizeSpkiPemForSidecar(publicPem), "utf8");
76
82
  try {
77
- await withWorkflowVerification({
83
+ const gate = createDecisionGate({
78
84
  workflowId: wfId,
79
85
  registryPath,
80
- dbPath,
86
+ databaseUrl: dbPath,
87
+ projectRoot: root,
81
88
  truthReport: () => { },
82
- persistBundle: { outDir, ed25519PrivateKeyPemPath: keyPath },
83
- }, (observeStep) => {
84
- for (const ev of events) {
85
- observeStep(ev);
86
- }
89
+ });
90
+ for (const ev of events) {
91
+ gate.appendRunEvent(ev);
92
+ }
93
+ const result = await gate.evaluate();
94
+ writeRunBundleFromDecisionGate({
95
+ outDir,
96
+ eventsNdjson: gate.toNdjsonUtf8(),
97
+ workflowResult: result,
98
+ ed25519PrivateKeyPemPath: keyPath,
87
99
  });
88
100
  const loaded = loadCorpusRun(resolveCorpusRootReal(bundleParent), runId);
89
101
  expect(loaded.loadStatus).toBe("ok");
@@ -101,4 +113,4 @@ describe("withWorkflowVerification persistBundle", () => {
101
113
  }
102
114
  });
103
115
  });
104
- //# sourceMappingURL=withWorkflowVerification.persistBundle.test.js.map
116
+ //# sourceMappingURL=decisionGate.persistBundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionGate.persistBundle.test.js","sourceRoot":"","sources":["../src/decisionGate.persistBundle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { OutcomeCertificateV1 } from "./outcomeCertificate.js";
2
+ import type { TrustDecision } from "./trustDecision.js";
3
+ export declare class DecisionUnsafeError extends Error {
4
+ readonly trustDecision: TrustDecision;
5
+ readonly certificate: OutcomeCertificateV1;
6
+ constructor(certificate: OutcomeCertificateV1, lines: string[]);
7
+ }
8
+ //# sourceMappingURL=decisionUnsafeError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionUnsafeError.d.ts","sourceRoot":"","sources":["../src/decisionUnsafeError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;gBAE/B,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE;CAM/D"}
@@ -0,0 +1,12 @@
1
+ import { trustDecisionFromCertificate } from "./trustDecision.js";
2
+ export class DecisionUnsafeError extends Error {
3
+ trustDecision;
4
+ certificate;
5
+ constructor(certificate, lines) {
6
+ super(lines.join("\n"));
7
+ this.name = "DecisionUnsafeError";
8
+ this.certificate = certificate;
9
+ this.trustDecision = trustDecisionFromCertificate(certificate);
10
+ }
11
+ }
12
+ //# sourceMappingURL=decisionUnsafeError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionUnsafeError.js","sourceRoot":"","sources":["../src/decisionUnsafeError.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,aAAa,CAAgB;IAC7B,WAAW,CAAuB;IAE3C,YAAY,WAAiC,EAAE,KAAe;QAC5D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;CACF"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "identityOneLiner": "State verification engine: read-only SQL checks that database state matches expectations from structured tool activity (not arbitrary logs)—not proof of execution",
3
+ "identityOneLiner": "Read-only checks at verify time—not color.",
4
4
  "llmBranch": "main",
5
5
  "links": {
6
6
  "site": "https://agentskeptic.com/",
@@ -11,110 +11,218 @@
11
11
  "repo": "https://github.com/jwekavanagh/agentskeptic",
12
12
  "npm": "https://www.npmjs.com/package/agentskeptic",
13
13
  "llmsRaw": "https://raw.githubusercontent.com/jwekavanagh/agentskeptic/refs/heads/main/llms.txt",
14
- "llmsBlob": "https://github.com/jwekavanagh/agentskeptic/blob/main/llms.txt"
14
+ "llmsBlob": "https://github.com/jwekavanagh/agentskeptic/blob/main/llms.txt",
15
+ "integratorVerificationSsotRaw": "https://raw.githubusercontent.com/jwekavanagh/agentskeptic/refs/heads/main/docs/integrator-verification.md"
15
16
  },
16
17
  "appendix": {
17
18
  "slug": "/database-truth-vs-traces",
18
- "visitorProblemAnswer": "Teams ship agent and automation workflows where traces, tool responses, and success flags look green while the database row is missing, stale, or wrong. AgentSkeptic compares structured tool activity to read-only SQL against your SQLite or Postgres at verification time and reports whether observed state matched expectations derived from what the workflow claimednot whether the step narrative read as successful.\n\nUse it when you need persisted rows checked against declared tool parameters before customer-facing actions, compliance evidence, or CI gates.",
19
+ "visitorProblemAnswer": "Traces say success. Your data often disagrees. Read-only checks at verify time compare tool claims to stored state—before you ship or bill.",
19
20
  "intentPhrases": [
20
- "green trace wrong database row agent workflow",
21
- "trace says success but CRM row missing",
22
- "read-only SQL check after LangGraph or automation run",
23
- "structured tool activity NDJSON verification",
24
- "ROW_ABSENT inconsistent workflow result"
21
+ "trace v data",
22
+ "read-only verify",
23
+ "ROW_ABSENT"
25
24
  ],
26
25
  "notFor": [
27
- "unstructured log search as verification",
28
- "proof that a specific HTTP request caused a write",
29
- "non-SQL systems without a queryable mirror"
26
+ "logs",
27
+ "HTTP proof",
28
+ "no store"
30
29
  ],
31
30
  "relatedQueries": [
32
- "green LangGraph trace postgres row missing",
33
- "how to verify AI agent wrote to postgres",
34
- "CI passed but database inconsistent side effect",
35
- "compare tool parameters to sql row verification",
36
- "agent run record workflow result json"
31
+ "langgraph",
32
+ "agent verify",
33
+ "trace data"
37
34
  ],
38
- "demandMoments": [
39
- "Green LangGraph or agent trace but wrong or missing Postgres row",
40
- "OpenAI-style tool loop reported success; CRM or SQLite state does not match",
41
- "CI passed on workflow logs; database side effect never showed up",
42
- "Need a gate before production: read-only verification, not more log volume",
43
- "Green dashboards still happen when an AI agent writes wrong CRM data and you need read-only SQL before you trust the row.",
44
- "When automation reports success while database records disagree with declared tool parameters until read-only verification, treat trace color as non-authoritative.",
45
- "Debugging Postgres after a LangGraph run requires row-level truth at verification time beyond trace completion flags alone for customer-facing data.",
46
- "When a Stripe webhook returns OK you still need the ledger database row to match before finance treats settlement as final and read-only SQL verifies persisted state.",
47
- "CI can stay green on workflow logs while the database side effect is missing until a read-only gate surfaces ROW_ABSENT before production."
35
+ "problemIndex": [
36
+ {
37
+ "moment": "Green trace, bad data",
38
+ "primaryRoute": "/guides/trace-green-postgres-row-missing",
39
+ "relatedRoutes": [
40
+ "/integrate",
41
+ "/database-truth-vs-traces"
42
+ ]
43
+ },
44
+ {
45
+ "moment": "Tool ok, CRM wrong",
46
+ "primaryRoute": "/guides/tool-loop-success-crm-state-wrong",
47
+ "relatedRoutes": [
48
+ "/integrate",
49
+ "/pricing"
50
+ ]
51
+ },
52
+ {
53
+ "moment": "CI green, no write",
54
+ "primaryRoute": "/guides/ci-green-logs-row-absent",
55
+ "relatedRoutes": [
56
+ "/guides/ci-green-missing-database-side-effect",
57
+ "/integrate"
58
+ ]
59
+ },
60
+ {
61
+ "moment": "Pre-prod read-only gate",
62
+ "primaryRoute": "/guides/pre-production-read-only-sql-gate",
63
+ "relatedRoutes": [
64
+ "/integrate",
65
+ "/pricing"
66
+ ]
67
+ },
68
+ {
69
+ "moment": "AI CRM data wrong",
70
+ "primaryRoute": "/guides/ai-agent-wrong-crm-data",
71
+ "relatedRoutes": [
72
+ "/database-truth-vs-traces"
73
+ ]
74
+ },
75
+ {
76
+ "moment": "Params vs store",
77
+ "primaryRoute": "/guides/automation-success-database-mismatch",
78
+ "relatedRoutes": [
79
+ "/integrate"
80
+ ]
81
+ },
82
+ {
83
+ "moment": "LangGraph data check",
84
+ "primaryRoute": "/guides/debug-postgres-after-langgraph",
85
+ "relatedRoutes": [
86
+ "/guides/verify-langgraph-workflows",
87
+ "/integrate"
88
+ ]
89
+ },
90
+ {
91
+ "moment": "Webhook vs ledger",
92
+ "primaryRoute": "/guides/stripe-webhook-database-alignment",
93
+ "relatedRoutes": [
94
+ "/pricing"
95
+ ]
96
+ },
97
+ {
98
+ "moment": "CI green, no effect",
99
+ "primaryRoute": "/guides/scenario-ci-green-side-effect-missing",
100
+ "relatedRoutes": [
101
+ "/guides/ci-green-missing-database-side-effect",
102
+ "/integrate"
103
+ ]
104
+ }
48
105
  ],
49
106
  "indexableGuides": [
50
107
  {
51
- "path": "/guides/verify-langgraph-workflows",
52
- "navLabel": "LangGraph workflows and your database",
53
- "problemAnchor": "LangGraph runs produce structured tool parameters; traces and success flags do not prove the Postgres or SQLite row exists with the values your graph implied at verification time."
108
+ "path": "/guides/ai-agent-wrong-crm-data",
109
+ "navLabel": "ai-agent-wrong-crm-data",
110
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/ai-agent-wrong-crm-data read-only SQL verification context."
54
111
  },
55
112
  {
56
- "path": "/guides/trace-green-postgres-row-missing",
57
- "navLabel": "Green trace, missing Postgres row",
58
- "problemAnchor": "Green LangGraph or agent trace but wrong or missing Postgres row"
113
+ "path": "/guides/automation-success-database-mismatch",
114
+ "navLabel": "automation-success-database-mismatch",
115
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/automation-success-database-mismatch read-only SQL verification context."
59
116
  },
60
117
  {
61
- "path": "/guides/tool-loop-success-crm-state-wrong",
62
- "navLabel": "Tool loop success, CRM state wrong",
63
- "problemAnchor": "OpenAI-style tool loop reported success; CRM or SQLite state does not match"
118
+ "path": "/guides/buyer-ci-enforcement-metering",
119
+ "navLabel": "buyer-ci-enforcement-metering",
120
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/buyer-ci-enforcement-metering read-only SQL verification context."
121
+ },
122
+ {
123
+ "path": "/guides/buyer-commercial-boundary",
124
+ "navLabel": "buyer-commercial-boundary",
125
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/buyer-commercial-boundary — read-only SQL verification context."
126
+ },
127
+ {
128
+ "path": "/guides/buyer-trust-production-implications",
129
+ "navLabel": "buyer-trust-production-implications",
130
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/buyer-trust-production-implications — read-only SQL verification context."
64
131
  },
65
132
  {
66
133
  "path": "/guides/ci-green-logs-row-absent",
67
- "navLabel": "CI green logs, row absent",
68
- "problemAnchor": "CI passed on workflow logs; database side effect never showed up"
134
+ "navLabel": "ci-green-logs-row-absent",
135
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/ci-green-logs-row-absent read-only SQL verification context."
136
+ },
137
+ {
138
+ "path": "/guides/ci-green-missing-database-side-effect",
139
+ "navLabel": "ci-green-missing-database-side-effect",
140
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/ci-green-missing-database-side-effect — read-only SQL verification context."
141
+ },
142
+ {
143
+ "path": "/guides/debug-postgres-after-langgraph",
144
+ "navLabel": "debug-postgres-after-langgraph",
145
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/debug-postgres-after-langgraph — read-only SQL verification context."
146
+ },
147
+ {
148
+ "path": "/guides/first-run-verification",
149
+ "navLabel": "first-run-verification",
150
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/first-run-verification — read-only SQL verification context."
69
151
  },
70
152
  {
71
153
  "path": "/guides/pre-production-read-only-sql-gate",
72
- "navLabel": "Pre-production read-only SQL gate",
73
- "problemAnchor": "Need a gate before production: read-only verification, not more log volume"
154
+ "navLabel": "pre-production-read-only-sql-gate",
155
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/pre-production-read-only-sql-gate read-only SQL verification context."
74
156
  },
75
157
  {
76
- "path": "/guides/ai-agent-wrong-crm-data",
77
- "navLabel": "AI agent wrong CRM data read-only check",
78
- "problemAnchor": "Green dashboards still happen when an AI agent writes wrong CRM data"
158
+ "path": "/guides/scenario-agent-crm-silent-drift",
159
+ "navLabel": "scenario-agent-crm-silent-drift",
160
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/scenario-agent-crm-silent-drift read-only SQL verification context."
79
161
  },
80
162
  {
81
- "path": "/guides/automation-success-database-mismatch",
82
- "navLabel": "Automation success vs database mismatch",
83
- "problemAnchor": "When automation reports success while database records disagree with declared tool parameters until read-only verification"
163
+ "path": "/guides/scenario-ci-green-side-effect-missing",
164
+ "navLabel": "scenario-ci-green-side-effect-missing",
165
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/scenario-ci-green-side-effect-missing read-only SQL verification context."
84
166
  },
85
167
  {
86
- "path": "/guides/debug-postgres-after-langgraph",
87
- "navLabel": "Debug Postgres after LangGraph runs",
88
- "problemAnchor": "Debugging Postgres after a LangGraph run requires row-level truth at verification time beyond trace completion flags alone"
168
+ "path": "/guides/scenario-green-trace-row-missing",
169
+ "navLabel": "scenario-green-trace-row-missing",
170
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/scenario-green-trace-row-missing read-only SQL verification context."
171
+ },
172
+ {
173
+ "path": "/guides/scenario-preprod-gate-before-ship",
174
+ "navLabel": "scenario-preprod-gate-before-ship",
175
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/scenario-preprod-gate-before-ship — read-only SQL verification context."
176
+ },
177
+ {
178
+ "path": "/guides/scenario-stripe-webhook-ledger-mismatch",
179
+ "navLabel": "scenario-stripe-webhook-ledger-mismatch",
180
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/scenario-stripe-webhook-ledger-mismatch — read-only SQL verification context."
89
181
  },
90
182
  {
91
183
  "path": "/guides/stripe-webhook-database-alignment",
92
- "navLabel": "Stripe webhook OK vs database alignment",
93
- "problemAnchor": "When a Stripe webhook returns OK you still need the ledger database row to match before finance treats settlement as final"
184
+ "navLabel": "stripe-webhook-database-alignment",
185
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/stripe-webhook-database-alignment read-only SQL verification context."
94
186
  },
95
187
  {
96
- "path": "/guides/ci-green-missing-database-side-effect",
97
- "navLabel": "CI green but missing database side effect",
98
- "problemAnchor": "CI can stay green on workflow logs while the database side effect is missing until a read-only gate surfaces ROW_ABSENT before production"
188
+ "path": "/guides/tool-loop-success-crm-state-wrong",
189
+ "navLabel": "tool-loop-success-crm-state-wrong",
190
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/tool-loop-success-crm-state-wrong read-only SQL verification context."
191
+ },
192
+ {
193
+ "path": "/guides/trace-green-postgres-row-missing",
194
+ "navLabel": "trace-green-postgres-row-missing",
195
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/trace-green-postgres-row-missing — read-only SQL verification context."
196
+ },
197
+ {
198
+ "path": "/guides/verify-langgraph-workflows",
199
+ "navLabel": "verify-langgraph-workflows",
200
+ "problemAnchor": "Markdown-backed discovery surface content for /guides/verify-langgraph-workflows — read-only SQL verification context."
99
201
  }
100
202
  ],
101
203
  "indexableExamples": [
204
+ {
205
+ "path": "/examples/langgraph-checkpoint-trust",
206
+ "navLabel": "langgraph-checkpoint-trust",
207
+ "problemAnchor": "Markdown-backed discovery surface content for /examples/langgraph-checkpoint-trust — read-only SQL verification context.",
208
+ "embedKey": "langgraph_checkpoint_trust"
209
+ },
102
210
  {
103
211
  "path": "/examples/wf-complete",
104
- "navLabel": "Bundled verified workflow (wf_complete)",
105
- "problemAnchor": "Bundled wf_complete demo: read-only SQL matched the expected contacts row under the packaged registry at verification time.",
212
+ "navLabel": "wf-complete",
213
+ "problemAnchor": "Markdown-backed discovery surface content for /examples/wf-complete read-only SQL verification context.",
106
214
  "embedKey": "wf_complete"
107
215
  },
108
216
  {
109
217
  "path": "/examples/wf-missing",
110
- "navLabel": "Bundled inconsistent workflow (wf_missing)",
111
- "problemAnchor": "Bundled wf_missing demo: ROW_ABSENT when structured tool activity implied a row read-only SQL did not find at verification time.",
218
+ "navLabel": "wf-missing",
219
+ "problemAnchor": "Markdown-backed discovery surface content for /examples/wf-missing read-only SQL verification context.",
112
220
  "embedKey": "wf_missing"
113
221
  }
114
222
  ],
115
223
  "shareableTerminalDemo": {
116
- "title": "Pasteable terminal proof (bundled demo)",
117
- "transcript": "### Success (`wf_complete`)\n\nworkflow_id: wf_complete\nworkflow_status: complete\ntrust: TRUSTED: Every step matched the database under the configured verification rules.\nsteps:\n - seq=0 tool=crm.upsert_contact result=Matched the database.\n\n{\n \"schemaVersion\": 15,\n \"workflowId\": \"wf_complete\",\n \"status\": \"complete\",\n \"steps\": [{ \"seq\": 0, \"toolId\": \"crm.upsert_contact\", \"status\": \"verified\" }]\n}\n\n### Failure (`wf_missing`)\n\nworkflow_id: wf_missing\nworkflow_status: inconsistent\nsteps:\n - seq=0 tool=crm.upsert_contact result=Expected row is missing from the database (the log implies a write that is not present).\n reference_code: ROW_ABSENT\n\n{\n \"schemaVersion\": 15,\n \"workflowId\": \"wf_missing\",\n \"status\": \"inconsistent\",\n \"steps\": [\n {\n \"seq\": 0,\n \"toolId\": \"crm.upsert_contact\",\n \"status\": \"missing\",\n \"reasons\": [{ \"code\": \"ROW_ABSENT\" }]\n }\n ]\n}"
224
+ "title": "Bundled terminal proof",
225
+ "transcript": "### Success (`wf_complete`)\n\nworkflow_id: wf_complete\nworkflow_status: complete\ntrust: TRUSTED: Every step matched the database under the configured verification rules.\nsteps:\n - seq=0 tool=crm.upsert_contact result=Matched the database.\n\n{\n \"schemaVersion\": 15,\n \"workflowId\": \"wf_complete\",\n \"status\": \"complete\",\n \"steps\": [{ \"seq\": 0, \"toolId\": \"crm.upsert_contact\", \"status\": \"verified\" }]\n}\n\n### Failure (`wf_missing`)\n\nworkflow_id: wf_missing\nworkflow_status: inconsistent\nsteps:\n - seq=0 tool=crm.upsert_contact result:Expected row is missing from the database (the log implies a write that is not present).\n reference_code: ROW_ABSENT\n\n{\n \"schemaVersion\": 15,\n \"workflowId\": \"wf_missing\",\n \"status\": \"inconsistent\",\n \"steps\": [\n {\n \"seq\": 0,\n \"toolId\": \"crm.upsert_contact\",\n \"status\": \"missing\",\n \"reasons\": [{ \"code\": \"ROW_ABSENT\" }]\n }\n ]\n}"
118
226
  }
119
227
  }
120
228
  }