@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
package/dist/cli.js
CHANGED
|
@@ -1,106 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
* @module cli
|
|
4
|
-
*
|
|
5
|
-
* Bootstraps the executable pm CLI entrypoint and startup optimizations.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="81ec2fa2-c616-5978-999d-b76d5f45bafe")}catch(e){}}();
|
|
9
|
-
import fs from "node:fs";
|
|
10
|
-
import * as nodeModule from "node:module";
|
|
11
|
-
import os from "node:os";
|
|
12
|
-
import path from "node:path";
|
|
13
|
-
import { fileURLToPath } from "node:url";
|
|
14
|
-
import { runCliWithBundleIntegrity } from "./cli/bundle-integrity.js";
|
|
15
|
-
import { runRuntimeCompatibleCli } from "./cli/runtime-compatibility-boundary.js";
|
|
16
|
-
import { pruneCompileCacheGenerations, resolveCompileCacheGeneration, } from "./sdk/compile-cache.js";
|
|
17
|
-
function enableNodeCompileCache() {
|
|
18
|
-
const { enableCompileCache } = nodeModule;
|
|
19
|
-
if (typeof enableCompileCache !== "function" ||
|
|
20
|
-
process.env.PM_CLI_DISABLE_COMPILE_CACHE === "1") {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const userCacheKey = typeof process.getuid === "function"
|
|
24
|
-
? String(process.getuid())
|
|
25
|
-
: os.userInfo().username.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
26
|
-
const configuredCacheDir = process.env.PM_CLI_COMPILE_CACHE_DIR;
|
|
27
|
-
const defaultCacheRoot = path.join(os.tmpdir(), `pm-cli-node-compile-cache-${userCacheKey}`);
|
|
28
|
-
const generation = resolveCompileCacheGeneration(readPackageVersionForPath(fileURLToPath(import.meta.url)));
|
|
29
|
-
const cacheDir = configuredCacheDir ?? path.join(defaultCacheRoot, generation);
|
|
30
|
-
try {
|
|
31
|
-
if (configuredCacheDir === undefined) {
|
|
32
|
-
pruneCompileCacheGenerations(defaultCacheRoot, generation);
|
|
33
|
-
}
|
|
34
|
-
enableCompileCache(cacheDir);
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
// Compile caching is a startup optimization only; never block CLI execution.
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function findPackageJson(startPath) {
|
|
41
|
-
let current = path.dirname(path.resolve(startPath));
|
|
42
|
-
while (true) {
|
|
43
|
-
const candidate = path.join(current, "package.json");
|
|
44
|
-
if (fs.existsSync(candidate)) {
|
|
45
|
-
return candidate;
|
|
46
|
-
}
|
|
47
|
-
const parent = path.dirname(current);
|
|
48
|
-
if (parent === current) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
current = parent;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function printFastVersionIfRequested() {
|
|
55
|
-
const args = process.argv.slice(2);
|
|
56
|
-
const versionArgs = args.filter((arg) => arg !== "--no-extensions");
|
|
57
|
-
if (versionArgs.length !== 1 ||
|
|
58
|
-
(versionArgs[0] !== "--version" && versionArgs[0] !== "-V")) {
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
const version = readPackageVersionForPath(fileURLToPath(import.meta.url));
|
|
62
|
-
if (version === undefined) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
console.log(version);
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
function readPackageVersionForPath(startPath) {
|
|
69
|
-
const packageJsonPath = findPackageJson(startPath);
|
|
70
|
-
if (!packageJsonPath) {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
try {
|
|
74
|
-
const parsed = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
75
|
-
if (typeof parsed.version !== "string") {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
return parsed.version;
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
/** Public contract for test only, shared by SDK and presentation-layer consumers. */
|
|
85
|
-
export const _testOnly = {
|
|
86
|
-
enableNodeCompileCache,
|
|
87
|
-
findPackageJson,
|
|
88
|
-
printFastVersionIfRequested,
|
|
89
|
-
readPackageVersionForPath,
|
|
90
|
-
};
|
|
91
|
-
if (!printFastVersionIfRequested()) {
|
|
92
|
-
enableNodeCompileCache();
|
|
93
|
-
const cliEntrypointPath = fileURLToPath(import.meta.url);
|
|
94
|
-
const executingVersion = readPackageVersionForPath(cliEntrypointPath);
|
|
95
|
-
const invocationArgv = process.argv.slice(2);
|
|
96
|
-
await runRuntimeCompatibleCli({
|
|
97
|
-
executingVersion,
|
|
98
|
-
projectRoot: process.cwd(),
|
|
99
|
-
argv: invocationArgv,
|
|
100
|
-
allowStale: process.env.PM_ALLOW_STALE_CLI === "1",
|
|
101
|
-
run: () => runCliWithBundleIntegrity(invocationArgv, cliEntrypointPath, () => import("./cli-bundle/main.js"), process.stderr.write.bind(process.stderr)),
|
|
102
|
-
writeError: process.stderr.write.bind(process.stderr),
|
|
103
|
-
});
|
|
104
|
-
}
|
|
2
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="55192c56-d16d-5c0d-a30f-044ccb42420e")}catch(e2){}})();import fs from"node:fs";import*as nodeModule from"node:module";import os from"node:os";import path from"node:path";import{fileURLToPath}from"node:url";import{runCliWithBundleIntegrity}from"./cli/bundle-integrity.js";import{runRuntimeCompatibleCli}from"./cli/runtime-compatibility-boundary.js";import{pruneCompileCacheGenerations,resolveCompileCacheGeneration}from"./sdk/compile-cache.js";function enableNodeCompileCache(){const{enableCompileCache}=nodeModule;if(typeof enableCompileCache!=="function"||process.env.PM_CLI_DISABLE_COMPILE_CACHE==="1"){return}const userCacheKey=typeof process.getuid==="function"?String(process.getuid()):os.userInfo().username.replace(/[^a-zA-Z0-9._-]/g,"_");const configuredCacheDir=process.env.PM_CLI_COMPILE_CACHE_DIR;const defaultCacheRoot=path.join(os.tmpdir(),`pm-cli-node-compile-cache-${userCacheKey}`);const generation=resolveCompileCacheGeneration(readPackageVersionForPath(fileURLToPath(import.meta.url)));const cacheDir=configuredCacheDir??path.join(defaultCacheRoot,generation);try{if(configuredCacheDir===void 0){pruneCompileCacheGenerations(defaultCacheRoot,generation)}enableCompileCache(cacheDir)}catch{}}function findPackageJson(startPath){let current=path.dirname(path.resolve(startPath));while(true){const candidate=path.join(current,"package.json");if(fs.existsSync(candidate)){return candidate}const parent=path.dirname(current);if(parent===current){return void 0}current=parent}}function printFastVersionIfRequested(){const args=process.argv.slice(2);const versionArgs=args.filter(arg=>arg!=="--no-extensions");if(versionArgs.length!==1||versionArgs[0]!=="--version"&&versionArgs[0]!=="-V"){return false}const version=readPackageVersionForPath(fileURLToPath(import.meta.url));if(version===void 0){return false}console.log(version);return true}function readPackageVersionForPath(startPath){const packageJsonPath=findPackageJson(startPath);if(!packageJsonPath){return void 0}try{const parsed=JSON.parse(fs.readFileSync(packageJsonPath,"utf8"));if(typeof parsed.version!=="string"){return void 0}return parsed.version}catch{return void 0}}const _testOnly={enableNodeCompileCache,findPackageJson,printFastVersionIfRequested,readPackageVersionForPath};if(!printFastVersionIfRequested()){enableNodeCompileCache();const cliEntrypointPath=fileURLToPath(import.meta.url);const executingVersion=readPackageVersionForPath(cliEntrypointPath);const invocationArgv=process.argv.slice(2);await runRuntimeCompatibleCli({executingVersion,projectRoot:process.cwd(),argv:invocationArgv,allowStale:process.env.PM_ALLOW_STALE_CLI==="1",run:()=>runCliWithBundleIntegrity(invocationArgv,cliEntrypointPath,()=>import("./cli-bundle/main.js"),process.stderr.write.bind(process.stderr)),writeError:process.stderr.write.bind(process.stderr)})}export{_testOnly};
|
|
105
3
|
//# sourceMappingURL=cli.js.map
|
|
106
|
-
//# debugId=81ec2fa2-c616-5978-999d-b76d5f45bafe
|
|
@@ -1,170 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module core/checkpoint/checkpoint-gc
|
|
3
|
-
*
|
|
4
|
-
* Age-based garbage collector for bulk-mutation rollback checkpoints written by
|
|
5
|
-
* `update-many`/`close-many` under `checkpoints/<subdir>/<id>.json`.
|
|
6
|
-
*
|
|
7
|
-
* Safety-first policy (mirroring the stale-lock sweep in `lock/lock-gc.ts`): a
|
|
8
|
-
* checkpoint whose JSON cannot be read or whose `created_at` cannot be parsed is
|
|
9
|
-
* RETAINED rather than deleted. We only prune checkpoints whose age can be
|
|
10
|
-
* conclusively determined from their own `created_at` field and that exceed the
|
|
11
|
-
* configured `checkpoints.retention_days` policy.
|
|
12
|
-
*
|
|
13
|
-
* Staleness formula: (now_ms - Date.parse(created_at)) > retention_days * 86_400_000.
|
|
14
|
-
* A zero/negative age (a future `created_at`) is always treated as active.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
!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]="b26cf702-330e-5cf5-8371-204220d5c5c9")}catch(e){}}();
|
|
18
|
-
import { isFileMissingError } from "../fs/fs-utils.js";
|
|
19
|
-
import fs from "node:fs/promises";
|
|
20
|
-
import path from "node:path";
|
|
21
|
-
const MILLISECONDS_PER_DAY = 86_400_000;
|
|
22
|
-
/** Extract a parseable `created_at` from a checkpoint's raw JSON, or null. */
|
|
23
|
-
function readCheckpointCreatedAt(raw) {
|
|
24
|
-
let parsed;
|
|
25
|
-
try {
|
|
26
|
-
parsed = JSON.parse(raw);
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
const createdAt = parsed.created_at;
|
|
35
|
-
return typeof createdAt === "string" ? createdAt : null;
|
|
36
|
-
}
|
|
37
|
-
/** Collect relative `checkpoints/<subdir>/<file>.json` (and top-level `<file>.json`) paths under the checkpoints root. Subdirectory reads are resilient to concurrent races: a subdir that vanishes between the parent `readdir` and its own `readdir` (ENOENT) is skipped quietly, and any other read failure (e.g. a permission error) is surfaced as a `checkpoint_subdir_unreadable:<name>` warning rather than aborting the whole sweep. */
|
|
38
|
-
async function collectCheckpointFiles(checkpointsDir, warnings) {
|
|
39
|
-
let dirEntries;
|
|
40
|
-
try {
|
|
41
|
-
dirEntries = await fs.readdir(checkpointsDir, { withFileTypes: true });
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
if (isFileMissingError(error)) {
|
|
45
|
-
return [];
|
|
46
|
-
}
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
const files = [];
|
|
50
|
-
for (const entry of dirEntries) {
|
|
51
|
-
if (entry.isDirectory()) {
|
|
52
|
-
const subdir = path.join(checkpointsDir, entry.name);
|
|
53
|
-
let nested;
|
|
54
|
-
try {
|
|
55
|
-
nested = await fs.readdir(subdir);
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
if (!isFileMissingError(error)) {
|
|
59
|
-
warnings.push(`checkpoint_subdir_unreadable:${entry.name}`);
|
|
60
|
-
}
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
for (const file of nested) {
|
|
64
|
-
if (file.endsWith(".json")) {
|
|
65
|
-
files.push(`${entry.name}/${file}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else if (entry.name.endsWith(".json")) {
|
|
70
|
-
files.push(entry.name);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return files.sort();
|
|
74
|
-
}
|
|
75
|
-
/** Implements run checkpoint gc for the public runtime surface of this module. */
|
|
76
|
-
export async function runCheckpointGc(pmRoot, options) {
|
|
77
|
-
const { dryRun, hooks } = options;
|
|
78
|
-
const nowMs = options.now ?? Date.now();
|
|
79
|
-
const retentionMs = Math.max(0, options.retentionDays) * MILLISECONDS_PER_DAY;
|
|
80
|
-
const checkpointsDir = path.join(pmRoot, "checkpoints");
|
|
81
|
-
// A non-finite retentionMs (NaN/Infinity from a non-finite retentionDays)
|
|
82
|
-
// makes every `ageMs > retentionMs` comparison false, so nothing is pruned —
|
|
83
|
-
// pruning is disabled rather than risking deletion under bad input.
|
|
84
|
-
const result = {
|
|
85
|
-
scanned: 0,
|
|
86
|
-
removed: [],
|
|
87
|
-
retained: [],
|
|
88
|
-
warnings: [],
|
|
89
|
-
entries: [],
|
|
90
|
-
};
|
|
91
|
-
const files = await collectCheckpointFiles(checkpointsDir, result.warnings);
|
|
92
|
-
for (const relName of files) {
|
|
93
|
-
const absPath = path.join(checkpointsDir, relName);
|
|
94
|
-
const relPath = `checkpoints/${relName}`;
|
|
95
|
-
result.scanned += 1;
|
|
96
|
-
if (hooks?.onRead) {
|
|
97
|
-
result.warnings.push(...(await hooks.onRead(absPath)));
|
|
98
|
-
}
|
|
99
|
-
let raw;
|
|
100
|
-
try {
|
|
101
|
-
raw = await fs.readFile(absPath, "utf8");
|
|
102
|
-
}
|
|
103
|
-
catch (readError) {
|
|
104
|
-
if (isFileMissingError(readError)) {
|
|
105
|
-
// Disappeared between readdir and readFile — treat as a ghost; skip quietly.
|
|
106
|
-
result.scanned -= 1;
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
result.warnings.push(`checkpoint_unreadable:${relName}`);
|
|
110
|
-
result.retained.push(relPath);
|
|
111
|
-
result.entries.push({
|
|
112
|
-
file: relPath,
|
|
113
|
-
created_at: null,
|
|
114
|
-
age_seconds: null,
|
|
115
|
-
stale: false,
|
|
116
|
-
reason: "unparseable",
|
|
117
|
-
});
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
const createdAt = readCheckpointCreatedAt(raw);
|
|
121
|
-
const createdAtMs = createdAt === null ? Number.NaN : Date.parse(createdAt);
|
|
122
|
-
if (!Number.isFinite(createdAtMs)) {
|
|
123
|
-
result.warnings.push(`checkpoint_unparseable:${relName}`);
|
|
124
|
-
result.retained.push(relPath);
|
|
125
|
-
result.entries.push({
|
|
126
|
-
file: relPath,
|
|
127
|
-
created_at: createdAt,
|
|
128
|
-
age_seconds: null,
|
|
129
|
-
stale: false,
|
|
130
|
-
reason: "unparseable",
|
|
131
|
-
});
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
const ageMs = nowMs - createdAtMs;
|
|
135
|
-
const entry = {
|
|
136
|
-
file: relPath,
|
|
137
|
-
created_at: createdAt,
|
|
138
|
-
age_seconds: Math.floor(ageMs / 1000),
|
|
139
|
-
stale: ageMs > retentionMs,
|
|
140
|
-
reason: ageMs > retentionMs ? "expired" : "active",
|
|
141
|
-
};
|
|
142
|
-
if (!entry.stale) {
|
|
143
|
-
result.retained.push(relPath);
|
|
144
|
-
result.entries.push(entry);
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
if (!dryRun) {
|
|
148
|
-
try {
|
|
149
|
-
await fs.unlink(absPath);
|
|
150
|
-
}
|
|
151
|
-
catch (unlinkError) {
|
|
152
|
-
if (!isFileMissingError(unlinkError)) {
|
|
153
|
-
result.warnings.push(`checkpoint_remove_failed:${relName}`);
|
|
154
|
-
result.retained.push(relPath);
|
|
155
|
-
result.entries.push(entry);
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
// ENOENT on unlink = already gone (race); treat as removed.
|
|
159
|
-
}
|
|
160
|
-
if (hooks?.onWrite) {
|
|
161
|
-
result.warnings.push(...(await hooks.onWrite(absPath)));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
result.removed.push(relPath);
|
|
165
|
-
result.entries.push(entry);
|
|
166
|
-
}
|
|
167
|
-
return result;
|
|
168
|
-
}
|
|
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]="fe72275e-b195-5a7e-b963-a9f159f9c67c")}catch(e2){}})();import{isFileMissingError}from"../fs/fs-utils.js";import fs from"node:fs/promises";import path from"node:path";const MILLISECONDS_PER_DAY=864e5;function readCheckpointCreatedAt(raw){let parsed;try{parsed=JSON.parse(raw)}catch{return null}if(typeof parsed!=="object"||parsed===null||Array.isArray(parsed)){return null}const createdAt=parsed.created_at;return typeof createdAt==="string"?createdAt:null}async function collectCheckpointFiles(checkpointsDir,warnings){let dirEntries;try{dirEntries=await fs.readdir(checkpointsDir,{withFileTypes:true})}catch(error){if(isFileMissingError(error)){return[]}throw error}const files=[];for(const entry of dirEntries){if(entry.isDirectory()){const subdir=path.join(checkpointsDir,entry.name);let nested;try{nested=await fs.readdir(subdir)}catch(error){if(!isFileMissingError(error)){warnings.push(`checkpoint_subdir_unreadable:${entry.name}`)}continue}for(const file of nested){if(file.endsWith(".json")){files.push(`${entry.name}/${file}`)}}}else if(entry.name.endsWith(".json")){files.push(entry.name)}}return files.sort()}async function runCheckpointGc(pmRoot,options){const{dryRun,hooks}=options;const nowMs=options.now??Date.now();const retentionMs=Math.max(0,options.retentionDays)*MILLISECONDS_PER_DAY;const checkpointsDir=path.join(pmRoot,"checkpoints");const result={scanned:0,removed:[],retained:[],warnings:[],entries:[]};const files=await collectCheckpointFiles(checkpointsDir,result.warnings);for(const relName of files){const absPath=path.join(checkpointsDir,relName);const relPath=`checkpoints/${relName}`;result.scanned+=1;if(hooks?.onRead){result.warnings.push(...await hooks.onRead(absPath))}let raw;try{raw=await fs.readFile(absPath,"utf8")}catch(readError){if(isFileMissingError(readError)){result.scanned-=1;continue}result.warnings.push(`checkpoint_unreadable:${relName}`);result.retained.push(relPath);result.entries.push({file:relPath,created_at:null,age_seconds:null,stale:false,reason:"unparseable"});continue}const createdAt=readCheckpointCreatedAt(raw);const createdAtMs=createdAt===null?Number.NaN:Date.parse(createdAt);if(!Number.isFinite(createdAtMs)){result.warnings.push(`checkpoint_unparseable:${relName}`);result.retained.push(relPath);result.entries.push({file:relPath,created_at:createdAt,age_seconds:null,stale:false,reason:"unparseable"});continue}const ageMs=nowMs-createdAtMs;const entry={file:relPath,created_at:createdAt,age_seconds:Math.floor(ageMs/1e3),stale:ageMs>retentionMs,reason:ageMs>retentionMs?"expired":"active"};if(!entry.stale){result.retained.push(relPath);result.entries.push(entry);continue}if(!dryRun){try{await fs.unlink(absPath)}catch(unlinkError){if(!isFileMissingError(unlinkError)){result.warnings.push(`checkpoint_remove_failed:${relName}`);result.retained.push(relPath);result.entries.push(entry);continue}}if(hooks?.onWrite){result.warnings.push(...await hooks.onWrite(absPath))}}result.removed.push(relPath);result.entries.push(entry)}return result}export{runCheckpointGc};
|
|
169
2
|
//# sourceMappingURL=checkpoint-gc.js.map
|
|
170
|
-
//# debugId=b26cf702-330e-5cf5-8371-204220d5c5c9
|
|
@@ -1,134 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Provides mutation checkpoint primitives for reversible multi-item operations.
|
|
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]="71a8cd89-54fc-5f8a-b93b-9e4a79bb34b6")}catch(e){}}();
|
|
8
|
-
import { mkdir, readFile } from "node:fs/promises";
|
|
9
|
-
import path from "node:path";
|
|
10
|
-
import { pathExists, writeFileAtomic } from "../fs/fs-utils.js";
|
|
11
|
-
import { EXIT_CODE } from "../shared/constants.js";
|
|
12
|
-
import { PmCliError } from "../shared/errors.js";
|
|
13
|
-
import { toErrorMessage } from "../shared/primitives.js";
|
|
14
|
-
import { nowIso } from "../shared/time.js";
|
|
15
|
-
/** Implements normalize checkpoint id for the public runtime surface of this module. */
|
|
16
|
-
export function normalizeCheckpointId(raw) {
|
|
17
|
-
const trimmed = raw.trim();
|
|
18
|
-
if (!trimmed) {
|
|
19
|
-
throw new PmCliError("--rollback requires a non-empty checkpoint ID", EXIT_CODE.USAGE);
|
|
20
|
-
}
|
|
21
|
-
if (!/^[a-zA-Z0-9._-]+$/.test(trimmed)) {
|
|
22
|
-
throw new PmCliError("--rollback checkpoint ID must match [a-zA-Z0-9._-]+", EXIT_CODE.USAGE);
|
|
23
|
-
}
|
|
24
|
-
return trimmed;
|
|
25
|
-
}
|
|
26
|
-
/** Implements create checkpoint id for the public runtime surface of this module. */
|
|
27
|
-
export function createCheckpointId(prefix, nowValue) {
|
|
28
|
-
const compactTimestamp = nowValue.replace(/[-:.TZ]/g, "").slice(0, 14);
|
|
29
|
-
const randomSuffix = Math.random().toString(36).slice(2, 8);
|
|
30
|
-
return `${prefix}-${compactTimestamp}-${randomSuffix}`;
|
|
31
|
-
}
|
|
32
|
-
/** Implements checkpoint directory path for the public runtime surface of this module. */
|
|
33
|
-
export function checkpointDirectoryPath(pmRoot, subdir) {
|
|
34
|
-
return path.join(pmRoot, "checkpoints", subdir);
|
|
35
|
-
}
|
|
36
|
-
/** Implements checkpoint file path for the public runtime surface of this module. */
|
|
37
|
-
export function checkpointFilePath(pmRoot, subdir, checkpointId) {
|
|
38
|
-
return path.join(checkpointDirectoryPath(pmRoot, subdir), `${checkpointId}.json`);
|
|
39
|
-
}
|
|
40
|
-
/** Implements write mutation checkpoint for the public runtime surface of this module. */
|
|
41
|
-
export async function writeMutationCheckpoint(pmRoot, subdir, checkpointId, payload) {
|
|
42
|
-
const checkpointDir = checkpointDirectoryPath(pmRoot, subdir);
|
|
43
|
-
await mkdir(checkpointDir, { recursive: true });
|
|
44
|
-
const filePath = checkpointFilePath(pmRoot, subdir, checkpointId);
|
|
45
|
-
await writeFileAtomic(filePath, `${JSON.stringify(payload, null, 2)}\n`);
|
|
46
|
-
return filePath;
|
|
47
|
-
}
|
|
48
|
-
function parseCheckpointItems(record, checkpointId) {
|
|
49
|
-
if (!Array.isArray(record.items)) {
|
|
50
|
-
throw new PmCliError(`Checkpoint ${checkpointId} is missing items`, EXIT_CODE.GENERIC_FAILURE);
|
|
51
|
-
}
|
|
52
|
-
return record.items.map((entry) => {
|
|
53
|
-
if (!entry || typeof entry !== "object") {
|
|
54
|
-
throw new PmCliError(`Checkpoint ${checkpointId} contains an invalid item entry`, EXIT_CODE.GENERIC_FAILURE);
|
|
55
|
-
}
|
|
56
|
-
const row = entry;
|
|
57
|
-
if (typeof row.id !== "string" || row.id.trim().length === 0) {
|
|
58
|
-
throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without ID`, EXIT_CODE.GENERIC_FAILURE);
|
|
59
|
-
}
|
|
60
|
-
if (typeof row.target_updated_at !== "string" ||
|
|
61
|
-
row.target_updated_at.trim().length === 0) {
|
|
62
|
-
throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without target_updated_at`, EXIT_CODE.GENERIC_FAILURE);
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
id: row.id.trim(),
|
|
66
|
-
target_updated_at: row.target_updated_at.trim(),
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
/** Implements load mutation checkpoint for the public runtime surface of this module. */
|
|
71
|
-
export async function loadMutationCheckpoint(pmRoot, subdir, rawCheckpointId, schemaVersion) {
|
|
72
|
-
const normalizedId = normalizeCheckpointId(rawCheckpointId);
|
|
73
|
-
const filePath = checkpointFilePath(pmRoot, subdir, normalizedId);
|
|
74
|
-
if (!(await pathExists(filePath))) {
|
|
75
|
-
throw new PmCliError(`Checkpoint ${normalizedId} not found`, EXIT_CODE.NOT_FOUND);
|
|
76
|
-
}
|
|
77
|
-
const raw = await readFile(filePath, "utf8");
|
|
78
|
-
let parsed;
|
|
79
|
-
try {
|
|
80
|
-
parsed = JSON.parse(raw);
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
throw new PmCliError(`Checkpoint ${normalizedId} contains invalid JSON: ${toErrorMessage(error)}`, EXIT_CODE.GENERIC_FAILURE);
|
|
84
|
-
}
|
|
85
|
-
if (!parsed || typeof parsed !== "object") {
|
|
86
|
-
throw new PmCliError(`Checkpoint ${normalizedId} is invalid`, EXIT_CODE.GENERIC_FAILURE);
|
|
87
|
-
}
|
|
88
|
-
const record = parsed;
|
|
89
|
-
if (record.schema_version !== schemaVersion) {
|
|
90
|
-
throw new PmCliError(`Checkpoint ${normalizedId} has unsupported schema version`, EXIT_CODE.GENERIC_FAILURE);
|
|
91
|
-
}
|
|
92
|
-
const items = parseCheckpointItems(record, normalizedId);
|
|
93
|
-
return {
|
|
94
|
-
record,
|
|
95
|
-
items,
|
|
96
|
-
path: filePath,
|
|
97
|
-
id: typeof record.id === "string" ? record.id : normalizedId,
|
|
98
|
-
// Defensive recovery for malformed checkpoint metadata; normal writes
|
|
99
|
-
// always include these fields, so fallbacks keep rollback inspectable.
|
|
100
|
-
created_at: typeof record.created_at === "string" ? record.created_at : nowIso(),
|
|
101
|
-
author: typeof record.author === "string" ? record.author : "unknown",
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/** Restore every checkpointed item to its captured pre-mutation timestamp, collecting per-item rows. A single item's failure is recorded and does not abort the remaining restores. */
|
|
105
|
-
export async function restoreCheckpointItems(items, restore) {
|
|
106
|
-
const rows = [];
|
|
107
|
-
const restoredIds = [];
|
|
108
|
-
for (const entry of items) {
|
|
109
|
-
try {
|
|
110
|
-
const restored = await restore(entry.id, entry.target_updated_at);
|
|
111
|
-
rows.push({
|
|
112
|
-
id: entry.id,
|
|
113
|
-
status: "restored",
|
|
114
|
-
changed_fields: restored.changed_fields,
|
|
115
|
-
warnings: restored.warnings,
|
|
116
|
-
});
|
|
117
|
-
restoredIds.push(entry.id);
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
rows.push({
|
|
121
|
-
id: entry.id,
|
|
122
|
-
status: "failed",
|
|
123
|
-
error: toErrorMessage(error),
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return {
|
|
128
|
-
rows,
|
|
129
|
-
restored_ids: restoredIds,
|
|
130
|
-
failed_count: rows.filter((row) => row.status === "failed").length,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
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]="9d3152f0-afc9-5be8-9303-b02ea2666631")}catch(e2){}})();import{mkdir,readFile}from"node:fs/promises";import path from"node:path";import{pathExists,writeFileAtomic}from"../fs/fs-utils.js";import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{toErrorMessage}from"../shared/primitives.js";import{nowIso}from"../shared/time.js";function normalizeCheckpointId(raw){const trimmed=raw.trim();if(!trimmed){throw new PmCliError("--rollback requires a non-empty checkpoint ID",EXIT_CODE.USAGE)}if(!/^[a-zA-Z0-9._-]+$/.test(trimmed)){throw new PmCliError("--rollback checkpoint ID must match [a-zA-Z0-9._-]+",EXIT_CODE.USAGE)}return trimmed}function createCheckpointId(prefix,nowValue){const compactTimestamp=nowValue.replace(/[-:.TZ]/g,"").slice(0,14);const randomSuffix=Math.random().toString(36).slice(2,8);return`${prefix}-${compactTimestamp}-${randomSuffix}`}function checkpointDirectoryPath(pmRoot,subdir){return path.join(pmRoot,"checkpoints",subdir)}function checkpointFilePath(pmRoot,subdir,checkpointId){return path.join(checkpointDirectoryPath(pmRoot,subdir),`${checkpointId}.json`)}async function writeMutationCheckpoint(pmRoot,subdir,checkpointId,payload){const checkpointDir=checkpointDirectoryPath(pmRoot,subdir);await mkdir(checkpointDir,{recursive:true});const filePath=checkpointFilePath(pmRoot,subdir,checkpointId);await writeFileAtomic(filePath,`${JSON.stringify(payload,null,2)}
|
|
2
|
+
`);return filePath}function parseCheckpointItems(record,checkpointId){if(!Array.isArray(record.items)){throw new PmCliError(`Checkpoint ${checkpointId} is missing items`,EXIT_CODE.GENERIC_FAILURE)}return record.items.map(entry=>{if(!entry||typeof entry!=="object"){throw new PmCliError(`Checkpoint ${checkpointId} contains an invalid item entry`,EXIT_CODE.GENERIC_FAILURE)}const row=entry;if(typeof row.id!=="string"||row.id.trim().length===0){throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without ID`,EXIT_CODE.GENERIC_FAILURE)}if(typeof row.target_updated_at!=="string"||row.target_updated_at.trim().length===0){throw new PmCliError(`Checkpoint ${checkpointId} contains an item entry without target_updated_at`,EXIT_CODE.GENERIC_FAILURE)}return{id:row.id.trim(),target_updated_at:row.target_updated_at.trim()}})}async function loadMutationCheckpoint(pmRoot,subdir,rawCheckpointId,schemaVersion){const normalizedId=normalizeCheckpointId(rawCheckpointId);const filePath=checkpointFilePath(pmRoot,subdir,normalizedId);if(!await pathExists(filePath)){throw new PmCliError(`Checkpoint ${normalizedId} not found`,EXIT_CODE.NOT_FOUND)}const raw=await readFile(filePath,"utf8");let parsed;try{parsed=JSON.parse(raw)}catch(error){throw new PmCliError(`Checkpoint ${normalizedId} contains invalid JSON: ${toErrorMessage(error)}`,EXIT_CODE.GENERIC_FAILURE)}if(!parsed||typeof parsed!=="object"){throw new PmCliError(`Checkpoint ${normalizedId} is invalid`,EXIT_CODE.GENERIC_FAILURE)}const record=parsed;if(record.schema_version!==schemaVersion){throw new PmCliError(`Checkpoint ${normalizedId} has unsupported schema version`,EXIT_CODE.GENERIC_FAILURE)}const items=parseCheckpointItems(record,normalizedId);return{record,items,path:filePath,id:typeof record.id==="string"?record.id:normalizedId,created_at:typeof record.created_at==="string"?record.created_at:nowIso(),author:typeof record.author==="string"?record.author:"unknown"}}async function restoreCheckpointItems(items,restore){const rows=[];const restoredIds=[];for(const entry of items){try{const restored=await restore(entry.id,entry.target_updated_at);rows.push({id:entry.id,status:"restored",changed_fields:restored.changed_fields,warnings:restored.warnings});restoredIds.push(entry.id)}catch(error){rows.push({id:entry.id,status:"failed",error:toErrorMessage(error)})}}return{rows,restored_ids:restoredIds,failed_count:rows.filter(row=>row.status==="failed").length}}export{checkpointDirectoryPath,checkpointFilePath,createCheckpointId,loadMutationCheckpoint,normalizeCheckpointId,restoreCheckpointItems,writeMutationCheckpoint};
|
|
133
3
|
//# sourceMappingURL=mutation-checkpoint.js.map
|
|
134
|
-
//# debugId=71a8cd89-54fc-5f8a-b93b-9e4a79bb34b6
|