aimeat 2.0.0 → 2.1.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 (412) hide show
  1. package/dist/locales/en.json +35 -1
  2. package/dist/locales/fi.json +35 -1
  3. package/dist/public/components/LinkPreview.js +101 -0
  4. package/dist/public/components/NotificationBell.js +18 -1
  5. package/dist/public/css/theme.css +57 -7
  6. package/dist/public/css/views/admin.css +8 -1
  7. package/dist/public/css/views/app-grant.css +18 -0
  8. package/dist/public/css/views/inbox.css +46 -0
  9. package/dist/public/css/views/portfolio.css +46 -0
  10. package/dist/public/css/views/profile.css +29 -4
  11. package/dist/public/js/services/apps.js +19 -3
  12. package/dist/public/js/services/messages-ai-prompts.js +38 -0
  13. package/dist/public/js/services/messages.js +26 -4
  14. package/dist/public/js/services/notebook.js +76 -0
  15. package/dist/public/js/services/unfurl.js +43 -0
  16. package/dist/public/lib/samples/LICENSE.md +11 -0
  17. package/dist/public/lib/samples/bass/A1.mp3 +0 -0
  18. package/dist/public/lib/samples/bass/B2.mp3 +0 -0
  19. package/dist/public/lib/samples/bass/D2.mp3 +0 -0
  20. package/dist/public/lib/samples/bass/E1.mp3 +0 -0
  21. package/dist/public/lib/samples/bass/E3.mp3 +0 -0
  22. package/dist/public/lib/samples/bass/G2.mp3 +0 -0
  23. package/dist/public/lib/samples/epiano/C2.mp3 +0 -0
  24. package/dist/public/lib/samples/epiano/C3.mp3 +0 -0
  25. package/dist/public/lib/samples/epiano/C4.mp3 +0 -0
  26. package/dist/public/lib/samples/epiano/C5.mp3 +0 -0
  27. package/dist/public/lib/samples/epiano/C6.mp3 +0 -0
  28. package/dist/public/lib/samples/epiano/G2.mp3 +0 -0
  29. package/dist/public/lib/samples/epiano/G3.mp3 +0 -0
  30. package/dist/public/lib/samples/epiano/G4.mp3 +0 -0
  31. package/dist/public/lib/samples/epiano/G5.mp3 +0 -0
  32. package/dist/public/lib/samples/guitar-steel/A2.mp3 +0 -0
  33. package/dist/public/lib/samples/guitar-steel/A4.mp3 +0 -0
  34. package/dist/public/lib/samples/guitar-steel/B3.mp3 +0 -0
  35. package/dist/public/lib/samples/guitar-steel/D3.mp3 +0 -0
  36. package/dist/public/lib/samples/guitar-steel/E2.mp3 +0 -0
  37. package/dist/public/lib/samples/guitar-steel/E4.mp3 +0 -0
  38. package/dist/public/lib/samples/guitar-steel/E5.mp3 +0 -0
  39. package/dist/public/lib/samples/guitar-steel/G3.mp3 +0 -0
  40. package/dist/public/lib/samples/organ/C2.mp3 +0 -0
  41. package/dist/public/lib/samples/organ/C3.mp3 +0 -0
  42. package/dist/public/lib/samples/organ/C4.mp3 +0 -0
  43. package/dist/public/lib/samples/organ/C5.mp3 +0 -0
  44. package/dist/public/lib/samples/organ/C6.mp3 +0 -0
  45. package/dist/public/lib/samples/organ/G2.mp3 +0 -0
  46. package/dist/public/lib/samples/organ/G3.mp3 +0 -0
  47. package/dist/public/lib/samples/organ/G4.mp3 +0 -0
  48. package/dist/public/lib/samples/organ/G5.mp3 +0 -0
  49. package/dist/public/lib/samples/strings/C2.mp3 +0 -0
  50. package/dist/public/lib/samples/strings/C3.mp3 +0 -0
  51. package/dist/public/lib/samples/strings/C4.mp3 +0 -0
  52. package/dist/public/lib/samples/strings/C5.mp3 +0 -0
  53. package/dist/public/lib/samples/strings/C6.mp3 +0 -0
  54. package/dist/public/lib/samples/strings/G2.mp3 +0 -0
  55. package/dist/public/lib/samples/strings/G3.mp3 +0 -0
  56. package/dist/public/lib/samples/strings/G4.mp3 +0 -0
  57. package/dist/public/lib/samples/strings/G5.mp3 +0 -0
  58. package/dist/public/lib/samples/trumpet/A3.mp3 +0 -0
  59. package/dist/public/lib/samples/trumpet/A4.mp3 +0 -0
  60. package/dist/public/lib/samples/trumpet/A5.mp3 +0 -0
  61. package/dist/public/lib/samples/trumpet/C4.mp3 +0 -0
  62. package/dist/public/lib/samples/trumpet/C5.mp3 +0 -0
  63. package/dist/public/lib/samples/trumpet/E3.mp3 +0 -0
  64. package/dist/public/lib/samples/trumpet/E4.mp3 +0 -0
  65. package/dist/public/lib/samples/trumpet/E5.mp3 +0 -0
  66. package/dist/public/spa.html +2 -0
  67. package/dist/public/views/app-grant.js +24 -4
  68. package/dist/public/views/portfolio.js +61 -6
  69. package/dist/public/views/profile/apps-tab.js +18 -1
  70. package/dist/public/views/profile/inbox-tab/ai-actions.js +86 -0
  71. package/dist/public/views/profile/inbox-tab/components.js +124 -9
  72. package/dist/public/views/profile/inbox-tab/helpers.js +26 -0
  73. package/dist/public/views/profile/inbox-tab/panels.js +18 -3
  74. package/dist/public/views/profile/inbox-tab/use-thread-ux.js +18 -1
  75. package/dist/public/views/profile/inbox-tab.js +46 -49
  76. package/dist/public/views/profile/landing-page.cards.js +7 -0
  77. package/dist/public/views/profile/landing-page.js +12 -1
  78. package/dist/public/views/profile/skills-tab.js +1 -1
  79. package/dist/public/views/public-workspace-viewer.js +1 -1
  80. package/dist/public/views/start.js +2 -1
  81. package/dist/scripts/build-sdk-libs.d.ts +16 -0
  82. package/dist/scripts/build-sdk-libs.d.ts.map +1 -0
  83. package/dist/scripts/build-sdk-libs.js +112 -0
  84. package/dist/scripts/build-sdk-libs.js.map +1 -0
  85. package/dist/src/cli/connect/auth.d.ts +15 -0
  86. package/dist/src/cli/connect/auth.d.ts.map +1 -1
  87. package/dist/src/cli/connect/auth.js +25 -6
  88. package/dist/src/cli/connect/auth.js.map +1 -1
  89. package/dist/src/cli/connect/keychain.d.ts +9 -0
  90. package/dist/src/cli/connect/keychain.d.ts.map +1 -1
  91. package/dist/src/cli/connect/keychain.js +21 -8
  92. package/dist/src/cli/connect/keychain.js.map +1 -1
  93. package/dist/src/cli/connect/mcp/tools/exchange.d.ts +18 -0
  94. package/dist/src/cli/connect/mcp/tools/exchange.d.ts.map +1 -0
  95. package/dist/src/cli/connect/mcp/tools/exchange.js +170 -0
  96. package/dist/src/cli/connect/mcp/tools/exchange.js.map +1 -0
  97. package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
  98. package/dist/src/cli/connect/mcp/tools/index.js +2 -0
  99. package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
  100. package/dist/src/cli/connect/tool-call-defs-exchange.d.ts +3 -0
  101. package/dist/src/cli/connect/tool-call-defs-exchange.d.ts.map +1 -0
  102. package/dist/src/cli/connect/tool-call-defs-exchange.js +146 -0
  103. package/dist/src/cli/connect/tool-call-defs-exchange.js.map +1 -0
  104. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  105. package/dist/src/cli/connect/tool-call.js +2 -0
  106. package/dist/src/cli/connect/tool-call.js.map +1 -1
  107. package/dist/src/commerce/session-service.d.ts +14 -0
  108. package/dist/src/commerce/session-service.d.ts.map +1 -1
  109. package/dist/src/commerce/session-service.js +1 -1
  110. package/dist/src/commerce/session-service.js.map +1 -1
  111. package/dist/src/data/app-templates/shells.d.ts +7 -3
  112. package/dist/src/data/app-templates/shells.d.ts.map +1 -1
  113. package/dist/src/data/app-templates/shells.js +10 -6
  114. package/dist/src/data/app-templates/shells.js.map +1 -1
  115. package/dist/src/data/appdev-pitfalls.d.ts +2 -0
  116. package/dist/src/data/appdev-pitfalls.d.ts.map +1 -1
  117. package/dist/src/data/appdev-pitfalls.js +24 -1
  118. package/dist/src/data/appdev-pitfalls.js.map +1 -1
  119. package/dist/src/generated/api-types.d.ts +1565 -9
  120. package/dist/src/generated/api-types.d.ts.map +1 -1
  121. package/dist/src/mcp/annotations.d.ts.map +1 -1
  122. package/dist/src/mcp/annotations.js +20 -0
  123. package/dist/src/mcp/annotations.js.map +1 -1
  124. package/dist/src/mcp/apps.d.ts.map +1 -1
  125. package/dist/src/mcp/apps.js +8 -4
  126. package/dist/src/mcp/apps.js.map +1 -1
  127. package/dist/src/mcp/catalog/definitions/exchange.d.ts +18 -0
  128. package/dist/src/mcp/catalog/definitions/exchange.d.ts.map +1 -0
  129. package/dist/src/mcp/catalog/definitions/exchange.js +182 -0
  130. package/dist/src/mcp/catalog/definitions/exchange.js.map +1 -0
  131. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  132. package/dist/src/mcp/catalog/definitions.js +2 -0
  133. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  134. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  135. package/dist/src/mcp/catalog/scopes.js +22 -0
  136. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  137. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  138. package/dist/src/mcp/catalog/surfaces.js +14 -0
  139. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  140. package/dist/src/mcp/exchange-run.d.ts +5 -0
  141. package/dist/src/mcp/exchange-run.d.ts.map +1 -0
  142. package/dist/src/mcp/exchange-run.js +226 -0
  143. package/dist/src/mcp/exchange-run.js.map +1 -0
  144. package/dist/src/mcp/exchange.d.ts +5 -0
  145. package/dist/src/mcp/exchange.d.ts.map +1 -0
  146. package/dist/src/mcp/exchange.js +351 -0
  147. package/dist/src/mcp/exchange.js.map +1 -0
  148. package/dist/src/mcp/extensions.d.ts.map +1 -1
  149. package/dist/src/mcp/extensions.js +11 -0
  150. package/dist/src/mcp/extensions.js.map +1 -1
  151. package/dist/src/mcp/index.d.ts.map +1 -1
  152. package/dist/src/mcp/index.js +6 -2
  153. package/dist/src/mcp/index.js.map +1 -1
  154. package/dist/src/models/app-tool-schemas.d.ts +55 -1
  155. package/dist/src/models/app-tool-schemas.d.ts.map +1 -1
  156. package/dist/src/models/app-tool-schemas.js +20 -1
  157. package/dist/src/models/app-tool-schemas.js.map +1 -1
  158. package/dist/src/models/offer-schemas.d.ts +2 -2
  159. package/dist/src/models/schemas.d.ts +1 -0
  160. package/dist/src/models/schemas.d.ts.map +1 -1
  161. package/dist/src/models/schemas.js +3 -0
  162. package/dist/src/models/schemas.js.map +1 -1
  163. package/dist/src/routes/agents/device-auth.d.ts +4 -0
  164. package/dist/src/routes/agents/device-auth.d.ts.map +1 -1
  165. package/dist/src/routes/agents/device-auth.js +19 -4
  166. package/dist/src/routes/agents/device-auth.js.map +1 -1
  167. package/dist/src/routes/app-grants.d.ts +6 -0
  168. package/dist/src/routes/app-grants.d.ts.map +1 -1
  169. package/dist/src/routes/app-grants.js +35 -2
  170. package/dist/src/routes/app-grants.js.map +1 -1
  171. package/dist/src/routes/apps/fork-manage.d.ts.map +1 -1
  172. package/dist/src/routes/apps/fork-manage.js +24 -1
  173. package/dist/src/routes/apps/fork-manage.js.map +1 -1
  174. package/dist/src/routes/apps/publish.d.ts +2 -0
  175. package/dist/src/routes/apps/publish.d.ts.map +1 -1
  176. package/dist/src/routes/apps/publish.js +27 -1
  177. package/dist/src/routes/apps/publish.js.map +1 -1
  178. package/dist/src/routes/apps-cost.d.ts +25 -0
  179. package/dist/src/routes/apps-cost.d.ts.map +1 -0
  180. package/dist/src/routes/apps-cost.js +107 -0
  181. package/dist/src/routes/apps-cost.js.map +1 -0
  182. package/dist/src/routes/exchange-market.d.ts +28 -0
  183. package/dist/src/routes/exchange-market.d.ts.map +1 -0
  184. package/dist/src/routes/exchange-market.js +454 -0
  185. package/dist/src/routes/exchange-market.js.map +1 -0
  186. package/dist/src/routes/exchange.d.ts +33 -0
  187. package/dist/src/routes/exchange.d.ts.map +1 -0
  188. package/dist/src/routes/exchange.js +395 -0
  189. package/dist/src/routes/exchange.js.map +1 -0
  190. package/dist/src/routes/extensions/entitlement-gate.d.ts +33 -0
  191. package/dist/src/routes/extensions/entitlement-gate.d.ts.map +1 -0
  192. package/dist/src/routes/extensions/entitlement-gate.js +143 -0
  193. package/dist/src/routes/extensions/entitlement-gate.js.map +1 -0
  194. package/dist/src/routes/extensions/manifest.d.ts +9 -0
  195. package/dist/src/routes/extensions/manifest.d.ts.map +1 -1
  196. package/dist/src/routes/extensions/manifest.js +33 -1
  197. package/dist/src/routes/extensions/manifest.js.map +1 -1
  198. package/dist/src/routes/extensions/paywall.d.ts.map +1 -1
  199. package/dist/src/routes/extensions/paywall.js +9 -0
  200. package/dist/src/routes/extensions/paywall.js.map +1 -1
  201. package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
  202. package/dist/src/routes/federation-sync/messaging.js +3 -1
  203. package/dist/src/routes/federation-sync/messaging.js.map +1 -1
  204. package/dist/src/routes/ghii/recovery.d.ts +2 -0
  205. package/dist/src/routes/ghii/recovery.d.ts.map +1 -1
  206. package/dist/src/routes/ghii/recovery.js +7 -0
  207. package/dist/src/routes/ghii/recovery.js.map +1 -1
  208. package/dist/src/routes/ghii/register-login.d.ts +4 -0
  209. package/dist/src/routes/ghii/register-login.d.ts.map +1 -1
  210. package/dist/src/routes/ghii/register-login.js +45 -22
  211. package/dist/src/routes/ghii/register-login.js.map +1 -1
  212. package/dist/src/routes/ghii/web-verify.d.ts +5 -0
  213. package/dist/src/routes/ghii/web-verify.d.ts.map +1 -1
  214. package/dist/src/routes/ghii/web-verify.js +24 -3
  215. package/dist/src/routes/ghii/web-verify.js.map +1 -1
  216. package/dist/src/routes/libs/sdk-serve.d.ts +11 -0
  217. package/dist/src/routes/libs/sdk-serve.d.ts.map +1 -0
  218. package/dist/src/routes/libs/sdk-serve.js +53 -0
  219. package/dist/src/routes/libs/sdk-serve.js.map +1 -0
  220. package/dist/src/routes/libs.d.ts +7 -1
  221. package/dist/src/routes/libs.d.ts.map +1 -1
  222. package/dist/src/routes/libs.js +65 -146
  223. package/dist/src/routes/libs.js.map +1 -1
  224. package/dist/src/routes/messages.d.ts +3 -0
  225. package/dist/src/routes/messages.d.ts.map +1 -1
  226. package/dist/src/routes/messages.js +9 -0
  227. package/dist/src/routes/messages.js.map +1 -1
  228. package/dist/src/routes/notifications.d.ts +6 -3
  229. package/dist/src/routes/notifications.d.ts.map +1 -1
  230. package/dist/src/routes/notifications.js +32 -3
  231. package/dist/src/routes/notifications.js.map +1 -1
  232. package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
  233. package/dist/src/routes/organisms/workspace-access.js +38 -20
  234. package/dist/src/routes/organisms/workspace-access.js.map +1 -1
  235. package/dist/src/routes/unfurl.d.ts +27 -0
  236. package/dist/src/routes/unfurl.d.ts.map +1 -0
  237. package/dist/src/routes/unfurl.js +180 -0
  238. package/dist/src/routes/unfurl.js.map +1 -0
  239. package/dist/src/routes/upload.d.ts +2 -0
  240. package/dist/src/routes/upload.d.ts.map +1 -1
  241. package/dist/src/routes/upload.js +7 -0
  242. package/dist/src/routes/upload.js.map +1 -1
  243. package/dist/src/routes/webmcp.d.ts +3 -0
  244. package/dist/src/routes/webmcp.d.ts.map +1 -1
  245. package/dist/src/routes/webmcp.js +55 -0
  246. package/dist/src/routes/webmcp.js.map +1 -1
  247. package/dist/src/server-bootstrap/routes-loader.d.ts +1 -0
  248. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  249. package/dist/src/server-bootstrap/routes-loader.js +8 -0
  250. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  251. package/dist/src/services/agent-face.d.ts +10 -2
  252. package/dist/src/services/agent-face.d.ts.map +1 -1
  253. package/dist/src/services/agent-face.js +10 -4
  254. package/dist/src/services/agent-face.js.map +1 -1
  255. package/dist/src/services/app-tool-interfaces.d.ts +37 -0
  256. package/dist/src/services/app-tool-interfaces.d.ts.map +1 -0
  257. package/dist/src/services/app-tool-interfaces.js +101 -0
  258. package/dist/src/services/app-tool-interfaces.js.map +1 -0
  259. package/dist/src/services/build-app-prompt.d.ts +3 -0
  260. package/dist/src/services/build-app-prompt.d.ts.map +1 -1
  261. package/dist/src/services/build-app-prompt.js +12 -1
  262. package/dist/src/services/build-app-prompt.js.map +1 -1
  263. package/dist/src/services/contacts.d.ts +25 -1
  264. package/dist/src/services/contacts.d.ts.map +1 -1
  265. package/dist/src/services/contacts.js +30 -0
  266. package/dist/src/services/contacts.js.map +1 -1
  267. package/dist/src/services/entitlement-money.d.ts +55 -0
  268. package/dist/src/services/entitlement-money.d.ts.map +1 -0
  269. package/dist/src/services/entitlement-money.js +68 -0
  270. package/dist/src/services/entitlement-money.js.map +1 -0
  271. package/dist/src/services/exchange-market.d.ts +247 -0
  272. package/dist/src/services/exchange-market.d.ts.map +1 -0
  273. package/dist/src/services/exchange-market.js +254 -0
  274. package/dist/src/services/exchange-market.js.map +1 -0
  275. package/dist/src/services/exchange-proposals.d.ts +47 -0
  276. package/dist/src/services/exchange-proposals.d.ts.map +1 -0
  277. package/dist/src/services/exchange-proposals.js +71 -0
  278. package/dist/src/services/exchange-proposals.js.map +1 -0
  279. package/dist/src/services/exchange-work.d.ts +30 -0
  280. package/dist/src/services/exchange-work.d.ts.map +1 -0
  281. package/dist/src/services/exchange-work.js +43 -0
  282. package/dist/src/services/exchange-work.js.map +1 -0
  283. package/dist/src/services/message-send.d.ts.map +1 -1
  284. package/dist/src/services/message-send.js +4 -1
  285. package/dist/src/services/message-send.js.map +1 -1
  286. package/dist/src/services/metered-entitlements.d.ts +203 -0
  287. package/dist/src/services/metered-entitlements.d.ts.map +1 -0
  288. package/dist/src/services/metered-entitlements.js +264 -0
  289. package/dist/src/services/metered-entitlements.js.map +1 -0
  290. package/dist/src/services/notify.d.ts +7 -0
  291. package/dist/src/services/notify.d.ts.map +1 -1
  292. package/dist/src/services/notify.js +35 -0
  293. package/dist/src/services/notify.js.map +1 -1
  294. package/dist/src/services/owner-memory.d.ts +16 -0
  295. package/dist/src/services/owner-memory.d.ts.map +1 -1
  296. package/dist/src/services/owner-memory.js +23 -0
  297. package/dist/src/services/owner-memory.js.map +1 -1
  298. package/dist/src/services/owner-provisioning.d.ts +5 -0
  299. package/dist/src/services/owner-provisioning.d.ts.map +1 -1
  300. package/dist/src/services/owner-provisioning.js +20 -2
  301. package/dist/src/services/owner-provisioning.js.map +1 -1
  302. package/dist/src/storage/providers/postgres-kysely/methods/apps.d.ts +1 -0
  303. package/dist/src/storage/providers/postgres-kysely/methods/apps.d.ts.map +1 -1
  304. package/dist/src/storage/providers/postgres-kysely/methods/apps.js +2 -0
  305. package/dist/src/storage/providers/postgres-kysely/methods/apps.js.map +1 -1
  306. package/dist/src/storage/providers/postgres-kysely/methods/identity.d.ts +1 -0
  307. package/dist/src/storage/providers/postgres-kysely/methods/identity.d.ts.map +1 -1
  308. package/dist/src/storage/providers/postgres-kysely/methods/identity.js +4 -0
  309. package/dist/src/storage/providers/postgres-kysely/methods/identity.js.map +1 -1
  310. package/dist/src/storage/providers/postgres-kysely/migrations/0011_unique_verified_email.sql +25 -0
  311. package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
  312. package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
  313. package/dist/src/storage/providers/sqlite/methods/apps.js +2 -0
  314. package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
  315. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -0
  316. package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
  317. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +4 -0
  318. package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
  319. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  320. package/dist/src/storage/providers/sqlite/schema.js +20 -0
  321. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  322. package/dist/src/storage/repositories/app.repository.d.ts +0 -0
  323. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
  324. package/dist/src/storage/repositories/identity.repository.d.ts +6 -0
  325. package/dist/src/storage/repositories/identity.repository.d.ts.map +1 -1
  326. package/dist/src/storage/types/apps.d.ts +1 -0
  327. package/dist/src/storage/types/apps.d.ts.map +1 -1
  328. package/dist/src/storage/types/organisms-federation.d.ts +21 -0
  329. package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
  330. package/dist/src/utils/app-mobile-lint.d.ts +17 -0
  331. package/dist/src/utils/app-mobile-lint.d.ts.map +1 -0
  332. package/dist/src/utils/app-mobile-lint.js +40 -0
  333. package/dist/src/utils/app-mobile-lint.js.map +1 -0
  334. package/dist/static/app-catalog/_template.html +12 -77
  335. package/dist/static/app-catalog/js/apps-io.js +51 -165
  336. package/dist/static/app-catalog/js/cost.js +100 -0
  337. package/dist/static/app-catalog/js/db.js +23 -93
  338. package/dist/static/app-catalog/js/detail.js +158 -24
  339. package/dist/static/app-catalog/js/favorites.js +71 -0
  340. package/dist/static/app-catalog/js/i18n-data.js +90 -16
  341. package/dist/static/app-catalog/js/main.js +23 -103
  342. package/dist/static/app-catalog/js/migrate.js +88 -0
  343. package/dist/static/app-catalog/js/monetize.js +1 -1
  344. package/dist/static/app-catalog/js/promote.js +70 -0
  345. package/dist/static/app-catalog/js/render.js +26 -139
  346. package/dist/static/app-catalog/js/server-io.js +126 -223
  347. package/dist/static/app-catalog/js/settings.js +11 -204
  348. package/dist/static/app-catalog/styles/app-catalog.css +40 -0
  349. package/dist/static/app-catalog.html +790 -912
  350. package/dist/static/sdk-libs/_core/config.js +52 -0
  351. package/dist/static/sdk-libs/_core/http.js +52 -0
  352. package/dist/static/sdk-libs/_core/namespace.js +33 -0
  353. package/dist/static/sdk-libs/_core/sdk-globals.d.ts +50 -0
  354. package/dist/static/sdk-libs/_core/session.js +66 -0
  355. package/dist/static/sdk-libs/agentface/index.js +102 -0
  356. package/dist/static/sdk-libs/agents/index.js +267 -0
  357. package/dist/static/sdk-libs/ai/index.js +153 -0
  358. package/dist/static/sdk-libs/audio/core.js +111 -0
  359. package/dist/static/sdk-libs/audio/index.js +380 -0
  360. package/dist/static/sdk-libs/audio/instruments.js +369 -0
  361. package/dist/static/sdk-libs/auth/config.js +46 -0
  362. package/dist/static/sdk-libs/auth/crypto.js +166 -0
  363. package/dist/static/sdk-libs/auth/events.js +27 -0
  364. package/dist/static/sdk-libs/auth/i18n.js +64 -0
  365. package/dist/static/sdk-libs/auth/index.js +37 -0
  366. package/dist/static/sdk-libs/auth/modal.js +545 -0
  367. package/dist/static/sdk-libs/auth/pill.js +167 -0
  368. package/dist/static/sdk-libs/auth/session.js +792 -0
  369. package/dist/static/sdk-libs/auth/signup.js +232 -0
  370. package/dist/static/sdk-libs/auth/theme.js +96 -0
  371. package/dist/static/sdk-libs/capabilities/index.js +179 -0
  372. package/dist/static/sdk-libs/commerce/index.js +243 -0
  373. package/dist/static/sdk-libs/data/index.js +188 -0
  374. package/dist/static/sdk-libs/dist/aimeat-agentface.js +91 -0
  375. package/dist/static/sdk-libs/dist/aimeat-agents.js +315 -0
  376. package/dist/static/sdk-libs/dist/aimeat-ai.js +168 -0
  377. package/dist/static/sdk-libs/dist/aimeat-audio.js +979 -0
  378. package/dist/static/sdk-libs/dist/aimeat-auth.js +1831 -0
  379. package/dist/static/sdk-libs/dist/aimeat-capabilities.js +177 -0
  380. package/dist/static/sdk-libs/dist/aimeat-commerce.js +265 -0
  381. package/dist/static/sdk-libs/dist/aimeat-data.js +205 -0
  382. package/dist/static/sdk-libs/dist/aimeat-editor.js +299 -0
  383. package/dist/static/sdk-libs/dist/aimeat-header.js +270 -0
  384. package/dist/static/sdk-libs/dist/aimeat-intake.js +94 -0
  385. package/dist/static/sdk-libs/dist/aimeat-live.js +265 -0
  386. package/dist/static/sdk-libs/dist/aimeat-markdown.js +602 -0
  387. package/dist/static/sdk-libs/dist/aimeat-organism.js +394 -0
  388. package/dist/static/sdk-libs/dist/aimeat-portfolio-standalone.js +90 -0
  389. package/dist/static/sdk-libs/dist/aimeat-social.js +157 -0
  390. package/dist/static/sdk-libs/dist/aimeat-speech.js +300 -0
  391. package/dist/static/sdk-libs/dist/aimeat-storage.js +210 -0
  392. package/dist/static/sdk-libs/dist/aimeat-tunnel.js +383 -0
  393. package/dist/static/sdk-libs/dist/aimeat-wallet.js +118 -0
  394. package/dist/static/sdk-libs/dist/aimeat-webmcp.js +187 -0
  395. package/dist/static/sdk-libs/dist/aimeat-work.js +213 -0
  396. package/dist/static/sdk-libs/dist/aimeat-workflows.js +147 -0
  397. package/dist/static/sdk-libs/editor/index.js +229 -0
  398. package/dist/static/sdk-libs/header/index.js +249 -0
  399. package/dist/static/sdk-libs/intake/index.js +75 -0
  400. package/dist/static/sdk-libs/live/index.js +156 -0
  401. package/dist/static/sdk-libs/markdown/index.js +522 -0
  402. package/dist/static/sdk-libs/organism/index.js +381 -0
  403. package/dist/static/sdk-libs/portfolio-standalone/index.js +78 -0
  404. package/dist/static/sdk-libs/social/index.js +140 -0
  405. package/dist/static/sdk-libs/speech/index.js +321 -0
  406. package/dist/static/sdk-libs/storage/index.js +189 -0
  407. package/dist/static/sdk-libs/tunnel/index.js +428 -0
  408. package/dist/static/sdk-libs/wallet/index.js +115 -0
  409. package/dist/static/sdk-libs/webmcp/index.js +185 -0
  410. package/dist/static/sdk-libs/work/index.js +191 -0
  411. package/dist/static/sdk-libs/workflows/index.js +113 -0
  412. package/package.json +5 -2
