agentskeptic 7.1.4 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  openapi: "3.0.3"
2
2
  info:
3
3
  title: AgentSkeptic commercial license API
4
- version: "7.1.4"
4
+ version: "7.3.0"
5
5
  contact:
6
6
  url: https://agentskeptic.com
7
7
  x-agentskeptic-distribution:
@@ -14,8 +14,16 @@ info:
14
14
  manifestSha256: "c5f23ec43576716c4b9a13e752cd2962a78bb4b4da1f9e521f911e15dfd80268"
15
15
  description: "Read-only checks at verify time—not color.\n\nMachine-readable contract for license preflight used by the published npm CLI.\nBase URL is your deployed app origin (same as NEXT_PUBLIC_APP_URL).\n\nEvery path in this document returns an `x-request-id` response header on all status codes (echo a valid client `x-request-id` when supplied; otherwise server-generated). Non-2xx JSON bodies follow RFC 7807-style Problem Details (`type`, `title`, `status`, `detail`, optional `code`, `instance`) unless noted; `POST /api/v1/usage/reserve` denials additionally include legacy `allowed`, `code`, `message`, and optional `upgrade_url` for backward compatibility.\n\n**Breaking (agentskeptic 5.x):** Hosted enforcement ingestion uses `schema_version` 3 with `outcome_certificate` (Outcome Certificate v3 inner JSON, including `failureSpine`). Legacy `schema_version` 2 payloads with `outcome_certificate_v1` are rejected. `POST /api/v1/funnel/verify-outcome` requires `schema_version` 3 and `evidence_gap_primary`. `POST /api/public/verification-reports` accepts envelope `schemaVersion` 3 only. **HTTP 4xx/5xx** responses are **not** `failure-spine-v1` and are **not** Outcome Certificate-shaped; operational CLI errors use `cli-error-envelope` on stderr only.\n"
16
16
  externalDocs:
17
- description: "First-run integration guide"
18
- url: https://agentskeptic.com/integrate
17
+ description: Runtime truth-check integration guide for agentskeptic check and AgentSkeptic.check
18
+ url: https://github.com/jwekavanagh/agentskeptic/blob/main/docs/first-truth-check.md
19
+ x-agentskeptic-runtime-truth-check:
20
+ status: documented-outside-commercial-api
21
+ cli: agentskeptic check
22
+ sdk: AgentSkeptic.check
23
+ note: >
24
+ This OpenAPI file describes hosted commercial, reporting, and enforcement APIs. Runtime
25
+ truth checks are integrated through the CLI or SDK. Demo /api/verify routes are examples,
26
+ not the production hosted truth-check API.
19
27
  servers:
20
28
  - url: https://agentskeptic.com
21
29
  description: Replace with your deployment origin
@@ -228,7 +236,14 @@ paths:
228
236
  /api/v1/governance/export:
229
237
  get:
230
238
  operationId: exportGovernanceAuditBundle
231
- summary: Export governance audit bundle for one workflow (session auth)
239
+ summary: Export governance timeline JSON for one workflow (session auth)
240
+ description: >
241
+ **Breaking:** Returns GovernanceAuditBundleV3 only (schemaVersion 3). Includes governance window, lifecycle,
242
+ baselines, timeline rows, and slice-keyed evidenceSlices (per governance_evidence row: Outcome Certificate v3,
243
+ fingerprints, hostedExit, decisionCompleteness, truthCheckVerdict). Not equivalent to CLI --write-run-bundle
244
+ (NDJSON technical bundle) or full on-disk decision directories; see docs/decision-evidence-bundle.md.
245
+ If any referenced evidence row fails v3 validation or stored fingerprints disagree with recomputed hashes,
246
+ responds 500 CORRUPTED_EVIDENCE_ROW with a fixed JSON body (no degraded export).
232
247
  parameters:
233
248
  - name: workflow_id
234
249
  in: query
@@ -249,11 +264,11 @@ paths:
249
264
  format: date-time
250
265
  responses:
251
266
  "200":
252
- description: Governance audit bundle
267
+ description: GovernanceAuditBundleV3 governance timeline + slice-keyed evidence
253
268
  content:
254
269
  application/json:
255
270
  schema:
256
- $ref: "#/components/schemas/GovernanceAuditBundleV2"
271
+ $ref: "#/components/schemas/GovernanceAuditBundleV3"
257
272
  "400":
