@unbrained/pm-cli 2026.5.10 → 2026.5.12

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.
Files changed (172) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/AGENTS.md +3 -116
  3. package/CHANGELOG.md +14 -0
  4. package/PRD.md +11 -11
  5. package/README.md +20 -2
  6. package/dist/cli/argv-utils.d.ts +5 -0
  7. package/dist/cli/argv-utils.js +34 -0
  8. package/dist/cli/argv-utils.js.map +1 -0
  9. package/dist/cli/bootstrap-args.d.ts +15 -0
  10. package/dist/cli/bootstrap-args.js +211 -0
  11. package/dist/cli/bootstrap-args.js.map +1 -1
  12. package/dist/cli/commander-usage.js +109 -3
  13. package/dist/cli/commander-usage.js.map +1 -1
  14. package/dist/cli/commands/completion.js +7 -3
  15. package/dist/cli/commands/completion.js.map +1 -1
  16. package/dist/cli/commands/contracts.d.ts +19 -0
  17. package/dist/cli/commands/contracts.js +40 -2
  18. package/dist/cli/commands/contracts.js.map +1 -1
  19. package/dist/cli/commands/create.js +112 -51
  20. package/dist/cli/commands/create.js.map +1 -1
  21. package/dist/cli/commands/docs.js +9 -2
  22. package/dist/cli/commands/docs.js.map +1 -1
  23. package/dist/cli/commands/extension.d.ts +12 -3
  24. package/dist/cli/commands/extension.js +421 -69
  25. package/dist/cli/commands/extension.js.map +1 -1
  26. package/dist/cli/commands/files.js +9 -2
  27. package/dist/cli/commands/files.js.map +1 -1
  28. package/dist/cli/commands/index.d.ts +1 -0
  29. package/dist/cli/commands/index.js +1 -0
  30. package/dist/cli/commands/index.js.map +1 -1
  31. package/dist/cli/commands/init.d.ts +2 -0
  32. package/dist/cli/commands/init.js +21 -1
  33. package/dist/cli/commands/init.js.map +1 -1
  34. package/dist/cli/commands/metadata-normalizers.d.ts +4 -0
  35. package/dist/cli/commands/metadata-normalizers.js +37 -0
  36. package/dist/cli/commands/metadata-normalizers.js.map +1 -0
  37. package/dist/cli/commands/reindex.js +173 -135
  38. package/dist/cli/commands/reindex.js.map +1 -1
  39. package/dist/cli/commands/search.js +16 -6
  40. package/dist/cli/commands/search.js.map +1 -1
  41. package/dist/cli/commands/test.js +23 -8
  42. package/dist/cli/commands/test.js.map +1 -1
  43. package/dist/cli/commands/update.js +70 -39
  44. package/dist/cli/commands/update.js.map +1 -1
  45. package/dist/cli/commands/upgrade.d.ts +63 -0
  46. package/dist/cli/commands/upgrade.js +260 -0
  47. package/dist/cli/commands/upgrade.js.map +1 -0
  48. package/dist/cli/error-guidance.d.ts +9 -1
  49. package/dist/cli/error-guidance.js +147 -6
  50. package/dist/cli/error-guidance.js.map +1 -1
  51. package/dist/cli/guide-topics.js +18 -16
  52. package/dist/cli/guide-topics.js.map +1 -1
  53. package/dist/cli/help-content.js +42 -2
  54. package/dist/cli/help-content.js.map +1 -1
  55. package/dist/cli/help-json-payload.js +11 -1
  56. package/dist/cli/help-json-payload.js.map +1 -1
  57. package/dist/cli/main.js +69 -6
  58. package/dist/cli/main.js.map +1 -1
  59. package/dist/cli/register-setup.js +174 -82
  60. package/dist/cli/register-setup.js.map +1 -1
  61. package/dist/cli/telemetry-flush.d.ts +2 -0
  62. package/dist/cli/telemetry-flush.js +4 -0
  63. package/dist/cli/telemetry-flush.js.map +1 -0
  64. package/dist/cli.js +1 -2
  65. package/dist/cli.js.map +1 -1
  66. package/dist/core/extensions/extension-types.d.ts +72 -0
  67. package/dist/core/extensions/extension-types.js +24 -0
  68. package/dist/core/extensions/extension-types.js.map +1 -1
  69. package/dist/core/extensions/loader.d.ts +1 -0
  70. package/dist/core/extensions/loader.js +766 -7
  71. package/dist/core/extensions/loader.js.map +1 -1
  72. package/dist/core/lock/lock.js +2 -0
  73. package/dist/core/lock/lock.js.map +1 -1
  74. package/dist/core/packages/manifest.d.ts +13 -0
  75. package/dist/core/packages/manifest.js +139 -0
  76. package/dist/core/packages/manifest.js.map +1 -0
  77. package/dist/core/sentry/instrument.d.ts +15 -0
  78. package/dist/core/sentry/instrument.js +35 -3
  79. package/dist/core/sentry/instrument.js.map +1 -1
  80. package/dist/core/shared/constants.js +20 -0
  81. package/dist/core/shared/constants.js.map +1 -1
  82. package/dist/core/shared/errors.d.ts +8 -0
  83. package/dist/core/shared/errors.js.map +1 -1
  84. package/dist/core/shared/levenshtein.d.ts +1 -0
  85. package/dist/core/shared/levenshtein.js +37 -0
  86. package/dist/core/shared/levenshtein.js.map +1 -0
  87. package/dist/core/store/paths.js +34 -1
  88. package/dist/core/store/paths.js.map +1 -1
  89. package/dist/core/store/settings.js +210 -1
  90. package/dist/core/store/settings.js.map +1 -1
  91. package/dist/core/telemetry/runtime.d.ts +1 -0
  92. package/dist/core/telemetry/runtime.js +102 -3
  93. package/dist/core/telemetry/runtime.js.map +1 -1
  94. package/dist/mcp/server.js +11 -2
  95. package/dist/mcp/server.js.map +1 -1
  96. package/dist/sdk/cli-contracts.d.ts +38 -17
  97. package/dist/sdk/cli-contracts.js +387 -35
  98. package/dist/sdk/cli-contracts.js.map +1 -1
  99. package/dist/sdk/index.d.ts +13 -1
  100. package/dist/sdk/index.js +9 -1
  101. package/dist/sdk/index.js.map +1 -1
  102. package/dist/types.d.ts +41 -0
  103. package/dist/types.js.map +1 -1
  104. package/docs/ARCHITECTURE.md +1 -1
  105. package/docs/CLAUDE_CODE_PLUGIN.md +39 -0
  106. package/docs/COMMANDS.md +14 -1
  107. package/docs/EXTENSIONS.md +782 -12
  108. package/docs/MIGRATION_CLI_SIMPLIFICATION.md +64 -0
  109. package/docs/QUICKSTART.md +10 -2
  110. package/docs/README.md +4 -6
  111. package/docs/SDK.md +445 -0
  112. package/docs/examples/ci/github-actions-pm-extension-gate.yml +53 -0
  113. package/docs/examples/ci/gitlab-ci-pm-extension-gate.yml +41 -0
  114. package/docs/examples/ci/jenkins-pm-extension-gate.Jenkinsfile +45 -0
  115. package/docs/examples/policy-restricted-extension/README.md +74 -0
  116. package/docs/examples/policy-restricted-extension/index.js +21 -0
  117. package/docs/examples/policy-restricted-extension/manifest.json +21 -0
  118. package/docs/examples/policy-restricted-extension/package.json +8 -0
  119. package/docs/examples/sdk-app-embedding/README.md +39 -0
  120. package/docs/examples/sdk-app-embedding/package.json +9 -0
  121. package/docs/examples/sdk-app-embedding/run-embedded-pm.mjs +61 -0
  122. package/docs/examples/sdk-contract-consumer/README.md +57 -0
  123. package/docs/examples/sdk-contract-consumer/inspect-contracts.mjs +47 -0
  124. package/docs/examples/sdk-contract-consumer/package.json +10 -0
  125. package/docs/examples/starter-extension/README.md +57 -42
  126. package/docs/examples/starter-extension/manifest.json +15 -0
  127. package/marketplace.json +3 -3
  128. package/package.json +5 -23
  129. package/packages/pm-beads/README.md +10 -0
  130. package/{.agents/pm → packages/pm-beads}/extensions/beads/index.js +24 -9
  131. package/packages/pm-beads/extensions/beads/index.ts +131 -0
  132. package/packages/pm-beads/package.json +17 -0
  133. package/packages/pm-todos/README.md +11 -0
  134. package/{.agents/pm → packages/pm-todos}/extensions/todos/index.js +24 -9
  135. package/packages/pm-todos/extensions/todos/index.ts +149 -0
  136. package/{.agents/pm → packages/pm-todos}/extensions/todos/runtime.js +1 -1
  137. package/{.agents/pm → packages/pm-todos}/extensions/todos/runtime.ts +1 -1
  138. package/packages/pm-todos/package.json +17 -0
  139. package/plugins/pm-cli-claude/.claude-plugin/plugin.json +2 -2
  140. package/plugins/pm-cli-claude/README.md +54 -14
  141. package/plugins/pm-cli-claude/agents/pm-delivery-chain.md +88 -0
  142. package/plugins/pm-cli-claude/agents/pm-triage-agent.md +83 -0
  143. package/plugins/pm-cli-claude/agents/pm-verification-agent.md +88 -0
  144. package/plugins/pm-cli-claude/hooks/session-start.mjs +35 -21
  145. package/.agents/pm/extensions/.managed-extensions.json +0 -42
  146. package/.agents/skills/HARNESS_COMPATIBILITY.md +0 -45
  147. package/.agents/skills/README.md +0 -21
  148. package/.agents/skills/pm-developer/SKILL.md +0 -73
  149. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +0 -48
  150. package/.agents/skills/pm-developer/references/PROMPTS.md +0 -17
  151. package/.agents/skills/pm-extensions/SKILL.md +0 -57
  152. package/.agents/skills/pm-extensions/references/LIFECYCLE.md +0 -40
  153. package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +0 -25
  154. package/.agents/skills/pm-sdk/SKILL.md +0 -50
  155. package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +0 -31
  156. package/.agents/skills/pm-sdk/references/PROMPTS.md +0 -13
  157. package/.agents/skills/pm-user/SKILL.md +0 -59
  158. package/.agents/skills/pm-user/references/PROMPTS.md +0 -17
  159. package/.agents/skills/pm-user/references/WORKFLOWS.md +0 -35
  160. package/.pi/README.md +0 -26
  161. package/.pi/extensions/pm-cli/index.js +0 -147
  162. package/.pi/prompts/pm-workflow.md +0 -5
  163. package/.pi/skills/pm-native/SKILL.md +0 -40
  164. package/.pi/skills/pm-release/SKILL.md +0 -35
  165. package/dist/pi/native.d.ts +0 -5
  166. package/dist/pi/native.js +0 -183
  167. package/dist/pi/native.js.map +0 -1
  168. package/docs/PI_PACKAGE.md +0 -56
  169. /package/{.agents/pm → packages/pm-beads}/extensions/beads/manifest.json +0 -0
  170. /package/{.agents/pm → packages/pm-beads}/extensions/beads/runtime.js +0 -0
  171. /package/{.agents/pm → packages/pm-beads}/extensions/beads/runtime.ts +0 -0
  172. /package/{.agents/pm → packages/pm-todos}/extensions/todos/manifest.json +0 -0
