@miragon/pulse-widget-shell 0.0.0-stage → 0.21.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 (831) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -2
  3. package/dist/adapt-data-widget.d.ts +7 -0
  4. package/dist/adapt-data-widget.d.ts.map +1 -0
  5. package/dist/adapt-data-widget.js +7 -0
  6. package/dist/adapt-data-widget.js.map +1 -0
  7. package/dist/bpmn-names.d.ts +42 -0
  8. package/dist/bpmn-names.d.ts.map +1 -0
  9. package/dist/bpmn-names.js +151 -0
  10. package/dist/bpmn-names.js.map +1 -0
  11. package/dist/bpmn-names.test.d.ts +2 -0
  12. package/dist/bpmn-names.test.d.ts.map +1 -0
  13. package/dist/bpmn-names.test.js +143 -0
  14. package/dist/bpmn-names.test.js.map +1 -0
  15. package/dist/build-data-feed-result.test.d.ts +2 -0
  16. package/dist/build-data-feed-result.test.d.ts.map +1 -0
  17. package/dist/build-data-feed-result.test.js +28 -0
  18. package/dist/build-data-feed-result.test.js.map +1 -0
  19. package/dist/build-single-widget-view.test.d.ts +2 -0
  20. package/dist/build-single-widget-view.test.d.ts.map +1 -0
  21. package/dist/build-single-widget-view.test.js +136 -0
  22. package/dist/build-single-widget-view.test.js.map +1 -0
  23. package/dist/builder-texts.d.ts +27 -0
  24. package/dist/builder-texts.d.ts.map +1 -0
  25. package/dist/builder-texts.js +32 -0
  26. package/dist/builder-texts.js.map +1 -0
  27. package/dist/builder-texts.test.d.ts +2 -0
  28. package/dist/builder-texts.test.d.ts.map +1 -0
  29. package/dist/builder-texts.test.js +54 -0
  30. package/dist/builder-texts.test.js.map +1 -0
  31. package/dist/catalogue-sync.d.ts +18 -0
  32. package/dist/catalogue-sync.d.ts.map +1 -0
  33. package/dist/catalogue-sync.js +31 -0
  34. package/dist/catalogue-sync.js.map +1 -0
  35. package/dist/catalogue-sync.test.d.ts +2 -0
  36. package/dist/catalogue-sync.test.d.ts.map +1 -0
  37. package/dist/catalogue-sync.test.js +22 -0
  38. package/dist/catalogue-sync.test.js.map +1 -0
  39. package/dist/composed-server.d.ts +110 -0
  40. package/dist/composed-server.d.ts.map +1 -0
  41. package/dist/composed-server.edge.test.d.ts +2 -0
  42. package/dist/composed-server.edge.test.d.ts.map +1 -0
  43. package/dist/composed-server.edge.test.js +184 -0
  44. package/dist/composed-server.edge.test.js.map +1 -0
  45. package/dist/composed-server.fonts.test.d.ts +2 -0
  46. package/dist/composed-server.fonts.test.d.ts.map +1 -0
  47. package/dist/composed-server.fonts.test.js +186 -0
  48. package/dist/composed-server.fonts.test.js.map +1 -0
  49. package/dist/composed-server.js +260 -0
  50. package/dist/composed-server.js.map +1 -0
  51. package/dist/composed-server.test.d.ts +2 -0
  52. package/dist/composed-server.test.d.ts.map +1 -0
  53. package/dist/composed-server.test.js +332 -0
  54. package/dist/composed-server.test.js.map +1 -0
  55. package/dist/composition.d.ts +155 -0
  56. package/dist/composition.d.ts.map +1 -0
  57. package/dist/composition.js +163 -0
  58. package/dist/composition.js.map +1 -0
  59. package/dist/composition.test.d.ts +2 -0
  60. package/dist/composition.test.d.ts.map +1 -0
  61. package/dist/composition.test.js +275 -0
  62. package/dist/composition.test.js.map +1 -0
  63. package/dist/dashboard-store-postgres.d.ts +43 -0
  64. package/dist/dashboard-store-postgres.d.ts.map +1 -0
  65. package/dist/dashboard-store-postgres.js +225 -0
  66. package/dist/dashboard-store-postgres.js.map +1 -0
  67. package/dist/dashboard-store-postgres.test.d.ts +2 -0
  68. package/dist/dashboard-store-postgres.test.d.ts.map +1 -0
  69. package/dist/dashboard-store-postgres.test.js +272 -0
  70. package/dist/dashboard-store-postgres.test.js.map +1 -0
  71. package/dist/font-assets.d.ts +47 -0
  72. package/dist/font-assets.d.ts.map +1 -0
  73. package/dist/font-assets.js +93 -0
  74. package/dist/font-assets.js.map +1 -0
  75. package/dist/font-assets.test.d.ts +2 -0
  76. package/dist/font-assets.test.d.ts.map +1 -0
  77. package/dist/font-assets.test.js +123 -0
  78. package/dist/font-assets.test.js.map +1 -0
  79. package/dist/health.d.ts +59 -0
  80. package/dist/health.d.ts.map +1 -0
  81. package/dist/health.js +74 -0
  82. package/dist/health.js.map +1 -0
  83. package/dist/health.test.d.ts +2 -0
  84. package/dist/health.test.d.ts.map +1 -0
  85. package/dist/health.test.js +140 -0
  86. package/dist/health.test.js.map +1 -0
  87. package/dist/host-boot.d.ts +56 -0
  88. package/dist/host-boot.d.ts.map +1 -0
  89. package/dist/host-boot.js +64 -0
  90. package/dist/host-boot.js.map +1 -0
  91. package/dist/host-boot.test.d.ts +2 -0
  92. package/dist/host-boot.test.d.ts.map +1 -0
  93. package/dist/host-boot.test.js +59 -0
  94. package/dist/host-boot.test.js.map +1 -0
  95. package/dist/http-edge.d.ts +117 -0
  96. package/dist/http-edge.d.ts.map +1 -0
  97. package/dist/http-edge.js +219 -0
  98. package/dist/http-edge.js.map +1 -0
  99. package/dist/http-edge.test.d.ts +2 -0
  100. package/dist/http-edge.test.d.ts.map +1 -0
  101. package/dist/http-edge.test.js +255 -0
  102. package/dist/http-edge.test.js.map +1 -0
  103. package/dist/metrics.d.ts +48 -0
  104. package/dist/metrics.d.ts.map +1 -0
  105. package/dist/metrics.js +124 -0
  106. package/dist/metrics.js.map +1 -0
  107. package/dist/metrics.test.d.ts +2 -0
  108. package/dist/metrics.test.d.ts.map +1 -0
  109. package/dist/metrics.test.js +154 -0
  110. package/dist/metrics.test.js.map +1 -0
  111. package/dist/node-listener.d.ts +61 -0
  112. package/dist/node-listener.d.ts.map +1 -0
  113. package/dist/node-listener.js +165 -0
  114. package/dist/node-listener.js.map +1 -0
  115. package/dist/node-listener.test.d.ts +2 -0
  116. package/dist/node-listener.test.d.ts.map +1 -0
  117. package/dist/node-listener.test.js +331 -0
  118. package/dist/node-listener.test.js.map +1 -0
  119. package/dist/oauth-env.d.ts +42 -0
  120. package/dist/oauth-env.d.ts.map +1 -0
  121. package/dist/oauth-env.js +78 -0
  122. package/dist/oauth-env.js.map +1 -0
  123. package/dist/oauth-env.test.d.ts +2 -0
  124. package/dist/oauth-env.test.d.ts.map +1 -0
  125. package/dist/oauth-env.test.js +76 -0
  126. package/dist/oauth-env.test.js.map +1 -0
  127. package/dist/postgres.d.ts +59 -0
  128. package/dist/postgres.d.ts.map +1 -0
  129. package/dist/postgres.js +80 -0
  130. package/dist/postgres.js.map +1 -0
  131. package/dist/profile-advisory.d.ts +19 -0
  132. package/dist/profile-advisory.d.ts.map +1 -0
  133. package/dist/profile-advisory.js +48 -0
  134. package/dist/profile-advisory.js.map +1 -0
  135. package/dist/profile-advisory.test.d.ts +2 -0
  136. package/dist/profile-advisory.test.d.ts.map +1 -0
  137. package/dist/profile-advisory.test.js +53 -0
  138. package/dist/profile-advisory.test.js.map +1 -0
  139. package/dist/profile-constants.d.ts +37 -0
  140. package/dist/profile-constants.d.ts.map +1 -0
  141. package/dist/profile-constants.js +37 -0
  142. package/dist/profile-constants.js.map +1 -0
  143. package/dist/profile-migrations.d.ts +71 -0
  144. package/dist/profile-migrations.d.ts.map +1 -0
  145. package/dist/profile-migrations.js +88 -0
  146. package/dist/profile-migrations.js.map +1 -0
  147. package/dist/profile-migrations.test.d.ts +2 -0
  148. package/dist/profile-migrations.test.d.ts.map +1 -0
  149. package/dist/profile-migrations.test.js +200 -0
  150. package/dist/profile-migrations.test.js.map +1 -0
  151. package/dist/profile-record.d.ts +60 -0
  152. package/dist/profile-record.d.ts.map +1 -0
  153. package/dist/profile-record.js +78 -0
  154. package/dist/profile-record.js.map +1 -0
  155. package/dist/profile-slice.d.ts +53 -0
  156. package/dist/profile-slice.d.ts.map +1 -0
  157. package/dist/profile-slice.js +73 -0
  158. package/dist/profile-slice.js.map +1 -0
  159. package/dist/profile-slice.test.d.ts +2 -0
  160. package/dist/profile-slice.test.d.ts.map +1 -0
  161. package/dist/profile-slice.test.js +73 -0
  162. package/dist/profile-slice.test.js.map +1 -0
  163. package/dist/profile-store-env.d.ts +34 -0
  164. package/dist/profile-store-env.d.ts.map +1 -0
  165. package/dist/profile-store-env.js +44 -0
  166. package/dist/profile-store-env.js.map +1 -0
  167. package/dist/profile-store-env.test.d.ts +2 -0
  168. package/dist/profile-store-env.test.d.ts.map +1 -0
  169. package/dist/profile-store-env.test.js +69 -0
  170. package/dist/profile-store-env.test.js.map +1 -0
  171. package/dist/profile-store-postgres.d.ts +33 -0
  172. package/dist/profile-store-postgres.d.ts.map +1 -0
  173. package/dist/profile-store-postgres.js +87 -0
  174. package/dist/profile-store-postgres.js.map +1 -0
  175. package/dist/profile-store-raw.test.d.ts +2 -0
  176. package/dist/profile-store-raw.test.d.ts.map +1 -0
  177. package/dist/profile-store-raw.test.js +185 -0
  178. package/dist/profile-store-raw.test.js.map +1 -0
  179. package/dist/profile-store.d.ts +85 -0
  180. package/dist/profile-store.d.ts.map +1 -0
  181. package/dist/profile-store.js +182 -0
  182. package/dist/profile-store.js.map +1 -0
  183. package/dist/profile-store.test.d.ts +2 -0
  184. package/dist/profile-store.test.d.ts.map +1 -0
  185. package/dist/profile-store.test.js +353 -0
  186. package/dist/profile-store.test.js.map +1 -0
  187. package/dist/profile.d.ts +75 -0
  188. package/dist/profile.d.ts.map +1 -0
  189. package/dist/profile.js +85 -0
  190. package/dist/profile.js.map +1 -0
  191. package/dist/profile.test.d.ts +2 -0
  192. package/dist/profile.test.d.ts.map +1 -0
  193. package/dist/profile.test.js +71 -0
  194. package/dist/profile.test.js.map +1 -0
  195. package/dist/request-context.d.ts +47 -0
  196. package/dist/request-context.d.ts.map +1 -0
  197. package/dist/request-context.js +85 -0
  198. package/dist/request-context.js.map +1 -0
  199. package/dist/request-context.test.d.ts +2 -0
  200. package/dist/request-context.test.d.ts.map +1 -0
  201. package/dist/request-context.test.js +107 -0
  202. package/dist/request-context.test.js.map +1 -0
  203. package/dist/served-fonts.d.ts +38 -0
  204. package/dist/served-fonts.d.ts.map +1 -0
  205. package/dist/served-fonts.js +51 -0
  206. package/dist/served-fonts.js.map +1 -0
  207. package/dist/served-fonts.test.d.ts +2 -0
  208. package/dist/served-fonts.test.d.ts.map +1 -0
  209. package/dist/served-fonts.test.js +30 -0
  210. package/dist/served-fonts.test.js.map +1 -0
  211. package/dist/server-locale.d.ts +58 -0
  212. package/dist/server-locale.d.ts.map +1 -0
  213. package/dist/server-locale.js +64 -0
  214. package/dist/server-locale.js.map +1 -0
  215. package/dist/server-locale.test.d.ts +2 -0
  216. package/dist/server-locale.test.d.ts.map +1 -0
  217. package/dist/server-locale.test.js +90 -0
  218. package/dist/server-locale.test.js.map +1 -0
  219. package/dist/server.d.ts +43 -0
  220. package/dist/server.d.ts.map +1 -0
  221. package/dist/server.js +34 -0
  222. package/dist/server.js.map +1 -0
  223. package/dist/shell-catalogue.d.ts +12 -0
  224. package/dist/shell-catalogue.d.ts.map +1 -0
  225. package/dist/shell-catalogue.js +142 -0
  226. package/dist/shell-catalogue.js.map +1 -0
  227. package/dist/shell-settings-contract.d.ts +34 -0
  228. package/dist/shell-settings-contract.d.ts.map +1 -0
  229. package/dist/shell-settings-contract.js +21 -0
  230. package/dist/shell-settings-contract.js.map +1 -0
  231. package/dist/shell-settings.d.ts +24 -0
  232. package/dist/shell-settings.d.ts.map +1 -0
  233. package/dist/shell-settings.js +148 -0
  234. package/dist/shell-settings.js.map +1 -0
  235. package/dist/shell-settings.test.d.ts +2 -0
  236. package/dist/shell-settings.test.d.ts.map +1 -0
  237. package/dist/shell-settings.test.js +115 -0
  238. package/dist/shell-settings.test.js.map +1 -0
  239. package/dist/testing/catalog-text.d.ts +53 -0
  240. package/dist/testing/catalog-text.d.ts.map +1 -0
  241. package/dist/testing/catalog-text.js +146 -0
  242. package/dist/testing/catalog-text.js.map +1 -0
  243. package/dist/testing/catalog-text.test.d.ts +2 -0
  244. package/dist/testing/catalog-text.test.d.ts.map +1 -0
  245. package/dist/testing/catalog-text.test.js +137 -0
  246. package/dist/testing/catalog-text.test.js.map +1 -0
  247. package/dist/testing/colors.d.ts +34 -0
  248. package/dist/testing/colors.d.ts.map +1 -0
  249. package/dist/testing/colors.js +124 -0
  250. package/dist/testing/colors.js.map +1 -0
  251. package/dist/testing/colors.test.d.ts +2 -0
  252. package/dist/testing/colors.test.d.ts.map +1 -0
  253. package/dist/testing/colors.test.js +166 -0
  254. package/dist/testing/colors.test.js.map +1 -0
  255. package/dist/testing/contrast.d.ts +77 -0
  256. package/dist/testing/contrast.d.ts.map +1 -0
  257. package/dist/testing/contrast.js +382 -0
  258. package/dist/testing/contrast.js.map +1 -0
  259. package/dist/testing/contrast.test.d.ts +2 -0
  260. package/dist/testing/contrast.test.d.ts.map +1 -0
  261. package/dist/testing/contrast.test.js +230 -0
  262. package/dist/testing/contrast.test.js.map +1 -0
  263. package/dist/testing/display-texts.d.ts +23 -0
  264. package/dist/testing/display-texts.d.ts.map +1 -0
  265. package/dist/testing/display-texts.js +88 -0
  266. package/dist/testing/display-texts.js.map +1 -0
  267. package/dist/testing/display-texts.test.d.ts +2 -0
  268. package/dist/testing/display-texts.test.d.ts.map +1 -0
  269. package/dist/testing/display-texts.test.js +169 -0
  270. package/dist/testing/display-texts.test.js.map +1 -0
  271. package/dist/testing/glossary.d.ts +52 -0
  272. package/dist/testing/glossary.d.ts.map +1 -0
  273. package/dist/testing/glossary.js +135 -0
  274. package/dist/testing/glossary.js.map +1 -0
  275. package/dist/testing/glossary.test.d.ts +2 -0
  276. package/dist/testing/glossary.test.d.ts.map +1 -0
  277. package/dist/testing/glossary.test.js +78 -0
  278. package/dist/testing/glossary.test.js.map +1 -0
  279. package/dist/testing/glyphs.d.ts +27 -0
  280. package/dist/testing/glyphs.d.ts.map +1 -0
  281. package/dist/testing/glyphs.js +130 -0
  282. package/dist/testing/glyphs.js.map +1 -0
  283. package/dist/testing/glyphs.test.d.ts +2 -0
  284. package/dist/testing/glyphs.test.d.ts.map +1 -0
  285. package/dist/testing/glyphs.test.js +146 -0
  286. package/dist/testing/glyphs.test.js.map +1 -0
  287. package/dist/testing/icon-sizes.d.ts +22 -0
  288. package/dist/testing/icon-sizes.d.ts.map +1 -0
  289. package/dist/testing/icon-sizes.js +39 -0
  290. package/dist/testing/icon-sizes.js.map +1 -0
  291. package/dist/testing/icon-sizes.test.d.ts +2 -0
  292. package/dist/testing/icon-sizes.test.d.ts.map +1 -0
  293. package/dist/testing/icon-sizes.test.js +36 -0
  294. package/dist/testing/icon-sizes.test.js.map +1 -0
  295. package/dist/testing/index.d.ts +40 -0
  296. package/dist/testing/index.d.ts.map +1 -0
  297. package/dist/testing/index.js +40 -0
  298. package/dist/testing/index.js.map +1 -0
  299. package/dist/testing/source-scan.d.ts +16 -0
  300. package/dist/testing/source-scan.d.ts.map +1 -0
  301. package/dist/testing/source-scan.js +57 -0
  302. package/dist/testing/source-scan.js.map +1 -0
  303. package/dist/testing/tone-pairs.d.ts +20 -0
  304. package/dist/testing/tone-pairs.d.ts.map +1 -0
  305. package/dist/testing/tone-pairs.js +154 -0
  306. package/dist/testing/tone-pairs.js.map +1 -0
  307. package/dist/testing/type-scale.d.ts +40 -0
  308. package/dist/testing/type-scale.d.ts.map +1 -0
  309. package/dist/testing/type-scale.js +55 -0
  310. package/dist/testing/type-scale.js.map +1 -0
  311. package/dist/testing/type-scale.test.d.ts +2 -0
  312. package/dist/testing/type-scale.test.d.ts.map +1 -0
  313. package/dist/testing/type-scale.test.js +61 -0
  314. package/dist/testing/type-scale.test.js.map +1 -0
  315. package/dist/tool-schema-trim.d.ts +24 -0
  316. package/dist/tool-schema-trim.d.ts.map +1 -0
  317. package/dist/tool-schema-trim.js +49 -0
  318. package/dist/tool-schema-trim.js.map +1 -0
  319. package/dist/tool-schema-trim.test.d.ts +2 -0
  320. package/dist/tool-schema-trim.test.d.ts.map +1 -0
  321. package/dist/tool-schema-trim.test.js +53 -0
  322. package/dist/tool-schema-trim.test.js.map +1 -0
  323. package/dist/toolsets.d.ts +76 -0
  324. package/dist/toolsets.d.ts.map +1 -0
  325. package/dist/toolsets.js +41 -0
  326. package/dist/toolsets.js.map +1 -0
  327. package/dist/toolsets.test.d.ts +2 -0
  328. package/dist/toolsets.test.d.ts.map +1 -0
  329. package/dist/toolsets.test.js +86 -0
  330. package/dist/toolsets.test.js.map +1 -0
  331. package/dist/ui/action-feedback.d.ts +33 -0
  332. package/dist/ui/action-feedback.d.ts.map +1 -0
  333. package/dist/ui/action-feedback.js +51 -0
  334. package/dist/ui/action-feedback.js.map +1 -0
  335. package/dist/ui/action-feedback.test.d.ts +2 -0
  336. package/dist/ui/action-feedback.test.d.ts.map +1 -0
  337. package/dist/ui/action-feedback.test.js +77 -0
  338. package/dist/ui/action-feedback.test.js.map +1 -0
  339. package/dist/ui/app-shell-providers.d.ts +18 -0
  340. package/dist/ui/app-shell-providers.d.ts.map +1 -0
  341. package/dist/ui/app-shell-providers.js +19 -0
  342. package/dist/ui/app-shell-providers.js.map +1 -0
  343. package/dist/ui/app-shell-providers.test.d.ts +2 -0
  344. package/dist/ui/app-shell-providers.test.d.ts.map +1 -0
  345. package/dist/ui/app-shell-providers.test.js +249 -0
  346. package/dist/ui/app-shell-providers.test.js.map +1 -0
  347. package/dist/ui/ask-ai-button.d.ts +56 -0
  348. package/dist/ui/ask-ai-button.d.ts.map +1 -0
  349. package/dist/ui/ask-ai-button.js +36 -0
  350. package/dist/ui/ask-ai-button.js.map +1 -0
  351. package/dist/ui/ask-ai-button.test.d.ts +2 -0
  352. package/dist/ui/ask-ai-button.test.d.ts.map +1 -0
  353. package/dist/ui/ask-ai-button.test.js +103 -0
  354. package/dist/ui/ask-ai-button.test.js.map +1 -0
  355. package/dist/ui/ask-ai-prompt.d.ts +115 -0
  356. package/dist/ui/ask-ai-prompt.d.ts.map +1 -0
  357. package/dist/ui/ask-ai-prompt.js +174 -0
  358. package/dist/ui/ask-ai-prompt.js.map +1 -0
  359. package/dist/ui/ask-ai-prompt.test.d.ts +2 -0
  360. package/dist/ui/ask-ai-prompt.test.d.ts.map +1 -0
  361. package/dist/ui/ask-ai-prompt.test.js +240 -0
  362. package/dist/ui/ask-ai-prompt.test.js.map +1 -0
  363. package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +2 -0
  364. package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +1 -0
  365. package/dist/ui/bpmn-heatmap/heat-ramp.test.js +174 -0
  366. package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +1 -0
  367. package/dist/ui/bpmn-heatmap/heat-utils.d.ts +119 -0
  368. package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +1 -0
  369. package/dist/ui/bpmn-heatmap/heat-utils.js +231 -0
  370. package/dist/ui/bpmn-heatmap/heat-utils.js.map +1 -0
  371. package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +2 -0
  372. package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +1 -0
  373. package/dist/ui/bpmn-heatmap/heat-utils.test.js +59 -0
  374. package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +1 -0
  375. package/dist/ui/bpmn-heatmap-labels.d.ts +46 -0
  376. package/dist/ui/bpmn-heatmap-labels.d.ts.map +1 -0
  377. package/dist/ui/bpmn-heatmap-labels.js +16 -0
  378. package/dist/ui/bpmn-heatmap-labels.js.map +1 -0
  379. package/dist/ui/bpmn-heatmap-widget.d.ts +38 -0
  380. package/dist/ui/bpmn-heatmap-widget.d.ts.map +1 -0
  381. package/dist/ui/bpmn-heatmap-widget.js +65 -0
  382. package/dist/ui/bpmn-heatmap-widget.js.map +1 -0
  383. package/dist/ui/bpmn-heatmap-widget.test.d.ts +2 -0
  384. package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +1 -0
  385. package/dist/ui/bpmn-heatmap-widget.test.js +173 -0
  386. package/dist/ui/bpmn-heatmap-widget.test.js.map +1 -0
  387. package/dist/ui/bpmn-heatmap.d.ts +61 -0
  388. package/dist/ui/bpmn-heatmap.d.ts.map +1 -0
  389. package/dist/ui/bpmn-heatmap.js +119 -0
  390. package/dist/ui/bpmn-heatmap.js.map +1 -0
  391. package/dist/ui/bpmn-tokens.d.ts +81 -0
  392. package/dist/ui/bpmn-tokens.d.ts.map +1 -0
  393. package/dist/ui/bpmn-tokens.js +114 -0
  394. package/dist/ui/bpmn-tokens.js.map +1 -0
  395. package/dist/ui/bpmn-tokens.test.d.ts +2 -0
  396. package/dist/ui/bpmn-tokens.test.d.ts.map +1 -0
  397. package/dist/ui/bpmn-tokens.test.js +98 -0
  398. package/dist/ui/bpmn-tokens.test.js.map +1 -0
  399. package/dist/ui/bpmn-zoom-controls.d.ts +30 -0
  400. package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -0
  401. package/dist/ui/bpmn-zoom-controls.js +29 -0
  402. package/dist/ui/bpmn-zoom-controls.js.map +1 -0
  403. package/dist/ui/brand-gates.test.d.ts +2 -0
  404. package/dist/ui/brand-gates.test.d.ts.map +1 -0
  405. package/dist/ui/brand-gates.test.js +131 -0
  406. package/dist/ui/brand-gates.test.js.map +1 -0
  407. package/dist/ui/brand-mark.d.ts +37 -0
  408. package/dist/ui/brand-mark.d.ts.map +1 -0
  409. package/dist/ui/brand-mark.js +33 -0
  410. package/dist/ui/brand-mark.js.map +1 -0
  411. package/dist/ui/brand-mark.test.d.ts +2 -0
  412. package/dist/ui/brand-mark.test.d.ts.map +1 -0
  413. package/dist/ui/brand-mark.test.js +111 -0
  414. package/dist/ui/brand-mark.test.js.map +1 -0
  415. package/dist/ui/confirm-dialog.d.ts +55 -0
  416. package/dist/ui/confirm-dialog.d.ts.map +1 -0
  417. package/dist/ui/confirm-dialog.js +59 -0
  418. package/dist/ui/confirm-dialog.js.map +1 -0
  419. package/dist/ui/confirm-dialog.test.d.ts +2 -0
  420. package/dist/ui/confirm-dialog.test.d.ts.map +1 -0
  421. package/dist/ui/confirm-dialog.test.js +115 -0
  422. package/dist/ui/confirm-dialog.test.js.map +1 -0
  423. package/dist/ui/count-tone.d.ts +20 -0
  424. package/dist/ui/count-tone.d.ts.map +1 -0
  425. package/dist/ui/count-tone.js +27 -0
  426. package/dist/ui/count-tone.js.map +1 -0
  427. package/dist/ui/count-tone.test.d.ts +2 -0
  428. package/dist/ui/count-tone.test.d.ts.map +1 -0
  429. package/dist/ui/count-tone.test.js +27 -0
  430. package/dist/ui/count-tone.test.js.map +1 -0
  431. package/dist/ui/create-use-t.d.ts +15 -0
  432. package/dist/ui/create-use-t.d.ts.map +1 -0
  433. package/dist/ui/create-use-t.js +17 -0
  434. package/dist/ui/create-use-t.js.map +1 -0
  435. package/dist/ui/declare-served-fonts.d.ts +14 -0
  436. package/dist/ui/declare-served-fonts.d.ts.map +1 -0
  437. package/dist/ui/declare-served-fonts.js +38 -0
  438. package/dist/ui/declare-served-fonts.js.map +1 -0
  439. package/dist/ui/declare-served-fonts.test.d.ts +2 -0
  440. package/dist/ui/declare-served-fonts.test.d.ts.map +1 -0
  441. package/dist/ui/declare-served-fonts.test.js +44 -0
  442. package/dist/ui/declare-served-fonts.test.js.map +1 -0
  443. package/dist/ui/describe-error.d.ts +71 -0
  444. package/dist/ui/describe-error.d.ts.map +1 -0
  445. package/dist/ui/describe-error.js +175 -0
  446. package/dist/ui/describe-error.js.map +1 -0
  447. package/dist/ui/describe-error.test.d.ts +2 -0
  448. package/dist/ui/describe-error.test.d.ts.map +1 -0
  449. package/dist/ui/describe-error.test.js +274 -0
  450. package/dist/ui/describe-error.test.js.map +1 -0
  451. package/dist/ui/display-mode-toggle.d.ts +32 -0
  452. package/dist/ui/display-mode-toggle.d.ts.map +1 -0
  453. package/dist/ui/display-mode-toggle.js +39 -0
  454. package/dist/ui/display-mode-toggle.js.map +1 -0
  455. package/dist/ui/error-labels.d.ts +65 -0
  456. package/dist/ui/error-labels.d.ts.map +1 -0
  457. package/dist/ui/error-labels.js +111 -0
  458. package/dist/ui/error-labels.js.map +1 -0
  459. package/dist/ui/format.d.ts +81 -0
  460. package/dist/ui/format.d.ts.map +1 -0
  461. package/dist/ui/format.js +189 -0
  462. package/dist/ui/format.js.map +1 -0
  463. package/dist/ui/format.test.d.ts +2 -0
  464. package/dist/ui/format.test.d.ts.map +1 -0
  465. package/dist/ui/format.test.js +181 -0
  466. package/dist/ui/format.test.js.map +1 -0
  467. package/dist/ui/generic-widgets.d.ts +15 -0
  468. package/dist/ui/generic-widgets.d.ts.map +1 -0
  469. package/dist/ui/generic-widgets.js +122 -0
  470. package/dist/ui/generic-widgets.js.map +1 -0
  471. package/dist/ui/generic-widgets.test.d.ts +2 -0
  472. package/dist/ui/generic-widgets.test.d.ts.map +1 -0
  473. package/dist/ui/generic-widgets.test.js +139 -0
  474. package/dist/ui/generic-widgets.test.js.map +1 -0
  475. package/dist/ui/hand-off-button.d.ts +44 -0
  476. package/dist/ui/hand-off-button.d.ts.map +1 -0
  477. package/dist/ui/hand-off-button.js +44 -0
  478. package/dist/ui/hand-off-button.js.map +1 -0
  479. package/dist/ui/hand-off-button.test.d.ts +2 -0
  480. package/dist/ui/hand-off-button.test.d.ts.map +1 -0
  481. package/dist/ui/hand-off-button.test.js +78 -0
  482. package/dist/ui/hand-off-button.test.js.map +1 -0
  483. package/dist/ui/host-context.d.ts +66 -0
  484. package/dist/ui/host-context.d.ts.map +1 -0
  485. package/dist/ui/host-context.js +122 -0
  486. package/dist/ui/host-context.js.map +1 -0
  487. package/dist/ui/host-context.test.d.ts +2 -0
  488. package/dist/ui/host-context.test.d.ts.map +1 -0
  489. package/dist/ui/host-context.test.js +160 -0
  490. package/dist/ui/host-context.test.js.map +1 -0
  491. package/dist/ui/host-document.d.ts +25 -0
  492. package/dist/ui/host-document.d.ts.map +1 -0
  493. package/dist/ui/host-document.js +93 -0
  494. package/dist/ui/host-document.js.map +1 -0
  495. package/dist/ui/host-document.test.d.ts +2 -0
  496. package/dist/ui/host-document.test.d.ts.map +1 -0
  497. package/dist/ui/host-document.test.js +112 -0
  498. package/dist/ui/host-document.test.js.map +1 -0
  499. package/dist/ui/host-widgets.d.ts +8 -0
  500. package/dist/ui/host-widgets.d.ts.map +1 -0
  501. package/dist/ui/host-widgets.js +18 -0
  502. package/dist/ui/host-widgets.js.map +1 -0
  503. package/dist/ui/humanize-key.d.ts +11 -0
  504. package/dist/ui/humanize-key.d.ts.map +1 -0
  505. package/dist/ui/humanize-key.js +26 -0
  506. package/dist/ui/humanize-key.js.map +1 -0
  507. package/dist/ui/humanize-key.test.d.ts +2 -0
  508. package/dist/ui/humanize-key.test.d.ts.map +1 -0
  509. package/dist/ui/humanize-key.test.js +42 -0
  510. package/dist/ui/humanize-key.test.js.map +1 -0
  511. package/dist/ui/icon.d.ts +37 -0
  512. package/dist/ui/icon.d.ts.map +1 -0
  513. package/dist/ui/icon.js +32 -0
  514. package/dist/ui/icon.js.map +1 -0
  515. package/dist/ui/id-breaks.d.ts +17 -0
  516. package/dist/ui/id-breaks.d.ts.map +1 -0
  517. package/dist/ui/id-breaks.js +36 -0
  518. package/dist/ui/id-breaks.js.map +1 -0
  519. package/dist/ui/id-breaks.test.d.ts +2 -0
  520. package/dist/ui/id-breaks.test.d.ts.map +1 -0
  521. package/dist/ui/id-breaks.test.js +37 -0
  522. package/dist/ui/id-breaks.test.js.map +1 -0
  523. package/dist/ui/id-text.d.ts +29 -0
  524. package/dist/ui/id-text.d.ts.map +1 -0
  525. package/dist/ui/id-text.js +103 -0
  526. package/dist/ui/id-text.js.map +1 -0
  527. package/dist/ui/id-text.test.d.ts +2 -0
  528. package/dist/ui/id-text.test.d.ts.map +1 -0
  529. package/dist/ui/id-text.test.js +122 -0
  530. package/dist/ui/id-text.test.js.map +1 -0
  531. package/dist/ui/index.d.ts +57 -0
  532. package/dist/ui/index.d.ts.map +1 -0
  533. package/dist/ui/index.js +65 -0
  534. package/dist/ui/index.js.map +1 -0
  535. package/dist/ui/index.test.d.ts +2 -0
  536. package/dist/ui/index.test.d.ts.map +1 -0
  537. package/dist/ui/index.test.js +34 -0
  538. package/dist/ui/index.test.js.map +1 -0
  539. package/dist/ui/inline-budget.d.ts +35 -0
  540. package/dist/ui/inline-budget.d.ts.map +1 -0
  541. package/dist/ui/inline-budget.js +27 -0
  542. package/dist/ui/inline-budget.js.map +1 -0
  543. package/dist/ui/inline-fit-registry.d.ts +56 -0
  544. package/dist/ui/inline-fit-registry.d.ts.map +1 -0
  545. package/dist/ui/inline-fit-registry.js +114 -0
  546. package/dist/ui/inline-fit-registry.js.map +1 -0
  547. package/dist/ui/inline-fit-solve.d.ts +50 -0
  548. package/dist/ui/inline-fit-solve.d.ts.map +1 -0
  549. package/dist/ui/inline-fit-solve.js +83 -0
  550. package/dist/ui/inline-fit-solve.js.map +1 -0
  551. package/dist/ui/inline-fit-solve.test.d.ts +2 -0
  552. package/dist/ui/inline-fit-solve.test.d.ts.map +1 -0
  553. package/dist/ui/inline-fit-solve.test.js +108 -0
  554. package/dist/ui/inline-fit-solve.test.js.map +1 -0
  555. package/dist/ui/inline-fit-time.test.d.ts +2 -0
  556. package/dist/ui/inline-fit-time.test.d.ts.map +1 -0
  557. package/dist/ui/inline-fit-time.test.js +110 -0
  558. package/dist/ui/inline-fit-time.test.js.map +1 -0
  559. package/dist/ui/inline-fit.d.ts +77 -0
  560. package/dist/ui/inline-fit.d.ts.map +1 -0
  561. package/dist/ui/inline-fit.js +242 -0
  562. package/dist/ui/inline-fit.js.map +1 -0
  563. package/dist/ui/inline-fit.test-support.d.ts +26 -0
  564. package/dist/ui/inline-fit.test-support.d.ts.map +1 -0
  565. package/dist/ui/inline-fit.test-support.js +34 -0
  566. package/dist/ui/inline-fit.test-support.js.map +1 -0
  567. package/dist/ui/inline-fit.test.d.ts +2 -0
  568. package/dist/ui/inline-fit.test.d.ts.map +1 -0
  569. package/dist/ui/inline-fit.test.js +159 -0
  570. package/dist/ui/inline-fit.test.js.map +1 -0
  571. package/dist/ui/kit-labels.d.ts +80 -0
  572. package/dist/ui/kit-labels.d.ts.map +1 -0
  573. package/dist/ui/kit-labels.js +110 -0
  574. package/dist/ui/kit-labels.js.map +1 -0
  575. package/dist/ui/kit-labels.test.d.ts +2 -0
  576. package/dist/ui/kit-labels.test.d.ts.map +1 -0
  577. package/dist/ui/kit-labels.test.js +98 -0
  578. package/dist/ui/kit-labels.test.js.map +1 -0
  579. package/dist/ui/kit-type-roles.test.d.ts +2 -0
  580. package/dist/ui/kit-type-roles.test.d.ts.map +1 -0
  581. package/dist/ui/kit-type-roles.test.js +122 -0
  582. package/dist/ui/kit-type-roles.test.js.map +1 -0
  583. package/dist/ui/komet-svg.d.ts +15 -0
  584. package/dist/ui/komet-svg.d.ts.map +1 -0
  585. package/dist/ui/komet-svg.js +21 -0
  586. package/dist/ui/komet-svg.js.map +1 -0
  587. package/dist/ui/list-table.d.ts +108 -0
  588. package/dist/ui/list-table.d.ts.map +1 -0
  589. package/dist/ui/list-table.js +161 -0
  590. package/dist/ui/list-table.js.map +1 -0
  591. package/dist/ui/list-table.test.d.ts +2 -0
  592. package/dist/ui/list-table.test.d.ts.map +1 -0
  593. package/dist/ui/list-table.test.js +169 -0
  594. package/dist/ui/list-table.test.js.map +1 -0
  595. package/dist/ui/localized-app-view.d.ts +40 -0
  596. package/dist/ui/localized-app-view.d.ts.map +1 -0
  597. package/dist/ui/localized-app-view.js +71 -0
  598. package/dist/ui/localized-app-view.js.map +1 -0
  599. package/dist/ui/log-text.d.ts +24 -0
  600. package/dist/ui/log-text.d.ts.map +1 -0
  601. package/dist/ui/log-text.js +31 -0
  602. package/dist/ui/log-text.js.map +1 -0
  603. package/dist/ui/menu-item.d.ts +12 -0
  604. package/dist/ui/menu-item.d.ts.map +1 -0
  605. package/dist/ui/menu-item.js +13 -0
  606. package/dist/ui/menu-item.js.map +1 -0
  607. package/dist/ui/named-id.d.ts +23 -0
  608. package/dist/ui/named-id.d.ts.map +1 -0
  609. package/dist/ui/named-id.js +21 -0
  610. package/dist/ui/named-id.js.map +1 -0
  611. package/dist/ui/named-id.test.d.ts +2 -0
  612. package/dist/ui/named-id.test.d.ts.map +1 -0
  613. package/dist/ui/named-id.test.js +57 -0
  614. package/dist/ui/named-id.test.js.map +1 -0
  615. package/dist/ui/native-select.d.ts +17 -0
  616. package/dist/ui/native-select.d.ts.map +1 -0
  617. package/dist/ui/native-select.js +20 -0
  618. package/dist/ui/native-select.js.map +1 -0
  619. package/dist/ui/navigation-focus.d.ts +20 -0
  620. package/dist/ui/navigation-focus.d.ts.map +1 -0
  621. package/dist/ui/navigation-focus.js +25 -0
  622. package/dist/ui/navigation-focus.js.map +1 -0
  623. package/dist/ui/navigation-focus.test.d.ts +2 -0
  624. package/dist/ui/navigation-focus.test.d.ts.map +1 -0
  625. package/dist/ui/navigation-focus.test.js +28 -0
  626. package/dist/ui/navigation-focus.test.js.map +1 -0
  627. package/dist/ui/open-in-cockpit-link.d.ts +28 -0
  628. package/dist/ui/open-in-cockpit-link.d.ts.map +1 -0
  629. package/dist/ui/open-in-cockpit-link.js +41 -0
  630. package/dist/ui/open-in-cockpit-link.js.map +1 -0
  631. package/dist/ui/paged-list-footer.test.d.ts +2 -0
  632. package/dist/ui/paged-list-footer.test.d.ts.map +1 -0
  633. package/dist/ui/paged-list-footer.test.js +128 -0
  634. package/dist/ui/paged-list-footer.test.js.map +1 -0
  635. package/dist/ui/paged-rows.d.ts +24 -0
  636. package/dist/ui/paged-rows.d.ts.map +1 -0
  637. package/dist/ui/paged-rows.js +25 -0
  638. package/dist/ui/paged-rows.js.map +1 -0
  639. package/dist/ui/parse-tool-result.test.d.ts +2 -0
  640. package/dist/ui/parse-tool-result.test.d.ts.map +1 -0
  641. package/dist/ui/parse-tool-result.test.js +88 -0
  642. package/dist/ui/parse-tool-result.test.js.map +1 -0
  643. package/dist/ui/profile-gate.d.ts +37 -0
  644. package/dist/ui/profile-gate.d.ts.map +1 -0
  645. package/dist/ui/profile-gate.js +126 -0
  646. package/dist/ui/profile-gate.js.map +1 -0
  647. package/dist/ui/profile-gate.test.d.ts +2 -0
  648. package/dist/ui/profile-gate.test.d.ts.map +1 -0
  649. package/dist/ui/profile-gate.test.js +246 -0
  650. package/dist/ui/profile-gate.test.js.map +1 -0
  651. package/dist/ui/query-fallback.d.ts +27 -0
  652. package/dist/ui/query-fallback.d.ts.map +1 -0
  653. package/dist/ui/query-fallback.js +30 -0
  654. package/dist/ui/query-fallback.js.map +1 -0
  655. package/dist/ui/query-fallback.test.d.ts +2 -0
  656. package/dist/ui/query-fallback.test.d.ts.map +1 -0
  657. package/dist/ui/query-fallback.test.js +49 -0
  658. package/dist/ui/query-fallback.test.js.map +1 -0
  659. package/dist/ui/row-card.d.ts +13 -0
  660. package/dist/ui/row-card.d.ts.map +1 -0
  661. package/dist/ui/row-card.js +11 -0
  662. package/dist/ui/row-card.js.map +1 -0
  663. package/dist/ui/section.d.ts +18 -0
  664. package/dist/ui/section.d.ts.map +1 -0
  665. package/dist/ui/section.js +14 -0
  666. package/dist/ui/section.js.map +1 -0
  667. package/dist/ui/segmented-control.d.ts +25 -0
  668. package/dist/ui/segmented-control.d.ts.map +1 -0
  669. package/dist/ui/segmented-control.js +22 -0
  670. package/dist/ui/segmented-control.js.map +1 -0
  671. package/dist/ui/settings-labels.d.ts +33 -0
  672. package/dist/ui/settings-labels.d.ts.map +1 -0
  673. package/dist/ui/settings-labels.js +50 -0
  674. package/dist/ui/settings-labels.js.map +1 -0
  675. package/dist/ui/settings-layout.d.ts +29 -0
  676. package/dist/ui/settings-layout.d.ts.map +1 -0
  677. package/dist/ui/settings-layout.js +49 -0
  678. package/dist/ui/settings-layout.js.map +1 -0
  679. package/dist/ui/settings-layout.test.d.ts +2 -0
  680. package/dist/ui/settings-layout.test.d.ts.map +1 -0
  681. package/dist/ui/settings-layout.test.js +73 -0
  682. package/dist/ui/settings-layout.test.js.map +1 -0
  683. package/dist/ui/settings.d.ts +47 -0
  684. package/dist/ui/settings.d.ts.map +1 -0
  685. package/dist/ui/settings.js +48 -0
  686. package/dist/ui/settings.js.map +1 -0
  687. package/dist/ui/settings.test.d.ts +2 -0
  688. package/dist/ui/settings.test.d.ts.map +1 -0
  689. package/dist/ui/settings.test.js +38 -0
  690. package/dist/ui/settings.test.js.map +1 -0
  691. package/dist/ui/shell-host.d.ts +46 -0
  692. package/dist/ui/shell-host.d.ts.map +1 -0
  693. package/dist/ui/shell-host.js +56 -0
  694. package/dist/ui/shell-host.js.map +1 -0
  695. package/dist/ui/shell-settings.d.ts +31 -0
  696. package/dist/ui/shell-settings.d.ts.map +1 -0
  697. package/dist/ui/shell-settings.js +97 -0
  698. package/dist/ui/shell-settings.js.map +1 -0
  699. package/dist/ui/shell-settings.test.d.ts +2 -0
  700. package/dist/ui/shell-settings.test.d.ts.map +1 -0
  701. package/dist/ui/shell-settings.test.js +108 -0
  702. package/dist/ui/shell-settings.test.js.map +1 -0
  703. package/dist/ui/shell-widgets.d.ts +14 -0
  704. package/dist/ui/shell-widgets.d.ts.map +1 -0
  705. package/dist/ui/shell-widgets.js +18 -0
  706. package/dist/ui/shell-widgets.js.map +1 -0
  707. package/dist/ui/table.d.ts +61 -0
  708. package/dist/ui/table.d.ts.map +1 -0
  709. package/dist/ui/table.js +43 -0
  710. package/dist/ui/table.js.map +1 -0
  711. package/dist/ui/tone-components.test.d.ts +2 -0
  712. package/dist/ui/tone-components.test.d.ts.map +1 -0
  713. package/dist/ui/tone-components.test.js +145 -0
  714. package/dist/ui/tone-components.test.js.map +1 -0
  715. package/dist/ui/tone-contrast.test.d.ts +2 -0
  716. package/dist/ui/tone-contrast.test.d.ts.map +1 -0
  717. package/dist/ui/tone-contrast.test.js +66 -0
  718. package/dist/ui/tone-contrast.test.js.map +1 -0
  719. package/dist/ui/toolkit-overlap.test.d.ts +2 -0
  720. package/dist/ui/toolkit-overlap.test.d.ts.map +1 -0
  721. package/dist/ui/toolkit-overlap.test.js +86 -0
  722. package/dist/ui/toolkit-overlap.test.js.map +1 -0
  723. package/dist/ui/use-apply-theme.d.ts +11 -0
  724. package/dist/ui/use-apply-theme.d.ts.map +1 -0
  725. package/dist/ui/use-apply-theme.js +37 -0
  726. package/dist/ui/use-apply-theme.js.map +1 -0
  727. package/dist/ui/use-apply-theme.test.d.ts +2 -0
  728. package/dist/ui/use-apply-theme.test.d.ts.map +1 -0
  729. package/dist/ui/use-apply-theme.test.js +102 -0
  730. package/dist/ui/use-apply-theme.test.js.map +1 -0
  731. package/dist/ui/use-bpmn-viewer.d.ts +135 -0
  732. package/dist/ui/use-bpmn-viewer.d.ts.map +1 -0
  733. package/dist/ui/use-bpmn-viewer.js +257 -0
  734. package/dist/ui/use-bpmn-viewer.js.map +1 -0
  735. package/dist/ui/use-bpmn-viewer.test.d.ts +2 -0
  736. package/dist/ui/use-bpmn-viewer.test.d.ts.map +1 -0
  737. package/dist/ui/use-bpmn-viewer.test.js +239 -0
  738. package/dist/ui/use-bpmn-viewer.test.js.map +1 -0
  739. package/dist/ui/use-detail-view.d.ts +49 -0
  740. package/dist/ui/use-detail-view.d.ts.map +1 -0
  741. package/dist/ui/use-detail-view.js +52 -0
  742. package/dist/ui/use-detail-view.js.map +1 -0
  743. package/dist/ui/use-detail-view.test.d.ts +2 -0
  744. package/dist/ui/use-detail-view.test.d.ts.map +1 -0
  745. package/dist/ui/use-detail-view.test.js +178 -0
  746. package/dist/ui/use-detail-view.test.js.map +1 -0
  747. package/dist/ui/use-paged-list-view.d.ts +48 -0
  748. package/dist/ui/use-paged-list-view.d.ts.map +1 -0
  749. package/dist/ui/use-paged-list-view.js +41 -0
  750. package/dist/ui/use-paged-list-view.js.map +1 -0
  751. package/dist/ui/use-paged-list-view.test.d.ts +2 -0
  752. package/dist/ui/use-paged-list-view.test.d.ts.map +1 -0
  753. package/dist/ui/use-paged-list-view.test.js +136 -0
  754. package/dist/ui/use-paged-list-view.test.js.map +1 -0
  755. package/dist/ui/use-paged-view-data.d.ts +103 -0
  756. package/dist/ui/use-paged-view-data.d.ts.map +1 -0
  757. package/dist/ui/use-paged-view-data.js +173 -0
  758. package/dist/ui/use-paged-view-data.js.map +1 -0
  759. package/dist/ui/use-paged-view-data.seeded.test.d.ts +2 -0
  760. package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +1 -0
  761. package/dist/ui/use-paged-view-data.seeded.test.js +144 -0
  762. package/dist/ui/use-paged-view-data.seeded.test.js.map +1 -0
  763. package/dist/ui/use-paged-view-data.test.d.ts +2 -0
  764. package/dist/ui/use-paged-view-data.test.d.ts.map +1 -0
  765. package/dist/ui/use-paged-view-data.test.js +330 -0
  766. package/dist/ui/use-paged-view-data.test.js.map +1 -0
  767. package/dist/ui/use-reset-on-change.d.ts +22 -0
  768. package/dist/ui/use-reset-on-change.d.ts.map +1 -0
  769. package/dist/ui/use-reset-on-change.js +29 -0
  770. package/dist/ui/use-reset-on-change.js.map +1 -0
  771. package/dist/ui/use-reset-on-change.test.d.ts +2 -0
  772. package/dist/ui/use-reset-on-change.test.d.ts.map +1 -0
  773. package/dist/ui/use-reset-on-change.test.js +61 -0
  774. package/dist/ui/use-reset-on-change.test.js.map +1 -0
  775. package/dist/ui/use-view-data.seeded.test.d.ts +2 -0
  776. package/dist/ui/use-view-data.seeded.test.d.ts.map +1 -0
  777. package/dist/ui/use-view-data.seeded.test.js +168 -0
  778. package/dist/ui/use-view-data.seeded.test.js.map +1 -0
  779. package/dist/ui/view-data-state.d.ts +52 -0
  780. package/dist/ui/view-data-state.d.ts.map +1 -0
  781. package/dist/ui/view-data-state.js +54 -0
  782. package/dist/ui/view-data-state.js.map +1 -0
  783. package/dist/ui/view-data-state.test.d.ts +2 -0
  784. package/dist/ui/view-data-state.test.d.ts.map +1 -0
  785. package/dist/ui/view-data-state.test.js +62 -0
  786. package/dist/ui/view-data-state.test.js.map +1 -0
  787. package/dist/ui/view-meta.d.ts +70 -0
  788. package/dist/ui/view-meta.d.ts.map +1 -0
  789. package/dist/ui/view-meta.js +84 -0
  790. package/dist/ui/view-meta.js.map +1 -0
  791. package/dist/ui/view-meta.test.d.ts +2 -0
  792. package/dist/ui/view-meta.test.d.ts.map +1 -0
  793. package/dist/ui/view-meta.test.js +92 -0
  794. package/dist/ui/view-meta.test.js.map +1 -0
  795. package/dist/ui/view-refresh-state.d.ts +26 -0
  796. package/dist/ui/view-refresh-state.d.ts.map +1 -0
  797. package/dist/ui/view-refresh-state.js +15 -0
  798. package/dist/ui/view-refresh-state.js.map +1 -0
  799. package/dist/ui/widget-shell.d.ts +24 -0
  800. package/dist/ui/widget-shell.d.ts.map +1 -0
  801. package/dist/ui/widget-shell.js +50 -0
  802. package/dist/ui/widget-shell.js.map +1 -0
  803. package/dist/ui/widget-shell.test.d.ts +2 -0
  804. package/dist/ui/widget-shell.test.d.ts.map +1 -0
  805. package/dist/ui/widget-shell.test.js +41 -0
  806. package/dist/ui/widget-shell.test.js.map +1 -0
  807. package/dist/view-results.d.ts +42 -0
  808. package/dist/view-results.d.ts.map +1 -0
  809. package/dist/view-results.js +17 -0
  810. package/dist/view-results.js.map +1 -0
  811. package/dist/widget-meta-defaults.d.ts +48 -0
  812. package/dist/widget-meta-defaults.d.ts.map +1 -0
  813. package/dist/widget-meta-defaults.js +80 -0
  814. package/dist/widget-meta-defaults.js.map +1 -0
  815. package/dist/widget-meta-defaults.test.d.ts +2 -0
  816. package/dist/widget-meta-defaults.test.d.ts.map +1 -0
  817. package/dist/widget-meta-defaults.test.js +196 -0
  818. package/dist/widget-meta-defaults.test.js.map +1 -0
  819. package/dist/widget-tool-bindings.d.ts +71 -0
  820. package/dist/widget-tool-bindings.d.ts.map +1 -0
  821. package/dist/widget-tool-bindings.js +80 -0
  822. package/dist/widget-tool-bindings.js.map +1 -0
  823. package/dist/widget-tool-bindings.test.d.ts +2 -0
  824. package/dist/widget-tool-bindings.test.d.ts.map +1 -0
  825. package/dist/widget-tool-bindings.test.js +83 -0
  826. package/dist/widget-tool-bindings.test.js.map +1 -0
  827. package/dist/with-tool-errors.test.d.ts +2 -0
  828. package/dist/with-tool-errors.test.d.ts.map +1 -0
  829. package/dist/with-tool-errors.test.js +38 -0
  830. package/dist/with-tool-errors.test.js.map +1 -0
  831. package/package.json +113 -3
