@unbrained/pm-cli 2026.10.13 → 2026.10.15

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 +72 -1
  3. package/dist/cli/after-command-context-usage.d.ts +7 -7
  4. package/dist/cli/argv-utils.d.ts +4 -4
  5. package/dist/cli/bundle-integrity.d.ts +16 -16
  6. package/dist/cli/command-namespaces.d.ts +1 -1
  7. package/dist/cli/commander-usage.d.ts +34 -34
  8. package/dist/cli/commands/governance/validate.d.ts +1 -1
  9. package/dist/cli/commands/history/history-compact.d.ts +1 -1
  10. package/dist/cli/commands/history/history-redact.d.ts +1 -1
  11. package/dist/cli/commands/history/history-repair.d.ts +1 -1
  12. package/dist/cli/commands/history/restore.d.ts +1 -1
  13. package/dist/cli/commands/lifecycle/close.d.ts +1 -1
  14. package/dist/cli/commands/lifecycle/copy.d.ts +1 -1
  15. package/dist/cli/commands/lifecycle/delete.d.ts +1 -1
  16. package/dist/cli/commands/lifecycle/focus.d.ts +1 -1
  17. package/dist/cli/commands/query/get.d.ts +1 -1
  18. package/dist/cli/commands/workspace/merge.d.ts +1 -1
  19. package/dist/cli/commands/workspace/schema.d.ts +1 -1
  20. package/dist/cli/context-intent-invocation.d.ts +1 -1
  21. package/dist/cli/description-stdin.d.ts +1 -1
  22. package/dist/cli/error-guidance.d.ts +119 -119
  23. package/dist/cli/extension-command-help.d.ts +64 -64
  24. package/dist/cli/extension-command-help.js +2 -2
  25. package/dist/cli/extension-command-options.d.ts +16 -16
  26. package/dist/cli/extension-command-options.js +1 -1
  27. package/dist/cli/extension-recovery.d.ts +13 -13
  28. package/dist/cli/help-content.d.ts +22 -22
  29. package/dist/cli/help-content.js +2 -2
  30. package/dist/cli/help-json-payload.d.ts +45 -45
  31. package/dist/cli/invocation-profile.d.ts +5 -5
  32. package/dist/cli/main.d.ts +217 -217
  33. package/dist/cli/main.js +2 -2
  34. package/dist/cli/migration-gates.d.ts +24 -24
  35. package/dist/cli/option-values.d.ts +1 -1
  36. package/dist/cli/public.d.ts +1 -1
  37. package/dist/cli/register-annotations.d.ts +2 -2
  38. package/dist/cli/register-assurance.d.ts +1 -1
  39. package/dist/cli/register-files-lookup.d.ts +1 -1
  40. package/dist/cli/register-history-activity.d.ts +1 -1
  41. package/dist/cli/register-history-author.d.ts +1 -1
  42. package/dist/cli/register-history-maintenance.d.ts +1 -1
  43. package/dist/cli/register-list-query.d.ts +7 -7
  44. package/dist/cli/register-list-query.js +3 -3
  45. package/dist/cli/register-mutation-options.d.ts +1 -1
  46. package/dist/cli/register-mutation.d.ts +4 -4
  47. package/dist/cli/register-operations.d.ts +75 -75
  48. package/dist/cli/register-setup.d.ts +4 -4
  49. package/dist/cli/register-structured-mutation.d.ts +8 -8
  50. package/dist/cli/runtime/activation.d.ts +23 -23
  51. package/dist/cli/runtime/invocation-options.d.ts +12 -12
  52. package/dist/cli/runtime/projection-retry.d.ts +1 -1
  53. package/dist/cli/runtime/selection.d.ts +16 -16
  54. package/dist/cli/runtime/telemetry-outcome.d.ts +11 -11
  55. package/dist/cli/runtime-compatibility-boundary.d.ts +7 -7
  56. package/dist/cli/schema/registration.d.ts +1 -1
  57. package/dist/cli/schema-registration-helpers.d.ts +2 -2
  58. package/dist/cli/stats-analytics-json.d.ts +1 -1
  59. package/dist/cli-bundle/bundle-manifest.json +1 -1
  60. package/dist/cli-bundle/chunks/{chunk-LBDWFWPK.js → chunk-52EZH2QQ.js} +2 -2
  61. package/dist/cli-bundle/chunks/chunk-7OEGNA4X.js +20 -0
  62. package/dist/cli-bundle/chunks/{chunk-APWPC4ZZ.js → chunk-7VHINXZP.js} +2 -2
  63. package/dist/cli-bundle/chunks/chunk-EMEEHV2Y.js +2 -0
  64. package/dist/cli-bundle/chunks/chunk-JGKTOBVB.js +6 -0
  65. package/dist/cli-bundle/chunks/{chunk-PSNS537F.js → chunk-JSUJWIHQ.js} +30 -30
  66. package/dist/cli-bundle/chunks/{chunk-N5EXRYCZ.js → chunk-LNKLQYBG.js} +2 -2
  67. package/dist/cli-bundle/chunks/{chunk-YH6H3UVE.js → chunk-N56CAQBU.js} +63 -64
  68. package/dist/cli-bundle/chunks/chunk-NC3QVGDD.js +8 -0
  69. package/dist/cli-bundle/chunks/{chunk-AM2XOZKE.js → chunk-RJ5N44WY.js} +2 -2
  70. package/dist/cli-bundle/chunks/{chunk-HXHFKXLV.js → chunk-VIMQCFCK.js} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-UBTYYZIE.js → chunk-WBBW3WQX.js} +4 -4
  72. package/dist/cli-bundle/chunks/chunk-X2H6UR26.js +236 -0
  73. package/dist/cli-bundle/chunks/{register-list-query-BJ742QOR.js → register-list-query-FKKFQ66D.js} +7 -7
  74. package/dist/cli-bundle/chunks/{register-mutation-GGGBRIH2.js → register-mutation-EWMMVZJB.js} +2 -2
  75. package/dist/cli-bundle/chunks/{register-operations-E6HXYHNM.js → register-operations-GEQ2H7PS.js} +2 -2
  76. package/dist/cli-bundle/chunks/{register-setup-4ZVTVEPY.js → register-setup-PSJTQBBO.js} +2 -2
  77. package/dist/cli-bundle/focused-chunks/{chunk-NNW5BS5L.js → chunk-3RNUMVK4.js} +2 -2
  78. package/dist/cli-bundle/focused-chunks/{chunk-3LQEBXU5.js → chunk-4KQFMOM7.js} +6 -6
  79. package/dist/cli-bundle/focused-chunks/{chunk-RAA7SVRA.js → chunk-52I2SNKJ.js} +2 -2
  80. package/dist/cli-bundle/focused-chunks/{chunk-6BTUISKV.js → chunk-5KRACGBK.js} +2 -2
  81. package/dist/cli-bundle/focused-chunks/chunk-5OO54BIV.js +3 -0
  82. package/dist/cli-bundle/focused-chunks/chunk-5TBAVZDR.js +20 -0
  83. package/dist/cli-bundle/focused-chunks/{chunk-R23T7GFZ.js → chunk-FQKPOZKS.js} +2 -2
  84. package/dist/cli-bundle/focused-chunks/{chunk-IIKFTJVC.js → chunk-H3P77KVU.js} +2 -2
  85. package/dist/cli-bundle/focused-chunks/chunk-HTA3TNC3.js +26 -0
  86. package/dist/cli-bundle/focused-chunks/{chunk-73UNAJHD.js → chunk-JKBH7YGX.js} +2 -2
  87. package/dist/cli-bundle/focused-chunks/{chunk-KGFRQ34R.js → chunk-KIIFVULU.js} +2 -2
  88. package/dist/cli-bundle/focused-chunks/{chunk-SOB7X4FJ.js → chunk-N6FUKTZS.js} +2 -2
  89. package/dist/cli-bundle/focused-chunks/chunk-PDYE7QDX.js +166 -0
  90. package/dist/cli-bundle/focused-chunks/{chunk-RU6GCFN3.js → chunk-Q4VNCTR2.js} +2 -2
  91. package/dist/cli-bundle/focused-chunks/{chunk-QMNAY25P.js → chunk-THYQR3ON.js} +61 -62
  92. package/dist/cli-bundle/focused-chunks/{chunk-DVK7VKZL.js → chunk-TYLG5VEB.js} +2 -2
  93. package/dist/cli-bundle/main.js +27 -27
  94. package/dist/cli-bundle/sdk-authoring.js +1 -1
  95. package/dist/cli-bundle/sdk-contracts.js +2 -2
  96. package/dist/cli-bundle/sdk-core.js +23 -23
  97. package/dist/cli-bundle/sdk-governance.js +1 -1
  98. package/dist/cli-bundle/sdk-graph.js +1 -1
  99. package/dist/cli-bundle/sdk-merge.js +51 -51
  100. package/dist/cli-bundle/sdk-query.js +1 -1
  101. package/dist/cli-bundle/sdk-runtime.js +1 -1
  102. package/dist/cli-bundle/sdk-testing.js +1 -1
  103. package/dist/cli-bundle/sdk.js +7 -7
  104. package/dist/cli.d.ts +9 -9
  105. package/dist/core/checkpoint/checkpoint-gc.d.ts +17 -17
  106. package/dist/core/checkpoint/mutation-checkpoint.d.ts +26 -26
  107. package/dist/core/config/nested-settings.d.ts +20 -20
  108. package/dist/core/config/positional-value.d.ts +9 -9
  109. package/dist/core/diagnostics/remediation.d.ts +7 -7
  110. package/dist/core/extensions/activation-summary-markdown.d.ts +4 -4
  111. package/dist/core/extensions/activation-summary.d.ts +30 -30
  112. package/dist/core/extensions/activation-transaction.d.ts +9 -9
  113. package/dist/core/extensions/capability-usage.d.ts +25 -25
  114. package/dist/core/extensions/command-hook-context.d.ts +15 -15
  115. package/dist/core/extensions/command-metadata-contract.d.ts +1 -1
  116. package/dist/core/extensions/command-visibility-tier.d.ts +1 -1
  117. package/dist/core/extensions/contribution-inventory.d.ts +24 -24
  118. package/dist/core/extensions/exporter-output-contract.d.ts +4 -4
  119. package/dist/core/extensions/extension-candidate.d.ts +14 -14
  120. package/dist/core/extensions/extension-capability-aliases.d.ts +14 -14
  121. package/dist/core/extensions/extension-hook-runtime.d.ts +14 -14
  122. package/dist/core/extensions/extension-policy.d.ts +62 -62
  123. package/dist/core/extensions/extension-registries.d.ts +8 -8
  124. package/dist/core/extensions/extension-runtime-helpers.d.ts +5 -5
  125. package/dist/core/extensions/extension-types.d.ts +702 -702
  126. package/dist/core/extensions/flag-definition-validation.d.ts +19 -6
  127. package/dist/core/extensions/flag-definition-validation.js +1 -1
  128. package/dist/core/extensions/flag-value-types.d.ts +16 -4
  129. package/dist/core/extensions/flag-value-types.js +1 -1
  130. package/dist/core/extensions/index.d.ts +34 -34
  131. package/dist/core/extensions/item-field-types.d.ts +3 -3
  132. package/dist/core/extensions/item-fields.d.ts +6 -6
  133. package/dist/core/extensions/loader.d.ts +66 -66
  134. package/dist/core/extensions/manifest-parser.d.ts +1 -1
  135. package/dist/core/extensions/manifest-schema.d.ts +13 -13
  136. package/dist/core/extensions/module-graph-snapshot.d.ts +5 -5
  137. package/dist/core/extensions/preflight-ownership.d.ts +3 -3
  138. package/dist/core/extensions/read-output-contract.d.ts +2 -2
  139. package/dist/core/extensions/registration-contracts.d.ts +12 -12
  140. package/dist/core/extensions/registration-validation.d.ts +6 -6
  141. package/dist/core/extensions/registration-values.d.ts +19 -19
  142. package/dist/core/extensions/reserved-host-flags.d.ts +5 -5
  143. package/dist/core/extensions/runtime-registrations.d.ts +6 -6
  144. package/dist/core/extensions/service-ownership.d.ts +1 -1
  145. package/dist/core/extensions/version-compat.d.ts +9 -9
  146. package/dist/core/fs/atomic-create.d.ts +1 -1
  147. package/dist/core/fs/fs-utils.d.ts +12 -12
  148. package/dist/core/fs/host-environment-errors.d.ts +10 -10
  149. package/dist/core/fs/path-utils.d.ts +1 -1
  150. package/dist/core/governance/content-fields.d.ts +25 -25
  151. package/dist/core/governance/issue-codes.d.ts +16 -16
  152. package/dist/core/governance/metadata-coverage.d.ts +64 -64
  153. package/dist/core/history/digest.d.ts +5 -5
  154. package/dist/core/history/drift-cache.d.ts +2 -2
  155. package/dist/core/history/drift-scan.d.ts +18 -18
  156. package/dist/core/history/event-classification.d.ts +4 -4
  157. package/dist/core/history/event-index.d.ts +33 -33
  158. package/dist/core/history/history-compact-bulk.d.ts +12 -12
  159. package/dist/core/history/history-diff.d.ts +15 -15
  160. package/dist/core/history/history-rewrite.d.ts +43 -43
  161. package/dist/core/history/history-storage-stats.d.ts +20 -20
  162. package/dist/core/history/history-stream-policy.d.ts +12 -12
  163. package/dist/core/history/history.d.ts +45 -45
  164. package/dist/core/history/identity.d.ts +4 -4
  165. package/dist/core/history/operation-contract.d.ts +17 -17
  166. package/dist/core/history/projection.d.ts +16 -16
  167. package/dist/core/history/read.d.ts +4 -4
  168. package/dist/core/history/replay.d.ts +47 -47
  169. package/dist/core/history/tombstone.d.ts +1 -1
  170. package/dist/core/history/version-address.d.ts +2 -2
  171. package/dist/core/history/workspace-history.d.ts +72 -72
  172. package/dist/core/io/body-file.d.ts +2 -2
  173. package/dist/core/io/bulk-ids-input.d.ts +7 -7
  174. package/dist/core/item/actionability.d.ts +30 -30
  175. package/dist/core/item/dependency-reference.d.ts +2 -2
  176. package/dist/core/item/id.d.ts +9 -9
  177. package/dist/core/item/item-format-version.d.ts +17 -15
  178. package/dist/core/item/item-format-version.js +1 -1
  179. package/dist/core/item/item-format.d.ts +54 -54
  180. package/dist/core/item/item-record.d.ts +1 -1
  181. package/dist/core/item/item-type-definition.d.ts +11 -11
  182. package/dist/core/item/parent-reference-policy.d.ts +6 -6
  183. package/dist/core/item/parse.d.ts +37 -37
  184. package/dist/core/item/plan-lifecycle.d.ts +4 -4
  185. package/dist/core/item/priority.d.ts +3 -3
  186. package/dist/core/item/sprint-release-format.d.ts +4 -4
  187. package/dist/core/item/status-filter.d.ts +5 -5
  188. package/dist/core/item/status.d.ts +3 -3
  189. package/dist/core/item/toon-decode.d.ts +10 -10
  190. package/dist/core/item/type-registry.d.ts +35 -35
  191. package/dist/core/item/type-synonyms.d.ts +2 -2
  192. package/dist/core/lock/lock-gc.d.ts +28 -28
  193. package/dist/core/lock/lock.d.ts +53 -53
  194. package/dist/core/output/mutation-projection.d.ts +4 -4
  195. package/dist/core/output/output-control.d.ts +4 -4
  196. package/dist/core/output/output.d.ts +30 -30
  197. package/dist/core/output/query-summary.d.ts +5 -5
  198. package/dist/core/output/tabular.d.ts +3 -3
  199. package/dist/core/packages/manifest.d.ts +30 -30
  200. package/dist/core/packages/root.d.ts +4 -4
  201. package/dist/core/policy/workflow-policy-schema.d.ts +291 -291
  202. package/dist/core/policy/workflow-policy-store.d.ts +15 -15
  203. package/dist/core/policy/workflow-policy.d.ts +56 -56
  204. package/dist/core/profile/profile-describe.d.ts +22 -22
  205. package/dist/core/profile/profile-lint.d.ts +13 -13
  206. package/dist/core/profile/profile-plan.d.ts +45 -45
  207. package/dist/core/profile/profile-presets.d.ts +36 -36
  208. package/dist/core/reproducibility/context.d.ts +9 -9
  209. package/dist/core/schema/fields-file.d.ts +35 -35
  210. package/dist/core/schema/item-types-file.d.ts +29 -29
  211. package/dist/core/schema/runtime-field-filters.d.ts +3 -3
  212. package/dist/core/schema/runtime-field-values.d.ts +7 -7
  213. package/dist/core/schema/runtime-schema.d.ts +59 -59
  214. package/dist/core/schema/status-defs-file.d.ts +29 -29
  215. package/dist/core/schema/status-token.d.ts +1 -1
  216. package/dist/core/schema/type-inference.d.ts +10 -10
  217. package/dist/core/schema/type-presets.d.ts +5 -5
  218. package/dist/core/schema/type-workflows.d.ts +14 -14
  219. package/dist/core/search/background-refresh.d.ts +12 -12
  220. package/dist/core/search/bm25.d.ts +16 -16
  221. package/dist/core/search/cache.d.ts +34 -34
  222. package/dist/core/search/corpus.d.ts +17 -17
  223. package/dist/core/search/embedding-batches.d.ts +25 -25
  224. package/dist/core/search/eval-thresholds.d.ts +4 -4
  225. package/dist/core/search/eval.d.ts +40 -40
  226. package/dist/core/search/http-client.d.ts +24 -24
  227. package/dist/core/search/providers.d.ts +30 -30
  228. package/dist/core/search/relevance.d.ts +17 -17
  229. package/dist/core/search/semantic-defaults.d.ts +5 -5
  230. package/dist/core/search/staleness.d.ts +3 -3
  231. package/dist/core/search/vector-stores.d.ts +51 -51
  232. package/dist/core/search/vectorization-metadata.d.ts +9 -9
  233. package/dist/core/sentry/helpers.d.ts +28 -26
  234. package/dist/core/sentry/helpers.js +1 -1
  235. package/dist/core/sentry/instrument.d.ts +52 -50
  236. package/dist/core/sentry/instrument.js +1 -1
  237. package/dist/core/sentry/sensitive-assignments.d.ts +9 -0
  238. package/dist/core/sentry/sensitive-assignments.js +2 -0
  239. package/dist/core/session/session-state.d.ts +37 -37
  240. package/dist/core/shared/agent-session-context.d.ts +14 -14
  241. package/dist/core/shared/author.d.ts +89 -89
  242. package/dist/core/shared/command-line.d.ts +3 -3
  243. package/dist/core/shared/command-types.d.ts +20 -20
  244. package/dist/core/shared/conflict-markers.d.ts +5 -5
  245. package/dist/core/shared/constants.d.ts +30 -30
  246. package/dist/core/shared/errors.d.ts +100 -100
  247. package/dist/core/shared/html-entity-decode.d.ts +2 -2
  248. package/dist/core/shared/item-metadata-contract.d.ts +2 -2
  249. package/dist/core/shared/lazy-module.d.ts +1 -1
  250. package/dist/core/shared/levenshtein.d.ts +1 -1
  251. package/dist/core/shared/memo.d.ts +1 -1
  252. package/dist/core/shared/numeric-parsers.d.ts +1 -1
  253. package/dist/core/shared/option-alias-visibility.d.ts +3 -3
  254. package/dist/core/shared/primitives.d.ts +13 -13
  255. package/dist/core/shared/secret-rules.d.ts +92 -92
  256. package/dist/core/shared/serial-queue.d.ts +6 -6
  257. package/dist/core/shared/serialization.d.ts +4 -4
  258. package/dist/core/shared/split-comma-list.d.ts +4 -4
  259. package/dist/core/shared/text-normalization.d.ts +3 -3
  260. package/dist/core/shared/time.d.ts +27 -27
  261. package/dist/core/store/item-format-migration.d.ts +7 -7
  262. package/dist/core/store/item-metadata-cache.d.ts +30 -30
  263. package/dist/core/store/item-metadata-query-index.d.ts +66 -66
  264. package/dist/core/store/item-metadata-read-work.d.ts +6 -6
  265. package/dist/core/store/item-store.d.ts +123 -123
  266. package/dist/core/store/item-store.js +1 -1
  267. package/dist/core/store/paths.d.ts +27 -27
  268. package/dist/core/store/settings-concurrency.d.ts +1 -1
  269. package/dist/core/store/settings-read-cache.d.ts +11 -11
  270. package/dist/core/store/settings-validator.d.ts +117 -117
  271. package/dist/core/store/settings.d.ts +84 -84
  272. package/dist/core/store/sqlite-runtime.d.ts +2 -2
  273. package/dist/core/store/tracker-preflight.d.ts +3 -3
  274. package/dist/core/telemetry/consent.d.ts +1 -1
  275. package/dist/core/telemetry/observability.d.ts +16 -16
  276. package/dist/core/telemetry/policy.d.ts +7 -7
  277. package/dist/core/telemetry/read-sampling.d.ts +1 -1
  278. package/dist/core/telemetry/runtime.d.ts +275 -275
  279. package/dist/core/telemetry/runtime.js +2 -2
  280. package/dist/core/test/background-runs.d.ts +123 -123
  281. package/dist/core/test/item-test-run-tracking.d.ts +10 -10
  282. package/dist/core/test/run-selectors.d.ts +12 -12
  283. package/dist/core/validate/estimate-defaults.d.ts +3 -3
  284. package/dist/core/validate/fix-planning.d.ts +36 -36
  285. package/dist/core/validate/linked-artifact-reference.d.ts +1 -1
  286. package/dist/core/validate/missing-by-type.d.ts +3 -3
  287. package/dist/core/validate/missing-link-owners.d.ts +17 -17
  288. package/dist/core/validate/stale-file-classification.d.ts +6 -6
  289. package/dist/mcp/http-server.d.ts +26 -26
  290. package/dist/mcp/legacy-adapter.d.ts +18 -18
  291. package/dist/mcp/runtime-capabilities.d.ts +18 -18
  292. package/dist/mcp/server.d.ts +73 -73
  293. package/dist/mcp/tool-definitions.d.ts +27 -27
  294. package/dist/sdk/actionability.d.ts +1 -1
  295. package/dist/sdk/agent/closed-domain-contracts.d.ts +11 -11
  296. package/dist/sdk/agent/command-recovery.d.ts +5 -5
  297. package/dist/sdk/agent/command-suggestions.d.ts +4 -4
  298. package/dist/sdk/agent/create-option-policy.d.ts +2 -2
  299. package/dist/sdk/agent/identity-config.d.ts +18 -18
  300. package/dist/sdk/agent/item-addressing.d.ts +6 -6
  301. package/dist/sdk/agent/refusal-closure-census.d.ts +26 -26
  302. package/dist/sdk/agent/refusal-closure.d.ts +22 -22
  303. package/dist/sdk/agent/refusal-corpus-contracts.d.ts +26 -26
  304. package/dist/sdk/agent/refusal-reachability.d.ts +65 -65
  305. package/dist/sdk/agent/subcommand-recovery.d.ts +20 -20
  306. package/dist/sdk/agent/task-transcript-contracts.d.ts +18 -18
  307. package/dist/sdk/agent/tracker-preflight-contracts.d.ts +21 -21
  308. package/dist/sdk/agent-capability-contracts.d.ts +41 -41
  309. package/dist/sdk/agent-session-context.d.ts +1 -1
  310. package/dist/sdk/annotations.d.ts +74 -74
  311. package/dist/sdk/author-attribution.d.ts +47 -47
  312. package/dist/sdk/authoring.d.ts +9 -9
  313. package/dist/sdk/cli-bootstrap.d.ts +65 -65
  314. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +56 -56
  315. package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +6 -6
  316. package/dist/sdk/cli-contracts/command-aliases.d.ts +19 -19
  317. package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +66 -66
  318. package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -7
  319. package/dist/sdk/cli-contracts/commander-types.d.ts +18 -18
  320. package/dist/sdk/cli-contracts/completeness.d.ts +14 -14
  321. package/dist/sdk/cli-contracts/enum-contracts.d.ts +28 -28
  322. package/dist/sdk/cli-contracts/flag-contracts.d.ts +114 -112
  323. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  324. package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +27 -27
  325. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +61 -61
  326. package/dist/sdk/cli-contracts/registration-helpers.d.ts +56 -56
  327. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +250 -250
  328. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  329. package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +678 -678
  330. package/dist/sdk/cli-contracts/string-lists.d.ts +1 -1
  331. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +564 -564
  332. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +13 -13
  333. package/dist/sdk/cli-contracts/tool-schema.d.ts +54 -54
  334. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +20 -20
  335. package/dist/sdk/cli-contracts.d.ts +15 -15
  336. package/dist/sdk/cli-program.d.ts +1 -1
  337. package/dist/sdk/cli-program.js +1 -1
  338. package/dist/sdk/command-line.d.ts +3 -3
  339. package/dist/sdk/comments.d.ts +24 -24
  340. package/dist/sdk/compile-cache.d.ts +4 -4
  341. package/dist/sdk/completion/bash.d.ts +1 -1
  342. package/dist/sdk/completion/fish.d.ts +1 -1
  343. package/dist/sdk/completion/shared.d.ts +74 -74
  344. package/dist/sdk/completion/zsh.d.ts +1 -1
  345. package/dist/sdk/completion.d.ts +3 -3
  346. package/dist/sdk/compose.d.ts +94 -94
  347. package/dist/sdk/config.d.ts +105 -105
  348. package/dist/sdk/context/recency.d.ts +1 -1
  349. package/dist/sdk/context/semantic-session-attribution.d.ts +23 -23
  350. package/dist/sdk/context/usage-egress.d.ts +1 -1
  351. package/dist/sdk/context/usage-ledger.d.ts +18 -18
  352. package/dist/sdk/context-intent-contracts.d.ts +37 -37
  353. package/dist/sdk/context-intent-runtime.d.ts +10 -10
  354. package/dist/sdk/context-packing.d.ts +44 -44
  355. package/dist/sdk/context-relevance.d.ts +110 -110
  356. package/dist/sdk/context-signal-store.d.ts +52 -52
  357. package/dist/sdk/context-usage.d.ts +78 -78
  358. package/dist/sdk/contracts.d.ts +2 -1
  359. package/dist/sdk/contracts.js +1 -1
  360. package/dist/sdk/core-governance.d.ts +5 -5
  361. package/dist/sdk/core.d.ts +8 -8
  362. package/dist/sdk/corpus-shape.d.ts +60 -60
  363. package/dist/sdk/define.d.ts +36 -36
  364. package/dist/sdk/dependencies.d.ts +70 -70
  365. package/dist/sdk/dependency-flag-validation.d.ts +17 -17
  366. package/dist/sdk/dependency-provenance.d.ts +22 -22
  367. package/dist/sdk/docs.d.ts +17 -17
  368. package/dist/sdk/duplicates.d.ts +14 -14
  369. package/dist/sdk/environment/agent-environment.d.ts +118 -118
  370. package/dist/sdk/environment/host-environment-errors.d.ts +1 -1
  371. package/dist/sdk/environment/project-runtime-compatibility.d.ts +42 -40
  372. package/dist/sdk/environment/project-runtime-compatibility.js +2 -2
  373. package/dist/sdk/environment/source-context.d.ts +4 -4
  374. package/dist/sdk/environment/tracker-preflight.d.ts +1 -1
  375. package/dist/sdk/error-code-catalog.d.ts +33 -33
  376. package/dist/sdk/error-runtime.d.ts +5 -5
  377. package/dist/sdk/errors.d.ts +17 -17
  378. package/dist/sdk/eval.d.ts +27 -27
  379. package/dist/sdk/extension/author-manifest.d.ts +9 -9
  380. package/dist/sdk/extension/bundled-catalog.d.ts +18 -18
  381. package/dist/sdk/extension/concurrency.d.ts +1 -1
  382. package/dist/sdk/extension/copy-scope.d.ts +1 -1
  383. package/dist/sdk/extension/custom-field-collisions.d.ts +1 -1
  384. package/dist/sdk/extension/describe.d.ts +21 -21
  385. package/dist/sdk/extension/doctor.d.ts +46 -46
  386. package/dist/sdk/extension/install-plan.d.ts +32 -32
  387. package/dist/sdk/extension/install-receipts.d.ts +4 -4
  388. package/dist/sdk/extension/install-runtime.d.ts +12 -12
  389. package/dist/sdk/extension/install-snapshot.d.ts +10 -10
  390. package/dist/sdk/extension/install-sources.d.ts +106 -106
  391. package/dist/sdk/extension/managed-state.d.ts +42 -42
  392. package/dist/sdk/extension/managed-update-status.d.ts +1 -1
  393. package/dist/sdk/extension/migrations.d.ts +48 -48
  394. package/dist/sdk/extension/output-ownership.d.ts +19 -19
  395. package/dist/sdk/extension/runtime-summary.d.ts +7 -7
  396. package/dist/sdk/extension/scaffold.d.ts +15 -15
  397. package/dist/sdk/extension/shared.d.ts +16 -16
  398. package/dist/sdk/extension/source-resolution.d.ts +16 -16
  399. package/dist/sdk/extension/static-inventory.d.ts +23 -23
  400. package/dist/sdk/extension/update-check.d.ts +9 -9
  401. package/dist/sdk/extension-command-context.d.ts +1 -1
  402. package/dist/sdk/extension-contracts.d.ts +10 -10
  403. package/dist/sdk/extension.d.ts +221 -221
  404. package/dist/sdk/files.d.ts +101 -101
  405. package/dist/sdk/flag-invocation-contracts.d.ts +25 -25
  406. package/dist/sdk/flag-invocation-contracts.js +1 -1
  407. package/dist/sdk/generated/generated-error-code-catalog-part-1.d.ts +1 -1
  408. package/dist/sdk/generated/generated-error-code-catalog-part-2.d.ts +1 -1
  409. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  410. package/dist/sdk/generated-error-code-catalog.d.ts +1 -1
  411. package/dist/sdk/governance/artifact-ledgers.d.ts +19 -19
  412. package/dist/sdk/governance/assurance-action-contracts.d.ts +1 -1
  413. package/dist/sdk/governance/assurance-action.d.ts +46 -46
  414. package/dist/sdk/governance/assurance-mutation-error.d.ts +20 -20
  415. package/dist/sdk/governance/assurance-presets.d.ts +25 -25
  416. package/dist/sdk/governance/assurance-runtime.d.ts +10 -10
  417. package/dist/sdk/governance/assurance.d.ts +204 -204
  418. package/dist/sdk/governance/boundary-fixtures.d.ts +32 -32
  419. package/dist/sdk/governance/closure-timestamps.d.ts +10 -10
  420. package/dist/sdk/governance/coverage-assurance.d.ts +7 -7
  421. package/dist/sdk/governance/defect-recurrence-coverage.d.ts +40 -40
  422. package/dist/sdk/governance/defect-recurrence-graph.d.ts +11 -11
  423. package/dist/sdk/governance/defect-recurrence-signals.d.ts +1 -1
  424. package/dist/sdk/governance/defect-recurrence.d.ts +97 -97
  425. package/dist/sdk/governance/defect-recurrence.js +2 -1
  426. package/dist/sdk/governance/extension-host-version.d.ts +9 -9
  427. package/dist/sdk/governance/gc.d.ts +26 -26
  428. package/dist/sdk/governance/health-merge-evidence.d.ts +8 -8
  429. package/dist/sdk/governance/health.d.ts +172 -172
  430. package/dist/sdk/governance/health.js +1 -1
  431. package/dist/sdk/governance/hierarchy-validation.d.ts +16 -16
  432. package/dist/sdk/governance/linked-file-report.d.ts +15 -15
  433. package/dist/sdk/governance/merge-receipt-history.d.ts +24 -24
  434. package/dist/sdk/governance/provenance-health.d.ts +35 -35
  435. package/dist/sdk/governance/reindex.d.ts +102 -102
  436. package/dist/sdk/governance/reliability.d.ts +29 -29
  437. package/dist/sdk/governance/stale-work.d.ts +13 -13
  438. package/dist/sdk/governance/status-role-diagnostics.d.ts +8 -8
  439. package/dist/sdk/governance/storage-integrity.d.ts +28 -28
  440. package/dist/sdk/governance/tracked-runtime-cache.d.ts +7 -7
  441. package/dist/sdk/governance/upgrade.d.ts +77 -77
  442. package/dist/sdk/governance/validate-history-drift.d.ts +3 -3
  443. package/dist/sdk/governance/validate-item-reader.d.ts +9 -9
  444. package/dist/sdk/governance/validate-normalization.d.ts +4 -4
  445. package/dist/sdk/governance/validate.d.ts +176 -176
  446. package/dist/sdk/governance/validate.js +1 -1
  447. package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
  448. package/dist/sdk/governance/workflow-policy.d.ts +18 -18
  449. package/dist/sdk/governance/workspace-position.d.ts +40 -40
  450. package/dist/sdk/governance.d.ts +2 -2
  451. package/dist/sdk/graph/adapter.d.ts +45 -45
  452. package/dist/sdk/graph/analytics.d.ts +36 -36
  453. package/dist/sdk/graph/assembly.d.ts +51 -51
  454. package/dist/sdk/graph/cache.d.ts +19 -19
  455. package/dist/sdk/graph/cardinality-integrity.d.ts +4 -4
  456. package/dist/sdk/graph/centrality.d.ts +20 -20
  457. package/dist/sdk/graph/conformance.d.ts +21 -21
  458. package/dist/sdk/graph/deadline-scheduling.d.ts +30 -30
  459. package/dist/sdk/graph/durable-cache.d.ts +22 -22
  460. package/dist/sdk/graph/governance-contracts.d.ts +1 -1
  461. package/dist/sdk/graph/governance.d.ts +92 -92
  462. package/dist/sdk/graph/hierarchy-integrity.d.ts +32 -32
  463. package/dist/sdk/graph/index.d.ts +15 -15
  464. package/dist/sdk/graph/lifecycle-coverage.d.ts +12 -12
  465. package/dist/sdk/graph/mutation-advisory.d.ts +15 -15
  466. package/dist/sdk/graph/query-contracts.d.ts +6 -6
  467. package/dist/sdk/graph/remediation.d.ts +15 -15
  468. package/dist/sdk/graph/run.d.ts +203 -203
  469. package/dist/sdk/graph/scheduling.d.ts +21 -21
  470. package/dist/sdk/graph/traversal.d.ts +18 -18
  471. package/dist/sdk/graph/workspace-relationship-kind-registry.d.ts +1 -1
  472. package/dist/sdk/guide-topics.d.ts +19 -19
  473. package/dist/sdk/guide.d.ts +43 -43
  474. package/dist/sdk/history/attestation-command.d.ts +8 -8
  475. package/dist/sdk/history/attestation-contract.d.ts +43 -43
  476. package/dist/sdk/history/attestation-scan.d.ts +4 -4
  477. package/dist/sdk/history/attestation.d.ts +4 -4
  478. package/dist/sdk/history/maintenance.d.ts +25 -25
  479. package/dist/sdk/history/salvage.d.ts +19 -19
  480. package/dist/sdk/history/subject.d.ts +8 -8
  481. package/dist/sdk/history-analytics.d.ts +64 -64
  482. package/dist/sdk/history-compact.d.ts +67 -67
  483. package/dist/sdk/history-mcp.d.ts +7 -7
  484. package/dist/sdk/history-provenance.d.ts +40 -40
  485. package/dist/sdk/history-read.d.ts +24 -24
  486. package/dist/sdk/history-redact.d.ts +68 -68
  487. package/dist/sdk/history-repair.d.ts +92 -92
  488. package/dist/sdk/improvement-ledger-validation.d.ts +1 -1
  489. package/dist/sdk/improvement-ledger.d.ts +62 -62
  490. package/dist/sdk/index.d.ts +69 -69
  491. package/dist/sdk/init-agent-guidance.d.ts +68 -68
  492. package/dist/sdk/init.d.ts +117 -117
  493. package/dist/sdk/invocation-author.d.ts +1 -1
  494. package/dist/sdk/item-children.d.ts +15 -15
  495. package/dist/sdk/item-metadata-index.d.ts +2 -2
  496. package/dist/sdk/item-schedule.d.ts +9 -9
  497. package/dist/sdk/item-transaction.d.ts +73 -73
  498. package/dist/sdk/learnings.d.ts +23 -23
  499. package/dist/sdk/lifecycle/append.d.ts +8 -8
  500. package/dist/sdk/lifecycle/claim.d.ts +38 -38
  501. package/dist/sdk/lifecycle/close-many.d.ts +71 -71
  502. package/dist/sdk/lifecycle/close.d.ts +18 -18
  503. package/dist/sdk/lifecycle/copy.d.ts +10 -10
  504. package/dist/sdk/lifecycle/core-field-recovery.d.ts +1 -1
  505. package/dist/sdk/lifecycle/create.d.ts +88 -88
  506. package/dist/sdk/lifecycle/delete.d.ts +15 -15
  507. package/dist/sdk/lifecycle/event-validation-messages.d.ts +1 -1
  508. package/dist/sdk/lifecycle/focus.d.ts +6 -6
  509. package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +6 -6
  510. package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +35 -35
  511. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +3 -3
  512. package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
  513. package/dist/sdk/lifecycle/metadata-normalizers.d.ts +4 -4
  514. package/dist/sdk/lifecycle/mutation-command-options.d.ts +58 -58
  515. package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +1 -1
  516. package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +24 -24
  517. package/dist/sdk/lifecycle/plan.d.ts +127 -127
  518. package/dist/sdk/lifecycle/recurrence-parsers.d.ts +5 -5
  519. package/dist/sdk/lifecycle/reopen.d.ts +15 -15
  520. package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +7 -7
  521. package/dist/sdk/lifecycle/restore.d.ts +34 -34
  522. package/dist/sdk/lifecycle/restore.js +1 -1
  523. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +20 -20
  524. package/dist/sdk/lifecycle/task-composition.d.ts +7 -7
  525. package/dist/sdk/lifecycle/update-many.d.ts +61 -61
  526. package/dist/sdk/lifecycle/update.d.ts +120 -120
  527. package/dist/sdk/lifecycle-completion.d.ts +14 -14
  528. package/dist/sdk/lifecycle-policy.d.ts +31 -31
  529. package/dist/sdk/linked-artifacts.d.ts +58 -58
  530. package/dist/sdk/mcp/apps.d.ts +28 -28
  531. package/dist/sdk/mcp/authorization.d.ts +66 -66
  532. package/dist/sdk/mcp/discovery.d.ts +67 -67
  533. package/dist/sdk/mcp/interactions.d.ts +49 -49
  534. package/dist/sdk/mcp/protocol.d.ts +63 -63
  535. package/dist/sdk/mcp/skills.d.ts +62 -62
  536. package/dist/sdk/mcp/subscriptions.d.ts +26 -26
  537. package/dist/sdk/mcp/tasks.d.ts +51 -51
  538. package/dist/sdk/mcp/transport.d.ts +17 -17
  539. package/dist/sdk/merge/abandoned-receipts.d.ts +8 -8
  540. package/dist/sdk/merge/driver.d.ts +38 -38
  541. package/dist/sdk/merge/index.d.ts +5 -5
  542. package/dist/sdk/merge/install.d.ts +48 -48
  543. package/dist/sdk/merge/install.js +1 -1
  544. package/dist/sdk/merge/receipt-file-boundary.d.ts +6 -6
  545. package/dist/sdk/merge/receipt-operation.d.ts +6 -6
  546. package/dist/sdk/merge/receipt-schema.d.ts +11 -11
  547. package/dist/sdk/merge/receipts.d.ts +111 -111
  548. package/dist/sdk/merge/reconcile.d.ts +20 -20
  549. package/dist/sdk/merge/three-way.d.ts +50 -50
  550. package/dist/sdk/merge/three-way.js +2 -2
  551. package/dist/sdk/merge/worktree-config.d.ts +3 -3
  552. package/dist/sdk/mutation-events.d.ts +62 -62
  553. package/dist/sdk/mutation-guard.d.ts +134 -134
  554. package/dist/sdk/notes.d.ts +28 -28
  555. package/dist/sdk/output/table-rows.d.ts +6 -6
  556. package/dist/sdk/output-contracts.d.ts +26 -26
  557. package/dist/sdk/output-projection.d.ts +108 -108
  558. package/dist/sdk/output-token-accounting.d.ts +18 -18
  559. package/dist/sdk/output.d.ts +18 -18
  560. package/dist/sdk/ownership-source.d.ts +1 -1
  561. package/dist/sdk/package-import-adapters.d.ts +51 -51
  562. package/dist/sdk/package-migrations.d.ts +3 -3
  563. package/dist/sdk/package-runtime-options.d.ts +3 -3
  564. package/dist/sdk/pagination.d.ts +28 -28
  565. package/dist/sdk/pagination.js +1 -1
  566. package/dist/sdk/profile.d.ts +72 -72
  567. package/dist/sdk/provenance.d.ts +37 -37
  568. package/dist/sdk/public-surface.json +1 -1
  569. package/dist/sdk/query/activity.d.ts +84 -84
  570. package/dist/sdk/query/aggregate.d.ts +109 -109
  571. package/dist/sdk/query/calendar.d.ts +95 -95
  572. package/dist/sdk/query/complete-list.d.ts +35 -35
  573. package/dist/sdk/query/context.d.ts +300 -300
  574. package/dist/sdk/query/duplicate-candidates.d.ts +3 -3
  575. package/dist/sdk/query/get.d.ts +54 -54
  576. package/dist/sdk/query/history.d.ts +38 -38
  577. package/dist/sdk/query/item-filter-options.d.ts +41 -41
  578. package/dist/sdk/query/light-metadata.d.ts +1 -1
  579. package/dist/sdk/query/list-filter-shared.d.ts +4 -4
  580. package/dist/sdk/query/list.d.ts +167 -167
  581. package/dist/sdk/query/list.js +1 -1
  582. package/dist/sdk/query/multi-value-filters.d.ts +6 -6
  583. package/dist/sdk/query/next-ready-budget.d.ts +8 -8
  584. package/dist/sdk/query/next.d.ts +94 -94
  585. package/dist/sdk/query/parsers.d.ts +3 -3
  586. package/dist/sdk/query/projection-contracts.d.ts +18 -18
  587. package/dist/sdk/query/search/corpus.d.ts +15 -15
  588. package/dist/sdk/query/search/filters.d.ts +15 -15
  589. package/dist/sdk/query/search/input.d.ts +8 -8
  590. package/dist/sdk/query/search/lexical.d.ts +10 -10
  591. package/dist/sdk/query/search/response.d.ts +22 -22
  592. package/dist/sdk/query/search/semantic.d.ts +133 -133
  593. package/dist/sdk/query/search/types.d.ts +65 -65
  594. package/dist/sdk/query/search-contracts.d.ts +53 -53
  595. package/dist/sdk/query/search-pagination.d.ts +21 -21
  596. package/dist/sdk/query/search-rendering.d.ts +30 -30
  597. package/dist/sdk/query/search.d.ts +60 -60
  598. package/dist/sdk/query/workspace-contracts.d.ts +2 -2
  599. package/dist/sdk/query.d.ts +6 -6
  600. package/dist/sdk/read-output/continuation.d.ts +11 -11
  601. package/dist/sdk/read-output/extension.d.ts +3 -3
  602. package/dist/sdk/read-output/options.d.ts +7 -7
  603. package/dist/sdk/read-output/provenance.d.ts +6 -6
  604. package/dist/sdk/read-output-budget.d.ts +11 -11
  605. package/dist/sdk/read-output-contracts.d.ts +112 -112
  606. package/dist/sdk/read-output-contracts.js +1 -1
  607. package/dist/sdk/read-output-rows.d.ts +15 -15
  608. package/dist/sdk/read-output-session.d.ts +29 -29
  609. package/dist/sdk/relationship-analytics.d.ts +46 -46
  610. package/dist/sdk/relationship-context.d.ts +48 -48
  611. package/dist/sdk/relationship-history.d.ts +59 -59
  612. package/dist/sdk/relationship-kinds/contract.d.ts +18 -18
  613. package/dist/sdk/relationship-migration.d.ts +14 -14
  614. package/dist/sdk/relationships.d.ts +46 -46
  615. package/dist/sdk/reproducibility/process.d.ts +9 -9
  616. package/dist/sdk/runtime/actions.d.ts +1 -1
  617. package/dist/sdk/runtime/context.d.ts +15 -15
  618. package/dist/sdk/runtime/schema-preview.d.ts +1 -1
  619. package/dist/sdk/runtime/schema.d.ts +1 -1
  620. package/dist/sdk/runtime-action-aliases.d.ts +3 -3
  621. package/dist/sdk/runtime-extended-actions.d.ts +9 -9
  622. package/dist/sdk/runtime-input.d.ts +29 -29
  623. package/dist/sdk/runtime-primitives.d.ts +54 -52
  624. package/dist/sdk/runtime-primitives.js +1 -1
  625. package/dist/sdk/runtime-public-contracts.d.ts +46 -46
  626. package/dist/sdk/runtime-stats-options.d.ts +1 -1
  627. package/dist/sdk/runtime.d.ts +374 -374
  628. package/dist/sdk/scheduling-shortcuts.d.ts +19 -19
  629. package/dist/sdk/schema-migration.d.ts +79 -79
  630. package/dist/sdk/schema.d.ts +224 -224
  631. package/dist/sdk/search-refresh-worker.d.ts +1 -1
  632. package/dist/sdk/similarity-scoring.d.ts +10 -10
  633. package/dist/sdk/similarity.d.ts +73 -73
  634. package/dist/sdk/start-task-status.d.ts +1 -1
  635. package/dist/sdk/stats.d.ts +72 -72
  636. package/dist/sdk/structured-mutations.d.ts +13 -13
  637. package/dist/sdk/telemetry-flush.d.ts +1 -1
  638. package/dist/sdk/telemetry.d.ts +32 -32
  639. package/dist/sdk/templates.d.ts +35 -35
  640. package/dist/sdk/test/batch.d.ts +50 -50
  641. package/dist/sdk/test/command-args.d.ts +2 -2
  642. package/dist/sdk/test/entry.d.ts +4 -4
  643. package/dist/sdk/test/execution-receipts.d.ts +5 -5
  644. package/dist/sdk/test/execution.d.ts +247 -247
  645. package/dist/sdk/test/json-path.d.ts +4 -4
  646. package/dist/sdk/test/linked-command-detection.d.ts +36 -36
  647. package/dist/sdk/test/measurements.d.ts +10 -10
  648. package/dist/sdk/test/parsers.d.ts +18 -18
  649. package/dist/sdk/test/prerequisites.d.ts +3 -3
  650. package/dist/sdk/test/runs.d.ts +43 -43
  651. package/dist/sdk/test/trust.d.ts +15 -15
  652. package/dist/sdk/test/update.d.ts +23 -23
  653. package/dist/sdk/test/workspace-snapshot.d.ts +1 -1
  654. package/dist/sdk/testing.d.ts +250 -246
  655. package/dist/sdk/testing.js +2 -2
  656. package/dist/sdk/traceability/runtime-files-lookup.d.ts +1 -1
  657. package/dist/sdk/traceability/source-traceability.d.ts +50 -50
  658. package/dist/sdk/workspace-contracts-cache.d.ts +2 -2
  659. package/dist/sdk/workspace-contracts.d.ts +20 -20
  660. package/dist/sdk/workspace-memory.d.ts +42 -42
  661. package/dist/sdk/workspace-recipe.d.ts +9 -9
  662. package/dist/sdk/workspace-snapshot.d.ts +60 -60
  663. package/dist/sdk/workspace-transaction-gc.d.ts +17 -17
  664. package/dist/sdk/workspace-transaction.d.ts +26 -26
  665. package/dist/sdk/workspace.d.ts +9 -9
  666. package/dist/types.d.ts +540 -540
  667. package/docs/COMMANDS.md +11 -2
  668. package/docs/CONFIGURATION.md +43 -0
  669. package/docs/DEFECT_RECURRENCE.md +8 -0
  670. package/docs/EXTENSIONS.md +1 -1
  671. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +33 -0
  672. package/docs/LINKED_TEST_EDITS.md +15 -0
  673. package/docs/MERGE_SAFETY.md +8 -0
  674. package/docs/RELEASING.md +2 -0
  675. package/docs/SDK.md +19 -0
  676. package/docs/TESTING.md +21 -1
  677. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
  678. package/marketplace.json +1 -1
  679. package/package.json +3 -1
  680. package/packages/pm-beads/package.json +1 -1
  681. package/packages/pm-calendar/package.json +1 -1
  682. package/packages/pm-command-kit/package.json +1 -1
  683. package/packages/pm-digital-twin/package.json +1 -1
  684. package/packages/pm-governance-audit/package.json +1 -1
  685. package/packages/pm-guide-shell/package.json +1 -1
  686. package/packages/pm-kanban/package.json +1 -1
  687. package/packages/pm-lifecycle-hooks/package.json +1 -1
  688. package/packages/pm-linked-test-adapters/package.json +1 -1
  689. package/packages/pm-search-advanced/package.json +1 -1
  690. package/packages/pm-templates/package.json +1 -1
  691. package/packages/pm-todos/package.json +1 -1
  692. package/packages/pm-vcs/package.json +1 -1
  693. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  694. package/plugins/pm-claude/package.json +1 -1
  695. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  696. package/plugins/pm-codex/package.json +1 -1
  697. package/plugins/pm-codex/plugin.json +1 -1
  698. package/runtime-dependencies.json +1 -1
  699. package/scripts/finalize-build.mjs +9 -3
  700. package/dist/cli-bundle/chunks/chunk-DJDRHJBP.js +0 -234
  701. package/dist/cli-bundle/chunks/chunk-DUK5DHI6.js +0 -8
  702. package/dist/cli-bundle/chunks/chunk-IFPJDJUM.js +0 -20
  703. package/dist/cli-bundle/chunks/chunk-RL45OYTL.js +0 -6
  704. package/dist/cli-bundle/chunks/chunk-WYZGZV2M.js +0 -2
  705. package/dist/cli-bundle/focused-chunks/chunk-F5J3ATMV.js +0 -165
  706. package/dist/cli-bundle/focused-chunks/chunk-IOTNG6CN.js +0 -2
  707. package/dist/cli-bundle/focused-chunks/chunk-S6ITXQ5T.js +0 -20
  708. package/dist/cli-bundle/focused-chunks/chunk-UPJA45K7.js +0 -26
