@unbrained/pm-cli 2026.9.7 → 2026.9.9
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 +7 -2
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +231 -182
- 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.d.ts +0 -5
- 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-NPN5I67J.js → chunk-3IPRM75M.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +2 -0
- package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +29 -0
- package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ECBLPN7B.js +3 -0
- package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +235 -0
- package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +2 -0
- package/dist/cli-bundle/chunks/chunk-L5RCDKQ2.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-OHNLSGGV.js +79 -0
- package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-BAX2BYUW.js → chunk-XZ6T7YPP.js} +256 -150
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-Z3XVXUVF.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-UIHRCS6D.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-PERI45EM.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-5FHTCOHS.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7N6DOREF.js +26 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-7PC4R5QB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-BUCJUZVG.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +10 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-PNKIANFZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-QQQ4SAUO.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +9 -0
- package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-YJUXGS57.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZTCE4UO6.js +58 -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 +37 -37
- 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/policy/workflow-policy-schema.d.ts +312 -0
- package/dist/core/policy/workflow-policy-schema.js +2 -0
- package/dist/core/policy/workflow-policy-store.d.ts +24 -0
- package/dist/core/policy/workflow-policy-store.js +2 -0
- package/dist/core/policy/workflow-policy.d.ts +139 -0
- package/dist/core/policy/workflow-policy.js +2 -0
- 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.d.ts +1 -0
- 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.d.ts +1 -1
- 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 +174 -839
- 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.d.ts +3 -1
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
- package/dist/sdk/governance/workflow-completeness.js +2 -0
- package/dist/sdk/governance/workflow-policy.d.ts +47 -0
- package/dist/sdk/governance/workflow-policy.js +4 -0
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +2 -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 -1
- 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.d.ts +1 -1
- 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.d.ts +27 -0
- 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.d.ts +6 -4
- 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.d.ts +1 -1
- 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.d.ts +2 -1
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.d.ts +4 -0
- 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.d.ts +2 -1
- 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.d.ts +4 -0
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/COMMANDS.md +10 -0
- package/docs/CONFIGURATION.md +12 -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 +4 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +33 -0
- package/docs/WORKFLOW_POLICIES.md +129 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +7 -7
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
- package/marketplace.json +2 -2
- package/package.json +5 -5
- 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-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-JX4DH4WC.js +0 -3
- 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-operations-I5W3KMGB.js +0 -2
- 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-PEFABF7E.js +0 -26
- 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,253 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Implements extension package-management support for Managed State.
|
|
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]="159d7bbd-1d2a-503d-b3ce-f32dcc6f6547")}catch(e){}}();
|
|
8
|
-
import { isFileMissingError } from "../../core/fs/fs-utils.js";
|
|
9
|
-
import fs from "node:fs/promises";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
12
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
13
|
-
import { nowIso } from "../../core/shared/time.js";
|
|
14
|
-
import { normalizeExtensionContributionInventory } from "../../core/extensions/contribution-inventory.js";
|
|
15
|
-
import { normalizeExtensionNameForMatch, normalizeStringList, } from "./shared.js";
|
|
16
|
-
const MANAGED_EXTENSION_STATE_FILENAME = ".managed-extensions.json";
|
|
17
|
-
const MANAGED_EXTENSION_STATE_VERSION = 1;
|
|
18
|
-
/** Implements resolve managed extension state path for the public runtime surface of this module. */
|
|
19
|
-
export function resolveManagedExtensionStatePath(extensionsRoot) {
|
|
20
|
-
return path.join(extensionsRoot, MANAGED_EXTENSION_STATE_FILENAME);
|
|
21
|
-
}
|
|
22
|
-
/** Implements create empty managed extension state for the public runtime surface of this module. */
|
|
23
|
-
export function createEmptyManagedExtensionState() {
|
|
24
|
-
return {
|
|
25
|
-
version: MANAGED_EXTENSION_STATE_VERSION,
|
|
26
|
-
updated_at: nowIso(),
|
|
27
|
-
entries: [],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/** Implements sort managed entries for the public runtime surface of this module. */
|
|
31
|
-
export function sortManagedEntries(entries) {
|
|
32
|
-
return [...entries].sort((left, right) => {
|
|
33
|
-
const byScope = left.scope.localeCompare(right.scope);
|
|
34
|
-
if (byScope !== 0) {
|
|
35
|
-
return byScope;
|
|
36
|
-
}
|
|
37
|
-
const byName = left.name.localeCompare(right.name);
|
|
38
|
-
if (byName !== 0) {
|
|
39
|
-
return byName;
|
|
40
|
-
}
|
|
41
|
-
return left.directory.localeCompare(right.directory);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
/** Implements managed extension sources equivalent for the public runtime surface of this module. */
|
|
45
|
-
export function managedExtensionSourcesEquivalent(left, right) {
|
|
46
|
-
if (left.kind !== right.kind ||
|
|
47
|
-
left.input !== right.input ||
|
|
48
|
-
left.location !== right.location) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
if (left.kind === "npm" && right.kind === "npm") {
|
|
52
|
-
return left.package === right.package && left.version === right.version;
|
|
53
|
-
}
|
|
54
|
-
if (left.kind === "github" && right.kind === "github") {
|
|
55
|
-
return (left.repository === right.repository &&
|
|
56
|
-
left.ref === right.ref &&
|
|
57
|
-
left.subpath === right.subpath &&
|
|
58
|
-
left.commit === right.commit);
|
|
59
|
-
}
|
|
60
|
-
if (left.kind === "builtin" && right.kind === "builtin") {
|
|
61
|
-
return left.name === right.name;
|
|
62
|
-
}
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
/** Narrow `value` to a string, or `undefined` for any other type — the normalization applied to every optional managed-state string field so an absent or malformed value is dropped rather than carried through as `unknown`. */
|
|
66
|
-
function optionalString(value) {
|
|
67
|
-
return typeof value === "string" ? value : undefined;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Type guard asserting `entry` carries every always-present managed-record field
|
|
71
|
-
* with the right primitive type: a non-empty `name`/`directory`, a known
|
|
72
|
-
* {@link ExtensionScope}, string manifest metadata, a `string[]` capability
|
|
73
|
-
* list, and string `installed_at`/`updated_at` timestamps. The optional columns
|
|
74
|
-
* (`source` plus the update-check fields) are validated separately by the
|
|
75
|
-
* caller, so this guard narrows only the required columns.
|
|
76
|
-
*/
|
|
77
|
-
function hasRequiredManagedRecordFields(entry) {
|
|
78
|
-
return (typeof entry.name === "string" &&
|
|
79
|
-
entry.name.trim().length > 0 &&
|
|
80
|
-
typeof entry.directory === "string" &&
|
|
81
|
-
entry.directory.trim().length > 0 &&
|
|
82
|
-
(entry.scope === "project" || entry.scope === "global") &&
|
|
83
|
-
typeof entry.manifest_version === "string" &&
|
|
84
|
-
typeof entry.manifest_entry === "string" &&
|
|
85
|
-
Array.isArray(entry.capabilities) &&
|
|
86
|
-
entry.capabilities.every((value) => typeof value === "string") &&
|
|
87
|
-
typeof entry.installed_at === "string" &&
|
|
88
|
-
typeof entry.updated_at === "string");
|
|
89
|
-
}
|
|
90
|
-
/** Normalize one persisted managed-extension source object, returning `null` when the discriminant (`kind`) or the required `input`/`location` strings are missing or malformed so the caller can skip the owning record. */
|
|
91
|
-
function normalizeManagedSource(raw) {
|
|
92
|
-
if (typeof raw !== "object" || raw === null) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
const source = raw;
|
|
96
|
-
if ((source.kind !== "local" &&
|
|
97
|
-
source.kind !== "github" &&
|
|
98
|
-
source.kind !== "npm" &&
|
|
99
|
-
source.kind !== "builtin") ||
|
|
100
|
-
typeof source.input !== "string" ||
|
|
101
|
-
typeof source.location !== "string") {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
kind: source.kind,
|
|
106
|
-
input: source.input,
|
|
107
|
-
location: source.location,
|
|
108
|
-
name: optionalString(source.name),
|
|
109
|
-
package: optionalString(source.package),
|
|
110
|
-
version: optionalString(source.version),
|
|
111
|
-
repository: optionalString(source.repository),
|
|
112
|
-
owner: optionalString(source.owner),
|
|
113
|
-
repo: optionalString(source.repo),
|
|
114
|
-
ref: optionalString(source.ref),
|
|
115
|
-
subpath: optionalString(source.subpath),
|
|
116
|
-
commit: optionalString(source.commit),
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Normalize one persisted managed-extension record, returning `null` when any
|
|
121
|
-
* required field or its `source` is missing or malformed so {@link
|
|
122
|
-
* normalizeManagedState} can drop the entry without discarding the rest of the
|
|
123
|
-
* file.
|
|
124
|
-
*/
|
|
125
|
-
function normalizeManagedRecord(raw) {
|
|
126
|
-
if (typeof raw !== "object" || raw === null) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
const entry = raw;
|
|
130
|
-
if (!hasRequiredManagedRecordFields(entry)) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
const source = normalizeManagedSource(entry.source);
|
|
134
|
-
if (!source) {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
const contributions = normalizeExtensionContributionInventory(entry.contributions);
|
|
138
|
-
if (contributions === null) {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
return {
|
|
142
|
-
name: entry.name.trim(),
|
|
143
|
-
directory: entry.directory.trim(),
|
|
144
|
-
scope: entry.scope,
|
|
145
|
-
manifest_version: entry.manifest_version,
|
|
146
|
-
manifest_entry: entry.manifest_entry,
|
|
147
|
-
capabilities: normalizeStringList(entry.capabilities),
|
|
148
|
-
contributions,
|
|
149
|
-
installed_at: entry.installed_at,
|
|
150
|
-
updated_at: entry.updated_at,
|
|
151
|
-
source,
|
|
152
|
-
last_update_check_at: optionalString(entry.last_update_check_at),
|
|
153
|
-
last_update_remote_commit: optionalString(entry.last_update_remote_commit),
|
|
154
|
-
update_available: typeof entry.update_available === "boolean" ||
|
|
155
|
-
entry.update_available === null
|
|
156
|
-
? entry.update_available
|
|
157
|
-
: undefined,
|
|
158
|
-
update_error: optionalString(entry.update_error),
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
/** Implements normalize managed state for the public runtime surface of this module. */
|
|
162
|
-
export function normalizeManagedState(raw) {
|
|
163
|
-
if (typeof raw !== "object" || raw === null) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
const candidate = raw;
|
|
167
|
-
if (candidate.version !== MANAGED_EXTENSION_STATE_VERSION ||
|
|
168
|
-
!Array.isArray(candidate.entries)) {
|
|
169
|
-
return null;
|
|
170
|
-
}
|
|
171
|
-
const entries = [];
|
|
172
|
-
for (const rawEntry of candidate.entries) {
|
|
173
|
-
const record = normalizeManagedRecord(rawEntry);
|
|
174
|
-
if (record) {
|
|
175
|
-
entries.push(record);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return {
|
|
179
|
-
version: MANAGED_EXTENSION_STATE_VERSION,
|
|
180
|
-
updated_at: optionalString(candidate.updated_at) ?? nowIso(),
|
|
181
|
-
entries: sortManagedEntries(entries),
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
/** Implements read managed extension state for the public runtime surface of this module. */
|
|
185
|
-
export async function readManagedExtensionState(extensionsRoot) {
|
|
186
|
-
const statePath = resolveManagedExtensionStatePath(extensionsRoot);
|
|
187
|
-
const fallback = createEmptyManagedExtensionState();
|
|
188
|
-
try {
|
|
189
|
-
const raw = await fs.readFile(statePath, "utf8");
|
|
190
|
-
const parsed = JSON.parse(raw);
|
|
191
|
-
const normalized = normalizeManagedState(parsed);
|
|
192
|
-
if (!normalized) {
|
|
193
|
-
throw new PmCliError(`Managed extension state file "${statePath}" has an invalid schema. Repair or remove it before mutating extension state.`, EXIT_CODE.GENERIC_FAILURE);
|
|
194
|
-
}
|
|
195
|
-
return {
|
|
196
|
-
path: statePath,
|
|
197
|
-
state: normalized,
|
|
198
|
-
warnings: [],
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
if (error instanceof PmCliError) {
|
|
203
|
-
throw error;
|
|
204
|
-
}
|
|
205
|
-
if (typeof error === "object" &&
|
|
206
|
-
error !== null &&
|
|
207
|
-
"code" in error &&
|
|
208
|
-
isFileMissingError(error)) {
|
|
209
|
-
return {
|
|
210
|
-
path: statePath,
|
|
211
|
-
state: fallback,
|
|
212
|
-
warnings: [],
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
throw new PmCliError(`Managed extension state file "${statePath}" could not be read. Repair or remove it before mutating extension state.`, EXIT_CODE.GENERIC_FAILURE);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
/** Implements write managed extension state for the public runtime surface of this module. */
|
|
219
|
-
export async function writeManagedExtensionState(extensionsRoot, state) {
|
|
220
|
-
const statePath = resolveManagedExtensionStatePath(extensionsRoot);
|
|
221
|
-
const normalized = {
|
|
222
|
-
version: MANAGED_EXTENSION_STATE_VERSION,
|
|
223
|
-
updated_at: nowIso(),
|
|
224
|
-
entries: sortManagedEntries(state.entries),
|
|
225
|
-
};
|
|
226
|
-
await fs.mkdir(extensionsRoot, { recursive: true });
|
|
227
|
-
await fs.writeFile(statePath, `${JSON.stringify(normalized, null, 2)}\n`, "utf8");
|
|
228
|
-
}
|
|
229
|
-
/** Implements upsert managed entry for the public runtime surface of this module. */
|
|
230
|
-
export function upsertManagedEntry(state, entry) {
|
|
231
|
-
const updatedEntries = state.entries.filter((candidate) => normalizeExtensionNameForMatch(candidate.name) !==
|
|
232
|
-
normalizeExtensionNameForMatch(entry.name) &&
|
|
233
|
-
normalizeExtensionNameForMatch(candidate.directory) !==
|
|
234
|
-
normalizeExtensionNameForMatch(entry.directory));
|
|
235
|
-
updatedEntries.push(entry);
|
|
236
|
-
return {
|
|
237
|
-
...state,
|
|
238
|
-
updated_at: nowIso(),
|
|
239
|
-
entries: sortManagedEntries(updatedEntries),
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
/** Persist a verified install-time contribution inventory on its managed record. */
|
|
243
|
-
export async function persistManagedContributionInventory(extensionsRoot, state, extensionName, contributions) {
|
|
244
|
-
const entry = state.entries.find((candidate) => normalizeExtensionNameForMatch(candidate.name) ===
|
|
245
|
-
normalizeExtensionNameForMatch(extensionName));
|
|
246
|
-
if (!entry)
|
|
247
|
-
return state;
|
|
248
|
-
const updated = upsertManagedEntry(state, { ...entry, contributions });
|
|
249
|
-
await writeManagedExtensionState(extensionsRoot, updated);
|
|
250
|
-
return updated;
|
|
251
|
-
}
|
|
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]="33b7f318-cc64-55d6-8b57-19a618efe6c0")}catch(e2){}})();import{isFileMissingError}from"../../core/fs/fs-utils.js";import fs from"node:fs/promises";import path from"node:path";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{nowIso}from"../../core/shared/time.js";import{normalizeExtensionContributionInventory}from"../../core/extensions/contribution-inventory.js";import{normalizeExtensionNameForMatch,normalizeStringList}from"./shared.js";const MANAGED_EXTENSION_STATE_FILENAME=".managed-extensions.json";const MANAGED_EXTENSION_STATE_VERSION=1;function resolveManagedExtensionStatePath(extensionsRoot){return path.join(extensionsRoot,MANAGED_EXTENSION_STATE_FILENAME)}function createEmptyManagedExtensionState(){return{version:MANAGED_EXTENSION_STATE_VERSION,updated_at:nowIso(),entries:[]}}function sortManagedEntries(entries){return[...entries].sort((left,right)=>{const byScope=left.scope.localeCompare(right.scope);if(byScope!==0){return byScope}const byName=left.name.localeCompare(right.name);if(byName!==0){return byName}return left.directory.localeCompare(right.directory)})}function managedExtensionSourcesEquivalent(left,right){if(left.kind!==right.kind||left.input!==right.input||left.location!==right.location){return false}if(left.kind==="npm"&&right.kind==="npm"){return left.package===right.package&&left.version===right.version}if(left.kind==="github"&&right.kind==="github"){return left.repository===right.repository&&left.ref===right.ref&&left.subpath===right.subpath&&left.commit===right.commit}if(left.kind==="builtin"&&right.kind==="builtin"){return left.name===right.name}return true}function optionalString(value){return typeof value==="string"?value:void 0}function hasRequiredManagedRecordFields(entry){return typeof entry.name==="string"&&entry.name.trim().length>0&&typeof entry.directory==="string"&&entry.directory.trim().length>0&&(entry.scope==="project"||entry.scope==="global")&&typeof entry.manifest_version==="string"&&typeof entry.manifest_entry==="string"&&Array.isArray(entry.capabilities)&&entry.capabilities.every(value=>typeof value==="string")&&typeof entry.installed_at==="string"&&typeof entry.updated_at==="string"}function normalizeManagedSource(raw){if(typeof raw!=="object"||raw===null){return null}const source=raw;if(source.kind!=="local"&&source.kind!=="github"&&source.kind!=="npm"&&source.kind!=="builtin"||typeof source.input!=="string"||typeof source.location!=="string"){return null}return{kind:source.kind,input:source.input,location:source.location,name:optionalString(source.name),package:optionalString(source.package),version:optionalString(source.version),repository:optionalString(source.repository),owner:optionalString(source.owner),repo:optionalString(source.repo),ref:optionalString(source.ref),subpath:optionalString(source.subpath),commit:optionalString(source.commit)}}function normalizeManagedRecord(raw){if(typeof raw!=="object"||raw===null){return null}const entry=raw;if(!hasRequiredManagedRecordFields(entry)){return null}const source=normalizeManagedSource(entry.source);if(!source){return null}const contributions=normalizeExtensionContributionInventory(entry.contributions);if(contributions===null){return null}return{name:entry.name.trim(),directory:entry.directory.trim(),scope:entry.scope,manifest_version:entry.manifest_version,manifest_entry:entry.manifest_entry,capabilities:normalizeStringList(entry.capabilities),contributions,installed_at:entry.installed_at,updated_at:entry.updated_at,source,last_update_check_at:optionalString(entry.last_update_check_at),last_update_remote_commit:optionalString(entry.last_update_remote_commit),update_available:typeof entry.update_available==="boolean"||entry.update_available===null?entry.update_available:void 0,update_error:optionalString(entry.update_error)}}function normalizeManagedState(raw){if(typeof raw!=="object"||raw===null){return null}const candidate=raw;if(candidate.version!==MANAGED_EXTENSION_STATE_VERSION||!Array.isArray(candidate.entries)){return null}const entries=[];for(const rawEntry of candidate.entries){const record=normalizeManagedRecord(rawEntry);if(record){entries.push(record)}}return{version:MANAGED_EXTENSION_STATE_VERSION,updated_at:optionalString(candidate.updated_at)??nowIso(),entries:sortManagedEntries(entries)}}async function readManagedExtensionState(extensionsRoot){const statePath=resolveManagedExtensionStatePath(extensionsRoot);const fallback=createEmptyManagedExtensionState();try{const raw=await fs.readFile(statePath,"utf8");const parsed=JSON.parse(raw);const normalized=normalizeManagedState(parsed);if(!normalized){throw new PmCliError(`Managed extension state file "${statePath}" has an invalid schema. Repair or remove it before mutating extension state.`,EXIT_CODE.GENERIC_FAILURE)}return{path:statePath,state:normalized,warnings:[]}}catch(error){if(error instanceof PmCliError){throw error}if(typeof error==="object"&&error!==null&&"code"in error&&isFileMissingError(error)){return{path:statePath,state:fallback,warnings:[]}}throw new PmCliError(`Managed extension state file "${statePath}" could not be read. Repair or remove it before mutating extension state.`,EXIT_CODE.GENERIC_FAILURE)}}async function writeManagedExtensionState(extensionsRoot,state){const statePath=resolveManagedExtensionStatePath(extensionsRoot);const normalized={version:MANAGED_EXTENSION_STATE_VERSION,updated_at:nowIso(),entries:sortManagedEntries(state.entries)};await fs.mkdir(extensionsRoot,{recursive:true});await fs.writeFile(statePath,`${JSON.stringify(normalized,null,2)}
|
|
2
|
+
`,"utf8")}function upsertManagedEntry(state,entry){const updatedEntries=state.entries.filter(candidate=>normalizeExtensionNameForMatch(candidate.name)!==normalizeExtensionNameForMatch(entry.name)&&normalizeExtensionNameForMatch(candidate.directory)!==normalizeExtensionNameForMatch(entry.directory));updatedEntries.push(entry);return{...state,updated_at:nowIso(),entries:sortManagedEntries(updatedEntries)}}async function persistManagedContributionInventory(extensionsRoot,state,extensionName,contributions){const entry=state.entries.find(candidate=>normalizeExtensionNameForMatch(candidate.name)===normalizeExtensionNameForMatch(extensionName));if(!entry)return state;const updated=upsertManagedEntry(state,{...entry,contributions});await writeManagedExtensionState(extensionsRoot,updated);return updated}export{createEmptyManagedExtensionState,managedExtensionSourcesEquivalent,normalizeManagedState,persistManagedContributionInventory,readManagedExtensionState,resolveManagedExtensionStatePath,sortManagedEntries,upsertManagedEntry,writeManagedExtensionState};
|
|
252
3
|
//# sourceMappingURL=managed-state.js.map
|
|
253
|
-
//# debugId=159d7bbd-1d2a-503d-b3ce-f32dcc6f6547
|
|
@@ -1,175 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Provides durable planning and execution for extension-owned schema migrations.
|
|
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]="56290db9-933c-590d-8b9f-df62ff45e515")}catch(e){}}();
|
|
8
|
-
import fs from "node:fs/promises";
|
|
9
|
-
import path from "node:path";
|
|
10
|
-
import { pathExists } from "../../core/fs/fs-utils.js";
|
|
11
|
-
import { activateExtensions, loadExtensions } from "../../core/extensions/index.js";
|
|
12
|
-
import { writeWorkspaceJsonWithHistory } from "../../core/history/workspace-history.js";
|
|
13
|
-
import { readSettings } from "../../core/store/settings.js";
|
|
14
|
-
/** Return the durable workspace path for extension migration state. */
|
|
15
|
-
export function resolveExtensionMigrationStatePath(pmRoot) {
|
|
16
|
-
return path.join(pmRoot, "extension-migrations.json");
|
|
17
|
-
}
|
|
18
|
-
function migrationId(migration, index) {
|
|
19
|
-
const id = migration.definition.id;
|
|
20
|
-
return typeof id === "string" && id.trim().length > 0
|
|
21
|
-
? id.trim()
|
|
22
|
-
: `migration-${String(index + 1).padStart(3, "0")}`;
|
|
23
|
-
}
|
|
24
|
-
function migrationKey(migration, id) {
|
|
25
|
-
return `${migration.layer}:${migration.name}:${id}`;
|
|
26
|
-
}
|
|
27
|
-
/** Read durable extension migration outcomes, degrading absent state to empty. */
|
|
28
|
-
export async function readExtensionMigrationState(pmRoot) {
|
|
29
|
-
const statePath = resolveExtensionMigrationStatePath(pmRoot);
|
|
30
|
-
if (!(await pathExists(statePath))) {
|
|
31
|
-
return { version: 1, updated_at: "", entries: [] };
|
|
32
|
-
}
|
|
33
|
-
const parsed = JSON.parse(await fs.readFile(statePath, "utf8"));
|
|
34
|
-
return {
|
|
35
|
-
version: 1,
|
|
36
|
-
updated_at: typeof parsed.updated_at === "string" ? parsed.updated_at : "",
|
|
37
|
-
entries: Array.isArray(parsed.entries)
|
|
38
|
-
? parsed.entries.filter((entry) => typeof entry?.key === "string" &&
|
|
39
|
-
(entry.status === "applied" || entry.status === "failed"))
|
|
40
|
-
: [],
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/** Overlay durable outcomes onto freshly activated migration definitions. */
|
|
44
|
-
export async function applyStoredExtensionMigrationState(pmRoot, migrations) {
|
|
45
|
-
const state = await readExtensionMigrationState(pmRoot);
|
|
46
|
-
const byKey = new Map(state.entries.map((entry) => [entry.key, entry]));
|
|
47
|
-
migrations.forEach((migration, index) => {
|
|
48
|
-
const id = migrationId(migration, index);
|
|
49
|
-
const entry = byKey.get(migrationKey(migration, id));
|
|
50
|
-
if (!entry)
|
|
51
|
-
return;
|
|
52
|
-
migration.definition.status = entry.status;
|
|
53
|
-
if (entry.status === "failed") {
|
|
54
|
-
migration.definition.reason = entry.error;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
delete migration.definition.reason;
|
|
58
|
-
delete migration.definition.error;
|
|
59
|
-
delete migration.definition.message;
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return state;
|
|
63
|
-
}
|
|
64
|
-
/** Plan or apply active extension migrations with durable idempotency receipts. */
|
|
65
|
-
export async function runExtensionMigrations(options) {
|
|
66
|
-
const state = await applyStoredExtensionMigrationState(options.pmRoot, options.migrations);
|
|
67
|
-
const stateByKey = new Map(state.entries.map((entry) => [entry.key, entry]));
|
|
68
|
-
const receipts = [];
|
|
69
|
-
let changed = false;
|
|
70
|
-
const scopedMigrations = options.migrations
|
|
71
|
-
.map((migration, index) => ({ migration, index }))
|
|
72
|
-
.filter(({ migration }) => options.scope === undefined || migration.layer === options.scope);
|
|
73
|
-
for (const { migration, index } of scopedMigrations) {
|
|
74
|
-
const id = migrationId(migration, index);
|
|
75
|
-
const key = migrationKey(migration, id);
|
|
76
|
-
const stored = stateByKey.get(key);
|
|
77
|
-
const declaredStatus = String(migration.definition.status ?? "pending").toLowerCase();
|
|
78
|
-
const before = stored?.status ?? (declaredStatus === "applied" || declaredStatus === "failed" ? declaredStatus : "pending");
|
|
79
|
-
if (before === "applied") {
|
|
80
|
-
receipts.push({ key, layer: migration.layer, extension: migration.name, id, before, outcome: "skipped" });
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
if (options.dryRun === true) {
|
|
84
|
-
receipts.push({ key, layer: migration.layer, extension: migration.name, id, before, outcome: "pending" });
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
const run = migration.runtime_definition?.run ?? migration.definition.run;
|
|
88
|
-
if (typeof run !== "function") {
|
|
89
|
-
receipts.push({ key, layer: migration.layer, extension: migration.name, id, before, outcome: "pending" });
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
const attemptedAt = new Date().toISOString();
|
|
93
|
-
try {
|
|
94
|
-
await Promise.resolve(run({ id, command: "migration", layer: migration.layer, extension: migration.name, pm_root: options.pmRoot, status: before }));
|
|
95
|
-
const entry = { key, layer: migration.layer, extension: migration.name, id, status: "applied", attempted_at: attemptedAt };
|
|
96
|
-
stateByKey.set(key, entry);
|
|
97
|
-
migration.definition.status = "applied";
|
|
98
|
-
delete migration.definition.reason;
|
|
99
|
-
delete migration.definition.error;
|
|
100
|
-
delete migration.definition.message;
|
|
101
|
-
receipts.push({ key, layer: migration.layer, extension: migration.name, id, before, outcome: "applied" });
|
|
102
|
-
changed = true;
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
106
|
-
const entry = { key, layer: migration.layer, extension: migration.name, id, status: "failed", attempted_at: attemptedAt, error: message };
|
|
107
|
-
stateByKey.set(key, entry);
|
|
108
|
-
migration.definition.status = "failed";
|
|
109
|
-
migration.definition.reason = message;
|
|
110
|
-
receipts.push({ key, layer: migration.layer, extension: migration.name, id, before, outcome: "failed", error: message });
|
|
111
|
-
changed = true;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (changed) {
|
|
115
|
-
const settings = await readSettings(options.pmRoot);
|
|
116
|
-
const nextState = {
|
|
117
|
-
version: 1,
|
|
118
|
-
updated_at: new Date().toISOString(),
|
|
119
|
-
entries: [...stateByKey.values()].sort((left, right) => left.key.localeCompare(right.key)),
|
|
120
|
-
};
|
|
121
|
-
await writeWorkspaceJsonWithHistory({
|
|
122
|
-
pmRoot: options.pmRoot,
|
|
123
|
-
filePath: resolveExtensionMigrationStatePath(options.pmRoot),
|
|
124
|
-
raw: `${JSON.stringify(nextState, null, 2)}\n`,
|
|
125
|
-
op: "extension_migrations_apply",
|
|
126
|
-
author: options.author,
|
|
127
|
-
lockTtlSeconds: settings.locks.ttl_seconds,
|
|
128
|
-
lockWaitMs: settings.locks.wait_ms,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
const pendingCount = receipts.filter((receipt) => receipt.outcome === "pending").length;
|
|
132
|
-
const appliedCount = receipts.filter((receipt) => receipt.outcome === "applied").length;
|
|
133
|
-
const skippedCount = receipts.filter((receipt) => receipt.outcome === "skipped").length;
|
|
134
|
-
const failedCount = receipts.filter((receipt) => receipt.outcome === "failed").length;
|
|
135
|
-
return {
|
|
136
|
-
ok: failedCount === 0,
|
|
137
|
-
dry_run: options.dryRun === true,
|
|
138
|
-
state_path: resolveExtensionMigrationStatePath(options.pmRoot),
|
|
139
|
-
total: receipts.length,
|
|
140
|
-
pending_count: pendingCount,
|
|
141
|
-
applied_count: appliedCount,
|
|
142
|
-
skipped_count: skippedCount,
|
|
143
|
-
failed_count: failedCount,
|
|
144
|
-
migrations: receipts,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
/** Load active registrations and execute the extension lifecycle migrate action. */
|
|
148
|
-
export async function runExtensionMigrateAction(context) {
|
|
149
|
-
const settings = await readSettings(context.resolvedRoots.settings_root);
|
|
150
|
-
const loaded = await loadExtensions({
|
|
151
|
-
pmRoot: context.resolvedRoots.pm_root,
|
|
152
|
-
settings,
|
|
153
|
-
cwd: process.cwd(),
|
|
154
|
-
noExtensions: context.global.noExtensions === true,
|
|
155
|
-
});
|
|
156
|
-
const activated = await activateExtensions(loaded);
|
|
157
|
-
context.warnings.push(...loaded.warnings, ...activated.warnings);
|
|
158
|
-
const migration = await runExtensionMigrations({
|
|
159
|
-
pmRoot: context.resolvedRoots.pm_root,
|
|
160
|
-
migrations: activated.registrations.migrations,
|
|
161
|
-
author: typeof context.global.author === "string" &&
|
|
162
|
-
context.global.author.trim().length > 0
|
|
163
|
-
? context.global.author.trim()
|
|
164
|
-
: "pm-extension-migration",
|
|
165
|
-
dryRun: context.options.dryRun === true,
|
|
166
|
-
...(context.scope === "global" ? { scope: "global" } : {}),
|
|
167
|
-
});
|
|
168
|
-
return context.withResult({
|
|
169
|
-
migration,
|
|
170
|
-
load_failure_count: loaded.failed.length,
|
|
171
|
-
activation_failure_count: activated.failed.length,
|
|
172
|
-
}, migration.ok);
|
|
173
|
-
}
|
|
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]="c4dc16d1-672a-5b1c-b681-97a7b3febd69")}catch(e2){}})();import fs from"node:fs/promises";import path from"node:path";import{pathExists}from"../../core/fs/fs-utils.js";import{activateExtensions,loadExtensions}from"../../core/extensions/index.js";import{writeWorkspaceJsonWithHistory}from"../../core/history/workspace-history.js";import{readSettings}from"../../core/store/settings.js";function resolveExtensionMigrationStatePath(pmRoot){return path.join(pmRoot,"extension-migrations.json")}function migrationId(migration,index){const id=migration.definition.id;return typeof id==="string"&&id.trim().length>0?id.trim():`migration-${String(index+1).padStart(3,"0")}`}function migrationKey(migration,id){return`${migration.layer}:${migration.name}:${id}`}async function readExtensionMigrationState(pmRoot){const statePath=resolveExtensionMigrationStatePath(pmRoot);if(!await pathExists(statePath)){return{version:1,updated_at:"",entries:[]}}const parsed=JSON.parse(await fs.readFile(statePath,"utf8"));return{version:1,updated_at:typeof parsed.updated_at==="string"?parsed.updated_at:"",entries:Array.isArray(parsed.entries)?parsed.entries.filter(entry=>typeof entry?.key==="string"&&(entry.status==="applied"||entry.status==="failed")):[]}}async function applyStoredExtensionMigrationState(pmRoot,migrations){const state=await readExtensionMigrationState(pmRoot);const byKey=new Map(state.entries.map(entry=>[entry.key,entry]));migrations.forEach((migration,index)=>{const id=migrationId(migration,index);const entry=byKey.get(migrationKey(migration,id));if(!entry)return;migration.definition.status=entry.status;if(entry.status==="failed"){migration.definition.reason=entry.error}else{delete migration.definition.reason;delete migration.definition.error;delete migration.definition.message}});return state}async function runExtensionMigrations(options){const state=await applyStoredExtensionMigrationState(options.pmRoot,options.migrations);const stateByKey=new Map(state.entries.map(entry=>[entry.key,entry]));const receipts=[];let changed=false;const scopedMigrations=options.migrations.map((migration,index)=>({migration,index})).filter(({migration})=>options.scope===void 0||migration.layer===options.scope);for(const{migration,index}of scopedMigrations){const id=migrationId(migration,index);const key=migrationKey(migration,id);const stored=stateByKey.get(key);const declaredStatus=String(migration.definition.status??"pending").toLowerCase();const before=stored?.status??(declaredStatus==="applied"||declaredStatus==="failed"?declaredStatus:"pending");if(before==="applied"){receipts.push({key,layer:migration.layer,extension:migration.name,id,before,outcome:"skipped"});continue}if(options.dryRun===true){receipts.push({key,layer:migration.layer,extension:migration.name,id,before,outcome:"pending"});continue}const run=migration.runtime_definition?.run??migration.definition.run;if(typeof run!=="function"){receipts.push({key,layer:migration.layer,extension:migration.name,id,before,outcome:"pending"});continue}const attemptedAt=new Date().toISOString();try{await Promise.resolve(run({id,command:"migration",layer:migration.layer,extension:migration.name,pm_root:options.pmRoot,status:before}));const entry={key,layer:migration.layer,extension:migration.name,id,status:"applied",attempted_at:attemptedAt};stateByKey.set(key,entry);migration.definition.status="applied";delete migration.definition.reason;delete migration.definition.error;delete migration.definition.message;receipts.push({key,layer:migration.layer,extension:migration.name,id,before,outcome:"applied"});changed=true}catch(error){const message=error instanceof Error?error.message:String(error);const entry={key,layer:migration.layer,extension:migration.name,id,status:"failed",attempted_at:attemptedAt,error:message};stateByKey.set(key,entry);migration.definition.status="failed";migration.definition.reason=message;receipts.push({key,layer:migration.layer,extension:migration.name,id,before,outcome:"failed",error:message});changed=true}}if(changed){const settings=await readSettings(options.pmRoot);const nextState={version:1,updated_at:new Date().toISOString(),entries:[...stateByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))};await writeWorkspaceJsonWithHistory({pmRoot:options.pmRoot,filePath:resolveExtensionMigrationStatePath(options.pmRoot),raw:`${JSON.stringify(nextState,null,2)}
|
|
2
|
+
`,op:"extension_migrations_apply",author:options.author,lockTtlSeconds:settings.locks.ttl_seconds,lockWaitMs:settings.locks.wait_ms})}const pendingCount=receipts.filter(receipt=>receipt.outcome==="pending").length;const appliedCount=receipts.filter(receipt=>receipt.outcome==="applied").length;const skippedCount=receipts.filter(receipt=>receipt.outcome==="skipped").length;const failedCount=receipts.filter(receipt=>receipt.outcome==="failed").length;return{ok:failedCount===0,dry_run:options.dryRun===true,state_path:resolveExtensionMigrationStatePath(options.pmRoot),total:receipts.length,pending_count:pendingCount,applied_count:appliedCount,skipped_count:skippedCount,failed_count:failedCount,migrations:receipts}}async function runExtensionMigrateAction(context){const settings=await readSettings(context.resolvedRoots.settings_root);const loaded=await loadExtensions({pmRoot:context.resolvedRoots.pm_root,settings,cwd:process.cwd(),noExtensions:context.global.noExtensions===true});const activated=await activateExtensions(loaded);context.warnings.push(...loaded.warnings,...activated.warnings);const migration=await runExtensionMigrations({pmRoot:context.resolvedRoots.pm_root,migrations:activated.registrations.migrations,author:typeof context.global.author==="string"&&context.global.author.trim().length>0?context.global.author.trim():"pm-extension-migration",dryRun:context.options.dryRun===true,...context.scope==="global"?{scope:"global"}:{}});return context.withResult({migration,load_failure_count:loaded.failed.length,activation_failure_count:activated.failed.length},migration.ok)}export{applyStoredExtensionMigrationState,readExtensionMigrationState,resolveExtensionMigrationStatePath,runExtensionMigrateAction,runExtensionMigrations};
|
|
174
3
|
//# sourceMappingURL=migrations.js.map
|
|
175
|
-
//# debugId=56290db9-933c-590d-8b9f-df62ff45e515
|
|
@@ -1,26 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/extension/output-ownership
|
|
3
|
-
*
|
|
4
|
-
* Classifies output overrides against manifest-declared command ownership.
|
|
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]="e5a4cea9-ac5d-5bda-9f7c-6cf8cf9e9998")}catch(e){}}();
|
|
8
|
-
import { normalizeExtensionNameForMatch } from "./shared.js";
|
|
9
|
-
/** Collect doctor warnings for output overrides without an explicit command or result ownership boundary. */
|
|
10
|
-
export function collectGlobalOutputOverrideDoctorWarnings(activationResult, loadResult) {
|
|
11
|
-
const commandScopedOwners = new Set((loadResult?.loaded ?? []).flatMap((entry) => (entry.activation?.commands?.length ?? 0) > 0
|
|
12
|
-
? [`${entry.layer}:${normalizeExtensionNameForMatch(entry.name)}`]
|
|
13
|
-
: []));
|
|
14
|
-
const serviceWarnings = activationResult.services.overrides
|
|
15
|
-
.filter((entry) => entry.service === "output_format")
|
|
16
|
-
.filter((entry) => entry.passThrough !== true)
|
|
17
|
-
.filter((entry) => !commandScopedOwners.has(`${entry.layer}:${normalizeExtensionNameForMatch(entry.name)}`))
|
|
18
|
-
.map((entry) => `extension_output_service_override_global:${entry.service}:${entry.layer}:${entry.name}`);
|
|
19
|
-
const rendererWarnings = activationResult.renderers.overrides
|
|
20
|
-
.filter((entry) => (entry.commands?.length ?? 0) === 0 &&
|
|
21
|
-
entry.resultDiscriminator === undefined)
|
|
22
|
-
.map((entry) => `extension_output_renderer_override_global:${entry.format}:${entry.layer}:${entry.name}`);
|
|
23
|
-
return [...new Set([...serviceWarnings, ...rendererWarnings])].sort((left, right) => left.localeCompare(right));
|
|
24
|
-
}
|
|
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]="fcc97434-1ef5-5c47-b491-f00e9d19b2c6")}catch(e2){}})();import{normalizeExtensionNameForMatch}from"./shared.js";function collectGlobalOutputOverrideDoctorWarnings(activationResult,loadResult){const commandScopedOwners=new Set((loadResult?.loaded??[]).flatMap(entry=>(entry.activation?.commands?.length??0)>0?[`${entry.layer}:${normalizeExtensionNameForMatch(entry.name)}`]:[]));const serviceWarnings=activationResult.services.overrides.filter(entry=>entry.service==="output_format").filter(entry=>entry.passThrough!==true).filter(entry=>!commandScopedOwners.has(`${entry.layer}:${normalizeExtensionNameForMatch(entry.name)}`)).map(entry=>`extension_output_service_override_global:${entry.service}:${entry.layer}:${entry.name}`);const rendererWarnings=activationResult.renderers.overrides.filter(entry=>(entry.commands?.length??0)===0&&entry.resultDiscriminator===void 0).map(entry=>`extension_output_renderer_override_global:${entry.format}:${entry.layer}:${entry.name}`);return[...new Set([...serviceWarnings,...rendererWarnings])].sort((left,right)=>left.localeCompare(right))}export{collectGlobalOutputOverrideDoctorWarnings};
|
|
25
2
|
//# sourceMappingURL=output-ownership.js.map
|
|
26
|
-
//# debugId=e5a4cea9-ac5d-5bda-9f7c-6cf8cf9e9998
|
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/extension/runtime-summary
|
|
3
|
-
*
|
|
4
|
-
* Projects activated package command registrations into stable install output.
|
|
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]="b17dfc10-9e07-5912-b294-c5663133f192")}catch(e){}}();
|
|
8
|
-
import { normalizeExtensionNameForMatch } from "./shared.js";
|
|
9
|
-
/** Return stable runtime command and action paths registered by one extension. */
|
|
10
|
-
export function summarizeRuntimeCommandPathsForExtension(extensionName, installed) {
|
|
11
|
-
const normalizedName = normalizeExtensionNameForMatch(extensionName);
|
|
12
|
-
const entry = installed.find((candidate) => normalizeExtensionNameForMatch(candidate.name) === normalizedName);
|
|
13
|
-
return {
|
|
14
|
-
command_paths: [...(entry?.command_paths ?? [])].sort((left, right) => left.localeCompare(right)),
|
|
15
|
-
action_paths: [...(entry?.action_paths ?? [])].sort((left, right) => left.localeCompare(right)),
|
|
16
|
-
};
|
|
17
|
-
}
|
|
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]="37f2dced-3b93-5c64-85ae-56e62c95e8eb")}catch(e2){}})();import{normalizeExtensionNameForMatch}from"./shared.js";function summarizeRuntimeCommandPathsForExtension(extensionName,installed){const normalizedName=normalizeExtensionNameForMatch(extensionName);const entry=installed.find(candidate=>normalizeExtensionNameForMatch(candidate.name)===normalizedName);return{command_paths:[...entry?.command_paths??[]].sort((left,right)=>left.localeCompare(right)),action_paths:[...entry?.action_paths??[]].sort((left,right)=>left.localeCompare(right))}}export{summarizeRuntimeCommandPathsForExtension};
|
|
18
2
|
//# sourceMappingURL=runtime-summary.js.map
|
|
19
|
-
//# debugId=b17dfc10-9e07-5912-b294-c5663133f192
|