@unbrained/pm-cli 2026.5.2 → 2026.5.3-6

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 (115) hide show
  1. package/AGENTS.md +8 -1
  2. package/CHANGELOG.md +58 -0
  3. package/README.md +9 -1
  4. package/dist/cli/bootstrap-args.d.ts +18 -0
  5. package/dist/cli/bootstrap-args.js +242 -0
  6. package/dist/cli/bootstrap-args.js.map +1 -0
  7. package/dist/cli/commander-usage.d.ts +17 -0
  8. package/dist/cli/commander-usage.js +178 -0
  9. package/dist/cli/commander-usage.js.map +1 -0
  10. package/dist/cli/commands/activity.js +1 -9
  11. package/dist/cli/commands/activity.js.map +1 -1
  12. package/dist/cli/commands/calendar.js +3 -29
  13. package/dist/cli/commands/calendar.js.map +1 -1
  14. package/dist/cli/commands/comments.js +1 -9
  15. package/dist/cli/commands/comments.js.map +1 -1
  16. package/dist/cli/commands/config.d.ts +21 -3
  17. package/dist/cli/commands/config.js +118 -2
  18. package/dist/cli/commands/config.js.map +1 -1
  19. package/dist/cli/commands/context.d.ts +90 -1
  20. package/dist/cli/commands/context.js +485 -23
  21. package/dist/cli/commands/context.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +2 -11
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/history.js +1 -9
  25. package/dist/cli/commands/history.js.map +1 -1
  26. package/dist/cli/commands/learnings.js +1 -9
  27. package/dist/cli/commands/learnings.js.map +1 -1
  28. package/dist/cli/commands/list.js +3 -29
  29. package/dist/cli/commands/list.js.map +1 -1
  30. package/dist/cli/commands/normalize.js +9 -6
  31. package/dist/cli/commands/normalize.js.map +1 -1
  32. package/dist/cli/commands/notes.js +1 -9
  33. package/dist/cli/commands/notes.js.map +1 -1
  34. package/dist/cli/commands/reindex.js +2 -7
  35. package/dist/cli/commands/reindex.js.map +1 -1
  36. package/dist/cli/commands/search.js +4 -35
  37. package/dist/cli/commands/search.js.map +1 -1
  38. package/dist/cli/commands/test-runs.js +1 -11
  39. package/dist/cli/commands/test-runs.js.map +1 -1
  40. package/dist/cli/error-guidance.d.ts +13 -0
  41. package/dist/cli/error-guidance.js +43 -4
  42. package/dist/cli/error-guidance.js.map +1 -1
  43. package/dist/cli/extension-command-help.d.ts +48 -0
  44. package/dist/cli/extension-command-help.js +389 -0
  45. package/dist/cli/extension-command-help.js.map +1 -0
  46. package/dist/cli/help-content.js +9 -3
  47. package/dist/cli/help-content.js.map +1 -1
  48. package/dist/cli/help-json-payload.d.ts +25 -0
  49. package/dist/cli/help-json-payload.js +265 -0
  50. package/dist/cli/help-json-payload.js.map +1 -0
  51. package/dist/cli/main.js +996 -4468
  52. package/dist/cli/main.js.map +1 -1
  53. package/dist/cli/migration-gates.d.ts +22 -0
  54. package/dist/cli/migration-gates.js +146 -0
  55. package/dist/cli/migration-gates.js.map +1 -0
  56. package/dist/cli/register-list-query.d.ts +2 -0
  57. package/dist/cli/register-list-query.js +317 -0
  58. package/dist/cli/register-list-query.js.map +1 -0
  59. package/dist/cli/register-mutation.d.ts +2 -0
  60. package/dist/cli/register-mutation.js +795 -0
  61. package/dist/cli/register-mutation.js.map +1 -0
  62. package/dist/cli/register-operations.d.ts +2 -0
  63. package/dist/cli/register-operations.js +610 -0
  64. package/dist/cli/register-operations.js.map +1 -0
  65. package/dist/cli/register-setup.d.ts +2 -0
  66. package/dist/cli/register-setup.js +334 -0
  67. package/dist/cli/register-setup.js.map +1 -0
  68. package/dist/cli/registration-helpers.d.ts +53 -0
  69. package/dist/cli/registration-helpers.js +669 -0
  70. package/dist/cli/registration-helpers.js.map +1 -0
  71. package/dist/cli/shared-parsers.d.ts +6 -0
  72. package/dist/cli/shared-parsers.js +40 -0
  73. package/dist/cli/shared-parsers.js.map +1 -0
  74. package/dist/core/search/http-client.d.ts +29 -0
  75. package/dist/core/search/http-client.js +64 -0
  76. package/dist/core/search/http-client.js.map +1 -0
  77. package/dist/core/search/providers.d.ts +3 -13
  78. package/dist/core/search/providers.js +19 -69
  79. package/dist/core/search/providers.js.map +1 -1
  80. package/dist/core/search/semantic-defaults.js +2 -7
  81. package/dist/core/search/semantic-defaults.js.map +1 -1
  82. package/dist/core/search/vector-stores.d.ts +3 -13
  83. package/dist/core/search/vector-stores.js +17 -66
  84. package/dist/core/search/vector-stores.js.map +1 -1
  85. package/dist/core/sentry/helpers.d.ts +23 -2
  86. package/dist/core/sentry/helpers.js +101 -3
  87. package/dist/core/sentry/helpers.js.map +1 -1
  88. package/dist/core/sentry/instrument.d.ts +21 -0
  89. package/dist/core/sentry/instrument.js +34 -3
  90. package/dist/core/sentry/instrument.js.map +1 -1
  91. package/dist/core/shared/constants.d.ts +3 -0
  92. package/dist/core/shared/constants.js +58 -1
  93. package/dist/core/shared/constants.js.map +1 -1
  94. package/dist/core/store/front-matter-cache.d.ts +6 -0
  95. package/dist/core/store/front-matter-cache.js +150 -0
  96. package/dist/core/store/front-matter-cache.js.map +1 -0
  97. package/dist/core/store/item-store.js +2 -1
  98. package/dist/core/store/item-store.js.map +1 -1
  99. package/dist/core/store/settings.js +36 -0
  100. package/dist/core/store/settings.js.map +1 -1
  101. package/dist/core/telemetry/observability.d.ts +24 -0
  102. package/dist/core/telemetry/observability.js +185 -0
  103. package/dist/core/telemetry/observability.js.map +1 -0
  104. package/dist/core/telemetry/runtime.d.ts +27 -3
  105. package/dist/core/telemetry/runtime.js +298 -13
  106. package/dist/core/telemetry/runtime.js.map +1 -1
  107. package/dist/sdk/cli-contracts.js +28 -0
  108. package/dist/sdk/cli-contracts.js.map +1 -1
  109. package/dist/types.d.ts +21 -0
  110. package/dist/types.js +11 -0
  111. package/dist/types.js.map +1 -1
  112. package/docs/ARCHITECTURE.md +7 -1
  113. package/docs/COMMANDS.md +11 -1
  114. package/docs/RELEASING.md +56 -29
  115. package/package.json +8 -3
