botmux 3.9.2 → 3.10.0

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 (314) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/.runtime-build-id +1 -1
  4. package/dist/adapters/cli/codex.d.ts.map +1 -1
  5. package/dist/adapters/cli/codex.js +6 -0
  6. package/dist/adapters/cli/codex.js.map +1 -1
  7. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  8. package/dist/adapters/cli/opencode.js +7 -1
  9. package/dist/adapters/cli/opencode.js.map +1 -1
  10. package/dist/adapters/cli/reasonix.d.ts +35 -0
  11. package/dist/adapters/cli/reasonix.d.ts.map +1 -0
  12. package/dist/adapters/cli/reasonix.js +236 -0
  13. package/dist/adapters/cli/reasonix.js.map +1 -0
  14. package/dist/adapters/cli/registry.d.ts +2 -1
  15. package/dist/adapters/cli/registry.d.ts.map +1 -1
  16. package/dist/adapters/cli/registry.js +4 -1
  17. package/dist/adapters/cli/registry.js.map +1 -1
  18. package/dist/adapters/cli/types.d.ts +5 -1
  19. package/dist/adapters/cli/types.d.ts.map +1 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +168 -62
  22. package/dist/cli.js.map +1 -1
  23. package/dist/core/command-handler.d.ts +18 -4
  24. package/dist/core/command-handler.d.ts.map +1 -1
  25. package/dist/core/command-handler.js +234 -26
  26. package/dist/core/command-handler.js.map +1 -1
  27. package/dist/core/dashboard-ipc-server.d.ts +1 -0
  28. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  29. package/dist/core/dashboard-ipc-server.js +27 -3
  30. package/dist/core/dashboard-ipc-server.js.map +1 -1
  31. package/dist/core/dispatch.d.ts +54 -24
  32. package/dist/core/dispatch.d.ts.map +1 -1
  33. package/dist/core/dispatch.js +81 -27
  34. package/dist/core/dispatch.js.map +1 -1
  35. package/dist/core/input-turn-dedupe.d.ts +20 -0
  36. package/dist/core/input-turn-dedupe.d.ts.map +1 -0
  37. package/dist/core/input-turn-dedupe.js +57 -0
  38. package/dist/core/input-turn-dedupe.js.map +1 -0
  39. package/dist/core/local-terminal-opener.d.ts.map +1 -1
  40. package/dist/core/local-terminal-opener.js +10 -1
  41. package/dist/core/local-terminal-opener.js.map +1 -1
  42. package/dist/core/passthrough-commands.d.ts.map +1 -1
  43. package/dist/core/passthrough-commands.js +1 -1
  44. package/dist/core/passthrough-commands.js.map +1 -1
  45. package/dist/core/plugins/pm2.d.ts.map +1 -1
  46. package/dist/core/plugins/pm2.js +7 -1
  47. package/dist/core/plugins/pm2.js.map +1 -1
  48. package/dist/core/resource-monitor/attribution.d.ts.map +1 -1
  49. package/dist/core/resource-monitor/attribution.js +17 -1
  50. package/dist/core/resource-monitor/attribution.js.map +1 -1
  51. package/dist/core/resource-monitor/darwin.d.ts +145 -0
  52. package/dist/core/resource-monitor/darwin.d.ts.map +1 -0
  53. package/dist/core/resource-monitor/darwin.js +360 -0
  54. package/dist/core/resource-monitor/darwin.js.map +1 -0
  55. package/dist/core/resource-monitor/procfs.d.ts.map +1 -1
  56. package/dist/core/resource-monitor/procfs.js +6 -0
  57. package/dist/core/resource-monitor/procfs.js.map +1 -1
  58. package/dist/core/resource-monitor/types.d.ts +1 -1
  59. package/dist/core/resource-monitor/types.d.ts.map +1 -1
  60. package/dist/core/scheduler.d.ts.map +1 -1
  61. package/dist/core/scheduler.js +5 -2
  62. package/dist/core/scheduler.js.map +1 -1
  63. package/dist/core/session-discovery.d.ts.map +1 -1
  64. package/dist/core/session-discovery.js +3 -0
  65. package/dist/core/session-discovery.js.map +1 -1
  66. package/dist/core/session-manager.d.ts +3 -1
  67. package/dist/core/session-manager.d.ts.map +1 -1
  68. package/dist/core/session-manager.js +46 -0
  69. package/dist/core/session-manager.js.map +1 -1
  70. package/dist/core/session-marker.d.ts +1 -8
  71. package/dist/core/session-marker.d.ts.map +1 -1
  72. package/dist/core/session-marker.js +2 -50
  73. package/dist/core/session-marker.js.map +1 -1
  74. package/dist/core/types.d.ts +3 -1
  75. package/dist/core/types.d.ts.map +1 -1
  76. package/dist/core/types.js.map +1 -1
  77. package/dist/core/worker-pool.d.ts +17 -0
  78. package/dist/core/worker-pool.d.ts.map +1 -1
  79. package/dist/core/worker-pool.js +292 -9
  80. package/dist/core/worker-pool.js.map +1 -1
  81. package/dist/daemon.d.ts.map +1 -1
  82. package/dist/daemon.js +27 -12
  83. package/dist/daemon.js.map +1 -1
  84. package/dist/dashboard/daemon-internal-api.d.ts.map +1 -1
  85. package/dist/dashboard/daemon-internal-api.js +11 -2
  86. package/dist/dashboard/daemon-internal-api.js.map +1 -1
  87. package/dist/dashboard/groups-action-helpers.d.ts +2 -0
  88. package/dist/dashboard/groups-action-helpers.d.ts.map +1 -1
  89. package/dist/dashboard/groups-action-helpers.js +9 -0
  90. package/dist/dashboard/groups-action-helpers.js.map +1 -1
  91. package/dist/dashboard/groups-matrix-snapshot.d.ts +56 -0
  92. package/dist/dashboard/groups-matrix-snapshot.d.ts.map +1 -0
  93. package/dist/dashboard/groups-matrix-snapshot.js +127 -0
  94. package/dist/dashboard/groups-matrix-snapshot.js.map +1 -0
  95. package/dist/dashboard/resource-monitor-service.d.ts.map +1 -1
  96. package/dist/dashboard/resource-monitor-service.js +18 -2
  97. package/dist/dashboard/resource-monitor-service.js.map +1 -1
  98. package/dist/dashboard/web/app.d.ts.map +1 -1
  99. package/dist/dashboard/web/app.js +45 -4
  100. package/dist/dashboard/web/app.js.map +1 -1
  101. package/dist/dashboard/web/groups-api.js +1 -1
  102. package/dist/dashboard/web/groups-api.js.map +1 -1
  103. package/dist/dashboard/web/i18n.js +10 -10
  104. package/dist/dashboard/web/i18n.js.map +1 -1
  105. package/dist/dashboard/web/roles-page.d.ts.map +1 -1
  106. package/dist/dashboard/web/roles-page.js +26 -11
  107. package/dist/dashboard/web/roles-page.js.map +1 -1
  108. package/dist/dashboard-web/app.js +1 -1
  109. package/dist/dashboard-web/chunks/{bot-defaults-page-BHTQEWCH.js → bot-defaults-page-LTVOUDIS.js} +1 -1
  110. package/dist/dashboard-web/chunks/{chunk-KLZCQAHF.js → chunk-3UE7S77S.js} +1 -1
  111. package/dist/dashboard-web/chunks/{chunk-W77TPKZH.js → chunk-DCS35UMD.js} +1 -1
  112. package/dist/dashboard-web/chunks/{chunk-E3HZZXK5.js → chunk-MFQPCVHY.js} +4 -4
  113. package/dist/dashboard-web/chunks/{chunk-EZH56JCI.js → chunk-ZU3UUKAR.js} +1 -1
  114. package/dist/dashboard-web/chunks/{connectors-page-BP255CAX.js → connectors-page-5KWDIMKC.js} +1 -1
  115. package/dist/dashboard-web/chunks/{groups-page-CDHVXBUT.js → groups-page-FHOKYXMW.js} +1 -1
  116. package/dist/dashboard-web/chunks/{insights-page-57BFE6GT.js → insights-page-T2ZX2RWL.js} +1 -1
  117. package/dist/dashboard-web/chunks/{monitor-room-UTOYGQVF.js → monitor-room-YNVBAGR6.js} +1 -1
  118. package/dist/dashboard-web/chunks/{monitoring-page-WTHYAIUM.js → monitoring-page-LHM55YWN.js} +1 -1
  119. package/dist/dashboard-web/chunks/{office-page-JSMIB353.js → office-page-ATXVP7PW.js} +1 -1
  120. package/dist/dashboard-web/chunks/{overview-page-3VDBOH7L.js → overview-page-QYI3KBDD.js} +1 -1
  121. package/dist/dashboard-web/chunks/roles-page-56VWM6CD.js +1 -0
  122. package/dist/dashboard-web/chunks/{schedules-page-HHN736H6.js → schedules-page-S5K6U4EO.js} +1 -1
  123. package/dist/dashboard-web/chunks/{sessions-page-EIWOZD7A.js → sessions-page-WBP4N7D2.js} +1 -1
  124. package/dist/dashboard-web/chunks/{settings-page-2IUT5LS4.js → settings-page-QUZDQARR.js} +1 -1
  125. package/dist/dashboard-web/chunks/{skills-page-JKFKMUEM.js → skills-page-IFY7AEND.js} +1 -1
  126. package/dist/dashboard-web/chunks/{team-federation-page-Q2PXC3UY.js → team-federation-page-C7FJQPFZ.js} +1 -1
  127. package/dist/dashboard-web/chunks/{v3-page-EBQCD4AO.js → v3-page-2LMF3WWR.js} +1 -1
  128. package/dist/dashboard-web/chunks/{whiteboards-page-QZRMVNZN.js → whiteboards-page-3XC6QRMY.js} +1 -1
  129. package/dist/dashboard-web/style.css +2 -4
  130. package/dist/dashboard.js +65 -9
  131. package/dist/dashboard.js.map +1 -1
  132. package/dist/i18n/en.d.ts.map +1 -1
  133. package/dist/i18n/en.js +33 -7
  134. package/dist/i18n/en.js.map +1 -1
  135. package/dist/i18n/zh.d.ts.map +1 -1
  136. package/dist/i18n/zh.js +31 -7
  137. package/dist/i18n/zh.js.map +1 -1
  138. package/dist/im/lark/card-builder.d.ts +7 -0
  139. package/dist/im/lark/card-builder.d.ts.map +1 -1
  140. package/dist/im/lark/card-builder.js +56 -0
  141. package/dist/im/lark/card-builder.js.map +1 -1
  142. package/dist/im/lark/card-handler.d.ts.map +1 -1
  143. package/dist/im/lark/card-handler.js +42 -19
  144. package/dist/im/lark/card-handler.js.map +1 -1
  145. package/dist/im/lark/client.d.ts +10 -0
  146. package/dist/im/lark/client.d.ts.map +1 -1
  147. package/dist/im/lark/client.js +79 -0
  148. package/dist/im/lark/client.js.map +1 -1
  149. package/dist/im/lark/event-dispatcher.d.ts +14 -1
  150. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  151. package/dist/im/lark/event-dispatcher.js +171 -15
  152. package/dist/im/lark/event-dispatcher.js.map +1 -1
  153. package/dist/im/lark/lark-hosts.d.ts +5 -0
  154. package/dist/im/lark/lark-hosts.d.ts.map +1 -1
  155. package/dist/im/lark/lark-hosts.js +10 -0
  156. package/dist/im/lark/lark-hosts.js.map +1 -1
  157. package/dist/im/lark/message-parser.d.ts.map +1 -1
  158. package/dist/im/lark/message-parser.js +24 -7
  159. package/dist/im/lark/message-parser.js.map +1 -1
  160. package/dist/pm2-graceful-exit.d.ts +28 -0
  161. package/dist/pm2-graceful-exit.d.ts.map +1 -0
  162. package/dist/pm2-graceful-exit.js +39 -0
  163. package/dist/pm2-graceful-exit.js.map +1 -0
  164. package/dist/services/bridge-fallback-gate.d.ts +9 -2
  165. package/dist/services/bridge-fallback-gate.d.ts.map +1 -1
  166. package/dist/services/bridge-fallback-gate.js +31 -19
  167. package/dist/services/bridge-fallback-gate.js.map +1 -1
  168. package/dist/services/message-listener-store.d.ts +18 -0
  169. package/dist/services/message-listener-store.d.ts.map +1 -1
  170. package/dist/services/message-listener-store.js +35 -10
  171. package/dist/services/message-listener-store.js.map +1 -1
  172. package/dist/services/message-listener.d.ts +17 -0
  173. package/dist/services/message-listener.d.ts.map +1 -1
  174. package/dist/services/message-listener.js +26 -0
  175. package/dist/services/message-listener.js.map +1 -1
  176. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  177. package/dist/setup/bot-config-editor.js +2 -0
  178. package/dist/setup/bot-config-editor.js.map +1 -1
  179. package/dist/setup/lark-scopes.json +1 -0
  180. package/dist/setup/verify-permissions.d.ts.map +1 -1
  181. package/dist/setup/verify-permissions.js +8 -0
  182. package/dist/setup/verify-permissions.js.map +1 -1
  183. package/dist/types.d.ts +34 -0
  184. package/dist/types.d.ts.map +1 -1
  185. package/dist/utils/child-env.d.ts +1 -1
  186. package/dist/utils/child-env.d.ts.map +1 -1
  187. package/dist/utils/child-env.js +13 -0
  188. package/dist/utils/child-env.js.map +1 -1
  189. package/dist/utils/file-lock.d.ts.map +1 -1
  190. package/dist/utils/file-lock.js +1 -1
  191. package/dist/utils/file-lock.js.map +1 -1
  192. package/dist/utils/global-install.d.ts.map +1 -1
  193. package/dist/utils/global-install.js +56 -10
  194. package/dist/utils/global-install.js.map +1 -1
  195. package/dist/utils/idle-detector.d.ts +4 -0
  196. package/dist/utils/idle-detector.d.ts.map +1 -1
  197. package/dist/utils/idle-detector.js +25 -0
  198. package/dist/utils/idle-detector.js.map +1 -1
  199. package/dist/utils/process-identity.d.ts +7 -0
  200. package/dist/utils/process-identity.d.ts.map +1 -0
  201. package/dist/utils/process-identity.js +62 -0
  202. package/dist/utils/process-identity.js.map +1 -0
  203. package/dist/worker.js +123 -9
  204. package/dist/worker.js.map +1 -1
  205. package/dist/workflows/events/payloads.d.ts +10 -10
  206. package/dist/workflows/events/schema.d.ts +28 -28
  207. package/dist/workflows/hostExecutors/registry.d.ts +2 -7
  208. package/dist/workflows/hostExecutors/registry.d.ts.map +1 -1
  209. package/dist/workflows/hostExecutors/registry.js.map +1 -1
  210. package/dist/workflows/shared/provider-reconciler.d.ts +1 -30
  211. package/dist/workflows/shared/provider-reconciler.d.ts.map +1 -1
  212. package/dist/workflows/shared/provider-reconciler.js.map +1 -1
  213. package/dist/workflows/v3/artifact-contract.d.ts +41 -0
  214. package/dist/workflows/v3/artifact-contract.d.ts.map +1 -0
  215. package/dist/workflows/v3/artifact-contract.js +20 -0
  216. package/dist/workflows/v3/artifact-contract.js.map +1 -0
  217. package/dist/workflows/v3/botmux-attempt-lease.d.ts +7 -0
  218. package/dist/workflows/v3/botmux-attempt-lease.d.ts.map +1 -0
  219. package/dist/workflows/v3/botmux-attempt-lease.js +189 -0
  220. package/dist/workflows/v3/botmux-attempt-lease.js.map +1 -0
  221. package/dist/workflows/v3/botmux-host-policy.d.ts +7 -0
  222. package/dist/workflows/v3/botmux-host-policy.d.ts.map +1 -0
  223. package/dist/workflows/v3/botmux-host-policy.js +34 -0
  224. package/dist/workflows/v3/botmux-host-policy.js.map +1 -0
  225. package/dist/workflows/v3/cli-run.d.ts +1 -1
  226. package/dist/workflows/v3/cli-run.d.ts.map +1 -1
  227. package/dist/workflows/v3/cli-run.js +1 -1
  228. package/dist/workflows/v3/cli-run.js.map +1 -1
  229. package/dist/workflows/v3/contract.d.ts +8 -89
  230. package/dist/workflows/v3/contract.d.ts.map +1 -1
  231. package/dist/workflows/v3/contract.js +2 -8
  232. package/dist/workflows/v3/contract.js.map +1 -1
  233. package/dist/workflows/v3/core-control.d.ts +16 -0
  234. package/dist/workflows/v3/core-control.d.ts.map +1 -0
  235. package/dist/workflows/v3/core-control.js +60 -0
  236. package/dist/workflows/v3/core-control.js.map +1 -0
  237. package/dist/workflows/v3/daemon-run.d.ts.map +1 -1
  238. package/dist/workflows/v3/daemon-run.js +2 -1
  239. package/dist/workflows/v3/daemon-run.js.map +1 -1
  240. package/dist/workflows/v3/dag-loader.d.ts +5 -0
  241. package/dist/workflows/v3/dag-loader.d.ts.map +1 -0
  242. package/dist/workflows/v3/dag-loader.js +22 -0
  243. package/dist/workflows/v3/dag-loader.js.map +1 -0
  244. package/dist/workflows/v3/dag.d.ts +2 -6
  245. package/dist/workflows/v3/dag.d.ts.map +1 -1
  246. package/dist/workflows/v3/dag.js +2 -24
  247. package/dist/workflows/v3/dag.js.map +1 -1
  248. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -1
  249. package/dist/workflows/v3/ephemeral-pool.js +22 -12
  250. package/dist/workflows/v3/ephemeral-pool.js.map +1 -1
  251. package/dist/workflows/v3/event-contract.d.ts +273 -0
  252. package/dist/workflows/v3/event-contract.d.ts.map +1 -0
  253. package/dist/workflows/v3/event-contract.js +8 -0
  254. package/dist/workflows/v3/event-contract.js.map +1 -0
  255. package/dist/workflows/v3/gate-policy.d.ts +12 -0
  256. package/dist/workflows/v3/gate-policy.d.ts.map +1 -0
  257. package/dist/workflows/v3/gate-policy.js +20 -0
  258. package/dist/workflows/v3/gate-policy.js.map +1 -0
  259. package/dist/workflows/v3/gate-wait-store.d.ts +99 -0
  260. package/dist/workflows/v3/gate-wait-store.d.ts.map +1 -0
  261. package/dist/workflows/v3/gate-wait-store.js +263 -0
  262. package/dist/workflows/v3/gate-wait-store.js.map +1 -0
  263. package/dist/workflows/v3/host.js +1 -1
  264. package/dist/workflows/v3/host.js.map +1 -1
  265. package/dist/workflows/v3/human-gate.d.ts +4 -99
  266. package/dist/workflows/v3/human-gate.d.ts.map +1 -1
  267. package/dist/workflows/v3/human-gate.js +4 -275
  268. package/dist/workflows/v3/human-gate.js.map +1 -1
  269. package/dist/workflows/v3/in-process-attempt-lease.d.ts +10 -0
  270. package/dist/workflows/v3/in-process-attempt-lease.d.ts.map +1 -0
  271. package/dist/workflows/v3/in-process-attempt-lease.js +47 -0
  272. package/dist/workflows/v3/in-process-attempt-lease.js.map +1 -0
  273. package/dist/workflows/v3/journal.d.ts +2 -275
  274. package/dist/workflows/v3/journal.d.ts.map +1 -1
  275. package/dist/workflows/v3/journal.js.map +1 -1
  276. package/dist/workflows/v3/library-service.js +1 -1
  277. package/dist/workflows/v3/library-service.js.map +1 -1
  278. package/dist/workflows/v3/orchestrator.d.ts +1 -2
  279. package/dist/workflows/v3/orchestrator.d.ts.map +1 -1
  280. package/dist/workflows/v3/orchestrator.js.map +1 -1
  281. package/dist/workflows/v3/portable-artifact-snapshot.d.ts +15 -0
  282. package/dist/workflows/v3/portable-artifact-snapshot.d.ts.map +1 -0
  283. package/dist/workflows/v3/portable-artifact-snapshot.js +76 -0
  284. package/dist/workflows/v3/portable-artifact-snapshot.js.map +1 -0
  285. package/dist/workflows/v3/portable-final-outputs.d.ts +37 -0
  286. package/dist/workflows/v3/portable-final-outputs.d.ts.map +1 -0
  287. package/dist/workflows/v3/portable-final-outputs.js +137 -0
  288. package/dist/workflows/v3/portable-final-outputs.js.map +1 -0
  289. package/dist/workflows/v3/portable-run-snapshot.d.ts +14 -0
  290. package/dist/workflows/v3/portable-run-snapshot.d.ts.map +1 -0
  291. package/dist/workflows/v3/portable-run-snapshot.js +176 -0
  292. package/dist/workflows/v3/portable-run-snapshot.js.map +1 -0
  293. package/dist/workflows/v3/portable-runtime.d.ts +83 -0
  294. package/dist/workflows/v3/portable-runtime.d.ts.map +1 -0
  295. package/dist/workflows/v3/portable-runtime.js +135 -0
  296. package/dist/workflows/v3/portable-runtime.js.map +1 -0
  297. package/dist/workflows/v3/runtime-host-contract.d.ts +182 -0
  298. package/dist/workflows/v3/runtime-host-contract.d.ts.map +1 -0
  299. package/dist/workflows/v3/runtime-host-contract.js +9 -0
  300. package/dist/workflows/v3/runtime-host-contract.js.map +1 -0
  301. package/dist/workflows/v3/runtime.d.ts +12 -226
  302. package/dist/workflows/v3/runtime.d.ts.map +1 -1
  303. package/dist/workflows/v3/runtime.js +14 -3173
  304. package/dist/workflows/v3/runtime.js.map +1 -1
  305. package/dist/workflows/v3/shared-node-runtime.d.ts +203 -0
  306. package/dist/workflows/v3/shared-node-runtime.d.ts.map +1 -0
  307. package/dist/workflows/v3/shared-node-runtime.js +2978 -0
  308. package/dist/workflows/v3/shared-node-runtime.js.map +1 -0
  309. package/dist/workflows/v3/shared-runtime.d.ts +17 -0
  310. package/dist/workflows/v3/shared-runtime.d.ts.map +1 -0
  311. package/dist/workflows/v3/shared-runtime.js +12 -0
  312. package/dist/workflows/v3/shared-runtime.js.map +1 -0
  313. package/package.json +4 -1
  314. package/dist/dashboard-web/chunks/roles-page-LHVAU2BI.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../../src/core/resource-monitor/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,eAAe,EAAE;QACf,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,CAAC;IACF,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACpD;AAkFD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAyJ7E"}
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../../src/core/resource-monitor/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,eAAe,EAAE;QACf,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,MAAM,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7C,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,CAAC;IACF,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACpD;AAkGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAyJ7E"}
@@ -23,6 +23,22 @@ function collectSubtree(rootPid, children) {
23
23
  }
