aimeat 1.7.0 → 1.9.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 (261) hide show
  1. package/dist/.env.example +4 -1
  2. package/dist/locales/en.json +573 -10
  3. package/dist/locales/fi.json +572 -9
  4. package/dist/public/css/views/admin-agent-integration.css +304 -0
  5. package/dist/public/css/views/agents-detail.css +1697 -120
  6. package/dist/public/css/views/profile.css +22 -2
  7. package/dist/public/css/views/public-knowledge-viewer.css +479 -0
  8. package/dist/public/js/i18n.js +9 -3
  9. package/dist/public/js/services/admin-agent-integration.js +52 -0
  10. package/dist/public/js/services/agent-integration.js +80 -0
  11. package/dist/public/js/services/agent-messages.js +3 -1
  12. package/dist/public/js/services/generator-spec-validate.js +23 -0
  13. package/dist/public/js/services/memory.js +39 -0
  14. package/dist/public/lib/live-updates.js +9 -4
  15. package/dist/public/llms-template.txt +106 -0
  16. package/dist/public/spa.html +7 -2
  17. package/dist/public/views/admin/agent-integration-tab.js +390 -0
  18. package/dist/public/views/admin/federation-tab.js +5 -5
  19. package/dist/public/views/admin/prompts-tab.js +9 -10
  20. package/dist/public/views/admin.js +2 -0
  21. package/dist/public/views/profile/access-tab.js +18 -0
  22. package/dist/public/views/profile/agents/agent-card.js +396 -0
  23. package/dist/public/views/profile/agents/shared-board.js +97 -0
  24. package/dist/public/views/profile/agents/state-detector.js +62 -0
  25. package/dist/public/views/profile/agents/tab-activity.js +232 -0
  26. package/dist/public/views/profile/agents/tab-agent-config.js +199 -0
  27. package/dist/public/views/profile/agents/tab-data-access.js +304 -0
  28. package/dist/public/views/profile/agents/tab-directives.js +178 -0
  29. package/dist/public/views/profile/agents/tab-integration.js +505 -0
  30. package/dist/public/views/profile/agents/tab-messages.js +278 -0
  31. package/dist/public/views/profile/agents/tab-services.js +17 -0
  32. package/dist/public/views/profile/agents/tab-tasks.js +17 -0
  33. package/dist/public/views/profile/agents-messages-subtab.js +12 -10
  34. package/dist/public/views/profile/agents-services-subtab.js +17 -11
  35. package/dist/public/views/profile/agents-tab.js +159 -255
  36. package/dist/public/views/profile/agents-task-builder.js +403 -0
  37. package/dist/public/views/profile/agents-tasks-subtab.js +186 -140
  38. package/dist/public/views/profile/generator-detail.js +8 -1
  39. package/dist/public/views/profile/memory-tab.js +371 -7
  40. package/dist/public/views/profile/wallet-tab.js +14 -0
  41. package/dist/public/views/public-knowledge-viewer.js +650 -0
  42. package/dist/src/auth/middleware.d.ts.map +1 -1
  43. package/dist/src/auth/middleware.js +17 -0
  44. package/dist/src/auth/middleware.js.map +1 -1
  45. package/dist/src/config.d.ts +1 -0
  46. package/dist/src/config.d.ts.map +1 -1
  47. package/dist/src/config.js +1 -0
  48. package/dist/src/config.js.map +1 -1
  49. package/dist/src/middleware/readiness-gate.d.ts +18 -0
  50. package/dist/src/middleware/readiness-gate.d.ts.map +1 -0
  51. package/dist/src/middleware/readiness-gate.js +50 -0
  52. package/dist/src/middleware/readiness-gate.js.map +1 -0
  53. package/dist/src/models/agent-capabilities-schemas.d.ts +3 -0
  54. package/dist/src/models/agent-capabilities-schemas.d.ts.map +1 -1
  55. package/dist/src/models/agent-capabilities-schemas.js +3 -0
  56. package/dist/src/models/agent-capabilities-schemas.js.map +1 -1
  57. package/dist/src/models/agent-directives-schemas.d.ts +12 -0
  58. package/dist/src/models/agent-directives-schemas.d.ts.map +1 -1
  59. package/dist/src/models/agent-directives-schemas.js +7 -0
  60. package/dist/src/models/agent-directives-schemas.js.map +1 -1
  61. package/dist/src/models/agent-onboarding-schemas.d.ts +45 -0
  62. package/dist/src/models/agent-onboarding-schemas.d.ts.map +1 -0
  63. package/dist/src/models/agent-onboarding-schemas.js +91 -0
  64. package/dist/src/models/agent-onboarding-schemas.js.map +1 -0
  65. package/dist/src/models/webhook-schemas.d.ts +266 -0
  66. package/dist/src/models/webhook-schemas.d.ts.map +1 -0
  67. package/dist/src/models/webhook-schemas.js +137 -0
  68. package/dist/src/models/webhook-schemas.js.map +1 -0
  69. package/dist/src/routes/admin-agent-integration.d.ts +24 -0
  70. package/dist/src/routes/admin-agent-integration.d.ts.map +1 -0
  71. package/dist/src/routes/admin-agent-integration.js +186 -0
  72. package/dist/src/routes/admin-agent-integration.js.map +1 -0
  73. package/dist/src/routes/admin-monitoring.js +12 -7
  74. package/dist/src/routes/admin-monitoring.js.map +1 -1
  75. package/dist/src/routes/agent-activity.d.ts.map +1 -1
  76. package/dist/src/routes/agent-activity.js +17 -0
  77. package/dist/src/routes/agent-activity.js.map +1 -1
  78. package/dist/src/routes/agent-capabilities.d.ts +1 -0
  79. package/dist/src/routes/agent-capabilities.d.ts.map +1 -1
  80. package/dist/src/routes/agent-capabilities.js +9 -0
  81. package/dist/src/routes/agent-capabilities.js.map +1 -1
  82. package/dist/src/routes/agent-directives.d.ts +5 -1
  83. package/dist/src/routes/agent-directives.d.ts.map +1 -1
  84. package/dist/src/routes/agent-directives.js +74 -20
  85. package/dist/src/routes/agent-directives.js.map +1 -1
  86. package/dist/src/routes/agent-integration.d.ts +1 -0
  87. package/dist/src/routes/agent-integration.d.ts.map +1 -1
  88. package/dist/src/routes/agent-integration.js +128 -11
  89. package/dist/src/routes/agent-integration.js.map +1 -1
  90. package/dist/src/routes/agent-messages.d.ts +5 -1
  91. package/dist/src/routes/agent-messages.d.ts.map +1 -1
  92. package/dist/src/routes/agent-messages.js +20 -1
  93. package/dist/src/routes/agent-messages.js.map +1 -1
  94. package/dist/src/routes/agent-onboarding.d.ts +23 -0
  95. package/dist/src/routes/agent-onboarding.d.ts.map +1 -0
  96. package/dist/src/routes/agent-onboarding.js +374 -0
  97. package/dist/src/routes/agent-onboarding.js.map +1 -0
  98. package/dist/src/routes/agent-skill-bundle.d.ts +16 -0
  99. package/dist/src/routes/agent-skill-bundle.d.ts.map +1 -0
  100. package/dist/src/routes/agent-skill-bundle.js +133 -0
  101. package/dist/src/routes/agent-skill-bundle.js.map +1 -0
  102. package/dist/src/routes/agent-tasks.d.ts +8 -1
  103. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  104. package/dist/src/routes/agent-tasks.js +192 -14
  105. package/dist/src/routes/agent-tasks.js.map +1 -1
  106. package/dist/src/routes/agent-telemetry.d.ts +15 -0
  107. package/dist/src/routes/agent-telemetry.d.ts.map +1 -0
  108. package/dist/src/routes/agent-telemetry.js +99 -0
  109. package/dist/src/routes/agent-telemetry.js.map +1 -0
  110. package/dist/src/routes/agent-webhook.d.ts +18 -0
  111. package/dist/src/routes/agent-webhook.d.ts.map +1 -0
  112. package/dist/src/routes/agent-webhook.js +243 -0
  113. package/dist/src/routes/agent-webhook.js.map +1 -0
  114. package/dist/src/routes/agents.d.ts.map +1 -1
  115. package/dist/src/routes/agents.js +203 -4
  116. package/dist/src/routes/agents.js.map +1 -1
  117. package/dist/src/routes/auth.d.ts.map +1 -1
  118. package/dist/src/routes/auth.js +45 -2
  119. package/dist/src/routes/auth.js.map +1 -1
  120. package/dist/src/routes/federation-auth.d.ts.map +1 -1
  121. package/dist/src/routes/federation-auth.js +3 -1
  122. package/dist/src/routes/federation-auth.js.map +1 -1
  123. package/dist/src/routes/federation-peer.d.ts.map +1 -1
  124. package/dist/src/routes/federation-peer.js +11 -2
  125. package/dist/src/routes/federation-peer.js.map +1 -1
  126. package/dist/src/routes/federation-sync.d.ts +1 -0
  127. package/dist/src/routes/federation-sync.d.ts.map +1 -1
  128. package/dist/src/routes/federation-sync.js +29 -0
  129. package/dist/src/routes/federation-sync.js.map +1 -1
  130. package/dist/src/routes/ghii.d.ts.map +1 -1
  131. package/dist/src/routes/ghii.js +42 -5
  132. package/dist/src/routes/ghii.js.map +1 -1
  133. package/dist/src/routes/knowledge.d.ts.map +1 -1
  134. package/dist/src/routes/knowledge.js +19 -7
  135. package/dist/src/routes/knowledge.js.map +1 -1
  136. package/dist/src/routes/memory.d.ts +9 -0
  137. package/dist/src/routes/memory.d.ts.map +1 -1
  138. package/dist/src/routes/memory.js +307 -12
  139. package/dist/src/routes/memory.js.map +1 -1
  140. package/dist/src/routes/portal.d.ts.map +1 -1
  141. package/dist/src/routes/portal.js +1 -0
  142. package/dist/src/routes/portal.js.map +1 -1
  143. package/dist/src/routes/prompts.d.ts +1 -0
  144. package/dist/src/routes/prompts.d.ts.map +1 -1
  145. package/dist/src/routes/prompts.js +40 -1
  146. package/dist/src/routes/prompts.js.map +1 -1
  147. package/dist/src/routes/sharing-groups.d.ts.map +1 -1
  148. package/dist/src/routes/sharing-groups.js +8 -2
  149. package/dist/src/routes/sharing-groups.js.map +1 -1
  150. package/dist/src/routes/wallet.d.ts.map +1 -1
  151. package/dist/src/routes/wallet.js +2 -0
  152. package/dist/src/routes/wallet.js.map +1 -1
  153. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  154. package/dist/src/server-bootstrap/routes-loader.js +47 -3
  155. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  156. package/dist/src/services/config-schema.d.ts.map +1 -1
  157. package/dist/src/services/config-schema.js +2 -1
  158. package/dist/src/services/config-schema.js.map +1 -1
  159. package/dist/src/services/core-jobs.d.ts.map +1 -1
  160. package/dist/src/services/core-jobs.js +3 -2
  161. package/dist/src/services/core-jobs.js.map +1 -1
  162. package/dist/src/services/federation-helpers.d.ts +1 -0
  163. package/dist/src/services/federation-helpers.d.ts.map +1 -1
  164. package/dist/src/services/federation-helpers.js +1 -1
  165. package/dist/src/services/federation-helpers.js.map +1 -1
  166. package/dist/src/services/generator-autopilot.d.ts.map +1 -1
  167. package/dist/src/services/generator-autopilot.js +125 -26
  168. package/dist/src/services/generator-autopilot.js.map +1 -1
  169. package/dist/src/services/generator-prompts/index.d.ts +1 -1
  170. package/dist/src/services/generator-prompts/index.d.ts.map +1 -1
  171. package/dist/src/services/generator-prompts/index.js +1 -1
  172. package/dist/src/services/generator-prompts/index.js.map +1 -1
  173. package/dist/src/services/generator-prompts/spec-validate.d.ts +1 -0
  174. package/dist/src/services/generator-prompts/spec-validate.d.ts.map +1 -1
  175. package/dist/src/services/generator-prompts/spec-validate.js +20 -0
  176. package/dist/src/services/generator-prompts/spec-validate.js.map +1 -1
  177. package/dist/src/services/generator-prompts/validate.d.ts +7 -1
  178. package/dist/src/services/generator-prompts/validate.d.ts.map +1 -1
  179. package/dist/src/services/generator-prompts/validate.js +70 -0
  180. package/dist/src/services/generator-prompts/validate.js.map +1 -1
  181. package/dist/src/services/onboarding-validator.d.ts +22 -0
  182. package/dist/src/services/onboarding-validator.d.ts.map +1 -0
  183. package/dist/src/services/onboarding-validator.js +202 -0
  184. package/dist/src/services/onboarding-validator.js.map +1 -0
  185. package/dist/src/services/platform-detector.d.ts +27 -0
  186. package/dist/src/services/platform-detector.d.ts.map +1 -0
  187. package/dist/src/services/platform-detector.js +73 -0
  188. package/dist/src/services/platform-detector.js.map +1 -0
  189. package/dist/src/services/prompt-defaults.d.ts +1 -0
  190. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  191. package/dist/src/services/prompt-defaults.js +875 -47
  192. package/dist/src/services/prompt-defaults.js.map +1 -1
  193. package/dist/src/services/prompt-seeder.js +1 -1
  194. package/dist/src/services/prompt-seeder.js.map +1 -1
  195. package/dist/src/services/readiness-scorer.d.ts +34 -0
  196. package/dist/src/services/readiness-scorer.d.ts.map +1 -0
  197. package/dist/src/services/readiness-scorer.js +87 -0
  198. package/dist/src/services/readiness-scorer.js.map +1 -0
  199. package/dist/src/services/skill-bundle/generator.d.ts +17 -0
  200. package/dist/src/services/skill-bundle/generator.d.ts.map +1 -0
  201. package/dist/src/services/skill-bundle/generator.js +387 -0
  202. package/dist/src/services/skill-bundle/generator.js.map +1 -0
  203. package/dist/src/services/skill-bundle/generic-adapter.d.ts +16 -0
  204. package/dist/src/services/skill-bundle/generic-adapter.d.ts.map +1 -0
  205. package/dist/src/services/skill-bundle/generic-adapter.js +96 -0
  206. package/dist/src/services/skill-bundle/generic-adapter.js.map +1 -0
  207. package/dist/src/services/skill-bundle/hermes-adapter.d.ts +25 -0
  208. package/dist/src/services/skill-bundle/hermes-adapter.d.ts.map +1 -0
  209. package/dist/src/services/skill-bundle/hermes-adapter.js +302 -0
  210. package/dist/src/services/skill-bundle/hermes-adapter.js.map +1 -0
  211. package/dist/src/services/skill-bundle/types.d.ts +54 -0
  212. package/dist/src/services/skill-bundle/types.d.ts.map +1 -0
  213. package/dist/src/services/skill-bundle/types.js +8 -0
  214. package/dist/src/services/skill-bundle/types.js.map +1 -0
  215. package/dist/src/services/task-stall-detector.d.ts +10 -2
  216. package/dist/src/services/task-stall-detector.d.ts.map +1 -1
  217. package/dist/src/services/task-stall-detector.js +34 -5
  218. package/dist/src/services/task-stall-detector.js.map +1 -1
  219. package/dist/src/services/webhook-dispatcher.d.ts +71 -0
  220. package/dist/src/services/webhook-dispatcher.d.ts.map +1 -0
  221. package/dist/src/services/webhook-dispatcher.js +259 -0
  222. package/dist/src/services/webhook-dispatcher.js.map +1 -0
  223. package/dist/src/storage/interface.d.ts +82 -2
  224. package/dist/src/storage/interface.d.ts.map +1 -1
  225. package/dist/src/storage/providers/mongodb/index.d.ts +20 -1
  226. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  227. package/dist/src/storage/providers/mongodb/index.js +254 -3
  228. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  229. package/dist/src/storage/providers/sqlite/index.d.ts +18 -1
  230. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  231. package/dist/src/storage/providers/sqlite/index.js +173 -4
  232. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  233. package/dist/src/storage/providers/sqlite/repos/agent-directives.d.ts.map +1 -1
  234. package/dist/src/storage/providers/sqlite/repos/agent-directives.js +8 -4
  235. package/dist/src/storage/providers/sqlite/repos/agent-directives.js.map +1 -1
  236. package/dist/src/storage/providers/sqlite/repos/agent.d.ts.map +1 -1
  237. package/dist/src/storage/providers/sqlite/repos/agent.js +25 -4
  238. package/dist/src/storage/providers/sqlite/repos/agent.js.map +1 -1
  239. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  240. package/dist/src/storage/providers/sqlite/schema.js +73 -1
  241. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  242. package/dist/src/storage/repositories/agent-onboarding.repository.d.ts +16 -0
  243. package/dist/src/storage/repositories/agent-onboarding.repository.d.ts.map +1 -0
  244. package/dist/src/storage/repositories/agent-onboarding.repository.js +8 -0
  245. package/dist/src/storage/repositories/agent-onboarding.repository.js.map +1 -0
  246. package/dist/src/storage/repositories/agent-webhook.repository.d.ts +21 -0
  247. package/dist/src/storage/repositories/agent-webhook.repository.d.ts.map +1 -0
  248. package/dist/src/storage/repositories/agent-webhook.repository.js +2 -0
  249. package/dist/src/storage/repositories/agent-webhook.repository.js.map +1 -0
  250. package/dist/src/storage/repositories/agent.repository.d.ts +1 -0
  251. package/dist/src/storage/repositories/agent.repository.d.ts.map +1 -1
  252. package/dist/src/storage/repositories/index.d.ts +2 -0
  253. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  254. package/dist/src/utils/env-config.d.ts.map +1 -1
  255. package/dist/src/utils/env-config.js +7 -1
  256. package/dist/src/utils/env-config.js.map +1 -1
  257. package/dist/src/utils/url-validator.d.ts.map +1 -1
  258. package/dist/src/utils/url-validator.js +3 -0
  259. package/dist/src/utils/url-validator.js.map +1 -1
  260. package/package.json +1 -1
  261. package/prisma/schema.prisma +67 -7
