@animalabs/agent-framework 0.27.0 → 0.29.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 (344) hide show
  1. package/README.md +145 -41
  2. package/dist/src/agent.d.ts +29 -2
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +73 -12
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server-core.d.ts.map +1 -1
  7. package/dist/src/api/mcp-server-core.js +3 -12
  8. package/dist/src/api/mcp-server-core.js.map +1 -1
  9. package/dist/src/api/server.d.ts.map +1 -1
  10. package/dist/src/api/server.js +11 -5
  11. package/dist/src/api/server.js.map +1 -1
  12. package/dist/src/auto-continue.d.ts +5 -2
  13. package/dist/src/auto-continue.d.ts.map +1 -1
  14. package/dist/src/auto-continue.js +9 -5
  15. package/dist/src/auto-continue.js.map +1 -1
  16. package/dist/src/code-execution/isolate/runner.d.ts +7 -5
  17. package/dist/src/code-execution/isolate/runner.d.ts.map +1 -1
  18. package/dist/src/code-execution/isolate/runner.js +7 -5
  19. package/dist/src/code-execution/isolate/runner.js.map +1 -1
  20. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  21. package/dist/src/code-execution/isolate/scripts.js +3 -2
  22. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  23. package/dist/src/cut-off-round.d.ts +24 -0
  24. package/dist/src/cut-off-round.d.ts.map +1 -0
  25. package/dist/src/cut-off-round.js +87 -0
  26. package/dist/src/cut-off-round.js.map +1 -0
  27. package/dist/src/framework.d.ts +468 -125
  28. package/dist/src/framework.d.ts.map +1 -1
  29. package/dist/src/framework.js +3651 -1111
  30. package/dist/src/framework.js.map +1 -1
  31. package/dist/src/gate/event-gate.d.ts +133 -13
  32. package/dist/src/gate/event-gate.d.ts.map +1 -1
  33. package/dist/src/gate/event-gate.js +654 -59
  34. package/dist/src/gate/event-gate.js.map +1 -1
  35. package/dist/src/gate/index.d.ts +3 -2
  36. package/dist/src/gate/index.d.ts.map +1 -1
  37. package/dist/src/gate/index.js +2 -1
  38. package/dist/src/gate/index.js.map +1 -1
  39. package/dist/src/gate/reply-judge.d.ts +116 -0
  40. package/dist/src/gate/reply-judge.d.ts.map +1 -0
  41. package/dist/src/gate/reply-judge.js +467 -0
  42. package/dist/src/gate/reply-judge.js.map +1 -0
  43. package/dist/src/gate/types.d.ts +173 -2
  44. package/dist/src/gate/types.d.ts.map +1 -1
  45. package/dist/src/heartbeat/heartbeat.d.ts +202 -0
  46. package/dist/src/heartbeat/heartbeat.d.ts.map +1 -0
  47. package/dist/src/heartbeat/heartbeat.js +778 -0
  48. package/dist/src/heartbeat/heartbeat.js.map +1 -0
  49. package/dist/src/heartbeat/reminder-time.d.ts +5 -0
  50. package/dist/src/heartbeat/reminder-time.d.ts.map +1 -0
  51. package/dist/src/heartbeat/reminder-time.js +107 -0
  52. package/dist/src/heartbeat/reminder-time.js.map +1 -0
  53. package/dist/src/held-writes.d.ts +3 -3
  54. package/dist/src/held-writes.js +3 -3
  55. package/dist/src/host-presentation.d.ts +170 -0
  56. package/dist/src/host-presentation.d.ts.map +1 -0
  57. package/dist/src/host-presentation.js +561 -0
  58. package/dist/src/host-presentation.js.map +1 -0
  59. package/dist/src/index.d.ts +5 -1
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +3 -1
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/line-reader.d.ts +4 -0
  64. package/dist/src/line-reader.d.ts.map +1 -0
  65. package/dist/src/line-reader.js +59 -0
  66. package/dist/src/line-reader.js.map +1 -0
  67. package/dist/src/mcpl/capability-mask.d.ts.map +1 -1
  68. package/dist/src/mcpl/capability-mask.js +3 -2
  69. package/dist/src/mcpl/capability-mask.js.map +1 -1
  70. package/dist/src/mcpl/channel-registry.d.ts +34 -6
  71. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  72. package/dist/src/mcpl/channel-registry.js +133 -54
  73. package/dist/src/mcpl/channel-registry.js.map +1 -1
  74. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  75. package/dist/src/mcpl/conversation-router.js +2 -1
  76. package/dist/src/mcpl/conversation-router.js.map +1 -1
  77. package/dist/src/mcpl/convert-block.d.ts +1 -0
  78. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  79. package/dist/src/mcpl/convert-block.js +16 -4
  80. package/dist/src/mcpl/convert-block.js.map +1 -1
  81. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  82. package/dist/src/mcpl/hook-orchestrator.js +4 -3
  83. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  84. package/dist/src/mcpl/inbound-source.d.ts +29 -11
  85. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  86. package/dist/src/mcpl/inbound-source.js +43 -70
  87. package/dist/src/mcpl/inbound-source.js.map +1 -1
  88. package/dist/src/mcpl/modern-connection.d.ts.map +1 -1
  89. package/dist/src/mcpl/modern-connection.js +11 -7
  90. package/dist/src/mcpl/modern-connection.js.map +1 -1
  91. package/dist/src/mcpl/protocol-family.d.ts +3 -2
  92. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  93. package/dist/src/mcpl/protocol-family.js +25 -3
  94. package/dist/src/mcpl/protocol-family.js.map +1 -1
  95. package/dist/src/mcpl/push-handler.js +2 -2
  96. package/dist/src/mcpl/push-handler.js.map +1 -1
  97. package/dist/src/mcpl/references.d.ts +12 -40
  98. package/dist/src/mcpl/references.d.ts.map +1 -1
  99. package/dist/src/mcpl/references.js +29 -23
  100. package/dist/src/mcpl/references.js.map +1 -1
  101. package/dist/src/mcpl/server-connection.d.ts +18 -8
  102. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  103. package/dist/src/mcpl/server-connection.js +70 -30
  104. package/dist/src/mcpl/server-connection.js.map +1 -1
  105. package/dist/src/mcpl/skip-reply-wake.d.ts +25 -0
  106. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -1
  107. package/dist/src/mcpl/skip-reply-wake.js +25 -0
  108. package/dist/src/mcpl/skip-reply-wake.js.map +1 -1
  109. package/dist/src/mcpl/tags.d.ts +9 -2
  110. package/dist/src/mcpl/tags.d.ts.map +1 -1
  111. package/dist/src/mcpl/tags.js +12 -2
  112. package/dist/src/mcpl/tags.js.map +1 -1
  113. package/dist/src/mcpl/tool-presence.d.ts +66 -14
  114. package/dist/src/mcpl/tool-presence.d.ts.map +1 -1
  115. package/dist/src/mcpl/tool-presence.js +150 -80
  116. package/dist/src/mcpl/tool-presence.js.map +1 -1
  117. package/dist/src/mcpl/tool-signature.d.ts +10 -3
  118. package/dist/src/mcpl/tool-signature.d.ts.map +1 -1
  119. package/dist/src/mcpl/tool-signature.js +60 -30
  120. package/dist/src/mcpl/tool-signature.js.map +1 -1
  121. package/dist/src/mcpl/toolset-host.d.ts +88 -55
  122. package/dist/src/mcpl/toolset-host.d.ts.map +1 -1
  123. package/dist/src/mcpl/toolset-host.js +220 -111
  124. package/dist/src/mcpl/toolset-host.js.map +1 -1
  125. package/dist/src/mcpl/toolsets-module.d.ts +27 -35
  126. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -1
  127. package/dist/src/mcpl/toolsets-module.js +313 -91
  128. package/dist/src/mcpl/toolsets-module.js.map +1 -1
  129. package/dist/src/mcpl/transport.d.ts +1 -1
  130. package/dist/src/mcpl/transport.d.ts.map +1 -1
  131. package/dist/src/mcpl/transport.js +16 -16
  132. package/dist/src/mcpl/transport.js.map +1 -1
  133. package/dist/src/mcpl/types.d.ts +31 -13
  134. package/dist/src/mcpl/types.d.ts.map +1 -1
  135. package/dist/src/mcpl/types.js.map +1 -1
  136. package/dist/src/module-registry.d.ts +10 -8
  137. package/dist/src/module-registry.d.ts.map +1 -1
  138. package/dist/src/module-registry.js +15 -9
  139. package/dist/src/module-registry.js.map +1 -1
  140. package/dist/src/modules/api/index.d.ts.map +1 -1
  141. package/dist/src/modules/api/index.js +4 -2
  142. package/dist/src/modules/api/index.js.map +1 -1
  143. package/dist/src/modules/discord/index.d.ts.map +1 -1
  144. package/dist/src/modules/discord/index.js +33 -25
  145. package/dist/src/modules/discord/index.js.map +1 -1
  146. package/dist/src/modules/history/index.d.ts.map +1 -1
  147. package/dist/src/modules/history/index.js +30 -17
  148. package/dist/src/modules/history/index.js.map +1 -1
  149. package/dist/src/modules/sender-name.d.ts +7 -0
  150. package/dist/src/modules/sender-name.d.ts.map +1 -0
  151. package/dist/src/modules/sender-name.js +10 -0
  152. package/dist/src/modules/sender-name.js.map +1 -0
  153. package/dist/src/modules/workspace/answers.d.ts +26 -0
  154. package/dist/src/modules/workspace/answers.d.ts.map +1 -0
  155. package/dist/src/modules/workspace/answers.js +138 -0
  156. package/dist/src/modules/workspace/answers.js.map +1 -0
  157. package/dist/src/modules/workspace/branch-intent.d.ts +5 -3
  158. package/dist/src/modules/workspace/branch-intent.d.ts.map +1 -1
  159. package/dist/src/modules/workspace/branch-intent.js +6 -2
  160. package/dist/src/modules/workspace/branch-intent.js.map +1 -1
  161. package/dist/src/modules/workspace/direct-write.d.ts +3 -0
  162. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -1
  163. package/dist/src/modules/workspace/direct-write.js +59 -24
  164. package/dist/src/modules/workspace/direct-write.js.map +1 -1
  165. package/dist/src/modules/workspace/disk-agreement.d.ts +33 -11
  166. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  167. package/dist/src/modules/workspace/disk-agreement.js +48 -17
  168. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  169. package/dist/src/modules/workspace/edit-text.d.ts +2 -1
  170. package/dist/src/modules/workspace/edit-text.d.ts.map +1 -1
  171. package/dist/src/modules/workspace/edit-text.js +4 -2
  172. package/dist/src/modules/workspace/edit-text.js.map +1 -1
  173. package/dist/src/modules/workspace/effects.d.ts +4 -2
  174. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  175. package/dist/src/modules/workspace/effects.js +67 -50
  176. package/dist/src/modules/workspace/effects.js.map +1 -1
  177. package/dist/src/modules/workspace/index.d.ts +63 -51
  178. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  179. package/dist/src/modules/workspace/index.js +980 -547
  180. package/dist/src/modules/workspace/index.js.map +1 -1
  181. package/dist/src/modules/workspace/observe.d.ts +125 -82
  182. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  183. package/dist/src/modules/workspace/observe.js +465 -241
  184. package/dist/src/modules/workspace/observe.js.map +1 -1
  185. package/dist/src/modules/workspace/read-page.d.ts.map +1 -1
  186. package/dist/src/modules/workspace/read-page.js +7 -1
  187. package/dist/src/modules/workspace/read-page.js.map +1 -1
  188. package/dist/src/modules/workspace/reconcile.d.ts +7 -1
  189. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  190. package/dist/src/modules/workspace/reconcile.js +156 -50
  191. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  192. package/dist/src/modules/workspace/result-text.d.ts +1 -0
  193. package/dist/src/modules/workspace/result-text.d.ts.map +1 -1
  194. package/dist/src/modules/workspace/result-text.js.map +1 -1
  195. package/dist/src/modules/workspace/sync.d.ts +9 -0
  196. package/dist/src/modules/workspace/sync.d.ts.map +1 -1
  197. package/dist/src/modules/workspace/sync.js +14 -0
  198. package/dist/src/modules/workspace/sync.js.map +1 -1
  199. package/dist/src/modules/workspace/types.d.ts +96 -43
  200. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  201. package/dist/src/modules/workspace/types.js.map +1 -1
  202. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  203. package/dist/src/modules/workspace/watcher.js +8 -3
  204. package/dist/src/modules/workspace/watcher.js.map +1 -1
  205. package/dist/src/notice-tags.d.ts +79 -0
  206. package/dist/src/notice-tags.d.ts.map +1 -0
  207. package/dist/src/notice-tags.js +83 -0
  208. package/dist/src/notice-tags.js.map +1 -0
  209. package/dist/src/prose-drafts.d.ts +4 -3
  210. package/dist/src/prose-drafts.d.ts.map +1 -1
  211. package/dist/src/prose-drafts.js +3 -2
  212. package/dist/src/prose-drafts.js.map +1 -1
  213. package/dist/src/reasoning-loss-notice.d.ts +23 -0
  214. package/dist/src/reasoning-loss-notice.d.ts.map +1 -0
  215. package/dist/src/reasoning-loss-notice.js +52 -0
  216. package/dist/src/reasoning-loss-notice.js.map +1 -0
  217. package/dist/src/reasoning-loss.d.ts +24 -0
  218. package/dist/src/reasoning-loss.d.ts.map +1 -0
  219. package/dist/src/reasoning-loss.js +102 -0
  220. package/dist/src/reasoning-loss.js.map +1 -0
  221. package/dist/src/send-tools.d.ts +3 -2
  222. package/dist/src/send-tools.d.ts.map +1 -1
  223. package/dist/src/send-tools.js +3 -2
  224. package/dist/src/send-tools.js.map +1 -1
  225. package/dist/src/sent-rows.js +1 -1
  226. package/dist/src/silent-heartbeat.d.ts +1 -53
  227. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  228. package/dist/src/silent-heartbeat.js +56 -3
  229. package/dist/src/silent-heartbeat.js.map +1 -1
  230. package/dist/src/supplied-text.d.ts +35 -0
  231. package/dist/src/supplied-text.d.ts.map +1 -0
  232. package/dist/src/supplied-text.js +141 -0
  233. package/dist/src/supplied-text.js.map +1 -0
  234. package/dist/src/thinking-drops.d.ts +4 -11
  235. package/dist/src/thinking-drops.d.ts.map +1 -1
  236. package/dist/src/thinking-drops.js +7 -14
  237. package/dist/src/thinking-drops.js.map +1 -1
  238. package/dist/src/tool-args.d.ts +12 -0
  239. package/dist/src/tool-args.d.ts.map +1 -1
  240. package/dist/src/tool-args.js +39 -4
  241. package/dist/src/tool-args.js.map +1 -1
  242. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  243. package/dist/src/tool-image-ledger.js +2 -1
  244. package/dist/src/tool-image-ledger.js.map +1 -1
  245. package/dist/src/tool-presentation.d.ts.map +1 -1
  246. package/dist/src/tool-presentation.js +5 -4
  247. package/dist/src/tool-presentation.js.map +1 -1
  248. package/dist/src/tool-result-guard.d.ts +8 -4
  249. package/dist/src/tool-result-guard.d.ts.map +1 -1
  250. package/dist/src/tool-result-guard.js +23 -11
  251. package/dist/src/tool-result-guard.js.map +1 -1
  252. package/dist/src/tune-out/coordinator.d.ts +3 -2
  253. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  254. package/dist/src/tune-out/coordinator.js +24 -26
  255. package/dist/src/tune-out/coordinator.js.map +1 -1
  256. package/dist/src/tune-out/tools.d.ts +4 -1
  257. package/dist/src/tune-out/tools.d.ts.map +1 -1
  258. package/dist/src/types/agent.d.ts +63 -18
  259. package/dist/src/types/agent.d.ts.map +1 -1
  260. package/dist/src/types/events.d.ts +18 -8
  261. package/dist/src/types/events.d.ts.map +1 -1
  262. package/dist/src/types/framework.d.ts +58 -0
  263. package/dist/src/types/framework.d.ts.map +1 -1
  264. package/dist/src/types/module.d.ts +27 -13
  265. package/dist/src/types/module.d.ts.map +1 -1
  266. package/dist/src/types/trace.d.ts +34 -1
  267. package/dist/src/types/trace.d.ts.map +1 -1
  268. package/package.json +3 -3
  269. package/src/agent.ts +76 -12
  270. package/src/api/mcp-server-core.ts +3 -14
  271. package/src/api/server.ts +11 -5
  272. package/src/auto-continue.ts +12 -5
  273. package/src/code-execution/isolate/runner.ts +7 -5
  274. package/src/code-execution/isolate/scripts.ts +3 -2
  275. package/src/cut-off-round.ts +98 -0
  276. package/src/framework.ts +3772 -1138
  277. package/src/gate/event-gate.ts +705 -60
  278. package/src/gate/index.ts +9 -1
  279. package/src/gate/reply-judge.ts +512 -0
  280. package/src/gate/types.ts +176 -3
  281. package/src/heartbeat/heartbeat.ts +843 -0
  282. package/src/heartbeat/reminder-time.ts +107 -0
  283. package/src/held-writes.ts +3 -3
  284. package/src/host-presentation.ts +605 -0
  285. package/src/index.ts +5 -1
  286. package/src/line-reader.ts +58 -0
  287. package/src/mcpl/capability-mask.ts +3 -2
  288. package/src/mcpl/channel-registry.ts +139 -53
  289. package/src/mcpl/conversation-router.ts +2 -1
  290. package/src/mcpl/convert-block.ts +17 -4
  291. package/src/mcpl/hook-orchestrator.ts +4 -3
  292. package/src/mcpl/inbound-source.ts +45 -70
  293. package/src/mcpl/modern-connection.ts +11 -7
  294. package/src/mcpl/protocol-family.ts +24 -3
  295. package/src/mcpl/push-handler.ts +2 -2
  296. package/src/mcpl/references.ts +31 -23
  297. package/src/mcpl/server-connection.ts +76 -34
  298. package/src/mcpl/skip-reply-wake.ts +35 -0
  299. package/src/mcpl/tags.ts +13 -2
  300. package/src/mcpl/tool-presence.ts +149 -82
  301. package/src/mcpl/tool-signature.ts +64 -32
  302. package/src/mcpl/toolset-host.ts +212 -110
  303. package/src/mcpl/toolsets-module.ts +277 -91
  304. package/src/mcpl/transport.ts +18 -14
  305. package/src/mcpl/types.ts +32 -13
  306. package/src/module-registry.ts +14 -9
  307. package/src/modules/api/index.ts +4 -2
  308. package/src/modules/discord/index.ts +37 -25
  309. package/src/modules/history/index.ts +30 -18
  310. package/src/modules/sender-name.ts +9 -0
  311. package/src/modules/workspace/answers.ts +151 -0
  312. package/src/modules/workspace/branch-intent.ts +10 -5
  313. package/src/modules/workspace/direct-write.ts +59 -23
  314. package/src/modules/workspace/disk-agreement.ts +52 -21
  315. package/src/modules/workspace/edit-text.ts +7 -5
  316. package/src/modules/workspace/effects.ts +69 -50
  317. package/src/modules/workspace/index.ts +966 -556
  318. package/src/modules/workspace/observe.ts +497 -242
  319. package/src/modules/workspace/read-page.ts +7 -1
  320. package/src/modules/workspace/reconcile.ts +184 -49
  321. package/src/modules/workspace/result-text.ts +2 -0
  322. package/src/modules/workspace/sync.ts +16 -0
  323. package/src/modules/workspace/types.ts +96 -43
  324. package/src/modules/workspace/watcher.ts +8 -3
  325. package/src/notice-tags.ts +84 -0
  326. package/src/prose-drafts.ts +4 -3
  327. package/src/reasoning-loss-notice.ts +64 -0
  328. package/src/reasoning-loss.ts +120 -0
  329. package/src/send-tools.ts +3 -2
  330. package/src/sent-rows.ts +1 -1
  331. package/src/silent-heartbeat.ts +4 -3
  332. package/src/supplied-text.ts +154 -0
  333. package/src/thinking-drops.ts +10 -16
  334. package/src/tool-args.ts +38 -4
  335. package/src/tool-image-ledger.ts +2 -1
  336. package/src/tool-presentation.ts +5 -4
  337. package/src/tool-result-guard.ts +26 -11
  338. package/src/tune-out/coordinator.ts +25 -27
  339. package/src/tune-out/tools.ts +4 -1
  340. package/src/types/agent.ts +63 -18
  341. package/src/types/events.ts +18 -8
  342. package/src/types/framework.ts +59 -0
  343. package/src/types/module.ts +28 -13
  344. package/src/types/trace.ts +36 -1
