@unbrained/pm-cli 2026.10.12 → 2026.10.13

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 (708) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +27 -0
  3. package/dist/cli/after-command-context-usage.d.ts +8 -8
  4. package/dist/cli/bundle-integrity.d.ts +23 -23
  5. package/dist/cli/commander-usage.d.ts +26 -26
  6. package/dist/cli/commander-usage.js +2 -2
  7. package/dist/cli/error-guidance.d.ts +158 -163
  8. package/dist/cli/error-guidance.js +2 -2
  9. package/dist/cli/extension-command-help.d.ts +68 -68
  10. package/dist/cli/extension-command-options.d.ts +20 -20
  11. package/dist/cli/extension-recovery.d.ts +20 -20
  12. package/dist/cli/help-content.d.ts +16 -16
  13. package/dist/cli/help-content.js +2 -2
  14. package/dist/cli/help-json-payload.d.ts +40 -40
  15. package/dist/cli/invocation-profile.d.ts +8 -8
  16. package/dist/cli/main.d.ts +165 -165
  17. package/dist/cli/main.js +1 -1
  18. package/dist/cli/migration-gates.d.ts +20 -20
  19. package/dist/cli/register-list-query.d.ts +4 -4
  20. package/dist/cli/register-mutation-options.d.ts +2 -2
  21. package/dist/cli/register-operations.d.ts +66 -66
  22. package/dist/cli/register-setup.d.ts +1 -1
  23. package/dist/cli/register-structured-mutation.d.ts +3 -3
  24. package/dist/cli/register-structured-mutation.js +1 -1
  25. package/dist/cli/runtime/activation.d.ts +3 -3
  26. package/dist/cli/runtime/invocation-options.js +1 -1
  27. package/dist/cli/runtime/selection.d.ts +6 -6
  28. package/dist/cli/runtime-compatibility-boundary.d.ts +12 -12
  29. package/dist/cli-bundle/bundle-manifest.json +1 -1
  30. package/dist/cli-bundle/chunks/{chunk-MHPU2LDF.js → chunk-AM2XOZKE.js} +2 -2
  31. package/dist/cli-bundle/chunks/{chunk-UABZJXIS.js → chunk-APWPC4ZZ.js} +2 -2
  32. package/dist/cli-bundle/chunks/chunk-DJDRHJBP.js +234 -0
  33. package/dist/cli-bundle/chunks/{chunk-B465HPS5.js → chunk-DUK5DHI6.js} +2 -2
  34. package/dist/cli-bundle/chunks/chunk-HXHFKXLV.js +2 -0
  35. package/dist/cli-bundle/chunks/chunk-IFPJDJUM.js +20 -0
  36. package/dist/cli-bundle/chunks/{chunk-QM3M7GB5.js → chunk-LBDWFWPK.js} +2 -2
  37. package/dist/cli-bundle/chunks/{chunk-X2I2EEAS.js → chunk-N5EXRYCZ.js} +2 -2
  38. package/dist/cli-bundle/chunks/chunk-PSNS537F.js +30 -0
  39. package/dist/cli-bundle/chunks/{chunk-3LQTJN4J.js → chunk-RL45OYTL.js} +2 -2
  40. package/dist/cli-bundle/chunks/{chunk-DT3KUUKY.js → chunk-UBTYYZIE.js} +49 -49
  41. package/dist/cli-bundle/chunks/chunk-WYZGZV2M.js +2 -0
  42. package/dist/cli-bundle/chunks/{chunk-GUVKPOY6.js → chunk-YH6H3UVE.js} +10 -10
  43. package/dist/cli-bundle/chunks/{register-list-query-OR33UEML.js → register-list-query-BJ742QOR.js} +2 -2
  44. package/dist/cli-bundle/chunks/{register-mutation-R34EJ3NH.js → register-mutation-GGGBRIH2.js} +3 -3
  45. package/dist/cli-bundle/chunks/{register-operations-UHSMEHSF.js → register-operations-E6HXYHNM.js} +2 -2
  46. package/dist/cli-bundle/chunks/{register-setup-5E3PT22L.js → register-setup-4ZVTVEPY.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/{chunk-TS46OZD5.js → chunk-3LQEBXU5.js} +12 -12
  48. package/dist/cli-bundle/focused-chunks/{chunk-AJG3DBXR.js → chunk-6BTUISKV.js} +2 -2
  49. package/dist/cli-bundle/focused-chunks/chunk-73UNAJHD.js +2 -0
  50. package/dist/cli-bundle/focused-chunks/{chunk-RNAWRTQV.js → chunk-DVK7VKZL.js} +2 -2
  51. package/dist/cli-bundle/focused-chunks/{chunk-7QIZB2F2.js → chunk-F5J3ATMV.js} +14 -14
  52. package/dist/cli-bundle/focused-chunks/chunk-IIKFTJVC.js +2 -0
  53. package/dist/cli-bundle/focused-chunks/chunk-IOTNG6CN.js +2 -0
  54. package/dist/cli-bundle/focused-chunks/{chunk-Z4T3637Y.js → chunk-KGFRQ34R.js} +2 -2
  55. package/dist/cli-bundle/focused-chunks/chunk-NNW5BS5L.js +3 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-VBTLX5SN.js → chunk-QMNAY25P.js} +62 -62
  57. package/dist/cli-bundle/focused-chunks/{chunk-CYEZLKLL.js → chunk-R23T7GFZ.js} +2 -2
  58. package/dist/cli-bundle/focused-chunks/chunk-RAA7SVRA.js +8 -0
  59. package/dist/cli-bundle/focused-chunks/{chunk-SV6YYZLR.js → chunk-RU6GCFN3.js} +2 -2
  60. package/dist/cli-bundle/focused-chunks/{chunk-YCOJLIDI.js → chunk-S6ITXQ5T.js} +4 -4
  61. package/dist/cli-bundle/focused-chunks/{chunk-OGOLIS5R.js → chunk-SOB7X4FJ.js} +2 -2
  62. package/dist/cli-bundle/focused-chunks/chunk-UPJA45K7.js +26 -0
  63. package/dist/cli-bundle/main.js +20 -20
  64. package/dist/cli-bundle/sdk-authoring.js +1 -1
  65. package/dist/cli-bundle/sdk-contracts.js +2 -2
  66. package/dist/cli-bundle/sdk-core.js +23 -23
  67. package/dist/cli-bundle/sdk-governance.js +1 -1
  68. package/dist/cli-bundle/sdk-graph.js +1 -1
  69. package/dist/cli-bundle/sdk-merge.js +51 -51
  70. package/dist/cli-bundle/sdk-query.js +1 -1
  71. package/dist/cli-bundle/sdk-runtime.js +1 -1
  72. package/dist/cli-bundle/sdk-testing.js +1 -1
  73. package/dist/cli-bundle/sdk.js +8 -8
  74. package/dist/cli.d.ts +4 -4
  75. package/dist/core/checkpoint/checkpoint-gc.d.ts +32 -32
  76. package/dist/core/checkpoint/mutation-checkpoint.d.ts +34 -34
  77. package/dist/core/config/nested-settings.d.ts +26 -26
  78. package/dist/core/config/positional-value.d.ts +16 -16
  79. package/dist/core/diagnostics/remediation.d.ts +6 -6
  80. package/dist/core/diagnostics/remediation.js +1 -1
  81. package/dist/core/extensions/activation-summary-markdown.d.ts +6 -6
  82. package/dist/core/extensions/activation-summary.d.ts +54 -54
  83. package/dist/core/extensions/activation-transaction.d.ts +7 -7
  84. package/dist/core/extensions/capability-usage.d.ts +26 -26
  85. package/dist/core/extensions/command-hook-context.d.ts +26 -26
  86. package/dist/core/extensions/contribution-inventory.d.ts +21 -21
  87. package/dist/core/extensions/extension-candidate.d.ts +14 -14
  88. package/dist/core/extensions/extension-capability-aliases.d.ts +2 -2
  89. package/dist/core/extensions/extension-policy.d.ts +80 -80
  90. package/dist/core/extensions/extension-types.d.ts +1294 -1285
  91. package/dist/core/extensions/extension-types.js +1 -1
  92. package/dist/core/extensions/flag-definition-validation.d.ts +4 -4
  93. package/dist/core/extensions/item-fields.d.ts +3 -2
  94. package/dist/core/extensions/item-fields.js +1 -1
  95. package/dist/core/extensions/loader.d.ts +36 -36
  96. package/dist/core/extensions/loader.js +1 -1
  97. package/dist/core/extensions/manifest-schema.d.ts +16 -16
  98. package/dist/core/extensions/module-graph-snapshot.d.ts +8 -8
  99. package/dist/core/extensions/read-output-contract.d.ts +5 -0
  100. package/dist/core/extensions/read-output-contract.js +2 -0
  101. package/dist/core/extensions/registration-values.d.ts +1 -1
  102. package/dist/core/extensions/reserved-host-flags.d.ts +6 -6
  103. package/dist/core/extensions/version-compat.d.ts +10 -10
  104. package/dist/core/fs/fs-utils.d.ts +1 -1
  105. package/dist/core/fs/host-environment-errors.d.ts +14 -14
  106. package/dist/core/governance/content-fields.d.ts +31 -31
  107. package/dist/core/governance/issue-codes.d.ts +27 -27
  108. package/dist/core/governance/metadata-coverage.d.ts +91 -91
  109. package/dist/core/history/drift-scan.d.ts +26 -26
  110. package/dist/core/history/event-index.d.ts +41 -41
  111. package/dist/core/history/history-compact-bulk.d.ts +22 -22
  112. package/dist/core/history/history-diff.d.ts +22 -22
  113. package/dist/core/history/history-rewrite.d.ts +66 -66
  114. package/dist/core/history/history-storage-stats.d.ts +31 -31
  115. package/dist/core/history/history-stream-policy.d.ts +12 -12
  116. package/dist/core/history/history.d.ts +22 -22
  117. package/dist/core/history/identity.d.ts +6 -6
  118. package/dist/core/history/operation-contract.d.ts +9 -9
  119. package/dist/core/history/projection.d.ts +15 -15
  120. package/dist/core/history/read.d.ts +4 -4
  121. package/dist/core/history/replay.d.ts +51 -49
  122. package/dist/core/history/replay.js +1 -1
  123. package/dist/core/history/workspace-history.d.ts +101 -101
  124. package/dist/core/io/bulk-ids-input.d.ts +4 -4
  125. package/dist/core/item/actionability.d.ts +40 -40
  126. package/dist/core/item/id.d.ts +3 -3
  127. package/dist/core/item/item-format-version.d.ts +8 -8
  128. package/dist/core/item/item-format.d.ts +35 -35
  129. package/dist/core/item/item-type-definition.d.ts +2 -2
  130. package/dist/core/item/parent-reference-policy.d.ts +1 -1
  131. package/dist/core/item/parse.d.ts +12 -12
  132. package/dist/core/item/sprint-release-format.d.ts +2 -2
  133. package/dist/core/item/status-filter.d.ts +4 -4
  134. package/dist/core/item/toon-decode.d.ts +9 -9
  135. package/dist/core/item/type-registry.d.ts +40 -40
  136. package/dist/core/lock/lock-gc.d.ts +50 -50
  137. package/dist/core/lock/lock.d.ts +37 -37
  138. package/dist/core/output/mutation-projection.d.ts +6 -6
  139. package/dist/core/output/output-control.d.ts +4 -4
  140. package/dist/core/output/output.d.ts +40 -40
  141. package/dist/core/output/query-summary.d.ts +5 -5
  142. package/dist/core/packages/manifest.d.ts +50 -50
  143. package/dist/core/policy/workflow-policy-schema.d.ts +306 -306
  144. package/dist/core/policy/workflow-policy-store.d.ts +7 -7
  145. package/dist/core/policy/workflow-policy.d.ts +81 -81
  146. package/dist/core/profile/profile-describe.d.ts +40 -40
  147. package/dist/core/profile/profile-lint.d.ts +20 -20
  148. package/dist/core/profile/profile-plan.d.ts +84 -84
  149. package/dist/core/profile/profile-presets.d.ts +52 -52
  150. package/dist/core/reproducibility/context.d.ts +6 -6
  151. package/dist/core/schema/fields-file.d.ts +54 -54
  152. package/dist/core/schema/item-types-file.d.ts +36 -36
  153. package/dist/core/schema/runtime-field-values.d.ts +2 -2
  154. package/dist/core/schema/runtime-schema.d.ts +86 -86
  155. package/dist/core/schema/status-defs-file.d.ts +36 -36
  156. package/dist/core/schema/type-inference.d.ts +14 -14
  157. package/dist/core/schema/type-workflows.d.ts +22 -22
  158. package/dist/core/search/background-refresh.d.ts +9 -9
  159. package/dist/core/search/bm25.d.ts +19 -19
  160. package/dist/core/search/cache.d.ts +35 -35
  161. package/dist/core/search/corpus.d.ts +12 -12
  162. package/dist/core/search/embedding-batches.d.ts +48 -48
  163. package/dist/core/search/eval.d.ts +49 -49
  164. package/dist/core/search/http-client.d.ts +38 -38
  165. package/dist/core/search/providers.d.ts +41 -41
  166. package/dist/core/search/relevance.d.ts +20 -20
  167. package/dist/core/search/semantic-defaults.d.ts +8 -8
  168. package/dist/core/search/staleness.d.ts +4 -4
  169. package/dist/core/search/vector-stores.d.ts +78 -78
  170. package/dist/core/search/vectorization-metadata.d.ts +6 -6
  171. package/dist/core/sentry/helpers.d.ts +15 -15
  172. package/dist/core/sentry/instrument.d.ts +40 -40
  173. package/dist/core/session/session-state.d.ts +32 -32
  174. package/dist/core/shared/agent-session-context.d.ts +14 -14
  175. package/dist/core/shared/author.d.ts +128 -128
  176. package/dist/core/shared/command-types.d.ts +40 -40
  177. package/dist/core/shared/conflict-markers.d.ts +6 -6
  178. package/dist/core/shared/constants.d.ts +13 -13
  179. package/dist/core/shared/errors.d.ts +194 -183
  180. package/dist/core/shared/errors.js +1 -1
  181. package/dist/core/shared/secret-rules.d.ts +97 -97
  182. package/dist/core/shared/serial-queue.d.ts +8 -8
  183. package/dist/core/shared/split-comma-list.d.ts +6 -6
  184. package/dist/core/shared/time.d.ts +23 -23
  185. package/dist/core/store/item-format-migration.d.ts +10 -10
  186. package/dist/core/store/item-metadata-cache.d.ts +38 -38
  187. package/dist/core/store/item-metadata-query-index.d.ts +79 -79
  188. package/dist/core/store/item-metadata-read-work.d.ts +6 -6
  189. package/dist/core/store/item-store.d.ts +110 -110
  190. package/dist/core/store/paths.d.ts +2 -2
  191. package/dist/core/store/settings-read-cache.d.ts +12 -12
  192. package/dist/core/store/settings-validator.d.ts +165 -165
  193. package/dist/core/store/settings.d.ts +59 -59
  194. package/dist/core/telemetry/observability.d.ts +17 -17
  195. package/dist/core/telemetry/policy.d.ts +3 -3
  196. package/dist/core/telemetry/runtime.d.ts +241 -241
  197. package/dist/core/test/background-runs.d.ts +185 -185
  198. package/dist/core/test/item-test-run-tracking.d.ts +6 -6
  199. package/dist/core/test/run-selectors.d.ts +18 -18
  200. package/dist/core/validate/fix-planning.d.ts +50 -50
  201. package/dist/core/validate/missing-by-type.d.ts +4 -4
  202. package/dist/core/validate/missing-link-owners.d.ts +30 -30
  203. package/dist/core/validate/stale-file-classification.d.ts +8 -8
  204. package/dist/mcp/http-server.d.ts +28 -28
  205. package/dist/mcp/legacy-adapter.d.ts +33 -33
  206. package/dist/mcp/runtime-capabilities.d.ts +16 -16
  207. package/dist/mcp/server.d.ts +50 -50
  208. package/dist/mcp/tool-definitions.d.ts +36 -36
  209. package/dist/sdk/agent/closed-domain-contracts.d.ts +18 -18
  210. package/dist/sdk/agent/command-recovery.d.ts +4 -0
  211. package/dist/sdk/agent/command-recovery.js +1 -1
  212. package/dist/sdk/agent/identity-config.d.ts +32 -32
  213. package/dist/sdk/agent/item-addressing.d.ts +8 -8
  214. package/dist/sdk/agent/refusal-closure-census.d.ts +34 -34
  215. package/dist/sdk/agent/refusal-closure.d.ts +42 -42
  216. package/dist/sdk/agent/refusal-corpus-contracts.d.ts +46 -46
  217. package/dist/sdk/agent/refusal-reachability.d.ts +112 -112
  218. package/dist/sdk/agent/subcommand-recovery.d.ts +25 -25
  219. package/dist/sdk/agent/task-transcript-contracts.d.ts +30 -30
  220. package/dist/sdk/agent/tracker-preflight-contracts.d.ts +38 -38
  221. package/dist/sdk/agent-capability-contracts.d.ts +37 -37
  222. package/dist/sdk/annotations.d.ts +106 -106
  223. package/dist/sdk/author-attribution.d.ts +76 -76
  224. package/dist/sdk/authoring.d.ts +1 -1
  225. package/dist/sdk/authoring.js +1 -1
  226. package/dist/sdk/cli-bootstrap.d.ts +70 -70
  227. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +63 -63
  228. package/dist/sdk/cli-contracts/command-aliases.d.ts +14 -14
  229. package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +70 -70
  230. package/dist/sdk/cli-contracts/commander-types.d.ts +17 -17
  231. package/dist/sdk/cli-contracts/completeness.d.ts +26 -26
  232. package/dist/sdk/cli-contracts/enum-contracts.d.ts +5 -5
  233. package/dist/sdk/cli-contracts/flag-contracts.d.ts +32 -32
  234. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  235. package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +42 -42
  236. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +84 -84
  237. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  238. package/dist/sdk/cli-contracts/registration-helpers.d.ts +36 -36
  239. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +290 -294
  240. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  241. package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +793 -793
  242. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +391 -391
  243. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +6 -6
  244. package/dist/sdk/cli-contracts/tool-schema.d.ts +54 -54
  245. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  246. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +24 -24
  247. package/dist/sdk/comments.d.ts +44 -44
  248. package/dist/sdk/compile-cache.d.ts +4 -4
  249. package/dist/sdk/completion/shared.d.ts +22 -22
  250. package/dist/sdk/compose.d.ts +156 -156
  251. package/dist/sdk/config.d.ts +123 -123
  252. package/dist/sdk/context/semantic-session-attribution.d.ts +14 -14
  253. package/dist/sdk/context/usage-ledger.d.ts +20 -20
  254. package/dist/sdk/context-intent-contracts.d.ts +50 -50
  255. package/dist/sdk/context-intent-contracts.js +1 -1
  256. package/dist/sdk/context-intent-runtime.d.ts +8 -8
  257. package/dist/sdk/context-packing.d.ts +78 -78
  258. package/dist/sdk/context-relevance.d.ts +189 -180
  259. package/dist/sdk/context-relevance.js +1 -1
  260. package/dist/sdk/context-signal-store.d.ts +84 -84
  261. package/dist/sdk/context-usage.d.ts +92 -92
  262. package/dist/sdk/corpus-shape.d.ts +101 -101
  263. package/dist/sdk/define.d.ts +2 -2
  264. package/dist/sdk/dependencies.d.ts +116 -116
  265. package/dist/sdk/dependency-flag-validation.d.ts +14 -12
  266. package/dist/sdk/dependency-flag-validation.js +1 -1
  267. package/dist/sdk/dependency-provenance.d.ts +30 -30
  268. package/dist/sdk/docs.d.ts +32 -32
  269. package/dist/sdk/duplicates.d.ts +21 -21
  270. package/dist/sdk/environment/agent-environment.d.ts +196 -196
  271. package/dist/sdk/environment/project-runtime-compatibility.d.ts +56 -56
  272. package/dist/sdk/environment/source-context.d.ts +6 -6
  273. package/dist/sdk/error-code-catalog.d.ts +40 -40
  274. package/dist/sdk/errors.d.ts +29 -29
  275. package/dist/sdk/eval.d.ts +45 -45
  276. package/dist/sdk/extension/author-manifest.d.ts +14 -14
  277. package/dist/sdk/extension/bundled-catalog.d.ts +7 -7
  278. package/dist/sdk/extension/describe.d.ts +36 -36
  279. package/dist/sdk/extension/doctor.d.ts +29 -29
  280. package/dist/sdk/extension/install-plan.d.ts +55 -55
  281. package/dist/sdk/extension/install-receipts.d.ts +2 -2
  282. package/dist/sdk/extension/install-runtime.d.ts +8 -8
  283. package/dist/sdk/extension/install-snapshot.d.ts +14 -14
  284. package/dist/sdk/extension/install-sources.d.ts +96 -96
  285. package/dist/sdk/extension/managed-state.d.ts +66 -66
  286. package/dist/sdk/extension/migrations.d.ts +82 -82
  287. package/dist/sdk/extension/output-ownership.d.ts +24 -24
  288. package/dist/sdk/extension/runtime-summary.d.ts +5 -5
  289. package/dist/sdk/extension/scaffold.d.ts +12 -12
  290. package/dist/sdk/extension/shared.d.ts +15 -15
  291. package/dist/sdk/extension/source-resolution.d.ts +30 -30
  292. package/dist/sdk/extension/static-inventory.d.ts +42 -42
  293. package/dist/sdk/extension/update-check.d.ts +10 -10
  294. package/dist/sdk/extension.d.ts +320 -320
  295. package/dist/sdk/files.d.ts +157 -157
  296. package/dist/sdk/flag-invocation-contracts.d.ts +44 -44
  297. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  298. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  299. package/dist/sdk/governance/artifact-ledgers.d.ts +35 -35
  300. package/dist/sdk/governance/assurance-action.d.ts +68 -68
  301. package/dist/sdk/governance/assurance-action.js +1 -1
  302. package/dist/sdk/governance/assurance-mutation-error.d.ts +36 -36
  303. package/dist/sdk/governance/assurance-presets.d.ts +24 -24
  304. package/dist/sdk/governance/assurance-runtime.d.ts +14 -14
  305. package/dist/sdk/governance/assurance.d.ts +353 -353
  306. package/dist/sdk/governance/boundary-fixtures.d.ts +60 -60
  307. package/dist/sdk/governance/closure-timestamps.d.ts +9 -9
  308. package/dist/sdk/governance/coverage-assurance.d.ts +10 -10
  309. package/dist/sdk/governance/defect-recurrence-coverage.d.ts +75 -75
  310. package/dist/sdk/governance/defect-recurrence-graph.d.ts +18 -18
  311. package/dist/sdk/governance/defect-recurrence.d.ts +186 -181
  312. package/dist/sdk/governance/defect-recurrence.js +1 -1
  313. package/dist/sdk/governance/extension-host-version.d.ts +16 -16
  314. package/dist/sdk/governance/gc.d.ts +48 -48
  315. package/dist/sdk/governance/health-merge-evidence.d.ts +5 -5
  316. package/dist/sdk/governance/health.d.ts +188 -188
  317. package/dist/sdk/governance/hierarchy-validation.d.ts +13 -13
  318. package/dist/sdk/governance/linked-file-report.d.ts +26 -26
  319. package/dist/sdk/governance/merge-receipt-history.d.ts +36 -36
  320. package/dist/sdk/governance/provenance-health.d.ts +64 -64
  321. package/dist/sdk/governance/reindex.d.ts +89 -89
  322. package/dist/sdk/governance/reliability.d.ts +56 -56
  323. package/dist/sdk/governance/stale-work.d.ts +22 -22
  324. package/dist/sdk/governance/status-role-diagnostics.d.ts +12 -12
  325. package/dist/sdk/governance/storage-integrity.d.ts +54 -54
  326. package/dist/sdk/governance/tracked-runtime-cache.d.ts +10 -10
  327. package/dist/sdk/governance/upgrade.d.ts +104 -104
  328. package/dist/sdk/governance/validate-history-drift.d.ts +2 -2
  329. package/dist/sdk/governance/validate-item-reader.d.ts +6 -6
  330. package/dist/sdk/governance/validate.d.ts +191 -191
  331. package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
  332. package/dist/sdk/governance/workflow-policy.d.ts +28 -28
  333. package/dist/sdk/governance/workspace-position.d.ts +46 -46
  334. package/dist/sdk/graph/adapter.d.ts +66 -66
  335. package/dist/sdk/graph/analytics.d.ts +54 -54
  336. package/dist/sdk/graph/assembly.d.ts +80 -80
  337. package/dist/sdk/graph/cache.d.ts +29 -29
  338. package/dist/sdk/graph/cardinality-integrity.d.ts +13 -0
  339. package/dist/sdk/graph/cardinality-integrity.js +2 -0
  340. package/dist/sdk/graph/centrality.d.ts +34 -34
  341. package/dist/sdk/graph/conformance.d.ts +33 -33
  342. package/dist/sdk/graph/deadline-scheduling.d.ts +58 -58
  343. package/dist/sdk/graph/durable-cache.d.ts +26 -26
  344. package/dist/sdk/graph/governance.d.ts +165 -165
  345. package/dist/sdk/graph/hierarchy-integrity.d.ts +52 -52
  346. package/dist/sdk/graph/index.d.ts +1 -0
  347. package/dist/sdk/graph/index.js +1 -1
  348. package/dist/sdk/graph/lifecycle-coverage.d.ts +17 -17
  349. package/dist/sdk/graph/mutation-advisory.d.ts +11 -11
  350. package/dist/sdk/graph/query-contracts.d.ts +10 -10
  351. package/dist/sdk/graph/remediation.d.ts +25 -25
  352. package/dist/sdk/graph/run.d.ts +392 -392
  353. package/dist/sdk/graph/scheduling.d.ts +38 -38
  354. package/dist/sdk/graph/traversal.d.ts +14 -14
  355. package/dist/sdk/guide-topics.d.ts +32 -32
  356. package/dist/sdk/guide.d.ts +62 -62
  357. package/dist/sdk/history/attestation-command.d.ts +12 -12
  358. package/dist/sdk/history/attestation-contract.d.ts +78 -78
  359. package/dist/sdk/history/attestation-scan.d.ts +6 -6
  360. package/dist/sdk/history/maintenance.d.ts +46 -46
  361. package/dist/sdk/history/salvage.d.ts +18 -18
  362. package/dist/sdk/history/subject.d.ts +9 -9
  363. package/dist/sdk/history-analytics.d.ts +84 -84
  364. package/dist/sdk/history-compact.d.ts +103 -103
  365. package/dist/sdk/history-mcp.d.ts +8 -8
  366. package/dist/sdk/history-provenance.d.ts +59 -59
  367. package/dist/sdk/history-read.d.ts +36 -36
  368. package/dist/sdk/history-redact.d.ts +78 -78
  369. package/dist/sdk/history-repair.d.ts +158 -158
  370. package/dist/sdk/history-repair.js +1 -1
  371. package/dist/sdk/improvement-ledger.d.ts +102 -102
  372. package/dist/sdk/init-agent-guidance.d.ts +70 -70
  373. package/dist/sdk/init.d.ts +152 -152
  374. package/dist/sdk/item-children.d.ts +28 -28
  375. package/dist/sdk/item-schedule.d.ts +12 -12
  376. package/dist/sdk/item-transaction.d.ts +100 -100
  377. package/dist/sdk/learnings.d.ts +42 -42
  378. package/dist/sdk/lifecycle/append.d.ts +14 -14
  379. package/dist/sdk/lifecycle/claim.d.ts +60 -60
  380. package/dist/sdk/lifecycle/close-many.d.ts +94 -94
  381. package/dist/sdk/lifecycle/close.d.ts +27 -27
  382. package/dist/sdk/lifecycle/copy.d.ts +18 -18
  383. package/dist/sdk/lifecycle/core-field-recovery.d.ts +7 -0
  384. package/dist/sdk/lifecycle/core-field-recovery.js +2 -0
  385. package/dist/sdk/lifecycle/create.d.ts +82 -82
  386. package/dist/sdk/lifecycle/create.js +1 -1
  387. package/dist/sdk/lifecycle/delete.d.ts +28 -28
  388. package/dist/sdk/lifecycle/focus.d.ts +10 -10
  389. package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +10 -10
  390. package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
  391. package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +54 -54
  392. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +4 -4
  393. package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
  394. package/dist/sdk/lifecycle/mutation-command-options.d.ts +116 -116
  395. package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +6 -0
  396. package/dist/sdk/lifecycle/mutation-facet-contracts.js +2 -0
  397. package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +42 -42
  398. package/dist/sdk/lifecycle/plan.d.ts +217 -217
  399. package/dist/sdk/lifecycle/reopen.d.ts +29 -24
  400. package/dist/sdk/lifecycle/reopen.js +1 -1
  401. package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +3 -3
  402. package/dist/sdk/lifecycle/restore.d.ts +33 -33
  403. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +19 -19
  404. package/dist/sdk/lifecycle/task-composition.d.ts +4 -4
  405. package/dist/sdk/lifecycle/update-many.d.ts +79 -79
  406. package/dist/sdk/lifecycle/update.d.ts +131 -132
  407. package/dist/sdk/lifecycle/update.js +2 -2
  408. package/dist/sdk/lifecycle-completion.d.ts +22 -22
  409. package/dist/sdk/lifecycle-policy.d.ts +52 -52
  410. package/dist/sdk/linked-artifacts.d.ts +69 -69
  411. package/dist/sdk/mcp/apps.d.ts +32 -32
  412. package/dist/sdk/mcp/authorization.d.ts +76 -76
  413. package/dist/sdk/mcp/discovery.d.ts +111 -111
  414. package/dist/sdk/mcp/interactions.d.ts +61 -61
  415. package/dist/sdk/mcp/protocol.d.ts +78 -78
  416. package/dist/sdk/mcp/skills.d.ts +88 -88
  417. package/dist/sdk/mcp/subscriptions.d.ts +39 -39
  418. package/dist/sdk/mcp/tasks.d.ts +75 -75
  419. package/dist/sdk/mcp/transport.d.ts +11 -11
  420. package/dist/sdk/merge/abandoned-receipts.d.ts +6 -6
  421. package/dist/sdk/merge/driver.d.ts +60 -60
  422. package/dist/sdk/merge/install.d.ts +64 -64
  423. package/dist/sdk/merge/receipt-file-boundary.d.ts +5 -5
  424. package/dist/sdk/merge/receipt-operation.d.ts +6 -6
  425. package/dist/sdk/merge/receipt-schema.d.ts +2 -2
  426. package/dist/sdk/merge/receipts.d.ts +156 -156
  427. package/dist/sdk/merge/reconcile.d.ts +36 -36
  428. package/dist/sdk/merge/reconcile.js +1 -1
  429. package/dist/sdk/merge/three-way.d.ts +77 -76
  430. package/dist/sdk/merge/three-way.js +1 -1
  431. package/dist/sdk/mutation-events.d.ts +84 -84
  432. package/dist/sdk/mutation-guard.d.ts +106 -106
  433. package/dist/sdk/notes.d.ts +52 -52
  434. package/dist/sdk/output/table-rows.d.ts +8 -8
  435. package/dist/sdk/output-contracts.d.ts +38 -38
  436. package/dist/sdk/output-projection.d.ts +142 -142
  437. package/dist/sdk/output-token-accounting.d.ts +27 -27
  438. package/dist/sdk/output.d.ts +28 -28
  439. package/dist/sdk/package-import-adapters.d.ts +54 -54
  440. package/dist/sdk/pagination.d.ts +29 -29
  441. package/dist/sdk/profile.d.ts +123 -123
  442. package/dist/sdk/provenance.d.ts +58 -58
  443. package/dist/sdk/public-surface.json +1 -1
  444. package/dist/sdk/query/activity.d.ts +118 -118
  445. package/dist/sdk/query/aggregate.d.ts +140 -140
  446. package/dist/sdk/query/calendar.d.ts +144 -144
  447. package/dist/sdk/query/complete-list.d.ts +53 -53
  448. package/dist/sdk/query/context.d.ts +395 -395
  449. package/dist/sdk/query/duplicate-candidates.d.ts +1 -1
  450. package/dist/sdk/query/get.d.ts +77 -77
  451. package/dist/sdk/query/history.d.ts +72 -72
  452. package/dist/sdk/query/item-filter-options.d.ts +79 -79
  453. package/dist/sdk/query/list-filter-shared.d.ts +1 -1
  454. package/dist/sdk/query/list.d.ts +188 -188
  455. package/dist/sdk/query/multi-value-filters.d.ts +4 -4
  456. package/dist/sdk/query/next-ready-budget.d.ts +14 -14
  457. package/dist/sdk/query/next.d.ts +137 -137
  458. package/dist/sdk/query/projection-contracts.d.ts +8 -8
  459. package/dist/sdk/query/search/corpus.d.ts +8 -8
  460. package/dist/sdk/query/search/filters.d.ts +5 -5
  461. package/dist/sdk/query/search/input.d.ts +4 -4
  462. package/dist/sdk/query/search/response.d.ts +8 -8
  463. package/dist/sdk/query/search/semantic.d.ts +106 -106
  464. package/dist/sdk/query/search/types.d.ts +85 -85
  465. package/dist/sdk/query/search-contracts.d.ts +65 -65
  466. package/dist/sdk/query/search-pagination.d.ts +19 -19
  467. package/dist/sdk/query/search-rendering.d.ts +25 -25
  468. package/dist/sdk/query/search.d.ts +46 -46
  469. package/dist/sdk/read-output/continuation.d.ts +8 -8
  470. package/dist/sdk/read-output/continuation.js +1 -1
  471. package/dist/sdk/read-output/extension.d.ts +7 -0
  472. package/dist/sdk/read-output/extension.js +2 -0
  473. package/dist/sdk/read-output/options.d.ts +6 -4
  474. package/dist/sdk/read-output/options.js +1 -1
  475. package/dist/sdk/read-output/provenance.d.ts +8 -8
  476. package/dist/sdk/read-output-budget.d.ts +10 -10
  477. package/dist/sdk/read-output-contracts.d.ts +192 -186
  478. package/dist/sdk/read-output-contracts.js +1 -1
  479. package/dist/sdk/read-output-rows.d.ts +6 -6
  480. package/dist/sdk/read-output-session.d.ts +50 -50
  481. package/dist/sdk/relationship-analytics.d.ts +78 -78
  482. package/dist/sdk/relationship-context.d.ts +81 -81
  483. package/dist/sdk/relationship-history.d.ts +109 -109
  484. package/dist/sdk/relationship-kinds/contract.d.ts +34 -34
  485. package/dist/sdk/relationship-migration.d.ts +26 -26
  486. package/dist/sdk/relationships.d.ts +78 -78
  487. package/dist/sdk/reproducibility/process.d.ts +3 -3
  488. package/dist/sdk/runtime/context.d.ts +11 -11
  489. package/dist/sdk/runtime-action-aliases.d.ts +2 -2
  490. package/dist/sdk/runtime-extended-actions.d.ts +8 -8
  491. package/dist/sdk/runtime-input.d.ts +3 -3
  492. package/dist/sdk/runtime-public-contracts.d.ts +78 -78
  493. package/dist/sdk/runtime.d.ts +305 -305
  494. package/dist/sdk/runtime.js +1 -1
  495. package/dist/sdk/scheduling-shortcuts.d.ts +32 -32
  496. package/dist/sdk/schema-migration.d.ts +86 -86
  497. package/dist/sdk/schema.d.ts +355 -355
  498. package/dist/sdk/similarity-scoring.d.ts +10 -10
  499. package/dist/sdk/similarity.d.ts +113 -113
  500. package/dist/sdk/stats.d.ts +108 -108
  501. package/dist/sdk/structured-mutations.d.ts +16 -16
  502. package/dist/sdk/structured-mutations.js +1 -1
  503. package/dist/sdk/telemetry.d.ts +53 -53
  504. package/dist/sdk/templates.d.ts +39 -39
  505. package/dist/sdk/test/batch.d.ts +85 -85
  506. package/dist/sdk/test/execution-receipts.d.ts +3 -3
  507. package/dist/sdk/test/execution.d.ts +277 -277
  508. package/dist/sdk/test/execution.js +2 -2
  509. package/dist/sdk/test/json-path.d.ts +2 -2
  510. package/dist/sdk/test/linked-command-detection.d.ts +10 -10
  511. package/dist/sdk/test/measurements.d.ts +11 -11
  512. package/dist/sdk/test/parsers.d.ts +1 -1
  513. package/dist/sdk/test/parsers.js +1 -1
  514. package/dist/sdk/test/runs.d.ts +52 -52
  515. package/dist/sdk/test/trust.d.ts +12 -12
  516. package/dist/sdk/test/update.d.ts +31 -31
  517. package/dist/sdk/testing.d.ts +319 -319
  518. package/dist/sdk/traceability/source-traceability.d.ts +65 -65
  519. package/dist/sdk/workspace-contracts.d.ts +37 -37
  520. package/dist/sdk/workspace-memory.d.ts +60 -60
  521. package/dist/sdk/workspace-recipe.d.ts +9 -9
  522. package/dist/sdk/workspace-snapshot.d.ts +97 -97
  523. package/dist/sdk/workspace-transaction-gc.d.ts +32 -32
  524. package/dist/sdk/workspace-transaction.d.ts +47 -47
  525. package/dist/sdk/workspace.d.ts +6 -6
  526. package/dist/types.d.ts +978 -978
  527. package/dist/types.js +1 -1
  528. package/docs/BUILD_AND_RELEASE_ACCEPTANCE.md +5 -2
  529. package/docs/DEFECT_RECURRENCE.md +12 -0
  530. package/docs/EXTENSIONS.md +2 -2
  531. package/docs/MERGE_SAFETY.md +27 -1
  532. package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +17 -4
  533. package/docs/RELATIONSHIP_GRAPH.md +26 -0
  534. package/docs/RELEASING.md +6 -0
  535. package/docs/SDK.md +43 -18
  536. package/docs/SDK_CONSUMER_RECEIPTS.md +67 -0
  537. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +6 -3
  538. package/marketplace.json +1 -1
  539. package/node_modules/@opentelemetry/core/build/esm/version.d.ts +1 -1
  540. package/node_modules/@opentelemetry/core/build/esm/version.js +1 -1
  541. package/node_modules/@opentelemetry/core/build/esnext/version.d.ts +1 -1
  542. package/node_modules/@opentelemetry/core/build/esnext/version.js +1 -1
  543. package/node_modules/@opentelemetry/core/build/src/version.d.ts +1 -1
  544. package/node_modules/@opentelemetry/core/build/src/version.js +1 -1
  545. package/node_modules/@opentelemetry/core/package.json +2 -2
  546. package/node_modules/@opentelemetry/resources/build/esm/version.d.ts +1 -1
  547. package/node_modules/@opentelemetry/resources/build/esm/version.js +1 -1
  548. package/node_modules/@opentelemetry/resources/build/esnext/version.d.ts +1 -1
  549. package/node_modules/@opentelemetry/resources/build/esnext/version.js +1 -1
  550. package/node_modules/@opentelemetry/resources/build/src/version.d.ts +1 -1
  551. package/node_modules/@opentelemetry/resources/build/src/version.js +1 -1
  552. package/node_modules/@opentelemetry/resources/package.json +3 -3
  553. package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.d.ts +57 -0
  554. package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.js +105 -0
  555. package/node_modules/@opentelemetry/sdk-trace/build/esm/index.d.ts +1 -0
  556. package/node_modules/@opentelemetry/sdk-trace/build/esm/index.js +1 -0
  557. package/node_modules/@opentelemetry/sdk-trace/build/esm/version.d.ts +1 -1
  558. package/node_modules/@opentelemetry/sdk-trace/build/esm/version.js +1 -1
  559. package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.d.ts +57 -0
  560. package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.js +105 -0
  561. package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.d.ts +1 -0
  562. package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.js +1 -0
  563. package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.d.ts +1 -1
  564. package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.js +1 -1
  565. package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.d.ts +57 -0
  566. package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.js +109 -0
  567. package/node_modules/@opentelemetry/sdk-trace/build/src/index.d.ts +1 -0
  568. package/node_modules/@opentelemetry/sdk-trace/build/src/index.js +3 -1
  569. package/node_modules/@opentelemetry/sdk-trace/build/src/version.d.ts +1 -1
  570. package/node_modules/@opentelemetry/sdk-trace/build/src/version.js +1 -1
  571. package/node_modules/@opentelemetry/sdk-trace/package.json +5 -5
  572. package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.d.ts +1 -1
  573. package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.js +1 -1
  574. package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.d.ts +1 -1
  575. package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.js +1 -1
  576. package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.d.ts +1 -1
  577. package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.js +1 -1
  578. package/node_modules/@opentelemetry/sdk-trace-base/package.json +7 -7
  579. package/node_modules/@sentry/core/build/cjs/browser.js +3 -0
  580. package/node_modules/@sentry/core/build/cjs/fetch.js +10 -9
  581. package/node_modules/@sentry/core/build/cjs/index.js +3 -0
  582. package/node_modules/@sentry/core/build/cjs/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
  583. package/node_modules/@sentry/core/build/cjs/integrations/http/get-outgoing-span-data.js +3 -2
  584. package/node_modules/@sentry/core/build/cjs/integrations/http/server-subscription.js +7 -3
  585. package/node_modules/@sentry/core/build/cjs/integrations/requestdata.js +23 -9
  586. package/node_modules/@sentry/core/build/cjs/server.js +3 -0
  587. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterCollectedUrl.js +24 -0
  588. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterKeyValueData.js +17 -23
  589. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterQueryParams.js +8 -15
  590. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterUrlQuery.js +20 -0
  591. package/node_modules/@sentry/core/build/cjs/utils/url.js +4 -3
  592. package/node_modules/@sentry/core/build/cjs/utils/version.js +1 -1
  593. package/node_modules/@sentry/core/build/esm/browser.js +1 -0
  594. package/node_modules/@sentry/core/build/esm/fetch.js +10 -9
  595. package/node_modules/@sentry/core/build/esm/index.js +1 -0
  596. package/node_modules/@sentry/core/build/esm/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
  597. package/node_modules/@sentry/core/build/esm/integrations/http/get-outgoing-span-data.js +3 -2
  598. package/node_modules/@sentry/core/build/esm/integrations/http/server-subscription.js +7 -3
  599. package/node_modules/@sentry/core/build/esm/integrations/requestdata.js +23 -9
  600. package/node_modules/@sentry/core/build/esm/package.json +1 -1
  601. package/node_modules/@sentry/core/build/esm/server.js +1 -0
  602. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterCollectedUrl.js +21 -0
  603. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterKeyValueData.js +18 -25
  604. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterQueryParams.js +9 -16
  605. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterUrlQuery.js +18 -0
  606. package/node_modules/@sentry/core/build/esm/utils/url.js +4 -3
  607. package/node_modules/@sentry/core/build/esm/utils/version.js +1 -1
  608. package/node_modules/@sentry/core/build/types/shared-exports.d.ts +1 -0
  609. package/node_modules/@sentry/core/build/types/utils/data-collection/filterCollectedUrl.d.ts +21 -0
  610. package/node_modules/@sentry/core/build/types/utils/data-collection/filterKeyValueData.d.ts +1 -0
  611. package/node_modules/@sentry/core/build/types/utils/data-collection/filterQueryParams.d.ts +2 -3
  612. package/node_modules/@sentry/core/build/types/utils/data-collection/filterUrlQuery.d.ts +13 -0
  613. package/node_modules/@sentry/core/build/types/utils/url.d.ts +4 -1
  614. package/node_modules/@sentry/core/build/types-ts3.8/shared-exports.d.ts +1 -0
  615. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterCollectedUrl.d.ts +21 -0
  616. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterKeyValueData.d.ts +1 -0
  617. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterQueryParams.d.ts +2 -3
  618. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterUrlQuery.d.ts +13 -0
  619. package/node_modules/@sentry/core/build/types-ts3.8/utils/url.d.ts +4 -1
  620. package/node_modules/@sentry/core/package.json +3 -2
  621. package/node_modules/@sentry/node/build/cjs/integrations/tracing/vercelai/instrumentation.js +3 -0
  622. package/node_modules/@sentry/node/build/esm/integrations/tracing/vercelai/instrumentation.js +3 -0
  623. package/node_modules/@sentry/node/build/esm/package.json +1 -1
  624. package/node_modules/@sentry/node/package.json +7 -6
  625. package/node_modules/@sentry/node-core/build/cjs/integrations/anr/index.js +1 -1
  626. package/node_modules/@sentry/node-core/build/cjs/integrations/http/httpServerSpansIntegration.js +6 -3
  627. package/node_modules/@sentry/node-core/build/cjs/integrations/local-variables/local-variables-async.js +1 -1
  628. package/node_modules/@sentry/node-core/build/cjs/integrations/node-fetch/undici-instrumentation.js +2 -2
  629. package/node_modules/@sentry/node-core/build/cjs/light/client.js +7 -0
  630. package/node_modules/@sentry/node-core/build/cjs/sdk/client.js +7 -0
  631. package/node_modules/@sentry/node-core/build/cjs/utils/outgoingFetchRequest.js +1 -1
  632. package/node_modules/@sentry/node-core/build/esm/integrations/anr/index.js +1 -1
  633. package/node_modules/@sentry/node-core/build/esm/integrations/anr/worker-script.js +2 -2
  634. package/node_modules/@sentry/node-core/build/esm/integrations/http/httpServerSpansIntegration.js +7 -4
  635. package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/local-variables-async.js +1 -1
  636. package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/worker-script.js +1 -1
  637. package/node_modules/@sentry/node-core/build/esm/integrations/node-fetch/undici-instrumentation.js +3 -3
  638. package/node_modules/@sentry/node-core/build/esm/light/client.js +8 -1
  639. package/node_modules/@sentry/node-core/build/esm/package.json +1 -1
  640. package/node_modules/@sentry/node-core/build/esm/sdk/client.js +8 -1
  641. package/node_modules/@sentry/node-core/build/esm/utils/outgoingFetchRequest.js +2 -2
  642. package/node_modules/@sentry/node-core/build/types/light/client.d.ts +1 -0
  643. package/node_modules/@sentry/node-core/build/types/sdk/client.d.ts +1 -0
  644. package/node_modules/@sentry/node-core/build/types-ts3.8/light/client.d.ts +1 -0
  645. package/node_modules/@sentry/node-core/build/types-ts3.8/sdk/client.d.ts +1 -0
  646. package/node_modules/@sentry/node-core/package.json +5 -4
  647. package/node_modules/@sentry/opentelemetry/build/cjs/{asyncContextStrategy-BJ5buq_A.js → asyncContextStrategy-BR-l9zjD.js} +8 -6
  648. package/node_modules/@sentry/opentelemetry/build/cjs/index.browser.js +1 -1
  649. package/node_modules/@sentry/opentelemetry/build/cjs/index.js +1 -1
  650. package/node_modules/@sentry/opentelemetry/build/esm/{asyncContextStrategy-Bx5F5tCX.js → asyncContextStrategy-BQfM_LMv.js} +9 -7
  651. package/node_modules/@sentry/opentelemetry/build/esm/index.browser.js +1 -1
  652. package/node_modules/@sentry/opentelemetry/build/esm/index.js +2 -2
  653. package/node_modules/@sentry/opentelemetry/build/esm/package.json +1 -1
  654. package/node_modules/@sentry/opentelemetry/package.json +4 -3
  655. package/node_modules/@sentry/server-utils/build/cjs/tracing-channel.js +1 -0
  656. package/node_modules/@sentry/server-utils/build/esm/package.json +1 -1
  657. package/node_modules/@sentry/server-utils/build/esm/tracing-channel.js +1 -0
  658. package/node_modules/@sentry/server-utils/build/types/tracing-channel.d.ts +3 -1
  659. package/node_modules/@sentry/server-utils/build/types-ts3.8/tracing-channel.d.ts +3 -1
  660. package/node_modules/@sentry/server-utils/package.json +4 -3
  661. package/node_modules/cjs-module-lexer/README.md +8 -3
  662. package/node_modules/cjs-module-lexer/dist/lexer.js +1 -1
  663. package/node_modules/cjs-module-lexer/dist/lexer.mjs +2 -2
  664. package/node_modules/cjs-module-lexer/lexer.js +48 -9
  665. package/node_modules/cjs-module-lexer/package.json +3 -2
  666. package/node_modules/es-module-lexer/dist/lexer.asm.js +2 -2
  667. package/node_modules/es-module-lexer/dist/lexer.cjs +1 -1
  668. package/node_modules/es-module-lexer/dist/lexer.js +2 -2
  669. package/node_modules/es-module-lexer/dist/lexer.minimal.asm.js +2 -2
  670. package/node_modules/es-module-lexer/dist/lexer.minimal.cjs +1 -1
  671. package/node_modules/es-module-lexer/dist/lexer.minimal.js +2 -2
  672. package/node_modules/es-module-lexer/package.json +1 -1
  673. package/node_modules/import-in-the-middle/CHANGELOG.md +7 -0
  674. package/node_modules/import-in-the-middle/lib/get-esm-exports.mjs +7 -0
  675. package/node_modules/import-in-the-middle/package.json +1 -1
  676. package/package.json +2 -2
  677. package/packages/pm-beads/extensions/beads/runtime.ts +2 -2
  678. package/packages/pm-beads/package.json +1 -1
  679. package/packages/pm-calendar/package.json +1 -1
  680. package/packages/pm-command-kit/package.json +1 -1
  681. package/packages/pm-digital-twin/package.json +1 -1
  682. package/packages/pm-governance-audit/package.json +1 -1
  683. package/packages/pm-guide-shell/package.json +1 -1
  684. package/packages/pm-kanban/package.json +1 -1
  685. package/packages/pm-lifecycle-hooks/package.json +1 -1
  686. package/packages/pm-linked-test-adapters/package.json +1 -1
  687. package/packages/pm-search-advanced/package.json +1 -1
  688. package/packages/pm-templates/package.json +1 -1
  689. package/packages/pm-todos/package.json +1 -1
  690. package/packages/pm-vcs/package.json +1 -1
  691. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  692. package/plugins/pm-claude/package.json +1 -1
  693. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  694. package/plugins/pm-codex/package.json +1 -1
  695. package/plugins/pm-codex/plugin.json +1 -1
  696. package/runtime-dependencies.json +1 -1
  697. package/scripts/finalize-build.mjs +37 -0
  698. package/dist/cli-bundle/chunks/chunk-6PZPUJW3.js +0 -234
  699. package/dist/cli-bundle/chunks/chunk-ILQEZ4Y6.js +0 -2
  700. package/dist/cli-bundle/chunks/chunk-JRRXWH5B.js +0 -20
  701. package/dist/cli-bundle/chunks/chunk-LH5QDBMN.js +0 -2
  702. package/dist/cli-bundle/chunks/chunk-M5NDSW6E.js +0 -30
  703. package/dist/cli-bundle/focused-chunks/chunk-AXBO53EQ.js +0 -2
  704. package/dist/cli-bundle/focused-chunks/chunk-FXRWJEQ5.js +0 -3
  705. package/dist/cli-bundle/focused-chunks/chunk-IKJFAU32.js +0 -8
  706. package/dist/cli-bundle/focused-chunks/chunk-PPH5N26M.js +0 -2
  707. package/dist/cli-bundle/focused-chunks/chunk-RZVNGUT7.js +0 -26
  708. package/dist/cli-bundle/focused-chunks/chunk-YDJT33JU.js +0 -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]="f483c0e2-e630-568c-b4c0-3ca4f5434d5e")}catch{}})();const KNOWN_EXTENSION_CAPABILITIES=["commands","renderers","hooks","schema","importers","search","parser","preflight","services"],EXTENSION_CAPABILITY_CONTRACT_VERSION=2,EXTENSION_CAPABILITY_LEGACY_ALIASES=Object.freeze({migration:"schema",validation:"schema"}),EXTENSION_CAPABILITY_CONTRACT=Object.freeze({version:2,capabilities:[...KNOWN_EXTENSION_CAPABILITIES],legacy_aliases:{...EXTENSION_CAPABILITY_LEGACY_ALIASES}}),KNOWN_EXTENSION_POLICY_MODES=["off","warn","enforce"],KNOWN_EXTENSION_TRUST_MODES=["off","warn","enforce"],KNOWN_EXTENSION_SANDBOX_PROFILES=["none","restricted","strict"],KNOWN_PM_MAX_VERSION_EXCEEDED_MODES=["block","warn"],KNOWN_EXTENSION_POLICY_SURFACES=["commands.override","commands.handler","hooks.beforecommand","hooks.beforemutation","hooks.aftercommand","hooks.onwrite","hooks.onread","hooks.onindex","schema.flags","schema.itemfields","schema.itemtypes","schema.relationshipkinds","schema.migrations","schema.profiles","parser.override","preflight.override","services.override","renderers.override","importers.importer","importers.exporter","search.provider","search.vectorstore","services.assuranceprovider"],KNOWN_EXTENSION_SERVICE_NAMES=["output_format","error_format","help_format","lock_acquire","lock_release","history_append","item_store_write","item_store_delete","context_relevance","command_result"];function createDefaultExtensionGovernancePolicy(){return{mode:"off",trust_mode:"off",require_provenance:!1,trusted_extensions:[],default_sandbox_profile:"none",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:[]}}export{EXTENSION_CAPABILITY_CONTRACT,EXTENSION_CAPABILITY_CONTRACT_VERSION,EXTENSION_CAPABILITY_LEGACY_ALIASES,KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_SERVICE_NAMES,KNOWN_EXTENSION_TRUST_MODES,KNOWN_PM_MAX_VERSION_EXCEEDED_MODES,createDefaultExtensionGovernancePolicy};
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]="a48d9f21-dff9-5f40-ba43-f67b505e20d6")}catch{}})();const KNOWN_EXTENSION_CAPABILITIES=["commands","renderers","hooks","schema","importers","search","parser","preflight","services"],EXTENSION_CAPABILITY_CONTRACT_VERSION=2,EXTENSION_CAPABILITY_LEGACY_ALIASES=Object.freeze({migration:"schema",validation:"schema"}),EXTENSION_CAPABILITY_CONTRACT=Object.freeze({version:2,capabilities:[...KNOWN_EXTENSION_CAPABILITIES],legacy_aliases:{...EXTENSION_CAPABILITY_LEGACY_ALIASES}}),KNOWN_EXTENSION_POLICY_MODES=["off","warn","enforce"],KNOWN_EXTENSION_TRUST_MODES=["off","warn","enforce"],KNOWN_EXTENSION_SANDBOX_PROFILES=["none","restricted","strict"],KNOWN_PM_MAX_VERSION_EXCEEDED_MODES=["block","warn"],KNOWN_EXTENSION_POLICY_SURFACES=["commands.override","commands.handler","hooks.beforecommand","hooks.beforemutation","hooks.aftercommand","hooks.onwrite","hooks.onread","hooks.onindex","schema.flags","schema.itemfields","schema.itemtypes","schema.relationshipkinds","schema.migrations","schema.profiles","parser.override","preflight.override","services.override","renderers.override","importers.importer","importers.exporter","search.provider","search.vectorstore","services.assuranceprovider"],KNOWN_EXTENSION_SERVICE_NAMES=["output_format","error_format","help_format","lock_acquire","lock_release","history_append","item_store_write","item_store_delete","context_relevance","command_result"];function createDefaultExtensionGovernancePolicy(){return{mode:"off",trust_mode:"off",require_provenance:!1,trusted_extensions:[],default_sandbox_profile:"none",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:[]}}export{EXTENSION_CAPABILITY_CONTRACT,EXTENSION_CAPABILITY_CONTRACT_VERSION,EXTENSION_CAPABILITY_LEGACY_ALIASES,KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_POLICY_MODES,KNOWN_EXTENSION_POLICY_SURFACES,KNOWN_EXTENSION_SANDBOX_PROFILES,KNOWN_EXTENSION_SERVICE_NAMES,KNOWN_EXTENSION_TRUST_MODES,KNOWN_PM_MAX_VERSION_EXCEEDED_MODES,createDefaultExtensionGovernancePolicy};
2
2
  //# sourceMappingURL=extension-types.js.map
