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,979 @@
1
+ // GENERATED FILE — do not edit directly. Source: src/static/sdk-libs/audio/ (+ _core/).
2
+ // Rebuild: pnpm build:sdk · Served at /v1/libs/aimeat-audio.js (with a per-node config prelude).
3
+ "use strict";
4
+ (() => {
5
+ // src/static/sdk-libs/_core/config.js
6
+ function cfg() {
7
+ return window.__AIMEAT_SDK_CFG__ || { nodeId: "", baseUrl: "" };
8
+ }
9
+ function resolveNodeUrl() {
10
+ const meta = document.querySelector('meta[name="aimeat-node"]');
11
+ if (meta) return (meta.getAttribute("content") || "").replace(/\/$/, "");
12
+ if (location.protocol === "http:" || location.protocol === "https:") return location.origin;
13
+ return cfg().baseUrl;
14
+ }
15
+ var NODE_URL = resolveNodeUrl();
16
+ var APEX_URL = cfg().baseUrl;
17
+ var NODE_ID = cfg().nodeId;
18
+ var HEARTBEAT_MS = cfg().heartbeatMs || 3e4;
19
+
20
+ // src/static/sdk-libs/_core/namespace.js
21
+ function namespace() {
22
+ if (!window.AIMEAT) window.AIMEAT = {};
23
+ return window.AIMEAT;
24
+ }
25
+ function attach(key, value) {
26
+ const ns = namespace();
27
+ ns[key] = value;
28
+ return ns;
29
+ }
30
+
31
+ // src/static/sdk-libs/audio/core.js
32
+ var _ctx = null;
33
+ function ctx() {
34
+ if (!_ctx) {
35
+ _ctx = new (window.AudioContext || window.webkitAudioContext)();
36
+ if (_ctx.state === "suspended") {
37
+ var resume = function() {
38
+ if (_ctx && _ctx.state === "suspended") _ctx.resume();
39
+ };
40
+ ["click", "touchstart", "keydown"].forEach(function(e) {
41
+ document.addEventListener(e, resume, { once: false, passive: true });
42
+ });
43
+ }
44
+ }
45
+ return _ctx;
46
+ }
47
+ var NOTE_NAMES = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
48
+ var FLAT_MAP = { "Db": "C#", "Eb": "D#", "Gb": "F#", "Ab": "G#", "Bb": "A#", "Cs": "C#", "Ds": "D#", "Fs": "F#", "Gs": "G#", "As": "A#" };
49
+ var _freqCache = {};
50
+ function noteToFreq(note) {
51
+ if (_freqCache[note]) return _freqCache[note];
52
+ var n = note.trim();
53
+ var flatKey = n.slice(0, 2);
54
+ if (FLAT_MAP[flatKey]) n = FLAT_MAP[flatKey] + n.slice(2);
55
+ var match = n.match(/^([A-G]#?)(\d)$/);
56
+ if (!match) return null;
57
+ var name = match[1];
58
+ var octave = parseInt(match[2]);
59
+ var semitone = NOTE_NAMES.indexOf(name);
60
+ if (semitone < 0) return null;
61
+ var midi = (octave + 1) * 12 + semitone;
62
+ var freq = 440 * Math.pow(2, (midi - 69) / 12);
63
+ _freqCache[note] = freq;
64
+ return freq;
65
+ }
66
+ var _masterGain = null;
67
+ function masterNode() {
68
+ if (!_masterGain) {
69
+ _masterGain = ctx().createGain();
70
+ _masterGain.connect(ctx().destination);
71
+ }
72
+ return _masterGain;
73
+ }
74
+ var master = {
75
+ get volume() {
76
+ return masterNode().gain.value;
77
+ },
78
+ set volume(v) {
79
+ masterNode().gain.value = Math.max(0, Math.min(1, v));
80
+ },
81
+ _muted: false,
82
+ _premuteVol: 1,
83
+ get mute() {
84
+ return master._muted;
85
+ },
86
+ set mute(v) {
87
+ if (v && !master._muted) {
88
+ master._premuteVol = masterNode().gain.value;
89
+ masterNode().gain.value = 0;
90
+ master._muted = true;
91
+ } else if (!v && master._muted) {
92
+ masterNode().gain.value = master._premuteVol;
93
+ master._muted = false;
94
+ }
95
+ }
96
+ };
97
+ var _active = {};
98
+ function registerActive(instrument, note, nodes, stopFn) {
99
+ var key = instrument + ":" + (note || "*");
100
+ if (_active[key]) _active[key].stop();
101
+ _active[key] = { nodes, stop: stopFn };
102
+ }
103
+ function stopActive(instrument, note) {
104
+ if (!instrument) {
105
+ Object.keys(_active).forEach(function(k) {
106
+ _active[k].stop();
107
+ delete _active[k];
108
+ });
109
+ return;
110
+ }
111
+ if (note) {
112
+ var key = instrument + ":" + note;
113
+ if (_active[key]) {
114
+ _active[key].stop();
115
+ delete _active[key];
116
+ }
117
+ } else {
118
+ Object.keys(_active).forEach(function(k) {
119
+ if (k.startsWith(instrument + ":")) {
120
+ _active[k].stop();
121
+ delete _active[k];
122
+ }
123
+ });
124
+ }
125
+ }
126
+ var instruments = {};
127
+ var sampleBuffers = {};
128
+ var customSynths = {};
129
+
130
+ // src/static/sdk-libs/audio/instruments.js
131
+ instruments.piano = {
132
+ play: function(note, opts) {
133
+ var freq = noteToFreq(note);
134
+ if (!freq) return;
135
+ var t = ctx().currentTime;
136
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
137
+ var dur = opts && opts.duration || 2;
138
+ var mod = ctx().createOscillator();
139
+ mod.type = "sine";
140
+ mod.frequency.value = freq * 2;
141
+ var modGain = ctx().createGain();
142
+ modGain.gain.setValueAtTime(freq * 1.5 * vel, t);
143
+ modGain.gain.exponentialRampToValueAtTime(freq * 0.01, t + dur * 0.8);
144
+ mod.connect(modGain);
145
+ var car = ctx().createOscillator();
146
+ car.type = "sine";
147
+ car.frequency.value = freq;
148
+ modGain.connect(car.frequency);
149
+ var env = ctx().createGain();
150
+ env.gain.setValueAtTime(0, t);
151
+ env.gain.linearRampToValueAtTime(vel * 0.4, t + 5e-3);
152
+ env.gain.exponentialRampToValueAtTime(vel * 0.15, t + 0.1);
153
+ env.gain.exponentialRampToValueAtTime(1e-3, t + dur);
154
+ car.connect(env);
155
+ env.connect(masterNode());
156
+ mod.start(t);
157
+ car.start(t);
158
+ mod.stop(t + dur + 0.1);
159
+ car.stop(t + dur + 0.1);
160
+ registerActive("piano", note, [mod, car], function() {
161
+ try {
162
+ env.gain.cancelScheduledValues(ctx().currentTime);
163
+ env.gain.setValueAtTime(env.gain.value, ctx().currentTime);
164
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
165
+ mod.stop(ctx().currentTime + 0.1);
166
+ car.stop(ctx().currentTime + 0.1);
167
+ } catch {
168
+ }
169
+ });
170
+ }
171
+ };
172
+ instruments.guitar = {
173
+ play: function(note, opts) {
174
+ var freq = noteToFreq(note);
175
+ if (!freq) return;
176
+ var t = ctx().currentTime;
177
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
178
+ var dur = opts && opts.duration || 1.5;
179
+ var bufSize = Math.round(ctx().sampleRate / freq);
180
+ var noiseBuffer = ctx().createBuffer(1, bufSize, ctx().sampleRate);
181
+ var data = noiseBuffer.getChannelData(0);
182
+ for (var i = 0; i < bufSize; i++) data[i] = (Math.random() * 2 - 1) * vel;
183
+ var noise = ctx().createBufferSource();
184
+ noise.buffer = noiseBuffer;
185
+ noise.loop = true;
186
+ var filter = ctx().createBiquadFilter();
187
+ filter.type = "lowpass";
188
+ filter.frequency.value = freq * 4;
189
+ filter.Q.value = 0.5;
190
+ var env = ctx().createGain();
191
+ env.gain.setValueAtTime(vel * 0.5, t);
192
+ env.gain.exponentialRampToValueAtTime(1e-3, t + dur);
193
+ noise.connect(filter);
194
+ filter.connect(env);
195
+ env.connect(masterNode());
196
+ noise.start(t);
197
+ noise.stop(t + dur + 0.05);
198
+ registerActive("guitar", note, [noise], function() {
199
+ try {
200
+ env.gain.cancelScheduledValues(ctx().currentTime);
201
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
202
+ noise.stop(ctx().currentTime + 0.1);
203
+ } catch {
204
+ }
205
+ });
206
+ }
207
+ };
208
+ instruments.bass = {
209
+ play: function(note, opts) {
210
+ var freq = noteToFreq(note);
211
+ if (!freq) return;
212
+ var t = ctx().currentTime;
213
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
214
+ var dur = opts && opts.duration || 0.8;
215
+ var osc = ctx().createOscillator();
216
+ osc.type = "sawtooth";
217
+ osc.frequency.value = freq;
218
+ var sub = ctx().createOscillator();
219
+ sub.type = "sine";
220
+ sub.frequency.value = freq / 2;
221
+ var subGain = ctx().createGain();
222
+ subGain.gain.value = 0.5;
223
+ sub.connect(subGain);
224
+ var mix = ctx().createGain();
225
+ osc.connect(mix);
226
+ subGain.connect(mix);
227
+ var filter = ctx().createBiquadFilter();
228
+ filter.type = "lowpass";
229
+ filter.frequency.setValueAtTime(freq * 3, t);
230
+ filter.frequency.exponentialRampToValueAtTime(freq * 1.2, t + 0.15);
231
+ filter.Q.value = 2;
232
+ var env = ctx().createGain();
233
+ env.gain.setValueAtTime(0, t);
234
+ env.gain.linearRampToValueAtTime(vel * 0.5, t + 0.01);
235
+ env.gain.setValueAtTime(vel * 0.5, t + dur * 0.7);
236
+ env.gain.exponentialRampToValueAtTime(1e-3, t + dur);
237
+ mix.connect(filter);
238
+ filter.connect(env);
239
+ env.connect(masterNode());
240
+ osc.start(t);
241
+ sub.start(t);
242
+ osc.stop(t + dur + 0.05);
243
+ sub.stop(t + dur + 0.05);
244
+ registerActive("bass", note, [osc, sub], function() {
245
+ try {
246
+ env.gain.cancelScheduledValues(ctx().currentTime);
247
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
248
+ osc.stop(ctx().currentTime + 0.1);
249
+ sub.stop(ctx().currentTime + 0.1);
250
+ } catch {
251
+ }
252
+ });
253
+ }
254
+ };
255
+ instruments.drums = {
256
+ play: function(hit, opts) {
257
+ var t = ctx().currentTime;
258
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
259
+ function makeTom(freq) {
260
+ var osc = ctx().createOscillator();
261
+ osc.type = "sine";
262
+ osc.frequency.setValueAtTime(freq, t);
263
+ osc.frequency.exponentialRampToValueAtTime(freq * 0.6, t + 0.15);
264
+ var g = ctx().createGain();
265
+ g.gain.setValueAtTime(vel * 0.5, t);
266
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.3);
267
+ osc.connect(g);
268
+ g.connect(masterNode());
269
+ osc.start(t);
270
+ osc.stop(t + 0.4);
271
+ return [osc];
272
+ }
273
+ var synths = {
274
+ "kick": function() {
275
+ var osc = ctx().createOscillator();
276
+ osc.type = "sine";
277
+ osc.frequency.setValueAtTime(150, t);
278
+ osc.frequency.exponentialRampToValueAtTime(50, t + 0.1);
279
+ var g = ctx().createGain();
280
+ g.gain.setValueAtTime(vel, t);
281
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.4);
282
+ osc.connect(g);
283
+ g.connect(masterNode());
284
+ var click = ctx().createOscillator();
285
+ click.type = "square";
286
+ click.frequency.value = 800;
287
+ var cg = ctx().createGain();
288
+ cg.gain.setValueAtTime(vel * 0.3, t);
289
+ cg.gain.exponentialRampToValueAtTime(1e-3, t + 0.02);
290
+ click.connect(cg);
291
+ cg.connect(masterNode());
292
+ osc.start(t);
293
+ osc.stop(t + 0.5);
294
+ click.start(t);
295
+ click.stop(t + 0.05);
296
+ return [osc, click];
297
+ },
298
+ "snare": function() {
299
+ var bufLen = Math.round(ctx().sampleRate * 0.15);
300
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
301
+ var d = buf.getChannelData(0);
302
+ for (var i = 0; i < bufLen; i++) d[i] = Math.random() * 2 - 1;
303
+ var noise = ctx().createBufferSource();
304
+ noise.buffer = buf;
305
+ var nf = ctx().createBiquadFilter();
306
+ nf.type = "highpass";
307
+ nf.frequency.value = 1e3;
308
+ var ng = ctx().createGain();
309
+ ng.gain.setValueAtTime(vel * 0.6, t);
310
+ ng.gain.exponentialRampToValueAtTime(1e-3, t + 0.15);
311
+ noise.connect(nf);
312
+ nf.connect(ng);
313
+ ng.connect(masterNode());
314
+ var osc = ctx().createOscillator();
315
+ osc.type = "sine";
316
+ osc.frequency.value = 200;
317
+ var og = ctx().createGain();
318
+ og.gain.setValueAtTime(vel * 0.5, t);
319
+ og.gain.exponentialRampToValueAtTime(1e-3, t + 0.08);
320
+ osc.connect(og);
321
+ og.connect(masterNode());
322
+ noise.start(t);
323
+ osc.start(t);
324
+ osc.stop(t + 0.2);
325
+ return [noise, osc];
326
+ },
327
+ "hihat": function() {
328
+ var bufLen = Math.round(ctx().sampleRate * 0.05);
329
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
330
+ var d = buf.getChannelData(0);
331
+ for (var i = 0; i < bufLen; i++) d[i] = Math.random() * 2 - 1;
332
+ var noise = ctx().createBufferSource();
333
+ noise.buffer = buf;
334
+ var f = ctx().createBiquadFilter();
335
+ f.type = "highpass";
336
+ f.frequency.value = 7e3;
337
+ var g = ctx().createGain();
338
+ g.gain.setValueAtTime(vel * 0.3, t);
339
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.05);
340
+ noise.connect(f);
341
+ f.connect(g);
342
+ g.connect(masterNode());
343
+ noise.start(t);
344
+ return [noise];
345
+ },
346
+ "hihat-open": function() {
347
+ var bufLen = Math.round(ctx().sampleRate * 0.3);
348
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
349
+ var d = buf.getChannelData(0);
350
+ for (var i = 0; i < bufLen; i++) d[i] = Math.random() * 2 - 1;
351
+ var noise = ctx().createBufferSource();
352
+ noise.buffer = buf;
353
+ var f = ctx().createBiquadFilter();
354
+ f.type = "highpass";
355
+ f.frequency.value = 6e3;
356
+ var g = ctx().createGain();
357
+ g.gain.setValueAtTime(vel * 0.3, t);
358
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.3);
359
+ noise.connect(f);
360
+ f.connect(g);
361
+ g.connect(masterNode());
362
+ noise.start(t);
363
+ return [noise];
364
+ },
365
+ "crash": function() {
366
+ var bufLen = Math.round(ctx().sampleRate * 1);
367
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
368
+ var d = buf.getChannelData(0);
369
+ for (var i = 0; i < bufLen; i++) d[i] = Math.random() * 2 - 1;
370
+ var noise = ctx().createBufferSource();
371
+ noise.buffer = buf;
372
+ var f = ctx().createBiquadFilter();
373
+ f.type = "highpass";
374
+ f.frequency.value = 4e3;
375
+ var g = ctx().createGain();
376
+ g.gain.setValueAtTime(vel * 0.5, t);
377
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 1);
378
+ noise.connect(f);
379
+ f.connect(g);
380
+ g.connect(masterNode());
381
+ noise.start(t);
382
+ return [noise];
383
+ },
384
+ "ride": function() {
385
+ var bufLen = Math.round(ctx().sampleRate * 0.8);
386
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
387
+ var d = buf.getChannelData(0);
388
+ for (var i = 0; i < bufLen; i++) d[i] = Math.random() * 2 - 1;
389
+ var noise = ctx().createBufferSource();
390
+ noise.buffer = buf;
391
+ var f = ctx().createBiquadFilter();
392
+ f.type = "bandpass";
393
+ f.frequency.value = 8e3;
394
+ f.Q.value = 1;
395
+ var g = ctx().createGain();
396
+ g.gain.setValueAtTime(vel * 0.3, t);
397
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.8);
398
+ noise.connect(f);
399
+ f.connect(g);
400
+ g.connect(masterNode());
401
+ noise.start(t);
402
+ return [noise];
403
+ },
404
+ "tom-high": function() {
405
+ return makeTom(300);
406
+ },
407
+ "tom-mid": function() {
408
+ return makeTom(220);
409
+ },
410
+ "tom-low": function() {
411
+ return makeTom(150);
412
+ },
413
+ "clap": function() {
414
+ var nodes2 = [];
415
+ for (var ci = 0; ci < 3; ci++) {
416
+ var delay = ci * 0.01;
417
+ var bufLen = Math.round(ctx().sampleRate * 0.02);
418
+ var buf = ctx().createBuffer(1, bufLen, ctx().sampleRate);
419
+ var d = buf.getChannelData(0);
420
+ for (var j = 0; j < bufLen; j++) d[j] = Math.random() * 2 - 1;
421
+ var noise = ctx().createBufferSource();
422
+ noise.buffer = buf;
423
+ var f = ctx().createBiquadFilter();
424
+ f.type = "bandpass";
425
+ f.frequency.value = 2500;
426
+ f.Q.value = 3;
427
+ var g = ctx().createGain();
428
+ g.gain.setValueAtTime(vel * 0.4, t + delay);
429
+ g.gain.exponentialRampToValueAtTime(1e-3, t + delay + 0.08);
430
+ noise.connect(f);
431
+ f.connect(g);
432
+ g.connect(masterNode());
433
+ noise.start(t + delay);
434
+ nodes2.push(noise);
435
+ }
436
+ return nodes2;
437
+ },
438
+ "cowbell": function() {
439
+ var osc1 = ctx().createOscillator();
440
+ osc1.type = "square";
441
+ osc1.frequency.value = 587;
442
+ var osc2 = ctx().createOscillator();
443
+ osc2.type = "square";
444
+ osc2.frequency.value = 845;
445
+ var g = ctx().createGain();
446
+ g.gain.setValueAtTime(vel * 0.3, t);
447
+ g.gain.exponentialRampToValueAtTime(1e-3, t + 0.4);
448
+ var f = ctx().createBiquadFilter();
449
+ f.type = "bandpass";
450
+ f.frequency.value = 700;
451
+ f.Q.value = 3;
452
+ osc1.connect(g);
453
+ osc2.connect(g);
454
+ g.connect(f);
455
+ f.connect(masterNode());
456
+ osc1.start(t);
457
+ osc2.start(t);
458
+ osc1.stop(t + 0.5);
459
+ osc2.stop(t + 0.5);
460
+ return [osc1, osc2];
461
+ }
462
+ };
463
+ var fn = synths[hit];
464
+ if (!fn) {
465
+ console.warn("[aimeat-audio] Unknown drum hit:", hit);
466
+ return;
467
+ }
468
+ var nodes = fn();
469
+ registerActive("drums", hit, nodes, function() {
470
+ nodes.forEach(function(n) {
471
+ try {
472
+ n.stop(ctx().currentTime + 0.01);
473
+ } catch {
474
+ }
475
+ });
476
+ });
477
+ }
478
+ };
479
+ instruments.flute = {
480
+ play: function(note, opts) {
481
+ var freq = noteToFreq(note);
482
+ if (!freq) return;
483
+ var t = ctx().currentTime;
484
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.6;
485
+ var dur = opts && opts.duration || 1.5;
486
+ var vibDepth = opts && opts.vibrato !== void 0 ? opts.vibrato : 0.15;
487
+ var osc = ctx().createOscillator();
488
+ osc.type = "sine";
489
+ osc.frequency.value = freq;
490
+ var lfo = ctx().createOscillator();
491
+ lfo.type = "sine";
492
+ lfo.frequency.value = 5.5;
493
+ var lfoGain = ctx().createGain();
494
+ lfoGain.gain.value = freq * vibDepth * 0.02;
495
+ lfo.connect(lfoGain);
496
+ lfoGain.connect(osc.frequency);
497
+ var noiseBufLen = Math.round(ctx().sampleRate * dur);
498
+ var noiseBuf = ctx().createBuffer(1, noiseBufLen, ctx().sampleRate);
499
+ var nd = noiseBuf.getChannelData(0);
500
+ for (var i = 0; i < noiseBufLen; i++) nd[i] = Math.random() * 2 - 1;
501
+ var noiseNode = ctx().createBufferSource();
502
+ noiseNode.buffer = noiseBuf;
503
+ var noiseFilt = ctx().createBiquadFilter();
504
+ noiseFilt.type = "bandpass";
505
+ noiseFilt.frequency.value = freq;
506
+ noiseFilt.Q.value = 2;
507
+ var noiseGain = ctx().createGain();
508
+ noiseGain.gain.value = vel * 0.06;
509
+ noiseNode.connect(noiseFilt);
510
+ noiseFilt.connect(noiseGain);
511
+ var env = ctx().createGain();
512
+ env.gain.setValueAtTime(0, t);
513
+ env.gain.linearRampToValueAtTime(vel * 0.3, t + 0.08);
514
+ env.gain.setValueAtTime(vel * 0.3, t + dur - 0.1);
515
+ env.gain.linearRampToValueAtTime(0, t + dur);
516
+ osc.connect(env);
517
+ noiseGain.connect(env);
518
+ env.connect(masterNode());
519
+ lfo.start(t);
520
+ osc.start(t);
521
+ noiseNode.start(t);
522
+ lfo.stop(t + dur + 0.1);
523
+ osc.stop(t + dur + 0.1);
524
+ registerActive("flute", note, [osc, lfo, noiseNode], function() {
525
+ try {
526
+ env.gain.cancelScheduledValues(ctx().currentTime);
527
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
528
+ osc.stop(ctx().currentTime + 0.1);
529
+ lfo.stop(ctx().currentTime + 0.1);
530
+ } catch {
531
+ }
532
+ });
533
+ }
534
+ };
535
+ instruments.synth = {
536
+ play: function(note, opts) {
537
+ var freq = noteToFreq(note);
538
+ if (!freq) return;
539
+ var t = ctx().currentTime;
540
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
541
+ var dur = opts && opts.duration || 1;
542
+ var wave = opts && opts.wave || "sawtooth";
543
+ var filterFreq = opts && opts.filter || 2e3;
544
+ var osc = ctx().createOscillator();
545
+ osc.type = wave;
546
+ osc.frequency.value = freq;
547
+ var osc2 = ctx().createOscillator();
548
+ osc2.type = wave;
549
+ osc2.frequency.value = freq;
550
+ osc2.detune.value = 7;
551
+ var osc2Gain = ctx().createGain();
552
+ osc2Gain.gain.value = 0.5;
553
+ osc2.connect(osc2Gain);
554
+ var filter = ctx().createBiquadFilter();
555
+ filter.type = "lowpass";
556
+ filter.frequency.value = filterFreq;
557
+ filter.Q.value = 1;
558
+ var env = ctx().createGain();
559
+ env.gain.setValueAtTime(0, t);
560
+ env.gain.linearRampToValueAtTime(vel * 0.3, t + 0.02);
561
+ env.gain.setValueAtTime(vel * 0.3, t + dur * 0.7);
562
+ env.gain.exponentialRampToValueAtTime(1e-3, t + dur);
563
+ osc.connect(filter);
564
+ osc2Gain.connect(filter);
565
+ filter.connect(env);
566
+ env.connect(masterNode());
567
+ osc.start(t);
568
+ osc2.start(t);
569
+ osc.stop(t + dur + 0.05);
570
+ osc2.stop(t + dur + 0.05);
571
+ registerActive("synth", note, [osc, osc2], function() {
572
+ try {
573
+ env.gain.cancelScheduledValues(ctx().currentTime);
574
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
575
+ osc.stop(ctx().currentTime + 0.1);
576
+ osc2.stop(ctx().currentTime + 0.1);
577
+ } catch {
578
+ }
579
+ });
580
+ }
581
+ };
582
+
583
+ // src/static/sdk-libs/audio/index.js
584
+ var _soundboardBuffers = {};
585
+ var _soundboardSources = {};
586
+ var soundboard = {
587
+ load: function(name, url) {
588
+ return fetch(url).then(function(resp) {
589
+ if (!resp.ok) throw new Error("Failed to load sound: " + url);
590
+ return resp.arrayBuffer();
591
+ }).then(function(arrayBuf) {
592
+ return ctx().decodeAudioData(arrayBuf);
593
+ }).then(function(decoded) {
594
+ _soundboardBuffers[name] = decoded;
595
+ });
596
+ },
597
+ loadAll: function(map) {
598
+ var entries = Object.keys(map);
599
+ return Promise.all(entries.map(function(k) {
600
+ return soundboard.load(k, map[k]);
601
+ }));
602
+ },
603
+ play: function(name, opts) {
604
+ var buf = _soundboardBuffers[name];
605
+ if (!buf) {
606
+ console.warn("[aimeat-audio] Sound not loaded:", name);
607
+ return;
608
+ }
609
+ var source = ctx().createBufferSource();
610
+ source.buffer = buf;
611
+ source.loop = opts && opts.loop || false;
612
+ var gain = ctx().createGain();
613
+ gain.gain.value = opts && opts.volume !== void 0 ? opts.volume : 1;
614
+ source.connect(gain);
615
+ gain.connect(masterNode());
616
+ source.start();
617
+ _soundboardSources[name] = source;
618
+ source.onended = function() {
619
+ if (_soundboardSources[name] === source) delete _soundboardSources[name];
620
+ };
621
+ },
622
+ stop: function(name) {
623
+ if (_soundboardSources[name]) {
624
+ try {
625
+ _soundboardSources[name].stop();
626
+ } catch {
627
+ }
628
+ delete _soundboardSources[name];
629
+ }
630
+ }
631
+ };
632
+ var SAMPLE_NOTES = {
633
+ piano: ["A2", "C3", "Ds3", "A3", "C4", "Ds4", "A4", "C5", "Ds5", "C6", "C7"],
634
+ guitar: ["E2", "A2", "D3", "G3", "B3", "E4", "A4", "E5"],
635
+ "guitar-steel": ["E2", "A2", "D3", "G3", "B3", "E4", "A4", "E5"],
636
+ "guitar-el": ["E2", "A2", "D3", "G3", "B3", "E4", "A4", "E5"],
637
+ bass: ["E1", "A1", "D2", "G2", "B2", "E3"],
638
+ flute: ["C4", "E4", "A4", "C5", "E5", "A5", "C6"],
639
+ strings: ["C2", "G2", "C3", "G3", "C4", "G4", "C5", "G5", "C6"],
640
+ organ: ["C2", "G2", "C3", "G3", "C4", "G4", "C5", "G5", "C6"],
641
+ epiano: ["C2", "G2", "C3", "G3", "C4", "G4", "C5", "G5", "C6"],
642
+ trumpet: ["E3", "A3", "C4", "E4", "A4", "C5", "E5", "A5"],
643
+ drums: ["kick", "snare", "hihat", "hihat-open", "crash", "ride", "tom-high", "tom-mid", "tom-low", "clap", "cowbell"]
644
+ };
645
+ function loadSamples(instrument, opts) {
646
+ var source = opts && opts.source || NODE_URL + "/lib/samples/" + instrument + "/";
647
+ var notes = SAMPLE_NOTES[instrument];
648
+ if (!notes) {
649
+ console.warn("[aimeat-audio] No sample map for:", instrument);
650
+ return Promise.resolve();
651
+ }
652
+ if (!sampleBuffers[instrument]) sampleBuffers[instrument] = {};
653
+ return Promise.all(notes.map(function(note) {
654
+ var url = source + note + ".mp3";
655
+ return fetch(url).then(function(resp) {
656
+ if (!resp.ok) return null;
657
+ return resp.arrayBuffer();
658
+ }).then(function(buf) {
659
+ if (!buf) return;
660
+ return ctx().decodeAudioData(buf);
661
+ }).then(function(decoded) {
662
+ if (decoded) sampleBuffers[instrument][note] = decoded;
663
+ }).catch(function() {
664
+ console.warn("[aimeat-audio] Failed to load sample:", url);
665
+ });
666
+ }));
667
+ }
668
+ function hasSamples(instrument) {
669
+ return !!sampleBuffers[instrument] && Object.keys(sampleBuffers[instrument]).length > 0;
670
+ }
671
+ function findNearestSample(instrument, note) {
672
+ var samples = sampleBuffers[instrument];
673
+ if (!samples) return null;
674
+ if (instrument === "drums") return samples[note] ? { buffer: samples[note], rate: 1 } : null;
675
+ var targetFreq = noteToFreq(note);
676
+ if (!targetFreq) return null;
677
+ var nearest = null;
678
+ var nearestDist = Infinity;
679
+ Object.keys(samples).forEach(function(sn) {
680
+ var sf = noteToFreq(sn);
681
+ if (!sf) return;
682
+ var dist = Math.abs(Math.log2(targetFreq / sf));
683
+ if (dist < nearestDist) {
684
+ nearestDist = dist;
685
+ nearest = { buffer: samples[sn], rate: targetFreq / sf };
686
+ }
687
+ });
688
+ return nearest;
689
+ }
690
+ function playSample(instrument, note, opts) {
691
+ var s = findNearestSample(instrument, note);
692
+ if (!s) return false;
693
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
694
+ var source = ctx().createBufferSource();
695
+ source.buffer = s.buffer;
696
+ source.playbackRate.value = s.rate;
697
+ var gain = ctx().createGain();
698
+ gain.gain.value = vel;
699
+ source.connect(gain);
700
+ gain.connect(masterNode());
701
+ source.start();
702
+ registerActive(instrument, note, [source], function() {
703
+ try {
704
+ source.stop();
705
+ } catch {
706
+ }
707
+ });
708
+ return true;
709
+ }
710
+ function createCustomSynth(config) {
711
+ var name = config.name || "custom-" + Date.now();
712
+ var oscConfigs = config.oscillators || [{ wave: "sawtooth", detune: 0 }];
713
+ var envConfig = config.envelope || { attack: 0.01, decay: 0.1, sustain: 0.7, release: 0.1 };
714
+ var filterConfig = config.filter || null;
715
+ var pitchEnvConfig = config.pitchEnvelope || null;
716
+ var effectsConfig = config.effects || [];
717
+ function buildEffectChain(input) {
718
+ var current = input;
719
+ effectsConfig.forEach(function(fx) {
720
+ if (fx.type === "distortion") {
721
+ var ws = ctx().createWaveShaper();
722
+ var amount = fx.amount || 0.5;
723
+ var k = amount * 400;
724
+ var samples = 44100;
725
+ var curve = new Float32Array(samples);
726
+ for (var i = 0; i < samples; i++) {
727
+ var x = i * 2 / samples - 1;
728
+ curve[i] = (3 + k) * x * 20 * (Math.PI / 180) / (Math.PI + k * Math.abs(x));
729
+ }
730
+ ws.curve = curve;
731
+ current.connect(ws);
732
+ current = ws;
733
+ } else if (fx.type === "delay") {
734
+ var dryG = ctx().createGain();
735
+ dryG.gain.value = 1 - (fx.mix || 0.3);
736
+ var wetG = ctx().createGain();
737
+ wetG.gain.value = fx.mix || 0.3;
738
+ var dly = ctx().createDelay(5);
739
+ dly.delayTime.value = fx.time || 0.3;
740
+ var fb = ctx().createGain();
741
+ fb.gain.value = fx.feedback || 0.4;
742
+ current.connect(dryG);
743
+ current.connect(dly);
744
+ dly.connect(fb);
745
+ fb.connect(dly);
746
+ dly.connect(wetG);
747
+ var merge = ctx().createGain();
748
+ dryG.connect(merge);
749
+ wetG.connect(merge);
750
+ current = merge;
751
+ } else if (fx.type === "chorus") {
752
+ var cDry = ctx().createGain();
753
+ cDry.gain.value = 1 - (fx.mix || 0.5);
754
+ var cWet = ctx().createGain();
755
+ cWet.gain.value = fx.mix || 0.5;
756
+ var cDelay = ctx().createDelay();
757
+ cDelay.delayTime.value = 0.02;
758
+ var cLfo = ctx().createOscillator();
759
+ cLfo.type = "sine";
760
+ cLfo.frequency.value = fx.rate || 1.5;
761
+ var cDepth = ctx().createGain();
762
+ cDepth.gain.value = (fx.depth || 0.7) * 0.01;
763
+ cLfo.connect(cDepth);
764
+ cDepth.connect(cDelay.delayTime);
765
+ cLfo.start();
766
+ current.connect(cDry);
767
+ current.connect(cDelay);
768
+ cDelay.connect(cWet);
769
+ var cMerge = ctx().createGain();
770
+ cDry.connect(cMerge);
771
+ cWet.connect(cMerge);
772
+ current = cMerge;
773
+ } else if (fx.type === "tremolo") {
774
+ var trem = ctx().createGain();
775
+ var tLfo = ctx().createOscillator();
776
+ tLfo.type = "sine";
777
+ tLfo.frequency.value = fx.rate || 4;
778
+ var tDepth = ctx().createGain();
779
+ tDepth.gain.value = fx.depth || 0.5;
780
+ tLfo.connect(tDepth);
781
+ tDepth.connect(trem.gain);
782
+ tLfo.start();
783
+ trem.gain.value = 1 - (fx.depth || 0.5) / 2;
784
+ current.connect(trem);
785
+ current = trem;
786
+ } else if (fx.type === "reverb") {
787
+ var rDry = ctx().createGain();
788
+ rDry.gain.value = 1 - (fx.mix || 0.5);
789
+ var rWet = ctx().createGain();
790
+ rWet.gain.value = fx.mix || 0.5;
791
+ var d1 = ctx().createDelay();
792
+ d1.delayTime.value = 0.037;
793
+ var d2 = ctx().createDelay();
794
+ d2.delayTime.value = 0.053;
795
+ var d3 = ctx().createDelay();
796
+ d3.delayTime.value = 0.071;
797
+ var rFb = Math.min(0.85, (fx.decay || 2) / 5);
798
+ var fg1 = ctx().createGain();
799
+ fg1.gain.value = rFb;
800
+ var fg2 = ctx().createGain();
801
+ fg2.gain.value = rFb * 0.9;
802
+ var fg3 = ctx().createGain();
803
+ fg3.gain.value = rFb * 0.8;
804
+ d1.connect(fg1);
805
+ fg1.connect(d1);
806
+ d2.connect(fg2);
807
+ fg2.connect(d2);
808
+ d3.connect(fg3);
809
+ fg3.connect(d3);
810
+ current.connect(rDry);
811
+ current.connect(d1);
812
+ current.connect(d2);
813
+ current.connect(d3);
814
+ var rMerge = ctx().createGain();
815
+ rDry.connect(rMerge);
816
+ d1.connect(rWet);
817
+ d2.connect(rWet);
818
+ d3.connect(rWet);
819
+ rWet.connect(rMerge);
820
+ current = rMerge;
821
+ } else if (fx.type === "filter") {
822
+ var ff = ctx().createBiquadFilter();
823
+ ff.type = fx.filterType || "lowpass";
824
+ ff.frequency.value = fx.frequency || 1e3;
825
+ ff.Q.value = fx.Q || 1;
826
+ current.connect(ff);
827
+ current = ff;
828
+ }
829
+ });
830
+ return current;
831
+ }
832
+ var synth = {
833
+ name,
834
+ play: function(note, opts) {
835
+ var freq = noteToFreq(note);
836
+ if (!freq) return;
837
+ var t = ctx().currentTime;
838
+ var vel = opts && opts.velocity !== void 0 ? opts.velocity : 0.7;
839
+ var dur = opts && opts.duration || 1;
840
+ var allOscs = [];
841
+ var mix = ctx().createGain();
842
+ mix.gain.value = vel * 0.4 / oscConfigs.length;
843
+ oscConfigs.forEach(function(oc) {
844
+ var o = ctx().createOscillator();
845
+ o.type = oc.wave || "sawtooth";
846
+ o.frequency.value = freq;
847
+ o.detune.value = oc.detune || 0;
848
+ if (oc.gain !== void 0) {
849
+ var og = ctx().createGain();
850
+ og.gain.value = oc.gain;
851
+ o.connect(og);
852
+ og.connect(mix);
853
+ } else {
854
+ o.connect(mix);
855
+ }
856
+ allOscs.push(o);
857
+ });
858
+ var chain = mix;
859
+ if (filterConfig) {
860
+ var cf = ctx().createBiquadFilter();
861
+ cf.type = filterConfig.type || "lowpass";
862
+ cf.frequency.value = filterConfig.frequency || 1e3;
863
+ cf.Q.value = filterConfig.Q || 1;
864
+ mix.connect(cf);
865
+ chain = cf;
866
+ }
867
+ chain = buildEffectChain(chain);
868
+ var env = ctx().createGain();
869
+ var a = envConfig.attack || 0.01;
870
+ var d = envConfig.decay || 0.1;
871
+ var s = envConfig.sustain !== void 0 ? envConfig.sustain : 0.7;
872
+ var r = envConfig.release || 0.1;
873
+ env.gain.setValueAtTime(0, t);
874
+ env.gain.linearRampToValueAtTime(1, t + a);
875
+ env.gain.linearRampToValueAtTime(s, t + a + d);
876
+ if (dur) {
877
+ env.gain.setValueAtTime(s, t + dur - r);
878
+ env.gain.linearRampToValueAtTime(0, t + dur);
879
+ }
880
+ chain.connect(env);
881
+ env.connect(masterNode());
882
+ if (pitchEnvConfig) {
883
+ allOscs.forEach(function(o) {
884
+ o.frequency.setValueAtTime(pitchEnvConfig.start || freq, t);
885
+ o.frequency.exponentialRampToValueAtTime(pitchEnvConfig.end || freq, t + (pitchEnvConfig.time || 0.1));
886
+ });
887
+ }
888
+ allOscs.forEach(function(o) {
889
+ o.start(t);
890
+ if (dur) o.stop(t + dur + 0.1);
891
+ });
892
+ registerActive(name, note, allOscs, function() {
893
+ try {
894
+ env.gain.cancelScheduledValues(ctx().currentTime);
895
+ env.gain.linearRampToValueAtTime(0, ctx().currentTime + 0.05);
896
+ allOscs.forEach(function(o) {
897
+ try {
898
+ o.stop(ctx().currentTime + 0.1);
899
+ } catch {
900
+ }
901
+ });
902
+ } catch {
903
+ }
904
+ });
905
+ },
906
+ stop: function(note) {
907
+ stopActive(name, note);
908
+ }
909
+ };
910
+ instruments[name] = synth;
911
+ customSynths[name] = synth;
912
+ return synth;
913
+ }
914
+ var _rtInstance = null;
915
+ var _rtHandlerBroadcast = null;
916
+ var _rtHandlerPeerData = null;
917
+ function connectRealtime(rt) {
918
+ if (_rtInstance) disconnectRealtime();
919
+ _rtInstance = rt;
920
+ _rtHandlerBroadcast = function(msg) {
921
+ var d = msg.data || msg.payload || msg;
922
+ if (d && d.instrument && (d.note || d.hit)) {
923
+ audio.play(d.instrument, d.note || d.hit, d);
924
+ }
925
+ };
926
+ _rtHandlerPeerData = function(msg) {
927
+ var d = msg.data;
928
+ if (d && d.instrument && (d.note || d.hit)) {
929
+ audio.play(d.instrument, d.note || d.hit, d);
930
+ }
931
+ };
932
+ rt.on("broadcast", _rtHandlerBroadcast);
933
+ rt.on("peer-data", _rtHandlerPeerData);
934
+ }
935
+ function disconnectRealtime() {
936
+ if (_rtInstance) {
937
+ if (_rtHandlerBroadcast) _rtInstance.off("broadcast", _rtHandlerBroadcast);
938
+ if (_rtHandlerPeerData) _rtInstance.off("peer-data", _rtHandlerPeerData);
939
+ _rtInstance = null;
940
+ _rtHandlerBroadcast = null;
941
+ _rtHandlerPeerData = null;
942
+ }
943
+ }
944
+ var audio = {
945
+ play: function(instrument, note, opts) {
946
+ if (sampleBuffers[instrument] && Object.keys(sampleBuffers[instrument]).length > 0) {
947
+ if (playSample(instrument, note, opts)) return;
948
+ }
949
+ if (customSynths[instrument]) {
950
+ customSynths[instrument].play(note, opts);
951
+ return;
952
+ }
953
+ var inst = instruments[instrument];
954
+ if (!inst) {
955
+ console.warn("[aimeat-audio] Unknown instrument:", instrument);
956
+ return;
957
+ }
958
+ inst.play(note, opts);
959
+ },
960
+ stop: function(instrument, note) {
961
+ stopActive(instrument, note);
962
+ },
963
+ get instruments() {
964
+ var list = Object.keys(instruments);
965
+ Object.keys(customSynths).forEach(function(k) {
966
+ if (list.indexOf(k) < 0) list.push(k);
967
+ });
968
+ return list;
969
+ },
970
+ loadSamples,
971
+ hasSamples,
972
+ synth: createCustomSynth,
973
+ soundboard,
974
+ master,
975
+ connectRealtime,
976
+ disconnectRealtime
977
+ };
978
+ attach("audio", audio);
979
+ })();