agentskeptic 3.3.3 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/cli/lockOrchestration.test.js +3 -0
  2. package/dist/cli/lockOrchestration.test.js.map +1 -1
  3. package/dist/cli.js +195 -18
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cliArgv.d.ts +6 -0
  6. package/dist/cliArgv.d.ts.map +1 -1
  7. package/dist/cliArgv.js +9 -0
  8. package/dist/cliArgv.js.map +1 -1
  9. package/dist/cliExecutionFinalize.d.ts +43 -0
  10. package/dist/cliExecutionFinalize.d.ts.map +1 -0
  11. package/dist/cliExecutionFinalize.js +149 -0
  12. package/dist/cliExecutionFinalize.js.map +1 -0
  13. package/dist/cliOperationalCodes.d.ts +4 -0
  14. package/dist/cliOperationalCodes.d.ts.map +1 -1
  15. package/dist/cliOperationalCodes.js +4 -0
  16. package/dist/cliOperationalCodes.js.map +1 -1
  17. package/dist/decisionEvidenceBundle/completeness.d.ts +26 -0
  18. package/dist/decisionEvidenceBundle/completeness.d.ts.map +1 -0
  19. package/dist/decisionEvidenceBundle/completeness.js +36 -0
  20. package/dist/decisionEvidenceBundle/completeness.js.map +1 -0
  21. package/dist/decisionEvidenceBundle/constants.d.ts +9 -0
  22. package/dist/decisionEvidenceBundle/constants.d.ts.map +1 -0
  23. package/dist/decisionEvidenceBundle/constants.js +9 -0
  24. package/dist/decisionEvidenceBundle/constants.js.map +1 -0
  25. package/dist/decisionEvidenceBundle/exitCode.d.ts +4 -0
  26. package/dist/decisionEvidenceBundle/exitCode.d.ts.map +1 -0
  27. package/dist/decisionEvidenceBundle/exitCode.js +9 -0
  28. package/dist/decisionEvidenceBundle/exitCode.js.map +1 -0
  29. package/dist/decisionEvidenceBundle/index.d.ts +6 -0
  30. package/dist/decisionEvidenceBundle/index.d.ts.map +1 -0
  31. package/dist/decisionEvidenceBundle/index.js +6 -0
  32. package/dist/decisionEvidenceBundle/index.js.map +1 -0
  33. package/dist/decisionEvidenceBundle/validateDecisionEvidenceBundle.d.ts +24 -0
  34. package/dist/decisionEvidenceBundle/validateDecisionEvidenceBundle.d.ts.map +1 -0
  35. package/dist/decisionEvidenceBundle/validateDecisionEvidenceBundle.js +162 -0
  36. package/dist/decisionEvidenceBundle/validateDecisionEvidenceBundle.js.map +1 -0
  37. package/dist/decisionEvidenceBundle/writeDecisionEvidenceBundle.d.ts +21 -0
  38. package/dist/decisionEvidenceBundle/writeDecisionEvidenceBundle.d.ts.map +1 -0
  39. package/dist/decisionEvidenceBundle/writeDecisionEvidenceBundle.js +88 -0
  40. package/dist/decisionEvidenceBundle/writeDecisionEvidenceBundle.js.map +1 -0
  41. package/dist/decisionEvidenceBundle.test.d.ts +2 -0
  42. package/dist/decisionEvidenceBundle.test.d.ts.map +1 -0
  43. package/dist/decisionEvidenceBundle.test.js +59 -0
  44. package/dist/decisionEvidenceBundle.test.js.map +1 -0
  45. package/dist/decisionEvidenceHumanLayer.d.ts +23 -0
  46. package/dist/decisionEvidenceHumanLayer.d.ts.map +1 -0
  47. package/dist/decisionEvidenceHumanLayer.js +23 -0
  48. package/dist/decisionEvidenceHumanLayer.js.map +1 -0
  49. package/dist/enforceCli.d.ts.map +1 -1
  50. package/dist/enforceCli.js +22 -3
  51. package/dist/enforceCli.js.map +1 -1
  52. package/dist/enforceStateful.d.ts.map +1 -1
  53. package/dist/enforceStateful.js +150 -97
  54. package/dist/enforceStateful.js.map +1 -1
  55. package/dist/execution-identity.v1.json +14 -0
  56. package/dist/executionIdentityVerifyCli.d.ts +7 -0
  57. package/dist/executionIdentityVerifyCli.d.ts.map +1 -0
  58. package/dist/executionIdentityVerifyCli.js +84 -0
  59. package/dist/executionIdentityVerifyCli.js.map +1 -0
  60. package/dist/mergeGateReceiptFinalize.d.ts +16 -0
  61. package/dist/mergeGateReceiptFinalize.d.ts.map +1 -0
  62. package/dist/mergeGateReceiptFinalize.js +40 -0
  63. package/dist/mergeGateReceiptFinalize.js.map +1 -0
  64. package/dist/operationalDisposition.d.ts +32 -0
  65. package/dist/operationalDisposition.d.ts.map +1 -1
  66. package/dist/operationalDisposition.js +32 -0
  67. package/dist/operationalDisposition.js.map +1 -1
  68. package/dist/publicDistribution.generated.d.ts +1 -1
  69. package/dist/publicDistribution.generated.js +1 -1
  70. package/dist/schemaLoad.d.ts +1 -1
  71. package/dist/schemaLoad.d.ts.map +1 -1
  72. package/dist/schemaLoad.js +12 -0
  73. package/dist/schemaLoad.js.map +1 -1
  74. package/dist/standardVerifyWorkflowCli.d.ts +2 -0
  75. package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
  76. package/dist/standardVerifyWorkflowCli.js +5 -2
  77. package/dist/standardVerifyWorkflowCli.js.map +1 -1
  78. package/dist/verificationReceipt.d.ts +44 -0
  79. package/dist/verificationReceipt.d.ts.map +1 -0
  80. package/dist/verificationReceipt.js +131 -0
  81. package/dist/verificationReceipt.js.map +1 -0
  82. package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
  83. package/dist/verify/batchVerifyTelemetrySubcommand.js +115 -17
  84. package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
  85. package/package.json +6 -4
  86. package/schemas/agentskeptic-error-codes.json +28 -0
  87. package/schemas/ci/verification-truth.manifest.json +30 -1
  88. package/schemas/ci/verification-truth.manifest.schema.json +6 -1
  89. package/schemas/decision-bundle-validation-v1.schema.json +50 -0
  90. package/schemas/decision-evidence-attestation-v1.schema.json +19 -0
  91. package/schemas/decision-evidence-bundle-manifest-v1.schema.json +51 -0
  92. package/schemas/decision-evidence-exit-v1.schema.json +13 -0
  93. package/schemas/decision-evidence-human-layer-v1.schema.json +27 -0
  94. package/schemas/decision-evidence-next-action-v1.schema.json +14 -0
  95. package/schemas/execution-identity-v1.schema.json +36 -0
  96. package/schemas/openapi-commercial-v1.yaml +1 -1
  97. package/schemas/verification-receipt-v1.schema.json +108 -0
  98. package/scripts/emit-primary-marketing.cjs +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDecisionEvidenceBundle.js","sourceRoot":"","sources":["../../src/decisionEvidenceBundle/validateDecisionEvidenceBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAkBjE,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,SAAiB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAA6C,EAAE,CAAC;IAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAEvE,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI;QACvB,CAAC,0BAA0B,EAAE,MAAM,CAAC;QACpC,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvB,CAAC,kBAAkB,EAAE,MAAM,CAAC;QAC5B,CAAC,eAAe,EAAE,YAAY,CAAC;KACvB,EAAE,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,KAAK,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,WAAW,GAAgC,IAAI,CAAC;IACpD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;YACxD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,IAAI,CAAC;gBACxB,WAAW,GAAG,MAAM,CAAC,KAA6B,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,2BAA2B,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,kCAAkC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,kCAAkC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,kCAAkC,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GACpB,UAAU,CAAC,MAAM,CAAC;QAClB,UAAU,CAAC,QAAQ,CAAC;QACpB,UAAU,CAAC,MAAM,CAAC;QAClB,UAAU,CAAC,YAAY,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,4BAA4B,CAAC;QAC5C,gBAAgB;QAChB,gBAAgB;QAChB,WAAW;QACX,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,aAAa,EAAE,CAAC;YAChB,IAAI,EAAE,4BAA4B;YAClC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE;gBACZ,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;aAC9B;YACD,MAAM,EAAE,gBAAgB;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE,4BAA4B;QAClC,MAAM;QACN,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE;YACZ,MAAM;YACN,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;QACD,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkC;IACvE,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { OutcomeCertificateV1 } from "../outcomeCertificate.js";
