@unbrained/pm-cli 2026.5.14 → 2026.5.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +78 -457
- package/CHANGELOG.md +71 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +8 -6
- package/dist/cli/argv-utils.js +4 -1
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.js +4 -1
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +19 -1
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +4 -1
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.js +5 -2
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/annotation-command.d.ts +49 -0
- package/dist/cli/commands/annotation-command.js +135 -0
- package/dist/cli/commands/annotation-command.js.map +1 -0
- package/dist/cli/commands/append.js +5 -6
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.js +5 -5
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/claim.d.ts +3 -0
- package/dist/cli/commands/claim.js +29 -23
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +63 -8
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.js +4 -1
- package/dist/cli/commands/comments-audit.js.map +1 -1
- package/dist/cli/commands/comments.d.ts +5 -0
- package/dist/cli/commands/comments.js +29 -116
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +198 -15
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +4 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.js +21 -13
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +9 -0
- package/dist/cli/commands/contracts.js +314 -64
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +77 -48
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +9 -3
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/delete.d.ts +3 -0
- package/dist/cli/commands/delete.js +11 -7
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/deps.js +4 -1
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/docs.d.ts +1 -0
- package/dist/cli/commands/docs.js +6 -7
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/event-validation-messages.d.ts +3 -0
- package/dist/cli/commands/event-validation-messages.js +44 -0
- package/dist/cli/commands/event-validation-messages.js.map +1 -0
- package/dist/cli/commands/extension.d.ts +3 -1
- package/dist/cli/commands/extension.js +259 -52
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.js +8 -12
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/gc.js +19 -3
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.d.ts +10 -5
- package/dist/cli/commands/get.js +135 -20
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.js +6 -8
- package/dist/cli/commands/guide.js.map +1 -1
- package/dist/cli/commands/health.d.ts +14 -0
- package/dist/cli/commands/health.js +269 -67
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +50 -0
- package/dist/cli/commands/history-redact.js +476 -0
- package/dist/cli/commands/history-redact.js.map +1 -0
- package/dist/cli/commands/history-repair.d.ts +33 -0
- package/dist/cli/commands/history-repair.js +166 -0
- package/dist/cli/commands/history-repair.js.map +1 -0
- package/dist/cli/commands/history.d.ts +4 -0
- package/dist/cli/commands/history.js +12 -79
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +5 -1
- package/dist/cli/commands/index.js +9 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init-agent-guidance.d.ts +31 -0
- package/dist/cli/commands/init-agent-guidance.js +336 -0
- package/dist/cli/commands/init-agent-guidance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +42 -0
- package/dist/cli/commands/init.js +96 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +22 -118
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/linked-test-entry.d.ts +3 -0
- package/dist/cli/commands/linked-test-entry.js +62 -0
- package/dist/cli/commands/linked-test-entry.js.map +1 -0
- package/dist/cli/commands/list.d.ts +1 -0
- package/dist/cli/commands/list.js +72 -38
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/metadata-normalizers.js +4 -1
- package/dist/cli/commands/metadata-normalizers.js.map +1 -1
- package/dist/cli/commands/normalize.js +4 -1
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +22 -118
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +121 -0
- package/dist/cli/commands/plan.js +1137 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reindex.js +4 -1
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +9 -49
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +31 -0
- package/dist/cli/commands/schema.js +98 -0
- package/dist/cli/commands/schema.js.map +1 -0
- package/dist/cli/commands/search.js +156 -40
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.js +4 -1
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +4 -0
- package/dist/cli/commands/templates.js +91 -16
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.js +6 -7
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.js +4 -1
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/commands/test.d.ts +1 -0
- package/dist/cli/commands/test.js +9 -9
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +6 -7
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.js +204 -103
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/upgrade.js +6 -3
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +3 -1
- package/dist/cli/commands/validate.js +44 -64
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +99 -6
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +0 -1
- package/dist/cli/extension-command-help.js +4 -12
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +1 -0
- package/dist/cli/extension-command-options.js +108 -6
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/guide-topics.js +4 -1
- package/dist/cli/guide-topics.js.map +1 -1
- package/dist/cli/help-content.d.ts +0 -1
- package/dist/cli/help-content.js +46 -22
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +1 -0
- package/dist/cli/help-json-payload.js +35 -2
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.js +214 -30
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.js +4 -1
- package/dist/cli/migration-gates.js.map +1 -1
- package/dist/cli/register-list-query.d.ts +1 -1
- package/dist/cli/register-list-query.js +75 -29
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.d.ts +1 -1
- package/dist/cli/register-mutation.js +430 -38
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +47 -10
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +47 -25
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +0 -2
- package/dist/cli/registration-helpers.js +21 -40
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli/shared-parsers.js +4 -1
- package/dist/cli/shared-parsers.js.map +1 -1
- package/dist/cli/telemetry-flush.js +4 -1
- package/dist/cli/telemetry-flush.js.map +1 -1
- package/dist/cli.js +65 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/extensions/extension-types.js +4 -1
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +0 -1
- package/dist/core/extensions/index.js +4 -13
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.js +4 -1
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +78 -60
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runtime-registrations.js +4 -1
- package/dist/core/extensions/runtime-registrations.js.map +1 -1
- package/dist/core/fs/fs-utils.js +4 -1
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/fs/index.js +4 -1
- package/dist/core/fs/index.js.map +1 -1
- package/dist/core/fs/path-utils.d.ts +1 -0
- package/dist/core/fs/path-utils.js +12 -0
- package/dist/core/fs/path-utils.js.map +1 -0
- package/dist/core/history/drift-scan.d.ts +11 -0
- package/dist/core/history/drift-scan.js +67 -0
- package/dist/core/history/drift-scan.js.map +1 -0
- package/dist/core/history/history-stream-policy.js +4 -1
- package/dist/core/history/history-stream-policy.js.map +1 -1
- package/dist/core/history/history.js +4 -1
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/history/index.js +4 -1
- package/dist/core/history/index.js.map +1 -1
- package/dist/core/history/replay.d.ts +82 -0
- package/dist/core/history/replay.js +249 -0
- package/dist/core/history/replay.js.map +1 -0
- package/dist/core/item/id.js +4 -1
- package/dist/core/item/id.js.map +1 -1
- package/dist/core/item/index.js +4 -1
- package/dist/core/item/index.js.map +1 -1
- package/dist/core/item/item-format.js +250 -8
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/item-type-definition.d.ts +52 -0
- package/dist/core/item/item-type-definition.js +123 -0
- package/dist/core/item/item-type-definition.js.map +1 -0
- package/dist/core/item/parent-reference-policy.js +4 -1
- package/dist/core/item/parent-reference-policy.js.map +1 -1
- package/dist/core/item/parse.js +34 -3
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/priority.d.ts +23 -0
- package/dist/core/item/priority.js +55 -0
- package/dist/core/item/priority.js.map +1 -0
- package/dist/core/item/sprint-release-format.js +4 -1
- package/dist/core/item/sprint-release-format.js.map +1 -1
- package/dist/core/item/status.d.ts +14 -1
- package/dist/core/item/status.js +24 -1
- package/dist/core/item/status.js.map +1 -1
- package/dist/core/item/toon-decode.d.ts +19 -0
- package/dist/core/item/toon-decode.js +69 -0
- package/dist/core/item/toon-decode.js.map +1 -0
- package/dist/core/item/type-registry.js +15 -83
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/index.js +4 -1
- package/dist/core/lock/index.js.map +1 -1
- package/dist/core/lock/lock.js +4 -1
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/output.d.ts +4 -0
- package/dist/core/output/output.js +47 -6
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/packages/manifest.d.ts +1 -0
- package/dist/core/packages/manifest.js +6 -8
- package/dist/core/packages/manifest.js.map +1 -1
- package/dist/core/packages/root.d.ts +3 -0
- package/dist/core/packages/root.js +51 -0
- package/dist/core/packages/root.js.map +1 -0
- package/dist/core/schema/item-types-file.d.ts +85 -0
- package/dist/core/schema/item-types-file.js +243 -0
- package/dist/core/schema/item-types-file.js.map +1 -0
- package/dist/core/schema/runtime-field-filters.js +4 -1
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.js +4 -1
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +2 -1
- package/dist/core/schema/runtime-schema.js +13 -8
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.js +7 -2
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +2 -0
- package/dist/core/search/corpus.js +77 -2
- package/dist/core/search/corpus.js.map +1 -1
- package/dist/core/search/embedding-batches.js +21 -7
- package/dist/core/search/embedding-batches.js.map +1 -1
- package/dist/core/search/http-client.js +4 -1
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/providers.js +4 -1
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +12 -3
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.js +4 -1
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.js +4 -1
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.js +10 -13
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/author.d.ts +1 -0
- package/dist/core/shared/author.js +9 -0
- package/dist/core/shared/author.js.map +1 -0
- package/dist/core/shared/command-types.js +4 -1
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/conflict-markers.js +4 -1
- package/dist/core/shared/conflict-markers.js.map +1 -1
- package/dist/core/shared/constants.d.ts +2 -2
- package/dist/core/shared/constants.js +24 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/errors.js +4 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/shared/index.js +4 -1
- package/dist/core/shared/index.js.map +1 -1
- package/dist/core/shared/lazy-module.d.ts +1 -0
- package/dist/core/shared/lazy-module.js +11 -0
- package/dist/core/shared/lazy-module.js.map +1 -0
- package/dist/core/shared/levenshtein.js +4 -1
- package/dist/core/shared/levenshtein.js.map +1 -1
- package/dist/core/shared/option-alias-visibility.d.ts +44 -0
- package/dist/core/shared/option-alias-visibility.js +76 -0
- package/dist/core/shared/option-alias-visibility.js.map +1 -0
- package/dist/core/shared/primitives.js +4 -1
- package/dist/core/shared/primitives.js.map +1 -1
- package/dist/core/shared/serialization.js +4 -1
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/shared/text-normalization.d.ts +0 -1
- package/dist/core/shared/text-normalization.js +4 -4
- package/dist/core/shared/text-normalization.js.map +1 -1
- package/dist/core/shared/time.js +4 -1
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +8 -3
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/index.js +4 -1
- package/dist/core/store/index.js.map +1 -1
- package/dist/core/store/item-format-migration.js +4 -1
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/item-store.d.ts +4 -0
- package/dist/core/store/item-store.js +133 -39
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.js +4 -1
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +106 -0
- package/dist/core/store/settings-validator.js +279 -0
- package/dist/core/store/settings-validator.js.map +1 -0
- package/dist/core/store/settings.js +32 -331
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +4 -1
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.d.ts +1 -1
- package/dist/core/telemetry/observability.js +11 -2
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +34 -6
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/background-runs.js +4 -1
- package/dist/core/test/background-runs.js.map +1 -1
- package/dist/core/test/item-test-run-tracking.js +4 -1
- package/dist/core/test/item-test-run-tracking.js.map +1 -1
- package/dist/mcp/server.js +182 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +10 -3
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +4 -1
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +13 -2
- package/dist/sdk/cli-contracts.js +410 -26
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.js +4 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +25 -1
- package/dist/sdk/runtime.js +48 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types.d.ts +92 -2
- package/dist/types.js +42 -1
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +23 -7
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
- package/docs/CODEX_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +117 -12
- package/docs/CONFIGURATION.md +5 -2
- package/docs/EXTENSIONS.md +158 -814
- package/docs/QUICKSTART.md +11 -5
- package/docs/README.md +7 -6
- package/docs/RELEASING.md +13 -9
- package/docs/SDK.md +11 -2
- package/docs/TESTING.md +2 -2
- package/marketplace.json +3 -3
- package/package.json +15 -12
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/README.md +4 -2
- package/packages/pm-calendar/extensions/calendar/index.js +22 -3
- package/packages/pm-calendar/extensions/calendar/index.ts +22 -3
- package/packages/pm-calendar/extensions/calendar/runtime.js +26 -7
- package/packages/pm-calendar/extensions/calendar/runtime.ts +26 -7
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +1 -1
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/README.md +8 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +74 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +75 -1
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +67 -9
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +67 -9
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/README.md +1 -1
- package/packages/pm-templates/extensions/templates/runtime.js +11 -202
- package/packages/pm-templates/extensions/templates/runtime.ts +38 -230
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/.claude-plugin/plugin.json +2 -2
- package/plugins/{pm-cli-claude → pm-claude}/.mcp.json +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/README.md +4 -4
- package/plugins/{pm-cli-claude → pm-claude}/agents/pm-coordinator.md +1 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-init.md +10 -1
- package/plugins/{pm-cli-claude → pm-claude}/commands/pm-planner.md +18 -0
- package/plugins/{pm-cli-claude → pm-claude}/skills/pm-planner/SKILL.md +46 -1
- package/plugins/{pm-cli-codex → pm-codex}/.codex-plugin/plugin.json +3 -3
- package/plugins/{pm-cli-codex → pm-codex}/.mcp.json +1 -1
- package/plugins/{pm-cli-codex → pm-codex}/README.md +7 -4
- package/plugins/pm-codex/skills/pm-native/SKILL.md +81 -0
- package/scripts/finalize-build.mjs +28 -0
- package/scripts/prepare-build-cache.mjs +37 -0
- package/dist/core/output/command-aware.d.ts +0 -1
- package/dist/core/output/command-aware.js +0 -394
- package/dist/core/output/command-aware.js.map +0 -1
- package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +0 -57
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-delivery-chain.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-triage-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/agents/pm-verification-agent.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-calendar.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-developer.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-list.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-new.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-release.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-search.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-status.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-triage.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/commands/pm-workflow.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/hooks.json +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/hooks/session-start.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-audit/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-developer/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-claude → pm-claude}/skills/pm-workflow/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/assets/pm-cli-small.svg +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-audit.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-close-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/commands/pm-start-task.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-auditor/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-native/agents/openai.yaml +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/SKILL.md +0 -0
- /package/plugins/{pm-cli-codex → pm-codex}/skills/pm-release/agents/openai.yaml +0 -0
package/docs/QUICKSTART.md
CHANGED
|
@@ -9,7 +9,7 @@ Use this page to get from a clean repository to a tracked, verified item.
|
|
|
9
9
|
- Claim before implementation.
|
|
10
10
|
- Link changed files, docs, and tests to the item.
|
|
11
11
|
- Close only after evidence is recorded.
|
|
12
|
-
- Use `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
12
|
+
- Use `pm install guide-shell --project` before `pm guide quickstart` or `pm guide workflows` when you need local docs routing.
|
|
13
13
|
|
|
14
14
|
Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
|
|
15
15
|
|
|
@@ -34,9 +34,10 @@ For one-off use:
|
|
|
34
34
|
npx @unbrained/pm-cli --help
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Optional first-party packages are installable on demand:
|
|
37
|
+
Optional first-party packages are installable during init or on demand:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
+
pm init --defaults --with-packages
|
|
40
41
|
pm package catalog --project
|
|
41
42
|
pm install '*' --project
|
|
42
43
|
pm install all --project
|
|
@@ -48,9 +49,14 @@ pm package doctor --project --detail summary
|
|
|
48
49
|
```bash
|
|
49
50
|
pm init
|
|
50
51
|
pm health --check-only
|
|
52
|
+
pm init --agent-guidance status
|
|
53
|
+
pm init --agent-guidance add
|
|
51
54
|
```
|
|
52
55
|
|
|
53
56
|
`pm init` creates `.agents/pm/` with settings, item folders, history, locks, search cache directories, and project extension storage.
|
|
57
|
+
When AGENTS/CLAUDE guidance is missing, default `pm init` uses `--agent-guidance ask`: it prompts only in TTY, never blocks non-interactive runs, and records declined prompts.
|
|
58
|
+
Use `pm init --agent-guidance add` to write the compact workflow block later, or `pm init --agent-guidance status` to inspect guidance state without changing files.
|
|
59
|
+
Use `pm init --defaults --with-packages` when agents should get bundled commands such as calendar, templates, advanced search, and governance helpers in one non-interactive setup step.
|
|
54
60
|
|
|
55
61
|
## Create Your First Item
|
|
56
62
|
|
|
@@ -94,9 +100,9 @@ Do not create a duplicate item until `context`, `search`, and list commands show
|
|
|
94
100
|
## Link Work Artifacts
|
|
95
101
|
|
|
96
102
|
```bash
|
|
97
|
-
pm files <item-id> --add path=src/core/lock/lock.ts,
|
|
98
|
-
pm docs <item-id> --add path=docs/ARCHITECTURE.md,
|
|
99
|
-
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",
|
|
103
|
+
pm files <item-id> --add path=src/core/lock/lock.ts,note="implementation"
|
|
104
|
+
pm docs <item-id> --add path=docs/ARCHITECTURE.md,note="design context"
|
|
105
|
+
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/lock.spec.ts",timeout_seconds=240
|
|
100
106
|
```
|
|
101
107
|
|
|
102
108
|
Use `node scripts/run-tests.mjs ...` for linked tests so tracker data is sandboxed.
|
package/docs/README.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This directory is the public documentation home for `pm-cli`. It is organized for progressive disclosure: read the smallest page that answers the current question, then follow links only when more detail is needed.
|
|
4
4
|
|
|
5
|
-
## CLI Guide Router
|
|
5
|
+
## Optional CLI Guide Router
|
|
6
6
|
|
|
7
|
-
`pm guide`
|
|
7
|
+
`pm guide` is provided by the optional `guide-shell` package. Install it when local in-CLI documentation routing is useful:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
+
pm install guide-shell --project
|
|
10
11
|
pm guide
|
|
11
12
|
pm guide quickstart
|
|
12
13
|
pm guide commands --depth standard
|
|
@@ -23,7 +24,7 @@ pm guide release --json
|
|
|
23
24
|
| Maintainer | [Contributing](../CONTRIBUTING.md) | [Testing](TESTING.md), [Releasing](RELEASING.md), [Architecture](ARCHITECTURE.md) |
|
|
24
25
|
| Package author | [Packages and Extensions](EXTENSIONS.md) | [SDK](SDK.md), [starter extension](examples/starter-extension/README.md) |
|
|
25
26
|
| Codex user | [Codex Plugin](CODEX_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
|
|
26
|
-
| Machine client | `pm
|
|
27
|
+
| Machine client | `pm contracts --json` | [Command Reference](COMMANDS.md#machine-contracts), optionally `pm install guide-shell --project && pm guide commands` |
|
|
27
28
|
|
|
28
29
|
## Documentation Map
|
|
29
30
|
|
|
@@ -41,8 +42,8 @@ pm guide release --json
|
|
|
41
42
|
|
|
42
43
|
## Guide Topic Map
|
|
43
44
|
|
|
44
|
-
| `pm guide` topic | Primary docs |
|
|
45
|
-
|
|
45
|
+
| Optional `pm guide` topic | Primary docs |
|
|
46
|
+
|-----------------------------|--------------|
|
|
46
47
|
| `quickstart` | [Quickstart](QUICKSTART.md), [Command Reference](COMMANDS.md) |
|
|
47
48
|
| `commands` | [Command Reference](COMMANDS.md), [Configuration](CONFIGURATION.md) |
|
|
48
49
|
| `workflows` | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md) |
|
|
@@ -79,7 +80,7 @@ This documentation structure is tracked through:
|
|
|
79
80
|
When changing docs, link files back to the active item:
|
|
80
81
|
|
|
81
82
|
```bash
|
|
82
|
-
pm docs <item-id> --add path=docs/README.md,
|
|
83
|
+
pm docs <item-id> --add path=docs/README.md,note="documentation index"
|
|
83
84
|
pm comments <item-id> "Docs updated; links and build verified."
|
|
84
85
|
```
|
|
85
86
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Releasing `@unbrained/pm-cli`
|
|
2
2
|
|
|
3
3
|
This page is for maintainers cutting npm and GitHub releases. It assumes release work is tracked with `pm`.
|
|
4
|
-
For local progressive-disclosure routing, use `pm guide release`.
|
|
4
|
+
For local progressive-disclosure routing, install `guide-shell` with `pm install guide-shell --project`, then use `pm guide release`.
|
|
5
5
|
|
|
6
6
|
## Agent Quick Context
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ For local progressive-disclosure routing, use `pm guide release`.
|
|
|
10
10
|
- Publishing is owned by the tag-driven GitHub Actions release workflow.
|
|
11
11
|
- Do not run manual `npm publish`.
|
|
12
12
|
- Run local parity gates before pushing release tags.
|
|
13
|
-
- Use `pm guide release --json` for machine-readable release docs routing.
|
|
13
|
+
- Use `pm guide release --json` for machine-readable release docs routing after `guide-shell` is installed.
|
|
14
14
|
|
|
15
15
|
Tracked documentation work: [pm-1sb2](../.agents/pm/tasks/pm-1sb2.toon).
|
|
16
16
|
|
|
@@ -35,12 +35,12 @@ pnpm version:check
|
|
|
35
35
|
|
|
36
36
|
## One-Time Setup
|
|
37
37
|
|
|
38
|
-
-
|
|
38
|
+
- Use npm provenance publishing for `.github/workflows/release.yml` so GitHub-hosted release jobs publish signed packages. Keep `id-token: write`, Node 24 or newer, npm 11.5.1 or newer, `NODE_AUTH_TOKEN` from the `release` environment `NPM_TOKEN` secret, and `npm publish --access public --provenance`. The token must authenticate as a maintainer with read-write access to `@unbrained/pm-cli`.
|
|
39
39
|
- Add `SENTRY_AUTH_TOKEN` as an optional GitHub Environment or repository secret when Sentry release creation and sourcemap upload should run. Add `SENTRY_PERSONAL_ADMIN_TOKEN` only when the GitHub-hosted Sentry issue-threshold gate should read unresolved issues; CI-scoped release tokens may not have issue-read scope. The release workflow skips Sentry upload cleanly when `SENTRY_AUTH_TOKEN` is absent and skips the GitHub-hosted issue-threshold gate when `SENTRY_PERSONAL_ADMIN_TOKEN` is absent; local maintainers should still run the token-backed Sentry gate before release.
|
|
40
40
|
- Keep any `release` environment compatible with free GitHub features. This repository is public, so environment secrets and tag/branch deployment rules are compatible with the free GitHub path; do not add paid-only release gates.
|
|
41
41
|
- Ensure `GITHUB_TOKEN` has `contents: write` for GitHub Release creation.
|
|
42
42
|
- Keep `package.json` repository, homepage, and bugs URLs aligned with `https://github.com/unbraind/pm-cli`.
|
|
43
|
-
- Keep npm
|
|
43
|
+
- Keep npm publishing compatible with provenance. The release workflow must keep `id-token: write`, a GitHub-hosted runner, Node 24 or newer, npm 11.5.1 or newer, a valid `NPM_TOKEN`, and `npm publish --access public --provenance`.
|
|
44
44
|
|
|
45
45
|
## Automated Daily Driver
|
|
46
46
|
|
|
@@ -53,7 +53,8 @@ Policy:
|
|
|
53
53
|
- release at most once per UTC day by default
|
|
54
54
|
- same-day follow-up release (`YYYY.M.D-N`) is manual-only via `allow_same_day_release=true`
|
|
55
55
|
- release preparation must pass all quality and compatibility gates before commit+tag push
|
|
56
|
-
-
|
|
56
|
+
- `CHANGELOG.pm.md` is generated by the latest npm `pm-changelog` package (`pm install npm:pm-changelog --project`, then `pm changelog generate`) from closed tracker items and checked in CI; do not edit it by hand
|
|
57
|
+
- external Sentry checks run when a Sentry token is configured; local maintainers should run private reliability checks separately and keep raw operational details in ignored local notes
|
|
57
58
|
- after creating and pushing a new tag, auto-release dispatches `.github/workflows/release.yml` with that tag and waits for the publish workflow to finish, because GitHub does not start normal push/tag workflows from `GITHUB_TOKEN` pushes
|
|
58
59
|
|
|
59
60
|
Pipeline entrypoint:
|
|
@@ -66,9 +67,12 @@ The pipeline performs:
|
|
|
66
67
|
|
|
67
68
|
1. change detection + one-release-per-day guard
|
|
68
69
|
2. version bump + changelog promotion from `[Unreleased]`
|
|
69
|
-
3.
|
|
70
|
-
4.
|
|
71
|
-
5.
|
|
70
|
+
3. latest `pm-changelog` install and tracker changelog refresh through `pm changelog generate`
|
|
71
|
+
4. strict gates (build, typecheck, docs/skills freshness, coverage, static quality, compatibility, security, smoke checks, reliability gate)
|
|
72
|
+
5. release note generation from changelog + pm evidence
|
|
73
|
+
6. commit and tag creation (plus optional push)
|
|
74
|
+
|
|
75
|
+
If commits since the last tag touch source, package, script, or workflow files, an empty `[Unreleased]` section is a release blocker. The pipeline exits nonzero and reports `changelog_required_files` plus `release_changelog_required:source_or_package_changes_without_unreleased_entry` so the missing release note is visible in automation instead of becoming a green no-op.
|
|
72
76
|
|
|
73
77
|
## Local Release Parity Checklist
|
|
74
78
|
|
|
@@ -104,7 +108,7 @@ If private reliability checks identify repeated user friction, either confirm th
|
|
|
104
108
|
pnpm release:pipeline:dry-run
|
|
105
109
|
|
|
106
110
|
# Full local preparation (version/changelog mutation + local commit/tag)
|
|
107
|
-
pnpm release:pipeline
|
|
111
|
+
pnpm release:pipeline
|
|
108
112
|
```
|
|
109
113
|
|
|
110
114
|
5. Push branch and tag after local green.
|
package/docs/SDK.md
CHANGED
|
@@ -110,7 +110,16 @@ pm contracts --action calendar --runtime-only --schema-only --json
|
|
|
110
110
|
pm contracts --command templates --runtime-only --flags-only --json
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
Use static SDK contracts for baseline validation, then use
|
|
113
|
+
Use static SDK contracts for baseline validation, then use runtime contracts in the target project before invoking package-provided commands or actions. Embedded SDK consumers can avoid subprocesses:
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
import { getContracts } from "@unbrained/pm-cli/sdk";
|
|
117
|
+
|
|
118
|
+
const contracts = await getContracts("/path/to/project/.agents/pm", {
|
|
119
|
+
runtimeOnly: true,
|
|
120
|
+
flagsOnly: true,
|
|
121
|
+
});
|
|
122
|
+
```
|
|
114
123
|
|
|
115
124
|
When a package-owned command is missing at runtime, CLI usage guidance now includes a deterministic install hint (for example `pm install calendar` or `pm install search-advanced`) so agents can recover in one retry.
|
|
116
125
|
|
|
@@ -223,7 +232,7 @@ Manifest capability: `search`.
|
|
|
223
232
|
## Robust Automation Pattern
|
|
224
233
|
|
|
225
234
|
1. Read `PM_TOOL_ACTIONS` or `PM_TOOL_PARAMETERS_SCHEMA` for baseline static validation.
|
|
226
|
-
2.
|
|
235
|
+
2. Load runtime contracts with `getContracts(pmRoot, { runtimeOnly: true })` or run `pm contracts --runtime-only --json` inside the target project.
|
|
227
236
|
3. Verify the action appears in `actions` and has `action_availability[].invocable: true`.
|
|
228
237
|
4. Validate required fields with `PM_TOOL_ACTION_PARAMETER_CONTRACTS` for static actions or the runtime schema for package actions.
|
|
229
238
|
5. Execute only after preflight passes.
|
package/docs/TESTING.md
CHANGED
|
@@ -36,7 +36,7 @@ Use focused runs while iterating, then run coverage before closure when risk or
|
|
|
36
36
|
Add tests to the item that owns the work:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",
|
|
39
|
+
pm test <item-id> --add command="node scripts/run-tests.mjs test -- tests/unit/output.spec.ts",timeout_seconds=240
|
|
40
40
|
pm test <item-id> --run --progress
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -76,7 +76,7 @@ Linked tests can include assertion metadata:
|
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
78
|
pm test <item-id> --add \
|
|
79
|
-
command="pm list-open --json",
|
|
79
|
+
command="pm list-open --json",timeout_seconds=120,assert_json_field_gte=count:0
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Common assertion keys include:
|
package/marketplace.json
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
},
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
|
-
"name": "pm-
|
|
10
|
+
"name": "pm-claude",
|
|
11
11
|
"description": "Native pm CLI integration for Claude Code — 18 MCP tools, 5 workflow skills, 14 slash commands, 3 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
12
|
-
"version": "1.
|
|
13
|
-
"source": "./plugins/pm-
|
|
12
|
+
"version": "1.4.0",
|
|
13
|
+
"source": "./plugins/pm-claude",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "unbrained",
|
|
16
16
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.24",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "unbrained",
|
|
@@ -49,12 +49,14 @@
|
|
|
49
49
|
".claude-plugin/**",
|
|
50
50
|
"plugins/**",
|
|
51
51
|
"packages/pm-*/**",
|
|
52
|
+
"scripts/finalize-build.mjs",
|
|
52
53
|
"scripts/install.sh",
|
|
53
54
|
"scripts/install.ps1",
|
|
55
|
+
"scripts/prepare-build-cache.mjs",
|
|
54
56
|
"marketplace.json"
|
|
55
57
|
],
|
|
56
58
|
"scripts": {
|
|
57
|
-
"build": "tsc -p tsconfig.json",
|
|
59
|
+
"build": "node scripts/prepare-build-cache.mjs && tsc -p tsconfig.json && node scripts/finalize-build.mjs",
|
|
58
60
|
"typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.packages.json",
|
|
59
61
|
"start": "node dist/cli.js",
|
|
60
62
|
"dev": "tsx src/cli.ts",
|
|
@@ -67,6 +69,9 @@
|
|
|
67
69
|
"smoke:claude-plugin": "node scripts/smoke-claude-plugin.mjs",
|
|
68
70
|
"version:check": "node scripts/release-version.mjs check",
|
|
69
71
|
"version:next": "node scripts/release-version.mjs next",
|
|
72
|
+
"changelog:pm:install": "node dist/cli.js install npm:pm-changelog --project",
|
|
73
|
+
"changelog:pm": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.pm.md --title \"pm Tracker Changelog\" --group-by release --status closed",
|
|
74
|
+
"changelog:pm:check": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.pm.md --title \"pm Tracker Changelog\" --group-by release --status closed --check",
|
|
70
75
|
"release:notes": "node scripts/generate-release-notes.mjs",
|
|
71
76
|
"release:changelog": "node scripts/release/changelog-promote.mjs",
|
|
72
77
|
"release:gates": "node scripts/release/run-gates.mjs --telemetry-mode best-effort",
|
|
@@ -107,21 +112,19 @@
|
|
|
107
112
|
},
|
|
108
113
|
"dependencies": {
|
|
109
114
|
"@sentry/node": "^10.51.0",
|
|
110
|
-
"@toon-format/toon": "^2.
|
|
115
|
+
"@toon-format/toon": "^2.3.0",
|
|
111
116
|
"commander": "^14.0.3",
|
|
112
117
|
"fast-glob": "^3.3.3",
|
|
113
|
-
"fast-json-patch": "^3.1.1"
|
|
114
|
-
"undici": "^8.1.0",
|
|
115
|
-
"zod": "^4.3.6"
|
|
118
|
+
"fast-json-patch": "^3.1.1"
|
|
116
119
|
},
|
|
117
120
|
"devDependencies": {
|
|
118
|
-
"@sentry/cli": "^3.4.
|
|
119
|
-
"@types/node": "^25.
|
|
120
|
-
"@vitest/coverage-v8": "^4.1.
|
|
121
|
+
"@sentry/cli": "^3.4.3",
|
|
122
|
+
"@types/node": "^25.9.1",
|
|
123
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
121
124
|
"c8": "^11.0.0",
|
|
122
|
-
"tsx": "^4.
|
|
125
|
+
"tsx": "^4.22.3",
|
|
123
126
|
"typescript": "^6.0.3",
|
|
124
|
-
"vitest": "^4.1.
|
|
127
|
+
"vitest": "^4.1.7"
|
|
125
128
|
},
|
|
126
129
|
"pnpm": {
|
|
127
130
|
"onlyBuiltDependencies": [
|
|
@@ -129,7 +132,7 @@
|
|
|
129
132
|
],
|
|
130
133
|
"overrides": {
|
|
131
134
|
"rollup": ">=4.59.0",
|
|
132
|
-
"brace-expansion": ">=5.0.
|
|
135
|
+
"brace-expansion": ">=5.0.6",
|
|
133
136
|
"vite": "7.3.2"
|
|
134
137
|
}
|
|
135
138
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# pm Calendar Package
|
|
2
2
|
|
|
3
|
-
`@unbrained/pm-
|
|
3
|
+
`@unbrained/pm-calendar` provides agenda and calendar views as an installable pm package.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
pm install calendar
|
|
6
|
+
pm install calendar --project
|
|
7
|
+
# Or bootstrap all bundled package commands in a new project:
|
|
8
|
+
pm init --defaults --with-packages
|
|
7
9
|
pm calendar --view week --full-period
|
|
8
10
|
pm cal --json --view agenda --include reminders,events
|
|
9
11
|
```
|
|
@@ -23,7 +23,7 @@ const calendarFlags = [
|
|
|
23
23
|
{ long: "--assignee-filter", value_name: "value", value_type: "string", description: "Filter assignee presence." },
|
|
24
24
|
{ long: "--sprint", value_name: "value", value_type: "string", description: "Filter by sprint." },
|
|
25
25
|
{ long: "--release", value_name: "value", value_type: "string", description: "Filter by release." },
|
|
26
|
-
{ long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|all." },
|
|
26
|
+
{ long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|scheduled|all." },
|
|
27
27
|
{ long: "--recurrence-lookahead-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookahead days." },
|
|
28
28
|
{ long: "--recurrence-lookback-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookback days." },
|
|
29
29
|
{ long: "--occurrence-limit", value_name: "n", value_type: "string", description: "Cap generated occurrences per recurring event." },
|
|
@@ -36,8 +36,27 @@ function calendarCommand(name) {
|
|
|
36
36
|
name,
|
|
37
37
|
action: "calendar",
|
|
38
38
|
description: "Show deadline, reminder, and scheduled event calendar views.",
|
|
39
|
+
arguments: [{ name: "view", required: false, description: "Calendar view: agenda|day|week|month." }],
|
|
39
40
|
flags: [...calendarFlags],
|
|
40
|
-
run: async (context) =>
|
|
41
|
+
run: async (context) => {
|
|
42
|
+
// Extension flags are parsed loosely, so context.args still contains flag
|
|
43
|
+
// tokens (e.g. ["day", "--date", "+7d"]). Only the leading non-flag tokens
|
|
44
|
+
// are true positionals, so a positional view combined with --date/--from/etc.
|
|
45
|
+
// must not be mistaken for multiple positional views.
|
|
46
|
+
const firstFlagIndex = context.args.findIndex((arg) => arg.startsWith("-"));
|
|
47
|
+
const positionalArgs = firstFlagIndex === -1 ? context.args : context.args.slice(0, firstFlagIndex);
|
|
48
|
+
const positionalView = positionalArgs[0]?.trim();
|
|
49
|
+
if (positionalArgs.length > 1) {
|
|
50
|
+
throw new Error("Calendar accepts at most one positional view: agenda|day|week|month.");
|
|
51
|
+
}
|
|
52
|
+
return runCalendarPackage(
|
|
53
|
+
{
|
|
54
|
+
...context.options,
|
|
55
|
+
...(positionalView && context.options.view === undefined ? { view: positionalView } : {}),
|
|
56
|
+
},
|
|
57
|
+
context.global,
|
|
58
|
+
);
|
|
59
|
+
},
|
|
41
60
|
};
|
|
42
61
|
}
|
|
43
62
|
|
|
@@ -46,7 +65,7 @@ export function activate(api) {
|
|
|
46
65
|
api.registerCommand(calendarCommand("cal"));
|
|
47
66
|
api.registerService("output_format", (context) => {
|
|
48
67
|
const rendered = renderCalendarPackageOutput(context);
|
|
49
|
-
return rendered ??
|
|
68
|
+
return rendered ?? null;
|
|
50
69
|
});
|
|
51
70
|
}
|
|
52
71
|
|
|
@@ -29,7 +29,7 @@ const calendarFlags = [
|
|
|
29
29
|
{ long: "--assignee-filter", value_name: "value", value_type: "string", description: "Filter assignee presence." },
|
|
30
30
|
{ long: "--sprint", value_name: "value", value_type: "string", description: "Filter by sprint." },
|
|
31
31
|
{ long: "--release", value_name: "value", value_type: "string", description: "Filter by release." },
|
|
32
|
-
{ long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|all." },
|
|
32
|
+
{ long: "--include", value_name: "value", value_type: "string", description: "Include sources: deadlines|reminders|events|scheduled|all." },
|
|
33
33
|
{ long: "--recurrence-lookahead-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookahead days." },
|
|
34
34
|
{ long: "--recurrence-lookback-days", value_name: "n", value_type: "string", description: "Bound open-ended recurrence lookback days." },
|
|
35
35
|
{ long: "--occurrence-limit", value_name: "n", value_type: "string", description: "Cap generated occurrences per recurring event." },
|
|
@@ -42,8 +42,27 @@ function calendarCommand(name: "calendar" | "cal"): CommandDefinition {
|
|
|
42
42
|
name,
|
|
43
43
|
action: "calendar",
|
|
44
44
|
description: "Show deadline, reminder, and scheduled event calendar views.",
|
|
45
|
+
arguments: [{ name: "view", required: false, description: "Calendar view: agenda|day|week|month." }],
|
|
45
46
|
flags: [...calendarFlags],
|
|
46
|
-
run: async (context) =>
|
|
47
|
+
run: async (context) => {
|
|
48
|
+
// Extension flags are parsed loosely, so context.args still contains flag
|
|
49
|
+
// tokens (e.g. ["day", "--date", "+7d"]). Only the leading non-flag tokens
|
|
50
|
+
// are true positionals, so a positional view combined with --date/--from/etc.
|
|
51
|
+
// must not be mistaken for multiple positional views.
|
|
52
|
+
const firstFlagIndex = context.args.findIndex((arg) => arg.startsWith("-"));
|
|
53
|
+
const positionalArgs = firstFlagIndex === -1 ? context.args : context.args.slice(0, firstFlagIndex);
|
|
54
|
+
const positionalView = positionalArgs[0]?.trim();
|
|
55
|
+
if (positionalArgs.length > 1) {
|
|
56
|
+
throw new Error("Calendar accepts at most one positional view: agenda|day|week|month.");
|
|
57
|
+
}
|
|
58
|
+
return runCalendarPackage(
|
|
59
|
+
{
|
|
60
|
+
...(context.options as CalendarOptions),
|
|
61
|
+
...(positionalView && (context.options as CalendarOptions).view === undefined ? { view: positionalView } : {}),
|
|
62
|
+
},
|
|
63
|
+
context.global,
|
|
64
|
+
);
|
|
65
|
+
},
|
|
47
66
|
};
|
|
48
67
|
}
|
|
49
68
|
|
|
@@ -52,7 +71,7 @@ export function activate(api: ExtensionApi): void {
|
|
|
52
71
|
api.registerCommand(calendarCommand("cal"));
|
|
53
72
|
api.registerService("output_format", (context) => {
|
|
54
73
|
const rendered = renderCalendarPackageOutput(context as ServiceOverrideContext);
|
|
55
|
-
return rendered ??
|
|
74
|
+
return rendered ?? null;
|
|
56
75
|
});
|
|
57
76
|
}
|
|
58
77
|
|
|
@@ -51,10 +51,6 @@ function isCalendarResult(value) {
|
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
function isCalendarCommand(command) {
|
|
55
|
-
return command === "calendar" || command === "cal";
|
|
56
|
-
}
|
|
57
|
-
|
|
58
54
|
function readPayloadFormat(payload) {
|
|
59
55
|
if (typeof payload === "object" && payload !== null) {
|
|
60
56
|
const format = payload.format;
|
|
@@ -72,6 +68,26 @@ function readPayloadResult(payload) {
|
|
|
72
68
|
return payload;
|
|
73
69
|
}
|
|
74
70
|
|
|
71
|
+
function readPayloadCommandOptions(payload) {
|
|
72
|
+
if (typeof payload === "object" && payload !== null) {
|
|
73
|
+
const commandOptions = payload.command_options;
|
|
74
|
+
if (typeof commandOptions === "object" && commandOptions !== null) {
|
|
75
|
+
return commandOptions;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function readPayloadGlobalOptions(payload) {
|
|
82
|
+
if (typeof payload === "object" && payload !== null) {
|
|
83
|
+
const global = payload.global;
|
|
84
|
+
if (typeof global === "object" && global !== null) {
|
|
85
|
+
return global;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
|
|
75
91
|
export async function runCalendarPackage(options, global) {
|
|
76
92
|
const loaded = await ensureCalendarCoreModule();
|
|
77
93
|
return loaded.runCalendar(options, global);
|
|
@@ -79,11 +95,14 @@ export async function runCalendarPackage(options, global) {
|
|
|
79
95
|
|
|
80
96
|
export function renderCalendarPackageOutput(context) {
|
|
81
97
|
const result = readPayloadResult(context.payload);
|
|
82
|
-
if (!calendarCore || !
|
|
98
|
+
if (!calendarCore || !isCalendarResult(result)) {
|
|
83
99
|
return null;
|
|
84
100
|
}
|
|
85
|
-
const options =
|
|
86
|
-
|
|
101
|
+
const options =
|
|
102
|
+
context.options && Object.keys(context.options).length > 0
|
|
103
|
+
? context.options
|
|
104
|
+
: readPayloadCommandOptions(context.payload);
|
|
105
|
+
const global = context.global ?? readPayloadGlobalOptions(context.payload);
|
|
87
106
|
const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
|
|
88
107
|
if (outputFormat === "markdown") {
|
|
89
108
|
return `${calendarCore.renderCalendarMarkdown(result)}\n`;
|
|
@@ -60,10 +60,6 @@ function isCalendarResult(value: unknown): value is CalendarResult {
|
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
function isCalendarCommand(command: unknown): boolean {
|
|
64
|
-
return command === "calendar" || command === "cal";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
63
|
function readPayloadFormat(payload: unknown): "toon" | "json" {
|
|
68
64
|
if (typeof payload === "object" && payload !== null) {
|
|
69
65
|
const format = (payload as { format?: unknown }).format;
|
|
@@ -81,6 +77,26 @@ function readPayloadResult(payload: unknown): unknown {
|
|
|
81
77
|
return payload;
|
|
82
78
|
}
|
|
83
79
|
|
|
80
|
+
function readPayloadCommandOptions(payload: unknown): CalendarOptions {
|
|
81
|
+
if (typeof payload === "object" && payload !== null) {
|
|
82
|
+
const commandOptions = (payload as { command_options?: unknown }).command_options;
|
|
83
|
+
if (typeof commandOptions === "object" && commandOptions !== null) {
|
|
84
|
+
return commandOptions as CalendarOptions;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function readPayloadGlobalOptions(payload: unknown): GlobalOptions {
|
|
91
|
+
if (typeof payload === "object" && payload !== null) {
|
|
92
|
+
const global = (payload as { global?: unknown }).global;
|
|
93
|
+
if (typeof global === "object" && global !== null) {
|
|
94
|
+
return global as GlobalOptions;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
|
|
84
100
|
export async function runCalendarPackage(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {
|
|
85
101
|
const loaded = await ensureCalendarCoreModule();
|
|
86
102
|
return loaded.runCalendar(options, global);
|
|
@@ -88,11 +104,14 @@ export async function runCalendarPackage(options: CalendarOptions, global: Globa
|
|
|
88
104
|
|
|
89
105
|
export function renderCalendarPackageOutput(context: ServiceOverrideContext): string | null {
|
|
90
106
|
const result = readPayloadResult(context.payload);
|
|
91
|
-
if (!calendarCore || !
|
|
107
|
+
if (!calendarCore || !isCalendarResult(result)) {
|
|
92
108
|
return null;
|
|
93
109
|
}
|
|
94
|
-
const options =
|
|
95
|
-
|
|
110
|
+
const options =
|
|
111
|
+
context.options && Object.keys(context.options).length > 0
|
|
112
|
+
? (context.options as CalendarOptions)
|
|
113
|
+
: readPayloadCommandOptions(context.payload);
|
|
114
|
+
const global = context.global ?? readPayloadGlobalOptions(context.payload);
|
|
96
115
|
const outputFormat = calendarCore.resolveCalendarOutputFormat(options, global);
|
|
97
116
|
if (outputFormat === "markdown") {
|
|
98
117
|
return `${calendarCore.renderCalendarMarkdown(result)}\n`;
|
|
@@ -66,7 +66,7 @@ export function activate(api) {
|
|
|
66
66
|
api.registerCommand(completionTagsCommand());
|
|
67
67
|
api.registerService("output_format", (context) => {
|
|
68
68
|
const rendered = renderGuideShellPackageOutput(context);
|
|
69
|
-
return rendered ??
|
|
69
|
+
return rendered ?? null;
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -71,7 +71,7 @@ export function activate(api: ExtensionApi): void {
|
|
|
71
71
|
api.registerCommand(completionTagsCommand());
|
|
72
72
|
api.registerService("output_format", (context) => {
|
|
73
73
|
const rendered = renderGuideShellPackageOutput(context as ServiceOverrideContext);
|
|
74
|
-
return rendered ??
|
|
74
|
+
return rendered ?? null;
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -6,9 +6,13 @@ First-party package that restores optional advanced search surfaces in bare-core
|
|
|
6
6
|
|
|
7
7
|
- Adds `pm search-advanced` with:
|
|
8
8
|
- `--mode keyword|semantic|hybrid`
|
|
9
|
+
- `--semantic`, `--hybrid`
|
|
9
10
|
- `--include-linked`
|
|
10
11
|
- `--title-exact`
|
|
11
12
|
- `--phrase-exact`
|
|
13
|
+
- `--type`, `--tag`, `--priority`
|
|
14
|
+
- `--deadline-before`, `--deadline-after`
|
|
15
|
+
- `--limit`, `--fields`, `--compact`, `--full`
|
|
12
16
|
- Adds `pm reindex` with:
|
|
13
17
|
- `--mode keyword|semantic|hybrid`
|
|
14
18
|
- `--progress`
|
|
@@ -23,5 +27,9 @@ pm install search-advanced --project
|
|
|
23
27
|
|
|
24
28
|
```bash
|
|
25
29
|
pm search-advanced "vector cache" --mode hybrid --limit 5 --json
|
|
30
|
+
pm search-advanced --hybrid "vector cache" --limit 5 --json
|
|
31
|
+
pm search-advanced "calendar package" --mode keyword --fields id,title,score --compact --json
|
|
26
32
|
pm reindex --mode hybrid --progress --json
|
|
27
33
|
```
|
|
34
|
+
|
|
35
|
+
Without `--mode`, `--semantic`, or `--hybrid`, `search-advanced` stays keyword-first for fast agent reads.
|