@miragon/pulse-widget-shell 0.24.2 → 0.25.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 (917) hide show
  1. package/README.md +134 -127
  2. package/dist/caller.d.ts +3 -0
  3. package/dist/caller.d.ts.map +1 -0
  4. package/dist/caller.js +18 -0
  5. package/dist/caller.js.map +1 -0
  6. package/dist/composed-server.d.ts +34 -66
  7. package/dist/composed-server.d.ts.map +1 -1
  8. package/dist/composed-server.js +130 -137
  9. package/dist/composed-server.js.map +1 -1
  10. package/dist/composition.d.ts +61 -111
  11. package/dist/composition.d.ts.map +1 -1
  12. package/dist/composition.js +120 -54
  13. package/dist/composition.js.map +1 -1
  14. package/dist/font-assets.d.ts +7 -28
  15. package/dist/font-assets.d.ts.map +1 -1
  16. package/dist/font-assets.js +11 -43
  17. package/dist/font-assets.js.map +1 -1
  18. package/dist/health.d.ts +9 -45
  19. package/dist/health.d.ts.map +1 -1
  20. package/dist/health.js +6 -24
  21. package/dist/health.js.map +1 -1
  22. package/dist/host-boot.d.ts +8 -38
  23. package/dist/host-boot.d.ts.map +1 -1
  24. package/dist/host-boot.js +10 -32
  25. package/dist/host-boot.js.map +1 -1
  26. package/dist/http-edge.d.ts +20 -76
  27. package/dist/http-edge.d.ts.map +1 -1
  28. package/dist/http-edge.js +17 -60
  29. package/dist/http-edge.js.map +1 -1
  30. package/dist/metrics.d.ts +6 -21
  31. package/dist/metrics.d.ts.map +1 -1
  32. package/dist/metrics.js +8 -36
  33. package/dist/metrics.js.map +1 -1
  34. package/dist/node-listener.d.ts +7 -39
  35. package/dist/node-listener.d.ts.map +1 -1
  36. package/dist/node-listener.js +6 -18
  37. package/dist/node-listener.js.map +1 -1
  38. package/dist/oauth-env.d.ts +15 -35
  39. package/dist/oauth-env.d.ts.map +1 -1
  40. package/dist/oauth-env.js +122 -62
  41. package/dist/oauth-env.js.map +1 -1
  42. package/dist/protocol/bpmn-names.d.ts +19 -0
  43. package/dist/protocol/bpmn-names.d.ts.map +1 -0
  44. package/dist/{bpmn-names.js → protocol/bpmn-names.js} +9 -38
  45. package/dist/protocol/bpmn-names.js.map +1 -0
  46. package/dist/protocol/served-fonts.d.ts +17 -0
  47. package/dist/protocol/served-fonts.d.ts.map +1 -0
  48. package/dist/protocol/served-fonts.js +30 -0
  49. package/dist/protocol/served-fonts.js.map +1 -0
  50. package/dist/protocol/tool-result.d.ts +24 -0
  51. package/dist/protocol/tool-result.d.ts.map +1 -0
  52. package/dist/protocol/tool-result.js +37 -0
  53. package/dist/protocol/tool-result.js.map +1 -0
  54. package/dist/protocol/translator.d.ts +14 -0
  55. package/dist/protocol/translator.d.ts.map +1 -0
  56. package/dist/protocol/translator.js +18 -0
  57. package/dist/protocol/translator.js.map +1 -0
  58. package/dist/protocol/view-name.d.ts +11 -0
  59. package/dist/protocol/view-name.d.ts.map +1 -0
  60. package/dist/protocol/view-name.js +23 -0
  61. package/dist/protocol/view-name.js.map +1 -0
  62. package/dist/request-context.d.ts +4 -33
  63. package/dist/request-context.d.ts.map +1 -1
  64. package/dist/request-context.js +11 -43
  65. package/dist/request-context.js.map +1 -1
  66. package/dist/server.d.ts +19 -39
  67. package/dist/server.d.ts.map +1 -1
  68. package/dist/server.js +28 -32
  69. package/dist/server.js.map +1 -1
  70. package/dist/testing/glossary.d.ts +4 -32
  71. package/dist/testing/glossary.d.ts.map +1 -1
  72. package/dist/testing/glossary.js +6 -30
  73. package/dist/testing/glossary.js.map +1 -1
  74. package/dist/testing/index.d.ts +1 -38
  75. package/dist/testing/index.d.ts.map +1 -1
  76. package/dist/testing/index.js +1 -38
  77. package/dist/testing/index.js.map +1 -1
  78. package/dist/tool-errors.d.ts +16 -0
  79. package/dist/tool-errors.d.ts.map +1 -0
  80. package/dist/tool-errors.js +23 -0
  81. package/dist/tool-errors.js.map +1 -0
  82. package/dist/tool-registrar.d.ts +29 -0
  83. package/dist/tool-registrar.d.ts.map +1 -0
  84. package/dist/tool-registrar.js +47 -0
  85. package/dist/tool-registrar.js.map +1 -0
  86. package/dist/tool-registration.d.ts +35 -0
  87. package/dist/tool-registration.d.ts.map +1 -0
  88. package/dist/tool-registration.js +80 -0
  89. package/dist/tool-registration.js.map +1 -0
  90. package/dist/tool-schema-trim.d.ts +1 -15
  91. package/dist/tool-schema-trim.d.ts.map +1 -1
  92. package/dist/tool-schema-trim.js +1 -16
  93. package/dist/tool-schema-trim.js.map +1 -1
  94. package/dist/toolsets.d.ts +10 -56
  95. package/dist/toolsets.d.ts.map +1 -1
  96. package/dist/toolsets.js +2 -10
  97. package/dist/toolsets.js.map +1 -1
  98. package/dist/ui/action-feedback.d.ts +4 -26
  99. package/dist/ui/action-feedback.d.ts.map +1 -1
  100. package/dist/ui/action-feedback.js +5 -19
  101. package/dist/ui/action-feedback.js.map +1 -1
  102. package/dist/ui/ask-ai-button.d.ts +6 -43
  103. package/dist/ui/ask-ai-button.d.ts.map +1 -1
  104. package/dist/ui/ask-ai-button.js +6 -18
  105. package/dist/ui/ask-ai-button.js.map +1 -1
  106. package/dist/ui/ask-ai-prompt.d.ts +6 -82
  107. package/dist/ui/ask-ai-prompt.d.ts.map +1 -1
  108. package/dist/ui/ask-ai-prompt.js +10 -77
  109. package/dist/ui/ask-ai-prompt.js.map +1 -1
  110. package/dist/ui/bpmn-tokens.d.ts +3 -48
  111. package/dist/ui/bpmn-tokens.d.ts.map +1 -1
  112. package/dist/ui/bpmn-tokens.js +3 -46
  113. package/dist/ui/bpmn-tokens.js.map +1 -1
  114. package/dist/ui/bpmn-zoom-controls.d.ts +4 -17
  115. package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -1
  116. package/dist/ui/bpmn-zoom-controls.js +2 -16
  117. package/dist/ui/bpmn-zoom-controls.js.map +1 -1
  118. package/dist/ui/call-observer.d.ts +35 -0
  119. package/dist/ui/call-observer.d.ts.map +1 -0
  120. package/dist/ui/call-observer.js +86 -0
  121. package/dist/ui/call-observer.js.map +1 -0
  122. package/dist/ui/confirm-dialog.d.ts +4 -31
  123. package/dist/ui/confirm-dialog.d.ts.map +1 -1
  124. package/dist/ui/confirm-dialog.js +4 -27
  125. package/dist/ui/confirm-dialog.js.map +1 -1
  126. package/dist/ui/count-tone.d.ts +3 -17
  127. package/dist/ui/count-tone.d.ts.map +1 -1
  128. package/dist/ui/count-tone.js +2 -16
  129. package/dist/ui/count-tone.js.map +1 -1
  130. package/dist/ui/declare-served-fonts.d.ts +4 -10
  131. package/dist/ui/declare-served-fonts.d.ts.map +1 -1
  132. package/dist/ui/declare-served-fonts.js +6 -13
  133. package/dist/ui/declare-served-fonts.js.map +1 -1
  134. package/dist/ui/describe-error.d.ts +5 -47
  135. package/dist/ui/describe-error.d.ts.map +1 -1
  136. package/dist/ui/describe-error.js +8 -45
  137. package/dist/ui/describe-error.js.map +1 -1
  138. package/dist/ui/display-mode-toggle.d.ts +3 -16
  139. package/dist/ui/display-mode-toggle.d.ts.map +1 -1
  140. package/dist/ui/display-mode-toggle.js +6 -15
  141. package/dist/ui/display-mode-toggle.js.map +1 -1
  142. package/dist/ui/error-labels.d.ts +3 -19
  143. package/dist/ui/error-labels.d.ts.map +1 -1
  144. package/dist/ui/error-labels.js +0 -1
  145. package/dist/ui/error-labels.js.map +1 -1
  146. package/dist/ui/hand-off-button.d.ts +3 -18
  147. package/dist/ui/hand-off-button.d.ts.map +1 -1
  148. package/dist/ui/hand-off-button.js +3 -18
  149. package/dist/ui/hand-off-button.js.map +1 -1
  150. package/dist/ui/host-context.d.ts +13 -50
  151. package/dist/ui/host-context.d.ts.map +1 -1
  152. package/dist/ui/host-context.js +20 -51
  153. package/dist/ui/host-context.js.map +1 -1
  154. package/dist/ui/host-contexts.d.ts +19 -0
  155. package/dist/ui/host-contexts.d.ts.map +1 -0
  156. package/dist/ui/host-contexts.js +31 -0
  157. package/dist/ui/host-contexts.js.map +1 -0
  158. package/dist/ui/host-document.d.ts +3 -18
  159. package/dist/ui/host-document.d.ts.map +1 -1
  160. package/dist/ui/host-document.js +7 -25
  161. package/dist/ui/host-document.js.map +1 -1
  162. package/dist/ui/host-widgets.d.ts +21 -4
  163. package/dist/ui/host-widgets.d.ts.map +1 -1
  164. package/dist/ui/host-widgets.js +19 -11
  165. package/dist/ui/host-widgets.js.map +1 -1
  166. package/dist/ui/id-text.d.ts +1 -17
  167. package/dist/ui/id-text.d.ts.map +1 -1
  168. package/dist/ui/id-text.js +5 -26
  169. package/dist/ui/id-text.js.map +1 -1
  170. package/dist/ui/index.d.ts +24 -43
  171. package/dist/ui/index.d.ts.map +1 -1
  172. package/dist/ui/index.js +36 -51
  173. package/dist/ui/index.js.map +1 -1
  174. package/dist/ui/inline-budget.d.ts +2 -16
  175. package/dist/ui/inline-budget.d.ts.map +1 -1
  176. package/dist/ui/inline-budget.js +1 -8
  177. package/dist/ui/inline-budget.js.map +1 -1
  178. package/dist/ui/inline-fit-registry.d.ts +4 -31
  179. package/dist/ui/inline-fit-registry.d.ts.map +1 -1
  180. package/dist/ui/inline-fit-registry.js +9 -27
  181. package/dist/ui/inline-fit-registry.js.map +1 -1
  182. package/dist/ui/inline-fit-solve.d.ts +5 -27
  183. package/dist/ui/inline-fit-solve.d.ts.map +1 -1
  184. package/dist/ui/inline-fit-solve.js +4 -23
  185. package/dist/ui/inline-fit-solve.js.map +1 -1
  186. package/dist/ui/inline-fit.d.ts +4 -53
  187. package/dist/ui/inline-fit.d.ts.map +1 -1
  188. package/dist/ui/inline-fit.js +16 -62
  189. package/dist/ui/inline-fit.js.map +1 -1
  190. package/dist/ui/kit-labels.d.ts +12 -51
  191. package/dist/ui/kit-labels.d.ts.map +1 -1
  192. package/dist/ui/kit-labels.js +18 -28
  193. package/dist/ui/kit-labels.js.map +1 -1
  194. package/dist/ui/list-table.d.ts +15 -69
  195. package/dist/ui/list-table.d.ts.map +1 -1
  196. package/dist/ui/list-table.js +11 -69
  197. package/dist/ui/list-table.js.map +1 -1
  198. package/dist/ui/locale-gate.d.ts +11 -0
  199. package/dist/ui/locale-gate.d.ts.map +1 -0
  200. package/dist/ui/locale-gate.js +53 -0
  201. package/dist/ui/locale-gate.js.map +1 -0
  202. package/dist/ui/mcp-use-host.d.ts +20 -0
  203. package/dist/ui/mcp-use-host.d.ts.map +1 -0
  204. package/dist/ui/mcp-use-host.js +162 -0
  205. package/dist/ui/mcp-use-host.js.map +1 -0
  206. package/dist/ui/open-in-cockpit-link.d.ts +2 -21
  207. package/dist/ui/open-in-cockpit-link.d.ts.map +1 -1
  208. package/dist/ui/open-in-cockpit-link.js +5 -20
  209. package/dist/ui/open-in-cockpit-link.js.map +1 -1
  210. package/dist/ui/paged-rows.d.ts +3 -14
  211. package/dist/ui/paged-rows.d.ts.map +1 -1
  212. package/dist/ui/paged-rows.js +4 -14
  213. package/dist/ui/paged-rows.js.map +1 -1
  214. package/dist/ui/query-fallback.d.ts +2 -16
  215. package/dist/ui/query-fallback.d.ts.map +1 -1
  216. package/dist/ui/query-fallback.js +2 -14
  217. package/dist/ui/query-fallback.js.map +1 -1
  218. package/dist/ui/shell-host.d.ts +13 -23
  219. package/dist/ui/shell-host.d.ts.map +1 -1
  220. package/dist/ui/shell-host.js +1 -46
  221. package/dist/ui/shell-host.js.map +1 -1
  222. package/dist/ui/test-view-host.d.ts +51 -0
  223. package/dist/ui/test-view-host.d.ts.map +1 -0
  224. package/dist/ui/test-view-host.js +72 -0
  225. package/dist/ui/test-view-host.js.map +1 -0
  226. package/dist/ui/tool-query.d.ts +41 -0
  227. package/dist/ui/tool-query.d.ts.map +1 -0
  228. package/dist/ui/tool-query.js +128 -0
  229. package/dist/ui/tool-query.js.map +1 -0
  230. package/dist/ui/use-apply-theme.d.ts +1 -8
  231. package/dist/ui/use-apply-theme.d.ts.map +1 -1
  232. package/dist/ui/use-apply-theme.js +1 -8
  233. package/dist/ui/use-apply-theme.js.map +1 -1
  234. package/dist/ui/use-bpmn-viewer.d.ts +39 -73
  235. package/dist/ui/use-bpmn-viewer.d.ts.map +1 -1
  236. package/dist/ui/use-bpmn-viewer.js +18 -66
  237. package/dist/ui/use-bpmn-viewer.js.map +1 -1
  238. package/dist/ui/use-detail-view.d.ts +4 -26
  239. package/dist/ui/use-detail-view.d.ts.map +1 -1
  240. package/dist/ui/use-detail-view.js +7 -28
  241. package/dist/ui/use-detail-view.js.map +1 -1
  242. package/dist/ui/use-paged-list-view.d.ts +5 -25
  243. package/dist/ui/use-paged-list-view.d.ts.map +1 -1
  244. package/dist/ui/use-paged-list-view.js +5 -14
  245. package/dist/ui/use-paged-list-view.js.map +1 -1
  246. package/dist/ui/use-paged-view-data.d.ts +11 -66
  247. package/dist/ui/use-paged-view-data.d.ts.map +1 -1
  248. package/dist/ui/use-paged-view-data.js +20 -53
  249. package/dist/ui/use-paged-view-data.js.map +1 -1
  250. package/dist/ui/view-call.d.ts +66 -0
  251. package/dist/ui/view-call.d.ts.map +1 -0
  252. package/dist/ui/view-call.js +63 -0
  253. package/dist/ui/view-call.js.map +1 -0
  254. package/dist/ui/view-data-state.d.ts +1 -31
  255. package/dist/ui/view-data-state.d.ts.map +1 -1
  256. package/dist/ui/view-data-state.js +3 -32
  257. package/dist/ui/view-data-state.js.map +1 -1
  258. package/dist/ui/view-error-boundary.d.ts +24 -0
  259. package/dist/ui/view-error-boundary.d.ts.map +1 -0
  260. package/dist/ui/view-error-boundary.js +33 -0
  261. package/dist/ui/view-error-boundary.js.map +1 -0
  262. package/dist/ui/view-frame.d.ts +15 -0
  263. package/dist/ui/view-frame.d.ts.map +1 -0
  264. package/dist/ui/view-frame.js +72 -0
  265. package/dist/ui/view-frame.js.map +1 -0
  266. package/dist/ui/view-host.d.ts +35 -0
  267. package/dist/ui/view-host.d.ts.map +1 -0
  268. package/dist/ui/view-host.js +18 -0
  269. package/dist/ui/view-host.js.map +1 -0
  270. package/dist/ui/view-meta.d.ts +6 -29
  271. package/dist/ui/view-meta.d.ts.map +1 -1
  272. package/dist/ui/view-meta.js +2 -13
  273. package/dist/ui/view-meta.js.map +1 -1
  274. package/dist/ui/view-refresh-state.d.ts +4 -18
  275. package/dist/ui/view-refresh-state.d.ts.map +1 -1
  276. package/dist/ui/view-refresh-state.js +1 -7
  277. package/dist/ui/view-refresh-state.js.map +1 -1
  278. package/dist/ui/view-root.d.ts +26 -0
  279. package/dist/ui/view-root.d.ts.map +1 -0
  280. package/dist/ui/view-root.js +48 -0
  281. package/dist/ui/view-root.js.map +1 -0
  282. package/dist/ui/views.d.ts +17 -0
  283. package/dist/ui/views.d.ts.map +1 -0
  284. package/dist/ui/views.js +11 -0
  285. package/dist/ui/views.js.map +1 -0
  286. package/dist/ui/widget-shell.d.ts +1 -13
  287. package/dist/ui/widget-shell.d.ts.map +1 -1
  288. package/dist/ui/widget-shell.js +5 -30
  289. package/dist/ui/widget-shell.js.map +1 -1
  290. package/dist/view-bundle.d.ts +15 -0
  291. package/dist/view-bundle.d.ts.map +1 -0
  292. package/dist/view-bundle.js +23 -0
  293. package/dist/view-bundle.js.map +1 -0
  294. package/dist/view-results.d.ts +12 -23
  295. package/dist/view-results.d.ts.map +1 -1
  296. package/dist/view-results.js +14 -11
  297. package/dist/view-results.js.map +1 -1
  298. package/dist/widget-tool-bindings.d.ts +19 -48
  299. package/dist/widget-tool-bindings.d.ts.map +1 -1
  300. package/dist/widget-tool-bindings.js +21 -49
  301. package/dist/widget-tool-bindings.js.map +1 -1
  302. package/package.json +24 -36
  303. package/dist/adapt-data-widget.d.ts +0 -7
  304. package/dist/adapt-data-widget.d.ts.map +0 -1
  305. package/dist/adapt-data-widget.js +0 -7
  306. package/dist/adapt-data-widget.js.map +0 -1
  307. package/dist/bpmn-names.d.ts +0 -42
  308. package/dist/bpmn-names.d.ts.map +0 -1
  309. package/dist/bpmn-names.js.map +0 -1
  310. package/dist/bpmn-names.test.d.ts +0 -2
  311. package/dist/bpmn-names.test.d.ts.map +0 -1
  312. package/dist/bpmn-names.test.js +0 -143
  313. package/dist/bpmn-names.test.js.map +0 -1
  314. package/dist/build-data-feed-result.test.d.ts +0 -2
  315. package/dist/build-data-feed-result.test.d.ts.map +0 -1
  316. package/dist/build-data-feed-result.test.js +0 -28
  317. package/dist/build-data-feed-result.test.js.map +0 -1
  318. package/dist/build-single-widget-view.test.d.ts +0 -2
  319. package/dist/build-single-widget-view.test.d.ts.map +0 -1
  320. package/dist/build-single-widget-view.test.js +0 -136
  321. package/dist/build-single-widget-view.test.js.map +0 -1
  322. package/dist/builder-texts.d.ts +0 -27
  323. package/dist/builder-texts.d.ts.map +0 -1
  324. package/dist/builder-texts.js +0 -32
  325. package/dist/builder-texts.js.map +0 -1
  326. package/dist/builder-texts.test.d.ts +0 -2
  327. package/dist/builder-texts.test.d.ts.map +0 -1
  328. package/dist/builder-texts.test.js +0 -54
  329. package/dist/builder-texts.test.js.map +0 -1
  330. package/dist/catalogue-sync.d.ts +0 -18
  331. package/dist/catalogue-sync.d.ts.map +0 -1
  332. package/dist/catalogue-sync.js +0 -31
  333. package/dist/catalogue-sync.js.map +0 -1
  334. package/dist/catalogue-sync.test.d.ts +0 -2
  335. package/dist/catalogue-sync.test.d.ts.map +0 -1
  336. package/dist/catalogue-sync.test.js +0 -22
  337. package/dist/catalogue-sync.test.js.map +0 -1
  338. package/dist/composed-server.edge.test.d.ts +0 -2
  339. package/dist/composed-server.edge.test.d.ts.map +0 -1
  340. package/dist/composed-server.edge.test.js +0 -184
  341. package/dist/composed-server.edge.test.js.map +0 -1
  342. package/dist/composed-server.fonts.test.d.ts +0 -2
  343. package/dist/composed-server.fonts.test.d.ts.map +0 -1
  344. package/dist/composed-server.fonts.test.js +0 -186
  345. package/dist/composed-server.fonts.test.js.map +0 -1
  346. package/dist/composed-server.test.d.ts +0 -2
  347. package/dist/composed-server.test.d.ts.map +0 -1
  348. package/dist/composed-server.test.js +0 -332
  349. package/dist/composed-server.test.js.map +0 -1
  350. package/dist/composition.test.d.ts +0 -2
  351. package/dist/composition.test.d.ts.map +0 -1
  352. package/dist/composition.test.js +0 -275
  353. package/dist/composition.test.js.map +0 -1
  354. package/dist/dashboard-store-postgres.d.ts +0 -43
  355. package/dist/dashboard-store-postgres.d.ts.map +0 -1
  356. package/dist/dashboard-store-postgres.js +0 -225
  357. package/dist/dashboard-store-postgres.js.map +0 -1
  358. package/dist/dashboard-store-postgres.test.d.ts +0 -2
  359. package/dist/dashboard-store-postgres.test.d.ts.map +0 -1
  360. package/dist/dashboard-store-postgres.test.js +0 -272
  361. package/dist/dashboard-store-postgres.test.js.map +0 -1
  362. package/dist/font-assets.test.d.ts +0 -2
  363. package/dist/font-assets.test.d.ts.map +0 -1
  364. package/dist/font-assets.test.js +0 -123
  365. package/dist/font-assets.test.js.map +0 -1
  366. package/dist/health.test.d.ts +0 -2
  367. package/dist/health.test.d.ts.map +0 -1
  368. package/dist/health.test.js +0 -140
  369. package/dist/health.test.js.map +0 -1
  370. package/dist/host-boot.test.d.ts +0 -2
  371. package/dist/host-boot.test.d.ts.map +0 -1
  372. package/dist/host-boot.test.js +0 -59
  373. package/dist/host-boot.test.js.map +0 -1
  374. package/dist/http-edge.test.d.ts +0 -2
  375. package/dist/http-edge.test.d.ts.map +0 -1
  376. package/dist/http-edge.test.js +0 -255
  377. package/dist/http-edge.test.js.map +0 -1
  378. package/dist/metrics.test.d.ts +0 -2
  379. package/dist/metrics.test.d.ts.map +0 -1
  380. package/dist/metrics.test.js +0 -154
  381. package/dist/metrics.test.js.map +0 -1
  382. package/dist/node-listener.test.d.ts +0 -2
  383. package/dist/node-listener.test.d.ts.map +0 -1
  384. package/dist/node-listener.test.js +0 -331
  385. package/dist/node-listener.test.js.map +0 -1
  386. package/dist/oauth-env.test.d.ts +0 -2
  387. package/dist/oauth-env.test.d.ts.map +0 -1
  388. package/dist/oauth-env.test.js +0 -76
  389. package/dist/oauth-env.test.js.map +0 -1
  390. package/dist/postgres.d.ts +0 -59
  391. package/dist/postgres.d.ts.map +0 -1
  392. package/dist/postgres.js +0 -80
  393. package/dist/postgres.js.map +0 -1
  394. package/dist/profile-advisory.d.ts +0 -19
  395. package/dist/profile-advisory.d.ts.map +0 -1
  396. package/dist/profile-advisory.js +0 -48
  397. package/dist/profile-advisory.js.map +0 -1
  398. package/dist/profile-advisory.test.d.ts +0 -2
  399. package/dist/profile-advisory.test.d.ts.map +0 -1
  400. package/dist/profile-advisory.test.js +0 -53
  401. package/dist/profile-advisory.test.js.map +0 -1
  402. package/dist/profile-constants.d.ts +0 -37
  403. package/dist/profile-constants.d.ts.map +0 -1
  404. package/dist/profile-constants.js +0 -37
  405. package/dist/profile-constants.js.map +0 -1
  406. package/dist/profile-migrations.d.ts +0 -71
  407. package/dist/profile-migrations.d.ts.map +0 -1
  408. package/dist/profile-migrations.js +0 -88
  409. package/dist/profile-migrations.js.map +0 -1
  410. package/dist/profile-migrations.test.d.ts +0 -2
  411. package/dist/profile-migrations.test.d.ts.map +0 -1
  412. package/dist/profile-migrations.test.js +0 -200
  413. package/dist/profile-migrations.test.js.map +0 -1
  414. package/dist/profile-record.d.ts +0 -60
  415. package/dist/profile-record.d.ts.map +0 -1
  416. package/dist/profile-record.js +0 -78
  417. package/dist/profile-record.js.map +0 -1
  418. package/dist/profile-slice.d.ts +0 -53
  419. package/dist/profile-slice.d.ts.map +0 -1
  420. package/dist/profile-slice.js +0 -73
  421. package/dist/profile-slice.js.map +0 -1
  422. package/dist/profile-slice.test.d.ts +0 -2
  423. package/dist/profile-slice.test.d.ts.map +0 -1
  424. package/dist/profile-slice.test.js +0 -73
  425. package/dist/profile-slice.test.js.map +0 -1
  426. package/dist/profile-store-env.d.ts +0 -34
  427. package/dist/profile-store-env.d.ts.map +0 -1
  428. package/dist/profile-store-env.js +0 -44
  429. package/dist/profile-store-env.js.map +0 -1
  430. package/dist/profile-store-env.test.d.ts +0 -2
  431. package/dist/profile-store-env.test.d.ts.map +0 -1
  432. package/dist/profile-store-env.test.js +0 -69
  433. package/dist/profile-store-env.test.js.map +0 -1
  434. package/dist/profile-store-postgres.d.ts +0 -33
  435. package/dist/profile-store-postgres.d.ts.map +0 -1
  436. package/dist/profile-store-postgres.js +0 -87
  437. package/dist/profile-store-postgres.js.map +0 -1
  438. package/dist/profile-store-raw.test.d.ts +0 -2
  439. package/dist/profile-store-raw.test.d.ts.map +0 -1
  440. package/dist/profile-store-raw.test.js +0 -185
  441. package/dist/profile-store-raw.test.js.map +0 -1
  442. package/dist/profile-store.d.ts +0 -85
  443. package/dist/profile-store.d.ts.map +0 -1
  444. package/dist/profile-store.js +0 -182
  445. package/dist/profile-store.js.map +0 -1
  446. package/dist/profile-store.test.d.ts +0 -2
  447. package/dist/profile-store.test.d.ts.map +0 -1
  448. package/dist/profile-store.test.js +0 -353
  449. package/dist/profile-store.test.js.map +0 -1
  450. package/dist/profile.d.ts +0 -75
  451. package/dist/profile.d.ts.map +0 -1
  452. package/dist/profile.js +0 -85
  453. package/dist/profile.js.map +0 -1
  454. package/dist/profile.test.d.ts +0 -2
  455. package/dist/profile.test.d.ts.map +0 -1
  456. package/dist/profile.test.js +0 -71
  457. package/dist/profile.test.js.map +0 -1
  458. package/dist/request-context.test.d.ts +0 -2
  459. package/dist/request-context.test.d.ts.map +0 -1
  460. package/dist/request-context.test.js +0 -107
  461. package/dist/request-context.test.js.map +0 -1
  462. package/dist/served-fonts.d.ts +0 -38
  463. package/dist/served-fonts.d.ts.map +0 -1
  464. package/dist/served-fonts.js +0 -51
  465. package/dist/served-fonts.js.map +0 -1
  466. package/dist/served-fonts.test.d.ts +0 -2
  467. package/dist/served-fonts.test.d.ts.map +0 -1
  468. package/dist/served-fonts.test.js +0 -30
  469. package/dist/served-fonts.test.js.map +0 -1
  470. package/dist/server-locale.d.ts +0 -58
  471. package/dist/server-locale.d.ts.map +0 -1
  472. package/dist/server-locale.js +0 -64
  473. package/dist/server-locale.js.map +0 -1
  474. package/dist/server-locale.test.d.ts +0 -2
  475. package/dist/server-locale.test.d.ts.map +0 -1
  476. package/dist/server-locale.test.js +0 -90
  477. package/dist/server-locale.test.js.map +0 -1
  478. package/dist/shell-catalogue.d.ts +0 -12
  479. package/dist/shell-catalogue.d.ts.map +0 -1
  480. package/dist/shell-catalogue.js +0 -142
  481. package/dist/shell-catalogue.js.map +0 -1
  482. package/dist/shell-settings-contract.d.ts +0 -34
  483. package/dist/shell-settings-contract.d.ts.map +0 -1
  484. package/dist/shell-settings-contract.js +0 -21
  485. package/dist/shell-settings-contract.js.map +0 -1
  486. package/dist/shell-settings.d.ts +0 -24
  487. package/dist/shell-settings.d.ts.map +0 -1
  488. package/dist/shell-settings.js +0 -148
  489. package/dist/shell-settings.js.map +0 -1
  490. package/dist/shell-settings.test.d.ts +0 -2
  491. package/dist/shell-settings.test.d.ts.map +0 -1
  492. package/dist/shell-settings.test.js +0 -115
  493. package/dist/shell-settings.test.js.map +0 -1
  494. package/dist/testing/catalog-text.d.ts +0 -53
  495. package/dist/testing/catalog-text.d.ts.map +0 -1
  496. package/dist/testing/catalog-text.js +0 -146
  497. package/dist/testing/catalog-text.js.map +0 -1
  498. package/dist/testing/catalog-text.test.d.ts +0 -2
  499. package/dist/testing/catalog-text.test.d.ts.map +0 -1
  500. package/dist/testing/catalog-text.test.js +0 -137
  501. package/dist/testing/catalog-text.test.js.map +0 -1
  502. package/dist/testing/colors.d.ts +0 -34
  503. package/dist/testing/colors.d.ts.map +0 -1
  504. package/dist/testing/colors.js +0 -124
  505. package/dist/testing/colors.js.map +0 -1
  506. package/dist/testing/colors.test.d.ts +0 -2
  507. package/dist/testing/colors.test.d.ts.map +0 -1
  508. package/dist/testing/colors.test.js +0 -166
  509. package/dist/testing/colors.test.js.map +0 -1
  510. package/dist/testing/contrast.d.ts +0 -77
  511. package/dist/testing/contrast.d.ts.map +0 -1
  512. package/dist/testing/contrast.js +0 -382
  513. package/dist/testing/contrast.js.map +0 -1
  514. package/dist/testing/contrast.test.d.ts +0 -2
  515. package/dist/testing/contrast.test.d.ts.map +0 -1
  516. package/dist/testing/contrast.test.js +0 -230
  517. package/dist/testing/contrast.test.js.map +0 -1
  518. package/dist/testing/display-texts.d.ts +0 -23
  519. package/dist/testing/display-texts.d.ts.map +0 -1
  520. package/dist/testing/display-texts.js +0 -88
  521. package/dist/testing/display-texts.js.map +0 -1
  522. package/dist/testing/display-texts.test.d.ts +0 -2
  523. package/dist/testing/display-texts.test.d.ts.map +0 -1
  524. package/dist/testing/display-texts.test.js +0 -169
  525. package/dist/testing/display-texts.test.js.map +0 -1
  526. package/dist/testing/glossary.test.d.ts +0 -2
  527. package/dist/testing/glossary.test.d.ts.map +0 -1
  528. package/dist/testing/glossary.test.js +0 -78
  529. package/dist/testing/glossary.test.js.map +0 -1
  530. package/dist/testing/glyphs.d.ts +0 -27
  531. package/dist/testing/glyphs.d.ts.map +0 -1
  532. package/dist/testing/glyphs.js +0 -130
  533. package/dist/testing/glyphs.js.map +0 -1
  534. package/dist/testing/glyphs.test.d.ts +0 -2
  535. package/dist/testing/glyphs.test.d.ts.map +0 -1
  536. package/dist/testing/glyphs.test.js +0 -146
  537. package/dist/testing/glyphs.test.js.map +0 -1
  538. package/dist/testing/icon-sizes.d.ts +0 -22
  539. package/dist/testing/icon-sizes.d.ts.map +0 -1
  540. package/dist/testing/icon-sizes.js +0 -39
  541. package/dist/testing/icon-sizes.js.map +0 -1
  542. package/dist/testing/icon-sizes.test.d.ts +0 -2
  543. package/dist/testing/icon-sizes.test.d.ts.map +0 -1
  544. package/dist/testing/icon-sizes.test.js +0 -36
  545. package/dist/testing/icon-sizes.test.js.map +0 -1
  546. package/dist/testing/source-scan.d.ts +0 -16
  547. package/dist/testing/source-scan.d.ts.map +0 -1
  548. package/dist/testing/source-scan.js +0 -57
  549. package/dist/testing/source-scan.js.map +0 -1
  550. package/dist/testing/tone-pairs.d.ts +0 -20
  551. package/dist/testing/tone-pairs.d.ts.map +0 -1
  552. package/dist/testing/tone-pairs.js +0 -154
  553. package/dist/testing/tone-pairs.js.map +0 -1
  554. package/dist/testing/type-scale.d.ts +0 -40
  555. package/dist/testing/type-scale.d.ts.map +0 -1
  556. package/dist/testing/type-scale.js +0 -55
  557. package/dist/testing/type-scale.js.map +0 -1
  558. package/dist/testing/type-scale.test.d.ts +0 -2
  559. package/dist/testing/type-scale.test.d.ts.map +0 -1
  560. package/dist/testing/type-scale.test.js +0 -61
  561. package/dist/testing/type-scale.test.js.map +0 -1
  562. package/dist/tool-schema-trim.test.d.ts +0 -2
  563. package/dist/tool-schema-trim.test.d.ts.map +0 -1
  564. package/dist/tool-schema-trim.test.js +0 -53
  565. package/dist/tool-schema-trim.test.js.map +0 -1
  566. package/dist/toolsets.test.d.ts +0 -2
  567. package/dist/toolsets.test.d.ts.map +0 -1
  568. package/dist/toolsets.test.js +0 -86
  569. package/dist/toolsets.test.js.map +0 -1
  570. package/dist/ui/action-feedback.test.d.ts +0 -2
  571. package/dist/ui/action-feedback.test.d.ts.map +0 -1
  572. package/dist/ui/action-feedback.test.js +0 -77
  573. package/dist/ui/action-feedback.test.js.map +0 -1
  574. package/dist/ui/app-shell-providers.d.ts +0 -18
  575. package/dist/ui/app-shell-providers.d.ts.map +0 -1
  576. package/dist/ui/app-shell-providers.js +0 -19
  577. package/dist/ui/app-shell-providers.js.map +0 -1
  578. package/dist/ui/app-shell-providers.test.d.ts +0 -2
  579. package/dist/ui/app-shell-providers.test.d.ts.map +0 -1
  580. package/dist/ui/app-shell-providers.test.js +0 -249
  581. package/dist/ui/app-shell-providers.test.js.map +0 -1
  582. package/dist/ui/ask-ai-button.test.d.ts +0 -2
  583. package/dist/ui/ask-ai-button.test.d.ts.map +0 -1
  584. package/dist/ui/ask-ai-button.test.js +0 -103
  585. package/dist/ui/ask-ai-button.test.js.map +0 -1
  586. package/dist/ui/ask-ai-prompt.test.d.ts +0 -2
  587. package/dist/ui/ask-ai-prompt.test.d.ts.map +0 -1
  588. package/dist/ui/ask-ai-prompt.test.js +0 -240
  589. package/dist/ui/ask-ai-prompt.test.js.map +0 -1
  590. package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +0 -2
  591. package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +0 -1
  592. package/dist/ui/bpmn-heatmap/heat-ramp.test.js +0 -174
  593. package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +0 -1
  594. package/dist/ui/bpmn-heatmap/heat-utils.d.ts +0 -119
  595. package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +0 -1
  596. package/dist/ui/bpmn-heatmap/heat-utils.js +0 -231
  597. package/dist/ui/bpmn-heatmap/heat-utils.js.map +0 -1
  598. package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +0 -2
  599. package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +0 -1
  600. package/dist/ui/bpmn-heatmap/heat-utils.test.js +0 -59
  601. package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +0 -1
  602. package/dist/ui/bpmn-heatmap-labels.d.ts +0 -46
  603. package/dist/ui/bpmn-heatmap-labels.d.ts.map +0 -1
  604. package/dist/ui/bpmn-heatmap-labels.js +0 -16
  605. package/dist/ui/bpmn-heatmap-labels.js.map +0 -1
  606. package/dist/ui/bpmn-heatmap-widget.d.ts +0 -38
  607. package/dist/ui/bpmn-heatmap-widget.d.ts.map +0 -1
  608. package/dist/ui/bpmn-heatmap-widget.js +0 -65
  609. package/dist/ui/bpmn-heatmap-widget.js.map +0 -1
  610. package/dist/ui/bpmn-heatmap-widget.test.d.ts +0 -2
  611. package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +0 -1
  612. package/dist/ui/bpmn-heatmap-widget.test.js +0 -173
  613. package/dist/ui/bpmn-heatmap-widget.test.js.map +0 -1
  614. package/dist/ui/bpmn-heatmap.d.ts +0 -61
  615. package/dist/ui/bpmn-heatmap.d.ts.map +0 -1
  616. package/dist/ui/bpmn-heatmap.js +0 -119
  617. package/dist/ui/bpmn-heatmap.js.map +0 -1
  618. package/dist/ui/bpmn-tokens.test.d.ts +0 -2
  619. package/dist/ui/bpmn-tokens.test.d.ts.map +0 -1
  620. package/dist/ui/bpmn-tokens.test.js +0 -98
  621. package/dist/ui/bpmn-tokens.test.js.map +0 -1
  622. package/dist/ui/brand-gates.test.d.ts +0 -2
  623. package/dist/ui/brand-gates.test.d.ts.map +0 -1
  624. package/dist/ui/brand-gates.test.js +0 -131
  625. package/dist/ui/brand-gates.test.js.map +0 -1
  626. package/dist/ui/brand-mark.d.ts +0 -37
  627. package/dist/ui/brand-mark.d.ts.map +0 -1
  628. package/dist/ui/brand-mark.js +0 -33
  629. package/dist/ui/brand-mark.js.map +0 -1
  630. package/dist/ui/brand-mark.test.d.ts +0 -2
  631. package/dist/ui/brand-mark.test.d.ts.map +0 -1
  632. package/dist/ui/brand-mark.test.js +0 -111
  633. package/dist/ui/brand-mark.test.js.map +0 -1
  634. package/dist/ui/confirm-dialog.test.d.ts +0 -2
  635. package/dist/ui/confirm-dialog.test.d.ts.map +0 -1
  636. package/dist/ui/confirm-dialog.test.js +0 -115
  637. package/dist/ui/confirm-dialog.test.js.map +0 -1
  638. package/dist/ui/count-tone.test.d.ts +0 -2
  639. package/dist/ui/count-tone.test.d.ts.map +0 -1
  640. package/dist/ui/count-tone.test.js +0 -27
  641. package/dist/ui/count-tone.test.js.map +0 -1
  642. package/dist/ui/create-use-t.d.ts +0 -15
  643. package/dist/ui/create-use-t.d.ts.map +0 -1
  644. package/dist/ui/create-use-t.js +0 -17
  645. package/dist/ui/create-use-t.js.map +0 -1
  646. package/dist/ui/declare-served-fonts.test.d.ts +0 -2
  647. package/dist/ui/declare-served-fonts.test.d.ts.map +0 -1
  648. package/dist/ui/declare-served-fonts.test.js +0 -44
  649. package/dist/ui/declare-served-fonts.test.js.map +0 -1
  650. package/dist/ui/describe-error.test.d.ts +0 -2
  651. package/dist/ui/describe-error.test.d.ts.map +0 -1
  652. package/dist/ui/describe-error.test.js +0 -274
  653. package/dist/ui/describe-error.test.js.map +0 -1
  654. package/dist/ui/format.d.ts +0 -81
  655. package/dist/ui/format.d.ts.map +0 -1
  656. package/dist/ui/format.js +0 -189
  657. package/dist/ui/format.js.map +0 -1
  658. package/dist/ui/format.test.d.ts +0 -2
  659. package/dist/ui/format.test.d.ts.map +0 -1
  660. package/dist/ui/format.test.js +0 -181
  661. package/dist/ui/format.test.js.map +0 -1
  662. package/dist/ui/generic-widgets.d.ts +0 -15
  663. package/dist/ui/generic-widgets.d.ts.map +0 -1
  664. package/dist/ui/generic-widgets.js +0 -122
  665. package/dist/ui/generic-widgets.js.map +0 -1
  666. package/dist/ui/generic-widgets.test.d.ts +0 -2
  667. package/dist/ui/generic-widgets.test.d.ts.map +0 -1
  668. package/dist/ui/generic-widgets.test.js +0 -139
  669. package/dist/ui/generic-widgets.test.js.map +0 -1
  670. package/dist/ui/hand-off-button.test.d.ts +0 -2
  671. package/dist/ui/hand-off-button.test.d.ts.map +0 -1
  672. package/dist/ui/hand-off-button.test.js +0 -78
  673. package/dist/ui/hand-off-button.test.js.map +0 -1
  674. package/dist/ui/host-context.test.d.ts +0 -2
  675. package/dist/ui/host-context.test.d.ts.map +0 -1
  676. package/dist/ui/host-context.test.js +0 -160
  677. package/dist/ui/host-context.test.js.map +0 -1
  678. package/dist/ui/host-document.test.d.ts +0 -2
  679. package/dist/ui/host-document.test.d.ts.map +0 -1
  680. package/dist/ui/host-document.test.js +0 -112
  681. package/dist/ui/host-document.test.js.map +0 -1
  682. package/dist/ui/humanize-key.d.ts +0 -11
  683. package/dist/ui/humanize-key.d.ts.map +0 -1
  684. package/dist/ui/humanize-key.js +0 -26
  685. package/dist/ui/humanize-key.js.map +0 -1
  686. package/dist/ui/humanize-key.test.d.ts +0 -2
  687. package/dist/ui/humanize-key.test.d.ts.map +0 -1
  688. package/dist/ui/humanize-key.test.js +0 -42
  689. package/dist/ui/humanize-key.test.js.map +0 -1
  690. package/dist/ui/icon.d.ts +0 -37
  691. package/dist/ui/icon.d.ts.map +0 -1
  692. package/dist/ui/icon.js +0 -32
  693. package/dist/ui/icon.js.map +0 -1
  694. package/dist/ui/id-breaks.d.ts +0 -17
  695. package/dist/ui/id-breaks.d.ts.map +0 -1
  696. package/dist/ui/id-breaks.js +0 -36
  697. package/dist/ui/id-breaks.js.map +0 -1
  698. package/dist/ui/id-breaks.test.d.ts +0 -2
  699. package/dist/ui/id-breaks.test.d.ts.map +0 -1
  700. package/dist/ui/id-breaks.test.js +0 -37
  701. package/dist/ui/id-breaks.test.js.map +0 -1
  702. package/dist/ui/id-text.test.d.ts +0 -2
  703. package/dist/ui/id-text.test.d.ts.map +0 -1
  704. package/dist/ui/id-text.test.js +0 -122
  705. package/dist/ui/id-text.test.js.map +0 -1
  706. package/dist/ui/index.test.d.ts +0 -2
  707. package/dist/ui/index.test.d.ts.map +0 -1
  708. package/dist/ui/index.test.js +0 -34
  709. package/dist/ui/index.test.js.map +0 -1
  710. package/dist/ui/inline-fit-solve.test.d.ts +0 -2
  711. package/dist/ui/inline-fit-solve.test.d.ts.map +0 -1
  712. package/dist/ui/inline-fit-solve.test.js +0 -108
  713. package/dist/ui/inline-fit-solve.test.js.map +0 -1
  714. package/dist/ui/inline-fit-time.test.d.ts +0 -2
  715. package/dist/ui/inline-fit-time.test.d.ts.map +0 -1
  716. package/dist/ui/inline-fit-time.test.js +0 -110
  717. package/dist/ui/inline-fit-time.test.js.map +0 -1
  718. package/dist/ui/inline-fit.test-support.d.ts +0 -26
  719. package/dist/ui/inline-fit.test-support.d.ts.map +0 -1
  720. package/dist/ui/inline-fit.test-support.js +0 -34
  721. package/dist/ui/inline-fit.test-support.js.map +0 -1
  722. package/dist/ui/inline-fit.test.d.ts +0 -2
  723. package/dist/ui/inline-fit.test.d.ts.map +0 -1
  724. package/dist/ui/inline-fit.test.js +0 -159
  725. package/dist/ui/inline-fit.test.js.map +0 -1
  726. package/dist/ui/kit-labels.test.d.ts +0 -2
  727. package/dist/ui/kit-labels.test.d.ts.map +0 -1
  728. package/dist/ui/kit-labels.test.js +0 -98
  729. package/dist/ui/kit-labels.test.js.map +0 -1
  730. package/dist/ui/kit-type-roles.test.d.ts +0 -2
  731. package/dist/ui/kit-type-roles.test.d.ts.map +0 -1
  732. package/dist/ui/kit-type-roles.test.js +0 -122
  733. package/dist/ui/kit-type-roles.test.js.map +0 -1
  734. package/dist/ui/komet-svg.d.ts +0 -15
  735. package/dist/ui/komet-svg.d.ts.map +0 -1
  736. package/dist/ui/komet-svg.js +0 -21
  737. package/dist/ui/komet-svg.js.map +0 -1
  738. package/dist/ui/list-table.test.d.ts +0 -2
  739. package/dist/ui/list-table.test.d.ts.map +0 -1
  740. package/dist/ui/list-table.test.js +0 -169
  741. package/dist/ui/list-table.test.js.map +0 -1
  742. package/dist/ui/localized-app-view.d.ts +0 -40
  743. package/dist/ui/localized-app-view.d.ts.map +0 -1
  744. package/dist/ui/localized-app-view.js +0 -71
  745. package/dist/ui/localized-app-view.js.map +0 -1
  746. package/dist/ui/log-text.d.ts +0 -24
  747. package/dist/ui/log-text.d.ts.map +0 -1
  748. package/dist/ui/log-text.js +0 -31
  749. package/dist/ui/log-text.js.map +0 -1
  750. package/dist/ui/menu-item.d.ts +0 -12
  751. package/dist/ui/menu-item.d.ts.map +0 -1
  752. package/dist/ui/menu-item.js +0 -13
  753. package/dist/ui/menu-item.js.map +0 -1
  754. package/dist/ui/named-id.d.ts +0 -23
  755. package/dist/ui/named-id.d.ts.map +0 -1
  756. package/dist/ui/named-id.js +0 -21
  757. package/dist/ui/named-id.js.map +0 -1
  758. package/dist/ui/named-id.test.d.ts +0 -2
  759. package/dist/ui/named-id.test.d.ts.map +0 -1
  760. package/dist/ui/named-id.test.js +0 -57
  761. package/dist/ui/named-id.test.js.map +0 -1
  762. package/dist/ui/native-select.d.ts +0 -17
  763. package/dist/ui/native-select.d.ts.map +0 -1
  764. package/dist/ui/native-select.js +0 -20
  765. package/dist/ui/native-select.js.map +0 -1
  766. package/dist/ui/navigation-focus.d.ts +0 -20
  767. package/dist/ui/navigation-focus.d.ts.map +0 -1
  768. package/dist/ui/navigation-focus.js +0 -25
  769. package/dist/ui/navigation-focus.js.map +0 -1
  770. package/dist/ui/navigation-focus.test.d.ts +0 -2
  771. package/dist/ui/navigation-focus.test.d.ts.map +0 -1
  772. package/dist/ui/navigation-focus.test.js +0 -28
  773. package/dist/ui/navigation-focus.test.js.map +0 -1
  774. package/dist/ui/paged-list-footer.test.d.ts +0 -2
  775. package/dist/ui/paged-list-footer.test.d.ts.map +0 -1
  776. package/dist/ui/paged-list-footer.test.js +0 -128
  777. package/dist/ui/paged-list-footer.test.js.map +0 -1
  778. package/dist/ui/parse-tool-result.test.d.ts +0 -2
  779. package/dist/ui/parse-tool-result.test.d.ts.map +0 -1
  780. package/dist/ui/parse-tool-result.test.js +0 -88
  781. package/dist/ui/parse-tool-result.test.js.map +0 -1
  782. package/dist/ui/profile-gate.d.ts +0 -37
  783. package/dist/ui/profile-gate.d.ts.map +0 -1
  784. package/dist/ui/profile-gate.js +0 -126
  785. package/dist/ui/profile-gate.js.map +0 -1
  786. package/dist/ui/profile-gate.test.d.ts +0 -2
  787. package/dist/ui/profile-gate.test.d.ts.map +0 -1
  788. package/dist/ui/profile-gate.test.js +0 -246
  789. package/dist/ui/profile-gate.test.js.map +0 -1
  790. package/dist/ui/query-fallback.test.d.ts +0 -2
  791. package/dist/ui/query-fallback.test.d.ts.map +0 -1
  792. package/dist/ui/query-fallback.test.js +0 -49
  793. package/dist/ui/query-fallback.test.js.map +0 -1
  794. package/dist/ui/row-card.d.ts +0 -13
  795. package/dist/ui/row-card.d.ts.map +0 -1
  796. package/dist/ui/row-card.js +0 -11
  797. package/dist/ui/row-card.js.map +0 -1
  798. package/dist/ui/section.d.ts +0 -18
  799. package/dist/ui/section.d.ts.map +0 -1
  800. package/dist/ui/section.js +0 -14
  801. package/dist/ui/section.js.map +0 -1
  802. package/dist/ui/segmented-control.d.ts +0 -25
  803. package/dist/ui/segmented-control.d.ts.map +0 -1
  804. package/dist/ui/segmented-control.js +0 -22
  805. package/dist/ui/segmented-control.js.map +0 -1
  806. package/dist/ui/settings-labels.d.ts +0 -33
  807. package/dist/ui/settings-labels.d.ts.map +0 -1
  808. package/dist/ui/settings-labels.js +0 -50
  809. package/dist/ui/settings-labels.js.map +0 -1
  810. package/dist/ui/settings-layout.d.ts +0 -29
  811. package/dist/ui/settings-layout.d.ts.map +0 -1
  812. package/dist/ui/settings-layout.js +0 -49
  813. package/dist/ui/settings-layout.js.map +0 -1
  814. package/dist/ui/settings-layout.test.d.ts +0 -2
  815. package/dist/ui/settings-layout.test.d.ts.map +0 -1
  816. package/dist/ui/settings-layout.test.js +0 -73
  817. package/dist/ui/settings-layout.test.js.map +0 -1
  818. package/dist/ui/settings.d.ts +0 -47
  819. package/dist/ui/settings.d.ts.map +0 -1
  820. package/dist/ui/settings.js +0 -48
  821. package/dist/ui/settings.js.map +0 -1
  822. package/dist/ui/settings.test.d.ts +0 -2
  823. package/dist/ui/settings.test.d.ts.map +0 -1
  824. package/dist/ui/settings.test.js +0 -38
  825. package/dist/ui/settings.test.js.map +0 -1
  826. package/dist/ui/shell-settings.d.ts +0 -31
  827. package/dist/ui/shell-settings.d.ts.map +0 -1
  828. package/dist/ui/shell-settings.js +0 -97
  829. package/dist/ui/shell-settings.js.map +0 -1
  830. package/dist/ui/shell-settings.test.d.ts +0 -2
  831. package/dist/ui/shell-settings.test.d.ts.map +0 -1
  832. package/dist/ui/shell-settings.test.js +0 -108
  833. package/dist/ui/shell-settings.test.js.map +0 -1
  834. package/dist/ui/shell-widgets.d.ts +0 -14
  835. package/dist/ui/shell-widgets.d.ts.map +0 -1
  836. package/dist/ui/shell-widgets.js +0 -18
  837. package/dist/ui/shell-widgets.js.map +0 -1
  838. package/dist/ui/table.d.ts +0 -61
  839. package/dist/ui/table.d.ts.map +0 -1
  840. package/dist/ui/table.js +0 -43
  841. package/dist/ui/table.js.map +0 -1
  842. package/dist/ui/tone-components.test.d.ts +0 -2
  843. package/dist/ui/tone-components.test.d.ts.map +0 -1
  844. package/dist/ui/tone-components.test.js +0 -145
  845. package/dist/ui/tone-components.test.js.map +0 -1
  846. package/dist/ui/tone-contrast.test.d.ts +0 -2
  847. package/dist/ui/tone-contrast.test.d.ts.map +0 -1
  848. package/dist/ui/tone-contrast.test.js +0 -66
  849. package/dist/ui/tone-contrast.test.js.map +0 -1
  850. package/dist/ui/toolkit-overlap.test.d.ts +0 -2
  851. package/dist/ui/toolkit-overlap.test.d.ts.map +0 -1
  852. package/dist/ui/toolkit-overlap.test.js +0 -86
  853. package/dist/ui/toolkit-overlap.test.js.map +0 -1
  854. package/dist/ui/use-apply-theme.test.d.ts +0 -2
  855. package/dist/ui/use-apply-theme.test.d.ts.map +0 -1
  856. package/dist/ui/use-apply-theme.test.js +0 -102
  857. package/dist/ui/use-apply-theme.test.js.map +0 -1
  858. package/dist/ui/use-bpmn-viewer.test.d.ts +0 -2
  859. package/dist/ui/use-bpmn-viewer.test.d.ts.map +0 -1
  860. package/dist/ui/use-bpmn-viewer.test.js +0 -239
  861. package/dist/ui/use-bpmn-viewer.test.js.map +0 -1
  862. package/dist/ui/use-detail-view.test.d.ts +0 -2
  863. package/dist/ui/use-detail-view.test.d.ts.map +0 -1
  864. package/dist/ui/use-detail-view.test.js +0 -178
  865. package/dist/ui/use-detail-view.test.js.map +0 -1
  866. package/dist/ui/use-paged-list-view.test.d.ts +0 -2
  867. package/dist/ui/use-paged-list-view.test.d.ts.map +0 -1
  868. package/dist/ui/use-paged-list-view.test.js +0 -136
  869. package/dist/ui/use-paged-list-view.test.js.map +0 -1
  870. package/dist/ui/use-paged-view-data.seeded.test.d.ts +0 -2
  871. package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +0 -1
  872. package/dist/ui/use-paged-view-data.seeded.test.js +0 -144
  873. package/dist/ui/use-paged-view-data.seeded.test.js.map +0 -1
  874. package/dist/ui/use-paged-view-data.test.d.ts +0 -2
  875. package/dist/ui/use-paged-view-data.test.d.ts.map +0 -1
  876. package/dist/ui/use-paged-view-data.test.js +0 -330
  877. package/dist/ui/use-paged-view-data.test.js.map +0 -1
  878. package/dist/ui/use-reset-on-change.d.ts +0 -22
  879. package/dist/ui/use-reset-on-change.d.ts.map +0 -1
  880. package/dist/ui/use-reset-on-change.js +0 -29
  881. package/dist/ui/use-reset-on-change.js.map +0 -1
  882. package/dist/ui/use-reset-on-change.test.d.ts +0 -2
  883. package/dist/ui/use-reset-on-change.test.d.ts.map +0 -1
  884. package/dist/ui/use-reset-on-change.test.js +0 -61
  885. package/dist/ui/use-reset-on-change.test.js.map +0 -1
  886. package/dist/ui/use-view-data.seeded.test.d.ts +0 -2
  887. package/dist/ui/use-view-data.seeded.test.d.ts.map +0 -1
  888. package/dist/ui/use-view-data.seeded.test.js +0 -168
  889. package/dist/ui/use-view-data.seeded.test.js.map +0 -1
  890. package/dist/ui/view-data-state.test.d.ts +0 -2
  891. package/dist/ui/view-data-state.test.d.ts.map +0 -1
  892. package/dist/ui/view-data-state.test.js +0 -62
  893. package/dist/ui/view-data-state.test.js.map +0 -1
  894. package/dist/ui/view-meta.test.d.ts +0 -2
  895. package/dist/ui/view-meta.test.d.ts.map +0 -1
  896. package/dist/ui/view-meta.test.js +0 -92
  897. package/dist/ui/view-meta.test.js.map +0 -1
  898. package/dist/ui/widget-shell.test.d.ts +0 -2
  899. package/dist/ui/widget-shell.test.d.ts.map +0 -1
  900. package/dist/ui/widget-shell.test.js +0 -41
  901. package/dist/ui/widget-shell.test.js.map +0 -1
  902. package/dist/widget-meta-defaults.d.ts +0 -48
  903. package/dist/widget-meta-defaults.d.ts.map +0 -1
  904. package/dist/widget-meta-defaults.js +0 -80
  905. package/dist/widget-meta-defaults.js.map +0 -1
  906. package/dist/widget-meta-defaults.test.d.ts +0 -2
  907. package/dist/widget-meta-defaults.test.d.ts.map +0 -1
  908. package/dist/widget-meta-defaults.test.js +0 -196
  909. package/dist/widget-meta-defaults.test.js.map +0 -1
  910. package/dist/widget-tool-bindings.test.d.ts +0 -2
  911. package/dist/widget-tool-bindings.test.d.ts.map +0 -1
  912. package/dist/widget-tool-bindings.test.js +0 -83
  913. package/dist/widget-tool-bindings.test.js.map +0 -1
  914. package/dist/with-tool-errors.test.d.ts +0 -2
  915. package/dist/with-tool-errors.test.d.ts.map +0 -1
  916. package/dist/with-tool-errors.test.js +0 -38
  917. package/dist/with-tool-errors.test.js.map +0 -1
