@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,758 @@
1
+ // @ts-nocheck — Electron WebContents/session (shim kit mince, N7)
2
+ /**
3
+ * Onglets sites externes : une WebContentsView par onglet, chacune dans une
4
+ * partition persistante `persist:fournisseur-<id>` (cookies/sessions isolés
5
+ * par outil, conservés entre les lancements).
6
+ *
7
+ * Layout : la vue UI CRM occupe toute la fenêtre ; la vue site active
8
+ * n'occupe QUE la content area du workspace (`ContentRect` : x, y, width,
9
+ * height) — sidebar / tab bar restent hors bounds. Panel assistant ouvert =
10
+ * slot rétréci (push React). Panel fermé = ContentRect full-bleed sous le
11
+ * FAB ; le FAB est une WebContentsView topmost (`AssistantChromeOverlay`).
12
+ *
13
+ * Robustesse : AUCUNE erreur d'onglet ne doit être fatale — un échec de
14
+ * chargement affiche une page d'erreur DANS l'onglet, toute exception est
15
+ * loggée + rapportée (kind "tab-error"), les webContents détruits sont
16
+ * ignorés, et les bounds sont toujours clampés dans la fenêtre.
17
+ *
18
+ * Navigation SPA : loadAndWait short-circuite si même document (tab-url.ts) ;
19
+ * le spinner React ne s'affiche que sur intent-load (pas main-nav-start).
20
+ */
21
+ import { loadElectron } from "@creezio/host-runtime";
22
+ import fs from "node:fs";
23
+ import crypto from "node:crypto";
24
+ import { log, logError } from "@creezio/host-runtime";
25
+ import { instrumentWebContents } from "../web-telemetry.js";
26
+ import { reportCrash } from "@creezio/host-runtime";
27
+ import { CHROME_UA } from "./chrome-ua.js";
28
+ import { reduceTabNativeLoadState, } from "./tab-load-state.js";
29
+ import { isSameTabDocument, isSameTabOrigin } from "./tab-url.js";
30
+ import { browserTabPreloadPath } from "./browser-tab-preload-path.js";
31
+ let resolvePreloadPathImpl = null;
32
+ /** Wiring marque — chemin preload onglet (défaut kit si omis). */
33
+ export function configureBrowserTabs(opts = {}) {
34
+ resolvePreloadPathImpl = opts.resolvePreloadPath ?? browserTabPreloadPath;
35
+ }
36
+ function resolvePreloadPath() {
37
+ if (!resolvePreloadPathImpl) {
38
+ // Auto-config défaut kit (O1) si configureBrowserTabs omis.
39
+ configureBrowserTabs();
40
+ }
41
+ return resolvePreloadPathImpl();
42
+ }
43
+ /** Domaines de popups d'auth fédérée à laisser s'ouvrir en vraie fenêtre. */
44
+ const OAUTH_POPUP_HOSTS = [
45
+ "accounts.google.com",
46
+ "login.microsoftonline.com",
47
+ "login.live.com",
48
+ "appleid.apple.com",
49
+ "facebook.com",
50
+ "www.facebook.com",
51
+ ];
52
+ const MIN_CONTENT = 40;
53
+ /** Page d'erreur affichée DANS l'onglet quand le site ne charge pas. */
54
+ function tabErrorHtml(url, description) {
55
+ const esc = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;");
56
+ return `data:text/html;charset=utf-8,${encodeURIComponent(`<!doctype html>
57
+ <html><head><meta charset="utf-8"><title>Page inaccessible</title></head>
58
+ <body style="margin:0;min-height:100vh;display:grid;place-items:center;background:#f6f7fb;color:#1e2430;font-family:system-ui">
59
+ <div style="max-width:560px;padding:32px;text-align:center">
60
+ <div style="font-size:40px">🌐</div>
61
+ <h1 style="font-size:17px;margin-top:12px">Impossible d'ouvrir cette page</h1>
62
+ <p style="font-size:13px;opacity:.75;word-break:break-all;line-height:1.5">${esc(url)}</p>
63
+ <p style="font-size:13px;opacity:.75">${esc(description)}</p>
64
+ <p style="font-size:12px;opacity:.55;margin-top:18px">Vérifiez l'adresse ou votre connexion, puis rouvrez l'onglet.</p>
65
+ </div></body></html>`)}`;
66
+ }
67
+ function stableHash(input) {
68
+ let h = 0;
69
+ for (let i = 0; i < input.length; i++) {
70
+ h = (Math.imul(h, 31) + input.charCodeAt(i)) >>> 0;
71
+ }
72
+ return 1_000_000_000 + (h % 1_000_000_000);
73
+ }
74
+ /**
75
+ * Id de partition : id outil numérique (annuaire), hash stable de l'id opaque
76
+ * (UUID marque), ou hash du hostname si siteId absent/≤ 0 (évite une
77
+ * partition globale partagée `extsite-0`).
78
+ */
79
+ export function resolvePartitionId(siteId, url) {
80
+ if (typeof siteId === "number" && Number.isFinite(siteId) && siteId > 0) {
81
+ return Math.floor(siteId);
82
+ }
83
+ if (typeof siteId === "string" && siteId.trim()) {
84
+ return stableHash(siteId.trim());
85
+ }
86
+ try {
87
+ const host = new URL(url).hostname || "unknown";
88
+ return stableHash(host);
89
+ }
90
+ catch {
91
+ return 0;
92
+ }
93
+ }
94
+ function clampRect(rect, winW, winH) {
95
+ const x = Math.max(0, Math.round(rect.x));
96
+ const y = Math.max(0, Math.round(rect.y));
97
+ const width = Math.round(rect.width);
98
+ const height = Math.round(rect.height);
99
+ if (width < MIN_CONTENT || height < MIN_CONTENT)
100
+ return null;
101
+ if (x >= winW - MIN_CONTENT || y >= winH - MIN_CONTENT)
102
+ return null;
103
+ return {
104
+ x,
105
+ y,
106
+ width: Math.min(width, winW - x),
107
+ height: Math.min(height, winH - y),
108
+ };
109
+ }
110
+ export class SupplierTabManager {
111
+ win;
112
+ appView;
113
+ tabs = new Map();
114
+ activeTabId = null;
115
+ contentRect = null;
116
+ onChanged = null;
117
+ onAfterBounds = null;
118
+ onLoadState = null;
119
+ partitionPrefix;
120
+ suspended;
121
+ constructor(win,
122
+ /** Vue UI CRM — reste en dessous, jamais retirée. */
123
+ appView, opts) {
124
+ this.win = win;
125
+ this.appView = appView;
126
+ this.partitionPrefix = (opts?.partitionPrefix || "").trim();
127
+ this.suspended = Boolean(opts?.suspended);
128
+ this.win.on("resize", () => this.applyBounds());
129
+ }
130
+ /** Désactive ce manager (espace IA masqué / owner masqué). */
131
+ suspend() {
132
+ this.suspended = true;
133
+ // Ne PAS appeler showCrm() : ça effacerait activeTabId et empêcherait
134
+ // resume() de restaurer l’onglet site natif au retour.
135
+ for (const t of this.tabs.values()) {
136
+ try {
137
+ t.view.setVisible(false);
138
+ }
139
+ catch (e) {
140
+ logError("tabs", e);
141
+ }
142
+ }
143
+ try {
144
+ this.appView.setVisible(false);
145
+ }
146
+ catch (e) {
147
+ logError("tabs", e);
148
+ }
149
+ }
150
+ /** Réactive ce manager et restaure les bounds. */
151
+ resume() {
152
+ this.suspended = false;
153
+ try {
154
+ this.appView.setVisible(true);
155
+ }
156
+ catch (e) {
157
+ logError("tabs", e);
158
+ }
159
+ this.applyBounds();
160
+ }
161
+ isSuspended() {
162
+ return this.suspended;
163
+ }
164
+ /** Callback notifié à chaque changement (création, navigation, fermeture). */
165
+ setOnChanged(cb) {
166
+ this.onChanged = cb;
167
+ }
168
+ /**
169
+ * Appelé après chaque applyBounds (ex. remonter le FAB chrome au-dessus
170
+ * de la WebContentsView fournisseur).
171
+ */
172
+ setOnAfterBounds(cb) {
173
+ this.onAfterBounds = cb;
174
+ }
175
+ /** Chargement document principal (nav start → finish/fail/stop) pour spinner UI. */
176
+ setOnLoadState(cb) {
177
+ this.onLoadState = cb;
178
+ }
179
+ notify() {
180
+ try {
181
+ this.onChanged?.();
182
+ }
183
+ catch (e) {
184
+ logError("tabs", e);
185
+ }
186
+ }
187
+ emitLoadState(tab, state, extra) {
188
+ const prev = tab.loadState;
189
+ tab.loadState = state;
190
+ const ev = {
191
+ tabId: tab.tabId,
192
+ siteId: tab.siteId,
193
+ fournisseurId: tab.siteId,
194
+ state,
195
+ error: extra?.error,
196
+ url: extra?.url,
197
+ };
198
+ try {
199
+ this.onLoadState?.(ev);
200
+ }
201
+ catch (e) {
202
+ logError("tabs", e);
203
+ }
204
+ // applyBounds seulement si la visibilité native peut changer.
205
+ if (prev !== state)
206
+ this.applyBounds();
207
+ }
208
+ /**
209
+ * Si Chromium est déjà idle mais l'état UI est resté `loading` (IPC raté,
210
+ * did-start-loading parasite, listener React monté tard), forcer `ready`.
211
+ */
212
+ resyncLoadStateIfIdle(tab) {
213
+ const wc = tab.view.webContents;
214
+ if (wc.isDestroyed())
215
+ return;
216
+ if (wc.isLoading())
217
+ return;
218
+ const url = wc.getURL() || "";
219
+ const next = reduceTabNativeLoadState(tab.loadState, {
220
+ type: "sync-already-idle",
221
+ url: url || undefined,
222
+ });
223
+ if (next !== tab.loadState) {
224
+ this.emitLoadState(tab, next, { url: url || undefined });
225
+ }
226
+ }
227
+ supplierSession(partitionKey) {
228
+ /**
229
+ * Embeds (Hermes/n8n, siteId ≥ 900000) : `persist:extsite-<id>`
230
+ * — aligné cookie injection (`prepareN8nUiSession`).
231
+ * Fournisseurs catalogue : `persist:fournisseur-<id>` (historique Tempo).
232
+ * Workspace IA : préfixe `tempoflow-ai-<userId>-extsite-<id>`.
233
+ */
234
+ const isEmbedTool = partitionKey >= 900_000;
235
+ const name = this.partitionPrefix
236
+ ? `persist:${this.partitionPrefix}-extsite-${partitionKey}`
237
+ : isEmbedTool
238
+ ? `persist:extsite-${partitionKey}`
239
+ : `persist:fournisseur-${partitionKey}`;
240
+ const ses = loadElectron().session.fromPartition(name);
241
+ ses.setUserAgent(CHROME_UA);
242
+ return ses;
243
+ }
244
+ getContentRect() {
245
+ return this.contentRect;
246
+ }
247
+ /** Met à jour le rectangle de la content area (mesuré par l'UI CRM). */
248
+ setContentRect(rect) {
249
+ const { width, height } = this.win.getContentBounds();
250
+ const clamped = clampRect(rect, width, height);
251
+ this.contentRect = clamped;
252
+ this.applyBounds();
253
+ }
254
+ list() {
255
+ const infos = [];
256
+ for (const t of this.tabs.values()) {
257
+ let url = "";
258
+ let title = "";
259
+ try {
260
+ if (!t.view.webContents.isDestroyed()) {
261
+ url = t.view.webContents.getURL();
262
+ title = t.view.webContents.getTitle();
263
+ }
264
+ }
265
+ catch (e) {
266
+ logError("tabs", e);
267
+ }
268
+ infos.push({
269
+ tabId: t.tabId,
270
+ siteId: t.siteId,
271
+ fournisseurId: t.siteId,
272
+ url,
273
+ title,
274
+ active: t.tabId === this.activeTabId,
275
+ });
276
+ }
277
+ return infos;
278
+ }
279
+ get(tabId) {
280
+ return this.tabs.get(tabId);
281
+ }
282
+ getActive() {
283
+ return this.activeTabId ? this.tabs.get(this.activeTabId) : undefined;
284
+ }
285
+ /**
286
+ * Retrouve une vue vivante depuis l'identité stable du site.
287
+ *
288
+ * `tabId` est une identité de session transmise au renderer de façon
289
+ * asynchrone. Le site + son URL restent disponibles dans l'onglet workspace
290
+ * même si ce patch React n'a pas encore eu lieu (ou après restauration de
291
+ * session). Pour les sites anonymes (`siteId = 0`), l'URL retrouve la
292
+ * partition hachée créée par openTab.
293
+ */
294
+ findLiveTabForSite(siteId, url) {
295
+ const partitionKey = resolvePartitionId(siteId, url);
296
+ return Array.from(this.tabs.values()).find((t) => t.partitionKey === partitionKey && !t.view.webContents.isDestroyed());
297
+ }
298
+ /**
299
+ * Réactive une vue déjà ouverte par identité stable, sans navigation ni
300
+ * reload. Filet de sécurité quand le renderer ne connaît pas encore (ou plus)
301
+ * son tabId Electron.
302
+ */
303
+ activateSite(siteId, url, rect) {
304
+ const tab = this.findLiveTabForSite(siteId, url);
305
+ if (!tab) {
306
+ log("tabs", `activateSite: vue absente pour site ${siteId} (${url})`);
307
+ return { ok: false, error: "tab-not-found" };
308
+ }
309
+ const activated = this.activate(tab.tabId, rect);
310
+ if (!activated.ok)
311
+ return activated;
312
+ let currentUrl = "";
313
+ try {
314
+ currentUrl = tab.view.webContents.getURL() || "";
315
+ }
316
+ catch {
317
+ /* la vue vient d'être détruite : l'appelant gardera son URL seed */
318
+ }
319
+ return {
320
+ ok: true,
321
+ tabId: tab.tabId,
322
+ siteId: tab.siteId,
323
+ fournisseurId: tab.siteId,
324
+ loadState: tab.loadState,
325
+ url: currentUrl || undefined,
326
+ };
327
+ }
328
+ /**
329
+ * Ouvre un onglet site externe sur `url`.
330
+ * Si un onglet de la même partition (`siteId`) existe déjà, il est réutilisé.
331
+ * @param siteId Id de partition (ex. entité métier marque, ou 0 = hash host).
332
+ */
333
+ async openTab(siteId, url) {
334
+ try {
335
+ new URL(url); // validation précoce : erreur claire plutôt qu'onglet blanc
336
+ }
337
+ catch {
338
+ throw new Error(`URL d'onglet invalide : « ${url} »`);
339
+ }
340
+ const partitionKey = resolvePartitionId(siteId, url);
341
+ const existing = this.findLiveTabForSite(siteId, url);
342
+ if (existing) {
343
+ // SPA / sync URL : ne pas loadURL si le document est déjà affiché
344
+ // (sinon Hermes chat / sidebars SPA se remountent à chaque pushState).
345
+ await this.loadAndWait(existing, url);
346
+ this.activeTabId = existing.tabId;
347
+ this.applyBounds();
348
+ this.notify();
349
+ return existing;
350
+ }
351
+ const ses = this.supplierSession(partitionKey);
352
+ const preload = resolvePreloadPath();
353
+ if (!fs.existsSync(preload)) {
354
+ // Artefact incomplet (packaging cassé) : sans preload, l'onglet serait
355
+ // ouvert mais muet (pas d'IPC, pilotage IA dégradé) — on refuse avec
356
+ // une erreur explicite que l'UI affiche en bannière, plutôt qu'un
357
+ // crash-report silencieux + onglet zombie.
358
+ reportCrash("tab-error", { step: "openTab", missingPreload: preload });
359
+ throw new Error(`Onglet externe indisponible : preload manquant dans l'artefact ` +
360
+ `(${preload}). Réinstaller l'application ou vérifier le packaging ` +
361
+ `(gate after-pack desktop-tooling).`);
362
+ }
363
+ const { WebContentsView } = loadElectron();
364
+ const view = new WebContentsView({
365
+ webPreferences: {
366
+ session: ses,
367
+ preload,
368
+ contextIsolation: true,
369
+ sandbox: true,
370
+ nodeIntegration: false,
371
+ // Bots/IA : les événements CDP routés compositeur (mouseWheel,
372
+ // mouseMoved) doivent être ACKés même vue masquée / fenêtre occluse
373
+ // (fenêtre IA cachée Q8, owner dans le tray) — sinon deadlock.
374
+ backgroundThrottling: false,
375
+ },
376
+ });
377
+ view.webContents.setUserAgent(CHROME_UA);
378
+ view.setVisible(false);
379
+ const tabId = `tab-${crypto.randomBytes(4).toString("hex")}`;
380
+ // L'identité renvoyée au renderer reste l'id opaque d'origine (UUID
381
+ // marque…) ; la partition numérique ne sert qu'à la session persistante.
382
+ const echoSiteId = (typeof siteId === "string" && siteId.trim()) ||
383
+ (typeof siteId === "number" && Number.isFinite(siteId) && siteId > 0)
384
+ ? siteId
385
+ : partitionKey;
386
+ const tab = {
387
+ tabId,
388
+ siteId: echoSiteId,
389
+ partitionKey,
390
+ fournisseurId: echoSiteId, // miroir déprécié
391
+ view,
392
+ debuggerAttached: false,
393
+ loadState: "loading",
394
+ };
395
+ this.tabs.set(tabId, tab);
396
+ instrumentWebContents(view.webContents, `${tabId}/f${partitionKey}`);
397
+ log("tabs", `onglet ${tabId} (site ${partitionKey}) → ${url}`);
398
+ this.wireLoadEvents(tab);
399
+ view.webContents.setWindowOpenHandler(({ url: targetUrl, disposition }) => {
400
+ let host = "";
401
+ let currentUrl = "";
402
+ try {
403
+ host = new URL(targetUrl).hostname;
404
+ if (!view.webContents.isDestroyed()) {
405
+ currentUrl = view.webContents.getURL() || "";
406
+ }
407
+ }
408
+ catch {
409
+ return { action: "deny" };
410
+ }
411
+ const isOauthHost = OAUTH_POPUP_HOSTS.some((h) => host === h || host.endsWith("." + h));
412
+ const sameOrigin = Boolean(currentUrl && isSameTabOrigin(currentUrl, targetUrl));
413
+ // Popup réelle : OAuth fédéré, new-window, ou window.open same-origin
414
+ // (même partition cookies — ex. flux métier / upload).
415
+ const allowPopup = isOauthHost ||
416
+ disposition === "new-window" ||
417
+ (sameOrigin && disposition === "default");
418
+ if (allowPopup) {
419
+ return {
420
+ action: "allow",
421
+ overrideBrowserWindowOptions: {
422
+ width: 520,
423
+ height: 720,
424
+ autoHideMenuBar: true,
425
+ webPreferences: {
426
+ session: ses,
427
+ contextIsolation: true,
428
+ sandbox: true,
429
+ },
430
+ },
431
+ };
432
+ }
433
+ if (disposition === "foreground-tab" || disposition === "background-tab") {
434
+ void this.loadAndWait(tab, targetUrl).catch((e) => logError("tabs", e));
435
+ return { action: "deny" };
436
+ }
437
+ void loadElectron().shell.openExternal(targetUrl).catch((e) => logError("tabs", e));
438
+ return { action: "deny" };
439
+ });
440
+ const onNav = () => this.notify();
441
+ view.webContents.on("did-navigate", onNav);
442
+ view.webContents.on("did-navigate-in-page", onNav);
443
+ view.webContents.on("page-title-updated", onNav);
444
+ view.webContents.on("render-process-gone", (_e, details) => {
445
+ if (details.reason === "clean-exit")
446
+ return;
447
+ const msg = `Le rendu de l'onglet s'est arrêté (${details.reason}).`;
448
+ if (!view.webContents.isDestroyed()) {
449
+ void view.webContents.loadURL(tabErrorHtml(url, msg)).catch(() => { });
450
+ }
451
+ this.emitLoadState(tab, "error", { error: msg, url });
452
+ this.notify();
453
+ });
454
+ this.win.contentView.addChildView(view);
455
+ this.activeTabId = tabId;
456
+ this.emitLoadState(tab, "loading", { url });
457
+ await this.loadAndWait(tab, url);
458
+ this.applyBounds();
459
+ this.notify();
460
+ return tab;
461
+ }
462
+ /**
463
+ * Navigation principale uniquement → IPC load-state + masquage pendant loading.
464
+ * Ne pas écouter `did-start-loading` : il refire après finish (iframes /
465
+ * sous-ressources) et rebloquait l'overlay React sans ready de sortie.
466
+ */
467
+ wireLoadEvents(tab) {
468
+ const wc = tab.view.webContents;
469
+ /** true le temps de charger la data:-page d'erreur (évite flash « loading »). */
470
+ let loadingErrorPage = false;
471
+ wc.on("did-start-navigation", (_e, url, isInPlace, isMainFrame) => {
472
+ if (wc.isDestroyed() || loadingErrorPage || !this.tabs.has(tab.tabId))
473
+ return;
474
+ const next = reduceTabNativeLoadState(tab.loadState, {
475
+ type: "main-nav-start",
476
+ isMainFrame: Boolean(isMainFrame),
477
+ isInPlace: Boolean(isInPlace),
478
+ url: typeof url === "string" ? url : undefined,
479
+ });
480
+ if (next !== tab.loadState) {
481
+ this.emitLoadState(tab, next, {
482
+ url: typeof url === "string" ? url : undefined,
483
+ });
484
+ }
485
+ });
486
+ wc.on("did-finish-load", () => {
487
+ if (wc.isDestroyed() || !this.tabs.has(tab.tabId))
488
+ return;
489
+ const current = wc.getURL() || "";
490
+ if (loadingErrorPage || current.startsWith("data:text/html")) {
491
+ loadingErrorPage = false;
492
+ const next = reduceTabNativeLoadState(tab.loadState, {
493
+ type: "main-finish",
494
+ url: current || undefined,
495
+ });
496
+ this.emitLoadState(tab, next, { url: current || undefined });
497
+ this.notify();
498
+ return;
499
+ }
500
+ const next = reduceTabNativeLoadState(tab.loadState, {
501
+ type: "main-finish",
502
+ url: current || undefined,
503
+ });
504
+ this.emitLoadState(tab, next, { url: current || undefined });
505
+ this.notify();
506
+ });
507
+ wc.on("did-stop-loading", () => {
508
+ if (wc.isDestroyed() || loadingErrorPage || !this.tabs.has(tab.tabId))
509
+ return;
510
+ const current = wc.getURL() || "";
511
+ const next = reduceTabNativeLoadState(tab.loadState, {
512
+ type: "stop-loading",
513
+ stillLoading: wc.isLoading(),
514
+ url: current || undefined,
515
+ });
516
+ if (next !== tab.loadState) {
517
+ this.emitLoadState(tab, next, { url: current || undefined });
518
+ this.notify();
519
+ }
520
+ });
521
+ wc.on("did-fail-load", (_e, errorCode, errorDescription, validatedURL, isMainFrame) => {
522
+ const aborted = errorCode === -3; /* ERR_ABORTED */
523
+ const next = reduceTabNativeLoadState(tab.loadState, {
524
+ type: "main-fail",
525
+ isMainFrame: Boolean(isMainFrame),
526
+ aborted,
527
+ });
528
+ if (next === tab.loadState)
529
+ return;
530
+ const msg = `${errorDescription} (${errorCode})`;
531
+ log("tabs", `onglet ${tab.tabId}: échec chargement ${errorCode} ${errorDescription} ${validatedURL}`);
532
+ this.emitLoadState(tab, next, {
533
+ error: msg,
534
+ url: validatedURL || undefined,
535
+ });
536
+ if (!wc.isDestroyed() && next === "error") {
537
+ loadingErrorPage = true;
538
+ void wc
539
+ .loadURL(tabErrorHtml(validatedURL || "", msg))
540
+ .catch(() => {
541
+ loadingErrorPage = false;
542
+ });
543
+ }
544
+ this.notify();
545
+ });
546
+ }
547
+ /**
548
+ * Charge une URL et attend la fin de chargement (timeout doux 20 s).
549
+ * No-op si le document courant est déjà la cible (évite reload SPA).
550
+ */
551
+ async loadAndWait(tab, url) {
552
+ const wc = tab.view.webContents;
553
+ if (wc.isDestroyed())
554
+ return;
555
+ let current = "";
556
+ try {
557
+ current = wc.getURL() || "";
558
+ }
559
+ catch {
560
+ current = "";
561
+ }
562
+ if (current && isSameTabDocument(current, url)) {
563
+ this.resyncLoadStateIfIdle(tab);
564
+ return;
565
+ }
566
+ const next = reduceTabNativeLoadState(tab.loadState, { type: "intent-load" });
567
+ this.emitLoadState(tab, next, { url });
568
+ await new Promise((resolve) => {
569
+ const timer = setTimeout(done, 20000);
570
+ function done() {
571
+ clearTimeout(timer);
572
+ try {
573
+ wc.removeListener("did-finish-load", done);
574
+ wc.removeListener("did-fail-load", done);
575
+ }
576
+ catch {
577
+ /* webContents détruit entre-temps */
578
+ }
579
+ resolve();
580
+ }
581
+ wc.once("did-finish-load", done);
582
+ wc.once("did-fail-load", done);
583
+ wc.loadURL(url).catch((e) => {
584
+ this.emitLoadState(tab, "error", {
585
+ error: e instanceof Error ? e.message : String(e),
586
+ url,
587
+ });
588
+ done();
589
+ });
590
+ });
591
+ }
592
+ /**
593
+ * Active un onglet. `rect` optionnel met à jour la content area.
594
+ * Sans nouveau rect, réutilise `contentRect` (conservé après showCrm) —
595
+ * indispensable pour réactiver Hermes au retour d'onglet.
596
+ */
597
+ activate(tabId, rect) {
598
+ const tab = this.tabs.get(tabId);
599
+ if (!tab) {
600
+ log("tabs", `activate: tab inconnu « ${tabId} »`);
601
+ return { ok: false, error: "tab-not-found" };
602
+ }
603
+ if (tab.view.webContents.isDestroyed()) {
604
+ return { ok: false, error: "webcontents-destroyed" };
605
+ }
606
+ if (rect) {
607
+ const { width, height } = this.win.getContentBounds();
608
+ this.contentRect = clampRect(rect, width, height);
609
+ }
610
+ this.activeTabId = tabId;
611
+ for (const t of this.tabs.values()) {
612
+ try {
613
+ // Visibilité finale gérée dans applyBounds (rect requis).
614
+ t.view.setVisible(false);
615
+ }
616
+ catch (e) {
617
+ logError("tabs", e);
618
+ }
619
+ }
620
+ // Page déjà chargée + état UI bloqué sur loading → ready immédiat.
621
+ this.resyncLoadStateIfIdle(tab);
622
+ this.applyBounds();
623
+ this.notify();
624
+ return { ok: true };
625
+ }
626
+ /**
627
+ * Masque tous les onglets : l'UI CRM reprend toute la fenêtre.
628
+ * Ne clear PAS contentRect — réutilisé au prochain activate sans rect.
629
+ */
630
+ showCrm() {
631
+ this.activeTabId = null;
632
+ for (const t of this.tabs.values()) {
633
+ try {
634
+ t.view.setVisible(false);
635
+ }
636
+ catch (e) {
637
+ logError("tabs", e);
638
+ }
639
+ }
640
+ this.notify();
641
+ }
642
+ /** Remonte la vue dans le contentView (au-dessus de appView, sous FAB). */
643
+ bringViewToFront(view) {
644
+ try {
645
+ this.win.contentView.removeChildView(view);
646
+ }
647
+ catch {
648
+ /* pas encore enfant / déjà retiré */
649
+ }
650
+ try {
651
+ this.win.contentView.addChildView(view);
652
+ }
653
+ catch (e) {
654
+ logError("tabs", e);
655
+ }
656
+ }
657
+ /**
658
+ * Ferme la vue Electron de l'onglet. Les cookies de la partition
659
+ * `persist:extsite-<id>` sont CONSERVÉS (pas de clearStorageData).
660
+ */
661
+ closeTab(tabId) {
662
+ const tab = this.tabs.get(tabId);
663
+ if (!tab)
664
+ return;
665
+ this.tabs.delete(tabId);
666
+ if (this.activeTabId === tabId)
667
+ this.activeTabId = null;
668
+ try {
669
+ if (tab.debuggerAttached)
670
+ tab.view.webContents.debugger.detach();
671
+ }
672
+ catch {
673
+ /* déjà détaché */
674
+ }
675
+ try {
676
+ this.win.contentView.removeChildView(tab.view);
677
+ }
678
+ catch (e) {
679
+ logError("tabs", e);
680
+ }
681
+ try {
682
+ if (!tab.view.webContents.isDestroyed())
683
+ tab.view.webContents.close();
684
+ }
685
+ catch (e) {
686
+ logError("tabs", e);
687
+ }
688
+ this.notify();
689
+ }
690
+ closeAll() {
691
+ for (const tabId of Array.from(this.tabs.keys()))
692
+ this.closeTab(tabId);
693
+ }
694
+ applyBounds() {
695
+ if (this.suspended) {
696
+ for (const t of this.tabs.values()) {
697
+ try {
698
+ t.view.setVisible(false);
699
+ }
700
+ catch {
701
+ /* ignore */
702
+ }
703
+ }
704
+ return;
705
+ }
706
+ try {
707
+ if (this.win.isDestroyed())
708
+ return;
709
+ const { width, height } = this.win.getContentBounds();
710
+ this.appView.setBounds({ x: 0, y: 0, width, height });
711
+ const active = this.getActive();
712
+ if (active && !active.view.webContents.isDestroyed()) {
713
+ const rect = this.contentRect
714
+ ? clampRect(this.contentRect, width, height)
715
+ : null;
716
+ // Pendant loading : vue masquée → le spinner React du slot est visible.
717
+ const showNative = Boolean(rect) &&
718
+ (active.loadState === "ready" || active.loadState === "error");
719
+ if (!showNative) {
720
+ active.view.setVisible(false);
721
+ }
722
+ else {
723
+ this.bringViewToFront(active.view);
724
+ active.view.setBounds(rect);
725
+ active.view.setVisible(true);
726
+ }
727
+ // Masquer les autres (déjà fait dans activate, ceinture + bretelles).
728
+ for (const t of this.tabs.values()) {
729
+ if (t.tabId !== active.tabId) {
730
+ try {
731
+ t.view.setVisible(false);
732
+ }
733
+ catch {
734
+ /* ignore */
735
+ }
736
+ }
737
+ }
738
+ }
739
+ }
740
+ catch (e) {
741
+ logError("tabs", e);
742
+ reportCrash("tab-error", {
743
+ step: "applyBounds",
744
+ message: e instanceof Error ? e.message : String(e),
745
+ });
746
+ }
747
+ // Toujours remonter le FAB chrome (même si aucune vue supplier visible).
748
+ try {
749
+ this.onAfterBounds?.();
750
+ }
751
+ catch (cbErr) {
752
+ logError("tabs", cbErr);
753
+ }
754
+ }
755
+ }
756
+ /** Alias classe (N7) — SoT type = BrowserTab ci-dessus. */
757
+ export { SupplierTabManager as BrowserTabManager };
758
+ //# sourceMappingURL=browser-tab-manager.js.map