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
@@ -14,6 +14,13 @@
14
14
  * (./inbox-tab/use-thread-ux.js)
15
15
  * @usage Lazy-loaded profile tab; registered in profile.js TABS as id `messages`.
16
16
  * @version-history
17
+ * v1.25.0 -- 2026-07-21 -- Thread history is no longer capped at the newest 50: threads open showing
18
+ * their FULL history by default (getConversation(all)); a header "Show last 50 / all" toggle
19
+ * (threadAll) collapses/expands. loadThread's attachment-URL resolution extracted to
20
+ * helpers.resolveThreadAttachmentUrls.
21
+ * v1.24.0 -- 2026-07-19 -- Conversation → Notebook (📓 on the thread head next to ✨): summarize the
22
+ * whole thread — with its images — and park it into the Notebook for filing/enrichment. Three modes:
23
+ * server-side AI summary (owner's OpenRouter key, vision-aware), copy-prompt (own chat), or raw.
17
24
  * v1.23.1 -- 2026-07-19 -- Fix "badge shows N new but the open thread never updates": a 'messages'
18
25
  * live-update now ALWAYS reloads the open thread (dropped the isComposingInThread guard that skipped
19
26
  * the whole reload while an editable was focused, so incoming messages stayed invisible until
@@ -127,11 +134,12 @@ import { firstLine } from './notebook-helpers.js';
127
134
  import { apiGet } from '/js/api.js';
128
135
  import { getSession } from '/js/services/auth.js';
129
136
  import { TrackResponseModal } from './track-response-modal.js';
130
- import { buildConversationReplyPrompt, buildMessageReplyPrompt, peerLabel } from '/js/services/messages-ai-prompts.js';
131
- import { peerName, ownerKeyOf, isAgentPeer, buildAnswerSummary } from './inbox-tab/helpers.js';
132
- import { Composer, PollBuilder, MarkdownViewer, ReplyWithAiPopover } from './inbox-tab/components.js';
137
+ import { peerLabel } from '/js/services/messages-ai-prompts.js';
138
+ import { peerName, ownerKeyOf, isAgentPeer, buildAnswerSummary, resolveThreadAttachmentUrls } from './inbox-tab/helpers.js';
139
+ import { Composer, PollBuilder, MarkdownViewer, ReplyWithAiPopover, ConversationToNotebookPopover } from './inbox-tab/components.js';
140
+ import { buildConversationReplyProps, buildMessageReplyProps, buildConversationNotebookProps } from './inbox-tab/ai-actions.js';
133
141
  import { ListPanel, ThreadPanel, TrackedPanel, ResultsPanel } from './inbox-tab/panels.js';
134
- import { useThreadAutoScroll, useMobileComposerKeyboard } from './inbox-tab/use-thread-ux.js';
142
+ import { useThreadAutoScroll, useMobileComposerKeyboard, useLinkPreviewToggle } from './inbox-tab/use-thread-ux.js';
135
143
  import { ContactPicker } from '/components/ContactPicker.js';
136
144
 
137
145
  export default function InboxTab({ showToast }) {
@@ -140,8 +148,9 @@ export default function InboxTab({ showToast }) {
140
148
  const [activeConv, setActiveConv] = useState(null); // { conversationId, peerGhii }
141
149
  const [thread, setThread] = useState([]);
142
150
  const [urlMap, setUrlMap] = useState({});
143
- const [mdViewer, setMdViewer] = useState(null); // { url, name } — open markdown attachment viewer
151
+ const { showLinkPreviews, toggleLinkPreviews } = useLinkPreviewToggle(); const [mdViewer, setMdViewer] = useState(null); // link-preview toggle (persisted) + markdown viewer state
144
152
  const [aiReply, setAiReply] = useState(null); // { title, build } — Reply with AI popover (TARGET-031)
153
+ const [nbConv, setNbConv] = useState(null); // { title, promptText, runServerSummary, parkConversation } — Conversation → Notebook popover
145
154
  const [peerNames, setPeerNames] = useState({}); // id (GHII/GAII or owner@node) → resolved display name
146
155
  const peerNamesRef = useRef({}); // dedup bookkeeping: an id present here was already looked up
147
156
  const [composeSubject, setComposeSubject] = useState(''); // optional subject → opens a new topic thread
@@ -324,34 +333,25 @@ export default function InboxTab({ showToast }) {
324
333
  // markRead=true ONLY when the user opens the conversation. Marking read POSTs a receipt which itself
325
334
  // emits a 'messages' change → SSE → live refresh; doing it on every live refresh creates a
326
335
  // self-sustaining request loop. So live refreshes reload the thread WITHOUT marking read.
336
+ // Per-conversation "show all vs newest 50" mode. Defaults to ALL (show the full history on open so
337
+ // nothing looks lost); the header toggle collapses to the newest 50. A ref (read at call time) keeps
338
+ // loadThread []-memoized; the state drives the button. Re-defaults to ALL whenever a thread opens.
339
+ const [threadAll, setThreadAll] = useState(true);
340
+ const threadAllRef = useRef(true); threadAllRef.current = threadAll;
327
341
  const loadThread = useCallback(async (conv, markRead = false) => {
328
342
  if (!conv) return;
329
- const msgs = (await messages.getConversation(conv.conversationId, conv.viaAgent).catch(() => [])).slice().reverse();
343
+ // threadAllRef: false = newest 50 (fast default); true = the FULL history (header "All messages" toggle).
344
+ const msgs = (await messages.getConversation(conv.conversationId, conv.viaAgent, threadAllRef.current).catch(() => [])).slice().reverse();
330
345
  setThread(msgs);
331
- // REUSE already-resolved attachment URLs for the SAME conversation: a refresh / new message must NOT
332
- // re-resolve (and thus re-download via a fresh presigned URL) every existing image. Only fetch URLs
333
- // for attachments we haven't resolved yet. A different conversation starts a fresh cache.
334
- const sameConv = urlCacheRef.current.convId === conv.conversationId;
335
- const prev = sameConv ? urlCacheRef.current.map : {};
336
- const map = {};
337
- await Promise.all(msgs.flatMap(m => (m.attachments || [])
338
- .filter(a => !a.inline)
339
- .map(async a => {
340
- // Key by messageId::attachmentId — per-message ids (at0, at1…) repeat, so a flat a.id map made every message's `at0` share one image.
341
- const uk = `${m.id}::${a.id}`;
342
- if (prev[uk]) { map[uk] = prev[uk]; return; } // cached → browser won't re-fetch
343
- // Inbound: only the recipient's duplicated local copy is fetchable. Outbound: resolve the original.
344
- const key = (a.mode === 'duplicate' && a.localKey) ? a.localKey
345
- : (m.direction === 'outbound' && a.storageKey) ? a.storageKey : null;
346
- if (!key) return;
347
- const u = await messages.attachmentUrl(key).catch(() => null);
348
- if (u) map[uk] = u;
349
- })));
350
- urlCacheRef.current = { convId: conv.conversationId, map };
351
- setUrlMap(map);
346
+ // Reuse already-resolved attachment URLs for the same conversation (a refresh must not re-download
347
+ // every image); a different conversation starts a fresh cache.
348
+ const cache = await resolveThreadAttachmentUrls(msgs, conv.conversationId, urlCacheRef.current, messages.attachmentUrl);
349
+ urlCacheRef.current = cache;
350
+ setUrlMap(cache.map);
352
351
  // Agent-owned ("via <agent>") threads are read-only for the owner — don't post a read receipt as them.
353
352
  if (markRead && !conv.viaAgent) await messages.markConversationRead(conv.conversationId).catch(() => {});
354
353
  }, []);
354
+ const toggleThreadAll = () => setThreadAll(v => { const nv = !v; threadAllRef.current = nv; if (activeConv) loadThread(activeConv); return nv; });
355
355
 
356
356
  // Mount: one composite call seeds all six sections (requests/conversations/important/tracked/agents/groups).
357
357
  useEffect(() => { loadOverview(); }, [loadOverview]);
@@ -458,6 +458,7 @@ export default function InboxTab({ showToast }) {
458
458
 
459
459
  const openConversation = async (conv) => {
460
460
  setActiveConv(conv); setMode('thread');
461
+ setThreadAll(true); threadAllRef.current = true; // each thread opens showing its FULL history
461
462
  setDraftPrefill(''); setReplyingTrId(null); setReplyQuote(null); // don't leak a suggested reply / quote across threads
462
463
  await loadThread(conv, true); // mark read only on explicit open (avoids a refresh loop)
463
464
  loadLists();
@@ -488,19 +489,11 @@ export default function InboxTab({ showToast }) {
488
489
  // "Display name (handle)" for an id, falling back to the bare handle when we have no display name.
489
490
  const peerDisplay = (id) => peerLabel(id, peerNames[id]);
490
491
 
491
- // Reply with AI (TARGET-031): hand the whole open conversation, or one message, to the popover which
492
- // renders a copy-paste prompt (any AI chat) or an MCP instruction prompt (aimeat_dm_thread → draft →
493
- // aimeat_dm_send after approval). `build(mode)` closes over the current thread/message + peer.
494
- const openConversationAi = () => {
495
- if (!activeConv) return;
496
- const src = { peerGhii: activeConv.peerGhii, subject: activeConv.subject, conversationId: activeConv.conversationId, thread, peerName: peerNames[activeConv.peerGhii] };
497
- setAiReply({ title: `${t('inbox.ai.replyTo')} ${peerDisplay(activeConv.peerGhii)}`, build: (mode) => buildConversationReplyPrompt(src, mode) });
498
- };
499
- const openMessageAi = (msg) => {
500
- if (!activeConv) return;
501
- const src = { peerGhii: activeConv.peerGhii, subject: activeConv.subject, conversationId: activeConv.conversationId, message: msg, peerName: peerNames[activeConv.peerGhii] };
502
- setAiReply({ title: t('inbox.ai.replyToMessage'), build: (mode) => buildMessageReplyPrompt(src, mode) });
503
- };
492
+ // Thread-head AI actions — Reply with AI (TARGET-031) and Conversation Notebook (summarize the whole
493
+ // thread + images, park it for filing/enrichment). Config assembly lives in ./inbox-tab/ai-actions.js.
494
+ const openConversationAi = () => { if (activeConv) setAiReply(buildConversationReplyProps({ activeConv, thread, peerName: peerNames[activeConv.peerGhii], peerDisplayName: peerDisplay(activeConv.peerGhii) })); };
495
+ const openMessageAi = (msg) => { if (activeConv) setAiReply(buildMessageReplyProps({ activeConv, msg, peerName: peerNames[activeConv.peerGhii] })); };
496
+ const openConversationNotebook = () => { if (activeConv) setNbConv(buildConversationNotebookProps({ activeConv, thread, urlMap, peerName: peerNames[activeConv.peerGhii], title: `${t('inbox.notebook.toNotebook')} — ${peerDisplay(activeConv.peerGhii)}` })); };
504
497
 
505
498
  // ↩ Reply on a bubble: pin the quote AND focus the composer (bump a nonce the Composer watches). Kept
506
499
  // separate from the raw setter so cancelling the quote (✕) doesn't re-pop the keyboard.
@@ -573,21 +566,21 @@ export default function InboxTab({ showToast }) {
573
566
  if (tr.state === 'awaiting-approval') await startSuggestedReply(tr);
574
567
  };
575
568
 
576
- // Open a specific thread when arriving from a notification deep-link (sessionStorage hint set by
577
- // the notification bell). 'requests' just lands on the inbox (requests show at the top of the list).
569
+ // Open a specific thread from a notification deep-link (sessionStorage hint set by the bell).
570
+ // 'requests' lands on the inbox list; 'req:<id>' (a "wants to message you" request notif) opens the
571
+ // thread once accepted, else falls back to the list (sender still pending accept/block).
578
572
  const consumeDeepLink = useCallback(async () => {
579
573
  let target = null;
580
574
  try { target = sessionStorage.getItem('aimeat.inbox.open'); } catch { /* noop */ }
581
575
  if (!target) return;
582
576
  try { sessionStorage.removeItem('aimeat.inbox.open'); } catch { /* noop */ }
583
577
  if (target === 'requests') { await loadLists(); return; }
578
+ const fromRequest = target.startsWith('req:'); if (fromRequest) target = target.slice(4);
584
579
  const convs = await messages.listConversations().catch(() => []);
585
580
  const conv = convs.find(c => c.conversationId === target);
586
- if (conv) openConversation(conv);
587
- // openConversation is a non-memoized handler invoked imperatively here with its `conv` argument; it
588
- // uses only stable setters/refs, so no stale-closure risk. Keeping it out of deps preserves
589
- // consumeDeepLink's stability (loadLists is a []-useCallback) so the two subscribing effects below
590
- // don't re-run every render.
581
+ if (conv) openConversation(conv); else if (fromRequest) await loadLists();
582
+ // openConversation uses only stable setters/refs (no stale-closure risk); keeping it out of deps
583
+ // keeps consumeDeepLink stable (loadLists is a []-useCallback) so the two effects below don't re-run.
591
584
  // eslint-disable-next-line react-hooks/exhaustive-deps
592
585
  }, [loadLists]);
593
586
  useEffect(() => { consumeDeepLink(); }, [consumeDeepLink]);
@@ -776,8 +769,9 @@ export default function InboxTab({ showToast }) {
776
769
  msgsRef=${msgsRef} peerDisplay=${peerDisplay} showToast=${showToast} toggleImportant=${toggleImportant}
777
770
  replyQuote=${replyQuote} setReplyQuote=${setReplyQuote} onQuoteReply=${startQuoteReply} composerFocus=${composerFocus}
778
771
  onTrackMsg=${onTrackMsg} onParkMsg=${onParkMsg} openMessageAi=${openMessageAi} submitInteractiveAnswers=${submitInteractiveAnswers}
779
- setMdViewer=${setMdViewer} openConversationAi=${openConversationAi} insertCommand=${insertCommand} setCmdFill=${setCmdFill}
780
- cancelTracked=${cancelTracked} openRecord=${openRecord} startSuggestedReply=${startSuggestedReply} doSend=${doSend} />` : null}
772
+ setMdViewer=${setMdViewer} openConversationAi=${openConversationAi} openConversationNotebook=${openConversationNotebook} insertCommand=${insertCommand} setCmdFill=${setCmdFill}
773
+ cancelTracked=${cancelTracked} openRecord=${openRecord} startSuggestedReply=${startSuggestedReply} doSend=${doSend} showLinkPreviews=${showLinkPreviews} toggleLinkPreviews=${toggleLinkPreviews}
774
+ threadAll=${threadAll} toggleThreadAll=${toggleThreadAll} />` : null}
781
775
 
782
776
  ${mode === 'tracked' ? html`<${TrackedPanel} activeTracked=${activeTracked} doneCount=${doneCount}
783
777
  openRecord=${openRecord} openTracked=${openTracked} cancelTracked=${cancelTracked} />` : null}
@@ -795,5 +789,8 @@ export default function InboxTab({ showToast }) {
795
789
  onClose=${() => setTrackMsg(null)} onDone=${loadLists} showToast=${showToast} />
796
790
  ${mdViewer && html`<${MarkdownViewer} url=${mdViewer.url} name=${mdViewer.name} onClose=${() => setMdViewer(null)} />`}
797
791
  ${aiReply && html`<${ReplyWithAiPopover} title=${aiReply.title} build=${aiReply.build} showToast=${showToast} onClose=${() => setAiReply(null)} />`}
792
+ ${nbConv && html`<${ConversationToNotebookPopover} title=${nbConv.title} promptText=${nbConv.promptText}
793
+ runServerSummary=${nbConv.runServerSummary} parkConversation=${nbConv.parkConversation}
794
+ showToast=${showToast} onClose=${() => setNbConv(null)} />`}
798
795
  </div>`;
799
796
  }
@@ -2,6 +2,9 @@
2
2
  * @file public/views/profile/landing-page.cards.js
3
3
  * @description Profile home dashboard cards, home sub-components, and the sidebar group model. Extracted from landing-page.js to satisfy max-file-lines.
4
4
  * @version-history
5
+ * 2026-07-19 — Re-add the orphaned OpenRouter Settings item (route id 'generator') to the Build & Share
6
+ * group — it lost its menu entry when the Generator feature was removed, leaving the AI-provider key
7
+ * config reachable only by deep link.
5
8
  * 2026-07-19 — AppDev tab (KB UI): learned-pitfall + template management surface, start-prompt copy, model badge
6
9
  * v1.2.0 — 2026-07-16 — Drop the per-item emoji icons from SIDEBAR_GROUPS and the Inbox nav
7
10
  * button — the sidebar renders label-only now.
@@ -591,6 +594,10 @@ export const SIDEBAR_GROUPS = [
591
594
  { id: 'skills', labelKey: 'skills.tabLabel' },
592
595
  { id: 'packages', labelKey: 'profile.tabs.packages' },
593
596
  { id: 'portfolio', labelKey: 'portfolio.tabLabel' },
597
+ /* AI-provider (OpenRouter) key + spend budget. Route id is still 'generator' — the Generator tab
598
+ * was repurposed to host only these settings when the Generator feature was removed (2026-07-18).
599
+ * Re-added to the menu 2026-07-19 after it was orphaned (reachable only by ?tab=generator). */
600
+ { id: 'generator', labelKey: 'profile.generator.openrouter.title' },
594
601
  { id: 'calibrator', labelKey: 'profile.calibrator.tabLabel' },
595
602
  /* TODO(owner 2026-06-10): "work" placement is undecided — parked at the bottom of
596
603
  * Build & Share until re-evaluated. */
@@ -15,6 +15,10 @@
15
15
  * - PresencePill + PresenceDialog — header status pill that opens the availability settings dialog
16
16
  * - LandingPage — main orchestrator (default export)
17
17
  * @version-history
18
+ * v3.12.1 — 2026-07-20 — Fix: the `aimeat-open-tab` handler force-opens (never toggles). Tapping a
19
+ * message push-notification while the Messages tab was already open toggled it CLOSED (back to
20
+ * Home) instead of switching to the new conversation; now it leaves the already-open tab in place
21
+ * and lets that tab's own listener consume the deep-link.
18
22
  * v3.12.0 — 2026-07-16 — Drop the per-item emoji icons from the sidebar (Home, Inbox, and each
19
23
  * grouped/pinned item render label-only) — cleaner, less visually noisy menu.
20
24
  * v3.11.0 — 2026-07-13 — Split into sibling modules for max-file-lines: modals →
@@ -281,7 +285,14 @@ export default function LandingPage({ tier, stats, homeUsage, homeAgents, sessio
281
285
  useEffect(() => {
282
286
  const handler = (e) => {
283
287
  const tabId = e.detail?.tabId;
284
- if (tabId) open(tabId, e.detail?.slot || 'main');
288
+ if (!tabId) return;
289
+ // Force-OPEN semantics (never toggle): a deep-link/cross-nav must land ON the tab. open()
290
+ // toggles, so calling it when that tab is already active would CLOSE it back to Home — the
291
+ // exact bug when a message notification is tapped while the Messages tab is already open. If
292
+ // it's already open, leave it; the tab's own aimeat-open-tab listener consumes the deep-link
293
+ // (e.g. inbox-tab opens the freshly-arrived conversation).
294
+ if (openViewRef.current?.tabId === tabId) return;
295
+ open(tabId, e.detail?.slot || 'main');
285
296
  };
286
297
  window.addEventListener('aimeat-open-tab', handler);
287
298
  return () => window.removeEventListener('aimeat-open-tab', handler);
@@ -91,7 +91,7 @@ export default function SkillsTab({ showToast }) {
91
91
  setEditorMd(full?.fileContents?.['SKILL.md'] ?? SKILL_TEMPLATE);
92
92
  setEditorVisibility(skill.visibility === 'public' ? 'public' : skill.visibility === 'members' ? 'members' : 'owner');
93
93
  setEditorOpen(true);
94
- window.scrollTo({ top: 0, behavior: 'smooth' });
94
+ (document.querySelector('.page-content') || window).scrollTo({ top: 0, behavior: 'smooth' });
95
95
  } catch (err) {
96
96
  showToast(t('skills.loadFailed') + ': ' + err.message, true);
97
97
  }
@@ -146,7 +146,7 @@ export default function PublicWorkspaceViewer() {
146
146
  const el = document.getElementById(anchorId(d));
147
147
  if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); return; }
148
148
  // Isolated single-page view: the picked page renders on the next tick; jump back to the top.
149
- setTimeout(() => window.scrollTo({ top: 0, behavior: 'smooth' }), 0);
149
+ setTimeout(() => (document.querySelector('.page-content') || window).scrollTo({ top: 0, behavior: 'smooth' }), 0);
150
150
  }, []);
151
151
 
152
152
  // On first load of the whole-space view, if a page was deep-linked, scroll to it.
@@ -159,7 +159,8 @@ export default function StartView() {
159
159
  const [idx, setIdx] = useState(0);
160
160
  const [answers, setAnswers] = useState({});
161
161
 
162
- useEffect(() => { window.scrollTo(0, 0); }, [phase, idx]);
162
+ // App-shell: .page-content owns the scroll (window no longer scrolls). Reset it to the top on step change.
163
+ useEffect(() => { (document.querySelector('.page-content') || window).scrollTo(0, 0); }, [phase, idx]);
163
164
 
164
165
  // Mark the body while this view is mounted so start.css's print rules (which blank everything
165
166
  // except .st-print-area) apply only on this page — view CSS is preloaded globally in spa.html,
@@ -0,0 +1,16 @@
1
+ /** One served library = a public name (aimeat-<name>.js) + its ESM entry under sdk-libs/. */
2
+ interface SdkLib {
3
+ /** The served basename, minus the `aimeat-` prefix and `.js` suffix (e.g. `speech`). */
4
+ name: string;
5
+ /** The entry source, relative to src/static/sdk-libs/ (e.g. `speech/index.js`). */
6
+ entry: string;
7
+ }
8
+ /**
9
+ * The migrated libraries. Phase 0 ships the pilot only; later phases append their entries here
10
+ * (and the drift guard makes sure every committed bundle stays in sync with its sources).
11
+ */
12
+ export declare const SDK_LIBS: SdkLib[];
13
+ /** Build every library to its committed dist bundle (pure disk write). */
14
+ export declare function buildSdkLibs(): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=build-sdk-libs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-sdk-libs.d.ts","sourceRoot":"","sources":["../../scripts/build-sdk-libs.ts"],"names":[],"mappings":"AA0BA,6FAA6F;AAC7F,UAAU,MAAM;IACd,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,EAwB5B,CAAC;AA0BF,0EAA0E;AAC1E,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAKlD"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @file build-sdk-libs.ts
3
+ * @description Build step for the served browser SDK libraries. Bundles each componentized,
4
+ * JSDoc-typed ESM source under src/static/sdk-libs/ (one entry per library, sharing _core/)
5
+ * with esbuild into a classic IIFE, and writes it to src/static/sdk-libs/dist/aimeat-<name>.js.
6
+ * These generated bundles are committed (same model as src/static/app-catalog.html) and served
7
+ * verbatim at /v1/libs/aimeat-<name>.js with a tiny per-node config prelude prepended at serve
8
+ * time — replacing the old "JavaScript authored inside a TypeScript template string" approach.
9
+ * @structure
10
+ * - SDK_LIBS → the per-library entry registry (name → source entry)
11
+ * - bundleLib() → esbuild one entry → IIFE text (with generated-file banner)
12
+ * - buildSdkLibs() → write every dist/aimeat-<name>.js
13
+ * - checkSdkLibs() → --check: fail (non-zero) if any committed bundle is stale vs its sources
14
+ * @usage pnpm build:sdk · pnpm check:sdk (also run by `pnpm dev`)
15
+ * @version-history
16
+ * v1.0.0 — 2026-07-19 — Initial: esbuild IIFE bundler + drift check for the SDK-libs migration (Phase 0, pilot: speech).
17
+ */
18
+ import * as esbuild from 'esbuild';
19
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
20
+ import { join, dirname } from 'node:path';
21
+ import { fileURLToPath } from 'node:url';
22
+ const __dirname = dirname(fileURLToPath(import.meta.url));
23
+ const SRC_DIR = join(__dirname, '..', 'src', 'static', 'sdk-libs');
24
+ const OUT_DIR = join(SRC_DIR, 'dist');
25
+ /**
26
+ * The migrated libraries. Phase 0 ships the pilot only; later phases append their entries here
27
+ * (and the drift guard makes sure every committed bundle stays in sync with its sources).
28
+ */
29
+ export const SDK_LIBS = [
30
+ { name: 'speech', entry: 'speech/index.js' },
31
+ { name: 'data', entry: 'data/index.js' },
32
+ { name: 'wallet', entry: 'wallet/index.js' },
33
+ { name: 'ai', entry: 'ai/index.js' },
34
+ { name: 'capabilities', entry: 'capabilities/index.js' },
35
+ { name: 'agents', entry: 'agents/index.js' },
36
+ { name: 'agentface', entry: 'agentface/index.js' },
37
+ { name: 'intake', entry: 'intake/index.js' },
38
+ { name: 'organism', entry: 'organism/index.js' },
39
+ { name: 'workflows', entry: 'workflows/index.js' },
40
+ { name: 'portfolio-standalone', entry: 'portfolio-standalone/index.js' },
41
+ { name: 'header', entry: 'header/index.js' },
42
+ { name: 'editor', entry: 'editor/index.js' },
43
+ { name: 'live', entry: 'live/index.js' },
44
+ { name: 'storage', entry: 'storage/index.js' },
45
+ { name: 'social', entry: 'social/index.js' },
46
+ { name: 'work', entry: 'work/index.js' },
47
+ { name: 'commerce', entry: 'commerce/index.js' },
48
+ { name: 'webmcp', entry: 'webmcp/index.js' },
49
+ { name: 'markdown', entry: 'markdown/index.js' },
50
+ { name: 'audio', entry: 'audio/index.js' },
51
+ { name: 'tunnel', entry: 'tunnel/index.js' },
52
+ { name: 'auth', entry: 'auth/index.js' },
53
+ ];
54
+ function banner(name) {
55
+ return (`// GENERATED FILE — do not edit directly. Source: src/static/sdk-libs/${name}/ (+ _core/).\n` +
56
+ `// Rebuild: pnpm build:sdk · Served at /v1/libs/aimeat-${name}.js (with a per-node config prelude).\n`);
57
+ }
58
+ /** Bundle one library entry to a self-contained classic IIFE (deterministic — no timestamps). */
59
+ async function bundleLib(lib) {
60
+ const result = await esbuild.build({
61
+ entryPoints: [join(SRC_DIR, lib.entry)],
62
+ bundle: true,
63
+ format: 'iife',
64
+ target: 'es2020',
65
+ platform: 'browser',
66
+ charset: 'utf8',
67
+ legalComments: 'none',
68
+ write: false,
69
+ logLevel: 'silent',
70
+ });
71
+ if (!result.outputFiles?.length)
72
+ throw new Error(`esbuild produced no output for ${lib.name}`);
73
+ return banner(lib.name) + result.outputFiles[0].text;
74
+ }
75
+ /** Build every library to its committed dist bundle (pure disk write). */
76
+ export async function buildSdkLibs() {
77
+ mkdirSync(OUT_DIR, { recursive: true });
78
+ for (const lib of SDK_LIBS) {
79
+ writeFileSync(join(OUT_DIR, `aimeat-${lib.name}.js`), await bundleLib(lib), 'utf-8');
80
+ }
81
+ }
82
+ /** --check: fail (non-zero) if any committed dist bundle is stale vs its sources, without writing. */
83
+ async function checkSdkLibs() {
84
+ let stale = false;
85
+ for (const lib of SDK_LIBS) {
86
+ const fresh = await bundleLib(lib);
87
+ const outFile = join(OUT_DIR, `aimeat-${lib.name}.js`);
88
+ let onDisk = '';
89
+ try {
90
+ onDisk = readFileSync(outFile, 'utf-8');
91
+ }
92
+ catch {
93
+ onDisk = '';
94
+ }
95
+ if (fresh !== onDisk) {
96
+ console.error(`✗ src/static/sdk-libs/dist/aimeat-${lib.name}.js is STALE vs src/static/sdk-libs/${lib.name}/ sources.`);
97
+ stale = true;
98
+ }
99
+ }
100
+ if (stale) {
101
+ console.error(' Run `pnpm build:sdk` and commit the regenerated bundle(s).');
102
+ process.exit(1);
103
+ }
104
+ console.log(`✓ ${SDK_LIBS.length} SDK lib bundle(s) in sync with their sources`);
105
+ }
106
+ // Run when invoked directly (tsx scripts/build-sdk-libs.ts [--check]).
107
+ if (import.meta.url === `file://${process.argv[1]}` || process.argv[1]?.endsWith('build-sdk-libs.ts')) {
108
+ const check = process.argv.includes('--check');
109
+ (check ? checkSdkLibs() : buildSdkLibs().then(() => console.log(`✓ ${SDK_LIBS.length} SDK lib(s) built → src/static/sdk-libs/dist/`)))
110
+ .catch((err) => { console.error('✗ SDK libs build failed:', err.message); process.exit(1); });
111
+ }
112
+ //# sourceMappingURL=build-sdk-libs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-sdk-libs.js","sourceRoot":"","sources":["../../scripts/build-sdk-libs.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,21 @@ interface AuthArgs {
4
4
  agent?: string;
5
5
  mode?: string;
6
6
  }
7
+ interface DeviceTokenResponse {
8
+ access_token: string;
9
+ gaii: string;
10
+ name: string;
11
+ owner?: string;
12
+ }
13
+ /**
14
+ * The canonical, '@'-free owner HANDLE for this agent — taken from the device-token response, NEVER the
15
+ * raw `--owner` the user typed (which may be an email, e.g. when connecting by email). The account is
16
+ * resolved server-side (the browser login), and the handle comes back in the response, so keying local
17
+ * artifacts (token filename, per-agent config) by it keeps `{agent}@{owner}.token` unambiguous and lets
18
+ * the serve daemon parse it correctly. Prefer the gaii's owner segment (`agent#owner@node`), fall back to
19
+ * the response `owner`, then to the CLI value with any '@'-suffix stripped.
20
+ */
21
+ export declare function ownerHandleFrom(tokenData: DeviceTokenResponse, cliOwner: string): string;
7
22
  export declare function runAuth(args: AuthArgs): Promise<void>;
8
23
  export {};
9
24
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"AAmCA,UAAU,QAAQ;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAyGD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsN3D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"AAmCA,UAAU,QAAQ;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxF;AA8FD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0N3D"}
@@ -28,6 +28,22 @@ import { saveConfig, savePerAgentConfig, loadPerAgentConfig } from './config.js'
28
28
  import { downloadSkillBundle, readSkillBundleGuide } from './skill-bundle.js';
29
29
  import { buildAgentOnboardingInstruction } from './onboarding-prompt.js';
30
30
  const VALID_MODES = ['autonomous', 'interactive', 'task-runner', 'coordinator', 'workstation'];
31
+ /**
32
+ * The canonical, '@'-free owner HANDLE for this agent — taken from the device-token response, NEVER the
33
+ * raw `--owner` the user typed (which may be an email, e.g. when connecting by email). The account is
34
+ * resolved server-side (the browser login), and the handle comes back in the response, so keying local
35
+ * artifacts (token filename, per-agent config) by it keeps `{agent}@{owner}.token` unambiguous and lets
36
+ * the serve daemon parse it correctly. Prefer the gaii's owner segment (`agent#owner@node`), fall back to
37
+ * the response `owner`, then to the CLI value with any '@'-suffix stripped.
38
+ */
39
+ export function ownerHandleFrom(tokenData, cliOwner) {
40
+ const fromGaii = /#([^@]+)@/.exec(tokenData.gaii);
41
+ if (fromGaii)
42
+ return fromGaii[1];
43
+ if (typeof tokenData.owner === 'string' && tokenData.owner && !tokenData.owner.includes('@'))
44
+ return tokenData.owner;
45
+ return cliOwner.includes('@') ? cliOwner.split('@')[0] : cliOwner;
46
+ }
31
47
  const DEFAULT_NODE_URL = 'https://aimeat.io';
32
48
  const DEFAULT_AGENT_NAME = 'assistant';
33
49
  function normalizeNodeUrl(value) {
@@ -288,20 +304,23 @@ export async function runAuth(args) {
288
304
  }
289
305
  const token = tokenData;
290
306
  s.stop('Approved!');
307
+ // Key ALL local artifacts by the resolved owner HANDLE, not the raw `--owner` (which may be an email).
308
+ // This keeps `{agent}@{owner}.token` unambiguous so the serve daemon derives the right agent name.
309
+ const ownerHandle = ownerHandleFrom(token, owner);
291
310
  // Before storing the new token, check whether this is the first agent (so it
292
311
  // gets marked as `primary: true` in its per-agent config -- multi-agent serve
293
312
  // resolves to the primary agent when no agent_name is given).
294
313
  const tokensBefore = await listAllTokens();
295
- const sameAlreadyExists = tokensBefore.some(t => t.agent === agentName && t.owner === owner);
296
- const isFirstAgent = tokensBefore.filter(t => !(t.agent === agentName && t.owner === owner)).length === 0;
297
- await storeToken(agentName, owner, token.access_token);
298
- success(`Token stored (aimeat:${agentName}@${owner})`);
314
+ const sameAlreadyExists = tokensBefore.some(t => t.agent === agentName && t.owner === ownerHandle);
315
+ const isFirstAgent = tokensBefore.filter(t => !(t.agent === agentName && t.owner === ownerHandle)).length === 0;
316
+ await storeToken(agentName, ownerHandle, token.access_token);
317
+ success(`Token stored (aimeat:${agentName}@${ownerHandle})`);
299
318
  // Per-agent config (~/.aimeat/agents/{agent}/config.yaml). Preserve any
300
319
  // existing runner/wake/poll_interval if the agent is being re-connected.
301
320
  const existingPerAgent = loadPerAgentConfig(agentName);
302
321
  savePerAgentConfig(agentName, {
303
322
  agent: agentName,
304
- owner,
323
+ owner: ownerHandle,
305
324
  node_url: nodeUrl,
306
325
  primary: existingPerAgent?.primary ?? isFirstAgent,
307
326
  mode: mode ?? existingPerAgent?.mode,
@@ -313,7 +332,7 @@ export async function runAuth(args) {
313
332
  // (`loadConfig().agent`) keep working. The first-registered agent becomes the
314
333
  // global's `agent`; later agents do not overwrite it.
315
334
  if (isFirstAgent || sameAlreadyExists) {
316
- saveConfig({ node_url: nodeUrl, agent: agentName, owner });
335
+ saveConfig({ node_url: nodeUrl, agent: agentName, owner: ownerHandle });
317
336
  }
318
337
  client.setToken(token.access_token);
319
338
  await downloadAndPrintBundleGuide(client, agentName, success, info, warn);
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,15 @@ export interface StoredCredential {
6
6
  owner: string;
7
7
  token: string;
8
8
  }
9
+ /**
10
+ * Parse a `{agent}@{owner}.token` filename into its agent + owner. Split on the FIRST '@' — agent names
11
+ * are '@'-free (lowercase alphanumeric + hyphens), so it is the authoritative boundary and an owner slug
12
+ * that itself contains '@' (an email) parses correctly. Returns null for a non-`.token` or shapeless name.
13
+ */
14
+ export declare function parseTokenFilename(name: string): {
15
+ agent: string;
16
+ owner: string;
17
+ } | null;
9
18
  /**
10
19
  * Scan the tokens directory and return every stored credential. File naming
11
20
  * is `{agent}@{owner}.token`; unparseable filenames are skipped silently.
@@ -1 +1 @@
1
- {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/keychain.ts"],"names":[],"mappings":"AAyBA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAInF;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuBjE"}
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/keychain.ts"],"names":[],"mappings":"AA6BA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAInF;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMxF;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmBjE"}