@@ -48,6 +48,38 @@ export interface PassiveSampleConfig {
48
48
  * as `RateLimitConfig.keyBy` is. */
49
49
  keyBy?: string;
50
50
  }
51
+ /**
52
+ * Configuration for the `judge` behavior: batch matching events as `debounce`
53
+ * does, then, instead of waking the agent when the batch fires, ask a small,
54
+ * cheap model (the host's reply judge, `GateOptions.judge`) whether now is a
55
+ * good time for the agent to reply. The judge reads the agent's context as one
56
+ * document (its newest part), the agent's own `instructions` and the batch,
57
+ * and answers reply or wait. On reply the
58
+ * batch is delivered as a debounce's is; on wait the agent isn't woken: the
59
+ * events are in its context already, as for `defer`, and the next batch is
60
+ * judged afresh. Rules are read in order, as ever: a mention rule placed ahead
61
+ * of a judge rule wakes the agent without the judge. A judge that fails or
62
+ * times out wakes the agent (fail open),
63
+ * unless the host set its `onError` to `"skip"`.
64
+ */
65
+ export interface JudgeConfig {
66
+ /** Quiet period (ms) before the batch is judged, as `debounce`'s. */
67
+ debounceMs: number;
68
+ /**
69
+ * The longest (ms) a batch waits from its first event before it's judged,
70
+ * even while events keep arriving and pushing the quiet period back. Left
71
+ * out, a batch is judged only after `debounceMs` of quiet, as a debounce
72
+ * delivers.
73
+ */
74
+ maxWaitMs?: number;
75
+ /**
76
+ * The agent's own word to the judge: when it wants to be woken and when it
77
+ * would rather stay quiet ("wake me when someone asks me something or the
78
+ * talk turns to the garden; let banter between others go by"). Shown to the
79
+ * judge with every batch this rule sends it.
80
+ */
81
+ instructions?: string;
82
+ }
51
83
  /** How a matching policy affects inference triggering. */
