@unbrained/pm-cli 2026.10.3 → 2026.10.5

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 (742) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +28 -2
  3. package/dist/cli/after-command-context-usage.js +1 -1
  4. package/dist/cli/argv-utils.js +1 -1
  5. package/dist/cli/bootstrap-args.js +1 -1
  6. package/dist/cli/bundle-integrity.js +2 -2
  7. package/dist/cli/command-namespaces.js +1 -1
  8. package/dist/cli/commander-usage.d.ts +1 -1
  9. package/dist/cli/commander-usage.js +7 -4
  10. package/dist/cli/commands/annotations/comments.js +1 -1
  11. package/dist/cli/commands/annotations/docs.js +1 -1
  12. package/dist/cli/commands/annotations/files.js +1 -1
  13. package/dist/cli/commands/annotations/learnings.js +1 -1
  14. package/dist/cli/commands/annotations/notes.js +1 -1
  15. package/dist/cli/commands/extension/describe.js +1 -1
  16. package/dist/cli/commands/extension/extension.js +1 -1
  17. package/dist/cli/commands/extension/scaffold.js +1 -1
  18. package/dist/cli/commands/extension/shared.js +1 -1
  19. package/dist/cli/commands/governance/gc.js +1 -1
  20. package/dist/cli/commands/governance/health.js +1 -1
  21. package/dist/cli/commands/governance/telemetry.js +1 -1
  22. package/dist/cli/commands/governance/validate.js +1 -1
  23. package/dist/cli/commands/history/activity.js +1 -1
  24. package/dist/cli/commands/history/history-compact.js +1 -1
  25. package/dist/cli/commands/history/history-redact.js +1 -1
  26. package/dist/cli/commands/history/history-repair.js +1 -1
  27. package/dist/cli/commands/history/history.js +1 -1
  28. package/dist/cli/commands/history/restore.js +1 -1
  29. package/dist/cli/commands/lifecycle/append.js +1 -1
  30. package/dist/cli/commands/lifecycle/claim.js +1 -1
  31. package/dist/cli/commands/lifecycle/close-many.js +1 -1
  32. package/dist/cli/commands/lifecycle/close.js +1 -1
  33. package/dist/cli/commands/lifecycle/copy.js +1 -1
  34. package/dist/cli/commands/lifecycle/create.js +1 -1
  35. package/dist/cli/commands/lifecycle/delete.js +1 -1
  36. package/dist/cli/commands/lifecycle/focus.js +1 -1
  37. package/dist/cli/commands/lifecycle/plan.js +1 -1
  38. package/dist/cli/commands/lifecycle/update-many.js +1 -1
  39. package/dist/cli/commands/lifecycle/update.js +1 -1
  40. package/dist/cli/commands/query/aggregate.js +1 -1
  41. package/dist/cli/commands/query/context.js +1 -1
  42. package/dist/cli/commands/query/deps.js +1 -1
  43. package/dist/cli/commands/query/duplicates.js +1 -1
  44. package/dist/cli/commands/query/eval.js +1 -1
  45. package/dist/cli/commands/query/get.js +1 -1
  46. package/dist/cli/commands/query/graph.js +1 -1
  47. package/dist/cli/commands/query/list.js +1 -1
  48. package/dist/cli/commands/query/next.js +1 -1
  49. package/dist/cli/commands/query/search.js +1 -1
  50. package/dist/cli/commands/query/stats.js +1 -1
  51. package/dist/cli/commands/test/test-all.js +1 -1
  52. package/dist/cli/commands/test/test-runs.js +1 -1
  53. package/dist/cli/commands/test/test.js +1 -1
  54. package/dist/cli/commands/workspace/config.js +1 -1
  55. package/dist/cli/commands/workspace/contracts.js +1 -1
  56. package/dist/cli/commands/workspace/init.js +1 -1
  57. package/dist/cli/commands/workspace/merge.js +1 -1
  58. package/dist/cli/commands/workspace/profile.js +1 -1
  59. package/dist/cli/commands/workspace/schema.js +1 -1
  60. package/dist/cli/commands/workspace/upgrade.js +1 -1
  61. package/dist/cli/context-intent-invocation.js +1 -1
  62. package/dist/cli/description-stdin.js +1 -1
  63. package/dist/cli/error-guidance.js +3 -1
  64. package/dist/cli/extension-command-help.js +5 -3
  65. package/dist/cli/extension-command-options.js +1 -1
  66. package/dist/cli/extension-recovery.js +1 -1
  67. package/dist/cli/help-content.js +5 -2
  68. package/dist/cli/help-json-payload.js +6 -3
  69. package/dist/cli/invocation-profile.js +2 -2
  70. package/dist/cli/main.js +5 -5
  71. package/dist/cli/migration-gates.js +1 -1
  72. package/dist/cli/option-values.js +1 -1
  73. package/dist/cli/public.js +1 -1
  74. package/dist/cli/register-annotations.js +1 -1
  75. package/dist/cli/register-assurance.js +1 -1
  76. package/dist/cli/register-files-lookup.js +1 -1
  77. package/dist/cli/register-history-activity.js +1 -1
  78. package/dist/cli/register-history-author.js +1 -1
  79. package/dist/cli/register-history-maintenance.js +2 -2
  80. package/dist/cli/register-list-query.js +10 -10
  81. package/dist/cli/register-mutation-options.js +1 -1
  82. package/dist/cli/register-mutation.js +2 -2
  83. package/dist/cli/register-operations.js +1 -1
  84. package/dist/cli/register-setup.js +1 -1
  85. package/dist/cli/register-structured-mutation.js +1 -1
  86. package/dist/cli/registration-helpers.js +1 -1
  87. package/dist/cli/runtime/activation.js +1 -1
  88. package/dist/cli/runtime/invocation-options.js +1 -1
  89. package/dist/cli/runtime/projection-retry.js +1 -1
  90. package/dist/cli/runtime/selection.js +1 -1
  91. package/dist/cli/runtime/telemetry-outcome.js +1 -1
  92. package/dist/cli/runtime-compatibility-boundary.d.ts +1 -1
  93. package/dist/cli/runtime-compatibility-boundary.js +4 -4
  94. package/dist/cli/schema/registration.js +2 -2
  95. package/dist/cli/schema-registration-helpers.js +1 -1
  96. package/dist/cli/search-refresh.js +1 -1
  97. package/dist/cli/stats-analytics-json.js +1 -1
  98. package/dist/cli/telemetry-flush.js +1 -1
  99. package/dist/cli-bundle/bundle-manifest.json +162 -162
  100. package/dist/cli-bundle/chunks/chunk-3CYOBJUK.js +3 -0
  101. package/dist/cli-bundle/chunks/chunk-5MNOWZPN.js +3 -0
  102. package/dist/cli-bundle/chunks/chunk-AJ7H6XUF.js +20 -0
  103. package/dist/cli-bundle/chunks/chunk-D332RXZ7.js +80 -0
  104. package/dist/cli-bundle/chunks/chunk-HRJ6G6ZG.js +31 -0
  105. package/dist/cli-bundle/chunks/chunk-KRVI56QE.js +6 -0
  106. package/dist/cli-bundle/chunks/chunk-N4YGSG6F.js +238 -0
  107. package/dist/cli-bundle/chunks/chunk-OOLYASYJ.js +2 -0
  108. package/dist/cli-bundle/chunks/chunk-R7CG2DB7.js +2 -0
  109. package/dist/cli-bundle/chunks/chunk-TGMONGWX.js +2 -0
  110. package/dist/cli-bundle/chunks/chunk-UZ7BIUCI.js +2 -0
  111. package/dist/cli-bundle/chunks/{chunk-44UGMMQ6.js → chunk-VZ63DEVJ.js} +3 -3
  112. package/dist/cli-bundle/chunks/chunk-WFZ4UEOB.js +2 -0
  113. package/dist/cli-bundle/chunks/chunk-YVBRASXO.js +8 -0
  114. package/dist/cli-bundle/chunks/{chunk-5XKF5SQV.js → chunk-Z66DWDAU.js} +91 -91
  115. package/dist/cli-bundle/chunks/{register-list-query-DYCGUQEW.js → register-list-query-75QXHIFH.js} +11 -11
  116. package/dist/cli-bundle/chunks/register-mutation-YS54SCHG.js +20 -0
  117. package/dist/cli-bundle/chunks/register-operations-6KHZQSYJ.js +2 -0
  118. package/dist/cli-bundle/chunks/register-setup-RTATEN2M.js +2 -0
  119. package/dist/cli-bundle/focused-chunks/{chunk-3BIYG72P.js → chunk-2CVX3KR3.js} +2 -2
  120. package/dist/cli-bundle/focused-chunks/chunk-5C3IDDW7.js +2 -0
  121. package/dist/cli-bundle/focused-chunks/{chunk-DBD4W4QP.js → chunk-ABV67XCC.js} +3 -3
  122. package/dist/cli-bundle/focused-chunks/chunk-B5RSLVE6.js +3 -0
  123. package/dist/cli-bundle/focused-chunks/chunk-C224METM.js +20 -0
  124. package/dist/cli-bundle/focused-chunks/chunk-CLDPTMQY.js +6 -0
  125. package/dist/cli-bundle/focused-chunks/chunk-DDRN42PB.js +8 -0
  126. package/dist/cli-bundle/focused-chunks/{chunk-EJN7DY3B.js → chunk-DOVTUKJQ.js} +2 -2
  127. package/dist/cli-bundle/focused-chunks/chunk-ECBOPEJE.js +75 -0
  128. package/dist/cli-bundle/focused-chunks/chunk-GITOYRUW.js +165 -0
  129. package/dist/cli-bundle/focused-chunks/chunk-GUIF3WVC.js +30 -0
  130. package/dist/cli-bundle/focused-chunks/chunk-LE4JUCRR.js +3 -0
  131. package/dist/cli-bundle/focused-chunks/{chunk-HFAW3FJQ.js → chunk-PSXFFQFT.js} +2 -2
  132. package/dist/cli-bundle/focused-chunks/chunk-RHIH6XIW.js +12 -0
  133. package/dist/cli-bundle/focused-chunks/chunk-UDYRVBOZ.js +2 -0
  134. package/dist/cli-bundle/focused-chunks/chunk-XV5RV4ZT.js +2 -0
  135. package/dist/cli-bundle/focused-chunks/{chunk-XRSCIYHR.js → chunk-YMU42COG.js} +2 -2
  136. package/dist/cli-bundle/main.js +28 -28
  137. package/dist/cli-bundle/sdk-authoring.js +1 -1
  138. package/dist/cli-bundle/sdk-contracts.js +2 -2
  139. package/dist/cli-bundle/sdk-core.js +32 -32
  140. package/dist/cli-bundle/sdk-governance.js +1 -1
  141. package/dist/cli-bundle/sdk-graph.js +1 -1
  142. package/dist/cli-bundle/sdk-merge.js +55 -55
  143. package/dist/cli-bundle/sdk-query.js +1 -1
  144. package/dist/cli-bundle/sdk-runtime.js +1 -1
  145. package/dist/cli-bundle/sdk-testing.js +1 -1
  146. package/dist/cli-bundle/sdk.js +10 -10
  147. package/dist/cli.js +1 -1
  148. package/dist/core/checkpoint/checkpoint-gc.js +1 -1
  149. package/dist/core/checkpoint/mutation-checkpoint.js +2 -2
  150. package/dist/core/config/nested-settings.js +1 -1
  151. package/dist/core/config/positional-value.js +1 -1
  152. package/dist/core/diagnostics/remediation.js +1 -1
  153. package/dist/core/extensions/activation-summary-markdown.js +2 -1
  154. package/dist/core/extensions/activation-summary.js +1 -1
  155. package/dist/core/extensions/activation-transaction.js +1 -1
  156. package/dist/core/extensions/capability-usage.js +1 -1
  157. package/dist/core/extensions/command-hook-context.js +1 -1
  158. package/dist/core/extensions/command-metadata-contract.js +1 -1
  159. package/dist/core/extensions/command-visibility-tier.js +1 -1
  160. package/dist/core/extensions/contribution-inventory.js +1 -1
  161. package/dist/core/extensions/exporter-output-contract.js +1 -1
  162. package/dist/core/extensions/extension-candidate.js +1 -1
  163. package/dist/core/extensions/extension-capability-aliases.js +1 -1
  164. package/dist/core/extensions/extension-hook-runtime.js +1 -1
  165. package/dist/core/extensions/extension-policy.js +1 -1
  166. package/dist/core/extensions/extension-registries.js +1 -1
  167. package/dist/core/extensions/extension-runtime-helpers.js +1 -1
  168. package/dist/core/extensions/extension-types.d.ts +8 -1
  169. package/dist/core/extensions/extension-types.js +1 -1
  170. package/dist/core/extensions/flag-definition-validation.js +1 -1
  171. package/dist/core/extensions/flag-value-types.js +1 -1
  172. package/dist/core/extensions/index.js +1 -1
  173. package/dist/core/extensions/item-field-types.js +1 -1
  174. package/dist/core/extensions/item-fields.js +1 -1
  175. package/dist/core/extensions/loader.js +1 -1
  176. package/dist/core/extensions/manifest-parser.js +1 -1
  177. package/dist/core/extensions/manifest-schema.js +1 -1
  178. package/dist/core/extensions/module-graph-snapshot.js +1 -1
  179. package/dist/core/extensions/preflight-ownership.js +1 -1
  180. package/dist/core/extensions/registration-contracts.js +1 -1
  181. package/dist/core/extensions/registration-validation.js +1 -1
  182. package/dist/core/extensions/registration-values.js +1 -1
  183. package/dist/core/extensions/reserved-host-flags.js +1 -1
  184. package/dist/core/extensions/runtime-registrations.js +1 -1
  185. package/dist/core/extensions/service-ownership.js +1 -1
  186. package/dist/core/extensions/version-compat.js +1 -1
  187. package/dist/core/fs/atomic-create.js +1 -1
  188. package/dist/core/fs/fs-utils.js +2 -2
  189. package/dist/core/fs/host-environment-errors.js +1 -1
  190. package/dist/core/fs/index.js +1 -1
  191. package/dist/core/fs/path-utils.js +1 -1
  192. package/dist/core/governance/content-fields.js +1 -1
  193. package/dist/core/governance/issue-codes.js +1 -1
  194. package/dist/core/governance/metadata-coverage.js +1 -1
  195. package/dist/core/history/digest.js +1 -1
  196. package/dist/core/history/drift-cache.js +3 -3
  197. package/dist/core/history/drift-scan.d.ts +4 -0
  198. package/dist/core/history/drift-scan.js +1 -1
  199. package/dist/core/history/event-classification.js +1 -1
  200. package/dist/core/history/event-index.js +8 -7
  201. package/dist/core/history/history-compact-bulk.js +1 -1
  202. package/dist/core/history/history-diff.js +1 -1
  203. package/dist/core/history/history-rewrite.js +1 -1
  204. package/dist/core/history/history-storage-stats.js +1 -1
  205. package/dist/core/history/history-stream-policy.js +1 -1
  206. package/dist/core/history/history.js +2 -2
  207. package/dist/core/history/identity.js +1 -1
  208. package/dist/core/history/index.js +1 -1
  209. package/dist/core/history/operation-contract.js +1 -1
  210. package/dist/core/history/projection.js +1 -1
  211. package/dist/core/history/read.js +1 -1
  212. package/dist/core/history/replay.js +2 -1
  213. package/dist/core/history/tombstone.js +1 -1
  214. package/dist/core/history/version-address.js +1 -1
  215. package/dist/core/history/workspace-history.js +2 -2
  216. package/dist/core/io/body-file.js +1 -1
  217. package/dist/core/io/bulk-ids-input.js +2 -1
  218. package/dist/core/item/actionability.js +1 -1
  219. package/dist/core/item/dependency-reference.js +1 -1
  220. package/dist/core/item/id.js +1 -1
  221. package/dist/core/item/index.js +1 -1
  222. package/dist/core/item/item-format-version.js +1 -1
  223. package/dist/core/item/item-format.js +6 -4
  224. package/dist/core/item/item-record.js +1 -1
  225. package/dist/core/item/item-type-definition.js +1 -1
  226. package/dist/core/item/parent-reference-policy.js +1 -1
  227. package/dist/core/item/parse.js +8 -2
  228. package/dist/core/item/plan-lifecycle.js +1 -1
  229. package/dist/core/item/priority.js +1 -1
  230. package/dist/core/item/sprint-release-format.js +1 -1
  231. package/dist/core/item/status-filter.js +1 -1
  232. package/dist/core/item/status.js +1 -1
  233. package/dist/core/item/toon-decode.js +1 -1
  234. package/dist/core/item/type-registry.js +1 -1
  235. package/dist/core/item/type-synonyms.js +1 -1
  236. package/dist/core/lock/index.js +1 -1
  237. package/dist/core/lock/lock-gc.js +1 -1
  238. package/dist/core/lock/lock.js +3 -3
  239. package/dist/core/output/mutation-projection.js +1 -1
  240. package/dist/core/output/output-control.js +1 -1
  241. package/dist/core/output/output.js +22 -10
  242. package/dist/core/output/query-summary.js +1 -1
  243. package/dist/core/output/tabular.js +3 -1
  244. package/dist/core/packages/manifest.js +1 -1
  245. package/dist/core/packages/root.js +1 -1
  246. package/dist/core/policy/workflow-policy-schema.js +1 -1
  247. package/dist/core/policy/workflow-policy-store.js +1 -1
  248. package/dist/core/policy/workflow-policy.js +1 -1
  249. package/dist/core/profile/profile-describe.js +1 -1
  250. package/dist/core/profile/profile-lint.js +1 -1
  251. package/dist/core/profile/profile-plan.js +1 -1
  252. package/dist/core/profile/profile-presets.js +25 -1
  253. package/dist/core/reproducibility/context.js +1 -1
  254. package/dist/core/schema/fields-file.js +2 -2
  255. package/dist/core/schema/item-types-file.js +2 -2
  256. package/dist/core/schema/runtime-field-filters.js +1 -1
  257. package/dist/core/schema/runtime-field-values.js +1 -1
  258. package/dist/core/schema/runtime-schema.js +2 -2
  259. package/dist/core/schema/status-defs-file.js +2 -2
  260. package/dist/core/schema/status-token.js +1 -1
  261. package/dist/core/schema/type-inference.js +1 -1
  262. package/dist/core/schema/type-presets.js +1 -1
  263. package/dist/core/schema/type-workflows.js +1 -1
  264. package/dist/core/search/background-refresh.js +2 -2
  265. package/dist/core/search/bm25.js +1 -1
  266. package/dist/core/search/cache.js +2 -2
  267. package/dist/core/search/corpus.js +1 -1
  268. package/dist/core/search/embedding-batches.js +1 -1
  269. package/dist/core/search/eval-thresholds.js +1 -1
  270. package/dist/core/search/eval.js +1 -1
  271. package/dist/core/search/http-client.js +1 -1
  272. package/dist/core/search/providers.js +1 -1
  273. package/dist/core/search/relevance.js +1 -1
  274. package/dist/core/search/semantic-defaults.js +1 -1
  275. package/dist/core/search/staleness.js +1 -1
  276. package/dist/core/search/vector-stores.js +2 -2
  277. package/dist/core/search/vectorization-metadata.js +1 -1
  278. package/dist/core/sentry/helpers.js +1 -1
  279. package/dist/core/sentry/instrument.js +1 -1
  280. package/dist/core/session/session-state.js +1 -1
  281. package/dist/core/shared/agent-session-context.js +1 -1
  282. package/dist/core/shared/author.js +5 -1
  283. package/dist/core/shared/command-line.js +1 -1
  284. package/dist/core/shared/command-types.js +1 -1
  285. package/dist/core/shared/conflict-markers.js +1 -1
  286. package/dist/core/shared/constants.js +1 -1
  287. package/dist/core/shared/errors.js +1 -1
  288. package/dist/core/shared/html-entity-decode.js +1 -1
  289. package/dist/core/shared/index.js +1 -1
  290. package/dist/core/shared/item-metadata-contract.js +1 -1
  291. package/dist/core/shared/lazy-module.js +1 -1
  292. package/dist/core/shared/levenshtein.js +1 -1
  293. package/dist/core/shared/memo.js +1 -1
  294. package/dist/core/shared/numeric-parsers.js +1 -1
  295. package/dist/core/shared/option-alias-visibility.js +1 -1
  296. package/dist/core/shared/primitives.js +1 -1
  297. package/dist/core/shared/secret-rules.js +1 -1
  298. package/dist/core/shared/serial-queue.js +1 -1
  299. package/dist/core/shared/serialization.js +1 -1
  300. package/dist/core/shared/split-comma-list.js +1 -1
  301. package/dist/core/shared/text-normalization.js +1 -1
  302. package/dist/core/shared/time.js +2 -1
  303. package/dist/core/store/index.js +1 -1
  304. package/dist/core/store/item-format-migration.js +1 -1
  305. package/dist/core/store/item-metadata-cache.js +1 -1
  306. package/dist/core/store/item-metadata-query-index.js +7 -7
  307. package/dist/core/store/item-metadata-read-work.js +1 -1
  308. package/dist/core/store/item-store.js +1 -1
  309. package/dist/core/store/paths.js +1 -1
  310. package/dist/core/store/settings-concurrency.js +1 -1
  311. package/dist/core/store/settings-read-cache.js +1 -1
  312. package/dist/core/store/settings-validator.js +1 -1
  313. package/dist/core/store/settings.d.ts +11 -2
  314. package/dist/core/store/settings.js +3 -3
  315. package/dist/core/store/tracker-preflight.js +1 -1
  316. package/dist/core/telemetry/consent.js +2 -2
  317. package/dist/core/telemetry/observability.js +1 -1
  318. package/dist/core/telemetry/policy.js +1 -1
  319. package/dist/core/telemetry/read-sampling.js +2 -2
  320. package/dist/core/telemetry/runtime.js +9 -5
  321. package/dist/core/test/background-runs.js +3 -3
  322. package/dist/core/test/item-test-run-tracking.js +1 -1
  323. package/dist/core/test/run-selectors.js +1 -1
  324. package/dist/core/validate/estimate-defaults.js +1 -1
  325. package/dist/core/validate/fix-planning.js +1 -1
  326. package/dist/core/validate/linked-artifact-reference.js +1 -1
  327. package/dist/core/validate/missing-by-type.js +1 -1
  328. package/dist/core/validate/missing-link-owners.js +1 -1
  329. package/dist/core/validate/stale-file-classification.js +1 -1
  330. package/dist/mcp/http-server.js +6 -4
  331. package/dist/mcp/legacy-adapter.js +1 -1
  332. package/dist/mcp/runtime-capabilities.js +1 -1
  333. package/dist/mcp/server.js +4 -4
  334. package/dist/mcp/tool-definitions.js +1 -1
  335. package/dist/sdk/actionability.js +1 -1
  336. package/dist/sdk/agent/closed-domain-contracts.js +1 -1
  337. package/dist/sdk/agent/command-recovery.js +1 -1
  338. package/dist/sdk/agent/command-suggestions.js +1 -1
  339. package/dist/sdk/agent/create-option-policy.js +1 -1
  340. package/dist/sdk/agent/identity-config.js +1 -1
  341. package/dist/sdk/agent/item-addressing.js +1 -1
  342. package/dist/sdk/agent/refusal-closure-census.js +2 -1
  343. package/dist/sdk/agent/refusal-closure.js +1 -1
  344. package/dist/sdk/agent/refusal-corpus-contracts.js +1 -1
  345. package/dist/sdk/agent/refusal-reachability.js +3 -1
  346. package/dist/sdk/agent/subcommand-recovery.js +1 -1
  347. package/dist/sdk/agent/task-transcript-contracts.js +1 -1
  348. package/dist/sdk/agent/tracker-preflight-contracts.js +1 -1
  349. package/dist/sdk/agent-capability-contracts.js +3 -1
  350. package/dist/sdk/agent-session-context.js +1 -1
  351. package/dist/sdk/annotations.js +1 -1
  352. package/dist/sdk/author-attribution.js +1 -1
  353. package/dist/sdk/authoring.js +1 -1
  354. package/dist/sdk/cli-bootstrap.js +1 -1
  355. package/dist/sdk/cli-contracts/agent-output-contracts.js +5 -3
  356. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
  357. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  358. package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -1
  359. package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
  360. package/dist/sdk/cli-contracts/commander-types.js +1 -1
  361. package/dist/sdk/cli-contracts/completeness.js +1 -1
  362. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  363. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  364. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +2 -1
  365. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  366. package/dist/sdk/cli-contracts/registration-helpers.js +7 -7
  367. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  368. package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -1
  369. package/dist/sdk/cli-contracts/string-lists.js +1 -1
  370. package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
  371. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  372. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  373. package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -1
  374. package/dist/sdk/cli-contracts.js +1 -1
  375. package/dist/sdk/cli-program.js +1 -1
  376. package/dist/sdk/command-line.js +1 -1
  377. package/dist/sdk/comments.js +1 -1
  378. package/dist/sdk/compile-cache.js +1 -1
  379. package/dist/sdk/completion/bash.js +2 -1
  380. package/dist/sdk/completion/fish.js +13 -7
  381. package/dist/sdk/completion/shared.js +1 -1
  382. package/dist/sdk/completion/zsh.js +14 -8
  383. package/dist/sdk/completion.js +1 -1
  384. package/dist/sdk/compose.js +1 -1
  385. package/dist/sdk/config.js +1 -1
  386. package/dist/sdk/context/recency.js +1 -1
  387. package/dist/sdk/context/semantic-session-attribution.js +1 -1
  388. package/dist/sdk/context/usage-egress.js +1 -1
  389. package/dist/sdk/context/usage-ledger.js +6 -3
  390. package/dist/sdk/context-intent-contracts.js +1 -1
  391. package/dist/sdk/context-intent-runtime.js +1 -1
  392. package/dist/sdk/context-packing.js +1 -1
  393. package/dist/sdk/context-relevance.js +1 -1
  394. package/dist/sdk/context-signal-store.js +2 -2
  395. package/dist/sdk/context-usage.js +1 -1
  396. package/dist/sdk/contracts.js +1 -1
  397. package/dist/sdk/core-governance.js +1 -1
  398. package/dist/sdk/core.js +1 -1
  399. package/dist/sdk/corpus-shape.js +1 -1
  400. package/dist/sdk/define.js +1 -1
  401. package/dist/sdk/dependencies.js +1 -1
  402. package/dist/sdk/dependency-flag-validation.js +1 -1
  403. package/dist/sdk/dependency-provenance.js +1 -1
  404. package/dist/sdk/docs.js +1 -1
  405. package/dist/sdk/duplicates.js +1 -1
  406. package/dist/sdk/environment/agent-environment.js +1 -1
  407. package/dist/sdk/environment/host-environment-errors.js +1 -1
  408. package/dist/sdk/environment/project-runtime-compatibility.js +2 -1
  409. package/dist/sdk/environment/source-context.js +1 -1
  410. package/dist/sdk/environment/tracker-preflight.js +1 -1
  411. package/dist/sdk/error-code-catalog.js +1 -1
  412. package/dist/sdk/error-runtime.js +1 -1
  413. package/dist/sdk/errors.js +1 -1
  414. package/dist/sdk/eval.js +1 -1
  415. package/dist/sdk/extension/author-manifest.js +1 -1
  416. package/dist/sdk/extension/bundled-catalog.js +1 -1
  417. package/dist/sdk/extension/concurrency.js +1 -1
  418. package/dist/sdk/extension/copy-scope.js +1 -1
  419. package/dist/sdk/extension/custom-field-collisions.js +1 -1
  420. package/dist/sdk/extension/describe.js +4 -2
  421. package/dist/sdk/extension/doctor.js +1 -1
  422. package/dist/sdk/extension/install-plan.js +1 -1
  423. package/dist/sdk/extension/install-receipts.js +1 -1
  424. package/dist/sdk/extension/install-runtime.js +3 -3
  425. package/dist/sdk/extension/install-snapshot.js +1 -1
  426. package/dist/sdk/extension/install-sources.js +5 -5
  427. package/dist/sdk/extension/managed-state.js +2 -2
  428. package/dist/sdk/extension/migrations.js +2 -2
  429. package/dist/sdk/extension/output-ownership.js +1 -1
  430. package/dist/sdk/extension/runtime-summary.js +1 -1
  431. package/dist/sdk/extension/scaffold.js +11 -4
  432. package/dist/sdk/extension/shared.js +1 -1
  433. package/dist/sdk/extension/source-resolution.js +1 -1
  434. package/dist/sdk/extension/static-inventory.js +1 -1
  435. package/dist/sdk/extension/update-check.js +1 -1
  436. package/dist/sdk/extension-command-context.js +1 -1
  437. package/dist/sdk/extension-contracts.js +1 -1
  438. package/dist/sdk/extension.js +1 -1
  439. package/dist/sdk/files.js +1 -1
  440. package/dist/sdk/flag-invocation-contracts.js +1 -1
  441. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  442. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  443. package/dist/sdk/generated-error-code-catalog.js +1 -1
  444. package/dist/sdk/governance/assurance-action-contracts.js +1 -1
  445. package/dist/sdk/governance/assurance-action.js +1 -1
  446. package/dist/sdk/governance/assurance-limits.js +1 -1
  447. package/dist/sdk/governance/assurance-mutation-error.js +1 -1
  448. package/dist/sdk/governance/assurance-presets.js +1 -1
  449. package/dist/sdk/governance/assurance-runtime.js +1 -1
  450. package/dist/sdk/governance/assurance.js +4 -4
  451. package/dist/sdk/governance/boundary-fixtures.js +1 -1
  452. package/dist/sdk/governance/closure-timestamps.js +1 -1
  453. package/dist/sdk/governance/coverage-assurance.js +1 -1
  454. package/dist/sdk/governance/defect-recurrence-coverage.js +1 -1
  455. package/dist/sdk/governance/defect-recurrence-graph.js +1 -1
  456. package/dist/sdk/governance/defect-recurrence-signals.js +1 -1
  457. package/dist/sdk/governance/defect-recurrence.js +1 -1
  458. package/dist/sdk/governance/extension-host-version.js +1 -1
  459. package/dist/sdk/governance/gc.js +1 -1
  460. package/dist/sdk/governance/health-merge-evidence.js +1 -1
  461. package/dist/sdk/governance/health.js +2 -1
  462. package/dist/sdk/governance/hierarchy-validation.js +1 -1
  463. package/dist/sdk/governance/linked-file-report.js +1 -1
  464. package/dist/sdk/governance/merge-receipt-history.js +1 -1
  465. package/dist/sdk/governance/provenance-health.js +4 -1
  466. package/dist/sdk/governance/reindex.js +5 -4
  467. package/dist/sdk/governance/stale-work.js +1 -1
  468. package/dist/sdk/governance/status-role-diagnostics.js +1 -1
  469. package/dist/sdk/governance/storage-integrity.js +1 -1
  470. package/dist/sdk/governance/tracked-runtime-cache.js +1 -1
  471. package/dist/sdk/governance/upgrade.js +2 -2
  472. package/dist/sdk/governance/validate-history-drift.js +1 -1
  473. package/dist/sdk/governance/validate-item-reader.js +1 -1
  474. package/dist/sdk/governance/validate-normalization.js +1 -1
  475. package/dist/sdk/governance/validate.js +1 -1
  476. package/dist/sdk/governance/workflow-completeness.js +1 -1
  477. package/dist/sdk/governance/workflow-policy.js +3 -3
  478. package/dist/sdk/governance/workspace-position.js +2 -1
  479. package/dist/sdk/governance.js +1 -1
  480. package/dist/sdk/graph/adapter.js +1 -1
  481. package/dist/sdk/graph/analytics.js +1 -1
  482. package/dist/sdk/graph/assembly.js +1 -1
  483. package/dist/sdk/graph/cache.js +1 -1
  484. package/dist/sdk/graph/centrality.js +1 -1
  485. package/dist/sdk/graph/conformance.js +1 -1
  486. package/dist/sdk/graph/deadline-scheduling.js +1 -1
  487. package/dist/sdk/graph/durable-cache.js +1 -1
  488. package/dist/sdk/graph/governance-contracts.js +1 -1
  489. package/dist/sdk/graph/governance.js +1 -1
  490. package/dist/sdk/graph/hierarchy-integrity.js +1 -1
  491. package/dist/sdk/graph/index.js +1 -1
  492. package/dist/sdk/graph/lifecycle-coverage.js +1 -1
  493. package/dist/sdk/graph/mutation-advisory.js +1 -1
  494. package/dist/sdk/graph/query-contracts.js +1 -1
  495. package/dist/sdk/graph/remediation.js +1 -1
  496. package/dist/sdk/graph/run.js +1 -1
  497. package/dist/sdk/graph/scheduling.js +1 -1
  498. package/dist/sdk/graph/traversal.js +1 -1
  499. package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -1
  500. package/dist/sdk/graph.js +1 -1
  501. package/dist/sdk/guide-topics.js +1 -1
  502. package/dist/sdk/guide.js +8 -1
  503. package/dist/sdk/history/attestation-command.js +1 -1
  504. package/dist/sdk/history/attestation-contract.js +1 -1
  505. package/dist/sdk/history/attestation-scan.js +1 -1
  506. package/dist/sdk/history/attestation.js +1 -1
  507. package/dist/sdk/history/maintenance.js +1 -1
  508. package/dist/sdk/history/salvage.js +3 -2
  509. package/dist/sdk/history/subject.js +1 -1
  510. package/dist/sdk/history-analytics.js +1 -1
  511. package/dist/sdk/history-compact.js +1 -1
  512. package/dist/sdk/history-mcp.js +1 -1
  513. package/dist/sdk/history-provenance.js +1 -1
  514. package/dist/sdk/history-read.js +1 -1
  515. package/dist/sdk/history-redact.js +1 -1
  516. package/dist/sdk/history-repair.js +1 -1
  517. package/dist/sdk/improvement-ledger-validation.js +1 -1
  518. package/dist/sdk/improvement-ledger.js +2 -2
  519. package/dist/sdk/index.js +1 -1
  520. package/dist/sdk/init-agent-guidance.js +16 -2
  521. package/dist/sdk/init.js +16 -2
  522. package/dist/sdk/invocation-author.js +1 -1
  523. package/dist/sdk/item-children.js +1 -1
  524. package/dist/sdk/item-metadata-index.js +1 -1
  525. package/dist/sdk/item-schedule.js +1 -1
  526. package/dist/sdk/item-transaction.js +1 -1
  527. package/dist/sdk/learnings.js +1 -1
  528. package/dist/sdk/lifecycle/append.js +4 -2
  529. package/dist/sdk/lifecycle/claim.js +1 -1
  530. package/dist/sdk/lifecycle/close-many.js +1 -1
  531. package/dist/sdk/lifecycle/close.js +1 -1
  532. package/dist/sdk/lifecycle/copy.js +1 -1
  533. package/dist/sdk/lifecycle/create.js +1 -1
  534. package/dist/sdk/lifecycle/delete.js +1 -1
  535. package/dist/sdk/lifecycle/event-validation-messages.js +1 -1
  536. package/dist/sdk/lifecycle/focus.js +1 -1
  537. package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
  538. package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -1
  539. package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
  540. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  541. package/dist/sdk/lifecycle/metadata-normalizers.js +1 -1
  542. package/dist/sdk/lifecycle/mutation-command-options.js +1 -1
  543. package/dist/sdk/lifecycle/plan-mutation-receipt.js +1 -1
  544. package/dist/sdk/lifecycle/plan.js +1 -1
  545. package/dist/sdk/lifecycle/recurrence-parsers.js +1 -1
  546. package/dist/sdk/lifecycle/reopen.js +1 -1
  547. package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +2 -1
  548. package/dist/sdk/lifecycle/restore.js +1 -1
  549. package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
  550. package/dist/sdk/lifecycle/task-composition.js +1 -1
  551. package/dist/sdk/lifecycle/update-many.js +1 -1
  552. package/dist/sdk/lifecycle/update.js +2 -1
  553. package/dist/sdk/lifecycle-completion.js +1 -1
  554. package/dist/sdk/lifecycle-policy.js +1 -1
  555. package/dist/sdk/linked-artifacts.js +2 -1
  556. package/dist/sdk/mcp/apps.js +1 -1
  557. package/dist/sdk/mcp/authorization.js +1 -1
  558. package/dist/sdk/mcp/discovery.js +1 -1
  559. package/dist/sdk/mcp/interactions.js +1 -1
  560. package/dist/sdk/mcp/protocol.js +1 -1
  561. package/dist/sdk/mcp/skills.js +3 -1
  562. package/dist/sdk/mcp/subscriptions.js +1 -1
  563. package/dist/sdk/mcp/tasks.js +2 -2
  564. package/dist/sdk/mcp/transport.js +1 -1
  565. package/dist/sdk/merge/abandoned-receipts.js +1 -1
  566. package/dist/sdk/merge/driver.js +1 -1
  567. package/dist/sdk/merge/index.js +1 -1
  568. package/dist/sdk/merge/install.js +4 -2
  569. package/dist/sdk/merge/receipt-file-boundary.js +1 -1
  570. package/dist/sdk/merge/receipt-operation.js +1 -1
  571. package/dist/sdk/merge/receipt-schema.js +1 -1
  572. package/dist/sdk/merge/receipts.js +4 -4
  573. package/dist/sdk/merge/reconcile.js +1 -1
  574. package/dist/sdk/merge/three-way.js +3 -2
  575. package/dist/sdk/merge/worktree-config.js +1 -1
  576. package/dist/sdk/merge.js +1 -1
  577. package/dist/sdk/mutation-events.js +1 -1
  578. package/dist/sdk/mutation-guard.js +1 -1
  579. package/dist/sdk/notes.js +1 -1
  580. package/dist/sdk/output-contracts.js +1 -1
  581. package/dist/sdk/output-projection.js +1 -1
  582. package/dist/sdk/output-token-accounting.js +1 -1
  583. package/dist/sdk/output.js +2 -1
  584. package/dist/sdk/ownership-source.js +1 -1
  585. package/dist/sdk/package-import-adapters.js +1 -1
  586. package/dist/sdk/package-migrations.js +1 -1
  587. package/dist/sdk/package-runtime-options.js +1 -1
  588. package/dist/sdk/pagination.js +1 -1
  589. package/dist/sdk/profile.js +5 -1
  590. package/dist/sdk/provenance.js +1 -1
  591. package/dist/sdk/public-surface.json +1 -1
  592. package/dist/sdk/query/activity.js +1 -1
  593. package/dist/sdk/query/aggregate.js +1 -1
  594. package/dist/sdk/query/calendar.js +4 -1
  595. package/dist/sdk/query/complete-list.js +1 -1
  596. package/dist/sdk/query/context.js +2 -1
  597. package/dist/sdk/query/duplicate-candidates.js +1 -1
  598. package/dist/sdk/query/get.d.ts +14 -2
  599. package/dist/sdk/query/get.js +1 -1
  600. package/dist/sdk/query/history.js +1 -1
  601. package/dist/sdk/query/item-filter-options.js +1 -1
  602. package/dist/sdk/query/light-metadata.js +1 -1
  603. package/dist/sdk/query/list-filter-shared.js +1 -1
  604. package/dist/sdk/query/list.js +1 -1
  605. package/dist/sdk/query/multi-value-filters.js +1 -1
  606. package/dist/sdk/query/next-ready-budget.js +1 -1
  607. package/dist/sdk/query/next.js +2 -1
  608. package/dist/sdk/query/parsers.js +1 -1
  609. package/dist/sdk/query/projection-contracts.js +1 -1
  610. package/dist/sdk/query/search/corpus.js +2 -1
  611. package/dist/sdk/query/search/filters.js +1 -1
  612. package/dist/sdk/query/search/input.js +1 -1
  613. package/dist/sdk/query/search/lexical.js +1 -1
  614. package/dist/sdk/query/search/response.js +1 -1
  615. package/dist/sdk/query/search/semantic.js +3 -2
  616. package/dist/sdk/query/search/types.js +1 -1
  617. package/dist/sdk/query/search-contracts.js +1 -1
  618. package/dist/sdk/query/search-pagination.d.ts +1 -1
  619. package/dist/sdk/query/search-pagination.js +1 -1
  620. package/dist/sdk/query/search-rendering.js +1 -1
  621. package/dist/sdk/query/search.js +1 -1
  622. package/dist/sdk/query/workspace-contracts.js +1 -1
  623. package/dist/sdk/query.js +1 -1
  624. package/dist/sdk/read-output/continuation.js +1 -1
  625. package/dist/sdk/read-output/options.js +1 -1
  626. package/dist/sdk/read-output/provenance.js +1 -1
  627. package/dist/sdk/read-output-budget.js +1 -1
  628. package/dist/sdk/read-output-contracts.js +1 -1
  629. package/dist/sdk/read-output-rows.js +1 -1
  630. package/dist/sdk/read-output-session.js +1 -1
  631. package/dist/sdk/relationship-analytics.js +1 -1
  632. package/dist/sdk/relationship-context.js +1 -1
  633. package/dist/sdk/relationship-history.js +7 -4
  634. package/dist/sdk/relationship-kinds/contract.js +1 -1
  635. package/dist/sdk/relationship-migration.js +1 -1
  636. package/dist/sdk/relationships.js +1 -1
  637. package/dist/sdk/reproducibility/process.js +1 -1
  638. package/dist/sdk/runtime/actions.js +1 -1
  639. package/dist/sdk/runtime/context.js +1 -1
  640. package/dist/sdk/runtime/schema-preview.js +1 -1
  641. package/dist/sdk/runtime/schema.js +1 -1
  642. package/dist/sdk/runtime-action-aliases.js +1 -1
  643. package/dist/sdk/runtime-extended-actions.js +1 -1
  644. package/dist/sdk/runtime-input.js +1 -1
  645. package/dist/sdk/runtime-primitives.js +1 -1
  646. package/dist/sdk/runtime-public-contracts.js +1 -1
  647. package/dist/sdk/runtime-stats-options.js +1 -1
  648. package/dist/sdk/runtime.js +1 -1
  649. package/dist/sdk/scheduling-shortcuts.js +1 -1
  650. package/dist/sdk/schema-migration.js +4 -3
  651. package/dist/sdk/schema.js +7 -1
  652. package/dist/sdk/search-refresh-worker.js +1 -1
  653. package/dist/sdk/similarity-scoring.js +1 -1
  654. package/dist/sdk/similarity.js +1 -1
  655. package/dist/sdk/start-task-status.js +1 -1
  656. package/dist/sdk/stats.js +1 -1
  657. package/dist/sdk/structured-mutations.js +1 -1
  658. package/dist/sdk/telemetry-flush.js +1 -1
  659. package/dist/sdk/telemetry.js +4 -3
  660. package/dist/sdk/templates.js +26 -2
  661. package/dist/sdk/test/batch.js +2 -2
  662. package/dist/sdk/test/entry.js +1 -1
  663. package/dist/sdk/test/execution.js +6 -5
  664. package/dist/sdk/test/json-path.js +1 -1
  665. package/dist/sdk/test/linked-command-detection.js +1 -1
  666. package/dist/sdk/test/measurements.js +1 -1
  667. package/dist/sdk/test/parsers.js +1 -1
  668. package/dist/sdk/test/runs.js +1 -1
  669. package/dist/sdk/test/trust.js +2 -2
  670. package/dist/sdk/test/workspace-snapshot.js +1 -1
  671. package/dist/sdk/testing.js +7 -4
  672. package/dist/sdk/traceability/runtime-files-lookup.js +1 -1
  673. package/dist/sdk/traceability/source-traceability.js +2 -1
  674. package/dist/sdk/tracker-root-discovery.js +1 -1
  675. package/dist/sdk/workspace-contracts-cache.js +1 -1
  676. package/dist/sdk/workspace-contracts.js +1 -1
  677. package/dist/sdk/workspace-memory.js +2 -2
  678. package/dist/sdk/workspace-recipe.js +1 -1
  679. package/dist/sdk/workspace-snapshot.js +5 -4
  680. package/dist/sdk/workspace-transaction-gc.js +1 -1
  681. package/dist/sdk/workspace-transaction.js +2 -2
  682. package/dist/sdk/workspace.js +3 -2
  683. package/dist/types/index.js +1 -1
  684. package/dist/types.js +1 -1
  685. package/docs/AGENT_EVIDENCE_CONSISTENCY.md +88 -0
  686. package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +25 -0
  687. package/docs/GET_READ_EVIDENCE.md +68 -0
  688. package/docs/OUTPUT_PROJECTION_CONTRACTS.md +23 -0
  689. package/docs/README.md +2 -0
  690. package/docs/SDK_AUDITED_MUTATIONS.md +35 -0
  691. package/docs/TESTING.md +8 -0
  692. package/docs/ecosystem-review-2026-09-28.json +2864 -3157
  693. package/marketplace.json +2 -2
  694. package/package.json +1 -1
  695. package/packages/pm-beads/package.json +1 -1
  696. package/packages/pm-calendar/package.json +1 -1
  697. package/packages/pm-command-kit/package.json +1 -1
  698. package/packages/pm-digital-twin/package.json +1 -1
  699. package/packages/pm-governance-audit/package.json +1 -1
  700. package/packages/pm-guide-shell/package.json +1 -1
  701. package/packages/pm-kanban/package.json +1 -1
  702. package/packages/pm-lifecycle-hooks/package.json +1 -1
  703. package/packages/pm-linked-test-adapters/package.json +1 -1
  704. package/packages/pm-search-advanced/package.json +1 -1
  705. package/packages/pm-templates/package.json +1 -1
  706. package/packages/pm-todos/package.json +1 -1
  707. package/packages/pm-vcs/extensions/vcs/index.ts +4 -2
  708. package/packages/pm-vcs/package.json +1 -1
  709. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  710. package/plugins/pm-claude/package.json +2 -2
  711. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  712. package/plugins/pm-codex/package.json +2 -2
  713. package/plugins/pm-codex/plugin.json +1 -1
  714. package/scripts/finalize-build.mjs +3 -2
  715. package/dist/cli-bundle/chunks/chunk-3AF2R3Y6.js +0 -6
  716. package/dist/cli-bundle/chunks/chunk-6ST3SCQ6.js +0 -2
  717. package/dist/cli-bundle/chunks/chunk-6Z4IV2MC.js +0 -8
  718. package/dist/cli-bundle/chunks/chunk-DEZPZOQ7.js +0 -2
  719. package/dist/cli-bundle/chunks/chunk-FW5LJXQY.js +0 -31
  720. package/dist/cli-bundle/chunks/chunk-H2DZW6I6.js +0 -3
  721. package/dist/cli-bundle/chunks/chunk-H7CXQBGQ.js +0 -2
  722. package/dist/cli-bundle/chunks/chunk-KP7NBQK3.js +0 -80
  723. package/dist/cli-bundle/chunks/chunk-MKXBCBAN.js +0 -20
  724. package/dist/cli-bundle/chunks/chunk-QPKQKSQU.js +0 -238
  725. package/dist/cli-bundle/chunks/chunk-SGFQQXFD.js +0 -2
  726. package/dist/cli-bundle/chunks/chunk-YCBGZF3T.js +0 -2
  727. package/dist/cli-bundle/chunks/chunk-YDWKGUQU.js +0 -3
  728. package/dist/cli-bundle/chunks/register-mutation-5PT3NW3A.js +0 -20
  729. package/dist/cli-bundle/chunks/register-operations-QDDQOAAV.js +0 -2
  730. package/dist/cli-bundle/chunks/register-setup-BBX67YMA.js +0 -2
  731. package/dist/cli-bundle/focused-chunks/chunk-4FFPGNCJ.js +0 -6
  732. package/dist/cli-bundle/focused-chunks/chunk-73DA7ISY.js +0 -75
  733. package/dist/cli-bundle/focused-chunks/chunk-E754JDLY.js +0 -2
  734. package/dist/cli-bundle/focused-chunks/chunk-FKK2HI3S.js +0 -2
  735. package/dist/cli-bundle/focused-chunks/chunk-GMYUNHST.js +0 -3
  736. package/dist/cli-bundle/focused-chunks/chunk-HIA2ZF64.js +0 -12
  737. package/dist/cli-bundle/focused-chunks/chunk-UTRSM3ZK.js +0 -8
  738. package/dist/cli-bundle/focused-chunks/chunk-VVWYI2X7.js +0 -2
  739. package/dist/cli-bundle/focused-chunks/chunk-WAJNX4RN.js +0 -20
  740. package/dist/cli-bundle/focused-chunks/chunk-WCY6HRZO.js +0 -30
  741. package/dist/cli-bundle/focused-chunks/chunk-YC32ZSLS.js +0 -165
  742. package/dist/cli-bundle/focused-chunks/chunk-ZIXFMIUL.js +0 -3
