@unbrained/pm-cli 2026.5.12 → 2026.5.18
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 +22 -0
- package/CONTRIBUTING.md +1 -0
- package/PRD.md +7 -28
- package/README.md +8 -14
- 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 +32 -1
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +23 -5
- 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/append.js +4 -1
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.js +9 -3
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/claim.d.ts +3 -0
- package/dist/cli/commands/claim.js +19 -3
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +4 -1
- 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.js +4 -1
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +98 -2
- 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 +19 -5
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +9 -0
- package/dist/cli/commands/contracts.js +205 -49
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +88 -9
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +4 -1
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/delete.js +4 -1
- 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.js +4 -1
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +7 -2
- package/dist/cli/commands/extension.js +360 -64
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/files.js +4 -1
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/gc.js +4 -1
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.d.ts +7 -3
- package/dist/cli/commands/get.js +91 -18
- 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 +4 -0
- package/dist/cli/commands/health.js +31 -8
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-redact.d.ts +42 -0
- package/dist/cli/commands/history-redact.js +559 -0
- package/dist/cli/commands/history-redact.js.map +1 -0
- package/dist/cli/commands/history.d.ts +4 -0
- package/dist/cli/commands/history.js +14 -3
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -8
- package/dist/cli/commands/index.js +6 -9
- 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 +14 -0
- package/dist/cli/commands/init.js +75 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.js +4 -1
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/list.d.ts +1 -0
- package/dist/cli/commands/list.js +42 -18
- 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 +4 -1
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +118 -0
- package/dist/cli/commands/plan.js +975 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +8 -0
- package/dist/cli/commands/reindex.js +100 -24
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +4 -1
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.js +58 -27
- 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.js +4 -1
- package/dist/cli/commands/templates.js.map +1 -1
- package/dist/cli/commands/test-all.js +4 -1
- 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.js +4 -1
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +4 -1
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.js +114 -71
- 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.js +32 -4
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +5 -2
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.js +4 -1
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.js +4 -1
- 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.js +52 -33
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.js +4 -1
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.js +276 -32
- 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.js +55 -150
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +277 -261
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +62 -199
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +55 -146
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +2 -2
- package/dist/cli/registration-helpers.js +11 -21
- 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 +45 -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.js +4 -1
- 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 +84 -54
- 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/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/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 +241 -2
- package/dist/core/item/item-format.js.map +1 -1
- 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 +33 -3
- package/dist/core/item/parse.js.map +1 -1
- 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.js +4 -1
- package/dist/core/item/status.js.map +1 -1
- package/dist/core/item/type-registry.js +4 -1
- 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/command-aware.js +4 -1
- package/dist/core/output/command-aware.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 +27 -1
- package/dist/core/packages/manifest.js +87 -1
- 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/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.js +4 -1
- 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.d.ts +13 -1
- package/dist/core/search/embedding-batches.js +40 -8
- 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 +11 -2
- 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/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/levenshtein.js +4 -1
- package/dist/core/shared/levenshtein.js.map +1 -1
- 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.js +4 -1
- 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.d.ts +8 -1
- package/dist/core/store/front-matter-cache.js +28 -14
- 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 +2 -0
- package/dist/core/store/item-store.js +66 -3
- 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.js +39 -1
- 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 +31 -5
- 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.d.ts +8 -0
- package/dist/mcp/server.js +212 -53
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -0
- package/dist/sdk/cli-contracts/commander-mutation-options.js +484 -0
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -0
- package/dist/sdk/cli-contracts/commander-types.d.ts +21 -0
- package/dist/sdk/cli-contracts/commander-types.js +95 -0
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +10 -17
- package/dist/sdk/cli-contracts.js +232 -282
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +5 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +29 -0
- package/dist/sdk/runtime.js +31 -0
- package/dist/sdk/runtime.js.map +1 -0
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types.d.ts +86 -2
- package/dist/types.js +34 -1
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +16 -6
- package/docs/CLAUDE_CODE_PLUGIN.md +10 -10
- package/docs/CODEX_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +83 -8
- package/docs/CONFIGURATION.md +4 -1
- package/docs/EXTENSIONS.md +176 -807
- package/docs/QUICKSTART.md +12 -5
- package/docs/README.md +7 -6
- package/docs/RELEASING.md +6 -4
- package/docs/SDK.md +78 -441
- package/docs/TESTING.md +2 -2
- package/marketplace.json +3 -3
- package/package.json +7 -4
- package/packages/pm-beads/extensions/beads/index.js +90 -101
- package/packages/pm-beads/extensions/beads/index.ts +2 -2
- package/packages/pm-beads/extensions/beads/runtime.js +2 -17
- package/packages/pm-beads/extensions/beads/runtime.ts +41 -18
- package/packages/pm-beads/package.json +34 -1
- package/packages/pm-calendar/README.md +13 -0
- package/packages/pm-calendar/extensions/calendar/index.js +56 -0
- package/packages/pm-calendar/extensions/calendar/index.ts +62 -0
- package/packages/pm-calendar/extensions/calendar/manifest.json +7 -0
- package/packages/pm-calendar/extensions/calendar/runtime.js +114 -0
- package/packages/pm-calendar/extensions/calendar/runtime.ts +123 -0
- package/packages/pm-calendar/package.json +51 -0
- package/packages/pm-governance-audit/README.md +23 -0
- package/packages/pm-governance-audit/extensions/governance-audit/index.js +117 -0
- package/packages/pm-governance-audit/extensions/governance-audit/index.ts +118 -0
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +7 -0
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +159 -0
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +176 -0
- package/packages/pm-governance-audit/package.json +52 -0
- package/packages/pm-guide-shell/README.md +23 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +76 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +81 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +7 -0
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +263 -0
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +327 -0
- package/packages/pm-guide-shell/package.json +52 -0
- package/packages/pm-linked-test-adapters/README.md +24 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +101 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +102 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +7 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +142 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +173 -0
- package/packages/pm-linked-test-adapters/package.json +53 -0
- package/packages/pm-search-advanced/README.md +27 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +93 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +94 -0
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +7 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +120 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +144 -0
- package/packages/pm-search-advanced/package.json +54 -0
- package/packages/pm-templates/README.md +20 -0
- package/packages/pm-templates/extensions/templates/index.js +101 -0
- package/packages/pm-templates/extensions/templates/index.ts +109 -0
- package/packages/pm-templates/extensions/templates/manifest.json +7 -0
- package/packages/pm-templates/extensions/templates/runtime.js +226 -0
- package/packages/pm-templates/extensions/templates/runtime.ts +283 -0
- package/packages/pm-templates/package.json +50 -0
- package/packages/pm-todos/extensions/todos/index.js +105 -116
- package/packages/pm-todos/extensions/todos/index.ts +3 -2
- package/packages/pm-todos/extensions/todos/runtime.js +2 -17
- package/packages/pm-todos/extensions/todos/runtime.ts +40 -18
- package/packages/pm-todos/package.json +35 -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}/scripts/pm-mcp-server.mjs +4 -2
- 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-cli-codex → pm-codex}/scripts/pm-mcp-server.mjs +4 -2
- 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/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}/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}/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
|
@@ -1,141 +1,130 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
-
|
|
4
3
|
const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
|
|
5
4
|
const CURRENT_EXTENSION_ROOT = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
|
|
7
5
|
export const manifest = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
name: "builtin-todos-import-export",
|
|
7
|
+
version: "0.1.0",
|
|
8
|
+
entry: "./index.js",
|
|
9
|
+
priority: 0,
|
|
10
|
+
capabilities: ["commands", "schema"],
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
function asOptionalString(value) {
|
|
16
|
-
|
|
13
|
+
return typeof value === "string" ? value : undefined;
|
|
17
14
|
}
|
|
18
|
-
|
|
19
15
|
function toImportOptions(options) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
return {
|
|
17
|
+
folder: asOptionalString(options.folder),
|
|
18
|
+
author: asOptionalString(options.author),
|
|
19
|
+
message: asOptionalString(options.message),
|
|
20
|
+
};
|
|
25
21
|
}
|
|
26
|
-
|
|
27
22
|
function toExportOptions(options) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
return {
|
|
24
|
+
folder: asOptionalString(options.folder),
|
|
25
|
+
};
|
|
31
26
|
}
|
|
32
|
-
|
|
33
27
|
function resolvePackageRootCandidates() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
28
|
+
const candidates = [];
|
|
29
|
+
const envRoot = process.env[PM_PACKAGE_ROOT_ENV];
|
|
30
|
+
if (typeof envRoot === "string" && envRoot.trim().length > 0) {
|
|
31
|
+
candidates.push(path.resolve(envRoot.trim()));
|
|
32
|
+
}
|
|
33
|
+
const argvEntry = typeof process.argv[1] === "string" ? process.argv[1].trim() : "";
|
|
34
|
+
if (argvEntry.length > 0) {
|
|
35
|
+
const resolvedEntry = path.resolve(argvEntry);
|
|
36
|
+
const entryDir = path.dirname(resolvedEntry);
|
|
37
|
+
candidates.push(path.resolve(entryDir, ".."));
|
|
38
|
+
candidates.push(path.resolve(entryDir, "../.."));
|
|
39
|
+
candidates.push(path.resolve(entryDir, "../../.."));
|
|
40
|
+
}
|
|
41
|
+
return [...new Set(candidates)];
|
|
48
42
|
}
|
|
49
|
-
|
|
50
43
|
async function loadRuntimeModule() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
44
|
+
const attempted = [];
|
|
45
|
+
for (const packageRoot of resolvePackageRootCandidates()) {
|
|
46
|
+
const modulePaths = [
|
|
47
|
+
path.join(packageRoot, ".agents", "pm", "extensions", "todos", "runtime.js"),
|
|
48
|
+
path.join(packageRoot, "packages", "pm-todos", "extensions", "todos", "runtime.js"),
|
|
49
|
+
];
|
|
50
|
+
for (const modulePath of modulePaths) {
|
|
51
|
+
attempted.push(modulePath);
|
|
52
|
+
try {
|
|
53
|
+
return await import(pathToFileURL(modulePath).href);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Try the next package-root candidate.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const localRuntimePath = path.join(CURRENT_EXTENSION_ROOT, "runtime.js");
|
|
61
|
+
attempted.push(localRuntimePath);
|
|
62
|
+
try {
|
|
63
|
+
return await import(pathToFileURL(localRuntimePath).href);
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return await import(pathToFileURL(localRuntimePath).href);
|
|
71
|
-
} catch {
|
|
72
|
-
// Fall through to the diagnostic below.
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
throw new Error(
|
|
76
|
-
"Unable to resolve packaged todos extension runtime module. " +
|
|
77
|
-
`Tried: ${attempted.join(", ")}. Ensure the installed extension includes runtime.js or PM_CLI_PACKAGE_ROOT points to an installed pm package root.`,
|
|
78
|
-
);
|
|
65
|
+
catch {
|
|
66
|
+
// Fall through to the diagnostic below.
|
|
67
|
+
}
|
|
68
|
+
throw new Error("Unable to resolve packaged todos extension runtime module. " +
|
|
69
|
+
`Tried: ${attempted.join(", ")}. Ensure the installed extension includes runtime.js or PM_CLI_PACKAGE_ROOT points to an installed pm package root.`);
|
|
79
70
|
}
|
|
80
|
-
|
|
81
71
|
async function runTodosImportFromRuntime(options, global) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
72
|
+
const runtime = await loadRuntimeModule();
|
|
73
|
+
if (typeof runtime.runTodosImport !== "function") {
|
|
74
|
+
throw new Error("Bundled todos runtime module is missing runTodosImport().");
|
|
75
|
+
}
|
|
76
|
+
return runtime.runTodosImport(options, global);
|
|
87
77
|
}
|
|
88
|
-
|
|
89
78
|
async function runTodosExportFromRuntime(options, global) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
79
|
+
const runtime = await loadRuntimeModule();
|
|
80
|
+
if (typeof runtime.runTodosExport !== "function") {
|
|
81
|
+
throw new Error("Bundled todos runtime module is missing runTodosExport().");
|
|
82
|
+
}
|
|
83
|
+
return runtime.runTodosExport(options, global);
|
|
95
84
|
}
|
|
96
|
-
|
|
97
85
|
export function activate(api) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
86
|
+
api.registerCommand({
|
|
87
|
+
name: "todos import",
|
|
88
|
+
action: "todos-import",
|
|
89
|
+
description: "Import Todo markdown files into pm items.",
|
|
90
|
+
flags: [
|
|
91
|
+
{
|
|
92
|
+
long: "--folder",
|
|
93
|
+
value_name: "path",
|
|
94
|
+
value_type: "string",
|
|
95
|
+
description: "Source folder containing Todo markdown files.",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
long: "--author",
|
|
99
|
+
value_name: "author",
|
|
100
|
+
value_type: "string",
|
|
101
|
+
description: "Override import mutation author.",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
long: "--message",
|
|
105
|
+
value_name: "text",
|
|
106
|
+
value_type: "string",
|
|
107
|
+
description: "Override import history message.",
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
run: async (context) => runTodosImportFromRuntime(toImportOptions(context.options), context.global),
|
|
111
|
+
});
|
|
112
|
+
api.registerCommand({
|
|
113
|
+
name: "todos export",
|
|
114
|
+
action: "todos-export",
|
|
115
|
+
description: "Export pm items into Todo markdown files.",
|
|
116
|
+
flags: [
|
|
117
|
+
{
|
|
118
|
+
long: "--folder",
|
|
119
|
+
value_name: "path",
|
|
120
|
+
value_type: "string",
|
|
121
|
+
description: "Destination folder for exported Todo markdown files.",
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
run: async (context) => runTodosExportFromRuntime(toExportOptions(context.options), context.global),
|
|
125
|
+
});
|
|
136
126
|
}
|
|
137
|
-
|
|
138
127
|
export default {
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
manifest,
|
|
129
|
+
activate,
|
|
141
130
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
-
import type { CommandDefinition, ExtensionApi } from "../../../../src/
|
|
4
|
-
import type { GlobalOptions } from "../../../../src/core/shared/command-types.js";
|
|
3
|
+
import type { CommandDefinition, ExtensionApi, GlobalOptions } from "../../../../src/sdk/index.js";
|
|
5
4
|
import type { TodosExportOptions, TodosExportResult, TodosImportOptions, TodosImportResult } from "./runtime.js";
|
|
6
5
|
|
|
7
6
|
const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
|
|
@@ -105,6 +104,7 @@ async function runTodosExportFromRuntime(options: TodosExportOptions, global: Gl
|
|
|
105
104
|
export function activate(api: ExtensionApi): void {
|
|
106
105
|
api.registerCommand({
|
|
107
106
|
name: "todos import",
|
|
107
|
+
action: "todos-import",
|
|
108
108
|
description: "Import Todo markdown files into pm items.",
|
|
109
109
|
flags: [
|
|
110
110
|
{
|
|
@@ -130,6 +130,7 @@ export function activate(api: ExtensionApi): void {
|
|
|
130
130
|
} satisfies CommandDefinition);
|
|
131
131
|
api.registerCommand({
|
|
132
132
|
name: "todos export",
|
|
133
|
+
action: "todos-export",
|
|
133
134
|
description: "Export pm items into Todo markdown files.",
|
|
134
135
|
flags: [
|
|
135
136
|
{
|
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { getActiveExtensionRegistrations, runActiveOnReadHooks, runActiveOnWriteHooks } from "../../../../dist/
|
|
4
|
-
import { pathExists, removeFileIfExists, writeFileAtomic } from "../../../../dist/core/fs/fs-utils.js";
|
|
5
|
-
import { appendHistoryEntry, createHistoryEntry } from "../../../../dist/core/history/history.js";
|
|
6
|
-
import { generateItemId, normalizeItemId } from "../../../../dist/core/item/id.js";
|
|
7
|
-
import { canonicalDocument, normalizeFrontMatter, serializeItemDocument, splitFrontMatter } from "../../../../dist/core/item/item-format.js";
|
|
8
|
-
import { normalizeStatusInput } from "../../../../dist/core/item/status.js";
|
|
9
|
-
import { resolveItemTypeRegistry } from "../../../../dist/core/item/type-registry.js";
|
|
10
|
-
import { parseTags } from "../../../../dist/core/item/parse.js";
|
|
11
|
-
import { acquireLock } from "../../../../dist/core/lock/lock.js";
|
|
12
|
-
import { EXIT_CODE } from "../../../../dist/core/shared/constants.js";
|
|
13
|
-
import { PmCliError } from "../../../../dist/core/shared/errors.js";
|
|
14
|
-
import { nowIso } from "../../../../dist/core/shared/time.js";
|
|
15
|
-
import { listAllFrontMatter, locateItem, readLocatedItem } from "../../../../dist/core/store/item-store.js";
|
|
16
|
-
import { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from "../../../../dist/core/store/paths.js";
|
|
17
|
-
import { readSettings } from "../../../../dist/core/store/settings.js";
|
|
18
|
-
import { CONFIDENCE_TEXT_VALUES, ISSUE_SEVERITY_VALUES, RISK_VALUES } from "../../../../dist/types/index.js";
|
|
3
|
+
import { CONFIDENCE_TEXT_VALUES, EXIT_CODE, ISSUE_SEVERITY_VALUES, PmCliError, RISK_VALUES, acquireLock, appendHistoryEntry, canonicalDocument, createHistoryEntry, generateItemId, getActiveExtensionRegistrations, getHistoryPath, getItemPath, getSettingsPath, listAllFrontMatter, locateItem, normalizeFrontMatter, normalizeItemId, normalizeStatusInput, nowIso, parseTags, pathExists, readLocatedItem, readSettings, removeFileIfExists, resolveItemTypeRegistry, resolvePmRoot, runActiveOnReadHooks, runActiveOnWriteHooks, serializeItemDocument, splitFrontMatter, writeFileAtomic, } from "../../../../dist/sdk/index.js";
|
|
19
4
|
const DEFAULT_TODOS_FOLDER = ".pm/todos";
|
|
20
5
|
function isRecord(value) {
|
|
21
6
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -467,4 +452,4 @@ export async function runTodosExport(options, global) {
|
|
|
467
452
|
ids,
|
|
468
453
|
warnings,
|
|
469
454
|
};
|
|
470
|
-
}
|
|
455
|
+
}
|
|
@@ -1,24 +1,46 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import type { Dirent } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
4
|
+
import {
|
|
5
|
+
CONFIDENCE_TEXT_VALUES,
|
|
6
|
+
EXIT_CODE,
|
|
7
|
+
ISSUE_SEVERITY_VALUES,
|
|
8
|
+
PmCliError,
|
|
9
|
+
RISK_VALUES,
|
|
10
|
+
acquireLock,
|
|
11
|
+
appendHistoryEntry,
|
|
12
|
+
canonicalDocument,
|
|
13
|
+
createHistoryEntry,
|
|
14
|
+
generateItemId,
|
|
15
|
+
getActiveExtensionRegistrations,
|
|
16
|
+
getHistoryPath,
|
|
17
|
+
getItemPath,
|
|
18
|
+
getSettingsPath,
|
|
19
|
+
listAllFrontMatter,
|
|
20
|
+
locateItem,
|
|
21
|
+
normalizeFrontMatter,
|
|
22
|
+
normalizeItemId,
|
|
23
|
+
normalizeStatusInput,
|
|
24
|
+
nowIso,
|
|
25
|
+
parseTags,
|
|
26
|
+
pathExists,
|
|
27
|
+
readLocatedItem,
|
|
28
|
+
readSettings,
|
|
29
|
+
removeFileIfExists,
|
|
30
|
+
resolveItemTypeRegistry,
|
|
31
|
+
resolvePmRoot,
|
|
32
|
+
runActiveOnReadHooks,
|
|
33
|
+
runActiveOnWriteHooks,
|
|
34
|
+
serializeItemDocument,
|
|
35
|
+
splitFrontMatter,
|
|
36
|
+
writeFileAtomic,
|
|
37
|
+
type GlobalOptions,
|
|
38
|
+
type ItemDocument,
|
|
39
|
+
type ItemMetadata,
|
|
40
|
+
type ItemStatus,
|
|
41
|
+
type ItemType,
|
|
42
|
+
type PmSettings,
|
|
43
|
+
} from "../../../../src/sdk/index.js";
|
|
22
44
|
|
|
23
45
|
const DEFAULT_TODOS_FOLDER = ".pm/todos";
|
|
24
46
|
|
|
@@ -1,17 +1,51 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@unbrained/pm-
|
|
2
|
+
"name": "@unbrained/pm-todos",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "First-party pm package for Todo markdown import and export.",
|
|
7
|
+
"homepage": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/unbraind/pm-cli.git",
|
|
11
|
+
"directory": "packages/pm-todos"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/unbraind/pm-cli/issues"
|
|
15
|
+
},
|
|
7
16
|
"keywords": [
|
|
8
17
|
"pm-package",
|
|
9
18
|
"project-management",
|
|
10
19
|
"todos"
|
|
11
20
|
],
|
|
12
21
|
"pm": {
|
|
22
|
+
"aliases": [
|
|
23
|
+
"todos"
|
|
24
|
+
],
|
|
13
25
|
"extensions": [
|
|
14
26
|
"extensions/todos"
|
|
27
|
+
],
|
|
28
|
+
"catalog": {
|
|
29
|
+
"display_name": "Todos Import/Export",
|
|
30
|
+
"category": "migration",
|
|
31
|
+
"summary": "Import and export Todo markdown tasks through pm package commands.",
|
|
32
|
+
"tags": [
|
|
33
|
+
"migration",
|
|
34
|
+
"todos",
|
|
35
|
+
"import",
|
|
36
|
+
"export"
|
|
37
|
+
],
|
|
38
|
+
"links": {
|
|
39
|
+
"docs": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme",
|
|
40
|
+
"repository": "https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos",
|
|
41
|
+
"report": "https://github.com/unbraind/pm-cli/issues"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"docs": [
|
|
45
|
+
"README.md"
|
|
46
|
+
],
|
|
47
|
+
"examples": [
|
|
48
|
+
"README.md"
|
|
15
49
|
]
|
|
16
50
|
}
|
|
17
51
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "pm-
|
|
2
|
+
"name": "pm-claude",
|
|
3
3
|
"description": "Native pm CLI integration for Claude Code — 18 MCP tools, 5 workflow skills, 14 slash commands, 3 subagents (coordinator, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|
|
@@ -6,7 +6,7 @@ Native pm CLI integration for Claude Code. Use pm project management tools direc
|
|
|
6
6
|
|
|
7
7
|
| Component | What it provides |
|
|
8
8
|
|-----------|----------------|
|
|
9
|
-
| **18 MCP tools** | Full pm surface: context, search, list, get, create, update, claim, release, close, comments, files, docs, test, validate, health, contracts,
|
|
9
|
+
| **18 MCP tools** | Full pm surface: context, search, list, get, create, update, claim, release, close, comments, files, docs, test, validate, health, contracts, plan + `pm_run` for everything else |
|
|
10
10
|
| **5 skills** | `pm-workflow`, `pm-developer`, `pm-release`, `pm-audit`, `pm-planner` — auto-loaded as Claude Code skills |
|
|
11
11
|
| **14 slash commands** | Full lifecycle coverage — status, start, close, triage, audit, search, new, list, calendar, developer, planner, release, workflow, init |
|
|
12
12
|
| **3 subagents** | `pm-coordinator` (batch/multi-item), `pm-triage-agent` (duplicate-safe item creation), `pm-verification-agent` (evidence + close readiness), and a `pm-delivery-chain` orchestrator |
|
|
@@ -42,7 +42,7 @@ Both `pm` and `pm-cli` marketplace IDs resolve to the same plugin.
|
|
|
42
42
|
### Option C: Global MCP server via Claude Code CLI (MCP tools only)
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
claude mcp add --transport stdio pm-
|
|
45
|
+
claude mcp add --transport stdio pm-mcp -- npx -y @unbrained/pm-cli pm-mcp
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
This gives you the 18 MCP tools but not the skills, slash commands, or session hook.
|
|
@@ -54,7 +54,7 @@ Add to your project's `.mcp.json`:
|
|
|
54
54
|
```json
|
|
55
55
|
{
|
|
56
56
|
"mcpServers": {
|
|
57
|
-
"pm-
|
|
57
|
+
"pm-mcp": {
|
|
58
58
|
"command": "npx",
|
|
59
59
|
"args": ["-y", "@unbrained/pm-cli@latest", "pm-mcp"],
|
|
60
60
|
"env": {
|
|
@@ -163,7 +163,7 @@ Spawn pm-triage-agent to set up the pm item for: add OAuth2 login support
|
|
|
163
163
|
| `pm_validate` | Run validation checks |
|
|
164
164
|
| `pm_health` | Run health diagnostics |
|
|
165
165
|
| `pm_contracts` | Inspect command contracts |
|
|
166
|
-
| `
|
|
166
|
+
| `pm_plan` | Manage durable Plan workflows |
|
|
167
167
|
|
|
168
168
|
### General tool
|
|
169
169
|
|
|
@@ -29,7 +29,7 @@ For batch audits spanning many items, create one top-level `TaskCreate` for the
|
|
|
29
29
|
|
|
30
30
|
## Tools Available
|
|
31
31
|
|
|
32
|
-
Use the `pm-
|
|
32
|
+
Use the `pm-mcp` MCP server tools: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_plan`, and `pm_run` for all other operations.
|
|
33
33
|
|
|
34
34
|
Also use Claude Code's built-in `TaskCreate` and `TaskUpdate` tools for TUI panel display.
|
|
35
35
|
|
|
@@ -14,6 +14,14 @@ Initialize pm project tracking using native MCP tools. Argument: `$ARGUMENTS` (o
|
|
|
14
14
|
```json
|
|
15
15
|
{ "tool": "pm_run", "args": { "action": "init", "options": {} } }
|
|
16
16
|
```
|
|
17
|
+
If guidance state inspection is needed before writing AGENTS/CLAUDE sections, run:
|
|
18
|
+
```json
|
|
19
|
+
{ "tool": "pm_run", "args": { "action": "init", "options": { "agentGuidance": "status" } } }
|
|
20
|
+
```
|
|
21
|
+
To explicitly add compact workflow guidance without waiting for interactive prompts, run:
|
|
22
|
+
```json
|
|
23
|
+
{ "tool": "pm_run", "args": { "action": "init", "options": { "agentGuidance": "add" } } }
|
|
24
|
+
```
|
|
17
25
|
|
|
18
26
|
3. **Verify initialization** — call `pm_health` again to confirm `ok: true`.
|
|
19
27
|
|
|
@@ -37,8 +45,9 @@ Initialize pm project tracking using native MCP tools. Argument: `$ARGUMENTS` (o
|
|
|
37
45
|
|
|
38
46
|
5. **Show quick-start summary**:
|
|
39
47
|
- pm initialized at `.agents/pm/`
|
|
48
|
+
- guidance mode defaults to `ask` (TTY prompt only); use `agentGuidance=add|skip|status` in `pm_run` options for deterministic behavior
|
|
40
49
|
- Available slash commands: `/pm-status`, `/pm-new`, `/pm-start-task`, `/pm-close-task`, `/pm-list`, `/pm-search`, `/pm-triage`, `/pm-calendar`, `/pm-developer`, `/pm-planner`, `/pm-release`, `/pm-audit`, `/pm-workflow`
|
|
41
|
-
- All 18 MCP tools available: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `
|
|
50
|
+
- All 18 MCP tools available: `pm_context`, `pm_search`, `pm_list`, `pm_get`, `pm_create`, `pm_update`, `pm_claim`, `pm_release`, `pm_close`, `pm_comments`, `pm_files`, `pm_docs`, `pm_test`, `pm_validate`, `pm_health`, `pm_contracts`, `pm_plan`, `pm_run`
|
|
42
51
|
- Next: use `/pm-new <title>` to create your first item, or `/pm-status` to see the tracker state
|
|
43
52
|
|
|
44
53
|
If initialization fails, report the error and suggest running `pm init` manually in the terminal.
|
|
@@ -49,3 +49,21 @@ Run the pm planning loop using native MCP tools. Argument: `$ARGUMENTS` (optiona
|
|
|
49
49
|
9. If you claimed a planning item: `pm_close` it, `pm_release`, then `TaskUpdate(completed)`.
|
|
50
50
|
|
|
51
51
|
10. **Report** — list all created/updated items with their IDs, types, priorities, and parent links.
|
|
52
|
+
|
|
53
|
+
## Living plan mode (`pm_plan`)
|
|
54
|
+
|
|
55
|
+
If the user wants a Codex-style ExecPlan / Claude Plan Mode / Cursor plan-and-edit flow rather than a flat backlog, use the built-in `Plan` item type via the `pm_plan` MCP tool. It records ordered steps, evidence, decisions, discoveries, validation, and supports materializing steps into real Tasks/Features.
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{ "tool": "pm_plan", "args": { "options": { "subcommand": "create", "title": "Plan title", "scope": "What this plan changes", "harness": "claude-code", "parent": "pm-epic1", "claim": true } } }
|
|
59
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "add-step", "stepTitle": "Read affected files", "dependsOn": "pm-task1" } } }
|
|
60
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "complete-step", "stepEvidence": "files reviewed" } } }
|
|
61
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "approve" } } }
|
|
62
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "materialize", "steps": "plan-step-002,plan-step-003", "materializeType": "Task" } } }
|
|
63
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "deep" } } }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Resume a plan after compaction:
|
|
67
|
+
```json
|
|
68
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "resume", "resumeContext": "step 2 in progress; tests still failing on retry path" } } }
|
|
69
|
+
```
|
|
@@ -39,11 +39,13 @@ async function findRepoServer() {
|
|
|
39
39
|
|
|
40
40
|
const explicitServer = process.env.PM_CLI_MCP_SERVER;
|
|
41
41
|
if (explicitServer && (await exists(explicitServer))) {
|
|
42
|
-
await import(pathToFileURL(explicitServer).href);
|
|
42
|
+
const server = await import(pathToFileURL(explicitServer).href);
|
|
43
|
+
server.startMcpServer();
|
|
43
44
|
} else {
|
|
44
45
|
const repoServer = await findRepoServer();
|
|
45
46
|
if (repoServer) {
|
|
46
|
-
await import(pathToFileURL(repoServer).href);
|
|
47
|
+
const server = await import(pathToFileURL(repoServer).href);
|
|
48
|
+
server.startMcpServer();
|
|
47
49
|
} else {
|
|
48
50
|
const child = spawn("npx", ["-y", "--package=@unbrained/pm-cli@latest", "pm-mcp"], {
|
|
49
51
|
stdio: "inherit",
|
|
@@ -111,8 +111,53 @@ Write AC as numbered, testable assertions:
|
|
|
111
111
|
|
|
112
112
|
Set via `pm_create` with `acceptanceCriteria` field or `pm_update` with `options.acceptanceCriteria`.
|
|
113
113
|
|
|
114
|
+
## Built-in Plan workflow (`pm_plan` / `pm plan`)
|
|
115
|
+
|
|
116
|
+
For durable Codex-style ExecPlans, Claude-style Plan Mode, and Cursor-style editable checklists, pm exposes a first-class `Plan` item type plus a `pm plan` command family. Plans are stored as normal pm items under `.agents/pm/plans/`, get the full history hash chain, dependencies, search corpus, and lifecycle tooling.
|
|
117
|
+
|
|
118
|
+
### When to use `pm plan` vs. `pm_create` + tasks
|
|
119
|
+
|
|
120
|
+
- `pm plan` — when you need a **living, resumable plan** with ordered steps, evidence, decisions, discoveries, validation, and the option to later materialize selected steps as real Tasks. Best for plan-then-execute workflows.
|
|
121
|
+
- `pm_create` (Epic/Feature/Task) — when the work is already decomposed and you just need persistent backlog items.
|
|
122
|
+
|
|
123
|
+
### Lifecycle (call via `pm_plan` MCP tool)
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{ "tool": "pm_plan", "args": { "options": { "subcommand": "create", "title": "Refactor lock retry", "scope": "Improve retry semantics", "harness": "claude-code", "parent": "pm-epic1", "related": "pm-rel1,pm-rel2", "claim": true } } }
|
|
127
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "add-step", "stepTitle": "Read lock.ts", "stepBody": "Understand retry path", "dependsOn": "pm-task1" } } }
|
|
128
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "update-step", "stepStatus": "in_progress", "stepEvidence": "started reading lock.ts" } } }
|
|
129
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "stepRef": "plan-step-001", "options": { "subcommand": "complete-step", "stepEvidence": "lock.ts read; retry path captured" } } }
|
|
130
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "decision", "decisionText": "Use exponential backoff", "decisionRationale": "Avoid thundering herd" } } }
|
|
131
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "discovery", "discoveryText": "Found existing util in src/util/retry.ts" } } }
|
|
132
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "validation", "validationText": "Coverage gate stays at 100%", "validationCommand": "node scripts/run-tests.mjs coverage" } } }
|
|
133
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "approve" } } }
|
|
134
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "materialize", "steps": "plan-step-002", "materializeType": "Task", "materializeParent": "pm-epic1" } } }
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Progressive-disclosure reads
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "brief" } } }
|
|
141
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "standard" } } }
|
|
142
|
+
{ "tool": "pm_plan", "args": { "id": "pm-plan1", "options": { "subcommand": "show", "depth": "deep" } } }
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Harness mapping cheatsheet
|
|
146
|
+
|
|
147
|
+
| Harness signal | pm_plan equivalent |
|
|
148
|
+
|----------------|--------------------|
|
|
149
|
+
| Codex `update_plan` step status | `subcommand=update-step` with `stepStatus` |
|
|
150
|
+
| Claude `TaskCreate` | `subcommand=add-step` |
|
|
151
|
+
| Claude `TaskUpdate(in_progress)` | `subcommand=update-step` with `stepStatus=in_progress` |
|
|
152
|
+
| Cursor edit a plan step | `subcommand=update-step` |
|
|
153
|
+
| Resume after compaction | `subcommand=resume` with `resumeContext` then `subcommand=show --depth deep` |
|
|
154
|
+
| Approve before edits | `subcommand=approve` |
|
|
155
|
+
| Convert checklist into real items | `subcommand=materialize` |
|
|
156
|
+
|
|
114
157
|
## Safety
|
|
115
158
|
|
|
116
159
|
- Never pass `path` during real repository tracking.
|
|
117
|
-
- Always `pm_search` before `pm_create` — avoid duplicates.
|
|
160
|
+
- Always `pm_search` before `pm_create`/`pm plan create` — avoid duplicates.
|
|
118
161
|
- Run `pm_validate` after batch changes.
|
|
162
|
+
- Set exactly one step `in_progress` per plan; pass `allowMultipleActive: true` only for explicit parallel branches.
|
|
163
|
+
- Use `pm_plan` `subcommand=resume` after long-running sessions so the next agent can pick up with a deterministic context.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "pm-
|
|
3
|
-
"version": "1.
|
|
2
|
+
"name": "pm-codex",
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|
|
8
8
|
},
|
|
9
|
-
"homepage": "https://github.com/unbraind/pm-cli/tree/main/plugins/pm-
|
|
9
|
+
"homepage": "https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex",
|
|
10
10
|
"repository": "https://github.com/unbraind/pm-cli",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"keywords": [
|