@unbrained/pm-cli 2026.10.13 → 2026.10.15
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +72 -1
- package/dist/cli/after-command-context-usage.d.ts +7 -7
- package/dist/cli/argv-utils.d.ts +4 -4
- package/dist/cli/bundle-integrity.d.ts +16 -16
- package/dist/cli/command-namespaces.d.ts +1 -1
- package/dist/cli/commander-usage.d.ts +34 -34
- package/dist/cli/commands/governance/validate.d.ts +1 -1
- package/dist/cli/commands/history/history-compact.d.ts +1 -1
- package/dist/cli/commands/history/history-redact.d.ts +1 -1
- package/dist/cli/commands/history/history-repair.d.ts +1 -1
- package/dist/cli/commands/history/restore.d.ts +1 -1
- package/dist/cli/commands/lifecycle/close.d.ts +1 -1
- package/dist/cli/commands/lifecycle/copy.d.ts +1 -1
- package/dist/cli/commands/lifecycle/delete.d.ts +1 -1
- package/dist/cli/commands/lifecycle/focus.d.ts +1 -1
- package/dist/cli/commands/query/get.d.ts +1 -1
- package/dist/cli/commands/workspace/merge.d.ts +1 -1
- package/dist/cli/commands/workspace/schema.d.ts +1 -1
- package/dist/cli/context-intent-invocation.d.ts +1 -1
- package/dist/cli/description-stdin.d.ts +1 -1
- package/dist/cli/error-guidance.d.ts +119 -119
- package/dist/cli/extension-command-help.d.ts +64 -64
- package/dist/cli/extension-command-help.js +2 -2
- package/dist/cli/extension-command-options.d.ts +16 -16
- package/dist/cli/extension-command-options.js +1 -1
- package/dist/cli/extension-recovery.d.ts +13 -13
- package/dist/cli/help-content.d.ts +22 -22
- package/dist/cli/help-content.js +2 -2
- package/dist/cli/help-json-payload.d.ts +45 -45
- package/dist/cli/invocation-profile.d.ts +5 -5
- package/dist/cli/main.d.ts +217 -217
- package/dist/cli/main.js +2 -2
- package/dist/cli/migration-gates.d.ts +24 -24
- package/dist/cli/option-values.d.ts +1 -1
- package/dist/cli/public.d.ts +1 -1
- package/dist/cli/register-annotations.d.ts +2 -2
- package/dist/cli/register-assurance.d.ts +1 -1
- package/dist/cli/register-files-lookup.d.ts +1 -1
- package/dist/cli/register-history-activity.d.ts +1 -1
- package/dist/cli/register-history-author.d.ts +1 -1
- package/dist/cli/register-history-maintenance.d.ts +1 -1
- package/dist/cli/register-list-query.d.ts +7 -7
- package/dist/cli/register-list-query.js +3 -3
- package/dist/cli/register-mutation-options.d.ts +1 -1
- package/dist/cli/register-mutation.d.ts +4 -4
- package/dist/cli/register-operations.d.ts +75 -75
- package/dist/cli/register-setup.d.ts +4 -4
- package/dist/cli/register-structured-mutation.d.ts +8 -8
- package/dist/cli/runtime/activation.d.ts +23 -23
- package/dist/cli/runtime/invocation-options.d.ts +12 -12
- package/dist/cli/runtime/projection-retry.d.ts +1 -1
- package/dist/cli/runtime/selection.d.ts +16 -16
- package/dist/cli/runtime/telemetry-outcome.d.ts +11 -11
- package/dist/cli/runtime-compatibility-boundary.d.ts +7 -7
- package/dist/cli/schema/registration.d.ts +1 -1
- package/dist/cli/schema-registration-helpers.d.ts +2 -2
- package/dist/cli/stats-analytics-json.d.ts +1 -1
- package/dist/cli-bundle/bundle-manifest.json +1 -1
- package/dist/cli-bundle/chunks/{chunk-LBDWFWPK.js → chunk-52EZH2QQ.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-7OEGNA4X.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-APWPC4ZZ.js → chunk-7VHINXZP.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-EMEEHV2Y.js +2 -0
- package/dist/cli-bundle/chunks/chunk-JGKTOBVB.js +6 -0
- package/dist/cli-bundle/chunks/{chunk-PSNS537F.js → chunk-JSUJWIHQ.js} +30 -30
- package/dist/cli-bundle/chunks/{chunk-N5EXRYCZ.js → chunk-LNKLQYBG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YH6H3UVE.js → chunk-N56CAQBU.js} +63 -64
- package/dist/cli-bundle/chunks/chunk-NC3QVGDD.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-AM2XOZKE.js → chunk-RJ5N44WY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HXHFKXLV.js → chunk-VIMQCFCK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UBTYYZIE.js → chunk-WBBW3WQX.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-X2H6UR26.js +236 -0
- package/dist/cli-bundle/chunks/{register-list-query-BJ742QOR.js → register-list-query-FKKFQ66D.js} +7 -7
- package/dist/cli-bundle/chunks/{register-mutation-GGGBRIH2.js → register-mutation-EWMMVZJB.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-E6HXYHNM.js → register-operations-GEQ2H7PS.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-4ZVTVEPY.js → register-setup-PSJTQBBO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-NNW5BS5L.js → chunk-3RNUMVK4.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-3LQEBXU5.js → chunk-4KQFMOM7.js} +6 -6
- package/dist/cli-bundle/focused-chunks/{chunk-RAA7SVRA.js → chunk-52I2SNKJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-6BTUISKV.js → chunk-5KRACGBK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5OO54BIV.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-5TBAVZDR.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-R23T7GFZ.js → chunk-FQKPOZKS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IIKFTJVC.js → chunk-H3P77KVU.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-HTA3TNC3.js +26 -0
- package/dist/cli-bundle/focused-chunks/{chunk-73UNAJHD.js → chunk-JKBH7YGX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KGFRQ34R.js → chunk-KIIFVULU.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SOB7X4FJ.js → chunk-N6FUKTZS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDYE7QDX.js +166 -0
- package/dist/cli-bundle/focused-chunks/{chunk-RU6GCFN3.js → chunk-Q4VNCTR2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-QMNAY25P.js → chunk-THYQR3ON.js} +61 -62
- package/dist/cli-bundle/focused-chunks/{chunk-DVK7VKZL.js → chunk-TYLG5VEB.js} +2 -2
- package/dist/cli-bundle/main.js +27 -27
- 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 +23 -23
- 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 +51 -51
- 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 +7 -7
- package/dist/cli.d.ts +9 -9
- package/dist/core/checkpoint/checkpoint-gc.d.ts +17 -17
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +26 -26
- package/dist/core/config/nested-settings.d.ts +20 -20
- package/dist/core/config/positional-value.d.ts +9 -9
- package/dist/core/diagnostics/remediation.d.ts +7 -7
- package/dist/core/extensions/activation-summary-markdown.d.ts +4 -4
- package/dist/core/extensions/activation-summary.d.ts +30 -30
- package/dist/core/extensions/activation-transaction.d.ts +9 -9
- package/dist/core/extensions/capability-usage.d.ts +25 -25
- package/dist/core/extensions/command-hook-context.d.ts +15 -15
- package/dist/core/extensions/command-metadata-contract.d.ts +1 -1
- package/dist/core/extensions/command-visibility-tier.d.ts +1 -1
- package/dist/core/extensions/contribution-inventory.d.ts +24 -24
- package/dist/core/extensions/exporter-output-contract.d.ts +4 -4
- package/dist/core/extensions/extension-candidate.d.ts +14 -14
- package/dist/core/extensions/extension-capability-aliases.d.ts +14 -14
- package/dist/core/extensions/extension-hook-runtime.d.ts +14 -14
- package/dist/core/extensions/extension-policy.d.ts +62 -62
- package/dist/core/extensions/extension-registries.d.ts +8 -8
- package/dist/core/extensions/extension-runtime-helpers.d.ts +5 -5
- package/dist/core/extensions/extension-types.d.ts +702 -702
- package/dist/core/extensions/flag-definition-validation.d.ts +19 -6
- package/dist/core/extensions/flag-definition-validation.js +1 -1
- package/dist/core/extensions/flag-value-types.d.ts +16 -4
- package/dist/core/extensions/flag-value-types.js +1 -1
- package/dist/core/extensions/index.d.ts +34 -34
- package/dist/core/extensions/item-field-types.d.ts +3 -3
- package/dist/core/extensions/item-fields.d.ts +6 -6
- package/dist/core/extensions/loader.d.ts +66 -66
- package/dist/core/extensions/manifest-parser.d.ts +1 -1
- package/dist/core/extensions/manifest-schema.d.ts +13 -13
- package/dist/core/extensions/module-graph-snapshot.d.ts +5 -5
- package/dist/core/extensions/preflight-ownership.d.ts +3 -3
- package/dist/core/extensions/read-output-contract.d.ts +2 -2
- package/dist/core/extensions/registration-contracts.d.ts +12 -12
- package/dist/core/extensions/registration-validation.d.ts +6 -6
- package/dist/core/extensions/registration-values.d.ts +19 -19
- package/dist/core/extensions/reserved-host-flags.d.ts +5 -5
- package/dist/core/extensions/runtime-registrations.d.ts +6 -6
- package/dist/core/extensions/service-ownership.d.ts +1 -1
- package/dist/core/extensions/version-compat.d.ts +9 -9
- package/dist/core/fs/atomic-create.d.ts +1 -1
- package/dist/core/fs/fs-utils.d.ts +12 -12
- package/dist/core/fs/host-environment-errors.d.ts +10 -10
- package/dist/core/fs/path-utils.d.ts +1 -1
- package/dist/core/governance/content-fields.d.ts +25 -25
- package/dist/core/governance/issue-codes.d.ts +16 -16
- package/dist/core/governance/metadata-coverage.d.ts +64 -64
- package/dist/core/history/digest.d.ts +5 -5
- package/dist/core/history/drift-cache.d.ts +2 -2
- package/dist/core/history/drift-scan.d.ts +18 -18
- package/dist/core/history/event-classification.d.ts +4 -4
- package/dist/core/history/event-index.d.ts +33 -33
- package/dist/core/history/history-compact-bulk.d.ts +12 -12
- package/dist/core/history/history-diff.d.ts +15 -15
- package/dist/core/history/history-rewrite.d.ts +43 -43
- package/dist/core/history/history-storage-stats.d.ts +20 -20
- package/dist/core/history/history-stream-policy.d.ts +12 -12
- package/dist/core/history/history.d.ts +45 -45
- package/dist/core/history/identity.d.ts +4 -4
- package/dist/core/history/operation-contract.d.ts +17 -17
- package/dist/core/history/projection.d.ts +16 -16
- package/dist/core/history/read.d.ts +4 -4
- package/dist/core/history/replay.d.ts +47 -47
- package/dist/core/history/tombstone.d.ts +1 -1
- package/dist/core/history/version-address.d.ts +2 -2
- package/dist/core/history/workspace-history.d.ts +72 -72
- package/dist/core/io/body-file.d.ts +2 -2
- package/dist/core/io/bulk-ids-input.d.ts +7 -7
- package/dist/core/item/actionability.d.ts +30 -30
- package/dist/core/item/dependency-reference.d.ts +2 -2
- package/dist/core/item/id.d.ts +9 -9
- package/dist/core/item/item-format-version.d.ts +17 -15
- package/dist/core/item/item-format-version.js +1 -1
- package/dist/core/item/item-format.d.ts +54 -54
- package/dist/core/item/item-record.d.ts +1 -1
- package/dist/core/item/item-type-definition.d.ts +11 -11
- package/dist/core/item/parent-reference-policy.d.ts +6 -6
- package/dist/core/item/parse.d.ts +37 -37
- package/dist/core/item/plan-lifecycle.d.ts +4 -4
- package/dist/core/item/priority.d.ts +3 -3
- package/dist/core/item/sprint-release-format.d.ts +4 -4
- package/dist/core/item/status-filter.d.ts +5 -5
- package/dist/core/item/status.d.ts +3 -3
- package/dist/core/item/toon-decode.d.ts +10 -10
- package/dist/core/item/type-registry.d.ts +35 -35
- package/dist/core/item/type-synonyms.d.ts +2 -2
- package/dist/core/lock/lock-gc.d.ts +28 -28
- package/dist/core/lock/lock.d.ts +53 -53
- package/dist/core/output/mutation-projection.d.ts +4 -4
- package/dist/core/output/output-control.d.ts +4 -4
- package/dist/core/output/output.d.ts +30 -30
- package/dist/core/output/query-summary.d.ts +5 -5
- package/dist/core/output/tabular.d.ts +3 -3
- package/dist/core/packages/manifest.d.ts +30 -30
- package/dist/core/packages/root.d.ts +4 -4
- package/dist/core/policy/workflow-policy-schema.d.ts +291 -291
- package/dist/core/policy/workflow-policy-store.d.ts +15 -15
- package/dist/core/policy/workflow-policy.d.ts +56 -56
- package/dist/core/profile/profile-describe.d.ts +22 -22
- package/dist/core/profile/profile-lint.d.ts +13 -13
- package/dist/core/profile/profile-plan.d.ts +45 -45
- package/dist/core/profile/profile-presets.d.ts +36 -36
- package/dist/core/reproducibility/context.d.ts +9 -9
- package/dist/core/schema/fields-file.d.ts +35 -35
- package/dist/core/schema/item-types-file.d.ts +29 -29
- package/dist/core/schema/runtime-field-filters.d.ts +3 -3
- package/dist/core/schema/runtime-field-values.d.ts +7 -7
- package/dist/core/schema/runtime-schema.d.ts +59 -59
- package/dist/core/schema/status-defs-file.d.ts +29 -29
- package/dist/core/schema/status-token.d.ts +1 -1
- package/dist/core/schema/type-inference.d.ts +10 -10
- package/dist/core/schema/type-presets.d.ts +5 -5
- package/dist/core/schema/type-workflows.d.ts +14 -14
- package/dist/core/search/background-refresh.d.ts +12 -12
- package/dist/core/search/bm25.d.ts +16 -16
- package/dist/core/search/cache.d.ts +34 -34
- package/dist/core/search/corpus.d.ts +17 -17
- package/dist/core/search/embedding-batches.d.ts +25 -25
- package/dist/core/search/eval-thresholds.d.ts +4 -4
- package/dist/core/search/eval.d.ts +40 -40
- package/dist/core/search/http-client.d.ts +24 -24
- package/dist/core/search/providers.d.ts +30 -30
- package/dist/core/search/relevance.d.ts +17 -17
- package/dist/core/search/semantic-defaults.d.ts +5 -5
- package/dist/core/search/staleness.d.ts +3 -3
- package/dist/core/search/vector-stores.d.ts +51 -51
- package/dist/core/search/vectorization-metadata.d.ts +9 -9
- package/dist/core/sentry/helpers.d.ts +28 -26
- package/dist/core/sentry/helpers.js +1 -1
- package/dist/core/sentry/instrument.d.ts +52 -50
- package/dist/core/sentry/instrument.js +1 -1
- package/dist/core/sentry/sensitive-assignments.d.ts +9 -0
- package/dist/core/sentry/sensitive-assignments.js +2 -0
- package/dist/core/session/session-state.d.ts +37 -37
- package/dist/core/shared/agent-session-context.d.ts +14 -14
- package/dist/core/shared/author.d.ts +89 -89
- package/dist/core/shared/command-line.d.ts +3 -3
- package/dist/core/shared/command-types.d.ts +20 -20
- package/dist/core/shared/conflict-markers.d.ts +5 -5
- package/dist/core/shared/constants.d.ts +30 -30
- package/dist/core/shared/errors.d.ts +100 -100
- package/dist/core/shared/html-entity-decode.d.ts +2 -2
- package/dist/core/shared/item-metadata-contract.d.ts +2 -2
- package/dist/core/shared/lazy-module.d.ts +1 -1
- package/dist/core/shared/levenshtein.d.ts +1 -1
- package/dist/core/shared/memo.d.ts +1 -1
- package/dist/core/shared/numeric-parsers.d.ts +1 -1
- package/dist/core/shared/option-alias-visibility.d.ts +3 -3
- package/dist/core/shared/primitives.d.ts +13 -13
- package/dist/core/shared/secret-rules.d.ts +92 -92
- package/dist/core/shared/serial-queue.d.ts +6 -6
- package/dist/core/shared/serialization.d.ts +4 -4
- package/dist/core/shared/split-comma-list.d.ts +4 -4
- package/dist/core/shared/text-normalization.d.ts +3 -3
- package/dist/core/shared/time.d.ts +27 -27
- package/dist/core/store/item-format-migration.d.ts +7 -7
- package/dist/core/store/item-metadata-cache.d.ts +30 -30
- package/dist/core/store/item-metadata-query-index.d.ts +66 -66
- package/dist/core/store/item-metadata-read-work.d.ts +6 -6
- package/dist/core/store/item-store.d.ts +123 -123
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/paths.d.ts +27 -27
- package/dist/core/store/settings-concurrency.d.ts +1 -1
- package/dist/core/store/settings-read-cache.d.ts +11 -11
- package/dist/core/store/settings-validator.d.ts +117 -117
- package/dist/core/store/settings.d.ts +84 -84
- package/dist/core/store/sqlite-runtime.d.ts +2 -2
- package/dist/core/store/tracker-preflight.d.ts +3 -3
- package/dist/core/telemetry/consent.d.ts +1 -1
- package/dist/core/telemetry/observability.d.ts +16 -16
- package/dist/core/telemetry/policy.d.ts +7 -7
- package/dist/core/telemetry/read-sampling.d.ts +1 -1
- package/dist/core/telemetry/runtime.d.ts +275 -275
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/core/test/background-runs.d.ts +123 -123
- package/dist/core/test/item-test-run-tracking.d.ts +10 -10
- package/dist/core/test/run-selectors.d.ts +12 -12
- package/dist/core/validate/estimate-defaults.d.ts +3 -3
- package/dist/core/validate/fix-planning.d.ts +36 -36
- package/dist/core/validate/linked-artifact-reference.d.ts +1 -1
- package/dist/core/validate/missing-by-type.d.ts +3 -3
- package/dist/core/validate/missing-link-owners.d.ts +17 -17
- package/dist/core/validate/stale-file-classification.d.ts +6 -6
- package/dist/mcp/http-server.d.ts +26 -26
- package/dist/mcp/legacy-adapter.d.ts +18 -18
- package/dist/mcp/runtime-capabilities.d.ts +18 -18
- package/dist/mcp/server.d.ts +73 -73
- package/dist/mcp/tool-definitions.d.ts +27 -27
- package/dist/sdk/actionability.d.ts +1 -1
- package/dist/sdk/agent/closed-domain-contracts.d.ts +11 -11
- package/dist/sdk/agent/command-recovery.d.ts +5 -5
- package/dist/sdk/agent/command-suggestions.d.ts +4 -4
- package/dist/sdk/agent/create-option-policy.d.ts +2 -2
- package/dist/sdk/agent/identity-config.d.ts +18 -18
- package/dist/sdk/agent/item-addressing.d.ts +6 -6
- package/dist/sdk/agent/refusal-closure-census.d.ts +26 -26
- package/dist/sdk/agent/refusal-closure.d.ts +22 -22
- package/dist/sdk/agent/refusal-corpus-contracts.d.ts +26 -26
- package/dist/sdk/agent/refusal-reachability.d.ts +65 -65
- package/dist/sdk/agent/subcommand-recovery.d.ts +20 -20
- package/dist/sdk/agent/task-transcript-contracts.d.ts +18 -18
- package/dist/sdk/agent/tracker-preflight-contracts.d.ts +21 -21
- package/dist/sdk/agent-capability-contracts.d.ts +41 -41
- package/dist/sdk/agent-session-context.d.ts +1 -1
- package/dist/sdk/annotations.d.ts +74 -74
- package/dist/sdk/author-attribution.d.ts +47 -47
- package/dist/sdk/authoring.d.ts +9 -9
- package/dist/sdk/cli-bootstrap.d.ts +65 -65
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +56 -56
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +6 -6
- package/dist/sdk/cli-contracts/command-aliases.d.ts +19 -19
- package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +66 -66
- package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -7
- package/dist/sdk/cli-contracts/commander-types.d.ts +18 -18
- package/dist/sdk/cli-contracts/completeness.d.ts +14 -14
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +28 -28
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +114 -112
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +27 -27
- package/dist/sdk/cli-contracts/grammar-contracts.d.ts +61 -61
- package/dist/sdk/cli-contracts/registration-helpers.d.ts +56 -56
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +250 -250
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
- package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +678 -678
- package/dist/sdk/cli-contracts/string-lists.d.ts +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +564 -564
- package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +13 -13
- package/dist/sdk/cli-contracts/tool-schema.d.ts +54 -54
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +20 -20
- package/dist/sdk/cli-contracts.d.ts +15 -15
- package/dist/sdk/cli-program.d.ts +1 -1
- package/dist/sdk/cli-program.js +1 -1
- package/dist/sdk/command-line.d.ts +3 -3
- package/dist/sdk/comments.d.ts +24 -24
- package/dist/sdk/compile-cache.d.ts +4 -4
- package/dist/sdk/completion/bash.d.ts +1 -1
- package/dist/sdk/completion/fish.d.ts +1 -1
- package/dist/sdk/completion/shared.d.ts +74 -74
- package/dist/sdk/completion/zsh.d.ts +1 -1
- package/dist/sdk/completion.d.ts +3 -3
- package/dist/sdk/compose.d.ts +94 -94
- package/dist/sdk/config.d.ts +105 -105
- package/dist/sdk/context/recency.d.ts +1 -1
- package/dist/sdk/context/semantic-session-attribution.d.ts +23 -23
- package/dist/sdk/context/usage-egress.d.ts +1 -1
- package/dist/sdk/context/usage-ledger.d.ts +18 -18
- package/dist/sdk/context-intent-contracts.d.ts +37 -37
- package/dist/sdk/context-intent-runtime.d.ts +10 -10
- package/dist/sdk/context-packing.d.ts +44 -44
- package/dist/sdk/context-relevance.d.ts +110 -110
- package/dist/sdk/context-signal-store.d.ts +52 -52
- package/dist/sdk/context-usage.d.ts +78 -78
- package/dist/sdk/contracts.d.ts +2 -1
- package/dist/sdk/contracts.js +1 -1
- package/dist/sdk/core-governance.d.ts +5 -5
- package/dist/sdk/core.d.ts +8 -8
- package/dist/sdk/corpus-shape.d.ts +60 -60
- package/dist/sdk/define.d.ts +36 -36
- package/dist/sdk/dependencies.d.ts +70 -70
- package/dist/sdk/dependency-flag-validation.d.ts +17 -17
- package/dist/sdk/dependency-provenance.d.ts +22 -22
- package/dist/sdk/docs.d.ts +17 -17
- package/dist/sdk/duplicates.d.ts +14 -14
- package/dist/sdk/environment/agent-environment.d.ts +118 -118
- package/dist/sdk/environment/host-environment-errors.d.ts +1 -1
- package/dist/sdk/environment/project-runtime-compatibility.d.ts +42 -40
- package/dist/sdk/environment/project-runtime-compatibility.js +2 -2
- package/dist/sdk/environment/source-context.d.ts +4 -4
- package/dist/sdk/environment/tracker-preflight.d.ts +1 -1
- package/dist/sdk/error-code-catalog.d.ts +33 -33
- package/dist/sdk/error-runtime.d.ts +5 -5
- package/dist/sdk/errors.d.ts +17 -17
- package/dist/sdk/eval.d.ts +27 -27
- package/dist/sdk/extension/author-manifest.d.ts +9 -9
- package/dist/sdk/extension/bundled-catalog.d.ts +18 -18
- package/dist/sdk/extension/concurrency.d.ts +1 -1
- package/dist/sdk/extension/copy-scope.d.ts +1 -1
- package/dist/sdk/extension/custom-field-collisions.d.ts +1 -1
- package/dist/sdk/extension/describe.d.ts +21 -21
- package/dist/sdk/extension/doctor.d.ts +46 -46
- package/dist/sdk/extension/install-plan.d.ts +32 -32
- package/dist/sdk/extension/install-receipts.d.ts +4 -4
- package/dist/sdk/extension/install-runtime.d.ts +12 -12
- package/dist/sdk/extension/install-snapshot.d.ts +10 -10
- package/dist/sdk/extension/install-sources.d.ts +106 -106
- package/dist/sdk/extension/managed-state.d.ts +42 -42
- package/dist/sdk/extension/managed-update-status.d.ts +1 -1
- package/dist/sdk/extension/migrations.d.ts +48 -48
- package/dist/sdk/extension/output-ownership.d.ts +19 -19
- package/dist/sdk/extension/runtime-summary.d.ts +7 -7
- package/dist/sdk/extension/scaffold.d.ts +15 -15
- package/dist/sdk/extension/shared.d.ts +16 -16
- package/dist/sdk/extension/source-resolution.d.ts +16 -16
- package/dist/sdk/extension/static-inventory.d.ts +23 -23
- package/dist/sdk/extension/update-check.d.ts +9 -9
- package/dist/sdk/extension-command-context.d.ts +1 -1
- package/dist/sdk/extension-contracts.d.ts +10 -10
- package/dist/sdk/extension.d.ts +221 -221
- package/dist/sdk/files.d.ts +101 -101
- package/dist/sdk/flag-invocation-contracts.d.ts +25 -25
- package/dist/sdk/flag-invocation-contracts.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.d.ts +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.d.ts +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/generated-error-code-catalog.d.ts +1 -1
- package/dist/sdk/governance/artifact-ledgers.d.ts +19 -19
- package/dist/sdk/governance/assurance-action-contracts.d.ts +1 -1
- package/dist/sdk/governance/assurance-action.d.ts +46 -46
- package/dist/sdk/governance/assurance-mutation-error.d.ts +20 -20
- package/dist/sdk/governance/assurance-presets.d.ts +25 -25
- package/dist/sdk/governance/assurance-runtime.d.ts +10 -10
- package/dist/sdk/governance/assurance.d.ts +204 -204
- package/dist/sdk/governance/boundary-fixtures.d.ts +32 -32
- package/dist/sdk/governance/closure-timestamps.d.ts +10 -10
- package/dist/sdk/governance/coverage-assurance.d.ts +7 -7
- package/dist/sdk/governance/defect-recurrence-coverage.d.ts +40 -40
- package/dist/sdk/governance/defect-recurrence-graph.d.ts +11 -11
- package/dist/sdk/governance/defect-recurrence-signals.d.ts +1 -1
- package/dist/sdk/governance/defect-recurrence.d.ts +97 -97
- package/dist/sdk/governance/defect-recurrence.js +2 -1
- package/dist/sdk/governance/extension-host-version.d.ts +9 -9
- package/dist/sdk/governance/gc.d.ts +26 -26
- package/dist/sdk/governance/health-merge-evidence.d.ts +8 -8
- package/dist/sdk/governance/health.d.ts +172 -172
- package/dist/sdk/governance/health.js +1 -1
- package/dist/sdk/governance/hierarchy-validation.d.ts +16 -16
- package/dist/sdk/governance/linked-file-report.d.ts +15 -15
- package/dist/sdk/governance/merge-receipt-history.d.ts +24 -24
- package/dist/sdk/governance/provenance-health.d.ts +35 -35
- package/dist/sdk/governance/reindex.d.ts +102 -102
- package/dist/sdk/governance/reliability.d.ts +29 -29
- package/dist/sdk/governance/stale-work.d.ts +13 -13
- package/dist/sdk/governance/status-role-diagnostics.d.ts +8 -8
- package/dist/sdk/governance/storage-integrity.d.ts +28 -28
- package/dist/sdk/governance/tracked-runtime-cache.d.ts +7 -7
- package/dist/sdk/governance/upgrade.d.ts +77 -77
- package/dist/sdk/governance/validate-history-drift.d.ts +3 -3
- package/dist/sdk/governance/validate-item-reader.d.ts +9 -9
- package/dist/sdk/governance/validate-normalization.d.ts +4 -4
- package/dist/sdk/governance/validate.d.ts +176 -176
- package/dist/sdk/governance/validate.js +1 -1
- package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
- package/dist/sdk/governance/workflow-policy.d.ts +18 -18
- package/dist/sdk/governance/workspace-position.d.ts +40 -40
- package/dist/sdk/governance.d.ts +2 -2
- package/dist/sdk/graph/adapter.d.ts +45 -45
- package/dist/sdk/graph/analytics.d.ts +36 -36
- package/dist/sdk/graph/assembly.d.ts +51 -51
- package/dist/sdk/graph/cache.d.ts +19 -19
- package/dist/sdk/graph/cardinality-integrity.d.ts +4 -4
- package/dist/sdk/graph/centrality.d.ts +20 -20
- package/dist/sdk/graph/conformance.d.ts +21 -21
- package/dist/sdk/graph/deadline-scheduling.d.ts +30 -30
- package/dist/sdk/graph/durable-cache.d.ts +22 -22
- package/dist/sdk/graph/governance-contracts.d.ts +1 -1
- package/dist/sdk/graph/governance.d.ts +92 -92
- package/dist/sdk/graph/hierarchy-integrity.d.ts +32 -32
- package/dist/sdk/graph/index.d.ts +15 -15
- package/dist/sdk/graph/lifecycle-coverage.d.ts +12 -12
- package/dist/sdk/graph/mutation-advisory.d.ts +15 -15
- package/dist/sdk/graph/query-contracts.d.ts +6 -6
- package/dist/sdk/graph/remediation.d.ts +15 -15
- package/dist/sdk/graph/run.d.ts +203 -203
- package/dist/sdk/graph/scheduling.d.ts +21 -21
- package/dist/sdk/graph/traversal.d.ts +18 -18
- package/dist/sdk/graph/workspace-relationship-kind-registry.d.ts +1 -1
- package/dist/sdk/guide-topics.d.ts +19 -19
- package/dist/sdk/guide.d.ts +43 -43
- package/dist/sdk/history/attestation-command.d.ts +8 -8
- package/dist/sdk/history/attestation-contract.d.ts +43 -43
- package/dist/sdk/history/attestation-scan.d.ts +4 -4
- package/dist/sdk/history/attestation.d.ts +4 -4
- package/dist/sdk/history/maintenance.d.ts +25 -25
- package/dist/sdk/history/salvage.d.ts +19 -19
- package/dist/sdk/history/subject.d.ts +8 -8
- package/dist/sdk/history-analytics.d.ts +64 -64
- package/dist/sdk/history-compact.d.ts +67 -67
- package/dist/sdk/history-mcp.d.ts +7 -7
- package/dist/sdk/history-provenance.d.ts +40 -40
- package/dist/sdk/history-read.d.ts +24 -24
- package/dist/sdk/history-redact.d.ts +68 -68
- package/dist/sdk/history-repair.d.ts +92 -92
- package/dist/sdk/improvement-ledger-validation.d.ts +1 -1
- package/dist/sdk/improvement-ledger.d.ts +62 -62
- package/dist/sdk/index.d.ts +69 -69
- package/dist/sdk/init-agent-guidance.d.ts +68 -68
- package/dist/sdk/init.d.ts +117 -117
- package/dist/sdk/invocation-author.d.ts +1 -1
- package/dist/sdk/item-children.d.ts +15 -15
- package/dist/sdk/item-metadata-index.d.ts +2 -2
- package/dist/sdk/item-schedule.d.ts +9 -9
- package/dist/sdk/item-transaction.d.ts +73 -73
- package/dist/sdk/learnings.d.ts +23 -23
- package/dist/sdk/lifecycle/append.d.ts +8 -8
- package/dist/sdk/lifecycle/claim.d.ts +38 -38
- package/dist/sdk/lifecycle/close-many.d.ts +71 -71
- package/dist/sdk/lifecycle/close.d.ts +18 -18
- package/dist/sdk/lifecycle/copy.d.ts +10 -10
- package/dist/sdk/lifecycle/core-field-recovery.d.ts +1 -1
- package/dist/sdk/lifecycle/create.d.ts +88 -88
- package/dist/sdk/lifecycle/delete.d.ts +15 -15
- package/dist/sdk/lifecycle/event-validation-messages.d.ts +1 -1
- package/dist/sdk/lifecycle/focus.d.ts +6 -6
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +6 -6
- package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +35 -35
- package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +3 -3
- package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
- package/dist/sdk/lifecycle/metadata-normalizers.d.ts +4 -4
- package/dist/sdk/lifecycle/mutation-command-options.d.ts +58 -58
- package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +1 -1
- package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +24 -24
- package/dist/sdk/lifecycle/plan.d.ts +127 -127
- package/dist/sdk/lifecycle/recurrence-parsers.d.ts +5 -5
- package/dist/sdk/lifecycle/reopen.d.ts +15 -15
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +7 -7
- package/dist/sdk/lifecycle/restore.d.ts +34 -34
- package/dist/sdk/lifecycle/restore.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.d.ts +20 -20
- package/dist/sdk/lifecycle/task-composition.d.ts +7 -7
- package/dist/sdk/lifecycle/update-many.d.ts +61 -61
- package/dist/sdk/lifecycle/update.d.ts +120 -120
- package/dist/sdk/lifecycle-completion.d.ts +14 -14
- package/dist/sdk/lifecycle-policy.d.ts +31 -31
- package/dist/sdk/linked-artifacts.d.ts +58 -58
- package/dist/sdk/mcp/apps.d.ts +28 -28
- package/dist/sdk/mcp/authorization.d.ts +66 -66
- package/dist/sdk/mcp/discovery.d.ts +67 -67
- package/dist/sdk/mcp/interactions.d.ts +49 -49
- package/dist/sdk/mcp/protocol.d.ts +63 -63
- package/dist/sdk/mcp/skills.d.ts +62 -62
- package/dist/sdk/mcp/subscriptions.d.ts +26 -26
- package/dist/sdk/mcp/tasks.d.ts +51 -51
- package/dist/sdk/mcp/transport.d.ts +17 -17
- package/dist/sdk/merge/abandoned-receipts.d.ts +8 -8
- package/dist/sdk/merge/driver.d.ts +38 -38
- package/dist/sdk/merge/index.d.ts +5 -5
- package/dist/sdk/merge/install.d.ts +48 -48
- package/dist/sdk/merge/install.js +1 -1
- package/dist/sdk/merge/receipt-file-boundary.d.ts +6 -6
- package/dist/sdk/merge/receipt-operation.d.ts +6 -6
- package/dist/sdk/merge/receipt-schema.d.ts +11 -11
- package/dist/sdk/merge/receipts.d.ts +111 -111
- package/dist/sdk/merge/reconcile.d.ts +20 -20
- package/dist/sdk/merge/three-way.d.ts +50 -50
- package/dist/sdk/merge/three-way.js +2 -2
- package/dist/sdk/merge/worktree-config.d.ts +3 -3
- package/dist/sdk/mutation-events.d.ts +62 -62
- package/dist/sdk/mutation-guard.d.ts +134 -134
- package/dist/sdk/notes.d.ts +28 -28
- package/dist/sdk/output/table-rows.d.ts +6 -6
- package/dist/sdk/output-contracts.d.ts +26 -26
- package/dist/sdk/output-projection.d.ts +108 -108
- package/dist/sdk/output-token-accounting.d.ts +18 -18
- package/dist/sdk/output.d.ts +18 -18
- package/dist/sdk/ownership-source.d.ts +1 -1
- package/dist/sdk/package-import-adapters.d.ts +51 -51
- package/dist/sdk/package-migrations.d.ts +3 -3
- package/dist/sdk/package-runtime-options.d.ts +3 -3
- package/dist/sdk/pagination.d.ts +28 -28
- package/dist/sdk/pagination.js +1 -1
- package/dist/sdk/profile.d.ts +72 -72
- package/dist/sdk/provenance.d.ts +37 -37
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.d.ts +84 -84
- package/dist/sdk/query/aggregate.d.ts +109 -109
- package/dist/sdk/query/calendar.d.ts +95 -95
- package/dist/sdk/query/complete-list.d.ts +35 -35
- package/dist/sdk/query/context.d.ts +300 -300
- package/dist/sdk/query/duplicate-candidates.d.ts +3 -3
- package/dist/sdk/query/get.d.ts +54 -54
- package/dist/sdk/query/history.d.ts +38 -38
- package/dist/sdk/query/item-filter-options.d.ts +41 -41
- package/dist/sdk/query/light-metadata.d.ts +1 -1
- package/dist/sdk/query/list-filter-shared.d.ts +4 -4
- package/dist/sdk/query/list.d.ts +167 -167
- package/dist/sdk/query/list.js +1 -1
- package/dist/sdk/query/multi-value-filters.d.ts +6 -6
- package/dist/sdk/query/next-ready-budget.d.ts +8 -8
- package/dist/sdk/query/next.d.ts +94 -94
- package/dist/sdk/query/parsers.d.ts +3 -3
- package/dist/sdk/query/projection-contracts.d.ts +18 -18
- package/dist/sdk/query/search/corpus.d.ts +15 -15
- package/dist/sdk/query/search/filters.d.ts +15 -15
- package/dist/sdk/query/search/input.d.ts +8 -8
- package/dist/sdk/query/search/lexical.d.ts +10 -10
- package/dist/sdk/query/search/response.d.ts +22 -22
- package/dist/sdk/query/search/semantic.d.ts +133 -133
- package/dist/sdk/query/search/types.d.ts +65 -65
- package/dist/sdk/query/search-contracts.d.ts +53 -53
- package/dist/sdk/query/search-pagination.d.ts +21 -21
- package/dist/sdk/query/search-rendering.d.ts +30 -30
- package/dist/sdk/query/search.d.ts +60 -60
- package/dist/sdk/query/workspace-contracts.d.ts +2 -2
- package/dist/sdk/query.d.ts +6 -6
- package/dist/sdk/read-output/continuation.d.ts +11 -11
- package/dist/sdk/read-output/extension.d.ts +3 -3
- package/dist/sdk/read-output/options.d.ts +7 -7
- package/dist/sdk/read-output/provenance.d.ts +6 -6
- package/dist/sdk/read-output-budget.d.ts +11 -11
- package/dist/sdk/read-output-contracts.d.ts +112 -112
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/read-output-rows.d.ts +15 -15
- package/dist/sdk/read-output-session.d.ts +29 -29
- package/dist/sdk/relationship-analytics.d.ts +46 -46
- package/dist/sdk/relationship-context.d.ts +48 -48
- package/dist/sdk/relationship-history.d.ts +59 -59
- package/dist/sdk/relationship-kinds/contract.d.ts +18 -18
- package/dist/sdk/relationship-migration.d.ts +14 -14
- package/dist/sdk/relationships.d.ts +46 -46
- package/dist/sdk/reproducibility/process.d.ts +9 -9
- package/dist/sdk/runtime/actions.d.ts +1 -1
- package/dist/sdk/runtime/context.d.ts +15 -15
- package/dist/sdk/runtime/schema-preview.d.ts +1 -1
- package/dist/sdk/runtime/schema.d.ts +1 -1
- package/dist/sdk/runtime-action-aliases.d.ts +3 -3
- package/dist/sdk/runtime-extended-actions.d.ts +9 -9
- package/dist/sdk/runtime-input.d.ts +29 -29
- package/dist/sdk/runtime-primitives.d.ts +54 -52
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/runtime-public-contracts.d.ts +46 -46
- package/dist/sdk/runtime-stats-options.d.ts +1 -1
- package/dist/sdk/runtime.d.ts +374 -374
- package/dist/sdk/scheduling-shortcuts.d.ts +19 -19
- package/dist/sdk/schema-migration.d.ts +79 -79
- package/dist/sdk/schema.d.ts +224 -224
- package/dist/sdk/search-refresh-worker.d.ts +1 -1
- package/dist/sdk/similarity-scoring.d.ts +10 -10
- package/dist/sdk/similarity.d.ts +73 -73
- package/dist/sdk/start-task-status.d.ts +1 -1
- package/dist/sdk/stats.d.ts +72 -72
- package/dist/sdk/structured-mutations.d.ts +13 -13
- package/dist/sdk/telemetry-flush.d.ts +1 -1
- package/dist/sdk/telemetry.d.ts +32 -32
- package/dist/sdk/templates.d.ts +35 -35
- package/dist/sdk/test/batch.d.ts +50 -50
- package/dist/sdk/test/command-args.d.ts +2 -2
- package/dist/sdk/test/entry.d.ts +4 -4
- package/dist/sdk/test/execution-receipts.d.ts +5 -5
- package/dist/sdk/test/execution.d.ts +247 -247
- package/dist/sdk/test/json-path.d.ts +4 -4
- package/dist/sdk/test/linked-command-detection.d.ts +36 -36
- package/dist/sdk/test/measurements.d.ts +10 -10
- package/dist/sdk/test/parsers.d.ts +18 -18
- package/dist/sdk/test/prerequisites.d.ts +3 -3
- package/dist/sdk/test/runs.d.ts +43 -43
- package/dist/sdk/test/trust.d.ts +15 -15
- package/dist/sdk/test/update.d.ts +23 -23
- package/dist/sdk/test/workspace-snapshot.d.ts +1 -1
- package/dist/sdk/testing.d.ts +250 -246
- package/dist/sdk/testing.js +2 -2
- package/dist/sdk/traceability/runtime-files-lookup.d.ts +1 -1
- package/dist/sdk/traceability/source-traceability.d.ts +50 -50
- package/dist/sdk/workspace-contracts-cache.d.ts +2 -2
- package/dist/sdk/workspace-contracts.d.ts +20 -20
- package/dist/sdk/workspace-memory.d.ts +42 -42
- package/dist/sdk/workspace-recipe.d.ts +9 -9
- package/dist/sdk/workspace-snapshot.d.ts +60 -60
- package/dist/sdk/workspace-transaction-gc.d.ts +17 -17
- package/dist/sdk/workspace-transaction.d.ts +26 -26
- package/dist/sdk/workspace.d.ts +9 -9
- package/dist/types.d.ts +540 -540
- package/docs/COMMANDS.md +11 -2
- package/docs/CONFIGURATION.md +43 -0
- package/docs/DEFECT_RECURRENCE.md +8 -0
- package/docs/EXTENSIONS.md +1 -1
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +33 -0
- package/docs/LINKED_TEST_EDITS.md +15 -0
- package/docs/MERGE_SAFETY.md +8 -0
- package/docs/RELEASING.md +2 -0
- package/docs/SDK.md +19 -0
- package/docs/TESTING.md +21 -1
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
- package/marketplace.json +1 -1
- package/package.json +3 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +1 -1
- package/plugins/pm-codex/plugin.json +1 -1
- package/runtime-dependencies.json +1 -1
- package/scripts/finalize-build.mjs +9 -3
- package/dist/cli-bundle/chunks/chunk-DJDRHJBP.js +0 -234
- package/dist/cli-bundle/chunks/chunk-DUK5DHI6.js +0 -8
- package/dist/cli-bundle/chunks/chunk-IFPJDJUM.js +0 -20
- package/dist/cli-bundle/chunks/chunk-RL45OYTL.js +0 -6
- package/dist/cli-bundle/chunks/chunk-WYZGZV2M.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-F5J3ATMV.js +0 -165
- package/dist/cli-bundle/focused-chunks/chunk-IOTNG6CN.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-S6ITXQ5T.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-UPJA45K7.js +0 -26
|
@@ -1,179 +1,179 @@
|
|
|
1
1
|
import { type ExtensionMutationGuardSdk } from "../extensions/index.js";
|
|
2
2
|
import { PmCliError } from "../shared/errors.js";
|
|
3
|
-
import type { ItemDocument,
|
|
3
|
+
import type { ItemDocument,ItemFormat,ItemMetadata,ItemType,PmSettings,RuntimeSchemaSettings } from "../../types/index.js";
|
|
4
4
|
/** Documents the located item payload exchanged by command, SDK, and package integrations. */
|
|
5
5
|
export interface LocatedItem {
|
|
6
6
|
/** Stable identifier used to reference this record across commands and storage. */
|
|
7
|
-
id:
|
|
7
|
+
id:string;
|
|
8
8
|
/** Schema type that determines the shape and validation rules for this value. */
|
|
9
|
-
type:
|
|
9
|
+
type:ItemType;
|
|
10
10
|
/** Filesystem path used for item resolution. */
|
|
11
|
-
itemPath:
|
|
11
|
+
itemPath:string;
|
|
12
12
|
/** Value that configures or reports item format for this contract. */
|
|
13
|
-
item_format:
|
|
13
|
+
item_format:ItemFormat;
|
|
14
14
|
}
|
|
15
|
-
declare function isErrno(error:
|
|
16
|
-
declare function appendWarning(warnings:
|
|
15
|
+
declare function isErrno(error:unknown,code:string):boolean;
|
|
16
|
+
declare function appendWarning(warnings:string[] | undefined,warning:string):void;
|
|
17
17
|
/**
|
|
18
18
|
* Resolve exact then normalized identifiers across registered type folders.
|
|
19
19
|
* Refuse multiple physical documents for the selected identifier; format
|
|
20
20
|
* preference orders probes but cannot choose between conflicting identities.
|
|
21
21
|
*/
|
|
22
|
-
export declare function locateItem(pmRoot:
|
|
22
|
+
export declare function locateItem(pmRoot:string,rawId:string,idPrefix?:string,preferredFormat?:ItemFormat,typeToFolder?:Record<string,string>):Promise<LocatedItem | null>;
|
|
23
23
|
/** Implements read located item for the public runtime surface of this module. */
|
|
24
|
-
export declare function readLocatedItem(item:
|
|
25
|
-
schema?:
|
|
26
|
-
extensionFieldNames?:
|
|
27
|
-
warnings?:
|
|
28
|
-
}):
|
|
29
|
-
raw:
|
|
30
|
-
document:
|
|
24
|
+
export declare function readLocatedItem(item:LocatedItem,options?:{
|
|
25
|
+
schema?:RuntimeSchemaSettings;
|
|
26
|
+
extensionFieldNames?:readonly string[];
|
|
27
|
+
warnings?:string[];
|
|
28
|
+
}):Promise<{
|
|
29
|
+
raw:string;
|
|
30
|
+
document:ItemDocument;
|
|
31
31
|
}>;
|
|
32
32
|
/**
|
|
33
33
|
* Read once and retain a recoverable parse failure beside its exact text snapshot.
|
|
34
34
|
* Filesystem and merge-conflict errors still throw; callers must explicitly
|
|
35
35
|
* reconstruct an invalid document before performing any mutation.
|
|
36
36
|
*/
|
|
37
|
-
export declare function readLocatedItemSnapshot(item:
|
|
38
|
-
raw:
|
|
39
|
-
document:
|
|
40
|
-
error:
|
|
37
|
+
export declare function readLocatedItemSnapshot(item:LocatedItem,options?:Parameters<typeof readLocatedItem>[1]):Promise<{
|
|
38
|
+
raw:string;
|
|
39
|
+
document:ItemDocument;
|
|
40
|
+
error:null;
|
|
41
41
|
} | {
|
|
42
|
-
raw:
|
|
43
|
-
document:
|
|
44
|
-
error:
|
|
42
|
+
raw:string;
|
|
43
|
+
document:null;
|
|
44
|
+
error:PmCliError;
|
|
45
45
|
}>;
|
|
46
46
|
/** Implements list all item metadata for the public runtime surface of this module. */
|
|
47
|
-
export declare function listAllItemMetadata(pmRoot:
|
|
47
|
+
export declare function listAllItemMetadata(pmRoot:string,preferredFormat?:ItemFormat,typeToFolder?:Record<string,string>,warnings?:string[],schema?:RuntimeSchemaSettings):Promise<ItemMetadata[]>;
|
|
48
48
|
/**
|
|
49
49
|
* Light variant of {@link listAllItemMetadata}: returns item-metadata WITHOUT the heavy
|
|
50
50
|
* collection fields (comments/notes/learnings/files/tests/test_runs/docs). Skips the
|
|
51
51
|
* large collections cache so the hot list path stays cheap. Only use for callers that
|
|
52
52
|
* read just the light scalar/small fields — see {@link listAllDocumentsCachedLight}.
|
|
53
53
|
*/
|
|
54
|
-
export declare function listAllItemMetadataLight(pmRoot:
|
|
54
|
+
export declare function listAllItemMetadataLight(pmRoot:string,preferredFormat?:ItemFormat,typeToFolder?:Record<string,string>,warnings?:string[],schema?:RuntimeSchemaSettings):Promise<ItemMetadata[]>;
|
|
55
55
|
/** List item metadata with bodies, optionally bypassing the derived-index fast path when an integrity workflow must re-read authoritative files. */
|
|
56
|
-
export declare function listAllItemMetadataWithBody(pmRoot:
|
|
57
|
-
forceSourceScan?:
|
|
58
|
-
}):
|
|
59
|
-
body:
|
|
56
|
+
export declare function listAllItemMetadataWithBody(pmRoot:string,preferredFormat?:ItemFormat,typeToFolder?:Record<string,string>,warnings?:string[],schema?:RuntimeSchemaSettings,options?:{
|
|
57
|
+
forceSourceScan?:boolean;
|
|
58
|
+
}):Promise<Array<ItemMetadata & {
|
|
59
|
+
body:string;
|
|
60
60
|
}>>;
|
|
61
61
|
/** Build the minimal host-bound read-only SDK exposed to transactional extension guards. */
|
|
62
|
-
export declare function createMutationGuardSdk(params:
|
|
63
|
-
pmRoot:
|
|
64
|
-
settings:
|
|
65
|
-
typeToFolder:
|
|
66
|
-
}):
|
|
67
|
-
declare function buildDidYouMeanSuggestions(pmRoot:
|
|
62
|
+
export declare function createMutationGuardSdk(params:{
|
|
63
|
+
pmRoot:string;
|
|
64
|
+
settings:PmSettings;
|
|
65
|
+
typeToFolder:Record<string,string>;
|
|
66
|
+
}):ExtensionMutationGuardSdk;
|
|
67
|
+
declare function buildDidYouMeanSuggestions(pmRoot:string,badId:string,idPrefix:string,typeToFolder:Record<string,string>):Promise<string[]>;
|
|
68
68
|
/** Implements build item not found error for the public runtime surface of this module. */
|
|
69
|
-
export declare function buildItemNotFoundError(pmRoot:
|
|
70
|
-
declare function bypassesAssigneeConflict(op:
|
|
69
|
+
export declare function buildItemNotFoundError(pmRoot:string,badId:string,idPrefix:string,typeToFolder:Record<string,string>):Promise<PmCliError>;
|
|
70
|
+
declare function bypassesAssigneeConflict(op:string,bypassAssigneeConflict?:boolean):boolean;
|
|
71
71
|
interface ItemMutationResult {
|
|
72
|
-
item:
|
|
73
|
-
body:
|
|
74
|
-
changedFields:
|
|
75
|
-
warnings:
|
|
72
|
+
item:ItemMetadata;
|
|
73
|
+
body:string;
|
|
74
|
+
changedFields:string[];
|
|
75
|
+
warnings:string[];
|
|
76
76
|
}
|
|
77
77
|
interface ItemMutationParams {
|
|
78
|
-
pmRoot:
|
|
79
|
-
settings:
|
|
80
|
-
id:
|
|
81
|
-
op:
|
|
82
|
-
author:
|
|
83
|
-
message?:
|
|
78
|
+
pmRoot:string;
|
|
79
|
+
settings:PmSettings;
|
|
80
|
+
id:string;
|
|
81
|
+
op:string;
|
|
82
|
+
author:string;
|
|
83
|
+
message?:string;
|
|
84
84
|
/** Structured immutable context attached to the appended history entry. */
|
|
85
|
-
historyContext?:
|
|
86
|
-
force?:
|
|
87
|
-
bypassAssigneeConflict?:
|
|
88
|
-
skipNoop?:
|
|
89
|
-
extensionFieldNames?:
|
|
90
|
-
typeToFolder?:
|
|
91
|
-
mutate:
|
|
92
|
-
changedFields:
|
|
93
|
-
warnings?:
|
|
85
|
+
historyContext?:Record<string,unknown>;
|
|
86
|
+
force?:boolean;
|
|
87
|
+
bypassAssigneeConflict?:boolean;
|
|
88
|
+
skipNoop?:boolean;
|
|
89
|
+
extensionFieldNames?:readonly string[];
|
|
90
|
+
typeToFolder?:Record<string,string>;
|
|
91
|
+
mutate:(document:ItemDocument) => {
|
|
92
|
+
changedFields:string[];
|
|
93
|
+
warnings?:string[];
|
|
94
94
|
} | Promise<{
|
|
95
|
-
changedFields:
|
|
96
|
-
warnings?:
|
|
95
|
+
changedFields:string[];
|
|
96
|
+
warnings?:string[];
|
|
97
97
|
}>;
|
|
98
98
|
}
|
|
99
99
|
/** Mutate one item while attaching structured context to its immutable history event. */
|
|
100
|
-
export declare function mutateItemWithHistoryContext(params:
|
|
101
|
-
pmRoot:
|
|
102
|
-
settings:
|
|
103
|
-
id:
|
|
104
|
-
op:
|
|
105
|
-
author:
|
|
106
|
-
message?:
|
|
100
|
+
export declare function mutateItemWithHistoryContext(params:{
|
|
101
|
+
pmRoot:string;
|
|
102
|
+
settings:PmSettings;
|
|
103
|
+
id:string;
|
|
104
|
+
op:string;
|
|
105
|
+
author:string;
|
|
106
|
+
message?:string;
|
|
107
107
|
/** Structured immutable context attached to the appended history entry. */
|
|
108
|
-
historyContext?:
|
|
109
|
-
force?:
|
|
110
|
-
bypassAssigneeConflict?:
|
|
111
|
-
skipNoop?:
|
|
112
|
-
extensionFieldNames?:
|
|
113
|
-
typeToFolder?:
|
|
114
|
-
mutate:
|
|
115
|
-
changedFields:
|
|
116
|
-
warnings?:
|
|
108
|
+
historyContext?:Record<string,unknown>;
|
|
109
|
+
force?:boolean;
|
|
110
|
+
bypassAssigneeConflict?:boolean;
|
|
111
|
+
skipNoop?:boolean;
|
|
112
|
+
extensionFieldNames?:readonly string[];
|
|
113
|
+
typeToFolder?:Record<string,string>;
|
|
114
|
+
mutate:(document:ItemDocument) => {
|
|
115
|
+
changedFields:string[];
|
|
116
|
+
warnings?:string[];
|
|
117
117
|
} | Promise<{
|
|
118
|
-
changedFields:
|
|
119
|
-
warnings?:
|
|
118
|
+
changedFields:string[];
|
|
119
|
+
warnings?:string[];
|
|
120
120
|
}>;
|
|
121
|
-
}):
|
|
122
|
-
item:
|
|
123
|
-
body:
|
|
124
|
-
changedFields:
|
|
125
|
-
warnings:
|
|
121
|
+
}):Promise<{
|
|
122
|
+
item:ItemMetadata;
|
|
123
|
+
body:string;
|
|
124
|
+
changedFields:string[];
|
|
125
|
+
warnings:string[];
|
|
126
126
|
}>;
|
|
127
127
|
/** Mutate one item while resolving structured history context after its locked mutation. */
|
|
128
|
-
export declare function mutateItemWithHistoryContextResolver(params:
|
|
129
|
-
resolveHistoryContext:
|
|
130
|
-
}):
|
|
128
|
+
export declare function mutateItemWithHistoryContextResolver(params:Omit<ItemMutationParams,"historyContext"> & {
|
|
129
|
+
resolveHistoryContext:() => Record<string,unknown> | undefined;
|
|
130
|
+
}):Promise<ItemMutationResult>;
|
|
131
131
|
/** Implements mutate item for the public runtime surface of this module. */
|
|
132
|
-
export declare function mutateItem(params:
|
|
133
|
-
pmRoot:
|
|
134
|
-
settings:
|
|
135
|
-
id:
|
|
136
|
-
op:
|
|
137
|
-
author:
|
|
138
|
-
message?:
|
|
139
|
-
force?:
|
|
140
|
-
bypassAssigneeConflict?:
|
|
141
|
-
skipNoop?:
|
|
142
|
-
extensionFieldNames?:
|
|
143
|
-
typeToFolder?:
|
|
144
|
-
mutate:
|
|
145
|
-
changedFields:
|
|
146
|
-
warnings?:
|
|
132
|
+
export declare function mutateItem(params:{
|
|
133
|
+
pmRoot:string;
|
|
134
|
+
settings:PmSettings;
|
|
135
|
+
id:string;
|
|
136
|
+
op:string;
|
|
137
|
+
author:string;
|
|
138
|
+
message?:string;
|
|
139
|
+
force?:boolean;
|
|
140
|
+
bypassAssigneeConflict?:boolean;
|
|
141
|
+
skipNoop?:boolean;
|
|
142
|
+
extensionFieldNames?:readonly string[];
|
|
143
|
+
typeToFolder?:Record<string,string>;
|
|
144
|
+
mutate:(document:ItemDocument) => {
|
|
145
|
+
changedFields:string[];
|
|
146
|
+
warnings?:string[];
|
|
147
147
|
} | Promise<{
|
|
148
|
-
changedFields:
|
|
149
|
-
warnings?:
|
|
148
|
+
changedFields:string[];
|
|
149
|
+
warnings?:string[];
|
|
150
150
|
}>;
|
|
151
|
-
}):
|
|
152
|
-
item:
|
|
153
|
-
body:
|
|
154
|
-
changedFields:
|
|
155
|
-
warnings:
|
|
151
|
+
}):Promise<{
|
|
152
|
+
item:ItemMetadata;
|
|
153
|
+
body:string;
|
|
154
|
+
changedFields:string[];
|
|
155
|
+
warnings:string[];
|
|
156
156
|
}>;
|
|
157
157
|
/** Public contract for item store test only, shared by SDK and presentation-layer consumers. */
|
|
158
|
-
export declare const itemStoreTestOnly:
|
|
159
|
-
appendWarning:
|
|
160
|
-
bypassesAssigneeConflict:
|
|
161
|
-
buildDidYouMeanSuggestions:
|
|
162
|
-
isErrno:
|
|
158
|
+
export declare const itemStoreTestOnly:{
|
|
159
|
+
appendWarning:typeof appendWarning;
|
|
160
|
+
bypassesAssigneeConflict:typeof bypassesAssigneeConflict;
|
|
161
|
+
buildDidYouMeanSuggestions:typeof buildDidYouMeanSuggestions;
|
|
162
|
+
isErrno:typeof isErrno;
|
|
163
163
|
};
|
|
164
164
|
/** Implements delete item for the public runtime surface of this module. */
|
|
165
|
-
export declare function deleteItem(params:
|
|
166
|
-
pmRoot:
|
|
167
|
-
settings:
|
|
168
|
-
id:
|
|
169
|
-
author:
|
|
170
|
-
message?:
|
|
171
|
-
force?:
|
|
172
|
-
dryRun?:
|
|
173
|
-
}):
|
|
174
|
-
item:
|
|
175
|
-
changedFields:
|
|
176
|
-
warnings:
|
|
177
|
-
targetPath?:
|
|
165
|
+
export declare function deleteItem(params:{
|
|
166
|
+
pmRoot:string;
|
|
167
|
+
settings:PmSettings;
|
|
168
|
+
id:string;
|
|
169
|
+
author:string;
|
|
170
|
+
message?:string;
|
|
171
|
+
force?:boolean;
|
|
172
|
+
dryRun?:boolean;
|
|
173
|
+
}):Promise<{
|
|
174
|
+
item:ItemMetadata;
|
|
175
|
+
changedFields:string[];
|
|
176
|
+
warnings:string[];
|
|
177
|
+
targetPath?:string;
|
|
178
178
|
}>;
|
|
179
179
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ce5fc177-192a-5efe-a65f-59f0fc0bea42")}catch{}})();import fs from"node:fs/promises";import{buildDeletedItemError}from"../history/tombstone.js";import{normalizeHistoryOperationForWrite}from"../history/operation-contract.js";import{enforceWorkflowMutation}from"../policy/workflow-policy-store.js";import{recordItemMetadataEnumeration}from"./item-metadata-read-work.js";import path from"node:path";import{getActiveExtensionRegistrations,projectAfterCommandItemSnapshot,recordAfterCommandAffectedItem,runActiveOnReadHooks,runActiveBeforeMutationHooks,runActiveOnWriteHooks,runActiveServiceOverride}from"../extensions/index.js";import{collectRegisteredItemFieldNames}from"../extensions/item-fields.js";import{EMPTY_CANONICAL_DOCUMENT,EXIT_CODE,TYPE_TO_FOLDER}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{levenshteinDistanceWithinLimit}from"../shared/levenshtein.js";import{appendHistoryEntry,createHistoryEntry}from"../history/history.js";import{enforceHistoryStreamPolicyForItem}from"../history/history-stream-policy.js";import{canonicalDocument,parseItemDocument,serializeItemDocument}from"../item/item-format.js";import{resolveItemTypeRegistry}from"../item/type-registry.js";import{acquireLock}from"../lock/lock.js";import{writeFileAtomic}from"../fs/fs-utils.js";import{isUtf8}from"node:buffer";import{normalizeItemId,normalizeRawItemId}from"../item/id.js";import{acquireItemMetadataDerivedIndexLock,listAllDocumentCandidatesCached,listAllDocumentsCached,listAllDocumentsCachedLight,refreshItemMetadataDerivedIndex}from"./item-metadata-cache.js";import{getHistoryPath,getItemPath,ITEM_FILE_EXTENSIONS}from"./paths.js";import{resolveGovernanceKnobs}from"./settings.js";import{assertReadableTrackerRoot}from"./tracker-preflight.js";import{resolveClaimPrincipal}from"../shared/author.js";import{nowIso}from"../shared/time.js";async function fileExists(targetPath){try{return await fs.access(targetPath),!0}catch{return!1}}function isErrno(error,code){return typeof error=="object"&&error!==null&&"code"in error&&error.code===code}function appendWarning(warnings,warning){warnings&&(warnings.includes(warning)||warnings.push(warning))}function resolveActiveExtensionFieldNames(explicit){return explicit??collectRegisteredItemFieldNames(getActiveExtensionRegistrations())}function resolveItemFormatSearchOrder(preferredFormat){return preferredFormat==="toon"?["toon","json_markdown"]:preferredFormat==="json_markdown"?["json_markdown","toon"]:["toon","json_markdown"]}async function locateItem(pmRoot,rawId,idPrefix="pm-",preferredFormat,typeToFolder=TYPE_TO_FOLDER){const trimmedRawId=rawId.trim(),exactRawId=trimmedRawId.startsWith("#")?trimmedRawId.slice(1):trimmedRawId;if(exactRawId.length===0)return null;const normalizedId=normalizeItemId(rawId,idPrefix),rawNormalizedId=normalizeRawItemId(rawId),candidateIds=[...new Set([exactRawId,normalizedId,rawNormalizedId])].filter(candidateId=>candidateId.length>0),entries=Object.entries(typeToFolder),searchOrder=resolveItemFormatSearchOrder(preferredFormat);for(const candidateId of candidateIds){const matches=new Map;for(const[type]of entries)for(const itemFormat of searchOrder){const itemPath=getItemPath(pmRoot,type,candidateId,itemFormat,typeToFolder);await fileExists(itemPath)&&matches.set(itemPath,matches.get(itemPath)??{id:candidateId,type,itemPath,item_format:itemFormat})}if(matches.size>1){const paths=[...matches.keys()].map(itemPath=>path.relative(pmRoot,itemPath).split(path.sep).join("/")).sort();throw new PmCliError(`Item ${candidateId} has ambiguous identity across ${paths.join(", ")}. Preserve both documents and inspect pm ops validate --check-storage-integrity before resolving the collision.`,EXIT_CODE.CONFLICT,{code:"item_identity_ambiguous",item_id:candidateId,paths})}for(const match of matches.values())return match}return null}async function readLocatedItem(item,options={}){const snapshot=await readLocatedItemSnapshot(item,options);if(snapshot.error!==null)throw snapshot.error;return{raw:snapshot.raw,document:snapshot.document}}async function readLocatedItemSnapshot(item,options={}){const bytes=await fs.readFile(item.itemPath);if(!isUtf8(bytes))throw new PmCliError("Item contains invalid UTF-8; preserve a binary backup before recovering it.",EXIT_CODE.CONFLICT,{code:"item_document_encoding_invalid",item_id:item.id,item_path:item.itemPath,byte_length:bytes.length,empty:!1});const raw=bytes.toString("utf8");await runActiveOnReadHooks({path:item.itemPath,scope:"project"});let document;try{document=parseItemDocument(raw,{format:item.item_format,requireSupportedFormat:!0,schema:options.schema,extensionFieldNames:resolveActiveExtensionFieldNames(options.extensionFieldNames),onWarning:warning=>appendWarning(options.warnings,warning)})}catch(error){if(error instanceof PmCliError&&error.code==="item_format_version_unsupported")throw new PmCliError(`Item ${item.id}: ${error.message}`,error.exitCode,{...error.context,item_id:item.id,item_path:item.itemPath});if(error instanceof PmCliError&&error.code==="item_document_invalid")return{raw,document:null,error:new PmCliError(`Cannot read ${item.id} at ${item.itemPath}${bytes.length===0?" (zero-length file)":""}: ${error.message}`,error.exitCode,{...error.context,item_id:item.id,item_path:item.itemPath,byte_length:bytes.length,empty:bytes.length===0,nextSteps:[`Run pm history ${item.id} --full, then pm restore ${item.id} <version> to recover a recorded state.`]})};throw error}return{raw,document,error:null}}async function listAllItemMetadata(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema){await assertReadableTrackerRoot(pmRoot);const documents=await listAllDocumentsCached(pmRoot,preferredFormat,typeToFolder,warnings,schema);return recordItemMetadataEnumeration(documents.length),documents.map(document=>document.metadata)}async function listAllItemMetadataLight(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema){await assertReadableTrackerRoot(pmRoot);const documents=await listAllDocumentsCachedLight(pmRoot,preferredFormat,typeToFolder,warnings,schema);return recordItemMetadataEnumeration(documents.length),documents.map(document=>document.metadata)}async function listAllItemMetadataWithBody(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema,options={}){await assertReadableTrackerRoot(pmRoot);const candidates=await listAllDocumentCandidatesCached(pmRoot,preferredFormat,typeToFolder,warnings,schema,{includeBody:!0,forceSourceScan:options.forceSourceScan});return recordItemMetadataEnumeration(candidates.length),candidates.map(candidate=>({...candidate.metadata,body:candidate.body}))}function createMutationGuardSdk(params){return{async get(id){const located=await locateItem(params.pmRoot,id,params.settings.id_prefix,params.settings.item_format,params.typeToFolder);if(!located)return null;const{document}=await readLocatedItem(located,{schema:params.settings.schema});return{item:document.metadata,body:document.body}},list:()=>listAllItemMetadata(params.pmRoot,params.settings.item_format,params.typeToFolder,void 0,params.settings.schema)}}async function listKnownItemIds(pmRoot,typeToFolder){const folders=new Set(Object.values(typeToFolder)),allIds=[];return await Promise.all([...folders].map(async folder=>{try{const entries=await fs.readdir(path.join(pmRoot,folder));for(const entry of entries)for(const ext of ITEM_FILE_EXTENSIONS)if(entry.toLowerCase().endsWith(ext)){allIds.push(entry.slice(0,-ext.length));break}}catch{}})),allIds}async function buildDidYouMeanSuggestions(pmRoot,badId,idPrefix,typeToFolder){const normalized=normalizeItemId(badId,idPrefix),ids=await listKnownItemIds(pmRoot,typeToFolder);if(ids.length===0)return[];const limit=Math.max(3,Math.floor(normalized.length/2));return ids.map(id=>({id,distance:levenshteinDistanceWithinLimit(id,normalized,limit)})).filter(entry=>entry.distance!==null).sort((left,right)=>left.distance-right.distance).slice(0,3).map(entry=>entry.id)}async function buildItemNotFoundError(pmRoot,badId,idPrefix,typeToFolder){const deleted=await buildDeletedItemError(pmRoot,badId,idPrefix);if(deleted)return deleted;const suggestions=await buildDidYouMeanSuggestions(pmRoot,badId,idPrefix,typeToFolder),nextSteps=["Confirm the active --path/PM_PATH scope, then retry with a valid id."];return suggestions.length>0&&nextSteps.unshift(`Did you mean one of: ${suggestions.join(", ")}?`),new PmCliError(`Item ${badId} not found`,EXIT_CODE.NOT_FOUND,{nextSteps})}function bypassesAssigneeConflict(op,bypassAssigneeConflict){return op==="claim"||bypassAssigneeConflict===!0&&(op==="comment_add"||op==="comment_edit"||op==="comment_delete"||op==="note_add"||op==="learning_add"||op==="release"||op==="update"||op==="update_ownership_bypass"||op==="update_audit")}async function prepareLockedItem(params){const typeToFolder=params.typeToFolder??resolveItemTypeRegistry(params.settings,getActiveExtensionRegistrations()).type_to_folder,located=await locateItem(params.pmRoot,params.id,params.settings.id_prefix,params.settings.item_format,typeToFolder);if(!located)throw await buildItemNotFoundError(params.pmRoot,params.id,params.settings.id_prefix,typeToFolder);const releaseLock=await acquireLock(params.pmRoot,located.id,params.settings.locks.ttl_seconds,params.author,!!params.force,params.settings.governance.force_required_for_stale_lock,params.settings.locks.wait_ms);try{const warnings=[],{raw:originalRaw,document}=await readLocatedItem(located,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames,warnings}),assigned=document.metadata.assignee?.trim(),assignedPrincipal=document.metadata.claim_principal?.trim()||assigned,callerPrincipal=resolveClaimPrincipal(params.author),governance=resolveGovernanceKnobs(params.settings);if(assigned&&assignedPrincipal!==callerPrincipal&&!params.force&&!bypassesAssigneeConflict(params.op,params.bypassAssigneeConflict)){if(governance.ownership_enforcement==="strict")throw new PmCliError(`Item ${located.id} is assigned to ${assigned}. Use --force to override.`,EXIT_CODE.CONFLICT);governance.ownership_enforcement==="warn"&&warnings.push(`ownership_warning:assignee_conflict:${located.id}:${assigned}`)}return{typeToFolder,located,originalRaw,document,warnings,releaseLock}}catch(error){throw await releaseLock(),error}}function resolveItemStoreWriteOverride(serviceWriteOverride,targetItemPath,serializedAfter){if(!serviceWriteOverride.handled||typeof serviceWriteOverride.result!="object"||serviceWriteOverride.result===null)return{effectiveTargetItemPath:targetItemPath,effectiveSerializedAfter:serializedAfter,skipItemWrite:!1};const overrideRecord=serviceWriteOverride.result;return{effectiveTargetItemPath:typeof overrideRecord.target_item_path=="string"&&overrideRecord.target_item_path.trim().length>0?overrideRecord.target_item_path:targetItemPath,effectiveSerializedAfter:typeof overrideRecord.contents=="string"?overrideRecord.contents:serializedAfter,skipItemWrite:overrideRecord.skip_write===!0}}async function rollbackMutatedItemWrite(params){if(!params.skipItemWrite){if(params.effectiveTargetItemPath!==params.originalItemPath){await writeFileAtomic(params.originalItemPath,params.originalRaw),await fs.rm(params.effectiveTargetItemPath,{force:!0});return}await writeFileAtomic(params.originalItemPath,params.originalRaw)}}async function mutateItemWithDeferredHistoryContext(params){normalizeHistoryOperationForWrite(params.op);const prepared=await prepareLockedItem({pmRoot:params.pmRoot,settings:params.settings,id:params.id,op:params.op,author:params.author,force:params.force,bypassAssigneeConflict:params.bypassAssigneeConflict,extensionFieldNames:params.extensionFieldNames,typeToFolder:params.typeToFolder}),{typeToFolder,located,originalRaw,document,warnings:parseWarnings,releaseLock}=prepared;try{const beforeDocument=canonicalDocument(document,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),mutableDocument=canonicalDocument(structuredClone(document),{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),mutation=await params.mutate(mutableDocument);if(params.skipNoop===!0&&mutation.changedFields.length===0)return{item:beforeDocument.metadata,body:beforeDocument.body,changedFields:[],warnings:[...parseWarnings,...mutation.warnings??[]]};const historyContext=params.resolveHistoryContext?.();mutableDocument.metadata.updated_at=nowIso();const afterDocument=canonicalDocument(mutableDocument,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),workflowPolicy=await enforceWorkflowMutation({pmRoot:params.pmRoot,settings:params.settings,operation:params.op,author:params.author,before:beforeDocument,after:afterDocument});await runActiveBeforeMutationHooks({pm_root:params.pmRoot,operation:params.op,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields,sdk:createMutationGuardSdk({pmRoot:params.pmRoot,settings:params.settings,typeToFolder})});const historyPolicy=await enforceHistoryStreamPolicyForItem({pmRoot:params.pmRoot,settings:params.settings,itemId:located.id,commandLabel:params.op}),targetItemFormat="toon",serializedAfter=serializeItemDocument(afterDocument,{format:targetItemFormat,schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),targetItemPath=getItemPath(params.pmRoot,afterDocument.metadata.type,located.id,targetItemFormat,typeToFolder),historyPath=getHistoryPath(params.pmRoot,located.id),serviceWriteOverride=await runActiveServiceOverride("item_store_write",{op:params.op,pm_root:params.pmRoot,item_id:located.id,source_item_path:located.itemPath,target_item_path:targetItemPath,history_path:historyPath,item_format:targetItemFormat,before:beforeDocument,after:afterDocument,contents:serializedAfter}),{effectiveTargetItemPath,effectiveSerializedAfter,skipItemWrite}=resolveItemStoreWriteOverride(serviceWriteOverride,targetItemPath,serializedAfter),releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(params.pmRoot,params.author);let derivedIndexWarnings=[];try{skipItemWrite||await writeFileAtomic(effectiveTargetItemPath,effectiveSerializedAfter),!skipItemWrite&&effectiveTargetItemPath!==located.itemPath&&await fs.rm(located.itemPath);const entry=createHistoryEntry({nowIso:afterDocument.metadata.updated_at,author:params.author,op:params.op,before:beforeDocument,after:afterDocument,message:params.message,context:workflowPolicy.decisions.length===0?historyContext:{...historyContext,workflow_policies:workflowPolicy.decisions}});try{await appendHistoryEntry(historyPath,entry)}catch(error){throw await rollbackMutatedItemWrite({skipItemWrite,effectiveTargetItemPath,originalItemPath:located.itemPath,originalRaw}),error}skipItemWrite||(derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot:params.pmRoot,preferredFormat:params.settings.item_format,typeToFolder,schema:params.settings.schema,itemPath:effectiveTargetItemPath,previousItemPath:located.itemPath,document:afterDocument}))}finally{await releaseDerivedIndexLock()}const hookWarnings=[...await runActiveOnWriteHooks({path:effectiveTargetItemPath,scope:"project",op:params.op,item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:`${params.op}:history`,item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields})];return recordAfterCommandAffectedItem({id:afterDocument.metadata.id,op:params.op,item_type:afterDocument.metadata.type,previous_status:beforeDocument.metadata.status,status:afterDocument.metadata.status,previous:projectAfterCommandItemSnapshot(beforeDocument.metadata,mutation.changedFields),current:projectAfterCommandItemSnapshot(afterDocument.metadata,mutation.changedFields),changed_fields:mutation.changedFields}),{item:afterDocument.metadata,body:afterDocument.body,changedFields:mutation.changedFields,warnings:[...parseWarnings,...mutation.warnings??[],...workflowPolicy.warnings,...historyPolicy.warnings,...serviceWriteOverride.warnings,...derivedIndexWarnings,...hookWarnings]}}finally{await releaseLock()}}async function mutateItemWithHistoryContext(params){const{historyContext,...mutationParams}=params;return mutateItemWithDeferredHistoryContext({...mutationParams,resolveHistoryContext:()=>historyContext})}async function mutateItemWithHistoryContextResolver(params){return mutateItemWithDeferredHistoryContext(params)}async function mutateItem(params){return mutateItemWithDeferredHistoryContext(params)}const itemStoreTestOnly={appendWarning,bypassesAssigneeConflict,buildDidYouMeanSuggestions,isErrno};async function deleteItem(params){const prepared=await prepareLockedItem({pmRoot:params.pmRoot,settings:params.settings,id:params.id,op:"delete",author:params.author,force:params.force}),{located,originalRaw,document,warnings:parseWarnings,releaseLock}=prepared;try{const extensionFieldNames=resolveActiveExtensionFieldNames(void 0),beforeDocument=canonicalDocument(document,{schema:params.settings.schema,extensionFieldNames}),workflowPolicy=await enforceWorkflowMutation({pmRoot:params.pmRoot,settings:params.settings,operation:"delete",author:params.author,before:beforeDocument,after:null,dryRun:params.dryRun});await runActiveBeforeMutationHooks({pm_root:params.pmRoot,operation:"delete",before:beforeDocument,after:null,changed_fields:["deleted"],sdk:createMutationGuardSdk({pmRoot:params.pmRoot,settings:params.settings,typeToFolder:prepared.typeToFolder})});const historyPolicy=await enforceHistoryStreamPolicyForItem({pmRoot:params.pmRoot,settings:params.settings,itemId:located.id,commandLabel:"delete"}),deletionTimestamp=nowIso(),tombstoneDocument=EMPTY_CANONICAL_DOCUMENT,historyEntry=createHistoryEntry({nowIso:deletionTimestamp,author:params.author,op:"delete",before:beforeDocument,after:tombstoneDocument,message:params.message,context:workflowPolicy.decisions.length===0?void 0:{workflow_policies:workflowPolicy.decisions}}),historyPath=getHistoryPath(params.pmRoot,located.id),serviceDeleteOverride=await runActiveServiceOverride("item_store_delete",{op:"delete",pm_root:params.pmRoot,item_id:located.id,item_path:located.itemPath,history_path:historyPath,before:beforeDocument});let effectiveItemPath=located.itemPath,skipDelete=!1;if(serviceDeleteOverride.handled&&typeof serviceDeleteOverride.result=="object"&&serviceDeleteOverride.result!==null){const overrideRecord=serviceDeleteOverride.result;typeof overrideRecord.item_path=="string"&&overrideRecord.item_path.trim().length>0&&(effectiveItemPath=overrideRecord.item_path),overrideRecord.skip_delete===!0&&(skipDelete=!0)}if(params.dryRun===!0)return{item:beforeDocument.metadata,changedFields:["deleted"],targetPath:effectiveItemPath,warnings:[...parseWarnings,...workflowPolicy.warnings,...historyPolicy.warnings,...serviceDeleteOverride.warnings]};const releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(params.pmRoot,params.author);let derivedIndexWarnings=[];try{skipDelete||await fs.rm(effectiveItemPath);try{await appendHistoryEntry(historyPath,historyEntry)}catch(error){throw skipDelete||await writeFileAtomic(effectiveItemPath,originalRaw),error}skipDelete||(derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot:params.pmRoot,preferredFormat:params.settings.item_format,typeToFolder:prepared.typeToFolder,schema:params.settings.schema,itemPath:effectiveItemPath,document:null}))}finally{await releaseDerivedIndexLock()}const hookWarnings=[...await runActiveOnWriteHooks({path:effectiveItemPath,scope:"project",op:"delete",item_id:beforeDocument.metadata.id,item_type:beforeDocument.metadata.type,before:beforeDocument,after:tombstoneDocument,changed_fields:["deleted"]}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:"delete:history",item_id:beforeDocument.metadata.id,item_type:beforeDocument.metadata.type,before:beforeDocument,after:tombstoneDocument,changed_fields:["deleted"]})];return recordAfterCommandAffectedItem({id:beforeDocument.metadata.id,op:"delete",item_type:beforeDocument.metadata.type,previous_status:beforeDocument.metadata.status,previous:projectAfterCommandItemSnapshot(beforeDocument.metadata,Object.keys(beforeDocument.metadata)),changed_fields:["deleted"]}),{item:beforeDocument.metadata,changedFields:["deleted"],warnings:[...parseWarnings,...workflowPolicy.warnings,...historyPolicy.warnings,...serviceDeleteOverride.warnings,...derivedIndexWarnings,...hookWarnings]}}finally{await releaseLock()}}export{buildItemNotFoundError,createMutationGuardSdk,deleteItem,itemStoreTestOnly,listAllItemMetadata,listAllItemMetadataLight,listAllItemMetadataWithBody,locateItem,mutateItem,mutateItemWithHistoryContext,mutateItemWithHistoryContextResolver,readLocatedItem,readLocatedItemSnapshot};
|
|
1
|
+
(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="75d742ab-22c4-5a3f-8f63-74c68afa6b3f")}catch{}})();import fs from"node:fs/promises";import{buildDeletedItemError}from"../history/tombstone.js";import{normalizeHistoryOperationForWrite}from"../history/operation-contract.js";import{enforceWorkflowMutation}from"../policy/workflow-policy-store.js";import{recordItemMetadataEnumeration}from"./item-metadata-read-work.js";import path from"node:path";import{getActiveExtensionRegistrations,projectAfterCommandItemSnapshot,recordAfterCommandAffectedItem,runActiveOnReadHooks,runActiveBeforeMutationHooks,runActiveOnWriteHooks,runActiveServiceOverride}from"../extensions/index.js";import{collectRegisteredItemFieldNames}from"../extensions/item-fields.js";import{EMPTY_CANONICAL_DOCUMENT,EXIT_CODE,TYPE_TO_FOLDER}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{levenshteinDistanceWithinLimit}from"../shared/levenshtein.js";import{appendHistoryEntry,createHistoryEntry}from"../history/history.js";import{enforceHistoryStreamPolicyForItem}from"../history/history-stream-policy.js";import{canonicalDocument,parseItemDocument,serializeItemDocument}from"../item/item-format.js";import{resolveItemTypeRegistry}from"../item/type-registry.js";import{effectiveItemFormatVersion,requiredItemFormatVersion}from"../item/item-format-version.js";import{assertProjectRuntimeFormatGuard}from"../../sdk/environment/project-runtime-compatibility.js";import{acquireLock}from"../lock/lock.js";import{writeFileAtomic}from"../fs/fs-utils.js";import{isUtf8}from"node:buffer";import{normalizeItemId,normalizeRawItemId}from"../item/id.js";import{acquireItemMetadataDerivedIndexLock,listAllDocumentCandidatesCached,listAllDocumentsCached,listAllDocumentsCachedLight,refreshItemMetadataDerivedIndex}from"./item-metadata-cache.js";import{getHistoryPath,getItemPath,ITEM_FILE_EXTENSIONS,resolveWorkspaceRoot}from"./paths.js";import{resolveGovernanceKnobs}from"./settings.js";import{assertReadableTrackerRoot}from"./tracker-preflight.js";import{resolveClaimPrincipal}from"../shared/author.js";import{nowIso}from"../shared/time.js";async function fileExists(targetPath){try{return await fs.access(targetPath),!0}catch{return!1}}function isErrno(error,code){return typeof error=="object"&&error!==null&&"code"in error&&error.code===code}function appendWarning(warnings,warning){warnings&&(warnings.includes(warning)||warnings.push(warning))}function resolveActiveExtensionFieldNames(explicit){return explicit??collectRegisteredItemFieldNames(getActiveExtensionRegistrations())}function resolveItemFormatSearchOrder(preferredFormat){return preferredFormat==="toon"?["toon","json_markdown"]:preferredFormat==="json_markdown"?["json_markdown","toon"]:["toon","json_markdown"]}async function locateItem(pmRoot,rawId,idPrefix="pm-",preferredFormat,typeToFolder=TYPE_TO_FOLDER){const trimmedRawId=rawId.trim(),exactRawId=trimmedRawId.startsWith("#")?trimmedRawId.slice(1):trimmedRawId;if(exactRawId.length===0)return null;const normalizedId=normalizeItemId(rawId,idPrefix),rawNormalizedId=normalizeRawItemId(rawId),candidateIds=[...new Set([exactRawId,normalizedId,rawNormalizedId])].filter(candidateId=>candidateId.length>0),entries=Object.entries(typeToFolder),searchOrder=resolveItemFormatSearchOrder(preferredFormat);for(const candidateId of candidateIds){const matches=new Map;for(const[type]of entries)for(const itemFormat of searchOrder){const itemPath=getItemPath(pmRoot,type,candidateId,itemFormat,typeToFolder);await fileExists(itemPath)&&matches.set(itemPath,matches.get(itemPath)??{id:candidateId,type,itemPath,item_format:itemFormat})}if(matches.size>1){const paths=[...matches.keys()].map(itemPath=>path.relative(pmRoot,itemPath).split(path.sep).join("/")).sort();throw new PmCliError(`Item ${candidateId} has ambiguous identity across ${paths.join(", ")}. Preserve both documents and inspect pm ops validate --check-storage-integrity before resolving the collision.`,EXIT_CODE.CONFLICT,{code:"item_identity_ambiguous",item_id:candidateId,paths})}for(const match of matches.values())return match}return null}async function readLocatedItem(item,options={}){const snapshot=await readLocatedItemSnapshot(item,options);if(snapshot.error!==null)throw snapshot.error;return{raw:snapshot.raw,document:snapshot.document}}async function readLocatedItemSnapshot(item,options={}){const bytes=await fs.readFile(item.itemPath);if(!isUtf8(bytes))throw new PmCliError("Item contains invalid UTF-8; preserve a binary backup before recovering it.",EXIT_CODE.CONFLICT,{code:"item_document_encoding_invalid",item_id:item.id,item_path:item.itemPath,byte_length:bytes.length,empty:!1});const raw=bytes.toString("utf8");await runActiveOnReadHooks({path:item.itemPath,scope:"project"});let document;try{document=parseItemDocument(raw,{format:item.item_format,requireSupportedFormat:!0,schema:options.schema,extensionFieldNames:resolveActiveExtensionFieldNames(options.extensionFieldNames),onWarning:warning=>appendWarning(options.warnings,warning)})}catch(error){if(error instanceof PmCliError&&error.code==="item_format_version_unsupported")throw new PmCliError(`Item ${item.id}: ${error.message}`,error.exitCode,{...error.context,item_id:item.id,item_path:item.itemPath});if(error instanceof PmCliError&&error.code==="item_document_invalid")return{raw,document:null,error:new PmCliError(`Cannot read ${item.id} at ${item.itemPath}${bytes.length===0?" (zero-length file)":""}: ${error.message}`,error.exitCode,{...error.context,item_id:item.id,item_path:item.itemPath,byte_length:bytes.length,empty:bytes.length===0,nextSteps:[`Run pm history ${item.id} --full, then pm restore ${item.id} <version> to recover a recorded state.`]})};throw error}return{raw,document,error:null}}async function listAllItemMetadata(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema){await assertReadableTrackerRoot(pmRoot);const documents=await listAllDocumentsCached(pmRoot,preferredFormat,typeToFolder,warnings,schema);return recordItemMetadataEnumeration(documents.length),documents.map(document=>document.metadata)}async function listAllItemMetadataLight(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema){await assertReadableTrackerRoot(pmRoot);const documents=await listAllDocumentsCachedLight(pmRoot,preferredFormat,typeToFolder,warnings,schema);return recordItemMetadataEnumeration(documents.length),documents.map(document=>document.metadata)}async function listAllItemMetadataWithBody(pmRoot,preferredFormat,typeToFolder=TYPE_TO_FOLDER,warnings,schema,options={}){await assertReadableTrackerRoot(pmRoot);const candidates=await listAllDocumentCandidatesCached(pmRoot,preferredFormat,typeToFolder,warnings,schema,{includeBody:!0,forceSourceScan:options.forceSourceScan});return recordItemMetadataEnumeration(candidates.length),candidates.map(candidate=>({...candidate.metadata,body:candidate.body}))}function createMutationGuardSdk(params){return{async get(id){const located=await locateItem(params.pmRoot,id,params.settings.id_prefix,params.settings.item_format,params.typeToFolder);if(!located)return null;const{document}=await readLocatedItem(located,{schema:params.settings.schema});return{item:document.metadata,body:document.body}},list:()=>listAllItemMetadata(params.pmRoot,params.settings.item_format,params.typeToFolder,void 0,params.settings.schema)}}async function listKnownItemIds(pmRoot,typeToFolder){const folders=new Set(Object.values(typeToFolder)),allIds=[];return await Promise.all([...folders].map(async folder=>{try{const entries=await fs.readdir(path.join(pmRoot,folder));for(const entry of entries)for(const ext of ITEM_FILE_EXTENSIONS)if(entry.toLowerCase().endsWith(ext)){allIds.push(entry.slice(0,-ext.length));break}}catch{}})),allIds}async function buildDidYouMeanSuggestions(pmRoot,badId,idPrefix,typeToFolder){const normalized=normalizeItemId(badId,idPrefix),ids=await listKnownItemIds(pmRoot,typeToFolder);if(ids.length===0)return[];const limit=Math.max(3,Math.floor(normalized.length/2));return ids.map(id=>({id,distance:levenshteinDistanceWithinLimit(id,normalized,limit)})).filter(entry=>entry.distance!==null).sort((left,right)=>left.distance-right.distance).slice(0,3).map(entry=>entry.id)}async function buildItemNotFoundError(pmRoot,badId,idPrefix,typeToFolder){const deleted=await buildDeletedItemError(pmRoot,badId,idPrefix);if(deleted)return deleted;const suggestions=await buildDidYouMeanSuggestions(pmRoot,badId,idPrefix,typeToFolder),nextSteps=["Confirm the active --path/PM_PATH scope, then retry with a valid id."];return suggestions.length>0&&nextSteps.unshift(`Did you mean one of: ${suggestions.join(", ")}?`),new PmCliError(`Item ${badId} not found`,EXIT_CODE.NOT_FOUND,{nextSteps})}function bypassesAssigneeConflict(op,bypassAssigneeConflict){return op==="claim"||bypassAssigneeConflict===!0&&(op==="comment_add"||op==="comment_edit"||op==="comment_delete"||op==="note_add"||op==="learning_add"||op==="release"||op==="update"||op==="update_ownership_bypass"||op==="update_audit")}async function prepareLockedItem(params){const typeToFolder=params.typeToFolder??resolveItemTypeRegistry(params.settings,getActiveExtensionRegistrations()).type_to_folder,located=await locateItem(params.pmRoot,params.id,params.settings.id_prefix,params.settings.item_format,typeToFolder);if(!located)throw await buildItemNotFoundError(params.pmRoot,params.id,params.settings.id_prefix,typeToFolder);const releaseLock=await acquireLock(params.pmRoot,located.id,params.settings.locks.ttl_seconds,params.author,!!params.force,params.settings.governance.force_required_for_stale_lock,params.settings.locks.wait_ms);try{const warnings=[],{raw:originalRaw,document}=await readLocatedItem(located,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames,warnings}),assigned=document.metadata.assignee?.trim(),assignedPrincipal=document.metadata.claim_principal?.trim()||assigned,callerPrincipal=resolveClaimPrincipal(params.author),governance=resolveGovernanceKnobs(params.settings);if(assigned&&assignedPrincipal!==callerPrincipal&&!params.force&&!bypassesAssigneeConflict(params.op,params.bypassAssigneeConflict)){if(governance.ownership_enforcement==="strict")throw new PmCliError(`Item ${located.id} is assigned to ${assigned}. Use --force to override.`,EXIT_CODE.CONFLICT);governance.ownership_enforcement==="warn"&&warnings.push(`ownership_warning:assignee_conflict:${located.id}:${assigned}`)}return{typeToFolder,located,originalRaw,document,warnings,releaseLock}}catch(error){throw await releaseLock(),error}}function resolveItemStoreWriteOverride(serviceWriteOverride,targetItemPath,serializedAfter){if(!serviceWriteOverride.handled||typeof serviceWriteOverride.result!="object"||serviceWriteOverride.result===null)return{effectiveTargetItemPath:targetItemPath,effectiveSerializedAfter:serializedAfter,skipItemWrite:!1};const overrideRecord=serviceWriteOverride.result;return{effectiveTargetItemPath:typeof overrideRecord.target_item_path=="string"&&overrideRecord.target_item_path.trim().length>0?overrideRecord.target_item_path:targetItemPath,effectiveSerializedAfter:typeof overrideRecord.contents=="string"?overrideRecord.contents:serializedAfter,skipItemWrite:overrideRecord.skip_write===!0}}async function rollbackMutatedItemWrite(params){if(!params.skipItemWrite){if(params.effectiveTargetItemPath!==params.originalItemPath){await writeFileAtomic(params.originalItemPath,params.originalRaw),await fs.rm(params.effectiveTargetItemPath,{force:!0});return}await writeFileAtomic(params.originalItemPath,params.originalRaw)}}async function mutateItemWithDeferredHistoryContext(params){normalizeHistoryOperationForWrite(params.op);const prepared=await prepareLockedItem({pmRoot:params.pmRoot,settings:params.settings,id:params.id,op:params.op,author:params.author,force:params.force,bypassAssigneeConflict:params.bypassAssigneeConflict,extensionFieldNames:params.extensionFieldNames,typeToFolder:params.typeToFolder}),{typeToFolder,located,originalRaw,document,warnings:parseWarnings,releaseLock}=prepared;try{const beforeDocument=canonicalDocument(document,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),mutableDocument=canonicalDocument(structuredClone(document),{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),mutation=await params.mutate(mutableDocument);if(params.skipNoop===!0&&mutation.changedFields.length===0)return{item:beforeDocument.metadata,body:beforeDocument.body,changedFields:[],warnings:[...parseWarnings,...mutation.warnings??[]]};const historyContext=params.resolveHistoryContext?.(),requiredFormat=Math.max(requiredItemFormatVersion(beforeDocument.metadata),requiredItemFormatVersion(mutableDocument.metadata));assertProjectRuntimeFormatGuard(resolveWorkspaceRoot(params.pmRoot),requiredFormat),requiredFormat>effectiveItemFormatVersion(mutableDocument.metadata)&&(mutableDocument.metadata.pm_format_version=requiredFormat,mutation.changedFields.push("pm_format_version")),mutableDocument.metadata.updated_at=nowIso();const afterDocument=canonicalDocument(mutableDocument,{schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),workflowPolicy=await enforceWorkflowMutation({pmRoot:params.pmRoot,settings:params.settings,operation:params.op,author:params.author,before:beforeDocument,after:afterDocument});await runActiveBeforeMutationHooks({pm_root:params.pmRoot,operation:params.op,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields,sdk:createMutationGuardSdk({pmRoot:params.pmRoot,settings:params.settings,typeToFolder})});const historyPolicy=await enforceHistoryStreamPolicyForItem({pmRoot:params.pmRoot,settings:params.settings,itemId:located.id,commandLabel:params.op}),targetItemFormat="toon",serializedAfter=serializeItemDocument(afterDocument,{format:targetItemFormat,schema:params.settings.schema,extensionFieldNames:params.extensionFieldNames}),targetItemPath=getItemPath(params.pmRoot,afterDocument.metadata.type,located.id,targetItemFormat,typeToFolder),historyPath=getHistoryPath(params.pmRoot,located.id),serviceWriteOverride=await runActiveServiceOverride("item_store_write",{op:params.op,pm_root:params.pmRoot,item_id:located.id,source_item_path:located.itemPath,target_item_path:targetItemPath,history_path:historyPath,item_format:targetItemFormat,before:beforeDocument,after:afterDocument,contents:serializedAfter}),{effectiveTargetItemPath,effectiveSerializedAfter,skipItemWrite}=resolveItemStoreWriteOverride(serviceWriteOverride,targetItemPath,serializedAfter),releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(params.pmRoot,params.author);let derivedIndexWarnings=[];try{skipItemWrite||await writeFileAtomic(effectiveTargetItemPath,effectiveSerializedAfter),!skipItemWrite&&effectiveTargetItemPath!==located.itemPath&&await fs.rm(located.itemPath);const entry=createHistoryEntry({nowIso:afterDocument.metadata.updated_at,author:params.author,op:params.op,before:beforeDocument,after:afterDocument,message:params.message,context:workflowPolicy.decisions.length===0?historyContext:{...historyContext,workflow_policies:workflowPolicy.decisions}});try{await appendHistoryEntry(historyPath,entry)}catch(error){throw await rollbackMutatedItemWrite({skipItemWrite,effectiveTargetItemPath,originalItemPath:located.itemPath,originalRaw}),error}skipItemWrite||(derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot:params.pmRoot,preferredFormat:params.settings.item_format,typeToFolder,schema:params.settings.schema,itemPath:effectiveTargetItemPath,previousItemPath:located.itemPath,document:afterDocument}))}finally{await releaseDerivedIndexLock()}const hookWarnings=[...await runActiveOnWriteHooks({path:effectiveTargetItemPath,scope:"project",op:params.op,item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:`${params.op}:history`,item_id:afterDocument.metadata.id,item_type:afterDocument.metadata.type,before:beforeDocument,after:afterDocument,changed_fields:mutation.changedFields})];return recordAfterCommandAffectedItem({id:afterDocument.metadata.id,op:params.op,item_type:afterDocument.metadata.type,previous_status:beforeDocument.metadata.status,status:afterDocument.metadata.status,previous:projectAfterCommandItemSnapshot(beforeDocument.metadata,mutation.changedFields),current:projectAfterCommandItemSnapshot(afterDocument.metadata,mutation.changedFields),changed_fields:mutation.changedFields}),{item:afterDocument.metadata,body:afterDocument.body,changedFields:mutation.changedFields,warnings:[...parseWarnings,...mutation.warnings??[],...workflowPolicy.warnings,...historyPolicy.warnings,...serviceWriteOverride.warnings,...derivedIndexWarnings,...hookWarnings]}}finally{await releaseLock()}}async function mutateItemWithHistoryContext(params){const{historyContext,...mutationParams}=params;return mutateItemWithDeferredHistoryContext({...mutationParams,resolveHistoryContext:()=>historyContext})}async function mutateItemWithHistoryContextResolver(params){return mutateItemWithDeferredHistoryContext(params)}async function mutateItem(params){return mutateItemWithDeferredHistoryContext(params)}const itemStoreTestOnly={appendWarning,bypassesAssigneeConflict,buildDidYouMeanSuggestions,isErrno};async function deleteItem(params){const prepared=await prepareLockedItem({pmRoot:params.pmRoot,settings:params.settings,id:params.id,op:"delete",author:params.author,force:params.force}),{located,originalRaw,document,warnings:parseWarnings,releaseLock}=prepared;try{const extensionFieldNames=resolveActiveExtensionFieldNames(void 0),beforeDocument=canonicalDocument(document,{schema:params.settings.schema,extensionFieldNames}),workflowPolicy=await enforceWorkflowMutation({pmRoot:params.pmRoot,settings:params.settings,operation:"delete",author:params.author,before:beforeDocument,after:null,dryRun:params.dryRun});await runActiveBeforeMutationHooks({pm_root:params.pmRoot,operation:"delete",before:beforeDocument,after:null,changed_fields:["deleted"],sdk:createMutationGuardSdk({pmRoot:params.pmRoot,settings:params.settings,typeToFolder:prepared.typeToFolder})});const historyPolicy=await enforceHistoryStreamPolicyForItem({pmRoot:params.pmRoot,settings:params.settings,itemId:located.id,commandLabel:"delete"}),deletionTimestamp=nowIso(),tombstoneDocument=EMPTY_CANONICAL_DOCUMENT,historyEntry=createHistoryEntry({nowIso:deletionTimestamp,author:params.author,op:"delete",before:beforeDocument,after:tombstoneDocument,message:params.message,context:workflowPolicy.decisions.length===0?void 0:{workflow_policies:workflowPolicy.decisions}}),historyPath=getHistoryPath(params.pmRoot,located.id),serviceDeleteOverride=await runActiveServiceOverride("item_store_delete",{op:"delete",pm_root:params.pmRoot,item_id:located.id,item_path:located.itemPath,history_path:historyPath,before:beforeDocument});let effectiveItemPath=located.itemPath,skipDelete=!1;if(serviceDeleteOverride.handled&&typeof serviceDeleteOverride.result=="object"&&serviceDeleteOverride.result!==null){const overrideRecord=serviceDeleteOverride.result;typeof overrideRecord.item_path=="string"&&overrideRecord.item_path.trim().length>0&&(effectiveItemPath=overrideRecord.item_path),overrideRecord.skip_delete===!0&&(skipDelete=!0)}if(params.dryRun===!0)return{item:beforeDocument.metadata,changedFields:["deleted"],targetPath:effectiveItemPath,warnings:[...parseWarnings,...workflowPolicy.warnings,...historyPolicy.warnings,...serviceDeleteOverride.warnings]};const releaseDerivedIndexLock=await acquireItemMetadataDerivedIndexLock(params.pmRoot,params.author);let derivedIndexWarnings=[];try{skipDelete||await fs.rm(effectiveItemPath);try{await appendHistoryEntry(historyPath,historyEntry)}catch(error){throw skipDelete||await writeFileAtomic(effectiveItemPath,originalRaw),error}skipDelete||(derivedIndexWarnings=await refreshItemMetadataDerivedIndex({pmRoot:params.pmRoot,preferredFormat:params.settings.item_format,typeToFolder:prepared.typeToFolder,schema:params.settings.schema,itemPath:effectiveItemPath,document:null}))}finally{await releaseDerivedIndexLock()}const hookWarnings=[...await runActiveOnWriteHooks({path:effectiveItemPath,scope:"project",op:"delete",item_id:beforeDocument.metadata.id,item_type:beforeDocument.metadata.type,before:beforeDocument,after:tombstoneDocument,changed_fields:["deleted"]}),...await runActiveOnWriteHooks({path:historyPath,scope:"project",op:"delete:history",item_id:beforeDocument.metadata.id,item_type:beforeDocument.metadata.type,before:beforeDocument,after:tombstoneDocument,changed_fields:["deleted"]})];return recordAfterCommandAffectedItem({id:beforeDocument.metadata.id,op:"delete",item_type:beforeDocument.metadata.type,previous_status:beforeDocument.metadata.status,previous:projectAfterCommandItemSnapshot(beforeDocument.metadata,Object.keys(beforeDocument.metadata)),changed_fields:["deleted"]}),{item:beforeDocument.metadata,changedFields:["deleted"],warnings:[...parseWarnings,...workflowPolicy.warnings,...historyPolicy.warnings,...serviceDeleteOverride.warnings,...derivedIndexWarnings,...hookWarnings]}}finally{await releaseLock()}}export{buildItemNotFoundError,createMutationGuardSdk,deleteItem,itemStoreTestOnly,listAllItemMetadata,listAllItemMetadataLight,listAllItemMetadataWithBody,locateItem,mutateItem,mutateItemWithHistoryContext,mutateItemWithHistoryContextResolver,readLocatedItem,readLocatedItemSnapshot};
|
|
2
2
|
//# sourceMappingURL=item-store.js.map
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import type { ItemFormat,
|
|
1
|
+
import type { ItemFormat,ItemType } from "../../types/index.js";
|
|
2
2
|
/** Public contract for item file extension by format, shared by SDK and presentation-layer consumers. */
|
|
3
|
-
export declare const ITEM_FILE_EXTENSION_BY_FORMAT:
|
|
4
|
-
declare const ITEM_FORMAT_BY_EXTENSION:
|
|
5
|
-
readonly ".md":
|
|
6
|
-
readonly ".toon":
|
|
3
|
+
export declare const ITEM_FILE_EXTENSION_BY_FORMAT:Record<ItemFormat,".md" | ".toon">;
|
|
4
|
+
declare const ITEM_FORMAT_BY_EXTENSION:{
|
|
5
|
+
readonly ".md":"json_markdown";
|
|
6
|
+
readonly ".toon":"toon";
|
|
7
7
|
};
|
|
8
8
|
/** Public contract for item file extensions, shared by SDK and presentation-layer consumers. */
|
|
9
|
-
export declare const ITEM_FILE_EXTENSIONS:
|
|
9
|
+
export declare const ITEM_FILE_EXTENSIONS:Array<keyof typeof ITEM_FORMAT_BY_EXTENSION>;
|
|
10
10
|
/** Resolve the tracker owned by the current workspace without honoring explicit CLI or PM_PATH overrides. */
|
|
11
|
-
export declare function resolveImplicitPmRoot(cwd:
|
|
11
|
+
export declare function resolveImplicitPmRoot(cwd:string):string;
|
|
12
12
|
/** Find a directly nested custom tracker root so recovery guidance can preserve existing data instead of recommending a second initialization. */
|
|
13
|
-
export declare function discoverNearbyPmRoot(cwd:
|
|
13
|
+
export declare function discoverNearbyPmRoot(cwd:string,excludedRoot?:string):string | undefined;
|
|
14
14
|
/** Implements resolve pm root for the public runtime surface of this module. */
|
|
15
|
-
export declare function resolvePmRoot(cwd:
|
|
15
|
+
export declare function resolvePmRoot(cwd:string,cliPath?:string):string;
|
|
16
16
|
/** Resolve the project workspace that owns a tracker root. */
|
|
17
|
-
export declare function resolveWorkspaceRoot(pmRoot:
|
|
17
|
+
export declare function resolveWorkspaceRoot(pmRoot:string):string;
|
|
18
18
|
/** Implements resolve global pm root for the public runtime surface of this module. */
|
|
19
|
-
export declare function resolveGlobalPmRoot(cwd:
|
|
19
|
+
export declare function resolveGlobalPmRoot(cwd:string):string;
|
|
20
20
|
/** Implements get settings path for the public runtime surface of this module. */
|
|
21
|
-
export declare function getSettingsPath(pmRoot:
|
|
21
|
+
export declare function getSettingsPath(pmRoot:string):string;
|
|
22
22
|
/** Implements get type dir path for the public runtime surface of this module. */
|
|
23
|
-
export declare function getTypeDirPath(pmRoot:
|
|
23
|
+
export declare function getTypeDirPath(pmRoot:string,type:ItemType,typeToFolder?:Record<string,string>):string;
|
|
24
24
|
/** Implements get item path for the public runtime surface of this module. */
|
|
25
|
-
export declare function getItemPath(pmRoot:
|
|
25
|
+
export declare function getItemPath(pmRoot:string,type:ItemType,id:string,itemFormat?:ItemFormat,typeToFolder?:Record<string,string>):string;
|
|
26
26
|
/** Implements get item format from path for the public runtime surface of this module. */
|
|
27
|
-
export declare function getItemFormatFromPath(itemPath:
|
|
27
|
+
export declare function getItemFormatFromPath(itemPath:string):ItemFormat | null;
|
|
28
28
|
/** Constrain stream identifiers to a single portable filename before any read or rewrite. */
|
|
29
|
-
export declare function getHistoryPath(pmRoot:
|
|
29
|
+
export declare function getHistoryPath(pmRoot:string,id:string):string;
|
|
30
30
|
/** Implements get lock path for the public runtime surface of this module. */
|
|
31
|
-
export declare function getLockPath(pmRoot:
|
|
31
|
+
export declare function getLockPath(pmRoot:string,id:string):string;
|
|
32
32
|
/** Implements get runtime path for the public runtime surface of this module. */
|
|
33
|
-
export declare function getRuntimePath(pmRoot:
|
|
33
|
+
export declare function getRuntimePath(pmRoot:string):string;
|
|
34
34
|
/** Implements get test runs path for the public runtime surface of this module. */
|
|
35
|
-
export declare function getTestRunsPath(pmRoot:
|
|
35
|
+
export declare function getTestRunsPath(pmRoot:string):string;
|
|
36
36
|
/** Implements get test runs records path for the public runtime surface of this module. */
|
|
37
|
-
export declare function getTestRunsRecordsPath(pmRoot:
|
|
37
|
+
export declare function getTestRunsRecordsPath(pmRoot:string):string;
|
|
38
38
|
/** Implements get test run record path for the public runtime surface of this module. */
|
|
39
|
-
export declare function getTestRunRecordPath(pmRoot:
|
|
39
|
+
export declare function getTestRunRecordPath(pmRoot:string,runId:string):string;
|
|
40
40
|
/** Implements get test runs stdout path for the public runtime surface of this module. */
|
|
41
|
-
export declare function getTestRunsStdoutPath(pmRoot:
|
|
41
|
+
export declare function getTestRunsStdoutPath(pmRoot:string):string;
|
|
42
42
|
/** Implements get test runs stderr path for the public runtime surface of this module. */
|
|
43
|
-
export declare function getTestRunsStderrPath(pmRoot:
|
|
43
|
+
export declare function getTestRunsStderrPath(pmRoot:string):string;
|
|
44
44
|
/** Implements get test run stdout path for the public runtime surface of this module. */
|
|
45
|
-
export declare function getTestRunStdoutPath(pmRoot:
|
|
45
|
+
export declare function getTestRunStdoutPath(pmRoot:string,runId:string):string;
|
|
46
46
|
/** Implements get test run stderr path for the public runtime surface of this module. */
|
|
47
|
-
export declare function getTestRunStderrPath(pmRoot:
|
|
47
|
+
export declare function getTestRunStderrPath(pmRoot:string,runId:string):string;
|
|
48
48
|
/** Implements get test runs results path for the public runtime surface of this module. */
|
|
49
|
-
export declare function getTestRunsResultsPath(pmRoot:
|
|
49
|
+
export declare function getTestRunsResultsPath(pmRoot:string):string;
|
|
50
50
|
/** Implements get test run result path for the public runtime surface of this module. */
|
|
51
|
-
export declare function getTestRunResultPath(pmRoot:
|
|
51
|
+
export declare function getTestRunResultPath(pmRoot:string,runId:string):string;
|
|
52
52
|
export {};
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* The root must remain an object even for an unchanged snapshot. Error receipts
|
|
5
5
|
* contain a key path, never the potentially secret values.
|
|
6
6
|
*/
|
|
7
|
-
export declare function reconcileSettingsSnapshot(baseline:
|
|
7
|
+
export declare function reconcileSettingsSnapshot(baseline:unknown,proposed:unknown,current:unknown,segments?:readonly string[]):unknown;
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
/** Documents the settings read cache path signature payload exchanged by command, SDK, and package integrations. */
|
|
2
2
|
export interface SettingsReadCachePathSignature {
|
|
3
3
|
/** Filesystem path used for path resolution. */
|
|
4
|
-
path:
|
|
4
|
+
path:string;
|
|
5
5
|
/** Elapsed time in milliseconds for mtime. */
|
|
6
|
-
mtime_ms:
|
|
6
|
+
mtime_ms:number | null;
|
|
7
7
|
/** Value that configures or reports size for this contract. */
|
|
8
|
-
size:
|
|
8
|
+
size:number | null;
|
|
9
9
|
}
|
|
10
10
|
/** Documents the settings read cache entry payload exchanged by command, SDK, and package integrations. */
|
|
11
11
|
export interface SettingsReadCacheEntry<T> {
|
|
12
12
|
/** Value that configures or reports tracked paths for this contract. */
|
|
13
|
-
tracked_paths:
|
|
13
|
+
tracked_paths:string[];
|
|
14
14
|
/** Value that configures or reports signatures for this contract. */
|
|
15
|
-
signatures:
|
|
15
|
+
signatures:SettingsReadCachePathSignature[];
|
|
16
16
|
/** Value that configures or reports value for this contract. */
|
|
17
|
-
value:
|
|
17
|
+
value:T;
|
|
18
18
|
}
|
|
19
19
|
/** Implements collect settings read cache signatures for the public runtime surface of this module. */
|
|
20
|
-
export declare function collectSettingsReadCacheSignatures(paths:
|
|
20
|
+
export declare function collectSettingsReadCacheSignatures(paths:string[]):Promise<SettingsReadCachePathSignature[]>;
|
|
21
21
|
/** Implements settings read cache signatures equal for the public runtime surface of this module. */
|
|
22
|
-
export declare function settingsReadCacheSignaturesEqual(left:
|
|
22
|
+
export declare function settingsReadCacheSignaturesEqual(left:SettingsReadCachePathSignature[],right:SettingsReadCachePathSignature[]):boolean;
|
|
23
23
|
/** Implements get settings read cache entry for the public runtime surface of this module. */
|
|
24
|
-
export declare function getSettingsReadCacheEntry<T>(pmRoot:
|
|
24
|
+
export declare function getSettingsReadCacheEntry<T>(pmRoot:string):SettingsReadCacheEntry<T> | undefined;
|
|
25
25
|
/** Implements set settings read cache entry for the public runtime surface of this module. */
|
|
26
|
-
export declare function setSettingsReadCacheEntry<T>(pmRoot:
|
|
26
|
+
export declare function setSettingsReadCacheEntry<T>(pmRoot:string,entry:SettingsReadCacheEntry<T>):void;
|
|
27
27
|
/** Implements clear settings read cache for the public runtime surface of this module. */
|
|
28
|
-
export declare function clearSettingsReadCache(pmRoot?:
|
|
28
|
+
export declare function clearSettingsReadCache(pmRoot?:string):void;
|