2
+ import { type DecisionEvidenceCompleteness } from "./completeness.js";
3
+ export type WriteDecisionEvidenceBundleOptions = {
4
+ outDir: string;
5
+ certificate: OutcomeCertificateV1;
6
+ noHumanReport: boolean;
7
+ runId?: string;
8
+ producer?: {
9
+ name: string;
10
+ version: string;
11
+ };
12
+ /** Validated against decision-evidence-attestation-v1 when present. */
13
+ attestation?: unknown;
14
+ /** Validated against decision-evidence-next-action-v1 when present. */
15
+ nextAction?: unknown;
16
+ };
17
+ /**
18
+ * Writes Decision Evidence Bundle: outcome-certificate, exit, human-layer, optional attestation/next-action, manifest last.
19
+ */
20
+ export declare function writeDecisionEvidenceBundle(options: WriteDecisionEvidenceBundleOptions): DecisionEvidenceCompleteness;
21
+ //# sourceMappingURL=writeDecisionEvidenceBundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeDecisionEvidenceBundle.d.ts","sourceRoot":"","sources":["../../src/decisionEvidenceBundle/writeDecisionEvidenceBundle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAOrE,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,mBAAmB,CAAC;AAW3B,MAAM,MAAM,kCAAkC,GAAG;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,oBAAoB,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAYF;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kCAAkC,GAAG,4BAA4B,CA8ErH"}
@@ -0,0 +1,88 @@
1
+ import { mkdirSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { atomicWriteUtf8File } from "../quickVerify/atomicWrite.js";
5
+ import { loadSchemaValidator } from "../schemaLoad.js";
6
+ import { TruthLayerError } from "../truthLayerError.js";
7
+ import { CLI_OPERATIONAL_CODES, formatOperationalMessage } from "../failureCatalog.js";
8
+ import { buildHumanLayerFileJson } from "../decisionEvidenceHumanLayer.js";
9
+ import { DECISION_EVIDENCE_FILES } from "./constants.js";
10
+ import { exitCodeFromOutcomeCertificate } from "./exitCode.js";
11
+ import { computeCompletenessFromParts, } from "./completeness.js";
12
+ function readPackageIdentity() {
13
+ const pkgPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json");
14
+ const raw = readFileSync(pkgPath, "utf8");
15
+ const pkg = JSON.parse(raw);
16
+ const name = typeof pkg.name === "string" && pkg.name.length > 0 ? pkg.name : "agentskeptic";
17
+ const version = typeof pkg.version === "string" && pkg.version.length > 0 ? pkg.version : "0.0.0";
18
+ return { name, version };
19
+ }
20
+ function validateOptional(schemaName, label, value) {
21
+ const v = loadSchemaValidator(schemaName);
22
+ if (!v(value)) {
23
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, formatOperationalMessage(`${label}: ${JSON.stringify(v.errors ?? [])}`));
24
+ }
25
+ }
26
+ /**
27
+ * Writes Decision Evidence Bundle: outcome-certificate, exit, human-layer, optional attestation/next-action, manifest last.
28
+ */
29
+ export function writeDecisionEvidenceBundle(options) {
30
+ const resolved = path.resolve(options.outDir);
31
+ mkdirSync(resolved, { recursive: true });
32
+ const validateCert = loadSchemaValidator("outcome-certificate-v1");
33
+ if (!validateCert(options.certificate)) {
34
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(`writeDecisionEvidenceBundle: certificate invalid ${JSON.stringify(validateCert.errors ?? [])}`));
35
+ }
36
+ if (options.attestation !== undefined) {
37
+ validateOptional("decision-evidence-attestation-v1", "decision attestation", options.attestation);
38
+ }
39
+ if (options.nextAction !== undefined) {
40
+ validateOptional("decision-evidence-next-action-v1", "decision next-action", options.nextAction);
41
+ }
42
+ const outcomeUtf8 = `${JSON.stringify(options.certificate)}\n`;
43
+ const exitPayload = {
44
+ schemaVersion: 1,
45
+ exitCode: exitCodeFromOutcomeCertificate(options.certificate),
46
+ cliConvention: "outcome_certificate_v1",
47
+ };
48
+ validateOptional("decision-evidence-exit-v1", "exit", exitPayload);
49
+ const exitUtf8 = `${JSON.stringify(exitPayload)}\n`;
50
+ const humanLayer = buildHumanLayerFileJson(options.certificate, options.noHumanReport);
51
+ validateOptional("decision-evidence-human-layer-v1", "human-layer", humanLayer);
52
+ const humanUtf8 = `${JSON.stringify(humanLayer)}\n`;
53
+ const producer = options.producer ?? readPackageIdentity();
54
+ const a4Present = options.attestation !== undefined;
55
+ const a5Present = options.nextAction !== undefined;
56
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.outcomeCertificate), outcomeUtf8);
57
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.exit), exitUtf8);
58
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.humanLayer), humanUtf8);
59
+ if (options.attestation !== undefined) {
60
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.attestation), `${JSON.stringify(options.attestation)}\n`);
61
+ }
62
+ if (options.nextAction !== undefined) {
63
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.nextAction), `${JSON.stringify(options.nextAction)}\n`);
64
+ }
65
+ const computed = computeCompletenessFromParts({
66
+ certificateValid: true,
67
+ coreFilesPresent: true,
68
+ certificate: options.certificate,
69
+ a4Present,
70
+ a5Present,
71
+ });
72
+ const manifestPayload = {
73
+ schemaVersion: 1,
74
+ bundleKind: "decision_evidence",
75
+ producer,
76
+ createdAt: new Date().toISOString(),
77
+ workflowId: options.certificate.workflowId,
78
+ ...(options.runId !== undefined ? { runId: options.runId } : {}),
79
+ completeness: {
80
+ status: computed.status,
81
+ artifacts: computed.artifacts,
82
+ },
83
+ };
84
+ validateOptional("decision-evidence-bundle-manifest-v1", "manifest", manifestPayload);
85
+ atomicWriteUtf8File(path.join(resolved, DECISION_EVIDENCE_FILES.manifest), `${JSON.stringify(manifestPayload)}\n`);
86
+ return computed;
87
+ }
88
+ //# sourceMappingURL=writeDecisionEvidenceBundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeDecisionEvidenceBundle.js","sourceRoot":"","sources":["../../src/decisionEvidenceBundle/writeDecisionEvidenceBundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decisionEvidenceBundle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionEvidenceBundle.test.d.ts","sourceRoot":"","sources":["../src/decisionEvidenceBundle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mkdirSync, rmSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { writeDecisionEvidenceBundle } from "./decisionEvidenceBundle/writeDecisionEvidenceBundle.js";
5
+ import { formatValidationStdout, validateDecisionEvidenceBundle, } from "./decisionEvidenceBundle/validateDecisionEvidenceBundle.js";
6
+ function minimalCertificate(stateRelation) {
7
+ return {
8
+ schemaVersion: 1,
9
+ workflowId: "wf_test",
10
+ runKind: "contract_sql",
11
+ stateRelation,
12
+ highStakesReliance: stateRelation === "matches_expectations" ? "permitted" : "prohibited",
13
+ relianceRationale: "r",
14
+ intentSummary: "s",
15
+ explanation: { headline: "h", details: [] },
16
+ steps: [],
17
+ humanReport: "human",
18
+ };
19
+ }
20
+ describe("decisionEvidenceBundle", () => {
21
+ it("validate fails partial when A5 required and missing", () => {
22
+ const dir = path.join(process.cwd(), `tmp-de-bundle-${Date.now()}`);
23
+ mkdirSync(dir, { recursive: true });
24
+ try {
25
+ writeDecisionEvidenceBundle({
26
+ outDir: dir,
27
+ certificate: minimalCertificate("does_not_match"),
28
+ noHumanReport: false,
29
+ runId: "run-1",
30
+ });
31
+ const line = validateDecisionEvidenceBundle(dir);
32
+ expect(line.status).toBe("partial");
33
+ expect(line.errors.some((e) => e.code === "A5_REQUIRED_MISSING")).toBe(true);
34
+ expect(JSON.parse(formatValidationStdout(line)).schemaVersion).toBe(1);
35
+ }
36
+ finally {
37
+ rmSync(dir, { recursive: true, force: true });
38
+ }
39
+ });
40
+ it("validate complete for matches_expectations without next-action", () => {
41
+ const dir = path.join(process.cwd(), `tmp-de-bundle-${Date.now()}`);
42
+ mkdirSync(dir, { recursive: true });
43
+ try {
44
+ writeDecisionEvidenceBundle({
45
+ outDir: dir,
46
+ certificate: minimalCertificate("matches_expectations"),
47
+ noHumanReport: false,
48
+ runId: "run-2",
49
+ });
50
+ const line = validateDecisionEvidenceBundle(dir);
51
+ expect(line.status).toBe("complete");
52
+ expect(line.errors).toHaveLength(0);
53
+ }
54
+ finally {
55
+ rmSync(dir, { recursive: true, force: true });
56
+ }
57
+ });
58
+ });
59
+ //# sourceMappingURL=decisionEvidenceBundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionEvidenceBundle.test.js","sourceRoot":"","sources":["../src/decisionEvidenceBundle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { OutcomeCertificateV1 } from "./outcomeCertificate.js";
2
+ export type HumanLayerFileV1 = {
3
+ schemaVersion: 1;
4
+ kind: "report";
5
+ text: string;
6
+ } | {
7
+ schemaVersion: 1;
8
+ kind: "suppressed";
9
+ reason: "no_human_report";
10
+ };
11
+ /**
12
+ * Canonical JSON for human-layer.json (A3).
13
+ */
14
+ export declare function buildHumanLayerFileJson(certificate: OutcomeCertificateV1, noHumanReport: boolean): HumanLayerFileV1;
15
+ /**
16
+ * Batch/contract verify: stderr bytes used with `process.stderr.write`. Ends with newline after footer.
17
+ */
18
+ export declare function formatContractVerifyStderrForStderrWrite(certificate: OutcomeCertificateV1): string;
19
+ /**
20
+ * Batch/contract verify: single line passed to `console.error` / `stderrLine` (no trailing newline after footer block; Node adds one).
21
+ */
22
+ export declare function formatContractVerifyStderrForStderrLine(certificate: OutcomeCertificateV1): string;
23
+ //# sourceMappingURL=decisionEvidenceHumanLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionEvidenceHumanLayer.d.ts","sourceRoot":"","sources":["../src/decisionEvidenceHumanLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GACxB;IAAE,aAAa,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,aAAa,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAExE;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,oBAAoB,EACjC,aAAa,EAAE,OAAO,GACrB,gBAAgB,CAKlB;AAED;;GAEG;AACH,wBAAgB,wCAAwC,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,CAElG;AAED;;GAEG;AACH,wBAAgB,uCAAuC,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,CAEjG"}
@@ -0,0 +1,23 @@
1
+ import { formatDistributionFooter } from "./distributionFooter.js";
2
+ /**
3
+ * Canonical JSON for human-layer.json (A3).
4
+ */
5
+ export function buildHumanLayerFileJson(certificate, noHumanReport) {
6
+ if (noHumanReport) {
7
+ return { schemaVersion: 1, kind: "suppressed", reason: "no_human_report" };
8
+ }
9
+ return { schemaVersion: 1, kind: "report", text: certificate.humanReport };
10
+ }
11
+ /**
12
+ * Batch/contract verify: stderr bytes used with `process.stderr.write`. Ends with newline after footer.
13
+ */
14
+ export function formatContractVerifyStderrForStderrWrite(certificate) {
15
+ return `${certificate.humanReport}\n${formatDistributionFooter()}\n`;
16
+ }
17
+ /**
18
+ * Batch/contract verify: single line passed to `console.error` / `stderrLine` (no trailing newline after footer block; Node adds one).
19
+ */
20
+ export function formatContractVerifyStderrForStderrLine(certificate) {
21
+ return `${certificate.humanReport}\n${formatDistributionFooter()}`;
22
+ }
23
+ //# sourceMappingURL=decisionEvidenceHumanLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionEvidenceHumanLayer.js","sourceRoot":"","sources":["../src/decisionEvidenceHumanLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOnE;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAiC,EACjC,aAAsB;IAEtB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wCAAwC,CAAC,WAAiC;IACxF,OAAO,GAAG,WAAW,CAAC,WAAW,KAAK,wBAAwB,EAAE,IAAI,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uCAAuC,CAAC,WAAiC;IACvF,OAAO,GAAG,WAAW,CAAC,WAAW,KAAK,wBAAwB,EAAE,EAAE,CAAC;AACrE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"enforceCli.d.ts","sourceRoot":"","sources":["../src/enforceCli.ts"],"names":[],"mappings":"AASA,wFAAwF;AACxF,eAAO,MAAM,wBAAwB,wXACkV,CAAC;AAuBxX,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9D"}
1
+ {"version":3,"file":"enforceCli.d.ts","sourceRoot":"","sources":["../src/enforceCli.ts"],"names":[],"mappings":"AAUA,wFAAwF;AACxF,eAAO,MAAM,wBAAwB,wXACkV,CAAC;AAuBxX,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC9D"}
@@ -1,6 +1,7 @@
1
1
  import { CLI_OPERATIONAL_CODES, cliErrorEnvelope, formatOperationalMessage, } from "./failureCatalog.js";
