@unbrained/pm-cli 2026.11.3 → 2026.11.4

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 (203) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +10 -0
  3. package/dist/cli/error-guidance.d.ts +14 -35
  4. package/dist/cli/error-guidance.js +2 -2
  5. package/dist/cli/expected-revisions.d.ts +55 -0
  6. package/dist/cli/expected-revisions.js +2 -0
  7. package/dist/cli/main.js +2 -2
  8. package/dist/cli/runtime/invocation-options.js +1 -1
  9. package/dist/cli-bundle/bundle-manifest.json +1 -1
  10. package/dist/cli-bundle/chunks/{chunk-UYNMKUGA.js → chunk-2GW662DP.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-32BCU6HN.js → chunk-3OXQGGRD.js} +46 -46
  12. package/dist/cli-bundle/chunks/chunk-5BVZ32G7.js +2 -0
  13. package/dist/cli-bundle/chunks/chunk-5S6RT5LX.js +9 -0
  14. package/dist/cli-bundle/chunks/chunk-5Z6LWFDL.js +31 -0
  15. package/dist/cli-bundle/chunks/{chunk-MQJXZX3Q.js → chunk-6T2V3UIK.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-5JZMF4M5.js → chunk-7PGNAHNW.js} +2 -2
  17. package/dist/cli-bundle/chunks/chunk-7RCI7AAA.js +20 -0
  18. package/dist/cli-bundle/chunks/chunk-AQ5UHHQS.js +2 -0
  19. package/dist/cli-bundle/chunks/chunk-BK2XAQVC.js +2 -0
  20. package/dist/cli-bundle/chunks/{chunk-TZ3D3DPQ.js → chunk-BRIPGUAO.js} +2 -2
  21. package/dist/cli-bundle/chunks/chunk-BWAXA6S4.js +6 -0
  22. package/dist/cli-bundle/chunks/{chunk-5IPXDZKU.js → chunk-CERNIZLB.js} +66 -66
  23. package/dist/cli-bundle/chunks/chunk-DSCFJTHB.js +122 -0
  24. package/dist/cli-bundle/chunks/{chunk-JPKIUWLG.js → chunk-L4BKTPJ6.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-Y7H55PCY.js → chunk-NPEDFOVQ.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-2CBHQXYJ.js → chunk-ODMJ3HIB.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-DEJHTFEF.js → chunk-QN7VCOUU.js} +2 -2
  28. package/dist/cli-bundle/chunks/chunk-QQHMNUZT.js +2 -0
  29. package/dist/cli-bundle/chunks/chunk-SRDO2NJU.js +2 -0
  30. package/dist/cli-bundle/chunks/chunk-T56MB6SF.js +2 -0
  31. package/dist/cli-bundle/chunks/chunk-TX2W6G37.js +3 -0
  32. package/dist/cli-bundle/chunks/item-revision-UAZOBP2Q.js +2 -0
  33. package/dist/cli-bundle/chunks/item-transaction-N5F4LXYV.js +2 -0
  34. package/dist/cli-bundle/chunks/mutation-admission-QZQI2NN5.js +2 -0
  35. package/dist/cli-bundle/chunks/{register-list-query-I6AZA3IX.js → register-list-query-P3NOKQUA.js} +2 -2
  36. package/dist/cli-bundle/chunks/{register-mutation-3DAXCLXR.js → register-mutation-A6I5K5N6.js} +2 -2
  37. package/dist/cli-bundle/chunks/register-operations-SPKB3TNM.js +2 -0
  38. package/dist/cli-bundle/chunks/register-setup-ZZRHJ4IS.js +2 -0
  39. package/dist/cli-bundle/chunks/{stage-7H36OTDJ.js → stage-L3T725DS.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/chunk-5NGNO54M.js +44 -0
  41. package/dist/cli-bundle/focused-chunks/{chunk-ZQRCVRGS.js → chunk-A2246ZM7.js} +54 -54
  42. package/dist/cli-bundle/focused-chunks/chunk-B6U44WPW.js +2 -0
  43. package/dist/cli-bundle/focused-chunks/chunk-BAW3DGQO.js +91 -0
  44. package/dist/cli-bundle/focused-chunks/chunk-BHNY3KPJ.js +2 -0
  45. package/dist/cli-bundle/focused-chunks/chunk-C3O6JJPO.js +2 -0
  46. package/dist/cli-bundle/focused-chunks/{chunk-LKN2WGGB.js → chunk-C7UX2ZI3.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/{chunk-YVLAP3BL.js → chunk-CBG67HUP.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/{chunk-TYHDZUL4.js → chunk-CO2DNPH7.js} +2 -2
  49. package/dist/cli-bundle/focused-chunks/chunk-CXTDEQ3N.js +8 -0
  50. package/dist/cli-bundle/focused-chunks/chunk-FEPE2CE4.js +2 -0
  51. package/dist/cli-bundle/focused-chunks/{chunk-RY4QEMAE.js → chunk-FFO7RBLN.js} +2 -2
  52. package/dist/cli-bundle/focused-chunks/{chunk-I5FODKYB.js → chunk-FXFDVM5O.js} +2 -2
  53. package/dist/cli-bundle/focused-chunks/chunk-I5LGPUWH.js +2 -0
  54. package/dist/cli-bundle/focused-chunks/chunk-J3YOATXR.js +80 -0
  55. package/dist/cli-bundle/focused-chunks/{chunk-HOXIIZEO.js → chunk-J6FDCAMH.js} +2 -2
  56. package/dist/cli-bundle/focused-chunks/chunk-J7M52SCZ.js +2 -0
  57. package/dist/cli-bundle/focused-chunks/chunk-JQS7TYQ6.js +12 -0
  58. package/dist/cli-bundle/focused-chunks/chunk-MEJKELWC.js +26 -0
  59. package/dist/cli-bundle/focused-chunks/chunk-PMKR4MJI.js +2 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-PNPYQDHU.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/chunk-Q4OIRSKL.js +2 -0
  62. package/dist/cli-bundle/focused-chunks/{chunk-F3X6UWMI.js → chunk-QEVJ3Y67.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{chunk-HJ27QLZV.js → chunk-SDLIUZEL.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/chunk-TFYTTDAK.js +2 -0
  65. package/dist/cli-bundle/focused-chunks/chunk-W3CSX6GI.js +3 -0
  66. package/dist/cli-bundle/focused-chunks/{chunk-D4XQOMG4.js → chunk-Y5GOUUYJ.js} +2 -2
  67. package/dist/cli-bundle/focused-chunks/item-revision-L6GVT42D.js +2 -0
  68. package/dist/cli-bundle/focused-chunks/item-transaction-GYGP264N.js +2 -0
  69. package/dist/cli-bundle/focused-chunks/mutation-admission-UWTH56OD.js +2 -0
  70. package/dist/cli-bundle/focused-chunks/{stage-4SQHVI3O.js → stage-WRSNJ7VI.js} +2 -2
  71. package/dist/cli-bundle/main.js +25 -25
  72. package/dist/cli-bundle/sdk-authoring.js +1 -1
  73. package/dist/cli-bundle/sdk-contracts.js +5 -5
  74. package/dist/cli-bundle/sdk-core.js +1 -1
  75. package/dist/cli-bundle/sdk-governance.js +1 -1
  76. package/dist/cli-bundle/sdk-graph.js +1 -1
  77. package/dist/cli-bundle/sdk-merge.js +57 -57
  78. package/dist/cli-bundle/sdk-query.js +1 -1
  79. package/dist/cli-bundle/sdk-runtime.js +1 -1
  80. package/dist/cli-bundle/sdk-testing.js +1 -1
  81. package/dist/cli-bundle/sdk.js +11 -11
  82. package/dist/core/config/positional-value.d.ts +1 -1
  83. package/dist/core/config/positional-value.js +1 -1
  84. package/dist/core/extensions/reserved-host-flags.js +1 -1
  85. package/dist/core/history/history-rewrite.js +1 -1
  86. package/dist/core/shared/command-types.d.ts +7 -0
  87. package/dist/core/store/item-mutation-precondition.d.ts +70 -6
  88. package/dist/core/store/item-mutation-precondition.js +1 -1
  89. package/dist/core/store/item-store.js +1 -1
  90. package/dist/core/store/settings-validator.js +1 -1
  91. package/dist/core/store/settings.js +1 -1
  92. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
  93. package/dist/sdk/cli-contracts/completeness.js +1 -1
  94. package/dist/sdk/cli-contracts/enum-contracts.d.ts +11 -0
  95. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  96. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  97. package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
  98. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  99. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  100. package/dist/sdk/cli-program.js +1 -1
  101. package/dist/sdk/config.d.ts +1 -1
  102. package/dist/sdk/config.js +1 -1
  103. package/dist/sdk/environment/project-runtime-compatibility.js +1 -1
  104. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  105. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  106. package/dist/sdk/governance/validate.js +1 -1
  107. package/dist/sdk/history/salvage.js +3 -3
  108. package/dist/sdk/history-compact.d.ts +7 -1
  109. package/dist/sdk/history-compact.js +1 -1
  110. package/dist/sdk/history-repair.d.ts +2 -1
  111. package/dist/sdk/history-repair.js +1 -1
  112. package/dist/sdk/index.d.ts +3 -0
  113. package/dist/sdk/index.js +1 -1
  114. package/dist/sdk/lifecycle/checkpoint-rollback.d.ts +10 -2
  115. package/dist/sdk/lifecycle/checkpoint-rollback.js +1 -1
  116. package/dist/sdk/lifecycle/claim.js +1 -1
  117. package/dist/sdk/lifecycle/close-many.d.ts +11 -2
  118. package/dist/sdk/lifecycle/close-many.js +1 -1
  119. package/dist/sdk/lifecycle/close.d.ts +15 -0
  120. package/dist/sdk/lifecycle/close.js +1 -1
  121. package/dist/sdk/lifecycle/item-revision.d.ts +162 -0
  122. package/dist/sdk/lifecycle/item-revision.js +2 -0
  123. package/dist/sdk/lifecycle/restore.js +1 -1
  124. package/dist/sdk/lifecycle/start-blockers.d.ts +52 -0
  125. package/dist/sdk/lifecycle/start-blockers.js +2 -0
  126. package/dist/sdk/lifecycle/task-composition.d.ts +11 -0
  127. package/dist/sdk/lifecycle/task-composition.js +1 -1
  128. package/dist/sdk/lifecycle/update-many.d.ts +11 -2
  129. package/dist/sdk/lifecycle/update-many.js +1 -1
  130. package/dist/sdk/lifecycle/update.js +2 -2
  131. package/dist/sdk/public-surface.json +1 -1
  132. package/dist/sdk/query/declared-blockers.d.ts +16 -0
  133. package/dist/sdk/query/declared-blockers.js +2 -0
  134. package/dist/sdk/query/get.d.ts +7 -0
  135. package/dist/sdk/query/get.js +1 -1
  136. package/dist/sdk/query/projection-contracts.js +1 -1
  137. package/dist/sdk/runtime-input.d.ts +12 -0
  138. package/dist/sdk/runtime-input.js +1 -1
  139. package/dist/sdk/runtime.d.ts +10 -0
  140. package/dist/sdk/runtime.js +1 -1
  141. package/dist/sdk/structured-mutations.js +1 -1
  142. package/dist/sdk/test/batch.js +2 -2
  143. package/dist/sdk/test/execution.js +2 -2
  144. package/dist/sdk/test/linked-command-detection.js +1 -1
  145. package/dist/sdk/workspace-transaction.d.ts +17 -6
  146. package/dist/sdk/workspace-transaction.js +1 -1
  147. package/dist/types.d.ts +6 -0
  148. package/dist/types.js +1 -1
  149. package/docs/COMMANDS.md +91 -0
  150. package/docs/CONFIGURATION.md +1 -0
  151. package/docs/SDK.md +110 -1
  152. package/docs/agent-task-token-baseline.json +1 -1
  153. package/docs/generated/FLAG_LEXICON_BUDGETS.md +111 -111
  154. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +12 -3
  155. package/marketplace.json +1 -1
  156. package/package.json +1 -1
  157. package/packages/pm-beads/package.json +1 -1
  158. package/packages/pm-calendar/package.json +1 -1
  159. package/packages/pm-command-kit/package.json +1 -1
  160. package/packages/pm-digital-twin/package.json +1 -1
  161. package/packages/pm-governance-audit/package.json +1 -1
  162. package/packages/pm-guide-shell/package.json +1 -1
  163. package/packages/pm-kanban/package.json +1 -1
  164. package/packages/pm-lifecycle-hooks/package.json +1 -1
  165. package/packages/pm-linked-test-adapters/package.json +1 -1
  166. package/packages/pm-search-advanced/package.json +1 -1
  167. package/packages/pm-templates/package.json +1 -1
  168. package/packages/pm-todos/package.json +1 -1
  169. package/packages/pm-vcs/package.json +1 -1
  170. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  171. package/plugins/pm-claude/package.json +1 -1
  172. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  173. package/plugins/pm-codex/package.json +1 -1
  174. package/plugins/pm-codex/plugin.json +1 -1
  175. package/runtime-dependencies.json +1 -1
  176. package/dist/cli-bundle/chunks/chunk-7ZEFHFAU.js +0 -2
  177. package/dist/cli-bundle/chunks/chunk-B6UTLYLM.js +0 -3
  178. package/dist/cli-bundle/chunks/chunk-HBKD5HZB.js +0 -2
  179. package/dist/cli-bundle/chunks/chunk-L6LCLC37.js +0 -2
  180. package/dist/cli-bundle/chunks/chunk-NR4KABHC.js +0 -31
  181. package/dist/cli-bundle/chunks/chunk-PWD5RY2D.js +0 -2
  182. package/dist/cli-bundle/chunks/chunk-XRMYA4R7.js +0 -20
  183. package/dist/cli-bundle/chunks/chunk-YWS4XV4I.js +0 -6
  184. package/dist/cli-bundle/chunks/chunk-ZOAJNPBL.js +0 -129
  185. package/dist/cli-bundle/chunks/item-transaction-ZHLJTBD7.js +0 -2
  186. package/dist/cli-bundle/chunks/mutation-admission-ZQMRMGIB.js +0 -2
  187. package/dist/cli-bundle/chunks/register-operations-G3QGGQ5Z.js +0 -2
  188. package/dist/cli-bundle/chunks/register-setup-LDXHMNOT.js +0 -2
  189. package/dist/cli-bundle/focused-chunks/chunk-3XGKBVJ3.js +0 -2
  190. package/dist/cli-bundle/focused-chunks/chunk-4HY6EGPB.js +0 -2
  191. package/dist/cli-bundle/focused-chunks/chunk-AK2CI2GI.js +0 -2
  192. package/dist/cli-bundle/focused-chunks/chunk-HUXZCPWT.js +0 -26
  193. package/dist/cli-bundle/focused-chunks/chunk-IKXJ57XA.js +0 -8
  194. package/dist/cli-bundle/focused-chunks/chunk-MOY6KZGJ.js +0 -44
  195. package/dist/cli-bundle/focused-chunks/chunk-PWUTFKSI.js +0 -2
  196. package/dist/cli-bundle/focused-chunks/chunk-PZRB7IXH.js +0 -91
  197. package/dist/cli-bundle/focused-chunks/chunk-WSYPVBKS.js +0 -80
  198. package/dist/cli-bundle/focused-chunks/chunk-WXLG7HZ5.js +0 -3
  199. package/dist/cli-bundle/focused-chunks/chunk-WZDFCVLX.js +0 -12
  200. package/dist/cli-bundle/focused-chunks/chunk-YGO3FWA2.js +0 -2
  201. package/dist/cli-bundle/focused-chunks/chunk-ZYXQACPB.js +0 -2
  202. package/dist/cli-bundle/focused-chunks/item-transaction-PZ2FQ6B2.js +0 -2
  203. package/dist/cli-bundle/focused-chunks/mutation-admission-XOOK6XFH.js +0 -2
@@ -1,4 +1,4 @@
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]="f9ff37ec-3a6f-5496-b59d-cdf2cce3a63a")}catch{}})();import{AsyncLocalStorage}from"node:async_hooks";import{lstat,realpath}from"node:fs/promises";import path from"node:path";import{CORE_SETTINGS_SECTION_KEYS,validateSettings}from"./settings-validator.js";import{runActiveOnReadHooks,runActiveOnWriteHooks}from"../extensions/index.js";import{EXIT_CODE,GOVERNANCE_PRESET_DEFAULTS,SETTINGS_DEFAULTS}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{resolveAuthor}from"../shared/author.js";import{isFileAbsentError,readFileIfExists,readRegularFile,transactionPreviewNonRegularFileError}from"../fs/fs-utils.js";import{mutateWorkspaceJsonWithHistory}from"../history/workspace-history.js";import{reconcileSettingsSnapshot}from"./settings-concurrency.js";import{DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,filePathForSchemaSection,loadRuntimeSchemaFromOptionalFiles,normalizeRuntimeSchemaSettings}from"../schema/runtime-schema.js";import{getSettingsPath}from"./paths.js";import{orderObject,stableValueEquals}from"../shared/serialization.js";import{normalizeItemTypeDefinition}from"../item/item-type-definition.js";import{normalizeEstimateDefaultOverrides}from"../validate/estimate-defaults.js";import{clearSettingsReadCache,collectSettingsReadCacheSignatures,getSettingsReadCacheEntry,setSettingsReadCacheEntry,settingsReadCacheSignaturesEqual}from"./settings-read-cache.js";const configurationOnlySettingsRoots=new AsyncLocalStorage;async function runWithConfigurationOnlySettings(pmRoot,run,isEnabled=()=>!0){const roots=new Set([path.resolve(pmRoot)]);try{roots.add(await realpath(pmRoot))}catch{}return configurationOnlySettingsRoots.run([...configurationOnlySettingsRoots.getStore()??[],[roots,isEnabled]],run)}function isConfigurationOnlySettingsRead(pmRoot){const root=path.resolve(pmRoot);return configurationOnlySettingsRoots.getStore()?.some(([roots,isEnabled])=>roots.has(root)&&isEnabled())??!1}const SETTINGS_WRITE_OP="settings:write",SETTINGS_PERSIST_SOURCE_SYMBOL=Symbol("pm.settings.persist_source"),SETTINGS_FALLBACK_ORIGIN_SYMBOL=Symbol("pm.settings.fallback_origin"),SETTINGS_FALLBACK_BASELINE_SYMBOL=Symbol("pm.settings.fallback_baseline"),MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH=128,DUPLICATE_DETECTION_MODES=new Set(["off","advisory","strict"]);function resolveGovernanceKnobsFromPreset(preset){return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset])}function normalizeGovernancePreset(value){return value==="minimal"||value==="default"||value==="strict"||value==="custom"?value:SETTINGS_DEFAULTS.governance.preset}function withGovernanceExtras(base,governance){const createDefaultType=typeof governance.create_default_type=="string"?governance.create_default_type.trim():void 0;return createDefaultType&&createDefaultType.length>0&&(base.create_default_type=createDefaultType),(governance.workflow_enforcement==="off"||governance.workflow_enforcement==="warn"||governance.workflow_enforcement==="strict")&&(base.workflow_enforcement=governance.workflow_enforcement),governance.require_close_reason===!1&&(base.require_close_reason=!1),base.duplicate_detection_mode=governance.duplicate_detection_mode,base.duplicate_detection_threshold=governance.duplicate_detection_threshold,base.duplicate_detection_limit=governance.duplicate_detection_limit,base}function normalizeGovernanceForPersist(governance){return governance.preset==="custom"?withGovernanceExtras({preset:"custom",ownership_enforcement:governance.ownership_enforcement,create_mode_default:governance.create_mode_default,close_validation_default:governance.close_validation_default,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,force_required_for_stale_lock:governance.force_required_for_stale_lock},governance):withGovernanceExtras({preset:governance.preset},governance)}function resolveGovernanceExtras(rawGovernance){const createDefaultType=typeof rawGovernance.create_default_type=="string"?rawGovernance.create_default_type.trim():void 0,extras={};createDefaultType&&createDefaultType.length>0&&(extras.create_default_type=createDefaultType),(rawGovernance.workflow_enforcement==="off"||rawGovernance.workflow_enforcement==="warn"||rawGovernance.workflow_enforcement==="strict")&&(extras.workflow_enforcement=rawGovernance.workflow_enforcement),typeof rawGovernance.require_close_reason=="boolean"&&(extras.require_close_reason=rawGovernance.require_close_reason),DUPLICATE_DETECTION_MODES.has(String(rawGovernance.duplicate_detection_mode))&&(extras.duplicate_detection_mode=rawGovernance.duplicate_detection_mode);const threshold=rawGovernance.duplicate_detection_threshold;[typeof threshold=="number",Number.isFinite(threshold),Number(threshold)>=0,Number(threshold)<=1].every(Boolean)&&(extras.duplicate_detection_threshold=threshold);const limit=rawGovernance.duplicate_detection_limit;return[typeof limit=="number",Number.isSafeInteger(limit),Number(limit)>=0,Number(limit)<=20].every(Boolean)&&(extras.duplicate_detection_limit=limit),extras}function resolveGovernanceKnobs(settings){const rawGovernance=settings.governance??{},preset=normalizeGovernancePreset(rawGovernance.preset),extras=resolveGovernanceExtras(rawGovernance);if(preset==="custom"){const baseline2=resolveGovernanceKnobsFromPreset("default"),requireCloseReason2=extras.require_close_reason??baseline2.require_close_reason;return{preset,ownership_enforcement:rawGovernance.ownership_enforcement??baseline2.ownership_enforcement,create_mode_default:rawGovernance.create_mode_default??baseline2.create_mode_default,close_validation_default:rawGovernance.close_validation_default??baseline2.close_validation_default,parent_reference:rawGovernance.parent_reference??baseline2.parent_reference,metadata_profile:rawGovernance.metadata_profile??baseline2.metadata_profile,force_required_for_stale_lock:rawGovernance.force_required_for_stale_lock??baseline2.force_required_for_stale_lock,...extras,require_close_reason:requireCloseReason2,duplicate_detection_mode:extras.duplicate_detection_mode??baseline2.duplicate_detection_mode,duplicate_detection_threshold:extras.duplicate_detection_threshold??baseline2.duplicate_detection_threshold,duplicate_detection_limit:extras.duplicate_detection_limit??baseline2.duplicate_detection_limit}}const baseline=resolveGovernanceKnobsFromPreset(preset),requireCloseReason=extras.require_close_reason??baseline.require_close_reason;return{preset,...baseline,...extras,require_close_reason:requireCloseReason}}function cloneDefaults(){return structuredClone(SETTINGS_DEFAULTS)}function normalizeSearchMutationRefreshPolicy(value){return value==="cache_only"||value==="semantic_configured"||value==="semantic_auto"?value:SETTINGS_DEFAULTS.search.mutation_refresh_policy}function normalizeSearchDefaultMode(value){return value==="auto"||value==="keyword"||value==="semantic"||value==="hybrid"?value:"auto"}function normalizeSearchQueryExpansionEnabled(value){return typeof value=="boolean"?value:SETTINGS_DEFAULTS.search.query_expansion.enabled}function normalizeSearchQueryExpansionProvider(value){return typeof value!="string"?SETTINGS_DEFAULTS.search.query_expansion.provider:value.trim()}function normalizeSearchRerankEnabled(value){return typeof value=="boolean"?value:SETTINGS_DEFAULTS.search.rerank.enabled}function normalizeSearchRerankModel(value){return typeof value!="string"?SETTINGS_DEFAULTS.search.rerank.model:value.trim()}function normalizeSearchRerankTopK(value){return typeof value=="number"&&Number.isFinite(value)&&Number.isInteger(value)&&value>0?value:SETTINGS_DEFAULTS.search.rerank.top_k}function normalizeVectorStoreCollectionName(value){if(typeof value!="string")return SETTINGS_DEFAULTS.vector_store.collection_name;const truncated=value.trim().replaceAll(/[^a-zA-Z0-9_-]/g,"_").slice(0,MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH);return truncated.length>0?truncated:SETTINGS_DEFAULTS.vector_store.collection_name}function cloneOptionalArray(value){return{present:Array.isArray(value),values:Array.isArray(value)?structuredClone(value):[]}}function buildSettingsPersistSourceSnapshot(parsedSettings,runtimeSettings){const sourceSchema=parsedSettings.schema,sourceStatuses=cloneOptionalArray(sourceSchema?.statuses),sourceFields=cloneOptionalArray(sourceSchema?.fields),sourceTypeWorkflows=cloneOptionalArray(sourceSchema?.type_workflows);return{persisted_settings:structuredClone(parsedSettings),source_settings:structuredClone(parsedSettings),has_source_item_type_definitions:Array.isArray(parsedSettings.item_types?.definitions),source_item_type_definitions:normalizeItemTypeDefinitions(parsedSettings.item_types?.definitions),has_source_schema_statuses:sourceStatuses.present,source_schema_statuses:sourceStatuses.values,has_source_schema_fields:sourceFields.present,source_schema_fields:sourceFields.values,has_source_schema_type_workflows:sourceTypeWorkflows.present,source_schema_type_workflows:sourceTypeWorkflows.values,runtime_item_type_definitions:normalizeItemTypeDefinitions(runtimeSettings.item_types?.definitions),runtime_schema_statuses:structuredClone(runtimeSettings.schema.statuses),runtime_schema_fields:structuredClone(runtimeSettings.schema.fields),runtime_schema_type_workflows:structuredClone(runtimeSettings.schema.type_workflows??[])}}function attachSettingsPersistSourceSnapshot(settings,source){Object.defineProperty(settings,SETTINGS_PERSIST_SOURCE_SYMBOL,{value:source,writable:!0,configurable:!0,enumerable:!1})}function getSettingsPersistSourceSnapshot(settings){const candidate=settings[SETTINGS_PERSIST_SOURCE_SYMBOL];if(!(!candidate||typeof candidate!="object"))return candidate}function persistSelectedItemFormat(settings){const source=getSettingsPersistSourceSnapshot(settings);if(source){const detachedSource=structuredClone(source);detachedSource.source_settings.item_format=settings.item_format,attachSettingsPersistSourceSnapshot(settings,detachedSource)}}function cloneSettingsReadResult(result){const clonedSettings=structuredClone(result.settings),persistSource=getSettingsPersistSourceSnapshot(result.settings);persistSource&&attachSettingsPersistSourceSnapshot(clonedSettings,persistSource);const fallbackOrigin=getSettingsFallbackOrigin(result.settings);return fallbackOrigin!==void 0&&markSettingsFallbackOrigin(clonedSettings,fallbackOrigin),{settings:clonedSettings,metadata:{has_explicit_item_format:result.metadata.has_explicit_item_format},warnings:[...result.warnings]}}function resolveSettingsReadTrackedPaths(pmRoot,schema,settingsPath){const normalizedSchema=normalizeRuntimeSchemaSettings(schema);return[settingsPath,filePathForSchemaSection(pmRoot,normalizedSchema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),filePathForSchemaSection(pmRoot,normalizedSchema.files.statuses,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),filePathForSchemaSection(pmRoot,normalizedSchema.files.fields,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),filePathForSchemaSection(pmRoot,normalizedSchema.files.workflows,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows)]}async function cacheSettingsReadResult(pmRoot,trackedPaths,result){const signatures=await collectSettingsReadCacheSignatures(trackedPaths);setSettingsReadCacheEntry(pmRoot,{tracked_paths:trackedPaths,signatures,value:cloneSettingsReadResult(result)})}async function cacheSettingsReadResultSafe(pmRoot,trackedPaths,result){try{await cacheSettingsReadResult(pmRoot,trackedPaths,result)}catch{clearSettingsReadCache(pmRoot)}}function findSettingsReadCacheSignature(signatures,targetPath){return signatures.find(signature=>signature.path===targetPath)}function selectedSettingsReadCacheSignaturesEqual(before,after,targetPaths){for(const targetPath of targetPaths){const beforeSignature=findSettingsReadCacheSignature(before,targetPath),afterSignature=findSettingsReadCacheSignature(after,targetPath);if(!beforeSignature||!afterSignature||!settingsReadCacheSignaturesEqual([beforeSignature],[afterSignature]))return!1}return!0}async function cacheSettingsReadResultIfStable(pmRoot,trackedPaths,result,stableSignatures,stablePaths){try{const currentSignatures=await collectSettingsReadCacheSignatures(trackedPaths);if(!selectedSettingsReadCacheSignaturesEqual(stableSignatures,currentSignatures,stablePaths)){clearSettingsReadCache(pmRoot);return}setSettingsReadCacheEntry(pmRoot,{tracked_paths:trackedPaths,signatures:currentSignatures,value:cloneSettingsReadResult(result)})}catch{clearSettingsReadCache(pmRoot)}}function resolvePersistedFileBackedSchemaSections(settings,source){const normalizedSchema=normalizeRuntimeSchemaSettings(settings.schema),currentItemTypeDefinitions=normalizeItemTypeDefinitions(settings.item_types?.definitions);if(!source)return{item_type_definitions:currentItemTypeDefinitions,schema_statuses:normalizedSchema.statuses,schema_fields:normalizedSchema.fields,schema_type_workflows:normalizedSchema.type_workflows};const currentTypeWorkflows=normalizedSchema.type_workflows??[],itemTypeDefinitionsUnchanged=stableValueEquals(currentItemTypeDefinitions,source.runtime_item_type_definitions),schemaStatusesUnchanged=stableValueEquals(normalizedSchema.statuses,source.runtime_schema_statuses),schemaFieldsUnchanged=stableValueEquals(normalizedSchema.fields,source.runtime_schema_fields),schemaTypeWorkflowsUnchanged=stableValueEquals(currentTypeWorkflows,source.runtime_schema_type_workflows);return{item_type_definitions:itemTypeDefinitionsUnchanged?source.has_source_item_type_definitions?normalizeItemTypeDefinitions(source.source_item_type_definitions):[]:currentItemTypeDefinitions,schema_statuses:schemaStatusesUnchanged?source.has_source_schema_statuses?structuredClone(source.source_schema_statuses):[]:normalizedSchema.statuses,schema_fields:schemaFieldsUnchanged?source.has_source_schema_fields?structuredClone(source.source_schema_fields):[]:normalizedSchema.fields,schema_type_workflows:schemaTypeWorkflowsUnchanged?source.has_source_schema_type_workflows?structuredClone(source.source_schema_type_workflows):void 0:normalizedSchema.type_workflows}}function markSettingsFallbackOrigin(settings,warning){Object.defineProperty(settings,SETTINGS_FALLBACK_ORIGIN_SYMBOL,{value:warning,writable:!0,configurable:!0,enumerable:!1})}function isSettingsReadFallback(settings){return getSettingsFallbackOrigin(settings)!==void 0}function getSettingsFallbackOrigin(settings){const candidate=settings[SETTINGS_FALLBACK_ORIGIN_SYMBOL];return typeof candidate=="string"?candidate:void 0}function getSettingsFallbackBaseline(settings){return settings[SETTINGS_FALLBACK_BASELINE_SYMBOL]}function setSettingsFallbackBaseline(settings,baseline){Object.defineProperty(settings,SETTINGS_FALLBACK_BASELINE_SYMBOL,{value:baseline,writable:!0,configurable:!0,enumerable:!1})}function buildFallbackSettingsReadResult(warning){const settings=cloneDefaults();return warning!==void 0&&markSettingsFallbackOrigin(settings,warning),{settings,metadata:{has_explicit_item_format:!1},warnings:warning?[warning]:[]}}function hasExplicitItemFormat(raw){if(typeof raw!="object"||raw===null||Array.isArray(raw))return!1;const itemFormat=raw.item_format;return itemFormat==="toon"||itemFormat==="json_markdown"}function normalizeStringList(values){return[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeAgentGuidanceSettings(value){const defaults=SETTINGS_DEFAULTS.agent_guidance,templateVersion=value?.template_version;return{prompt_completed:value?.prompt_completed===!0,declined:value?.declined===!0,declined_at:typeof value?.declined_at=="string"?value.declined_at:defaults.declined_at,template_version:typeof templateVersion=="number"&&Number.isInteger(templateVersion)&&templateVersion>0?templateVersion:defaults.template_version,last_checked_files:normalizeStringList(value?.last_checked_files??defaults.last_checked_files)}}function normalizeLowerStringList(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeExtensionPolicyMode(value){return value==="off"||value==="warn"||value==="enforce"?value:SETTINGS_DEFAULTS.extensions.policy.mode}function normalizeExtensionTrustMode(value){return value==="off"||value==="warn"||value==="enforce"?value:SETTINGS_DEFAULTS.extensions.policy.trust_mode}function normalizeExtensionSandboxProfile(value){return value==="none"||value==="restricted"||value==="strict"?value:SETTINGS_DEFAULTS.extensions.policy.default_sandbox_profile}function normalizeExtensionPolicyOverride(override){const name=override.name.trim().toLowerCase();if(name.length===0)return null;const normalized={name};override.disabled===!0&&(normalized.disabled=!0),override.require_trusted===!0&&(normalized.require_trusted=!0),override.require_provenance===!0&&(normalized.require_provenance=!0),override.sandbox_profile!==void 0&&(normalized.sandbox_profile=normalizeExtensionSandboxProfile(override.sandbox_profile));const allowedCapabilities=normalizeLowerStringList(override.allowed_capabilities),blockedCapabilities=normalizeLowerStringList(override.blocked_capabilities),allowedSurfaces=normalizeLowerStringList(override.allowed_surfaces),blockedSurfaces=normalizeLowerStringList(override.blocked_surfaces),allowedCommands=normalizeLowerStringList(override.allowed_commands),blockedCommands=normalizeLowerStringList(override.blocked_commands),allowedActions=normalizeLowerStringList(override.allowed_actions),blockedActions=normalizeLowerStringList(override.blocked_actions),allowedServices=normalizeLowerStringList(override.allowed_services),blockedServices=normalizeLowerStringList(override.blocked_services);return allowedCapabilities.length>0&&(normalized.allowed_capabilities=allowedCapabilities),blockedCapabilities.length>0&&(normalized.blocked_capabilities=blockedCapabilities),allowedSurfaces.length>0&&(normalized.allowed_surfaces=allowedSurfaces),blockedSurfaces.length>0&&(normalized.blocked_surfaces=blockedSurfaces),allowedCommands.length>0&&(normalized.allowed_commands=allowedCommands),blockedCommands.length>0&&(normalized.blocked_commands=blockedCommands),allowedActions.length>0&&(normalized.allowed_actions=allowedActions),blockedActions.length>0&&(normalized.blocked_actions=blockedActions),allowedServices.length>0&&(normalized.allowed_services=allowedServices),blockedServices.length>0&&(normalized.blocked_services=blockedServices),normalized}function normalizeExtensionPolicyOverrides(overrides){const dedupedByName=new Map;for(const override of overrides??[]){const normalized=normalizeExtensionPolicyOverride(override);normalized&&dedupedByName.set(normalized.name,normalized)}return[...dedupedByName.values()].sort((left,right)=>left.name.localeCompare(right.name))}function normalizePmMaxVersionExceededModeValue(value){return value==="block"||value==="warn"?value:void 0}function normalizePmMaxVersionExceededModeSetting(value){if(typeof value=="string")return normalizePmMaxVersionExceededModeValue(value);if(typeof value=="object"&&value!==null&&!Array.isArray(value)){const global2=normalizePmMaxVersionExceededModeValue(value.global),project=normalizePmMaxVersionExceededModeValue(value.project);return global2===void 0&&project===void 0?void 0:{...global2!==void 0?{global:global2}:{},...project!==void 0?{project}:{}}}}function normalizeExtensionPolicyList(policy,key){return normalizeLowerStringList(policy?.[key]??SETTINGS_DEFAULTS.extensions.policy[key])}function normalizeExtensionPolicySettings(policy){const pmMaxVersionExceededMode=normalizePmMaxVersionExceededModeSetting(policy?.pm_max_version_exceeded_mode);return{mode:normalizeExtensionPolicyMode(policy?.mode),trust_mode:normalizeExtensionTrustMode(policy?.trust_mode),...pmMaxVersionExceededMode!==void 0?{pm_max_version_exceeded_mode:pmMaxVersionExceededMode}:{},require_provenance:policy?.require_provenance===!0,trusted_extensions:normalizeExtensionPolicyList(policy,"trusted_extensions"),default_sandbox_profile:normalizeExtensionSandboxProfile(policy?.default_sandbox_profile),allowed_extensions:normalizeExtensionPolicyList(policy,"allowed_extensions"),blocked_extensions:normalizeExtensionPolicyList(policy,"blocked_extensions"),allowed_capabilities:normalizeExtensionPolicyList(policy,"allowed_capabilities"),blocked_capabilities:normalizeExtensionPolicyList(policy,"blocked_capabilities"),allowed_surfaces:normalizeExtensionPolicyList(policy,"allowed_surfaces"),blocked_surfaces:normalizeExtensionPolicyList(policy,"blocked_surfaces"),allowed_commands:normalizeExtensionPolicyList(policy,"allowed_commands"),blocked_commands:normalizeExtensionPolicyList(policy,"blocked_commands"),allowed_actions:normalizeExtensionPolicyList(policy,"allowed_actions"),blocked_actions:normalizeExtensionPolicyList(policy,"blocked_actions"),allowed_services:normalizeExtensionPolicyList(policy,"allowed_services"),blocked_services:normalizeExtensionPolicyList(policy,"blocked_services"),extension_overrides:normalizeExtensionPolicyOverrides(policy?.extension_overrides??SETTINGS_DEFAULTS.extensions.policy.extension_overrides)}}function normalizeValidationMetadataRequiredFields(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase().replaceAll("-","_")))].filter(value=>value.length>0).sort((left,right)=>left.localeCompare(right)).filter(value=>["author","acceptance_criteria","estimated_minutes","close_reason","reviewer","risk","confidence","sprint","release"].includes(value))}function normalizeValidationPatternList(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function valueOrDefault(value,fallback){return value===void 0?fallback:value}function recordOrEmpty(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:{}}function arrayOrEmpty(value){return Array.isArray(value)?value:[]}function buildValidationSettings(settings,defaults,governance){return{...defaults.validation,...settings.validation,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,metadata_required_fields:normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),lifecycle_stale_blocker_reason_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_stale_blocker_reason_patterns??defaults.validation.lifecycle_stale_blocker_reason_patterns),lifecycle_closure_like_blocked_reason_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_blocked_reason_patterns??defaults.validation.lifecycle_closure_like_blocked_reason_patterns),lifecycle_closure_like_resolution_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_resolution_patterns??defaults.validation.lifecycle_closure_like_resolution_patterns),lifecycle_closure_like_actual_result_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_actual_result_patterns??defaults.validation.lifecycle_closure_like_actual_result_patterns),estimate_defaults_by_type:normalizeEstimateDefaultOverrides(settings.validation?.estimate_defaults_by_type)}}function buildTelemetrySettings(settings,defaults){return{enabled:settings.telemetry?.enabled??defaults.telemetry.enabled,first_run_prompt_completed:settings.telemetry?.first_run_prompt_completed??defaults.telemetry.first_run_prompt_completed,capture_level:settings.telemetry?.capture_level??defaults.telemetry.capture_level,endpoint:settings.telemetry?.endpoint??defaults.telemetry.endpoint,installation_id:settings.telemetry?.installation_id??defaults.telemetry.installation_id,retention_days:settings.telemetry?.retention_days??defaults.telemetry.retention_days}}function buildSearchSettings(settings,defaults){return{...defaults.search,...settings.search,default_mode:normalizeSearchDefaultMode(settings.search?.default_mode),mutation_refresh_policy:normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),query_expansion:{...defaults.search.query_expansion,...settings.search?.query_expansion,enabled:normalizeSearchQueryExpansionEnabled(settings.search?.query_expansion?.enabled),provider:normalizeSearchQueryExpansionProvider(settings.search?.query_expansion?.provider)},rerank:{...defaults.search.rerank,...settings.search?.rerank,enabled:normalizeSearchRerankEnabled(settings.search?.rerank?.enabled),model:normalizeSearchRerankModel(settings.search?.rerank?.model),top_k:normalizeSearchRerankTopK(settings.search?.rerank?.top_k)}}}function buildVectorStoreSettings(settings,defaults){return{adapter:settings.vector_store.adapter??defaults.vector_store.adapter,collection_name:normalizeVectorStoreCollectionName(settings.vector_store.collection_name),qdrant:{...defaults.vector_store.qdrant,...settings.vector_store.qdrant},lancedb:{...defaults.vector_store.lancedb,...settings.vector_store.lancedb}}}function normalizeSettingsItemFormat(settings,defaults){return settings.item_format==="json_markdown"?"toon":settings.item_format??defaults.item_format}function buildContextSettings(settings,defaults){return{default_depth:settings.context?.default_depth??defaults.context.default_depth,activity_limit:settings.context?.activity_limit??defaults.context.activity_limit,stale_threshold_days:settings.context?.stale_threshold_days??defaults.context.stale_threshold_days,next_ranking_policy:settings.context?.next_ranking_policy??defaults.context.next_ranking_policy,sections:{...defaults.context.sections,...settings.context?.sections}}}function buildProviderSettings(settings,defaults){return{openai:{...defaults.providers.openai,...settings.providers.openai},ollama:{...defaults.providers.ollama,...settings.providers.ollama}}}function normalizeItemTypeDefinitions(definitions){const normalized=(definitions??[]).map(definition=>normalizeItemTypeDefinition(definition)).filter(definition=>definition!==null),dedupedByName=new Map;for(const definition of normalized)dedupedByName.set(definition.name.toLowerCase(),definition);return[...dedupedByName.values()].sort((left,right)=>left.name.localeCompare(right.name))}function mergeSettings(settings){const defaults=cloneDefaults(),governance=resolveGovernanceKnobs({governance:settings.governance??{preset:"default"}});return{...defaults,...settings,item_format:normalizeSettingsItemFormat(settings,defaults),locks:{...defaults.locks,...settings.locks},ids:{...defaults.ids,...settings.ids},agent_identity:structuredClone(settings.agent_identity??defaults.agent_identity),mutation_guard:{...defaults.mutation_guard,...settings.mutation_guard},checkpoints:{...defaults.checkpoints,...settings.checkpoints},output:{...defaults.output,...settings.output},ux:{...defaults.ux,...settings.ux},history:{...defaults.history,...settings.history,compact_policy:{...defaults.history.compact_policy,...settings.history?.compact_policy}},validation:buildValidationSettings(settings,defaults,governance),governance,workflow:{definition_of_done:[...settings.workflow?.definition_of_done??defaults.workflow.definition_of_done]},testing:{record_results_to_items:settings.testing?.record_results_to_items??defaults.testing.record_results_to_items,allow_untrusted_linked_tests:settings.testing?.allow_untrusted_linked_tests??defaults.testing.allow_untrusted_linked_tests},telemetry:buildTelemetrySettings(settings,defaults),agent_guidance:normalizeAgentGuidanceSettings(settings.agent_guidance??defaults.agent_guidance),item_types:{definitions:normalizeItemTypeDefinitions(settings.item_types?.definitions)},schema:normalizeRuntimeSchemaSettings(settings.schema??defaults.schema),context:buildContextSettings(settings,defaults),extensions:{enabled:[...settings.extensions.enabled],disabled:[...settings.extensions.disabled],policy:normalizeExtensionPolicySettings(settings.extensions.policy??defaults.extensions.policy)},search:buildSearchSettings(settings,defaults),providers:buildProviderSettings(settings,defaults),vector_store:buildVectorStoreSettings(settings,defaults)}}function orderSerializedSettingsSections(ordered){ordered.agent_identity=orderObject(ordered.agent_identity,["probes_enabled","identity_vocabulary","harness_signals"]);const orderedAgentIdentity=ordered.agent_identity;Object.hasOwn(orderedAgentIdentity,"identity_vocabulary")&&(orderedAgentIdentity.identity_vocabulary=orderObject(recordOrEmpty(orderedAgentIdentity.identity_vocabulary),["version","aliases"])),ordered.agent_identity.harness_signals=arrayOrEmpty(ordered.agent_identity.harness_signals).map(entry=>orderObject(recordOrEmpty(entry),["harness","environment_keys","model_environment_keys","session_environment_keys","provenance_environment_keys","provenance_resolvers","provenance_unavailable_dimensions","argv_markers","client_names"])),ordered.locks=orderObject(ordered.locks,["ttl_seconds","wait_ms"]),ordered.ids=orderObject(ordered.ids,["token_length"]),ordered.mutation_guard=orderObject(ordered.mutation_guard,["require_attributed_author","secret_guard","stale_in_progress_hours"]),ordered.checkpoints=orderObject(ordered.checkpoints,["retention_days"]),ordered.output=orderObject(ordered.output,["default_format"]),ordered.ux=orderObject(ordered.ux,["deprecation_hints"]),ordered.history=orderObject(ordered.history,["missing_stream","compact_policy"]),ordered.validation=orderObject(ordered.validation,["sprint_release_format","parent_reference","metadata_profile","metadata_required_fields","lifecycle_stale_blocker_reason_patterns","lifecycle_closure_like_blocked_reason_patterns","lifecycle_closure_like_resolution_patterns","lifecycle_closure_like_actual_result_patterns","estimate_defaults_by_type"]),ordered.governance=orderObject(ordered.governance,["preset","ownership_enforcement","create_mode_default","close_validation_default","require_close_reason","parent_reference","metadata_profile","force_required_for_stale_lock","create_default_type","workflow_enforcement","duplicate_detection_mode","duplicate_detection_threshold","duplicate_detection_limit"]),ordered.workflow=orderObject(ordered.workflow,["definition_of_done"]),ordered.testing=orderObject(ordered.testing,["record_results_to_items","allow_untrusted_linked_tests"]),ordered.telemetry=orderObject(ordered.telemetry,["enabled","first_run_prompt_completed","capture_level","endpoint","installation_id","retention_days"]),ordered.agent_guidance=orderObject(ordered.agent_guidance,["prompt_completed","declined","declined_at","template_version","last_checked_files"]),ordered.item_types=orderObject(ordered.item_types,["definitions"]),ordered.schema=orderObject(ordered.schema,["version","files","statuses","fields","workflow","type_workflows","unknown_field_policy"]),ordered.schema.files=orderObject(recordOrEmpty(ordered.schema.files),["types","statuses","fields","workflows"]),ordered.schema.workflow=orderObject(recordOrEmpty(ordered.schema.workflow),["draft_status","open_status","in_progress_status","blocked_status","close_status","canceled_status"]),ordered.context=orderObject(ordered.context,["default_depth","activity_limit","stale_threshold_days","next_ranking_policy","sections"]),ordered.context.sections=orderObject(recordOrEmpty(ordered.context.sections),["hierarchy","activity","progress","blockers","files","workload","staleness","tests"]),ordered.extensions=orderObject(ordered.extensions,["enabled","disabled","policy"]),ordered.extensions.policy=orderObject(recordOrEmpty(ordered.extensions.policy),["mode","trust_mode","pm_max_version_exceeded_mode","require_provenance","trusted_extensions","default_sandbox_profile","allowed_extensions","blocked_extensions","allowed_capabilities","blocked_capabilities","allowed_surfaces","blocked_surfaces","allowed_commands","blocked_commands","allowed_actions","blocked_actions","allowed_services","blocked_services","extension_overrides"]),ordered.extensions.policy.extension_overrides=arrayOrEmpty(ordered.extensions.policy.extension_overrides).map(entry=>orderObject(recordOrEmpty(entry),["name","disabled","require_trusted","require_provenance","sandbox_profile","allowed_capabilities","blocked_capabilities","allowed_surfaces","blocked_surfaces","allowed_commands","blocked_commands","allowed_actions","blocked_actions","allowed_services","blocked_services"])),ordered.search=orderObject(ordered.search,["score_threshold","hybrid_semantic_weight","max_results","embedding_model","embedding_corpus_max_characters","embedding_batch_size","embedding_timeout_ms","scanner_max_batch_retries","provider","default_mode","mutation_refresh_policy","query_expansion","rerank"]),ordered.search.query_expansion=orderObject(recordOrEmpty(ordered.search.query_expansion),["enabled","provider"]),ordered.search.rerank=orderObject(recordOrEmpty(ordered.search.rerank),["enabled","model","top_k"]),ordered.providers=orderObject(ordered.providers,["openai","ollama"]),ordered.providers.openai=orderObject(recordOrEmpty(ordered.providers.openai),["base_url","api_key","model"]),ordered.providers.ollama=orderObject(recordOrEmpty(ordered.providers.ollama),["base_url","model"]),ordered.vector_store=orderObject(ordered.vector_store,["adapter","collection_name","qdrant","lancedb"]),ordered.vector_store.qdrant=orderObject(recordOrEmpty(ordered.vector_store.qdrant),["url","api_key"]),ordered.vector_store.lancedb=orderObject(recordOrEmpty(ordered.vector_store.lancedb),["path"])}function buildSerializeBaseSettings(settings){return{...settings,locks:valueOrDefault(settings.locks,SETTINGS_DEFAULTS.locks),ids:valueOrDefault(settings.ids,SETTINGS_DEFAULTS.ids),agent_identity:valueOrDefault(settings.agent_identity,SETTINGS_DEFAULTS.agent_identity),mutation_guard:valueOrDefault(settings.mutation_guard,SETTINGS_DEFAULTS.mutation_guard),checkpoints:valueOrDefault(settings.checkpoints,SETTINGS_DEFAULTS.checkpoints),output:valueOrDefault(settings.output,SETTINGS_DEFAULTS.output),ux:valueOrDefault(settings.ux,SETTINGS_DEFAULTS.ux),history:valueOrDefault(settings.history,SETTINGS_DEFAULTS.history),validation:valueOrDefault(settings.validation,SETTINGS_DEFAULTS.validation),workflow:valueOrDefault(settings.workflow,SETTINGS_DEFAULTS.workflow),testing:valueOrDefault(settings.testing,SETTINGS_DEFAULTS.testing),telemetry:valueOrDefault(settings.telemetry,SETTINGS_DEFAULTS.telemetry),agent_guidance:valueOrDefault(settings.agent_guidance,SETTINGS_DEFAULTS.agent_guidance),item_types:valueOrDefault(settings.item_types,SETTINGS_DEFAULTS.item_types),schema:valueOrDefault(settings.schema,SETTINGS_DEFAULTS.schema),context:valueOrDefault(settings.context,SETTINGS_DEFAULTS.context),extensions:valueOrDefault(settings.extensions,SETTINGS_DEFAULTS.extensions),search:valueOrDefault(settings.search,SETTINGS_DEFAULTS.search),providers:valueOrDefault(settings.providers,SETTINGS_DEFAULTS.providers),vector_store:valueOrDefault(settings.vector_store,SETTINGS_DEFAULTS.vector_store)}}function buildSerializedValidationSettings(baseSettings,governance){return{...baseSettings.validation,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,metadata_required_fields:normalizeValidationMetadataRequiredFields(baseSettings.validation?.metadata_required_fields),lifecycle_stale_blocker_reason_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_stale_blocker_reason_patterns??SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns),lifecycle_closure_like_blocked_reason_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_blocked_reason_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns),lifecycle_closure_like_resolution_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_resolution_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns),lifecycle_closure_like_actual_result_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_actual_result_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns),estimate_defaults_by_type:normalizeEstimateDefaultOverrides(baseSettings.validation?.estimate_defaults_by_type)}}function buildSerializedSearchSettings(baseSettings){return{...SETTINGS_DEFAULTS.search,...baseSettings.search,default_mode:normalizeSearchDefaultMode(baseSettings.search?.default_mode),mutation_refresh_policy:normalizeSearchMutationRefreshPolicy(baseSettings.search?.mutation_refresh_policy),query_expansion:{...SETTINGS_DEFAULTS.search.query_expansion,...baseSettings.search?.query_expansion,enabled:normalizeSearchQueryExpansionEnabled(baseSettings.search?.query_expansion?.enabled),provider:normalizeSearchQueryExpansionProvider(baseSettings.search?.query_expansion?.provider)},rerank:{...SETTINGS_DEFAULTS.search.rerank,...baseSettings.search?.rerank,enabled:normalizeSearchRerankEnabled(baseSettings.search?.rerank?.enabled),model:normalizeSearchRerankModel(baseSettings.search?.rerank?.model),top_k:normalizeSearchRerankTopK(baseSettings.search?.rerank?.top_k)}}}function buildSerializedContextSettings(baseSettings){return{default_depth:baseSettings.context?.default_depth??SETTINGS_DEFAULTS.context.default_depth,activity_limit:baseSettings.context?.activity_limit??SETTINGS_DEFAULTS.context.activity_limit,stale_threshold_days:baseSettings.context?.stale_threshold_days??SETTINGS_DEFAULTS.context.stale_threshold_days,next_ranking_policy:baseSettings.context?.next_ranking_policy??SETTINGS_DEFAULTS.context.next_ranking_policy,sections:{...SETTINGS_DEFAULTS.context.sections,...baseSettings.context?.sections}}}function buildSerializedVectorStoreSettings(baseSettings){return{...baseSettings.vector_store,adapter:baseSettings.vector_store?.adapter??SETTINGS_DEFAULTS.vector_store.adapter,collection_name:normalizeVectorStoreCollectionName(baseSettings.vector_store?.collection_name),qdrant:{...baseSettings.vector_store?.qdrant},lancedb:{...baseSettings.vector_store?.lancedb}}}function buildNormalizedSettingsForSerialization(baseSettings,governance,normalizedSchema,persistedFileBackedSections){return{...baseSettings,item_format:"toon",validation:buildSerializedValidationSettings(baseSettings,governance),governance,agent_guidance:normalizeAgentGuidanceSettings(baseSettings.agent_guidance),item_types:{definitions:persistedFileBackedSections.item_type_definitions},schema:{...normalizedSchema,statuses:persistedFileBackedSections.schema_statuses,fields:persistedFileBackedSections.schema_fields,type_workflows:persistedFileBackedSections.schema_type_workflows},search:buildSerializedSearchSettings(baseSettings),context:buildSerializedContextSettings(baseSettings),extensions:{enabled:normalizeStringList(baseSettings.extensions?.enabled),disabled:normalizeStringList(baseSettings.extensions?.disabled),policy:normalizeExtensionPolicySettings(baseSettings.extensions?.policy)},vector_store:buildSerializedVectorStoreSettings(baseSettings)}}function overlayPresentSettingsSource(target,source){for(const key of Object.keys(source)){const value=Reflect.get(source,key),existing=target[key];typeof value=="object"&&value!==null&&!Array.isArray(value)&&typeof existing=="object"&&existing!==null&&!Array.isArray(existing)?overlayPresentSettingsSource(existing,value):target[key]=structuredClone(value)}}function applySettingsDelta(target,baseline,current){const keys=new Set([...Object.keys(baseline),...Object.keys(current)]);for(const key of keys){const before=baseline[key],after=current[key];if(!stableValueEquals(before,after)){if(after===void 0){delete target[key];continue}if(typeof before=="object"&&before!==null&&!Array.isArray(before)&&typeof after=="object"&&after!==null&&!Array.isArray(after)){const existing=target[key],nestedTarget=typeof existing=="object"&&existing!==null&&!Array.isArray(existing)?existing:{};applySettingsDelta(nestedTarget,before,after),Object.keys(nestedTarget).length>0?target[key]=nestedTarget:delete target[key];continue}target[key]=structuredClone(after)}}}const SETTINGS_TOP_LEVEL_KEY_ORDER=["version","id_prefix","ids","author_default","agent_identity","mutation_guard","item_format","locks","checkpoints","output","ux","history","validation","governance","workflow","testing","telemetry","agent_guidance","item_types","schema","context","extensions","search","providers","vector_store"];function buildOrderedSettingsForSerialization(settings,persistSource){const baseSettings=buildSerializeBaseSettings(settings),governance=resolveGovernanceKnobs(baseSettings),normalizedSchema=normalizeRuntimeSchemaSettings(baseSettings.schema),persistedFileBackedSections=resolvePersistedFileBackedSchemaSections(baseSettings,persistSource),normalizedSettings=buildNormalizedSettingsForSerialization(baseSettings,governance,normalizedSchema,persistedFileBackedSections),ordered=orderObject({...normalizedSettings,governance:normalizeGovernanceForPersist(governance)},SETTINGS_TOP_LEVEL_KEY_ORDER);return orderSerializedSettingsSections(ordered),ordered}function serializeSettings(settings,options={}){const persistSource=options.source===void 0?options.persist_source:buildSettingsPersistSourceSnapshot(options.source.validated,mergeSettings(options.source.validated)),ordered=buildOrderedSettingsForSerialization(settings,persistSource);if(persistSource){const baselineSettings=mergeSettings(persistSource.source_settings);baselineSettings.item_types={definitions:structuredClone(persistSource.runtime_item_type_definitions)},baselineSettings.schema={...baselineSettings.schema,statuses:structuredClone(persistSource.runtime_schema_statuses),fields:structuredClone(persistSource.runtime_schema_fields),type_workflows:structuredClone(persistSource.runtime_schema_type_workflows)};const baseline=buildOrderedSettingsForSerialization(baselineSettings,persistSource);options.source!==void 0&&overlayPresentSettingsSource(baseline,options.source.validated);const sparse=structuredClone(options.source===void 0?persistSource.source_settings:options.source.raw);return applySettingsDelta(sparse,baseline,ordered),`${JSON.stringify(orderObject(sparse,SETTINGS_TOP_LEVEL_KEY_ORDER),null,2)}
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]="aa89cd28-76a1-5eaf-b6f7-7501acefa5f2")}catch{}})();import{AsyncLocalStorage}from"node:async_hooks";import{lstat,realpath}from"node:fs/promises";import path from"node:path";import{CORE_SETTINGS_SECTION_KEYS,validateSettings}from"./settings-validator.js";import{runActiveOnReadHooks,runActiveOnWriteHooks}from"../extensions/index.js";import{EXIT_CODE,GOVERNANCE_PRESET_DEFAULTS,SETTINGS_DEFAULTS}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{resolveAuthor}from"../shared/author.js";import{isFileAbsentError,readFileIfExists,readRegularFile,transactionPreviewNonRegularFileError}from"../fs/fs-utils.js";import{mutateWorkspaceJsonWithHistory}from"../history/workspace-history.js";import{reconcileSettingsSnapshot}from"./settings-concurrency.js";import{DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,filePathForSchemaSection,loadRuntimeSchemaFromOptionalFiles,normalizeRuntimeSchemaSettings}from"../schema/runtime-schema.js";import{getSettingsPath}from"./paths.js";import{orderObject,stableValueEquals}from"../shared/serialization.js";import{normalizeItemTypeDefinition}from"../item/item-type-definition.js";import{normalizeEstimateDefaultOverrides}from"../validate/estimate-defaults.js";import{clearSettingsReadCache,collectSettingsReadCacheSignatures,getSettingsReadCacheEntry,setSettingsReadCacheEntry,settingsReadCacheSignaturesEqual}from"./settings-read-cache.js";import{GOVERNANCE_START_BLOCKER_ENFORCEMENT_VALUES}from"../../types/index.js";const configurationOnlySettingsRoots=new AsyncLocalStorage;async function runWithConfigurationOnlySettings(pmRoot,run,isEnabled=()=>!0){const roots=new Set([path.resolve(pmRoot)]);try{roots.add(await realpath(pmRoot))}catch{}return configurationOnlySettingsRoots.run([...configurationOnlySettingsRoots.getStore()??[],[roots,isEnabled]],run)}function isConfigurationOnlySettingsRead(pmRoot){const root=path.resolve(pmRoot);return configurationOnlySettingsRoots.getStore()?.some(([roots,isEnabled])=>roots.has(root)&&isEnabled())??!1}const SETTINGS_WRITE_OP="settings:write",SETTINGS_PERSIST_SOURCE_SYMBOL=Symbol("pm.settings.persist_source"),SETTINGS_FALLBACK_ORIGIN_SYMBOL=Symbol("pm.settings.fallback_origin"),SETTINGS_FALLBACK_BASELINE_SYMBOL=Symbol("pm.settings.fallback_baseline"),MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH=128,DUPLICATE_DETECTION_MODES=new Set(["off","advisory","strict"]);function resolveGovernanceKnobsFromPreset(preset){return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset])}function normalizeGovernancePreset(value){return value==="minimal"||value==="default"||value==="strict"||value==="custom"?value:SETTINGS_DEFAULTS.governance.preset}const START_BLOCKER_ENFORCEMENT_VALUES=new Set(GOVERNANCE_START_BLOCKER_ENFORCEMENT_VALUES);function isStartBlockerEnforcement(value){return START_BLOCKER_ENFORCEMENT_VALUES.has(value)}function withGovernanceExtras(base,governance){const createDefaultType=typeof governance.create_default_type=="string"?governance.create_default_type.trim():void 0;return createDefaultType&&createDefaultType.length>0&&(base.create_default_type=createDefaultType),(governance.workflow_enforcement==="off"||governance.workflow_enforcement==="warn"||governance.workflow_enforcement==="strict")&&(base.workflow_enforcement=governance.workflow_enforcement),isStartBlockerEnforcement(governance.start_blocker_enforcement)&&(base.start_blocker_enforcement=governance.start_blocker_enforcement),governance.require_close_reason===!1&&(base.require_close_reason=!1),base.duplicate_detection_mode=governance.duplicate_detection_mode,base.duplicate_detection_threshold=governance.duplicate_detection_threshold,base.duplicate_detection_limit=governance.duplicate_detection_limit,base}function normalizeGovernanceForPersist(governance){return governance.preset==="custom"?withGovernanceExtras({preset:"custom",ownership_enforcement:governance.ownership_enforcement,create_mode_default:governance.create_mode_default,close_validation_default:governance.close_validation_default,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,force_required_for_stale_lock:governance.force_required_for_stale_lock},governance):withGovernanceExtras({preset:governance.preset},governance)}function resolveGovernanceExtras(rawGovernance){const createDefaultType=typeof rawGovernance.create_default_type=="string"?rawGovernance.create_default_type.trim():void 0,extras={};createDefaultType&&createDefaultType.length>0&&(extras.create_default_type=createDefaultType),(rawGovernance.workflow_enforcement==="off"||rawGovernance.workflow_enforcement==="warn"||rawGovernance.workflow_enforcement==="strict")&&(extras.workflow_enforcement=rawGovernance.workflow_enforcement),isStartBlockerEnforcement(rawGovernance.start_blocker_enforcement)&&(extras.start_blocker_enforcement=rawGovernance.start_blocker_enforcement),typeof rawGovernance.require_close_reason=="boolean"&&(extras.require_close_reason=rawGovernance.require_close_reason),DUPLICATE_DETECTION_MODES.has(String(rawGovernance.duplicate_detection_mode))&&(extras.duplicate_detection_mode=rawGovernance.duplicate_detection_mode);const threshold=rawGovernance.duplicate_detection_threshold;[typeof threshold=="number",Number.isFinite(threshold),Number(threshold)>=0,Number(threshold)<=1].every(Boolean)&&(extras.duplicate_detection_threshold=threshold);const limit=rawGovernance.duplicate_detection_limit;return[typeof limit=="number",Number.isSafeInteger(limit),Number(limit)>=0,Number(limit)<=20].every(Boolean)&&(extras.duplicate_detection_limit=limit),extras}function resolveGovernanceKnobs(settings){const rawGovernance=settings.governance??{},preset=normalizeGovernancePreset(rawGovernance.preset),extras=resolveGovernanceExtras(rawGovernance);if(preset==="custom"){const baseline2=resolveGovernanceKnobsFromPreset("default"),requireCloseReason2=extras.require_close_reason??baseline2.require_close_reason;return{preset,ownership_enforcement:rawGovernance.ownership_enforcement??baseline2.ownership_enforcement,create_mode_default:rawGovernance.create_mode_default??baseline2.create_mode_default,close_validation_default:rawGovernance.close_validation_default??baseline2.close_validation_default,parent_reference:rawGovernance.parent_reference??baseline2.parent_reference,metadata_profile:rawGovernance.metadata_profile??baseline2.metadata_profile,force_required_for_stale_lock:rawGovernance.force_required_for_stale_lock??baseline2.force_required_for_stale_lock,...extras,require_close_reason:requireCloseReason2,duplicate_detection_mode:extras.duplicate_detection_mode??baseline2.duplicate_detection_mode,duplicate_detection_threshold:extras.duplicate_detection_threshold??baseline2.duplicate_detection_threshold,duplicate_detection_limit:extras.duplicate_detection_limit??baseline2.duplicate_detection_limit}}const baseline=resolveGovernanceKnobsFromPreset(preset),requireCloseReason=extras.require_close_reason??baseline.require_close_reason;return{preset,...baseline,...extras,require_close_reason:requireCloseReason}}function cloneDefaults(){return structuredClone(SETTINGS_DEFAULTS)}function normalizeSearchMutationRefreshPolicy(value){return value==="cache_only"||value==="semantic_configured"||value==="semantic_auto"?value:SETTINGS_DEFAULTS.search.mutation_refresh_policy}function normalizeSearchDefaultMode(value){return value==="auto"||value==="keyword"||value==="semantic"||value==="hybrid"?value:"auto"}function normalizeSearchQueryExpansionEnabled(value){return typeof value=="boolean"?value:SETTINGS_DEFAULTS.search.query_expansion.enabled}function normalizeSearchQueryExpansionProvider(value){return typeof value!="string"?SETTINGS_DEFAULTS.search.query_expansion.provider:value.trim()}function normalizeSearchRerankEnabled(value){return typeof value=="boolean"?value:SETTINGS_DEFAULTS.search.rerank.enabled}function normalizeSearchRerankModel(value){return typeof value!="string"?SETTINGS_DEFAULTS.search.rerank.model:value.trim()}function normalizeSearchRerankTopK(value){return typeof value=="number"&&Number.isFinite(value)&&Number.isInteger(value)&&value>0?value:SETTINGS_DEFAULTS.search.rerank.top_k}function normalizeVectorStoreCollectionName(value){if(typeof value!="string")return SETTINGS_DEFAULTS.vector_store.collection_name;const truncated=value.trim().replaceAll(/[^a-zA-Z0-9_-]/g,"_").slice(0,MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH);return truncated.length>0?truncated:SETTINGS_DEFAULTS.vector_store.collection_name}function cloneOptionalArray(value){return{present:Array.isArray(value),values:Array.isArray(value)?structuredClone(value):[]}}function buildSettingsPersistSourceSnapshot(parsedSettings,runtimeSettings){const sourceSchema=parsedSettings.schema,sourceStatuses=cloneOptionalArray(sourceSchema?.statuses),sourceFields=cloneOptionalArray(sourceSchema?.fields),sourceTypeWorkflows=cloneOptionalArray(sourceSchema?.type_workflows);return{persisted_settings:structuredClone(parsedSettings),source_settings:structuredClone(parsedSettings),has_source_item_type_definitions:Array.isArray(parsedSettings.item_types?.definitions),source_item_type_definitions:normalizeItemTypeDefinitions(parsedSettings.item_types?.definitions),has_source_schema_statuses:sourceStatuses.present,source_schema_statuses:sourceStatuses.values,has_source_schema_fields:sourceFields.present,source_schema_fields:sourceFields.values,has_source_schema_type_workflows:sourceTypeWorkflows.present,source_schema_type_workflows:sourceTypeWorkflows.values,runtime_item_type_definitions:normalizeItemTypeDefinitions(runtimeSettings.item_types?.definitions),runtime_schema_statuses:structuredClone(runtimeSettings.schema.statuses),runtime_schema_fields:structuredClone(runtimeSettings.schema.fields),runtime_schema_type_workflows:structuredClone(runtimeSettings.schema.type_workflows??[])}}function attachSettingsPersistSourceSnapshot(settings,source){Object.defineProperty(settings,SETTINGS_PERSIST_SOURCE_SYMBOL,{value:source,writable:!0,configurable:!0,enumerable:!1})}function getSettingsPersistSourceSnapshot(settings){const candidate=settings[SETTINGS_PERSIST_SOURCE_SYMBOL];if(!(!candidate||typeof candidate!="object"))return candidate}function persistSelectedItemFormat(settings){const source=getSettingsPersistSourceSnapshot(settings);if(source){const detachedSource=structuredClone(source);detachedSource.source_settings.item_format=settings.item_format,attachSettingsPersistSourceSnapshot(settings,detachedSource)}}function cloneSettingsReadResult(result){const clonedSettings=structuredClone(result.settings),persistSource=getSettingsPersistSourceSnapshot(result.settings);persistSource&&attachSettingsPersistSourceSnapshot(clonedSettings,persistSource);const fallbackOrigin=getSettingsFallbackOrigin(result.settings);return fallbackOrigin!==void 0&&markSettingsFallbackOrigin(clonedSettings,fallbackOrigin),{settings:clonedSettings,metadata:{has_explicit_item_format:result.metadata.has_explicit_item_format},warnings:[...result.warnings]}}function resolveSettingsReadTrackedPaths(pmRoot,schema,settingsPath){const normalizedSchema=normalizeRuntimeSchemaSettings(schema);return[settingsPath,filePathForSchemaSection(pmRoot,normalizedSchema.files.types,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),filePathForSchemaSection(pmRoot,normalizedSchema.files.statuses,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),filePathForSchemaSection(pmRoot,normalizedSchema.files.fields,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),filePathForSchemaSection(pmRoot,normalizedSchema.files.workflows,DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows)]}async function cacheSettingsReadResult(pmRoot,trackedPaths,result){const signatures=await collectSettingsReadCacheSignatures(trackedPaths);setSettingsReadCacheEntry(pmRoot,{tracked_paths:trackedPaths,signatures,value:cloneSettingsReadResult(result)})}async function cacheSettingsReadResultSafe(pmRoot,trackedPaths,result){try{await cacheSettingsReadResult(pmRoot,trackedPaths,result)}catch{clearSettingsReadCache(pmRoot)}}function findSettingsReadCacheSignature(signatures,targetPath){return signatures.find(signature=>signature.path===targetPath)}function selectedSettingsReadCacheSignaturesEqual(before,after,targetPaths){for(const targetPath of targetPaths){const beforeSignature=findSettingsReadCacheSignature(before,targetPath),afterSignature=findSettingsReadCacheSignature(after,targetPath);if(!beforeSignature||!afterSignature||!settingsReadCacheSignaturesEqual([beforeSignature],[afterSignature]))return!1}return!0}async function cacheSettingsReadResultIfStable(pmRoot,trackedPaths,result,stableSignatures,stablePaths){try{const currentSignatures=await collectSettingsReadCacheSignatures(trackedPaths);if(!selectedSettingsReadCacheSignaturesEqual(stableSignatures,currentSignatures,stablePaths)){clearSettingsReadCache(pmRoot);return}setSettingsReadCacheEntry(pmRoot,{tracked_paths:trackedPaths,signatures:currentSignatures,value:cloneSettingsReadResult(result)})}catch{clearSettingsReadCache(pmRoot)}}function resolvePersistedFileBackedSchemaSections(settings,source){const normalizedSchema=normalizeRuntimeSchemaSettings(settings.schema),currentItemTypeDefinitions=normalizeItemTypeDefinitions(settings.item_types?.definitions);if(!source)return{item_type_definitions:currentItemTypeDefinitions,schema_statuses:normalizedSchema.statuses,schema_fields:normalizedSchema.fields,schema_type_workflows:normalizedSchema.type_workflows};const currentTypeWorkflows=normalizedSchema.type_workflows??[],itemTypeDefinitionsUnchanged=stableValueEquals(currentItemTypeDefinitions,source.runtime_item_type_definitions),schemaStatusesUnchanged=stableValueEquals(normalizedSchema.statuses,source.runtime_schema_statuses),schemaFieldsUnchanged=stableValueEquals(normalizedSchema.fields,source.runtime_schema_fields),schemaTypeWorkflowsUnchanged=stableValueEquals(currentTypeWorkflows,source.runtime_schema_type_workflows);return{item_type_definitions:itemTypeDefinitionsUnchanged?source.has_source_item_type_definitions?normalizeItemTypeDefinitions(source.source_item_type_definitions):[]:currentItemTypeDefinitions,schema_statuses:schemaStatusesUnchanged?source.has_source_schema_statuses?structuredClone(source.source_schema_statuses):[]:normalizedSchema.statuses,schema_fields:schemaFieldsUnchanged?source.has_source_schema_fields?structuredClone(source.source_schema_fields):[]:normalizedSchema.fields,schema_type_workflows:schemaTypeWorkflowsUnchanged?source.has_source_schema_type_workflows?structuredClone(source.source_schema_type_workflows):void 0:normalizedSchema.type_workflows}}function markSettingsFallbackOrigin(settings,warning){Object.defineProperty(settings,SETTINGS_FALLBACK_ORIGIN_SYMBOL,{value:warning,writable:!0,configurable:!0,enumerable:!1})}function isSettingsReadFallback(settings){return getSettingsFallbackOrigin(settings)!==void 0}function getSettingsFallbackOrigin(settings){const candidate=settings[SETTINGS_FALLBACK_ORIGIN_SYMBOL];return typeof candidate=="string"?candidate:void 0}function getSettingsFallbackBaseline(settings){return settings[SETTINGS_FALLBACK_BASELINE_SYMBOL]}function setSettingsFallbackBaseline(settings,baseline){Object.defineProperty(settings,SETTINGS_FALLBACK_BASELINE_SYMBOL,{value:baseline,writable:!0,configurable:!0,enumerable:!1})}function buildFallbackSettingsReadResult(warning){const settings=cloneDefaults();return warning!==void 0&&markSettingsFallbackOrigin(settings,warning),{settings,metadata:{has_explicit_item_format:!1},warnings:warning?[warning]:[]}}function hasExplicitItemFormat(raw){if(typeof raw!="object"||raw===null||Array.isArray(raw))return!1;const itemFormat=raw.item_format;return itemFormat==="toon"||itemFormat==="json_markdown"}function normalizeStringList(values){return[...new Set((values??[]).map(value=>value.trim()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeAgentGuidanceSettings(value){const defaults=SETTINGS_DEFAULTS.agent_guidance,templateVersion=value?.template_version;return{prompt_completed:value?.prompt_completed===!0,declined:value?.declined===!0,declined_at:typeof value?.declined_at=="string"?value.declined_at:defaults.declined_at,template_version:typeof templateVersion=="number"&&Number.isInteger(templateVersion)&&templateVersion>0?templateVersion:defaults.template_version,last_checked_files:normalizeStringList(value?.last_checked_files??defaults.last_checked_files)}}function normalizeLowerStringList(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function normalizeExtensionPolicyMode(value){return value==="off"||value==="warn"||value==="enforce"?value:SETTINGS_DEFAULTS.extensions.policy.mode}function normalizeExtensionTrustMode(value){return value==="off"||value==="warn"||value==="enforce"?value:SETTINGS_DEFAULTS.extensions.policy.trust_mode}function normalizeExtensionSandboxProfile(value){return value==="none"||value==="restricted"||value==="strict"?value:SETTINGS_DEFAULTS.extensions.policy.default_sandbox_profile}function normalizeExtensionPolicyOverride(override){const name=override.name.trim().toLowerCase();if(name.length===0)return null;const normalized={name};override.disabled===!0&&(normalized.disabled=!0),override.require_trusted===!0&&(normalized.require_trusted=!0),override.require_provenance===!0&&(normalized.require_provenance=!0),override.sandbox_profile!==void 0&&(normalized.sandbox_profile=normalizeExtensionSandboxProfile(override.sandbox_profile));const allowedCapabilities=normalizeLowerStringList(override.allowed_capabilities),blockedCapabilities=normalizeLowerStringList(override.blocked_capabilities),allowedSurfaces=normalizeLowerStringList(override.allowed_surfaces),blockedSurfaces=normalizeLowerStringList(override.blocked_surfaces),allowedCommands=normalizeLowerStringList(override.allowed_commands),blockedCommands=normalizeLowerStringList(override.blocked_commands),allowedActions=normalizeLowerStringList(override.allowed_actions),blockedActions=normalizeLowerStringList(override.blocked_actions),allowedServices=normalizeLowerStringList(override.allowed_services),blockedServices=normalizeLowerStringList(override.blocked_services);return allowedCapabilities.length>0&&(normalized.allowed_capabilities=allowedCapabilities),blockedCapabilities.length>0&&(normalized.blocked_capabilities=blockedCapabilities),allowedSurfaces.length>0&&(normalized.allowed_surfaces=allowedSurfaces),blockedSurfaces.length>0&&(normalized.blocked_surfaces=blockedSurfaces),allowedCommands.length>0&&(normalized.allowed_commands=allowedCommands),blockedCommands.length>0&&(normalized.blocked_commands=blockedCommands),allowedActions.length>0&&(normalized.allowed_actions=allowedActions),blockedActions.length>0&&(normalized.blocked_actions=blockedActions),allowedServices.length>0&&(normalized.allowed_services=allowedServices),blockedServices.length>0&&(normalized.blocked_services=blockedServices),normalized}function normalizeExtensionPolicyOverrides(overrides){const dedupedByName=new Map;for(const override of overrides??[]){const normalized=normalizeExtensionPolicyOverride(override);normalized&&dedupedByName.set(normalized.name,normalized)}return[...dedupedByName.values()].sort((left,right)=>left.name.localeCompare(right.name))}function normalizePmMaxVersionExceededModeValue(value){return value==="block"||value==="warn"?value:void 0}function normalizePmMaxVersionExceededModeSetting(value){if(typeof value=="string")return normalizePmMaxVersionExceededModeValue(value);if(typeof value=="object"&&value!==null&&!Array.isArray(value)){const global2=normalizePmMaxVersionExceededModeValue(value.global),project=normalizePmMaxVersionExceededModeValue(value.project);return global2===void 0&&project===void 0?void 0:{...global2!==void 0?{global:global2}:{},...project!==void 0?{project}:{}}}}function normalizeExtensionPolicyList(policy,key){return normalizeLowerStringList(policy?.[key]??SETTINGS_DEFAULTS.extensions.policy[key])}function normalizeExtensionPolicySettings(policy){const pmMaxVersionExceededMode=normalizePmMaxVersionExceededModeSetting(policy?.pm_max_version_exceeded_mode);return{mode:normalizeExtensionPolicyMode(policy?.mode),trust_mode:normalizeExtensionTrustMode(policy?.trust_mode),...pmMaxVersionExceededMode!==void 0?{pm_max_version_exceeded_mode:pmMaxVersionExceededMode}:{},require_provenance:policy?.require_provenance===!0,trusted_extensions:normalizeExtensionPolicyList(policy,"trusted_extensions"),default_sandbox_profile:normalizeExtensionSandboxProfile(policy?.default_sandbox_profile),allowed_extensions:normalizeExtensionPolicyList(policy,"allowed_extensions"),blocked_extensions:normalizeExtensionPolicyList(policy,"blocked_extensions"),allowed_capabilities:normalizeExtensionPolicyList(policy,"allowed_capabilities"),blocked_capabilities:normalizeExtensionPolicyList(policy,"blocked_capabilities"),allowed_surfaces:normalizeExtensionPolicyList(policy,"allowed_surfaces"),blocked_surfaces:normalizeExtensionPolicyList(policy,"blocked_surfaces"),allowed_commands:normalizeExtensionPolicyList(policy,"allowed_commands"),blocked_commands:normalizeExtensionPolicyList(policy,"blocked_commands"),allowed_actions:normalizeExtensionPolicyList(policy,"allowed_actions"),blocked_actions:normalizeExtensionPolicyList(policy,"blocked_actions"),allowed_services:normalizeExtensionPolicyList(policy,"allowed_services"),blocked_services:normalizeExtensionPolicyList(policy,"blocked_services"),extension_overrides:normalizeExtensionPolicyOverrides(policy?.extension_overrides??SETTINGS_DEFAULTS.extensions.policy.extension_overrides)}}function normalizeValidationMetadataRequiredFields(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase().replaceAll("-","_")))].filter(value=>value.length>0).sort((left,right)=>left.localeCompare(right)).filter(value=>["author","acceptance_criteria","estimated_minutes","close_reason","reviewer","risk","confidence","sprint","release"].includes(value))}function normalizeValidationPatternList(values){return[...new Set((values??[]).map(value=>value.trim().toLowerCase()).filter(value=>value.length>0))].sort((left,right)=>left.localeCompare(right))}function valueOrDefault(value,fallback){return value===void 0?fallback:value}function recordOrEmpty(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:{}}function arrayOrEmpty(value){return Array.isArray(value)?value:[]}function buildValidationSettings(settings,defaults,governance){return{...defaults.validation,...settings.validation,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,metadata_required_fields:normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),lifecycle_stale_blocker_reason_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_stale_blocker_reason_patterns??defaults.validation.lifecycle_stale_blocker_reason_patterns),lifecycle_closure_like_blocked_reason_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_blocked_reason_patterns??defaults.validation.lifecycle_closure_like_blocked_reason_patterns),lifecycle_closure_like_resolution_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_resolution_patterns??defaults.validation.lifecycle_closure_like_resolution_patterns),lifecycle_closure_like_actual_result_patterns:normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_actual_result_patterns??defaults.validation.lifecycle_closure_like_actual_result_patterns),estimate_defaults_by_type:normalizeEstimateDefaultOverrides(settings.validation?.estimate_defaults_by_type)}}function buildTelemetrySettings(settings,defaults){return{enabled:settings.telemetry?.enabled??defaults.telemetry.enabled,first_run_prompt_completed:settings.telemetry?.first_run_prompt_completed??defaults.telemetry.first_run_prompt_completed,capture_level:settings.telemetry?.capture_level??defaults.telemetry.capture_level,endpoint:settings.telemetry?.endpoint??defaults.telemetry.endpoint,installation_id:settings.telemetry?.installation_id??defaults.telemetry.installation_id,retention_days:settings.telemetry?.retention_days??defaults.telemetry.retention_days}}function buildSearchSettings(settings,defaults){return{...defaults.search,...settings.search,default_mode:normalizeSearchDefaultMode(settings.search?.default_mode),mutation_refresh_policy:normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),query_expansion:{...defaults.search.query_expansion,...settings.search?.query_expansion,enabled:normalizeSearchQueryExpansionEnabled(settings.search?.query_expansion?.enabled),provider:normalizeSearchQueryExpansionProvider(settings.search?.query_expansion?.provider)},rerank:{...defaults.search.rerank,...settings.search?.rerank,enabled:normalizeSearchRerankEnabled(settings.search?.rerank?.enabled),model:normalizeSearchRerankModel(settings.search?.rerank?.model),top_k:normalizeSearchRerankTopK(settings.search?.rerank?.top_k)}}}function buildVectorStoreSettings(settings,defaults){return{adapter:settings.vector_store.adapter??defaults.vector_store.adapter,collection_name:normalizeVectorStoreCollectionName(settings.vector_store.collection_name),qdrant:{...defaults.vector_store.qdrant,...settings.vector_store.qdrant},lancedb:{...defaults.vector_store.lancedb,...settings.vector_store.lancedb}}}function normalizeSettingsItemFormat(settings,defaults){return settings.item_format==="json_markdown"?"toon":settings.item_format??defaults.item_format}function buildContextSettings(settings,defaults){return{default_depth:settings.context?.default_depth??defaults.context.default_depth,activity_limit:settings.context?.activity_limit??defaults.context.activity_limit,stale_threshold_days:settings.context?.stale_threshold_days??defaults.context.stale_threshold_days,next_ranking_policy:settings.context?.next_ranking_policy??defaults.context.next_ranking_policy,sections:{...defaults.context.sections,...settings.context?.sections}}}function buildProviderSettings(settings,defaults){return{openai:{...defaults.providers.openai,...settings.providers.openai},ollama:{...defaults.providers.ollama,...settings.providers.ollama}}}function normalizeItemTypeDefinitions(definitions){const normalized=(definitions??[]).map(definition=>normalizeItemTypeDefinition(definition)).filter(definition=>definition!==null),dedupedByName=new Map;for(const definition of normalized)dedupedByName.set(definition.name.toLowerCase(),definition);return[...dedupedByName.values()].sort((left,right)=>left.name.localeCompare(right.name))}function mergeSettings(settings){const defaults=cloneDefaults(),governance=resolveGovernanceKnobs({governance:settings.governance??{preset:"default"}});return{...defaults,...settings,item_format:normalizeSettingsItemFormat(settings,defaults),locks:{...defaults.locks,...settings.locks},ids:{...defaults.ids,...settings.ids},agent_identity:structuredClone(settings.agent_identity??defaults.agent_identity),mutation_guard:{...defaults.mutation_guard,...settings.mutation_guard},checkpoints:{...defaults.checkpoints,...settings.checkpoints},output:{...defaults.output,...settings.output},ux:{...defaults.ux,...settings.ux},history:{...defaults.history,...settings.history,compact_policy:{...defaults.history.compact_policy,...settings.history?.compact_policy}},validation:buildValidationSettings(settings,defaults,governance),governance,workflow:{definition_of_done:[...settings.workflow?.definition_of_done??defaults.workflow.definition_of_done]},testing:{record_results_to_items:settings.testing?.record_results_to_items??defaults.testing.record_results_to_items,allow_untrusted_linked_tests:settings.testing?.allow_untrusted_linked_tests??defaults.testing.allow_untrusted_linked_tests},telemetry:buildTelemetrySettings(settings,defaults),agent_guidance:normalizeAgentGuidanceSettings(settings.agent_guidance??defaults.agent_guidance),item_types:{definitions:normalizeItemTypeDefinitions(settings.item_types?.definitions)},schema:normalizeRuntimeSchemaSettings(settings.schema??defaults.schema),context:buildContextSettings(settings,defaults),extensions:{enabled:[...settings.extensions.enabled],disabled:[...settings.extensions.disabled],policy:normalizeExtensionPolicySettings(settings.extensions.policy??defaults.extensions.policy)},search:buildSearchSettings(settings,defaults),providers:buildProviderSettings(settings,defaults),vector_store:buildVectorStoreSettings(settings,defaults)}}function orderSerializedSettingsSections(ordered){ordered.agent_identity=orderObject(ordered.agent_identity,["probes_enabled","identity_vocabulary","harness_signals"]);const orderedAgentIdentity=ordered.agent_identity;Object.hasOwn(orderedAgentIdentity,"identity_vocabulary")&&(orderedAgentIdentity.identity_vocabulary=orderObject(recordOrEmpty(orderedAgentIdentity.identity_vocabulary),["version","aliases"])),ordered.agent_identity.harness_signals=arrayOrEmpty(ordered.agent_identity.harness_signals).map(entry=>orderObject(recordOrEmpty(entry),["harness","environment_keys","model_environment_keys","session_environment_keys","provenance_environment_keys","provenance_resolvers","provenance_unavailable_dimensions","argv_markers","client_names"])),ordered.locks=orderObject(ordered.locks,["ttl_seconds","wait_ms"]),ordered.ids=orderObject(ordered.ids,["token_length"]),ordered.mutation_guard=orderObject(ordered.mutation_guard,["require_attributed_author","secret_guard","stale_in_progress_hours"]),ordered.checkpoints=orderObject(ordered.checkpoints,["retention_days"]),ordered.output=orderObject(ordered.output,["default_format"]),ordered.ux=orderObject(ordered.ux,["deprecation_hints"]),ordered.history=orderObject(ordered.history,["missing_stream","compact_policy"]),ordered.validation=orderObject(ordered.validation,["sprint_release_format","parent_reference","metadata_profile","metadata_required_fields","lifecycle_stale_blocker_reason_patterns","lifecycle_closure_like_blocked_reason_patterns","lifecycle_closure_like_resolution_patterns","lifecycle_closure_like_actual_result_patterns","estimate_defaults_by_type"]),ordered.governance=orderObject(ordered.governance,["preset","ownership_enforcement","create_mode_default","close_validation_default","require_close_reason","parent_reference","metadata_profile","force_required_for_stale_lock","create_default_type","workflow_enforcement","duplicate_detection_mode","duplicate_detection_threshold","duplicate_detection_limit"]),ordered.workflow=orderObject(ordered.workflow,["definition_of_done"]),ordered.testing=orderObject(ordered.testing,["record_results_to_items","allow_untrusted_linked_tests"]),ordered.telemetry=orderObject(ordered.telemetry,["enabled","first_run_prompt_completed","capture_level","endpoint","installation_id","retention_days"]),ordered.agent_guidance=orderObject(ordered.agent_guidance,["prompt_completed","declined","declined_at","template_version","last_checked_files"]),ordered.item_types=orderObject(ordered.item_types,["definitions"]),ordered.schema=orderObject(ordered.schema,["version","files","statuses","fields","workflow","type_workflows","unknown_field_policy"]),ordered.schema.files=orderObject(recordOrEmpty(ordered.schema.files),["types","statuses","fields","workflows"]),ordered.schema.workflow=orderObject(recordOrEmpty(ordered.schema.workflow),["draft_status","open_status","in_progress_status","blocked_status","close_status","canceled_status"]),ordered.context=orderObject(ordered.context,["default_depth","activity_limit","stale_threshold_days","next_ranking_policy","sections"]),ordered.context.sections=orderObject(recordOrEmpty(ordered.context.sections),["hierarchy","activity","progress","blockers","files","workload","staleness","tests"]),ordered.extensions=orderObject(ordered.extensions,["enabled","disabled","policy"]),ordered.extensions.policy=orderObject(recordOrEmpty(ordered.extensions.policy),["mode","trust_mode","pm_max_version_exceeded_mode","require_provenance","trusted_extensions","default_sandbox_profile","allowed_extensions","blocked_extensions","allowed_capabilities","blocked_capabilities","allowed_surfaces","blocked_surfaces","allowed_commands","blocked_commands","allowed_actions","blocked_actions","allowed_services","blocked_services","extension_overrides"]),ordered.extensions.policy.extension_overrides=arrayOrEmpty(ordered.extensions.policy.extension_overrides).map(entry=>orderObject(recordOrEmpty(entry),["name","disabled","require_trusted","require_provenance","sandbox_profile","allowed_capabilities","blocked_capabilities","allowed_surfaces","blocked_surfaces","allowed_commands","blocked_commands","allowed_actions","blocked_actions","allowed_services","blocked_services"])),ordered.search=orderObject(ordered.search,["score_threshold","hybrid_semantic_weight","max_results","embedding_model","embedding_corpus_max_characters","embedding_batch_size","embedding_timeout_ms","scanner_max_batch_retries","provider","default_mode","mutation_refresh_policy","query_expansion","rerank"]),ordered.search.query_expansion=orderObject(recordOrEmpty(ordered.search.query_expansion),["enabled","provider"]),ordered.search.rerank=orderObject(recordOrEmpty(ordered.search.rerank),["enabled","model","top_k"]),ordered.providers=orderObject(ordered.providers,["openai","ollama"]),ordered.providers.openai=orderObject(recordOrEmpty(ordered.providers.openai),["base_url","api_key","model"]),ordered.providers.ollama=orderObject(recordOrEmpty(ordered.providers.ollama),["base_url","model"]),ordered.vector_store=orderObject(ordered.vector_store,["adapter","collection_name","qdrant","lancedb"]),ordered.vector_store.qdrant=orderObject(recordOrEmpty(ordered.vector_store.qdrant),["url","api_key"]),ordered.vector_store.lancedb=orderObject(recordOrEmpty(ordered.vector_store.lancedb),["path"])}function buildSerializeBaseSettings(settings){return{...settings,locks:valueOrDefault(settings.locks,SETTINGS_DEFAULTS.locks),ids:valueOrDefault(settings.ids,SETTINGS_DEFAULTS.ids),agent_identity:valueOrDefault(settings.agent_identity,SETTINGS_DEFAULTS.agent_identity),mutation_guard:valueOrDefault(settings.mutation_guard,SETTINGS_DEFAULTS.mutation_guard),checkpoints:valueOrDefault(settings.checkpoints,SETTINGS_DEFAULTS.checkpoints),output:valueOrDefault(settings.output,SETTINGS_DEFAULTS.output),ux:valueOrDefault(settings.ux,SETTINGS_DEFAULTS.ux),history:valueOrDefault(settings.history,SETTINGS_DEFAULTS.history),validation:valueOrDefault(settings.validation,SETTINGS_DEFAULTS.validation),workflow:valueOrDefault(settings.workflow,SETTINGS_DEFAULTS.workflow),testing:valueOrDefault(settings.testing,SETTINGS_DEFAULTS.testing),telemetry:valueOrDefault(settings.telemetry,SETTINGS_DEFAULTS.telemetry),agent_guidance:valueOrDefault(settings.agent_guidance,SETTINGS_DEFAULTS.agent_guidance),item_types:valueOrDefault(settings.item_types,SETTINGS_DEFAULTS.item_types),schema:valueOrDefault(settings.schema,SETTINGS_DEFAULTS.schema),context:valueOrDefault(settings.context,SETTINGS_DEFAULTS.context),extensions:valueOrDefault(settings.extensions,SETTINGS_DEFAULTS.extensions),search:valueOrDefault(settings.search,SETTINGS_DEFAULTS.search),providers:valueOrDefault(settings.providers,SETTINGS_DEFAULTS.providers),vector_store:valueOrDefault(settings.vector_store,SETTINGS_DEFAULTS.vector_store)}}function buildSerializedValidationSettings(baseSettings,governance){return{...baseSettings.validation,parent_reference:governance.parent_reference,metadata_profile:governance.metadata_profile,metadata_required_fields:normalizeValidationMetadataRequiredFields(baseSettings.validation?.metadata_required_fields),lifecycle_stale_blocker_reason_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_stale_blocker_reason_patterns??SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns),lifecycle_closure_like_blocked_reason_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_blocked_reason_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns),lifecycle_closure_like_resolution_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_resolution_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns),lifecycle_closure_like_actual_result_patterns:normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_actual_result_patterns??SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns),estimate_defaults_by_type:normalizeEstimateDefaultOverrides(baseSettings.validation?.estimate_defaults_by_type)}}function buildSerializedSearchSettings(baseSettings){return{...SETTINGS_DEFAULTS.search,...baseSettings.search,default_mode:normalizeSearchDefaultMode(baseSettings.search?.default_mode),mutation_refresh_policy:normalizeSearchMutationRefreshPolicy(baseSettings.search?.mutation_refresh_policy),query_expansion:{...SETTINGS_DEFAULTS.search.query_expansion,...baseSettings.search?.query_expansion,enabled:normalizeSearchQueryExpansionEnabled(baseSettings.search?.query_expansion?.enabled),provider:normalizeSearchQueryExpansionProvider(baseSettings.search?.query_expansion?.provider)},rerank:{...SETTINGS_DEFAULTS.search.rerank,...baseSettings.search?.rerank,enabled:normalizeSearchRerankEnabled(baseSettings.search?.rerank?.enabled),model:normalizeSearchRerankModel(baseSettings.search?.rerank?.model),top_k:normalizeSearchRerankTopK(baseSettings.search?.rerank?.top_k)}}}function buildSerializedContextSettings(baseSettings){return{default_depth:baseSettings.context?.default_depth??SETTINGS_DEFAULTS.context.default_depth,activity_limit:baseSettings.context?.activity_limit??SETTINGS_DEFAULTS.context.activity_limit,stale_threshold_days:baseSettings.context?.stale_threshold_days??SETTINGS_DEFAULTS.context.stale_threshold_days,next_ranking_policy:baseSettings.context?.next_ranking_policy??SETTINGS_DEFAULTS.context.next_ranking_policy,sections:{...SETTINGS_DEFAULTS.context.sections,...baseSettings.context?.sections}}}function buildSerializedVectorStoreSettings(baseSettings){return{...baseSettings.vector_store,adapter:baseSettings.vector_store?.adapter??SETTINGS_DEFAULTS.vector_store.adapter,collection_name:normalizeVectorStoreCollectionName(baseSettings.vector_store?.collection_name),qdrant:{...baseSettings.vector_store?.qdrant},lancedb:{...baseSettings.vector_store?.lancedb}}}function buildNormalizedSettingsForSerialization(baseSettings,governance,normalizedSchema,persistedFileBackedSections){return{...baseSettings,item_format:"toon",validation:buildSerializedValidationSettings(baseSettings,governance),governance,agent_guidance:normalizeAgentGuidanceSettings(baseSettings.agent_guidance),item_types:{definitions:persistedFileBackedSections.item_type_definitions},schema:{...normalizedSchema,statuses:persistedFileBackedSections.schema_statuses,fields:persistedFileBackedSections.schema_fields,type_workflows:persistedFileBackedSections.schema_type_workflows},search:buildSerializedSearchSettings(baseSettings),context:buildSerializedContextSettings(baseSettings),extensions:{enabled:normalizeStringList(baseSettings.extensions?.enabled),disabled:normalizeStringList(baseSettings.extensions?.disabled),policy:normalizeExtensionPolicySettings(baseSettings.extensions?.policy)},vector_store:buildSerializedVectorStoreSettings(baseSettings)}}function overlayPresentSettingsSource(target,source){for(const key of Object.keys(source)){const value=Reflect.get(source,key),existing=target[key];typeof value=="object"&&value!==null&&!Array.isArray(value)&&typeof existing=="object"&&existing!==null&&!Array.isArray(existing)?overlayPresentSettingsSource(existing,value):target[key]=structuredClone(value)}}function applySettingsDelta(target,baseline,current){const keys=new Set([...Object.keys(baseline),...Object.keys(current)]);for(const key of keys){const before=baseline[key],after=current[key];if(!stableValueEquals(before,after)){if(after===void 0){delete target[key];continue}if(typeof before=="object"&&before!==null&&!Array.isArray(before)&&typeof after=="object"&&after!==null&&!Array.isArray(after)){const existing=target[key],nestedTarget=typeof existing=="object"&&existing!==null&&!Array.isArray(existing)?existing:{};applySettingsDelta(nestedTarget,before,after),Object.keys(nestedTarget).length>0?target[key]=nestedTarget:delete target[key];continue}target[key]=structuredClone(after)}}}const SETTINGS_TOP_LEVEL_KEY_ORDER=["version","id_prefix","ids","author_default","agent_identity","mutation_guard","item_format","locks","checkpoints","output","ux","history","validation","governance","workflow","testing","telemetry","agent_guidance","item_types","schema","context","extensions","search","providers","vector_store"];function buildOrderedSettingsForSerialization(settings,persistSource){const baseSettings=buildSerializeBaseSettings(settings),governance=resolveGovernanceKnobs(baseSettings),normalizedSchema=normalizeRuntimeSchemaSettings(baseSettings.schema),persistedFileBackedSections=resolvePersistedFileBackedSchemaSections(baseSettings,persistSource),normalizedSettings=buildNormalizedSettingsForSerialization(baseSettings,governance,normalizedSchema,persistedFileBackedSections),ordered=orderObject({...normalizedSettings,governance:normalizeGovernanceForPersist(governance)},SETTINGS_TOP_LEVEL_KEY_ORDER);return orderSerializedSettingsSections(ordered),ordered}function serializeSettings(settings,options={}){const persistSource=options.source===void 0?options.persist_source:buildSettingsPersistSourceSnapshot(options.source.validated,mergeSettings(options.source.validated)),ordered=buildOrderedSettingsForSerialization(settings,persistSource);if(persistSource){const baselineSettings=mergeSettings(persistSource.source_settings);baselineSettings.item_types={definitions:structuredClone(persistSource.runtime_item_type_definitions)},baselineSettings.schema={...baselineSettings.schema,statuses:structuredClone(persistSource.runtime_schema_statuses),fields:structuredClone(persistSource.runtime_schema_fields),type_workflows:structuredClone(persistSource.runtime_schema_type_workflows)};const baseline=buildOrderedSettingsForSerialization(baselineSettings,persistSource);options.source!==void 0&&overlayPresentSettingsSource(baseline,options.source.validated);const sparse=structuredClone(options.source===void 0?persistSource.source_settings:options.source.raw);return applySettingsDelta(sparse,baseline,ordered),`${JSON.stringify(orderObject(sparse,SETTINGS_TOP_LEVEL_KEY_ORDER),null,2)}
2
2
  `}return`${JSON.stringify(ordered,null,2)}
3
3
  `}async function readConfigurationOnlySettings(pmRoot){let root;try{root=await realpath(pmRoot)}catch(error){if(isFileAbsentError(error))return buildFallbackSettingsReadResult();throw error}const file=getSettingsPath(root);let entry;try{entry=await lstat(file)}catch(error){if(isFileAbsentError(error))return buildFallbackSettingsReadResult();throw error}if(!entry.isFile())throw transactionPreviewNonRegularFileError("settings.json");let raw;try{raw=await readRegularFile(file,transactionPreviewNonRegularFileError("settings.json"))}catch(error){if(isFileAbsentError(error))return buildFallbackSettingsReadResult();throw error}let parsed;try{parsed=JSON.parse(raw)}catch{return buildFallbackSettingsReadResult("settings_read_invalid_json")}const validated=validateSettings(parsed);return validated.success?{settings:mergeSettings(validated.data),metadata:{has_explicit_item_format:hasExplicitItemFormat(parsed)},warnings:validated.data.item_format==="json_markdown"?["settings_item_format_legacy_json_markdown_coerced_to_toon"]:[]}:buildFallbackSettingsReadResult("settings_read_invalid_schema")}async function readSettingsWithMetadata(pmRoot){if(isConfigurationOnlySettingsRead(pmRoot))return readConfigurationOnlySettings(pmRoot);const settingsPath=getSettingsPath(pmRoot);let trackedPathsForFailure=[settingsPath];await runActiveOnReadHooks({path:settingsPath,scope:"project"});const cachedResult=getSettingsReadCacheEntry(pmRoot);if(cachedResult){const currentSignatures=await collectSettingsReadCacheSignatures(cachedResult.tracked_paths);if(settingsReadCacheSignaturesEqual(currentSignatures,cachedResult.signatures))return cloneSettingsReadResult(cachedResult.value)}const settingsOnlySignatures=await collectSettingsReadCacheSignatures([settingsPath]);let raw;try{raw=await readFileIfExists(settingsPath)}catch{return buildFallbackSettingsReadResult("settings_read_fs_error")}if(raw===null){const fallback=buildFallbackSettingsReadResult();return await cacheSettingsReadResultIfStable(pmRoot,[settingsPath],fallback,settingsOnlySignatures,[settingsPath]),fallback}const settingsSignaturesAfterRead=await collectSettingsReadCacheSignatures([settingsPath]);if(!settingsReadCacheSignaturesEqual(settingsOnlySignatures,settingsSignaturesAfterRead))return clearSettingsReadCache(pmRoot),readSettingsWithMetadata(pmRoot);let parsed;try{parsed=JSON.parse(raw)}catch{const fallback=buildFallbackSettingsReadResult("settings_read_invalid_json");return await cacheSettingsReadResultIfStable(pmRoot,[settingsPath],fallback,settingsSignaturesAfterRead,[settingsPath]),fallback}const validated=validateSettings(parsed);if(!validated.success){const fallback=buildFallbackSettingsReadResult("settings_read_invalid_schema");return await cacheSettingsReadResultIfStable(pmRoot,[settingsPath],fallback,settingsSignaturesAfterRead,[settingsPath]),fallback}try{const mergedSettings=mergeSettings(validated.data),trackedPaths=resolveSettingsReadTrackedPaths(pmRoot,mergedSettings.schema,settingsPath);trackedPathsForFailure=trackedPaths;const signaturesBeforeSchemaLoad=await collectSettingsReadCacheSignatures(trackedPaths),loadedSchemaSections=await loadRuntimeSchemaFromOptionalFiles(pmRoot,mergedSettings.schema),signaturesAfterSchemaLoad=await collectSettingsReadCacheSignatures(trackedPaths),settings={...mergedSettings,item_types:{definitions:normalizeItemTypeDefinitions([...mergedSettings.item_types.definitions,...arrayOrEmpty(loadedSchemaSections.type_definitions_from_file)])},schema:loadedSchemaSections.schema};attachSettingsPersistSourceSnapshot(settings,buildSettingsPersistSourceSnapshot(validated.data,settings));const result={settings,metadata:{has_explicit_item_format:hasExplicitItemFormat(parsed)},warnings:[...validated.data.item_format==="json_markdown"?["settings_item_format_legacy_json_markdown_coerced_to_toon"]:[],...loadedSchemaSections.warnings]};return settingsReadCacheSignaturesEqual(signaturesBeforeSchemaLoad,signaturesAfterSchemaLoad)?setSettingsReadCacheEntry(pmRoot,{tracked_paths:trackedPaths,signatures:signaturesAfterSchemaLoad,value:cloneSettingsReadResult(result)}):clearSettingsReadCache(pmRoot),result}catch{const fallback=buildFallbackSettingsReadResult("settings_read_merge_failed");return await cacheSettingsReadResultSafe(pmRoot,trackedPathsForFailure,fallback),fallback}}const ASSIGNED_SETTINGS_PATH_SEGMENT=/^[A-Za-z0-9_-]+$/u,RESERVED_SETTINGS_PATH_SEGMENTS=new Set(["__proto__","constructor","prototype"]);function asPlainRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:void 0}function assertAssignedSettingsPaths(assignedPaths){for(const assignedPath of assignedPaths)if(assignedPath.split(".").find(segment=>!ASSIGNED_SETTINGS_PATH_SEGMENT.test(segment)||RESERVED_SETTINGS_PATH_SEGMENTS.has(segment))!==void 0)throw new PmCliError(`Settings write assignedPaths entry "${assignedPath}" is not a dotted settings path.`,EXIT_CODE.USAGE,{code:"settings_write_assigned_path_invalid",reason:"assigned_path_segment_invalid",field:assignedPath,why:"Assigned paths name settings keys; an empty, reserved or non-identifier segment cannot address one safely.",nextSteps:["Pass dotted settings keys such as context.next_ranking_policy in assignedPaths."]})}function ownRecordAt(record,segment){return asPlainRecord(Object.hasOwn(record,segment)?record[segment]:void 0)}function findAssignedSource(proposed,parents){let source=proposed;for(const segment of parents)if(source=ownRecordAt(source,segment),source===void 0)return;return source}function ensureAssignedParent(target,parents){let cursor=target;for(const segment of parents){let next=ownRecordAt(cursor,segment);next===void 0&&(next={},cursor[segment]=next),cursor=next}return cursor}function applyAssignedSettingsPaths(target,proposed,assignedPaths){for(const assignedPath of assignedPaths){const parents=assignedPath.split("."),leaf=parents.pop(),source=findAssignedSource(proposed,parents);if(source===void 0)continue;if(Object.hasOwn(source,leaf)){ensureAssignedParent(target,parents)[leaf]=structuredClone(source[leaf]);continue}if(!CORE_SETTINGS_SECTION_KEYS.includes(parents[0]??leaf))continue;const storedParent=findAssignedSource(target,parents);storedParent!==void 0&&delete storedParent[leaf]}}function applyFallbackChangeToStoredSettings(current,proposedCanonical,fallbackOrigin,assignedPaths,baseline){const baselineCanonical=baseline??JSON.parse(serializeSettings(cloneDefaults())),candidate=structuredClone(asPlainRecord(current)??{});applySettingsDelta(candidate,baselineCanonical,proposedCanonical),applyAssignedSettingsPaths(candidate,proposedCanonical,assignedPaths);const validated=validateSettings(candidate);if(!validated.success){const field=validated.path;throw new PmCliError(`Existing settings.json fails validation at ${field}; the settings write was refused and nothing was changed.`,EXIT_CODE.USAGE,{code:"settings_write_invalid_existing_schema",reason:"existing_settings_schema_invalid",field,original_code:fallbackOrigin,why:"The stored settings could not be read, so writing would either keep an invalid document or replace intended project configuration with defaults.",nextSteps:[`Fix or remove ${field} in settings.json, then retry the original command.`,"A configurable setting can also be repaired explicitly, even to its default value, with pm config <scope> set <dotted.key> <value>.","Run pm health to confirm the settings warning has cleared."]})}return`${JSON.stringify(orderObject(candidate,SETTINGS_TOP_LEVEL_KEY_ORDER),null,2)}
4
4
  `}function parseExistingSettingsForWrite(raw){try{return JSON.parse(raw)}catch{throw new PmCliError("Existing settings.json is malformed; the settings write was refused.",EXIT_CODE.USAGE,{code:"settings_write_invalid_existing_json",reason:"existing_settings_json_malformed",why:"Writing defaults over malformed settings could destroy intended project configuration.",nextSteps:["Repair the syntax in .agents/pm/settings.json, then retry the original command.","Run pm health to confirm the settings warning has cleared."]})}}async function readSettings(pmRoot){return(await readSettingsWithMetadata(pmRoot)).settings}async function writeSettings(pmRoot,settings,op=SETTINGS_WRITE_OP,options={}){const assignedPaths=options.assignedPaths??[];assertAssignedSettingsPaths(assignedPaths);const settingsPath=getSettingsPath(pmRoot),source=getSettingsPersistSourceSnapshot(settings),fallbackOrigin=source?void 0:getSettingsFallbackOrigin(settings),afterRaw=serializeSettings(settings,{persist_source:source}),proposed=JSON.parse(afterRaw);try{await mutateWorkspaceJsonWithHistory({pmRoot,filePath:settingsPath,mutate:beforeRaw=>{const current=beforeRaw===null?null:parseExistingSettingsForWrite(beforeRaw);return fallbackOrigin!==void 0&&beforeRaw!==null?{raw:applyFallbackChangeToStoredSettings(current,proposed,fallbackOrigin,assignedPaths,getSettingsFallbackBaseline(settings)),result:void 0}:{raw:source?`${JSON.stringify(orderObject(reconcileSettingsSnapshot(source.persisted_settings,proposed,current),SETTINGS_TOP_LEVEL_KEY_ORDER),null,2)}
@@ -1,2 +1,2 @@
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]="7607f0d2-6e95-5b85-9bc2-18f643a64171")}catch{}})();const GLOBAL_VALUE_CONSUMING_FLAGS=new Set(["--pm-path","--path","--author","--output-include","--output-limit","--output-budget","--output-format","--format","--output-session","--output-cursor"]),BOOTSTRAP_BOOLEAN_FLAGS=new Set(["--no-extensions","--no-pager","--json","--quiet","--lean","--token-accounting","--output-row-contract","--all"]);function isInlineGlobalValueToken(token){const equalsIndex=token.indexOf("=");return equalsIndex>0&&GLOBAL_VALUE_CONSUMING_FLAGS.has(token.slice(0,equalsIndex))}function consumesBootstrapValue(flag,next){return typeof next!="string"?!1:flag==="--path"||flag==="--pm-path"||!next.startsWith("-")}function findBootstrapCommandTokenIndex(argv){for(let index=0;index<argv.length;index+=1){const token=argv[index];if(token==="--")return;if(GLOBAL_VALUE_CONSUMING_FLAGS.has(token)){index+=consumesBootstrapValue(token,argv[index+1])?1:0;continue}if(!(isInlineGlobalValueToken(token)||BOOTSTRAP_BOOLEAN_FLAGS.has(token)||token==="--profile"||token==="--id-only"||token==="--explain")&&!token.startsWith("-"))return index}}function parseBootstrapCommandName(argv){const index=findBootstrapCommandTokenIndex(argv);return index===void 0?void 0:argv[index].trim().toLowerCase()}export{BOOTSTRAP_BOOLEAN_FLAGS,GLOBAL_VALUE_CONSUMING_FLAGS,consumesBootstrapValue,findBootstrapCommandTokenIndex,isInlineGlobalValueToken,parseBootstrapCommandName};
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]="9bb3b2ed-c289-5b96-99ce-9df6e202c464")}catch{}})();const GLOBAL_VALUE_CONSUMING_FLAGS=new Set(["--pm-path","--path","--author","--expect-hash","--output-include","--output-limit","--output-budget","--output-format","--format","--output-session","--output-cursor"]),BOOTSTRAP_BOOLEAN_FLAGS=new Set(["--no-extensions","--no-pager","--json","--quiet","--lean","--token-accounting","--output-row-contract","--all"]);function isInlineGlobalValueToken(token){const equalsIndex=token.indexOf("=");return equalsIndex>0&&GLOBAL_VALUE_CONSUMING_FLAGS.has(token.slice(0,equalsIndex))}function consumesBootstrapValue(flag,next){return typeof next!="string"?!1:flag==="--path"||flag==="--pm-path"||!next.startsWith("-")}function findBootstrapCommandTokenIndex(argv){for(let index=0;index<argv.length;index+=1){const token=argv[index];if(token==="--")return;if(GLOBAL_VALUE_CONSUMING_FLAGS.has(token)){index+=consumesBootstrapValue(token,argv[index+1])?1:0;continue}if(!(isInlineGlobalValueToken(token)||BOOTSTRAP_BOOLEAN_FLAGS.has(token)||token==="--profile"||token==="--id-only"||token==="--explain")&&!token.startsWith("-"))return index}}function parseBootstrapCommandName(argv){const index=findBootstrapCommandTokenIndex(argv);return index===void 0?void 0:argv[index].trim().toLowerCase()}export{BOOTSTRAP_BOOLEAN_FLAGS,GLOBAL_VALUE_CONSUMING_FLAGS,consumesBootstrapValue,findBootstrapCommandTokenIndex,isInlineGlobalValueToken,parseBootstrapCommandName};
2
2
  //# sourceMappingURL=bootstrap-command-scanner.js.map