24
24
  return out;
25
25
  }
26
+ /**
27
+ * Do a sampled process and a marker agree on the same process birth?
28
+ *
29
+ * Linux compares /proc start ticks, where the two producers are byte-identical.
30
+ * macOS compares ps(1) `lstart` strings, and the two producers format the
31
+ * day-of-month differently: `ps -p <pid>` keeps ps's space padding (`Aug 5`) while
32
+ * the sampler's bulk table is whitespace-split (`Aug 5`). Normalizing here rather
33
+ * than in readProcessStartIdentity() keeps the stamps already written into live
34
+ * marker files valid across an upgrade — the marker path must stay byte-exact.
35
+ */
36
+ function sameProcessBirth(sampled, markerProcStart) {
37
+ if (sampled === undefined)
38
+ return false;
39
+ const collapse = (value) => value.trim().replace(/\s+/g, ' ');
40
+ return collapse(String(sampled)) === collapse(markerProcStart);
41
+ }
26
42
  function addPidTree(target, rootPid, children, byPid) {
27
43
  if (!rootPid || rootPid <= 0 || !byPid.has(rootPid))
28
44
  return false;
@@ -74,7 +90,7 @@ export function attributeResources(input) {
74
90
  const markerPidsBySession = new Map();
75
91
  for (const [pid, marker] of input.cliMarkers) {
76
92
  const proc = byPid.get(pid);
77
- if (marker.procStart && (!proc || proc.startTicks === undefined || String(proc.startTicks) !== marker.procStart)) {
93
+ if (marker.procStart && (!proc || !sameProcessBirth(proc.startTicks, marker.procStart))) {
78
94
  continue;
79
95
  }
80
96
  const arr = markerPidsBySession.get(marker.sessionId) ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../../src/core/resource-monitor/attribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../../src/core/resource-monitor/attribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { cpus } from 'node:os';
2
+ import type { ProcfsSample, ProcessResourceSample } from './types.js';
3
+ /** Wall-clock budget shared by every tool in one sample. */
4
+ export declare function createSampleBudget(nowFn: () => number, budgetMs?: number): () => number;
5
+ /**
6
+ * Why the outcome distinguishes "absent" from "failed":
7
+ *
8
+ * Some tools decide *how* a metric is defined — vm_stat decides what "available
9
+ * memory" means, top decides whether process memory is phys_footprint or RSS. A tool
10
+ * that does not exist on this host is a stable property: the fallback definition then
11
+ * holds for every sample and the series stays internally comparable. A tool that
12
+ * exists but failed *this once* (timeout, sandbox denial, exhausted budget) is the
13
+ * dangerous case — falling back for one sample splices a different definition into a
14
+ * series and draws a step that reads as a real spike. Callers must drop such a sample
15
+ * instead, so collapsing both cases into `undefined` is not good enough.
16
+ */
17
+ export type ToolOutcome = {
18
+ ok: true;
19
+ stdout: string;
20
+ } | {
21
+ ok: false;
22
+ absent: true;
23
+ } | {
24
+ ok: false;
25
+ absent: false;
26
+ };
27
+ export type ToolRunner = (candidates: string[], args: string[], remainingMs: () => number, maxMs?: number) => ToolOutcome;
28
+ /**
29
+ * Host CPU ticks in centiseconds, summed across cores.
30
+ *
31
+ * `os.cpus()` reports milliseconds per core; dividing by 10 lands on the same unit
32
+ * as the process table below. macOS has no iowait, so idle is idle.
33
+ */
34
+ export declare function hostCpuTicks(cpuList: ReturnType<typeof cpus>): {
35
+ total: number;
36
+ idle: number;
37
+ };
38
+ /**
39
+ * `ps -o time` cumulative CPU time → centiseconds.
40
+ * Formats seen from macOS ps: `0:00.14`, `170:41.46`, `27:03:12.08`, `3-04:11:22.31`.
41
+ */
42
+ export declare function parsePsCpuTime(raw: string): number;
43
+ /**
44
+ * One row of `ps -Ao pid=,ppid=,rss=,time=,lstart=`.
45
+ *
46
+ * Every column is kernel-derived and fixed-format: `lstart` is ps's
47
+ * `%a %b %e %H:%M:%S %Y`, always exactly 5 whitespace-separated tokens, so a row is
48
+ * exactly 9 tokens and anything else is not a row we understand. The lstart string is
49
+ * carried through as `startTicks`: on macOS it is what marker birth-stamps are
50
+ * compared against (see readProcessStartIdentity), hence `number | string`.
51
+ *
52
+ * Rejecting off-shape rows matters because a row is what grants a pid its ppid, its
53
+ * memory and its birth identity — a fabricated one would place a process anywhere in
54
+ * the tree. There is no attacker-controlled text in this table (argv is not selected),
55
+ * and the format checks keep it that way if ps ever changes its output.
56
+ */
57
+ export declare function parsePsLine(line: string): ProcessResourceSample | null;
58
+ export declare function parsePsTable(raw: string): ProcessResourceSample[];
59
+ /**
60
+ * `top`'s MEM column is phys_footprint — the same number Activity Monitor shows as
61
+ * "Memory", and the closest macOS analogue to the PSS the Linux sampler prefers:
62
+ * shared clean pages are excluded and compressed pages are counted, so summing it
63
+ * across a process group does not double-count the shared Node runtime the way RSS
64
+ * does (measured: 213MB footprint vs 558MB RSS for one claude process).
65
+ *
66
+ * The cost is precision — top rounds to 3-4 significant digits with a unit suffix.
67
+ */
68
+ export declare function parseTopMemBytes(raw: string): number | null;
69
+ export declare function parseTopFootprints(raw: string): Map<number, number>;
70
+ /** `ps -Ao pid=,lstart=` → pid → birth stamp, used to re-check identity after top. */
71
+ export declare function parsePsBirthStamps(raw: string): Map<number, string>;
72
+ /**
73
+ * Overlay top's phys_footprint onto the ps table, but only for pids that provably
74
+ * did not change identity in between.
75
+ *
76
+ * ps and top are separate instants. A pid sampled by ps can exit and be recycled
77
+ * before top runs, which would otherwise splice the new process's memory onto the old
78
+ * process's identity and process tree — and if the old process still had a live
79
+ * marker, the wrong number would be shown with `confidence=marker`. Re-reading the
80
+ * birth stamps after top brackets the whole window: an unchanged stamp means the pid
81
+ * did not change hands. Anything unproven — recycled, or absent from the second pass
82
+ * because it exited — keeps its ps RSS.
83
+ *
84
+ * Precision caveat: `lstart` resolves to one second, so a recycle *within the same
85
+ * second* presents an identical stamp and slips through. XNU hands out pids
86
+ * sequentially from `lastpid + 1` and wraps at PID_MAX back to 100, so hitting it
87
+ * takes roughly a full lap of the pid space — ~100k allocations — inside one second.
88
+ * That is extremely hard to reach in practice, not provably impossible. Closing it
89
+ * outright would mean microsecond birth times from `proc_pidinfo`, i.e. a native
90
+ * binding; not worth it for a memory number that self-corrects on the next sample.
91
+ */
92
+ export declare function applyFootprints(processes: ProcessResourceSample[], footprints: Map<number, number>, birthAfter: Map<number, string>): void;
93
+ /**
94
+ * `vm_stat` page counters → the memTotal/memAvailable pair.
95
+ *
96
+ * "Available" = free + speculative + inactive. This deliberately follows Linux
97
+ * MemAvailable semantics rather than Activity Monitor's "used": those queues are
98
+ * reclaimable under pressure, exactly like Linux's page cache and inactive LRU. Pages
99
+ * held by the compressor are *not* reclaimable and are therefore counted as used,
100
+ * since they are in none of those queues. Do not "fix" this to match Activity
101
+ * Monitor — it would make macOS hosts read as permanently ~90% full and break
102
+ * comparability with the Linux hosts on the same dashboard.
103
+ *
104
+ * `Pages purgeable` is deliberately NOT added. It is not a fifth, disjoint queue:
105
+ * XNU bumps `vm_page_purgeable_count` for resident non-wired pages of volatile
106
+ * purgeable objects, and those pages simultaneously sit on the active/inactive
107
+ * queues. Adding it double-counts the inactive∩purgeable overlap, overstating
108
+ * available memory (unbounded in the graphics/cache-heavy case, and able to exceed
109
+ * total). The aggregate counters cannot express the overlap-free reclaimable union,
110
+ * so this stays a documented under-estimate rather than a double-counted guess.
111
+ */
112
+ export declare function parseVmStat(raw: string, totalBytes: number): {
113
+ memTotalBytes: number;
114
+ memAvailableBytes: number;
115
+ } | null;
116
+ /** `sysctl -n vm.swapusage` → `total = 2048.00M used = 1024.25M free = 1023.75M (encrypted)` */
117
+ export declare function parseSwapusage(raw: string): {
118
+ swapTotalBytes: number;
119
+ swapFreeBytes: number;
120
+ };
121
+ export interface DarwinSampleDeps {
122
+ nowFn?: () => number;
123
+ run?: ToolRunner;
124
+ }
125
+ /**
126
+ * Build one macOS sample, or null when this round cannot be trusted.
127
+ *
128
+ * The degradation rule, applied to every tool that defines a metric:
129
+ *
130
+ * - **deterministic** — binary absent, or output this host's OS version formats in a
131
+ * way we cannot parse → stable fallback. It applies to every sample on this host,
132
+ * so the series stays internally comparable and no step appears.
133
+ * - **transient** — the binary is there and normally parses, but *this call* failed
134
+ * (timeout, sandbox denial, exhausted budget) → return null. The caller renders
135
+ * "unsupported" for one round, which is honest; substituting the fallback for a
136
+ * single sample splices a second definition into a live series and draws a step
137
+ * that reads as a real spike (os.freemem() understates available memory; ps RSS
138
+ * runs ~2.7× phys_footprint).
139
+ *
140
+ * Order follows that rule: the mandatory process table first — with the whole budget,
141
+ * since losing it invalidates the sample and resets the dashboard's CPU and session
142
+ * baselines — then the cheap host counters, and only then the optional footprint pass.
143
+ */
144
+ export declare function sampleDarwin(nowMs: number, deps?: DarwinSampleDeps): ProcfsSample | null;
145
+ //# sourceMappingURL=darwin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"darwin.d.ts","sourceRoot":"","sources":["../../../src/core/resource-monitor/darwin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAA8B,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAkDtE,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,MAAM,EAAE,QAAQ,SAAmB,GAAG,MAAM,MAAM,CAGjG;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;AA0B1H;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAS9F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAalD;AAQD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAiBtE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAQjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUnE;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAWnE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,qBAAqB,EAAE,EAClC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAaxH;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAQ7F;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,YAAY,GAAG,IAAI,CA6C5F"}
@@ -0,0 +1,360 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { cpus, freemem, loadavg, totalmem } from 'node:os';
4
+ /**
5
+ * macOS resource sampling — the darwin counterpart of `procfs.ts`.
6
+ *
7
+ * There is no /proc on macOS, so every field of `ProcfsSample` is rebuilt from a
8
+ * different source. The tick unit is fixed at **centiseconds (10ms)** so it matches
9
+ * Linux's USER_HZ=100 convention: the service layer only ever divides process ticks
10
+ * by host ticks, so the two must share one unit.
11
+ *
12
+ * - host cpu ticks → `os.cpus()` per-core times (ms) summed across cores
13
+ * - loadavg → `os.loadavg()`
14
+ * - mem → `vm_stat` page counters + `sysctl vm.swapusage`
15
+ * - process table → `ps -Ao pid=,ppid=,rss=,time=,lstart=`
16
+ * - process memory → `top -l 1 -stats pid,mem` (phys_footprint), RSS as fallback
17
+ *
18
+ * Every external command is spawned by absolute path with a pinned PATH/LANG, the
19
+ * same hardening `session-marker.ts` already applies to its `ps` fallback, and the
20
+ * whole sample shares one wall-clock budget so a wedged tool cannot stall the daemon
21
+ * for the length of every timeout in turn.
22
+ *
23
+ * The process table deliberately does *not* select `command`. No consumer reads
24
+ * `cmd`, and including it would put attacker-sized data in the output: argv can reach
25
+ * ARG_MAX (1MiB) per process, so a handful of processes could push the table past
26
+ * maxBuffer and take the whole dashboard to "unsupported". Without it the table is
27
+ * kernel-derived, fixed-width, and ~40KB on a 700-process host (vs ~120KB with).
28
+ */
29
+ const PS_BINS = ['/bin/ps', '/usr/bin/ps'];
30
+ const VM_STAT_BINS = ['/usr/bin/vm_stat'];
31
+ const SYSCTL_BINS = ['/usr/sbin/sysctl', '/sbin/sysctl'];
32
+ const TOP_BINS = ['/usr/bin/top'];
33
+ const COMMAND_TIMEOUT_MS = 2_000;
34
+ // One budget for the whole sample. Each tool is capped at the smaller of its own
35
+ // timeout and what is left, so the worst case is bounded by this instead of by the
36
+ // sum of five separate timeouts — these are synchronous spawns on the daemon's event
37
+ // loop, and the sampler runs every 10s.
38
+ const SAMPLE_BUDGET_MS = 3_000;
39
+ const COMMAND_MAX_BUFFER = 16 * 1024 * 1024;
40
+ // `top` truncates the process list at -n; 4096 is far above any real host's count
41
+ // while still bounding the output we have to parse.
42
+ const TOP_PROCESS_LIMIT = 4096;
43
+ function firstExisting(candidates) {
44
+ for (const candidate of candidates) {
45
+ if (existsSync(candidate))
46
+ return candidate;
47
+ }
48
+ return undefined;
49
+ }
50
+ /** Wall-clock budget shared by every tool in one sample. */
51
+ export function createSampleBudget(nowFn, budgetMs = SAMPLE_BUDGET_MS) {
52
+ const deadline = nowFn() + budgetMs;
53
+ return () => Math.max(0, deadline - nowFn());
54
+ }
55
+ const runTool = (candidates, args, remainingMs, maxMs = COMMAND_TIMEOUT_MS) => {
56
+ const bin = firstExisting(candidates);
57
+ if (!bin)
58
+ return { ok: false, absent: true };
59
+ const timeout = Math.min(maxMs, remainingMs());
60
+ if (timeout <= 0)
61
+ return { ok: false, absent: false };
62
+ try {
63
+ return {
64
+ ok: true,
65
+ stdout: execFileSync(bin, args, {
66
+ encoding: 'utf-8',
67
+ timeout,
68
+ maxBuffer: COMMAND_MAX_BUFFER,
69
+ stdio: ['ignore', 'pipe', 'ignore'],
70
+ // Pinned env: LANG=C keeps `ps -o lstart=` byte-identical to the marker
71
+ // birth-stamps written by readProcessStartIdentity(), which also pins LANG=C.
72
+ env: { PATH: '/usr/bin:/bin:/usr/sbin:/sbin', LANG: 'C' },
73
+ }),
74
+ };
75
+ }
76
+ catch {
77
+ // Denied by a sandbox profile, timed out, or output over maxBuffer.
78
+ return { ok: false, absent: false };
79
+ }
80
+ };
81
+ /**
82
+ * Host CPU ticks in centiseconds, summed across cores.
83
+ *
84
+ * `os.cpus()` reports milliseconds per core; dividing by 10 lands on the same unit
85
+ * as the process table below. macOS has no iowait, so idle is idle.
86
+ */
87
+ export function hostCpuTicks(cpuList) {
88
+ let total = 0;
89
+ let idle = 0;
90
+ for (const cpu of cpuList) {
91
+ const times = cpu.times;
92
+ total += (times.user + times.nice + times.sys + times.irq + times.idle) / 10;
93
+ idle += times.idle / 10;
94
+ }
95
+ return { total: Math.round(total), idle: Math.round(idle) };
96
+ }
97
+ /**
98
+ * `ps -o time` cumulative CPU time → centiseconds.
99
+ * Formats seen from macOS ps: `0:00.14`, `170:41.46`, `27:03:12.08`, `3-04:11:22.31`.
100
+ */
101
+ export function parsePsCpuTime(raw) {
102
+ const trimmed = raw.trim();
103
+ if (!trimmed)
104
+ return 0;
105
+ const dashSplit = trimmed.split('-');
106
+ const days = dashSplit.length > 1 ? Number(dashSplit[0]) || 0 : 0;
107
+ const clock = dashSplit.length > 1 ? dashSplit[1] : dashSplit[0];
108
+ const parts = clock.split(':');
109
+ if (parts.length === 0)
110
+ return 0;
111
+ const seconds = Number(parts[parts.length - 1]) || 0;
112
+ const minutes = parts.length >= 2 ? Number(parts[parts.length - 2]) || 0 : 0;
113
+ const hours = parts.length >= 3 ? Number(parts[parts.length - 3]) || 0 : 0;
114
+ const totalSeconds = days * 86_400 + hours * 3_600 + minutes * 60 + seconds;
115
+ return Math.round(totalSeconds * 100);
116
+ }
117
+ // `[dd-][hh:]mm:ss.cc` and `%a %b %e %H:%M:%S %Y`, the only shapes ps emits for the
118
+ // two fixed-format columns. Validating them means a row whose layout we did not
119
+ // expect is dropped rather than mistaken for a process (see parsePsLine).
120
+ const PS_CPUTIME_RE = /^(?:\d+-)?(?:\d+:)?\d+:\d+(?:\.\d+)?$/;
121
+ const PS_LSTART_RE = /^[A-Za-z]{3} [A-Za-z]{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}$/;
122
+ /**
123
+ * One row of `ps -Ao pid=,ppid=,rss=,time=,lstart=`.
124
+ *
125
+ * Every column is kernel-derived and fixed-format: `lstart` is ps's
126
+ * `%a %b %e %H:%M:%S %Y`, always exactly 5 whitespace-separated tokens, so a row is
127
+ * exactly 9 tokens and anything else is not a row we understand. The lstart string is
128
+ * carried through as `startTicks`: on macOS it is what marker birth-stamps are
129
+ * compared against (see readProcessStartIdentity), hence `number | string`.
130
+ *
131
+ * Rejecting off-shape rows matters because a row is what grants a pid its ppid, its
132
+ * memory and its birth identity — a fabricated one would place a process anywhere in
133
+ * the tree. There is no attacker-controlled text in this table (argv is not selected),
134
+ * and the format checks keep it that way if ps ever changes its output.
135
+ */
136
+ export function parsePsLine(line) {
137
+ const fields = line.trim().split(/\s+/);
138
+ if (fields.length !== 9)
139
+ return null;
140
+ const pid = Number(fields[0]);
141
+ const ppid = Number(fields[1]);
142
+ const rssKb = Number(fields[2]);
143
+ if (!Number.isInteger(pid) || !Number.isInteger(ppid) || !Number.isFinite(rssKb))
144
+ return null;
145
+ if (!PS_CPUTIME_RE.test(fields[3]))
146
+ return null;
147
+ const startTicks = fields.slice(4, 9).join(' ');
148
+ if (!PS_LSTART_RE.test(startTicks))
149
+ return null;
150
+ return {
151
+ pid,
152
+ ppid,
153
+ rssBytes: rssKb * 1024,
154
+ cpuTicks: parsePsCpuTime(fields[3]),
155
+ startTicks,
156
+ };
157
+ }
158
+ export function parsePsTable(raw) {
159
+ const out = [];
160
+ for (const line of raw.split('\n')) {
161
+ if (!line.trim())
162
+ continue;
163
+ const parsed = parsePsLine(line);
164
+ if (parsed)
165
+ out.push(parsed);
166
+ }
167
+ return out;
168
+ }
169
+ /**
170
+ * `top`'s MEM column is phys_footprint — the same number Activity Monitor shows as
171
+ * "Memory", and the closest macOS analogue to the PSS the Linux sampler prefers:
172
+ * shared clean pages are excluded and compressed pages are counted, so summing it
173
+ * across a process group does not double-count the shared Node runtime the way RSS
174
+ * does (measured: 213MB footprint vs 558MB RSS for one claude process).
175
+ *
176
+ * The cost is precision — top rounds to 3-4 significant digits with a unit suffix.
177
+ */
178
+ export function parseTopMemBytes(raw) {
179
+ // Trailing +/- markers appear once top has a previous frame to diff against.
180
+ const match = raw.trim().match(/^([\d.]+)([BKMGT]?)[+-]?$/);
181
+ if (!match)
182
+ return null;
183
+ const value = Number(match[1]);
184
+ if (!Number.isFinite(value))
185
+ return null;
186
+ const scale = { B: 1, '': 1, K: 1024, M: 1024 ** 2, G: 1024 ** 3, T: 1024 ** 4 };
187
+ return value * (scale[match[2]] ?? 1);
188
+ }
189
+ export function parseTopFootprints(raw) {
190
+ const out = new Map();
191
+ for (const line of raw.split('\n')) {
192
+ const match = line.trim().match(/^(\d+)\s+(\S+)\s*$/);
193
+ if (!match)
194
+ continue;
195
+ const bytes = parseTopMemBytes(match[2]);
196
+ if (bytes === null)
197
+ continue;
198
+ out.set(Number(match[1]), bytes);
199
+ }
200
+ return out;
201
+ }
202
+ /** `ps -Ao pid=,lstart=` → pid → birth stamp, used to re-check identity after top. */
203
+ export function parsePsBirthStamps(raw) {
204
+ const out = new Map();
205
+ for (const line of raw.split('\n')) {
206
+ const fields = line.trim().split(/\s+/);
207
+ if (fields.length < 6)
208
+ continue;
209
+ const pid = Number(fields[0]);
210
+ const stamp = fields.slice(1, 6).join(' ');
211
+ if (!Number.isInteger(pid) || !PS_LSTART_RE.test(stamp))
212
+ continue;
213
+ out.set(pid, stamp);
214
+ }
215
+ return out;
216
+ }
217
+ /**
218
+ * Overlay top's phys_footprint onto the ps table, but only for pids that provably
219
+ * did not change identity in between.
220
+ *
221
+ * ps and top are separate instants. A pid sampled by ps can exit and be recycled
222
+ * before top runs, which would otherwise splice the new process's memory onto the old
223
+ * process's identity and process tree — and if the old process still had a live
224
+ * marker, the wrong number would be shown with `confidence=marker`. Re-reading the
225
+ * birth stamps after top brackets the whole window: an unchanged stamp means the pid
226
+ * did not change hands. Anything unproven — recycled, or absent from the second pass
227
+ * because it exited — keeps its ps RSS.
228
+ *
229
+ * Precision caveat: `lstart` resolves to one second, so a recycle *within the same
230
+ * second* presents an identical stamp and slips through. XNU hands out pids
231
+ * sequentially from `lastpid + 1` and wraps at PID_MAX back to 100, so hitting it
232
+ * takes roughly a full lap of the pid space — ~100k allocations — inside one second.
233
+ * That is extremely hard to reach in practice, not provably impossible. Closing it
234
+ * outright would mean microsecond birth times from `proc_pidinfo`, i.e. a native
235
+ * binding; not worth it for a memory number that self-corrects on the next sample.
236
+ */
237
+ export function applyFootprints(processes, footprints, birthAfter) {
238
+ if (footprints.size === 0)
239
+ return;
240
+ for (const proc of processes) {
241
+ const footprint = footprints.get(proc.pid);
242
+ if (footprint === undefined)
243
+ continue;
244
+ if (birthAfter.get(proc.pid) !== proc.startTicks)
245
+ continue;
246
+ proc.rssBytes = footprint;
247
+ }
248
+ }
249
+ /**
250
+ * `vm_stat` page counters → the memTotal/memAvailable pair.
251
+ *
252
+ * "Available" = free + speculative + inactive. This deliberately follows Linux
253
+ * MemAvailable semantics rather than Activity Monitor's "used": those queues are
254
+ * reclaimable under pressure, exactly like Linux's page cache and inactive LRU. Pages
255
+ * held by the compressor are *not* reclaimable and are therefore counted as used,
256
+ * since they are in none of those queues. Do not "fix" this to match Activity
257
+ * Monitor — it would make macOS hosts read as permanently ~90% full and break
258
+ * comparability with the Linux hosts on the same dashboard.
259
+ *
260
+ * `Pages purgeable` is deliberately NOT added. It is not a fifth, disjoint queue:
261
+ * XNU bumps `vm_page_purgeable_count` for resident non-wired pages of volatile
262
+ * purgeable objects, and those pages simultaneously sit on the active/inactive
263
+ * queues. Adding it double-counts the inactive∩purgeable overlap, overstating
264
+ * available memory (unbounded in the graphics/cache-heavy case, and able to exceed
265
+ * total). The aggregate counters cannot express the overlap-free reclaimable union,
266
+ * so this stays a documented under-estimate rather than a double-counted guess.
267
+ */
268
+ export function parseVmStat(raw, totalBytes) {
269
+ const pageSize = Number(raw.match(/page size of (\d+) bytes/)?.[1]);
270
+ if (!Number.isFinite(pageSize) || pageSize <= 0)
271
+ return null;
272
+ const pages = (label) => {
273
+ const match = raw.match(new RegExp(`^${label}:\\s+(\\d+)\\.?\\s*$`, 'm'));
274
+ return match ? Number(match[1]) : 0;
275
+ };
276
+ const reclaimable = pages('Pages free') + pages('Pages speculative') + pages('Pages inactive');
277
+ if (reclaimable <= 0)
278
+ return null;
279
+ return {
280
+ memTotalBytes: totalBytes,
281
+ memAvailableBytes: reclaimable * pageSize,
282
+ };
283
+ }
284
+ /** `sysctl -n vm.swapusage` → `total = 2048.00M used = 1024.25M free = 1023.75M (encrypted)` */
285
+ export function parseSwapusage(raw) {
286
+ const scale = { B: 1, K: 1024, M: 1024 ** 2, G: 1024 ** 3, T: 1024 ** 4 };
287
+ const read = (label) => {
288
+ const match = raw.match(new RegExp(`${label}\\s*=\\s*([\\d.]+)([BKMGT])`, 'i'));
289
+ if (!match)
290
+ return 0;
291
+ return (Number(match[1]) || 0) * (scale[match[2].toUpperCase()] ?? 1);
292
+ };
293
+ return { swapTotalBytes: read('total'), swapFreeBytes: read('free') };
294
+ }
295
+ /**
296
+ * Build one macOS sample, or null when this round cannot be trusted.
297
+ *
298
+ * The degradation rule, applied to every tool that defines a metric:
299
+ *
300
+ * - **deterministic** — binary absent, or output this host's OS version formats in a
301
+ * way we cannot parse → stable fallback. It applies to every sample on this host,
302
+ * so the series stays internally comparable and no step appears.
303
+ * - **transient** — the binary is there and normally parses, but *this call* failed
304
+ * (timeout, sandbox denial, exhausted budget) → return null. The caller renders
305
+ * "unsupported" for one round, which is honest; substituting the fallback for a
306
+ * single sample splices a second definition into a live series and draws a step
307
+ * that reads as a real spike (os.freemem() understates available memory; ps RSS
308
+ * runs ~2.7× phys_footprint).
309
+ *
310
+ * Order follows that rule: the mandatory process table first — with the whole budget,
311
+ * since losing it invalidates the sample and resets the dashboard's CPU and session
312
+ * baselines — then the cheap host counters, and only then the optional footprint pass.
313
+ */
314
+ export function sampleDarwin(nowMs, deps = {}) {
315
+ const run = deps.run ?? runTool;
316
+ const remainingMs = createSampleBudget(deps.nowFn ?? Date.now);
317
+ const ps = run(PS_BINS, ['-Ao', 'pid=,ppid=,rss=,time=,lstart='], remainingMs, SAMPLE_BUDGET_MS);
318
+ if (!ps.ok)
319
+ return null;
320
+ const processes = parsePsTable(ps.stdout);
321
+ if (processes.length === 0)
322
+ return null;
323
+ const totalBytes = totalmem();
324
+ const vmStat = run(VM_STAT_BINS, [], remainingMs);
325
+ if (!vmStat.ok && !vmStat.absent)
326
+ return null;
327
+ // os.freemem() on macOS counts only free+speculative pages, so it understates what
328
+ // is actually reclaimable. Reached only when vm_stat is absent or unparseable here.
329
+ const mem = (vmStat.ok ? parseVmStat(vmStat.stdout, totalBytes) : null)
330
+ ?? { memTotalBytes: totalBytes, memAvailableBytes: freemem() };
331
+ // Swap is exempt from the rule above: it is not written to any history series, so a
332
+ // missed reading shows as a zeroed swap gauge for one refresh and nothing more.
333
+ const swapRaw = run(SYSCTL_BINS, ['-n', 'vm.swapusage'], remainingMs);
334
+ const swap = parseSwapusage(swapRaw.ok ? swapRaw.stdout : '');
335
+ const [load1 = 0, load5 = 0, load15 = 0] = loadavg();
336
+ const cpuTicks = hostCpuTicks(cpus());
337
+ // phys_footprint per pid. Absent or unparseable top → every sample on this host
338
+ // reports ps RSS (stable). A failed top call, or a failed identity re-check that
339
+ // would silently leave RSS inside a footprint series → drop this sample.
340
+ const top = run(TOP_BINS, ['-l', '1', '-n', String(TOP_PROCESS_LIMIT), '-stats', 'pid,mem'], remainingMs);
341
+ if (!top.ok && !top.absent)
342
+ return null;
343
+ const footprints = top.ok ? parseTopFootprints(top.stdout) : new Map();
344
+ if (footprints.size > 0) {
345
+ const birthAfter = run(PS_BINS, ['-Ao', 'pid=,lstart='], remainingMs);
346
+ if (!birthAfter.ok)
347
+ return null;
348
+ applyFootprints(processes, footprints, parsePsBirthStamps(birthAfter.stdout));
349
+ }
350
+ return {
351
+ supported: true,
352
+ sampledAt: nowMs,
353
+ totalCpuTicks: cpuTicks.total,
354
+ idleCpuTicks: cpuTicks.idle,
355
+ loadavg: { load1, load5, load15 },
356
+ mem: { ...mem, ...swap },
357
+ processes,
358
+ };
359
+ }
360
+ //# sourceMappingURL=darwin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"darwin.js","sourceRoot":"","sources":["../../../src/core/resource-monitor/darwin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3C,MAAM,YAAY,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC1C,MAAM,WAAW,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;AACzD,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;AAClC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,iFAAiF;AACjF,mFAAmF;AACnF,qFAAqF;AACrF,wCAAwC;AACxC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,kFAAkF;AAClF,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,SAAS,aAAa,CAAC,UAAoB;IACzC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,KAAmB,EAAE,QAAQ,GAAG,gBAAgB;IACjF,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;IACpC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;AAC/C,CAAC;AAqBD,MAAM,OAAO,GAAe,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,GAAG,kBAAkB,EAAE,EAAE;IACxF,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtD,IAAI,CAAC;QACH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;gBAC9B,QAAQ,EAAE,OAAO;gBACjB,OAAO;gBACP,SAAS,EAAE,kBAAkB;gBAC7B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACnC,wEAAwE;gBACxE,8EAA8E;gBAC9E,GAAG,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,GAAG,EAAE;aAC1D,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;QACpE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7E,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,oFAAoF;AACpF,gFAAgF;AAChF,0EAA0E;AAC1E,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAC9D,MAAM,YAAY,GAAG,2DAA2D,CAAC;AAEjF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9F,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO;QACL,GAAG;QACH,IAAI;QACJ,QAAQ,EAAE,KAAK,GAAG,IAAI;QACtB,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,6EAA6E;IAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;IACzG,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC7B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QAClE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAkC,EAClC,UAA+B,EAC/B,UAA+B;IAE/B,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAClC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU;YAAE,SAAS;QAC3D,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,UAAkB;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/F,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO;QACL,aAAa,EAAE,UAAU;QACzB,iBAAiB,EAAE,WAAW,GAAG,QAAQ;KAC1C,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;IAClG,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACxE,CAAC;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAyB,EAAE;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;IAChC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/D,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,+BAA+B,CAAC,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACjG,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,UAAU,GAAG,QAAQ,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9C,mFAAmF;IACnF,oFAAoF;IACpF,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;WAClE,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;IAEjE,oFAAoF;IACpF,gFAAgF;IAChF,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtC,gFAAgF;IAChF,iFAAiF;IACjF,yEAAyE;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1G,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAkB,CAAC;IACvF,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAChC,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,QAAQ,CAAC,KAAK;QAC7B,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;QACjC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE;QACxB,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"procfs.d.ts","sourceRoot":"","sources":["../../../src/core/resource-monitor/procfs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AAiBtE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAG1F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAa7D;AAOD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAc1I;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAa,GAAG,YAAY,CAyD7D"}
1
+ {"version":3,"file":"procfs.d.ts","sourceRoot":"","sources":["../../../src/core/resource-monitor/procfs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AAiBtE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhF;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAG1F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAa7D;AAOD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAc1I;AAED,wBAAgB,YAAY,CAAC,KAAK,SAAa,GAAG,YAAY,CA6D7D"}
@@ -1,5 +1,6 @@
1
1
  import { readdirSync, readFileSync } from 'node:fs';
2
2
  import { platform } from 'node:os';
3
+ import { sampleDarwin } from './darwin.js';
3
4
  const PAGE_SIZE_BYTES = 4096;
4
5
  function unsupportedSample(sampledAt) {
5
6
  return {
@@ -69,6 +70,11 @@ export function parseProcessStat(raw) {
69
70
  return { pid, ppid, cpuTicks: utime + stime, startTicks, rssPages };
70
71
  }
71
72
  export function sampleProcfs(nowMs = Date.now()) {
73
+ // macOS has no /proc; darwin.ts rebuilds the same shape from ps/vm_stat/sysctl/top
74
+ // and returns null when those tools are unavailable (e.g. denied by a sandbox
75
+ // profile), which degrades to the same "unsupported" snapshot as any other platform.
76
+ if (platform() === 'darwin')
77
+ return sampleDarwin(nowMs) ?? unsupportedSample(nowMs);
72
78
  if (platform() !== 'linux')
73
79
  return unsupportedSample(nowMs);
74
80
  let procEntries;