@unbrained/pm-cli 2026.9.7 → 2026.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/pm-developer/SKILL.md +12 -4
- package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
- package/.agents/skills/pm-extensions/SKILL.md +6 -0
- package/.agents/skills/pm-sdk/SKILL.md +11 -2
- package/.agents/skills/pm-user/SKILL.md +7 -2
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +231 -182
- package/dist/cli/after-command-context-usage.js +1 -48
- package/dist/cli/argv-utils.js +1 -40
- package/dist/cli/bootstrap-args.js +1 -9
- package/dist/cli/bundle-integrity.js +2 -110
- package/dist/cli/commander-usage.js +11 -771
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/aggregate.js +1 -5
- package/dist/cli/commands/append.js +1 -5
- package/dist/cli/commands/claim.js +1 -5
- package/dist/cli/commands/close-many.js +1 -5
- package/dist/cli/commands/close.js +1 -9
- package/dist/cli/commands/comments.js +1 -5
- package/dist/cli/commands/config.js +1 -9
- package/dist/cli/commands/context.js +1 -9
- package/dist/cli/commands/contracts.js +1 -5
- package/dist/cli/commands/copy.js +1 -9
- package/dist/cli/commands/create.js +1 -9
- package/dist/cli/commands/delete.js +1 -9
- package/dist/cli/commands/deps.js +1 -9
- package/dist/cli/commands/docs.js +1 -9
- package/dist/cli/commands/duplicates.js +1 -9
- package/dist/cli/commands/eval.js +1 -9
- package/dist/cli/commands/extension/describe.js +1 -5
- package/dist/cli/commands/extension/scaffold.js +1 -5
- package/dist/cli/commands/extension/shared.js +1 -5
- package/dist/cli/commands/extension.js +1 -9
- package/dist/cli/commands/files.js +1 -9
- package/dist/cli/commands/focus.js +1 -9
- package/dist/cli/commands/gc.js +1 -9
- package/dist/cli/commands/get.js +1 -9
- package/dist/cli/commands/graph.js +1 -10
- package/dist/cli/commands/health.js +1 -9
- package/dist/cli/commands/history-compact.js +1 -10
- package/dist/cli/commands/history-redact.js +1 -11
- package/dist/cli/commands/history-repair.js +1 -10
- package/dist/cli/commands/history.js +1 -5
- package/dist/cli/commands/index.js +1 -58
- package/dist/cli/commands/init-agent-guidance.js +1 -9
- package/dist/cli/commands/init.js +1 -9
- package/dist/cli/commands/learnings.js +1 -5
- package/dist/cli/commands/lifecycle-transitions.js +1 -5
- package/dist/cli/commands/list.js +1 -9
- package/dist/cli/commands/merge.js +1 -11
- package/dist/cli/commands/next.js +1 -9
- package/dist/cli/commands/notes.js +1 -5
- package/dist/cli/commands/plan.js +1 -9
- package/dist/cli/commands/profile.js +1 -9
- package/dist/cli/commands/restore.js +1 -9
- package/dist/cli/commands/scheduling-shortcuts.js +1 -9
- package/dist/cli/commands/schema.js +1 -10
- package/dist/cli/commands/search.js +1 -9
- package/dist/cli/commands/stats.js +1 -9
- package/dist/cli/commands/telemetry.js +1 -9
- package/dist/cli/commands/test-all.js +1 -9
- package/dist/cli/commands/test-runs.js +1 -9
- package/dist/cli/commands/test.js +1 -9
- package/dist/cli/commands/update-many.js +1 -5
- package/dist/cli/commands/update.js +1 -9
- package/dist/cli/commands/upgrade.js +1 -5
- package/dist/cli/commands/validate.js +1 -15
- package/dist/cli/context-intent-invocation.js +1 -20
- package/dist/cli/description-stdin.js +1 -17
- package/dist/cli/error-guidance.js +1 -1353
- package/dist/cli/extension-command-help.js +5 -636
- package/dist/cli/extension-command-options.js +1 -427
- package/dist/cli/extension-recovery.js +1 -126
- package/dist/cli/help-content.js +2 -1001
- package/dist/cli/help-json-payload.js +4 -570
- package/dist/cli/main.d.ts +4 -0
- package/dist/cli/main.js +5 -2573
- package/dist/cli/migration-gates.js +1 -289
- package/dist/cli/public.js +1 -20
- package/dist/cli/register-annotations.js +1 -270
- package/dist/cli/register-assurance.js +1 -62
- package/dist/cli/register-files-lookup.js +1 -56
- package/dist/cli/register-history-activity.d.ts +8 -0
- package/dist/cli/register-history-activity.js +2 -0
- package/dist/cli/register-history-author.js +1 -38
- package/dist/cli/register-history-maintenance.d.ts +9 -0
- package/dist/cli/register-history-maintenance.js +2 -0
- package/dist/cli/register-list-query.js +10 -943
- package/dist/cli/register-mutation-options.js +1 -9
- package/dist/cli/register-mutation.d.ts +0 -5
- package/dist/cli/register-mutation.js +19 -1893
- package/dist/cli/register-operations.js +1 -920
- package/dist/cli/register-setup.js +1 -716
- package/dist/cli/register-structured-mutation.js +1 -196
- package/dist/cli/registration-helpers.js +1 -5
- package/dist/cli/runtime-compatibility-boundary.js +4 -42
- package/dist/cli/schema-registration-helpers.js +1 -73
- package/dist/cli/search-refresh.js +1 -13
- package/dist/cli/stats-analytics-json.js +1 -68
- package/dist/cli/telemetry-flush.js +1 -10
- package/dist/cli-bundle/bundle-manifest.json +164 -156
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-3IPRM75M.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +2 -0
- package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +29 -0
- package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ECBLPN7B.js +3 -0
- package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +235 -0
- package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +2 -0
- package/dist/cli-bundle/chunks/chunk-L5RCDKQ2.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-OHNLSGGV.js +79 -0
- package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-BAX2BYUW.js → chunk-XZ6T7YPP.js} +256 -150
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-Z3XVXUVF.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-UIHRCS6D.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-PERI45EM.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-5FHTCOHS.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7N6DOREF.js +26 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-7PC4R5QB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-BUCJUZVG.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +10 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-PNKIANFZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-QQQ4SAUO.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +9 -0
- package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-YJUXGS57.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-ZTCE4UO6.js +58 -0
- package/dist/cli-bundle/main.js +20 -20
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +2 -2
- package/dist/cli-bundle/sdk-core.js +37 -37
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +11 -11
- package/dist/cli.js +1 -104
- package/dist/core/checkpoint/checkpoint-gc.js +1 -169
- package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
- package/dist/core/config/nested-settings.js +1 -534
- package/dist/core/config/positional-value.js +1 -109
- package/dist/core/diagnostics/remediation.js +1 -506
- package/dist/core/extensions/activation-summary-markdown.js +2 -145
- package/dist/core/extensions/activation-summary.js +1 -92
- package/dist/core/extensions/activation-transaction.js +1 -46
- package/dist/core/extensions/capability-usage.js +1 -173
- package/dist/core/extensions/command-hook-context.js +1 -13
- package/dist/core/extensions/command-metadata-contract.js +1 -22
- package/dist/core/extensions/command-visibility-tier.js +1 -29
- package/dist/core/extensions/contribution-inventory.js +1 -173
- package/dist/core/extensions/exporter-output-contract.js +1 -66
- package/dist/core/extensions/extension-candidate.js +1 -18
- package/dist/core/extensions/extension-capability-aliases.js +1 -158
- package/dist/core/extensions/extension-hook-runtime.js +1 -699
- package/dist/core/extensions/extension-policy.js +1 -599
- package/dist/core/extensions/extension-registries.js +1 -62
- package/dist/core/extensions/extension-runtime-helpers.js +1 -33
- package/dist/core/extensions/extension-types.js +1 -102
- package/dist/core/extensions/flag-definition-validation.js +1 -52
- package/dist/core/extensions/flag-value-types.js +1 -64
- package/dist/core/extensions/index.js +1 -526
- package/dist/core/extensions/item-field-types.js +1 -39
- package/dist/core/extensions/item-fields.js +1 -261
- package/dist/core/extensions/loader.js +1 -2223
- package/dist/core/extensions/manifest-schema.js +1 -69
- package/dist/core/extensions/module-graph-snapshot.js +1 -33
- package/dist/core/extensions/preflight-ownership.js +1 -41
- package/dist/core/extensions/registration-validation.js +1 -82
- package/dist/core/extensions/registration-values.js +1 -209
- package/dist/core/extensions/reserved-host-flags.js +1 -36
- package/dist/core/extensions/runtime-registrations.js +1 -67
- package/dist/core/extensions/service-ownership.js +1 -19
- package/dist/core/extensions/version-compat.js +1 -216
- package/dist/core/fs/fs-utils.js +2 -158
- package/dist/core/fs/host-environment-errors.js +1 -141
- package/dist/core/fs/index.js +1 -9
- package/dist/core/fs/path-utils.js +1 -17
- package/dist/core/governance/content-fields.js +1 -160
- package/dist/core/governance/issue-codes.js +1 -151
- package/dist/core/governance/metadata-coverage.js +1 -358
- package/dist/core/history/drift-cache.js +3 -72
- package/dist/core/history/drift-scan.js +1 -342
- package/dist/core/history/event-classification.js +1 -109
- package/dist/core/history/event-index.js +8 -784
- package/dist/core/history/history-compact-bulk.js +1 -104
- package/dist/core/history/history-diff.js +1 -158
- package/dist/core/history/history-rewrite.d.ts +6 -1
- package/dist/core/history/history-rewrite.js +1 -107
- package/dist/core/history/history-storage-stats.js +1 -102
- package/dist/core/history/history-stream-policy.js +1 -62
- package/dist/core/history/history.js +2 -617
- package/dist/core/history/identity.js +1 -30
- package/dist/core/history/index.js +1 -9
- package/dist/core/history/projection.js +1 -196
- package/dist/core/history/read.d.ts +9 -0
- package/dist/core/history/read.js +1 -57
- package/dist/core/history/replay.js +2 -439
- package/dist/core/history/version-address.js +1 -32
- package/dist/core/history/workspace-history.js +2 -433
- package/dist/core/io/body-file.js +1 -62
- package/dist/core/io/bulk-ids-input.js +1 -112
- package/dist/core/item/actionability.js +1 -327
- package/dist/core/item/dependency-reference.js +1 -20
- package/dist/core/item/id.js +1 -112
- package/dist/core/item/index.js +1 -12
- package/dist/core/item/item-format-version.js +1 -78
- package/dist/core/item/item-format.js +5 -1473
- package/dist/core/item/item-record.js +1 -23
- package/dist/core/item/item-type-definition.js +1 -133
- package/dist/core/item/parent-reference-policy.js +1 -57
- package/dist/core/item/parse.js +2 -603
- package/dist/core/item/plan-lifecycle.js +1 -19
- package/dist/core/item/priority.js +1 -61
- package/dist/core/item/sprint-release-format.js +1 -38
- package/dist/core/item/status-filter.js +1 -115
- package/dist/core/item/status.js +1 -43
- package/dist/core/item/toon-decode.js +1 -29
- package/dist/core/item/type-registry.js +1 -715
- package/dist/core/item/type-synonyms.js +1 -38
- package/dist/core/lock/index.js +1 -9
- package/dist/core/lock/lock-gc.js +1 -240
- package/dist/core/lock/lock.js +3 -590
- package/dist/core/output/mutation-projection.js +1 -217
- package/dist/core/output/output-control.js +1 -25
- package/dist/core/output/output.js +11 -494
- package/dist/core/output/query-summary.js +1 -58
- package/dist/core/output/tabular.js +1 -77
- package/dist/core/packages/manifest.js +1 -244
- package/dist/core/packages/root.js +1 -84
- package/dist/core/policy/workflow-policy-schema.d.ts +312 -0
- package/dist/core/policy/workflow-policy-schema.js +2 -0
- package/dist/core/policy/workflow-policy-store.d.ts +24 -0
- package/dist/core/policy/workflow-policy-store.js +2 -0
- package/dist/core/policy/workflow-policy.d.ts +139 -0
- package/dist/core/policy/workflow-policy.js +2 -0
- package/dist/core/profile/profile-describe.js +1 -83
- package/dist/core/profile/profile-lint.js +1 -415
- package/dist/core/profile/profile-plan.js +0 -0
- package/dist/core/profile/profile-presets.js +1 -370
- package/dist/core/reproducibility/context.js +1 -82
- package/dist/core/schema/fields-file.js +2 -288
- package/dist/core/schema/item-types-file.js +2 -296
- package/dist/core/schema/runtime-field-filters.js +1 -49
- package/dist/core/schema/runtime-field-values.js +1 -313
- package/dist/core/schema/runtime-schema.js +2 -826
- package/dist/core/schema/status-defs-file.js +2 -227
- package/dist/core/schema/status-token.js +1 -31
- package/dist/core/schema/type-inference.js +1 -95
- package/dist/core/schema/type-presets.js +1 -87
- package/dist/core/schema/type-workflows.js +1 -104
- package/dist/core/search/background-refresh.js +2 -286
- package/dist/core/search/bm25.js +1 -146
- package/dist/core/search/cache.js +2 -534
- package/dist/core/search/corpus.js +1 -311
- package/dist/core/search/embedding-batches.js +1 -163
- package/dist/core/search/eval.js +1 -225
- package/dist/core/search/http-client.js +1 -75
- package/dist/core/search/providers.js +1 -242
- package/dist/core/search/relevance.js +1 -244
- package/dist/core/search/semantic-defaults.js +1 -199
- package/dist/core/search/staleness.js +1 -30
- package/dist/core/search/vector-stores.js +2 -664
- package/dist/core/search/vectorization-metadata.js +1 -81
- package/dist/core/sentry/helpers.js +1 -272
- package/dist/core/sentry/instrument.js +1 -387
- package/dist/core/session/session-state.js +1 -260
- package/dist/core/shared/agent-session-context.js +1 -133
- package/dist/core/shared/author.js +1 -1172
- package/dist/core/shared/command-types.js +1 -4
- package/dist/core/shared/conflict-markers.js +1 -31
- package/dist/core/shared/constants.js +1 -405
- package/dist/core/shared/errors.js +1 -20
- package/dist/core/shared/html-entity-decode.js +1 -131
- package/dist/core/shared/index.js +1 -12
- package/dist/core/shared/item-metadata-contract.js +1 -89
- package/dist/core/shared/lazy-module.js +1 -16
- package/dist/core/shared/levenshtein.js +1 -61
- package/dist/core/shared/memo.js +1 -19
- package/dist/core/shared/numeric-parsers.js +1 -20
- package/dist/core/shared/option-alias-visibility.js +1 -67
- package/dist/core/shared/primitives.js +1 -127
- package/dist/core/shared/serial-queue.js +1 -79
- package/dist/core/shared/serialization.js +1 -210
- package/dist/core/shared/split-comma-list.js +1 -30
- package/dist/core/shared/text-normalization.js +1 -38
- package/dist/core/shared/time.js +1 -306
- package/dist/core/store/index.js +1 -12
- package/dist/core/store/item-format-migration.js +1 -125
- package/dist/core/store/item-metadata-cache.js +1 -1116
- package/dist/core/store/item-metadata-query-index.js +9 -394
- package/dist/core/store/item-metadata-read-work.js +1 -43
- package/dist/core/store/item-store.js +1 -693
- package/dist/core/store/paths.d.ts +1 -1
- package/dist/core/store/paths.js +1 -214
- package/dist/core/store/settings-read-cache.js +1 -85
- package/dist/core/store/settings-validator.d.ts +1 -0
- package/dist/core/store/settings-validator.js +1 -421
- package/dist/core/store/settings.js +3 -1309
- package/dist/core/store/tracker-preflight.js +1 -141
- package/dist/core/telemetry/consent.js +5 -108
- package/dist/core/telemetry/observability.js +1 -246
- package/dist/core/telemetry/runtime.js +4 -1988
- package/dist/core/test/background-runs.js +4 -945
- package/dist/core/test/item-test-run-tracking.js +1 -63
- package/dist/core/test/run-selectors.js +1 -120
- package/dist/core/validate/estimate-defaults.js +1 -89
- package/dist/core/validate/fix-planning.js +1 -189
- package/dist/core/validate/linked-artifact-reference.js +1 -36
- package/dist/core/validate/missing-by-type.js +1 -34
- package/dist/core/validate/missing-link-owners.js +1 -95
- package/dist/core/validate/stale-file-classification.js +1 -82
- package/dist/mcp/http-server.js +5 -448
- package/dist/mcp/legacy-adapter.js +1 -77
- package/dist/mcp/runtime-capabilities.js +1 -200
- package/dist/mcp/server.js +4 -1233
- package/dist/mcp/tool-definitions.js +1 -804
- package/dist/sdk/actionability.js +1 -13
- package/dist/sdk/agent/closed-domain-contracts.js +1 -161
- package/dist/sdk/agent/command-recovery.js +1 -59
- package/dist/sdk/agent/command-suggestions.js +1 -66
- package/dist/sdk/agent/create-option-policy.js +1 -31
- package/dist/sdk/agent/identity-config.js +1 -106
- package/dist/sdk/agent/item-addressing.js +1 -207
- package/dist/sdk/agent/refusal-closure-census.js +1 -151
- package/dist/sdk/agent/refusal-closure.js +1 -133
- package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
- package/dist/sdk/agent/refusal-reachability.js +1 -593
- package/dist/sdk/agent/subcommand-recovery.js +1 -83
- package/dist/sdk/agent/task-transcript-contracts.js +1 -197
- package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
- package/dist/sdk/agent-capability-contracts.js +1 -428
- package/dist/sdk/agent-session-context.js +1 -9
- package/dist/sdk/annotations.js +1 -448
- package/dist/sdk/author-attribution.js +1 -468
- package/dist/sdk/authoring.js +1 -20
- package/dist/sdk/cli-bootstrap.js +1 -838
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
- package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
- package/dist/sdk/cli-contracts/command-aliases.js +1 -107
- package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
- package/dist/sdk/cli-contracts/commander-types.js +1 -159
- package/dist/sdk/cli-contracts/completeness.js +1 -393
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
- package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
- package/dist/sdk/cli-contracts/string-lists.js +1 -16
- package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
- package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
- package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -17
- package/dist/sdk/cli-program.js +1 -49
- package/dist/sdk/command-line.d.ts +2 -5
- package/dist/sdk/command-line.js +1 -78
- package/dist/sdk/comments.js +1 -133
- package/dist/sdk/compile-cache.js +1 -73
- package/dist/sdk/completion.js +174 -839
- package/dist/sdk/compose.js +1 -1090
- package/dist/sdk/config.js +1 -1204
- package/dist/sdk/context/recency.js +1 -33
- package/dist/sdk/context/semantic-session-attribution.js +1 -82
- package/dist/sdk/context/usage-egress.js +1 -29
- package/dist/sdk/context/usage-ledger.js +3 -185
- package/dist/sdk/context-intent-contracts.js +1 -709
- package/dist/sdk/context-intent-runtime.js +1 -115
- package/dist/sdk/context-packing.js +1 -218
- package/dist/sdk/context-relevance.js +1 -503
- package/dist/sdk/context-signal-store.js +2 -426
- package/dist/sdk/context-usage.js +1 -367
- package/dist/sdk/contracts.js +1 -23
- package/dist/sdk/core-governance.js +1 -14
- package/dist/sdk/core.js +1 -14
- package/dist/sdk/corpus-shape.js +1 -401
- package/dist/sdk/define.js +1 -220
- package/dist/sdk/dependencies.js +1 -718
- package/dist/sdk/dependency-flag-validation.js +1 -156
- package/dist/sdk/dependency-provenance.js +1 -135
- package/dist/sdk/docs.js +1 -14
- package/dist/sdk/duplicates.js +1 -40
- package/dist/sdk/environment/agent-environment.js +1 -466
- package/dist/sdk/environment/host-environment-errors.js +1 -8
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
- package/dist/sdk/environment/source-context.js +1 -28
- package/dist/sdk/environment/tracker-preflight.js +1 -9
- package/dist/sdk/error-code-catalog.js +1 -153
- package/dist/sdk/error-runtime.js +1 -58
- package/dist/sdk/errors.js +1 -58
- package/dist/sdk/eval.js +1 -190
- package/dist/sdk/extension/author-manifest.js +1 -92
- package/dist/sdk/extension/bundled-catalog.js +1 -332
- package/dist/sdk/extension/concurrency.js +1 -25
- package/dist/sdk/extension/copy-scope.d.ts +2 -0
- package/dist/sdk/extension/copy-scope.js +2 -0
- package/dist/sdk/extension/custom-field-collisions.js +1 -30
- package/dist/sdk/extension/describe.js +3 -189
- package/dist/sdk/extension/doctor.js +1 -606
- package/dist/sdk/extension/install-plan.d.ts +69 -0
- package/dist/sdk/extension/install-plan.js +2 -0
- package/dist/sdk/extension/install-receipts.d.ts +7 -0
- package/dist/sdk/extension/install-receipts.js +2 -0
- package/dist/sdk/extension/install-runtime.js +3 -313
- package/dist/sdk/extension/install-snapshot.js +1 -66
- package/dist/sdk/extension/install-sources.js +5 -1057
- package/dist/sdk/extension/managed-state.js +2 -252
- package/dist/sdk/extension/migrations.js +2 -174
- package/dist/sdk/extension/output-ownership.js +1 -25
- package/dist/sdk/extension/runtime-summary.js +1 -18
- package/dist/sdk/extension/scaffold.js +4 -2308
- package/dist/sdk/extension/shared.js +1 -147
- package/dist/sdk/extension/source-resolution.js +1 -65
- package/dist/sdk/extension/update-check.js +1 -67
- package/dist/sdk/extension-command-context.js +1 -44
- package/dist/sdk/extension-contracts.js +1 -73
- package/dist/sdk/extension.d.ts +7 -2
- package/dist/sdk/extension.js +1 -2196
- package/dist/sdk/files.js +1 -535
- package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
- package/dist/sdk/flag-invocation-contracts.js +1 -344
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
- package/dist/sdk/generated-error-code-catalog.js +1 -16
- package/dist/sdk/governance/assurance-action-contracts.js +1 -4
- package/dist/sdk/governance/assurance-action.js +1 -411
- package/dist/sdk/governance/assurance-limits.js +1 -10
- package/dist/sdk/governance/assurance-mutation-error.js +1 -81
- package/dist/sdk/governance/assurance-presets.js +1 -135
- package/dist/sdk/governance/assurance-runtime.js +1 -238
- package/dist/sdk/governance/assurance.js +4 -1182
- package/dist/sdk/governance/boundary-fixtures.js +1 -200
- package/dist/sdk/governance/coverage-assurance.js +1 -60
- package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
- package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
- package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
- package/dist/sdk/governance/defect-recurrence.js +1 -623
- package/dist/sdk/governance/extension-host-version.js +1 -115
- package/dist/sdk/governance/gc.js +1 -368
- package/dist/sdk/governance/health.js +1 -2367
- package/dist/sdk/governance/hierarchy-validation.js +1 -108
- package/dist/sdk/governance/linked-file-report.js +1 -71
- package/dist/sdk/governance/merge-receipt-history.js +1 -206
- package/dist/sdk/governance/provenance-health.js +1 -282
- package/dist/sdk/governance/reindex.js +4 -761
- package/dist/sdk/governance/stale-work.js +1 -82
- package/dist/sdk/governance/status-role-diagnostics.js +1 -35
- package/dist/sdk/governance/storage-integrity.js +1 -280
- package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
- package/dist/sdk/governance/upgrade.js +2 -327
- package/dist/sdk/governance/validate-history-drift.js +1 -81
- package/dist/sdk/governance/validate-item-reader.js +1 -17
- package/dist/sdk/governance/validate-normalization.js +1 -36
- package/dist/sdk/governance/validate.d.ts +3 -1
- package/dist/sdk/governance/validate.js +1 -2261
- package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
- package/dist/sdk/governance/workflow-completeness.js +2 -0
- package/dist/sdk/governance/workflow-policy.d.ts +47 -0
- package/dist/sdk/governance/workflow-policy.js +4 -0
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +2 -0
- package/dist/sdk/governance.js +1 -31
- package/dist/sdk/graph/adapter.js +1 -181
- package/dist/sdk/graph/analytics.js +1 -474
- package/dist/sdk/graph/assembly.js +1 -377
- package/dist/sdk/graph/cache.js +1 -160
- package/dist/sdk/graph/centrality.js +1 -258
- package/dist/sdk/graph/conformance.js +1 -130
- package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
- package/dist/sdk/graph/deadline-scheduling.js +2 -0
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +1 -361
- package/dist/sdk/graph/governance-contracts.js +1 -34
- package/dist/sdk/graph/governance.d.ts +13 -1
- package/dist/sdk/graph/governance.js +1 -735
- package/dist/sdk/graph/hierarchy-integrity.js +1 -310
- package/dist/sdk/graph/index.d.ts +3 -2
- package/dist/sdk/graph/index.js +1 -26
- package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
- package/dist/sdk/graph/lifecycle-coverage.js +2 -0
- package/dist/sdk/graph/mutation-advisory.js +1 -176
- package/dist/sdk/graph/remediation.js +1 -197
- package/dist/sdk/graph/run.d.ts +15 -1
- package/dist/sdk/graph/run.js +1 -768
- package/dist/sdk/graph/scheduling.js +1 -124
- package/dist/sdk/graph/traversal.js +1 -284
- package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
- package/dist/sdk/graph.js +1 -15
- package/dist/sdk/guide-topics.js +1 -707
- package/dist/sdk/guide.js +1 -279
- package/dist/sdk/history/maintenance.d.ts +71 -0
- package/dist/sdk/history/maintenance.js +2 -0
- package/dist/sdk/history/salvage.js +2 -247
- package/dist/sdk/history/subject.d.ts +19 -0
- package/dist/sdk/history/subject.js +2 -0
- package/dist/sdk/history-analytics.js +1 -282
- package/dist/sdk/history-compact.js +1 -527
- package/dist/sdk/history-mcp.js +1 -68
- package/dist/sdk/history-provenance.js +1 -182
- package/dist/sdk/history-read.js +1 -96
- package/dist/sdk/history-redact.d.ts +1 -14
- package/dist/sdk/history-redact.js +1 -643
- package/dist/sdk/history-repair.d.ts +5 -0
- package/dist/sdk/history-repair.js +1 -657
- package/dist/sdk/improvement-ledger-validation.js +1 -62
- package/dist/sdk/improvement-ledger.js +2 -257
- package/dist/sdk/index.d.ts +4 -1
- package/dist/sdk/index.js +1 -183
- package/dist/sdk/init-agent-guidance.js +2 -496
- package/dist/sdk/init.js +2 -820
- package/dist/sdk/invocation-author.js +1 -39
- package/dist/sdk/item-children.js +1 -90
- package/dist/sdk/item-metadata-index.js +1 -15
- package/dist/sdk/item-schedule.js +1 -27
- package/dist/sdk/item-transaction.js +1 -396
- package/dist/sdk/learnings.js +1 -29
- package/dist/sdk/lifecycle/append.js +2 -53
- package/dist/sdk/lifecycle/claim.d.ts +2 -0
- package/dist/sdk/lifecycle/claim.js +1 -242
- package/dist/sdk/lifecycle/close-many.js +1 -438
- package/dist/sdk/lifecycle/close.js +1 -468
- package/dist/sdk/lifecycle/copy.js +1 -212
- package/dist/sdk/lifecycle/create.js +1 -1949
- package/dist/sdk/lifecycle/delete.js +1 -45
- package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
- package/dist/sdk/lifecycle/focus.js +1 -91
- package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
- package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
- package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
- package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
- package/dist/sdk/lifecycle/mcp-actions.js +1 -51
- package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
- package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
- package/dist/sdk/lifecycle/plan.js +1 -1606
- package/dist/sdk/lifecycle/recurrence-parsers.d.ts +1 -1
- package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
- package/dist/sdk/lifecycle/reopen.js +1 -68
- package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
- package/dist/sdk/lifecycle/restore.d.ts +1 -0
- package/dist/sdk/lifecycle/restore.js +1 -330
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
- package/dist/sdk/lifecycle/update-many.js +1 -861
- package/dist/sdk/lifecycle/update.js +1 -2136
- package/dist/sdk/lifecycle-completion.js +1 -92
- package/dist/sdk/lifecycle-policy.js +1 -120
- package/dist/sdk/linked-artifacts.js +1 -530
- package/dist/sdk/mcp/apps.js +4 -133
- package/dist/sdk/mcp/authorization.js +1 -404
- package/dist/sdk/mcp/discovery.js +1 -494
- package/dist/sdk/mcp/interactions.js +1 -336
- package/dist/sdk/mcp/protocol.d.ts +7 -0
- package/dist/sdk/mcp/protocol.js +1 -184
- package/dist/sdk/mcp/skills.js +1 -389
- package/dist/sdk/mcp/subscriptions.js +1 -211
- package/dist/sdk/mcp/tasks.js +2 -430
- package/dist/sdk/mcp/transport.js +1 -260
- package/dist/sdk/merge/abandoned-receipts.js +1 -46
- package/dist/sdk/merge/driver.js +1 -212
- package/dist/sdk/merge/index.js +1 -16
- package/dist/sdk/merge/install.js +3 -561
- package/dist/sdk/merge/receipt-file-boundary.js +1 -46
- package/dist/sdk/merge/receipt-operation.js +1 -96
- package/dist/sdk/merge/receipt-schema.js +1 -397
- package/dist/sdk/merge/receipts.js +4 -525
- package/dist/sdk/merge/reconcile.js +1 -352
- package/dist/sdk/merge/three-way.js +3 -775
- package/dist/sdk/merge.js +1 -10
- package/dist/sdk/mutation-events.js +1 -292
- package/dist/sdk/mutation-guard.js +1 -216
- package/dist/sdk/notes.js +1 -139
- package/dist/sdk/output-contracts.js +1 -172
- package/dist/sdk/output-projection.js +1 -430
- package/dist/sdk/output-token-accounting.js +1 -140
- package/dist/sdk/output.js +1 -64
- package/dist/sdk/ownership-source.js +1 -21
- package/dist/sdk/package-import-adapters.js +1 -442
- package/dist/sdk/package-migrations.js +1 -20
- package/dist/sdk/package-runtime-options.js +1 -80
- package/dist/sdk/pagination.js +1 -162
- package/dist/sdk/profile.js +1 -454
- package/dist/sdk/provenance.js +1 -258
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/activity.js +1 -401
- package/dist/sdk/query/aggregate.d.ts +16 -0
- package/dist/sdk/query/aggregate.js +1 -390
- package/dist/sdk/query/calendar.js +1 -964
- package/dist/sdk/query/complete-list.js +1 -215
- package/dist/sdk/query/context.js +1 -1702
- package/dist/sdk/query/duplicate-candidates.js +1 -70
- package/dist/sdk/query/get.js +1 -450
- package/dist/sdk/query/history.js +1 -186
- package/dist/sdk/query/item-filter-options.js +1 -9
- package/dist/sdk/query/light-metadata.js +1 -18
- package/dist/sdk/query/list-filter-shared.js +1 -81
- package/dist/sdk/query/list.js +1 -1304
- package/dist/sdk/query/multi-value-filters.js +1 -78
- package/dist/sdk/query/next.js +1 -513
- package/dist/sdk/query/parsers.js +1 -44
- package/dist/sdk/query/projection-contracts.js +1 -184
- package/dist/sdk/query/search-contracts.d.ts +27 -0
- package/dist/sdk/query/search-contracts.js +1 -230
- package/dist/sdk/query/search-pagination.js +1 -35
- package/dist/sdk/query/search-rendering.js +1 -105
- package/dist/sdk/query/search.d.ts +6 -4
- package/dist/sdk/query/search.js +2 -1987
- package/dist/sdk/query.js +1 -35
- package/dist/sdk/read-output/continuation.js +1 -194
- package/dist/sdk/read-output-budget.js +1 -135
- package/dist/sdk/read-output-contracts.d.ts +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1225
- package/dist/sdk/read-output-rows.js +1 -186
- package/dist/sdk/read-output-session.js +1 -208
- package/dist/sdk/relationship-analytics.js +1 -410
- package/dist/sdk/relationship-context.js +1 -284
- package/dist/sdk/relationship-history.js +4 -519
- package/dist/sdk/relationship-kinds/contract.js +1 -22
- package/dist/sdk/relationship-migration.js +1 -77
- package/dist/sdk/relationships.js +1 -579
- package/dist/sdk/reproducibility/process.js +1 -87
- package/dist/sdk/runtime-action-aliases.js +1 -59
- package/dist/sdk/runtime-extended-actions.js +1 -177
- package/dist/sdk/runtime-input.js +1 -614
- package/dist/sdk/runtime-primitives.js +1 -84
- package/dist/sdk/runtime-public-contracts.d.ts +2 -1
- package/dist/sdk/runtime-public-contracts.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- package/dist/sdk/runtime.d.ts +4 -0
- package/dist/sdk/runtime.js +1 -1928
- package/dist/sdk/scheduling-shortcuts.js +1 -63
- package/dist/sdk/schema-migration.js +3 -856
- package/dist/sdk/schema.d.ts +2 -1
- package/dist/sdk/schema.js +1 -1376
- package/dist/sdk/search-refresh-worker.js +1 -18
- package/dist/sdk/similarity-scoring.js +1 -53
- package/dist/sdk/similarity.js +1 -326
- package/dist/sdk/start-task-status.js +1 -14
- package/dist/sdk/stats.js +1 -270
- package/dist/sdk/structured-mutations.js +1 -580
- package/dist/sdk/telemetry-flush.js +1 -13
- package/dist/sdk/telemetry.js +1 -405
- package/dist/sdk/templates.js +2 -292
- package/dist/sdk/test/batch.js +2 -509
- package/dist/sdk/test/entry.js +1 -70
- package/dist/sdk/test/execution.js +6 -2211
- package/dist/sdk/test/linked-command-detection.js +1 -546
- package/dist/sdk/test/measurements.js +1 -91
- package/dist/sdk/test/parsers.js +1 -545
- package/dist/sdk/test/runs.js +1 -193
- package/dist/sdk/test/trust.js +2 -206
- package/dist/sdk/testing.js +4 -1391
- package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
- package/dist/sdk/traceability/source-traceability.js +1 -292
- package/dist/sdk/tracker-root-discovery.js +1 -9
- package/dist/sdk/workspace-contracts-cache.js +1 -28
- package/dist/sdk/workspace-contracts.js +1 -33
- package/dist/sdk/workspace-memory.js +2 -318
- package/dist/sdk/workspace-recipe.js +1 -71
- package/dist/sdk/workspace-snapshot.js +4 -613
- package/dist/sdk/workspace-transaction-gc.js +1 -149
- package/dist/sdk/workspace-transaction.js +2 -363
- package/dist/sdk/workspace.js +3 -127
- package/dist/types/index.js +1 -9
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/COMMANDS.md +10 -0
- package/docs/CONFIGURATION.md +12 -1
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
- package/docs/EXTENSIONS.md +1 -0
- package/docs/HISTORY_MAINTENANCE.md +125 -0
- package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
- package/docs/PACKAGE_EVIDENCE.md +92 -0
- package/docs/PLANNING_MEASUREMENTS.md +183 -0
- package/docs/README.md +4 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +33 -0
- package/docs/WORKFLOW_POLICIES.md +129 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +7 -7
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
- package/marketplace.json +2 -2
- package/package.json +5 -5
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/scripts/finalize-build.mjs +45 -3
- package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- package/dist/cli-bundle/chunks/chunk-JX4DH4WC.js +0 -3
- package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
- package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
- package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
- package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-I5W3KMGB.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
- package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
- package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
- package/dist/cli-bundle/focused-chunks/chunk-PEFABF7E.js +0 -26
- package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
- package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
- package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
|
@@ -1,261 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/mcp/transport
|
|
3
|
-
*
|
|
4
|
-
* Implements MCP 2026-07-28 Streamable HTTP header encoding, schema-derived
|
|
5
|
-
* custom header extraction, and body/header parity validation.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5ffe7128-0fbb-59af-89ef-74d5d799a00d")}catch(e){}}();
|
|
9
|
-
import { PM_MCP_ERROR_CODES, PM_MCP_PROTOCOL_VERSION, PmMcpProtocolError, isMcpRecord, resolveMcpRequestContext, } from "./protocol.js";
|
|
10
|
-
const BASE64_SENTINEL_PATTERN = /^=\?base64\?([A-Za-z0-9+/]*={0,2})\?=$/u;
|
|
11
|
-
const HEADER_NAME_TOKEN_PATTERN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u;
|
|
12
|
-
const PLAIN_HEADER_VALUE_PATTERN = /^[\t\x20-\x7E]*$/u;
|
|
13
|
-
const REQUIRED_NAME_METHODS = new Set([
|
|
14
|
-
"prompts/get",
|
|
15
|
-
"resources/read",
|
|
16
|
-
"tools/call",
|
|
17
|
-
]);
|
|
18
|
-
function normalizedHeaders(headers) {
|
|
19
|
-
const normalized = new Map();
|
|
20
|
-
for (const [name, value] of Object.entries(headers)) {
|
|
21
|
-
if (value === undefined)
|
|
22
|
-
continue;
|
|
23
|
-
const entry = typeof value === "string" ? value : value.join(", ");
|
|
24
|
-
normalized.set(name.toLowerCase(), entry);
|
|
25
|
-
}
|
|
26
|
-
return normalized;
|
|
27
|
-
}
|
|
28
|
-
function failHeader(message, header) {
|
|
29
|
-
throw new PmMcpProtocolError(message, PM_MCP_ERROR_CODES.headerMismatch, {
|
|
30
|
-
header,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
/** Encode a name or primitive parameter into the protocol's safe header form. */
|
|
34
|
-
export function encodeMcpHttpHeaderValue(value) {
|
|
35
|
-
const serialized = typeof value === "boolean" ? String(value).toLowerCase() : String(value);
|
|
36
|
-
if (serialized.length > 0 &&
|
|
37
|
-
serialized.trim() === serialized &&
|
|
38
|
-
PLAIN_HEADER_VALUE_PATTERN.test(serialized) &&
|
|
39
|
-
!BASE64_SENTINEL_PATTERN.test(serialized)) {
|
|
40
|
-
return serialized;
|
|
41
|
-
}
|
|
42
|
-
return `=?base64?${Buffer.from(serialized, "utf8").toString("base64")}?=`;
|
|
43
|
-
}
|
|
44
|
-
/** Decode and validate a mirrored MCP header value. */
|
|
45
|
-
export function decodeMcpHttpHeaderValue(value, header) {
|
|
46
|
-
const sentinel = BASE64_SENTINEL_PATTERN.exec(value);
|
|
47
|
-
if (sentinel) {
|
|
48
|
-
const encoded = sentinel[1];
|
|
49
|
-
const decoded = Buffer.from(encoded, "base64");
|
|
50
|
-
if (decoded.toString("base64") !== encoded || decoded.length === 0) {
|
|
51
|
-
return failHeader("Malformed MCP Base64 header value", header);
|
|
52
|
-
}
|
|
53
|
-
return decoded.toString("utf8");
|
|
54
|
-
}
|
|
55
|
-
if (value.length === 0 ||
|
|
56
|
-
value.trim() !== value ||
|
|
57
|
-
!PLAIN_HEADER_VALUE_PATTERN.test(value)) {
|
|
58
|
-
return failHeader("Malformed MCP header value", header);
|
|
59
|
-
}
|
|
60
|
-
return value;
|
|
61
|
-
}
|
|
62
|
-
function containsHeaderAnnotation(value) {
|
|
63
|
-
if (Array.isArray(value))
|
|
64
|
-
return value.some(containsHeaderAnnotation);
|
|
65
|
-
if (!isMcpRecord(value))
|
|
66
|
-
return false;
|
|
67
|
-
return (Object.prototype.hasOwnProperty.call(value, "x-mcp-header") ||
|
|
68
|
-
Object.values(value).some(containsHeaderAnnotation));
|
|
69
|
-
}
|
|
70
|
-
/** Validate and normalize one schema-derived custom-header annotation. */
|
|
71
|
-
function parseMcpHeaderAnnotation(propertySchema, propertyPath, names) {
|
|
72
|
-
const annotation = propertySchema["x-mcp-header"];
|
|
73
|
-
if (annotation === undefined)
|
|
74
|
-
return undefined;
|
|
75
|
-
const type = propertySchema.type;
|
|
76
|
-
if (typeof annotation !== "string" ||
|
|
77
|
-
!HEADER_NAME_TOKEN_PATTERN.test(annotation) ||
|
|
78
|
-
!["boolean", "integer", "string"].includes(String(type)) ||
|
|
79
|
-
names.has(annotation.toLowerCase())) {
|
|
80
|
-
throw new PmMcpProtocolError("Invalid MCP x-mcp-header annotation", PM_MCP_ERROR_CODES.invalidParams, { field: propertyPath.join("."), annotation });
|
|
81
|
-
}
|
|
82
|
-
names.add(annotation.toLowerCase());
|
|
83
|
-
return {
|
|
84
|
-
name: annotation,
|
|
85
|
-
path: propertyPath,
|
|
86
|
-
type: type,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/** Parse valid statically reachable custom-header annotations from a tool schema. */
|
|
90
|
-
export function collectMcpHeaderAnnotations(schema) {
|
|
91
|
-
if (!isMcpRecord(schema)) {
|
|
92
|
-
throw new PmMcpProtocolError("Invalid MCP tool schema", PM_MCP_ERROR_CODES.invalidParams, { field: "inputSchema", expected: "object" });
|
|
93
|
-
}
|
|
94
|
-
const annotations = [];
|
|
95
|
-
const names = new Set();
|
|
96
|
-
const visitProperties = (node, path) => {
|
|
97
|
-
const properties = node.properties;
|
|
98
|
-
if (properties === undefined)
|
|
99
|
-
return;
|
|
100
|
-
if (!isMcpRecord(properties)) {
|
|
101
|
-
throw new PmMcpProtocolError("Invalid MCP tool schema properties", PM_MCP_ERROR_CODES.invalidParams, { field: "inputSchema.properties" });
|
|
102
|
-
}
|
|
103
|
-
for (const [property, propertySchema] of Object.entries(properties)) {
|
|
104
|
-
if (!isMcpRecord(propertySchema))
|
|
105
|
-
continue;
|
|
106
|
-
const propertyPath = [...path, property];
|
|
107
|
-
const annotation = parseMcpHeaderAnnotation(propertySchema, propertyPath, names);
|
|
108
|
-
if (annotation)
|
|
109
|
-
annotations.push(annotation);
|
|
110
|
-
for (const [keyword, nested] of Object.entries(propertySchema)) {
|
|
111
|
-
if (keyword !== "properties" &&
|
|
112
|
-
keyword !== "x-mcp-header" &&
|
|
113
|
-
containsHeaderAnnotation(nested)) {
|
|
114
|
-
throw new PmMcpProtocolError("MCP x-mcp-header is not statically reachable", PM_MCP_ERROR_CODES.invalidParams, { field: propertyPath.join("."), keyword });
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
visitProperties(propertySchema, propertyPath);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
for (const [keyword, nested] of Object.entries(schema)) {
|
|
121
|
-
if (keyword !== "properties" && containsHeaderAnnotation(nested)) {
|
|
122
|
-
throw new PmMcpProtocolError("MCP x-mcp-header is not statically reachable", PM_MCP_ERROR_CODES.invalidParams, { field: "inputSchema", keyword });
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
visitProperties(schema, []);
|
|
126
|
-
return annotations;
|
|
127
|
-
}
|
|
128
|
-
function valueAtPath(value, path) {
|
|
129
|
-
let current = value;
|
|
130
|
-
for (const part of path) {
|
|
131
|
-
if (!isMcpRecord(current))
|
|
132
|
-
return undefined;
|
|
133
|
-
current = current[part];
|
|
134
|
-
}
|
|
135
|
-
return current;
|
|
136
|
-
}
|
|
137
|
-
function mirroredName(method, params) {
|
|
138
|
-
const value = method === "resources/read" ? params.uri : params.name;
|
|
139
|
-
return typeof value === "string" ? value : undefined;
|
|
140
|
-
}
|
|
141
|
-
function buildMcpCustomRequestHeaders(params, toolSchema) {
|
|
142
|
-
const argumentsValue = isMcpRecord(params.arguments) ? params.arguments : {};
|
|
143
|
-
const headers = {};
|
|
144
|
-
for (const annotation of collectMcpHeaderAnnotations(toolSchema)) {
|
|
145
|
-
const value = valueAtPath(argumentsValue, annotation.path);
|
|
146
|
-
if (value === undefined || value === null)
|
|
147
|
-
continue;
|
|
148
|
-
const valid = (annotation.type === "integer" &&
|
|
149
|
-
typeof value === "number" &&
|
|
150
|
-
Number.isSafeInteger(value)) ||
|
|
151
|
-
(annotation.type === "boolean" && typeof value === "boolean") ||
|
|
152
|
-
(annotation.type === "string" && typeof value === "string");
|
|
153
|
-
if (!valid) {
|
|
154
|
-
throw new PmMcpProtocolError("Invalid MCP custom header argument", PM_MCP_ERROR_CODES.invalidParams, { field: annotation.path.join("."), expected: annotation.type });
|
|
155
|
-
}
|
|
156
|
-
headers[`Mcp-Param-${annotation.name}`] = encodeMcpHttpHeaderValue(value);
|
|
157
|
-
}
|
|
158
|
-
return headers;
|
|
159
|
-
}
|
|
160
|
-
/** Build required Streamable HTTP headers for one modern client request. */
|
|
161
|
-
export function buildMcpHttpRequestHeaders(input) {
|
|
162
|
-
const params = isMcpRecord(input.request.params)
|
|
163
|
-
? input.request.params
|
|
164
|
-
: undefined;
|
|
165
|
-
const context = resolveMcpRequestContext(params);
|
|
166
|
-
const method = input.request.method;
|
|
167
|
-
if (typeof method !== "string" || method.length === 0) {
|
|
168
|
-
return failHeader("Missing MCP request method", "Mcp-Method");
|
|
169
|
-
}
|
|
170
|
-
const headers = {
|
|
171
|
-
Accept: "application/json, text/event-stream",
|
|
172
|
-
"Content-Type": "application/json",
|
|
173
|
-
"MCP-Protocol-Version": context.protocolVersion,
|
|
174
|
-
"Mcp-Method": method,
|
|
175
|
-
};
|
|
176
|
-
const name = mirroredName(method, params);
|
|
177
|
-
if (REQUIRED_NAME_METHODS.has(method)) {
|
|
178
|
-
if (name === undefined)
|
|
179
|
-
return failHeader("Missing MCP request name", "Mcp-Name");
|
|
180
|
-
headers["Mcp-Name"] = encodeMcpHttpHeaderValue(name);
|
|
181
|
-
}
|
|
182
|
-
if (method === "tools/call" && input.toolSchema !== undefined) {
|
|
183
|
-
Object.assign(headers, buildMcpCustomRequestHeaders(params, input.toolSchema));
|
|
184
|
-
}
|
|
185
|
-
return headers;
|
|
186
|
-
}
|
|
187
|
-
function validateMcpRequiredRequestHeaders(headers, request) {
|
|
188
|
-
const method = request.method;
|
|
189
|
-
if (typeof method !== "string" || method.length === 0) {
|
|
190
|
-
failHeader("Missing MCP request method", "Mcp-Method");
|
|
191
|
-
}
|
|
192
|
-
const params = isMcpRecord(request.params) ? request.params : undefined;
|
|
193
|
-
const expectedProtocol = resolveMcpRequestContext(params).protocolVersion;
|
|
194
|
-
if (headers.get("mcp-protocol-version") !== expectedProtocol) {
|
|
195
|
-
failHeader("MCP protocol header does not match request metadata", "MCP-Protocol-Version");
|
|
196
|
-
}
|
|
197
|
-
if (headers.get("mcp-method") !== method) {
|
|
198
|
-
failHeader("MCP method header does not match request body", "Mcp-Method");
|
|
199
|
-
}
|
|
200
|
-
if (REQUIRED_NAME_METHODS.has(method)) {
|
|
201
|
-
const headerName = headers.get("mcp-name");
|
|
202
|
-
const name = mirroredName(method, params);
|
|
203
|
-
if (headerName === undefined ||
|
|
204
|
-
name === undefined ||
|
|
205
|
-
decodeMcpHttpHeaderValue(headerName, "Mcp-Name") !== name) {
|
|
206
|
-
failHeader("MCP name header does not match request body", "Mcp-Name");
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (headers.has("last-event-id")) {
|
|
210
|
-
// The preceding match is an mcp-deprecation-negative-control: no resume/redelivery.
|
|
211
|
-
failHeader("MCP SSE resumability is not supported", "Last-Event-ID");
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
function customHeaderMatches(annotation, value, decoded) {
|
|
215
|
-
if (annotation.type === "integer") {
|
|
216
|
-
return (typeof value === "number" &&
|
|
217
|
-
Number.isSafeInteger(value) &&
|
|
218
|
-
Number(decoded) === value);
|
|
219
|
-
}
|
|
220
|
-
if (annotation.type === "boolean") {
|
|
221
|
-
return typeof value === "boolean" && decoded === String(value);
|
|
222
|
-
}
|
|
223
|
-
return typeof value === "string" && decoded === value;
|
|
224
|
-
}
|
|
225
|
-
function validateMcpCustomRequestHeaders(input) {
|
|
226
|
-
const argumentsValue = isMcpRecord(input.params.arguments)
|
|
227
|
-
? input.params.arguments
|
|
228
|
-
: {};
|
|
229
|
-
for (const annotation of collectMcpHeaderAnnotations(input.toolSchema)) {
|
|
230
|
-
const value = valueAtPath(argumentsValue, annotation.path);
|
|
231
|
-
const header = `Mcp-Param-${annotation.name}`;
|
|
232
|
-
const mirrored = input.headers.get(header.toLowerCase());
|
|
233
|
-
if (value === undefined || value === null) {
|
|
234
|
-
if (mirrored !== undefined)
|
|
235
|
-
failHeader("Unexpected MCP parameter header", header);
|
|
236
|
-
continue;
|
|
237
|
-
}
|
|
238
|
-
if (mirrored === undefined)
|
|
239
|
-
failHeader("Missing MCP parameter header", header);
|
|
240
|
-
if (!customHeaderMatches(annotation, value, decodeMcpHttpHeaderValue(mirrored, header))) {
|
|
241
|
-
failHeader("MCP parameter header does not match request body", header);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/** Validate required Streamable HTTP headers against the JSON-RPC body. */
|
|
246
|
-
export function validateMcpHttpRequestHeaders(input) {
|
|
247
|
-
const headers = normalizedHeaders(input.headers);
|
|
248
|
-
const method = typeof input.request.method === "string" ? input.request.method : "";
|
|
249
|
-
validateMcpRequiredRequestHeaders(headers, input.request);
|
|
250
|
-
if (method !== "tools/call" || input.toolSchema === undefined)
|
|
251
|
-
return;
|
|
252
|
-
validateMcpCustomRequestHeaders({
|
|
253
|
-
headers,
|
|
254
|
-
params: input.request.params,
|
|
255
|
-
toolSchema: input.toolSchema,
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
/** Required protocol version exposed for clients constructing headers manually. */
|
|
259
|
-
export const PM_MCP_HTTP_PROTOCOL_VERSION = PM_MCP_PROTOCOL_VERSION;
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7d591d0b-f009-519c-8024-c6fa18effb8e")}catch(e2){}})();import{PM_MCP_ERROR_CODES,PM_MCP_PROTOCOL_VERSION,PmMcpProtocolError,isMcpRecord,resolveMcpRequestContext}from"./protocol.js";const BASE64_SENTINEL_PATTERN=/^=\?base64\?([A-Za-z0-9+/]*={0,2})\?=$/u;const HEADER_NAME_TOKEN_PATTERN=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u;const PLAIN_HEADER_VALUE_PATTERN=/^[\t\x20-\x7E]*$/u;const REQUIRED_NAME_METHODS=new Set(["prompts/get","resources/read","tools/call"]);function normalizedHeaders(headers){const normalized=new Map;for(const[name,value]of Object.entries(headers)){if(value===void 0)continue;const entry=typeof value==="string"?value:value.join(", ");normalized.set(name.toLowerCase(),entry)}return normalized}function failHeader(message,header){throw new PmMcpProtocolError(message,PM_MCP_ERROR_CODES.headerMismatch,{header})}function encodeMcpHttpHeaderValue(value){const serialized=typeof value==="boolean"?String(value).toLowerCase():String(value);if(serialized.length>0&&serialized.trim()===serialized&&PLAIN_HEADER_VALUE_PATTERN.test(serialized)&&!BASE64_SENTINEL_PATTERN.test(serialized)){return serialized}return`=?base64?${Buffer.from(serialized,"utf8").toString("base64")}?=`}function decodeMcpHttpHeaderValue(value,header){const sentinel=BASE64_SENTINEL_PATTERN.exec(value);if(sentinel){const encoded=sentinel[1];const decoded=Buffer.from(encoded,"base64");if(decoded.toString("base64")!==encoded||decoded.length===0){return failHeader("Malformed MCP Base64 header value",header)}return decoded.toString("utf8")}if(value.length===0||value.trim()!==value||!PLAIN_HEADER_VALUE_PATTERN.test(value)){return failHeader("Malformed MCP header value",header)}return value}function containsHeaderAnnotation(value){if(Array.isArray(value))return value.some(containsHeaderAnnotation);if(!isMcpRecord(value))return false;return Object.prototype.hasOwnProperty.call(value,"x-mcp-header")||Object.values(value).some(containsHeaderAnnotation)}function parseMcpHeaderAnnotation(propertySchema,propertyPath,names){const annotation=propertySchema["x-mcp-header"];if(annotation===void 0)return void 0;const type=propertySchema.type;if(typeof annotation!=="string"||!HEADER_NAME_TOKEN_PATTERN.test(annotation)||!["boolean","integer","string"].includes(String(type))||names.has(annotation.toLowerCase())){throw new PmMcpProtocolError("Invalid MCP x-mcp-header annotation",PM_MCP_ERROR_CODES.invalidParams,{field:propertyPath.join("."),annotation})}names.add(annotation.toLowerCase());return{name:annotation,path:propertyPath,type}}function collectMcpHeaderAnnotations(schema){if(!isMcpRecord(schema)){throw new PmMcpProtocolError("Invalid MCP tool schema",PM_MCP_ERROR_CODES.invalidParams,{field:"inputSchema",expected:"object"})}const annotations=[];const names=new Set;const visitProperties=(node,path)=>{const properties=node.properties;if(properties===void 0)return;if(!isMcpRecord(properties)){throw new PmMcpProtocolError("Invalid MCP tool schema properties",PM_MCP_ERROR_CODES.invalidParams,{field:"inputSchema.properties"})}for(const[property,propertySchema]of Object.entries(properties)){if(!isMcpRecord(propertySchema))continue;const propertyPath=[...path,property];const annotation=parseMcpHeaderAnnotation(propertySchema,propertyPath,names);if(annotation)annotations.push(annotation);for(const[keyword,nested]of Object.entries(propertySchema)){if(keyword!=="properties"&&keyword!=="x-mcp-header"&&containsHeaderAnnotation(nested)){throw new PmMcpProtocolError("MCP x-mcp-header is not statically reachable",PM_MCP_ERROR_CODES.invalidParams,{field:propertyPath.join("."),keyword})}}visitProperties(propertySchema,propertyPath)}};for(const[keyword,nested]of Object.entries(schema)){if(keyword!=="properties"&&containsHeaderAnnotation(nested)){throw new PmMcpProtocolError("MCP x-mcp-header is not statically reachable",PM_MCP_ERROR_CODES.invalidParams,{field:"inputSchema",keyword})}}visitProperties(schema,[]);return annotations}function valueAtPath(value,path){let current=value;for(const part of path){if(!isMcpRecord(current))return void 0;current=current[part]}return current}function mirroredName(method,params){const value=method==="resources/read"?params.uri:params.name;return typeof value==="string"?value:void 0}function buildMcpCustomRequestHeaders(params,toolSchema){const argumentsValue=isMcpRecord(params.arguments)?params.arguments:{};const headers={};for(const annotation of collectMcpHeaderAnnotations(toolSchema)){const value=valueAtPath(argumentsValue,annotation.path);if(value===void 0||value===null)continue;const valid=annotation.type==="integer"&&typeof value==="number"&&Number.isSafeInteger(value)||annotation.type==="boolean"&&typeof value==="boolean"||annotation.type==="string"&&typeof value==="string";if(!valid){throw new PmMcpProtocolError("Invalid MCP custom header argument",PM_MCP_ERROR_CODES.invalidParams,{field:annotation.path.join("."),expected:annotation.type})}headers[`Mcp-Param-${annotation.name}`]=encodeMcpHttpHeaderValue(value)}return headers}function buildMcpHttpRequestHeaders(input){const params=isMcpRecord(input.request.params)?input.request.params:void 0;const context=resolveMcpRequestContext(params);const method=input.request.method;if(typeof method!=="string"||method.length===0){return failHeader("Missing MCP request method","Mcp-Method")}const headers={Accept:"application/json, text/event-stream","Content-Type":"application/json","MCP-Protocol-Version":context.protocolVersion,"Mcp-Method":method};const name=mirroredName(method,params);if(REQUIRED_NAME_METHODS.has(method)){if(name===void 0)return failHeader("Missing MCP request name","Mcp-Name");headers["Mcp-Name"]=encodeMcpHttpHeaderValue(name)}if(method==="tools/call"&&input.toolSchema!==void 0){Object.assign(headers,buildMcpCustomRequestHeaders(params,input.toolSchema))}return headers}function validateMcpRequiredRequestHeaders(headers,request){const method=request.method;if(typeof method!=="string"||method.length===0){failHeader("Missing MCP request method","Mcp-Method")}const params=isMcpRecord(request.params)?request.params:void 0;const expectedProtocol=resolveMcpRequestContext(params).protocolVersion;if(headers.get("mcp-protocol-version")!==expectedProtocol){failHeader("MCP protocol header does not match request metadata","MCP-Protocol-Version")}if(headers.get("mcp-method")!==method){failHeader("MCP method header does not match request body","Mcp-Method")}if(REQUIRED_NAME_METHODS.has(method)){const headerName=headers.get("mcp-name");const name=mirroredName(method,params);if(headerName===void 0||name===void 0||decodeMcpHttpHeaderValue(headerName,"Mcp-Name")!==name){failHeader("MCP name header does not match request body","Mcp-Name")}}if(headers.has("last-event-id")){failHeader("MCP SSE resumability is not supported","Last-Event-ID")}}function customHeaderMatches(annotation,value,decoded){if(annotation.type==="integer"){return typeof value==="number"&&Number.isSafeInteger(value)&&Number(decoded)===value}if(annotation.type==="boolean"){return typeof value==="boolean"&&decoded===String(value)}return typeof value==="string"&&decoded===value}function validateMcpCustomRequestHeaders(input){const argumentsValue=isMcpRecord(input.params.arguments)?input.params.arguments:{};for(const annotation of collectMcpHeaderAnnotations(input.toolSchema)){const value=valueAtPath(argumentsValue,annotation.path);const header=`Mcp-Param-${annotation.name}`;const mirrored=input.headers.get(header.toLowerCase());if(value===void 0||value===null){if(mirrored!==void 0)failHeader("Unexpected MCP parameter header",header);continue}if(mirrored===void 0)failHeader("Missing MCP parameter header",header);if(!customHeaderMatches(annotation,value,decodeMcpHttpHeaderValue(mirrored,header))){failHeader("MCP parameter header does not match request body",header)}}}function validateMcpHttpRequestHeaders(input){const headers=normalizedHeaders(input.headers);const method=typeof input.request.method==="string"?input.request.method:"";validateMcpRequiredRequestHeaders(headers,input.request);if(method!=="tools/call"||input.toolSchema===void 0)return;validateMcpCustomRequestHeaders({headers,params:input.request.params,toolSchema:input.toolSchema})}const PM_MCP_HTTP_PROTOCOL_VERSION=PM_MCP_PROTOCOL_VERSION;export{PM_MCP_HTTP_PROTOCOL_VERSION,buildMcpHttpRequestHeaders,collectMcpHeaderAnnotations,decodeMcpHttpHeaderValue,encodeMcpHttpHeaderValue,validateMcpHttpRequestHeaders};
|
|
260
2
|
//# sourceMappingURL=transport.js.map
|
|
261
|
-
//# debugId=5ffe7128-0fbb-59af-89ef-74d5d799a00d
|
|
@@ -1,47 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="cd45ee09-e4c3-5fc6-8253-1f1dc709a3a8")}catch(e){}}();
|
|
3
|
-
import { runHistoryRepair } from "../history-repair.js";
|
|
4
|
-
import { isOriginalGitStateRestored } from "./receipt-operation.js";
|
|
5
|
-
import { markMergeReceiptReconciled, summarizeMergeReceipt, } from "./receipts.js";
|
|
6
|
-
/** Preview or record restored-origin dispositions without treating them as applied merges. */
|
|
7
|
-
export async function settleAbandonedMergeReceipts(params) {
|
|
8
|
-
if (params.cwd === null)
|
|
9
|
-
return [];
|
|
10
|
-
const settled = [];
|
|
11
|
-
for (const receipt of params.receipts) {
|
|
12
|
-
if (receipt.operation === undefined ||
|
|
13
|
-
!(await isOriginalGitStateRestored(params.cwd, receipt.item_path, receipt.operation)))
|
|
14
|
-
continue;
|
|
15
|
-
const mergeAbandonmentProof = { gitWorkspaceRoot: params.cwd, receipt };
|
|
16
|
-
await runHistoryRepair(receipt.item_id, { dryRun: true, mergeAbandonmentProof }, params.global);
|
|
17
|
-
if (!params.dryRun) {
|
|
18
|
-
await runHistoryRepair(receipt.item_id, {
|
|
19
|
-
author: params.author ?? params.global.author,
|
|
20
|
-
mergeAbandonmentProof,
|
|
21
|
-
message: params.message ??
|
|
22
|
-
"Settle rebase receipt after exact original Git state restoration",
|
|
23
|
-
auditOperation: "merge_reconcile",
|
|
24
|
-
forceAuditEntry: true,
|
|
25
|
-
auditContext: {
|
|
26
|
-
merge: {
|
|
27
|
-
abandoned_receipts: [
|
|
28
|
-
{
|
|
29
|
-
...summarizeMergeReceipt(receipt),
|
|
30
|
-
reason: "original_git_state_restored",
|
|
31
|
-
operation: receipt.operation,
|
|
32
|
-
},
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
}, params.global);
|
|
37
|
-
await markMergeReceiptReconciled(params.cwd, receipt, {
|
|
38
|
-
requireExisting: true,
|
|
39
|
-
settlement: "original_git_state_restored",
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
settled.push(receipt.id);
|
|
43
|
-
}
|
|
44
|
-
return settled;
|
|
45
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5fd3624a-d36b-58e6-8053-f2c0626e0c10")}catch(e2){}})();import{runHistoryRepair}from"../history-repair.js";import{isOriginalGitStateRestored}from"./receipt-operation.js";import{markMergeReceiptReconciled,summarizeMergeReceipt}from"./receipts.js";async function settleAbandonedMergeReceipts(params){if(params.cwd===null)return[];const settled=[];for(const receipt of params.receipts){if(receipt.operation===void 0||!await isOriginalGitStateRestored(params.cwd,receipt.item_path,receipt.operation))continue;const mergeAbandonmentProof={gitWorkspaceRoot:params.cwd,receipt};await runHistoryRepair(receipt.item_id,{dryRun:true,mergeAbandonmentProof},params.global);if(!params.dryRun){await runHistoryRepair(receipt.item_id,{author:params.author??params.global.author,mergeAbandonmentProof,message:params.message??"Settle rebase receipt after exact original Git state restoration",auditOperation:"merge_reconcile",forceAuditEntry:true,auditContext:{merge:{abandoned_receipts:[{...summarizeMergeReceipt(receipt),reason:"original_git_state_restored",operation:receipt.operation}]}}},params.global);await markMergeReceiptReconciled(params.cwd,receipt,{requireExisting:true,settlement:"original_git_state_restored"})}settled.push(receipt.id)}return settled}export{settleAbandonedMergeReceipts};
|
|
46
2
|
//# sourceMappingURL=abandoned-receipts.js.map
|
|
47
|
-
//# debugId=cd45ee09-e4c3-5fc6-8253-1f1dc709a3a8
|
package/dist/sdk/merge/driver.js
CHANGED
|
@@ -1,213 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/merge/driver
|
|
3
|
-
*
|
|
4
|
-
* File-level git merge driver runner for tracker artifacts. Git invokes the
|
|
5
|
-
* driver with the base (%O), ours (%A), and theirs (%B) temporary files; the
|
|
6
|
-
* driver writes the merged content back to the ours path and reports whether
|
|
7
|
-
* unresolvable conflicts remain. Conflicted artifacts are still written as
|
|
8
|
-
* parseable documents (resolved toward the preferred side) so a conflicted
|
|
9
|
-
* merge never corrupts tracker storage the way raw conflict markers do.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="22b1f103-54de-5a63-a2d2-2f99181a73e2")}catch(e){}}();
|
|
13
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
14
|
-
import path from "node:path";
|
|
15
|
-
import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
|
|
16
|
-
import { collectRegisteredItemFieldNames } from "../../core/extensions/item-fields.js";
|
|
17
|
-
import { pathExists } from "../../core/fs/fs-utils.js";
|
|
18
|
-
import { parseItemDocument } from "../../core/item/item-format.js";
|
|
19
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
20
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
21
|
-
import { nowIso } from "../../core/shared/time.js";
|
|
22
|
-
import { getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
|
|
23
|
-
import { readSettings } from "../../core/store/settings.js";
|
|
24
|
-
import { hashItemScalarDecisionValue, mergeHistoryStreams, mergeItemDocuments, mergeJsonDocuments, mergeRelationshipEventStreams, } from "./three-way.js";
|
|
25
|
-
import { captureMergeReceiptOperation } from "./receipt-operation.js";
|
|
26
|
-
import { summarizeMergeReceipt, writeMergeReceipt, } from "./receipts.js";
|
|
27
|
-
/** Supported values accepted by the merge driver artifact contract across CLI, SDK, and MCP surfaces. */
|
|
28
|
-
export const MERGE_DRIVER_ARTIFACT_VALUES = [
|
|
29
|
-
"item",
|
|
30
|
-
"history",
|
|
31
|
-
"relationship",
|
|
32
|
-
"json",
|
|
33
|
-
];
|
|
34
|
-
function resolveArtifact(value) {
|
|
35
|
-
const normalized = value.trim().toLowerCase();
|
|
36
|
-
if (MERGE_DRIVER_ARTIFACT_VALUES.includes(normalized)) {
|
|
37
|
-
return normalized;
|
|
38
|
-
}
|
|
39
|
-
throw new PmCliError(`Unknown merge artifact "${value}". Supported values: ${MERGE_DRIVER_ARTIFACT_VALUES.join(", ")}.`, EXIT_CODE.USAGE);
|
|
40
|
-
}
|
|
41
|
-
function resolvePreferredSide(value) {
|
|
42
|
-
if (value === undefined) {
|
|
43
|
-
return "ours";
|
|
44
|
-
}
|
|
45
|
-
const normalized = value.trim().toLowerCase();
|
|
46
|
-
if (normalized === "ours" || normalized === "theirs") {
|
|
47
|
-
return normalized;
|
|
48
|
-
}
|
|
49
|
-
throw new PmCliError(`Unknown --prefer value "${value}". Supported values: ours, theirs.`, EXIT_CODE.USAGE);
|
|
50
|
-
}
|
|
51
|
-
async function readSideFile(filePath, label) {
|
|
52
|
-
try {
|
|
53
|
-
return await readFile(filePath, "utf8");
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
throw new PmCliError(`Cannot read merge ${label} file at ${filePath}.`, EXIT_CODE.NOT_FOUND);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Load the workspace settings when a tracker is initialized at the resolved pm
|
|
61
|
-
* root, or fall back to format defaults when the driver runs outside a tracker
|
|
62
|
-
* (git can invoke merge drivers before `pm init`, e.g. while rebasing the
|
|
63
|
-
* commit that introduces the tracker).
|
|
64
|
-
*/
|
|
65
|
-
async function loadOptionalSettings(global) {
|
|
66
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
67
|
-
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
return readSettings(pmRoot);
|
|
71
|
-
}
|
|
72
|
-
function itemFormatForPath(filePath, settings) {
|
|
73
|
-
if (filePath.endsWith(".md")) {
|
|
74
|
-
return "json_markdown";
|
|
75
|
-
}
|
|
76
|
-
if (filePath.endsWith(".toon")) {
|
|
77
|
-
return "toon";
|
|
78
|
-
}
|
|
79
|
-
return settings?.item_format ?? "toon";
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Execute one git merge-driver invocation for a tracker artifact. Reads the
|
|
83
|
-
* three per-side versions, applies the artifact's field-aware merge semantics,
|
|
84
|
-
* writes the merged content (parseable even when conflicted) to the output
|
|
85
|
-
* path, and reports remaining conflicts so the CLI can exit non-zero and let
|
|
86
|
-
* git mark the path unmerged.
|
|
87
|
-
*/
|
|
88
|
-
export async function runMergeDriver(options, global) {
|
|
89
|
-
const artifact = resolveArtifact(options.artifact);
|
|
90
|
-
const preferred = resolvePreferredSide(options.prefer);
|
|
91
|
-
const outputPath = path.resolve(options.outputPath ?? options.oursPath);
|
|
92
|
-
const [baseRaw, oursRaw, theirsRaw] = await Promise.all([
|
|
93
|
-
readSideFile(options.basePath, "base"),
|
|
94
|
-
readSideFile(options.oursPath, "ours"),
|
|
95
|
-
readSideFile(options.theirsPath, "theirs"),
|
|
96
|
-
]);
|
|
97
|
-
let merged;
|
|
98
|
-
let receiptInput;
|
|
99
|
-
const conflicts = [];
|
|
100
|
-
const result = {};
|
|
101
|
-
if (artifact === "history") {
|
|
102
|
-
const historyMerge = mergeHistoryStreams(baseRaw, oursRaw, theirsRaw);
|
|
103
|
-
merged = historyMerge.merged;
|
|
104
|
-
result.history = {
|
|
105
|
-
strategy: historyMerge.strategy,
|
|
106
|
-
common_entries: historyMerge.common_entries,
|
|
107
|
-
entries_from_ours: historyMerge.entries_from_ours,
|
|
108
|
-
entries_from_theirs: historyMerge.entries_from_theirs,
|
|
109
|
-
entries_total: historyMerge.entries_total,
|
|
110
|
-
reanchored: historyMerge.reanchored,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
else if (artifact === "relationship") {
|
|
114
|
-
const relationshipMerge = mergeRelationshipEventStreams(baseRaw, oursRaw, theirsRaw);
|
|
115
|
-
merged = relationshipMerge.merged;
|
|
116
|
-
result.relationship = {
|
|
117
|
-
strategy: relationshipMerge.strategy,
|
|
118
|
-
common_entries: relationshipMerge.common_entries,
|
|
119
|
-
entries_from_ours: relationshipMerge.entries_from_ours,
|
|
120
|
-
entries_from_theirs: relationshipMerge.entries_from_theirs,
|
|
121
|
-
entries_total: relationshipMerge.entries_total,
|
|
122
|
-
reanchored: relationshipMerge.reanchored,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
else if (artifact === "item") {
|
|
126
|
-
const settings = await loadOptionalSettings(global);
|
|
127
|
-
const itemFormat = itemFormatForPath(options.itemPath ?? outputPath, settings);
|
|
128
|
-
const extensionFieldNames = collectRegisteredItemFieldNames(getActiveExtensionRegistrations());
|
|
129
|
-
const itemMerge = mergeItemDocuments(baseRaw, oursRaw, theirsRaw, {
|
|
130
|
-
format: itemFormat,
|
|
131
|
-
schema: settings?.schema,
|
|
132
|
-
extensionFieldNames,
|
|
133
|
-
preferred,
|
|
134
|
-
conflictResolution: "latest_document_update",
|
|
135
|
-
});
|
|
136
|
-
merged = itemMerge.merged;
|
|
137
|
-
conflicts.push(...itemMerge.conflict_fields);
|
|
138
|
-
result.item = {
|
|
139
|
-
fields_from_theirs: itemMerge.fields_from_theirs,
|
|
140
|
-
union_fields: itemMerge.union_fields,
|
|
141
|
-
conflict_resolution: "latest_document_update",
|
|
142
|
-
requested_preference_applied: false,
|
|
143
|
-
};
|
|
144
|
-
if (options.itemPath !== undefined) {
|
|
145
|
-
const mergedDocument = parseItemDocument(merged, {
|
|
146
|
-
format: itemFormat,
|
|
147
|
-
schema: settings?.schema,
|
|
148
|
-
extensionFieldNames,
|
|
149
|
-
});
|
|
150
|
-
const mergedMetadata = mergedDocument.metadata;
|
|
151
|
-
const receiptFields = [
|
|
152
|
-
...new Set([
|
|
153
|
-
...itemMerge.fields_from_theirs,
|
|
154
|
-
...itemMerge.union_fields,
|
|
155
|
-
...itemMerge.conflict_decisions.map((decision) => decision.field),
|
|
156
|
-
]),
|
|
157
|
-
];
|
|
158
|
-
receiptInput = {
|
|
159
|
-
cwd: process.cwd(),
|
|
160
|
-
itemPath: options.itemPath,
|
|
161
|
-
preferred,
|
|
162
|
-
conflictResolution: "latest_document_update",
|
|
163
|
-
fieldsFromTheirs: itemMerge.fields_from_theirs,
|
|
164
|
-
unionFields: itemMerge.union_fields,
|
|
165
|
-
mergedFieldHashes: Object.fromEntries(receiptFields.map((field) => [
|
|
166
|
-
field,
|
|
167
|
-
hashItemScalarDecisionValue(field === "body" ? mergedDocument.body : mergedMetadata[field]),
|
|
168
|
-
])),
|
|
169
|
-
decisions: itemMerge.conflict_decisions,
|
|
170
|
-
operation: await captureMergeReceiptOperation(process.cwd(), options.itemPath),
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
const jsonMerge = mergeJsonDocuments(baseRaw, oursRaw, theirsRaw, {
|
|
176
|
-
preferred,
|
|
177
|
-
});
|
|
178
|
-
merged = jsonMerge.merged;
|
|
179
|
-
conflicts.push(...jsonMerge.conflict_paths);
|
|
180
|
-
result.json = {
|
|
181
|
-
paths_from_theirs: jsonMerge.paths_from_theirs,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
await writeFile(outputPath, merged, "utf8");
|
|
185
|
-
if (receiptInput !== undefined) {
|
|
186
|
-
const receipt = await writeMergeReceipt(receiptInput);
|
|
187
|
-
if (receipt !== null) {
|
|
188
|
-
result.receipt = summarizeMergeReceipt(receipt);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
const guidance = [];
|
|
192
|
-
if (conflicts.length > 0) {
|
|
193
|
-
const receiptGuidance = result.receipt === undefined
|
|
194
|
-
? 'Run "pm merge report" to inspect clone-local merge evidence.'
|
|
195
|
-
: `Run "pm merge report" and correlate receipt ${result.receipt.receipt_id} with item ${result.receipt.item_id}; clone-local discarded values are never copied into this result.`;
|
|
196
|
-
guidance.push(`Both branches changed ${conflicts.join(", ")}; the item driver kept the value from the later document update, with stable value order only as an equal-timestamp tie-break. --prefer does not apply to convergent item scalar conflicts. ${receiptGuidance} Review the merged file, re-apply the discarded change if needed, then "git add" it.`);
|
|
197
|
-
}
|
|
198
|
-
if (artifact === "history" && result.history?.reanchored) {
|
|
199
|
-
guidance.push('The merged history chain was re-anchored. Run "pm merge reconcile --dry-run" to inspect the complete post-merge repair, then "pm merge reconcile" to apply it; use --force only after explicitly accepting reported discards.');
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
ok: conflicts.length === 0,
|
|
203
|
-
artifact,
|
|
204
|
-
output_path: outputPath,
|
|
205
|
-
requested_preference: preferred,
|
|
206
|
-
conflicts,
|
|
207
|
-
...result,
|
|
208
|
-
guidance,
|
|
209
|
-
generated_at: nowIso(),
|
|
210
|
-
};
|
|
211
|
-
}
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="47487ad3-22a0-52ac-8a42-ebaca439cb6e")}catch(e2){}})();import{readFile,writeFile}from"node:fs/promises";import path from"node:path";import{getActiveExtensionRegistrations}from"../../core/extensions/index.js";import{collectRegisteredItemFieldNames}from"../../core/extensions/item-fields.js";import{pathExists}from"../../core/fs/fs-utils.js";import{parseItemDocument}from"../../core/item/item-format.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{nowIso}from"../../core/shared/time.js";import{getSettingsPath,resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{hashItemScalarDecisionValue,mergeHistoryStreams,mergeItemDocuments,mergeJsonDocuments,mergeRelationshipEventStreams}from"./three-way.js";import{captureMergeReceiptOperation}from"./receipt-operation.js";import{summarizeMergeReceipt,writeMergeReceipt}from"./receipts.js";const MERGE_DRIVER_ARTIFACT_VALUES=["item","history","relationship","json"];function resolveArtifact(value){const normalized=value.trim().toLowerCase();if(MERGE_DRIVER_ARTIFACT_VALUES.includes(normalized)){return normalized}throw new PmCliError(`Unknown merge artifact "${value}". Supported values: ${MERGE_DRIVER_ARTIFACT_VALUES.join(", ")}.`,EXIT_CODE.USAGE)}function resolvePreferredSide(value){if(value===void 0){return"ours"}const normalized=value.trim().toLowerCase();if(normalized==="ours"||normalized==="theirs"){return normalized}throw new PmCliError(`Unknown --prefer value "${value}". Supported values: ours, theirs.`,EXIT_CODE.USAGE)}async function readSideFile(filePath,label){try{return await readFile(filePath,"utf8")}catch{throw new PmCliError(`Cannot read merge ${label} file at ${filePath}.`,EXIT_CODE.NOT_FOUND)}}async function loadOptionalSettings(global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);if(!await pathExists(getSettingsPath(pmRoot))){return null}return readSettings(pmRoot)}function itemFormatForPath(filePath,settings){if(filePath.endsWith(".md")){return"json_markdown"}if(filePath.endsWith(".toon")){return"toon"}return settings?.item_format??"toon"}async function runMergeDriver(options,global2){const artifact=resolveArtifact(options.artifact);const preferred=resolvePreferredSide(options.prefer);const outputPath=path.resolve(options.outputPath??options.oursPath);const[baseRaw,oursRaw,theirsRaw]=await Promise.all([readSideFile(options.basePath,"base"),readSideFile(options.oursPath,"ours"),readSideFile(options.theirsPath,"theirs")]);let merged;let receiptInput;const conflicts=[];const result={};if(artifact==="history"){const historyMerge=mergeHistoryStreams(baseRaw,oursRaw,theirsRaw);merged=historyMerge.merged;result.history={strategy:historyMerge.strategy,common_entries:historyMerge.common_entries,entries_from_ours:historyMerge.entries_from_ours,entries_from_theirs:historyMerge.entries_from_theirs,entries_total:historyMerge.entries_total,reanchored:historyMerge.reanchored}}else if(artifact==="relationship"){const relationshipMerge=mergeRelationshipEventStreams(baseRaw,oursRaw,theirsRaw);merged=relationshipMerge.merged;result.relationship={strategy:relationshipMerge.strategy,common_entries:relationshipMerge.common_entries,entries_from_ours:relationshipMerge.entries_from_ours,entries_from_theirs:relationshipMerge.entries_from_theirs,entries_total:relationshipMerge.entries_total,reanchored:relationshipMerge.reanchored}}else if(artifact==="item"){const settings=await loadOptionalSettings(global2);const itemFormat=itemFormatForPath(options.itemPath??outputPath,settings);const extensionFieldNames=collectRegisteredItemFieldNames(getActiveExtensionRegistrations());const itemMerge=mergeItemDocuments(baseRaw,oursRaw,theirsRaw,{format:itemFormat,schema:settings?.schema,extensionFieldNames,preferred,conflictResolution:"latest_document_update"});merged=itemMerge.merged;conflicts.push(...itemMerge.conflict_fields);result.item={fields_from_theirs:itemMerge.fields_from_theirs,union_fields:itemMerge.union_fields,conflict_resolution:"latest_document_update",requested_preference_applied:false};if(options.itemPath!==void 0){const mergedDocument=parseItemDocument(merged,{format:itemFormat,schema:settings?.schema,extensionFieldNames});const mergedMetadata=mergedDocument.metadata;const receiptFields=[...new Set([...itemMerge.fields_from_theirs,...itemMerge.union_fields,...itemMerge.conflict_decisions.map(decision=>decision.field)])];receiptInput={cwd:process.cwd(),itemPath:options.itemPath,preferred,conflictResolution:"latest_document_update",fieldsFromTheirs:itemMerge.fields_from_theirs,unionFields:itemMerge.union_fields,mergedFieldHashes:Object.fromEntries(receiptFields.map(field=>[field,hashItemScalarDecisionValue(field==="body"?mergedDocument.body:mergedMetadata[field])])),decisions:itemMerge.conflict_decisions,operation:await captureMergeReceiptOperation(process.cwd(),options.itemPath)}}}else{const jsonMerge=mergeJsonDocuments(baseRaw,oursRaw,theirsRaw,{preferred});merged=jsonMerge.merged;conflicts.push(...jsonMerge.conflict_paths);result.json={paths_from_theirs:jsonMerge.paths_from_theirs}}await writeFile(outputPath,merged,"utf8");if(receiptInput!==void 0){const receipt=await writeMergeReceipt(receiptInput);if(receipt!==null){result.receipt=summarizeMergeReceipt(receipt)}}const guidance=[];if(conflicts.length>0){const receiptGuidance=result.receipt===void 0?'Run "pm merge report" to inspect clone-local merge evidence.':`Run "pm merge report" and correlate receipt ${result.receipt.receipt_id} with item ${result.receipt.item_id}; clone-local discarded values are never copied into this result.`;guidance.push(`Both branches changed ${conflicts.join(", ")}; the item driver kept the value from the later document update, with stable value order only as an equal-timestamp tie-break. --prefer does not apply to convergent item scalar conflicts. ${receiptGuidance} Review the merged file, re-apply the discarded change if needed, then "git add" it.`)}if(artifact==="history"&&result.history?.reanchored){guidance.push('The merged history chain was re-anchored. Run "pm merge reconcile --dry-run" to inspect the complete post-merge repair, then "pm merge reconcile" to apply it; use --force only after explicitly accepting reported discards.')}return{ok:conflicts.length===0,artifact,output_path:outputPath,requested_preference:preferred,conflicts,...result,guidance,generated_at:nowIso()}}export{MERGE_DRIVER_ARTIFACT_VALUES,runMergeDriver};
|
|
212
2
|
//# sourceMappingURL=driver.js.map
|
|
213
|
-
//# debugId=22b1f103-54de-5a63-a2d2-2f99181a73e2
|
package/dist/sdk/merge/index.js
CHANGED
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/merge
|
|
3
|
-
*
|
|
4
|
-
* Public SDK surface for multi-branch tracker merge semantics: field-aware
|
|
5
|
-
* three-way merge primitives, the git merge-driver runner, and the repository
|
|
6
|
-
* merge-configuration installer. The CLI `pm merge` command is a shim over
|
|
7
|
-
* this module so packages and hosts can reuse the same merge behavior.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5079995b-ef00-5fe3-b87d-0882ef976d10")}catch(e){}}();
|
|
11
|
-
export { ITEM_SCALAR_MISSING_VALUE, ITEM_LATEST_TIMESTAMP_FIELDS, ITEM_UNION_COLLECTION_FIELDS, encodeItemScalarDecisionValue, hashItemScalarDecisionValue, isItemScalarMissingValue, mergeHistoryStreams, mergeItemDocuments, mergeJsonDocuments, mergeRelationshipEventStreams, } from "./three-way.js";
|
|
12
|
-
export { inspectMergeReceiptEvidence, listMergeReceipts, markMergeReceiptReconciled, runMergeReceiptEvidenceReport, runMergeReceiptReport, summarizeMergeReceipt, } from "./receipts.js";
|
|
13
|
-
export { MERGE_DRIVER_ARTIFACT_VALUES, runMergeDriver, } from "./driver.js";
|
|
14
|
-
export { auditMergeAttributeFence, auditMergeDriverConfiguration, buildMergeAttributePatterns, findGitWorkspaceRoot, PM_GITATTRIBUTES_END, PM_GITATTRIBUTES_START, PM_GITATTRIBUTES_V2_END, PM_GITATTRIBUTES_V2_START, refreshMergeAttributeFenceIfInstalled, resolveMergeInstallContext, runMergeInstall, } from "./install.js";
|
|
15
|
-
export { runMergeReconcile, } from "./reconcile.js";
|
|
1
|
+
!(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4175f7f5-a689-5d05-982a-f92e21bc83e7")}catch(e2){}})();import{ITEM_SCALAR_MISSING_VALUE,ITEM_LATEST_TIMESTAMP_FIELDS,ITEM_UNION_COLLECTION_FIELDS,encodeItemScalarDecisionValue,hashItemScalarDecisionValue,isItemScalarMissingValue,mergeHistoryStreams,mergeItemDocuments,mergeJsonDocuments,mergeRelationshipEventStreams}from"./three-way.js";import{inspectMergeReceiptEvidence,listMergeReceipts,markMergeReceiptReconciled,runMergeReceiptEvidenceReport,runMergeReceiptReport,summarizeMergeReceipt}from"./receipts.js";import{MERGE_DRIVER_ARTIFACT_VALUES,runMergeDriver}from"./driver.js";import{auditMergeAttributeFence,auditMergeDriverConfiguration,buildMergeAttributePatterns,findGitWorkspaceRoot,PM_GITATTRIBUTES_END,PM_GITATTRIBUTES_START,PM_GITATTRIBUTES_V2_END,PM_GITATTRIBUTES_V2_START,refreshMergeAttributeFenceIfInstalled,resolveMergeInstallContext,runMergeInstall}from"./install.js";import{runMergeReconcile}from"./reconcile.js";export{ITEM_LATEST_TIMESTAMP_FIELDS,ITEM_SCALAR_MISSING_VALUE,ITEM_UNION_COLLECTION_FIELDS,MERGE_DRIVER_ARTIFACT_VALUES,PM_GITATTRIBUTES_END,PM_GITATTRIBUTES_START,PM_GITATTRIBUTES_V2_END,PM_GITATTRIBUTES_V2_START,auditMergeAttributeFence,auditMergeDriverConfiguration,buildMergeAttributePatterns,encodeItemScalarDecisionValue,findGitWorkspaceRoot,hashItemScalarDecisionValue,inspectMergeReceiptEvidence,isItemScalarMissingValue,listMergeReceipts,markMergeReceiptReconciled,mergeHistoryStreams,mergeItemDocuments,mergeJsonDocuments,mergeRelationshipEventStreams,refreshMergeAttributeFenceIfInstalled,resolveMergeInstallContext,runMergeDriver,runMergeInstall,runMergeReceiptEvidenceReport,runMergeReceiptReport,runMergeReconcile,summarizeMergeReceipt};
|
|
16
2
|
//# sourceMappingURL=index.js.map
|
|
17
|
-
//# debugId=5079995b-ef00-5fe3-b87d-0882ef976d10
|