@@ -7,10 +7,10 @@ export declare const EXTENSION_LONG_FLAG_PATTERN: RegExp;
7
7
  export type ExtensionFlagTokenFailure = "host_owned_flag_collision" | "malformed_long_flag";
8
8
  /** Invalid token and failure classification returned for one flag definition. */
9
9
  export interface ExtensionFlagTokenFinding {
10
- /** Trimmed long or short token that failed validation. */
11
- token: string;
12
- /** Stable failure classification shared by lint and activation. */
13
- failure: ExtensionFlagTokenFailure;
10
+ /** Trimmed long or short token that failed validation. */
11
+ token: string;
12
+ /** Stable failure classification shared by lint and activation. */
13
+ failure: ExtensionFlagTokenFailure;
14
14
  }
15
15
  /** Describe why a declared long flag cannot be registered, or `null` when valid. */
16
16
  export declare function validateExtensionLongFlagToken(value: unknown): ExtensionFlagTokenFailure | null;
@@ -4,6 +4,7 @@
4
4
  * Implements extension runtime contracts and governance for Item Fields.
5
5
  */
6
6
  import type { ExtensionRegistrationRegistry } from "./loader.js";
7
+ import { type PmCliErrorContext } from "../shared/errors.js";
7
8
  /** Item metadata keys extension-provided fields may never shadow, exposed without mutation methods. */
