@unbrained/pm-cli 2026.5.29 → 2026.5.30

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 (100) hide show
  1. package/CHANGELOG.md +29 -12
  2. package/dist/cli/bootstrap-args.d.ts +1 -1
  3. package/dist/cli/bootstrap-args.js +59 -9
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commands/activity.js +4 -4
  6. package/dist/cli/commands/activity.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +4 -4
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close.js +4 -4
  10. package/dist/cli/commands/close.js.map +1 -1
  11. package/dist/cli/commands/completion.js +4 -4
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/create.js +18 -5
  14. package/dist/cli/commands/create.js.map +1 -1
  15. package/dist/cli/commands/deps.js +4 -4
  16. package/dist/cli/commands/deps.js.map +1 -1
  17. package/dist/cli/commands/extension/install-sources.d.ts +1 -0
  18. package/dist/cli/commands/extension/install-sources.js +20 -2
  19. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  20. package/dist/cli/commands/extension.js +26 -5
  21. package/dist/cli/commands/extension.js.map +1 -1
  22. package/dist/cli/commands/get.js +6 -3
  23. package/dist/cli/commands/get.js.map +1 -1
  24. package/dist/cli/commands/list.js +25 -6
  25. package/dist/cli/commands/list.js.map +1 -1
  26. package/dist/cli/commands/search.js +3 -3
  27. package/dist/cli/commands/search.js.map +1 -1
  28. package/dist/cli/commands/stats.js +4 -4
  29. package/dist/cli/commands/stats.js.map +1 -1
  30. package/dist/cli/commands/test-all.js +4 -4
  31. package/dist/cli/commands/test-all.js.map +1 -1
  32. package/dist/cli/main.d.ts +2 -0
  33. package/dist/cli/main.js +39 -11
  34. package/dist/cli/main.js.map +1 -1
  35. package/dist/cli/register-list-query.js +3 -3
  36. package/dist/cli/register-list-query.js.map +1 -1
  37. package/dist/cli/register-setup.js +3 -3
  38. package/dist/cli/register-setup.js.map +1 -1
  39. package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js +164 -0
  40. package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js.map +7 -0
  41. package/dist/cli-bundle/chunks/chunk-RJONRNXN.js +682 -0
  42. package/dist/cli-bundle/chunks/chunk-RJONRNXN.js.map +7 -0
  43. package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js +13864 -0
  44. package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js.map +7 -0
  45. package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js +24225 -0
  46. package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js.map +7 -0
  47. package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js +223 -0
  48. package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js.map +7 -0
  49. package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js +702 -0
  50. package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js.map +7 -0
  51. package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js +355 -0
  52. package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js.map +7 -0
  53. package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js +237 -0
  54. package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js.map +7 -0
  55. package/dist/cli-bundle/main.js +6896 -0
  56. package/dist/cli-bundle/main.js.map +7 -0
  57. package/dist/cli.js +1 -1
  58. package/dist/core/config/nested-settings.d.ts +2 -0
  59. package/dist/core/config/nested-settings.js +17 -2
  60. package/dist/core/config/nested-settings.js.map +1 -1
  61. package/dist/core/item/type-synonyms.d.ts +20 -0
  62. package/dist/core/item/type-synonyms.js +42 -0
  63. package/dist/core/item/type-synonyms.js.map +1 -0
  64. package/dist/core/search/cache.js +46 -4
  65. package/dist/core/search/cache.js.map +1 -1
  66. package/dist/core/search/semantic-defaults.js +73 -32
  67. package/dist/core/search/semantic-defaults.js.map +1 -1
  68. package/dist/core/sentry/helpers.d.ts +1 -1
  69. package/dist/core/sentry/helpers.js +4 -4
  70. package/dist/core/sentry/helpers.js.map +1 -1
  71. package/dist/core/shared/constants.js +3 -2
  72. package/dist/core/shared/constants.js.map +1 -1
  73. package/dist/core/shared/html-entity-decode.d.ts +2 -1
  74. package/dist/core/shared/html-entity-decode.js +14 -9
  75. package/dist/core/shared/html-entity-decode.js.map +1 -1
  76. package/dist/core/shared/time.js +52 -2
  77. package/dist/core/shared/time.js.map +1 -1
  78. package/dist/core/store/front-matter-cache.d.ts +24 -0
  79. package/dist/core/store/front-matter-cache.js +119 -8
  80. package/dist/core/store/front-matter-cache.js.map +1 -1
  81. package/dist/core/store/item-store.d.ts +7 -0
  82. package/dist/core/store/item-store.js +13 -3
  83. package/dist/core/store/item-store.js.map +1 -1
  84. package/dist/core/store/settings-validator.d.ts +1 -0
  85. package/dist/core/store/settings-validator.js +3 -2
  86. package/dist/core/store/settings-validator.js.map +1 -1
  87. package/dist/core/store/settings.js +19 -3
  88. package/dist/core/store/settings.js.map +1 -1
  89. package/dist/mcp/server.js +3 -3
  90. package/dist/mcp/server.js.map +1 -1
  91. package/dist/sdk/cli-contracts.js +5 -5
  92. package/dist/sdk/cli-contracts.js.map +1 -1
  93. package/dist/types.d.ts +2 -0
  94. package/dist/types.js +2 -2
  95. package/dist/types.js.map +1 -1
  96. package/docs/CONFIGURATION.md +11 -0
  97. package/package.json +7 -4
  98. package/packages/pm-calendar/extensions/calendar/index.js +27 -2
  99. package/packages/pm-calendar/extensions/calendar/index.ts +28 -2
  100. package/scripts/bundle-cli.mjs +39 -0
