@creezio/electron-shell 0.22.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 (563) hide show
  1. package/README.md +351 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/admin-window.d.ts +18 -0
  4. package/dist/admin-window.d.ts.map +1 -0
  5. package/dist/admin-window.js +75 -0
  6. package/dist/admin-window.js.map +1 -0
  7. package/dist/boot.d.ts +36 -0
  8. package/dist/boot.d.ts.map +1 -0
  9. package/dist/boot.js +99 -0
  10. package/dist/boot.js.map +1 -0
  11. package/dist/desktop/assistant-chrome.d.ts +42 -0
  12. package/dist/desktop/assistant-chrome.d.ts.map +1 -0
  13. package/dist/desktop/assistant-chrome.js +178 -0
  14. package/dist/desktop/assistant-chrome.js.map +1 -0
  15. package/dist/desktop/brand-desktop-runtime.d.ts +72 -0
  16. package/dist/desktop/brand-desktop-runtime.d.ts.map +1 -0
  17. package/dist/desktop/brand-desktop-runtime.js +3926 -0
  18. package/dist/desktop/brand-desktop-runtime.js.map +1 -0
  19. package/dist/desktop/desktop-session.d.ts +85 -0
  20. package/dist/desktop/desktop-session.d.ts.map +1 -0
  21. package/dist/desktop/desktop-session.js +163 -0
  22. package/dist/desktop/desktop-session.js.map +1 -0
  23. package/dist/desktop/error-page-html.d.ts +16 -0
  24. package/dist/desktop/error-page-html.d.ts.map +1 -0
  25. package/dist/desktop/error-page-html.js +88 -0
  26. package/dist/desktop/error-page-html.js.map +1 -0
  27. package/dist/desktop/legacy-brand-compat.d.ts +45 -0
  28. package/dist/desktop/legacy-brand-compat.d.ts.map +1 -0
  29. package/dist/desktop/legacy-brand-compat.js +49 -0
  30. package/dist/desktop/legacy-brand-compat.js.map +1 -0
  31. package/dist/desktop/oauth-loopback.d.ts +28 -0
  32. package/dist/desktop/oauth-loopback.d.ts.map +1 -0
  33. package/dist/desktop/oauth-loopback.js +137 -0
  34. package/dist/desktop/oauth-loopback.js.map +1 -0
  35. package/dist/desktop/profile-picker-html.d.ts +27 -0
  36. package/dist/desktop/profile-picker-html.d.ts.map +1 -0
  37. package/dist/desktop/profile-picker-html.js +213 -0
  38. package/dist/desktop/profile-picker-html.js.map +1 -0
  39. package/dist/desktop/remote-offline-html.d.ts +14 -0
  40. package/dist/desktop/remote-offline-html.d.ts.map +1 -0
  41. package/dist/desktop/remote-offline-html.js +88 -0
  42. package/dist/desktop/remote-offline-html.js.map +1 -0
  43. package/dist/factory-reset-runtime.d.ts +11 -0
  44. package/dist/factory-reset-runtime.d.ts.map +1 -0
  45. package/dist/factory-reset-runtime.js +77 -0
  46. package/dist/factory-reset-runtime.js.map +1 -0
  47. package/dist/host/ai-workspace/actions.d.ts +12 -0
  48. package/dist/host/ai-workspace/actions.d.ts.map +1 -0
  49. package/dist/host/ai-workspace/actions.js +243 -0
  50. package/dist/host/ai-workspace/actions.js.map +1 -0
  51. package/dist/host/ai-workspace/bindings.d.ts +51 -0
  52. package/dist/host/ai-workspace/bindings.d.ts.map +1 -0
  53. package/dist/host/ai-workspace/bindings.js +40 -0
  54. package/dist/host/ai-workspace/bindings.js.map +1 -0
  55. package/dist/host/ai-workspace/index.d.ts +11 -0
  56. package/dist/host/ai-workspace/index.d.ts.map +1 -0
  57. package/dist/host/ai-workspace/index.js +6 -0
  58. package/dist/host/ai-workspace/index.js.map +1 -0
  59. package/dist/host/ai-workspace/manager.d.ts +128 -0
  60. package/dist/host/ai-workspace/manager.d.ts.map +1 -0
  61. package/dist/host/ai-workspace/manager.js +519 -0
  62. package/dist/host/ai-workspace/manager.js.map +1 -0
  63. package/dist/host/ai-workspace/profile-window.d.ts +37 -0
  64. package/dist/host/ai-workspace/profile-window.d.ts.map +1 -0
  65. package/dist/host/ai-workspace/profile-window.js +121 -0
  66. package/dist/host/ai-workspace/profile-window.js.map +1 -0
  67. package/dist/host/ai-workspace/screencast.d.ts +56 -0
  68. package/dist/host/ai-workspace/screencast.d.ts.map +1 -0
  69. package/dist/host/ai-workspace/screencast.js +245 -0
  70. package/dist/host/ai-workspace/screencast.js.map +1 -0
  71. package/dist/host/ai-workspace/types.d.ts +40 -0
  72. package/dist/host/ai-workspace/types.d.ts.map +1 -0
  73. package/dist/host/ai-workspace/types.js +6 -0
  74. package/dist/host/ai-workspace/types.js.map +1 -0
  75. package/dist/host/brand-host-runtime.d.ts +107 -0
  76. package/dist/host/brand-host-runtime.d.ts.map +1 -0
  77. package/dist/host/brand-host-runtime.js +274 -0
  78. package/dist/host/brand-host-runtime.js.map +1 -0
  79. package/dist/host/brand-host-stack.d.ts +117 -0
  80. package/dist/host/brand-host-stack.d.ts.map +1 -0
  81. package/dist/host/brand-host-stack.js +253 -0
  82. package/dist/host/brand-host-stack.js.map +1 -0
  83. package/dist/host/brand-kernel-http.d.ts +34 -0
  84. package/dist/host/brand-kernel-http.d.ts.map +1 -0
  85. package/dist/host/brand-kernel-http.js +95 -0
  86. package/dist/host/brand-kernel-http.js.map +1 -0
  87. package/dist/host/brand-meili-boot.d.ts +67 -0
  88. package/dist/host/brand-meili-boot.d.ts.map +1 -0
  89. package/dist/host/brand-meili-boot.js +100 -0
  90. package/dist/host/brand-meili-boot.js.map +1 -0
  91. package/dist/host/bridge-client.d.ts +54 -0
  92. package/dist/host/bridge-client.d.ts.map +1 -0
  93. package/dist/host/bridge-client.js +187 -0
  94. package/dist/host/bridge-client.js.map +1 -0
  95. package/dist/host/browser-tabs/browser-tab-driver.d.ts +45 -0
  96. package/dist/host/browser-tabs/browser-tab-driver.d.ts.map +1 -0
  97. package/dist/host/browser-tabs/browser-tab-driver.js +154 -0
  98. package/dist/host/browser-tabs/browser-tab-driver.js.map +1 -0
  99. package/dist/host/browser-tabs/browser-tab-manager.d.ts +208 -0
  100. package/dist/host/browser-tabs/browser-tab-manager.d.ts.map +1 -0
  101. package/dist/host/browser-tabs/browser-tab-manager.js +758 -0
  102. package/dist/host/browser-tabs/browser-tab-manager.js.map +1 -0
  103. package/dist/host/browser-tabs/browser-tab-preload-path.d.ts +2 -0
  104. package/dist/host/browser-tabs/browser-tab-preload-path.d.ts.map +1 -0
  105. package/dist/host/browser-tabs/browser-tab-preload-path.js +29 -0
  106. package/dist/host/browser-tabs/browser-tab-preload-path.js.map +1 -0
  107. package/dist/host/browser-tabs/browser-tab-preload.d.ts +11 -0
  108. package/dist/host/browser-tabs/browser-tab-preload.d.ts.map +1 -0
  109. package/dist/host/browser-tabs/browser-tab-preload.js +11 -0
  110. package/dist/host/browser-tabs/browser-tab-preload.js.map +1 -0
  111. package/dist/host/browser-tabs/chrome-ua.d.ts +19 -0
  112. package/dist/host/browser-tabs/chrome-ua.d.ts.map +1 -0
  113. package/dist/host/browser-tabs/chrome-ua.js +37 -0
  114. package/dist/host/browser-tabs/chrome-ua.js.map +1 -0
  115. package/dist/host/browser-tabs/fake-cursor-inject.d.ts +7 -0
  116. package/dist/host/browser-tabs/fake-cursor-inject.d.ts.map +1 -0
  117. package/dist/host/browser-tabs/fake-cursor-inject.js +7 -0
  118. package/dist/host/browser-tabs/fake-cursor-inject.js.map +1 -0
  119. package/dist/host/browser-tabs/index.d.ts +13 -0
  120. package/dist/host/browser-tabs/index.d.ts.map +1 -0
  121. package/dist/host/browser-tabs/index.js +13 -0
  122. package/dist/host/browser-tabs/index.js.map +1 -0
  123. package/dist/host/browser-tabs/tab-load-state.d.ts +56 -0
  124. package/dist/host/browser-tabs/tab-load-state.d.ts.map +1 -0
  125. package/dist/host/browser-tabs/tab-load-state.js +56 -0
  126. package/dist/host/browser-tabs/tab-load-state.js.map +1 -0
  127. package/dist/host/browser-tabs/tab-url.d.ts +10 -0
  128. package/dist/host/browser-tabs/tab-url.d.ts.map +1 -0
  129. package/dist/host/browser-tabs/tab-url.js +57 -0
  130. package/dist/host/browser-tabs/tab-url.js.map +1 -0
  131. package/dist/host/context.d.ts +70 -0
  132. package/dist/host/context.d.ts.map +1 -0
  133. package/dist/host/context.js +16 -0
  134. package/dist/host/context.js.map +1 -0
  135. package/dist/host/contracts.d.ts +39 -0
  136. package/dist/host/contracts.d.ts.map +1 -0
  137. package/dist/host/contracts.js +26 -0
  138. package/dist/host/contracts.js.map +1 -0
  139. package/dist/host/crash-reporter.d.ts +65 -0
  140. package/dist/host/crash-reporter.d.ts.map +1 -0
  141. package/dist/host/crash-reporter.js +371 -0
  142. package/dist/host/crash-reporter.js.map +1 -0
  143. package/dist/host/ensure-kit-binaries.d.ts +17 -0
  144. package/dist/host/ensure-kit-binaries.d.ts.map +1 -0
  145. package/dist/host/ensure-kit-binaries.js +205 -0
  146. package/dist/host/ensure-kit-binaries.js.map +1 -0
  147. package/dist/host/feature-off-host.d.ts +130 -0
  148. package/dist/host/feature-off-host.d.ts.map +1 -0
  149. package/dist/host/feature-off-host.js +138 -0
  150. package/dist/host/feature-off-host.js.map +1 -0
  151. package/dist/host/hermes/crm-key.d.ts +49 -0
  152. package/dist/host/hermes/crm-key.d.ts.map +1 -0
  153. package/dist/host/hermes/crm-key.js +126 -0
  154. package/dist/host/hermes/crm-key.js.map +1 -0
  155. package/dist/host/hermes/ensure-crm-key-db.d.ts +7 -0
  156. package/dist/host/hermes/ensure-crm-key-db.d.ts.map +1 -0
  157. package/dist/host/hermes/ensure-crm-key-db.js +84 -0
  158. package/dist/host/hermes/ensure-crm-key-db.js.map +1 -0
  159. package/dist/host/hermes/launcher.d.ts +98 -0
  160. package/dist/host/hermes/launcher.d.ts.map +1 -0
  161. package/dist/host/hermes/launcher.js +972 -0
  162. package/dist/host/hermes/launcher.js.map +1 -0
  163. package/dist/host/hermes/runtime-bootstrap.d.ts +172 -0
  164. package/dist/host/hermes/runtime-bootstrap.d.ts.map +1 -0
  165. package/dist/host/hermes/runtime-bootstrap.js +789 -0
  166. package/dist/host/hermes/runtime-bootstrap.js.map +1 -0
  167. package/dist/host/hermes/skills-seed.d.ts +40 -0
  168. package/dist/host/hermes/skills-seed.d.ts.map +1 -0
  169. package/dist/host/hermes/skills-seed.js +100 -0
  170. package/dist/host/hermes/skills-seed.js.map +1 -0
  171. package/dist/host/host-stack.d.ts +35 -0
  172. package/dist/host/host-stack.d.ts.map +1 -0
  173. package/dist/host/host-stack.js +38 -0
  174. package/dist/host/host-stack.js.map +1 -0
  175. package/dist/host/kit-os-resources.d.ts +6 -0
  176. package/dist/host/kit-os-resources.d.ts.map +1 -0
  177. package/dist/host/kit-os-resources.js +88 -0
  178. package/dist/host/kit-os-resources.js.map +1 -0
  179. package/dist/host/load-electron.d.ts +2 -0
  180. package/dist/host/load-electron.d.ts.map +1 -0
  181. package/dist/host/load-electron.js +44 -0
  182. package/dist/host/load-electron.js.map +1 -0
  183. package/dist/host/local-config.d.ts +120 -0
  184. package/dist/host/local-config.d.ts.map +1 -0
  185. package/dist/host/local-config.js +633 -0
  186. package/dist/host/local-config.js.map +1 -0
  187. package/dist/host/meili/browse.d.ts +58 -0
  188. package/dist/host/meili/browse.d.ts.map +1 -0
  189. package/dist/host/meili/browse.js +98 -0
  190. package/dist/host/meili/browse.js.map +1 -0
  191. package/dist/host/meili/coherence-db.d.ts +35 -0
  192. package/dist/host/meili/coherence-db.d.ts.map +1 -0
  193. package/dist/host/meili/coherence-db.js +129 -0
  194. package/dist/host/meili/coherence-db.js.map +1 -0
  195. package/dist/host/meili/coherence-query.d.ts +10 -0
  196. package/dist/host/meili/coherence-query.d.ts.map +1 -0
  197. package/dist/host/meili/coherence-query.js +23 -0
  198. package/dist/host/meili/coherence-query.js.map +1 -0
  199. package/dist/host/meili/coherence.d.ts +53 -0
  200. package/dist/host/meili/coherence.d.ts.map +1 -0
  201. package/dist/host/meili/coherence.js +148 -0
  202. package/dist/host/meili/coherence.js.map +1 -0
  203. package/dist/host/meili/feed.d.ts +82 -0
  204. package/dist/host/meili/feed.d.ts.map +1 -0
  205. package/dist/host/meili/feed.js +100 -0
  206. package/dist/host/meili/feed.js.map +1 -0
  207. package/dist/host/meili/generic-indexer.d.ts +34 -0
  208. package/dist/host/meili/generic-indexer.d.ts.map +1 -0
  209. package/dist/host/meili/generic-indexer.js +333 -0
  210. package/dist/host/meili/generic-indexer.js.map +1 -0
  211. package/dist/host/meili/index-schema.d.ts +64 -0
  212. package/dist/host/meili/index-schema.d.ts.map +1 -0
  213. package/dist/host/meili/index-schema.js +70 -0
  214. package/dist/host/meili/index-schema.js.map +1 -0
  215. package/dist/host/meili/index.d.ts +13 -0
  216. package/dist/host/meili/index.d.ts.map +1 -0
  217. package/dist/host/meili/index.js +8 -0
  218. package/dist/host/meili/index.js.map +1 -0
  219. package/dist/host/meili/indexer.d.ts +31 -0
  220. package/dist/host/meili/indexer.d.ts.map +1 -0
  221. package/dist/host/meili/indexer.js +49 -0
  222. package/dist/host/meili/indexer.js.map +1 -0
  223. package/dist/host/meili-launcher.d.ts +30 -0
  224. package/dist/host/meili-launcher.d.ts.map +1 -0
  225. package/dist/host/meili-launcher.js +115 -0
  226. package/dist/host/meili-launcher.js.map +1 -0
  227. package/dist/host/n8n/agent-isolation.d.ts +55 -0
  228. package/dist/host/n8n/agent-isolation.d.ts.map +1 -0
  229. package/dist/host/n8n/agent-isolation.js +158 -0
  230. package/dist/host/n8n/agent-isolation.js.map +1 -0
  231. package/dist/host/n8n/api-key.d.ts +67 -0
  232. package/dist/host/n8n/api-key.d.ts.map +1 -0
  233. package/dist/host/n8n/api-key.js +297 -0
  234. package/dist/host/n8n/api-key.js.map +1 -0
  235. package/dist/host/n8n/launcher.d.ts +126 -0
  236. package/dist/host/n8n/launcher.d.ts.map +1 -0
  237. package/dist/host/n8n/launcher.js +1170 -0
  238. package/dist/host/n8n/launcher.js.map +1 -0
  239. package/dist/host/n8n/runtime-bootstrap.d.ts +44 -0
  240. package/dist/host/n8n/runtime-bootstrap.d.ts.map +1 -0
  241. package/dist/host/n8n/runtime-bootstrap.js +230 -0
  242. package/dist/host/n8n/runtime-bootstrap.js.map +1 -0
  243. package/dist/host/node-runtime.d.ts +52 -0
  244. package/dist/host/node-runtime.d.ts.map +1 -0
  245. package/dist/host/node-runtime.js +257 -0
  246. package/dist/host/node-runtime.js.map +1 -0
  247. package/dist/host/npm-cli.d.ts +43 -0
  248. package/dist/host/npm-cli.d.ts.map +1 -0
  249. package/dist/host/npm-cli.js +213 -0
  250. package/dist/host/npm-cli.js.map +1 -0
  251. package/dist/host/plugins/accept-check.d.ts +19 -0
  252. package/dist/host/plugins/accept-check.d.ts.map +1 -0
  253. package/dist/host/plugins/accept-check.js +172 -0
  254. package/dist/host/plugins/accept-check.js.map +1 -0
  255. package/dist/host/plugins/brand-bindings.d.ts +103 -0
  256. package/dist/host/plugins/brand-bindings.d.ts.map +1 -0
  257. package/dist/host/plugins/brand-bindings.js +65 -0
  258. package/dist/host/plugins/brand-bindings.js.map +1 -0
  259. package/dist/host/plugins/control-adapters.d.ts +11 -0
  260. package/dist/host/plugins/control-adapters.d.ts.map +1 -0
  261. package/dist/host/plugins/control-adapters.js +83 -0
  262. package/dist/host/plugins/control-adapters.js.map +1 -0
  263. package/dist/host/plugins/control-extras.d.ts +61 -0
  264. package/dist/host/plugins/control-extras.d.ts.map +1 -0
  265. package/dist/host/plugins/control-extras.js +382 -0
  266. package/dist/host/plugins/control-extras.js.map +1 -0
  267. package/dist/host/plugins/control-plane.d.ts +42 -0
  268. package/dist/host/plugins/control-plane.d.ts.map +1 -0
  269. package/dist/host/plugins/control-plane.js +124 -0
  270. package/dist/host/plugins/control-plane.js.map +1 -0
  271. package/dist/host/plugins/control-token.d.ts +24 -0
  272. package/dist/host/plugins/control-token.d.ts.map +1 -0
  273. package/dist/host/plugins/control-token.js +77 -0
  274. package/dist/host/plugins/control-token.js.map +1 -0
  275. package/dist/host/plugins/crm-key.d.ts +25 -0
  276. package/dist/host/plugins/crm-key.d.ts.map +1 -0
  277. package/dist/host/plugins/crm-key.js +126 -0
  278. package/dist/host/plugins/crm-key.js.map +1 -0
  279. package/dist/host/plugins/data.d.ts +21 -0
  280. package/dist/host/plugins/data.d.ts.map +1 -0
  281. package/dist/host/plugins/data.js +100 -0
  282. package/dist/host/plugins/data.js.map +1 -0
  283. package/dist/host/plugins/events.d.ts +6 -0
  284. package/dist/host/plugins/events.d.ts.map +1 -0
  285. package/dist/host/plugins/events.js +6 -0
  286. package/dist/host/plugins/events.js.map +1 -0
  287. package/dist/host/plugins/execution-grant.d.ts +6 -0
  288. package/dist/host/plugins/execution-grant.d.ts.map +1 -0
  289. package/dist/host/plugins/execution-grant.js +6 -0
  290. package/dist/host/plugins/execution-grant.js.map +1 -0
  291. package/dist/host/plugins/git.d.ts +56 -0
  292. package/dist/host/plugins/git.d.ts.map +1 -0
  293. package/dist/host/plugins/git.js +357 -0
  294. package/dist/host/plugins/git.js.map +1 -0
  295. package/dist/host/plugins/host.d.ts +68 -0
  296. package/dist/host/plugins/host.d.ts.map +1 -0
  297. package/dist/host/plugins/host.js +276 -0
  298. package/dist/host/plugins/host.js.map +1 -0
  299. package/dist/host/plugins/launcher.d.ts +146 -0
  300. package/dist/host/plugins/launcher.d.ts.map +1 -0
  301. package/dist/host/plugins/launcher.js +489 -0
  302. package/dist/host/plugins/launcher.js.map +1 -0
  303. package/dist/host/plugins/runtime.d.ts +28 -0
  304. package/dist/host/plugins/runtime.d.ts.map +1 -0
  305. package/dist/host/plugins/runtime.js +430 -0
  306. package/dist/host/plugins/runtime.js.map +1 -0
  307. package/dist/host/plugins/test-runner.d.ts +15 -0
  308. package/dist/host/plugins/test-runner.d.ts.map +1 -0
  309. package/dist/host/plugins/test-runner.js +106 -0
  310. package/dist/host/plugins/test-runner.js.map +1 -0
  311. package/dist/host/safe-storage.d.ts +21 -0
  312. package/dist/host/safe-storage.d.ts.map +1 -0
  313. package/dist/host/safe-storage.js +55 -0
  314. package/dist/host/safe-storage.js.map +1 -0
  315. package/dist/host/sandbox/embed-sandbox.d.ts +133 -0
  316. package/dist/host/sandbox/embed-sandbox.d.ts.map +1 -0
  317. package/dist/host/sandbox/embed-sandbox.js +378 -0
  318. package/dist/host/sandbox/embed-sandbox.js.map +1 -0
  319. package/dist/host/sandbox/os-sandbox.d.ts +41 -0
  320. package/dist/host/sandbox/os-sandbox.d.ts.map +1 -0
  321. package/dist/host/sandbox/os-sandbox.js +98 -0
  322. package/dist/host/sandbox/os-sandbox.js.map +1 -0
  323. package/dist/host/server-env.d.ts +50 -0
  324. package/dist/host/server-env.d.ts.map +1 -0
  325. package/dist/host/server-env.js +64 -0
  326. package/dist/host/server-env.js.map +1 -0
  327. package/dist/host/server-launcher.d.ts +49 -0
  328. package/dist/host/server-launcher.d.ts.map +1 -0
  329. package/dist/host/server-launcher.js +43 -0
  330. package/dist/host/server-launcher.js.map +1 -0
  331. package/dist/host/tunnel/cloudflared-respawn.d.ts +58 -0
  332. package/dist/host/tunnel/cloudflared-respawn.d.ts.map +1 -0
  333. package/dist/host/tunnel/cloudflared-respawn.js +73 -0
  334. package/dist/host/tunnel/cloudflared-respawn.js.map +1 -0
  335. package/dist/host/tunnel/tunnel.d.ts +72 -0
  336. package/dist/host/tunnel/tunnel.d.ts.map +1 -0
  337. package/dist/host/tunnel/tunnel.js +462 -0
  338. package/dist/host/tunnel/tunnel.js.map +1 -0
  339. package/dist/host/web-telemetry.d.ts +16 -0
  340. package/dist/host/web-telemetry.d.ts.map +1 -0
  341. package/dist/host/web-telemetry.js +97 -0
  342. package/dist/host/web-telemetry.js.map +1 -0
  343. package/dist/index.d.ts +198 -0
  344. package/dist/index.d.ts.map +1 -0
  345. package/dist/index.js +102 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/logger.d.ts +44 -0
  348. package/dist/logger.d.ts.map +1 -0
  349. package/dist/logger.js +252 -0
  350. package/dist/logger.js.map +1 -0
  351. package/dist/main-facade.d.ts +51 -0
  352. package/dist/main-facade.d.ts.map +1 -0
  353. package/dist/main-facade.js +96 -0
  354. package/dist/main-facade.js.map +1 -0
  355. package/dist/meili.d.ts +19 -0
  356. package/dist/meili.d.ts.map +1 -0
  357. package/dist/meili.js +14 -0
  358. package/dist/meili.js.map +1 -0
  359. package/dist/splash-ui.d.ts +69 -0
  360. package/dist/splash-ui.d.ts.map +1 -0
  361. package/dist/splash-ui.js +431 -0
  362. package/dist/splash-ui.js.map +1 -0
  363. package/dist/tray.d.ts +44 -0
  364. package/dist/tray.d.ts.map +1 -0
  365. package/dist/tray.js +173 -0
  366. package/dist/tray.js.map +1 -0
  367. package/dist/updater.d.ts +36 -0
  368. package/dist/updater.d.ts.map +1 -0
  369. package/dist/updater.js +257 -0
  370. package/dist/updater.js.map +1 -0
  371. package/dist/window-chrome.d.ts +12 -0
  372. package/dist/window-chrome.d.ts.map +1 -0
  373. package/dist/window-chrome.js +93 -0
  374. package/dist/window-chrome.js.map +1 -0
  375. package/dist-cjs/admin-window.js +116 -0
  376. package/dist-cjs/admin-window.js.map +1 -0
  377. package/dist-cjs/boot.js +139 -0
  378. package/dist-cjs/boot.js.map +1 -0
  379. package/dist-cjs/desktop/assistant-chrome.js +184 -0
  380. package/dist-cjs/desktop/assistant-chrome.js.map +1 -0
  381. package/dist-cjs/desktop/brand-desktop-runtime.js +3932 -0
  382. package/dist-cjs/desktop/brand-desktop-runtime.js.map +1 -0
  383. package/dist-cjs/desktop/desktop-session.js +171 -0
  384. package/dist-cjs/desktop/desktop-session.js.map +1 -0
  385. package/dist-cjs/desktop/error-page-html.js +92 -0
  386. package/dist-cjs/desktop/error-page-html.js.map +1 -0
  387. package/dist-cjs/desktop/legacy-brand-compat.js +56 -0
  388. package/dist-cjs/desktop/legacy-brand-compat.js.map +1 -0
  389. package/dist-cjs/desktop/oauth-loopback.js +144 -0
  390. package/dist-cjs/desktop/oauth-loopback.js.map +1 -0
  391. package/dist-cjs/desktop/profile-picker-html.js +216 -0
  392. package/dist-cjs/desktop/profile-picker-html.js.map +1 -0
  393. package/dist-cjs/desktop/remote-offline-html.js +91 -0
  394. package/dist-cjs/desktop/remote-offline-html.js.map +1 -0
  395. package/dist-cjs/factory-reset-runtime.js +117 -0
  396. package/dist-cjs/factory-reset-runtime.js.map +1 -0
  397. package/dist-cjs/host/ai-workspace/actions.js +247 -0
  398. package/dist-cjs/host/ai-workspace/actions.js.map +1 -0
  399. package/dist-cjs/host/ai-workspace/bindings.js +49 -0
  400. package/dist-cjs/host/ai-workspace/bindings.js.map +1 -0
  401. package/dist-cjs/host/ai-workspace/index.js +21 -0
  402. package/dist-cjs/host/ai-workspace/index.js.map +1 -0
  403. package/dist-cjs/host/ai-workspace/manager.js +528 -0
  404. package/dist-cjs/host/ai-workspace/manager.js.map +1 -0
  405. package/dist-cjs/host/ai-workspace/profile-window.js +125 -0
  406. package/dist-cjs/host/ai-workspace/profile-window.js.map +1 -0
  407. package/dist-cjs/host/ai-workspace/screencast.js +249 -0
  408. package/dist-cjs/host/ai-workspace/screencast.js.map +1 -0
  409. package/dist-cjs/host/ai-workspace/types.js +7 -0
  410. package/dist-cjs/host/ai-workspace/types.js.map +1 -0
  411. package/dist-cjs/host/brand-host-runtime.js +286 -0
  412. package/dist-cjs/host/brand-host-runtime.js.map +1 -0
  413. package/dist-cjs/host/brand-host-stack.js +259 -0
  414. package/dist-cjs/host/brand-host-stack.js.map +1 -0
  415. package/dist-cjs/host/brand-kernel-http.js +101 -0
  416. package/dist-cjs/host/brand-kernel-http.js.map +1 -0
  417. package/dist-cjs/host/brand-meili-boot.js +106 -0
  418. package/dist-cjs/host/brand-meili-boot.js.map +1 -0
  419. package/dist-cjs/host/bridge-client.js +191 -0
  420. package/dist-cjs/host/bridge-client.js.map +1 -0
  421. package/dist-cjs/host/browser-tabs/browser-tab-driver.js +158 -0
  422. package/dist-cjs/host/browser-tabs/browser-tab-driver.js.map +1 -0
  423. package/dist-cjs/host/browser-tabs/browser-tab-manager.js +766 -0
  424. package/dist-cjs/host/browser-tabs/browser-tab-manager.js.map +1 -0
  425. package/dist-cjs/host/browser-tabs/browser-tab-preload-path.js +35 -0
  426. package/dist-cjs/host/browser-tabs/browser-tab-preload-path.js.map +1 -0
  427. package/dist-cjs/host/browser-tabs/browser-tab-preload.js +12 -0
  428. package/dist-cjs/host/browser-tabs/browser-tab-preload.js.map +1 -0
  429. package/dist-cjs/host/browser-tabs/chrome-ua.js +41 -0
  430. package/dist-cjs/host/browser-tabs/chrome-ua.js.map +1 -0
  431. package/dist-cjs/host/browser-tabs/fake-cursor-inject.js +11 -0
  432. package/dist-cjs/host/browser-tabs/fake-cursor-inject.js.map +1 -0
  433. package/dist-cjs/host/browser-tabs/index.js +29 -0
  434. package/dist-cjs/host/browser-tabs/index.js.map +1 -0
  435. package/dist-cjs/host/browser-tabs/tab-load-state.js +59 -0
  436. package/dist-cjs/host/browser-tabs/tab-load-state.js.map +1 -0
  437. package/dist-cjs/host/browser-tabs/tab-url.js +62 -0
  438. package/dist-cjs/host/browser-tabs/tab-url.js.map +1 -0
  439. package/dist-cjs/host/context.js +20 -0
  440. package/dist-cjs/host/context.js.map +1 -0
  441. package/dist-cjs/host/contracts.js +32 -0
  442. package/dist-cjs/host/contracts.js.map +1 -0
  443. package/dist-cjs/host/crash-reporter.js +422 -0
  444. package/dist-cjs/host/crash-reporter.js.map +1 -0
  445. package/dist-cjs/host/ensure-kit-binaries.js +212 -0
  446. package/dist-cjs/host/ensure-kit-binaries.js.map +1 -0
  447. package/dist-cjs/host/feature-off-host.js +144 -0
  448. package/dist-cjs/host/feature-off-host.js.map +1 -0
  449. package/dist-cjs/host/hermes/crm-key.js +137 -0
  450. package/dist-cjs/host/hermes/crm-key.js.map +1 -0
  451. package/dist-cjs/host/hermes/ensure-crm-key-db.js +89 -0
  452. package/dist-cjs/host/hermes/ensure-crm-key-db.js.map +1 -0
  453. package/dist-cjs/host/hermes/launcher.js +981 -0
  454. package/dist-cjs/host/hermes/launcher.js.map +1 -0
  455. package/dist-cjs/host/hermes/runtime-bootstrap.js +853 -0
  456. package/dist-cjs/host/hermes/runtime-bootstrap.js.map +1 -0
  457. package/dist-cjs/host/hermes/skills-seed.js +110 -0
  458. package/dist-cjs/host/hermes/skills-seed.js.map +1 -0
  459. package/dist-cjs/host/host-stack.js +42 -0
  460. package/dist-cjs/host/host-stack.js.map +1 -0
  461. package/dist-cjs/host/kit-os-resources.js +96 -0
  462. package/dist-cjs/host/kit-os-resources.js.map +1 -0
  463. package/dist-cjs/host/load-electron.js +47 -0
  464. package/dist-cjs/host/load-electron.js.map +1 -0
  465. package/dist-cjs/host/local-config.js +640 -0
  466. package/dist-cjs/host/local-config.js.map +1 -0
  467. package/dist-cjs/host/meili/browse.js +103 -0
  468. package/dist-cjs/host/meili/browse.js.map +1 -0
  469. package/dist-cjs/host/meili/coherence-db.js +139 -0
  470. package/dist-cjs/host/meili/coherence-db.js.map +1 -0
  471. package/dist-cjs/host/meili/coherence-query.js +25 -0
  472. package/dist-cjs/host/meili/coherence-query.js.map +1 -0
  473. package/dist-cjs/host/meili/coherence.js +158 -0
  474. package/dist-cjs/host/meili/coherence.js.map +1 -0
  475. package/dist-cjs/host/meili/feed.js +108 -0
  476. package/dist-cjs/host/meili/feed.js.map +1 -0
  477. package/dist-cjs/host/meili/generic-indexer.js +340 -0
  478. package/dist-cjs/host/meili/generic-indexer.js.map +1 -0
  479. package/dist-cjs/host/meili/index-schema.js +79 -0
  480. package/dist-cjs/host/meili/index-schema.js.map +1 -0
  481. package/dist-cjs/host/meili/index.js +45 -0
  482. package/dist-cjs/host/meili/index.js.map +1 -0
  483. package/dist-cjs/host/meili/indexer.js +85 -0
  484. package/dist-cjs/host/meili/indexer.js.map +1 -0
  485. package/dist-cjs/host/meili-launcher.js +121 -0
  486. package/dist-cjs/host/meili-launcher.js.map +1 -0
  487. package/dist-cjs/host/n8n/agent-isolation.js +173 -0
  488. package/dist-cjs/host/n8n/agent-isolation.js.map +1 -0
  489. package/dist-cjs/host/n8n/api-key.js +314 -0
  490. package/dist-cjs/host/n8n/api-key.js.map +1 -0
  491. package/dist-cjs/host/n8n/launcher.js +1209 -0
  492. package/dist-cjs/host/n8n/launcher.js.map +1 -0
  493. package/dist-cjs/host/n8n/runtime-bootstrap.js +244 -0
  494. package/dist-cjs/host/n8n/runtime-bootstrap.js.map +1 -0
  495. package/dist-cjs/host/node-runtime.js +274 -0
  496. package/dist-cjs/host/node-runtime.js.map +1 -0
  497. package/dist-cjs/host/npm-cli.js +224 -0
  498. package/dist-cjs/host/npm-cli.js.map +1 -0
  499. package/dist-cjs/host/plugins/accept-check.js +176 -0
  500. package/dist-cjs/host/plugins/accept-check.js.map +1 -0
  501. package/dist-cjs/host/plugins/brand-bindings.js +78 -0
  502. package/dist-cjs/host/plugins/brand-bindings.js.map +1 -0
  503. package/dist-cjs/host/plugins/control-adapters.js +89 -0
  504. package/dist-cjs/host/plugins/control-adapters.js.map +1 -0
  505. package/dist-cjs/host/plugins/control-extras.js +397 -0
  506. package/dist-cjs/host/plugins/control-extras.js.map +1 -0
  507. package/dist-cjs/host/plugins/control-plane.js +130 -0
  508. package/dist-cjs/host/plugins/control-plane.js.map +1 -0
  509. package/dist-cjs/host/plugins/control-token.js +90 -0
  510. package/dist-cjs/host/plugins/control-token.js.map +1 -0
  511. package/dist-cjs/host/plugins/crm-key.js +135 -0
  512. package/dist-cjs/host/plugins/crm-key.js.map +1 -0
  513. package/dist-cjs/host/plugins/data.js +107 -0
  514. package/dist-cjs/host/plugins/data.js.map +1 -0
  515. package/dist-cjs/host/plugins/events.js +19 -0
  516. package/dist-cjs/host/plugins/events.js.map +1 -0
  517. package/dist-cjs/host/plugins/execution-grant.js +11 -0
  518. package/dist-cjs/host/plugins/execution-grant.js.map +1 -0
  519. package/dist-cjs/host/plugins/git.js +371 -0
  520. package/dist-cjs/host/plugins/git.js.map +1 -0
  521. package/dist-cjs/host/plugins/host.js +283 -0
  522. package/dist-cjs/host/plugins/host.js.map +1 -0
  523. package/dist-cjs/host/plugins/launcher.js +514 -0
  524. package/dist-cjs/host/plugins/launcher.js.map +1 -0
  525. package/dist-cjs/host/plugins/runtime.js +446 -0
  526. package/dist-cjs/host/plugins/runtime.js.map +1 -0
  527. package/dist-cjs/host/plugins/test-runner.js +112 -0
  528. package/dist-cjs/host/plugins/test-runner.js.map +1 -0
  529. package/dist-cjs/host/safe-storage.js +95 -0
  530. package/dist-cjs/host/safe-storage.js.map +1 -0
  531. package/dist-cjs/host/sandbox/embed-sandbox.js +396 -0
  532. package/dist-cjs/host/sandbox/embed-sandbox.js.map +1 -0
  533. package/dist-cjs/host/sandbox/os-sandbox.js +106 -0
  534. package/dist-cjs/host/sandbox/os-sandbox.js.map +1 -0
  535. package/dist-cjs/host/server-env.js +69 -0
  536. package/dist-cjs/host/server-env.js.map +1 -0
  537. package/dist-cjs/host/server-launcher.js +52 -0
  538. package/dist-cjs/host/server-launcher.js.map +1 -0
  539. package/dist-cjs/host/tunnel/cloudflared-respawn.js +80 -0
  540. package/dist-cjs/host/tunnel/cloudflared-respawn.js.map +1 -0
  541. package/dist-cjs/host/tunnel/tunnel.js +470 -0
  542. package/dist-cjs/host/tunnel/tunnel.js.map +1 -0
  543. package/dist-cjs/host/web-telemetry.js +100 -0
  544. package/dist-cjs/host/web-telemetry.js.map +1 -0
  545. package/dist-cjs/index.js +496 -0
  546. package/dist-cjs/index.js.map +1 -0
  547. package/dist-cjs/logger.js +269 -0
  548. package/dist-cjs/logger.js.map +1 -0
  549. package/dist-cjs/main-facade.js +139 -0
  550. package/dist-cjs/main-facade.js.map +1 -0
  551. package/dist-cjs/meili.js +51 -0
  552. package/dist-cjs/meili.js.map +1 -0
  553. package/dist-cjs/package.json +3 -0
  554. package/dist-cjs/splash-ui.js +447 -0
  555. package/dist-cjs/splash-ui.js.map +1 -0
  556. package/dist-cjs/tray.js +182 -0
  557. package/dist-cjs/tray.js.map +1 -0
  558. package/dist-cjs/updater.js +304 -0
  559. package/dist-cjs/updater.js.map +1 -0
  560. package/dist-cjs/window-chrome.js +98 -0
  561. package/dist-cjs/window-chrome.js.map +1 -0
  562. package/package.json +87 -0
  563. package/scripts/ensure-kit-binaries.mjs +73 -0
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Splash de démarrage — modèle + HTML riche (aucun import Electron).
3
+ * Port brand-agnostic de electron/splash-ui.ts (TF2) — productName / bridgeName / cssPrefix.
4
+ */
5
+ import { windowChromeBarHtml, windowChromeCss, windowChromeJs, } from "./window-chrome.js";
6
+ export const SPLASH_STEP_WEIGHTS = {
7
+ catalog: 12,
8
+ migrations: 5,
9
+ runtime: 3,
10
+ meili: 5,
11
+ index: 12,
12
+ node: 10,
13
+ hermes: 20,
14
+ n8n: 22,
15
+ next: 4,
16
+ tunnel: 4,
17
+ login: 3,
18
+ remote: 100,
19
+ };
20
+ export function formatElapsedMs(ms) {
21
+ const s = Math.max(0, Math.floor(ms / 1000));
22
+ const m = Math.floor(s / 60);
23
+ const r = s % 60;
24
+ return m > 0 ? `${m}:${String(r).padStart(2, "0")}` : `${r}s`;
25
+ }
26
+ export function sanitizeSplashDetail(line) {
27
+ return String(line || "")
28
+ .replace(/\u001b\[[0-9;]*m/g, "")
29
+ .replace(/\r/g, "")
30
+ .replace(/[ \t]+/g, " ")
31
+ .replace(/\n{3,}/g, "\n\n")
32
+ .trim();
33
+ }
34
+ export function estimateEmbedPercent(detail) {
35
+ const s = detail.toLowerCase();
36
+ if (!s || s === "…" || s === "démarrage")
37
+ return 8;
38
+ if (/erreur|error|fail/.test(s))
39
+ return 100;
40
+ if (/\bok\b|prêt|ready|ui prêt|session owner/.test(s))
41
+ return 100;
42
+ if (/réutilise|déjà prêt|warm/.test(s))
43
+ return 90;
44
+ if (/health|attente|wait|lent/.test(s))
45
+ return 82;
46
+ if (/attente n8n|charge encore ses modules/.test(s))
47
+ return 82;
48
+ if (/première initialisation|migrations|listening/.test(s))
49
+ return 70;
50
+ if (/redémarrage n8n|données déjà présentes|spawn warm|spawn cold|signal prêt|editor is now/i.test(s))
51
+ return 88;
52
+ if (/owner:|local_trusted|jwt=ok|cli hermes/.test(s))
53
+ return 55;
54
+ if (/npm install|pip install|download|télécharg|checksum|bootstrap/.test(s))
55
+ return 35;
56
+ if (/runtime (déjà|manquant)|installation runtime|node /.test(s))
57
+ return 20;
58
+ return 40;
59
+ }
60
+ export function stepProgressRatio(step) {
61
+ if (step.status === "done" || step.status === "skip")
62
+ return 1;
63
+ if (step.status === "error")
64
+ return 1;
65
+ if (step.status === "pending")
66
+ return 0;
67
+ if (typeof step.percent === "number" && Number.isFinite(step.percent)) {
68
+ return Math.max(0, Math.min(100, step.percent)) / 100;
69
+ }
70
+ return 0.35;
71
+ }
72
+ export function computeOverallPercent(steps) {
73
+ let wSum = 0;
74
+ let pSum = 0;
75
+ for (const step of steps) {
76
+ if (step.status === "skip")
77
+ continue;
78
+ const w = SPLASH_STEP_WEIGHTS[step.id] ?? 5;
79
+ wSum += w;
80
+ pSum += w * stepProgressRatio(step);
81
+ }
82
+ if (wSum <= 0)
83
+ return 0;
84
+ return Math.max(0, Math.min(100, (pSum / wSum) * 100));
85
+ }
86
+ export function createLocalSplashSteps(opts) {
87
+ const mk = (id, label, status = "pending") => ({
88
+ id,
89
+ label,
90
+ status,
91
+ detail: "",
92
+ percent: null,
93
+ startedAt: null,
94
+ endedAt: null,
95
+ });
96
+ const steps = [
97
+ mk("catalog", opts.catalogLabel ?? "Données initiales"),
98
+ mk("migrations", "Base de données"),
99
+ ];
100
+ if (opts.includeRuntime) {
101
+ steps.push(mk("runtime", opts.runtimeLabel ?? "Runtime plateforme"));
102
+ }
103
+ steps.push(mk("meili", "Moteur de recherche"), mk("index", "Indexation", opts.needIndex ? "pending" : "skip"), mk("node", opts.nodeLabel ?? "Runtime Node", opts.needNode ? "pending" : "skip"), mk("hermes", "Hermes (agents)", opts.needHermes ? "pending" : "skip"), mk("n8n", "n8n (automatisations)", opts.needN8n ? "pending" : "skip"), mk("next", "Serveur local CRM"), mk("tunnel", "Tunnel d’accès distant", opts.needTunnel ? "pending" : "skip"), mk("login", "Ouverture de l’interface"));
104
+ return steps;
105
+ }
106
+ export function createRemoteSplashSteps() {
107
+ return [
108
+ {
109
+ id: "remote",
110
+ label: "Connexion au serveur",
111
+ status: "pending",
112
+ detail: "",
113
+ percent: null,
114
+ startedAt: null,
115
+ endedAt: null,
116
+ },
117
+ {
118
+ id: "login",
119
+ label: "Ouverture de l’interface",
120
+ status: "pending",
121
+ detail: "",
122
+ percent: null,
123
+ startedAt: null,
124
+ endedAt: null,
125
+ },
126
+ ];
127
+ }
128
+ export function createSplashModel(steps, headline = "Démarrage…") {
129
+ const now = Date.now();
130
+ return {
131
+ headline,
132
+ bootStartedAt: now,
133
+ overallPercent: computeOverallPercent(steps),
134
+ steps,
135
+ footer: "Hermes et n8n démarrent en parallèle — le temps total ≈ le plus lent des deux.",
136
+ };
137
+ }
138
+ export function activateSplashStep(model, id, opts) {
139
+ const now = Date.now();
140
+ const steps = model.steps.map((s) => {
141
+ if (s.id === id) {
142
+ if (s.status === "skip")
143
+ return s;
144
+ return {
145
+ ...s,
146
+ status: "running",
147
+ detail: opts?.detail !== undefined
148
+ ? sanitizeSplashDetail(opts.detail)
149
+ : s.detail,
150
+ percent: opts?.percent !== undefined ? opts.percent : s.percent,
151
+ startedAt: s.startedAt ?? now,
152
+ endedAt: null,
153
+ };
154
+ }
155
+ if (!opts?.parallel && s.status === "running" && s.id !== id) {
156
+ return {
157
+ ...s,
158
+ status: "done",
159
+ percent: 100,
160
+ endedAt: s.endedAt ?? now,
161
+ };
162
+ }
163
+ return s;
164
+ });
165
+ const next = {
166
+ ...model,
167
+ headline: opts?.headline ?? model.headline,
168
+ steps,
169
+ };
170
+ next.overallPercent = computeOverallPercent(steps);
171
+ return next;
172
+ }
173
+ export function updateSplashStep(model, id, patch) {
174
+ const now = Date.now();
175
+ const steps = model.steps.map((s) => {
176
+ if (s.id !== id)
177
+ return s;
178
+ const status = patch.status ?? s.status;
179
+ const endedAt = status === "done" || status === "error"
180
+ ? (s.endedAt ?? now)
181
+ : status === "running"
182
+ ? null
183
+ : s.endedAt;
184
+ return {
185
+ ...s,
186
+ status,
187
+ detail: patch.detail !== undefined
188
+ ? sanitizeSplashDetail(patch.detail)
189
+ : s.detail,
190
+ percent: patch.percent !== undefined ? patch.percent : s.percent,
191
+ startedAt: status === "running" ? (s.startedAt ?? now) : s.startedAt,
192
+ endedAt,
193
+ };
194
+ });
195
+ const next = {
196
+ ...model,
197
+ headline: patch.headline ?? model.headline,
198
+ steps,
199
+ };
200
+ next.overallPercent = computeOverallPercent(steps);
201
+ return next;
202
+ }
203
+ export function completeSplashStep(model, id, detail = "Terminé") {
204
+ return updateSplashStep(model, id, {
205
+ status: "done",
206
+ detail,
207
+ percent: 100,
208
+ });
209
+ }
210
+ /** HTML splash riche (barres + chronos) — data URL construite par le caller. */
211
+ export function splashHtmlDocument(opts) {
212
+ const chrome = Boolean(opts.windowChrome);
213
+ const accent = opts.accentColor ?? "#f0701d";
214
+ const cssPrefix = opts.cssPrefix ?? "cz";
215
+ const chromeBar = chrome ? windowChromeBarHtml(cssPrefix) : "";
216
+ const chromeCss = chrome
217
+ ? windowChromeCss({ dark: true, cssPrefix })
218
+ : "";
219
+ const chromeJs = chrome
220
+ ? windowChromeJs(opts.bridgeName, cssPrefix)
221
+ : "";
222
+ const bodyAttrs = chrome
223
+ ? ` class="${cssPrefix}-chrome" data-${cssPrefix}-chrome-force="1"`
224
+ : "";
225
+ const title = opts.productName.replace(/</g, "");
226
+ const updClass = `${cssPrefix}-upd`;
227
+ return `<!doctype html>
228
+ <html lang="fr"><head><meta charset="utf-8"><title>${title}</title>
229
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
230
+ <style>
231
+ *{box-sizing:border-box}
232
+ body{
233
+ margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;
234
+ background:#14182f;color:#fff;
235
+ font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
236
+ }
237
+ .wrap{width:min(640px,92vw);padding:28px 22px 32px}
238
+ .brand{font-size:28px;font-weight:700;color:${accent};letter-spacing:-.02em}
239
+ .headline{margin-top:10px;font-size:15px;line-height:1.4;opacity:.92;word-break:break-word}
240
+ .meta{margin-top:14px;display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:13px;opacity:.75}
241
+ .meta b{color:#fff;opacity:1;font-variant-numeric:tabular-nums}
242
+ .obar{
243
+ margin-top:8px;height:10px;border-radius:6px;background:rgba(255,255,255,.12);overflow:hidden;
244
+ }
245
+ .obar > i{
246
+ display:block;height:100%;width:0%;border-radius:6px;background:${accent};
247
+ transition:width .3s ease;
248
+ }
249
+ .steps{margin-top:18px;display:flex;flex-direction:column;gap:8px;max-height:min(58vh,520px);overflow:auto;padding-right:2px}
250
+ .step{
251
+ border:1px solid rgba(255,255,255,.1);border-radius:10px;
252
+ background:rgba(255,255,255,.03);padding:10px 12px;
253
+ }
254
+ .step.skip{display:none}
255
+ .step.pending{opacity:.45}
256
+ .step.running{border-color:${accent}88;background:${accent}14}
257
+ .step.done{opacity:.85}
258
+ .step.error{border-color:rgba(255,120,120,.55);background:rgba(255,80,80,.08)}
259
+ .row{display:flex;align-items:flex-start;gap:10px}
260
+ .mark{
261
+ flex:0 0 22px;width:22px;height:22px;border-radius:50%;
262
+ display:grid;place-items:center;font-size:12px;margin-top:1px;
263
+ background:rgba(255,255,255,.1);color:rgba(255,255,255,.7);
264
+ }
265
+ .step.running .mark{background:${accent}40;color:${accent}}
266
+ .step.done .mark{background:rgba(80,200,120,.2);color:#8dffb0}
267
+ .step.error .mark{background:rgba(255,100,100,.2);color:#ff8f8f}
268
+ .body{flex:1;min-width:0}
269
+ .topline{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
270
+ .label{font-size:14px;font-weight:600}
271
+ .timer{font-size:12px;opacity:.7;font-variant-numeric:tabular-nums;white-space:nowrap}
272
+ .sbar{
273
+ margin-top:7px;height:5px;border-radius:4px;background:rgba(255,255,255,.1);overflow:hidden;
274
+ }
275
+ .sbar > i{display:block;height:100%;width:0%;border-radius:4px;background:${accent};transition:width .25s ease}
276
+ .sbar.indet > i{
277
+ width:36%!important;animation:indet 1.1s ease-in-out infinite;
278
+ }
279
+ @keyframes indet{
280
+ 0%{transform:translateX(-120%)}
281
+ 100%{transform:translateX(320%)}
282
+ }
283
+ .detail{
284
+ margin-top:7px;font-size:12px;line-height:1.45;opacity:.78;
285
+ white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;
286
+ }
287
+ .pct{font-size:11px;opacity:.55;margin-left:6px;font-variant-numeric:tabular-nums}
288
+ .footer{margin-top:14px;font-size:12px;line-height:1.45;opacity:.55;word-break:break-word}
289
+ .${updClass}{margin-top:12px;font-size:12.5px;line-height:1.4;color:#ffd08a;opacity:.95;word-break:break-word}
290
+ ${chromeCss}
291
+ </style>
292
+ </head>
293
+ <body${bodyAttrs}>
294
+ ${chromeBar}
295
+ <div class="wrap">
296
+ <div class="brand">${title}</div>
297
+ <div class="headline" id="headline">Démarrage…</div>
298
+ <div class="${updClass}" id="${updClass}" hidden></div>
299
+ <div class="meta">
300
+ <span>Temps écoulé <b id="elapsed">0s</b></span>
301
+ <span><b id="opct">0</b>%</span>
302
+ </div>
303
+ <div class="obar"><i id="obar"></i></div>
304
+ <div class="steps" id="steps"></div>
305
+ <div class="footer" id="footer"></div>
306
+ </div>
307
+ <script>
308
+ (function () {
309
+ var state = null;
310
+ var MARK = { pending: "○", running: "●", done: "✓", error: "!", skip: "–" };
311
+
312
+ function fmt(ms) {
313
+ var s = Math.max(0, Math.floor(ms / 1000));
314
+ var m = Math.floor(s / 60);
315
+ var r = s % 60;
316
+ return m > 0 ? (m + ":" + String(r).padStart(2, "0")) : (r + "s");
317
+ }
318
+
319
+ function stepTimer(st, now) {
320
+ if (!st.startedAt) return "";
321
+ if (st.endedAt) return fmt(st.endedAt - st.startedAt);
322
+ if (st.status === "running") return fmt(now - st.startedAt);
323
+ if (st.status === "done" || st.status === "error") {
324
+ return st.endedAt ? fmt(st.endedAt - st.startedAt) : "";
325
+ }
326
+ return "";
327
+ }
328
+
329
+ function render() {
330
+ if (!state) return;
331
+ var now = Date.now();
332
+ document.getElementById("headline").textContent = state.headline || "Démarrage…";
333
+ document.getElementById("elapsed").textContent = fmt(now - (state.bootStartedAt || now));
334
+ var op = Math.max(0, Math.min(100, Number(state.overallPercent) || 0));
335
+ document.getElementById("opct").textContent = String(Math.round(op));
336
+ document.getElementById("obar").style.width = op.toFixed(1) + "%";
337
+ document.getElementById("footer").textContent = state.footer || "";
338
+
339
+ var root = document.getElementById("steps");
340
+ var html = "";
341
+ (state.steps || []).forEach(function (st) {
342
+ var cls = "step " + (st.status || "pending");
343
+ var pct = st.percent;
344
+ var showBar = st.status === "running" || (typeof pct === "number" && st.status !== "pending");
345
+ var indet = st.status === "running" && (pct == null || !isFinite(pct));
346
+ var barW = indet ? 36 : Math.max(0, Math.min(100, Number(pct) || (st.status === "done" ? 100 : 0)));
347
+ var pctLabel = (!indet && typeof pct === "number" && st.status === "running")
348
+ ? ('<span class="pct">' + Math.round(pct) + "%</span>")
349
+ : "";
350
+ var detail = st.detail ? String(st.detail) : "";
351
+ html += '<div class="' + cls + '" data-id="' + st.id + '">'
352
+ + '<div class="row">'
353
+ + '<div class="mark">' + (MARK[st.status] || "○") + "</div>"
354
+ + '<div class="body">'
355
+ + '<div class="topline"><span class="label">' + escapeHtml(st.label) + pctLabel + "</span>"
356
+ + '<span class="timer" data-started="' + (st.startedAt || "") + '" data-ended="' + (st.endedAt || "") + '" data-status="' + st.status + '">'
357
+ + escapeHtml(stepTimer(st, now)) + "</span></div>"
358
+ + (showBar
359
+ ? ('<div class="sbar' + (indet ? " indet" : "") + '"><i style="width:' + barW + '%"></i></div>')
360
+ : "")
361
+ + (detail ? ('<div class="detail">' + escapeHtml(detail) + "</div>") : "")
362
+ + "</div></div></div>";
363
+ });
364
+ root.innerHTML = html;
365
+ }
366
+
367
+ function escapeHtml(s) {
368
+ return String(s)
369
+ .replace(/&/g, "&amp;")
370
+ .replace(/</g, "&lt;")
371
+ .replace(/>/g, "&gt;")
372
+ .replace(/"/g, "&quot;");
373
+ }
374
+
375
+ function tickTimers() {
376
+ if (!state) return;
377
+ var now = Date.now();
378
+ document.getElementById("elapsed").textContent = fmt(now - (state.bootStartedAt || now));
379
+ var timers = document.querySelectorAll(".timer");
380
+ for (var i = 0; i < timers.length; i++) {
381
+ var el = timers[i];
382
+ var started = Number(el.getAttribute("data-started") || 0);
383
+ var ended = Number(el.getAttribute("data-ended") || 0);
384
+ var status = el.getAttribute("data-status") || "";
385
+ if (!started) { el.textContent = ""; continue; }
386
+ if (ended) el.textContent = fmt(ended - started);
387
+ else if (status === "running") el.textContent = fmt(now - started);
388
+ }
389
+ }
390
+
391
+ window.__setBoot = function (m) {
392
+ state = m || null;
393
+ render();
394
+ };
395
+ window.__setStatus = function (t) {
396
+ if (!state) {
397
+ state = {
398
+ headline: String(t || "Démarrage…"),
399
+ bootStartedAt: Date.now(),
400
+ overallPercent: 0,
401
+ steps: [],
402
+ footer: "",
403
+ };
404
+ } else {
405
+ state.headline = String(t || state.headline);
406
+ }
407
+ render();
408
+ };
409
+ window.__setProgress = function (p) {
410
+ if (!state) return;
411
+ if (p && typeof p.percent === "number") {
412
+ state.overallPercent = p.percent;
413
+ var cat = (state.steps || []).find(function (s) { return s.id === "catalog"; });
414
+ if (cat && cat.status === "running") {
415
+ cat.percent = p.percent;
416
+ if (p.detail) cat.detail = String(p.detail);
417
+ }
418
+ }
419
+ render();
420
+ };
421
+
422
+ setInterval(tickTimers, 250);
423
+ })();
424
+ ${chromeJs}
425
+ </script>
426
+ </body></html>`;
427
+ }
428
+ export function splashDataUrl(opts) {
429
+ return `data:text/html;charset=utf-8,${encodeURIComponent(splashHtmlDocument(opts))}`;
430
+ }
431
+ //# sourceMappingURL=splash-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splash-ui.js","sourceRoot":"","sources":["../src/splash-ui.ts"],"names":[],"mappings":"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"}
package/dist/tray.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Icône Tray générique — labels depuis AppManifest.productName.
3
+ * Port de electron/tray.ts (TF2) — setup/refresh sync (require electron).
4
+ */
5
+ export type TrayAiWorkspaceEntry = {
6
+ userId: string;
7
+ label: string;
8
+ visible: boolean;
9
+ };
10
+ export type TrayControllerOptions = {
11
+ productName: string;
12
+ /** Chemin icône tray (PNG) — optionnel. */
13
+ iconPath?: string;
14
+ resourcesRoot?: string;
15
+ isPackaged?: boolean;
16
+ showWindow: () => void;
17
+ quit: () => void;
18
+ listAiWorkspaces?: () => TrayAiWorkspaceEntry[];
19
+ openAiWorkspace?: (userId: string) => void;
20
+ closeAiWorkspace?: (userId: string) => void;
21
+ };
22
+ export declare class TrayController {
23
+ private readonly opts;
24
+ private tray;
25
+ constructor(opts: TrayControllerOptions);
26
+ get active(): boolean;
27
+ private resolveIconPath;
28
+ private loadTrayIcon;
29
+ private buildMenu;
30
+ refresh(): void;
31
+ /** true si le tray est opérationnel (close → hide possible). */
32
+ setup(): boolean;
33
+ destroy(): void;
34
+ }
35
+ export declare function installCloseToTray(win: InstanceType<typeof import("electron").BaseWindow>, opts: {
36
+ trayActive: () => boolean;
37
+ isQuitting: () => boolean;
38
+ closeToTrayEnabled: () => boolean;
39
+ productName?: string;
40
+ /** Si true (ex. boot raté), X / Alt+F4 quitte vraiment au lieu de masquer. */
41
+ forceQuitOnClose?: () => boolean;
42
+ }): void;
43
+ export declare function applyLaunchAtStartup(enabled: boolean): void;
44
+ //# sourceMappingURL=tray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,oBAAoB,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,IAAI,CAA6D;gBAE5C,IAAI,EAAE,qBAAqB;IAExD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,SAAS;IA2CjB,OAAO,IAAI,IAAI;IAQf,gEAAgE;IAChE,KAAK,IAAI,OAAO;IAsBhB,OAAO,IAAI,IAAI;CAQhB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,CAAC,cAAc,UAAU,EAAE,UAAU,CAAC,EACvD,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;CAClC,GACA,IAAI,CAkCN;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW3D"}
package/dist/tray.js ADDED
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Icône Tray générique — labels depuis AppManifest.productName.
3
+ * Port de electron/tray.ts (TF2) — setup/refresh sync (require electron).
4
+ */
5
+ import fs from "node:fs";
6
+ import path from "node:path";
7
+ import { log, logError } from "@creezio/host-runtime";
8
+ import { loadElectron } from "@creezio/host-runtime";
9
+ const TRAY_ICON_FALLBACK_B64 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACAklEQVR42u2X2U7CQBSGeZwCgkvdtUAv+gx9g8IENC5xiUsUA/SKt5qkEMAoRmtcohKBtO/QHHMSLswMygytd/7Jd9P2XxISOo3F/iUhxfIMxfLqiuVRxfJ8xfKCEf7oGt4zIi+O54cknh+68fwQBMFnSejiRGGgJgoDmigMYErQq05VniR9M0n6QZL0ISSYYUqVzxQ/zZniJ0SM2IhUqaemSr0gVepBxGDm5J8jvfVB01sf8EfQ38u330l6+x2+E1ZsHnb8OGB2582d3XmD74QVm4cdY8vndl+Nud1XYAmrcZnYxQ2Y33upz++9AEtYjcvELm7Awv4zXdh/BlFYyXixixugHjz56sETiMJKxotd3IDFw8dg8fARRGEl48UubsDSkRssHbkgCisZL3ZxA5aPH/zl4wcQhZWMF7u4ASsn93Tl5B5EYSXjxS5uwOrpXX319A5EYSXjxS5uwNpZ11g764IorGS82DX233D9/NZdP78FEViJ+rDjx3fBxsUN2bi4ARFYifqw49c34ublNd28vIZJsBLxYPbE84BW7qhauRNo5Q5EDGaKnQ+1q7apXbUhYuTOhZlKy8xUWkGm0oLQYIY51ck4W22qWWqTZqtNmBL0qqG/D3K1BsnVGm6u1gBB8FkS+ReSbjuGbjt13Xaobju+bjvBCH90De8ZsX9J6AvaetnzgauSsgAAAABJRU5ErkJggg==";
10
+ export class TrayController {
11
+ opts;
12
+ tray = null;
13
+ constructor(opts) {
14
+ this.opts = opts;
15
+ }
16
+ get active() {
17
+ return this.tray !== null;
18
+ }
19
+ resolveIconPath() {
20
+ if (this.opts.iconPath)
21
+ return this.opts.iconPath;
22
+ const root = this.opts.resourcesRoot;
23
+ if (!root)
24
+ return null;
25
+ if (this.opts.isPackaged) {
26
+ return path.join(process.resourcesPath, "tray-icon.png");
27
+ }
28
+ return path.join(root, "resources", "tray-icon.png");
29
+ }
30
+ loadTrayIcon() {
31
+ const { nativeImage } = loadElectron();
32
+ try {
33
+ const p = this.resolveIconPath();
34
+ if (p && fs.existsSync(p)) {
35
+ const img = nativeImage.createFromPath(p);
36
+ if (!img.isEmpty())
37
+ return img;
38
+ }
39
+ }
40
+ catch (e) {
41
+ logError("tray", e);
42
+ }
43
+ return nativeImage.createFromDataURL(`data:image/png;base64,${TRAY_ICON_FALLBACK_B64}`);
44
+ }
45
+ buildMenu() {
46
+ const { Menu } = loadElectron();
47
+ const name = this.opts.productName;
48
+ const aiEntries = (() => {
49
+ try {
50
+ return this.opts.listAiWorkspaces?.() ?? [];
51
+ }
52
+ catch (e) {
53
+ logError("tray", e);
54
+ return [];
55
+ }
56
+ })();
57
+ const aiSubmenu = aiEntries.map((entry) => ({
58
+ label: `${entry.label}${entry.visible ? "" : " (masqué)"}`,
59
+ submenu: [
60
+ {
61
+ label: "Ouvrir",
62
+ click: () => this.opts.openAiWorkspace?.(entry.userId),
63
+ },
64
+ {
65
+ label: "Fermer réellement",
66
+ click: () => this.opts.closeAiWorkspace?.(entry.userId),
67
+ },
68
+ ],
69
+ }));
70
+ return Menu.buildFromTemplate([
71
+ {
72
+ label: `Ouvrir ${name}`,
73
+ click: () => this.opts.showWindow(),
74
+ },
75
+ ...(aiSubmenu.length
76
+ ? [
77
+ { type: "separator" },
78
+ { label: "Workspaces IA", submenu: aiSubmenu },
79
+ ]
80
+ : []),
81
+ { type: "separator" },
82
+ {
83
+ label: `Quitter ${name}`,
84
+ click: () => this.opts.quit(),
85
+ },
86
+ ]);
87
+ }
88
+ refresh() {
89
+ try {
90
+ this.tray?.setContextMenu(this.buildMenu());
91
+ }
92
+ catch (e) {
93
+ logError("tray", e);
94
+ }
95
+ }
96
+ /** true si le tray est opérationnel (close → hide possible). */
97
+ setup() {
98
+ if (this.tray)
99
+ return true;
100
+ try {
101
+ const { Tray } = loadElectron();
102
+ const tray = new Tray(this.loadTrayIcon());
103
+ tray.setToolTip(`${this.opts.productName} — actif en arrière-plan`);
104
+ tray.setContextMenu(this.buildMenu());
105
+ tray.on("click", () => this.opts.showWindow());
106
+ this.tray = tray;
107
+ log("tray", "icône tray active (fermer la fenêtre = arrière-plan)");
108
+ return true;
109
+ }
110
+ catch (e) {
111
+ logError("tray", e);
112
+ log("tray", "création du tray impossible — fermer la fenêtre quittera l'app");
113
+ this.tray = null;
114
+ return false;
115
+ }
116
+ }
117
+ destroy() {
118
+ try {
119
+ this.tray?.destroy();
120
+ }
121
+ catch {
122
+ /* ignore */
123
+ }
124
+ this.tray = null;
125
+ }
126
+ }
127
+ export function installCloseToTray(win, opts) {
128
+ // 2ᵉ fermeture (fenêtre déjà masquée, ou double Alt+F4 < 2s) → quit réel.
129
+ // Évite les zombies XFCE/RDP quand le tray est peu visible et le boot a planté.
130
+ let lastHideAt = 0;
131
+ win.on("close", ((e) => {
132
+ if (opts.isQuitting())
133
+ return;
134
+ if (!opts.trayActive())
135
+ return;
136
+ if (!opts.closeToTrayEnabled())
137
+ return;
138
+ if (opts.forceQuitOnClose?.()) {
139
+ log("tray", "fermeture forcée (boot/état non prêt) — quit");
140
+ return;
141
+ }
142
+ let alreadyHidden = false;
143
+ try {
144
+ alreadyHidden = !win.isVisible();
145
+ }
146
+ catch {
147
+ alreadyHidden = false;
148
+ }
149
+ const now = Date.now();
150
+ if (alreadyHidden || (lastHideAt > 0 && now - lastHideAt < 2000)) {
151
+ log("tray", `2ᵉ fermeture — quit réel (${opts.productName ?? "app"})`);
152
+ return;
153
+ }
154
+ e.preventDefault();
155
+ win.hide();
156
+ lastHideAt = now;
157
+ log("tray", `fenêtre masquée — ${opts.productName ?? "app"} reste actif en arrière-plan (re-fermer = quitter)`);
158
+ }));
159
+ }
160
+ export function applyLaunchAtStartup(enabled) {
161
+ try {
162
+ const { app } = loadElectron();
163
+ app.setLoginItemSettings({
164
+ openAtLogin: enabled,
165
+ args: [],
166
+ });
167
+ log("tray", `launchAtStartup → ${enabled ? "activé" : "désactivé"}`);
168
+ }
169
+ catch (e) {
170
+ logError("tray", e);
171
+ }
172
+ }
173
+ //# sourceMappingURL=tray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"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"}