258
273
  description: Invalid request
259
274
  content:
@@ -266,6 +281,12 @@ paths:
266
281
  application/json:
267
282
  schema:
268
283
  $ref: "#/components/schemas/ProblemDetails"
284
+ "500":
285
+ description: Referenced governance_evidence row failed validation or fingerprint invariant
286
+ content:
287
+ application/json:
288
+ schema:
289
+ $ref: "#/components/schemas/GovernanceExportCorruptedEvidenceRow"
269
290
  /api/public/verification-reports:
270
291
  post:
271
292
  operationId: createPublicVerificationReport
@@ -647,14 +668,126 @@ components:
647
668
  items:
648
669
  type: object
649
670
  additionalProperties: true
650
- GovernanceAuditBundleV2:
671
+ GovernanceExportCorruptedEvidenceRow:
651
672
  type: object
652
- description: Governance export including authoritative lifecycle FSM rows and verification decisions.
653
- required: [schemaVersion, generatedAt, userId, workflowId, baseline, events]
673
+ additionalProperties: false
674
+ description: Hosted governance export stored evidence invariant failure.
675
+ required: [code, evidence_id, message]
676
+ properties:
677
+ code:
678
+ type: string
679
+ const: CORRUPTED_EVIDENCE_ROW
680
+ evidence_id:
681
+ type: string
682
+ format: uuid
683
+ message:
684
+ type: string
685
+ const: "Stored evidence row failed certificate schema validation or fingerprints do not match stored columns."
686
+ GovernanceEvidenceFingerprints:
687
+ type: object
688
+ additionalProperties: false
689
+ required: [certificateSha256, materialTruthSha256]
690
+ properties:
691
+ certificateSha256:
692
+ type: string
693
+ materialTruthSha256:
694
+ type: string
695
+ HostedEvidenceExitDecisionV1:
696
+ type: object
697
+ additionalProperties: false
698
+ required: [schemaVersion, exitCode, cliConvention]
654
699
  properties:
655
700
  schemaVersion:
656
701
  type: integer
657
- const: 2
702
+ const: 1
703
+ exitCode:
704
+ type: integer
705
+ minimum: 0
706
+ maximum: 3
707
+ cliConvention:
708
+ type: string
709
+ const: outcome_certificate_v2
710
+ HostedDecisionEvidenceCompletenessArtifacts:
711
+ type: object
712
+ additionalProperties: false
713
+ required: [a4Present, a5Present, a5Required]
714
+ properties:
715
+ a4Present:
716
+ type: boolean
717
+ a5Present:
718
+ type: boolean
719
+ a5Required:
720
+ type: boolean
721
+ HostedDecisionEvidenceCompleteness:
722
+ type: object
723
+ additionalProperties: false
724
+ required: [status, artifacts]
725
+ properties:
726
+ status:
727
+ type: string
728
+ enum: [complete, partial, invalid]
729
+ artifacts:
730
+ $ref: "#/components/schemas/HostedDecisionEvidenceCompletenessArtifacts"
731
+ HostedEvidenceSliceV1:
732
+ type: object
733
+ additionalProperties: false
734
+ required:
735
+ - runId
736
+ - outcomeCertificate
737
+ - fingerprints
738
+ - hostedExit
739
+ - decisionCompleteness
740
+ - truthCheckVerdict
741
+ properties:
742
+ runId:
743
+ type: string
744
+ outcomeCertificate:
745
+ type: object
746
+ additionalProperties: true
747
+ description: Stored Outcome Certificate v3 (schema outcome-certificate-v3).
748
+ fingerprints:
749
+ $ref: "#/components/schemas/GovernanceEvidenceFingerprints"
750
+ hostedExit:
751
+ $ref: "#/components/schemas/HostedEvidenceExitDecisionV1"
752
+ decisionCompleteness:
753
+ $ref: "#/components/schemas/HostedDecisionEvidenceCompleteness"
754
+ truthCheckVerdict:
755
+ type: string
756
+ GovernanceBaselineAcceptedEvidenceV3:
757
+ type: object
758
+ additionalProperties: false
759
+ required: [evidenceSliceKey, runId, fingerprints, runKind]
760
+ properties:
761
+ evidenceSliceKey:
762
+ type: string
763
+ format: uuid
764
+ runId:
765
+ type: string
766
+ fingerprints:
767
+ $ref: "#/components/schemas/GovernanceEvidenceFingerprints"
768
+ runKind:
769
+ type: string
770
+ GovernanceAuditBundleV3:
771
+ type: object
772
+ additionalProperties: false
773
+ description: Hosted governance ledger export (breaking; replaces prior schemaVersion 2 governance export payloads).
774
+ required:
775
+ - schemaVersion
776
+ - generatedAt
777
+ - userId
778
+ - workflowId
779
+ - window
780
+ - lifecycle
781
+ - fsmTransitions
782
+ - verificationDecisions
783
+ - baseline
784
+ - events
785
+ - evidenceSlices
786
+ - baselineAcceptedEvidence
787
+ properties:
788
+ schemaVersion:
789
+ type: integer
790
+ const: 3
658
791
  generatedAt:
