@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,528 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/history-compact
|
|
3
|
-
*
|
|
4
|
-
* Implements the pm history compact command surface and its agent-facing runtime behavior.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="26c39ecd-5d72-5cc9-b22b-6abc33fbf4ac")}catch(e){}}();
|
|
8
|
-
import { assertInitializedTracker } from "./environment/tracker-preflight.js";
|
|
9
|
-
import fs from "node:fs/promises";
|
|
10
|
-
import path from "node:path";
|
|
11
|
-
import { createHistoryEntry, hashHistoryStream, sealHistoryRecord, SUPPORTED_HISTORY_ITEM_HASH_VERSIONS, } from "../core/history/history.js";
|
|
12
|
-
import { selectHistoryCompactBulkTargets, } from "../core/history/history-compact-bulk.js";
|
|
13
|
-
import { executeHistoryRewrite, writeHistoryRawWithRollback, } from "../core/history/history-rewrite.js";
|
|
14
|
-
import { cloneEmptyReplayDocument, historyEntriesToRaw, replayHashVerificationCandidates, replayToItemDocument, toReplayDocument, verifyHistoryChain, } from "../core/history/replay.js";
|
|
15
|
-
import { applyHistoryPatch } from "../core/history/projection.js";
|
|
16
|
-
import { readHistoryEntries } from "../core/history/read.js";
|
|
17
|
-
import { historyVersionOffset } from "../core/history/version-address.js";
|
|
18
|
-
import { resolveItemTypeRegistry } from "../core/item/type-registry.js";
|
|
19
|
-
import { lifecycleClassifierFromStatusRegistry } from "../core/governance/metadata-coverage.js";
|
|
20
|
-
import { resolveRuntimeStatusRegistry } from "../core/schema/runtime-schema.js";
|
|
21
|
-
import { listAllItemMetadataLight } from "../core/store/item-store.js";
|
|
22
|
-
import { pathExists, readFileIfExists } from "../core/fs/fs-utils.js";
|
|
23
|
-
import { normalizeBulkIdsValue, parseBulkIdsText, } from "../core/io/bulk-ids-input.js";
|
|
24
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
25
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
26
|
-
import { nowIso } from "../core/shared/time.js";
|
|
27
|
-
import { getActiveExtensionRegistrations, runActiveOnReadHooks, runActiveOnWriteHooks, } from "../core/extensions/index.js";
|
|
28
|
-
import { readLocatedItem } from "../core/store/item-store.js";
|
|
29
|
-
import { resolvePmRoot } from "../core/store/paths.js";
|
|
30
|
-
import { readSettings } from "../core/store/settings.js";
|
|
31
|
-
import { resolveAuthor } from "../core/shared/author.js";
|
|
32
|
-
import { resolveHistorySubject } from "./history-redact.js";
|
|
33
|
-
/** Translate a durable version or timestamp boundary into physical compacted and retained counts. */
|
|
34
|
-
function parseBeforeBoundary(before, entries) {
|
|
35
|
-
if (before === undefined) {
|
|
36
|
-
return {
|
|
37
|
-
kind: "default",
|
|
38
|
-
raw: null,
|
|
39
|
-
compactCount: entries.length,
|
|
40
|
-
retainedCount: 0,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
const raw = before.trim();
|
|
44
|
-
if (raw.length === 0) {
|
|
45
|
-
throw new PmCliError("history-compact --before requires a non-empty value.", EXIT_CODE.USAGE);
|
|
46
|
-
}
|
|
47
|
-
if (/^\d+$/.test(raw)) {
|
|
48
|
-
const version = Number.parseInt(raw, 10);
|
|
49
|
-
const offset = historyVersionOffset(entries);
|
|
50
|
-
if (!Number.isSafeInteger(version) ||
|
|
51
|
-
version < offset + 1 ||
|
|
52
|
-
version > offset + entries.length + 1) {
|
|
53
|
-
throw new PmCliError(`history-compact --before version must be between ${offset + 1} and ${offset + entries.length + 1}.`, EXIT_CODE.USAGE);
|
|
54
|
-
}
|
|
55
|
-
const compactCount = version - offset - 1;
|
|
56
|
-
return {
|
|
57
|
-
kind: "version",
|
|
58
|
-
raw,
|
|
59
|
-
compactCount,
|
|
60
|
-
retainedCount: entries.length - compactCount,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
const beforeTs = Date.parse(raw);
|
|
64
|
-
if (!Number.isFinite(beforeTs)) {
|
|
65
|
-
throw new PmCliError(`Invalid history-compact --before value "${before}". Use a version number or ISO timestamp.`, EXIT_CODE.USAGE);
|
|
66
|
-
}
|
|
67
|
-
let compactCount = 0;
|
|
68
|
-
for (const [index, entry] of entries.entries()) {
|
|
69
|
-
const entryTs = Date.parse(entry.ts);
|
|
70
|
-
if (!Number.isFinite(entryTs)) {
|
|
71
|
-
throw new PmCliError(`History for this item contains invalid timestamp at entry ${index + 1}.`, EXIT_CODE.GENERIC_FAILURE);
|
|
72
|
-
}
|
|
73
|
-
if (entryTs >= beforeTs) {
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
compactCount += 1;
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
kind: "timestamp",
|
|
80
|
-
raw,
|
|
81
|
-
compactCount,
|
|
82
|
-
retainedCount: entries.length - compactCount,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/** Fold the already verified stream once, capturing its compaction checkpoint. */
|
|
86
|
-
function replayHistoryAndResolveCheckpoint(entries, compactCount) {
|
|
87
|
-
let replay = cloneEmptyReplayDocument();
|
|
88
|
-
let checkpoint = cloneEmptyReplayDocument();
|
|
89
|
-
for (let index = 0; index < entries.length; index += 1) {
|
|
90
|
-
const entry = entries[index];
|
|
91
|
-
replay = applyHistoryPatch(replay, entry.patch, index + 1, entry.op);
|
|
92
|
-
if (index + 1 === compactCount) {
|
|
93
|
-
checkpoint = structuredClone(replay);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
checkpoint,
|
|
98
|
-
finalReplay: replay,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/** Snapshot the live item and compare it with the stream's supported historical hash surfaces. */
|
|
102
|
-
async function loadHistoryCompactCurrentItem(subject, settings, historyEntries) {
|
|
103
|
-
const loadedItem = subject.located
|
|
104
|
-
? await readLocatedItem(subject.located, { schema: settings.schema })
|
|
105
|
-
: null;
|
|
106
|
-
if (!loadedItem) {
|
|
107
|
-
return {
|
|
108
|
-
loadedItem: null,
|
|
109
|
-
currentItemRawBeforeLock: null,
|
|
110
|
-
matchedChainBefore: null,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
const lastEntry = historyEntries[historyEntries.length - 1];
|
|
114
|
-
return {
|
|
115
|
-
loadedItem,
|
|
116
|
-
currentItemRawBeforeLock: loadedItem.raw,
|
|
117
|
-
matchedChainBefore: SUPPORTED_HISTORY_ITEM_HASH_VERSIONS.some((version) => (lastEntry.item_hash_version === undefined || lastEntry.item_hash_version === version) &&
|
|
118
|
-
replayHashVerificationCandidates(toReplayDocument(loadedItem.document), version).includes(lastEntry.after_hash)),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function buildHistoryCompactMessage(options, boundary) {
|
|
122
|
-
if (typeof options.message === "string" &&
|
|
123
|
-
options.message.trim().length > 0) {
|
|
124
|
-
return options.message;
|
|
125
|
-
}
|
|
126
|
-
if (boundary.raw === null) {
|
|
127
|
-
return `history-compact compacted full stream (${boundary.compactCount} entr${boundary.compactCount === 1 ? "y" : "ies"}).`;
|
|
128
|
-
}
|
|
129
|
-
return `history-compact compacted ${boundary.compactCount} entr${boundary.compactCount === 1 ? "y" : "ies"} before ${boundary.raw}.`;
|
|
130
|
-
}
|
|
131
|
-
function buildHistoryCompactBaselineMessage(boundary) {
|
|
132
|
-
if (boundary.raw === null) {
|
|
133
|
-
return `history-compact baseline snapshot after compacting ${boundary.compactCount} entr${boundary.compactCount === 1 ? "y" : "ies"}.`;
|
|
134
|
-
}
|
|
135
|
-
return `history-compact baseline snapshot before ${boundary.raw}.`;
|
|
136
|
-
}
|
|
137
|
-
/** Replace the pruned prefix with a durable-addressed checkpoint while retaining original records and hash semantics. */
|
|
138
|
-
function buildHistoryCompactEntries(params) {
|
|
139
|
-
if (!params.changed) {
|
|
140
|
-
return {
|
|
141
|
-
rewrittenEntries: params.historyEntries,
|
|
142
|
-
baselineEntryAdded: false,
|
|
143
|
-
auditEntryAdded: false,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
const { checkpoint, finalReplay } = replayHistoryAndResolveCheckpoint(params.historyEntries, params.boundary.compactCount);
|
|
147
|
-
const retained = params.historyEntries.slice(params.boundary.compactCount);
|
|
148
|
-
const offset = historyVersionOffset(params.historyEntries, true);
|
|
149
|
-
const baselineEntry = createHistoryEntry({
|
|
150
|
-
nowIso: params.historyEntries[params.boundary.compactCount - 1].ts,
|
|
151
|
-
author: params.author,
|
|
152
|
-
op: "history_compact_baseline",
|
|
153
|
-
before: replayToItemDocument(cloneEmptyReplayDocument()),
|
|
154
|
-
after: replayToItemDocument(checkpoint),
|
|
155
|
-
message: buildHistoryCompactBaselineMessage(params.boundary),
|
|
156
|
-
context: {
|
|
157
|
-
history_compaction: {
|
|
158
|
-
contract_version: 1,
|
|
159
|
-
version_offset: offset === null ? null : offset + params.boundary.compactCount - 1,
|
|
160
|
-
checkpoint_timestamp_semantics: "last_compacted_entry",
|
|
161
|
-
pruned_entry_count: params.boundary.compactCount,
|
|
162
|
-
pruned_stream_digest: hashHistoryStream(params.historyEntries.slice(0, params.boundary.compactCount)),
|
|
163
|
-
retained_proof: "stream_digest_and_checkpoint",
|
|
164
|
-
limitation: "individual_pruned_entries_require_pre_compaction_stream",
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
});
|
|
168
|
-
const checkpointEntry = params.historyEntries[params.boundary.compactCount - 1];
|
|
169
|
-
// Preserve the checkpoint's epoch and semantic hash variant. Do not introduce
|
|
170
|
-
// an explicit epoch into an unversioned stream: it would pin later legacy reads.
|
|
171
|
-
const rewrittenEntries = [sealHistoryRecord({
|
|
172
|
-
...baselineEntry,
|
|
173
|
-
before_hash: params.historyEntries[0].before_hash,
|
|
174
|
-
after_hash: checkpointEntry.after_hash,
|
|
175
|
-
item_hash_version: checkpointEntry.item_hash_version,
|
|
176
|
-
}), ...retained];
|
|
177
|
-
if (!params.dryRun) {
|
|
178
|
-
rewrittenEntries.push(createHistoryEntry({
|
|
179
|
-
nowIso: nowIso(),
|
|
180
|
-
author: params.author,
|
|
181
|
-
op: "history_compact",
|
|
182
|
-
before: replayToItemDocument(finalReplay),
|
|
183
|
-
after: replayToItemDocument(finalReplay),
|
|
184
|
-
message: buildHistoryCompactMessage(params.options, params.boundary),
|
|
185
|
-
}));
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
rewrittenEntries,
|
|
189
|
-
baselineEntryAdded: true,
|
|
190
|
-
auditEntryAdded: !params.dryRun,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
async function applyHistoryCompactRewrite(params) {
|
|
194
|
-
return executeHistoryRewrite({
|
|
195
|
-
pmRoot: params.pmRoot,
|
|
196
|
-
subject: params.subject,
|
|
197
|
-
settings: params.settings,
|
|
198
|
-
typeRegistry: params.typeRegistry,
|
|
199
|
-
historyRawBeforeLock: params.historyRawBeforeLock,
|
|
200
|
-
currentItemRawBeforeLock: params.currentItemRawBeforeLock,
|
|
201
|
-
operation: "history-compact",
|
|
202
|
-
author: params.author,
|
|
203
|
-
force: params.force,
|
|
204
|
-
itemDocument: params.loadedItem?.document ?? null,
|
|
205
|
-
applyRewrite: async ({ historyRawUnderLock }) => writeHistoryRawWithRollback({
|
|
206
|
-
historyPath: params.historyPath,
|
|
207
|
-
nextHistoryRaw: historyEntriesToRaw(params.rewrittenEntries),
|
|
208
|
-
historyRawUnderLock,
|
|
209
|
-
}),
|
|
210
|
-
applyPostRewrite: async () => runActiveOnWriteHooks({
|
|
211
|
-
path: params.historyPath,
|
|
212
|
-
scope: "project",
|
|
213
|
-
op: "history_compact:history",
|
|
214
|
-
}),
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
/** Implements run history compact for the public runtime surface of this module. */
|
|
218
|
-
export async function runHistoryCompact(id, options, global) {
|
|
219
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
220
|
-
await assertInitializedTracker(pmRoot);
|
|
221
|
-
const settings = await readSettings(pmRoot);
|
|
222
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
223
|
-
const subject = await resolveHistorySubject(pmRoot, id, settings, typeRegistry.type_to_folder);
|
|
224
|
-
const historyPath = subject.historyPath;
|
|
225
|
-
const historyRawBeforeLock = await readFileIfExists(historyPath);
|
|
226
|
-
if (historyRawBeforeLock === null) {
|
|
227
|
-
throw new PmCliError(`No history stream exists for ${subject.id}.`, EXIT_CODE.NOT_FOUND);
|
|
228
|
-
}
|
|
229
|
-
const historyEntries = await readHistoryEntries(historyPath, subject.id);
|
|
230
|
-
if (historyEntries.length === 0) {
|
|
231
|
-
throw new PmCliError(`No history entries exist for ${subject.id}; nothing to compact.`, EXIT_CODE.USAGE);
|
|
232
|
-
}
|
|
233
|
-
const chainVerification = verifyHistoryChain(historyEntries);
|
|
234
|
-
if (!chainVerification.ok) {
|
|
235
|
-
throw new PmCliError(`history-compact requires a valid history chain (${chainVerification.errors.join(", ")}). Run pm history-repair ${subject.id} first.`, EXIT_CODE.CONFLICT);
|
|
236
|
-
}
|
|
237
|
-
const boundary = parseBeforeBoundary(options.before, historyEntries);
|
|
238
|
-
const changed = boundary.compactCount > 0;
|
|
239
|
-
const dryRun = Boolean(options.dryRun);
|
|
240
|
-
const author = resolveAuthor(options.author, settings.author_default);
|
|
241
|
-
const warnings = [];
|
|
242
|
-
if (!changed) {
|
|
243
|
-
warnings.push("history_compact_noop_before_boundary");
|
|
244
|
-
}
|
|
245
|
-
const currentItem = await loadHistoryCompactCurrentItem(subject, settings, historyEntries);
|
|
246
|
-
if (currentItem.matchedChainBefore === false) {
|
|
247
|
-
warnings.push("history_compact_item_chain_mismatch");
|
|
248
|
-
}
|
|
249
|
-
const { rewrittenEntries, baselineEntryAdded, auditEntryAdded } = buildHistoryCompactEntries({
|
|
250
|
-
historyEntries,
|
|
251
|
-
boundary,
|
|
252
|
-
changed,
|
|
253
|
-
dryRun,
|
|
254
|
-
author,
|
|
255
|
-
options,
|
|
256
|
-
});
|
|
257
|
-
const rewrittenVerify = verifyHistoryChain(rewrittenEntries);
|
|
258
|
-
if (!rewrittenVerify.ok) {
|
|
259
|
-
throw new PmCliError(`history-compact produced an invalid rewritten chain (${rewrittenVerify.errors.join(", ")}).`, EXIT_CODE.GENERIC_FAILURE);
|
|
260
|
-
}
|
|
261
|
-
if (changed && !dryRun) {
|
|
262
|
-
warnings.push(...(await applyHistoryCompactRewrite({
|
|
263
|
-
pmRoot,
|
|
264
|
-
subject,
|
|
265
|
-
settings,
|
|
266
|
-
typeRegistry,
|
|
267
|
-
historyRawBeforeLock,
|
|
268
|
-
currentItemRawBeforeLock: currentItem.currentItemRawBeforeLock,
|
|
269
|
-
author,
|
|
270
|
-
force: options.force,
|
|
271
|
-
loadedItem: currentItem.loadedItem,
|
|
272
|
-
historyPath,
|
|
273
|
-
rewrittenEntries,
|
|
274
|
-
})));
|
|
275
|
-
}
|
|
276
|
-
const offset = historyVersionOffset(historyEntries, true);
|
|
277
|
-
const firstRetainedEntry = boundary.retainedCount > 0 && offset !== null ? offset + boundary.compactCount + 1 : null;
|
|
278
|
-
return {
|
|
279
|
-
id: subject.id,
|
|
280
|
-
dry_run: dryRun,
|
|
281
|
-
changed,
|
|
282
|
-
compact_boundary: {
|
|
283
|
-
kind: boundary.kind,
|
|
284
|
-
before: boundary.raw,
|
|
285
|
-
entries_compacted: boundary.compactCount,
|
|
286
|
-
entries_retained: boundary.retainedCount,
|
|
287
|
-
first_retained_entry: firstRetainedEntry,
|
|
288
|
-
},
|
|
289
|
-
history: {
|
|
290
|
-
path: historyPath,
|
|
291
|
-
entries_scanned: historyEntries.length,
|
|
292
|
-
entries_after: rewrittenEntries.length,
|
|
293
|
-
baseline_entry_added: baselineEntryAdded,
|
|
294
|
-
audit_entry_added: auditEntryAdded,
|
|
295
|
-
verify_ok: rewrittenVerify.ok,
|
|
296
|
-
verify_errors: rewrittenVerify.errors,
|
|
297
|
-
},
|
|
298
|
-
item: {
|
|
299
|
-
exists: subject.located !== null,
|
|
300
|
-
path: subject.located?.itemPath ?? null,
|
|
301
|
-
matched_chain_before: currentItem.matchedChainBefore,
|
|
302
|
-
},
|
|
303
|
-
warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),
|
|
304
|
-
generated_at: nowIso(),
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
/** Default entry floor below which a stream is treated as already compact. */
|
|
308
|
-
export const HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES = 3;
|
|
309
|
-
function normalizeHistoryCompactBulkOptions(options) {
|
|
310
|
-
const normalizedIdsText = normalizeBulkIdsValue(options.ids);
|
|
311
|
-
if (options.ids !== undefined && normalizedIdsText === "") {
|
|
312
|
-
throw new PmCliError("history-compact ids requires at least one valid item ID.", EXIT_CODE.USAGE, {
|
|
313
|
-
code: "bulk_ids_input_empty",
|
|
314
|
-
required: "Provide one or more string or finite numeric IDs; non-finite and unsupported selector values are rejected.",
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
return {
|
|
318
|
-
...options,
|
|
319
|
-
ids: normalizedIdsText === undefined
|
|
320
|
-
? undefined
|
|
321
|
-
: parseBulkIdsText(normalizedIdsText),
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
/** Enforce the `pm history-compact` target contract shared by the CLI and MCP surfaces: exactly one selection mode — a single item `<id>`, an explicit `--ids` list, or a scan selector (`--all-over` / `--closed` / `--all-streams`). */
|
|
325
|
-
export function assertHistoryCompactTarget(id, bulk) {
|
|
326
|
-
const hasIds = bulk.ids !== undefined && bulk.ids.length > 0;
|
|
327
|
-
const hasScan = bulk.allOver !== undefined || bulk.scope !== undefined;
|
|
328
|
-
const selectorCount = (id !== undefined ? 1 : 0) + (hasIds ? 1 : 0) + (hasScan ? 1 : 0);
|
|
329
|
-
if (selectorCount === 0) {
|
|
330
|
-
throw new PmCliError("history-compact: provide an item <id>, or a bulk selector (--ids, --all-over <N>, --closed, or --all-streams).", EXIT_CODE.USAGE);
|
|
331
|
-
}
|
|
332
|
-
if (id !== undefined && (hasIds || hasScan)) {
|
|
333
|
-
throw new PmCliError("history-compact: <id> and bulk selectors (--ids/--all-over/--closed/--all-streams) are mutually exclusive; pass one item id, or use bulk mode without a positional id.", EXIT_CODE.USAGE);
|
|
334
|
-
}
|
|
335
|
-
if (hasIds && hasScan) {
|
|
336
|
-
throw new PmCliError("history-compact: --ids is mutually exclusive with --all-over/--closed/--all-streams; pass an explicit id list or a scan selector, not both.", EXIT_CODE.USAGE);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
function countHistoryStreamEntries(raw) {
|
|
340
|
-
let count = 0;
|
|
341
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
342
|
-
if (line.trim().length > 0) {
|
|
343
|
-
count += 1;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
return count;
|
|
347
|
-
}
|
|
348
|
-
async function collectHistoryCompactBulkCandidates(params) {
|
|
349
|
-
const statusRegistry = resolveRuntimeStatusRegistry(params.settings.schema);
|
|
350
|
-
const classifier = lifecycleClassifierFromStatusRegistry(statusRegistry);
|
|
351
|
-
const items = await listAllItemMetadataLight(params.pmRoot, params.settings.item_format, params.typeToFolder, undefined, params.settings.schema);
|
|
352
|
-
const bucketById = new Map(items.map((item) => [item.id, classifier.classify(item.status)]));
|
|
353
|
-
const historyDir = path.join(params.pmRoot, "history");
|
|
354
|
-
const candidates = [];
|
|
355
|
-
const preselectionErrors = [];
|
|
356
|
-
if (!(await pathExists(historyDir))) {
|
|
357
|
-
return { candidates, preselectionErrors };
|
|
358
|
-
}
|
|
359
|
-
const historyFiles = (await fs.readdir(historyDir))
|
|
360
|
-
.filter((entry) => entry.endsWith(".jsonl"))
|
|
361
|
-
.sort((left, right) => left.localeCompare(right));
|
|
362
|
-
for (const fileName of historyFiles) {
|
|
363
|
-
const historyPath = path.join(historyDir, fileName);
|
|
364
|
-
const id = fileName.slice(0, -".jsonl".length);
|
|
365
|
-
try {
|
|
366
|
-
const raw = await fs.readFile(historyPath, "utf8");
|
|
367
|
-
await runActiveOnReadHooks({ path: historyPath, scope: "project" });
|
|
368
|
-
candidates.push({
|
|
369
|
-
id,
|
|
370
|
-
entries: countHistoryStreamEntries(raw),
|
|
371
|
-
bucket: bucketById.get(id) ?? null,
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
catch (error) {
|
|
375
|
-
preselectionErrors.push({
|
|
376
|
-
id,
|
|
377
|
-
outcome: "errored",
|
|
378
|
-
entries_before: 0,
|
|
379
|
-
entries_after: null,
|
|
380
|
-
skip_reason: null,
|
|
381
|
-
changed: false,
|
|
382
|
-
/* c8 ignore next -- non-Error throws are normalized in defensive fallback. */
|
|
383
|
-
error: error instanceof Error ? error.message : String(error),
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
return { candidates, preselectionErrors };
|
|
388
|
-
}
|
|
389
|
-
async function runHistoryCompactBulkRow(params) {
|
|
390
|
-
if (!params.row.selected) {
|
|
391
|
-
return {
|
|
392
|
-
selected: false,
|
|
393
|
-
compacted: false,
|
|
394
|
-
errored: false,
|
|
395
|
-
result: {
|
|
396
|
-
id: params.row.id,
|
|
397
|
-
outcome: "skipped",
|
|
398
|
-
entries_before: params.row.entries,
|
|
399
|
-
entries_after: null,
|
|
400
|
-
skip_reason: params.row.skip_reason,
|
|
401
|
-
changed: false,
|
|
402
|
-
error: null,
|
|
403
|
-
},
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
try {
|
|
407
|
-
const result = await runHistoryCompact(params.row.id, {
|
|
408
|
-
dryRun: params.dryRun,
|
|
409
|
-
author: params.options.author,
|
|
410
|
-
message: params.options.message,
|
|
411
|
-
force: params.options.force,
|
|
412
|
-
}, params.global);
|
|
413
|
-
return {
|
|
414
|
-
selected: true,
|
|
415
|
-
compacted: true,
|
|
416
|
-
errored: false,
|
|
417
|
-
result: {
|
|
418
|
-
id: params.row.id,
|
|
419
|
-
outcome: "compacted",
|
|
420
|
-
entries_before: params.row.entries,
|
|
421
|
-
entries_after: result.history.entries_after,
|
|
422
|
-
skip_reason: null,
|
|
423
|
-
changed: result.changed,
|
|
424
|
-
error: null,
|
|
425
|
-
},
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
catch (error) {
|
|
429
|
-
return {
|
|
430
|
-
selected: true,
|
|
431
|
-
compacted: false,
|
|
432
|
-
errored: true,
|
|
433
|
-
result: {
|
|
434
|
-
id: params.row.id,
|
|
435
|
-
outcome: "errored",
|
|
436
|
-
entries_before: params.row.entries,
|
|
437
|
-
entries_after: null,
|
|
438
|
-
skip_reason: null,
|
|
439
|
-
changed: false,
|
|
440
|
-
/* c8 ignore next -- non-Error throws are normalized in defensive fallback. */
|
|
441
|
-
error: error instanceof Error ? error.message : String(error),
|
|
442
|
-
},
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Bulk history compaction: compact every history stream matching the requested
|
|
448
|
-
* selection (explicit `--ids`, a `--scope` lifecycle filter, and/or an
|
|
449
|
-
* `--all-over <N>` entry threshold) in one audited pass. Each selected stream is
|
|
450
|
-
* compacted with the same single-item logic ({@link runHistoryCompact}); one
|
|
451
|
-
* failing stream never aborts the rest, and the caller decides the exit code
|
|
452
|
-
* from `totals.items_errored`.
|
|
453
|
-
*
|
|
454
|
-
* When `history.compact_policy` is enabled and no explicit `--all-over` is
|
|
455
|
-
* given, the policy's `max_entries` is used as the scan threshold so the
|
|
456
|
-
* configured policy drives the sweep.
|
|
457
|
-
*/
|
|
458
|
-
export async function runHistoryCompactBulk(options, global) {
|
|
459
|
-
const normalizedOptions = normalizeHistoryCompactBulkOptions(options);
|
|
460
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
461
|
-
await assertInitializedTracker(pmRoot);
|
|
462
|
-
const settings = await readSettings(pmRoot);
|
|
463
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
464
|
-
const { candidates, preselectionErrors } = await collectHistoryCompactBulkCandidates({
|
|
465
|
-
pmRoot,
|
|
466
|
-
settings,
|
|
467
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
468
|
-
});
|
|
469
|
-
const mode = normalizedOptions.ids !== undefined && normalizedOptions.ids.length > 0
|
|
470
|
-
? "ids"
|
|
471
|
-
: "scan";
|
|
472
|
-
const minEntries = options.minEntries ?? HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES;
|
|
473
|
-
const policy = settings.history.compact_policy;
|
|
474
|
-
const policyThresholdApplied = mode === "scan" && options.allOver === undefined && policy.enabled;
|
|
475
|
-
const allOver = options.allOver ??
|
|
476
|
-
(policyThresholdApplied ? policy.max_entries : undefined);
|
|
477
|
-
const selection = selectHistoryCompactBulkTargets(candidates, {
|
|
478
|
-
ids: normalizedOptions.ids,
|
|
479
|
-
scope: options.scope,
|
|
480
|
-
minEntries,
|
|
481
|
-
allOver,
|
|
482
|
-
});
|
|
483
|
-
const dryRun = Boolean(options.dryRun);
|
|
484
|
-
const results = [...preselectionErrors];
|
|
485
|
-
const totals = {
|
|
486
|
-
streams_considered: candidates.length + preselectionErrors.length,
|
|
487
|
-
selected: 0,
|
|
488
|
-
items_compacted: 0,
|
|
489
|
-
items_skipped: 0,
|
|
490
|
-
items_errored: preselectionErrors.length,
|
|
491
|
-
};
|
|
492
|
-
for (const row of selection) {
|
|
493
|
-
const outcome = await runHistoryCompactBulkRow({
|
|
494
|
-
row,
|
|
495
|
-
options: normalizedOptions,
|
|
496
|
-
dryRun,
|
|
497
|
-
global,
|
|
498
|
-
});
|
|
499
|
-
results.push(outcome.result);
|
|
500
|
-
if (!outcome.selected) {
|
|
501
|
-
totals.items_skipped += 1;
|
|
502
|
-
continue;
|
|
503
|
-
}
|
|
504
|
-
totals.selected += 1;
|
|
505
|
-
if (outcome.compacted) {
|
|
506
|
-
totals.items_compacted += 1;
|
|
507
|
-
}
|
|
508
|
-
if (outcome.errored) {
|
|
509
|
-
totals.items_errored += 1;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
return {
|
|
513
|
-
bulk: true,
|
|
514
|
-
dry_run: dryRun,
|
|
515
|
-
mode,
|
|
516
|
-
scope: options.scope ?? null,
|
|
517
|
-
criteria: {
|
|
518
|
-
min_entries: minEntries,
|
|
519
|
-
all_over: allOver ?? null,
|
|
520
|
-
policy_threshold_applied: policyThresholdApplied,
|
|
521
|
-
},
|
|
522
|
-
totals,
|
|
523
|
-
results,
|
|
524
|
-
generated_at: nowIso(),
|
|
525
|
-
};
|
|
526
|
-
}
|
|
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]="d6824edc-ca22-5900-b43b-645135e2562d")}catch(e2){}})();import fs from"node:fs/promises";import path from"node:path";import{createHistoryEntry,hashHistoryStream,sealHistoryRecord,SUPPORTED_HISTORY_ITEM_HASH_VERSIONS}from"../core/history/history.js";import{selectHistoryCompactBulkTargets}from"../core/history/history-compact-bulk.js";import{cloneEmptyReplayDocument,replayHashVerificationCandidates,replayToItemDocument,toReplayDocument}from"../core/history/replay.js";import{applyHistoryPatch}from"../core/history/projection.js";import{historyVersionOffset}from"../core/history/version-address.js";import{lifecycleClassifierFromStatusRegistry}from"../core/governance/metadata-coverage.js";import{resolveRuntimeStatusRegistry}from"../core/schema/runtime-schema.js";import{listAllItemMetadataLight}from"../core/store/item-store.js";import{pathExists}from"../core/fs/fs-utils.js";import{normalizeBulkIdsValue,parseBulkIdsText}from"../core/io/bulk-ids-input.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{nowIso}from"../core/shared/time.js";import{runActiveOnReadHooks}from"../core/extensions/index.js";import{resolveHistoryWorkspace,resolveHistorySubject}from"./history/subject.js";import{runHistoryMaintenance}from"./history/maintenance.js";function parseBeforeBoundary(before,entries){if(before===void 0){return{kind:"default",raw:null,compactCount:entries.length,retainedCount:0}}const raw=before.trim();if(raw.length===0){throw new PmCliError("history-compact --before requires a non-empty value.",EXIT_CODE.USAGE)}if(/^\d+$/.test(raw)){const version=Number.parseInt(raw,10);const offset=historyVersionOffset(entries);if(!Number.isSafeInteger(version)||version<offset+1||version>offset+entries.length+1){throw new PmCliError(`history-compact --before version must be between ${offset+1} and ${offset+entries.length+1}.`,EXIT_CODE.USAGE)}const compactCount2=version-offset-1;return{kind:"version",raw,compactCount:compactCount2,retainedCount:entries.length-compactCount2}}const beforeTs=Date.parse(raw);if(!Number.isFinite(beforeTs)){throw new PmCliError(`Invalid history-compact --before value "${before}". Use a version number or ISO timestamp.`,EXIT_CODE.USAGE)}let compactCount=0;for(const[index,entry]of entries.entries()){const entryTs=Date.parse(entry.ts);if(!Number.isFinite(entryTs)){throw new PmCliError(`History for this item contains invalid timestamp at entry ${index+1}.`,EXIT_CODE.GENERIC_FAILURE)}if(entryTs>=beforeTs){break}compactCount+=1}return{kind:"timestamp",raw,compactCount,retainedCount:entries.length-compactCount}}function replayHistoryAndResolveCheckpoint(entries,compactCount){let replay=cloneEmptyReplayDocument();let checkpoint=cloneEmptyReplayDocument();for(let index=0;index<entries.length;index+=1){const entry=entries[index];replay=applyHistoryPatch(replay,entry.patch,index+1,entry.op);if(index+1===compactCount){checkpoint=structuredClone(replay)}}return{checkpoint,finalReplay:replay}}function describeHistoryCompactCurrentItem(loadedItem,historyEntries){if(!loadedItem){return{loadedItem:null,currentItemRawBeforeLock:null,matchedChainBefore:null}}const lastEntry=historyEntries[historyEntries.length-1];return{loadedItem,currentItemRawBeforeLock:loadedItem.raw,matchedChainBefore:SUPPORTED_HISTORY_ITEM_HASH_VERSIONS.some(version=>(lastEntry.item_hash_version===void 0||lastEntry.item_hash_version===version)&&replayHashVerificationCandidates(toReplayDocument(loadedItem.document),version).includes(lastEntry.after_hash))}}function buildHistoryCompactMessage(options,boundary){if(typeof options.message==="string"&&options.message.trim().length>0){return options.message}if(boundary.raw===null){return`history-compact compacted full stream (${boundary.compactCount} entr${boundary.compactCount===1?"y":"ies"}).`}return`history-compact compacted ${boundary.compactCount} entr${boundary.compactCount===1?"y":"ies"} before ${boundary.raw}.`}function buildHistoryCompactBaselineMessage(boundary){if(boundary.raw===null){return`history-compact baseline snapshot after compacting ${boundary.compactCount} entr${boundary.compactCount===1?"y":"ies"}.`}return`history-compact baseline snapshot before ${boundary.raw}.`}function buildHistoryCompactEntries(params){if(!params.changed){return{rewrittenEntries:params.historyEntries,baselineEntryAdded:false,auditEntryAdded:false}}const{checkpoint,finalReplay}=replayHistoryAndResolveCheckpoint(params.historyEntries,params.boundary.compactCount);const retained=params.historyEntries.slice(params.boundary.compactCount);const offset=historyVersionOffset(params.historyEntries,true);const baselineEntry=createHistoryEntry({nowIso:params.historyEntries[params.boundary.compactCount-1].ts,author:params.author,op:"history_compact_baseline",before:replayToItemDocument(cloneEmptyReplayDocument()),after:replayToItemDocument(checkpoint),message:buildHistoryCompactBaselineMessage(params.boundary),context:{history_compaction:{contract_version:1,version_offset:offset===null?null:offset+params.boundary.compactCount-1,checkpoint_timestamp_semantics:"last_compacted_entry",pruned_entry_count:params.boundary.compactCount,pruned_stream_digest:hashHistoryStream(params.historyEntries.slice(0,params.boundary.compactCount)),retained_proof:"stream_digest_and_checkpoint",limitation:"individual_pruned_entries_require_pre_compaction_stream"}}});const checkpointEntry=params.historyEntries[params.boundary.compactCount-1];const rewrittenEntries=[sealHistoryRecord({...baselineEntry,before_hash:params.historyEntries[0].before_hash,after_hash:checkpointEntry.after_hash,item_hash_version:checkpointEntry.item_hash_version}),...retained];if(!params.dryRun){rewrittenEntries.push(createHistoryEntry({nowIso:nowIso(),author:params.author,op:"history_compact",before:replayToItemDocument(finalReplay),after:replayToItemDocument(finalReplay),message:buildHistoryCompactMessage(params.options,params.boundary)}))}return{rewrittenEntries,baselineEntryAdded:true,auditEntryAdded:!params.dryRun}}async function runHistoryCompact(id,options,global2){const{pmRoot,settings,typeRegistry}=await resolveHistoryWorkspace(global2.path);const subject=await resolveHistorySubject(pmRoot,id,settings,typeRegistry.type_to_folder);return runHistoryMaintenance({pmRoot,subject,settings,typeRegistry,operation:"history-compact",options,transform:snapshot=>buildHistoryCompactPlan(subject,options,snapshot)})}function buildHistoryCompactPlan(subject,options,snapshot){const historyPath=subject.historyPath;const historyEntries=snapshot.entries;const chainVerification=snapshot.verification;if(!chainVerification.ok){throw new PmCliError(`history-compact requires a valid history chain (${chainVerification.errors.join(", ")}). Run pm history-repair ${subject.id} first.`,EXIT_CODE.CONFLICT)}const boundary=parseBeforeBoundary(options.before,historyEntries);const changed=boundary.compactCount>0;const dryRun=Boolean(options.dryRun);const author=snapshot.author;const warnings=[];if(!changed){warnings.push("history_compact_noop_before_boundary")}const currentItem=describeHistoryCompactCurrentItem(snapshot.loadedItem,historyEntries);if(currentItem.matchedChainBefore===false){warnings.push("history_compact_item_chain_mismatch")}const{rewrittenEntries,baselineEntryAdded,auditEntryAdded}=buildHistoryCompactEntries({historyEntries,boundary,changed,dryRun,author,options});const offset=historyVersionOffset(historyEntries,true);const firstRetainedEntry=boundary.retainedCount>0&&offset!==null?offset+boundary.compactCount+1:null;return{changed,rewrittenEntries,report:({verification:rewrittenVerify,warnings:writeWarnings})=>({id:subject.id,dry_run:dryRun,changed,compact_boundary:{kind:boundary.kind,before:boundary.raw,entries_compacted:boundary.compactCount,entries_retained:boundary.retainedCount,first_retained_entry:firstRetainedEntry},history:{path:historyPath,entries_scanned:historyEntries.length,entries_after:rewrittenEntries.length,baseline_entry_added:baselineEntryAdded,audit_entry_added:auditEntryAdded,verify_ok:rewrittenVerify.ok,verify_errors:rewrittenVerify.errors},item:{exists:subject.located!==null,path:subject.located?.itemPath??null,matched_chain_before:currentItem.matchedChainBefore},warnings:[...new Set([...warnings,...writeWarnings])].sort((left,right)=>left.localeCompare(right)),generated_at:nowIso()})}}const HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES=3;function normalizeHistoryCompactBulkOptions(options){for(const key of["allOver","minEntries"]){const value=options[key];if(value!==void 0&&(!Number.isSafeInteger(value)||value<0)){throw new PmCliError(`history-compact ${key} must be a non-negative safe integer.`,EXIT_CODE.USAGE)}}const normalizedIdsText=normalizeBulkIdsValue(options.ids);if(options.ids!==void 0&&normalizedIdsText===""){throw new PmCliError("history-compact ids requires at least one valid item ID.",EXIT_CODE.USAGE,{code:"bulk_ids_input_empty",required:"Provide one or more string or finite numeric IDs; non-finite and unsupported selector values are rejected."})}return{...options,ids:normalizedIdsText===void 0?void 0:parseBulkIdsText(normalizedIdsText)}}function assertHistoryCompactTarget(id,bulk){const hasIds=bulk.ids!==void 0&&bulk.ids.length>0;const hasScan=bulk.allOver!==void 0||bulk.scope!==void 0;const selectorCount=(id!==void 0?1:0)+(hasIds?1:0)+(hasScan?1:0);if(selectorCount===0){throw new PmCliError("history-compact: provide an item <id>, or a bulk selector (--ids, --all-over <N>, --closed, or --all-streams).",EXIT_CODE.USAGE)}if(id!==void 0&&(hasIds||hasScan)){throw new PmCliError("history-compact: <id> and bulk selectors (--ids/--all-over/--closed/--all-streams) are mutually exclusive; pass one item id, or use bulk mode without a positional id.",EXIT_CODE.USAGE)}if(hasIds&&hasScan){throw new PmCliError("history-compact: --ids is mutually exclusive with --all-over/--closed/--all-streams; pass an explicit id list or a scan selector, not both.",EXIT_CODE.USAGE)}}function countHistoryStreamEntries(raw){let count=0;for(const line of raw.split(/\r?\n/)){if(line.trim().length>0){count+=1}}return count}async function collectHistoryCompactBulkCandidates(params){const statusRegistry=resolveRuntimeStatusRegistry(params.settings.schema);const classifier=lifecycleClassifierFromStatusRegistry(statusRegistry);const items=await listAllItemMetadataLight(params.pmRoot,params.settings.item_format,params.typeToFolder,void 0,params.settings.schema);const bucketById=new Map(items.map(item=>[item.id,classifier.classify(item.status)]));const historyDir=path.join(params.pmRoot,"history");const candidates=[];const preselectionErrors=[];if(!await pathExists(historyDir)){return{candidates,preselectionErrors}}const historyFiles=(await fs.readdir(historyDir)).filter(entry=>entry.endsWith(".jsonl")).sort((left,right)=>left.localeCompare(right));for(const fileName of historyFiles){const historyPath=path.join(historyDir,fileName);const id=fileName.slice(0,-".jsonl".length);try{const raw=await fs.readFile(historyPath,"utf8");await runActiveOnReadHooks({path:historyPath,scope:"project"});candidates.push({id,entries:countHistoryStreamEntries(raw),bucket:bucketById.get(id)??null})}catch(error){preselectionErrors.push({id,outcome:"errored",entries_before:0,entries_after:null,skip_reason:null,changed:false,error:error instanceof Error?error.message:String(error)})}}return{candidates,preselectionErrors}}async function runHistoryCompactBulkRow(params){if(!params.row.selected){return{selected:false,compacted:false,errored:false,result:{id:params.row.id,outcome:"skipped",entries_before:params.row.entries,entries_after:null,skip_reason:params.row.skip_reason,changed:false,error:null}}}try{const result=await runHistoryCompact(params.row.id,{dryRun:params.dryRun,author:params.options.author,message:params.options.message,force:params.options.force},params.global);return{selected:true,compacted:true,errored:false,result:{id:params.row.id,outcome:"compacted",entries_before:params.row.entries,entries_after:result.history.entries_after,skip_reason:null,changed:result.changed,error:null}}}catch(error){return{selected:true,compacted:false,errored:true,result:{id:params.row.id,outcome:"errored",entries_before:params.row.entries,entries_after:null,skip_reason:null,changed:false,error:error instanceof Error?error.message:String(error)}}}}async function runHistoryCompactBulk(options,global2){const normalizedOptions=normalizeHistoryCompactBulkOptions(options);const{pmRoot,settings,typeRegistry}=await resolveHistoryWorkspace(global2.path);const{candidates,preselectionErrors}=await collectHistoryCompactBulkCandidates({pmRoot,settings,typeToFolder:typeRegistry.type_to_folder});const mode=normalizedOptions.ids!==void 0&&normalizedOptions.ids.length>0?"ids":"scan";const minEntries=options.minEntries??HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES;const policy=settings.history.compact_policy;const policyThresholdApplied=mode==="scan"&&options.allOver===void 0&&policy.enabled;const allOver=options.allOver??(policyThresholdApplied?policy.max_entries:void 0);const selection=selectHistoryCompactBulkTargets(candidates,{ids:normalizedOptions.ids,scope:options.scope,minEntries,allOver});const dryRun=Boolean(options.dryRun);const results=[...preselectionErrors];const totals={streams_considered:candidates.length+preselectionErrors.length,selected:0,items_compacted:0,items_skipped:0,items_errored:preselectionErrors.length};for(const row of selection){const outcome=await runHistoryCompactBulkRow({row,options:normalizedOptions,dryRun,global:global2});results.push(outcome.result);if(!outcome.selected){totals.items_skipped+=1;continue}totals.selected+=1;if(outcome.compacted){totals.items_compacted+=1}if(outcome.errored){totals.items_errored+=1}}return{bulk:true,dry_run:dryRun,mode,scope:options.scope??null,criteria:{min_entries:minEntries,all_over:allOver??null,policy_threshold_applied:policyThresholdApplied},totals,results,generated_at:nowIso()}}export{HISTORY_COMPACT_BULK_DEFAULT_MIN_ENTRIES,assertHistoryCompactTarget,runHistoryCompact,runHistoryCompactBulk};
|
|
527
2
|
//# sourceMappingURL=history-compact.js.map
|
|
528
|
-
//# debugId=26c39ecd-5d72-5cc9-b22b-6abc33fbf4ac
|
package/dist/sdk/history-mcp.js
CHANGED
|
@@ -1,69 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4888a558-7f50-5c28-8e29-fcd19180cbd4")}catch(e){}}();
|
|
3
|
-
import { normalizeBulkIdsValue, parseBulkIdsText, } from "../core/io/bulk-ids-input.js";
|
|
4
|
-
import { EXIT_CODE } from "../core/shared/constants.js";
|
|
5
|
-
import { PmCliError } from "../core/shared/errors.js";
|
|
6
|
-
import { assertHistoryCompactTarget, runHistoryCompact, runHistoryCompactBulk, } from "./history-compact.js";
|
|
7
|
-
import { assertHistoryRepairTarget, runHistoryRepair, runHistoryRepairAll, } from "./history-repair.js";
|
|
8
|
-
import { parseRuntimeInteger, readRuntimeString } from "./runtime-input.js";
|
|
9
|
-
/** Dispatch single-stream or all-stream history repair from an MCP payload. */
|
|
10
|
-
export function runMcpHistoryRepairAction(context) {
|
|
11
|
-
const repairAll = context.options.all === true;
|
|
12
|
-
const repairId = context.id ?? readRuntimeString(context.options, "id");
|
|
13
|
-
assertHistoryRepairTarget(repairId, repairAll);
|
|
14
|
-
return repairAll
|
|
15
|
-
? runHistoryRepairAll(context.options, context.global)
|
|
16
|
-
: runHistoryRepair(repairId, context.options, context.global);
|
|
17
|
-
}
|
|
18
|
-
/** Dispatch single or bounded bulk history compaction from an MCP payload. */
|
|
19
|
-
export function runMcpHistoryCompactAction(context) {
|
|
20
|
-
const idsSource = context.options.ids;
|
|
21
|
-
const normalizedIds = normalizeBulkIdsValue(idsSource);
|
|
22
|
-
if (idsSource !== undefined && normalizedIds === "") {
|
|
23
|
-
throw new PmCliError("history-compact ids requires at least one valid item ID.", EXIT_CODE.USAGE, {
|
|
24
|
-
code: "bulk_ids_input_empty",
|
|
25
|
-
required: "Provide one or more string or finite numeric IDs; non-finite and unsupported selector values are rejected.",
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
const ids = normalizedIds === undefined ? undefined : parseBulkIdsText(normalizedIds);
|
|
29
|
-
const allOver = parseRuntimeInteger(context.options.allOver ?? context.options.all_over, "history-compact allOver");
|
|
30
|
-
const minEntries = parseRuntimeInteger(context.options.minEntries ?? context.options.min_entries, "history-compact minEntries");
|
|
31
|
-
const explicitScope = readRuntimeString(context.options, "scope");
|
|
32
|
-
const requestedScopes = [];
|
|
33
|
-
if (context.options.closed === true)
|
|
34
|
-
requestedScopes.push("closed");
|
|
35
|
-
if (context.options.allStreams === true ||
|
|
36
|
-
context.options.all_streams === true) {
|
|
37
|
-
requestedScopes.push("all-streams");
|
|
38
|
-
}
|
|
39
|
-
if (explicitScope === "closed" || explicitScope === "all-streams") {
|
|
40
|
-
requestedScopes.push(explicitScope);
|
|
41
|
-
}
|
|
42
|
-
const distinctScopes = [...new Set(requestedScopes)];
|
|
43
|
-
if (distinctScopes.length > 1) {
|
|
44
|
-
throw new PmCliError("history-compact: closed and all-streams scopes are mutually exclusive.", EXIT_CODE.USAGE);
|
|
45
|
-
}
|
|
46
|
-
const scope = distinctScopes[0];
|
|
47
|
-
assertHistoryCompactTarget(context.id, { ids, allOver, scope });
|
|
48
|
-
if (context.id !== undefined) {
|
|
49
|
-
return runHistoryCompact(context.id, {
|
|
50
|
-
before: readRuntimeString(context.options, "before"),
|
|
51
|
-
dryRun: context.options.dryRun === true || context.options.dry_run === true,
|
|
52
|
-
author: readRuntimeString(context.options, "author"),
|
|
53
|
-
message: readRuntimeString(context.options, "message"),
|
|
54
|
-
force: context.force,
|
|
55
|
-
}, context.global);
|
|
56
|
-
}
|
|
57
|
-
return runHistoryCompactBulk({
|
|
58
|
-
ids,
|
|
59
|
-
scope,
|
|
60
|
-
allOver,
|
|
61
|
-
minEntries,
|
|
62
|
-
dryRun: context.options.dryRun === true || context.options.dry_run === true,
|
|
63
|
-
author: readRuntimeString(context.options, "author"),
|
|
64
|
-
message: readRuntimeString(context.options, "message"),
|
|
65
|
-
force: context.force,
|
|
66
|
-
}, context.global);
|
|
67
|
-
}
|
|
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]="41f0e5cd-5974-5451-9f34-2aec1d8df07c")}catch(e2){}})();import{normalizeBulkIdsValue,parseBulkIdsText}from"../core/io/bulk-ids-input.js";import{EXIT_CODE}from"../core/shared/constants.js";import{PmCliError}from"../core/shared/errors.js";import{assertHistoryCompactTarget,runHistoryCompact,runHistoryCompactBulk}from"./history-compact.js";import{assertHistoryRepairTarget,runHistoryRepair,runHistoryRepairAll}from"./history-repair.js";import{parseRuntimeInteger,readRuntimeString}from"./runtime-input.js";function runMcpHistoryRepairAction(context){const repairAll=context.options.all===true;const repairId=context.id??readRuntimeString(context.options,"id");assertHistoryRepairTarget(repairId,repairAll);return repairAll?runHistoryRepairAll(context.options,context.global):runHistoryRepair(repairId,context.options,context.global)}function runMcpHistoryCompactAction(context){const idsSource=context.options.ids;const normalizedIds=normalizeBulkIdsValue(idsSource);if(idsSource!==void 0&&normalizedIds===""){throw new PmCliError("history-compact ids requires at least one valid item ID.",EXIT_CODE.USAGE,{code:"bulk_ids_input_empty",required:"Provide one or more string or finite numeric IDs; non-finite and unsupported selector values are rejected."})}const ids=normalizedIds===void 0?void 0:parseBulkIdsText(normalizedIds);const allOver=parseRuntimeInteger(context.options.allOver??context.options.all_over,"history-compact allOver");const minEntries=parseRuntimeInteger(context.options.minEntries??context.options.min_entries,"history-compact minEntries");const explicitScope=readRuntimeString(context.options,"scope");const requestedScopes=[];if(context.options.closed===true)requestedScopes.push("closed");if(context.options.allStreams===true||context.options.all_streams===true){requestedScopes.push("all-streams")}if(explicitScope==="closed"||explicitScope==="all-streams"){requestedScopes.push(explicitScope)}const distinctScopes=[...new Set(requestedScopes)];if(distinctScopes.length>1){throw new PmCliError("history-compact: closed and all-streams scopes are mutually exclusive.",EXIT_CODE.USAGE)}const scope=distinctScopes[0];assertHistoryCompactTarget(context.id,{ids,allOver,scope});if(context.id!==void 0){return runHistoryCompact(context.id,{before:readRuntimeString(context.options,"before"),dryRun:context.options.dryRun===true||context.options.dry_run===true,author:readRuntimeString(context.options,"author"),message:readRuntimeString(context.options,"message"),force:context.force},context.global)}return runHistoryCompactBulk({ids,scope,allOver,minEntries,dryRun:context.options.dryRun===true||context.options.dry_run===true,author:readRuntimeString(context.options,"author"),message:readRuntimeString(context.options,"message"),force:context.force},context.global)}export{runMcpHistoryCompactAction,runMcpHistoryRepairAction};
|
|
68
2
|
//# sourceMappingURL=history-mcp.js.map
|
|
69
|
-
//# debugId=4888a558-7f50-5c28-8e29-fcd19180cbd4
|