@@ -1,8 +1,8 @@
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]="2df3e178-3a2b-5a45-89d8-628eca782453")}catch{}})();import{activateExtensions,deactivateExtensions,runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride}from"../core/extensions/loader.js";import{createDefaultExtensionGovernancePolicy}from"../core/extensions/extension-types.js";import{getMigrationRuntimeDefinition,resolveRegisteredSearchProvider,resolveRegisteredVectorStoreAdapter}from"../core/extensions/runtime-registrations.js";import{collectUsedExtensionCapabilities}from"../core/extensions/capability-usage.js";import{normalizeKnownExtensionCapability}from"../core/extensions/extension-capability-aliases.js";import{checkExtensionManifestCompatibility,describeExtensionBlueprint,lintExtensionBlueprint,preflightExtension}from"./compose.js";import{describeExtensionActivation}from"../core/extensions/activation-summary.js";import{lintProjectProfile}from"../core/profile/profile-lint.js";import{renderExtensionSurfaceMarkdown}from"../core/extensions/activation-summary-markdown.js";import{asPropertyRecord,resolveActivatablePropertyRecord}from"../core/shared/primitives.js";import{createExtensionCommandSdk}from"./extension-command-context.js";import{PmClient}from"./runtime.js";function registeredExpectationName(expectation,legacyValue){return expectation.name??legacyValue??""}const HOOK_KIND_TO_REGISTRY_FIELD={before_command:"beforeCommand",before_mutation:"beforeMutation",after_command:"afterCommand",on_read:"onRead",on_write:"onWrite",on_index:"onIndex"},RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD={before_command:"beforeCommand",after_command:"afterCommand",on_read:"onRead",on_write:"onWrite",on_index:"onIndex"};function normalizeSdkIdentifier(value){return value.trim().toLowerCase()}function normalizeSdkProfileMatchKey(value){return normalizeSdkIdentifier(value).replaceAll("-","_")}function extensionNameSuffix(extensionName){return extensionName?` from extension "${extensionName}"`:""}function sortedUnique(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function normalizeSdkCommandName(command){if(typeof command!="string")throw new Error('A command name string is required. Pass it via the options object, e.g. runRegisteredCommandForTest(activation, { command: "my command" }) \u2014 positional command arguments are not supported.');return command.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function formatAvailable(values){return values.length>0?values.join(", "):"(none)"}function assertStringSetIncludes(actual,expected,label){const actualValues=new Set(actual??[]),missing=sortedUnique(expected.filter(value=>!actualValues.has(value)));if(missing.length>0)throw new Error(`Expected package manifest ${label} to include ${missing.join(", ")}; available: ${formatAvailable(sortedUnique(actual??[]))}`)}function collectFlagLabels(flags){const labels=new Set;for(const flag of flags)typeof flag.long=="string"&&flag.long.trim().length>0&&labels.add(flag.long.trim()),typeof flag.short=="string"&&flag.short.trim().length>0&&labels.add(flag.short.trim());return labels}function readTestExtensionManifest(module){const moduleRecord=asPropertyRecord(module);if(!moduleRecord)return{};const manifest=asPropertyRecord(moduleRecord.manifest);if(manifest)return manifest;const defaultExport=asPropertyRecord(moduleRecord.default);return asPropertyRecord(defaultExport?.manifest)||(defaultExport&&typeof moduleRecord.default!="function"&&("name"in defaultExport||"capabilities"in defaultExport)?defaultExport:typeof module!="function"&&("name"in moduleRecord||"capabilities"in moduleRecord)?moduleRecord:{})}function resolveTestExtensionName(manifest,explicitName){return explicitName??(typeof manifest.name=="string"&&manifest.name.trim().length>0?manifest.name.trim():"test-extension")}function readTestExtensionCapabilities(manifest,options){return Array.isArray(options.capabilities)?[...options.capabilities]:Array.isArray(manifest.capabilities)?manifest.capabilities.filter(capability=>typeof capability=="string"):[]}function buildSingleExtensionLoadResult(module,manifest,identity){return{disabled_by_flag:!1,roots:{global:"",project:""},configured_enabled:[],configured_disabled:[],discovered:[],effective:[],warnings:[],policy:identity.policy,failed:[],loaded:[{layer:identity.layer,directory:"",manifest_path:"",name:identity.name,version:typeof manifest.version=="string"?manifest.version:"0.0.0",entry:typeof manifest.entry=="string"?manifest.entry:"./index.js",priority:typeof manifest.priority=="number"?manifest.priority:0,entry_path:"",capabilities:identity.capabilities,manifest_version:typeof manifest.manifest_version=="number"?manifest.manifest_version:void 0,pm_min_version:typeof manifest.pm_min_version=="string"?manifest.pm_min_version:void 0,pm_max_version:typeof manifest.pm_max_version=="string"?manifest.pm_max_version:void 0,engines:manifest.engines,trusted:manifest.trusted,provenance:manifest.provenance,sandbox_profile:manifest.sandbox_profile,permissions:manifest.permissions,activation:manifest.activation,module}]}}async function activateExtensionForTest(module,options={}){const manifest=readTestExtensionManifest(module);return activateExtensions(buildSingleExtensionLoadResult(module,manifest,{name:resolveTestExtensionName(manifest,options.name),layer:options.layer??"project",capabilities:readTestExtensionCapabilities(manifest,options),policy:options.policy??createDefaultExtensionGovernancePolicy()}))}async function deactivateExtensionForTest(module,options={}){const manifest=readTestExtensionManifest(module);return deactivateExtensions(buildSingleExtensionLoadResult(module,manifest,{name:resolveTestExtensionName(manifest,options.name),layer:options.layer??"project",capabilities:readTestExtensionCapabilities(manifest,{}),policy:createDefaultExtensionGovernancePolicy()}),options.activation,options.deactivateTimeoutMs===void 0?{}:{deactivate_timeout_ms:options.deactivateTimeoutMs})}async function runRegisteredCommandForTest(commands,options){const command=normalizeSdkCommandName(options.command);if(command.length===0)throw new Error("Expected command name must be a non-empty string");if(!commands.handlers.some(entry=>entry.command===command)){const available=sortedUnique(commands.handlers.map(entry=>entry.command));throw new Error(`Expected a registered command handler for "${command}" to invoke. Available command handlers: ${formatAvailable(available)}`)}if(options.sdk!==void 0&&options.sdkFactory!==void 0)throw new TypeError("runRegisteredCommandForTest accepts sdk or sdkFactory, not both");const pmRoot=options.pmRoot??"",global2={json:!0,quiet:!0,noPager:!0,...options.global},sdk=options.sdk??options.sdkFactory?.({pmRoot,global:global2})??(pmRoot.length>0?createExtensionCommandSdk(pmRoot,new PmClient({pmRoot}),void 0,command):void 0);return runCommandHandler(commands,{command,args:options.args?[...options.args]:[],options:options.options?{...options.options}:{},global:global2,pm_root:pmRoot,...sdk===void 0?{}:{sdk}})}async function runRegisteredMutationGuardForTest(hooks,options){if((hooks.beforeMutation?.length??0)===0)throw new Error("Expected a registered before_mutation hook to invoke");await runBeforeMutationHooks(hooks,options.context)}async function runRegisteredHookForTest(hooks,options){const kind=options.kind;if(kind==="before_mutation")throw new Error("Invoke before_mutation hooks with runRegisteredMutationGuardForTest so denials and failures retain fail-closed semantics.");if((hooks[RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD[kind]]?.length??0)===0){const populatedKinds=sortedUnique(Object.keys(RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD).filter(candidateKind=>(hooks[RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD[candidateKind]]?.length??0)>0));throw new Error(`Expected a registered "${kind}" hook to invoke. Hook kinds with registrations: ${formatAvailable(populatedKinds)}`)}switch(options.kind){case"before_command":return runBeforeCommandHooks(hooks,options.context);case"after_command":return runAfterCommandHooks(hooks,options.context);case"on_read":return runOnReadHooks(hooks,options.context);case"on_write":return runOnWriteHooks(hooks,options.context);case"on_index":return runOnIndexHooks(hooks,options.context)}}async function runRegisteredParserOverrideForTest(parsers,context){const command=normalizeSdkCommandName(context.command);if(!parsers.overrides.some(entry=>entry.command===command))throw new Error(`Expected a registered parser override for command "${command}" to invoke. Available parser override commands: ${formatAvailable(sortedUnique(parsers.overrides.map(entry=>entry.command)))}`);return runParserOverride(parsers,context)}async function runRegisteredPreflightOverrideForTest(preflight,context){if(preflight.overrides.length===0)throw new Error("Expected a registered preflight override to invoke, but none are registered.");return runPreflightOverride(preflight,context)}async function runRegisteredCommandOverrideForTest(commands,context){const command=normalizeSdkCommandName(context.command);if(!commands.overrides.some(entry=>entry.command===command))throw new Error(`Expected a registered command override for command "${command}" to invoke. Available command override commands: ${formatAvailable(sortedUnique(commands.overrides.map(entry=>entry.command)))}`);return runCommandOverride(commands,context)}async function runRegisteredRendererOverrideForTest(renderers,context){if(!renderers.overrides.some(entry=>entry.format===context.format))throw new Error(`Expected a registered renderer override for format "${context.format}" to invoke. Available renderer override formats: ${formatAvailable(sortedUnique(renderers.overrides.map(entry=>entry.format)))}`);return runRendererOverride(renderers,context)}async function runRegisteredServiceOverrideForTest(services,context){if(!services.overrides.some(entry=>entry.service===context.service))throw new Error(`Expected a registered service override for service "${context.service}" to invoke. Available service override services: ${formatAvailable(sortedUnique(services.overrides.map(entry=>entry.service)))}`);return runServiceOverride(services,context)}const SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS={query:["query"],embed:["embed"],embedBatch:["embedBatch","embed_batch"],queryExpansion:["queryExpansion","query_expansion"],rerank:["rerank"]};async function runRegisteredSearchProviderForTest(registrations,options){const registration=resolveRegisteredSearchProvider(registrations,options.provider);if(!registration){const available=sortedUnique(registrations.search_providers.map(entry=>entry.definition.name));throw new Error(`Expected a registered search provider "${options.provider}" to invoke. Available search providers: ${formatAvailable(available)}`)}const runtimeDefinition=registration.runtime_definition,operationFn=SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS[options.operation].map(key=>runtimeDefinition[key]).find(value=>typeof value=="function");if(typeof operationFn!="function")throw new Error(`Registered search provider "${options.provider}" does not implement the "${options.operation}" operation.`);return await operationFn(options.context)}async function runRegisteredVectorStoreAdapterForTest(registrations,options){const registration=resolveRegisteredVectorStoreAdapter(registrations,options.adapter);if(!registration){const available=sortedUnique(registrations.vector_store_adapters.map(entry=>entry.definition.name));throw new Error(`Expected a registered vector store adapter "${options.adapter}" to invoke. Available vector store adapters: ${formatAvailable(available)}`)}const operationFn=registration.runtime_definition[options.operation];if(typeof operationFn!="function")throw new Error(`Registered vector store adapter "${options.adapter}" does not implement the "${options.operation}" operation.`);return await operationFn(options.context)}async function runRegisteredMigrationForTest(registrations,options){const migration=assertRegisteredMigration(registrations,{migration:options.migration,extensionName:options.extensionName}),run=getMigrationRuntimeDefinition(migration).run;if(typeof run!="function")throw new Error(`Registered migration "${options.migration}" does not implement a run function to invoke.`);const declaredStatus=migration.definition.status,context={id:migration.definition.id,command:"migration",layer:migration.layer,extension:migration.name,pm_root:options.pmRoot??"",status:(typeof declaredStatus=="string"?declaredStatus.trim().toLowerCase():"")||"pending"};return await run(context)}async function runRegisteredImporterForTest(activation,options){const importer=assertRegisteredImporter(activation.registrations,{importer:options.importer,extensionName:options.extensionName});return runRegisteredCommandForTest(activation.commands,{command:`${importer.importer} import`,args:options.args,options:options.options,global:options.global,pmRoot:options.pmRoot})}async function runRegisteredExporterForTest(activation,options){const exporter=assertRegisteredExporter(activation.registrations,{exporter:options.exporter,extensionName:options.extensionName});return runRegisteredCommandForTest(activation.commands,{command:`${exporter.exporter} export`,args:options.args,options:options.options,global:options.global,pmRoot:options.pmRoot})}function assertExtensionDeactivated(result,expectation={}){const expectedDeactivated=expectation.deactivated??1;if(result.deactivated!==expectedDeactivated)throw new Error(`Expected ${expectedDeactivated} extension${expectedDeactivated===1?"":"s"} to deactivate cleanly, but ${result.deactivated} did.`);const expectedFailed=expectation.failed??0;if(result.failed.length!==expectedFailed){const detail=result.failed.map(failure=>`${failure.layer}:${failure.name} (${failure.error})`).join(", ");throw new Error(`Expected ${expectedFailed} teardown failure${expectedFailed===1?"":"s"}, but observed ${result.failed.length}${detail.length>0?`: ${detail}`:""}.`)}return result}function assertPackageManifest(manifest,expectation){if(expectation.packageName!==void 0&&manifest.package_name!==expectation.packageName)throw new Error(`Expected package manifest package_name to be "${expectation.packageName}"; received "${manifest.package_name??"(none)"}"`);if(expectation.aliases!==void 0&&assertStringSetIncludes(manifest.aliases,expectation.aliases,"aliases"),expectation.resources!==void 0)for(const[kind,expectedPaths]of Object.entries(expectation.resources))assertStringSetIncludes(manifest.resources[kind],expectedPaths,`pm.${kind}`);return manifest}function assertRegisteredCommandContract(registrations,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const commandCandidates=registrations.commands.filter(entry=>entry.command===expectedCommand),command=expectation.extensionName?commandCandidates.find(entry=>entry.name===expectation.extensionName):commandCandidates[0];if(!command){const available=registrations.commands.map(entry=>entry.command).sort((left,right)=>left.localeCompare(right)),extensionSuffix=expectation.extensionName?` from extension "${expectation.extensionName}"`:"";throw new Error(`Expected extension command "${expectedCommand}"${extensionSuffix} to be registered. Available commands: ${formatAvailable(available)}`)}if(expectation.action!==void 0&&command.action!==expectation.action)throw new Error(`Expected extension command "${expectedCommand}" action "${expectation.action}", received "${command.action}"`);if(expectation.arguments!==void 0){const actualArguments=(command.arguments??[]).map(argument=>argument.name),missingArguments=expectation.arguments.filter(argument=>!actualArguments.includes(argument));if(missingArguments.length>0)throw new Error(`Expected extension command "${expectedCommand}" arguments ${formatAvailable(expectation.arguments)}; missing ${formatAvailable(missingArguments)}; available ${formatAvailable(actualArguments)}`)}const flags=registrations.flags.filter(entry=>entry.target_command===expectedCommand&&(expectation.extensionName===void 0||entry.name===expectation.extensionName)).flatMap(entry=>entry.flags);if(expectation.flags!==void 0){const actualFlagLabels=collectFlagLabels(flags),missingFlags=expectation.flags.filter(flag=>!actualFlagLabels.has(flag));if(missingFlags.length>0)throw new Error(`Expected extension command "${expectedCommand}" flags ${formatAvailable(expectation.flags)}; missing ${formatAvailable(missingFlags)}; available ${formatAvailable([...actualFlagLabels].sort((left,right)=>left.localeCompare(right)))}`)}return{command,flags}}function assertRegisteredFlags(registrations,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.targetCommand));if(expectedCommand.length===0)throw new Error("Expected target command name must be a non-empty string");const candidates=registrations.flags.filter(entry=>entry.target_command===expectedCommand);let registration;if(expectation.extensionName)registration=candidates.find(entry=>entry.name===expectation.extensionName);else if(candidates.length===1)registration=candidates[0];else if(candidates.length>1){const availableExtensions=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected flags for target command "${expectedCommand}" matched multiple extensions: ${formatAvailable(availableExtensions)}. Specify extensionName to choose one registration.`)}if(!registration){const available=sortedUnique(registrations.flags.map(entry=>entry.target_command)),availableExtensions=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected flags for target command "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available flag target commands: ${formatAvailable(available)}; matching extensions: ${formatAvailable(availableExtensions)}`)}if(expectation.flags!==void 0){const actualFlagLabels=collectFlagLabels(registration.flags),missingFlags=expectation.flags.filter(flag=>!actualFlagLabels.has(flag));if(missingFlags.length>0)throw new Error(`Expected flags for target command "${expectedCommand}" to include ${formatAvailable(expectation.flags)}; missing ${formatAvailable(missingFlags)}; available ${formatAvailable([...actualFlagLabels].sort((left,right)=>left.localeCompare(right)))}`)}return registration}function assertRegisteredHook(hooks,expectation){const field=HOOK_KIND_TO_REGISTRY_FIELD[expectation.kind],candidates=hooks[field]??[],hook=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!hook){const available=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected a "${expectation.kind}" hook${extensionNameSuffix(expectation.extensionName)} to be registered. Available "${expectation.kind}" hooks: ${formatAvailable(available)}`)}return hook}function assertRegisteredSearchProvider(registrations,expectation){const expectedProvider=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.provider));if(expectedProvider.length===0)throw new Error("Expected search provider name must be a non-empty string");const candidates=registrations.search_providers.filter(entry=>normalizeSdkIdentifier(entry.definition.name)===expectedProvider),provider=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!provider){const available=sortedUnique(registrations.search_providers.map(entry=>entry.definition.name));throw new Error(`Expected search provider "${expectedProvider}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available search providers: ${formatAvailable(available)}`)}return provider}function assertRegisteredVectorStoreAdapter(registrations,expectation){const expectedAdapter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.adapter));if(expectedAdapter.length===0)throw new Error("Expected vector store adapter name must be a non-empty string");const candidates=registrations.vector_store_adapters.filter(entry=>normalizeSdkIdentifier(entry.definition.name)===expectedAdapter),adapter=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!adapter){const available=sortedUnique(registrations.vector_store_adapters.map(entry=>entry.definition.name));throw new Error(`Expected vector store adapter "${expectedAdapter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available vector store adapters: ${formatAvailable(available)}`)}return adapter}function assertRegisteredImporter(registrations,expectation){const expectedImporter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.importer));if(expectedImporter.length===0)throw new Error("Expected importer name must be a non-empty string");const candidates=registrations.importers.filter(entry=>normalizeSdkIdentifier(entry.importer)===expectedImporter),importer=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!importer){const available=sortedUnique(registrations.importers.map(entry=>entry.importer));throw new Error(`Expected importer "${expectedImporter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available importers: ${formatAvailable(available)}`)}return importer}function assertRegisteredExporter(registrations,expectation){const expectedExporter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.exporter));if(expectedExporter.length===0)throw new Error("Expected exporter name must be a non-empty string");const candidates=registrations.exporters.filter(entry=>normalizeSdkIdentifier(entry.exporter)===expectedExporter),exporter=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!exporter){const available=sortedUnique(registrations.exporters.map(entry=>entry.exporter));throw new Error(`Expected exporter "${expectedExporter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available exporters: ${formatAvailable(available)}`)}return exporter}function assertRegisteredItemField(registrations,expectation){const expectedField=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.field));if(expectedField.length===0)throw new Error("Expected item field name must be a non-empty string");const match=registrations.item_fields.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).map(registration=>({registration,field:registration.fields.find(field=>normalizeSdkIdentifier(field.name)===expectedField)})).filter(entry=>entry.field!==void 0).find(entry=>expectation.type===void 0||entry.field.type===expectation.type);if(!match){const available=sortedUnique(registrations.item_fields.flatMap(entry=>entry.fields.map(field=>`${field.name}:${field.type}`)));throw new Error(`Expected item field "${expectedField}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available item fields: ${formatAvailable(available)}`)}return match}function assertRegisteredItemType(registrations,expectation){const expectedType=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.itemType));if(expectedType.length===0)throw new Error("Expected item type name must be a non-empty string");const match=registrations.item_types.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).map(registration=>({registration,itemType:registration.types.find(itemType=>normalizeSdkIdentifier(itemType.name)===expectedType)})).filter(entry=>entry.itemType!==void 0).find(entry=>expectation.folder===void 0||entry.itemType.folder===expectation.folder);if(!match){const available=sortedUnique(registrations.item_types.flatMap(entry=>entry.types.map(itemType=>`${itemType.name}:${itemType.folder}`)));throw new Error(`Expected item type "${expectedType}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available item types: ${formatAvailable(available)}`)}return match}function assertRegisteredProfile(registrations,expectation){const expectedProfile=normalizeSdkProfileMatchKey(registeredExpectationName(expectation,expectation.profile));if(expectedProfile.length===0)throw new Error("Expected profile name must be a non-empty string");const match=registrations.profiles.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).find(entry=>normalizeSdkProfileMatchKey(entry.profile.name)===expectedProfile);if(!match){const available=sortedUnique(registrations.profiles.map(entry=>entry.profile.name));throw new Error(`Expected profile "${expectedProfile}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available profiles: ${formatAvailable(available)}`)}return{registration:match,profile:match.profile}}function assertRegisteredCommandOverride(commands,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const candidates=commands.overrides.filter(entry=>entry.command===expectedCommand),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(commands.overrides.map(entry=>entry.command));throw new Error(`Expected command override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available command overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredParserOverride(parsers,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const candidates=parsers.overrides.filter(entry=>entry.command===expectedCommand),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(parsers.overrides.map(entry=>entry.command));throw new Error(`Expected parser override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available parser overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredPreflightOverride(preflight,expectation={}){const override=expectation.extensionName?preflight.overrides.find(entry=>entry.name===expectation.extensionName):preflight.overrides[0];if(!override){const available=sortedUnique(preflight.overrides.map(entry=>entry.name));throw new Error(`Expected a preflight override${extensionNameSuffix(expectation.extensionName)} to be registered. Available preflight overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredRendererOverride(renderers,expectation){const expectedFormat=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.format));if(expectedFormat.length===0)throw new Error("Expected renderer format must be a non-empty string");const candidates=renderers.overrides.filter(entry=>entry.format===expectedFormat),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(renderers.overrides.map(entry=>entry.format));throw new Error(`Expected renderer override "${expectedFormat}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available renderer overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredServiceOverride(services,expectation){const expectedService=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.service));if(expectedService.length===0)throw new Error("Expected service name must be a non-empty string");const candidates=services.overrides.filter(entry=>normalizeSdkIdentifier(entry.service)===expectedService),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(services.overrides.map(entry=>entry.service));throw new Error(`Expected service override "${expectedService}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available service overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredMigration(registrations,expectation){const expectedMigration=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.migration));if(expectedMigration.length===0)throw new Error("Expected migration id must be a non-empty string");const candidates=registrations.migrations.filter(entry=>(expectation.extensionName===void 0||entry.name===expectation.extensionName)&&typeof entry.definition.id=="string"&&normalizeSdkIdentifier(entry.definition.id)===expectedMigration),match=candidates.find(entry=>expectation.mandatory===void 0||(entry.definition.mandatory??!1)===expectation.mandatory);if(match)return match;const idMatch=candidates[0];if(idMatch!==void 0)throw new Error(`Expected migration "${expectedMigration}"${extensionNameSuffix(expectation.extensionName)} to have mandatory=${expectation.mandatory}, but it is mandatory=${idMatch.definition.mandatory??!1}.`);const available=sortedUnique(registrations.migrations.map(entry=>`${typeof entry.definition.id=="string"&&entry.definition.id.trim().length>0?entry.definition.id.trim():"(unnamed)"}:${entry.definition.mandatory===!0}`));throw new Error(`Expected migration "${expectedMigration}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available migrations: ${formatAvailable(available)}`)}function assertExtensionCapabilityUsage(activation,expectation){const toKnownCapabilitySet=(capabilities,field)=>{const known=new Set;for(const capability of capabilities){const normalized=normalizeKnownExtensionCapability(capability);if(normalized===null)throw new Error(`Expected ${field} capability "${capability}" to be a known extension capability. Use canonical capability names (see manifest.capabilities).`);known.add(normalized)}return known},declared=[...toKnownCapabilitySet(expectation.declared,"declared")].sort((left,right)=>left.localeCompare(right)),allowUnused=toKnownCapabilitySet(expectation.allowUnused??[],"allowUnused"),used=collectUsedExtensionCapabilities(activation,{extensionName:expectation.extensionName}),usedSet=new Set(used),unused=declared.filter(capability=>!usedSet.has(capability)&&!allowUnused.has(capability));if(unused.length>0){const scopeSuffix=extensionNameSuffix(expectation.extensionName);throw new Error(`Expected every declared capability${scopeSuffix} to be exercised, but [${unused.join(", ")}] ${unused.length===1?"is":"are"} declared yet never registered against. Remove ${unused.length===1?"it":"them"} from manifest.capabilities for least privilege, or pass allowUnused for capabilities registered only behind a runtime flag.`)}return{declared,used,unused}}function assertExtensionBlueprint(blueprint,options={}){const result=lintExtensionBlueprint(blueprint,options);if(!result.ok){const errors=result.findings.filter(finding=>finding.severity==="error");throw new Error(`Extension blueprint failed preflight with ${errors.length} ${errors.length===1?"error":"errors"}:
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]="0b5eab16-4305-5dfd-902c-fefc7ee0de2b")}catch{}})();import{activateExtensions,deactivateExtensions,runAfterCommandHooks,runBeforeCommandHooks,runBeforeMutationHooks,runCommandHandler,runCommandOverride,runOnIndexHooks,runOnReadHooks,runOnWriteHooks,runParserOverride,runPreflightOverride,runRendererOverride,runServiceOverride}from"../core/extensions/loader.js";import{createDefaultExtensionGovernancePolicy}from"../core/extensions/extension-types.js";import{getMigrationRuntimeDefinition,resolveRegisteredSearchProvider,resolveRegisteredVectorStoreAdapter}from"../core/extensions/runtime-registrations.js";import{collectUsedExtensionCapabilities}from"../core/extensions/capability-usage.js";import{normalizeKnownExtensionCapability}from"../core/extensions/extension-capability-aliases.js";import{checkExtensionManifestCompatibility,describeExtensionBlueprint,lintExtensionBlueprint,preflightExtension}from"./compose.js";import{describeExtensionActivation}from"../core/extensions/activation-summary.js";import{lintProjectProfile}from"../core/profile/profile-lint.js";import{renderExtensionSurfaceMarkdown}from"../core/extensions/activation-summary-markdown.js";import{asPropertyRecord,resolveActivatablePropertyRecord}from"../core/shared/primitives.js";import{createExtensionCommandSdk}from"./extension-command-context.js";import{PmClient}from"./runtime.js";import{decode,encode}from"@toon-format/toon";function registeredExpectationName(expectation,legacyValue){return expectation.name??legacyValue??""}const HOOK_KIND_TO_REGISTRY_FIELD={before_command:"beforeCommand",before_mutation:"beforeMutation",after_command:"afterCommand",on_read:"onRead",on_write:"onWrite",on_index:"onIndex"},RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD={before_command:"beforeCommand",after_command:"afterCommand",on_read:"onRead",on_write:"onWrite",on_index:"onIndex"};function normalizeSdkIdentifier(value){return value.trim().toLowerCase()}function normalizeSdkProfileMatchKey(value){return normalizeSdkIdentifier(value).replaceAll("-","_")}function extensionNameSuffix(extensionName){return extensionName?` from extension "${extensionName}"`:""}function sortedUnique(values){return[...new Set(values)].sort((left,right)=>left.localeCompare(right))}function normalizeSdkCommandName(command){if(typeof command!="string")throw new Error('A command name string is required. Pass it via the options object, e.g. runRegisteredCommandForTest(activation, { command: "my command" }) \u2014 positional command arguments are not supported.');return command.trim().toLowerCase().split(/\s+/).filter(part=>part.length>0).join(" ")}function formatAvailable(values){return values.length>0?values.join(", "):"(none)"}function assertStringSetIncludes(actual,expected,label){const actualValues=new Set(actual??[]),missing=sortedUnique(expected.filter(value=>!actualValues.has(value)));if(missing.length>0)throw new Error(`Expected package manifest ${label} to include ${missing.join(", ")}; available: ${formatAvailable(sortedUnique(actual??[]))}`)}function collectFlagLabels(flags){const labels=new Set;for(const flag of flags)typeof flag.long=="string"&&flag.long.trim().length>0&&labels.add(flag.long.trim()),typeof flag.short=="string"&&flag.short.trim().length>0&&labels.add(flag.short.trim());return labels}function readTestExtensionManifest(module){const moduleRecord=asPropertyRecord(module);if(!moduleRecord)return{};const manifest=asPropertyRecord(moduleRecord.manifest);if(manifest)return manifest;const defaultExport=asPropertyRecord(moduleRecord.default);return asPropertyRecord(defaultExport?.manifest)||(defaultExport&&typeof moduleRecord.default!="function"&&("name"in defaultExport||"capabilities"in defaultExport)?defaultExport:typeof module!="function"&&("name"in moduleRecord||"capabilities"in moduleRecord)?moduleRecord:{})}function resolveTestExtensionName(manifest,explicitName){return explicitName??(typeof manifest.name=="string"&&manifest.name.trim().length>0?manifest.name.trim():"test-extension")}function readTestExtensionCapabilities(manifest,options){return Array.isArray(options.capabilities)?[...options.capabilities]:Array.isArray(manifest.capabilities)?manifest.capabilities.filter(capability=>typeof capability=="string"):[]}function buildSingleExtensionLoadResult(module,manifest,identity){return{disabled_by_flag:!1,roots:{global:"",project:""},configured_enabled:[],configured_disabled:[],discovered:[],effective:[],warnings:[],policy:identity.policy,failed:[],loaded:[{layer:identity.layer,directory:"",manifest_path:"",name:identity.name,version:typeof manifest.version=="string"?manifest.version:"0.0.0",entry:typeof manifest.entry=="string"?manifest.entry:"./index.js",priority:typeof manifest.priority=="number"?manifest.priority:0,entry_path:"",capabilities:identity.capabilities,manifest_version:typeof manifest.manifest_version=="number"?manifest.manifest_version:void 0,pm_min_version:typeof manifest.pm_min_version=="string"?manifest.pm_min_version:void 0,pm_max_version:typeof manifest.pm_max_version=="string"?manifest.pm_max_version:void 0,engines:manifest.engines,trusted:manifest.trusted,provenance:manifest.provenance,sandbox_profile:manifest.sandbox_profile,permissions:manifest.permissions,activation:manifest.activation,module}]}}async function activateExtensionForTest(module,options={}){const manifest=readTestExtensionManifest(module);return activateExtensions(buildSingleExtensionLoadResult(module,manifest,{name:resolveTestExtensionName(manifest,options.name),layer:options.layer??"project",capabilities:readTestExtensionCapabilities(manifest,options),policy:options.policy??createDefaultExtensionGovernancePolicy()}))}async function deactivateExtensionForTest(module,options={}){const manifest=readTestExtensionManifest(module);return deactivateExtensions(buildSingleExtensionLoadResult(module,manifest,{name:resolveTestExtensionName(manifest,options.name),layer:options.layer??"project",capabilities:readTestExtensionCapabilities(manifest,{}),policy:createDefaultExtensionGovernancePolicy()}),options.activation,options.deactivateTimeoutMs===void 0?{}:{deactivate_timeout_ms:options.deactivateTimeoutMs})}async function runRegisteredCommandForTest(commands,options){const command=normalizeSdkCommandName(options.command);if(command.length===0)throw new Error("Expected command name must be a non-empty string");if(!commands.handlers.some(entry=>entry.command===command)){const available=sortedUnique(commands.handlers.map(entry=>entry.command));throw new Error(`Expected a registered command handler for "${command}" to invoke. Available command handlers: ${formatAvailable(available)}`)}if(options.sdk!==void 0&&options.sdkFactory!==void 0)throw new TypeError("runRegisteredCommandForTest accepts sdk or sdkFactory, not both");const pmRoot=options.pmRoot??"",global2={json:!0,quiet:!0,noPager:!0,...options.global},sdk=options.sdk??options.sdkFactory?.({pmRoot,global:global2})??(pmRoot.length>0?createExtensionCommandSdk(pmRoot,new PmClient({pmRoot}),void 0,command):void 0);return runCommandHandler(commands,{command,args:options.args?[...options.args]:[],options:options.options?{...options.options}:{},global:global2,pm_root:pmRoot,...sdk===void 0?{}:{sdk}})}async function runRegisteredMutationGuardForTest(hooks,options){if((hooks.beforeMutation?.length??0)===0)throw new Error("Expected a registered before_mutation hook to invoke");await runBeforeMutationHooks(hooks,options.context)}async function runRegisteredHookForTest(hooks,options){const kind=options.kind;if(kind==="before_mutation")throw new Error("Invoke before_mutation hooks with runRegisteredMutationGuardForTest so denials and failures retain fail-closed semantics.");if((hooks[RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD[kind]]?.length??0)===0){const populatedKinds=sortedUnique(Object.keys(RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD).filter(candidateKind=>(hooks[RUNNABLE_HOOK_KIND_TO_REGISTRY_FIELD[candidateKind]]?.length??0)>0));throw new Error(`Expected a registered "${kind}" hook to invoke. Hook kinds with registrations: ${formatAvailable(populatedKinds)}`)}switch(options.kind){case"before_command":return runBeforeCommandHooks(hooks,options.context);case"after_command":return runAfterCommandHooks(hooks,options.context);case"on_read":return runOnReadHooks(hooks,options.context);case"on_write":return runOnWriteHooks(hooks,options.context);case"on_index":return runOnIndexHooks(hooks,options.context)}}async function runRegisteredParserOverrideForTest(parsers,context){const command=normalizeSdkCommandName(context.command);if(!parsers.overrides.some(entry=>entry.command===command))throw new Error(`Expected a registered parser override for command "${command}" to invoke. Available parser override commands: ${formatAvailable(sortedUnique(parsers.overrides.map(entry=>entry.command)))}`);return runParserOverride(parsers,context)}async function runRegisteredPreflightOverrideForTest(preflight,context){if(preflight.overrides.length===0)throw new Error("Expected a registered preflight override to invoke, but none are registered.");return runPreflightOverride(preflight,context)}async function runRegisteredCommandOverrideForTest(commands,context){const command=normalizeSdkCommandName(context.command);if(!commands.overrides.some(entry=>entry.command===command))throw new Error(`Expected a registered command override for command "${command}" to invoke. Available command override commands: ${formatAvailable(sortedUnique(commands.overrides.map(entry=>entry.command)))}`);return runCommandOverride(commands,context)}async function runRegisteredRendererOverrideForTest(renderers,context){if(!renderers.overrides.some(entry=>entry.format===context.format))throw new Error(`Expected a registered renderer override for format "${context.format}" to invoke. Available renderer override formats: ${formatAvailable(sortedUnique(renderers.overrides.map(entry=>entry.format)))}`);return runRendererOverride(renderers,context)}async function runRegisteredServiceOverrideForTest(services,context){if(!services.overrides.some(entry=>entry.service===context.service))throw new Error(`Expected a registered service override for service "${context.service}" to invoke. Available service override services: ${formatAvailable(sortedUnique(services.overrides.map(entry=>entry.service)))}`);return runServiceOverride(services,context)}const SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS={query:["query"],embed:["embed"],embedBatch:["embedBatch","embed_batch"],queryExpansion:["queryExpansion","query_expansion"],rerank:["rerank"]};async function runRegisteredSearchProviderForTest(registrations,options){const registration=resolveRegisteredSearchProvider(registrations,options.provider);if(!registration){const available=sortedUnique(registrations.search_providers.map(entry=>entry.definition.name));throw new Error(`Expected a registered search provider "${options.provider}" to invoke. Available search providers: ${formatAvailable(available)}`)}const runtimeDefinition=registration.runtime_definition,operationFn=SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS[options.operation].map(key=>runtimeDefinition[key]).find(value=>typeof value=="function");if(typeof operationFn!="function")throw new Error(`Registered search provider "${options.provider}" does not implement the "${options.operation}" operation.`);return await operationFn(options.context)}async function runRegisteredVectorStoreAdapterForTest(registrations,options){const registration=resolveRegisteredVectorStoreAdapter(registrations,options.adapter);if(!registration){const available=sortedUnique(registrations.vector_store_adapters.map(entry=>entry.definition.name));throw new Error(`Expected a registered vector store adapter "${options.adapter}" to invoke. Available vector store adapters: ${formatAvailable(available)}`)}const operationFn=registration.runtime_definition[options.operation];if(typeof operationFn!="function")throw new Error(`Registered vector store adapter "${options.adapter}" does not implement the "${options.operation}" operation.`);return await operationFn(options.context)}async function runRegisteredMigrationForTest(registrations,options){const migration=assertRegisteredMigration(registrations,{migration:options.migration,extensionName:options.extensionName}),run=getMigrationRuntimeDefinition(migration).run;if(typeof run!="function")throw new Error(`Registered migration "${options.migration}" does not implement a run function to invoke.`);const declaredStatus=migration.definition.status,context={id:migration.definition.id,command:"migration",layer:migration.layer,extension:migration.name,pm_root:options.pmRoot??"",status:(typeof declaredStatus=="string"?declaredStatus.trim().toLowerCase():"")||"pending"};return await run(context)}async function runRegisteredImporterForTest(activation,options){const importer=assertRegisteredImporter(activation.registrations,{importer:options.importer,extensionName:options.extensionName});return runRegisteredCommandForTest(activation.commands,{command:`${importer.importer} import`,args:options.args,options:options.options,global:options.global,pmRoot:options.pmRoot})}async function runRegisteredExporterForTest(activation,options){const exporter=assertRegisteredExporter(activation.registrations,{exporter:options.exporter,extensionName:options.extensionName});return runRegisteredCommandForTest(activation.commands,{command:`${exporter.exporter} export`,args:options.args,options:options.options,global:options.global,pmRoot:options.pmRoot})}function assertExtensionDeactivated(result,expectation={}){const expectedDeactivated=expectation.deactivated??1;if(result.deactivated!==expectedDeactivated)throw new Error(`Expected ${expectedDeactivated} extension${expectedDeactivated===1?"":"s"} to deactivate cleanly, but ${result.deactivated} did.`);const expectedFailed=expectation.failed??0;if(result.failed.length!==expectedFailed){const detail=result.failed.map(failure=>`${failure.layer}:${failure.name} (${failure.error})`).join(", ");throw new Error(`Expected ${expectedFailed} teardown failure${expectedFailed===1?"":"s"}, but observed ${result.failed.length}${detail.length>0?`: ${detail}`:""}.`)}return result}function assertPackageManifest(manifest,expectation){if(expectation.packageName!==void 0&&manifest.package_name!==expectation.packageName)throw new Error(`Expected package manifest package_name to be "${expectation.packageName}"; received "${manifest.package_name??"(none)"}"`);if(expectation.aliases!==void 0&&assertStringSetIncludes(manifest.aliases,expectation.aliases,"aliases"),expectation.resources!==void 0)for(const[kind,expectedPaths]of Object.entries(expectation.resources))assertStringSetIncludes(manifest.resources[kind],expectedPaths,`pm.${kind}`);return manifest}function assertRegisteredCommandContract(registrations,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const commandCandidates=registrations.commands.filter(entry=>entry.command===expectedCommand),command=expectation.extensionName?commandCandidates.find(entry=>entry.name===expectation.extensionName):commandCandidates[0];if(!command){const available=registrations.commands.map(entry=>entry.command).sort((left,right)=>left.localeCompare(right)),extensionSuffix=expectation.extensionName?` from extension "${expectation.extensionName}"`:"";throw new Error(`Expected extension command "${expectedCommand}"${extensionSuffix} to be registered. Available commands: ${formatAvailable(available)}`)}if(expectation.action!==void 0&&command.action!==expectation.action)throw new Error(`Expected extension command "${expectedCommand}" action "${expectation.action}", received "${command.action}"`);if(expectation.arguments!==void 0){const actualArguments=(command.arguments??[]).map(argument=>argument.name),missingArguments=expectation.arguments.filter(argument=>!actualArguments.includes(argument));if(missingArguments.length>0)throw new Error(`Expected extension command "${expectedCommand}" arguments ${formatAvailable(expectation.arguments)}; missing ${formatAvailable(missingArguments)}; available ${formatAvailable(actualArguments)}`)}const flags=registrations.flags.filter(entry=>entry.target_command===expectedCommand&&(expectation.extensionName===void 0||entry.name===expectation.extensionName)).flatMap(entry=>entry.flags);if(expectation.flags!==void 0){const actualFlagLabels=collectFlagLabels(flags),missingFlags=expectation.flags.filter(flag=>!actualFlagLabels.has(flag));if(missingFlags.length>0)throw new Error(`Expected extension command "${expectedCommand}" flags ${formatAvailable(expectation.flags)}; missing ${formatAvailable(missingFlags)}; available ${formatAvailable([...actualFlagLabels].sort((left,right)=>left.localeCompare(right)))}`)}return{command,flags}}function assertRegisteredFlags(registrations,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.targetCommand));if(expectedCommand.length===0)throw new Error("Expected target command name must be a non-empty string");const candidates=registrations.flags.filter(entry=>entry.target_command===expectedCommand);let registration;if(expectation.extensionName)registration=candidates.find(entry=>entry.name===expectation.extensionName);else if(candidates.length===1)registration=candidates[0];else if(candidates.length>1){const availableExtensions=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected flags for target command "${expectedCommand}" matched multiple extensions: ${formatAvailable(availableExtensions)}. Specify extensionName to choose one registration.`)}if(!registration){const available=sortedUnique(registrations.flags.map(entry=>entry.target_command)),availableExtensions=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected flags for target command "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available flag target commands: ${formatAvailable(available)}; matching extensions: ${formatAvailable(availableExtensions)}`)}if(expectation.flags!==void 0){const actualFlagLabels=collectFlagLabels(registration.flags),missingFlags=expectation.flags.filter(flag=>!actualFlagLabels.has(flag));if(missingFlags.length>0)throw new Error(`Expected flags for target command "${expectedCommand}" to include ${formatAvailable(expectation.flags)}; missing ${formatAvailable(missingFlags)}; available ${formatAvailable([...actualFlagLabels].sort((left,right)=>left.localeCompare(right)))}`)}return registration}function assertRegisteredHook(hooks,expectation){const field=HOOK_KIND_TO_REGISTRY_FIELD[expectation.kind],candidates=hooks[field]??[],hook=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!hook){const available=sortedUnique(candidates.map(entry=>entry.name));throw new Error(`Expected a "${expectation.kind}" hook${extensionNameSuffix(expectation.extensionName)} to be registered. Available "${expectation.kind}" hooks: ${formatAvailable(available)}`)}return hook}function assertRegisteredSearchProvider(registrations,expectation){const expectedProvider=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.provider));if(expectedProvider.length===0)throw new Error("Expected search provider name must be a non-empty string");const candidates=registrations.search_providers.filter(entry=>normalizeSdkIdentifier(entry.definition.name)===expectedProvider),provider=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!provider){const available=sortedUnique(registrations.search_providers.map(entry=>entry.definition.name));throw new Error(`Expected search provider "${expectedProvider}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available search providers: ${formatAvailable(available)}`)}return provider}function assertRegisteredVectorStoreAdapter(registrations,expectation){const expectedAdapter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.adapter));if(expectedAdapter.length===0)throw new Error("Expected vector store adapter name must be a non-empty string");const candidates=registrations.vector_store_adapters.filter(entry=>normalizeSdkIdentifier(entry.definition.name)===expectedAdapter),adapter=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!adapter){const available=sortedUnique(registrations.vector_store_adapters.map(entry=>entry.definition.name));throw new Error(`Expected vector store adapter "${expectedAdapter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available vector store adapters: ${formatAvailable(available)}`)}return adapter}function assertRegisteredImporter(registrations,expectation){const expectedImporter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.importer));if(expectedImporter.length===0)throw new Error("Expected importer name must be a non-empty string");const candidates=registrations.importers.filter(entry=>normalizeSdkIdentifier(entry.importer)===expectedImporter),importer=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!importer){const available=sortedUnique(registrations.importers.map(entry=>entry.importer));throw new Error(`Expected importer "${expectedImporter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available importers: ${formatAvailable(available)}`)}return importer}function assertRegisteredExporter(registrations,expectation){const expectedExporter=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.exporter));if(expectedExporter.length===0)throw new Error("Expected exporter name must be a non-empty string");const candidates=registrations.exporters.filter(entry=>normalizeSdkIdentifier(entry.exporter)===expectedExporter),exporter=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!exporter){const available=sortedUnique(registrations.exporters.map(entry=>entry.exporter));throw new Error(`Expected exporter "${expectedExporter}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available exporters: ${formatAvailable(available)}`)}return exporter}function assertRegisteredItemField(registrations,expectation){const expectedField=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.field));if(expectedField.length===0)throw new Error("Expected item field name must be a non-empty string");const match=registrations.item_fields.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).map(registration=>({registration,field:registration.fields.find(field=>normalizeSdkIdentifier(field.name)===expectedField)})).filter(entry=>entry.field!==void 0).find(entry=>expectation.type===void 0||entry.field.type===expectation.type);if(!match){const available=sortedUnique(registrations.item_fields.flatMap(entry=>entry.fields.map(field=>`${field.name}:${field.type}`)));throw new Error(`Expected item field "${expectedField}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available item fields: ${formatAvailable(available)}`)}return match}function assertRegisteredItemType(registrations,expectation){const expectedType=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.itemType));if(expectedType.length===0)throw new Error("Expected item type name must be a non-empty string");const match=registrations.item_types.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).map(registration=>({registration,itemType:registration.types.find(itemType=>normalizeSdkIdentifier(itemType.name)===expectedType)})).filter(entry=>entry.itemType!==void 0).find(entry=>expectation.folder===void 0||entry.itemType.folder===expectation.folder);if(!match){const available=sortedUnique(registrations.item_types.flatMap(entry=>entry.types.map(itemType=>`${itemType.name}:${itemType.folder}`)));throw new Error(`Expected item type "${expectedType}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available item types: ${formatAvailable(available)}`)}return match}function assertRegisteredProfile(registrations,expectation){const expectedProfile=normalizeSdkProfileMatchKey(registeredExpectationName(expectation,expectation.profile));if(expectedProfile.length===0)throw new Error("Expected profile name must be a non-empty string");const match=registrations.profiles.filter(entry=>expectation.extensionName===void 0||entry.name===expectation.extensionName).find(entry=>normalizeSdkProfileMatchKey(entry.profile.name)===expectedProfile);if(!match){const available=sortedUnique(registrations.profiles.map(entry=>entry.profile.name));throw new Error(`Expected profile "${expectedProfile}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available profiles: ${formatAvailable(available)}`)}return{registration:match,profile:match.profile}}function assertRegisteredCommandOverride(commands,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const candidates=commands.overrides.filter(entry=>entry.command===expectedCommand),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(commands.overrides.map(entry=>entry.command));throw new Error(`Expected command override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available command overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredParserOverride(parsers,expectation){const expectedCommand=normalizeSdkCommandName(registeredExpectationName(expectation,expectation.command));if(expectedCommand.length===0)throw new Error("Expected command name must be a non-empty string");const candidates=parsers.overrides.filter(entry=>entry.command===expectedCommand),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(parsers.overrides.map(entry=>entry.command));throw new Error(`Expected parser override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available parser overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredPreflightOverride(preflight,expectation={}){const override=expectation.extensionName?preflight.overrides.find(entry=>entry.name===expectation.extensionName):preflight.overrides[0];if(!override){const available=sortedUnique(preflight.overrides.map(entry=>entry.name));throw new Error(`Expected a preflight override${extensionNameSuffix(expectation.extensionName)} to be registered. Available preflight overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredRendererOverride(renderers,expectation){const expectedFormat=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.format));if(expectedFormat.length===0)throw new Error("Expected renderer format must be a non-empty string");const candidates=renderers.overrides.filter(entry=>entry.format===expectedFormat),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(renderers.overrides.map(entry=>entry.format));throw new Error(`Expected renderer override "${expectedFormat}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available renderer overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredServiceOverride(services,expectation){const expectedService=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.service));if(expectedService.length===0)throw new Error("Expected service name must be a non-empty string");const candidates=services.overrides.filter(entry=>normalizeSdkIdentifier(entry.service)===expectedService),override=expectation.extensionName?candidates.find(entry=>entry.name===expectation.extensionName):candidates[0];if(!override){const available=sortedUnique(services.overrides.map(entry=>entry.service));throw new Error(`Expected service override "${expectedService}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available service overrides: ${formatAvailable(available)}`)}return override}function assertRegisteredMigration(registrations,expectation){const expectedMigration=normalizeSdkIdentifier(registeredExpectationName(expectation,expectation.migration));if(expectedMigration.length===0)throw new Error("Expected migration id must be a non-empty string");const candidates=registrations.migrations.filter(entry=>(expectation.extensionName===void 0||entry.name===expectation.extensionName)&&typeof entry.definition.id=="string"&&normalizeSdkIdentifier(entry.definition.id)===expectedMigration),match=candidates.find(entry=>expectation.mandatory===void 0||(entry.definition.mandatory??!1)===expectation.mandatory);if(match)return match;const idMatch=candidates[0];if(idMatch!==void 0)throw new Error(`Expected migration "${expectedMigration}"${extensionNameSuffix(expectation.extensionName)} to have mandatory=${expectation.mandatory}, but it is mandatory=${idMatch.definition.mandatory??!1}.`);const available=sortedUnique(registrations.migrations.map(entry=>`${typeof entry.definition.id=="string"&&entry.definition.id.trim().length>0?entry.definition.id.trim():"(unnamed)"}:${entry.definition.mandatory===!0}`));throw new Error(`Expected migration "${expectedMigration}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available migrations: ${formatAvailable(available)}`)}function assertExtensionCapabilityUsage(activation,expectation){const toKnownCapabilitySet=(capabilities,field)=>{const known=new Set;for(const capability of capabilities){const normalized=normalizeKnownExtensionCapability(capability);if(normalized===null)throw new Error(`Expected ${field} capability "${capability}" to be a known extension capability. Use canonical capability names (see manifest.capabilities).`);known.add(normalized)}return known},declared=[...toKnownCapabilitySet(expectation.declared,"declared")].sort((left,right)=>left.localeCompare(right)),allowUnused=toKnownCapabilitySet(expectation.allowUnused??[],"allowUnused"),used=collectUsedExtensionCapabilities(activation,{extensionName:expectation.extensionName}),usedSet=new Set(used),unused=declared.filter(capability=>!usedSet.has(capability)&&!allowUnused.has(capability));if(unused.length>0){const scopeSuffix=extensionNameSuffix(expectation.extensionName);throw new Error(`Expected every declared capability${scopeSuffix} to be exercised, but [${unused.join(", ")}] ${unused.length===1?"is":"are"} declared yet never registered against. Remove ${unused.length===1?"it":"them"} from manifest.capabilities for least privilege, or pass allowUnused for capabilities registered only behind a runtime flag.`)}return{declared,used,unused}}function assertExtensionBlueprint(blueprint,options={}){const result=lintExtensionBlueprint(blueprint,options);if(!result.ok){const errors=result.findings.filter(finding=>finding.severity==="error");throw new Error(`Extension blueprint failed preflight with ${errors.length} ${errors.length===1?"error":"errors"}:
2
2
  `+errors.map(finding=>` - [${finding.code}] ${finding.message}`).join(`
3
3
  `))}return result}function assertProjectProfile(profile,options={}){const report=lintProjectProfile(profile),blocking=report.findings.filter(finding=>finding.severity==="error"||options.strict===!0&&finding.severity==="warning");if(blocking.length>0)throw new Error(`Project profile "${report.profile}" failed lint with ${blocking.length} ${blocking.length===1?"issue":"issues"}:
4
4
  `+blocking.map(finding=>` - ${finding.severity} [${finding.code}] ${finding.message}`).join(`
5
5
  `));return report}function assertExtensionManifestMatchesBlueprint(manifest,blueprint){const declaredCapabilities=Array.isArray(manifest.capabilities)?manifest.capabilities:[],result=lintExtensionBlueprint(blueprint,{declaredCapabilities}),declared=result.declared,declaredSet=new Set(declared),usedSet=new Set(result.used),missing=result.used.filter(capability=>!declaredSet.has(capability)),unused=declared.filter(capability=>!usedSet.has(capability));if(missing.length>0||unused.length>0){const parts=[];throw missing.length>0&&parts.push(`missing [${missing.join(", ")}] (the blueprint registers ${missing.length===1?"a surface":"surfaces"} requiring ${missing.length===1?"it":"them"}; activation throws extension_capability_missing)`),unused.length>0&&parts.push(`unused [${unused.join(", ")}] (declared but no surface exercises ${unused.length===1?"it":"them"}; drop for least privilege)`),new Error(`Manifest capabilities do not match the blueprint: ${parts.join("; ")}. Set capabilities to synthesizeExtensionManifest(blueprint, identity).capabilities to stay in sync.`)}return{used:result.used,declared,missing,unused,findings:result.findings}}function assertExtensionManifestCompatible(manifest,target){const result=checkExtensionManifestCompatibility(manifest,target),blocking=result.findings.filter(finding=>finding.severity==="error");if(blocking.length>0)throw new Error(`Extension manifest is not compatible with pm ${result.pmVersion}: ${blocking.map(finding=>finding.message).join("; ")}`);return result}function assertExtensionPreflight(blueprint,options={}){const report=preflightExtension(blueprint,options);if(!report.ok){const errors=report.findings.filter(finding=>finding.severity==="error");throw new Error(`Extension failed preflight with ${errors.length} ${errors.length===1?"error":"errors"}:
6
6
  `+errors.map(finding=>` - [${finding.source}:${finding.code}] ${finding.message}`).join(`
7
- `))}return report}function assertTestModuleHasActivateExport(module){if(!resolveActivatablePropertyRecord(module))throw new Error("createExtensionTestHarness received a module with no activate export. Pass the extension module (with an activate(api) function on the module or its default export) as the first argument, and options second.")}async function createExtensionTestHarness(module,options={}){assertTestModuleHasActivateExport(module);const manifest=readTestExtensionManifest(module),name=resolveTestExtensionName(manifest,options.name),layer=options.layer??"project",activation=await activateExtensionForTest(module,options);if(activation.failed.length>0){const detail=activation.failed.map(failure=>{const missingCapability=failure.trace?.missing_capability,reason=missingCapability?`${failure.error}; missing capability "${missingCapability}"`:failure.error;return`${failure.layer}:${failure.name} (${reason})`}).join(", ");throw new Error(`createExtensionTestHarness could not activate the extension cleanly: ${detail}. Declare the required capability in the manifest (or pass it via options.capabilities), or use activateExtensionForTest directly to inspect a failed activation.`)}return{module,name,layer,activation,activationSummary(describeOptions){return describeExtensionActivation(activation,describeOptions)},renderMarkdown(markdownOptions={}){const{extensionName,...renderOptions}=markdownOptions??{};return renderExtensionSurfaceMarkdown(describeExtensionActivation(activation,{extensionName}),renderOptions)},assertCommandContract(expectation){return assertRegisteredCommandContract(activation.registrations,expectation)},assertFlags(expectation){return assertRegisteredFlags(activation.registrations,expectation)},assertItemField(expectation){return assertRegisteredItemField(activation.registrations,expectation)},assertItemType(expectation){return assertRegisteredItemType(activation.registrations,expectation)},assertProfile(expectation){return assertRegisteredProfile(activation.registrations,expectation)},assertHook(expectation){return assertRegisteredHook(activation.hooks,expectation)},assertCommandOverride(expectation){return assertRegisteredCommandOverride(activation.commands,expectation)},assertParserOverride(expectation){return assertRegisteredParserOverride(activation.parsers,expectation)},assertPreflightOverride(expectation){return assertRegisteredPreflightOverride(activation.preflight,expectation)},assertRendererOverride(expectation){return assertRegisteredRendererOverride(activation.renderers,expectation)},assertServiceOverride(expectation){return assertRegisteredServiceOverride(activation.services,expectation)},assertSearchProvider(expectation){return assertRegisteredSearchProvider(activation.registrations,expectation)},assertVectorStoreAdapter(expectation){return assertRegisteredVectorStoreAdapter(activation.registrations,expectation)},assertImporter(expectation){return assertRegisteredImporter(activation.registrations,expectation)},assertExporter(expectation){return assertRegisteredExporter(activation.registrations,expectation)},assertMigration(expectation){return assertRegisteredMigration(activation.registrations,expectation)},assertCapabilityUsage(expectation){return assertExtensionCapabilityUsage(activation,expectation)},runCommand(runOptions){return runRegisteredCommandForTest(activation.commands,runOptions)},runHook(runOptions){return runRegisteredHookForTest(activation.hooks,runOptions)},runMutationGuard(runOptions){return runRegisteredMutationGuardForTest(activation.hooks,runOptions)},runCommandOverride(context){return runRegisteredCommandOverrideForTest(activation.commands,context)},runParserOverride(context){return runRegisteredParserOverrideForTest(activation.parsers,context)},runPreflightOverride(context){return runRegisteredPreflightOverrideForTest(activation.preflight,context)},runRendererOverride(context){return runRegisteredRendererOverrideForTest(activation.renderers,context)},runServiceOverride(context){return runRegisteredServiceOverrideForTest(activation.services,context)},runSearchProvider(runOptions){return runRegisteredSearchProviderForTest(activation.registrations,runOptions)},runVectorStoreAdapter(runOptions){return runRegisteredVectorStoreAdapterForTest(activation.registrations,runOptions)},runMigration(runOptions){return runRegisteredMigrationForTest(activation.registrations,runOptions)},runImporter(runOptions){return runRegisteredImporterForTest(activation,runOptions)},runExporter(runOptions){return runRegisteredExporterForTest(activation,runOptions)},deactivate(deactivateOptions={}){return deactivateExtensionForTest(module,{name,layer,activation,deactivateTimeoutMs:deactivateOptions.deactivateTimeoutMs})}}}export{activateExtensionForTest,assertExtensionBlueprint,assertExtensionCapabilityUsage,assertExtensionDeactivated,assertExtensionManifestCompatible,assertExtensionManifestMatchesBlueprint,assertExtensionPreflight,assertPackageManifest,assertProjectProfile,assertRegisteredCommandContract,assertRegisteredCommandOverride,assertRegisteredExporter,assertRegisteredFlags,assertRegisteredHook,assertRegisteredImporter,assertRegisteredItemField,assertRegisteredItemType,assertRegisteredMigration,assertRegisteredParserOverride,assertRegisteredPreflightOverride,assertRegisteredProfile,assertRegisteredRendererOverride,assertRegisteredSearchProvider,assertRegisteredServiceOverride,assertRegisteredVectorStoreAdapter,createExtensionTestHarness,deactivateExtensionForTest,describeExtensionActivation,describeExtensionBlueprint,lintExtensionBlueprint,renderExtensionSurfaceMarkdown,runRegisteredCommandForTest,runRegisteredCommandOverrideForTest,runRegisteredExporterForTest,runRegisteredHookForTest,runRegisteredImporterForTest,runRegisteredMigrationForTest,runRegisteredMutationGuardForTest,runRegisteredParserOverrideForTest,runRegisteredPreflightOverrideForTest,runRegisteredRendererOverrideForTest,runRegisteredSearchProviderForTest,runRegisteredServiceOverrideForTest,runRegisteredVectorStoreAdapterForTest};
7
+ `))}return report}function assertTestModuleHasActivateExport(module){if(!resolveActivatablePropertyRecord(module))throw new Error("createExtensionTestHarness received a module with no activate export. Pass the extension module (with an activate(api) function on the module or its default export) as the first argument, and options second.")}async function createExtensionTestHarness(module,options={}){assertTestModuleHasActivateExport(module);const manifest=readTestExtensionManifest(module),name=resolveTestExtensionName(manifest,options.name),layer=options.layer??"project",activation=await activateExtensionForTest(module,options);if(activation.failed.length>0){const detail=activation.failed.map(failure=>{const missingCapability=failure.trace?.missing_capability,reason=missingCapability?`${failure.error}; missing capability "${missingCapability}"`:failure.error;return`${failure.layer}:${failure.name} (${reason})`}).join(", ");throw new Error(`createExtensionTestHarness could not activate the extension cleanly: ${detail}. Declare the required capability in the manifest (or pass it via options.capabilities), or use activateExtensionForTest directly to inspect a failed activation.`)}return{module,name,layer,activation,activationSummary(describeOptions){return describeExtensionActivation(activation,describeOptions)},renderMarkdown(markdownOptions={}){const{extensionName,...renderOptions}=markdownOptions??{};return renderExtensionSurfaceMarkdown(describeExtensionActivation(activation,{extensionName}),renderOptions)},assertCommandContract(expectation){return assertRegisteredCommandContract(activation.registrations,expectation)},assertFlags(expectation){return assertRegisteredFlags(activation.registrations,expectation)},assertItemField(expectation){return assertRegisteredItemField(activation.registrations,expectation)},assertItemType(expectation){return assertRegisteredItemType(activation.registrations,expectation)},assertProfile(expectation){return assertRegisteredProfile(activation.registrations,expectation)},assertHook(expectation){return assertRegisteredHook(activation.hooks,expectation)},assertCommandOverride(expectation){return assertRegisteredCommandOverride(activation.commands,expectation)},assertParserOverride(expectation){return assertRegisteredParserOverride(activation.parsers,expectation)},assertPreflightOverride(expectation){return assertRegisteredPreflightOverride(activation.preflight,expectation)},assertRendererOverride(expectation){return assertRegisteredRendererOverride(activation.renderers,expectation)},assertServiceOverride(expectation){return assertRegisteredServiceOverride(activation.services,expectation)},assertSearchProvider(expectation){return assertRegisteredSearchProvider(activation.registrations,expectation)},assertVectorStoreAdapter(expectation){return assertRegisteredVectorStoreAdapter(activation.registrations,expectation)},assertImporter(expectation){return assertRegisteredImporter(activation.registrations,expectation)},assertExporter(expectation){return assertRegisteredExporter(activation.registrations,expectation)},assertMigration(expectation){return assertRegisteredMigration(activation.registrations,expectation)},assertCapabilityUsage(expectation){return assertExtensionCapabilityUsage(activation,expectation)},runCommand(runOptions){return runRegisteredCommandForTest(activation.commands,runOptions)},runHook(runOptions){return runRegisteredHookForTest(activation.hooks,runOptions)},runMutationGuard(runOptions){return runRegisteredMutationGuardForTest(activation.hooks,runOptions)},runCommandOverride(context){return runRegisteredCommandOverrideForTest(activation.commands,context)},runParserOverride(context){return runRegisteredParserOverrideForTest(activation.parsers,context)},runPreflightOverride(context){return runRegisteredPreflightOverrideForTest(activation.preflight,context)},runRendererOverride(context){return runRegisteredRendererOverrideForTest(activation.renderers,context)},runServiceOverride(context){return runRegisteredServiceOverrideForTest(activation.services,context)},runSearchProvider(runOptions){return runRegisteredSearchProviderForTest(activation.registrations,runOptions)},runVectorStoreAdapter(runOptions){return runRegisteredVectorStoreAdapterForTest(activation.registrations,runOptions)},runMigration(runOptions){return runRegisteredMigrationForTest(activation.registrations,runOptions)},runImporter(runOptions){return runRegisteredImporterForTest(activation,runOptions)},runExporter(runOptions){return runRegisteredExporterForTest(activation,runOptions)},deactivate(deactivateOptions={}){return deactivateExtensionForTest(module,{name,layer,activation,deactivateTimeoutMs:deactivateOptions.deactivateTimeoutMs})}}}export{activateExtensionForTest,assertExtensionBlueprint,assertExtensionCapabilityUsage,assertExtensionDeactivated,assertExtensionManifestCompatible,assertExtensionManifestMatchesBlueprint,assertExtensionPreflight,assertPackageManifest,assertProjectProfile,assertRegisteredCommandContract,assertRegisteredCommandOverride,assertRegisteredExporter,assertRegisteredFlags,assertRegisteredHook,assertRegisteredImporter,assertRegisteredItemField,assertRegisteredItemType,assertRegisteredMigration,assertRegisteredParserOverride,assertRegisteredPreflightOverride,assertRegisteredProfile,assertRegisteredRendererOverride,assertRegisteredSearchProvider,assertRegisteredServiceOverride,assertRegisteredVectorStoreAdapter,createExtensionTestHarness,deactivateExtensionForTest,decode as decodeToon,describeExtensionActivation,describeExtensionBlueprint,encode as encodeToon,lintExtensionBlueprint,renderExtensionSurfaceMarkdown,runRegisteredCommandForTest,runRegisteredCommandOverrideForTest,runRegisteredExporterForTest,runRegisteredHookForTest,runRegisteredImporterForTest,runRegisteredMigrationForTest,runRegisteredMutationGuardForTest,runRegisteredParserOverrideForTest,runRegisteredPreflightOverrideForTest,runRegisteredRendererOverrideForTest,runRegisteredSearchProviderForTest,runRegisteredServiceOverrideForTest,runRegisteredVectorStoreAdapterForTest};
8
8
  //# sourceMappingURL=testing.js.map
@@ -5,4 +5,4 @@
5
5
  */
6
6
  import type { FilesLookupOptions } from "../files.js";
7
7
  /** Convert bounded MCP/action values into the public files lookup contract. */
8
- export declare function runtimeFilesLookupOptions(options: Readonly<Record<string, unknown>>, paths: string[], parseInteger: (value: unknown, label: string) => number | undefined): FilesLookupOptions;
8
+ export declare function runtimeFilesLookupOptions(options:Readonly<Record<string,unknown>>,paths:string[],parseInteger:(value:unknown,label:string) => number | undefined):FilesLookupOptions;
@@ -1,102 +1,102 @@
1
- import type { ItemMetadata, LinkedFile } from "../../types/index.js";
1
+ import type { ItemMetadata,LinkedFile } from "../../types/index.js";
2
2
  /** Inclusive one-based source range accepted by traceability lookup. */
3
3
  export interface SourceLineRange {
4
4
  /** First included source line. */
5
- start: number;
5
+ start:number;
6
6
  /** Last included source line. */
7
- end: number;
7
+ end:number;
8
8
  }
9
9
  /** One evidence class supporting a source-to-item association. */
10
10
  export interface SourceTraceabilityEvidence {
11
11
  /** Evidence producer. */
12
- kind: "linked_file" | "git_commit";
12
+ kind:"linked_file" | "git_commit";
13
13
  /** Linked path or abbreviated commit identifier. */
14
- reference: string;
14
+ reference:string;
15
15
  /** Number of selected lines attributed to this evidence. */
16
- contribution_lines?: number;
16
+ contribution_lines?:number;
17
17
  }
18
18
  /** Rationale fields projected without arbitrary body or comment content. */
19
19
  export interface SourceTraceabilityRationale {
20
20
  /** User or project value statement. */
21
- value: string | null;
21
+ value:string | null;
22
22
  /** Recorded timing rationale. */
23
- why_now: string | null;
23
+ why_now:string | null;
24
24
  /** Recorded intended or achieved outcome. */
25
- outcome: string | null;
25
+ outcome:string | null;
26
26
  /** Recorded implementation objective. */
27
- objective: string | null;
27
+ objective:string | null;
28
28
  }
29
29
  /** Shortest typed path from source-owning work to a governing decision. */
30
30
  export interface SourceDecisionPath {
31
31
  /** Whether a unique decision path was found under the bound. */
32
- status: "found" | "ambiguous" | "not_found";
32
+ status:"found" | "ambiguous" | "not_found";
33
33
  /** Ordered item identifiers, including source work and decision. */
34
- nodes: string[];
34
+ nodes:string[];
35
35
  /** Relationship kinds connecting consecutive nodes. */
36
- kinds: string[];
36
+ kinds:string[];
37
37
  /** Equally short governing decision candidates. */
38
- alternative_decision_ids: string[];
38
+ alternative_decision_ids:string[];
39
39
  }
40
40
  /** Explainable fields added to one reverse linked-file match. */
41
41
  export interface SourceTraceabilityExplanation {
42
42
  /** Higher values sort first within the original scheduling priority. */
43
- score: number;
43
+ score:number;
44
44
  /** Selected source lines attributable to commits naming this item. */
45
- contribution_lines: number;
45
+ contribution_lines:number;
46
46
  /** Structured evidence supporting the association. */
47
- evidence: SourceTraceabilityEvidence[];
47
+ evidence:SourceTraceabilityEvidence[];
48
48
  /** Project rationale carried by the item. */
49
- rationale: SourceTraceabilityRationale;
49
+ rationale:SourceTraceabilityRationale;
50
50
  /** Governing decision path under the declared graph bound. */
51
- decision_path: SourceDecisionPath;
51
+ decision_path:SourceDecisionPath;
52
52
  /** Honest ambiguity codes; an empty list means no ambiguity was observed. */
53
- ambiguities: string[];
53
+ ambiguities:string[];
54
54
  }
55
55
  /** Aggregate line-attribution receipt returned beside explained matches. */
56
56
  export interface SourceTraceabilityReceipt {
57
57
  /** Inclusive selected range, or null for path-only explanation. */
58
- line_range: SourceLineRange | null;
58
+ line_range:SourceLineRange | null;
59
59
  /** Number of distinct blamed commits. */
60
- blamed_commit_count: number;
60
+ blamed_commit_count:number;
61
61
  /** Number of blamed commits whose message named at least one pm item. */
62
- mapped_commit_count: number;
62
+ mapped_commit_count:number;
63
63
  /** Number of blamed commits without an item reference. */
64
- unmapped_commit_count: number;
64
+ unmapped_commit_count:number;
65
65
  /** Maximum relationship depth searched for a governing decision. */
66
- decision_depth: number;
66
+ decision_depth:number;
67
67
  }
68
68
  interface TraceabilityCandidate {
69
- item: ItemMetadata;
70
- files: LinkedFile[];
69
+ item:ItemMetadata;
70
+ files:LinkedFile[];
71
71
  }
72
72
  interface GitAttribution {
73
- commitLines: Map<string, number>;
74
- commitItems: Map<string, string[]>;
75
- available: boolean;
73
+ commitLines:Map<string,number>;
74
+ commitItems:Map<string,string[]>;
75
+ available:boolean;
76
76
  }
77
77
  /** Parse an inclusive `start:end` source-line selector. */
78
- export declare function parseSourceLineRange(value: string): SourceLineRange;
79
- declare function parseBlameCommits(output: string): Map<string, number>;
80
- declare function parseCommitItemReferences(output: string): Map<string, string[]>;
81
- declare function shortestDecisionPath(itemId: string, corpus: readonly ItemMetadata[], maxDepth: number): SourceDecisionPath;
82
- declare function mappedBlamedCommits(attribution: GitAttribution): string[];
78
+ export declare function parseSourceLineRange(value:string):SourceLineRange;
79
+ declare function parseBlameCommits(output:string):Map<string,number>;
80
+ declare function parseCommitItemReferences(output:string):Map<string,string[]>;
81
+ declare function shortestDecisionPath(itemId:string,corpus:readonly ItemMetadata[],maxDepth:number):SourceDecisionPath;
82
+ declare function mappedBlamedCommits(attribution:GitAttribution):string[];
83
83
  /** Enrich reverse linked-file candidates with bounded source rationale. */
84
- export declare function explainSourceTraceability(params: {
85
- workspaceRoot: string;
86
- paths: readonly string[];
87
- candidates: readonly TraceabilityCandidate[];
88
- corpus: readonly ItemMetadata[];
89
- lineRange?: SourceLineRange;
90
- decisionDepth?: number;
91
- }): Promise<{
92
- explanations: Map<string, SourceTraceabilityExplanation>;
93
- receipt: SourceTraceabilityReceipt;
84
+ export declare function explainSourceTraceability(params:{
85
+ workspaceRoot:string;
86
+ paths:readonly string[];
87
+ candidates:readonly TraceabilityCandidate[];
88
+ corpus:readonly ItemMetadata[];
89
+ lineRange?:SourceLineRange;
90
+ decisionDepth?:number;
91
+ }):Promise<{
92
+ explanations:Map<string,SourceTraceabilityExplanation>;
93
+ receipt:SourceTraceabilityReceipt;
94
94
  }>;
95
95
  /** Internal parser and traversal seams for deterministic boundary tests. */
96
- export declare const _testOnlySourceTraceability: {
97
- mappedBlamedCommits: typeof mappedBlamedCommits;
98
- parseBlameCommits: typeof parseBlameCommits;
99
- parseCommitItemReferences: typeof parseCommitItemReferences;
100
- shortestDecisionPath: typeof shortestDecisionPath;
96
+ export declare const _testOnlySourceTraceability:{
97
+ mappedBlamedCommits:typeof mappedBlamedCommits;
98
+ parseBlameCommits:typeof parseBlameCommits;
99
+ parseCommitItemReferences:typeof parseCommitItemReferences;
100
+ shortestDecisionPath:typeof shortestDecisionPath;
101
101
  };
102
102
  export {};
@@ -5,6 +5,6 @@
5
5
  */
6
6
  import type { ExtensionRegistrationRegistry } from "../core/extensions/index.js";
7
7
  /** Drop all memoized workspace extension registrations so the next `getWorkspaceContracts` call re-loads and re-activates extensions from disk. Long-lived hosts should call this after any extension or settings mutation. */
8
- export declare function clearWorkspaceContractsCache(): void;
8
+ export declare function clearWorkspaceContractsCache():void;
9
9
  /** Memoize one workspace extension-registration load and evict rejected entries so transient activation failures do not poison long-lived embedding hosts. */
10
- export declare function memoizeWorkspaceExtensionRegistrations(cacheKey: string, loadRegistrations: () => Promise<ExtensionRegistrationRegistry | null>): Promise<ExtensionRegistrationRegistry | null>;
10
+ export declare function memoizeWorkspaceExtensionRegistrations(cacheKey:string,loadRegistrations:() => Promise<ExtensionRegistrationRegistry | null>):Promise<ExtensionRegistrationRegistry | null>;
@@ -10,47 +10,47 @@ import type { RuntimeFieldType } from "../types/index.js";
10
10
  /** Runtime custom-field metadata exposed to SDK and MCP consumers. */
11
11
  export interface WorkspaceFieldContract {
12
12
  /** Stable schema key persisted in item metadata. */
13
- key: string;
13
+ key:string;
14
14
  /** Camel-case action option accepted by SDK and MCP calls. */
15
- optionName: string;
15
+ optionName:string;
16
16
  /** Persisted metadata key. */
17
- metadataKey: string;
17
+ metadataKey:string;
18
18
  /** JSON-compatible field value type. */
19
- type: RuntimeFieldType;
19
+ type:RuntimeFieldType;
20
20
  /** Actions on which the field is accepted. */
21
- commands: string[];
21
+ commands:string[];
22
22
  /** Whether the action accepts more than one value. */
23
- repeatable: boolean;
23
+ repeatable:boolean;
24
24
  /** Whether create requires the field for every item. */
25
- requiredOnCreate: boolean;
25
+ requiredOnCreate:boolean;
26
26
  /** Optional agent-facing explanation. */
27
- description?: string;
27
+ description?:string;
28
28
  }
29
29
  /** Activated extension command metadata exposed to SDK and MCP consumers. */
30
30
  export interface WorkspaceExtensionCommandContract {
31
31
  /** Canonical command path. */
32
- command: string;
32
+ command:string;
33
33
  /** Action name accepted by generic SDK dispatch. */
34
- action: string;
34
+ action:string;
35
35
  /** Positional argument definitions. */
36
- arguments: Array<{
36
+ arguments:Array<{
37
37
  /** Stable positional argument name. */
38
- name: string;
38
+ name:string;
39
39
  /** Whether callers must provide the argument. */
40
- required: boolean;
40
+ required:boolean;
41
41
  /** Whether the argument accepts multiple values. */
42
- variadic: boolean;
42
+ variadic:boolean;
43
43
  /** Optional agent-facing explanation. */
44
- description?: string;
44
+ description?:string;
45
45
  }>;
46
46
  /** Optional agent-facing explanation. */
47
- description?: string;
47
+ description?:string;
48
48
  /** Minimum agent surface tier requested by the extension. */
49
- tier: "core" | "standard" | "full" | "internal";
49
+ tier:"core" | "standard" | "full" | "internal";
50
50
  /** Capability family declared by the extension. */
51
- family: PmCommandCapabilityFamily;
51
+ family:PmCommandCapabilityFamily;
52
52
  }
53
53
  /** Project resolved custom-field definitions into the public workspace shape. */
54
- export declare function buildWorkspaceFieldContracts(definitions: RuntimeFieldDefinitionResolved[]): WorkspaceFieldContract[];
54
+ export declare function buildWorkspaceFieldContracts(definitions:RuntimeFieldDefinitionResolved[]):WorkspaceFieldContract[];
55
55
  /** Project activated extension registrations into the public workspace shape. */
56
- export declare function buildWorkspaceExtensionCommandContracts(definitions: RegisteredExtensionCommandDefinition[]): WorkspaceExtensionCommandContract[];
56
+ export declare function buildWorkspaceExtensionCommandContracts(definitions:RegisteredExtensionCommandDefinition[]):WorkspaceExtensionCommandContract[];
@@ -6,105 +6,105 @@ export declare const DEFAULT_WORKSPACE_MEMORY_MINIMUM_ITEMS = 10000;
6
6
  /** A bounded item reference retained inside one historical rollup. */
7
7
  export interface WorkspaceMemoryItemReference {
8
8
  /** Stable item identifier. */
9
- id: string;
9
+ id:string;
10
10
  /** Human-readable item title. */
11
- title: string;
11
+ title:string;
12
12
  }
13
13
  /** Deterministic historical summary for one calendar epoch or epic lineage. */
14
14
  export interface WorkspaceMemoryRollup {
15
15
  /** Stable rollup kind. */
16
- kind: "epoch" | "epic";
16
+ kind:"epoch" | "epic";
17
17
  /** Stable kind-scoped rollup key. */
18
- key: string;
18
+ key:string;
19
19
  /** Human-readable rollup label. */
20
- label: string;
20
+ label:string;
21
21
  /** Number of completed items represented by this rollup. */
22
- item_count: number;
22
+ item_count:number;
23
23
  /** Earliest completion timestamp represented by this rollup. */
24
- first_closed_at: string;
24
+ first_closed_at:string;
25
25
  /** Latest completion timestamp represented by this rollup. */
26
- last_closed_at: string;
26
+ last_closed_at:string;
27
27
  /** Bounded newest-first examples that let agents recover exact item context. */
28
- representative_items: WorkspaceMemoryItemReference[];
28
+ representative_items:WorkspaceMemoryItemReference[];
29
29
  /** Bounded distinct completion outcomes for semantic and keyword recall. */
30
- outcomes: string[];
30
+ outcomes:string[];
31
31
  /** Number of durable notes and learnings represented by the rollup. */
32
- knowledge_entries: number;
32
+ knowledge_entries:number;
33
33
  }
34
34
  /** Complete rebuildable workspace-memory projection tied to one source cursor. */
35
35
  export interface WorkspaceMemorySnapshot {
36
36
  /** Serialized projection format version. */
37
- format_version: number;
37
+ format_version:number;
38
38
  /** Authoritative metadata-index or scan cursor. */
39
- source_cursor: string;
39
+ source_cursor:string;
40
40
  /** Number of authoritative items used to derive the projection. */
41
- source_item_count: number;
41
+ source_item_count:number;
42
42
  /** Timestamp at which this projection was generated. */
43
- generated_at: string;
43
+ generated_at:string;
44
44
  /** Counts disclosing actual-completion use versus legacy fallback sources. */
45
- completion_time_sources?: Record<CompletionTimestampSource, number>;
45
+ completion_time_sources?:Record<CompletionTimestampSource,number>;
46
46
  /** Deterministically ordered historical rollups. */
47
- rollups: WorkspaceMemoryRollup[];
47
+ rollups:WorkspaceMemoryRollup[];
48
48
  }
49
49
  /** Result of reading, rebuilding, or intentionally skipping workspace memory. */
50
50
  export interface WorkspaceMemoryReadResult {
51
51
  /** Projection when the corpus meets the configured tier threshold. */
52
- snapshot: WorkspaceMemorySnapshot | null;
52
+ snapshot:WorkspaceMemorySnapshot | null;
53
53
  /** Whether persistence was reused, rebuilt, or skipped for a small corpus. */
54
- cache_status: "fresh" | "rebuilt" | "skipped";
54
+ cache_status:"fresh" | "rebuilt" | "skipped";
55
55
  /** Stable degradation warnings. */
56
- warnings: string[];
56
+ warnings:string[];
57
57
  }
58
58
  /** Agent-facing bounded context projection derived from a workspace-memory read. */
59
59
  export interface WorkspaceMemorySelection {
60
60
  /** Whether the persisted projection was reused or rebuilt. */
61
- cache_status: "fresh" | "rebuilt";
61
+ cache_status:"fresh" | "rebuilt";
62
62
  /** Authoritative cursor represented by the projection. */
63
- source_cursor: string;
63
+ source_cursor:string;
64
64
  /** Counts disclosing actual-completion use versus legacy fallback sources. */
65
- completion_time_sources?: Record<CompletionTimestampSource, number>;
65
+ completion_time_sources?:Record<CompletionTimestampSource,number>;
66
66
  /** Token-bounded historical rollups. */
67
- rollups: WorkspaceMemoryRollup[];
67
+ rollups:WorkspaceMemoryRollup[];
68
68
  }
69
69
  /** Agent-facing search matches derived from a workspace-memory read. */
70
70
  export interface WorkspaceMemorySearchResult {
71
71
  /** Whether the persisted projection was reused or rebuilt. */
72
- cache_status: "fresh" | "rebuilt";
72
+ cache_status:"fresh" | "rebuilt";
73
73
  /** Historical rollups matching the query. */
74
- matches: WorkspaceMemoryRollup[];
74
+ matches:WorkspaceMemoryRollup[];
75
75
  }
76
76
  /**
77
77
  * Fold completed history into deterministic calendar-epoch and epic-lineage
78
78
  * rollups. The projection contains only rebuildable summaries and bounded item
79
79
  * references; authoritative item documents and history remain untouched.
80
80
  */
81
- export declare function buildWorkspaceMemorySnapshot(items: readonly ItemMetadata[], options: {
82
- statusRegistry: RuntimeStatusRegistry;
83
- sourceCursor: string;
84
- now: string;
85
- }): WorkspaceMemorySnapshot;
81
+ export declare function buildWorkspaceMemorySnapshot(items:readonly ItemMetadata[],options:{
82
+ statusRegistry:RuntimeStatusRegistry;
83
+ sourceCursor:string;
84
+ now:string;
85
+ }):WorkspaceMemorySnapshot;
86
86
  /** Read a fresh cursor-bound projection or rebuild it from authoritative items. */
87
- export declare function readWorkspaceMemory(items: readonly ItemMetadata[], options: {
88
- pmRoot: string;
89
- statusRegistry: RuntimeStatusRegistry;
90
- now: string;
91
- minimumItems?: number;
92
- sourceCursor?: string;
93
- }): Promise<WorkspaceMemoryReadResult>;
87
+ export declare function readWorkspaceMemory(items:readonly ItemMetadata[],options:{
88
+ pmRoot:string;
89
+ statusRegistry:RuntimeStatusRegistry;
90
+ now:string;
91
+ minimumItems?:number;
92
+ sourceCursor?:string;
93
+ }):Promise<WorkspaceMemoryReadResult>;
94
94
  /**
95
95
  * Select recent rollups within an approximate agent-token budget. Epoch and
96
96
  * epic rows are interleaved by recency because snapshot order is deterministic.
97
97
  */
98
- export declare function selectWorkspaceMemoryRollups(snapshot: WorkspaceMemorySnapshot, tokenBudget: number, limit?: number): WorkspaceMemoryRollup[];
98
+ export declare function selectWorkspaceMemoryRollups(snapshot:WorkspaceMemorySnapshot,tokenBudget:number,limit?:number):WorkspaceMemoryRollup[];
99
99
  /**
100
100
  * Convert a persisted read into a token-bounded context section. Small
101
101
  * workspaces and empty token windows intentionally return no section.
102
102
  */
103
- export declare function selectWorkspaceMemory(memory: WorkspaceMemoryReadResult, tokenBudget: number, limit?: number): WorkspaceMemorySelection | undefined;
103
+ export declare function selectWorkspaceMemory(memory:WorkspaceMemoryReadResult,tokenBudget:number,limit?:number):WorkspaceMemorySelection | undefined;
104
104
  /** Search derived rollups without expanding the authoritative closed corpus. */
105
- export declare function searchWorkspaceMemory(snapshot: WorkspaceMemorySnapshot | null, query: string, limit?: number): WorkspaceMemoryRollup[];
105
+ export declare function searchWorkspaceMemory(snapshot:WorkspaceMemorySnapshot | null,query:string,limit?:number):WorkspaceMemoryRollup[];
106
106
  /**
107
107
  * Convert a persisted read into bounded query matches. Small workspaces and
108
108
  * unmatched queries intentionally return no section.
109
109
  */
110
- export declare function searchWorkspaceMemoryReadResult(memory: WorkspaceMemoryReadResult, query: string, limit?: number): WorkspaceMemorySearchResult | undefined;
110
+ export declare function searchWorkspaceMemoryReadResult(memory:WorkspaceMemoryReadResult,query:string,limit?:number):WorkspaceMemorySearchResult | undefined;
@@ -9,27 +9,27 @@ import { type ReproducibleExecutionSettings } from "../core/reproducibility/cont
9
9
  export declare const PM_WORKSPACE_RECIPE_SCHEMA = "https://schema.unbrained.dev/pm/workspace-recipe/v1";
10
10
  /** Recursive JSON value accepted by portable workspace recipe inputs. */
11
11
  export type WorkspaceRecipeJsonValue = null | boolean | number | string | readonly WorkspaceRecipeJsonValue[] | {
12
- readonly [key: string]: WorkspaceRecipeJsonValue;
12
+ readonly [key:string]:WorkspaceRecipeJsonValue;
13
13
  };
14
14
  /** One declared SDK or CLI operation in a reproducible workspace recipe. */
15
15
  export interface WorkspaceRecipeOperation {
16
16
  /** Public action name understood by the caller-provided executor. */
17
- action: string;
17
+ action:string;
18
18
  /** JSON-compatible action input forwarded without interpretation. */
19
- input: Readonly<Record<string, WorkspaceRecipeJsonValue>>;
19
+ input:Readonly<Record<string,WorkspaceRecipeJsonValue>>;
20
20
  }
21
21
  /** Portable inputs required to replay a deterministic workspace execution. */
22
22
  export interface WorkspaceRecipe extends ReproducibleExecutionSettings {
23
23
  /** Versioned recipe schema identifier. */
24
- schema: typeof PM_WORKSPACE_RECIPE_SCHEMA;
24
+ schema:typeof PM_WORKSPACE_RECIPE_SCHEMA;
25
25
  /** Ordered operations executed inside the deterministic context. */
26
- operations: readonly WorkspaceRecipeOperation[];
26
+ operations:readonly WorkspaceRecipeOperation[];
27
27
  }
28
- type ExactWorkspaceRecipe<TRecipe extends WorkspaceRecipe> = TRecipe & Record<Exclude<keyof TRecipe, keyof WorkspaceRecipe>, never>;
28
+ type ExactWorkspaceRecipe<TRecipe extends WorkspaceRecipe> = TRecipe & Record<Exclude<keyof TRecipe,keyof WorkspaceRecipe>,never>;
29
29
  /** Validate and freeze a caller-authored reproducible workspace recipe. */
30
- export declare function defineWorkspaceRecipe<const TRecipe extends WorkspaceRecipe>(recipe: ExactWorkspaceRecipe<TRecipe>): Readonly<TRecipe>;
30
+ export declare function defineWorkspaceRecipe<const TRecipe extends WorkspaceRecipe>(recipe:ExactWorkspaceRecipe<TRecipe>):Readonly<TRecipe>;
31
31
  /** Run arbitrary SDK work under the recipe's deterministic clock and entropy. */
32
- export declare function runWithWorkspaceRecipe<T>(recipe: WorkspaceRecipe, operation: () => Promise<T>): Promise<T>;
32
+ export declare function runWithWorkspaceRecipe<T>(recipe:WorkspaceRecipe,operation:() => Promise<T>):Promise<T>;
33
33
  /** Replay every declared recipe operation with a caller-provided dispatcher. */
34
- export declare function executeWorkspaceRecipe<T>(recipe: WorkspaceRecipe, execute: (operation: WorkspaceRecipeOperation, index: number) => Promise<T>): Promise<T[]>;
34
+ export declare function executeWorkspaceRecipe<T>(recipe:WorkspaceRecipe,execute:(operation:WorkspaceRecipeOperation,index:number) => Promise<T>):Promise<T[]>;
35
35
  export {};