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,185 @@
1
+ /**
2
+ * @file webmcp/index.js
3
+ * @description The aimeat-webmcp library (SDK-libs migration Phase 2, TARGET-034 phase C). The in-page
4
+ * half of the WebMCP bridge: feature-detects every shipped shape of the WebMCP registration API
5
+ * (document.modelContext.registerTool — current CG draft; navigator.modelContext.registerTool /
6
+ * provideContext — transitional), registers an app's declared tools (apps.{appId}.tools) with real
7
+ * execute callbacks, and exposes node-level tools. Priced tools pay through AIMEAT.commerce.
8
+ * invokeAppTool when signed in; otherwise execute returns the 402/x402 payment instructions.
9
+ * Componentized ESM source esbuild bundles to the IIFE served, unchanged, at /v1/libs/aimeat-webmcp.js.
10
+ * Ported verbatim from lib-webmcp.ts; NODE_URL is the apex base (APEX_URL from _core/config).
11
+ * @structure imports APEX_URL (config) + attach (namespace); asContent/registerWith/fetchListing/
12
+ * buildExecute; the `webmcp` object; attach('webmcp', …) + optional ?expose=node auto-activation.
13
+ * @usage <script src="/v1/libs/aimeat-webmcp.js"></script>
14
+ * await AIMEAT.webmcp.exposeAppTools({ owner: 'alice', appId: 'shop.html' });
15
+ * @version-history
16
+ * v1.0.0 — 2026-07-19 — Migrated from src/routes/lib-webmcp.ts (SDK-libs migration Phase 2).
17
+ */
18
+ import { APEX_URL } from '../_core/config.js';
19
+ import { attach } from '../_core/namespace.js';
20
+
21
+ const NODE_URL = APEX_URL;
22
+
23
+ /** Wrap any value as WebMCP tool-result content ({ content: [{ type:'text', text }] }). */
24
+ function asContent(value) {
25
+ const text = typeof value === 'string' ? value : JSON.stringify(value, null, 1);
26
+ return { content: [{ type: 'text', text: text }] };
27
+ }
28
+
29
+ /**
30
+ * Feature-detect the WebMCP registration surface:
31
+ * - document.modelContext.registerTool (current CG draft)
32
+ * - navigator.modelContext.registerTool (transitional)
33
+ * - navigator.modelContext.provideContext({ tools }) (earlier explainer shape; readiness
34
+ * scanners shim this and watch for the call)
35
+ * Returns which surface took the tools, or 'none' when no agent/scanner API is present.
36
+ */
37
+ async function registerWith(tools) {
38
+ // modelContext is a non-standard (WebMCP draft) API absent from lib.dom — access via any.
39
+ const doc = /** @type {any} */ (typeof document !== 'undefined' ? document : {});
40
+ const nav = /** @type {any} */ (typeof navigator !== 'undefined' ? navigator : {});
41
+ const docMc = doc.modelContext;
42
+ const navMc = nav.modelContext;
43
+ if (docMc && typeof docMc.registerTool === 'function') {
44
+ for (const t of tools) await docMc.registerTool(t);
45
+ return 'document.modelContext.registerTool';
46
+ }
47
+ if (navMc && typeof navMc.registerTool === 'function') {
48
+ for (const t of tools) await navMc.registerTool(t);
49
+ return 'navigator.modelContext.registerTool';
50
+ }
51
+ if (navMc && typeof navMc.provideContext === 'function') {
52
+ // provideContext replaces the full tool set — pass everything registered so far.
53
+ await navMc.provideContext({ tools: webmcp.tools.concat(tools) });
54
+ return 'navigator.modelContext.provideContext';
55
+ }
56
+ return 'none';
57
+ }
58
+
59
+ /** Fetch an app's served WebMCP listing (public manifest view). */
60
+ async function fetchListing(owner, appId) {
61
+ const r = await fetch(NODE_URL + '/v1/apps/' + encodeURIComponent(owner) + '/' + encodeURIComponent(appId) + '/webmcp');
62
+ const body = await r.json();
63
+ if (!r.ok) throw new Error((body.error && body.error.message) || ('WebMCP listing failed: ' + r.status));
64
+ return body;
65
+ }
66
+
67
+ /** Build the execute() for one app tool: paid → checkout; free-callable → HTTP invoke. */
68
+ function buildExecute(owner, appId, entry) {
69
+ return async function execute(args) {
70
+ const appRef = owner + '/' + appId;
71
+ const paid = entry.payment && entry.payment.required;
72
+ if (paid) {
73
+ const commerce = window.AIMEAT && window.AIMEAT.commerce;
74
+ const session = window.AIMEAT && window.AIMEAT.auth && window.AIMEAT.auth.getSession && window.AIMEAT.auth.getSession();
75
+ if (commerce && session) {
76
+ // Signed in: pay through the checkout core. A callable tool's result rides on the
77
+ // completed session; a task tool returns the queued task id.
78
+ try {
79
+ const done = await commerce.invokeAppTool({ app: appRef, tool: entry.name, input: args || {} });
80
+ const f = done.fulfillment || {};
81
+ const result = (f.results && f.results[0] && f.results[0].result !== undefined)
82
+ ? f.results[0].result
83
+ : { queued_task: (f.taskIds && f.taskIds[0]) || null, note: 'Order queued as an agent task; the deliverable arrives via the seller.' };
84
+ return asContent({ tool: entry.name, receipt: done.receipt, result: result });
85
+ } catch (e) {
86
+ return asContent({ tool: entry.name, error: e.message, code: e.code, accepts: e.accepts });
87
+ }
88
+ }
89
+ // Signed out (or commerce lib absent): surface the 402 payment instructions verbatim so
90
+ // the agent learns HOW to pay (x402-style accepts + ready-made checkout line item).
91
+ const r = await fetch(entry.invoke.url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ input: args || {} }) });
92
+ return asContent(await r.json());
93
+ }
94
+ // Unpriced: direct HTTP invoke (needs a signed-in session for the bearer token).
95
+ const sess = window.AIMEAT && window.AIMEAT.auth && window.AIMEAT.auth.getSession && window.AIMEAT.auth.getSession();
96
+ if (!sess) return asContent({ tool: entry.name, error: 'Sign in to call this free tool (bearer token required).' });
97
+ const res = await sess.fetch('/v1/apps/' + encodeURIComponent(owner) + '/' + encodeURIComponent(appId) + '/webmcp/tools/' + encodeURIComponent(entry.name), {
98
+ method: 'POST', body: JSON.stringify({ input: args || {} }),
99
+ });
100
+ return asContent(res.ok ? res.data : res);
101
+ };
102
+ }
103
+
104
+ const webmcp = {
105
+ /** Every tool descriptor this page has registered (introspection + provideContext resends). */
106
+ tools: [],
107
+ /** The registration surface last used ('none' when no agent API is present). */
108
+ surface: 'none',
109
+
110
+ /** Low-level: register ready-made WebMCP tool descriptors ({name, description, inputSchema, execute}).
111
+ * Re-registering a name REPLACES the earlier descriptor (idempotent across repeated expose calls). */
112
+ async register(tools) {
113
+ const names = tools.map(function (t) { return t.name; });
114
+ webmcp.tools = webmcp.tools.filter(function (t) { return names.indexOf(t.name) === -1; });
115
+ const surface = await registerWith(tools);
116
+ webmcp.tools = webmcp.tools.concat(tools);
117
+ webmcp.surface = surface;
118
+ return surface;
119
+ },
120
+
121
+ /**
122
+ * Expose an app's declared tools (apps.{appId}.tools manifest) to the in-browser agent.
123
+ * Descriptions of priced tools carry the price tag so the agent can tell the user the cost.
124
+ */
125
+ async exposeAppTools(ref) {
126
+ const listing = await fetchListing(ref.owner, ref.appId);
127
+ const tools = (listing.tools || []).map(function (entry) {
128
+ let desc = entry.description || entry.name;
129
+ if (entry.payment && entry.payment.required) {
130
+ const p = entry.payment;
131
+ const tags = [];
132
+ if (p.price) tags.push(p.price.morsels + ' morsels/call');
133
+ if (p.priceMoney) tags.push((p.priceMoney.amount / 1000000) + ' ' + p.priceMoney.currency + '/call');
134
+ desc = '[PAID: ' + tags.join(' or ') + '] ' + desc;
135
+ }
136
+ return {
137
+ name: entry.name,
138
+ description: desc,
139
+ inputSchema: entry.inputSchema || { type: 'object', properties: {} },
140
+ execute: buildExecute(ref.owner, ref.appId, entry),
141
+ };
142
+ });
143
+ await webmcp.register(tools);
144
+ return { surface: webmcp.surface, tools: tools.map(function (t) { return t.name; }) };
145
+ },
146
+
147
+ /** Node-level tools for the portal pages: public commerce/product discovery, no auth needed. */
148
+ async exposeNodeTools() {
149
+ const tools = [
150
+ {
151
+ name: 'aimeat-commerce-feed',
152
+ description: 'List everything for sale on this AIMEAT node: agent offers and priced app-tools (per-call functions of published apps), with prices in morsels or money micro-units.',
153
+ inputSchema: { type: 'object', properties: {} },
154
+ async execute() {
155
+ const r = await fetch(NODE_URL + '/v1/commerce/feed');
156
+ return asContent(await r.json());
157
+ },
158
+ },
159
+ {
160
+ name: 'aimeat-node-info',
161
+ description: 'Describe this AIMEAT node: identity, capabilities, discovery endpoints, and how agents connect.',
162
+ inputSchema: { type: 'object', properties: {} },
163
+ async execute() {
164
+ const r = await fetch(NODE_URL + '/.well-known/aimeat');
165
+ return asContent(await r.json());
166
+ },
167
+ },
168
+ ];
169
+ await webmcp.register(tools);
170
+ return { surface: webmcp.surface, tools: tools.map(function (t) { return t.name; }) };
171
+ },
172
+ };
173
+
174
+ // ── Expose globally + optional auto-activation from the script tag ──
175
+ attach('webmcp', webmcp);
176
+
177
+ try {
178
+ const el = /** @type {any} */ (typeof document !== 'undefined' && document.currentScript);
179
+ const src = el && el.src ? new URL(el.src, location.href) : null;
180
+ const expose = (src && src.searchParams.get('expose')) || (el && el.dataset && el.dataset.expose);
181
+ if (expose === 'node') {
182
+ // Defer past parse so a scanner's early modelContext shim is in place.
183
+ setTimeout(function () { webmcp.exposeNodeTools().catch(function () {}); }, 0);
184
+ }
185
+ } catch { /* auto-activation is best-effort; explicit calls always work */ }
@@ -0,0 +1,191 @@
1
+ /**
2
+ * @file work/index.js
3
+ * @description The aimeat-work library (SDK-libs migration Phase 2). Exposes AIMEAT.work — action
4
+ * catalogue browsing (public) plus the work-exchange lifecycle (request/batch/inbox/status/accept/
5
+ * progress/reject/deliver/rate + a waitFor poll helper). Authenticated calls go through the
6
+ * AIMEAT.auth session; public catalogue/stats reads go direct to NODE_URL. Componentized ESM source
7
+ * esbuild bundles to the IIFE served, unchanged, at /v1/libs/aimeat-work.js. Ported verbatim from
8
+ * lib-work.ts; NODE_URL now comes from _core/config.
9
+ * @structure imports NODE_URL (config) + authFetch (session) + attach (namespace); publicFetch();
10
+ * the `work` object; attach('work', …).
11
+ * @usage <script src="/v1/libs/aimeat-auth.js"></script><script src="/v1/libs/aimeat-work.js"></script>
12
+ * const actions = await AIMEAT.work.catalogue();
13
+ * @version-history
14
+ * v1.0.0 — 2026-07-19 — Migrated from src/routes/lib-work.ts (SDK-libs migration Phase 2).
15
+ */
16
+ import { NODE_URL } from '../_core/config.js';
17
+ import { makeSession } from '../_core/session.js';
18
+ const { authFetch } = makeSession('aimeat-work.js');
19
+ import { attach } from '../_core/namespace.js';
20
+
21
+ async function publicFetch(path) {
22
+ const r = await fetch(NODE_URL + path);
23
+ return r.json();
24
+ }
25
+
26
+ const work = {
27
+ // ── Catalogue (public, no auth) ──
28
+
29
+ // Browse action catalogue
30
+ async catalogue(opts) {
31
+ const params = new URLSearchParams();
32
+ if (opts?.search) params.set('search', opts.search);
33
+ if (opts?.category) params.set('category', opts.category);
34
+ if (opts?.page) params.set('page', String(opts.page));
35
+ if (opts?.per_page) params.set('per_page', String(opts.per_page));
36
+ const qs = params.toString();
37
+ const res = await publicFetch('/v1/catalogue' + (qs ? '?' + qs : ''));
38
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to browse catalogue');
39
+ return res.data;
40
+ },
41
+
42
+ // Get action details
43
+ async getAction(actionId) {
44
+ const res = await publicFetch('/v1/catalogue/' + encodeURIComponent(actionId));
45
+ if (!res.ok) {
46
+ if (res.error?.code === 'NOT_FOUND') return null;
47
+ throw new Error(res.error?.message || 'Failed to get action');
48
+ }
49
+ return res.data;
50
+ },
51
+
52
+ // Browse agent directory
53
+ async agents(opts) {
54
+ const params = new URLSearchParams();
55
+ if (opts?.page) params.set('page', String(opts.page));
56
+ if (opts?.per_page) params.set('per_page', String(opts.per_page));
57
+ const qs = params.toString();
58
+ const res = await publicFetch('/v1/catalogue/agents' + (qs ? '?' + qs : ''));
59
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to list agents');
60
+ return res.data;
61
+ },
62
+
63
+ // Get node stats
64
+ async stats() {
65
+ const res = await publicFetch('/v1/stats');
66
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to get stats');
67
+ return res.data;
68
+ },
69
+
70
+ // Catalogue change detection hash
71
+ async hash() {
72
+ const res = await publicFetch('/v1/catalogue/hash');
73
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to get hash');
74
+ return res.data;
75
+ },
76
+
77
+ // ── Work Requests (Tier 1, JWT auth) ──
78
+
79
+ // Submit a work request
80
+ async request(actionId, providerGaii, input, opts) {
81
+ const body = {
82
+ action_id: actionId,
83
+ provider_gaii: providerGaii,
84
+ input,
85
+ ...opts,
86
+ };
87
+ const res = await authFetch('/v1/work/request', {
88
+ method: 'POST', body: JSON.stringify(body),
89
+ });
90
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to submit work request');
91
+ return res.data;
92
+ },
93
+
94
+ // Submit batch work requests
95
+ async batch(requests) {
96
+ const res = await authFetch('/v1/work/batch', {
97
+ method: 'POST', body: JSON.stringify({ requests }),
98
+ });
99
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to submit batch');
100
+ return res.data;
101
+ },
102
+
103
+ // ── Provider Inbox ──
104
+
105
+ // Get pending work items (provider perspective)
106
+ async inbox() {
107
+ const res = await authFetch('/v1/work/inbox');
108
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to get inbox');
109
+ return res.data;
110
+ },
111
+
112
+ // ── Work Status & Actions ──
113
+
114
+ // Get work status by tracking code
115
+ async status(trackingCode) {
116
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode));
117
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to get work status');
118
+ return res.data;
119
+ },
120
+
121
+ // Accept work (provider)
122
+ async accept(trackingCode) {
123
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode) + '/accept', {
124
+ method: 'POST',
125
+ });
126
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to accept work');
127
+ return res.data;
128
+ },
129
+
130
+ // Mark work as in_progress (provider)
131
+ async progress(trackingCode) {
132
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode) + '/progress', {
133
+ method: 'POST',
134
+ });
135
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to update progress');
136
+ return res.data;
137
+ },
138
+
139
+ // Reject work (provider)
140
+ async reject(trackingCode, reason) {
141
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode) + '/reject', {
142
+ method: 'POST', body: JSON.stringify({ reason }),
143
+ });
144
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to reject work');
145
+ return res.data;
146
+ },
147
+
148
+ // Deliver work output (provider)
149
+ async deliver(trackingCode, output, metadata) {
150
+ const body = /** @type {Record<string, any>} */ ({ output });
151
+ if (metadata) body.metadata = metadata;
152
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode) + '/deliver', {
153
+ method: 'POST', body: JSON.stringify(body),
154
+ });
155
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to deliver work');
156
+ return res.data;
157
+ },
158
+
159
+ // Rate a delivery (requester)
160
+ async rate(trackingCode, rating, comment) {
161
+ const body = /** @type {Record<string, any>} */ ({ rating });
162
+ if (comment) body.comment = comment;
163
+ const res = await authFetch('/v1/work/' + encodeURIComponent(trackingCode) + '/rate', {
164
+ method: 'POST', body: JSON.stringify(body),
165
+ });
166
+ if (!res.ok) throw new Error(res.error?.message || 'Failed to rate work');
167
+ return res.data;
168
+ },
169
+
170
+ // ── Convenience: Poll for completion ──
171
+ async waitFor(trackingCode, opts) {
172
+ const interval = opts?.interval || 2000;
173
+ const timeout = opts?.timeout || 60000;
174
+ const start = Date.now();
175
+
176
+ while (Date.now() - start < timeout) {
177
+ const data = await work.status(trackingCode);
178
+ if (data.status === 'delivered' || data.status === 'rated' || data.status === 'completed') {
179
+ return data;
180
+ }
181
+ if (data.status === 'rejected' || data.status === 'expired' || data.status === 'failed') {
182
+ throw new Error('Work ' + data.status + ': ' + (data.output || trackingCode));
183
+ }
184
+ await new Promise(r => setTimeout(r, interval));
185
+ }
186
+ throw new Error('Work timed out after ' + timeout + 'ms');
187
+ },
188
+ };
189
+
190
+ // ── Expose globally ──
191
+ attach('work', work);
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @file workflows/index.js
3
+ * @description The aimeat-workflows library (SDK-libs migration Phase 1). Exposes AIMEAT.workflows —
4
+ * the Agent Workflows client: list/get/save/remove definitions, run (signals-only | full,
5
+ * sandbox|live), runs + health + blueprint reads, run cancel, and the human-in-the-loop surface
6
+ * (pendingInputs + answer + watchRun over the aimeat-live 'workflows' domain, polling fallback).
7
+ * Calls /v1/workflows via the AIMEAT.auth session (needs workflow:read / workflow:write grant
8
+ * scopes). Componentized ESM source esbuild bundles to the IIFE served, unchanged, at
9
+ * /v1/libs/aimeat-workflows.js. Ported verbatim from lib-workflows.ts.
10
+ * @structure imports authFetch (session) + attach (namespace); call() envelope wrapper (typed
11
+ * err.code/details); the `workflows` object incl. watchRun; attach('workflows', …).
12
+ * @usage <script src="/v1/libs/aimeat-auth.js"></script><script src="/v1/libs/aimeat-workflows.js"></script>
13
+ * const { runId } = await AIMEAT.workflows.run('my-flow', { mode: 'full', sandbox: true });
14
+ * @version-history
15
+ * v1.0.0 — 2026-07-19 — Migrated from src/routes/lib-workflows.ts (SDK-libs migration Phase 1).
16
+ */
17
+ import { makeSession } from '../_core/session.js';
18
+ const { authFetch } = makeSession('aimeat-workflows.js');
19
+ import { attach } from '../_core/namespace.js';
20
+
21
+ async function call(path, opts) {
22
+ const res = await authFetch(path, opts);
23
+ if (!res.ok) {
24
+ const err = /** @type {Error & { code?: string, details?: unknown }} */ (new Error((res.error && res.error.message) || 'Workflow request failed'));
25
+ err.code = res.error && res.error.code;
26
+ err.details = res.error && res.error.details;
27
+ throw err;
28
+ }
29
+ return res.data;
30
+ }
31
+
32
+ const workflows = {
33
+ // ── definitions ──
34
+ // List the owner's workflow definitions. { includeHealth: true } inlines each workflow's
35
+ // run-health trend (avoids a per-workflow health() fan-out on list views).
36
+ async list(opts) {
37
+ const qs = opts && opts.includeHealth ? '?include=health' : '';
38
+ return call('/v1/workflows' + qs);
39
+ },
40
+ async get(id) { return call('/v1/workflows/' + encodeURIComponent(id)); },
41
+ // Create or update. def = { title, description, trigger, vars, steps, on_step_fail:'inspect', ... }.
42
+ // Rejected (error.details.errors[]) unless the graph is a DAG and every agent step's offer is
43
+ // workflow-compatible. Steps may also be actions: export-out / trigger-geai / human-input.
44
+ async save(id, def) { return call('/v1/workflows/' + encodeURIComponent(id), { method: 'PUT', body: JSON.stringify(def) }); },
45
+ async remove(id, opts) {
46
+ const qs = opts && opts.withRuns ? '?withRuns=true' : '';
47
+ return call('/v1/workflows/' + encodeURIComponent(id) + qs, { method: 'DELETE' });
48
+ },
49
+ // The derived structural graph (nodes + edges + memory keys each step reads/writes) — feed a canvas.
50
+ async blueprint(id) { return call('/v1/workflows/' + encodeURIComponent(id) + '/blueprint'); },
51
+ async health(id) { return call('/v1/workflows/' + encodeURIComponent(id) + '/health'); },
52
+
53
+ // ── runs ──
54
+ // mode: 'signals' (evaluate signals only, no dispatch — instant health check) | 'full' (execute).
55
+ // sandbox: true namespaces every key under wf-test.<runId>. so a test run never clobbers prod.
56
+ async run(id, opts) {
57
+ const body = {
58
+ mode: opts && opts.mode === 'full' ? 'full' : 'signals-only',
59
+ target: opts && opts.sandbox ? 'sandbox' : 'live',
60
+ vars: (opts && opts.vars) || undefined,
61
+ };
62
+ return call('/v1/workflows/' + encodeURIComponent(id) + '/run', { method: 'POST', body: JSON.stringify(body) });
63
+ },
64
+ async runs(id) { return call('/v1/workflows/' + encodeURIComponent(id) + '/runs'); },
65
+ async getRun(id, runId) { return call('/v1/workflows/' + encodeURIComponent(id) + '/runs/' + encodeURIComponent(runId)); },
66
+ async cancel(id, runId) { return call('/v1/workflows/' + encodeURIComponent(id) + '/runs/' + encodeURIComponent(runId) + '/cancel', { method: 'POST' }); },
67
+
68
+ // ── human-in-the-loop ──
69
+ // Every step across the owner's active runs currently waiting for a human answer:
70
+ // [{ workflowId, runId, stepId, workflowTitle, question:{prompt,options,...}, askedAt, deadline }].
71
+ async pendingInputs() { return call('/v1/workflows/pending-inputs'); },
72
+ // Answer a waiting-human step. answer = { picks: ['option-id'], other?: 'free text' }. 409 when the
73
+ // step is not parked (already answered / timed out); the run advances on success.
74
+ async answer(id, runId, stepId, answer) {
75
+ return call('/v1/workflows/' + encodeURIComponent(id) + '/runs/' + encodeURIComponent(runId)
76
+ + '/steps/' + encodeURIComponent(stepId) + '/answer', { method: 'POST', body: JSON.stringify(answer) });
77
+ },
78
+
79
+ // ── live watching ──
80
+ // Re-fetch a run whenever the 'workflows' SSE domain ticks (via aimeat-live when loaded; falls back
81
+ // to polling every pollMs, default 5000). cb(run) fires on every fetch; returns a stop() function.
82
+ // Stops itself automatically when the run reaches a terminal state.
83
+ watchRun(id, runId, cb, opts) {
84
+ let stopped = false;
85
+ let unsub = null;
86
+ let timer = null;
87
+ const TERMINAL = { done: 1, partial: 1, red: 1, cancelled: 1 };
88
+ const pull = async () => {
89
+ if (stopped) return;
90
+ try {
91
+ const run = await workflows.getRun(id, runId);
92
+ cb(run);
93
+ if (run && TERMINAL[run.status]) stop();
94
+ } catch { /* transient — keep watching */ }
95
+ };
96
+ const stop = () => {
97
+ if (stopped) return;
98
+ stopped = true;
99
+ if (unsub) try { unsub(); } catch { /* noop */ }
100
+ if (timer) clearInterval(timer);
101
+ };
102
+ if (window.AIMEAT.live && typeof window.AIMEAT.live.subscribe === 'function') {
103
+ unsub = window.AIMEAT.live.subscribe(['workflows'], pull);
104
+ } else {
105
+ timer = setInterval(pull, (opts && opts.pollMs) || 5000);
106
+ }
107
+ pull();
108
+ return stop;
109
+ },
110
+ };
111
+
112
+ // ── Expose globally ──
113
+ attach('workflows', workflows);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aimeat",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "AIME AT - AI Memory Exchange and Action Transfer - reference implementation",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -102,11 +102,13 @@
102
102
  "vitest": "^4.1.8"