@@ -0,0 +1,389 @@
1
+ export function normalizeExtensionCommandPath(commandPath) {
2
+ return commandPath
3
+ .trim()
4
+ .toLowerCase()
5
+ .split(/\s+/)
6
+ .filter((part) => part.length > 0)
7
+ .join(" ");
8
+ }
9
+ function toNonEmptyFlagString(value) {
10
+ if (typeof value !== "string") {
11
+ return null;
12
+ }
13
+ const trimmed = value.trim();
14
+ return trimmed.length > 0 ? trimmed : null;
15
+ }
16
+ function toOptionalBoolean(value) {
17
+ return typeof value === "boolean" ? value : undefined;
18
+ }
19
+ function formatDynamicExtensionFlagHelpLine(definition) {
20
+ const visible = toOptionalBoolean(definition.visible);
21
+ if (visible === false) {
22
+ return null;
23
+ }
24
+ const longName = toNonEmptyFlagString(definition.long);
25
+ if (!longName || !longName.startsWith("--") || longName.length < 3) {
26
+ return null;
27
+ }
28
+ const shortName = toNonEmptyFlagString(definition.short);
29
+ const shortPrefix = shortName && shortName.startsWith("-") && !shortName.startsWith("--") ? `${shortName}, ` : "";
30
+ const valueName = toNonEmptyFlagString(definition.value_name);
31
+ const valueSuffix = valueName ? ` <${valueName}>` : "";
32
+ const description = toNonEmptyFlagString(definition.description) ?? "Extension-provided option.";
33
+ const markers = [];
34
+ if (toOptionalBoolean(definition.required) === true) {
35
+ markers.push("required");
36
+ }
37
+ if (toOptionalBoolean(definition.enabled) === false) {
38
+ markers.push("disabled");
39
+ }
40
+ const markerSuffix = markers.length > 0 ? ` [${markers.join(", ")}]` : "";
41
+ return `${shortPrefix}${longName}${valueSuffix} ${description}${markerSuffix}`;
42
+ }
43
+ function buildDynamicExtensionFlagHelp(definitions) {
44
+ const lines = [
45
+ ...new Set(definitions
46
+ .map(formatDynamicExtensionFlagHelpLine)
47
+ .filter((line) => line !== null)),
48
+ ].sort((left, right) => left.localeCompare(right));
49
+ if (lines.length === 0) {
50
+ return null;
51
+ }
52
+ return `\nExtension-provided flags:\n ${lines.join("\n ")}`;
53
+ }
54
+ export function collectDynamicExtensionFlagHelpByCommand(registrations) {
55
+ const grouped = new Map();
56
+ for (const registration of registrations) {
57
+ const commandPath = normalizeExtensionCommandPath(registration.target_command);
58
+ if (commandPath.length === 0) {
59
+ continue;
60
+ }
61
+ const existing = grouped.get(commandPath) ?? [];
62
+ existing.push(...registration.flags);
63
+ grouped.set(commandPath, existing);
64
+ }
65
+ const entries = [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right));
66
+ const helpByCommand = new Map();
67
+ for (const [commandPath, definitions] of entries) {
68
+ const helpText = buildDynamicExtensionFlagHelp(definitions);
69
+ if (!helpText) {
70
+ continue;
71
+ }
72
+ helpByCommand.set(commandPath, helpText);
73
+ }
74
+ return helpByCommand;
75
+ }
76
+ function normalizeExtensionCommandAction(commandPath, action) {
77
+ if (typeof action !== "string" || action.trim().length === 0) {
78
+ return commandPath.replace(/\s+/g, "-");
79
+ }
80
+ return action.trim().toLowerCase();
81
+ }
82
+ function normalizeExtensionCommandStringList(values) {
83
+ if (!Array.isArray(values)) {
84
+ return [];
85
+ }
86
+ const normalized = [];
87
+ const seen = new Set();
88
+ for (const value of values) {
89
+ if (typeof value !== "string") {
90
+ continue;
91
+ }
92
+ const trimmed = value.trim();
93
+ if (trimmed.length === 0 || seen.has(trimmed)) {
94
+ continue;
95
+ }
96
+ seen.add(trimmed);
97
+ normalized.push(trimmed);
98
+ }
99
+ return normalized;
100
+ }
101
+ function normalizeExtensionCommandArguments(values) {
102
+ if (!Array.isArray(values)) {
103
+ return [];
104
+ }
105
+ return values
106
+ .map((value) => {
107
+ const name = typeof value.name === "string" ? value.name.trim() : "";
108
+ if (name.length === 0) {
109
+ return null;
110
+ }
111
+ const normalized = {
112
+ name,
113
+ required: value.required === true,
114
+ variadic: value.variadic === true,
115
+ };
116
+ if (typeof value.description === "string" && value.description.trim().length > 0) {
117
+ normalized.description = value.description.trim();
118
+ }
119
+ return normalized;
120
+ })
121
+ .filter((entry) => entry !== null);
122
+ }
123
+ export function collectExtensionCommandHelpDescriptors(commandHandlers, commandDefinitions, flagRegistrations) {
124
+ const definitionsByCommand = new Map();
125
+ for (const definition of commandDefinitions) {
126
+ const commandPath = normalizeExtensionCommandPath(definition.command);
127
+ if (commandPath.length === 0) {
128
+ continue;
129
+ }
130
+ const description = typeof definition.description === "string" && definition.description.trim().length > 0
131
+ ? definition.description.trim()
132
+ : undefined;
133
+ const intent = typeof definition.intent === "string" && definition.intent.trim().length > 0
134
+ ? definition.intent.trim()
135
+ : undefined;
136
+ definitionsByCommand.set(commandPath, {
137
+ command: commandPath,
138
+ action: normalizeExtensionCommandAction(commandPath, definition.action),
139
+ description,
140
+ intent,
141
+ examples: normalizeExtensionCommandStringList(definition.examples),
142
+ failure_hints: normalizeExtensionCommandStringList(definition.failure_hints),
143
+ arguments: normalizeExtensionCommandArguments(definition.arguments),
144
+ flags: [],
145
+ source: {
146
+ layer: definition.layer,
147
+ name: definition.name,
148
+ },
149
+ });
150
+ }
151
+ const flagsByCommand = new Map();
152
+ for (const registration of flagRegistrations) {
153
+ const commandPath = normalizeExtensionCommandPath(registration.target_command);
154
+ if (commandPath.length === 0) {
155
+ continue;
156
+ }
157
+ const existing = flagsByCommand.get(commandPath) ?? [];
158
+ existing.push(...registration.flags);
159
+ flagsByCommand.set(commandPath, existing);
160
+ }
161
+ const commandSet = new Set();
162
+ for (const commandPath of commandHandlers) {
163
+ const normalized = normalizeExtensionCommandPath(commandPath);
164
+ if (normalized.length > 0) {
165
+ commandSet.add(normalized);
166
+ }
167
+ }
168
+ for (const commandPath of definitionsByCommand.keys()) {
169
+ commandSet.add(commandPath);
170
+ }
171
+ for (const commandPath of flagsByCommand.keys()) {
172
+ commandSet.add(commandPath);
173
+ }
174
+ const descriptors = new Map();
175
+ const sortedCommands = [...commandSet].sort((left, right) => left.localeCompare(right));
176
+ for (const commandPath of sortedCommands) {
177
+ const definition = definitionsByCommand.get(commandPath);
178
+ const flags = flagsByCommand.get(commandPath) ?? [];
179
+ if (definition) {
180
+ descriptors.set(commandPath, {
181
+ ...definition,
182
+ flags,
183
+ });
184
+ continue;
185
+ }
186
+ descriptors.set(commandPath, {
187
+ command: commandPath,
188
+ action: normalizeExtensionCommandAction(commandPath, undefined),
189
+ examples: [],
190
+ failure_hints: [],
191
+ arguments: [],
192
+ flags,
193
+ });
194
+ }
195
+ return descriptors;
196
+ }
197
+ function buildExtensionArgumentToken(argument) {
198
+ const variadicSuffix = argument.variadic ? "..." : "";
199
+ if (argument.required) {
200
+ return `<${argument.name}${variadicSuffix}>`;
201
+ }
202
+ return `[${argument.name}${variadicSuffix}]`;
203
+ }
204
+ export function applyDynamicExtensionArguments(command, descriptor) {
205
+ for (const argument of descriptor.arguments) {
206
+ command.argument(buildExtensionArgumentToken(argument), argument.description ?? "Extension argument.");
207
+ }
208
+ }
209
+ function formatDynamicExtensionOptionFlags(definition) {
210
+ const visible = toOptionalBoolean(definition.visible);
211
+ if (visible === false) {
212
+ return null;
213
+ }
214
+ const longName = toNonEmptyFlagString(definition.long);
215
+ const shortName = toNonEmptyFlagString(definition.short);
216
+ const normalizedShort = shortName && shortName.startsWith("-") && !shortName.startsWith("--") ? shortName : null;
217
+ const normalizedLong = longName && longName.startsWith("--") && longName.length > 2 ? longName : null;
218
+ if (!normalizedLong && !normalizedShort) {
219
+ return null;
220
+ }
221
+ const optionValueName = toNonEmptyFlagString(definition.value_name);
222
+ const optionValueSuffix = optionValueName ? ` <${optionValueName}>` : "";
223
+ const optionNames = [normalizedShort, normalizedLong].filter((entry) => entry !== null);
224
+ return `${optionNames.join(", ")}${optionValueSuffix}`;
225
+ }
226
+ function formatDynamicExtensionOptionDescription(definition) {
227
+ const description = toNonEmptyFlagString(definition.description) ?? "Extension-provided option.";
228
+ const markers = [];
229
+ if (toOptionalBoolean(definition.required) === true) {
230
+ markers.push("required");
231
+ }
232
+ if (toOptionalBoolean(definition.enabled) === false) {
233
+ markers.push("disabled");
234
+ }
235
+ const markerSuffix = markers.length > 0 ? ` [${markers.join(", ")}]` : "";
236
+ return `${description}${markerSuffix}`;
237
+ }
238
+ export function applyDynamicExtensionOptions(command, descriptor) {
239
+ const seen = new Set();
240
+ for (const definition of descriptor.flags) {
241
+ const optionFlags = formatDynamicExtensionOptionFlags(definition);
242
+ if (!optionFlags || seen.has(optionFlags)) {
243
+ continue;
244
+ }
245
+ seen.add(optionFlags);
246
+ command.option(optionFlags, formatDynamicExtensionOptionDescription(definition));
247
+ }
248
+ }
249
+ function buildDynamicExtensionHelpOptionSummary(definition) {
250
+ const flags = formatDynamicExtensionOptionFlags(definition);
251
+ if (!flags) {
252
+ return null;
253
+ }
254
+ const longName = toNonEmptyFlagString(definition.long);
255
+ const shortName = toNonEmptyFlagString(definition.short);
256
+ const normalizedLong = longName && longName.startsWith("--") && longName.length > 2 ? longName : null;
257
+ const normalizedShort = shortName && shortName.startsWith("-") && !shortName.startsWith("--") ? shortName : null;
258
+ const valueName = toNonEmptyFlagString(definition.value_name);
259
+ const required = toOptionalBoolean(definition.required) === true;
260
+ return {
261
+ flags,
262
+ long: normalizedLong,
263
+ short: normalizedShort,
264
+ description: formatDynamicExtensionOptionDescription(definition),
265
+ takes_value: valueName !== null,
266
+ value_required: valueName !== null,
267
+ value_name: valueName,
268
+ variadic: false,
269
+ required,
270
+ aliases: [],
271
+ alias_for: null,
272
+ };
273
+ }
274
+ export function buildDynamicExtensionHelpOptionSummaries(descriptor) {
275
+ if (!descriptor) {
276
+ return [];
277
+ }
278
+ const summaries = [];
279
+ const seen = new Set();
280
+ for (const definition of descriptor.flags) {
281
+ const summary = buildDynamicExtensionHelpOptionSummary(definition);
282
+ if (!summary || seen.has(summary.flags)) {
283
+ continue;
284
+ }
285
+ seen.add(summary.flags);
286
+ summaries.push(summary);
287
+ }
288
+ return summaries;
289
+ }
290
+ export function mergeHelpOptionSummaries(base, extension) {
291
+ if (extension.length === 0) {
292
+ return base;
293
+ }
294
+ const merged = [...base];
295
+ const seen = new Set(base.map((entry) => entry.flags));
296
+ for (const entry of extension) {
297
+ if (seen.has(entry.flags)) {
298
+ continue;
299
+ }
300
+ seen.add(entry.flags);
301
+ merged.push(entry);
302
+ }
303
+ return merged;
304
+ }
305
+ export function buildDynamicExtensionCommandMetadataHelp(descriptor) {
306
+ const lines = [];
307
+ if (descriptor.intent) {
308
+ lines.push(`Intent: ${descriptor.intent}`);
309
+ }
310
+ if (descriptor.action) {
311
+ lines.push(`Action contract: ${descriptor.action}`);
312
+ }
313
+ if (descriptor.examples.length > 0) {
314
+ lines.push("Examples:");
315
+ for (const example of descriptor.examples) {
316
+ lines.push(` - ${example}`);
317
+ }
318
+ }
319
+ if (descriptor.failure_hints.length > 0) {
320
+ lines.push("Common failure hints:");
321
+ for (const hint of descriptor.failure_hints) {
322
+ lines.push(` - ${hint}`);
323
+ }
324
+ }
325
+ if (lines.length === 0) {
326
+ return null;
327
+ }
328
+ return `\nExtension command metadata:\n ${lines.join("\n ")}`;
329
+ }
330
+ export function commandAliases(command) {
331
+ const commandRecord = command;
332
+ if (typeof commandRecord.aliases === "function") {
333
+ return commandRecord.aliases().map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0);
334
+ }
335
+ if (typeof commandRecord.alias === "function") {
336
+ const alias = commandRecord.alias();
337
+ if (typeof alias === "string" && alias.trim().length > 0) {
338
+ return [alias.trim().toLowerCase()];
339
+ }
340
+ }
341
+ if (Array.isArray(commandRecord._aliases)) {
342
+ return commandRecord._aliases.map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0);
343
+ }
344
+ return [];
345
+ }
346
+ export function findDirectChildCommand(parent, name) {
347
+ const normalizedTarget = name.trim().toLowerCase();
348
+ return (parent.commands.find((entry) => {
349
+ if (entry.name().trim().toLowerCase() === normalizedTarget) {
350
+ return true;
351
+ }
352
+ return commandAliases(entry).includes(normalizedTarget);
353
+ }) ?? null);
354
+ }
355
+ export function findCommandByPath(root, pathParts) {
356
+ let current = root;
357
+ for (const part of pathParts) {
358
+ const next = findDirectChildCommand(current, part);
359
+ if (!next) {
360
+ return null;
361
+ }
362
+ current = next;
363
+ }
364
+ return current;
365
+ }
366
+ export function ensureCommandPath(root, pathParts) {
367
+ if (pathParts.length === 0) {
368
+ return null;
369
+ }
370
+ let current = root;
371
+ for (let index = 0; index < pathParts.length; index += 1) {
372
+ const part = pathParts[index];
373
+ const existing = findDirectChildCommand(current, part);
374
+ if (existing) {
375
+ current = existing;
376
+ continue;
377
+ }
378
+ const created = current.command(part);
379
+ if (index < pathParts.length - 1) {
380
+ created.description("Extension-provided command group.");
381
+ }
382
+ else {
383
+ created.description("Extension-provided command path.");
384
+ }
385
+ current = created;
386
+ }
387
+ return current;
388
+ }
389
+ //# sourceMappingURL=extension-command-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-command-help.js","sourceRoot":"/","sources":["cli/extension-command-help.ts"],"names":[],"mappings":"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","sourcesContent":["import { Command } from \"commander\";\nimport type {\n RegisteredExtensionCommandDefinition,\n RegisteredExtensionFlagDefinitions,\n} from \"../core/extensions/index.js\";\n\nexport interface ExtensionCommandArgumentHelpDescriptor {\n name: string;\n required: boolean;\n variadic: boolean;\n description?: string;\n}\n\nexport interface ExtensionCommandHelpDescriptor {\n command: string;\n action: string;\n description?: string;\n intent?: string;\n examples: string[];\n failure_hints: string[];\n arguments: ExtensionCommandArgumentHelpDescriptor[];\n flags: Array<Record<string, unknown>>;\n source?: {\n layer: \"global\" | \"project\";\n name: string;\n };\n}\n\nexport interface HelpOptionSummary {\n flags: string;\n long: string | null;\n short: string | null;\n description: string;\n takes_value: boolean;\n value_required: boolean;\n value_name: string | null;\n variadic: boolean;\n required: boolean;\n aliases: string[];\n alias_for: string | null;\n default_value?: unknown;\n}\n\nexport function normalizeExtensionCommandPath(commandPath: string): string {\n return commandPath\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction toNonEmptyFlagString(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction toOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction formatDynamicExtensionFlagHelpLine(definition: Record<string, unknown>): string | null {\n const visible = toOptionalBoolean(definition.visible);\n if (visible === false) {\n return null;\n }\n const longName = toNonEmptyFlagString(definition.long);\n if (!longName || !longName.startsWith(\"--\") || longName.length < 3) {\n return null;\n }\n\n const shortName = toNonEmptyFlagString(definition.short);\n const shortPrefix = shortName && shortName.startsWith(\"-\") && !shortName.startsWith(\"--\") ? `${shortName}, ` : \"\";\n const valueName = toNonEmptyFlagString(definition.value_name);\n const valueSuffix = valueName ? ` <${valueName}>` : \"\";\n const description = toNonEmptyFlagString(definition.description) ?? \"Extension-provided option.\";\n const markers: string[] = [];\n if (toOptionalBoolean(definition.required) === true) {\n markers.push(\"required\");\n }\n if (toOptionalBoolean(definition.enabled) === false) {\n markers.push(\"disabled\");\n }\n const markerSuffix = markers.length > 0 ? ` [${markers.join(\", \")}]` : \"\";\n return `${shortPrefix}${longName}${valueSuffix} ${description}${markerSuffix}`;\n}\n\nfunction buildDynamicExtensionFlagHelp(definitions: Array<Record<string, unknown>>): string | null {\n const lines = [\n ...new Set(\n definitions\n .map(formatDynamicExtensionFlagHelpLine)\n .filter((line): line is string => line !== null),\n ),\n ].sort((left, right) => left.localeCompare(right));\n if (lines.length === 0) {\n return null;\n }\n return `\\nExtension-provided flags:\\n ${lines.join(\"\\n \")}`;\n}\n\nexport function collectDynamicExtensionFlagHelpByCommand(\n registrations: RegisteredExtensionFlagDefinitions[],\n): Map<string, string> {\n const grouped = new Map<string, Array<Record<string, unknown>>>();\n for (const registration of registrations) {\n const commandPath = normalizeExtensionCommandPath(registration.target_command);\n if (commandPath.length === 0) {\n continue;\n }\n const existing = grouped.get(commandPath) ?? [];\n existing.push(...registration.flags);\n grouped.set(commandPath, existing);\n }\n\n const entries = [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right));\n const helpByCommand = new Map<string, string>();\n for (const [commandPath, definitions] of entries) {\n const helpText = buildDynamicExtensionFlagHelp(definitions);\n if (!helpText) {\n continue;\n }\n helpByCommand.set(commandPath, helpText);\n }\n return helpByCommand;\n}\n\nfunction normalizeExtensionCommandAction(commandPath: string, action: string | undefined): string {\n if (typeof action !== \"string\" || action.trim().length === 0) {\n return commandPath.replace(/\\s+/g, \"-\");\n }\n return action.trim().toLowerCase();\n}\n\nfunction normalizeExtensionCommandStringList(values: string[] | undefined): string[] {\n if (!Array.isArray(values)) {\n return [];\n }\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n if (typeof value !== \"string\") {\n continue;\n }\n const trimmed = value.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeExtensionCommandArguments(\n values: Array<{ name?: unknown; required?: unknown; variadic?: unknown; description?: unknown }> | undefined,\n): ExtensionCommandArgumentHelpDescriptor[] {\n if (!Array.isArray(values)) {\n return [];\n }\n return values\n .map((value) => {\n const name = typeof value.name === \"string\" ? value.name.trim() : \"\";\n if (name.length === 0) {\n return null;\n }\n const normalized: ExtensionCommandArgumentHelpDescriptor = {\n name,\n required: value.required === true,\n variadic: value.variadic === true,\n };\n if (typeof value.description === \"string\" && value.description.trim().length > 0) {\n normalized.description = value.description.trim();\n }\n return normalized;\n })\n .filter((entry): entry is ExtensionCommandArgumentHelpDescriptor => entry !== null);\n}\n\nexport function collectExtensionCommandHelpDescriptors(\n commandHandlers: string[],\n commandDefinitions: RegisteredExtensionCommandDefinition[],\n flagRegistrations: RegisteredExtensionFlagDefinitions[],\n): Map<string, ExtensionCommandHelpDescriptor> {\n const definitionsByCommand = new Map<string, ExtensionCommandHelpDescriptor>();\n for (const definition of commandDefinitions) {\n const commandPath = normalizeExtensionCommandPath(definition.command);\n if (commandPath.length === 0) {\n continue;\n }\n const description =\n typeof definition.description === \"string\" && definition.description.trim().length > 0\n ? definition.description.trim()\n : undefined;\n const intent =\n typeof definition.intent === \"string\" && definition.intent.trim().length > 0\n ? definition.intent.trim()\n : undefined;\n definitionsByCommand.set(commandPath, {\n command: commandPath,\n action: normalizeExtensionCommandAction(commandPath, definition.action),\n description,\n intent,\n examples: normalizeExtensionCommandStringList(definition.examples),\n failure_hints: normalizeExtensionCommandStringList(definition.failure_hints),\n arguments: normalizeExtensionCommandArguments(definition.arguments),\n flags: [],\n source: {\n layer: definition.layer,\n name: definition.name,\n },\n });\n }\n\n const flagsByCommand = new Map<string, Array<Record<string, unknown>>>();\n for (const registration of flagRegistrations) {\n const commandPath = normalizeExtensionCommandPath(registration.target_command);\n if (commandPath.length === 0) {\n continue;\n }\n const existing = flagsByCommand.get(commandPath) ?? [];\n existing.push(...registration.flags);\n flagsByCommand.set(commandPath, existing);\n }\n\n const commandSet = new Set<string>();\n for (const commandPath of commandHandlers) {\n const normalized = normalizeExtensionCommandPath(commandPath);\n if (normalized.length > 0) {\n commandSet.add(normalized);\n }\n }\n for (const commandPath of definitionsByCommand.keys()) {\n commandSet.add(commandPath);\n }\n for (const commandPath of flagsByCommand.keys()) {\n commandSet.add(commandPath);\n }\n\n const descriptors = new Map<string, ExtensionCommandHelpDescriptor>();\n const sortedCommands = [...commandSet].sort((left, right) => left.localeCompare(right));\n for (const commandPath of sortedCommands) {\n const definition = definitionsByCommand.get(commandPath);\n const flags = flagsByCommand.get(commandPath) ?? [];\n if (definition) {\n descriptors.set(commandPath, {\n ...definition,\n flags,\n });\n continue;\n }\n descriptors.set(commandPath, {\n command: commandPath,\n action: normalizeExtensionCommandAction(commandPath, undefined),\n examples: [],\n failure_hints: [],\n arguments: [],\n flags,\n });\n }\n\n return descriptors;\n}\n\nfunction buildExtensionArgumentToken(argument: ExtensionCommandArgumentHelpDescriptor): string {\n const variadicSuffix = argument.variadic ? \"...\" : \"\";\n if (argument.required) {\n return `<${argument.name}${variadicSuffix}>`;\n }\n return `[${argument.name}${variadicSuffix}]`;\n}\n\nexport function applyDynamicExtensionArguments(command: Command, descriptor: ExtensionCommandHelpDescriptor): void {\n for (const argument of descriptor.arguments) {\n command.argument(buildExtensionArgumentToken(argument), argument.description ?? \"Extension argument.\");\n }\n}\n\nfunction formatDynamicExtensionOptionFlags(definition: Record<string, unknown>): string | null {\n const visible = toOptionalBoolean(definition.visible);\n if (visible === false) {\n return null;\n }\n const longName = toNonEmptyFlagString(definition.long);\n const shortName = toNonEmptyFlagString(definition.short);\n const normalizedShort = shortName && shortName.startsWith(\"-\") && !shortName.startsWith(\"--\") ? shortName : null;\n const normalizedLong = longName && longName.startsWith(\"--\") && longName.length > 2 ? longName : null;\n if (!normalizedLong && !normalizedShort) {\n return null;\n }\n const optionValueName = toNonEmptyFlagString(definition.value_name);\n const optionValueSuffix = optionValueName ? ` <${optionValueName}>` : \"\";\n const optionNames = [normalizedShort, normalizedLong].filter((entry): entry is string => entry !== null);\n return `${optionNames.join(\", \")}${optionValueSuffix}`;\n}\n\nfunction formatDynamicExtensionOptionDescription(definition: Record<string, unknown>): string {\n const description = toNonEmptyFlagString(definition.description) ?? \"Extension-provided option.\";\n const markers: string[] = [];\n if (toOptionalBoolean(definition.required) === true) {\n markers.push(\"required\");\n }\n if (toOptionalBoolean(definition.enabled) === false) {\n markers.push(\"disabled\");\n }\n const markerSuffix = markers.length > 0 ? ` [${markers.join(\", \")}]` : \"\";\n return `${description}${markerSuffix}`;\n}\n\nexport function applyDynamicExtensionOptions(command: Command, descriptor: ExtensionCommandHelpDescriptor): void {\n const seen = new Set<string>();\n for (const definition of descriptor.flags) {\n const optionFlags = formatDynamicExtensionOptionFlags(definition);\n if (!optionFlags || seen.has(optionFlags)) {\n continue;\n }\n seen.add(optionFlags);\n command.option(optionFlags, formatDynamicExtensionOptionDescription(definition));\n }\n}\n\nfunction buildDynamicExtensionHelpOptionSummary(definition: Record<string, unknown>): HelpOptionSummary | null {\n const flags = formatDynamicExtensionOptionFlags(definition);\n if (!flags) {\n return null;\n }\n const longName = toNonEmptyFlagString(definition.long);\n const shortName = toNonEmptyFlagString(definition.short);\n const normalizedLong = longName && longName.startsWith(\"--\") && longName.length > 2 ? longName : null;\n const normalizedShort = shortName && shortName.startsWith(\"-\") && !shortName.startsWith(\"--\") ? shortName : null;\n const valueName = toNonEmptyFlagString(definition.value_name);\n const required = toOptionalBoolean(definition.required) === true;\n return {\n flags,\n long: normalizedLong,\n short: normalizedShort,\n description: formatDynamicExtensionOptionDescription(definition),\n takes_value: valueName !== null,\n value_required: valueName !== null,\n value_name: valueName,\n variadic: false,\n required,\n aliases: [],\n alias_for: null,\n };\n}\n\nexport function buildDynamicExtensionHelpOptionSummaries(descriptor: ExtensionCommandHelpDescriptor | undefined): HelpOptionSummary[] {\n if (!descriptor) {\n return [];\n }\n const summaries: HelpOptionSummary[] = [];\n const seen = new Set<string>();\n for (const definition of descriptor.flags) {\n const summary = buildDynamicExtensionHelpOptionSummary(definition);\n if (!summary || seen.has(summary.flags)) {\n continue;\n }\n seen.add(summary.flags);\n summaries.push(summary);\n }\n return summaries;\n}\n\nexport function mergeHelpOptionSummaries(base: HelpOptionSummary[], extension: HelpOptionSummary[]): HelpOptionSummary[] {\n if (extension.length === 0) {\n return base;\n }\n const merged = [...base];\n const seen = new Set(base.map((entry) => entry.flags));\n for (const entry of extension) {\n if (seen.has(entry.flags)) {\n continue;\n }\n seen.add(entry.flags);\n merged.push(entry);\n }\n return merged;\n}\n\nexport function buildDynamicExtensionCommandMetadataHelp(descriptor: ExtensionCommandHelpDescriptor): string | null {\n const lines: string[] = [];\n if (descriptor.intent) {\n lines.push(`Intent: ${descriptor.intent}`);\n }\n if (descriptor.action) {\n lines.push(`Action contract: ${descriptor.action}`);\n }\n if (descriptor.examples.length > 0) {\n lines.push(\"Examples:\");\n for (const example of descriptor.examples) {\n lines.push(` - ${example}`);\n }\n }\n if (descriptor.failure_hints.length > 0) {\n lines.push(\"Common failure hints:\");\n for (const hint of descriptor.failure_hints) {\n lines.push(` - ${hint}`);\n }\n }\n if (lines.length === 0) {\n return null;\n }\n return `\\nExtension command metadata:\\n ${lines.join(\"\\n \")}`;\n}\n\nexport function commandAliases(command: Command): string[] {\n const commandRecord = command as unknown as {\n aliases?: () => string[];\n alias?: () => string | undefined;\n _aliases?: string[];\n };\n if (typeof commandRecord.aliases === \"function\") {\n return commandRecord.aliases().map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0);\n }\n if (typeof commandRecord.alias === \"function\") {\n const alias = commandRecord.alias();\n if (typeof alias === \"string\" && alias.trim().length > 0) {\n return [alias.trim().toLowerCase()];\n }\n }\n if (Array.isArray(commandRecord._aliases)) {\n return commandRecord._aliases.map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0);\n }\n return [];\n}\n\nexport function findDirectChildCommand(parent: Command, name: string): Command | null {\n const normalizedTarget = name.trim().toLowerCase();\n return (\n parent.commands.find((entry) => {\n if (entry.name().trim().toLowerCase() === normalizedTarget) {\n return true;\n }\n return commandAliases(entry).includes(normalizedTarget);\n }) ?? null\n );\n}\n\nexport function findCommandByPath(root: Command, pathParts: string[]): Command | null {\n let current: Command = root;\n for (const part of pathParts) {\n const next = findDirectChildCommand(current, part);\n if (!next) {\n return null;\n }\n current = next;\n }\n return current;\n}\n\nexport function ensureCommandPath(root: Command, pathParts: string[]): Command | null {\n if (pathParts.length === 0) {\n return null;\n }\n\n let current: Command = root;\n for (let index = 0; index < pathParts.length; index += 1) {\n const part = pathParts[index];\n const existing = findDirectChildCommand(current, part);\n if (existing) {\n current = existing;\n continue;\n }\n\n const created = current.command(part);\n if (index < pathParts.length - 1) {\n created.description(\"Extension-provided command group.\");\n } else {\n created.description(\"Extension-provided command path.\");\n }\n current = created;\n }\n\n return current;\n}\n"]}
@@ -267,15 +267,21 @@ const HELP_BY_COMMAND_PATH = {
267
267
  ],