8
9
  export declare const RESERVED_ITEM_FIELD_NAMES: ReadonlySet<string>;
9
10
  /** Implements collect registered item field names for the public runtime surface of this module. */
@@ -14,8 +15,8 @@ export declare function collectRegisteredItemFieldNames(registrations: Extension
14
15
  * rejected input separately from legal registered keys. Parsing never writes
15
16
  * tracker state, so a failed assignment cannot persist partial metadata.
16
17
  */
17
- export declare function parseRegisteredItemFieldAssignments(rawFields: string[] | undefined, registrations: ExtensionRegistrationRegistry | null): Record<string, unknown>;
18
+ export declare function parseRegisteredItemFieldAssignments(rawFields: string[] | undefined, registrations: ExtensionRegistrationRegistry | null, resolveCoreFieldRecovery?: (field: string) => Pick<PmCliErrorContext, "recovery" | "nextSteps">): Record<string, unknown>;
18
19
  /** Implements apply registered item field defaults and validation for the public runtime surface of this module. */
19
20
  export declare function applyRegisteredItemFieldDefaultsAndValidation(itemMetadata: Record<string, unknown>, registrations: ExtensionRegistrationRegistry | null, options?: {
20
- skipDefaultFields?: ReadonlySet<string>;
21
+ skipDefaultFields?: ReadonlySet<string>;
21
22
  }): void;
@@ -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]="3b307f5a-3d23-5463-b90c-efbc4febe5dd")}catch{}})();import{normalizeItemFieldType}from"./item-field-types.js";import{EXIT_CODE,ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const reservedItemFieldNames=new Set(ITEM_METADATA_KEY_ORDER),RESERVED_ITEM_FIELD_NAMES=Object.freeze({get size(){return reservedItemFieldNames.size},has(value){return reservedItemFieldNames.has(value)},entries(){return reservedItemFieldNames.entries()},keys(){return reservedItemFieldNames.keys()},values(){return reservedItemFieldNames.values()},forEach(callback,thisArg){reservedItemFieldNames.forEach(value=>callback.call(thisArg,value,value,RESERVED_ITEM_FIELD_NAMES))},[Symbol.iterator](){return reservedItemFieldNames.values()}});function normalizeFieldName(value){if(typeof value!="string")return null;const normalized=value.trim();return normalized.length>0?normalized:null}function normalizeFieldType(value){return typeof value!="string"?null:normalizeItemFieldType(value)}function cloneFieldValue(value){try{return structuredClone(value)}catch{return value}}function parseFieldAssignment(raw){const trimmed=raw.trim(),separatorIndex=trimmed.indexOf("=");if(separatorIndex<=0)throw new PmCliError(`--field entries must use name=value syntax, received: ${raw}`,EXIT_CODE.USAGE);const key=trimmed.slice(0,separatorIndex).trim(),value=trimmed.slice(separatorIndex+1);return{key,value}}function parseJsonFieldValue(raw,fieldName,expectedType){try{const parsed=JSON.parse(raw);if(expectedType==="array"&&Array.isArray(parsed)||expectedType==="object"&&typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed))return parsed}catch{}throw new PmCliError(`--field ${fieldName}=... must be valid JSON ${expectedType}`,EXIT_CODE.USAGE)}function coerceRegisteredFieldValue(fieldName,fieldType,raw){if(fieldType==="string")return raw;if(fieldType==="number"){const trimmed=raw.trim();if(trimmed.length===0)throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);const parsed=Number(trimmed);if(!Number.isFinite(parsed))throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);return parsed}if(fieldType==="boolean"){const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="1"||normalized==="yes")return!0;if(normalized==="false"||normalized==="0"||normalized==="no")return!1;throw new PmCliError(`--field ${fieldName}=... must be one of true|false|1|0|yes|no`,EXIT_CODE.USAGE)}return fieldType==="string_array"?raw.split(/[\n,|]/u).map(value=>value.trim()).filter(value=>value.length>0):parseJsonFieldValue(raw,fieldName,fieldType)}function collectRegisteredFieldDefinitions(registrations){const definitions=new Map;if(!registrations)return definitions;for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name),fieldType=normalizeFieldType(definition.type);if(!fieldName||!fieldType)continue;const existing=definitions.get(fieldName);if(existing&&existing.type!==fieldType)throw new PmCliError(`Extension item field "${fieldName}" is declared with conflicting types: ${existing.type}, ${fieldType}`,EXIT_CODE.USAGE,{code:"extension_item_field_type_conflict",nextSteps:["Make every active extension declaration for this field use the same type."]});definitions.set(fieldName,{name:fieldName,type:fieldType})}return definitions}function assertNotReservedItemFieldName(fieldName){if(RESERVED_ITEM_FIELD_NAMES.has(fieldName))throw new PmCliError(`Extension item field "${fieldName}" collides with built-in item metadata "${fieldName}"; rename the extension field with an extension-specific prefix. Reserved fields: ${[...RESERVED_ITEM_FIELD_NAMES].sort((left,right)=>left.localeCompare(right)).join(", ")}.`,EXIT_CODE.USAGE,{code:"extension_item_field_reserved",nextSteps:["Rename the extension item field, preferably with an extension-specific prefix."]})}function collectRegisteredItemFieldNames(registrations){return[...collectRegisteredFieldDefinitions(registrations).keys()].sort((left,right)=>left.localeCompare(right))}function parseRegisteredItemFieldAssignments(rawFields,registrations){if(!rawFields||rawFields.length===0)return{};const definitions=collectRegisteredFieldDefinitions(registrations),values={};for(const raw of rawFields){const{key,value}=parseFieldAssignment(raw),definition=definitions.get(key);if(!definition){if(RESERVED_ITEM_FIELD_NAMES.has(key)){const flag=`--${key.replaceAll("_","-")}`;throw new PmCliError(`--field ${key} is a core item field, not an extension field`,EXIT_CODE.USAGE,{code:"core_item_field_requires_dedicated_flag",field:key,recovery:{provided_fields:[key],suggested_flags:[flag]},nextSteps:[`Set the core field with its dedicated flag: pm update <id> ${flag} <value>`,`When closing an item, pm close <id> also accepts ${flag} <value>.`]})}const known=[...definitions.keys()].sort((left,right)=>left.localeCompare(right));throw new PmCliError(`--field ${key} is not declared by an active extension item-field registration`,EXIT_CODE.USAGE,{code:"extension_item_field_unknown",field:key,recovery:{provided_fields:[key]},nextSteps:known.length>0?[`Use one of the declared fields: ${known.join(", ")}`]:["Activate an extension that calls registerItemFields before setting extension fields."]})}assertNotReservedItemFieldName(definition.name),values[definition.name]=coerceRegisteredFieldValue(definition.name,definition.type,value)}return values}function isValidFieldType(value,expectedType){return expectedType==="string"?typeof value=="string":expectedType==="number"?typeof value=="number"&&Number.isFinite(value):expectedType==="boolean"?typeof value=="boolean":expectedType==="array"?Array.isArray(value):expectedType==="string_array"?Array.isArray(value)&&value.every(entry=>typeof entry=="string"):typeof value=="object"&&value!==null&&!Array.isArray(value)}function isAllowedFieldValue(value,allowed){return!allowed||allowed.length===0?!0:allowed.some(candidate=>Object.is(candidate,value))}function applyRegisteredItemFieldDefaultsAndValidation(itemMetadata,registrations,options={}){if(registrations){collectRegisteredFieldDefinitions(registrations);for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name);if(!fieldName)continue;assertNotReservedItemFieldName(fieldName),!(fieldName in itemMetadata)&&!options.skipDefaultFields?.has(fieldName)&&Object.prototype.hasOwnProperty.call(definition,"default")&&(itemMetadata[fieldName]=cloneFieldValue(definition.default));const currentValue=itemMetadata[fieldName];if(currentValue===void 0)continue;const expectedType=normalizeFieldType(definition.type);if(expectedType&&!isValidFieldType(currentValue,expectedType))throw new TypeError(`Item field "${fieldName}" must be of type ${expectedType}`);const allowedValues=Array.isArray(definition.values)?definition.values:void 0;if(!isAllowedFieldValue(currentValue,allowedValues))throw new TypeError(`Item field "${fieldName}" must match one of the configured allowed values`)}}}export{RESERVED_ITEM_FIELD_NAMES,applyRegisteredItemFieldDefaultsAndValidation,collectRegisteredItemFieldNames,parseRegisteredItemFieldAssignments};
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]="300b6741-40eb-5bb1-bb0a-bb144d15946e")}catch{}})();import{normalizeItemFieldType}from"./item-field-types.js";import{EXIT_CODE,ITEM_METADATA_KEY_ORDER}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const reservedItemFieldNames=new Set(ITEM_METADATA_KEY_ORDER),RESERVED_ITEM_FIELD_NAMES=Object.freeze({get size(){return reservedItemFieldNames.size},has(value){return reservedItemFieldNames.has(value)},entries(){return reservedItemFieldNames.entries()},keys(){return reservedItemFieldNames.keys()},values(){return reservedItemFieldNames.values()},forEach(callback,thisArg){reservedItemFieldNames.forEach(value=>callback.call(thisArg,value,value,RESERVED_ITEM_FIELD_NAMES))},[Symbol.iterator](){return reservedItemFieldNames.values()}});function normalizeFieldName(value){if(typeof value!="string")return null;const normalized=value.trim();return normalized.length>0?normalized:null}function normalizeFieldType(value){return typeof value!="string"?null:normalizeItemFieldType(value)}function cloneFieldValue(value){try{return structuredClone(value)}catch{return value}}function parseFieldAssignment(raw){const trimmed=raw.trim(),separatorIndex=trimmed.indexOf("=");if(separatorIndex<=0)throw new PmCliError(`--field entries must use name=value syntax, received: ${raw}`,EXIT_CODE.USAGE);const key=trimmed.slice(0,separatorIndex).trim(),value=trimmed.slice(separatorIndex+1);return{key,value}}function parseJsonFieldValue(raw,fieldName,expectedType){try{const parsed=JSON.parse(raw);if(expectedType==="array"&&Array.isArray(parsed)||expectedType==="object"&&typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed))return parsed}catch{}throw new PmCliError(`--field ${fieldName}=... must be valid JSON ${expectedType}`,EXIT_CODE.USAGE)}function coerceRegisteredFieldValue(fieldName,fieldType,raw){if(fieldType==="string")return raw;if(fieldType==="number"){const trimmed=raw.trim();if(trimmed.length===0)throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);const parsed=Number(trimmed);if(!Number.isFinite(parsed))throw new PmCliError(`--field ${fieldName}=... must be a number`,EXIT_CODE.USAGE);return parsed}if(fieldType==="boolean"){const normalized=raw.trim().toLowerCase();if(normalized==="true"||normalized==="1"||normalized==="yes")return!0;if(normalized==="false"||normalized==="0"||normalized==="no")return!1;throw new PmCliError(`--field ${fieldName}=... must be one of true|false|1|0|yes|no`,EXIT_CODE.USAGE)}return fieldType==="string_array"?raw.split(/[\n,|]/u).map(value=>value.trim()).filter(value=>value.length>0):parseJsonFieldValue(raw,fieldName,fieldType)}function collectRegisteredFieldDefinitions(registrations){const definitions=new Map;if(!registrations)return definitions;for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name),fieldType=normalizeFieldType(definition.type);if(!fieldName||!fieldType)continue;const existing=definitions.get(fieldName);if(existing&&existing.type!==fieldType)throw new PmCliError(`Extension item field "${fieldName}" is declared with conflicting types: ${existing.type}, ${fieldType}`,EXIT_CODE.USAGE,{code:"extension_item_field_type_conflict",nextSteps:["Make every active extension declaration for this field use the same type."]});definitions.set(fieldName,{name:fieldName,type:fieldType})}return definitions}function assertNotReservedItemFieldName(fieldName){if(RESERVED_ITEM_FIELD_NAMES.has(fieldName))throw new PmCliError(`Extension item field "${fieldName}" collides with built-in item metadata "${fieldName}"; rename the extension field with an extension-specific prefix. Reserved fields: ${[...RESERVED_ITEM_FIELD_NAMES].sort((left,right)=>left.localeCompare(right)).join(", ")}.`,EXIT_CODE.USAGE,{code:"extension_item_field_reserved",nextSteps:["Rename the extension item field, preferably with an extension-specific prefix."]})}function collectRegisteredItemFieldNames(registrations){return[...collectRegisteredFieldDefinitions(registrations).keys()].sort((left,right)=>left.localeCompare(right))}function parseRegisteredItemFieldAssignments(rawFields,registrations,resolveCoreFieldRecovery){if(!rawFields||rawFields.length===0)return{};const definitions=collectRegisteredFieldDefinitions(registrations),values={};for(const raw of rawFields){const{key,value}=parseFieldAssignment(raw),definition=definitions.get(key);if(!definition){if(RESERVED_ITEM_FIELD_NAMES.has(key)){const guidance=resolveCoreFieldRecovery?.(key)??{recovery:{provided_fields:[key]},nextSteps:["Core metadata has no generic --field mutation path. Use the owning lifecycle, evidence, or importer API; inspect pm update <id> --help for declared mutation flags."]};throw new PmCliError(`--field ${key} is a core item field, not an extension field`,EXIT_CODE.USAGE,{code:"core_item_field_requires_dedicated_flag",field:key,...guidance})}const known=[...definitions.keys()].sort((left,right)=>left.localeCompare(right));throw new PmCliError(`--field ${key} is not declared by an active extension item-field registration`,EXIT_CODE.USAGE,{code:"extension_item_field_unknown",field:key,recovery:{provided_fields:[key]},nextSteps:known.length>0?[`Use one of the declared fields: ${known.join(", ")}`]:["Activate an extension that calls registerItemFields before setting extension fields."]})}assertNotReservedItemFieldName(definition.name),values[definition.name]=coerceRegisteredFieldValue(definition.name,definition.type,value)}return values}function isValidFieldType(value,expectedType){return expectedType==="string"?typeof value=="string":expectedType==="number"?typeof value=="number"&&Number.isFinite(value):expectedType==="boolean"?typeof value=="boolean":expectedType==="array"?Array.isArray(value):expectedType==="string_array"?Array.isArray(value)&&value.every(entry=>typeof entry=="string"):typeof value=="object"&&value!==null&&!Array.isArray(value)}function isAllowedFieldValue(value,allowed){return!allowed||allowed.length===0?!0:allowed.some(candidate=>Object.is(candidate,value))}function applyRegisteredItemFieldDefaultsAndValidation(itemMetadata,registrations,options={}){if(registrations){collectRegisteredFieldDefinitions(registrations);for(const registration of registrations.item_fields)for(const definition of registration.fields){const fieldName=normalizeFieldName(definition.name);if(!fieldName)continue;assertNotReservedItemFieldName(fieldName),!(fieldName in itemMetadata)&&!options.skipDefaultFields?.has(fieldName)&&Object.prototype.hasOwnProperty.call(definition,"default")&&(itemMetadata[fieldName]=cloneFieldValue(definition.default));const currentValue=itemMetadata[fieldName];if(currentValue===void 0)continue;const expectedType=normalizeFieldType(definition.type);if(expectedType&&!isValidFieldType(currentValue,expectedType))throw new TypeError(`Item field "${fieldName}" must be of type ${expectedType}`);const allowedValues=Array.isArray(definition.values)?definition.values:void 0;if(!isAllowedFieldValue(currentValue,allowedValues))throw new TypeError(`Item field "${fieldName}" must match one of the configured allowed values`)}}}export{RESERVED_ITEM_FIELD_NAMES,applyRegisteredItemFieldDefaultsAndValidation,collectRegisteredItemFieldNames,parseRegisteredItemFieldAssignments};
2
2
  //# sourceMappingURL=item-fields.js.map