2
2
  import { TruthLayerError } from "./truthLayerError.js";
3
3
  import { LICENSE_PREFLIGHT_ENABLED } from "./generated/commercialBuildFlags.js";
4
+ import { exitAfterEnforceCliReceipt } from "./cliExecutionFinalize.js";
4
5
  import { runStatefulEnforce } from "./enforceStateful.js";
5
6
  /** User-facing message for OSS builds when `enforce` is invoked; exported for tests. */
6
7
  export const ENFORCE_OSS_GATE_MESSAGE = "The OSS build cannot run agentskeptic enforce (CI lock gating). Install the published npm package agentskeptic, set AGENTSKEPTIC_API_KEY (legacy WORKFLOW_VERIFIER_API_KEY accepted), and point COMMERCIAL_LICENSE_API_BASE_URL at your license server; or run npm run build:commercial with COMMERCIAL_LICENSE_API_BASE_URL set. Policy: docs/commercial-enforce-gate-normative.md";
@@ -30,7 +31,13 @@ export async function runEnforce(args) {
30
31
  }
31
32
  if (!LICENSE_PREFLIGHT_ENABLED) {
32
33
  writeCliError(CLI_OPERATIONAL_CODES.ENFORCE_REQUIRES_COMMERCIAL_BUILD, ENFORCE_OSS_GATE_MESSAGE);
33
- process.exit(3);
34
+ exitAfterEnforceCliReceipt({
35
+ parsedBatch: null,
36
+ quick: null,
37
+ exitCode: 3,
38
+ operationalCode: CLI_OPERATIONAL_CODES.ENFORCE_REQUIRES_COMMERCIAL_BUILD,
39
+ certificate: null,
40
+ });
34
41
  }
