@unbrained/pm-cli 2026.9.7 → 2026.9.8
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/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +211 -181
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/chunk-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -0
- package/dist/cli-bundle/main.js +20 -20
- 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 +29 -29
- 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 +42 -42
- 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 +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +157 -837
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -0
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +3 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- 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-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/generated-error-code-catalog
|
|
3
|
-
*
|
|
4
|
-
* Generated by scripts/generate-error-code-catalog.mjs. Do not edit manually.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f617ee39-b463-5482-af64-8dc86fe28e71")}catch(e){}}();
|
|
8
|
-
import { definePmErrorCodeCatalog } from "./error-code-catalog.js";
|
|
9
|
-
import { PM_ERROR_CODE_CATALOG_PART_1 } from "./generated/generated-error-code-catalog-part-1.js";
|
|
10
|
-
import { PM_ERROR_CODE_CATALOG_PART_2 } from "./generated/generated-error-code-catalog-part-2.js";
|
|
11
|
-
/** Exhaustive catalog generated from literal error guidance declarations. */
|
|
12
|
-
export const PM_ERROR_CODE_CATALOG = definePmErrorCodeCatalog([
|
|
13
|
-
...PM_ERROR_CODE_CATALOG_PART_1,
|
|
14
|
-
...PM_ERROR_CODE_CATALOG_PART_2,
|
|
15
|
-
]);
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="70a7dc18-ab34-5e17-83eb-f5fac0b7fdd9")}catch(e2){}})();import{definePmErrorCodeCatalog}from"./error-code-catalog.js";import{PM_ERROR_CODE_CATALOG_PART_1}from"./generated/generated-error-code-catalog-part-1.js";import{PM_ERROR_CODE_CATALOG_PART_2}from"./generated/generated-error-code-catalog-part-2.js";const PM_ERROR_CODE_CATALOG=definePmErrorCodeCatalog([...PM_ERROR_CODE_CATALOG_PART_1,...PM_ERROR_CODE_CATALOG_PART_2]);export{PM_ERROR_CODE_CATALOG};
|
|
16
2
|
//# sourceMappingURL=generated-error-code-catalog.js.map
|
|
17
|
-
//# debugId=f617ee39-b463-5482-af64-8dc86fe28e71
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="443beddb-37c9-5244-a157-e07624e4a6d2")}catch(e){}}();
|
|
3
|
-
export {};
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="50fef7d4-7bff-54df-9044-7771edb4337d")}catch(e2){}})();
|
|
4
2
|
//# sourceMappingURL=assurance-action-contracts.js.map
|
|
5
|
-
//# debugId=443beddb-37c9-5244-a157-e07624e4a6d2
|
|
@@ -1,412 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/assurance-action
|
|
3
|
-
*
|
|
4
|
-
* Normalizes the assurance action vocabulary once for CLI, SDK, and MCP hosts.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="811330eb-207d-5e27-9786-72c1fba7d4c9")}catch(e){}}();
|
|
8
|
-
import { createHash } from "node:crypto";
|
|
9
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
10
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
11
|
-
import { stableStringify } from "../../core/shared/serialization.js";
|
|
12
|
-
import { ASSURANCE_GATE_TRIGGERS, evaluateAssuranceGate, getAssuranceDeclaration, listAssuranceDeclarations, listAssuranceVerdicts, putAssuranceDeclaration, recordAssuranceVerdict, removeAssuranceDeclaration, } from "./assurance.js";
|
|
13
|
-
import { ASSURANCE_PRESET_IDS, acceptAssuranceProposals, applyAssurancePreset, createAssurancePreset, deriveAssuranceProposals, promoteAssuranceAssertion, } from "./assurance-presets.js";
|
|
14
|
-
import { MAX_ASSURANCE_VERDICT_LIMIT } from "./assurance-limits.js";
|
|
15
|
-
import { normalizeAssuranceEvaluation, normalizeAssuranceMutation, } from "./assurance-mutation-error.js";
|
|
16
|
-
import { createAssuranceWorkspaceContext, } from "./assurance-runtime.js";
|
|
17
|
-
import { resolvePmRoot } from "../runtime-primitives.js";
|
|
18
|
-
import { parseRuntimeInteger, readRuntimeString } from "../runtime-input.js";
|
|
19
|
-
import { analyzeDefectChangeRisk, buildDefectRecurrenceIndex, parseDefectChangeRiskRequest, } from "./defect-recurrence.js";
|
|
20
|
-
import { defectRecurrenceItemSignals } from "./defect-recurrence-signals.js";
|
|
21
|
-
import { readDefectRecurrenceRecord } from "./defect-recurrence-graph.js";
|
|
22
|
-
import { analyzeDefectRecurrenceCoverage, parseDefectRecurrenceCoverageRequest, } from "./defect-recurrence-coverage.js";
|
|
23
|
-
import { createUnknownSubcommandError } from "../agent/subcommand-recovery.js";
|
|
24
|
-
let riskIndexCache;
|
|
25
|
-
/** Assurance registry and evaluation verbs shared by every transport. */
|
|
26
|
-
export const ASSURANCE_ACTIONS = [
|
|
27
|
-
"list",
|
|
28
|
-
"show",
|
|
29
|
-
"put",
|
|
30
|
-
"remove",
|
|
31
|
-
"run",
|
|
32
|
-
"verdicts",
|
|
33
|
-
"presets",
|
|
34
|
-
"apply",
|
|
35
|
-
"derive",
|
|
36
|
-
"promote",
|
|
37
|
-
"risk",
|
|
38
|
-
"lineages",
|
|
39
|
-
];
|
|
40
|
-
/** Assurance declaration kinds shared by every transport. */
|
|
41
|
-
export const ASSURANCE_DECLARATION_KINDS = [
|
|
42
|
-
"measurement",
|
|
43
|
-
"assertion",
|
|
44
|
-
"gate",
|
|
45
|
-
];
|
|
46
|
-
function parseAction(value) {
|
|
47
|
-
if (ASSURANCE_ACTIONS.includes(value)) {
|
|
48
|
-
return value;
|
|
49
|
-
}
|
|
50
|
-
throw createUnknownSubcommandError({
|
|
51
|
-
command_path: "assurance",
|
|
52
|
-
token: value,
|
|
53
|
-
allowed: ASSURANCE_ACTIONS,
|
|
54
|
-
display_name: "assurance action",
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/** Throw the shared structured usage refusal for a missing assurance operand. */
|
|
58
|
-
function missingAssuranceArgument(operand, detail, example) {
|
|
59
|
-
throw new PmCliError(detail, EXIT_CODE.USAGE, {
|
|
60
|
-
code: "missing_required_argument",
|
|
61
|
-
required: `Provide the missing assurance operand: ${operand}.`,
|
|
62
|
-
examples: [example],
|
|
63
|
-
recovery: { missing: [operand] },
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function parseKind(value) {
|
|
67
|
-
if (!value) {
|
|
68
|
-
return missingAssuranceArgument("kind", `Assurance declaration kind is required. Expected: ${ASSURANCE_DECLARATION_KINDS.join(", ")}`, "pm assurance list measurement");
|
|
69
|
-
}
|
|
70
|
-
if (ASSURANCE_DECLARATION_KINDS.includes(value)) {
|
|
71
|
-
return value;
|
|
72
|
-
}
|
|
73
|
-
throw new PmCliError(`Assurance declaration kind is required. Expected: ${ASSURANCE_DECLARATION_KINDS.join(", ")}`, EXIT_CODE.USAGE);
|
|
74
|
-
}
|
|
75
|
-
function parsePreset(value) {
|
|
76
|
-
if (!value) {
|
|
77
|
-
return missingAssuranceArgument("preset", `Assurance preset is required. Expected: ${ASSURANCE_PRESET_IDS.join(", ")}`, "pm assurance apply software-delivery --owner <pm-item-id>");
|
|
78
|
-
}
|
|
79
|
-
if (ASSURANCE_PRESET_IDS.includes(value)) {
|
|
80
|
-
return value;
|
|
81
|
-
}
|
|
82
|
-
throw new PmCliError(`Assurance preset is required. Expected: ${ASSURANCE_PRESET_IDS.join(", ")}`, EXIT_CODE.USAGE);
|
|
83
|
-
}
|
|
84
|
-
function requireOwner(input) {
|
|
85
|
-
if (input.owner?.trim())
|
|
86
|
-
return input.owner.trim();
|
|
87
|
-
return missingAssuranceArgument("owner", "assurance preset and derivation actions require --owner <pm-item-id>", "pm assurance apply software-delivery --owner <pm-item-id>");
|
|
88
|
-
}
|
|
89
|
-
function parseDefinition(kind, value) {
|
|
90
|
-
let parsed = value;
|
|
91
|
-
if (typeof value === "string") {
|
|
92
|
-
if (!value.trim())
|
|
93
|
-
parsed = undefined;
|
|
94
|
-
else {
|
|
95
|
-
try {
|
|
96
|
-
parsed = JSON.parse(value);
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
throw new PmCliError("assurance definition must be valid JSON", EXIT_CODE.USAGE, { reason: error instanceof Error ? error.message : "invalid_json" });
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
104
|
-
throw new PmCliError("assurance put requires a JSON object definition", EXIT_CODE.USAGE);
|
|
105
|
-
}
|
|
106
|
-
if (kind === "measurement")
|
|
107
|
-
return parsed;
|
|
108
|
-
if (kind === "assertion")
|
|
109
|
-
return parsed;
|
|
110
|
-
return parsed;
|
|
111
|
-
}
|
|
112
|
-
async function readDocument(pmRoot) {
|
|
113
|
-
const [measurements, assertions, gates] = await Promise.all([
|
|
114
|
-
listAssuranceDeclarations(pmRoot, "measurement"),
|
|
115
|
-
listAssuranceDeclarations(pmRoot, "assertion"),
|
|
116
|
-
listAssuranceDeclarations(pmRoot, "gate"),
|
|
117
|
-
]);
|
|
118
|
-
return {
|
|
119
|
-
version: 1,
|
|
120
|
-
measurements: measurements.items,
|
|
121
|
-
assertions: assertions.items,
|
|
122
|
-
gates: gates.items,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
/** Apply the common id-only projection without weakening the full audit receipt. */
|
|
126
|
-
function projectMutationReceipt(receipt, idOnly) {
|
|
127
|
-
return idOnly === true ? { id: receipt.id } : receipt;
|
|
128
|
-
}
|
|
129
|
-
async function authorizedDecisionIds(pmRoot, definition) {
|
|
130
|
-
const decisionId = definition.authorization_decision;
|
|
131
|
-
if (!decisionId)
|
|
132
|
-
return [];
|
|
133
|
-
const context = await createAssuranceWorkspaceContext(pmRoot, {
|
|
134
|
-
include_history: false,
|
|
135
|
-
resolve_tree: false,
|
|
136
|
-
});
|
|
137
|
-
const decision = context.items.find((item) => item.id === decisionId);
|
|
138
|
-
const terminalStatuses = new Set(context.terminal_statuses);
|
|
139
|
-
if (!decision ||
|
|
140
|
-
decision.type.toLowerCase() !== "decision" ||
|
|
141
|
-
!terminalStatuses.has(decision.status)) {
|
|
142
|
-
throw new PmCliError(`Assurance authorization ${decisionId} must name a terminal Decision item`, EXIT_CODE.USAGE);
|
|
143
|
-
}
|
|
144
|
-
return [decision.id];
|
|
145
|
-
}
|
|
146
|
-
/** Validate and execute the bounded durable-verdict listing transport. */
|
|
147
|
-
async function runVerdictsAction(input, pmRoot) {
|
|
148
|
-
const limit = parseRuntimeInteger(input.limit, "assurance verdict limit");
|
|
149
|
-
if (limit !== undefined &&
|
|
150
|
-
(limit < 1 || limit > MAX_ASSURANCE_VERDICT_LIMIT)) {
|
|
151
|
-
throw new PmCliError(`assurance verdict limit must be an integer from 1 through ${MAX_ASSURANCE_VERDICT_LIMIT}`, EXIT_CODE.USAGE);
|
|
152
|
-
}
|
|
153
|
-
const items = await listAssuranceVerdicts(pmRoot, {
|
|
154
|
-
gate_id: input.id ?? input.gate,
|
|
155
|
-
limit,
|
|
156
|
-
});
|
|
157
|
-
return {
|
|
158
|
-
items,
|
|
159
|
-
count: items.length,
|
|
160
|
-
row_contract: { row_keys: ["items"], jq_selector: ".items[]" },
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
async function runAdoptionAction(action, input, pmRoot) {
|
|
164
|
-
if (action === "presets") {
|
|
165
|
-
if (input.preset ?? input.id) {
|
|
166
|
-
return createAssurancePreset(parsePreset(input.preset ?? input.id), requireOwner(input));
|
|
167
|
-
}
|
|
168
|
-
const items = ASSURANCE_PRESET_IDS.map((id) => {
|
|
169
|
-
const preset = createAssurancePreset(id, "pm-owner");
|
|
170
|
-
return { id, title: preset.title, description: preset.description };
|
|
171
|
-
});
|
|
172
|
-
return {
|
|
173
|
-
items,
|
|
174
|
-
count: items.length,
|
|
175
|
-
row_contract: { row_keys: ["items"], jq_selector: ".items[]" },
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
if (action === "apply") {
|
|
179
|
-
return normalizeAssuranceMutation(() => applyAssurancePreset(pmRoot, parsePreset(input.preset ?? input.id), requireOwner(input), { author: input.author, message: input.message }));
|
|
180
|
-
}
|
|
181
|
-
if (action === "derive") {
|
|
182
|
-
const proposals = await deriveAssuranceProposals(await createAssuranceWorkspaceContext(pmRoot, {
|
|
183
|
-
resolve_tree: false,
|
|
184
|
-
trigger: "derive",
|
|
185
|
-
}), requireOwner(input));
|
|
186
|
-
const applied = input.apply
|
|
187
|
-
? await normalizeAssuranceMutation(() => acceptAssuranceProposals(pmRoot, proposals, {
|
|
188
|
-
author: input.author,
|
|
189
|
-
message: input.message ?? "Accept observation-derived assurance proposals",
|
|
190
|
-
}))
|
|
191
|
-
: undefined;
|
|
192
|
-
return {
|
|
193
|
-
items: proposals,
|
|
194
|
-
count: proposals.length,
|
|
195
|
-
...(applied ? { applied } : {}),
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
if (!input.id) {
|
|
199
|
-
return missingAssuranceArgument("assertion-id", "assurance promote requires an assertion id", "pm assurance promote <assertion-id> --enforcement warn");
|
|
200
|
-
}
|
|
201
|
-
if (input.enforcement !== "warn" && input.enforcement !== "block") {
|
|
202
|
-
throw new PmCliError("assurance promote requires --enforcement warn|block", EXIT_CODE.USAGE);
|
|
203
|
-
}
|
|
204
|
-
const definition = (await getAssuranceDeclaration(pmRoot, "assertion", input.id));
|
|
205
|
-
return normalizeAssuranceMutation(() => promoteAssuranceAssertion(pmRoot, definition, input.enforcement, {
|
|
206
|
-
author: input.author,
|
|
207
|
-
message: input.message,
|
|
208
|
-
}));
|
|
209
|
-
}
|
|
210
|
-
async function runGateAction(input, pmRoot, runtime) {
|
|
211
|
-
if (!input.id) {
|
|
212
|
-
return missingAssuranceArgument("gate-id", "assurance run requires a gate id", "pm assurance run <gate-id> --trigger ci --dry-run");
|
|
213
|
-
}
|
|
214
|
-
const gateId = input.id;
|
|
215
|
-
if (!input.trigger) {
|
|
216
|
-
throw new PmCliError("assurance run requires a trigger", EXIT_CODE.USAGE);
|
|
217
|
-
}
|
|
218
|
-
if (!ASSURANCE_GATE_TRIGGERS.includes(input.trigger)) {
|
|
219
|
-
throw new PmCliError(`Unknown assurance trigger ${input.trigger}. Expected: ${ASSURANCE_GATE_TRIGGERS.join(", ")}`, EXIT_CODE.USAGE);
|
|
220
|
-
}
|
|
221
|
-
const trigger = input.trigger;
|
|
222
|
-
const [document, workspaceContext] = await Promise.all([
|
|
223
|
-
readDocument(pmRoot),
|
|
224
|
-
createAssuranceWorkspaceContext(pmRoot, {
|
|
225
|
-
...runtime.workspace,
|
|
226
|
-
tree_id: input.tree,
|
|
227
|
-
trigger,
|
|
228
|
-
}),
|
|
229
|
-
]);
|
|
230
|
-
const verdict = await normalizeAssuranceEvaluation(() => evaluateAssuranceGate(gateId, document, workspaceContext, {
|
|
231
|
-
trigger,
|
|
232
|
-
dry_run: input.dry_run === true,
|
|
233
|
-
}));
|
|
234
|
-
if (!verdict.dry_run) {
|
|
235
|
-
await recordAssuranceVerdict(pmRoot, verdict, {
|
|
236
|
-
author: input.author,
|
|
237
|
-
message: input.message,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
return verdict;
|
|
241
|
-
}
|
|
242
|
-
/** Normalize a request-validation failure into the shared usage-error contract. */
|
|
243
|
-
function throwRiskUsageError(error) {
|
|
244
|
-
if (error instanceof PmCliError)
|
|
245
|
-
throw error;
|
|
246
|
-
throw new PmCliError(error instanceof Error
|
|
247
|
-
? error.message
|
|
248
|
-
: "assurance risk request is invalid", EXIT_CODE.USAGE);
|
|
249
|
-
}
|
|
250
|
-
/** Parse JSON or object risk definitions without wrapping workspace failures. */
|
|
251
|
-
function parseRecurrenceActionRequest(input) {
|
|
252
|
-
if (input.limit !== undefined) {
|
|
253
|
-
throw new PmCliError(`assurance ${input.action} does not accept --limit; set limit inside the definition`, EXIT_CODE.USAGE);
|
|
254
|
-
}
|
|
255
|
-
let definition = input.definition;
|
|
256
|
-
if (typeof definition === "string") {
|
|
257
|
-
try {
|
|
258
|
-
definition = JSON.parse(definition);
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
throw new PmCliError(`assurance ${input.action} definition must be valid JSON`, EXIT_CODE.USAGE, { reason: error instanceof Error ? error.message : "invalid_json" });
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
try {
|
|
265
|
-
return input.action === "lineages"
|
|
266
|
-
? parseDefectRecurrenceCoverageRequest(definition)
|
|
267
|
-
: parseDefectChangeRiskRequest(definition);
|
|
268
|
-
}
|
|
269
|
-
catch (error) {
|
|
270
|
-
return throwRiskUsageError(error);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
/** Derive the exact sparse replacement and deletion set for a cached index. */
|
|
274
|
-
function changedRiskItemIds(cached, current) {
|
|
275
|
-
const changed = new Set();
|
|
276
|
-
for (const [itemId, itemFingerprint] of current) {
|
|
277
|
-
if (cached.item_fingerprints.get(itemId) !== itemFingerprint)
|
|
278
|
-
changed.add(itemId);
|
|
279
|
-
}
|
|
280
|
-
for (const itemId of cached.item_fingerprints.keys()) {
|
|
281
|
-
if (!current.has(itemId))
|
|
282
|
-
changed.add(itemId);
|
|
283
|
-
}
|
|
284
|
-
return changed;
|
|
285
|
-
}
|
|
286
|
-
/** Build and retain a safely invalidated bounded process-local recurrence index. */
|
|
287
|
-
function buildCachedRiskIndex(pmRoot, request, items) {
|
|
288
|
-
const policySerialized = stableStringify(request.policy);
|
|
289
|
-
const cached = riskIndexCache?.pm_root === pmRoot ? riskIndexCache : undefined;
|
|
290
|
-
const itemFingerprints = new Map(items.map((item) => [
|
|
291
|
-
item.id,
|
|
292
|
-
createHash("sha256")
|
|
293
|
-
.update(stableStringify([
|
|
294
|
-
defectRecurrenceItemSignals(item),
|
|
295
|
-
readDefectRecurrenceRecord(item),
|
|
296
|
-
]))
|
|
297
|
-
.digest("hex"),
|
|
298
|
-
]));
|
|
299
|
-
const reusable = cached?.policy_serialized === policySerialized ? cached : undefined;
|
|
300
|
-
const changed = reusable
|
|
301
|
-
? changedRiskItemIds(reusable, itemFingerprints)
|
|
302
|
-
: new Set();
|
|
303
|
-
const index = buildDefectRecurrenceIndex(request.policy, reusable ? items.filter((item) => changed.has(item.id)) : items, reusable
|
|
304
|
-
? { previous_index: reusable.index, changed_item_ids: [...changed] }
|
|
305
|
-
: {});
|
|
306
|
-
riskIndexCache = {
|
|
307
|
-
pm_root: pmRoot,
|
|
308
|
-
policy_serialized: policySerialized,
|
|
309
|
-
item_fingerprints: itemFingerprints,
|
|
310
|
-
index,
|
|
311
|
-
};
|
|
312
|
-
return index;
|
|
313
|
-
}
|
|
314
|
-
/** Evaluate one serialized change-risk request against authoritative PM metadata. */
|
|
315
|
-
async function runRecurrenceAction(input, pmRoot) {
|
|
316
|
-
const request = parseRecurrenceActionRequest(input);
|
|
317
|
-
const context = await createAssuranceWorkspaceContext(pmRoot, {
|
|
318
|
-
strict_read: true,
|
|
319
|
-
include_history: false,
|
|
320
|
-
resolve_tree: false,
|
|
321
|
-
});
|
|
322
|
-
try {
|
|
323
|
-
if (!("change" in request)) {
|
|
324
|
-
return analyzeDefectRecurrenceCoverage(request.policy, context.items, request);
|
|
325
|
-
}
|
|
326
|
-
return analyzeDefectChangeRisk(buildCachedRiskIndex(pmRoot, request, context.items), request.change, { cursor: request.cursor, limit: request.limit });
|
|
327
|
-
}
|
|
328
|
-
catch (error) {
|
|
329
|
-
return throwRiskUsageError(error);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
/** Execute one assurance request through the public assurance SDK primitives. */
|
|
333
|
-
export async function runAssuranceAction(input, global = {}, runtime = {}) {
|
|
334
|
-
const action = parseAction(input.action);
|
|
335
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
336
|
-
if (action === "presets" ||
|
|
337
|
-
action === "apply" ||
|
|
338
|
-
action === "derive" ||
|
|
339
|
-
action === "promote") {
|
|
340
|
-
return runAdoptionAction(action, input, pmRoot);
|
|
341
|
-
}
|
|
342
|
-
if (action === "verdicts") {
|
|
343
|
-
return runVerdictsAction(input, pmRoot);
|
|
344
|
-
}
|
|
345
|
-
if (action === "run") {
|
|
346
|
-
return runGateAction(input, pmRoot, runtime);
|
|
347
|
-
}
|
|
348
|
-
if (["risk", "lineages"].includes(action)) {
|
|
349
|
-
return runRecurrenceAction(input, pmRoot);
|
|
350
|
-
}
|
|
351
|
-
const kind = parseKind(input.kind);
|
|
352
|
-
if (action === "list")
|
|
353
|
-
return listAssuranceDeclarations(pmRoot, kind);
|
|
354
|
-
if (!input.id) {
|
|
355
|
-
return missingAssuranceArgument("id", `assurance ${action} requires an id`, `pm assurance ${action} ${kind} <id>`);
|
|
356
|
-
}
|
|
357
|
-
const id = input.id;
|
|
358
|
-
if (action === "show") {
|
|
359
|
-
return getAssuranceDeclaration(pmRoot, kind, id);
|
|
360
|
-
}
|
|
361
|
-
if (action === "remove") {
|
|
362
|
-
const receipt = await normalizeAssuranceMutation(() => removeAssuranceDeclaration(pmRoot, kind, id, {
|
|
363
|
-
author: input.author,
|
|
364
|
-
message: input.message,
|
|
365
|
-
}));
|
|
366
|
-
return projectMutationReceipt(receipt, input.idOnly);
|
|
367
|
-
}
|
|
368
|
-
const definition = parseDefinition(kind, input.definition);
|
|
369
|
-
if (definition.id !== id) {
|
|
370
|
-
throw new PmCliError(`Assurance definition id ${definition.id} does not match requested id ${id}`, EXIT_CODE.USAGE);
|
|
371
|
-
}
|
|
372
|
-
const mutationOptions = {
|
|
373
|
-
author: input.author,
|
|
374
|
-
message: input.message,
|
|
375
|
-
...(kind === "assertion"
|
|
376
|
-
? {
|
|
377
|
-
authorized_decision_ids: await authorizedDecisionIds(pmRoot, definition),
|
|
378
|
-
}
|
|
379
|
-
: {}),
|
|
380
|
-
};
|
|
381
|
-
const receipt = await normalizeAssuranceMutation(() => putAssuranceDeclaration(pmRoot, kind, definition, mutationOptions));
|
|
382
|
-
return projectMutationReceipt(receipt, input.idOnly);
|
|
383
|
-
}
|
|
384
|
-
/** Normalize a generic SDK or MCP argument envelope into one assurance request. */
|
|
385
|
-
export function runAssuranceDispatch(args, options, global) {
|
|
386
|
-
const merged = { ...args, ...options };
|
|
387
|
-
return runAssuranceAction({
|
|
388
|
-
action: readRuntimeString(merged, "subcommand") ??
|
|
389
|
-
readRuntimeString(merged, "assuranceAction") ??
|
|
390
|
-
readRuntimeString(merged, "operation") ??
|
|
391
|
-
"",
|
|
392
|
-
kind: readRuntimeString(merged, "kind"),
|
|
393
|
-
id: readRuntimeString(merged, "id"),
|
|
394
|
-
definition: merged.definition,
|
|
395
|
-
trigger: readRuntimeString(merged, "trigger"),
|
|
396
|
-
tree: readRuntimeString(merged, "treeId") ??
|
|
397
|
-
readRuntimeString(merged, "tree"),
|
|
398
|
-
gate: readRuntimeString(merged, "gate"),
|
|
399
|
-
limit: parseRuntimeInteger(merged.limit, "assurance verdict limit"),
|
|
400
|
-
dry_run: merged.dryRun === true || merged.dry_run === true,
|
|
401
|
-
fullChangedFields: merged.fullChangedFields === true,
|
|
402
|
-
idOnly: merged.idOnly === true,
|
|
403
|
-
author: readRuntimeString(merged, "author"),
|
|
404
|
-
message: readRuntimeString(merged, "message"),
|
|
405
|
-
preset: readRuntimeString(merged, "preset"),
|
|
406
|
-
owner: readRuntimeString(merged, "owner"),
|
|
407
|
-
apply: merged.apply === true,
|
|
408
|
-
enforcement: readRuntimeString(merged, "enforcement"),
|
|
409
|
-
}, global);
|
|
410
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="77425e45-ae19-569b-b196-e024f9e2729f")}catch(e2){}})();import{createHash}from"node:crypto";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{stableStringify}from"../../core/shared/serialization.js";import{ASSURANCE_GATE_TRIGGERS,evaluateAssuranceGate,getAssuranceDeclaration,listAssuranceDeclarations,listAssuranceVerdicts,putAssuranceDeclaration,recordAssuranceVerdict,removeAssuranceDeclaration}from"./assurance.js";import{ASSURANCE_PRESET_IDS,acceptAssuranceProposals,applyAssurancePreset,createAssurancePreset,deriveAssuranceProposals,promoteAssuranceAssertion}from"./assurance-presets.js";import{MAX_ASSURANCE_VERDICT_LIMIT}from"./assurance-limits.js";import{normalizeAssuranceEvaluation,normalizeAssuranceMutation}from"./assurance-mutation-error.js";import{createAssuranceWorkspaceContext}from"./assurance-runtime.js";import{resolvePmRoot}from"../runtime-primitives.js";import{parseRuntimeInteger,readRuntimeString}from"../runtime-input.js";import{analyzeDefectChangeRisk,buildDefectRecurrenceIndex,parseDefectChangeRiskRequest}from"./defect-recurrence.js";import{defectRecurrenceItemSignals}from"./defect-recurrence-signals.js";import{readDefectRecurrenceRecord}from"./defect-recurrence-graph.js";import{analyzeDefectRecurrenceCoverage,parseDefectRecurrenceCoverageRequest}from"./defect-recurrence-coverage.js";import{createUnknownSubcommandError}from"../agent/subcommand-recovery.js";let riskIndexCache;const ASSURANCE_ACTIONS=["list","show","put","remove","run","verdicts","presets","apply","derive","promote","risk","lineages"];const ASSURANCE_DECLARATION_KINDS=["measurement","assertion","gate"];function parseAction(value){if(ASSURANCE_ACTIONS.includes(value)){return value}throw createUnknownSubcommandError({command_path:"assurance",token:value,allowed:ASSURANCE_ACTIONS,display_name:"assurance action"})}function missingAssuranceArgument(operand,detail,example){throw new PmCliError(detail,EXIT_CODE.USAGE,{code:"missing_required_argument",required:`Provide the missing assurance operand: ${operand}.`,examples:[example],recovery:{missing:[operand]}})}function parseKind(value){if(!value){return missingAssuranceArgument("kind",`Assurance declaration kind is required. Expected: ${ASSURANCE_DECLARATION_KINDS.join(", ")}`,"pm assurance list measurement")}if(ASSURANCE_DECLARATION_KINDS.includes(value)){return value}throw new PmCliError(`Assurance declaration kind is required. Expected: ${ASSURANCE_DECLARATION_KINDS.join(", ")}`,EXIT_CODE.USAGE)}function parsePreset(value){if(!value){return missingAssuranceArgument("preset",`Assurance preset is required. Expected: ${ASSURANCE_PRESET_IDS.join(", ")}`,"pm assurance apply software-delivery --owner <pm-item-id>")}if(ASSURANCE_PRESET_IDS.includes(value)){return value}throw new PmCliError(`Assurance preset is required. Expected: ${ASSURANCE_PRESET_IDS.join(", ")}`,EXIT_CODE.USAGE)}function requireOwner(input){if(input.owner?.trim())return input.owner.trim();return missingAssuranceArgument("owner","assurance preset and derivation actions require --owner <pm-item-id>","pm assurance apply software-delivery --owner <pm-item-id>")}function parseDefinition(kind,value){let parsed=value;if(typeof value==="string"){if(!value.trim())parsed=void 0;else{try{parsed=JSON.parse(value)}catch(error){throw new PmCliError("assurance definition must be valid JSON",EXIT_CODE.USAGE,{reason:error instanceof Error?error.message:"invalid_json"})}}}if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)){throw new PmCliError("assurance put requires a JSON object definition",EXIT_CODE.USAGE)}if(kind==="measurement")return parsed;if(kind==="assertion")return parsed;return parsed}async function readDocument(pmRoot){const[measurements,assertions,gates]=await Promise.all([listAssuranceDeclarations(pmRoot,"measurement"),listAssuranceDeclarations(pmRoot,"assertion"),listAssuranceDeclarations(pmRoot,"gate")]);return{version:1,measurements:measurements.items,assertions:assertions.items,gates:gates.items}}function projectMutationReceipt(receipt,idOnly){return idOnly===true?{id:receipt.id}:receipt}async function authorizedDecisionIds(pmRoot,definition){const decisionId=definition.authorization_decision;if(!decisionId)return[];const context=await createAssuranceWorkspaceContext(pmRoot,{include_history:false,resolve_tree:false});const decision=context.items.find(item=>item.id===decisionId);const terminalStatuses=new Set(context.terminal_statuses);if(!decision||decision.type.toLowerCase()!=="decision"||!terminalStatuses.has(decision.status)){throw new PmCliError(`Assurance authorization ${decisionId} must name a terminal Decision item`,EXIT_CODE.USAGE)}return[decision.id]}async function runVerdictsAction(input,pmRoot){const limit=parseRuntimeInteger(input.limit,"assurance verdict limit");if(limit!==void 0&&(limit<1||limit>MAX_ASSURANCE_VERDICT_LIMIT)){throw new PmCliError(`assurance verdict limit must be an integer from 1 through ${MAX_ASSURANCE_VERDICT_LIMIT}`,EXIT_CODE.USAGE)}const items=await listAssuranceVerdicts(pmRoot,{gate_id:input.id??input.gate,limit});return{items,count:items.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}async function runAdoptionAction(action,input,pmRoot){if(action==="presets"){if(input.preset??input.id){return createAssurancePreset(parsePreset(input.preset??input.id),requireOwner(input))}const items=ASSURANCE_PRESET_IDS.map(id=>{const preset=createAssurancePreset(id,"pm-owner");return{id,title:preset.title,description:preset.description}});return{items,count:items.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}if(action==="apply"){return normalizeAssuranceMutation(()=>applyAssurancePreset(pmRoot,parsePreset(input.preset??input.id),requireOwner(input),{author:input.author,message:input.message}))}if(action==="derive"){const proposals=await deriveAssuranceProposals(await createAssuranceWorkspaceContext(pmRoot,{resolve_tree:false,trigger:"derive"}),requireOwner(input));const applied=input.apply?await normalizeAssuranceMutation(()=>acceptAssuranceProposals(pmRoot,proposals,{author:input.author,message:input.message??"Accept observation-derived assurance proposals"})):void 0;return{items:proposals,count:proposals.length,...applied?{applied}:{}}}if(!input.id){return missingAssuranceArgument("assertion-id","assurance promote requires an assertion id","pm assurance promote <assertion-id> --enforcement warn")}if(input.enforcement!=="warn"&&input.enforcement!=="block"){throw new PmCliError("assurance promote requires --enforcement warn|block",EXIT_CODE.USAGE)}const definition=await getAssuranceDeclaration(pmRoot,"assertion",input.id);return normalizeAssuranceMutation(()=>promoteAssuranceAssertion(pmRoot,definition,input.enforcement,{author:input.author,message:input.message}))}async function runGateAction(input,pmRoot,runtime){if(!input.id){return missingAssuranceArgument("gate-id","assurance run requires a gate id","pm assurance run <gate-id> --trigger ci --dry-run")}const gateId=input.id;if(!input.trigger){throw new PmCliError("assurance run requires a trigger",EXIT_CODE.USAGE)}if(!ASSURANCE_GATE_TRIGGERS.includes(input.trigger)){throw new PmCliError(`Unknown assurance trigger ${input.trigger}. Expected: ${ASSURANCE_GATE_TRIGGERS.join(", ")}`,EXIT_CODE.USAGE)}const trigger=input.trigger;const[document,workspaceContext]=await Promise.all([readDocument(pmRoot),createAssuranceWorkspaceContext(pmRoot,{...runtime.workspace,tree_id:input.tree,trigger})]);const verdict=await normalizeAssuranceEvaluation(()=>evaluateAssuranceGate(gateId,document,workspaceContext,{trigger,dry_run:input.dry_run===true}));if(!verdict.dry_run){await recordAssuranceVerdict(pmRoot,verdict,{author:input.author,message:input.message})}return verdict}function throwRiskUsageError(error){if(error instanceof PmCliError)throw error;throw new PmCliError(error instanceof Error?error.message:"assurance risk request is invalid",EXIT_CODE.USAGE)}function parseRecurrenceActionRequest(input){if(input.limit!==void 0){throw new PmCliError(`assurance ${input.action} does not accept --limit; set limit inside the definition`,EXIT_CODE.USAGE)}let definition=input.definition;if(typeof definition==="string"){try{definition=JSON.parse(definition)}catch(error){throw new PmCliError(`assurance ${input.action} definition must be valid JSON`,EXIT_CODE.USAGE,{reason:error instanceof Error?error.message:"invalid_json"})}}try{return input.action==="lineages"?parseDefectRecurrenceCoverageRequest(definition):parseDefectChangeRiskRequest(definition)}catch(error){return throwRiskUsageError(error)}}function changedRiskItemIds(cached,current){const changed=new Set;for(const[itemId,itemFingerprint]of current){if(cached.item_fingerprints.get(itemId)!==itemFingerprint)changed.add(itemId)}for(const itemId of cached.item_fingerprints.keys()){if(!current.has(itemId))changed.add(itemId)}return changed}function buildCachedRiskIndex(pmRoot,request,items){const policySerialized=stableStringify(request.policy);const cached=riskIndexCache?.pm_root===pmRoot?riskIndexCache:void 0;const itemFingerprints=new Map(items.map(item=>[item.id,createHash("sha256").update(stableStringify([defectRecurrenceItemSignals(item),readDefectRecurrenceRecord(item)])).digest("hex")]));const reusable=cached?.policy_serialized===policySerialized?cached:void 0;const changed=reusable?changedRiskItemIds(reusable,itemFingerprints):new Set;const index=buildDefectRecurrenceIndex(request.policy,reusable?items.filter(item=>changed.has(item.id)):items,reusable?{previous_index:reusable.index,changed_item_ids:[...changed]}:{});riskIndexCache={pm_root:pmRoot,policy_serialized:policySerialized,item_fingerprints:itemFingerprints,index};return index}async function runRecurrenceAction(input,pmRoot){const request=parseRecurrenceActionRequest(input);const context=await createAssuranceWorkspaceContext(pmRoot,{strict_read:true,include_history:false,resolve_tree:false});try{if(!("change"in request)){return analyzeDefectRecurrenceCoverage(request.policy,context.items,request)}return analyzeDefectChangeRisk(buildCachedRiskIndex(pmRoot,request,context.items),request.change,{cursor:request.cursor,limit:request.limit})}catch(error){return throwRiskUsageError(error)}}async function runAssuranceAction(input,global2={},runtime={}){const action=parseAction(input.action);const pmRoot=resolvePmRoot(process.cwd(),global2.path);if(action==="presets"||action==="apply"||action==="derive"||action==="promote"){return runAdoptionAction(action,input,pmRoot)}if(action==="verdicts"){return runVerdictsAction(input,pmRoot)}if(action==="run"){return runGateAction(input,pmRoot,runtime)}if(["risk","lineages"].includes(action)){return runRecurrenceAction(input,pmRoot)}const kind=parseKind(input.kind);if(action==="list")return listAssuranceDeclarations(pmRoot,kind);if(!input.id){return missingAssuranceArgument("id",`assurance ${action} requires an id`,`pm assurance ${action} ${kind} <id>`)}const id=input.id;if(action==="show"){return getAssuranceDeclaration(pmRoot,kind,id)}if(action==="remove"){const receipt2=await normalizeAssuranceMutation(()=>removeAssuranceDeclaration(pmRoot,kind,id,{author:input.author,message:input.message}));return projectMutationReceipt(receipt2,input.idOnly)}const definition=parseDefinition(kind,input.definition);if(definition.id!==id){throw new PmCliError(`Assurance definition id ${definition.id} does not match requested id ${id}`,EXIT_CODE.USAGE)}const mutationOptions={author:input.author,message:input.message,...kind==="assertion"?{authorized_decision_ids:await authorizedDecisionIds(pmRoot,definition)}:{}};const receipt=await normalizeAssuranceMutation(()=>putAssuranceDeclaration(pmRoot,kind,definition,mutationOptions));return projectMutationReceipt(receipt,input.idOnly)}function runAssuranceDispatch(args,options,global2){const merged={...args,...options};return runAssuranceAction({action:readRuntimeString(merged,"subcommand")??readRuntimeString(merged,"assuranceAction")??readRuntimeString(merged,"operation")??"",kind:readRuntimeString(merged,"kind"),id:readRuntimeString(merged,"id"),definition:merged.definition,trigger:readRuntimeString(merged,"trigger"),tree:readRuntimeString(merged,"treeId")??readRuntimeString(merged,"tree"),gate:readRuntimeString(merged,"gate"),limit:parseRuntimeInteger(merged.limit,"assurance verdict limit"),dry_run:merged.dryRun===true||merged.dry_run===true,fullChangedFields:merged.fullChangedFields===true,idOnly:merged.idOnly===true,author:readRuntimeString(merged,"author"),message:readRuntimeString(merged,"message"),preset:readRuntimeString(merged,"preset"),owner:readRuntimeString(merged,"owner"),apply:merged.apply===true,enforcement:readRuntimeString(merged,"enforcement")},global2)}export{ASSURANCE_ACTIONS,ASSURANCE_DECLARATION_KINDS,runAssuranceAction,runAssuranceDispatch};
|
|
411
2
|
//# sourceMappingURL=assurance-action.js.map
|
|
412
|
-
//# debugId=811330eb-207d-5e27-9786-72c1fba7d4c9
|
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/governance/assurance-limits
|
|
3
|
-
*
|
|
4
|
-
* Shares bounded assurance transport limits without expanding the public SDK.
|
|
5
|
-
*/
|
|
6
|
-
/** Largest verdict-history page accepted by SDK and transport boundaries. */
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b911b43d-d14d-5e4f-a35e-5020b1a84542")}catch(e){}}();
|
|
9
|
-
export const MAX_ASSURANCE_VERDICT_LIMIT = 1_000;
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b00dcab2-22c6-55b7-b93d-f6f5413d4b04")}catch(e2){}})();const MAX_ASSURANCE_VERDICT_LIMIT=1e3;export{MAX_ASSURANCE_VERDICT_LIMIT};
|
|
10
2
|
//# sourceMappingURL=assurance-limits.js.map
|
|
11
|
-
//# debugId=b911b43d-d14d-5e4f-a35e-5020b1a84542
|
|
@@ -1,82 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/assurance-mutation-error
|
|
3
|
-
*
|
|
4
|
-
* Distinguishes expected assurance mutation refusals from unexpected runtime
|
|
5
|
-
* faults before transport layers normalize them into stable usage errors.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d2d5135a-8110-527e-8530-653b25b792a4")}catch(e){}}();
|
|
9
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
10
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
11
|
-
/** Expected declaration-validation or mutation-policy refusal. */
|
|
12
|
-
export class AssuranceMutationRefusalError extends TypeError {
|
|
13
|
-
/** Create one typed refusal while retaining TypeError compatibility for SDK callers. */
|
|
14
|
-
constructor(message) {
|
|
15
|
-
super(message);
|
|
16
|
-
this.name = "AssuranceMutationRefusalError";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/** Expected gate-policy refusal caused by an incomplete or disallowed provider contract. */
|
|
20
|
-
export class AssuranceEvaluationRefusalError extends TypeError {
|
|
21
|
-
/** Structured evaluation location retained across CLI, SDK, and MCP. */
|
|
22
|
-
context;
|
|
23
|
-
/** Create one typed refusal while retaining TypeError compatibility for SDK callers. */
|
|
24
|
-
constructor(message, context = {}) {
|
|
25
|
-
super(message);
|
|
26
|
-
this.name = "AssuranceEvaluationRefusalError";
|
|
27
|
-
this.context = context;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** Expected failure to resolve one declared external measurement source. */
|
|
31
|
-
export class AssuranceSourceResolutionError extends TypeError {
|
|
32
|
-
/** Measurement that owns the failed source, once evaluation identifies it. */
|
|
33
|
-
measurement_id;
|
|
34
|
-
/** Measurement source discriminant. */
|
|
35
|
-
source_kind;
|
|
36
|
-
/** Field selected from the source result. */
|
|
37
|
-
field;
|
|
38
|
-
/** Optional validate or health check selector. */
|
|
39
|
-
check;
|
|
40
|
-
/** Create one source-local refusal before gate context is attached. */
|
|
41
|
-
constructor(message, context) {
|
|
42
|
-
super(message);
|
|
43
|
-
this.name = "AssuranceSourceResolutionError";
|
|
44
|
-
this.measurement_id = context.measurement_id;
|
|
45
|
-
this.source_kind = context.source_kind;
|
|
46
|
-
this.field = context.field;
|
|
47
|
-
this.check = context.check;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/** Normalize only expected assurance mutation refusals for CLI and MCP hosts. */
|
|
51
|
-
export async function normalizeAssuranceMutation(operation) {
|
|
52
|
-
try {
|
|
53
|
-
return await operation();
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
if (error instanceof AssuranceMutationRefusalError) {
|
|
57
|
-
throw new PmCliError(error.message, EXIT_CODE.USAGE, {
|
|
58
|
-
code: "invalid_argument_value",
|
|
59
|
-
reason: "assurance_mutation_refused",
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
throw error;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** Normalize only expected assurance evaluation-policy refusals for transport hosts. */
|
|
66
|
-
export async function normalizeAssuranceEvaluation(operation) {
|
|
67
|
-
try {
|
|
68
|
-
return await operation();
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
if (error instanceof AssuranceEvaluationRefusalError) {
|
|
72
|
-
throw new PmCliError(error.message, EXIT_CODE.USAGE, {
|
|
73
|
-
code: "invalid_argument_value",
|
|
74
|
-
reason: "assurance_evaluation_refused",
|
|
75
|
-
...error.context,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
throw error;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="00d2200c-d308-51a6-acc4-8da90afaf6d6")}catch(e2){}})();import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";class AssuranceMutationRefusalError extends TypeError{constructor(message){super(message);this.name="AssuranceMutationRefusalError"}}class AssuranceEvaluationRefusalError extends TypeError{context;constructor(message,context={}){super(message);this.name="AssuranceEvaluationRefusalError";this.context=context}}class AssuranceSourceResolutionError extends TypeError{measurement_id;source_kind;field;check;constructor(message,context){super(message);this.name="AssuranceSourceResolutionError";this.measurement_id=context.measurement_id;this.source_kind=context.source_kind;this.field=context.field;this.check=context.check}}async function normalizeAssuranceMutation(operation){try{return await operation()}catch(error){if(error instanceof AssuranceMutationRefusalError){throw new PmCliError(error.message,EXIT_CODE.USAGE,{code:"invalid_argument_value",reason:"assurance_mutation_refused"})}throw error}}async function normalizeAssuranceEvaluation(operation){try{return await operation()}catch(error){if(error instanceof AssuranceEvaluationRefusalError){throw new PmCliError(error.message,EXIT_CODE.USAGE,{code:"invalid_argument_value",reason:"assurance_evaluation_refused",...error.context})}throw error}}export{AssuranceEvaluationRefusalError,AssuranceMutationRefusalError,AssuranceSourceResolutionError,normalizeAssuranceEvaluation,normalizeAssuranceMutation};
|
|
81
2
|
//# sourceMappingURL=assurance-mutation-error.js.map
|
|
82
|
-
//# debugId=d2d5135a-8110-527e-8530-653b25b792a4
|