@@ -1,2 +1,2 @@
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]="d386ddd7-cee9-5fad-b045-cc2ee438947d")}catch{}})();import{PM_TOOL_ACTIONS}from"./enum-contracts.js";import{resolveSubcommandFlagContractsForCommand}from"./flag-contracts.js";import{pmToolActionParameterKeys}from"./tool-schema.js";import{PM_READ_OUTPUT_COMPOSITION_OPTION_FLAGS,PM_READ_OUTPUT_OPTION_FLAGS,resolveReadOutputSurface}from"../read-output-contracts.js";const CLI_TRANSPORT_FLAGS=new Set(["--author","--follow","--help","--lean","--token-accounting","--output-include","--output-limit","--output-budget","--output-format","--output-session","--output-cursor","--output-row-contract","--no-changed-fields","--no-extensions","--no-pager","--pm-path","--profile","--quiet","--interval-ms"]),READ_OUTPUT_OPTION_FLAGS=new Set([...PM_READ_OUTPUT_OPTION_FLAGS,...PM_READ_OUTPUT_COMPOSITION_OPTION_FLAGS]),CLI_PRESENTATION_FLAGS=new Set(["--brief","--format","--full","--full-changed-fields","--id-only","--no-truncate","--stream"]),CLI_ADAPTER_FLAGS=new Set(["--body-file","--file","--stdin-json"]),CLI_SCOPE_SELECTOR_FLAGS=new Set(["--global","--local","--project"]),CLI_CONFIG_SHORTHAND_FLAGS=new Set(["--activity-limit","--default-depth","--section-activity","--section-blockers","--section-files","--section-hierarchy","--section-progress","--section-staleness","--section-tests","--section-workload","--stale-threshold-days"]),SDK_TRANSPORT_PARAMETERS=new Set(["action","fullChangedFields","idOnly","path","pmExecutable","timeoutMs"]),CLI_POSITIONAL_PARAMETERS=new Set(["configAction","id","name","query","reason","subcommand","target","text"]),ACTION_POSITIONAL_PARAMETERS={assurance:{id:"<id>",kind:"<kind>",preset:"[kind]|[id]",subcommand:"<action>"},event:{title:"<title>"},files:{lookupPath:"lookup <path...>"},meet:{title:"<title>"},"item-reopen":{id:"<id>",reason:"<reason>"},merge:{subcommand:"<subcommand>"},remind:{title:"<title>"},workspace:{name:"<name>",subcommand:"snapshot",snapshotAction:"<snapshot-action>",target:"<target>"}},ACTION_FLAG_PARAMETER_OVERRIDES={append:{"--text":"body"},assurance:{"--tree":"treeId","--owner":"owner","--apply":"apply","--enforcement":"enforcement"},init:{"--id-prefix":"idPrefix","--no-merge-fence":"mergeFence","--workspace":"workspace"},create:{"--no-inherit-focus":"inheritFocus","--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},plan:{"--no-inherit-focus":"inheritFocus"},update:{"--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},"update-many":{"--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},files:{"--note":"addNote"},docs:{"--note":"addNote"},comments:{"--full-history":"full"},notes:{"--file":"text","--full-history":"full"},learnings:{"--file":"text","--full-history":"full"},gc:{"--scope":"gcScope"},contracts:{"--action":"contractAction"},schema:{"--no-allow-unset":"allowUnset","--type":"fieldTypeScope"},"history-author-acknowledge":{"--event":"historyEvent","--all-actionable":"allActionable"},"extension-init":{"--capability":"capability"},"package-init":{"--capability":"capability"},"extension-install":{"--gh":"github"},"package-install":{"--gh":"github"},"extension-adopt":{"--gh":"github"},"package-adopt":{"--gh":"github"},extension:{"--gh":"github","--scaffold":"init"},package:{"--gh":"github","--scaffold":"init"},install:{"--gh":"github"}},GLOBAL_FLAG_PARAMETER_OVERRIDES={"--pm-path":"path"},ACTION_STRUCTURED_FLAG_PARAMETERS={stats:{"--analytics":["measurements","metric","measurementLimit","observe","improvementDirection","measurementSource","measurementItem","measurementRevision","author","message","provenanceCoverage","fleetAttribution","since","eventLimit","minimumSample"]}};function actionCommand(action){return action.startsWith("extension-")?`extension ${action.slice(10)}`:action.startsWith("package-")?`package ${action.slice(8)}`:action.startsWith("item-")?`item ${action.slice(5)}`:action}function parameterForFlag(action,flag){const override=ACTION_FLAG_PARAMETER_OVERRIDES[action]?.[flag]??GLOBAL_FLAG_PARAMETER_OVERRIDES[flag];return override!==void 0?override:flag.replace(/^--/,"").replaceAll("_","-").replace(/-([a-z])/g,(_match,value)=>value.toUpperCase())}function canonicalLongFlags(contracts){const seen=new Set;return contracts.filter(({flag})=>!flag.startsWith("--")||seen.has(flag)?!1:(seen.add(flag),!0))}function aliasTarget(flag,contracts){return contracts.find(({aliases})=>aliases?.includes(flag))?.flag}function classifyCliInput(action,contract,contracts,sdkParameters){const structuredParameters=ACTION_STRUCTURED_FLAG_PARAMETERS[action]?.[contract.flag];if(structuredParameters!==void 0&&structuredParameters.every(parameter2=>sdkParameters.has(parameter2)))return{surface:"cli",input:contract.flag,counterpart:structuredParameters[0],disposition:"shared",reason:"The validated CLI JSON object fans out across strict SDK parameters."};const parameter=parameterForFlag(action,contract.flag);if(sdkParameters.has(parameter))return{surface:"cli",input:contract.flag,counterpart:parameter,disposition:"shared",reason:"The CLI flag maps directly to a strict SDK action parameter."};const canonicalAlias=aliasTarget(contract.flag,contracts);if(canonicalAlias!==void 0){const aliasParameter=parameterForFlag(action,canonicalAlias);if(sdkParameters.has(aliasParameter))return{surface:"cli",input:contract.flag,counterpart:aliasParameter,disposition:"compatibility_alias",reason:`Compatibility spelling for ${canonicalAlias}.`}}return CLI_TRANSPORT_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_transport",reason:"CLI process transport is supplied by the in-process SDK host."}:CLI_PRESENTATION_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_presentation",reason:"CLI rendering or mutation projection does not alter the SDK result envelope."}:CLI_ADAPTER_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_adapter",reason:"Local file or stdin adaptation is a CLI boundary concern."}:CLI_CONFIG_SHORTHAND_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,counterpart:"key",disposition:"compatibility_alias",reason:"CLI config shorthand normalizes to the SDK configAction/key/value contract."}:CLI_SCOPE_SELECTOR_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,counterpart:"scope",disposition:"cli_scope_selector",reason:"Mutually exclusive CLI scope switches normalize to the SDK scope parameter."}:{surface:"cli",input:contract.flag,counterpart:parameter,disposition:"unclassified",reason:"The CLI flag has no strict SDK parameter or approved boundary classification."}}function classifySdkInput(action,parameter,cliEntries){const structuredCounterpart=Object.entries(ACTION_STRUCTURED_FLAG_PARAMETERS[action]??{}).find(([flag,parameters])=>parameters.includes(parameter)&&cliEntries.some(({input,disposition})=>input===flag&&disposition==="shared"));if(structuredCounterpart!==void 0)return{surface:"sdk",input:parameter,counterpart:structuredCounterpart[0],disposition:"shared",reason:"The strict SDK parameter is reachable through the validated CLI JSON object."};const cliCounterpart=cliEntries.find(({counterpart,disposition})=>counterpart===parameter&&(disposition==="shared"||disposition==="compatibility_alias"||disposition==="cli_scope_selector"));if(cliCounterpart!==void 0)return{surface:"sdk",input:parameter,counterpart:cliCounterpart.input,disposition:"shared",reason:"The strict SDK parameter is reachable from the CLI contract."};const positionalCounterpart=ACTION_POSITIONAL_PARAMETERS[action]?.[parameter];return positionalCounterpart!==void 0?{surface:"sdk",input:parameter,counterpart:positionalCounterpart,disposition:"shared",reason:"The strict SDK parameter maps to a canonical CLI positional argument."}:SDK_TRANSPORT_PARAMETERS.has(parameter)?{surface:"sdk",input:parameter,disposition:"sdk_transport",reason:"The SDK host supplies in-process transport and workspace selection."}:CLI_POSITIONAL_PARAMETERS.has(parameter)?{surface:"sdk",input:parameter,disposition:"cli_positional",reason:"The CLI accepts this SDK parameter as a positional command argument."}:{surface:"sdk",input:parameter,disposition:"sdk_native",reason:"The typed SDK exposes this structured input without a canonical CLI long flag."}}function analyzeSdkCliParameterCompleteness(source={}){const actions=source.actions??PM_TOOL_ACTIONS,resolveFlags=source.resolveFlags??resolveSubcommandFlagContractsForCommand,resolveParameters=source.resolveParameters??pmToolActionParameterKeys;return actions.map(action=>{const command=actionCommand(action),flagContracts=canonicalLongFlags(resolveFlags(command)).filter(({flag})=>resolveReadOutputSurface(action)!==void 0||!READ_OUTPUT_OPTION_FLAGS.has(flag)),sdkParameters=new Set(resolveParameters(action)??[]),cli=flagContracts.map(contract=>classifyCliInput(action,contract,flagContracts,sdkParameters)),sdk=[...sdkParameters].sort((left,right)=>left.localeCompare(right)).map(parameter=>classifySdkInput(action,parameter,cli));return{action,command,cli,sdk,unclassified:[...cli,...sdk].filter(({disposition})=>disposition==="unclassified")}})}export{analyzeSdkCliParameterCompleteness};
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]="0fd1487c-c1ff-5e98-9b3b-1586378e269d")}catch{}})();import{PM_TOOL_ACTIONS}from"./enum-contracts.js";import{resolveSubcommandFlagContractsForCommand}from"./flag-contracts.js";import{pmToolActionParameterKeys}from"./tool-schema.js";import{PM_READ_OUTPUT_COMPOSITION_OPTION_FLAGS,PM_READ_OUTPUT_OPTION_FLAGS,resolveReadOutputSurface}from"../read-output-contracts.js";const CLI_TRANSPORT_FLAGS=new Set(["--author","--expect-hash","--follow","--help","--lean","--token-accounting","--output-include","--output-limit","--output-budget","--output-format","--output-session","--output-cursor","--output-row-contract","--no-changed-fields","--no-extensions","--no-pager","--pm-path","--profile","--quiet","--interval-ms"]),READ_OUTPUT_OPTION_FLAGS=new Set([...PM_READ_OUTPUT_OPTION_FLAGS,...PM_READ_OUTPUT_COMPOSITION_OPTION_FLAGS]),CLI_PRESENTATION_FLAGS=new Set(["--brief","--format","--full","--full-changed-fields","--id-only","--no-truncate","--stream"]),CLI_ADAPTER_FLAGS=new Set(["--body-file","--file","--stdin-json"]),CLI_SCOPE_SELECTOR_FLAGS=new Set(["--global","--local","--project"]),CLI_CONFIG_SHORTHAND_FLAGS=new Set(["--activity-limit","--default-depth","--section-activity","--section-blockers","--section-files","--section-hierarchy","--section-progress","--section-staleness","--section-tests","--section-workload","--stale-threshold-days"]),SDK_TRANSPORT_PARAMETERS=new Set(["action","fullChangedFields","idOnly","path","pmExecutable","timeoutMs"]),CLI_POSITIONAL_PARAMETERS=new Set(["configAction","id","name","query","reason","subcommand","target","text"]),ACTION_POSITIONAL_PARAMETERS={assurance:{id:"<id>",kind:"<kind>",preset:"[kind]|[id]",subcommand:"<action>"},event:{title:"<title>"},files:{lookupPath:"lookup <path...>"},meet:{title:"<title>"},"item-reopen":{id:"<id>",reason:"<reason>"},merge:{subcommand:"<subcommand>"},remind:{title:"<title>"},workspace:{name:"<name>",subcommand:"snapshot",snapshotAction:"<snapshot-action>",target:"<target>"}},ACTION_FLAG_PARAMETER_OVERRIDES={append:{"--text":"body"},assurance:{"--tree":"treeId","--owner":"owner","--apply":"apply","--enforcement":"enforcement"},init:{"--id-prefix":"idPrefix","--no-merge-fence":"mergeFence","--workspace":"workspace"},create:{"--no-inherit-focus":"inheritFocus","--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},plan:{"--no-inherit-focus":"inheritFocus"},update:{"--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},"update-many":{"--ac":"acceptanceCriteria","--estimated-minutes":"estimate","--file":"linkedFile","--test":"linkedTest","--expected":"expectedResult","--actual":"actualResult"},files:{"--note":"addNote"},docs:{"--note":"addNote"},comments:{"--full-history":"full"},notes:{"--file":"text","--full-history":"full"},learnings:{"--file":"text","--full-history":"full"},gc:{"--scope":"gcScope"},contracts:{"--action":"contractAction"},schema:{"--no-allow-unset":"allowUnset","--type":"fieldTypeScope"},"history-author-acknowledge":{"--event":"historyEvent","--all-actionable":"allActionable"},"extension-init":{"--capability":"capability"},"package-init":{"--capability":"capability"},"extension-install":{"--gh":"github"},"package-install":{"--gh":"github"},"extension-adopt":{"--gh":"github"},"package-adopt":{"--gh":"github"},extension:{"--gh":"github","--scaffold":"init"},package:{"--gh":"github","--scaffold":"init"},install:{"--gh":"github"}},GLOBAL_FLAG_PARAMETER_OVERRIDES={"--pm-path":"path"},ACTION_STRUCTURED_FLAG_PARAMETERS={stats:{"--analytics":["measurements","metric","measurementLimit","observe","improvementDirection","measurementSource","measurementItem","measurementRevision","author","message","provenanceCoverage","fleetAttribution","since","eventLimit","minimumSample"]}};function actionCommand(action){return action.startsWith("extension-")?`extension ${action.slice(10)}`:action.startsWith("package-")?`package ${action.slice(8)}`:action.startsWith("item-")?`item ${action.slice(5)}`:action}function parameterForFlag(action,flag){const override=ACTION_FLAG_PARAMETER_OVERRIDES[action]?.[flag]??GLOBAL_FLAG_PARAMETER_OVERRIDES[flag];return override!==void 0?override:flag.replace(/^--/,"").replaceAll("_","-").replace(/-([a-z])/g,(_match,value)=>value.toUpperCase())}function canonicalLongFlags(contracts){const seen=new Set;return contracts.filter(({flag})=>!flag.startsWith("--")||seen.has(flag)?!1:(seen.add(flag),!0))}function aliasTarget(flag,contracts){return contracts.find(({aliases})=>aliases?.includes(flag))?.flag}function classifyCliInput(action,contract,contracts,sdkParameters){const structuredParameters=ACTION_STRUCTURED_FLAG_PARAMETERS[action]?.[contract.flag];if(structuredParameters!==void 0&&structuredParameters.every(parameter2=>sdkParameters.has(parameter2)))return{surface:"cli",input:contract.flag,counterpart:structuredParameters[0],disposition:"shared",reason:"The validated CLI JSON object fans out across strict SDK parameters."};const parameter=parameterForFlag(action,contract.flag);if(sdkParameters.has(parameter))return{surface:"cli",input:contract.flag,counterpart:parameter,disposition:"shared",reason:"The CLI flag maps directly to a strict SDK action parameter."};const canonicalAlias=aliasTarget(contract.flag,contracts);if(canonicalAlias!==void 0){const aliasParameter=parameterForFlag(action,canonicalAlias);if(sdkParameters.has(aliasParameter))return{surface:"cli",input:contract.flag,counterpart:aliasParameter,disposition:"compatibility_alias",reason:`Compatibility spelling for ${canonicalAlias}.`}}return CLI_TRANSPORT_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_transport",reason:"CLI process transport is supplied by the in-process SDK host."}:CLI_PRESENTATION_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_presentation",reason:"CLI rendering or mutation projection does not alter the SDK result envelope."}:CLI_ADAPTER_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,disposition:"cli_adapter",reason:"Local file or stdin adaptation is a CLI boundary concern."}:CLI_CONFIG_SHORTHAND_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,counterpart:"key",disposition:"compatibility_alias",reason:"CLI config shorthand normalizes to the SDK configAction/key/value contract."}:CLI_SCOPE_SELECTOR_FLAGS.has(contract.flag)?{surface:"cli",input:contract.flag,counterpart:"scope",disposition:"cli_scope_selector",reason:"Mutually exclusive CLI scope switches normalize to the SDK scope parameter."}:{surface:"cli",input:contract.flag,counterpart:parameter,disposition:"unclassified",reason:"The CLI flag has no strict SDK parameter or approved boundary classification."}}function classifySdkInput(action,parameter,cliEntries){const structuredCounterpart=Object.entries(ACTION_STRUCTURED_FLAG_PARAMETERS[action]??{}).find(([flag,parameters])=>parameters.includes(parameter)&&cliEntries.some(({input,disposition})=>input===flag&&disposition==="shared"));if(structuredCounterpart!==void 0)return{surface:"sdk",input:parameter,counterpart:structuredCounterpart[0],disposition:"shared",reason:"The strict SDK parameter is reachable through the validated CLI JSON object."};const cliCounterpart=cliEntries.find(({counterpart,disposition})=>counterpart===parameter&&(disposition==="shared"||disposition==="compatibility_alias"||disposition==="cli_scope_selector"));if(cliCounterpart!==void 0)return{surface:"sdk",input:parameter,counterpart:cliCounterpart.input,disposition:"shared",reason:"The strict SDK parameter is reachable from the CLI contract."};const positionalCounterpart=ACTION_POSITIONAL_PARAMETERS[action]?.[parameter];return positionalCounterpart!==void 0?{surface:"sdk",input:parameter,counterpart:positionalCounterpart,disposition:"shared",reason:"The strict SDK parameter maps to a canonical CLI positional argument."}:SDK_TRANSPORT_PARAMETERS.has(parameter)?{surface:"sdk",input:parameter,disposition:"sdk_transport",reason:"The SDK host supplies in-process transport and workspace selection."}:CLI_POSITIONAL_PARAMETERS.has(parameter)?{surface:"sdk",input:parameter,disposition:"cli_positional",reason:"The CLI accepts this SDK parameter as a positional command argument."}:{surface:"sdk",input:parameter,disposition:"sdk_native",reason:"The typed SDK exposes this structured input without a canonical CLI long flag."}}function analyzeSdkCliParameterCompleteness(source={}){const actions=source.actions??PM_TOOL_ACTIONS,resolveFlags=source.resolveFlags??resolveSubcommandFlagContractsForCommand,resolveParameters=source.resolveParameters??pmToolActionParameterKeys;return actions.map(action=>{const command=actionCommand(action),flagContracts=canonicalLongFlags(resolveFlags(command)).filter(({flag})=>resolveReadOutputSurface(action)!==void 0||!READ_OUTPUT_OPTION_FLAGS.has(flag)),sdkParameters=new Set(resolveParameters(action)??[]),cli=flagContracts.map(contract=>classifyCliInput(action,contract,flagContracts,sdkParameters)),sdk=[...sdkParameters].sort((left,right)=>left.localeCompare(right)).map(parameter=>classifySdkInput(action,parameter,cli));return{action,command,cli,sdk,unclassified:[...cli,...sdk].filter(({disposition})=>disposition==="unclassified")}})}export{analyzeSdkCliParameterCompleteness};
2
2
  //# sourceMappingURL=completeness.js.map
