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,28 @@
1
+ /**
2
+ * @file src/routes/exchange-market.ts
3
+ * @description The two-sided EXCHANGE MARKETPLACE surface (TARGET-045 Phase C): supply (OFFERINGs), demand
4
+ * (NEEDs), and BIDs against needs — the browse/post/bid/accept flow above the metered entitlement. Pricing
5
+ * is always AUTHORITATIVE from the provider extension action (resolveActionPricing), so listings and bids
6
+ * cannot undercut the provider. Accepting a bid mints the durable entitlement (same primitive as the
7
+ * direct acceptance route). Records are public (browsable); writes are owner-authorised. The heavy
8
+ * orchestration (agent negotiation, composite assembly) lives in the marketplace app/agent — this router
9
+ * is the generic store + capability match.
10
+ * @structure exchangeMarketRouter — offerings (POST/GET/GET :id detail/GET :id/consumers/DELETE) ·
11
+ * needs (POST/GET/close) · bids (POST/GET/accept)
12
+ * @usage import { exchangeMarketRouter } from './routes/exchange-market.js'; app.use(exchangeMarketRouter(config, storage));
13
+ * @version-history
14
+ * v1.4.0 — 2026-07-21 — Needs are app-bound (app_id required → 400 NEED_APP_REQUIRED) + carry an I/O
15
+ * interface spec (inputSchema/outputSchema) — the emergent app-to-app data-API request.
16
+ * v1.3.0 — 2026-07-21 — Cross-app selling (Gap 1): `kind: 'app-tool'` listing branch (a provider app sells a
17
+ * tool as a pinned-interface metered offering) + app-tool offering DETAIL (frozen schema + WebMCP recipe).
18
+ * v1.2.0 — 2026-07-20 — Legibility GATE: listing an offering now REQUIRES a published input+output schema
19
+ * (400 SCHEMA_REQUIRED) and usage_terms (400 USAGE_TERMS_REQUIRED) — every listing integrable + governed.
20
+ * v1.1.0 — 2026-07-20 — Legibility: offering detail (I/O schema + call-recipe + stats), provider consumers
21
+ * (lineage), usage_terms on offerings, spec on needs, ?stats=1 on the list.
22
+ * v1.0.0 — 2026-07-20 — Initial marketplace: offerings, needs, bids, capability match, accept-bid → mint (Phase C).
23
+ */
24
+ import { Router } from 'express';
25
+ import type { AimeatConfig } from '../config.js';
26
+ import type { Storage } from '../storage/interface.js';
27
+ export declare function exchangeMarketRouter(config: AimeatConfig, storage: Storage): Router;
28
+ //# sourceMappingURL=exchange-market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-market.d.ts","sourceRoot":"","sources":["../../../src/routes/exchange-market.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAgDvD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAyXnF"}
@@ -0,0 +1,454 @@
1
+ /**
2
+ * @file src/routes/exchange-market.ts
3
+ * @description The two-sided EXCHANGE MARKETPLACE surface (TARGET-045 Phase C): supply (OFFERINGs), demand
4
+ * (NEEDs), and BIDs against needs — the browse/post/bid/accept flow above the metered entitlement. Pricing
5
+ * is always AUTHORITATIVE from the provider extension action (resolveActionPricing), so listings and bids
6
+ * cannot undercut the provider. Accepting a bid mints the durable entitlement (same primitive as the
7
+ * direct acceptance route). Records are public (browsable); writes are owner-authorised. The heavy
8
+ * orchestration (agent negotiation, composite assembly) lives in the marketplace app/agent — this router
9
+ * is the generic store + capability match.
10
+ * @structure exchangeMarketRouter — offerings (POST/GET/GET :id detail/GET :id/consumers/DELETE) ·
11
+ * needs (POST/GET/close) · bids (POST/GET/accept)
12
+ * @usage import { exchangeMarketRouter } from './routes/exchange-market.js'; app.use(exchangeMarketRouter(config, storage));
13
+ * @version-history
14
+ * v1.4.0 — 2026-07-21 — Needs are app-bound (app_id required → 400 NEED_APP_REQUIRED) + carry an I/O
15
+ * interface spec (inputSchema/outputSchema) — the emergent app-to-app data-API request.
16
+ * v1.3.0 — 2026-07-21 — Cross-app selling (Gap 1): `kind: 'app-tool'` listing branch (a provider app sells a
17
+ * tool as a pinned-interface metered offering) + app-tool offering DETAIL (frozen schema + WebMCP recipe).
18
+ * v1.2.0 — 2026-07-20 — Legibility GATE: listing an offering now REQUIRES a published input+output schema
19
+ * (400 SCHEMA_REQUIRED) and usage_terms (400 USAGE_TERMS_REQUIRED) — every listing integrable + governed.
20
+ * v1.1.0 — 2026-07-20 — Legibility: offering detail (I/O schema + call-recipe + stats), provider consumers
21
+ * (lineage), usage_terms on offerings, spec on needs, ?stats=1 on the list.
22
+ * v1.0.0 — 2026-07-20 — Initial marketplace: offerings, needs, bids, capability match, accept-bid → mint (Phase C).
23
+ */
24
+ import { Router } from 'express';
25
+ import { requireAuth } from '../auth/middleware.js';
26
+ import { success, error } from '../middleware/envelope.js';
27
+ import { resolveIdentity } from '../utils/gaii.js';
28
+ import { commerceFeePercent } from '../services/marketplace-fee.js';
29
+ import { createEntitlement, readEntitlementForCall } from '../services/metered-entitlements.js';
30
+ import { resolveActionPricing, newOfferingId, newNeedId, newBidId, appToolCoordinate, agentWorkCoordinate, putOffering, getOffering, listOfferings, deleteOffering, matchOfferings, putNeed, getNeed, listNeeds, putBid, listBids, getBid, offeringStats, offeringConsumers, enrichNeeds, } from '../services/exchange-market.js';
31
+ import { AppToolsDocSchema, appToolsKey } from '../models/app-tool-schemas.js';
32
+ import { ensureInterfaceVersion, getInterfaceVersion } from '../services/app-tool-interfaces.js';
33
+ const str = (v) => (typeof v === 'string' ? v : '');
34
+ const posOrNull = (v) => (typeof v === 'number' && Number.isFinite(v) && v >= 0 ? Math.floor(v) : null);
35
+ /** A publishable schema is a non-empty object (an empty `{}` counts as "not published"). */
36
+ const hasSchema = (v) => !!v && typeof v === 'object' && Object.keys(v).length > 0;
37
+ /** Parse a provider-declared usage licence from a request body (all fields optional; defaults are permissive-but-attributed). */
38
+ function parseUsageTerms(v) {
39
+ if (!v || typeof v !== 'object')
40
+ return null;
41
+ const o = v;
42
+ return {
43
+ derivatives: o.derivatives !== false,
44
+ resale: o.resale === true,
45
+ attribution: o.attribution !== false,
46
+ note: typeof o.note === 'string' ? o.note : undefined,
47
+ };
48
+ }
49
+ /** Parse a need's interface-spec (the shape it sends/expects + light hints) from a request body. */
50
+ function parseNeedSpec(v) {
51
+ if (!v || typeof v !== 'object')
52
+ return null;
53
+ const o = v;
54
+ const isObj = (x) => !!x && typeof x === 'object' && !Array.isArray(x);
55
+ const requiredFields = Array.isArray(o.requiredFields) ? o.requiredFields.filter(f => typeof f === 'string') : [];
56
+ const spec = { requiredFields };
57
+ if (typeof o.format === 'string')
58
+ spec.format = o.format;
59
+ if (typeof o.sample === 'string')
60
+ spec.sample = o.sample;
61
+ if (typeof o.notes === 'string')
62
+ spec.notes = o.notes;
63
+ if (isObj(o.inputSchema))
64
+ spec.inputSchema = o.inputSchema;
65
+ if (isObj(o.outputSchema))
66
+ spec.outputSchema = o.outputSchema;
67
+ return (requiredFields.length || spec.format || spec.sample || spec.notes || spec.inputSchema || spec.outputSchema) ? spec : null;
68
+ }
69
+ export function exchangeMarketRouter(config, storage) {
70
+ const router = Router();
71
+ // ── INFO — the marketplace's public economics (rake, currencies) ─────────────
72
+ /** Public: what the platform takes on each metered call + the units in play. */
73
+ router.get('/v1/exchange/info', (_req, res) => {
74
+ return res.json(success(config.nodeId, {
75
+ rake_percent: commerceFeePercent(config),
76
+ rake_note: 'Platform fee applied to each metered call (provider keeps the rest). Set by the node operator.',
77
+ units: ['morsels', 'EUR', 'USD'],
78
+ morsel_note: 'Morsels are the node’s throttle unit (plain integers); real money settles in EUR/USD.',
79
+ }));
80
+ });
81
+ // ── OFFERINGS (supply) ─────────────────────────────────────────────────────
82
+ /** List a supply offering. Two kinds: an extension action (the raw data-service surface, default) or an
83
+ * `app-tool` (a method a provider app sells cross-app — a pinned interface version). Pricing is always
84
+ * authoritative from the provider. Both require a published I/O schema + usage terms (the legibility gate). */
85
+ router.post('/v1/exchange/offerings', requireAuth(), async (req, res) => {
86
+ const owner = req.auth.owner;
87
+ const b = (req.body ?? {});
88
+ // ── kind: app-tool — a provider app sells one of its tools (cross-app selling, Gap 1) ──
89
+ if (b.kind === 'app-tool') {
90
+ const appId = str(b.app_id), toolName = str(b.tool);
91
+ if (!appId || !toolName)
92
+ return res.status(400).json(error(config.nodeId, 'BAD_REQUEST', 'app_id and tool are required for an app-tool offering'));
93
+ const providerGhii = resolveIdentity(req.auth, config.nodeId);
94
+ const manifestRec = await storage.getMemory(providerGhii, appToolsKey(appId));
95
+ if (!manifestRec)
96
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `App "${appId}" declares no tool manifest (${appToolsKey(appId)}) under your account`));
97
+ const parsed = AppToolsDocSchema.safeParse(manifestRec.value);
98
+ if (!parsed.success)
99
+ return res.status(422).json(error(config.nodeId, 'INVALID_TOOL_MANIFEST', `App "${appId}" has a malformed tool manifest: ${parsed.error.message}`));
100
+ const tool = parsed.data.tools.find(t => t.name === toolName);
101
+ if (!tool)
102
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Tool "${toolName}" not found on app "${appId}"`));
103
+ // Gap 1 = synchronous metered calls → the tool MUST be bound to a capability. Unbound (task) tools are
104
+ // agent-work (metered-per-task, Gap 2) and are offered through the agent-work path, not here.
105
+ if (!tool.action_id)
106
+ return res.status(400).json(error(config.nodeId, 'TOOL_UNBOUND', `Tool "${toolName}" has no capability binding (action_id); only callable tools can be offered as a metered service today`));
107
+ // LEGIBILITY GATE (same as ext-action): input + output schema + usage terms are mandatory to list.
108
+ if (!hasSchema(tool.inputSchema) || !hasSchema(tool.outputSchema)) {
109
+ return res.status(400).json(error(config.nodeId, 'SCHEMA_REQUIRED', `Tool "${appId}/${toolName}" must declare a non-empty inputSchema AND outputSchema before it can be offered on EXCHANGE (a consumer must know what to send and receive)`));
110
+ }
111
+ const usageTerms = parseUsageTerms(b.usage_terms);
112
+ if (!usageTerms)
113
+ return res.status(400).json(error(config.nodeId, 'USAGE_TERMS_REQUIRED', 'usage_terms is required to list an offering — state { derivatives, resale, attribution, note? } so a consumer knows how they may use the output'));
114
+ // Authoritative pricing from the tool's own price/plans.
115
+ const commercial = {
116
+ payMorsels: tool.price && tool.price.morsels > 0 ? tool.price.morsels : undefined,
117
+ payMoney: tool.priceMoney ?? undefined,
118
+ plans: tool.plans,
119
+ };
120
+ const priced = resolveActionPricing(commercial, null);
121
+ if (!priced.ok)
122
+ return res.status(400).json(error(config.nodeId, priced.code, `Tool "${appId}/${toolName}": ${priced.message}`));
123
+ // Snapshot / pin the interface version (idempotent when unchanged; a schema/binding change mints v+1).
124
+ const iface = await ensureInterfaceVersion(storage, providerGhii, appId, toolName, {
125
+ inputSchema: tool.inputSchema ?? {}, outputSchema: tool.outputSchema ?? {}, binding: tool.action_id,
126
+ });
127
+ const coord = appToolCoordinate(owner, appId, toolName);
128
+ const now = new Date().toISOString();
129
+ const offering = {
130
+ offeringId: newOfferingId(), providerGhii, providerOwner: owner,
131
+ kind: 'app-tool', ext: coord.ext, action: coord.action,
132
+ surface: { kind: 'app-tool', ownerName: owner, appId, tool: toolName, ifaceVersion: iface.ifaceVersion },
133
+ title: str(b.title) || `${appId} · ${toolName}`,
134
+ description: str(b.description) || tool.description || '',
135
+ unit: priced.unit, basePrice: priced.pricePerCall, currency: priced.currency,
136
+ plans: commercial.plans ?? [],
137
+ provenance: (b.provenance && typeof b.provenance === 'object') ? b.provenance : null,
138
+ usageTerms,
139
+ tags: Array.isArray(b.tags) ? b.tags.filter(t => typeof t === 'string') : [],
140
+ state: 'listed', createdAt: now, updatedAt: now,
141
+ };
142
+ await putOffering(storage, offering);
143
+ return res.status(201).json(success(config.nodeId, { offering }));
144
+ }
145
+ // ── kind: agent-work — a provider AGENT sells a task type it performs (metered per delivered task, Gap 2) ──
146
+ if (b.kind === 'agent-work') {
147
+ const agentName = str(b.agent_name), taskType = str(b.task_type);
148
+ if (!agentName || !taskType)
149
+ return res.status(400).json(error(config.nodeId, 'BAD_REQUEST', 'agent_name and task_type are required for an agent-work offering'));
150
+ const agentGaii = `${agentName}#${owner}@${config.nodeId}`;
151
+ const agent = await storage.getAgent(agentGaii);
152
+ if (!agent)
153
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Agent "${agentName}" not found under your account`));
154
+ // Legibility gate: the task interface (what you send / what the agent delivers) + usage terms are mandatory.
155
+ const inSchema = (b.input_schema && typeof b.input_schema === 'object') ? b.input_schema : {};
156
+ const outSchema = (b.output_schema && typeof b.output_schema === 'object') ? b.output_schema : {};
157
+ if (!hasSchema(inSchema) || !hasSchema(outSchema)) {
158
+ return res.status(400).json(error(config.nodeId, 'SCHEMA_REQUIRED', `Agent-work "${agentName}:${taskType}" must declare a non-empty input_schema AND output_schema (a consumer must know what to send and what the agent delivers)`));
159
+ }
160
+ const usageTerms = parseUsageTerms(b.usage_terms);
161
+ if (!usageTerms)
162
+ return res.status(400).json(error(config.nodeId, 'USAGE_TERMS_REQUIRED', 'usage_terms is required to list an offering — state { derivatives, resale, attribution, note? }'));
163
+ // Pricing is authoritative from the provider (set on the listing): per-task morsels or money + optional plans.
164
+ const commercial = {
165
+ payMorsels: typeof b.price_morsels === 'number' && b.price_morsels > 0 ? Math.floor(b.price_morsels) : undefined,
166
+ payMoney: (b.price_money && typeof b.price_money === 'object') ? b.price_money : undefined,
167
+ plans: Array.isArray(b.plans) ? b.plans : undefined,
168
+ };
169
+ const priced = resolveActionPricing(commercial, null);
170
+ if (!priced.ok)
171
+ return res.status(400).json(error(config.nodeId, priced.code, `Agent-work "${agentName}:${taskType}": ${priced.message}`));
172
+ const providerGhii = resolveIdentity(req.auth, config.nodeId);
173
+ const coord = agentWorkCoordinate(owner, agentName, taskType);
174
+ const now = new Date().toISOString();
175
+ const offering = {
176
+ offeringId: newOfferingId(), providerGhii, providerOwner: owner,
177
+ kind: 'agent-work', ext: coord.ext, action: coord.action,
178
+ surface: { kind: 'agent-work', ownerName: owner, agentName, taskType },
179
+ title: str(b.title) || `${agentName}: ${taskType}`,
180
+ description: str(b.description) || agent.description || '',
181
+ unit: priced.unit, basePrice: priced.pricePerCall, currency: priced.currency,
182
+ plans: commercial.plans ?? [],
183
+ taskSpec: { inputSchema: inSchema, outputSchema: outSchema },
184
+ provenance: (b.provenance && typeof b.provenance === 'object') ? b.provenance : null,
185
+ usageTerms,
186
+ tags: Array.isArray(b.tags) ? b.tags.filter(t => typeof t === 'string') : [],
187
+ state: 'listed', createdAt: now, updatedAt: now,
188
+ };
189
+ await putOffering(storage, offering);
190
+ return res.status(201).json(success(config.nodeId, { offering }));
191
+ }
192
+ // ── kind: ext-action (default) — the raw data-service surface ──
193
+ const ext = str(b.ext), action = str(b.action);
194
+ if (!ext || !action)
195
+ return res.status(400).json(error(config.nodeId, 'BAD_REQUEST', 'ext and action are required'));
196
+ const extRec = await storage.getExtension(ext);
197
+ if (!extRec)
198
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Extension "${ext}" not found`));
199
+ if (extRec.installedBy !== owner)
200
+ return res.status(403).json(error(config.nodeId, 'FORBIDDEN', 'Only the extension owner may list it'));
201
+ const act = extRec.actions.find(a => a.id === action);
202
+ if (!act)
203
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Action "${action}" not found on "${ext}"`));
204
+ const priced = resolveActionPricing(act.commercial, null);
205
+ if (!priced.ok)
206
+ return res.status(400).json(error(config.nodeId, priced.code, priced.message));
207
+ // LEGIBILITY GATE: an offering must be integrable + governed to be listed. The action MUST publish an
208
+ // input AND output schema (so a consumer/agent knows what to send and gets back), and the listing MUST
209
+ // state usage terms (so a consumer knows if they may refine/resell). Enforced at the supply source.
210
+ if (!hasSchema(act.inputSchema) || !hasSchema(act.outputSchema)) {
211
+ return res.status(400).json(error(config.nodeId, 'SCHEMA_REQUIRED', `Action "${ext}/${action}" must publish a non-empty input AND output schema before it can be offered on EXCHANGE (a consumer must know what to send and receive)`));
212
+ }
213
+ const usageTerms = parseUsageTerms(b.usage_terms);
214
+ if (!usageTerms) {
215
+ return res.status(400).json(error(config.nodeId, 'USAGE_TERMS_REQUIRED', 'usage_terms is required to list an offering — state { derivatives, resale, attribution, note? } so a consumer knows how they may use the output'));
216
+ }
217
+ const now = new Date().toISOString();
218
+ const offering = {
219
+ offeringId: newOfferingId(),
220
+ providerGhii: resolveIdentity(req.auth, config.nodeId),
221
+ providerOwner: owner,
222
+ kind: 'ext-action', surface: null,
223
+ ext, action,
224
+ title: str(b.title) || `${ext}/${action}`,
225
+ description: str(b.description),
226
+ unit: priced.unit, basePrice: priced.pricePerCall, currency: priced.currency,
227
+ plans: act.commercial?.plans ?? [],
228
+ provenance: (b.provenance && typeof b.provenance === 'object') ? b.provenance : null,
229
+ usageTerms,
230
+ tags: Array.isArray(b.tags) ? b.tags.filter(t => typeof t === 'string') : [],
231
+ state: 'listed', createdAt: now, updatedAt: now,
232
+ };
233
+ await putOffering(storage, offering);
234
+ return res.status(201).json(success(config.nodeId, { offering }));
235
+ });
236
+ /**
237
+ * Offering DETAIL (public) — everything a human or agent needs to decide + integrate: the I/O SCHEMA of
238
+ * the underlying action, the CALL RECIPE (the contract IS the access — you call as yourself, no API key),
239
+ * usage terms, provenance, and usage STATS (reputation). One call, so the app/agent needn't stitch it.
240
+ */
241
+ router.get('/v1/exchange/offerings/:id', async (req, res) => {
242
+ const o = await getOffering(storage, str(req.params.id));
243
+ if (!o)
244
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such offering'));
245
+ const stats = await offeringStats(storage, o);
246
+ // app-tool: the capability schema is the PINNED interface snapshot; the call goes to the WebMCP invoke
247
+ // endpoint (the accepted contract meters it). This is the freeze made visible — the version is explicit.
248
+ if (o.kind === 'app-tool' && o.surface && o.surface.kind === 'app-tool') {
249
+ const s = o.surface;
250
+ const iface = await getInterfaceVersion(storage, o.providerGhii, s.appId, s.tool, s.ifaceVersion);
251
+ return res.json(success(config.nodeId, {
252
+ offering: o,
253
+ capability: iface ? {
254
+ kind: 'app-tool', app: `${s.ownerName}/${s.appId}`, tool: s.tool, iface_version: s.ifaceVersion,
255
+ input_schema: iface.inputSchema, output_schema: iface.outputSchema,
256
+ } : null,
257
+ call_recipe: {
258
+ method: 'POST',
259
+ url: `/v1/apps/${encodeURIComponent(s.ownerName)}/${encodeURIComponent(s.appId)}/webmcp/tools/${encodeURIComponent(s.tool)}`,
260
+ auth: 'Your own AIMEAT token — the accepted contract (metered entitlement) authorises the call; no separate API key is issued.',
261
+ note: `Each call is metered + charged to your budget at the provider price. The contract is pinned to interface v${s.ifaceVersion}; the provider may ship newer app versions without breaking your integration.`,
262
+ body: '{ "input": { … } }',
263
+ },
264
+ stats,
265
+ }));
266
+ }
267
+ // agent-work: the "capability" is the task interface; the call recipe is "start work → agent delivers".
268
+ if (o.kind === 'agent-work' && o.surface && o.surface.kind === 'agent-work') {
269
+ const s = o.surface;
270
+ return res.json(success(config.nodeId, {
271
+ offering: o,
272
+ capability: o.taskSpec ? { kind: 'agent-work', agent: `${s.ownerName}/${s.agentName}`, task_type: s.taskType,
273
+ input_schema: o.taskSpec.inputSchema, output_schema: o.taskSpec.outputSchema } : null,
274
+ call_recipe: {
275
+ method: 'POST', url: '/v1/exchange/work',
276
+ body: `{ "offering_id": "${o.offeringId}", "input": { … } }`,
277
+ auth: 'Your own AIMEAT token — the accepted contract authorises starting work; no separate API key.',
278
+ note: `Async: you START a task, the provider agent (${s.agentName}) DELIVERS, and you are charged the per-task price ON DELIVERY (metered + rake against your budget).`,
279
+ },
280
+ stats,
281
+ }));
282
+ }
283
+ // ext-action: schema comes live from the provider's extension action.
284
+ const extRec = await storage.getExtension(o.ext);
285
+ const act = extRec?.actions.find(a => a.id === o.action);
286
+ return res.json(success(config.nodeId, {
287
+ offering: o,
288
+ capability: act ? {
289
+ input_schema: act.inputSchema ?? {},
290
+ output_schema: act.outputSchema ?? {},
291
+ toll_morsels: act.tollMorsels ?? 0,
292
+ } : null,
293
+ call_recipe: {
294
+ method: 'POST',
295
+ url: `/v1/ext/${o.ext}/${o.action}`,
296
+ auth: 'Your own AIMEAT token — the accepted contract (metered entitlement) authorises the call; no separate API key is issued.',
297
+ note: 'Each call is metered + charged to your budget at the provider price; the provider’s own upstream keys stay server-side.',
298
+ mcp: `aimeat_extension_invoke { "name": "${o.ext}", "action": "${o.action}", "input": { … } }`,
299
+ },
300
+ stats,
301
+ }));
302
+ });
303
+ /**
304
+ * Offering CONSUMERS (provider lineage) — who holds a contract against my offering, how much they consumed,
305
+ * when they last used it. Provider-only: "where is my data used, by whom?".
306
+ */
307
+ router.get('/v1/exchange/offerings/:id/consumers', requireAuth(), async (req, res) => {
308
+ const o = await getOffering(storage, str(req.params.id));
309
+ if (!o || o.providerOwner !== req.auth.owner)
310
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such offering of yours'));
311
+ const consumers = await offeringConsumers(storage, o);
312
+ return res.json(success(config.nodeId, { offeringId: o.offeringId, consumers, count: consumers.length }));
313
+ });
314
+ /** Browse listed offerings (matching a capability or free text). Public. `?stats=1` folds in usage/reputation. */
315
+ router.get('/v1/exchange/offerings', async (req, res) => {
316
+ const ext = str(req.query.ext), action = str(req.query.action), q = str(req.query.q);
317
+ const offerings = (ext && action) || q
318
+ ? await matchOfferings(storage, { ext: ext || null, action: action || null, text: q || null })
319
+ : await listOfferings(storage);
320
+ if (str(req.query.stats) === '1') {
321
+ const withStats = await Promise.all(offerings.map(async (o) => ({ ...o, stats: await offeringStats(storage, o) })));
322
+ return res.json(success(config.nodeId, { offerings: withStats, count: withStats.length }));
323
+ }
324
+ return res.json(success(config.nodeId, { offerings, count: offerings.length }));
325
+ });
326
+ /** Delist an offering (owner only). */
327
+ router.delete('/v1/exchange/offerings/:id', requireAuth(), async (req, res) => {
328
+ const o = await getOffering(storage, str(req.params.id));
329
+ if (!o || o.providerOwner !== req.auth.owner)
330
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such offering of yours'));
331
+ await deleteOffering(storage, o.offeringId);
332
+ return res.json(success(config.nodeId, { offeringId: o.offeringId, state: 'delisted' }));
333
+ });
334
+ // ── NEEDS (demand) ──────────────────────────────────────────────────────────
335
+ /** Post an open need. Providers browse open needs and bid. */
336
+ router.post('/v1/exchange/needs', requireAuth(), async (req, res) => {
337
+ const b = (req.body ?? {});
338
+ const description = str(b.description);
339
+ if (!description)
340
+ return res.status(400).json(error(config.nodeId, 'BAD_REQUEST', 'description is required'));
341
+ // A need is ALWAYS posted on behalf of a specific app — the app that needs data/a method it can't produce
342
+ // itself. This binds the demand to a requester a provider can judge (per the emergent app-to-app market).
343
+ const appId = str(b.app_id);
344
+ if (!appId)
345
+ return res.status(400).json(error(config.nodeId, 'NEED_APP_REQUIRED', 'app_id is required — a need is posted on behalf of the specific app that needs the data (owner/filename)'));
346
+ const budgetUnit = b.budget_unit === 'money' || b.budget_unit === 'morsels' ? b.budget_unit : null;
347
+ const now = new Date().toISOString();
348
+ const need = {
349
+ needId: newNeedId(),
350
+ requesterGaii: resolveIdentity(req.auth, config.nodeId),
351
+ requesterOwner: req.auth.owner,
352
+ appId,
353
+ ext: str(b.ext) || null, action: str(b.action) || null,
354
+ description,
355
+ spec: parseNeedSpec(b.spec),
356
+ usageIntent: str(b.usage_intent) || null,
357
+ budgetUnit, budgetCap: posOrNull(b.budget_cap),
358
+ autonomy: b.autonomy === 'auto' ? 'auto' : 'supervised',
359
+ state: 'open', createdAt: now, updatedAt: now,
360
+ };
361
+ await putNeed(storage, need);
362
+ // Surface offerings that already satisfy it (so the requester can accept directly, no bid needed).
363
+ const matches = await matchOfferings(storage, { ext: need.ext, action: need.action, text: need.description });
364
+ return res.status(201).json(success(config.nodeId, { need, matches: matches.slice(0, 10) }));
365
+ });
366
+ /** Browse needs. `?open=1` for open only; `?mine=1` for the caller's own (auth then). */
367
+ router.get('/v1/exchange/needs', async (req, res) => {
368
+ const openOnly = str(req.query.open) === '1';
369
+ const mine = str(req.query.mine) === '1';
370
+ const owner = mine ? (req.auth?.owner ?? undefined) : undefined;
371
+ const needs = await enrichNeeds(storage, await listNeeds(storage, { openOnly, owner }));
372
+ return res.json(success(config.nodeId, { needs, count: needs.length }));
373
+ });
374
+ /** Close a need (requester only). */
375
+ router.post('/v1/exchange/needs/:id/close', requireAuth(), async (req, res) => {
376
+ const n = await getNeed(storage, str(req.params.id));
377
+ if (!n || n.requesterOwner !== req.auth.owner)
378
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such need of yours'));
379
+ n.state = 'closed';
380
+ n.updatedAt = new Date().toISOString();
381
+ await putNeed(storage, n);
382
+ return res.json(success(config.nodeId, { needId: n.needId, state: 'closed' }));
383
+ });
384
+ // ── BIDS ────────────────────────────────────────────────────────────────────
385
+ /** A provider bids on an open need (must own the bid's extension). */
386
+ router.post('/v1/exchange/needs/:id/bids', requireAuth(), async (req, res) => {
387
+ const owner = req.auth.owner;
388
+ const n = await getNeed(storage, str(req.params.id));
389
+ if (!n)
390
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such need'));
391
+ if (n.state !== 'open')
392
+ return res.status(409).json(error(config.nodeId, 'NEED_CLOSED', `Need is ${n.state}`));
393
+ const b = (req.body ?? {});
394
+ const ext = str(b.ext), action = str(b.action);
395
+ if (!ext || !action)
396
+ return res.status(400).json(error(config.nodeId, 'BAD_REQUEST', 'ext and action are required'));
397
+ const extRec = await storage.getExtension(ext);
398
+ if (!extRec || extRec.installedBy !== owner)
399
+ return res.status(403).json(error(config.nodeId, 'FORBIDDEN', 'Bid only with an action your extension owns'));
400
+ if (!extRec.actions.find(a => a.id === action))
401
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Action "${action}" not found`));
402
+ const bid = {
403
+ bidId: newBidId(), needId: n.needId,
404
+ bidderGhii: resolveIdentity(req.auth, config.nodeId), bidderOwner: owner,
405
+ offeringId: str(b.offering_id) || null, ext, action,
406
+ planId: str(b.plan_id) || null, note: str(b.note),
407
+ state: 'open', createdAt: new Date().toISOString(),
408
+ };
409
+ await putBid(storage, bid);
410
+ return res.status(201).json(success(config.nodeId, { bid }));
411
+ });
412
+ /** List bids on a need (public). */
413
+ router.get('/v1/exchange/needs/:id/bids', async (req, res) => {
414
+ const bids = await listBids(storage, str(req.params.id));
415
+ return res.json(success(config.nodeId, { bids, count: bids.length }));
416
+ });
417
+ /** The requester accepts a bid → mints the entitlement (consumer = requester, provider = bidder). */
418
+ router.post('/v1/exchange/needs/:id/bids/:bidId/accept', requireAuth(), async (req, res) => {
419
+ const owner = req.auth.owner;
420
+ const consumerGaii = resolveIdentity(req.auth, config.nodeId);
421
+ const n = await getNeed(storage, str(req.params.id));
422
+ if (!n || n.requesterOwner !== owner)
423
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such need of yours'));
424
+ const bid = await getBid(storage, n.needId, str(req.params.bidId));
425
+ if (!bid || bid.state !== 'open')
426
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'No such open bid'));
427
+ const extRec = await storage.getExtension(bid.ext);
428
+ const act = extRec?.actions.find(a => a.id === bid.action);
429
+ if (!extRec || !act)
430
+ return res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Bid capability no longer exists'));
431
+ const priced = resolveActionPricing(act.commercial, bid.planId);
432
+ if (!priced.ok)
433
+ return res.status(400).json(error(config.nodeId, priced.code, priced.message));
434
+ const capCap = posOrNull((req.body ?? {})?.cap_units) ?? n.budgetCap;
435
+ const existing = await readEntitlementForCall(storage, consumerGaii, bid.ext, bid.action);
436
+ const ent = await createEntitlement(storage, {
437
+ consumerGaii, appId: n.appId, providerGhii: `${extRec.installedBy}@${config.nodeId}`,
438
+ ext: bid.ext, action: bid.action, capabilityLabel: `${bid.ext}/${bid.action}`,
439
+ unit: priced.unit, pricePerCall: priced.pricePerCall, currency: priced.currency, pricing: priced.pricing,
440
+ capUnits: capCap, contractRef: `bid:${bid.bidId}`, createdBy: owner, carrySpend: existing,
441
+ });
442
+ // Mark the bid accepted + the need matched (append updates; other bids stay for the record).
443
+ bid.state = 'accepted';
444
+ await putBid(storage, bid);
445
+ n.state = 'matched';
446
+ n.updatedAt = new Date().toISOString();
447
+ await putNeed(storage, n);
448
+ return res.status(201).json(success(config.nodeId, { entitlement_id: ent.entitlementId, ext: ent.ext, action: ent.action, unit: ent.unit, pricing: ent.pricing }, [
449
+ { description: 'This app’s cost & contracts', method: 'GET', url: n.appId ? `/v1/apps/cost?app_id=${encodeURIComponent(n.appId)}` : '/v1/exchange/entitlements' },
450
+ ]));
451
+ });
452
+ return router;
453
+ }
454
+ //# sourceMappingURL=exchange-market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-market.js","sourceRoot":"","sources":["../../../src/routes/exchange-market.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @file src/routes/exchange.ts
3
+ * @description EXCHANGE contract-acceptance surface (TARGET-045) — the WRITE side of the G1 metered
4
+ * entitlement. When a negotiation concludes (a human in an MCP chat, or a closed negotiation agent),
5
+ * the CONSUMER's owner accepts the contract here, which mints the durable entitlement the G2 gateway
6
+ * then honours on every call. Safety by construction: the consumer chooses only the BUDGET (their own
7
+ * spend cap) and the contract ref — the per-call PRICE is read authoritatively from the provider's
8
+ * extension action (`commercial.payMorsels`), so a consumer can neither undercut the provider nor be
9
+ * charged a price they did not accept. The entitlement's consumer is always the caller's own owner
10
+ * (strictly cross-owner via resolveIdentity), so accepting a contract authorises only one's own spend.
11
+ *
12
+ * Slice-1 covers the `morsels` unit (fully in-repo); the money unit rides the same acceptance flow once
13
+ * the Stripe/EE drawdown is wired. Dynamic agent-negotiated pricing (a signed price quote that differs
14
+ * from the list price) is a later addition — slice-1 accepts the provider's listed price + a budget.
15
+ * @structure exchangeRouter — POST /v1/exchange/entitlements · GET /v1/exchange/entitlements ·
16
+ * POST /v1/exchange/entitlements/off
17
+ * @usage
18
+ * import { exchangeRouter } from './routes/exchange.js';
19
+ * app.use(exchangeRouter(config, storage));
20
+ * @version-history
21
+ * v1.3.0 — 2026-07-21 — Agent work (Gap 2): POST /work (start) + /work/:id/deliver (settle on delivery) +
22
+ * GET /work — the async third sellable surface, metered per delivered task via the shared settlement.
23
+ * v1.2.0 — 2026-07-21 — Renegotiation + history: POST/GET /proposals (+ accept/decline/withdraw) with a
24
+ * Profile>Messages notification; GET /entitlements/history + /provider/history (superseded contracts).
25
+ * v1.1.0 — 2026-07-21 — Accept by `offering_id` (works for ext-action AND app-tool kinds; app-tool contract
26
+ * pins the offering's interface version) via the shared resolveOfferingPricing; legacy ext+action retained.
27
+ * v1.0.0 — 2026-07-20 — Initial acceptance surface: mint (authoritative price) / list mine / pause+revoke.
28
+ */
29
+ import { Router } from 'express';
30
+ import type { AimeatConfig } from '../config.js';
31
+ import type { Storage } from '../storage/interface.js';
32
+ export declare function exchangeRouter(config: AimeatConfig, storage: Storage): Router;
33
+ //# sourceMappingURL=exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../src/routes/exchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAyDvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA6T7E"}