@@ -1,7 +1,9 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="24554781-3fa2-53de-98b1-467843de8560")}catch(e2){}})();import{encode as encodeToon}from"@toon-format/toon";import{isDeepStrictEqual}from"node:util";import{CONFIDENCE_TEXT_VALUES,ISSUE_SEVERITY_VALUES,PLAN_STEP_STATUS_VALUES,RECURRENCE_FREQUENCY_VALUES,RECURRENCE_WEEKDAY_VALUES,STATUS_VALUES,weekdayOrderIndex}from"../../types/index.js";import{coerceRuntimeFieldValue}from"../schema/runtime-field-values.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../schema/runtime-schema.js";import{BASELINE_ITEM_FORMAT_VERSION,normalizeItemFormatVersion}from"./item-format-version.js";import{normalizeStatusInput}from"./status.js";import{decodeToonItemContent}from"./toon-decode.js";import{EXIT_CODE,ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{findFirstMergeConflictMarker}from"../shared/conflict-markers.js";import{PmCliError}from"../shared/errors.js";import{orderObject}from"../shared/serialization.js";import{compareTimestampStrings,isTimestampLiteral}from"../shared/time.js";import{coerceFiniteNumber}from"../shared/primitives.js";const LINKED_TEST_PM_CONTEXT_MODE_VALUES=new Set(["schema","tracker","auto","none"]);const LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES=new Set(["source","isolated","snapshot"]);const LINKED_TEST_TRUST_REASON_VALUES=new Set(["legacy","local_mutation","local_source_ref","acknowledged","invalid_provenance","foreign_source_ref"]);const ITEM_TEST_RUN_STATUS_VALUES=new Set(["passed","failed","stopped","canceled"]);const PLAN_STEP_STATUS_SET=new Set(PLAN_STEP_STATUS_VALUES);function normalizePathValue(value){return value.replaceAll("\\","/")}function firstNonZeroComparison(comparisons){for(const comparison of comparisons){if(comparison!==0){return comparison}}return 0}function deleteUndefinedFields(record){for(const[key,value]of Object.entries(record)){if(value===void 0){delete record[key]}}}const REQUIRED_STRING_FIELDS=["id","title","description","created_at","updated_at"];const STATIC_ITEM_METADATA_FIELD_SET=new Set(ITEM_METADATA_KEY_ORDER);function resolveRuntimeSchemaValidationContext(options){if(!options?.schema){return void 0}return{statusRegistry:resolveRuntimeStatusRegistry(options.schema),fieldRegistry:resolveRuntimeFieldRegistry(options.schema),unknownFieldPolicy:options.schema.unknown_field_policy??"allow",extensionFieldNames:new Set(options.extensionFieldNames??[]),onWarning:options.onWarning}}function runtimeFieldRequiredForType(definition,typeName){if(!definition.required){return false}if(definition.required_types.length===0){return true}return definition.required_types.map(value=>value.toLowerCase()).includes(typeName.trim().toLowerCase())}function validationError(message){const field=message.match(/^([a-z_][\w.]*)\s/u)?.[1];throw new PmCliError(`Invalid item metadata: ${message}`,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_invalid",reason:message.includes("required")?"missing_required_field":"schema_validation_error",...field?{field}:{},required:"Provide an item document whose metadata satisfies the active runtime schema.",why:message})}function documentSyntaxError(format,message){throw new PmCliError(message,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_invalid",reason:"syntax_error",format,required:`Provide a syntactically valid ${format==="toon"?"TOON":"JSON Markdown"} item document.`,why:"The document could not be decoded far enough to validate item metadata."})}function buildKnownItemMetadataKeys(runtimeContext){const knownKeys=new Set(STATIC_ITEM_METADATA_FIELD_SET);for(const definition of runtimeContext.fieldRegistry?.definitions??[]){knownKeys.add(definition.metadata_key)}for(const fieldName of runtimeContext.extensionFieldNames){knownKeys.add(fieldName)}return knownKeys}function assertItemMetadataCondition(condition,message){if(!condition){validationError(message)}}function requireItemMetadataRecord(value,message){if(typeof value!=="object"||value===null||Array.isArray(value)){validationError(message)}return value}function assertTimestampField(record,fieldName){const rawValue=record[fieldName];assertItemMetadataCondition(typeof rawValue==="string",`${fieldName} must be a string`);const timestamp=rawValue;assertItemMetadataCondition(isTimestampLiteral(timestamp),`${fieldName} must be a valid ISO timestamp`)}function assertPositiveIntegerField(record,fieldName,messagePrefix){const value=record[fieldName];if(value===void 0){return}assertItemMetadataCondition(typeof value==="number"&&Number.isInteger(value)&&value>=1,`${messagePrefix} must be an integer >= 1`)}function assertOptionalTimestampString(record,fieldName,messagePrefix){const value=record[fieldName];if(value===void 0){return}assertItemMetadataCondition(typeof value==="string",`${messagePrefix} must be a string`);assertItemMetadataCondition(isTimestampLiteral(value),`${messagePrefix} must be a valid ISO timestamp`)}function assertRecurrenceWeekdays(value){if(value===void 0){return}assertItemMetadataCondition(Array.isArray(value),"event.recurrence.by_weekday must be an array");for(const weekday of value){assertItemMetadataCondition(typeof weekday==="string","event.recurrence.by_weekday entries must be strings");const normalizedWeekday=weekday.trim().toLowerCase();assertItemMetadataCondition(RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday),`event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(", ")}`)}}function assertRecurrenceMonthDays(value){if(value===void 0){return}assertItemMetadataCondition(Array.isArray(value),"event.recurrence.by_month_day must be an array");for(const day of value){assertItemMetadataCondition(typeof day==="number"&&Number.isInteger(day)&&day>=1&&day<=31,"event.recurrence.by_month_day entries must be integers 1..31")}}function assertRecurrenceExdates(value){if(value===void 0){return}assertItemMetadataCondition(Array.isArray(value),"event.recurrence.exdates must be an array");for(const exdate of value){assertItemMetadataCondition(typeof exdate==="string","event.recurrence.exdates entries must be strings");assertItemMetadataCondition(isTimestampLiteral(exdate),"event.recurrence.exdates entries must be valid ISO timestamps")}}function assertValidRecurrenceRule(recurrence){const recurrenceRecord=requireItemMetadataRecord(recurrence,"event.recurrence must be an object");assertItemMetadataCondition(typeof recurrenceRecord.freq==="string","event.recurrence.freq must be a string");const frequency=recurrenceRecord.freq.trim().toLowerCase();assertItemMetadataCondition(RECURRENCE_FREQUENCY_VALUES.includes(frequency),`event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(", ")}`);assertPositiveIntegerField(recurrenceRecord,"interval","event.recurrence.interval");assertPositiveIntegerField(recurrenceRecord,"count","event.recurrence.count");assertOptionalTimestampString(recurrenceRecord,"until","event.recurrence.until");assertRecurrenceWeekdays(recurrenceRecord.by_weekday);assertRecurrenceMonthDays(recurrenceRecord.by_month_day);assertRecurrenceExdates(recurrenceRecord.exdates)}function assertRequiredItemMetadataFields(record){for(const fieldName of REQUIRED_STRING_FIELDS){assertItemMetadataCondition(typeof record[fieldName]==="string",`${fieldName} is required and must be a string`)}const itemType=record.type;assertItemMetadataCondition(typeof itemType==="string"&&itemType.trim().length>0,"type must be a non-empty string");const formatVersion=record.pm_format_version;if(formatVersion!==void 0){assertItemMetadataCondition(typeof formatVersion==="number"&&Number.isInteger(formatVersion)&&formatVersion>=BASELINE_ITEM_FORMAT_VERSION,`pm_format_version must be an integer >= ${BASELINE_ITEM_FORMAT_VERSION}`)}return itemType}function assertStatusItemMetadataField(record,runtimeContext){const status=record.status;assertItemMetadataCondition(typeof status==="string"&&status.trim().length>0,"status must be a non-empty string");const statusRegistry=runtimeContext?.statusRegistry;const normalizedStatus=normalizeStatusInput(status,statusRegistry);const statusDomain=statusRegistry?statusRegistry.definitions.map(definition=>definition.id):[...STATUS_VALUES];assertItemMetadataCondition(normalizedStatus!==void 0,`status must be one of: ${statusDomain.join(", ")}`)}function assertPriorityAndTags(record){const priority=record.priority;assertItemMetadataCondition(typeof priority==="number"&&Number.isInteger(priority)&&[0,1,2,3,4].includes(priority),"priority must be an integer 0..4");const tags=record.tags;assertItemMetadataCondition(Array.isArray(tags),"tags must be an array");for(const tag of tags){assertItemMetadataCondition(typeof tag==="string","tags entries must be strings")}}function assertConfidenceItemMetadataField(record){const confidence=record.confidence;if(confidence===void 0){return}if(typeof confidence==="number"){assertItemMetadataCondition(Number.isInteger(confidence)&&confidence>=0&&confidence<=100,"confidence number value must be an integer 0..100");return}if(typeof confidence==="string"){const normalizedConfidence=confidence.trim().toLowerCase();const isKnownTextConfidence=normalizedConfidence==="med"||CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence);assertItemMetadataCondition(isKnownTextConfidence,`confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES,"med"].join(", ")}`);return}assertItemMetadataCondition(false,"confidence must be a number or string")}function assertSeverityItemMetadataField(record){const severity=record.severity;if(severity===void 0){return}if(typeof severity!=="string"){validationError("severity must be a string")}const normalizedSeverity=severity.trim().toLowerCase();const isKnownSeverity=normalizedSeverity==="med"||ISSUE_SEVERITY_VALUES.includes(normalizedSeverity);assertItemMetadataCondition(isKnownSeverity,`severity value must be one of: ${[...ISSUE_SEVERITY_VALUES,"med"].join(", ")}`)}function assertRegressionItemMetadataField(record){if(record.regression!==void 0&&typeof record.regression!=="boolean"){validationError("regression must be a boolean")}}function assertReminderEntries(record){const reminders=record.reminders;if(reminders===void 0){return}assertItemMetadataCondition(Array.isArray(reminders),"reminders must be an array");for(const reminder of reminders){const reminderRecord=requireItemMetadataRecord(reminder,"reminders entries must be objects");assertItemMetadataCondition(typeof reminderRecord.at==="string","reminder.at must be a string");assertItemMetadataCondition(isTimestampLiteral(reminderRecord.at),"reminder.at must be a valid ISO timestamp");assertItemMetadataCondition(typeof reminderRecord.text==="string","reminder.text must be a string");assertItemMetadataCondition(reminderRecord.text.trim().length>0,"reminder.text must not be empty")}}function assertEventStringFields(eventRecord){for(const stringField of["title","description","location","timezone"]){if(eventRecord[stringField]!==void 0){assertItemMetadataCondition(typeof eventRecord[stringField]==="string",`event.${stringField} must be a string`);assertItemMetadataCondition(eventRecord[stringField].trim().length>0,`event.${stringField} must not be empty`)}}}function assertEventRecurrence(eventRecord){if(eventRecord.recurrence===void 0){return}assertValidRecurrenceRule(eventRecord.recurrence);if(eventRecord.recurrence.until!==void 0){assertItemMetadataCondition(compareTimestampStrings(eventRecord.recurrence.until,eventRecord.start_at)>=0,"event.recurrence.until must be at or after event.start_at")}}function assertCalendarEventEntry(event){const eventRecord=requireItemMetadataRecord(event,"events entries must be objects");assertItemMetadataCondition(typeof eventRecord.start_at==="string","event.start_at must be a string");assertItemMetadataCondition(isTimestampLiteral(eventRecord.start_at),"event.start_at must be a valid ISO timestamp");if(eventRecord.end_at!==void 0){assertItemMetadataCondition(typeof eventRecord.end_at==="string","event.end_at must be a string");assertItemMetadataCondition(isTimestampLiteral(eventRecord.end_at),"event.end_at must be a valid ISO timestamp");assertItemMetadataCondition(compareTimestampStrings(eventRecord.end_at,eventRecord.start_at)>0,"event.end_at must be after event.start_at")}assertEventStringFields(eventRecord);if(eventRecord.all_day!==void 0){assertItemMetadataCondition(typeof eventRecord.all_day==="boolean","event.all_day must be a boolean")}assertEventRecurrence(eventRecord)}function assertCalendarEvents(record){const events=record.events;if(events===void 0){return}assertItemMetadataCondition(Array.isArray(events),"events must be an array");for(const event of events){assertCalendarEventEntry(event)}}function assertOptionalStringFields(record){for(const fieldName of["source_type","source_owner","design","external_ref"]){const value=record[fieldName];if(value!==void 0){assertItemMetadataCondition(typeof value==="string",`${fieldName} must be a string`)}}}function assertTypeOptionsField(record){const typeOptions=record.type_options;if(typeOptions===void 0){return}const typeOptionsRecord=requireItemMetadataRecord(typeOptions,"type_options must be an object");for(const[optionKey,optionValue]of Object.entries(typeOptionsRecord)){assertItemMetadataCondition(optionKey.trim().length>0,"type_options keys must be non-empty");assertItemMetadataCondition(typeof optionValue==="string","type_options values must be strings");const optionText=optionValue;assertItemMetadataCondition(optionText.trim().length>0,"type_options values must be non-empty strings")}}function coerceRuntimeItemMetadataFields(record,itemType,runtimeContext){if(!runtimeContext?.fieldRegistry){return}for(const definition of runtimeContext.fieldRegistry.definitions){const fieldValue=record[definition.metadata_key];if(fieldValue===void 0){if(runtimeFieldRequiredForType(definition,itemType)){validationError(`missing required schema field: ${definition.metadata_key}`)}continue}try{record[definition.metadata_key]=coerceRuntimeFieldValue(definition,fieldValue,`metadata field "${definition.metadata_key}"`)}catch(error){validationError(String(error?.message).replace(/^Invalid\s+/u,""))}}}function assertRuntimeUnknownItemMetadataFields(record,runtimeContext){if(!runtimeContext||runtimeContext.unknownFieldPolicy==="allow"){return}const knownKeys=buildKnownItemMetadataKeys(runtimeContext);const unknownKeys=Object.keys(record).filter(key=>!knownKeys.has(key)).sort((left,right)=>left.localeCompare(right));if(unknownKeys.length===0){return}if(runtimeContext.unknownFieldPolicy==="reject"){validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`)}else{runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`)}}function assertValidItemMetadata(itemMetadata,runtimeContext){const record=requireItemMetadataRecord(itemMetadata,"item metadata must be an object");const itemType=assertRequiredItemMetadataFields(record);assertStatusItemMetadataField(record,runtimeContext);assertPriorityAndTags(record);assertConfidenceItemMetadataField(record);assertSeverityItemMetadataField(record);assertRegressionItemMetadataField(record);assertTimestampField(record,"created_at");assertTimestampField(record,"updated_at");if(record.deadline!==void 0){assertTimestampField(record,"deadline")}assertReminderEntries(record);assertCalendarEvents(record);assertOptionalTimestampString(record,"closed_at","closed_at");assertOptionalTimestampString(record,"completed_at","completed_at");assertOptionalStringFields(record);assertTypeOptionsField(record);coerceRuntimeItemMetadataFields(record,itemType,runtimeContext);assertRuntimeUnknownItemMetadataFields(record,runtimeContext)}function sortDependencies(values){if(!values||values.length===0)return void 0;return[...values].map(value=>({id:value.id.trim(),kind:value.kind,created_at:value.created_at,author:value.author?.trim()||void 0,source_kind:value.source_kind?.trim()||void 0,author_source:value.author_source})).sort((a,b)=>{const byCreated=compareTimestampStrings(a.created_at,b.created_at);if(byCreated!==0)return byCreated;const byId=a.id.localeCompare(b.id);if(byId!==0)return byId;const byKind=a.kind.localeCompare(b.kind);if(byKind!==0)return byKind;return(a.source_kind??"").localeCompare(b.source_kind??"")})}function sortLogValues(values){if(!values||values.length===0)return void 0;return[...values].sort((a,b)=>{const byCreated=compareTimestampStrings(a.created_at,b.created_at);if(byCreated!==0)return byCreated;const byText=a.text.localeCompare(b.text);if(byText!==0)return byText;return a.author.localeCompare(b.author)})}function sortReminders(values){if(!values||values.length===0)return void 0;const normalized=[...values].map(value=>({at:value.at,text:value.text.trim()})).filter(value=>value.text.length>0).sort((a,b)=>{const byAt=compareTimestampStrings(a.at,b.at);if(byAt!==0)return byAt;return a.text.localeCompare(b.text)});return normalized.length===0?void 0:normalized}function normalizeRecurrenceRule(value){if(!value){return void 0}const normalizedFrequency=value.freq.trim().toLowerCase();if(!RECURRENCE_FREQUENCY_VALUES.includes(normalizedFrequency)){return void 0}const byWeekday=Array.from(new Set((value.by_weekday??[]).map(weekday=>weekday.trim().toLowerCase()).filter(weekday=>RECURRENCE_WEEKDAY_VALUES.includes(weekday)))).sort((a,b)=>weekdayOrderIndex(a)-weekdayOrderIndex(b));const byMonthDay=Array.from(new Set((value.by_month_day??[]).filter(day=>Number.isInteger(day)&&day>=1&&day<=31).map(day=>day))).sort((a,b)=>a-b);const exdates=Array.from(new Set((value.exdates??[]).map(timestamp=>timestamp.trim()).filter(timestamp=>isTimestampLiteral(timestamp)))).sort((a,b)=>compareTimestampStrings(a,b));const normalized={freq:normalizedFrequency,interval:value.interval!==void 0&&value.interval>1?value.interval:void 0,count:value.count,until:value.until?.trim()||void 0,by_weekday:byWeekday.length>0?byWeekday:void 0,by_month_day:byMonthDay.length>0?byMonthDay:void 0,exdates:exdates.length>0?exdates:void 0};for(const[key,fieldValue]of Object.entries(normalized)){if(fieldValue===void 0){delete normalized[key]}}return normalized}function sortEvents(values){if(!Array.isArray(values)||values.length===0){return void 0}const normalized=[...values].map(normalizeCalendarEvent).sort(compareCalendarEvents);return normalized}function normalizeCalendarEvent(value){const event={start_at:value.start_at,end_at:value.end_at||void 0,title:value.title?.trim()||void 0,description:value.description?.trim()||void 0,location:value.location?.trim()||void 0,all_day:value.all_day,timezone:value.timezone?.trim()||void 0,recurrence:normalizeRecurrenceRule(value.recurrence)};deleteUndefinedFields(event);return event}function compareCalendarEvents(a,b){return firstNonZeroComparison([compareTimestampStrings(a.start_at,b.start_at),(a.end_at??"").localeCompare(b.end_at??""),(a.title??"").localeCompare(b.title??""),Number(Boolean(a.all_day))-Number(Boolean(b.all_day)),(a.timezone??"").localeCompare(b.timezone??""),(a.location??"").localeCompare(b.location??""),(a.description??"").localeCompare(b.description??""),JSON.stringify(a.recurrence??{}).localeCompare(JSON.stringify(b.recurrence??{}))])}function normalizeFiles(values){if(!values||values.length===0)return void 0;return values.map(value=>({path:normalizePathValue(value.path),scope:value.scope,note:value.note?.trim()||void 0}))}function normalizeTestRunSummaries(values){if(!values||values.length===0)return void 0;const normalized=values.map(normalizeTestRunSummary).filter(value=>value.run_id.length>0&&value.started_at.length>0&&value.finished_at.length>0&&value.recorded_at.length>0).sort((a,b)=>firstNonZeroComparison([compareTimestampStrings(a.recorded_at,b.recorded_at),a.run_id.localeCompare(b.run_id),a.kind.localeCompare(b.kind)]));return normalized.length>0?normalized:void 0}function normalizeNonNegativeInteger(value){return typeof value==="number"&&Number.isFinite(value)&&value>=0?Math.floor(value):void 0}function normalizePositiveInteger(value){return typeof value==="number"&&Number.isFinite(value)&&value>=1?Math.floor(value):void 0}function stringOrEmpty(value){return typeof value==="string"?value:""}function normalizeTestRunMeasurements(value){if(!Array.isArray(value))return void 0;const normalized=value.filter(measurement=>measurement!==null&&typeof measurement==="object"&&typeof measurement.name==="string"&&measurement.name.trim().length>0&&typeof measurement.value==="number"&&Number.isFinite(measurement.value)&&typeof measurement.recorded_at==="string"&&measurement.recorded_at.trim().length>0).map(measurement=>({name:measurement.name.trim(),value:measurement.value,unit:typeof measurement.unit==="string"?measurement.unit.trim()||void 0:void 0,threshold:typeof measurement.threshold==="number"&&Number.isFinite(measurement.threshold)?measurement.threshold:void 0,recorded_at:measurement.recorded_at.trim()}));const deduplicated=[...new Map(normalized.map(measurement=>[measurement.name,measurement])).values()].sort((left,right)=>left.name.localeCompare(right.name)).slice(0,32);return deduplicated.length>0?deduplicated:void 0}function normalizeTestRunEnum(value,allowedValues){return typeof value==="string"&&allowedValues.has(value)?value:void 0}function normalizeTestRunExecutions(values){if(!Array.isArray(values))return void 0;const executions=values.filter(execution=>execution&&typeof execution.command==="string"&&execution.command.trim().length>0).slice(0,32).map(execution=>({command:execution.command.trim(),requested_pm_context_mode:normalizeTestRunEnum(execution.requested_pm_context_mode,LINKED_TEST_PM_CONTEXT_MODE_VALUES),pm_context_mode:normalizeTestRunEnum(execution.pm_context_mode,LINKED_TEST_PM_CONTEXT_MODE_VALUES),workspace_context_mode:normalizeTestRunEnum(execution.workspace_context_mode,LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES),trust_reason:normalizeTestRunEnum(execution.trust_reason,LINKED_TEST_TRUST_REASON_VALUES)}));return executions.length>0?executions:void 0}function normalizeTestRunSummary(value){const runId=typeof value.run_id==="string"?value.run_id.trim():"";const kind=value.kind==="test"||value.kind==="test-all"?value.kind:"test";const status=ITEM_TEST_RUN_STATUS_VALUES.has(value.status)?value.status:"failed";const summary={run_id:runId,kind,status,started_at:stringOrEmpty(value.started_at),finished_at:stringOrEmpty(value.finished_at),recorded_at:stringOrEmpty(value.recorded_at),attempt:normalizePositiveInteger(value.attempt),resumed_from:value.resumed_from?.trim()||void 0,passed:normalizeNonNegativeInteger(value.passed)??0,failed:normalizeNonNegativeInteger(value.failed)??0,skipped:normalizeNonNegativeInteger(value.skipped)??0,items:normalizeNonNegativeInteger(value.items),linked_tests:normalizeNonNegativeInteger(value.linked_tests),fail_on_skipped_triggered:value.fail_on_skipped_triggered===true?true:void 0,measurements:normalizeTestRunMeasurements(value.measurements),executions:normalizeTestRunExecutions(value.executions)};deleteUndefinedFields(summary);return summary}function sortTests(values){if(!Array.isArray(values)||values.length===0)return void 0;return values.map(normalizeLinkedTest)}function normalizeTrimmedStringList(value){if(!Array.isArray(value)){return void 0}const normalized=[...new Set(value.filter(entry=>typeof entry==="string").map(entry=>entry.trim()).filter(entry=>entry.length>0))].sort((a,b)=>a.localeCompare(b));return normalized.length>0?normalized:void 0}function isPlainObjectRecord(value){if(!value||typeof value!=="object"||Array.isArray(value)){return false}const prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function isUnsafeObjectKey(key){return key==="__proto__"||key==="constructor"||key==="prototype"}function normalizeStringRecord(value){if(!isPlainObjectRecord(value)){return void 0}const entries=Object.entries(value).map(([key,recordValue])=>[key.trim(),String(recordValue).trim()]).filter(([key,recordValue])=>key.length>0&&!isUnsafeObjectKey(key)&&recordValue.length>0).sort(([left],[right])=>left.localeCompare(right));return entries.length>0?Object.fromEntries(entries):void 0}function normalizeNumericRecord(value){if(!isPlainObjectRecord(value)){return void 0}const entries=Object.entries(value).map(([key,recordValue])=>[key.trim(),Number(recordValue)]).filter(([key,recordValue])=>key.length>0&&!isUnsafeObjectKey(key)&&Number.isFinite(recordValue)).sort(([left],[right])=>left.localeCompare(right));return entries.length>0?Object.fromEntries(entries):void 0}function normalizeLinkedTestContextMode(value){const normalized=value?.trim().toLowerCase();if(!normalized||!LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)){return void 0}return normalized}function normalizeLinkedTestWorkspaceContextMode(value){const normalized=value?.trim().toLowerCase();if(!normalized||!LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES.has(normalized)){return void 0}return normalized}function normalizeLinkedTestProvenance(value,invalid){if(invalid===true){return{provenance_invalid:true}}if(value===void 0){return{}}if(!isPlainObjectRecord(value)){return{provenance_invalid:true}}const author=trimStringOrUndefined(value.author);const createdAt=trimStringOrUndefined(value.created_at);const sourceKind=value.source_kind;if(!author||!createdAt||!isTimestampLiteral(createdAt)||sourceKind!=="local_mutation"&&sourceKind!=="merge_union"){return{provenance_invalid:true}}return{provenance:{author,created_at:createdAt,source_kind:sourceKind,source_ref:trimStringOrUndefined(value.source_ref)}}}function normalizeLinkedTest(value){const test={command:value.command?.trim()||void 0,path:value.path?normalizePathValue(value.path):void 0,scope:value.scope,timeout_seconds:typeof value.timeout_seconds==="number"&&Number.isFinite(value.timeout_seconds)&&value.timeout_seconds>0?value.timeout_seconds:void 0,pm_context_mode:normalizeLinkedTestContextMode(value.pm_context_mode),workspace_context_mode:normalizeLinkedTestWorkspaceContextMode(value.workspace_context_mode),...normalizeLinkedTestProvenance(value.provenance,value.provenance_invalid),env_set:normalizeStringRecord(value.env_set),env_clear:normalizeTrimmedStringList(value.env_clear),shared_host_safe:value.shared_host_safe===true?true:void 0,assert_stdout_contains:normalizeTrimmedStringList(value.assert_stdout_contains),assert_stdout_regex:normalizeTrimmedStringList(value.assert_stdout_regex),assert_stderr_contains:normalizeTrimmedStringList(value.assert_stderr_contains),assert_stderr_regex:normalizeTrimmedStringList(value.assert_stderr_regex),assert_stdout_min_lines:normalizeNonNegativeInteger(value.assert_stdout_min_lines),assert_json_field_equals:normalizeStringRecord(value.assert_json_field_equals),assert_json_field_gte:normalizeNumericRecord(value.assert_json_field_gte),note:value.note?.trim()||void 0};deleteUndefinedFields(test);return test}function sortDocs(values){if(!values||values.length===0)return void 0;return[...values].map(value=>({path:normalizePathValue(value.path),scope:value.scope,note:value.note?.trim()||void 0})).sort((a,b)=>{const byScope=a.scope.localeCompare(b.scope);if(byScope!==0)return byScope;const byPath=a.path.localeCompare(b.path);if(byPath!==0)return byPath;return(a.note??"").localeCompare(b.note??"")})}function trimStringOrUndefined(value){if(typeof value!=="string")return void 0;const trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function normalizePlanStepLinks(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const id=trimStringOrUndefined(record.id);const kind=trimStringOrUndefined(record.kind);if(!id||!kind)continue;const link={id,kind};const note=trimStringOrUndefined(record.note);if(note)link.note=note;if(record.required_before_step===true)link.required_before_step=true;out.push(link)}return out.length>0?out:void 0}function normalizePlanStepFiles(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const path=trimStringOrUndefined(record.path);if(!path)continue;const file={path:normalizePathValue(path)};if(record.scope==="project"||record.scope==="global")file.scope=record.scope;const note=trimStringOrUndefined(record.note);if(note)file.note=note;out.push(file)}return out.length>0?out:void 0}function normalizePlanStepTests(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const command=trimStringOrUndefined(record.command);const path=trimStringOrUndefined(record.path);if(!command&&!path)continue;const test={};if(command)test.command=command;if(path)test.path=normalizePathValue(path);const note=trimStringOrUndefined(record.note);if(note)test.note=note;out.push(test)}return out.length>0?out:void 0}function normalizePlanStepDocs(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const path=trimStringOrUndefined(record.path);if(!path)continue;const doc={path:normalizePathValue(path)};if(record.scope==="project"||record.scope==="global")doc.scope=record.scope;const note=trimStringOrUndefined(record.note);if(note)doc.note=note;out.push(doc)}return out.length>0?out:void 0}function normalizePlanStepEntry(entry){if(entry===null||typeof entry!=="object"){return void 0}const record=entry;const id=trimStringOrUndefined(record.id);const title=trimStringOrUndefined(record.title);const statusRaw=trimStringOrUndefined(record.status);const status=statusRaw&&PLAN_STEP_STATUS_SET.has(statusRaw)?statusRaw:void 0;const order=coerceFiniteNumber(record.order)??Number.NaN;const created_at=typeof record.created_at==="string"?record.created_at:"";const updated_at=typeof record.updated_at==="string"?record.updated_at:"";if(!id||!title||!status||!Number.isFinite(order)||!created_at||!updated_at){return void 0}const step={id,order,title,status,created_at,updated_at};applyPlanStepOptionalFields(step,record);return step}function applyPlanStepOptionalFields(step,record){const stringFields=[["body","body"],["owner","owner"],["evidence","evidence"],["blocked_reason","blocked_reason"],["superseded_by","superseded_by"]];for(const[target,source]of stringFields){const value=trimStringOrUndefined(record[source]);if(value){step[target]=value}}const completedAt=typeof record.completed_at==="string"?record.completed_at:void 0;if(completedAt&&completedAt.length>0){step.completed_at=completedAt}const collectionFields=[["linked_items","linked_items",normalizePlanStepLinks],["files","files",normalizePlanStepFiles],["tests","tests",normalizePlanStepTests],["docs","docs",normalizePlanStepDocs]];for(const[target,source,normalize]of collectionFields){const value=normalize(record[source]);if(value){step[target]=value}}}function normalizePlanSteps(value){if(!Array.isArray(value))return void 0;const out=value.flatMap(entry=>{const step=normalizePlanStepEntry(entry);return step?[step]:[]});out.sort((left,right)=>left.order-right.order);return out.length>0?out:void 0}function normalizePlanDecisions(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const ts=typeof record.ts==="string"?record.ts:"";const author=typeof record.author==="string"?record.author:"";const decision=trimStringOrUndefined(record.decision);if(!ts||!author||!decision)continue;const item={ts,author,decision};const rationale=trimStringOrUndefined(record.rationale);if(rationale)item.rationale=rationale;const evidence=trimStringOrUndefined(record.evidence);if(evidence)item.evidence=evidence;const stepId=trimStringOrUndefined(record.step_id);if(stepId)item.step_id=stepId;out.push(item)}return out.length>0?out:void 0}function normalizePlanDiscoveries(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const ts=typeof record.ts==="string"?record.ts:"";const author=typeof record.author==="string"?record.author:"";const text=trimStringOrUndefined(record.text);if(!ts||!author||!text)continue;const item={ts,author,text};const stepId=trimStringOrUndefined(record.step_id);if(stepId)item.step_id=stepId;out.push(item)}return out.length>0?out:void 0}function normalizePlanValidation(value){if(!Array.isArray(value))return void 0;const out=[];for(const entry of value){if(entry===null||typeof entry!=="object")continue;const record=entry;const text=trimStringOrUndefined(record.text);if(!text)continue;const item={text};const command=trimStringOrUndefined(record.command);if(command)item.command=command;const expected=trimStringOrUndefined(record.expected);if(expected)item.expected=expected;out.push(item)}return out.length>0?out:void 0}function normalizeTypeOptions(values){if(!values){return void 0}const normalizedEntries=Object.entries(values).map(([key,value])=>[key.trim(),value.trim()]).filter(([key,value])=>key.length>0&&value.length>0).sort((left,right)=>left[0].localeCompare(right[0]));if(normalizedEntries.length===0){return void 0}return Object.fromEntries(normalizedEntries)}function normalizeBody(body){let start=0;while(start<body.length&&body[start]==="\n"){start+=1}return body.slice(start).trimEnd()}function normalizeConfidenceValue(value){if(value===void 0){return void 0}if(typeof value==="number"){return value}const normalized=value.trim().toLowerCase();if(normalized==="med"){return"medium"}if(CONFIDENCE_TEXT_VALUES.includes(normalized)){return normalized}return void 0}function normalizeSeverityValue(value){if(value===void 0){return void 0}const normalized=value.trim().toLowerCase();if(normalized==="med"){return"medium"}if(ISSUE_SEVERITY_VALUES.includes(normalized)){return normalized}return void 0}function emptyStringToUndefined(value){return value||void 0}function copyExtensionItemMetadataFields(normalized,source){const targetRecord=normalized;const sourceRecord=source;for(const[key,value]of Object.entries(sourceRecord)){if(isUnsafeObjectKey(key)||Object.prototype.hasOwnProperty.call(targetRecord,key)||value===void 0){continue}targetRecord[key]=value}}function coerceNormalizedRuntimeFields(normalized,runtimeContext){if(!runtimeContext?.fieldRegistry){return}const record=normalized;for(const definition of runtimeContext.fieldRegistry.definitions){const currentValue=record[definition.metadata_key];if(currentValue===void 0){continue}record[definition.metadata_key]=coerceRuntimeFieldValue(definition,currentValue,`metadata field "${definition.metadata_key}"`)}}function assertNormalizedUnknownFields(normalized,runtimeContext){if(!runtimeContext||runtimeContext.unknownFieldPolicy==="allow"){return}const knownKeys=buildKnownItemMetadataKeys(runtimeContext);const record=normalized;const unknownKeys=Object.keys(record).filter(key=>!knownKeys.has(key)).sort((left,right)=>left.localeCompare(right));if(unknownKeys.length>0&&runtimeContext.unknownFieldPolicy==="reject"){validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`)}if(unknownKeys.length>0){runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`)}}function normalizeItemMetadata(itemMetadata,options={}){const runtimeContext=resolveRuntimeSchemaValidationContext(options);const normalizedStatus=normalizeStatusInput(itemMetadata.status,runtimeContext?.statusRegistry)??itemMetadata.status;const tags=Array.from(new Set((Array.isArray(itemMetadata.tags)?itemMetadata.tags:[]).filter(tag=>typeof tag==="string").map(tag=>tag.trim().toLowerCase()).filter(Boolean))).sort((a,b)=>a.localeCompare(b));const normalized={id:itemMetadata.id,title:itemMetadata.title,description:itemMetadata.description,type:itemMetadata.type,pm_format_version:normalizeItemFormatVersion(itemMetadata.pm_format_version),source_type:trimStringOrUndefined(itemMetadata.source_type),type_options:normalizeTypeOptions(itemMetadata.type_options),status:normalizedStatus,priority:itemMetadata.priority,tags,created_at:itemMetadata.created_at,updated_at:itemMetadata.updated_at,dependencies:sortDependencies(itemMetadata.dependencies),comments:sortLogValues(itemMetadata.comments),notes:sortLogValues(itemMetadata.notes),learnings:sortLogValues(itemMetadata.learnings),files:normalizeFiles(itemMetadata.files),tests:sortTests(itemMetadata.tests),test_runs:normalizeTestRunSummaries(itemMetadata.test_runs),docs:sortDocs(itemMetadata.docs),deadline:emptyStringToUndefined(itemMetadata.deadline),reminders:sortReminders(itemMetadata.reminders),events:sortEvents(itemMetadata.events),closed_at:emptyStringToUndefined(itemMetadata.closed_at),completed_at:emptyStringToUndefined(itemMetadata.completed_at),assignee:trimStringOrUndefined(itemMetadata.assignee),claim_principal:trimStringOrUndefined(itemMetadata.claim_principal),source_owner:trimStringOrUndefined(itemMetadata.source_owner),author:emptyStringToUndefined(itemMetadata.author),estimated_minutes:itemMetadata.estimated_minutes,acceptance_criteria:itemMetadata.acceptance_criteria??void 0,design:itemMetadata.design??void 0,external_ref:itemMetadata.external_ref??void 0,definition_of_ready:trimStringOrUndefined(itemMetadata.definition_of_ready),order:itemMetadata.order,goal:trimStringOrUndefined(itemMetadata.goal),objective:trimStringOrUndefined(itemMetadata.objective),value:trimStringOrUndefined(itemMetadata.value),impact:trimStringOrUndefined(itemMetadata.impact),outcome:trimStringOrUndefined(itemMetadata.outcome),why_now:trimStringOrUndefined(itemMetadata.why_now),parent:trimStringOrUndefined(itemMetadata.parent),reviewer:trimStringOrUndefined(itemMetadata.reviewer),risk:itemMetadata.risk??void 0,confidence:normalizeConfidenceValue(itemMetadata.confidence),sprint:trimStringOrUndefined(itemMetadata.sprint),release:trimStringOrUndefined(itemMetadata.release),blocked_by:trimStringOrUndefined(itemMetadata.blocked_by),blocked_reason:trimStringOrUndefined(itemMetadata.blocked_reason),unblock_note:trimStringOrUndefined(itemMetadata.unblock_note),reporter:trimStringOrUndefined(itemMetadata.reporter),severity:normalizeSeverityValue(itemMetadata.severity),environment:trimStringOrUndefined(itemMetadata.environment),repro_steps:trimStringOrUndefined(itemMetadata.repro_steps),resolution:trimStringOrUndefined(itemMetadata.resolution),expected_result:trimStringOrUndefined(itemMetadata.expected_result),actual_result:trimStringOrUndefined(itemMetadata.actual_result),affected_version:trimStringOrUndefined(itemMetadata.affected_version),fixed_version:trimStringOrUndefined(itemMetadata.fixed_version),component:trimStringOrUndefined(itemMetadata.component),regression:itemMetadata.regression,customer_impact:trimStringOrUndefined(itemMetadata.customer_impact),close_reason:emptyStringToUndefined(itemMetadata.close_reason),plan_mode:trimStringOrUndefined(itemMetadata.plan_mode),plan_scope:trimStringOrUndefined(itemMetadata.plan_scope),plan_harness:trimStringOrUndefined(itemMetadata.plan_harness),plan_resume_context:trimStringOrUndefined(itemMetadata.plan_resume_context),plan_steps:normalizePlanSteps(itemMetadata.plan_steps),plan_decisions:normalizePlanDecisions(itemMetadata.plan_decisions),plan_discoveries:normalizePlanDiscoveries(itemMetadata.plan_discoveries),plan_validation:normalizePlanValidation(itemMetadata.plan_validation)};copyExtensionItemMetadataFields(normalized,itemMetadata);coerceNormalizedRuntimeFields(normalized,runtimeContext);assertNormalizedUnknownFields(normalized,runtimeContext);deleteUndefinedFields(normalized);return normalized}function orderItemMetadata(itemMetadata){return orderObject(itemMetadata,ITEM_METADATA_KEY_ORDER)}function findJsonObjectEnd(content){let depth=0;let inString=false;let escaped=false;for(let i=0;i<content.length;i+=1){const char=content[i];if(inString){if(escaped){escaped=false;continue}if(char==="\\"){escaped=true;continue}if(char==='"'){inString=false}continue}if(char==='"'){inString=true;continue}if(char==="{"){depth+=1;continue}if(char==="}"){depth-=1;if(depth===0){return i}}}return-1}function splitFrontMatter(content){if(!content.startsWith("{")){return{frontMatter:"",body:content}}const end=findJsonObjectEnd(content);if(end<0){return{frontMatter:"",body:content}}const frontMatter=content.slice(0,end+1);const body=content.slice(end+1).replace(/^\r?\n+/,"");return{frontMatter,body}}function stripLeadingYamlDocument(content){const normalizedContent=content.charCodeAt(0)===65279?content.slice(1):content;const opener=normalizedContent.match(/^[ \t]*---[ \t]*(?:\r?\n|$)/);if(!opener){return{content:normalizedContent,stripped:false}}let cursor=opener[0].length;while(cursor<normalizedContent.length){const nextNewline=normalizedContent.indexOf("\n",cursor);const lineEnd=nextNewline===-1?normalizedContent.length:nextNewline;const line=normalizedContent.slice(cursor,lineEnd).replace(/\r$/,"");const afterLine=nextNewline===-1?lineEnd:lineEnd+1;if(line.trim()==="---"){return{content:normalizedContent.slice(afterLine).replace(/^\s+/,""),stripped:true}}cursor=afterLine}return{content:normalizedContent,stripped:false}}function normalizeParsedItemMetadata(itemMetadata,options){return normalizeItemMetadata(itemMetadata,{...options,onWarning:void 0})}function parseJsonMarkdownItemDocument(content,runtimeContext,options={}){const normalized=stripLeadingYamlDocument(content);if(normalized.stripped){options.onWarning?.("json_markdown_leading_yaml_frontmatter_ignored")}const{frontMatter,body}=splitFrontMatter(normalized.content);if(!frontMatter){const trimmed=content.trimStart();if(trimmed.startsWith("{")){documentSyntaxError("json_markdown","JSON front matter is not valid JSON")}documentSyntaxError("json_markdown","JSON Markdown item document is missing JSON front matter")}let parsed;try{parsed=JSON.parse(frontMatter)}catch{documentSyntaxError("json_markdown","JSON front matter is not valid JSON")}assertValidItemMetadata(parsed,runtimeContext);return{metadata:normalizeParsedItemMetadata(parsed,options),body:normalizeBody(body)}}function parseToonItemDocument(content,runtimeContext,options={}){let parsed;try{parsed=decodeToonItemContent(content).value}catch{documentSyntaxError("toon","TOON item document is not valid TOON")}assertItemMetadataCondition(typeof parsed==="object"&&parsed!==null&&!Array.isArray(parsed),"TOON item document must be an object");const record=parsed;if(!REQUIRED_STRING_FIELDS.some(fieldName=>Object.prototype.hasOwnProperty.call(record,fieldName))&&!Object.prototype.hasOwnProperty.call(record,"front_matter")){documentSyntaxError("toon","TOON input does not have the shape of an item document")}if(Object.prototype.hasOwnProperty.call(record,"front_matter")){assertValidItemMetadata(record.front_matter,runtimeContext);assertItemMetadataCondition(record.body===void 0||typeof record.body==="string","TOON item document body must be a string");return{metadata:normalizeParsedItemMetadata(record.front_matter,options),body:normalizeBody(typeof record.body==="string"?record.body:"")}}const{body,...itemMetadataRecord}=record;assertItemMetadataCondition(body===void 0||typeof body==="string","TOON item document body must be a string");assertValidItemMetadata(itemMetadataRecord,runtimeContext);return{metadata:normalizeParsedItemMetadata(itemMetadataRecord,options),body:normalizeBody(typeof body==="string"?body:"")}}function serializeJsonMarkdownItemDocument(document,options={}){const normalizedMetadata=normalizeItemMetadata(document.metadata,options);const orderedMetadata=orderItemMetadata(normalizedMetadata);const serializedMetadata=JSON.stringify(orderedMetadata,null,2);const normalizedBody=normalizeBody(document.body??"");if(!normalizedBody){return`${serializedMetadata}
2
- `}return`${serializedMetadata}
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e44f5fd8-80d0-57b0-bb1d-ab2e69a99e7e")}catch{}})();import{encode as encodeToon}from"@toon-format/toon";import{isDeepStrictEqual}from"node:util";import{CONFIDENCE_TEXT_VALUES,ISSUE_SEVERITY_VALUES,PLAN_STEP_STATUS_VALUES,RECURRENCE_FREQUENCY_VALUES,RECURRENCE_WEEKDAY_VALUES,STATUS_VALUES,weekdayOrderIndex}from"../../types/index.js";import{coerceRuntimeFieldValue}from"../schema/runtime-field-values.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../schema/runtime-schema.js";import{BASELINE_ITEM_FORMAT_VERSION,normalizeItemFormatVersion}from"./item-format-version.js";import{normalizeStatusInput}from"./status.js";import{decodeToonItemContent}from"./toon-decode.js";import{EXIT_CODE,ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{findFirstMergeConflictMarker}from"../shared/conflict-markers.js";import{PmCliError}from"../shared/errors.js";import{orderObject}from"../shared/serialization.js";import{compareTimestampStrings,isTimestampLiteral}from"../shared/time.js";import{coerceFiniteNumber}from"../shared/primitives.js";const LINKED_TEST_PM_CONTEXT_MODE_VALUES=new Set(["schema","tracker","auto","none"]),LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES=new Set(["source","isolated","snapshot"]),LINKED_TEST_TRUST_REASON_VALUES=new Set(["legacy","local_mutation","local_source_ref","acknowledged","invalid_provenance","foreign_source_ref"]),ITEM_TEST_RUN_STATUS_VALUES=new Set(["passed","failed","stopped","canceled"]),PLAN_STEP_STATUS_SET=new Set(PLAN_STEP_STATUS_VALUES);function normalizePathValue(value){return value.replaceAll("\\","/")}function firstNonZeroComparison(comparisons){for(const comparison of comparisons)if(comparison!==0)return comparison;return 0}function deleteUndefinedFields(record){for(const[key,value]of Object.entries(record))value===void 0&&delete record[key]}const REQUIRED_STRING_FIELDS=["id","title","description","created_at","updated_at"],STATIC_ITEM_METADATA_FIELD_SET=new Set(ITEM_METADATA_KEY_ORDER);function resolveRuntimeSchemaValidationContext(options){if(options?.schema)return{statusRegistry:resolveRuntimeStatusRegistry(options.schema),fieldRegistry:resolveRuntimeFieldRegistry(options.schema),unknownFieldPolicy:options.schema.unknown_field_policy??"allow",extensionFieldNames:new Set(options.extensionFieldNames??[]),onWarning:options.onWarning}}function runtimeFieldRequiredForType(definition,typeName){return definition.required?definition.required_types.length===0?!0:definition.required_types.map(value=>value.toLowerCase()).includes(typeName.trim().toLowerCase()):!1}function validationError(message){const field=message.match(/^([a-z_][\w.]*)\s/u)?.[1];throw new PmCliError(`Invalid item metadata: ${message}`,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_invalid",reason:message.includes("required")?"missing_required_field":"schema_validation_error",...field?{field}:{},required:"Provide an item document whose metadata satisfies the active runtime schema.",why:message})}function documentSyntaxError(format,message){throw new PmCliError(message,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_invalid",reason:"syntax_error",format,required:`Provide a syntactically valid ${format==="toon"?"TOON":"JSON Markdown"} item document.`,why:"The document could not be decoded far enough to validate item metadata."})}function buildKnownItemMetadataKeys(runtimeContext){const knownKeys=new Set(STATIC_ITEM_METADATA_FIELD_SET);for(const definition of runtimeContext.fieldRegistry?.definitions??[])knownKeys.add(definition.metadata_key);for(const fieldName of runtimeContext.extensionFieldNames)knownKeys.add(fieldName);return knownKeys}function assertItemMetadataCondition(condition,message){condition||validationError(message)}function requireItemMetadataRecord(value,message){return(typeof value!="object"||value===null||Array.isArray(value))&&validationError(message),value}function assertTimestampField(record,fieldName){const rawValue=record[fieldName];assertItemMetadataCondition(typeof rawValue=="string",`${fieldName} must be a string`),assertItemMetadataCondition(isTimestampLiteral(rawValue),`${fieldName} must be a valid ISO timestamp`)}function assertPositiveIntegerField(record,fieldName,messagePrefix){const value=record[fieldName];value!==void 0&&assertItemMetadataCondition(typeof value=="number"&&Number.isInteger(value)&&value>=1,`${messagePrefix} must be an integer >= 1`)}function assertOptionalTimestampString(record,fieldName,messagePrefix){const value=record[fieldName];value!==void 0&&(assertItemMetadataCondition(typeof value=="string",`${messagePrefix} must be a string`),assertItemMetadataCondition(isTimestampLiteral(value),`${messagePrefix} must be a valid ISO timestamp`))}function assertRecurrenceWeekdays(value){if(value!==void 0){assertItemMetadataCondition(Array.isArray(value),"event.recurrence.by_weekday must be an array");for(const weekday of value){assertItemMetadataCondition(typeof weekday=="string","event.recurrence.by_weekday entries must be strings");const normalizedWeekday=weekday.trim().toLowerCase();assertItemMetadataCondition(RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday),`event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(", ")}`)}}}function assertRecurrenceMonthDays(value){if(value!==void 0){assertItemMetadataCondition(Array.isArray(value),"event.recurrence.by_month_day must be an array");for(const day of value)assertItemMetadataCondition(typeof day=="number"&&Number.isInteger(day)&&day>=1&&day<=31,"event.recurrence.by_month_day entries must be integers 1..31")}}function assertRecurrenceExdates(value){if(value!==void 0){assertItemMetadataCondition(Array.isArray(value),"event.recurrence.exdates must be an array");for(const exdate of value)assertItemMetadataCondition(typeof exdate=="string","event.recurrence.exdates entries must be strings"),assertItemMetadataCondition(isTimestampLiteral(exdate),"event.recurrence.exdates entries must be valid ISO timestamps")}}function assertValidRecurrenceRule(recurrence){const recurrenceRecord=requireItemMetadataRecord(recurrence,"event.recurrence must be an object");assertItemMetadataCondition(typeof recurrenceRecord.freq=="string","event.recurrence.freq must be a string");const frequency=recurrenceRecord.freq.trim().toLowerCase();assertItemMetadataCondition(RECURRENCE_FREQUENCY_VALUES.includes(frequency),`event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(", ")}`),assertPositiveIntegerField(recurrenceRecord,"interval","event.recurrence.interval"),assertPositiveIntegerField(recurrenceRecord,"count","event.recurrence.count"),assertOptionalTimestampString(recurrenceRecord,"until","event.recurrence.until"),assertRecurrenceWeekdays(recurrenceRecord.by_weekday),assertRecurrenceMonthDays(recurrenceRecord.by_month_day),assertRecurrenceExdates(recurrenceRecord.exdates)}function assertRequiredItemMetadataFields(record){for(const fieldName of REQUIRED_STRING_FIELDS)assertItemMetadataCondition(typeof record[fieldName]=="string",`${fieldName} is required and must be a string`);const itemType=record.type;assertItemMetadataCondition(typeof itemType=="string"&&itemType.trim().length>0,"type must be a non-empty string");const formatVersion=record.pm_format_version;return formatVersion!==void 0&&assertItemMetadataCondition(typeof formatVersion=="number"&&Number.isInteger(formatVersion)&&formatVersion>=BASELINE_ITEM_FORMAT_VERSION,`pm_format_version must be an integer >= ${BASELINE_ITEM_FORMAT_VERSION}`),itemType}function assertStatusItemMetadataField(record,runtimeContext){const status=record.status;assertItemMetadataCondition(typeof status=="string"&&status.trim().length>0,"status must be a non-empty string");const statusRegistry=runtimeContext?.statusRegistry,normalizedStatus=normalizeStatusInput(status,statusRegistry),statusDomain=statusRegistry?statusRegistry.definitions.map(definition=>definition.id):[...STATUS_VALUES];assertItemMetadataCondition(normalizedStatus!==void 0,`status must be one of: ${statusDomain.join(", ")}`)}function assertPriorityAndTags(record){const priority=record.priority;assertItemMetadataCondition(typeof priority=="number"&&Number.isInteger(priority)&&[0,1,2,3,4].includes(priority),"priority must be an integer 0..4");const tags=record.tags;assertItemMetadataCondition(Array.isArray(tags),"tags must be an array");for(const tag of tags)assertItemMetadataCondition(typeof tag=="string","tags entries must be strings")}function assertConfidenceItemMetadataField(record){const confidence=record.confidence;if(confidence!==void 0){if(typeof confidence=="number"){assertItemMetadataCondition(Number.isInteger(confidence)&&confidence>=0&&confidence<=100,"confidence number value must be an integer 0..100");return}if(typeof confidence=="string"){const normalizedConfidence=confidence.trim().toLowerCase(),isKnownTextConfidence=normalizedConfidence==="med"||CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence);assertItemMetadataCondition(isKnownTextConfidence,`confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES,"med"].join(", ")}`);return}assertItemMetadataCondition(!1,"confidence must be a number or string")}}function assertSeverityItemMetadataField(record){const severity=record.severity;if(severity===void 0)return;typeof severity!="string"&&validationError("severity must be a string");const normalizedSeverity=severity.trim().toLowerCase(),isKnownSeverity=normalizedSeverity==="med"||ISSUE_SEVERITY_VALUES.includes(normalizedSeverity);assertItemMetadataCondition(isKnownSeverity,`severity value must be one of: ${[...ISSUE_SEVERITY_VALUES,"med"].join(", ")}`)}function assertRegressionItemMetadataField(record){record.regression!==void 0&&typeof record.regression!="boolean"&&validationError("regression must be a boolean")}function assertReminderEntries(record){const reminders=record.reminders;if(reminders!==void 0){assertItemMetadataCondition(Array.isArray(reminders),"reminders must be an array");for(const reminder of reminders){const reminderRecord=requireItemMetadataRecord(reminder,"reminders entries must be objects");assertItemMetadataCondition(typeof reminderRecord.at=="string","reminder.at must be a string"),assertItemMetadataCondition(isTimestampLiteral(reminderRecord.at),"reminder.at must be a valid ISO timestamp"),assertItemMetadataCondition(typeof reminderRecord.text=="string","reminder.text must be a string"),assertItemMetadataCondition(reminderRecord.text.trim().length>0,"reminder.text must not be empty")}}}function assertEventStringFields(eventRecord){for(const stringField of["title","description","location","timezone"])eventRecord[stringField]!==void 0&&(assertItemMetadataCondition(typeof eventRecord[stringField]=="string",`event.${stringField} must be a string`),assertItemMetadataCondition(eventRecord[stringField].trim().length>0,`event.${stringField} must not be empty`))}function assertEventRecurrence(eventRecord){eventRecord.recurrence!==void 0&&(assertValidRecurrenceRule(eventRecord.recurrence),eventRecord.recurrence.until!==void 0&&assertItemMetadataCondition(compareTimestampStrings(eventRecord.recurrence.until,eventRecord.start_at)>=0,"event.recurrence.until must be at or after event.start_at"))}function assertCalendarEventEntry(event){const eventRecord=requireItemMetadataRecord(event,"events entries must be objects");assertItemMetadataCondition(typeof eventRecord.start_at=="string","event.start_at must be a string"),assertItemMetadataCondition(isTimestampLiteral(eventRecord.start_at),"event.start_at must be a valid ISO timestamp"),eventRecord.end_at!==void 0&&(assertItemMetadataCondition(typeof eventRecord.end_at=="string","event.end_at must be a string"),assertItemMetadataCondition(isTimestampLiteral(eventRecord.end_at),"event.end_at must be a valid ISO timestamp"),assertItemMetadataCondition(compareTimestampStrings(eventRecord.end_at,eventRecord.start_at)>0,"event.end_at must be after event.start_at")),assertEventStringFields(eventRecord),eventRecord.all_day!==void 0&&assertItemMetadataCondition(typeof eventRecord.all_day=="boolean","event.all_day must be a boolean"),assertEventRecurrence(eventRecord)}function assertCalendarEvents(record){const events=record.events;if(events!==void 0){assertItemMetadataCondition(Array.isArray(events),"events must be an array");for(const event of events)assertCalendarEventEntry(event)}}function assertOptionalStringFields(record){for(const fieldName of["source_type","source_owner","design","external_ref"]){const value=record[fieldName];value!==void 0&&assertItemMetadataCondition(typeof value=="string",`${fieldName} must be a string`)}}function assertTypeOptionsField(record){const typeOptions=record.type_options;if(typeOptions===void 0)return;const typeOptionsRecord=requireItemMetadataRecord(typeOptions,"type_options must be an object");for(const[optionKey,optionValue]of Object.entries(typeOptionsRecord))assertItemMetadataCondition(optionKey.trim().length>0,"type_options keys must be non-empty"),assertItemMetadataCondition(typeof optionValue=="string","type_options values must be strings"),assertItemMetadataCondition(optionValue.trim().length>0,"type_options values must be non-empty strings")}function coerceRuntimeItemMetadataFields(record,itemType,runtimeContext){if(runtimeContext?.fieldRegistry)for(const definition of runtimeContext.fieldRegistry.definitions){const fieldValue=record[definition.metadata_key];if(fieldValue===void 0){runtimeFieldRequiredForType(definition,itemType)&&validationError(`missing required schema field: ${definition.metadata_key}`);continue}try{record[definition.metadata_key]=coerceRuntimeFieldValue(definition,fieldValue,`metadata field "${definition.metadata_key}"`)}catch(error){validationError(String(error?.message).replace(/^Invalid\s+/u,""))}}}function assertRuntimeUnknownItemMetadataFields(record,runtimeContext){if(!runtimeContext||runtimeContext.unknownFieldPolicy==="allow")return;const knownKeys=buildKnownItemMetadataKeys(runtimeContext),unknownKeys=Object.keys(record).filter(key=>!knownKeys.has(key)).sort((left,right)=>left.localeCompare(right));unknownKeys.length!==0&&(runtimeContext.unknownFieldPolicy==="reject"?validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`):runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`))}function assertValidItemMetadata(itemMetadata,runtimeContext){const record=requireItemMetadataRecord(itemMetadata,"item metadata must be an object"),itemType=assertRequiredItemMetadataFields(record);assertStatusItemMetadataField(record,runtimeContext),assertPriorityAndTags(record),assertConfidenceItemMetadataField(record),assertSeverityItemMetadataField(record),assertRegressionItemMetadataField(record),assertTimestampField(record,"created_at"),assertTimestampField(record,"updated_at"),record.deadline!==void 0&&assertTimestampField(record,"deadline"),assertReminderEntries(record),assertCalendarEvents(record),assertOptionalTimestampString(record,"closed_at","closed_at"),assertOptionalTimestampString(record,"completed_at","completed_at"),assertOptionalStringFields(record),assertTypeOptionsField(record),coerceRuntimeItemMetadataFields(record,itemType,runtimeContext),assertRuntimeUnknownItemMetadataFields(record,runtimeContext)}function sortDependencies(values){if(!(!values||values.length===0))return[...values].map(value=>({id:value.id.trim(),kind:value.kind,created_at:value.created_at,author:value.author?.trim()||void 0,source_kind:value.source_kind?.trim()||void 0,author_source:value.author_source})).sort((a,b)=>{const byCreated=compareTimestampStrings(a.created_at,b.created_at);if(byCreated!==0)return byCreated;const byId=a.id.localeCompare(b.id);if(byId!==0)return byId;const byKind=a.kind.localeCompare(b.kind);return byKind!==0?byKind:(a.source_kind??"").localeCompare(b.source_kind??"")})}function sortLogValues(values){if(!(!values||values.length===0))return[...values].sort((a,b)=>{const byCreated=compareTimestampStrings(a.created_at,b.created_at);if(byCreated!==0)return byCreated;const byText=a.text.localeCompare(b.text);return byText!==0?byText:a.author.localeCompare(b.author)})}function sortReminders(values){if(!values||values.length===0)return;const normalized=[...values].map(value=>({at:value.at,text:value.text.trim()})).filter(value=>value.text.length>0).sort((a,b)=>{const byAt=compareTimestampStrings(a.at,b.at);return byAt!==0?byAt:a.text.localeCompare(b.text)});return normalized.length===0?void 0:normalized}function normalizeRecurrenceRule(value){if(!value)return;const normalizedFrequency=value.freq.trim().toLowerCase();if(!RECURRENCE_FREQUENCY_VALUES.includes(normalizedFrequency))return;const byWeekday=Array.from(new Set((value.by_weekday??[]).map(weekday=>weekday.trim().toLowerCase()).filter(weekday=>RECURRENCE_WEEKDAY_VALUES.includes(weekday)))).sort((a,b)=>weekdayOrderIndex(a)-weekdayOrderIndex(b)),byMonthDay=Array.from(new Set((value.by_month_day??[]).filter(day=>Number.isInteger(day)&&day>=1&&day<=31).map(day=>day))).sort((a,b)=>a-b),exdates=Array.from(new Set((value.exdates??[]).map(timestamp=>timestamp.trim()).filter(timestamp=>isTimestampLiteral(timestamp)))).sort((a,b)=>compareTimestampStrings(a,b)),normalized={freq:normalizedFrequency,interval:value.interval!==void 0&&value.interval>1?value.interval:void 0,count:value.count,until:value.until?.trim()||void 0,by_weekday:byWeekday.length>0?byWeekday:void 0,by_month_day:byMonthDay.length>0?byMonthDay:void 0,exdates:exdates.length>0?exdates:void 0};for(const[key,fieldValue]of Object.entries(normalized))fieldValue===void 0&&delete normalized[key];return normalized}function sortEvents(values){return!Array.isArray(values)||values.length===0?void 0:[...values].map(normalizeCalendarEvent).sort(compareCalendarEvents)}function normalizeCalendarEvent(value){const event={start_at:value.start_at,end_at:value.end_at||void 0,title:value.title?.trim()||void 0,description:value.description?.trim()||void 0,location:value.location?.trim()||void 0,all_day:value.all_day,timezone:value.timezone?.trim()||void 0,recurrence:normalizeRecurrenceRule(value.recurrence)};return deleteUndefinedFields(event),event}function compareCalendarEvents(a,b){return firstNonZeroComparison([compareTimestampStrings(a.start_at,b.start_at),(a.end_at??"").localeCompare(b.end_at??""),(a.title??"").localeCompare(b.title??""),+!!a.all_day-+!!b.all_day,(a.timezone??"").localeCompare(b.timezone??""),(a.location??"").localeCompare(b.location??""),(a.description??"").localeCompare(b.description??""),JSON.stringify(a.recurrence??{}).localeCompare(JSON.stringify(b.recurrence??{}))])}function normalizeFiles(values){if(!(!values||values.length===0))return values.map(value=>({path:normalizePathValue(value.path),scope:value.scope,note:value.note?.trim()||void 0}))}function normalizeTestRunSummaries(values){if(!values||values.length===0)return;const normalized=values.map(normalizeTestRunSummary).filter(value=>value.run_id.length>0&&value.started_at.length>0&&value.finished_at.length>0&&value.recorded_at.length>0).sort((a,b)=>firstNonZeroComparison([compareTimestampStrings(a.recorded_at,b.recorded_at),a.run_id.localeCompare(b.run_id),a.kind.localeCompare(b.kind)]));return normalized.length>0?normalized:void 0}function normalizeNonNegativeInteger(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0?Math.floor(value):void 0}function normalizePositiveInteger(value){return typeof value=="number"&&Number.isFinite(value)&&value>=1?Math.floor(value):void 0}function stringOrEmpty(value){return typeof value=="string"?value:""}function normalizeTestRunMeasurements(value){if(!Array.isArray(value))return;const normalized=value.filter(measurement=>measurement!==null&&typeof measurement=="object"&&typeof measurement.name=="string"&&measurement.name.trim().length>0&&typeof measurement.value=="number"&&Number.isFinite(measurement.value)&&typeof measurement.recorded_at=="string"&&measurement.recorded_at.trim().length>0).map(measurement=>({name:measurement.name.trim(),value:measurement.value,unit:typeof measurement.unit=="string"&&measurement.unit.trim()||void 0,threshold:typeof measurement.threshold=="number"&&Number.isFinite(measurement.threshold)?measurement.threshold:void 0,recorded_at:measurement.recorded_at.trim()})),deduplicated=[...new Map(normalized.map(measurement=>[measurement.name,measurement])).values()].sort((left,right)=>left.name.localeCompare(right.name)).slice(0,32);return deduplicated.length>0?deduplicated:void 0}function normalizeTestRunEnum(value,allowedValues){return typeof value=="string"&&allowedValues.has(value)?value:void 0}function normalizeTestRunExecutions(values){if(!Array.isArray(values))return;const executions=values.filter(execution=>execution&&typeof execution.command=="string"&&execution.command.trim().length>0).slice(0,32).map(execution=>({command:execution.command.trim(),requested_pm_context_mode:normalizeTestRunEnum(execution.requested_pm_context_mode,LINKED_TEST_PM_CONTEXT_MODE_VALUES),pm_context_mode:normalizeTestRunEnum(execution.pm_context_mode,LINKED_TEST_PM_CONTEXT_MODE_VALUES),workspace_context_mode:normalizeTestRunEnum(execution.workspace_context_mode,LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES),trust_reason:normalizeTestRunEnum(execution.trust_reason,LINKED_TEST_TRUST_REASON_VALUES)}));return executions.length>0?executions:void 0}function normalizeTestRunSummary(value){const runId=typeof value.run_id=="string"?value.run_id.trim():"",kind=value.kind==="test"||value.kind==="test-all"?value.kind:"test",status=ITEM_TEST_RUN_STATUS_VALUES.has(value.status)?value.status:"failed",summary={run_id:runId,kind,status,started_at:stringOrEmpty(value.started_at),finished_at:stringOrEmpty(value.finished_at),recorded_at:stringOrEmpty(value.recorded_at),attempt:normalizePositiveInteger(value.attempt),resumed_from:value.resumed_from?.trim()||void 0,passed:normalizeNonNegativeInteger(value.passed)??0,failed:normalizeNonNegativeInteger(value.failed)??0,skipped:normalizeNonNegativeInteger(value.skipped)??0,items:normalizeNonNegativeInteger(value.items),linked_tests:normalizeNonNegativeInteger(value.linked_tests),fail_on_skipped_triggered:value.fail_on_skipped_triggered===!0?!0:void 0,measurements:normalizeTestRunMeasurements(value.measurements),executions:normalizeTestRunExecutions(value.executions)};return deleteUndefinedFields(summary),summary}function sortTests(values){if(!(!Array.isArray(values)||values.length===0))return values.map(normalizeLinkedTest)}function normalizeTrimmedStringList(value){if(!Array.isArray(value))return;const normalized=[...new Set(value.filter(entry=>typeof entry=="string").map(entry=>entry.trim()).filter(entry=>entry.length>0))].sort((a,b)=>a.localeCompare(b));return normalized.length>0?normalized:void 0}function isPlainObjectRecord(value){if(!value||typeof value!="object"||Array.isArray(value))return!1;const prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function isUnsafeObjectKey(key){return key==="__proto__"||key==="constructor"||key==="prototype"}function normalizeStringRecord(value){if(!isPlainObjectRecord(value))return;const entries=Object.entries(value).map(([key,recordValue])=>[key.trim(),String(recordValue).trim()]).filter(([key,recordValue])=>key.length>0&&!isUnsafeObjectKey(key)&&recordValue.length>0).sort(([left],[right])=>left.localeCompare(right));return entries.length>0?Object.fromEntries(entries):void 0}function normalizeNumericRecord(value){if(!isPlainObjectRecord(value))return;const entries=Object.entries(value).map(([key,recordValue])=>[key.trim(),Number(recordValue)]).filter(([key,recordValue])=>key.length>0&&!isUnsafeObjectKey(key)&&Number.isFinite(recordValue)).sort(([left],[right])=>left.localeCompare(right));return entries.length>0?Object.fromEntries(entries):void 0}function normalizeLinkedTestContextMode(value){const normalized=value?.trim().toLowerCase();if(!(!normalized||!LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)))return normalized}function normalizeLinkedTestWorkspaceContextMode(value){const normalized=value?.trim().toLowerCase();if(!(!normalized||!LINKED_TEST_WORKSPACE_CONTEXT_MODE_VALUES.has(normalized)))return normalized}function normalizeLinkedTestProvenance(value,invalid){if(invalid===!0)return{provenance_invalid:!0};if(value===void 0)return{};if(!isPlainObjectRecord(value))return{provenance_invalid:!0};const author=trimStringOrUndefined(value.author),createdAt=trimStringOrUndefined(value.created_at),sourceKind=value.source_kind;return!author||!createdAt||!isTimestampLiteral(createdAt)||sourceKind!=="local_mutation"&&sourceKind!=="merge_union"?{provenance_invalid:!0}:{provenance:{author,created_at:createdAt,source_kind:sourceKind,source_ref:trimStringOrUndefined(value.source_ref)}}}function normalizeLinkedTest(value){const test={command:value.command?.trim()||void 0,path:value.path?normalizePathValue(value.path):void 0,scope:value.scope,timeout_seconds:typeof value.timeout_seconds=="number"&&Number.isFinite(value.timeout_seconds)&&value.timeout_seconds>0?value.timeout_seconds:void 0,pm_context_mode:normalizeLinkedTestContextMode(value.pm_context_mode),workspace_context_mode:normalizeLinkedTestWorkspaceContextMode(value.workspace_context_mode),...normalizeLinkedTestProvenance(value.provenance,value.provenance_invalid),env_set:normalizeStringRecord(value.env_set),env_clear:normalizeTrimmedStringList(value.env_clear),shared_host_safe:value.shared_host_safe===!0?!0:void 0,assert_stdout_contains:normalizeTrimmedStringList(value.assert_stdout_contains),assert_stdout_regex:normalizeTrimmedStringList(value.assert_stdout_regex),assert_stderr_contains:normalizeTrimmedStringList(value.assert_stderr_contains),assert_stderr_regex:normalizeTrimmedStringList(value.assert_stderr_regex),assert_stdout_min_lines:normalizeNonNegativeInteger(value.assert_stdout_min_lines),assert_json_field_equals:normalizeStringRecord(value.assert_json_field_equals),assert_json_field_gte:normalizeNumericRecord(value.assert_json_field_gte),note:value.note?.trim()||void 0};return deleteUndefinedFields(test),test}function sortDocs(values){if(!(!values||values.length===0))return[...values].map(value=>({path:normalizePathValue(value.path),scope:value.scope,note:value.note?.trim()||void 0})).sort((a,b)=>{const byScope=a.scope.localeCompare(b.scope);if(byScope!==0)return byScope;const byPath=a.path.localeCompare(b.path);return byPath!==0?byPath:(a.note??"").localeCompare(b.note??"")})}function trimStringOrUndefined(value){if(typeof value!="string")return;const trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function normalizePlanStepLinks(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,id=trimStringOrUndefined(record.id),kind=trimStringOrUndefined(record.kind);if(!id||!kind)continue;const link={id,kind},note=trimStringOrUndefined(record.note);note&&(link.note=note),record.required_before_step===!0&&(link.required_before_step=!0),out.push(link)}return out.length>0?out:void 0}function normalizePlanStepFiles(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,path=trimStringOrUndefined(record.path);if(!path)continue;const file={path:normalizePathValue(path)};(record.scope==="project"||record.scope==="global")&&(file.scope=record.scope);const note=trimStringOrUndefined(record.note);note&&(file.note=note),out.push(file)}return out.length>0?out:void 0}function normalizePlanStepTests(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,command=trimStringOrUndefined(record.command),path=trimStringOrUndefined(record.path);if(!command&&!path)continue;const test={};command&&(test.command=command),path&&(test.path=normalizePathValue(path));const note=trimStringOrUndefined(record.note);note&&(test.note=note),out.push(test)}return out.length>0?out:void 0}function normalizePlanStepDocs(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,path=trimStringOrUndefined(record.path);if(!path)continue;const doc={path:normalizePathValue(path)};(record.scope==="project"||record.scope==="global")&&(doc.scope=record.scope);const note=trimStringOrUndefined(record.note);note&&(doc.note=note),out.push(doc)}return out.length>0?out:void 0}function normalizePlanStepEntry(entry){if(entry===null||typeof entry!="object")return;const record=entry,id=trimStringOrUndefined(record.id),title=trimStringOrUndefined(record.title),statusRaw=trimStringOrUndefined(record.status),status=statusRaw&&PLAN_STEP_STATUS_SET.has(statusRaw)?statusRaw:void 0,order=coerceFiniteNumber(record.order)??Number.NaN,created_at=typeof record.created_at=="string"?record.created_at:"",updated_at=typeof record.updated_at=="string"?record.updated_at:"";if(!id||!title||!status||!Number.isFinite(order)||!created_at||!updated_at)return;const step={id,order,title,status,created_at,updated_at};return applyPlanStepOptionalFields(step,record),step}function applyPlanStepOptionalFields(step,record){const stringFields=[["body","body"],["owner","owner"],["evidence","evidence"],["blocked_reason","blocked_reason"],["superseded_by","superseded_by"]];for(const[target,source]of stringFields){const value=trimStringOrUndefined(record[source]);value&&(step[target]=value)}const completedAt=typeof record.completed_at=="string"?record.completed_at:void 0;completedAt&&completedAt.length>0&&(step.completed_at=completedAt);const collectionFields=[["linked_items","linked_items",normalizePlanStepLinks],["files","files",normalizePlanStepFiles],["tests","tests",normalizePlanStepTests],["docs","docs",normalizePlanStepDocs]];for(const[target,source,normalize]of collectionFields){const value=normalize(record[source]);value&&(step[target]=value)}}function normalizePlanSteps(value){if(!Array.isArray(value))return;const out=value.flatMap(entry=>{const step=normalizePlanStepEntry(entry);return step?[step]:[]});return out.sort((left,right)=>left.order-right.order),out.length>0?out:void 0}function normalizePlanDecisions(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,ts=typeof record.ts=="string"?record.ts:"",author=typeof record.author=="string"?record.author:"",decision=trimStringOrUndefined(record.decision);if(!ts||!author||!decision)continue;const item={ts,author,decision},rationale=trimStringOrUndefined(record.rationale);rationale&&(item.rationale=rationale);const evidence=trimStringOrUndefined(record.evidence);evidence&&(item.evidence=evidence);const stepId=trimStringOrUndefined(record.step_id);stepId&&(item.step_id=stepId),out.push(item)}return out.length>0?out:void 0}function normalizePlanDiscoveries(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,ts=typeof record.ts=="string"?record.ts:"",author=typeof record.author=="string"?record.author:"",text=trimStringOrUndefined(record.text);if(!ts||!author||!text)continue;const item={ts,author,text},stepId=trimStringOrUndefined(record.step_id);stepId&&(item.step_id=stepId),out.push(item)}return out.length>0?out:void 0}function normalizePlanValidation(value){if(!Array.isArray(value))return;const out=[];for(const entry of value){if(entry===null||typeof entry!="object")continue;const record=entry,text=trimStringOrUndefined(record.text);if(!text)continue;const item={text},command=trimStringOrUndefined(record.command);command&&(item.command=command);const expected=trimStringOrUndefined(record.expected);expected&&(item.expected=expected),out.push(item)}return out.length>0?out:void 0}function normalizeTypeOptions(values){if(!values)return;const normalizedEntries=Object.entries(values).map(([key,value])=>[key.trim(),value.trim()]).filter(([key,value])=>key.length>0&&value.length>0).sort((left,right)=>left[0].localeCompare(right[0]));if(normalizedEntries.length!==0)return Object.fromEntries(normalizedEntries)}function normalizeBody(body){let start=0;for(;start<body.length&&body[start]===`
2
+ `;)start+=1;return body.slice(start).trimEnd()}function normalizeConfidenceValue(value){if(value===void 0)return;if(typeof value=="number")return value;const normalized=value.trim().toLowerCase();if(normalized==="med")return"medium";if(CONFIDENCE_TEXT_VALUES.includes(normalized))return normalized}function normalizeSeverityValue(value){if(value===void 0)return;const normalized=value.trim().toLowerCase();if(normalized==="med")return"medium";if(ISSUE_SEVERITY_VALUES.includes(normalized))return normalized}function emptyStringToUndefined(value){return value||void 0}function copyExtensionItemMetadataFields(normalized,source){const targetRecord=normalized,sourceRecord=source;for(const[key,value]of Object.entries(sourceRecord))isUnsafeObjectKey(key)||Object.prototype.hasOwnProperty.call(targetRecord,key)||value===void 0||(targetRecord[key]=value)}function coerceNormalizedRuntimeFields(normalized,runtimeContext){if(!runtimeContext?.fieldRegistry)return;const record=normalized;for(const definition of runtimeContext.fieldRegistry.definitions){const currentValue=record[definition.metadata_key];currentValue!==void 0&&(record[definition.metadata_key]=coerceRuntimeFieldValue(definition,currentValue,`metadata field "${definition.metadata_key}"`))}}function assertNormalizedUnknownFields(normalized,runtimeContext){if(!runtimeContext||runtimeContext.unknownFieldPolicy==="allow")return;const knownKeys=buildKnownItemMetadataKeys(runtimeContext),unknownKeys=Object.keys(normalized).filter(key=>!knownKeys.has(key)).sort((left,right)=>left.localeCompare(right));unknownKeys.length>0&&runtimeContext.unknownFieldPolicy==="reject"&&validationError(`unknown schema fields are not allowed: ${unknownKeys.join(", ")}`),unknownKeys.length>0&&runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(",")}`)}function normalizeItemMetadata(itemMetadata,options={}){const runtimeContext=resolveRuntimeSchemaValidationContext(options),normalizedStatus=normalizeStatusInput(itemMetadata.status,runtimeContext?.statusRegistry)??itemMetadata.status,tags=Array.from(new Set((Array.isArray(itemMetadata.tags)?itemMetadata.tags:[]).filter(tag=>typeof tag=="string").map(tag=>tag.trim().toLowerCase()).filter(Boolean))).sort((a,b)=>a.localeCompare(b)),normalized={id:itemMetadata.id,title:itemMetadata.title,description:itemMetadata.description,type:itemMetadata.type,pm_format_version:normalizeItemFormatVersion(itemMetadata.pm_format_version),source_type:trimStringOrUndefined(itemMetadata.source_type),type_options:normalizeTypeOptions(itemMetadata.type_options),status:normalizedStatus,priority:itemMetadata.priority,tags,created_at:itemMetadata.created_at,updated_at:itemMetadata.updated_at,dependencies:sortDependencies(itemMetadata.dependencies),comments:sortLogValues(itemMetadata.comments),notes:sortLogValues(itemMetadata.notes),learnings:sortLogValues(itemMetadata.learnings),files:normalizeFiles(itemMetadata.files),tests:sortTests(itemMetadata.tests),test_runs:normalizeTestRunSummaries(itemMetadata.test_runs),docs:sortDocs(itemMetadata.docs),deadline:emptyStringToUndefined(itemMetadata.deadline),reminders:sortReminders(itemMetadata.reminders),events:sortEvents(itemMetadata.events),closed_at:emptyStringToUndefined(itemMetadata.closed_at),completed_at:emptyStringToUndefined(itemMetadata.completed_at),assignee:trimStringOrUndefined(itemMetadata.assignee),claim_principal:trimStringOrUndefined(itemMetadata.claim_principal),source_owner:trimStringOrUndefined(itemMetadata.source_owner),author:emptyStringToUndefined(itemMetadata.author),estimated_minutes:itemMetadata.estimated_minutes,acceptance_criteria:itemMetadata.acceptance_criteria??void 0,design:itemMetadata.design??void 0,external_ref:itemMetadata.external_ref??void 0,definition_of_ready:trimStringOrUndefined(itemMetadata.definition_of_ready),order:itemMetadata.order,goal:trimStringOrUndefined(itemMetadata.goal),objective:trimStringOrUndefined(itemMetadata.objective),value:trimStringOrUndefined(itemMetadata.value),impact:trimStringOrUndefined(itemMetadata.impact),outcome:trimStringOrUndefined(itemMetadata.outcome),why_now:trimStringOrUndefined(itemMetadata.why_now),parent:trimStringOrUndefined(itemMetadata.parent),reviewer:trimStringOrUndefined(itemMetadata.reviewer),risk:itemMetadata.risk??void 0,confidence:normalizeConfidenceValue(itemMetadata.confidence),sprint:trimStringOrUndefined(itemMetadata.sprint),release:trimStringOrUndefined(itemMetadata.release),blocked_by:trimStringOrUndefined(itemMetadata.blocked_by),blocked_reason:trimStringOrUndefined(itemMetadata.blocked_reason),unblock_note:trimStringOrUndefined(itemMetadata.unblock_note),reporter:trimStringOrUndefined(itemMetadata.reporter),severity:normalizeSeverityValue(itemMetadata.severity),environment:trimStringOrUndefined(itemMetadata.environment),repro_steps:trimStringOrUndefined(itemMetadata.repro_steps),resolution:trimStringOrUndefined(itemMetadata.resolution),expected_result:trimStringOrUndefined(itemMetadata.expected_result),actual_result:trimStringOrUndefined(itemMetadata.actual_result),affected_version:trimStringOrUndefined(itemMetadata.affected_version),fixed_version:trimStringOrUndefined(itemMetadata.fixed_version),component:trimStringOrUndefined(itemMetadata.component),regression:itemMetadata.regression,customer_impact:trimStringOrUndefined(itemMetadata.customer_impact),close_reason:emptyStringToUndefined(itemMetadata.close_reason),plan_mode:trimStringOrUndefined(itemMetadata.plan_mode),plan_scope:trimStringOrUndefined(itemMetadata.plan_scope),plan_harness:trimStringOrUndefined(itemMetadata.plan_harness),plan_resume_context:trimStringOrUndefined(itemMetadata.plan_resume_context),plan_steps:normalizePlanSteps(itemMetadata.plan_steps),plan_decisions:normalizePlanDecisions(itemMetadata.plan_decisions),plan_discoveries:normalizePlanDiscoveries(itemMetadata.plan_discoveries),plan_validation:normalizePlanValidation(itemMetadata.plan_validation)};return copyExtensionItemMetadataFields(normalized,itemMetadata),coerceNormalizedRuntimeFields(normalized,runtimeContext),assertNormalizedUnknownFields(normalized,runtimeContext),deleteUndefinedFields(normalized),normalized}function orderItemMetadata(itemMetadata){return orderObject(itemMetadata,ITEM_METADATA_KEY_ORDER)}function findJsonObjectEnd(content){let depth=0,inString=!1,escaped=!1;for(let i=0;i<content.length;i+=1){const char=content[i];if(inString){if(escaped){escaped=!1;continue}if(char==="\\"){escaped=!0;continue}char==='"'&&(inString=!1);continue}if(char==='"'){inString=!0;continue}if(char==="{"){depth+=1;continue}if(char==="}"&&(depth-=1,depth===0))return i}return-1}function splitFrontMatter(content){if(!content.startsWith("{"))return{frontMatter:"",body:content};const end=findJsonObjectEnd(content);if(end<0)return{frontMatter:"",body:content};const frontMatter=content.slice(0,end+1),body=content.slice(end+1).replace(/^\r?\n+/,"");return{frontMatter,body}}function stripLeadingYamlDocument(content){const normalizedContent=content.charCodeAt(0)===65279?content.slice(1):content,opener=normalizedContent.match(/^[ \t]*---[ \t]*(?:\r?\n|$)/);if(!opener)return{content:normalizedContent,stripped:!1};let cursor=opener[0].length;for(;cursor<normalizedContent.length;){const nextNewline=normalizedContent.indexOf(`
3
+ `,cursor),lineEnd=nextNewline===-1?normalizedContent.length:nextNewline,line=normalizedContent.slice(cursor,lineEnd).replace(/\r$/,""),afterLine=nextNewline===-1?lineEnd:lineEnd+1;if(line.trim()==="---")return{content:normalizedContent.slice(afterLine).replace(/^\s+/,""),stripped:!0};cursor=afterLine}return{content:normalizedContent,stripped:!1}}function normalizeParsedItemMetadata(itemMetadata,options){return normalizeItemMetadata(itemMetadata,{...options,onWarning:void 0})}function parseJsonMarkdownItemDocument(content,runtimeContext,options={}){const normalized=stripLeadingYamlDocument(content);normalized.stripped&&options.onWarning?.("json_markdown_leading_yaml_frontmatter_ignored");const{frontMatter,body}=splitFrontMatter(normalized.content);frontMatter||(content.trimStart().startsWith("{")&&documentSyntaxError("json_markdown","JSON front matter is not valid JSON"),documentSyntaxError("json_markdown","JSON Markdown item document is missing JSON front matter"));let parsed;try{parsed=JSON.parse(frontMatter)}catch{documentSyntaxError("json_markdown","JSON front matter is not valid JSON")}return assertValidItemMetadata(parsed,runtimeContext),{metadata:normalizeParsedItemMetadata(parsed,options),body:normalizeBody(body)}}function parseToonItemDocument(content,runtimeContext,options={}){let parsed;try{parsed=decodeToonItemContent(content).value}catch{documentSyntaxError("toon","TOON item document is not valid TOON")}assertItemMetadataCondition(typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed),"TOON item document must be an object");const record=parsed;if(!REQUIRED_STRING_FIELDS.some(fieldName=>Object.prototype.hasOwnProperty.call(record,fieldName))&&!Object.prototype.hasOwnProperty.call(record,"front_matter")&&documentSyntaxError("toon","TOON input does not have the shape of an item document"),Object.prototype.hasOwnProperty.call(record,"front_matter"))return assertValidItemMetadata(record.front_matter,runtimeContext),assertItemMetadataCondition(record.body===void 0||typeof record.body=="string","TOON item document body must be a string"),{metadata:normalizeParsedItemMetadata(record.front_matter,options),body:normalizeBody(typeof record.body=="string"?record.body:"")};const{body,...itemMetadataRecord}=record;return assertItemMetadataCondition(body===void 0||typeof body=="string","TOON item document body must be a string"),assertValidItemMetadata(itemMetadataRecord,runtimeContext),{metadata:normalizeParsedItemMetadata(itemMetadataRecord,options),body:normalizeBody(typeof body=="string"?body:"")}}function serializeJsonMarkdownItemDocument(document,options={}){const normalizedMetadata=normalizeItemMetadata(document.metadata,options),orderedMetadata=orderItemMetadata(normalizedMetadata),serializedMetadata=JSON.stringify(orderedMetadata,null,2),normalizedBody=normalizeBody(document.body??"");return normalizedBody?`${serializedMetadata}
3
4
 
4
5
  ${normalizedBody}
5
- `}function serializeToonItemDocument(document,options={}){const normalizedMetadata=normalizeItemMetadata(document.metadata,options);const orderedMetadata=orderItemMetadata(normalizedMetadata);const normalizedBody=normalizeBody(document.body??"");const payload={...orderedMetadata,body:normalizedBody};const encodablePayload=JSON.parse(JSON.stringify(payload));const serialized=encodeToon(encodablePayload);let decoded;try{decoded=decodeToonItemContent(serialized).value}catch(error){throw new PmCliError("Refusing to persist a TOON item document that the configured decoder cannot read back.",EXIT_CODE.GENERIC_FAILURE,{code:"item_document_roundtrip_failed",reason:"encode_decode_error",format:"toon",required:"Upgrade or repair the TOON codec before retrying the mutation; no item bytes were written.",why:error instanceof Error?error.message:String(error)})}if(!isDeepStrictEqual(decoded,encodablePayload)){const decodedRecord=typeof decoded==="object"&&decoded!==null&&!Array.isArray(decoded)?decoded:{};const field=Object.keys(encodablePayload).find(key=>!isDeepStrictEqual(encodablePayload[key],decodedRecord[key]))??"document";throw new PmCliError(`Refusing to persist a lossy TOON item document; round-trip mismatch at field "${field}".`,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_roundtrip_failed",reason:"encode_decode_mismatch",format:"toon",field,required:"Upgrade or repair the TOON codec before retrying the mutation; no item bytes were written.",why:"The encoded document decoded to a value different from the canonical item payload."})}return`${serialized}
6
- `}function parseItemDocument(content,options={}){const conflictMarker=findFirstMergeConflictMarker(content);if(conflictMarker){throw new PmCliError(`Merge conflict markers detected in item document at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,EXIT_CODE.GENERIC_FAILURE,{code:"merge_conflict_markers_detected",reason:"merge_conflict",required:"Resolve merge-conflict markers in the item file before parsing or mutation commands.",why:"Partially merged documents can corrupt item metadata and history integrity.",examples:["git status","git add <resolved-file> && git commit"],nextSteps:["Resolve conflicts, save the file, then rerun the pm command."]})}const format=options.format??"toon";const runtimeContext=resolveRuntimeSchemaValidationContext(options);return format==="toon"?parseToonItemDocument(content,runtimeContext,options):parseJsonMarkdownItemDocument(content,runtimeContext,options)}function serializeItemDocument(document,options={}){const format=options.format??"toon";return format==="toon"?serializeToonItemDocument(document,options):serializeJsonMarkdownItemDocument(document,options)}function canonicalDocument(document,options={}){return{metadata:normalizeItemMetadata(document.metadata,options),body:normalizeBody(document.body??"")}}const _testOnlyItemFormat={buildKnownItemMetadataKeys,firstNonZeroComparison,normalizeBody,normalizePlanDecisions,normalizePlanDiscoveries,normalizePlanStepDocs,normalizePlanStepFiles,normalizePlanStepLinks,normalizePlanSteps,normalizePlanStepTests,normalizePlanValidation,normalizeTestRunSummaries,normalizeTypeOptions,runtimeFieldRequiredForType,sortTests};export{_testOnlyItemFormat,canonicalDocument,normalizeItemMetadata,parseItemDocument,serializeItemDocument,splitFrontMatter};
6
+ `:`${serializedMetadata}
7
+ `}function serializeToonItemDocument(document,options={}){const normalizedMetadata=normalizeItemMetadata(document.metadata,options),orderedMetadata=orderItemMetadata(normalizedMetadata),normalizedBody=normalizeBody(document.body??""),payload={...orderedMetadata,body:normalizedBody},encodablePayload=JSON.parse(JSON.stringify(payload)),serialized=encodeToon(encodablePayload);let decoded;try{decoded=decodeToonItemContent(serialized).value}catch(error){throw new PmCliError("Refusing to persist a TOON item document that the configured decoder cannot read back.",EXIT_CODE.GENERIC_FAILURE,{code:"item_document_roundtrip_failed",reason:"encode_decode_error",format:"toon",required:"Upgrade or repair the TOON codec before retrying the mutation; no item bytes were written.",why:error instanceof Error?error.message:String(error)})}if(!isDeepStrictEqual(decoded,encodablePayload)){const decodedRecord=typeof decoded=="object"&&decoded!==null&&!Array.isArray(decoded)?decoded:{},field=Object.keys(encodablePayload).find(key=>!isDeepStrictEqual(encodablePayload[key],decodedRecord[key]))??"document";throw new PmCliError(`Refusing to persist a lossy TOON item document; round-trip mismatch at field "${field}".`,EXIT_CODE.GENERIC_FAILURE,{code:"item_document_roundtrip_failed",reason:"encode_decode_mismatch",format:"toon",field,required:"Upgrade or repair the TOON codec before retrying the mutation; no item bytes were written.",why:"The encoded document decoded to a value different from the canonical item payload."})}return`${serialized}
8
+ `}function parseItemDocument(content,options={}){const conflictMarker=findFirstMergeConflictMarker(content);if(conflictMarker)throw new PmCliError(`Merge conflict markers detected in item document at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,EXIT_CODE.GENERIC_FAILURE,{code:"merge_conflict_markers_detected",reason:"merge_conflict",required:"Resolve merge-conflict markers in the item file before parsing or mutation commands.",why:"Partially merged documents can corrupt item metadata and history integrity.",examples:["git status","git add <resolved-file> && git commit"],nextSteps:["Resolve conflicts, save the file, then rerun the pm command."]});const format=options.format??"toon",runtimeContext=resolveRuntimeSchemaValidationContext(options);return format==="toon"?parseToonItemDocument(content,runtimeContext,options):parseJsonMarkdownItemDocument(content,runtimeContext,options)}function serializeItemDocument(document,options={}){return(options.format??"toon")==="toon"?serializeToonItemDocument(document,options):serializeJsonMarkdownItemDocument(document,options)}function canonicalDocument(document,options={}){return{metadata:normalizeItemMetadata(document.metadata,options),body:normalizeBody(document.body??"")}}const _testOnlyItemFormat={buildKnownItemMetadataKeys,firstNonZeroComparison,normalizeBody,normalizePlanDecisions,normalizePlanDiscoveries,normalizePlanStepDocs,normalizePlanStepFiles,normalizePlanStepLinks,normalizePlanSteps,normalizePlanStepTests,normalizePlanValidation,normalizeTestRunSummaries,normalizeTypeOptions,runtimeFieldRequiredForType,sortTests};export{_testOnlyItemFormat,canonicalDocument,normalizeItemMetadata,parseItemDocument,serializeItemDocument,splitFrontMatter};
7
9
  //# sourceMappingURL=item-format.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="82c79093-2a40-5b4c-8d41-637b0ae03c4f")}catch(e2){}})();function toItemRecord(item){return item}export{toItemRecord};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="82c79093-2a40-5b4c-8d41-637b0ae03c4f")}catch{}})();function toItemRecord(item){return item}export{toItemRecord};