35
42
  try {
36
43
  await runStatefulEnforce(args);
@@ -38,11 +45,23 @@ export async function runEnforce(args) {
38
45
  catch (e) {
39
46
  if (e instanceof TruthLayerError) {
40
47
  writeCliError(e.code, e.message);
41
- process.exit(3);
48
+ exitAfterEnforceCliReceipt({
49
+ parsedBatch: null,
50
+ quick: null,
51
+ exitCode: 3,
52
+ operationalCode: e.code,
53
+ certificate: null,
54
+ });
42
55
  }
43
56
  const msg = e instanceof Error ? e.message : String(e);
44
57
  writeCliError(CLI_OPERATIONAL_CODES.INTERNAL_ERROR, formatOperationalMessage(msg));
45
- process.exit(3);
58
+ exitAfterEnforceCliReceipt({
59
+ parsedBatch: null,
60
+ quick: null,
61
+ exitCode: 3,
62
+ operationalCode: CLI_OPERATIONAL_CODES.INTERNAL_ERROR,
63
+ certificate: null,
64
+ });
46
65
  }
47
66
  }
48
67
  //# sourceMappingURL=enforceCli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enforceCli.js","sourceRoot":"","sources":["../src/enforceCli.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wFAAwF;AACxF,MAAM,CAAC,MAAM,wBAAwB,GACnC,qXAAqX,CAAC;AAExX,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe;IAClD,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;;;;;;;;4CAamC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,aAAa,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,wBAAwB,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;YACjC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,qBAAqB,CAAC,cAAc,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"enforceCli.js","sourceRoot":"","sources":["../src/enforceCli.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wFAAwF;AACxF,MAAM,CAAC,MAAM,wBAAwB,GACnC,qXAAqX,CAAC;AAExX,SAAS,aAAa,CAAC,IAAY,EAAE,OAAe;IAClD,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;;;;;;;;;;;;;4CAamC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC/B,aAAa,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,wBAAwB,CAAC,CAAC;QACjG,0BAA0B,CAAC;YACzB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,qBAAqB,CAAC,iCAAiC;YACxE,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;YACjC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACjC,0BAA0B,CAAC;gBACzB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,CAAC;gBACX,eAAe,EAAE,CAAC,CAAC,IAAI;gBACvB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,qBAAqB,CAAC,cAAc,EAAE,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,0BAA0B,CAAC;YACzB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,qBAAqB,CAAC,cAAc;YACrD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"enforceStateful.d.ts","sourceRoot":"","sources":["../src/enforceStateful.ts"],"names":[],"mappings":"AAuDA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGtE"}
1
+ {"version":3,"file":"enforceStateful.d.ts","sourceRoot":"","sources":["../src/enforceStateful.ts"],"names":[],"mappings":"AAgEA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JtE"}
@@ -1,16 +1,17 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { CLI_OPERATIONAL_CODES } from "./cliOperationalCodes.js";
3
2
  import { parseBatchVerifyCliArgs, parseQuickCliArgs } from "./cliArgv.js";
4
- import { verifyWorkflow } from "./pipeline.js";
5
- import { runBatchVerifyToValidatedResult } from "./standardVerifyWorkflowCli.js";
6
- import { TruthLayerError } from "./truthLayerError.js";
3
+ import { CLI_OPERATIONAL_CODES } from "./cliOperationalCodes.js";
4
+ import { exitAfterEnforceCliReceipt } from "./cliExecutionFinalize.js";
5
+ import { cliErrorEnvelope, formatOperationalMessage } from "./failureCatalog.js";
6
+ import { canonicalCertificateSha256, materialTruthSha256 } from "./governanceEvidence.js";
7
+ import { buildOutcomeCertificateFromQuickReport, buildOutcomeCertificateFromWorkflowResult, } from "./outcomeCertificate.js";
7
8
  import { stableStringify } from "./jsonStableStringify.js";
8
9
  import { runLicensePreflightIfNeeded } from "./commercial/licensePreflight.js";
9
- import { cliErrorEnvelope } from "./failureCatalog.js";
10
- import { postEnforcementJson } from "./sdk/transport.js";
11
- import { buildOutcomeCertificateFromQuickReport, buildOutcomeCertificateFromWorkflowResult } from "./outcomeCertificate.js";
10
+ import { verifyWorkflow } from "./pipeline.js";
12
11
  import { runQuickVerifyToValidatedReport } from "./quickVerify/runQuickVerify.js";
13
- import { canonicalCertificateSha256, materialTruthSha256 } from "./governanceEvidence.js";
12
+ import { postEnforcementJson } from "./sdk/transport.js";
13
+ import { runBatchVerifyToValidatedResult } from "./standardVerifyWorkflowCli.js";
14
+ import { TruthLayerError } from "./truthLayerError.js";
14
15
  function parseEnforceMode(args) {
15
16
  const hasCreate = args.includes("--create-baseline");
16
17
  const hasAccept = args.includes("--accept-drift");
@@ -27,8 +28,7 @@ function stripEnforceModeArgs(args) {
27
28
  return args.filter((a) => a !== "--create-baseline" && a !== "--accept-drift");
28
29
  }
29
30
  function apiKeyOrThrow() {
30
- const apiKey = process.env.AGENTSKEPTIC_API_KEY?.trim() ||
31
- process.env.WORKFLOW_VERIFIER_API_KEY?.trim();
31
+ const apiKey = process.env.AGENTSKEPTIC_API_KEY?.trim() || process.env.WORKFLOW_VERIFIER_API_KEY?.trim();
32
32
  if (!apiKey) {
33
33
  throw new TruthLayerError(CLI_OPERATIONAL_CODES.LICENSE_KEY_MISSING, "Commercial agentskeptic enforce requires AGENTSKEPTIC_API_KEY.");
34
34
  }
@@ -38,96 +38,149 @@ async function postEnforcementState(path, payload) {
38
38
  const apiKey = apiKeyOrThrow();
39
39
  return postEnforcementJson({ path, payload, apiKey });
40
40
  }
41
+ function writeOperationalErr(code, message) {
42
+ console.error(cliErrorEnvelope(code, formatOperationalMessage(message)));
43
+ }
41
44
  export async function runStatefulEnforce(args) {
42
- const mode = parseEnforceMode(args);
43
- const stripped = stripEnforceModeArgs(args);
44
- const isQuick = stripped.includes("--input") || stripped.includes("--export-registry") || stripped.includes("--emit-events");
45
- const runId = process.env.AGENTSKEPTIC_RUN_ID?.trim() ||
46
- process.env.WORKFLOW_VERIFIER_RUN_ID?.trim() ||
47
- randomUUID();
48
- await runLicensePreflightIfNeeded("enforce", { runId, xRequestId: randomUUID() });
49
- let terminalStatus;
50
- let workflowId;
51
- let certificate;
52
- if (isQuick) {
53
- const pq = parseQuickCliArgs(stripped);
54
- const out = await runQuickVerifyToValidatedReport({
55
- inputUtf8: pq.inputPath === "-" ? await new Promise((resolve, reject) => {
56
- let s = "";
57
- process.stdin.setEncoding("utf8");
58
- process.stdin.on("data", (d) => {
59
- s += d;
60
- });
61
- process.stdin.on("end", () => resolve(s));
62
- process.stdin.on("error", reject);
63
- }) : await import("node:fs/promises").then((m) => m.readFile(pq.inputPath, "utf8")),
64
- postgresUrl: pq.postgresUrl ?? undefined,
65
- sqlitePath: pq.dbPath ?? undefined,
66
- });
67
- workflowId = pq.workflowIdQuick;
68
- certificate = buildOutcomeCertificateFromQuickReport({
69
- report: out.report,
70
- workflowId: pq.workflowIdQuick,
71
- humanReportOptions: {
72
- workflowId: pq.workflowIdQuick,
73
- eventsPath: pq.emitEventsPath ?? undefined,
74
- registryPath: pq.exportPath,
75
- dbFlag: pq.dbPath ?? undefined,
76
- postgresUrl: pq.postgresUrl !== undefined,
77
- },
45
+ let parsedBatch = null;
46
+ let pq = null;
47
+ let certificate = null;
48
+ try {
49
+ const mode = parseEnforceMode(args);
50
+ const stripped = stripEnforceModeArgs(args);
51
+ const isQuick = stripped.includes("--input") ||
52
+ stripped.includes("--export-registry") ||
53
+ stripped.includes("--emit-events");
54
+ const runId = process.env.AGENTSKEPTIC_RUN_ID?.trim() ||
55
+ process.env.WORKFLOW_VERIFIER_RUN_ID?.trim() ||
56
+ randomUUID();
57
+ await runLicensePreflightIfNeeded("enforce", { runId, xRequestId: randomUUID() });
58
+ let terminalStatus;
59
+ let workflowId;
60
+ if (isQuick) {
61
+ const q = parseQuickCliArgs(stripped);
62
+ pq = q;
63
+ const out = await runQuickVerifyToValidatedReport({
64
+ inputUtf8: q.inputPath === "-"
65
+ ? await new Promise((resolve, reject) => {
66
+ let s = "";
67
+ process.stdin.setEncoding("utf8");
68
+ process.stdin.on("data", (d) => {
69
+ s += d;
70
+ });
71
+ process.stdin.on("end", () => resolve(s));
72
+ process.stdin.on("error", reject);
73
+ })
74
+ : await import("node:fs/promises").then((m) => m.readFile(q.inputPath, "utf8")),
75
+ postgresUrl: q.postgresUrl ?? undefined,
76
+ sqlitePath: q.dbPath ?? undefined,
77
+ });
78
+ workflowId = q.workflowIdQuick;
79
+ certificate = buildOutcomeCertificateFromQuickReport({
80
+ report: out.report,
81
+ workflowId: q.workflowIdQuick,
82
+ humanReportOptions: {
83
+ workflowId: q.workflowIdQuick,
84
+ eventsPath: q.emitEventsPath ?? undefined,
85
+ registryPath: q.exportPath,
86
+ dbFlag: q.dbPath ?? undefined,
87
+ postgresUrl: q.postgresUrl !== undefined,
88
+ },
89
+ });
90
+ terminalStatus =
91
+ out.report.verdict === "pass" ? "complete"
92
+ : out.report.verdict === "fail" ? "inconsistent"
93
+ : "incomplete";
94
+ }
95
+ else {
96
+ const parsed = parseBatchVerifyCliArgs(stripped);
97
+ parsedBatch = parsed;
98
+ const wf = await runBatchVerifyToValidatedResult(() => verifyWorkflow({
99
+ workflowId: parsed.workflowId,
100
+ eventsPath: parsed.eventsPath,
101
+ registryPath: parsed.registryPath,
102
+ database: parsed.database,
103
+ verificationPolicy: parsed.verificationPolicy,
104
+ truthReport: parsed.noHumanReport ? () => { } : (report) => process.stderr.write(`${report}\n`),
105
+ }));
106
+ workflowId = parsed.workflowId;
107
+ certificate = buildOutcomeCertificateFromWorkflowResult(wf, "contract_sql");
108
+ terminalStatus =
109
+ wf.status === "complete" ? "complete"
110
+ : wf.status === "inconsistent" ? "inconsistent"
111
+ : "incomplete";
112
+ }
113
+ const payload = {
114
+ schema_version: 2,
115
+ run_id: runId,
116
+ workflow_id: workflowId,
117
+ outcome_certificate_v1: certificate,
118
+ material_truth_sha256: materialTruthSha256(certificate),
119
+ certificate_sha256: canonicalCertificateSha256(certificate),
120
+ };
121
+ const route = mode === "create-baseline" ? "/api/v1/enforcement/baselines"
122
+ : mode === "accept-drift" ? "/api/v1/enforcement/accept"
123
+ : "/api/v1/enforcement/check";
124
+ const stateRes = await postEnforcementState(route, payload);
125
+ if (!stateRes.ok) {
126
+ const detail = typeof stateRes.body === "object" && stateRes.body !== null && "detail" in stateRes.body
127
+ ? String(stateRes.body.detail ?? `HTTP ${stateRes.status}`)
128
+ : `HTTP ${stateRes.status}`;
129
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.LICENSE_DENIED, `${detail}${stateRes.requestId ? ` [x-request-id=${stateRes.requestId}]` : ""}`);
130
+ }
131
+ const status = typeof stateRes.body === "object" && stateRes.body !== null && "status" in stateRes.body
132
+ ? String(stateRes.body.status ?? "ok")
133
+ : "ok";
134
+ process.stdout.write(`${stableStringify({ schemaVersion: 1, enforce: stateRes.body })}\n`);
135
+ if (status === "drift") {
136
+ console.error(cliErrorEnvelope(CLI_OPERATIONAL_CODES.VERIFICATION_OUTPUT_LOCK_MISMATCH, "Drift detected."));
137
+ exitAfterEnforceCliReceipt({
138
+ parsedBatch,
139
+ quick: pq,
140
+ exitCode: 4,
141
+ operationalCode: null,
142
+ certificate,
143
+ enforceExitKindDrift: true,
144
+ });
145
+ }
146
+ if (terminalStatus === "complete") {
147
+ exitAfterEnforceCliReceipt({
148
+ parsedBatch,
149
+ quick: pq,
150
+ exitCode: 0,
151
+ operationalCode: null,
152
+ certificate,
153
+ });
154
+ }
155
+ if (terminalStatus === "inconsistent") {
156
+ exitAfterEnforceCliReceipt({
157
+ parsedBatch,
158
+ quick: pq,
159
+ exitCode: 1,
160
+ operationalCode: null,
161
+ certificate,
162
+ });
163
+ }
164
+ exitAfterEnforceCliReceipt({
165
+ parsedBatch,
166
+ quick: pq,
167
+ exitCode: 2,
168
+ operationalCode: null,
169
+ certificate,
78
170
  });
79
- terminalStatus =
80
- out.report.verdict === "pass" ? "complete"
81
- : out.report.verdict === "fail" ? "inconsistent"
82
- : "incomplete";
83
- }
84
- else {
85
- const parsed = parseBatchVerifyCliArgs(stripped);
86
- const wf = await runBatchVerifyToValidatedResult(() => verifyWorkflow({
87
- workflowId: parsed.workflowId,
88
- eventsPath: parsed.eventsPath,
89
- registryPath: parsed.registryPath,
90
- database: parsed.database,
91
- verificationPolicy: parsed.verificationPolicy,
92
- truthReport: parsed.noHumanReport ? () => { } : (report) => process.stderr.write(`${report}\n`),
93
- }));
94
- workflowId = parsed.workflowId;
95
- certificate = buildOutcomeCertificateFromWorkflowResult(wf, "contract_sql");
96
- terminalStatus =
97
- wf.status === "complete" ? "complete"
98
- : wf.status === "inconsistent" ? "inconsistent"
99
- : "incomplete";
100
- }
101
- const payload = {
102
- schema_version: 2,
103
- run_id: runId,
104
- workflow_id: workflowId,
105
- outcome_certificate_v1: certificate,
106
- material_truth_sha256: materialTruthSha256(certificate),
107
- certificate_sha256: canonicalCertificateSha256(certificate),
108
- };
109
- const route = mode === "create-baseline" ? "/api/v1/enforcement/baselines"
110
- : mode === "accept-drift" ? "/api/v1/enforcement/accept"
111
- : "/api/v1/enforcement/check";
112
- const stateRes = await postEnforcementState(route, payload);
113
- if (!stateRes.ok) {
114
- const detail = typeof stateRes.body === "object" && stateRes.body !== null && "detail" in stateRes.body
115
- ? String(stateRes.body.detail ?? `HTTP ${stateRes.status}`)
116
- : `HTTP ${stateRes.status}`;
117
- throw new TruthLayerError(CLI_OPERATIONAL_CODES.LICENSE_DENIED, `${detail}${stateRes.requestId ? ` [x-request-id=${stateRes.requestId}]` : ""}`);
118
171
  }
119
- const status = typeof stateRes.body === "object" && stateRes.body !== null && "status" in stateRes.body
120
- ? String(stateRes.body.status ?? "ok")
121
- : "ok";
122
- process.stdout.write(`${stableStringify({ schemaVersion: 1, enforce: stateRes.body })}\n`);
123
- if (status === "drift") {
124
- console.error(cliErrorEnvelope(CLI_OPERATIONAL_CODES.VERIFICATION_OUTPUT_LOCK_MISMATCH, "Drift detected."));
125
- process.exit(4);
172
+ catch (e) {
173
+ if (e instanceof TruthLayerError) {
174
+ writeOperationalErr(e.code, e.message);
175
+ exitAfterEnforceCliReceipt({
176
+ parsedBatch,
177
+ quick: pq,
178
+ exitCode: 3,
179
+ operationalCode: e.code,
180
+ certificate,
181
+ });
182
+ }
183
+ throw e;
126
184
  }
127
- if (terminalStatus === "complete")
128
- process.exit(0);
129
- if (terminalStatus === "inconsistent")
130
- process.exit(1);
131
- process.exit(2);
132
185
  }
133
186
  //# sourceMappingURL=enforceStateful.js.map