@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,571 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { buildDynamicExtensionHelpOptionSummaries, mergeHelpOptionSummaries, findCommandByPath, findDirectChildCommand, commandAliases, } from "./extension-command-help.js";
|
|
6
|
-
import { getPmCommandHelpVisibilityTier, isFullHelpDiscovery, normalizeHelpCommandPath, resolveHelpDetailMode, resolveHelpNarrative, } from "./help-content.js";
|
|
7
|
-
import { getCommandPath } from "./registration-helpers.js";
|
|
8
|
-
import { parseBootstrapGlobalOptions, parseBootstrapHelpRequest, parseBootstrapCommandName, parseBootstrapTypeValue, } from "./bootstrap-args.js";
|
|
9
|
-
import { extractProvidedOptionFlags, renderPmCommand } from "./argv-utils.js";
|
|
10
|
-
import { formatCommanderErrorForJson } from "./error-guidance.js";
|
|
11
|
-
import { BUILTIN_TYPE_HELP_VALUES, buildUnknownCommandGuidanceFromRuntime, isKnownHelpCommandPath, } from "./commander-usage.js";
|
|
12
|
-
import { attachOutputTokenAccounting } from "../sdk/output-token-accounting.js";
|
|
13
|
-
import { resolveCreateExplicitEmptyFlag } from "../sdk/agent/create-option-policy.js";
|
|
14
|
-
import { formatPmPositionalActionFlagTip, PM_POSITIONAL_ACTION_CONTRACTS, resolvePmPositionalActionContract, } from "../sdk/cli-contracts/grammar-contracts.js";
|
|
15
|
-
import { resolvePmCommandCapabilityFamily, resolvePmCommandVisibilityTier, } from "../sdk/agent-capability-contracts.js";
|
|
16
|
-
const EXTENSION_TIER_ORDER = {
|
|
17
|
-
core: 0,
|
|
18
|
-
standard: 1,
|
|
19
|
-
full: 2,
|
|
20
|
-
internal: 3,
|
|
21
|
-
};
|
|
22
|
-
function resolveExtensionCommandSurface(commandPath, descriptors, allowDescendants = true) {
|
|
23
|
-
const exact = descriptors.get(commandPath);
|
|
24
|
-
if (exact)
|
|
25
|
-
return exact;
|
|
26
|
-
if (!allowDescendants)
|
|
27
|
-
return undefined;
|
|
28
|
-
const descendants = [...descriptors.entries()]
|
|
29
|
-
.filter(([path]) => path.startsWith(`${commandPath} `))
|
|
30
|
-
.map(([, descriptor]) => descriptor);
|
|
31
|
-
if (descendants.length === 0)
|
|
32
|
-
return undefined;
|
|
33
|
-
const tier = descendants.reduce((selected, descriptor) => EXTENSION_TIER_ORDER[descriptor.tier] < EXTENSION_TIER_ORDER[selected]
|
|
34
|
-
? descriptor.tier
|
|
35
|
-
: selected, "internal");
|
|
36
|
-
const families = new Set(descendants.map(({ family }) => family));
|
|
37
|
-
return {
|
|
38
|
-
tier,
|
|
39
|
-
family: families.size === 1 ? descendants[0].family : "extensions",
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function resolveCommandFromPathTokens(root, pathTokens) {
|
|
43
|
-
if (pathTokens.length === 0) {
|
|
44
|
-
return root;
|
|
45
|
-
}
|
|
46
|
-
const exactCommand = findCommandByPath(root, pathTokens);
|
|
47
|
-
if (exactCommand) {
|
|
48
|
-
return exactCommand;
|
|
49
|
-
}
|
|
50
|
-
const requestedPath = pathTokens.join(" ");
|
|
51
|
-
if (!PM_CORE_COMMAND_NAMES.some((commandName) => commandName === requestedPath) &&
|
|
52
|
-
!hasSubcommandFlagContractsForCommand(requestedPath) &&
|
|
53
|
-
!resolvePmPositionalActionContract(requestedPath) &&
|
|
54
|
-
!isKnownHelpCommandPath(root, pathTokens)) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
for (let length = pathTokens.length - 1; length > 0; length -= 1) {
|
|
58
|
-
const positionalParent = findCommandByPath(root, pathTokens.slice(0, length));
|
|
59
|
-
if (positionalParent) {
|
|
60
|
-
return positionalParent;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return pathTokens.length === 1 ? root : null;
|
|
64
|
-
}
|
|
65
|
-
function extractOptionValueName(flags) {
|
|
66
|
-
const match = flags.match(/[<[]([^>\]]+)[>\]]/);
|
|
67
|
-
if (!match) {
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
const value = match[1]?.trim();
|
|
71
|
-
return value && value.length > 0 ? value : null;
|
|
72
|
-
}
|
|
73
|
-
function readOptionAttributeName(option) {
|
|
74
|
-
const optionRecord = option;
|
|
75
|
-
if (typeof optionRecord.attributeName === "function") {
|
|
76
|
-
const value = optionRecord.attributeName();
|
|
77
|
-
return typeof value === "string" && value.trim().length > 0
|
|
78
|
-
? value.trim()
|
|
79
|
-
: null;
|
|
80
|
-
}
|
|
81
|
-
if (typeof optionRecord.attributeName === "string" &&
|
|
82
|
-
optionRecord.attributeName.trim().length > 0) {
|
|
83
|
-
return optionRecord.attributeName.trim();
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
function buildOptionAliasMap(options) {
|
|
88
|
-
const aliasMap = new Map();
|
|
89
|
-
for (const option of options) {
|
|
90
|
-
const optionRecord = option;
|
|
91
|
-
const attributeName = readOptionAttributeName(option);
|
|
92
|
-
if (!attributeName ||
|
|
93
|
-
typeof optionRecord.long !== "string" ||
|
|
94
|
-
optionRecord.long.trim().length === 0) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
const existing = aliasMap.get(attributeName) ?? [];
|
|
98
|
-
existing.push(optionRecord.long.trim());
|
|
99
|
-
aliasMap.set(attributeName, existing);
|
|
100
|
-
}
|
|
101
|
-
for (const [attributeName, values] of aliasMap.entries()) {
|
|
102
|
-
aliasMap.set(attributeName, [
|
|
103
|
-
...new Set(values
|
|
104
|
-
.map((value) => value.trim())
|
|
105
|
-
.filter((value) => value.length > 0)),
|
|
106
|
-
].sort((left, right) => left.localeCompare(right)));
|
|
107
|
-
}
|
|
108
|
-
return aliasMap;
|
|
109
|
-
}
|
|
110
|
-
function renderAttemptedCommand(argv) {
|
|
111
|
-
return renderPmCommand(argv);
|
|
112
|
-
}
|
|
113
|
-
function buildHelpOptionSummaries(command) {
|
|
114
|
-
const options = (command.options ?? []);
|
|
115
|
-
const optionAliasMap = buildOptionAliasMap(options);
|
|
116
|
-
return options.map((option) => {
|
|
117
|
-
const optionRecord = option;
|
|
118
|
-
const flags = typeof optionRecord.flags === "string" ? optionRecord.flags.trim() : "";
|
|
119
|
-
const description = typeof optionRecord.description === "string"
|
|
120
|
-
? optionRecord.description.trim()
|
|
121
|
-
: "";
|
|
122
|
-
const attributeName = readOptionAttributeName(option);
|
|
123
|
-
const aliasCandidates = attributeName
|
|
124
|
-
? (optionAliasMap.get(attributeName) ?? [])
|
|
125
|
-
: [];
|
|
126
|
-
const aliases = aliasCandidates
|
|
127
|
-
.filter((entry) => entry !== optionRecord.long)
|
|
128
|
-
.map((entry) => entry.trim())
|
|
129
|
-
.filter((entry) => entry.length > 0);
|
|
130
|
-
const aliasForMatch = description.match(/^Alias for ([^ ]+)/i);
|
|
131
|
-
const aliasFor = aliasForMatch && aliasForMatch[1] ? aliasForMatch[1].trim() : null;
|
|
132
|
-
const required = optionRecord.mandatory === true ||
|
|
133
|
-
description.includes("[required]") ||
|
|
134
|
-
description.toLowerCase().includes("required;");
|
|
135
|
-
const valueRequired = flags.includes("<");
|
|
136
|
-
const takesValue = valueRequired || flags.includes("[");
|
|
137
|
-
const summary = {
|
|
138
|
-
flags,
|
|
139
|
-
long: typeof optionRecord.long === "string" ? optionRecord.long : null,
|
|
140
|
-
short: typeof optionRecord.short === "string" ? optionRecord.short : null,
|
|
141
|
-
description,
|
|
142
|
-
takes_value: takesValue,
|
|
143
|
-
value_required: valueRequired,
|
|
144
|
-
value_name: extractOptionValueName(flags),
|
|
145
|
-
variadic: optionRecord.variadic === true,
|
|
146
|
-
required,
|
|
147
|
-
aliases,
|
|
148
|
-
alias_for: aliasFor,
|
|
149
|
-
};
|
|
150
|
-
if (optionRecord.defaultValue !== undefined) {
|
|
151
|
-
summary.default_value = optionRecord.defaultValue;
|
|
152
|
-
}
|
|
153
|
-
return summary;
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
function compactHelpOptionAliases(options) {
|
|
157
|
-
const canonicalByLong = new Map();
|
|
158
|
-
const aliasOptions = [];
|
|
159
|
-
for (const option of options) {
|
|
160
|
-
if (option.alias_for && option.long) {
|
|
161
|
-
aliasOptions.push(option);
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
if (option.long) {
|
|
165
|
-
canonicalByLong.set(option.long, option);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
for (const aliasOption of aliasOptions) {
|
|
169
|
-
const aliasFor = aliasOption.alias_for;
|
|
170
|
-
const canonical = canonicalByLong.get(aliasFor);
|
|
171
|
-
if (!canonical) {
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
const aliasLong = aliasOption.long;
|
|
175
|
-
const aliases = new Set([...(canonical.aliases ?? []), aliasLong]);
|
|
176
|
-
canonical.aliases = [...aliases].sort((left, right) => left.localeCompare(right));
|
|
177
|
-
}
|
|
178
|
-
return options.filter((option) => {
|
|
179
|
-
if (!option.alias_for || !option.long) {
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
return !canonicalByLong.has(option.alias_for);
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
function buildHelpArgumentSummaries(command) {
|
|
186
|
-
const commandRecord = command;
|
|
187
|
-
const argumentsList = Array.isArray(commandRecord.registeredArguments)
|
|
188
|
-
? commandRecord.registeredArguments
|
|
189
|
-
: Array.isArray(commandRecord._args)
|
|
190
|
-
? commandRecord._args
|
|
191
|
-
: [];
|
|
192
|
-
return argumentsList.map((argument) => {
|
|
193
|
-
const rawName = typeof argument.name === "function"
|
|
194
|
-
? argument.name()
|
|
195
|
-
: typeof argument.name === "string"
|
|
196
|
-
? argument.name
|
|
197
|
-
: "argument";
|
|
198
|
-
const description = typeof argument.description === "string" &&
|
|
199
|
-
argument.description.trim().length > 0
|
|
200
|
-
? argument.description.trim()
|
|
201
|
-
: null;
|
|
202
|
-
return {
|
|
203
|
-
name: rawName.trim(),
|
|
204
|
-
required: argument.required === true ||
|
|
205
|
-
description?.toLowerCase().startsWith("required;") === true,
|
|
206
|
-
variadic: argument.variadic === true,
|
|
207
|
-
description,
|
|
208
|
-
};
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
function buildHelpSubcommandSummaries(command, extensionDescriptors = new Map(), includeAll = false) {
|
|
212
|
-
const visible = command.createHelp().visibleCommands(command);
|
|
213
|
-
const candidates = includeAll
|
|
214
|
-
? [...new Set([...visible, ...command.commands])]
|
|
215
|
-
: visible;
|
|
216
|
-
return candidates
|
|
217
|
-
.filter((entry) => entry.name() !== "help" || command.parent === null)
|
|
218
|
-
.filter((entry) => !includeAll ||
|
|
219
|
-
(getPmCommandHelpVisibilityTier(entry) ??
|
|
220
|
-
resolvePmCommandVisibilityTier(entry.name())) !== "internal")
|
|
221
|
-
.map((entry) => {
|
|
222
|
-
const commandPath = normalizeHelpCommandPath(getCommandPath(entry));
|
|
223
|
-
const rootCommand = commandPath.split(" ")[0];
|
|
224
|
-
const declaredTier = getPmCommandHelpVisibilityTier(entry);
|
|
225
|
-
const extensionDescriptor = resolveExtensionCommandSurface(commandPath, extensionDescriptors, declaredTier !== undefined);
|
|
226
|
-
const aliasContract = PM_COMMAND_ALIAS_CONTRACTS.find(({ alias }) => alias === commandPath);
|
|
227
|
-
return {
|
|
228
|
-
name: entry.name().trim(),
|
|
229
|
-
aliases: commandAliases(entry),
|
|
230
|
-
description: entry.description().trim(),
|
|
231
|
-
tier: extensionDescriptor?.tier ??
|
|
232
|
-
declaredTier ??
|
|
233
|
-
resolvePmCommandVisibilityTier(rootCommand),
|
|
234
|
-
family: extensionDescriptor?.family ??
|
|
235
|
-
resolvePmCommandCapabilityFamily(rootCommand),
|
|
236
|
-
...(aliasContract
|
|
237
|
-
? {
|
|
238
|
-
alias_for: aliasContract.canonical,
|
|
239
|
-
alias_lifecycle: aliasContract.lifecycle,
|
|
240
|
-
...(aliasContract.lifecycle === "deprecated"
|
|
241
|
-
? { deprecated: true }
|
|
242
|
-
: {}),
|
|
243
|
-
}
|
|
244
|
-
: {}),
|
|
245
|
-
};
|
|
246
|
-
})
|
|
247
|
-
.sort((left, right) => left.name.localeCompare(right.name));
|
|
248
|
-
}
|
|
249
|
-
function buildJsonHelpNarrative(detailMode, fallbackNarrative, extensionDescriptor) {
|
|
250
|
-
if (!extensionDescriptor) {
|
|
251
|
-
return fallbackNarrative;
|
|
252
|
-
}
|
|
253
|
-
const extensionExamples = extensionDescriptor.examples ?? [];
|
|
254
|
-
const extensionFailureHints = extensionDescriptor.failure_hints ?? [];
|
|
255
|
-
return {
|
|
256
|
-
intent: extensionDescriptor.intent ??
|
|
257
|
-
extensionDescriptor.description ??
|
|
258
|
-
fallbackNarrative.intent,
|
|
259
|
-
examples: detailMode === "detailed"
|
|
260
|
-
? extensionExamples.length > 0
|
|
261
|
-
? [...extensionExamples]
|
|
262
|
-
: [...fallbackNarrative.examples]
|
|
263
|
-
: extensionExamples.length > 0
|
|
264
|
-
? [extensionExamples[0]]
|
|
265
|
-
: [...fallbackNarrative.examples],
|
|
266
|
-
tips: detailMode === "detailed"
|
|
267
|
-
? extensionFailureHints.length > 0
|
|
268
|
-
? [...extensionFailureHints]
|
|
269
|
-
: [...fallbackNarrative.tips]
|
|
270
|
-
: [],
|
|
271
|
-
detail_mode: detailMode,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
function resolveJsonHelpVisibilityTier(rootCommandPath, extensionDescriptor) {
|
|
275
|
-
if (rootCommandPath === undefined)
|
|
276
|
-
return null;
|
|
277
|
-
return (extensionDescriptor?.tier ?? resolvePmCommandVisibilityTier(rootCommandPath));
|
|
278
|
-
}
|
|
279
|
-
function resolveJsonHelpCapabilityFamily(rootCommandPath, extensionDescriptor) {
|
|
280
|
-
if (rootCommandPath === undefined)
|
|
281
|
-
return null;
|
|
282
|
-
return (extensionDescriptor?.family ??
|
|
283
|
-
resolvePmCommandCapabilityFamily(rootCommandPath));
|
|
284
|
-
}
|
|
285
|
-
function projectFullCommandAliases(rootProgram, targetCommand, fullDiscovery) {
|
|
286
|
-
if (targetCommand !== rootProgram || !fullDiscovery)
|
|
287
|
-
return undefined;
|
|
288
|
-
return PM_COMMAND_ALIAS_CONTRACTS.map((contract) => ({
|
|
289
|
-
alias: contract.alias,
|
|
290
|
-
canonical: contract.canonical,
|
|
291
|
-
canonical_argv: [...contract.canonical_argv],
|
|
292
|
-
lifecycle: contract.lifecycle,
|
|
293
|
-
hidden: contract.hidden,
|
|
294
|
-
deprecated: contract.lifecycle === "deprecated",
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
297
|
-
/** Build the command/action structural view shared by every JSON help field. */
|
|
298
|
-
function buildPositionalActionHelpProjection(action, targetCommand, resolvedPath, allOptions, extensionDescriptors = new Map(), includeAll = false) {
|
|
299
|
-
if (!action) {
|
|
300
|
-
const argumentsList = buildHelpArgumentSummaries(targetCommand);
|
|
301
|
-
const registeredSubcommands = buildHelpSubcommandSummaries(targetCommand, extensionDescriptors, includeAll);
|
|
302
|
-
const registeredSubcommandNames = new Set(registeredSubcommands.map(({ name }) => name));
|
|
303
|
-
return {
|
|
304
|
-
arguments: argumentsList,
|
|
305
|
-
options: allOptions,
|
|
306
|
-
subcommands: [
|
|
307
|
-
...registeredSubcommands,
|
|
308
|
-
...PM_POSITIONAL_ACTION_CONTRACTS.filter(({ parent, action: name }) => parent === resolvedPath && !registeredSubcommandNames.has(name)).map(({ action: name, description }) => ({
|
|
309
|
-
name,
|
|
310
|
-
aliases: [],
|
|
311
|
-
description,
|
|
312
|
-
tier: resolvePmCommandVisibilityTier(resolvedPath.split(" ")[0]),
|
|
313
|
-
family: resolvePmCommandCapabilityFamily(resolvedPath.split(" ")[0]),
|
|
314
|
-
})),
|
|
315
|
-
].sort((left, right) => left.name.localeCompare(right.name)),
|
|
316
|
-
usage: [
|
|
317
|
-
resolvedPath,
|
|
318
|
-
argumentsList.reduce((usage, argument) => argument.required
|
|
319
|
-
? usage.replace(`[${argument.name}${argument.variadic ? "..." : ""}]`, `<${argument.name}${argument.variadic ? "..." : ""}>`)
|
|
320
|
-
: usage, targetCommand.usage()),
|
|
321
|
-
]
|
|
322
|
-
.filter((token) => token.length > 0)
|
|
323
|
-
.join(" "),
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
const acceptedFlags = new Set(action.accepted_flags);
|
|
327
|
-
return {
|
|
328
|
-
arguments: action.slots.map(({ name, required, variadic, value_kind: valueKind, polymorphic }) => ({
|
|
329
|
-
name,
|
|
330
|
-
required,
|
|
331
|
-
variadic,
|
|
332
|
-
description: polymorphic
|
|
333
|
-
? `Polymorphic ${valueKind} value; inspect the action contract before mutation.`
|
|
334
|
-
: `${valueKind.replaceAll("_", " ")} value.`,
|
|
335
|
-
})),
|
|
336
|
-
options: allOptions.filter(({ long, aliases }) => (long !== null && acceptedFlags.has(long)) ||
|
|
337
|
-
aliases.some((alias) => acceptedFlags.has(alias))),
|
|
338
|
-
subcommands: [],
|
|
339
|
-
usage: [
|
|
340
|
-
action.command,
|
|
341
|
-
...action.slots.map(({ name, required, variadic }) => {
|
|
342
|
-
const token = variadic ? `${name}...` : name;
|
|
343
|
-
return required ? `<${token}>` : `[${token}]`;
|
|
344
|
-
}),
|
|
345
|
-
].join(" "),
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
function buildJsonHelpPayload(rootProgram, targetCommand, argv, requestedPath, extensionDescriptors) {
|
|
349
|
-
const detailMode = resolveHelpDetailMode(argv);
|
|
350
|
-
const fullDiscovery = isFullHelpDiscovery(argv);
|
|
351
|
-
const commanderPath = normalizeHelpCommandPath(getCommandPath(targetCommand));
|
|
352
|
-
const requestedCommandPath = normalizeHelpCommandPath(requestedPath.join(" "));
|
|
353
|
-
const resolvedPath = requestedCommandPath.length > commanderPath.length
|
|
354
|
-
? requestedCommandPath
|
|
355
|
-
: commanderPath;
|
|
356
|
-
const positionalAction = resolvePmPositionalActionContract(resolvedPath);
|
|
357
|
-
const projectedPath = positionalAction?.command ?? commanderPath;
|
|
358
|
-
const commandPath = projectedPath.length > 0 ? projectedPath : undefined;
|
|
359
|
-
const rootCommandPath = commandPath?.split(" ")[0];
|
|
360
|
-
const fallbackNarrative = resolveHelpNarrative(commandPath, detailMode);
|
|
361
|
-
const extensionDescriptor = commandPath
|
|
362
|
-
? extensionDescriptors.get(commandPath)
|
|
363
|
-
: undefined;
|
|
364
|
-
const extensionSurface = commandPath
|
|
365
|
-
? resolveExtensionCommandSurface(commandPath, extensionDescriptors, getPmCommandHelpVisibilityTier(targetCommand) !== undefined)
|
|
366
|
-
: undefined;
|
|
367
|
-
const narrative = buildJsonHelpNarrative(detailMode, fallbackNarrative, extensionDescriptor);
|
|
368
|
-
const allOptionSummaries = compactHelpOptionAliases(mergeHelpOptionSummaries(buildHelpOptionSummaries(targetCommand), buildDynamicExtensionHelpOptionSummaries(extensionDescriptor)));
|
|
369
|
-
const projection = buildPositionalActionHelpProjection(positionalAction, targetCommand, projectedPath, allOptionSummaries, extensionDescriptors, fullDiscovery);
|
|
370
|
-
const fullCommandAliases = projectFullCommandAliases(rootProgram, targetCommand, fullDiscovery);
|
|
371
|
-
return {
|
|
372
|
-
format: "pm_help_v1",
|
|
373
|
-
detail_mode: detailMode,
|
|
374
|
-
root_command: rootProgram.name(),
|
|
375
|
-
requested_path: requestedPath,
|
|
376
|
-
resolved_path: projectedPath.length > 0 ? projectedPath : rootProgram.name(),
|
|
377
|
-
visibility_tier: resolveJsonHelpVisibilityTier(rootCommandPath, extensionSurface),
|
|
378
|
-
capability_family: resolveJsonHelpCapabilityFamily(rootCommandPath, extensionSurface),
|
|
379
|
-
description: positionalAction?.description ?? targetCommand.description(),
|
|
380
|
-
usage: projection.usage,
|
|
381
|
-
intent: positionalAction?.description ?? narrative.intent,
|
|
382
|
-
examples: positionalAction
|
|
383
|
-
? [positionalAction.example]
|
|
384
|
-
: narrative.examples,
|
|
385
|
-
tips: positionalAction
|
|
386
|
-
? [formatPmPositionalActionFlagTip(positionalAction.accepted_flags)]
|
|
387
|
-
: narrative.tips,
|
|
388
|
-
arguments: projection.arguments,
|
|
389
|
-
options: projection.options,
|
|
390
|
-
subcommands: projection.subcommands,
|
|
391
|
-
has_subcommands: projection.subcommands.length > 0,
|
|
392
|
-
...(fullCommandAliases === undefined
|
|
393
|
-
? {}
|
|
394
|
-
: { command_aliases: fullCommandAliases }),
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
/** Implements maybe render bootstrap json help for the public runtime surface of this module. */
|
|
398
|
-
export async function maybeRenderBootstrapJsonHelp(rootProgram, argv, extensionDescriptors) {
|
|
399
|
-
const bootstrapGlobal = parseBootstrapGlobalOptions(argv);
|
|
400
|
-
if (!bootstrapGlobal.json) {
|
|
401
|
-
return false;
|
|
402
|
-
}
|
|
403
|
-
const helpRequest = parseBootstrapHelpRequest(argv);
|
|
404
|
-
if (!helpRequest.requested) {
|
|
405
|
-
return false;
|
|
406
|
-
}
|
|
407
|
-
const targetCommand = resolveCommandFromPathTokens(rootProgram, helpRequest.commandPathTokens);
|
|
408
|
-
if (!targetCommand) {
|
|
409
|
-
if (!bootstrapGlobal.quiet) {
|
|
410
|
-
const unknownMessage = `unknown command '${helpRequest.commandPathTokens.join(" ")}'`;
|
|
411
|
-
const runtimeContext = buildUnknownCommandGuidanceFromRuntime(unknownMessage, rootProgram, extensionDescriptors);
|
|
412
|
-
const envelope = formatCommanderErrorForJson(unknownMessage, "help", BUILTIN_TYPE_HELP_VALUES, EXIT_CODE.USAGE, {
|
|
413
|
-
...runtimeContext,
|
|
414
|
-
attemptedCommand: renderAttemptedCommand(argv),
|
|
415
|
-
normalizedInvocationArgs: [...argv],
|
|
416
|
-
providedOptionFlags: extractProvidedOptionFlags(argv),
|
|
417
|
-
});
|
|
418
|
-
const output = bootstrapGlobal.tokenAccounting
|
|
419
|
-
? attachOutputTokenAccounting(envelope, (value) => `${JSON.stringify(value, null, 2)}\n`)
|
|
420
|
-
: envelope;
|
|
421
|
-
writeStderr(`${JSON.stringify(output, null, 2)}\n`);
|
|
422
|
-
}
|
|
423
|
-
process.exitCode = EXIT_CODE.USAGE;
|
|
424
|
-
return true;
|
|
425
|
-
}
|
|
426
|
-
if (!bootstrapGlobal.quiet) {
|
|
427
|
-
const payload = buildJsonHelpPayload(rootProgram, targetCommand, argv, helpRequest.commandPathTokens, extensionDescriptors);
|
|
428
|
-
writeStdout(`${JSON.stringify(payload, null, 2)}\n`);
|
|
429
|
-
}
|
|
430
|
-
process.exitCode = EXIT_CODE.SUCCESS;
|
|
431
|
-
return true;
|
|
432
|
-
}
|
|
433
|
-
function buildCreateUpdatePolicyIntro(commandName, typeRegistry) {
|
|
434
|
-
const lines = [
|
|
435
|
-
"",
|
|
436
|
-
"Type-aware option policies:",
|
|
437
|
-
" pass --type <value> with --help to render required/disabled/hidden option policy details for that type.",
|
|
438
|
-
` active type values: ${typeRegistry.types.join("|")}`,
|
|
439
|
-
];
|
|
440
|
-
if (commandName === "create") {
|
|
441
|
-
lines.push(" scheduling shortcut: use --schedule-preset lightweight for Reminder/Meeting/Event minimal create flows.");
|
|
442
|
-
}
|
|
443
|
-
return lines.join("\n");
|
|
444
|
-
}
|
|
445
|
-
function appendTypeOptionHelpLines(lines, typeDefinition) {
|
|
446
|
-
if (typeDefinition.options.length === 0) {
|
|
447
|
-
lines.push(" type options: none");
|
|
448
|
-
return;
|
|
449
|
-
}
|
|
450
|
-
lines.push(" type options:");
|
|
451
|
-
for (const option of typeDefinition.options) {
|
|
452
|
-
const requiredLabel = option.required ? " (required)" : "";
|
|
453
|
-
const aliases = option.aliases ?? [];
|
|
454
|
-
lines.push(` - ${option.key}${requiredLabel}`);
|
|
455
|
-
lines.push(` values: ${option.values.length > 0 ? option.values.join("|") : "any non-empty string"}`);
|
|
456
|
-
lines.push(` aliases: ${aliases.length > 0 ? aliases.join("|") : "none"}`);
|
|
457
|
-
if (option.description && option.description.trim().length > 0) {
|
|
458
|
-
lines.push(` description: ${option.description.trim()}`);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
function buildCreatePolicyRequiredSets(commandName, typeDefinition) {
|
|
463
|
-
const progressive = commandName === "create"
|
|
464
|
-
? new Set(["title", "type"])
|
|
465
|
-
: new Set();
|
|
466
|
-
const strict = new Set(progressive);
|
|
467
|
-
if (commandName === "create") {
|
|
468
|
-
for (const option of [
|
|
469
|
-
...typeDefinition.required_create_fields,
|
|
470
|
-
...typeDefinition.required_create_repeatables,
|
|
471
|
-
]) {
|
|
472
|
-
strict.add(option);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
return { progressive, strict };
|
|
476
|
-
}
|
|
477
|
-
function appendStrictCreatePolicyHelpLines(lines, typeDefinition, progressiveRequired, strictRequired) {
|
|
478
|
-
const progressive = new Set(progressiveRequired);
|
|
479
|
-
const strictOnly = strictRequired.filter((option) => !progressive.has(option));
|
|
480
|
-
const toFlags = (options) => options.length > 0
|
|
481
|
-
? options
|
|
482
|
-
.map((option) => commandOptionFlagLabel("create", option))
|
|
483
|
-
.join(", ")
|
|
484
|
-
: "none";
|
|
485
|
-
lines.push(` required in strict mode: ${toFlags(strictOnly)}`);
|
|
486
|
-
const explicitEmptyFlags = strictOnly
|
|
487
|
-
.map(resolveCreateExplicitEmptyFlag)
|
|
488
|
-
.filter((flag) => flag !== undefined);
|
|
489
|
-
lines.push(` explicit empty assertion: ${explicitEmptyFlags.length > 0 ? explicitEmptyFlags.join(", ") : "none"}`);
|
|
490
|
-
if (["Reminder", "Meeting", "Event"].includes(typeDefinition.name)) {
|
|
491
|
-
lines.push(" schedule preset: --schedule-preset lightweight switches schedule artifacts to progressive required-option policy.");
|
|
492
|
-
lines.push(" strict parity remains available via --create-mode strict.");
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
function buildCreateUpdatePolicyHelpText(commandName, typeRegistry, argv) {
|
|
496
|
-
const selectedTypeRaw = parseBootstrapTypeValue(argv);
|
|
497
|
-
if (!selectedTypeRaw) {
|
|
498
|
-
return buildCreateUpdatePolicyIntro(commandName, typeRegistry);
|
|
499
|
-
}
|
|
500
|
-
const typeDefinition = resolveTypeDefinition(selectedTypeRaw, typeRegistry);
|
|
501
|
-
if (!typeDefinition) {
|
|
502
|
-
const allowed = typeRegistry.types.join("|");
|
|
503
|
-
return [
|
|
504
|
-
"",
|
|
505
|
-
`Type-aware option policies: type "${selectedTypeRaw}" is not in the active registry.`,
|
|
506
|
-
` active type values: ${allowed}`,
|
|
507
|
-
].join("\n");
|
|
508
|
-
}
|
|
509
|
-
const argumentTerminatorIndex = argv.indexOf("--");
|
|
510
|
-
const optionArgv = argumentTerminatorIndex < 0 ? argv : argv.slice(0, argumentTerminatorIndex);
|
|
511
|
-
const createModeTokenIndex = optionArgv.findIndex((token) => token === "--create-mode" || token.startsWith("--create-mode="));
|
|
512
|
-
const createModeToken = createModeTokenIndex < 0
|
|
513
|
-
? undefined
|
|
514
|
-
: optionArgv[createModeTokenIndex]?.startsWith("--create-mode=")
|
|
515
|
-
? optionArgv[createModeTokenIndex]?.slice("--create-mode=".length)
|
|
516
|
-
: optionArgv[createModeTokenIndex + 1];
|
|
517
|
-
const strictCreateMode = commandName === "create" && createModeToken?.toLowerCase() === "strict";
|
|
518
|
-
const requiredSets = buildCreatePolicyRequiredSets(commandName, typeDefinition);
|
|
519
|
-
const progressivePolicyState = resolveCommandOptionPolicyState(typeDefinition, commandName, requiredSets.progressive);
|
|
520
|
-
const policyState = resolveCommandOptionPolicyState(typeDefinition, commandName, strictCreateMode ? requiredSets.strict : requiredSets.progressive);
|
|
521
|
-
const toFlags = (options) => options.length > 0
|
|
522
|
-
? options
|
|
523
|
-
.map((option) => commandOptionFlagLabel(commandName, option))
|
|
524
|
-
.join(", ")
|
|
525
|
-
: "none";
|
|
526
|
-
const lines = [
|
|
527
|
-
"",
|
|
528
|
-
`Type-aware option policies for ${typeDefinition.name}:`,
|
|
529
|
-
` required: ${toFlags(policyState.required)}`,
|
|
530
|
-
` disabled: ${toFlags(policyState.disabled)}`,
|
|
531
|
-
` hidden: ${toFlags(policyState.hidden)}`,
|
|
532
|
-
];
|
|
533
|
-
if (commandName === "create") {
|
|
534
|
-
const strictPolicyState = resolveCommandOptionPolicyState(typeDefinition, commandName, requiredSets.strict);
|
|
535
|
-
appendStrictCreatePolicyHelpLines(lines, typeDefinition, progressivePolicyState.required, strictPolicyState.required);
|
|
536
|
-
}
|
|
537
|
-
appendTypeOptionHelpLines(lines, typeDefinition);
|
|
538
|
-
if (policyState.errors.length > 0) {
|
|
539
|
-
lines.push(` config errors: ${policyState.errors.join("; ")}`);
|
|
540
|
-
}
|
|
541
|
-
return lines.join("\n");
|
|
542
|
-
}
|
|
543
|
-
/** Implements attach create update policy help text for the public runtime surface of this module. */
|
|
544
|
-
export function attachCreateUpdatePolicyHelpText(rootProgram, typeRegistry, argv) {
|
|
545
|
-
const bootstrapCommand = parseBootstrapCommandName(argv);
|
|
546
|
-
if (bootstrapCommand !== "create" && bootstrapCommand !== "update") {
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
const command = findDirectChildCommand(rootProgram, bootstrapCommand);
|
|
550
|
-
if (!command) {
|
|
551
|
-
return;
|
|
552
|
-
}
|
|
553
|
-
command.addHelpText("after", buildCreateUpdatePolicyHelpText(bootstrapCommand, typeRegistry, argv));
|
|
554
|
-
}
|
|
555
|
-
/** Public contract for test only, shared by SDK and presentation-layer consumers. */
|
|
556
|
-
export const _testOnly = {
|
|
557
|
-
attachCreateUpdatePolicyHelpText,
|
|
558
|
-
buildCreateUpdatePolicyHelpText,
|
|
559
|
-
buildJsonHelpPayload,
|
|
560
|
-
buildPositionalActionHelpProjection,
|
|
561
|
-
buildHelpArgumentSummaries,
|
|
562
|
-
buildHelpOptionSummaries,
|
|
563
|
-
buildHelpSubcommandSummaries,
|
|
564
|
-
buildOptionAliasMap,
|
|
565
|
-
compactHelpOptionAliases,
|
|
566
|
-
readOptionAttributeName,
|
|
567
|
-
resolveCommandFromPathTokens,
|
|
568
|
-
resolveExtensionCommandSurface,
|
|
569
|
-
};
|
|
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]="481ed602-8144-59ae-9ac6-223f7a57ecef")}catch(e2){}})();import{hasSubcommandFlagContractsForCommand,PM_COMMAND_ALIAS_CONTRACTS,PM_CORE_COMMAND_NAMES}from"../sdk/cli-contracts.js";import{commandOptionFlagLabel,resolveCommandOptionPolicyState,resolveTypeDefinition,EXIT_CODE,writeStderr,writeStdout}from"../sdk/runtime-primitives.js";import{buildDynamicExtensionHelpOptionSummaries,mergeHelpOptionSummaries,findCommandByPath,findDirectChildCommand,commandAliases}from"./extension-command-help.js";import{getPmCommandHelpVisibilityTier,isFullHelpDiscovery,normalizeHelpCommandPath,resolveHelpDetailMode,resolveHelpNarrative}from"./help-content.js";import{getCommandPath}from"./registration-helpers.js";import{parseBootstrapGlobalOptions,parseBootstrapHelpRequest,parseBootstrapCommandName,parseBootstrapTypeValue}from"./bootstrap-args.js";import{extractProvidedOptionFlags,renderPmCommand}from"./argv-utils.js";import{formatCommanderErrorForJson}from"./error-guidance.js";import{BUILTIN_TYPE_HELP_VALUES,buildUnknownCommandGuidanceFromRuntime,isKnownHelpCommandPath}from"./commander-usage.js";import{attachOutputTokenAccounting}from"../sdk/output-token-accounting.js";import{resolveCreateExplicitEmptyFlag}from"../sdk/agent/create-option-policy.js";import{formatPmPositionalActionFlagTip,PM_POSITIONAL_ACTION_CONTRACTS,resolvePmPositionalActionContract}from"../sdk/cli-contracts/grammar-contracts.js";import{resolvePmCommandCapabilityFamily,resolvePmCommandVisibilityTier}from"../sdk/agent-capability-contracts.js";const EXTENSION_TIER_ORDER={core:0,standard:1,full:2,internal:3};function resolveExtensionCommandSurface(commandPath,descriptors,allowDescendants=true){const exact=descriptors.get(commandPath);if(exact)return exact;if(!allowDescendants)return void 0;const descendants=[...descriptors.entries()].filter(([path])=>path.startsWith(`${commandPath} `)).map(([,descriptor])=>descriptor);if(descendants.length===0)return void 0;const tier=descendants.reduce((selected,descriptor)=>EXTENSION_TIER_ORDER[descriptor.tier]<EXTENSION_TIER_ORDER[selected]?descriptor.tier:selected,"internal");const families=new Set(descendants.map(({family})=>family));return{tier,family:families.size===1?descendants[0].family:"extensions"}}function resolveCommandFromPathTokens(root,pathTokens){if(pathTokens.length===0){return root}const exactCommand=findCommandByPath(root,pathTokens);if(exactCommand){return exactCommand}const requestedPath=pathTokens.join(" ");if(!PM_CORE_COMMAND_NAMES.some(commandName=>commandName===requestedPath)&&!hasSubcommandFlagContractsForCommand(requestedPath)&&!resolvePmPositionalActionContract(requestedPath)&&!isKnownHelpCommandPath(root,pathTokens)){return null}for(let length=pathTokens.length-1;length>0;length-=1){const positionalParent=findCommandByPath(root,pathTokens.slice(0,length));if(positionalParent){return positionalParent}}return pathTokens.length===1?root:null}function extractOptionValueName(flags){const match=flags.match(/[<[]([^>\]]+)[>\]]/);if(!match){return null}const value=match[1]?.trim();return value&&value.length>0?value:null}function readOptionAttributeName(option){const optionRecord=option;if(typeof optionRecord.attributeName==="function"){const value=optionRecord.attributeName();return typeof value==="string"&&value.trim().length>0?value.trim():null}if(typeof optionRecord.attributeName==="string"&&optionRecord.attributeName.trim().length>0){return optionRecord.attributeName.trim()}return null}function buildOptionAliasMap(options){const aliasMap=new Map;for(const option of options){const optionRecord=option;const attributeName=readOptionAttributeName(option);if(!attributeName||typeof optionRecord.long!=="string"||optionRecord.long.trim().length===0){continue}const existing=aliasMap.get(attributeName)??[];existing.push(optionRecord.long.trim());aliasMap.set(attributeName,existing)}for(const[attributeName,values]of aliasMap.entries()){aliasMap.set(attributeName,[...new Set(values.map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right)))}return aliasMap}function renderAttemptedCommand(argv){return renderPmCommand(argv)}function buildHelpOptionSummaries(command){const options=command.options??[];const optionAliasMap=buildOptionAliasMap(options);return options.map(option=>{const optionRecord=option;const flags=typeof optionRecord.flags==="string"?optionRecord.flags.trim():"";const description=typeof optionRecord.description==="string"?optionRecord.description.trim():"";const attributeName=readOptionAttributeName(option);const aliasCandidates=attributeName?optionAliasMap.get(attributeName)??[]:[];const aliases=aliasCandidates.filter(entry=>entry!==optionRecord.long).map(entry=>entry.trim()).filter(entry=>entry.length>0);const aliasForMatch=description.match(/^Alias for ([^ ]+)/i);const aliasFor=aliasForMatch&&aliasForMatch[1]?aliasForMatch[1].trim():null;const required=optionRecord.mandatory===true||description.includes("[required]")||description.toLowerCase().includes("required;");const valueRequired=flags.includes("<");const takesValue=valueRequired||flags.includes("[");const summary={flags,long:typeof optionRecord.long==="string"?optionRecord.long:null,short:typeof optionRecord.short==="string"?optionRecord.short:null,description,takes_value:takesValue,value_required:valueRequired,value_name:extractOptionValueName(flags),variadic:optionRecord.variadic===true,required,aliases,alias_for:aliasFor};if(optionRecord.defaultValue!==void 0){summary.default_value=optionRecord.defaultValue}return summary})}function compactHelpOptionAliases(options){const canonicalByLong=new Map;const aliasOptions=[];for(const option of options){if(option.alias_for&&option.long){aliasOptions.push(option);continue}if(option.long){canonicalByLong.set(option.long,option)}}for(const aliasOption of aliasOptions){const aliasFor=aliasOption.alias_for;const canonical=canonicalByLong.get(aliasFor);if(!canonical){continue}const aliasLong=aliasOption.long;const aliases=new Set([...canonical.aliases??[],aliasLong]);canonical.aliases=[...aliases].sort((left,right)=>left.localeCompare(right))}return options.filter(option=>{if(!option.alias_for||!option.long){return true}return!canonicalByLong.has(option.alias_for)})}function buildHelpArgumentSummaries(command){const commandRecord=command;const argumentsList=Array.isArray(commandRecord.registeredArguments)?commandRecord.registeredArguments:Array.isArray(commandRecord._args)?commandRecord._args:[];return argumentsList.map(argument=>{const rawName=typeof argument.name==="function"?argument.name():typeof argument.name==="string"?argument.name:"argument";const description=typeof argument.description==="string"&&argument.description.trim().length>0?argument.description.trim():null;return{name:rawName.trim(),required:argument.required===true||description?.toLowerCase().startsWith("required;")===true,variadic:argument.variadic===true,description}})}function buildHelpSubcommandSummaries(command,extensionDescriptors=new Map,includeAll=false){const visible=command.createHelp().visibleCommands(command);const candidates=includeAll?[...new Set([...visible,...command.commands])]:visible;return candidates.filter(entry=>entry.name()!=="help"||command.parent===null).filter(entry=>!includeAll||(getPmCommandHelpVisibilityTier(entry)??resolvePmCommandVisibilityTier(entry.name()))!=="internal").map(entry=>{const commandPath=normalizeHelpCommandPath(getCommandPath(entry));const rootCommand=commandPath.split(" ")[0];const declaredTier=getPmCommandHelpVisibilityTier(entry);const extensionDescriptor=resolveExtensionCommandSurface(commandPath,extensionDescriptors,declaredTier!==void 0);const aliasContract=PM_COMMAND_ALIAS_CONTRACTS.find(({alias})=>alias===commandPath);return{name:entry.name().trim(),aliases:commandAliases(entry),description:entry.description().trim(),tier:extensionDescriptor?.tier??declaredTier??resolvePmCommandVisibilityTier(rootCommand),family:extensionDescriptor?.family??resolvePmCommandCapabilityFamily(rootCommand),...aliasContract?{alias_for:aliasContract.canonical,alias_lifecycle:aliasContract.lifecycle,...aliasContract.lifecycle==="deprecated"?{deprecated:true}:{}}:{}}}).sort((left,right)=>left.name.localeCompare(right.name))}function buildJsonHelpNarrative(detailMode,fallbackNarrative,extensionDescriptor){if(!extensionDescriptor){return fallbackNarrative}const extensionExamples=extensionDescriptor.examples??[];const extensionFailureHints=extensionDescriptor.failure_hints??[];return{intent:extensionDescriptor.intent??extensionDescriptor.description??fallbackNarrative.intent,examples:detailMode==="detailed"?extensionExamples.length>0?[...extensionExamples]:[...fallbackNarrative.examples]:extensionExamples.length>0?[extensionExamples[0]]:[...fallbackNarrative.examples],tips:detailMode==="detailed"?extensionFailureHints.length>0?[...extensionFailureHints]:[...fallbackNarrative.tips]:[],detail_mode:detailMode}}function resolveJsonHelpVisibilityTier(rootCommandPath,extensionDescriptor){if(rootCommandPath===void 0)return null;return extensionDescriptor?.tier??resolvePmCommandVisibilityTier(rootCommandPath)}function resolveJsonHelpCapabilityFamily(rootCommandPath,extensionDescriptor){if(rootCommandPath===void 0)return null;return extensionDescriptor?.family??resolvePmCommandCapabilityFamily(rootCommandPath)}function projectFullCommandAliases(rootProgram,targetCommand,fullDiscovery){if(targetCommand!==rootProgram||!fullDiscovery)return void 0;return PM_COMMAND_ALIAS_CONTRACTS.map(contract=>({alias:contract.alias,canonical:contract.canonical,canonical_argv:[...contract.canonical_argv],lifecycle:contract.lifecycle,hidden:contract.hidden,deprecated:contract.lifecycle==="deprecated"}))}function buildPositionalActionHelpProjection(action,targetCommand,resolvedPath,allOptions,extensionDescriptors=new Map,includeAll=false){if(!action){const argumentsList=buildHelpArgumentSummaries(targetCommand);const registeredSubcommands=buildHelpSubcommandSummaries(targetCommand,extensionDescriptors,includeAll);const registeredSubcommandNames=new Set(registeredSubcommands.map(({name})=>name));return{arguments:argumentsList,options:allOptions,subcommands:[...registeredSubcommands,...PM_POSITIONAL_ACTION_CONTRACTS.filter(({parent,action:name})=>parent===resolvedPath&&!registeredSubcommandNames.has(name)).map(({action:name,description})=>({name,aliases:[],description,tier:resolvePmCommandVisibilityTier(resolvedPath.split(" ")[0]),family:resolvePmCommandCapabilityFamily(resolvedPath.split(" ")[0])}))].sort((left,right)=>left.name.localeCompare(right.name)),usage:[resolvedPath,argumentsList.reduce((usage,argument)=>argument.required?usage.replace(`[${argument.name}${argument.variadic?"...":""}]`,`<${argument.name}${argument.variadic?"...":""}>`):usage,targetCommand.usage())].filter(token=>token.length>0).join(" ")}}const acceptedFlags=new Set(action.accepted_flags);return{arguments:action.slots.map(({name,required,variadic,value_kind:valueKind,polymorphic})=>({name,required,variadic,description:polymorphic?`Polymorphic ${valueKind} value; inspect the action contract before mutation.`:`${valueKind.replaceAll("_"," ")} value.`})),options:allOptions.filter(({long,aliases})=>long!==null&&acceptedFlags.has(long)||aliases.some(alias=>acceptedFlags.has(alias))),subcommands:[],usage:[action.command,...action.slots.map(({name,required,variadic})=>{const token=variadic?`${name}...`:name;return required?`<${token}>`:`[${token}]`})].join(" ")}}function buildJsonHelpPayload(rootProgram,targetCommand,argv,requestedPath,extensionDescriptors){const detailMode=resolveHelpDetailMode(argv);const fullDiscovery=isFullHelpDiscovery(argv);const commanderPath=normalizeHelpCommandPath(getCommandPath(targetCommand));const requestedCommandPath=normalizeHelpCommandPath(requestedPath.join(" "));const resolvedPath=requestedCommandPath.length>commanderPath.length?requestedCommandPath:commanderPath;const positionalAction=resolvePmPositionalActionContract(resolvedPath);const projectedPath=positionalAction?.command??commanderPath;const commandPath=projectedPath.length>0?projectedPath:void 0;const rootCommandPath=commandPath?.split(" ")[0];const fallbackNarrative=resolveHelpNarrative(commandPath,detailMode);const extensionDescriptor=commandPath?extensionDescriptors.get(commandPath):void 0;const extensionSurface=commandPath?resolveExtensionCommandSurface(commandPath,extensionDescriptors,getPmCommandHelpVisibilityTier(targetCommand)!==void 0):void 0;const narrative=buildJsonHelpNarrative(detailMode,fallbackNarrative,extensionDescriptor);const allOptionSummaries=compactHelpOptionAliases(mergeHelpOptionSummaries(buildHelpOptionSummaries(targetCommand),buildDynamicExtensionHelpOptionSummaries(extensionDescriptor)));const projection=buildPositionalActionHelpProjection(positionalAction,targetCommand,projectedPath,allOptionSummaries,extensionDescriptors,fullDiscovery);const fullCommandAliases=projectFullCommandAliases(rootProgram,targetCommand,fullDiscovery);return{format:"pm_help_v1",detail_mode:detailMode,root_command:rootProgram.name(),requested_path:requestedPath,resolved_path:projectedPath.length>0?projectedPath:rootProgram.name(),visibility_tier:resolveJsonHelpVisibilityTier(rootCommandPath,extensionSurface),capability_family:resolveJsonHelpCapabilityFamily(rootCommandPath,extensionSurface),description:positionalAction?.description??targetCommand.description(),usage:projection.usage,intent:positionalAction?.description??narrative.intent,examples:positionalAction?[positionalAction.example]:narrative.examples,tips:positionalAction?[formatPmPositionalActionFlagTip(positionalAction.accepted_flags)]:narrative.tips,arguments:projection.arguments,options:projection.options,subcommands:projection.subcommands,has_subcommands:projection.subcommands.length>0,...fullCommandAliases===void 0?{}:{command_aliases:fullCommandAliases}}}async function maybeRenderBootstrapJsonHelp(rootProgram,argv,extensionDescriptors){const bootstrapGlobal=parseBootstrapGlobalOptions(argv);if(!bootstrapGlobal.json){return false}const helpRequest=parseBootstrapHelpRequest(argv);if(!helpRequest.requested){return false}const targetCommand=resolveCommandFromPathTokens(rootProgram,helpRequest.commandPathTokens);if(!targetCommand){if(!bootstrapGlobal.quiet){const unknownMessage=`unknown command '${helpRequest.commandPathTokens.join(" ")}'`;const runtimeContext=buildUnknownCommandGuidanceFromRuntime(unknownMessage,rootProgram,extensionDescriptors);const envelope=formatCommanderErrorForJson(unknownMessage,"help",BUILTIN_TYPE_HELP_VALUES,EXIT_CODE.USAGE,{...runtimeContext,attemptedCommand:renderAttemptedCommand(argv),normalizedInvocationArgs:[...argv],providedOptionFlags:extractProvidedOptionFlags(argv)});const output=bootstrapGlobal.tokenAccounting?attachOutputTokenAccounting(envelope,value=>`${JSON.stringify(value,null,2)}
|
|
2
|
+
`):envelope;writeStderr(`${JSON.stringify(output,null,2)}
|
|
3
|
+
`)}process.exitCode=EXIT_CODE.USAGE;return true}if(!bootstrapGlobal.quiet){const payload=buildJsonHelpPayload(rootProgram,targetCommand,argv,helpRequest.commandPathTokens,extensionDescriptors);writeStdout(`${JSON.stringify(payload,null,2)}
|
|
4
|
+
`)}process.exitCode=EXIT_CODE.SUCCESS;return true}function buildCreateUpdatePolicyIntro(commandName,typeRegistry){const lines=["","Type-aware option policies:"," pass --type <value> with --help to render required/disabled/hidden option policy details for that type.",` active type values: ${typeRegistry.types.join("|")}`];if(commandName==="create"){lines.push(" scheduling shortcut: use --schedule-preset lightweight for Reminder/Meeting/Event minimal create flows.")}return lines.join("\n")}function appendTypeOptionHelpLines(lines,typeDefinition){if(typeDefinition.options.length===0){lines.push(" type options: none");return}lines.push(" type options:");for(const option of typeDefinition.options){const requiredLabel=option.required?" (required)":"";const aliases=option.aliases??[];lines.push(` - ${option.key}${requiredLabel}`);lines.push(` values: ${option.values.length>0?option.values.join("|"):"any non-empty string"}`);lines.push(` aliases: ${aliases.length>0?aliases.join("|"):"none"}`);if(option.description&&option.description.trim().length>0){lines.push(` description: ${option.description.trim()}`)}}}function buildCreatePolicyRequiredSets(commandName,typeDefinition){const progressive=commandName==="create"?new Set(["title","type"]):new Set;const strict=new Set(progressive);if(commandName==="create"){for(const option of[...typeDefinition.required_create_fields,...typeDefinition.required_create_repeatables]){strict.add(option)}}return{progressive,strict}}function appendStrictCreatePolicyHelpLines(lines,typeDefinition,progressiveRequired,strictRequired){const progressive=new Set(progressiveRequired);const strictOnly=strictRequired.filter(option=>!progressive.has(option));const toFlags=options=>options.length>0?options.map(option=>commandOptionFlagLabel("create",option)).join(", "):"none";lines.push(` required in strict mode: ${toFlags(strictOnly)}`);const explicitEmptyFlags=strictOnly.map(resolveCreateExplicitEmptyFlag).filter(flag=>flag!==void 0);lines.push(` explicit empty assertion: ${explicitEmptyFlags.length>0?explicitEmptyFlags.join(", "):"none"}`);if(["Reminder","Meeting","Event"].includes(typeDefinition.name)){lines.push(" schedule preset: --schedule-preset lightweight switches schedule artifacts to progressive required-option policy.");lines.push(" strict parity remains available via --create-mode strict.")}}function buildCreateUpdatePolicyHelpText(commandName,typeRegistry,argv){const selectedTypeRaw=parseBootstrapTypeValue(argv);if(!selectedTypeRaw){return buildCreateUpdatePolicyIntro(commandName,typeRegistry)}const typeDefinition=resolveTypeDefinition(selectedTypeRaw,typeRegistry);if(!typeDefinition){const allowed=typeRegistry.types.join("|");return["",`Type-aware option policies: type "${selectedTypeRaw}" is not in the active registry.`,` active type values: ${allowed}`].join("\n")}const argumentTerminatorIndex=argv.indexOf("--");const optionArgv=argumentTerminatorIndex<0?argv:argv.slice(0,argumentTerminatorIndex);const createModeTokenIndex=optionArgv.findIndex(token=>token==="--create-mode"||token.startsWith("--create-mode="));const createModeToken=createModeTokenIndex<0?void 0:optionArgv[createModeTokenIndex]?.startsWith("--create-mode=")?optionArgv[createModeTokenIndex]?.slice("--create-mode=".length):optionArgv[createModeTokenIndex+1];const strictCreateMode=commandName==="create"&&createModeToken?.toLowerCase()==="strict";const requiredSets=buildCreatePolicyRequiredSets(commandName,typeDefinition);const progressivePolicyState=resolveCommandOptionPolicyState(typeDefinition,commandName,requiredSets.progressive);const policyState=resolveCommandOptionPolicyState(typeDefinition,commandName,strictCreateMode?requiredSets.strict:requiredSets.progressive);const toFlags=options=>options.length>0?options.map(option=>commandOptionFlagLabel(commandName,option)).join(", "):"none";const lines=["",`Type-aware option policies for ${typeDefinition.name}:`,` required: ${toFlags(policyState.required)}`,` disabled: ${toFlags(policyState.disabled)}`,` hidden: ${toFlags(policyState.hidden)}`];if(commandName==="create"){const strictPolicyState=resolveCommandOptionPolicyState(typeDefinition,commandName,requiredSets.strict);appendStrictCreatePolicyHelpLines(lines,typeDefinition,progressivePolicyState.required,strictPolicyState.required)}appendTypeOptionHelpLines(lines,typeDefinition);if(policyState.errors.length>0){lines.push(` config errors: ${policyState.errors.join("; ")}`)}return lines.join("\n")}function attachCreateUpdatePolicyHelpText(rootProgram,typeRegistry,argv){const bootstrapCommand=parseBootstrapCommandName(argv);if(bootstrapCommand!=="create"&&bootstrapCommand!=="update"){return}const command=findDirectChildCommand(rootProgram,bootstrapCommand);if(!command){return}command.addHelpText("after",buildCreateUpdatePolicyHelpText(bootstrapCommand,typeRegistry,argv))}const _testOnly={attachCreateUpdatePolicyHelpText,buildCreateUpdatePolicyHelpText,buildJsonHelpPayload,buildPositionalActionHelpProjection,buildHelpArgumentSummaries,buildHelpOptionSummaries,buildHelpSubcommandSummaries,buildOptionAliasMap,compactHelpOptionAliases,readOptionAttributeName,resolveCommandFromPathTokens,resolveExtensionCommandSurface};export{_testOnly,attachCreateUpdatePolicyHelpText,maybeRenderBootstrapJsonHelp};
|
|
570
5
|
//# sourceMappingURL=help-json-payload.js.map
|
|
571
|
-
//# debugId=e4324332-da8f-5ae1-b0e3-b6d0e9674f98
|
package/dist/cli/main.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ interface RuntimeExtensionActivationProbe {
|
|
|
52
52
|
allowCommandPrefixMatch?: boolean;
|
|
53
53
|
}
|
|
54
54
|
declare function inferMissingFieldsFromErrorMessage(message: string): string[] | undefined;
|
|
55
|
+
/** Build replayable recovery guidance after removing sensitive matcher values from every invocation representation. */
|
|
55
56
|
declare function buildPmCliRecoveryContext(context: PmCliErrorContext | undefined, invocationArgv: string[], rawMessage: string): PmCliErrorContext;
|
|
56
57
|
declare function readRecordString(record: Record<string, unknown> | null, ...keys: string[]): string | undefined;
|
|
57
58
|
declare function readRecordBoolean(record: Record<string, unknown> | null, ...keys: string[]): boolean | undefined;
|
|
@@ -116,6 +117,7 @@ declare function buildRuntimeExtensionSnapshotCacheKey(pmRoot: string, activatio
|
|
|
116
117
|
declare function bootstrapProfileEnabled(invocationArgv: string[]): boolean;
|
|
117
118
|
declare function buildRuntimeExtensionDiscoverySnapshotCacheKey(pmRoot: string): string;
|
|
118
119
|
declare function collectLeadingCommandArgs(commandArgs: readonly string[] | undefined): string[];
|
|
120
|
+
/** Match leading command paths against both native history spellings and stable extension operation identities. */
|
|
119
121
|
declare function collectActivationCommandCandidates(probe: RuntimeExtensionActivationProbe): string[];
|
|
120
122
|
declare function activationCommandMatchesProbe(command: string, probe: RuntimeExtensionActivationProbe): boolean;
|
|
121
123
|
declare function extensionActivationCommands(extension: ExtensionDiscoveryResult["effective"][number]): string[];
|
|
@@ -156,6 +158,7 @@ declare function maybeLoadRuntimeExtensions(command: Command): Promise<{
|
|
|
156
158
|
declare function loadRuntimeExtensionCommandDescriptorsForRecovery(pmRoot: string): Promise<Map<string, ExtensionCommandHelpDescriptor>>;
|
|
157
159
|
declare function executeRegisteredRuntimeMigrations(migrations: RegisteredExtensionSchemaMigrationDefinition[], pmRoot: string): Promise<string[]>;
|
|
158
160
|
declare function runRequiredExtensionCommand(command: Command, options: Record<string, unknown>, globalOptions: GlobalOptions, extensionFlagDefinitions?: LooseCommandFlagDefinition[]): Promise<unknown>;
|
|
161
|
+
/** Wrap each action once so validated parser overrides and extension handlers precede the original core action. */
|
|
159
162
|
declare function wrapProgramActionsForExtensionHandlers(rootProgram: Command): void;
|
|
160
163
|
/** Apply descendant-derived visibility to every generated extension namespace. */
|
|
161
164
|
declare function applyDynamicExtensionRootHelpVisibility(rootProgram: Command, preexistingTopLevelCommands: ReadonlySet<string>, descriptors: ReadonlyMap<string, ExtensionCommandHelpDescriptor>): void;
|
|
@@ -168,6 +171,7 @@ interface CoreCommandRegistrationSelection {
|
|
|
168
171
|
targetCommandName?: string;
|
|
169
172
|
}
|
|
170
173
|
declare function invocationRequestsVersion(invocationArgv: string[]): boolean;
|
|
174
|
+
/** Load only the selected core registration family, retaining complete discovery for help and unknown paths. */
|
|
171
175
|
declare function resolveCoreCommandRegistrationSelection(invocationArgv: string[]): CoreCommandRegistrationSelection;
|
|
172
176
|
declare function shouldAttachRichHelpTextForInvocation(invocationArgv: string[]): boolean;
|
|
173
177
|
/**
|