@unbrained/pm-cli 2026.3.9

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 (245) hide show
  1. package/.pi/extensions/pm-cli/index.ts +778 -0
  2. package/AGENTS.md +475 -0
  3. package/LICENSE +21 -0
  4. package/PRD.md +1390 -0
  5. package/README.md +655 -0
  6. package/dist/cli/commands/activity.d.ts +14 -0
  7. package/dist/cli/commands/activity.js +80 -0
  8. package/dist/cli/commands/activity.js.map +1 -0
  9. package/dist/cli/commands/append.d.ts +13 -0
  10. package/dist/cli/commands/append.js +46 -0
  11. package/dist/cli/commands/append.js.map +1 -0
  12. package/dist/cli/commands/beads.d.ts +15 -0
  13. package/dist/cli/commands/beads.js +475 -0
  14. package/dist/cli/commands/beads.js.map +1 -0
  15. package/dist/cli/commands/claim.d.ts +19 -0
  16. package/dist/cli/commands/claim.js +79 -0
  17. package/dist/cli/commands/claim.js.map +1 -0
  18. package/dist/cli/commands/close.d.ts +12 -0
  19. package/dist/cli/commands/close.js +58 -0
  20. package/dist/cli/commands/close.js.map +1 -0
  21. package/dist/cli/commands/comments.d.ts +15 -0
  22. package/dist/cli/commands/comments.js +80 -0
  23. package/dist/cli/commands/comments.js.map +1 -0
  24. package/dist/cli/commands/completion.d.ts +10 -0
  25. package/dist/cli/commands/completion.js +469 -0
  26. package/dist/cli/commands/completion.js.map +1 -0
  27. package/dist/cli/commands/config.d.ts +15 -0
  28. package/dist/cli/commands/config.js +72 -0
  29. package/dist/cli/commands/config.js.map +1 -0
  30. package/dist/cli/commands/create.d.ts +60 -0
  31. package/dist/cli/commands/create.js +456 -0
  32. package/dist/cli/commands/create.js.map +1 -0
  33. package/dist/cli/commands/delete.d.ts +12 -0
  34. package/dist/cli/commands/delete.js +33 -0
  35. package/dist/cli/commands/delete.js.map +1 -0
  36. package/dist/cli/commands/docs.d.ts +16 -0
  37. package/dist/cli/commands/docs.js +113 -0
  38. package/dist/cli/commands/docs.js.map +1 -0
  39. package/dist/cli/commands/files.d.ts +17 -0
  40. package/dist/cli/commands/files.js +113 -0
  41. package/dist/cli/commands/files.js.map +1 -0
  42. package/dist/cli/commands/gc.d.ts +9 -0
  43. package/dist/cli/commands/gc.js +80 -0
  44. package/dist/cli/commands/gc.js.map +1 -0
  45. package/dist/cli/commands/get.d.ts +12 -0
  46. package/dist/cli/commands/get.js +28 -0
  47. package/dist/cli/commands/get.js.map +1 -0
  48. package/dist/cli/commands/health.d.ts +15 -0
  49. package/dist/cli/commands/health.js +288 -0
  50. package/dist/cli/commands/health.js.map +1 -0
  51. package/dist/cli/commands/history.d.ts +13 -0
  52. package/dist/cli/commands/history.js +72 -0
  53. package/dist/cli/commands/history.js.map +1 -0
  54. package/dist/cli/commands/index.d.ts +26 -0
  55. package/dist/cli/commands/index.js +27 -0
  56. package/dist/cli/commands/index.js.map +1 -0
  57. package/dist/cli/commands/init.d.ts +10 -0
  58. package/dist/cli/commands/init.js +59 -0
  59. package/dist/cli/commands/init.js.map +1 -0
  60. package/dist/cli/commands/install.d.ts +18 -0
  61. package/dist/cli/commands/install.js +87 -0
  62. package/dist/cli/commands/install.js.map +1 -0
  63. package/dist/cli/commands/list.d.ts +21 -0
  64. package/dist/cli/commands/list.js +137 -0
  65. package/dist/cli/commands/list.js.map +1 -0
  66. package/dist/cli/commands/reindex.d.ts +16 -0
  67. package/dist/cli/commands/reindex.js +154 -0
  68. package/dist/cli/commands/reindex.js.map +1 -0
  69. package/dist/cli/commands/restore.d.ts +20 -0
  70. package/dist/cli/commands/restore.js +208 -0
  71. package/dist/cli/commands/restore.js.map +1 -0
  72. package/dist/cli/commands/search.d.ts +45 -0
  73. package/dist/cli/commands/search.js +531 -0
  74. package/dist/cli/commands/search.js.map +1 -0
  75. package/dist/cli/commands/stats.d.ts +13 -0
  76. package/dist/cli/commands/stats.js +88 -0
  77. package/dist/cli/commands/stats.js.map +1 -0
  78. package/dist/cli/commands/test-all.d.ts +30 -0
  79. package/dist/cli/commands/test-all.js +157 -0
  80. package/dist/cli/commands/test-all.js.map +1 -0
  81. package/dist/cli/commands/test.d.ts +29 -0
  82. package/dist/cli/commands/test.js +492 -0
  83. package/dist/cli/commands/test.js.map +1 -0
  84. package/dist/cli/commands/update.d.ts +52 -0
  85. package/dist/cli/commands/update.js +467 -0
  86. package/dist/cli/commands/update.js.map +1 -0
  87. package/dist/cli/extension-command-options.d.ts +1 -0
  88. package/dist/cli/extension-command-options.js +76 -0
  89. package/dist/cli/extension-command-options.js.map +1 -0
  90. package/dist/cli/main.d.ts +2 -0
  91. package/dist/cli/main.js +1494 -0
  92. package/dist/cli/main.js.map +1 -0
  93. package/dist/cli.d.ts +2 -0
  94. package/dist/cli.js +3 -0
  95. package/dist/cli.js.map +1 -0
  96. package/dist/command-types.d.ts +1 -0
  97. package/dist/command-types.js +2 -0
  98. package/dist/command-types.js.map +1 -0
  99. package/dist/constants.d.ts +1 -0
  100. package/dist/constants.js +2 -0
  101. package/dist/constants.js.map +1 -0
  102. package/dist/core/extensions/builtins.d.ts +3 -0
  103. package/dist/core/extensions/builtins.js +47 -0
  104. package/dist/core/extensions/builtins.js.map +1 -0
  105. package/dist/core/extensions/index.d.ts +13 -0
  106. package/dist/core/extensions/index.js +88 -0
  107. package/dist/core/extensions/index.js.map +1 -0
  108. package/dist/core/extensions/loader.d.ts +301 -0
  109. package/dist/core/extensions/loader.js +917 -0
  110. package/dist/core/extensions/loader.js.map +1 -0
  111. package/dist/core/fs/fs-utils.d.ts +6 -0
  112. package/dist/core/fs/fs-utils.js +58 -0
  113. package/dist/core/fs/fs-utils.js.map +1 -0
  114. package/dist/core/fs/index.d.ts +1 -0
  115. package/dist/core/fs/index.js +2 -0
  116. package/dist/core/fs/index.js.map +1 -0
  117. package/dist/core/history/history.d.ts +12 -0
  118. package/dist/core/history/history.js +44 -0
  119. package/dist/core/history/history.js.map +1 -0
  120. package/dist/core/history/index.d.ts +1 -0
  121. package/dist/core/history/index.js +2 -0
  122. package/dist/core/history/index.js.map +1 -0
  123. package/dist/core/item/id.d.ts +3 -0
  124. package/dist/core/item/id.js +54 -0
  125. package/dist/core/item/id.js.map +1 -0
  126. package/dist/core/item/index.d.ts +3 -0
  127. package/dist/core/item/index.js +4 -0
  128. package/dist/core/item/index.js.map +1 -0
  129. package/dist/core/item/item-format.d.ts +9 -0
  130. package/dist/core/item/item-format.js +363 -0
  131. package/dist/core/item/item-format.js.map +1 -0
  132. package/dist/core/item/parse.d.ts +3 -0
  133. package/dist/core/item/parse.js +72 -0
  134. package/dist/core/item/parse.js.map +1 -0
  135. package/dist/core/lock/index.d.ts +1 -0
  136. package/dist/core/lock/index.js +2 -0
  137. package/dist/core/lock/index.js.map +1 -0
  138. package/dist/core/lock/lock.d.ts +1 -0
  139. package/dist/core/lock/lock.js +100 -0
  140. package/dist/core/lock/lock.js.map +1 -0
  141. package/dist/core/output/output.d.ts +7 -0
  142. package/dist/core/output/output.js +79 -0
  143. package/dist/core/output/output.js.map +1 -0
  144. package/dist/core/search/cache.d.ts +17 -0
  145. package/dist/core/search/cache.js +212 -0
  146. package/dist/core/search/cache.js.map +1 -0
  147. package/dist/core/search/embedding-batches.d.ts +7 -0
  148. package/dist/core/search/embedding-batches.js +54 -0
  149. package/dist/core/search/embedding-batches.js.map +1 -0
  150. package/dist/core/search/providers.d.ts +59 -0
  151. package/dist/core/search/providers.js +265 -0
  152. package/dist/core/search/providers.js.map +1 -0
  153. package/dist/core/search/vector-stores.d.ts +89 -0
  154. package/dist/core/search/vector-stores.js +546 -0
  155. package/dist/core/search/vector-stores.js.map +1 -0
  156. package/dist/core/shared/command-types.d.ts +7 -0
  157. package/dist/core/shared/command-types.js +2 -0
  158. package/dist/core/shared/command-types.js.map +1 -0
  159. package/dist/core/shared/constants.d.ts +19 -0
  160. package/dist/core/shared/constants.js +134 -0
  161. package/dist/core/shared/constants.js.map +1 -0
  162. package/dist/core/shared/errors.d.ts +4 -0
  163. package/dist/core/shared/errors.js +9 -0
  164. package/dist/core/shared/errors.js.map +1 -0
  165. package/dist/core/shared/index.d.ts +3 -0
  166. package/dist/core/shared/index.js +4 -0
  167. package/dist/core/shared/index.js.map +1 -0
  168. package/dist/core/shared/serialization.d.ts +3 -0
  169. package/dist/core/shared/serialization.js +70 -0
  170. package/dist/core/shared/serialization.js.map +1 -0
  171. package/dist/core/shared/time.d.ts +3 -0
  172. package/dist/core/shared/time.js +28 -0
  173. package/dist/core/shared/time.js.map +1 -0
  174. package/dist/core/store/index.d.ts +3 -0
  175. package/dist/core/store/index.js +4 -0
  176. package/dist/core/store/index.js.map +1 -0
  177. package/dist/core/store/item-store.d.ts +42 -0
  178. package/dist/core/store/item-store.js +186 -0
  179. package/dist/core/store/item-store.js.map +1 -0
  180. package/dist/core/store/paths.d.ts +8 -0
  181. package/dist/core/store/paths.js +29 -0
  182. package/dist/core/store/paths.js.map +1 -0
  183. package/dist/core/store/settings.d.ts +4 -0
  184. package/dist/core/store/settings.js +148 -0
  185. package/dist/core/store/settings.js.map +1 -0
  186. package/dist/errors.d.ts +1 -0
  187. package/dist/errors.js +2 -0
  188. package/dist/errors.js.map +1 -0
  189. package/dist/extensions/builtins/beads/index.d.ts +8 -0
  190. package/dist/extensions/builtins/beads/index.js +29 -0
  191. package/dist/extensions/builtins/beads/index.js.map +1 -0
  192. package/dist/extensions/builtins/todos/import-export.d.ts +26 -0
  193. package/dist/extensions/builtins/todos/import-export.js +460 -0
  194. package/dist/extensions/builtins/todos/import-export.js.map +1 -0
  195. package/dist/extensions/builtins/todos/index.d.ts +8 -0
  196. package/dist/extensions/builtins/todos/index.js +38 -0
  197. package/dist/extensions/builtins/todos/index.js.map +1 -0
  198. package/dist/fs-utils.d.ts +1 -0
  199. package/dist/fs-utils.js +2 -0
  200. package/dist/fs-utils.js.map +1 -0
  201. package/dist/history.d.ts +1 -0
  202. package/dist/history.js +2 -0
  203. package/dist/history.js.map +1 -0
  204. package/dist/id.d.ts +1 -0
  205. package/dist/id.js +2 -0
  206. package/dist/id.js.map +1 -0
  207. package/dist/item-format.d.ts +1 -0
  208. package/dist/item-format.js +2 -0
  209. package/dist/item-format.js.map +1 -0
  210. package/dist/item-store.d.ts +1 -0
  211. package/dist/item-store.js +2 -0
  212. package/dist/item-store.js.map +1 -0
  213. package/dist/lock.d.ts +1 -0
  214. package/dist/lock.js +2 -0
  215. package/dist/lock.js.map +1 -0
  216. package/dist/output.d.ts +1 -0
  217. package/dist/output.js +2 -0
  218. package/dist/output.js.map +1 -0
  219. package/dist/parse.d.ts +1 -0
  220. package/dist/parse.js +2 -0
  221. package/dist/parse.js.map +1 -0
  222. package/dist/paths.d.ts +1 -0
  223. package/dist/paths.js +2 -0
  224. package/dist/paths.js.map +1 -0
  225. package/dist/serialization.d.ts +1 -0
  226. package/dist/serialization.js +2 -0
  227. package/dist/serialization.js.map +1 -0
  228. package/dist/settings.d.ts +1 -0
  229. package/dist/settings.js +2 -0
  230. package/dist/settings.js.map +1 -0
  231. package/dist/time.d.ts +1 -0
  232. package/dist/time.js +2 -0
  233. package/dist/time.js.map +1 -0
  234. package/dist/types/index.d.ts +1 -0
  235. package/dist/types/index.js +2 -0
  236. package/dist/types/index.js.map +1 -0
  237. package/dist/types.d.ts +179 -0
  238. package/dist/types.js +21 -0
  239. package/dist/types.js.map +1 -0
  240. package/docs/ARCHITECTURE.md +246 -0
  241. package/docs/EXTENSIONS.md +329 -0
  242. package/docs/RELEASING.md +65 -0
  243. package/package.json +79 -0
  244. package/scripts/install.ps1 +112 -0
  245. package/scripts/install.sh +113 -0