2
2
  //# sourceMappingURL=item-record.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7647d826-e562-5f8e-86b2-2e40d8714b4d")}catch(e2){}})();function normalizeItemTypeStringList(values){return[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeItemTypeOption(option){const key=option.key.trim();if(key.length===0){return null}const aliases=normalizeItemTypeStringList(option.aliases);const description=option.description?.trim();return{key,values:normalizeItemTypeStringList(option.values),required:option.required===true?true:void 0,aliases:aliases.length>0?aliases:void 0,description:description&&description.length>0?description:void 0}}const keepPolicyCommand=command=>command;const strictPolicyCommand=command=>{const normalized=command.trim().toLowerCase();return normalized==="create"||normalized==="update"?normalized:null};function normalizeItemTypeCommandOptionPolicy(policy,resolvePolicyCommand){const command=resolvePolicyCommand(policy.command);if(command===null){return null}const option=policy.option.trim();if(option.length===0){return null}return{command,option,required:policy.required,visible:policy.visible,enabled:policy.enabled}}function normalizeItemTypeCommandOptionPolicies(policies,resolvePolicyCommand){const dedupedByKey=new Map;for(const policy of policies??[]){const normalized=normalizeItemTypeCommandOptionPolicy(policy,resolvePolicyCommand);if(!normalized){continue}dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`,normalized)}return[...dedupedByKey.values()].sort((left,right)=>left.command===right.command?left.option.localeCompare(right.option):left.command.localeCompare(right.command))}function normalizeOptionalStringList(values,preservePresence){return preservePresence?normalizeItemTypeStringList(values):void 0}function optionalNonEmptyString(value){const normalized=value?.trim();return normalized&&normalized.length>0?normalized:void 0}function parseItemExecutionRole(value){if(value===void 0||value==="agent"||value==="human"||value==="gate")return value;throw new Error("Item type execution_role must be agent, human, or gate.")}function normalizeItemTypeDefinition(definition,options={}){const resolvePolicyCommand=options.resolvePolicyCommand??keepPolicyCommand;const name=definition.name.trim();if(name.length===0){return null}const hasRequiredCreateFields=definition.required_create_fields!==void 0;const hasRequiredCreateRepeatables=definition.required_create_repeatables!==void 0;const hasOptions=definition.options!==void 0;const hasCommandOptionPolicies=definition.command_option_policies!==void 0;const aliases=normalizeItemTypeStringList(definition.aliases);const normalizedOptions=(definition.options??[]).map(option=>normalizeItemTypeOption(option)).filter(option=>option!==null).sort((left,right)=>left.key.localeCompare(right.key));const commandOptionPolicies=normalizeItemTypeCommandOptionPolicies(definition.command_option_policies,resolvePolicyCommand);return{name,description:optionalNonEmptyString(definition.description),default_status:optionalNonEmptyString(definition.default_status),...definition.execution_role===void 0?{}:{execution_role:parseItemExecutionRole(definition.execution_role)},folder:optionalNonEmptyString(definition.folder),aliases:aliases.length>0?aliases:void 0,required_create_fields:normalizeOptionalStringList(definition.required_create_fields,hasRequiredCreateFields),required_create_repeatables:normalizeOptionalStringList(definition.required_create_repeatables,hasRequiredCreateRepeatables),options:hasOptions?normalizedOptions:void 0,command_option_policies:hasCommandOptionPolicies?commandOptionPolicies:void 0}}export{keepPolicyCommand,normalizeItemTypeCommandOptionPolicies,normalizeItemTypeCommandOptionPolicy,normalizeItemTypeDefinition,normalizeItemTypeOption,normalizeItemTypeStringList,parseItemExecutionRole,strictPolicyCommand};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="75f74db3-9547-5c78-8561-f371c016b90d")}catch{}})();function normalizeItemTypeStringList(values){return[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeItemTypeOption(option){const key=option.key.trim();if(key.length===0)return null;const aliases=normalizeItemTypeStringList(option.aliases),description=option.description?.trim();return{key,values:normalizeItemTypeStringList(option.values),required:option.required===!0?!0:void 0,aliases:aliases.length>0?aliases:void 0,description:description&&description.length>0?description:void 0}}const keepPolicyCommand=command=>command,strictPolicyCommand=command=>{const normalized=command.trim().toLowerCase();return normalized==="create"||normalized==="update"?normalized:null};function normalizeItemTypeCommandOptionPolicy(policy,resolvePolicyCommand){const command=resolvePolicyCommand(policy.command);if(command===null)return null;const option=policy.option.trim();return option.length===0?null:{command,option,required:policy.required,visible:policy.visible,enabled:policy.enabled}}function normalizeItemTypeCommandOptionPolicies(policies,resolvePolicyCommand){const dedupedByKey=new Map;for(const policy of policies??[]){const normalized=normalizeItemTypeCommandOptionPolicy(policy,resolvePolicyCommand);normalized&&dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`,normalized)}return[...dedupedByKey.values()].sort((left,right)=>left.command===right.command?left.option.localeCompare(right.option):left.command.localeCompare(right.command))}function normalizeOptionalStringList(values,preservePresence){return preservePresence?normalizeItemTypeStringList(values):void 0}function optionalNonEmptyString(value){const normalized=value?.trim();return normalized&&normalized.length>0?normalized:void 0}function parseItemExecutionRole(value){if(value===void 0||value==="agent"||value==="human"||value==="gate")return value;throw new Error("Item type execution_role must be agent, human, or gate.")}function normalizeItemTypeDefinition(definition,options={}){const resolvePolicyCommand=options.resolvePolicyCommand??keepPolicyCommand,name=definition.name.trim();if(name.length===0)return null;const hasRequiredCreateFields=definition.required_create_fields!==void 0,hasRequiredCreateRepeatables=definition.required_create_repeatables!==void 0,hasOptions=definition.options!==void 0,hasCommandOptionPolicies=definition.command_option_policies!==void 0,aliases=normalizeItemTypeStringList(definition.aliases),normalizedOptions=(definition.options??[]).map(option=>normalizeItemTypeOption(option)).filter(option=>option!==null).sort((left,right)=>left.key.localeCompare(right.key)),commandOptionPolicies=normalizeItemTypeCommandOptionPolicies(definition.command_option_policies,resolvePolicyCommand);return{name,description:optionalNonEmptyString(definition.description),default_status:optionalNonEmptyString(definition.default_status),...definition.execution_role===void 0?{}:{execution_role:parseItemExecutionRole(definition.execution_role)},folder:optionalNonEmptyString(definition.folder),aliases:aliases.length>0?aliases:void 0,required_create_fields:normalizeOptionalStringList(definition.required_create_fields,hasRequiredCreateFields),required_create_repeatables:normalizeOptionalStringList(definition.required_create_repeatables,hasRequiredCreateRepeatables),options:hasOptions?normalizedOptions:void 0,command_option_policies:hasCommandOptionPolicies?commandOptionPolicies:void 0}}export{keepPolicyCommand,normalizeItemTypeCommandOptionPolicies,normalizeItemTypeCommandOptionPolicy,normalizeItemTypeDefinition,normalizeItemTypeOption,normalizeItemTypeStringList,parseItemExecutionRole,strictPolicyCommand};
