@runcore-sh/runcore 0.4.0 → 0.5.1

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 (351) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/activity/log.js +2 -2
  3. package/dist/activity/log.js.map +1 -1
  4. package/dist/agents/governed-spawn.d.ts.map +1 -1
  5. package/dist/cli.js +101 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/cache.d.ts +57 -0
  8. package/dist/extensions/cache.d.ts.map +1 -0
  9. package/dist/extensions/cache.js +173 -0
  10. package/dist/extensions/cache.js.map +1 -0
  11. package/dist/extensions/client.d.ts +55 -0
  12. package/dist/extensions/client.d.ts.map +1 -0
  13. package/dist/extensions/client.js +120 -0
  14. package/dist/extensions/client.js.map +1 -0
  15. package/dist/extensions/index.d.ts +13 -0
  16. package/dist/extensions/index.d.ts.map +1 -0
  17. package/dist/extensions/index.js +12 -0
  18. package/dist/extensions/index.js.map +1 -0
  19. package/dist/extensions/loader.d.ts +50 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +166 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/manifest.d.ts +38 -0
  24. package/dist/extensions/manifest.d.ts.map +1 -0
  25. package/dist/extensions/manifest.js +17 -0
  26. package/dist/extensions/manifest.js.map +1 -0
  27. package/dist/extensions/stubs.d.ts +27 -0
  28. package/dist/extensions/stubs.d.ts.map +1 -0
  29. package/dist/extensions/stubs.js +45 -0
  30. package/dist/extensions/stubs.js.map +1 -0
  31. package/dist/lib/audit.js +2 -2
  32. package/dist/lib/audit.js.map +1 -1
  33. package/dist/lib/brain-migrate.d.ts +21 -0
  34. package/dist/lib/brain-migrate.d.ts.map +1 -0
  35. package/dist/lib/brain-migrate.js +137 -0
  36. package/dist/lib/brain-migrate.js.map +1 -0
  37. package/dist/lib/paths.d.ts +27 -0
  38. package/dist/lib/paths.d.ts.map +1 -1
  39. package/dist/lib/paths.js +65 -0
  40. package/dist/lib/paths.js.map +1 -1
  41. package/dist/llm/call-log.d.ts +40 -0
  42. package/dist/llm/call-log.d.ts.map +1 -0
  43. package/dist/llm/call-log.js +35 -0
  44. package/dist/llm/call-log.js.map +1 -0
  45. package/dist/llm/complete.d.ts +6 -0
  46. package/dist/llm/complete.d.ts.map +1 -1
  47. package/dist/llm/complete.js +27 -0
  48. package/dist/llm/complete.js.map +1 -1
  49. package/dist/mcp-server.js +118 -2
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/memory/file-backed.d.ts +4 -0
  52. package/dist/memory/file-backed.d.ts.map +1 -1
  53. package/dist/memory/file-backed.js +4 -0
  54. package/dist/memory/file-backed.js.map +1 -1
  55. package/dist/memory/vector-index.d.ts +4 -12
  56. package/dist/memory/vector-index.d.ts.map +1 -1
  57. package/dist/memory/vector-index.js +11 -93
  58. package/dist/memory/vector-index.js.map +1 -1
  59. package/dist/search/brain-docs.d.ts +17 -7
  60. package/dist/search/brain-docs.d.ts.map +1 -1
  61. package/dist/search/brain-docs.js +170 -52
  62. package/dist/search/brain-docs.js.map +1 -1
  63. package/dist/search/brain-rag.d.ts +45 -0
  64. package/dist/search/brain-rag.d.ts.map +1 -0
  65. package/dist/search/brain-rag.js +275 -0
  66. package/dist/search/brain-rag.js.map +1 -0
  67. package/dist/search/chunker.d.ts +24 -0
  68. package/dist/search/chunker.d.ts.map +1 -0
  69. package/dist/search/chunker.js +95 -0
  70. package/dist/search/chunker.js.map +1 -0
  71. package/dist/search/embedder.d.ts +16 -0
  72. package/dist/search/embedder.d.ts.map +1 -0
  73. package/dist/search/embedder.js +108 -0
  74. package/dist/search/embedder.js.map +1 -0
  75. package/dist/search/file-watcher.d.ts +11 -0
  76. package/dist/search/file-watcher.d.ts.map +1 -0
  77. package/dist/search/file-watcher.js +86 -0
  78. package/dist/search/file-watcher.js.map +1 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +814 -472
  81. package/dist/server.js.map +1 -1
  82. package/dist/sessions/store.d.ts +9 -0
  83. package/dist/sessions/store.d.ts.map +1 -1
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/settings.d.ts +26 -0
  86. package/dist/settings.d.ts.map +1 -1
  87. package/dist/settings.js +78 -2
  88. package/dist/settings.js.map +1 -1
  89. package/dist/tracing/init.d.ts +1 -1
  90. package/dist/tracing/init.d.ts.map +1 -1
  91. package/dist/utils/logger.js +2 -2
  92. package/dist/utils/logger.js.map +1 -1
  93. package/module-tiers.json +164 -0
  94. package/package.json +9 -13
  95. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  96. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  97. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  98. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  99. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  100. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  101. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  102. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  103. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  104. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  105. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  106. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  107. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  108. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  109. package/public/index.html +379 -59
  110. package/dist/agents/autonomous.js +0 -749
  111. package/dist/agents/autonomous.js.map +0 -1
  112. package/dist/agents/commit.js +0 -113
  113. package/dist/agents/commit.js.map +0 -1
  114. package/dist/agents/continue.js +0 -158
  115. package/dist/agents/continue.js.map +0 -1
  116. package/dist/agents/cooldown.js +0 -397
  117. package/dist/agents/cooldown.js.map +0 -1
  118. package/dist/agents/dedup-guard.js +0 -131
  119. package/dist/agents/dedup-guard.js.map +0 -1
  120. package/dist/agents/feed.js +0 -176
  121. package/dist/agents/feed.js.map +0 -1
  122. package/dist/agents/governance.js +0 -292
  123. package/dist/agents/governance.js.map +0 -1
  124. package/dist/agents/governed-spawn.js +0 -192
  125. package/dist/agents/governed-spawn.js.map +0 -1
  126. package/dist/agents/heartbeat.js +0 -324
  127. package/dist/agents/heartbeat.js.map +0 -1
  128. package/dist/agents/instance-manager.js +0 -850
  129. package/dist/agents/instance-manager.js.map +0 -1
  130. package/dist/agents/issue-reporter.js +0 -123
  131. package/dist/agents/issue-reporter.js.map +0 -1
  132. package/dist/agents/issues.js +0 -141
  133. package/dist/agents/issues.js.map +0 -1
  134. package/dist/agents/locks.js +0 -234
  135. package/dist/agents/locks.js.map +0 -1
  136. package/dist/agents/memory.js +0 -93
  137. package/dist/agents/memory.js.map +0 -1
  138. package/dist/agents/monitor.js +0 -235
  139. package/dist/agents/monitor.js.map +0 -1
  140. package/dist/agents/orchestration.js +0 -715
  141. package/dist/agents/orchestration.js.map +0 -1
  142. package/dist/agents/recover.js +0 -166
  143. package/dist/agents/recover.js.map +0 -1
  144. package/dist/agents/reflection.js +0 -199
  145. package/dist/agents/reflection.js.map +0 -1
  146. package/dist/agents/runtime/bus.js +0 -174
  147. package/dist/agents/runtime/bus.js.map +0 -1
  148. package/dist/agents/runtime/config.js +0 -101
  149. package/dist/agents/runtime/config.js.map +0 -1
  150. package/dist/agents/runtime/driver.js +0 -214
  151. package/dist/agents/runtime/driver.js.map +0 -1
  152. package/dist/agents/runtime/errors.js +0 -40
  153. package/dist/agents/runtime/errors.js.map +0 -1
  154. package/dist/agents/runtime/index.js +0 -54
  155. package/dist/agents/runtime/index.js.map +0 -1
  156. package/dist/agents/runtime/lifecycle.js +0 -116
  157. package/dist/agents/runtime/lifecycle.js.map +0 -1
  158. package/dist/agents/runtime/manager.js +0 -948
  159. package/dist/agents/runtime/manager.js.map +0 -1
  160. package/dist/agents/runtime/registry.js +0 -195
  161. package/dist/agents/runtime/registry.js.map +0 -1
  162. package/dist/agents/runtime/resources.js +0 -146
  163. package/dist/agents/runtime/resources.js.map +0 -1
  164. package/dist/agents/runtime/types.js +0 -24
  165. package/dist/agents/runtime/types.js.map +0 -1
  166. package/dist/agents/spawn-policy.js +0 -202
  167. package/dist/agents/spawn-policy.js.map +0 -1
  168. package/dist/agents/spawn.js +0 -970
  169. package/dist/agents/spawn.js.map +0 -1
  170. package/dist/agents/triage.js +0 -81
  171. package/dist/agents/triage.js.map +0 -1
  172. package/dist/agents/workflow.js +0 -543
  173. package/dist/agents/workflow.js.map +0 -1
  174. package/dist/avatar/client.js +0 -172
  175. package/dist/avatar/client.js.map +0 -1
  176. package/dist/avatar/sidecar.js +0 -125
  177. package/dist/avatar/sidecar.js.map +0 -1
  178. package/dist/browser/sessions.js +0 -122
  179. package/dist/browser/sessions.js.map +0 -1
  180. package/dist/capabilities/definitions/browser.js +0 -242
  181. package/dist/capabilities/definitions/browser.js.map +0 -1
  182. package/dist/channels/whatsapp.js +0 -200
  183. package/dist/channels/whatsapp.js.map +0 -1
  184. package/dist/credentials/store.js +0 -189
  185. package/dist/credentials/store.js.map +0 -1
  186. package/dist/files/deep-index.js +0 -337
  187. package/dist/files/deep-index.js.map +0 -1
  188. package/dist/files/extract.js +0 -33
  189. package/dist/files/extract.js.map +0 -1
  190. package/dist/files/gdrive.js +0 -246
  191. package/dist/files/gdrive.js.map +0 -1
  192. package/dist/github/client.js +0 -408
  193. package/dist/github/client.js.map +0 -1
  194. package/dist/github/commit-analysis.js +0 -276
  195. package/dist/github/commit-analysis.js.map +0 -1
  196. package/dist/github/contributor-stats.js +0 -119
  197. package/dist/github/contributor-stats.js.map +0 -1
  198. package/dist/github/issue-sla.js +0 -220
  199. package/dist/github/issue-sla.js.map +0 -1
  200. package/dist/github/issue-triage.js +0 -286
  201. package/dist/github/issue-triage.js.map +0 -1
  202. package/dist/github/pr-readiness.js +0 -197
  203. package/dist/github/pr-readiness.js.map +0 -1
  204. package/dist/github/pr-review.js +0 -410
  205. package/dist/github/pr-review.js.map +0 -1
  206. package/dist/github/release-notes.js +0 -227
  207. package/dist/github/release-notes.js.map +0 -1
  208. package/dist/github/repo-health.js +0 -303
  209. package/dist/github/repo-health.js.map +0 -1
  210. package/dist/github/retry.js +0 -117
  211. package/dist/github/retry.js.map +0 -1
  212. package/dist/github/types.js +0 -8
  213. package/dist/github/types.js.map +0 -1
  214. package/dist/github/webhooks.js +0 -153
  215. package/dist/github/webhooks.js.map +0 -1
  216. package/dist/google/auth.js +0 -325
  217. package/dist/google/auth.js.map +0 -1
  218. package/dist/google/calendar-timer.js +0 -91
  219. package/dist/google/calendar-timer.js.map +0 -1
  220. package/dist/google/calendar.js +0 -270
  221. package/dist/google/calendar.js.map +0 -1
  222. package/dist/google/docs.js +0 -309
  223. package/dist/google/docs.js.map +0 -1
  224. package/dist/google/gmail-send.js +0 -219
  225. package/dist/google/gmail-send.js.map +0 -1
  226. package/dist/google/gmail-timer.js +0 -223
  227. package/dist/google/gmail-timer.js.map +0 -1
  228. package/dist/google/gmail.js +0 -470
  229. package/dist/google/gmail.js.map +0 -1
  230. package/dist/google/plugin.js +0 -169
  231. package/dist/google/plugin.js.map +0 -1
  232. package/dist/google/tasks-timer.js +0 -107
  233. package/dist/google/tasks-timer.js.map +0 -1
  234. package/dist/google/tasks.js +0 -331
  235. package/dist/google/tasks.js.map +0 -1
  236. package/dist/google/temporal.js +0 -176
  237. package/dist/google/temporal.js.map +0 -1
  238. package/dist/integrations/gate.js +0 -100
  239. package/dist/integrations/gate.js.map +0 -1
  240. package/dist/integrations/github.js +0 -331
  241. package/dist/integrations/github.js.map +0 -1
  242. package/dist/integrations/google-tasks.js +0 -432
  243. package/dist/integrations/google-tasks.js.map +0 -1
  244. package/dist/mdns.js +0 -110
  245. package/dist/mdns.js.map +0 -1
  246. package/dist/notifications/channel.js +0 -83
  247. package/dist/notifications/channel.js.map +0 -1
  248. package/dist/notifications/channels/adapter.js +0 -55
  249. package/dist/notifications/channels/adapter.js.map +0 -1
  250. package/dist/notifications/channels/index.js +0 -6
  251. package/dist/notifications/channels/index.js.map +0 -1
  252. package/dist/notifications/channels/log.js +0 -29
  253. package/dist/notifications/channels/log.js.map +0 -1
  254. package/dist/notifications/email.js +0 -72
  255. package/dist/notifications/email.js.map +0 -1
  256. package/dist/notifications/engine.js +0 -198
  257. package/dist/notifications/engine.js.map +0 -1
  258. package/dist/notifications/index.js +0 -24
  259. package/dist/notifications/index.js.map +0 -1
  260. package/dist/notifications/phone.js +0 -48
  261. package/dist/notifications/phone.js.map +0 -1
  262. package/dist/notifications/sms.js +0 -65
  263. package/dist/notifications/sms.js.map +0 -1
  264. package/dist/notifications/types.js +0 -14
  265. package/dist/notifications/types.js.map +0 -1
  266. package/dist/notifications/webhook.js +0 -65
  267. package/dist/notifications/webhook.js.map +0 -1
  268. package/dist/resend/inbox.js +0 -199
  269. package/dist/resend/inbox.js.map +0 -1
  270. package/dist/resend/webhooks.js +0 -244
  271. package/dist/resend/webhooks.js.map +0 -1
  272. package/dist/search/browse.js +0 -225
  273. package/dist/search/browse.js.map +0 -1
  274. package/dist/search/perplexity.js +0 -41
  275. package/dist/search/perplexity.js.map +0 -1
  276. package/dist/slack/channels.js +0 -277
  277. package/dist/slack/channels.js.map +0 -1
  278. package/dist/slack/client.js +0 -468
  279. package/dist/slack/client.js.map +0 -1
  280. package/dist/slack/retry.js +0 -100
  281. package/dist/slack/retry.js.map +0 -1
  282. package/dist/slack/types.js +0 -52
  283. package/dist/slack/types.js.map +0 -1
  284. package/dist/slack/webhooks.js +0 -285
  285. package/dist/slack/webhooks.js.map +0 -1
  286. package/dist/stt/client.js +0 -66
  287. package/dist/stt/client.js.map +0 -1
  288. package/dist/stt/sidecar.js +0 -115
  289. package/dist/stt/sidecar.js.map +0 -1
  290. package/dist/tracing/bridge.js +0 -70
  291. package/dist/tracing/bridge.js.map +0 -1
  292. package/dist/tracing/correlation.js +0 -49
  293. package/dist/tracing/correlation.js.map +0 -1
  294. package/dist/tracing/index.js +0 -18
  295. package/dist/tracing/index.js.map +0 -1
  296. package/dist/tracing/init.js +0 -81
  297. package/dist/tracing/init.js.map +0 -1
  298. package/dist/tracing/instrument.js +0 -145
  299. package/dist/tracing/instrument.js.map +0 -1
  300. package/dist/tracing/middleware.js +0 -69
  301. package/dist/tracing/middleware.js.map +0 -1
  302. package/dist/tracing/tracer.js +0 -327
  303. package/dist/tracing/tracer.js.map +0 -1
  304. package/dist/tts/client.js +0 -48
  305. package/dist/tts/client.js.map +0 -1
  306. package/dist/tts/sidecar.js +0 -148
  307. package/dist/tts/sidecar.js.map +0 -1
  308. package/dist/twilio/call.js +0 -79
  309. package/dist/twilio/call.js.map +0 -1
  310. package/dist/vault/matcher.js +0 -197
  311. package/dist/vault/matcher.js.map +0 -1
  312. package/dist/vault/personal.js +0 -163
  313. package/dist/vault/personal.js.map +0 -1
  314. package/dist/vault/policy.js +0 -159
  315. package/dist/vault/policy.js.map +0 -1
  316. package/dist/vault/store.js +0 -122
  317. package/dist/vault/store.js.map +0 -1
  318. package/dist/vault/transfer.js +0 -188
  319. package/dist/vault/transfer.js.map +0 -1
  320. package/dist/volumes/index.js +0 -2
  321. package/dist/volumes/index.js.map +0 -1
  322. package/dist/volumes/manager.js +0 -462
  323. package/dist/volumes/manager.js.map +0 -1
  324. package/dist/volumes/types.js +0 -8
  325. package/dist/volumes/types.js.map +0 -1
  326. package/dist/webhooks/config.js +0 -214
  327. package/dist/webhooks/config.js.map +0 -1
  328. package/dist/webhooks/event-log.js +0 -132
  329. package/dist/webhooks/event-log.js.map +0 -1
  330. package/dist/webhooks/handler.js +0 -103
  331. package/dist/webhooks/handler.js.map +0 -1
  332. package/dist/webhooks/handlers.js +0 -231
  333. package/dist/webhooks/handlers.js.map +0 -1
  334. package/dist/webhooks/index.js +0 -33
  335. package/dist/webhooks/index.js.map +0 -1
  336. package/dist/webhooks/mount.js +0 -400
  337. package/dist/webhooks/mount.js.map +0 -1
  338. package/dist/webhooks/registry.js +0 -143
  339. package/dist/webhooks/registry.js.map +0 -1
  340. package/dist/webhooks/relay.js +0 -53
  341. package/dist/webhooks/relay.js.map +0 -1
  342. package/dist/webhooks/retry.js +0 -270
  343. package/dist/webhooks/retry.js.map +0 -1
  344. package/dist/webhooks/router.js +0 -290
  345. package/dist/webhooks/router.js.map +0 -1
  346. package/dist/webhooks/twilio.js +0 -129
  347. package/dist/webhooks/twilio.js.map +0 -1
  348. package/dist/webhooks/types.js +0 -8
  349. package/dist/webhooks/types.js.map +0 -1
  350. package/dist/webhooks/verify.js +0 -154
  351. package/dist/webhooks/verify.js.map +0 -1