package/dist/pi/native.js DELETED
@@ -1,183 +0,0 @@
1
- import { PmCliError } from "../core/shared/errors.js";
2
- import { readSettings } from "../core/store/settings.js";
3
- import { resolvePmRoot } from "../core/store/paths.js";
4
- import { normalizeStatusInput } from "../core/item/status.js";
5
- import { resolveRuntimeStatusRegistry } from "../core/schema/runtime-schema.js";
6
- import { runActivity, runAggregate, runAppend, runCalendar, runClaim, runClose, runComments, runCommentsAudit, runCompletion, runConfig, runContext, runContracts, runCreate, runDedupeAudit, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runGuide, runHealth, runHistory, runInit, runLearnings, runList, runNormalize, runNotes, runReindex, runRelease, runRestore, runSearch, runStats, runTemplatesList, runTemplatesSave, runTemplatesShow, runTest, runTestAll, runTestRunsList, runTestRunsLogs, runTestRunsResume, runTestRunsStatus, runTestRunsStop, runUpdate, runUpdateMany, runValidate, } from "../cli/commands/index.js";
7
- const GLOBAL_KEYS = new Set([
8
- "action",
9
- "cwd",
10
- "path",
11
- "json",
12
- "quiet",
13
- "profile",
14
- "noExtensions",
15
- "noPager",
16
- "pmExecutable",
17
- "timeoutMs",
18
- "options",
19
- ]);
20
- function asRecord(value) {
21
- return typeof value === "object" && value !== null && !Array.isArray(value) ? { ...value } : {};
22
- }
23
- function readString(args, key) {
24
- const value = args[key];
25
- return typeof value === "string" && value.trim().length > 0 ? value : undefined;
26
- }
27
- function mutationOptions(options) {
28
- return {
29
- author: readString(options, "author"),
30
- message: typeof options.message === "string" ? options.message : undefined,
31
- };
32
- }
33
- function requiredString(args, key, action) {
34
- const value = readString(args, key);
35
- if (!value) {
36
- throw new PmCliError(`Action "${action}" requires "${key}".`, 64);
37
- }
38
- return value;
39
- }
40
- export function nativeGlobalOptions(args) {
41
- return {
42
- json: args.json !== false,
43
- quiet: args.quiet === true,
44
- profile: args.profile === true,
45
- noExtensions: args.noExtensions === true,
46
- noPager: args.noPager !== false,
47
- path: readString(args, "path"),
48
- };
49
- }
50
- export function nativeCommandOptions(args) {
51
- const options = asRecord(args.options);
52
- for (const [key, value] of Object.entries(args)) {
53
- if (GLOBAL_KEYS.has(key) || value === undefined)
54
- continue;
55
- if (options[key] === undefined)
56
- options[key] = value;
57
- }
58
- const author = readString(args, "author");
59
- if (author && options.author === undefined)
60
- options.author = author;
61
- return options;
62
- }
63
- async function withCwd(cwd, run) {
64
- if (typeof cwd !== "string" || cwd.trim().length === 0)
65
- return run();
66
- const previous = process.cwd();
67
- process.chdir(cwd);
68
- try {
69
- return await run();
70
- }
71
- finally {
72
- process.chdir(previous);
73
- }
74
- }
75
- async function runStartTask(id, options, global) {
76
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
77
- const settings = await readSettings(pmRoot);
78
- const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
79
- const status = normalizeStatusInput("in_progress", statusRegistry) ?? statusRegistry.open_status;
80
- const force = options.force === true;
81
- const baseOptions = mutationOptions(options);
82
- const claim = await runClaim(id, force, global, baseOptions);
83
- const update = await runUpdate(id, { ...baseOptions, status, force }, global);
84
- return { id, action: "start_task", claim, update };
85
- }
86
- async function runPauseTask(id, options, global) {
87
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
88
- const settings = await readSettings(pmRoot);
89
- const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
90
- const force = options.force === true;
91
- const baseOptions = mutationOptions(options);
92
- const update = await runUpdate(id, { ...baseOptions, status: statusRegistry.open_status, force }, global);
93
- const release = await runRelease(id, force, global, baseOptions);
94
- return { id, action: "pause_task", update, release };
95
- }
96
- async function runCloseTask(id, reason, options, global) {
97
- const force = options.force === true;
98
- const baseOptions = mutationOptions(options);
99
- const close = await runClose(id, reason, { ...baseOptions, validateClose: readString(options, "validateClose"), force }, global);
100
- const release = await runRelease(id, force, global, baseOptions);
101
- return { id, action: "close_task", close, release };
102
- }
103
- export async function runNativePmAction(args) {
104
- return withCwd(args.cwd, async () => {
105
- const action = requiredString(args, "action", "pm").trim().toLowerCase();
106
- const global = nativeGlobalOptions(args);
107
- const options = nativeCommandOptions(args);
108
- const id = readString(args, "id") ?? readString(options, "id");
109
- const force = args.force === true || options.force === true;
110
- switch (action) {
111
- case "init": return runInit(readString(args, "prefix") ?? readString(options, "prefix"), global, options);
112
- case "config": return runConfig(readString(args, "scope") ?? readString(options, "scope") ?? "project", readString(args, "configAction") ?? readString(options, "configAction") ?? requiredString(options, "action", action), readString(args, "key") ?? readString(options, "key"), options, global);
113
- case "extension-init": return runExtension(requiredString(args, "target", action), { ...options, init: true }, global);
114
- case "extension-install": return runExtension(readString(args, "target") ?? readString(options, "target"), { ...options, install: true }, global);
115
- case "extension-uninstall": return runExtension(requiredString(args, "target", action), { ...options, uninstall: true }, global);
116
- case "extension-explore": return runExtension(undefined, { ...options, explore: true }, global);
117
- case "extension-manage": return runExtension(undefined, { ...options, manage: true }, global);
118
- case "extension-doctor": return runExtension(undefined, { ...options, doctor: true }, global);
119
- case "extension-adopt": return runExtension(requiredString(args, "target", action), { ...options, adopt: true }, global);
120
- case "extension-adopt-all": return runExtension(undefined, { ...options, adoptAll: true }, global);
121
- case "extension-activate": return runExtension(requiredString(args, "target", action), { ...options, activate: true }, global);
122
- case "extension-deactivate": return runExtension(requiredString(args, "target", action), { ...options, deactivate: true }, global);
123
- case "extension": return runExtension(readString(args, "target") ?? readString(options, "target"), options, global);
124
- case "create": return runCreate(options, global);
125
- case "list":
126
- case "list-all":
127
- case "list-draft":
128
- case "list-open":
129
- case "list-in-progress":
130
- case "list-blocked":
131
- case "list-closed":
132
- case "list-canceled": return runList(action === "list" ? readString(args, "status") : action === "list-all" ? undefined : action.replace("list-", "").replaceAll("-", "_"), options, global);
133
- case "aggregate": return runAggregate(options, global);
134
- case "dedupe-audit": return runDedupeAudit(options, global);
135
- case "calendar": return runCalendar(options, global);
136
- case "context": return runContext(options, global);
137
- case "get": return runGet(id ?? requiredString(options, "id", action), global);
138
- case "search": return runSearch(readString(args, "query") ?? readString(args, "keywords") ?? requiredString(options, "query", action), options, global);
139
- case "reindex": return runReindex(options, global);
140
- case "history": return runHistory(id ?? requiredString(options, "id", action), options, global);
141
- case "activity": return runActivity(options, global);
142
- case "restore": return runRestore(id ?? requiredString(options, "id", action), readString(args, "target") ?? requiredString(options, "target", action), options, global);
143
- case "update": return runUpdate(id ?? requiredString(options, "id", action), options, global);
144
- case "update-many": return runUpdateMany(options, global);
145
- case "normalize": return runNormalize(options, global);
146
- case "close": return runClose(id ?? requiredString(options, "id", action), readString(args, "text") ?? readString(args, "reason") ?? requiredString(options, "text", action), options, global);
147
- case "delete": return runDelete(id ?? requiredString(options, "id", action), options, global);
148
- case "append": return runAppend(id ?? requiredString(options, "id", action), options, global);
149
- case "comments": return runComments(id ?? requiredString(options, "id", action), options, global);
150
- case "comments-audit": return runCommentsAudit(options, global);
151
- case "notes": return runNotes(id ?? requiredString(options, "id", action), options, global);
152
- case "learnings": return runLearnings(id ?? requiredString(options, "id", action), options, global);
153
- case "files": return runFiles(id ?? requiredString(options, "id", action), options, global);
154
- case "files-discover": return runFilesDiscover(id ?? requiredString(options, "id", action), options, global);
155
- case "docs": return runDocs(id ?? requiredString(options, "id", action), options, global);
156
- case "deps": return runDeps(id ?? requiredString(options, "id", action), options, global);
157
- case "test": return runTest(id ?? requiredString(options, "id", action), options, global);
158
- case "test-all": return runTestAll(options, global);
159
- case "test-runs-list": return runTestRunsList(options, global);
160
- case "test-runs-status": return runTestRunsStatus(requiredString(args, "runId", action), global);
161
- case "test-runs-logs": return runTestRunsLogs(requiredString(args, "runId", action), options, global);
162
- case "test-runs-stop": return runTestRunsStop(requiredString(args, "runId", action), options, global);
163
- case "test-runs-resume": return runTestRunsResume(requiredString(args, "runId", action), options, global);
164
- case "stats": return runStats(global);
165
- case "health": return runHealth(global, options);
166
- case "validate": return runValidate(options, global);
167
- case "gc": return runGc(global, options);
168
- case "contracts": return runContracts(options, global);
169
- case "completion": return runCompletion(requiredString(args, "shell", action), undefined, undefined, options.eagerTags === true, options.runtime);
170
- case "templates-save": return runTemplatesSave(readString(args, "template") ?? requiredString(options, "name", action), options, global);
171
- case "templates-list": return runTemplatesList(global);
172
- case "templates-show": return runTemplatesShow(readString(args, "template") ?? requiredString(options, "name", action), global);
173
- case "claim": return runClaim(id ?? requiredString(options, "id", action), force, global, options);
174
- case "release": return runRelease(id ?? requiredString(options, "id", action), force, global, options);
175
- case "start-task": return runStartTask(id ?? requiredString(options, "id", action), options, global);
176
- case "pause-task": return runPauseTask(id ?? requiredString(options, "id", action), options, global);
177
- case "close-task": return runCloseTask(id ?? requiredString(options, "id", action), readString(args, "text") ?? readString(args, "reason") ?? requiredString(options, "text", action), options, global);
178
- case "guide": return runGuide(options, global);
179
- default: throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
180
- }
181
- });
182
- }
183
- //# sourceMappingURL=native.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"native.js","sourceRoot":"/","sources":["pi/native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { readSettings } from \"../core/store/settings.js\";\nimport { resolvePmRoot } from \"../core/store/paths.js\";\nimport { normalizeStatusInput } from \"../core/item/status.js\";\nimport { resolveRuntimeStatusRegistry } from \"../core/schema/runtime-schema.js\";\nimport {\n runActivity,\n runAggregate,\n runAppend,\n runCalendar,\n runClaim,\n runClose,\n runComments,\n runCommentsAudit,\n runCompletion,\n runConfig,\n runContext,\n runContracts,\n runCreate,\n runDedupeAudit,\n runDelete,\n runDeps,\n runDocs,\n runExtension,\n runFiles,\n runFilesDiscover,\n runGc,\n runGet,\n runGuide,\n runHealth,\n runHistory,\n runInit,\n runLearnings,\n runList,\n runNormalize,\n runNotes,\n runReindex,\n runRelease,\n runRestore,\n runSearch,\n runStats,\n runTemplatesList,\n runTemplatesSave,\n runTemplatesShow,\n runTest,\n runTestAll,\n runTestRunsList,\n runTestRunsLogs,\n runTestRunsResume,\n runTestRunsStatus,\n runTestRunsStop,\n runUpdate,\n runUpdateMany,\n runValidate,\n} from \"../cli/commands/index.js\";\n\nexport type NativePmArgs = Record<string, unknown>;\n\nconst GLOBAL_KEYS = new Set([\n \"action\",\n \"cwd\",\n \"path\",\n \"json\",\n \"quiet\",\n \"profile\",\n \"noExtensions\",\n \"noPager\",\n \"pmExecutable\",\n \"timeoutMs\",\n \"options\",\n]);\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? { ...(value as Record<string, unknown>) } : {};\n}\n\nfunction readString(args: Record<string, unknown>, key: string): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n}\n\nfunction mutationOptions(options: Record<string, unknown>): { author?: string; message?: string } {\n return {\n author: readString(options, \"author\"),\n message: typeof options.message === \"string\" ? options.message : undefined,\n };\n}\n\nfunction requiredString(args: Record<string, unknown>, key: string, action: string): string {\n const value = readString(args, key);\n if (!value) {\n throw new PmCliError(`Action \"${action}\" requires \"${key}\".`, 64);\n }\n return value;\n}\n\nexport function nativeGlobalOptions(args: NativePmArgs): GlobalOptions {\n return {\n json: args.json !== false,\n quiet: args.quiet === true,\n profile: args.profile === true,\n noExtensions: args.noExtensions === true,\n noPager: args.noPager !== false,\n path: readString(args, \"path\"),\n };\n}\n\nexport function nativeCommandOptions(args: NativePmArgs): Record<string, unknown> {\n const options = asRecord(args.options);\n for (const [key, value] of Object.entries(args)) {\n if (GLOBAL_KEYS.has(key) || value === undefined) continue;\n if (options[key] === undefined) options[key] = value;\n }\n const author = readString(args, \"author\");\n if (author && options.author === undefined) options.author = author;\n return options;\n}\n\nasync function withCwd<T>(cwd: unknown, run: () => Promise<T>): Promise<T> {\n if (typeof cwd !== \"string\" || cwd.trim().length === 0) return run();\n const previous = process.cwd();\n process.chdir(cwd);\n try {\n return await run();\n } finally {\n process.chdir(previous);\n }\n}\n\nasync function runStartTask(id: string, options: Record<string, unknown>, global: GlobalOptions): Promise<unknown> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const status = normalizeStatusInput(\"in_progress\", statusRegistry) ?? statusRegistry.open_status;\n const force = options.force === true;\n const baseOptions = mutationOptions(options);\n const claim = await runClaim(id, force, global, baseOptions);\n const update = await runUpdate(id, { ...baseOptions, status, force }, global);\n return { id, action: \"start_task\", claim, update };\n}\n\nasync function runPauseTask(id: string, options: Record<string, unknown>, global: GlobalOptions): Promise<unknown> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const force = options.force === true;\n const baseOptions = mutationOptions(options);\n const update = await runUpdate(id, { ...baseOptions, status: statusRegistry.open_status, force }, global);\n const release = await runRelease(id, force, global, baseOptions);\n return { id, action: \"pause_task\", update, release };\n}\n\nasync function runCloseTask(id: string, reason: string, options: Record<string, unknown>, global: GlobalOptions): Promise<unknown> {\n const force = options.force === true;\n const baseOptions = mutationOptions(options);\n const close = await runClose(id, reason, { ...baseOptions, validateClose: readString(options, \"validateClose\"), force }, global);\n const release = await runRelease(id, force, global, baseOptions);\n return { id, action: \"close_task\", close, release };\n}\n\nexport async function runNativePmAction(args: NativePmArgs): Promise<unknown> {\n return withCwd(args.cwd, async () => {\n const action = requiredString(args, \"action\", \"pm\").trim().toLowerCase();\n const global = nativeGlobalOptions(args);\n const options = nativeCommandOptions(args);\n const id = readString(args, \"id\") ?? readString(options, \"id\");\n const force = args.force === true || options.force === true;\n\n switch (action) {\n case \"init\": return runInit(readString(args, \"prefix\") ?? readString(options, \"prefix\"), global, options);\n case \"config\": return runConfig(readString(args, \"scope\") ?? readString(options, \"scope\") ?? \"project\", readString(args, \"configAction\") ?? readString(options, \"configAction\") ?? requiredString(options, \"action\", action), readString(args, \"key\") ?? readString(options, \"key\"), options, global);\n case \"extension-init\": return runExtension(requiredString(args, \"target\", action), { ...options, init: true }, global);\n case \"extension-install\": return runExtension(readString(args, \"target\") ?? readString(options, \"target\"), { ...options, install: true }, global);\n case \"extension-uninstall\": return runExtension(requiredString(args, \"target\", action), { ...options, uninstall: true }, global);\n case \"extension-explore\": return runExtension(undefined, { ...options, explore: true }, global);\n case \"extension-manage\": return runExtension(undefined, { ...options, manage: true }, global);\n case \"extension-doctor\": return runExtension(undefined, { ...options, doctor: true }, global);\n case \"extension-adopt\": return runExtension(requiredString(args, \"target\", action), { ...options, adopt: true }, global);\n case \"extension-adopt-all\": return runExtension(undefined, { ...options, adoptAll: true }, global);\n case \"extension-activate\": return runExtension(requiredString(args, \"target\", action), { ...options, activate: true }, global);\n case \"extension-deactivate\": return runExtension(requiredString(args, \"target\", action), { ...options, deactivate: true }, global);\n case \"extension\": return runExtension(readString(args, \"target\") ?? readString(options, \"target\"), options, global);\n case \"create\": return runCreate(options, global);\n case \"list\": case \"list-all\": case \"list-draft\": case \"list-open\": case \"list-in-progress\": case \"list-blocked\": case \"list-closed\": case \"list-canceled\": return runList(action === \"list\" ? readString(args, \"status\") : action === \"list-all\" ? undefined : action.replace(\"list-\", \"\").replaceAll(\"-\", \"_\"), options, global);\n case \"aggregate\": return runAggregate(options, global);\n case \"dedupe-audit\": return runDedupeAudit(options, global);\n case \"calendar\": return runCalendar(options, global);\n case \"context\": return runContext(options, global);\n case \"get\": return runGet(id ?? requiredString(options, \"id\", action), global);\n case \"search\": return runSearch(readString(args, \"query\") ?? readString(args, \"keywords\") ?? requiredString(options, \"query\", action), options, global);\n case \"reindex\": return runReindex(options, global);\n case \"history\": return runHistory(id ?? requiredString(options, \"id\", action), options, global);\n case \"activity\": return runActivity(options, global);\n case \"restore\": return runRestore(id ?? requiredString(options, \"id\", action), readString(args, \"target\") ?? requiredString(options, \"target\", action), options, global);\n case \"update\": return runUpdate(id ?? requiredString(options, \"id\", action), options, global);\n case \"update-many\": return runUpdateMany(options as never, global);\n case \"normalize\": return runNormalize(options as never, global);\n case \"close\": return runClose(id ?? requiredString(options, \"id\", action), readString(args, \"text\") ?? readString(args, \"reason\") ?? requiredString(options, \"text\", action), options, global);\n case \"delete\": return runDelete(id ?? requiredString(options, \"id\", action), options, global);\n case \"append\": return runAppend(id ?? requiredString(options, \"id\", action), options as never, global);\n case \"comments\": return runComments(id ?? requiredString(options, \"id\", action), options, global);\n case \"comments-audit\": return runCommentsAudit(options, global);\n case \"notes\": return runNotes(id ?? requiredString(options, \"id\", action), options, global);\n case \"learnings\": return runLearnings(id ?? requiredString(options, \"id\", action), options, global);\n case \"files\": return runFiles(id ?? requiredString(options, \"id\", action), options, global);\n case \"files-discover\": return runFilesDiscover(id ?? requiredString(options, \"id\", action), options, global);\n case \"docs\": return runDocs(id ?? requiredString(options, \"id\", action), options, global);\n case \"deps\": return runDeps(id ?? requiredString(options, \"id\", action), options, global);\n case \"test\": return runTest(id ?? requiredString(options, \"id\", action), options, global);\n case \"test-all\": return runTestAll(options, global);\n case \"test-runs-list\": return runTestRunsList(options, global);\n case \"test-runs-status\": return runTestRunsStatus(requiredString(args, \"runId\", action), global);\n case \"test-runs-logs\": return runTestRunsLogs(requiredString(args, \"runId\", action), options, global);\n case \"test-runs-stop\": return runTestRunsStop(requiredString(args, \"runId\", action), options, global);\n case \"test-runs-resume\": return runTestRunsResume(requiredString(args, \"runId\", action), options, global);\n case \"stats\": return runStats(global);\n case \"health\": return runHealth(global, options);\n case \"validate\": return runValidate(options, global);\n case \"gc\": return runGc(global, options);\n case \"contracts\": return runContracts(options, global);\n case \"completion\": return runCompletion(requiredString(args, \"shell\", action), undefined, undefined, options.eagerTags === true, options.runtime as never);\n case \"templates-save\": return runTemplatesSave(readString(args, \"template\") ?? requiredString(options, \"name\", action), options, global);\n case \"templates-list\": return runTemplatesList(global);\n case \"templates-show\": return runTemplatesShow(readString(args, \"template\") ?? requiredString(options, \"name\", action), global);\n case \"claim\": return runClaim(id ?? requiredString(options, \"id\", action), force, global, options);\n case \"release\": return runRelease(id ?? requiredString(options, \"id\", action), force, global, options);\n case \"start-task\": return runStartTask(id ?? requiredString(options, \"id\", action), options, global);\n case \"pause-task\": return runPauseTask(id ?? requiredString(options, \"id\", action), options, global);\n case \"close-task\": return runCloseTask(id ?? requiredString(options, \"id\", action), readString(args, \"text\") ?? readString(args, \"reason\") ?? requiredString(options, \"text\", action), options, global);\n case \"guide\": return runGuide(options, global);\n default: throw new PmCliError(`Unsupported native pm action: ${action}`, 64);\n }\n });\n}\n"]}
@@ -1,56 +0,0 @@
1
- # Pi Native Package
2
-
3
- pm-cli ships an official Pi package so Pi can use pm through a native extension instead of shelling out to the `pm` CLI.
4
-
5
- ## Install
6
-
7
- After the package is published:
8
-
9
- ```bash
10
- pi install npm:@unbrained/pm-cli
11
- ```
12
-
13
- If you install an unscoped npm alias, use the same Pi syntax, for example `pi install npm:pm-cli`. The published package in this repository is `@unbrained/pm-cli`.
14
-
15
- From a local checkout:
16
-
17
- ```bash
18
- pnpm build
19
- pi install -l .
20
- # or try without writing settings
21
- pi --no-extensions -e .
22
- ```
23
-
24
- `pnpm build` is required for local checkouts because the Pi extension imports the compiled native integration from `dist/pi/native.js`.
25
-
26
- ## Package Resources
27
-
28
- The root `package.json` declares the Pi manifest:
29
-
30
- - `pi.extensions`: `.pi/extensions/pm-cli/index.js`
31
- - `pi.skills`: `.pi/skills`
32
- - `pi.prompts`: `.pi/prompts`
33
-
34
- The extension registers:
35
-
36
- - native `pm` tool using pm command modules directly, not the `pm` shell command
37
- - `/pm-context`, `/pm-start`, `/pm-close`, and `/pm-actions` helper commands
38
- - status footer entry `pm native`
39
-
40
- ## Native Tool Usage
41
-
42
- Use the Pi `pm` tool with an `action` field. Examples:
43
-
44
- ```json
45
- { "action": "context", "limit": 10 }
46
- { "action": "search", "query": "pi extension", "limit": 10 }
47
- { "action": "start-task", "id": "pm-1234", "author": "pi-agent" }
48
- { "action": "files", "id": "pm-1234", "add": ["path=src/file.ts,scope=project,note=implementation"], "author": "pi-agent" }
49
- { "action": "close-task", "id": "pm-1234", "text": "Verified and complete", "author": "pi-agent", "validateClose": "warn" }
50
- ```
51
-
52
- For real project tracking, leave `path` unset. For tests, set `path` to a sandbox pm root and isolate `PM_GLOBAL_PATH`.
53
-
54
- ## Supported Surface
55
-
56
- The native integration covers the core pm action set exposed by the SDK contracts: init/config/extensions, item creation and lifecycle, list/search/context/calendar/activity, files/docs/deps/tests, validation/health/gc/contracts, templates, test-runs, and guide workflows.