2
2
  //# sourceMappingURL=item-type-definition.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="91874535-458b-5a33-a68a-96f44bd2e1f8")}catch(e2){}})();import{normalizeItemId}from"./id.js";import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const PLACEHOLDER_REFERENCE_TOKENS=new Set(["none","null","undefined"]);function normalizeParentReferencePolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="warn"||normalized==="strict_error"){return normalized}if(normalized==="strict"){return"strict_error"}throw new PmCliError("Config set parent-reference-policy requires --policy with one of: warn, strict_error (alias: strict)",EXIT_CODE.USAGE)}function normalizeParentReferenceValue(rawValue){if(typeof rawValue!=="string"){throw new PmCliError("--parent must be a string. Use --unset parent to clear this field.",EXIT_CODE.USAGE)}const value=rawValue.trim();if(value.length===0){throw new PmCliError("--parent must not be empty. Use --parent none to unset.",EXIT_CODE.USAGE)}if(isPlaceholderReferenceToken(value)){throw new PmCliError(`--parent must not use placeholder token "${value}". Use --unset parent to clear this field.`,EXIT_CODE.USAGE)}return value}function isPlaceholderReferenceToken(value){return PLACEHOLDER_REFERENCE_TOKENS.has(value.trim().toLowerCase())}function validateMissingParentReference(parentId,policy){if(policy==="strict_error"){throw new PmCliError(`Parent item "${parentId}" was not found. Create it first or use --parent none.`,EXIT_CODE.USAGE)}return{warnings:[`validation_warning:parent_reference_missing:${parentId}`]}}function assertParentReferenceIsNotSelf(itemId,parentId,prefix){const normalizedItemId=normalizeItemId(itemId,prefix);const normalizedParentId=normalizeItemId(parentId,prefix);if(normalizedItemId!==normalizedParentId){return}const normalizationDetail=parentId!==normalizedParentId||itemId!==normalizedItemId?` (normalized from parent "${parentId}" and item "${itemId}")`:"";throw new PmCliError(`Parent item "${normalizedParentId}" cannot be the same as item "${normalizedItemId}"${normalizationDetail}. Use --unset parent to clear this field.`,EXIT_CODE.USAGE)}export{assertParentReferenceIsNotSelf,isPlaceholderReferenceToken,normalizeParentReferencePolicy,normalizeParentReferenceValue,validateMissingParentReference};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2fd342e6-06cc-56d4-aa0e-2af269234b59")}catch{}})();import{normalizeItemId}from"./id.js";import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const PLACEHOLDER_REFERENCE_TOKENS=new Set(["none","null","undefined"]);function normalizeParentReferencePolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="warn"||normalized==="strict_error")return normalized;if(normalized==="strict")return"strict_error";throw new PmCliError("Config set parent-reference-policy requires --policy with one of: warn, strict_error (alias: strict)",EXIT_CODE.USAGE)}function normalizeParentReferenceValue(rawValue){if(typeof rawValue!="string")throw new PmCliError("--parent must be a string. Use --unset parent to clear this field.",EXIT_CODE.USAGE);const value=rawValue.trim();if(value.length===0)throw new PmCliError("--parent must not be empty. Use --parent none to unset.",EXIT_CODE.USAGE);if(isPlaceholderReferenceToken(value))throw new PmCliError(`--parent must not use placeholder token "${value}". Use --unset parent to clear this field.`,EXIT_CODE.USAGE);return value}function isPlaceholderReferenceToken(value){return PLACEHOLDER_REFERENCE_TOKENS.has(value.trim().toLowerCase())}function validateMissingParentReference(parentId,policy){if(policy==="strict_error")throw new PmCliError(`Parent item "${parentId}" was not found. Create it first or use --parent none.`,EXIT_CODE.USAGE);return{warnings:[`validation_warning:parent_reference_missing:${parentId}`]}}function assertParentReferenceIsNotSelf(itemId,parentId,prefix){const normalizedItemId=normalizeItemId(itemId,prefix),normalizedParentId=normalizeItemId(parentId,prefix);if(normalizedItemId!==normalizedParentId)return;const normalizationDetail=parentId!==normalizedParentId||itemId!==normalizedItemId?` (normalized from parent "${parentId}" and item "${itemId}")`:"";throw new PmCliError(`Parent item "${normalizedParentId}" cannot be the same as item "${normalizedItemId}"${normalizationDetail}. Use --unset parent to clear this field.`,EXIT_CODE.USAGE)}export{assertParentReferenceIsNotSelf,isPlaceholderReferenceToken,normalizeParentReferencePolicy,normalizeParentReferenceValue,validateMissingParentReference};