@@ -76,3 +76,14 @@ export declare function isPmExtensionServiceNameContract(value:string):value is
76
76
  export declare function isPmExtensionPolicyModeContract(value:string):value is PmExtensionPolicyModeContract;
77
77
  /** Implements check whether pm extension policy surface contract for the public runtime surface of this module. */
78
78
  export declare function isPmExtensionPolicySurfaceContract(value:string):value is PmExtensionPolicySurfaceContract;
79
+ /**
80
+ * The one inventory of native actions whose locked item writes honour the
81
+ * `expectHash` / `--expect-hash` precondition (pm-gh1576). The strict tool
82
+ * schema declares the parameter for exactly these actions, and dispatch admits
83
+ * the precondition for them, so the two can never disagree.
84
+ *
85
+ * Lifecycle, annotation, linked-artifact, plan, linked-test persistence and
86
+ * history-maintenance writers of existing items. `create` and `copy` only
87
+ * create new items, so a revision has nothing to guard there.
88
+ */
89
+ export declare const PM_EXPECT_HASH_ACTIONS:ReadonlySet<string>;
@@ -1,2 +1,2 @@
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]="432226a6-9df4-5de6-b9af-5c06ec2eed66")}catch{}})();import{KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_SERVICE_NAMES,KNOWN_EXTENSION_TRUST_MODES}from"../../core/extensions/extension-types.js";import{WORKFLOW_POLICY_ACTIONS}from"../../core/policy/workflow-policy.js";import{PM_COMMAND_ALIAS_CONTRACTS}from"./command-aliases.js";const PM_EXTENSION_CAPABILITY_CONTRACTS=[...KNOWN_EXTENSION_CAPABILITIES],PM_EXTENSION_SERVICE_NAME_CONTRACTS=[...KNOWN_EXTENSION_SERVICE_NAMES],PM_EXTENSION_POLICY_MODE_CONTRACTS=[...KNOWN_EXTENSION_POLICY_MODES],PM_EXTENSION_TRUST_MODE_CONTRACTS=[...KNOWN_EXTENSION_TRUST_MODES],PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS=[...KNOWN_EXTENSION_SANDBOX_PROFILES],PM_EXTENSION_POLICY_SURFACE_CONTRACTS=[...KNOWN_EXTENSION_POLICY_SURFACES],PM_CORE_COMMAND_NAMES=["init","config","extension","package","packages","install","upgrade","create","item","copy","focus","list","list-all","list-draft","list-open","list-in-progress","list-blocked","list-closed","list-canceled","aggregate","context","ctx","get","graph","search","duplicates","eval","next","history","events","history-redact","history-repair","history-compact","history-attest","history-author-acknowledge","merge","schema","profile","activity","restore","update","update-many","close","close-many","delete","append","comments","notes","learnings","files","docs","deps","plan","test","test-all","telemetry","stats","health","validate","assurance","gc","workspace","contracts","claim","release","start-task","pause-task","close-task","meet","event","remind","help"],GRAPH_SUBCOMMAND_VALUES=["ancestors","descendants","predecessors","successors","paths","impact","analyze","audit","communities","redundancy","dominators","slack","centrality","articulation","plan","index"],MERGE_SUBCOMMAND_VALUES=["install","reconcile","report","driver"],PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS=["init","install","uninstall","explore","manage","describe","reload","doctor","catalog","adopt","adopt-all","activate","deactivate"],PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS=["upgrade"],PM_ITEM_ACTION_SUBCOMMANDS=["reopen"],PM_CLI_ONLY_TOOL_ACTION_WAIVERS={help:"Commander help rendering has no SDK operation result.",packages:"The plural package alias only renders package-oriented help."},PM_TOOL_ACTIONS=Object.freeze(PM_CORE_COMMAND_NAMES.flatMap(command=>command in PM_CLI_ONLY_TOOL_ACTION_WAIVERS?[]:command==="extension"||command==="package"?[...PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS.map(subcommand=>`${command}-${subcommand}`),...command==="package"?PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS.map(subcommand=>`package-${subcommand}`):[],command]:command==="item"?PM_ITEM_ACTION_SUBCOMMANDS.map(subcommand=>`item-${subcommand}`):[command])),PM_DEPRECATED_TOOL_ACTIONS=Object.freeze(PM_COMMAND_ALIAS_CONTRACTS.filter(contract=>contract.lifecycle==="deprecated"&&contract.registration==="commander"&&PM_TOOL_ACTIONS.includes(contract.alias)).map(contract=>contract.alias)),PM_DISCOVERABLE_TOOL_ACTIONS=Object.freeze(PM_TOOL_ACTIONS.filter(action=>!PM_DEPRECATED_TOOL_ACTIONS.includes(action)));function analyzePmToolActionParity(cliCommands=PM_CORE_COMMAND_NAMES,toolActions=PM_TOOL_ACTIONS,waivers=PM_CLI_ONLY_TOOL_ACTION_WAIVERS){const toolActionSet=new Set(toolActions),cliCommandSet=new Set(cliCommands);return{missing_cli_actions:cliCommands.filter(command=>!toolActionSet.has(command)&&!toolActions.some(action=>action.startsWith(`${command}-`))&&waivers[command]===void 0),waived_cli_actions:cliCommands.filter(command=>!toolActionSet.has(command)&&!toolActions.some(action=>action.startsWith(`${command}-`))&&waivers[command]!==void 0),stale_waivers:Object.keys(waivers).filter(command=>!cliCommandSet.has(command)||toolActionSet.has(command)||toolActions.some(action=>action.startsWith(`${command}-`)))}}function isPmToolAction(value){return PM_TOOL_ACTIONS.includes(value)}function isPmExtensionCapabilityContract(value){return PM_EXTENSION_CAPABILITY_CONTRACTS.includes(value)}function isPmExtensionServiceNameContract(value){return PM_EXTENSION_SERVICE_NAME_CONTRACTS.includes(value)}function isPmExtensionPolicyModeContract(value){return PM_EXTENSION_POLICY_MODE_CONTRACTS.includes(value)}function isPmExtensionPolicySurfaceContract(value){return PM_EXTENSION_POLICY_SURFACE_CONTRACTS.includes(value)}export{GRAPH_SUBCOMMAND_VALUES,MERGE_SUBCOMMAND_VALUES,PM_CLI_ONLY_TOOL_ACTION_WAIVERS,PM_CORE_COMMAND_NAMES,PM_DEPRECATED_TOOL_ACTIONS,PM_DISCOVERABLE_TOOL_ACTIONS,PM_EXTENSION_CAPABILITY_CONTRACTS,PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS,PM_EXTENSION_POLICY_MODE_CONTRACTS,PM_EXTENSION_POLICY_SURFACE_CONTRACTS,PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS,PM_EXTENSION_SERVICE_NAME_CONTRACTS,PM_EXTENSION_TRUST_MODE_CONTRACTS,PM_ITEM_ACTION_SUBCOMMANDS,PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS,PM_TOOL_ACTIONS,WORKFLOW_POLICY_ACTIONS,analyzePmToolActionParity,isPmExtensionCapabilityContract,isPmExtensionPolicyModeContract,isPmExtensionPolicySurfaceContract,isPmExtensionServiceNameContract,isPmToolAction};
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]="3348c61d-a03e-5023-a5dc-fd6149f478c1")}catch{}})();import{KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_SERVICE_NAMES,KNOWN_EXTENSION_TRUST_MODES}from"../../core/extensions/extension-types.js";import{WORKFLOW_POLICY_ACTIONS}from"../../core/policy/workflow-policy.js";import{PM_COMMAND_ALIAS_CONTRACTS}from"./command-aliases.js";const PM_EXTENSION_CAPABILITY_CONTRACTS=[...KNOWN_EXTENSION_CAPABILITIES],PM_EXTENSION_SERVICE_NAME_CONTRACTS=[...KNOWN_EXTENSION_SERVICE_NAMES],PM_EXTENSION_POLICY_MODE_CONTRACTS=[...KNOWN_EXTENSION_POLICY_MODES],PM_EXTENSION_TRUST_MODE_CONTRACTS=[...KNOWN_EXTENSION_TRUST_MODES],PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS=[...KNOWN_EXTENSION_SANDBOX_PROFILES],PM_EXTENSION_POLICY_SURFACE_CONTRACTS=[...KNOWN_EXTENSION_POLICY_SURFACES],PM_CORE_COMMAND_NAMES=["init","config","extension","package","packages","install","upgrade","create","item","copy","focus","list","list-all","list-draft","list-open","list-in-progress","list-blocked","list-closed","list-canceled","aggregate","context","ctx","get","graph","search","duplicates","eval","next","history","events","history-redact","history-repair","history-compact","history-attest","history-author-acknowledge","merge","schema","profile","activity","restore","update","update-many","close","close-many","delete","append","comments","notes","learnings","files","docs","deps","plan","test","test-all","telemetry","stats","health","validate","assurance","gc","workspace","contracts","claim","release","start-task","pause-task","close-task","meet","event","remind","help"],GRAPH_SUBCOMMAND_VALUES=["ancestors","descendants","predecessors","successors","paths","impact","analyze","audit","communities","redundancy","dominators","slack","centrality","articulation","plan","index"],MERGE_SUBCOMMAND_VALUES=["install","reconcile","report","driver"],PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS=["init","install","uninstall","explore","manage","describe","reload","doctor","catalog","adopt","adopt-all","activate","deactivate"],PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS=["upgrade"],PM_ITEM_ACTION_SUBCOMMANDS=["reopen"],PM_CLI_ONLY_TOOL_ACTION_WAIVERS={help:"Commander help rendering has no SDK operation result.",packages:"The plural package alias only renders package-oriented help."},PM_TOOL_ACTIONS=Object.freeze(PM_CORE_COMMAND_NAMES.flatMap(command=>command in PM_CLI_ONLY_TOOL_ACTION_WAIVERS?[]:command==="extension"||command==="package"?[...PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS.map(subcommand=>`${command}-${subcommand}`),...command==="package"?PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS.map(subcommand=>`package-${subcommand}`):[],command]:command==="item"?PM_ITEM_ACTION_SUBCOMMANDS.map(subcommand=>`item-${subcommand}`):[command])),PM_DEPRECATED_TOOL_ACTIONS=Object.freeze(PM_COMMAND_ALIAS_CONTRACTS.filter(contract=>contract.lifecycle==="deprecated"&&contract.registration==="commander"&&PM_TOOL_ACTIONS.includes(contract.alias)).map(contract=>contract.alias)),PM_DISCOVERABLE_TOOL_ACTIONS=Object.freeze(PM_TOOL_ACTIONS.filter(action=>!PM_DEPRECATED_TOOL_ACTIONS.includes(action)));function analyzePmToolActionParity(cliCommands=PM_CORE_COMMAND_NAMES,toolActions=PM_TOOL_ACTIONS,waivers=PM_CLI_ONLY_TOOL_ACTION_WAIVERS){const toolActionSet=new Set(toolActions),cliCommandSet=new Set(cliCommands);return{missing_cli_actions:cliCommands.filter(command=>!toolActionSet.has(command)&&!toolActions.some(action=>action.startsWith(`${command}-`))&&waivers[command]===void 0),waived_cli_actions:cliCommands.filter(command=>!toolActionSet.has(command)&&!toolActions.some(action=>action.startsWith(`${command}-`))&&waivers[command]!==void 0),stale_waivers:Object.keys(waivers).filter(command=>!cliCommandSet.has(command)||toolActionSet.has(command)||toolActions.some(action=>action.startsWith(`${command}-`)))}}function isPmToolAction(value){return PM_TOOL_ACTIONS.includes(value)}function isPmExtensionCapabilityContract(value){return PM_EXTENSION_CAPABILITY_CONTRACTS.includes(value)}function isPmExtensionServiceNameContract(value){return PM_EXTENSION_SERVICE_NAME_CONTRACTS.includes(value)}function isPmExtensionPolicyModeContract(value){return PM_EXTENSION_POLICY_MODE_CONTRACTS.includes(value)}function isPmExtensionPolicySurfaceContract(value){return PM_EXTENSION_POLICY_SURFACE_CONTRACTS.includes(value)}const PM_EXPECT_HASH_ACTIONS=new Set(["update","item-reopen","close","claim","release","start-task","pause-task","close-task","restore","append","update-many","close-many","delete","comments","notes","learnings","files","docs","test","test-all","plan","history-redact","history-repair","history-compact","validate"]);export{GRAPH_SUBCOMMAND_VALUES,MERGE_SUBCOMMAND_VALUES,PM_CLI_ONLY_TOOL_ACTION_WAIVERS,PM_CORE_COMMAND_NAMES,PM_DEPRECATED_TOOL_ACTIONS,PM_DISCOVERABLE_TOOL_ACTIONS,PM_EXPECT_HASH_ACTIONS,PM_EXTENSION_CAPABILITY_CONTRACTS,PM_EXTENSION_PACKAGE_ACTION_SUBCOMMANDS,PM_EXTENSION_POLICY_MODE_CONTRACTS,PM_EXTENSION_POLICY_SURFACE_CONTRACTS,PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS,PM_EXTENSION_SERVICE_NAME_CONTRACTS,PM_EXTENSION_TRUST_MODE_CONTRACTS,PM_ITEM_ACTION_SUBCOMMANDS,PM_PACKAGE_ONLY_ACTION_SUBCOMMANDS,PM_TOOL_ACTIONS,WORKFLOW_POLICY_ACTIONS,analyzePmToolActionParity,isPmExtensionCapabilityContract,isPmExtensionPolicyModeContract,isPmExtensionPolicySurfaceContract,isPmExtensionServiceNameContract,isPmToolAction};
2
2
  //# sourceMappingURL=enum-contracts.js.map