@@ -0,0 +1,456 @@
1
+ import { pathExists, removeFileIfExists, writeFileAtomic } from "../../core/fs/fs-utils.js";
2
+ import { appendHistoryEntry, createHistoryEntry } from "../../core/history/history.js";
3
+ import { generateItemId, normalizeItemId } from "../../core/item/id.js";
4
+ import { canonicalDocument, normalizeFrontMatter, serializeItemDocument } from "../../core/item/item-format.js";
5
+ import { parseCsvKv, parseOptionalNumber, parseTags } from "../../core/item/parse.js";
6
+ import { acquireLock } from "../../core/lock/lock.js";
7
+ import { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from "../../core/shared/constants.js";
8
+ import { PmCliError } from "../../core/shared/errors.js";
9
+ import { isNoneToken, nowIso, resolveIsoOrRelative } from "../../core/shared/time.js";
10
+ import { runActiveOnWriteHooks } from "../../core/extensions/index.js";
11
+ import { getHistoryPath, getItemPath, getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
12
+ import { readSettings } from "../../core/store/settings.js";
13
+ import { CONFIDENCE_TEXT_VALUES, DEPENDENCY_KIND_VALUES, ISSUE_SEVERITY_VALUES, ITEM_TYPE_VALUES, RISK_VALUES, SCOPE_VALUES, STATUS_VALUES, } from "../../types/index.js";
14
+ function ensureEnumValue(value, allowed, label) {
15
+ if (!allowed.includes(value)) {
16
+ throw new PmCliError(`Invalid ${label} value "${value}". Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE);
17
+ }
18
+ return value;
19
+ }
20
+ function normalizeRiskInput(value) {
21
+ const trimmed = value.trim();
22
+ return trimmed.toLowerCase() === "med" ? "medium" : trimmed;
23
+ }
24
+ function normalizeSeverityInput(value) {
25
+ const trimmed = value.trim();
26
+ return trimmed.toLowerCase() === "med" ? "medium" : trimmed;
27
+ }
28
+ function parseConfidenceInput(value) {
29
+ const trimmed = value.trim().toLowerCase();
30
+ if (trimmed === "med") {
31
+ return "medium";
32
+ }
33
+ if (CONFIDENCE_TEXT_VALUES.includes(trimmed)) {
34
+ return trimmed;
35
+ }
36
+ const parsed = parseOptionalNumber(value, "confidence");
37
+ if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {
38
+ throw new PmCliError("Confidence must be an integer 0..100 or one of low|med|medium|high", EXIT_CODE.USAGE);
39
+ }
40
+ return parsed;
41
+ }
42
+ function parseRegressionInput(value) {
43
+ const normalized = value.trim().toLowerCase();
44
+ if (normalized === "true" || normalized === "1") {
45
+ return true;
46
+ }
47
+ if (normalized === "false" || normalized === "0") {
48
+ return false;
49
+ }
50
+ throw new PmCliError("Regression must be one of true|false|1|0", EXIT_CODE.USAGE);
51
+ }
52
+ function parseCreatedAt(value, currentIso) {
53
+ if (!value || value.trim() === "" || value.trim().toLowerCase() === "now") {
54
+ return currentIso;
55
+ }
56
+ const parsed = Date.parse(value);
57
+ if (!Number.isFinite(parsed)) {
58
+ throw new PmCliError(`Invalid created_at timestamp "${value}"`, EXIT_CODE.USAGE);
59
+ }
60
+ return new Date(parsed).toISOString();
61
+ }
62
+ function parseOptionalString(value) {
63
+ if (value === undefined)
64
+ return undefined;
65
+ if (isNoneToken(value))
66
+ return undefined;
67
+ return value;
68
+ }
69
+ function parseDependencies(raw, nowValue, prefix) {
70
+ if (!raw || raw.length === 0)
71
+ return { values: undefined, explicitEmpty: false };
72
+ if (raw.some((entry) => isNoneToken(entry))) {
73
+ if (raw.length > 1) {
74
+ throw new PmCliError("--dep cannot mix 'none' with dependency values", EXIT_CODE.USAGE);
75
+ }
76
+ return { values: undefined, explicitEmpty: true };
77
+ }
78
+ const values = raw.map((entry) => {
79
+ const kv = parseCsvKv(entry, "--dep");
80
+ const id = kv.id;
81
+ const kind = kv.kind;
82
+ if (!id || !kind) {
83
+ throw new PmCliError("--dep requires id and kind", EXIT_CODE.USAGE);
84
+ }
85
+ return {
86
+ id: normalizeItemId(id, prefix),
87
+ kind: ensureEnumValue(kind, DEPENDENCY_KIND_VALUES, "dependency kind"),
88
+ created_at: parseCreatedAt(kv.created_at, nowValue),
89
+ author: parseOptionalString(kv.author),
90
+ };
91
+ });
92
+ return { values, explicitEmpty: false };
93
+ }
94
+ function parseLogSeed(optionName, raw, nowValue, fallbackAuthor) {
95
+ if (!raw || raw.length === 0)
96
+ return { values: undefined, explicitEmpty: false };
97
+ if (raw.some((entry) => isNoneToken(entry))) {
98
+ if (raw.length > 1) {
99
+ throw new PmCliError(`${optionName} cannot mix 'none' with seed values`, EXIT_CODE.USAGE);
100
+ }
101
+ return { values: undefined, explicitEmpty: true };
102
+ }
103
+ const values = raw.map((entry) => {
104
+ const kv = parseCsvKv(entry, optionName);
105
+ const text = kv.text ?? "";
106
+ if (text === "") {
107
+ throw new PmCliError(`${optionName} requires text=<value>`, EXIT_CODE.USAGE);
108
+ }
109
+ return {
110
+ created_at: parseCreatedAt(kv.created_at, nowValue),
111
+ author: parseOptionalString(kv.author) ?? fallbackAuthor,
112
+ text,
113
+ };
114
+ });
115
+ return { values, explicitEmpty: false };
116
+ }
117
+ function parseFiles(raw) {
118
+ if (!raw || raw.length === 0)
119
+ return { values: undefined, explicitEmpty: false };
120
+ if (raw.some((entry) => isNoneToken(entry))) {
121
+ if (raw.length > 1) {
122
+ throw new PmCliError("--file cannot mix 'none' with file values", EXIT_CODE.USAGE);
123
+ }
124
+ return { values: undefined, explicitEmpty: true };
125
+ }
126
+ const values = raw.map((entry) => {
127
+ const kv = parseCsvKv(entry, "--file");
128
+ if (!kv.path) {
129
+ throw new PmCliError("--file requires path=<value>", EXIT_CODE.USAGE);
130
+ }
131
+ return {
132
+ path: kv.path,
133
+ scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "file scope"),
134
+ note: parseOptionalString(kv.note),
135
+ };
136
+ });
137
+ return { values, explicitEmpty: false };
138
+ }
139
+ function parseTests(raw) {
140
+ if (!raw || raw.length === 0)
141
+ return { values: undefined, explicitEmpty: false };
142
+ if (raw.some((entry) => isNoneToken(entry))) {
143
+ if (raw.length > 1) {
144
+ throw new PmCliError("--test cannot mix 'none' with test values", EXIT_CODE.USAGE);
145
+ }
146
+ return { values: undefined, explicitEmpty: true };
147
+ }
148
+ const values = raw.map((entry) => {
149
+ const kv = parseCsvKv(entry, "--test");
150
+ const command = parseOptionalString(kv.command);
151
+ const filePath = parseOptionalString(kv.path);
152
+ if (!command && !filePath) {
153
+ throw new PmCliError("--test requires command=<value> and/or path=<value>", EXIT_CODE.USAGE);
154
+ }
155
+ const timeoutSecondsRaw = parseOptionalString(kv.timeout_seconds);
156
+ const timeoutAliasRaw = parseOptionalString(kv.timeout);
157
+ if (timeoutSecondsRaw && timeoutAliasRaw && timeoutSecondsRaw !== timeoutAliasRaw) {
158
+ throw new PmCliError("--test timeout and timeout_seconds must match when both are provided", EXIT_CODE.USAGE);
159
+ }
160
+ const timeoutRaw = timeoutSecondsRaw ?? timeoutAliasRaw;
161
+ return {
162
+ command,
163
+ path: filePath,
164
+ scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "test scope"),
165
+ timeout_seconds: timeoutRaw ? parseOptionalNumber(timeoutRaw, "timeout_seconds") : undefined,
166
+ note: parseOptionalString(kv.note),
167
+ };
168
+ });
169
+ return { values, explicitEmpty: false };
170
+ }
171
+ function parseDocs(raw) {
172
+ if (!raw || raw.length === 0)
173
+ return { values: undefined, explicitEmpty: false };
174
+ if (raw.some((entry) => isNoneToken(entry))) {
175
+ if (raw.length > 1) {
176
+ throw new PmCliError("--doc cannot mix 'none' with doc values", EXIT_CODE.USAGE);
177
+ }
178
+ return { values: undefined, explicitEmpty: true };
179
+ }
180
+ const values = raw.map((entry) => {
181
+ const kv = parseCsvKv(entry, "--doc");
182
+ if (!kv.path) {
183
+ throw new PmCliError("--doc requires path=<value>", EXIT_CODE.USAGE);
184
+ }
185
+ return {
186
+ path: kv.path,
187
+ scope: ensureEnumValue(kv.scope ?? "project", SCOPE_VALUES, "doc scope"),
188
+ note: parseOptionalString(kv.note),
189
+ };
190
+ });
191
+ return { values, explicitEmpty: false };
192
+ }
193
+ function buildChangedFields(frontMatter, explicitUnsets) {
194
+ const changed = [
195
+ ...FRONT_MATTER_KEY_ORDER.filter((key) => frontMatter[key] !== undefined),
196
+ "body",
197
+ ...explicitUnsets.map((key) => `unset:${key}`),
198
+ ];
199
+ return Array.from(new Set(changed));
200
+ }
201
+ function buildHistoryMessage(baseMessage, explicitUnsets) {
202
+ const trimmed = baseMessage ?? "";
203
+ if (explicitUnsets.length === 0) {
204
+ return trimmed;
205
+ }
206
+ const suffix = `explicit_unset=${explicitUnsets.join(",")}`;
207
+ return trimmed ? `${trimmed} | ${suffix}` : suffix;
208
+ }
209
+ function selectAuthor(explicitAuthor, settingsAuthor) {
210
+ const candidate = parseOptionalString(explicitAuthor) ?? process.env.PM_AUTHOR ?? settingsAuthor;
211
+ const trimmed = candidate.trim();
212
+ return trimmed || "unknown";
213
+ }
214
+ function ensurePriority(rawPriority) {
215
+ const parsed = parseOptionalNumber(rawPriority, "priority");
216
+ if (![0, 1, 2, 3, 4].includes(parsed)) {
217
+ throw new PmCliError("Priority must be one of 0, 1, 2, 3, or 4", EXIT_CODE.USAGE);
218
+ }
219
+ return parsed;
220
+ }
221
+ function ensureInitHasRun(pmRoot) {
222
+ return pathExists(getSettingsPath(pmRoot)).then((exists) => {
223
+ if (!exists) {
224
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
225
+ }
226
+ });
227
+ }
228
+ export async function runCreate(options, global) {
229
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
230
+ await ensureInitHasRun(pmRoot);
231
+ const settings = await readSettings(pmRoot);
232
+ const nowValue = nowIso();
233
+ const author = selectAuthor(options.author, settings.author_default);
234
+ const explicitUnsets = [];
235
+ const dependencies = parseDependencies(options.dep, nowValue, settings.id_prefix);
236
+ if (dependencies.explicitEmpty)
237
+ explicitUnsets.push("dependencies");
238
+ const comments = parseLogSeed("--comment", options.comment, nowValue, author);
239
+ if (comments.explicitEmpty)
240
+ explicitUnsets.push("comments");
241
+ const notes = parseLogSeed("--note", options.note, nowValue, author);
242
+ if (notes.explicitEmpty)
243
+ explicitUnsets.push("notes");
244
+ const learnings = parseLogSeed("--learning", options.learning, nowValue, author);
245
+ if (learnings.explicitEmpty)
246
+ explicitUnsets.push("learnings");
247
+ const files = parseFiles(options.file);
248
+ if (files.explicitEmpty)
249
+ explicitUnsets.push("files");
250
+ const tests = parseTests(options.test);
251
+ if (tests.explicitEmpty)
252
+ explicitUnsets.push("tests");
253
+ const docs = parseDocs(options.doc);
254
+ if (docs.explicitEmpty)
255
+ explicitUnsets.push("docs");
256
+ const scalarExplicitUnsetCandidates = [
257
+ [options.deadline, "deadline"],
258
+ [options.estimatedMinutes, "estimated_minutes"],
259
+ [options.acceptanceCriteria, "acceptance_criteria"],
260
+ [options.definitionOfReady, "definition_of_ready"],
261
+ [options.order, "order"],
262
+ [options.rank, "order"],
263
+ [options.goal, "goal"],
264
+ [options.objective, "objective"],
265
+ [options.value, "value"],
266
+ [options.impact, "impact"],
267
+ [options.outcome, "outcome"],
268
+ [options.whyNow, "why_now"],
269
+ [options.assignee, "assignee"],
270
+ [options.author, "author"],
271
+ [options.parent, "parent"],
272
+ [options.reviewer, "reviewer"],
273
+ [options.risk, "risk"],
274
+ [options.confidence, "confidence"],
275
+ [options.sprint, "sprint"],
276
+ [options.release, "release"],
277
+ [options.blockedBy, "blocked_by"],
278
+ [options.blockedReason, "blocked_reason"],
279
+ [options.unblockNote, "unblock_note"],
280
+ [options.reporter, "reporter"],
281
+ [options.severity, "severity"],
282
+ [options.environment, "environment"],
283
+ [options.reproSteps, "repro_steps"],
284
+ [options.resolution, "resolution"],
285
+ [options.expectedResult, "expected_result"],
286
+ [options.actualResult, "actual_result"],
287
+ [options.affectedVersion, "affected_version"],
288
+ [options.fixedVersion, "fixed_version"],
289
+ [options.component, "component"],
290
+ [options.regression, "regression"],
291
+ [options.customerImpact, "customer_impact"],
292
+ ];
293
+ for (const [value, key] of scalarExplicitUnsetCandidates) {
294
+ if (isNoneToken(value)) {
295
+ explicitUnsets.push(key);
296
+ }
297
+ }
298
+ const id = await generateItemId(pmRoot, settings.id_prefix);
299
+ const type = ensureEnumValue(options.type, ITEM_TYPE_VALUES, "type");
300
+ const status = ensureEnumValue(options.status, STATUS_VALUES, "status");
301
+ const priority = ensurePriority(options.priority);
302
+ const tags = parseTags(options.tags);
303
+ const deadline = isNoneToken(options.deadline) ? undefined : resolveIsoOrRelative(options.deadline, new Date(nowValue));
304
+ const estimatedMinutes = isNoneToken(options.estimatedMinutes)
305
+ ? undefined
306
+ : parseOptionalNumber(options.estimatedMinutes, "estimated-minutes");
307
+ const acceptanceCriteria = isNoneToken(options.acceptanceCriteria) ? undefined : options.acceptanceCriteria;
308
+ const definitionOfReady = options.definitionOfReady !== undefined ? parseOptionalString(options.definitionOfReady) : undefined;
309
+ if (options.order !== undefined && options.rank !== undefined && options.order !== options.rank) {
310
+ throw new PmCliError("--order and --rank must match when both are provided", EXIT_CODE.USAGE);
311
+ }
312
+ const orderRaw = options.order ?? options.rank;
313
+ const order = orderRaw === undefined || isNoneToken(orderRaw) ? undefined : parseOptionalNumber(orderRaw, "order");
314
+ if (order !== undefined && !Number.isInteger(order)) {
315
+ throw new PmCliError("Order must be an integer", EXIT_CODE.USAGE);
316
+ }
317
+ const goal = options.goal !== undefined ? parseOptionalString(options.goal) : undefined;
318
+ const objective = options.objective !== undefined ? parseOptionalString(options.objective) : undefined;
319
+ const value = options.value !== undefined ? parseOptionalString(options.value) : undefined;
320
+ const impact = options.impact !== undefined ? parseOptionalString(options.impact) : undefined;
321
+ const outcome = options.outcome !== undefined ? parseOptionalString(options.outcome) : undefined;
322
+ const whyNow = options.whyNow !== undefined ? parseOptionalString(options.whyNow) : undefined;
323
+ const assignee = parseOptionalString(options.assignee);
324
+ const authorValue = parseOptionalString(options.author) ?? author;
325
+ const parent = options.parent !== undefined ? parseOptionalString(options.parent) : undefined;
326
+ const reviewer = options.reviewer !== undefined ? parseOptionalString(options.reviewer) : undefined;
327
+ const riskRaw = options.risk !== undefined ? parseOptionalString(options.risk) : undefined;
328
+ const risk = riskRaw !== undefined ? ensureEnumValue(normalizeRiskInput(riskRaw), RISK_VALUES, "risk") : undefined;
329
+ const confidenceRaw = options.confidence !== undefined ? parseOptionalString(options.confidence) : undefined;
330
+ const confidence = confidenceRaw !== undefined ? parseConfidenceInput(confidenceRaw) : undefined;
331
+ const sprint = options.sprint !== undefined ? parseOptionalString(options.sprint) : undefined;
332
+ const release = options.release !== undefined ? parseOptionalString(options.release) : undefined;
333
+ const blockedBy = options.blockedBy !== undefined ? parseOptionalString(options.blockedBy) : undefined;
334
+ const blockedReason = options.blockedReason !== undefined ? parseOptionalString(options.blockedReason) : undefined;
335
+ const unblockNote = options.unblockNote !== undefined ? parseOptionalString(options.unblockNote) : undefined;
336
+ const reporter = options.reporter !== undefined ? parseOptionalString(options.reporter) : undefined;
337
+ const severityRaw = options.severity !== undefined ? parseOptionalString(options.severity) : undefined;
338
+ const severity = severityRaw !== undefined ? ensureEnumValue(normalizeSeverityInput(severityRaw), ISSUE_SEVERITY_VALUES, "severity") : undefined;
339
+ const environment = options.environment !== undefined ? parseOptionalString(options.environment) : undefined;
340
+ const reproSteps = options.reproSteps !== undefined ? parseOptionalString(options.reproSteps) : undefined;
341
+ const resolution = options.resolution !== undefined ? parseOptionalString(options.resolution) : undefined;
342
+ const expectedResult = options.expectedResult !== undefined ? parseOptionalString(options.expectedResult) : undefined;
343
+ const actualResult = options.actualResult !== undefined ? parseOptionalString(options.actualResult) : undefined;
344
+ const affectedVersion = options.affectedVersion !== undefined ? parseOptionalString(options.affectedVersion) : undefined;
345
+ const fixedVersion = options.fixedVersion !== undefined ? parseOptionalString(options.fixedVersion) : undefined;
346
+ const component = options.component !== undefined ? parseOptionalString(options.component) : undefined;
347
+ const regressionRaw = options.regression !== undefined ? parseOptionalString(options.regression) : undefined;
348
+ const regression = regressionRaw !== undefined ? parseRegressionInput(regressionRaw) : undefined;
349
+ const customerImpact = options.customerImpact !== undefined ? parseOptionalString(options.customerImpact) : undefined;
350
+ const frontMatter = normalizeFrontMatter({
351
+ id,
352
+ title: options.title,
353
+ description: options.description,
354
+ type,
355
+ status,
356
+ priority,
357
+ tags,
358
+ created_at: nowValue,
359
+ updated_at: nowValue,
360
+ deadline,
361
+ assignee,
362
+ author: authorValue,
363
+ estimated_minutes: estimatedMinutes,
364
+ acceptance_criteria: acceptanceCriteria,
365
+ definition_of_ready: definitionOfReady,
366
+ order,
367
+ goal,
368
+ objective,
369
+ value,
370
+ impact,
371
+ outcome,
372
+ why_now: whyNow,
373
+ parent,
374
+ reviewer,
375
+ risk,
376
+ confidence,
377
+ sprint,
378
+ release,
379
+ blocked_by: blockedBy,
380
+ blocked_reason: blockedReason,
381
+ unblock_note: unblockNote,
382
+ reporter,
383
+ severity,
384
+ environment,
385
+ repro_steps: reproSteps,
386
+ resolution,
387
+ expected_result: expectedResult,
388
+ actual_result: actualResult,
389
+ affected_version: affectedVersion,
390
+ fixed_version: fixedVersion,
391
+ component,
392
+ regression,
393
+ customer_impact: customerImpact,
394
+ dependencies: dependencies.values,
395
+ comments: comments.values,
396
+ notes: notes.values,
397
+ learnings: learnings.values,
398
+ files: files.values,
399
+ tests: tests.values,
400
+ docs: docs.values,
401
+ });
402
+ const afterDocument = canonicalDocument({
403
+ front_matter: frontMatter,
404
+ body: options.body,
405
+ });
406
+ const beforeDocument = {
407
+ front_matter: {},
408
+ body: "",
409
+ };
410
+ const itemPath = getItemPath(pmRoot, type, id);
411
+ const historyPath = getHistoryPath(pmRoot, id);
412
+ const lockRelease = await acquireLock(pmRoot, id, settings.locks.ttl_seconds, author);
413
+ const historyMessage = buildHistoryMessage(options.message, explicitUnsets);
414
+ let hookWarnings = [];
415
+ try {
416
+ await writeFileAtomic(itemPath, serializeItemDocument(afterDocument));
417
+ try {
418
+ const entry = createHistoryEntry({
419
+ nowIso: nowValue,
420
+ author,
421
+ op: "create",
422
+ before: beforeDocument,
423
+ after: afterDocument,
424
+ message: historyMessage,
425
+ });
426
+ await appendHistoryEntry(historyPath, entry);
427
+ }
428
+ catch (error) {
429
+ await removeFileIfExists(itemPath);
430
+ throw error;
431
+ }
432
+ hookWarnings = [
433
+ ...(await runActiveOnWriteHooks({
434
+ path: itemPath,
435
+ scope: "project",
436
+ op: "create",
437
+ })),
438
+ ...(await runActiveOnWriteHooks({
439
+ path: historyPath,
440
+ scope: "project",
441
+ op: "create:history",
442
+ })),
443
+ ];
444
+ }
445
+ finally {
446
+ await lockRelease();
447
+ }
448
+ const changedFields = buildChangedFields(frontMatter, explicitUnsets);
449
+ const outputItem = structuredClone(frontMatter);
450
+ return {
451
+ item: outputItem,
452
+ changed_fields: changedFields,
453
+ warnings: hookWarnings,
454
+ };
455
+ }
456
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAW5D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,sBAAsB,CAAC;AA6D9B,SAAS,eAAe,CAAmB,KAAa,EAAE,OAAqB,EAAE,KAAa;IAC5F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,UAAU,CAClB,WAAW,KAAK,WAAW,KAAK,eAAe,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACnE,SAAS,CAAC,KAAK,CAChB,CAAC;IACJ,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAkD,CAAC,EAAE,CAAC;QACxF,OAAO,OAAkD,CAAC;IAC5D,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,oEAAoE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,UAAU,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB,EAAE,UAAkB;IACnE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1E,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,iCAAiC,KAAK,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAyB,EACzB,QAAgB,EAChB,MAAc;IAEd,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,gDAAgD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,OAAO;YACL,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC;YAC/B,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;YACtE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;YACnD,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CACnB,UAAiD,EACjD,GAAyB,EACzB,QAAgB,EAChB,cAAsB;IAEtB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,GAAG,UAAU,qCAAqC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAAC,GAAG,UAAU,wBAAwB,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO;YACL,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;YACnD,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,cAAc;YACxD,IAAI;SACL,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,GAAyB;IAC3C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,2CAA2C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAAC,8BAA8B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC;YACzE,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,GAAyB;IAC3C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,2CAA2C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CAAC,qDAAqD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,iBAAiB,IAAI,eAAe,IAAI,iBAAiB,KAAK,eAAe,EAAE,CAAC;YAClF,MAAM,IAAI,UAAU,CAAC,sEAAsE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAChH,CAAC;QACD,MAAM,UAAU,GAAG,iBAAiB,IAAI,eAAe,CAAC;QACxD,OAAO;YACL,OAAO;YACP,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC;YACzE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5F,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,GAAyB;IAC1C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,yCAAyC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAAC,6BAA6B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC;YACxE,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,WAA4B,EAAE,cAAwB;IAChF,MAAM,OAAO,GAAG;QACd,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;QACzE,MAAM;QACN,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;KAC/C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,WAA+B,EAAE,cAAwB;IACpF,MAAM,OAAO,GAAG,WAAW,IAAI,EAAE,CAAC;IAClC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5D,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,cAAkC,EAAE,cAAsB;IAC9E,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,cAAc,CAAC;IACjG,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB;IACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,UAAU,CAAC,0CAA0C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,MAA2B,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,UAAU,CAAC,iCAAiC,MAAM,sBAAsB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA6B,EAAE,MAAqB;IAClF,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClF,IAAI,YAAY,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjF,IAAI,SAAS,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,aAAa;QAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,6BAA6B,GAAyD;QAC1F,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;QAC/C,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;QACnD,CAAC,OAAO,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;QAClD,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;QAChC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1B,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAC5B,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;QAC3B,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1B,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1B,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;QAClC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1B,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAC5B,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;QACjC,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC;QACzC,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC;QACrC,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC9B,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC;QACpC,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC;QACnC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;QAClC,CAAC,OAAO,CAAC,cAAc,EAAE,iBAAiB,CAAC;QAC3C,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC;QACvC,CAAC,OAAO,CAAC,eAAe,EAAE,kBAAkB,CAAC;QAC7C,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC;QACvC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;QAChC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;QAClC,CAAC,OAAO,CAAC,cAAc,EAAE,iBAAiB,CAAC;KAC5C,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,6BAA6B,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxH,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC5D,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAC5G,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/H,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;QAChG,MAAM,IAAI,UAAU,CAAC,sDAAsD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/C,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnH,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,0BAA0B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,UAAU,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,QAAQ,GACZ,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClI,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzH,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,UAAU,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtH,MAAM,WAAW,GAAoB,oBAAoB,CAAC;QACxD,EAAE;QACF,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ;QACpB,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,WAAW;QACnB,iBAAiB,EAAE,gBAAgB;QACnC,mBAAmB,EAAE,kBAAkB;QACvC,mBAAmB,EAAE,iBAAiB;QACtC,KAAK;QACL,IAAI;QACJ,SAAS;QACT,KAAK;QACL,MAAM;QACN,OAAO;QACP,OAAO,EAAE,MAAM;QACf,MAAM;QACN,QAAQ;QACR,IAAI;QACJ,UAAU;QACV,MAAM;QACN,OAAO;QACP,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,WAAW;QACzB,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,WAAW,EAAE,UAAU;QACvB,UAAU;QACV,eAAe,EAAE,cAAc;QAC/B,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,eAAe;QACjC,aAAa,EAAE,YAAY;QAC3B,SAAS;QACT,UAAU;QACV,eAAe,EAAE,cAAc;QAC/B,YAAY,EAAE,YAAY,CAAC,MAAM;QACjC,QAAQ,EAAE,QAAQ,CAAC,MAA+B;QAClD,KAAK,EAAE,KAAK,CAAC,MAA+B;QAC5C,SAAS,EAAE,SAAS,CAAC,MAA+B;QACpD,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,MAAM;KAClB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAiB,iBAAiB,CAAC;QACpD,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IACH,MAAM,cAAc,GAAiB;QACnC,YAAY,EAAE,EAAqB;QACnC,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC5E,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,QAAQ,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,kBAAkB,CAAC;gBAC/B,MAAM,EAAE,QAAQ;gBAChB,MAAM;gBACN,EAAE,EAAE,QAAQ;gBACZ,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,cAAc;aACxB,CAAC,CAAC;YACH,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,YAAY,GAAG;YACb,GAAG,CAAC,MAAM,qBAAqB,CAAC;gBAC9B,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,SAAS;gBAChB,EAAE,EAAE,QAAQ;aACb,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,qBAAqB,CAAC;gBAC9B,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,SAAS;gBAChB,EAAE,EAAE,gBAAgB;aACrB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,aAAa;QAC7B,QAAQ,EAAE,YAAY;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { GlobalOptions } from "../../core/shared/command-types.js";
2
+ export interface DeleteCommandOptions {
3
+ author?: string;
4
+ message?: string;
5
+ force?: boolean;
6
+ }
7
+ export interface DeleteResult {
8
+ item: Record<string, unknown>;
9
+ changed_fields: string[];
10
+ warnings: string[];
11
+ }
12
+ export declare function runDelete(id: string, options: DeleteCommandOptions, global: GlobalOptions): Promise<DeleteResult>;
@@ -0,0 +1,33 @@
1
+ import { pathExists } from "../../core/fs/fs-utils.js";
2
+ import { EXIT_CODE } from "../../core/shared/constants.js";
3
+ import { PmCliError } from "../../core/shared/errors.js";
4
+ import { deleteItem } from "../../core/store/item-store.js";
5
+ import { getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
6
+ import { readSettings } from "../../core/store/settings.js";
7
+ function toAuthor(candidate, defaultAuthor) {
8
+ const resolved = candidate ?? process.env.PM_AUTHOR ?? defaultAuthor;
9
+ const trimmed = resolved.trim();
10
+ return trimmed || "unknown";
11
+ }
12
+ export async function runDelete(id, options, global) {
13
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
14
+ if (!(await pathExists(getSettingsPath(pmRoot)))) {
15
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
16
+ }
17
+ const settings = await readSettings(pmRoot);
18
+ const author = toAuthor(options.author, settings.author_default);
19
+ const result = await deleteItem({
20
+ pmRoot,
21
+ settings,
22
+ id,
23
+ author,
24
+ message: options.message,
25
+ force: options.force,
26
+ });
27
+ return {
28
+ item: result.item,
29
+ changed_fields: result.changedFields,
30
+ warnings: result.warnings,
31
+ };
32
+ }
33
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAc5D,SAAS,QAAQ,CAAC,SAA6B,EAAE,aAAqB;IACpE,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAU,EAAE,OAA6B,EAAE,MAAqB;IAC9F,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,iCAAiC,MAAM,sBAAsB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,MAAM;QACN,QAAQ;QACR,EAAE;QACF,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAA0C;QACvD,cAAc,EAAE,MAAM,CAAC,aAAa;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { GlobalOptions } from "../../core/shared/command-types.js";
2
+ import type { LinkedDoc } from "../../types/index.js";
3
+ export interface DocsCommandOptions {
4
+ add?: string[];
5
+ remove?: string[];
6
+ author?: string;
7
+ message?: string;
8
+ force?: boolean;
9
+ }
10
+ export interface DocsResult {
11
+ id: string;
12
+ docs: LinkedDoc[];
13
+ changed: boolean;
14
+ count: number;
15
+ }
16
+ export declare function runDocs(id: string, options: DocsCommandOptions, global: GlobalOptions): Promise<DocsResult>;