@@ -0,0 +1,682 @@
1
+ import {
2
+ ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,
3
+ CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS,
4
+ CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,
5
+ CREATE_COMMANDER_STRING_OPTION_CONTRACTS,
6
+ EXIT_CODE,
7
+ LIST_COMMANDER_STRING_OPTION_CONTRACTS,
8
+ PmCliError,
9
+ SEARCH_COMMANDER_STRING_OPTION_CONTRACTS,
10
+ UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,
11
+ UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,
12
+ getSettingsPath,
13
+ pathExists,
14
+ printError,
15
+ readFirstStringFromCommanderOptions,
16
+ readSettings,
17
+ readStringArrayFromCommanderOptions,
18
+ refreshSearchArtifactsForMutation,
19
+ resolvePmRoot,
20
+ setActiveCommandResult,
21
+ writeStdout
22
+ } from "./chunk-SW5BMMCU.js";
23
+
24
+ // dist/cli/registration-helpers.js
25
+ !(function() {
26
+ try {
27
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
28
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "6490100a-ca86-5c9c-98cf-32495555c543");
29
+ } catch (e2) {
30
+ }
31
+ })();
32
+ var RESOLVED_GLOBAL_OPTIONS = /* @__PURE__ */ Symbol("pm.resolvedGlobalOptions");
33
+ function commandOptionsReader(command) {
34
+ return typeof command === "object" && command !== null ? command : {};
35
+ }
36
+ function setResolvedGlobalOptions(command, globalOptions) {
37
+ command[RESOLVED_GLOBAL_OPTIONS] = { ...globalOptions };
38
+ }
39
+ function clearResolvedGlobalOptions(command) {
40
+ delete command[RESOLVED_GLOBAL_OPTIONS];
41
+ }
42
+ function getGlobalOptions(command) {
43
+ const resolved = command[RESOLVED_GLOBAL_OPTIONS];
44
+ if (resolved) {
45
+ return { ...resolved };
46
+ }
47
+ const reader = commandOptionsReader(command);
48
+ const opts = typeof reader.optsWithGlobals === "function" ? reader.optsWithGlobals() : typeof reader.opts === "function" ? reader.opts() : {};
49
+ return {
50
+ json: opts.json === true ? true : void 0,
51
+ quiet: Boolean(opts.quiet),
52
+ noChangedFields: opts.changedFields === false,
53
+ path: typeof opts.path === "string" ? opts.path : void 0,
54
+ noExtensions: opts.extensions === false,
55
+ noPager: Boolean(opts.noPager),
56
+ profile: Boolean(opts.profile)
57
+ };
58
+ }
59
+ function getCommandPath(command) {
60
+ const parts = [];
61
+ let current = command;
62
+ while (current?.parent) {
63
+ parts.unshift(current.name());
64
+ current = current.parent;
65
+ }
66
+ return parts.join(" ");
67
+ }
68
+ async function applyDefaultOutputFormat(globalOptions) {
69
+ if (globalOptions.json === true) {
70
+ return globalOptions;
71
+ }
72
+ const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);
73
+ if (!await pathExists(getSettingsPath(pmRoot))) {
74
+ return globalOptions;
75
+ }
76
+ const settings = await readSettings(pmRoot);
77
+ return {
78
+ ...globalOptions,
79
+ defaultOutputFormat: settings.output.default_format
80
+ };
81
+ }
82
+ function collect(value, previous) {
83
+ const next = previous ?? [];
84
+ next.push(value);
85
+ return next;
86
+ }
87
+ function pushOptionalValueFlag(args, flag, value) {
88
+ if (typeof value !== "string") {
89
+ return;
90
+ }
91
+ const trimmed = value.trim();
92
+ if (trimmed.length === 0) {
93
+ return;
94
+ }
95
+ args.push(flag, trimmed);
96
+ }
97
+ function pushOptionalBooleanFlag(args, flag, value) {
98
+ if (value === true) {
99
+ args.push(flag);
100
+ }
101
+ }
102
+ function pushRepeatableValueFlag(args, flag, values) {
103
+ if (!Array.isArray(values)) {
104
+ return;
105
+ }
106
+ for (const value of values) {
107
+ if (typeof value !== "string") {
108
+ continue;
109
+ }
110
+ const trimmed = value.trim();
111
+ if (trimmed.length === 0) {
112
+ continue;
113
+ }
114
+ args.push(flag, trimmed);
115
+ }
116
+ }
117
+ function buildBackgroundTestCommandArgs(id, options) {
118
+ const args = ["test", id, "--run", "--json", "--progress"];
119
+ pushRepeatableValueFlag(args, "--add", options.add);
120
+ pushRepeatableValueFlag(args, "--remove", options.remove);
121
+ pushOptionalValueFlag(args, "--timeout", options.timeout);
122
+ pushRepeatableValueFlag(args, "--env-set", options.envSet);
123
+ pushRepeatableValueFlag(args, "--env-clear", options.envClear);
124
+ pushOptionalBooleanFlag(args, "--shared-host-safe", options.sharedHostSafe);
125
+ pushOptionalValueFlag(args, "--pm-context", options.pmContext);
126
+ pushOptionalBooleanFlag(args, "--override-linked-pm-context", options.overrideLinkedPmContext);
127
+ pushOptionalBooleanFlag(args, "--fail-on-context-mismatch", options.failOnContextMismatch);
128
+ pushOptionalBooleanFlag(args, "--fail-on-skipped", options.failOnSkipped);
129
+ pushOptionalBooleanFlag(args, "--fail-on-empty-test-run", options.failOnEmptyTestRun);
130
+ pushOptionalBooleanFlag(args, "--require-assertions-for-pm", options.requireAssertionsForPm);
131
+ pushOptionalBooleanFlag(args, "--check-context", options.checkContext);
132
+ pushOptionalBooleanFlag(args, "--auto-pm-context", options.autoPmContext);
133
+ pushOptionalValueFlag(args, "--author", options.author);
134
+ pushOptionalValueFlag(args, "--message", options.message);
135
+ pushOptionalBooleanFlag(args, "--force", options.force);
136
+ return args;
137
+ }
138
+ function buildBackgroundTestAllCommandArgs(options) {
139
+ const args = ["test-all", "--json", "--progress"];
140
+ pushOptionalValueFlag(args, "--status", options.status);
141
+ pushOptionalValueFlag(args, "--limit", options.limit);
142
+ pushOptionalValueFlag(args, "--offset", options.offset);
143
+ pushOptionalValueFlag(args, "--timeout", options.timeout);
144
+ pushRepeatableValueFlag(args, "--env-set", options.envSet);
145
+ pushRepeatableValueFlag(args, "--env-clear", options.envClear);
146
+ pushOptionalBooleanFlag(args, "--shared-host-safe", options.sharedHostSafe);
147
+ pushOptionalValueFlag(args, "--pm-context", options.pmContext);
148
+ pushOptionalBooleanFlag(args, "--override-linked-pm-context", options.overrideLinkedPmContext);
149
+ pushOptionalBooleanFlag(args, "--fail-on-context-mismatch", options.failOnContextMismatch);
150
+ pushOptionalBooleanFlag(args, "--fail-on-skipped", options.failOnSkipped);
151
+ pushOptionalBooleanFlag(args, "--fail-on-empty-test-run", options.failOnEmptyTestRun);
152
+ pushOptionalBooleanFlag(args, "--require-assertions-for-pm", options.requireAssertionsForPm);
153
+ pushOptionalBooleanFlag(args, "--check-context", options.checkContext);
154
+ pushOptionalBooleanFlag(args, "--auto-pm-context", options.autoPmContext);
155
+ return args;
156
+ }
157
+ function formatHookWarnings(warnings) {
158
+ return warnings.join(",");
159
+ }
160
+ function normalizeCreateOptions(commandOptions, options = {}) {
161
+ const readCreateString = (target) => readFirstStringFromCommanderOptions(commandOptions, CREATE_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
162
+ target,
163
+ keys: [target]
164
+ });
165
+ const readCreateList = (target) => readStringArrayFromCommanderOptions(commandOptions, CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
166
+ target,
167
+ keys: [target]
168
+ });
169
+ const type = readCreateString("type");
170
+ if (options.requireType !== false && type === void 0) {
171
+ throw new PmCliError("Missing required option --type <value>. Why required: create resolves runtime schema fields/workflow from item type. Retry: add --type <built-in or configured custom type> (example: --type Task).", EXIT_CODE.USAGE);
172
+ }
173
+ const normalized = {
174
+ title: readCreateString("title"),
175
+ description: readCreateString("description"),
176
+ type,
177
+ template: readCreateString("template"),
178
+ createMode: readCreateString("createMode"),
179
+ schedulePreset: readCreateString("schedulePreset"),
180
+ status: readCreateString("status"),
181
+ priority: readCreateString("priority"),
182
+ tags: readCreateString("tags"),
183
+ addTags: readCreateList("addTags"),
184
+ body: readCreateString("body"),
185
+ deadline: readCreateString("deadline"),
186
+ estimatedMinutes: readCreateString("estimatedMinutes"),
187
+ acceptanceCriteria: readCreateString("acceptanceCriteria"),
188
+ definitionOfReady: readCreateString("definitionOfReady"),
189
+ order: readCreateString("order"),
190
+ rank: readCreateString("rank"),
191
+ goal: readCreateString("goal"),
192
+ objective: readCreateString("objective"),
193
+ value: readCreateString("value"),
194
+ impact: readCreateString("impact"),
195
+ outcome: readCreateString("outcome"),
196
+ whyNow: readCreateString("whyNow"),
197
+ author: readCreateString("author"),
198
+ message: readCreateString("message"),
199
+ assignee: readCreateString("assignee"),
200
+ parent: readCreateString("parent"),
201
+ reviewer: readCreateString("reviewer"),
202
+ risk: readCreateString("risk"),
203
+ confidence: readCreateString("confidence"),
204
+ sprint: readCreateString("sprint"),
205
+ release: readCreateString("release"),
206
+ blockedBy: readCreateString("blockedBy"),
207
+ blockedReason: readCreateString("blockedReason"),
208
+ unblockNote: readCreateString("unblockNote"),
209
+ reporter: readCreateString("reporter"),
210
+ severity: readCreateString("severity"),
211
+ environment: readCreateString("environment"),
212
+ reproSteps: readCreateString("reproSteps"),
213
+ resolution: readCreateString("resolution"),
214
+ expectedResult: readCreateString("expectedResult"),
215
+ actualResult: readCreateString("actualResult"),
216
+ affectedVersion: readCreateString("affectedVersion"),
217
+ fixedVersion: readCreateString("fixedVersion"),
218
+ component: readCreateString("component"),
219
+ regression: readCreateString("regression"),
220
+ customerImpact: readCreateString("customerImpact"),
221
+ dep: readCreateList("dep"),
222
+ comment: readCreateList("comment"),
223
+ note: readCreateList("note"),
224
+ learning: readCreateList("learning"),
225
+ file: readCreateList("file"),
226
+ test: readCreateList("test"),
227
+ doc: readCreateList("doc"),
228
+ reminder: readCreateList("reminder"),
229
+ event: readCreateList("event"),
230
+ typeOption: readCreateList("typeOption"),
231
+ unset: readCreateList("unset"),
232
+ clearDeps: commandOptions.clearDeps === true ? true : void 0,
233
+ clearComments: commandOptions.clearComments === true ? true : void 0,
234
+ clearNotes: commandOptions.clearNotes === true ? true : void 0,
235
+ clearLearnings: commandOptions.clearLearnings === true ? true : void 0,
236
+ clearFiles: commandOptions.clearFiles === true ? true : void 0,
237
+ clearTests: commandOptions.clearTests === true ? true : void 0,
238
+ clearDocs: commandOptions.clearDocs === true ? true : void 0,
239
+ clearReminders: commandOptions.clearReminders === true ? true : void 0,
240
+ clearEvents: commandOptions.clearEvents === true ? true : void 0,
241
+ clearTypeOptions: commandOptions.clearTypeOptions === true ? true : void 0
242
+ };
243
+ for (const [key, value] of Object.entries(commandOptions)) {
244
+ if (Object.hasOwn(normalized, key)) {
245
+ continue;
246
+ }
247
+ normalized[key] = value;
248
+ }
249
+ return normalized;
250
+ }
251
+ function normalizeUpdateOptions(commandOptions) {
252
+ const readUpdateString = (target) => readFirstStringFromCommanderOptions(commandOptions, UPDATE_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
253
+ target,
254
+ keys: [target]
255
+ });
256
+ const readUpdateList = (target) => readStringArrayFromCommanderOptions(commandOptions, UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
257
+ target,
258
+ keys: [target]
259
+ });
260
+ const normalized = {
261
+ title: readUpdateString("title"),
262
+ description: readUpdateString("description"),
263
+ body: readUpdateString("body"),
264
+ status: readUpdateString("status"),
265
+ closeReason: readUpdateString("closeReason"),
266
+ priority: readUpdateString("priority"),
267
+ type: readUpdateString("type"),
268
+ tags: readUpdateString("tags"),
269
+ addTags: readUpdateList("addTags"),
270
+ removeTags: readUpdateList("removeTags"),
271
+ deadline: readUpdateString("deadline"),
272
+ estimatedMinutes: readUpdateString("estimatedMinutes"),
273
+ acceptanceCriteria: readUpdateString("acceptanceCriteria"),
274
+ definitionOfReady: readUpdateString("definitionOfReady"),
275
+ order: readUpdateString("order"),
276
+ rank: readUpdateString("rank"),
277
+ goal: readUpdateString("goal"),
278
+ objective: readUpdateString("objective"),
279
+ value: readUpdateString("value"),
280
+ impact: readUpdateString("impact"),
281
+ outcome: readUpdateString("outcome"),
282
+ whyNow: readUpdateString("whyNow"),
283
+ author: readUpdateString("author"),
284
+ message: readUpdateString("message"),
285
+ force: Boolean(commandOptions.force),
286
+ allowAuditUpdate: commandOptions.allowAuditUpdate === true || commandOptions.allow_audit_update === true ? true : void 0,
287
+ allowAuditDepUpdate: commandOptions.allowAuditDepUpdate === true || commandOptions.allow_audit_dep_update === true ? true : void 0,
288
+ assignee: readUpdateString("assignee"),
289
+ parent: readUpdateString("parent"),
290
+ reviewer: readUpdateString("reviewer"),
291
+ risk: readUpdateString("risk"),
292
+ confidence: readUpdateString("confidence"),
293
+ sprint: readUpdateString("sprint"),
294
+ release: readUpdateString("release"),
295
+ blockedBy: readUpdateString("blockedBy"),
296
+ blockedReason: readUpdateString("blockedReason"),
297
+ unblockNote: readUpdateString("unblockNote"),
298
+ reporter: readUpdateString("reporter"),
299
+ severity: readUpdateString("severity"),
300
+ environment: readUpdateString("environment"),
301
+ reproSteps: readUpdateString("reproSteps"),
302
+ resolution: readUpdateString("resolution"),
303
+ expectedResult: readUpdateString("expectedResult"),
304
+ actualResult: readUpdateString("actualResult"),
305
+ affectedVersion: readUpdateString("affectedVersion"),
306
+ fixedVersion: readUpdateString("fixedVersion"),
307
+ component: readUpdateString("component"),
308
+ regression: readUpdateString("regression"),
309
+ customerImpact: readUpdateString("customerImpact"),
310
+ dep: readUpdateList("dep"),
311
+ depRemove: readUpdateList("depRemove"),
312
+ replaceDeps: commandOptions.replaceDeps === true ? true : void 0,
313
+ replaceTests: commandOptions.replaceTests === true ? true : void 0,
314
+ comment: readUpdateList("comment"),
315
+ note: readUpdateList("note"),
316
+ learning: readUpdateList("learning"),
317
+ file: readUpdateList("file"),
318
+ test: readUpdateList("test"),
319
+ doc: readUpdateList("doc"),
320
+ reminder: readUpdateList("reminder"),
321
+ event: readUpdateList("event"),
322
+ typeOption: readUpdateList("typeOption"),
323
+ unset: readUpdateList("unset"),
324
+ clearDeps: commandOptions.clearDeps === true ? true : void 0,
325
+ clearComments: commandOptions.clearComments === true ? true : void 0,
326
+ clearNotes: commandOptions.clearNotes === true ? true : void 0,
327
+ clearLearnings: commandOptions.clearLearnings === true ? true : void 0,
328
+ clearFiles: commandOptions.clearFiles === true ? true : void 0,
329
+ clearTests: commandOptions.clearTests === true ? true : void 0,
330
+ clearDocs: commandOptions.clearDocs === true ? true : void 0,
331
+ clearReminders: commandOptions.clearReminders === true ? true : void 0,
332
+ clearEvents: commandOptions.clearEvents === true ? true : void 0,
333
+ clearTypeOptions: commandOptions.clearTypeOptions === true ? true : void 0
334
+ };
335
+ for (const [key, value] of Object.entries(commandOptions)) {
336
+ if (Object.hasOwn(normalized, key)) {
337
+ continue;
338
+ }
339
+ normalized[key] = value;
340
+ }
341
+ return normalized;
342
+ }
343
+ var UPDATE_MANY_CONTROL_OPTION_KEYS = /* @__PURE__ */ new Set([
344
+ "filterStatus",
345
+ "filterType",
346
+ "filterTag",
347
+ "filterPriority",
348
+ "filterDeadlineBefore",
349
+ "filterDeadlineAfter",
350
+ "filterAssignee",
351
+ "filterAssigneeFilter",
352
+ "filterAssignee_filter",
353
+ "filterParent",
354
+ "filterSprint",
355
+ "filterRelease",
356
+ "limit",
357
+ "offset",
358
+ "dryRun",
359
+ "rollback",
360
+ "checkpoint"
361
+ ]);
362
+ function extractUpdateManyMutationOptionSource(commandOptions) {
363
+ const mutationOptions = {};
364
+ for (const [key, value] of Object.entries(commandOptions)) {
365
+ if (UPDATE_MANY_CONTROL_OPTION_KEYS.has(key)) {
366
+ continue;
367
+ }
368
+ mutationOptions[key] = value;
369
+ }
370
+ return mutationOptions;
371
+ }
372
+ function readListOptionString(options, target) {
373
+ return readFirstStringFromCommanderOptions(options, LIST_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
374
+ target,
375
+ keys: [target]
376
+ });
377
+ }
378
+ function normalizeListOptions(options) {
379
+ const normalized = {
380
+ status: readListOptionString(options, "status"),
381
+ type: readListOptionString(options, "type"),
382
+ tag: readListOptionString(options, "tag"),
383
+ priority: readListOptionString(options, "priority"),
384
+ deadlineBefore: readListOptionString(options, "deadlineBefore"),
385
+ deadlineAfter: readListOptionString(options, "deadlineAfter"),
386
+ assignee: readListOptionString(options, "assignee"),
387
+ assigneeFilter: readListOptionString(options, "assigneeFilter"),
388
+ parent: readListOptionString(options, "parent"),
389
+ sprint: readListOptionString(options, "sprint"),
390
+ release: readListOptionString(options, "release"),
391
+ limit: readListOptionString(options, "limit"),
392
+ offset: readListOptionString(options, "offset"),
393
+ includeBody: options.includeBody === true ? true : void 0,
394
+ compact: options.compact === true ? true : void 0,
395
+ brief: options.brief === true ? true : void 0,
396
+ full: options.full === true ? true : void 0,
397
+ fields: readListOptionString(options, "fields"),
398
+ sort: readListOptionString(options, "sort"),
399
+ order: readListOptionString(options, "order")
400
+ };
401
+ for (const [key, value] of Object.entries(options)) {
402
+ if (Object.hasOwn(normalized, key)) {
403
+ continue;
404
+ }
405
+ normalized[key] = value;
406
+ }
407
+ return normalized;
408
+ }
409
+ function normalizeAggregateOptions(options) {
410
+ return {
411
+ groupBy: typeof options.groupBy === "string" ? options.groupBy : void 0,
412
+ count: options.count === true ? true : void 0,
413
+ includeUnparented: options.includeUnparented === true || options.include_unparented === true,
414
+ status: typeof options.status === "string" ? options.status : void 0,
415
+ type: readListOptionString(options, "type"),
416
+ tag: readListOptionString(options, "tag"),
417
+ priority: readListOptionString(options, "priority"),
418
+ deadlineBefore: readListOptionString(options, "deadlineBefore"),
419
+ deadlineAfter: readListOptionString(options, "deadlineAfter"),
420
+ assignee: readListOptionString(options, "assignee"),
421
+ assigneeFilter: readListOptionString(options, "assigneeFilter"),
422
+ parent: readListOptionString(options, "parent"),
423
+ sprint: readListOptionString(options, "sprint"),
424
+ release: readListOptionString(options, "release")
425
+ };
426
+ }
427
+ function printListJsonStream(commandName, result, globalOptions) {
428
+ setActiveCommandResult(result);
429
+ if (globalOptions.quiet) {
430
+ return;
431
+ }
432
+ const warnings = Array.isArray(result.warnings) ? result.warnings : [];
433
+ const metaPayload = {
434
+ type: "meta",
435
+ command: commandName,
436
+ count: result.count,
437
+ now: result.now,
438
+ filters: result.filters
439
+ };
440
+ if (warnings.length > 0) {
441
+ metaPayload.warnings = warnings;
442
+ }
443
+ if (!writeStdout(`${JSON.stringify(metaPayload)}
444
+ `)) {
445
+ return;
446
+ }
447
+ for (const item of result.items) {
448
+ if (!writeStdout(`${JSON.stringify({ type: "item", command: commandName, item })}
449
+ `)) {
450
+ return;
451
+ }
452
+ }
453
+ writeStdout(`${JSON.stringify({ type: "end", command: commandName, count: result.count })}
454
+ `);
455
+ }
456
+ function printActivityJsonStream(result, options, globalOptions) {
457
+ setActiveCommandResult(result);
458
+ if (globalOptions.quiet) {
459
+ return;
460
+ }
461
+ const metaPayload = {
462
+ type: "meta",
463
+ command: "activity",
464
+ count: result.count,
465
+ filters: {
466
+ id: options.id ?? null,
467
+ op: options.op ?? null,
468
+ author: options.author ?? null,
469
+ from: options.from ?? null,
470
+ to: options.to ?? null,
471
+ limit: options.limit ?? null
472
+ }
473
+ };
474
+ if (!writeStdout(`${JSON.stringify(metaPayload)}
475
+ `)) {
476
+ return;
477
+ }
478
+ const entries = result.compact && result.compact_activity ? result.compact_activity : result.activity;
479
+ for (const entry of entries) {
480
+ if (!writeStdout(`${JSON.stringify({ type: "entry", command: "activity", entry })}
481
+ `)) {
482
+ return;
483
+ }
484
+ }
485
+ writeStdout(`${JSON.stringify({ type: "end", command: "activity", count: result.count })}
486
+ `);
487
+ }
488
+ function normalizeSearchOptions(options) {
489
+ const readSearchString = (target) => readFirstStringFromCommanderOptions(options, SEARCH_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
490
+ target,
491
+ keys: [target]
492
+ });
493
+ const fields = readSearchString("fields");
494
+ const compactRequested = options.compact === true;
495
+ const fullRequested = options.full === true;
496
+ const defaultCompact = !compactRequested && !fullRequested && fields === void 0;
497
+ const mode = options.semantic === true ? "semantic" : options.hybrid === true ? "hybrid" : readSearchString("mode");
498
+ const normalized = {
499
+ mode,
500
+ includeLinked: options.includeLinked === true ? true : void 0,
501
+ titleExact: options.titleExact === true ? true : void 0,
502
+ phraseExact: options.phraseExact === true ? true : void 0,
503
+ type: readSearchString("type"),
504
+ tag: readSearchString("tag"),
505
+ priority: readSearchString("priority"),
506
+ deadlineBefore: readSearchString("deadlineBefore"),
507
+ deadlineAfter: readSearchString("deadlineAfter"),
508
+ limit: readSearchString("limit"),
509
+ fields,
510
+ compact: compactRequested || defaultCompact ? true : void 0,
511
+ full: fullRequested ? true : void 0
512
+ };
513
+ for (const [key, value] of Object.entries(options)) {
514
+ if (Object.hasOwn(normalized, key)) {
515
+ continue;
516
+ }
517
+ normalized[key] = value;
518
+ }
519
+ return normalized;
520
+ }
521
+ function normalizeSearchKeywordsInput(keywords) {
522
+ const query = keywords.map((entry) => entry.trim()).filter((entry) => entry.length > 0).join(" ");
523
+ if (query.length === 0) {
524
+ throw new PmCliError("Search query must not be empty", EXIT_CODE.USAGE);
525
+ }
526
+ return query;
527
+ }
528
+ function normalizeActivityOptions(options) {
529
+ const readActivityString = (target) => readFirstStringFromCommanderOptions(options, ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
530
+ target,
531
+ keys: [target]
532
+ });
533
+ return {
534
+ id: readActivityString("id"),
535
+ op: readActivityString("op"),
536
+ author: readActivityString("author"),
537
+ from: readActivityString("from"),
538
+ to: readActivityString("to"),
539
+ limit: readActivityString("limit"),
540
+ compact: options.full === true ? false : options.compact === false ? false : true
541
+ };
542
+ }
543
+ function resolveActivityStreamMode(raw) {
544
+ if (raw === true) {
545
+ return true;
546
+ }
547
+ if (raw === false || raw === void 0 || raw === null) {
548
+ return false;
549
+ }
550
+ if (typeof raw === "string") {
551
+ const normalized = raw.trim().toLowerCase();
552
+ if (normalized.length === 0 || normalized === "rows" || normalized === "ndjson" || normalized === "jsonl" || normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on") {
553
+ return true;
554
+ }
555
+ if (normalized === "false" || normalized === "off" || normalized === "none" || normalized === "0") {
556
+ return false;
557
+ }
558
+ }
559
+ throw new PmCliError("Activity --stream accepts rows|ndjson|jsonl (or no value)", EXIT_CODE.USAGE);
560
+ }
561
+ function normalizeContextOptions(options) {
562
+ const readContextString = (target) => readFirstStringFromCommanderOptions(options, CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS.find((entry) => entry.target === target) ?? {
563
+ target,
564
+ keys: [target]
565
+ });
566
+ const sectionRaw = options.section;
567
+ const section = Array.isArray(sectionRaw) ? sectionRaw.filter((v) => typeof v === "string" && v.trim().length > 0) : typeof sectionRaw === "string" && sectionRaw.trim().length > 0 ? [sectionRaw] : void 0;
568
+ const normalized = {
569
+ date: readContextString("date"),
570
+ from: readContextString("from"),
571
+ to: readContextString("to"),
572
+ past: options.past === true ? true : void 0,
573
+ type: readContextString("type"),
574
+ tag: readContextString("tag"),
575
+ priority: readContextString("priority"),
576
+ assignee: readContextString("assignee"),
577
+ assigneeFilter: readContextString("assigneeFilter"),
578
+ sprint: readContextString("sprint"),
579
+ release: readContextString("release"),
580
+ limit: readContextString("limit"),
581
+ format: readContextString("format"),
582
+ depth: readContextString("depth"),
583
+ section: section && section.length > 0 ? section : void 0,
584
+ activityLimit: readContextString("activityLimit"),
585
+ staleThreshold: readContextString("staleThreshold")
586
+ };
587
+ for (const [key, value] of Object.entries(options)) {
588
+ if (Object.hasOwn(normalized, key)) {
589
+ continue;
590
+ }
591
+ normalized[key] = value;
592
+ }
593
+ return normalized;
594
+ }
595
+ function collectMutationItemIds(result) {
596
+ if (!result || typeof result !== "object") {
597
+ return [];
598
+ }
599
+ const record = result;
600
+ const ids = /* @__PURE__ */ new Set();
601
+ const pushId = (value) => {
602
+ if (typeof value !== "string") {
603
+ return;
604
+ }
605
+ const normalized = value.trim();
606
+ if (normalized.length === 0) {
607
+ return;
608
+ }
609
+ ids.add(normalized);
610
+ };
611
+ pushId(record.id);
612
+ const item = record.item;
613
+ if (item && typeof item === "object") {
614
+ pushId(item.id);
615
+ }
616
+ const explicitIds = record.ids;
617
+ if (Array.isArray(explicitIds)) {
618
+ for (const candidate of explicitIds) {
619
+ pushId(candidate);
620
+ }
621
+ }
622
+ const items = record.items;
623
+ if (Array.isArray(items)) {
624
+ for (const candidate of items) {
625
+ if (!candidate || typeof candidate !== "object") {
626
+ continue;
627
+ }
628
+ pushId(candidate.id);
629
+ }
630
+ }
631
+ return [...ids].sort((left, right) => left.localeCompare(right));
632
+ }
633
+ async function invalidateSearchCachesForMutation(globalOptions, result) {
634
+ const pmRoot = resolvePmRoot(process.cwd(), globalOptions.path);
635
+ const refreshResult = await refreshSearchArtifactsForMutation(pmRoot, collectMutationItemIds(result));
636
+ if (globalOptions.profile && refreshResult.warnings.length > 0) {
637
+ printError(`profile:search_refresh_warnings=${formatHookWarnings(refreshResult.warnings)}`);
638
+ }
639
+ }
640
+
641
+ // dist/core/shared/lazy-module.js
642
+ !(function() {
643
+ try {
644
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
645
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "8a197e16-769b-582e-833f-997a66d98407");
646
+ } catch (e2) {
647
+ }
648
+ })();
649
+ function createLazyModule(importer) {
650
+ let promise = null;
651
+ return () => {
652
+ promise ??= importer();
653
+ return promise;
654
+ };
655
+ }
656
+
657
+ export {
658
+ setResolvedGlobalOptions,
659
+ clearResolvedGlobalOptions,
660
+ getGlobalOptions,
661
+ getCommandPath,
662
+ applyDefaultOutputFormat,
663
+ collect,
664
+ buildBackgroundTestCommandArgs,
665
+ buildBackgroundTestAllCommandArgs,
666
+ formatHookWarnings,
667
+ normalizeCreateOptions,
668
+ normalizeUpdateOptions,
669
+ extractUpdateManyMutationOptionSource,
670
+ normalizeListOptions,
671
+ normalizeAggregateOptions,
672
+ printListJsonStream,
673
+ printActivityJsonStream,
674
+ normalizeSearchOptions,
675
+ normalizeSearchKeywordsInput,
676
+ normalizeActivityOptions,
677
+ resolveActivityStreamMode,
678
+ normalizeContextOptions,
679
+ invalidateSearchCachesForMutation,
680
+ createLazyModule
681
+ };
682
+ //# sourceMappingURL=chunk-RJONRNXN.js.map