2
2
  //# sourceMappingURL=parent-reference-policy.js.map
@@ -1,3 +1,9 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="74ce3524-6c25-5646-b1a0-5ca8a3759034")}catch(e2){}})();import{PmCliError}from"../shared/errors.js";import{EXIT_CODE}from"../shared/constants.js";const STDIN_TOKEN="-";const CONTINUABLE_VALUE_KEYS=new Set(["actual_result","body","cmd","command","customer_impact","description","environment","expected_result","impact","location","message","note","outcome","repro_steps","resolution","text","title","unblock_note","value","why_now"]);function looksLikeStructuredKeyValueEntry(raw,keys){if(raw.startsWith("```")||raw.includes("\n")){return true}const keyPattern=keys.map(key=>key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|");return new RegExp(`^(?:[-*+]\\s+)?(?:${keyPattern})\\s*[:=]`,"i").test(raw)}function parseTags(raw){const trimmed=raw.trim();if(trimmed===""){return[]}const source=coerceJsonTagArray(trimmed)??trimmed.split(",");const tags=source.map(tag=>tag.trim()).filter(Boolean).map(tag=>tag.toLowerCase());return Array.from(new Set(tags)).sort((a,b)=>a.localeCompare(b))}function collectTagFlagValues(values){if(!Array.isArray(values)||values.length===0){return[]}const collected=[];for(const raw of values){if(typeof raw!=="string"){continue}for(const tag of parseTags(raw)){collected.push(tag)}}return Array.from(new Set(collected)).sort((a,b)=>a.localeCompare(b))}function normalizeBaseTags(baseTags){if(!Array.isArray(baseTags)){return[]}return baseTags.filter(tag=>typeof tag==="string").map(tag=>tag.trim().toLowerCase()).filter(Boolean)}function splitAcceptanceCriteria(value){if(typeof value!=="string"){return[]}return value.split(";").map(criterion=>criterion.trim()).filter(Boolean)}function applyAcceptanceCriteriaMutations(baseCriteria,add,remove){const criteria=baseCriteria.map(criterion=>criterion.trim()).filter(Boolean);for(const raw of add??[]){const criterion=raw.trim();if(criterion.includes(";")){throw new PmCliError('Acceptance criteria added with --add-ac cannot contain ";" because semicolons delimit stored criteria',EXIT_CODE.USAGE,{code:"acceptance_criteria_semicolon_forbidden",required:"Pass one semicolon-free criterion per --add-ac value",why:"A semicolon inside one criterion would be re-read as multiple criteria",nextSteps:["Split the text into repeated --add-ac values, or replace the semicolon with punctuation that is not the storage delimiter"]})}if(criterion.length>0&&!criteria.includes(criterion)){criteria.push(criterion)}}const unmatchedRemovals=[];let remaining=criteria;for(const raw of remove??[]){const criterion=raw.trim();if(criterion.length===0){continue}if(!remaining.includes(criterion)){unmatchedRemovals.push(criterion);continue}remaining=remaining.filter(entry=>entry!==criterion)}return{criteria:remaining,unmatchedRemovals}}function mergeAdditiveTags(baseTags,add){const normalizedBase=normalizeBaseTags(baseTags);if(!add||add.length===0){return Array.from(new Set(normalizedBase)).sort((a,b)=>a.localeCompare(b))}const merged=new Set(normalizedBase);for(const tag of collectTagFlagValues(add)){merged.add(tag)}return Array.from(merged).sort((a,b)=>a.localeCompare(b))}function applyTagRemovals(baseTags,remove){const normalizedBase=Array.from(new Set(normalizeBaseTags(baseTags))).sort((a,b)=>a.localeCompare(b));if(!remove||remove.length===0){return normalizedBase}const removeSet=new Set(collectTagFlagValues(remove));if(removeSet.size===0){return normalizedBase}return normalizedBase.filter(tag=>!removeSet.has(tag))}function coerceJsonTagArray(trimmed){if(!trimmed.startsWith("[")){return null}let parsed;try{parsed=JSON.parse(trimmed)}catch{return null}const parsedArray=parsed;return parsedArray.map(entry=>typeof entry==="string"||typeof entry==="number"||typeof entry==="boolean"?String(entry):"").filter(entry=>entry.length>0)}function normalizeLineEndings(value){return value.replace(/\r\n/g,"\n")}function stripCodeFenceEnvelope(value){const normalized=normalizeLineEndings(value).trim();if(!normalized.startsWith("```")){return value}const lines=normalized.split("\n");if(lines.length<2){return value}if(lines.at(-1)?.trim()!=="```"){return value}return lines.slice(1,-1).join("\n")}function splitCsvSegments(raw){const segments=[];let current="";let inQuotes=false;for(let index=0;index<raw.length;index+=1){const char=raw[index];if(char==="\\"&&raw[index+1]===","){current+=",";index+=1;continue}if(char==="\\"&&raw[index+1]!==void 0){current+=`${char}${raw[index+1]}`;index+=1;continue}if(char==='"'){inQuotes=!inQuotes;current+=char;continue}if(char===","&&!inQuotes){segments.push(current);current="";continue}current+=char}if(current.trim()){segments.push(current)}return segments}function unquoteValue(value){const trimmed=value.trim();if(trimmed.startsWith('"')&&trimmed.endsWith('"')){try{const parsed=JSON.parse(trimmed);if(typeof parsed==="string")return parsed}catch{}return trimmed.slice(1,-1).replace(/\\"/g,'"')}return value}function findKeyValueDelimiter(segment){const equalsIndex=segment.indexOf("=");const colonIndex=segment.indexOf(":");const hasEquals=equalsIndex>=0;const hasColon=colonIndex>=0;if(hasEquals&&hasColon){return Math.min(equalsIndex,colonIndex)}if(hasEquals){return equalsIndex}if(hasColon){return colonIndex}return-1}function buildOptionSpecificKvGuidance(raw,optionName){if(optionName==="--add"||optionName==="--add-glob"){const looksLikePath=/[./\\]/.test(raw)||/\.[a-z]{1,6}$/i.test(raw.trim());if(looksLikePath){return"For file/doc paths use: path=<file-path>[,scope=project|global]. The scope field is optional and defaults to project (example: path=src/api.ts or path=README.md,scope=project). "}}if(optionName!=="--event"){return""}const lowered=raw.toLowerCase();const recurrenceHint=lowered.includes("recur_")||lowered.includes("recurrence")?' Recurrence list values must stay in one field and use "|" delimiters (for example recur_by_weekday=mon|wed or recur_by_month_day=1|15).':"";const weekdayAliasHint=lowered.includes("recur_byweekday")?" Use recur_by_weekday (with underscores) for weekday recurrence filters.":"";return`${recurrenceHint}${weekdayAliasHint}`}function buildInvalidKvMessage(raw,optionName){const condensed=raw.replaceAll(/\s+/g," ").trim();const preview=condensed.length>160?`${condensed.slice(0,157)}...`:condensed;const optionSpecificGuidance=buildOptionSpecificKvGuidance(raw,optionName);return`Invalid ${optionName} value "${preview}". Expected key=value entries separated by commas. `+optionSpecificGuidance+`Also accepts markdown-style key/value lines (for example "- path: README.md"). Use ${optionName} ${STDIN_TOKEN} to read piped stdin input.`}function parseMarkdownKeyValueLines(raw){const normalized=stripCodeFenceEnvelope(raw).trim();if(normalized.length===0){return null}if(!normalized.includes("\n")&&!normalized.startsWith("-")&&!normalized.startsWith("*")&&!normalized.startsWith("+")){return null}const result={};let activeKey;const lines=normalizeLineEndings(normalized).split("\n").map(line=>line.trim()).filter(line=>line.length>0);for(const line of lines){const match=line.match(/^(?:[-*+]\s+)?([a-zA-Z0-9_.-]+)\s*(=|:)\s*(.*)$/);if(match){const key=match[1].trim();result[key]=unquoteValue(match[3].trim());activeKey=key;continue}if(activeKey&&CONTINUABLE_VALUE_KEYS.has(activeKey.toLowerCase())){result[activeKey]=`${result[activeKey]}
2
- ${line}`;continue}return null}return result}function parseCsvKv(raw,optionName){const trimmed=stripCodeFenceEnvelope(raw).trim();if(!trimmed){throw new PmCliError(`${optionName} cannot be empty`,EXIT_CODE.USAGE)}const markdownStyle=parseMarkdownKeyValueLines(trimmed);if(markdownStyle){return markdownStyle}const result={};let activeKey;const segments=splitCsvSegments(trimmed);for(const segment of segments){const delimiterIndex=findKeyValueDelimiter(segment);if(delimiterIndex>=0){const key=segment.slice(0,delimiterIndex).trim();if(!key){throw new PmCliError(buildInvalidKvMessage(raw,optionName),EXIT_CODE.USAGE)}const value=unquoteValue(segment.slice(delimiterIndex+1).trim());result[key]=value;activeKey=key;continue}if(activeKey&&CONTINUABLE_VALUE_KEYS.has(activeKey.toLowerCase())){result[activeKey]=`${result[activeKey]},${segment}`;continue}throw new PmCliError(buildInvalidKvMessage(raw,optionName),EXIT_CODE.USAGE)}return result}const WINDOWS_ABSOLUTE_PATH_PATTERN=/^[A-Za-z]:[\\/]/;const GENERIC_LEADING_KV_KEY_PATTERN=/^(?:[-*+]\s+)?[A-Za-z_][A-Za-z0-9_.-]*\s*=/;function looksLikeGenericKeyValueEntry(raw){const trimmed=raw.trim();if(WINDOWS_ABSOLUTE_PATH_PATTERN.test(trimmed)){return false}return GENERIC_LEADING_KV_KEY_PATTERN.test(trimmed)}function assertNoAmbiguousBareCommaEntry(raw,optionName,noun,structured){if(structured||!raw.includes(","))return;throw new PmCliError(`${optionName} received an ambiguous comma-bearing bare ${noun}. Repeat ${optionName} for multiple values, or quote or escape literal commas in a structured key=<value> entry.`,EXIT_CODE.USAGE,{code:"bare_comma_entry_ambiguous",required:`Use one ${optionName} per bare ${noun}, or quote or escape literal commas in a structured key=<value> entry.`})}function assertNoUnknownCsvKeys(kv,optionName,allowedKeys){const allowed=new Set(allowedKeys.map(key=>key.toLowerCase()));const unknownKeys=Object.keys(kv).filter(key=>!allowed.has(key.toLowerCase()));if(unknownKeys.length>0){throw new PmCliError(`${optionName} does not recognize key${unknownKeys.length>1?"s":""} ${unknownKeys.map(key=>`"${key}"`).join(", ")}. Allowed keys: ${allowedKeys.join(", ")}.`,EXIT_CODE.USAGE)}for(const key of Object.keys(kv)){const normalizedKey=key.toLowerCase();if(normalizedKey===key){continue}if(Object.hasOwn(kv,normalizedKey)){throw new PmCliError(`${optionName} provides key "${key}" more than once after case normalization.`,EXIT_CODE.USAGE)}kv[normalizedKey]=kv[key];delete kv[key]}}async function readStdinText(optionName){if(process.stdin.isTTY===true){throw new PmCliError(`${optionName} value "${STDIN_TOKEN}" requires piped stdin input. Pipe content into the command, or end manual stdin with Ctrl+D (Unix/macOS) or Ctrl+Z then Enter (Windows).`,EXIT_CODE.USAGE)}process.stdin.setEncoding("utf8");return await new Promise((resolve,reject)=>{let input="";process.stdin.on("data",chunk=>{input+=chunk});process.stdin.on("end",()=>{resolve(normalizeLineEndings(input))});process.stdin.on("error",error=>{reject(error)})})}const ALL_MUTATION_STDIN_FIELDS=Symbol("all-mutation-stdin-fields");const literalStdinTokenFields=new WeakMap;function preserveMutationStdinTokenLiterals(options){literalStdinTokenFields.set(options,ALL_MUTATION_STDIN_FIELDS);return options}function preserveMutationStdinTokenFields(options,fields){const current=literalStdinTokenFields.get(options);if(current===ALL_MUTATION_STDIN_FIELDS)return options;literalStdinTokenFields.set(options,new Set([...current??[],...fields]));return options}function transferMutationStdinTokenPolicy(source,target){const policy=literalStdinTokenFields.get(source);if(policy===void 0)return target;literalStdinTokenFields.set(target,policy===ALL_MUTATION_STDIN_FIELDS?policy:new Set(policy));return target}function overlayMutationStdinTokenPolicy(source,target){const sourcePolicy=literalStdinTokenFields.get(source);const targetPolicy=literalStdinTokenFields.get(target);if(sourcePolicy===void 0||targetPolicy===ALL_MUTATION_STDIN_FIELDS){return target}if(sourcePolicy===ALL_MUTATION_STDIN_FIELDS){literalStdinTokenFields.set(target,sourcePolicy);return target}literalStdinTokenFields.set(target,new Set([...targetPolicy??[],...sourcePolicy]));return target}function shouldResolveMutationStdinTokens(options){return literalStdinTokenFields.get(options)!==ALL_MUTATION_STDIN_FIELDS}function shouldResolveMutationStdinTokenField(options,field){const literalFields=literalStdinTokenFields.get(options);return literalFields!==ALL_MUTATION_STDIN_FIELDS&&!literalFields?.has(field)}function assertSingleStdinTokenConsumer(candidates){let stdinConsumerOption;for(const candidate of candidates){if(candidate.resolveToken===false||candidate.value===void 0){continue}const values=Array.isArray(candidate.value)?candidate.value:[candidate.value];const tokenCount=values.filter(value=>value.trim()===STDIN_TOKEN).length;if(tokenCount>1){throw new PmCliError(`${candidate.optionName} accepts "${STDIN_TOKEN}" stdin token at most once per command invocation`,EXIT_CODE.USAGE)}if(tokenCount===0)continue;if(stdinConsumerOption!==void 0&&stdinConsumerOption!==candidate.optionName){throw new PmCliError(`Only one option may use "${STDIN_TOKEN}" stdin token per command invocation. Already used by ${stdinConsumerOption}.`,EXIT_CODE.USAGE)}stdinConsumerOption=candidate.optionName}}async function resolveMutationStdinTokenFields(options,scalarFields,listFields){const source=options;const definitions=[...scalarFields,...listFields];assertSingleStdinTokenConsumer(definitions.map(([field,optionName])=>({value:source[field],optionName,resolveToken:shouldResolveMutationStdinTokenField(options,field)})));const stdinResolver=createStdinTokenResolver();const resolved={...source};for(const[field,optionName]of scalarFields){resolved[field]=await stdinResolver.resolveValue(source[field],optionName,shouldResolveMutationStdinTokenField(options,field))}for(const[field,optionName]of listFields){resolved[field]=await stdinResolver.resolveList(source[field],optionName,shouldResolveMutationStdinTokenField(options,field))}return preserveMutationStdinTokenLiterals(resolved)}function createStdinTokenResolver(){let stdinValuePromise;let stdinConsumerOption;const consumeStdin=async optionName=>{if(stdinConsumerOption&&stdinConsumerOption!==optionName){throw new PmCliError(`Only one option may use "${STDIN_TOKEN}" stdin token per command invocation. Already used by ${stdinConsumerOption}.`,EXIT_CODE.USAGE)}stdinConsumerOption=optionName;if(!stdinValuePromise){stdinValuePromise=readStdinText(optionName)}return await stdinValuePromise};const resolveValue=async(value,optionName,resolveToken=true)=>{if(!resolveToken)return value;if(value===void 0){return void 0}if(value.trim()!==STDIN_TOKEN){return value}return await consumeStdin(optionName)};const resolveList=async(values,optionName,resolveToken=true)=>{if(!resolveToken)return values;if(!values){return void 0}const tokenIndexes=values.map((entry,index)=>entry.trim()===STDIN_TOKEN?index:-1).filter(index=>index>=0);if(tokenIndexes.length===0){return values}if(tokenIndexes.length>1){throw new PmCliError(`${optionName} accepts "${STDIN_TOKEN}" stdin token at most once per command invocation`,EXIT_CODE.USAGE)}const stdinValue=await consumeStdin(optionName);const next=[...values];next[tokenIndexes[0]]=stdinValue;return next};return{resolveValue,resolveList}}function parseOptionalNumber(raw,optionName){const value=Number(raw);if(!Number.isFinite(value)){throw new PmCliError(`Invalid ${optionName} value "${raw}"`,EXIT_CODE.USAGE)}return value}function parseOptionalNonNegativeInteger(raw,optionName){const trimmed=raw.trim();const value=Number(trimmed);if(trimmed===""||!Number.isInteger(value)||value<0){throw new PmCliError(`Invalid ${optionName} value "${raw}". Expected a non-negative integer.`,EXIT_CODE.USAGE)}return value}const _testOnly={coerceJsonTagArray,stripCodeFenceEnvelope,parseMarkdownKeyValueLines};export{_testOnly,applyAcceptanceCriteriaMutations,applyTagRemovals,assertNoAmbiguousBareCommaEntry,assertNoUnknownCsvKeys,assertSingleStdinTokenConsumer,collectTagFlagValues,createStdinTokenResolver,looksLikeGenericKeyValueEntry,looksLikeStructuredKeyValueEntry,mergeAdditiveTags,overlayMutationStdinTokenPolicy,parseCsvKv,parseOptionalNonNegativeInteger,parseOptionalNumber,parseTags,preserveMutationStdinTokenFields,preserveMutationStdinTokenLiterals,resolveMutationStdinTokenFields,shouldResolveMutationStdinTokenField,shouldResolveMutationStdinTokens,splitAcceptanceCriteria,transferMutationStdinTokenPolicy};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4ce8635f-ea61-5443-abfc-092219a82396")}catch{}})();import{PmCliError}from"../shared/errors.js";import{EXIT_CODE}from"../shared/constants.js";const STDIN_TOKEN="-",CONTINUABLE_VALUE_KEYS=new Set(["actual_result","body","cmd","command","customer_impact","description","environment","expected_result","impact","location","message","note","outcome","repro_steps","resolution","text","title","unblock_note","value","why_now"]);function looksLikeStructuredKeyValueEntry(raw,keys){if(raw.startsWith("```")||raw.includes(`
2
+ `))return!0;const keyPattern=keys.map(key=>key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|");return new RegExp(`^(?:[-*+]\\s+)?(?:${keyPattern})\\s*[:=]`,"i").test(raw)}function parseTags(raw){const trimmed=raw.trim();if(trimmed==="")return[];const tags=(coerceJsonTagArray(trimmed)??trimmed.split(",")).map(tag=>tag.trim()).filter(Boolean).map(tag=>tag.toLowerCase());return Array.from(new Set(tags)).sort((a,b)=>a.localeCompare(b))}function collectTagFlagValues(values){if(!Array.isArray(values)||values.length===0)return[];const collected=[];for(const raw of values)if(typeof raw=="string")for(const tag of parseTags(raw))collected.push(tag);return Array.from(new Set(collected)).sort((a,b)=>a.localeCompare(b))}function normalizeBaseTags(baseTags){return Array.isArray(baseTags)?baseTags.filter(tag=>typeof tag=="string").map(tag=>tag.trim().toLowerCase()).filter(Boolean):[]}function splitAcceptanceCriteria(value){return typeof value!="string"?[]:value.split(";").map(criterion=>criterion.trim()).filter(Boolean)}function applyAcceptanceCriteriaMutations(baseCriteria,add,remove){const criteria=baseCriteria.map(criterion=>criterion.trim()).filter(Boolean);for(const raw of add??[]){const criterion=raw.trim();if(criterion.includes(";"))throw new PmCliError('Acceptance criteria added with --add-ac cannot contain ";" because semicolons delimit stored criteria',EXIT_CODE.USAGE,{code:"acceptance_criteria_semicolon_forbidden",required:"Pass one semicolon-free criterion per --add-ac value",why:"A semicolon inside one criterion would be re-read as multiple criteria",nextSteps:["Split the text into repeated --add-ac values, or replace the semicolon with punctuation that is not the storage delimiter"]});criterion.length>0&&!criteria.includes(criterion)&&criteria.push(criterion)}const unmatchedRemovals=[];let remaining=criteria;for(const raw of remove??[]){const criterion=raw.trim();if(criterion.length!==0){if(!remaining.includes(criterion)){unmatchedRemovals.push(criterion);continue}remaining=remaining.filter(entry=>entry!==criterion)}}return{criteria:remaining,unmatchedRemovals}}function mergeAdditiveTags(baseTags,add){const normalizedBase=normalizeBaseTags(baseTags);if(!add||add.length===0)return Array.from(new Set(normalizedBase)).sort((a,b)=>a.localeCompare(b));const merged=new Set(normalizedBase);for(const tag of collectTagFlagValues(add))merged.add(tag);return Array.from(merged).sort((a,b)=>a.localeCompare(b))}function applyTagRemovals(baseTags,remove){const normalizedBase=Array.from(new Set(normalizeBaseTags(baseTags))).sort((a,b)=>a.localeCompare(b));if(!remove||remove.length===0)return normalizedBase;const removeSet=new Set(collectTagFlagValues(remove));return removeSet.size===0?normalizedBase:normalizedBase.filter(tag=>!removeSet.has(tag))}function coerceJsonTagArray(trimmed){if(!trimmed.startsWith("["))return null;let parsed;try{parsed=JSON.parse(trimmed)}catch{return null}return parsed.map(entry=>typeof entry=="string"||typeof entry=="number"||typeof entry=="boolean"?String(entry):"").filter(entry=>entry.length>0)}function normalizeLineEndings(value){return value.replace(/\r\n/g,`
3
+ `)}function stripCodeFenceEnvelope(value){const normalized=normalizeLineEndings(value).trim();if(!normalized.startsWith("```"))return value;const lines=normalized.split(`
4
+ `);return lines.length<2||lines.at(-1)?.trim()!=="```"?value:lines.slice(1,-1).join(`
5
+ `)}function splitCsvSegments(raw){const segments=[];let current="",inQuotes=!1;for(let index=0;index<raw.length;index+=1){const char=raw[index];if(char==="\\"&&raw[index+1]===","){current+=",",index+=1;continue}if(char==="\\"&&raw[index+1]!==void 0){current+=`${char}${raw[index+1]}`,index+=1;continue}if(char==='"'){inQuotes=!inQuotes,current+=char;continue}if(char===","&&!inQuotes){segments.push(current),current="";continue}current+=char}return current.trim()&&segments.push(current),segments}function unquoteValue(value){const trimmed=value.trim();if(trimmed.startsWith('"')&&trimmed.endsWith('"')){try{const parsed=JSON.parse(trimmed);if(typeof parsed=="string")return parsed}catch{}return trimmed.slice(1,-1).replace(/\\"/g,'"')}return value}function findKeyValueDelimiter(segment){const equalsIndex=segment.indexOf("="),colonIndex=segment.indexOf(":"),hasEquals=equalsIndex>=0,hasColon=colonIndex>=0;return hasEquals&&hasColon?Math.min(equalsIndex,colonIndex):hasEquals?equalsIndex:hasColon?colonIndex:-1}function buildOptionSpecificKvGuidance(raw,optionName){if((optionName==="--add"||optionName==="--add-glob")&&(/[./\\]/.test(raw)||/\.[a-z]{1,6}$/i.test(raw.trim())))return"For file/doc paths use: path=<file-path>[,scope=project|global]. The scope field is optional and defaults to project (example: path=src/api.ts or path=README.md,scope=project). ";if(optionName!=="--event")return"";const lowered=raw.toLowerCase(),recurrenceHint=lowered.includes("recur_")||lowered.includes("recurrence")?' Recurrence list values must stay in one field and use "|" delimiters (for example recur_by_weekday=mon|wed or recur_by_month_day=1|15).':"",weekdayAliasHint=lowered.includes("recur_byweekday")?" Use recur_by_weekday (with underscores) for weekday recurrence filters.":"";return`${recurrenceHint}${weekdayAliasHint}`}function buildInvalidKvMessage(raw,optionName){const condensed=raw.replaceAll(/\s+/g," ").trim(),preview=condensed.length>160?`${condensed.slice(0,157)}...`:condensed,optionSpecificGuidance=buildOptionSpecificKvGuidance(raw,optionName);return`Invalid ${optionName} value "${preview}". Expected key=value entries separated by commas. `+optionSpecificGuidance+`Also accepts markdown-style key/value lines (for example "- path: README.md"). Use ${optionName} ${STDIN_TOKEN} to read piped stdin input.`}function parseMarkdownKeyValueLines(raw){const normalized=stripCodeFenceEnvelope(raw).trim();if(normalized.length===0||!normalized.includes(`
6
+ `)&&!normalized.startsWith("-")&&!normalized.startsWith("*")&&!normalized.startsWith("+"))return null;const result={};let activeKey;const lines=normalizeLineEndings(normalized).split(`
7
+ `).map(line=>line.trim()).filter(line=>line.length>0);for(const line of lines){const match=line.match(/^(?:[-*+]\s+)?([a-zA-Z0-9_.-]+)\s*(=|:)\s*(.*)$/);if(match){const key=match[1].trim();result[key]=unquoteValue(match[3].trim()),activeKey=key;continue}if(activeKey&&CONTINUABLE_VALUE_KEYS.has(activeKey.toLowerCase())){result[activeKey]=`${result[activeKey]}
8
+ ${line}`;continue}return null}return result}function parseCsvKv(raw,optionName){const trimmed=stripCodeFenceEnvelope(raw).trim();if(!trimmed)throw new PmCliError(`${optionName} cannot be empty`,EXIT_CODE.USAGE);const markdownStyle=parseMarkdownKeyValueLines(trimmed);if(markdownStyle)return markdownStyle;const result={};let activeKey;const segments=splitCsvSegments(trimmed);for(const segment of segments){const delimiterIndex=findKeyValueDelimiter(segment);if(delimiterIndex>=0){const key=segment.slice(0,delimiterIndex).trim();if(!key)throw new PmCliError(buildInvalidKvMessage(raw,optionName),EXIT_CODE.USAGE);const value=unquoteValue(segment.slice(delimiterIndex+1).trim());result[key]=value,activeKey=key;continue}if(activeKey&&CONTINUABLE_VALUE_KEYS.has(activeKey.toLowerCase())){result[activeKey]=`${result[activeKey]},${segment}`;continue}throw new PmCliError(buildInvalidKvMessage(raw,optionName),EXIT_CODE.USAGE)}return result}const WINDOWS_ABSOLUTE_PATH_PATTERN=/^[A-Za-z]:[\\/]/,GENERIC_LEADING_KV_KEY_PATTERN=/^(?:[-*+]\s+)?[A-Za-z_][A-Za-z0-9_.-]*\s*=/;function looksLikeGenericKeyValueEntry(raw){const trimmed=raw.trim();return WINDOWS_ABSOLUTE_PATH_PATTERN.test(trimmed)?!1:GENERIC_LEADING_KV_KEY_PATTERN.test(trimmed)}function assertNoAmbiguousBareCommaEntry(raw,optionName,noun,structured){if(!(structured||!raw.includes(",")))throw new PmCliError(`${optionName} received an ambiguous comma-bearing bare ${noun}. Repeat ${optionName} for multiple values, or quote or escape literal commas in a structured key=<value> entry.`,EXIT_CODE.USAGE,{code:"bare_comma_entry_ambiguous",required:`Use one ${optionName} per bare ${noun}, or quote or escape literal commas in a structured key=<value> entry.`})}function assertNoUnknownCsvKeys(kv,optionName,allowedKeys){const allowed=new Set(allowedKeys.map(key=>key.toLowerCase())),unknownKeys=Object.keys(kv).filter(key=>!allowed.has(key.toLowerCase()));if(unknownKeys.length>0)throw new PmCliError(`${optionName} does not recognize key${unknownKeys.length>1?"s":""} ${unknownKeys.map(key=>`"${key}"`).join(", ")}. Allowed keys: ${allowedKeys.join(", ")}.`,EXIT_CODE.USAGE);for(const key of Object.keys(kv)){const normalizedKey=key.toLowerCase();if(normalizedKey!==key){if(Object.hasOwn(kv,normalizedKey))throw new PmCliError(`${optionName} provides key "${key}" more than once after case normalization.`,EXIT_CODE.USAGE);kv[normalizedKey]=kv[key],delete kv[key]}}}async function readStdinText(optionName){if(process.stdin.isTTY===!0)throw new PmCliError(`${optionName} value "${STDIN_TOKEN}" requires piped stdin input. Pipe content into the command, or end manual stdin with Ctrl+D (Unix/macOS) or Ctrl+Z then Enter (Windows).`,EXIT_CODE.USAGE);return process.stdin.setEncoding("utf8"),await new Promise((resolve,reject)=>{let input="";process.stdin.on("data",chunk=>{input+=chunk}),process.stdin.on("end",()=>{resolve(normalizeLineEndings(input))}),process.stdin.on("error",error=>{reject(error)})})}const ALL_MUTATION_STDIN_FIELDS=Symbol("all-mutation-stdin-fields"),literalStdinTokenFields=new WeakMap;function preserveMutationStdinTokenLiterals(options){return literalStdinTokenFields.set(options,ALL_MUTATION_STDIN_FIELDS),options}function preserveMutationStdinTokenFields(options,fields){const current=literalStdinTokenFields.get(options);return current===ALL_MUTATION_STDIN_FIELDS||literalStdinTokenFields.set(options,new Set([...current??[],...fields])),options}function transferMutationStdinTokenPolicy(source,target){const policy=literalStdinTokenFields.get(source);return policy===void 0||literalStdinTokenFields.set(target,policy===ALL_MUTATION_STDIN_FIELDS?policy:new Set(policy)),target}function overlayMutationStdinTokenPolicy(source,target){const sourcePolicy=literalStdinTokenFields.get(source),targetPolicy=literalStdinTokenFields.get(target);return sourcePolicy===void 0||targetPolicy===ALL_MUTATION_STDIN_FIELDS?target:sourcePolicy===ALL_MUTATION_STDIN_FIELDS?(literalStdinTokenFields.set(target,sourcePolicy),target):(literalStdinTokenFields.set(target,new Set([...targetPolicy??[],...sourcePolicy])),target)}function shouldResolveMutationStdinTokens(options){return literalStdinTokenFields.get(options)!==ALL_MUTATION_STDIN_FIELDS}function shouldResolveMutationStdinTokenField(options,field){const literalFields=literalStdinTokenFields.get(options);return literalFields!==ALL_MUTATION_STDIN_FIELDS&&!literalFields?.has(field)}function assertSingleStdinTokenConsumer(candidates){let stdinConsumerOption;for(const candidate of candidates){if(candidate.resolveToken===!1||candidate.value===void 0)continue;const tokenCount=(Array.isArray(candidate.value)?candidate.value:[candidate.value]).filter(value=>value.trim()===STDIN_TOKEN).length;if(tokenCount>1)throw new PmCliError(`${candidate.optionName} accepts "${STDIN_TOKEN}" stdin token at most once per command invocation`,EXIT_CODE.USAGE);if(tokenCount!==0){if(stdinConsumerOption!==void 0&&stdinConsumerOption!==candidate.optionName)throw new PmCliError(`Only one option may use "${STDIN_TOKEN}" stdin token per command invocation. Already used by ${stdinConsumerOption}.`,EXIT_CODE.USAGE);stdinConsumerOption=candidate.optionName}}}async function resolveMutationStdinTokenFields(options,scalarFields,listFields){const source=options,definitions=[...scalarFields,...listFields];assertSingleStdinTokenConsumer(definitions.map(([field,optionName])=>({value:source[field],optionName,resolveToken:shouldResolveMutationStdinTokenField(options,field)})));const stdinResolver=createStdinTokenResolver(),resolved={...source};for(const[field,optionName]of scalarFields)resolved[field]=await stdinResolver.resolveValue(source[field],optionName,shouldResolveMutationStdinTokenField(options,field));for(const[field,optionName]of listFields)resolved[field]=await stdinResolver.resolveList(source[field],optionName,shouldResolveMutationStdinTokenField(options,field));return preserveMutationStdinTokenLiterals(resolved)}function createStdinTokenResolver(){let stdinValuePromise,stdinConsumerOption;const consumeStdin=async optionName=>{if(stdinConsumerOption&&stdinConsumerOption!==optionName)throw new PmCliError(`Only one option may use "${STDIN_TOKEN}" stdin token per command invocation. Already used by ${stdinConsumerOption}.`,EXIT_CODE.USAGE);return stdinConsumerOption=optionName,stdinValuePromise||(stdinValuePromise=readStdinText(optionName)),await stdinValuePromise};return{resolveValue:async(value,optionName,resolveToken=!0)=>{if(!resolveToken)return value;if(value!==void 0)return value.trim()!==STDIN_TOKEN?value:await consumeStdin(optionName)},resolveList:async(values,optionName,resolveToken=!0)=>{if(!resolveToken)return values;if(!values)return;const tokenIndexes=values.map((entry,index)=>entry.trim()===STDIN_TOKEN?index:-1).filter(index=>index>=0);if(tokenIndexes.length===0)return values;if(tokenIndexes.length>1)throw new PmCliError(`${optionName} accepts "${STDIN_TOKEN}" stdin token at most once per command invocation`,EXIT_CODE.USAGE);const stdinValue=await consumeStdin(optionName),next=[...values];return next[tokenIndexes[0]]=stdinValue,next}}}function parseOptionalNumber(raw,optionName){const value=Number(raw);if(!Number.isFinite(value))throw new PmCliError(`Invalid ${optionName} value "${raw}"`,EXIT_CODE.USAGE);return value}function parseOptionalNonNegativeInteger(raw,optionName){const trimmed=raw.trim(),value=Number(trimmed);if(trimmed===""||!Number.isInteger(value)||value<0)throw new PmCliError(`Invalid ${optionName} value "${raw}". Expected a non-negative integer.`,EXIT_CODE.USAGE);return value}const _testOnly={coerceJsonTagArray,stripCodeFenceEnvelope,parseMarkdownKeyValueLines};export{_testOnly,applyAcceptanceCriteriaMutations,applyTagRemovals,assertNoAmbiguousBareCommaEntry,assertNoUnknownCsvKeys,assertSingleStdinTokenConsumer,collectTagFlagValues,createStdinTokenResolver,looksLikeGenericKeyValueEntry,looksLikeStructuredKeyValueEntry,mergeAdditiveTags,overlayMutationStdinTokenPolicy,parseCsvKv,parseOptionalNonNegativeInteger,parseOptionalNumber,parseTags,preserveMutationStdinTokenFields,preserveMutationStdinTokenLiterals,resolveMutationStdinTokenFields,shouldResolveMutationStdinTokenField,shouldResolveMutationStdinTokens,splitAcceptanceCriteria,transferMutationStdinTokenPolicy};
3
9
  //# sourceMappingURL=parse.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d2940263-a7b4-5d29-b1e5-631fe1072a5b")}catch(e2){}})();const TERMINAL_PLAN_MODES=new Set(["completed","superseded"]);function isTerminalPlanMode(mode){return mode!==void 0&&TERMINAL_PLAN_MODES.has(mode)}function shouldCompletePlanOnClose(item){if(item.type.trim().toLowerCase()!=="plan")return false;const steps=item.plan_steps??[];return steps.length>0&&steps.every(step=>step.status==="completed")}export{TERMINAL_PLAN_MODES,isTerminalPlanMode,shouldCompletePlanOnClose};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="12c59406-7e00-5fe1-bd93-c1f9d8537f01")}catch{}})();const TERMINAL_PLAN_MODES=new Set(["completed","superseded"]);function isTerminalPlanMode(mode){return mode!==void 0&&TERMINAL_PLAN_MODES.has(mode)}function shouldCompletePlanOnClose(item){if(item.type.trim().toLowerCase()!=="plan")return!1;const steps=item.plan_steps??[];return steps.length>0&&steps.every(step=>step.status==="completed")}export{TERMINAL_PLAN_MODES,isTerminalPlanMode,shouldCompletePlanOnClose};
2
2
  //# sourceMappingURL=plan-lifecycle.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b0306587-b3bb-5f82-bb56-7939d1976870")}catch(e2){}})();import{PmCliError}from"../shared/errors.js";import{EXIT_CODE}from"../shared/constants.js";const PRIORITY_NAME_TO_VALUE={critical:0,high:1,medium:2,low:3,minimal:4};const PRIORITY_NAME_LIST=Object.keys(PRIORITY_NAME_TO_VALUE);const PRIORITY_ACCEPTED_FORMS_HINT=`numbers 0..4 (0=critical, 1=high, 2=medium, 3=low, 4=minimal) or names (${PRIORITY_NAME_LIST.join(", ")}), case-insensitive`;function priorityUsageError(raw){return new PmCliError(`Invalid priority "${raw}". Accepted values: ${PRIORITY_ACCEPTED_FORMS_HINT}.`,EXIT_CODE.USAGE)}function resolvePriority(raw){if(typeof raw==="number"){if(Number.isInteger(raw)&&raw>=0&&raw<=4){return raw}throw priorityUsageError(String(raw))}if(typeof raw!=="string"){throw priorityUsageError(String(raw))}const trimmed=raw.trim();if(trimmed.length===0){throw priorityUsageError(raw)}const normalizedName=trimmed.toLowerCase();if(Object.prototype.hasOwnProperty.call(PRIORITY_NAME_TO_VALUE,normalizedName)){return PRIORITY_NAME_TO_VALUE[normalizedName]}if(/^[0-4]$/.test(trimmed)){return Number(trimmed)}throw priorityUsageError(raw)}export{PRIORITY_ACCEPTED_FORMS_HINT,PRIORITY_NAME_TO_VALUE,resolvePriority};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0257ab6d-3ef8-5b98-adfd-c7dabd537c43")}catch{}})();import{PmCliError}from"../shared/errors.js";import{EXIT_CODE}from"../shared/constants.js";const PRIORITY_NAME_TO_VALUE={critical:0,high:1,medium:2,low:3,minimal:4},PRIORITY_NAME_LIST=Object.keys(PRIORITY_NAME_TO_VALUE),PRIORITY_ACCEPTED_FORMS_HINT=`numbers 0..4 (0=critical, 1=high, 2=medium, 3=low, 4=minimal) or names (${PRIORITY_NAME_LIST.join(", ")}), case-insensitive`;function priorityUsageError(raw){return new PmCliError(`Invalid priority "${raw}". Accepted values: ${PRIORITY_ACCEPTED_FORMS_HINT}.`,EXIT_CODE.USAGE)}function resolvePriority(raw){if(typeof raw=="number"){if(Number.isInteger(raw)&&raw>=0&&raw<=4)return raw;throw priorityUsageError(String(raw))}if(typeof raw!="string")throw priorityUsageError(String(raw));const trimmed=raw.trim();if(trimmed.length===0)throw priorityUsageError(raw);const normalizedName=trimmed.toLowerCase();if(Object.prototype.hasOwnProperty.call(PRIORITY_NAME_TO_VALUE,normalizedName))return PRIORITY_NAME_TO_VALUE[normalizedName];if(/^[0-4]$/.test(trimmed))return Number(trimmed);throw priorityUsageError(raw)}export{PRIORITY_ACCEPTED_FORMS_HINT,PRIORITY_NAME_TO_VALUE,resolvePriority};
2
2
  //# sourceMappingURL=priority.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bfb46357-04de-55a0-b132-779c153314de")}catch(e2){}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const SPRINT_RELEASE_VALUE_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._/-]*$/;const SPRINT_RELEASE_MAX_LENGTH=64;function normalizeSprintReleaseFormatPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="warn"||normalized==="strict_error"){return normalized}if(normalized==="strict"){return"strict_error"}throw new PmCliError("Config set sprint-release-format-policy requires --policy with one of: warn, strict_error (alias: strict)",EXIT_CODE.USAGE)}function validateSprintOrReleaseValue(field,rawValue,policy){const value=rawValue.trim();if(value.length===0){throw new PmCliError(`--${field} must not be empty. Use --${field} none to unset.`,EXIT_CODE.USAGE)}const isValid=value.length<=SPRINT_RELEASE_MAX_LENGTH&&SPRINT_RELEASE_VALUE_PATTERN.test(value);if(isValid){return{value,warnings:[]}}const guidance="Expected 1-64 characters matching [A-Za-z0-9][A-Za-z0-9._/-]* (no spaces).";if(policy==="strict_error"){throw new PmCliError(`Invalid --${field} value "${value}". ${guidance}`,EXIT_CODE.USAGE)}return{value,warnings:[`validation_warning:${field}_format:${value}`]}}export{normalizeSprintReleaseFormatPolicy,validateSprintOrReleaseValue};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b6206b0e-0cd8-5827-acbd-6ac064dbcad7")}catch{}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const SPRINT_RELEASE_VALUE_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._/-]*$/,SPRINT_RELEASE_MAX_LENGTH=64;function normalizeSprintReleaseFormatPolicy(value){const normalized=value?.trim().toLowerCase().replaceAll("-","_");if(normalized==="warn"||normalized==="strict_error")return normalized;if(normalized==="strict")return"strict_error";throw new PmCliError("Config set sprint-release-format-policy requires --policy with one of: warn, strict_error (alias: strict)",EXIT_CODE.USAGE)}function validateSprintOrReleaseValue(field,rawValue,policy){const value=rawValue.trim();if(value.length===0)throw new PmCliError(`--${field} must not be empty. Use --${field} none to unset.`,EXIT_CODE.USAGE);if(value.length<=SPRINT_RELEASE_MAX_LENGTH&&SPRINT_RELEASE_VALUE_PATTERN.test(value))return{value,warnings:[]};const guidance="Expected 1-64 characters matching [A-Za-z0-9][A-Za-z0-9._/-]* (no spaces).";if(policy==="strict_error")throw new PmCliError(`Invalid --${field} value "${value}". ${guidance}`,EXIT_CODE.USAGE);return{value,warnings:[`validation_warning:${field}_format:${value}`]}}export{normalizeSprintReleaseFormatPolicy,validateSprintOrReleaseValue};
2
2
  //# sourceMappingURL=sprint-release-format.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0eff4d63-2691-5130-bc12-4957218393b5")}catch(e2){}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{levenshteinDistanceWithinLimit}from"../shared/levenshtein.js";import{normalizeStatusInput}from"./status.js";const STATUS_GROUP_ALIASES={open:"open_status",closed:"close_status",canceled:"canceled_status",cancelled:"canceled_status"};const STATUS_ALL_SENTINEL="all";function isStatusAllFilterInput(raw){if(typeof raw!=="string"){return false}const tokens=raw.split(",").map(entry=>entry.trim().toLowerCase()).filter(entry=>entry.length>0);return tokens.length===1&&tokens[0]===STATUS_ALL_SENTINEL}function resolveStatusFilterToken(token,registry){const trimmed=token.trim().toLowerCase();if(trimmed.length===0){return void 0}const group=STATUS_GROUP_ALIASES[trimmed];if(group){return registry[group]}return normalizeStatusInput(token,registry)}function collectStatusSuggestionCandidates(registry){const candidates=new Set(Object.keys(STATUS_GROUP_ALIASES));for(const definition of registry.definitions){candidates.add(definition.id);for(const alias of definition.aliases){candidates.add(alias)}}return[...candidates]}function suggestClosestStatus(value,registry){const normalized=value.trim().toLowerCase();let best;let bestDistance=Number.POSITIVE_INFINITY;for(const candidate of collectStatusSuggestionCandidates(registry)){const distance=levenshteinDistanceWithinLimit(normalized,candidate.toLowerCase(),2);if(distance!==null&&distance<bestDistance){best=candidate;bestDistance=distance}}return best}function parseStatusFilterCsv(raw,registry,options){if(typeof raw!=="string"){return void 0}const strict=options?.strict===true;const flagLabel=options?.flagLabel??"--status";const tokens=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(tokens.length===0){return void 0}const allTokenCount=tokens.filter(token=>token.trim().toLowerCase()===STATUS_ALL_SENTINEL).length;if(allTokenCount>0){if(tokens.length===1){return void 0}throw new PmCliError(`Invalid ${flagLabel} value "all". Use it by itself, or omit ${flagLabel} to search every status.`,EXIT_CODE.USAGE)}const resolved=[];for(const token of tokens){const status=resolveStatusFilterToken(token,registry);if(status===void 0){if(strict){const suggestion=suggestClosestStatus(token,registry);throw new PmCliError(`Invalid ${flagLabel} value "${token}". Use open|closed|canceled or a configured status id${suggestion?`. Did you mean "${suggestion}"?`:"."}`,EXIT_CODE.USAGE)}resolved.push(token);continue}resolved.push(status)}return[...new Set(resolved)]}export{isStatusAllFilterInput,parseStatusFilterCsv,resolveStatusFilterToken};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="14e6c7b4-3161-5f82-b797-f06a879d1370")}catch{}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{levenshteinDistanceWithinLimit}from"../shared/levenshtein.js";import{normalizeStatusInput}from"./status.js";const STATUS_GROUP_ALIASES={open:"open_status",closed:"close_status",canceled:"canceled_status",cancelled:"canceled_status"},STATUS_ALL_SENTINEL="all";function isStatusAllFilterInput(raw){if(typeof raw!="string")return!1;const tokens=raw.split(",").map(entry=>entry.trim().toLowerCase()).filter(entry=>entry.length>0);return tokens.length===1&&tokens[0]===STATUS_ALL_SENTINEL}function resolveStatusFilterToken(token,registry){const trimmed=token.trim().toLowerCase();if(trimmed.length===0)return;const group=STATUS_GROUP_ALIASES[trimmed];return group?registry[group]:normalizeStatusInput(token,registry)}function collectStatusSuggestionCandidates(registry){const candidates=new Set(Object.keys(STATUS_GROUP_ALIASES));for(const definition of registry.definitions){candidates.add(definition.id);for(const alias of definition.aliases)candidates.add(alias)}return[...candidates]}function suggestClosestStatus(value,registry){const normalized=value.trim().toLowerCase();let best,bestDistance=Number.POSITIVE_INFINITY;for(const candidate of collectStatusSuggestionCandidates(registry)){const distance=levenshteinDistanceWithinLimit(normalized,candidate.toLowerCase(),2);distance!==null&&distance<bestDistance&&(best=candidate,bestDistance=distance)}return best}function parseStatusFilterCsv(raw,registry,options){if(typeof raw!="string")return;const strict=options?.strict===!0,flagLabel=options?.flagLabel??"--status",tokens=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(tokens.length===0)return;if(tokens.filter(token=>token.trim().toLowerCase()===STATUS_ALL_SENTINEL).length>0){if(tokens.length===1)return;throw new PmCliError(`Invalid ${flagLabel} value "all". Use it by itself, or omit ${flagLabel} to search every status.`,EXIT_CODE.USAGE)}const resolved=[];for(const token of tokens){const status=resolveStatusFilterToken(token,registry);if(status===void 0){if(strict){const suggestion=suggestClosestStatus(token,registry);throw new PmCliError(`Invalid ${flagLabel} value "${token}". Use open|closed|canceled or a configured status id${suggestion?`. Did you mean "${suggestion}"?`:"."}`,EXIT_CODE.USAGE)}resolved.push(token);continue}resolved.push(status)}return[...new Set(resolved)]}export{isStatusAllFilterInput,parseStatusFilterCsv,resolveStatusFilterToken};
2
2
  //# sourceMappingURL=status-filter.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6bb283b8-5c81-562a-926e-e48b83e6ebc8")}catch(e2){}})();import{STATUS_VALUES}from"../../types/index.js";import{normalizeStatusInputWithRegistry}from"../schema/runtime-schema.js";const STATUS_ALIAS_MAP={"in-progress":"in_progress",cancelled:"canceled"};function normalizeStatusInput(value,registry){if(registry){const normalizedFromRegistry=normalizeStatusInputWithRegistry(value,registry);if(normalizedFromRegistry){return normalizedFromRegistry}}if(typeof value!=="string"){return void 0}const normalized=value.trim().toLowerCase();if(!normalized){return void 0}const canonical=STATUS_ALIAS_MAP[normalized]??normalized;if(!STATUS_VALUES.includes(canonical)){return void 0}return canonical}function normalizeStatusForRegistry(status,registry){return normalizeStatusInput(status,registry)??status}function isTerminalStatus(status,registry){return registry.terminal_statuses.has(normalizeStatusForRegistry(status,registry))}export{isTerminalStatus,normalizeStatusForRegistry,normalizeStatusInput};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="515840b7-cf86-5d71-8ac1-beac7fd7c8a8")}catch{}})();import{STATUS_VALUES}from"../../types/index.js";import{normalizeStatusInputWithRegistry}from"../schema/runtime-schema.js";const STATUS_ALIAS_MAP={"in-progress":"in_progress",cancelled:"canceled"};function normalizeStatusInput(value,registry){if(registry){const normalizedFromRegistry=normalizeStatusInputWithRegistry(value,registry);if(normalizedFromRegistry)return normalizedFromRegistry}if(typeof value!="string")return;const normalized=value.trim().toLowerCase();if(!normalized)return;const canonical=STATUS_ALIAS_MAP[normalized]??normalized;if(STATUS_VALUES.includes(canonical))return canonical}function normalizeStatusForRegistry(status,registry){return normalizeStatusInput(status,registry)??status}function isTerminalStatus(status,registry){return registry.terminal_statuses.has(normalizeStatusForRegistry(status,registry))}export{isTerminalStatus,normalizeStatusForRegistry,normalizeStatusInput};
2
2
  //# sourceMappingURL=status.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e48e0cc7-7577-5702-ac17-a4529697444e")}catch(e2){}})();import{decode as decodeToon}from"@toon-format/toon";const TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR="https://github.com/toon-format/toon/pull/314";const TOON_SCALAR_BRACKET_ESCAPE_TRACKING={dependency:"@toon-format/toon",affected_versions:"<=2.3.0",resolved_version:"2.3.1",upstream_pr:TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,workaround_status:"removed"};function decodeToonItemContent(content){return{value:decodeToon(content),usedScalarBracketEscape:false}}export{TOON_SCALAR_BRACKET_ESCAPE_TRACKING,TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,decodeToonItemContent};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="aaa2be03-9478-5fbe-82e6-e4fc86e3735b")}catch{}})();import{decode as decodeToon}from"@toon-format/toon";const TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR="https://github.com/toon-format/toon/pull/314",TOON_SCALAR_BRACKET_ESCAPE_TRACKING={dependency:"@toon-format/toon",affected_versions:"<=2.3.0",resolved_version:"2.3.1",upstream_pr:TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,workaround_status:"removed"};function decodeToonItemContent(content){return{value:decodeToon(content),usedScalarBracketEscape:!1}}export{TOON_SCALAR_BRACKET_ESCAPE_TRACKING,TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,decodeToonItemContent};
2
2
  //# sourceMappingURL=toon-decode.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="69ea08ca-3793-51d7-a971-95abf442028f")}catch(e2){}})();import path from"node:path";import{TYPE_TO_FOLDER}from"../shared/constants.js";import{ITEM_TYPE_VALUES}from"../../types/index.js";import{normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,normalizeItemTypeStringList,strictPolicyCommand,parseItemExecutionRole}from"./item-type-definition.js";const BUILTIN_ITEM_EXECUTION_ROLES=Object.freeze({decision:"human",milestone:"gate"});const DEFAULT_REQUIRED_CREATE_FIELDS=["title","description","status","priority","tags","body","deadline","estimatedMinutes","acceptanceCriteria","author","message","assignee"];const DEFAULT_REQUIRED_CREATE_REPEATABLES=["dep","comment","note","learning","file","test","doc"];const COMMON_MUTATION_COMMAND_OPTION_KEYS=["deadline","estimatedMinutes","acceptanceCriteria","definitionOfReady","order","goal","objective","value","impact","outcome","whyNow","assignee","parent","reviewer","risk","confidence","sprint","release","blockedBy","blockedReason","unblockNote","reporter","severity","environment","reproSteps","resolution","expectedResult","actualResult","affectedVersion","fixedVersion","component","regression","customerImpact"];const CREATE_COMMAND_OPTION_KEYS=["title","description","type","status","priority","tags","body",...COMMON_MUTATION_COMMAND_OPTION_KEYS,"author","message","dep","comment","note","learning","file","test","doc","reminder","event","typeOption","field"];const UPDATE_COMMAND_OPTION_KEYS=["title","description","body","status","closeReason","priority","type","tags",...COMMON_MUTATION_COMMAND_OPTION_KEYS,"author","message","comment","note","learning","file","test","doc","reminder","event","typeOption","field","ownershipMetadataBypass","ownershipDependencyBypass","force"];const SHARED_COMMAND_OPTION_ALIASES={"close-reason":"closeReason",close_reason:"closeReason","estimated-minutes":"estimatedMinutes",estimated_minutes:"estimatedMinutes",estimate:"estimatedMinutes","acceptance-criteria":"acceptanceCriteria",acceptance_criteria:"acceptanceCriteria",ac:"acceptanceCriteria","definition-of-ready":"definitionOfReady",definition_of_ready:"definitionOfReady",rank:"order","why-now":"whyNow",why_now:"whyNow","blocked-by":"blockedBy",blocked_by:"blockedBy","blocked-reason":"blockedReason",blocked_reason:"blockedReason","unblock-note":"unblockNote",unblock_note:"unblockNote","repro-steps":"reproSteps",repro_steps:"reproSteps","expected-result":"expectedResult",expected_result:"expectedResult","actual-result":"actualResult",actual_result:"actualResult","affected-version":"affectedVersion",affected_version:"affectedVersion","fixed-version":"fixedVersion",fixed_version:"fixedVersion","customer-impact":"customerImpact",customer_impact:"customerImpact","type-option":"typeOption",type_option:"typeOption",type_options:"typeOption"};const CREATE_COMMAND_OPTION_ALIASES={...SHARED_COMMAND_OPTION_ALIASES};const UPDATE_COMMAND_OPTION_ALIASES={...SHARED_COMMAND_OPTION_ALIASES};const COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES=[["deadline","--deadline"],["estimatedMinutes","--estimate/--estimated-minutes"],["acceptanceCriteria","--acceptance-criteria/--ac"],["definitionOfReady","--definition-of-ready"],["order","--order/--rank"],["goal","--goal"],["objective","--objective"],["value","--value"],["impact","--impact"],["outcome","--outcome"],["whyNow","--why-now"],["assignee","--assignee"],["parent","--parent"],["reviewer","--reviewer"],["risk","--risk"],["confidence","--confidence"],["sprint","--sprint"],["release","--release"],["blockedBy","--blocked-by"],["blockedReason","--blocked-reason"],["unblockNote","--unblock-note"],["reporter","--reporter"],["severity","--severity"],["environment","--environment"],["reproSteps","--repro-steps"],["resolution","--resolution"],["expectedResult","--expected-result"],["actualResult","--actual-result"],["affectedVersion","--affected-version"],["fixedVersion","--fixed-version"],["component","--component"],["regression","--regression"],["customerImpact","--customer-impact"]];const LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES=[["comment","--comment"],["note","--note"],["learning","--learning"],["file","--file"],["test","--test"],["doc","--doc"],["reminder","--reminder"],["event","--event"],["typeOption","--type-option"]];function commandOptionLabelMap(entries){return Object.fromEntries(entries)}const CREATE_COMMAND_OPTION_FLAG_LABELS=commandOptionLabelMap([["title","--title"],["description","--description"],["type","--type"],["status","--status"],["priority","--priority"],["tags","--tags"],["body","--body"],...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,["author","--author"],["message","--message"],["dep","--dep"],...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES]);const UPDATE_COMMAND_OPTION_FLAG_LABELS=commandOptionLabelMap([["title","--title"],["description","--description"],["body","--body"],["status","--status"],["closeReason","--close-reason"],["priority","--priority"],["type","--type"],["tags","--tags"],...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,["author","--author"],["message","--message"],["force","--force"]]);function normalizeCommandOptionToken(value){return value.trim().replace(/^--+/,"").toLowerCase()}function commandOptionKeys(command){return command==="create"?CREATE_COMMAND_OPTION_KEYS:UPDATE_COMMAND_OPTION_KEYS}function commandOptionAliases(command){return command==="create"?CREATE_COMMAND_OPTION_ALIASES:UPDATE_COMMAND_OPTION_ALIASES}function canonicalizeCommandOptionKey(command,rawOption){const normalizedToken=normalizeCommandOptionToken(rawOption);if(normalizedToken.length===0){return void 0}const aliased=commandOptionAliases(command)[normalizedToken];if(aliased){return aliased}return commandOptionKeys(command).find(candidate=>candidate.toLowerCase()===normalizedToken)}function commandOptionFlagLabel(command,optionKey){const labels=command==="create"?CREATE_COMMAND_OPTION_FLAG_LABELS:UPDATE_COMMAND_OPTION_FLAG_LABELS;return labels[optionKey]??`--${optionKey.replace(/([A-Z])/g,"-$1").toLowerCase()}`}function toDefaultFolder(name){const normalized=toSlugToken(name);if(normalized.length===0){return"items"}return normalized.endsWith("s")?normalized:`${normalized}s`}function normalizeItemTypeFolder(folder){const trimmed=folder.trim();const portable=trimmed.replaceAll("\\","/");const trackerRelative=portable.replace(/^\/+/,"");const normalized=path.posix.normalize(trackerRelative);if(trimmed.includes("\0")||/^[A-Za-z]:/.test(normalized)||normalized==="."||normalized===".."||normalized.startsWith("../")){throw new Error(`Item type folder "${folder}" must stay inside the pm tracker root.`)}return normalized}function toSlugToken(value){const trimmed=value.trim().toLowerCase();let slug="";let pendingDash=false;for(const character of trimmed){const code=character.charCodeAt(0);const isAlpha=code>=97&&code<=122;const isDigit=code>=48&&code<=57;if(isAlpha||isDigit){if(pendingDash&&slug.length>0){slug+="-"}slug+=character;pendingDash=false;continue}if(slug.length>0){pendingDash=true}}return slug}function normalizeTypeDefinition(definition){return normalizeSharedItemTypeDefinition(definition,{resolvePolicyCommand:strictPolicyCommand})}function readStringArray(record,key){const value=record[key];return Array.isArray(value)?value.filter(entry=>typeof entry==="string"):void 0}function coerceOptionDefinitionFromUnknown(raw){if(typeof raw!=="object"||raw===null||Array.isArray(raw)){return null}const optionRecord=raw;if(typeof optionRecord.key!=="string"){return null}return{key:optionRecord.key,values:readStringArray(optionRecord,"values")??[],required:optionRecord.required===void 0?void 0:Boolean(optionRecord.required),aliases:readStringArray(optionRecord,"aliases"),description:typeof optionRecord.description==="string"?optionRecord.description:void 0}}function coerceCommandOptionPolicyFromUnknown(raw){if(typeof raw!=="object"||raw===null||Array.isArray(raw)){return null}const policyRecord=raw;if(typeof policyRecord.command!=="string"||typeof policyRecord.option!=="string"){return null}const normalizedCommand=policyRecord.command.trim().toLowerCase();if(normalizedCommand!=="create"&&normalizedCommand!=="update"){return null}return{command:normalizedCommand,option:policyRecord.option,required:policyRecord.required===void 0?void 0:Boolean(policyRecord.required),visible:policyRecord.visible===void 0?void 0:Boolean(policyRecord.visible),enabled:policyRecord.enabled===void 0?void 0:Boolean(policyRecord.enabled)}}function coerceOptionDefinitionsFromRecord(record){if(!Array.isArray(record.options)){return void 0}return record.options.map(entry=>coerceOptionDefinitionFromUnknown(entry)).filter(entry=>entry!==null)}function coerceCommandOptionPoliciesFromRecord(record){if(!Array.isArray(record.command_option_policies)){return void 0}return record.command_option_policies.map(entry=>coerceCommandOptionPolicyFromUnknown(entry)).filter(entry=>entry!==null)}function coerceTypeDefinitionFromUnknown(raw){if(typeof raw!=="object"||raw===null||Array.isArray(raw)){return null}const record=raw;const name=typeof record.name==="string"?record.name:"";if(name.trim().length===0){return null}const folder=typeof record.folder==="string"?record.folder:void 0;const description=typeof record.description==="string"?record.description:void 0;const defaultStatus=typeof record.default_status==="string"?record.default_status:void 0;return{name,description,default_status:defaultStatus,execution_role:parseItemExecutionRole(record.execution_role),folder,aliases:readStringArray(record,"aliases"),required_create_fields:readStringArray(record,"required_create_fields"),required_create_repeatables:readStringArray(record,"required_create_repeatables"),options:coerceOptionDefinitionsFromRecord(record),command_option_policies:coerceCommandOptionPoliciesFromRecord(record)}}function resolveDefinitionRequiredCreateFields(normalizedDefinition,existing){return normalizedDefinition.required_create_fields?normalizeItemTypeStringList(normalizedDefinition.required_create_fields):existing?.required_create_fields??[]}function resolveDefinitionRequiredCreateRepeatables(normalizedDefinition,existing){return normalizedDefinition.required_create_repeatables?normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables):existing?.required_create_repeatables??[]}function resolveDefinitionOptions(normalizedDefinition,existing){return normalizedDefinition.options?normalizedDefinition.options:existing?.options?[...existing.options]:[]}function resolveDefinitionCommandOptionPolicies(normalizedDefinition,existing){return normalizedDefinition.command_option_policies?normalizedDefinition.command_option_policies:existing?.command_option_policies?[...existing.command_option_policies]:[]}function buildResolvedTypeDefinition(normalizedDefinition,existing){const keepName=existing?.name??normalizedDefinition.name;const description=normalizedDefinition.description??existing?.description;const defaultStatus=normalizedDefinition.default_status??existing?.default_status;const folder=normalizeItemTypeFolder(normalizedDefinition.folder??existing?.folder??toDefaultFolder(keepName));const resolvedDefinition={name:keepName,execution_role:normalizedDefinition.execution_role,folder,aliases:normalizeItemTypeStringList([...existing?.aliases??[],...normalizedDefinition.aliases??[]]),required_create_fields:resolveDefinitionRequiredCreateFields(normalizedDefinition,existing),required_create_repeatables:resolveDefinitionRequiredCreateRepeatables(normalizedDefinition,existing),options:resolveDefinitionOptions(normalizedDefinition,existing),command_option_policies:resolveDefinitionCommandOptionPolicies(normalizedDefinition,existing)};if(description){resolvedDefinition.description=description}if(defaultStatus){resolvedDefinition.default_status=defaultStatus}return resolvedDefinition}function applyTypeDefinitions(source,target){for(const rawDefinition of source){const normalizedDefinition=normalizeTypeDefinition(rawDefinition);if(!normalizedDefinition){continue}const lowerName=normalizedDefinition.name.toLowerCase();const existing=target.get(lowerName);target.set(lowerName,buildResolvedTypeDefinition({...normalizedDefinition,execution_role:normalizedDefinition.execution_role??existing?.execution_role},existing))}}function collectExtensionTypeDefinitions(registrations){if(!registrations){return[]}const definitions=[];for(const registration of registrations.item_types??[]){const typeDefinitionsRaw=registration.types;if(!Array.isArray(typeDefinitionsRaw)){continue}for(const rawDefinition of typeDefinitionsRaw){const normalized=coerceTypeDefinitionFromUnknown(rawDefinition);if(normalized){definitions.push(normalized)}}}return definitions}function resolveItemTypeRegistry(settings,extensionRegistrations=null){const byLowerName=new Map;for(const builtin of ITEM_TYPE_VALUES){byLowerName.set(builtin.toLowerCase(),{name:builtin,execution_role:BUILTIN_ITEM_EXECUTION_ROLES[builtin.toLowerCase()]??"agent",folder:TYPE_TO_FOLDER[builtin],aliases:[],required_create_fields:[...DEFAULT_REQUIRED_CREATE_FIELDS],required_create_repeatables:[...DEFAULT_REQUIRED_CREATE_REPEATABLES],options:[],command_option_policies:[]})}applyTypeDefinitions(settings.item_types?.definitions??[],byLowerName);applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations),byLowerName);const definitions=[...byLowerName.values()].sort((left,right)=>left.name.localeCompare(right.name));const byType={};const aliasToType={};const typeToFolder={};for(const definition of definitions){byType[definition.name]=definition;typeToFolder[definition.name]=definition.folder;aliasToType[definition.name.toLowerCase()]=definition.name;for(const alias of definition.aliases){aliasToType[alias.toLowerCase()]=definition.name}}const folders=[...new Set(definitions.map(definition=>definition.folder))].sort((left,right)=>left.localeCompare(right));return{types:definitions.map(definition=>definition.name),folders,type_to_folder:typeToFolder,by_type:byType,alias_to_type:aliasToType}}function resolveTypeName(rawType,registry){if(rawType===void 0){return void 0}return registry.alias_to_type[rawType.trim().toLowerCase()]}function resolveTypeDefinition(typeName,registry){const resolvedName=resolveTypeName(typeName,registry);if(!resolvedName){return void 0}return registry.by_type[resolvedName]}function applyBaseRequiredCommandOptions(state,typeDefinition,command,baseRequiredOptions){for(const rawBase of baseRequiredOptions){const canonical=canonicalizeCommandOptionKey(command,rawBase);if(canonical){state.required.add(canonical);continue}state.errors.push(`Unsupported base required option "${rawBase}" for command "${command}" on type "${typeDefinition.name}"`)}}function applyBooleanPolicySet(target,option,enabled){if(enabled){target.add(option);return}target.delete(option)}function applyCommandOptionPolicy(state,typeDefinition,command,policy){const canonical=canonicalizeCommandOptionKey(command,policy.option);if(!canonical){state.errors.push(`Unsupported command_option_policies option "${policy.option}" for command "${command}" on type "${typeDefinition.name}"`);return}if(policy.required!==void 0){applyBooleanPolicySet(state.required,canonical,policy.required)}if(policy.visible!==void 0){applyBooleanPolicySet(state.hidden,canonical,!policy.visible)}if(policy.enabled!==void 0){applyBooleanPolicySet(state.disabled,canonical,!policy.enabled)}}function applyCommandOptionPolicies(state,typeDefinition,command){for(const policy of typeDefinition.command_option_policies){if(policy.command===command){applyCommandOptionPolicy(state,typeDefinition,command,policy)}}}function appendRequiredDisabledPolicyErrors(state,typeDefinition,command){for(const option of state.required){if(state.disabled.has(option)){state.errors.push(`Option "${option}" cannot be both required and disabled for command "${command}" on type "${typeDefinition.name}"`)}}}function resolveCommandOptionPolicyState(typeDefinition,command,baseRequiredOptions){const errors=[];const required=new Set;const hidden=new Set;const disabled=new Set;const state={required,hidden,disabled,errors};applyBaseRequiredCommandOptions(state,typeDefinition,command,baseRequiredOptions);applyCommandOptionPolicies(state,typeDefinition,command);appendRequiredDisabledPolicyErrors(state,typeDefinition,command);return{required:[...required],hidden:[...hidden].sort((left,right)=>left.localeCompare(right)),disabled:[...disabled].sort((left,right)=>left.localeCompare(right)),errors}}function buildTypeOptionAliasMap(typeDefinition){const optionByAlias=new Map;for(const option of typeDefinition.options){optionByAlias.set(option.key.toLowerCase(),option);for(const alias of option.aliases??[]){optionByAlias.set(alias.toLowerCase(),option)}}return optionByAlias}function resolveTypeOptionValue(optionDefinition,trimmedValue,errors){const allowedValues=optionDefinition.values;if(allowedValues.length===0){return trimmedValue}const valueLookup=new Map(allowedValues.map(value=>[value.toLowerCase(),value]));const canonical=valueLookup.get(trimmedValue.toLowerCase());if(!canonical){errors.push(`Invalid value "${trimmedValue}" for type option "${optionDefinition.key}". Allowed: ${allowedValues.join(", ")}`);return void 0}return canonical}function validateTypeOptions(typeName,rawTypeOptions,registry){const typeDefinition=resolveTypeDefinition(typeName,registry);if(!typeDefinition){return{normalized:void 0,errors:[`Unknown type "${typeName}"`]}}const errors=[];const optionByAlias=buildTypeOptionAliasMap(typeDefinition);const normalized={};for(const[rawKey,rawValue]of Object.entries(rawTypeOptions??{})){const trimmedKey=rawKey.trim();const trimmedValue=rawValue.trim();if(trimmedKey.length===0){errors.push("type option keys must not be empty");continue}if(trimmedValue.length===0){errors.push(`type option "${trimmedKey}" must not be empty`);continue}const optionDefinition=optionByAlias.get(trimmedKey.toLowerCase());if(!optionDefinition){const allowed=typeDefinition.options.map(option=>option.key).join(", ");errors.push(typeDefinition.options.length>0?`Unknown type option "${trimmedKey}" for type "${typeDefinition.name}". Allowed: ${allowed}`:`Type "${typeDefinition.name}" does not define any configurable type options`);continue}const resolvedValue=resolveTypeOptionValue(optionDefinition,trimmedValue,errors);if(resolvedValue===void 0){continue}normalized[optionDefinition.key]=resolvedValue}for(const option of typeDefinition.options){if(option.required&&!(option.key in normalized)){errors.push(`Missing required type option "${option.key}" for type "${typeDefinition.name}"`)}}const sortedKeys=Object.keys(normalized).sort((left,right)=>left.localeCompare(right));if(sortedKeys.length===0){return{normalized:void 0,errors}}return{normalized:Object.fromEntries(sortedKeys.map(key=>[key,normalized[key]])),errors}}export{BUILTIN_ITEM_EXECUTION_ROLES,COMMON_MUTATION_COMMAND_OPTION_KEYS,DEFAULT_REQUIRED_CREATE_FIELDS,DEFAULT_REQUIRED_CREATE_REPEATABLES,canonicalizeCommandOptionKey,commandOptionFlagLabel,normalizeItemTypeFolder,resolveCommandOptionPolicyState,resolveItemTypeRegistry,resolveTypeDefinition,resolveTypeName,toDefaultFolder,validateTypeOptions};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f40ddc8e-1dd5-5f26-b2ba-fbbac30a1781")}catch{}})();import path from"node:path";import{TYPE_TO_FOLDER}from"../shared/constants.js";import{ITEM_TYPE_VALUES}from"../../types/index.js";import{normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,normalizeItemTypeStringList,strictPolicyCommand,parseItemExecutionRole}from"./item-type-definition.js";const BUILTIN_ITEM_EXECUTION_ROLES=Object.freeze({decision:"human",milestone:"gate"}),DEFAULT_REQUIRED_CREATE_FIELDS=["title","description","status","priority","tags","body","deadline","estimatedMinutes","acceptanceCriteria","author","message","assignee"],DEFAULT_REQUIRED_CREATE_REPEATABLES=["dep","comment","note","learning","file","test","doc"],COMMON_MUTATION_COMMAND_OPTION_KEYS=["deadline","estimatedMinutes","acceptanceCriteria","definitionOfReady","order","goal","objective","value","impact","outcome","whyNow","assignee","parent","reviewer","risk","confidence","sprint","release","blockedBy","blockedReason","unblockNote","reporter","severity","environment","reproSteps","resolution","expectedResult","actualResult","affectedVersion","fixedVersion","component","regression","customerImpact"],CREATE_COMMAND_OPTION_KEYS=["title","description","type","status","priority","tags","body",...COMMON_MUTATION_COMMAND_OPTION_KEYS,"author","message","dep","comment","note","learning","file","test","doc","reminder","event","typeOption","field"],UPDATE_COMMAND_OPTION_KEYS=["title","description","body","status","closeReason","priority","type","tags",...COMMON_MUTATION_COMMAND_OPTION_KEYS,"author","message","comment","note","learning","file","test","doc","reminder","event","typeOption","field","ownershipMetadataBypass","ownershipDependencyBypass","force"],SHARED_COMMAND_OPTION_ALIASES={"close-reason":"closeReason",close_reason:"closeReason","estimated-minutes":"estimatedMinutes",estimated_minutes:"estimatedMinutes",estimate:"estimatedMinutes","acceptance-criteria":"acceptanceCriteria",acceptance_criteria:"acceptanceCriteria",ac:"acceptanceCriteria","definition-of-ready":"definitionOfReady",definition_of_ready:"definitionOfReady",rank:"order","why-now":"whyNow",why_now:"whyNow","blocked-by":"blockedBy",blocked_by:"blockedBy","blocked-reason":"blockedReason",blocked_reason:"blockedReason","unblock-note":"unblockNote",unblock_note:"unblockNote","repro-steps":"reproSteps",repro_steps:"reproSteps","expected-result":"expectedResult",expected_result:"expectedResult","actual-result":"actualResult",actual_result:"actualResult","affected-version":"affectedVersion",affected_version:"affectedVersion","fixed-version":"fixedVersion",fixed_version:"fixedVersion","customer-impact":"customerImpact",customer_impact:"customerImpact","type-option":"typeOption",type_option:"typeOption",type_options:"typeOption"},CREATE_COMMAND_OPTION_ALIASES={...SHARED_COMMAND_OPTION_ALIASES},UPDATE_COMMAND_OPTION_ALIASES={...SHARED_COMMAND_OPTION_ALIASES},COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES=[["deadline","--deadline"],["estimatedMinutes","--estimate/--estimated-minutes"],["acceptanceCriteria","--acceptance-criteria/--ac"],["definitionOfReady","--definition-of-ready"],["order","--order/--rank"],["goal","--goal"],["objective","--objective"],["value","--value"],["impact","--impact"],["outcome","--outcome"],["whyNow","--why-now"],["assignee","--assignee"],["parent","--parent"],["reviewer","--reviewer"],["risk","--risk"],["confidence","--confidence"],["sprint","--sprint"],["release","--release"],["blockedBy","--blocked-by"],["blockedReason","--blocked-reason"],["unblockNote","--unblock-note"],["reporter","--reporter"],["severity","--severity"],["environment","--environment"],["reproSteps","--repro-steps"],["resolution","--resolution"],["expectedResult","--expected-result"],["actualResult","--actual-result"],["affectedVersion","--affected-version"],["fixedVersion","--fixed-version"],["component","--component"],["regression","--regression"],["customerImpact","--customer-impact"]],LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES=[["comment","--comment"],["note","--note"],["learning","--learning"],["file","--file"],["test","--test"],["doc","--doc"],["reminder","--reminder"],["event","--event"],["typeOption","--type-option"]];function commandOptionLabelMap(entries){return Object.fromEntries(entries)}const CREATE_COMMAND_OPTION_FLAG_LABELS=commandOptionLabelMap([["title","--title"],["description","--description"],["type","--type"],["status","--status"],["priority","--priority"],["tags","--tags"],["body","--body"],...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,["author","--author"],["message","--message"],["dep","--dep"],...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES]),UPDATE_COMMAND_OPTION_FLAG_LABELS=commandOptionLabelMap([["title","--title"],["description","--description"],["body","--body"],["status","--status"],["closeReason","--close-reason"],["priority","--priority"],["type","--type"],["tags","--tags"],...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,["author","--author"],["message","--message"],["force","--force"]]);function normalizeCommandOptionToken(value){return value.trim().replace(/^--+/,"").toLowerCase()}function commandOptionKeys(command){return command==="create"?CREATE_COMMAND_OPTION_KEYS:UPDATE_COMMAND_OPTION_KEYS}function commandOptionAliases(command){return command==="create"?CREATE_COMMAND_OPTION_ALIASES:UPDATE_COMMAND_OPTION_ALIASES}function canonicalizeCommandOptionKey(command,rawOption){const normalizedToken=normalizeCommandOptionToken(rawOption);return normalizedToken.length===0?void 0:commandOptionAliases(command)[normalizedToken]||commandOptionKeys(command).find(candidate=>candidate.toLowerCase()===normalizedToken)}function commandOptionFlagLabel(command,optionKey){return(command==="create"?CREATE_COMMAND_OPTION_FLAG_LABELS:UPDATE_COMMAND_OPTION_FLAG_LABELS)[optionKey]??`--${optionKey.replace(/([A-Z])/g,"-$1").toLowerCase()}`}function toDefaultFolder(name){const normalized=toSlugToken(name);return normalized.length===0?"items":normalized.endsWith("s")?normalized:`${normalized}s`}function normalizeItemTypeFolder(folder){const trimmed=folder.trim(),trackerRelative=trimmed.replaceAll("\\","/").replace(/^\/+/,""),normalized=path.posix.normalize(trackerRelative);if(trimmed.includes("\0")||/^[A-Za-z]:/.test(normalized)||normalized==="."||normalized===".."||normalized.startsWith("../"))throw new Error(`Item type folder "${folder}" must stay inside the pm tracker root.`);return normalized}function toSlugToken(value){const trimmed=value.trim().toLowerCase();let slug="",pendingDash=!1;for(const character of trimmed){const code=character.charCodeAt(0),isAlpha=code>=97&&code<=122,isDigit=code>=48&&code<=57;if(isAlpha||isDigit){pendingDash&&slug.length>0&&(slug+="-"),slug+=character,pendingDash=!1;continue}slug.length>0&&(pendingDash=!0)}return slug}function normalizeTypeDefinition(definition){return normalizeSharedItemTypeDefinition(definition,{resolvePolicyCommand:strictPolicyCommand})}function readStringArray(record,key){const value=record[key];return Array.isArray(value)?value.filter(entry=>typeof entry=="string"):void 0}function coerceOptionDefinitionFromUnknown(raw){if(typeof raw!="object"||raw===null||Array.isArray(raw))return null;const optionRecord=raw;return typeof optionRecord.key!="string"?null:{key:optionRecord.key,values:readStringArray(optionRecord,"values")??[],required:optionRecord.required===void 0?void 0:!!optionRecord.required,aliases:readStringArray(optionRecord,"aliases"),description:typeof optionRecord.description=="string"?optionRecord.description:void 0}}function coerceCommandOptionPolicyFromUnknown(raw){if(typeof raw!="object"||raw===null||Array.isArray(raw))return null;const policyRecord=raw;if(typeof policyRecord.command!="string"||typeof policyRecord.option!="string")return null;const normalizedCommand=policyRecord.command.trim().toLowerCase();return normalizedCommand!=="create"&&normalizedCommand!=="update"?null:{command:normalizedCommand,option:policyRecord.option,required:policyRecord.required===void 0?void 0:!!policyRecord.required,visible:policyRecord.visible===void 0?void 0:!!policyRecord.visible,enabled:policyRecord.enabled===void 0?void 0:!!policyRecord.enabled}}function coerceOptionDefinitionsFromRecord(record){if(Array.isArray(record.options))return record.options.map(entry=>coerceOptionDefinitionFromUnknown(entry)).filter(entry=>entry!==null)}function coerceCommandOptionPoliciesFromRecord(record){if(Array.isArray(record.command_option_policies))return record.command_option_policies.map(entry=>coerceCommandOptionPolicyFromUnknown(entry)).filter(entry=>entry!==null)}function coerceTypeDefinitionFromUnknown(raw){if(typeof raw!="object"||raw===null||Array.isArray(raw))return null;const record=raw,name=typeof record.name=="string"?record.name:"";if(name.trim().length===0)return null;const folder=typeof record.folder=="string"?record.folder:void 0,description=typeof record.description=="string"?record.description:void 0,defaultStatus=typeof record.default_status=="string"?record.default_status:void 0;return{name,description,default_status:defaultStatus,execution_role:parseItemExecutionRole(record.execution_role),folder,aliases:readStringArray(record,"aliases"),required_create_fields:readStringArray(record,"required_create_fields"),required_create_repeatables:readStringArray(record,"required_create_repeatables"),options:coerceOptionDefinitionsFromRecord(record),command_option_policies:coerceCommandOptionPoliciesFromRecord(record)}}function resolveDefinitionRequiredCreateFields(normalizedDefinition,existing){return normalizedDefinition.required_create_fields?normalizeItemTypeStringList(normalizedDefinition.required_create_fields):existing?.required_create_fields??[]}function resolveDefinitionRequiredCreateRepeatables(normalizedDefinition,existing){return normalizedDefinition.required_create_repeatables?normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables):existing?.required_create_repeatables??[]}function resolveDefinitionOptions(normalizedDefinition,existing){return normalizedDefinition.options?normalizedDefinition.options:existing?.options?[...existing.options]:[]}function resolveDefinitionCommandOptionPolicies(normalizedDefinition,existing){return normalizedDefinition.command_option_policies?normalizedDefinition.command_option_policies:existing?.command_option_policies?[...existing.command_option_policies]:[]}function buildResolvedTypeDefinition(normalizedDefinition,existing){const keepName=existing?.name??normalizedDefinition.name,description=normalizedDefinition.description??existing?.description,defaultStatus=normalizedDefinition.default_status??existing?.default_status,folder=normalizeItemTypeFolder(normalizedDefinition.folder??existing?.folder??toDefaultFolder(keepName)),resolvedDefinition={name:keepName,execution_role:normalizedDefinition.execution_role,folder,aliases:normalizeItemTypeStringList([...existing?.aliases??[],...normalizedDefinition.aliases??[]]),required_create_fields:resolveDefinitionRequiredCreateFields(normalizedDefinition,existing),required_create_repeatables:resolveDefinitionRequiredCreateRepeatables(normalizedDefinition,existing),options:resolveDefinitionOptions(normalizedDefinition,existing),command_option_policies:resolveDefinitionCommandOptionPolicies(normalizedDefinition,existing)};return description&&(resolvedDefinition.description=description),defaultStatus&&(resolvedDefinition.default_status=defaultStatus),resolvedDefinition}function applyTypeDefinitions(source,target){for(const rawDefinition of source){const normalizedDefinition=normalizeTypeDefinition(rawDefinition);if(!normalizedDefinition)continue;const lowerName=normalizedDefinition.name.toLowerCase(),existing=target.get(lowerName);target.set(lowerName,buildResolvedTypeDefinition({...normalizedDefinition,execution_role:normalizedDefinition.execution_role??existing?.execution_role},existing))}}function collectExtensionTypeDefinitions(registrations){if(!registrations)return[];const definitions=[];for(const registration of registrations.item_types??[]){const typeDefinitionsRaw=registration.types;if(Array.isArray(typeDefinitionsRaw))for(const rawDefinition of typeDefinitionsRaw){const normalized=coerceTypeDefinitionFromUnknown(rawDefinition);normalized&&definitions.push(normalized)}}return definitions}function resolveItemTypeRegistry(settings,extensionRegistrations=null){const byLowerName=new Map;for(const builtin of ITEM_TYPE_VALUES)byLowerName.set(builtin.toLowerCase(),{name:builtin,execution_role:BUILTIN_ITEM_EXECUTION_ROLES[builtin.toLowerCase()]??"agent",folder:TYPE_TO_FOLDER[builtin],aliases:[],required_create_fields:[...DEFAULT_REQUIRED_CREATE_FIELDS],required_create_repeatables:[...DEFAULT_REQUIRED_CREATE_REPEATABLES],options:[],command_option_policies:[]});applyTypeDefinitions(settings.item_types?.definitions??[],byLowerName),applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations),byLowerName);const definitions=[...byLowerName.values()].sort((left,right)=>left.name.localeCompare(right.name)),byType={},aliasToType={},typeToFolder={};for(const definition of definitions){byType[definition.name]=definition,typeToFolder[definition.name]=definition.folder,aliasToType[definition.name.toLowerCase()]=definition.name;for(const alias of definition.aliases)aliasToType[alias.toLowerCase()]=definition.name}const folders=[...new Set(definitions.map(definition=>definition.folder))].sort((left,right)=>left.localeCompare(right));return{types:definitions.map(definition=>definition.name),folders,type_to_folder:typeToFolder,by_type:byType,alias_to_type:aliasToType}}function resolveTypeName(rawType,registry){if(rawType!==void 0)return registry.alias_to_type[rawType.trim().toLowerCase()]}function resolveTypeDefinition(typeName,registry){const resolvedName=resolveTypeName(typeName,registry);if(resolvedName)return registry.by_type[resolvedName]}function applyBaseRequiredCommandOptions(state,typeDefinition,command,baseRequiredOptions){for(const rawBase of baseRequiredOptions){const canonical=canonicalizeCommandOptionKey(command,rawBase);if(canonical){state.required.add(canonical);continue}state.errors.push(`Unsupported base required option "${rawBase}" for command "${command}" on type "${typeDefinition.name}"`)}}function applyBooleanPolicySet(target,option,enabled){if(enabled){target.add(option);return}target.delete(option)}function applyCommandOptionPolicy(state,typeDefinition,command,policy){const canonical=canonicalizeCommandOptionKey(command,policy.option);if(!canonical){state.errors.push(`Unsupported command_option_policies option "${policy.option}" for command "${command}" on type "${typeDefinition.name}"`);return}policy.required!==void 0&&applyBooleanPolicySet(state.required,canonical,policy.required),policy.visible!==void 0&&applyBooleanPolicySet(state.hidden,canonical,!policy.visible),policy.enabled!==void 0&&applyBooleanPolicySet(state.disabled,canonical,!policy.enabled)}function applyCommandOptionPolicies(state,typeDefinition,command){for(const policy of typeDefinition.command_option_policies)policy.command===command&&applyCommandOptionPolicy(state,typeDefinition,command,policy)}function appendRequiredDisabledPolicyErrors(state,typeDefinition,command){for(const option of state.required)state.disabled.has(option)&&state.errors.push(`Option "${option}" cannot be both required and disabled for command "${command}" on type "${typeDefinition.name}"`)}function resolveCommandOptionPolicyState(typeDefinition,command,baseRequiredOptions){const errors=[],required=new Set,hidden=new Set,disabled=new Set,state={required,hidden,disabled,errors};return applyBaseRequiredCommandOptions(state,typeDefinition,command,baseRequiredOptions),applyCommandOptionPolicies(state,typeDefinition,command),appendRequiredDisabledPolicyErrors(state,typeDefinition,command),{required:[...required],hidden:[...hidden].sort((left,right)=>left.localeCompare(right)),disabled:[...disabled].sort((left,right)=>left.localeCompare(right)),errors}}function buildTypeOptionAliasMap(typeDefinition){const optionByAlias=new Map;for(const option of typeDefinition.options){optionByAlias.set(option.key.toLowerCase(),option);for(const alias of option.aliases??[])optionByAlias.set(alias.toLowerCase(),option)}return optionByAlias}function resolveTypeOptionValue(optionDefinition,trimmedValue,errors){const allowedValues=optionDefinition.values;if(allowedValues.length===0)return trimmedValue;const canonical=new Map(allowedValues.map(value=>[value.toLowerCase(),value])).get(trimmedValue.toLowerCase());if(!canonical){errors.push(`Invalid value "${trimmedValue}" for type option "${optionDefinition.key}". Allowed: ${allowedValues.join(", ")}`);return}return canonical}function validateTypeOptions(typeName,rawTypeOptions,registry){const typeDefinition=resolveTypeDefinition(typeName,registry);if(!typeDefinition)return{normalized:void 0,errors:[`Unknown type "${typeName}"`]};const errors=[],optionByAlias=buildTypeOptionAliasMap(typeDefinition),normalized={};for(const[rawKey,rawValue]of Object.entries(rawTypeOptions??{})){const trimmedKey=rawKey.trim(),trimmedValue=rawValue.trim();if(trimmedKey.length===0){errors.push("type option keys must not be empty");continue}if(trimmedValue.length===0){errors.push(`type option "${trimmedKey}" must not be empty`);continue}const optionDefinition=optionByAlias.get(trimmedKey.toLowerCase());if(!optionDefinition){const allowed=typeDefinition.options.map(option=>option.key).join(", ");errors.push(typeDefinition.options.length>0?`Unknown type option "${trimmedKey}" for type "${typeDefinition.name}". Allowed: ${allowed}`:`Type "${typeDefinition.name}" does not define any configurable type options`);continue}const resolvedValue=resolveTypeOptionValue(optionDefinition,trimmedValue,errors);resolvedValue!==void 0&&(normalized[optionDefinition.key]=resolvedValue)}for(const option of typeDefinition.options)option.required&&!(option.key in normalized)&&errors.push(`Missing required type option "${option.key}" for type "${typeDefinition.name}"`);const sortedKeys=Object.keys(normalized).sort((left,right)=>left.localeCompare(right));return sortedKeys.length===0?{normalized:void 0,errors}:{normalized:Object.fromEntries(sortedKeys.map(key=>[key,normalized[key]])),errors}}export{BUILTIN_ITEM_EXECUTION_ROLES,COMMON_MUTATION_COMMAND_OPTION_KEYS,DEFAULT_REQUIRED_CREATE_FIELDS,DEFAULT_REQUIRED_CREATE_REPEATABLES,canonicalizeCommandOptionKey,commandOptionFlagLabel,normalizeItemTypeFolder,resolveCommandOptionPolicyState,resolveItemTypeRegistry,resolveTypeDefinition,resolveTypeName,toDefaultFolder,validateTypeOptions};
2
2
  //# sourceMappingURL=type-registry.js.map