agentskeptic 1.0.0 → 1.0.3
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.
- package/README.md +24 -27
- package/dist/agentRunBundle.d.ts +2 -0
- package/dist/agentRunBundle.d.ts.map +1 -1
- package/dist/agentRunBundle.js +4 -0
- package/dist/agentRunBundle.js.map +1 -1
- package/dist/cli/lockOrchestration.d.ts.map +1 -1
- package/dist/cli/lockOrchestration.js +12 -1
- package/dist/cli/lockOrchestration.js.map +1 -1
- package/dist/cli/lockOrchestration.test.js +1 -0
- package/dist/cli/lockOrchestration.test.js.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/cliArgv.d.ts +2 -0
- package/dist/cliArgv.d.ts.map +1 -1
- package/dist/cliArgv.js +2 -0
- package/dist/cliArgv.js.map +1 -1
- package/dist/cliOperationalCodes.d.ts +1 -0
- package/dist/cliOperationalCodes.d.ts.map +1 -1
- package/dist/cliOperationalCodes.js +1 -0
- package/dist/cliOperationalCodes.js.map +1 -1
- package/dist/commercial/postVerifyOutcomeBeacon.d.ts +3 -3
- package/dist/commercial/postVerifyOutcomeBeacon.d.ts.map +1 -1
- package/dist/commercial/postVerifyOutcomeBeacon.js +9 -6
- package/dist/commercial/postVerifyOutcomeBeacon.js.map +1 -1
- package/dist/commercial/verifyOutcomeBeaconBody.d.ts +12 -0
- package/dist/commercial/verifyOutcomeBeaconBody.d.ts.map +1 -0
- package/dist/commercial/verifyOutcomeBeaconBody.js +26 -0
- package/dist/commercial/verifyOutcomeBeaconBody.js.map +1 -0
- package/dist/decisionBlocker.contract.test.d.ts +2 -0
- package/dist/decisionBlocker.contract.test.d.ts.map +1 -0
- package/dist/decisionBlocker.contract.test.js +51 -0
- package/dist/decisionBlocker.contract.test.js.map +1 -0
- package/dist/decisionBlocker.d.ts +10 -0
- package/dist/decisionBlocker.d.ts.map +1 -0
- package/dist/decisionBlocker.js +66 -0
- package/dist/decisionBlocker.js.map +1 -0
- package/dist/decisionGate.assertSafe.test.d.ts +2 -0
- package/dist/decisionGate.assertSafe.test.d.ts.map +1 -0
- package/dist/decisionGate.assertSafe.test.js +52 -0
- package/dist/decisionGate.assertSafe.test.js.map +1 -0
- package/dist/decisionGate.d.ts +23 -0
- package/dist/decisionGate.d.ts.map +1 -0
- package/dist/decisionGate.js +88 -0
- package/dist/decisionGate.js.map +1 -0
- package/dist/decisionGate.persistBundle.test.d.ts +2 -0
- package/dist/decisionGate.persistBundle.test.d.ts.map +1 -0
- package/dist/{withWorkflowVerification.persistBundle.test.js → decisionGate.persistBundle.test.js} +31 -19
- package/dist/decisionGate.persistBundle.test.js.map +1 -0
- package/dist/decisionUnsafeError.d.ts +8 -0
- package/dist/decisionUnsafeError.d.ts.map +1 -0
- package/dist/decisionUnsafeError.js +12 -0
- package/dist/decisionUnsafeError.js.map +1 -0
- package/dist/discovery-payload-v1.json +152 -41
- package/dist/executionPathFindings.d.ts +1 -1
- package/dist/executionPathFindings.d.ts.map +1 -1
- package/dist/executionPathFindings.js +2 -2
- package/dist/executionPathFindings.js.map +1 -1
- package/dist/executionTrace.js +2 -2
- package/dist/executionTrace.js.map +1 -1
- package/dist/failureCatalog.d.ts +1 -0
- package/dist/failureCatalog.d.ts.map +1 -1
- package/dist/failureCatalog.js +1 -0
- package/dist/failureCatalog.js.map +1 -1
- package/dist/failureOriginCatalog.d.ts.map +1 -1
- package/dist/failureOriginCatalog.js +1 -0
- package/dist/failureOriginCatalog.js.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/langGraphCheckpointTrustGate.d.ts +38 -0
- package/dist/langGraphCheckpointTrustGate.d.ts.map +1 -0
- package/dist/langGraphCheckpointTrustGate.js +127 -0
- package/dist/langGraphCheckpointTrustGate.js.map +1 -0
- package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts +8 -0
- package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts.map +1 -0
- package/dist/langGraphCheckpointTrustIneligibleCertificate.js +17 -0
- package/dist/langGraphCheckpointTrustIneligibleCertificate.js.map +1 -0
- package/dist/langGraphCheckpointTrustUnsafeError.d.ts +8 -0
- package/dist/langGraphCheckpointTrustUnsafeError.d.ts.map +1 -0
- package/dist/langGraphCheckpointTrustUnsafeError.js +12 -0
- package/dist/langGraphCheckpointTrustUnsafeError.js.map +1 -0
- package/dist/loadEvents.d.ts +5 -0
- package/dist/loadEvents.d.ts.map +1 -1
- package/dist/loadEvents.js +32 -0
- package/dist/loadEvents.js.map +1 -1
- package/dist/operationalDisposition.d.ts +8 -0
- package/dist/operationalDisposition.d.ts.map +1 -1
- package/dist/operationalDisposition.js +8 -0
- package/dist/operationalDisposition.js.map +1 -1
- package/dist/outcomeCertificate.d.ts +14 -2
- package/dist/outcomeCertificate.d.ts.map +1 -1
- package/dist/outcomeCertificate.js +119 -0
- package/dist/outcomeCertificate.js.map +1 -1
- package/dist/outcomeCertificate.test.js +2 -0
- package/dist/outcomeCertificate.test.js.map +1 -1
- package/dist/pipeline.d.ts +18 -17
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +43 -149
- package/dist/pipeline.js.map +1 -1
- package/dist/publicDistribution.generated.d.ts +1 -1
- package/dist/publicDistribution.generated.js +1 -1
- package/dist/standardVerifyWorkflowCli.d.ts +6 -1
- package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
- package/dist/standardVerifyWorkflowCli.js +21 -3
- package/dist/standardVerifyWorkflowCli.js.map +1 -1
- package/dist/trustDecision.d.ts +8 -0
- package/dist/trustDecision.d.ts.map +1 -0
- package/dist/trustDecision.js +13 -0
- package/dist/trustDecision.js.map +1 -0
- package/dist/types.d.ts +24 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/verificationRunContext.d.ts.map +1 -1
- package/dist/verificationRunContext.js +3 -0
- package/dist/verificationRunContext.js.map +1 -1
- package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
- package/dist/verify/batchVerifyTelemetrySubcommand.js +107 -19
- package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
- package/dist/verifyAgentskeptic.d.ts +3 -4
- package/dist/verifyAgentskeptic.d.ts.map +1 -1
- package/dist/verifyAgentskeptic.js +15 -27
- package/dist/verifyAgentskeptic.js.map +1 -1
- package/dist/verifyRunStateFromBufferedRunEvents.d.ts +18 -0
- package/dist/verifyRunStateFromBufferedRunEvents.d.ts.map +1 -0
- package/dist/verifyRunStateFromBufferedRunEvents.js +65 -0
- package/dist/verifyRunStateFromBufferedRunEvents.js.map +1 -0
- package/package.json +5 -5
- package/schemas/event.schema.json +35 -0
- package/schemas/outcome-certificate-v1.schema.json +25 -2
- package/schemas/workflow-engine-result.schema.json +2 -1
- package/scripts/discovery-acquisition.lib.cjs +54 -80
- package/scripts/discovery-payload.lib.cjs +34 -5
- package/dist/withWorkflowVerification.persistBundle.test.d.ts +0 -2
- package/dist/withWorkflowVerification.persistBundle.test.d.ts.map +0 -1
- package/dist/withWorkflowVerification.persistBundle.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentskeptic",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Traces say success while rows are missing or wrong. AgentSkeptic runs read-only SQL at verification time on Postgres or SQLite—ground truth from structured tool activity, not trace color alone.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"dev": "npm run dev -w agentskeptic-web",
|
|
28
28
|
"test:vitest": "vitest run",
|
|
29
29
|
"verify:decision-readiness": "npm run test:vitest -w agentskeptic-web -- __tests__/githubHeadingSlug.contract.test.ts __tests__/integrateActivationNorthStar.contract.test.ts __tests__/integrate-page-completion-semantics.contract.test.tsx __tests__/growth-metrics-ssot.contract.test.ts __tests__/repo-reference-integrity.growth-observability.test.ts",
|
|
30
|
-
"test:node:sqlite": "node scripts/assert-dependency-security-pins.mjs && node scripts/assert-no-legacy-verify-surface.mjs && node --test --test-force-exit test/reconciler.sqlite.test.mjs test/pipeline.sqlite.test.mjs test/
|
|
31
|
-
"test:postgres": "node scripts/pg-ci-init.mjs && node --test --test-force-exit test/postgres-session-readonly.test.mjs test/postgres-privilege.test.mjs test/pipeline.postgres.test.mjs test/ci-workflow-truth-postgres-contract.test.mjs test/quick-verify.postgres.test.mjs",
|
|
30
|
+
"test:node:sqlite": "node scripts/assert-dependency-security-pins.mjs && node scripts/assert-no-legacy-verify-surface.mjs && node scripts/assert-no-withWorkflowVerification-surface.mjs && node --test --test-force-exit test/reconciler.sqlite.test.mjs test/pipeline.sqlite.test.mjs test/decisionGate.test.mjs test/workflowTruthReport.test.mjs test/cli.test.mjs test/post-product-activation-install-id.test.mjs test/workflow-lineage-classify.test.mjs test/resolve-telemetry-source.test.mjs test/github-workflows-agentskeptic-telemetry-env.test.mjs test/maybe-emit-oss-claim-telemetry-off.test.mjs test/first-run-verify-output.integration.test.mjs test/stable-failure-consistency.test.mjs test/workflow-result-consumer-contract.test.mjs test/workflow-result-stdout-version.test.mjs test/docs-relational-ssot.test.mjs test/tools-registry-relational-surface.test.mjs test/docs-contract.test.mjs test/docs-commercial-enforce-gate-normative.test.mjs test/docs-remediation-doctrine.test.mjs test/bundle-signature-fixture.test.mjs test/bundle-signature-codes-doc.test.mjs test/bundle-signature-cli-write.test.mjs test/quick-verify.sqlite.test.mjs test/bootstrap-pack.test.mjs test/crossing-cli.test.mjs test/quickVerifyPostbuildGate.test.mjs test/npm-scripts-contract.test.mjs test/langgraph-reference-emitter-before-cli-spawn.test.mjs test/langgraph-checkpoint-trust-terminal.contract.test.mjs test/langgraph-ineligible-certificate.import-guard.test.mjs test/removed-script-names-ban.test.mjs test/docs-workflow-result-normative-prose.test.mjs test/enforce-oss-forbidden.test.mjs test/oss-output-lock-batch.test.mjs test/lock-success-monetized-footer.integration.test.mjs test/docs-enforce-stream-contract.test.mjs test/docs-quick-enforce-link.test.mjs test/commercial-pricing-policy-parity.test.mjs test/discovery-payload.test.mjs test/redaction-rules.test.mjs test/indexable-guide-paths-fs.contract.test.mjs test/npm-pack-discovery-scripts.test.mjs test/registry-metadata-parity.test.mjs test/docs-related-exists-export-ssot-negative.mjs test/quick-param-pointer.gates.test.mjs test/dependency-security-pins.schema.contract.test.mjs test/drizzle-identifier-safety.contract.test.mjs test/assert-destructive-postgres-urls.test.mjs test/readme-wedge-inevitability.test.mjs test/adoption-complete-surface-parity.test.mjs test/adoption-epistemics-contract.test.mjs test/integrate-spine-contract.test.mjs test/integrate-spine-ssot-fixtures.test.mjs test/integrate-route-copy-absence.test.mjs test/adoption-validation-registry.test.mjs test/decision-ready-surfaces-manifest.test.mjs test/oss-legacy-handoff-ban.test.mjs test/sync-adoption-canonical-to-llms.test.mjs test/verify-agentskeptic-consumer.e2e.test.mjs",
|
|
31
|
+
"test:postgres": "node scripts/pg-ci-init.mjs && node --test --test-force-exit test/postgres-session-readonly.test.mjs test/postgres-privilege.test.mjs test/pipeline.postgres.test.mjs test/decisionGate.postgres.test.mjs test/ci-workflow-truth-postgres-contract.test.mjs test/quick-verify.postgres.test.mjs",
|
|
32
32
|
"test:workflow-truth-contract": "node --test --test-force-exit test/ci-workflow-truth-postgres-contract.test.mjs",
|
|
33
33
|
"validate-ttfv": "node scripts/validate-ttfv.mjs",
|
|
34
|
-
"test": "npm run build && npm run check:epistemic-contract-structure && npm run test:vitest && npm run test:vitest -w agentskeptic-web -- __tests__/langgraph-reference-primacy.dom.test.tsx __tests__/oss-claim-client-flow.dom.test.tsx __tests__/integrate-page-completion-semantics.contract.test.tsx && npm run test:node:sqlite && node scripts/first-run.mjs && node scripts/validate-adoption-complete.mjs && node --test test/validate-adoption-complete-failure.test.mjs && node scripts/validate-adoption-complete.mjs && npm run partner-quickstart && node scripts/validate-integrate-spine.mjs && node scripts/validate-integrator-onboarding-shape.mjs && node scripts/langgraph-reference-verify.mjs && node test/partner-quickstart.adversarial.mjs && npm run check:partner-quickstart-ssot && node dist/cli.js assurance run --manifest examples/assurance/manifest.json && node scripts/commercial-enforce-test-harness.mjs && npm run build && npm run validate-ttfv && node scripts/related-exists-export-user-outcome.mjs",
|
|
34
|
+
"test": "npm run build && npm run check:epistemic-contract-structure && npm run test:vitest && npm run test:vitest -w agentskeptic-web -- __tests__/langgraph-reference-primacy.dom.test.tsx __tests__/oss-claim-client-flow.dom.test.tsx __tests__/integrate-page-completion-semantics.contract.test.tsx && npm run test:node:sqlite && node scripts/first-run.mjs && node scripts/validate-adoption-complete.mjs && node --test test/validate-adoption-complete-failure.test.mjs && node scripts/validate-adoption-complete.mjs && npm run partner-quickstart && node scripts/validate-integrate-spine.mjs && node scripts/validate-integrator-onboarding-shape.mjs && node scripts/langgraph-reference-verify.mjs && node scripts/assert-no-langgraph-v1-product-path.mjs && node test/partner-quickstart.adversarial.mjs && npm run check:partner-quickstart-ssot && node dist/cli.js assurance run --manifest examples/assurance/manifest.json && node scripts/commercial-enforce-test-harness.mjs && npm run build && npm run validate-ttfv && node scripts/related-exists-export-user-outcome.mjs",
|
|
35
35
|
"test:debug-ui": "playwright test",
|
|
36
|
-
"test:ci": "npm run build && npm run check:epistemic-contract-structure && npm run test:vitest && npm run test:vitest -w agentskeptic-web -- __tests__/langgraph-reference-primacy.dom.test.tsx __tests__/oss-claim-client-flow.dom.test.tsx __tests__/integrate-page-completion-semantics.contract.test.tsx && npm run test:node:sqlite && node scripts/first-run.mjs && node scripts/validate-adoption-complete.mjs && node --test test/validate-adoption-complete-failure.test.mjs && node scripts/validate-adoption-complete.mjs && npm run partner-quickstart && node scripts/validate-integrate-spine.mjs && node scripts/validate-integrator-onboarding-shape.mjs && node scripts/langgraph-reference-verify.mjs && node test/partner-quickstart.adversarial.mjs && npm run check:partner-quickstart-ssot && node dist/cli.js assurance run --manifest examples/assurance/manifest.json && npm run test:postgres && node scripts/run-partner-quickstart-postgres-ci.mjs && node scripts/commercial-enforce-test-harness.mjs --require-postgres && npx playwright install chromium && npm run test:debug-ui && npm run build && npm run validate-ttfv && node scripts/related-exists-export-user-outcome.mjs",
|
|
36
|
+
"test:ci": "npm run build && npm run check:epistemic-contract-structure && npm run test:vitest && npm run test:vitest -w agentskeptic-web -- __tests__/langgraph-reference-primacy.dom.test.tsx __tests__/oss-claim-client-flow.dom.test.tsx __tests__/integrate-page-completion-semantics.contract.test.tsx && npm run test:node:sqlite && node scripts/first-run.mjs && node scripts/validate-adoption-complete.mjs && node --test test/validate-adoption-complete-failure.test.mjs && node scripts/validate-adoption-complete.mjs && npm run partner-quickstart && node scripts/validate-integrate-spine.mjs && node scripts/validate-integrator-onboarding-shape.mjs && node scripts/langgraph-reference-verify.mjs && node scripts/assert-no-langgraph-v1-product-path.mjs && node test/partner-quickstart.adversarial.mjs && npm run check:partner-quickstart-ssot && node dist/cli.js assurance run --manifest examples/assurance/manifest.json && npm run test:postgres && node scripts/run-partner-quickstart-postgres-ci.mjs && node scripts/commercial-enforce-test-harness.mjs --require-postgres && npx playwright install chromium && npm run test:debug-ui && npm run build && npm run validate-ttfv && node scripts/related-exists-export-user-outcome.mjs",
|
|
37
37
|
"example:workflow-hook": "npm run build && node examples/workflow-runner.mjs",
|
|
38
38
|
"agentskeptic": "node dist/cli.js",
|
|
39
39
|
"migrate:workflow-result-v11": "npm run build && node scripts/migrate-workflow-result-v11.mjs",
|
|
@@ -32,6 +32,41 @@
|
|
|
32
32
|
"timestamp": { "type": "string" }
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
|
+
{
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"required": [
|
|
39
|
+
"schemaVersion",
|
|
40
|
+
"workflowId",
|
|
41
|
+
"runEventId",
|
|
42
|
+
"type",
|
|
43
|
+
"seq",
|
|
44
|
+
"toolId",
|
|
45
|
+
"params",
|
|
46
|
+
"langgraphCheckpoint"
|
|
47
|
+
],
|
|
48
|
+
"properties": {
|
|
49
|
+
"schemaVersion": { "const": 3 },
|
|
50
|
+
"workflowId": { "type": "string", "minLength": 1 },
|
|
51
|
+
"runEventId": { "type": "string", "minLength": 1 },
|
|
52
|
+
"parentRunEventId": { "type": "string", "minLength": 1 },
|
|
53
|
+
"type": { "const": "tool_observed" },
|
|
54
|
+
"seq": { "type": "integer", "minimum": 0 },
|
|
55
|
+
"toolId": { "type": "string", "minLength": 1 },
|
|
56
|
+
"params": { "type": "object" },
|
|
57
|
+
"timestamp": { "type": "string" },
|
|
58
|
+
"langgraphCheckpoint": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"additionalProperties": false,
|
|
61
|
+
"required": ["threadId", "checkpointNs", "checkpointId"],
|
|
62
|
+
"properties": {
|
|
63
|
+
"threadId": { "type": "string", "minLength": 1 },
|
|
64
|
+
"checkpointNs": { "type": "string" },
|
|
65
|
+
"checkpointId": { "type": "string", "minLength": 1 }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
35
70
|
{
|
|
36
71
|
"type": "object",
|
|
37
72
|
"additionalProperties": false,
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
"properties": {
|
|
19
19
|
"schemaVersion": { "type": "integer", "const": 1 },
|
|
20
20
|
"workflowId": { "type": "string", "minLength": 1, "maxLength": 512 },
|
|
21
|
-
"runKind": {
|
|
21
|
+
"runKind": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"enum": ["contract_sql", "contract_sql_langgraph_checkpoint_trust", "quick_preview"]
|
|
24
|
+
},
|
|
22
25
|
"stateRelation": {
|
|
23
26
|
"type": "string",
|
|
24
27
|
"enum": ["matches_expectations", "does_not_match", "not_established"]
|
|
@@ -61,6 +64,26 @@
|
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
},
|
|
64
|
-
"humanReport": { "type": "string", "minLength": 1, "maxLength": 1048576 }
|
|
67
|
+
"humanReport": { "type": "string", "minLength": 1, "maxLength": 1048576 },
|
|
68
|
+
"checkpointVerdicts": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"additionalProperties": false,
|
|
73
|
+
"required": ["checkpointKey", "verdict", "seqs", "productionMeaning"],
|
|
74
|
+
"properties": {
|
|
75
|
+
"checkpointKey": { "type": "string", "minLength": 1, "maxLength": 2048 },
|
|
76
|
+
"verdict": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"enum": ["verified", "inconsistent", "incomplete"]
|
|
79
|
+
},
|
|
80
|
+
"seqs": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": { "type": "integer", "minimum": 0 }
|
|
83
|
+
},
|
|
84
|
+
"productionMeaning": { "type": "string", "minLength": 1, "maxLength": 8192 }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
65
88
|
}
|
|
66
89
|
}
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"lastRunEvent"
|
|
82
82
|
],
|
|
83
83
|
"properties": {
|
|
84
|
-
"maxWireSchemaVersion": { "type": "integer", "enum": [1, 2] },
|
|
84
|
+
"maxWireSchemaVersion": { "type": "integer", "enum": [1, 2, 3] },
|
|
85
85
|
"retrievalEvents": {
|
|
86
86
|
"type": "array",
|
|
87
87
|
"items": {
|
|
@@ -502,6 +502,7 @@
|
|
|
502
502
|
},
|
|
503
503
|
"repeatObservationCount": { "type": "integer", "minimum": 1 },
|
|
504
504
|
"evaluatedObservationOrdinal": { "type": "integer", "minimum": 1 },
|
|
505
|
+
"langgraphCheckpointKey": { "type": "string", "minLength": 1 },
|
|
505
506
|
"failureDiagnostic": {
|
|
506
507
|
"type": "string",
|
|
507
508
|
"enum": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const { readFileSync } = require("node:fs");
|
|
3
|
+
const { existsSync, readFileSync, readdirSync } = require("node:fs");
|
|
4
4
|
const { join } = require("node:path");
|
|
5
5
|
const Ajv = require("ajv");
|
|
6
6
|
const addFormats = require("ajv-formats");
|
|
@@ -33,6 +33,36 @@ function loadDiscoveryAcquisition(root) {
|
|
|
33
33
|
return JSON.parse(readFileSync(jsonPath, "utf8"));
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* @param {string} root
|
|
38
|
+
* @returns {{ guides: string[]; examples: string[]; compare: string[] }}
|
|
39
|
+
*/
|
|
40
|
+
function listMarkdownSurfaceRoutesGrouped(root) {
|
|
41
|
+
const base = join(root, "website", "content", "surfaces");
|
|
42
|
+
/** @type {{ guides: string[]; examples: string[]; compare: string[] }} */
|
|
43
|
+
const out = { guides: [], examples: [], compare: [] };
|
|
44
|
+
for (const seg of /** @type {const} */ (["guides", "examples", "compare"])) {
|
|
45
|
+
const dir = join(base, seg);
|
|
46
|
+
if (!existsSync(dir)) continue;
|
|
47
|
+
for (const f of readdirSync(dir)) {
|
|
48
|
+
if (!f.endsWith(".md")) continue;
|
|
49
|
+
const raw = readFileSync(join(dir, f), "utf8");
|
|
50
|
+
const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
51
|
+
if (!m) throw new Error(`markdown-surfaces: missing frontmatter in ${seg}/${f}`);
|
|
52
|
+
const rm = m[1].match(/^route:\s*(.+)$/m);
|
|
53
|
+
if (!rm) throw new Error(`markdown-surfaces: missing route in ${seg}/${f}`);
|
|
54
|
+
const route = rm[1].trim().replace(/^['"]|['"]$/g, "");
|
|
55
|
+
if (seg === "guides") out.guides.push(route);
|
|
56
|
+
else if (seg === "examples") out.examples.push(route);
|
|
57
|
+
else out.compare.push(route);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
out.guides.sort((a, b) => a.localeCompare(b, "en", { sensitivity: "base" }));
|
|
61
|
+
out.examples.sort((a, b) => a.localeCompare(b, "en", { sensitivity: "base" }));
|
|
62
|
+
out.compare.sort((a, b) => a.localeCompare(b, "en", { sensitivity: "base" }));
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
36
66
|
/**
|
|
37
67
|
* @param {Record<string, unknown>} discovery
|
|
38
68
|
* @param {string} originNormalized
|
|
@@ -85,71 +115,6 @@ function escapeMdLinkText(s) {
|
|
|
85
115
|
return s.replace(/\\/g, "\\\\").replace(/\[/g, "\\[").replace(/\]/g, "\\]");
|
|
86
116
|
}
|
|
87
117
|
|
|
88
|
-
/**
|
|
89
|
-
* @param {Record<string, unknown>} discovery
|
|
90
|
-
*/
|
|
91
|
-
function validateIndexableGuides(discovery) {
|
|
92
|
-
const guides = /** @type {{ path: string; navLabel: string; problemAnchor: string }[]} */ (
|
|
93
|
-
discovery.indexableGuides
|
|
94
|
-
);
|
|
95
|
-
if (!Array.isArray(guides)) {
|
|
96
|
-
throw new Error("discovery-acquisition: indexableGuides must be an array");
|
|
97
|
-
}
|
|
98
|
-
const paths = guides.map((g) => String(g.path));
|
|
99
|
-
const uniq = new Set(paths);
|
|
100
|
-
if (uniq.size !== paths.length) {
|
|
101
|
-
throw new Error("discovery-acquisition: indexableGuides paths must be unique");
|
|
102
|
-
}
|
|
103
|
-
const demandMoments = /** @type {string[]} */ (discovery.demandMoments);
|
|
104
|
-
for (let k = 0; k < guides.length; k++) {
|
|
105
|
-
const pa = String(guides[k].problemAnchor);
|
|
106
|
-
if (pa.includes("`")) {
|
|
107
|
-
throw new Error("discovery-acquisition: problemAnchor must not contain backtick");
|
|
108
|
-
}
|
|
109
|
-
if (k >= 1) {
|
|
110
|
-
const dm = String(demandMoments[k - 1]);
|
|
111
|
-
if (!dm.includes(pa)) {
|
|
112
|
-
throw new Error(
|
|
113
|
-
`discovery-acquisition: indexableGuides[${k}].problemAnchor must be a substring of demandMoments[${k - 1}]`,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* @param {Record<string, unknown>} discovery
|
|
122
|
-
*/
|
|
123
|
-
function validateIndexableExamples(discovery) {
|
|
124
|
-
const ex = /** @type {{ path: string; navLabel: string; problemAnchor: string; embedKey: string }[]} */ (
|
|
125
|
-
discovery.indexableExamples
|
|
126
|
-
);
|
|
127
|
-
if (!Array.isArray(ex)) {
|
|
128
|
-
throw new Error("discovery-acquisition: indexableExamples must be an array");
|
|
129
|
-
}
|
|
130
|
-
if (ex.length !== 2) {
|
|
131
|
-
throw new Error("discovery-acquisition: indexableExamples must have length exactly 2");
|
|
132
|
-
}
|
|
133
|
-
if (ex[0].path !== "/examples/wf-complete" || ex[1].path !== "/examples/wf-missing") {
|
|
134
|
-
throw new Error(
|
|
135
|
-
"discovery-acquisition: indexableExamples paths must be /examples/wf-complete then /examples/wf-missing",
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
if (ex[0].embedKey !== "wf_complete" || ex[1].embedKey !== "wf_missing") {
|
|
139
|
-
throw new Error(
|
|
140
|
-
"discovery-acquisition: indexableExamples embedKey order must be wf_complete then wf_missing",
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
for (let i = 0; i < ex.length; i++) {
|
|
144
|
-
const row = ex[i];
|
|
145
|
-
const nl = String(row.navLabel);
|
|
146
|
-
const pa = String(row.problemAnchor);
|
|
147
|
-
if (nl.includes("`") || pa.includes("`")) {
|
|
148
|
-
throw new Error(`discovery-acquisition: indexableExamples[${i}] must not contain backtick`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
118
|
/**
|
|
154
119
|
* @param {string} baseLlms
|
|
155
120
|
* @param {Record<string, unknown>} discovery
|
|
@@ -162,18 +127,24 @@ function appendDiscoveryLlmsAppendix(baseLlms, discovery, canonicalOrigin) {
|
|
|
162
127
|
const bullets = (/** @type {string[]} */ arr) => arr.map((x) => `- ${x}`).join("\n");
|
|
163
128
|
|
|
164
129
|
let out = String(baseLlms).replace(/\s*$/, "") + "\n";
|
|
165
|
-
const
|
|
166
|
-
|
|
130
|
+
const root = join(__dirname, "..");
|
|
131
|
+
const grouped = listMarkdownSurfaceRoutesGrouped(root);
|
|
132
|
+
if (grouped.guides.length > 0) {
|
|
167
133
|
out += "\n## Indexable guides\n";
|
|
168
|
-
for (const
|
|
169
|
-
out += `- ${origin}${
|
|
134
|
+
for (const path of grouped.guides) {
|
|
135
|
+
out += `- ${origin}${path}\n`;
|
|
170
136
|
}
|
|
171
137
|
}
|
|
172
|
-
|
|
173
|
-
if (Array.isArray(examples) && examples.length > 0) {
|
|
138
|
+
if (grouped.examples.length > 0) {
|
|
174
139
|
out += "\n## Indexable examples\n";
|
|
175
|
-
for (const
|
|
176
|
-
out += `- ${origin}${
|
|
140
|
+
for (const path of grouped.examples) {
|
|
141
|
+
out += `- ${origin}${path}\n`;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (grouped.compare.length > 0) {
|
|
145
|
+
out += "\n## Indexable comparisons\n";
|
|
146
|
+
for (const path of grouped.compare) {
|
|
147
|
+
out += `- ${origin}${path}\n`;
|
|
177
148
|
}
|
|
178
149
|
}
|
|
179
150
|
const demo = discovery.shareableTerminalDemo;
|
|
@@ -186,9 +157,15 @@ function appendDiscoveryLlmsAppendix(baseLlms, discovery, canonicalOrigin) {
|
|
|
186
157
|
out += bullets(llms.notFor) + "\n";
|
|
187
158
|
out += "\n## Related queries\n";
|
|
188
159
|
out += bullets(llms.relatedQueries) + "\n";
|
|
189
|
-
const
|
|
160
|
+
const rows = /** @type {{ moment: string; primaryRoute: string; relatedRoutes?: string[] }[]} */ (
|
|
161
|
+
discovery.problemIndex
|
|
162
|
+
);
|
|
190
163
|
out += "\n## When this hurts (search-shaped)\n";
|
|
191
|
-
|
|
164
|
+
for (const row of rows) {
|
|
165
|
+
const paths = [row.primaryRoute, ...(Array.isArray(row.relatedRoutes) ? row.relatedRoutes : [])];
|
|
166
|
+
const links = paths.map((p) => `${origin}${String(p).startsWith("/") ? String(p) : `/${String(p)}`}`);
|
|
167
|
+
out += `- ${row.moment} — ${links.join(" · ")}\n`;
|
|
168
|
+
}
|
|
192
169
|
out += "\n## Problem framing (shareable)\n";
|
|
193
170
|
out += `- Full page: ${origin}${slug}\n`;
|
|
194
171
|
out += "\n## Visitor problem (canonical answer)\n\n";
|
|
@@ -221,8 +198,6 @@ function validateDiscoveryAcquisition(root) {
|
|
|
221
198
|
"discovery-acquisition: shareableTerminalDemo.transcript must not contain markdown fence ```",
|
|
222
199
|
);
|
|
223
200
|
}
|
|
224
|
-
validateIndexableGuides(discovery);
|
|
225
|
-
validateIndexableExamples(discovery);
|
|
226
201
|
return discovery;
|
|
227
202
|
}
|
|
228
203
|
|
|
@@ -231,7 +206,6 @@ module.exports = {
|
|
|
231
206
|
buildDiscoveryFoldBody,
|
|
232
207
|
appendDiscoveryLlmsAppendix,
|
|
233
208
|
validateDiscoveryAcquisition,
|
|
234
|
-
validateIndexableGuides,
|
|
235
|
-
validateIndexableExamples,
|
|
236
209
|
discoveryPaths,
|
|
210
|
+
listMarkdownSurfaceRoutesGrouped,
|
|
237
211
|
};
|
|
@@ -105,6 +105,33 @@ function buildDiscoveryPayload(root) {
|
|
|
105
105
|
const discoveryLib = require("./discovery-acquisition.lib.cjs");
|
|
106
106
|
discoveryLib.validateDiscoveryAcquisition(root);
|
|
107
107
|
const discovery = discoveryLib.loadDiscoveryAcquisition(root);
|
|
108
|
+
const grouped = discoveryLib.listMarkdownSurfaceRoutesGrouped(root);
|
|
109
|
+
const padAnchor = (path) =>
|
|
110
|
+
`Markdown-backed discovery surface content for ${path} — read-only SQL verification context.`;
|
|
111
|
+
const indexableGuidesFromMd = grouped.guides.map((path) => ({
|
|
112
|
+
path,
|
|
113
|
+
navLabel: path.replace(/^\/guides\//, ""),
|
|
114
|
+
problemAnchor: padAnchor(path),
|
|
115
|
+
}));
|
|
116
|
+
const embedKeyForExamplePath = (examplePath) => {
|
|
117
|
+
const tail = String(examplePath).replace(/^\/examples\//, "");
|
|
118
|
+
switch (tail) {
|
|
119
|
+
case "wf-complete":
|
|
120
|
+
return "wf_complete";
|
|
121
|
+
case "wf-missing":
|
|
122
|
+
return "wf_missing";
|
|
123
|
+
case "langgraph-checkpoint-trust":
|
|
124
|
+
return "langgraph_checkpoint_trust";
|
|
125
|
+
default:
|
|
126
|
+
throw new Error(`discovery-payload: unknown example path for embedKey: ${examplePath}`);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const indexableExamplesFromMd = grouped.examples.map((path) => ({
|
|
130
|
+
path,
|
|
131
|
+
navLabel: path.replace(/^\/examples\//, ""),
|
|
132
|
+
problemAnchor: padAnchor(path),
|
|
133
|
+
embedKey: embedKeyForExamplePath(path),
|
|
134
|
+
}));
|
|
108
135
|
const anchorsPath = join(root, "config", "public-product-anchors.json");
|
|
109
136
|
const anchors = JSON.parse(readFileSync(anchorsPath, "utf8"));
|
|
110
137
|
const canonicalOrigin = normalizeOrigin(anchors.productionCanonicalOrigin);
|
|
@@ -140,9 +167,11 @@ function buildDiscoveryPayload(root) {
|
|
|
140
167
|
intentPhrases: llms.intentPhrases.map(String),
|
|
141
168
|
notFor: llms.notFor.map(String),
|
|
142
169
|
relatedQueries: llms.relatedQueries.map(String),
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
170
|
+
problemIndex: /** @type {unknown} */ (
|
|
171
|
+
Array.isArray(discovery.problemIndex) ? JSON.parse(JSON.stringify(discovery.problemIndex)) : []
|
|
172
|
+
),
|
|
173
|
+
indexableGuides: /** @type {unknown} */ (indexableGuidesFromMd),
|
|
174
|
+
indexableExamples: /** @type {unknown} */ (indexableExamplesFromMd),
|
|
146
175
|
shareableTerminalDemo: {
|
|
147
176
|
title: String(demo.title),
|
|
148
177
|
transcript: String(demo.transcript),
|
|
@@ -155,13 +184,13 @@ function buildDiscoveryPayload(root) {
|
|
|
155
184
|
* @param {Record<string, unknown>} payload
|
|
156
185
|
*/
|
|
157
186
|
function discoveryObjectFromAppendix(payload) {
|
|
158
|
-
const ap = /** @type {{ slug: string; visitorProblemAnswer: string; intentPhrases: string[]; notFor: string[]; relatedQueries: string[];
|
|
187
|
+
const ap = /** @type {{ slug: string; visitorProblemAnswer: string; intentPhrases: string[]; notFor: string[]; relatedQueries: string[]; problemIndex: { moment: string; primaryRoute: string; relatedRoutes?: string[] }[]; indexableGuides?: { path: string; navLabel: string; problemAnchor: string }[]; indexableExamples?: { path: string; navLabel: string; problemAnchor: string; embedKey: string }[]; shareableTerminalDemo?: { title: string; transcript: string } }} */ (
|
|
159
188
|
payload.appendix
|
|
160
189
|
);
|
|
161
190
|
const out = {
|
|
162
191
|
slug: ap.slug,
|
|
163
192
|
visitorProblemAnswer: ap.visitorProblemAnswer,
|
|
164
|
-
|
|
193
|
+
problemIndex: ap.problemIndex,
|
|
165
194
|
llms: {
|
|
166
195
|
intentPhrases: ap.intentPhrases,
|
|
167
196
|
notFor: ap.notFor,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withWorkflowVerification.persistBundle.test.d.ts","sourceRoot":"","sources":["../src/withWorkflowVerification.persistBundle.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withWorkflowVerification.persistBundle.test.js","sourceRoot":"","sources":["../src/withWorkflowVerification.persistBundle.test.ts"],"names":[],"mappings":"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"}
|