@animalabs/agent-framework 0.28.0 → 0.30.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 (289) hide show
  1. package/README.md +88 -25
  2. package/dist/src/admission/admit.d.ts +90 -0
  3. package/dist/src/admission/admit.d.ts.map +1 -0
  4. package/dist/src/admission/admit.js +43 -0
  5. package/dist/src/admission/admit.js.map +1 -0
  6. package/dist/src/agent.d.ts +21 -0
  7. package/dist/src/agent.d.ts.map +1 -1
  8. package/dist/src/agent.js +47 -7
  9. package/dist/src/agent.js.map +1 -1
  10. package/dist/src/api/mcp-server-core.d.ts.map +1 -1
  11. package/dist/src/api/mcp-server-core.js +3 -12
  12. package/dist/src/api/mcp-server-core.js.map +1 -1
  13. package/dist/src/api/server.d.ts.map +1 -1
  14. package/dist/src/api/server.js +7 -3
  15. package/dist/src/api/server.js.map +1 -1
  16. package/dist/src/author-presentation.d.ts +50 -0
  17. package/dist/src/author-presentation.d.ts.map +1 -0
  18. package/dist/src/author-presentation.js +58 -0
  19. package/dist/src/author-presentation.js.map +1 -0
  20. package/dist/src/auto-continue.d.ts +2 -0
  21. package/dist/src/auto-continue.d.ts.map +1 -1
  22. package/dist/src/auto-continue.js +5 -2
  23. package/dist/src/auto-continue.js.map +1 -1
  24. package/dist/src/code-execution/isolate/runner.d.ts +7 -5
  25. package/dist/src/code-execution/isolate/runner.d.ts.map +1 -1
  26. package/dist/src/code-execution/isolate/runner.js +7 -5
  27. package/dist/src/code-execution/isolate/runner.js.map +1 -1
  28. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  29. package/dist/src/code-execution/isolate/scripts.js +3 -2
  30. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  31. package/dist/src/dendrite/index.d.ts +6 -0
  32. package/dist/src/dendrite/index.d.ts.map +1 -0
  33. package/dist/src/dendrite/index.js +3 -0
  34. package/dist/src/dendrite/index.js.map +1 -0
  35. package/dist/src/dendrite/presets.d.ts +60 -0
  36. package/dist/src/dendrite/presets.d.ts.map +1 -0
  37. package/dist/src/dendrite/presets.js +117 -0
  38. package/dist/src/dendrite/presets.js.map +1 -0
  39. package/dist/src/dendrite/registry.d.ts +260 -0
  40. package/dist/src/dendrite/registry.d.ts.map +1 -0
  41. package/dist/src/dendrite/registry.js +742 -0
  42. package/dist/src/dendrite/registry.js.map +1 -0
  43. package/dist/src/dendrite/types.d.ts +392 -0
  44. package/dist/src/dendrite/types.d.ts.map +1 -0
  45. package/dist/src/dendrite/types.js +24 -0
  46. package/dist/src/dendrite/types.js.map +1 -0
  47. package/dist/src/framework.d.ts +846 -67
  48. package/dist/src/framework.d.ts.map +1 -1
  49. package/dist/src/framework.js +4213 -924
  50. package/dist/src/framework.js.map +1 -1
  51. package/dist/src/gate/event-gate.d.ts +46 -14
  52. package/dist/src/gate/event-gate.d.ts.map +1 -1
  53. package/dist/src/gate/event-gate.js +143 -53
  54. package/dist/src/gate/event-gate.js.map +1 -1
  55. package/dist/src/gate/index.d.ts +1 -1
  56. package/dist/src/gate/index.d.ts.map +1 -1
  57. package/dist/src/gate/index.js +1 -1
  58. package/dist/src/gate/index.js.map +1 -1
  59. package/dist/src/gate/types.d.ts +12 -2
  60. package/dist/src/gate/types.d.ts.map +1 -1
  61. package/dist/src/heartbeat/heartbeat.d.ts +18 -0
  62. package/dist/src/heartbeat/heartbeat.d.ts.map +1 -1
  63. package/dist/src/heartbeat/heartbeat.js +34 -8
  64. package/dist/src/heartbeat/heartbeat.js.map +1 -1
  65. package/dist/src/held-writes.d.ts +3 -3
  66. package/dist/src/held-writes.js +3 -3
  67. package/dist/src/host-presentation.d.ts +174 -0
  68. package/dist/src/host-presentation.d.ts.map +1 -0
  69. package/dist/src/host-presentation.js +565 -0
  70. package/dist/src/host-presentation.js.map +1 -0
  71. package/dist/src/index.d.ts +7 -4
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +7 -2
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/line-reader.d.ts +4 -0
  76. package/dist/src/line-reader.d.ts.map +1 -0
  77. package/dist/src/line-reader.js +59 -0
  78. package/dist/src/line-reader.js.map +1 -0
  79. package/dist/src/mcpl/channel-registry.d.ts +118 -15
  80. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  81. package/dist/src/mcpl/channel-registry.js +266 -110
  82. package/dist/src/mcpl/channel-registry.js.map +1 -1
  83. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  84. package/dist/src/mcpl/conversation-router.js +2 -1
  85. package/dist/src/mcpl/conversation-router.js.map +1 -1
  86. package/dist/src/mcpl/convert-block.d.ts +1 -0
  87. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  88. package/dist/src/mcpl/convert-block.js +16 -4
  89. package/dist/src/mcpl/convert-block.js.map +1 -1
  90. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  91. package/dist/src/mcpl/hook-orchestrator.js +4 -3
  92. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  93. package/dist/src/mcpl/inbound-source.d.ts +3 -1
  94. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  95. package/dist/src/mcpl/inbound-source.js +3 -1
  96. package/dist/src/mcpl/inbound-source.js.map +1 -1
  97. package/dist/src/mcpl/modern-connection.d.ts.map +1 -1
  98. package/dist/src/mcpl/modern-connection.js +11 -7
  99. package/dist/src/mcpl/modern-connection.js.map +1 -1
  100. package/dist/src/mcpl/protocol-family.d.ts +3 -2
  101. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  102. package/dist/src/mcpl/protocol-family.js +25 -3
  103. package/dist/src/mcpl/protocol-family.js.map +1 -1
  104. package/dist/src/mcpl/push-coalescer.d.ts +9 -0
  105. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  106. package/dist/src/mcpl/push-coalescer.js +21 -0
  107. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  108. package/dist/src/mcpl/push-handler.js +2 -2
  109. package/dist/src/mcpl/push-handler.js.map +1 -1
  110. package/dist/src/mcpl/references.d.ts +12 -40
  111. package/dist/src/mcpl/references.d.ts.map +1 -1
  112. package/dist/src/mcpl/references.js +29 -23
  113. package/dist/src/mcpl/references.js.map +1 -1
  114. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  115. package/dist/src/mcpl/server-connection.js +20 -20
  116. package/dist/src/mcpl/server-connection.js.map +1 -1
  117. package/dist/src/mcpl/skip-reply-wake.d.ts +25 -0
  118. package/dist/src/mcpl/skip-reply-wake.d.ts.map +1 -1
  119. package/dist/src/mcpl/skip-reply-wake.js +25 -0
  120. package/dist/src/mcpl/skip-reply-wake.js.map +1 -1
  121. package/dist/src/mcpl/tool-presence.d.ts.map +1 -1
  122. package/dist/src/mcpl/tool-presence.js +18 -17
  123. package/dist/src/mcpl/tool-presence.js.map +1 -1
  124. package/dist/src/mcpl/tool-signature.d.ts.map +1 -1
  125. package/dist/src/mcpl/tool-signature.js +17 -16
  126. package/dist/src/mcpl/tool-signature.js.map +1 -1
  127. package/dist/src/mcpl/toolset-host.d.ts +8 -26
  128. package/dist/src/mcpl/toolset-host.d.ts.map +1 -1
  129. package/dist/src/mcpl/toolset-host.js +16 -6
  130. package/dist/src/mcpl/toolset-host.js.map +1 -1
  131. package/dist/src/mcpl/toolsets-module.d.ts +14 -25
  132. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -1
  133. package/dist/src/mcpl/toolsets-module.js +187 -50
  134. package/dist/src/mcpl/toolsets-module.js.map +1 -1
  135. package/dist/src/mcpl/transport.d.ts +1 -1
  136. package/dist/src/mcpl/transport.d.ts.map +1 -1
  137. package/dist/src/mcpl/transport.js +16 -16
  138. package/dist/src/mcpl/transport.js.map +1 -1
  139. package/dist/src/mcpl/types.d.ts +28 -12
  140. package/dist/src/mcpl/types.d.ts.map +1 -1
  141. package/dist/src/mcpl/types.js.map +1 -1
  142. package/dist/src/module-registry.d.ts +6 -7
  143. package/dist/src/module-registry.d.ts.map +1 -1
  144. package/dist/src/module-registry.js +6 -7
  145. package/dist/src/module-registry.js.map +1 -1
  146. package/dist/src/modules/api/index.d.ts.map +1 -1
  147. package/dist/src/modules/api/index.js +4 -2
  148. package/dist/src/modules/api/index.js.map +1 -1
  149. package/dist/src/modules/discord/index.d.ts.map +1 -1
  150. package/dist/src/modules/discord/index.js +33 -25
  151. package/dist/src/modules/discord/index.js.map +1 -1
  152. package/dist/src/modules/history/index.js +8 -6
  153. package/dist/src/modules/history/index.js.map +1 -1
  154. package/dist/src/modules/sender-name.d.ts +7 -0
  155. package/dist/src/modules/sender-name.d.ts.map +1 -0
  156. package/dist/src/modules/sender-name.js +10 -0
  157. package/dist/src/modules/sender-name.js.map +1 -0
  158. package/dist/src/modules/workspace/answers.d.ts +5 -1
  159. package/dist/src/modules/workspace/answers.d.ts.map +1 -1
  160. package/dist/src/modules/workspace/answers.js +16 -1
  161. package/dist/src/modules/workspace/answers.js.map +1 -1
  162. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -1
  163. package/dist/src/modules/workspace/direct-write.js +6 -4
  164. package/dist/src/modules/workspace/direct-write.js.map +1 -1
  165. package/dist/src/modules/workspace/effects.d.ts +4 -2
  166. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  167. package/dist/src/modules/workspace/effects.js +50 -40
  168. package/dist/src/modules/workspace/effects.js.map +1 -1
  169. package/dist/src/modules/workspace/index.d.ts +1 -0
  170. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  171. package/dist/src/modules/workspace/index.js +66 -36
  172. package/dist/src/modules/workspace/index.js.map +1 -1
  173. package/dist/src/modules/workspace/observe.d.ts +51 -20
  174. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  175. package/dist/src/modules/workspace/observe.js +120 -82
  176. package/dist/src/modules/workspace/observe.js.map +1 -1
  177. package/dist/src/modules/workspace/reconcile.d.ts +7 -1
  178. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  179. package/dist/src/modules/workspace/reconcile.js +133 -37
  180. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  181. package/dist/src/notice-tags.d.ts +81 -0
  182. package/dist/src/notice-tags.d.ts.map +1 -0
  183. package/dist/src/notice-tags.js +85 -0
  184. package/dist/src/notice-tags.js.map +1 -0
  185. package/dist/src/reasoning-loss-notice.d.ts.map +1 -1
  186. package/dist/src/reasoning-loss-notice.js +5 -3
  187. package/dist/src/reasoning-loss-notice.js.map +1 -1
  188. package/dist/src/silent-heartbeat.d.ts +5 -55
  189. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  190. package/dist/src/silent-heartbeat.js +63 -7
  191. package/dist/src/silent-heartbeat.js.map +1 -1
  192. package/dist/src/stored-injections.d.ts +4 -0
  193. package/dist/src/stored-injections.d.ts.map +1 -1
  194. package/dist/src/stored-injections.js +6 -0
  195. package/dist/src/stored-injections.js.map +1 -1
  196. package/dist/src/supplied-text.d.ts +35 -0
  197. package/dist/src/supplied-text.d.ts.map +1 -0
  198. package/dist/src/supplied-text.js +141 -0
  199. package/dist/src/supplied-text.js.map +1 -0
  200. package/dist/src/tool-args.d.ts.map +1 -1
  201. package/dist/src/tool-args.js +9 -8
  202. package/dist/src/tool-args.js.map +1 -1
  203. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  204. package/dist/src/tool-image-ledger.js +2 -1
  205. package/dist/src/tool-image-ledger.js.map +1 -1
  206. package/dist/src/tool-presentation.d.ts.map +1 -1
  207. package/dist/src/tool-presentation.js +5 -4
  208. package/dist/src/tool-presentation.js.map +1 -1
  209. package/dist/src/tune-out/coordinator.d.ts +382 -11
  210. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  211. package/dist/src/tune-out/coordinator.js +1100 -119
  212. package/dist/src/tune-out/coordinator.js.map +1 -1
  213. package/dist/src/tune-out/tools.d.ts +101 -5
  214. package/dist/src/tune-out/tools.d.ts.map +1 -1
  215. package/dist/src/tune-out/tools.js +55 -18
  216. package/dist/src/tune-out/tools.js.map +1 -1
  217. package/dist/src/types/agent.d.ts +48 -9
  218. package/dist/src/types/agent.d.ts.map +1 -1
  219. package/dist/src/types/framework.d.ts +142 -0
  220. package/dist/src/types/framework.d.ts.map +1 -1
  221. package/dist/src/types/module.d.ts +22 -11
  222. package/dist/src/types/module.d.ts.map +1 -1
  223. package/dist/src/types/trace.d.ts +136 -0
  224. package/dist/src/types/trace.d.ts.map +1 -1
  225. package/package.json +3 -3
  226. package/src/admission/admit.ts +113 -0
  227. package/src/agent.ts +52 -7
  228. package/src/api/mcp-server-core.ts +3 -14
  229. package/src/api/server.ts +7 -3
  230. package/src/author-presentation.ts +81 -0
  231. package/src/auto-continue.ts +8 -2
  232. package/src/code-execution/isolate/runner.ts +7 -5
  233. package/src/code-execution/isolate/scripts.ts +3 -2
  234. package/src/dendrite/index.ts +32 -0
  235. package/src/dendrite/presets.ts +149 -0
  236. package/src/dendrite/registry.ts +808 -0
  237. package/src/dendrite/types.ts +397 -0
  238. package/src/framework.ts +4362 -852
  239. package/src/gate/event-gate.ts +159 -52
  240. package/src/gate/index.ts +1 -1
  241. package/src/gate/types.ts +12 -2
  242. package/src/heartbeat/heartbeat.ts +48 -9
  243. package/src/held-writes.ts +3 -3
  244. package/src/host-presentation.ts +612 -0
  245. package/src/index.ts +17 -4
  246. package/src/line-reader.ts +58 -0
  247. package/src/mcpl/channel-registry.ts +306 -111
  248. package/src/mcpl/conversation-router.ts +2 -1
  249. package/src/mcpl/convert-block.ts +17 -4
  250. package/src/mcpl/hook-orchestrator.ts +4 -3
  251. package/src/mcpl/inbound-source.ts +3 -1
  252. package/src/mcpl/modern-connection.ts +11 -7
  253. package/src/mcpl/protocol-family.ts +24 -3
  254. package/src/mcpl/push-coalescer.ts +19 -0
  255. package/src/mcpl/push-handler.ts +2 -2
  256. package/src/mcpl/references.ts +31 -23
  257. package/src/mcpl/server-connection.ts +20 -18
  258. package/src/mcpl/skip-reply-wake.ts +35 -0
  259. package/src/mcpl/tool-presence.ts +18 -17
  260. package/src/mcpl/tool-signature.ts +17 -16
  261. package/src/mcpl/toolset-host.ts +18 -6
  262. package/src/mcpl/toolsets-module.ts +149 -50
  263. package/src/mcpl/transport.ts +18 -14
  264. package/src/mcpl/types.ts +29 -12
  265. package/src/module-registry.ts +6 -7
  266. package/src/modules/api/index.ts +4 -2
  267. package/src/modules/discord/index.ts +37 -25
  268. package/src/modules/history/index.ts +8 -6
  269. package/src/modules/sender-name.ts +9 -0
  270. package/src/modules/workspace/answers.ts +20 -2
  271. package/src/modules/workspace/direct-write.ts +4 -3
  272. package/src/modules/workspace/effects.ts +50 -40
  273. package/src/modules/workspace/index.ts +58 -34
  274. package/src/modules/workspace/observe.ts +139 -88
  275. package/src/modules/workspace/reconcile.ts +159 -36
  276. package/src/notice-tags.ts +86 -0
  277. package/src/reasoning-loss-notice.ts +5 -3
  278. package/src/silent-heartbeat.ts +11 -7
  279. package/src/stored-injections.ts +7 -0
  280. package/src/supplied-text.ts +154 -0
  281. package/src/tool-args.ts +9 -8
  282. package/src/tool-image-ledger.ts +2 -1
  283. package/src/tool-presentation.ts +5 -4
  284. package/src/tune-out/coordinator.ts +1252 -123
  285. package/src/tune-out/tools.ts +152 -11
  286. package/src/types/agent.ts +51 -9
  287. package/src/types/framework.ts +146 -0
  288. package/src/types/module.ts +23 -11
  289. package/src/types/trace.ts +150 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Presets — the historical agent kinds expressed as {@link AgentSpec}
