@unbrained/pm-cli 2026.9.6 → 2026.9.8
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 +5 -0
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +218 -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.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-3BZZA6A3.js +5 -0
- package/dist/cli-bundle/chunks/chunk-AMRDVX36.js +235 -0
- package/dist/cli-bundle/chunks/chunk-DAM4CBBR.js +2202 -0
- package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FLDWYEND.js +77 -0
- package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-G5ADGQ2D.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-JAAEYHUA.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-JX4DH4WC.js → chunk-KR3RP4FH.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-LEZOUXG6.js +2 -0
- package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
- package/dist/cli-bundle/chunks/chunk-QOEKOECV.js +29 -0
- package/dist/cli-bundle/chunks/chunk-RHSFOMHU.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XOD2PCB6.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-YVEQ2AMO.js} +4 -4
- package/dist/cli-bundle/chunks/register-list-query-KSK3R63M.js +11 -0
- package/dist/cli-bundle/chunks/register-mutation-IQ5C7U6O.js +20 -0
- package/dist/cli-bundle/chunks/{register-operations-I5W3KMGB.js → register-operations-DWVHR2NC.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-BQ5SVD4B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-3WRPWLA7.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-7MBUII7U.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-COPBO5HW.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-DUN4IXYN.js +20 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-EE5QSM4Z.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-HJVARYM3.js +6 -0
- package/dist/cli-bundle/focused-chunks/chunk-IAUOUGVR.js +177 -0
- package/dist/cli-bundle/focused-chunks/chunk-KOOMJ54F.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-MZDXX7JY.js +56 -0
- package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-OPFHFGDD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QHNETP77.js +9 -0
- package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-RMWES4M6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RXT4P5QH.js +10 -0
- package/dist/cli-bundle/focused-chunks/chunk-SDOL6FM2.js +12 -0
- package/dist/cli-bundle/focused-chunks/chunk-SQV4AAUC.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-PEFABF7E.js → chunk-WE3IUNIW.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YALOUBWJ.js +2 -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 +29 -29
- 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/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.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.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 +157 -837
- 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.js +1 -2261
- package/dist/sdk/governance/workspace-position.js +1 -163
- package/dist/sdk/governance.d.ts +1 -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 -0
- 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.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.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.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.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.js +1 -4
- package/dist/sdk/runtime-stats-options.js +1 -38
- 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.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.js +1 -245
- package/docs/AGENT_GUIDE.md +1 -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 +3 -0
- package/docs/RELEASING.md +1 -0
- package/docs/SCRIPTING.md +21 -0
- package/docs/TESTING.md +23 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +5 -5
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
- package/marketplace.json +2 -2
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-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-BAX2BYUW.js +0 -2111
- package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
- 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-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-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,637 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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]="99d39b7c-ec26-5c95-85c0-ac28112a6fe6")}catch(e){}}();
|
|
8
|
-
import { Option } from "commander";
|
|
9
|
-
/** Implements normalize extension command path for the public runtime surface of this module. */
|
|
10
|
-
export function normalizeExtensionCommandPath(commandPath) {
|
|
11
|
-
return commandPath
|
|
12
|
-
.trim()
|
|
13
|
-
.toLowerCase()
|
|
14
|
-
.split(/\s+/)
|
|
15
|
-
.filter((part) => part.length > 0)
|
|
16
|
-
.join(" ");
|
|
17
|
-
}
|
|
18
|
-
/** Build verified flattened-alias mappings within one extension and layer. */
|
|
19
|
-
export function buildCanonicalExtensionAliases(handlers, definitions) {
|
|
20
|
-
const aliases = new Map();
|
|
21
|
-
for (const handler of handlers) {
|
|
22
|
-
const alias = normalizeExtensionCommandPath(handler.command);
|
|
23
|
-
for (const definition of definitions) {
|
|
24
|
-
if (definition.layer !== handler.layer ||
|
|
25
|
-
definition.name !== handler.name) {
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
const canonical = normalizeExtensionCommandPath(definition.command);
|
|
29
|
-
const parts = canonical.split(" ");
|
|
30
|
-
const action = parts.at(-1);
|
|
31
|
-
const suffix = parts.slice(1).join(" ");
|
|
32
|
-
const expectedAlias = suffix
|
|
33
|
-
? `${parts[0]}-${action} ${suffix}`
|
|
34
|
-
: `${parts[0]}-${action}`;
|
|
35
|
-
if (action &&
|
|
36
|
-
alias === expectedAlias) {
|
|
37
|
-
aliases.set(alias, canonical);
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return aliases;
|
|
43
|
-
}
|
|
44
|
-
/** Resolve whether a registered extension flag consumes a value. */
|
|
45
|
-
export function extensionFlagTakesValueForInvocation(invocationArgv, commandName, normalizedMissing, descriptors) {
|
|
46
|
-
if (!commandName || !normalizedMissing) {
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
let descriptor;
|
|
50
|
-
let matchedTokenCount = 0;
|
|
51
|
-
for (const [index, token] of invocationArgv.entries()) {
|
|
52
|
-
if (token !== commandName) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
const commandTokens = invocationArgv.slice(index);
|
|
56
|
-
for (const [path, candidate] of descriptors.entries()) {
|
|
57
|
-
const pathTokens = path.split(" ");
|
|
58
|
-
if (pathTokens.length > matchedTokenCount &&
|
|
59
|
-
pathTokens.every((pathToken, pathIndex) => commandTokens[pathIndex] === pathToken)) {
|
|
60
|
-
descriptor = candidate;
|
|
61
|
-
matchedTokenCount = pathTokens.length;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
const flag = descriptor?.flags.find((candidate) => candidate.long === normalizedMissing ||
|
|
66
|
-
candidate.short === normalizedMissing);
|
|
67
|
-
if (!flag) {
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
70
|
-
return resolveExtensionFlagArity(flag).takesValue;
|
|
71
|
-
}
|
|
72
|
-
function toNonEmptyFlagString(value) {
|
|
73
|
-
if (typeof value !== "string") {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
const trimmed = value.trim();
|
|
77
|
-
return trimmed.length > 0 ? trimmed : null;
|
|
78
|
-
}
|
|
79
|
-
function toOptionalBoolean(value) {
|
|
80
|
-
return typeof value === "boolean" ? value : undefined;
|
|
81
|
-
}
|
|
82
|
-
/** Canonical value-arity contract shared by extension invocation recovery, Commander parsing, and structured help. */
|
|
83
|
-
export function resolveExtensionFlagArity(definition) {
|
|
84
|
-
const valueType = toNonEmptyFlagString(definition.value_type) ??
|
|
85
|
-
toNonEmptyFlagString(definition.type);
|
|
86
|
-
const declaredValueName = toNonEmptyFlagString(definition.value_name);
|
|
87
|
-
const takesValue = valueType !== "boolean" &&
|
|
88
|
-
(declaredValueName !== null ||
|
|
89
|
-
valueType !== null ||
|
|
90
|
-
toOptionalBoolean(definition.required) === true ||
|
|
91
|
-
toOptionalBoolean(definition.list) === true);
|
|
92
|
-
return {
|
|
93
|
-
takesValue,
|
|
94
|
-
valueName: takesValue ? (declaredValueName ?? "value") : null,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
function formatDynamicExtensionFlagHelpLine(definition) {
|
|
98
|
-
const visible = toOptionalBoolean(definition.visible);
|
|
99
|
-
if (visible === false) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
const longName = toNonEmptyFlagString(definition.long);
|
|
103
|
-
if (!longName || !longName.startsWith("--") || longName.length < 3) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
const shortName = toNonEmptyFlagString(definition.short);
|
|
107
|
-
const shortPrefix = shortName && shortName.startsWith("-") && !shortName.startsWith("--")
|
|
108
|
-
? `${shortName}, `
|
|
109
|
-
: "";
|
|
110
|
-
const valueName = toNonEmptyFlagString(definition.value_name);
|
|
111
|
-
const valueSuffix = valueName ? ` <${valueName}>` : "";
|
|
112
|
-
const description = toNonEmptyFlagString(definition.description) ??
|
|
113
|
-
"Extension-provided option.";
|
|
114
|
-
const markers = [];
|
|
115
|
-
if (toOptionalBoolean(definition.required) === true) {
|
|
116
|
-
markers.push("required");
|
|
117
|
-
}
|
|
118
|
-
if (toOptionalBoolean(definition.enabled) === false) {
|
|
119
|
-
markers.push("disabled");
|
|
120
|
-
}
|
|
121
|
-
const markerSuffix = markers.length > 0 ? ` [${markers.join(", ")}]` : "";
|
|
122
|
-
return `${shortPrefix}${longName}${valueSuffix} ${description}${markerSuffix}`;
|
|
123
|
-
}
|
|
124
|
-
function buildDynamicExtensionFlagHelp(definitions) {
|
|
125
|
-
const lines = [
|
|
126
|
-
...new Set(definitions
|
|
127
|
-
.map(formatDynamicExtensionFlagHelpLine)
|
|
128
|
-
.filter((line) => line !== null)),
|
|
129
|
-
].sort((left, right) => left.localeCompare(right));
|
|
130
|
-
if (lines.length === 0) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
return `\nExtension-provided flags:\n ${lines.join("\n ")}`;
|
|
134
|
-
}
|
|
135
|
-
/** Implements collect dynamic extension flag help by command for the public runtime surface of this module. */
|
|
136
|
-
export function collectDynamicExtensionFlagHelpByCommand(registrations) {
|
|
137
|
-
const grouped = new Map();
|
|
138
|
-
for (const registration of registrations) {
|
|
139
|
-
const commandPath = normalizeExtensionCommandPath(registration.target_command);
|
|
140
|
-
if (commandPath.length === 0) {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
const existing = grouped.get(commandPath) ?? [];
|
|
144
|
-
existing.push(...registration.flags);
|
|
145
|
-
grouped.set(commandPath, existing);
|
|
146
|
-
}
|
|
147
|
-
const entries = [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right));
|
|
148
|
-
const helpByCommand = new Map();
|
|
149
|
-
for (const [commandPath, definitions] of entries) {
|
|
150
|
-
const helpText = buildDynamicExtensionFlagHelp(definitions);
|
|
151
|
-
if (!helpText) {
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
helpByCommand.set(commandPath, helpText);
|
|
155
|
-
}
|
|
156
|
-
return helpByCommand;
|
|
157
|
-
}
|
|
158
|
-
function normalizeExtensionCommandAction(commandPath, action) {
|
|
159
|
-
if (typeof action !== "string" || action.trim().length === 0) {
|
|
160
|
-
return commandPath.replace(/\s+/g, "-");
|
|
161
|
-
}
|
|
162
|
-
return action.trim().toLowerCase();
|
|
163
|
-
}
|
|
164
|
-
function normalizeExtensionCommandStringList(values) {
|
|
165
|
-
if (!Array.isArray(values)) {
|
|
166
|
-
return [];
|
|
167
|
-
}
|
|
168
|
-
const normalized = [];
|
|
169
|
-
const seen = new Set();
|
|
170
|
-
for (const value of values) {
|
|
171
|
-
if (typeof value !== "string") {
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
const trimmed = value.trim();
|
|
175
|
-
if (trimmed.length === 0 || seen.has(trimmed)) {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
seen.add(trimmed);
|
|
179
|
-
normalized.push(trimmed);
|
|
180
|
-
}
|
|
181
|
-
return normalized;
|
|
182
|
-
}
|
|
183
|
-
function normalizeExtensionCommandArguments(values) {
|
|
184
|
-
if (!Array.isArray(values)) {
|
|
185
|
-
return [];
|
|
186
|
-
}
|
|
187
|
-
return values
|
|
188
|
-
.map((value) => {
|
|
189
|
-
const name = typeof value.name === "string" ? value.name.trim() : "";
|
|
190
|
-
if (name.length === 0) {
|
|
191
|
-
return null;
|
|
192
|
-
}
|
|
193
|
-
const normalized = {
|
|
194
|
-
name,
|
|
195
|
-
required: value.required === true,
|
|
196
|
-
variadic: value.variadic === true,
|
|
197
|
-
};
|
|
198
|
-
if (typeof value.description === "string" &&
|
|
199
|
-
value.description.trim().length > 0) {
|
|
200
|
-
normalized.description = value.description.trim();
|
|
201
|
-
}
|
|
202
|
-
return normalized;
|
|
203
|
-
})
|
|
204
|
-
.filter((entry) => entry !== null);
|
|
205
|
-
}
|
|
206
|
-
function collectExtensionDefinitionsByCommand(commandDefinitions) {
|
|
207
|
-
const definitionsByCommand = new Map();
|
|
208
|
-
for (const definition of commandDefinitions) {
|
|
209
|
-
const commandPath = normalizeExtensionCommandPath(definition.command);
|
|
210
|
-
if (commandPath.length === 0) {
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
const description = typeof definition.description === "string" &&
|
|
214
|
-
definition.description.trim().length > 0
|
|
215
|
-
? definition.description.trim()
|
|
216
|
-
: undefined;
|
|
217
|
-
const intent = typeof definition.intent === "string" &&
|
|
218
|
-
definition.intent.trim().length > 0
|
|
219
|
-
? definition.intent.trim()
|
|
220
|
-
: undefined;
|
|
221
|
-
definitionsByCommand.set(commandPath, {
|
|
222
|
-
command: commandPath,
|
|
223
|
-
action: normalizeExtensionCommandAction(commandPath, definition.action),
|
|
224
|
-
description,
|
|
225
|
-
intent,
|
|
226
|
-
examples: normalizeExtensionCommandStringList(definition.examples),
|
|
227
|
-
failure_hints: normalizeExtensionCommandStringList(definition.failure_hints),
|
|
228
|
-
arguments: normalizeExtensionCommandArguments(definition.arguments),
|
|
229
|
-
flags: [],
|
|
230
|
-
tier: definition.tier ?? "standard",
|
|
231
|
-
family: definition.family ?? "extensions",
|
|
232
|
-
source: {
|
|
233
|
-
layer: definition.layer,
|
|
234
|
-
name: definition.name,
|
|
235
|
-
package: definition.source_package,
|
|
236
|
-
},
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
return definitionsByCommand;
|
|
240
|
-
}
|
|
241
|
-
function collectExtensionFlagsByCommand(flagRegistrations) {
|
|
242
|
-
const flagsByCommand = new Map();
|
|
243
|
-
for (const registration of flagRegistrations) {
|
|
244
|
-
const commandPath = normalizeExtensionCommandPath(registration.target_command);
|
|
245
|
-
if (commandPath.length === 0) {
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
const existing = flagsByCommand.get(commandPath) ?? [];
|
|
249
|
-
existing.push(...registration.flags);
|
|
250
|
-
flagsByCommand.set(commandPath, existing);
|
|
251
|
-
}
|
|
252
|
-
return flagsByCommand;
|
|
253
|
-
}
|
|
254
|
-
function collectExtensionHelpCommandSet(commandHandlers, definitionsByCommand, flagsByCommand) {
|
|
255
|
-
const commandSet = new Set();
|
|
256
|
-
for (const commandPath of commandHandlers) {
|
|
257
|
-
const normalized = normalizeExtensionCommandPath(commandPath);
|
|
258
|
-
if (normalized.length > 0) {
|
|
259
|
-
commandSet.add(normalized);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
for (const commandPath of definitionsByCommand.keys()) {
|
|
263
|
-
commandSet.add(commandPath);
|
|
264
|
-
}
|
|
265
|
-
for (const commandPath of flagsByCommand.keys()) {
|
|
266
|
-
commandSet.add(commandPath);
|
|
267
|
-
}
|
|
268
|
-
return commandSet;
|
|
269
|
-
}
|
|
270
|
-
/** Resolve the canonical nested command behind an auto-generated flattened
|
|
271
|
-
* extension alias such as `csv-export export` -> `csv export`. Package authors
|
|
272
|
-
* should not have to duplicate command metadata merely because a compatibility
|
|
273
|
-
* alias was registered by the host package. */
|
|
274
|
-
function resolveFlattenedAliasDescriptor(commandPath, definitionsByCommand, canonicalAliases) {
|
|
275
|
-
const canonical = canonicalAliases.get(commandPath);
|
|
276
|
-
return canonical ? definitionsByCommand.get(canonical) : undefined;
|
|
277
|
-
}
|
|
278
|
-
/** Implements collect extension command help descriptors for the public runtime surface of this module. */
|
|
279
|
-
export function collectExtensionCommandHelpDescriptors(commandHandlers, commandDefinitions, flagRegistrations, canonicalAliases = new Map()) {
|
|
280
|
-
const definitionsByCommand = collectExtensionDefinitionsByCommand(commandDefinitions);
|
|
281
|
-
const flagsByCommand = collectExtensionFlagsByCommand(flagRegistrations);
|
|
282
|
-
const commandSet = collectExtensionHelpCommandSet(commandHandlers, definitionsByCommand, flagsByCommand);
|
|
283
|
-
const descriptors = new Map();
|
|
284
|
-
const sortedCommands = [...commandSet].sort((left, right) => left.localeCompare(right));
|
|
285
|
-
for (const commandPath of sortedCommands) {
|
|
286
|
-
const definition = resolveFlattenedAliasDescriptor(commandPath, definitionsByCommand, canonicalAliases) ?? definitionsByCommand.get(commandPath);
|
|
287
|
-
const flags = flagsByCommand.get(commandPath) ??
|
|
288
|
-
(definition ? flagsByCommand.get(definition.command) : undefined) ??
|
|
289
|
-
[];
|
|
290
|
-
if (definition) {
|
|
291
|
-
descriptors.set(commandPath, {
|
|
292
|
-
...definition,
|
|
293
|
-
command: commandPath,
|
|
294
|
-
flags,
|
|
295
|
-
});
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
|
-
descriptors.set(commandPath, {
|
|
299
|
-
command: commandPath,
|
|
300
|
-
action: normalizeExtensionCommandAction(commandPath, undefined),
|
|
301
|
-
examples: [],
|
|
302
|
-
failure_hints: [],
|
|
303
|
-
arguments: [],
|
|
304
|
-
flags,
|
|
305
|
-
tier: "standard",
|
|
306
|
-
family: "extensions",
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
return descriptors;
|
|
310
|
-
}
|
|
311
|
-
function buildExtensionArgumentToken(argument) {
|
|
312
|
-
const variadicSuffix = argument.variadic ? "..." : "";
|
|
313
|
-
if (argument.required) {
|
|
314
|
-
return `<${argument.name}${variadicSuffix}>`;
|
|
315
|
-
}
|
|
316
|
-
return `[${argument.name}${variadicSuffix}]`;
|
|
317
|
-
}
|
|
318
|
-
/** Implements apply dynamic extension arguments for the public runtime surface of this module. */
|
|
319
|
-
export function applyDynamicExtensionArguments(command, descriptor) {
|
|
320
|
-
for (const argument of descriptor.arguments) {
|
|
321
|
-
command.argument(buildExtensionArgumentToken(argument), argument.description ?? "Extension argument.");
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
function normalizeDynamicExtensionOptionNames(definition) {
|
|
325
|
-
const visible = toOptionalBoolean(definition.visible);
|
|
326
|
-
if (visible === false) {
|
|
327
|
-
return null;
|
|
328
|
-
}
|
|
329
|
-
const longName = toNonEmptyFlagString(definition.long);
|
|
330
|
-
const shortName = toNonEmptyFlagString(definition.short);
|
|
331
|
-
const normalizedShort = shortName && shortName.startsWith("-") && !shortName.startsWith("--")
|
|
332
|
-
? shortName
|
|
333
|
-
: null;
|
|
334
|
-
const normalizedLong = longName && longName.startsWith("--") && longName.length > 2
|
|
335
|
-
? longName
|
|
336
|
-
: null;
|
|
337
|
-
const optionNames = [normalizedShort, normalizedLong].filter((entry) => entry !== null);
|
|
338
|
-
return optionNames.length > 0 ? optionNames : null;
|
|
339
|
-
}
|
|
340
|
-
function formatDynamicExtensionOptionFlags(definition) {
|
|
341
|
-
const optionNames = normalizeDynamicExtensionOptionNames(definition);
|
|
342
|
-
if (!optionNames) {
|
|
343
|
-
return null;
|
|
344
|
-
}
|
|
345
|
-
const { valueName } = resolveExtensionFlagArity(definition);
|
|
346
|
-
const optionValueSuffix = valueName ? ` <${valueName}>` : "";
|
|
347
|
-
return `${optionNames.join(", ")}${optionValueSuffix}`;
|
|
348
|
-
}
|
|
349
|
-
function formatDynamicExtensionParseOptionFlags(definition) {
|
|
350
|
-
const optionNames = normalizeDynamicExtensionOptionNames(definition);
|
|
351
|
-
if (!optionNames) {
|
|
352
|
-
return null;
|
|
353
|
-
}
|
|
354
|
-
const { valueName } = resolveExtensionFlagArity(definition);
|
|
355
|
-
const valueSuffix = valueName ? ` <${valueName}>` : "";
|
|
356
|
-
return `${optionNames.join(", ")}${valueSuffix}`;
|
|
357
|
-
}
|
|
358
|
-
function formatDynamicExtensionOptionDescription(definition) {
|
|
359
|
-
const description = toNonEmptyFlagString(definition.description) ??
|
|
360
|
-
"Extension-provided option.";
|
|
361
|
-
const markers = [];
|
|
362
|
-
if (toOptionalBoolean(definition.required) === true) {
|
|
363
|
-
markers.push("required");
|
|
364
|
-
}
|
|
365
|
-
if (toOptionalBoolean(definition.enabled) === false) {
|
|
366
|
-
markers.push("disabled");
|
|
367
|
-
}
|
|
368
|
-
const markerSuffix = markers.length > 0 ? ` [${markers.join(", ")}]` : "";
|
|
369
|
-
return `${description}${markerSuffix}`;
|
|
370
|
-
}
|
|
371
|
-
function commandAlreadyHasOption(command, definition) {
|
|
372
|
-
const longName = toNonEmptyFlagString(definition.long);
|
|
373
|
-
const shortName = toNonEmptyFlagString(definition.short);
|
|
374
|
-
return command.options.some((option) => {
|
|
375
|
-
const optionWithNames = option;
|
|
376
|
-
return ((longName !== null && optionWithNames.long === longName) ||
|
|
377
|
-
(shortName !== null && optionWithNames.short === shortName));
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
/** Implements apply dynamic extension flag options for the public runtime surface of this module. */
|
|
381
|
-
export function applyDynamicExtensionFlagOptions(command, definitions) {
|
|
382
|
-
for (const definition of definitions) {
|
|
383
|
-
if (commandAlreadyHasOption(command, definition)) {
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
const flags = formatDynamicExtensionParseOptionFlags(definition);
|
|
387
|
-
if (!flags) {
|
|
388
|
-
continue;
|
|
389
|
-
}
|
|
390
|
-
const description = formatDynamicExtensionOptionDescription(definition);
|
|
391
|
-
if (definition.list !== true) {
|
|
392
|
-
command.option(flags, description);
|
|
393
|
-
continue;
|
|
394
|
-
}
|
|
395
|
-
command.addOption(new Option(flags, description).argParser((value, previous = []) => [
|
|
396
|
-
...(Array.isArray(previous) ? previous : [previous]),
|
|
397
|
-
value,
|
|
398
|
-
]));
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Builds the "Extension-provided flags" help block for only the definitions that
|
|
403
|
-
* are NOT already rendered as real commander options on {@link command}. After
|
|
404
|
-
* {@link applyDynamicExtensionFlagOptions} registers extension flags as first
|
|
405
|
-
* class options, repeating them verbatim in an after-text block duplicated every
|
|
406
|
-
* flag in `--help` output; this filters those already-listed flags out so the
|
|
407
|
-
* block is emitted only when it carries flags the Options section does not.
|
|
408
|
-
*/
|
|
409
|
-
export function buildResidualDynamicExtensionFlagHelp(command, definitions) {
|
|
410
|
-
return buildDynamicExtensionFlagHelp(definitions.filter((definition) => !commandAlreadyHasOption(command, definition)));
|
|
411
|
-
}
|
|
412
|
-
function buildDynamicExtensionHelpOptionSummary(definition) {
|
|
413
|
-
const flags = formatDynamicExtensionOptionFlags(definition);
|
|
414
|
-
if (!flags) {
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
const longName = toNonEmptyFlagString(definition.long);
|
|
418
|
-
const shortName = toNonEmptyFlagString(definition.short);
|
|
419
|
-
const normalizedLong = longName && longName.startsWith("--") && longName.length > 2
|
|
420
|
-
? longName
|
|
421
|
-
: null;
|
|
422
|
-
const normalizedShort = shortName && shortName.startsWith("-") && !shortName.startsWith("--")
|
|
423
|
-
? shortName
|
|
424
|
-
: null;
|
|
425
|
-
const { takesValue, valueName } = resolveExtensionFlagArity(definition);
|
|
426
|
-
const required = toOptionalBoolean(definition.required) === true;
|
|
427
|
-
return {
|
|
428
|
-
flags,
|
|
429
|
-
long: normalizedLong,
|
|
430
|
-
short: normalizedShort,
|
|
431
|
-
description: formatDynamicExtensionOptionDescription(definition),
|
|
432
|
-
takes_value: takesValue,
|
|
433
|
-
value_required: takesValue,
|
|
434
|
-
value_name: valueName,
|
|
435
|
-
variadic: false,
|
|
436
|
-
required,
|
|
437
|
-
aliases: [],
|
|
438
|
-
alias_for: null,
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
/** Implements build dynamic extension help option summaries for the public runtime surface of this module. */
|
|
442
|
-
export function buildDynamicExtensionHelpOptionSummaries(descriptor) {
|
|
443
|
-
if (!descriptor) {
|
|
444
|
-
return [];
|
|
445
|
-
}
|
|
446
|
-
const summaries = [];
|
|
447
|
-
const seen = new Set();
|
|
448
|
-
for (const definition of descriptor.flags) {
|
|
449
|
-
const summary = buildDynamicExtensionHelpOptionSummary(definition);
|
|
450
|
-
if (!summary || seen.has(summary.flags)) {
|
|
451
|
-
continue;
|
|
452
|
-
}
|
|
453
|
-
seen.add(summary.flags);
|
|
454
|
-
summaries.push(summary);
|
|
455
|
-
}
|
|
456
|
-
return summaries;
|
|
457
|
-
}
|
|
458
|
-
/** Implements merge help option summaries for the public runtime surface of this module. */
|
|
459
|
-
export function mergeHelpOptionSummaries(base, extension) {
|
|
460
|
-
if (extension.length === 0) {
|
|
461
|
-
return base;
|
|
462
|
-
}
|
|
463
|
-
const merged = [...base];
|
|
464
|
-
const seen = new Set(base.map((entry) => entry.flags));
|
|
465
|
-
for (const entry of extension) {
|
|
466
|
-
if (seen.has(entry.flags)) {
|
|
467
|
-
continue;
|
|
468
|
-
}
|
|
469
|
-
seen.add(entry.flags);
|
|
470
|
-
merged.push(entry);
|
|
471
|
-
}
|
|
472
|
-
return merged;
|
|
473
|
-
}
|
|
474
|
-
/** Implements build dynamic extension command metadata help for the public runtime surface of this module. */
|
|
475
|
-
export function buildDynamicExtensionCommandMetadataHelp(descriptor) {
|
|
476
|
-
const lines = [];
|
|
477
|
-
if (descriptor.intent) {
|
|
478
|
-
lines.push(`Intent: ${descriptor.intent}`);
|
|
479
|
-
}
|
|
480
|
-
if (descriptor.action) {
|
|
481
|
-
lines.push(`Action contract: ${descriptor.action}`);
|
|
482
|
-
}
|
|
483
|
-
if (descriptor.examples.length > 0) {
|
|
484
|
-
lines.push("Examples:");
|
|
485
|
-
for (const example of descriptor.examples) {
|
|
486
|
-
lines.push(` - ${example}`);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
if (descriptor.failure_hints.length > 0) {
|
|
490
|
-
lines.push("Common failure hints:");
|
|
491
|
-
for (const hint of descriptor.failure_hints) {
|
|
492
|
-
lines.push(` - ${hint}`);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
if (lines.length === 0) {
|
|
496
|
-
return null;
|
|
497
|
-
}
|
|
498
|
-
return `\nExtension command metadata:\n ${lines.join("\n ")}`;
|
|
499
|
-
}
|
|
500
|
-
/** Implements command aliases for the public runtime surface of this module. */
|
|
501
|
-
export function commandAliases(command) {
|
|
502
|
-
const commandRecord = command;
|
|
503
|
-
if (typeof commandRecord.aliases === "function") {
|
|
504
|
-
return commandRecord
|
|
505
|
-
.aliases()
|
|
506
|
-
.map((value) => value.trim().toLowerCase())
|
|
507
|
-
.filter((value) => value.length > 0);
|
|
508
|
-
}
|
|
509
|
-
if (typeof commandRecord.alias === "function") {
|
|
510
|
-
const alias = commandRecord.alias();
|
|
511
|
-
if (typeof alias === "string" && alias.trim().length > 0) {
|
|
512
|
-
return [alias.trim().toLowerCase()];
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
if (Array.isArray(commandRecord._aliases)) {
|
|
516
|
-
return commandRecord._aliases
|
|
517
|
-
.map((value) => value.trim().toLowerCase())
|
|
518
|
-
.filter((value) => value.length > 0);
|
|
519
|
-
}
|
|
520
|
-
return [];
|
|
521
|
-
}
|
|
522
|
-
/** Implements find direct child command for the public runtime surface of this module. */
|
|
523
|
-
export function findDirectChildCommand(parent, name) {
|
|
524
|
-
const normalizedTarget = name.trim().toLowerCase();
|
|
525
|
-
return (parent.commands.find((entry) => {
|
|
526
|
-
if (entry.name().trim().toLowerCase() === normalizedTarget) {
|
|
527
|
-
return true;
|
|
528
|
-
}
|
|
529
|
-
return commandAliases(entry).includes(normalizedTarget);
|
|
530
|
-
}) ?? null);
|
|
531
|
-
}
|
|
532
|
-
/** Implements find command by path for the public runtime surface of this module. */
|
|
533
|
-
export function findCommandByPath(root, pathParts) {
|
|
534
|
-
let current = root;
|
|
535
|
-
for (const part of pathParts) {
|
|
536
|
-
const next = findDirectChildCommand(current, part);
|
|
537
|
-
if (!next) {
|
|
538
|
-
return null;
|
|
539
|
-
}
|
|
540
|
-
current = next;
|
|
541
|
-
}
|
|
542
|
-
return current;
|
|
543
|
-
}
|
|
544
|
-
const extensionCreatedCommands = new WeakSet();
|
|
545
|
-
/** Implements ensure command path for the public runtime surface of this module. */
|
|
546
|
-
export function ensureCommandPath(root, pathParts) {
|
|
547
|
-
if (pathParts.length === 0) {
|
|
548
|
-
return null;
|
|
549
|
-
}
|
|
550
|
-
let current = root;
|
|
551
|
-
for (let index = 0; index < pathParts.length; index += 1) {
|
|
552
|
-
const part = pathParts[index];
|
|
553
|
-
const existing = findDirectChildCommand(current, part);
|
|
554
|
-
if (existing) {
|
|
555
|
-
current = existing;
|
|
556
|
-
continue;
|
|
557
|
-
}
|
|
558
|
-
const created = current.command(part);
|
|
559
|
-
extensionCreatedCommands.add(created);
|
|
560
|
-
if (index < pathParts.length - 1) {
|
|
561
|
-
created.description("Extension-provided command group.");
|
|
562
|
-
// Without a handler, commander routes bare-group help through the error
|
|
563
|
-
// channel, which the root configureOutput intentionally swallows — the
|
|
564
|
-
// group would exit 0 in silence. Render help on stdout instead so agents
|
|
565
|
-
// always get subcommand discovery. A later terminal registration for the
|
|
566
|
-
// same path replaces this handler via Command.action().
|
|
567
|
-
created.action(() => {
|
|
568
|
-
created.help();
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
created.description("Extension-provided command path.");
|
|
573
|
-
}
|
|
574
|
-
current = created;
|
|
575
|
-
}
|
|
576
|
-
return current;
|
|
577
|
-
}
|
|
578
|
-
/** Describe the first core-owned command prefix that an extension path would shadow or graft beneath. */
|
|
579
|
-
export function findExtensionCommandPathCollision(root, pathParts) {
|
|
580
|
-
let current = root;
|
|
581
|
-
const traversed = [];
|
|
582
|
-
for (const part of pathParts) {
|
|
583
|
-
const existing = findDirectChildCommand(current, part);
|
|
584
|
-
if (!existing) {
|
|
585
|
-
return null;
|
|
586
|
-
}
|
|
587
|
-
traversed.push(part);
|
|
588
|
-
if (!extensionCreatedCommands.has(existing)) {
|
|
589
|
-
return {
|
|
590
|
-
core_path: traversed.join(" "),
|
|
591
|
-
extension_path: pathParts.join(" "),
|
|
592
|
-
};
|
|
593
|
-
}
|
|
594
|
-
current = existing;
|
|
595
|
-
}
|
|
596
|
-
return null;
|
|
597
|
-
}
|
|
598
|
-
/** Build an ownership-rich warning when an extension alias would shadow or graft beneath a core command. */
|
|
599
|
-
export function buildExtensionCommandCollisionWarning(root, commandPath, aliases, descriptor) {
|
|
600
|
-
const pathParts = commandPath.split(" ").filter((part) => part.length > 0);
|
|
601
|
-
const collision = findExtensionCommandPathCollision(root, pathParts);
|
|
602
|
-
// Direct canonical paths intentionally augment core help with extension flags
|
|
603
|
-
// and metadata while registerCommandPath preserves the core action handler.
|
|
604
|
-
// Canonical aliases and nested grafts cannot make that ownership distinction,
|
|
605
|
-
// so those paths are rejected instead.
|
|
606
|
-
if (!collision ||
|
|
607
|
-
(collision.core_path === commandPath && !aliases.has(commandPath))) {
|
|
608
|
-
return null;
|
|
609
|
-
}
|
|
610
|
-
const extensionOwner = descriptor?.source?.package ??
|
|
611
|
-
descriptor?.source?.name ??
|
|
612
|
-
"unknown-extension";
|
|
613
|
-
return (`extension_command_collision:${collision.extension_path}:` +
|
|
614
|
-
`core_owner=pm-cli:${collision.core_path}:extension_owner=${extensionOwner}`);
|
|
615
|
-
}
|
|
616
|
-
/** Collect deterministic extension command paths while reporting and excluding aliases that collide with core ownership. */
|
|
617
|
-
export function collectSafeExtensionCommandPaths(root, commandHandlers, descriptors, aliases, onCollision) {
|
|
618
|
-
return [
|
|
619
|
-
...new Set([...commandHandlers, ...descriptors.keys()]),
|
|
620
|
-
]
|
|
621
|
-
.filter((commandPath) => commandPath.trim().length > 0)
|
|
622
|
-
.sort((left, right) => left.localeCompare(right))
|
|
623
|
-
.filter((commandPath) => {
|
|
624
|
-
const warning = buildExtensionCommandCollisionWarning(root, commandPath, aliases, descriptors.get(commandPath));
|
|
625
|
-
if (!warning)
|
|
626
|
-
return true;
|
|
627
|
-
onCollision(warning);
|
|
628
|
-
return false;
|
|
629
|
-
});
|
|
630
|
-
}
|
|
631
|
-
/** Record and surface one extension collision with stable recovery guidance. */
|
|
632
|
-
export function reportExtensionCommandCollision(activationWarnings, report, warning) {
|
|
633
|
-
activationWarnings.push(warning);
|
|
634
|
-
report(`[pm] warning: ${warning}; core command preserved. Rename or namespace the extension command alias.`);
|
|
635
|
-
}
|
|
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]="3c82c125-73b7-5f75-bc3c-3d83d4b7d7f8")}catch(e2){}})();import{Option}from"commander";function normalizeExtensionCommandPath(commandPath){return commandPath.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function buildCanonicalExtensionAliases(handlers,definitions){const aliases=new Map;for(const handler of handlers){const alias=normalizeExtensionCommandPath(handler.command);for(const definition of definitions){if(definition.layer!==handler.layer||definition.name!==handler.name){continue}const canonical=normalizeExtensionCommandPath(definition.command);const parts=canonical.split(" ");const action=parts.at(-1);const suffix=parts.slice(1).join(" ");const expectedAlias=suffix?`${parts[0]}-${action} ${suffix}`:`${parts[0]}-${action}`;if(action&&alias===expectedAlias){aliases.set(alias,canonical);break}}}return aliases}function extensionFlagTakesValueForInvocation(invocationArgv,commandName,normalizedMissing,descriptors){if(!commandName||!normalizedMissing){return void 0}let descriptor;let matchedTokenCount=0;for(const[index,token]of invocationArgv.entries()){if(token!==commandName){continue}const commandTokens=invocationArgv.slice(index);for(const[path,candidate]of descriptors.entries()){const pathTokens=path.split(" ");if(pathTokens.length>matchedTokenCount&&pathTokens.every((pathToken,pathIndex)=>commandTokens[pathIndex]===pathToken)){descriptor=candidate;matchedTokenCount=pathTokens.length}}}const flag=descriptor?.flags.find(candidate=>candidate.long===normalizedMissing||candidate.short===normalizedMissing);if(!flag){return void 0}return resolveExtensionFlagArity(flag).takesValue}function toNonEmptyFlagString(value){if(typeof value!=="string"){return null}const trimmed=value.trim();return trimmed.length>0?trimmed:null}function toOptionalBoolean(value){return typeof value==="boolean"?value:void 0}function resolveExtensionFlagArity(definition){const valueType=toNonEmptyFlagString(definition.value_type)??toNonEmptyFlagString(definition.type);const declaredValueName=toNonEmptyFlagString(definition.value_name);const takesValue=valueType!=="boolean"&&(declaredValueName!==null||valueType!==null||toOptionalBoolean(definition.required)===true||toOptionalBoolean(definition.list)===true);return{takesValue,valueName:takesValue?declaredValueName??"value":null}}function formatDynamicExtensionFlagHelpLine(definition){const visible=toOptionalBoolean(definition.visible);if(visible===false){return null}const longName=toNonEmptyFlagString(definition.long);if(!longName||!longName.startsWith("--")||longName.length<3){return null}const shortName=toNonEmptyFlagString(definition.short);const shortPrefix=shortName&&shortName.startsWith("-")&&!shortName.startsWith("--")?`${shortName}, `:"";const valueName=toNonEmptyFlagString(definition.value_name);const valueSuffix=valueName?` <${valueName}>`:"";const description=toNonEmptyFlagString(definition.description)??"Extension-provided option.";const markers=[];if(toOptionalBoolean(definition.required)===true){markers.push("required")}if(toOptionalBoolean(definition.enabled)===false){markers.push("disabled")}const markerSuffix=markers.length>0?` [${markers.join(", ")}]`:"";return`${shortPrefix}${longName}${valueSuffix} ${description}${markerSuffix}`}function buildDynamicExtensionFlagHelp(definitions){const lines=[...new Set(definitions.map(formatDynamicExtensionFlagHelpLine).filter(line=>line!==null))].sort((left,right)=>left.localeCompare(right));if(lines.length===0){return null}return`
|
|
2
|
+
Extension-provided flags:
|
|
3
|
+
${lines.join("\n ")}`}function collectDynamicExtensionFlagHelpByCommand(registrations){const grouped=new Map;for(const registration of registrations){const commandPath=normalizeExtensionCommandPath(registration.target_command);if(commandPath.length===0){continue}const existing=grouped.get(commandPath)??[];existing.push(...registration.flags);grouped.set(commandPath,existing)}const entries=[...grouped.entries()].sort(([left],[right])=>left.localeCompare(right));const helpByCommand=new Map;for(const[commandPath,definitions]of entries){const helpText=buildDynamicExtensionFlagHelp(definitions);if(!helpText){continue}helpByCommand.set(commandPath,helpText)}return helpByCommand}function normalizeExtensionCommandAction(commandPath,action){if(typeof action!=="string"||action.trim().length===0){return commandPath.replace(/\s+/g,"-")}return action.trim().toLowerCase()}function normalizeExtensionCommandStringList(values){if(!Array.isArray(values)){return[]}const normalized=[];const seen=new Set;for(const value of values){if(typeof value!=="string"){continue}const trimmed=value.trim();if(trimmed.length===0||seen.has(trimmed)){continue}seen.add(trimmed);normalized.push(trimmed)}return normalized}function normalizeExtensionCommandArguments(values){if(!Array.isArray(values)){return[]}return values.map(value=>{const name=typeof value.name==="string"?value.name.trim():"";if(name.length===0){return null}const normalized={name,required:value.required===true,variadic:value.variadic===true};if(typeof value.description==="string"&&value.description.trim().length>0){normalized.description=value.description.trim()}return normalized}).filter(entry=>entry!==null)}function collectExtensionDefinitionsByCommand(commandDefinitions){const definitionsByCommand=new Map;for(const definition of commandDefinitions){const commandPath=normalizeExtensionCommandPath(definition.command);if(commandPath.length===0){continue}const description=typeof definition.description==="string"&&definition.description.trim().length>0?definition.description.trim():void 0;const intent=typeof definition.intent==="string"&&definition.intent.trim().length>0?definition.intent.trim():void 0;definitionsByCommand.set(commandPath,{command:commandPath,action:normalizeExtensionCommandAction(commandPath,definition.action),description,intent,examples:normalizeExtensionCommandStringList(definition.examples),failure_hints:normalizeExtensionCommandStringList(definition.failure_hints),arguments:normalizeExtensionCommandArguments(definition.arguments),flags:[],tier:definition.tier??"standard",family:definition.family??"extensions",source:{layer:definition.layer,name:definition.name,package:definition.source_package}})}return definitionsByCommand}function collectExtensionFlagsByCommand(flagRegistrations){const flagsByCommand=new Map;for(const registration of flagRegistrations){const commandPath=normalizeExtensionCommandPath(registration.target_command);if(commandPath.length===0){continue}const existing=flagsByCommand.get(commandPath)??[];existing.push(...registration.flags);flagsByCommand.set(commandPath,existing)}return flagsByCommand}function collectExtensionHelpCommandSet(commandHandlers,definitionsByCommand,flagsByCommand){const commandSet=new Set;for(const commandPath of commandHandlers){const normalized=normalizeExtensionCommandPath(commandPath);if(normalized.length>0){commandSet.add(normalized)}}for(const commandPath of definitionsByCommand.keys()){commandSet.add(commandPath)}for(const commandPath of flagsByCommand.keys()){commandSet.add(commandPath)}return commandSet}function resolveFlattenedAliasDescriptor(commandPath,definitionsByCommand,canonicalAliases){const canonical=canonicalAliases.get(commandPath);return canonical?definitionsByCommand.get(canonical):void 0}function collectExtensionCommandHelpDescriptors(commandHandlers,commandDefinitions,flagRegistrations,canonicalAliases=new Map){const definitionsByCommand=collectExtensionDefinitionsByCommand(commandDefinitions);const flagsByCommand=collectExtensionFlagsByCommand(flagRegistrations);const commandSet=collectExtensionHelpCommandSet(commandHandlers,definitionsByCommand,flagsByCommand);const descriptors=new Map;const sortedCommands=[...commandSet].sort((left,right)=>left.localeCompare(right));for(const commandPath of sortedCommands){const definition=resolveFlattenedAliasDescriptor(commandPath,definitionsByCommand,canonicalAliases)??definitionsByCommand.get(commandPath);const flags=flagsByCommand.get(commandPath)??(definition?flagsByCommand.get(definition.command):void 0)??[];if(definition){descriptors.set(commandPath,{...definition,command:commandPath,flags});continue}descriptors.set(commandPath,{command:commandPath,action:normalizeExtensionCommandAction(commandPath,void 0),examples:[],failure_hints:[],arguments:[],flags,tier:"standard",family:"extensions"})}return descriptors}function buildExtensionArgumentToken(argument){const variadicSuffix=argument.variadic?"...":"";if(argument.required){return`<${argument.name}${variadicSuffix}>`}return`[${argument.name}${variadicSuffix}]`}function applyDynamicExtensionArguments(command,descriptor){for(const argument of descriptor.arguments){command.argument(buildExtensionArgumentToken(argument),argument.description??"Extension argument.")}}function normalizeDynamicExtensionOptionNames(definition){const visible=toOptionalBoolean(definition.visible);if(visible===false){return null}const longName=toNonEmptyFlagString(definition.long);const shortName=toNonEmptyFlagString(definition.short);const normalizedShort=shortName&&shortName.startsWith("-")&&!shortName.startsWith("--")?shortName:null;const normalizedLong=longName&&longName.startsWith("--")&&longName.length>2?longName:null;const optionNames=[normalizedShort,normalizedLong].filter(entry=>entry!==null);return optionNames.length>0?optionNames:null}function formatDynamicExtensionOptionFlags(definition){const optionNames=normalizeDynamicExtensionOptionNames(definition);if(!optionNames){return null}const{valueName}=resolveExtensionFlagArity(definition);const optionValueSuffix=valueName?` <${valueName}>`:"";return`${optionNames.join(", ")}${optionValueSuffix}`}function formatDynamicExtensionParseOptionFlags(definition){const optionNames=normalizeDynamicExtensionOptionNames(definition);if(!optionNames){return null}const{valueName}=resolveExtensionFlagArity(definition);const valueSuffix=valueName?` <${valueName}>`:"";return`${optionNames.join(", ")}${valueSuffix}`}function formatDynamicExtensionOptionDescription(definition){const description=toNonEmptyFlagString(definition.description)??"Extension-provided option.";const markers=[];if(toOptionalBoolean(definition.required)===true){markers.push("required")}if(toOptionalBoolean(definition.enabled)===false){markers.push("disabled")}const markerSuffix=markers.length>0?` [${markers.join(", ")}]`:"";return`${description}${markerSuffix}`}function commandAlreadyHasOption(command,definition){const longName=toNonEmptyFlagString(definition.long);const shortName=toNonEmptyFlagString(definition.short);return command.options.some(option=>{const optionWithNames=option;return longName!==null&&optionWithNames.long===longName||shortName!==null&&optionWithNames.short===shortName})}function applyDynamicExtensionFlagOptions(command,definitions){for(const definition of definitions){if(commandAlreadyHasOption(command,definition)){continue}const flags=formatDynamicExtensionParseOptionFlags(definition);if(!flags){continue}const description=formatDynamicExtensionOptionDescription(definition);if(definition.list!==true){command.option(flags,description);continue}command.addOption(new Option(flags,description).argParser((value,previous=[])=>[...Array.isArray(previous)?previous:[previous],value]))}}function buildResidualDynamicExtensionFlagHelp(command,definitions){return buildDynamicExtensionFlagHelp(definitions.filter(definition=>!commandAlreadyHasOption(command,definition)))}function buildDynamicExtensionHelpOptionSummary(definition){const flags=formatDynamicExtensionOptionFlags(definition);if(!flags){return null}const longName=toNonEmptyFlagString(definition.long);const shortName=toNonEmptyFlagString(definition.short);const normalizedLong=longName&&longName.startsWith("--")&&longName.length>2?longName:null;const normalizedShort=shortName&&shortName.startsWith("-")&&!shortName.startsWith("--")?shortName:null;const{takesValue,valueName}=resolveExtensionFlagArity(definition);const required=toOptionalBoolean(definition.required)===true;return{flags,long:normalizedLong,short:normalizedShort,description:formatDynamicExtensionOptionDescription(definition),takes_value:takesValue,value_required:takesValue,value_name:valueName,variadic:false,required,aliases:[],alias_for:null}}function buildDynamicExtensionHelpOptionSummaries(descriptor){if(!descriptor){return[]}const summaries=[];const seen=new Set;for(const definition of descriptor.flags){const summary=buildDynamicExtensionHelpOptionSummary(definition);if(!summary||seen.has(summary.flags)){continue}seen.add(summary.flags);summaries.push(summary)}return summaries}function mergeHelpOptionSummaries(base,extension){if(extension.length===0){return base}const merged=[...base];const seen=new Set(base.map(entry=>entry.flags));for(const entry of extension){if(seen.has(entry.flags)){continue}seen.add(entry.flags);merged.push(entry)}return merged}function buildDynamicExtensionCommandMetadataHelp(descriptor){const lines=[];if(descriptor.intent){lines.push(`Intent: ${descriptor.intent}`)}if(descriptor.action){lines.push(`Action contract: ${descriptor.action}`)}if(descriptor.examples.length>0){lines.push("Examples:");for(const example of descriptor.examples){lines.push(` - ${example}`)}}if(descriptor.failure_hints.length>0){lines.push("Common failure hints:");for(const hint of descriptor.failure_hints){lines.push(` - ${hint}`)}}if(lines.length===0){return null}return`
|
|
4
|
+
Extension command metadata:
|
|
5
|
+
${lines.join("\n ")}`}function commandAliases(command){const commandRecord=command;if(typeof commandRecord.aliases==="function"){return commandRecord.aliases().map(value=>value.trim().toLowerCase()).filter(value=>value.length>0)}if(typeof commandRecord.alias==="function"){const alias=commandRecord.alias();if(typeof alias==="string"&&alias.trim().length>0){return[alias.trim().toLowerCase()]}}if(Array.isArray(commandRecord._aliases)){return commandRecord._aliases.map(value=>value.trim().toLowerCase()).filter(value=>value.length>0)}return[]}function findDirectChildCommand(parent,name){const normalizedTarget=name.trim().toLowerCase();return parent.commands.find(entry=>{if(entry.name().trim().toLowerCase()===normalizedTarget){return true}return commandAliases(entry).includes(normalizedTarget)})??null}function findCommandByPath(root,pathParts){let current=root;for(const part of pathParts){const next=findDirectChildCommand(current,part);if(!next){return null}current=next}return current}const extensionCreatedCommands=new WeakSet;function ensureCommandPath(root,pathParts){if(pathParts.length===0){return null}let current=root;for(let index=0;index<pathParts.length;index+=1){const part=pathParts[index];const existing=findDirectChildCommand(current,part);if(existing){current=existing;continue}const created=current.command(part);extensionCreatedCommands.add(created);if(index<pathParts.length-1){created.description("Extension-provided command group.");created.action(()=>{created.help()})}else{created.description("Extension-provided command path.")}current=created}return current}function findExtensionCommandPathCollision(root,pathParts){let current=root;const traversed=[];for(const part of pathParts){const existing=findDirectChildCommand(current,part);if(!existing){return null}traversed.push(part);if(!extensionCreatedCommands.has(existing)){return{core_path:traversed.join(" "),extension_path:pathParts.join(" ")}}current=existing}return null}function buildExtensionCommandCollisionWarning(root,commandPath,aliases,descriptor){const pathParts=commandPath.split(" ").filter(part=>part.length>0);const collision=findExtensionCommandPathCollision(root,pathParts);if(!collision||collision.core_path===commandPath&&!aliases.has(commandPath)){return null}const extensionOwner=descriptor?.source?.package??descriptor?.source?.name??"unknown-extension";return`extension_command_collision:${collision.extension_path}:core_owner=pm-cli:${collision.core_path}:extension_owner=${extensionOwner}`}function collectSafeExtensionCommandPaths(root,commandHandlers,descriptors,aliases,onCollision){return[...new Set([...commandHandlers,...descriptors.keys()])].filter(commandPath=>commandPath.trim().length>0).sort((left,right)=>left.localeCompare(right)).filter(commandPath=>{const warning=buildExtensionCommandCollisionWarning(root,commandPath,aliases,descriptors.get(commandPath));if(!warning)return true;onCollision(warning);return false})}function reportExtensionCommandCollision(activationWarnings,report,warning){activationWarnings.push(warning);report(`[pm] warning: ${warning}; core command preserved. Rename or namespace the extension command alias.`)}export{applyDynamicExtensionArguments,applyDynamicExtensionFlagOptions,buildCanonicalExtensionAliases,buildDynamicExtensionCommandMetadataHelp,buildDynamicExtensionHelpOptionSummaries,buildExtensionCommandCollisionWarning,buildResidualDynamicExtensionFlagHelp,collectDynamicExtensionFlagHelpByCommand,collectExtensionCommandHelpDescriptors,collectSafeExtensionCommandPaths,commandAliases,ensureCommandPath,extensionFlagTakesValueForInvocation,findCommandByPath,findDirectChildCommand,findExtensionCommandPathCollision,mergeHelpOptionSummaries,normalizeExtensionCommandPath,reportExtensionCommandCollision,resolveExtensionFlagArity};
|
|
636
6
|
//# sourceMappingURL=extension-command-help.js.map
|
|
637
|
-
//# debugId=99d39b7c-ec26-5c95-85c0-ac28112a6fe6
|