@@ -0,0 +1,155 @@
1
+ import type { AppConfig, AppConfigEntry, AppPlugin } from "@miragon/mcp-toolkit-core";
2
+ import type { MCPServer } from "mcp-use";
3
+ import type { ToolsetSource, ToolsetVocabulary } from "./toolsets.js";
4
+ /**
5
+ * The composition-root machinery every server (the stock app AND a customer's
6
+ * composed server) previously copied: module selection via
7
+ * `MCP_ACTIVE_MODULES` (with the `module:toolset` suffix), the env-typo
8
+ * warner, boot warnings, and the mcp-use `AppConfig`/plugin assembly.
9
+ *
10
+ * The module PORT SHAPE lives here ({@link ComposableModule}); what stays
11
+ * app-owned by design is its instantiation: each composition root declares its
12
+ * own shared-resources type (`ComposableModule<MyShared>`), its module list,
13
+ * and the cross-module wiring — which module's capability reaches which other
14
+ * module is configuration knowledge, never a module-to-module import.
15
+ * Modules keep conforming STRUCTURALLY and never import this type.
16
+ */
17
+ export interface ComposableModule<TShared> {
18
+ /** Module key used in `MCP_ACTIVE_MODULES` and as the `activeApps` entry name. */
19
+ name: string;
20
+ /** Pure env → raw-config mapping; must not read `process.env` or perform I/O side effects beyond config sources. */
21
+ configFromEnv(env: NodeJS.ProcessEnv): Record<string, unknown>;
22
+ /** Env vars this module reads — composed into the root's unknown-var typo warner. */
23
+ knownEnvVars: readonly string[];
24
+ /**
25
+ * The module's toolset vocabulary (`createToolsetVocabulary`). Declaring it
26
+ * opts the module into the `module:toolset` suffix: the composition resolves
27
+ * ONE concrete toolset per boot — the suffix, or the auth-dependent default,
28
+ * never "everything" — and threads it into `config.toolset`. Absent = the
29
+ * module has no toolsets: a suffix is ignored (with a warning) and its config
30
+ * never carries a `toolset`.
31
+ */
32
+ toolsets?: ToolsetVocabulary<string>;
33
+ /** Optional boot-time hints (returned, and logged by the root) for active deployments. */
34
+ bootWarnings?(env: NodeJS.ProcessEnv): string[];
35
+ /**
36
+ * Optional model-facing usage notes for this module — routing rules,
37
+ * argument conventions, which tool answers which question — joined into
38
+ * the server `instructions` ({@link ModuleComposition.instructions}), so
39
+ * the rule is stated ONCE instead of in every tool description. Receives
40
+ * the module's boot config (incl. its effective `toolset`) and the boot's
41
+ * auth mode; `undefined` contributes nothing.
42
+ */
43
+ instructions?(config: Record<string, unknown>, context: InstructionsContext): string | undefined;
44
+ /** Validates the raw config and builds the plugin; receives the shared resources. */
45
+ createPlugin(config: Record<string, unknown>, shared: TShared): AppPlugin<MCPServer>;
46
+ }
47
+ /** What a module's {@link ComposableModule.instructions} may depend on besides its config. */
48
+ export interface InstructionsContext {
49
+ /** Whether the root installed OAuth — a caller identity (and per-user saves) exists. */
50
+ authenticated: boolean;
51
+ }
52
+ export interface ActiveModuleRef {
53
+ name: string;
54
+ /**
55
+ * The raw toolset suffix from the `module:toolset` syntax, e.g.
56
+ * `camunda7:read-only` — trimmed, and kept even when EMPTY (`camunda7:` →
57
+ * `""`), so an empty suffix fails closed like an unknown one instead of
58
+ * reading as "no suffix". Absent = no suffix: the auth-dependent default.
59
+ */
60
+ toolset?: string;
61
+ }
62
+ /** The toolset one active module runs with — one entry of the boot log. */
63
+ export interface EffectiveToolset {
64
+ module: string;
65
+ /** The concrete toolset; absent for a module without toolsets. */
66
+ toolset?: string;
67
+ /**
68
+ * Why: the suffix named it, the auth-dependent default applied, an empty or
69
+ * unknown suffix fell back to the floor — or `none` for a module without
70
+ * toolsets.
71
+ */
72
+ source: ToolsetSource | "none";
73
+ /**
74
+ * Whether the toolset permits durable writes. A module without toolsets
75
+ * declares no restriction (`true`).
76
+ */
77
+ durableWrites: boolean;
78
+ }
79
+ /** One boot's module selection, resolved ONCE by the composition root. */
80
+ export interface ResolvedBoot {
81
+ /** Whether the root installed OAuth (a caller identity exists). */
82
+ authenticated: boolean;
83
+ /** The active modules' mcp-use config entries, each carrying its effective toolset. */
84
+ entries: AppConfigEntry[];
85
+ toolsets: EffectiveToolset[];
86
+ }
87
+ export interface ResolveBootOptions {
88
+ /**
89
+ * Whether the composition root INSTALLED OAuth on `/mcp`. Only the root
90
+ * knows — never infer it from an env var the root may not honor (a server
91
+ * without OAuth wiring would read a stray `MCP_OAUTH` as authenticated and
92
+ * fail open). Omitted = `false`, the fail-closed reading.
93
+ */
94
+ authenticated?: boolean;
95
+ }
96
+ /**
97
+ * All members are `this`-free closures (function properties, not methods), so
98
+ * composition roots may destructure or re-export them directly
99
+ * (`export const warnUnknownEnvVars = composition.warnUnknownEnvVars`).
100
+ */
101
+ export interface ModuleComposition<TShared> {
102
+ /** Every known env var: the root's own plus each module's slice. */
103
+ knownEnvVars: ReadonlySet<string>;
104
+ /** The `MCP_ACTIVE_MODULES` selection (unset/`all` = every module); unknown names warn and are skipped. */
105
+ activeModules: (env?: NodeJS.ProcessEnv) => ActiveModuleRef[];
106
+ /**
107
+ * Resolve the boot ONCE: every toolset-bearing module gets a concrete
108
+ * effective toolset in its config (suffix → itself; empty/unknown → the
109
+ * module's floor, with one warning; none → the floor without OAuth, the
110
+ * module's standard toolset with it). Call it once per boot and derive
111
+ * plugins, `AppConfig` and the boot log from the result.
112
+ */
113
+ resolveBoot: (env?: NodeJS.ProcessEnv, options?: ResolveBootOptions) => ResolvedBoot;
114
+ /** `resolveBoot(env, options).entries`. */
115
+ appEntries: (env?: NodeJS.ProcessEnv, options?: ResolveBootOptions) => AppConfigEntry[];
116
+ appConfig: (env?: NodeJS.ProcessEnv, options?: ResolveBootOptions) => AppConfig;
117
+ /** Instantiate the active modules' plugins with the root's shared resources. */
118
+ pluginsFor: (entries: AppConfigEntry[], shared: TShared) => AppPlugin<MCPServer>[];
119
+ /** Report unknown env vars under any watched prefix; returns the offenders. */
120
+ warnUnknownEnvVars: (env?: NodeJS.ProcessEnv, extraKnown?: Iterable<string>) => string[];
121
+ /** Collect + log the active modules' boot-time hints. */
122
+ emitBootWarnings: (env?: NodeJS.ProcessEnv) => string[];
123
+ /** Log (console.info) and return the one boot line that states each active module's effective toolset. */
124
+ logEffectiveToolsets: (boot: ResolvedBoot) => string;
125
+ /**
126
+ * The active modules' instruction snippets for this boot, in module order,
127
+ * joined by a blank line — `undefined` when none contributes. The root
128
+ * prepends its own preamble (`createComposedServer` does).
129
+ */
130
+ instructions: (boot: ResolvedBoot) => string | undefined;
131
+ }
132
+ export declare function composeModules<TShared>(options: {
133
+ /** Log prefix for every warning, e.g. `pulse`. */
134
+ label: string;
135
+ modules: readonly ComposableModule<TShared>[];
136
+ /** The root's own env vars (module vars come from each module's `knownEnvVars`). */
137
+ appEnvVars?: readonly string[];
138
+ /**
139
+ * Prefixes owned by dependencies, exempt from the typo warner
140
+ * (mcp-use itself + the dev inspector by default).
141
+ */
142
+ foreignEnvPrefixes?: readonly string[];
143
+ /** Optional pointer appended to the unknown-var warning, e.g. `see docs/operations.md`. */
144
+ envVarHint?: string;
145
+ }): ModuleComposition<TShared>;
146
+ /**
147
+ * Whether the server may register FRAMEWORK durable writes — the toolkit
148
+ * builder's `save-dashboard`/`delete-dashboard` and the shell's
149
+ * `shell_save_settings`, which no module toolset filters. Only with a caller
150
+ * identity (records are keyed by user; without OAuth every record is shared
151
+ * and ownerless) and only when no active module sits on its read-only floor:
152
+ * the most restrictive module wins.
153
+ */
154
+ export declare function frameworkWritesAllowed(boot: ResolvedBoot): boolean;
155
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ export function composeModules(options) {
2
+ const { label, modules, appEnvVars = [], foreignEnvPrefixes = ["MCP_USE_", "MCP_INSPECTOR_"], envVarHint, } = options;
3
+ const registry = Object.fromEntries(modules.map((m) => [m.name, m]));
4
+ const knownEnvVars = new Set([...appEnvVars, ...modules.flatMap((m) => [...m.knownEnvVars])]);
5
+ // Watched prefixes derive from every known var (NOTES_TITLE contributes
6
+ // NOTES_, PROMETHEUS_URL contributes PROMETHEUS_, …) so custom modules get
7
+ // the same typo coverage as the CAMUNDA_/MCP_ families — a hardcoded prefix
8
+ // list would silently exempt every non-Camunda module.
9
+ const watchedPrefixes = [
10
+ ...new Set([...knownEnvVars]
11
+ .map((name) => name.slice(0, name.indexOf("_") + 1))
12
+ .filter((prefix) => prefix.length > 1)),
13
+ ];
14
+ /**
15
+ * `MCP_ACTIVE_MODULES` → the known modules (with their raw suffix) and the
16
+ * unknown names. Deliberately not the toolkit's `parseActiveModules`: that
17
+ * one reads an empty qualifier (`camunda7:`) as no qualifier, which would
18
+ * turn it into the auth-dependent default instead of failing closed. A name
19
+ * that appears twice is refused — two entries would build two plugins with
20
+ * colliding steps, and which suffix wins would be a guess.
21
+ */
22
+ const parseActiveModules = (env) => {
23
+ const envValue = env.MCP_ACTIVE_MODULES?.trim();
24
+ if (!envValue || envValue === "all") {
25
+ return { known: modules.map(({ name }) => ({ name })), unknown: [] };
26
+ }
27
+ const refs = envValue
28
+ .split(",")
29
+ .map((s) => s.trim())
30
+ .filter(Boolean)
31
+ .map((entry) => {
32
+ // Everything after the FIRST colon is the suffix, kept even when empty
33
+ // or when it contains further colons — both are then unknown toolset
34
+ // names and fail closed, instead of reading as "no suffix".
35
+ const colon = entry.indexOf(":");
36
+ if (colon === -1)
37
+ return { name: entry };
38
+ return { name: entry.slice(0, colon).trim(), toolset: entry.slice(colon + 1).trim() };
39
+ });
40
+ const repeated = [...new Set(refs.map(({ name }) => name))].filter((name) => refs.filter((ref) => ref.name === name).length > 1);
41
+ if (repeated.length > 0) {
42
+ throw new Error(`[${label}] MCP_ACTIVE_MODULES names ${repeated.map((name) => `"${name}"`).join(", ")} more than once — list each module once, with at most one :toolset.`);
43
+ }
44
+ return {
45
+ known: refs.filter(({ name }) => registry[name]),
46
+ unknown: refs.filter(({ name }) => !registry[name]).map(({ name }) => name),
47
+ };
48
+ };
49
+ /** The known active modules; the unknown ones warn once per boot, in `emitBootWarnings`. */
50
+ const activeModules = (env = process.env) => parseActiveModules(env).known;
51
+ // The one place a suffix becomes a toolset: per module, per boot.
52
+ const effectiveToolset = (module, suffix, authenticated) => {
53
+ const vocabulary = module.toolsets;
54
+ if (vocabulary) {
55
+ const { toolset, source } = vocabulary.effective(suffix, { authenticated });
56
+ return {
57
+ module: module.name,
58
+ toolset,
59
+ source,
60
+ durableWrites: vocabulary.allowsDurableWrites(toolset),
61
+ };
62
+ }
63
+ if (suffix !== undefined) {
64
+ console.warn(`[${label}] Module "${module.name}" has no toolsets — ignoring ":${suffix}"`);
65
+ }
66
+ return { module: module.name, source: "none", durableWrites: true };
67
+ };
68
+ const resolveBoot = (env = process.env, { authenticated = false } = {}) => {
69
+ const toolsets = [];
70
+ const entries = activeModules(env).map(({ name, toolset: suffix }) => {
71
+ const effective = effectiveToolset(registry[name], suffix, authenticated);
72
+ toolsets.push(effective);
73
+ const { toolset } = effective;
74
+ return {
75
+ app: name,
76
+ config: {
77
+ ...registry[name].configFromEnv(env),
78
+ ...(toolset === undefined ? {} : { toolset }),
79
+ },
80
+ };
81
+ });
82
+ return { authenticated, entries, toolsets };
83
+ };
84
+ const appEntries = (env, options) => resolveBoot(env, options).entries;
85
+ return {
86
+ knownEnvVars,
87
+ activeModules,
88
+ resolveBoot,
89
+ appEntries,
90
+ appConfig(env, options) {
91
+ return { activeApps: appEntries(env, options), pipelines: {} };
92
+ },
93
+ pluginsFor(entries, shared) {
94
+ return entries
95
+ .filter((entry) => registry[entry.app])
96
+ .map((entry) => registry[entry.app].createPlugin(entry.config, shared));
97
+ },
98
+ warnUnknownEnvVars(env = process.env, extraKnown = []) {
99
+ const known = new Set([...knownEnvVars, ...extraKnown]);
100
+ // `<KNOWN_VAR>_*` extensions (DATABASE_URL_FILE, REDIS_URL_2, …) are
101
+ // conventions addressed at OTHER processes — docker secrets, sidecars —
102
+ // never a typo of the var they extend, so they don't warn.
103
+ const extendsKnownVar = (name) => [...known].some((knownName) => name.startsWith(`${knownName}_`));
104
+ const unknown = Object.keys(env).filter((name) => watchedPrefixes.some((prefix) => name.startsWith(prefix)) &&
105
+ !known.has(name) &&
106
+ !extendsKnownVar(name) &&
107
+ !foreignEnvPrefixes.some((prefix) => name.startsWith(prefix)));
108
+ for (const name of unknown) {
109
+ console.warn(`[${label}] Unknown environment variable "${name}" — the server does not read it; ` +
110
+ `check for a typo${envVarHint ? ` (${envVarHint})` : ""}.`);
111
+ }
112
+ return unknown;
113
+ },
114
+ emitBootWarnings(env = process.env) {
115
+ // Deliberately separate from `configFromEnv` (which runs inside
116
+ // `resolveBoot` and stays side-effect free).
117
+ const { known, unknown } = parseActiveModules(env);
118
+ const warnings = [
119
+ ...unknown.map((name) => `Unknown module "${name}" in MCP_ACTIVE_MODULES — skipping`),
120
+ ...known.flatMap(({ name }) => registry[name].bootWarnings?.(env) ?? []),
121
+ ];
122
+ for (const warning of warnings) {
123
+ console.warn(`[${label}] ${warning}`);
124
+ }
125
+ return warnings;
126
+ },
127
+ logEffectiveToolsets(boot) {
128
+ // console.info, deliberately not a boot WARNING: it states the surface
129
+ // on every boot, the restrictive default included.
130
+ const describe = ({ module, toolset, source }) => {
131
+ if (toolset === undefined)
132
+ return `${module} (no toolsets)`;
133
+ if (source === "default") {
134
+ return `${module}:${toolset} (default ${boot.authenticated ? "with" : "without"} OAuth)`;
135
+ }
136
+ return `${module}:${toolset} (${source})`;
137
+ };
138
+ const modules = boot.toolsets.map(describe).join(", ");
139
+ const line = `[${label}] Toolsets — ${modules || "no active modules"}`;
140
+ console.info(line);
141
+ return line;
142
+ },
143
+ instructions(boot) {
144
+ const context = { authenticated: boot.authenticated };
145
+ const snippets = boot.entries
146
+ .map((entry) => registry[entry.app]?.instructions?.(entry.config, context)?.trim())
147
+ .filter((snippet) => Boolean(snippet));
148
+ return snippets.length > 0 ? snippets.join("\n\n") : undefined;
149
+ },
150
+ };
151
+ }
152
+ /**
153
+ * Whether the server may register FRAMEWORK durable writes — the toolkit
154
+ * builder's `save-dashboard`/`delete-dashboard` and the shell's
155
+ * `shell_save_settings`, which no module toolset filters. Only with a caller
156
+ * identity (records are keyed by user; without OAuth every record is shared
157
+ * and ownerless) and only when no active module sits on its read-only floor:
158
+ * the most restrictive module wins.
159
+ */
160
+ export function frameworkWritesAllowed(boot) {
161
+ return boot.authenticated && boot.toolsets.every(({ durableWrites }) => durableWrites);
162
+ }
163
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=composition.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.test.d.ts","sourceRoot":"","sources":["../src/composition.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,275 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { composeModules, frameworkWritesAllowed, } from "./composition.js";
3
+ import { createToolsetVocabulary } from "./toolsets.js";
4
+ const moduleOf = (name, overrides = {}) => ({
5
+ name,
6
+ configFromEnv: (env) => ({ url: env[`${name.toUpperCase()}_URL`] ?? "default" }),
7
+ knownEnvVars: [`${name.toUpperCase()}_URL`],
8
+ toolsets: createToolsetVocabulary(name, ["read-only", "operations", "admin"], "read-only", {
9
+ authenticatedDefault: "operations",
10
+ }),
11
+ createPlugin: (config, shared) => ({ definition: { name }, config, shared }),
12
+ ...overrides,
13
+ });
14
+ const compose = (modules = [moduleOf("alpha"), moduleOf("beta")]) => composeModules({
15
+ label: "test-root",
16
+ modules,
17
+ appEnvVars: ["MCP_ACTIVE_MODULES", "MCP_PROFILE_DIR"],
18
+ });
19
+ afterEach(() => {
20
+ vi.restoreAllMocks();
21
+ });
22
+ describe("activeModules / appEntries", () => {
23
+ it("activates every module when MCP_ACTIVE_MODULES is unset or 'all'", () => {
24
+ expect(compose().activeModules({})).toEqual([{ name: "alpha" }, { name: "beta" }]);
25
+ expect(compose().activeModules({ MCP_ACTIVE_MODULES: "all" })).toEqual([
26
+ { name: "alpha" },
27
+ { name: "beta" },
28
+ ]);
29
+ });
30
+ it("parses the comma list with optional module:toolset suffixes", () => {
31
+ expect(compose().activeModules({ MCP_ACTIVE_MODULES: "beta:read-only, alpha" })).toEqual([
32
+ { name: "beta", toolset: "read-only" },
33
+ { name: "alpha" },
34
+ ]);
35
+ });
36
+ it("keeps an EMPTY suffix distinct from no suffix, trims both halves, keeps extra colons", () => {
37
+ expect(compose().activeModules({ MCP_ACTIVE_MODULES: "alpha:, beta : admin:read-only" })).toEqual([
38
+ { name: "alpha", toolset: "" },
39
+ { name: "beta", toolset: "admin:read-only" },
40
+ ]);
41
+ });
42
+ it("skips unknown modules, warning ONCE per boot in the boot warnings", () => {
43
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
44
+ const env = { MCP_ACTIVE_MODULES: "nope:read-only,alpha" };
45
+ const composition = compose();
46
+ expect(composition.activeModules(env)).toEqual([{ name: "alpha" }]);
47
+ composition.resolveBoot(env);
48
+ expect(warn).not.toHaveBeenCalled();
49
+ composition.emitBootWarnings(env);
50
+ expect(warn).toHaveBeenCalledOnce();
51
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining('[test-root] Unknown module "nope"'));
52
+ });
53
+ it("refuses a module named twice, whichever suffixes it carries", () => {
54
+ for (const value of ["alpha,alpha:read-only", "alpha:admin, beta, alpha"]) {
55
+ expect(() => compose().resolveBoot({ MCP_ACTIVE_MODULES: value })).toThrow(/MCP_ACTIVE_MODULES names "alpha" more than once/);
56
+ }
57
+ });
58
+ it("threads the EFFECTIVE toolset into every module config; config comes from configFromEnv(env)", () => {
59
+ const entries = compose().appEntries({
60
+ MCP_ACTIVE_MODULES: "alpha:admin,beta",
61
+ ALPHA_URL: "http://a",
62
+ });
63
+ expect(entries).toEqual([
64
+ { app: "alpha", config: { url: "http://a", toolset: "admin" } },
65
+ { app: "beta", config: { url: "default", toolset: "read-only" } },
66
+ ]);
67
+ });
68
+ it("strips the toolset suffix (warning) for modules without toolsets", () => {
69
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
70
+ const modules = [moduleOf("alpha", { toolsets: undefined })];
71
+ const entries = compose(modules).appEntries({ MCP_ACTIVE_MODULES: "alpha:read-only" });
72
+ expect(entries[0].config).not.toHaveProperty("toolset");
73
+ expect(warn).toHaveBeenCalledWith('[test-root] Module "alpha" has no toolsets — ignoring ":read-only"');
74
+ });
75
+ it("passes no raw suffix through: the removed supportsToolsets flag makes no module toolset-bearing", () => {
76
+ // The pass-through is gone — a module declares a `toolsets` vocabulary
77
+ // or has none. A definition still carrying the old flag is a module
78
+ // WITHOUT toolsets: its suffix is ignored (warning) and its config never
79
+ // carries an unresolved name it might read as "everything".
80
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
81
+ const stale = { ...moduleOf("alpha", { toolsets: undefined }), supportsToolsets: true };
82
+ const composition = compose([stale]);
83
+ const boot = composition.resolveBoot({ MCP_ACTIVE_MODULES: "alpha:admin" }, { authenticated: true });
84
+ expect(boot.entries[0].config).not.toHaveProperty("toolset");
85
+ expect(boot.toolsets).toEqual([{ module: "alpha", source: "none", durableWrites: true }]);
86
+ expect(warn).toHaveBeenCalledTimes(1);
87
+ expect(warn).toHaveBeenCalledWith('[test-root] Module "alpha" has no toolsets — ignoring ":admin"');
88
+ vi.spyOn(console, "info").mockImplementation(() => { });
89
+ expect(composition.logEffectiveToolsets(boot)).toBe("[test-root] Toolsets — alpha (no toolsets)");
90
+ });
91
+ it("appConfig wraps the entries in the mcp-use shape", () => {
92
+ expect(compose().appConfig({ MCP_ACTIVE_MODULES: "alpha" })).toEqual({
93
+ activeApps: [{ app: "alpha", config: { url: "default", toolset: "read-only" } }],
94
+ pipelines: {},
95
+ });
96
+ expect(compose().appConfig({ MCP_ACTIVE_MODULES: "alpha" }, { authenticated: true })).toEqual({
97
+ activeApps: [{ app: "alpha", config: { url: "default", toolset: "operations" } }],
98
+ pipelines: {},
99
+ });
100
+ });
101
+ });
102
+ describe("resolveBoot — the fail-closed toolset rule", () => {
103
+ const toolsetsOf = (boot) => Object.fromEntries(boot.toolsets.map(({ module, toolset }) => [module, toolset]));
104
+ it.each([undefined, "", "all", "alpha,beta"])("MCP_ACTIVE_MODULES=%j defaults to the floor without OAuth and to the standard toolset with it — never admin", (value) => {
105
+ const env = value === undefined ? {} : { MCP_ACTIVE_MODULES: value };
106
+ const anonymous = compose().resolveBoot(env);
107
+ expect(anonymous.authenticated).toBe(false);
108
+ expect(toolsetsOf(anonymous)).toEqual({ alpha: "read-only", beta: "read-only" });
109
+ expect(anonymous.toolsets.every(({ source }) => source === "default")).toBe(true);
110
+ expect(toolsetsOf(compose().resolveBoot(env, { authenticated: true }))).toEqual({
111
+ alpha: "operations",
112
+ beta: "operations",
113
+ });
114
+ });
115
+ it.each(["alpha:,beta:", "alpha: ,beta: ", "alpha:bogus,beta:admin:read-only"])("empty or unknown suffixes (%j) fail closed to the floor, even under OAuth", (value) => {
116
+ vi.spyOn(console, "warn").mockImplementation(() => { });
117
+ const boot = compose().resolveBoot({ MCP_ACTIVE_MODULES: value }, { authenticated: true });
118
+ expect(toolsetsOf(boot)).toEqual({ alpha: "read-only", beta: "read-only" });
119
+ expect(boot.toolsets.every(({ source }) => source === "fallback")).toBe(true);
120
+ expect(boot.entries.map(({ config }) => config.toolset)).toEqual(["read-only", "read-only"]);
121
+ });
122
+ it("an explicit suffix wins over the default in both auth modes", () => {
123
+ for (const authenticated of [false, true]) {
124
+ const boot = compose().resolveBoot({ MCP_ACTIVE_MODULES: "alpha:admin,beta:read-only" }, { authenticated });
125
+ expect(toolsetsOf(boot)).toEqual({ alpha: "admin", beta: "read-only" });
126
+ expect(boot.toolsets.map(({ source }) => source)).toEqual(["suffix", "suffix"]);
127
+ }
128
+ });
129
+ it("warns ONCE per boot for an unknown suffix", () => {
130
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
131
+ compose().resolveBoot({ MCP_ACTIVE_MODULES: "alpha:typo" });
132
+ expect(warn).toHaveBeenCalledTimes(1);
133
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining('[alpha] Unknown toolset "typo"'));
134
+ });
135
+ it("reports whether each effective toolset permits durable writes", () => {
136
+ const boot = compose().resolveBoot({ MCP_ACTIVE_MODULES: "alpha:operations,beta" });
137
+ expect(boot.toolsets).toEqual([
138
+ { module: "alpha", toolset: "operations", source: "suffix", durableWrites: true },
139
+ { module: "beta", toolset: "read-only", source: "default", durableWrites: false },
140
+ ]);
141
+ });
142
+ it("leaves modules without toolsets unrestricted and toolset-free", () => {
143
+ const boot = compose([moduleOf("alpha", { toolsets: undefined })]).resolveBoot({});
144
+ expect(boot.toolsets).toEqual([{ module: "alpha", source: "none", durableWrites: true }]);
145
+ expect(boot.entries[0].config).not.toHaveProperty("toolset");
146
+ });
147
+ });
148
+ describe("logEffectiveToolsets", () => {
149
+ it("logs ONE info line naming each module's toolset and why", () => {
150
+ const info = vi.spyOn(console, "info").mockImplementation(() => { });
151
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
152
+ const modules = [
153
+ moduleOf("alpha"),
154
+ moduleOf("beta"),
155
+ moduleOf("gamma", { toolsets: undefined }),
156
+ ];
157
+ const composition = compose(modules);
158
+ const boot = composition.resolveBoot({ MCP_ACTIVE_MODULES: "alpha:admin,beta:typo,gamma" });
159
+ const line = composition.logEffectiveToolsets(boot);
160
+ expect(line).toBe("[test-root] Toolsets — alpha:admin (suffix), beta:read-only (fallback), gamma (no toolsets)");
161
+ expect(info).toHaveBeenCalledTimes(1);
162
+ expect(info).toHaveBeenCalledWith(line);
163
+ expect(warn).toHaveBeenCalledTimes(1); // the typo, nothing from the log itself
164
+ });
165
+ it("names the auth mode behind a default", () => {
166
+ vi.spyOn(console, "info").mockImplementation(() => { });
167
+ const composition = compose([moduleOf("alpha"), moduleOf("beta", { toolsets: undefined })]);
168
+ const env = { MCP_ACTIVE_MODULES: "alpha,beta" };
169
+ expect(composition.logEffectiveToolsets(composition.resolveBoot(env))).toBe("[test-root] Toolsets — alpha:read-only (default without OAuth), beta (no toolsets)");
170
+ expect(composition.logEffectiveToolsets(composition.resolveBoot(env, { authenticated: true }))).toBe("[test-root] Toolsets — alpha:operations (default with OAuth), beta (no toolsets)");
171
+ });
172
+ it("says so when no module is active", () => {
173
+ vi.spyOn(console, "info").mockImplementation(() => { });
174
+ vi.spyOn(console, "warn").mockImplementation(() => { });
175
+ const composition = compose();
176
+ expect(composition.logEffectiveToolsets(composition.resolveBoot({ MCP_ACTIVE_MODULES: "nope" }))).toBe("[test-root] Toolsets — no active modules");
177
+ });
178
+ });
179
+ describe("instructions", () => {
180
+ const instructed = (name) => moduleOf(name, {
181
+ instructions: (config, { authenticated }) => `${name}: toolset ${String(config.toolset)}, url ${String(config.url)}, ` +
182
+ `${authenticated ? "signed in" : "anonymous"}`,
183
+ });
184
+ it("joins the ACTIVE modules' snippets in selection order, each from its own boot config", () => {
185
+ const composition = compose([instructed("alpha"), instructed("beta"), instructed("gamma")]);
186
+ const boot = composition.resolveBoot({ MCP_ACTIVE_MODULES: "beta:admin,alpha", ALPHA_URL: "http://a" }, { authenticated: true });
187
+ expect(composition.instructions(boot)).toBe("beta: toolset admin, url default, signed in\n\n" +
188
+ "alpha: toolset operations, url http://a, signed in");
189
+ });
190
+ it("skips modules without a snippet or with an empty one; none at all is undefined", () => {
191
+ const composition = compose([
192
+ instructed("alpha"),
193
+ moduleOf("beta"),
194
+ moduleOf("gamma", { instructions: () => " " }),
195
+ ]);
196
+ expect(composition.instructions(composition.resolveBoot({}))).toBe("alpha: toolset read-only, url default, anonymous");
197
+ expect(composition.instructions(composition.resolveBoot({ MCP_ACTIVE_MODULES: "beta,gamma" }))).toBeUndefined();
198
+ });
199
+ });
200
+ describe("frameworkWritesAllowed", () => {
201
+ const boot = (authenticated, env) => compose([
202
+ moduleOf("alpha"),
203
+ moduleOf("beta"),
204
+ moduleOf("gamma", { toolsets: undefined }),
205
+ ]).resolveBoot(env, { authenticated });
206
+ it("requires OAuth — without a caller identity framework records are ownerless", () => {
207
+ expect(frameworkWritesAllowed(boot(false, { MCP_ACTIVE_MODULES: "alpha:admin,beta:admin" }))).toBe(false);
208
+ });
209
+ it("allows them under OAuth when every module permits durable writes", () => {
210
+ expect(frameworkWritesAllowed(boot(true, {}))).toBe(true);
211
+ expect(frameworkWritesAllowed(boot(true, { MCP_ACTIVE_MODULES: "alpha:admin,gamma" }))).toBe(true);
212
+ });
213
+ it("refuses them when ANY module sits on its read-only floor — the most restrictive wins", () => {
214
+ expect(frameworkWritesAllowed(boot(true, { MCP_ACTIVE_MODULES: "alpha:admin,beta:read-only" }))).toBe(false);
215
+ });
216
+ });
217
+ describe("pluginsFor", () => {
218
+ it("instantiates each entry's plugin with the shared resources", () => {
219
+ const composition = compose();
220
+ const entries = composition.appEntries({ MCP_ACTIVE_MODULES: "beta" });
221
+ const plugins = composition.pluginsFor(entries, { tag: "shared-1" });
222
+ expect(plugins).toHaveLength(1);
223
+ expect(plugins[0]).toMatchObject({ shared: { tag: "shared-1" } });
224
+ });
225
+ });
226
+ describe("warnUnknownEnvVars", () => {
227
+ it("watches every prefix derived from known vars, not just a hardcoded family", () => {
228
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
229
+ const unknown = compose().warnUnknownEnvVars({
230
+ ALPHA_URLX: "typo", // derived prefix ALPHA_
231
+ MCP_PROFILE_DIRX: "typo", // derived prefix MCP_
232
+ PATH: "/usr/bin", // unwatched prefix
233
+ BETA_URL: "http://ok", // known
234
+ });
235
+ expect(unknown.sort()).toEqual(["ALPHA_URLX", "MCP_PROFILE_DIRX"]);
236
+ expect(warn).toHaveBeenCalledTimes(2);
237
+ });
238
+ it("exempts foreign prefixes and honors the extra allowlist", () => {
239
+ expect(compose().warnUnknownEnvVars({ MCP_USE_ANONYMIZED_TELEMETRY: "false", MCP_SECRET: "x" }, [
240
+ "MCP_SECRET",
241
+ ])).toEqual([]);
242
+ });
243
+ it("exempts `<KNOWN_VAR>_*` extensions (docker-secrets style), but not near-misses", () => {
244
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
245
+ const unknown = compose().warnUnknownEnvVars({
246
+ BETA_URL_FILE: "/run/secrets/beta", // extends the known BETA_URL — another process's var
247
+ BETA_URLX: "typo", // near-miss, not an extension — still warns
248
+ });
249
+ expect(unknown).toEqual(["BETA_URLX"]);
250
+ expect(warn).toHaveBeenCalledTimes(1);
251
+ });
252
+ it("appends the optional hint to the warning", () => {
253
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
254
+ composeModules({
255
+ label: "test-root",
256
+ modules: [moduleOf("alpha")],
257
+ envVarHint: "see docs/operations.md",
258
+ }).warnUnknownEnvVars({ ALPHA_TYPO: "x" });
259
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining("(see docs/operations.md)"));
260
+ });
261
+ });
262
+ describe("emitBootWarnings", () => {
263
+ it("collects and logs hints from ACTIVE modules only", () => {
264
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => { });
265
+ const modules = [
266
+ moduleOf("alpha", { bootWarnings: () => ["alpha hint"] }),
267
+ moduleOf("beta", { bootWarnings: () => ["beta hint"] }),
268
+ ];
269
+ const warnings = compose(modules).emitBootWarnings({ MCP_ACTIVE_MODULES: "beta" });
270
+ expect(warnings).toEqual(["beta hint"]);
271
+ expect(warn).toHaveBeenCalledWith("[test-root] beta hint");
272
+ expect(warn).not.toHaveBeenCalledWith(expect.stringContaining("alpha hint"));
273
+ });
274
+ });
275
+ //# sourceMappingURL=composition.test.js.map