@camstack/core 0.1.15 → 0.1.16

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 (382) hide show
  1. package/dist/addon/addon-api-factory.d.ts +36 -0
  2. package/dist/addon/addon-api-factory.d.ts.map +1 -0
  3. package/dist/addon-routes/addon-route-registry.d.ts +38 -0
  4. package/dist/addon-routes/addon-route-registry.d.ts.map +1 -0
  5. package/dist/auth/api-key-manager.d.ts +27 -0
  6. package/dist/auth/api-key-manager.d.ts.map +1 -0
  7. package/dist/auth/auth-manager.d.ts +47 -0
  8. package/dist/auth/auth-manager.d.ts.map +1 -0
  9. package/dist/auth/parse-record.d.ts +19 -0
  10. package/dist/auth/parse-record.d.ts.map +1 -0
  11. package/dist/auth/scoped-token-manager.d.ts +18 -0
  12. package/dist/auth/scoped-token-manager.d.ts.map +1 -0
  13. package/dist/auth/user-manager.d.ts +34 -0
  14. package/dist/auth/user-manager.d.ts.map +1 -0
  15. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -0
  16. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts.map +1 -0
  17. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +223 -217
  18. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js.map +1 -1
  19. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +216 -7
  20. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs.map +1 -1
  21. package/dist/builtins/addon-pages-aggregator/index.d.ts +2 -0
  22. package/dist/builtins/addon-pages-aggregator/index.d.ts.map +1 -0
  23. package/dist/builtins/addon-pages-aggregator/index.js +6 -221
  24. package/dist/builtins/addon-pages-aggregator/index.mjs +2 -9
  25. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +33 -0
  26. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts.map +1 -0
  27. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +199 -197
  28. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js.map +1 -1
  29. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +192 -7
  30. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs.map +1 -1
  31. package/dist/builtins/addon-widgets-aggregator/index.d.ts +2 -0
  32. package/dist/builtins/addon-widgets-aggregator/index.d.ts.map +1 -0
  33. package/dist/builtins/addon-widgets-aggregator/index.js +6 -201
  34. package/dist/builtins/addon-widgets-aggregator/index.mjs +2 -9
  35. package/dist/builtins/alerts/alerts.addon.d.ts +82 -0
  36. package/dist/builtins/alerts/alerts.addon.d.ts.map +1 -0
  37. package/dist/builtins/alerts/alerts.addon.js +590 -430
  38. package/dist/builtins/alerts/alerts.addon.js.map +1 -1
  39. package/dist/builtins/alerts/alerts.addon.mjs +595 -7
  40. package/dist/builtins/alerts/alerts.addon.mjs.map +1 -1
  41. package/dist/builtins/alerts/index.d.ts +2 -0
  42. package/dist/builtins/alerts/index.d.ts.map +1 -0
  43. package/dist/builtins/alerts/index.js +3 -443
  44. package/dist/builtins/alerts/index.mjs +2 -8
  45. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts +8 -0
  46. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts.map +1 -0
  47. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js +56 -0
  48. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js.map +1 -0
  49. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs +50 -0
  50. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs.map +1 -0
  51. package/dist/builtins/auth-orchestrator/index.d.ts +2 -0
  52. package/dist/builtins/auth-orchestrator/index.d.ts.map +1 -0
  53. package/dist/builtins/auth-orchestrator/index.js +7 -0
  54. package/dist/builtins/auth-orchestrator/index.mjs +2 -0
  55. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +148 -0
  56. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts.map +1 -0
  57. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +7639 -0
  58. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js.map +1 -0
  59. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +7627 -0
  60. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs.map +1 -0
  61. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +24 -0
  62. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts.map +1 -0
  63. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +73 -0
  64. package/dist/builtins/backup-orchestrator/destination-policy.d.ts.map +1 -0
  65. package/dist/builtins/backup-orchestrator/download-helpers.d.ts +13 -0
  66. package/dist/builtins/backup-orchestrator/download-helpers.d.ts.map +1 -0
  67. package/dist/builtins/backup-orchestrator/index.d.ts +3 -0
  68. package/dist/builtins/backup-orchestrator/index.d.ts.map +1 -0
  69. package/dist/builtins/backup-orchestrator/index.js +7 -0
  70. package/dist/builtins/backup-orchestrator/index.mjs +2 -0
  71. package/dist/builtins/backup-orchestrator/manifest-store.d.ts +78 -0
  72. package/dist/builtins/backup-orchestrator/manifest-store.d.ts.map +1 -0
  73. package/dist/builtins/console-logging/console-destination.d.ts +14 -0
  74. package/dist/builtins/console-logging/console-destination.d.ts.map +1 -0
  75. package/dist/builtins/console-logging/console-logging.addon.d.ts +26 -0
  76. package/dist/builtins/console-logging/console-logging.addon.d.ts.map +1 -0
  77. package/dist/builtins/console-logging/index.d.ts +4 -0
  78. package/dist/builtins/console-logging/index.d.ts.map +1 -0
  79. package/dist/builtins/console-logging/index.js +99 -235
  80. package/dist/builtins/console-logging/index.js.map +1 -1
  81. package/dist/builtins/console-logging/index.mjs +95 -9
  82. package/dist/builtins/console-logging/index.mjs.map +1 -1
  83. package/dist/builtins/device-manager/device-event-propagator.d.ts +27 -0
  84. package/dist/builtins/device-manager/device-event-propagator.d.ts.map +1 -0
  85. package/dist/builtins/device-manager/device-manager.addon.d.ts +259 -0
  86. package/dist/builtins/device-manager/device-manager.addon.d.ts.map +1 -0
  87. package/dist/builtins/device-manager/device-manager.addon.js +2125 -2127
  88. package/dist/builtins/device-manager/device-manager.addon.js.map +1 -1
  89. package/dist/builtins/device-manager/device-manager.addon.mjs +2145 -7
  90. package/dist/builtins/device-manager/device-manager.addon.mjs.map +1 -1
  91. package/dist/builtins/device-manager/index.d.ts +3 -0
  92. package/dist/builtins/device-manager/index.d.ts.map +1 -0
  93. package/dist/builtins/device-manager/index.js +6 -2156
  94. package/dist/builtins/device-manager/index.mjs +2 -10
  95. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +45 -0
  96. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts.map +1 -0
  97. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +16 -0
  98. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts.map +1 -0
  99. package/dist/builtins/hub-forwarder/index.d.ts +4 -0
  100. package/dist/builtins/hub-forwarder/index.d.ts.map +1 -0
  101. package/dist/builtins/hub-forwarder/index.js +150 -291
  102. package/dist/builtins/hub-forwarder/index.js.map +1 -1
  103. package/dist/builtins/hub-forwarder/index.mjs +145 -9
  104. package/dist/builtins/hub-forwarder/index.mjs.map +1 -1
  105. package/dist/builtins/local-auth/auth-schema.d.ts +12 -0
  106. package/dist/builtins/local-auth/auth-schema.d.ts.map +1 -0
  107. package/dist/builtins/local-auth/index.d.ts +2 -0
  108. package/dist/builtins/local-auth/index.d.ts.map +1 -0
  109. package/dist/builtins/local-auth/index.js +3 -623
  110. package/dist/builtins/local-auth/index.mjs +2 -8
  111. package/dist/builtins/local-auth/local-auth.addon.d.ts +17 -0
  112. package/dist/builtins/local-auth/local-auth.addon.d.ts.map +1 -0
  113. package/dist/builtins/local-auth/local-auth.addon.js +6861 -589
  114. package/dist/builtins/local-auth/local-auth.addon.js.map +1 -1
  115. package/dist/builtins/local-auth/local-auth.addon.mjs +6883 -7
  116. package/dist/builtins/local-auth/local-auth.addon.mjs.map +1 -1
  117. package/dist/builtins/local-network/index.d.ts +3 -0
  118. package/dist/builtins/local-network/index.d.ts.map +1 -0
  119. package/dist/builtins/local-network/index.js +9 -0
  120. package/dist/builtins/local-network/index.mjs +2 -0
  121. package/dist/builtins/local-network/local-network.addon.d.ts +102 -0
  122. package/dist/builtins/local-network/local-network.addon.d.ts.map +1 -0
  123. package/dist/builtins/local-network/local-network.addon.js +404 -0
  124. package/dist/builtins/local-network/local-network.addon.js.map +1 -0
  125. package/dist/builtins/local-network/local-network.addon.mjs +392 -0
  126. package/dist/builtins/local-network/local-network.addon.mjs.map +1 -0
  127. package/dist/builtins/mesh-orchestrator/index.d.ts +2 -0
  128. package/dist/builtins/mesh-orchestrator/index.d.ts.map +1 -0
  129. package/dist/builtins/mesh-orchestrator/index.js +7 -0
  130. package/dist/builtins/mesh-orchestrator/index.mjs +2 -0
  131. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts +9 -0
  132. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts.map +1 -0
  133. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js +83 -0
  134. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js.map +1 -0
  135. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs +77 -0
  136. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs.map +1 -0
  137. package/dist/builtins/native-metrics/index.d.ts +3 -0
  138. package/dist/builtins/native-metrics/index.d.ts.map +1 -0
  139. package/dist/builtins/native-metrics/native-metrics-provider.d.ts +49 -0
  140. package/dist/builtins/native-metrics/native-metrics-provider.d.ts.map +1 -0
  141. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +74 -0
  142. package/dist/builtins/native-metrics/native-metrics.addon.d.ts.map +1 -0
  143. package/dist/builtins/native-metrics/native-metrics.addon.js +887 -861
  144. package/dist/builtins/native-metrics/native-metrics.addon.js.map +1 -1
  145. package/dist/builtins/native-metrics/native-metrics.addon.mjs +914 -5
  146. package/dist/builtins/native-metrics/native-metrics.addon.mjs.map +1 -1
  147. package/dist/builtins/platform-probe/index.d.ts +12 -0
  148. package/dist/builtins/platform-probe/index.d.ts.map +1 -0
  149. package/dist/builtins/platform-probe/index.js +539 -0
  150. package/dist/builtins/platform-probe/index.js.map +1 -0
  151. package/dist/builtins/platform-probe/index.mjs +530 -0
  152. package/dist/builtins/platform-probe/index.mjs.map +1 -0
  153. package/dist/builtins/platform-probe/inference-config-resolver.d.ts +30 -0
  154. package/dist/builtins/platform-probe/inference-config-resolver.d.ts.map +1 -0
  155. package/dist/builtins/platform-probe/platform-scorer.d.ts +22 -0
  156. package/dist/builtins/platform-probe/platform-scorer.d.ts.map +1 -0
  157. package/dist/builtins/remote-access-orchestrator/index.d.ts +2 -0
  158. package/dist/builtins/remote-access-orchestrator/index.d.ts.map +1 -0
  159. package/dist/builtins/remote-access-orchestrator/index.js +7 -0
  160. package/dist/builtins/remote-access-orchestrator/index.mjs +2 -0
  161. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +9 -0
  162. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts.map +1 -0
  163. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +72 -0
  164. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js.map +1 -0
  165. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +66 -0
  166. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs.map +1 -0
  167. package/dist/builtins/snapshot/index.d.ts +3 -0
  168. package/dist/builtins/snapshot/index.d.ts.map +1 -0
  169. package/dist/builtins/snapshot/index.js +481 -491
  170. package/dist/builtins/snapshot/index.js.map +1 -1
  171. package/dist/builtins/snapshot/index.mjs +475 -464
  172. package/dist/builtins/snapshot/index.mjs.map +1 -1
  173. package/dist/builtins/snapshot/snapshot.addon.d.ts +121 -0
  174. package/dist/builtins/snapshot/snapshot.addon.d.ts.map +1 -0
  175. package/dist/builtins/sqlite-storage/config-store.d.ts +9 -0
  176. package/dist/builtins/sqlite-storage/config-store.d.ts.map +1 -0
  177. package/dist/builtins/sqlite-storage/device-store.d.ts +24 -0
  178. package/dist/builtins/sqlite-storage/device-store.d.ts.map +1 -0
  179. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +87 -0
  180. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts.map +1 -0
  181. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +32 -0
  182. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts.map +1 -0
  183. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +312 -56
  184. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js.map +1 -1
  185. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +305 -7
  186. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs.map +1 -1
  187. package/dist/builtins/sqlite-storage/index.d.ts +12 -0
  188. package/dist/builtins/sqlite-storage/index.d.ts.map +1 -0
  189. package/dist/builtins/sqlite-storage/index.js +229 -1001
  190. package/dist/builtins/sqlite-storage/index.js.map +1 -1
  191. package/dist/builtins/sqlite-storage/index.mjs +268 -26
  192. package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
  193. package/dist/builtins/sqlite-storage/integration-registry.d.ts +28 -0
  194. package/dist/builtins/sqlite-storage/integration-registry.d.ts.map +1 -0
  195. package/dist/builtins/sqlite-storage/settings-store.d.ts +40 -0
  196. package/dist/builtins/sqlite-storage/settings-store.d.ts.map +1 -0
  197. package/dist/builtins/sqlite-storage/sql-schema.d.ts +33 -0
  198. package/dist/builtins/sqlite-storage/sql-schema.d.ts.map +1 -0
  199. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +94 -0
  200. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts.map +1 -0
  201. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +15 -0
  202. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts.map +1 -0
  203. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +586 -653
  204. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js.map +1 -1
  205. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +582 -7
  206. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs.map +1 -1
  207. package/dist/builtins/storage-orchestrator/index.d.ts +7 -0
  208. package/dist/builtins/storage-orchestrator/index.d.ts.map +1 -0
  209. package/dist/builtins/storage-orchestrator/index.js +9 -0
  210. package/dist/builtins/storage-orchestrator/index.mjs +2 -0
  211. package/dist/builtins/storage-orchestrator/location-store.d.ts +50 -0
  212. package/dist/builtins/storage-orchestrator/location-store.d.ts.map +1 -0
  213. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +60 -0
  214. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts.map +1 -0
  215. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +755 -0
  216. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js.map +1 -0
  217. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +746 -0
  218. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs.map +1 -0
  219. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +121 -0
  220. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts.map +1 -0
  221. package/dist/builtins/system-backup/system-backup.service.d.ts +138 -0
  222. package/dist/builtins/system-backup/system-backup.service.d.ts.map +1 -0
  223. package/dist/builtins/system-config/index.d.ts +2 -0
  224. package/dist/builtins/system-config/index.d.ts.map +1 -0
  225. package/dist/builtins/system-config/index.js +6 -188
  226. package/dist/builtins/system-config/index.mjs +2 -10
  227. package/dist/builtins/system-config/system-config.addon.d.ts +11 -0
  228. package/dist/builtins/system-config/system-config.addon.d.ts.map +1 -0
  229. package/dist/builtins/system-config/system-config.addon.js +227 -180
  230. package/dist/builtins/system-config/system-config.addon.js.map +1 -1
  231. package/dist/builtins/system-config/system-config.addon.mjs +226 -7
  232. package/dist/builtins/system-config/system-config.addon.mjs.map +1 -1
  233. package/dist/builtins/turn-orchestrator/index.d.ts +2 -0
  234. package/dist/builtins/turn-orchestrator/index.d.ts.map +1 -0
  235. package/dist/builtins/turn-orchestrator/index.js +7 -0
  236. package/dist/builtins/turn-orchestrator/index.mjs +2 -0
  237. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts +10 -0
  238. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts.map +1 -0
  239. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js +78 -0
  240. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js.map +1 -0
  241. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs +72 -0
  242. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs.map +1 -0
  243. package/dist/builtins/winston-logging/index.d.ts +4 -0
  244. package/dist/builtins/winston-logging/index.d.ts.map +1 -0
  245. package/dist/builtins/winston-logging/index.js +153 -300
  246. package/dist/builtins/winston-logging/index.js.map +1 -1
  247. package/dist/builtins/winston-logging/index.mjs +144 -9
  248. package/dist/builtins/winston-logging/index.mjs.map +1 -1
  249. package/dist/builtins/winston-logging/winston-destination.d.ts +22 -0
  250. package/dist/builtins/winston-logging/winston-destination.d.ts.map +1 -0
  251. package/dist/builtins/winston-logging/winston-logging.addon.d.ts +20 -0
  252. package/dist/builtins/winston-logging/winston-logging.addon.d.ts.map +1 -0
  253. package/dist/chunk-C13QxCFV.js +50 -0
  254. package/dist/chunk-hT5z_Zn9.mjs +35 -0
  255. package/dist/download/model-download-service.d.ts +42 -0
  256. package/dist/download/model-download-service.d.ts.map +1 -0
  257. package/dist/download/model-downloader.d.ts +32 -0
  258. package/dist/download/model-downloader.d.ts.map +1 -0
  259. package/dist/events/event-bus.d.ts +11 -0
  260. package/dist/events/event-bus.d.ts.map +1 -0
  261. package/dist/events/system-event-bus.d.ts +15 -0
  262. package/dist/events/system-event-bus.d.ts.map +1 -0
  263. package/dist/feature/feature-manager.d.ts +12 -0
  264. package/dist/feature/feature-manager.d.ts.map +1 -0
  265. package/dist/formatter-C-5An4Bl.mjs +164 -0
  266. package/dist/formatter-C-5An4Bl.mjs.map +1 -0
  267. package/dist/formatter-Dr_6NNZc.js +169 -0
  268. package/dist/formatter-Dr_6NNZc.js.map +1 -0
  269. package/dist/index.d.ts +76 -1696
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.js +7780 -8035
  272. package/dist/index.js.map +1 -1
  273. package/dist/index.mjs +7707 -2148
  274. package/dist/index.mjs.map +1 -1
  275. package/dist/lifecycle/lifecycle-state-machine.d.ts +29 -0
  276. package/dist/lifecycle/lifecycle-state-machine.d.ts.map +1 -0
  277. package/dist/logging/formatter.d.ts +31 -0
  278. package/dist/logging/formatter.d.ts.map +1 -0
  279. package/dist/logging/log-manager.d.ts +52 -0
  280. package/dist/logging/log-manager.d.ts.map +1 -0
  281. package/dist/logging/log-ring-buffer.d.ts +48 -0
  282. package/dist/logging/log-ring-buffer.d.ts.map +1 -0
  283. package/dist/logging/scoped-logger.d.ts +18 -0
  284. package/dist/logging/scoped-logger.d.ts.map +1 -0
  285. package/dist/network/network-quality.d.ts +12 -0
  286. package/dist/network/network-quality.d.ts.map +1 -0
  287. package/dist/notification/notification-service.d.ts +38 -0
  288. package/dist/notification/notification-service.d.ts.map +1 -0
  289. package/dist/notification/toast-service.d.ts +23 -0
  290. package/dist/notification/toast-service.d.ts.map +1 -0
  291. package/dist/pipeline/engine-manager-resolver.d.ts +16 -0
  292. package/dist/pipeline/engine-manager-resolver.d.ts.map +1 -0
  293. package/dist/pipeline/pipeline-runner.d.ts +9 -0
  294. package/dist/pipeline/pipeline-runner.d.ts.map +1 -0
  295. package/dist/pipeline/pipeline-validator.d.ts +14 -0
  296. package/dist/pipeline/pipeline-validator.d.ts.map +1 -0
  297. package/dist/process/resource-monitor.d.ts +12 -0
  298. package/dist/process/resource-monitor.d.ts.map +1 -0
  299. package/dist/python/python-env-manager.d.ts +13 -0
  300. package/dist/python/python-env-manager.d.ts.map +1 -0
  301. package/dist/repl/interfaces.d.ts +32 -0
  302. package/dist/repl/interfaces.d.ts.map +1 -0
  303. package/dist/repl/repl-engine.d.ts +9 -0
  304. package/dist/repl/repl-engine.d.ts.map +1 -0
  305. package/dist/resource-monitor-CmuWlmap.js +76 -0
  306. package/dist/resource-monitor-CmuWlmap.js.map +1 -0
  307. package/dist/resource-monitor-DcQdKGYU.mjs +59 -0
  308. package/dist/resource-monitor-DcQdKGYU.mjs.map +1 -0
  309. package/dist/storage/fs-storage-backend.d.ts +41 -0
  310. package/dist/storage/fs-storage-backend.d.ts.map +1 -0
  311. package/dist/storage/storage-location-manager.d.ts +24 -0
  312. package/dist/storage/storage-location-manager.d.ts.map +1 -0
  313. package/dist/storage/storage-manager.d.ts +77 -0
  314. package/dist/storage/storage-manager.d.ts.map +1 -0
  315. package/dist/tls/cert-manager.d.ts +27 -0
  316. package/dist/tls/cert-manager.d.ts.map +1 -0
  317. package/dist/tls/index.d.ts +2 -0
  318. package/dist/tls/index.d.ts.map +1 -0
  319. package/package.json +119 -23
  320. package/dist/builtins/addon-pages-aggregator/index.js.map +0 -1
  321. package/dist/builtins/addon-pages-aggregator/index.mjs.map +0 -1
  322. package/dist/builtins/addon-widgets-aggregator/index.js.map +0 -1
  323. package/dist/builtins/addon-widgets-aggregator/index.mjs.map +0 -1
  324. package/dist/builtins/alerts/index.js.map +0 -1
  325. package/dist/builtins/alerts/index.mjs.map +0 -1
  326. package/dist/builtins/device-manager/index.js.map +0 -1
  327. package/dist/builtins/device-manager/index.mjs.map +0 -1
  328. package/dist/builtins/local-auth/index.js.map +0 -1
  329. package/dist/builtins/local-auth/index.mjs.map +0 -1
  330. package/dist/builtins/local-backup/index.js +0 -173
  331. package/dist/builtins/local-backup/index.js.map +0 -1
  332. package/dist/builtins/local-backup/index.mjs +0 -10
  333. package/dist/builtins/local-backup/index.mjs.map +0 -1
  334. package/dist/builtins/system-config/index.js.map +0 -1
  335. package/dist/builtins/system-config/index.mjs.map +0 -1
  336. package/dist/chunk-2CIYKDRN.mjs +0 -1
  337. package/dist/chunk-2CIYKDRN.mjs.map +0 -1
  338. package/dist/chunk-2F76X6NL.mjs +0 -136
  339. package/dist/chunk-2F76X6NL.mjs.map +0 -1
  340. package/dist/chunk-2QUFBZ7M.mjs +0 -1
  341. package/dist/chunk-2QUFBZ7M.mjs.map +0 -1
  342. package/dist/chunk-3BK2Y7GY.mjs +0 -593
  343. package/dist/chunk-3BK2Y7GY.mjs.map +0 -1
  344. package/dist/chunk-4OOHFJHT.mjs +0 -421
  345. package/dist/chunk-4OOHFJHT.mjs.map +0 -1
  346. package/dist/chunk-4XHB7IHT.mjs +0 -809
  347. package/dist/chunk-4XHB7IHT.mjs.map +0 -1
  348. package/dist/chunk-6M2HSSTQ.mjs +0 -98
  349. package/dist/chunk-6M2HSSTQ.mjs.map +0 -1
  350. package/dist/chunk-7FI7SQS7.mjs +0 -135
  351. package/dist/chunk-7FI7SQS7.mjs.map +0 -1
  352. package/dist/chunk-ED57RCQE.mjs +0 -171
  353. package/dist/chunk-ED57RCQE.mjs.map +0 -1
  354. package/dist/chunk-FZN56HGQ.mjs +0 -626
  355. package/dist/chunk-FZN56HGQ.mjs.map +0 -1
  356. package/dist/chunk-GL4OOB25.mjs +0 -51
  357. package/dist/chunk-GL4OOB25.mjs.map +0 -1
  358. package/dist/chunk-KDG2NTDB.mjs +0 -137
  359. package/dist/chunk-KDG2NTDB.mjs.map +0 -1
  360. package/dist/chunk-NRBQWBDM.mjs +0 -191
  361. package/dist/chunk-NRBQWBDM.mjs.map +0 -1
  362. package/dist/chunk-O4V246GG.mjs +0 -2137
  363. package/dist/chunk-O4V246GG.mjs.map +0 -1
  364. package/dist/chunk-QT57H266.mjs +0 -163
  365. package/dist/chunk-QT57H266.mjs.map +0 -1
  366. package/dist/chunk-QX4RH25I.mjs +0 -141
  367. package/dist/chunk-QX4RH25I.mjs.map +0 -1
  368. package/dist/chunk-TB562PZX.mjs +0 -86
  369. package/dist/chunk-TB562PZX.mjs.map +0 -1
  370. package/dist/chunk-TDYPZXK5.mjs +0 -1
  371. package/dist/chunk-TDYPZXK5.mjs.map +0 -1
  372. package/dist/chunk-UJI4LN5P.mjs +0 -36
  373. package/dist/chunk-UJI4LN5P.mjs.map +0 -1
  374. package/dist/chunk-W6RTHQGP.mjs +0 -1
  375. package/dist/chunk-W6RTHQGP.mjs.map +0 -1
  376. package/dist/chunk-ZELBCPDC.mjs +0 -369
  377. package/dist/chunk-ZELBCPDC.mjs.map +0 -1
  378. package/dist/index.d.mts +0 -1696
  379. package/dist/resource-monitor-UZUGPIAU.mjs +0 -9
  380. package/dist/resource-monitor-UZUGPIAU.mjs.map +0 -1
  381. package/dist/storage-location-manager-HFNB3PCS.mjs +0 -7
  382. package/dist/storage-location-manager-HFNB3PCS.mjs.map +0 -1
