aimeat 1.14.3 → 1.14.6

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 (322) hide show
  1. package/dist/.env.example +4 -0
  2. package/dist/locales/en.json +43 -5
  3. package/dist/locales/fi.json +43 -5
  4. package/dist/public/components/Markdown.js +229 -0
  5. package/dist/public/css/views/agents-detail.css +247 -0
  6. package/dist/public/js/services/agent-messages.js +4 -1
  7. package/dist/public/js/services/agent-tasks.js +5 -0
  8. package/dist/public/js/services/memory.js +7 -2
  9. package/dist/public/spa.html +1 -1
  10. package/dist/public/views/profile/agents/agent-card.js +60 -10
  11. package/dist/public/views/profile/agents/tab-data-access.js +263 -30
  12. package/dist/public/views/profile/agents/tab-messages.js +90 -7
  13. package/dist/public/views/profile/agents/tab-readme.js +37 -0
  14. package/dist/public/views/profile/agents-messages-subtab.js +119 -6
  15. package/dist/public/views/profile/agents-task-builder.js +45 -157
  16. package/dist/public/views/profile/agents-tasks-subtab.js +237 -23
  17. package/dist/scripts/audit-mcp-schemas.d.ts +2 -0
  18. package/dist/scripts/audit-mcp-schemas.d.ts.map +1 -0
  19. package/dist/scripts/audit-mcp-schemas.js +211 -0
  20. package/dist/scripts/audit-mcp-schemas.js.map +1 -0
  21. package/dist/src/auth/middleware.d.ts +25 -0
  22. package/dist/src/auth/middleware.d.ts.map +1 -1
  23. package/dist/src/auth/middleware.js +35 -0
  24. package/dist/src/auth/middleware.js.map +1 -1
  25. package/dist/src/auth/node-keys.d.ts.map +1 -1
  26. package/dist/src/auth/node-keys.js +2 -0
  27. package/dist/src/auth/node-keys.js.map +1 -1
  28. package/dist/src/cli/connect/mcp/server.d.ts +1 -1
  29. package/dist/src/cli/connect/mcp/server.d.ts.map +1 -1
  30. package/dist/src/cli/connect/mcp/server.js +32 -4
  31. package/dist/src/cli/connect/mcp/server.js.map +1 -1
  32. package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts +3 -0
  33. package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts.map +1 -1
  34. package/dist/src/cli/connect/mcp/tools/agent-caps.js +13 -4
  35. package/dist/src/cli/connect/mcp/tools/agent-caps.js.map +1 -1
  36. package/dist/src/cli/connect/mcp/tools/agent-management.d.ts +1 -0
  37. package/dist/src/cli/connect/mcp/tools/agent-management.d.ts.map +1 -1
  38. package/dist/src/cli/connect/mcp/tools/agent-management.js +3 -2
  39. package/dist/src/cli/connect/mcp/tools/agent-management.js.map +1 -1
  40. package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts +4 -0
  41. package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts.map +1 -1
  42. package/dist/src/cli/connect/mcp/tools/agent-messages.js +30 -9
  43. package/dist/src/cli/connect/mcp/tools/agent-messages.js.map +1 -1
  44. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +4 -0
  45. package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
  46. package/dist/src/cli/connect/mcp/tools/agent-tasks.js +48 -26
  47. package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
  48. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +1 -0
  49. package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
  50. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +2 -1
  51. package/dist/src/cli/connect/mcp/tools/agent-telemetry.js.map +1 -1
  52. package/dist/src/cli/connect/mcp/tools/apps.d.ts +1 -0
  53. package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
  54. package/dist/src/cli/connect/mcp/tools/apps.js +6 -5
  55. package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
  56. package/dist/src/cli/connect/mcp/tools/boards.d.ts +3 -0
  57. package/dist/src/cli/connect/mcp/tools/boards.d.ts.map +1 -1
  58. package/dist/src/cli/connect/mcp/tools/boards.js +33 -13
  59. package/dist/src/cli/connect/mcp/tools/boards.js.map +1 -1
  60. package/dist/src/cli/connect/mcp/tools/capabilities.d.ts +5 -0
  61. package/dist/src/cli/connect/mcp/tools/capabilities.d.ts.map +1 -1
  62. package/dist/src/cli/connect/mcp/tools/capabilities.js +87 -26
  63. package/dist/src/cli/connect/mcp/tools/capabilities.js.map +1 -1
  64. package/dist/src/cli/connect/mcp/tools/catalogue.d.ts +3 -0
  65. package/dist/src/cli/connect/mcp/tools/catalogue.d.ts.map +1 -1
  66. package/dist/src/cli/connect/mcp/tools/catalogue.js +22 -9
  67. package/dist/src/cli/connect/mcp/tools/catalogue.js.map +1 -1
  68. package/dist/src/cli/connect/mcp/tools/consent.d.ts +4 -0
  69. package/dist/src/cli/connect/mcp/tools/consent.d.ts.map +1 -1
  70. package/dist/src/cli/connect/mcp/tools/consent.js +16 -13
  71. package/dist/src/cli/connect/mcp/tools/consent.js.map +1 -1
  72. package/dist/src/cli/connect/mcp/tools/core.d.ts +6 -0
  73. package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
  74. package/dist/src/cli/connect/mcp/tools/core.js +106 -52
  75. package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
  76. package/dist/src/cli/connect/mcp/tools/cortex.d.ts +3 -0
  77. package/dist/src/cli/connect/mcp/tools/cortex.d.ts.map +1 -1
  78. package/dist/src/cli/connect/mcp/tools/cortex.js +13 -9
  79. package/dist/src/cli/connect/mcp/tools/cortex.js.map +1 -1
  80. package/dist/src/cli/connect/mcp/tools/extensions.d.ts +4 -0
  81. package/dist/src/cli/connect/mcp/tools/extensions.d.ts.map +1 -1
  82. package/dist/src/cli/connect/mcp/tools/extensions.js +23 -14
  83. package/dist/src/cli/connect/mcp/tools/extensions.js.map +1 -1
  84. package/dist/src/cli/connect/mcp/tools/flags.d.ts +3 -0
  85. package/dist/src/cli/connect/mcp/tools/flags.d.ts.map +1 -1
  86. package/dist/src/cli/connect/mcp/tools/flags.js +9 -3
  87. package/dist/src/cli/connect/mcp/tools/flags.js.map +1 -1
  88. package/dist/src/cli/connect/mcp/tools/groups.d.ts +4 -0
  89. package/dist/src/cli/connect/mcp/tools/groups.d.ts.map +1 -1
  90. package/dist/src/cli/connect/mcp/tools/groups.js +29 -19
  91. package/dist/src/cli/connect/mcp/tools/groups.js.map +1 -1
  92. package/dist/src/cli/connect/mcp/tools/handbook.d.ts +2 -0
  93. package/dist/src/cli/connect/mcp/tools/handbook.d.ts.map +1 -1
  94. package/dist/src/cli/connect/mcp/tools/handbook.js +9 -5
  95. package/dist/src/cli/connect/mcp/tools/handbook.js.map +1 -1
  96. package/dist/src/cli/connect/mcp/tools/instances.d.ts +4 -0
  97. package/dist/src/cli/connect/mcp/tools/instances.d.ts.map +1 -1
  98. package/dist/src/cli/connect/mcp/tools/instances.js +7 -6
  99. package/dist/src/cli/connect/mcp/tools/instances.js.map +1 -1
  100. package/dist/src/cli/connect/mcp/tools/knowledge.d.ts +3 -0
  101. package/dist/src/cli/connect/mcp/tools/knowledge.d.ts.map +1 -1
  102. package/dist/src/cli/connect/mcp/tools/knowledge.js +16 -13
  103. package/dist/src/cli/connect/mcp/tools/knowledge.js.map +1 -1
  104. package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts +1 -0
  105. package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts.map +1 -1
  106. package/dist/src/cli/connect/mcp/tools/memory-ext.js +2 -1
  107. package/dist/src/cli/connect/mcp/tools/memory-ext.js.map +1 -1
  108. package/dist/src/cli/connect/mcp/tools/onboarding.d.ts +1 -0
  109. package/dist/src/cli/connect/mcp/tools/onboarding.d.ts.map +1 -1
  110. package/dist/src/cli/connect/mcp/tools/onboarding.js +6 -5
  111. package/dist/src/cli/connect/mcp/tools/onboarding.js.map +1 -1
  112. package/dist/src/cli/connect/mcp/tools/organisms.d.ts +3 -0
  113. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  114. package/dist/src/cli/connect/mcp/tools/organisms.js +30 -17
  115. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  116. package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts +1 -0
  117. package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts.map +1 -1
  118. package/dist/src/cli/connect/mcp/tools/wallet-ext.js +2 -1
  119. package/dist/src/cli/connect/mcp/tools/wallet-ext.js.map +1 -1
  120. package/dist/src/cli/connect/status.d.ts.map +1 -1
  121. package/dist/src/cli/connect/status.js +22 -2
  122. package/dist/src/cli/connect/status.js.map +1 -1
  123. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  124. package/dist/src/cli/connect/tool-call.js +13 -2
  125. package/dist/src/cli/connect/tool-call.js.map +1 -1
  126. package/dist/src/config.d.ts +2 -0
  127. package/dist/src/config.d.ts.map +1 -1
  128. package/dist/src/config.js +5 -0
  129. package/dist/src/config.js.map +1 -1
  130. package/dist/src/generated/api-types.d.ts +22571 -0
  131. package/dist/src/generated/api-types.d.ts.map +1 -0
  132. package/dist/src/generated/api-types.js +6 -0
  133. package/dist/src/generated/api-types.js.map +1 -0
  134. package/dist/src/index.js +27 -2
  135. package/dist/src/index.js.map +1 -1
  136. package/dist/src/mcp/agent-capabilities.d.ts +1 -0
  137. package/dist/src/mcp/agent-capabilities.d.ts.map +1 -1
  138. package/dist/src/mcp/agent-capabilities.js +4 -2
  139. package/dist/src/mcp/agent-capabilities.js.map +1 -1
  140. package/dist/src/mcp/agent-management.d.ts +1 -0
  141. package/dist/src/mcp/agent-management.d.ts.map +1 -1
  142. package/dist/src/mcp/agent-management.js +4 -2
  143. package/dist/src/mcp/agent-management.js.map +1 -1
  144. package/dist/src/mcp/agent-messages.d.ts +3 -0
  145. package/dist/src/mcp/agent-messages.d.ts.map +1 -1
  146. package/dist/src/mcp/agent-messages.js +37 -2
  147. package/dist/src/mcp/agent-messages.js.map +1 -1
  148. package/dist/src/mcp/agent-onboarding.d.ts +1 -0
  149. package/dist/src/mcp/agent-onboarding.d.ts.map +1 -1
  150. package/dist/src/mcp/agent-onboarding.js +23 -8
  151. package/dist/src/mcp/agent-onboarding.js.map +1 -1
  152. package/dist/src/mcp/agent-tasks.d.ts +1 -0
  153. package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
  154. package/dist/src/mcp/agent-tasks.js +34 -19
  155. package/dist/src/mcp/agent-tasks.js.map +1 -1
  156. package/dist/src/mcp/agent-telemetry.d.ts +1 -0
  157. package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
  158. package/dist/src/mcp/agent-telemetry.js +3 -1
  159. package/dist/src/mcp/agent-telemetry.js.map +1 -1
  160. package/dist/src/mcp/annotations.d.ts.map +1 -1
  161. package/dist/src/mcp/annotations.js +2 -0
  162. package/dist/src/mcp/annotations.js.map +1 -1
  163. package/dist/src/mcp/apps.d.ts +1 -0
  164. package/dist/src/mcp/apps.d.ts.map +1 -1
  165. package/dist/src/mcp/apps.js +7 -7
  166. package/dist/src/mcp/apps.js.map +1 -1
  167. package/dist/src/mcp/boards.d.ts +1 -0
  168. package/dist/src/mcp/boards.d.ts.map +1 -1
  169. package/dist/src/mcp/boards.js +9 -7
  170. package/dist/src/mcp/boards.js.map +1 -1
  171. package/dist/src/mcp/capabilities.d.ts +1 -0
  172. package/dist/src/mcp/capabilities.d.ts.map +1 -1
  173. package/dist/src/mcp/capabilities.js +8 -7
  174. package/dist/src/mcp/capabilities.js.map +1 -1
  175. package/dist/src/mcp/catalog/definitions.d.ts +22 -0
  176. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  177. package/dist/src/mcp/catalog/definitions.js +285 -156
  178. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  179. package/dist/src/mcp/catalog/output-schemas.d.ts +56 -0
  180. package/dist/src/mcp/catalog/output-schemas.d.ts.map +1 -0
  181. package/dist/src/mcp/catalog/output-schemas.js +58 -0
  182. package/dist/src/mcp/catalog/output-schemas.js.map +1 -0
  183. package/dist/src/mcp/catalog/scopes.d.ts +46 -0
  184. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -0
  185. package/dist/src/mcp/catalog/scopes.js +96 -0
  186. package/dist/src/mcp/catalog/scopes.js.map +1 -0
  187. package/dist/src/mcp/catalog/shape.d.ts +88 -0
  188. package/dist/src/mcp/catalog/shape.d.ts.map +1 -0
  189. package/dist/src/mcp/catalog/shape.js +150 -0
  190. package/dist/src/mcp/catalog/shape.js.map +1 -0
  191. package/dist/src/mcp/catalog/surfaces.d.ts +23 -0
  192. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -0
  193. package/dist/src/mcp/catalog/surfaces.js +127 -0
  194. package/dist/src/mcp/catalog/surfaces.js.map +1 -0
  195. package/dist/src/mcp/catalogue.d.ts +1 -0
  196. package/dist/src/mcp/catalogue.d.ts.map +1 -1
  197. package/dist/src/mcp/catalogue.js +5 -3
  198. package/dist/src/mcp/catalogue.js.map +1 -1
  199. package/dist/src/mcp/chat-instances.d.ts +1 -0
  200. package/dist/src/mcp/chat-instances.d.ts.map +1 -1
  201. package/dist/src/mcp/chat-instances.js +5 -3
  202. package/dist/src/mcp/chat-instances.js.map +1 -1
  203. package/dist/src/mcp/consent.d.ts +1 -0
  204. package/dist/src/mcp/consent.d.ts.map +1 -1
  205. package/dist/src/mcp/consent.js +5 -3
  206. package/dist/src/mcp/consent.js.map +1 -1
  207. package/dist/src/mcp/core.d.ts +12 -0
  208. package/dist/src/mcp/core.d.ts.map +1 -1
  209. package/dist/src/mcp/core.js +179 -153
  210. package/dist/src/mcp/core.js.map +1 -1
  211. package/dist/src/mcp/cortex.d.ts +1 -0
  212. package/dist/src/mcp/cortex.d.ts.map +1 -1
  213. package/dist/src/mcp/cortex.js +7 -7
  214. package/dist/src/mcp/cortex.js.map +1 -1
  215. package/dist/src/mcp/extensions.d.ts +1 -0
  216. package/dist/src/mcp/extensions.d.ts.map +1 -1
  217. package/dist/src/mcp/extensions.js +9 -9
  218. package/dist/src/mcp/extensions.js.map +1 -1
  219. package/dist/src/mcp/flags.d.ts +1 -0
  220. package/dist/src/mcp/flags.d.ts.map +1 -1
  221. package/dist/src/mcp/flags.js +3 -1
  222. package/dist/src/mcp/flags.js.map +1 -1
  223. package/dist/src/mcp/index.d.ts +5 -0
  224. package/dist/src/mcp/index.d.ts.map +1 -1
  225. package/dist/src/mcp/index.js +77 -10
  226. package/dist/src/mcp/index.js.map +1 -1
  227. package/dist/src/mcp/knowledge.d.ts +1 -0
  228. package/dist/src/mcp/knowledge.d.ts.map +1 -1
  229. package/dist/src/mcp/knowledge.js +6 -4
  230. package/dist/src/mcp/knowledge.js.map +1 -1
  231. package/dist/src/mcp/memory-extended.d.ts +1 -0
  232. package/dist/src/mcp/memory-extended.d.ts.map +1 -1
  233. package/dist/src/mcp/memory-extended.js +4 -2
  234. package/dist/src/mcp/memory-extended.js.map +1 -1
  235. package/dist/src/mcp/organisms.d.ts +1 -0
  236. package/dist/src/mcp/organisms.d.ts.map +1 -1
  237. package/dist/src/mcp/organisms.js +7 -5
  238. package/dist/src/mcp/organisms.js.map +1 -1
  239. package/dist/src/mcp/prompts.d.ts +3 -0
  240. package/dist/src/mcp/prompts.d.ts.map +1 -1
  241. package/dist/src/mcp/prompts.js +17 -6
  242. package/dist/src/mcp/prompts.js.map +1 -1
  243. package/dist/src/mcp/sharing-groups.d.ts +1 -0
  244. package/dist/src/mcp/sharing-groups.d.ts.map +1 -1
  245. package/dist/src/mcp/sharing-groups.js +7 -5
  246. package/dist/src/mcp/sharing-groups.js.map +1 -1
  247. package/dist/src/mcp/wallet-extended.d.ts +1 -0
  248. package/dist/src/mcp/wallet-extended.d.ts.map +1 -1
  249. package/dist/src/mcp/wallet-extended.js +3 -1
  250. package/dist/src/mcp/wallet-extended.js.map +1 -1
  251. package/dist/src/models/agent-message-schemas.d.ts +25 -0
  252. package/dist/src/models/agent-message-schemas.d.ts.map +1 -1
  253. package/dist/src/models/agent-message-schemas.js +23 -0
  254. package/dist/src/models/agent-message-schemas.js.map +1 -1
  255. package/dist/src/models/agent-task-schemas.d.ts +9 -0
  256. package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
  257. package/dist/src/models/agent-task-schemas.js +17 -6
  258. package/dist/src/models/agent-task-schemas.js.map +1 -1
  259. package/dist/src/models/schemas.d.ts +1 -0
  260. package/dist/src/models/schemas.d.ts.map +1 -1
  261. package/dist/src/models/schemas.js +3 -0
  262. package/dist/src/models/schemas.js.map +1 -1
  263. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  264. package/dist/src/routes/agent-messages.js +12 -0
  265. package/dist/src/routes/agent-messages.js.map +1 -1
  266. package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
  267. package/dist/src/routes/agent-onboarding.js +3 -2
  268. package/dist/src/routes/agent-onboarding.js.map +1 -1
  269. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  270. package/dist/src/routes/agent-tasks.js +257 -10
  271. package/dist/src/routes/agent-tasks.js.map +1 -1
  272. package/dist/src/routes/bootstrap.d.ts +2 -0
  273. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  274. package/dist/src/routes/bootstrap.js +11 -3
  275. package/dist/src/routes/bootstrap.js.map +1 -1
  276. package/dist/src/routes/memory.d.ts.map +1 -1
  277. package/dist/src/routes/memory.js +41 -6
  278. package/dist/src/routes/memory.js.map +1 -1
  279. package/dist/src/routes/prompts.d.ts +1 -0
  280. package/dist/src/routes/prompts.d.ts.map +1 -1
  281. package/dist/src/routes/prompts.js +30 -2
  282. package/dist/src/routes/prompts.js.map +1 -1
  283. package/dist/src/routes/storage-files.d.ts +14 -0
  284. package/dist/src/routes/storage-files.d.ts.map +1 -1
  285. package/dist/src/routes/storage-files.js +88 -0
  286. package/dist/src/routes/storage-files.js.map +1 -1
  287. package/dist/src/services/download-token.d.ts +41 -0
  288. package/dist/src/services/download-token.d.ts.map +1 -0
  289. package/dist/src/services/download-token.js +74 -0
  290. package/dist/src/services/download-token.js.map +1 -0
  291. package/dist/src/services/handbooks/admin.d.ts +10 -0
  292. package/dist/src/services/handbooks/admin.d.ts.map +1 -0
  293. package/dist/src/services/handbooks/admin.js +45 -0
  294. package/dist/src/services/handbooks/admin.js.map +1 -0
  295. package/dist/src/services/handbooks/agent.d.ts +11 -0
  296. package/dist/src/services/handbooks/agent.d.ts.map +1 -0
  297. package/dist/src/services/handbooks/agent.js +66 -0
  298. package/dist/src/services/handbooks/agent.js.map +1 -0
  299. package/dist/src/services/handbooks/appdev.d.ts +9 -0
  300. package/dist/src/services/handbooks/appdev.d.ts.map +1 -0
  301. package/dist/src/services/handbooks/appdev.js +52 -0
  302. package/dist/src/services/handbooks/appdev.js.map +1 -0
  303. package/dist/src/services/handbooks/index.d.ts +14 -0
  304. package/dist/src/services/handbooks/index.d.ts.map +1 -0
  305. package/dist/src/services/handbooks/index.js +15 -0
  306. package/dist/src/services/handbooks/index.js.map +1 -0
  307. package/dist/src/services/handbooks/service.d.ts +9 -0
  308. package/dist/src/services/handbooks/service.d.ts.map +1 -0
  309. package/dist/src/services/handbooks/service.js +50 -0
  310. package/dist/src/services/handbooks/service.js.map +1 -0
  311. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  312. package/dist/src/services/prompt-defaults.js +10 -7
  313. package/dist/src/services/prompt-defaults.js.map +1 -1
  314. package/dist/src/services/skill-bundle/generic-adapter.d.ts.map +1 -1
  315. package/dist/src/services/skill-bundle/generic-adapter.js +17 -3
  316. package/dist/src/services/skill-bundle/generic-adapter.js.map +1 -1
  317. package/dist/src/services/skill-bundle/hermes-adapter.d.ts.map +1 -1
  318. package/dist/src/services/skill-bundle/hermes-adapter.js +7 -3
  319. package/dist/src/services/skill-bundle/hermes-adapter.js.map +1 -1
  320. package/dist/src/storage/interface.d.ts +14 -3
  321. package/dist/src/storage/interface.d.ts.map +1 -1
  322. package/package.json +4 -2