@@ -0,0 +1,522 @@
1
+ /**
2
+ * @file markdown/index.js
3
+ * @description The aimeat-markdown library (SDK-libs migration Phase 2). A vanilla, dependency-free,
4
+ * XSS-safe GitHub-flavored-Markdown renderer for standalone published apps + cortex. render() builds
5
+ * the DOM with createElement/textContent (never innerHTML for content) so LLM-authored markdown has
6
+ * no raw-HTML/<script> surface; hrefs + img srcs are scheme-sanitized. renderToString() serializes
7
+ * the safe subset. renderRich() runs the full GFM pipeline (markdown-it + task lists + footnotes +
8
+ * DOMPurify + highlight.js from jsDelivr; mermaid from the node's vendored /lib/mermaid), falling
9
+ * back to render() when any CDN dep fails. ```aimeat-memory fences become live data embeds.
10
+ * Componentized ESM source esbuild bundles to the IIFE served, unchanged, at /v1/libs/aimeat-markdown.js.
11
+ * Ported verbatim from lib-markdown.ts; NODE_URL now comes from _core/config.
12
+ * @structure imports NODE_URL (config) + attach (namespace); sanitize/inline/block parsers; render/
13
+ * renderToString/renderRich; rich CDN loaders; live memory embeds; attach('md', …).
14
+ * @usage <script src="/v1/libs/aimeat-markdown.js"></script> AIMEAT.md.render(md, '#out')
15
+ * @version-history
16
+ * v1.0.0 — 2026-07-19 — Migrated from src/routes/lib-markdown.ts (SDK-libs migration Phase 2).
17
+ */
18
+ import { NODE_URL } from '../_core/config.js';
19
+ import { attach } from '../_core/namespace.js';
20
+
21
+ var BT = String.fromCharCode(96); // backtick
22
+ var SAFE = /^(https?:|mailto:)/i;
23
+ var SAFE_IMG = /^(https?:|blob:)/i;
24
+
25
+ function sanitizeHref(url) {
26
+ if (typeof url !== 'string') return null;
27
+ var t = url.trim();
28
+ if (!/^[a-z][a-z0-9+.-]*:/i.test(t)) return t; // relative / fragment links are safe
29
+ return SAFE.test(t) ? t : null;
30
+ }
31
+ function sanitizeImgSrc(url) {
32
+ if (typeof url !== 'string') return null;
33
+ var t = url.trim();
34
+ if (!/^[a-z][a-z0-9+.-]*:/i.test(t)) return t; // relative (e.g. /v1/pub/…)
35
+ return SAFE_IMG.test(t) ? t : null;
36
+ }
37
+
38
+ function txt(s) { return document.createTextNode(s == null ? '' : String(s)); }
39
+ function append(node, kids) {
40
+ if (kids == null) return;
41
+ if (!Array.isArray(kids)) kids = [kids];
42
+ for (var i = 0; i < kids.length; i++) {
43
+ var c = kids[i];
44
+ if (c == null) continue;
45
+ node.appendChild(typeof c === 'string' ? txt(c) : c);
46
+ }
47
+ }
48
+ function el(tag, attrs, kids) {
49
+ var n = document.createElement(tag);
50
+ if (attrs) for (var k in attrs) { if (attrs[k] != null) n.setAttribute(k, attrs[k]); }
51
+ append(n, kids);
52
+ return n;
53
+ }
54
+
55
+ // ── Inline parsing: image, code, link, bold, italic. Returns an array of (string | Node).
56
+ function parseInline(text) {
57
+ var out = [], i = 0, buf = '';
58
+ function flush() { if (buf) { out.push(buf); buf = ''; } }
59
+ while (i < text.length) {
60
+ var c = text[i];
61
+ // Image ![alt](url)
62
+ if (c === '!' && text[i + 1] === '[') {
63
+ var close = text.indexOf(']', i + 2);
64
+ if (close > i && text[close + 1] === '(') {
65
+ var paren = text.indexOf(')', close + 2);
66
+ if (paren > close) {
67
+ var src = sanitizeImgSrc(text.slice(close + 2, paren));
68
+ flush();
69
+ if (src) out.push(el('img', { src: src, alt: text.slice(i + 2, close), 'class': 'md-img', loading: 'lazy' }));
70
+ i = paren + 1; continue;
71
+ }
72
+ }
73
+ }
74
+ // Inline code
75
+ if (c === BT) {
76
+ var endc = text.indexOf(BT, i + 1);
77
+ if (endc > i) { flush(); out.push(el('code', { 'class': 'md-code' }, text.slice(i + 1, endc))); i = endc + 1; continue; }
78
+ }
79
+ // Link [label](url)
80
+ if (c === '[') {
81
+ var lc = text.indexOf(']', i + 1);
82
+ if (lc > i && text[lc + 1] === '(') {
83
+ var lp = text.indexOf(')', lc + 2);
84
+ if (lp > lc) {
85
+ var href = sanitizeHref(text.slice(lc + 2, lp));
86
+ var label = parseInline(text.slice(i + 1, lc));
87
+ flush();
88
+ out.push(href
89
+ ? el('a', { href: href, target: '_blank', rel: 'noopener noreferrer nofollow' }, label)
90
+ : el('span', null, label));
91
+ i = lp + 1; continue;
92
+ }
93
+ }
94
+ }
95
+ // Bold **...**
96
+ if (c === '*' && text[i + 1] === '*') {
97
+ var be = text.indexOf('**', i + 2);
98
+ if (be > i) { flush(); out.push(el('strong', null, parseInline(text.slice(i + 2, be)))); i = be + 2; continue; }
99
+ }
100
+ // Italic *...*
101
+ if (c === '*') {
102
+ var ie = text.indexOf('*', i + 1);
103
+ if (ie > i) { flush(); out.push(el('em', null, parseInline(text.slice(i + 1, ie)))); i = ie + 1; continue; }
104
+ }
105
+ // Italic _..._ at word boundaries (so snake_case stays literal)
106
+ if (c === '_' && (i === 0 || !/\w/.test(text[i - 1])) && text[i + 1] && text[i + 1] !== ' ') {
107
+ var j = i + 1;
108
+ while ((j = text.indexOf('_', j)) >= 0) {
109
+ var after = text[j + 1];
110
+ if (text[j - 1] !== ' ' && (after === undefined || !/\w/.test(after))) break;
111
+ j++;
112
+ }
113
+ if (j >= 0) { flush(); out.push(el('em', null, parseInline(text.slice(i + 1, j)))); i = j + 1; continue; }
114
+ }
115
+ buf += c; i++;
116
+ }
117
+ flush();
118
+ return out;
119
+ }
120
+
121
+ function tableRow(line) {
122
+ var cells = line.trim().split('|');
123
+ if (cells.length && cells[0] === '') cells = cells.slice(1);
124
+ if (cells.length && cells[cells.length - 1] === '') cells = cells.slice(0, -1);
125
+ return cells.map(function (c) { return c.trim(); });
126
+ }
127
+ function isDivider(line) { return /^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)*\|?\s*$/.test(line); }
128
+ function fenceInfo(line) {
129
+ var t = line.replace(/^\s+/, ''), ch = t.charAt(0);
130
+ if ((ch === BT || ch === '~') && t.slice(0, 3) === ch + ch + ch) return { marker: ch, lang: t.slice(3).trim().toLowerCase() };
131
+ return null;
132
+ }
133
+ function isFenceLine(line) { return fenceInfo(line) !== null; }
134
+ function isHeading(line) { return /^#{1,6}\s/.test(line); }
135
+ function isQuote(line) { return /^\s*>/.test(line); }
136
+ function isHr(line) { return /^\s*([-*_])\1{2,}\s*$/.test(line); }
137
+ function isUl(line) { return /^(\s*)([-*+])\s+/.test(line); }
138
+ function isOl(line) { return /^(\s*)(\d+)\.\s+/.test(line); }
139
+ function isBlockStart(line) { return isFenceLine(line) || isHeading(line) || isQuote(line) || isUl(line) || isOl(line); }
140
+
141
+ function parseBlocks(src) {
142
+ var lines = src.replace(/\r\n?/g, '\n').split('\n');
143
+ var blocks = [], i = 0;
144
+ while (i < lines.length) {
145
+ var line = lines[i];
146
+ if (line.trim() === '') { i++; continue; }
147
+
148
+ var fence = fenceInfo(line);
149
+ if (fence) {
150
+ var code = []; i++;
151
+ while (i < lines.length && lines[i].trim().split('').join('') !== '' &&
152
+ !(lines[i].trim().length >= 3 && lines[i].trim().split('').every(function (x) { return x === fence.marker; }))) {
153
+ code.push(lines[i]); i++;
154
+ }
155
+ i++; // consume closing fence (or EOF)
156
+ if (fence.lang === 'aimeat-memory') {
157
+ // live-data embed marker — renderRich's post-pass resolves it; plain render() leaves
158
+ // the spec visible as a code-style block (safe degrade).
159
+ blocks.push(el('pre', { 'class': 'md-pre md-mem-src' }, el('code', { 'class': 'md-code' }, code.join('\n'))));
160
+ } else {
161
+ blocks.push(el('pre', { 'class': 'md-pre' }, el('code', { 'class': 'md-code' }, code.join('\n'))));
162
+ }
163
+ continue;
164
+ }
165
+
166
+ var h = line.match(/^(#{1,6})\s+(.*)$/);
167
+ if (h) { blocks.push(el('h' + h[1].length, null, parseInline(h[2].trim()))); i++; continue; }
168
+
169
+ if (isQuote(line)) {
170
+ var quoted = [];
171
+ while (i < lines.length && isQuote(lines[i])) { quoted.push(lines[i].replace(/^\s*>\s?/, '')); i++; }
172
+ blocks.push(el('blockquote', null, parseBlocks(quoted.join('\n'))));
173
+ continue;
174
+ }
175
+
176
+ if (line.indexOf('|') !== -1 && i + 1 < lines.length && isDivider(lines[i + 1])) {
177
+ var header = tableRow(line); i += 2;
178
+ var rows = [];
179
+ while (i < lines.length && lines[i].indexOf('|') !== -1 && lines[i].trim() !== '') { rows.push(tableRow(lines[i])); i++; }
180
+ var thead = el('thead', null, el('tr', null, header.map(function (c) { return el('th', null, parseInline(c)); })));
181
+ var tbody = el('tbody', null, rows.map(function (r) {
182
+ return el('tr', null, r.map(function (c) { return el('td', null, parseInline(c)); }));
183
+ }));
184
+ blocks.push(el('table', null, [thead, tbody]));
185
+ continue;
186
+ }
187
+
188
+ if (isHr(line)) { blocks.push(el('hr', { 'class': 'md-hr' })); i++; continue; }
189
+
190
+ if (isUl(line) || isOl(line)) {
191
+ var ordered = isOl(line), items = [];
192
+ while (i < lines.length && (ordered ? isOl(lines[i]) : isUl(lines[i]))) {
193
+ var m = lines[i].match(ordered ? /^(\s*)(\d+)\.\s+(.*)$/ : /^(\s*)([-*+])\s+(.*)$/);
194
+ var parts = [m[3]]; i++;
195
+ while (i < lines.length && lines[i].trim() !== '' && !isUl(lines[i]) && !isOl(lines[i]) &&
196
+ !isHeading(lines[i]) && !isFenceLine(lines[i]) && !isQuote(lines[i]) && !isHr(lines[i])) {
197
+ parts.push(lines[i].trim()); i++;
198
+ }
199
+ items.push(el('li', null, parseInline(parts.join(' '))));
200
+ }
201
+ blocks.push(el(ordered ? 'ol' : 'ul', null, items));
202
+ continue;
203
+ }
204
+
205
+ var para = [];
206
+ while (i < lines.length && lines[i].trim() !== '' && !isBlockStart(lines[i])) { para.push(lines[i]); i++; }
207
+ blocks.push(el('p', null, parseInline(para.join(' '))));
208
+ }
209
+ return blocks;
210
+ }
211
+
212
+ function render(text, target) {
213
+ var div = el('div', { 'class': 'md-body' }, parseBlocks(typeof text === 'string' ? text : ''));
214
+ if (target) {
215
+ var t = typeof target === 'string' ? document.querySelector(target) : target;
216
+ if (t) { t.innerHTML = ''; t.appendChild(div); } // div content is built with createElement — safe
217
+ }
218
+ return div;
219
+ }
220
+ // String form of the safe-subset renderer, for callers that must assign to innerHTML.
221
+ function renderToString(text) { return render(text).outerHTML; }
222
+
223
+ // ── rich pipeline (markdown-it + DOMPurify + hljs + mermaid), lazy-loaded on first use ──
224
+ var RICH_CSS = '.md-body li.task-list-item{list-style:none;margin-left:-1.2rem;}' +
225
+ '.md-body li.task-list-item input[type=checkbox]{margin-right:.45rem;vertical-align:-1px;}' +
226
+ '.md-body .footnotes{font-size:.85rem;opacity:.75;}' +
227
+ '.md-body pre.md-mermaid{position:relative;}' +
228
+ '.md-body pre.md-mermaid::after{content:"mermaid";position:absolute;top:.35rem;right:.55rem;font-size:.62rem;opacity:.6;}' +
229
+ '.md-body pre.md-mermaid.md-mermaid-err::after{content:"mermaid — syntax error, showing source";color:#e06c75;opacity:1;}' +
230
+ '.md-body .md-mermaid-svg{margin:.8rem 0;overflow-x:auto;text-align:center;}' +
231
+ '.md-body .md-mermaid-svg svg{max-width:100%;height:auto;}' +
232
+ '.md-body .hljs-comment,.md-body .hljs-quote{color:#7d8799;font-style:italic;}' +
233
+ '.md-body .hljs-keyword,.md-body .hljs-selector-tag,.md-body .hljs-doctag{color:#a626a4;}' +
234
+ '.md-body .hljs-string,.md-body .hljs-regexp,.md-body .hljs-addition{color:#50a14f;}' +
235
+ '.md-body .hljs-number,.md-body .hljs-literal,.md-body .hljs-attr{color:#986801;}' +
236
+ '.md-body .hljs-title,.md-body .hljs-name,.md-body .hljs-section{color:#4078f2;}' +
237
+ '.md-body .hljs-built_in,.md-body .hljs-type{color:#c18401;}' +
238
+ '.md-body .hljs-symbol,.md-body .hljs-bullet,.md-body .hljs-meta,.md-body .hljs-selector-id,.md-body .hljs-variable,.md-body .hljs-template-variable{color:#0184bb;}' +
239
+ '.md-body .hljs-deletion{color:#ca1243;}.md-body .hljs-emphasis{font-style:italic;}.md-body .hljs-strong{font-weight:700;}' +
240
+ '[data-theme="dark"] .md-body .hljs-comment,[data-theme="dark"] .md-body .hljs-quote{color:#7f848e;}' +
241
+ '[data-theme="dark"] .md-body .hljs-keyword,[data-theme="dark"] .md-body .hljs-selector-tag,[data-theme="dark"] .md-body .hljs-doctag{color:#c678dd;}' +
242
+ '[data-theme="dark"] .md-body .hljs-string,[data-theme="dark"] .md-body .hljs-regexp,[data-theme="dark"] .md-body .hljs-addition{color:#98c379;}' +
243
+ '[data-theme="dark"] .md-body .hljs-number,[data-theme="dark"] .md-body .hljs-literal,[data-theme="dark"] .md-body .hljs-attr{color:#d19a66;}' +
244
+ '[data-theme="dark"] .md-body .hljs-title,[data-theme="dark"] .md-body .hljs-name,[data-theme="dark"] .md-body .hljs-section{color:#61afef;}' +
245
+ '[data-theme="dark"] .md-body .hljs-built_in,[data-theme="dark"] .md-body .hljs-type{color:#e5c07b;}' +
246
+ '[data-theme="dark"] .md-body .hljs-symbol,[data-theme="dark"] .md-body .hljs-bullet,[data-theme="dark"] .md-body .hljs-meta,[data-theme="dark"] .md-body .hljs-selector-id,[data-theme="dark"] .md-body .hljs-variable,[data-theme="dark"] .md-body .hljs-template-variable{color:#56b6c2;}' +
247
+ '[data-theme="dark"] .md-body .hljs-deletion{color:#e06c75;}' +
248
+ // Theme-neutral embed chrome: LIGHT fallbacks by default, dark fallbacks only under
249
+ // [data-theme="dark"]. The old dark-hex fallbacks rendered black boxes inside light-themed
250
+ // apps that don't define the daisyUI --color-base-* variables (AEB-2 finding).
251
+ '.md-body .md-mem{border:1px solid var(--color-base-300,#d8dde4);border-radius:8px;padding:.5em .8em .7em;margin:1em 0;background:var(--color-base-200,#f4f5f7);}' +
252
+ '[data-theme="dark"] .md-body .md-mem{border-color:var(--color-base-300,#3a3a3a);background:var(--color-base-200,#1c1c1c);}' +
253
+ '.md-body .md-mem-head{display:flex;align-items:center;gap:.6em;font-size:.78rem;opacity:.75;margin-bottom:.35em;}' +
254
+ '.md-body .md-mem-title{font-family:ui-monospace,Menlo,Consolas,monospace;overflow-wrap:anywhere;flex:1;}' +
255
+ '.md-body .md-mem-refresh{border:none;background:transparent;color:inherit;cursor:pointer;border-radius:4px;padding:0 .3em;font-size:.9rem;}' +
256
+ '.md-body .md-mem table{margin:.3em 0 0;}' +
257
+ '.md-body .md-mem-note{opacity:.75;font-size:.88rem;padding:.2em 0;}' +
258
+ '.md-body .md-mem-err{color:#e06c75;opacity:1;}' +
259
+ '.md-body .md-mem-more{opacity:.7;font-size:.78rem;margin-top:.3em;}' +
260
+ '.md-body .md-mem-value{white-space:pre-wrap;overflow-wrap:anywhere;}';
261
+ function injectRichCss() {
262
+ if (document.getElementById('aimeat-md-rich-styles')) return;
263
+ var s = document.createElement('style');
264
+ s.id = 'aimeat-md-rich-styles';
265
+ s.textContent = RICH_CSS;
266
+ (document.head || document.documentElement).appendChild(s);
267
+ }
268
+ var _scriptP = {};
269
+ function loadScript(src) {
270
+ if (_scriptP[src]) return _scriptP[src];
271
+ _scriptP[src] = new Promise(function (resolve, reject) {
272
+ var s = document.createElement('script');
273
+ s.src = src;
274
+ s.onload = function () { resolve(undefined); };
275
+ s.onerror = function () { delete _scriptP[src]; reject(new Error('failed to load ' + src)); };
276
+ document.head.appendChild(s);
277
+ });
278
+ return _scriptP[src];
279
+ }
280
+ var _richP = null;
281
+ function ensureRich() {
282
+ if (window.markdownit && window.DOMPurify) return Promise.resolve();
283
+ if (_richP) return _richP;
284
+ _richP = loadScript('https://cdn.jsdelivr.net/npm/markdown-it@14/dist/markdown-it.min.js').then(function () {
285
+ return Promise.all([
286
+ loadScript('https://cdn.jsdelivr.net/npm/markdown-it-task-lists@2/dist/markdown-it-task-lists.min.js').catch(function () {}),
287
+ loadScript('https://cdn.jsdelivr.net/npm/markdown-it-footnote@4/dist/markdown-it-footnote.min.js').catch(function () {}),
288
+ loadScript('https://cdn.jsdelivr.net/npm/dompurify@3/dist/purify.min.js'),
289
+ loadScript('https://cdn.jsdelivr.net/npm/@highlightjs/cdn-assets@11/highlight.min.js').catch(function () {}),
290
+ ]);
291
+ }).catch(function (e) { _richP = null; throw e; });
292
+ return _richP;
293
+ }
294
+ var _mermaidP = null, _mmSeq = 0;
295
+ function loadMermaid() {
296
+ if (window.mermaid) return Promise.resolve(window.mermaid);
297
+ if (_mermaidP) return _mermaidP;
298
+ _mermaidP = new Promise(function (resolve, reject) {
299
+ var s = document.createElement('script');
300
+ s.src = NODE_URL + '/lib/mermaid/mermaid.min.js'; // vendored on the node, ~3MB — lazy
301
+ s.onload = function () {
302
+ try {
303
+ window.mermaid.initialize({
304
+ startOnLoad: false, securityLevel: 'strict', flowchart: { htmlLabels: false },
305
+ suppressErrorRendering: true, // parse errors must NOT inject mermaid's error bomb into <body>
306
+ theme: document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'neutral',
307
+ });
308
+ resolve(window.mermaid);
309
+ } catch (e) { reject(e); }
310
+ };
311
+ s.onerror = function () { _mermaidP = null; reject(new Error('mermaid load failed')); };
312
+ document.head.appendChild(s);
313
+ });
314
+ return _mermaidP;
315
+ }
316
+ function renderMermaids(container) {
317
+ var nodes = container.querySelectorAll('pre.md-mermaid');
318
+ if (!nodes.length) return;
319
+ loadMermaid().then(function (mm) {
320
+ nodes.forEach(function (preEl) {
321
+ mm.render('aimd-' + (_mmSeq++), preEl.textContent || '').then(function (r) {
322
+ if (!preEl.isConnected) return;
323
+ var d = document.createElement('div');
324
+ d.className = 'md-mermaid-svg';
325
+ d.innerHTML = r.svg; // mermaid output, securityLevel:'strict'
326
+ preEl.replaceWith(d);
327
+ }).catch(function () { preEl.classList.add('md-mermaid-err'); /* keep raw source visible */ });
328
+ });
329
+ }).catch(function () { /* renderer unavailable — raw source stays */ });
330
+ }
331
+ // ── live memory embeds (aimeat-memory fence) ──
332
+ function parseEmbedSpec(text) {
333
+ var spec = {};
334
+ String(text || '').split('\n').forEach(function (line) {
335
+ var m = line.match(/^\s*([a-zA-Z_-]+)\s*[:=]\s*(.+?)\s*$/);
336
+ if (!m) return;
337
+ var k = m[1].toLowerCase();
338
+ if (k === 'fields') spec.fields = m[2].split(',').map(function (s) { return s.trim(); }).filter(Boolean);
339
+ else spec[k] = m[2];
340
+ });
341
+ return spec;
342
+ }
343
+ function memCellText(v) {
344
+ if (v == null) return '—';
345
+ var s = typeof v === 'object' ? JSON.stringify(v) : String(v);
346
+ return s.length > 160 ? s.slice(0, 160) + '…' : s;
347
+ }
348
+ function isPlainObj(v) { return v !== null && typeof v === 'object' && !Array.isArray(v); }
349
+ function buildMemBody(spec, value) {
350
+ var view = (spec.view || 'auto').toLowerCase();
351
+ if (view === 'auto') {
352
+ if (Array.isArray(value)) view = value.length && value.every(isPlainObj) ? 'table' : 'list';
353
+ else if (isPlainObj(value)) view = 'props';
354
+ else view = 'value';
355
+ }
356
+ if (view === 'json') return el('pre', { 'class': 'md-pre' }, el('code', { 'class': 'md-code' }, JSON.stringify(value, null, 2)));
357
+ if (view === 'table') {
358
+ var rows = (Array.isArray(value) ? value : []).filter(isPlainObj);
359
+ var cols = (spec.fields && spec.fields.length) ? spec.fields : [];
360
+ if (!cols.length) {
361
+ rows.forEach(function (r) { Object.keys(r).forEach(function (k) { if (cols.indexOf(k) < 0 && cols.length < 10) cols.push(k); }); });
362
+ }
363
+ var table = el('table', null, [
364
+ el('thead', null, el('tr', null, cols.map(function (c) { return el('th', null, c); }))),
365
+ el('tbody', null, rows.slice(0, 200).map(function (r) {
366
+ return el('tr', null, cols.map(function (c) { return el('td', null, memCellText(r[c])); }));
367
+ })),
368
+ ]);
369
+ var out = [table];
370
+ if (rows.length > 200) out.push(el('div', { 'class': 'md-mem-more' }, '… ' + (rows.length - 200) + ' more rows'));
371
+ return el('div', null, out);
372
+ }
373
+ if (view === 'props') {
374
+ var obj = isPlainObj(value) ? value : {};
375
+ return el('table', null, el('tbody', null, Object.keys(obj).map(function (k) {
376
+ return el('tr', null, [el('th', null, k), el('td', null, memCellText(obj[k]))]);
377
+ })));
378
+ }
379
+ if (view === 'list') {
380
+ var arr = Array.isArray(value) ? value : [value];
381
+ return el('ul', null, arr.slice(0, 200).map(function (v) { return el('li', null, memCellText(v)); }));
382
+ }
383
+ return el('div', { 'class': 'md-mem-value' }, memCellText(value));
384
+ }
385
+ function renderOneEmbed(preEl) {
386
+ var spec = parseEmbedSpec(preEl.textContent || '');
387
+ var box = el('div', { 'class': 'md-mem' });
388
+ var title = el('span', { 'class': 'md-mem-title' }, spec.title || spec.key || 'aimeat-memory');
389
+ var refresh = el('button', { type: 'button', 'class': 'md-mem-refresh', title: 'Refresh' }, '↻');
390
+ box.appendChild(el('div', { 'class': 'md-mem-head' }, [title, refresh]));
391
+ var body = el('div', { 'class': 'md-mem-note' }, 'Loading…');
392
+ box.appendChild(body);
393
+ function setBody(node) { box.replaceChild(node, body); body = node; }
394
+ function note(msg, err) { setBody(el('div', { 'class': 'md-mem-note' + (err ? ' md-mem-err' : '') }, msg)); }
395
+ async function load() {
396
+ if (!spec.key) { note('The block declares no key', true); return; }
397
+ try {
398
+ var envl;
399
+ if (spec.owner) {
400
+ var r = await fetch(NODE_URL + '/v1/memory/' + encodeURIComponent(spec.owner) + '/' + encodeURIComponent(spec.key));
401
+ envl = await r.json();
402
+ } else {
403
+ var auth = window.AIMEAT && window.AIMEAT.auth;
404
+ var s = auth && auth.getSession && auth.getSession();
405
+ if (!s || !s.jwt) { note('Sign in to view this data', true); return; }
406
+ // owner_scope: resolve keys across the owner's identities (agents included)
407
+ envl = await s.fetch('/v1/memory/' + encodeURIComponent(spec.key) + '?owner_scope=true');
408
+ if (envl && typeof envl.json === 'function') envl = await envl.json();
409
+ }
410
+ if (!envl || envl.ok === false) {
411
+ var code = (envl && envl.error && envl.error.code) || '';
412
+ if (code === 'NOT_FOUND') note('Key not found', true);
413
+ else if (code === 'AUTH_REQUIRED') note('Sign in to view this data', true);
414
+ else if (/SCOPE|FORBIDDEN|CONSENT|ACCESS|DENIED/.test(code)) note('🔒 No permission to read this key', true);
415
+ else note('Could not load (' + ((envl && envl.error && envl.error.message) || code || '?') + ')', true);
416
+ return;
417
+ }
418
+ var value = envl.data ? envl.data.value : undefined;
419
+ if (value == null) { note('(empty)'); return; }
420
+ setBody(buildMemBody(spec, value));
421
+ } catch (e) { note('Could not load (' + ((e && e.message) || '?') + ')', true); }
422
+ }
423
+ refresh.addEventListener('click', function () { note('Loading…'); load(); });
424
+ preEl.replaceWith(box);
425
+ load();
426
+ }
427
+ function renderMemoryEmbeds(container) {
428
+ container.querySelectorAll('pre.md-mem-src').forEach(function (p) { renderOneEmbed(p); });
429
+ }
430
+
431
+ var _mdit = null;
432
+ function getMdIt() {
433
+ if (_mdit) return _mdit;
434
+ if (!window.markdownit) return null;
435
+ var m = window.markdownit({
436
+ html: false, linkify: true,
437
+ highlight: function (code, lang) {
438
+ if (window.hljs && code.length < 30000) {
439
+ try {
440
+ if (lang && window.hljs.getLanguage(lang)) return window.hljs.highlight(code, { language: lang, ignoreIllegals: true }).value;
441
+ } catch { /* highlight failed — fall through to escaped */ }
442
+ }
443
+ return ''; // markdown-it escapes the code itself
444
+ },
445
+ });
446
+ try { if (window.markdownitTaskLists) m.use(window.markdownitTaskLists); } catch { /* plugin optional */ }
447
+ try { if (window.markdownitFootnote) m.use(window.markdownitFootnote); } catch { /* plugin optional */ }
448
+ var defFence = m.renderer.rules.fence || function (t, i, o, e, s) { return s.renderToken(t, i, o); };
449
+ m.renderer.rules.fence = function (tokens, idx, options, env, self) {
450
+ var t = tokens[idx];
451
+ var info = String(t.info || '').trim().toLowerCase();
452
+ if (info === 'mermaid') {
453
+ return '<pre class="md-mermaid">' + m.utils.escapeHtml(t.content) + '</pre>\n';
454
+ }
455
+ if (info === 'aimeat-memory') {
456
+ return '<pre class="md-mem-src">' + m.utils.escapeHtml(t.content) + '</pre>\n';
457
+ }
458
+ return defFence(tokens, idx, options, env, self);
459
+ };
460
+ _mdit = m;
461
+ return m;
462
+ }
463
+ // Full pipeline render. Resolves to the div.md-body element (also mounted into target when given).
464
+ // Any failure to load the CDN deps falls back to the dependency-free safe-subset render().
465
+ async function renderRich(text, target) {
466
+ text = typeof text === 'string' ? text : '';
467
+ var div;
468
+ try {
469
+ await ensureRich();
470
+ injectRichCss();
471
+ var m = getMdIt();
472
+ if (!m || !window.DOMPurify) throw new Error('rich pipeline unavailable');
473
+ div = el('div', { 'class': 'md-body' });
474
+ div.innerHTML = window.DOMPurify.sanitize(m.render(text));
475
+ div.querySelectorAll('a[href]').forEach(function (a) {
476
+ a.setAttribute('target', '_blank'); a.setAttribute('rel', 'noopener noreferrer nofollow');
477
+ });
478
+ div.querySelectorAll('input[type=checkbox]').forEach(function (cb) { /** @type {HTMLInputElement} */ (cb).disabled = true; });
479
+ renderMermaids(div);
480
+ } catch {
481
+ div = render(text);
482
+ }
483
+ injectRichCss();
484
+ renderMemoryEmbeds(div); // resolves in both paths — the safe-subset fallback also marks the fence
485
+ if (target) {
486
+ var t = typeof target === 'string' ? document.querySelector(target) : target;
487
+ if (t) { t.innerHTML = ''; t.appendChild(div); }
488
+ }
489
+ return div;
490
+ }
491
+
492
+ var CSS = '.md-body{line-height:1.6;color:var(--color-base-content,#e6e6e6);word-wrap:break-word;}' +
493
+ '.md-body>:first-child{margin-top:0;}.md-body>:last-child{margin-bottom:0;}' +
494
+ '.md-body h1,.md-body h2,.md-body h3,.md-body h4,.md-body h5,.md-body h6{font-weight:700;line-height:1.3;margin:1.8em 0 .6em;}' +
495
+ '.md-body h1{font-size:1.7rem;padding-bottom:.3em;border-bottom:2px solid var(--color-base-300,#3a3a3a);margin-top:.2em;}' +
496
+ '.md-body h2{font-size:1.32rem;padding-bottom:.25em;border-bottom:1px solid var(--color-base-300,#3a3a3a);}' +
497
+ '.md-body h3{font-size:1.13rem;}.md-body h4{font-size:1rem;}.md-body h5{font-size:.9rem;}.md-body h6{font-size:.85rem;opacity:.7;}' +
498
+ '.md-body p{margin:.85em 0;}.md-body ul,.md-body ol{margin:.7em 0;padding-left:1.7em;}' +
499
+ '.md-body ul{list-style:disc;}.md-body ol{list-style:decimal;}.md-body li{margin:.32em 0;padding-left:.2em;}' +
500
+ '.md-body a{color:var(--color-primary,#4f9eff);text-decoration:none;}.md-body a:hover{text-decoration:underline;}' +
501
+ '.md-body strong{font-weight:700;}.md-body em{font-style:italic;}' +
502
+ '.md-body .md-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.85em;background:var(--color-base-200,#1c1c1c);padding:.12em .42em;border-radius:4px;border:1px solid var(--color-base-300,#3a3a3a);}' +
503
+ '.md-body .md-pre{background:var(--color-base-200,#1c1c1c);border:1px solid var(--color-base-300,#3a3a3a);border-radius:8px;padding:.9em 1.1em;overflow-x:auto;margin:1em 0;line-height:1.5;}' +
504
+ '.md-body .md-pre .md-code{background:none;border:none;padding:0;font-size:.84rem;white-space:pre;}' +
505
+ '.md-body blockquote{margin:1em 0;padding:.3em 1.1em;border-left:3px solid var(--color-primary,#4f9eff);background:var(--color-base-200,#1c1c1c);border-radius:0 6px 6px 0;opacity:.85;}' +
506
+ '.md-body blockquote p{margin:.4em 0;}' +
507
+ '.md-body table{border-collapse:collapse;margin:1em 0;width:100%;font-size:.9rem;display:block;overflow-x:auto;}' +
508
+ '.md-body th,.md-body td{border:1px solid var(--color-base-300,#3a3a3a);padding:.45em .75em;text-align:left;vertical-align:top;}' +
509
+ '.md-body th{background:var(--color-base-200,#1c1c1c);font-weight:600;}.md-body tbody tr:nth-child(even){background:var(--color-base-200,#1c1c1c);}' +
510
+ '.md-body .md-img{max-width:100%;height:auto;border-radius:6px;margin:.6em 0;}' +
511
+ '.md-body hr,.md-body .md-hr{border:none;border-top:1px solid var(--color-base-300,#3a3a3a);margin:1.6em 0;}';
512
+
513
+ function injectCss() {
514
+ if (document.getElementById('aimeat-md-styles')) return;
515
+ var s = document.createElement('style');
516
+ s.id = 'aimeat-md-styles';
517
+ s.textContent = CSS;
518
+ (document.head || document.documentElement).appendChild(s);
519
+ }
520
+ injectCss();
521
+
522
+ attach('md', { render: render, renderToString: renderToString, renderRich: renderRich, sanitizeHref: sanitizeHref, sanitizeImgSrc: sanitizeImgSrc });