@creezio/electron-shell 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/README.md +1 -1
  2. package/dist/.creezio-src-hash.json +2 -2
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/meili.d.ts +1 -1
  8. package/dist/meili.d.ts.map +1 -1
  9. package/dist/meili.js +1 -1
  10. package/dist/meili.js.map +1 -1
  11. package/dist-cjs/index.js +6 -8
  12. package/dist-cjs/index.js.map +1 -1
  13. package/dist-cjs/meili.js +1 -2
  14. package/dist-cjs/meili.js.map +1 -1
  15. package/package.json +9 -9
  16. package/dist/desktop/legacy-brand-compat.d.ts +0 -45
  17. package/dist/desktop/legacy-brand-compat.d.ts.map +0 -1
  18. package/dist/desktop/legacy-brand-compat.js +0 -49
  19. package/dist/desktop/legacy-brand-compat.js.map +0 -1
  20. package/dist/factory-reset-runtime.d.ts +0 -11
  21. package/dist/factory-reset-runtime.d.ts.map +0 -1
  22. package/dist/factory-reset-runtime.js +0 -77
  23. package/dist/factory-reset-runtime.js.map +0 -1
  24. package/dist/host/ai-workspace/actions.d.ts +0 -12
  25. package/dist/host/ai-workspace/actions.d.ts.map +0 -1
  26. package/dist/host/ai-workspace/actions.js +0 -243
  27. package/dist/host/ai-workspace/actions.js.map +0 -1
  28. package/dist/host/ai-workspace/bindings.d.ts +0 -51
  29. package/dist/host/ai-workspace/bindings.d.ts.map +0 -1
  30. package/dist/host/ai-workspace/bindings.js +0 -40
  31. package/dist/host/ai-workspace/bindings.js.map +0 -1
  32. package/dist/host/ai-workspace/index.d.ts +0 -11
  33. package/dist/host/ai-workspace/index.d.ts.map +0 -1
  34. package/dist/host/ai-workspace/index.js +0 -6
  35. package/dist/host/ai-workspace/index.js.map +0 -1
  36. package/dist/host/ai-workspace/manager.d.ts +0 -128
  37. package/dist/host/ai-workspace/manager.d.ts.map +0 -1
  38. package/dist/host/ai-workspace/manager.js +0 -519
  39. package/dist/host/ai-workspace/manager.js.map +0 -1
  40. package/dist/host/ai-workspace/profile-window.d.ts +0 -37
  41. package/dist/host/ai-workspace/profile-window.d.ts.map +0 -1
  42. package/dist/host/ai-workspace/profile-window.js +0 -121
  43. package/dist/host/ai-workspace/profile-window.js.map +0 -1
  44. package/dist/host/ai-workspace/screencast.d.ts +0 -56
  45. package/dist/host/ai-workspace/screencast.d.ts.map +0 -1
  46. package/dist/host/ai-workspace/screencast.js +0 -245
  47. package/dist/host/ai-workspace/screencast.js.map +0 -1
  48. package/dist/host/ai-workspace/types.d.ts +0 -40
  49. package/dist/host/ai-workspace/types.d.ts.map +0 -1
  50. package/dist/host/ai-workspace/types.js +0 -6
  51. package/dist/host/ai-workspace/types.js.map +0 -1
  52. package/dist/host/brand-host-runtime.d.ts +0 -107
  53. package/dist/host/brand-host-runtime.d.ts.map +0 -1
  54. package/dist/host/brand-host-runtime.js +0 -274
  55. package/dist/host/brand-host-runtime.js.map +0 -1
  56. package/dist/host/brand-host-stack.d.ts +0 -117
  57. package/dist/host/brand-host-stack.d.ts.map +0 -1
  58. package/dist/host/brand-host-stack.js +0 -253
  59. package/dist/host/brand-host-stack.js.map +0 -1
  60. package/dist/host/brand-kernel-http.d.ts +0 -34
  61. package/dist/host/brand-kernel-http.d.ts.map +0 -1
  62. package/dist/host/brand-kernel-http.js +0 -95
  63. package/dist/host/brand-kernel-http.js.map +0 -1
  64. package/dist/host/brand-meili-boot.d.ts +0 -67
  65. package/dist/host/brand-meili-boot.d.ts.map +0 -1
  66. package/dist/host/brand-meili-boot.js +0 -100
  67. package/dist/host/brand-meili-boot.js.map +0 -1
  68. package/dist/host/bridge-client.d.ts +0 -54
  69. package/dist/host/bridge-client.d.ts.map +0 -1
  70. package/dist/host/bridge-client.js +0 -187
  71. package/dist/host/bridge-client.js.map +0 -1
  72. package/dist/host/context.d.ts +0 -70
  73. package/dist/host/context.d.ts.map +0 -1
  74. package/dist/host/context.js +0 -16
  75. package/dist/host/context.js.map +0 -1
  76. package/dist/host/contracts.d.ts +0 -39
  77. package/dist/host/contracts.d.ts.map +0 -1
  78. package/dist/host/contracts.js +0 -26
  79. package/dist/host/contracts.js.map +0 -1
  80. package/dist/host/crash-reporter.d.ts +0 -65
  81. package/dist/host/crash-reporter.d.ts.map +0 -1
  82. package/dist/host/crash-reporter.js +0 -371
  83. package/dist/host/crash-reporter.js.map +0 -1
  84. package/dist/host/ensure-kit-binaries.d.ts +0 -17
  85. package/dist/host/ensure-kit-binaries.d.ts.map +0 -1
  86. package/dist/host/ensure-kit-binaries.js +0 -205
  87. package/dist/host/ensure-kit-binaries.js.map +0 -1
  88. package/dist/host/feature-off-host.d.ts +0 -130
  89. package/dist/host/feature-off-host.d.ts.map +0 -1
  90. package/dist/host/feature-off-host.js +0 -138
  91. package/dist/host/feature-off-host.js.map +0 -1
  92. package/dist/host/hermes/crm-key.d.ts +0 -49
  93. package/dist/host/hermes/crm-key.d.ts.map +0 -1
  94. package/dist/host/hermes/crm-key.js +0 -126
  95. package/dist/host/hermes/crm-key.js.map +0 -1
  96. package/dist/host/hermes/ensure-crm-key-db.d.ts +0 -7
  97. package/dist/host/hermes/ensure-crm-key-db.d.ts.map +0 -1
  98. package/dist/host/hermes/ensure-crm-key-db.js +0 -84
  99. package/dist/host/hermes/ensure-crm-key-db.js.map +0 -1
  100. package/dist/host/hermes/launcher.d.ts +0 -98
  101. package/dist/host/hermes/launcher.d.ts.map +0 -1
  102. package/dist/host/hermes/launcher.js +0 -972
  103. package/dist/host/hermes/launcher.js.map +0 -1
  104. package/dist/host/hermes/runtime-bootstrap.d.ts +0 -172
  105. package/dist/host/hermes/runtime-bootstrap.d.ts.map +0 -1
  106. package/dist/host/hermes/runtime-bootstrap.js +0 -789
  107. package/dist/host/hermes/runtime-bootstrap.js.map +0 -1
  108. package/dist/host/hermes/skills-seed.d.ts +0 -40
  109. package/dist/host/hermes/skills-seed.d.ts.map +0 -1
  110. package/dist/host/hermes/skills-seed.js +0 -100
  111. package/dist/host/hermes/skills-seed.js.map +0 -1
  112. package/dist/host/host-stack.d.ts +0 -35
  113. package/dist/host/host-stack.d.ts.map +0 -1
  114. package/dist/host/host-stack.js +0 -38
  115. package/dist/host/host-stack.js.map +0 -1
  116. package/dist/host/kit-os-resources.d.ts +0 -6
  117. package/dist/host/kit-os-resources.d.ts.map +0 -1
  118. package/dist/host/kit-os-resources.js +0 -88
  119. package/dist/host/kit-os-resources.js.map +0 -1
  120. package/dist/host/load-electron.d.ts +0 -2
  121. package/dist/host/load-electron.d.ts.map +0 -1
  122. package/dist/host/load-electron.js +0 -44
  123. package/dist/host/load-electron.js.map +0 -1
  124. package/dist/host/local-config.d.ts +0 -120
  125. package/dist/host/local-config.d.ts.map +0 -1
  126. package/dist/host/local-config.js +0 -633
  127. package/dist/host/local-config.js.map +0 -1
  128. package/dist/host/meili/browse.d.ts +0 -58
  129. package/dist/host/meili/browse.d.ts.map +0 -1
  130. package/dist/host/meili/browse.js +0 -98
  131. package/dist/host/meili/browse.js.map +0 -1
  132. package/dist/host/meili/coherence-db.d.ts +0 -35
  133. package/dist/host/meili/coherence-db.d.ts.map +0 -1
  134. package/dist/host/meili/coherence-db.js +0 -129
  135. package/dist/host/meili/coherence-db.js.map +0 -1
  136. package/dist/host/meili/coherence-query.d.ts +0 -10
  137. package/dist/host/meili/coherence-query.d.ts.map +0 -1
  138. package/dist/host/meili/coherence-query.js +0 -23
  139. package/dist/host/meili/coherence-query.js.map +0 -1
  140. package/dist/host/meili/coherence.d.ts +0 -53
  141. package/dist/host/meili/coherence.d.ts.map +0 -1
  142. package/dist/host/meili/coherence.js +0 -148
  143. package/dist/host/meili/coherence.js.map +0 -1
  144. package/dist/host/meili/feed.d.ts +0 -82
  145. package/dist/host/meili/feed.d.ts.map +0 -1
  146. package/dist/host/meili/feed.js +0 -100
  147. package/dist/host/meili/feed.js.map +0 -1
  148. package/dist/host/meili/generic-indexer.d.ts +0 -34
  149. package/dist/host/meili/generic-indexer.d.ts.map +0 -1
  150. package/dist/host/meili/generic-indexer.js +0 -333
  151. package/dist/host/meili/generic-indexer.js.map +0 -1
  152. package/dist/host/meili/index-schema.d.ts +0 -64
  153. package/dist/host/meili/index-schema.d.ts.map +0 -1
  154. package/dist/host/meili/index-schema.js +0 -70
  155. package/dist/host/meili/index-schema.js.map +0 -1
  156. package/dist/host/meili/index.d.ts +0 -13
  157. package/dist/host/meili/index.d.ts.map +0 -1
  158. package/dist/host/meili/index.js +0 -8
  159. package/dist/host/meili/index.js.map +0 -1
  160. package/dist/host/meili/indexer.d.ts +0 -31
  161. package/dist/host/meili/indexer.d.ts.map +0 -1
  162. package/dist/host/meili/indexer.js +0 -49
  163. package/dist/host/meili/indexer.js.map +0 -1
  164. package/dist/host/meili-launcher.d.ts +0 -30
  165. package/dist/host/meili-launcher.d.ts.map +0 -1
  166. package/dist/host/meili-launcher.js +0 -115
  167. package/dist/host/meili-launcher.js.map +0 -1
  168. package/dist/host/n8n/agent-isolation.d.ts +0 -55
  169. package/dist/host/n8n/agent-isolation.d.ts.map +0 -1
  170. package/dist/host/n8n/agent-isolation.js +0 -158
  171. package/dist/host/n8n/agent-isolation.js.map +0 -1
  172. package/dist/host/n8n/api-key.d.ts +0 -67
  173. package/dist/host/n8n/api-key.d.ts.map +0 -1
  174. package/dist/host/n8n/api-key.js +0 -297
  175. package/dist/host/n8n/api-key.js.map +0 -1
  176. package/dist/host/n8n/launcher.d.ts +0 -126
  177. package/dist/host/n8n/launcher.d.ts.map +0 -1
  178. package/dist/host/n8n/launcher.js +0 -1170
  179. package/dist/host/n8n/launcher.js.map +0 -1
  180. package/dist/host/n8n/runtime-bootstrap.d.ts +0 -44
  181. package/dist/host/n8n/runtime-bootstrap.d.ts.map +0 -1
  182. package/dist/host/n8n/runtime-bootstrap.js +0 -230
  183. package/dist/host/n8n/runtime-bootstrap.js.map +0 -1
  184. package/dist/host/node-runtime.d.ts +0 -52
  185. package/dist/host/node-runtime.d.ts.map +0 -1
  186. package/dist/host/node-runtime.js +0 -257
  187. package/dist/host/node-runtime.js.map +0 -1
  188. package/dist/host/npm-cli.d.ts +0 -43
  189. package/dist/host/npm-cli.d.ts.map +0 -1
  190. package/dist/host/npm-cli.js +0 -213
  191. package/dist/host/npm-cli.js.map +0 -1
  192. package/dist/host/plugins/accept-check.d.ts +0 -19
  193. package/dist/host/plugins/accept-check.d.ts.map +0 -1
  194. package/dist/host/plugins/accept-check.js +0 -172
  195. package/dist/host/plugins/accept-check.js.map +0 -1
  196. package/dist/host/plugins/brand-bindings.d.ts +0 -103
  197. package/dist/host/plugins/brand-bindings.d.ts.map +0 -1
  198. package/dist/host/plugins/brand-bindings.js +0 -65
  199. package/dist/host/plugins/brand-bindings.js.map +0 -1
  200. package/dist/host/plugins/control-adapters.d.ts +0 -11
  201. package/dist/host/plugins/control-adapters.d.ts.map +0 -1
  202. package/dist/host/plugins/control-adapters.js +0 -83
  203. package/dist/host/plugins/control-adapters.js.map +0 -1
  204. package/dist/host/plugins/control-extras.d.ts +0 -61
  205. package/dist/host/plugins/control-extras.d.ts.map +0 -1
  206. package/dist/host/plugins/control-extras.js +0 -382
  207. package/dist/host/plugins/control-extras.js.map +0 -1
  208. package/dist/host/plugins/control-plane.d.ts +0 -42
  209. package/dist/host/plugins/control-plane.d.ts.map +0 -1
  210. package/dist/host/plugins/control-plane.js +0 -124
  211. package/dist/host/plugins/control-plane.js.map +0 -1
  212. package/dist/host/plugins/control-token.d.ts +0 -24
  213. package/dist/host/plugins/control-token.d.ts.map +0 -1
  214. package/dist/host/plugins/control-token.js +0 -77
  215. package/dist/host/plugins/control-token.js.map +0 -1
  216. package/dist/host/plugins/crm-key.d.ts +0 -25
  217. package/dist/host/plugins/crm-key.d.ts.map +0 -1
  218. package/dist/host/plugins/crm-key.js +0 -126
  219. package/dist/host/plugins/crm-key.js.map +0 -1
  220. package/dist/host/plugins/data.d.ts +0 -21
  221. package/dist/host/plugins/data.d.ts.map +0 -1
  222. package/dist/host/plugins/data.js +0 -100
  223. package/dist/host/plugins/data.js.map +0 -1
  224. package/dist/host/plugins/events.d.ts +0 -6
  225. package/dist/host/plugins/events.d.ts.map +0 -1
  226. package/dist/host/plugins/events.js +0 -6
  227. package/dist/host/plugins/events.js.map +0 -1
  228. package/dist/host/plugins/execution-grant.d.ts +0 -6
  229. package/dist/host/plugins/execution-grant.d.ts.map +0 -1
  230. package/dist/host/plugins/execution-grant.js +0 -6
  231. package/dist/host/plugins/execution-grant.js.map +0 -1
  232. package/dist/host/plugins/git.d.ts +0 -56
  233. package/dist/host/plugins/git.d.ts.map +0 -1
  234. package/dist/host/plugins/git.js +0 -357
  235. package/dist/host/plugins/git.js.map +0 -1
  236. package/dist/host/plugins/host.d.ts +0 -68
  237. package/dist/host/plugins/host.d.ts.map +0 -1
  238. package/dist/host/plugins/host.js +0 -276
  239. package/dist/host/plugins/host.js.map +0 -1
  240. package/dist/host/plugins/launcher.d.ts +0 -146
  241. package/dist/host/plugins/launcher.d.ts.map +0 -1
  242. package/dist/host/plugins/launcher.js +0 -489
  243. package/dist/host/plugins/launcher.js.map +0 -1
  244. package/dist/host/plugins/runtime.d.ts +0 -28
  245. package/dist/host/plugins/runtime.d.ts.map +0 -1
  246. package/dist/host/plugins/runtime.js +0 -430
  247. package/dist/host/plugins/runtime.js.map +0 -1
  248. package/dist/host/plugins/test-runner.d.ts +0 -15
  249. package/dist/host/plugins/test-runner.d.ts.map +0 -1
  250. package/dist/host/plugins/test-runner.js +0 -106
  251. package/dist/host/plugins/test-runner.js.map +0 -1
  252. package/dist/host/safe-storage.d.ts +0 -21
  253. package/dist/host/safe-storage.d.ts.map +0 -1
  254. package/dist/host/safe-storage.js +0 -55
  255. package/dist/host/safe-storage.js.map +0 -1
  256. package/dist/host/sandbox/embed-sandbox.d.ts +0 -133
  257. package/dist/host/sandbox/embed-sandbox.d.ts.map +0 -1
  258. package/dist/host/sandbox/embed-sandbox.js +0 -378
  259. package/dist/host/sandbox/embed-sandbox.js.map +0 -1
  260. package/dist/host/sandbox/os-sandbox.d.ts +0 -41
  261. package/dist/host/sandbox/os-sandbox.d.ts.map +0 -1
  262. package/dist/host/sandbox/os-sandbox.js +0 -98
  263. package/dist/host/sandbox/os-sandbox.js.map +0 -1
  264. package/dist/host/server-env.d.ts +0 -50
  265. package/dist/host/server-env.d.ts.map +0 -1
  266. package/dist/host/server-env.js +0 -64
  267. package/dist/host/server-env.js.map +0 -1
  268. package/dist/host/server-launcher.d.ts +0 -49
  269. package/dist/host/server-launcher.d.ts.map +0 -1
  270. package/dist/host/server-launcher.js +0 -43
  271. package/dist/host/server-launcher.js.map +0 -1
  272. package/dist/host/tunnel/cloudflared-respawn.d.ts +0 -58
  273. package/dist/host/tunnel/cloudflared-respawn.d.ts.map +0 -1
  274. package/dist/host/tunnel/cloudflared-respawn.js +0 -73
  275. package/dist/host/tunnel/cloudflared-respawn.js.map +0 -1
  276. package/dist/host/tunnel/tunnel.d.ts +0 -72
  277. package/dist/host/tunnel/tunnel.d.ts.map +0 -1
  278. package/dist/host/tunnel/tunnel.js +0 -462
  279. package/dist/host/tunnel/tunnel.js.map +0 -1
  280. package/dist/logger.d.ts +0 -44
  281. package/dist/logger.d.ts.map +0 -1
  282. package/dist/logger.js +0 -252
  283. package/dist/logger.js.map +0 -1
  284. package/dist-cjs/desktop/legacy-brand-compat.js +0 -56
  285. package/dist-cjs/desktop/legacy-brand-compat.js.map +0 -1
  286. package/dist-cjs/factory-reset-runtime.js +0 -117
  287. package/dist-cjs/factory-reset-runtime.js.map +0 -1
  288. package/dist-cjs/host/ai-workspace/actions.js +0 -247
  289. package/dist-cjs/host/ai-workspace/actions.js.map +0 -1
  290. package/dist-cjs/host/ai-workspace/bindings.js +0 -49
  291. package/dist-cjs/host/ai-workspace/bindings.js.map +0 -1
  292. package/dist-cjs/host/ai-workspace/index.js +0 -21
  293. package/dist-cjs/host/ai-workspace/index.js.map +0 -1
  294. package/dist-cjs/host/ai-workspace/manager.js +0 -528
  295. package/dist-cjs/host/ai-workspace/manager.js.map +0 -1
  296. package/dist-cjs/host/ai-workspace/profile-window.js +0 -125
  297. package/dist-cjs/host/ai-workspace/profile-window.js.map +0 -1
  298. package/dist-cjs/host/ai-workspace/screencast.js +0 -249
  299. package/dist-cjs/host/ai-workspace/screencast.js.map +0 -1
  300. package/dist-cjs/host/ai-workspace/types.js +0 -7
  301. package/dist-cjs/host/ai-workspace/types.js.map +0 -1
  302. package/dist-cjs/host/brand-host-runtime.js +0 -286
  303. package/dist-cjs/host/brand-host-runtime.js.map +0 -1
  304. package/dist-cjs/host/brand-host-stack.js +0 -259
  305. package/dist-cjs/host/brand-host-stack.js.map +0 -1
  306. package/dist-cjs/host/brand-kernel-http.js +0 -101
  307. package/dist-cjs/host/brand-kernel-http.js.map +0 -1
  308. package/dist-cjs/host/brand-meili-boot.js +0 -106
  309. package/dist-cjs/host/brand-meili-boot.js.map +0 -1
  310. package/dist-cjs/host/bridge-client.js +0 -191
  311. package/dist-cjs/host/bridge-client.js.map +0 -1
  312. package/dist-cjs/host/context.js +0 -20
  313. package/dist-cjs/host/context.js.map +0 -1
  314. package/dist-cjs/host/contracts.js +0 -32
  315. package/dist-cjs/host/contracts.js.map +0 -1
  316. package/dist-cjs/host/crash-reporter.js +0 -422
  317. package/dist-cjs/host/crash-reporter.js.map +0 -1
  318. package/dist-cjs/host/ensure-kit-binaries.js +0 -212
  319. package/dist-cjs/host/ensure-kit-binaries.js.map +0 -1
  320. package/dist-cjs/host/feature-off-host.js +0 -144
  321. package/dist-cjs/host/feature-off-host.js.map +0 -1
  322. package/dist-cjs/host/hermes/crm-key.js +0 -137
  323. package/dist-cjs/host/hermes/crm-key.js.map +0 -1
  324. package/dist-cjs/host/hermes/ensure-crm-key-db.js +0 -89
  325. package/dist-cjs/host/hermes/ensure-crm-key-db.js.map +0 -1
  326. package/dist-cjs/host/hermes/launcher.js +0 -981
  327. package/dist-cjs/host/hermes/launcher.js.map +0 -1
  328. package/dist-cjs/host/hermes/runtime-bootstrap.js +0 -853
  329. package/dist-cjs/host/hermes/runtime-bootstrap.js.map +0 -1
  330. package/dist-cjs/host/hermes/skills-seed.js +0 -110
  331. package/dist-cjs/host/hermes/skills-seed.js.map +0 -1
  332. package/dist-cjs/host/host-stack.js +0 -42
  333. package/dist-cjs/host/host-stack.js.map +0 -1
  334. package/dist-cjs/host/kit-os-resources.js +0 -96
  335. package/dist-cjs/host/kit-os-resources.js.map +0 -1
  336. package/dist-cjs/host/load-electron.js +0 -47
  337. package/dist-cjs/host/load-electron.js.map +0 -1
  338. package/dist-cjs/host/local-config.js +0 -640
  339. package/dist-cjs/host/local-config.js.map +0 -1
  340. package/dist-cjs/host/meili/browse.js +0 -103
  341. package/dist-cjs/host/meili/browse.js.map +0 -1
  342. package/dist-cjs/host/meili/coherence-db.js +0 -139
  343. package/dist-cjs/host/meili/coherence-db.js.map +0 -1
  344. package/dist-cjs/host/meili/coherence-query.js +0 -25
  345. package/dist-cjs/host/meili/coherence-query.js.map +0 -1
  346. package/dist-cjs/host/meili/coherence.js +0 -158
  347. package/dist-cjs/host/meili/coherence.js.map +0 -1
  348. package/dist-cjs/host/meili/feed.js +0 -108
  349. package/dist-cjs/host/meili/feed.js.map +0 -1
  350. package/dist-cjs/host/meili/generic-indexer.js +0 -340
  351. package/dist-cjs/host/meili/generic-indexer.js.map +0 -1
  352. package/dist-cjs/host/meili/index-schema.js +0 -79
  353. package/dist-cjs/host/meili/index-schema.js.map +0 -1
  354. package/dist-cjs/host/meili/index.js +0 -45
  355. package/dist-cjs/host/meili/index.js.map +0 -1
  356. package/dist-cjs/host/meili/indexer.js +0 -85
  357. package/dist-cjs/host/meili/indexer.js.map +0 -1
  358. package/dist-cjs/host/meili-launcher.js +0 -121
  359. package/dist-cjs/host/meili-launcher.js.map +0 -1
  360. package/dist-cjs/host/n8n/agent-isolation.js +0 -173
  361. package/dist-cjs/host/n8n/agent-isolation.js.map +0 -1
  362. package/dist-cjs/host/n8n/api-key.js +0 -314
  363. package/dist-cjs/host/n8n/api-key.js.map +0 -1
  364. package/dist-cjs/host/n8n/launcher.js +0 -1209
  365. package/dist-cjs/host/n8n/launcher.js.map +0 -1
  366. package/dist-cjs/host/n8n/runtime-bootstrap.js +0 -244
  367. package/dist-cjs/host/n8n/runtime-bootstrap.js.map +0 -1
  368. package/dist-cjs/host/node-runtime.js +0 -274
  369. package/dist-cjs/host/node-runtime.js.map +0 -1
  370. package/dist-cjs/host/npm-cli.js +0 -224
  371. package/dist-cjs/host/npm-cli.js.map +0 -1
  372. package/dist-cjs/host/plugins/accept-check.js +0 -176
  373. package/dist-cjs/host/plugins/accept-check.js.map +0 -1
  374. package/dist-cjs/host/plugins/brand-bindings.js +0 -78
  375. package/dist-cjs/host/plugins/brand-bindings.js.map +0 -1
  376. package/dist-cjs/host/plugins/control-adapters.js +0 -89
  377. package/dist-cjs/host/plugins/control-adapters.js.map +0 -1
  378. package/dist-cjs/host/plugins/control-extras.js +0 -397
  379. package/dist-cjs/host/plugins/control-extras.js.map +0 -1
  380. package/dist-cjs/host/plugins/control-plane.js +0 -130
  381. package/dist-cjs/host/plugins/control-plane.js.map +0 -1
  382. package/dist-cjs/host/plugins/control-token.js +0 -90
  383. package/dist-cjs/host/plugins/control-token.js.map +0 -1
  384. package/dist-cjs/host/plugins/crm-key.js +0 -135
  385. package/dist-cjs/host/plugins/crm-key.js.map +0 -1
  386. package/dist-cjs/host/plugins/data.js +0 -107
  387. package/dist-cjs/host/plugins/data.js.map +0 -1
  388. package/dist-cjs/host/plugins/events.js +0 -19
  389. package/dist-cjs/host/plugins/events.js.map +0 -1
  390. package/dist-cjs/host/plugins/execution-grant.js +0 -11
  391. package/dist-cjs/host/plugins/execution-grant.js.map +0 -1
  392. package/dist-cjs/host/plugins/git.js +0 -371
  393. package/dist-cjs/host/plugins/git.js.map +0 -1
  394. package/dist-cjs/host/plugins/host.js +0 -283
  395. package/dist-cjs/host/plugins/host.js.map +0 -1
  396. package/dist-cjs/host/plugins/launcher.js +0 -514
  397. package/dist-cjs/host/plugins/launcher.js.map +0 -1
  398. package/dist-cjs/host/plugins/runtime.js +0 -446
  399. package/dist-cjs/host/plugins/runtime.js.map +0 -1
  400. package/dist-cjs/host/plugins/test-runner.js +0 -112
  401. package/dist-cjs/host/plugins/test-runner.js.map +0 -1
  402. package/dist-cjs/host/safe-storage.js +0 -95
  403. package/dist-cjs/host/safe-storage.js.map +0 -1
  404. package/dist-cjs/host/sandbox/embed-sandbox.js +0 -396
  405. package/dist-cjs/host/sandbox/embed-sandbox.js.map +0 -1
  406. package/dist-cjs/host/sandbox/os-sandbox.js +0 -106
  407. package/dist-cjs/host/sandbox/os-sandbox.js.map +0 -1
  408. package/dist-cjs/host/server-env.js +0 -69
  409. package/dist-cjs/host/server-env.js.map +0 -1
  410. package/dist-cjs/host/server-launcher.js +0 -52
  411. package/dist-cjs/host/server-launcher.js.map +0 -1
  412. package/dist-cjs/host/tunnel/cloudflared-respawn.js +0 -80
  413. package/dist-cjs/host/tunnel/cloudflared-respawn.js.map +0 -1
  414. package/dist-cjs/host/tunnel/tunnel.js +0 -470
  415. package/dist-cjs/host/tunnel/tunnel.js.map +0 -1
  416. package/dist-cjs/logger.js +0 -269
  417. package/dist-cjs/logger.js.map +0 -1