package/dist/.env.example CHANGED
@@ -306,6 +306,10 @@ AIMEAT_STATS_ACCESS=public # public | authenticated | operator
306
306
  # ── Scoped Agent Capabilities (REQ-006) ───────────────────────
307
307
  # AIMEAT_DEFAULT_AGENT_SCOPES="memory:read,memory:write,catalogue:read"
308
308
  # AIMEAT_MAX_AGENT_SCOPES="*"
309
+ # Enforce per-agent scopes on the /v1/mcp tool surface (mirrors REST requireScope gates).
310
+ # Default true. Set false for a warn-only rollout: all tools stay registered, but tools that
311
+ # WOULD be filtered are logged so you can measure impact before enforcing.
312
+ # AIMEAT_MCP_ENFORCE_SCOPES=true
309
313
 
310
314
  # ── Prometheus Metrics ─────────────────────────────────────
311
315
  # Prometheus metrics endpoint (GET /v1/metrics)
@@ -324,6 +324,7 @@
324
324
  "domainAgent": "Agent",
325
325
  "domainCatalogue": "Catalogue",
326
326
  "domainGenerator": "Generator",
327
+ "domainTask": "Tasks",
327
328
  "permExecute": "Execute",
328
329
  "permRead": "Read",
329
330
  "permWrite": "Write",
