@unbrained/pm-cli 2026.10.12 → 2026.10.14

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 (723) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +46 -0
  3. package/dist/cli/after-command-context-usage.d.ts +8 -8
  4. package/dist/cli/bundle-integrity.d.ts +23 -23
  5. package/dist/cli/commander-usage.d.ts +26 -26
  6. package/dist/cli/commander-usage.js +2 -2
  7. package/dist/cli/error-guidance.d.ts +158 -163
  8. package/dist/cli/error-guidance.js +2 -2
  9. package/dist/cli/extension-command-help.d.ts +68 -68
  10. package/dist/cli/extension-command-help.js +2 -2
  11. package/dist/cli/extension-command-options.d.ts +20 -20
  12. package/dist/cli/extension-command-options.js +1 -1
  13. package/dist/cli/extension-recovery.d.ts +20 -20
  14. package/dist/cli/help-content.d.ts +16 -16
  15. package/dist/cli/help-content.js +2 -2
  16. package/dist/cli/help-json-payload.d.ts +40 -40
  17. package/dist/cli/invocation-profile.d.ts +8 -8
  18. package/dist/cli/main.d.ts +165 -165
  19. package/dist/cli/main.js +2 -2
  20. package/dist/cli/migration-gates.d.ts +20 -20
  21. package/dist/cli/register-list-query.d.ts +4 -4
  22. package/dist/cli/register-mutation-options.d.ts +2 -2
  23. package/dist/cli/register-operations.d.ts +66 -66
  24. package/dist/cli/register-setup.d.ts +1 -1
  25. package/dist/cli/register-structured-mutation.d.ts +3 -3
  26. package/dist/cli/register-structured-mutation.js +1 -1
  27. package/dist/cli/runtime/activation.d.ts +3 -3
  28. package/dist/cli/runtime/invocation-options.js +1 -1
  29. package/dist/cli/runtime/selection.d.ts +6 -6
  30. package/dist/cli/runtime-compatibility-boundary.d.ts +12 -12
  31. package/dist/cli-bundle/bundle-manifest.json +1 -1
  32. package/dist/cli-bundle/chunks/{chunk-MHPU2LDF.js → chunk-2UKKO45F.js} +2 -2
  33. package/dist/cli-bundle/chunks/chunk-3S5SEMEB.js +8 -0
  34. package/dist/cli-bundle/chunks/{chunk-QM3M7GB5.js → chunk-5LU6PWA4.js} +2 -2
  35. package/dist/cli-bundle/chunks/{chunk-3LQTJN4J.js → chunk-66BZVFIK.js} +2 -2
  36. package/dist/cli-bundle/chunks/chunk-IDEHMKYZ.js +235 -0
  37. package/dist/cli-bundle/chunks/{chunk-DT3KUUKY.js → chunk-JTF6VMXH.js} +49 -49
  38. package/dist/cli-bundle/chunks/{chunk-GUVKPOY6.js → chunk-LE4IEHDG.js} +11 -11
  39. package/dist/cli-bundle/chunks/{chunk-UABZJXIS.js → chunk-LKESCZEN.js} +2 -2
  40. package/dist/cli-bundle/chunks/chunk-LOSRTNNP.js +2 -0
  41. package/dist/cli-bundle/chunks/{chunk-X2I2EEAS.js → chunk-MAT4AP7P.js} +2 -2
  42. package/dist/cli-bundle/chunks/chunk-PP3BVMFL.js +30 -0
  43. package/dist/cli-bundle/chunks/chunk-UNQZGMJL.js +20 -0
  44. package/dist/cli-bundle/chunks/chunk-YXRAYL7H.js +2 -0
  45. package/dist/cli-bundle/chunks/{register-list-query-OR33UEML.js → register-list-query-GBLTOQQL.js} +2 -2
  46. package/dist/cli-bundle/chunks/{register-mutation-R34EJ3NH.js → register-mutation-TNRHNK4N.js} +3 -3
  47. package/dist/cli-bundle/chunks/{register-operations-UHSMEHSF.js → register-operations-J3WXP3MA.js} +2 -2
  48. package/dist/cli-bundle/chunks/{register-setup-5E3PT22L.js → register-setup-HLSKKU4V.js} +2 -2
  49. package/dist/cli-bundle/focused-chunks/chunk-23ACMPGB.js +2 -0
  50. package/dist/cli-bundle/focused-chunks/chunk-4UA7KY4V.js +3 -0
  51. package/dist/cli-bundle/focused-chunks/{chunk-Z4T3637Y.js → chunk-AULVKHYX.js} +2 -2
  52. package/dist/cli-bundle/focused-chunks/{chunk-TS46OZD5.js → chunk-BUAGNTLG.js} +12 -12
  53. package/dist/cli-bundle/focused-chunks/{chunk-RNAWRTQV.js → chunk-ELQNEJDA.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/{chunk-OGOLIS5R.js → chunk-ESOW6PH4.js} +2 -2
  55. package/dist/cli-bundle/focused-chunks/chunk-HNRI2KBT.js +3 -0
  56. package/dist/cli-bundle/focused-chunks/chunk-IGBSAHCA.js +2 -0
  57. package/dist/cli-bundle/focused-chunks/{chunk-7QIZB2F2.js → chunk-JDVZF75H.js} +14 -14
  58. package/dist/cli-bundle/focused-chunks/{chunk-SV6YYZLR.js → chunk-KSMQEB3V.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-LKWDWER4.js +20 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-QIU4Y3AB.js +8 -0
  61. package/dist/cli-bundle/focused-chunks/{chunk-CYEZLKLL.js → chunk-RHQCQTZA.js} +2 -2
  62. package/dist/cli-bundle/focused-chunks/chunk-WIXZF5SS.js +26 -0
  63. package/dist/cli-bundle/focused-chunks/{chunk-AJG3DBXR.js → chunk-Y5A4XOSK.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/{chunk-VBTLX5SN.js → chunk-YJNKISEI.js} +62 -62
  65. package/dist/cli-bundle/main.js +21 -21
  66. package/dist/cli-bundle/sdk-authoring.js +1 -1
  67. package/dist/cli-bundle/sdk-contracts.js +2 -2
  68. package/dist/cli-bundle/sdk-core.js +22 -22
  69. package/dist/cli-bundle/sdk-governance.js +1 -1
  70. package/dist/cli-bundle/sdk-graph.js +1 -1
  71. package/dist/cli-bundle/sdk-merge.js +51 -51
  72. package/dist/cli-bundle/sdk-query.js +1 -1
  73. package/dist/cli-bundle/sdk-runtime.js +1 -1
  74. package/dist/cli-bundle/sdk-testing.js +1 -1
  75. package/dist/cli-bundle/sdk.js +8 -8
  76. package/dist/cli.d.ts +4 -4
  77. package/dist/core/checkpoint/checkpoint-gc.d.ts +32 -32
  78. package/dist/core/checkpoint/mutation-checkpoint.d.ts +34 -34
  79. package/dist/core/config/nested-settings.d.ts +26 -26
  80. package/dist/core/config/positional-value.d.ts +16 -16
  81. package/dist/core/diagnostics/remediation.d.ts +6 -6
  82. package/dist/core/diagnostics/remediation.js +1 -1
  83. package/dist/core/extensions/activation-summary-markdown.d.ts +6 -6
  84. package/dist/core/extensions/activation-summary.d.ts +54 -54
  85. package/dist/core/extensions/activation-transaction.d.ts +7 -7
  86. package/dist/core/extensions/capability-usage.d.ts +26 -26
  87. package/dist/core/extensions/command-hook-context.d.ts +26 -26
  88. package/dist/core/extensions/contribution-inventory.d.ts +21 -21
  89. package/dist/core/extensions/extension-candidate.d.ts +14 -14
  90. package/dist/core/extensions/extension-capability-aliases.d.ts +2 -2
  91. package/dist/core/extensions/extension-policy.d.ts +80 -80
  92. package/dist/core/extensions/extension-types.d.ts +1294 -1285
  93. package/dist/core/extensions/extension-types.js +1 -1
  94. package/dist/core/extensions/flag-definition-validation.d.ts +17 -4
  95. package/dist/core/extensions/flag-definition-validation.js +1 -1
  96. package/dist/core/extensions/flag-value-types.js +1 -1
  97. package/dist/core/extensions/item-fields.d.ts +3 -2
  98. package/dist/core/extensions/item-fields.js +1 -1
  99. package/dist/core/extensions/loader.d.ts +36 -36
  100. package/dist/core/extensions/loader.js +1 -1
  101. package/dist/core/extensions/manifest-schema.d.ts +16 -16
  102. package/dist/core/extensions/module-graph-snapshot.d.ts +8 -8
  103. package/dist/core/extensions/read-output-contract.d.ts +5 -0
  104. package/dist/core/extensions/read-output-contract.js +2 -0
  105. package/dist/core/extensions/registration-values.d.ts +1 -1
  106. package/dist/core/extensions/reserved-host-flags.d.ts +6 -6
  107. package/dist/core/extensions/version-compat.d.ts +10 -10
  108. package/dist/core/fs/fs-utils.d.ts +1 -1
  109. package/dist/core/fs/host-environment-errors.d.ts +14 -14
  110. package/dist/core/governance/content-fields.d.ts +31 -31
  111. package/dist/core/governance/issue-codes.d.ts +27 -27
  112. package/dist/core/governance/metadata-coverage.d.ts +91 -91
  113. package/dist/core/history/drift-scan.d.ts +26 -26
  114. package/dist/core/history/event-index.d.ts +41 -41
  115. package/dist/core/history/history-compact-bulk.d.ts +22 -22
  116. package/dist/core/history/history-diff.d.ts +22 -22
  117. package/dist/core/history/history-rewrite.d.ts +66 -66
  118. package/dist/core/history/history-storage-stats.d.ts +31 -31
  119. package/dist/core/history/history-stream-policy.d.ts +12 -12
  120. package/dist/core/history/history.d.ts +22 -22
  121. package/dist/core/history/identity.d.ts +6 -6
  122. package/dist/core/history/operation-contract.d.ts +9 -9
  123. package/dist/core/history/projection.d.ts +15 -15
  124. package/dist/core/history/read.d.ts +4 -4
  125. package/dist/core/history/replay.d.ts +51 -49
  126. package/dist/core/history/replay.js +1 -1
  127. package/dist/core/history/workspace-history.d.ts +101 -101
  128. package/dist/core/io/bulk-ids-input.d.ts +4 -4
  129. package/dist/core/item/actionability.d.ts +40 -40
  130. package/dist/core/item/id.d.ts +3 -3
  131. package/dist/core/item/item-format-version.d.ts +8 -8
  132. package/dist/core/item/item-format.d.ts +35 -35
  133. package/dist/core/item/item-type-definition.d.ts +2 -2
  134. package/dist/core/item/parent-reference-policy.d.ts +1 -1
  135. package/dist/core/item/parse.d.ts +12 -12
  136. package/dist/core/item/sprint-release-format.d.ts +2 -2
  137. package/dist/core/item/status-filter.d.ts +4 -4
  138. package/dist/core/item/toon-decode.d.ts +9 -9
  139. package/dist/core/item/type-registry.d.ts +40 -40
  140. package/dist/core/lock/lock-gc.d.ts +50 -50
  141. package/dist/core/lock/lock.d.ts +37 -37
  142. package/dist/core/output/mutation-projection.d.ts +6 -6
  143. package/dist/core/output/output-control.d.ts +4 -4
  144. package/dist/core/output/output.d.ts +40 -40
  145. package/dist/core/output/query-summary.d.ts +5 -5
  146. package/dist/core/packages/manifest.d.ts +50 -50
  147. package/dist/core/policy/workflow-policy-schema.d.ts +306 -306
  148. package/dist/core/policy/workflow-policy-store.d.ts +7 -7
  149. package/dist/core/policy/workflow-policy.d.ts +81 -81
  150. package/dist/core/profile/profile-describe.d.ts +40 -40
  151. package/dist/core/profile/profile-lint.d.ts +20 -20
  152. package/dist/core/profile/profile-plan.d.ts +84 -84
  153. package/dist/core/profile/profile-presets.d.ts +52 -52
  154. package/dist/core/reproducibility/context.d.ts +6 -6
  155. package/dist/core/schema/fields-file.d.ts +54 -54
  156. package/dist/core/schema/item-types-file.d.ts +36 -36
  157. package/dist/core/schema/runtime-field-values.d.ts +2 -2
  158. package/dist/core/schema/runtime-schema.d.ts +86 -86
  159. package/dist/core/schema/status-defs-file.d.ts +36 -36
  160. package/dist/core/schema/type-inference.d.ts +14 -14
  161. package/dist/core/schema/type-workflows.d.ts +22 -22
  162. package/dist/core/search/background-refresh.d.ts +9 -9
  163. package/dist/core/search/bm25.d.ts +19 -19
  164. package/dist/core/search/cache.d.ts +35 -35
  165. package/dist/core/search/corpus.d.ts +12 -12
  166. package/dist/core/search/embedding-batches.d.ts +48 -48
  167. package/dist/core/search/eval.d.ts +49 -49
  168. package/dist/core/search/http-client.d.ts +38 -38
  169. package/dist/core/search/providers.d.ts +41 -41
  170. package/dist/core/search/relevance.d.ts +20 -20
  171. package/dist/core/search/semantic-defaults.d.ts +8 -8
  172. package/dist/core/search/staleness.d.ts +4 -4
  173. package/dist/core/search/vector-stores.d.ts +78 -78
  174. package/dist/core/search/vectorization-metadata.d.ts +6 -6
  175. package/dist/core/sentry/helpers.d.ts +17 -15
  176. package/dist/core/sentry/helpers.js +1 -1
  177. package/dist/core/sentry/instrument.d.ts +42 -40
  178. package/dist/core/sentry/instrument.js +1 -1
  179. package/dist/core/session/session-state.d.ts +32 -32
  180. package/dist/core/shared/agent-session-context.d.ts +14 -14
  181. package/dist/core/shared/author.d.ts +128 -128
  182. package/dist/core/shared/command-types.d.ts +40 -40
  183. package/dist/core/shared/conflict-markers.d.ts +6 -6
  184. package/dist/core/shared/constants.d.ts +13 -13
  185. package/dist/core/shared/errors.d.ts +194 -183
  186. package/dist/core/shared/errors.js +1 -1
  187. package/dist/core/shared/secret-rules.d.ts +97 -97
  188. package/dist/core/shared/serial-queue.d.ts +8 -8
  189. package/dist/core/shared/split-comma-list.d.ts +6 -6
  190. package/dist/core/shared/time.d.ts +23 -23
  191. package/dist/core/store/item-format-migration.d.ts +10 -10
  192. package/dist/core/store/item-metadata-cache.d.ts +38 -38
  193. package/dist/core/store/item-metadata-query-index.d.ts +79 -79
  194. package/dist/core/store/item-metadata-read-work.d.ts +6 -6
  195. package/dist/core/store/item-store.d.ts +110 -110
  196. package/dist/core/store/paths.d.ts +2 -2
  197. package/dist/core/store/settings-read-cache.d.ts +12 -12
  198. package/dist/core/store/settings-validator.d.ts +165 -165
  199. package/dist/core/store/settings.d.ts +59 -59
  200. package/dist/core/telemetry/observability.d.ts +17 -17
  201. package/dist/core/telemetry/policy.d.ts +3 -3
  202. package/dist/core/telemetry/runtime.d.ts +242 -242
  203. package/dist/core/telemetry/runtime.js +2 -2
  204. package/dist/core/test/background-runs.d.ts +185 -185
  205. package/dist/core/test/item-test-run-tracking.d.ts +6 -6
  206. package/dist/core/test/run-selectors.d.ts +18 -18
  207. package/dist/core/validate/fix-planning.d.ts +50 -50
  208. package/dist/core/validate/missing-by-type.d.ts +4 -4
  209. package/dist/core/validate/missing-link-owners.d.ts +30 -30
  210. package/dist/core/validate/stale-file-classification.d.ts +8 -8
  211. package/dist/mcp/http-server.d.ts +28 -28
  212. package/dist/mcp/legacy-adapter.d.ts +33 -33
  213. package/dist/mcp/runtime-capabilities.d.ts +16 -16
  214. package/dist/mcp/server.d.ts +50 -50
  215. package/dist/mcp/tool-definitions.d.ts +36 -36
  216. package/dist/sdk/agent/closed-domain-contracts.d.ts +18 -18
  217. package/dist/sdk/agent/command-recovery.d.ts +4 -0
  218. package/dist/sdk/agent/command-recovery.js +1 -1
  219. package/dist/sdk/agent/identity-config.d.ts +32 -32
  220. package/dist/sdk/agent/item-addressing.d.ts +8 -8
  221. package/dist/sdk/agent/refusal-closure-census.d.ts +34 -34
  222. package/dist/sdk/agent/refusal-closure.d.ts +42 -42
  223. package/dist/sdk/agent/refusal-corpus-contracts.d.ts +46 -46
  224. package/dist/sdk/agent/refusal-reachability.d.ts +112 -112
  225. package/dist/sdk/agent/subcommand-recovery.d.ts +25 -25
  226. package/dist/sdk/agent/task-transcript-contracts.d.ts +30 -30
  227. package/dist/sdk/agent/tracker-preflight-contracts.d.ts +38 -38
  228. package/dist/sdk/agent-capability-contracts.d.ts +37 -37
  229. package/dist/sdk/annotations.d.ts +106 -106
  230. package/dist/sdk/author-attribution.d.ts +76 -76
  231. package/dist/sdk/authoring.d.ts +1 -1
  232. package/dist/sdk/authoring.js +1 -1
  233. package/dist/sdk/cli-bootstrap.d.ts +70 -70
  234. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +63 -63
  235. package/dist/sdk/cli-contracts/command-aliases.d.ts +14 -14
  236. package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +70 -70
  237. package/dist/sdk/cli-contracts/commander-types.d.ts +17 -17
  238. package/dist/sdk/cli-contracts/completeness.d.ts +26 -26
  239. package/dist/sdk/cli-contracts/enum-contracts.d.ts +5 -5
  240. package/dist/sdk/cli-contracts/flag-contracts.d.ts +32 -32
  241. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  242. package/dist/sdk/cli-contracts/flag-lexicon-contracts.d.ts +42 -42
  243. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +84 -84
  244. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  245. package/dist/sdk/cli-contracts/registration-helpers.d.ts +36 -36
  246. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +290 -294
  247. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  248. package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +793 -793
  249. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +391 -391
  250. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +6 -6
  251. package/dist/sdk/cli-contracts/tool-schema.d.ts +54 -54
  252. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  253. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +24 -24
  254. package/dist/sdk/comments.d.ts +44 -44
  255. package/dist/sdk/compile-cache.d.ts +4 -4
  256. package/dist/sdk/completion/shared.d.ts +22 -22
  257. package/dist/sdk/compose.d.ts +156 -156
  258. package/dist/sdk/config.d.ts +123 -123
  259. package/dist/sdk/context/semantic-session-attribution.d.ts +14 -14
  260. package/dist/sdk/context/usage-ledger.d.ts +20 -20
  261. package/dist/sdk/context-intent-contracts.d.ts +50 -50
  262. package/dist/sdk/context-intent-contracts.js +1 -1
  263. package/dist/sdk/context-intent-runtime.d.ts +8 -8
  264. package/dist/sdk/context-packing.d.ts +78 -78
  265. package/dist/sdk/context-relevance.d.ts +189 -180
  266. package/dist/sdk/context-relevance.js +1 -1
  267. package/dist/sdk/context-signal-store.d.ts +84 -84
  268. package/dist/sdk/context-usage.d.ts +92 -92
  269. package/dist/sdk/corpus-shape.d.ts +101 -101
  270. package/dist/sdk/define.d.ts +2 -2
  271. package/dist/sdk/dependencies.d.ts +116 -116
  272. package/dist/sdk/dependency-flag-validation.d.ts +14 -12
  273. package/dist/sdk/dependency-flag-validation.js +1 -1
  274. package/dist/sdk/dependency-provenance.d.ts +30 -30
  275. package/dist/sdk/docs.d.ts +32 -32
  276. package/dist/sdk/duplicates.d.ts +21 -21
  277. package/dist/sdk/environment/agent-environment.d.ts +196 -196
  278. package/dist/sdk/environment/project-runtime-compatibility.d.ts +56 -56
  279. package/dist/sdk/environment/source-context.d.ts +6 -6
  280. package/dist/sdk/error-code-catalog.d.ts +40 -40
  281. package/dist/sdk/errors.d.ts +29 -29
  282. package/dist/sdk/eval.d.ts +45 -45
  283. package/dist/sdk/extension/author-manifest.d.ts +14 -14
  284. package/dist/sdk/extension/bundled-catalog.d.ts +7 -7
  285. package/dist/sdk/extension/describe.d.ts +36 -36
  286. package/dist/sdk/extension/doctor.d.ts +29 -29
  287. package/dist/sdk/extension/install-plan.d.ts +55 -55
  288. package/dist/sdk/extension/install-receipts.d.ts +2 -2
  289. package/dist/sdk/extension/install-runtime.d.ts +8 -8
  290. package/dist/sdk/extension/install-snapshot.d.ts +14 -14
  291. package/dist/sdk/extension/install-sources.d.ts +96 -96
  292. package/dist/sdk/extension/managed-state.d.ts +66 -66
  293. package/dist/sdk/extension/migrations.d.ts +82 -82
  294. package/dist/sdk/extension/output-ownership.d.ts +24 -24
  295. package/dist/sdk/extension/runtime-summary.d.ts +5 -5
  296. package/dist/sdk/extension/scaffold.d.ts +12 -12
  297. package/dist/sdk/extension/shared.d.ts +15 -15
  298. package/dist/sdk/extension/source-resolution.d.ts +30 -30
  299. package/dist/sdk/extension/static-inventory.d.ts +42 -42
  300. package/dist/sdk/extension/update-check.d.ts +10 -10
  301. package/dist/sdk/extension.d.ts +320 -320
  302. package/dist/sdk/files.d.ts +157 -157
  303. package/dist/sdk/flag-invocation-contracts.d.ts +44 -44
  304. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  305. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  306. package/dist/sdk/governance/artifact-ledgers.d.ts +35 -35
  307. package/dist/sdk/governance/assurance-action.d.ts +68 -68
  308. package/dist/sdk/governance/assurance-action.js +1 -1
  309. package/dist/sdk/governance/assurance-mutation-error.d.ts +36 -36
  310. package/dist/sdk/governance/assurance-presets.d.ts +24 -24
  311. package/dist/sdk/governance/assurance-runtime.d.ts +14 -14
  312. package/dist/sdk/governance/assurance.d.ts +353 -353
  313. package/dist/sdk/governance/boundary-fixtures.d.ts +60 -60
  314. package/dist/sdk/governance/closure-timestamps.d.ts +9 -9
  315. package/dist/sdk/governance/coverage-assurance.d.ts +10 -10
  316. package/dist/sdk/governance/defect-recurrence-coverage.d.ts +75 -75
  317. package/dist/sdk/governance/defect-recurrence-graph.d.ts +18 -18
  318. package/dist/sdk/governance/defect-recurrence.d.ts +186 -181
  319. package/dist/sdk/governance/defect-recurrence.js +2 -1
  320. package/dist/sdk/governance/extension-host-version.d.ts +16 -16
  321. package/dist/sdk/governance/gc.d.ts +48 -48
  322. package/dist/sdk/governance/health-merge-evidence.d.ts +5 -5
  323. package/dist/sdk/governance/health.d.ts +188 -188
  324. package/dist/sdk/governance/hierarchy-validation.d.ts +13 -13
  325. package/dist/sdk/governance/linked-file-report.d.ts +26 -26
  326. package/dist/sdk/governance/merge-receipt-history.d.ts +36 -36
  327. package/dist/sdk/governance/provenance-health.d.ts +64 -64
  328. package/dist/sdk/governance/reindex.d.ts +89 -89
  329. package/dist/sdk/governance/reliability.d.ts +56 -56
  330. package/dist/sdk/governance/stale-work.d.ts +22 -22
  331. package/dist/sdk/governance/status-role-diagnostics.d.ts +12 -12
  332. package/dist/sdk/governance/storage-integrity.d.ts +54 -54
  333. package/dist/sdk/governance/tracked-runtime-cache.d.ts +10 -10
  334. package/dist/sdk/governance/upgrade.d.ts +104 -104
  335. package/dist/sdk/governance/validate-history-drift.d.ts +2 -2
  336. package/dist/sdk/governance/validate-item-reader.d.ts +6 -6
  337. package/dist/sdk/governance/validate.d.ts +191 -191
  338. package/dist/sdk/governance/workflow-completeness.d.ts +15 -15
  339. package/dist/sdk/governance/workflow-policy.d.ts +28 -28
  340. package/dist/sdk/governance/workspace-position.d.ts +46 -46
  341. package/dist/sdk/graph/adapter.d.ts +66 -66
  342. package/dist/sdk/graph/analytics.d.ts +54 -54
  343. package/dist/sdk/graph/assembly.d.ts +80 -80
  344. package/dist/sdk/graph/cache.d.ts +29 -29
  345. package/dist/sdk/graph/cardinality-integrity.d.ts +13 -0
  346. package/dist/sdk/graph/cardinality-integrity.js +2 -0
  347. package/dist/sdk/graph/centrality.d.ts +34 -34
  348. package/dist/sdk/graph/conformance.d.ts +33 -33
  349. package/dist/sdk/graph/deadline-scheduling.d.ts +58 -58
  350. package/dist/sdk/graph/durable-cache.d.ts +26 -26
  351. package/dist/sdk/graph/governance.d.ts +165 -165
  352. package/dist/sdk/graph/hierarchy-integrity.d.ts +52 -52
  353. package/dist/sdk/graph/index.d.ts +1 -0
  354. package/dist/sdk/graph/index.js +1 -1
  355. package/dist/sdk/graph/lifecycle-coverage.d.ts +17 -17
  356. package/dist/sdk/graph/mutation-advisory.d.ts +11 -11
  357. package/dist/sdk/graph/query-contracts.d.ts +10 -10
  358. package/dist/sdk/graph/remediation.d.ts +25 -25
  359. package/dist/sdk/graph/run.d.ts +392 -392
  360. package/dist/sdk/graph/scheduling.d.ts +38 -38
  361. package/dist/sdk/graph/traversal.d.ts +14 -14
  362. package/dist/sdk/guide-topics.d.ts +32 -32
  363. package/dist/sdk/guide.d.ts +62 -62
  364. package/dist/sdk/history/attestation-command.d.ts +12 -12
  365. package/dist/sdk/history/attestation-contract.d.ts +78 -78
  366. package/dist/sdk/history/attestation-scan.d.ts +6 -6
  367. package/dist/sdk/history/maintenance.d.ts +46 -46
  368. package/dist/sdk/history/salvage.d.ts +18 -18
  369. package/dist/sdk/history/subject.d.ts +9 -9
  370. package/dist/sdk/history-analytics.d.ts +84 -84
  371. package/dist/sdk/history-compact.d.ts +103 -103
  372. package/dist/sdk/history-mcp.d.ts +8 -8
  373. package/dist/sdk/history-provenance.d.ts +59 -59
  374. package/dist/sdk/history-read.d.ts +36 -36
  375. package/dist/sdk/history-redact.d.ts +78 -78
  376. package/dist/sdk/history-repair.d.ts +158 -158
  377. package/dist/sdk/history-repair.js +1 -1
  378. package/dist/sdk/improvement-ledger.d.ts +102 -102
  379. package/dist/sdk/init-agent-guidance.d.ts +70 -70
  380. package/dist/sdk/init.d.ts +152 -152
  381. package/dist/sdk/item-children.d.ts +28 -28
  382. package/dist/sdk/item-schedule.d.ts +12 -12
  383. package/dist/sdk/item-transaction.d.ts +100 -100
  384. package/dist/sdk/learnings.d.ts +42 -42
  385. package/dist/sdk/lifecycle/append.d.ts +14 -14
  386. package/dist/sdk/lifecycle/claim.d.ts +60 -60
  387. package/dist/sdk/lifecycle/close-many.d.ts +94 -94
  388. package/dist/sdk/lifecycle/close.d.ts +27 -27
  389. package/dist/sdk/lifecycle/copy.d.ts +18 -18
  390. package/dist/sdk/lifecycle/core-field-recovery.d.ts +7 -0
  391. package/dist/sdk/lifecycle/core-field-recovery.js +2 -0
  392. package/dist/sdk/lifecycle/create.d.ts +82 -82
  393. package/dist/sdk/lifecycle/create.js +1 -1
  394. package/dist/sdk/lifecycle/delete.d.ts +28 -28
  395. package/dist/sdk/lifecycle/focus.d.ts +10 -10
  396. package/dist/sdk/lifecycle/hierarchy-mutation-lock.d.ts +10 -10
  397. package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -1
  398. package/dist/sdk/lifecycle/legacy-none-tokens.d.ts +54 -54
  399. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +4 -4
  400. package/dist/sdk/lifecycle/mcp-actions.d.ts +10 -10
  401. package/dist/sdk/lifecycle/mutation-command-options.d.ts +116 -116
  402. package/dist/sdk/lifecycle/mutation-facet-contracts.d.ts +6 -0
  403. package/dist/sdk/lifecycle/mutation-facet-contracts.js +2 -0
  404. package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +42 -42
  405. package/dist/sdk/lifecycle/plan.d.ts +217 -217
  406. package/dist/sdk/lifecycle/reopen.d.ts +29 -24
  407. package/dist/sdk/lifecycle/reopen.js +1 -1
  408. package/dist/sdk/lifecycle/repeatable-metadata-parsers.d.ts +3 -3
  409. package/dist/sdk/lifecycle/restore.d.ts +33 -33
  410. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +19 -19
  411. package/dist/sdk/lifecycle/task-composition.d.ts +4 -4
  412. package/dist/sdk/lifecycle/update-many.d.ts +79 -79
  413. package/dist/sdk/lifecycle/update.d.ts +131 -132
  414. package/dist/sdk/lifecycle/update.js +2 -2
  415. package/dist/sdk/lifecycle-completion.d.ts +22 -22
  416. package/dist/sdk/lifecycle-policy.d.ts +52 -52
  417. package/dist/sdk/linked-artifacts.d.ts +69 -69
  418. package/dist/sdk/mcp/apps.d.ts +32 -32
  419. package/dist/sdk/mcp/authorization.d.ts +76 -76
  420. package/dist/sdk/mcp/discovery.d.ts +111 -111
  421. package/dist/sdk/mcp/interactions.d.ts +61 -61
  422. package/dist/sdk/mcp/protocol.d.ts +78 -78
  423. package/dist/sdk/mcp/skills.d.ts +88 -88
  424. package/dist/sdk/mcp/subscriptions.d.ts +39 -39
  425. package/dist/sdk/mcp/tasks.d.ts +75 -75
  426. package/dist/sdk/mcp/transport.d.ts +11 -11
  427. package/dist/sdk/merge/abandoned-receipts.d.ts +6 -6
  428. package/dist/sdk/merge/driver.d.ts +60 -60
  429. package/dist/sdk/merge/install.d.ts +64 -64
  430. package/dist/sdk/merge/install.js +1 -1
  431. package/dist/sdk/merge/receipt-file-boundary.d.ts +5 -5
  432. package/dist/sdk/merge/receipt-operation.d.ts +6 -6
  433. package/dist/sdk/merge/receipt-schema.d.ts +2 -2
  434. package/dist/sdk/merge/receipts.d.ts +156 -156
  435. package/dist/sdk/merge/reconcile.d.ts +36 -36
  436. package/dist/sdk/merge/reconcile.js +1 -1
  437. package/dist/sdk/merge/three-way.d.ts +77 -76
  438. package/dist/sdk/merge/three-way.js +1 -1
  439. package/dist/sdk/mutation-events.d.ts +84 -84
  440. package/dist/sdk/mutation-guard.d.ts +106 -106
  441. package/dist/sdk/notes.d.ts +52 -52
  442. package/dist/sdk/output/table-rows.d.ts +8 -8
  443. package/dist/sdk/output-contracts.d.ts +38 -38
  444. package/dist/sdk/output-projection.d.ts +142 -142
  445. package/dist/sdk/output-token-accounting.d.ts +27 -27
  446. package/dist/sdk/output.d.ts +28 -28
  447. package/dist/sdk/package-import-adapters.d.ts +54 -54
  448. package/dist/sdk/pagination.d.ts +29 -29
  449. package/dist/sdk/profile.d.ts +123 -123
  450. package/dist/sdk/provenance.d.ts +58 -58
  451. package/dist/sdk/public-surface.json +1 -1
  452. package/dist/sdk/query/activity.d.ts +118 -118
  453. package/dist/sdk/query/aggregate.d.ts +140 -140
  454. package/dist/sdk/query/calendar.d.ts +144 -144
  455. package/dist/sdk/query/complete-list.d.ts +53 -53
  456. package/dist/sdk/query/context.d.ts +395 -395
  457. package/dist/sdk/query/duplicate-candidates.d.ts +1 -1
  458. package/dist/sdk/query/get.d.ts +77 -77
  459. package/dist/sdk/query/history.d.ts +72 -72
  460. package/dist/sdk/query/item-filter-options.d.ts +79 -79
  461. package/dist/sdk/query/list-filter-shared.d.ts +1 -1
  462. package/dist/sdk/query/list.d.ts +188 -188
  463. package/dist/sdk/query/multi-value-filters.d.ts +4 -4
  464. package/dist/sdk/query/next-ready-budget.d.ts +14 -14
  465. package/dist/sdk/query/next.d.ts +137 -137
  466. package/dist/sdk/query/projection-contracts.d.ts +8 -8
  467. package/dist/sdk/query/search/corpus.d.ts +8 -8
  468. package/dist/sdk/query/search/filters.d.ts +5 -5
  469. package/dist/sdk/query/search/input.d.ts +4 -4
  470. package/dist/sdk/query/search/response.d.ts +8 -8
  471. package/dist/sdk/query/search/semantic.d.ts +106 -106
  472. package/dist/sdk/query/search/types.d.ts +85 -85
  473. package/dist/sdk/query/search-contracts.d.ts +65 -65
  474. package/dist/sdk/query/search-pagination.d.ts +19 -19
  475. package/dist/sdk/query/search-rendering.d.ts +25 -25
  476. package/dist/sdk/query/search.d.ts +46 -46
  477. package/dist/sdk/read-output/continuation.d.ts +8 -8
  478. package/dist/sdk/read-output/continuation.js +1 -1
  479. package/dist/sdk/read-output/extension.d.ts +7 -0
  480. package/dist/sdk/read-output/extension.js +2 -0
  481. package/dist/sdk/read-output/options.d.ts +6 -4
  482. package/dist/sdk/read-output/options.js +1 -1
  483. package/dist/sdk/read-output/provenance.d.ts +8 -8
  484. package/dist/sdk/read-output-budget.d.ts +10 -10
  485. package/dist/sdk/read-output-contracts.d.ts +192 -186
  486. package/dist/sdk/read-output-contracts.js +1 -1
  487. package/dist/sdk/read-output-rows.d.ts +6 -6
  488. package/dist/sdk/read-output-session.d.ts +50 -50
  489. package/dist/sdk/relationship-analytics.d.ts +78 -78
  490. package/dist/sdk/relationship-context.d.ts +81 -81
  491. package/dist/sdk/relationship-history.d.ts +109 -109
  492. package/dist/sdk/relationship-kinds/contract.d.ts +34 -34
  493. package/dist/sdk/relationship-migration.d.ts +26 -26
  494. package/dist/sdk/relationships.d.ts +78 -78
  495. package/dist/sdk/reproducibility/process.d.ts +3 -3
  496. package/dist/sdk/runtime/context.d.ts +11 -11
  497. package/dist/sdk/runtime-action-aliases.d.ts +2 -2
  498. package/dist/sdk/runtime-extended-actions.d.ts +8 -8
  499. package/dist/sdk/runtime-input.d.ts +3 -3
  500. package/dist/sdk/runtime-primitives.d.ts +4 -2
  501. package/dist/sdk/runtime-primitives.js +1 -1
  502. package/dist/sdk/runtime-public-contracts.d.ts +78 -78
  503. package/dist/sdk/runtime.d.ts +305 -305
  504. package/dist/sdk/runtime.js +1 -1
  505. package/dist/sdk/scheduling-shortcuts.d.ts +32 -32
  506. package/dist/sdk/schema-migration.d.ts +86 -86
  507. package/dist/sdk/schema.d.ts +355 -355
  508. package/dist/sdk/similarity-scoring.d.ts +10 -10
  509. package/dist/sdk/similarity.d.ts +113 -113
  510. package/dist/sdk/stats.d.ts +108 -108
  511. package/dist/sdk/structured-mutations.d.ts +16 -16
  512. package/dist/sdk/structured-mutations.js +1 -1
  513. package/dist/sdk/telemetry.d.ts +53 -53
  514. package/dist/sdk/templates.d.ts +39 -39
  515. package/dist/sdk/test/batch.d.ts +85 -85
  516. package/dist/sdk/test/execution-receipts.d.ts +3 -3
  517. package/dist/sdk/test/execution.d.ts +277 -277
  518. package/dist/sdk/test/execution.js +2 -2
  519. package/dist/sdk/test/json-path.d.ts +2 -2
  520. package/dist/sdk/test/linked-command-detection.d.ts +10 -10
  521. package/dist/sdk/test/measurements.d.ts +11 -11
  522. package/dist/sdk/test/parsers.d.ts +1 -1
  523. package/dist/sdk/test/parsers.js +1 -1
  524. package/dist/sdk/test/runs.d.ts +52 -52
  525. package/dist/sdk/test/trust.d.ts +12 -12
  526. package/dist/sdk/test/update.d.ts +31 -31
  527. package/dist/sdk/testing.d.ts +323 -319
  528. package/dist/sdk/testing.js +2 -2
  529. package/dist/sdk/traceability/source-traceability.d.ts +65 -65
  530. package/dist/sdk/workspace-contracts.d.ts +37 -37
  531. package/dist/sdk/workspace-memory.d.ts +60 -60
  532. package/dist/sdk/workspace-recipe.d.ts +9 -9
  533. package/dist/sdk/workspace-snapshot.d.ts +97 -97
  534. package/dist/sdk/workspace-transaction-gc.d.ts +32 -32
  535. package/dist/sdk/workspace-transaction.d.ts +47 -47
  536. package/dist/sdk/workspace.d.ts +6 -6
  537. package/dist/types.d.ts +978 -978
  538. package/dist/types.js +1 -1
  539. package/docs/BUILD_AND_RELEASE_ACCEPTANCE.md +5 -2
  540. package/docs/CONFIGURATION.md +43 -0
  541. package/docs/DEFECT_RECURRENCE.md +20 -0
  542. package/docs/EXTENSIONS.md +3 -3
  543. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +19 -0
  544. package/docs/MERGE_SAFETY.md +35 -1
  545. package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +17 -4
  546. package/docs/RELATIONSHIP_GRAPH.md +26 -0
  547. package/docs/RELEASING.md +6 -0
  548. package/docs/SDK.md +62 -18
  549. package/docs/SDK_CONSUMER_RECEIPTS.md +67 -0
  550. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +6 -3
  551. package/marketplace.json +1 -1
  552. package/node_modules/@opentelemetry/core/build/esm/version.d.ts +1 -1
  553. package/node_modules/@opentelemetry/core/build/esm/version.js +1 -1
  554. package/node_modules/@opentelemetry/core/build/esnext/version.d.ts +1 -1
  555. package/node_modules/@opentelemetry/core/build/esnext/version.js +1 -1
  556. package/node_modules/@opentelemetry/core/build/src/version.d.ts +1 -1
  557. package/node_modules/@opentelemetry/core/build/src/version.js +1 -1
  558. package/node_modules/@opentelemetry/core/package.json +2 -2
  559. package/node_modules/@opentelemetry/resources/build/esm/version.d.ts +1 -1
  560. package/node_modules/@opentelemetry/resources/build/esm/version.js +1 -1
  561. package/node_modules/@opentelemetry/resources/build/esnext/version.d.ts +1 -1
  562. package/node_modules/@opentelemetry/resources/build/esnext/version.js +1 -1
  563. package/node_modules/@opentelemetry/resources/build/src/version.d.ts +1 -1
  564. package/node_modules/@opentelemetry/resources/build/src/version.js +1 -1
  565. package/node_modules/@opentelemetry/resources/package.json +3 -3
  566. package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.d.ts +57 -0
  567. package/node_modules/@opentelemetry/sdk-trace/build/esm/StackContextManager.js +105 -0
  568. package/node_modules/@opentelemetry/sdk-trace/build/esm/index.d.ts +1 -0
  569. package/node_modules/@opentelemetry/sdk-trace/build/esm/index.js +1 -0
  570. package/node_modules/@opentelemetry/sdk-trace/build/esm/version.d.ts +1 -1
  571. package/node_modules/@opentelemetry/sdk-trace/build/esm/version.js +1 -1
  572. package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.d.ts +57 -0
  573. package/node_modules/@opentelemetry/sdk-trace/build/esnext/StackContextManager.js +105 -0
  574. package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.d.ts +1 -0
  575. package/node_modules/@opentelemetry/sdk-trace/build/esnext/index.js +1 -0
  576. package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.d.ts +1 -1
  577. package/node_modules/@opentelemetry/sdk-trace/build/esnext/version.js +1 -1
  578. package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.d.ts +57 -0
  579. package/node_modules/@opentelemetry/sdk-trace/build/src/StackContextManager.js +109 -0
  580. package/node_modules/@opentelemetry/sdk-trace/build/src/index.d.ts +1 -0
  581. package/node_modules/@opentelemetry/sdk-trace/build/src/index.js +3 -1
  582. package/node_modules/@opentelemetry/sdk-trace/build/src/version.d.ts +1 -1
  583. package/node_modules/@opentelemetry/sdk-trace/build/src/version.js +1 -1
  584. package/node_modules/@opentelemetry/sdk-trace/package.json +5 -5
  585. package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.d.ts +1 -1
  586. package/node_modules/@opentelemetry/sdk-trace-base/build/esm/version.js +1 -1
  587. package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.d.ts +1 -1
  588. package/node_modules/@opentelemetry/sdk-trace-base/build/esnext/version.js +1 -1
  589. package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.d.ts +1 -1
  590. package/node_modules/@opentelemetry/sdk-trace-base/build/src/version.js +1 -1
  591. package/node_modules/@opentelemetry/sdk-trace-base/package.json +7 -7
  592. package/node_modules/@sentry/core/build/cjs/browser.js +3 -0
  593. package/node_modules/@sentry/core/build/cjs/fetch.js +10 -9
  594. package/node_modules/@sentry/core/build/cjs/index.js +3 -0
  595. package/node_modules/@sentry/core/build/cjs/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
  596. package/node_modules/@sentry/core/build/cjs/integrations/http/get-outgoing-span-data.js +3 -2
  597. package/node_modules/@sentry/core/build/cjs/integrations/http/server-subscription.js +7 -3
  598. package/node_modules/@sentry/core/build/cjs/integrations/requestdata.js +23 -9
  599. package/node_modules/@sentry/core/build/cjs/server.js +3 -0
  600. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterCollectedUrl.js +24 -0
  601. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterKeyValueData.js +17 -23
  602. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterQueryParams.js +8 -15
  603. package/node_modules/@sentry/core/build/cjs/utils/data-collection/filterUrlQuery.js +20 -0
  604. package/node_modules/@sentry/core/build/cjs/utils/url.js +4 -3
  605. package/node_modules/@sentry/core/build/cjs/utils/version.js +1 -1
  606. package/node_modules/@sentry/core/build/esm/browser.js +1 -0
  607. package/node_modules/@sentry/core/build/esm/fetch.js +10 -9
  608. package/node_modules/@sentry/core/build/esm/index.js +1 -0
  609. package/node_modules/@sentry/core/build/esm/integrations/http/add-outgoing-request-breadcrumb.js +2 -1
  610. package/node_modules/@sentry/core/build/esm/integrations/http/get-outgoing-span-data.js +3 -2
  611. package/node_modules/@sentry/core/build/esm/integrations/http/server-subscription.js +7 -3
  612. package/node_modules/@sentry/core/build/esm/integrations/requestdata.js +23 -9
  613. package/node_modules/@sentry/core/build/esm/package.json +1 -1
  614. package/node_modules/@sentry/core/build/esm/server.js +1 -0
  615. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterCollectedUrl.js +21 -0
  616. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterKeyValueData.js +18 -25
  617. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterQueryParams.js +9 -16
  618. package/node_modules/@sentry/core/build/esm/utils/data-collection/filterUrlQuery.js +18 -0
  619. package/node_modules/@sentry/core/build/esm/utils/url.js +4 -3
  620. package/node_modules/@sentry/core/build/esm/utils/version.js +1 -1
  621. package/node_modules/@sentry/core/build/types/shared-exports.d.ts +1 -0
  622. package/node_modules/@sentry/core/build/types/utils/data-collection/filterCollectedUrl.d.ts +21 -0
  623. package/node_modules/@sentry/core/build/types/utils/data-collection/filterKeyValueData.d.ts +1 -0
  624. package/node_modules/@sentry/core/build/types/utils/data-collection/filterQueryParams.d.ts +2 -3
  625. package/node_modules/@sentry/core/build/types/utils/data-collection/filterUrlQuery.d.ts +13 -0
  626. package/node_modules/@sentry/core/build/types/utils/url.d.ts +4 -1
  627. package/node_modules/@sentry/core/build/types-ts3.8/shared-exports.d.ts +1 -0
  628. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterCollectedUrl.d.ts +21 -0
  629. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterKeyValueData.d.ts +1 -0
  630. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterQueryParams.d.ts +2 -3
  631. package/node_modules/@sentry/core/build/types-ts3.8/utils/data-collection/filterUrlQuery.d.ts +13 -0
  632. package/node_modules/@sentry/core/build/types-ts3.8/utils/url.d.ts +4 -1
  633. package/node_modules/@sentry/core/package.json +3 -2
  634. package/node_modules/@sentry/node/build/cjs/integrations/tracing/vercelai/instrumentation.js +3 -0
  635. package/node_modules/@sentry/node/build/esm/integrations/tracing/vercelai/instrumentation.js +3 -0
  636. package/node_modules/@sentry/node/build/esm/package.json +1 -1
  637. package/node_modules/@sentry/node/package.json +7 -6
  638. package/node_modules/@sentry/node-core/build/cjs/integrations/anr/index.js +1 -1
  639. package/node_modules/@sentry/node-core/build/cjs/integrations/http/httpServerSpansIntegration.js +6 -3
  640. package/node_modules/@sentry/node-core/build/cjs/integrations/local-variables/local-variables-async.js +1 -1
  641. package/node_modules/@sentry/node-core/build/cjs/integrations/node-fetch/undici-instrumentation.js +2 -2
  642. package/node_modules/@sentry/node-core/build/cjs/light/client.js +7 -0
  643. package/node_modules/@sentry/node-core/build/cjs/sdk/client.js +7 -0
  644. package/node_modules/@sentry/node-core/build/cjs/utils/outgoingFetchRequest.js +1 -1
  645. package/node_modules/@sentry/node-core/build/esm/integrations/anr/index.js +1 -1
  646. package/node_modules/@sentry/node-core/build/esm/integrations/anr/worker-script.js +2 -2
  647. package/node_modules/@sentry/node-core/build/esm/integrations/http/httpServerSpansIntegration.js +7 -4
  648. package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/local-variables-async.js +1 -1
  649. package/node_modules/@sentry/node-core/build/esm/integrations/local-variables/worker-script.js +1 -1
  650. package/node_modules/@sentry/node-core/build/esm/integrations/node-fetch/undici-instrumentation.js +3 -3
  651. package/node_modules/@sentry/node-core/build/esm/light/client.js +8 -1
  652. package/node_modules/@sentry/node-core/build/esm/package.json +1 -1
  653. package/node_modules/@sentry/node-core/build/esm/sdk/client.js +8 -1
  654. package/node_modules/@sentry/node-core/build/esm/utils/outgoingFetchRequest.js +2 -2
  655. package/node_modules/@sentry/node-core/build/types/light/client.d.ts +1 -0
  656. package/node_modules/@sentry/node-core/build/types/sdk/client.d.ts +1 -0
  657. package/node_modules/@sentry/node-core/build/types-ts3.8/light/client.d.ts +1 -0
  658. package/node_modules/@sentry/node-core/build/types-ts3.8/sdk/client.d.ts +1 -0
  659. package/node_modules/@sentry/node-core/package.json +5 -4
  660. package/node_modules/@sentry/opentelemetry/build/cjs/{asyncContextStrategy-BJ5buq_A.js → asyncContextStrategy-BR-l9zjD.js} +8 -6
  661. package/node_modules/@sentry/opentelemetry/build/cjs/index.browser.js +1 -1
  662. package/node_modules/@sentry/opentelemetry/build/cjs/index.js +1 -1
  663. package/node_modules/@sentry/opentelemetry/build/esm/{asyncContextStrategy-Bx5F5tCX.js → asyncContextStrategy-BQfM_LMv.js} +9 -7
  664. package/node_modules/@sentry/opentelemetry/build/esm/index.browser.js +1 -1
  665. package/node_modules/@sentry/opentelemetry/build/esm/index.js +2 -2
  666. package/node_modules/@sentry/opentelemetry/build/esm/package.json +1 -1
  667. package/node_modules/@sentry/opentelemetry/package.json +4 -3
  668. package/node_modules/@sentry/server-utils/build/cjs/tracing-channel.js +1 -0
  669. package/node_modules/@sentry/server-utils/build/esm/package.json +1 -1
  670. package/node_modules/@sentry/server-utils/build/esm/tracing-channel.js +1 -0
  671. package/node_modules/@sentry/server-utils/build/types/tracing-channel.d.ts +3 -1
  672. package/node_modules/@sentry/server-utils/build/types-ts3.8/tracing-channel.d.ts +3 -1
  673. package/node_modules/@sentry/server-utils/package.json +4 -3
  674. package/node_modules/cjs-module-lexer/README.md +8 -3
  675. package/node_modules/cjs-module-lexer/dist/lexer.js +1 -1
  676. package/node_modules/cjs-module-lexer/dist/lexer.mjs +2 -2
  677. package/node_modules/cjs-module-lexer/lexer.js +48 -9
  678. package/node_modules/cjs-module-lexer/package.json +3 -2
  679. package/node_modules/es-module-lexer/dist/lexer.asm.js +2 -2
  680. package/node_modules/es-module-lexer/dist/lexer.cjs +1 -1
  681. package/node_modules/es-module-lexer/dist/lexer.js +2 -2
  682. package/node_modules/es-module-lexer/dist/lexer.minimal.asm.js +2 -2
  683. package/node_modules/es-module-lexer/dist/lexer.minimal.cjs +1 -1
  684. package/node_modules/es-module-lexer/dist/lexer.minimal.js +2 -2
  685. package/node_modules/es-module-lexer/package.json +1 -1
  686. package/node_modules/import-in-the-middle/CHANGELOG.md +7 -0
  687. package/node_modules/import-in-the-middle/lib/get-esm-exports.mjs +7 -0
  688. package/node_modules/import-in-the-middle/package.json +1 -1
  689. package/package.json +2 -2
  690. package/packages/pm-beads/extensions/beads/runtime.ts +2 -2
  691. package/packages/pm-beads/package.json +1 -1
  692. package/packages/pm-calendar/package.json +1 -1
  693. package/packages/pm-command-kit/package.json +1 -1
  694. package/packages/pm-digital-twin/package.json +1 -1
  695. package/packages/pm-governance-audit/package.json +1 -1
  696. package/packages/pm-guide-shell/package.json +1 -1
  697. package/packages/pm-kanban/package.json +1 -1
  698. package/packages/pm-lifecycle-hooks/package.json +1 -1
  699. package/packages/pm-linked-test-adapters/package.json +1 -1
  700. package/packages/pm-search-advanced/package.json +1 -1
  701. package/packages/pm-templates/package.json +1 -1
  702. package/packages/pm-todos/package.json +1 -1
  703. package/packages/pm-vcs/package.json +1 -1
  704. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  705. package/plugins/pm-claude/package.json +1 -1
  706. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  707. package/plugins/pm-codex/package.json +1 -1
  708. package/plugins/pm-codex/plugin.json +1 -1
  709. package/runtime-dependencies.json +1 -1
  710. package/scripts/finalize-build.mjs +37 -0
  711. package/dist/cli-bundle/chunks/chunk-6PZPUJW3.js +0 -234
  712. package/dist/cli-bundle/chunks/chunk-B465HPS5.js +0 -8
  713. package/dist/cli-bundle/chunks/chunk-ILQEZ4Y6.js +0 -2
  714. package/dist/cli-bundle/chunks/chunk-JRRXWH5B.js +0 -20
  715. package/dist/cli-bundle/chunks/chunk-LH5QDBMN.js +0 -2
  716. package/dist/cli-bundle/chunks/chunk-M5NDSW6E.js +0 -30
  717. package/dist/cli-bundle/focused-chunks/chunk-AXBO53EQ.js +0 -2
  718. package/dist/cli-bundle/focused-chunks/chunk-FXRWJEQ5.js +0 -3
  719. package/dist/cli-bundle/focused-chunks/chunk-IKJFAU32.js +0 -8
  720. package/dist/cli-bundle/focused-chunks/chunk-PPH5N26M.js +0 -2
  721. package/dist/cli-bundle/focused-chunks/chunk-RZVNGUT7.js +0 -26
  722. package/dist/cli-bundle/focused-chunks/chunk-YCOJLIDI.js +0 -20
  723. package/dist/cli-bundle/focused-chunks/chunk-YDJT33JU.js +0 -2
@@ -1,4 +1,4 @@
1
- (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4a63e054-a0e2-5826-976f-9076f6905388")}catch{}})();import crypto from"node:crypto";import{spawn}from"node:child_process";import{mkdirSync,rmSync,statSync}from"node:fs";import{mkdir,readdir,rm,stat}from"node:fs/promises";import{request as httpRequest}from"node:http";import{request as httpsRequest}from"node:https";import os from"node:os";import path from"node:path";import{acquireLock}from"../lock/lock.js";import{isActiveCommandUnextended,runWithIsolatedExtensionRuntime}from"../extensions/index.js";import{resolveAutomaticReadSampleRate}from"./read-sampling.js";import{PM_TELEMETRY_SOURCE_CONTEXT_VALUES,resolveTelemetryEnvironmentPolicy}from"./policy.js";import{resolvePmPackageRootFromModule}from"../packages/root.js";import{isFileMissingError,appendLineAtomic,readFileIfExists,writeFileAtomic}from"../fs/fs-utils.js";import{resolveTelemetryErrorCategory}from"../shared/constants.js";import{nowIso}from"../shared/time.js";import{detectAgentIdentity,readAuthorEnvironment}from"../shared/author.js";import{resolveGlobalPmRoot}from"../store/paths.js";import{isConfigurationOnlySettingsRead,readSettings,runWithConfigurationOnlySettings,writeSettings}from"../store/settings.js";import{clearSettingsReadCache}from"../store/settings-read-cache.js";import{deriveTelemetryCommandResolution,deriveTelemetryCommandTaxonomy,inferTelemetryErrorCode}from"./observability.js";const TELEMETRY_QUEUE_RELATIVE_PATH=path.join("runtime","telemetry","events.jsonl"),TELEMETRY_STATE_RELATIVE_PATH=path.join("runtime","telemetry","state.json"),TELEMETRY_OTEL_SPANS_RELATIVE_PATH=path.join("runtime","telemetry","otel-spans.jsonl"),TELEMETRY_OTEL_SPANS_FLUSH_BATCH_SIZE=8,TELEMETRY_OTEL_SPANS_MAX_PENDING=500,TELEMETRY_SCHEMA_VERSION=1,TELEMETRY_CLIENT_SCHEMA_VERSION=1,TELEMETRY_FLUSH_BATCH_SIZE=100,TELEMETRY_MAX_RETRY_DELAY_MS=36e5,TELEMETRY_RETRY_BASE_DELAY_MS=3e4,TELEMETRY_HTTP_TIMEOUT_DEFAULT_MS=2e4,TELEMETRY_HTTP_TIMEOUT_MIN_MS=1e3,TELEMETRY_HTTP_TIMEOUT_MAX_MS=25e3,TELEMETRY_FOREGROUND_LOCK_WAIT_MS=250,MILLISECONDS_PER_DAY=864e5,TELEMETRY_MAX_EVENT_BYTES=65536,TELEMETRY_SANITIZE_MAX_DEPTH=6,TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS=20,TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS=15,TELEMETRY_RESULT_PREVIEW_MAX_BYTES=8192,TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS=[25,50,100,200],TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS=3600*1e3,TELEMETRY_FLUSH_LOCK_STALE_MS=6e4,TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS=6e4,OTEL_TRACES_ENDPOINT_ENV="OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",OTEL_BASE_ENDPOINT_ENV="OTEL_EXPORTER_OTLP_ENDPOINT",OTEL_SERVICE_NAME_ENV="OTEL_SERVICE_NAME",PM_TELEMETRY_OTEL_DISABLED_ENV="PM_TELEMETRY_OTEL_DISABLED",PM_TELEMETRY_OTEL_DISABLED_VALUES=new Set(["1","true","yes","on"]),PM_TELEMETRY_INLINE_FLUSH_ENV="PM_TELEMETRY_INLINE_FLUSH",PM_TELEMETRY_FLUSH_CHILD_ENV="PM_TELEMETRY_FLUSH_CHILD",PM_TELEMETRY_SOURCE_CONTEXT_ENV="PM_TELEMETRY_SOURCE_CONTEXT",PM_TELEMETRY_HTTP_TIMEOUT_MS_ENV="PM_TELEMETRY_HTTP_TIMEOUT_MS",NATIVE_FETCH=globalThis.fetch;import{PM_TELEMETRY_SOURCE_CONTEXT_VALUES as PM_TELEMETRY_SOURCE_CONTEXT_VALUES2}from"./policy.js";let sourceContextWarningEmitted=!1,_lastFlushPromise=Promise.resolve(),_queueMutationPromise=Promise.resolve();const deferredReadStarts=new WeakMap;async function waitForPendingFlush(){await _lastFlushPromise,await _queueMutationPromise}const PM_TELEMETRY_SOURCE_CONTEXT_SET=new Set(PM_TELEMETRY_SOURCE_CONTEXT_VALUES),BOOLEAN_TRUE_VALUES=new Set(["1","true","yes","on"]),TELEMETRY_HARNESSES=new Set(["claude-code","codex","pi","opencode","cursor","aider","gemini-cli","ci"]),PROCESS_SESSION_ID=crypto.randomUUID(),SENSITIVE_KEYWORDS=["token","secret","password","passwd","api_key","apikey","authorization","cookie","session","credentials","bearer"],REDACTION_INPUT_KEYS=new Set(["literal","literals","regex","regexes","replacement","replacements","setjson","set_json","update"]),SENSITIVE_INLINE_KEY_PATTERN="(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|session|credentials|bearer|literals?|regex(?:es)?|replacements?)",INLINE_SENSITIVE_ASSIGNMENT_PATTERN=new RegExp(`\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\s*([:=])\\s*([^\\s,;]+)`,"giu"),INLINE_SENSITIVE_FLAG_PATTERN=new RegExp(`(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\s+)([^\\s,;]+)`,"giu"),ABSOLUTE_PATH_TOKEN_PATTERN=/(^|[\s"'`(=])\/(?:[^\s"'`),;]+)/g,BEARER_TOKEN_PATTERN=/bearer\s+[a-z0-9._=-]+/giu,PRIVATE_IP_PATTERN=/\b(?:10\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|172\.(?:1[6-9]|2\d|3[01])\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|192\.168\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d))\b/g;function queuePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_QUEUE_RELATIVE_PATH)}function otelSpansQueuePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_OTEL_SPANS_RELATIVE_PATH)}function telemetryRuntimeDirectory(globalPmRoot){return path.dirname(queuePath(globalPmRoot))}function runtimeStatePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_STATE_RELATIVE_PATH)}function flushLockPath(globalPmRoot){return path.join(globalPmRoot,"runtime","telemetry","flush.lock")}function flushSpawnLockPath(globalPmRoot){return path.join(globalPmRoot,"runtime","telemetry","flush.spawn.lock")}function telemetryFlushRunnerPath(){return path.join(resolvePmPackageRootFromModule(import.meta.url,["../../.."]),"dist","cli","telemetry-flush.js")}function shouldFlushInline(){if(parseBooleanTrueLike(process.env[PM_TELEMETRY_INLINE_FLUSH_ENV])||parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV]))return!0;const nodeEnv=(process.env.NODE_ENV??"").trim().toLowerCase();return typeof process.env.VITEST=="string"||typeof process.env.VITEST_WORKER_ID=="string"||nodeEnv==="test"}async function readRuntimeState(globalPmRoot){const raw=await readFileIfExists(runtimeStatePath(globalPmRoot));if(!raw||raw.trim().length===0)return{};try{const parsed=JSON.parse(raw);return typeof parsed!="object"||parsed===null||Array.isArray(parsed)?{}:parsed}catch{return{}}}async function writeRuntimeState(globalPmRoot,patch){try{await withQueueMutation(async()=>{const next={...await readRuntimeState(globalPmRoot),...patch},normalized=Object.fromEntries(Object.entries(next).filter(([,value])=>value!==void 0).sort((left,right)=>left[0].localeCompare(right[0])));await writeFileAtomic(runtimeStatePath(globalPmRoot),`${JSON.stringify(normalized,null,2)}
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="11e932b0-f880-5848-abd3-0360e21289ec")}catch{}})();import crypto from"node:crypto";import{spawn}from"node:child_process";import{mkdirSync,rmSync,statSync}from"node:fs";import{mkdir,readdir,rm,stat}from"node:fs/promises";import{request as httpRequest}from"node:http";import{request as httpsRequest}from"node:https";import os from"node:os";import path from"node:path";import{acquireLock}from"../lock/lock.js";import{isActiveCommandUnextended,runWithIsolatedExtensionRuntime}from"../extensions/index.js";import{resolveAutomaticReadSampleRate}from"./read-sampling.js";import{PM_TELEMETRY_SOURCE_CONTEXT_VALUES,resolveTelemetryEnvironmentPolicy}from"./policy.js";import{resolvePmPackageRootFromModule}from"../packages/root.js";import{isFileMissingError,appendLineAtomic,readFileIfExists,writeFileAtomic}from"../fs/fs-utils.js";import{resolveTelemetryErrorCategory}from"../shared/constants.js";import{nowIso}from"../shared/time.js";import{detectAgentIdentity,readAuthorEnvironment}from"../shared/author.js";import{resolveGlobalPmRoot}from"../store/paths.js";import{isConfigurationOnlySettingsRead,readSettings,runWithConfigurationOnlySettings,writeSettings}from"../store/settings.js";import{clearSettingsReadCache}from"../store/settings-read-cache.js";import{deriveTelemetryCommandResolution,deriveTelemetryCommandTaxonomy,inferTelemetryErrorCode}from"./observability.js";const TELEMETRY_QUEUE_RELATIVE_PATH=path.join("runtime","telemetry","events.jsonl"),TELEMETRY_STATE_RELATIVE_PATH=path.join("runtime","telemetry","state.json"),TELEMETRY_OTEL_SPANS_RELATIVE_PATH=path.join("runtime","telemetry","otel-spans.jsonl"),TELEMETRY_OTEL_SPANS_FLUSH_BATCH_SIZE=8,TELEMETRY_OTEL_SPANS_MAX_PENDING=500,TELEMETRY_SCHEMA_VERSION=1,TELEMETRY_CLIENT_SCHEMA_VERSION=1,TELEMETRY_FLUSH_BATCH_SIZE=100,TELEMETRY_MAX_RETRY_DELAY_MS=36e5,TELEMETRY_RETRY_BASE_DELAY_MS=3e4,TELEMETRY_HTTP_TIMEOUT_DEFAULT_MS=2e4,TELEMETRY_HTTP_TIMEOUT_MIN_MS=1e3,TELEMETRY_HTTP_TIMEOUT_MAX_MS=25e3,TELEMETRY_FOREGROUND_LOCK_WAIT_MS=250,MILLISECONDS_PER_DAY=864e5,TELEMETRY_MAX_EVENT_BYTES=65536,TELEMETRY_SANITIZE_MAX_DEPTH=6,TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS=20,TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS=15,TELEMETRY_RESULT_PREVIEW_MAX_BYTES=8192,TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS=[25,50,100,200],TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS=3600*1e3,TELEMETRY_FLUSH_LOCK_STALE_MS=6e4,TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS=6e4,OTEL_TRACES_ENDPOINT_ENV="OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",OTEL_BASE_ENDPOINT_ENV="OTEL_EXPORTER_OTLP_ENDPOINT",OTEL_SERVICE_NAME_ENV="OTEL_SERVICE_NAME",PM_TELEMETRY_OTEL_DISABLED_ENV="PM_TELEMETRY_OTEL_DISABLED",PM_TELEMETRY_OTEL_DISABLED_VALUES=new Set(["1","true","yes","on"]),PM_TELEMETRY_INLINE_FLUSH_ENV="PM_TELEMETRY_INLINE_FLUSH",PM_TELEMETRY_FLUSH_CHILD_ENV="PM_TELEMETRY_FLUSH_CHILD",PM_TELEMETRY_SOURCE_CONTEXT_ENV="PM_TELEMETRY_SOURCE_CONTEXT",PM_TELEMETRY_HTTP_TIMEOUT_MS_ENV="PM_TELEMETRY_HTTP_TIMEOUT_MS",NATIVE_FETCH=globalThis.fetch;import{PM_TELEMETRY_SOURCE_CONTEXT_VALUES as PM_TELEMETRY_SOURCE_CONTEXT_VALUES2}from"./policy.js";let sourceContextWarningEmitted=!1,_lastFlushPromise=Promise.resolve(),_queueMutationPromise=Promise.resolve();const deferredReadStarts=new WeakMap;async function waitForPendingFlush(){await _lastFlushPromise,await _queueMutationPromise}const PM_TELEMETRY_SOURCE_CONTEXT_SET=new Set(PM_TELEMETRY_SOURCE_CONTEXT_VALUES),BOOLEAN_TRUE_VALUES=new Set(["1","true","yes","on"]),TELEMETRY_HARNESSES=new Set(["claude-code","codex","pi","opencode","cursor","aider","gemini-cli","ci"]),PROCESS_SESSION_ID=crypto.randomUUID(),SENSITIVE_KEYWORDS=["token","secret","password","passwd","api_key","apikey","authorization","cookie","session","credentials","bearer"],REDACTION_INPUT_KEYS=new Set(["literal","literals","regex","regexes","replacement","replacements","setjson","set_json","update"]),SENSITIVE_INLINE_KEY_PATTERN="(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|session|credentials|bearer|literals?|regex(?:es)?|replacements?)",INLINE_SENSITIVE_ASSIGNMENT_PATTERN=new RegExp(`\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\s*([:=])\\s*([^\\s,;]+)`,"giu"),INLINE_SENSITIVE_FLAG_PATTERN=new RegExp(`(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\s+)([^\\s,;]+)`,"giu"),ABSOLUTE_PATH_TOKEN_PATTERN=/(^|[\s"'`(=])\/(?:[^\s"'`),;]+)/g,BEARER_TOKEN_PATTERN=/bearer\s+[a-z0-9._=-]+/giu,PRIVATE_IP_PATTERN=/\b(?:10\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|172\.(?:1[6-9]|2\d|3[01])\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|192\.168\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d))\b/g;function queuePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_QUEUE_RELATIVE_PATH)}function otelSpansQueuePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_OTEL_SPANS_RELATIVE_PATH)}function telemetryRuntimeDirectory(globalPmRoot){return path.dirname(queuePath(globalPmRoot))}function runtimeStatePath(globalPmRoot){return path.join(globalPmRoot,TELEMETRY_STATE_RELATIVE_PATH)}function flushLockPath(globalPmRoot){return path.join(globalPmRoot,"runtime","telemetry","flush.lock")}function flushSpawnLockPath(globalPmRoot){return path.join(globalPmRoot,"runtime","telemetry","flush.spawn.lock")}function telemetryFlushRunnerPath(){return path.join(resolvePmPackageRootFromModule(import.meta.url,["../../.."]),"dist","cli","telemetry-flush.js")}function shouldFlushInline(){if(parseBooleanTrueLike(process.env[PM_TELEMETRY_INLINE_FLUSH_ENV])||parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV]))return!0;const nodeEnv=(process.env.NODE_ENV??"").trim().toLowerCase();return typeof process.env.VITEST=="string"||typeof process.env.VITEST_WORKER_ID=="string"||nodeEnv==="test"}async function readRuntimeState(globalPmRoot){const raw=await readFileIfExists(runtimeStatePath(globalPmRoot));if(!raw||raw.trim().length===0)return{};try{const parsed=JSON.parse(raw);return typeof parsed!="object"||parsed===null||Array.isArray(parsed)?{}:parsed}catch{return{}}}async function writeRuntimeState(globalPmRoot,patch){try{await withQueueMutation(async()=>{const next={...await readRuntimeState(globalPmRoot),...patch},normalized=Object.fromEntries(Object.entries(next).filter(([,value])=>value!==void 0).sort((left,right)=>left[0].localeCompare(right[0])));await writeFileAtomic(runtimeStatePath(globalPmRoot),`${JSON.stringify(normalized,null,2)}
2
2
  `,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])})},globalPmRoot)}catch{}}function isSensitiveKey(key){const normalized=key.trim().toLowerCase().replaceAll("-","_").replaceAll(/[^a-z0-9_]+/g,"_"),tokens=normalized.split("_").filter(token=>token.length>0);return REDACTION_INPUT_KEYS.has(normalized)||SENSITIVE_KEYWORDS.some(keyword=>normalized===keyword||normalized.endsWith(`_${keyword}`)||tokens.includes(keyword))}function redactInlineSensitiveAssignments(input){return input.replaceAll(INLINE_SENSITIVE_ASSIGNMENT_PATTERN,(_match,key,delimiter)=>`${key}${delimiter}[redacted]`).replaceAll(INLINE_SENSITIVE_FLAG_PATTERN,(_match,flag,delimiter)=>`${flag}${delimiter}[redacted]`)}function redactAbsolutePathTokens(input){return input.replaceAll(ABSOLUTE_PATH_TOKEN_PATTERN,(_match,prefix)=>`${prefix}[redacted_path]`)}function isAsciiLetterOrDigitCode(code){const isUpper=code>=65&&code<=90,isLower=code>=97&&code<=122,isDigit=code>=48&&code<=57;return isUpper||isLower||isDigit}function isEmailLocalCharacter(character){if(!character)return!1;const code=character.charCodeAt(0);return isAsciiLetterOrDigitCode(code)?!0:character==="."||character==="_"||character==="%"||character==="+"||character==="-"}function isEmailDomainCharacter(character){if(!character)return!1;const code=character.charCodeAt(0);return isAsciiLetterOrDigitCode(code)?!0:character==="."||character==="-"}function looksLikeEmailToken(token){const atIndex=token.indexOf("@");if(atIndex<=0||atIndex!==token.lastIndexOf("@")||atIndex===token.length-1)return!1;const localPart=token.slice(0,atIndex),domainPart=token.slice(atIndex+1),lastDot=domainPart.lastIndexOf(".");if(lastDot<=0||lastDot===domainPart.length-1||domainPart.length-(lastDot+1)<2)return!1;for(const character of localPart)if(!isEmailLocalCharacter(character))return!1;for(const character of domainPart)if(!isEmailDomainCharacter(character))return!1;return!0}function redactEmailTokens(input){let redacted="",cursor=0;for(;cursor<input.length;){const atIndex=input.indexOf("@",cursor);if(atIndex<0){redacted+=input.slice(cursor);break}let start=atIndex-1;for(;start>=cursor&&isEmailLocalCharacter(input[start]);)start-=1;start+=1;let end=atIndex+1;for(;end<input.length&&isEmailDomainCharacter(input[end]);)end+=1;const candidate=input.slice(start,end);if(looksLikeEmailToken(candidate)){redacted+=input.slice(cursor,start),redacted+="[redacted_email]",cursor=end;continue}redacted+=input.slice(cursor,atIndex+1),cursor=atIndex+1}return redacted}function sanitizeCommonSensitiveTokens(input){return redactEmailTokens(input).replaceAll(BEARER_TOKEN_PATTERN,"bearer [redacted_token]").replaceAll(PRIVATE_IP_PATTERN,"[redacted_ip]")}function sanitizeStringRedacted(input){const withoutCommonSensitiveTokens=sanitizeCommonSensitiveTokens(input),withoutInlineSecrets=redactInlineSensitiveAssignments(withoutCommonSensitiveTokens),withoutAbsolutePaths=redactAbsolutePathTokens(withoutInlineSecrets),trimmed=withoutAbsolutePaths.trim();return trimmed.startsWith("/")&&trimmed.length>1?"[redacted_path]":withoutAbsolutePaths.length>512?`${withoutAbsolutePaths.slice(0,509)}...`:withoutAbsolutePaths}function sanitizeStringMax(input){const withoutCommonSensitiveTokens=sanitizeCommonSensitiveTokens(input),withoutInlineSecrets=redactInlineSensitiveAssignments(withoutCommonSensitiveTokens),withoutAbsolutePaths=redactAbsolutePathTokens(withoutInlineSecrets),trimmed=withoutAbsolutePaths.trim();return trimmed.startsWith("/")&&trimmed.length>1?"[redacted_path]":withoutAbsolutePaths.length>2048?`${withoutAbsolutePaths.slice(0,2045)}...`:withoutAbsolutePaths}function sanitizeString(input,captureLevel="redacted"){return captureLevel==="max"?sanitizeStringMax(input):sanitizeStringRedacted(input)}function sanitizeValue(value,keyHint,captureLevel="redacted",depth=0){if(keyHint&&isSensitiveKey(keyHint))return"[redacted]";if(value==null)return value;if(typeof value=="string")return sanitizeString(value,captureLevel);if(typeof value=="number"||typeof value=="boolean")return value;if(depth>=TELEMETRY_SANITIZE_MAX_DEPTH)return"[depth_truncated]";if(Array.isArray(value))return value.slice(0,TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map(entry=>sanitizeValue(entry,void 0,captureLevel,depth+1));if(typeof value=="object"){const record=value,sanitized={};for(const[key,nested]of Object.entries(record))sanitized[key]=sanitizeValue(nested,key,captureLevel,depth+1);return sanitized}return String(value)}function sanitizeCommandArgs(args,captureLevel="redacted"){const sanitized=[];let nextIsSensitiveValue=!1;for(const rawArg of args){const arg=sanitizeString(rawArg,captureLevel);if(nextIsSensitiveValue){sanitized.push("[redacted]"),nextIsSensitiveValue=!1;continue}if(arg.startsWith("--")){const withoutPrefix=arg.slice(2),delimiterIndex=withoutPrefix.indexOf("=");if(delimiterIndex>=0){const key=withoutPrefix.slice(0,delimiterIndex),value=withoutPrefix.slice(delimiterIndex+1);isSensitiveKey(key)?sanitized.push(`--${key}=[redacted]`):sanitized.push(`--${key}=${sanitizeString(value,captureLevel)}`);continue}if(isSensitiveKey(withoutPrefix)){sanitized.push(`--${withoutPrefix}`),nextIsSensitiveValue=!0;continue}}sanitized.push(arg)}return sanitized}function normalizeCaptureLevel(value){const normalized=value?.trim().toLowerCase();return normalized==="minimal"||normalized==="redacted"||normalized==="max"?normalized:"redacted"}function parseBooleanTrueLike(value){return BOOLEAN_TRUE_VALUES.has((value??"").trim().toLowerCase())}function resolveTelemetryHttpTimeoutMs(){const rawConfigured=process.env[PM_TELEMETRY_HTTP_TIMEOUT_MS_ENV]?.trim();if(!rawConfigured)return TELEMETRY_HTTP_TIMEOUT_DEFAULT_MS;const configured=Number(rawConfigured);return Number.isFinite(configured)?Math.min(TELEMETRY_HTTP_TIMEOUT_MAX_MS,Math.max(TELEMETRY_HTTP_TIMEOUT_MIN_MS,Math.trunc(configured))):TELEMETRY_HTTP_TIMEOUT_DEFAULT_MS}async function postTelemetryJson(endpoint,headers,body){const url=new URL(endpoint);if(globalThis.fetch!==NATIVE_FETCH){const controller=new AbortController;let timeout;const deadline=new Promise((_resolve,reject)=>{timeout=setTimeout(()=>{controller.abort(),reject(new Error("telemetry_http_timeout"))},resolveTelemetryHttpTimeoutMs())});try{return(await Promise.race([globalThis.fetch(endpoint,{method:"POST",headers,body,signal:controller.signal}),deadline])).status}finally{clearTimeout(timeout)}}const request=url.protocol==="https:"?httpsRequest:url.protocol==="http:"?httpRequest:void 0;if(!request)throw new Error(`telemetry_http_protocol_unsupported_${url.protocol}`);return new Promise((resolve,reject)=>{const timeoutMs=resolveTelemetryHttpTimeoutMs(),requestOptions={method:"POST",headers:{...headers,"content-length":Buffer.byteLength(body)},signal:AbortSignal.timeout(timeoutMs),autoSelectFamilyAttemptTimeout:Math.min(5e3,timeoutMs)},clientRequest=request(url,requestOptions,response=>{response.once("error",reject),response.once("end",()=>resolve(response.statusCode)),response.resume()});clientRequest.once("error",reject),clientRequest.end(body)})}function normalizePmVersion(value){const trimmed=typeof value=="string"?value.trim():"";return trimmed.length>0?trimmed:"0.0.0"}function normalizeTelemetryErrorCode(value){const normalized=value?.trim();return normalized&&normalized.length>0?normalized:void 0}function normalizeTelemetryExitCode(exitCode,ok){return Number.isFinite(exitCode)?Math.max(0,Math.trunc(exitCode)):ok?0:1}function normalizeTelemetryErrorCategory(params){if(!params.ok)return typeof params.errorCategory=="string"&&params.errorCategory.trim().length>0?params.errorCategory:typeof params.errorCode=="string"&&params.errorCode.trim().length>0?resolveTelemetryErrorCategory(params.errorCode):"unknown"}function resolveTelemetrySourceContext(globalOptions){const override=(process.env[PM_TELEMETRY_SOURCE_CONTEXT_ENV]??"").trim().toLowerCase();if(PM_TELEMETRY_SOURCE_CONTEXT_SET.has(override))return{source_context:override,source_context_source:"env_override"};const source=override.length>0?"env_override_rejected":"inferred";return source==="env_override_rejected"&&!sourceContextWarningEmitted&&!globalOptions.quiet&&(sourceContextWarningEmitted=!0,process.stderr.write(`[pm] warning: PM_TELEMETRY_SOURCE_CONTEXT is not one of ${PM_TELEMETRY_SOURCE_CONTEXT_VALUES.join("|")}; ignoring override.
3
3
  `)),{source_context:inferTelemetrySourceContext(globalOptions),source_context_source:source}}function inferTelemetrySourceContext(globalOptions){const nodeEnv=(process.env.NODE_ENV??"").trim().toLowerCase();if(typeof process.env.VITEST=="string"||typeof process.env.VITEST_WORKER_ID=="string"||nodeEnv==="test")return"test";const nonTty=process.stdin.isTTY!==!0||process.stdout.isTTY!==!0,ci=parseBooleanTrueLike(process.env.CI),scriptLikeMode=globalOptions.json===!0||globalOptions.quiet===!0;return nonTty||ci||scriptLikeMode?"automation":"user"}function hashWithInstallationId(installationId,value){return crypto.createHash("sha256").update(`${installationId}:${value}`).digest("hex")}function buildAuthorContextPayloadFields(captureLevel,installationId){const author=(readAuthorEnvironment()??"").trim(),agent=detectAgentIdentity({env:process.env,argv:process.argv}),hasAgentContext=agent.harness!==void 0||agent.model!==void 0;return captureLevel==="minimal"?{has_author_context:author.length>0,has_agent_context:hasAgentContext}:{agent_harness:agent.harness?TELEMETRY_HARNESSES.has(agent.harness)?agent.harness:"other":"none",ci:parseBooleanTrueLike(process.env.CI),...author.length>0?{author_context_hash:hashWithInstallationId(installationId,author)}:{},...agent.harness?{agent_harness_hash:hashWithInstallationId(installationId,agent.harness)}:{},...agent.model?{agent_model_hash:hashWithInstallationId(installationId,agent.model)}:{},...agent.model_source?{agent_model_source:agent.model_source}:{}}}function normalizeForHash(value,depth=0){if(value==null||typeof value=="string"||typeof value=="number"||typeof value=="boolean")return value;if(depth>=TELEMETRY_SANITIZE_MAX_DEPTH)return"[depth_truncated]";if(Array.isArray(value))return value.slice(0,TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map(entry=>normalizeForHash(entry,depth+1));if(typeof value=="object"){const record=value,normalized={},sortedKeys=Object.keys(record).sort((left,right)=>left.localeCompare(right));for(const key of sortedKeys)normalized[key]=normalizeForHash(record[key],depth+1);return normalized}return String(value)}function hashTelemetryValue(installationId,value){return hashWithInstallationId(installationId,JSON.stringify(normalizeForHash(value)))}function hashCommandArgs(installationId,args){return{hashes:args.map(arg=>hashWithInstallationId(installationId,arg)),digest:hashWithInstallationId(installationId,args.join("\0"))}}function hashTelemetryErrorFingerprint(installationId,command,errorCode2,errorMessage){const normalizedMessage=sanitizeString(typeof errorMessage=="string"?errorMessage:"","redacted"),normalizedCode=typeof errorCode2=="string"&&errorCode2.length>0?errorCode2:"unknown_error",fingerprintSource=`${command}\0${normalizedCode}\0${normalizedMessage}`;return hashWithInstallationId(installationId,fingerprintSource)}function resolveOtelTracesEndpoint(){if(PM_TELEMETRY_OTEL_DISABLED_VALUES.has((process.env[PM_TELEMETRY_OTEL_DISABLED_ENV]??"").trim().toLowerCase()))return null;const directEndpoint=(process.env[OTEL_TRACES_ENDPOINT_ENV]??"").trim();if(directEndpoint.length>0)try{return new URL(directEndpoint).toString()}catch{return null}const baseEndpoint=(process.env[OTEL_BASE_ENDPOINT_ENV]??"").trim();if(baseEndpoint.length===0)return null;try{const url=new URL(baseEndpoint),normalizedPath=url.pathname.replace(/\/+$/,"");return normalizedPath.endsWith("/v1/traces")||(url.pathname=`${normalizedPath.length===0?"":normalizedPath}/v1/traces`),url.toString()}catch{return null}}function isoToUnixNano(iso){const parsedMs=Date.parse(iso),epochMs=Number.isNaN(parsedMs)?Date.now():parsedMs;return`${BigInt(epochMs)*1000000n}`}function otlpStringAttribute(key,value){return{key,value:{stringValue:value}}}function otlpBoolAttribute(key,value){return{key,value:{boolValue:value}}}function otlpIntAttribute(key,value){return{key,value:{intValue:String(Math.max(0,Math.trunc(value)))}}}function buildOtelSpanRequest(activeCommand,outcome,finishedAtIso,durationMs,sampleRate=1){const endpoint=activeCommand.otel_traces_endpoint;if(typeof endpoint!="string"||endpoint.trim().length===0||[activeCommand.otel_trace_id,activeCommand.otel_span_id].some(id=>typeof id!="string"||id.length===0))return null;const serviceNameCandidate=sanitizeString((process.env[OTEL_SERVICE_NAME_ENV]??"").trim()),serviceName=serviceNameCandidate.length>0?serviceNameCandidate:"pm-cli",normalizedExitCode=normalizeTelemetryExitCode(outcome.exit_code,outcome.ok),normalizedErrorCode=normalizeTelemetryErrorCode(outcome.error_code),normalizedErrorCategory=normalizeTelemetryErrorCategory({ok:outcome.ok,errorCode:normalizedErrorCode,errorCategory:outcome.error_category}),attributes=[otlpStringAttribute("pm.command",sanitizeString(activeCommand.command)),otlpStringAttribute("pm.version",activeCommand.pm_version),otlpStringAttribute("pm.source_context",activeCommand.source_context),otlpStringAttribute("pm.source_context_source",activeCommand.source_context_source),otlpStringAttribute("pm.installation_id",activeCommand.installation_id),otlpStringAttribute("pm.session_id",PROCESS_SESSION_ID),otlpStringAttribute("pm.pm_root_hash",activeCommand.pm_root_hash),otlpStringAttribute("pm.cwd_hash",activeCommand.cwd_hash),otlpBoolAttribute("pm.ok",outcome.ok),otlpIntAttribute("pm.exit_code",normalizedExitCode),otlpIntAttribute("pm.duration_ms",durationMs),otlpStringAttribute("pm.sample_rate",String(sampleRate))];typeof normalizedErrorCode=="string"&&attributes.push(otlpStringAttribute("pm.error_code",normalizedErrorCode)),typeof normalizedErrorCategory=="string"&&attributes.push(otlpStringAttribute("pm.error_category",normalizedErrorCategory)),typeof outcome.error=="string"&&outcome.error.trim().length>0&&attributes.push(otlpStringAttribute("pm.error",sanitizeString(outcome.error)));const payload={resourceSpans:[{resource:{attributes:[otlpStringAttribute("service.name",serviceName)]},scopeSpans:[{scope:{name:"pm-cli.telemetry",version:"1"},spans:[{traceId:activeCommand.otel_trace_id,spanId:activeCommand.otel_span_id,name:`pm.command.${sanitizeString(activeCommand.command)}`,kind:1,startTimeUnixNano:isoToUnixNano(activeCommand.started_at),endTimeUnixNano:isoToUnixNano(finishedAtIso),attributes,status:{code:outcome.ok?1:2,message:outcome.ok?"":sanitizeString(typeof outcome.error=="string"?outcome.error:"command_failed")}}]}]}]};return{endpoint,payload}}function summarizeResult(result,captureLevel="redacted"){if(result==null)return{type:"nullish"};if(typeof result=="string")return{type:"string",value:sanitizeString(result,captureLevel)};if(typeof result=="number"||typeof result=="boolean")return{type:typeof result,value:result};if(Array.isArray(result))return{type:"array",length:result.length,sample:result.slice(0,5).map(entry=>sanitizeValue(entry,void 0,captureLevel))};if(typeof result=="object"){const record=result,keys=Object.keys(record).filter(key=>key!=="tests").sort((left,right)=>left.localeCompare(right)),sanitized={};let previewBytes=0;for(const key of keys.slice(0,25)){const sanitizedValue=sanitizeValue(record[key],key,captureLevel);if(sanitizedValue===void 0)continue;const entrySize=JSON.stringify(sanitizedValue).length;if(previewBytes+entrySize>TELEMETRY_RESULT_PREVIEW_MAX_BYTES){sanitized[key]="[preview_truncated]";break}previewBytes+=entrySize,sanitized[key]=sanitizedValue}return{type:"object",key_count:keys.length,keys_preview:keys.slice(0,50),preview:sanitized}}return{type:typeof result,value:String(result)}}function buildCommandStartPayload(params){const{captureLevel,context,pmVersion,sourceContext,pmRootHash,cwdHash,installationId}=params,commandTaxonomy=deriveTelemetryCommandTaxonomy(context.command),hashedArgs=hashCommandArgs(installationId,context.args),commandInvocationDigest=hashWithInstallationId(installationId,`${context.command}\0${context.args.join("\0")}`),commandOptionsDigest=hashTelemetryValue(installationId,context.options),globalOptionsDigest=hashTelemetryValue(installationId,context.global),authorContextFields=buildAuthorContextPayloadFields(captureLevel,installationId);return captureLevel==="minimal"?{capture_level:captureLevel,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,command_args_digest:hashedArgs.digest,command_invocation_digest:commandInvocationDigest,command_options_digest:commandOptionsDigest,global_options_digest:globalOptionsDigest,...authorContextFields}:{pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,...authorContextFields,command_args:sanitizeCommandArgs(context.args,captureLevel),command_args_hashes:hashedArgs.hashes,command_args_digest:hashedArgs.digest,command_invocation_digest:commandInvocationDigest,command_options:sanitizeValue(context.options,void 0,captureLevel),command_options_digest:commandOptionsDigest,global_options:sanitizeValue(context.global,void 0,captureLevel),global_options_digest:globalOptionsDigest,pm_root_hash:pmRootHash,cwd_hash:cwdHash,capture_level:captureLevel,runtime:{node:process.version,platform:process.platform,arch:process.arch,hostname_hash:hashWithInstallationId(installationId,os.hostname()),stdin_tty:process.stdin.isTTY===!0,stdout_tty:process.stdout.isTTY===!0}}}function buildCommandFinishPayload(params){const{captureLevel,pmVersion,sourceContext,outcome,durationMs,startedAt,command,installationId,commandTaxonomy,exitCode,errorCode:errorCode2,errorCategory,commandResolution,resolutionStage}=params,errorFingerprint=outcome.ok===!1?hashTelemetryErrorFingerprint(installationId,command,errorCode2,outcome.error):void 0,authorContextFields=buildAuthorContextPayloadFields(captureLevel,installationId);return captureLevel==="minimal"?{capture_level:captureLevel,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,command_resolution:commandResolution,resolution_stage:resolutionStage,ok:outcome.ok,exit_code:exitCode,error_code:errorCode2,error_category:errorCategory,error:outcome.error?sanitizeString(outcome.error,"redacted"):void 0,error_fingerprint:errorFingerprint,duration_ms:durationMs,...authorContextFields}:{capture_level:captureLevel,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,command_resolution:commandResolution,resolution_stage:resolutionStage,...authorContextFields,ok:outcome.ok,exit_code:exitCode,error_code:errorCode2,error_category:errorCategory,error:outcome.error?sanitizeString(outcome.error,captureLevel):void 0,error_fingerprint:errorFingerprint,duration_ms:durationMs,started_at:startedAt,result_summary:summarizeResult(outcome.result,captureLevel)}}function buildCommandErrorPayload(params){const{captureLevel,pmVersion,sourceContext,command,commandTaxonomy,commandResolution,resolutionStage,args,options,pmRootHash,cwdHash,installationId,errorCode:errorCode2,errorMessage,errorCategory,exitCode}=params,attemptedArgHashes=hashCommandArgs(installationId,args),attemptedCommandDigest=hashWithInstallationId(installationId,command),attemptedOptionsDigest=hashTelemetryValue(installationId,options),errorFingerprint=hashTelemetryErrorFingerprint(installationId,command,errorCode2,errorMessage),authorContextFields=buildAuthorContextPayloadFields(captureLevel,installationId);return captureLevel==="minimal"?{capture_level:captureLevel,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,command_resolution:commandResolution,resolution_stage:resolutionStage,attempted_command_digest:attemptedCommandDigest,attempted_args_digest:attemptedArgHashes.digest,attempted_options_digest:attemptedOptionsDigest,error_code:errorCode2,error_category:errorCategory,exit_code:exitCode,error:sanitizeString(errorMessage,"redacted"),error_fingerprint:errorFingerprint,...authorContextFields}:{capture_level:captureLevel,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,command_taxonomy:commandTaxonomy,command_resolution:commandResolution,resolution_stage:resolutionStage,...authorContextFields,attempted_command:sanitizeString(command,captureLevel),attempted_command_digest:attemptedCommandDigest,attempted_args:sanitizeCommandArgs(args,captureLevel),attempted_args_hashes:attemptedArgHashes.hashes,attempted_args_digest:attemptedArgHashes.digest,attempted_options:sanitizeValue(options,void 0,captureLevel),attempted_options_digest:attemptedOptionsDigest,error_code:errorCode2,error_category:errorCategory,exit_code:exitCode,error:sanitizeString(errorMessage,captureLevel),error_fingerprint:errorFingerprint,pm_root_hash:pmRootHash,cwd_hash:cwdHash,runtime:{node:process.version,platform:process.platform,arch:process.arch,hostname_hash:hashWithInstallationId(installationId,os.hostname()),stdin_tty:process.stdin.isTTY===!0,stdout_tty:process.stdout.isTTY===!0}}}async function ensureInstallationId(globalPmRoot){const settings=await readSettings(globalPmRoot);if(!settings.telemetry.enabled||resolveTelemetryEnvironmentPolicy().telemetry_disabled)return null;if(settings.telemetry.installation_id.trim().length===0){if(isConfigurationOnlySettingsRead(globalPmRoot))return null;settings.telemetry.installation_id=crypto.randomUUID(),await writeSettings(globalPmRoot,settings,"telemetry:install_id")}return{installationId:settings.telemetry.installation_id,endpoint:settings.telemetry.endpoint,retentionDays:Math.max(1,Math.trunc(settings.telemetry.retention_days)),captureLevel:normalizeCaptureLevel(settings.telemetry.capture_level)}}async function appendTelemetryEvent(globalPmRoot,event){let serialized=JSON.stringify({client_schema_version:TELEMETRY_CLIENT_SCHEMA_VERSION,event,attempts:0});if(serialized.length>TELEMETRY_MAX_EVENT_BYTES){const trimmed={...event,payload:{...event.payload,result_summary:{truncated:!0,reason:"payload_size_exceeded",original_bytes:serialized.length}}};serialized=JSON.stringify({client_schema_version:TELEMETRY_CLIENT_SCHEMA_VERSION,event:trimmed,attempts:0})}await appendLineAtomic(queuePath(globalPmRoot),serialized)}async function enqueueTelemetryEvent(globalPmRoot,event){await withQueueMutation(()=>appendTelemetryEvent(globalPmRoot,event),globalPmRoot)}function parseQueueLines(raw){const entries=[];for(const line of raw.split(`
4
4
  `)){const trimmed=line.trim();if(trimmed.length!==0)try{const parsed=JSON.parse(trimmed);parsed&&typeof parsed=="object"&&parsed.event&&typeof parsed.event=="object"&&typeof parsed.attempts=="number"&&(parsed.client_schema_version===void 0||typeof parsed.client_schema_version=="number"&&Number.isFinite(parsed.client_schema_version))&&entries.push(parsed)}catch{}}return entries}function nextRetryIso(attempts){const delay=Math.min(TELEMETRY_RETRY_BASE_DELAY_MS*2**Math.max(attempts-1,0),TELEMETRY_MAX_RETRY_DELAY_MS);return new Date(Date.now()+delay).toISOString()}function isDueForRetryAt(nextAttemptAfter){if(typeof nextAttemptAfter!="string"||nextAttemptAfter.trim().length===0)return!0;const dueAtMs=Date.parse(nextAttemptAfter);return Number.isNaN(dueAtMs)?!0:dueAtMs<=Date.now()}function isDueForRetry(entry){return isDueForRetryAt(entry.next_attempt_after)}function retentionCutoffMs(retentionDays){const normalizedDays=Number.isFinite(retentionDays)?Math.max(1,Math.trunc(retentionDays)):1;return Date.now()-normalizedDays*MILLISECONDS_PER_DAY}function isExpiredQueueEntry(entry,cutoffMs){const occurredAt=entry.event?.occurred_at;if(typeof occurredAt!="string"||occurredAt.trim().length===0)return!1;const occurredAtMs=Date.parse(occurredAt);return Number.isNaN(occurredAtMs)?!1:occurredAtMs<cutoffMs}function pruneExpiredQueueEntries(entries,retentionDays){const cutoffMs=retentionCutoffMs(retentionDays),retained=[];let prunedCount=0;for(const entry of entries){if(JSON.stringify(entry).length>TELEMETRY_MAX_EVENT_BYTES||isExpiredQueueEntry(entry,cutoffMs)||entry.attempts>=TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS){prunedCount+=1;continue}retained.push(entry)}return{entries:retained,prunedCount}}async function rewriteQueue(globalPmRoot,entries){const serialized=entries.map(entry=>JSON.stringify(entry)).join(`
@@ -6,5 +6,5 @@
6
6
  `:"";for(let attempt=0;;attempt+=1)try{await writeFileAtomic(queuePath(globalPmRoot),contents,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])});return}catch(error){const retryDelay=TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS[attempt];if(retryDelay===void 0||!isRetryableQueueRewriteError(error))throw error;await sleep(retryDelay)}}function isRetryableQueueRewriteError(error){if(typeof error!="object"||error===null||!("code"in error))return!1;const code=error.code;return code==="EACCES"||code==="EBUSY"||code==="EPERM"}function sleep(milliseconds){return new Promise(resolve=>{setTimeout(resolve,milliseconds)})}async function appendPendingOtelSpan(globalPmRoot,request){const pending={id:crypto.randomUUID(),endpoint:request.endpoint,payload:request.payload,enqueued_at:nowIso(),attempts:0},serialized=JSON.stringify(pending);serialized.length>TELEMETRY_MAX_EVENT_BYTES||await appendLineAtomic(otelSpansQueuePath(globalPmRoot),serialized)}async function enqueuePendingOtelSpan(globalPmRoot,request){await withQueueMutation(()=>appendPendingOtelSpan(globalPmRoot,request),globalPmRoot)}function backfillPendingOtelSpanId(entry){const material=JSON.stringify([entry.endpoint,entry.enqueued_at,entry.payload]);return crypto.createHash("sha256").update(material).digest("hex").slice(0,32)}function parsePendingOtelSpanLines(raw){const entries=[];for(const line of raw.split(`
7
7
  `)){const trimmed=line.trim();if(trimmed.length!==0)try{const parsed=JSON.parse(trimmed);parsed&&typeof parsed=="object"&&typeof parsed.endpoint=="string"&&parsed.endpoint.trim().length>0&&"payload"in parsed&&typeof parsed.attempts=="number"&&Number.isFinite(parsed.attempts)&&((typeof parsed.id!="string"||parsed.id.length===0)&&(parsed.id=backfillPendingOtelSpanId(parsed)),entries.push(parsed))}catch{}}return entries}function isExpiredPendingOtelSpan(entry,cutoffMs){if(typeof entry.enqueued_at!="string"||entry.enqueued_at.trim().length===0)return!1;const enqueuedAtMs=Date.parse(entry.enqueued_at);return Number.isNaN(enqueuedAtMs)?!1:enqueuedAtMs<cutoffMs}function prunePendingOtelSpans(entries,retentionDays){const cutoffMs=retentionCutoffMs(retentionDays),retained=[];let prunedCount=0;for(const entry of entries){if(JSON.stringify(entry).length>TELEMETRY_MAX_EVENT_BYTES||isExpiredPendingOtelSpan(entry,cutoffMs)||entry.attempts>=TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS){prunedCount+=1;continue}retained.push(entry)}if(retained.length>TELEMETRY_OTEL_SPANS_MAX_PENDING){const overflow=retained.length-TELEMETRY_OTEL_SPANS_MAX_PENDING;return prunedCount+=overflow,{entries:retained.slice(overflow),prunedCount}}return{entries:retained,prunedCount}}async function rewritePendingOtelSpans(globalPmRoot,entries){const serialized=entries.map(entry=>JSON.stringify(entry)).join(`
8
8
  `),contents=serialized.length>0?`${serialized}
9
- `:"";for(let attempt=0;;attempt+=1)try{await writeFileAtomic(otelSpansQueuePath(globalPmRoot),contents,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])});return}catch(error){const retryDelay=TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS[attempt];if(retryDelay===void 0||!isRetryableQueueRewriteError(error))throw error;await sleep(retryDelay)}}async function reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,succeededIds,failedUpdates){return withQueueMutation(async()=>{const raw=await readFileIfExists(otelSpansQueuePath(globalPmRoot)),current=raw===null?[]:parsePendingOtelSpanLines(raw),reconciled=[];for(const entry of current){if(succeededIds.has(entry.id))continue;const failure=failedUpdates.get(entry.id);reconciled.push(failure?{...entry,attempts:failure.attempts,next_attempt_after:failure.next_attempt_after}:entry)}const{entries:retained}=prunePendingOtelSpans(reconciled,retentionDays);return await rewritePendingOtelSpans(globalPmRoot,retained),retained.length},globalPmRoot)}async function flushPendingOtelSpans(globalPmRoot,retentionDays){const raw=await readFileIfExists(otelSpansQueuePath(globalPmRoot));if(raw===null||raw.trim().length===0){await writeRuntimeState(globalPmRoot,{pending_otel_spans:0});return}const entries=parsePendingOtelSpanLines(raw),{entries:retained,prunedCount}=prunePendingOtelSpans(entries,retentionDays),due=retained.filter(entry=>isDueForRetryAt(entry.next_attempt_after)).slice(0,TELEMETRY_OTEL_SPANS_FLUSH_BATCH_SIZE);if(due.length===0){const remaining2=prunedCount>0?await reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,new Set,new Map):retained.length;await writeRuntimeState(globalPmRoot,{pending_otel_spans:remaining2});return}const attemptTime=nowIso(),succeededIds=new Set,failedUpdates=new Map;let succeededCount=0,lastError;await Promise.all(due.map(async span=>{try{const status=await postTelemetryJson(span.endpoint,{"content-type":"application/json"},JSON.stringify(span.payload));if(status<200||status>=300)throw new Error(`local_otel_export_http_${status}`);succeededIds.add(span.id),succeededCount+=1}catch(error){lastError=error instanceof Error?sanitizeString(error.message,"redacted"):"local_otel_export_failed";const nextAttempts=span.attempts+1;failedUpdates.set(span.id,{attempts:nextAttempts,next_attempt_after:nextRetryIso(nextAttempts)})}}));const remaining=await reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,succeededIds,failedUpdates),statePatch={pending_otel_spans:remaining,last_otel_attempt_at:attemptTime};succeededCount>0&&(statePatch.last_otel_success_at=attemptTime),lastError!==void 0?(statePatch.last_otel_failure_at=attemptTime,statePatch.last_otel_failure_error=lastError):remaining===0&&(statePatch.last_otel_failure_at=void 0,statePatch.last_otel_failure_error=void 0),await writeRuntimeState(globalPmRoot,statePatch)}async function flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays){try{await flushQueue(globalPmRoot,endpoint,retentionDays)}catch{}try{await flushPendingOtelSpans(globalPmRoot,retentionDays)}catch{}}async function cleanupTelemetryQueueTempOrphans(globalPmRoot,maxAgeMs=TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS){try{const dirPath=telemetryRuntimeDirectory(globalPmRoot),entries=await readdir(dirPath,{withFileTypes:!0}),cutoffMs=Date.now()-Math.max(0,maxAgeMs);await Promise.all(entries.filter(entry=>entry.isFile()&&/^\.events\.jsonl\.\d+\.\d+\.[a-f0-9]+\.tmp$/.test(entry.name)).map(async entry=>{const candidate=path.join(dirPath,entry.name);(await stat(candidate)).mtimeMs<cutoffMs&&await rm(candidate,{force:!0})}))}catch{}}async function withQueueMutation(operation,globalPmRoot=resolveGlobalPmRoot(process.cwd()),waitMs=5e3){const run=_queueMutationPromise.catch(()=>{}).then(()=>runWithIsolatedExtensionRuntime(async()=>{const release=await acquireLock(globalPmRoot,"telemetry-queue",60,"telemetry",!1,!1,waitMs,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])});try{return clearSettingsReadCache(globalPmRoot),await operation()}finally{await release()}}));return _queueMutationPromise=run.catch(()=>{}),run}async function readCurrentQueueEntries(globalPmRoot){const raw=await readFileIfExists(queuePath(globalPmRoot));return raw===null||raw.trim().length===0?[]:parseQueueLines(raw)}async function removeFlushedEntriesFromCurrentQueue(globalPmRoot,flushedIds,retentionDays){return withQueueMutation(async()=>{const currentEntries=await readCurrentQueueEntries(globalPmRoot),{entries:retainedEntries}=pruneExpiredQueueEntries(currentEntries,retentionDays),remaining=retainedEntries.filter(entry=>!flushedIds.has(entry.event.event_id));return await rewriteQueue(globalPmRoot,remaining),remaining},globalPmRoot)}async function markFailedEntriesInCurrentQueue(globalPmRoot,failedIds,attemptTime,retentionDays){return withQueueMutation(async()=>{const currentEntries=await readCurrentQueueEntries(globalPmRoot),{entries:retainedEntries}=pruneExpiredQueueEntries(currentEntries,retentionDays),retried=retainedEntries.map(entry=>{if(!failedIds.has(entry.event.event_id))return entry;const attempts=entry.attempts+1;return{...entry,attempts,last_attempt_at:attemptTime,next_attempt_after:nextRetryIso(attempts)}});return await rewriteQueue(globalPmRoot,retried),retried},globalPmRoot)}async function flushQueue(globalPmRoot,endpoint,retentionDays){await cleanupTelemetryQueueTempOrphans(globalPmRoot);const normalizedEndpoint=endpoint.trim();if(normalizedEndpoint.length===0)return;const raw=await readFileIfExists(queuePath(globalPmRoot));if(raw===null||raw.trim().length===0){await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:0});return}const queueEntries=parseQueueLines(raw);if(queueEntries.length===0){await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:0});return}const{entries:retainedEntries,prunedCount}=pruneExpiredQueueEntries(queueEntries,retentionDays);if(retainedEntries.length===0){const remaining=await removeFlushedEntriesFromCurrentQueue(globalPmRoot,new Set,retentionDays);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length});return}const dueEntries=retainedEntries.filter(entry=>isDueForRetry(entry)).slice(0,TELEMETRY_FLUSH_BATCH_SIZE);if(dueEntries.length===0){const remaining=prunedCount>0?await removeFlushedEntriesFromCurrentQueue(globalPmRoot,new Set,retentionDays):retainedEntries;await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length});return}const dueIds=new Set(dueEntries.map(entry=>entry.event.event_id)),attemptTime=nowIso(),requestHeaders={"content-type":"application/json"},ingestKey=process.env.PM_TELEMETRY_INGEST_KEY?.trim();ingestKey&&(requestHeaders["x-pm-telemetry-key"]=ingestKey);try{const status=await postTelemetryJson(normalizedEndpoint,requestHeaders,JSON.stringify({schema_version:TELEMETRY_SCHEMA_VERSION,events:dueEntries.map(entry=>entry.event)}));if(status<200||status>=300)throw new Error(`telemetry_flush_http_${status}`)}catch(error){const retried=await markFailedEntriesInCurrentQueue(globalPmRoot,dueIds,attemptTime,retentionDays),errorMessage=error instanceof Error?sanitizeString(error.message,"redacted"):"telemetry_flush_failed";await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:retried.length,last_attempted_flush_at:attemptTime,last_failed_flush_at:attemptTime,last_failed_flush_error:errorMessage});return}try{const remaining=await removeFlushedEntriesFromCurrentQueue(globalPmRoot,dueIds,retentionDays);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length,last_attempted_flush_at:attemptTime,last_successful_flush_at:attemptTime,last_failed_flush_at:void 0,last_failed_flush_error:void 0})}catch(error){const errorMessage=error instanceof Error?sanitizeString(error.message,"redacted"):"telemetry_flush_failed",currentEntries=await readCurrentQueueEntries(globalPmRoot).catch(()=>retainedEntries);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:currentEntries.length,last_attempted_flush_at:attemptTime,last_failed_flush_at:attemptTime,last_failed_flush_error:errorMessage})}}async function acquireTelemetryFlushLock(globalPmRoot){const lockPath=flushLockPath(globalPmRoot);parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])||await mkdir(path.dirname(lockPath),{recursive:!0});try{return await mkdir(lockPath),!0}catch(error){if(typeof error!="object"||error===null||!("code"in error)||error.code!=="EEXIST")throw error}try{const lockStats=await stat(lockPath);return Date.now()-lockStats.mtimeMs<TELEMETRY_FLUSH_LOCK_STALE_MS?!1:(await rm(lockPath,{recursive:!0,force:!0}),await mkdir(lockPath),!0)}catch{return!1}}function isFreshDirectoryLock(lockPath,staleMs){try{return Date.now()-statSync(lockPath).mtimeMs<staleMs}catch{return!1}}function removeDirectoryLockBestEffort(lockPath){try{rmSync(lockPath,{recursive:!0,force:!0})}catch{}}function errorCode(error){if(typeof error!="object"||error===null||!("code"in error))return;const code=error.code;return typeof code=="string"?code:void 0}function createDirectoryLock(lockPath){try{return mkdirSync(lockPath),!0}catch(error){if(errorCode(error)==="EEXIST"||!isFileMissingError(error))return!1}try{return mkdirSync(path.dirname(lockPath),{recursive:!0}),mkdirSync(lockPath),!0}catch{return!1}}function acquireTelemetryFlushSpawnGate(globalPmRoot){if(isFreshDirectoryLock(flushLockPath(globalPmRoot),TELEMETRY_FLUSH_LOCK_STALE_MS))return!1;const lockPath=flushSpawnLockPath(globalPmRoot);try{if(Date.now()-statSync(lockPath).mtimeMs<TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS)return!1;removeDirectoryLockBestEffort(lockPath)}catch(error){if(!isFileMissingError(error))return!1}return createDirectoryLock(lockPath)}function releaseTelemetryFlushSpawnGate(globalPmRoot){removeDirectoryLockBestEffort(flushSpawnLockPath(globalPmRoot))}const _testOnly={acquireTelemetryFlushSpawnGate,acquireTelemetryFlushLock,buildAuthorContextPayloadFields,buildCommandErrorPayload,buildCommandFinishPayload,buildCommandStartPayload,buildOtelSpanRequest,createDirectoryLock,enqueuePendingOtelSpan,enqueueTelemetryEvent,errorCode,flushPendingOtelSpans,flushQueue,flushQueueWithProcessLock,flushTelemetryArtifacts,hashTelemetryErrorFingerprint,hashTelemetryValue,isEmailDomainCharacter,isEmailLocalCharacter,isExpiredPendingOtelSpan,isExpiredQueueEntry,isFreshDirectoryLock,isDueForRetry,isDueForRetryAt,isRetryableQueueRewriteError,looksLikeEmailToken,otelSpansQueuePath,parseBooleanTrueLike,postTelemetryJson,parsePendingOtelSpanLines,prunePendingOtelSpans,reconcilePendingOtelSpansAfterFlush,retentionCutoffMs,resolveOtelTracesEndpoint,resolveTelemetryHttpTimeoutMs,rewritePendingOtelSpans,normalizeForHash,normalizeCaptureLevel,normalizePmVersion,normalizeTelemetryErrorCategory,normalizeTelemetryErrorCode,normalizeTelemetryExitCode,parseQueueLines,pruneExpiredQueueEntries,readRuntimeState,readCurrentQueueEntries,releaseTelemetryFlushSpawnGate,removeFlushedEntriesFromCurrentQueue,removeDirectoryLockBestEffort,resolveTelemetrySourceContext,rewriteQueue,sanitizeCommandArgs,sanitizeStringMax,sanitizeStringRedacted,sanitizeValue,scheduleTelemetryFlush,shouldFlushInline,sleep,summarizeResult,telemetryFlushRunnerPath,withQueueMutation,flushLockPath,flushSpawnLockPath,runtimeStatePath,writeRuntimeState};async function flushQueueWithProcessLock(globalPmRoot,endpoint,retentionDays){const acquired=await acquireTelemetryFlushLock(globalPmRoot);if(releaseTelemetryFlushSpawnGate(globalPmRoot),!!acquired)try{await flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays)}finally{try{await rm(flushLockPath(globalPmRoot),{recursive:!0,force:!0})}catch{}}}function scheduleTelemetryFlush(globalPmRoot,endpoint,retentionDays){if(!isConfigurationOnlySettingsRead(globalPmRoot)){if(shouldFlushInline()){const previousFlush=_lastFlushPromise,nextFlush=flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays);_lastFlushPromise=Promise.allSettled([previousFlush,nextFlush]).then(()=>{});return}try{if(!acquireTelemetryFlushSpawnGate(globalPmRoot))return;const child=spawn(process.execPath,[telemetryFlushRunnerPath()],{detached:!0,stdio:"ignore",cwd:os.tmpdir(),env:{...process.env,PM_GLOBAL_PATH:globalPmRoot,[PM_TELEMETRY_FLUSH_CHILD_ENV]:"1"}});child.on("error",()=>{releaseTelemetryFlushSpawnGate(globalPmRoot)}),child.unref()}catch{releaseTelemetryFlushSpawnGate(globalPmRoot)}}}async function flushTelemetryQueueNow(globalPmRoot=resolveGlobalPmRoot(process.cwd())){if(!resolveTelemetryEnvironmentPolicy().telemetry_disabled)try{await runWithConfigurationOnlySettings(globalPmRoot,async()=>{if(!(await readSettings(globalPmRoot)).telemetry.enabled)return;const installation=await withQueueMutation(()=>ensureInstallationId(globalPmRoot),globalPmRoot);installation&&await flushQueueWithProcessLock(globalPmRoot,installation.endpoint,installation.retentionDays)},()=>parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV]))}catch{}}async function startTelemetryCommand(context){if(resolveTelemetryEnvironmentPolicy().telemetry_disabled||context.command==="telemetry"&&context.args.some(token=>token.trim().toLowerCase()==="clear"))return null;try{const globalPmRoot=resolveGlobalPmRoot(process.cwd());if(!(await readSettings(globalPmRoot)).telemetry.enabled)return null;const coreReadOwned=context.global.noExtensions===!0||isActiveCommandUnextended(context.command),activeCommand=await withQueueMutation(async()=>{const installation=await ensureInstallationId(globalPmRoot);if(!installation)return null;const{installationId,endpoint,retentionDays,captureLevel}=installation,pmVersion=normalizePmVersion(context.pm_version),sourceContext=resolveTelemetrySourceContext(context.global),pmRootHash=hashWithInstallationId(installationId,context.pm_root),cwdHash=hashWithInstallationId(installationId,process.cwd()),otelTracesEndpoint=resolveOtelTracesEndpoint(),occurredAt=nowIso(),event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_start",occurred_at:occurredAt,installation_id:installationId,session_id:PROCESS_SESSION_ID,command:context.command,payload:buildCommandStartPayload({captureLevel,context,pmVersion,sourceContext,pmRootHash,cwdHash,installationId})},sampleRate=await resolveAutomaticReadSampleRate(globalPmRoot,context.command,coreReadOwned);sampleRate===1&&await appendTelemetryEvent(globalPmRoot,event);const commandTaxonomy=deriveTelemetryCommandTaxonomy(context.command),active={...sampleRate<1?{sample_rate:sampleRate}:{},started_at:occurredAt,started_at_ms:Date.now(),command:context.command,command_taxonomy:commandTaxonomy,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,installation_id:installationId,pm_root_hash:pmRootHash,cwd_hash:cwdHash,endpoint,retention_days:retentionDays,global_pm_root:globalPmRoot,capture_level:captureLevel,otel_traces_endpoint:otelTracesEndpoint??void 0,otel_trace_id:otelTracesEndpoint?crypto.randomBytes(16).toString("hex"):void 0,otel_span_id:otelTracesEndpoint?crypto.randomBytes(8).toString("hex"):void 0};return sampleRate<1&&deferredReadStarts.set(active,event),active},globalPmRoot,TELEMETRY_FOREGROUND_LOCK_WAIT_MS);return activeCommand&&activeCommand.sample_rate===void 0&&scheduleTelemetryFlush(globalPmRoot,activeCommand.endpoint,activeCommand.retention_days),activeCommand}catch{return null}}async function finishTelemetryCommand(activeCommand,outcome){if(!(!activeCommand||resolveTelemetryEnvironmentPolicy().telemetry_disabled))try{if(!await withQueueMutation(async()=>{const settings=await readSettings(activeCommand.global_pm_root);if(resolveTelemetryEnvironmentPolicy().telemetry_disabled||!settings.telemetry.enabled||settings.telemetry.installation_id!==activeCommand.installation_id)return deferredReadStarts.delete(activeCommand),!1;const deferredStart=deferredReadStarts.get(activeCommand),sampleRate=outcome.ok?activeCommand.sample_rate??1:1;if(deferredStart){if(deferredReadStarts.delete(activeCommand),crypto.randomBytes(6).readUIntBE(0,6)/281474976710656>=sampleRate)return!1;deferredStart.payload.sample_rate=sampleRate,await appendTelemetryEvent(activeCommand.global_pm_root,deferredStart)}const finishedAt=nowIso(),durationMs=Math.max(0,Date.now()-activeCommand.started_at_ms),normalizedErrorCode=normalizeTelemetryErrorCode(inferTelemetryErrorCode({ok:outcome.ok,errorCode:outcome.error_code,errorMessage:outcome.error,exitCode:outcome.exit_code})),normalizedErrorCategory=normalizeTelemetryErrorCategory({ok:outcome.ok,errorCode:normalizedErrorCode,errorCategory:outcome.error_category}),normalizedExitCode=normalizeTelemetryExitCode(outcome.exit_code,outcome.ok),commandResolution=outcome.command_resolution??deriveTelemetryCommandResolution({ok:outcome.ok,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory}),resolutionStage=outcome.resolution_stage??"execute",event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_finish",occurred_at:finishedAt,installation_id:activeCommand.installation_id,session_id:PROCESS_SESSION_ID,command:activeCommand.command,payload:{...deferredStart?{sample_rate:sampleRate}:{},...buildCommandFinishPayload({captureLevel:activeCommand.capture_level,pmVersion:activeCommand.pm_version,sourceContext:{source_context:activeCommand.source_context,source_context_source:activeCommand.source_context_source},outcome,durationMs,startedAt:activeCommand.started_at,command:activeCommand.command,installationId:activeCommand.installation_id,commandTaxonomy:activeCommand.command_taxonomy,exitCode:normalizedExitCode,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory,commandResolution,resolutionStage})}};await appendTelemetryEvent(activeCommand.global_pm_root,event);const otelRequest=buildOtelSpanRequest(activeCommand,{...outcome,exit_code:normalizedExitCode,error_code:normalizedErrorCode,error_category:normalizedErrorCategory},finishedAt,durationMs,sampleRate);return otelRequest&&await appendPendingOtelSpan(activeCommand.global_pm_root,otelRequest),!0},activeCommand.global_pm_root,TELEMETRY_FOREGROUND_LOCK_WAIT_MS))return;scheduleTelemetryFlush(activeCommand.global_pm_root,activeCommand.endpoint,activeCommand.retention_days)}catch{}}async function emitTelemetryErrorEvent(context){if(!resolveTelemetryEnvironmentPolicy().telemetry_disabled)try{const globalPmRoot=resolveGlobalPmRoot(process.cwd());if(!(await readSettings(globalPmRoot)).telemetry.enabled)return;const captured=await withQueueMutation(async()=>{const installation=await ensureInstallationId(globalPmRoot);if(!installation)return null;const{installationId,captureLevel}=installation,pmVersion=normalizePmVersion(context.pm_version),sourceContext=resolveTelemetrySourceContext(context.global),pmRootHash=hashWithInstallationId(installationId,context.pm_root),cwdHash=hashWithInstallationId(installationId,process.cwd()),occurredAt=nowIso(),normalizedErrorCode=normalizeTelemetryErrorCode(inferTelemetryErrorCode({ok:!1,errorCode:context.error_code,errorMessage:context.error_message,exitCode:context.exit_code})),normalizedErrorCategory=context.error_category??resolveTelemetryErrorCategory(normalizedErrorCode),normalizedExitCode=normalizeTelemetryExitCode(context.exit_code,!1),normalizedCommand=context.command.trim().length>0?context.command:"<unknown>",commandTaxonomy=deriveTelemetryCommandTaxonomy(normalizedCommand),commandResolution=context.command_resolution??deriveTelemetryCommandResolution({ok:!1,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory}),resolutionStage=context.resolution_stage??"unknown",event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_error",occurred_at:occurredAt,installation_id:installationId,session_id:PROCESS_SESSION_ID,command:sanitizeString(normalizedCommand,"redacted"),payload:buildCommandErrorPayload({captureLevel,pmVersion,sourceContext,command:normalizedCommand,commandTaxonomy,commandResolution,resolutionStage,args:context.args,options:context.options,pmRootHash,cwdHash,installationId,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory,exitCode:normalizedExitCode,errorMessage:context.error_message})};return await appendTelemetryEvent(globalPmRoot,event),installation},globalPmRoot,TELEMETRY_FOREGROUND_LOCK_WAIT_MS);captured&&scheduleTelemetryFlush(globalPmRoot,captured.endpoint,captured.retentionDays)}catch{}}export{PM_TELEMETRY_SOURCE_CONTEXT_VALUES2 as PM_TELEMETRY_SOURCE_CONTEXT_VALUES,TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,TELEMETRY_SCHEMA_VERSION,_testOnly,emitTelemetryErrorEvent,finishTelemetryCommand,flushTelemetryQueueNow,startTelemetryCommand,waitForPendingFlush,withQueueMutation as withTelemetryQueueMutation};
9
+ `:"";for(let attempt=0;;attempt+=1)try{await writeFileAtomic(otelSpansQueuePath(globalPmRoot),contents,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])});return}catch(error){const retryDelay=TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS[attempt];if(retryDelay===void 0||!isRetryableQueueRewriteError(error))throw error;await sleep(retryDelay)}}async function reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,succeededIds,failedUpdates){return withQueueMutation(async()=>{const raw=await readFileIfExists(otelSpansQueuePath(globalPmRoot)),current=raw===null?[]:parsePendingOtelSpanLines(raw),reconciled=[];for(const entry of current){if(succeededIds.has(entry.id))continue;const failure=failedUpdates.get(entry.id);reconciled.push(failure?{...entry,attempts:failure.attempts,next_attempt_after:failure.next_attempt_after}:entry)}const{entries:retained}=prunePendingOtelSpans(reconciled,retentionDays);return await rewritePendingOtelSpans(globalPmRoot,retained),retained.length},globalPmRoot)}async function flushPendingOtelSpans(globalPmRoot,retentionDays){const raw=await readFileIfExists(otelSpansQueuePath(globalPmRoot));if(raw===null||raw.trim().length===0){await writeRuntimeState(globalPmRoot,{pending_otel_spans:0});return}const entries=parsePendingOtelSpanLines(raw),{entries:retained,prunedCount}=prunePendingOtelSpans(entries,retentionDays),due=retained.filter(entry=>isDueForRetryAt(entry.next_attempt_after)).slice(0,TELEMETRY_OTEL_SPANS_FLUSH_BATCH_SIZE);if(due.length===0){const remaining2=prunedCount>0?await reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,new Set,new Map):retained.length;await writeRuntimeState(globalPmRoot,{pending_otel_spans:remaining2});return}const attemptTime=nowIso(),succeededIds=new Set,failedUpdates=new Map;let succeededCount=0,lastError;await Promise.all(due.map(async span=>{try{const status=await postTelemetryJson(span.endpoint,{"content-type":"application/json"},JSON.stringify(span.payload));if(status<200||status>=300)throw new Error(`local_otel_export_http_${status}`);succeededIds.add(span.id),succeededCount+=1}catch(error){lastError=error instanceof Error?sanitizeString(error.message,"redacted"):"local_otel_export_failed";const nextAttempts=span.attempts+1;failedUpdates.set(span.id,{attempts:nextAttempts,next_attempt_after:nextRetryIso(nextAttempts)})}}));const remaining=await reconcilePendingOtelSpansAfterFlush(globalPmRoot,retentionDays,succeededIds,failedUpdates),statePatch={pending_otel_spans:remaining,last_otel_attempt_at:attemptTime};succeededCount>0&&(statePatch.last_otel_success_at=attemptTime),lastError!==void 0?(statePatch.last_otel_failure_at=attemptTime,statePatch.last_otel_failure_error=lastError):remaining===0&&(statePatch.last_otel_failure_at=void 0,statePatch.last_otel_failure_error=void 0),await writeRuntimeState(globalPmRoot,statePatch)}async function flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays){try{await flushQueue(globalPmRoot,endpoint,retentionDays)}catch{}try{await flushPendingOtelSpans(globalPmRoot,retentionDays)}catch{}}async function cleanupTelemetryQueueTempOrphans(globalPmRoot,maxAgeMs=TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS){try{const dirPath=telemetryRuntimeDirectory(globalPmRoot),entries=await readdir(dirPath,{withFileTypes:!0}),cutoffMs=Date.now()-Math.max(0,maxAgeMs);await Promise.all(entries.filter(entry=>entry.isFile()&&/^\.events\.jsonl\.\d+\.\d+\.[a-f0-9]+\.tmp$/.test(entry.name)).map(async entry=>{const candidate=path.join(dirPath,entry.name);(await stat(candidate)).mtimeMs<cutoffMs&&await rm(candidate,{force:!0})}))}catch{}}async function withQueueMutation(operation,globalPmRoot=resolveGlobalPmRoot(process.cwd()),waitMs=5e3){const run=_queueMutationPromise.catch(()=>{}).then(()=>runWithIsolatedExtensionRuntime(async()=>{const release=await acquireLock(globalPmRoot,"telemetry-queue",60,"telemetry",!1,!1,waitMs,{createParentDirectories:!parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])});try{return clearSettingsReadCache(globalPmRoot),await operation()}finally{await release()}}));return _queueMutationPromise=run.catch(()=>{}),run}async function readCurrentQueueEntries(globalPmRoot){const raw=await readFileIfExists(queuePath(globalPmRoot));return raw===null||raw.trim().length===0?[]:parseQueueLines(raw)}async function removeFlushedEntriesFromCurrentQueue(globalPmRoot,flushedIds,retentionDays){return withQueueMutation(async()=>{const currentEntries=await readCurrentQueueEntries(globalPmRoot),{entries:retainedEntries}=pruneExpiredQueueEntries(currentEntries,retentionDays),remaining=retainedEntries.filter(entry=>!flushedIds.has(entry.event.event_id));return await rewriteQueue(globalPmRoot,remaining),remaining},globalPmRoot)}async function markFailedEntriesInCurrentQueue(globalPmRoot,failedIds,attemptTime,retentionDays){return withQueueMutation(async()=>{const currentEntries=await readCurrentQueueEntries(globalPmRoot),{entries:retainedEntries}=pruneExpiredQueueEntries(currentEntries,retentionDays),retried=retainedEntries.map(entry=>{if(!failedIds.has(entry.event.event_id))return entry;const attempts=entry.attempts+1;return{...entry,attempts,last_attempt_at:attemptTime,next_attempt_after:nextRetryIso(attempts)}});return await rewriteQueue(globalPmRoot,retried),retried},globalPmRoot)}async function flushQueue(globalPmRoot,endpoint,retentionDays){await cleanupTelemetryQueueTempOrphans(globalPmRoot);const normalizedEndpoint=endpoint.trim();if(normalizedEndpoint.length===0)return;const raw=await readFileIfExists(queuePath(globalPmRoot));if(raw===null||raw.trim().length===0){await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:0});return}const queueEntries=parseQueueLines(raw);if(queueEntries.length===0){await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:0});return}const{entries:retainedEntries,prunedCount}=pruneExpiredQueueEntries(queueEntries,retentionDays);if(retainedEntries.length===0){const remaining=await removeFlushedEntriesFromCurrentQueue(globalPmRoot,new Set,retentionDays);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length});return}const dueEntries=retainedEntries.filter(entry=>isDueForRetry(entry)).slice(0,TELEMETRY_FLUSH_BATCH_SIZE);if(dueEntries.length===0){const remaining=prunedCount>0?await removeFlushedEntriesFromCurrentQueue(globalPmRoot,new Set,retentionDays):retainedEntries;await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length});return}const dueIds=new Set(dueEntries.map(entry=>entry.event.event_id)),attemptTime=nowIso(),requestHeaders={"content-type":"application/json"},ingestKey=process.env.PM_TELEMETRY_INGEST_KEY?.trim();ingestKey&&(requestHeaders["x-pm-telemetry-key"]=ingestKey);try{const status=await postTelemetryJson(normalizedEndpoint,requestHeaders,JSON.stringify({schema_version:TELEMETRY_SCHEMA_VERSION,events:dueEntries.map(entry=>entry.event)}));if(status<200||status>=300)throw new Error(`telemetry_flush_http_${status}`)}catch(error){const retried=await markFailedEntriesInCurrentQueue(globalPmRoot,dueIds,attemptTime,retentionDays),errorMessage=error instanceof Error?sanitizeString(error.message,"redacted"):"telemetry_flush_failed";await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:retried.length,last_attempted_flush_at:attemptTime,last_failed_flush_at:attemptTime,last_failed_flush_error:errorMessage});return}try{const remaining=await removeFlushedEntriesFromCurrentQueue(globalPmRoot,dueIds,retentionDays);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:remaining.length,last_attempted_flush_at:attemptTime,last_successful_flush_at:attemptTime,last_failed_flush_at:void 0,last_failed_flush_error:void 0})}catch(error){const errorMessage=error instanceof Error?sanitizeString(error.message,"redacted"):"telemetry_flush_failed",currentEntries=await readCurrentQueueEntries(globalPmRoot).catch(()=>retainedEntries);await writeRuntimeState(globalPmRoot,{endpoint:normalizedEndpoint,queue_entries:currentEntries.length,last_attempted_flush_at:attemptTime,last_failed_flush_at:attemptTime,last_failed_flush_error:errorMessage})}}async function acquireTelemetryFlushLock(globalPmRoot){const lockPath=flushLockPath(globalPmRoot);parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])||await mkdir(path.dirname(lockPath),{recursive:!0});try{return await mkdir(lockPath),!0}catch(error){if(typeof error!="object"||error===null||!("code"in error)||error.code!=="EEXIST")throw error}try{const lockStats=await stat(lockPath);return Date.now()-lockStats.mtimeMs<TELEMETRY_FLUSH_LOCK_STALE_MS?!1:(await rm(lockPath,{recursive:!0,force:!0}),await mkdir(lockPath),!0)}catch{return!1}}function isFreshDirectoryLock(lockPath,staleMs){try{return Date.now()-statSync(lockPath).mtimeMs<staleMs}catch{return!1}}function removeDirectoryLockBestEffort(lockPath){try{rmSync(lockPath,{recursive:!0,force:!0})}catch{}}function errorCode(error){if(typeof error!="object"||error===null||!("code"in error))return;const code=error.code;return typeof code=="string"?code:void 0}function createDirectoryLock(lockPath){try{return mkdirSync(lockPath),!0}catch(error){if(errorCode(error)==="EEXIST"||!isFileMissingError(error))return!1}try{return mkdirSync(path.dirname(lockPath),{recursive:!0}),mkdirSync(lockPath),!0}catch{return!1}}function acquireTelemetryFlushSpawnGate(globalPmRoot){if(isFreshDirectoryLock(flushLockPath(globalPmRoot),TELEMETRY_FLUSH_LOCK_STALE_MS))return!1;const lockPath=flushSpawnLockPath(globalPmRoot);try{if(Date.now()-statSync(lockPath).mtimeMs<TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS)return!1;removeDirectoryLockBestEffort(lockPath)}catch(error){if(!isFileMissingError(error))return!1}return createDirectoryLock(lockPath)}function releaseTelemetryFlushSpawnGate(globalPmRoot){removeDirectoryLockBestEffort(flushSpawnLockPath(globalPmRoot))}const _testOnly={acquireTelemetryFlushSpawnGate,acquireTelemetryFlushLock,buildAuthorContextPayloadFields,buildCommandErrorPayload,buildCommandFinishPayload,buildCommandStartPayload,buildOtelSpanRequest,createDirectoryLock,enqueuePendingOtelSpan,enqueueTelemetryEvent,errorCode,flushPendingOtelSpans,flushQueue,flushQueueWithProcessLock,flushTelemetryArtifacts,hashTelemetryErrorFingerprint,hashTelemetryValue,isEmailDomainCharacter,isEmailLocalCharacter,isExpiredPendingOtelSpan,isExpiredQueueEntry,isFreshDirectoryLock,isDueForRetry,isDueForRetryAt,isRetryableQueueRewriteError,looksLikeEmailToken,otelSpansQueuePath,parseBooleanTrueLike,postTelemetryJson,parsePendingOtelSpanLines,prunePendingOtelSpans,reconcilePendingOtelSpansAfterFlush,retentionCutoffMs,resolveOtelTracesEndpoint,resolveTelemetryHttpTimeoutMs,rewritePendingOtelSpans,normalizeForHash,normalizeCaptureLevel,normalizePmVersion,normalizeTelemetryErrorCategory,normalizeTelemetryErrorCode,normalizeTelemetryExitCode,parseQueueLines,pruneExpiredQueueEntries,readRuntimeState,readCurrentQueueEntries,releaseTelemetryFlushSpawnGate,removeFlushedEntriesFromCurrentQueue,removeDirectoryLockBestEffort,resolveTelemetrySourceContext,rewriteQueue,sanitizeCommandArgs,sanitizeStringMax,sanitizeStringRedacted,sanitizeValue,scheduleTelemetryFlush,shouldFlushInline,sleep,summarizeResult,telemetryFlushRunnerPath,withQueueMutation,flushLockPath,flushSpawnLockPath,runtimeStatePath,writeRuntimeState};async function flushQueueWithProcessLock(globalPmRoot,endpoint,retentionDays){const acquired=await acquireTelemetryFlushLock(globalPmRoot);if(releaseTelemetryFlushSpawnGate(globalPmRoot),!acquired)return!1;try{await flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays)}finally{try{await rm(flushLockPath(globalPmRoot),{recursive:!0,force:!0})}catch{}}return!0}async function dueTelemetryArtifactIds(globalPmRoot,retentionDays){const ids=new Set;try{const{entries}=pruneExpiredQueueEntries(await readCurrentQueueEntries(globalPmRoot),retentionDays);for(const entry of entries.filter(isDueForRetry))ids.add(`event:${entry.event.event_id}`)}catch{}try{const raw=await readFileIfExists(otelSpansQueuePath(globalPmRoot));if(raw!==null)for(const entry of prunePendingOtelSpans(parsePendingOtelSpanLines(raw),retentionDays).entries)isDueForRetryAt(entry.next_attempt_after)&&ids.add(`span:${entry.id}`)}catch{}return ids}function scheduleTelemetryFlush(globalPmRoot,endpoint,retentionDays){if(!isConfigurationOnlySettingsRead(globalPmRoot)){if(shouldFlushInline()){const previousFlush=_lastFlushPromise,nextFlush=flushTelemetryArtifacts(globalPmRoot,endpoint,retentionDays);_lastFlushPromise=Promise.allSettled([previousFlush,nextFlush]).then(()=>{});return}try{if(!acquireTelemetryFlushSpawnGate(globalPmRoot))return;const child=spawn(process.execPath,[telemetryFlushRunnerPath()],{detached:!0,stdio:"ignore",cwd:os.tmpdir(),env:{...process.env,PM_GLOBAL_PATH:globalPmRoot,[PM_TELEMETRY_FLUSH_CHILD_ENV]:"1"}});child.on("error",()=>{releaseTelemetryFlushSpawnGate(globalPmRoot)}),child.unref()}catch{releaseTelemetryFlushSpawnGate(globalPmRoot)}}}async function flushTelemetryQueueNow(globalPmRoot=resolveGlobalPmRoot(process.cwd())){if(!resolveTelemetryEnvironmentPolicy().telemetry_disabled)try{await runWithConfigurationOnlySettings(globalPmRoot,async()=>{const detached=parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV]);let continueDraining=!0;for(;continueDraining;){if(!(await readSettings(globalPmRoot)).telemetry.enabled)return;const installation=await withQueueMutation(()=>ensureInstallationId(globalPmRoot),globalPmRoot);if(!installation)return;const before=detached?await dueTelemetryArtifactIds(globalPmRoot,installation.retentionDays):new Set;if(!await flushQueueWithProcessLock(globalPmRoot,installation.endpoint,installation.retentionDays)||!detached)return;const after=await dueTelemetryArtifactIds(globalPmRoot,installation.retentionDays);continueDraining=after.size>0&&(after.size!==before.size||[...after].some(id=>!before.has(id)))}},()=>parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV]))}catch{}}async function startTelemetryCommand(context){if(resolveTelemetryEnvironmentPolicy().telemetry_disabled||context.command==="telemetry"&&context.args.some(token=>token.trim().toLowerCase()==="clear"))return null;try{const globalPmRoot=resolveGlobalPmRoot(process.cwd());if(!(await readSettings(globalPmRoot)).telemetry.enabled)return null;const coreReadOwned=context.global.noExtensions===!0||isActiveCommandUnextended(context.command),activeCommand=await withQueueMutation(async()=>{const installation=await ensureInstallationId(globalPmRoot);if(!installation)return null;const{installationId,endpoint,retentionDays,captureLevel}=installation,pmVersion=normalizePmVersion(context.pm_version),sourceContext=resolveTelemetrySourceContext(context.global),pmRootHash=hashWithInstallationId(installationId,context.pm_root),cwdHash=hashWithInstallationId(installationId,process.cwd()),otelTracesEndpoint=resolveOtelTracesEndpoint(),occurredAt=nowIso(),event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_start",occurred_at:occurredAt,installation_id:installationId,session_id:PROCESS_SESSION_ID,command:context.command,payload:buildCommandStartPayload({captureLevel,context,pmVersion,sourceContext,pmRootHash,cwdHash,installationId})},sampleRate=await resolveAutomaticReadSampleRate(globalPmRoot,context.command,coreReadOwned);sampleRate===1&&await appendTelemetryEvent(globalPmRoot,event);const commandTaxonomy=deriveTelemetryCommandTaxonomy(context.command),active={...sampleRate<1?{sample_rate:sampleRate}:{},started_at:occurredAt,started_at_ms:Date.now(),command:context.command,command_taxonomy:commandTaxonomy,pm_version:pmVersion,source_context:sourceContext.source_context,source_context_source:sourceContext.source_context_source,installation_id:installationId,pm_root_hash:pmRootHash,cwd_hash:cwdHash,endpoint,retention_days:retentionDays,global_pm_root:globalPmRoot,capture_level:captureLevel,otel_traces_endpoint:otelTracesEndpoint??void 0,otel_trace_id:otelTracesEndpoint?crypto.randomBytes(16).toString("hex"):void 0,otel_span_id:otelTracesEndpoint?crypto.randomBytes(8).toString("hex"):void 0};return sampleRate<1&&deferredReadStarts.set(active,event),active},globalPmRoot,TELEMETRY_FOREGROUND_LOCK_WAIT_MS);return activeCommand&&activeCommand.sample_rate===void 0&&scheduleTelemetryFlush(globalPmRoot,activeCommand.endpoint,activeCommand.retention_days),activeCommand}catch{return null}}async function finishTelemetryCommand(activeCommand,outcome){if(!(!activeCommand||resolveTelemetryEnvironmentPolicy().telemetry_disabled))try{if(!await withQueueMutation(async()=>{const settings=await readSettings(activeCommand.global_pm_root);if(resolveTelemetryEnvironmentPolicy().telemetry_disabled||!settings.telemetry.enabled||settings.telemetry.installation_id!==activeCommand.installation_id)return deferredReadStarts.delete(activeCommand),!1;const deferredStart=deferredReadStarts.get(activeCommand),sampleRate=outcome.ok?activeCommand.sample_rate??1:1;if(deferredStart){if(deferredReadStarts.delete(activeCommand),crypto.randomBytes(6).readUIntBE(0,6)/281474976710656>=sampleRate)return!1;deferredStart.payload.sample_rate=sampleRate,await appendTelemetryEvent(activeCommand.global_pm_root,deferredStart)}const finishedAt=nowIso(),durationMs=Math.max(0,Date.now()-activeCommand.started_at_ms),normalizedErrorCode=normalizeTelemetryErrorCode(inferTelemetryErrorCode({ok:outcome.ok,errorCode:outcome.error_code,errorMessage:outcome.error,exitCode:outcome.exit_code})),normalizedErrorCategory=normalizeTelemetryErrorCategory({ok:outcome.ok,errorCode:normalizedErrorCode,errorCategory:outcome.error_category}),normalizedExitCode=normalizeTelemetryExitCode(outcome.exit_code,outcome.ok),commandResolution=outcome.command_resolution??deriveTelemetryCommandResolution({ok:outcome.ok,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory}),resolutionStage=outcome.resolution_stage??"execute",event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_finish",occurred_at:finishedAt,installation_id:activeCommand.installation_id,session_id:PROCESS_SESSION_ID,command:activeCommand.command,payload:{...deferredStart?{sample_rate:sampleRate}:{},...buildCommandFinishPayload({captureLevel:activeCommand.capture_level,pmVersion:activeCommand.pm_version,sourceContext:{source_context:activeCommand.source_context,source_context_source:activeCommand.source_context_source},outcome,durationMs,startedAt:activeCommand.started_at,command:activeCommand.command,installationId:activeCommand.installation_id,commandTaxonomy:activeCommand.command_taxonomy,exitCode:normalizedExitCode,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory,commandResolution,resolutionStage})}};await appendTelemetryEvent(activeCommand.global_pm_root,event);const otelRequest=buildOtelSpanRequest(activeCommand,{...outcome,exit_code:normalizedExitCode,error_code:normalizedErrorCode,error_category:normalizedErrorCategory},finishedAt,durationMs,sampleRate);return otelRequest&&await appendPendingOtelSpan(activeCommand.global_pm_root,otelRequest),!0},activeCommand.global_pm_root,TELEMETRY_FOREGROUND_LOCK_WAIT_MS))return;scheduleTelemetryFlush(activeCommand.global_pm_root,activeCommand.endpoint,activeCommand.retention_days)}catch{}}async function emitTelemetryErrorEvent(context){if(!resolveTelemetryEnvironmentPolicy().telemetry_disabled)try{const globalPmRoot=resolveGlobalPmRoot(process.cwd());if(!(await readSettings(globalPmRoot)).telemetry.enabled)return;const captured=await withQueueMutation(async()=>{const installation=await ensureInstallationId(globalPmRoot);if(!installation)return null;const{installationId,captureLevel}=installation,pmVersion=normalizePmVersion(context.pm_version),sourceContext=resolveTelemetrySourceContext(context.global),pmRootHash=hashWithInstallationId(installationId,context.pm_root),cwdHash=hashWithInstallationId(installationId,process.cwd()),occurredAt=nowIso(),normalizedErrorCode=normalizeTelemetryErrorCode(inferTelemetryErrorCode({ok:!1,errorCode:context.error_code,errorMessage:context.error_message,exitCode:context.exit_code})),normalizedErrorCategory=context.error_category??resolveTelemetryErrorCategory(normalizedErrorCode),normalizedExitCode=normalizeTelemetryExitCode(context.exit_code,!1),normalizedCommand=context.command.trim().length>0?context.command:"<unknown>",commandTaxonomy=deriveTelemetryCommandTaxonomy(normalizedCommand),commandResolution=context.command_resolution??deriveTelemetryCommandResolution({ok:!1,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory}),resolutionStage=context.resolution_stage??"unknown",event={schema_version:TELEMETRY_SCHEMA_VERSION,event_id:crypto.randomUUID(),event_type:"command_error",occurred_at:occurredAt,installation_id:installationId,session_id:PROCESS_SESSION_ID,command:sanitizeString(normalizedCommand,"redacted"),payload:buildCommandErrorPayload({captureLevel,pmVersion,sourceContext,command:normalizedCommand,commandTaxonomy,commandResolution,resolutionStage,args:context.args,options:context.options,pmRootHash,cwdHash,installationId,errorCode:normalizedErrorCode,errorCategory:normalizedErrorCategory,exitCode:normalizedExitCode,errorMessage:context.error_message})};return await appendTelemetryEvent(globalPmRoot,event),installation},globalPmRoot,TELEMETRY_FOREGROUND_LOCK_WAIT_MS);captured&&scheduleTelemetryFlush(globalPmRoot,captured.endpoint,captured.retentionDays)}catch{}}export{PM_TELEMETRY_SOURCE_CONTEXT_VALUES2 as PM_TELEMETRY_SOURCE_CONTEXT_VALUES,TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,TELEMETRY_SCHEMA_VERSION,_testOnly,emitTelemetryErrorEvent,finishTelemetryCommand,flushTelemetryQueueNow,startTelemetryCommand,waitForPendingFlush,withQueueMutation as withTelemetryQueueMutation};
10
10
  //# sourceMappingURL=runtime.js.map