@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,71 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* @module sdk/query/duplicate-candidates
|
|
3
|
-
*
|
|
4
|
-
* Lossless prefix filtering for Jaccard joins. A globally ordered prefix of
|
|
5
|
-
* length n-ceil(threshold*n)+1 must intersect the corresponding prefix of
|
|
6
|
-
* every qualifying set. Exact titles and issue codes remain independent
|
|
7
|
-
* signals, including titles with no word tokens.
|
|
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]="d425cf45-5b62-5613-a5ce-78da6b0e201b")}catch(e){}}();
|
|
11
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
12
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
13
|
-
/** Declared safety bound applies to retained pairs, never silently to recall. */
|
|
14
|
-
export const MAX_DUPLICATE_CANDIDATE_PAIRS = 1_000_000;
|
|
15
|
-
/** Generate every potentially qualifying pair once, with an explicit exhaustive oracle. */
|
|
16
|
-
export function collectDuplicateCandidatePairs(items, maxPairs = MAX_DUPLICATE_CANDIDATE_PAIRS, threshold = 0.8, exhaustive = false) {
|
|
17
|
-
const candidates = new Set();
|
|
18
|
-
/** Deduplicate a candidate pair and refuse before publishing an over-budget result. */
|
|
19
|
-
const add = (left, right) => {
|
|
20
|
-
candidates.add(`${left}:${right}`);
|
|
21
|
-
if (candidates.size > maxPairs) {
|
|
22
|
-
throw new PmCliError(`Duplicate sweep exceeded ${maxPairs} candidate pairs; narrow it with statuses or since.`, EXIT_CODE.CONFLICT, { code: "duplicate_sweep_cost_limit", required: "Narrow the duplicate query or increase its similarity threshold. No partial result was returned." });
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
if (exhaustive || threshold === 0) {
|
|
26
|
-
for (let right = 0; right < items.length; right += 1) {
|
|
27
|
-
for (let left = 0; left < right; left += 1)
|
|
28
|
-
add(left, right);
|
|
29
|
-
}
|
|
30
|
-
return candidates;
|
|
31
|
-
}
|
|
32
|
-
const frequencies = new Map();
|
|
33
|
-
for (const { prepared } of items) {
|
|
34
|
-
for (const token of prepared.tokens)
|
|
35
|
-
frequencies.set(token, (frequencies.get(token) ?? 0) + 1);
|
|
36
|
-
}
|
|
37
|
-
const exact = new Map();
|
|
38
|
-
const codes = new Map();
|
|
39
|
-
const prefixes = new Map();
|
|
40
|
-
for (const [right, { prepared }] of items.entries()) {
|
|
41
|
-
const tokens = [...prepared.tokens].sort((left, other) => frequencies.get(left) - frequencies.get(other) || left.localeCompare(other));
|
|
42
|
-
// An epsilon expands rather than shrinks the prefix at floating boundaries.
|
|
43
|
-
const prefixLength = tokens.length - Math.ceil(threshold * tokens.length - 1e-12) + 1;
|
|
44
|
-
const signals = [
|
|
45
|
-
{ index: exact, keys: [prepared.normalized], lengthFilter: false },
|
|
46
|
-
{ index: codes, keys: threshold <= 0.99 ? prepared.issueCodes : [], lengthFilter: false },
|
|
47
|
-
{ index: prefixes, keys: tokens.length === 0 ? [""] : tokens.slice(0, prefixLength), lengthFilter: true },
|
|
48
|
-
];
|
|
49
|
-
for (const signal of signals) {
|
|
50
|
-
appendPostingCandidates(items, right, signal, threshold, add);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return candidates;
|
|
54
|
-
}
|
|
55
|
-
/** Join one exact/code/prefix posting list, applying the Jaccard length bound only to tokens. */
|
|
56
|
-
function appendPostingCandidates(items, right, signal, threshold, add) {
|
|
57
|
-
const rightLength = items[right].prepared.tokens.length;
|
|
58
|
-
for (const key of signal.keys) {
|
|
59
|
-
const posting = signal.index.get(key) ?? [];
|
|
60
|
-
for (const left of posting) {
|
|
61
|
-
const leftLength = items[left].prepared.tokens.length;
|
|
62
|
-
if (signal.lengthFilter && Math.min(leftLength, rightLength) / Math.max(leftLength, rightLength) + 1e-12 < threshold)
|
|
63
|
-
continue;
|
|
64
|
-
add(left, right);
|
|
65
|
-
}
|
|
66
|
-
posting.push(right);
|
|
67
|
-
signal.index.set(key, posting);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
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]="4e54ed7b-3bab-51a2-912b-1284eaf8187a")}catch(e2){}})();import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";const MAX_DUPLICATE_CANDIDATE_PAIRS=1e6;function collectDuplicateCandidatePairs(items,maxPairs=MAX_DUPLICATE_CANDIDATE_PAIRS,threshold=.8,exhaustive=false){const candidates=new Set;const add=(left,right)=>{candidates.add(`${left}:${right}`);if(candidates.size>maxPairs){throw new PmCliError(`Duplicate sweep exceeded ${maxPairs} candidate pairs; narrow it with statuses or since.`,EXIT_CODE.CONFLICT,{code:"duplicate_sweep_cost_limit",required:"Narrow the duplicate query or increase its similarity threshold. No partial result was returned."})}};if(exhaustive||threshold===0){for(let right=0;right<items.length;right+=1){for(let left=0;left<right;left+=1)add(left,right)}return candidates}const frequencies=new Map;for(const{prepared}of items){for(const token of prepared.tokens)frequencies.set(token,(frequencies.get(token)??0)+1)}const exact=new Map;const codes=new Map;const prefixes=new Map;for(const[right,{prepared}]of items.entries()){const tokens=[...prepared.tokens].sort((left,other)=>frequencies.get(left)-frequencies.get(other)||left.localeCompare(other));const prefixLength=tokens.length-Math.ceil(threshold*tokens.length-1e-12)+1;const signals=[{index:exact,keys:[prepared.normalized],lengthFilter:false},{index:codes,keys:threshold<=.99?prepared.issueCodes:[],lengthFilter:false},{index:prefixes,keys:tokens.length===0?[""]:tokens.slice(0,prefixLength),lengthFilter:true}];for(const signal of signals){appendPostingCandidates(items,right,signal,threshold,add)}}return candidates}function appendPostingCandidates(items,right,signal,threshold,add){const rightLength=items[right].prepared.tokens.length;for(const key of signal.keys){const posting=signal.index.get(key)??[];for(const left of posting){const leftLength=items[left].prepared.tokens.length;if(signal.lengthFilter&&Math.min(leftLength,rightLength)/Math.max(leftLength,rightLength)+1e-12<threshold)continue;add(left,right)}posting.push(right);signal.index.set(key,posting)}}export{MAX_DUPLICATE_CANDIDATE_PAIRS,collectDuplicateCandidatePairs};
|
|
70
2
|
//# sourceMappingURL=duplicate-candidates.js.map
|
|
71
|
-
//# debugId=d425cf45-5b62-5613-a5ce-78da6b0e201b
|
package/dist/sdk/query/get.js
CHANGED
|
@@ -1,451 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module sdk/query/get
|
|
3
|
-
*
|
|
4
|
-
* Implements the SDK-owned item query shared by every surface.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="88732a1d-ae5a-5dfb-93d6-9659cb6f05c3")}catch(e){}}();
|
|
8
|
-
import { assertInitializedTracker } from "../environment/tracker-preflight.js";
|
|
9
|
-
import { getActiveExtensionRegistrations, toItemRecord, resolveItemTypeRegistry, resolveRuntimeFieldRegistry, resolveRuntimeStatusRegistry, EXIT_CODE, TYPE_TO_FOLDER, PmCliError, buildItemNotFoundError, listAllItemMetadataLight, locateItem, readLocatedItem, getHistoryPath, resolvePmRoot, readSettings, resolveAuthor, } from "../runtime-primitives.js";
|
|
10
|
-
import { readHistoryEntries } from "../history-read.js";
|
|
11
|
-
import { renderPmCommand } from "../command-line.js";
|
|
12
|
-
import { recordContextUsageTouches } from "../context-usage.js";
|
|
13
|
-
import { buildItemChildrenRollup, } from "../item-children.js";
|
|
14
|
-
import { buildItemSchedule, } from "../item-schedule.js";
|
|
15
|
-
import { getItemAt } from "../history-read.js";
|
|
16
|
-
import { parseIntegerLimit } from "./parsers.js";
|
|
17
|
-
import { runList } from "./list.js";
|
|
18
|
-
import { registerOutputMaterialFieldGroups } from "../output-projection.js";
|
|
19
|
-
import { GET_DEPTH_VALUES, listGetProjectionFields, } from "./projection-contracts.js";
|
|
20
|
-
export { GET_DEPTH_VALUES, listGetProjectionFields, } from "./projection-contracts.js";
|
|
21
|
-
const AUTOMATIC_CHILD_ROLLUP_TYPES = new Set([
|
|
22
|
-
"epic",
|
|
23
|
-
"feature",
|
|
24
|
-
"milestone",
|
|
25
|
-
"plan",
|
|
26
|
-
]);
|
|
27
|
-
const BUILTIN_ITEM_TYPES = new Set(Object.keys(TYPE_TO_FOLDER).map((type) => type.toLowerCase()));
|
|
28
|
-
function itemCollectionCounts(item) {
|
|
29
|
-
const lengths = Object.fromEntries([
|
|
30
|
-
"comments",
|
|
31
|
-
"notes",
|
|
32
|
-
"learnings",
|
|
33
|
-
"files",
|
|
34
|
-
"tests",
|
|
35
|
-
"docs",
|
|
36
|
-
"reminders",
|
|
37
|
-
"events",
|
|
38
|
-
].map((key) => [
|
|
39
|
-
key,
|
|
40
|
-
item[key]
|
|
41
|
-
?.length ?? 0,
|
|
42
|
-
]));
|
|
43
|
-
return lengths;
|
|
44
|
-
}
|
|
45
|
-
function itemMaterialFieldGroups(item, body) {
|
|
46
|
-
const collectionCounts = itemCollectionCounts(item);
|
|
47
|
-
return [
|
|
48
|
-
...(body.length > 0 ? ["body"] : []),
|
|
49
|
-
...Object.entries(collectionCounts).flatMap(([name, count]) => count > 0 ? [name] : []),
|
|
50
|
-
...(collectionCounts.files +
|
|
51
|
-
collectionCounts.tests +
|
|
52
|
-
collectionCounts.docs >
|
|
53
|
-
0
|
|
54
|
-
? ["linked"]
|
|
55
|
-
: []),
|
|
56
|
-
"children",
|
|
57
|
-
...(typeof item.assignee === "string" && item.assignee.trim().length > 0
|
|
58
|
-
? ["claim_state"]
|
|
59
|
-
: []),
|
|
60
|
-
...(buildItemSchedule(item) ? ["schedule"] : []),
|
|
61
|
-
];
|
|
62
|
-
}
|
|
63
|
-
/** Decide whether a normal read should pay for a workspace-wide child projection. */
|
|
64
|
-
function shouldAutoIncludeGetChildren(itemType) {
|
|
65
|
-
const normalizedType = itemType.trim().toLowerCase();
|
|
66
|
-
return (normalizedType.length > 0 &&
|
|
67
|
-
(AUTOMATIC_CHILD_ROLLUP_TYPES.has(normalizedType) ||
|
|
68
|
-
!BUILTIN_ITEM_TYPES.has(normalizedType)));
|
|
69
|
-
}
|
|
70
|
-
function toClaimHistoryContext(entry) {
|
|
71
|
-
return {
|
|
72
|
-
ts: entry.ts,
|
|
73
|
-
author: entry.author,
|
|
74
|
-
message: entry.message ?? null,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function resolveClaimStateContext(assigneeValue, history) {
|
|
78
|
-
const assignee = assigneeValue?.trim();
|
|
79
|
-
const normalizedAssignee = assignee && assignee.length > 0 ? assignee : null;
|
|
80
|
-
const lastClaim = [...history]
|
|
81
|
-
.reverse()
|
|
82
|
-
.find((entry) => entry.op === "claim");
|
|
83
|
-
const lastRelease = [...history]
|
|
84
|
-
.reverse()
|
|
85
|
-
.find((entry) => entry.op === "release");
|
|
86
|
-
return {
|
|
87
|
-
claimed: normalizedAssignee !== null,
|
|
88
|
-
assignee: normalizedAssignee,
|
|
89
|
-
last_claim: lastClaim ? toClaimHistoryContext(lastClaim) : null,
|
|
90
|
-
last_release: lastRelease ? toClaimHistoryContext(lastRelease) : null,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
function parseGetDepth(raw) {
|
|
94
|
-
if (raw === undefined || raw.trim().length === 0) {
|
|
95
|
-
return "standard";
|
|
96
|
-
}
|
|
97
|
-
const normalized = raw.trim().toLowerCase();
|
|
98
|
-
if (normalized === "full") {
|
|
99
|
-
return "deep";
|
|
100
|
-
}
|
|
101
|
-
if (GET_DEPTH_VALUES.includes(normalized)) {
|
|
102
|
-
return normalized;
|
|
103
|
-
}
|
|
104
|
-
throw new PmCliError("Get --depth must be one of brief|standard|deep|full", EXIT_CODE.USAGE);
|
|
105
|
-
}
|
|
106
|
-
function projectItemForDepth(item, depth) {
|
|
107
|
-
const collectionCounts = itemCollectionCounts(item);
|
|
108
|
-
if (depth === "deep") {
|
|
109
|
-
return {
|
|
110
|
-
...item,
|
|
111
|
-
comments: item.comments ?? [],
|
|
112
|
-
notes: item.notes ?? [],
|
|
113
|
-
learnings: item.learnings ?? [],
|
|
114
|
-
files: item.files ?? [],
|
|
115
|
-
tests: item.tests ?? [],
|
|
116
|
-
docs: item.docs ?? [],
|
|
117
|
-
reminders: item.reminders ?? [],
|
|
118
|
-
events: item.events ?? [],
|
|
119
|
-
notes_count: collectionCounts.notes,
|
|
120
|
-
tests_count: collectionCounts.tests,
|
|
121
|
-
collection_counts: collectionCounts,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
const { comments: _comments, notes: _notes, learnings: _learnings, files: _files, tests: _tests, docs: _docs, reminders: _reminders, events: _events, ...projected } = item;
|
|
125
|
-
return {
|
|
126
|
-
...projected,
|
|
127
|
-
notes_count: item.notes?.length ?? 0,
|
|
128
|
-
tests_count: item.tests?.length ?? 0,
|
|
129
|
-
collection_counts: collectionCounts,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
function parseGetFields(raw) {
|
|
133
|
-
if (raw === undefined) {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
const fields = raw
|
|
137
|
-
.split(",")
|
|
138
|
-
.map((entry) => entry.trim())
|
|
139
|
-
.filter((entry) => entry.length > 0);
|
|
140
|
-
if (fields.length === 0) {
|
|
141
|
-
throw new PmCliError("Get --fields requires a comma-separated list of field names", EXIT_CODE.USAGE);
|
|
142
|
-
}
|
|
143
|
-
return fields;
|
|
144
|
-
}
|
|
145
|
-
function normalizeGetField(field) {
|
|
146
|
-
return field.startsWith("item.") ? field.slice("item.".length) : field;
|
|
147
|
-
}
|
|
148
|
-
function validateGetFields(fields, runtimeMetadataKeys, id) {
|
|
149
|
-
if (fields === null) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const allowedValues = listGetProjectionFields(runtimeMetadataKeys);
|
|
153
|
-
const allowed = new Set(allowedValues);
|
|
154
|
-
const unknown = fields.filter((field) => {
|
|
155
|
-
const normalized = normalizeGetField(field);
|
|
156
|
-
return (!allowed.has(field) &&
|
|
157
|
-
!allowed.has(normalized));
|
|
158
|
-
});
|
|
159
|
-
if (unknown.length > 0) {
|
|
160
|
-
const suggestedRetryArguments = [
|
|
161
|
-
"get",
|
|
162
|
-
id,
|
|
163
|
-
"--fields",
|
|
164
|
-
"id,title,status",
|
|
165
|
-
];
|
|
166
|
-
throw new PmCliError(`Unknown get --fields value(s): ${unknown.join(", ")}`, EXIT_CODE.USAGE, {
|
|
167
|
-
code: "unknown_field_projection",
|
|
168
|
-
examples: [
|
|
169
|
-
"pm get <id> --fields id,title,status,type,updated_at",
|
|
170
|
-
"pm get <id> --fields id,title,claim_state",
|
|
171
|
-
"pm get <id> --fields id,title,body,linked.files",
|
|
172
|
-
],
|
|
173
|
-
recovery: {
|
|
174
|
-
allowed_values: allowedValues,
|
|
175
|
-
suggested_retry: renderPmCommand(suggestedRetryArguments),
|
|
176
|
-
suggested_retry_args: suggestedRetryArguments,
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
const EMPTY_PROJECTED_COLLECTION_FIELDS = new Set([
|
|
182
|
-
"comments",
|
|
183
|
-
"notes",
|
|
184
|
-
"learnings",
|
|
185
|
-
"files",
|
|
186
|
-
"tests",
|
|
187
|
-
"test_runs",
|
|
188
|
-
"docs",
|
|
189
|
-
"reminders",
|
|
190
|
-
"events",
|
|
191
|
-
"dependencies",
|
|
192
|
-
"plan_steps",
|
|
193
|
-
"plan_decisions",
|
|
194
|
-
"plan_discoveries",
|
|
195
|
-
"plan_validation",
|
|
196
|
-
]);
|
|
197
|
-
/** Resolve one projected metadata value while distinguishing an empty requested collection from an omitted field. */
|
|
198
|
-
function projectedMetadataValue(source, counts, field) {
|
|
199
|
-
if (Object.hasOwn(counts, field))
|
|
200
|
-
return counts[field];
|
|
201
|
-
if (source[field] !== undefined)
|
|
202
|
-
return source[field];
|
|
203
|
-
return EMPTY_PROJECTED_COLLECTION_FIELDS.has(field) ? [] : undefined;
|
|
204
|
-
}
|
|
205
|
-
function projectItemForFields(item, fields) {
|
|
206
|
-
const source = toItemRecord(item);
|
|
207
|
-
const omittedCounts = {
|
|
208
|
-
notes_count: item.notes?.length ?? 0,
|
|
209
|
-
tests_count: item.tests?.length ?? 0,
|
|
210
|
-
collection_counts: itemCollectionCounts(item),
|
|
211
|
-
};
|
|
212
|
-
const projected = { id: item.id };
|
|
213
|
-
for (const field of fields) {
|
|
214
|
-
const normalized = normalizeGetField(field);
|
|
215
|
-
if (normalized === "body" ||
|
|
216
|
-
normalized === "linked" ||
|
|
217
|
-
normalized.startsWith("linked.") ||
|
|
218
|
-
normalized === "claim_state" ||
|
|
219
|
-
normalized.startsWith("claim_state.") ||
|
|
220
|
-
normalized === "children" ||
|
|
221
|
-
normalized.startsWith("children.") ||
|
|
222
|
-
normalized === "schedule" ||
|
|
223
|
-
normalized.startsWith("schedule.")) {
|
|
224
|
-
continue;
|
|
225
|
-
}
|
|
226
|
-
projected[normalized] = projectedMetadataValue(source, omittedCounts, normalized);
|
|
227
|
-
}
|
|
228
|
-
return projected;
|
|
229
|
-
}
|
|
230
|
-
function fieldsInclude(fields, name) {
|
|
231
|
-
return (fields?.some((field) => field === name || field === `item.${name}`) ?? false);
|
|
232
|
-
}
|
|
233
|
-
function fieldsIncludeRoot(fields, name) {
|
|
234
|
-
return fields.some((field) => {
|
|
235
|
-
const normalized = normalizeGetField(field);
|
|
236
|
-
return normalized === name || normalized.startsWith(`${name}.`);
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
function resolveGetProjection(options, id) {
|
|
240
|
-
if (options.full &&
|
|
241
|
-
(options.fields !== undefined || options.depth !== undefined)) {
|
|
242
|
-
throw new PmCliError("Get projection options are mutually exclusive; remove the extra projection flag and retry.", EXIT_CODE.USAGE, {
|
|
243
|
-
code: "projection_options_mutually_exclusive",
|
|
244
|
-
recovery: {
|
|
245
|
-
suggested_retry: renderPmCommand(["get", id, "--full"]),
|
|
246
|
-
suggested_retry_args: ["get", id, "--full"],
|
|
247
|
-
},
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
if (options.tree !== true && options.treeDepth !== undefined) {
|
|
251
|
-
throw new PmCliError("Get --tree-depth requires --tree", EXIT_CODE.USAGE);
|
|
252
|
-
}
|
|
253
|
-
if (options.at !== undefined && options.tree === true) {
|
|
254
|
-
throw new PmCliError("Get --at cannot be combined with --tree because workspace-level historical projections are not yet indexed.", EXIT_CODE.USAGE);
|
|
255
|
-
}
|
|
256
|
-
return {
|
|
257
|
-
depth: options.full ? "deep" : parseGetDepth(options.depth),
|
|
258
|
-
treeDepth: options.tree === true
|
|
259
|
-
? parseIntegerLimit(options.treeDepth, "--tree-depth")
|
|
260
|
-
: undefined,
|
|
261
|
-
fields: parseGetFields(options.fields),
|
|
262
|
-
fieldProjection: options.fields !== undefined,
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
async function loadGetItemContext(id, global, at) {
|
|
266
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
267
|
-
await assertInitializedTracker(pmRoot);
|
|
268
|
-
const settings = await readSettings(pmRoot);
|
|
269
|
-
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
270
|
-
if (at !== undefined) {
|
|
271
|
-
const historical = await getItemAt(id, at, { pmRoot: global.path });
|
|
272
|
-
return {
|
|
273
|
-
pmRoot,
|
|
274
|
-
settings,
|
|
275
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
276
|
-
locatedId: historical.document.metadata.id,
|
|
277
|
-
metadata: historical.document.metadata,
|
|
278
|
-
body: historical.document.body,
|
|
279
|
-
historical,
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
|
|
283
|
-
if (!located) {
|
|
284
|
-
throw await buildItemNotFoundError(pmRoot, id, settings.id_prefix, typeRegistry.type_to_folder);
|
|
285
|
-
}
|
|
286
|
-
const loaded = await readLocatedItem(located, { schema: settings.schema });
|
|
287
|
-
return {
|
|
288
|
-
pmRoot,
|
|
289
|
-
settings,
|
|
290
|
-
typeToFolder: typeRegistry.type_to_folder,
|
|
291
|
-
locatedId: located.id,
|
|
292
|
-
metadata: loaded.document.metadata,
|
|
293
|
-
body: loaded.document.body,
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
function validateGetProjectionFields(fields, settings, historical, id) {
|
|
297
|
-
const runtimeMetadataKeys = resolveRuntimeFieldRegistry(settings.schema).definitions.map((field) => field.metadata_key);
|
|
298
|
-
validateGetFields(fields, runtimeMetadataKeys, id);
|
|
299
|
-
if (historical && fieldsIncludeRoot(fields ?? [], "children")) {
|
|
300
|
-
throw new PmCliError("Get --at cannot project children because workspace-level historical relationships are not yet indexed.", EXIT_CODE.USAGE);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
function shouldIncludeGetField(params) {
|
|
304
|
-
const { fieldProjection, depth, fields, field } = params;
|
|
305
|
-
if (fieldProjection) {
|
|
306
|
-
if (field === "body" || field === "linked") {
|
|
307
|
-
return fieldsInclude(fields, field);
|
|
308
|
-
}
|
|
309
|
-
return fieldsIncludeRoot(fields, field);
|
|
310
|
-
}
|
|
311
|
-
return depth !== "brief";
|
|
312
|
-
}
|
|
313
|
-
/** Derive claim evidence from the selected physical history prefix, excluding future claims. */
|
|
314
|
-
async function resolveGetClaimState(context, includeClaimState) {
|
|
315
|
-
if (!includeClaimState) {
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
const historyPath = getHistoryPath(context.pmRoot, context.locatedId);
|
|
319
|
-
const history = await readHistoryEntries(historyPath, context.locatedId);
|
|
320
|
-
return resolveClaimStateContext(context.metadata.assignee, context.historical
|
|
321
|
-
? history.slice(0, context.historical.target.historyIndex + 1)
|
|
322
|
-
: history);
|
|
323
|
-
}
|
|
324
|
-
function attachGetLinked(result, context, fields, includeLinked) {
|
|
325
|
-
const includeLinkedFiles = includeLinked || fieldsInclude(fields, "linked.files");
|
|
326
|
-
const includeLinkedTests = includeLinked || fieldsInclude(fields, "linked.tests");
|
|
327
|
-
const includeLinkedDocs = includeLinked || fieldsInclude(fields, "linked.docs");
|
|
328
|
-
if (!includeLinked &&
|
|
329
|
-
!includeLinkedFiles &&
|
|
330
|
-
!includeLinkedTests &&
|
|
331
|
-
!includeLinkedDocs) {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
result.linked = {
|
|
335
|
-
files: includeLinkedFiles ? (context.metadata.files ?? []) : [],
|
|
336
|
-
tests: includeLinkedTests ? (context.metadata.tests ?? []) : [],
|
|
337
|
-
docs: includeLinkedDocs ? (context.metadata.docs ?? []) : [],
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
/** Enumerate hierarchy metadata only when the caller explicitly requested a child rollup. */
|
|
341
|
-
async function buildGetChildrenRollup(context, includeChildren) {
|
|
342
|
-
if (!includeChildren) {
|
|
343
|
-
return undefined;
|
|
344
|
-
}
|
|
345
|
-
const statusRegistry = resolveRuntimeStatusRegistry(context.settings.schema);
|
|
346
|
-
const corpus = await listAllItemMetadataLight(context.pmRoot, context.settings.item_format, context.typeToFolder, undefined, context.settings.schema);
|
|
347
|
-
return buildItemChildrenRollup(context.locatedId, corpus, statusRegistry);
|
|
348
|
-
}
|
|
349
|
-
function attachGetSchedule(result, context, fields, includeSchedule) {
|
|
350
|
-
if (!includeSchedule) {
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
const schedule = buildItemSchedule(context.metadata);
|
|
354
|
-
if (!schedule) {
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
if (fields === null || fieldsInclude(fields, "schedule")) {
|
|
358
|
-
result.schedule = schedule;
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
result.schedule = Object.fromEntries(Object.entries(schedule).filter(([key]) => fields.some((field) => normalizeGetField(field) === `schedule.${key}`)));
|
|
362
|
-
}
|
|
363
|
-
async function buildGetTree(context, options, treeDepth, global) {
|
|
364
|
-
if (options.tree !== true) {
|
|
365
|
-
return undefined;
|
|
366
|
-
}
|
|
367
|
-
const subtree = await runList(undefined, {
|
|
368
|
-
parent: context.locatedId,
|
|
369
|
-
tree: true,
|
|
370
|
-
treeDepth: treeDepth === undefined ? undefined : String(treeDepth),
|
|
371
|
-
full: true,
|
|
372
|
-
}, global);
|
|
373
|
-
return {
|
|
374
|
-
root_id: context.locatedId,
|
|
375
|
-
root_title: context.metadata.title,
|
|
376
|
-
depth_limit: treeDepth ?? null,
|
|
377
|
-
count: subtree.count,
|
|
378
|
-
items: subtree.items.map((entry) => toItemRecord(entry)),
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
/** Implements run get for the public runtime surface of this module. */
|
|
382
|
-
export async function runGet(id, global, options = {}) {
|
|
383
|
-
const projection = resolveGetProjection(options, id);
|
|
384
|
-
const context = await loadGetItemContext(id, global, options.at);
|
|
385
|
-
validateGetProjectionFields(projection.fields, context.settings, context.historical !== undefined, context.locatedId);
|
|
386
|
-
const includeBody = shouldIncludeGetField({ ...projection, field: "body" });
|
|
387
|
-
const includeLinked = shouldIncludeGetField({
|
|
388
|
-
...projection,
|
|
389
|
-
field: "linked",
|
|
390
|
-
});
|
|
391
|
-
const includeClaimState = shouldIncludeGetField({
|
|
392
|
-
...projection,
|
|
393
|
-
field: "claim_state",
|
|
394
|
-
});
|
|
395
|
-
const includeChildren = context.historical === undefined &&
|
|
396
|
-
(projection.fieldProjection
|
|
397
|
-
? fieldsIncludeRoot(projection.fields, "children")
|
|
398
|
-
: projection.depth === "deep" &&
|
|
399
|
-
shouldAutoIncludeGetChildren(context.metadata.type));
|
|
400
|
-
const includeSchedule = projection.fieldProjection
|
|
401
|
-
? fieldsIncludeRoot(projection.fields, "schedule")
|
|
402
|
-
: projection.depth !== "brief";
|
|
403
|
-
const claimState = await resolveGetClaimState(context, includeClaimState);
|
|
404
|
-
const result = {
|
|
405
|
-
item: projection.fieldProjection
|
|
406
|
-
? projectItemForFields(context.metadata, projection.fields)
|
|
407
|
-
: projectItemForDepth(context.metadata, projection.depth),
|
|
408
|
-
};
|
|
409
|
-
if (includeBody) {
|
|
410
|
-
result.item.body = context.body;
|
|
411
|
-
}
|
|
412
|
-
attachGetLinked(result, context, projection.fields, includeLinked);
|
|
413
|
-
if (claimState) {
|
|
414
|
-
result.claim_state = claimState;
|
|
415
|
-
}
|
|
416
|
-
attachGetSchedule(result, context, projection.fields, includeSchedule);
|
|
417
|
-
const children = await buildGetChildrenRollup(context, includeChildren);
|
|
418
|
-
if (children !== undefined) {
|
|
419
|
-
result.children = children;
|
|
420
|
-
}
|
|
421
|
-
const tree = await buildGetTree(context, options, projection.treeDepth, global);
|
|
422
|
-
if (tree !== undefined) {
|
|
423
|
-
result.tree = tree;
|
|
424
|
-
}
|
|
425
|
-
if (context.historical) {
|
|
426
|
-
result.reconstructed = true;
|
|
427
|
-
result.as_of_version = context.historical.as_of_version;
|
|
428
|
-
result.as_of_timestamp = context.historical.as_of_timestamp;
|
|
429
|
-
}
|
|
430
|
-
if (context.historical === undefined) {
|
|
431
|
-
try {
|
|
432
|
-
await recordContextUsageTouches({
|
|
433
|
-
pmRoot: context.pmRoot,
|
|
434
|
-
author: resolveAuthor(undefined, context.settings.author_default),
|
|
435
|
-
itemIds: [context.locatedId],
|
|
436
|
-
intent: "get",
|
|
437
|
-
});
|
|
438
|
-
}
|
|
439
|
-
catch {
|
|
440
|
-
// Derived usage feedback must never make the source-of-truth read fail.
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
registerOutputMaterialFieldGroups(result, itemMaterialFieldGroups(context.metadata, context.body));
|
|
444
|
-
return result;
|
|
445
|
-
}
|
|
446
|
-
/** Public contract for test-only get command policy helpers. */
|
|
447
|
-
export const _testOnlyGetCommand = {
|
|
448
|
-
shouldAutoIncludeGetChildren,
|
|
449
|
-
};
|
|
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]="26bf8487-2515-5885-b6de-56ba6292fb65")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{getActiveExtensionRegistrations,toItemRecord,resolveItemTypeRegistry,resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry,EXIT_CODE,TYPE_TO_FOLDER,PmCliError,buildItemNotFoundError,listAllItemMetadataLight,locateItem,readLocatedItem,getHistoryPath,resolvePmRoot,readSettings,resolveAuthor}from"../runtime-primitives.js";import{readHistoryEntries}from"../history-read.js";import{renderPmCommand}from"../command-line.js";import{recordContextUsageTouches}from"../context-usage.js";import{buildItemChildrenRollup}from"../item-children.js";import{buildItemSchedule}from"../item-schedule.js";import{getItemAt}from"../history-read.js";import{parseIntegerLimit}from"./parsers.js";import{runList}from"./list.js";import{registerOutputMaterialFieldGroups}from"../output-projection.js";import{GET_DEPTH_VALUES,listGetProjectionFields}from"./projection-contracts.js";import{GET_DEPTH_VALUES as GET_DEPTH_VALUES2,listGetProjectionFields as listGetProjectionFields2}from"./projection-contracts.js";const AUTOMATIC_CHILD_ROLLUP_TYPES=new Set(["epic","feature","milestone","plan"]);const BUILTIN_ITEM_TYPES=new Set(Object.keys(TYPE_TO_FOLDER).map(type=>type.toLowerCase()));function itemCollectionCounts(item){const lengths=Object.fromEntries(["comments","notes","learnings","files","tests","docs","reminders","events"].map(key=>[key,item[key]?.length??0]));return lengths}function itemMaterialFieldGroups(item,body){const collectionCounts=itemCollectionCounts(item);return[...body.length>0?["body"]:[],...Object.entries(collectionCounts).flatMap(([name,count])=>count>0?[name]:[]),...collectionCounts.files+collectionCounts.tests+collectionCounts.docs>0?["linked"]:[],"children",...typeof item.assignee==="string"&&item.assignee.trim().length>0?["claim_state"]:[],...buildItemSchedule(item)?["schedule"]:[]]}function shouldAutoIncludeGetChildren(itemType){const normalizedType=itemType.trim().toLowerCase();return normalizedType.length>0&&(AUTOMATIC_CHILD_ROLLUP_TYPES.has(normalizedType)||!BUILTIN_ITEM_TYPES.has(normalizedType))}function toClaimHistoryContext(entry){return{ts:entry.ts,author:entry.author,message:entry.message??null}}function resolveClaimStateContext(assigneeValue,history){const assignee=assigneeValue?.trim();const normalizedAssignee=assignee&&assignee.length>0?assignee:null;const lastClaim=[...history].reverse().find(entry=>entry.op==="claim");const lastRelease=[...history].reverse().find(entry=>entry.op==="release");return{claimed:normalizedAssignee!==null,assignee:normalizedAssignee,last_claim:lastClaim?toClaimHistoryContext(lastClaim):null,last_release:lastRelease?toClaimHistoryContext(lastRelease):null}}function parseGetDepth(raw){if(raw===void 0||raw.trim().length===0){return"standard"}const normalized=raw.trim().toLowerCase();if(normalized==="full"){return"deep"}if(GET_DEPTH_VALUES.includes(normalized)){return normalized}throw new PmCliError("Get --depth must be one of brief|standard|deep|full",EXIT_CODE.USAGE)}function projectItemForDepth(item,depth){const collectionCounts=itemCollectionCounts(item);if(depth==="deep"){return{...item,comments:item.comments??[],notes:item.notes??[],learnings:item.learnings??[],files:item.files??[],tests:item.tests??[],docs:item.docs??[],reminders:item.reminders??[],events:item.events??[],notes_count:collectionCounts.notes,tests_count:collectionCounts.tests,collection_counts:collectionCounts}}const{comments:_comments,notes:_notes,learnings:_learnings,files:_files,tests:_tests,docs:_docs,reminders:_reminders,events:_events,...projected}=item;return{...projected,notes_count:item.notes?.length??0,tests_count:item.tests?.length??0,collection_counts:collectionCounts}}function parseGetFields(raw){if(raw===void 0){return null}const fields=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(fields.length===0){throw new PmCliError("Get --fields requires a comma-separated list of field names",EXIT_CODE.USAGE)}return fields}function normalizeGetField(field){return field.startsWith("item.")?field.slice("item.".length):field}function validateGetFields(fields,runtimeMetadataKeys,id){if(fields===null){return}const allowedValues=listGetProjectionFields(runtimeMetadataKeys);const allowed=new Set(allowedValues);const unknown=fields.filter(field=>{const normalized=normalizeGetField(field);return!allowed.has(field)&&!allowed.has(normalized)});if(unknown.length>0){const suggestedRetryArguments=["get",id,"--fields","id,title,status"];throw new PmCliError(`Unknown get --fields value(s): ${unknown.join(", ")}`,EXIT_CODE.USAGE,{code:"unknown_field_projection",examples:["pm get <id> --fields id,title,status,type,updated_at","pm get <id> --fields id,title,claim_state","pm get <id> --fields id,title,body,linked.files"],recovery:{allowed_values:allowedValues,suggested_retry:renderPmCommand(suggestedRetryArguments),suggested_retry_args:suggestedRetryArguments}})}}const EMPTY_PROJECTED_COLLECTION_FIELDS=new Set(["comments","notes","learnings","files","tests","test_runs","docs","reminders","events","dependencies","plan_steps","plan_decisions","plan_discoveries","plan_validation"]);function projectedMetadataValue(source,counts,field){if(Object.hasOwn(counts,field))return counts[field];if(source[field]!==void 0)return source[field];return EMPTY_PROJECTED_COLLECTION_FIELDS.has(field)?[]:void 0}function projectItemForFields(item,fields){const source=toItemRecord(item);const omittedCounts={notes_count:item.notes?.length??0,tests_count:item.tests?.length??0,collection_counts:itemCollectionCounts(item)};const projected={id:item.id};for(const field of fields){const normalized=normalizeGetField(field);if(normalized==="body"||normalized==="linked"||normalized.startsWith("linked.")||normalized==="claim_state"||normalized.startsWith("claim_state.")||normalized==="children"||normalized.startsWith("children.")||normalized==="schedule"||normalized.startsWith("schedule.")){continue}projected[normalized]=projectedMetadataValue(source,omittedCounts,normalized)}return projected}function fieldsInclude(fields,name){return fields?.some(field=>field===name||field===`item.${name}`)??false}function fieldsIncludeRoot(fields,name){return fields.some(field=>{const normalized=normalizeGetField(field);return normalized===name||normalized.startsWith(`${name}.`)})}function resolveGetProjection(options,id){if(options.full&&(options.fields!==void 0||options.depth!==void 0)){throw new PmCliError("Get projection options are mutually exclusive; remove the extra projection flag and retry.",EXIT_CODE.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:renderPmCommand(["get",id,"--full"]),suggested_retry_args:["get",id,"--full"]}})}if(options.tree!==true&&options.treeDepth!==void 0){throw new PmCliError("Get --tree-depth requires --tree",EXIT_CODE.USAGE)}if(options.at!==void 0&&options.tree===true){throw new PmCliError("Get --at cannot be combined with --tree because workspace-level historical projections are not yet indexed.",EXIT_CODE.USAGE)}return{depth:options.full?"deep":parseGetDepth(options.depth),treeDepth:options.tree===true?parseIntegerLimit(options.treeDepth,"--tree-depth"):void 0,fields:parseGetFields(options.fields),fieldProjection:options.fields!==void 0}}async function loadGetItemContext(id,global2,at){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());if(at!==void 0){const historical=await getItemAt(id,at,{pmRoot:global2.path});return{pmRoot,settings,typeToFolder:typeRegistry.type_to_folder,locatedId:historical.document.metadata.id,metadata:historical.document.metadata,body:historical.document.body,historical}}const located=await locateItem(pmRoot,id,settings.id_prefix,settings.item_format,typeRegistry.type_to_folder);if(!located){throw await buildItemNotFoundError(pmRoot,id,settings.id_prefix,typeRegistry.type_to_folder)}const loaded=await readLocatedItem(located,{schema:settings.schema});return{pmRoot,settings,typeToFolder:typeRegistry.type_to_folder,locatedId:located.id,metadata:loaded.document.metadata,body:loaded.document.body}}function validateGetProjectionFields(fields,settings,historical,id){const runtimeMetadataKeys=resolveRuntimeFieldRegistry(settings.schema).definitions.map(field=>field.metadata_key);validateGetFields(fields,runtimeMetadataKeys,id);if(historical&&fieldsIncludeRoot(fields??[],"children")){throw new PmCliError("Get --at cannot project children because workspace-level historical relationships are not yet indexed.",EXIT_CODE.USAGE)}}function shouldIncludeGetField(params){const{fieldProjection,depth,fields,field}=params;if(fieldProjection){if(field==="body"||field==="linked"){return fieldsInclude(fields,field)}return fieldsIncludeRoot(fields,field)}return depth!=="brief"}async function resolveGetClaimState(context,includeClaimState){if(!includeClaimState){return void 0}const historyPath=getHistoryPath(context.pmRoot,context.locatedId);const history=await readHistoryEntries(historyPath,context.locatedId);return resolveClaimStateContext(context.metadata.assignee,context.historical?history.slice(0,context.historical.target.historyIndex+1):history)}function attachGetLinked(result,context,fields,includeLinked){const includeLinkedFiles=includeLinked||fieldsInclude(fields,"linked.files");const includeLinkedTests=includeLinked||fieldsInclude(fields,"linked.tests");const includeLinkedDocs=includeLinked||fieldsInclude(fields,"linked.docs");if(!includeLinked&&!includeLinkedFiles&&!includeLinkedTests&&!includeLinkedDocs){return}result.linked={files:includeLinkedFiles?context.metadata.files??[]:[],tests:includeLinkedTests?context.metadata.tests??[]:[],docs:includeLinkedDocs?context.metadata.docs??[]:[]}}async function buildGetChildrenRollup(context,includeChildren){if(!includeChildren){return void 0}const statusRegistry=resolveRuntimeStatusRegistry(context.settings.schema);const corpus=await listAllItemMetadataLight(context.pmRoot,context.settings.item_format,context.typeToFolder,void 0,context.settings.schema);return buildItemChildrenRollup(context.locatedId,corpus,statusRegistry)}function attachGetSchedule(result,context,fields,includeSchedule){if(!includeSchedule){return}const schedule=buildItemSchedule(context.metadata);if(!schedule){return}if(fields===null||fieldsInclude(fields,"schedule")){result.schedule=schedule;return}result.schedule=Object.fromEntries(Object.entries(schedule).filter(([key])=>fields.some(field=>normalizeGetField(field)===`schedule.${key}`)))}async function buildGetTree(context,options,treeDepth,global2){if(options.tree!==true){return void 0}const subtree=await runList(void 0,{parent:context.locatedId,tree:true,treeDepth:treeDepth===void 0?void 0:String(treeDepth),full:true},global2);return{root_id:context.locatedId,root_title:context.metadata.title,depth_limit:treeDepth??null,count:subtree.count,items:subtree.items.map(entry=>toItemRecord(entry))}}async function runGet(id,global2,options={}){const projection=resolveGetProjection(options,id);const context=await loadGetItemContext(id,global2,options.at);validateGetProjectionFields(projection.fields,context.settings,context.historical!==void 0,context.locatedId);const includeBody=shouldIncludeGetField({...projection,field:"body"});const includeLinked=shouldIncludeGetField({...projection,field:"linked"});const includeClaimState=shouldIncludeGetField({...projection,field:"claim_state"});const includeChildren=context.historical===void 0&&(projection.fieldProjection?fieldsIncludeRoot(projection.fields,"children"):projection.depth==="deep"&&shouldAutoIncludeGetChildren(context.metadata.type));const includeSchedule=projection.fieldProjection?fieldsIncludeRoot(projection.fields,"schedule"):projection.depth!=="brief";const claimState=await resolveGetClaimState(context,includeClaimState);const result={item:projection.fieldProjection?projectItemForFields(context.metadata,projection.fields):projectItemForDepth(context.metadata,projection.depth)};if(includeBody){result.item.body=context.body}attachGetLinked(result,context,projection.fields,includeLinked);if(claimState){result.claim_state=claimState}attachGetSchedule(result,context,projection.fields,includeSchedule);const children=await buildGetChildrenRollup(context,includeChildren);if(children!==void 0){result.children=children}const tree=await buildGetTree(context,options,projection.treeDepth,global2);if(tree!==void 0){result.tree=tree}if(context.historical){result.reconstructed=true;result.as_of_version=context.historical.as_of_version;result.as_of_timestamp=context.historical.as_of_timestamp}if(context.historical===void 0){try{await recordContextUsageTouches({pmRoot:context.pmRoot,author:resolveAuthor(void 0,context.settings.author_default),itemIds:[context.locatedId],intent:"get"})}catch{}}registerOutputMaterialFieldGroups(result,itemMaterialFieldGroups(context.metadata,context.body));return result}const _testOnlyGetCommand={shouldAutoIncludeGetChildren};export{GET_DEPTH_VALUES2 as GET_DEPTH_VALUES,_testOnlyGetCommand,listGetProjectionFields2 as listGetProjectionFields,runGet};
|
|
450
2
|
//# sourceMappingURL=get.js.map
|
|
451
|
-
//# debugId=88732a1d-ae5a-5dfb-93d6-9659cb6f05c3
|