@@ -416,8 +417,11 @@
416
417
  "newTask": "New Task",
417
418
  "createTask": "Create Task",
418
419
  "cancel": "Cancel",
419
- "titleLabel": "Title",
420
- "descLabel": "Description",
420
+ "titleLabel": "Title (optional)",
421
+ "titlePlaceholder": "Short label — leave blank to use the first line",
422
+ "descLabel": "What should the agent do?",
423
+ "descRequired": "Describe what the agent should do",
424
+ "taskCreated": "Task created and queued",
421
425
  "statusLabel": "Status",
422
426
  "draft": "Draft",
423
427
  "queued": "Queued",
@@ -433,7 +437,7 @@
433
437
  "completed": "Completed",
434
438
  "lastEvent": "Last Event",
435
439
  "delete": "Delete",
436
- "deleteConfirm": "Delete this task?",
440
+ "deleteConfirm": "Delete this task",
437
441
  "taskStarted": "Task started",
438
442
  "taskDeleted": "Task deleted",
439
443
  "startError": "Failed to start task",
@@ -446,6 +450,17 @@
446
450
  "starting": "Starting...",
447
451
  "startThisTask": "Start this task",
448
452
  "noEventsRecorded": "No events recorded",
453
+ "revision_requested": "Revision requested",
454
+ "requestChanges": "Request changes",
455
+ "requestChangesTitle": "Ask the agent to revise the plan",
456
+ "requestChangesHelp": "Tell the agent how the proposed TODO list should change. The current plan will move to the history below; the agent will read your message and propose a revised plan.",
457
+ "requestChangesPlaceholder": "e.g. Skip the second step and add a verification step at the end. Use the EU price list for the comparison.",
458
+ "requestChangesSend": "Send to agent",
459
+ "requestChangesSending": "Sending...",
460
+ "requestChangesSent": "Change request sent. Waiting for the agent to revise.",
461
+ "requestChangesError": "Failed to send change request",
462
+ "revisionWaiting": "Waiting for the agent to propose a revised plan.",
463
+ "outdatedTodos": "Previously proposed (outdated)",
449
464
  "builder": {
450
465
  "title": "New Task",
451
466
  "placeholder": "What should the agent do? Describe in plain language or technical detail.",
@@ -569,7 +584,10 @@
569
584
  "sendError": "Failed to send message",
570
585
  "inboxLabel": "inbox",
571
586
  "deliveredLabel": "delivered",
572
- "errorsLabel": "errors"
587
+ "errorsLabel": "errors",
588
+ "promptOther": "Other...",
589
+ "promptOtherHint": "Type your answer below and send it.",
590
+ "promptOtherPlaceholder": "Type your own answer..."
573
591
  },