@@ -16,20 +16,20 @@ export declare function nextExtensionReloadToken(seed?: number): string;
16
16
  export declare function isCanonicalPathWithinDirectory(directory: string, targetPath: string): Promise<boolean>;
17
17
  /** Implements resolve extension roots for the public runtime surface of this module. */
18
18
  export declare function resolveExtensionRoots(pmRoot: string, cwd?: string): {
19
- global: string;
20
- project: string;
19
+ global: string;
20
+ project: string;
21
21
  };
22
22
  /** Implements discover extensions for the public runtime surface of this module. */
23
23
  export declare function discoverExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionDiscoveryResult>;
24
24
  declare function readCurrentPmCliVersion(): Promise<string | null>;
25
25
  declare function resolveCurrentPmCliVersion(): Promise<string | null>;
26
26
  declare function evaluatePmMinVersionCompatibility(layer: ExtensionLayer, manifest: ExtensionManifest): Promise<{
27
- allowed: boolean;
28
- warning?: string;
27
+ allowed: boolean;
28
+ warning?: string;
29
29
  }>;
30
30
  declare function evaluatePmMaxVersionCompatibility(layer: ExtensionLayer, manifest: ExtensionManifest, exceededMode: PmMaxVersionExceededMode): Promise<{
31
- allowed: boolean;
32
- warning?: string;
31
+ allowed: boolean;
32
+ warning?: string;
33
33
  }>;
34
34
  declare function fingerprintPath(pathToInspect: string): Promise<string>;
35
35
  declare function resolveExtensionImportHref(extension: EffectiveExtension, options: DiscoverExtensionsOptions): Promise<string>;