@@ -1,123 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from "vitest";
2
- import { FONT_CACHE_CONTROL, fontAssetsCsp, fontResponse, installFontAssets, loadServedFonts, servedFontPaths, } from "./font-assets.js";
3
- import { SERVED_FONT_FILES } from "./served-fonts.js";
4
- /** A woff2 file starts with the signature `wOF2`. */
5
- const WOFF2_SIGNATURE = [0x77, 0x4f, 0x46, 0x32];
6
- /** Records `server.get(path, handler)` like the health suite's fake host. */
7
- function fakeHost() {
8
- const routes = new Map();
9
- const host = {
10
- get: (path, handler) => {
11
- routes.set(path, handler);
12
- },
13
- };
14
- return { host, routes };
15
- }
16
- afterEach(() => {
17
- vi.restoreAllMocks();
18
- });
19
- describe("loadServedFonts", () => {
20
- it("reads Geist and Geist Mono (latin, variable) from the fontsource packages", () => {
21
- const fonts = loadServedFonts();
22
- expect(fonts.map((font) => font.file)).toEqual([
23
- "geist-latin-wght-normal.woff2",
24
- "geist-mono-latin-wght-normal.woff2",
25
- ]);
26
- for (const { file, body } of fonts) {
27
- expect([...body.subarray(0, 4)], file).toEqual(WOFF2_SIGNATURE);
28
- // Latin subsets, not the full families: tens of KB, not hundreds.
29
- expect(body.byteLength, file).toBeGreaterThan(10_000);
30
- expect(body.byteLength, file).toBeLessThan(60_000);
31
- }
32
- });
33
- it("finds each served file in its fontsource package under the name the views load", () => {
34
- const paths = servedFontPaths();
35
- expect(Object.keys(paths)).toEqual(Object.values(SERVED_FONT_FILES));
36
- expect(paths[SERVED_FONT_FILES.sans]).toMatch(/@fontsource-variable\/geist\/files\/geist-latin-wght-normal\.woff2$/);
37
- expect(paths[SERVED_FONT_FILES.mono]).toMatch(/@fontsource-variable\/geist-mono\/files\/geist-mono-latin-wght-normal\.woff2$/);
38
- });
39
- it("reads the files it is pointed at and fails loudly on a missing one", () => {
40
- expect(() => loadServedFonts(() => ({ "x.woff2": "/nonexistent/x.woff2" }))).toThrow(/ENOENT/);
41
- });
42
- });
43
- describe("fontResponse", () => {
44
- it("answers woff2, cached immutable for a year, readable from any origin", async () => {
45
- const body = new Uint8Array([0x77, 0x4f, 0x46, 0x32, 1, 2]);
46
- const res = fontResponse(body);
47
- expect(res.status).toBe(200);
48
- expect(Object.fromEntries(res.headers)).toEqual({
49
- "content-type": "font/woff2",
50
- "content-length": "6",
51
- "cache-control": "public, max-age=31536000, immutable",
52
- "access-control-allow-origin": "*",
53
- "cross-origin-resource-policy": "cross-origin",
54
- "x-content-type-options": "nosniff",
55
- });
56
- expect(FONT_CACHE_CONTROL).toBe("public, max-age=31536000, immutable");
57
- expect(new Uint8Array(await res.arrayBuffer())).toEqual(body);
58
- });
59
- });
60
- describe("installFontAssets", () => {
61
- it("registers one GET route per file under the versioned font path", async () => {
62
- const { host, routes } = fakeHost();
63
- const installed = installFontAssets(host);
64
- expect(installed).toEqual([
65
- "/fonts/geist-5.3.0/geist-latin-wght-normal.woff2",
66
- "/fonts/geist-5.3.0/geist-mono-latin-wght-normal.woff2",
67
- ]);
68
- expect([...routes.keys()]).toEqual(installed);
69
- // A fresh Response per request: a body can be read only once.
70
- const handler = routes.get(installed[0]);
71
- const first = await handler({});
72
- const second = await handler({});
73
- expect(first).not.toBe(second);
74
- expect((await first.arrayBuffer()).byteLength).toBe((await second.arrayBuffer()).byteLength);
75
- });
76
- it("serves what the loader returns under the path it is given", async () => {
77
- const { host, routes } = fakeHost();
78
- const fonts = [{ file: "x.woff2", body: new Uint8Array([1, 2, 3]) }];
79
- expect(installFontAssets(host, { path: "/assets", load: () => fonts })).toEqual([
80
- "/assets/x.woff2",
81
- ]);
82
- const res = await routes.get("/assets/x.woff2")({});
83
- expect(new Uint8Array(await res.arrayBuffer())).toEqual(new Uint8Array([1, 2, 3]));
84
- });
85
- it("boots on without the route when the files cannot be read — the views use the host's font", () => {
86
- const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
87
- const { host, routes } = fakeHost();
88
- const failure = new Error("ENOENT");
89
- const installed = installFontAssets(host, {
90
- label: "edge",
91
- load: () => {
92
- throw failure;
93
- },
94
- });
95
- expect(installed).toEqual([]);
96
- expect(routes.size).toBe(0);
97
- expect(warn).toHaveBeenCalledWith("[edge] Geist is not served (views use the host's font):", failure);
98
- });
99
- it("labels its warning `fonts` by default", () => {
100
- const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
101
- installFontAssets(fakeHost().host, {
102
- load: () => {
103
- throw new Error("x");
104
- },
105
- });
106
- expect(warn).toHaveBeenCalledWith(expect.stringMatching(/^\[fonts\] /), expect.any(Error));
107
- });
108
- });
109
- describe("fontAssetsCsp", () => {
110
- it("admits MCP_URL's origin in resourceDomains — the origin the views load fonts from", () => {
111
- expect(fontAssetsCsp({ MCP_URL: "https://mcp.example.com/mcp" })).toEqual({
112
- resourceDomains: ["https://mcp.example.com"],
113
- });
114
- expect(fontAssetsCsp({ MCP_URL: " http://10.0.0.7:8400/ " })).toEqual({
115
- resourceDomains: ["http://10.0.0.7:8400"],
116
- });
117
- });
118
- it("declares nothing without MCP_URL: mcp-use appends the request-resolved origin itself", () => {
119
- expect(fontAssetsCsp({})).toBeUndefined();
120
- expect(fontAssetsCsp({ MCP_URL: " " })).toBeUndefined();
121
- });
122
- });
123
- //# sourceMappingURL=font-assets.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"font-assets.test.js","sourceRoot":"","sources":["../src/font-assets.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=health.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.test.d.ts","sourceRoot":"","sources":["../src/health.test.ts"],"names":[],"mappings":""}
@@ -1,140 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from "vitest";
2
- import { installHealthEndpoints } from "./health.js";
3
- function install(options) {
4
- const routes = new Map();
5
- const server = {
6
- get: (path, handler) => routes.set(path, handler),
7
- };
8
- installHealthEndpoints(server, options);
9
- const call = async (path) => {
10
- const handler = routes.get(path);
11
- if (!handler)
12
- throw new Error(`no route registered for ${path}`);
13
- const res = await handler({});
14
- return { status: res.status, body: (await res.json()), headers: res.headers };
15
- };
16
- return { routes, call };
17
- }
18
- describe("installHealthEndpoints", () => {
19
- afterEach(() => {
20
- vi.restoreAllMocks();
21
- });
22
- it("registers live, ready and the bare prefix", () => {
23
- const { routes } = install();
24
- expect([...routes.keys()].sort()).toEqual(["/health", "/health/live", "/health/ready"]);
25
- });
26
- it("honors a custom prefix", () => {
27
- const { routes } = install({ path: "/healthz" });
28
- expect([...routes.keys()].sort()).toEqual(["/healthz", "/healthz/live", "/healthz/ready"]);
29
- });
30
- it("live answers up without running any readiness check", async () => {
31
- const check = vi.fn();
32
- const { call } = install({ readiness: { db: check } });
33
- const res = await call("/health/live");
34
- expect(res.status).toBe(200);
35
- expect(res.body).toEqual({ status: "up" });
36
- expect(check).not.toHaveBeenCalled();
37
- });
38
- it("marks probe responses uncacheable JSON", async () => {
39
- const { call } = install();
40
- const res = await call("/health/live");
41
- expect(res.headers.get("cache-control")).toBe("no-store");
42
- expect(res.headers.get("content-type")).toBe("application/json; charset=utf-8");
43
- });
44
- it("ready is up with no checks configured", async () => {
45
- const { call } = install();
46
- const res = await call("/health/ready");
47
- expect(res.status).toBe(200);
48
- expect(res.body).toEqual({ status: "up", checks: {} });
49
- });
50
- it("ready is up when every check passes (sync and async)", async () => {
51
- const { call } = install({ readiness: { db: async () => { }, disk: () => { } } });
52
- const res = await call("/health/ready");
53
- expect(res.status).toBe(200);
54
- expect(res.body).toEqual({ status: "up", checks: { db: "up", disk: "up" } });
55
- });
56
- it("ready is 503 naming the failing check, and logs the reason instead of exposing it", async () => {
57
- const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
58
- const { call } = install({
59
- label: "test-app",
60
- readiness: {
61
- db: async () => {
62
- throw new Error("connect ECONNREFUSED");
63
- },
64
- disk: () => { },
65
- },
66
- });
67
- const res = await call("/health/ready");
68
- expect(res.status).toBe(503);
69
- expect(res.body).toEqual({ status: "down", checks: { db: "down", disk: "up" } });
70
- expect(JSON.stringify(res.body)).not.toContain("ECONNREFUSED");
71
- expect(warn).toHaveBeenCalledOnce();
72
- expect(warn.mock.calls[0][0]).toBe('[test-app] readiness check "db" failed:');
73
- expect(String(warn.mock.calls[0][1])).toContain("ECONNREFUSED");
74
- });
75
- it("treats a synchronous throw like a rejection", async () => {
76
- vi.spyOn(console, "warn").mockImplementation(() => undefined);
77
- const { call } = install({
78
- readiness: {
79
- boom: () => {
80
- throw new Error("sync");
81
- },
82
- },
83
- });
84
- const res = await call("/health/ready");
85
- expect(res.status).toBe(503);
86
- expect(res.body).toEqual({ status: "down", checks: { boom: "down" } });
87
- });
88
- it("fails a check that exceeds the timeout instead of hanging the probe", async () => {
89
- const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
90
- const { call } = install({
91
- timeoutMs: 10,
92
- readiness: { hung: () => new Promise(() => { }) },
93
- });
94
- const res = await call("/health/ready");
95
- expect(res.status).toBe(503);
96
- expect(res.body).toEqual({ status: "down", checks: { hung: "down" } });
97
- expect(String(warn.mock.calls[0][1])).toContain("timed out after 10ms");
98
- });
99
- it("answers 503 draining once the host drains — without running the checks — while live stays up", async () => {
100
- const check = vi.fn();
101
- let draining = false;
102
- const { call } = install({ readiness: { db: check }, draining: () => draining });
103
- expect((await call("/health/ready")).status).toBe(200);
104
- draining = true;
105
- const ready = await call("/health/ready");
106
- expect(ready.status).toBe(503);
107
- expect(ready.body).toEqual({ status: "draining", checks: {} });
108
- expect((await call("/health")).status).toBe(503);
109
- expect(check).toHaveBeenCalledTimes(1);
110
- expect((await call("/health/live")).status).toBe(200);
111
- });
112
- it("reports draining for a probe that was in flight when the drain began", async () => {
113
- let draining = false;
114
- const { call } = install({
115
- readiness: {
116
- db: () => {
117
- draining = true;
118
- },
119
- },
120
- draining: () => draining,
121
- });
122
- const res = await call("/health/ready");
123
- expect(res.status).toBe(503);
124
- expect(res.body).toEqual({ status: "draining", checks: { db: "up" } });
125
- });
126
- it("the bare prefix aliases readiness", async () => {
127
- vi.spyOn(console, "warn").mockImplementation(() => undefined);
128
- const { call } = install({
129
- readiness: {
130
- db: async () => {
131
- throw new Error("down");
132
- },
133
- },
134
- });
135
- const res = await call("/health");
136
- expect(res.status).toBe(503);
137
- expect(res.body).toEqual({ status: "down", checks: { db: "down" } });
138
- });
139
- });
140
- //# sourceMappingURL=health.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.test.js","sourceRoot":"","sources":["../src/health.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=host-boot.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-boot.test.d.ts","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":""}
@@ -1,59 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { requestLogLevelWarning, resolvePort, swallowDevCliViewsPrime, toolCallOutcome, toolNameOf, } from "./host-boot.js";
3
- describe("resolvePort", () => {
4
- it("falls back to the default when PORT is unset", () => {
5
- expect(resolvePort({ env: {} })).toBe(8400);
6
- });
7
- it("falls back on an empty or whitespace-only assignment (env_file `PORT=`)", () => {
8
- expect(resolvePort({ env: { PORT: "" } })).toBe(8400);
9
- expect(resolvePort({ env: { PORT: " " } })).toBe(8400);
10
- });
11
- it("parses an explicit port and honors a custom fallback", () => {
12
- expect(resolvePort({ env: { PORT: "9000" } })).toBe(9000);
13
- expect(resolvePort({ env: {}, fallback: 1234 })).toBe(1234);
14
- });
15
- it.each(["abc", "0", "65536", "-1", "80.5"])("rejects %j", (value) => {
16
- expect(() => resolvePort({ env: { PORT: value } })).toThrow(`invalid PORT "${value}" — expected an integer 1-65535`);
17
- });
18
- it("prefixes the host label onto the error", () => {
19
- expect(() => resolvePort({ env: { PORT: "abc" }, label: "test-app" })).toThrow(`[test-app] invalid PORT "abc" — expected an integer 1-65535`);
20
- });
21
- });
22
- describe("swallowDevCliViewsPrime", () => {
23
- it("does nothing outside the dev CLI", () => {
24
- const server = {};
25
- swallowDevCliViewsPrime(server, {});
26
- expect("__primeViews" in server).toBe(false);
27
- });
28
- it("replaces __primeViews with a no-op under the dev CLI", () => {
29
- const server = {
30
- __primeViews: () => {
31
- throw new Error("double prime");
32
- },
33
- };
34
- swallowDevCliViewsPrime(server, { MCP_USE_DEV_CLI: "1" });
35
- expect(() => server.__primeViews?.()).not.toThrow();
36
- });
37
- });
38
- describe("requestLogLevelWarning", () => {
39
- it("stays silent at mcp-use's default level or when unset", () => {
40
- expect(requestLogLevelWarning({})).toBeUndefined();
41
- expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: "info" })).toBeUndefined();
42
- });
43
- it("warns that debug logs tool inputs and outputs", () => {
44
- expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: " DEBUG " })).toMatch(/^MCP_USE_LOG_LEVEL=debug — mcp-use logs tool inputs and outputs/);
45
- });
46
- it("warns that trace logs full requests, bearer tokens included", () => {
47
- expect(requestLogLevelWarning({ MCP_USE_LOG_LEVEL: "trace" })).toContain("bearer tokens");
48
- });
49
- });
50
- describe("toolCallOutcome / toolNameOf", () => {
51
- it("reads an isError result as error and a missing tool name as unknown", () => {
52
- expect(toolCallOutcome({ isError: true })).toBe("error");
53
- expect(toolCallOutcome({ content: [] })).toBe("ok");
54
- expect(toolCallOutcome(undefined)).toBe("ok");
55
- expect(toolNameOf({ params: { name: "notes_list_notes" } })).toBe("notes_list_notes");
56
- expect(toolNameOf({})).toBe("unknown");
57
- });
58
- });
59
- //# sourceMappingURL=host-boot.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host-boot.test.js","sourceRoot":"","sources":["../src/host-boot.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=http-edge.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-edge.test.d.ts","sourceRoot":"","sources":["../src/http-edge.test.ts"],"names":[],"mappings":""}
@@ -1,255 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { DEFAULT_MAX_BODY_BYTES, describeHttpEdgePolicy, edgeRejection, hostRejection, IN_FLIGHT_BODY_MULTIPLE, installHttpEdgeGuard, jsonRpcErrorBody, originRejection, resolveHttpEdgePolicy, } from "./http-edge.js";
3
- const LOCAL = ["localhost", "127.0.0.1", "[::1]"];
4
- describe("resolveHttpEdgePolicy", () => {
5
- it("defaults to localhost-class only, a 4 MiB cap, a 16 MiB in-flight budget and an open /metrics", () => {
6
- expect(resolveHttpEdgePolicy({})).toEqual({
7
- allowedHosts: LOCAL,
8
- allowedOrigins: LOCAL,
9
- maxBodyBytes: 4 * 1024 * 1024,
10
- maxInFlightBodyBytes: 16 * 1024 * 1024,
11
- });
12
- expect(DEFAULT_MAX_BODY_BYTES).toBe(4194304);
13
- expect(IN_FLIGHT_BODY_MULTIPLE).toBe(4);
14
- });
15
- it("scales the in-flight budget with MCP_MAX_BODY_BYTES", () => {
16
- expect(resolveHttpEdgePolicy({ MCP_MAX_BODY_BYTES: "1000" }).maxInFlightBodyBytes).toBe(4000);
17
- });
18
- it("derives the host and the origin from MCP_URL", () => {
19
- const policy = resolveHttpEdgePolicy({ MCP_URL: "https://MCP.example.com:8443/base" });
20
- expect(policy.allowedHosts).toEqual([...LOCAL, "mcp.example.com"]);
21
- expect(policy.allowedOrigins).toEqual([...LOCAL, "https://mcp.example.com:8443"]);
22
- });
23
- it("adds the comma lists, normalized and de-duplicated", () => {
24
- const policy = resolveHttpEdgePolicy({
25
- MCP_URL: "https://mcp.example.com",
26
- MCP_ALLOWED_HOSTS: " Internal.svc:8400 , mcp.example.com,,https://gw.example.com/x ",
27
- MCP_ALLOWED_ORIGINS: "https://App.example.com/, app2.example.com",
28
- });
29
- expect(policy.allowedHosts).toEqual([
30
- ...LOCAL,
31
- "mcp.example.com",
32
- "internal.svc",
33
- "gw.example.com",
34
- ]);
35
- expect(policy.allowedOrigins).toEqual([
36
- ...LOCAL,
37
- "https://mcp.example.com",
38
- "https://app.example.com",
39
- "app2.example.com",
40
- ]);
41
- });
42
- it("treats * as an explicit opt-out of that check", () => {
43
- const policy = resolveHttpEdgePolicy({ MCP_ALLOWED_HOSTS: "*", MCP_ALLOWED_ORIGINS: "a.com,*" });
44
- expect(policy.allowedHosts).toBe("*");
45
- expect(policy.allowedOrigins).toBe("*");
46
- });
47
- it("reads the body cap and the metrics token", () => {
48
- const policy = resolveHttpEdgePolicy({
49
- MCP_MAX_BODY_BYTES: " 1024 ",
50
- MCP_METRICS_TOKEN: " s3cret ",
51
- });
52
- expect(policy.maxBodyBytes).toBe(1024);
53
- expect(policy.metricsToken).toBe("s3cret");
54
- expect(resolveHttpEdgePolicy({ MCP_METRICS_TOKEN: " " })).not.toHaveProperty("metricsToken");
55
- });
56
- it.each([
57
- [{ MCP_URL: "not a url" }, /MCP_URL "not a url" is not an absolute URL/],
58
- [{ MCP_URL: "ftp://mcp.example.com" }, /must be an http\(s\) URL/],
59
- [{ MCP_MAX_BODY_BYTES: "4MB" }, /MCP_MAX_BODY_BYTES "4MB" must be a positive integer/],
60
- [{ MCP_MAX_BODY_BYTES: "0" }, /must be a positive integer/],
61
- [{ MCP_MAX_BODY_BYTES: "1.5" }, /must be a positive integer/],
62
- [{ MCP_ALLOWED_HOSTS: "bad host" }, /MCP_ALLOWED_HOSTS: "bad host" is not a hostname/],
63
- [{ MCP_ALLOWED_ORIGINS: "https://" }, /MCP_ALLOWED_ORIGINS: "https:\/\/" is not an origin/],
64
- [{ MCP_ALLOWED_ORIGINS: "data://x" }, /is not an origin/],
65
- ])("fails the boot on %j", (env, message) => {
66
- expect(() => resolveHttpEdgePolicy(env)).toThrow(message);
67
- });
68
- });
69
- describe("describeHttpEdgePolicy", () => {
70
- it("states hosts, origins, the cap and the metrics protection in one line", () => {
71
- expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({ MCP_URL: "https://mcp.example.com", MCP_METRICS_TOKEN: "t" }))).toBe("HTTP edge — hosts: localhost, 127.0.0.1, [::1], mcp.example.com; " +
72
- "origins: localhost, 127.0.0.1, [::1], https://mcp.example.com; " +
73
- "max body 4 MiB (16 MiB in flight); /metrics token-protected");
74
- expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({
75
- MCP_ALLOWED_HOSTS: "*",
76
- MCP_ALLOWED_ORIGINS: "*",
77
- MCP_MAX_BODY_BYTES: "1572864",
78
- }))).toBe("HTTP edge — hosts: any (validation off); origins: any (validation off); " +
79
- "max body 1.5 MiB (6 MiB in flight); /metrics open");
80
- });
81
- it.each([
82
- ["1048576", "max body 1 MiB (4 MiB in flight);"],
83
- ["1024", "max body 1 KiB (4 KiB in flight);"],
84
- ["2560", "max body 2.5 KiB (10 KiB in flight);"],
85
- ["1023", "max body 1023 bytes (4 KiB in flight);"],
86
- ["640", "max body 640 bytes (2.5 KiB in flight);"],
87
- ["255", "max body 255 bytes (1020 bytes in flight);"],
88
- ])("formats a %s-byte cap readably", (bytes, expected) => {
89
- expect(describeHttpEdgePolicy(resolveHttpEdgePolicy({ MCP_MAX_BODY_BYTES: bytes }))).toContain(expected);
90
- });
91
- });
92
- const policy = resolveHttpEdgePolicy({
93
- MCP_URL: "https://mcp.example.com",
94
- MCP_ALLOWED_ORIGINS: "https://app.example.com,tools.example.com",
95
- });
96
- describe("hostRejection", () => {
97
- it.each([
98
- "localhost",
99
- "localhost:8400",
100
- "127.0.0.1:1",
101
- "[::1]:8400",
102
- "mcp.example.com",
103
- "MCP.EXAMPLE.COM:443",
104
- ])("admits %s", (host) => {
105
- expect(hostRejection(host, policy)).toBeUndefined();
106
- });
107
- it("rejects a foreign host (port-agnostic) and points at the remedy", () => {
108
- const reason = hostRejection("attacker.example:8400", policy);
109
- expect(reason).toContain('Host "attacker.example" is not allowed');
110
- expect(reason).toContain("MCP_URL");
111
- expect(reason).toContain("MCP_ALLOWED_HOSTS");
112
- // An IP that happens to reach the server is still not "ours".
113
- expect(hostRejection("10.0.0.7:8400", policy)).toBeDefined();
114
- });
115
- it("rejects a missing or unparsable Host", () => {
116
- expect(hostRejection(undefined, policy)).toBe("missing Host header");
117
- expect(hostRejection("", policy)).toBe("missing Host header");
118
- expect(hostRejection("a b", policy)).toBe('invalid Host header "a b"');
119
- });
120
- it("admits anything when Host validation is off", () => {
121
- expect(hostRejection("attacker.example", { ...policy, allowedHosts: "*" })).toBeUndefined();
122
- expect(hostRejection(undefined, { ...policy, allowedHosts: "*" })).toBeUndefined();
123
- });
124
- });
125
- describe("originRejection", () => {
126
- it("admits requests without an Origin (non-browser MCP clients)", () => {
127
- expect(originRejection(undefined, "POST", policy)).toBeUndefined();
128
- expect(originRejection("", "POST", policy)).toBeUndefined();
129
- });
130
- it("skips the safe methods, whatever the origin", () => {
131
- expect(originRejection("https://attacker.example", "GET", policy)).toBeUndefined();
132
- expect(originRejection("null", "HEAD", policy)).toBeUndefined();
133
- });
134
- it.each([
135
- "http://localhost:6274",
136
- "https://127.0.0.1",
137
- "http://[::1]:3000",
138
- "https://mcp.example.com",
139
- "https://app.example.com",
140
- "http://tools.example.com:9000",
141
- ])("admits %s", (origin) => {
142
- expect(originRejection(origin, "POST", policy)).toBeUndefined();
143
- });
144
- it.each([
145
- "https://attacker.example",
146
- "http://app.example.com", // exact origin: scheme counts
147
- "https://app.example.com:8443", // and so does the port
148
- "https://mcp.example.com.attacker.example",
149
- "null",
150
- "not a url",
151
- ])("rejects %s on a POST", (origin) => {
152
- const reason = originRejection(origin, "POST", policy);
153
- expect(reason).toContain(`Origin "${origin}" is not allowed`);
154
- expect(reason).toContain("MCP_ALLOWED_ORIGINS");
155
- });
156
- it("admits anything when Origin validation is off", () => {
157
- expect(originRejection("https://attacker.example", "POST", { ...policy, allowedOrigins: "*" })).toBeUndefined();
158
- });
159
- });
160
- describe("edgeRejection", () => {
161
- const request = (overrides = {}) => ({
162
- method: "POST",
163
- path: "/mcp",
164
- host: "mcp.example.com",
165
- origin: undefined,
166
- ...overrides,
167
- });
168
- it("passes a request whose Host and Origin are allowed", () => {
169
- expect(edgeRejection(request({ origin: "https://app.example.com" }), policy)).toBeUndefined();
170
- });
171
- it("reports the Host before the Origin", () => {
172
- const reason = edgeRejection(request({ host: "attacker.example", origin: "https://attacker.example" }), policy);
173
- expect(reason).toMatch(/^Host "attacker\.example" is not allowed/);
174
- });
175
- it("reports a foreign Origin when the Host passes", () => {
176
- const reason = edgeRejection(request({ origin: "https://attacker.example" }), policy);
177
- expect(reason).toMatch(/^Origin "https:\/\/attacker\.example" is not allowed/);
178
- });
179
- it("passes the exempt path prefixes whatever their headers", () => {
180
- const foreign = { host: "10.0.0.7", origin: "https://attacker.example" };
181
- expect(edgeRejection(request({ path: "/metrics", ...foreign }), policy, ["/metrics"])).toBe(undefined);
182
- expect(edgeRejection(request({ path: "/metrics2", ...foreign }), policy, ["/metrics"])).toBeDefined();
183
- });
184
- });
185
- describe("jsonRpcErrorBody", () => {
186
- it("is a JSON-RPC error with a null id", () => {
187
- expect(JSON.parse(jsonRpcErrorBody("nope"))).toEqual({
188
- jsonrpc: "2.0",
189
- error: { code: -32000, message: "nope" },
190
- id: null,
191
- });
192
- });
193
- });
194
- describe("installHttpEdgeGuard", () => {
195
- function install(edge, exemptPaths) {
196
- let middleware;
197
- const host = {
198
- use: (path, handler) => {
199
- expect(path).toBe("*");
200
- middleware = handler;
201
- },
202
- };
203
- installHttpEdgeGuard(host, edge, exemptPaths ? { exemptPaths } : undefined);
204
- return async (method, path, headers) => {
205
- const ctx = {
206
- req: { method, path, header: (name) => headers[name] },
207
- };
208
- let passed = false;
209
- const response = await middleware(ctx, () => {
210
- passed = true;
211
- return Promise.resolve();
212
- });
213
- return { passed, response: response ?? undefined };
214
- };
215
- }
216
- it("passes allowed requests through", async () => {
217
- const run = install(policy);
218
- const result = await run("POST", "/mcp", {
219
- host: "mcp.example.com",
220
- origin: "https://app.example.com",
221
- });
222
- expect(result).toEqual({ passed: true, response: undefined });
223
- });
224
- it("answers 403 with a JSON-RPC body for a foreign Host, before the route runs", async () => {
225
- const run = install(policy);
226
- const { passed, response } = await run("POST", "/mcp", { host: "attacker.example" });
227
- expect(passed).toBe(false);
228
- expect(response?.status).toBe(403);
229
- expect(response?.headers.get("content-type")).toBe("application/json");
230
- const body = (await response.json());
231
- expect(body.error.message).toMatch(/^Forbidden: Host "attacker\.example" is not allowed/);
232
- });
233
- it("answers 403 for a foreign Origin even when the Host is fine", async () => {
234
- const run = install(policy);
235
- const { passed, response } = await run("POST", "/mcp", {
236
- host: "localhost:8400",
237
- origin: "https://attacker.example",
238
- });
239
- expect(passed).toBe(false);
240
- expect(response?.status).toBe(403);
241
- });
242
- it("exempts the listed path prefixes (probes reach the container by IP)", async () => {
243
- const run = install(policy, ["/health"]);
244
- for (const path of ["/health", "/health/ready"]) {
245
- expect((await run("GET", path, { host: "10.0.0.7:8400" })).passed, path).toBe(true);
246
- }
247
- expect((await run("GET", "/healthz", { host: "10.0.0.7:8400" })).passed).toBe(false);
248
- expect((await run("GET", "/mcp", { host: "10.0.0.7:8400" })).passed).toBe(false);
249
- });
250
- it("guards every path when nothing is exempt", async () => {
251
- const run = install(policy);
252
- expect((await run("GET", "/health", { host: "10.0.0.7" })).passed).toBe(false);
253
- });
254
- });
255
- //# sourceMappingURL=http-edge.test.js.map