@@ -0,0 +1,374 @@
1
+ /**
2
+ * @file agent-onboarding.ts
3
+ * @description REST endpoints for Hello Integration onboarding process.
4
+ * Agents confirm steps, owners view status and manage onboarding.
5
+ * @structure
6
+ * - GET /v1/agents/:name/onboarding -- Get onboarding status
7
+ * - POST /v1/agents/:name/onboarding/start -- Start/reset onboarding
8
+ * - POST /v1/agents/:name/onboarding/step/:id -- Agent confirms a step
9
+ * - PUT /v1/agents/:name/onboarding/override -- Set readiness override
10
+ * - DELETE /v1/agents/:name/onboarding/override -- Clear readiness override
11
+ * - DELETE /v1/agents/:name/onboarding -- Cancel onboarding
12
+ * @version-history
13
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase B
14
+ * v1.1.0 -- 2026-05-24 -- Add readiness override + auto-complete on step confirm
15
+ */
16
+ import { Router } from 'express';
17
+ import { randomUUID } from 'node:crypto';
18
+ import { success, error } from '../middleware/envelope.js';
19
+ import { requireAuth, requireRole } from '../auth/middleware.js';
20
+ import { buildGAII } from '../utils/gaii.js';
21
+ import { emitChange } from '../services/event-bus.js';
22
+ import { emitResourceUpdated } from '../mcp/index.js';
23
+ import { createDefaultSteps, ONBOARDING_STEP_IDS, STEP_SCHEMAS } from '../models/agent-onboarding-schemas.js';
24
+ import { validateStep, checkAutoSteps } from '../services/onboarding-validator.js';
25
+ import { calculateReadiness } from '../services/readiness-scorer.js';
26
+ import { detectPlatform } from '../services/platform-detector.js';
27
+ import { createT, detectLocale } from '../i18n.js';
28
+ export function agentOnboardingRouter(config, storage, webhookDispatcher) {
29
+ const router = Router();
30
+ function t(req, key, vars) {
31
+ const locale = detectLocale(req.headers['accept-language']);
32
+ return createT(locale)(key, vars);
33
+ }
34
+ function resolveAgentGaii(req, agentName) {
35
+ const owner = req.auth.owner;
36
+ return buildGAII(agentName, owner, config.nodeId);
37
+ }
38
+ function canAccessAgent(req, agentName) {
39
+ const isOwnerSession = req.auth.roles.includes('owner') && !req.auth.roles.includes('agent');
40
+ if (isOwnerSession)
41
+ return true;
42
+ const expectedGaii = resolveAgentGaii(req, agentName);
43
+ return req.auth.sub === expectedGaii;
44
+ }
45
+ /* -- GET /v1/agents/:name/onboarding -- */
46
+ router.get('/v1/agents/:name/onboarding', requireAuth(), async (req, res) => {
47
+ const agentName = req.params.name;
48
+ if (!canAccessAgent(req, agentName)) {
49
+ res.status(403).json(error(config.nodeId, 'FORBIDDEN', t(req, 'agentOnboarding.errors.accessDenied')));
50
+ return;
51
+ }
52
+ const agentGaii = resolveAgentGaii(req, agentName);
53
+ const agent = await storage.getAgent(agentGaii);
54
+ if (!agent) {
55
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', t(req, 'agentOnboarding.errors.agentNotFound', { name: agentName })));
56
+ return;
57
+ }
58
+ let onboarding = await storage.getOnboarding(agentGaii);
59
+ if (!onboarding) {
60
+ res.json(success(config.nodeId, { onboarding: null, status: 'not_started' }));
61
+ return;
62
+ }
63
+ if (onboarding.status === 'in_progress') {
64
+ const updatedSteps = await checkAutoSteps(agentGaii, onboarding, storage);
65
+ const allRequiredPassed = updatedSteps.filter(s => s.required).every(s => s.status === 'passed');
66
+ if (allRequiredPassed) {
67
+ const readiness = await calculateReadiness(agentGaii, updatedSteps, storage, onboarding.readinessOverride);
68
+ onboarding = (await storage.updateOnboarding(agentGaii, {
69
+ steps: updatedSteps,
70
+ status: 'completed',
71
+ completedAt: new Date().toISOString(),
72
+ readinessScore: readiness.effectiveScore,
73
+ readinessLevel: readiness.level,
74
+ onboardingBaseline: readiness.baseline,
75
+ operationalHealth: readiness.health,
76
+ healthComponents: readiness.healthComponents,
77
+ healthRecalculatedAt: new Date().toISOString(),
78
+ }));
79
+ emitChange('agent-onboarding');
80
+ try {
81
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
82
+ }
83
+ catch { /* MCP not connected */ }
84
+ }
85
+ else {
86
+ onboarding = (await storage.updateOnboarding(agentGaii, { steps: updatedSteps }));
87
+ }
88
+ }
89
+ const pendingSteps = onboarding.steps.filter(s => s.status === 'pending');
90
+ const testTaskStep = onboarding.steps.find(s => s.id === 'accept_test_task');
91
+ const testTaskId = testTaskStep?.details?.testTaskId;
92
+ let testTaskStatus;
93
+ if (testTaskId) {
94
+ const task = await storage.getAgentTask(testTaskId);
95
+ testTaskStatus = task?.status;
96
+ }
97
+ const hints = {};
98
+ if (testTaskStatus === 'active') {
99
+ hints.test_task_active = true;
100
+ hints.test_task_id = testTaskId;
101
+ hints.message = 'Your test task is active. Execute the todos and POST /complete to finish steps 9-10.';
102
+ }
103
+ else if (testTaskStatus === 'queued' && testTaskStep?.status === 'pending') {
104
+ hints.message = 'Propose todos on your test task (PATCH /v1/agents/me/tasks/' + testTaskId + ') to proceed with step 9.';
105
+ hints.test_task_id = testTaskId;
106
+ }
107
+ if (pendingSteps.length > 0) {
108
+ hints.next_step = pendingSteps[0].id;
109
+ }
110
+ res.json(success(config.nodeId, { onboarding, hints }));
111
+ });
112
+ /* -- POST /v1/agents/:name/onboarding/start -- */
113
+ router.post('/v1/agents/:name/onboarding/start', requireAuth(), requireRole('owner'), async (req, res) => {
114
+ const agentName = req.params.name;
115
+ const agentGaii = resolveAgentGaii(req, agentName);
116
+ const agent = await storage.getAgent(agentGaii);
117
+ if (!agent) {
118
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', t(req, 'agentOnboarding.errors.agentNotFound', { name: agentName })));
119
+ return;
120
+ }
121
+ const steps = createDefaultSteps();
122
+ steps[0].status = 'passed';
123
+ steps[0].validatedAt = new Date().toISOString();
124
+ steps[0].validationMethod = 'automatic';
125
+ steps[0].details = { createdAt: agent.createdAt };
126
+ const userAgent = req.headers['user-agent'];
127
+ const detected = detectPlatform(userAgent);
128
+ if (detected) {
129
+ steps[1].status = 'passed';
130
+ steps[1].validatedAt = new Date().toISOString();
131
+ steps[1].validationMethod = 'automatic';
132
+ steps[1].details = { platform: detected.id, version: detected.version };
133
+ await storage.updateAgent(agentGaii, {
134
+ platform: detected.id,
135
+ platformVersion: detected.version,
136
+ platformDetectedBy: detected.detectedBy,
137
+ });
138
+ }
139
+ const testTaskId = randomUUID();
140
+ const testTask = {
141
+ id: testTaskId,
142
+ agentGaii,
143
+ ownerGaii: `${req.auth.owner}@${config.nodeId}`,
144
+ title: t(req, 'agentOnboarding.errors.testTaskTitle'),
145
+ description: t(req, 'agentOnboarding.errors.testTaskDescription'),
146
+ status: 'queued',
147
+ scope: [],
148
+ rules: [],
149
+ todos: [],
150
+ verification: {
151
+ userExpects: 'Agent completes the onboarding test task successfully',
152
+ technicalChecks: [],
153
+ },
154
+ createdAt: new Date().toISOString(),
155
+ updatedAt: new Date().toISOString(),
156
+ };
157
+ await storage.createAgentTask(testTask);
158
+ steps[8].details = { testTaskId };
159
+ const existing = await storage.getOnboarding(agentGaii);
160
+ const now = new Date().toISOString();
161
+ let onboarding;
162
+ if (existing) {
163
+ onboarding = await storage.updateOnboarding(agentGaii, {
164
+ status: 'in_progress',
165
+ startedAt: now,
166
+ completedAt: undefined,
167
+ steps,
168
+ readinessScore: undefined,
169
+ readinessLevel: undefined,
170
+ detectedPlatform: detected?.id,
171
+ });
172
+ }
173
+ else {
174
+ onboarding = await storage.createOnboarding({
175
+ agentGaii,
176
+ status: 'in_progress',
177
+ startedAt: now,
178
+ steps,
179
+ detectedPlatform: detected?.id,
180
+ });
181
+ }
182
+ emitChange('agent-onboarding');
183
+ try {
184
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
185
+ }
186
+ catch { /* MCP not connected */ }
187
+ res.json(success(config.nodeId, { onboarding }, [
188
+ { description: 'Check onboarding status', method: 'GET', url: `/v1/agents/${agentName}/onboarding` },
189
+ ]));
190
+ });
191
+ /* -- POST /v1/agents/:name/onboarding/step/:id -- */
192
+ router.post('/v1/agents/:name/onboarding/step/:id', requireAuth(), async (req, res) => {
193
+ const agentName = req.params.name;
194
+ const stepId = req.params.id;
195
+ if (!canAccessAgent(req, agentName)) {
196
+ res.status(403).json(error(config.nodeId, 'FORBIDDEN', t(req, 'agentOnboarding.errors.accessDenied')));
197
+ return;
198
+ }
199
+ if (!ONBOARDING_STEP_IDS.includes(stepId)) {
200
+ res.status(400).json(error(config.nodeId, 'INVALID_STEP', t(req, 'agentOnboarding.errors.unknownStep', { stepId })));
201
+ return;
202
+ }
203
+ const agentGaii = resolveAgentGaii(req, agentName);
204
+ const onboarding = await storage.getOnboarding(agentGaii);
205
+ if (!onboarding || onboarding.status !== 'in_progress') {
206
+ res.status(400).json(error(config.nodeId, 'ONBOARDING_NOT_ACTIVE', t(req, 'agentOnboarding.errors.onboardingNotActive')));
207
+ return;
208
+ }
209
+ const step = onboarding.steps.find(s => s.id === stepId);
210
+ if (!step) {
211
+ res.status(400).json(error(config.nodeId, 'INVALID_STEP', t(req, 'agentOnboarding.errors.stepNotFound', { stepId })));
212
+ return;
213
+ }
214
+ if (step.status === 'passed') {
215
+ res.json(success(config.nodeId, { step, message: t(req, 'agentOnboarding.errors.stepAlreadyPassed') }));
216
+ return;
217
+ }
218
+ const schema = STEP_SCHEMAS[stepId];
219
+ if (schema) {
220
+ const parsed = schema.safeParse(req.body);
221
+ if (!parsed.success) {
222
+ res.status(400).json(error(config.nodeId, 'VALIDATION_ERROR', parsed.error.message));
223
+ return;
224
+ }
225
+ }
226
+ const result = await validateStep(stepId, agentGaii, storage, req.body);
227
+ if (result.passed) {
228
+ step.status = 'passed';
229
+ step.validatedAt = new Date().toISOString();
230
+ step.validationMethod = result.validationMethod;
231
+ step.details = { ...step.details, ...result.details };
232
+ if (stepId === 'identify_platform' && req.body?.platform) {
233
+ await storage.updateAgent(agentGaii, {
234
+ platform: req.body.platform,
235
+ platformVersion: req.body.platform_version,
236
+ platformDetectedBy: 'self_report',
237
+ });
238
+ onboarding.detectedPlatform = req.body.platform;
239
+ }
240
+ if (stepId === 'install_skill' && req.body?.platform) {
241
+ onboarding.installedRuntime = req.body.platform;
242
+ }
243
+ }
244
+ else {
245
+ step.status = 'failed';
246
+ step.failureReason = result.failureReason;
247
+ }
248
+ // Check if all required steps are now passed -> auto-complete
249
+ const allRequiredPassed = onboarding.steps.filter(s => s.required).every(s => s.status === 'passed');
250
+ let completedOnboarding = null;
251
+ if (result.passed && allRequiredPassed) {
252
+ const readiness = await calculateReadiness(agentGaii, onboarding.steps, storage, onboarding.readinessOverride);
253
+ completedOnboarding = await storage.updateOnboarding(agentGaii, {
254
+ steps: onboarding.steps,
255
+ status: 'completed',
256
+ completedAt: new Date().toISOString(),
257
+ readinessScore: readiness.effectiveScore,
258
+ readinessLevel: readiness.level,
259
+ onboardingBaseline: readiness.baseline,
260
+ operationalHealth: readiness.health,
261
+ healthComponents: readiness.healthComponents,
262
+ healthRecalculatedAt: new Date().toISOString(),
263
+ detectedPlatform: onboarding.detectedPlatform,
264
+ installedRuntime: onboarding.installedRuntime,
265
+ });
266
+ }
267
+ else {
268
+ await storage.updateOnboarding(agentGaii, {
269
+ steps: onboarding.steps,
270
+ detectedPlatform: onboarding.detectedPlatform,
271
+ installedRuntime: onboarding.installedRuntime,
272
+ });
273
+ }
274
+ emitChange('agent-onboarding');
275
+ try {
276
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
277
+ }
278
+ catch { /* MCP not connected */ }
279
+ if (webhookDispatcher) {
280
+ webhookDispatcher.dispatchWebhookEvent(agentGaii, 'onboarding.step', {
281
+ step_id: stepId,
282
+ step_order: step.order,
283
+ step_title: step.title,
284
+ action: step.status,
285
+ message: step.failureReason,
286
+ onboarding_progress: onboarding.steps.filter(s => s.status === 'passed').length,
287
+ onboarding_total: onboarding.steps.length,
288
+ });
289
+ }
290
+ const testTaskAutoStarted = stepId === 'accept_test_task' && result.passed && result.details?.autoStarted;
291
+ res.json(success(config.nodeId, {
292
+ step,
293
+ progress: onboarding.steps.filter(s => s.status === 'passed').length,
294
+ total: onboarding.steps.length,
295
+ completed: !!completedOnboarding,
296
+ readinessScore: completedOnboarding?.readinessScore,
297
+ readinessLevel: completedOnboarding?.readinessLevel,
298
+ ...(testTaskAutoStarted ? { next_action: 'Test task auto-started. Execute the todos now and then POST /complete.' } : {}),
299
+ }));
300
+ });
301
+ /* -- PUT /v1/agents/:name/onboarding/override -- Set readiness override -- */
302
+ router.put('/v1/agents/:name/onboarding/override', requireAuth(), requireRole('owner'), async (req, res) => {
303
+ const agentName = req.params.name;
304
+ const agentGaii = resolveAgentGaii(req, agentName);
305
+ const onboarding = await storage.getOnboarding(agentGaii);
306
+ if (!onboarding) {
307
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', t(req, 'agentOnboarding.errors.noOnboardingRecord')));
308
+ return;
309
+ }
310
+ const { level, reason } = req.body ?? {};
311
+ const validLevels = ['basic', 'standard', 'full', 'expert'];
312
+ if (!level || !validLevels.includes(level)) {
313
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', t(req, 'agentOnboarding.errors.invalidLevel')));
314
+ return;
315
+ }
316
+ const now = new Date();
317
+ const override = {
318
+ level: level,
319
+ setBy: `${req.auth.owner}@${config.nodeId}`,
320
+ setAt: now.toISOString(),
321
+ expiresAt: new Date(now.getTime() + 24 * 60 * 60 * 1000).toISOString(),
322
+ reason: reason ?? undefined,
323
+ };
324
+ const updated = await storage.updateOnboarding(agentGaii, {
325
+ readinessOverride: override,
326
+ readinessLevel: override.level,
327
+ });
328
+ emitChange('agent-onboarding');
329
+ try {
330
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
331
+ }
332
+ catch { /* MCP not connected */ }
333
+ res.json(success(config.nodeId, { onboarding: updated }));
334
+ });
335
+ /* -- DELETE /v1/agents/:name/onboarding/override -- Clear readiness override -- */
336
+ router.delete('/v1/agents/:name/onboarding/override', requireAuth(), requireRole('owner'), async (req, res) => {
337
+ const agentName = req.params.name;
338
+ const agentGaii = resolveAgentGaii(req, agentName);
339
+ const onboarding = await storage.getOnboarding(agentGaii);
340
+ if (!onboarding) {
341
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', t(req, 'agentOnboarding.errors.noOnboardingRecord')));
342
+ return;
343
+ }
344
+ const readiness = await calculateReadiness(agentGaii, onboarding.steps, storage);
345
+ const updated = await storage.updateOnboarding(agentGaii, {
346
+ readinessOverride: undefined,
347
+ readinessLevel: readiness.level,
348
+ });
349
+ emitChange('agent-onboarding');
350
+ try {
351
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
352
+ }
353
+ catch { /* MCP not connected */ }
354
+ res.json(success(config.nodeId, { onboarding: updated }));
355
+ });
356
+ /* -- DELETE /v1/agents/:name/onboarding -- */
357
+ router.delete('/v1/agents/:name/onboarding', requireAuth(), requireRole('owner'), async (req, res) => {
358
+ const agentName = req.params.name;
359
+ const agentGaii = resolveAgentGaii(req, agentName);
360
+ const deleted = await storage.deleteOnboarding(agentGaii);
361
+ if (!deleted) {
362
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', t(req, 'agentOnboarding.errors.noOnboardingRecord')));
363
+ return;
364
+ }
365
+ emitChange('agent-onboarding');
366
+ try {
367
+ emitResourceUpdated(agentGaii, `aimeat://agents/${agentName}/onboarding`);
368
+ }
369
+ catch { /* MCP not connected */ }
370
+ res.json(success(config.nodeId, { deleted: true }));
371
+ });
372
+ return router;
373
+ }
374
+ //# sourceMappingURL=agent-onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-onboarding.js","sourceRoot":"","sources":["../../../src/routes/agent-onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @file agent-skill-bundle.ts
3
+ * @description REST endpoints for skill bundle download and version check.
4
+ * Agents download runtime-specific skill bundles as ZIP files, and check
5
+ * for updates via a lightweight version endpoint.
6
+ * @structure
7
+ * - GET /v1/agents/:name/skill-bundle -- Download ZIP bundle
8
+ * - GET /v1/agents/:name/skill-bundle/version -- Version check (lightweight)
9
+ * @version-history
10
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
11
+ */
12
+ import { Router } from 'express';
13
+ import type { AimeatConfig } from '../config.js';
14
+ import type { Storage } from '../storage/interface.js';
15
+ export declare function agentSkillBundleRouter(config: AimeatConfig, storage: Storage): Router;
16
+ //# sourceMappingURL=agent-skill-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skill-bundle.d.ts","sourceRoot":"","sources":["../../../src/routes/agent-skill-bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,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;AAcvD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA4HrF"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * @file agent-skill-bundle.ts
3
+ * @description REST endpoints for skill bundle download and version check.
4
+ * Agents download runtime-specific skill bundles as ZIP files, and check
5
+ * for updates via a lightweight version endpoint.
6
+ * @structure
7
+ * - GET /v1/agents/:name/skill-bundle -- Download ZIP bundle
8
+ * - GET /v1/agents/:name/skill-bundle/version -- Version check (lightweight)
9
+ * @version-history
10
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
11
+ */
12
+ import { Router } from 'express';
13
+ import archiver from 'archiver';
14
+ import { success, error } from '../middleware/envelope.js';
15
+ import { requireAuth } from '../auth/middleware.js';
16
+ import { buildGAII } from '../utils/gaii.js';
17
+ import { generateBundle } from '../services/skill-bundle/generator.js';
18
+ import { HermesAdapter } from '../services/skill-bundle/hermes-adapter.js';
19
+ import { GenericAdapter } from '../services/skill-bundle/generic-adapter.js';
20
+ const ADAPTERS = {
21
+ hermes: new HermesAdapter(),
22
+ generic: new GenericAdapter(),
23
+ };
24
+ export function agentSkillBundleRouter(config, storage) {
25
+ const router = Router();
26
+ async function buildContext(agentName, agentGaii) {
27
+ const agent = await storage.getAgent(agentGaii);
28
+ const ownerName = agentGaii.split('#')[1]?.split('@')[0] ?? '';
29
+ const ownerGhii = `${ownerName}@${config.nodeId}`;
30
+ const systemRules = (config.agentSystemPrinciples ?? []).map((text, idx) => ({
31
+ id: `system-${idx + 1}`,
32
+ description: text,
33
+ source: 'system',
34
+ }));
35
+ const ownerDefaults = await storage.getOwnerAgentDefaults(ownerGhii);
36
+ const ownerRules = (ownerDefaults?.rules ?? []).map(r => ({ ...r, source: 'owner' }));
37
+ const agentDirectives = await storage.getAgentDirectives(agentGaii);
38
+ const agentRules = (agentDirectives?.rules ?? []).map(r => ({ ...r, source: 'agent' }));
39
+ return {
40
+ agentName,
41
+ agentGaii,
42
+ nodeId: config.nodeId,
43
+ nodeUrl: config.baseUrl,
44
+ directives: {
45
+ purpose: agentDirectives?.purpose,
46
+ rules: [...systemRules, ...ownerRules, ...agentRules],
47
+ memoryAreas: agentDirectives?.memoryAreas?.map(a => a.keyPrefix),
48
+ resources: agentDirectives?.resources?.map(r => ({ key: r.reference, description: r.description })),
49
+ },
50
+ capabilities: {
51
+ technical: agent?.technicalCapabilities?.map(c => c.name),
52
+ domain: agent?.domainCapabilities,
53
+ },
54
+ webhookUrl: agent?.webhookUrl,
55
+ };
56
+ }
57
+ function resolveAndAuthorize(req, agentName) {
58
+ const roles = req.auth.roles;
59
+ const isOwner = roles.includes('owner') && !roles.includes('agent');
60
+ if (isOwner)
61
+ return buildGAII(agentName, req.auth.owner, config.nodeId);
62
+ if (roles.includes('agent')) {
63
+ const agentGaii = buildGAII(agentName, req.auth.owner, config.nodeId);
64
+ return req.auth.sub === agentGaii ? agentGaii : null;
65
+ }
66
+ return null;
67
+ }
68
+ /* -- GET /v1/agents/:name/skill-bundle -- Download ZIP bundle (owner + own agent) -- */
69
+ router.get('/v1/agents/:name/skill-bundle', requireAuth(), async (req, res) => {
70
+ const agentName = req.params.name;
71
+ const agentGaii = resolveAndAuthorize(req, agentName);
72
+ if (!agentGaii) {
73
+ res.status(403).json(error(config.nodeId, 'FORBIDDEN', 'Access denied'));
74
+ return;
75
+ }
76
+ const agent = await storage.getAgent(agentGaii);
77
+ if (!agent) {
78
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Agent '${agentName}' not found`));
79
+ return;
80
+ }
81
+ const runtimeParam = req.query.runtime?.toLowerCase() || agent?.platform?.toLowerCase() || 'generic';
82
+ const adapter = ADAPTERS[runtimeParam] ?? ADAPTERS.generic;
83
+ const ctx = await buildContext(agentName, agentGaii);
84
+ const bundle = generateBundle(ctx, adapter);
85
+ const archive = archiver('zip', { zlib: { level: 6 } });
86
+ const chunks = [];
87
+ archive.on('data', (chunk) => chunks.push(chunk));
88
+ archive.on('end', () => {
89
+ const buffer = Buffer.concat(chunks);
90
+ res.set({
91
+ 'Content-Type': 'application/zip',
92
+ 'Content-Disposition': `attachment; filename="${bundle.metadata.bundleName}.zip"`,
93
+ 'Content-Length': String(buffer.length),
94
+ 'X-Bundle-Version': bundle.metadata.version,
95
+ 'X-Bundle-Runtime': bundle.metadata.runtime,
96
+ });
97
+ res.send(buffer);
98
+ });
99
+ archive.on('error', (err) => {
100
+ res.status(500).json(error(config.nodeId, 'ZIP_ERROR', `Failed to generate bundle: ${err.message}`));
101
+ });
102
+ for (const file of bundle.files) {
103
+ archive.append(file.content, { name: `${bundle.metadata.bundleName}/${file.path}` });
104
+ }
105
+ await archive.finalize();
106
+ });
107
+ /* -- GET /v1/agents/:name/skill-bundle/version -- Version check (owner + own agent) -- */
108
+ router.get('/v1/agents/:name/skill-bundle/version', requireAuth(), async (req, res) => {
109
+ const agentName = req.params.name;
110
+ const agentGaii = resolveAndAuthorize(req, agentName);
111
+ if (!agentGaii) {
112
+ res.status(403).json(error(config.nodeId, 'FORBIDDEN', 'Access denied'));
113
+ return;
114
+ }
115
+ const agent = await storage.getAgent(agentGaii);
116
+ if (!agent) {
117
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', `Agent '${agentName}' not found`));
118
+ return;
119
+ }
120
+ const runtimeParam = req.query.runtime?.toLowerCase() || agent?.platform?.toLowerCase() || 'generic';
121
+ const adapter = ADAPTERS[runtimeParam] ?? ADAPTERS.generic;
122
+ const ctx = await buildContext(agentName, agentGaii);
123
+ const bundle = generateBundle(ctx, adapter);
124
+ res.json(success(config.nodeId, {
125
+ version: bundle.metadata.version,
126
+ runtime: bundle.metadata.runtime,
127
+ bundle_name: bundle.metadata.bundleName,
128
+ generated_at: bundle.metadata.generatedAt,
129
+ }));
130
+ });
131
+ return router;
132
+ }
133
+ //# sourceMappingURL=agent-skill-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skill-bundle.js","sourceRoot":"","sources":["../../../src/routes/agent-skill-bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAG7E,MAAM,QAAQ,GAAmC;IAC/C,MAAM,EAAE,IAAI,aAAa,EAAE;IAC3B,OAAO,EAAE,IAAI,cAAc,EAAE;CAC9B,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAoB,EAAE,OAAgB;IAC3E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAiB;QAC9D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAElD,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3E,EAAE,EAAE,UAAU,GAAG,GAAG,CAAC,EAAE;YACvB,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC,CAAC;QACJ,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO;YACL,SAAS;YACT,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE,eAAe,EAAE,OAAO;gBACjC,KAAK,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC;gBACrD,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;aACpG;YACD,YAAY,EAAE;gBACZ,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzD,MAAM,EAAE,KAAK,EAAE,kBAAkB;aAClC;YACD,UAAU,EAAE,KAAK,EAAE,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED,SAAS,mBAAmB,CAAC,GAAoB,EAAE,SAAiB;QAClE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAK,CAAC,KAAiB,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,OAAO;YAAE,OAAO,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,IAAK,CAAC,KAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,IAAK,CAAC,KAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjF,OAAO,GAAG,CAAC,IAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wFAAwF;IACxF,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC;QAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,SAAS,aAAa,CAAC,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAI,GAAG,CAAC,KAAK,CAAC,OAAkB,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;QACjH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,GAAG,CAAC,GAAG,CAAC;gBACN,cAAc,EAAE,iBAAiB;gBACjC,qBAAqB,EAAE,yBAAyB,MAAM,CAAC,QAAQ,CAAC,UAAU,OAAO;gBACjF,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAC3C,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;aAC5C,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,0FAA0F;IAC1F,MAAM,CAAC,GAAG,CAAC,uCAAuC,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACpF,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAc,CAAC;QAC5C,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,SAAS,aAAa,CAAC,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAI,GAAG,CAAC,KAAK,CAAC,OAAkB,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;QACjH,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;YAC9B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;YACvC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -13,12 +13,19 @@
13
13
  * - POST /v1/agents/:name/tasks/:id/event -- Append event
14
14
  * - POST /v1/agents/:name/tasks/:id/complete -- Complete task (active->done)
15
15
  * - POST /v1/agents/:name/tasks/:id/fail -- Fail task (active->failed)
16
+ * - PATCH /v1/agents/:name/tasks/:id/todos/:todoId -- Update individual todo status
16
17
  * - GET /v1/agents/:name/tasks/:id/events -- List events
17
18
  * @version-history
19
+ * v1.3.0 -- 2026-05-23 -- Add webhook dispatch for task.queued, task.approved, task.updated events
20
+ * v1.2.0 -- 2026-05-22 -- Add individual todo update endpoint (PATCH /todos/:todoId)
21
+ * v1.1.0 -- 2026-05-22 -- Fix: accumulate telemetry across events instead of overwriting; allow agent PATCH on queued tasks
18
22
  * v1.0.0 -- 2026-05-21 -- Initial creation for Agent Dashboard Phase 1
19
23
  */
20
24
  import { Router } from 'express';
21
25
  import type { AimeatConfig } from '../config.js';
22
26
  import type { Storage } from '../storage/interface.js';
23
- export declare function agentTasksRouter(config: AimeatConfig, storage: Storage): Router;
27
+ import type { createWebhookDispatcher } from '../services/webhook-dispatcher.js';
28
+ type WebhookDispatcher = ReturnType<typeof createWebhookDispatcher>;
29
+ export declare function agentTasksRouter(config: AimeatConfig, storage: Storage, webhookDispatcher?: WebhookDispatcher): Router;
30
+ export {};
24
31
  //# sourceMappingURL=agent-tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../../src/routes/agent-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAkC,MAAM,yBAAyB,CAAC;AAQvF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA4d/E"}
1
+ {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../../src/routes/agent-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAkD,MAAM,yBAAyB,CAAC;AASvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA+oBtH"}