@@ -1,3 +1,3 @@
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]="1cda240f-7416-5d00-abf5-53695f26ef69")}catch{}})();import{hasSubcommandFlagContractsForCommand,resolveSubcommandFlagContractsForCommand}from"./flag-contracts.js";import{PM_COMMAND_CAPABILITY_CONTRACTS}from"../agent-capability-contracts.js";import{PM_NAMESPACED_COMMAND_ALIASES,resolvePmCommandOperation}from"./command-aliases.js";import{enrichCliFlagInvocationContracts}from"../flag-invocation-contracts.js";let cachedPmFlagLexicon;const FULL_PROJECTION_CONCEPT_BY_COMMAND=Object.freeze({list:"list-item-projection","list-all":"list-item-projection","list-draft":"list-item-projection","list-open":"list-item-projection","list-in-progress":"list-item-projection","list-blocked":"list-item-projection","list-closed":"list-item-projection","list-canceled":"list-item-projection",get:"get-item-projection",graph:"graph-detail-projection",search:"search-result-projection",history:"history-entry-projection",events:"mutation-event-projection",activity:"activity-entry-projection",deps:"dependency-graph-projection",health:"health-diagnostic-projection",validate:"validation-diagnostic-projection",contracts:"contract-catalog-projection"});function resolvePmFlagSemanticConcept(command,flag){if(flag==="--limit")return"result-row-limit";if(flag==="--node-limit")return"graph-node-limit";if(flag==="--edge-limit")return"graph-edge-limit";if(flag==="--output-limit")return"rendered-output-row-limit";if(flag==="--output-budget")return"rendered-output-byte-budget";if(flag==="--token-budget")return"context-intent-token-budget";if(flag==="--full"){const concept=FULL_PROJECTION_CONCEPT_BY_COMMAND[resolvePmCommandOperation(command)];if(concept===void 0)throw new Error(`Command ${command} exposes --full without a registered projection concept.`);return concept}return flag!=="--file"?flag.slice(2):["create","update","update-many"].includes(resolvePmCommandOperation(command))?"linked-file-path":["comments","notes","learnings"].includes(resolvePmCommandOperation(command))?"entry-file-input":"plan-definition-file"}function listPmFlagLexicon(){if(cachedPmFlagLexicon!==void 0)return cachedPmFlagLexicon;const provisionalEntries=PM_COMMAND_CAPABILITY_CONTRACTS.filter(({command})=>hasSubcommandFlagContractsForCommand(command)).flatMap(({command,family})=>enrichCliFlagInvocationContracts(command,resolveSubcommandFlagContractsForCommand(command)).map(contract=>({command,family,concept:resolvePmFlagSemanticConcept(command,contract.flag),flag:contract.flag,aliases:Object.freeze([...contract.aliases??[]]),value_kind:contract.repeatable?"list":contract.flag==="--limit"?"number":contract.value_type}))),compatibilityAliasFlags=new Set(provisionalEntries.flatMap(entry=>entry.aliases.map(alias=>`${entry.command}:${alias}`))),canonicalEntries=provisionalEntries.filter(entry=>!compatibilityAliasFlags.has(`${entry.command}:${entry.flag}`)),kindsByConcept=new Map;for(const entry of canonicalEntries){const kinds=kindsByConcept.get(entry.concept)??new Set;kinds.add(entry.value_kind),kindsByConcept.set(entry.concept,kinds)}return cachedPmFlagLexicon=Object.freeze(canonicalEntries.map(entry=>Object.freeze({...entry,concept:kindsByConcept.get(entry.concept)?.size===1?entry.concept:`${entry.concept}@${entry.command}`}))),cachedPmFlagLexicon}function listPmFlagSpellingInventory(){return Object.freeze(listPmFlagLexicon().map(entry=>Object.freeze({command:entry.command,canonical_flag:entry.flag,accepted_spellings:Object.freeze([...new Set([entry.flag,...entry.aliases])].sort())})))}const LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS=Object.freeze({init:30,item:20,config:36,extension:55,package:56,packages:56,install:27,upgrade:29,create:102,copy:24,focus:22,list:86,"list-all":86,"list-draft":84,"list-open":84,"list-in-progress":84,"list-blocked":84,"list-closed":84,"list-canceled":84,aggregate:40,context:45,ctx:45,get:30,graph:34,search:78,duplicates:25,eval:25,next:38,history:36,events:34,"history-attest":23,"history-redact":27,"history-repair":27,"history-compact":30,"history-author-acknowledge":28,merge:29,schema:43,profile:22,activity:36,restore:23,update:105,"update-many":146,close:32,"close-many":72,delete:24,append:25,comments:31,notes:35,learnings:31,files:39,docs:30,deps:32,plan:111,test:56,"test-all":40,telemetry:21,stats:29,health:36,validate:46,assurance:30,gc:22,workspace:23,contracts:29,claim:39,release:25,"start-task":23,"pause-task":23,"close-task":24,meet:33,event:33,remind:29,"test-runs-worker":20}),PM_COMMAND_FLAG_BUDGET_MAXIMUMS=Object.freeze({...LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS,...Object.fromEntries(PM_NAMESPACED_COMMAND_ALIASES.flatMap(({alias,canonical})=>{const maximum=LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS[alias];return maximum===void 0?[]:[[canonical,maximum]]}))});function listPmCommandFlagBudgets(){const currentByCommand=new Map(Object.keys(PM_COMMAND_FLAG_BUDGET_MAXIMUMS).map(command=>[command,0]));for(const{command}of listPmFlagLexicon())currentByCommand.set(command,Number(currentByCommand.get(command))+1);return Object.freeze(Object.entries(PM_COMMAND_FLAG_BUDGET_MAXIMUMS).map(([command,maximum])=>Object.freeze({command,current:Number(currentByCommand.get(command)),maximum})))}function appendAliasCollisionFindings(entries,canonicalOwners,findings){for(const entry of entries)for(const alias of entry.aliases){const owner=canonicalOwners.get(`${entry.command}:${alias}`);owner===void 0||owner.flag===entry.flag||findings.push({code:"alias_collision",command:entry.command,detail:`${alias} aliases ${entry.flag} but is canonical for ${owner.flag}.`})}}function appendBudgetFindings(counts,budgets,findings){const budgetedCommands=new Set(budgets.map(({command})=>command));for(const command of counts.keys())budgetedCommands.has(command)||findings.push({code:"missing_budget",command,detail:`${command} has canonical flags but no persisted budget.`});for(const budget of budgets){const actual=counts.get(budget.command)??0;actual===0&&findings.push({code:"stale_budget",command:budget.command,detail:`${budget.command} has a persisted budget but no canonical flags.`}),!(actual<=budget.maximum)&&findings.push({code:"budget_exceeded",command:budget.command,detail:`${actual} canonical flags exceed the ratcheted maximum ${budget.maximum}.`})}}function appendSpellingCompatibilityFindings(entries,baseline,findings){const current=new Map(entries.map(entry=>[`${entry.command}:${entry.flag}`,entry]));for(const historical of baseline){const key=`${historical.command}:${historical.canonical_flag}`,entry=current.get(key);if(!entry){findings.push({code:"removed_canonical_spelling",command:historical.command,detail:`${historical.canonical_flag} disappeared from the executable spelling inventory.`});continue}const accepted=new Set([entry.flag,...entry.aliases]);for(const spelling of historical.accepted_spellings)accepted.has(spelling)||findings.push({code:"removed_compatibility_spelling",command:historical.command,detail:`${spelling} no longer resolves to ${historical.canonical_flag}.`})}}function verifyPmFlagLexicon(entries=listPmFlagLexicon(),budgets=listPmCommandFlagBudgets(),baseline=[]){const findings=[],canonicalOwners=new Map,conceptKinds=new Map,conceptSpellings=new Map,counts=new Map;for(const entry of entries){const commandFlag=`${entry.command}:${entry.flag}`;canonicalOwners.has(commandFlag)?findings.push({code:"duplicate_canonical_flag",command:entry.command,detail:`${entry.flag} has more than one canonical row.`}):canonicalOwners.set(commandFlag,entry),counts.set(entry.command,(counts.get(entry.command)??0)+1);const priorKind=conceptKinds.get(entry.concept);priorKind!==void 0&&priorKind!==entry.value_kind?findings.push({code:"inconsistent_concept_kind",command:entry.command,detail:`${entry.concept} uses both ${priorKind} and ${entry.value_kind}.`}):conceptKinds.set(entry.concept,entry.value_kind);const priorSpelling=conceptSpellings.get(entry.concept);priorSpelling!==void 0&&priorSpelling!==entry.flag?findings.push({code:"semantic_spelling_collision",command:entry.command,detail:`${entry.concept} is canonicalized by both ${priorSpelling} and ${entry.flag}.`}):conceptSpellings.set(entry.concept,entry.flag)}return appendAliasCollisionFindings(entries,canonicalOwners,findings),appendBudgetFindings(counts,budgets,findings),appendSpellingCompatibilityFindings(entries,baseline,findings),findings.sort((left,right)=>left.command.localeCompare(right.command)||left.code.localeCompare(right.code)||left.detail.localeCompare(right.detail)),{ok:findings.length===0,entry_count:entries.length,budget_count:budgets.length,concept_count:new Set(entries.map(({concept})=>concept)).size,baseline_entry_count:baseline.length,findings}}function renderPmFlagLexiconMarkdown(){const lexicon=listPmFlagLexicon(),budgets=listPmCommandFlagBudgets(),familyByCommand=new Map(budgets.map(({command})=>[command,"unknown"]));for(const{command,family}of lexicon)familyByCommand.set(command,family);return["# Generated flag lexicon budgets","","This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not consume canonical budget.","","| Command | Capability family | Canonical flags | Maximum |","| --- | --- | ---: | ---: |",...budgets.map(({command,current,maximum})=>{const family=familyByCommand.get(command);return`| \`${command}\` | ${family} | ${current} | ${maximum} |`}),""].join(`
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]="29c6ca01-4b1b-56fb-9bcc-5e1c26f17aff")}catch{}})();import{hasSubcommandFlagContractsForCommand,resolveSubcommandFlagContractsForCommand}from"./flag-contracts.js";import{PM_COMMAND_CAPABILITY_CONTRACTS}from"../agent-capability-contracts.js";import{PM_NAMESPACED_COMMAND_ALIASES,resolvePmCommandOperation}from"./command-aliases.js";import{enrichCliFlagInvocationContracts}from"../flag-invocation-contracts.js";let cachedPmFlagLexicon;const FULL_PROJECTION_CONCEPT_BY_COMMAND=Object.freeze({list:"list-item-projection","list-all":"list-item-projection","list-draft":"list-item-projection","list-open":"list-item-projection","list-in-progress":"list-item-projection","list-blocked":"list-item-projection","list-closed":"list-item-projection","list-canceled":"list-item-projection",get:"get-item-projection",graph:"graph-detail-projection",search:"search-result-projection",history:"history-entry-projection",events:"mutation-event-projection",activity:"activity-entry-projection",deps:"dependency-graph-projection",health:"health-diagnostic-projection",validate:"validation-diagnostic-projection",contracts:"contract-catalog-projection"});function resolvePmFlagSemanticConcept(command,flag){if(flag==="--limit")return"result-row-limit";if(flag==="--node-limit")return"graph-node-limit";if(flag==="--edge-limit")return"graph-edge-limit";if(flag==="--output-limit")return"rendered-output-row-limit";if(flag==="--output-budget")return"rendered-output-byte-budget";if(flag==="--token-budget")return"context-intent-token-budget";if(flag==="--full"){const concept=FULL_PROJECTION_CONCEPT_BY_COMMAND[resolvePmCommandOperation(command)];if(concept===void 0)throw new Error(`Command ${command} exposes --full without a registered projection concept.`);return concept}return flag!=="--file"?flag.slice(2):["create","update","update-many"].includes(resolvePmCommandOperation(command))?"linked-file-path":["comments","notes","learnings"].includes(resolvePmCommandOperation(command))?"entry-file-input":"plan-definition-file"}function listPmFlagLexicon(){if(cachedPmFlagLexicon!==void 0)return cachedPmFlagLexicon;const provisionalEntries=PM_COMMAND_CAPABILITY_CONTRACTS.filter(({command})=>hasSubcommandFlagContractsForCommand(command)).flatMap(({command,family})=>enrichCliFlagInvocationContracts(command,resolveSubcommandFlagContractsForCommand(command)).map(contract=>({command,family,concept:resolvePmFlagSemanticConcept(command,contract.flag),flag:contract.flag,aliases:Object.freeze([...contract.aliases??[]]),value_kind:contract.repeatable?"list":contract.flag==="--limit"?"number":contract.value_type}))),compatibilityAliasFlags=new Set(provisionalEntries.flatMap(entry=>entry.aliases.map(alias=>`${entry.command}:${alias}`))),canonicalEntries=provisionalEntries.filter(entry=>!compatibilityAliasFlags.has(`${entry.command}:${entry.flag}`)),kindsByConcept=new Map;for(const entry of canonicalEntries){const kinds=kindsByConcept.get(entry.concept)??new Set;kinds.add(entry.value_kind),kindsByConcept.set(entry.concept,kinds)}return cachedPmFlagLexicon=Object.freeze(canonicalEntries.map(entry=>Object.freeze({...entry,concept:kindsByConcept.get(entry.concept)?.size===1?entry.concept:`${entry.concept}@${entry.command}`}))),cachedPmFlagLexicon}function listPmFlagSpellingInventory(){return Object.freeze(listPmFlagLexicon().map(entry=>Object.freeze({command:entry.command,canonical_flag:entry.flag,accepted_spellings:Object.freeze([...new Set([entry.flag,...entry.aliases])].sort())})))}const LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS=Object.freeze({init:30,item:20,config:36,extension:55,package:56,packages:56,install:27,upgrade:29,create:102,copy:24,focus:22,list:86,"list-all":86,"list-draft":84,"list-open":84,"list-in-progress":84,"list-blocked":84,"list-closed":84,"list-canceled":84,aggregate:40,context:45,ctx:45,get:30,graph:34,search:78,duplicates:25,eval:25,next:38,history:36,events:34,"history-attest":23,"history-redact":27,"history-repair":27,"history-compact":30,"history-author-acknowledge":28,merge:29,schema:43,profile:22,activity:36,restore:23,update:105,"update-many":146,close:32,"close-many":72,delete:24,append:25,comments:31,notes:35,learnings:31,files:39,docs:30,deps:32,plan:111,test:56,"test-all":40,telemetry:21,stats:29,health:36,validate:46,assurance:30,gc:22,workspace:23,contracts:29,claim:39,release:25,"start-task":23,"pause-task":23,"close-task":24,meet:33,event:33,remind:29,"test-runs-worker":20}),SHARED_HOST_FLAG_GROWTH=1,PM_COMMAND_FLAG_BUDGET_MAXIMUMS=Object.freeze(Object.fromEntries(Object.entries({...LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS,...Object.fromEntries(PM_NAMESPACED_COMMAND_ALIASES.flatMap(({alias,canonical})=>{const maximum=LEGACY_COMMAND_FLAG_BUDGET_MAXIMUMS[alias];return maximum===void 0?[]:[[canonical,maximum]]}))}).map(([command,maximum])=>[command,maximum+SHARED_HOST_FLAG_GROWTH])));function listPmCommandFlagBudgets(){const currentByCommand=new Map(Object.keys(PM_COMMAND_FLAG_BUDGET_MAXIMUMS).map(command=>[command,0]));for(const{command}of listPmFlagLexicon())currentByCommand.set(command,Number(currentByCommand.get(command))+1);return Object.freeze(Object.entries(PM_COMMAND_FLAG_BUDGET_MAXIMUMS).map(([command,maximum])=>Object.freeze({command,current:Number(currentByCommand.get(command)),maximum})))}function appendAliasCollisionFindings(entries,canonicalOwners,findings){for(const entry of entries)for(const alias of entry.aliases){const owner=canonicalOwners.get(`${entry.command}:${alias}`);owner===void 0||owner.flag===entry.flag||findings.push({code:"alias_collision",command:entry.command,detail:`${alias} aliases ${entry.flag} but is canonical for ${owner.flag}.`})}}function appendBudgetFindings(counts,budgets,findings){const budgetedCommands=new Set(budgets.map(({command})=>command));for(const command of counts.keys())budgetedCommands.has(command)||findings.push({code:"missing_budget",command,detail:`${command} has canonical flags but no persisted budget.`});for(const budget of budgets){const actual=counts.get(budget.command)??0;actual===0&&findings.push({code:"stale_budget",command:budget.command,detail:`${budget.command} has a persisted budget but no canonical flags.`}),!(actual<=budget.maximum)&&findings.push({code:"budget_exceeded",command:budget.command,detail:`${actual} canonical flags exceed the ratcheted maximum ${budget.maximum}.`})}}function appendSpellingCompatibilityFindings(entries,baseline,findings){const current=new Map(entries.map(entry=>[`${entry.command}:${entry.flag}`,entry]));for(const historical of baseline){const key=`${historical.command}:${historical.canonical_flag}`,entry=current.get(key);if(!entry){findings.push({code:"removed_canonical_spelling",command:historical.command,detail:`${historical.canonical_flag} disappeared from the executable spelling inventory.`});continue}const accepted=new Set([entry.flag,...entry.aliases]);for(const spelling of historical.accepted_spellings)accepted.has(spelling)||findings.push({code:"removed_compatibility_spelling",command:historical.command,detail:`${spelling} no longer resolves to ${historical.canonical_flag}.`})}}function verifyPmFlagLexicon(entries=listPmFlagLexicon(),budgets=listPmCommandFlagBudgets(),baseline=[]){const findings=[],canonicalOwners=new Map,conceptKinds=new Map,conceptSpellings=new Map,counts=new Map;for(const entry of entries){const commandFlag=`${entry.command}:${entry.flag}`;canonicalOwners.has(commandFlag)?findings.push({code:"duplicate_canonical_flag",command:entry.command,detail:`${entry.flag} has more than one canonical row.`}):canonicalOwners.set(commandFlag,entry),counts.set(entry.command,(counts.get(entry.command)??0)+1);const priorKind=conceptKinds.get(entry.concept);priorKind!==void 0&&priorKind!==entry.value_kind?findings.push({code:"inconsistent_concept_kind",command:entry.command,detail:`${entry.concept} uses both ${priorKind} and ${entry.value_kind}.`}):conceptKinds.set(entry.concept,entry.value_kind);const priorSpelling=conceptSpellings.get(entry.concept);priorSpelling!==void 0&&priorSpelling!==entry.flag?findings.push({code:"semantic_spelling_collision",command:entry.command,detail:`${entry.concept} is canonicalized by both ${priorSpelling} and ${entry.flag}.`}):conceptSpellings.set(entry.concept,entry.flag)}return appendAliasCollisionFindings(entries,canonicalOwners,findings),appendBudgetFindings(counts,budgets,findings),appendSpellingCompatibilityFindings(entries,baseline,findings),findings.sort((left,right)=>left.command.localeCompare(right.command)||left.code.localeCompare(right.code)||left.detail.localeCompare(right.detail)),{ok:findings.length===0,entry_count:entries.length,budget_count:budgets.length,concept_count:new Set(entries.map(({concept})=>concept)).size,baseline_entry_count:baseline.length,findings}}function renderPmFlagLexiconMarkdown(){const lexicon=listPmFlagLexicon(),budgets=listPmCommandFlagBudgets(),familyByCommand=new Map(budgets.map(({command})=>[command,"unknown"]));for(const{command,family}of lexicon)familyByCommand.set(command,family);return["# Generated flag lexicon budgets","","This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not consume canonical budget.","","| Command | Capability family | Canonical flags | Maximum |","| --- | --- | ---: | ---: |",...budgets.map(({command,current,maximum})=>{const family=familyByCommand.get(command);return`| \`${command}\` | ${family} | ${current} | ${maximum} |`}),""].join(`
2
2
  `)}export{listPmCommandFlagBudgets,listPmFlagLexicon,listPmFlagSpellingInventory,renderPmFlagLexiconMarkdown,resolvePmFlagSemanticConcept,verifyPmFlagLexicon};
