@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,530 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { BaseAddon, EventCategory, errMsg, platformProbeCapability } from "@camstack/types";
4
+ import * as os from "node:os";
5
+ //#region src/builtins/platform-probe/platform-scorer.ts
6
+ /**
7
+ * Promisified `execFile`. Used across the scorer so every subprocess
8
+ * spawn yields the event loop — critical at boot because a single sync
9
+ * spawn of a missing Python module hits its 30s timeout and freezes the
10
+ * entire Node process (WS handshakes, tRPC subscriptions, metrics — all
11
+ * stalled). Keeping it async turns the probe into a true background task.
12
+ */
13
+ var execFileAsync = promisify(execFile);
14
+ /** Minimal no-op logger for default parameter */
15
+ var noopLogger = {
16
+ debug() {},
17
+ info() {},
18
+ warn() {},
19
+ error() {},
20
+ child() {
21
+ return noopLogger;
22
+ },
23
+ withTags() {
24
+ return noopLogger;
25
+ }
26
+ };
27
+ /**
28
+ * Get reliable "available" RAM in MB, cross-platform.
29
+ * os.freemem() is unreliable on macOS (reports ~200MB on a 36GB system).
30
+ * Uses systeminformation when available, falls back to native commands.
31
+ */
32
+ async function getAvailableRAM_MB() {
33
+ try {
34
+ const mem = await (await import("systeminformation")).mem();
35
+ return Math.round(mem.available / 1024 / 1024);
36
+ } catch (err) {
37
+ console.debug(`systeminformation not available, using platform-specific RAM probe: ${errMsg(err)}`);
38
+ const platform = os.platform();
39
+ try {
40
+ if (platform === "darwin") {
41
+ const { stdout: output } = await execFileAsync("vm_stat", [], {
42
+ encoding: "utf8",
43
+ timeout: 3e3
44
+ });
45
+ const pageSize = parseInt(output.match(/page size of (\d+)/)?.[1] ?? "16384");
46
+ const free = parseInt(output.match(/Pages free:\s+(\d+)/)?.[1] ?? "0");
47
+ const inactive = parseInt(output.match(/Pages inactive:\s+(\d+)/)?.[1] ?? "0");
48
+ const purgeable = parseInt(output.match(/Pages purgeable:\s+(\d+)/)?.[1] ?? "0");
49
+ return Math.round((free + inactive + purgeable) * pageSize / 1024 / 1024);
50
+ } else if (platform === "linux") {
51
+ const { readFileSync } = await import("node:fs");
52
+ const match = readFileSync("/proc/meminfo", "utf8").match(/MemAvailable:\s+(\d+)\s+kB/);
53
+ if (match) return Math.round(parseInt(match[1]) / 1024);
54
+ }
55
+ } catch (err) {
56
+ console.debug(`RAM probe failed, using total RAM fallback: ${errMsg(err)}`);
57
+ }
58
+ return Math.round(os.totalmem() / 1024 / 1024);
59
+ }
60
+ }
61
+ var PlatformScorer = class {
62
+ cached = null;
63
+ logger;
64
+ constructor(logger = noopLogger) {
65
+ this.logger = logger;
66
+ }
67
+ /**
68
+ * Probe hardware + runtimes and score all backend combos.
69
+ *
70
+ * An optional `onPhase` callback is invoked at each step so consumers
71
+ * (e.g. the platform-probe addon) can emit live progress events on
72
+ * the event bus. The callback takes a phase id + a typed payload; all
73
+ * phases fire in strict order: `started` → `hardware` → `node-backends`
74
+ * → `python-backends` → `scored` → `done`. On failure, `error` fires
75
+ * once with the exception. Cached after first call.
76
+ */
77
+ async probe(onPhase) {
78
+ if (this.cached) return this.cached;
79
+ const start = Date.now();
80
+ onPhase?.("started", {});
81
+ this.logger.info("Probing hardware...");
82
+ const hardware = await this.probeHardware();
83
+ this.logger.info("Hardware detected", { meta: {
84
+ platform: hardware.platform,
85
+ arch: hardware.arch,
86
+ cpuModel: hardware.cpuModel,
87
+ cpuCores: hardware.cpuCores,
88
+ ramGB: Math.round(hardware.totalRAM_MB / 1024)
89
+ } });
90
+ if (hardware.gpu) this.logger.info("GPU detected", { meta: { name: hardware.gpu.name } });
91
+ if (hardware.npu) this.logger.info("NPU detected", { meta: { type: hardware.npu.type } });
92
+ onPhase?.("hardware", { hardware });
93
+ this.logger.info("Probing Node.js backends...");
94
+ const nodeBackends = await this.probeNodeBackends();
95
+ this.logger.info("Node backends detected", { meta: { backends: nodeBackends.map((b) => b.id) } });
96
+ onPhase?.("node-backends", { backends: nodeBackends });
97
+ this.logger.info("Probing Python backends...");
98
+ const pythonInfo = await this.probePythonBackends();
99
+ if (pythonInfo.pythonPath) this.logger.info("Python backends detected", { meta: {
100
+ pythonPath: pythonInfo.pythonPath,
101
+ backends: pythonInfo.backends.filter((b) => b.available).map((b) => b.id)
102
+ } });
103
+ else this.logger.info("Python: not found");
104
+ onPhase?.("python-backends", {
105
+ pythonPath: pythonInfo.pythonPath,
106
+ backends: pythonInfo.backends
107
+ });
108
+ const scores = this.scoreBackends(hardware, nodeBackends, pythonInfo.backends);
109
+ const bestScore = scores.find((s) => s.available) ?? scores[scores.length - 1];
110
+ const elapsed = Date.now() - start;
111
+ this.logger.info("Scoring complete", { meta: {
112
+ elapsedMs: elapsed,
113
+ combos: scores.length
114
+ } });
115
+ this.logger.info("Best backend selected", { meta: {
116
+ runtime: bestScore.runtime,
117
+ backend: bestScore.backend,
118
+ format: bestScore.format,
119
+ reason: bestScore.reason,
120
+ score: bestScore.score
121
+ } });
122
+ for (const s of scores) this.logger.debug("Score entry", { meta: {
123
+ available: s.available,
124
+ runtime: s.runtime,
125
+ backend: s.backend,
126
+ format: s.format,
127
+ score: s.score,
128
+ reason: s.reason
129
+ } });
130
+ this.cached = {
131
+ hardware,
132
+ scores,
133
+ bestScore,
134
+ pythonPath: pythonInfo.pythonPath
135
+ };
136
+ onPhase?.("scored", {
137
+ scores,
138
+ bestScore,
139
+ elapsedMs: elapsed
140
+ });
141
+ onPhase?.("done", { capabilities: this.cached });
142
+ return this.cached;
143
+ }
144
+ async probeHardware() {
145
+ const platform = os.platform();
146
+ const arch = os.arch();
147
+ const cpus = os.cpus();
148
+ const cpuModel = cpus[0]?.model ?? "unknown";
149
+ const cpuCores = cpus.length;
150
+ const totalRAM_MB = Math.round(os.totalmem() / 1024 / 1024);
151
+ const availableRAM_MB = await getAvailableRAM_MB();
152
+ this.logger.debug("RAM probed", { meta: {
153
+ totalRAM_MB,
154
+ availableRAM_MB
155
+ } });
156
+ let gpu = null;
157
+ let npu = null;
158
+ if (platform === "darwin" && arch === "arm64") {
159
+ gpu = {
160
+ type: "apple",
161
+ name: "Apple Silicon GPU"
162
+ };
163
+ npu = { type: "apple-ane" };
164
+ }
165
+ if (platform === "linux") try {
166
+ const { stdout } = await execFileAsync("nvidia-smi", ["--query-gpu=name,memory.total", "--format=csv,noheader"], {
167
+ encoding: "utf8",
168
+ timeout: 5e3
169
+ });
170
+ const output = stdout.trim();
171
+ if (output) {
172
+ const [name, mem] = output.split(",").map((s) => s.trim());
173
+ gpu = {
174
+ type: "nvidia",
175
+ name: name ?? "NVIDIA GPU",
176
+ memoryMB: parseInt(mem ?? "0")
177
+ };
178
+ }
179
+ } catch (err) {
180
+ this.logger.debug("NVIDIA GPU detection failed", { meta: { error: errMsg(err) } });
181
+ }
182
+ return {
183
+ platform,
184
+ arch,
185
+ cpuModel,
186
+ cpuCores,
187
+ totalRAM_MB,
188
+ availableRAM_MB,
189
+ gpu,
190
+ npu
191
+ };
192
+ }
193
+ async probeNodeBackends() {
194
+ const backends = [{
195
+ id: "cpu",
196
+ available: true
197
+ }];
198
+ try {
199
+ const providers = (await import("onnxruntime-node")).InferenceSession?.getAvailableProviders?.() ?? [];
200
+ for (const p of providers) {
201
+ const n = p.toLowerCase().replace("executionprovider", "");
202
+ if (n === "coreml") backends.push({
203
+ id: "coreml",
204
+ available: true
205
+ });
206
+ else if (n === "cuda") backends.push({
207
+ id: "cuda",
208
+ available: true
209
+ });
210
+ else if (n === "tensorrt") backends.push({
211
+ id: "tensorrt",
212
+ available: true
213
+ });
214
+ }
215
+ } catch (err) {
216
+ this.logger.debug("onnxruntime-node not available", { meta: { error: errMsg(err) } });
217
+ }
218
+ if (os.platform() === "darwin" && !backends.some((b) => b.id === "coreml")) backends.push({
219
+ id: "coreml",
220
+ available: true
221
+ });
222
+ return backends;
223
+ }
224
+ async probePythonBackends() {
225
+ let pythonPath = null;
226
+ for (const cmd of ["python3", "python"]) try {
227
+ await execFileAsync(cmd, ["--version"], { timeout: 5e3 });
228
+ pythonPath = cmd;
229
+ break;
230
+ } catch (err) {
231
+ console.debug(`Python command "${cmd}" not found: ${errMsg(err)}`);
232
+ }
233
+ if (!pythonPath) return {
234
+ pythonPath: null,
235
+ backends: []
236
+ };
237
+ const results = await Promise.all([
238
+ [
239
+ "coremltools",
240
+ "coreml",
241
+ "coreml"
242
+ ],
243
+ [
244
+ "openvino.runtime",
245
+ "openvino",
246
+ "openvino"
247
+ ],
248
+ [
249
+ "torch",
250
+ "pytorch",
251
+ "onnx"
252
+ ],
253
+ [
254
+ "onnxruntime",
255
+ "onnx-py",
256
+ "onnx"
257
+ ]
258
+ ].map(async ([mod, id, format]) => {
259
+ const probeStart = Date.now();
260
+ let available = false;
261
+ try {
262
+ await execFileAsync(pythonPath, ["-c", `import ${mod}`], { timeout: 3e4 });
263
+ available = true;
264
+ } catch (err) {
265
+ console.debug(`Python module "${mod}" not installed: ${errMsg(err)}`);
266
+ }
267
+ const probeMs = Date.now() - probeStart;
268
+ this.logger.debug("Python module probed", { meta: {
269
+ module: mod,
270
+ available,
271
+ probeMs
272
+ } });
273
+ return {
274
+ mod,
275
+ id,
276
+ format,
277
+ available
278
+ };
279
+ }));
280
+ const backends = [];
281
+ for (const r of results) if (r.id === "coreml" && os.platform() === "darwin") backends.push({
282
+ id: r.id,
283
+ format: r.format,
284
+ available: r.available
285
+ });
286
+ else if (r.available) backends.push({
287
+ id: r.id,
288
+ format: r.format,
289
+ available: r.available
290
+ });
291
+ return {
292
+ pythonPath,
293
+ backends
294
+ };
295
+ }
296
+ scoreBackends(hardware, nodeBackends, pythonBackends) {
297
+ const scores = [];
298
+ if (hardware.platform === "darwin" && hardware.arch === "arm64") {
299
+ const pyCoreMl = pythonBackends.find((b) => b.id === "coreml");
300
+ if (pyCoreMl) scores.push({
301
+ runtime: "python",
302
+ backend: "coreml",
303
+ format: "coreml",
304
+ score: 95,
305
+ reason: "Apple Neural Engine (Python CoreML)",
306
+ available: pyCoreMl.available
307
+ });
308
+ const nodeCoreMl = nodeBackends.find((b) => b.id === "coreml");
309
+ if (nodeCoreMl) scores.push({
310
+ runtime: "node",
311
+ backend: "coreml",
312
+ format: "onnx",
313
+ score: 90,
314
+ reason: "CoreML via ONNX Runtime",
315
+ available: nodeCoreMl.available
316
+ });
317
+ }
318
+ if (hardware.gpu?.type === "nvidia") {
319
+ if (nodeBackends.find((b) => b.id === "tensorrt")) scores.push({
320
+ runtime: "node",
321
+ backend: "tensorrt",
322
+ format: "onnx",
323
+ score: 95,
324
+ reason: "NVIDIA TensorRT",
325
+ available: true
326
+ });
327
+ if (nodeBackends.find((b) => b.id === "cuda")) scores.push({
328
+ runtime: "node",
329
+ backend: "cuda",
330
+ format: "onnx",
331
+ score: 85,
332
+ reason: "NVIDIA CUDA",
333
+ available: true
334
+ });
335
+ }
336
+ const openvino = pythonBackends.find((b) => b.id === "openvino");
337
+ if (openvino) {
338
+ const score = hardware.npu?.type === "intel-npu" ? 90 : 80;
339
+ scores.push({
340
+ runtime: "python",
341
+ backend: "openvino",
342
+ format: "openvino",
343
+ score,
344
+ reason: "Intel OpenVINO",
345
+ available: openvino.available
346
+ });
347
+ }
348
+ scores.push({
349
+ runtime: "node",
350
+ backend: "cpu",
351
+ format: "onnx",
352
+ score: 50,
353
+ reason: "CPU (ONNX Runtime Node)",
354
+ available: true
355
+ });
356
+ const pyOnnx = pythonBackends.find((b) => b.id === "onnx-py");
357
+ if (pyOnnx) scores.push({
358
+ runtime: "python",
359
+ backend: "cpu",
360
+ format: "onnx",
361
+ score: 45,
362
+ reason: "CPU (Python ONNX)",
363
+ available: pyOnnx.available
364
+ });
365
+ return scores.sort((a, b) => b.score - a.score);
366
+ }
367
+ };
368
+ //#endregion
369
+ //#region src/builtins/platform-probe/inference-config-resolver.ts
370
+ var InferenceConfigResolver = class {
371
+ constructor(scores, hardware) {
372
+ this.scores = scores;
373
+ this.hardware = hardware;
374
+ }
375
+ /**
376
+ * Compute accuracy/backend weights based on available system RAM.
377
+ * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),
378
+ * not os.freemem() which is broken on macOS.
379
+ *
380
+ * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)
381
+ * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)
382
+ * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)
383
+ */
384
+ getWeights() {
385
+ const ramMB = this.hardware.availableRAM_MB;
386
+ if (ramMB > 16384) return {
387
+ accuracyWeight: .6,
388
+ backendWeight: .4
389
+ };
390
+ if (ramMB > 8192) return {
391
+ accuracyWeight: .5,
392
+ backendWeight: .5
393
+ };
394
+ return {
395
+ accuracyWeight: .4,
396
+ backendWeight: .6
397
+ };
398
+ }
399
+ /**
400
+ * Given an addon's model requirements, pick the best model + runtime + backend.
401
+ *
402
+ * Algorithm:
403
+ * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)
404
+ * 2. For each remaining model, find the best platform score whose format
405
+ * is available in the model's formats
406
+ * 3. Pick the model with the highest combined score using RAM-adaptive weights:
407
+ * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)
408
+ * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)
409
+ * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)
410
+ */
411
+ resolve(requirements) {
412
+ if (requirements.length === 0) return {
413
+ modelId: "",
414
+ runtime: "node",
415
+ backend: "cpu",
416
+ format: "onnx",
417
+ reason: "No models declared"
418
+ };
419
+ const ramBudget = this.hardware.availableRAM_MB * .25;
420
+ const { accuracyWeight, backendWeight } = this.getWeights();
421
+ console.log(`[InferenceConfigResolver] availableRAM: ${this.hardware.availableRAM_MB}MB, budget: ${Math.round(ramBudget)}MB, weights: accuracy=${accuracyWeight}, backend=${backendWeight}`);
422
+ const fits = requirements.filter((m) => m.minRAM_MB < ramBudget);
423
+ const candidates = fits.length > 0 ? fits : [requirements[0]];
424
+ console.log(`[InferenceConfigResolver] ${candidates.length}/${requirements.length} models fit RAM budget`);
425
+ let bestCombo = null;
426
+ for (const model of candidates) for (const score of this.scores) {
427
+ if (!score.available) continue;
428
+ if (!model.formats.includes(score.format)) continue;
429
+ const combined = model.accuracyScore * accuracyWeight + score.score * backendWeight;
430
+ if (!bestCombo || combined > bestCombo.combined) {
431
+ console.log(`[InferenceConfigResolver] New best: ${model.modelId} (accuracy=${model.accuracyScore}) + ${score.backend}/${score.format} (score=${score.score}) → combined=${Math.round(combined)}`);
432
+ bestCombo = {
433
+ model,
434
+ score,
435
+ combined
436
+ };
437
+ }
438
+ }
439
+ if (!bestCombo) return {
440
+ modelId: candidates[0].modelId,
441
+ runtime: "node",
442
+ backend: "cpu",
443
+ format: "onnx",
444
+ reason: "No compatible backend — CPU fallback"
445
+ };
446
+ return {
447
+ modelId: bestCombo.model.modelId,
448
+ runtime: bestCombo.score.runtime,
449
+ backend: bestCombo.score.backend,
450
+ format: bestCombo.score.format,
451
+ reason: `${bestCombo.model.name} on ${bestCombo.score.reason} (score: ${Math.round(bestCombo.combined)})`
452
+ };
453
+ }
454
+ };
455
+ //#endregion
456
+ //#region src/builtins/platform-probe/index.ts
457
+ var PlatformProbeNativeAddon = class extends BaseAddon {
458
+ scorer = null;
459
+ cachedCaps = null;
460
+ constructor() {
461
+ super({});
462
+ }
463
+ async onInitialize() {
464
+ this.scorer = new PlatformScorer(this.ctx.logger);
465
+ const emitPhase = (phase, payload) => {
466
+ this.ctx.eventBus?.emit({
467
+ id: `platform-probe-${phase}-${Date.now()}`,
468
+ timestamp: /* @__PURE__ */ new Date(),
469
+ source: {
470
+ type: "core",
471
+ id: "platform-probe-native"
472
+ },
473
+ category: EventCategory.PlatformProbePhase,
474
+ data: {
475
+ type: "platform-probe.phase",
476
+ phase,
477
+ ...payload ?? {}
478
+ }
479
+ });
480
+ };
481
+ const probePromise = this.scorer.probe(emitPhase).then((caps) => {
482
+ this.cachedCaps = caps;
483
+ this.ctx.logger.info("Platform probe complete", { meta: {
484
+ cpuModel: caps.hardware.cpuModel,
485
+ arch: caps.hardware.arch,
486
+ totalRAM_MB: caps.hardware.totalRAM_MB,
487
+ gpu: caps.hardware.gpu?.name ?? "none",
488
+ bestReason: caps.bestScore.reason,
489
+ bestScore: caps.bestScore.score
490
+ } });
491
+ return caps;
492
+ }).catch((err) => {
493
+ const msg = errMsg(err);
494
+ this.ctx.logger.error("Platform probe failed", { meta: { error: msg } });
495
+ emitPhase("error", { message: msg });
496
+ throw err;
497
+ });
498
+ const getCaps = async () => {
499
+ return this.cachedCaps ?? probePromise;
500
+ };
501
+ return [{
502
+ capability: platformProbeCapability,
503
+ provider: {
504
+ getCapabilities: async () => {
505
+ return getCaps();
506
+ },
507
+ getHardware: async () => {
508
+ return (await getCaps()).hardware;
509
+ },
510
+ resolveInferenceConfig: async (input) => {
511
+ const caps = await getCaps();
512
+ return new InferenceConfigResolver(caps.scores, caps.hardware).resolve(input.requirements);
513
+ },
514
+ resolveHwAccel: async (input) => {
515
+ const hwaccel = this.ctx.kernel.hwaccel;
516
+ if (!hwaccel) return { preferred: [] };
517
+ return { preferred: (await hwaccel.resolve(input.prefer ?? null)).preferred };
518
+ }
519
+ }
520
+ }];
521
+ }
522
+ async onShutdown() {
523
+ this.scorer = null;
524
+ this.cachedCaps = null;
525
+ }
526
+ };
527
+ //#endregion
528
+ export { InferenceConfigResolver, PlatformProbeNativeAddon, PlatformProbeNativeAddon as default, PlatformScorer };
529
+
530
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","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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"}
@@ -0,0 +1,30 @@
1
+ import { PlatformScore, HardwareInfo, ModelRequirement, ResolvedInferenceConfig } from '@camstack/types';
2
+ export declare class InferenceConfigResolver {
3
+ private readonly scores;
4
+ private readonly hardware;
5
+ constructor(scores: readonly PlatformScore[], hardware: HardwareInfo);
6
+ /**
7
+ * Compute accuracy/backend weights based on available system RAM.
8
+ * availableRAM_MB is now sourced from systeminformation (reliable cross-platform),
9
+ * not os.freemem() which is broken on macOS.
10
+ *
11
+ * - > 16 GB available: prefer larger, more accurate models (accuracy 0.6, backend 0.4)
12
+ * - > 8 GB available: balanced (accuracy 0.5, backend 0.5)
13
+ * - <= 8 GB available: prefer speed (accuracy 0.4, backend 0.6)
14
+ */
15
+ private getWeights;
16
+ /**
17
+ * Given an addon's model requirements, pick the best model + runtime + backend.
18
+ *
19
+ * Algorithm:
20
+ * 1. Filter models by available RAM (minRAM_MB < 25% of available RAM)
21
+ * 2. For each remaining model, find the best platform score whose format
22
+ * is available in the model's formats
23
+ * 3. Pick the model with the highest combined score using RAM-adaptive weights:
24
+ * - High RAM (>16 GB): accuracy × 0.6 + backend × 0.4 (prefer accuracy)
25
+ * - Mid RAM (>8 GB): accuracy × 0.5 + backend × 0.5 (balanced)
26
+ * - Low RAM (<=8 GB): accuracy × 0.4 + backend × 0.6 (prefer speed)
27
+ */
28
+ resolve(requirements: readonly ModelRequirement[]): ResolvedInferenceConfig;
29
+ }
30
+ //# sourceMappingURL=inference-config-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inference-config-resolver.d.ts","sourceRoot":"","sources":["../../../src/builtins/platform-probe/inference-config-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAE7G,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,YAAY;IAGzC;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,GAAG,uBAAuB;CAoD5E"}
@@ -0,0 +1,22 @@
1
+ import { HardwareInfo, PlatformCapabilities, IScopedLogger } from '@camstack/types';
2
+ export declare class PlatformScorer {
3
+ private cached;
4
+ private readonly logger;
5
+ constructor(logger?: IScopedLogger);
6
+ /**
7
+ * Probe hardware + runtimes and score all backend combos.
8
+ *
9
+ * An optional `onPhase` callback is invoked at each step so consumers
10
+ * (e.g. the platform-probe addon) can emit live progress events on
11
+ * the event bus. The callback takes a phase id + a typed payload; all
12
+ * phases fire in strict order: `started` → `hardware` → `node-backends`
13
+ * → `python-backends` → `scored` → `done`. On failure, `error` fires
14
+ * once with the exception. Cached after first call.
15
+ */
16
+ probe(onPhase?: (phase: string, payload?: Record<string, unknown>) => void): Promise<PlatformCapabilities>;
17
+ probeHardware(): Promise<HardwareInfo>;
18
+ private probeNodeBackends;
19
+ private probePythonBackends;
20
+ private scoreBackends;
21
+ }
22
+ //# sourceMappingURL=platform-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-scorer.d.ts","sourceRoot":"","sources":["../../../src/builtins/platform-probe/platform-scorer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAmC,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAwDzH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,GAAE,aAA0B;IAI9C;;;;;;;;;OASG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA6E1G,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;YAwC9B,iBAAiB;YAwBjB,mBAAmB;IAkDjC,OAAO,CAAC,aAAa;CA2CtB"}
@@ -0,0 +1,2 @@
1
+ export { RemoteAccessOrchestratorAddon, default } from './remote-access-orchestrator.addon.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtins/remote-access-orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA"}
@@ -0,0 +1,7 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_builtins_remote_access_orchestrator_remote_access_orchestrator_addon = require("./remote-access-orchestrator.addon.js");
6
+ exports.RemoteAccessOrchestratorAddon = require_builtins_remote_access_orchestrator_remote_access_orchestrator_addon.RemoteAccessOrchestratorAddon;
7
+ exports.default = require_builtins_remote_access_orchestrator_remote_access_orchestrator_addon.RemoteAccessOrchestratorAddon;