574
592
  "webhook": {
575
593
  "title": "Webhook",
@@ -615,6 +633,7 @@
615
633
  },
616
634
  "detail": {
617
635
  "tabs": {
636
+ "readme": "README",
618
637
  "integration": "Integration",
619
638
  "tasks": "Tasks",
620
639
  "messages": "Messages",
@@ -761,7 +780,25 @@
761
780
  "addAreaError": "Failed to add memory area",
762
781
  "linkPackageError": "Failed to link knowledge package",
763
782
  "packageNamePlaceholder": "Package name or URL",
764
- "packageDescPlaceholder": "Description"
783
+ "packageDescPlaceholder": "Description",
784
+ "edit": "Edit",
785
+ "saving": "Saving...",
786
+ "valueSaved": "Value saved",
787
+ "saveValueError": "Failed to save value",
788
+ "confirmDeleteKey": "Delete memory key \"{key}\"? This cannot be undone.",
789
+ "keyDeleted": "Memory key deleted",
790
+ "deleteKeyError": "Failed to delete memory key",
791
+ "areaUpdated": "Memory area updated",
792
+ "updateAreaError": "Failed to update memory area",
793
+ "areaRemoved": "Memory area removed",
794
+ "removeAreaError": "Failed to remove memory area",
795
+ "confirmDeleteArea": "Remove this memory area from the agent?",
796
+ "addKey": "Add key",
797
+ "keyNamePlaceholder": "Key (e.g., agents.myagent.notes)",
798
+ "keyValuePlaceholder": "Value — plain text or JSON",
799
+ "noKeys": "No memory keys stored yet",
800
+ "keyCreated": "Memory key created",
801
+ "createKeyError": "Failed to create memory key"
765
802
  },
766
803
  "agent_config": {
767
804
  "copy": "Copy",
@@ -820,6 +857,7 @@
820
857
  "rules": "Rules"
821
858
  },
822
859
  "empty": {
860
+ "readme": "No README published",
823
861
  "tasks": "No tasks yet. Create a task to give this agent work.",
824
862
  "messages": "No messages yet. Send a message or use a command.",
825
863
  "data_access": "No data access configured. Use the buttons below to add tags, memory areas, or knowledge packages.",
@@ -324,6 +324,7 @@
324
324
  "domainAgent": "Agentti",
325
325
  "domainCatalogue": "Hakemisto",
326
326
  "domainGenerator": "Generaattori",
327
+ "domainTask": "Tehtävät",
327
328
  "permExecute": "Suoritus",
328
329
  "permRead": "Luku",
329
330
  "permWrite": "Kirjoitus",
@@ -416,8 +417,11 @@
416
417
  "newTask": "Uusi tehtävä",
417
418
  "createTask": "Luo tehtävä",
418
419
  "cancel": "Peruuta",
419
- "titleLabel": "Otsikko",
420
- "descLabel": "Kuvaus",
420
+ "titleLabel": "Otsikko (valinnainen)",
421
+ "titlePlaceholder": "Lyhyt nimi — jätä tyhjäksi käyttääksesi ensimmäistä riviä",
422
+ "descLabel": "Mitä agentin pitäisi tehdä?",
423
+ "descRequired": "Kuvaile mitä agentin pitäisi tehdä",
424
+ "taskCreated": "Tehtävä luotu ja lisätty jonoon",
421
425
  "statusLabel": "Tila",
422
426
  "draft": "Luonnos",
423
427
  "queued": "Jonossa",
@@ -433,7 +437,7 @@
433
437
  "completed": "Valmistunut",
434
438
  "lastEvent": "Viimeisin tapahtuma",
435
439
  "delete": "Poista",
436
- "deleteConfirm": "Poista tämä tehtävä?",
440
+ "deleteConfirm": "Poista tämä tehtävä",
437
441
  "taskStarted": "Tehtävä aloitettu",
438
442
  "taskDeleted": "Tehtävä poistettu",
439
443
  "startError": "Tehtävän aloitus epäonnistui",
@@ -446,6 +450,17 @@
446
450
  "starting": "Käynnistetään...",
447
451
  "startThisTask": "Käynnistä tehtävä",
448
452
  "noEventsRecorded": "Ei tallennettuja tapahtumia",
453
+ "revision_requested": "Korjauspyyntö lähetetty",
454
+ "requestChanges": "Pyydä muutoksia",
455
+ "requestChangesTitle": "Pyydä agenttia muokkaamaan suunnitelmaa",
456
+ "requestChangesHelp": "Kerro agentille miten ehdotettua TODO-listaa pitäisi muuttaa. Nykyinen suunnitelma siirtyy historiaan alle; agentti lukee viestisi ja ehdottaa korjattua suunnitelmaa.",
457
+ "requestChangesPlaceholder": "esim. Ohita toinen vaihe ja lisää tarkistusvaihe loppuun. Käytä EU:n hintatietoja vertailussa.",
458
+ "requestChangesSend": "Lähetä agentille",
459
+ "requestChangesSending": "Lähetetään...",
460
+ "requestChangesSent": "Muutospyyntö lähetetty. Odotetaan agentin uutta ehdotusta.",
461
+ "requestChangesError": "Muutospyynnön lähetys epäonnistui",
462
+ "revisionWaiting": "Odotetaan agentin korjattua ehdotusta.",
463
+ "outdatedTodos": "Aiemmin ehdotetut (vanhentuneet)",
449
464
  "builder": {
450
465
  "title": "Uusi tehtävä",
451
466
  "placeholder": "Mitä agentin pitäisi tehdä? Kuvaile selkokielellä tai teknisesti.",
@@ -569,7 +584,10 @@
569
584
  "sendError": "Viestin lähetys epäonnistui",
570
585
  "inboxLabel": "saapuneet",
571
586
  "deliveredLabel": "toimitettu",
572
- "errorsLabel": "virheet"
587
+ "errorsLabel": "virheet",
588
+ "promptOther": "Muu...",
589
+ "promptOtherHint": "Kirjoita vastauksesi alle ja lähetä se.",
590
+ "promptOtherPlaceholder": "Kirjoita oma vastauksesi..."
573
591
  },
574
592
  "webhook": {
575
593
  "title": "Webhook",
@@ -615,6 +633,7 @@
615
633
  },
616
634
  "detail": {
617
635
  "tabs": {
636
+ "readme": "README",
618
637
  "integration": "Integraatio",
619
638
  "tasks": "Tehtävät",
620
639
  "messages": "Viestit",
@@ -761,7 +780,25 @@
761
780
  "addAreaError": "Muistialueen lisäys epäonnistui",
762
781
  "linkPackageError": "Tietopaketin linkitys epäonnistui",
763
782
  "packageNamePlaceholder": "Paketin nimi tai URL",
764
- "packageDescPlaceholder": "Kuvaus"
783
+ "packageDescPlaceholder": "Kuvaus",
784
+ "edit": "Muokkaa",
785
+ "saving": "Tallennetaan...",
786
+ "valueSaved": "Arvo tallennettu",
787
+ "saveValueError": "Arvon tallennus epäonnistui",
788
+ "confirmDeleteKey": "Poistetaanko muistiavain \"{key}\"? Tätä ei voi perua.",
789
+ "keyDeleted": "Muistiavain poistettu",
790
+ "deleteKeyError": "Muistiavaimen poisto epäonnistui",
791
+ "areaUpdated": "Muistialue päivitetty",
792
+ "updateAreaError": "Muistialueen päivitys epäonnistui",
793
+ "areaRemoved": "Muistialue poistettu",
794
+ "removeAreaError": "Muistialueen poisto epäonnistui",
795
+ "confirmDeleteArea": "Poistetaanko tämä muistialue agentilta?",
796
+ "addKey": "Lisää avain",
797
+ "keyNamePlaceholder": "Avain (esim. agents.myagent.notes)",
798
+ "keyValuePlaceholder": "Arvo — pelkkä teksti tai JSON",
799
+ "noKeys": "Ei tallennettuja muistiavaimia vielä",
800
+ "keyCreated": "Muistiavain luotu",
801
+ "createKeyError": "Muistiavaimen luonti epäonnistui"
765
802
  },
766
803
  "agent_config": {
767
804
  "copy": "Kopioi",
@@ -820,6 +857,7 @@
820
857
  "rules": "Säännöt"
821
858
  },
822
859
  "empty": {
860
+ "readme": "Ei README:tä julkaistu",
823
861
  "tasks": "Ei tehtäviä. Luo tehtävä antaaksesi agentille työtä.",
824
862
  "messages": "Ei viestejä. Lähetä viesti tai käytä komentoa.",
825
863
  "data_access": "Ei datayhteyksien asetuksia. Lisää tunnisteita, muistialueita tai tietopaketteja alla olevilla painikkeilla.",
@@ -0,0 +1,229 @@
1
+ /**
2
+ * @file Markdown.js
3
+ * @description Minimal, safe GitHub-flavored-Markdown renderer for untrusted,
4
+ * agent-authored (often LLM-generated) content. Renders to Preact vnodes via
5
+ * `h` — never innerHTML — so there is no raw-HTML / <script> / <iframe> XSS
6
+ * surface at all (any literal HTML in the source is shown as plain text).
7
+ * Link hrefs are scheme-sanitized (only http/https/mailto pass; javascript:,
8
+ * data:, etc. are dropped to a non-navigable anchor). Fenced code blocks
9
+ * preserve whitespace exactly so ASCII-art logos keep their alignment.
10
+ *
11
+ * Supported GFM subset: headings (#..######), fenced code blocks (```),
12
+ * unordered/ordered lists, tables (pipe), blockquotes, paragraphs, and inline
13
+ * spans (code, bold, italic, links). This is presentation-only — never use
14
+ * rendered content for any trust or routing decision.
15
+ * @structure
16
+ * - Markdown ({ text }) -> vnode tree wrapped in a div.md-body
17
+ * - sanitizeHref(url) -> safe href or null
18
+ * @usage
19
+ * import { Markdown } from '/components/Markdown.js';
20
+ * html`<${Markdown} text=${someMarkdownString} />`
21
+ * @version-history
22
+ * v1.0.0 -- 2026-05-31 -- Initial creation for the agent README tab
23
+ */
24
+ import { h } from 'preact';
25
+
26
+ // Only these schemes may appear in a rendered link. Everything else (javascript:,
27
+ // data:, vbscript:, file:, etc.) is dropped — the anchor renders without href.
28
+ const SAFE_SCHEME = /^(https?:|mailto:)/i;
29
+
30
+ export function sanitizeHref(url) {
31
+ if (typeof url !== 'string') return null;
32
+ const trimmed = url.trim();
33
+ // Relative links (no scheme) and fragment/anchor links are safe.
34
+ if (!/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) return trimmed;
35
+ return SAFE_SCHEME.test(trimmed) ? trimmed : null;
36
+ }
37
+
38
+ // ── Inline parsing: code, bold, italic, links. Returns an array of vnodes/strings.
39
+ // Order matters: inline code is extracted first so markup inside it is literal.
40
+ function parseInline(text) {
41
+ const out = [];
42
+ let i = 0;
43
+ let buf = '';
44
+ const flush = () => { if (buf) { out.push(buf); buf = ''; } };
45
+
46
+ while (i < text.length) {
47
+ const c = text[i];
48
+
49
+ // Inline code `...` — contents are literal (no further parsing).
50
+ if (c === '`') {
51
+ const end = text.indexOf('`', i + 1);
52
+ if (end > i) {
53
+ flush();
54
+ out.push(h('code', { class: 'md-code' }, text.slice(i + 1, end)));
55
+ i = end + 1;
56
+ continue;
57
+ }
58
+ }
59
+
60
+ // Link [label](url)
61
+ if (c === '[') {
62
+ const close = text.indexOf(']', i + 1);
63
+ if (close > i && text[close + 1] === '(') {
64
+ const paren = text.indexOf(')', close + 2);
65
+ if (paren > close) {
66
+ const label = text.slice(i + 1, close);
67
+ const url = text.slice(close + 2, paren);
68
+ const href = sanitizeHref(url);
69
+ flush();
70
+ out.push(
71
+ href
72
+ ? h('a', { href, target: '_blank', rel: 'noopener noreferrer nofollow' }, parseInline(label))
73
+ : h('span', null, parseInline(label)),
74
+ );
75
+ i = paren + 1;
76
+ continue;
77
+ }
78
+ }
79
+ }
80
+
81
+ // Bold **...**
82
+ if (c === '*' && text[i + 1] === '*') {
83
+ const end = text.indexOf('**', i + 2);
84
+ if (end > i) {
85
+ flush();
86
+ out.push(h('strong', null, parseInline(text.slice(i + 2, end))));
87
+ i = end + 2;
88
+ continue;
89
+ }
90
+ }
91
+
92
+ // Italic *...* (single asterisk, not part of **)
93
+ if (c === '*') {
94
+ const end = text.indexOf('*', i + 1);
95
+ if (end > i) {
96
+ flush();
97
+ out.push(h('em', null, parseInline(text.slice(i + 1, end))));
98
+ i = end + 1;
99
+ continue;
100
+ }
101
+ }
102
+
103
+ buf += c;
104
+ i++;
105
+ }
106
+ flush();
107
+ return out;
108
+ }
109
+
110
+ function parseTableRow(line) {
111
+ // Split on unescaped pipes, dropping the leading/trailing empties.
112
+ let cells = line.trim().split('|');
113
+ if (cells.length && cells[0] === '') cells = cells.slice(1);
114
+ if (cells.length && cells[cells.length - 1] === '') cells = cells.slice(0, -1);
115
+ return cells.map(c => c.trim());
116
+ }
117
+
118
+ function isTableDivider(line) {
119
+ // e.g. | --- | :--: | ---: |
120
+ return /^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)*\|?\s*$/.test(line);
121
+ }
122
+
123
+ // ── Block parsing. Walks lines, emits block-level vnodes.
124
+ function parseBlocks(src) {
125
+ const lines = src.replace(/\r\n?/g, '\n').split('\n');
126
+ const blocks = [];
127
+ let i = 0;
128
+
129
+ while (i < lines.length) {
130
+ const line = lines[i];
131
+
132
+ // Blank line — skip.
133
+ if (line.trim() === '') { i++; continue; }
134
+
135
+ // Fenced code block ``` (preserve whitespace EXACTLY; no inline parsing).
136
+ const fence = line.match(/^\s*(`{3,}|~{3,})(.*)$/);
137
+ if (fence) {
138
+ const marker = fence[1][0];
139
+ const codeLines = [];
140
+ i++;
141
+ while (i < lines.length && !new RegExp('^\\s*' + marker + '{3,}\\s*$').test(lines[i])) {
142
+ codeLines.push(lines[i]);
143
+ i++;
144
+ }
145
+ i++; // consume closing fence (or EOF)
146
+ blocks.push(h('pre', { class: 'md-pre' }, h('code', { class: 'md-code' }, codeLines.join('\n'))));
147
+ continue;
148
+ }
149
+
150
+ // Heading
151
+ const heading = line.match(/^(#{1,6})\s+(.*)$/);
152
+ if (heading) {
153
+ const level = heading[1].length;
154
+ blocks.push(h('h' + level, null, parseInline(heading[2].trim())));
155
+ i++;
156
+ continue;
157
+ }
158
+
159
+ // Blockquote (collect consecutive > lines)
160
+ if (/^\s*>/.test(line)) {
161
+ const quoted = [];
162
+ while (i < lines.length && /^\s*>/.test(lines[i])) {
163
+ quoted.push(lines[i].replace(/^\s*>\s?/, ''));
164
+ i++;
165
+ }
166
+ blocks.push(h('blockquote', null, parseBlocks(quoted.join('\n'))));
167
+ continue;
168
+ }
169
+
170
+ // Table: a header row followed by a divider row.
171
+ if (line.includes('|') && i + 1 < lines.length && isTableDivider(lines[i + 1])) {
172
+ const header = parseTableRow(line);
173
+ i += 2; // skip header + divider
174
+ const rows = [];
175
+ while (i < lines.length && lines[i].includes('|') && lines[i].trim() !== '') {
176
+ rows.push(parseTableRow(lines[i]));
177
+ i++;
178
+ }
179
+ blocks.push(h('table', null, [
180
+ h('thead', null, h('tr', null, header.map((c, ci) => h('th', { key: ci }, parseInline(c))))),
181
+ h('tbody', null, rows.map((r, ri) =>
182
+ h('tr', { key: ri }, r.map((c, ci) => h('td', { key: ci }, parseInline(c)))))),
183
+ ]));
184
+ continue;
185
+ }
186
+
187
+ // Lists (unordered - / * / +, or ordered 1.)
188
+ const ulMatch = line.match(/^(\s*)([-*+])\s+(.*)$/);
189
+ const olMatch = line.match(/^(\s*)(\d+)\.\s+(.*)$/);
190
+ if (ulMatch || olMatch) {
191
+ const ordered = !!olMatch;
192
+ const items = [];
193
+ while (i < lines.length) {
194
+ const m = lines[i].match(ordered ? /^(\s*)(\d+)\.\s+(.*)$/ : /^(\s*)([-*+])\s+(.*)$/);
195
+ if (!m) break;
196
+ items.push(h('li', { key: items.length }, parseInline(m[3])));
197
+ i++;
198
+ }
199
+ blocks.push(h(ordered ? 'ol' : 'ul', null, items));
200
+ continue;
201
+ }
202
+
203
+ // Paragraph: collect consecutive non-blank, non-block lines.
204
+ const para = [];
205
+ while (
206
+ i < lines.length &&
207
+ lines[i].trim() !== '' &&
208
+ !/^\s*(`{3,}|~{3,})/.test(lines[i]) &&
209
+ !/^#{1,6}\s/.test(lines[i]) &&
210
+ !/^\s*>/.test(lines[i]) &&
211
+ !/^(\s*)([-*+])\s+/.test(lines[i]) &&
212
+ !/^(\s*)(\d+)\.\s+/.test(lines[i])
213
+ ) {
214
+ para.push(lines[i]);
215
+ i++;
216
+ }
217
+ // Join wrapped lines with a space (standard markdown paragraph behavior).
218
+ blocks.push(h('p', null, parseInline(para.join(' '))));
219
+ }
220
+
221
+ return blocks;
222
+ }
223
+
224
+ export function Markdown({ text }) {
225
+ const src = typeof text === 'string' ? text : '';
226
+ return h('div', { class: 'md-body' }, parseBlocks(src));
227
+ }
228
+
229
+ export default Markdown;