659
792
  type: string
660
793
  format: date-time
@@ -664,6 +797,7 @@ components:
664
797
  type: string
665
798
  window:
666
799
  type: object
800
+ additionalProperties: false
667
801
  required: [from, to]
668
802
  properties:
669
803
  from:
@@ -695,10 +829,15 @@ components:
695
829
  items:
696
830
  type: object
697
831
  additionalProperties: true
698
- decisionEvidenceExport:
832
+ evidenceSlices:
699
833
  type: object
700
- additionalProperties: true
701
- additionalProperties: true
834
+ additionalProperties:
835
+ $ref: "#/components/schemas/HostedEvidenceSliceV1"
836
+ baselineAcceptedEvidence:
837
+ nullable: true
838
+ anyOf:
839
+ - $ref: "#/components/schemas/GovernanceBaselineAcceptedEvidenceV3"
840
+ - type: "null"
702
841
  ProblemDetails:
703
842
  type: object
704
843
  required: [type, title, status, detail]
@@ -30,6 +30,8 @@ const STDERR_TAIL_LINES = 20;
30
30
  /** Max UTF-8 bytes of stdout parsed for Outcome Certificate JSON (`failureSpine` extraction). */
31
31
  const MAX_STDOUT_PARSE_BYTES = 262144;
32
32
 
33
+ const { runtimeTruthCheckGuideBlobUrl } = require("./origin.cjs");
34
+
33
35
  const REPO_ROOT = join(__dirname, "..");
34
36
  const README_ADOPTION_START = "<!-- adoption-canonical:start -->";
35
37
  const README_ADOPTION_END = "<!-- adoption-canonical:end -->";
