aimeat 2.1.0 → 2.2.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 (422) hide show
  1. package/dist/.env.example +9 -4
  2. package/dist/locales/en.json +28 -0
  3. package/dist/locales/fi.json +28 -0
  4. package/dist/public/cortex-bundled/aimeat-charts.js +158 -10
  5. package/dist/public/cortex-bundled/aimeat-charts.yaml +1 -1
  6. package/dist/public/cortex-bundled/aimeat-dag.js +515 -173
  7. package/dist/public/cortex-bundled/aimeat-dag.yaml +1 -1
  8. package/dist/public/cortex-bundled/aimeat-i18n.js +6 -1
  9. package/dist/public/cortex-bundled/aimeat-i18n.yaml +1 -1
  10. package/dist/public/cortex-bundled/aimeat-surface.js +577 -0
  11. package/dist/public/cortex-bundled/aimeat-surface.yaml +107 -0
  12. package/dist/public/cortex-bundled/aimeat-viewport.js +405 -0
  13. package/dist/public/cortex-bundled/aimeat-viewport.yaml +100 -0
  14. package/dist/public/css/views/inbox.css +1 -1
  15. package/dist/public/css/views/profile.css +9 -0
  16. package/dist/public/lib/VENDORED.md +6 -3
  17. package/dist/public/lib/aimeat-daisyui-bridge.css +39 -2
  18. package/dist/public/lib/aimeat-theme.css +538 -0
  19. package/dist/public/lib/fonts/LICENSE.md +11 -4
  20. package/dist/public/lib/fonts/fraunces-var-latin-ext.woff2 +0 -0
  21. package/dist/public/lib/fonts/fraunces-var-latin.woff2 +0 -0
  22. package/dist/public/lib/fonts/inter-var-latin-ext.woff2 +0 -0
  23. package/dist/public/lib/fonts/inter-var-latin.woff2 +0 -0
  24. package/dist/public/lib/fonts/jetbrains-mono-var-latin-ext.woff2 +0 -0
  25. package/dist/public/lib/fonts/jetbrains-mono-var-latin.woff2 +0 -0
  26. package/dist/public/lib/fonts/space-grotesk-var-latin-ext.woff2 +0 -0
  27. package/dist/public/lib/fonts/space-grotesk-var-latin.woff2 +0 -0
  28. package/dist/public/lib/samples/theme-check.html +92 -0
  29. package/dist/public/lib/samples/themes-boot.js +20 -0
  30. package/dist/public/lib/samples/themes.html +154 -0
  31. package/dist/public/lib/samples/themes.js +60 -0
  32. package/dist/public/views/profile/access-tab/connected-apps.js +81 -5
  33. package/dist/public/views/profile/extensions-tab.maturity.js +4 -1
  34. package/dist/public/views/profile/inbox-tab/components.js +17 -1
  35. package/dist/public/views/profile/inbox-tab/use-thread-ux.js +29 -2
  36. package/dist/public/views/profile/libraries-tab.js +10 -2
  37. package/dist/public/views/profile/wallet-tab.js +64 -0
  38. package/dist/scripts/check-openapi.d.ts +2 -0
  39. package/dist/scripts/check-openapi.d.ts.map +1 -0
  40. package/dist/scripts/check-openapi.js +139 -0
  41. package/dist/scripts/check-openapi.js.map +1 -0
  42. package/dist/scripts/embed-viewport.d.ts +23 -0
  43. package/dist/scripts/embed-viewport.d.ts.map +1 -0
  44. package/dist/scripts/embed-viewport.js +116 -0
  45. package/dist/scripts/embed-viewport.js.map +1 -0
  46. package/dist/src/auth/sse-domain-scopes.d.ts +50 -0
  47. package/dist/src/auth/sse-domain-scopes.d.ts.map +1 -0
  48. package/dist/src/auth/sse-domain-scopes.js +111 -0
  49. package/dist/src/auth/sse-domain-scopes.js.map +1 -0
  50. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  51. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +4 -1
  52. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  53. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  54. package/dist/src/cli/connect/mcp/tools/core.js +14 -3
  55. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  56. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts +3 -0
  57. package/dist/src/cli/connect/mcp/tools/workspaces.d.ts.map +1 -1
  58. package/dist/src/cli/connect/mcp/tools/workspaces.js +4 -2
  59. package/dist/src/cli/connect/mcp/tools/workspaces.js.map +1 -1
  60. package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
  61. package/dist/src/cli/connect/tool-call-defs-core.js +13 -1
  62. package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
  63. package/dist/src/commerce/__tests__/x402-registry.test.d.ts +2 -0
  64. package/dist/src/commerce/__tests__/x402-registry.test.d.ts.map +1 -0
  65. package/dist/src/commerce/__tests__/x402-registry.test.js +105 -0
  66. package/dist/src/commerce/__tests__/x402-registry.test.js.map +1 -0
  67. package/dist/src/commerce/evm-address.d.ts +21 -0
  68. package/dist/src/commerce/evm-address.d.ts.map +1 -0
  69. package/dist/src/commerce/evm-address.js +94 -0
  70. package/dist/src/commerce/evm-address.js.map +1 -0
  71. package/dist/src/commerce/money.d.ts +18 -5
  72. package/dist/src/commerce/money.d.ts.map +1 -1
  73. package/dist/src/commerce/money.js +27 -6
  74. package/dist/src/commerce/money.js.map +1 -1
  75. package/dist/src/commerce/x402-facilitator.d.ts +64 -13
  76. package/dist/src/commerce/x402-facilitator.d.ts.map +1 -1
  77. package/dist/src/commerce/x402-facilitator.js +71 -19
  78. package/dist/src/commerce/x402-facilitator.js.map +1 -1
  79. package/dist/src/commerce/x402-handler.d.ts +13 -7
  80. package/dist/src/commerce/x402-handler.d.ts.map +1 -1
  81. package/dist/src/commerce/x402-handler.js +23 -10
  82. package/dist/src/commerce/x402-handler.js.map +1 -1
  83. package/dist/src/commerce/x402.d.ts +11 -6
  84. package/dist/src/commerce/x402.d.ts.map +1 -1
  85. package/dist/src/commerce/x402.js +10 -7
  86. package/dist/src/commerce/x402.js.map +1 -1
  87. package/dist/src/config-types.d.ts +12 -0
  88. package/dist/src/config-types.d.ts.map +1 -1
  89. package/dist/src/config.d.ts.map +1 -1
  90. package/dist/src/config.js +8 -0
  91. package/dist/src/config.js.map +1 -1
  92. package/dist/src/data/app-templates/shells.d.ts +11 -3
  93. package/dist/src/data/app-templates/shells.d.ts.map +1 -1
  94. package/dist/src/data/app-templates/shells.js +87 -6
  95. package/dist/src/data/app-templates/shells.js.map +1 -1
  96. package/dist/src/data/app-templates.js +2 -2
  97. package/dist/src/data/app-templates.js.map +1 -1
  98. package/dist/src/data/library-packs/cortex.d.ts.map +1 -1
  99. package/dist/src/data/library-packs/cortex.js +108 -5
  100. package/dist/src/data/library-packs/cortex.js.map +1 -1
  101. package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
  102. package/dist/src/data/library-packs/sdk.js +32 -8
  103. package/dist/src/data/library-packs/sdk.js.map +1 -1
  104. package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
  105. package/dist/src/data/library-packs/vendored.js +83 -6
  106. package/dist/src/data/library-packs/vendored.js.map +1 -1
  107. package/dist/src/generated/api-types.d.ts +478 -19
  108. package/dist/src/generated/api-types.d.ts.map +1 -1
  109. package/dist/src/mcp/agent-tasks.d.ts +4 -0
  110. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  111. package/dist/src/mcp/agent-tasks.js +20 -2
  112. package/dist/src/mcp/agent-tasks.js.map +1 -1
  113. package/dist/src/mcp/capabilities.d.ts +7 -1
  114. package/dist/src/mcp/capabilities.d.ts.map +1 -1
  115. package/dist/src/mcp/capabilities.js +5 -2
  116. package/dist/src/mcp/capabilities.js.map +1 -1
  117. package/dist/src/mcp/catalog/definitions/commerce.d.ts.map +1 -1
  118. package/dist/src/mcp/catalog/definitions/commerce.js +4 -2
  119. package/dist/src/mcp/catalog/definitions/commerce.js.map +1 -1
  120. package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
  121. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +4 -3
  122. package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
  123. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +1 -1
  124. package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
  125. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
  126. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +3 -2
  127. package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
  128. package/dist/src/mcp/catalog/output-schemas.d.ts +6 -1
  129. package/dist/src/mcp/catalog/output-schemas.d.ts.map +1 -1
  130. package/dist/src/mcp/catalog/output-schemas.js +6 -1
  131. package/dist/src/mcp/catalog/output-schemas.js.map +1 -1
  132. package/dist/src/mcp/commerce.d.ts.map +1 -1
  133. package/dist/src/mcp/commerce.js +15 -3
  134. package/dist/src/mcp/commerce.js.map +1 -1
  135. package/dist/src/mcp/core-storage.d.ts +23 -0
  136. package/dist/src/mcp/core-storage.d.ts.map +1 -0
  137. package/dist/src/mcp/core-storage.js +157 -0
  138. package/dist/src/mcp/core-storage.js.map +1 -0
  139. package/dist/src/mcp/core.d.ts +16 -0
  140. package/dist/src/mcp/core.d.ts.map +1 -1
  141. package/dist/src/mcp/core.js +75 -119
  142. package/dist/src/mcp/core.js.map +1 -1
  143. package/dist/src/mcp/dm-messages.d.ts +4 -0
  144. package/dist/src/mcp/dm-messages.d.ts.map +1 -1
  145. package/dist/src/mcp/dm-messages.js +43 -2
  146. package/dist/src/mcp/dm-messages.js.map +1 -1
  147. package/dist/src/mcp/exchange.d.ts.map +1 -1
  148. package/dist/src/mcp/exchange.js +3 -2
  149. package/dist/src/mcp/exchange.js.map +1 -1
  150. package/dist/src/mcp/extensions.d.ts.map +1 -1
  151. package/dist/src/mcp/extensions.js +6 -2
  152. package/dist/src/mcp/extensions.js.map +1 -1
  153. package/dist/src/mcp/index.d.ts +5 -0
  154. package/dist/src/mcp/index.d.ts.map +1 -1
  155. package/dist/src/mcp/index.js +23 -4
  156. package/dist/src/mcp/index.js.map +1 -1
  157. package/dist/src/mcp/memory-namespace-hints.d.ts +33 -0
  158. package/dist/src/mcp/memory-namespace-hints.d.ts.map +1 -0
  159. package/dist/src/mcp/memory-namespace-hints.js +60 -0
  160. package/dist/src/mcp/memory-namespace-hints.js.map +1 -0
  161. package/dist/src/mcp/workspaces.d.ts +5 -0
  162. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  163. package/dist/src/mcp/workspaces.js +5 -3
  164. package/dist/src/mcp/workspaces.js.map +1 -1
  165. package/dist/src/models/agent-task-schemas.d.ts +25 -3
  166. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  167. package/dist/src/models/agent-task-schemas.js +16 -0
  168. package/dist/src/models/agent-task-schemas.js.map +1 -1
  169. package/dist/src/models/app-tool-schemas.d.ts +518 -1
  170. package/dist/src/models/app-tool-schemas.d.ts.map +1 -1
  171. package/dist/src/models/app-tool-schemas.js +53 -1
  172. package/dist/src/models/app-tool-schemas.js.map +1 -1
  173. package/dist/src/models/odps-schemas.d.ts +305 -0
  174. package/dist/src/models/odps-schemas.d.ts.map +1 -0
  175. package/dist/src/models/odps-schemas.js +182 -0
  176. package/dist/src/models/odps-schemas.js.map +1 -0
  177. package/dist/src/models/offer-schemas.d.ts +357 -2
  178. package/dist/src/models/offer-schemas.d.ts.map +1 -1
  179. package/dist/src/models/offer-schemas.js +37 -0
  180. package/dist/src/models/offer-schemas.js.map +1 -1
  181. package/dist/src/models/schemas.d.ts +6 -3
  182. package/dist/src/models/schemas.d.ts.map +1 -1
  183. package/dist/src/models/schemas.js +10 -1
  184. package/dist/src/models/schemas.js.map +1 -1
  185. package/dist/src/models/webhook-schemas.d.ts +8 -8
  186. package/dist/src/routes/agent-tasks/create-read.d.ts +4 -0
  187. package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
  188. package/dist/src/routes/agent-tasks/create-read.js +20 -1
  189. package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
  190. package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
  191. package/dist/src/routes/agent-tasks/lifecycle.js +10 -0
  192. package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
  193. package/dist/src/routes/agents/offers.d.ts +2 -0
  194. package/dist/src/routes/agents/offers.d.ts.map +1 -1
  195. package/dist/src/routes/agents/offers.js +0 -0
  196. package/dist/src/routes/agents/offers.js.map +1 -1
  197. package/dist/src/routes/app-grants.d.ts +6 -0
  198. package/dist/src/routes/app-grants.d.ts.map +1 -1
  199. package/dist/src/routes/app-grants.js +55 -25
  200. package/dist/src/routes/app-grants.js.map +1 -1
  201. package/dist/src/routes/apps/drafts.d.ts +3 -0
  202. package/dist/src/routes/apps/drafts.d.ts.map +1 -1
  203. package/dist/src/routes/apps/drafts.js +63 -1
  204. package/dist/src/routes/apps/drafts.js.map +1 -1
  205. package/dist/src/routes/apps/publish.d.ts +2 -0
  206. package/dist/src/routes/apps/publish.d.ts.map +1 -1
  207. package/dist/src/routes/apps/publish.js +17 -2
  208. package/dist/src/routes/apps/publish.js.map +1 -1
  209. package/dist/src/routes/commerce.d.ts.map +1 -1
  210. package/dist/src/routes/commerce.js +122 -2
  211. package/dist/src/routes/commerce.js.map +1 -1
  212. package/dist/src/routes/exchange-market.d.ts +6 -2
  213. package/dist/src/routes/exchange-market.d.ts.map +1 -1
  214. package/dist/src/routes/exchange-market.js +154 -28
  215. package/dist/src/routes/exchange-market.js.map +1 -1
  216. package/dist/src/routes/exchange.d.ts.map +1 -1
  217. package/dist/src/routes/exchange.js +5 -2
  218. package/dist/src/routes/exchange.js.map +1 -1
  219. package/dist/src/routes/extensions/actions.d.ts.map +1 -1
  220. package/dist/src/routes/extensions/actions.js +18 -0
  221. package/dist/src/routes/extensions/actions.js.map +1 -1
  222. package/dist/src/routes/extensions/crud.d.ts.map +1 -1
  223. package/dist/src/routes/extensions/crud.js +36 -3
  224. package/dist/src/routes/extensions/crud.js.map +1 -1
  225. package/dist/src/routes/extensions/entitlement-gate.d.ts.map +1 -1
  226. package/dist/src/routes/extensions/entitlement-gate.js +13 -0
  227. package/dist/src/routes/extensions/entitlement-gate.js.map +1 -1
  228. package/dist/src/routes/extensions/manifest.d.ts +6 -0
  229. package/dist/src/routes/extensions/manifest.d.ts.map +1 -1
  230. package/dist/src/routes/extensions/manifest.js +68 -1
  231. package/dist/src/routes/extensions/manifest.js.map +1 -1
  232. package/dist/src/routes/extensions/pacing.d.ts +31 -0
  233. package/dist/src/routes/extensions/pacing.d.ts.map +1 -0
  234. package/dist/src/routes/extensions/pacing.js +73 -0
  235. package/dist/src/routes/extensions/pacing.js.map +1 -0
  236. package/dist/src/routes/extensions/paywall.d.ts.map +1 -1
  237. package/dist/src/routes/extensions/paywall.js +17 -17
  238. package/dist/src/routes/extensions/paywall.js.map +1 -1
  239. package/dist/src/routes/memory/crud.d.ts.map +1 -1
  240. package/dist/src/routes/memory/crud.js +10 -0
  241. package/dist/src/routes/memory/crud.js.map +1 -1
  242. package/dist/src/routes/organisms/crud.d.ts +3 -0
  243. package/dist/src/routes/organisms/crud.d.ts.map +1 -1
  244. package/dist/src/routes/organisms/crud.js +5 -2
  245. package/dist/src/routes/organisms/crud.js.map +1 -1
  246. package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
  247. package/dist/src/routes/organisms/workspace-read.js +7 -2
  248. package/dist/src/routes/organisms/workspace-read.js.map +1 -1
  249. package/dist/src/routes/public-stats.d.ts +7 -0
  250. package/dist/src/routes/public-stats.d.ts.map +1 -1
  251. package/dist/src/routes/public-stats.js +28 -7
  252. package/dist/src/routes/public-stats.js.map +1 -1
  253. package/dist/src/routes/sse.d.ts +7 -0
  254. package/dist/src/routes/sse.d.ts.map +1 -1
  255. package/dist/src/routes/sse.js +36 -6
  256. package/dist/src/routes/sse.js.map +1 -1
  257. package/dist/src/routes/storage-files.d.ts +11 -0
  258. package/dist/src/routes/storage-files.d.ts.map +1 -1
  259. package/dist/src/routes/storage-files.js +58 -51
  260. package/dist/src/routes/storage-files.js.map +1 -1
  261. package/dist/src/routes/subdomains.d.ts +4 -0
  262. package/dist/src/routes/subdomains.d.ts.map +1 -1
  263. package/dist/src/routes/subdomains.js +42 -5
  264. package/dist/src/routes/subdomains.js.map +1 -1
  265. package/dist/src/routes/upload.d.ts +11 -0
  266. package/dist/src/routes/upload.d.ts.map +1 -1
  267. package/dist/src/routes/upload.js +108 -28
  268. package/dist/src/routes/upload.js.map +1 -1
  269. package/dist/src/routes/webmcp.d.ts.map +1 -1
  270. package/dist/src/routes/webmcp.js +4 -0
  271. package/dist/src/routes/webmcp.js.map +1 -1
  272. package/dist/src/schemas/knowledge-package.d.ts +1 -1
  273. package/dist/src/server-bootstrap/static-files.d.ts +4 -0
  274. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  275. package/dist/src/server-bootstrap/static-files.js +11 -0
  276. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  277. package/dist/src/services/build-app-prompt.d.ts +19 -0
  278. package/dist/src/services/build-app-prompt.d.ts.map +1 -1
  279. package/dist/src/services/build-app-prompt.js +97 -11
  280. package/dist/src/services/build-app-prompt.js.map +1 -1
  281. package/dist/src/services/call-timing.d.ts +51 -0
  282. package/dist/src/services/call-timing.d.ts.map +1 -0
  283. package/dist/src/services/call-timing.js +91 -0
  284. package/dist/src/services/call-timing.js.map +1 -0
  285. package/dist/src/services/capability-invoke.d.ts +2 -0
  286. package/dist/src/services/capability-invoke.d.ts.map +1 -1
  287. package/dist/src/services/capability-invoke.js +10 -0
  288. package/dist/src/services/capability-invoke.js.map +1 -1
  289. package/dist/src/services/config-schema.d.ts.map +1 -1
  290. package/dist/src/services/config-schema.js +6 -0
  291. package/dist/src/services/config-schema.js.map +1 -1
  292. package/dist/src/services/draft-token.d.ts +22 -2
  293. package/dist/src/services/draft-token.d.ts.map +1 -1
  294. package/dist/src/services/draft-token.js +52 -3
  295. package/dist/src/services/draft-token.js.map +1 -1
  296. package/dist/src/services/exchange-market.d.ts +41 -8
  297. package/dist/src/services/exchange-market.d.ts.map +1 -1
  298. package/dist/src/services/exchange-market.js +24 -2
  299. package/dist/src/services/exchange-market.js.map +1 -1
  300. package/dist/src/services/exchange-odps.d.ts +58 -0
  301. package/dist/src/services/exchange-odps.d.ts.map +1 -0
  302. package/dist/src/services/exchange-odps.js +400 -0
  303. package/dist/src/services/exchange-odps.js.map +1 -0
  304. package/dist/src/services/exchange-projection.d.ts +61 -0
  305. package/dist/src/services/exchange-projection.d.ts.map +1 -0
  306. package/dist/src/services/exchange-projection.js +504 -0
  307. package/dist/src/services/exchange-projection.js.map +1 -0
  308. package/dist/src/services/exchange-proposals.d.ts.map +1 -1
  309. package/dist/src/services/exchange-proposals.js +2 -0
  310. package/dist/src/services/exchange-proposals.js.map +1 -1
  311. package/dist/src/services/extension-files.d.ts +64 -0
  312. package/dist/src/services/extension-files.d.ts.map +1 -0
  313. package/dist/src/services/extension-files.js +88 -0
  314. package/dist/src/services/extension-files.js.map +1 -0
  315. package/dist/src/services/extension-runtime.d.ts +33 -0
  316. package/dist/src/services/extension-runtime.d.ts.map +1 -1
  317. package/dist/src/services/extension-runtime.js +52 -0
  318. package/dist/src/services/extension-runtime.js.map +1 -1
  319. package/dist/src/services/file-refs.d.ts +105 -0
  320. package/dist/src/services/file-refs.d.ts.map +1 -0
  321. package/dist/src/services/file-refs.js +106 -0
  322. package/dist/src/services/file-refs.js.map +1 -0
  323. package/dist/src/services/metered-entitlements.d.ts +7 -0
  324. package/dist/src/services/metered-entitlements.d.ts.map +1 -1
  325. package/dist/src/services/metered-entitlements.js +4 -0
  326. package/dist/src/services/metered-entitlements.js.map +1 -1
  327. package/dist/src/services/owner-memory.d.ts +14 -1
  328. package/dist/src/services/owner-memory.d.ts.map +1 -1
  329. package/dist/src/services/owner-memory.js +8 -14
  330. package/dist/src/services/owner-memory.js.map +1 -1
  331. package/dist/src/services/task-files.d.ts +51 -0
  332. package/dist/src/services/task-files.d.ts.map +1 -0
  333. package/dist/src/services/task-files.js +58 -0
  334. package/dist/src/services/task-files.js.map +1 -0
  335. package/dist/src/services/upload-token.d.ts +29 -0
  336. package/dist/src/services/upload-token.d.ts.map +1 -1
  337. package/dist/src/services/upload-token.js +37 -0
  338. package/dist/src/services/upload-token.js.map +1 -1
  339. package/dist/src/services/upload-zip.d.ts +2 -0
  340. package/dist/src/services/upload-zip.d.ts.map +1 -1
  341. package/dist/src/services/upload-zip.js +5 -1
  342. package/dist/src/services/upload-zip.js.map +1 -1
  343. package/dist/src/services/workspace-meta.d.ts +15 -0
  344. package/dist/src/services/workspace-meta.d.ts.map +1 -1
  345. package/dist/src/services/workspace-meta.js +17 -0
  346. package/dist/src/services/workspace-meta.js.map +1 -1
  347. package/dist/src/services/workspace-provision.d.ts +3 -0
  348. package/dist/src/services/workspace-provision.d.ts.map +1 -1
  349. package/dist/src/services/workspace-provision.js +5 -3
  350. package/dist/src/services/workspace-provision.js.map +1 -1
  351. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
  352. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
  353. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +10 -0
  354. package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
  355. package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts +2 -0
  356. package/dist/src/storage/providers/postgres-kysely/methods/memory.d.ts.map +1 -1
  357. package/dist/src/storage/providers/postgres-kysely/methods/memory.js +12 -1
  358. package/dist/src/storage/providers/postgres-kysely/methods/memory.js.map +1 -1
  359. package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts.map +1 -1
  360. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +5 -1
  361. package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
  362. package/dist/src/storage/providers/postgres-kysely/migrations/0012_unique_live_app_grant.sql +29 -0
  363. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +3 -0
  364. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  365. package/dist/src/storage/providers/sqlite/methods/apps.js +7 -0
  366. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  367. package/dist/src/storage/providers/sqlite/methods/governance.d.ts +1 -0
  368. package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
  369. package/dist/src/storage/providers/sqlite/methods/governance.js +4 -1
  370. package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
  371. package/dist/src/storage/providers/sqlite/methods/owner.d.ts +5 -0
  372. package/dist/src/storage/providers/sqlite/methods/owner.d.ts.map +1 -1
  373. package/dist/src/storage/providers/sqlite/methods/owner.js +8 -0
  374. package/dist/src/storage/providers/sqlite/methods/owner.js.map +1 -1
  375. package/dist/src/storage/providers/sqlite/schema.d.ts +3 -0
  376. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  377. package/dist/src/storage/providers/sqlite/schema.js +20 -0
  378. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  379. package/dist/src/storage/repositories/app-grant.repository.d.ts +9 -1
  380. package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
  381. package/dist/src/storage/repositories/memory.repository.d.ts +14 -0
  382. package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
  383. package/dist/src/storage/repositories-impl/memory-repository.d.ts +8 -1
  384. package/dist/src/storage/repositories-impl/memory-repository.d.ts.map +1 -1
  385. package/dist/src/storage/repositories-impl/memory-repository.js +15 -4
  386. package/dist/src/storage/repositories-impl/memory-repository.js.map +1 -1
  387. package/dist/src/storage/types/agents-messaging.d.ts +19 -0
  388. package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
  389. package/dist/src/storage/types/agents-messaging.js.map +1 -1
  390. package/dist/src/storage/types/organisms-federation.d.ts +29 -0
  391. package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
  392. package/dist/src/utils/app-badge.d.ts.map +1 -1
  393. package/dist/src/utils/app-badge.js +7 -3
  394. package/dist/src/utils/app-badge.js.map +1 -1
  395. package/dist/static/app-catalog/_template.html +6 -5
  396. package/dist/static/app-catalog/js/cortex.js +3 -1
  397. package/dist/static/app-catalog/js/detail.js +411 -36
  398. package/dist/static/app-catalog/js/i18n-data.js +279 -3
  399. package/dist/static/app-catalog/js/main.js +28 -37
  400. package/dist/static/app-catalog/js/monetize.js +204 -16
  401. package/dist/static/app-catalog/js/odps.js +489 -0
  402. package/dist/static/app-catalog/js/render.js +3 -0
  403. package/dist/static/app-catalog/js/workcopy.js +198 -0
  404. package/dist/static/app-catalog/styles/app-catalog.css +60 -0
  405. package/dist/static/app-catalog.html +1450 -137
  406. package/dist/static/sdk-libs/agents/index.js +45 -7
  407. package/dist/static/sdk-libs/auth/cluster.js +97 -0
  408. package/dist/static/sdk-libs/auth/index.js +25 -1
  409. package/dist/static/sdk-libs/auth/locale.js +151 -0
  410. package/dist/static/sdk-libs/auth/modal.js +11 -2
  411. package/dist/static/sdk-libs/auth/palette.js +172 -0
  412. package/dist/static/sdk-libs/auth/pill.js +37 -6
  413. package/dist/static/sdk-libs/auth/theme.js +61 -20
  414. package/dist/static/sdk-libs/data/index.js +70 -8
  415. package/dist/static/sdk-libs/dist/aimeat-agents.js +41 -8
  416. package/dist/static/sdk-libs/dist/aimeat-auth.js +422 -21
  417. package/dist/static/sdk-libs/dist/aimeat-data.js +50 -8
  418. package/dist/static/sdk-libs/dist/aimeat-live.js +54 -2
  419. package/dist/static/sdk-libs/dist/aimeat-markdown.js +32 -1
  420. package/dist/static/sdk-libs/live/index.js +71 -4
  421. package/dist/static/sdk-libs/markdown/index.js +49 -1
  422. package/package.json +6 -2