3
+ * values. They are configurations of the common machinery, not engines:
4
+ * everything a preset decides is visible in the spec it returns, and a host
5
+ * may register a spec that matches none of them.
6
+ */
7
+ /** Default idle bound for a bounded job with no explicit deadline (matches the run watchdog). */
8
+ export const DEFAULT_TASK_IDLE_TIMEOUT_MS = 15 * 60_000;
9
+ /**
10
+ * A resident: persistent, declared in configuration, reads the residents'
11
+ * shared message slot. The first one declared owns default delivery.
12
+ */
13
+ export function residentSpec(name, options) {
14
+ return {
15
+ name,
16
+ kind: 'resident',
17
+ roles: {
18
+ defaultDelivery: options.primary,
19
+ receivesUntargeted: true,
20
+ receivesGateWakes: true,
21
+ ownsProviderScheduling: true,
22
+ },
23
+ lifetime: { kind: 'persistent' },
24
+ readsSharedSlot: true,
25
+ namespace: `agents/${name}`,
26
+ };
27
+ }
28
+ /**
29
+ * The subconscious: a persistent attention tenant of the resident it
30
+ * serves. It persists across policy epochs (cancelling a tune-out ends a
31
+ * channel's cadence, not this agent), observes the residents' slot with
32
+ * held traffic included, is never a broadcast recipient, and ends with its
33
+ * resident.
34
+ */
35
+ export function subconsciousSpec(name, serves) {
36
+ return {
37
+ name,
38
+ kind: 'subconscious',
39
+ roles: {
40
+ defaultDelivery: false,
41
+ receivesUntargeted: false,
42
+ receivesGateWakes: false,
43
+ ownsProviderScheduling: true,
44
+ },
45
+ lifetime: { kind: 'persistent' },
46
+ spawnedBy: serves,
47
+ onParentEnd: 'end',
48
+ observes: [{ includeHeld: true }],
49
+ resultTo: { to: serves, as: 'message' },
50
+ readsSharedSlot: true,
51
+ namespace: `subconscious/${serves}`,
52
+ };
53
+ }
54
+ /**
55
+ * A conversation fork: derived from a template agent's context at bind
56
+ * time, bound to one channel, independent continuation, ends on idle.
57
+ */
58
+ export function conversationForkSpec(name, options) {
59
+ return {
60
+ name,
61
+ kind: 'conversation-fork',
62
+ roles: {
63
+ defaultDelivery: false,
64
+ receivesUntargeted: false,
65
+ // Woken by its own channel's debounced traffic through the host-wide gate.
66
+ receivesGateWakes: true,
67
+ ownsProviderScheduling: false,
68
+ },
69
+ lifetime: { kind: 'idle', idleTtlMs: options.idleTtlMs },
70
+ spawnedBy: options.template,
71
+ onParentEnd: 'orphan',
72
+ inherit: { from: options.template, mode: 'copy', ...options.inherit },
73
+ // A copy renames the template's turns as it copies them. A shared
74
+ // inheritance has no copy step, so the mapping is declared instead.
75
+ ...(options.inherit?.mode === 'shared' ? { selfParticipants: [options.template] } : {}),
76
+ homeChannel: { serverId: options.homeChannel.serverId, channelId: options.homeChannel.channelId },
77
+ namespace: `conversations/${name}`,
78
+ };
79
+ }
80
+ function boundedJob(name, options) {
81
+ return {
82
+ name,
83
+ roles: {
84
+ defaultDelivery: false,
85
+ receivesUntargeted: false,
86
+ receivesGateWakes: false,
87
+ ownsProviderScheduling: false,
88
+ },
89
+ lifetime: {
90
+ kind: 'task',
91
+ ...(options.deadlineMs !== undefined ? { deadlineMs: options.deadlineMs } : {}),
92
+ idleTimeoutMs: options.idleTimeoutMs ?? DEFAULT_TASK_IDLE_TIMEOUT_MS,
93
+ ...(options.maxTurns !== undefined ? { maxTurns: options.maxTurns } : {}),
94
+ },
95
+ ...(options.spawnedBy ? { spawnedBy: options.spawnedBy, onParentEnd: 'orphan' } : {}),
96
+ ...(options.resultTo ? { resultTo: options.resultTo } : {}),
97
+ namespace: options.namespace ?? `subagent/${name}`,
98
+ ...(options.metadata ? { metadata: options.metadata } : {}),
99
+ };
100
+ }
101
+ /** A fresh worker: new identity and context, one bounded job, a result route. */
102
+ export function workerSpec(name, options = {}) {
103
+ return { ...boundedJob(name, options), kind: 'worker' };
104
+ }
105
+ /**
106
+ * A task fork: the parent's context at a checkpoint, a private
107
+ * continuation, one bounded job, a return.
108
+ */
109
+ export function taskForkSpec(name, options) {
110
+ return {
111
+ ...boundedJob(name, { ...options, spawnedBy: options.spawnedBy ?? options.parent }),
112
+ kind: 'task-fork',
113
+ inherit: { from: options.parent, mode: 'copy', ...options.inherit },
114
+ ...(options.inherit?.mode === 'shared' ? { selfParticipants: [options.parent] } : {}),
115
+ };
116
+ }
117
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/dendrite/presets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * AgentRegistry — the one place that knows which agents exist, what they
3
+ * are for, how they relate and what ends them.
4
+ *
5
+ * Pure bookkeeping: it never touches a stream, a context manager or a
6
+ * channel. Lifecycle methods return what changed (who ended, who was
7
+ * orphaned, which mail became deliverable) and the framework performs the
8
+ * side effects. That split keeps every rule here testable without a store
9
+ * and keeps the framework from re-deriving policy at each call site.
10
+ */
11
+ import type { AgentEndReason, AgentName, AgentRecord, AgentRef, AgentSpec, EndOutcome, HeldMail, RegistrySnapshot } from './types.js';
12
+ /** Thrown for a spec the registry refuses to load. */
13
+ export declare class AgentSpecError extends Error {
14
+ constructor(agent: string, problem: string);
15
+ }
16
+ export interface AgentRegistryOptions {
17
+ now?: () => number;
18
+ /** Called after every durable mutation with the state to persist. */
19
+ persist?: (snapshot: RegistrySnapshot) => void;
20
+ /**
21
+ * Called once per ended record. Ended records are append-only history,
22
+ * kept out of the snapshot so a mutation never rewrites them.
23
+ */
24
+ appendEnded?: (record: AgentRecord) => void;
25
+ /** How many ended records stay inspectable in memory (oldest dropped first). */
26
+ endedRetention?: number;
27
+ /**
28
+ * Told when a write that records something that has already happened — a
29
+ * release, a held mark, a message path — fails. The change stays in memory
30
+ * and the next write carries it; the call that made it is not failed, since
31
+ * what it records is done (nissa's #546 review, round 2). Absent, the
32
+ * failure is logged.
33
+ */
34
+ onRecordWriteFailed?: (what: string, error: unknown) => void;
35
+ /** Told after a change that failed was put back in memory (a requested change, or a hold): the host rewrites what it wrote alongside to match. */
36
+ onRollback?: () => void;
37
+ /**
38
+ * Asked for an ended record no longer in memory (past `endedRetention`):
39
+ * the host reads its durable ended log, so an agent that ended long ago
40
+ * can still be inspected, resumed and named.
41
+ */
42
+ findEnded?: (name: AgentName) => AgentRecord | undefined;
43
+ }
44
+ /** What a restore found that the previous process left unfinished. */
45
+ export interface RestoreOutcome {
46
+ /** Non-persistent agents that were live when the previous process stopped. */
47
+ interrupted: AgentRecord[];
48
+ }
49
+ /** What boot reconciliation concluded once configuration was applied. */
50
+ export interface ReconcileOutcome {
51
+ /** Persistent agents the previous process ran that this configuration no longer declares. */
52
+ unconfigured: EndOutcome[];
53
+ }
54
+ export declare class AgentRegistry {
55
+ private readonly live;
56
+ /** Ended records, oldest first. */
57
+ private ended;
58
+ /** Persistent records from the previous process, not yet re-declared. */
59
+ private readonly awaiting;
60
+ /**
61
+ * Bounded work the previous process left live, ended by this restart in
62
+ * memory but kept in the snapshot as it was until the host has told each
63
+ * recipient (settleInterrupted), so a crash before then owes the same
64
+ * notices at the next boot rather than none.
65
+ */
66
+ private readonly interruptedPending;
67
+ private readonly incarnations;
68
+ private mail;
69
+ private readonly now;
70
+ private readonly persistFn?;
71
+ private readonly appendEndedFn?;
72
+ private readonly endedRetention;
73
+ private readonly onRecordWriteFailed;
74
+ private readonly onRollback?;
75
+ private readonly findEnded?;
76
+ /** Above zero while a record of what happened is being written: its writes alert rather than throw. */
77
+ private recordingDepth;
78
+ constructor(options?: AgentRegistryOptions);
79
+ /**
80
+ * Admit an agent. Refuses a spec that breaks a registry invariant — an
81
+ * unbounded task, a second default-delivery owner, a relationship that
82
+ * names nobody — so a malformed agent fails at load, not mid-run.
83
+ *
84
+ * `resume` admits a new incarnation of an identity that ended: where its
85
+ * context came from is then history, so the context source no longer has
86
+ * to be live. Who it reports to still does. A spawner that has ended, and
87
+ * a result route to it, are admitted: the agent registers as that
88
+ * spawner's orphan, as if it had been live when the spawner ended.
89
+ * `after` is the incarnation a resumption continues from: the new one is
90
+ * past it, since the counter of a name that aged out of memory isn't kept.
91
+ */
92
+ register(spec: AgentSpec, options?: {
93
+ resume?: boolean;
94
+ after?: number;
95
+ }): AgentRecord;
96
+ private registerUnguarded;
97
+ private validate;
98
+ /** A live agent's record. */
99
+ get(name: AgentName): AgentRecord | undefined;
100
+ has(name: AgentName): boolean;
101
+ /** The live record, else the most recent ended one with that name, from memory or the host's ended log. */
102
+ inspect(name: AgentName): AgentRecord | undefined;
103
+ /** Flat list of agents — the discovery surface. Ended ones on request. */
104
+ list(options?: {
105
+ includeEnded?: boolean;
106
+ }): AgentRecord[];
107
+ /**
108
+ * An agent other than `except` whose own context a namespace holds, among
109
+ * the records in memory: live, awaiting re-declaration, or ended. A shared
110
+ * fork's record names its parent's namespace, where it owns only a branch,
111
+ * so it holds none.
112
+ * @internal For the framework's namespace check in
113
+ * `createEphemeralAgent()`; not a host API.
114
+ */
115
+ namespaceHolder(namespace: string, except: AgentName): AgentName | undefined;
116
+ /** Provenance stamp for a live agent (or its last incarnation). */
117
+ ref(name: AgentName): AgentRef;
118
+ /** The agent that owns default delivery, if any. */
119
+ primary(): AgentName | null;
120
+ /** Recipients of untargeted inbound, in registration order. */
121
+ untargetedRecipients(): AgentName[];
122
+ /** Recipients of host-wide gate fan-out, in registration order. */
123
+ gateRecipients(): AgentName[];
124
+ ownsProviderScheduling(name: AgentName): boolean;
125
+ /** Agents reading the residents' shared message slot. */
126
+ sharedSlotReaders(): AgentName[];
127
+ readsSharedSlot(name: AgentName): boolean;
128
+ /** The channel an agent is bound to, if it has one. */
129
+ homeChannel(name: AgentName): AgentRecord['homeChannel'];
130
+ /** Live agents of one preset label. Discovery only — see {@link AgentKind}. */
131
+ ofKind(kind: string): AgentRecord[];
132
+ private namesWhere;
133
+ /** Live agents this one spawned. */
134
+ children(name: AgentName): AgentRecord[];
135
+ /** Live spawn ancestors, nearest first. */
136
+ ancestors(name: AgentName): AgentName[];
137
+ /** Live agents whose completed work returns to `name`. */
138
+ resultSources(name: AgentName): AgentRecord[];
139
+ /** Record that `from` used an explicit message path to `to`. */
140
+ noteMessagePath(from: AgentName, to: AgentName): void;
141
+ /**
142
+ * End an agent identity. Attention tenants it spawned end with it; task
143
+ * work it spawned is orphaned, with reparenting candidates. Result routes
144
+ * that pointed at it are left in place — delivery holds the mail instead
145
+ * of dropping it, so a later adoption can still receive the result.
146
+ */
147
+ /**
148
+ * End an agent. A stop a caller asks for is a requested change: a write that
149
+ * fails puts memory back and fails the call. A run's own end or an idle
150
+ * reap (`record: true`) records what has already happened: a write that
151
+ * fails alerts, and the next write carries it (nissa's #546 review, round 3).
152
+ */
153
+ end(name: AgentName, reason: AgentEndReason, by?: string, options?: {
154
+ record?: boolean;
155
+ }): EndOutcome | null;
156
+ private endUnguarded;
157
+ private endRecursive;
158
+ /** Who could take over an ending agent's children: nearest live ancestor, then the primary. */
159
+ private adoptionCandidates;
160
+ /**
161
+ * Give an agent a new spawner. Clears orphan state. A result route whose
162
+ * recipient is gone follows the new parent, and mail the agent already
163
+ * produced for the lost recipient is re-addressed and returned so the
164
+ * caller can deliver it.
165
+ */
166
+ reparent(name: AgentName, newParent: AgentName): {
167
+ record: AgentRecord;
168
+ deliverable: HeldMail[];
169
+ };
170
+ private reparentUnguarded;
171
+ /**
172
+ * An ended agent's held mail finds a new recipient: every item it produced
173
+ * for a recipient that is gone (a result or a message, as `reparent`
174
+ * moves for a live agent) is re-addressed to `newParent` and returned for
175
+ * delivery. Its record stays as it ended, since history isn't reparented.
176
+ * @internal For the framework's `reparentAgent()` of an ended agent; not a host API.
177
+ */
178
+ readdressHeldMail(name: AgentName, newParent: AgentName): {
179
+ record: AgentRecord;
180
+ deliverable: HeldMail[];
181
+ };
182
+ /** Record a communication durably BEFORE attempting delivery. */
183
+ holdMail(mail: Omit<HeldMail, 'id' | 'createdAt'> & {
184
+ id?: string;
185
+ }): HeldMail;
186
+ /** Delivery confirmed: forget the held copy. */
187
+ releaseMail(id: string): void;
188
+ /** Mark why an item is still held (delivery attempted and not possible yet). */
189
+ markMailHeld(id: string, because: NonNullable<HeldMail['heldBecause']>): void;
190
+ listMail(filter?: {
191
+ to?: AgentName;
192
+ from?: AgentName;
193
+ }): HeldMail[];
194
+ snapshot(): RegistrySnapshot;
195
+ /**
196
+ * Load what the previous process persisted. Restart behaviour follows
197
+ * from lifetime: a persistent agent waits to be re-declared by
198
+ * configuration (see {@link reconcile}); every other agent that was live
199
+ * is ended here as interrupted, in memory, and returned so its result
200
+ * recipient can be told. It stays in the snapshot as it was, and its end
201
+ * is written, once the host has told the recipients (settleInterrupted).
202
+ * Held mail is kept for redelivery.
203
+ *
204
+ * A bounded record the ended history already holds, by name and
205
+ * incarnation, ended before the previous process could write the snapshot
206
+ * without it: it is dropped, not ended again. A persistent record waits to
207
+ * be re-declared whatever that history says, since the end there may be one
208
+ * a stop left that failed and was put back (an append can't be taken
209
+ * back); configuration then declares it again or ends it.
210
+ *
211
+ * `endedHistory` is the tail of the ended-record log, oldest first.
212
+ */
213
+ restore(snapshot: RegistrySnapshot | null | undefined, endedHistory?: AgentRecord[]): RestoreOutcome;
214
+ /**
215
+ * The host has told each interrupted job's recipient (restore's
216
+ * `interrupted`): their ends are written now, and the snapshot no longer
217
+ * lists them. Each pending entry carries its own end, as memory keeps only
218
+ * the newest `endedRetention`. An end whose write fails is reported and
219
+ * stays pending, so the snapshot still lists it and a later settlement (the
220
+ * next boot's) writes it; a failed snapshot write is reported too.
221
+ * @internal For the framework's boot, once the interrupted jobs'
222
+ * recipients are told; not a host API.
223
+ */
224
+ settleInterrupted(): void;
225
+ /**
226
+ * Call once configuration has declared its agents. A persistent agent the
227
+ * previous process ran but this configuration omits is ended, with the
228
+ * usual consequences for what it spawned.
229
+ */
230
+ reconcile(): ReconcileOutcome;
231
+ private recordEnded;
232
+ /** Mark a record ended and keep it in memory, without writing the end. */
233
+ private pushEnded;
234
+ /** Write an ended record through the host's append hook. */
235
+ private appendEndedRecord;
236
+ /**
237
+ * Run a change a caller asks for — a registration, an end, a reparent, a
238
+ * hold — so that a write failing on the way puts memory back as it was:
239
+ * the call fails and changes nothing, and a retry does it once (nissa's
240
+ * #546 review, round 2: a stop whose write failed left the agent recorded
241
+ * as stopped while it kept running).
242
+ */
243
+ private requested;
244
+ /** Memory is as it was before a change that failed: the host rewrites its copies to match. The caller hears why
245
+ * its change failed, not why the put-back did. */
246
+ private putBack;
247
+ /** Run a record of something that has already happened: its writes alert and stay in memory rather than throw. */
248
+ private recording;
249
+ /** The ended records in memory, newest last. */
250
+ endedHistory(): AgentRecord[];
251
+ /** Persist a record of something that has already happened: a failure
252
+ * alerts and leaves the change in memory for the next write to carry. */
253
+ private persistRecord;
254
+ /** Write the snapshot through the host's persist hook. A write that fails
255
+ * fails the change that made it (nissa's #546 finding 2): the change is in
256
+ * memory, and the caller is told it is not durable, rather than told it
257
+ * succeeded while a restart would lose it. */
258
+ private persist;
259
+ }
260
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/dendrite/registry.ts"],"names":[],"mappings":"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"}