103
103
  },
104
104
  "scripts": {
105
- "dev": "tsx scripts/kill-port.ts && tsx scripts/build-app-catalog.ts && node --env-file=.env --import tsx src/index.ts start",
105
+ "dev": "tsx scripts/kill-port.ts && tsx scripts/build-app-catalog.ts && tsx scripts/build-sdk-libs.ts && node --env-file=.env --import tsx src/index.ts start",
106
106
  "dev:watch": "tsx watch src/index.ts",
107
107
  "build": "tsc && node --input-type=module -e \"import fs from 'fs';fs.cpSync('locales','dist/locales',{recursive:true});fs.cpSync('public','dist/public',{recursive:true});fs.cpSync('src/static','dist/static',{recursive:true});fs.cpSync('.env.example','dist/.env.example');fs.cpSync('src/storage/providers/postgres-kysely/migrations','dist/src/storage/providers/postgres-kysely/migrations',{recursive:true});\"",
108
108
  "build:app-catalog": "tsx scripts/build-app-catalog.ts",
109
109
  "check:app-catalog": "tsx scripts/build-app-catalog.ts --check",
110
+ "build:sdk": "tsx scripts/build-sdk-libs.ts",
111
+ "check:sdk": "tsx scripts/build-sdk-libs.ts --check",
110
112
  "check:mcp-tools": "tsx scripts/audit-mcp-tools.ts --check",
111
113
  "check:packs-doc": "vitest run test/unit/library-packs-doc-truth.test.ts",
112
114
  "aeb:prove": "tsx scripts/aeb-prove.ts",
@@ -173,6 +175,7 @@
173
175
  "lint": "eslint src/ public/ --max-warnings 0",
174
176
  "typecheck": "tsc --noEmit",
175
177
  "typecheck:frontend": "tsc --noEmit -p tsconfig.frontend.json",
178
+ "typecheck:sdk": "tsc --noEmit -p tsconfig.sdk.json",
176
179
  "check:importmap": "tsx scripts/check-importmap.ts",
177
180
  "check:no-max-tokens": "tsx scripts/check-no-max-tokens.ts",
178
181
  "screenshot:worker": "tsx scripts/screenshot-worker.ts",