@unbrained/pm-cli 2026.10.11 → 2026.10.13
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +45 -0
- package/dist/cli/after-command-context-usage.d.ts +8 -8
- package/dist/cli/bundle-integrity.d.ts +23 -23
- package/dist/cli/commander-usage.d.ts +31 -31
- package/dist/cli/commander-usage.js +3 -3
- package/dist/cli/error-guidance.d.ts +158 -161
- package/dist/cli/error-guidance.js +2 -2
- package/dist/cli/extension-command-help.d.ts +68 -68
- package/dist/cli/extension-command-options.d.ts +20 -20
- package/dist/cli/extension-recovery.d.ts +20 -20
- package/dist/cli/help-content.d.ts +16 -16
- package/dist/cli/help-content.js +2 -2
- package/dist/cli/help-json-payload.d.ts +40 -40
- package/dist/cli/help-json-payload.js +1 -1
- package/dist/cli/invocation-profile.d.ts +8 -8
- package/dist/cli/main.d.ts +166 -165
- package/dist/cli/main.js +4 -4
- package/dist/cli/migration-gates.d.ts +20 -20
- package/dist/cli/register-list-query.d.ts +4 -4
- package/dist/cli/register-mutation-options.d.ts +2 -2
- package/dist/cli/register-operations.d.ts +68 -63
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli/register-setup.d.ts +1 -1
- package/dist/cli/register-structured-mutation.d.ts +3 -3
- package/dist/cli/register-structured-mutation.js +1 -1
- package/dist/cli/runtime/activation.d.ts +3 -3
- package/dist/cli/runtime/invocation-options.js +1 -1
- package/dist/cli/runtime/selection.d.ts +6 -6
- package/dist/cli/runtime-compatibility-boundary.d.ts +12 -12
- package/dist/cli-bundle/bundle-manifest.json +1 -1
- package/dist/cli-bundle/chunks/{chunk-K2UTE75T.js → chunk-AM2XOZKE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-S445XEYT.js → chunk-APWPC4ZZ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-DJDRHJBP.js +234 -0
- package/dist/cli-bundle/chunks/{chunk-RUT3CCAG.js → chunk-DUK5DHI6.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-HXHFKXLV.js +2 -0
- package/dist/cli-bundle/chunks/chunk-IFPJDJUM.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-OBLO45UM.js → chunk-LBDWFWPK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZWRLAOA4.js → chunk-N5EXRYCZ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-PSNS537F.js +30 -0
- package/dist/cli-bundle/chunks/{chunk-2JYTSTQP.js → chunk-RL45OYTL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ESRACL6K.js → chunk-UBTYYZIE.js} +49 -49
- package/dist/cli-bundle/chunks/chunk-WYZGZV2M.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-SSY4OSJR.js → chunk-YH6H3UVE.js} +10 -10
- package/dist/cli-bundle/chunks/{register-list-query-T6BOR67M.js → register-list-query-BJ742QOR.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-6NXR7SAJ.js → register-mutation-GGGBRIH2.js} +3 -3
- package/dist/cli-bundle/chunks/register-operations-E6HXYHNM.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-MAYFPKBX.js → register-setup-4ZVTVEPY.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-EIOQNLBQ.js → chunk-3LQEBXU5.js} +12 -12
- package/dist/cli-bundle/focused-chunks/{chunk-PLTTMQAW.js → chunk-6BTUISKV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-73UNAJHD.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-WAOXID5J.js → chunk-DVK7VKZL.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SIEGIPNT.js → chunk-F5J3ATMV.js} +16 -16
- package/dist/cli-bundle/focused-chunks/chunk-IIKFTJVC.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-IOTNG6CN.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-AU6VJGTY.js → chunk-KGFRQ34R.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-NNW5BS5L.js +3 -0
- package/dist/cli-bundle/focused-chunks/{chunk-KNJR2WUO.js → chunk-QMNAY25P.js} +62 -62
- package/dist/cli-bundle/focused-chunks/{chunk-W5AE7GKZ.js → chunk-R23T7GFZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RAA7SVRA.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-52UJEHEV.js → chunk-RU6GCFN3.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-JGFSSR3G.js → chunk-S6ITXQ5T.js} +5 -5
- package/dist/cli-bundle/focused-chunks/{chunk-DMSADMEU.js → chunk-SOB7X4FJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-UPJA45K7.js +26 -0
- package/dist/cli-bundle/main.js +22 -22
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +31 -31
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +51 -51
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +8 -8
- package/dist/cli.d.ts +4 -4
- package/dist/core/checkpoint/checkpoint-gc.d.ts +32 -32
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +34 -34
- package/dist/core/config/nested-settings.d.ts +26 -26
- package/dist/core/config/positional-value.d.ts +16 -16
- package/dist/core/diagnostics/remediation.d.ts +6 -6
- package/dist/core/diagnostics/remediation.js +1 -1
- package/dist/core/extensions/activation-summary-markdown.d.ts +6 -6
- package/dist/core/extensions/activation-summary.d.ts +54 -54
- package/dist/core/extensions/activation-transaction.d.ts +7 -7
- package/dist/core/extensions/capability-usage.d.ts +26 -26
- package/dist/core/extensions/command-hook-context.d.ts +26 -26
- package/dist/core/extensions/contribution-inventory.d.ts +21 -21
- package/dist/core/extensions/extension-candidate.d.ts +14 -14
- package/dist/core/extensions/extension-capability-aliases.d.ts +2 -2
- package/dist/core/extensions/extension-policy.d.ts +80 -80
- package/dist/core/extensions/extension-types.d.ts +1294 -1285
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/core/extensions/flag-definition-validation.d.ts +4 -4
- package/dist/core/extensions/item-fields.d.ts +3 -2
- package/dist/core/extensions/item-fields.js +1 -1
- package/dist/core/extensions/loader.d.ts +36 -36
- package/dist/core/extensions/loader.js +1 -1
- package/dist/core/extensions/manifest-schema.d.ts +16 -16
- package/dist/core/extensions/module-graph-snapshot.d.ts +8 -8
- package/dist/core/extensions/read-output-contract.d.ts +5 -0
- package/dist/core/extensions/read-output-contract.js +2 -0
- package/dist/core/extensions/registration-values.d.ts +1 -1
- package/dist/core/extensions/reserved-host-flags.d.ts +6 -6
- package/dist/core/extensions/version-compat.d.ts +10 -10
- package/dist/core/fs/fs-utils.d.ts +1 -1
- package/dist/core/fs/host-environment-errors.d.ts +14 -14
- package/dist/core/governance/content-fields.d.ts +31 -31
- package/dist/core/governance/issue-codes.d.ts +27 -27
- package/dist/core/governance/metadata-coverage.d.ts +91 -91
- package/dist/core/history/drift-scan.d.ts +26 -26
- package/dist/core/history/event-classification.d.ts +1 -1
- package/dist/core/history/event-classification.js +1 -1
- package/dist/core/history/event-index.d.ts +41 -41
- package/dist/core/history/history-compact-bulk.d.ts +22 -22
- package/dist/core/history/history-diff.d.ts +22 -22
- package/dist/core/history/history-rewrite.d.ts +66 -66
- package/dist/core/history/history-storage-stats.d.ts +31 -31
- package/dist/core/history/history-stream-policy.d.ts +12 -12
- package/dist/core/history/history.d.ts +22 -22
- package/dist/core/history/identity.d.ts +6 -6
- package/dist/core/history/operation-contract.d.ts +9 -9
- package/dist/core/history/projection.d.ts +15 -15
- package/dist/core/history/read.d.ts +4 -4
- package/dist/core/history/replay.d.ts +51 -49
- package/dist/core/history/replay.js +1 -1
- package/dist/core/history/workspace-history.d.ts +101 -101
- package/dist/core/io/bulk-ids-input.d.ts +4 -4
- package/dist/core/item/actionability.d.ts +40 -40
- package/dist/core/item/id.d.ts +3 -3
- package/dist/core/item/item-format-version.d.ts +8 -8
- package/dist/core/item/item-format.d.ts +37 -35
- package/dist/core/item/item-format.js +2 -2
- package/dist/core/item/item-type-definition.d.ts +2 -2
- package/dist/core/item/parent-reference-policy.d.ts +1 -1
- package/dist/core/item/parse.d.ts +12 -12
- package/dist/core/item/sprint-release-format.d.ts +2 -2
- package/dist/core/item/status-filter.d.ts +4 -4
- package/dist/core/item/toon-decode.d.ts +9 -9
- package/dist/core/item/type-registry.d.ts +40 -40
- package/dist/core/lock/lock-gc.d.ts +50 -50
- package/dist/core/lock/lock.d.ts +37 -37
- package/dist/core/output/mutation-projection.d.ts +6 -6
- package/dist/core/output/output-control.d.ts +4 -4
- package/dist/core/output/output.d.ts +40 -40
- package/dist/core/output/query-summary.d.ts +5 -5
- package/dist/core/packages/manifest.d.ts +50 -50
- package/dist/core/policy/workflow-policy-schema.d.ts +306 -306
- package/dist/core/policy/workflow-policy-store.d.ts +7 -7
- package/dist/core/policy/workflow-policy.d.ts +81 -81
- package/dist/core/profile/profile-describe.d.ts +40 -40
- package/dist/core/profile/profile-lint.d.ts +20 -20
- package/dist/core/profile/profile-plan.d.ts +84 -84
- package/dist/core/profile/profile-presets.d.ts +52 -52
- package/dist/core/reproducibility/context.d.ts +6 -6
- package/dist/core/schema/fields-file.d.ts +54 -54
- package/dist/core/schema/item-types-file.d.ts +36 -36
- package/dist/core/schema/runtime-field-values.d.ts +2 -2
- package/dist/core/schema/runtime-schema.d.ts +86 -86
- package/dist/core/schema/status-defs-file.d.ts +36 -36
- package/dist/core/schema/type-inference.d.ts +14 -14
- package/dist/core/schema/type-workflows.d.ts +22 -22
- package/dist/core/search/background-refresh.d.ts +9 -9
- package/dist/core/search/bm25.d.ts +19 -19
- package/dist/core/search/cache.d.ts +35 -35
- package/dist/core/search/corpus.d.ts +12 -12
- package/dist/core/search/embedding-batches.d.ts +48 -48
- package/dist/core/search/eval.d.ts +49 -49
- package/dist/core/search/http-client.d.ts +38 -38
- package/dist/core/search/providers.d.ts +41 -41
- package/dist/core/search/relevance.d.ts +20 -20
- package/dist/core/search/semantic-defaults.d.ts +8 -8
- package/dist/core/search/staleness.d.ts +4 -4
- package/dist/core/search/vector-stores.d.ts +78 -78
- package/dist/core/search/vectorization-metadata.d.ts +6 -6
- package/dist/core/sentry/helpers.d.ts +15 -15
- package/dist/core/sentry/instrument.d.ts +40 -40
- package/dist/core/session/session-state.d.ts +32 -32
- package/dist/core/shared/agent-session-context.d.ts +14 -14
- package/dist/core/shared/author.d.ts +128 -128
- package/dist/core/shared/command-types.d.ts +40 -40
- package/dist/core/shared/conflict-markers.d.ts +6 -6
- package/dist/core/shared/constants.d.ts +13 -13
- package/dist/core/shared/errors.d.ts +194 -183
- package/dist/core/shared/errors.js +1 -1
- package/dist/core/shared/secret-rules.d.ts +97 -97
- package/dist/core/shared/serial-queue.d.ts +8 -8
- package/dist/core/shared/split-comma-list.d.ts +6 -6
- package/dist/core/shared/time.d.ts +23 -23
- package/dist/core/store/item-format-migration.d.ts +10 -10
- package/dist/core/store/item-metadata-cache.d.ts +38 -38
- package/dist/core/store/item-metadata-query-index.d.ts +79 -79
- package/dist/core/store/item-metadata-read-work.d.ts +6 -6
- package/dist/core/store/item-store.d.ts +110 -110
- package/dist/core/store/paths.d.ts +2 -2
- package/dist/core/store/settings-read-cache.d.ts +12 -12
- package/dist/core/store/settings-validator.d.ts +165 -165
- package/dist/core/store/settings.d.ts +59 -59
- package/dist/core/telemetry/observability.d.ts +17 -17
- package/dist/core/telemetry/policy.d.ts +3 -3
- package/dist/core/telemetry/runtime.d.ts +242 -242
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/core/test/background-runs.d.ts +186 -185
- package/dist/core/test/background-runs.js +2 -2
- package/dist/core/test/item-test-run-tracking.d.ts +6 -6
- package/dist/core/test/run-selectors.d.ts +18 -18
- package/dist/core/validate/fix-planning.d.ts +50 -50
- package/dist/core/validate/missing-by-type.d.ts +4 -4
- package/dist/core/validate/missing-link-owners.d.ts +30 -30
- package/dist/core/validate/stale-file-classification.d.ts +8 -8
- package/dist/mcp/http-server.d.ts +28 -28
- package/dist/mcp/legacy-adapter.d.ts +33 -33
- package/dist/mcp/runtime-capabilities.d.ts +16 -16
- package/dist/mcp/server.d.ts +50 -50
- package/dist/mcp/tool-definitions.d.ts +36 -36
- package/dist/sdk/agent/closed-domain-contracts.d.ts +18 -18
- package/dist/sdk/agent/command-recovery.d.ts +4 -0
- package/dist/sdk/agent/command-recovery.js +1 -1
- package/dist/sdk/agent/command-suggestions.d.ts +2 -0
- package/dist/sdk/agent/command-suggestions.js +1 -1
- package/dist/sdk/agent/identity-config.d.ts +32 -32
- package/dist/sdk/agent/item-addressing.d.ts +8 -8
- package/dist/sdk/agent/refusal-closure-census.d.ts +34 -34
- package/dist/sdk/agent/refusal-closure.d.ts +42 -42
- package/dist/sdk/agent/refusal-corpus-contracts.d.ts +46 -46
- package/dist/sdk/agent/refusal-reachability.d.ts +112 -112
- package/dist/sdk/agent/subcommand-recovery.d.ts +25 -25
- package/dist/sdk/agent/task-transcript-contracts.d.ts +30 -30
- package/dist/sdk/agent/tracker-preflight-contracts.d.ts +38 -38
- package/dist/sdk/agent-capability-contracts.d.ts +37 -37
- package/dist/sdk/annotations.d.ts +106 -106
- package/dist/sdk/author-attribution.d.ts +76 -76
- package/dist/sdk/authoring.d.ts +1 -1
- package/dist/sdk/authoring.js +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +70 -70
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +63 -63
- package/dist/sdk/cli-contracts/command-aliases.d.ts +14 -14
- package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +70 -70
- package/dist/sdk/cli-contracts/commander-types.d.ts +17 -17
- package/dist/sdk/cli-contracts/completeness.d.ts +26 -26
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +5 -5
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +32 -32
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +42 -42
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.d.ts +84 -84
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.d.ts +37 -40
- package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +290 -294
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +793 -793
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +391 -391
- package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +6 -6
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +55 -55
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +24 -24
- package/dist/sdk/comments.d.ts +44 -44
- package/dist/sdk/compile-cache.d.ts +4 -4
- package/dist/sdk/completion/shared.d.ts +22 -22
- package/dist/sdk/compose.d.ts +156 -156
- package/dist/sdk/config.d.ts +123 -123
- package/dist/sdk/context/semantic-session-attribution.d.ts +14 -14
- package/dist/sdk/context/usage-ledger.d.ts +20 -20
- package/dist/sdk/context-intent-contracts.d.ts +50 -50
- package/dist/sdk/context-intent-contracts.js +1 -1
- package/dist/sdk/context-intent-runtime.d.ts +8 -8
- package/dist/sdk/context-packing.d.ts +78 -78
- package/dist/sdk/context-relevance.d.ts +189 -180
- package/dist/sdk/context-relevance.js +1 -1
- package/dist/sdk/context-signal-store.d.ts +84 -84
- package/dist/sdk/context-usage.d.ts +92 -92
- package/dist/sdk/core.d.ts +1 -0
- package/dist/sdk/core.js +1 -1
- package/dist/sdk/corpus-shape.d.ts +101 -101
- package/dist/sdk/define.d.ts +2 -2
- package/dist/sdk/dependencies.d.ts +116 -116
- package/dist/sdk/dependency-flag-validation.d.ts +14 -12
- package/dist/sdk/dependency-flag-validation.js +1 -1
- package/dist/sdk/dependency-provenance.d.ts +30 -30
- package/dist/sdk/docs.d.ts +32 -32
- package/dist/sdk/duplicates.d.ts +21 -21
- package/dist/sdk/environment/agent-environment.d.ts +196 -196
- package/dist/sdk/environment/project-runtime-compatibility.d.ts +56 -56
- package/dist/sdk/environment/source-context.d.ts +6 -6
- package/dist/sdk/error-code-catalog.d.ts +40 -40
- package/dist/sdk/errors.d.ts +29 -29
- package/dist/sdk/eval.d.ts +45 -45
- package/dist/sdk/extension/author-manifest.d.ts +14 -14
- package/dist/sdk/extension/bundled-catalog.d.ts +7 -7
- package/dist/sdk/extension/describe.d.ts +36 -36
- package/dist/sdk/extension/doctor.d.ts +29 -29
- package/dist/sdk/extension/install-plan.d.ts +55 -55
- package/dist/sdk/extension/install-receipts.d.ts +2 -2
- package/dist/sdk/extension/install-runtime.d.ts +8 -8
- package/dist/sdk/extension/install-snapshot.d.ts +14 -14
- package/dist/sdk/extension/install-sources.d.ts +96 -96
- package/dist/sdk/extension/managed-state.d.ts +66 -66
- package/dist/sdk/extension/migrations.d.ts +82 -82
- package/dist/sdk/extension/output-ownership.d.ts +24 -24
- package/dist/sdk/extension/runtime-summary.d.ts +5 -5
- package/dist/sdk/extension/scaffold.d.ts +12 -12
- package/dist/sdk/extension/shared.d.ts +15 -15
- package/dist/sdk/extension/source-resolution.d.ts +30 -30
- package/dist/sdk/extension/static-inventory.d.ts +42 -42
- package/dist/sdk/extension/update-check.d.ts +10 -10
- package/dist/sdk/extension.d.ts +320 -320
- package/dist/sdk/files.d.ts +157 -157
- package/dist/sdk/flag-invocation-contracts.d.ts +44 -44
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/governance/artifact-ledgers.d.ts +35 -35
- package/dist/sdk/governance/artifact-ledgers.js +1 -1
- package/dist/sdk/governance/assurance-action.d.ts +68 -68
- package/dist/sdk/governance/assurance-action.js +1 -1
- package/dist/sdk/governance/assurance-mutation-error.d.ts +36 -36
- package/dist/sdk/governance/assurance-presets.d.ts +24 -24
- package/dist/sdk/governance/assurance-runtime.d.ts +14 -14
- package/dist/sdk/governance/assurance.d.ts +353 -353
- package/dist/sdk/governance/boundary-fixtures.d.ts +60 -60
- package/dist/sdk/governance/closure-timestamps.d.ts +9 -9
- package/dist/sdk/governance/coverage-assurance.d.ts +10 -10
- package/dist/sdk/governance/defect-recurrence-coverage.d.ts +75 -75
- package/dist/sdk/governance/defect-recurrence-graph.d.ts +18 -18
- package/dist/sdk/governance/defect-recurrence.d.ts +186 -181
- package/dist/sdk/governance/defect-recurrence.js +1 -1
- package/dist/sdk/governance/extension-host-version.d.ts +16 -16
- package/dist/sdk/governance/gc.d.ts +48 -48
- package/dist/sdk/governance/health-merge-evidence.d.ts +5 -5
- package/dist/sdk/governance/health.d.ts +188 -188
- package/dist/sdk/governance/hierarchy-validation.d.ts +13 -13
- package/dist/sdk/governance/linked-file-report.d.ts +26 -26
- package/dist/sdk/governance/merge-receipt-history.d.ts +36 -36
- package/dist/sdk/governance/provenance-health.d.ts +64 -64
- package/dist/sdk/governance/reindex.d.ts +89 -89
- package/dist/sdk/governance/reliability.d.ts +56 -56
- package/dist/sdk/governance/stale-work.d.ts +22 -22
- package/dist/sdk/governance/status-role-diagnostics.d.ts +12 -12
- package/dist/sdk/governance/storage-integrity.d.ts +54 -54
- package/dist/sdk/governance/tracked-runtime-cache.d.ts +10 -10
- package/dist/sdk/governance/upgrade.d.ts +104 -104
- package/dist/sdk/governance/validate-history-drift.d.ts +2 -2
- package/dist/sdk/governance/validate-item-reader.d.ts +6 -6
- package/dist/sdk/governance/validate.d.ts +191 -191
- package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
- package/dist/sdk/governance/workflow-policy.d.ts +28 -28
- package/dist/sdk/governance/workspace-position.d.ts +46 -46
- package/dist/sdk/graph/adapter.d.ts +66 -66
- package/dist/sdk/graph/analytics.d.ts +54 -54
- package/dist/sdk/graph/assembly.d.ts +80 -80
- package/dist/sdk/graph/cache.d.ts +29 -29
- package/dist/sdk/graph/cardinality-integrity.d.ts +13 -0
- package/dist/sdk/graph/cardinality-integrity.js +2 -0
- package/dist/sdk/graph/centrality.d.ts +34 -34
- package/dist/sdk/graph/conformance.d.ts +33 -33
- package/dist/sdk/graph/deadline-scheduling.d.ts +58 -58
- package/dist/sdk/graph/durable-cache.d.ts +26 -26
- package/dist/sdk/graph/governance.d.ts +165 -165
- package/dist/sdk/graph/hierarchy-integrity.d.ts +52 -52
- package/dist/sdk/graph/index.d.ts +1 -0
- package/dist/sdk/graph/index.js +1 -1
- package/dist/sdk/graph/lifecycle-coverage.d.ts +17 -17
- package/dist/sdk/graph/mutation-advisory.d.ts +11 -11
- package/dist/sdk/graph/query-contracts.d.ts +10 -10
- package/dist/sdk/graph/remediation.d.ts +25 -25
- package/dist/sdk/graph/run.d.ts +392 -392
- package/dist/sdk/graph/scheduling.d.ts +38 -38
- package/dist/sdk/graph/traversal.d.ts +14 -14
- package/dist/sdk/guide-topics.d.ts +32 -32
- package/dist/sdk/guide.d.ts +62 -62
- package/dist/sdk/history/attestation-command.d.ts +12 -12
- package/dist/sdk/history/attestation-contract.d.ts +78 -78
- package/dist/sdk/history/attestation-scan.d.ts +6 -6
- package/dist/sdk/history/maintenance.d.ts +46 -46
- package/dist/sdk/history/salvage.d.ts +18 -18
- package/dist/sdk/history/subject.d.ts +9 -9
- package/dist/sdk/history-analytics.d.ts +84 -84
- package/dist/sdk/history-compact.d.ts +103 -103
- package/dist/sdk/history-mcp.d.ts +8 -8
- package/dist/sdk/history-provenance.d.ts +59 -59
- package/dist/sdk/history-read.d.ts +36 -36
- package/dist/sdk/history-redact.d.ts +78 -78
- package/dist/sdk/history-repair.d.ts +158 -158
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/improvement-ledger.d.ts +102 -102
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init-agent-guidance.d.ts +70 -70
- package/dist/sdk/init.d.ts +152 -152
- package/dist/sdk/item-children.d.ts +28 -28
- package/dist/sdk/item-schedule.d.ts +12 -12
- package/dist/sdk/item-transaction.d.ts +100 -100
- package/dist/sdk/learnings.d.ts +42 -42
- package/dist/sdk/lifecycle/append.d.ts +14 -14
- package/dist/sdk/lifecycle/claim.d.ts +60 -60
- package/dist/sdk/lifecycle/close-many.d.ts +94 -94
- package/dist/sdk/lifecycle/close.d.ts +27 -27
- package/dist/sdk/lifecycle/copy.d.ts +18 -18
- package/dist/sdk/lifecycle/core-field-recovery.d.ts +7 -0
- package/dist/sdk/lifecycle/core-field-recovery.js +2 -0
- package/dist/sdk/lifecycle/create.d.ts +82 -82
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/delete.d.ts +28 -28
- package/dist/sdk/lifecycle/focus.d.ts +10 -10
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +10 -10
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
- package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +54 -54
- package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +4 -4
- package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
- package/dist/sdk/lifecycle/mutation-command-options.d.ts +116 -116
- package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +6 -0
- package/dist/sdk/lifecycle/mutation-facet-contracts.js +2 -0
- package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +42 -42
- package/dist/sdk/lifecycle/plan.d.ts +217 -217
- package/dist/sdk/lifecycle/reopen.d.ts +29 -24
- package/dist/sdk/lifecycle/reopen.js +1 -1
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +3 -3
- package/dist/sdk/lifecycle/restore.d.ts +33 -33
- package/dist/sdk/lifecycle/shared-unset-fields.d.ts +19 -19
- package/dist/sdk/lifecycle/task-composition.d.ts +4 -4
- package/dist/sdk/lifecycle/update-many.d.ts +79 -79
- package/dist/sdk/lifecycle/update.d.ts +131 -132
- package/dist/sdk/lifecycle/update.js +2 -2
- package/dist/sdk/lifecycle-completion.d.ts +22 -22
- package/dist/sdk/lifecycle-policy.d.ts +52 -52
- package/dist/sdk/linked-artifacts.d.ts +69 -69
- package/dist/sdk/mcp/apps.d.ts +32 -32
- package/dist/sdk/mcp/authorization.d.ts +76 -76
- package/dist/sdk/mcp/discovery.d.ts +111 -111
- package/dist/sdk/mcp/interactions.d.ts +61 -61
- package/dist/sdk/mcp/protocol.d.ts +78 -78
- package/dist/sdk/mcp/skills.d.ts +88 -88
- package/dist/sdk/mcp/subscriptions.d.ts +39 -39
- package/dist/sdk/mcp/tasks.d.ts +75 -75
- package/dist/sdk/mcp/transport.d.ts +11 -11
- package/dist/sdk/merge/abandoned-receipts.d.ts +6 -6
- package/dist/sdk/merge/driver.d.ts +60 -60
- package/dist/sdk/merge/install.d.ts +64 -64
- package/dist/sdk/merge/receipt-file-boundary.d.ts +5 -5
- package/dist/sdk/merge/receipt-operation.d.ts +6 -6
- package/dist/sdk/merge/receipt-schema.d.ts +2 -2
- package/dist/sdk/merge/receipts.d.ts +156 -156
- package/dist/sdk/merge/reconcile.d.ts +36 -36
- package/dist/sdk/merge/reconcile.js +1 -1
- package/dist/sdk/merge/three-way.d.ts +77 -76
- package/dist/sdk/merge/three-way.js +1 -1
- package/dist/sdk/mutation-events.d.ts +84 -84
- package/dist/sdk/mutation-guard.d.ts +106 -106
- package/dist/sdk/notes.d.ts +52 -52
- package/dist/sdk/output/table-rows.d.ts +8 -8
- package/dist/sdk/output-contracts.d.ts +38 -38
- package/dist/sdk/output-projection.d.ts +142 -142
- package/dist/sdk/output-token-accounting.d.ts +27 -27
- package/dist/sdk/output.d.ts +28 -28
- package/dist/sdk/package-import-adapters.d.ts +54 -54
- package/dist/sdk/pagination.d.ts +29 -29
- package/dist/sdk/profile.d.ts +123 -123
- package/dist/sdk/provenance.d.ts +58 -58
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.d.ts +118 -118
- package/dist/sdk/query/aggregate.d.ts +140 -140
- package/dist/sdk/query/calendar.d.ts +144 -144
- package/dist/sdk/query/complete-list.d.ts +53 -53
- package/dist/sdk/query/context.d.ts +395 -395
- package/dist/sdk/query/duplicate-candidates.d.ts +1 -1
- package/dist/sdk/query/get.d.ts +77 -77
- package/dist/sdk/query/history.d.ts +72 -72
- package/dist/sdk/query/item-filter-options.d.ts +79 -79
- package/dist/sdk/query/list-filter-shared.d.ts +1 -1
- package/dist/sdk/query/list.d.ts +188 -188
- package/dist/sdk/query/multi-value-filters.d.ts +4 -4
- package/dist/sdk/query/next-ready-budget.d.ts +14 -14
- package/dist/sdk/query/next.d.ts +137 -137
- package/dist/sdk/query/projection-contracts.d.ts +8 -8
- package/dist/sdk/query/search/corpus.d.ts +8 -8
- package/dist/sdk/query/search/filters.d.ts +5 -5
- package/dist/sdk/query/search/input.d.ts +4 -4
- package/dist/sdk/query/search/response.d.ts +8 -8
- package/dist/sdk/query/search/semantic.d.ts +106 -106
- package/dist/sdk/query/search/types.d.ts +85 -85
- package/dist/sdk/query/search-contracts.d.ts +65 -65
- package/dist/sdk/query/search-pagination.d.ts +19 -19
- package/dist/sdk/query/search-rendering.d.ts +25 -25
- package/dist/sdk/query/search.d.ts +46 -46
- package/dist/sdk/read-output/continuation.d.ts +8 -8
- package/dist/sdk/read-output/continuation.js +1 -1
- package/dist/sdk/read-output/extension.d.ts +7 -0
- package/dist/sdk/read-output/extension.js +2 -0
- package/dist/sdk/read-output/options.d.ts +6 -4
- package/dist/sdk/read-output/options.js +1 -1
- package/dist/sdk/read-output/provenance.d.ts +8 -8
- package/dist/sdk/read-output-budget.d.ts +10 -10
- package/dist/sdk/read-output-contracts.d.ts +192 -186
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-rows.d.ts +6 -6
- package/dist/sdk/read-output-session.d.ts +50 -50
- package/dist/sdk/relationship-analytics.d.ts +78 -78
- package/dist/sdk/relationship-context.d.ts +81 -81
- package/dist/sdk/relationship-history.d.ts +109 -109
- package/dist/sdk/relationship-kinds/contract.d.ts +34 -34
- package/dist/sdk/relationship-migration.d.ts +26 -26
- package/dist/sdk/relationships.d.ts +78 -78
- package/dist/sdk/reproducibility/process.d.ts +3 -3
- package/dist/sdk/runtime/context.d.ts +11 -11
- package/dist/sdk/runtime-action-aliases.d.ts +2 -2
- package/dist/sdk/runtime-extended-actions.d.ts +8 -8
- package/dist/sdk/runtime-input.d.ts +3 -3
- package/dist/sdk/runtime-public-contracts.d.ts +78 -78
- package/dist/sdk/runtime.d.ts +305 -305
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/scheduling-shortcuts.d.ts +32 -32
- package/dist/sdk/schema-migration.d.ts +86 -86
- package/dist/sdk/schema.d.ts +355 -355
- package/dist/sdk/similarity-scoring.d.ts +10 -10
- package/dist/sdk/similarity.d.ts +113 -113
- package/dist/sdk/stats.d.ts +108 -108
- package/dist/sdk/structured-mutations.d.ts +16 -16
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry.d.ts +53 -53
- package/dist/sdk/templates.d.ts +39 -39
- package/dist/sdk/test/batch.d.ts +85 -85
- package/dist/sdk/test/batch.js +1 -1
- package/dist/sdk/test/command-args.d.ts +4 -0
- package/dist/sdk/test/command-args.js +2 -0
- package/dist/sdk/test/entry.d.ts +3 -0
- package/dist/sdk/test/entry.js +1 -1
- package/dist/sdk/test/execution-receipts.d.ts +3 -3
- package/dist/sdk/test/execution.d.ts +279 -268
- package/dist/sdk/test/execution.js +2 -2
- package/dist/sdk/test/json-path.d.ts +2 -2
- package/dist/sdk/test/linked-command-detection.d.ts +10 -10
- package/dist/sdk/test/measurements.d.ts +11 -11
- package/dist/sdk/test/parsers.d.ts +1 -1
- package/dist/sdk/test/parsers.js +1 -1
- package/dist/sdk/test/prerequisites.d.ts +6 -0
- package/dist/sdk/test/prerequisites.js +2 -0
- package/dist/sdk/test/runs.d.ts +52 -52
- package/dist/sdk/test/trust.d.ts +12 -12
- package/dist/sdk/test/trust.js +1 -1
- package/dist/sdk/test/update.d.ts +55 -0
- package/dist/sdk/test/update.js +2 -0
- package/dist/sdk/testing.d.ts +319 -319
- package/dist/sdk/traceability/source-traceability.d.ts +65 -65
- package/dist/sdk/workspace-contracts.d.ts +37 -37
- package/dist/sdk/workspace-memory.d.ts +60 -60
- package/dist/sdk/workspace-recipe.d.ts +9 -9
- package/dist/sdk/workspace-snapshot.d.ts +97 -97
- package/dist/sdk/workspace-transaction-gc.d.ts +32 -32
- package/dist/sdk/workspace-transaction.d.ts +47 -47
- package/dist/sdk/workspace.d.ts +6 -6
- package/dist/types.d.ts +978 -974
- package/dist/types.js +1 -1
- package/docs/BUILD_AND_RELEASE_ACCEPTANCE.md +5 -2
- package/docs/DEFECT_RECURRENCE.md +12 -0
- package/docs/EXTENSIONS.md +2 -2
- package/docs/LINKED_TEST_EDITS.md +79 -0
- package/docs/MERGE_SAFETY.md +27 -1
- package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +17 -4
- package/docs/RELATIONSHIP_GRAPH.md +26 -0
- package/docs/RELEASING.md +25 -8
- package/docs/SDK.md +204 -637
- package/docs/SDK_CONSUMER_RECEIPTS.md +67 -0
- package/docs/SDK_EVIDENCE_TRACEABILITY.md +4 -0
- package/docs/TESTING.md +13 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +2 -2
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -3
- package/docs/performance/runner-qualification.md +36 -0
- package/marketplace.json +1 -1
- package/node_modules/@opentelemetry/core/build/esm/version.d.ts +1 -1
- package/node_modules/@opentelemetry/core/build/esm/version.js +1 -1
- package/node_modules/@opentelemetry/core/build/esnext/version.d.ts +1 -1
- package/node_modules/@opentelemetry/core/build/esnext/version.js +1 -1
- package/node_modules/@opentelemetry/core/build/src/version.d.ts +1 -1
- package/node_modules/@opentelemetry/core/build/src/version.js +1 -1
- package/node_modules/@opentelemetry/core/package.json +2 -2
- package/node_modules/@opentelemetry/resources/build/esm/version.d.ts +1 -1
- package/node_modules/@opentelemetry/resources/build/esm/version.js +1 -1
- package/node_modules/@opentelemetry/resources/build/esnext/version.d.ts +1 -1
- package/node_modules/@opentelemetry/resources/build/esnext/version.js +1 -1
- package/node_modules/@opentelemetry/resources/build/src/version.d.ts +1 -1
- package/node_modules/@opentelemetry/resources/build/src/version.js +1 -1
- package/node_modules/@opentelemetry/resources/package.json +3 -3
- package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.d.ts +57 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.js +105 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esm/index.d.ts +1 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esm/index.js +1 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esm/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace/build/esm/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.d.ts +57 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.js +105 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.d.ts +1 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.js +1 -0
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.d.ts +57 -0
- package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.js +109 -0
- package/node_modules/@opentelemetry/sdk-trace/build/src/index.d.ts +1 -0
- package/node_modules/@opentelemetry/sdk-trace/build/src/index.js +3 -1
- package/node_modules/@opentelemetry/sdk-trace/build/src/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace/build/src/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace/package.json +5 -5
- package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.d.ts +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.js +1 -1
- package/node_modules/@opentelemetry/sdk-trace-base/package.json +7 -7
- package/node_modules/@sentry/core/build/cjs/browser.js +3 -0
- package/node_modules/@sentry/core/build/cjs/fetch.js +10 -9
- package/node_modules/@sentry/core/build/cjs/index.js +3 -0
- package/node_modules/@sentry/core/build/cjs/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
- package/node_modules/@sentry/core/build/cjs/integrations/http/get-outgoing-span-data.js +3 -2
- package/node_modules/@sentry/core/build/cjs/integrations/http/server-subscription.js +7 -3
- package/node_modules/@sentry/core/build/cjs/integrations/requestdata.js +23 -9
- package/node_modules/@sentry/core/build/cjs/server.js +3 -0
- package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterCollectedUrl.js +24 -0
- package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterKeyValueData.js +17 -23
- package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterQueryParams.js +8 -15
- package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterUrlQuery.js +20 -0
- package/node_modules/@sentry/core/build/cjs/utils/url.js +4 -3
- package/node_modules/@sentry/core/build/cjs/utils/version.js +1 -1
- package/node_modules/@sentry/core/build/esm/browser.js +1 -0
- package/node_modules/@sentry/core/build/esm/fetch.js +10 -9
- package/node_modules/@sentry/core/build/esm/index.js +1 -0
- package/node_modules/@sentry/core/build/esm/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
- package/node_modules/@sentry/core/build/esm/integrations/http/get-outgoing-span-data.js +3 -2
- package/node_modules/@sentry/core/build/esm/integrations/http/server-subscription.js +7 -3
- package/node_modules/@sentry/core/build/esm/integrations/requestdata.js +23 -9
- package/node_modules/@sentry/core/build/esm/package.json +1 -1
- package/node_modules/@sentry/core/build/esm/server.js +1 -0
- package/node_modules/@sentry/core/build/esm/utils/data-collection/filterCollectedUrl.js +21 -0
- package/node_modules/@sentry/core/build/esm/utils/data-collection/filterKeyValueData.js +18 -25
- package/node_modules/@sentry/core/build/esm/utils/data-collection/filterQueryParams.js +9 -16
- package/node_modules/@sentry/core/build/esm/utils/data-collection/filterUrlQuery.js +18 -0
- package/node_modules/@sentry/core/build/esm/utils/url.js +4 -3
- package/node_modules/@sentry/core/build/esm/utils/version.js +1 -1
- package/node_modules/@sentry/core/build/types/shared-exports.d.ts +1 -0
- package/node_modules/@sentry/core/build/types/utils/data-collection/filterCollectedUrl.d.ts +21 -0
- package/node_modules/@sentry/core/build/types/utils/data-collection/filterKeyValueData.d.ts +1 -0
- package/node_modules/@sentry/core/build/types/utils/data-collection/filterQueryParams.d.ts +2 -3
- package/node_modules/@sentry/core/build/types/utils/data-collection/filterUrlQuery.d.ts +13 -0
- package/node_modules/@sentry/core/build/types/utils/url.d.ts +4 -1
- package/node_modules/@sentry/core/build/types-ts3.8/shared-exports.d.ts +1 -0
- package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterCollectedUrl.d.ts +21 -0
- package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterKeyValueData.d.ts +1 -0
- package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterQueryParams.d.ts +2 -3
- package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterUrlQuery.d.ts +13 -0
- package/node_modules/@sentry/core/build/types-ts3.8/utils/url.d.ts +4 -1
- package/node_modules/@sentry/core/package.json +3 -2
- package/node_modules/@sentry/node/build/cjs/integrations/tracing/vercelai/instrumentation.js +3 -0
- package/node_modules/@sentry/node/build/esm/integrations/tracing/vercelai/instrumentation.js +3 -0
- package/node_modules/@sentry/node/build/esm/package.json +1 -1
- package/node_modules/@sentry/node/package.json +7 -6
- package/node_modules/@sentry/node-core/build/cjs/integrations/anr/index.js +1 -1
- package/node_modules/@sentry/node-core/build/cjs/integrations/http/httpServerSpansIntegration.js +6 -3
- package/node_modules/@sentry/node-core/build/cjs/integrations/local-variables/local-variables-async.js +1 -1
- package/node_modules/@sentry/node-core/build/cjs/integrations/node-fetch/undici-instrumentation.js +2 -2
- package/node_modules/@sentry/node-core/build/cjs/light/client.js +7 -0
- package/node_modules/@sentry/node-core/build/cjs/sdk/client.js +7 -0
- package/node_modules/@sentry/node-core/build/cjs/utils/outgoingFetchRequest.js +1 -1
- package/node_modules/@sentry/node-core/build/esm/integrations/anr/index.js +1 -1
- package/node_modules/@sentry/node-core/build/esm/integrations/anr/worker-script.js +2 -2
- package/node_modules/@sentry/node-core/build/esm/integrations/http/httpServerSpansIntegration.js +7 -4
- package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/local-variables-async.js +1 -1
- package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/worker-script.js +1 -1
- package/node_modules/@sentry/node-core/build/esm/integrations/node-fetch/undici-instrumentation.js +3 -3
- package/node_modules/@sentry/node-core/build/esm/light/client.js +8 -1
- package/node_modules/@sentry/node-core/build/esm/package.json +1 -1
- package/node_modules/@sentry/node-core/build/esm/sdk/client.js +8 -1
- package/node_modules/@sentry/node-core/build/esm/utils/outgoingFetchRequest.js +2 -2
- package/node_modules/@sentry/node-core/build/types/light/client.d.ts +1 -0
- package/node_modules/@sentry/node-core/build/types/sdk/client.d.ts +1 -0
- package/node_modules/@sentry/node-core/build/types-ts3.8/light/client.d.ts +1 -0
- package/node_modules/@sentry/node-core/build/types-ts3.8/sdk/client.d.ts +1 -0
- package/node_modules/@sentry/node-core/package.json +5 -4
- package/node_modules/@sentry/opentelemetry/build/cjs/{asyncContextStrategy-BJ5buq_A.js → asyncContextStrategy-BR-l9zjD.js} +8 -6
- package/node_modules/@sentry/opentelemetry/build/cjs/index.browser.js +1 -1
- package/node_modules/@sentry/opentelemetry/build/cjs/index.js +1 -1
- package/node_modules/@sentry/opentelemetry/build/esm/{asyncContextStrategy-Bx5F5tCX.js → asyncContextStrategy-BQfM_LMv.js} +9 -7
- package/node_modules/@sentry/opentelemetry/build/esm/index.browser.js +1 -1
- package/node_modules/@sentry/opentelemetry/build/esm/index.js +2 -2
- package/node_modules/@sentry/opentelemetry/build/esm/package.json +1 -1
- package/node_modules/@sentry/opentelemetry/package.json +4 -3
- package/node_modules/@sentry/server-utils/build/cjs/tracing-channel.js +1 -0
- package/node_modules/@sentry/server-utils/build/esm/package.json +1 -1
- package/node_modules/@sentry/server-utils/build/esm/tracing-channel.js +1 -0
- package/node_modules/@sentry/server-utils/build/types/tracing-channel.d.ts +3 -1
- package/node_modules/@sentry/server-utils/build/types-ts3.8/tracing-channel.d.ts +3 -1
- package/node_modules/@sentry/server-utils/package.json +4 -3
- package/node_modules/cjs-module-lexer/README.md +8 -3
- package/node_modules/cjs-module-lexer/dist/lexer.js +1 -1
- package/node_modules/cjs-module-lexer/dist/lexer.mjs +2 -2
- package/node_modules/cjs-module-lexer/lexer.js +48 -9
- package/node_modules/cjs-module-lexer/package.json +3 -2
- package/node_modules/es-module-lexer/dist/lexer.asm.js +2 -2
- package/node_modules/es-module-lexer/dist/lexer.cjs +1 -1
- package/node_modules/es-module-lexer/dist/lexer.js +2 -2
- package/node_modules/es-module-lexer/dist/lexer.minimal.asm.js +2 -2
- package/node_modules/es-module-lexer/dist/lexer.minimal.cjs +1 -1
- package/node_modules/es-module-lexer/dist/lexer.minimal.js +2 -2
- package/node_modules/es-module-lexer/package.json +1 -1
- package/node_modules/import-in-the-middle/CHANGELOG.md +7 -0
- package/node_modules/import-in-the-middle/lib/get-esm-exports.mjs +7 -0
- package/node_modules/import-in-the-middle/package.json +1 -1
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/runtime.ts +2 -2
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +1 -1
- package/plugins/pm-codex/plugin.json +1 -1
- package/runtime-dependencies.json +1 -1
- package/scripts/finalize-build.mjs +37 -0
- package/dist/cli-bundle/chunks/chunk-BXSXT5Z6.js +0 -2
- package/dist/cli-bundle/chunks/chunk-KNW3RSLS.js +0 -30
- package/dist/cli-bundle/chunks/chunk-MEWBSWE3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RBPOO46D.js +0 -20
- package/dist/cli-bundle/chunks/chunk-YMLF6QT7.js +0 -234
- package/dist/cli-bundle/chunks/register-operations-PDOBQZUJ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2CJWTLQG.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-B3YW6H2I.js +0 -26
- package/dist/cli-bundle/focused-chunks/chunk-GVGFUD52.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-MJQ253F3.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PBCYGO7X.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-WOEZJUA2.js +0 -2
|
@@ -11,232 +11,232 @@ export type DefectEscapeClass = (typeof DEFECT_ESCAPE_CLASSES)[number];
|
|
|
11
11
|
export type DefectGateEvidenceDisposition = (typeof DEFECT_GATE_EVIDENCE_DISPOSITIONS)[number];
|
|
12
12
|
/** Structured proof attached to a terminal defect item. */
|
|
13
13
|
export interface DefectGateEvidence {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
14
|
+
/** Whether a gate was added, strengthened, or explicitly waived. */
|
|
15
|
+
disposition: DefectGateEvidenceDisposition;
|
|
16
|
+
/** Stable gate identifier, except for an explicit waiver. */
|
|
17
|
+
gate_id?: string;
|
|
18
|
+
/** Runnable negative-control command that proves the gate can fail. */
|
|
19
|
+
negative_control?: string;
|
|
20
|
+
/** Local checks selected by the same recurrence policy as hosted checks. */
|
|
21
|
+
local_checks?: string[];
|
|
22
|
+
/** Hosted checks selected by the same recurrence policy as local checks. */
|
|
23
|
+
hosted_checks?: string[];
|
|
24
|
+
/** Accountable owner of the gate or waiver. */
|
|
25
|
+
owner: string;
|
|
26
|
+
/** Concrete reason for an explicit waiver. */
|
|
27
|
+
waiver_reason?: string;
|
|
28
|
+
/** ISO timestamp after which an explicit waiver is invalid. */
|
|
29
|
+
waiver_expires_at?: string;
|
|
30
30
|
}
|
|
31
31
|
/** Signals that associate a family with source changes or PM context. */
|
|
32
32
|
export interface DefectRecurrenceTriggers {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
/** Repository-relative glob patterns. */
|
|
34
|
+
file_patterns?: string[];
|
|
35
|
+
/** Package names or workspace package paths. */
|
|
36
|
+
package_names?: string[];
|
|
37
|
+
/** Canonical PM item ids. */
|
|
38
|
+
item_ids?: string[];
|
|
39
|
+
/** PM tags. */
|
|
40
|
+
tags?: string[];
|
|
41
|
+
/** Stable error-code contracts. */
|
|
42
|
+
error_codes?: string[];
|
|
43
43
|
}
|
|
44
44
|
/** Local and hosted checks selected together for one recurrence family. */
|
|
45
45
|
export interface DefectRecurrenceChecks {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
/** Fast checks suitable for local development. */
|
|
47
|
+
local: string[];
|
|
48
|
+
/** Hosted checks that add independent or environment-specific evidence. */
|
|
49
|
+
hosted: string[];
|
|
50
50
|
}
|
|
51
51
|
/** Budget that makes an assurance family measurable over time. */
|
|
52
52
|
export interface DefectRecurrenceBudget {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
/** Maximum accepted escaped-defect rate. */
|
|
54
|
+
max_escape_rate: number;
|
|
55
|
+
/** Maximum accepted false-positive rate. */
|
|
56
|
+
max_false_positive_rate: number;
|
|
57
57
|
}
|
|
58
58
|
/** Versioned recurrence policy for one historically observed defect family. */
|
|
59
59
|
export interface DefectRecurrenceFamily {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
/** Stable family identifier. */
|
|
61
|
+
id: string;
|
|
62
|
+
/** Monotonic family contract version. */
|
|
63
|
+
version: number;
|
|
64
|
+
/** Concise human-readable title. */
|
|
65
|
+
title: string;
|
|
66
|
+
/** PM item accountable for maintaining this family. */
|
|
67
|
+
owner_item_id: string;
|
|
68
|
+
/** Escape class represented by the historical examples. */
|
|
69
|
+
escape_class: DefectEscapeClass;
|
|
70
|
+
/** Signals that select this family. */
|
|
71
|
+
triggers: DefectRecurrenceTriggers;
|
|
72
|
+
/** Shared local and hosted assurance policy. */
|
|
73
|
+
checks: DefectRecurrenceChecks;
|
|
74
|
+
/** Input that must select this family during policy validation. */
|
|
75
|
+
negative_control: DefectChangeRiskInput;
|
|
76
|
+
/** Historical items that justify the family. */
|
|
77
|
+
historical_item_ids: string[];
|
|
78
|
+
/** Quantitative escape and false-positive budgets. */
|
|
79
|
+
budget: DefectRecurrenceBudget;
|
|
80
80
|
}
|
|
81
81
|
/** Repository recurrence policy serialized by a project or extension. */
|
|
82
82
|
export interface DefectRecurrencePolicy {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
/** Serialized policy format version. */
|
|
84
|
+
version: 1;
|
|
85
|
+
/** ISO instant after which terminal defects require structured evidence. */
|
|
86
|
+
evidence_epoch: string;
|
|
87
|
+
/** Versioned recurrence families. */
|
|
88
|
+
families: DefectRecurrenceFamily[];
|
|
89
89
|
}
|
|
90
90
|
/** Input used to explain assurance requirements for a proposed change. */
|
|
91
91
|
export interface DefectChangeRiskInput {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
/** Changed repository-relative files. */
|
|
93
|
+
files?: string[];
|
|
94
|
+
/** Changed package names or workspace package paths. */
|
|
95
|
+
package_names?: string[];
|
|
96
|
+
/** PM items in the change lineage. */
|
|
97
|
+
item_ids?: string[];
|
|
98
|
+
/** PM tags in the change lineage. */
|
|
99
|
+
tags?: string[];
|
|
100
|
+
/** Error-code contracts touched by the change. */
|
|
101
|
+
error_codes?: string[];
|
|
102
102
|
}
|
|
103
103
|
/** Options for a full or incremental recurrence-index build. */
|
|
104
104
|
export interface BuildDefectRecurrenceIndexOptions {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
/** Previous index whose unaffected item mappings can be reused. */
|
|
106
|
+
previous_index?: DefectRecurrenceIndex;
|
|
107
|
+
/** Item ids replaced by the supplied item projection. */
|
|
108
|
+
changed_item_ids?: string[];
|
|
109
109
|
}
|
|
110
110
|
/** Deterministic recurrence index shared by CLI, SDK, MCP, and CI. */
|
|
111
111
|
export interface DefectRecurrenceIndex {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
112
|
+
/** Index format version. */
|
|
113
|
+
version: 1;
|
|
114
|
+
/** Hash of the policy used to build the index. */
|
|
115
|
+
policy_fingerprint: string;
|
|
116
|
+
/** Hash of policy plus deterministic item-to-family contributions. */
|
|
117
|
+
index_fingerprint: string;
|
|
118
|
+
/** Stable family definitions. */
|
|
119
|
+
families: DefectRecurrenceFamily[];
|
|
120
|
+
/** Sparse PM item-to-family index. */
|
|
121
|
+
item_families: Record<string, string[]>;
|
|
122
|
+
/** Direct signal matches retained separately so removing an edge removes inherited matches. */
|
|
123
|
+
direct_item_families?: Record<string, string[]>;
|
|
124
|
+
/** Sparse recurrence and linked-file evidence retained for incremental graph updates. */
|
|
125
|
+
recurrence_records?: Record<string, DefectRecurrenceRecord>;
|
|
126
|
+
/** Exact project file matches inherited from explicitly registered recurrence lineages. */
|
|
127
|
+
file_families?: Record<string, string[]>;
|
|
128
|
+
/** Build-cost receipt. */
|
|
129
|
+
build: {
|
|
130
|
+
/** Items inspected during this build. */
|
|
131
|
+
items_scanned: number;
|
|
132
|
+
/** Unchanged item mappings reused from a previous index. */
|
|
133
|
+
items_reused: number;
|
|
134
|
+
/** Items with at least one recurrence family. */
|
|
135
|
+
items_indexed: number;
|
|
136
|
+
};
|
|
137
137
|
}
|
|
138
138
|
/** One explainable reason that selected an assurance family. */
|
|
139
139
|
export interface DefectChangeRiskReason {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
140
|
+
/** Signal category that matched. */
|
|
141
|
+
signal: "file" | "package" | "item" | "tag" | "error_code";
|
|
142
|
+
/** Submitted signal value. */
|
|
143
|
+
value: string;
|
|
144
|
+
/** Policy trigger or indexed item that matched. */
|
|
145
|
+
matched: string;
|
|
146
146
|
}
|
|
147
147
|
/** One selected recurrence family and its evidence requirements. */
|
|
148
148
|
export interface DefectChangeRiskMatch {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
149
|
+
/** Stable family identifier. */
|
|
150
|
+
family_id: string;
|
|
151
|
+
/** Family contract version. */
|
|
152
|
+
family_version: number;
|
|
153
|
+
/** Accountable PM item. */
|
|
154
|
+
owner_item_id: string;
|
|
155
|
+
/** Historical escape class. */
|
|
156
|
+
escape_class: DefectEscapeClass;
|
|
157
|
+
/** Exact selection reasons. */
|
|
158
|
+
reasons: DefectChangeRiskReason[];
|
|
159
|
+
/** Required local checks. */
|
|
160
|
+
local_checks: string[];
|
|
161
|
+
/** Required hosted checks. */
|
|
162
|
+
hosted_checks: string[];
|
|
163
|
+
/** Quantitative policy budget. */
|
|
164
|
+
budget: DefectRecurrenceBudget;
|
|
165
165
|
}
|
|
166
166
|
/** Pagination controls for bounded change-risk output. */
|
|
167
167
|
export interface AnalyzeDefectChangeRiskOptions {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
/** Opaque cursor returned by a previous report. */
|
|
169
|
+
cursor?: string;
|
|
170
|
+
/** Maximum family rows returned, from 1 through 100. */
|
|
171
|
+
limit?: number;
|
|
172
172
|
}
|
|
173
173
|
/** Serialized assurance-risk request shared by CLI, SDK, and MCP transports. */
|
|
174
174
|
export interface DefectChangeRiskRequest {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
/** Project- or package-owned recurrence policy. */
|
|
176
|
+
policy: DefectRecurrencePolicy;
|
|
177
|
+
/** Proposed source and PM-context changes. */
|
|
178
|
+
change: DefectChangeRiskInput;
|
|
179
|
+
/** Opaque cursor returned by a previous report. */
|
|
180
|
+
cursor?: string;
|
|
181
|
+
/** Maximum family rows returned, from 1 through 100. */
|
|
182
|
+
limit?: number;
|
|
183
183
|
}
|
|
184
184
|
/** Bounded and explainable change-risk report. */
|
|
185
185
|
export interface DefectChangeRiskReport {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
186
|
+
/** Whether at least one historical family was selected. */
|
|
187
|
+
risk_detected: boolean;
|
|
188
|
+
/** Stable recurrence-index identity. */
|
|
189
|
+
index_fingerprint: string;
|
|
190
|
+
/** Current page of selected families. */
|
|
191
|
+
items: DefectChangeRiskMatch[];
|
|
192
|
+
/** Total selected families before pagination. */
|
|
193
|
+
total: number;
|
|
194
|
+
/** Opaque continuation cursor when rows remain. */
|
|
195
|
+
next_cursor?: string;
|
|
196
|
+
/** Deduplicated local checks across every selected family. */
|
|
197
|
+
required_local_checks: string[];
|
|
198
|
+
/** Deduplicated hosted checks across every selected family. */
|
|
199
|
+
required_hosted_checks: string[];
|
|
200
|
+
/** Deterministic analysis-cost receipt. */
|
|
201
|
+
cost: {
|
|
202
|
+
/** Families evaluated. */
|
|
203
|
+
families_evaluated: number;
|
|
204
|
+
/** Submitted signals evaluated against the policy. */
|
|
205
|
+
signals_evaluated: number;
|
|
206
|
+
/** Selected families before pagination. */
|
|
207
|
+
families_selected: number;
|
|
208
|
+
/** Approximate JSON-token cost of the bounded response. */
|
|
209
|
+
estimated_output_tokens: number;
|
|
210
|
+
};
|
|
211
|
+
/** Stable collection selector for agent consumers. */
|
|
212
|
+
row_contract: {
|
|
213
|
+
row_keys: ["items"];
|
|
214
|
+
jq_selector: ".items[]";
|
|
215
|
+
};
|
|
216
216
|
}
|
|
217
217
|
/** One fail-closed defect-evidence finding. */
|
|
218
218
|
export interface DefectGateEvidenceFinding {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
219
|
+
/** PM item missing or carrying invalid evidence. */
|
|
220
|
+
item_id: string;
|
|
221
|
+
/** Stable machine-readable finding kind. */
|
|
222
|
+
kind: "missing_escape_class" | "invalid_escape_class" | "invalid_completion_timestamp" | "missing_gate_evidence" | "invalid_gate_evidence" | "expired_waiver";
|
|
223
|
+
/** Actionable explanation. */
|
|
224
|
+
detail: string;
|
|
225
225
|
}
|
|
226
226
|
/** Fail-closed governance report for terminal defects after the policy epoch. */
|
|
227
227
|
export interface DefectGateEvidenceReport {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
228
|
+
/** Whether every governed defect carried valid evidence. */
|
|
229
|
+
ok: boolean;
|
|
230
|
+
/** Terminal defect items governed by the epoch. */
|
|
231
|
+
governed_item_count: number;
|
|
232
|
+
/** Terminal defects carrying a recognized historical escape classification. */
|
|
233
|
+
classified_item_count: number;
|
|
234
|
+
/** Historical and epoch-governed counts by required escape class. */
|
|
235
|
+
class_counts: Record<DefectEscapeClass, number>;
|
|
236
|
+
/** Historical and epoch-governed counts by evidence disposition. */
|
|
237
|
+
evidence_disposition_counts: Record<DefectGateEvidenceDisposition, number>;
|
|
238
|
+
/** Stable sorted findings. */
|
|
239
|
+
findings: DefectGateEvidenceFinding[];
|
|
240
240
|
}
|
|
241
241
|
/** Compile deterministic policy and PM metadata into a sparse incremental index. */
|
|
242
242
|
export declare function buildDefectRecurrenceIndex(policy: DefectRecurrencePolicy, items: readonly AssuranceItemRecord[], options?: BuildDefectRecurrenceIndexOptions): DefectRecurrenceIndex;
|
|
@@ -244,6 +244,11 @@ export declare function buildDefectRecurrenceIndex(policy: DefectRecurrencePolic
|
|
|
244
244
|
export declare function analyzeDefectChangeRisk(index: DefectRecurrenceIndex, input: DefectChangeRiskInput, options?: AnalyzeDefectChangeRiskOptions): DefectChangeRiskReport;
|
|
245
245
|
/** Enforce structured escape classification and gate evidence on new terminal defects. */
|
|
246
246
|
export declare function evaluateDefectGateEvidence(items: readonly AssuranceItemRecord[], policy: DefectRecurrencePolicy, terminalStatuses: readonly string[], now?: Date): DefectGateEvidenceReport;
|
|
247
|
+
/** A policy-stage validation failure, distinguishable from other request TypeErrors. */
|
|
248
|
+
export declare class DefectRecurrencePolicyParseError extends TypeError {
|
|
249
|
+
/** Stable stage identity for consumers combining different SDK entrypoints. */
|
|
250
|
+
readonly code = "defect_recurrence_policy_invalid";
|
|
251
|
+
}
|
|
247
252
|
/** Parse an untrusted serialized policy without weakening runtime validation. */
|
|
248
253
|
export declare function parseDefectRecurrencePolicy(value: unknown): DefectRecurrencePolicy;
|
|
249
254
|
/** Parse an untrusted cross-transport change-risk request. */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a9088773-9fcf-5dc9-b10d-32e2490c5ba8")}catch{}})();import{createHash}from"node:crypto";import{stableStringify}from"../../core/shared/serialization.js";import{defectRecurrenceItemSignals}from"./defect-recurrence-signals.js";import{buildDefectRecurrenceGraph,readDefectRecurrenceRecord}from"./defect-recurrence-graph.js";const DEFECT_ESCAPE_CLASSES=["production_defect","nightly_regression","scanner_finding","review_caught_late"],DEFECT_GATE_EVIDENCE_DISPOSITIONS=["gate_added","gate_strengthened","explicit_waiver"],MAX_FILE_PATTERN_LENGTH=256,MAX_COMPILED_PATH_PATTERNS=1024,compiledPathPatterns=new Map,CHANGE_INPUT_FIELDS=["files","package_names","item_ids","tags","error_codes"];function uniqueSorted(values){return[...new Set(values.map(value=>value.trim()).filter(Boolean))].sort((left,right)=>left<right?-1:1)}function fingerprint(value){return createHash("sha256").update(stableStringify(value)).digest("hex")}function assertNonEmpty(value,field){if(typeof value!="string"||!value.trim())throw new TypeError(`${field} must be a non-empty string`)}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function isStringArray(value){return Array.isArray(value)&&value.every(entry=>typeof entry=="string")}function assertChangeInput(value,field){if(!isRecord(value))throw new TypeError(`${field} must be an object`);for(const key of CHANGE_INPUT_FIELDS)if(value[key]!==void 0&&!isStringArray(value[key]))throw new TypeError(`${field}.${key} must be an array of strings`);return value}function assertTriggers(value,familyId){if(!isRecord(value))throw new TypeError(`defect recurrence family ${familyId} triggers must be an object`);for(const key of["package_names","item_ids","tags","error_codes"])if(value[key]!==void 0&&!isStringArray(value[key]))throw new TypeError(`defect recurrence family ${familyId} triggers.${key} must be an array of strings`);const filePatterns=value.file_patterns;if(filePatterns!==void 0&&!isStringArray(filePatterns))throw new TypeError(`defect recurrence family ${familyId} triggers.file_patterns must be an array of strings`);for(const pattern of filePatterns??[])if(pattern.length>MAX_FILE_PATTERN_LENGTH)throw new TypeError(`defect recurrence family ${familyId} file pattern exceeds ${MAX_FILE_PATTERN_LENGTH} characters`)}function assertFamilyIdentity(family,ids){if(assertNonEmpty(family.id,"defect recurrence family id"),ids.has(family.id))throw new TypeError(`Duplicate defect recurrence family ${family.id}`);if(ids.add(family.id),!Number.isInteger(family.version)||family.version<1)throw new TypeError(`defect recurrence family ${family.id} version must be a positive integer`);if(!DEFECT_ESCAPE_CLASSES.includes(family.escape_class))throw new TypeError(`defect recurrence family ${family.id} has an invalid escape class`);assertNonEmpty(family.title,`defect recurrence family ${family.id} title`),assertNonEmpty(family.owner_item_id,`defect recurrence family ${family.id} owner_item_id`)}function assertFamilyEvidenceContracts(family){if(!isStringArray(family.historical_item_ids)||family.historical_item_ids.length===0||family.historical_item_ids.some(itemId=>!itemId.trim()))throw new TypeError(`defect recurrence family ${family.id} requires historical_item_ids`);if(assertTriggers(family.triggers,family.id),!isRecord(family.checks)||!isStringArray(family.checks.local)||!isStringArray(family.checks.hosted)||family.checks.local.length===0||family.checks.hosted.length===0||family.checks.local.some(check=>!check.trim())||family.checks.hosted.some(check=>!check.trim()))throw new TypeError(`defect recurrence family ${family.id} checks must contain nonempty local and hosted string arrays`)}function assertFamilyBudget(family){if(!isRecord(family.budget)||typeof family.budget.max_escape_rate!="number"||!Number.isFinite(family.budget.max_escape_rate)||typeof family.budget.max_false_positive_rate!="number"||!Number.isFinite(family.budget.max_false_positive_rate))throw new TypeError(`defect recurrence family ${family.id} requires numeric budgets`);if(family.budget.max_escape_rate<0||family.budget.max_escape_rate>1||family.budget.max_false_positive_rate<0||family.budget.max_false_positive_rate>1)throw new TypeError(`defect recurrence family ${family.id} budgets must be between 0 and 1`)}function assertFamilyNegativeControl(family){const negativeControl=assertChangeInput(family.negative_control,`defect recurrence family ${family.id} negative_control`);if(familyReasons(family,negativeControl,{}).length===0)throw new TypeError(`defect recurrence family ${family.id} negative_control must select its own family`)}function validatePolicy(policy){if(policy.version!==1)throw new TypeError(`Unsupported defect recurrence policy version ${policy.version}`);if(typeof policy.evidence_epoch!="string"||!Number.isFinite(Date.parse(policy.evidence_epoch)))throw new TypeError("defect recurrence evidence_epoch must be an ISO timestamp");const ids=new Set;for(const family of policy.families){if(!isRecord(family))throw new TypeError("defect recurrence family must be an object");assertFamilyIdentity(family,ids),assertFamilyEvidenceContracts(family),assertFamilyBudget(family),assertFamilyNegativeControl(family)}}function pathMatches(pattern,value){let compiled=compiledPathPatterns.get(pattern);if(compiled===void 0){if(compiledPathPatterns.size>=MAX_COMPILED_PATH_PATTERNS){const oldest=compiledPathPatterns.keys().next().value;compiledPathPatterns.delete(oldest)}const escaped=pattern.replaceAll("**","\0").replaceAll(/[|\\{}()[\]^$+?./]/gu,"\\$&").replaceAll("*","[^/]*").replaceAll("\0",".*");compiled=new RegExp(`^${escaped}$`,"u"),compiledPathPatterns.set(pattern,compiled)}return compiled.test(value)}function fileReasons(family,input){const reasons=[],patterns=uniqueSorted(family.triggers.file_patterns??[]);for(const file of uniqueSorted(input.files??[]))for(const pattern of patterns)pathMatches(pattern,file)&&reasons.push({signal:"file",value:file,matched:pattern});return reasons}function exactReasons(family,input){const exactSignals=[{signal:"package",values:uniqueSorted(input.package_names??[]),triggers:uniqueSorted(family.triggers.package_names??[])},{signal:"tag",values:uniqueSorted(input.tags??[]),triggers:uniqueSorted(family.triggers.tags??[])},{signal:"error_code",values:uniqueSorted(input.error_codes??[]),triggers:uniqueSorted(family.triggers.error_codes??[])}],reasons=[];for(const exact of exactSignals){const triggerSet=new Set(exact.triggers);for(const value of exact.values)triggerSet.has(value)&&reasons.push({signal:exact.signal,value,matched:value})}return reasons}function itemReasons(family,input,itemFamilies){const directItemIds=new Set(family.triggers.item_ids??[]);return uniqueSorted(input.item_ids??[]).flatMap(itemId=>directItemIds.has(itemId)||Object.hasOwn(itemFamilies,itemId)&&itemFamilies[itemId].includes(family.id)?[{signal:"item",value:itemId,matched:family.id}]:[])}function familyReasons(family,input,itemFamilies){return[...fileReasons(family,input),...exactReasons(family,input),...itemReasons(family,input,itemFamilies)]}function readRiskCursorOffset(cursor,indexFingerprint){if(!cursor)return 0;let parsed;try{parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"))}catch{throw new TypeError("defect change-risk cursor is invalid")}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed)||parsed.index_fingerprint!==indexFingerprint||!Number.isInteger(parsed.offset)||parsed.offset<0)throw new TypeError("defect change-risk cursor does not match this index");return parsed.offset}function changeSignalCount(input){return[input.files,input.package_names,input.item_ids,input.tags,input.error_codes].reduce((total,values)=>total+(values?.length??0),0)}function inheritRecurrenceFamilies(families,recurrenceRecords,itemFamilies){const graph=buildDefectRecurrenceGraph(families,recurrenceRecords),fileFamilies=new Map;for(const lineage of graph.lineages)if(lineage.family_ids.length!==0)for(const id of lineage.item_ids){itemFamilies[id]=uniqueSorted([...Object.hasOwn(itemFamilies,id)?itemFamilies[id]:[],...lineage.family_ids]);for(const file of recurrenceRecords.get(id)?.files??[]){const matched=fileFamilies.get(file)??new Set;for(const familyId of lineage.family_ids)matched.add(familyId);fileFamilies.set(file,matched)}}return fileFamilies}function refreshRecurrenceRecords(recurrenceRecords,items){for(const item of items){const record=readDefectRecurrenceRecord(item);record===void 0?recurrenceRecords.delete(item.id):recurrenceRecords.set(item.id,record)}}function compileDirectItemSeeds(families){const historical=new Map,triggers=new Map;for(const family of families)for(const[index,ids]of[[historical,family.historical_item_ids],[triggers,family.triggers.item_ids??[]]])for(const id of ids){const matches=index.get(id)??new Set;matches.add(family.id),index.set(id,matches)}return{historical,triggers}}function directItemMatches(item,families,seeds){const signals=defectRecurrenceItemSignals(item);return[signals.files,signals.package_names,signals.tags,signals.error_codes].some(values=>values&&values.length>0)?families.filter(family=>family.historical_item_ids.includes(item.id)||familyReasons(family,signals,{}).length>0).map(family=>family.id):uniqueSorted([...seeds.historical.get(item.id)??[],...seeds.triggers.get(item.id.trim())??[]])}function buildDefectRecurrenceIndex(policy,items,options={}){validatePolicy(policy);const families=[...policy.families].sort((left,right)=>left.id<right.id?-1:1),policyFingerprint=fingerprint({...policy,families}),changed=new Set(options.changed_item_ids??[]),canReuse=options.previous_index?.policy_fingerprint===policyFingerprint,itemFamilies=Object.assign(Object.create(null),canReuse?Object.fromEntries(Object.entries(options.previous_index?.direct_item_families??options.previous_index?.item_families??{}).filter(([itemId])=>!changed.has(itemId))):{}),itemsReused=canReuse?Object.keys(itemFamilies).length:0,seeds=compileDirectItemSeeds(families);for(const item of items){const matched=directItemMatches(item,families,seeds);matched.length>0?itemFamilies[item.id]=matched:delete itemFamilies[item.id]}const directItemFamilies=Object.fromEntries(Object.entries(itemFamilies).sort(([left],[right])=>left<right?-1:1)),recurrenceRecords=new Map(canReuse?Object.entries(options.previous_index?.recurrence_records??{}).filter(([id])=>!changed.has(id)):[]);refreshRecurrenceRecords(recurrenceRecords,items);const fileFamilies=inheritRecurrenceFamilies(families,recurrenceRecords,itemFamilies),sortedRecords=Object.fromEntries([...recurrenceRecords].sort(([left],[right])=>left<right?-1:1)),sortedFileFamilies=Object.fromEntries([...fileFamilies].sort(([left],[right])=>left<right?-1:1).map(([file,matches])=>[file,[...matches].sort()])),sortedItemFamilies=Object.fromEntries(Object.entries(itemFamilies).sort(([left],[right])=>left<right?-1:1).map(([itemId,familyIds])=>[itemId,uniqueSorted(familyIds)]));return{version:1,policy_fingerprint:policyFingerprint,index_fingerprint:fingerprint({policy_fingerprint:policyFingerprint,item_families:sortedItemFamilies,direct_item_families:directItemFamilies,recurrence_records:sortedRecords,file_families:sortedFileFamilies}),families,item_families:sortedItemFamilies,direct_item_families:directItemFamilies,recurrence_records:sortedRecords,file_families:sortedFileFamilies,build:{items_scanned:items.length,items_reused:itemsReused,items_indexed:Object.keys(sortedItemFamilies).length}}}function analyzeDefectChangeRisk(index,input,options={}){const limit=options.limit??25;if(!Number.isInteger(limit)||limit<1||limit>100)throw new TypeError("defect change-risk limit must be an integer from 1 through 100");const offset=readRiskCursorOffset(options.cursor,index.index_fingerprint),matches=index.families.flatMap(family=>{const reasons=familyReasons(family,input,index.item_families);for(const file of uniqueSorted(input.files??[]))index.file_families&&Object.hasOwn(index.file_families,file)&&index.file_families[file].includes(family.id)&&reasons.push({signal:"file",value:file,matched:`recurs_from:${family.id}`});return reasons.sort((left,right)=>left.signal!==right.signal?left.signal.localeCompare(right.signal):left.value!==right.value?left.value.localeCompare(right.value):left.matched.localeCompare(right.matched)),reasons.length===0?[]:[{family_id:family.id,family_version:family.version,owner_item_id:family.owner_item_id,escape_class:family.escape_class,reasons,local_checks:uniqueSorted(family.checks.local),hosted_checks:uniqueSorted(family.checks.hosted),budget:family.budget}]}),page=matches.slice(offset,offset+limit),nextOffset=offset+page.length,nextCursor=nextOffset<matches.length?Buffer.from(JSON.stringify({index_fingerprint:index.index_fingerprint,offset:nextOffset})).toString("base64url"):void 0,reportWithoutCost={risk_detected:matches.length>0,index_fingerprint:index.index_fingerprint,items:page,total:matches.length,...nextCursor?{next_cursor:nextCursor}:{},required_local_checks:uniqueSorted(matches.flatMap(match=>match.local_checks)),required_hosted_checks:uniqueSorted(matches.flatMap(match=>match.hosted_checks)),row_contract:{row_keys:["items"],jq_selector:".items[]"}};return{...reportWithoutCost,cost:{families_evaluated:index.families.length,signals_evaluated:changeSignalCount(input),families_selected:matches.length,estimated_output_tokens:Math.ceil(JSON.stringify(reportWithoutCost).length/4)}}}function isDefectItem(item){return typeof item.type=="string"&&item.type.toLowerCase()==="issue"||(Array.isArray(item.tags)?item.tags:[]).some(tag=>typeof tag=="string"&&["bug","defect","security"].includes(tag.toLowerCase()))}function nonEmptyString(value){return typeof value=="string"&&value.trim().length>0}function nonEmptyStringArray(value){return Array.isArray(value)&&value.length>0&&value.every(nonEmptyString)}function validEvidence(value,nowMs){if(typeof value!="object"||value===null||Array.isArray(value))return{valid:!1,expired:!1};const evidence=value;if(!DEFECT_GATE_EVIDENCE_DISPOSITIONS.includes(evidence.disposition)||typeof evidence.owner!="string"||!evidence.owner.trim())return{valid:!1,expired:!1};if(evidence.disposition==="explicit_waiver"){const expiry=Date.parse(evidence.waiver_expires_at??"");return{valid:nonEmptyString(evidence.waiver_reason)&&Number.isFinite(expiry)&&expiry>=nowMs,expired:Number.isFinite(expiry)&&expiry<nowMs}}return{valid:nonEmptyString(evidence.gate_id)&&nonEmptyString(evidence.negative_control)&&nonEmptyStringArray(evidence.local_checks)&&nonEmptyStringArray(evidence.hosted_checks),expired:!1}}function evidenceFindings(item,nowMs){const findings=[];if(!Number.isFinite(Date.parse(typeof item.completed_at=="string"?item.completed_at:""))&&!Number.isFinite(Date.parse(typeof item.closed_at=="string"?item.closed_at:""))&&findings.push({item_id:item.id,kind:"invalid_completion_timestamp",detail:`${item.id} requires a valid completed_at or closed_at timestamp after the defect-evidence epoch.`}),typeof item.escape_class!="string"?findings.push({item_id:item.id,kind:"missing_escape_class",detail:`${item.id} requires escape_class after the defect-evidence epoch.`}):DEFECT_ESCAPE_CLASSES.includes(item.escape_class)||findings.push({item_id:item.id,kind:"invalid_escape_class",detail:`${item.id} has unsupported escape_class ${item.escape_class}.`}),item.gate_evidence===void 0)return findings.push({item_id:item.id,kind:"missing_gate_evidence",detail:`${item.id} requires structured gate_evidence after the defect-evidence epoch.`}),findings;const result=validEvidence(item.gate_evidence,nowMs);return result.valid||findings.push({item_id:item.id,kind:result.expired?"expired_waiver":"invalid_gate_evidence",detail:result.expired?`${item.id} carries an expired gate-evidence waiver.`:`${item.id} gate_evidence does not prove a gate or explicit waiver.`}),findings}function evaluateDefectGateEvidence(items,policy,terminalStatuses,now=new Date){validatePolicy(policy);const epochMs=Date.parse(policy.evidence_epoch),terminal=new Set(terminalStatuses),terminalDefects=items.filter(item=>terminal.has(item.status)&&isDefectItem(item)),governed=terminalDefects.filter(item=>{const completedAt=Date.parse(typeof item.completed_at=="string"?item.completed_at:"");if(Number.isFinite(completedAt))return completedAt>=epochMs;const closedAt=Date.parse(typeof item.closed_at=="string"?item.closed_at:"");if(Number.isFinite(closedAt))return closedAt>=epochMs;const createdAt=Date.parse(typeof item.created_at=="string"?item.created_at:"");return!Number.isFinite(createdAt)||createdAt>=epochMs}),classCounts=Object.fromEntries(DEFECT_ESCAPE_CLASSES.map(escapeClass=>[escapeClass,0])),evidenceDispositionCounts=Object.fromEntries(DEFECT_GATE_EVIDENCE_DISPOSITIONS.map(disposition=>[disposition,0])),classified=terminalDefects.filter(item=>typeof item.escape_class=="string"&&DEFECT_ESCAPE_CLASSES.includes(item.escape_class));for(const item of classified)if(classCounts[item.escape_class]+=1,typeof item.gate_evidence=="object"&&item.gate_evidence!==null&&!Array.isArray(item.gate_evidence)){const disposition=item.gate_evidence.disposition;typeof disposition=="string"&&DEFECT_GATE_EVIDENCE_DISPOSITIONS.includes(disposition)&&(evidenceDispositionCounts[disposition]+=1)}const findings=governed.flatMap(item=>evidenceFindings(item,now.getTime()));return findings.sort((left,right)=>left.item_id!==right.item_id?left.item_id.localeCompare(right.item_id):left.kind.localeCompare(right.kind)),{ok:findings.length===0,governed_item_count:governed.length,classified_item_count:classified.length,class_counts:classCounts,evidence_disposition_counts:evidenceDispositionCounts,findings}}function parseDefectRecurrencePolicy(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("defect recurrence policy must be an object");const policy=value;if(!Array.isArray(policy.families))throw new TypeError("defect recurrence policy families must be an array");return validatePolicy(policy),policy}function parseDefectChangeRiskRequest(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("defect change-risk request must be an object");const request=value,change=assertChangeInput(request.change,"defect change-risk request.change");if(request.cursor!==void 0&&typeof request.cursor!="string")throw new TypeError("defect change-risk request.cursor must be a string");if(request.limit!==void 0&&!Number.isInteger(request.limit))throw new TypeError("defect change-risk request.limit must be an integer");return{policy:parseDefectRecurrencePolicy(request.policy),change,...request.cursor===void 0?{}:{cursor:request.cursor},...request.limit===void 0?{}:{limit:request.limit}}}export{DEFECT_ESCAPE_CLASSES,DEFECT_GATE_EVIDENCE_DISPOSITIONS,analyzeDefectChangeRisk,buildDefectRecurrenceIndex,evaluateDefectGateEvidence,parseDefectChangeRiskRequest,parseDefectRecurrencePolicy};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7c2b78e7-57ce-56de-b827-8896e38cfb60")}catch{}})();import{createHash}from"node:crypto";import{stableStringify}from"../../core/shared/serialization.js";import{defectRecurrenceItemSignals}from"./defect-recurrence-signals.js";import{buildDefectRecurrenceGraph,readDefectRecurrenceRecord}from"./defect-recurrence-graph.js";const DEFECT_ESCAPE_CLASSES=["production_defect","nightly_regression","scanner_finding","review_caught_late"],DEFECT_GATE_EVIDENCE_DISPOSITIONS=["gate_added","gate_strengthened","explicit_waiver"],MAX_FILE_PATTERN_LENGTH=256,MAX_COMPILED_PATH_PATTERNS=1024,compiledPathPatterns=new Map,CHANGE_INPUT_FIELDS=["files","package_names","item_ids","tags","error_codes"];function uniqueSorted(values){return[...new Set(values.map(value=>value.trim()).filter(Boolean))].sort((left,right)=>left<right?-1:1)}function fingerprint(value){return createHash("sha256").update(stableStringify(value)).digest("hex")}function assertNonEmpty(value,field){if(typeof value!="string"||!value.trim())throw new TypeError(`${field} must be a non-empty string`)}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function isStringArray(value){return Array.isArray(value)&&value.every(entry=>typeof entry=="string")}function assertChangeInput(value,field){if(!isRecord(value))throw new TypeError(`${field} must be an object`);for(const key of CHANGE_INPUT_FIELDS)if(value[key]!==void 0&&!isStringArray(value[key]))throw new TypeError(`${field}.${key} must be an array of strings`);return value}function assertTriggers(value,familyId){if(!isRecord(value))throw new TypeError(`defect recurrence family ${familyId} triggers must be an object`);for(const key of["package_names","item_ids","tags","error_codes"])if(value[key]!==void 0&&!isStringArray(value[key]))throw new TypeError(`defect recurrence family ${familyId} triggers.${key} must be an array of strings`);const filePatterns=value.file_patterns;if(filePatterns!==void 0&&!isStringArray(filePatterns))throw new TypeError(`defect recurrence family ${familyId} triggers.file_patterns must be an array of strings`);for(const pattern of filePatterns??[])if(pattern.length>MAX_FILE_PATTERN_LENGTH)throw new TypeError(`defect recurrence family ${familyId} file pattern exceeds ${MAX_FILE_PATTERN_LENGTH} characters`)}function assertFamilyIdentity(family,ids){if(assertNonEmpty(family.id,"defect recurrence family id"),ids.has(family.id))throw new TypeError(`Duplicate defect recurrence family ${family.id}`);if(ids.add(family.id),!Number.isInteger(family.version)||family.version<1)throw new TypeError(`defect recurrence family ${family.id} version must be a positive integer`);if(!DEFECT_ESCAPE_CLASSES.includes(family.escape_class))throw new TypeError(`defect recurrence family ${family.id} has an invalid escape class`);assertNonEmpty(family.title,`defect recurrence family ${family.id} title`),assertNonEmpty(family.owner_item_id,`defect recurrence family ${family.id} owner_item_id`)}function assertFamilyEvidenceContracts(family){if(!isStringArray(family.historical_item_ids)||family.historical_item_ids.length===0||family.historical_item_ids.some(itemId=>!itemId.trim()))throw new TypeError(`defect recurrence family ${family.id} requires historical_item_ids`);if(assertTriggers(family.triggers,family.id),!isRecord(family.checks)||!isStringArray(family.checks.local)||!isStringArray(family.checks.hosted)||family.checks.local.length===0||family.checks.hosted.length===0||family.checks.local.some(check=>!check.trim())||family.checks.hosted.some(check=>!check.trim()))throw new TypeError(`defect recurrence family ${family.id} checks must contain nonempty local and hosted string arrays`)}function assertFamilyBudget(family){if(!isRecord(family.budget)||typeof family.budget.max_escape_rate!="number"||!Number.isFinite(family.budget.max_escape_rate)||typeof family.budget.max_false_positive_rate!="number"||!Number.isFinite(family.budget.max_false_positive_rate))throw new TypeError(`defect recurrence family ${family.id} requires numeric budgets`);if(family.budget.max_escape_rate<0||family.budget.max_escape_rate>1||family.budget.max_false_positive_rate<0||family.budget.max_false_positive_rate>1)throw new TypeError(`defect recurrence family ${family.id} budgets must be between 0 and 1`)}function assertFamilyNegativeControl(family){const negativeControl=assertChangeInput(family.negative_control,`defect recurrence family ${family.id} negative_control`);if(familyReasons(family,negativeControl,{}).length===0)throw new TypeError(`defect recurrence family ${family.id} negative_control must select its own family`)}function validatePolicy(policy){if(policy.version!==1)throw new TypeError(`Unsupported defect recurrence policy version ${policy.version}`);if(typeof policy.evidence_epoch!="string"||!Number.isFinite(Date.parse(policy.evidence_epoch)))throw new TypeError("defect recurrence evidence_epoch must be an ISO timestamp");const ids=new Set;for(const family of policy.families){if(!isRecord(family))throw new TypeError("defect recurrence family must be an object");assertFamilyIdentity(family,ids),assertFamilyEvidenceContracts(family),assertFamilyBudget(family),assertFamilyNegativeControl(family)}}function pathMatches(pattern,value){let compiled=compiledPathPatterns.get(pattern);if(compiled===void 0){if(compiledPathPatterns.size>=MAX_COMPILED_PATH_PATTERNS){const oldest=compiledPathPatterns.keys().next().value;compiledPathPatterns.delete(oldest)}const escaped=pattern.replaceAll("**","\0").replaceAll(/[|\\{}()[\]^$+?./]/gu,"\\$&").replaceAll("*","[^/]*").replaceAll("\0",".*");compiled=new RegExp(`^${escaped}$`,"u"),compiledPathPatterns.set(pattern,compiled)}return compiled.test(value)}function fileReasons(family,input){const reasons=[],patterns=uniqueSorted(family.triggers.file_patterns??[]);for(const file of uniqueSorted(input.files??[]))for(const pattern of patterns)pathMatches(pattern,file)&&reasons.push({signal:"file",value:file,matched:pattern});return reasons}function exactReasons(family,input){const exactSignals=[{signal:"package",values:uniqueSorted(input.package_names??[]),triggers:uniqueSorted(family.triggers.package_names??[])},{signal:"tag",values:uniqueSorted(input.tags??[]),triggers:uniqueSorted(family.triggers.tags??[])},{signal:"error_code",values:uniqueSorted(input.error_codes??[]),triggers:uniqueSorted(family.triggers.error_codes??[])}],reasons=[];for(const exact of exactSignals){const triggerSet=new Set(exact.triggers);for(const value of exact.values)triggerSet.has(value)&&reasons.push({signal:exact.signal,value,matched:value})}return reasons}function itemReasons(family,input,itemFamilies){const directItemIds=new Set(family.triggers.item_ids??[]);return uniqueSorted(input.item_ids??[]).flatMap(itemId=>directItemIds.has(itemId)||Object.hasOwn(itemFamilies,itemId)&&itemFamilies[itemId].includes(family.id)?[{signal:"item",value:itemId,matched:family.id}]:[])}function familyReasons(family,input,itemFamilies){return[...fileReasons(family,input),...exactReasons(family,input),...itemReasons(family,input,itemFamilies)]}function readRiskCursorOffset(cursor,indexFingerprint){if(!cursor)return 0;let parsed;try{parsed=JSON.parse(Buffer.from(cursor,"base64url").toString("utf8"))}catch{throw new TypeError("defect change-risk cursor is invalid")}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed)||parsed.index_fingerprint!==indexFingerprint||!Number.isInteger(parsed.offset)||parsed.offset<0)throw new TypeError("defect change-risk cursor does not match this index");return parsed.offset}function changeSignalCount(input){return[input.files,input.package_names,input.item_ids,input.tags,input.error_codes].reduce((total,values)=>total+(values?.length??0),0)}function inheritRecurrenceFamilies(families,recurrenceRecords,itemFamilies){const graph=buildDefectRecurrenceGraph(families,recurrenceRecords),fileFamilies=new Map;for(const lineage of graph.lineages)if(lineage.family_ids.length!==0)for(const id of lineage.item_ids){itemFamilies[id]=uniqueSorted([...Object.hasOwn(itemFamilies,id)?itemFamilies[id]:[],...lineage.family_ids]);for(const file of recurrenceRecords.get(id)?.files??[]){const matched=fileFamilies.get(file)??new Set;for(const familyId of lineage.family_ids)matched.add(familyId);fileFamilies.set(file,matched)}}return fileFamilies}function refreshRecurrenceRecords(recurrenceRecords,items){for(const item of items){const record=readDefectRecurrenceRecord(item);record===void 0?recurrenceRecords.delete(item.id):recurrenceRecords.set(item.id,record)}}function compileDirectItemSeeds(families){const historical=new Map,triggers=new Map;for(const family of families)for(const[index,ids]of[[historical,family.historical_item_ids],[triggers,family.triggers.item_ids??[]]])for(const id of ids){const matches=index.get(id)??new Set;matches.add(family.id),index.set(id,matches)}return{historical,triggers}}function directItemMatches(item,families,seeds){const signals=defectRecurrenceItemSignals(item);return[signals.files,signals.package_names,signals.tags,signals.error_codes].some(values=>values&&values.length>0)?families.filter(family=>family.historical_item_ids.includes(item.id)||familyReasons(family,signals,{}).length>0).map(family=>family.id):uniqueSorted([...seeds.historical.get(item.id)??[],...seeds.triggers.get(item.id.trim())??[]])}function buildDefectRecurrenceIndex(policy,items,options={}){validatePolicy(policy);const families=[...policy.families].sort((left,right)=>left.id<right.id?-1:1),policyFingerprint=fingerprint({...policy,families}),changed=new Set(options.changed_item_ids??[]),canReuse=options.previous_index?.policy_fingerprint===policyFingerprint,itemFamilies=Object.assign(Object.create(null),canReuse?Object.fromEntries(Object.entries(options.previous_index?.direct_item_families??options.previous_index?.item_families??{}).filter(([itemId])=>!changed.has(itemId))):{}),itemsReused=canReuse?Object.keys(itemFamilies).length:0,seeds=compileDirectItemSeeds(families);for(const item of items){const matched=directItemMatches(item,families,seeds);matched.length>0?itemFamilies[item.id]=matched:delete itemFamilies[item.id]}const directItemFamilies=Object.fromEntries(Object.entries(itemFamilies).sort(([left],[right])=>left<right?-1:1)),recurrenceRecords=new Map(canReuse?Object.entries(options.previous_index?.recurrence_records??{}).filter(([id])=>!changed.has(id)):[]);refreshRecurrenceRecords(recurrenceRecords,items);const fileFamilies=inheritRecurrenceFamilies(families,recurrenceRecords,itemFamilies),sortedRecords=Object.fromEntries([...recurrenceRecords].sort(([left],[right])=>left<right?-1:1)),sortedFileFamilies=Object.fromEntries([...fileFamilies].sort(([left],[right])=>left<right?-1:1).map(([file,matches])=>[file,[...matches].sort()])),sortedItemFamilies=Object.fromEntries(Object.entries(itemFamilies).sort(([left],[right])=>left<right?-1:1).map(([itemId,familyIds])=>[itemId,uniqueSorted(familyIds)]));return{version:1,policy_fingerprint:policyFingerprint,index_fingerprint:fingerprint({policy_fingerprint:policyFingerprint,item_families:sortedItemFamilies,direct_item_families:directItemFamilies,recurrence_records:sortedRecords,file_families:sortedFileFamilies}),families,item_families:sortedItemFamilies,direct_item_families:directItemFamilies,recurrence_records:sortedRecords,file_families:sortedFileFamilies,build:{items_scanned:items.length,items_reused:itemsReused,items_indexed:Object.keys(sortedItemFamilies).length}}}function analyzeDefectChangeRisk(index,input,options={}){const limit=options.limit??25;if(!Number.isInteger(limit)||limit<1||limit>100)throw new TypeError("defect change-risk limit must be an integer from 1 through 100");const offset=readRiskCursorOffset(options.cursor,index.index_fingerprint),matches=index.families.flatMap(family=>{const reasons=familyReasons(family,input,index.item_families);for(const file of uniqueSorted(input.files??[]))index.file_families&&Object.hasOwn(index.file_families,file)&&index.file_families[file].includes(family.id)&&reasons.push({signal:"file",value:file,matched:`recurs_from:${family.id}`});return reasons.sort((left,right)=>left.signal!==right.signal?left.signal.localeCompare(right.signal):left.value!==right.value?left.value.localeCompare(right.value):left.matched.localeCompare(right.matched)),reasons.length===0?[]:[{family_id:family.id,family_version:family.version,owner_item_id:family.owner_item_id,escape_class:family.escape_class,reasons,local_checks:uniqueSorted(family.checks.local),hosted_checks:uniqueSorted(family.checks.hosted),budget:family.budget}]}),page=matches.slice(offset,offset+limit),nextOffset=offset+page.length,nextCursor=nextOffset<matches.length?Buffer.from(JSON.stringify({index_fingerprint:index.index_fingerprint,offset:nextOffset})).toString("base64url"):void 0,reportWithoutCost={risk_detected:matches.length>0,index_fingerprint:index.index_fingerprint,items:page,total:matches.length,...nextCursor?{next_cursor:nextCursor}:{},required_local_checks:uniqueSorted(matches.flatMap(match=>match.local_checks)),required_hosted_checks:uniqueSorted(matches.flatMap(match=>match.hosted_checks)),row_contract:{row_keys:["items"],jq_selector:".items[]"}};return{...reportWithoutCost,cost:{families_evaluated:index.families.length,signals_evaluated:changeSignalCount(input),families_selected:matches.length,estimated_output_tokens:Math.ceil(JSON.stringify(reportWithoutCost).length/4)}}}function isDefectItem(item){return typeof item.type=="string"&&item.type.toLowerCase()==="issue"||(Array.isArray(item.tags)?item.tags:[]).some(tag=>typeof tag=="string"&&["bug","defect","security"].includes(tag.toLowerCase()))}function nonEmptyString(value){return typeof value=="string"&&value.trim().length>0}function nonEmptyStringArray(value){return Array.isArray(value)&&value.length>0&&value.every(nonEmptyString)}function validEvidence(value,nowMs){if(typeof value!="object"||value===null||Array.isArray(value))return{valid:!1,expired:!1};const evidence=value;if(!DEFECT_GATE_EVIDENCE_DISPOSITIONS.includes(evidence.disposition)||typeof evidence.owner!="string"||!evidence.owner.trim())return{valid:!1,expired:!1};if(evidence.disposition==="explicit_waiver"){const expiry=Date.parse(evidence.waiver_expires_at??"");return{valid:nonEmptyString(evidence.waiver_reason)&&Number.isFinite(expiry)&&expiry>=nowMs,expired:Number.isFinite(expiry)&&expiry<nowMs}}return{valid:nonEmptyString(evidence.gate_id)&&nonEmptyString(evidence.negative_control)&&nonEmptyStringArray(evidence.local_checks)&&nonEmptyStringArray(evidence.hosted_checks),expired:!1}}function evidenceFindings(item,nowMs){const findings=[];if(!Number.isFinite(Date.parse(typeof item.completed_at=="string"?item.completed_at:""))&&!Number.isFinite(Date.parse(typeof item.closed_at=="string"?item.closed_at:""))&&findings.push({item_id:item.id,kind:"invalid_completion_timestamp",detail:`${item.id} requires a valid completed_at or closed_at timestamp after the defect-evidence epoch.`}),typeof item.escape_class!="string"?findings.push({item_id:item.id,kind:"missing_escape_class",detail:`${item.id} requires escape_class after the defect-evidence epoch.`}):DEFECT_ESCAPE_CLASSES.includes(item.escape_class)||findings.push({item_id:item.id,kind:"invalid_escape_class",detail:`${item.id} has unsupported escape_class ${item.escape_class}.`}),item.gate_evidence===void 0)return findings.push({item_id:item.id,kind:"missing_gate_evidence",detail:`${item.id} requires structured gate_evidence after the defect-evidence epoch.`}),findings;const result=validEvidence(item.gate_evidence,nowMs);return result.valid||findings.push({item_id:item.id,kind:result.expired?"expired_waiver":"invalid_gate_evidence",detail:result.expired?`${item.id} carries an expired gate-evidence waiver.`:`${item.id} gate_evidence does not prove a gate or explicit waiver.`}),findings}function evaluateDefectGateEvidence(items,policy,terminalStatuses,now=new Date){validatePolicy(policy);const epochMs=Date.parse(policy.evidence_epoch),terminal=new Set(terminalStatuses),terminalDefects=items.filter(item=>terminal.has(item.status)&&isDefectItem(item)),governed=terminalDefects.filter(item=>{const completedAt=Date.parse(typeof item.completed_at=="string"?item.completed_at:"");if(Number.isFinite(completedAt))return completedAt>=epochMs;const closedAt=Date.parse(typeof item.closed_at=="string"?item.closed_at:"");if(Number.isFinite(closedAt))return closedAt>=epochMs;const createdAt=Date.parse(typeof item.created_at=="string"?item.created_at:"");return!Number.isFinite(createdAt)||createdAt>=epochMs}),classCounts=Object.fromEntries(DEFECT_ESCAPE_CLASSES.map(escapeClass=>[escapeClass,0])),evidenceDispositionCounts=Object.fromEntries(DEFECT_GATE_EVIDENCE_DISPOSITIONS.map(disposition=>[disposition,0])),classified=terminalDefects.filter(item=>typeof item.escape_class=="string"&&DEFECT_ESCAPE_CLASSES.includes(item.escape_class));for(const item of classified)if(classCounts[item.escape_class]+=1,typeof item.gate_evidence=="object"&&item.gate_evidence!==null&&!Array.isArray(item.gate_evidence)){const disposition=item.gate_evidence.disposition;typeof disposition=="string"&&DEFECT_GATE_EVIDENCE_DISPOSITIONS.includes(disposition)&&(evidenceDispositionCounts[disposition]+=1)}const findings=governed.flatMap(item=>evidenceFindings(item,now.getTime()));return findings.sort((left,right)=>left.item_id!==right.item_id?left.item_id.localeCompare(right.item_id):left.kind.localeCompare(right.kind)),{ok:findings.length===0,governed_item_count:governed.length,classified_item_count:classified.length,class_counts:classCounts,evidence_disposition_counts:evidenceDispositionCounts,findings}}class DefectRecurrencePolicyParseError extends TypeError{code="defect_recurrence_policy_invalid"}function parseDefectRecurrencePolicy(value){try{if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("defect recurrence policy must be an object");const policy=value;if(!Array.isArray(policy.families))throw new TypeError("defect recurrence policy families must be an array");return validatePolicy(policy),policy}catch(error){throw error instanceof TypeError?new DefectRecurrencePolicyParseError(error.message,{cause:error}):error}}function parseDefectChangeRiskRequest(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("defect change-risk request must be an object");const request=value,change=assertChangeInput(request.change,"defect change-risk request.change");if(request.cursor!==void 0&&typeof request.cursor!="string")throw new TypeError("defect change-risk request.cursor must be a string");if(request.limit!==void 0&&!Number.isInteger(request.limit))throw new TypeError("defect change-risk request.limit must be an integer");return{policy:parseDefectRecurrencePolicy(request.policy),change,...request.cursor===void 0?{}:{cursor:request.cursor},...request.limit===void 0?{}:{limit:request.limit}}}export{DEFECT_ESCAPE_CLASSES,DEFECT_GATE_EVIDENCE_DISPOSITIONS,DefectRecurrencePolicyParseError,analyzeDefectChangeRisk,buildDefectRecurrenceIndex,evaluateDefectGateEvidence,parseDefectChangeRiskRequest,parseDefectRecurrencePolicy};
|
|
2
2
|
//# sourceMappingURL=defect-recurrence.js.map
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import type { LoadedExtension } from "../../core/extensions/loader.js";
|
|
2
2
|
/** One distinct resolvable pm-cli installation and its extension consumers. */
|
|
3
3
|
export interface ExtensionHostVersionCopy {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
/** Installed pm-cli version. */
|
|
5
|
+
version: string;
|
|
6
|
+
/** Privacy-safe workspace-relative package manifest location. */
|
|
7
|
+
path: string;
|
|
8
|
+
/** Dependency layout that exposed this copy. */
|
|
9
|
+
layout: "host" | "npm" | "pnpm" | "other";
|
|
10
|
+
/** Loaded extensions resolving this copy. */
|
|
11
|
+
consumers: string[];
|
|
12
12
|
}
|
|
13
13
|
/** Extension/host version census returned by the health SDK. */
|
|
14
14
|
export interface ExtensionHostVersionCensus {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
/** Version of the process-hosting pm-cli package. */
|
|
16
|
+
host_version: string | null;
|
|
17
|
+
/** Every distinct relevant copy resolved by the host or an extension. */
|
|
18
|
+
copies: ExtensionHostVersionCopy[];
|
|
19
|
+
/** Copies whose version differs from the process host. */
|
|
20
|
+
mismatches: ExtensionHostVersionCopy[];
|
|
21
|
+
/** Stable health warning tokens for mismatched copies. */
|
|
22
|
+
warnings: string[];
|
|
23
23
|
}
|
|
24
24
|
/** Scan the host plus the nearest pm-cli package resolvable by every loaded extension. */
|
|
25
25
|
export declare function scanExtensionHostVersions(loadedExtensions: readonly LoadedExtension[], workspaceRoot: string, hostPackageRoot?: string): Promise<ExtensionHostVersionCensus>;
|