268
268
  },
269
269
  context: {
270
- why: "Builds an agent-optimized snapshot of critical active work plus near-term agenda context.",
270
+ why: "Builds an agent-optimized snapshot of critical active work plus near-term agenda context with progressive depth levels.",
271
271
  examples: [
272
272
  "pm context",
273
- "pm ctx --limit 5 --assignee codex-agent",
274
- "pm context --from +0d --to +7d --format markdown",
273
+ "pm ctx --depth standard --limit 10",
274
+ "pm ctx --depth deep --assignee codex-agent",
275
+ "pm ctx --section hierarchy --section progress --section blockers",
276
+ "pm context --depth standard --activity-limit 20 --stale-threshold 14d",
277
+ "pm context --from +0d --to +7d --format markdown --depth deep",
275
278
  ],
276
279
  tips: [
277
280
  "High-level focus contains Epics/Features and low-level focus contains Tasks/Issues/Chores/Event/Reminder/Milestone/Meeting.",
278
281
  "When no open or in-progress work exists, blocked items are shown as fallback context.",
282
+ "--depth brief (default) shows focus+agenda; standard adds hierarchy/activity/progress/workload; deep adds blockers/files/staleness/tests.",
283
+ "--section overrides --depth and selects specific sections: hierarchy, activity, progress, blockers, files, workload, staleness, tests.",
284
+ "Configure defaults via pm config project set context --default-depth standard --activity-limit 15.",
279
285
  ],
280
286
  },
281
287
  search: {