@@ -1,93 +0,0 @@
1
- /**
2
- * Writes agent task outcomes to episodic LTM (experiences.jsonl).
3
- * Memory entries are the durable control surface — notifications are ephemeral,
4
- * but these persist and are retrievable by future turns via Brain.retrieve().
5
- */
6
- import { join } from "node:path";
7
- import { FileSystemLongTermMemory } from "../memory/file-backed.js";
8
- import { createLogger } from "../utils/logger.js";
9
- import { getEncryptionKey } from "../lib/key-store.js";
10
- import { appendBrainLine, ensureBrainJsonl } from "../lib/brain-io.js";
11
- import { BRAIN_DIR } from "../lib/paths.js";
12
- const log = createLogger("agent-memory");
13
- const MEMORY_DIR = join(BRAIN_DIR, "memory");
14
- const SCARS_FILE = join(MEMORY_DIR, "scars.jsonl");
15
- const SCARS_SCHEMA = JSON.stringify({
16
- _schema: "scar",
17
- _version: "1.0",
18
- _description: "Self-repairs proven by code + tests + validation. Append-only.",
19
- });
20
- function generateScarId() {
21
- return `scar_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`;
22
- }
23
- /** Append a scar record to brain/memory/scars.jsonl. */
24
- export async function recordScar(record) {
25
- const full = { id: generateScarId(), ...record };
26
- await ensureBrainJsonl(SCARS_FILE, SCARS_SCHEMA);
27
- await appendBrainLine(SCARS_FILE, JSON.stringify(full));
28
- log.info("Scar recorded", { id: full.id, anchor: full.anchor, agentId: full.agentId });
29
- return full;
30
- }
31
- /** Lazy LTM factory — picks up encryption key at call time, not import time. */
32
- function getLtm() {
33
- return new FileSystemLongTermMemory(MEMORY_DIR, getEncryptionKey() ?? undefined);
34
- }
35
- /** Write an episodic memory entry for an agent task outcome. */
36
- export async function rememberTaskOutcome(task, output) {
37
- const outputSnippet = output?.trim().slice(0, 500) || "";
38
- const lines = [
39
- `Agent task "${task.label}" ${task.status}.`,
40
- task.origin === "ai" ? "Triggered by AI." : "Triggered by user.",
41
- task.exitCode != null ? `Exit code: ${task.exitCode}.` : "",
42
- task.error ? `Error: ${task.error}` : "",
43
- outputSnippet ? `Result: ${outputSnippet}` : "",
44
- ].filter(Boolean);
45
- await getLtm().add({
46
- type: "episodic",
47
- content: lines.join(" "),
48
- meta: {
49
- source: "agent",
50
- taskId: task.id,
51
- status: task.status,
52
- label: task.label,
53
- origin: task.origin,
54
- ...(task.exitCode != null ? { exitCode: task.exitCode } : {}),
55
- ...(task.boardTaskId ? { boardTaskId: task.boardTaskId } : {}),
56
- },
57
- });
58
- log.info("Task outcome recorded", { taskId: task.id, label: task.label, status: task.status });
59
- }
60
- /** Write an episodic memory entry when a board/queue task reaches a terminal state. */
61
- export async function rememberTaskCompletion(task, fromState) {
62
- const verb = task.state === "done" ? "completed" : "cancelled";
63
- const desc = task.description?.slice(0, 300) || "";
64
- // Build resolution trail from exchanges (agent comments, chat notes, etc.)
65
- const resolutionNotes = task.exchanges
66
- .map((ex) => `[${ex.author}] ${ex.body}`)
67
- .join(" → ");
68
- const trail = resolutionNotes ? resolutionNotes.slice(0, 600) : "";
69
- const lines = [
70
- `Task ${task.identifier} ${verb}: "${task.title}".`,
71
- task.project ? `Project: ${task.project}.` : "",
72
- `Transitioned from ${fromState}.`,
73
- desc ? `Details: ${desc}` : "",
74
- trail ? `Resolution trail: ${trail}` : "",
75
- ].filter(Boolean);
76
- await getLtm().add({
77
- type: "episodic",
78
- content: lines.join(" "),
79
- meta: {
80
- source: "task-bridge",
81
- taskId: task.id,
82
- identifier: task.identifier,
83
- project: task.project || "",
84
- state: task.state,
85
- fromState,
86
- exchangeCount: task.exchanges.length,
87
- ...(task.agentTaskId ? { agentTaskId: task.agentTaskId } : {}),
88
- ...(task.origin ? { origin: task.origin } : {}),
89
- },
90
- });
91
- log.info("Task completion recorded", { taskId: task.id, identifier: task.identifier, state: task.state });
92
- }
93
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/agents/memory.ts"],"names":[],"mappings":"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"}
@@ -1,235 +0,0 @@
1
- import { listTasks, updateTask, readTaskOutput } from "./store.js";
2
- import { spawnAgent, updateBoardTaskState } from "./spawn.js";
3
- import { pushNotification } from "../goals/notifications.js";
4
- import { logActivity } from "../activity/log.js";
5
- import { rememberTaskOutcome } from "./memory.js";
6
- import { pruneRecoveryTracking, attemptRecovery } from "./recover.js";
7
- import { createLogger } from "../utils/logger.js";
8
- import { getRuntime } from "./runtime/index.js";
9
- const log = createLogger("agent-monitor");
10
- const POLL_INTERVAL_MS = 15_000;
11
- let pollTimer = null;
12
- /**
13
- * Set of task IDs we're monitoring (recovered PIDs that we didn't spawn).
14
- * For PIDs we spawned, the exit handler in spawn.ts handles completion.
15
- * This set tracks recovered PIDs that need poll-based monitoring.
16
- *
17
- * Only contains tasks NOT managed by the RuntimeManager — pool-spawned
18
- * tasks are handled by the RuntimeManager's own monitor cycle.
19
- */
20
- const monitoredPids = new Map();
21
- /** Check if a process is alive by sending signal 0. */
22
- function isPidAlive(pid) {
23
- try {
24
- process.kill(pid, 0);
25
- return true;
26
- }
27
- catch {
28
- return false;
29
- }
30
- }
31
- /**
32
- * Check if a task is managed by the RuntimeManager.
33
- * Tasks spawned via the agent pool have a corresponding runtime instance
34
- * and should NOT be double-recovered by the monitor.
35
- */
36
- function isRuntimeManaged(taskId) {
37
- const runtime = getRuntime();
38
- return runtime?.getByTaskId(taskId) != null;
39
- }
40
- /**
41
- * Called once at startup. Scans all task files and recovers state:
42
- * - running + PID alive → register for monitoring (only if not runtime-managed)
43
- * - running + PID dead → read log, mark completed/failed (only if not runtime-managed)
44
- * - pending → re-spawn (only if not runtime-managed)
45
- *
46
- * IMPORTANT: Call this AFTER createRuntime() so the runtime registry is
47
- * available for dedup checks. Tasks managed by the RuntimeManager are
48
- * skipped — its own recoverAgents() handles them.
49
- */
50
- export async function recoverTasks() {
51
- log.info("Recovering tasks from previous session");
52
- const tasks = await listTasks();
53
- let recovered = 0;
54
- let requeued = 0;
55
- let skippedRuntime = 0;
56
- // Separate tasks by recovery action for parallel processing
57
- const aliveTasks = [];
58
- const deadTasks = [];
59
- const pendingTasks = [];
60
- for (const task of tasks) {
61
- // Skip tasks managed by the RuntimeManager — prevents double-recovery
62
- // that causes duplicate retries + recovery agent fan-out (DASH-82)
63
- if (isRuntimeManaged(task.id)) {
64
- skippedRuntime++;
65
- continue;
66
- }
67
- if (task.status === "running" && task.pid) {
68
- if (isPidAlive(task.pid)) {
69
- aliveTasks.push(task);
70
- }
71
- else {
72
- deadTasks.push(task);
73
- }
74
- }
75
- else if (task.status === "pending") {
76
- pendingTasks.push(task);
77
- }
78
- }
79
- if (skippedRuntime > 0) {
80
- log.info(`Skipped ${skippedRuntime} runtime-managed task(s) — RuntimeManager handles recovery`);
81
- }
82
- // Register alive processes (no I/O needed)
83
- for (const task of aliveTasks) {
84
- monitoredPids.set(task.id, task.pid);
85
- recovered++;
86
- logActivity({
87
- source: "agent",
88
- summary: `Recovered running agent: ${task.label}`,
89
- detail: `PID ${task.pid} still alive`,
90
- actionLabel: task.origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
91
- reason: "monitor recovered running process",
92
- });
93
- }
94
- // Recover dead tasks in parallel (each reads task output from disk)
95
- if (deadTasks.length > 0) {
96
- await Promise.all(deadTasks.map(async (task) => {
97
- const output = await readTaskOutput(task.id);
98
- const hasOutput = output.trim().length > 0;
99
- const finalStatus = hasOutput ? "completed" : "failed";
100
- await updateTask(task.id, {
101
- status: finalStatus,
102
- finishedAt: new Date().toISOString(),
103
- resultSummary: hasOutput ? output.slice(0, 500) : undefined,
104
- error: hasOutput ? undefined : "Process died while server was down (no output)",
105
- });
106
- // Update board task state on recovery
107
- if (task.boardTaskId) {
108
- if (finalStatus === "completed") {
109
- updateBoardTaskState(task.boardTaskId, { state: "done" });
110
- }
111
- else {
112
- updateBoardTaskState(task.boardTaskId, { state: "todo", assignee: null });
113
- }
114
- }
115
- rememberTaskOutcome({ ...task, status: finalStatus, error: hasOutput ? undefined : "Process died while server was down" }, output).catch(() => { });
116
- logActivity({
117
- source: "agent",
118
- summary: `Recovered ${finalStatus} agent: ${task.label}`,
119
- detail: `PID ${task.pid} was dead on recovery`,
120
- actionLabel: task.origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
121
- reason: "monitor detected process exit",
122
- });
123
- const outputSnippet = hasOutput
124
- ? `\nOutput:\n${output.trim().slice(0, 1000)}`
125
- : "";
126
- pushNotification({
127
- timestamp: new Date().toISOString(),
128
- source: "agent",
129
- message: `Agent task "${task.label}" ${finalStatus} (recovered after restart).${outputSnippet}`,
130
- });
131
- }));
132
- }
133
- // Re-queue pending tasks with staggered delays
134
- for (const task of pendingTasks) {
135
- requeued++;
136
- const delayMs = requeued * 2000;
137
- logActivity({
138
- source: "agent",
139
- summary: `Re-queuing pending agent (${delayMs}ms delay): ${task.label}`,
140
- actionLabel: task.origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
141
- reason: "monitor re-queuing pending task",
142
- });
143
- setTimeout(() => {
144
- spawnAgent(task).catch((err) => {
145
- logActivity({
146
- source: "agent",
147
- summary: `Failed to re-spawn agent: ${task.label}`,
148
- detail: err.message,
149
- actionLabel: task.origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
150
- reason: "monitor re-spawn failed",
151
- });
152
- });
153
- }, delayMs);
154
- }
155
- if (recovered > 0 || requeued > 0 || deadTasks.length > 0 || skippedRuntime > 0) {
156
- log.info("Task recovery complete", { recovered, resolved: deadTasks.length, requeued, skippedRuntime });
157
- logActivity({
158
- source: "agent",
159
- summary: `Agent recovery: ${recovered} running, ${deadTasks.length} resolved, ${requeued} re-queued${skippedRuntime > 0 ? `, ${skippedRuntime} runtime-managed` : ""}`,
160
- });
161
- }
162
- }
163
- /** Start the 15s poll loop for monitoring recovered PIDs. */
164
- export function startAgentMonitor() {
165
- if (pollTimer)
166
- return;
167
- pollTimer = setInterval(async () => {
168
- // Periodically prune the recovery tracking set to prevent memory growth
169
- pruneRecoveryTracking();
170
- for (const [taskId, pid] of monitoredPids) {
171
- if (!isPidAlive(pid)) {
172
- log.info(`Monitored PID exited`, { taskId, pid });
173
- monitoredPids.delete(taskId);
174
- const output = await readTaskOutput(taskId);
175
- const hasOutput = output.trim().length > 0;
176
- const finalStatus = hasOutput ? "completed" : "failed";
177
- const updated = await updateTask(taskId, {
178
- status: finalStatus,
179
- finishedAt: new Date().toISOString(),
180
- resultSummary: hasOutput ? output.slice(0, 500) : undefined,
181
- error: hasOutput ? undefined : "Process exited with no output",
182
- });
183
- const label = updated?.label ?? taskId;
184
- // Update board task state from monitor
185
- const boardTaskId = updated?.boardTaskId;
186
- if (boardTaskId) {
187
- if (finalStatus === "completed") {
188
- updateBoardTaskState(boardTaskId, { state: "done" });
189
- }
190
- else {
191
- updateBoardTaskState(boardTaskId, { state: "todo", assignee: null });
192
- }
193
- }
194
- if (updated) {
195
- rememberTaskOutcome(updated, output).catch(() => { });
196
- }
197
- logActivity({
198
- source: "agent",
199
- summary: `Agent ${finalStatus}: ${label}`,
200
- detail: `Detected via monitor poll (PID ${pid})`,
201
- actionLabel: updated?.origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
202
- reason: "monitor detected process exit",
203
- });
204
- const outputSnippet = hasOutput
205
- ? `\nOutput:\n${output.trim().slice(0, 1000)}`
206
- : "";
207
- pushNotification({
208
- timestamp: new Date().toISOString(),
209
- source: "agent",
210
- message: `Agent task "${label}" ${finalStatus}.${outputSnippet}`,
211
- });
212
- // Attempt recovery for failed monitored tasks — but ONLY for tasks
213
- // not managed by the RuntimeManager. Runtime-managed tasks should never
214
- // be in monitoredPids (filtered in recoverTasks), but guard here too
215
- // to prevent double-retry fan-out (DASH-82).
216
- if (finalStatus === "failed" && updated && updated.origin === "ai") {
217
- if (isRuntimeManaged(taskId)) {
218
- log.info(`Skipping recovery for runtime-managed task: ${label}`, { taskId });
219
- }
220
- else {
221
- attemptRecovery({ ...updated, status: "failed", error: "Process exited with no output" }, output).catch(() => { });
222
- }
223
- }
224
- }
225
- }
226
- }, POLL_INTERVAL_MS);
227
- }
228
- /** Stop the poll loop. */
229
- export function stopAgentMonitor() {
230
- if (pollTimer) {
231
- clearInterval(pollTimer);
232
- pollTimer = null;
233
- }
234
- }
235
- //# sourceMappingURL=monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/agents/monitor.ts"],"names":[],"mappings":"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"}