@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
package/dist/sdk/test/runs.js
CHANGED
|
@@ -1,194 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/test/runs
|
|
3
|
-
*
|
|
4
|
-
* Implements the pm test runs command surface and its agent-facing runtime behavior.
|
|
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]="1cbb3565-26d8-5657-b724-602658bec852")}catch(e){}}();
|
|
8
|
-
import { assertInitializedTracker } from "../environment/tracker-preflight.js";
|
|
9
|
-
import os from "node:os";
|
|
10
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
11
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
12
|
-
import { readAuthorEnvironment } from "../../core/shared/author.js";
|
|
13
|
-
import { getBackgroundTestRunStatus, listBackgroundTestRuns, readBackgroundTestRunLogs, resumeBackgroundTestRun, runBackgroundTestRunWorker, spawnBackgroundTestRunWorker, startBackgroundTestRun, stopBackgroundTestRun, } from "../../core/test/background-runs.js";
|
|
14
|
-
import { resolveGlobalPmRoot, resolvePmRoot, } from "../../core/store/paths.js";
|
|
15
|
-
import { readSettings } from "../../core/store/settings.js";
|
|
16
|
-
import { parseLimit } from "../../core/shared/numeric-parsers.js";
|
|
17
|
-
const BACKGROUND_STATUS_VALUES = [
|
|
18
|
-
"queued",
|
|
19
|
-
"running",
|
|
20
|
-
"passed",
|
|
21
|
-
"failed",
|
|
22
|
-
"stopped",
|
|
23
|
-
"canceled",
|
|
24
|
-
];
|
|
25
|
-
const BACKGROUND_STREAM_VALUES = [
|
|
26
|
-
"stdout",
|
|
27
|
-
"stderr",
|
|
28
|
-
"both",
|
|
29
|
-
];
|
|
30
|
-
function normalizeStatus(value) {
|
|
31
|
-
if (value === undefined) {
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
const normalized = value.trim().toLowerCase();
|
|
35
|
-
if (BACKGROUND_STATUS_VALUES.includes(normalized)) {
|
|
36
|
-
return normalized;
|
|
37
|
-
}
|
|
38
|
-
throw new PmCliError(`Invalid --status value "${value}"`, EXIT_CODE.USAGE);
|
|
39
|
-
}
|
|
40
|
-
function normalizeStream(value) {
|
|
41
|
-
if (value === undefined || value.trim().length === 0) {
|
|
42
|
-
return "stderr";
|
|
43
|
-
}
|
|
44
|
-
const normalized = value.trim().toLowerCase();
|
|
45
|
-
if (BACKGROUND_STREAM_VALUES.includes(normalized)) {
|
|
46
|
-
return normalized;
|
|
47
|
-
}
|
|
48
|
-
throw new PmCliError(`Invalid --stream value "${value}"`, EXIT_CODE.USAGE);
|
|
49
|
-
}
|
|
50
|
-
function resolveWhoamiFallback() {
|
|
51
|
-
try {
|
|
52
|
-
const username = os.userInfo().username.trim();
|
|
53
|
-
if (username.length > 0) {
|
|
54
|
-
return username;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Fall back to environment-derived attribution.
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
function resolveRequestedBy(author, fallback) {
|
|
63
|
-
const candidates = [
|
|
64
|
-
author,
|
|
65
|
-
readAuthorEnvironment(),
|
|
66
|
-
fallback,
|
|
67
|
-
process.env.USER,
|
|
68
|
-
process.env.LOGNAME,
|
|
69
|
-
process.env.USERNAME,
|
|
70
|
-
resolveWhoamiFallback(),
|
|
71
|
-
];
|
|
72
|
-
for (const candidate of candidates) {
|
|
73
|
-
if (typeof candidate !== "string") {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const trimmed = candidate.trim();
|
|
77
|
-
if (trimmed.length > 0) {
|
|
78
|
-
return trimmed;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return "unknown";
|
|
82
|
-
}
|
|
83
|
-
async function ensureInitialized(pmRoot) {
|
|
84
|
-
await assertInitializedTracker(pmRoot);
|
|
85
|
-
}
|
|
86
|
-
/** Implements run start background run for the public runtime surface of this module. */
|
|
87
|
-
export async function runStartBackgroundRun(options, global) {
|
|
88
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
89
|
-
const globalPmRoot = resolveGlobalPmRoot(process.cwd());
|
|
90
|
-
await ensureInitialized(pmRoot);
|
|
91
|
-
const settings = await readSettings(pmRoot);
|
|
92
|
-
const requestedBy = resolveRequestedBy(options.author, settings.author_default);
|
|
93
|
-
const started = await startBackgroundTestRun({
|
|
94
|
-
pmRoot,
|
|
95
|
-
globalPmRoot,
|
|
96
|
-
kind: options.kind,
|
|
97
|
-
commandArgs: options.commandArgs,
|
|
98
|
-
requestedBy,
|
|
99
|
-
targetId: options.targetId,
|
|
100
|
-
statusFilter: options.statusFilter,
|
|
101
|
-
});
|
|
102
|
-
if (!started.started) {
|
|
103
|
-
return {
|
|
104
|
-
started: false,
|
|
105
|
-
duplicate_of: started.duplicate_of,
|
|
106
|
-
run: started.run,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
const spawned = await spawnBackgroundTestRunWorker({
|
|
110
|
-
pmRoot,
|
|
111
|
-
runId: started.run.id,
|
|
112
|
-
noExtensions: options.noExtensions === true,
|
|
113
|
-
});
|
|
114
|
-
return {
|
|
115
|
-
started: true,
|
|
116
|
-
run: spawned,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/** Implements run test runs list for the public runtime surface of this module. */
|
|
120
|
-
export async function runTestRunsList(options, global) {
|
|
121
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
122
|
-
await ensureInitialized(pmRoot);
|
|
123
|
-
const status = normalizeStatus(options.status);
|
|
124
|
-
const limit = parseLimit(options.limit, "limit");
|
|
125
|
-
const runs = await listBackgroundTestRuns(pmRoot, { status, limit });
|
|
126
|
-
return {
|
|
127
|
-
runs,
|
|
128
|
-
count: runs.length,
|
|
129
|
-
filters: {
|
|
130
|
-
status,
|
|
131
|
-
limit,
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/** Implements run test runs status for the public runtime surface of this module. */
|
|
136
|
-
export async function runTestRunsStatus(runId, global) {
|
|
137
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
138
|
-
await ensureInitialized(pmRoot);
|
|
139
|
-
const status = await getBackgroundTestRunStatus(pmRoot, runId);
|
|
140
|
-
return {
|
|
141
|
-
run: status.run,
|
|
142
|
-
health: status.health,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
/** Implements run test runs logs for the public runtime surface of this module. */
|
|
146
|
-
export async function runTestRunsLogs(runId, options, global) {
|
|
147
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
148
|
-
await ensureInitialized(pmRoot);
|
|
149
|
-
const stream = normalizeStream(options.stream);
|
|
150
|
-
const tail = parseLimit(options.tail, "tail");
|
|
151
|
-
const logs = await readBackgroundTestRunLogs(pmRoot, runId, stream, tail);
|
|
152
|
-
return {
|
|
153
|
-
run: logs.run,
|
|
154
|
-
stream: logs.stream,
|
|
155
|
-
tail: logs.tail,
|
|
156
|
-
stdout: logs.stdout,
|
|
157
|
-
stderr: logs.stderr,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
/** Implements run test runs stop for the public runtime surface of this module. */
|
|
161
|
-
export async function runTestRunsStop(runId, options, global) {
|
|
162
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
163
|
-
await ensureInitialized(pmRoot);
|
|
164
|
-
const stopped = await stopBackgroundTestRun(pmRoot, runId, options.force === true);
|
|
165
|
-
return {
|
|
166
|
-
run: stopped.run,
|
|
167
|
-
signal_sent: stopped.signal_sent,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
/** Implements run test runs resume for the public runtime surface of this module. */
|
|
171
|
-
export async function runTestRunsResume(runId, options, global) {
|
|
172
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
173
|
-
await ensureInitialized(pmRoot);
|
|
174
|
-
const settings = await readSettings(pmRoot);
|
|
175
|
-
const requestedBy = resolveRequestedBy(options.author, settings.author_default);
|
|
176
|
-
const resumed = await resumeBackgroundTestRun(pmRoot, runId, requestedBy, options.noExtensions === true);
|
|
177
|
-
return {
|
|
178
|
-
resumed_from: runId,
|
|
179
|
-
run: resumed,
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
/** Implements run test runs worker for the public runtime surface of this module. */
|
|
183
|
-
export async function runTestRunsWorker(runId, global) {
|
|
184
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
185
|
-
await ensureInitialized(pmRoot);
|
|
186
|
-
const finished = await runBackgroundTestRunWorker(pmRoot, runId, global.noExtensions === true);
|
|
187
|
-
return {
|
|
188
|
-
id: finished.id,
|
|
189
|
-
status: finished.status,
|
|
190
|
-
exit_code: finished.exit_code,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
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]="e7f8a7ea-3ec2-521b-ad52-45b655208f06")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import os from"node:os";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{readAuthorEnvironment}from"../../core/shared/author.js";import{getBackgroundTestRunStatus,listBackgroundTestRuns,readBackgroundTestRunLogs,resumeBackgroundTestRun,runBackgroundTestRunWorker,spawnBackgroundTestRunWorker,startBackgroundTestRun,stopBackgroundTestRun}from"../../core/test/background-runs.js";import{resolveGlobalPmRoot,resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{parseLimit}from"../../core/shared/numeric-parsers.js";const BACKGROUND_STATUS_VALUES=["queued","running","passed","failed","stopped","canceled"];const BACKGROUND_STREAM_VALUES=["stdout","stderr","both"];function normalizeStatus(value){if(value===void 0){return void 0}const normalized=value.trim().toLowerCase();if(BACKGROUND_STATUS_VALUES.includes(normalized)){return normalized}throw new PmCliError(`Invalid --status value "${value}"`,EXIT_CODE.USAGE)}function normalizeStream(value){if(value===void 0||value.trim().length===0){return"stderr"}const normalized=value.trim().toLowerCase();if(BACKGROUND_STREAM_VALUES.includes(normalized)){return normalized}throw new PmCliError(`Invalid --stream value "${value}"`,EXIT_CODE.USAGE)}function resolveWhoamiFallback(){try{const username=os.userInfo().username.trim();if(username.length>0){return username}}catch{}return void 0}function resolveRequestedBy(author,fallback){const candidates=[author,readAuthorEnvironment(),fallback,process.env.USER,process.env.LOGNAME,process.env.USERNAME,resolveWhoamiFallback()];for(const candidate of candidates){if(typeof candidate!=="string"){continue}const trimmed=candidate.trim();if(trimmed.length>0){return trimmed}}return"unknown"}async function ensureInitialized(pmRoot){await assertInitializedTracker(pmRoot)}async function runStartBackgroundRun(options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);const globalPmRoot=resolveGlobalPmRoot(process.cwd());await ensureInitialized(pmRoot);const settings=await readSettings(pmRoot);const requestedBy=resolveRequestedBy(options.author,settings.author_default);const started=await startBackgroundTestRun({pmRoot,globalPmRoot,kind:options.kind,commandArgs:options.commandArgs,requestedBy,targetId:options.targetId,statusFilter:options.statusFilter});if(!started.started){return{started:false,duplicate_of:started.duplicate_of,run:started.run}}const spawned=await spawnBackgroundTestRunWorker({pmRoot,runId:started.run.id,noExtensions:options.noExtensions===true});return{started:true,run:spawned}}async function runTestRunsList(options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const status=normalizeStatus(options.status);const limit=parseLimit(options.limit,"limit");const runs=await listBackgroundTestRuns(pmRoot,{status,limit});return{runs,count:runs.length,filters:{status,limit}}}async function runTestRunsStatus(runId,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const status=await getBackgroundTestRunStatus(pmRoot,runId);return{run:status.run,health:status.health}}async function runTestRunsLogs(runId,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const stream=normalizeStream(options.stream);const tail=parseLimit(options.tail,"tail");const logs=await readBackgroundTestRunLogs(pmRoot,runId,stream,tail);return{run:logs.run,stream:logs.stream,tail:logs.tail,stdout:logs.stdout,stderr:logs.stderr}}async function runTestRunsStop(runId,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const stopped=await stopBackgroundTestRun(pmRoot,runId,options.force===true);return{run:stopped.run,signal_sent:stopped.signal_sent}}async function runTestRunsResume(runId,options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const settings=await readSettings(pmRoot);const requestedBy=resolveRequestedBy(options.author,settings.author_default);const resumed=await resumeBackgroundTestRun(pmRoot,runId,requestedBy,options.noExtensions===true);return{resumed_from:runId,run:resumed}}async function runTestRunsWorker(runId,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await ensureInitialized(pmRoot);const finished=await runBackgroundTestRunWorker(pmRoot,runId,global2.noExtensions===true);return{id:finished.id,status:finished.status,exit_code:finished.exit_code}}export{runStartBackgroundRun,runTestRunsList,runTestRunsLogs,runTestRunsResume,runTestRunsStatus,runTestRunsStop,runTestRunsWorker};
|
|
193
2
|
//# sourceMappingURL=runs.js.map
|
|
194
|
-
//# debugId=1cbb3565-26d8-5657-b724-602658bec852
|
package/dist/sdk/test/trust.js
CHANGED
|
@@ -1,207 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Provides provenance and clone-local trust decisions for stored linked-test
|
|
5
|
-
* commands. Tracker items remain portable while execution acknowledgements stay
|
|
6
|
-
* outside the merge-unioned project record.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
!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]="30a61f26-5db8-50ba-af37-1990a4742ce8")}catch(e){}}();
|
|
10
|
-
import { execFile } from "node:child_process";
|
|
11
|
-
import { readFile } from "node:fs/promises";
|
|
12
|
-
import path from "node:path";
|
|
13
|
-
import { promisify } from "node:util";
|
|
14
|
-
import { ensureDir, writeFileAtomic, } from "../../core/fs/fs-utils.js";
|
|
15
|
-
import { sha256Hex, stableStringify } from "../../core/shared/serialization.js";
|
|
16
|
-
import { isTimestampLiteral } from "../../core/shared/time.js";
|
|
17
|
-
import { getRuntimePath } from "../../core/store/paths.js";
|
|
18
|
-
const execFileAsync = promisify(execFile);
|
|
19
|
-
const LINKED_TEST_TRUST_LEDGER_VERSION = 1;
|
|
20
|
-
const LINKED_TEST_TRUST_LEDGER_FILE = "linked-test-trust.json";
|
|
21
|
-
function trustLedgerPath(pmRoot) {
|
|
22
|
-
return path.join(getRuntimePath(pmRoot), LINKED_TEST_TRUST_LEDGER_FILE);
|
|
23
|
-
}
|
|
24
|
-
function emptyTrustLedger() {
|
|
25
|
-
return { version: LINKED_TEST_TRUST_LEDGER_VERSION, acknowledged: {} };
|
|
26
|
-
}
|
|
27
|
-
async function readTrustLedger(pmRoot) {
|
|
28
|
-
try {
|
|
29
|
-
const parsed = JSON.parse(await readFile(trustLedgerPath(pmRoot), "utf8"));
|
|
30
|
-
if (parsed.version !== LINKED_TEST_TRUST_LEDGER_VERSION ||
|
|
31
|
-
typeof parsed.acknowledged !== "object" ||
|
|
32
|
-
parsed.acknowledged === null ||
|
|
33
|
-
Array.isArray(parsed.acknowledged)) {
|
|
34
|
-
return emptyTrustLedger();
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
version: LINKED_TEST_TRUST_LEDGER_VERSION,
|
|
38
|
-
acknowledged: parsed.acknowledged,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
// A missing, corrupt, or unreadable ledger grants no acknowledgements.
|
|
43
|
-
// The local/source-ref provenance checks remain independent of this file.
|
|
44
|
-
return emptyTrustLedger();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/** Resolve the current Git branch without invoking a shell. */
|
|
48
|
-
export async function resolveLinkedTestSourceRef(cwd = process.cwd()) {
|
|
49
|
-
const hostedRef = process.env.GITHUB_HEAD_REF?.trim() || process.env.GITHUB_REF_NAME?.trim();
|
|
50
|
-
if (hostedRef && hostedRef !== "merge") {
|
|
51
|
-
return hostedRef;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const { stdout } = await execFileAsync("git", ["symbolic-ref", "--quiet", "--short", "HEAD"], { cwd, encoding: "utf8", windowsHide: true, timeout: 10_000 });
|
|
55
|
-
const ref = stdout.trim();
|
|
56
|
-
/* c8 ignore start -- successful git symbolic-ref output is non-empty by contract */
|
|
57
|
-
if (ref.length === 0)
|
|
58
|
-
return undefined;
|
|
59
|
-
/* c8 ignore stop */
|
|
60
|
-
return ref;
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/** Resolve the source checkout shared by linked-test provenance and execution. */
|
|
67
|
-
export function resolveLinkedTestSourceWorkspaceRoot(cwd = process.cwd()) {
|
|
68
|
-
return process.env.PM_SOURCE_WORKSPACE_ROOT?.trim() || cwd;
|
|
69
|
-
}
|
|
70
|
-
function hasValidLinkedTestProvenance(provenance) {
|
|
71
|
-
if (provenance === null || typeof provenance !== "object")
|
|
72
|
-
return false;
|
|
73
|
-
return (typeof provenance.author === "string" &&
|
|
74
|
-
provenance.author.trim().length > 0 &&
|
|
75
|
-
typeof provenance.created_at === "string" &&
|
|
76
|
-
isTimestampLiteral(provenance.created_at) &&
|
|
77
|
-
(provenance.source_kind === "local_mutation" ||
|
|
78
|
-
provenance.source_kind === "merge_union"));
|
|
79
|
-
}
|
|
80
|
-
/** Build the optional ref portion shared by clone-local trust decisions. */
|
|
81
|
-
function linkedTestTrustRefs(sourceRef, currentSourceRef) {
|
|
82
|
-
return {
|
|
83
|
-
...(sourceRef ? { source_ref: sourceRef } : {}),
|
|
84
|
-
...(currentSourceRef ? { current_source_ref: currentSourceRef } : {}),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/** Attach immutable author/time/ref provenance to newly stored commands. */
|
|
88
|
-
export function attachLinkedTestProvenance(tests, author, createdAt, sourceRef) {
|
|
89
|
-
return tests?.map((test) => test.command && !test.provenance
|
|
90
|
-
? {
|
|
91
|
-
...test,
|
|
92
|
-
provenance: {
|
|
93
|
-
author,
|
|
94
|
-
created_at: createdAt,
|
|
95
|
-
source_kind: "local_mutation",
|
|
96
|
-
...(sourceRef ? { source_ref: sourceRef } : {}),
|
|
97
|
-
},
|
|
98
|
-
}
|
|
99
|
-
: test);
|
|
100
|
-
}
|
|
101
|
-
/** Attach provenance while avoiding Git inspection for an empty mutation. */
|
|
102
|
-
export async function attachLinkedTestMutationProvenance(tests, author, createdAt) {
|
|
103
|
-
if (!tests || tests.length === 0)
|
|
104
|
-
return tests;
|
|
105
|
-
const sourceWorkspaceRoot = resolveLinkedTestSourceWorkspaceRoot();
|
|
106
|
-
return attachLinkedTestProvenance(tests, author, createdAt, await resolveLinkedTestSourceRef(sourceWorkspaceRoot));
|
|
107
|
-
}
|
|
108
|
-
/** Produce the clone-local trust identity for one linked-test entry. */
|
|
109
|
-
export function linkedTestTrustFingerprint(test) {
|
|
110
|
-
return sha256Hex(stableStringify({
|
|
111
|
-
command: test.command ?? null,
|
|
112
|
-
path: test.path ?? null,
|
|
113
|
-
scope: test.scope,
|
|
114
|
-
pm_context_mode: test.pm_context_mode ?? null,
|
|
115
|
-
workspace_context_mode: test.workspace_context_mode ?? null,
|
|
116
|
-
env_set: test.env_set ?? null,
|
|
117
|
-
env_clear: test.env_clear ?? null,
|
|
118
|
-
shared_host_safe: test.shared_host_safe ?? null,
|
|
119
|
-
provenance: test.provenance ?? null,
|
|
120
|
-
provenance_invalid: test.provenance_invalid ?? null,
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
/** Resolve whether one stored command is trusted by this clone. */
|
|
124
|
-
export async function resolveLinkedTestTrust(pmRoot, test, currentSourceRef) {
|
|
125
|
-
const ledger = await readTrustLedger(pmRoot);
|
|
126
|
-
return resolveLinkedTestTrustFromLedger(test, currentSourceRef, ledger);
|
|
127
|
-
}
|
|
128
|
-
function resolveLinkedTestTrustFromLedger(test, currentSourceRef, ledger) {
|
|
129
|
-
const fingerprint = linkedTestTrustFingerprint(test);
|
|
130
|
-
const sourceRef = test.provenance?.source_ref;
|
|
131
|
-
if (test.provenance === undefined &&
|
|
132
|
-
test.provenance_invalid !== true) {
|
|
133
|
-
return { fingerprint, trusted: true, reason: "legacy" };
|
|
134
|
-
}
|
|
135
|
-
const acknowledged = Object.hasOwn(ledger.acknowledged, fingerprint);
|
|
136
|
-
if (test.provenance_invalid === true ||
|
|
137
|
-
!hasValidLinkedTestProvenance(test.provenance)) {
|
|
138
|
-
if (acknowledged) {
|
|
139
|
-
return {
|
|
140
|
-
fingerprint,
|
|
141
|
-
trusted: true,
|
|
142
|
-
reason: "acknowledged",
|
|
143
|
-
...linkedTestTrustRefs(undefined, currentSourceRef),
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
fingerprint,
|
|
148
|
-
trusted: false,
|
|
149
|
-
reason: "invalid_provenance",
|
|
150
|
-
...linkedTestTrustRefs(undefined, currentSourceRef),
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
if (test.provenance.source_kind === "local_mutation" &&
|
|
154
|
-
sourceRef === undefined) {
|
|
155
|
-
return {
|
|
156
|
-
fingerprint,
|
|
157
|
-
trusted: true,
|
|
158
|
-
reason: "local_mutation",
|
|
159
|
-
...linkedTestTrustRefs(undefined, currentSourceRef),
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
if (test.provenance.source_kind === "local_mutation" &&
|
|
163
|
-
sourceRef !== undefined &&
|
|
164
|
-
sourceRef === currentSourceRef) {
|
|
165
|
-
return {
|
|
166
|
-
fingerprint,
|
|
167
|
-
trusted: true,
|
|
168
|
-
reason: "local_source_ref",
|
|
169
|
-
source_ref: sourceRef,
|
|
170
|
-
current_source_ref: currentSourceRef,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
if (acknowledged) {
|
|
174
|
-
return {
|
|
175
|
-
fingerprint,
|
|
176
|
-
trusted: true,
|
|
177
|
-
reason: "acknowledged",
|
|
178
|
-
...linkedTestTrustRefs(sourceRef, currentSourceRef),
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
return {
|
|
182
|
-
fingerprint,
|
|
183
|
-
trusted: false,
|
|
184
|
-
reason: "foreign_source_ref",
|
|
185
|
-
...linkedTestTrustRefs(sourceRef, currentSourceRef),
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
/** Resolve a collection with one ledger read for validation and batch runs. */
|
|
189
|
-
export async function resolveLinkedTestTrustBatch(pmRoot, tests, currentSourceRef) {
|
|
190
|
-
const ledger = await readTrustLedger(pmRoot);
|
|
191
|
-
return tests.map((test) => resolveLinkedTestTrustFromLedger(test, currentSourceRef, ledger));
|
|
192
|
-
}
|
|
193
|
-
/** Persist explicit clone-local acknowledgement for selected linked tests. */
|
|
194
|
-
export async function acknowledgeLinkedTests(pmRoot, tests, acknowledgedAt) {
|
|
195
|
-
const ledger = await readTrustLedger(pmRoot);
|
|
196
|
-
const fingerprints = tests
|
|
197
|
-
.filter((test) => typeof test.command === "string" && test.command.length > 0)
|
|
198
|
-
.map(linkedTestTrustFingerprint);
|
|
199
|
-
for (const fingerprint of fingerprints) {
|
|
200
|
-
ledger.acknowledged[fingerprint] = { acknowledged_at: acknowledgedAt };
|
|
201
|
-
}
|
|
202
|
-
await ensureDir(path.dirname(trustLedgerPath(pmRoot)));
|
|
203
|
-
await writeFileAtomic(trustLedgerPath(pmRoot), `${JSON.stringify(ledger, null, 2)}\n`);
|
|
204
|
-
return { acknowledged: fingerprints.length, fingerprints };
|
|
205
|
-
}
|
|
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]="eeb9bc22-b9e1-5449-9ad0-fbb1a14fb09d")}catch(e2){}})();import{execFile}from"node:child_process";import{readFile}from"node:fs/promises";import path from"node:path";import{promisify}from"node:util";import{ensureDir,writeFileAtomic}from"../../core/fs/fs-utils.js";import{sha256Hex,stableStringify}from"../../core/shared/serialization.js";import{isTimestampLiteral}from"../../core/shared/time.js";import{getRuntimePath}from"../../core/store/paths.js";const execFileAsync=promisify(execFile);const LINKED_TEST_TRUST_LEDGER_VERSION=1;const LINKED_TEST_TRUST_LEDGER_FILE="linked-test-trust.json";function trustLedgerPath(pmRoot){return path.join(getRuntimePath(pmRoot),LINKED_TEST_TRUST_LEDGER_FILE)}function emptyTrustLedger(){return{version:LINKED_TEST_TRUST_LEDGER_VERSION,acknowledged:{}}}async function readTrustLedger(pmRoot){try{const parsed=JSON.parse(await readFile(trustLedgerPath(pmRoot),"utf8"));if(parsed.version!==LINKED_TEST_TRUST_LEDGER_VERSION||typeof parsed.acknowledged!=="object"||parsed.acknowledged===null||Array.isArray(parsed.acknowledged)){return emptyTrustLedger()}return{version:LINKED_TEST_TRUST_LEDGER_VERSION,acknowledged:parsed.acknowledged}}catch{return emptyTrustLedger()}}async function resolveLinkedTestSourceRef(cwd=process.cwd()){const hostedRef=process.env.GITHUB_HEAD_REF?.trim()||process.env.GITHUB_REF_NAME?.trim();if(hostedRef&&hostedRef!=="merge"){return hostedRef}try{const{stdout}=await execFileAsync("git",["symbolic-ref","--quiet","--short","HEAD"],{cwd,encoding:"utf8",windowsHide:true,timeout:1e4});const ref=stdout.trim();if(ref.length===0)return void 0;return ref}catch{return void 0}}function resolveLinkedTestSourceWorkspaceRoot(cwd=process.cwd()){return process.env.PM_SOURCE_WORKSPACE_ROOT?.trim()||cwd}function hasValidLinkedTestProvenance(provenance){if(provenance===null||typeof provenance!=="object")return false;return typeof provenance.author==="string"&&provenance.author.trim().length>0&&typeof provenance.created_at==="string"&&isTimestampLiteral(provenance.created_at)&&(provenance.source_kind==="local_mutation"||provenance.source_kind==="merge_union")}function linkedTestTrustRefs(sourceRef,currentSourceRef){return{...sourceRef?{source_ref:sourceRef}:{},...currentSourceRef?{current_source_ref:currentSourceRef}:{}}}function attachLinkedTestProvenance(tests,author,createdAt,sourceRef){return tests?.map(test=>test.command&&!test.provenance?{...test,provenance:{author,created_at:createdAt,source_kind:"local_mutation",...sourceRef?{source_ref:sourceRef}:{}}}:test)}async function attachLinkedTestMutationProvenance(tests,author,createdAt){if(!tests||tests.length===0)return tests;const sourceWorkspaceRoot=resolveLinkedTestSourceWorkspaceRoot();return attachLinkedTestProvenance(tests,author,createdAt,await resolveLinkedTestSourceRef(sourceWorkspaceRoot))}function linkedTestTrustFingerprint(test){return sha256Hex(stableStringify({command:test.command??null,path:test.path??null,scope:test.scope,pm_context_mode:test.pm_context_mode??null,workspace_context_mode:test.workspace_context_mode??null,env_set:test.env_set??null,env_clear:test.env_clear??null,shared_host_safe:test.shared_host_safe??null,provenance:test.provenance??null,provenance_invalid:test.provenance_invalid??null}))}async function resolveLinkedTestTrust(pmRoot,test,currentSourceRef){const ledger=await readTrustLedger(pmRoot);return resolveLinkedTestTrustFromLedger(test,currentSourceRef,ledger)}function resolveLinkedTestTrustFromLedger(test,currentSourceRef,ledger){const fingerprint=linkedTestTrustFingerprint(test);const sourceRef=test.provenance?.source_ref;if(test.provenance===void 0&&test.provenance_invalid!==true){return{fingerprint,trusted:true,reason:"legacy"}}const acknowledged=Object.hasOwn(ledger.acknowledged,fingerprint);if(test.provenance_invalid===true||!hasValidLinkedTestProvenance(test.provenance)){if(acknowledged){return{fingerprint,trusted:true,reason:"acknowledged",...linkedTestTrustRefs(void 0,currentSourceRef)}}return{fingerprint,trusted:false,reason:"invalid_provenance",...linkedTestTrustRefs(void 0,currentSourceRef)}}if(test.provenance.source_kind==="local_mutation"&&sourceRef===void 0){return{fingerprint,trusted:true,reason:"local_mutation",...linkedTestTrustRefs(void 0,currentSourceRef)}}if(test.provenance.source_kind==="local_mutation"&&sourceRef!==void 0&&sourceRef===currentSourceRef){return{fingerprint,trusted:true,reason:"local_source_ref",source_ref:sourceRef,current_source_ref:currentSourceRef}}if(acknowledged){return{fingerprint,trusted:true,reason:"acknowledged",...linkedTestTrustRefs(sourceRef,currentSourceRef)}}return{fingerprint,trusted:false,reason:"foreign_source_ref",...linkedTestTrustRefs(sourceRef,currentSourceRef)}}async function resolveLinkedTestTrustBatch(pmRoot,tests,currentSourceRef){const ledger=await readTrustLedger(pmRoot);return tests.map(test=>resolveLinkedTestTrustFromLedger(test,currentSourceRef,ledger))}async function acknowledgeLinkedTests(pmRoot,tests,acknowledgedAt){const ledger=await readTrustLedger(pmRoot);const fingerprints=tests.filter(test=>typeof test.command==="string"&&test.command.length>0).map(linkedTestTrustFingerprint);for(const fingerprint of fingerprints){ledger.acknowledged[fingerprint]={acknowledged_at:acknowledgedAt}}await ensureDir(path.dirname(trustLedgerPath(pmRoot)));await writeFileAtomic(trustLedgerPath(pmRoot),`${JSON.stringify(ledger,null,2)}
|
|
2
|
+
`);return{acknowledged:fingerprints.length,fingerprints}}export{acknowledgeLinkedTests,attachLinkedTestMutationProvenance,attachLinkedTestProvenance,linkedTestTrustFingerprint,resolveLinkedTestSourceRef,resolveLinkedTestSourceWorkspaceRoot,resolveLinkedTestTrust,resolveLinkedTestTrustBatch};
|
|
206
3
|
//# sourceMappingURL=trust.js.map
|
|
207
|
-
//# debugId=30a61f26-5db8-50ba-af37-1990a4742ce8
|