@@ -209,6 +209,11 @@
209
209
  }
210
210
  var AIMEAT_THEME_KEY = "aimeat-theme";
211
211
  function aimeatReadTheme() {
212
+ try {
213
+ var u = new URLSearchParams(location.search).get("mode");
214
+ if (u === "light" || u === "dark") return u;
215
+ } catch {
216
+ }
212
217
  try {
213
218
  var s = localStorage.getItem(AIMEAT_THEME_KEY);
214
219
  if (s === "light" || s === "dark") return s;
@@ -229,22 +234,40 @@
229
234
  } catch {
230
235
  }
231
236
  }
232
- function themeToggleHtml(i) {
233
- var dark = aimeatReadTheme() === "dark";
234
- var title = dark ? i.themeToLight || "Switch to light mode" : i.themeToDark || "Switch to dark mode";
235
- return '<button id="aimeat-theme-toggle" class="aimeat-theme-toggle" title="' + escHtml(title) + '" aria-label="' + escHtml(title) + '" style="display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;flex:0 0 auto;background:transparent;border:1px solid rgba(127,127,127,.4);border-radius:8px;cursor:pointer;font-size:15px;line-height:1;padding:0;color:currentColor">' + (dark ? "☀" : "☾") + "</button>";
236
- }
237
- function wireThemeToggle(container, i) {
238
- var btn = container.querySelector("#aimeat-theme-toggle");
239
- if (!btn) return;
240
- btn.addEventListener("click", function() {
241
- var next = aimeatReadTheme() === "dark" ? "light" : "dark";
242
- aimeatApplyTheme(next);
243
- var dark = next === "dark";
244
- btn.textContent = dark ? "☀" : "☾";
245
- var title = dark ? i.themeToLight || "Switch to light mode" : i.themeToDark || "Switch to dark mode";
246
- btn.title = title;
247
- btn.setAttribute("aria-label", title);
237
+ function aimeatRestoreMode() {
238
+ try {
239
+ var u = new URLSearchParams(location.search).get("mode");
240
+ if (u === "light" || u === "dark") document.documentElement.dataset.theme = u;
241
+ } catch {
242
+ }
243
+ }
244
+ function modeSwitchHtml(i) {
245
+ var cur = aimeatReadTheme();
246
+ var light = i.lightMode || "Light mode";
247
+ var dark = i.darkMode || "Dark mode";
248
+ return '<span id="aimeat-mode-switch" class="aimeat-seg" role="group" aria-label="' + escHtml(i.themeLabel || "Theme") + '"><button type="button" data-mode="light" aria-pressed="' + (cur === "light") + '" title="' + escHtml(light) + '" aria-label="' + escHtml(light) + '"><span class="seg-ico" aria-hidden="true">☀</span></button><button type="button" data-mode="dark" aria-pressed="' + (cur === "dark") + '" title="' + escHtml(dark) + '" aria-label="' + escHtml(dark) + '"><span class="seg-ico" aria-hidden="true">☾</span></button></span>';
249
+ }
250
+ function wireModeSwitch(container) {
251
+ var root = container.querySelector("#aimeat-mode-switch");
252
+ if (!root) return;
253
+ function sync(cur) {
254
+ root.querySelectorAll("button[data-mode]").forEach(function(b) {
255
+ b.setAttribute("aria-pressed", String(b.getAttribute("data-mode") === cur));
256
+ });
257
+ }
258
+ root.querySelectorAll("button[data-mode]").forEach(function(b) {
259
+ b.addEventListener("click", function() {
260
+ var m = b.getAttribute("data-mode");
261
+ aimeatApplyTheme(m);
262
+ sync(m);
263
+ });
264
+ });
265
+ window.addEventListener("aimeat-theme-change", function(ev) {
266
+ var e = (
267
+ /** @type {CustomEvent} */
268
+ ev
269
+ );
270
+ if (e && e.detail && e.detail.theme) sync(e.detail.theme);
248
271
  });
249
272
  }
250
273
  function ensureAuthPillStyles() {
@@ -384,7 +407,14 @@
384
407
  render(true);
385
408
  loadModalI18n(lang).then(function(fresh) {
386
409
  if (!fresh || !Object.keys(fresh).length) return;
387
- if (fresh.signInBtn === i.signInBtn && fresh.descNew === i.descNew) return;
410
+ var differs = false;
411
+ for (var k in fresh) {
412
+ if (Object.prototype.hasOwnProperty.call(fresh, k) && fresh[k] !== i[k]) {
413
+ differs = true;
414
+ break;
415
+ }
416
+ }
417
+ if (!differs) return;
388
418
  var vals = captureInputs();
389
419
  i = fresh;
390
420
  render(false);
@@ -757,6 +787,332 @@
757
787
  }
758
788
  }
759
789
 
790
+ // src/static/sdk-libs/auth/cluster.js
791
+ function ensureClusterStyles() {
792
+ if (document.getElementById("aimeat-cluster-css")) return;
793
+ var st = document.createElement("style");
794
+ st.id = "aimeat-cluster-css";
795
+ st.textContent = [
796
+ /* The cluster row. Inherits text colour from its host (gold pill or page header). */
797
+ ".aimeat-ctl{display:inline-flex;align-items:center;gap:6px}",
798
+ /* Segmented group: one bordered pill, every option a button. */
799
+ ".aimeat-seg{display:inline-flex;align-items:stretch;height:30px;flex:0 0 auto;",
800
+ "border:1px solid color-mix(in oklab,currentColor 38%,transparent);border-radius:999px;",
801
+ "overflow:hidden;background:color-mix(in oklab,currentColor 5%,transparent)}",
802
+ ".aimeat-seg button{appearance:none;border:0;background:transparent;color:currentColor;",
803
+ 'opacity:.6;font:700 11px/1 "Inter","Segoe UI",system-ui,sans-serif;letter-spacing:.4px;',
804
+ "padding:0 10px;margin:0;cursor:pointer;display:inline-flex;align-items:center;gap:4px;",
805
+ "transition:opacity var(--motion-fast,120ms) ease,background var(--motion-fast,120ms) ease}",
806
+ ".aimeat-seg button:hover{opacity:.9}",
807
+ ".aimeat-seg button:focus-visible{outline:2px solid currentColor;outline-offset:-2px;opacity:1}",
808
+ '.aimeat-seg button[aria-pressed="true"]{opacity:1;',
809
+ "background:color-mix(in oklab,currentColor 16%,transparent)}",
810
+ ".aimeat-seg button+button{border-left:1px solid color-mix(in oklab,currentColor 22%,transparent)}",
811
+ ".aimeat-seg .seg-ico{font-size:13px;line-height:1}",
812
+ /* Popover trigger (palette picker; language picker when 4+ languages). */
813
+ ".aimeat-pop-wrap{position:relative;display:inline-flex;flex:0 0 auto}",
814
+ ".aimeat-pop-btn{appearance:none;display:inline-flex;align-items:center;justify-content:center;",
815
+ "gap:5px;height:30px;min-width:30px;padding:0 7px;background:color-mix(in oklab,currentColor 5%,transparent);",
816
+ "border:1px solid color-mix(in oklab,currentColor 38%,transparent);border-radius:999px;",
817
+ 'cursor:pointer;color:currentColor;font:700 11px/1 "Inter","Segoe UI",system-ui,sans-serif;letter-spacing:.4px;',
818
+ "transition:background var(--motion-fast,120ms) ease}",
819
+ ".aimeat-pop-btn:hover{background:color-mix(in oklab,currentColor 12%,transparent)}",
820
+ ".aimeat-pop-btn:focus-visible{outline:2px solid currentColor;outline-offset:-2px}",
821
+ /* The popover panel: a real themed surface (not the host pill), so swatches read true. */
822
+ ".aimeat-pop{position:absolute;top:calc(100% + 8px);right:0;z-index:1200;display:none;",
823
+ "background:var(--color-base-200,#ffffff);color:var(--color-base-content,#1a1a2e);",
824
+ "border:1px solid var(--color-base-300,#d9dbe1);border-radius:var(--radius-box,14px);",
825
+ "box-shadow:var(--elev-pop,0 4px 10px rgb(15 18 25 / .1),0 18px 44px rgb(15 18 25 / .16));",
826
+ "padding:8px;width:max-content;max-width:calc(100vw - 24px)}",
827
+ ".aimeat-pop-wrap.aimeat-open .aimeat-pop{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}",
828
+ ".aimeat-pop.aimeat-pop-list{grid-template-columns:minmax(0,1fr)}",
829
+ ".aimeat-pop button{appearance:none;display:flex;align-items:center;gap:8px;padding:7px 9px;margin:0;",
830
+ "background:transparent;border:1px solid transparent;border-radius:calc(var(--radius-box,14px) - 6px);",
831
+ 'cursor:pointer;color:inherit;font:600 12px/1.1 "Inter","Segoe UI",system-ui,sans-serif;text-align:left;',
832
+ "transition:background var(--motion-fast,120ms) ease}",
833
+ ".aimeat-pop button:hover{background:color-mix(in oklab,currentColor 8%,transparent)}",
834
+ ".aimeat-pop button:focus-visible{outline:2px solid var(--color-primary,#e8564a);outline-offset:-2px}",
835
+ '.aimeat-pop button[aria-pressed="true"]{border-color:var(--color-primary,#e8564a)}',
836
+ /* Palette swatch chips: page/card/accent of the palette IN THE CURRENT MODE. The three
837
+ colours are data (they vary per palette), so they arrive as inline background values on
838
+ these spans — layout and everything else stays here. */
839
+ ".aimeat-pal-chip{position:relative;flex:0 0 auto;width:26px;height:20px;border-radius:5px;",
840
+ "border:1px solid color-mix(in oklab,currentColor 25%,transparent);overflow:hidden}",
841
+ ".aimeat-pal-chip .pc-card{position:absolute;inset:5px 5px 3px 5px;border-radius:3px}",
842
+ ".aimeat-pal-chip .pc-acc{position:absolute;right:3px;bottom:3px;width:7px;height:7px;border-radius:50%}",
843
+ /* The trigger's miniature: the active palette's accent as a dot. */
844
+ ".aimeat-pal-dot{width:12px;height:12px;border-radius:50%;flex:0 0 auto;",
845
+ "border:1px solid color-mix(in oklab,currentColor 30%,transparent)}"
846
+ ].join("");
847
+ (document.head || document.documentElement).appendChild(st);
848
+ }
849
+ function clampPopover(pop) {
850
+ pop.style.transform = "";
851
+ var r = pop.getBoundingClientRect();
852
+ var pad = 12;
853
+ var shift = 0;
854
+ if (r.left < pad) shift = pad - r.left;
855
+ else if (r.right > window.innerWidth - pad) shift = window.innerWidth - pad - r.right;
856
+ if (shift) pop.style.transform = "translateX(" + Math.round(shift) + "px)";
857
+ }
858
+
859
+ // src/static/sdk-libs/auth/locale.js
860
+ var AIMEAT_LANG_KEY = "aimeat-lang";
861
+ function readLocales(opts) {
862
+ var list = opts && Array.isArray(opts.locales) ? opts.locales : null;
863
+ if (!list) {
864
+ try {
865
+ var m = (
866
+ /** @type {HTMLMetaElement|null} */
867
+ document.querySelector('meta[name="aimeat-locales"]')
868
+ );
869
+ if (m && m.content) list = m.content.split(/[\s,]+/);
870
+ } catch {
871
+ }
872
+ }
873
+ if (!list) return [];
874
+ var seen = {}, out = [];
875
+ for (var i = 0; i < list.length; i++) {
876
+ var c = String(list[i] || "").trim().toLowerCase();
877
+ if (/^[a-z]{2}$/.test(c) && !seen[c]) {
878
+ seen[c] = 1;
879
+ out.push(c);
880
+ }
881
+ }
882
+ return out.length > 1 ? out : [];
883
+ }
884
+ function aimeatReadLang(locales) {
885
+ var ok = function(v) {
886
+ return v && locales.indexOf(v) >= 0 ? v : null;
887
+ };
888
+ try {
889
+ var u = ok(new URLSearchParams(location.search).get("lang"));
890
+ if (u) return u;
891
+ var s = ok(localStorage.getItem(AIMEAT_LANG_KEY));
892
+ if (s) return s;
893
+ var c = document.cookie.match(/(?:^|;\s*)aimeat-lang=([a-z]{2})(?:;|$)/);
894
+ if (c && ok(c[1])) return c[1];
895
+ } catch {
896
+ }
897
+ var nav = ok((navigator.language || "").slice(0, 2).toLowerCase());
898
+ return nav || locales[0];
899
+ }
900
+ function aimeatApplyLang(lang) {
901
+ try {
902
+ localStorage.setItem(AIMEAT_LANG_KEY, lang);
903
+ document.cookie = "aimeat-lang=" + lang + ";path=/;max-age=31536000;SameSite=Lax";
904
+ } catch {
905
+ }
906
+ try {
907
+ document.documentElement.setAttribute("lang", lang);
908
+ } catch {
909
+ }
910
+ try {
911
+ window.dispatchEvent(new CustomEvent("aimeat-lang-change", { detail: { lang } }));
912
+ } catch {
913
+ }
914
+ }
915
+ function langName(code) {
916
+ try {
917
+ var dn = new Intl.DisplayNames([code], { type: "language" });
918
+ var n = dn.of(code);
919
+ if (n && n !== code) return n.charAt(0).toUpperCase() + n.slice(1);
920
+ } catch {
921
+ }
922
+ return code.toUpperCase();
923
+ }
924
+ var SEGMENT_MAX = 3;
925
+ function langSwitchHtml(i, locales) {
926
+ if (!locales.length) return "";
927
+ var cur = aimeatReadLang(locales);
928
+ var group = i && i.switchLanguage ? i.switchLanguage : "Language";
929
+ if (locales.length <= SEGMENT_MAX) {
930
+ return '<span id="aimeat-lang-switch" class="aimeat-seg" role="group" aria-label="' + escHtml(group) + '">' + locales.map(function(c) {
931
+ return '<button type="button" data-lang="' + escHtml(c) + '" aria-pressed="' + (c === cur) + '" title="' + escHtml(langName(c)) + '" aria-label="' + escHtml(langName(c)) + '">' + escHtml(c.toUpperCase()) + "</button>";
932
+ }).join("") + "</span>";
933
+ }
934
+ return '<span id="aimeat-lang-switch" class="aimeat-pop-wrap"><button type="button" class="aimeat-pop-btn" aria-haspopup="listbox" aria-expanded="false" title="' + escHtml(group) + '" aria-label="' + escHtml(group) + '">' + escHtml(cur.toUpperCase()) + ' <span aria-hidden="true">▾</span></button><span class="aimeat-pop aimeat-pop-list" role="listbox">' + locales.map(function(c) {
935
+ return '<button type="button" role="option" data-lang="' + escHtml(c) + '" aria-pressed="' + (c === cur) + '">' + escHtml(c.toUpperCase()) + " · " + escHtml(langName(c)) + "</button>";
936
+ }).join("") + "</span></span>";
937
+ }
938
+ function wireLangSwitch(container, i, locales) {
939
+ var root = container.querySelector("#aimeat-lang-switch");
940
+ if (!root || !locales.length) return;
941
+ var trigger = root.querySelector(".aimeat-pop-btn");
942
+ function sync(cur) {
943
+ root.querySelectorAll("button[data-lang]").forEach(function(b) {
944
+ b.setAttribute("aria-pressed", String(b.getAttribute("data-lang") === cur));
945
+ });
946
+ if (trigger) trigger.childNodes[0].textContent = cur.toUpperCase() + " ";
947
+ }
948
+ root.querySelectorAll("button[data-lang]").forEach(function(b) {
949
+ b.addEventListener("click", function() {
950
+ aimeatApplyLang(b.getAttribute("data-lang"));
951
+ sync(b.getAttribute("data-lang"));
952
+ root.classList.remove("aimeat-open");
953
+ if (trigger) trigger.setAttribute("aria-expanded", "false");
954
+ });
955
+ });
956
+ if (trigger) trigger.addEventListener("click", function(ev) {
957
+ ev.stopPropagation();
958
+ var open = root.classList.toggle("aimeat-open");
959
+ trigger.setAttribute("aria-expanded", String(open));
960
+ if (open) clampPopover(root.querySelector(".aimeat-pop"));
961
+ });
962
+ window.addEventListener("aimeat-lang-change", function(ev) {
963
+ var e = (
964
+ /** @type {CustomEvent} */
965
+ ev
966
+ );
967
+ var lang = e && e.detail && e.detail.lang;
968
+ if (lang && locales.indexOf(lang) >= 0) sync(lang);
969
+ });
970
+ }
971
+
972
+ // src/static/sdk-libs/auth/palette.js
973
+ var AIMEAT_PALETTE_KEY = "aimeat-palette";
974
+ var PALETTES = [
975
+ { id: "aimeat", label: "AIMEAT", swatch: {
976
+ light: { bg: "#efeee8", card: "#ffffff", accent: "#e8564a" },
977
+ dark: { bg: "#14151a", card: "#21232e", accent: "#ff6f62" }
978
+ } },
979
+ { id: "paper", label: "Paper", swatch: {
980
+ light: { bg: "#eae2cf", card: "#fdfaf1", accent: "#a03040" },
981
+ dark: { bg: "#151110", card: "#282017", accent: "#e08590" }
982
+ } },
983
+ { id: "circuit", label: "Circuit", swatch: {
984
+ light: { bg: "#e9edf1", card: "#ffffff", accent: "#0e7290" },
985
+ dark: { bg: "#0a0f14", card: "#18202b", accent: "#4fd2f2" }
986
+ } },
987
+ { id: "contrast", label: "Contrast", swatch: {
988
+ light: { bg: "#e9e9e9", card: "#ffffff", accent: "#1d4ed8" },
989
+ dark: { bg: "#000000", card: "#17171c", accent: "#99c2ff" }
990
+ } },
991
+ { id: "mist", label: "Mist", swatch: {
992
+ light: { bg: "#e6eae4", card: "#fbfcfa", accent: "#47695a" },
993
+ dark: { bg: "#141715", card: "#252b27", accent: "#9cc0ae" }
994
+ } }
995
+ ];
996
+ function aimeatReadPalette() {
997
+ var ids = PALETTES.map(function(p) {
998
+ return p.id;
999
+ });
1000
+ try {
1001
+ var u = new URLSearchParams(location.search).get("palette");
1002
+ if (u && ids.indexOf(u) >= 0) return u;
1003
+ } catch {
1004
+ }
1005
+ try {
1006
+ var s = localStorage.getItem(AIMEAT_PALETTE_KEY);
1007
+ if (s && ids.indexOf(s) >= 0) return s;
1008
+ } catch {
1009
+ }
1010
+ var attr = document.documentElement.getAttribute("data-palette");
1011
+ return attr && ids.indexOf(attr) >= 0 ? attr : PALETTES[0].id;
1012
+ }
1013
+ function aimeatApplyPalette(id) {
1014
+ if (id === PALETTES[0].id) document.documentElement.removeAttribute("data-palette");
1015
+ else document.documentElement.setAttribute("data-palette", id);
1016
+ try {
1017
+ localStorage.setItem(AIMEAT_PALETTE_KEY, id);
1018
+ } catch {
1019
+ }
1020
+ try {
1021
+ window.dispatchEvent(new CustomEvent("aimeat-palette-change", { detail: { palette: id } }));
1022
+ } catch {
1023
+ }
1024
+ }
1025
+ function aimeatRestorePalette() {
1026
+ var cur = aimeatReadPalette();
1027
+ if (cur !== PALETTES[0].id) document.documentElement.setAttribute("data-palette", cur);
1028
+ else document.documentElement.removeAttribute("data-palette");
1029
+ try {
1030
+ window.addEventListener("storage", function(e) {
1031
+ if (e.key === AIMEAT_PALETTE_KEY && e.newValue) aimeatApplyPalette(e.newValue);
1032
+ });
1033
+ } catch {
1034
+ }
1035
+ }
1036
+ function paletteControlHtml(i) {
1037
+ var cur = aimeatReadPalette();
1038
+ var mode = document.documentElement.getAttribute("data-theme") === "dark" ? "dark" : "light";
1039
+ var curAcc = (PALETTES.find(function(p) {
1040
+ return p.id === cur;
1041
+ }) || PALETTES[0]).swatch[mode].accent;
1042
+ var label = i && i.chooseLook || "Choose look";
1043
+ return '<span id="aimeat-palette-switch" class="aimeat-pop-wrap"><button type="button" class="aimeat-pop-btn" aria-haspopup="listbox" aria-expanded="false" title="' + esc(label) + '" aria-label="' + esc(label) + '"><span class="aimeat-pal-dot" style="background:' + esc(curAcc) + '"></span></button><span class="aimeat-pop" role="listbox">' + PALETTES.map(function(p) {
1044
+ var s = p.swatch[mode];
1045
+ return '<button type="button" role="option" data-palette="' + esc(p.id) + '" aria-pressed="' + (p.id === cur) + '"><span class="aimeat-pal-chip" style="background:' + esc(s.bg) + '"><span class="pc-card" style="background:' + esc(s.card) + '"></span><span class="pc-acc" style="background:' + esc(s.accent) + '"></span></span>' + esc(p.label) + "</button>";
1046
+ }).join("") + "</span></span>";
1047
+ }
1048
+ function wirePaletteControl(container, clampPopover2) {
1049
+ var root = container.querySelector("#aimeat-palette-switch");
1050
+ if (!root) return;
1051
+ var trigger = (
1052
+ /** @type {HTMLElement} */
1053
+ root.querySelector(".aimeat-pop-btn")
1054
+ );
1055
+ function syncDot() {
1056
+ var cur = aimeatReadPalette();
1057
+ var mode = document.documentElement.getAttribute("data-theme") === "dark" ? "dark" : "light";
1058
+ var p = PALETTES.find(function(x) {
1059
+ return x.id === cur;
1060
+ }) || PALETTES[0];
1061
+ var dot = (
1062
+ /** @type {HTMLElement|null} */
1063
+ root.querySelector(".aimeat-pal-dot")
1064
+ );
1065
+ if (dot) dot.style.background = p.swatch[mode].accent;
1066
+ root.querySelectorAll("button[data-palette]").forEach(function(b) {
1067
+ b.setAttribute("aria-pressed", String(b.getAttribute("data-palette") === cur));
1068
+ var pp = PALETTES.find(function(x) {
1069
+ return x.id === b.getAttribute("data-palette");
1070
+ });
1071
+ if (!pp) return;
1072
+ var s = pp.swatch[mode];
1073
+ var chip = (
1074
+ /** @type {HTMLElement|null} */
1075
+ b.querySelector(".aimeat-pal-chip")
1076
+ );
1077
+ var card = (
1078
+ /** @type {HTMLElement|null} */
1079
+ b.querySelector(".pc-card")
1080
+ );
1081
+ var acc = (
1082
+ /** @type {HTMLElement|null} */
1083
+ b.querySelector(".pc-acc")
1084
+ );
1085
+ if (chip) chip.style.background = s.bg;
1086
+ if (card) card.style.background = s.card;
1087
+ if (acc) acc.style.background = s.accent;
1088
+ });
1089
+ }
1090
+ root.querySelectorAll("button[data-palette]").forEach(function(b) {
1091
+ b.addEventListener("click", function() {
1092
+ aimeatApplyPalette(b.getAttribute("data-palette") || PALETTES[0].id);
1093
+ syncDot();
1094
+ root.classList.remove("aimeat-open");
1095
+ trigger.setAttribute("aria-expanded", "false");
1096
+ });
1097
+ });
1098
+ trigger.addEventListener("click", function(ev) {
1099
+ ev.stopPropagation();
1100
+ var open = root.classList.toggle("aimeat-open");
1101
+ trigger.setAttribute("aria-expanded", String(open));
1102
+ if (open) clampPopover2(
1103
+ /** @type {HTMLElement} */
1104
+ root.querySelector(".aimeat-pop")
1105
+ );
1106
+ });
1107
+ window.addEventListener("aimeat-palette-change", syncDot);
1108
+ window.addEventListener("aimeat-theme-change", syncDot);
1109
+ }
1110
+ function esc(s) {
1111
+ var d = document.createElement("div");
1112
+ d.textContent = s;
1113
+ return d.innerHTML;
1114
+ }
1115
+
760
1116
  // src/static/sdk-libs/auth/pill.js
761
1117
  function mountPill(auth2, selector, opts = {}) {
762
1118
  let container;
@@ -778,11 +1134,12 @@
778
1134
  }
779
1135
  }
780
1136
  const i = opts.i18n || {};
1137
+ const locales = readLocales(opts);
781
1138
  const useCompact = opts.compact !== void 0 ? !!opts.compact : isAppOrigin();
782
1139
  function render() {
783
1140
  const stored = auth2.getSession() || load("session");
784
1141
  if (stored) {
785
- var pillHtml = '<div class="aimeat-auth-pill" style="display:inline-flex;align-items:center;gap:10px;padding:8px 18px;background:linear-gradient(160deg,#3d2e1a 0%,#6b4c2a 15%,#c9a84c 30%,#f5e6a3 45%,#c9a84c 55%,#8b6914 70%,#4a3520 100%);border:1px solid rgba(201,168,76,.6);border-top-color:rgba(245,230,163,.5);border-bottom-color:rgba(75,53,32,.8);border-radius:10px;box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 3px 10px rgba(0,0,0,.4),0 0 20px rgba(201,168,76,.15);font-family:system-ui;font-size:14px"><span class="aimeat-auth-dot" style="display:inline-block;flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#b0ffc8,#00c853 40%,#00802e 80%,#003d15);box-shadow:0 0 5px rgba(0,200,83,.7),0 0 12px rgba(0,200,83,.3),inset 0 -1px 2px rgba(0,0,0,.3)"></span><span class="aimeat-auth-label" style="display:inline-flex;align-items:center;font-size:12px;font-weight:600;letter-spacing:.5px;color:#a0ffb8;text-shadow:0 0 4px rgba(0,210,80,.6),0 0 10px rgba(0,180,70,.3)">' + escHtml(i.loggedIn || "logged in") + '</span><span class="aimeat-auth-ghii" style="color:rgba(90,65,20,.7);font-weight:700;letter-spacing:.5px;font-size:13px;text-shadow:0 1px 0 rgba(245,230,163,.6),0 -1px 0 rgba(50,35,10,.3);-webkit-text-stroke:.2px rgba(120,85,20,.3)">' + escHtml(stored.displayName || stored.ghii || stored.owner) + "</span>" + (stored.federated ? '<span style="display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:700;letter-spacing:.5px;color:#7dd3fc;background:rgba(56,189,248,.15);padding:2px 6px;border-radius:4px;border:1px solid rgba(56,189,248,.3)">🌐 ' + escHtml(i.federated || "Federated") + "</span>" : "") + (stored._appOrigin && stored._app && !stored._own ? '<button id="aimeat-grant-gear" title="' + escHtml(i.manageAccess || "Manage permissions") + '" aria-label="' + escHtml(i.manageAccess || "Manage permissions") + '" style="background:rgba(90,65,20,.18);color:#5a4114;border:1px solid rgba(120,85,20,.35);border-radius:6px;padding:3px 8px;cursor:pointer;font-size:13px;line-height:1">⚙️</button>' : "") + themeToggleHtml(i) + '<button id="aimeat-logout-btn" class="aimeat-auth-logout" style="background:radial-gradient(ellipse at 50% 30%,#ff6b6b 0%,#dc2626 35%,#991b1b 70%,#7f1d1d 100%);color:#ffd7d7;border:1px solid rgba(220,38,38,.6);border-top-color:rgba(255,130,130,.4);border-bottom-color:rgba(100,20,20,.8);border-radius:6px;padding:3px 10px;cursor:pointer;font-size:11px;font-weight:700;letter-spacing:.3px;box-shadow:0 1px 0 rgba(255,140,140,.25) inset,0 -1px 0 rgba(80,10,10,.4) inset,0 2px 6px rgba(153,27,27,.5);text-shadow:0 1px 1px rgba(0,0,0,.4)">' + escHtml(i.logoutBtn || "Logout") + "</button></div>";
1142
+ var pillHtml = '<div class="aimeat-auth-pill" style="display:inline-flex;align-items:center;gap:10px;padding:8px 18px;background:linear-gradient(160deg,#3d2e1a 0%,#6b4c2a 15%,#c9a84c 30%,#f5e6a3 45%,#c9a84c 55%,#8b6914 70%,#4a3520 100%);border:1px solid rgba(201,168,76,.6);border-top-color:rgba(245,230,163,.5);border-bottom-color:rgba(75,53,32,.8);border-radius:10px;box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 3px 10px rgba(0,0,0,.4),0 0 20px rgba(201,168,76,.15);font-family:system-ui;font-size:14px"><span class="aimeat-auth-dot" style="display:inline-block;flex:0 0 auto;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#b0ffc8,#00c853 40%,#00802e 80%,#003d15);box-shadow:0 0 5px rgba(0,200,83,.7),0 0 12px rgba(0,200,83,.3),inset 0 -1px 2px rgba(0,0,0,.3)"></span><span class="aimeat-auth-label" style="display:inline-flex;align-items:center;font-size:12px;font-weight:600;letter-spacing:.5px;color:#a0ffb8;text-shadow:0 0 4px rgba(0,210,80,.6),0 0 10px rgba(0,180,70,.3)">' + escHtml(i.loggedIn || "logged in") + '</span><span class="aimeat-auth-ghii" style="color:rgba(90,65,20,.7);font-weight:700;letter-spacing:.5px;font-size:13px;text-shadow:0 1px 0 rgba(245,230,163,.6),0 -1px 0 rgba(50,35,10,.3);-webkit-text-stroke:.2px rgba(120,85,20,.3)">' + escHtml(stored.displayName || stored.ghii || stored.owner) + "</span>" + (stored.federated ? '<span style="display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:700;letter-spacing:.5px;color:#7dd3fc;background:rgba(56,189,248,.15);padding:2px 6px;border-radius:4px;border:1px solid rgba(56,189,248,.3)">🌐 ' + escHtml(i.federated || "Federated") + "</span>" : "") + (stored._appOrigin && stored._app && !stored._own ? '<button id="aimeat-grant-gear" title="' + escHtml(i.manageAccess || "Manage permissions") + '" aria-label="' + escHtml(i.manageAccess || "Manage permissions") + '" style="background:rgba(90,65,20,.18);color:#5a4114;border:1px solid rgba(120,85,20,.35);border-radius:6px;padding:3px 8px;cursor:pointer;font-size:13px;line-height:1">⚙️</button>' : "") + '<span class="aimeat-ctl">' + langSwitchHtml(i, locales) + modeSwitchHtml(i) + paletteControlHtml(i) + '</span><button id="aimeat-logout-btn" class="aimeat-auth-logout" style="background:radial-gradient(ellipse at 50% 30%,#ff6b6b 0%,#dc2626 35%,#991b1b 70%,#7f1d1d 100%);color:#ffd7d7;border:1px solid rgba(220,38,38,.6);border-top-color:rgba(255,130,130,.4);border-bottom-color:rgba(100,20,20,.8);border-radius:6px;padding:3px 10px;cursor:pointer;font-size:11px;font-weight:700;letter-spacing:.3px;box-shadow:0 1px 0 rgba(255,140,140,.25) inset,0 -1px 0 rgba(80,10,10,.4) inset,0 2px 6px rgba(153,27,27,.5);text-shadow:0 1px 1px rgba(0,0,0,.4)">' + escHtml(i.logoutBtn || "Logout") + "</button></div>";
786
1143
  if (useCompact) {
787
1144
  ensureAuthPillStyles();
788
1145
  var ini = pillInitials(stored.displayName || stored.ghii || stored.owner);
@@ -812,7 +1169,7 @@
812
1169
  compactBtn.setAttribute("aria-expanded", open ? "true" : "false");
813
1170
  });
814
1171
  } else {
815
- container.innerHTML = '<style>.aimeat-sign-btn{padding:8px 18px;background:linear-gradient(160deg,#3d2e1a 0%,#6b4c2a 15%,#c9a84c 30%,#f5e6a3 45%,#c9a84c 55%,#8b6914 70%,#4a3520 100%);color:#2a1800;border:1px solid rgba(201,168,76,.6);border-top-color:rgba(245,230,163,.5);border-bottom-color:rgba(75,53,32,.8);border-radius:10px;cursor:pointer;font-weight:800;font-family:system-ui;font-size:14px;letter-spacing:.3px;box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 3px 10px rgba(0,0,0,.4),0 0 20px rgba(201,168,76,.15);text-shadow:0 1px 0 rgba(245,230,163,.5);transition:transform .15s,box-shadow .15s}.aimeat-sign-btn:hover{transform:translateY(-1px);box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 5px 16px rgba(0,0,0,.5),0 0 30px rgba(201,168,76,.3)}</style><span style="display:inline-flex;align-items:center;gap:10px">' + themeToggleHtml(i) + '<button id="aimeat-login-btn" class="aimeat-sign-btn">' + (opts.buttonText || i.signInBtn || "❤️ Sign In") + "</button></span>";
1172
+ container.innerHTML = '<style>.aimeat-sign-btn{padding:8px 18px;background:linear-gradient(160deg,#3d2e1a 0%,#6b4c2a 15%,#c9a84c 30%,#f5e6a3 45%,#c9a84c 55%,#8b6914 70%,#4a3520 100%);color:#2a1800;border:1px solid rgba(201,168,76,.6);border-top-color:rgba(245,230,163,.5);border-bottom-color:rgba(75,53,32,.8);border-radius:10px;cursor:pointer;font-weight:800;font-family:system-ui;font-size:14px;letter-spacing:.3px;box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 3px 10px rgba(0,0,0,.4),0 0 20px rgba(201,168,76,.15);text-shadow:0 1px 0 rgba(245,230,163,.5);transition:transform .15s,box-shadow .15s}.aimeat-sign-btn:hover{transform:translateY(-1px);box-shadow:0 1px 0 rgba(245,230,163,.3) inset,0 -1px 0 rgba(75,53,32,.5) inset,0 5px 16px rgba(0,0,0,.5),0 0 30px rgba(201,168,76,.3)}</style><span style="display:inline-flex;align-items:center;gap:10px"><span class="aimeat-ctl">' + langSwitchHtml(i, locales) + modeSwitchHtml(i) + paletteControlHtml(i) + '</span><button id="aimeat-login-btn" class="aimeat-sign-btn">' + (opts.buttonText || i.signInBtn || "❤️ Sign In") + "</button></span>";
816
1173
  document.getElementById("aimeat-login-btn").addEventListener("click", () => {
817
1174
  if (isAppOrigin()) {
818
1175
  restoreSessionFromAppOrigin(true).then((s) => {
@@ -824,9 +1181,32 @@
824
1181
  }
825
1182
  });
826
1183
  }
827
- wireThemeToggle(container, i);
1184
+ wireModeSwitch(container);
1185
+ wireLangSwitch(container, i, locales);
1186
+ wirePaletteControl(container, clampPopover);
828
1187
  }
1188
+ ensureClusterStyles();
829
1189
  render();
1190
+ document.addEventListener("click", (ev) => {
1191
+ container.querySelectorAll(".aimeat-pop-wrap.aimeat-open").forEach((w) => {
1192
+ if (!w.contains(
1193
+ /** @type {Node} */
1194
+ ev.target
1195
+ )) {
1196
+ w.classList.remove("aimeat-open");
1197
+ var b = w.querySelector(".aimeat-pop-btn");
1198
+ if (b) b.setAttribute("aria-expanded", "false");
1199
+ }
1200
+ });
1201
+ });
1202
+ document.addEventListener("keydown", (ev) => {
1203
+ if (ev.key !== "Escape") return;
1204
+ container.querySelectorAll(".aimeat-pop-wrap.aimeat-open").forEach((w) => {
1205
+ w.classList.remove("aimeat-open");
1206
+ var b = w.querySelector(".aimeat-pop-btn");
1207
+ if (b) b.setAttribute("aria-expanded", "false");
1208
+ });
1209
+ });
830
1210
  if (useCompact) {
831
1211
  var closeCompact = () => {
832
1212
  var w = container.querySelector(".aimeat-auth-wrap.aimeat-open");
@@ -1826,6 +2206,27 @@
1826
2206
  if (typeof window !== "undefined" && window.addEventListener) {
1827
2207
  window.addEventListener("focus", refreshOnFocus);
1828
2208
  }
2209
+ auth.getLang = function(locales) {
2210
+ return aimeatReadLang(readLocales({ locales }));
2211
+ };
2212
+ auth.setLang = function(lang) {
2213
+ aimeatApplyLang(String(lang).toLowerCase());
2214
+ };
2215
+ auth.getPalette = function() {
2216
+ return aimeatReadPalette();
2217
+ };
2218
+ auth.setPalette = function(id) {
2219
+ aimeatApplyPalette(String(id).toLowerCase());
2220
+ };
2221
+ auth.getPalettes = function() {
2222
+ return PALETTES.map(function(p) {
2223
+ return { id: p.id, label: p.label, swatch: p.swatch };
2224
+ });
2225
+ };
2226
+ if (typeof document !== "undefined") {
2227
+ aimeatRestorePalette();
2228
+ aimeatRestoreMode();
2229
+ }
1829
2230
  var ns = attach("auth", auth);
1830
- ns.version = "2026-07-02-001";
2231
+ ns.version = "2026-07-25-002";
1831
2232
  })();
@@ -50,6 +50,17 @@
50
50
 
51
51
  // src/static/sdk-libs/data/index.js
52
52
  var { authFetch: authFetch2 } = makeSession("aimeat-data.js");
53
+ function scopeParams(opts) {
54
+ const p = new URLSearchParams();
55
+ if (opts?.agent) p.set("agent", opts.agent);
56
+ else if (opts?.ownerScope) p.set("owner_scope", "true");
57
+ return p;
58
+ }
59
+ function withParams(path, params) {
60
+ const qs = params.toString();
61
+ if (!qs) return path;
62
+ return path + (path.indexOf("?") >= 0 ? "&" : "?") + qs;
63
+ }
53
64
  var data = {
54
65
  // Write or upsert a memory entry
55
66
  async set(key, value, opts) {
@@ -61,11 +72,17 @@
61
72
  // Read a single entry (falls back to public read from app creator if not found or empty).
62
73
  // Uses ?soft=1 so a missing key is a clean 200 (value null) — no browser-console 404 noise;
63
74
  // the contract is unchanged: resolves null when the key does not exist.
64
- async get(key) {
65
- const res = await authFetch2("/v1/memory/" + encodeURIComponent(key) + "?soft=1");
75
+ // opts: { agent, ownerScope } — read from one of the owner's agents' namespaces, or
76
+ // across the owner's whole set (GHII + agents). Omitted → unchanged behaviour.
77
+ async get(key, opts) {
78
+ const res = await authFetch2(withParams(
79
+ "/v1/memory/" + encodeURIComponent(key) + "?soft=1",
80
+ scopeParams(opts)
81
+ ));
66
82
  var val = res.ok ? res.data.value : null;
67
83
  var isEmpty = val == null || typeof val === "object" && Object.keys(val).length === 0;
68
84
  if (!isEmpty) return val;
85
+ if (opts?.agent || opts?.ownerScope) return val;
69
86
  var creator = document.querySelector('meta[name="aimeat-creator"]')?.getAttribute("content");
70
87
  if (!creator) {
71
88
  var m = location.pathname.match(/\/v1\/apps\/([^/]+)\//);
@@ -83,9 +100,12 @@
83
100
  }
84
101
  return val;
85
102
  },
86
- // Read full entry metadata
87
- async getEntry(key) {
88
- const res = await authFetch2("/v1/memory/" + encodeURIComponent(key));
103
+ // Read full entry metadata. opts: { agent, ownerScope } as in get().
104
+ async getEntry(key, opts) {
105
+ const res = await authFetch2(withParams(
106
+ "/v1/memory/" + encodeURIComponent(key),
107
+ scopeParams(opts)
108
+ ));
89
109
  if (!res.ok) {
90
110
  if (res.error?.code === "NOT_FOUND") return null;
91
111
  throw new Error(res.error?.message || "Failed to get memory");
@@ -108,20 +128,42 @@
108
128
  if (!res.ok) throw new Error(res.error?.message || "Failed to delete memory");
109
129
  return res.data;
110
130
  },
111
- // List all memory keys
131
+ /**
132
+ * List memory keys.
133
+ *
134
+ * opts:
135
+ * prefix, visibility, tags — as before
136
+ * agent — list ONE of the owner's agents' namespaces (full GAII `name#owner@node`)
137
+ * ownerScope — list across the owner's GHII + every same-owner agent. An owner session
138
+ * already gets this server-side; an app-grant token needs it stated.
139
+ * meta — omit every `value` and report each entry's `bytes` instead. Use this for
140
+ * any listing you render as a table/board: the default response inlines
141
+ * every value, so a fleet-wide prefix can be megabytes per call.
142
+ * count — return only `{ count }` (server-side COUNT, no values). A cheap
143
+ * "did anything change?" probe; its cache is dropped by any memory write.
144
+ */
112
145
  async list(opts) {
113
- const params = new URLSearchParams();
146
+ const params = scopeParams(opts);
114
147
  if (opts?.prefix) params.set("prefix", opts.prefix);
115
148
  if (opts?.visibility) params.set("visibility", opts.visibility);
116
149
  if (opts?.tags) params.set("tags", opts.tags.join(","));
150
+ if (opts?.meta) params.set("include", "meta");
151
+ if (opts?.count) params.set("count", "true");
117
152
  const qs = params.toString();
118
153
  const res = await authFetch2("/v1/memory" + (qs ? "?" + qs : ""));
119
154
  if (!res.ok) throw new Error(res.error?.message || "Failed to list memory");
120
155
  return res.data;
121
156
  },
157
+ /** Cheap change probe: the number of keys under a prefix, no values transferred. */
158
+ async count(opts) {
159
+ const d = await data.list({ ...opts || {}, count: true });
160
+ return d && typeof d.count === "number" ? d.count : null;
161
+ },
122
162
  // Search memory entries
163
+ // opts: { visibility, agent, ownerScope } — scoping as in list().
123
164
  async search(query, opts) {
124
- const params = new URLSearchParams({ q: query });
165
+ const params = scopeParams(opts);
166
+ params.set("q", query);
125
167
  if (opts?.visibility) params.set("visibility", opts.visibility);
126
168
  const res = await authFetch2("/v1/memory/search?" + params.toString());
127
169
  if (!res.ok) throw new Error(res.error?.message || "Failed to search memory");