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,96 @@
1
+ /**
2
+ * @file generic-adapter.ts
3
+ * @description Generic fallback runtime adapter for skill bundle generation.
4
+ * Produces aimeat-agent bundle with minimal SKILL.md + references only.
5
+ * Used for runtimes without a dedicated adapter.
6
+ * @version-history
7
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
8
+ */
9
+ import { computeBundleVersion } from './generator.js';
10
+ export class GenericAdapter {
11
+ runtime = 'generic';
12
+ bundleName = 'aimeat-agent';
13
+ generate(ctx, references) {
14
+ const files = [
15
+ { path: 'SKILL.md', content: this.renderSkillMd(ctx) },
16
+ ...references,
17
+ ];
18
+ const metadata = {
19
+ bundleName: this.bundleName,
20
+ runtime: this.runtime,
21
+ version: '',
22
+ agentName: ctx.agentName,
23
+ agentGaii: ctx.agentGaii,
24
+ nodeId: ctx.nodeId,
25
+ nodeUrl: ctx.nodeUrl,
26
+ generatedAt: new Date().toISOString(),
27
+ };
28
+ const bundle = { metadata, files };
29
+ bundle.metadata.version = computeBundleVersion(bundle);
30
+ return bundle;
31
+ }
32
+ renderSkillMd(ctx) {
33
+ const rulesBlock = ctx.directives.rules.length > 0
34
+ ? ctx.directives.rules.map((r, i) => `${i + 1}. ${r.description}`).join('\n')
35
+ : 'No specific rules configured.';
36
+ return `# AIMEAT Agent Integration
37
+
38
+ ## Identity
39
+ - Agent: ${ctx.agentName}
40
+ - GAII: ${ctx.agentGaii}
41
+ - Node: ${ctx.nodeUrl} (${ctx.nodeId})
42
+
43
+ ## Quick Start
44
+ 1. Authenticate with your Bearer token
45
+ 2. Check inbox: GET ${ctx.nodeUrl}/v1/agents/me/inbox
46
+ 3. Propose todos for queued tasks: PATCH /v1/agents/me/tasks/{id}
47
+ 4. Wait for owner approval before executing
48
+ 5. Report progress via task events
49
+ 6. Complete tasks when done
50
+
51
+ ## Directives
52
+ ${rulesBlock}
53
+
54
+ ## Setup (Manual)
55
+ This is a generic skill bundle. You will need to manually configure:
56
+ - Polling: set up a cron job or scheduled task to poll the inbox endpoint
57
+ - Telemetry: POST to /v1/agents/me/telemetry after each LLM call
58
+ - Webhook (optional): PUT /v1/agents/me/webhook to register a push endpoint
59
+
60
+ See the references/ directory for full API documentation.
61
+
62
+ ## After Onboarding: Register Commands and Config
63
+
64
+ These steps are required after completing Hello Integration. They make your capabilities visible in the owner's dashboard.
65
+
66
+ ### Register Commands (owner sees these in Messages tab)
67
+ \`\`\`
68
+ POST ${ctx.nodeUrl}/v1/memory
69
+ { "key": "agents.${ctx.agentName}.commands", "value": [
70
+ { "name": "/status", "description": "Show current agent status", "category": "general" },
71
+ { "name": "/inbox", "description": "Check inbox for tasks and messages", "category": "tasks" }
72
+ ], "visibility": "owner" }
73
+ \`\`\`
74
+ The value MUST be a flat array of { name, description, category }. Each name starts with /.
75
+
76
+ ### Push Config Files (owner sees these in Agent Config tab)
77
+ \`\`\`
78
+ POST ${ctx.nodeUrl}/v1/memory
79
+ { "key": "agents.config.watchdog", "value": {
80
+ "script": "path/to/your/watchdog",
81
+ "poll_interval": "60s",
82
+ "platform": "your-platform"
83
+ }, "visibility": "owner" }
84
+ \`\`\`
85
+
86
+ ## References
87
+ - references/api-overview.md -- Endpoints, auth, response format
88
+ - references/task-lifecycle.md -- Task states and flow
89
+ - references/message-protocol.md -- Messages, threads, slash commands
90
+ - references/telemetry-protocol.md -- Token usage reporting
91
+ - references/capability-report.md -- Declaring capabilities
92
+ - references/error-protocol.md -- Error handling and retry strategy
93
+ `;
94
+ }
95
+ }
96
+ //# sourceMappingURL=generic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-adapter.js","sourceRoot":"","sources":["../../../../src/services/skill-bundle/generic-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,OAAO,cAAc;IAChB,OAAO,GAAG,SAAS,CAAC;IACpB,UAAU,GAAG,cAAc,CAAC;IAErC,QAAQ,CAAC,GAAkB,EAAE,UAAwB;QACnD,MAAM,KAAK,GAAiB;YAC1B,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;YACtD,GAAG,UAAU;SACd,CAAC;QAEF,MAAM,QAAQ,GAAG;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,MAAM,MAAM,GAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,GAAkB;QACtC,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAChD,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7E,CAAC,CAAC,+BAA+B,CAAC;QAEpC,OAAO;;;WAGA,GAAG,CAAC,SAAS;UACd,GAAG,CAAC,SAAS;UACb,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM;;;;sBAId,GAAG,CAAC,OAAO;;;;;;;EAO/B,UAAU;;;;;;;;;;;;;;;;OAgBL,GAAG,CAAC,OAAO;mBACC,GAAG,CAAC,SAAS;;;;;;;;;OASzB,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;CAejB,CAAC;IACA,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file hermes-adapter.ts
3
+ * @description Hermes (OpenClaw) runtime adapter for skill bundle generation.
4
+ * Produces aimeat-hermes bundle with SKILL.md, scripts/, and config/ directories.
5
+ * @structure
6
+ * - HermesAdapter class implementing RuntimeAdapter
7
+ * - SKILL.md template with on-wake protocol
8
+ * - Shell scripts: poll-inbox.sh, post-telemetry.sh, test-connection.sh
9
+ * - YAML configs: webhook-route.yaml, hooks.yaml
10
+ * @version-history
11
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
12
+ */
13
+ import type { RuntimeAdapter, BundleContext, BundleFile, BundleContent } from './types.js';
14
+ export declare class HermesAdapter implements RuntimeAdapter {
15
+ readonly runtime = "hermes";
16
+ readonly bundleName = "aimeat-hermes";
17
+ generate(ctx: BundleContext, references: BundleFile[]): BundleContent;
18
+ private renderSkillMd;
19
+ private renderPollInbox;
20
+ private renderPostTelemetry;
21
+ private renderTestConnection;
22
+ private renderWebhookRoute;
23
+ private renderHooksYaml;
24
+ }
25
+ //# sourceMappingURL=hermes-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-adapter.d.ts","sourceRoot":"","sources":["../../../../src/services/skill-bundle/hermes-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3F,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,OAAO,YAAY;IAC5B,QAAQ,CAAC,UAAU,mBAAmB;IAEtC,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,aAAa;IA2BrE,OAAO,CAAC,aAAa;IAoFrB,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,oBAAoB;IA2C5B,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,eAAe;CAaxB"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * @file hermes-adapter.ts
3
+ * @description Hermes (OpenClaw) runtime adapter for skill bundle generation.
4
+ * Produces aimeat-hermes bundle with SKILL.md, scripts/, and config/ directories.
5
+ * @structure
6
+ * - HermesAdapter class implementing RuntimeAdapter
7
+ * - SKILL.md template with on-wake protocol
8
+ * - Shell scripts: poll-inbox.sh, post-telemetry.sh, test-connection.sh
9
+ * - YAML configs: webhook-route.yaml, hooks.yaml
10
+ * @version-history
11
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
12
+ */
13
+ import { computeBundleVersion } from './generator.js';
14
+ export class HermesAdapter {
15
+ runtime = 'hermes';
16
+ bundleName = 'aimeat-hermes';
17
+ generate(ctx, references) {
18
+ const files = [
19
+ { path: 'SKILL.md', content: this.renderSkillMd(ctx) },
20
+ ...references,
21
+ { path: 'scripts/poll-inbox.sh', content: this.renderPollInbox(ctx) },
22
+ { path: 'scripts/post-telemetry.sh', content: this.renderPostTelemetry(ctx) },
23
+ { path: 'scripts/test-connection.sh', content: this.renderTestConnection(ctx) },
24
+ { path: 'config/webhook-route.yaml', content: this.renderWebhookRoute(ctx) },
25
+ { path: 'config/hooks.yaml', content: this.renderHooksYaml(ctx) },
26
+ ];
27
+ const metadata = {
28
+ bundleName: this.bundleName,
29
+ runtime: this.runtime,
30
+ version: '',
31
+ agentName: ctx.agentName,
32
+ agentGaii: ctx.agentGaii,
33
+ nodeId: ctx.nodeId,
34
+ nodeUrl: ctx.nodeUrl,
35
+ generatedAt: new Date().toISOString(),
36
+ };
37
+ const bundle = { metadata, files };
38
+ bundle.metadata.version = computeBundleVersion(bundle);
39
+ return bundle;
40
+ }
41
+ renderSkillMd(ctx) {
42
+ const rulesBlock = ctx.directives.rules.length > 0
43
+ ? ctx.directives.rules.map((r, i) => `${i + 1}. ${r.description}`).join('\n')
44
+ : 'No specific rules configured.';
45
+ return `---
46
+ name: aimeat-hermes
47
+ description: AIMEAT node integration for ${ctx.nodeId}
48
+ trigger: when user mentions AIMEAT, tasks, inbox, or this skill is invoked
49
+ ---
50
+
51
+ ## Identity
52
+ You are ${ctx.agentName} on AIMEAT node ${ctx.nodeUrl}
53
+ Your GAII: ${ctx.agentGaii}
54
+
55
+ ## On First Run
56
+ 1. Complete Hello Integration: GET /v1/agents/me/onboarding (steps auto-validate, test task auto-starts)
57
+ 2. Install the watchdog cron job (this delivers AIMEAT messages to you automatically):
58
+ \`\`\`
59
+ cp scripts/poll-inbox.sh ~/.hermes/scripts/
60
+ chmod +x ~/.hermes/scripts/poll-inbox.sh
61
+ (crontab -l 2>/dev/null; echo "*/5 * * * * ~/.hermes/scripts/poll-inbox.sh") | crontab -
62
+ \`\`\`
63
+ 3. Install the telemetry hook:
64
+ \`\`\`
65
+ cp config/hooks.yaml ~/.hermes/config/
66
+ hermes reload_skills
67
+ \`\`\`
68
+ 4. Register your commands and config in AIMEAT memory (see "After Setup" section in references)
69
+
70
+ ## On Every Wake
71
+ 1. Check inbox: GET ${ctx.nodeUrl}/v1/agents/me/inbox?since={cursor}
72
+ 2. Queued tasks without todos -> propose plan (PATCH with todos)
73
+ 3. Active tasks -> execute next pending todo
74
+ 4. Pending messages -> read and respond
75
+ 5. Report capabilities if changed
76
+
77
+ ## Directives
78
+ ${rulesBlock}
79
+
80
+ ## Events You May Receive (via webhook)
81
+ - task.queued -- Owner created a new task. Fetch and propose todos.
82
+ - task.approved -- Owner approved your plan. Start executing.
83
+ - task.updated -- Owner edited the task. Re-fetch and adjust.
84
+ - task.paused -- Owner paused the task. Stop work immediately.
85
+ - message.inbound -- Owner sent a message. Read and respond.
86
+ - directive.updated -- Directives changed. Re-fetch via GET /directives.
87
+ - onboarding.step -- Onboarding step needs attention.
88
+
89
+ ## After Onboarding: Register Commands and Config
90
+
91
+ These steps are required after completing Hello Integration.
92
+
93
+ ### Register Commands (owner sees these in Messages tab)
94
+ \`\`\`
95
+ POST ${ctx.nodeUrl}/v1/memory
96
+ { "key": "agents.${ctx.agentName}.commands", "value": [
97
+ { "name": "/status", "description": "Show current agent status", "category": "general" },
98
+ { "name": "/inbox", "description": "Check inbox for tasks and messages", "category": "tasks" }
99
+ ], "visibility": "owner" }
100
+ \`\`\`
101
+ The value MUST be a flat array of { name, description, category }. Each name starts with /.
102
+
103
+ ### Push Config Files (owner sees these in Agent Config tab)
104
+ \`\`\`
105
+ POST ${ctx.nodeUrl}/v1/memory
106
+ { "key": "agents.config.watchdog", "value": {
107
+ "script": "~/.hermes/aimeat_watchdog.sh",
108
+ "poll_interval": "60s",
109
+ "platform": "hermes-agent"
110
+ }, "visibility": "owner" }
111
+ \`\`\`
112
+
113
+ ## References
114
+ See references/ directory for detailed API documentation:
115
+ - api-overview.md -- Endpoints, auth, response format
116
+ - task-lifecycle.md -- Task states and flow
117
+ - message-protocol.md -- Messages, threads, slash commands
118
+ - telemetry-protocol.md -- Token usage reporting
119
+ - capability-report.md -- Declaring capabilities
120
+ - error-protocol.md -- Error handling and retry strategy
121
+ `;
122
+ }
123
+ renderPollInbox(ctx) {
124
+ return `#!/bin/bash
125
+ # poll-inbox.sh -- Cron script for Tier 3 polling fallback
126
+ # Runs in no_agent mode (zero LLM cost). Only wakes the agent if new items exist.
127
+ #
128
+ # Install: copy to ~/.hermes/scripts/ and add to crontab:
129
+ # */5 * * * * ~/.hermes/scripts/poll-inbox.sh
130
+
131
+ set -euo pipefail
132
+
133
+ NODE_URL="${ctx.nodeUrl}"
134
+ AGENT_NAME="${ctx.agentName}"
135
+ CURSOR_FILE="$HOME/.hermes/state/aimeat-cursor"
136
+
137
+ # Load auth token
138
+ TOKEN=$(hermes auth token 2>/dev/null || echo "")
139
+ if [ -z "$TOKEN" ]; then
140
+ echo "No auth token available, skipping poll"
141
+ exit 0
142
+ fi
143
+
144
+ # Read cursor from previous poll
145
+ CURSOR=""
146
+ if [ -f "$CURSOR_FILE" ]; then
147
+ CURSOR=$(cat "$CURSOR_FILE")
148
+ fi
149
+
150
+ # Build URL
151
+ if [ -n "$CURSOR" ]; then
152
+ URL="$NODE_URL/v1/agents/$AGENT_NAME/inbox?since=$CURSOR"
153
+ else
154
+ URL="$NODE_URL/v1/agents/$AGENT_NAME/inbox"
155
+ fi
156
+
157
+ # Poll inbox
158
+ RESPONSE=$(curl -s -w "\\n%{http_code}" \\
159
+ -H "Authorization: Bearer $TOKEN" \\
160
+ -H "Accept: application/json" \\
161
+ "$URL")
162
+
163
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
164
+ BODY=$(echo "$RESPONSE" | head -n -1)
165
+
166
+ if [ "$HTTP_CODE" != "200" ]; then
167
+ echo "Inbox poll failed with HTTP $HTTP_CODE"
168
+ exit 1
169
+ fi
170
+
171
+ # Save next cursor
172
+ NEXT_CURSOR=$(echo "$BODY" | jq -r '.data.next_cursor // empty')
173
+ if [ -n "$NEXT_CURSOR" ]; then
174
+ mkdir -p "$(dirname "$CURSOR_FILE")"
175
+ echo "$NEXT_CURSOR" > "$CURSOR_FILE"
176
+ fi
177
+
178
+ # Check if there are new items
179
+ TASK_COUNT=$(echo "$BODY" | jq '.data.queued_tasks | length')
180
+ MSG_COUNT=$(echo "$BODY" | jq '.data.pending_messages | length')
181
+
182
+ if [ "$TASK_COUNT" -gt 0 ] || [ "$MSG_COUNT" -gt 0 ]; then
183
+ echo "New items: $TASK_COUNT tasks, $MSG_COUNT messages -- waking agent"
184
+ hermes wake --reason "AIMEAT inbox: $TASK_COUNT tasks, $MSG_COUNT messages" 2>/dev/null || true
185
+ fi
186
+ `;
187
+ }
188
+ renderPostTelemetry(ctx) {
189
+ return `#!/bin/bash
190
+ # post-telemetry.sh -- Hook script for automatic telemetry reporting
191
+ # Registered as Hermes post_llm_call hook. Fires after every LLM API call.
192
+ #
193
+ # Environment variables set by Hermes:
194
+ # HERMES_TOKENS_IN, HERMES_TOKENS_OUT, HERMES_MODEL,
195
+ # HERMES_DURATION_MS, HERMES_SESSION_ID
196
+
197
+ set -euo pipefail
198
+
199
+ NODE_URL="${ctx.nodeUrl}"
200
+ AGENT_NAME="${ctx.agentName}"
201
+
202
+ TOKEN=$(hermes auth token 2>/dev/null || echo "")
203
+ if [ -z "$TOKEN" ]; then
204
+ exit 0
205
+ fi
206
+
207
+ curl -s -X POST \\
208
+ -H "Authorization: Bearer $TOKEN" \\
209
+ -H "Content-Type: application/json" \\
210
+ -d "{
211
+ \\"type\\": \\"llm_call\\",
212
+ \\"tokens_in\\": \${HERMES_TOKENS_IN:-0},
213
+ \\"tokens_out\\": \${HERMES_TOKENS_OUT:-0},
214
+ \\"model\\": \\"\${HERMES_MODEL:-unknown}\\",
215
+ \\"duration_ms\\": \${HERMES_DURATION_MS:-0},
216
+ \\"session_id\\": \\"\${HERMES_SESSION_ID:-}\\",
217
+ \\"timestamp\\": \\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\\"
218
+ }" \\
219
+ "$NODE_URL/v1/agents/$AGENT_NAME/telemetry" > /dev/null 2>&1 || true
220
+ `;
221
+ }
222
+ renderTestConnection(ctx) {
223
+ return `#!/bin/bash
224
+ # test-connection.sh -- Healthcheck script
225
+ # Verifies auth token works and inbox endpoint is reachable.
226
+ #
227
+ # Usage: ./test-connection.sh
228
+
229
+ set -euo pipefail
230
+
231
+ NODE_URL="${ctx.nodeUrl}"
232
+ AGENT_NAME="${ctx.agentName}"
233
+
234
+ TOKEN=$(hermes auth token 2>/dev/null || echo "")
235
+ if [ -z "$TOKEN" ]; then
236
+ echo "FAIL: No auth token available"
237
+ echo "Run: hermes auth login"
238
+ exit 1
239
+ fi
240
+
241
+ echo "Testing connection to $NODE_URL..."
242
+
243
+ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \\
244
+ -H "Authorization: Bearer $TOKEN" \\
245
+ "$NODE_URL/v1/agents/$AGENT_NAME/inbox")
246
+
247
+ if [ "$HTTP_CODE" = "200" ]; then
248
+ echo "OK: Connection successful (HTTP 200)"
249
+ exit 0
250
+ elif [ "$HTTP_CODE" = "401" ]; then
251
+ echo "FAIL: Authentication failed (HTTP 401)"
252
+ echo "Token may have expired. Run: hermes auth login"
253
+ exit 1
254
+ elif [ "$HTTP_CODE" = "404" ]; then
255
+ echo "FAIL: Agent not found (HTTP 404)"
256
+ echo "Agent '$AGENT_NAME' may not exist on this node."
257
+ exit 1
258
+ else
259
+ echo "FAIL: Unexpected response (HTTP $HTTP_CODE)"
260
+ exit 1
261
+ fi
262
+ `;
263
+ }
264
+ renderWebhookRoute(ctx) {
265
+ return `# webhook-route.yaml -- Hermes webhook route configuration
266
+ # Copy this file to your Hermes config directory.
267
+ #
268
+ # This configures Hermes to accept incoming webhook events from AIMEAT
269
+ # and wake the agent when relevant events arrive.
270
+
271
+ route:
272
+ path: /webhooks/aimeat
273
+ method: POST
274
+ handler: wake_agent
275
+ validation:
276
+ signature_header: X-AIMEAT-Signature
277
+ algorithm: hmac-sha256
278
+ events:
279
+ - task.queued
280
+ - task.approved
281
+ - task.updated
282
+ - task.paused
283
+ - message.inbound
284
+ - directive.updated
285
+ - onboarding.step
286
+ `;
287
+ }
288
+ renderHooksYaml(ctx) {
289
+ return `# hooks.yaml -- Hermes hook registration
290
+ # Copy this file to your Hermes config directory.
291
+ #
292
+ # Registers post_llm_call hook for automatic telemetry reporting.
293
+
294
+ hooks:
295
+ post_llm_call:
296
+ - script: scripts/post-telemetry.sh
297
+ description: Report token usage to AIMEAT node
298
+ enabled: true
299
+ `;
300
+ }
301
+ }
302
+ //# sourceMappingURL=hermes-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-adapter.js","sourceRoot":"","sources":["../../../../src/services/skill-bundle/hermes-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @file types.ts
3
+ * @description Shared types for the skill bundle generator and runtime adapters.
4
+ * @version-history
5
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
6
+ */
7
+ export interface BundleFile {
8
+ path: string;
9
+ content: string;
10
+ }
11
+ export interface BundleMetadata {
12
+ bundleName: string;
13
+ runtime: string;
14
+ version: string;
15
+ agentName: string;
16
+ agentGaii: string;
17
+ nodeId: string;
18
+ nodeUrl: string;
19
+ generatedAt: string;
20
+ }
21
+ export interface BundleContent {
22
+ metadata: BundleMetadata;
23
+ files: BundleFile[];
24
+ }
25
+ export interface BundleContext {
26
+ agentName: string;
27
+ agentGaii: string;
28
+ nodeId: string;
29
+ nodeUrl: string;
30
+ directives: {
31
+ purpose?: string;
32
+ rules: Array<{
33
+ id: string;
34
+ description: string;
35
+ source: string;
36
+ }>;
37
+ memoryAreas?: string[];
38
+ resources?: Array<{
39
+ key: string;
40
+ description?: string;
41
+ }>;
42
+ };
43
+ capabilities: {
44
+ technical?: string[];
45
+ domain?: string[];
46
+ };
47
+ webhookUrl?: string;
48
+ }
49
+ export interface RuntimeAdapter {
50
+ readonly runtime: string;
51
+ readonly bundleName: string;
52
+ generate(ctx: BundleContext, references: BundleFile[]): BundleContent;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/skill-bundle/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1D,CAAC;IACF,YAAY,EAAE;QACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;CACvE"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file types.ts
3
+ * @description Shared types for the skill bundle generator and runtime adapters.
4
+ * @version-history
5
+ * v1.0.0 -- 2026-05-23 -- Initial creation for Agent Integration Phase A
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/skill-bundle/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,10 +1,18 @@
1
1
  import type { Storage } from '../storage/interface.js';
2
2
  import type { AimeatConfig } from '../config.js';
3
+ export interface AgentStallCondition {
4
+ gaii: string;
5
+ condition: 'unreachable' | 'webhook_down';
6
+ }
3
7
  /**
4
8
  * Find active tasks that have had no events for longer than the threshold
5
9
  * and mark them as stalled. Appends a 'failed' event explaining the reason.
6
- *
7
- * @returns Number of tasks marked as stalled
8
10
  */
9
11
  export declare function detectStalledTasks(storage: Storage, config: AimeatConfig): Promise<number>;
12
+ /**
13
+ * Check all agents for connectivity stall conditions:
14
+ * - unreachable: no activity for 2h AND no webhook configured
15
+ * - webhook_down: 10+ consecutive webhook delivery failures
16
+ */
17
+ export declare function detectAgentStallConditions(storage: Storage): Promise<AgentStallCondition[]>;
10
18
  //# sourceMappingURL=task-stall-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-stall-detector.d.ts","sourceRoot":"","sources":["../../../src/services/task-stall-detector.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG"}
1
+ {"version":3,"file":"task-stall-detector.d.ts","sourceRoot":"","sources":["../../../src/services/task-stall-detector.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAMjD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,GAAG,cAAc,CAAC;CAC3C;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBhG;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyBjG"}
@@ -1,18 +1,21 @@
1
1
  /**
2
2
  * @file task-stall-detector.ts
3
- * @description Background job that detects and marks stalled agent tasks.
4
- * A task is considered stalled when it has been in 'active' status with no
5
- * events for longer than the configured threshold (default 30 minutes).
3
+ * @description Background job that detects stalled agent tasks and agent-level
4
+ * connectivity issues (unreachable, webhook_down).
5
+ * @structure
6
+ * - detectStalledTasks() -- marks active tasks with no events as stalled
7
+ * - detectAgentStallConditions() -- checks agent-level unreachable/webhook_down
6
8
  * @version-history
9
+ * v1.1.0 -- 2026-05-24 -- Add unreachable + webhook_down agent stall conditions
7
10
  * v1.0.0 -- 2026-05-21 -- Initial creation for Agent Dashboard Phase 1
8
11
  */
9
12
  import { randomUUID } from 'node:crypto';
10
13
  import { logger } from '../utils/logger.js';
14
+ const UNREACHABLE_THRESHOLD_MS = 2 * 60 * 60 * 1000; // 2 hours
15
+ const WEBHOOK_DOWN_THRESHOLD = 10;
11
16
  /**
12
17
  * Find active tasks that have had no events for longer than the threshold
13
18
  * and mark them as stalled. Appends a 'failed' event explaining the reason.
14
- *
15
- * @returns Number of tasks marked as stalled
16
19
  */
17
20
  export async function detectStalledTasks(storage, config) {
18
21
  const stalled = await storage.findStalledTasks(config.taskStallThresholdMinutes);
@@ -35,4 +38,30 @@ export async function detectStalledTasks(storage, config) {
35
38
  }
36
39
  return stalled.length;
37
40
  }
41
+ /**
42
+ * Check all agents for connectivity stall conditions:
43
+ * - unreachable: no activity for 2h AND no webhook configured
44
+ * - webhook_down: 10+ consecutive webhook delivery failures
45
+ */
46
+ export async function detectAgentStallConditions(storage) {
47
+ const agents = await storage.listAgents();
48
+ const now = Date.now();
49
+ const conditions = [];
50
+ for (const agent of agents) {
51
+ const lastSeenMs = new Date(agent.lastSeen).getTime();
52
+ const hasWebhook = agent.webhookEnabled && agent.webhookUrl;
53
+ if (!hasWebhook && (now - lastSeenMs) > UNREACHABLE_THRESHOLD_MS) {
54
+ conditions.push({ gaii: agent.gaii, condition: 'unreachable' });
55
+ }
56
+ if ((agent.webhookFailCount ?? 0) >= WEBHOOK_DOWN_THRESHOLD) {
57
+ conditions.push({ gaii: agent.gaii, condition: 'webhook_down' });
58
+ }
59
+ }
60
+ if (conditions.length > 0) {
61
+ const unreachable = conditions.filter(c => c.condition === 'unreachable').length;
62
+ const webhookDown = conditions.filter(c => c.condition === 'webhook_down').length;
63
+ logger.info(`Stall detector: ${unreachable} unreachable agent(s), ${webhookDown} webhook_down agent(s)`);
64
+ }
65
+ return conditions;
66
+ }
38
67
  //# sourceMappingURL=task-stall-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-stall-detector.js","sourceRoot":"","sources":["../../../src/services/task-stall-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAgB,EAAE,MAAoB;IAC7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;YACrC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,eAAe,CAAC;YAC5B,EAAE,EAAE,UAAU,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,+BAA+B,MAAM,CAAC,yBAAyB,UAAU;YAClF,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"task-stall-detector.js","sourceRoot":"","sources":["../../../src/services/task-stall-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;AAC/D,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAOlC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAgB,EAAE,MAAoB;IAC7E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE;YACrC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,eAAe,CAAC;YAC5B,EAAE,EAAE,UAAU,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,+BAA+B,MAAM,CAAC,yBAAyB,UAAU;YAClF,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAgB;IAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAA0B,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC;QAE5D,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,wBAAwB,EAAE,CAAC;YACjE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,sBAAsB,EAAE,CAAC;YAC5D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC,MAAM,CAAC;QACjF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,MAAM,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,mBAAmB,WAAW,0BAA0B,WAAW,wBAAwB,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}