@@ -1,981 +0,0 @@
1
- "use strict";
2
- /**
3
- * Sidecar Hermes Agent + WebUI — factory brand-agnostic.
4
- * SoT extrait de TempoFlow hermes-launcher.ts (R3.3) — chemins gold intacts.
5
- */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.serverWebuiPassword = serverWebuiPassword;
11
- exports.clearGeneratedWebuiPassword = clearGeneratedWebuiPassword;
12
- exports.clearTempoflowGeneratedWebuiPassword = clearTempoflowGeneratedWebuiPassword;
13
- exports.createHermesHost = createHermesHost;
14
- const node_child_process_1 = require("node:child_process");
15
- const node_crypto_1 = __importDefault(require("node:crypto"));
16
- const node_fs_1 = __importDefault(require("node:fs"));
17
- const node_http_1 = __importDefault(require("node:http"));
18
- const node_path_1 = __importDefault(require("node:path"));
19
- const platform_core_1 = require("@creezio/platform-core");
20
- const context_js_1 = require("../context.js");
21
- const embed_sandbox_js_1 = require("../sandbox/embed-sandbox.js");
22
- const server_env_js_1 = require("../server-env.js");
23
- const node_runtime_js_1 = require("../node-runtime.js");
24
- const runtime_bootstrap_js_1 = require("./runtime-bootstrap.js");
25
- /**
26
- * Password WebUI en mode serveur : `HERMES_WEBUI_PASSWORD` explicite, sinon
27
- * superadmin flotte (`CREEZIO_SUPERADMIN_PASSWORD`). null = desktop loopback
28
- * (auth off, contrat gold sans prompt).
29
- */
30
- function serverWebuiPassword() {
31
- const explicit = (process.env.HERMES_WEBUI_PASSWORD || "").trim();
32
- if (explicit)
33
- return explicit;
34
- const superadmin = (process.env.CREEZIO_SUPERADMIN_PASSWORD || "").trim();
35
- return superadmin.length >= 12 ? superadmin : null;
36
- }
37
- /** Clear legacy generated WebUI password (gold: no login prompt on loopback). */
38
- function clearGeneratedWebuiPassword(home, stateDir, secretPrefix) {
39
- clearGeneratedWebuiPasswordImpl(home, stateDir, secretPrefix);
40
- }
41
- /** @deprecated gold marker alias */
42
- function clearTempoflowGeneratedWebuiPassword(home, stateDir, secretPrefix) {
43
- clearGeneratedWebuiPasswordImpl(home, stateDir, secretPrefix);
44
- }
45
- function clearGeneratedWebuiPasswordImpl(home, stateDir, secretPrefix) {
46
- const files = [
47
- node_path_1.default.join(home, ".tempoflow-webui-password"),
48
- node_path_1.default.join(home, ".desktop-hermes-webui-password"),
49
- node_path_1.default.join(home, ".certivan-webui-password"),
50
- node_path_1.default.join(home, ".fidu-webui-password"),
51
- ];
52
- if (secretPrefix) {
53
- files.push(node_path_1.default.join(home, `.${secretPrefix}-webui-password`));
54
- }
55
- for (const f of files) {
56
- try {
57
- if (node_fs_1.default.existsSync(f))
58
- node_fs_1.default.unlinkSync(f);
59
- }
60
- catch {
61
- /* ignore */
62
- }
63
- }
64
- const envPath = node_path_1.default.join(home, ".env");
65
- try {
66
- if (node_fs_1.default.existsSync(envPath)) {
67
- const body = node_fs_1.default.readFileSync(envPath, "utf8");
68
- const next = body
69
- .split(/\r?\n/)
70
- .filter((line) => !/^\s*HERMES_WEBUI_PASSWORD\s*=/.test(line))
71
- .join("\n");
72
- if (next !== body)
73
- node_fs_1.default.writeFileSync(envPath, next, { mode: 0o600 });
74
- }
75
- }
76
- catch {
77
- /* ignore */
78
- }
79
- const settingsPath = node_path_1.default.join(stateDir, "settings.json");
80
- try {
81
- if (node_fs_1.default.existsSync(settingsPath)) {
82
- const raw = JSON.parse(node_fs_1.default.readFileSync(settingsPath, "utf8"));
83
- if (raw && typeof raw === "object" && "password_hash" in raw) {
84
- delete raw.password_hash;
85
- node_fs_1.default.writeFileSync(settingsPath, JSON.stringify(raw, null, 2) + "\n", {
86
- mode: 0o600,
87
- });
88
- }
89
- }
90
- }
91
- catch {
92
- /* ignore */
93
- }
94
- }
95
- function createHermesHost(opts) {
96
- const { ctx, store } = opts;
97
- const homeDir = () => node_path_1.default.join(ctx.userDataDir, "hermes-home");
98
- const product = () => (0, context_js_1.hostProductName)(ctx);
99
- const state = {
100
- running: null,
101
- starting: false,
102
- lastError: null,
103
- version: null,
104
- logs: [],
105
- binaryPath: null,
106
- webuiStatus: "stopped",
107
- webuiError: null,
108
- installing: false,
109
- lastStartPath: null,
110
- };
111
- /** "bootstrap" = runtime installé pendant ce boot ; "reuse" = déjà présent. */
112
- function getHermesLastStartPath() {
113
- return state.lastStartPath;
114
- }
115
- const LOG_MAX = 200;
116
- let startInFlight = null;
117
- function pushLog(line) {
118
- const ts = new Date().toISOString().slice(11, 19);
119
- state.logs.push("[" + ts + "] " + line);
120
- if (state.logs.length > LOG_MAX)
121
- state.logs.shift();
122
- (0, context_js_1.hostLog)(ctx, "hermes", line);
123
- }
124
- /**
125
- * Dossiers d'outils LÉGITIMES pour le PATH confiné des process Hermes :
126
- * venv Hermes, Node TempoFlow, MinGit embarqué. Rien du PC hôte.
127
- */
128
- function hermesToolPathDirs(primaryDir) {
129
- const dirs = [primaryDir];
130
- try {
131
- const node = (0, node_runtime_js_1.resolveDesktopNodeBinary)(ctx);
132
- if (node && node_path_1.default.isAbsolute(node))
133
- dirs.push(node_path_1.default.dirname(node));
134
- }
135
- catch {
136
- /* app pas prête */
137
- }
138
- try {
139
- const git = ctx.getGitBinary?.() || null;
140
- if (git)
141
- dirs.push(node_path_1.default.dirname(git));
142
- }
143
- catch {
144
- /* absent */
145
- }
146
- return dirs;
147
- }
148
- function findHermesBinary() {
149
- // Même racine que le bootstrap (space-safe si userData a des espaces).
150
- const runtime = (0, runtime_bootstrap_js_1.hermesRuntimeCacheDir)(ctx);
151
- const profile = node_path_1.default.join(runtime, "os-profile");
152
- const localApp = node_path_1.default.join(runtime, "bin");
153
- const vendorBin = node_path_1.default.join((0, runtime_bootstrap_js_1.hermesVendorDir)(ctx), "bin");
154
- // Sandbox TempoFlow d’abord — pas le profil Windows Admin.
155
- const sandLocalBin = node_path_1.default.join(profile, "AppData", "Local", "hermes", "bin");
156
- const sandHermesBin = node_path_1.default.join(profile, ".hermes", "bin");
157
- const sandAgentScripts = process.platform === "win32"
158
- ? node_path_1.default.join(profile, "AppData", "Local", "hermes", "hermes-agent", "venv", "Scripts")
159
- : node_path_1.default.join(profile, ".hermes", "hermes-agent", "venv", "bin");
160
- // Legacy (userData à espaces) — migration / installs antérieures.
161
- const legacyRuntime = node_path_1.default.join(ctx.userDataDir, "hermes-runtime");
162
- const legacyProfile = node_path_1.default.join(legacyRuntime, "os-profile");
163
- const resolved = (0, platform_core_1.resolveHermesBinary)({
164
- platform: process.platform,
165
- env: process.env,
166
- searchDirs: [
167
- localApp,
168
- vendorBin,
169
- sandLocalBin,
170
- sandHermesBin,
171
- sandAgentScripts,
172
- node_path_1.default.join(legacyRuntime, "bin"),
173
- node_path_1.default.join(legacyProfile, ".hermes", "bin"),
174
- node_path_1.default.join(legacyProfile, ".hermes", "hermes-agent", "venv", "bin"),
175
- // Containers root Linux : installs FHS antérieures au verrou
176
- // HERMES_INSTALL_DIR (/usr/local) — jamais consulté sur desktop.
177
- ...(0, runtime_bootstrap_js_1.hermesFhsFallbackDirs)(process.platform, typeof process.getuid === "function" ? process.getuid() : null),
178
- ].filter(Boolean),
179
- // OS TempoFlow : jamais de `which`/`where` — sandbox uniquement.
180
- // Overrides env autorisés seulement hors build packagé (dev/tests).
181
- allowEnvOverride: !ctx.isPackaged,
182
- envPrefix: ctx.manifest.envPrefix,
183
- existsSync: (p) => {
184
- try {
185
- return node_fs_1.default.existsSync(p);
186
- }
187
- catch {
188
- return false;
189
- }
190
- },
191
- });
192
- state.binaryPath = resolved;
193
- return resolved;
194
- }
195
- function ensureApiKey(home) {
196
- node_fs_1.default.mkdirSync(home, { recursive: true });
197
- const prefix = ctx.secretFilePrefix || ctx.manifest.brandId || "desktop";
198
- /** Canon marque : `.certivan-api-server-key` / `.tempoflow-api-server-key`. */
199
- const keyFile = node_path_1.default.join(home, `.${prefix}-api-server-key`);
200
- const desktop = node_path_1.default.join(home, ".desktop-hermes-api-key");
201
- const tempoflow = node_path_1.default.join(home, ".tempoflow-api-server-key");
202
- for (const f of [keyFile, desktop, tempoflow]) {
203
- try {
204
- const existing = node_fs_1.default.readFileSync(f, "utf8").trim();
205
- if (existing.length >= 16) {
206
- if (f !== keyFile)
207
- node_fs_1.default.writeFileSync(keyFile, existing, { mode: 0o600 });
208
- return existing;
209
- }
210
- }
211
- catch {
212
- /* */
213
- }
214
- }
215
- const key = node_crypto_1.default.randomBytes(24).toString("base64url");
216
- node_fs_1.default.writeFileSync(keyFile, key, { mode: 0o600 });
217
- return key;
218
- }
219
- async function writeHermesHome(opts) {
220
- const paths = (0, embed_sandbox_js_1.hermesSandboxPaths)(opts.home);
221
- node_fs_1.default.mkdirSync(paths.home, { recursive: true });
222
- node_fs_1.default.mkdirSync(paths.profileHome, { recursive: true });
223
- node_fs_1.default.mkdirSync(paths.workspace, { recursive: true });
224
- // README pour l’utilisateur / support — le workspace OS est ICI, pas ~/workspace.
225
- const readme = node_path_1.default.join(paths.workspace, "README-WORKSPACE.txt");
226
- if (!node_fs_1.default.existsSync(readme)) {
227
- node_fs_1.default.writeFileSync(readme, [
228
- product() + " — workspace Hermes",
229
- "",
230
- "Workspace pour le Work général (brouillons, scripts, analyses).",
231
- "Il vit dans le profil desktop (userData), pas dans C:\\Users\\…\\workspace.",
232
- "",
233
- "Plugins : NE PAS installer ici.",
234
- "Utiliser PLUGINS_API_URL (control plane) → userData/plugins/.",
235
- "",
236
- ].join("\n"), "utf8");
237
- }
238
- const llm = store.getLlmKeys();
239
- const bridgeEnv = ctx.getHermesBridgeEnv?.(opts.crmPort != null ? { crmPort: opts.crmPort } : undefined) || {};
240
- const envBody = (0, platform_core_1.buildHermesHomeEnvFile)({
241
- apiKey: opts.apiKey,
242
- apiPort: opts.apiPort,
243
- openaiKey: llm.openai,
244
- anthropicKey: llm.anthropic,
245
- userEnv: store.getEmbedUserEnv("hermes"),
246
- bridgeEnv,
247
- // Pas de password WebUI : loopback + auth optionnelle (voir PLAN-HERMES).
248
- });
249
- node_fs_1.default.writeFileSync(node_path_1.default.join(opts.home, ".env"), envBody, { mode: 0o600 });
250
- if (ctx.seedHermesSkills) {
251
- try {
252
- await Promise.resolve(ctx.seedHermesSkills(opts.home));
253
- }
254
- catch (e) {
255
- pushLog("skills seed: " + (e instanceof Error ? e.message : e));
256
- }
257
- }
258
- const cfgPath = node_path_1.default.join(opts.home, "config.yaml");
259
- let existing = "";
260
- try {
261
- existing = node_fs_1.default.readFileSync(cfgPath, "utf8");
262
- }
263
- catch {
264
- existing = "";
265
- }
266
- // H1 — bloc mcp_servers (façade MCP CRM, Bearer clé Hermes) upserté après
267
- // le bloc sandbox, idempotent, sans toucher la config utilisateur.
268
- const mcpConfig = ctx.getHermesMcpServerConfig?.(opts.crmPort != null ? { crmPort: opts.crmPort } : undefined) || null;
269
- node_fs_1.default.writeFileSync(cfgPath, (0, embed_sandbox_js_1.upsertHermesMcpConfig)((0, embed_sandbox_js_1.upsertHermesSandboxConfig)(existing, paths.workspace), mcpConfig), "utf8");
270
- if (mcpConfig) {
271
- pushLog(`config: mcp_servers.${mcpConfig.serverName} → ${mcpConfig.url}`);
272
- }
273
- return { profileHome: paths.profileHome, workspace: paths.workspace };
274
- }
275
- function waitForHttpOk(url, opts = {}) {
276
- const deadline = Date.now() + (opts.timeoutMs ?? 90000);
277
- return new Promise((resolve) => {
278
- const tryOnce = () => {
279
- const req = node_http_1.default.get(url, { timeout: 2000, headers: opts.headers || {} }, (res) => {
280
- const chunks = [];
281
- res.on("data", (c) => chunks.push(c));
282
- res.on("end", () => {
283
- const body = Buffer.concat(chunks).toString("utf8");
284
- if (res.statusCode && res.statusCode >= 200 && res.statusCode < 500) {
285
- resolve({ ok: res.statusCode < 400, body, status: res.statusCode });
286
- return;
287
- }
288
- next();
289
- });
290
- });
291
- req.on("error", () => next());
292
- req.on("timeout", () => {
293
- req.destroy();
294
- next();
295
- });
296
- };
297
- const next = () => {
298
- if (Date.now() > deadline) {
299
- resolve({ ok: false, body: "", status: null });
300
- }
301
- else {
302
- setTimeout(tryOnce, 500);
303
- }
304
- };
305
- tryOnce();
306
- });
307
- }
308
- function waitForHermesHealth(apiUrl, apiKey, timeoutMs = 90000) {
309
- return waitForHttpOk(`${apiUrl}/health`, {
310
- timeoutMs,
311
- headers: { Authorization: `Bearer ${apiKey}` },
312
- }).then((r) => {
313
- if (!r.ok)
314
- return { ok: false, version: null, detail: "health timeout" };
315
- let version = null;
316
- try {
317
- const j = JSON.parse(r.body);
318
- version = j.version || null;
319
- }
320
- catch {
321
- /* ignore */
322
- }
323
- return { ok: true, version, detail: "ok" };
324
- });
325
- }
326
- async function spawnWebui(opts) {
327
- const agentDir = (0, runtime_bootstrap_js_1.resolveHermesAgentDir)(ctx);
328
- const python = (0, runtime_bootstrap_js_1.resolveHermesPython)(agentDir);
329
- const webuiDir = (0, runtime_bootstrap_js_1.hermesWebuiInstallDir)(ctx);
330
- const serverPy = node_path_1.default.join(webuiDir, "server.py");
331
- if (!python || !node_fs_1.default.existsSync(serverPy)) {
332
- state.webuiStatus = "missing";
333
- state.webuiError = "WebUI ou Python Hermes absent";
334
- opts.log(state.webuiError);
335
- return null;
336
- }
337
- const webuiPort = await (0, server_env_js_1.findFreePort)(platform_core_1.HERMES_DESKTOP_WEBUI_PORT);
338
- const webuiUrl = `http://127.0.0.1:${webuiPort}`;
339
- const stateDir = node_path_1.default.join(ctx.userDataDir, "hermes-webui-state");
340
- node_fs_1.default.mkdirSync(stateDir, { recursive: true });
341
- // Mode serveur/flotte : le WebUI est exposé publiquement via le tunnel
342
- // (hermes.{slug}.{domaine}) → protection par le mécanisme natif Hermes
343
- // (HERMES_WEBUI_PASSWORD = superadmin flotte). Desktop loopback : auth off
344
- // (gold — pas de prompt).
345
- const webuiPassword = serverWebuiPassword();
346
- if (!webuiPassword) {
347
- clearGeneratedWebuiPassword(opts.home, stateDir, ctx.secretFilePrefix || ctx.manifest.brandId); // clearTempoflowGeneratedWebuiPassword gold
348
- }
349
- opts.log(`spawn WebUI ${serverPy} → ${webuiUrl} (${webuiPassword ? "auth superadmin flotte ACTIVE" : "auth loopback désactivée"})`);
350
- const sand = (0, embed_sandbox_js_1.hermesSandboxPaths)(opts.home);
351
- // Chat WebUI = runtime in-process (pas la gateway) → BYOK obligatoire ici aussi.
352
- const llm = store.getLlmKeys();
353
- const childEnv = (0, embed_sandbox_js_1.applyOsSandboxEnv)({
354
- env: {
355
- ...process.env,
356
- HERMES_HOME: opts.home,
357
- HERMES_WEBUI_HOST: "127.0.0.1",
358
- HERMES_WEBUI_PORT: String(webuiPort),
359
- HERMES_WEBUI_GATEWAY_BASE_URL: opts.apiUrl,
360
- HERMES_WEBUI_GATEWAY_API_KEY: opts.apiKey,
361
- HERMES_WEBUI_STATE_DIR: stateDir,
362
- HERMES_WEBUI_AGENT_DIR: agentDir || "",
363
- HERMES_WEBUI_DISABLE_SELF_UPDATE: "1",
364
- PYTHONUNBUFFERED: "1",
365
- TERMINAL_CWD: sand.workspace,
366
- },
367
- profileHome: sand.profileHome,
368
- userData: ctx.userDataDir,
369
- // PATH confiné : venv Python Hermes + System32 — pas le PATH utilisateur.
370
- toolDirs: hermesToolPathDirs(node_path_1.default.dirname(python)),
371
- });
372
- // Ne jamais propager un password hérité du process parent / anciens builds —
373
- // sauf protection serveur explicite (superadmin flotte).
374
- delete childEnv.HERMES_WEBUI_PASSWORD;
375
- if (webuiPassword)
376
- childEnv.HERMES_WEBUI_PASSWORD = webuiPassword;
377
- delete childEnv.OPENAI_API_KEY;
378
- delete childEnv.ANTHROPIC_API_KEY;
379
- if (llm.openai)
380
- childEnv.OPENAI_API_KEY = llm.openai;
381
- if (llm.anthropic)
382
- childEnv.ANTHROPIC_API_KEY = llm.anthropic;
383
- const child = (0, node_child_process_1.spawn)(python, [serverPy], {
384
- cwd: webuiDir,
385
- env: childEnv,
386
- stdio: ["ignore", "pipe", "pipe"],
387
- windowsHide: true,
388
- });
389
- child.stdout?.on("data", (d) => d
390
- .toString()
391
- .split("\n")
392
- .filter(Boolean)
393
- .forEach((l) => opts.log(`webui: ${l}`)));
394
- child.stderr?.on("data", (d) => d
395
- .toString()
396
- .split("\n")
397
- .filter(Boolean)
398
- .forEach((l) => opts.log(`webui stderr: ${l}`)));
399
- child.on("exit", (code, signal) => {
400
- opts.log(`webui exit code=${code} signal=${signal}`);
401
- if (state.running?.webuiChild === child) {
402
- state.running.webuiChild = null;
403
- state.running.webuiUrl = null;
404
- state.webuiStatus = "stopped";
405
- }
406
- });
407
- // Login endpoint répond 401/400 sans cookie — prouve que le serveur écoute.
408
- const probe = await waitForHttpOk(`${webuiUrl}/api/auth/login`, {
409
- timeoutMs: 60000,
410
- });
411
- // POST would be needed for real login; GET often 405 — any TCP response = up
412
- const up = await waitForHttpOk(`${webuiUrl}/`, { timeoutMs: 30000 });
413
- if (!up.ok && !probe.status) {
414
- try {
415
- child.kill();
416
- }
417
- catch {
418
- /* ignore */
419
- }
420
- state.webuiStatus = "error";
421
- state.webuiError = "WebUI health timeout";
422
- opts.log(state.webuiError);
423
- return null;
424
- }
425
- state.webuiStatus = "running";
426
- state.webuiError = null;
427
- opts.log(`WebUI ready ${webuiUrl}`);
428
- return { child, webuiUrl };
429
- }
430
- /**
431
- * Démarre Hermes si applicable. Retourne null sans throw si skip / missing / erreur.
432
- */
433
- async function startHermesImpl(opts) {
434
- const hermesConfig = (0, platform_core_1.sanitizeHermesEmbedConfig)(opts.hermesConfig ?? store.getHermesEmbedConfig());
435
- if (!(0, platform_core_1.shouldSpawnEmbeddedHermes)({
436
- connectionMode: opts.connectionMode,
437
- hermes: hermesConfig,
438
- })) {
439
- pushLog(opts.connectionMode === "remote"
440
- ? "skip spawn (client distant)"
441
- : `skip spawn (mode=${hermesConfig.mode})`);
442
- state.webuiStatus = "skipped";
443
- return null;
444
- }
445
- if (hermesConfig.mode === "remote") {
446
- pushLog(`mode remote → ${hermesConfig.remoteApiUrl || "(url manquante)"}`);
447
- state.webuiStatus = "skipped";
448
- return null;
449
- }
450
- const log = (line) => {
451
- pushLog(line);
452
- opts.onLog?.(line);
453
- };
454
- let bin = findHermesBinary();
455
- // Honnêteté splash + télémétrie : distinguer installation réelle vs runtime
456
- // déjà présent réutilisé (ex. userData non purgé par une désinstallation).
457
- state.lastStartPath = bin ? "reuse" : "bootstrap";
458
- if (!bin && opts.autoBootstrap !== false) {
459
- state.installing = true;
460
- log("runtime manquant — bootstrap automatique…");
461
- try {
462
- const boot = await (0, runtime_bootstrap_js_1.ensureHermesRuntime)(ctx, { onLog: log });
463
- log(boot.detail);
464
- bin = boot.binary || findHermesBinary();
465
- if (!boot.ok && !bin) {
466
- state.lastError = boot.detail;
467
- state.installing = false;
468
- return null;
469
- }
470
- }
471
- finally {
472
- state.installing = false;
473
- }
474
- }
475
- else if (bin && opts.autoBootstrap !== false) {
476
- // CLI déjà là : assurer quand même WebUI (léger si pin présent)
477
- const agentDir = (0, runtime_bootstrap_js_1.resolveHermesAgentDir)(ctx);
478
- const python = (0, runtime_bootstrap_js_1.resolveHermesPython)(agentDir);
479
- if (python) {
480
- state.installing = true;
481
- try {
482
- const w = await (0, runtime_bootstrap_js_1.ensureHermesWebuiTree)(ctx, { onLog: log });
483
- if (!w.ok)
484
- log(`WebUI bootstrap: ${w.detail}`);
485
- }
486
- finally {
487
- state.installing = false;
488
- }
489
- }
490
- }
491
- if (!bin) {
492
- state.lastError = "CLI Hermes introuvable (sandbox userData / bootstrap)";
493
- log(state.lastError);
494
- state.webuiStatus = "missing";
495
- return null;
496
- }
497
- try {
498
- const home = homeDir();
499
- const apiPort = await (0, server_env_js_1.findFreePort)(platform_core_1.HERMES_DESKTOP_API_PORT);
500
- // Clé API gateway générée/silencieuse (Bearer Work) — jamais de prompt UI.
501
- const apiKey = ensureApiKey(home);
502
- clearGeneratedWebuiPassword(home, node_path_1.default.join(ctx.userDataDir, "hermes-webui-state"), ctx.secretFilePrefix || ctx.manifest.brandId);
503
- const sand = await writeHermesHome({
504
- home,
505
- apiKey,
506
- apiPort,
507
- crmPort: opts.crmPort,
508
- });
509
- const apiUrl = `http://127.0.0.1:${apiPort}`;
510
- log(`spawn ${bin} gateway run (home=${home}, workspace=${sand.workspace}, api=${apiUrl})`);
511
- const bridgeEnv = (ctx.getHermesBridgeEnv?.(opts.crmPort != null ? { crmPort: opts.crmPort } : undefined) || {});
512
- // BYOK TempoFlow → process Hermes (en plus du .env écrit par writeHermesHome).
513
- const llm = store.getLlmKeys();
514
- const productEnv = {
515
- HERMES_HOME: home,
516
- API_SERVER_ENABLED: "true",
517
- API_SERVER_KEY: apiKey,
518
- API_SERVER_PORT: String(apiPort),
519
- API_SERVER_HOST: "127.0.0.1",
520
- TERMINAL_CWD: sand.workspace,
521
- PYTHONUNBUFFERED: "1",
522
- ...bridgeEnv,
523
- };
524
- if (llm.openai)
525
- productEnv.OPENAI_API_KEY = llm.openai;
526
- if (llm.anthropic)
527
- productEnv.ANTHROPIC_API_KEY = llm.anthropic;
528
- const mergedUser = (0, platform_core_1.mergeEmbedUserEnv)({
529
- service: "hermes",
530
- systemEnv: productEnv,
531
- userOverlay: store.getEmbedUserEnv("hermes"),
532
- });
533
- const gatewayEnv = (0, embed_sandbox_js_1.applyOsSandboxEnv)({
534
- env: {
535
- ...process.env,
536
- ...mergedUser,
537
- ...productEnv,
538
- },
539
- profileHome: sand.profileHome,
540
- userData: ctx.userDataDir,
541
- // PATH confiné : CLI Hermes (venv) + Node/git TempoFlow + System32.
542
- // Le terminal de l'agent ne résout AUCUN outil du PC hôte.
543
- toolDirs: hermesToolPathDirs(node_path_1.default.dirname(bin)),
544
- });
545
- delete gatewayEnv.HERMES_WEBUI_PASSWORD;
546
- // Ne jamais laisser une clé vide / héritée écraser le BYOK TempoFlow.
547
- delete gatewayEnv.OPENAI_API_KEY;
548
- delete gatewayEnv.ANTHROPIC_API_KEY;
549
- if (llm.openai)
550
- gatewayEnv.OPENAI_API_KEY = llm.openai;
551
- if (llm.anthropic)
552
- gatewayEnv.ANTHROPIC_API_KEY = llm.anthropic;
553
- const child = (0, node_child_process_1.spawn)(bin, ["gateway", "run", "--accept-hooks"], {
554
- cwd: sand.workspace,
555
- env: gatewayEnv,
556
- stdio: ["ignore", "pipe", "pipe"],
557
- windowsHide: true,
558
- });
559
- const errTail = [];
560
- child.stdout?.on("data", (d) => d
561
- .toString()
562
- .split("\n")
563
- .filter(Boolean)
564
- .forEach((l) => log(l)));
565
- child.stderr?.on("data", (d) => d
566
- .toString()
567
- .split("\n")
568
- .filter(Boolean)
569
- .forEach((l) => {
570
- errTail.push(l);
571
- if (errTail.length > 30)
572
- errTail.shift();
573
- log(`stderr: ${l}`);
574
- }));
575
- const spawnErr = { current: null };
576
- child.on("error", (e) => {
577
- spawnErr.current = e;
578
- log(`spawn error: ${e.message}`);
579
- });
580
- child.on("exit", (code, signal) => {
581
- log(`exit code=${code} signal=${signal}`);
582
- if (state.running?.child === child) {
583
- state.running = null;
584
- }
585
- });
586
- const health = await waitForHermesHealth(apiUrl, apiKey);
587
- if (!health.ok) {
588
- try {
589
- child.kill();
590
- }
591
- catch {
592
- /* ignore */
593
- }
594
- state.lastError =
595
- spawnErr.current?.message ||
596
- health.detail ||
597
- (errTail.length ? errTail.slice(-5).join(" | ") : "démarrage Hermes échoué");
598
- log(`échec health: ${state.lastError}`);
599
- return null;
600
- }
601
- let webuiChild = null;
602
- let webuiUrl = hermesConfig.remoteWebuiUrl || null;
603
- const webui = await spawnWebui({
604
- apiUrl,
605
- apiKey,
606
- home,
607
- log,
608
- });
609
- if (webui) {
610
- webuiChild = webui.child;
611
- webuiUrl = webui.webuiUrl;
612
- }
613
- state.version = health.version;
614
- state.lastError = null;
615
- const running = {
616
- apiUrl,
617
- apiKey,
618
- webuiUrl,
619
- // Embedded loopback : pas de password WebUI (auth off) — évite le prompt.
620
- webuiPassword: null,
621
- homeDir: home,
622
- child,
623
- webuiChild,
624
- stop: () => {
625
- if (webuiChild) {
626
- try {
627
- webuiChild.kill();
628
- }
629
- catch {
630
- /* already dead */
631
- }
632
- }
633
- try {
634
- child.kill();
635
- }
636
- catch {
637
- /* already dead */
638
- }
639
- },
640
- };
641
- state.running = running;
642
- log(`ready v${health.version || "?"} ${apiUrl}${webuiUrl ? ` webui=${webuiUrl}` : ""}`);
643
- return running;
644
- }
645
- catch (e) {
646
- state.lastError = e instanceof Error ? e.message : String(e);
647
- log(`exception: ${state.lastError}`);
648
- return null;
649
- }
650
- }
651
- /**
652
- * Démarrage sérialisé : un clic UI ou une propagation de configuration ne
653
- * peuvent plus lancer deux gateways/WebUI en parallèle.
654
- */
655
- function startHermes(opts) {
656
- if (state.running)
657
- return Promise.resolve(state.running);
658
- if (startInFlight)
659
- return startInFlight;
660
- state.starting = true;
661
- state.lastError = null;
662
- state.webuiError = null;
663
- const pending = startHermesImpl(opts).finally(() => {
664
- state.starting = false;
665
- if (startInFlight === pending)
666
- startInFlight = null;
667
- });
668
- startInFlight = pending;
669
- return pending;
670
- }
671
- function stopHermes() {
672
- if (state.running) {
673
- pushLog("stop");
674
- state.running.stop();
675
- state.running = null;
676
- }
677
- state.webuiStatus = state.webuiStatus === "skipped" ? "skipped" : "stopped";
678
- }
679
- function waitForChildExit(child, timeoutMs) {
680
- if (child.exitCode !== null || child.signalCode !== null)
681
- return Promise.resolve();
682
- return new Promise((resolve) => {
683
- let settled = false;
684
- const done = () => {
685
- if (settled)
686
- return;
687
- settled = true;
688
- clearTimeout(timer);
689
- child.removeListener("exit", done);
690
- child.removeListener("close", done);
691
- resolve();
692
- };
693
- const timer = setTimeout(done, timeoutMs);
694
- child.once("exit", done);
695
- child.once("close", done);
696
- });
697
- }
698
- /**
699
- * Arrêt utilisé avant un respawn. Attendre la libération des ports évite que
700
- * le second boot choisisse un autre port pendant que l'ancien process sort.
701
- */
702
- async function stopHermesAndWait(timeoutMs = 5000) {
703
- const running = state.running;
704
- if (!running)
705
- return;
706
- const children = [running.webuiChild, running.child].filter((child) => Boolean(child));
707
- stopHermes();
708
- await Promise.all(children.map((child) => waitForChildExit(child, timeoutMs)));
709
- }
710
- /**
711
- * Propage les clés BYOK TempoFlow → Hermes (.env + process).
712
- * Appelé après Configuration → Clés IA (sinon seul Next redémarrait).
713
- */
714
- async function reapplyHermesLlmKeys(opts) {
715
- const log = (line) => {
716
- pushLog(line);
717
- opts.onLog?.(line);
718
- };
719
- if (opts.connectionMode !== "local") {
720
- return { restarted: false, detail: "client distant — pas de Hermes local" };
721
- }
722
- if (!state.running) {
723
- return {
724
- restarted: false,
725
- detail: "Hermes non démarré — clés prises au prochain boot",
726
- };
727
- }
728
- const llm = store.getLlmKeys();
729
- log(`BYOK → redémarrage Hermes (openai=${llm.openai ? "oui" : "non"}, anthropic=${llm.anthropic ? "oui" : "non"})`);
730
- await stopHermesAndWait();
731
- const started = await startHermes({
732
- connectionMode: opts.connectionMode,
733
- autoBootstrap: false,
734
- crmPort: opts.crmPort,
735
- onLog: opts.onLog,
736
- });
737
- return {
738
- restarted: Boolean(started),
739
- detail: started
740
- ? "Hermes redémarré avec clés BYOK TempoFlow"
741
- : "échec restart Hermes après BYOK",
742
- };
743
- }
744
- /**
745
- * Réinjecte bridge n8n (+ CRM si crmPort) dans Hermes si manquant dans .env.
746
- * Warm boot / déjà injecté → no-op.
747
- */
748
- async function reapplyHermesBridge(opts) {
749
- const log = (line) => {
750
- pushLog(line);
751
- opts.onLog?.(line);
752
- };
753
- const bridge = (ctx.getHermesBridgeEnv?.(opts.crmPort != null ? { crmPort: opts.crmPort } : undefined) || {});
754
- if (!state.running) {
755
- return { restarted: false, detail: "Hermes non démarré" };
756
- }
757
- const envPath = node_path_1.default.join(homeDir(), ".env");
758
- let envBody = "";
759
- try {
760
- envBody = node_fs_1.default.readFileSync(envPath, "utf8");
761
- }
762
- catch {
763
- envBody = "";
764
- }
765
- const missing = [];
766
- if (bridge.N8N_API_KEY && !envBody.includes(`N8N_API_KEY=${bridge.N8N_API_KEY}`)) {
767
- missing.push("N8N_API_KEY");
768
- }
769
- if (bridge.TEMPOFLOW_API_KEY &&
770
- !envBody.includes(`TEMPOFLOW_API_KEY=${bridge.TEMPOFLOW_API_KEY}`)) {
771
- missing.push("TEMPOFLOW_API_KEY");
772
- }
773
- if (bridge.TEMPOFLOW_API_URL &&
774
- !envBody.includes(`TEMPOFLOW_API_URL=${bridge.TEMPOFLOW_API_URL}`)) {
775
- missing.push("TEMPOFLOW_API_URL");
776
- }
777
- if (bridge.PLUGINS_API_URL &&
778
- !envBody.includes(`PLUGINS_API_URL=${bridge.PLUGINS_API_URL}`)) {
779
- missing.push("PLUGINS_API_URL");
780
- }
781
- if (bridge.TEMPOFLOW_PLUGINS_API_TOKEN &&
782
- !envBody.includes(`TEMPOFLOW_PLUGINS_API_TOKEN=${bridge.TEMPOFLOW_PLUGINS_API_TOKEN}`)) {
783
- missing.push("TEMPOFLOW_PLUGINS_API_TOKEN");
784
- }
785
- if (bridge.TEMPOFLOW_PLUGINS_DIR &&
786
- !envBody.includes(`TEMPOFLOW_PLUGINS_DIR=${bridge.TEMPOFLOW_PLUGINS_DIR}`)) {
787
- missing.push("TEMPOFLOW_PLUGINS_DIR");
788
- }
789
- // H1 — bloc mcp_servers attendu dans config.yaml (façade MCP CRM) : s'il
790
- // manque ou pointe ailleurs, un restart réécrit le home (writeHermesHome).
791
- const mcpCfg = ctx.getHermesMcpServerConfig?.(opts.crmPort != null ? { crmPort: opts.crmPort } : undefined) || null;
792
- if (mcpCfg) {
793
- let cfgBody = "";
794
- try {
795
- cfgBody = node_fs_1.default.readFileSync(node_path_1.default.join(homeDir(), "config.yaml"), "utf8");
796
- }
797
- catch {
798
- cfgBody = "";
799
- }
800
- if (!cfgBody.includes("mcp_servers") ||
801
- !cfgBody.includes(mcpCfg.url) ||
802
- !cfgBody.includes(mcpCfg.bearerToken)) {
803
- missing.push("MCP_SERVERS");
804
- }
805
- }
806
- if (!missing.length && !opts.forceRestart) {
807
- return { restarted: false, detail: "bridge déjà injecté" };
808
- }
809
- const why = opts.forceRestart
810
- ? opts.forceReason || "force"
811
- : missing.join(", ");
812
- log(`bridge → redémarrage Hermes (${why})`);
813
- await stopHermesAndWait();
814
- const started = await startHermes({
815
- connectionMode: opts.connectionMode,
816
- autoBootstrap: false,
817
- crmPort: opts.crmPort,
818
- onLog: opts.onLog,
819
- });
820
- return {
821
- restarted: Boolean(started),
822
- detail: started
823
- ? `Hermes redémarré (${why})`
824
- : "échec restart Hermes après bridge",
825
- };
826
- }
827
- function getRunningHermes() {
828
- return state.running;
829
- }
830
- /**
831
- * Env à fusionner dans startNextServer / restart.
832
- * Couvre embedded running + mode remote avancé (URL stockée).
833
- */
834
- function getHermesNextEnv(connectionMode) {
835
- if (connectionMode !== "local")
836
- return {};
837
- const config = (0, platform_core_1.sanitizeHermesEmbedConfig)(store.getHermesEmbedConfig());
838
- const running = state.running;
839
- if (running) {
840
- return (0, platform_core_1.buildNextHermesEnv)({
841
- apiUrl: running.apiUrl,
842
- apiKey: running.apiKey,
843
- webuiUrl: running.webuiUrl,
844
- webuiPassword: running.webuiPassword,
845
- });
846
- }
847
- if (config.mode === "remote" && config.remoteApiUrl) {
848
- const key = (process.env.HERMES_API_SERVER_KEY ||
849
- process.env.TF2_HERMES_REMOTE_KEY ||
850
- "").trim();
851
- if (!key)
852
- return {};
853
- return (0, platform_core_1.buildNextHermesEnv)({
854
- apiUrl: config.remoteApiUrl,
855
- apiKey: key,
856
- webuiUrl: config.remoteWebuiUrl,
857
- webuiPassword: (process.env.HERMES_WEBUI_PASSWORD || "").trim() || null,
858
- });
859
- }
860
- return {
861
- HERMES_API_URL: `http://127.0.0.1:${platform_core_1.HERMES_DESKTOP_API_PORT}`,
862
- HERMES_GATEWAY_URL: `http://127.0.0.1:${platform_core_1.HERMES_DESKTOP_API_PORT}`,
863
- HERMES_WEBUI_URL: `http://127.0.0.1:${platform_core_1.HERMES_DESKTOP_WEBUI_PORT}`,
864
- HERMES_KANBAN_URL: `http://127.0.0.1:${platform_core_1.HERMES_DESKTOP_WEBUI_PORT}`,
865
- };
866
- }
867
- function getHermesStatusPayload(connectionMode, opts) {
868
- const config = (0, platform_core_1.sanitizeHermesEmbedConfig)(store.getHermesEmbedConfig());
869
- const binary = state.binaryPath || findHermesBinary();
870
- let pub = (0, platform_core_1.hermesPublicStatus)({
871
- connectionMode,
872
- config,
873
- binaryFound: Boolean(binary),
874
- running: Boolean(state.running),
875
- apiUrl: state.running?.apiUrl || config.remoteApiUrl || null,
876
- lastError: state.lastError,
877
- version: state.version,
878
- remoteCrmOrigin: opts?.remoteCrmOrigin,
879
- tunnelRootDomain: ctx.manifest.tunnelRootDomain,
880
- tunnelHostMode: (() => {
881
- const env = String(process.env.CREEZIO_TUNNEL_FLAT_HOSTS || "").trim();
882
- if (env === "1" || /^true$/i.test(env))
883
- return "flat";
884
- if (env === "0" || /^false$/i.test(env))
885
- return "nested";
886
- return ctx.manifest.tunnelHostMode;
887
- })(),
888
- productName: product(),
889
- });
890
- if (state.installing && pub.status === "missing") {
891
- pub = {
892
- ...pub,
893
- status: "installing",
894
- detail: `Installation runtime en cours (${(0, runtime_bootstrap_js_1.getBootstrapPhase)()})…`,
895
- };
896
- }
897
- if (state.starting && pub.status !== "running") {
898
- pub = {
899
- ...pub,
900
- status: "starting",
901
- detail: "Démarrage du gateway et de la WebUI Hermes…",
902
- };
903
- }
904
- const webuiUrl = connectionMode === "remote"
905
- ? pub.webuiUrl
906
- : state.running?.webuiUrl || config.remoteWebuiUrl || null;
907
- return {
908
- ...pub,
909
- webuiUrl,
910
- webuiStatus: connectionMode === "remote"
911
- ? webuiUrl
912
- ? "running"
913
- : "skipped"
914
- : config.mode === "remote" || config.mode === "off"
915
- ? "skipped"
916
- : state.webuiStatus,
917
- binaryPath: binary,
918
- homeDir: state.running?.homeDir || null,
919
- bootstrapPhase: (0, runtime_bootstrap_js_1.getBootstrapPhase)(),
920
- bootstrapError: (0, runtime_bootstrap_js_1.getBootstrapError)() || state.webuiError,
921
- installing: state.installing,
922
- logs: state.logs.slice(-80),
923
- };
924
- }
925
- function getHermesLogs() {
926
- return state.logs.slice(-80);
927
- }
928
- /** Déclenché depuis l’UI Configuration (hôte local uniquement). */
929
- async function ensureHermesRuntimeFromUi(opts) {
930
- state.installing = true;
931
- const log = (line) => {
932
- pushLog(line);
933
- opts?.onLog?.(line);
934
- };
935
- try {
936
- const r = await (0, runtime_bootstrap_js_1.ensureHermesRuntime)(ctx, { onLog: log });
937
- return {
938
- ok: r.ok,
939
- detail: r.detail,
940
- binaryPath: r.binary,
941
- webuiDir: r.webuiDir,
942
- };
943
- }
944
- finally {
945
- state.installing = false;
946
- }
947
- }
948
- /** Exposé pour tests. */
949
- function __resetHermesStateForTests() {
950
- state.running = null;
951
- state.starting = false;
952
- state.lastError = null;
953
- state.version = null;
954
- state.logs = [];
955
- state.binaryPath = null;
956
- state.webuiStatus = "stopped";
957
- state.webuiError = null;
958
- state.installing = false;
959
- startInFlight = null;
960
- }
961
- // --- end inlined ---
962
- return {
963
- startHermes,
964
- stopHermes,
965
- stopHermesAndWait,
966
- getRunningHermes,
967
- getHermesStatusPayload,
968
- getHermesNextEnv,
969
- getHermesLogs,
970
- ensureHermesRuntimeFromUi: async (uiOpts) => {
971
- const r = await ensureHermesRuntimeFromUi(uiOpts);
972
- return { ...r, phase: (0, runtime_bootstrap_js_1.getBootstrapPhase)() };
973
- },
974
- findHermesBinary,
975
- getHermesLastStartPath,
976
- reapplyHermesLlmKeys,
977
- reapplyHermesBridge,
978
- __resetForTests: __resetHermesStateForTests,
979
- };
980
- }
981
- //# sourceMappingURL=launcher.js.map