52
84
  export type GateBehavior = 'always' | 'defer' | 'skip' | {
53
85
  debounce: number;
@@ -55,6 +87,8 @@ export type GateBehavior = 'always' | 'defer' | 'skip' | {
55
87
  rate_limit: RateLimitConfig;
56
88
  } | {
57
89
  passive_sample: PassiveSampleConfig;
90
+ } | {
91
+ judge: JudgeConfig;
58
92
  };
59
93
  /** Criteria for matching an event. All specified fields must match (AND logic). */
60
94
  export interface GatePolicyMatch {
@@ -161,7 +195,110 @@ export interface GateOptions {
161
195
  * missing, no one bypasses sleep.
162
196
  */
163
197
  privilegedUsersPath?: string;
198
+ /** The reply judge that `judge` rules ask (see JudgeConfig). Left out (or
199
+ * null), the judge is wired with its defaults; it runs only for `judge`
200
+ * rules, so a gate with none makes no judge calls. */
201
+ judge?: ReplyJudgeOptions | null;
202
+ }
203
+ /**
204
+ * Host options for the reply judge, the small model `judge` rules ask whether
205
+ * now is a good time for the agent to reply. The host sets the model and how
206
+ * the judge runs, not the agent: an agent's rule says when to ask and what to
207
+ * say.
208
+ */
209
+ export interface ReplyJudgeOptions {
210
+ /** False leaves the judge unwired: `wake_add_rule` then offers no `judge`,
211
+ * and a `judge` rule in gate.json wakes the agent as a debounce of its
212
+ * `debounceMs` would, which gate_status says. Default true. */
213
+ enabled?: boolean;
214
+ /** The model the judge runs on, as the host's membrane names it. Default
215
+ * `claude-haiku-5-5`. */
216
+ model?: string;
217
+ /**
218
+ * The most input tokens one judge request may carry, its instructions and
219
+ * the batch included; the context document is cut from its oldest end to
220
+ * fit. Default 90,000: Claude Haiku 5.5 costs five times as much past
221
+ * 100,000 input tokens, and the margin covers the estimate's error. The
222
+ * least is 4,000, a short tail of the conversation: cheaper and quicker,
223
+ * with less of the room's history to weigh.
224
+ */
225
+ maxInputTokens?: number;
226
+ /** The longest (ms) a judge request may take before the batch is decided by
227
+ * `onError`. Default 20,000. */
228
+ timeoutMs?: number;
229
+ /** What a judge that fails, times out or answers unreadably does: `"wake"`
230
+ * wakes the agent as a debounce would (the default, so a judge outage
231
+ * never silences the agent); `"skip"` doesn't. */
232
+ onError?: 'wake' | 'skip';
233
+ /** The judge's effort (`output_config.effort`). Default `"low"`: a short
234
+ * verdict, quickly. `"none"` sends no effort, for a provider that doesn't
235
+ * take Anthropic's `output_config`. */
236
+ effort?: 'low' | 'medium' | 'high' | 'none';
237
+ /** The prompt cache's lifetime for the judge's context document. `"5m"`
238
+ * (the default) suits judge rules that fire minutes apart; `"1h"` costs
239
+ * more to write and suits ones that fire less often. */
240
+ cacheTtl?: '5m' | '1h';
164
241
  }
242
+ /** One event of a batch, as the reply judge is shown it. */
243
+ export interface JudgeEventSummary {
244
+ eventType: string;
245
+ /** The channel as the agent is shown it, when the event named one. */
246
+ channel?: string;
247
+ /** The author's id, when the event named one. */
248
+ authorId?: string;
249
+ /** Whether the event addressed the agent (mention, reply, DM). */
250
+ addressed: boolean;
251
+ /** The event's text, cut short when long. */
252
+ content: string;
253
+ /** When the event arrived (ms). */
254
+ at: number;
255
+ }
256
+ /**
257
+ * Something that will (or, for a batch going to the judge, may) wake the
258
+ * agent with no new event: what the judge is told would happen if it answers
259
+ * wait and nothing else arrives.
260
+ */
261
+ export interface UpcomingWake {
262
+ /** When (ms), when known; absent for one due as soon as the agent is free. */
263
+ at?: number;
264
+ /** False when it only may wake the agent (a judge rule's batch goes to the judge then). */
265
+ certain: boolean;
266
+ /** What it is, as the judge is told ("its own skip_reply timer"). */
267
+ what: string;
268
+ }
269
+ /** What the gate asks the reply judge for one batch. */
270
+ export interface JudgeRequest {
271
+ /** The rule whose batch this is. */
272
+ policyName: string;
273
+ /** The rule's `instructions`, the agent's own word to the judge. */
274
+ instructions?: string;
275
+ /** The batch, oldest first. */
276
+ events: JudgeEventSummary[];
277
+ /** The agents the batch would wake. */
278
+ agentNames: string[];
279
+ /** The gate's own timers that will wake those agents with no new event
280
+ * (upcomingWakes): their self-wakes, a sleep's end, other rules' pending
281
+ * batches. The judge adds what the framework knows besides. */
282
+ upcomingWakes?: UpcomingWake[];
283
+ /** Aborted when the judge's time is up or the gate is disposed. */
284
+ signal: AbortSignal;
285
+ }
286
+ /** The reply judge's answer for one batch. */
287
+ export interface JudgeVerdict {
288
+ /** True: wake the agent now. False: let the batch go by. */
289
+ reply: boolean;
290
+ /** The judge's one-line reason. */
291
+ reason: string;
292
+ /** The model that answered. */
293
+ model?: string;
294
+ /** Input tokens the request carried (all of them: uncached, cache reads and writes). */
295
+ inputTokens?: number;
296
+ /** Of those, the tokens read from the prompt cache. */
297
+ cacheReadTokens?: number;
298
+ outputTokens?: number;
299
+ }
300
+ /** The judge's function, as the framework wires it into the gate. */
301
+ export type JudgeFn = (request: JudgeRequest) => Promise<JudgeVerdict>;
165
302
  /** The result of evaluating an event against the gate. */
166
303
  export interface GateDecision {
167
304
  /** Whether to trigger inference. */
@@ -186,10 +323,20 @@ export interface GateDecision {
186
323
  export interface ShadowWarning {
187
324
  /** Name of the earlier (consuming) policy. */
188
325
  earlier: string;
189
- /** Name of the later policy it makes unreachable. */
326
+ /** Name of the later policy whose events it takes. */
190
327
  later: string;
191
- /** Event types affected — 'all' when both rules are unscoped. */
328
+ /** Event types affected: those of `later`'s (its scope's, narrowed to the
329
+ * ones its source is known to send) that `earlier` covers. 'all' only when
330
+ * neither rule has a scope and `later`'s source could send any type. */
192
331
  eventTypes: string[] | 'all';
332
+ /** Whether `earlier` takes every event `later` would match, so `later`
333
+ * never applies. */
334
+ whole: boolean;
335
+ /** Whether `later` is known to see these types: its scope names them, or
336
+ * its source is one whose event types the host knows (an MCPL server's).
337
+ * False when `later` names no scope and its source could send anything,
338
+ * so the types may never reach it. */
339
+ known: boolean;
193
340
  }
194
341
  /** One row of the dry-run probe table (see EventGate.probeTable). */
195
342
  export interface GateProbeRow {
@@ -278,6 +425,30 @@ export interface GatePolicyStats {
278
425
  counterCount: number;
279
426
  fireCount: number;
280
427
  };
428
+ /** Present for `judge` behaviors. */
429
+ judgeState?: {
430
+ /** Events in the batch still waiting out its quiet period. */
431
+ pendingCount: number;
432
+ /** Whether the judge is deciding one of this rule's batches now. */
433
+ judging: boolean;
434
+ /** Events held for the judge until the agent's turn (or the host's quiesce) ends. */
435
+ heldCount: number;
436
+ /** Verdicts so far: woke the agent, let the batch go by, and judge failures. */
437
+ verdicts: {
438
+ reply: number;
439
+ wait: number;
440
+ error: number;
441
+ };
442
+ /** The newest verdict. */
443
+ last?: {
444
+ at: number;
445
+ verdict: 'reply' | 'wait' | 'error';
446
+ reason: string;
447
+ eventCount: number;
448
+ durationMs: number;
449
+ inputTokens?: number;
450
+ };
451
+ };
281
452
  }
282
453
  /** Full gate status returned by gate:status tool. */
283
454
  export interface GateStatus {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/gate/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/gate/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The heartbeat: the agent's own schedule of wakes, in the framework.
3
+ *
4
+ * Two kinds of wake, both the agent's to set:
5
+ * - the ambient heartbeat, one periodic tick (`intervalSeconds`, `paused`,
6
+ * `message`, `deliveryMode`): a message-mode tick is a timestamped prompt
7
+ * stored in the agent's window, a silent tick a private wake that stores
8
+ * no prompt and suppresses automatic prose (silent-heartbeat.ts);
9
+ * - reminders, one-off (a delay or an `atIso` time) or repeating (an
10
+ * interval), each a stored message with a header naming it and the time.
11
+ *
12
+ * This was heartbeat-mcpl, an MCPL server; it moved here so the framework
13
+ * knows when the agent's next scheduled wake is (the reply judge is told,
14
+ * EventGate.upcomingWakes) and needs no server, policy exchange or push
15
+ * delivery to keep it. Its tools are listed as `heartbeat--heartbeat_status`
16
+ * and the rest, and calls by heartbeat-mcpl's names (`mcpl--heartbeat--…`)
17
+ * reach them too. Its wakes go to the gate as that server's pushes did, a
18
+ * push from the server id `heartbeat`, so the agent's rules decide them as
19
+ * they decided those, and a sleep lets them through, as it let that server
20
+ * id through.
21
+ *
22
+ * State (the schedule, when the next tick is due, and the reminders) is one
23
+ * JSON file, by default `{storePath}/config/heartbeat.json`. A first start
24
+ * with no file imports heartbeat-mcpl's two files when the host names them
25
+ * (`importFrom`). The next tick's time is kept, so a restart doesn't push it
26
+ * back; a tick or a reminder that fell due while the host was down fires
27
+ * once, shortly after start, a repeating reminder once for the periods it
28
+ * missed.
29
+ */
30
+ import type { UpcomingWake } from '../gate/types.js';
31
+ import type { ToolDefinition } from '../types/events.js';
32
+ /** The prefix the heartbeat's tools carry. */
33
+ export declare const HEARTBEAT_TOOL_PREFIX = "heartbeat--";
34
+ /** The prefix heartbeat-mcpl's tools carried under the server id `heartbeat`
35
+ * and the default tool prefix: a call by that name, as the agent's context
36
+ * may still show them, reaches the same tool. */
37
+ export declare const LEGACY_HEARTBEAT_TOOL_PREFIX = "mcpl--heartbeat--";
38
+ /**
39
+ * Whether an MCPL server is heartbeat-mcpl, or names its tools as the
40
+ * heartbeat's: by its id, a tool prefix of `heartbeat` or `mcpl--heartbeat`,
41
+ * or a command or argument that runs heartbeat-mcpl. The framework's
42
+ * heartbeat refuses one beside it, at create and at a runtime connect.
43
+ */
44
+ export declare function isHeartbeatMcplServer(server: {
45
+ id: string;
46
+ toolPrefix?: string;
47
+ }): boolean;
48
+ /** A heartbeat tool's name under the other prefix, for a name under one: the
49
+ * framework's `heartbeat--x` and heartbeat-mcpl's `mcpl--heartbeat--x` are
50
+ * one tool. Undefined for any other name. */
51
+ export declare function heartbeatToolAlias(name: string): string | undefined;
52
+ /** The tools that change the schedule, as against the two that only show it. */
53
+ export declare const HEARTBEAT_CHANGING_TOOLS: readonly string[];
54
+ export type HeartbeatDeliveryMode = 'message' | 'silent';
55
+ /** The ambient heartbeat's schedule. */
56
+ export interface HeartbeatSettings {
57
+ intervalSeconds: number;
58
+ paused: boolean;
59
+ message: string;
60
+ deliveryMode: HeartbeatDeliveryMode;
61
+ }
62
+ export declare const DEFAULT_HEARTBEAT: Readonly<HeartbeatSettings>;
63
+ /** A scheduled reminder. `everySeconds` null: one-off, dropped once it fires. */
64
+ export interface Reminder {
65
+ id: string;
66
+ message: string;
67
+ /** When it was set (ms). */
68
+ createdAt: number;
69
+ /** When it's next due (ms). */
70
+ fireAt: number;
71
+ everySeconds: number | null;
72
+ /** When a delivery that failed is tried again (ms); its `fireAt` stays the time it was due. */
73
+ retryAt?: number;
74
+ }
75
+ /** Host options (`FrameworkConfig.heartbeat`). */
76
+ export interface HeartbeatOptions {
77
+ /** The state file. Default `{storePath}/config/heartbeat.json`. */
78
+ statePath?: string;
79
+ /** The schedule a first start writes when there's nothing to import. */
80
+ defaults?: Partial<HeartbeatSettings>;
81
+ /**
82
+ * heartbeat-mcpl's files (its HEARTBEAT_CONFIG_FILE and
83
+ * HEARTBEAT_REMINDERS_FILE), read once, by a start that finds no state
84
+ * file, so an agent moving off the server keeps its schedule and its
85
+ * reminders. They're left as they are.
86
+ */
87
+ importFrom?: {
88
+ configPath?: string;
89
+ remindersPath?: string;
90
+ };
91
+ }
92
+ /** One of the heartbeat's scheduled wakes: its next tick or a pending reminder. */
93
+ export interface HeartbeatScheduledWake extends UpcomingWake {
94
+ kind: 'heartbeat' | 'reminder';
95
+ at: number;
96
+ /** Whether it's a silent tick, delivered as one (HeartbeatWake's `silent`). */
97
+ silent: boolean;
98
+ /** The text it brings, as of its due time: so the gate can be asked about
99
+ * the event it will judge. */
100
+ text: string;
101
+ }
102
+ /** A wake the heartbeat asks the framework to deliver. */
103
+ export type HeartbeatWake = {
104
+ kind: 'heartbeat';
105
+ reason: 'schedule' | 'manual';
106
+ silent: boolean;
107
+ text: string;
108
+ eventId: string;
109
+ } | {
110
+ kind: 'reminder';
111
+ reminderId: string;
112
+ recurring: boolean;
113
+ text: string;
114
+ eventId: string;
115
+ };
116
+ /**
117
+ * A time as the heartbeat's texts show it, to the second, with its offset and
118
+ * zone: `2026-10-26T09:00:00-07:00 [America/Los_Angeles]`, as heartbeat-mcpl
119
+ * wrote it, so the agent reads its ticks and reminders as before.
120
+ */
121
+ export declare function formatHeartbeatTime(value: number, timeZone: string): string;
122
+ /** The text a reminder brings: a header naming it, then its message. */
123
+ export declare function reminderText(rem: Reminder, now: number, timeZone: string): string;
124
+ export declare class Heartbeat {
125
+ private readonly statePath;
126
+ private readonly defaults;
127
+ private readonly importFrom;
128
+ private readonly timeZone;
129
+ private readonly deliver;
130
+ private readonly now;
131
+ private readonly tools;
132
+ private state;
133
+ /** Why the state file can't be written now, when it can't (its text couldn't be read and set aside). */
134
+ private unsaveable;
135
+ /** What the last save's failure was, for the tool that made the change. */
136
+ private lastSaveError;
137
+ private cancelTick;
138
+ private cancelReminders;
139
+ /** Nothing fires before this (ms): a start's grace for what fell due while the host was down. */
140
+ private notBefore;
141
+ private started;
142
+ constructor(opts: {
143
+ statePath: string;
144
+ timeZone: string;
145
+ deliver: (wake: HeartbeatWake) => void;
146
+ defaults?: Partial<HeartbeatSettings>;
147
+ importFrom?: HeartbeatOptions['importFrom'];
148
+ now?: () => number;
149
+ });
150
+ /** Load (or import, or create) the state and arm the timers. */
151
+ start(): void;
152
+ /** Clear the timers; the state stays saved. */
153
+ stop(): void;
154
+ /** The tools, named as agents call them (`heartbeat--…`). */
155
+ getTools(): ToolDefinition[];
156
+ /** Whether `name` is one of the heartbeat's tools, by its name or heartbeat-mcpl's. */
157
+ ownsTool(name: string): boolean;
158
+ /** What the heartbeat will wake the agent with, soonest first, for the reply judge (UpcomingWake). */
159
+ upcomingWakes(): UpcomingWake[];
160
+ /**
161
+ * The heartbeat's next tick and its pending reminders, soonest first, each
162
+ * with its kind and the event it will bring, so the gate can be asked about
163
+ * it. `whose` words each for the reply judge ("its heartbeat", as
164
+ * upcomingWakes) or for the agent ("your heartbeat", as skip_reply's
165
+ * confirmation names one due before its self-wake).
166
+ */
167
+ scheduledWakes(whose?: 'its' | 'your'): HeartbeatScheduledWake[];
168
+ /**
169
+ * Handle a call to one of the tools, by its full name. Arguments are read
170
+ * as a wake rule's are: a slip of a parameter's name, or a field given
171
+ * outside the parameter it belongs to, refuses the call, naming it; an
172
+ * unknown name is noted in the result.
173
+ */
174
+ handleToolCall(calledName: string, rawInput: unknown): {
175
+ success: boolean;
176
+ data?: string;
177
+ error?: string;
178
+ isError?: boolean;
179
+ };
180
+ private refuse;
181
+ private statusLine;
182
+ private statusText;
183
+ private saveNote;
184
+ private configure;
185
+ private trigger;
186
+ private addReminder;
187
+ private describe;
188
+ private listText;
189
+ private cancelReminder;
190
+ private armTick;
191
+ /** Deliver one tick; false when delivery threw. */
192
+ private fireTick;
193
+ private armReminders;
194
+ private fireDueReminders;
195
+ private load;
196
+ /** The state a file holds, or undefined when it isn't state this framework writes. */
197
+ private readState;
198
+ /** heartbeat-mcpl's files, read once when there's no state file and the host names them. */
199
+ private imported;
200
+ private save;
201
+ }
202
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../../src/heartbeat/heartbeat.ts"],"names":[],"mappings":"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"}