@@ -61,34 +61,34 @@ declare function collectServiceCollisionWarnings(services: ExtensionServiceRegis
61
61
  export declare function activateExtensions(loadResult: ExtensionLoadResult): Promise<ExtensionActivationResult>;
62
62
  /** Public contract for test only loader, shared by SDK and presentation-layer consumers. */
63
63
  export declare const _testOnlyLoader: {
64
- assertFlagValueTypeAndDefault: typeof assertFlagValueTypeAndDefault;
65
- assertOptionalStringField: typeof assertOptionalStringField;
66
- compareComparableVersions: typeof compareComparableVersions;
67
- collectCommandCollisionWarnings: typeof collectCommandCollisionWarnings;
68
- collectParserCollisionWarnings: typeof collectParserCollisionWarnings;
69
- collectRendererCollisionWarnings: typeof collectRendererCollisionWarnings;
70
- collectServiceCollisionWarnings: typeof collectServiceCollisionWarnings;
71
- createExtensionApi: typeof createExtensionApi;
72
- createRegistrationValidationError: typeof createRegistrationValidationError;
73
- evaluatePmMaxVersionCompatibility: typeof evaluatePmMaxVersionCompatibility;
74
- evaluatePmMinVersionCompatibility: typeof evaluatePmMinVersionCompatibility;
75
- extractRegistrationValidationTrace: typeof extractRegistrationValidationTrace;
76
- fingerprintPath: typeof fingerprintPath;
77
- getRegistrationCounts: typeof getRegistrationCounts;
78
- normalizeCommandDefinitionArguments: typeof normalizeCommandDefinitionArguments;
79
- normalizeExtensionDeactivateTimeout: typeof normalizeExtensionDeactivateTimeout;
80
- normalizeOptionalStringArrayField: typeof normalizeOptionalStringArrayField;
81
- normalizeRegistrationRecord: typeof normalizeRegistrationRecord;
82
- normalizeRegistrationRecordList: typeof normalizeRegistrationRecordList;
83
- normalizeRuntimeRegistrationRecord: typeof normalizeRuntimeRegistrationRecord;
84
- parseComparableVersion: typeof parseComparableVersion;
85
- parseManifest: typeof parseExtensionManifestDocument;
86
- readCurrentPmCliVersion: typeof readCurrentPmCliVersion;
87
- readManagedExtensionSourcePackages: (extensionsRoot: string) => Promise<Map<string, string>>;
88
- resolveExtensionImportHref: typeof resolveExtensionImportHref;
89
- resolveCurrentPmCliVersion: typeof resolveCurrentPmCliVersion;
90
- resolveCommandDefinitionAction: typeof resolveCommandDefinitionAction;
91
- sanitizeRegistrationValue: typeof sanitizeRegistrationValue;
92
- validateItemFieldDefinitions: typeof validateItemFieldDefinitions;
93
- resetCurrentPmCliVersionCacheForTest: () => void;
64
+ assertFlagValueTypeAndDefault: typeof assertFlagValueTypeAndDefault;
65
+ assertOptionalStringField: typeof assertOptionalStringField;
66
+ compareComparableVersions: typeof compareComparableVersions;
67
+ collectCommandCollisionWarnings: typeof collectCommandCollisionWarnings;
68
+ collectParserCollisionWarnings: typeof collectParserCollisionWarnings;
69
+ collectRendererCollisionWarnings: typeof collectRendererCollisionWarnings;
70
+ collectServiceCollisionWarnings: typeof collectServiceCollisionWarnings;
71
+ createExtensionApi: typeof createExtensionApi;
72
+ createRegistrationValidationError: typeof createRegistrationValidationError;
73
+ evaluatePmMaxVersionCompatibility: typeof evaluatePmMaxVersionCompatibility;
74
+ evaluatePmMinVersionCompatibility: typeof evaluatePmMinVersionCompatibility;
75
+ extractRegistrationValidationTrace: typeof extractRegistrationValidationTrace;
76
+ fingerprintPath: typeof fingerprintPath;
77
+ getRegistrationCounts: typeof getRegistrationCounts;
78
+ normalizeCommandDefinitionArguments: typeof normalizeCommandDefinitionArguments;
79
+ normalizeExtensionDeactivateTimeout: typeof normalizeExtensionDeactivateTimeout;
80
+ normalizeOptionalStringArrayField: typeof normalizeOptionalStringArrayField;
81
+ normalizeRegistrationRecord: typeof normalizeRegistrationRecord;
82
+ normalizeRegistrationRecordList: typeof normalizeRegistrationRecordList;
83
+ normalizeRuntimeRegistrationRecord: typeof normalizeRuntimeRegistrationRecord;
84
+ parseComparableVersion: typeof parseComparableVersion;
85
+ parseManifest: typeof parseExtensionManifestDocument;
86
+ readCurrentPmCliVersion: typeof readCurrentPmCliVersion;
87
+ readManagedExtensionSourcePackages: (extensionsRoot: string) => Promise<Map<string, string>>;
88
+ resolveExtensionImportHref: typeof resolveExtensionImportHref;
89
+ resolveCurrentPmCliVersion: typeof resolveCurrentPmCliVersion;
90
+ resolveCommandDefinitionAction: typeof resolveCommandDefinitionAction;
91
+ sanitizeRegistrationValue: typeof sanitizeRegistrationValue;
92
+ validateItemFieldDefinitions: typeof validateItemFieldDefinitions;
93
+ resetCurrentPmCliVersionCacheForTest: () => void;
94
94
  };
@@ -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]="79f32043-06a1-5929-ac52-bc4a003806fc")}catch{}})();import fs from"node:fs/promises";import path from"node:path";import{pathToFileURL}from"node:url";import{createRelationshipKindRegistry}from"../../sdk/relationships.js";import{pathExists}from"../fs/fs-utils.js";import{isPathWithinDirectory}from"../fs/path-utils.js";import{isHostOutputSuppressed,suppressHostOutput}from"../output/output-control.js";import{resolvePmPackageRootFromModule}from"../packages/root.js";import{asRecordLoose,resolveActivatablePropertyRecord}from"../shared/primitives.js";import{resolveGlobalPmRoot}from"../store/paths.js";import{captureExtensionActivationRollback}from"./activation-transaction.js";import{assertCommandDefinitionMetadataStrings}from"./command-visibility-tier.js";import{normalizeExtensionContributionInventory}from"./contribution-inventory.js";import{buildImportExportContext,resolveImportExportArtifactOutput}from"./exporter-output-contract.js";import{buildReadyExtensionCandidate}from"./extension-candidate.js";import{collectUnknownExtensionCapabilities,formatLegacyExtensionCapabilityAliasWarning,formatUnknownExtensionCapabilityWarning,isKnownExtensionCapability,normalizeNames}from"./extension-capability-aliases.js";import{evaluateExtensionPolicyForCapability,evaluateExtensionPolicyForExtension,evaluateExtensionPolicyForRegistration,hydrateExtensionPolicy,normalizeExtensionPolicy,serializeExtensionPolicy}from"./extension-policy.js";import{createEmptyExtensionCommandRegistry,createEmptyExtensionHookRegistry,createEmptyExtensionParserRegistry,createEmptyExtensionPreflightRegistry,createEmptyExtensionRegistrationRegistry,createEmptyExtensionRendererRegistry,createEmptyExtensionServiceRegistry}from"./extension-registries.js";import{normalizeCommandName}from"./extension-runtime-helpers.js";import{KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_SERVICE_NAMES,createDefaultExtensionGovernancePolicy}from"./extension-types.js";import{parseExtensionManifestDocument}from"./manifest-parser.js";import{formatExtensionManifestSchemaWarnings}from"./manifest-schema.js";import{snapshotExtensionModuleGraph}from"./module-graph-snapshot.js";import{collectPreflightCollisionWarnings,normalizePreflightOverride}from"./preflight-ownership.js";import{applyProjectProfileDefaults,assertFlagValueTypeAndDefault,normalizeCommandDefinitionArguments,normalizeFlagDefinitions,resolveCommandDefinitionAction,validateFlagDefinitions,validateItemFieldDefinitions,validateItemTypeDefinitions,validateMigrationDefinition,validateProjectProfileDefinition}from"./registration-contracts.js";import{assertOptionalStringField,normalizeOptionalStringArrayField}from"./registration-validation.js";import{assertHookHandler,assertNonEmptyRegistrationString,assertRegistrationFunction,attachRuntimeDefinition,cloneRuntimeRegistrationValue,createRegistrationValidationError,extractRegistrationValidationTrace,isExtensionServiceName,isOutputRendererFormat,normalizeRegistrationName,normalizeRegistrationRecord,normalizeRegistrationRecordList,normalizeRuntimeRegistrationRecord,sanitizeRegistrationValue,toRegistrationCommandPath,validateAssuranceMeasurementProviderDefinition}from"./registration-values.js";import{normalizeServiceOverrideOwnership}from"./service-ownership.js";import{compareComparableVersions,evaluatePmMaxVersionBound,evaluatePmMinVersionBound,parseComparableVersion}from"./version-compat.js";import{parseLegacyExtensionCapabilityAliasWarning,parseUnknownExtensionCapabilityWarning}from"./extension-capability-aliases.js";import{createEmptyExtensionCommandRegistry as createEmptyExtensionCommandRegistry2,createEmptyExtensionHookRegistry as createEmptyExtensionHookRegistry2,createEmptyExtensionParserRegistry as createEmptyExtensionParserRegistry2,createEmptyExtensionPreflightRegistry as createEmptyExtensionPreflightRegistry2,createEmptyExtensionRegistrationRegistry as createEmptyExtensionRegistrationRegistry2,createEmptyExtensionRendererRegistry as createEmptyExtensionRendererRegistry2,createEmptyExtensionServiceRegistry as createEmptyExtensionServiceRegistry2}from"./extension-registries.js";import{runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync}from"./extension-hook-runtime.js";export*from"./extension-types.js";import{DEFAULT_EXTENSION_PRIORITY,parseExtensionManifestDocument as parseExtensionManifestDocument2}from"./manifest-parser.js";let currentPmCliVersionPromise=null;const DEFAULT_EXTENSION_POLICY=Object.freeze(createDefaultExtensionGovernancePolicy());let extensionReloadEpoch=0;function nextExtensionReloadToken(seed=Date.now()){return extensionReloadEpoch+=1,`${extensionReloadEpoch}-${seed}`}function shouldEnable(name,enabled,disabled){return disabled.has(name)?!1:enabled.size===0?!0:enabled.has(name)}async function isCanonicalPathWithinDirectory(directory,targetPath){const[resolvedDirectory,resolvedTargetPath]=await Promise.all([fs.realpath(directory),fs.realpath(targetPath)]);return isPathWithinDirectory(resolvedDirectory,resolvedTargetPath)}function resolveExtensionRoots(pmRoot,cwd=process.cwd()){return{global:path.join(resolveGlobalPmRoot(cwd),"extensions"),project:path.join(pmRoot,"extensions")}}async function listExtensionDirectories(extensionsRoot){try{return(await fs.readdir(extensionsRoot,{withFileTypes:!0})).filter(entry=>entry.isDirectory()).map(entry=>entry.name).sort((a,b)=>a.localeCompare(b))}catch{return[]}}function summarizeCandidate(candidate){const summary={layer:candidate.layer,directory:candidate.directory,manifest_path:candidate.manifest_path,name:candidate.manifest.name,version:candidate.manifest.version,entry:candidate.manifest.entry,priority:candidate.manifest.priority,entry_path:candidate.entry_path,manifest_version:candidate.manifest.manifest_version,pm_min_version:candidate.manifest.pm_min_version,pm_max_version:candidate.manifest.pm_max_version,engines:candidate.manifest.engines,trusted:candidate.manifest.trusted,provenance:candidate.manifest.provenance,sandbox_profile:candidate.manifest.sandbox_profile,permissions:candidate.manifest.permissions,capabilities:[...candidate.manifest.capabilities],activation:candidate.manifest.activation?{commands:[...candidate.manifest.activation.commands]}:void 0,contributions:candidate.manifest.contributions??candidate.contributions};return candidate.source_package&&(summary.source_package=candidate.source_package),candidate.source_aliases&&(summary.source_aliases=[...candidate.source_aliases]),summary}function normalizeManagedSourcePackage(value){return typeof value=="string"&&value.trim().length>0?value.trim():void 0}async function readManagedExtensionSourcePackages(extensionsRoot){const packages=new Map;try{const parsed=JSON.parse(await fs.readFile(path.join(extensionsRoot,".managed-extensions.json"),"utf8")),entries=asRecordLoose(parsed)?.entries;if(!Array.isArray(entries))return packages;for(const entry of entries){if(typeof entry!="object"||entry===null)continue;const record=entry,sourcePackage=normalizeManagedSourcePackage(record.source?.package),aliases=[record.source?.input,record.source?.name,sourcePackage].map(value=>normalizeManagedSourcePackage(value)).filter(value=>value!==void 0),contributions=normalizeExtensionContributionInventory(record.contributions),identity={aliases:[...new Set(aliases)],...sourcePackage?{package_name:sourcePackage}:{},...contributions?{contributions}:{}};typeof record.directory=="string"&&record.directory.trim().length>0&&packages.set(`directory:${record.directory.trim()}`,identity),typeof record.name=="string"&&record.name.trim().length>0&&packages.set(`name:${record.name.trim()}`,identity)}}catch{return packages}return packages}function sortCandidates(candidates){return[...candidates].sort((left,right)=>{if(left.manifest.priority!==right.manifest.priority)return left.manifest.priority-right.manifest.priority;const byName=left.manifest.name.localeCompare(right.manifest.name);return byName!==0?byName:left.directory.localeCompare(right.directory)})}function buildEffectiveExtensions(globalCandidates,projectCandidates){const ordered=[...sortCandidates(globalCandidates),...sortCandidates(projectCandidates)],effective=[];for(const candidate of ordered){const existingIndex=effective.findIndex(entry=>entry.manifest.name===candidate.manifest.name);existingIndex>=0&&effective.splice(existingIndex,1),effective.push(candidate)}return effective}async function scanExtensionLayer(layer,extensionsRoot,enabled,disabled,pmMaxVersionExceededMode){const diagnostics=[],warnings=[],candidates=[],directories=await listExtensionDirectories(extensionsRoot),managedSourcePackages=await readManagedExtensionSourcePackages(extensionsRoot);for(const directory of directories){const scanned=await scanExtensionDirectory(layer,extensionsRoot,directory,enabled,disabled,managedSourcePackages,pmMaxVersionExceededMode);diagnostics.push(scanned.diagnostic),warnings.push(...scanned.warnings),scanned.candidate&&candidates.push(scanned.candidate)}return{diagnostics,warnings,candidates}}function emptyExtensionLayerScan(){return{diagnostics:[],warnings:[],candidates:[]}}function buildUnavailableExtensionScan(layer,directory,manifestPath,warning){return{diagnostic:{layer,directory,manifest_path:manifestPath,name:null,version:null,entry:null,priority:null,entry_path:null,enabled:null,status:"warn"},warnings:[warning],candidate:null}}function collectScannedExtensionWarnings(layer,manifest,rawManifest,entryWithinDirectory,entryExists,pmVersionCompatibility,pmMaxVersionCompatibility){const extensionWarnings=formatExtensionManifestSchemaWarnings(layer,manifest,rawManifest);Array.isArray(manifest.legacy_capability_aliases)&&manifest.legacy_capability_aliases.length>0&&extensionWarnings.push(formatLegacyExtensionCapabilityAliasWarning(layer,manifest.name,manifest.legacy_capability_aliases));for(const capability of collectUnknownExtensionCapabilities(manifest.capabilities))extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer,manifest.name,capability));return entryWithinDirectory?entryExists||extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`):extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`),pmVersionCompatibility.warning&&extensionWarnings.push(pmVersionCompatibility.warning),pmMaxVersionCompatibility.warning&&extensionWarnings.push(pmMaxVersionCompatibility.warning),extensionWarnings}async function scanExtensionDirectory(layer,extensionsRoot,directory,enabled,disabled,managedSourcePackages,pmMaxVersionExceededMode){const extensionDir=path.join(extensionsRoot,directory),manifestPath=path.join(extensionDir,"manifest.json");if(!await pathExists(manifestPath))return buildUnavailableExtensionScan(layer,directory,manifestPath,`extension_manifest_missing:${layer}:${directory}`);let manifest,rawManifest;try{const parsed=JSON.parse(await fs.readFile(manifestPath,"utf8"));rawManifest=asRecordLoose(parsed),manifest=parseExtensionManifestDocument(parsed)}catch{rawManifest=null,manifest=null}if(!manifest||!rawManifest)return buildUnavailableExtensionScan(layer,directory,manifestPath,`extension_manifest_invalid:${layer}:${directory}`);const entryPath=path.resolve(extensionDir,manifest.entry),entryWithinDirectoryByPath=isPathWithinDirectory(extensionDir,entryPath),entryExists=entryWithinDirectoryByPath?await pathExists(entryPath):!1,entryWithinDirectory=entryWithinDirectoryByPath&&entryExists?await isCanonicalPathWithinDirectory(extensionDir,entryPath):entryWithinDirectoryByPath,enabledForLoad=shouldEnable(manifest.name,enabled,disabled),pmVersionCompatibility=await evaluatePmMinVersionCompatibility(layer,manifest),pmMaxVersionCompatibility=await evaluatePmMaxVersionCompatibility(layer,manifest,pmMaxVersionExceededMode),extensionWarnings=collectScannedExtensionWarnings(layer,manifest,rawManifest,entryWithinDirectory,entryExists,pmVersionCompatibility,pmMaxVersionCompatibility),extensionReady=entryWithinDirectory&&entryExists&&pmVersionCompatibility.allowed&&pmMaxVersionCompatibility.allowed,sourceIdentity=managedSourcePackages.get(`directory:${directory}`)??managedSourcePackages.get(`name:${manifest.name}`);return{diagnostic:{layer,directory,manifest_path:manifestPath,name:manifest.name,version:manifest.version,entry:manifest.entry,priority:manifest.priority,entry_path:entryPath,enabled:enabledForLoad,status:extensionReady?"ok":"warn"},warnings:extensionWarnings,candidate:buildReadyExtensionCandidate({layer,directory,manifestPath,entryPath,manifest,sourceIdentity,extensionReady,enabledForLoad})}}async function discoverExtensions(options){const roots=resolveExtensionRoots(options.pmRoot,options.cwd??process.cwd()),configured_enabled=normalizeNames(options.settings.extensions.enabled),configured_disabled=normalizeNames(options.settings.extensions.disabled),policy=normalizeExtensionPolicy(options.settings),serializedPolicy=serializeExtensionPolicy(policy);if(options.noExtensions)return{disabled_by_flag:!0,roots,configured_enabled,configured_disabled,discovered:[],effective:[],warnings:[...policy.warnings],policy:serializedPolicy};const enabled=new Set(configured_enabled),disabled=new Set(configured_disabled),globalScan=options.ignoreGlobalExtensions===!0?emptyExtensionLayerScan():await scanExtensionLayer("global",roots.global,enabled,disabled,policy.pmMaxVersionExceededMode.global),projectScan=await scanExtensionLayer("project",roots.project,enabled,disabled,policy.pmMaxVersionExceededMode.project),policyWarnings=[...policy.warnings],effectiveCandidates=buildEffectiveExtensions(globalScan.candidates,projectScan.candidates),effective=[];for(const candidate of effectiveCandidates){const extensionRef={layer:candidate.layer,name:candidate.manifest.name,trusted:candidate.manifest.trusted===!0,provenanceVerified:candidate.manifest.provenance?.verified===!0,sandboxProfile:candidate.manifest.sandbox_profile,permissions:candidate.manifest.permissions&&typeof candidate.manifest.permissions=="object"?{fs_read:candidate.manifest.permissions.fs_read,fs_write:candidate.manifest.permissions.fs_write,network:candidate.manifest.permissions.network,env_read:candidate.manifest.permissions.env_read,env_write:candidate.manifest.permissions.env_write,process_spawn:candidate.manifest.permissions.process_spawn}:void 0},extensionDecision=evaluateExtensionPolicyForExtension(policy,extensionRef);if(extensionDecision.warning&&policyWarnings.push(extensionDecision.warning),!!extensionDecision.allowed){for(const capability of candidate.manifest.capabilities){const capabilityDecision=evaluateExtensionPolicyForCapability(policy,extensionRef,capability);capabilityDecision.warning&&policyWarnings.push(capabilityDecision.warning)}effective.push(summarizeCandidate(candidate))}}return{disabled_by_flag:!1,roots,configured_enabled,configured_disabled,discovered:[...globalScan.diagnostics,...projectScan.diagnostics],effective,warnings:[...new Set([...globalScan.warnings,...projectScan.warnings,...policyWarnings])],policy:serializedPolicy}}function formatUnknownError(error){return error instanceof Error&&error.message.trim().length>0?error.message:String(error)}async function readCurrentPmCliVersion(){try{const packageRoot=resolvePmPackageRootFromModule(import.meta.url,["../../.."]),raw=await fs.readFile(path.join(packageRoot,"package.json"),"utf8"),parsed=JSON.parse(raw);return typeof parsed.version=="string"&&parsed.version.trim().length>0?parsed.version.trim():null}catch{return null}}function resolveCurrentPmCliVersion(){return currentPmCliVersionPromise??=readCurrentPmCliVersion(),currentPmCliVersionPromise}function formatPmVersionCompatibilityWarning(layer,manifest,evaluation){const current=evaluation.current??"unknown";if(evaluation.kind==="pm_min_version")switch(evaluation.status){case"invalid":return`extension_pm_min_version_invalid:${layer}:${manifest.name}:required=${evaluation.required}`;case"unchecked":return`extension_pm_min_version_unchecked:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;case"unmet":return`extension_pm_min_version_unmet:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;default:return}switch(evaluation.status){case"invalid":return`extension_pm_max_version_invalid:${layer}:${manifest.name}:allowed=${evaluation.required}`;case"unchecked":return`extension_pm_max_version_unchecked:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;case"exceeded_warn":return`extension_pm_max_version_exceeded_warn:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;case"exceeded":return`extension_pm_max_version_exceeded:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;default:return}}async function evaluatePmMinVersionCompatibility(layer,manifest){if(manifest.pm_min_version===void 0)return{allowed:!0};const evaluation=evaluatePmMinVersionBound(manifest.pm_min_version,await resolveCurrentPmCliVersion()),warning=formatPmVersionCompatibilityWarning(layer,manifest,evaluation);return warning?{allowed:evaluation.allowed,warning}:{allowed:evaluation.allowed}}async function evaluatePmMaxVersionCompatibility(layer,manifest,exceededMode){if(manifest.pm_max_version===void 0)return{allowed:!0};const evaluation=evaluatePmMaxVersionBound(manifest.pm_max_version,await resolveCurrentPmCliVersion(),exceededMode),warning=formatPmVersionCompatibilityWarning(layer,manifest,evaluation);return warning?{allowed:evaluation.allowed,warning}:{allowed:evaluation.allowed}}async function fingerprintPath(pathToInspect){try{const stats=await fs.stat(pathToInspect);return`${Math.trunc(stats.mtimeMs)}-${stats.size}`}catch{return"missing"}}async function resolveExtensionImportHref(extension,options){let importEntryPath=extension.entry_path;options.module_graph_snapshot_root&&(importEntryPath=await snapshotExtensionModuleGraph(options.module_graph_snapshot_root,extension));const baseUrl=new URL(pathToFileURL(importEntryPath).href);if(!(options.cache_bust===!0||typeof options.reload_token=="string"))return baseUrl.href;const[entryFingerprint,manifestFingerprint]=await Promise.all([fingerprintPath(extension.entry_path),fingerprintPath(extension.manifest_path)]),reloadToken=options.reload_token??nextExtensionReloadToken();return baseUrl.searchParams.set("pm_ext_reload",reloadToken),baseUrl.searchParams.set("pm_ext_entry",entryFingerprint),baseUrl.searchParams.set("pm_ext_manifest",manifestFingerprint),baseUrl.href}async function loadExtensions(options){const discovery=await discoverExtensions(options),loaded=[],failed=[],warnings=[...discovery.warnings];if(discovery.disabled_by_flag)return{...discovery,warnings,loaded,failed};const extensionsToLoad=typeof options.extensionFilter=="function"?discovery.effective.filter(options.extensionFilter):discovery.effective;for(const extension of extensionsToLoad)try{const module=await import(await resolveExtensionImportHref(extension,options));loaded.push({...extension,module})}catch(error){warnings.push(`extension_load_failed:${extension.layer}:${extension.name}`),failed.push({layer:extension.layer,name:extension.name,entry_path:extension.entry_path,error:formatUnknownError(error)})}return{...discovery,warnings,loaded,failed}}const DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS=5e3,MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS=2147483647;function toActivatableExtension(source){const activatable={activate:source.activate.bind(source)};if(typeof source.deactivate=="function"){const deactivate=source.deactivate;activatable.deactivate=deactivate.bind(source)}return activatable}function resolveActivatableExtension(module){const activatableRecord=resolveActivatablePropertyRecord(module);return activatableRecord?toActivatableExtension(activatableRecord):null}async function deactivateExtensions(loadResult,activationResult,options={}){const timeoutMs=normalizeExtensionDeactivateTimeout(options?.deactivate_timeout_ms),failedActivationKeys=new Set((activationResult?.failed??[]).map(entry=>`${entry.layer}:${entry.name}`)),targets=[];for(const extension of loadResult.loaded){if(failedActivationKeys.has(`${extension.layer}:${extension.name}`))continue;const activatable=resolveActivatableExtension(extension.module);!activatable||typeof activatable.deactivate!="function"||targets.push({extension,deactivate:activatable.deactivate})}const outcomes=await Promise.all(targets.map(async({extension,deactivate})=>{try{return await runExtensionDeactivateWithTimeout(deactivate,timeoutMs),{ok:!0}}catch(error){return{ok:!1,layer:extension.layer,name:extension.name,error:formatUnknownError(error)}}})),warnings=[],failed=[];let deactivated=0;for(const outcome of outcomes){if(outcome.ok){deactivated+=1;continue}warnings.push(`extension_deactivate_failed:${outcome.layer}:${outcome.name}`),failed.push({layer:outcome.layer,name:outcome.name,error:outcome.error})}return{deactivated,warnings,failed}}function normalizeExtensionDeactivateTimeout(rawTimeout){return typeof rawTimeout!="number"||rawTimeout<0?DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS:rawTimeout===0||rawTimeout===1/0?0:Number.isFinite(rawTimeout)?Math.min(MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS,Math.max(1,Math.floor(rawTimeout))):DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS}async function runExtensionDeactivateWithTimeout(deactivate,timeoutMs){if(timeoutMs===0){await deactivate();return}let timeoutHandle;try{const deactivatePromise=Promise.resolve().then(()=>deactivate());deactivatePromise.catch(()=>{}),await Promise.race([deactivatePromise,new Promise((_,reject)=>{timeoutHandle=setTimeout(()=>{reject(new Error(`extension deactivate timed out after ${timeoutMs}ms`))},timeoutMs),timeoutHandle.unref?.()})])}finally{clearTimeout(timeoutHandle)}}function getDeclaredExtensionCapabilities(extension){if(!Array.isArray(extension.capabilities))return null;const declared=new Set;for(const capability of extension.capabilities){const normalized=capability.trim().toLowerCase();isKnownExtensionCapability(normalized)&&declared.add(normalized)}return declared}function assertExtensionCapability(extension,capability,method){const declared=getDeclaredExtensionCapabilities(extension);if(declared!==null&&!declared.has(capability))throw createRegistrationValidationError(`${method} requires capability '${capability}' in extension manifest capabilities`,{method,registration_index:-1,capability,missing_capability:capability,expected_schema:`"capabilities": [..., "${capability}"]`,received:extension.capabilities,hint:`Add "${capability}" to ${extension.name} manifest capabilities, or remove the ${method} registration call.`})}function buildExtensionSelfIdentity(extension){return Object.freeze({name:extension.name,layer:extension.layer,version:extension.version,capabilities:Object.freeze((extension.capabilities??[]).filter(capability=>KNOWN_EXTENSION_CAPABILITIES.includes(capability))),pm_min_version:extension.pm_min_version,pm_max_version:extension.pm_max_version,source_package:extension.source_package})}function buildPolicyExtensionRef(extension){return{layer:extension.layer,name:extension.name,trusted:extension.trusted===!0,provenanceVerified:extension.provenance?.verified===!0,sandboxProfile:extension.sandbox_profile,permissions:extension.permissions&&typeof extension.permissions=="object"?{fs_read:extension.permissions.fs_read,fs_write:extension.permissions.fs_write,network:extension.permissions.network,env_read:extension.permissions.env_read,env_write:extension.permissions.env_write,process_spawn:extension.permissions.process_spawn}:void 0}}class ExtensionApiRegistrar{extension;hooks;#loadedExtension;#extensionRef;#hookRegistry;#commandRegistry;#parserRegistry;#preflightRegistry;#serviceRegistry;#rendererRegistry;#registrationRegistry;#activationWarnings;#activationFailures;#policy;constructor(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy){this.#loadedExtension=extension,this.extension=buildExtensionSelfIdentity(extension),this.#extensionRef=buildPolicyExtensionRef(extension),this.#hookRegistry=hooks,this.#commandRegistry=commands,this.#parserRegistry=parsers,this.#preflightRegistry=preflight,this.#serviceRegistry=services,this.#rendererRegistry=renderers,this.#registrationRegistry=registrations,this.#activationWarnings=activationWarnings,this.#activationFailures=activationFailures,this.#policy=policy,this.registerCommand=this.registerCommand.bind(this),this.registerParser=this.registerParser.bind(this),this.registerPreflight=this.registerPreflight.bind(this),this.registerService=this.registerService.bind(this),this.registerFlags=this.registerFlags.bind(this),this.registerItemFields=this.registerItemFields.bind(this),this.registerItemTypes=this.registerItemTypes.bind(this),this.registerRelationshipKinds=this.registerRelationshipKinds.bind(this),this.registerMigration=this.registerMigration.bind(this),this.registerProfile=this.registerProfile.bind(this),this.registerRenderer=this.registerRenderer.bind(this),this.registerImporter=this.registerImporter.bind(this),this.registerExporter=this.registerExporter.bind(this),this.registerSearchProvider=this.registerSearchProvider.bind(this),this.registerVectorStoreAdapter=this.registerVectorStoreAdapter.bind(this),this.registerAssuranceMeasurementProvider=this.registerAssuranceMeasurementProvider.bind(this),this.hooks={beforeCommand:hook=>this.registerBeforeCommand(hook),beforeMutation:hook=>this.registerBeforeMutation(hook),afterCommand:hook=>this.registerAfterCommand(hook),onWrite:hook=>this.registerOnWrite(hook),onRead:hook=>this.registerOnRead(hook),onIndex:hook=>this.registerOnIndex(hook)}}allowRegistration(surface,method,capability,details){const decision=evaluateExtensionPolicyForRegistration(this.#policy,this.#extensionRef,surface,method,capability,details);return decision.warning&&this.#activationWarnings.push(decision.warning),decision.allowed}registerCommandTrace(mode,command,expectedSchema,received,hint){return{method:"registerCommand",registration_index:mode==="override"?this.#commandRegistry.overrides.length:this.#commandRegistry.handlers.length,command,expected_schema:expectedSchema,received:sanitizeRegistrationValue(received),hint}}registerCommandOverride(command,override){const normalizedCommand=normalizeCommandName(command);if(normalizedCommand.length===0)throw createRegistrationValidationError("registerCommand requires a non-empty command name",this.registerCommandTrace("override",command,'registerCommand("<command>", (context) => unknown)',command,"Provide a non-empty command path as the first argument."));if(typeof override!="function"){const trace=this.registerCommandTrace("override",normalizedCommand,'registerCommand("<command>", (context) => unknown)',override,"Provide a function as the second registerCommand argument.");throw createRegistrationValidationError(`registerCommand requires an override function when command name is provided (command="${normalizedCommand}", registration_index=${trace.registration_index})`,trace)}this.allowRegistration("commands.override","registerCommand","commands",{command:normalizedCommand})&&this.#commandRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:override})}resolveCommandDefinitionRunHandler(definition,normalizedCommand){const runHandler=typeof definition.run=="function"?definition.run:void 0,legacyHandler=typeof definition.handler=="function"?definition.handler:void 0;return!runHandler&&legacyHandler&&this.#activationWarnings.push(`extension_command_definition_legacy_handler_alias:${this.#loadedExtension.layer}:${this.#loadedExtension.name}:${normalizedCommand}`),runHandler??legacyHandler}registerCommandDefinition(definition){if(typeof definition!="object"||definition===null)throw createRegistrationValidationError("registerCommand requires a command definition object",this.registerCommandTrace("definition",void 0,"{ name: string; run: (context) => unknown; }",definition,'Use registerCommand({ name: "command path", run: (context) => ... }).'));if(typeof definition.name!="string")throw createRegistrationValidationError("registerCommand requires a command definition name",this.registerCommandTrace("definition",void 0,"{ name: string; run: (context) => unknown; }",definition,"Set command definition.name to a non-empty string command path."));const normalizedCommand=normalizeCommandName(definition.name);if(normalizedCommand.length===0)throw createRegistrationValidationError("registerCommand requires a non-empty command definition name",this.registerCommandTrace("definition",definition.name,"{ name: string; run: (context) => unknown; }",definition,"Ensure command definition.name contains a non-empty command path."));const resolvedHandler=this.resolveCommandDefinitionRunHandler(definition,normalizedCommand);if(typeof resolvedHandler!="function"){const trace=this.registerCommandTrace("definition",normalizedCommand,"{ name: string; run: (context) => unknown; }",resolvedHandler,"Define command definition.run as a function.");throw createRegistrationValidationError(`registerCommand requires a command definition run handler (command="${normalizedCommand}", registration_index=${trace.registration_index})`,trace)}try{assertCommandDefinitionMetadataStrings(definition);const action=resolveCommandDefinitionAction(normalizedCommand,definition.action);if(!this.allowRegistration("commands.handler","registerCommand","commands",{command:normalizedCommand,action}))return;const description=definition.description?.trim(),intent=definition.intent?.trim(),examples=normalizeOptionalStringArrayField("registerCommand definition.examples",definition.examples),failureHints=normalizeOptionalStringArrayField("registerCommand definition.failure_hints",definition.failure_hints),argumentsDefinition=normalizeCommandDefinitionArguments(definition.arguments);definition.flags!==void 0&&(assertExtensionCapability(this.#loadedExtension,"schema","registerCommand flags"),this.allowRegistration("schema.flags","registerCommand flags","schema")&&(validateFlagDefinitions(definition.flags),this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:normalizedCommand,flags:normalizeFlagDefinitions("registerCommand definition.flags",definition.flags)})));const registration={layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,source_package:this.#loadedExtension.source_package,command:normalizedCommand,action,examples,failure_hints:failureHints,arguments:argumentsDefinition,tier:definition.tier??"standard",family:definition.family??"extensions"};description&&(registration.description=description),intent&&(registration.intent=intent),this.#registrationRegistry.commands.push(registration)}catch(error){const reason=formatUnknownError(error),trace=this.registerCommandTrace("definition",normalizedCommand,"{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }",definition,reason),validationError=createRegistrationValidationError(`registerCommand definition metadata invalid (command="${normalizedCommand}", registration_index=${trace.registration_index}): ${reason}`,trace);this.#activationWarnings.push(`extension_command_quarantined:${this.#loadedExtension.layer}:${this.#loadedExtension.name}:${normalizedCommand}`),this.#activationFailures.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,entry_path:this.#loadedExtension.entry_path,error:validationError.message,trace});return}this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:resolvedHandler})}registerCommand(commandOrDefinition,override){if(assertExtensionCapability(this.#loadedExtension,"commands","registerCommand"),typeof commandOrDefinition=="string"){this.registerCommandOverride(commandOrDefinition,override);return}this.registerCommandDefinition(commandOrDefinition)}registerParser(command,override){if(assertExtensionCapability(this.#loadedExtension,"parser","registerParser"),!this.allowRegistration("parser.override","registerParser","parser"))return;const normalizedCommand=normalizeCommandName(assertNonEmptyRegistrationString("registerParser command",command));assertRegistrationFunction("registerParser override",override),this.#parserRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:override})}registerPreflight(override){if(assertExtensionCapability(this.#loadedExtension,"preflight","registerPreflight"),!this.allowRegistration("preflight.override","registerPreflight","preflight"))return;const normalized=normalizePreflightOverride(override);this.#preflightRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,...normalized})}registerService(service,override,ownership={}){assertExtensionCapability(this.#loadedExtension,"services","registerService");const normalizedService=String(service).trim().toLowerCase();if(!isExtensionServiceName(normalizedService))throw new TypeError(`registerService service must be one of: ${KNOWN_EXTENSION_SERVICE_NAMES.join(", ")}`);this.allowRegistration("services.override","registerService","services",{service:normalizedService})&&(assertRegistrationFunction("registerService override",override),this.#serviceRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,service:normalizedService,run:override,...normalizeServiceOverrideOwnership(ownership)?{passThrough:!0}:{}}))}registerRenderer(format,renderer,ownership={}){if(assertExtensionCapability(this.#loadedExtension,"renderers","registerRenderer"),!this.allowRegistration("renderers.override","registerRenderer","renderers"))return;if(typeof renderer!="function")throw new TypeError("registerRenderer requires a renderer function");const normalizedFormat=String(format).trim().toLowerCase();if(!isOutputRendererFormat(normalizedFormat))throw new Error(`registerRenderer format must be toon|json, received: ${String(format)}`);if(ownership.resultDiscriminator!==void 0&&typeof ownership.resultDiscriminator!="function")throw new TypeError("registerRenderer ownership.resultDiscriminator must be a function when provided");const commands=[...new Set((ownership.commands??[]).map(command=>{if(typeof command!="string"||command.trim().length===0)throw new TypeError("registerRenderer ownership.commands must contain non-empty command paths");return normalizeCommandName(command)}))];this.#rendererRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,format:normalizedFormat,run:renderer,commands,...ownership.resultDiscriminator?{resultDiscriminator:ownership.resultDiscriminator}:{}})}registerFlags(targetCommand,flags){if(assertExtensionCapability(this.#loadedExtension,"schema","registerFlags"),!this.allowRegistration("schema.flags","registerFlags","schema"))return;const normalizedTargetCommand=normalizeCommandName(assertNonEmptyRegistrationString("registerFlags targetCommand",targetCommand));validateFlagDefinitions(flags);const normalizedFlags=normalizeFlagDefinitions("registerFlags flags",flags);if(normalizedFlags.length===0)throw new TypeError("registerFlags requires at least one flag definition");this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:normalizedTargetCommand,flags:normalizedFlags})}registerItemFields(fields){if(assertExtensionCapability(this.#loadedExtension,"schema","registerItemFields"),!this.allowRegistration("schema.itemfields","registerItemFields","schema"))return;validateItemFieldDefinitions(fields);const normalizedFields=normalizeRegistrationRecordList("registerItemFields fields",fields);if(normalizedFields.length===0)throw new TypeError("registerItemFields requires at least one field definition");this.#registrationRegistry.item_fields.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,fields:normalizedFields})}registerItemTypes(types){if(assertExtensionCapability(this.#loadedExtension,"schema","registerItemTypes"),!this.allowRegistration("schema.itemtypes","registerItemTypes","schema"))return;validateItemTypeDefinitions(types);const normalizedTypes=normalizeRegistrationRecordList("registerItemTypes types",types);if(normalizedTypes.length===0)throw new TypeError("registerItemTypes requires at least one type definition");this.#registrationRegistry.item_types.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,types:normalizedTypes})}registerRelationshipKinds(definitions){if(assertExtensionCapability(this.#loadedExtension,"schema","registerRelationshipKinds"),!this.allowRegistration("schema.relationshipkinds","registerRelationshipKinds","schema"))return;if(!Array.isArray(definitions))throw new TypeError("registerRelationshipKinds definitions requires an array of object definitions");if(definitions.length===0)throw new TypeError("registerRelationshipKinds requires at least one definition");const registry=createRelationshipKindRegistry();for(const registration of this.#registrationRegistry.relationship_kinds)for(const definition of registration.definitions)registry.register(definition);const validated=definitions.map(definition=>(registry.register(definition),registry.require(definition.kind)));this.#registrationRegistry.relationship_kinds.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definitions:validated})}registerMigration(definition){if(assertExtensionCapability(this.#loadedExtension,"schema","registerMigration"),!this.allowRegistration("schema.migrations","registerMigration","schema"))return;validateMigrationDefinition(definition);const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerMigration definition",definition);this.#registrationRegistry.migrations.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerMigration definition",definition)},runtimeDefinition))}registerProfile(profile){if(assertExtensionCapability(this.#loadedExtension,"schema","registerProfile"),!this.allowRegistration("schema.profiles","registerProfile","schema"))return;const snapshot=cloneRuntimeRegistrationValue(profile);validateProjectProfileDefinition(snapshot),this.#registrationRegistry.profiles.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,profile:applyProjectProfileDefaults(snapshot)})}registerImportExportCommandFlags(method,commandPath,resolvedOptions){resolvedOptions.flags!==void 0&&(assertExtensionCapability(this.#loadedExtension,"schema",`${method} options.flags`),this.allowRegistration("schema.flags",`${method} options.flags`,"schema")&&(validateFlagDefinitions(resolvedOptions.flags),this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:commandPath,flags:normalizeFlagDefinitions(`${method} options.flags`,resolvedOptions.flags)})))}applyImportExportCommandMetadata(method,commandPath,options){if(options!==void 0&&(typeof options!="object"||options===null||Array.isArray(options)))throw new TypeError(`${method} options must be an object when provided`);const defaultDescription=`${method==="registerImporter"?"Import":"Export"} items with the registered extension adapter.`,defaultArguments=[{name:"file",required:!1,description:"Optional input or output file path."}],resolvedOptions={...options,description:options?.description??defaultDescription,arguments:options?.arguments??defaultArguments},output=resolveImportExportArtifactOutput(method,resolvedOptions,options?.description!==void 0);assertOptionalStringField(`${method} options.action`,resolvedOptions.action),assertOptionalStringField(`${method} options.description`,resolvedOptions.description),assertOptionalStringField(`${method} options.intent`,resolvedOptions.intent);const action=resolveCommandDefinitionAction(commandPath,resolvedOptions.action),examples=normalizeOptionalStringArrayField(`${method} options.examples`,resolvedOptions.examples),failureHints=normalizeOptionalStringArrayField(`${method} options.failure_hints`,resolvedOptions.failure_hints),argumentsDefinition=normalizeCommandDefinitionArguments(resolvedOptions.arguments);this.registerImportExportCommandFlags(method,commandPath,resolvedOptions);const registration={layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,source_package:this.#loadedExtension.source_package,command:commandPath,action,examples,failure_hints:failureHints,arguments:argumentsDefinition},description=resolvedOptions.description?.trim();description&&(registration.description=description);const intent=resolvedOptions.intent?.trim();return intent&&(registration.intent=intent),this.#registrationRegistry.commands.push(registration),output}registerImporter(name,importer,options){if(assertExtensionCapability(this.#loadedExtension,"importers","registerImporter"),!this.allowRegistration("importers.importer","registerImporter","importers"))return;const normalizedName=normalizeRegistrationName(assertNonEmptyRegistrationString("registerImporter name",name));assertRegistrationFunction("registerImporter importer",importer);const commandPath=toRegistrationCommandPath(normalizedName,"import");this.applyImportExportCommandMetadata("registerImporter",commandPath,options),this.#registrationRegistry.importers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,importer:normalizedName}),this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:commandPath,run:async context=>importer(buildImportExportContext(context,normalizedName,"import"))})}registerExporter(name,exporter,options){if(assertExtensionCapability(this.#loadedExtension,"importers","registerExporter"),!this.allowRegistration("importers.exporter","registerExporter","importers"))return;const normalizedName=normalizeRegistrationName(assertNonEmptyRegistrationString("registerExporter name",name));assertRegistrationFunction("registerExporter exporter",exporter);const commandPath=toRegistrationCommandPath(normalizedName,"export"),output=this.applyImportExportCommandMetadata("registerExporter",commandPath,options);this.#registrationRegistry.exporters.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,exporter:normalizedName,...output===void 0?{}:{output}}),this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:commandPath,run:async context=>{const result=await exporter(buildImportExportContext(context,normalizedName,"export"));return output?.receipt==="suppress"&&!isHostOutputSuppressed(result)?suppressHostOutput(result):result}})}registerSearchProvider(provider){if(assertExtensionCapability(this.#loadedExtension,"search","registerSearchProvider"),!this.allowRegistration("search.provider","registerSearchProvider","search"))return;const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerSearchProvider provider",provider);this.#registrationRegistry.search_providers.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerSearchProvider provider",provider)},runtimeDefinition))}registerVectorStoreAdapter(adapter){if(assertExtensionCapability(this.#loadedExtension,"search","registerVectorStoreAdapter"),!this.allowRegistration("search.vectorstore","registerVectorStoreAdapter","search"))return;const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerVectorStoreAdapter adapter",adapter);this.#registrationRegistry.vector_store_adapters.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerVectorStoreAdapter adapter",adapter)},runtimeDefinition))}registerAssuranceMeasurementProvider(provider){if(assertExtensionCapability(this.#loadedExtension,"services","registerAssuranceMeasurementProvider"),!this.allowRegistration("services.assuranceprovider","registerAssuranceMeasurementProvider","services"))return;if(validateAssuranceMeasurementProviderDefinition(provider),provider.network&&this.#loadedExtension.permissions?.network!==!0)throw new TypeError("registerAssuranceMeasurementProvider network provider requires permissions.network=true");const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerAssuranceMeasurementProvider provider",provider);this.#registrationRegistry.assurance_providers.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,network_permission:this.#loadedExtension.permissions?.network===!0,definition:normalizeRegistrationRecord("registerAssuranceMeasurementProvider provider",provider)},runtimeDefinition))}registerBeforeCommand(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.beforeCommand"),this.allowRegistration("hooks.beforecommand","api.hooks.beforeCommand","hooks")&&(assertHookHandler("beforeCommand",hook),this.#hookRegistry.beforeCommand.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerBeforeMutation(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.beforeMutation"),this.allowRegistration("hooks.beforemutation","api.hooks.beforeMutation","hooks")&&(assertHookHandler("beforeMutation",hook),this.#hookRegistry.beforeMutation.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerAfterCommand(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.afterCommand"),this.allowRegistration("hooks.aftercommand","api.hooks.afterCommand","hooks")&&(assertHookHandler("afterCommand",hook),this.#hookRegistry.afterCommand.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnWrite(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onWrite"),this.allowRegistration("hooks.onwrite","api.hooks.onWrite","hooks")&&(assertHookHandler("onWrite",hook),this.#hookRegistry.onWrite.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnRead(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onRead"),this.allowRegistration("hooks.onread","api.hooks.onRead","hooks")&&(assertHookHandler("onRead",hook),this.#hookRegistry.onRead.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnIndex(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onIndex"),this.allowRegistration("hooks.onindex","api.hooks.onIndex","hooks")&&(assertHookHandler("onIndex",hook),this.#hookRegistry.onIndex.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}}function createExtensionApi(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy){return new ExtensionApiRegistrar(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy)}function getRegistrationCounts(registrations){const commandCount=registrations.commands.length,flagCount=registrations.flags.reduce((total,entry)=>total+entry.flags.length,0),itemFieldCount=registrations.item_fields.reduce((total,entry)=>total+entry.fields.length,0),itemTypeCount=registrations.item_types.reduce((total,entry)=>total+entry.types.length,0),relationshipKindCount=(registrations.relationship_kinds??[]).reduce((total,entry)=>total+entry.definitions.length,0);return{commands:commandCount,flags:flagCount,item_fields:itemFieldCount,item_types:itemTypeCount,...relationshipKindCount>0?{relationship_kinds:relationshipKindCount}:{},migrations:registrations.migrations.length,profiles:registrations.profiles.length,importers:registrations.importers.length,exporters:registrations.exporters.length,search_providers:registrations.search_providers.length,vector_store_adapters:registrations.vector_store_adapters.length,...(registrations.assurance_providers?.length??0)>0?{assurance_providers:registrations.assurance_providers.length}:{}}}function collectCommandCollisionWarnings(commands){const warnings=[],collectByCommand=(entries,codePrefix)=>{const grouped=new Map;for(const entry of entries){const bucket=grouped.get(entry.command)??[];bucket.push(entry),grouped.set(entry.command,bucket)}for(const command of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(command);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`${codePrefix}:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}};collectByCommand(commands.handlers,"extension_command_handler_collision"),collectByCommand(commands.overrides,"extension_command_override_collision");const handlerCommands=new Set(commands.handlers.map(entry=>entry.command)),overlapCommands=[...new Set(commands.overrides.map(entry=>entry.command))].filter(command=>handlerCommands.has(command));overlapCommands.sort((left,right)=>left.localeCompare(right));for(const command of overlapCommands){const handlers=commands.handlers.filter(entry=>entry.command===command),overrides=commands.overrides.filter(entry=>entry.command===command);for(const override of overrides)for(const handler of handlers)warnings.push(`extension_command_override_handler_overlap:${command}:${override.layer}:${override.name}:${handler.layer}:${handler.name}`)}return warnings}function collectRendererCollisionWarnings(renderers){const grouped=new Map;for(const entry of renderers.overrides){const bucket=grouped.get(entry.format)??[];bucket.push(entry),grouped.set(entry.format,bucket)}const warnings=[];for(const format of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(format);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))winner.commands?.length&&displaced.commands?.length&&!displaced.commands.some(command=>winner.commands?.includes(command))||warnings.push(`extension_renderer_collision:${format}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}function collectParserCollisionWarnings(parsers){const warnings=[],grouped=new Map;for(const entry of parsers.overrides){const bucket=grouped.get(entry.command)??[];bucket.push(entry),grouped.set(entry.command,bucket)}for(const command of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(command);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`extension_parser_override_collision:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}const CHAINED_SERVICE_NAMES=new Set(["output_format"]);function collectServiceCollisionWarnings(services){const warnings=[],grouped=new Map;for(const entry of services.overrides){const bucket=grouped.get(entry.service)??[];bucket.push(entry),grouped.set(entry.service,bucket)}for(const service of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(service);if(bucket.length<=1||CHAINED_SERVICE_NAMES.has(service))continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`extension_service_override_collision:${service}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}async function activateExtensions(loadResult){const policy=hydrateExtensionPolicy(loadResult.policy??DEFAULT_EXTENSION_POLICY),hooks=createEmptyExtensionHookRegistry(),commands=createEmptyExtensionCommandRegistry(),parsers=createEmptyExtensionParserRegistry(),preflight=createEmptyExtensionPreflightRegistry(),services=createEmptyExtensionServiceRegistry(),renderers=createEmptyExtensionRendererRegistry(),registrations=createEmptyExtensionRegistrationRegistry(),failed=[],warnings=[];for(const extension of loadResult.loaded){const activatable=resolveActivatableExtension(extension.module);if(!activatable)continue;const failedBeforeActivation=failed.length,rollbackPartialActivation=captureExtensionActivationRollback({hooks,commands,parsers,preflight,services,renderers,registrations});try{await activatable.activate(createExtensionApi(extension,hooks,commands,parsers,preflight,services,renderers,registrations,warnings,failed,policy)),failed.length>failedBeforeActivation&&(rollbackPartialActivation(),warnings.push(`extension_activation_rolled_back:${extension.layer}:${extension.name}`))}catch(error){rollbackPartialActivation(),warnings.push(`extension_activate_failed:${extension.layer}:${extension.name}`);const trace=extractRegistrationValidationTrace(error);failed.push({layer:extension.layer,name:extension.name,entry_path:extension.entry_path,error:formatUnknownError(error),trace})}}const collisionWarnings=[...collectCommandCollisionWarnings(commands),...collectParserCollisionWarnings(parsers),...collectPreflightCollisionWarnings(preflight),...collectServiceCollisionWarnings(services),...collectRendererCollisionWarnings(renderers)],mergedWarnings=[...new Set([...warnings,...collisionWarnings])];return{hooks,commands,parsers,preflight,services,renderers,registrations,failed,warnings:mergedWarnings,hook_counts:{before_command:hooks.beforeCommand.length,before_mutation:hooks.beforeMutation.length,after_command:hooks.afterCommand.length,on_write:hooks.onWrite.length,on_read:hooks.onRead.length,on_index:hooks.onIndex.length},command_override_count:commands.overrides.length,command_handler_count:commands.handlers.length,parser_override_count:parsers.overrides.length,preflight_override_count:preflight.overrides.length,service_override_count:services.overrides.length,renderer_override_count:renderers.overrides.length,registration_counts:getRegistrationCounts(registrations)}}const _testOnlyLoader={assertFlagValueTypeAndDefault,assertOptionalStringField,compareComparableVersions,collectCommandCollisionWarnings,collectParserCollisionWarnings,collectRendererCollisionWarnings,collectServiceCollisionWarnings,createExtensionApi,createRegistrationValidationError,evaluatePmMaxVersionCompatibility,evaluatePmMinVersionCompatibility,extractRegistrationValidationTrace,fingerprintPath,getRegistrationCounts,normalizeCommandDefinitionArguments,normalizeExtensionDeactivateTimeout,normalizeOptionalStringArrayField,normalizeRegistrationRecord,normalizeRegistrationRecordList,normalizeRuntimeRegistrationRecord,parseComparableVersion,parseManifest:parseExtensionManifestDocument,readCurrentPmCliVersion,readManagedExtensionSourcePackages:async extensionsRoot=>new Map([...await readManagedExtensionSourcePackages(extensionsRoot)].filter(entry=>typeof entry[1].package_name=="string").map(([key,identity])=>[key,identity.package_name])),resolveExtensionImportHref,resolveCurrentPmCliVersion,resolveCommandDefinitionAction,sanitizeRegistrationValue,validateItemFieldDefinitions,resetCurrentPmCliVersionCacheForTest:()=>{currentPmCliVersionPromise=null}};export{DEFAULT_EXTENSION_PRIORITY,_testOnlyLoader,activateExtensions,createEmptyExtensionCommandRegistry2 as createEmptyExtensionCommandRegistry,createEmptyExtensionHookRegistry2 as createEmptyExtensionHookRegistry,createEmptyExtensionParserRegistry2 as createEmptyExtensionParserRegistry,createEmptyExtensionPreflightRegistry2 as createEmptyExtensionPreflightRegistry,createEmptyExtensionRegistrationRegistry2 as createEmptyExtensionRegistrationRegistry,createEmptyExtensionRendererRegistry2 as createEmptyExtensionRendererRegistry,createEmptyExtensionServiceRegistry2 as createEmptyExtensionServiceRegistry,deactivateExtensions,discoverExtensions,isCanonicalPathWithinDirectory,loadExtensions,nextExtensionReloadToken,parseExtensionManifestDocument2 as parseExtensionManifestDocument,parseLegacyExtensionCapabilityAliasWarning,parseUnknownExtensionCapabilityWarning,resolveExtensionRoots,runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync};
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]="187f03b7-1a62-500c-9ebf-4d5a053afa74")}catch{}})();import fs from"node:fs/promises";import path from"node:path";import{pathToFileURL}from"node:url";import{createRelationshipKindRegistry}from"../../sdk/relationships.js";import{pathExists}from"../fs/fs-utils.js";import{isPathWithinDirectory}from"../fs/path-utils.js";import{isHostOutputSuppressed,suppressHostOutput}from"../output/output-control.js";import{resolvePmPackageRootFromModule}from"../packages/root.js";import{asRecordLoose,resolveActivatablePropertyRecord}from"../shared/primitives.js";import{resolveGlobalPmRoot}from"../store/paths.js";import{captureExtensionActivationRollback}from"./activation-transaction.js";import{assertCommandDefinitionMetadataStrings}from"./command-visibility-tier.js";import{normalizeExtensionReadOutput}from"./read-output-contract.js";import{normalizeExtensionContributionInventory}from"./contribution-inventory.js";import{buildImportExportContext,resolveImportExportArtifactOutput}from"./exporter-output-contract.js";import{buildReadyExtensionCandidate}from"./extension-candidate.js";import{collectUnknownExtensionCapabilities,formatLegacyExtensionCapabilityAliasWarning,formatUnknownExtensionCapabilityWarning,isKnownExtensionCapability,normalizeNames}from"./extension-capability-aliases.js";import{evaluateExtensionPolicyForCapability,evaluateExtensionPolicyForExtension,evaluateExtensionPolicyForRegistration,hydrateExtensionPolicy,normalizeExtensionPolicy,serializeExtensionPolicy}from"./extension-policy.js";import{createEmptyExtensionCommandRegistry,createEmptyExtensionHookRegistry,createEmptyExtensionParserRegistry,createEmptyExtensionPreflightRegistry,createEmptyExtensionRegistrationRegistry,createEmptyExtensionRendererRegistry,createEmptyExtensionServiceRegistry}from"./extension-registries.js";import{normalizeCommandName}from"./extension-runtime-helpers.js";import{KNOWN_EXTENSION_CAPABILITIES,KNOWN_EXTENSION_SERVICE_NAMES,createDefaultExtensionGovernancePolicy}from"./extension-types.js";import{parseExtensionManifestDocument}from"./manifest-parser.js";import{formatExtensionManifestSchemaWarnings}from"./manifest-schema.js";import{snapshotExtensionModuleGraph}from"./module-graph-snapshot.js";import{collectPreflightCollisionWarnings,normalizePreflightOverride}from"./preflight-ownership.js";import{applyProjectProfileDefaults,assertFlagValueTypeAndDefault,normalizeCommandDefinitionArguments,normalizeFlagDefinitions,resolveCommandDefinitionAction,validateFlagDefinitions,validateItemFieldDefinitions,validateItemTypeDefinitions,validateMigrationDefinition,validateProjectProfileDefinition}from"./registration-contracts.js";import{assertOptionalStringField,normalizeOptionalStringArrayField}from"./registration-validation.js";import{assertHookHandler,assertNonEmptyRegistrationString,assertRegistrationFunction,attachRuntimeDefinition,cloneRuntimeRegistrationValue,createRegistrationValidationError,extractRegistrationValidationTrace,isExtensionServiceName,isOutputRendererFormat,normalizeRegistrationName,normalizeRegistrationRecord,normalizeRegistrationRecordList,normalizeRuntimeRegistrationRecord,sanitizeRegistrationValue,toRegistrationCommandPath,validateAssuranceMeasurementProviderDefinition}from"./registration-values.js";import{normalizeServiceOverrideOwnership}from"./service-ownership.js";import{compareComparableVersions,evaluatePmMaxVersionBound,evaluatePmMinVersionBound,parseComparableVersion}from"./version-compat.js";import{parseLegacyExtensionCapabilityAliasWarning,parseUnknownExtensionCapabilityWarning}from"./extension-capability-aliases.js";import{createEmptyExtensionCommandRegistry as createEmptyExtensionCommandRegistry2,createEmptyExtensionHookRegistry as createEmptyExtensionHookRegistry2,createEmptyExtensionParserRegistry as createEmptyExtensionParserRegistry2,createEmptyExtensionPreflightRegistry as createEmptyExtensionPreflightRegistry2,createEmptyExtensionRegistrationRegistry as createEmptyExtensionRegistrationRegistry2,createEmptyExtensionRendererRegistry as createEmptyExtensionRendererRegistry2,createEmptyExtensionServiceRegistry as createEmptyExtensionServiceRegistry2}from"./extension-registries.js";import{runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync}from"./extension-hook-runtime.js";export*from"./extension-types.js";import{DEFAULT_EXTENSION_PRIORITY,parseExtensionManifestDocument as parseExtensionManifestDocument2}from"./manifest-parser.js";let currentPmCliVersionPromise=null;const DEFAULT_EXTENSION_POLICY=Object.freeze(createDefaultExtensionGovernancePolicy());let extensionReloadEpoch=0;function nextExtensionReloadToken(seed=Date.now()){return extensionReloadEpoch+=1,`${extensionReloadEpoch}-${seed}`}function shouldEnable(name,enabled,disabled){return disabled.has(name)?!1:enabled.size===0?!0:enabled.has(name)}async function isCanonicalPathWithinDirectory(directory,targetPath){const[resolvedDirectory,resolvedTargetPath]=await Promise.all([fs.realpath(directory),fs.realpath(targetPath)]);return isPathWithinDirectory(resolvedDirectory,resolvedTargetPath)}function resolveExtensionRoots(pmRoot,cwd=process.cwd()){return{global:path.join(resolveGlobalPmRoot(cwd),"extensions"),project:path.join(pmRoot,"extensions")}}async function listExtensionDirectories(extensionsRoot){try{return(await fs.readdir(extensionsRoot,{withFileTypes:!0})).filter(entry=>entry.isDirectory()).map(entry=>entry.name).sort((a,b)=>a.localeCompare(b))}catch{return[]}}function summarizeCandidate(candidate){const summary={layer:candidate.layer,directory:candidate.directory,manifest_path:candidate.manifest_path,name:candidate.manifest.name,version:candidate.manifest.version,entry:candidate.manifest.entry,priority:candidate.manifest.priority,entry_path:candidate.entry_path,manifest_version:candidate.manifest.manifest_version,pm_min_version:candidate.manifest.pm_min_version,pm_max_version:candidate.manifest.pm_max_version,engines:candidate.manifest.engines,trusted:candidate.manifest.trusted,provenance:candidate.manifest.provenance,sandbox_profile:candidate.manifest.sandbox_profile,permissions:candidate.manifest.permissions,capabilities:[...candidate.manifest.capabilities],activation:candidate.manifest.activation?{commands:[...candidate.manifest.activation.commands]}:void 0,contributions:candidate.manifest.contributions??candidate.contributions};return candidate.source_package&&(summary.source_package=candidate.source_package),candidate.source_aliases&&(summary.source_aliases=[...candidate.source_aliases]),summary}function normalizeManagedSourcePackage(value){return typeof value=="string"&&value.trim().length>0?value.trim():void 0}async function readManagedExtensionSourcePackages(extensionsRoot){const packages=new Map;try{const parsed=JSON.parse(await fs.readFile(path.join(extensionsRoot,".managed-extensions.json"),"utf8")),entries=asRecordLoose(parsed)?.entries;if(!Array.isArray(entries))return packages;for(const entry of entries){if(typeof entry!="object"||entry===null)continue;const record=entry,sourcePackage=normalizeManagedSourcePackage(record.source?.package),aliases=[record.source?.input,record.source?.name,sourcePackage].map(value=>normalizeManagedSourcePackage(value)).filter(value=>value!==void 0),contributions=normalizeExtensionContributionInventory(record.contributions),identity={aliases:[...new Set(aliases)],...sourcePackage?{package_name:sourcePackage}:{},...contributions?{contributions}:{}};typeof record.directory=="string"&&record.directory.trim().length>0&&packages.set(`directory:${record.directory.trim()}`,identity),typeof record.name=="string"&&record.name.trim().length>0&&packages.set(`name:${record.name.trim()}`,identity)}}catch{return packages}return packages}function sortCandidates(candidates){return[...candidates].sort((left,right)=>{if(left.manifest.priority!==right.manifest.priority)return left.manifest.priority-right.manifest.priority;const byName=left.manifest.name.localeCompare(right.manifest.name);return byName!==0?byName:left.directory.localeCompare(right.directory)})}function buildEffectiveExtensions(globalCandidates,projectCandidates){const ordered=[...sortCandidates(globalCandidates),...sortCandidates(projectCandidates)],effective=[];for(const candidate of ordered){const existingIndex=effective.findIndex(entry=>entry.manifest.name===candidate.manifest.name);existingIndex>=0&&effective.splice(existingIndex,1),effective.push(candidate)}return effective}async function scanExtensionLayer(layer,extensionsRoot,enabled,disabled,pmMaxVersionExceededMode){const diagnostics=[],warnings=[],candidates=[],directories=await listExtensionDirectories(extensionsRoot),managedSourcePackages=await readManagedExtensionSourcePackages(extensionsRoot);for(const directory of directories){const scanned=await scanExtensionDirectory(layer,extensionsRoot,directory,enabled,disabled,managedSourcePackages,pmMaxVersionExceededMode);diagnostics.push(scanned.diagnostic),warnings.push(...scanned.warnings),scanned.candidate&&candidates.push(scanned.candidate)}return{diagnostics,warnings,candidates}}function emptyExtensionLayerScan(){return{diagnostics:[],warnings:[],candidates:[]}}function buildUnavailableExtensionScan(layer,directory,manifestPath,warning){return{diagnostic:{layer,directory,manifest_path:manifestPath,name:null,version:null,entry:null,priority:null,entry_path:null,enabled:null,status:"warn"},warnings:[warning],candidate:null}}function collectScannedExtensionWarnings(layer,manifest,rawManifest,entryWithinDirectory,entryExists,pmVersionCompatibility,pmMaxVersionCompatibility){const extensionWarnings=formatExtensionManifestSchemaWarnings(layer,manifest,rawManifest);Array.isArray(manifest.legacy_capability_aliases)&&manifest.legacy_capability_aliases.length>0&&extensionWarnings.push(formatLegacyExtensionCapabilityAliasWarning(layer,manifest.name,manifest.legacy_capability_aliases));for(const capability of collectUnknownExtensionCapabilities(manifest.capabilities))extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer,manifest.name,capability));return entryWithinDirectory?entryExists||extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`):extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`),pmVersionCompatibility.warning&&extensionWarnings.push(pmVersionCompatibility.warning),pmMaxVersionCompatibility.warning&&extensionWarnings.push(pmMaxVersionCompatibility.warning),extensionWarnings}async function scanExtensionDirectory(layer,extensionsRoot,directory,enabled,disabled,managedSourcePackages,pmMaxVersionExceededMode){const extensionDir=path.join(extensionsRoot,directory),manifestPath=path.join(extensionDir,"manifest.json");if(!await pathExists(manifestPath))return buildUnavailableExtensionScan(layer,directory,manifestPath,`extension_manifest_missing:${layer}:${directory}`);let manifest,rawManifest;try{const parsed=JSON.parse(await fs.readFile(manifestPath,"utf8"));rawManifest=asRecordLoose(parsed),manifest=parseExtensionManifestDocument(parsed)}catch{rawManifest=null,manifest=null}if(!manifest||!rawManifest)return buildUnavailableExtensionScan(layer,directory,manifestPath,`extension_manifest_invalid:${layer}:${directory}`);const entryPath=path.resolve(extensionDir,manifest.entry),entryWithinDirectoryByPath=isPathWithinDirectory(extensionDir,entryPath),entryExists=entryWithinDirectoryByPath?await pathExists(entryPath):!1,entryWithinDirectory=entryWithinDirectoryByPath&&entryExists?await isCanonicalPathWithinDirectory(extensionDir,entryPath):entryWithinDirectoryByPath,enabledForLoad=shouldEnable(manifest.name,enabled,disabled),pmVersionCompatibility=await evaluatePmMinVersionCompatibility(layer,manifest),pmMaxVersionCompatibility=await evaluatePmMaxVersionCompatibility(layer,manifest,pmMaxVersionExceededMode),extensionWarnings=collectScannedExtensionWarnings(layer,manifest,rawManifest,entryWithinDirectory,entryExists,pmVersionCompatibility,pmMaxVersionCompatibility),extensionReady=entryWithinDirectory&&entryExists&&pmVersionCompatibility.allowed&&pmMaxVersionCompatibility.allowed,sourceIdentity=managedSourcePackages.get(`directory:${directory}`)??managedSourcePackages.get(`name:${manifest.name}`);return{diagnostic:{layer,directory,manifest_path:manifestPath,name:manifest.name,version:manifest.version,entry:manifest.entry,priority:manifest.priority,entry_path:entryPath,enabled:enabledForLoad,status:extensionReady?"ok":"warn"},warnings:extensionWarnings,candidate:buildReadyExtensionCandidate({layer,directory,manifestPath,entryPath,manifest,sourceIdentity,extensionReady,enabledForLoad})}}async function discoverExtensions(options){const roots=resolveExtensionRoots(options.pmRoot,options.cwd??process.cwd()),configured_enabled=normalizeNames(options.settings.extensions.enabled),configured_disabled=normalizeNames(options.settings.extensions.disabled),policy=normalizeExtensionPolicy(options.settings),serializedPolicy=serializeExtensionPolicy(policy);if(options.noExtensions)return{disabled_by_flag:!0,roots,configured_enabled,configured_disabled,discovered:[],effective:[],warnings:[...policy.warnings],policy:serializedPolicy};const enabled=new Set(configured_enabled),disabled=new Set(configured_disabled),globalScan=options.ignoreGlobalExtensions===!0?emptyExtensionLayerScan():await scanExtensionLayer("global",roots.global,enabled,disabled,policy.pmMaxVersionExceededMode.global),projectScan=await scanExtensionLayer("project",roots.project,enabled,disabled,policy.pmMaxVersionExceededMode.project),policyWarnings=[...policy.warnings],effectiveCandidates=buildEffectiveExtensions(globalScan.candidates,projectScan.candidates),effective=[];for(const candidate of effectiveCandidates){const extensionRef={layer:candidate.layer,name:candidate.manifest.name,trusted:candidate.manifest.trusted===!0,provenanceVerified:candidate.manifest.provenance?.verified===!0,sandboxProfile:candidate.manifest.sandbox_profile,permissions:candidate.manifest.permissions&&typeof candidate.manifest.permissions=="object"?{fs_read:candidate.manifest.permissions.fs_read,fs_write:candidate.manifest.permissions.fs_write,network:candidate.manifest.permissions.network,env_read:candidate.manifest.permissions.env_read,env_write:candidate.manifest.permissions.env_write,process_spawn:candidate.manifest.permissions.process_spawn}:void 0},extensionDecision=evaluateExtensionPolicyForExtension(policy,extensionRef);if(extensionDecision.warning&&policyWarnings.push(extensionDecision.warning),!!extensionDecision.allowed){for(const capability of candidate.manifest.capabilities){const capabilityDecision=evaluateExtensionPolicyForCapability(policy,extensionRef,capability);capabilityDecision.warning&&policyWarnings.push(capabilityDecision.warning)}effective.push(summarizeCandidate(candidate))}}return{disabled_by_flag:!1,roots,configured_enabled,configured_disabled,discovered:[...globalScan.diagnostics,...projectScan.diagnostics],effective,warnings:[...new Set([...globalScan.warnings,...projectScan.warnings,...policyWarnings])],policy:serializedPolicy}}function formatUnknownError(error){return error instanceof Error&&error.message.trim().length>0?error.message:String(error)}async function readCurrentPmCliVersion(){try{const packageRoot=resolvePmPackageRootFromModule(import.meta.url,["../../.."]),raw=await fs.readFile(path.join(packageRoot,"package.json"),"utf8"),parsed=JSON.parse(raw);return typeof parsed.version=="string"&&parsed.version.trim().length>0?parsed.version.trim():null}catch{return null}}function resolveCurrentPmCliVersion(){return currentPmCliVersionPromise??=readCurrentPmCliVersion(),currentPmCliVersionPromise}function formatPmVersionCompatibilityWarning(layer,manifest,evaluation){const current=evaluation.current??"unknown";if(evaluation.kind==="pm_min_version")switch(evaluation.status){case"invalid":return`extension_pm_min_version_invalid:${layer}:${manifest.name}:required=${evaluation.required}`;case"unchecked":return`extension_pm_min_version_unchecked:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;case"unmet":return`extension_pm_min_version_unmet:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;default:return}switch(evaluation.status){case"invalid":return`extension_pm_max_version_invalid:${layer}:${manifest.name}:allowed=${evaluation.required}`;case"unchecked":return`extension_pm_max_version_unchecked:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;case"exceeded_warn":return`extension_pm_max_version_exceeded_warn:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;case"exceeded":return`extension_pm_max_version_exceeded:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;default:return}}async function evaluatePmMinVersionCompatibility(layer,manifest){if(manifest.pm_min_version===void 0)return{allowed:!0};const evaluation=evaluatePmMinVersionBound(manifest.pm_min_version,await resolveCurrentPmCliVersion()),warning=formatPmVersionCompatibilityWarning(layer,manifest,evaluation);return warning?{allowed:evaluation.allowed,warning}:{allowed:evaluation.allowed}}async function evaluatePmMaxVersionCompatibility(layer,manifest,exceededMode){if(manifest.pm_max_version===void 0)return{allowed:!0};const evaluation=evaluatePmMaxVersionBound(manifest.pm_max_version,await resolveCurrentPmCliVersion(),exceededMode),warning=formatPmVersionCompatibilityWarning(layer,manifest,evaluation);return warning?{allowed:evaluation.allowed,warning}:{allowed:evaluation.allowed}}async function fingerprintPath(pathToInspect){try{const stats=await fs.stat(pathToInspect);return`${Math.trunc(stats.mtimeMs)}-${stats.size}`}catch{return"missing"}}async function resolveExtensionImportHref(extension,options){let importEntryPath=extension.entry_path;options.module_graph_snapshot_root&&(importEntryPath=await snapshotExtensionModuleGraph(options.module_graph_snapshot_root,extension));const baseUrl=new URL(pathToFileURL(importEntryPath).href);if(!(options.cache_bust===!0||typeof options.reload_token=="string"))return baseUrl.href;const[entryFingerprint,manifestFingerprint]=await Promise.all([fingerprintPath(extension.entry_path),fingerprintPath(extension.manifest_path)]),reloadToken=options.reload_token??nextExtensionReloadToken();return baseUrl.searchParams.set("pm_ext_reload",reloadToken),baseUrl.searchParams.set("pm_ext_entry",entryFingerprint),baseUrl.searchParams.set("pm_ext_manifest",manifestFingerprint),baseUrl.href}async function loadExtensions(options){const discovery=await discoverExtensions(options),loaded=[],failed=[],warnings=[...discovery.warnings];if(discovery.disabled_by_flag)return{...discovery,warnings,loaded,failed};const extensionsToLoad=typeof options.extensionFilter=="function"?discovery.effective.filter(options.extensionFilter):discovery.effective;for(const extension of extensionsToLoad)try{const module=await import(await resolveExtensionImportHref(extension,options));loaded.push({...extension,module})}catch(error){warnings.push(`extension_load_failed:${extension.layer}:${extension.name}`),failed.push({layer:extension.layer,name:extension.name,entry_path:extension.entry_path,error:formatUnknownError(error)})}return{...discovery,warnings,loaded,failed}}const DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS=5e3,MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS=2147483647;function toActivatableExtension(source){const activatable={activate:source.activate.bind(source)};if(typeof source.deactivate=="function"){const deactivate=source.deactivate;activatable.deactivate=deactivate.bind(source)}return activatable}function resolveActivatableExtension(module){const activatableRecord=resolveActivatablePropertyRecord(module);return activatableRecord?toActivatableExtension(activatableRecord):null}async function deactivateExtensions(loadResult,activationResult,options={}){const timeoutMs=normalizeExtensionDeactivateTimeout(options?.deactivate_timeout_ms),failedActivationKeys=new Set((activationResult?.failed??[]).map(entry=>`${entry.layer}:${entry.name}`)),targets=[];for(const extension of loadResult.loaded){if(failedActivationKeys.has(`${extension.layer}:${extension.name}`))continue;const activatable=resolveActivatableExtension(extension.module);!activatable||typeof activatable.deactivate!="function"||targets.push({extension,deactivate:activatable.deactivate})}const outcomes=await Promise.all(targets.map(async({extension,deactivate})=>{try{return await runExtensionDeactivateWithTimeout(deactivate,timeoutMs),{ok:!0}}catch(error){return{ok:!1,layer:extension.layer,name:extension.name,error:formatUnknownError(error)}}})),warnings=[],failed=[];let deactivated=0;for(const outcome of outcomes){if(outcome.ok){deactivated+=1;continue}warnings.push(`extension_deactivate_failed:${outcome.layer}:${outcome.name}`),failed.push({layer:outcome.layer,name:outcome.name,error:outcome.error})}return{deactivated,warnings,failed}}function normalizeExtensionDeactivateTimeout(rawTimeout){return typeof rawTimeout!="number"||rawTimeout<0?DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS:rawTimeout===0||rawTimeout===1/0?0:Number.isFinite(rawTimeout)?Math.min(MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS,Math.max(1,Math.floor(rawTimeout))):DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS}async function runExtensionDeactivateWithTimeout(deactivate,timeoutMs){if(timeoutMs===0){await deactivate();return}let timeoutHandle;try{const deactivatePromise=Promise.resolve().then(()=>deactivate());deactivatePromise.catch(()=>{}),await Promise.race([deactivatePromise,new Promise((_,reject)=>{timeoutHandle=setTimeout(()=>{reject(new Error(`extension deactivate timed out after ${timeoutMs}ms`))},timeoutMs),timeoutHandle.unref?.()})])}finally{clearTimeout(timeoutHandle)}}function getDeclaredExtensionCapabilities(extension){if(!Array.isArray(extension.capabilities))return null;const declared=new Set;for(const capability of extension.capabilities){const normalized=capability.trim().toLowerCase();isKnownExtensionCapability(normalized)&&declared.add(normalized)}return declared}function assertExtensionCapability(extension,capability,method){const declared=getDeclaredExtensionCapabilities(extension);if(declared!==null&&!declared.has(capability))throw createRegistrationValidationError(`${method} requires capability '${capability}' in extension manifest capabilities`,{method,registration_index:-1,capability,missing_capability:capability,expected_schema:`"capabilities": [..., "${capability}"]`,received:extension.capabilities,hint:`Add "${capability}" to ${extension.name} manifest capabilities, or remove the ${method} registration call.`})}function buildExtensionSelfIdentity(extension){return Object.freeze({name:extension.name,layer:extension.layer,version:extension.version,capabilities:Object.freeze((extension.capabilities??[]).filter(capability=>KNOWN_EXTENSION_CAPABILITIES.includes(capability))),pm_min_version:extension.pm_min_version,pm_max_version:extension.pm_max_version,source_package:extension.source_package})}function buildPolicyExtensionRef(extension){return{layer:extension.layer,name:extension.name,trusted:extension.trusted===!0,provenanceVerified:extension.provenance?.verified===!0,sandboxProfile:extension.sandbox_profile,permissions:extension.permissions&&typeof extension.permissions=="object"?{fs_read:extension.permissions.fs_read,fs_write:extension.permissions.fs_write,network:extension.permissions.network,env_read:extension.permissions.env_read,env_write:extension.permissions.env_write,process_spawn:extension.permissions.process_spawn}:void 0}}class ExtensionApiRegistrar{extension;hooks;#loadedExtension;#extensionRef;#hookRegistry;#commandRegistry;#parserRegistry;#preflightRegistry;#serviceRegistry;#rendererRegistry;#registrationRegistry;#activationWarnings;#activationFailures;#policy;constructor(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy){this.#loadedExtension=extension,this.extension=buildExtensionSelfIdentity(extension),this.#extensionRef=buildPolicyExtensionRef(extension),this.#hookRegistry=hooks,this.#commandRegistry=commands,this.#parserRegistry=parsers,this.#preflightRegistry=preflight,this.#serviceRegistry=services,this.#rendererRegistry=renderers,this.#registrationRegistry=registrations,this.#activationWarnings=activationWarnings,this.#activationFailures=activationFailures,this.#policy=policy,this.registerCommand=this.registerCommand.bind(this),this.registerParser=this.registerParser.bind(this),this.registerPreflight=this.registerPreflight.bind(this),this.registerService=this.registerService.bind(this),this.registerFlags=this.registerFlags.bind(this),this.registerItemFields=this.registerItemFields.bind(this),this.registerItemTypes=this.registerItemTypes.bind(this),this.registerRelationshipKinds=this.registerRelationshipKinds.bind(this),this.registerMigration=this.registerMigration.bind(this),this.registerProfile=this.registerProfile.bind(this),this.registerRenderer=this.registerRenderer.bind(this),this.registerImporter=this.registerImporter.bind(this),this.registerExporter=this.registerExporter.bind(this),this.registerSearchProvider=this.registerSearchProvider.bind(this),this.registerVectorStoreAdapter=this.registerVectorStoreAdapter.bind(this),this.registerAssuranceMeasurementProvider=this.registerAssuranceMeasurementProvider.bind(this),this.hooks={beforeCommand:hook=>this.registerBeforeCommand(hook),beforeMutation:hook=>this.registerBeforeMutation(hook),afterCommand:hook=>this.registerAfterCommand(hook),onWrite:hook=>this.registerOnWrite(hook),onRead:hook=>this.registerOnRead(hook),onIndex:hook=>this.registerOnIndex(hook)}}allowRegistration(surface,method,capability,details){const decision=evaluateExtensionPolicyForRegistration(this.#policy,this.#extensionRef,surface,method,capability,details);return decision.warning&&this.#activationWarnings.push(decision.warning),decision.allowed}registerCommandTrace(mode,command,expectedSchema,received,hint){return{method:"registerCommand",registration_index:mode==="override"?this.#commandRegistry.overrides.length:this.#commandRegistry.handlers.length,command,expected_schema:expectedSchema,received:sanitizeRegistrationValue(received),hint}}registerCommandOverride(command,override){const normalizedCommand=normalizeCommandName(command);if(normalizedCommand.length===0)throw createRegistrationValidationError("registerCommand requires a non-empty command name",this.registerCommandTrace("override",command,'registerCommand("<command>", (context) => unknown)',command,"Provide a non-empty command path as the first argument."));if(typeof override!="function"){const trace=this.registerCommandTrace("override",normalizedCommand,'registerCommand("<command>", (context) => unknown)',override,"Provide a function as the second registerCommand argument.");throw createRegistrationValidationError(`registerCommand requires an override function when command name is provided (command="${normalizedCommand}", registration_index=${trace.registration_index})`,trace)}this.allowRegistration("commands.override","registerCommand","commands",{command:normalizedCommand})&&this.#commandRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:override})}resolveCommandDefinitionRunHandler(definition,normalizedCommand){const runHandler=typeof definition.run=="function"?definition.run:void 0,legacyHandler=typeof definition.handler=="function"?definition.handler:void 0;return!runHandler&&legacyHandler&&this.#activationWarnings.push(`extension_command_definition_legacy_handler_alias:${this.#loadedExtension.layer}:${this.#loadedExtension.name}:${normalizedCommand}`),runHandler??legacyHandler}registerCommandDefinition(definition){if(typeof definition!="object"||definition===null)throw createRegistrationValidationError("registerCommand requires a command definition object",this.registerCommandTrace("definition",void 0,"{ name: string; run: (context) => unknown; }",definition,'Use registerCommand({ name: "command path", run: (context) => ... }).'));if(typeof definition.name!="string")throw createRegistrationValidationError("registerCommand requires a command definition name",this.registerCommandTrace("definition",void 0,"{ name: string; run: (context) => unknown; }",definition,"Set command definition.name to a non-empty string command path."));const normalizedCommand=normalizeCommandName(definition.name);if(normalizedCommand.length===0)throw createRegistrationValidationError("registerCommand requires a non-empty command definition name",this.registerCommandTrace("definition",definition.name,"{ name: string; run: (context) => unknown; }",definition,"Ensure command definition.name contains a non-empty command path."));const resolvedHandler=this.resolveCommandDefinitionRunHandler(definition,normalizedCommand);if(typeof resolvedHandler!="function"){const trace=this.registerCommandTrace("definition",normalizedCommand,"{ name: string; run: (context) => unknown; }",resolvedHandler,"Define command definition.run as a function.");throw createRegistrationValidationError(`registerCommand requires a command definition run handler (command="${normalizedCommand}", registration_index=${trace.registration_index})`,trace)}try{assertCommandDefinitionMetadataStrings(definition);const action=resolveCommandDefinitionAction(normalizedCommand,definition.action),readOutput=normalizeExtensionReadOutput(definition.read_output,normalizedCommand,action);if(!this.allowRegistration("commands.handler","registerCommand","commands",{command:normalizedCommand,action}))return;const description=definition.description?.trim(),intent=definition.intent?.trim(),examples=normalizeOptionalStringArrayField("registerCommand definition.examples",definition.examples),failureHints=normalizeOptionalStringArrayField("registerCommand definition.failure_hints",definition.failure_hints),argumentsDefinition=normalizeCommandDefinitionArguments(definition.arguments);definition.flags!==void 0&&(assertExtensionCapability(this.#loadedExtension,"schema","registerCommand flags"),this.allowRegistration("schema.flags","registerCommand flags","schema")&&(validateFlagDefinitions(definition.flags),this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:normalizedCommand,flags:normalizeFlagDefinitions("registerCommand definition.flags",definition.flags)})));const registration={read_output:readOutput,layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,source_package:this.#loadedExtension.source_package,command:normalizedCommand,action,examples,failure_hints:failureHints,arguments:argumentsDefinition,tier:definition.tier??"standard",family:definition.family??"extensions"};description&&(registration.description=description),intent&&(registration.intent=intent),this.#registrationRegistry.commands.push(registration)}catch(error){const reason=formatUnknownError(error),trace=this.registerCommandTrace("definition",normalizedCommand,"{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }",definition,reason),validationError=createRegistrationValidationError(`registerCommand definition metadata invalid (command="${normalizedCommand}", registration_index=${trace.registration_index}): ${reason}`,trace);this.#activationWarnings.push(`extension_command_quarantined:${this.#loadedExtension.layer}:${this.#loadedExtension.name}:${normalizedCommand}`),this.#activationFailures.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,entry_path:this.#loadedExtension.entry_path,error:validationError.message,trace});return}this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:resolvedHandler})}registerCommand(commandOrDefinition,override){if(assertExtensionCapability(this.#loadedExtension,"commands","registerCommand"),typeof commandOrDefinition=="string"){this.registerCommandOverride(commandOrDefinition,override);return}this.registerCommandDefinition(commandOrDefinition)}registerParser(command,override){if(assertExtensionCapability(this.#loadedExtension,"parser","registerParser"),!this.allowRegistration("parser.override","registerParser","parser"))return;const normalizedCommand=normalizeCommandName(assertNonEmptyRegistrationString("registerParser command",command));assertRegistrationFunction("registerParser override",override),this.#parserRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:normalizedCommand,run:override})}registerPreflight(override){if(assertExtensionCapability(this.#loadedExtension,"preflight","registerPreflight"),!this.allowRegistration("preflight.override","registerPreflight","preflight"))return;const normalized=normalizePreflightOverride(override);this.#preflightRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,...normalized})}registerService(service,override,ownership={}){assertExtensionCapability(this.#loadedExtension,"services","registerService");const normalizedService=String(service).trim().toLowerCase();if(!isExtensionServiceName(normalizedService))throw new TypeError(`registerService service must be one of: ${KNOWN_EXTENSION_SERVICE_NAMES.join(", ")}`);this.allowRegistration("services.override","registerService","services",{service:normalizedService})&&(assertRegistrationFunction("registerService override",override),this.#serviceRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,service:normalizedService,run:override,...normalizeServiceOverrideOwnership(ownership)?{passThrough:!0}:{}}))}registerRenderer(format,renderer,ownership={}){if(assertExtensionCapability(this.#loadedExtension,"renderers","registerRenderer"),!this.allowRegistration("renderers.override","registerRenderer","renderers"))return;if(typeof renderer!="function")throw new TypeError("registerRenderer requires a renderer function");const normalizedFormat=String(format).trim().toLowerCase();if(!isOutputRendererFormat(normalizedFormat))throw new Error(`registerRenderer format must be toon|json, received: ${String(format)}`);if(ownership.resultDiscriminator!==void 0&&typeof ownership.resultDiscriminator!="function")throw new TypeError("registerRenderer ownership.resultDiscriminator must be a function when provided");const commands=[...new Set((ownership.commands??[]).map(command=>{if(typeof command!="string"||command.trim().length===0)throw new TypeError("registerRenderer ownership.commands must contain non-empty command paths");return normalizeCommandName(command)}))];this.#rendererRegistry.overrides.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,format:normalizedFormat,run:renderer,commands,...ownership.resultDiscriminator?{resultDiscriminator:ownership.resultDiscriminator}:{}})}registerFlags(targetCommand,flags){if(assertExtensionCapability(this.#loadedExtension,"schema","registerFlags"),!this.allowRegistration("schema.flags","registerFlags","schema"))return;const normalizedTargetCommand=normalizeCommandName(assertNonEmptyRegistrationString("registerFlags targetCommand",targetCommand));validateFlagDefinitions(flags);const normalizedFlags=normalizeFlagDefinitions("registerFlags flags",flags);if(normalizedFlags.length===0)throw new TypeError("registerFlags requires at least one flag definition");this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:normalizedTargetCommand,flags:normalizedFlags})}registerItemFields(fields){if(assertExtensionCapability(this.#loadedExtension,"schema","registerItemFields"),!this.allowRegistration("schema.itemfields","registerItemFields","schema"))return;validateItemFieldDefinitions(fields);const normalizedFields=normalizeRegistrationRecordList("registerItemFields fields",fields);if(normalizedFields.length===0)throw new TypeError("registerItemFields requires at least one field definition");this.#registrationRegistry.item_fields.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,fields:normalizedFields})}registerItemTypes(types){if(assertExtensionCapability(this.#loadedExtension,"schema","registerItemTypes"),!this.allowRegistration("schema.itemtypes","registerItemTypes","schema"))return;validateItemTypeDefinitions(types);const normalizedTypes=normalizeRegistrationRecordList("registerItemTypes types",types);if(normalizedTypes.length===0)throw new TypeError("registerItemTypes requires at least one type definition");this.#registrationRegistry.item_types.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,types:normalizedTypes})}registerRelationshipKinds(definitions){if(assertExtensionCapability(this.#loadedExtension,"schema","registerRelationshipKinds"),!this.allowRegistration("schema.relationshipkinds","registerRelationshipKinds","schema"))return;if(!Array.isArray(definitions))throw new TypeError("registerRelationshipKinds definitions requires an array of object definitions");if(definitions.length===0)throw new TypeError("registerRelationshipKinds requires at least one definition");const registry=createRelationshipKindRegistry();for(const registration of this.#registrationRegistry.relationship_kinds)for(const definition of registration.definitions)registry.register(definition);const validated=definitions.map(definition=>(registry.register(definition),registry.require(definition.kind)));this.#registrationRegistry.relationship_kinds.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definitions:validated})}registerMigration(definition){if(assertExtensionCapability(this.#loadedExtension,"schema","registerMigration"),!this.allowRegistration("schema.migrations","registerMigration","schema"))return;validateMigrationDefinition(definition);const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerMigration definition",definition);this.#registrationRegistry.migrations.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerMigration definition",definition)},runtimeDefinition))}registerProfile(profile){if(assertExtensionCapability(this.#loadedExtension,"schema","registerProfile"),!this.allowRegistration("schema.profiles","registerProfile","schema"))return;const snapshot=cloneRuntimeRegistrationValue(profile);validateProjectProfileDefinition(snapshot),this.#registrationRegistry.profiles.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,profile:applyProjectProfileDefaults(snapshot)})}registerImportExportCommandFlags(method,commandPath,resolvedOptions){resolvedOptions.flags!==void 0&&(assertExtensionCapability(this.#loadedExtension,"schema",`${method} options.flags`),this.allowRegistration("schema.flags",`${method} options.flags`,"schema")&&(validateFlagDefinitions(resolvedOptions.flags),this.#registrationRegistry.flags.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,target_command:commandPath,flags:normalizeFlagDefinitions(`${method} options.flags`,resolvedOptions.flags)})))}applyImportExportCommandMetadata(method,commandPath,options){if(options!==void 0&&(typeof options!="object"||options===null||Array.isArray(options)))throw new TypeError(`${method} options must be an object when provided`);const defaultDescription=`${method==="registerImporter"?"Import":"Export"} items with the registered extension adapter.`,defaultArguments=[{name:"file",required:!1,description:"Optional input or output file path."}],resolvedOptions={...options,description:options?.description??defaultDescription,arguments:options?.arguments??defaultArguments},output=resolveImportExportArtifactOutput(method,resolvedOptions,options?.description!==void 0);assertOptionalStringField(`${method} options.action`,resolvedOptions.action),assertOptionalStringField(`${method} options.description`,resolvedOptions.description),assertOptionalStringField(`${method} options.intent`,resolvedOptions.intent);const action=resolveCommandDefinitionAction(commandPath,resolvedOptions.action),examples=normalizeOptionalStringArrayField(`${method} options.examples`,resolvedOptions.examples),failureHints=normalizeOptionalStringArrayField(`${method} options.failure_hints`,resolvedOptions.failure_hints),argumentsDefinition=normalizeCommandDefinitionArguments(resolvedOptions.arguments);this.registerImportExportCommandFlags(method,commandPath,resolvedOptions);const registration={layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,source_package:this.#loadedExtension.source_package,command:commandPath,action,examples,failure_hints:failureHints,arguments:argumentsDefinition},description=resolvedOptions.description?.trim();description&&(registration.description=description);const intent=resolvedOptions.intent?.trim();return intent&&(registration.intent=intent),this.#registrationRegistry.commands.push(registration),output}registerImporter(name,importer,options){if(assertExtensionCapability(this.#loadedExtension,"importers","registerImporter"),!this.allowRegistration("importers.importer","registerImporter","importers"))return;const normalizedName=normalizeRegistrationName(assertNonEmptyRegistrationString("registerImporter name",name));assertRegistrationFunction("registerImporter importer",importer);const commandPath=toRegistrationCommandPath(normalizedName,"import");this.applyImportExportCommandMetadata("registerImporter",commandPath,options),this.#registrationRegistry.importers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,importer:normalizedName}),this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:commandPath,run:async context=>importer(buildImportExportContext(context,normalizedName,"import"))})}registerExporter(name,exporter,options){if(assertExtensionCapability(this.#loadedExtension,"importers","registerExporter"),!this.allowRegistration("importers.exporter","registerExporter","importers"))return;const normalizedName=normalizeRegistrationName(assertNonEmptyRegistrationString("registerExporter name",name));assertRegistrationFunction("registerExporter exporter",exporter);const commandPath=toRegistrationCommandPath(normalizedName,"export"),output=this.applyImportExportCommandMetadata("registerExporter",commandPath,options);this.#registrationRegistry.exporters.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,exporter:normalizedName,...output===void 0?{}:{output}}),this.#commandRegistry.handlers.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,command:commandPath,run:async context=>{const result=await exporter(buildImportExportContext(context,normalizedName,"export"));return output?.receipt==="suppress"&&!isHostOutputSuppressed(result)?suppressHostOutput(result):result}})}registerSearchProvider(provider){if(assertExtensionCapability(this.#loadedExtension,"search","registerSearchProvider"),!this.allowRegistration("search.provider","registerSearchProvider","search"))return;const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerSearchProvider provider",provider);this.#registrationRegistry.search_providers.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerSearchProvider provider",provider)},runtimeDefinition))}registerVectorStoreAdapter(adapter){if(assertExtensionCapability(this.#loadedExtension,"search","registerVectorStoreAdapter"),!this.allowRegistration("search.vectorstore","registerVectorStoreAdapter","search"))return;const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerVectorStoreAdapter adapter",adapter);this.#registrationRegistry.vector_store_adapters.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,definition:normalizeRegistrationRecord("registerVectorStoreAdapter adapter",adapter)},runtimeDefinition))}registerAssuranceMeasurementProvider(provider){if(assertExtensionCapability(this.#loadedExtension,"services","registerAssuranceMeasurementProvider"),!this.allowRegistration("services.assuranceprovider","registerAssuranceMeasurementProvider","services"))return;if(validateAssuranceMeasurementProviderDefinition(provider),provider.network&&this.#loadedExtension.permissions?.network!==!0)throw new TypeError("registerAssuranceMeasurementProvider network provider requires permissions.network=true");const runtimeDefinition=normalizeRuntimeRegistrationRecord("registerAssuranceMeasurementProvider provider",provider);this.#registrationRegistry.assurance_providers.push(attachRuntimeDefinition({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,network_permission:this.#loadedExtension.permissions?.network===!0,definition:normalizeRegistrationRecord("registerAssuranceMeasurementProvider provider",provider)},runtimeDefinition))}registerBeforeCommand(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.beforeCommand"),this.allowRegistration("hooks.beforecommand","api.hooks.beforeCommand","hooks")&&(assertHookHandler("beforeCommand",hook),this.#hookRegistry.beforeCommand.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerBeforeMutation(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.beforeMutation"),this.allowRegistration("hooks.beforemutation","api.hooks.beforeMutation","hooks")&&(assertHookHandler("beforeMutation",hook),this.#hookRegistry.beforeMutation.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerAfterCommand(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.afterCommand"),this.allowRegistration("hooks.aftercommand","api.hooks.afterCommand","hooks")&&(assertHookHandler("afterCommand",hook),this.#hookRegistry.afterCommand.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnWrite(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onWrite"),this.allowRegistration("hooks.onwrite","api.hooks.onWrite","hooks")&&(assertHookHandler("onWrite",hook),this.#hookRegistry.onWrite.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnRead(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onRead"),this.allowRegistration("hooks.onread","api.hooks.onRead","hooks")&&(assertHookHandler("onRead",hook),this.#hookRegistry.onRead.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}registerOnIndex(hook){assertExtensionCapability(this.#loadedExtension,"hooks","api.hooks.onIndex"),this.allowRegistration("hooks.onindex","api.hooks.onIndex","hooks")&&(assertHookHandler("onIndex",hook),this.#hookRegistry.onIndex.push({layer:this.#loadedExtension.layer,name:this.#loadedExtension.name,run:hook}))}}function createExtensionApi(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy){return new ExtensionApiRegistrar(extension,hooks,commands,parsers,preflight,services,renderers,registrations,activationWarnings,activationFailures,policy)}function getRegistrationCounts(registrations){const commandCount=registrations.commands.length,flagCount=registrations.flags.reduce((total,entry)=>total+entry.flags.length,0),itemFieldCount=registrations.item_fields.reduce((total,entry)=>total+entry.fields.length,0),itemTypeCount=registrations.item_types.reduce((total,entry)=>total+entry.types.length,0),relationshipKindCount=(registrations.relationship_kinds??[]).reduce((total,entry)=>total+entry.definitions.length,0);return{commands:commandCount,flags:flagCount,item_fields:itemFieldCount,item_types:itemTypeCount,...relationshipKindCount>0?{relationship_kinds:relationshipKindCount}:{},migrations:registrations.migrations.length,profiles:registrations.profiles.length,importers:registrations.importers.length,exporters:registrations.exporters.length,search_providers:registrations.search_providers.length,vector_store_adapters:registrations.vector_store_adapters.length,...(registrations.assurance_providers?.length??0)>0?{assurance_providers:registrations.assurance_providers.length}:{}}}function collectCommandCollisionWarnings(commands){const warnings=[],collectByCommand=(entries,codePrefix)=>{const grouped=new Map;for(const entry of entries){const bucket=grouped.get(entry.command)??[];bucket.push(entry),grouped.set(entry.command,bucket)}for(const command of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(command);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`${codePrefix}:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}};collectByCommand(commands.handlers,"extension_command_handler_collision"),collectByCommand(commands.overrides,"extension_command_override_collision");const handlerCommands=new Set(commands.handlers.map(entry=>entry.command)),overlapCommands=[...new Set(commands.overrides.map(entry=>entry.command))].filter(command=>handlerCommands.has(command));overlapCommands.sort((left,right)=>left.localeCompare(right));for(const command of overlapCommands){const handlers=commands.handlers.filter(entry=>entry.command===command),overrides=commands.overrides.filter(entry=>entry.command===command);for(const override of overrides)for(const handler of handlers)warnings.push(`extension_command_override_handler_overlap:${command}:${override.layer}:${override.name}:${handler.layer}:${handler.name}`)}return warnings}function collectRendererCollisionWarnings(renderers){const grouped=new Map;for(const entry of renderers.overrides){const bucket=grouped.get(entry.format)??[];bucket.push(entry),grouped.set(entry.format,bucket)}const warnings=[];for(const format of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(format);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))winner.commands?.length&&displaced.commands?.length&&!displaced.commands.some(command=>winner.commands?.includes(command))||warnings.push(`extension_renderer_collision:${format}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}function collectParserCollisionWarnings(parsers){const warnings=[],grouped=new Map;for(const entry of parsers.overrides){const bucket=grouped.get(entry.command)??[];bucket.push(entry),grouped.set(entry.command,bucket)}for(const command of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(command);if(bucket.length<=1)continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`extension_parser_override_collision:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}const CHAINED_SERVICE_NAMES=new Set(["output_format"]);function collectServiceCollisionWarnings(services){const warnings=[],grouped=new Map;for(const entry of services.overrides){const bucket=grouped.get(entry.service)??[];bucket.push(entry),grouped.set(entry.service,bucket)}for(const service of[...grouped.keys()].sort((left,right)=>left.localeCompare(right))){const bucket=grouped.get(service);if(bucket.length<=1||CHAINED_SERVICE_NAMES.has(service))continue;const winner=bucket[bucket.length-1];for(const displaced of bucket.slice(0,-1))warnings.push(`extension_service_override_collision:${service}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`)}return warnings}async function activateExtensions(loadResult){const policy=hydrateExtensionPolicy(loadResult.policy??DEFAULT_EXTENSION_POLICY),hooks=createEmptyExtensionHookRegistry(),commands=createEmptyExtensionCommandRegistry(),parsers=createEmptyExtensionParserRegistry(),preflight=createEmptyExtensionPreflightRegistry(),services=createEmptyExtensionServiceRegistry(),renderers=createEmptyExtensionRendererRegistry(),registrations=createEmptyExtensionRegistrationRegistry(),failed=[],warnings=[];for(const extension of loadResult.loaded){const activatable=resolveActivatableExtension(extension.module);if(!activatable)continue;const failedBeforeActivation=failed.length,rollbackPartialActivation=captureExtensionActivationRollback({hooks,commands,parsers,preflight,services,renderers,registrations});try{await activatable.activate(createExtensionApi(extension,hooks,commands,parsers,preflight,services,renderers,registrations,warnings,failed,policy)),failed.length>failedBeforeActivation&&(rollbackPartialActivation(),warnings.push(`extension_activation_rolled_back:${extension.layer}:${extension.name}`))}catch(error){rollbackPartialActivation(),warnings.push(`extension_activate_failed:${extension.layer}:${extension.name}`);const trace=extractRegistrationValidationTrace(error);failed.push({layer:extension.layer,name:extension.name,entry_path:extension.entry_path,error:formatUnknownError(error),trace})}}const collisionWarnings=[...collectCommandCollisionWarnings(commands),...collectParserCollisionWarnings(parsers),...collectPreflightCollisionWarnings(preflight),...collectServiceCollisionWarnings(services),...collectRendererCollisionWarnings(renderers)],mergedWarnings=[...new Set([...warnings,...collisionWarnings])];return{hooks,commands,parsers,preflight,services,renderers,registrations,failed,warnings:mergedWarnings,hook_counts:{before_command:hooks.beforeCommand.length,before_mutation:hooks.beforeMutation.length,after_command:hooks.afterCommand.length,on_write:hooks.onWrite.length,on_read:hooks.onRead.length,on_index:hooks.onIndex.length},command_override_count:commands.overrides.length,command_handler_count:commands.handlers.length,parser_override_count:parsers.overrides.length,preflight_override_count:preflight.overrides.length,service_override_count:services.overrides.length,renderer_override_count:renderers.overrides.length,registration_counts:getRegistrationCounts(registrations)}}const _testOnlyLoader={assertFlagValueTypeAndDefault,assertOptionalStringField,compareComparableVersions,collectCommandCollisionWarnings,collectParserCollisionWarnings,collectRendererCollisionWarnings,collectServiceCollisionWarnings,createExtensionApi,createRegistrationValidationError,evaluatePmMaxVersionCompatibility,evaluatePmMinVersionCompatibility,extractRegistrationValidationTrace,fingerprintPath,getRegistrationCounts,normalizeCommandDefinitionArguments,normalizeExtensionDeactivateTimeout,normalizeOptionalStringArrayField,normalizeRegistrationRecord,normalizeRegistrationRecordList,normalizeRuntimeRegistrationRecord,parseComparableVersion,parseManifest:parseExtensionManifestDocument,readCurrentPmCliVersion,readManagedExtensionSourcePackages:async extensionsRoot=>new Map([...await readManagedExtensionSourcePackages(extensionsRoot)].filter(entry=>typeof entry[1].package_name=="string").map(([key,identity])=>[key,identity.package_name])),resolveExtensionImportHref,resolveCurrentPmCliVersion,resolveCommandDefinitionAction,sanitizeRegistrationValue,validateItemFieldDefinitions,resetCurrentPmCliVersionCacheForTest:()=>{currentPmCliVersionPromise=null}};export{DEFAULT_EXTENSION_PRIORITY,_testOnlyLoader,activateExtensions,createEmptyExtensionCommandRegistry2 as createEmptyExtensionCommandRegistry,createEmptyExtensionHookRegistry2 as createEmptyExtensionHookRegistry,createEmptyExtensionParserRegistry2 as createEmptyExtensionParserRegistry,createEmptyExtensionPreflightRegistry2 as createEmptyExtensionPreflightRegistry,createEmptyExtensionRegistrationRegistry2 as createEmptyExtensionRegistrationRegistry,createEmptyExtensionRendererRegistry2 as createEmptyExtensionRendererRegistry,createEmptyExtensionServiceRegistry2 as createEmptyExtensionServiceRegistry,deactivateExtensions,discoverExtensions,isCanonicalPathWithinDirectory,loadExtensions,nextExtensionReloadToken,parseExtensionManifestDocument2 as parseExtensionManifestDocument,parseLegacyExtensionCapabilityAliasWarning,parseUnknownExtensionCapabilityWarning,resolveExtensionRoots,runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride,runServiceOverrideSync};
2
2
  //# sourceMappingURL=loader.js.map
@@ -9,28 +9,28 @@ import type { ExtensionLayer, ExtensionManifest } from "./extension-types.js";
9
9
  export declare const KNOWN_EXTENSION_MANIFEST_KEYS: Set<string>;
10
10
  /** Pure closed-schema inspection result for one raw extension manifest. */
11
11
  export interface ExtensionManifestSchemaInspection {
12
- /** Unknown top-level keys in deterministic lexical order. */
13
- unknownKeys: string[];
14
- /** Whether neither canonical pm compatibility bound is present. */
15
- missingVersionBounds: boolean;
12
+ /** Unknown top-level keys in deterministic lexical order. */
13
+ unknownKeys: string[];
14
+ /** Whether neither canonical pm compatibility bound is present. */
15
+ missingVersionBounds: boolean;
16
16
  }
17
17
  /** Stable machine-readable schema finding emitted by author-time lint. */
18
18
  export interface ExtensionManifestSchemaFinding {
19
- /** Schema condition an author must review. */
20
- code: "manifest_unknown_key" | "no_version_bounds_declared";
21
- /** JSON-style manifest location responsible for the finding. */
22
- path: string;
23
- /** Canonical key to use when the mistaken or missing field has one. */
24
- suggested_key?: "pm_min_version" | "pm_max_version";
25
- /** Actionable explanation of the ignored or missing declaration. */
26
- message: string;
19
+ /** Schema condition an author must review. */
20
+ code: "manifest_unknown_key" | "no_version_bounds_declared";
21
+ /** JSON-style manifest location responsible for the finding. */
22
+ path: string;
23
+ /** Canonical key to use when the mistaken or missing field has one. */
24
+ suggested_key?: "pm_min_version" | "pm_max_version";
25
+ /** Actionable explanation of the ignored or missing declaration. */
26
+ message: string;
27
27
  }
28
28
  /** Pure schema-lint result for one raw extension manifest. */
29
29
  export interface ExtensionManifestSchemaLintResult {
30
- /** False when at least one author-facing schema finding is present. */
31
- ok: boolean;
32
- /** Deterministically ordered schema findings. */
33
- findings: ExtensionManifestSchemaFinding[];
30
+ /** False when at least one author-facing schema finding is present. */
31
+ ok: boolean;
32
+ /** Deterministically ordered schema findings. */
33
+ findings: ExtensionManifestSchemaFinding[];
34
34
  }
35
35
  /** Inspect raw manifest keys without parsing, loading, or mutating an extension. */
36
36
  export declare function inspectExtensionManifestSchema(manifest: Readonly<Record<string, unknown>>): ExtensionManifestSchemaInspection;
@@ -1,13 +1,13 @@
1
1
  /** Extension paths and identity required to create a complete graph snapshot. */
2
2
  export interface ExtensionModuleGraphSnapshotSource {
3
- /** Extension precedence layer used to keep snapshot directories distinct. */
4
- layer: string;
5
- /** Extension directory identifier used to keep snapshot directories distinct. */
6
- directory: string;
7
- /** Absolute path to the extension manifest inside its source directory. */
8
- manifest_path: string;
9
- /** Absolute path to the extension entry module. */
10
- entry_path: string;
3
+ /** Extension precedence layer used to keep snapshot directories distinct. */
4
+ layer: string;
5
+ /** Extension directory identifier used to keep snapshot directories distinct. */
6
+ directory: string;
7
+ /** Absolute path to the extension manifest inside its source directory. */
8
+ manifest_path: string;
9
+ /** Absolute path to the extension entry module. */
10
+ entry_path: string;
11
11
  }
12
12
  /**
13
13
  * Copy an extension directory into a fresh graph root and return its entry path.
@@ -0,0 +1,5 @@
1
+ import type { ExtensionCommandReadOutput } from "./extension-types.js";
2
+ /** Reject malformed, ambiguous or unsafe row declarations and retain an immutable snapshot. */
3
+ export declare function normalizeExtensionReadOutput(value: unknown, command?: string, action?: string): ExtensionCommandReadOutput | undefined;
4
+ /** Preserve native dispatch authority when packages declare custom read commands. */
5
+ export declare function isNativeExtensionOutputCommand(command: string): boolean;
@@ -0,0 +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]="095ea29d-eda3-5287-b54d-8a961658f7bc")}catch{}})();import{PM_TOOL_ACTIONS}from"../../sdk/cli-contracts/enum-contracts.js";import{PM_READ_OUTPUT_SURFACES}from"../../sdk/read-output/options.js";import{asRegistrationRecord}from"./registration-validation.js";function normalizeExtensionReadOutput(value,command="",action=""){if(value===void 0)return;if(isNativeExtensionOutputCommand(command)||isNativeExtensionOutputCommand(action))throw new TypeError("Native pm commands and actions cannot declare read_output");const candidate=asRegistrationRecord("registerCommand definition.read_output",value);if(Object.keys(candidate).some(key=>key!=="row_keys")||!Array.isArray(candidate.row_keys))throw new TypeError("registerCommand definition.read_output requires only row_keys: string[]");const paths=Array.from(candidate.row_keys),reserved=new Set(["__proto__","constructor","prototype","row_contract","read_output","read_session","omission_receipt","output_budget_truncation"]);if(paths.some(entry=>typeof entry!="string"||!/^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*$/u.test(entry)||entry.split(".").some(segment=>reserved.has(segment))))throw new TypeError("registerCommand definition.read_output row_keys must be safe dot-delimited property paths");if(new Set(paths).size!==paths.length||paths.some(entry=>paths.some(other=>other.startsWith(`${entry}.`))))throw new TypeError("registerCommand definition.read_output row_keys must be unique and non-overlapping");return Object.freeze({row_keys:Object.freeze([...paths])})}function isNativeExtensionOutputCommand(command){const normalized=command.trim().toLowerCase().replace(/\s+/gu,"-");return PM_TOOL_ACTIONS.includes(normalized)||PM_READ_OUTPUT_SURFACES.includes(normalized)}export{isNativeExtensionOutputCommand,normalizeExtensionReadOutput};
2
+ //# sourceMappingURL=read-output-contract.js.map
@@ -37,7 +37,7 @@ export declare function normalizeRegistrationName(name: string): string;
37
37
  export declare function toRegistrationCommandPath(name: string, action: "import" | "export"): string;