3
3
  //# sourceMappingURL=flag-lexicon-contracts.js.map
@@ -1,4 +1,4 @@
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]="744840e4-d430-54d3-b681-7244a58d86cb")}catch{}})();import{Option}from"commander";import{resolvePmHistoryOperation}from"./command-aliases.js";import{pathExists,refreshSearchArtifactsForMutation,shouldRunSearchRefreshInForeground,EXIT_CODE,PmCliError,printError,printResult,writeStdout,getSettingsPath,resolvePmRoot,transferMutationStdinTokenPolicy,readSettings,runActiveServiceOverride,setActiveCommandResult}from"../runtime-primitives.js";import{ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS,CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,CREATE_COMMANDER_STRING_OPTION_CONTRACTS,LIST_COMMANDER_STRING_OPTION_CONTRACTS,NEXT_COMMANDER_STRING_OPTION_CONTRACTS,SEARCH_COMMANDER_STRING_OPTION_CONTRACTS,UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,readFirstValueFromCommanderOptions,readFirstStringFromCommanderOptions,readStringArrayFromCommanderOptions}from"../cli-contracts.js";import{buildBackgroundTestCommandArgs,buildBackgroundTestAllCommandArgs}from"../test/command-args.js";async function applyActiveCommandResultService(command,args,options,global2,result){const pmRoot=resolvePmRoot(process.cwd(),global2.path),override=await runActiveServiceOverride("command_result",{command,args,options,global:global2,pm_root:pmRoot,result});return override.handled?override.result:result}function syncCommanderActionOptions(actionCommand,commandOptions){for(const[key,value]of Object.entries(commandOptions)){const source=actionCommand.getOptionValueSource(key),unchanged=source!==void 0&&Object.is(actionCommand.getOptionValue(key),value);actionCommand.setOptionValueWithSource(key,value,unchanged?source:"cli")}}function readJoinedRepeatedOption(options,contract){const values=[],observedArrays=new Set;for(const key of contract.keys){if(!Object.hasOwn(options,key))continue;const value=options[key];if(value!=null){if(typeof value=="string"){values.push(value);continue}if(!Array.isArray(value)||!value.every(entry=>typeof entry=="string"))return;observedArrays.has(value)||(observedArrays.add(value),values.push(...value))}}return values.length>0?values.join("; "):void 0}const RESOLVED_GLOBAL_OPTIONS=Symbol("pm.resolvedGlobalOptions");function commandOptionsReader(command){return typeof command=="object"&&command!==null?command:{}}function resolveCommanderContract(contracts,target){return contracts.find(entry=>entry.target===target)??{target,keys:[target]}}function setResolvedGlobalOptions(command,globalOptions){command[RESOLVED_GLOBAL_OPTIONS]={...globalOptions}}function clearResolvedGlobalOptions(command){delete command[RESOLVED_GLOBAL_OPTIONS]}function readStringCommandOption(options,key){return typeof options[key]=="string"?options[key]:void 0}function getGlobalOptions(command){const commandPath=resolvePmHistoryOperation(getCommandPath(command)),resolved=command[RESOLVED_GLOBAL_OPTIONS];if(resolved)return{...resolved,...commandPath.length>0?{command:commandPath}:{}};const reader=commandOptionsReader(command),opts=typeof reader.optsWithGlobals=="function"?reader.optsWithGlobals():typeof reader.opts=="function"?reader.opts():{};return{json:opts.json===!0?!0:void 0,quiet:!!opts.quiet,noChangedFields:opts.changedFields===!1,...opts.fullChangedFields===!0?{fullChangedFields:!0}:{},idOnly:opts.idOnly===!0,...opts.lean===!0?{lean:!0}:{},...opts.tokenAccounting===!0?{tokenAccounting:!0}:{},outputInclude:readStringCommandOption(opts,"outputInclude"),outputLimit:readStringCommandOption(opts,"outputLimit"),outputBudget:readStringCommandOption(opts,"outputBudget"),outputSession:readStringCommandOption(opts,"outputSession"),outputCursor:readStringCommandOption(opts,"outputCursor"),...opts.outputRowContract===!0?{outputRowContract:!0}:{},...opts.outputFormat==="toon"||opts.outputFormat==="json"?{outputFormat:opts.outputFormat}:{},path:readStringCommandOption(opts,"pmPath")??readStringCommandOption(opts,"path"),noExtensions:opts.extensions===!1,noPager:!!opts.noPager,profile:!!opts.profile,...commandPath.length>0?{command:commandPath}:{},...typeof opts.author=="string"?{author:opts.author}:{}}}function getCommandPath(command){const parts=[];let current=command;for(;current?.parent;)parts.unshift(current.name()),current=current.parent;return parts.join(" ")}async function applyDefaultOutputFormat(globalOptions){if(globalOptions.json===!0)return globalOptions;const pmRoot=resolvePmRoot(process.cwd(),globalOptions.path);if(!await pathExists(getSettingsPath(pmRoot)))return globalOptions;const settings=await readSettings(pmRoot);return{...globalOptions,defaultOutputFormat:settings.output.default_format}}function collect(value,previous){const next=previous??[];return next.push(value),next}function optionTrue(options,key){return options[key]===!0?!0:void 0}function optionFalse(options,key){return options[key]===!1?!0:void 0}function readOptionString(options,key){return typeof options[key]=="string"?options[key]:void 0}function addHiddenOption(command,flags,description,repeatable=!1,repeatableParser=void 0){const option=new Option(flags,description).hideHelp();repeatable&&option.argParser(repeatableParser??collect),command.addOption(option)}function addHiddenOptions(command,aliases,repeatable){for(const[flags,description]of aliases)addHiddenOption(command,flags,description,repeatable)}function anyOptionTrue(options,keys){return keys.some(key=>options[key]===!0)?!0:void 0}function readStringOrFiniteNumberFromCommanderOptions(options,contract){const value=readFirstValueFromCommanderOptions(options,contract);return typeof value=="string"||typeof value=="number"&&Number.isFinite(value)?value:void 0}function copyUnknownOptions(target,source){for(const[key,value]of Object.entries(source))key==="__proto__"||key==="constructor"||key==="prototype"||Object.hasOwn(target,key)||(target[key]=value)}function formatHookWarnings(warnings){return warnings.join(",")}function normalizeCreateOptions(commandOptions,options={}){const readCreateString=target=>readFirstStringFromCommanderOptions(commandOptions,resolveCommanderContract(CREATE_COMMANDER_STRING_OPTION_CONTRACTS,target)),readCreateList=target=>readStringArrayFromCommanderOptions(commandOptions,resolveCommanderContract(CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,target)),type=readCreateString("type");if(options.requireType!==!1&&type===void 0)throw new PmCliError("Missing required option --type <value>. Why required: create resolves runtime schema fields/workflow from item type. Retry: add --type <built-in or configured custom type> (example: --type Task).",EXIT_CODE.USAGE);const normalized={title:readCreateString("title"),description:readCreateString("description"),type,template:readCreateString("template"),createMode:readCreateString("createMode"),schedulePreset:readCreateString("schedulePreset"),status:readCreateString("status"),closeReason:readCreateString("closeReason"),completedAt:readCreateString("completedAt"),priority:readCreateString("priority"),tags:readCreateString("tags"),addTags:readCreateList("addTags"),body:readCreateString("body"),deadline:readCreateString("deadline"),estimatedMinutes:readCreateString("estimatedMinutes"),acceptanceCriteria:readJoinedRepeatedOption(commandOptions,resolveCommanderContract(CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,"acceptanceCriteria")),definitionOfReady:readCreateString("definitionOfReady"),order:readCreateString("order"),rank:readCreateString("rank"),goal:readCreateString("goal"),objective:readCreateString("objective"),value:readCreateString("value"),impact:readCreateString("impact"),outcome:readCreateString("outcome"),whyNow:readCreateString("whyNow"),author:readCreateString("author"),message:readCreateString("message"),assignee:readCreateString("assignee"),parent:readCreateString("parent"),inheritFocus:commandOptions.inheritFocus,allowMissingParent:anyOptionTrue(commandOptions,["allowMissingParent","allow_missing_parent"])===!0,allowUnresolvedDeps:anyOptionTrue(commandOptions,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,allowDuplicate:optionTrue(commandOptions,"allowDuplicate")===!0,reviewer:readCreateString("reviewer"),risk:readCreateString("risk"),confidence:readCreateString("confidence"),sprint:readCreateString("sprint"),release:readCreateString("release"),blockedBy:readCreateString("blockedBy"),blockedReason:readCreateString("blockedReason"),unblockNote:readCreateString("unblockNote"),reporter:readCreateString("reporter"),severity:readCreateString("severity"),environment:readCreateString("environment"),reproSteps:readCreateString("reproSteps"),resolution:readCreateString("resolution"),expectedResult:readCreateString("expectedResult"),actualResult:readCreateString("actualResult"),affectedVersion:readCreateString("affectedVersion"),fixedVersion:readCreateString("fixedVersion"),component:readCreateString("component"),regression:commandOptions.regression===!0?"true":readCreateString("regression"),customerImpact:readCreateString("customerImpact"),dep:readCreateList("dep"),comment:readCreateList("comment"),note:readCreateList("note"),learning:readCreateList("learning"),file:readCreateList("file"),test:readCreateList("test"),doc:readCreateList("doc"),reminder:readCreateList("reminder"),event:readCreateList("event"),typeOption:readCreateList("typeOption"),field:readCreateList("field"),unset:readCreateList("unset"),clearDeps:optionTrue(commandOptions,"clearDeps"),clearComments:optionTrue(commandOptions,"clearComments"),clearNotes:optionTrue(commandOptions,"clearNotes"),clearLearnings:optionTrue(commandOptions,"clearLearnings"),clearFiles:optionTrue(commandOptions,"clearFiles"),clearTests:optionTrue(commandOptions,"clearTests"),clearDocs:optionTrue(commandOptions,"clearDocs"),clearReminders:optionTrue(commandOptions,"clearReminders"),clearEvents:optionTrue(commandOptions,"clearEvents"),clearTypeOptions:optionTrue(commandOptions,"clearTypeOptions")};return copyUnknownOptions(normalized,commandOptions),transferMutationStdinTokenPolicy(commandOptions,normalized)}function normalizeUpdateOptions(commandOptions){const readUpdateString=target=>readFirstStringFromCommanderOptions(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,target)),readUpdateList=target=>readStringArrayFromCommanderOptions(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,target)),normalized={title:readUpdateString("title"),description:readUpdateString("description"),body:readUpdateString("body"),status:readUpdateString("status"),closeReason:readUpdateString("closeReason"),priority:readUpdateString("priority"),type:readUpdateString("type"),tags:readUpdateString("tags"),addTags:readUpdateList("addTags"),removeTags:readUpdateList("removeTags"),deadline:readUpdateString("deadline"),estimatedMinutes:readUpdateString("estimatedMinutes"),acceptanceCriteria:readJoinedRepeatedOption(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,"acceptanceCriteria")),addAc:readUpdateList("addAc"),removeAc:readUpdateList("removeAc"),definitionOfReady:readUpdateString("definitionOfReady"),order:readUpdateString("order"),rank:readUpdateString("rank"),goal:readUpdateString("goal"),objective:readUpdateString("objective"),value:readUpdateString("value"),impact:readUpdateString("impact"),outcome:readUpdateString("outcome"),whyNow:readUpdateString("whyNow"),author:readUpdateString("author"),message:readUpdateString("message"),force:!!commandOptions.force,ownershipMetadataBypass:commandOptions.ownershipMetadataBypass===!0?!0:void 0,ownershipDependencyBypass:commandOptions.ownershipDependencyBypass===!0?!0:void 0,assignee:readUpdateString("assignee"),parent:readUpdateString("parent"),allowUnresolvedDeps:anyOptionTrue(commandOptions,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,reviewer:readUpdateString("reviewer"),risk:readUpdateString("risk"),confidence:readUpdateString("confidence"),sprint:readUpdateString("sprint"),release:readUpdateString("release"),blockedBy:readUpdateString("blockedBy"),blockedReason:readUpdateString("blockedReason"),unblockNote:readUpdateString("unblockNote"),reporter:readUpdateString("reporter"),severity:readUpdateString("severity"),environment:readUpdateString("environment"),reproSteps:readUpdateString("reproSteps"),resolution:readUpdateString("resolution"),expectedResult:readUpdateString("expectedResult"),actualResult:readUpdateString("actualResult"),affectedVersion:readUpdateString("affectedVersion"),fixedVersion:readUpdateString("fixedVersion"),component:readUpdateString("component"),regression:commandOptions.regression===!0?"true":readUpdateString("regression"),customerImpact:readUpdateString("customerImpact"),dep:readUpdateList("dep"),depRemove:readUpdateList("depRemove"),replaceDeps:optionTrue(commandOptions,"replaceDeps"),replaceTests:optionTrue(commandOptions,"replaceTests"),replaceFiles:optionTrue(commandOptions,"replaceFiles"),replaceDocs:optionTrue(commandOptions,"replaceDocs"),comment:readUpdateList("comment"),note:readUpdateList("note"),learning:readUpdateList("learning"),file:readUpdateList("file"),test:readUpdateList("test"),doc:readUpdateList("doc"),reminder:readUpdateList("reminder"),event:readUpdateList("event"),typeOption:readUpdateList("typeOption"),field:readUpdateList("field"),unset:readUpdateList("unset"),clearDeps:optionTrue(commandOptions,"clearDeps"),clearComments:optionTrue(commandOptions,"clearComments"),clearNotes:optionTrue(commandOptions,"clearNotes"),clearLearnings:optionTrue(commandOptions,"clearLearnings"),clearFiles:optionTrue(commandOptions,"clearFiles"),clearTests:optionTrue(commandOptions,"clearTests"),clearDocs:optionTrue(commandOptions,"clearDocs"),clearReminders:optionTrue(commandOptions,"clearReminders"),clearEvents:optionTrue(commandOptions,"clearEvents"),clearTypeOptions:optionTrue(commandOptions,"clearTypeOptions")};return copyUnknownOptions(normalized,commandOptions),transferMutationStdinTokenPolicy(commandOptions,normalized)}const UPDATE_MANY_CONTROL_OPTION_KEYS=new Set(["filterStatus","filterType","filterTag","filterPriority","filterDeadlineBefore","filterDeadlineAfter","filterUpdatedAfter","filterUpdatedBefore","filterCreatedAfter","filterCreatedBefore","filterAssignee","filterAssigneeFilter","filterAssignee_filter","filterParent","filterSprint","filterRelease","filterAcMissing","filterEstimatesMissing","filterEstimateMissing","filterResolutionMissing","filterMetadataMissing","filterReviewerMissing","filterRiskMissing","filterConfidenceMissing","filterSprintMissing","filterReleaseMissing","filterHasNotes","filterNoNotes","filterHasLearnings","filterNoLearnings","filterHasFiles","filterNoFiles","filterHasDocs","filterNoDocs","filterHasTests","filterNoTests","filterHasComments","filterNoComments","filterHasDeps","filterNoDeps","filterHasBody","filterEmptyBody","filterHasLinkedCommand","filterNoLinkedCommand","ids","limit","offset","dryRun","rollback","checkpoint"]);function extractUpdateManyMutationOptionSource(commandOptions){const mutationOptions={};for(const[key,value]of Object.entries(commandOptions))UPDATE_MANY_CONTROL_OPTION_KEYS.has(key)||(mutationOptions[key]=value);return mutationOptions}function readListOptionString(options,target){const contract=resolveCommanderContract(LIST_COMMANDER_STRING_OPTION_CONTRACTS,target),stringValue=readFirstStringFromCommanderOptions(options,contract);if(stringValue!==void 0)return stringValue;for(const key of contract.keys){const value=options[key];if(Array.isArray(value)){const strings=value.filter(entry=>typeof entry=="string");if(strings.length>0)return strings.join(",")}if(target==="ids"&&typeof value=="string")return value;if(typeof value=="number"&&Number.isFinite(value))return String(value)}}function readSelectionFilterOptionFields(options){const filterFilesMissing=optionTrue(options,"filterFilesMissing"),filterDocsMissing=optionTrue(options,"filterDocsMissing");return{filterReviewerMissing:optionTrue(options,"filterReviewerMissing"),filterRiskMissing:optionTrue(options,"filterRiskMissing"),filterConfidenceMissing:optionTrue(options,"filterConfidenceMissing"),filterSprintMissing:optionTrue(options,"filterSprintMissing"),filterReleaseMissing:optionTrue(options,"filterReleaseMissing"),hasNotes:optionTrue(options,"hasNotes"),hasLearnings:optionTrue(options,"hasLearnings"),hasFiles:optionTrue(options,"hasFiles"),hasDocs:optionTrue(options,"hasDocs"),hasTests:optionTrue(options,"hasTests"),hasComments:optionTrue(options,"hasComments"),hasDeps:optionTrue(options,"hasDeps"),hasBody:optionTrue(options,"hasBody"),hasLinkedCommand:optionTrue(options,"hasLinkedCommand"),noNotes:optionFalse(options,"notes"),noLearnings:optionFalse(options,"learnings"),noFiles:optionFalse(options,"files")??filterFilesMissing,filterFilesMissing,noDocs:optionFalse(options,"docs")??filterDocsMissing,filterDocsMissing,noTests:optionFalse(options,"tests"),noComments:optionFalse(options,"comments"),noDeps:optionFalse(options,"deps"),emptyBody:optionTrue(options,"emptyBody"),noLinkedCommand:optionFalse(options,"linkedCommand")}}function normalizeListOptions(options){const normalized={status:readListOptionString(options,"status"),type:readListOptionString(options,"type"),tag:readListOptionString(options,"tag"),priority:readListOptionString(options,"priority"),deadlineBefore:readListOptionString(options,"deadlineBefore"),deadlineAfter:readListOptionString(options,"deadlineAfter"),updatedAfter:readListOptionString(options,"updatedAfter"),updatedBefore:readListOptionString(options,"updatedBefore"),createdAfter:readListOptionString(options,"createdAfter"),createdBefore:readListOptionString(options,"createdBefore"),today:optionTrue(options,"today"),recent:optionTrue(options,"recent"),ids:readListOptionString(options,"ids"),assignee:readListOptionString(options,"assignee"),assigneeFilter:readListOptionString(options,"assigneeFilter"),parent:readListOptionString(options,"parent"),sprint:readListOptionString(options,"sprint"),release:readListOptionString(options,"release"),limit:readListOptionString(options,"limit"),offset:readListOptionString(options,"offset"),noTruncate:optionFalse(options,"truncate"),includeBody:optionTrue(options,"includeBody"),strictRead:optionTrue(options,"strictRead"),compact:optionTrue(options,"compact"),brief:optionTrue(options,"brief"),full:optionTrue(options,"full"),fields:readListOptionString(options,"fields"),sort:readListOptionString(options,"sort"),order:readListOptionString(options,"order"),tree:optionTrue(options,"tree"),treeDepth:readListOptionString(options,"treeDepth"),filterAcMissing:optionTrue(options,"filterAcMissing"),filterEstimatesMissing:anyOptionTrue(options,["filterEstimatesMissing","filterEstimateMissing"]),filterResolutionMissing:optionTrue(options,"filterResolutionMissing"),filterMetadataMissing:optionTrue(options,"filterMetadataMissing"),...readSelectionFilterOptionFields(options)};return copyUnknownOptions(normalized,options),normalized}function normalizeAggregateOptions(options){return{groupBy:typeof options.groupBy=="string"?options.groupBy:void 0,setMode:typeof options.setMode=="string"?options.setMode:void 0,limit:readListOptionString(options,"limit"),after:readListOptionString(options,"after"),count:options.count===!0?!0:void 0,completion:options.completion===!0?!0:void 0,sum:typeof options.sum=="string"?options.sum:void 0,avg:typeof options.avg=="string"?options.avg:void 0,includeUnparented:options.includeUnparented===!0||options.include_unparented===!0,status:typeof options.status=="string"?options.status:void 0,type:readListOptionString(options,"type"),tag:readListOptionString(options,"tag"),priority:readListOptionString(options,"priority"),deadlineBefore:readListOptionString(options,"deadlineBefore"),deadlineAfter:readListOptionString(options,"deadlineAfter"),assignee:readListOptionString(options,"assignee"),assigneeFilter:readListOptionString(options,"assigneeFilter"),parent:readListOptionString(options,"parent"),sprint:readListOptionString(options,"sprint"),release:readListOptionString(options,"release")}}function printListJsonStream(commandName,result,globalOptions){if(setActiveCommandResult(result),globalOptions.quiet)return;const warnings=Array.isArray(result.warnings)?result.warnings:[],metaPayload={type:"meta",command:commandName,count:result.count,now:result.now,filters:result.filters};if(warnings.length>0&&(metaPayload.warnings=warnings),!!writeStdout(`${JSON.stringify(metaPayload)}
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]="131c6816-18f9-5c50-ab4d-0ff380b513bc")}catch{}})();import{Option}from"commander";import{resolvePmHistoryOperation}from"./command-aliases.js";import{pathExists,refreshSearchArtifactsForMutation,shouldRunSearchRefreshInForeground,EXIT_CODE,PmCliError,printError,printResult,writeStdout,getSettingsPath,resolvePmRoot,transferMutationStdinTokenPolicy,readSettings,runActiveServiceOverride,setActiveCommandResult}from"../runtime-primitives.js";import{ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS,CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,CREATE_COMMANDER_STRING_OPTION_CONTRACTS,LIST_COMMANDER_STRING_OPTION_CONTRACTS,NEXT_COMMANDER_STRING_OPTION_CONTRACTS,SEARCH_COMMANDER_STRING_OPTION_CONTRACTS,UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,readFirstValueFromCommanderOptions,readFirstStringFromCommanderOptions,readStringArrayFromCommanderOptions}from"../cli-contracts.js";import{buildBackgroundTestCommandArgs,buildBackgroundTestAllCommandArgs}from"../test/command-args.js";async function applyActiveCommandResultService(command,args,options,global2,result){const pmRoot=resolvePmRoot(process.cwd(),global2.path),override=await runActiveServiceOverride("command_result",{command,args,options,global:global2,pm_root:pmRoot,result});return override.handled?override.result:result}function syncCommanderActionOptions(actionCommand,commandOptions){for(const[key,value]of Object.entries(commandOptions)){const source=actionCommand.getOptionValueSource(key),unchanged=source!==void 0&&Object.is(actionCommand.getOptionValue(key),value);actionCommand.setOptionValueWithSource(key,value,unchanged?source:"cli")}}function readJoinedRepeatedOption(options,contract){const values=[],observedArrays=new Set;for(const key of contract.keys){if(!Object.hasOwn(options,key))continue;const value=options[key];if(value!=null){if(typeof value=="string"){values.push(value);continue}if(!Array.isArray(value)||!value.every(entry=>typeof entry=="string"))return;observedArrays.has(value)||(observedArrays.add(value),values.push(...value))}}return values.length>0?values.join("; "):void 0}const RESOLVED_GLOBAL_OPTIONS=Symbol("pm.resolvedGlobalOptions");function commandOptionsReader(command){return typeof command=="object"&&command!==null?command:{}}function resolveCommanderContract(contracts,target){return contracts.find(entry=>entry.target===target)??{target,keys:[target]}}function setResolvedGlobalOptions(command,globalOptions){command[RESOLVED_GLOBAL_OPTIONS]={...globalOptions}}function clearResolvedGlobalOptions(command){delete command[RESOLVED_GLOBAL_OPTIONS]}function readStringCommandOption(options,key){return typeof options[key]=="string"?options[key]:void 0}function getGlobalOptions(command){const commandPath=resolvePmHistoryOperation(getCommandPath(command)),resolved=command[RESOLVED_GLOBAL_OPTIONS];if(resolved)return{...resolved,...commandPath.length>0?{command:commandPath}:{}};const reader=commandOptionsReader(command),opts=typeof reader.optsWithGlobals=="function"?reader.optsWithGlobals():typeof reader.opts=="function"?reader.opts():{};return{json:opts.json===!0?!0:void 0,quiet:!!opts.quiet,noChangedFields:opts.changedFields===!1,...opts.fullChangedFields===!0?{fullChangedFields:!0}:{},idOnly:opts.idOnly===!0,...opts.lean===!0?{lean:!0}:{},...opts.tokenAccounting===!0?{tokenAccounting:!0}:{},outputInclude:readStringCommandOption(opts,"outputInclude"),outputLimit:readStringCommandOption(opts,"outputLimit"),outputBudget:readStringCommandOption(opts,"outputBudget"),outputSession:readStringCommandOption(opts,"outputSession"),outputCursor:readStringCommandOption(opts,"outputCursor"),...opts.outputRowContract===!0?{outputRowContract:!0}:{},...opts.outputFormat==="toon"||opts.outputFormat==="json"?{outputFormat:opts.outputFormat}:{},path:readStringCommandOption(opts,"pmPath")??readStringCommandOption(opts,"path"),noExtensions:opts.extensions===!1,noPager:!!opts.noPager,profile:!!opts.profile,...commandPath.length>0?{command:commandPath}:{},...typeof opts.author=="string"?{author:opts.author}:{},...Array.isArray(opts.expectHash)?{expectHash:opts.expectHash.map(String)}:{}}}function getCommandPath(command){const parts=[];let current=command;for(;current?.parent;)parts.unshift(current.name()),current=current.parent;return parts.join(" ")}async function applyDefaultOutputFormat(globalOptions){if(globalOptions.json===!0)return globalOptions;const pmRoot=resolvePmRoot(process.cwd(),globalOptions.path);if(!await pathExists(getSettingsPath(pmRoot)))return globalOptions;const settings=await readSettings(pmRoot);return{...globalOptions,defaultOutputFormat:settings.output.default_format}}function collect(value,previous){const next=previous??[];return next.push(value),next}function optionTrue(options,key){return options[key]===!0?!0:void 0}function optionFalse(options,key){return options[key]===!1?!0:void 0}function readOptionString(options,key){return typeof options[key]=="string"?options[key]:void 0}function addHiddenOption(command,flags,description,repeatable=!1,repeatableParser=void 0){const option=new Option(flags,description).hideHelp();repeatable&&option.argParser(repeatableParser??collect),command.addOption(option)}function addHiddenOptions(command,aliases,repeatable){for(const[flags,description]of aliases)addHiddenOption(command,flags,description,repeatable)}function anyOptionTrue(options,keys){return keys.some(key=>options[key]===!0)?!0:void 0}function readStringOrFiniteNumberFromCommanderOptions(options,contract){const value=readFirstValueFromCommanderOptions(options,contract);return typeof value=="string"||typeof value=="number"&&Number.isFinite(value)?value:void 0}function copyUnknownOptions(target,source){for(const[key,value]of Object.entries(source))key==="__proto__"||key==="constructor"||key==="prototype"||Object.hasOwn(target,key)||(target[key]=value)}function formatHookWarnings(warnings){return warnings.join(",")}function normalizeCreateOptions(commandOptions,options={}){const readCreateString=target=>readFirstStringFromCommanderOptions(commandOptions,resolveCommanderContract(CREATE_COMMANDER_STRING_OPTION_CONTRACTS,target)),readCreateList=target=>readStringArrayFromCommanderOptions(commandOptions,resolveCommanderContract(CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,target)),type=readCreateString("type");if(options.requireType!==!1&&type===void 0)throw new PmCliError("Missing required option --type <value>. Why required: create resolves runtime schema fields/workflow from item type. Retry: add --type <built-in or configured custom type> (example: --type Task).",EXIT_CODE.USAGE);const normalized={title:readCreateString("title"),description:readCreateString("description"),type,template:readCreateString("template"),createMode:readCreateString("createMode"),schedulePreset:readCreateString("schedulePreset"),status:readCreateString("status"),closeReason:readCreateString("closeReason"),completedAt:readCreateString("completedAt"),priority:readCreateString("priority"),tags:readCreateString("tags"),addTags:readCreateList("addTags"),body:readCreateString("body"),deadline:readCreateString("deadline"),estimatedMinutes:readCreateString("estimatedMinutes"),acceptanceCriteria:readJoinedRepeatedOption(commandOptions,resolveCommanderContract(CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,"acceptanceCriteria")),definitionOfReady:readCreateString("definitionOfReady"),order:readCreateString("order"),rank:readCreateString("rank"),goal:readCreateString("goal"),objective:readCreateString("objective"),value:readCreateString("value"),impact:readCreateString("impact"),outcome:readCreateString("outcome"),whyNow:readCreateString("whyNow"),author:readCreateString("author"),message:readCreateString("message"),assignee:readCreateString("assignee"),parent:readCreateString("parent"),inheritFocus:commandOptions.inheritFocus,allowMissingParent:anyOptionTrue(commandOptions,["allowMissingParent","allow_missing_parent"])===!0,allowUnresolvedDeps:anyOptionTrue(commandOptions,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,allowDuplicate:optionTrue(commandOptions,"allowDuplicate")===!0,reviewer:readCreateString("reviewer"),risk:readCreateString("risk"),confidence:readCreateString("confidence"),sprint:readCreateString("sprint"),release:readCreateString("release"),blockedBy:readCreateString("blockedBy"),blockedReason:readCreateString("blockedReason"),unblockNote:readCreateString("unblockNote"),reporter:readCreateString("reporter"),severity:readCreateString("severity"),environment:readCreateString("environment"),reproSteps:readCreateString("reproSteps"),resolution:readCreateString("resolution"),expectedResult:readCreateString("expectedResult"),actualResult:readCreateString("actualResult"),affectedVersion:readCreateString("affectedVersion"),fixedVersion:readCreateString("fixedVersion"),component:readCreateString("component"),regression:commandOptions.regression===!0?"true":readCreateString("regression"),customerImpact:readCreateString("customerImpact"),dep:readCreateList("dep"),comment:readCreateList("comment"),note:readCreateList("note"),learning:readCreateList("learning"),file:readCreateList("file"),test:readCreateList("test"),doc:readCreateList("doc"),reminder:readCreateList("reminder"),event:readCreateList("event"),typeOption:readCreateList("typeOption"),field:readCreateList("field"),unset:readCreateList("unset"),clearDeps:optionTrue(commandOptions,"clearDeps"),clearComments:optionTrue(commandOptions,"clearComments"),clearNotes:optionTrue(commandOptions,"clearNotes"),clearLearnings:optionTrue(commandOptions,"clearLearnings"),clearFiles:optionTrue(commandOptions,"clearFiles"),clearTests:optionTrue(commandOptions,"clearTests"),clearDocs:optionTrue(commandOptions,"clearDocs"),clearReminders:optionTrue(commandOptions,"clearReminders"),clearEvents:optionTrue(commandOptions,"clearEvents"),clearTypeOptions:optionTrue(commandOptions,"clearTypeOptions")};return copyUnknownOptions(normalized,commandOptions),transferMutationStdinTokenPolicy(commandOptions,normalized)}function normalizeUpdateOptions(commandOptions){const readUpdateString=target=>readFirstStringFromCommanderOptions(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,target)),readUpdateList=target=>readStringArrayFromCommanderOptions(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,target)),normalized={title:readUpdateString("title"),description:readUpdateString("description"),body:readUpdateString("body"),status:readUpdateString("status"),closeReason:readUpdateString("closeReason"),priority:readUpdateString("priority"),type:readUpdateString("type"),tags:readUpdateString("tags"),addTags:readUpdateList("addTags"),removeTags:readUpdateList("removeTags"),deadline:readUpdateString("deadline"),estimatedMinutes:readUpdateString("estimatedMinutes"),acceptanceCriteria:readJoinedRepeatedOption(commandOptions,resolveCommanderContract(UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,"acceptanceCriteria")),addAc:readUpdateList("addAc"),removeAc:readUpdateList("removeAc"),definitionOfReady:readUpdateString("definitionOfReady"),order:readUpdateString("order"),rank:readUpdateString("rank"),goal:readUpdateString("goal"),objective:readUpdateString("objective"),value:readUpdateString("value"),impact:readUpdateString("impact"),outcome:readUpdateString("outcome"),whyNow:readUpdateString("whyNow"),author:readUpdateString("author"),message:readUpdateString("message"),force:!!commandOptions.force,ownershipMetadataBypass:commandOptions.ownershipMetadataBypass===!0?!0:void 0,ownershipDependencyBypass:commandOptions.ownershipDependencyBypass===!0?!0:void 0,assignee:readUpdateString("assignee"),parent:readUpdateString("parent"),allowUnresolvedDeps:anyOptionTrue(commandOptions,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,reviewer:readUpdateString("reviewer"),risk:readUpdateString("risk"),confidence:readUpdateString("confidence"),sprint:readUpdateString("sprint"),release:readUpdateString("release"),blockedBy:readUpdateString("blockedBy"),blockedReason:readUpdateString("blockedReason"),unblockNote:readUpdateString("unblockNote"),reporter:readUpdateString("reporter"),severity:readUpdateString("severity"),environment:readUpdateString("environment"),reproSteps:readUpdateString("reproSteps"),resolution:readUpdateString("resolution"),expectedResult:readUpdateString("expectedResult"),actualResult:readUpdateString("actualResult"),affectedVersion:readUpdateString("affectedVersion"),fixedVersion:readUpdateString("fixedVersion"),component:readUpdateString("component"),regression:commandOptions.regression===!0?"true":readUpdateString("regression"),customerImpact:readUpdateString("customerImpact"),dep:readUpdateList("dep"),depRemove:readUpdateList("depRemove"),replaceDeps:optionTrue(commandOptions,"replaceDeps"),replaceTests:optionTrue(commandOptions,"replaceTests"),replaceFiles:optionTrue(commandOptions,"replaceFiles"),replaceDocs:optionTrue(commandOptions,"replaceDocs"),comment:readUpdateList("comment"),note:readUpdateList("note"),learning:readUpdateList("learning"),file:readUpdateList("file"),test:readUpdateList("test"),doc:readUpdateList("doc"),reminder:readUpdateList("reminder"),event:readUpdateList("event"),typeOption:readUpdateList("typeOption"),field:readUpdateList("field"),unset:readUpdateList("unset"),clearDeps:optionTrue(commandOptions,"clearDeps"),clearComments:optionTrue(commandOptions,"clearComments"),clearNotes:optionTrue(commandOptions,"clearNotes"),clearLearnings:optionTrue(commandOptions,"clearLearnings"),clearFiles:optionTrue(commandOptions,"clearFiles"),clearTests:optionTrue(commandOptions,"clearTests"),clearDocs:optionTrue(commandOptions,"clearDocs"),clearReminders:optionTrue(commandOptions,"clearReminders"),clearEvents:optionTrue(commandOptions,"clearEvents"),clearTypeOptions:optionTrue(commandOptions,"clearTypeOptions")};return copyUnknownOptions(normalized,commandOptions),transferMutationStdinTokenPolicy(commandOptions,normalized)}const UPDATE_MANY_CONTROL_OPTION_KEYS=new Set(["filterStatus","filterType","filterTag","filterPriority","filterDeadlineBefore","filterDeadlineAfter","filterUpdatedAfter","filterUpdatedBefore","filterCreatedAfter","filterCreatedBefore","filterAssignee","filterAssigneeFilter","filterAssignee_filter","filterParent","filterSprint","filterRelease","filterAcMissing","filterEstimatesMissing","filterEstimateMissing","filterResolutionMissing","filterMetadataMissing","filterReviewerMissing","filterRiskMissing","filterConfidenceMissing","filterSprintMissing","filterReleaseMissing","filterHasNotes","filterNoNotes","filterHasLearnings","filterNoLearnings","filterHasFiles","filterNoFiles","filterHasDocs","filterNoDocs","filterHasTests","filterNoTests","filterHasComments","filterNoComments","filterHasDeps","filterNoDeps","filterHasBody","filterEmptyBody","filterHasLinkedCommand","filterNoLinkedCommand","ids","limit","offset","dryRun","rollback","checkpoint"]);function extractUpdateManyMutationOptionSource(commandOptions){const mutationOptions={};for(const[key,value]of Object.entries(commandOptions))UPDATE_MANY_CONTROL_OPTION_KEYS.has(key)||(mutationOptions[key]=value);return mutationOptions}function readListOptionString(options,target){const contract=resolveCommanderContract(LIST_COMMANDER_STRING_OPTION_CONTRACTS,target),stringValue=readFirstStringFromCommanderOptions(options,contract);if(stringValue!==void 0)return stringValue;for(const key of contract.keys){const value=options[key];if(Array.isArray(value)){const strings=value.filter(entry=>typeof entry=="string");if(strings.length>0)return strings.join(",")}if(target==="ids"&&typeof value=="string")return value;if(typeof value=="number"&&Number.isFinite(value))return String(value)}}function readSelectionFilterOptionFields(options){const filterFilesMissing=optionTrue(options,"filterFilesMissing"),filterDocsMissing=optionTrue(options,"filterDocsMissing");return{filterReviewerMissing:optionTrue(options,"filterReviewerMissing"),filterRiskMissing:optionTrue(options,"filterRiskMissing"),filterConfidenceMissing:optionTrue(options,"filterConfidenceMissing"),filterSprintMissing:optionTrue(options,"filterSprintMissing"),filterReleaseMissing:optionTrue(options,"filterReleaseMissing"),hasNotes:optionTrue(options,"hasNotes"),hasLearnings:optionTrue(options,"hasLearnings"),hasFiles:optionTrue(options,"hasFiles"),hasDocs:optionTrue(options,"hasDocs"),hasTests:optionTrue(options,"hasTests"),hasComments:optionTrue(options,"hasComments"),hasDeps:optionTrue(options,"hasDeps"),hasBody:optionTrue(options,"hasBody"),hasLinkedCommand:optionTrue(options,"hasLinkedCommand"),noNotes:optionFalse(options,"notes"),noLearnings:optionFalse(options,"learnings"),noFiles:optionFalse(options,"files")??filterFilesMissing,filterFilesMissing,noDocs:optionFalse(options,"docs")??filterDocsMissing,filterDocsMissing,noTests:optionFalse(options,"tests"),noComments:optionFalse(options,"comments"),noDeps:optionFalse(options,"deps"),emptyBody:optionTrue(options,"emptyBody"),noLinkedCommand:optionFalse(options,"linkedCommand")}}function normalizeListOptions(options){const normalized={status:readListOptionString(options,"status"),type:readListOptionString(options,"type"),tag:readListOptionString(options,"tag"),priority:readListOptionString(options,"priority"),deadlineBefore:readListOptionString(options,"deadlineBefore"),deadlineAfter:readListOptionString(options,"deadlineAfter"),updatedAfter:readListOptionString(options,"updatedAfter"),updatedBefore:readListOptionString(options,"updatedBefore"),createdAfter:readListOptionString(options,"createdAfter"),createdBefore:readListOptionString(options,"createdBefore"),today:optionTrue(options,"today"),recent:optionTrue(options,"recent"),ids:readListOptionString(options,"ids"),assignee:readListOptionString(options,"assignee"),assigneeFilter:readListOptionString(options,"assigneeFilter"),parent:readListOptionString(options,"parent"),sprint:readListOptionString(options,"sprint"),release:readListOptionString(options,"release"),limit:readListOptionString(options,"limit"),offset:readListOptionString(options,"offset"),noTruncate:optionFalse(options,"truncate"),includeBody:optionTrue(options,"includeBody"),strictRead:optionTrue(options,"strictRead"),compact:optionTrue(options,"compact"),brief:optionTrue(options,"brief"),full:optionTrue(options,"full"),fields:readListOptionString(options,"fields"),sort:readListOptionString(options,"sort"),order:readListOptionString(options,"order"),tree:optionTrue(options,"tree"),treeDepth:readListOptionString(options,"treeDepth"),filterAcMissing:optionTrue(options,"filterAcMissing"),filterEstimatesMissing:anyOptionTrue(options,["filterEstimatesMissing","filterEstimateMissing"]),filterResolutionMissing:optionTrue(options,"filterResolutionMissing"),filterMetadataMissing:optionTrue(options,"filterMetadataMissing"),...readSelectionFilterOptionFields(options)};return copyUnknownOptions(normalized,options),normalized}function normalizeAggregateOptions(options){return{groupBy:typeof options.groupBy=="string"?options.groupBy:void 0,setMode:typeof options.setMode=="string"?options.setMode:void 0,limit:readListOptionString(options,"limit"),after:readListOptionString(options,"after"),count:options.count===!0?!0:void 0,completion:options.completion===!0?!0:void 0,sum:typeof options.sum=="string"?options.sum:void 0,avg:typeof options.avg=="string"?options.avg:void 0,includeUnparented:options.includeUnparented===!0||options.include_unparented===!0,status:typeof options.status=="string"?options.status:void 0,type:readListOptionString(options,"type"),tag:readListOptionString(options,"tag"),priority:readListOptionString(options,"priority"),deadlineBefore:readListOptionString(options,"deadlineBefore"),deadlineAfter:readListOptionString(options,"deadlineAfter"),assignee:readListOptionString(options,"assignee"),assigneeFilter:readListOptionString(options,"assigneeFilter"),parent:readListOptionString(options,"parent"),sprint:readListOptionString(options,"sprint"),release:readListOptionString(options,"release")}}function printListJsonStream(commandName,result,globalOptions){if(setActiveCommandResult(result),globalOptions.quiet)return;const warnings=Array.isArray(result.warnings)?result.warnings:[],metaPayload={type:"meta",command:commandName,count:result.count,now:result.now,filters:result.filters};if(warnings.length>0&&(metaPayload.warnings=warnings),!!writeStdout(`${JSON.stringify(metaPayload)}
2
2
  `)){for(const item of result.items)if(!writeStdout(`${JSON.stringify({type:"item",command:commandName,item})}
3
3
  `))return;writeStdout(`${JSON.stringify({type:"end",command:commandName,count:result.count})}
4
4
  `)}}function printActivityJsonStream(result,options,globalOptions){if(setActiveCommandResult(result),globalOptions.quiet)return;const metaPayload={type:"meta",command:"activity",count:result.count,filters:{id:options.id??null,op:options.op??null,author:options.author??null,from:options.from??null,to:options.to??null,limit:options.limit??null}};if(!writeStdout(`${JSON.stringify(metaPayload)}