@@ -0,0 +1,539 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_chunk = require("../../chunk-C13QxCFV.js");
6
+ let node_child_process = require("node:child_process");
7
+ let node_util = require("node:util");
8
+ let _camstack_types = require("@camstack/types");
9
+ let node_os = require("node:os");
10
+ node_os = require_chunk.__toESM(node_os);
11
+ //#region src/builtins/platform-probe/platform-scorer.ts
12
+ /**
13
+ * Promisified `execFile`. Used across the scorer so every subprocess
14
+ * spawn yields the event loop — critical at boot because a single sync
15
+ * spawn of a missing Python module hits its 30s timeout and freezes the
16
+ * entire Node process (WS handshakes, tRPC subscriptions, metrics — all
17
+ * stalled). Keeping it async turns the probe into a true background task.
18
+ */
19
+ var execFileAsync = (0, node_util.promisify)(node_child_process.execFile);
20
+ /** Minimal no-op logger for default parameter */
21
+ var noopLogger = {
22
+ debug() {},
23
+ info() {},
24
+ warn() {},
25
+ error() {},
26
+ child() {
27
+ return noopLogger;
28
+ },
29
+ withTags() {
30
+ return noopLogger;
31
+ }
32
+ };
33
+ /**
34
+ * Get reliable "available" RAM in MB, cross-platform.
35
+ * os.freemem() is unreliable on macOS (reports ~200MB on a 36GB system).
36
+ * Uses systeminformation when available, falls back to native commands.
37
+ */
38
+ async function getAvailableRAM_MB() {
39
+ try {
40
+ const mem = await (await import("systeminformation")).mem();
41
+ return Math.round(mem.available / 1024 / 1024);
42
+ } catch (err) {
43
+ console.debug(`systeminformation not available, using platform-specific RAM probe: ${(0, _camstack_types.errMsg)(err)}`);
44
+ const platform = node_os.platform();
45
+ try {
46
+ if (platform === "darwin") {
47
+ const { stdout: output } = await execFileAsync("vm_stat", [], {
48
+ encoding: "utf8",
49
+ timeout: 3e3
50
+ });
51
+ const pageSize = parseInt(output.match(/page size of (\d+)/)?.[1] ?? "16384");
52
+ const free = parseInt(output.match(/Pages free:\s+(\d+)/)?.[1] ?? "0");
53
+ const inactive = parseInt(output.match(/Pages inactive:\s+(\d+)/)?.[1] ?? "0");
54
+ const purgeable = parseInt(output.match(/Pages purgeable:\s+(\d+)/)?.[1] ?? "0");
55
+ return Math.round((free + inactive + purgeable) * pageSize / 1024 / 1024);
56
+ } else if (platform === "linux") {
57
+ const { readFileSync } = await import("node:fs");
58
+ const match = readFileSync("/proc/meminfo", "utf8").match(/MemAvailable:\s+(\d+)\s+kB/);
59
+ if (match) return Math.round(parseInt(match[1]) / 1024);
60
+ }
61
+ } catch (err) {
62
+ console.debug(`RAM probe failed, using total RAM fallback: ${(0, _camstack_types.errMsg)(err)}`);
63
+ }
64
+ return Math.round(node_os.totalmem() / 1024 / 1024);
65
+ }
66
+ }
67
+ var PlatformScorer = class {
68
+ cached = null;
69
+ logger;
70
+ constructor(logger = noopLogger) {
71
+ this.logger = logger;
72
+ }
73
+ /**
74
+ * Probe hardware + runtimes and score all backend combos.
75
+ *
76
+ * An optional `onPhase` callback is invoked at each step so consumers
77
+ * (e.g. the platform-probe addon) can emit live progress events on
78
+ * the event bus. The callback takes a phase id + a typed payload; all
79
+ * phases fire in strict order: `started` → `hardware` → `node-backends`
80
+ * → `python-backends` → `scored` → `done`. On failure, `error` fires
81
+ * once with the exception. Cached after first call.
82
+ */
83
+ async probe(onPhase) {
84
+ if (this.cached) return this.cached;
85
+ const start = Date.now();
86
+ onPhase?.("started", {});
87
+ this.logger.info("Probing hardware...");
88
+ const hardware = await this.probeHardware();
89
+ this.logger.info("Hardware detected", { meta: {
90
+ platform: hardware.platform,
91
+ arch: hardware.arch,
92
+ cpuModel: hardware.cpuModel,
93
+ cpuCores: hardware.cpuCores,
94
+ ramGB: Math.round(hardware.totalRAM_MB / 1024)
95
+ } });
96
+ if (hardware.gpu) this.logger.info("GPU detected", { meta: { name: hardware.gpu.name } });
97
+ if (hardware.npu) this.logger.info("NPU detected", { meta: { type: hardware.npu.type } });
98
+ onPhase?.("hardware", { hardware });
99
+ this.logger.info("Probing Node.js backends...");
100
+ const nodeBackends = await this.probeNodeBackends();
101
+ this.logger.info("Node backends detected", { meta: { backends: nodeBackends.map((b) => b.id) } });
102
+ onPhase?.("node-backends", { backends: nodeBackends });
103
+ this.logger.info("Probing Python backends...");
104
+ const pythonInfo = await this.probePythonBackends();
105
+ if (pythonInfo.pythonPath) this.logger.info("Python backends detected", { meta: {
106
+ pythonPath: pythonInfo.pythonPath,
107
+ backends: pythonInfo.backends.filter((b) => b.available).map((b) => b.id)
108
+ } });
109
+ else this.logger.info("Python: not found");
110
+ onPhase?.("python-backends", {
111
+ pythonPath: pythonInfo.pythonPath,
112
+ backends: pythonInfo.backends
113
+ });
114
+ const scores = this.scoreBackends(hardware, nodeBackends, pythonInfo.backends);
115
+ const bestScore = scores.find((s) => s.available) ?? scores[scores.length - 1];
116
+ const elapsed = Date.now() - start;
117
+ this.logger.info("Scoring complete", { meta: {
118
+ elapsedMs: elapsed,
119
+ combos: scores.length
120
+ } });
121
+ this.logger.info("Best backend selected", { meta: {
122
+ runtime: bestScore.runtime,
123
+ backend: bestScore.backend,
124
+ format: bestScore.format,
125
+ reason: bestScore.reason,
126
+ score: bestScore.score
127
+ } });
128
+ for (const s of scores) this.logger.debug("Score entry", { meta: {
129
+ available: s.available,
130
+ runtime: s.runtime,
131
+ backend: s.backend,
132
+ format: s.format,
133
+ score: s.score,
134
+ reason: s.reason
135
+ } });
136
+ this.cached = {
137
+ hardware,
138
+ scores,
139
+ bestScore,
140
+ pythonPath: pythonInfo.pythonPath
141
+ };
142
+ onPhase?.("scored", {
143
+ scores,
144
+ bestScore,
145
+ elapsedMs: elapsed
146
+ });
147
+ onPhase?.("done", { capabilities: this.cached });
148
+ return this.cached;
149
+ }
150
+ async probeHardware() {
151
+ const platform = node_os.platform();
152
+ const arch = node_os.arch();
153
+ const cpus = node_os.cpus();
154
+ const cpuModel = cpus[0]?.model ?? "unknown";
155
+ const cpuCores = cpus.length;
156
+ const totalRAM_MB = Math.round(node_os.totalmem() / 1024 / 1024);
157
+ const availableRAM_MB = await getAvailableRAM_MB();
158
+ this.logger.debug("RAM probed", { meta: {
159
+ totalRAM_MB,
160
+ availableRAM_MB
161
+ } });
162
+ let gpu = null;
163
+ let npu = null;
164
+ if (platform === "darwin" && arch === "arm64") {
165
+ gpu = {
166
+ type: "apple",
167
+ name: "Apple Silicon GPU"
168
+ };
169
+ npu = { type: "apple-ane" };
170
+ }
171
+ if (platform === "linux") try {
172
+ const { stdout } = await execFileAsync("nvidia-smi", ["--query-gpu=name,memory.total", "--format=csv,noheader"], {
173
+ encoding: "utf8",
174
+ timeout: 5e3
175
+ });
176
+ const output = stdout.trim();
177
+ if (output) {
178
+ const [name, mem] = output.split(",").map((s) => s.trim());
179
+ gpu = {
180
+ type: "nvidia",
181
+ name: name ?? "NVIDIA GPU",
182
+ memoryMB: parseInt(mem ?? "0")
183
+ };
184
+ }
185
+ } catch (err) {
186
+ this.logger.debug("NVIDIA GPU detection failed", { meta: { error: (0, _camstack_types.errMsg)(err) } });
187
+ }
188
+ return {
189
+ platform,
190
+ arch,
191
+ cpuModel,
192
+ cpuCores,
193
+ totalRAM_MB,
194
+ availableRAM_MB,
195
+ gpu,
196
+ npu
197
+ };
198
+ }
199
+ async probeNodeBackends() {
200
+ const backends = [{
201
+ id: "cpu",
202
+ available: true
203
+ }];
204
+ try {
205
+ const providers = (await import("onnxruntime-node")).InferenceSession?.getAvailableProviders?.() ?? [];
206
+ for (const p of providers) {
207
+ const n = p.toLowerCase().replace("executionprovider", "");
208
+ if (n === "coreml") backends.push({
209
+ id: "coreml",
210
+ available: true
211
+ });
212
+ else if (n === "cuda") backends.push({
213
+ id: "cuda",
214
+ available: true
215
+ });
216
+ else if (n === "tensorrt") backends.push({
217
+ id: "tensorrt",
218
+ available: true
219
+ });
220
+ }
221
+ } catch (err) {
222
+ this.logger.debug("onnxruntime-node not available", { meta: { error: (0, _camstack_types.errMsg)(err) } });
223
+ }
224
+ if (node_os.platform() === "darwin" && !backends.some((b) => b.id === "coreml")) backends.push({
225
+ id: "coreml",
226
+ available: true
227
+ });
228
+ return backends;
229
+ }
230
+ async probePythonBackends() {
231
+ let pythonPath = null;
232
+ for (const cmd of ["python3", "python"]) try {
233
+ await execFileAsync(cmd, ["--version"], { timeout: 5e3 });
234
+ pythonPath = cmd;
235
+ break;
236
+ } catch (err) {
237
+ console.debug(`Python command "${cmd}" not found: ${(0, _camstack_types.errMsg)(err)}`);
238
+ }
239
+ if (!pythonPath) return {
240
+ pythonPath: null,
241
+ backends: []
242
+ };
243
+ const results = await Promise.all([
244
+ [
245
+ "coremltools",
246
+ "coreml",
247
+ "coreml"
248
+ ],
249
+ [
250
+ "openvino.runtime",
251
+ "openvino",
252
+ "openvino"
253
+ ],
254
+ [
255
+ "torch",
256
+ "pytorch",
257
+ "onnx"
258
+ ],
259
+ [
260
+ "onnxruntime",
261
+ "onnx-py",
262
+ "onnx"
263
+ ]
264
+ ].map(async ([mod, id, format]) => {
265
+ const probeStart = Date.now();
266
+ let available = false;
267
+ try {
268
+ await execFileAsync(pythonPath, ["-c", `import ${mod}`], { timeout: 3e4 });
269
+ available = true;
270
+ } catch (err) {
271
+ console.debug(`Python module "${mod}" not installed: ${(0, _camstack_types.errMsg)(err)}`);
272
+ }
273
+ const probeMs = Date.now() - probeStart;
274
+ this.logger.debug("Python module probed", { meta: {
275
+ module: mod,
276
+ available,
277
+ probeMs
278
+ } });
279
+ return {
280
+ mod,
281
+ id,
282
+ format,
283
+ available
284
+ };
285
+ }));
286
+ const backends = [];
287
+ for (const r of results) if (r.id === "coreml" && node_os.platform() === "darwin") backends.push({
288
+ id: r.id,
289
+ format: r.format,
290
+ available: r.available
291
+ });
292
+ else if (r.available) backends.push({
293
+ id: r.id,
294
+ format: r.format,
295
+ available: r.available
296
+ });
297
+ return {
298
+ pythonPath,
299
+ backends
300
+ };
301
+ }
302
+ scoreBackends(hardware, nodeBackends, pythonBackends) {
303
+ const scores = [];
304
+ if (hardware.platform === "darwin" && hardware.arch === "arm64") {
305
+ const pyCoreMl = pythonBackends.find((b) => b.id === "coreml");
306
+ if (pyCoreMl) scores.push({
307
+ runtime: "python",
308
+ backend: "coreml",
309
+ format: "coreml",
310
+ score: 95,
311
+ reason: "Apple Neural Engine (Python CoreML)",
312
+ available: pyCoreMl.available
313
+ });
314
+ const nodeCoreMl = nodeBackends.find((b) => b.id === "coreml");
315
+ if (nodeCoreMl) scores.push({
316
+ runtime: "node",
317
+ backend: "coreml",
318
+ format: "onnx",
319
+ score: 90,
320
+ reason: "CoreML via ONNX Runtime",
321
+ available: nodeCoreMl.available
322
+ });
323
+ }
324
+ if (hardware.gpu?.type === "nvidia") {
325
+ if (nodeBackends.find((b) => b.id === "tensorrt")) scores.push({
326
+ runtime: "node",
327
+ backend: "tensorrt",
328
+ format: "onnx",
329
+ score: 95,
330
+ reason: "NVIDIA TensorRT",
331
+ available: true
332
+ });
333
+ if (nodeBackends.find((b) => b.id === "cuda")) scores.push({
334
+ runtime: "node",
335
+ backend: "cuda",
336
+ format: "onnx",
337
+ score: 85,
338
+ reason: "NVIDIA CUDA",
339
+ available: true
340
+ });
341
+ }
342
+ const openvino = pythonBackends.find((b) => b.id === "openvino");
343
+ if (openvino) {
344
+ const score = hardware.npu?.type === "intel-npu" ? 90 : 80;
345
+ scores.push({
346
+ runtime: "python",
347
+ backend: "openvino",
348
+ format: "openvino",
349
+ score,
350
+ reason: "Intel OpenVINO",
351
+ available: openvino.available
352
+ });
353
+ }
354
+ scores.push({
355
+ runtime: "node",
356
+ backend: "cpu",
357
+ format: "onnx",
358
+ score: 50,
359
+ reason: "CPU (ONNX Runtime Node)",
360
+ available: true
361
+ });
362
+ const pyOnnx = pythonBackends.find((b) => b.id === "onnx-py");
363
+ if (pyOnnx) scores.push({
364
+ runtime: "python",
365
+ backend: "cpu",
366
+ format: "onnx",
367
+ score: 45,
368
+ reason: "CPU (Python ONNX)",
369
+ available: pyOnnx.available
370
+ });
371
+ return scores.sort((a, b) => b.score - a.score);
372
+ }
373
+ };
374
+ //#endregion
375
+ //#region src/builtins/platform-probe/inference-config-resolver.ts
376
+ var InferenceConfigResolver = class {
377
+ constructor(scores, hardware) {
378
+ this.scores = scores;
379
+ this.hardware = hardware;
380
+ }
381
+ /**
382
+ * Compute accuracy/backend weights based on available system RAM.
383
+ * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),
384
+ * not os.freemem() which is broken on macOS.
385
+ *
386
+ * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)
387
+ * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)
388
+ * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)
389
+ */
390
+ getWeights() {
391
+ const ramMB = this.hardware.availableRAM_MB;
392
+ if (ramMB > 16384) return {
393
+ accuracyWeight: .6,
394
+ backendWeight: .4
395
+ };
396
+ if (ramMB > 8192) return {
397
+ accuracyWeight: .5,
398
+ backendWeight: .5
399
+ };
400
+ return {
401
+ accuracyWeight: .4,
402
+ backendWeight: .6
403
+ };
404
+ }
405
+ /**
406
+ * Given an addon's model requirements, pick the best model + runtime + backend.
407
+ *
408
+ * Algorithm:
409
+ * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)
410
+ * 2. For each remaining model, find the best platform score whose format
411
+ * is available in the model's formats
412
+ * 3. Pick the model with the highest combined score using RAM-adaptive weights:
413
+ * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)
414
+ * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)
415
+ * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)
416
+ */
417
+ resolve(requirements) {
418
+ if (requirements.length === 0) return {
419
+ modelId: "",
420
+ runtime: "node",
421
+ backend: "cpu",
422
+ format: "onnx",
423
+ reason: "No models declared"
424
+ };
425
+ const ramBudget = this.hardware.availableRAM_MB * .25;
426
+ const { accuracyWeight, backendWeight } = this.getWeights();
427
+ console.log(`[InferenceConfigResolver] availableRAM: ${this.hardware.availableRAM_MB}MB, budget: ${Math.round(ramBudget)}MB, weights: accuracy=${accuracyWeight}, backend=${backendWeight}`);
428
+ const fits = requirements.filter((m) => m.minRAM_MB < ramBudget);
429
+ const candidates = fits.length > 0 ? fits : [requirements[0]];
430
+ console.log(`[InferenceConfigResolver] ${candidates.length}/${requirements.length} models fit RAM budget`);
431
+ let bestCombo = null;
432
+ for (const model of candidates) for (const score of this.scores) {
433
+ if (!score.available) continue;
434
+ if (!model.formats.includes(score.format)) continue;
435
+ const combined = model.accuracyScore * accuracyWeight + score.score * backendWeight;
436
+ if (!bestCombo || combined > bestCombo.combined) {
437
+ console.log(`[InferenceConfigResolver] New best: ${model.modelId} (accuracy=${model.accuracyScore}) + ${score.backend}/${score.format} (score=${score.score}) → combined=${Math.round(combined)}`);
438
+ bestCombo = {
439
+ model,
440
+ score,
441
+ combined
442
+ };
443
+ }
444
+ }
445
+ if (!bestCombo) return {
446
+ modelId: candidates[0].modelId,
447
+ runtime: "node",
448
+ backend: "cpu",
449
+ format: "onnx",
450
+ reason: "No compatible backend — CPU fallback"
451
+ };
452
+ return {
453
+ modelId: bestCombo.model.modelId,
454
+ runtime: bestCombo.score.runtime,
455
+ backend: bestCombo.score.backend,
456
+ format: bestCombo.score.format,
457
+ reason: `${bestCombo.model.name} on ${bestCombo.score.reason} (score: ${Math.round(bestCombo.combined)})`
458
+ };
459
+ }
460
+ };
461
+ //#endregion
462
+ //#region src/builtins/platform-probe/index.ts
463
+ var PlatformProbeNativeAddon = class extends _camstack_types.BaseAddon {
464
+ scorer = null;
465
+ cachedCaps = null;
466
+ constructor() {
467
+ super({});
468
+ }
469
+ async onInitialize() {
470
+ this.scorer = new PlatformScorer(this.ctx.logger);
471
+ const emitPhase = (phase, payload) => {
472
+ this.ctx.eventBus?.emit({
473
+ id: `platform-probe-${phase}-${Date.now()}`,
474
+ timestamp: /* @__PURE__ */ new Date(),
475
+ source: {
476
+ type: "core",
477
+ id: "platform-probe-native"
478
+ },
479
+ category: _camstack_types.EventCategory.PlatformProbePhase,
480
+ data: {
481
+ type: "platform-probe.phase",
482
+ phase,
483
+ ...payload ?? {}
484
+ }
485
+ });
486
+ };
487
+ const probePromise = this.scorer.probe(emitPhase).then((caps) => {
488
+ this.cachedCaps = caps;
489
+ this.ctx.logger.info("Platform probe complete", { meta: {
490
+ cpuModel: caps.hardware.cpuModel,
491
+ arch: caps.hardware.arch,
492
+ totalRAM_MB: caps.hardware.totalRAM_MB,
493
+ gpu: caps.hardware.gpu?.name ?? "none",
494
+ bestReason: caps.bestScore.reason,
495
+ bestScore: caps.bestScore.score
496
+ } });
497
+ return caps;
498
+ }).catch((err) => {
499
+ const msg = (0, _camstack_types.errMsg)(err);
500
+ this.ctx.logger.error("Platform probe failed", { meta: { error: msg } });
501
+ emitPhase("error", { message: msg });
502
+ throw err;
503
+ });
504
+ const getCaps = async () => {
505
+ return this.cachedCaps ?? probePromise;
506
+ };
507
+ return [{
508
+ capability: _camstack_types.platformProbeCapability,
509
+ provider: {
510
+ getCapabilities: async () => {
511
+ return getCaps();
512
+ },
513
+ getHardware: async () => {
514
+ return (await getCaps()).hardware;
515
+ },
516
+ resolveInferenceConfig: async (input) => {
517
+ const caps = await getCaps();
518
+ return new InferenceConfigResolver(caps.scores, caps.hardware).resolve(input.requirements);
519
+ },
520
+ resolveHwAccel: async (input) => {
521
+ const hwaccel = this.ctx.kernel.hwaccel;
522
+ if (!hwaccel) return { preferred: [] };
523
+ return { preferred: (await hwaccel.resolve(input.prefer ?? null)).preferred };
524
+ }
525
+ }
526
+ }];
527
+ }
528
+ async onShutdown() {
529
+ this.scorer = null;
530
+ this.cachedCaps = null;
531
+ }
532
+ };
533
+ //#endregion
534
+ exports.InferenceConfigResolver = InferenceConfigResolver;
535
+ exports.PlatformProbeNativeAddon = PlatformProbeNativeAddon;
536
+ exports.default = PlatformProbeNativeAddon;
537
+ exports.PlatformScorer = PlatformScorer;
538
+
539
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/builtins/platform-probe/platform-scorer.ts","../../../src/builtins/platform-probe/inference-config-resolver.ts","../../../src/builtins/platform-probe/index.ts"],"sourcesContent":["import * as os from 'node:os'\nimport { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { errMsg } from '@camstack/types'\nimport type { HardwareInfo, GpuInfo, NpuInfo, PlatformScore, PlatformCapabilities, IScopedLogger } from '@camstack/types'\n\n/**\n * Promisified `execFile`. Used across the scorer so every subprocess\n * spawn yields the event loop — critical at boot because a single sync\n * spawn of a missing Python module hits its 30s timeout and freezes the\n * entire Node process (WS handshakes, tRPC subscriptions, metrics — all\n * stalled). Keeping it async turns the probe into a true background task.\n */\nconst execFileAsync = promisify(execFile)\n\n/** Minimal no-op logger for default parameter */\nconst noopLogger: IScopedLogger = {\n debug() {},\n info() {},\n warn() {},\n error() {},\n child() { return noopLogger },\n withTags() { return noopLogger },\n}\n\n/**\n * Get reliable \"available\" RAM in MB, cross-platform.\n * os.freemem() is unreliable on macOS (reports ~200MB on a 36GB system).\n * Uses systeminformation when available, falls back to native commands.\n */\nasync function getAvailableRAM_MB(): Promise<number> {\n try {\n const si = await import('systeminformation')\n const mem = await si.mem()\n return Math.round(mem.available / 1024 / 1024)\n } catch (err) {\n console.debug(`systeminformation not available, using platform-specific RAM probe: ${errMsg(err)}`)\n const platform = os.platform()\n try {\n if (platform === 'darwin') {\n // Parse vm_stat: (free + inactive + purgeable) * pageSize\n const { stdout: output } = await execFileAsync('vm_stat', [], { encoding: 'utf8', timeout: 3000 })\n const pageSize = parseInt(output.match(/page size of (\\d+)/)?.[1] ?? '16384')\n const free = parseInt(output.match(/Pages free:\\s+(\\d+)/)?.[1] ?? '0')\n const inactive = parseInt(output.match(/Pages inactive:\\s+(\\d+)/)?.[1] ?? '0')\n const purgeable = parseInt(output.match(/Pages purgeable:\\s+(\\d+)/)?.[1] ?? '0')\n return Math.round((free + inactive + purgeable) * pageSize / 1024 / 1024)\n } else if (platform === 'linux') {\n // Parse /proc/meminfo: MemAvailable\n const { readFileSync } = await import('node:fs')\n const meminfo = readFileSync('/proc/meminfo', 'utf8')\n const match = meminfo.match(/MemAvailable:\\s+(\\d+)\\s+kB/)\n if (match) return Math.round(parseInt(match[1]!) / 1024)\n }\n } catch (err) { console.debug(`RAM probe failed, using total RAM fallback: ${errMsg(err)}`) }\n // Ultimate fallback: total RAM (conservative but safe)\n return Math.round(os.totalmem() / 1024 / 1024)\n }\n}\n\nexport class PlatformScorer {\n private cached: PlatformCapabilities | null = null\n private readonly logger: IScopedLogger\n\n constructor(logger: IScopedLogger = noopLogger) {\n this.logger = logger\n }\n\n /**\n * Probe hardware + runtimes and score all backend combos.\n *\n * An optional `onPhase` callback is invoked at each step so consumers\n * (e.g. the platform-probe addon) can emit live progress events on\n * the event bus. The callback takes a phase id + a typed payload; all\n * phases fire in strict order: `started` → `hardware` → `node-backends`\n * → `python-backends` → `scored` → `done`. On failure, `error` fires\n * once with the exception. Cached after first call.\n */\n async probe(onPhase?: (phase: string, payload?: Record<string, unknown>) => void): Promise<PlatformCapabilities> {\n if (this.cached) return this.cached\n\n const start = Date.now()\n onPhase?.('started', {})\n this.logger.info('Probing hardware...')\n const hardware = await this.probeHardware()\n this.logger.info('Hardware detected', {\n meta: {\n platform: hardware.platform,\n arch: hardware.arch,\n cpuModel: hardware.cpuModel,\n cpuCores: hardware.cpuCores,\n ramGB: Math.round(hardware.totalRAM_MB / 1024),\n },\n })\n if (hardware.gpu) this.logger.info('GPU detected', { meta: { name: hardware.gpu.name } })\n if (hardware.npu) this.logger.info('NPU detected', { meta: { type: hardware.npu.type } })\n onPhase?.('hardware', { hardware })\n\n this.logger.info('Probing Node.js backends...')\n const nodeBackends = await this.probeNodeBackends()\n this.logger.info('Node backends detected', { meta: { backends: nodeBackends.map(b => b.id) } })\n onPhase?.('node-backends', { backends: nodeBackends })\n\n this.logger.info('Probing Python backends...')\n const pythonInfo = await this.probePythonBackends()\n if (pythonInfo.pythonPath) {\n this.logger.info('Python backends detected', {\n meta: {\n pythonPath: pythonInfo.pythonPath,\n backends: pythonInfo.backends.filter(b => b.available).map(b => b.id),\n },\n })\n } else {\n this.logger.info('Python: not found')\n }\n onPhase?.('python-backends', { pythonPath: pythonInfo.pythonPath, backends: pythonInfo.backends })\n\n const scores = this.scoreBackends(hardware, nodeBackends, pythonInfo.backends)\n const bestScore = scores.find(s => s.available) ?? scores[scores.length - 1]!\n\n const elapsed = Date.now() - start\n this.logger.info('Scoring complete', { meta: { elapsedMs: elapsed, combos: scores.length } })\n this.logger.info('Best backend selected', {\n meta: {\n runtime: bestScore.runtime,\n backend: bestScore.backend,\n format: bestScore.format,\n reason: bestScore.reason,\n score: bestScore.score,\n },\n })\n for (const s of scores) {\n this.logger.debug('Score entry', {\n meta: {\n available: s.available,\n runtime: s.runtime,\n backend: s.backend,\n format: s.format,\n score: s.score,\n reason: s.reason,\n },\n })\n }\n\n this.cached = {\n hardware,\n scores,\n bestScore,\n pythonPath: pythonInfo.pythonPath,\n }\n onPhase?.('scored', { scores, bestScore, elapsedMs: elapsed })\n onPhase?.('done', { capabilities: this.cached })\n return this.cached\n }\n\n async probeHardware(): Promise<HardwareInfo> {\n const platform = os.platform() as HardwareInfo['platform']\n const arch = os.arch() as HardwareInfo['arch']\n const cpus = os.cpus()\n const cpuModel = cpus[0]?.model ?? 'unknown'\n const cpuCores = cpus.length\n const totalRAM_MB = Math.round(os.totalmem() / 1024 / 1024)\n const availableRAM_MB = await getAvailableRAM_MB()\n this.logger.debug('RAM probed', { meta: { totalRAM_MB, availableRAM_MB } })\n\n let gpu: GpuInfo | null = null\n let npu: NpuInfo | null = null\n\n // macOS Apple Silicon\n if (platform === 'darwin' && arch === 'arm64') {\n gpu = { type: 'apple', name: 'Apple Silicon GPU' }\n npu = { type: 'apple-ane' }\n }\n\n // Linux NVIDIA\n if (platform === 'linux') {\n try {\n const { stdout } = await execFileAsync('nvidia-smi', ['--query-gpu=name,memory.total', '--format=csv,noheader'], {\n encoding: 'utf8', timeout: 5000,\n })\n const output = stdout.trim()\n if (output) {\n const [name, mem] = output.split(',').map(s => s.trim())\n gpu = {\n type: 'nvidia',\n name: name ?? 'NVIDIA GPU',\n memoryMB: parseInt(mem ?? '0'),\n }\n }\n } catch (err) { this.logger.debug('NVIDIA GPU detection failed', { meta: { error: errMsg(err) } }) }\n }\n\n return { platform, arch, cpuModel, cpuCores, totalRAM_MB, availableRAM_MB, gpu, npu }\n }\n\n private async probeNodeBackends(): Promise<Array<{ id: string; available: boolean }>> {\n const backends: Array<{ id: string; available: boolean }> = [\n { id: 'cpu', available: true },\n ]\n\n try {\n const ort = await import('onnxruntime-node') as { InferenceSession?: { getAvailableProviders?: () => string[] } }\n const providers: string[] = ort.InferenceSession?.getAvailableProviders?.() ?? []\n for (const p of providers) {\n const n = p.toLowerCase().replace('executionprovider', '')\n if (n === 'coreml') backends.push({ id: 'coreml', available: true })\n else if (n === 'cuda') backends.push({ id: 'cuda', available: true })\n else if (n === 'tensorrt') backends.push({ id: 'tensorrt', available: true })\n }\n } catch (err) { this.logger.debug('onnxruntime-node not available', { meta: { error: errMsg(err) } }) }\n\n // macOS always has CoreML potential\n if (os.platform() === 'darwin' && !backends.some(b => b.id === 'coreml')) {\n backends.push({ id: 'coreml', available: true })\n }\n\n return backends\n }\n\n private async probePythonBackends(): Promise<{ pythonPath: string | null; backends: Array<{ id: string; format: string; available: boolean }> }> {\n let pythonPath: string | null = null\n for (const cmd of ['python3', 'python']) {\n try {\n await execFileAsync(cmd, ['--version'], { timeout: 5000 })\n pythonPath = cmd\n break\n } catch (err) { console.debug(`Python command \"${cmd}\" not found: ${errMsg(err)}`) }\n }\n\n if (!pythonPath) return { pythonPath: null, backends: [] }\n\n const checks: Array<[string, string, string]> = [\n // [pythonModule, backendId, modelFormat]\n ['coremltools', 'coreml', 'coreml'],\n ['openvino.runtime', 'openvino', 'openvino'],\n ['torch', 'pytorch', 'onnx'],\n ['onnxruntime', 'onnx-py', 'onnx'],\n ]\n\n // Run all module probes in parallel. Each probe is independent and a\n // missing module spends 30s waiting on its own timeout — serial would\n // add up to ~50s of cumulative wait. Parallel caps it at the slowest\n // probe. The execFile promise yields the event loop, so WS handshakes\n // and tRPC calls continue to flow during the wait.\n const results = await Promise.all(checks.map(async ([mod, id, format]) => {\n const probeStart = Date.now()\n let available = false\n try {\n await execFileAsync(pythonPath!, ['-c', `import ${mod}`], { timeout: 30000 })\n available = true\n } catch (err) { console.debug(`Python module \"${mod}\" not installed: ${errMsg(err)}`) }\n const probeMs = Date.now() - probeStart\n this.logger.debug('Python module probed', { meta: { module: mod, available, probeMs } })\n return { mod, id, format, available }\n }))\n\n const backends: Array<{ id: string; format: string; available: boolean }> = []\n for (const r of results) {\n // Always show CoreML on macOS even if not installed\n if (r.id === 'coreml' && os.platform() === 'darwin') {\n backends.push({ id: r.id, format: r.format, available: r.available })\n } else if (r.available) {\n backends.push({ id: r.id, format: r.format, available: r.available })\n }\n }\n\n return { pythonPath, backends }\n }\n\n private scoreBackends(\n hardware: HardwareInfo,\n nodeBackends: Array<{ id: string; available: boolean }>,\n pythonBackends: Array<{ id: string; format: string; available: boolean }>,\n ): PlatformScore[] {\n const scores: PlatformScore[] = []\n\n // macOS Apple Silicon\n if (hardware.platform === 'darwin' && hardware.arch === 'arm64') {\n const pyCoreMl = pythonBackends.find(b => b.id === 'coreml')\n if (pyCoreMl) {\n scores.push({ runtime: 'python', backend: 'coreml', format: 'coreml', score: 95, reason: 'Apple Neural Engine (Python CoreML)', available: pyCoreMl.available })\n }\n const nodeCoreMl = nodeBackends.find(b => b.id === 'coreml')\n if (nodeCoreMl) {\n scores.push({ runtime: 'node', backend: 'coreml', format: 'onnx', score: 90, reason: 'CoreML via ONNX Runtime', available: nodeCoreMl.available })\n }\n }\n\n // NVIDIA\n if (hardware.gpu?.type === 'nvidia') {\n const tensorrt = nodeBackends.find(b => b.id === 'tensorrt')\n if (tensorrt) scores.push({ runtime: 'node', backend: 'tensorrt', format: 'onnx', score: 95, reason: 'NVIDIA TensorRT', available: true })\n const cuda = nodeBackends.find(b => b.id === 'cuda')\n if (cuda) scores.push({ runtime: 'node', backend: 'cuda', format: 'onnx', score: 85, reason: 'NVIDIA CUDA', available: true })\n }\n\n // Intel OpenVINO\n const openvino = pythonBackends.find(b => b.id === 'openvino')\n if (openvino) {\n const score = hardware.npu?.type === 'intel-npu' ? 90 : 80\n scores.push({ runtime: 'python', backend: 'openvino', format: 'openvino', score, reason: 'Intel OpenVINO', available: openvino.available })\n }\n\n // CPU fallbacks\n scores.push({ runtime: 'node', backend: 'cpu', format: 'onnx', score: 50, reason: 'CPU (ONNX Runtime Node)', available: true })\n const pyOnnx = pythonBackends.find(b => b.id === 'onnx-py')\n if (pyOnnx) {\n scores.push({ runtime: 'python', backend: 'cpu', format: 'onnx', score: 45, reason: 'CPU (Python ONNX)', available: pyOnnx.available })\n }\n\n return scores.sort((a, b) => b.score - a.score)\n }\n}\n","import type { PlatformScore, HardwareInfo, ModelRequirement, ResolvedInferenceConfig } from '@camstack/types'\n\nexport class InferenceConfigResolver {\n constructor(\n private readonly scores: readonly PlatformScore[],\n private readonly hardware: HardwareInfo,\n ) {}\n\n /**\n * Compute accuracy/backend weights based on available system RAM.\n * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),\n * not os.freemem() which is broken on macOS.\n *\n * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)\n * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)\n * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)\n */\n private getWeights(): { accuracyWeight: number; backendWeight: number } {\n const ramMB = this.hardware.availableRAM_MB\n if (ramMB > 16_384) return { accuracyWeight: 0.6, backendWeight: 0.4 }\n if (ramMB > 8_192) return { accuracyWeight: 0.5, backendWeight: 0.5 }\n return { accuracyWeight: 0.4, backendWeight: 0.6 }\n }\n\n /**\n * Given an addon's model requirements, pick the best model + runtime + backend.\n *\n * Algorithm:\n * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)\n * 2. For each remaining model, find the best platform score whose format\n * is available in the model's formats\n * 3. Pick the model with the highest combined score using RAM-adaptive weights:\n * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)\n * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)\n * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)\n */\n resolve(requirements: readonly ModelRequirement[]): ResolvedInferenceConfig {\n if (requirements.length === 0) {\n return { modelId: '', runtime: 'node', backend: 'cpu', format: 'onnx', reason: 'No models declared' }\n }\n\n // Budget: 25% of available RAM (now reliable via systeminformation)\n const ramBudget = this.hardware.availableRAM_MB * 0.25\n const { accuracyWeight, backendWeight } = this.getWeights()\n\n console.log(`[InferenceConfigResolver] availableRAM: ${this.hardware.availableRAM_MB}MB, budget: ${Math.round(ramBudget)}MB, weights: accuracy=${accuracyWeight}, backend=${backendWeight}`)\n\n // Filter models that fit in memory\n const fits = requirements.filter(m => m.minRAM_MB < ramBudget)\n const candidates = fits.length > 0 ? fits : [requirements[0]!] // fallback to first/smallest\n\n console.log(`[InferenceConfigResolver] ${candidates.length}/${requirements.length} models fit RAM budget`)\n\n // For each model, find best compatible platform score\n let bestCombo: { model: ModelRequirement; score: PlatformScore; combined: number } | null = null\n\n for (const model of candidates) {\n for (const score of this.scores) {\n if (!score.available) continue\n if (!model.formats.includes(score.format)) continue\n\n const combined = model.accuracyScore * accuracyWeight + score.score * backendWeight\n\n if (!bestCombo || combined > bestCombo.combined) {\n console.log(`[InferenceConfigResolver] New best: ${model.modelId} (accuracy=${model.accuracyScore}) + ${score.backend}/${score.format} (score=${score.score}) → combined=${Math.round(combined)}`)\n bestCombo = { model, score, combined }\n }\n }\n }\n\n if (!bestCombo) {\n return {\n modelId: candidates[0]!.modelId,\n runtime: 'node',\n backend: 'cpu',\n format: 'onnx',\n reason: 'No compatible backend — CPU fallback',\n }\n }\n\n return {\n modelId: bestCombo.model.modelId,\n runtime: bestCombo.score.runtime,\n backend: bestCombo.score.backend,\n format: bestCombo.score.format,\n reason: `${bestCombo.model.name} on ${bestCombo.score.reason} (score: ${Math.round(bestCombo.combined)})`,\n }\n }\n}\n","/**\n * Platform-probe core builtin.\n *\n * Infra addon — probes hardware + inference runtimes on the local node and\n * exposes the result via the `platform-probe` capability (singleton per\n * node). Promoted from `@camstack/addon-platform-probe-native` (separate\n * npm package) to a core builtin in Phase B of the bundles refactor —\n * lives here because every node already pulls `@camstack/core`, removing\n * a redundant package from REQUIRED_PACKAGES / AGENT_PACKAGES.\n *\n * Inference addons consume the cap via `ctx.api.platformProbe.*`.\n */\nimport type {\n ProviderRegistration,\n IPlatformProbeProvider,\n PlatformCapabilities,\n HardwareInfo,\n ModelRequirement,\n ResolvedInferenceConfig,\n HwAccelBackend,\n} from '@camstack/types'\nimport { BaseAddon, platformProbeCapability, errMsg, EventCategory } from '@camstack/types'\nimport { PlatformScorer } from './platform-scorer.js'\nimport { InferenceConfigResolver } from './inference-config-resolver.js'\n\nexport { PlatformScorer } from './platform-scorer.js'\nexport { InferenceConfigResolver } from './inference-config-resolver.js'\n\nexport class PlatformProbeNativeAddon extends BaseAddon {\n private scorer: PlatformScorer | null = null\n private cachedCaps: PlatformCapabilities | null = null\n\n constructor() { super({}) }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.scorer = new PlatformScorer(this.ctx.logger)\n\n // Kick off the probe in the background — provider methods await the\n // promise so early consumers block until capabilities are ready.\n // Each phase emits a `platform-probe.phase` event on the bus so the\n // benchmark UI (and any other consumer) can render live progress via\n // `live.onEvent({ category: EventCategory.PlatformProbePhase })`.\n const emitPhase = (phase: string, payload?: Record<string, unknown>): void => {\n this.ctx.eventBus?.emit({\n id: `platform-probe-${phase}-${Date.now()}`,\n timestamp: new Date(),\n source: { type: 'core', id: 'platform-probe-native' },\n category: EventCategory.PlatformProbePhase,\n data: { type: 'platform-probe.phase', phase, ...(payload ?? {}) },\n })\n }\n\n const probePromise: Promise<PlatformCapabilities> = this.scorer\n .probe(emitPhase)\n .then((caps) => {\n this.cachedCaps = caps\n this.ctx.logger.info('Platform probe complete', {\n meta: {\n cpuModel: caps.hardware.cpuModel,\n arch: caps.hardware.arch,\n totalRAM_MB: caps.hardware.totalRAM_MB,\n gpu: caps.hardware.gpu?.name ?? 'none',\n bestReason: caps.bestScore.reason,\n bestScore: caps.bestScore.score,\n },\n })\n return caps\n })\n .catch((err: unknown) => {\n const msg = errMsg(err)\n this.ctx.logger.error('Platform probe failed', { meta: { error: msg } })\n emitPhase('error', { message: msg })\n throw err\n })\n\n const getCaps = async (): Promise<PlatformCapabilities> => {\n return this.cachedCaps ?? probePromise\n }\n\n const provider: IPlatformProbeProvider = {\n getCapabilities: async (): Promise<PlatformCapabilities> => {\n return getCaps()\n },\n getHardware: async (): Promise<HardwareInfo> => {\n const caps = await getCaps()\n return caps.hardware\n },\n resolveInferenceConfig: async (input: {\n readonly requirements: readonly ModelRequirement[]\n }): Promise<ResolvedInferenceConfig> => {\n const caps = await getCaps()\n const resolver = new InferenceConfigResolver(caps.scores, caps.hardware)\n return resolver.resolve(input.requirements)\n },\n resolveHwAccel: async (input: {\n readonly prefer?: string | null\n readonly nodeId?: string\n }): Promise<{ preferred: readonly string[] }> => {\n const hwaccel = this.ctx.kernel.hwaccel\n if (!hwaccel) {\n return { preferred: [] }\n }\n const res = await hwaccel.resolve((input.prefer as HwAccelBackend | 'none' | null) ?? null)\n return { preferred: res.preferred }\n },\n }\n\n return [{ capability: platformProbeCapability, provider }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.scorer = null\n this.cachedCaps = null\n }\n}\n\nexport default PlatformProbeNativeAddon\n"],"mappings":"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"}