38
38
  /** Attach an executable definition as hidden immutable runtime-only state. */
39
39
  export declare function attachRuntimeDefinition<TEntry extends {
40
- definition: Record<string, unknown>;
40
+ definition: Record<string, unknown>;
41
41
  }>(entry: TEntry, runtimeDefinition: Record<string, unknown>): TEntry;
42
42
  /** Validate the closed provider schema before any activation registry mutation. */
43
43
  export declare function validateAssuranceMeasurementProviderDefinition(provider: unknown): asserts provider is AssuranceMeasurementProviderDefinition;
@@ -5,12 +5,12 @@
5
5
  */
6
6
  /** Describes one host-owned flag spelling reserved from extension registration. */
7
7
  export interface ReservedExtensionHostFlag {
8
- /** Canonical long flag owned by the pm host. */
9
- flag: string;
10
- /** Compatibility aliases that are equally host-owned. */
11
- aliases?: readonly string[];
12
- /** Optional value label retained by the public CLI contract projection. */
13
- value_name?: string;
8
+ /** Canonical long flag owned by the pm host. */
9
+ flag: string;
10
+ /** Compatibility aliases that are equally host-owned. */
11
+ aliases?: readonly string[];
12
+ /** Optional value label retained by the public CLI contract projection. */
13
+ value_name?: string;
14
14
  }
15
15
  /** Host-owned flags inherited by every subcommand, including extension commands. */
16
16
  export declare const RESERVED_EXTENSION_HOST_FLAGS: readonly ReservedExtensionHostFlag[];