@@ -141,6 +143,7 @@ function buildDiscoveryPayload(root) {
141
143
  const anchors = pm;
142
144
  const canonicalOrigin = normalizeOrigin(anchors.productionCanonicalOrigin);
143
145
  const integrateUrl = `${canonicalOrigin}/integrate`;
146
+ const runtimeTruthCheckGuideUrl = runtimeTruthCheckGuideBlobUrl(String(anchors.gitRepositoryUrl));
144
147
  const learnHubUrl = `${canonicalOrigin}/guides`;
145
148
  const openapiSelfCanonical = `${canonicalOrigin}/openapi-commercial-v1.yaml`;
146
149
  const { owner, repo } = parseGithubRepoFromUrl(anchors.gitRepositoryUrl);
@@ -149,6 +152,7 @@ function buildDiscoveryPayload(root) {
149
152
  const integratorGuideSsotRaw = `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${DISCOVERY_LLM_BRANCH}/docs/integrate.md`;
150
153
  const openapiRaw = `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${DISCOVERY_LLM_BRANCH}/schemas/openapi-commercial-v1.yaml`;
151
154
  const cursorIntegrationDocRaw = `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${DISCOVERY_LLM_BRANCH}/docs/cursor-integration.md`;
155
+ const decisionEvidenceBundleDocRaw = `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${DISCOVERY_LLM_BRANCH}/docs/decision-evidence-bundle.md`;
152
156
  const contractManifestCanonical = `${canonicalOrigin}/contract/v1.json`;
153
157
  const contractManifestRaw = `https://raw.githubusercontent.com/${owner}/${repo}/refs/heads/${DISCOVERY_LLM_BRANCH}/schemas/contract/v1.json`;
154
158
  const llms = /** @type {{ intentPhrases: string[]; notFor: string[]; relatedQueries: string[] }} */ (
@@ -162,6 +166,7 @@ function buildDiscoveryPayload(root) {
162
166
  links: {
163
167
  site: `${canonicalOrigin}/`,
164
168
  integrate: integrateUrl,
169
+ runtimeTruthCheckGuide: runtimeTruthCheckGuideUrl,
165
170
  learnHub: learnHubUrl,
166
171
  openapiCanonical: openapiSelfCanonical,
167
172
  openapiRaw,
@@ -171,6 +176,7 @@ function buildDiscoveryPayload(root) {
171
176
  llmsBlob,
172
177
  integratorGuideSsotRaw,
173
178
  cursorIntegrationDocRaw,
179
+ decisionEvidenceBundleDocRaw,
174
180
  contractManifestCanonical,
175
181
  contractManifestRaw,
176
182
  },
@@ -259,8 +265,9 @@ function renderLlmsTextFromPayload(payload) {
259
265
  `- Integrator guide (v2 SSOT): ${links.integratorGuideSsotRaw}`,
260
266
  `- Cursor integration (consumer rule): ${links.cursorIntegrationDocRaw}`,
261
267
  `- First-run integration: ${integrateUrl}`,
268
+ `- Runtime truth-check (agentskeptic check / AgentSkeptic.check): ${links.runtimeTruthCheckGuide}`,
262
269
  `- Learn: ${learnHubUrl}`,
263
- `- OpenAPI (canonical): ${openapiSelfCanonical}`,
270
+ `- OpenAPI (hosted commercial / reporting / enforcement): ${openapiSelfCanonical}`,
264
271
  `- OpenAPI (repo raw): ${links.openapiRaw}`,
265
272
  `- Source repository: ${links.repo}`,
266
273
  `- npm package: ${links.npm}`,
@@ -268,6 +275,15 @@ function renderLlmsTextFromPayload(payload) {
268
275
  `- Verification Contract Manifest (canonical): ${links.contractManifestCanonical}`,
269
276
  `- Verification Contract Manifest (repo raw): ${links.contractManifestRaw}`,
270
277
  "",
278
+ "## Evidence retention (progressive)",
279
+ "",
280
+ "- Default truth check: `agentskeptic check` — Outcome Certificate on stdout; no bundle files written unless you opt in.",
281
+ "- Decision evidence on disk: add `--proof <dir>` or `--write-decision-bundle <dir>`.",
282
+ "- Full local proof (technical + decision bundles): add `--write-run-bundle <dir>` alongside `--write-decision-bundle` (two output directories).",
283
+ "- Hosted commercial `GET /api/v1/governance/export` returns `GovernanceAuditBundleV3` (`schemaVersion: 3`) with slice-keyed `evidenceSlices` — not a CLI `decision bundle` / `write-run-bundle` directory.",
284
+ "",
285
+ `- Operational SSOT (artifact names, completeness, handoff zip recipe): ${links.decisionEvidenceBundleDocRaw}`,
286
+ "",
271
287
  ];
272
288
  const base = lines.join("\n");
273
289
  const { appendDiscoveryLlmsAppendix } = require("./discovery-acquisition.lib.cjs");
@@ -289,8 +305,9 @@ function renderCiSummaryMarkdownFromPayload(payload) {
289
305
  "",
290
306
  "- Canonical site: " + L.site,
291
307
  "- Integrate: " + L.integrate,
308
+ "- Runtime truth-check (CLI/SDK): " + L.runtimeTruthCheckGuide,
292
309
  "- Learn: " + L.learnHub,
293
- "- OpenAPI: " + L.openapiCanonical,
310
+ "- OpenAPI (hosted commercial): " + L.openapiCanonical,
294
311
  "- OpenAPI (repo raw): " + L.openapiRaw,
295
312
  "- Cursor integration (consumer rule): " + L.cursorIntegrationDocRaw,
296
313
  "- Repository: " + L.repo,
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { readFileSync, writeFileSync, mkdirSync } = require("node:fs");
4
4
  const { join, dirname } = require("node:path");
5
- const { normalize, assertNextPublicOriginParity, MARKETING_PATH } = require("./origin.cjs");
5
+ const { normalize, runtimeTruthCheckGuideBlobUrl, assertNextPublicOriginParity, MARKETING_PATH } = require("./origin.cjs");
6
6
 
7
7
  const ROOT = join(__dirname, "..");
8
8
 
@@ -238,7 +238,8 @@ function syncPrimaryMarketing() {
238
238
  const publicOriginNormalized = normalize(effectivePublicOrigin);
239
239
  const openapiSelfEffective = `${publicOriginNormalized}/openapi-commercial-v1.yaml`;
240
240
 
241
- const integrateUrl = `${canonicalOrigin}/integrate`;
241
+ const integrateLandingUrl = `${canonicalOrigin}/integrate`;
242
+ const integrateRuntimeTruthGuideUrl = runtimeTruthCheckGuideBlobUrl(anchors.gitRepositoryUrl);
242
243
 
243
244
  const template = readFileSync(OPENAPI_IN, "utf8");
244
245
  const pkgForVersion = JSON.parse(readFileSync(PKG_PATH, "utf8"));
@@ -252,7 +253,7 @@ function syncPrimaryMarketing() {
252
253
  mid = mid.replace(PRODUCT_VERSION_TOKEN, JSON.stringify(productSemver));
253
254
  mid = mid.replace("__IDENTITY_ONE_LINER__", escaped);
254
255
  mid = mid.replace("__DISTRIBUTION_CONTACT_URL__", canonicalOrigin);
255
- mid = mid.replace("__DISTRIBUTION_INTEGRATE_URL__", integrateUrl);
256
+ mid = mid.replace("__DISTRIBUTION_INTEGRATE_URL__", integrateRuntimeTruthGuideUrl);
256
257
  mid = mid.replace("__DISTRIBUTION_REPO_URL__", anchors.gitRepositoryUrl);
257
258
  mid = mid.replace("__DISTRIBUTION_NPM_URL__", anchors.npmPackageUrl);
258
259
  mid = mid.replace("__CONTRACT_URL__", contractPin.url);
@@ -324,8 +325,9 @@ function syncPrimaryMarketing() {
324
325
  `- **Repository:** ${anchors.gitRepositoryUrl}`,
325
326
  `- **npm package:** ${anchors.npmPackageUrl}`,
326
327
  `- **Canonical site:** ${canonicalOrigin}`,
327
- `- **Integrate:** ${integrateUrl}`,
328
- `- **OpenAPI (canonical):** ${openapiSelfCanonical}`,
328
+ `- **Integrate:** ${integrateLandingUrl}`,
329
+ `- **Runtime truth-check (CLI / SDK):** ${integrateRuntimeTruthGuideUrl}`,
330
+ `- **OpenAPI (hosted commercial API):** ${openapiSelfCanonical}`,
329
331
  `- **Verification Contract Manifest:** ${contractPin.url}`,
330
332
  `- **llms.txt (agents, site):** ${canonicalOrigin}/llms.txt`,
331
333
  `- **llms.txt (repo, raw):** ${pl.llmsRaw}`,
@@ -31,6 +31,17 @@ function readProductionCanonicalOrigin() {
31
31
  return String(pm.productionCanonicalOrigin);
32
32
  }
33
33
 
34
+ /**
35
+ * Canonical browser URL for the repo markdown SSOT `docs/first-truth-check.md` (OpenAPI externalDocs + discovery).
36
+ * @param {string} gitRepositoryUrl e.g. https://github.com/org/repo or …/repo.git
37
+ */
38
+ function runtimeTruthCheckGuideBlobUrl(gitRepositoryUrl) {
39
+ const base = String(gitRepositoryUrl)
40
+ .replace(/\.git$/i, "")
41
+ .replace(/\/$/, "");
42
+ return `${base}/blob/main/docs/first-truth-check.md`;
43
+ }
44
+
34
45
  function assertNextPublicOriginParity() {
35
46
  const canonicalFromJson = readProductionCanonicalOrigin();
36
47
  const skip = process.env.NODE_ENV !== "production" || process.env.VERCEL_ENV === "preview";
@@ -45,6 +56,7 @@ function assertNextPublicOriginParity() {
45
56
 
46
57
  module.exports = {
47
58
  normalize,
59
+ runtimeTruthCheckGuideBlobUrl,
48
60
  assertNextPublicOriginParity,
49
61
  MARKETING_PATH,
50
62
  /** @deprecated use MARKETING_PATH */