@animalabs/agent-framework 0.31.0 → 0.33.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 (298) hide show
  1. package/README.md +204 -14
  2. package/dist/src/admission/admit.d.ts +18 -0
  3. package/dist/src/admission/admit.d.ts.map +1 -1
  4. package/dist/src/admission/admit.js +16 -3
  5. package/dist/src/admission/admit.js.map +1 -1
  6. package/dist/src/agent.d.ts +185 -78
  7. package/dist/src/agent.d.ts.map +1 -1
  8. package/dist/src/agent.js +279 -102
  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 +50 -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 +4 -20
  15. package/dist/src/api/server.js.map +1 -1
  16. package/dist/src/code-execution/isolate/scripts.d.ts +12 -8
  17. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  18. package/dist/src/code-execution/isolate/scripts.js +24 -0
  19. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  20. package/dist/src/config-checks.d.ts +7 -0
  21. package/dist/src/config-checks.d.ts.map +1 -1
  22. package/dist/src/config-checks.js +14 -0
  23. package/dist/src/config-checks.js.map +1 -1
  24. package/dist/src/context-manager-errors.d.ts +25 -0
  25. package/dist/src/context-manager-errors.d.ts.map +1 -0
  26. package/dist/src/context-manager-errors.js +31 -0
  27. package/dist/src/context-manager-errors.js.map +1 -0
  28. package/dist/src/context-options.d.ts +67 -0
  29. package/dist/src/context-options.d.ts.map +1 -0
  30. package/dist/src/context-options.js +85 -0
  31. package/dist/src/context-options.js.map +1 -0
  32. package/dist/src/deferred-import.d.ts +93 -0
  33. package/dist/src/deferred-import.d.ts.map +1 -0
  34. package/dist/src/deferred-import.js +177 -0
  35. package/dist/src/deferred-import.js.map +1 -0
  36. package/dist/src/dendrite/audience.d.ts +223 -0
  37. package/dist/src/dendrite/audience.d.ts.map +1 -0
  38. package/dist/src/dendrite/audience.js +202 -0
  39. package/dist/src/dendrite/audience.js.map +1 -0
  40. package/dist/src/dendrite/index.d.ts +5 -3
  41. package/dist/src/dendrite/index.d.ts.map +1 -1
  42. package/dist/src/dendrite/index.js +2 -1
  43. package/dist/src/dendrite/index.js.map +1 -1
  44. package/dist/src/dendrite/presets.d.ts +10 -5
  45. package/dist/src/dendrite/presets.d.ts.map +1 -1
  46. package/dist/src/dendrite/presets.js +17 -5
  47. package/dist/src/dendrite/presets.js.map +1 -1
  48. package/dist/src/dendrite/registry.d.ts +62 -7
  49. package/dist/src/dendrite/registry.d.ts.map +1 -1
  50. package/dist/src/dendrite/registry.js +179 -10
  51. package/dist/src/dendrite/registry.js.map +1 -1
  52. package/dist/src/dendrite/types.d.ts +91 -8
  53. package/dist/src/dendrite/types.d.ts.map +1 -1
  54. package/dist/src/foreign-rounds.d.ts +69 -0
  55. package/dist/src/foreign-rounds.d.ts.map +1 -0
  56. package/dist/src/foreign-rounds.js +152 -0
  57. package/dist/src/foreign-rounds.js.map +1 -0
  58. package/dist/src/framework.d.ts +1977 -820
  59. package/dist/src/framework.d.ts.map +1 -1
  60. package/dist/src/framework.js +7571 -3457
  61. package/dist/src/framework.js.map +1 -1
  62. package/dist/src/gate/event-gate.d.ts +85 -15
  63. package/dist/src/gate/event-gate.d.ts.map +1 -1
  64. package/dist/src/gate/event-gate.js +421 -47
  65. package/dist/src/gate/event-gate.js.map +1 -1
  66. package/dist/src/gate/index.d.ts +1 -1
  67. package/dist/src/gate/index.d.ts.map +1 -1
  68. package/dist/src/gate/index.js.map +1 -1
  69. package/dist/src/gate/rule-scope.d.ts +30 -0
  70. package/dist/src/gate/rule-scope.d.ts.map +1 -0
  71. package/dist/src/gate/rule-scope.js +41 -0
  72. package/dist/src/gate/rule-scope.js.map +1 -0
  73. package/dist/src/gate/suppress-script-worker.d.ts +2 -0
  74. package/dist/src/gate/suppress-script-worker.d.ts.map +1 -0
  75. package/dist/src/gate/suppress-script-worker.js +103 -0
  76. package/dist/src/gate/suppress-script-worker.js.map +1 -0
  77. package/dist/src/gate/suppress-scripts.d.ts +105 -0
  78. package/dist/src/gate/suppress-scripts.d.ts.map +1 -0
  79. package/dist/src/gate/suppress-scripts.js +403 -0
  80. package/dist/src/gate/suppress-scripts.js.map +1 -0
  81. package/dist/src/gate/suppression-review.d.ts +143 -0
  82. package/dist/src/gate/suppression-review.d.ts.map +1 -0
  83. package/dist/src/gate/suppression-review.js +463 -0
  84. package/dist/src/gate/suppression-review.js.map +1 -0
  85. package/dist/src/gate/suppression-stats.d.ts +125 -0
  86. package/dist/src/gate/suppression-stats.d.ts.map +1 -0
  87. package/dist/src/gate/suppression-stats.js +214 -0
  88. package/dist/src/gate/suppression-stats.js.map +1 -0
  89. package/dist/src/gate/types.d.ts +135 -7
  90. package/dist/src/gate/types.d.ts.map +1 -1
  91. package/dist/src/gate/wake-onboarding.d.ts +119 -0
  92. package/dist/src/gate/wake-onboarding.d.ts.map +1 -0
  93. package/dist/src/gate/wake-onboarding.js +277 -0
  94. package/dist/src/gate/wake-onboarding.js.map +1 -0
  95. package/dist/src/held-writes.d.ts +31 -23
  96. package/dist/src/held-writes.d.ts.map +1 -1
  97. package/dist/src/held-writes.js +44 -59
  98. package/dist/src/held-writes.js.map +1 -1
  99. package/dist/src/index.d.ts +5 -2
  100. package/dist/src/index.d.ts.map +1 -1
  101. package/dist/src/index.js +3 -0
  102. package/dist/src/index.js.map +1 -1
  103. package/dist/src/jsonrpc-envelope.d.ts +69 -0
  104. package/dist/src/jsonrpc-envelope.d.ts.map +1 -0
  105. package/dist/src/jsonrpc-envelope.js +66 -0
  106. package/dist/src/jsonrpc-envelope.js.map +1 -0
  107. package/dist/src/mcpl/channel-registry.d.ts +131 -15
  108. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  109. package/dist/src/mcpl/channel-registry.js +290 -46
  110. package/dist/src/mcpl/channel-registry.js.map +1 -1
  111. package/dist/src/mcpl/checkpoint-manager.d.ts +2 -4
  112. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
  113. package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
  114. package/dist/src/mcpl/feature-set-manager.d.ts +2 -4
  115. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
  116. package/dist/src/mcpl/feature-set-manager.js.map +1 -1
  117. package/dist/src/mcpl/inbound-source.d.ts +2 -1
  118. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  119. package/dist/src/mcpl/inbound-source.js +2 -1
  120. package/dist/src/mcpl/inbound-source.js.map +1 -1
  121. package/dist/src/mcpl/inference-router.d.ts +6 -6
  122. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  123. package/dist/src/mcpl/inference-router.js.map +1 -1
  124. package/dist/src/mcpl/push-coalescer.d.ts +132 -22
  125. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  126. package/dist/src/mcpl/push-coalescer.js +105 -15
  127. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  128. package/dist/src/mcpl/push-handler.d.ts +9 -7
  129. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  130. package/dist/src/mcpl/push-handler.js.map +1 -1
  131. package/dist/src/mcpl/server-connection.d.ts +13 -10
  132. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  133. package/dist/src/mcpl/server-connection.js +134 -56
  134. package/dist/src/mcpl/server-connection.js.map +1 -1
  135. package/dist/src/mcpl/tool-classes.d.ts.map +1 -1
  136. package/dist/src/mcpl/tool-classes.js +3 -0
  137. package/dist/src/mcpl/tool-classes.js.map +1 -1
  138. package/dist/src/mcpl/types.d.ts +8 -2
  139. package/dist/src/mcpl/types.d.ts.map +1 -1
  140. package/dist/src/mcpl/types.js.map +1 -1
  141. package/dist/src/module-registry.d.ts +24 -1
  142. package/dist/src/module-registry.d.ts.map +1 -1
  143. package/dist/src/module-registry.js +68 -18
  144. package/dist/src/module-registry.js.map +1 -1
  145. package/dist/src/modules/discord/index.d.ts +45 -8
  146. package/dist/src/modules/discord/index.d.ts.map +1 -1
  147. package/dist/src/modules/discord/index.js +237 -86
  148. package/dist/src/modules/discord/index.js.map +1 -1
  149. package/dist/src/modules/history/index.d.ts +59 -0
  150. package/dist/src/modules/history/index.d.ts.map +1 -1
  151. package/dist/src/modules/history/index.js +432 -67
  152. package/dist/src/modules/history/index.js.map +1 -1
  153. package/dist/src/modules/history/semantic.d.ts +6 -5
  154. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  155. package/dist/src/modules/history/semantic.js +15 -22
  156. package/dist/src/modules/history/semantic.js.map +1 -1
  157. package/dist/src/modules/workspace/disk-agreement.d.ts +1 -1
  158. package/dist/src/modules/workspace/disk-agreement.js +1 -1
  159. package/dist/src/modules/workspace/index.d.ts +28 -7
  160. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  161. package/dist/src/modules/workspace/index.js +76 -22
  162. package/dist/src/modules/workspace/index.js.map +1 -1
  163. package/dist/src/notice-tags.d.ts +10 -1
  164. package/dist/src/notice-tags.d.ts.map +1 -1
  165. package/dist/src/notice-tags.js +10 -1
  166. package/dist/src/notice-tags.js.map +1 -1
  167. package/dist/src/operator-log.d.ts +36 -3
  168. package/dist/src/operator-log.d.ts.map +1 -1
  169. package/dist/src/operator-log.js +2 -2
  170. package/dist/src/operator-log.js.map +1 -1
  171. package/dist/src/presentation.d.ts +746 -0
  172. package/dist/src/presentation.d.ts.map +1 -0
  173. package/dist/src/presentation.js +1435 -0
  174. package/dist/src/presentation.js.map +1 -0
  175. package/dist/src/prose-drafts.d.ts +15 -11
  176. package/dist/src/prose-drafts.d.ts.map +1 -1
  177. package/dist/src/prose-drafts.js +16 -12
  178. package/dist/src/prose-drafts.js.map +1 -1
  179. package/dist/src/read-marks.d.ts +192 -0
  180. package/dist/src/read-marks.d.ts.map +1 -0
  181. package/dist/src/read-marks.js +242 -0
  182. package/dist/src/read-marks.js.map +1 -0
  183. package/dist/src/recovery/offline-branch.d.ts +91 -6
  184. package/dist/src/recovery/offline-branch.d.ts.map +1 -1
  185. package/dist/src/recovery/offline-branch.js +273 -29
  186. package/dist/src/recovery/offline-branch.js.map +1 -1
  187. package/dist/src/recovery/recover-cli.js +22 -3
  188. package/dist/src/recovery/recover-cli.js.map +1 -1
  189. package/dist/src/send-tools.d.ts +5 -9
  190. package/dist/src/send-tools.d.ts.map +1 -1
  191. package/dist/src/send-tools.js +40 -7
  192. package/dist/src/send-tools.js.map +1 -1
  193. package/dist/src/stored-injections.d.ts +2 -2
  194. package/dist/src/stored-injections.js +2 -2
  195. package/dist/src/stored-removal.d.ts +17 -4
  196. package/dist/src/stored-removal.d.ts.map +1 -1
  197. package/dist/src/stored-removal.js +29 -5
  198. package/dist/src/stored-removal.js.map +1 -1
  199. package/dist/src/tool-result-guard.d.ts +12 -1
  200. package/dist/src/tool-result-guard.d.ts.map +1 -1
  201. package/dist/src/tool-result-guard.js +42 -8
  202. package/dist/src/tool-result-guard.js.map +1 -1
  203. package/dist/src/tune-out/coordinator.d.ts +1159 -79
  204. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  205. package/dist/src/tune-out/coordinator.js +3709 -363
  206. package/dist/src/tune-out/coordinator.js.map +1 -1
  207. package/dist/src/tune-out/tools.d.ts +114 -17
  208. package/dist/src/tune-out/tools.d.ts.map +1 -1
  209. package/dist/src/tune-out/tools.js +87 -27
  210. package/dist/src/tune-out/tools.js.map +1 -1
  211. package/dist/src/tune-out/window-anchor.d.ts +143 -0
  212. package/dist/src/tune-out/window-anchor.d.ts.map +1 -0
  213. package/dist/src/tune-out/window-anchor.js +202 -0
  214. package/dist/src/tune-out/window-anchor.js.map +1 -0
  215. package/dist/src/types/agent.d.ts +86 -31
  216. package/dist/src/types/agent.d.ts.map +1 -1
  217. package/dist/src/types/events.d.ts +2 -0
  218. package/dist/src/types/events.d.ts.map +1 -1
  219. package/dist/src/types/framework.d.ts +43 -21
  220. package/dist/src/types/framework.d.ts.map +1 -1
  221. package/dist/src/types/module.d.ts +180 -69
  222. package/dist/src/types/module.d.ts.map +1 -1
  223. package/dist/src/types/trace.d.ts +510 -36
  224. package/dist/src/types/trace.d.ts.map +1 -1
  225. package/package.json +3 -3
  226. package/src/admission/admit.ts +32 -3
  227. package/src/agent.ts +323 -120
  228. package/src/api/mcp-server-core.ts +54 -17
  229. package/src/api/server.ts +4 -23
  230. package/src/code-execution/isolate/scripts.ts +28 -3
  231. package/src/config-checks.ts +14 -0
  232. package/src/context-manager-errors.ts +37 -0
  233. package/src/context-options.ts +96 -0
  234. package/src/deferred-import.ts +239 -0
  235. package/src/dendrite/audience.ts +315 -0
  236. package/src/dendrite/index.ts +14 -2
  237. package/src/dendrite/presets.ts +18 -6
  238. package/src/dendrite/registry.ts +209 -12
  239. package/src/dendrite/types.ts +92 -8
  240. package/src/foreign-rounds.ts +199 -0
  241. package/src/framework.ts +7814 -3585
  242. package/src/gate/event-gate.ts +428 -65
  243. package/src/gate/index.ts +3 -0
  244. package/src/gate/rule-scope.ts +45 -0
  245. package/src/gate/suppress-script-worker.ts +89 -0
  246. package/src/gate/suppress-scripts.ts +414 -0
  247. package/src/gate/suppression-review.ts +517 -0
  248. package/src/gate/suppression-stats.ts +314 -0
  249. package/src/gate/types.ts +141 -7
  250. package/src/gate/wake-onboarding.ts +309 -0
  251. package/src/held-writes.ts +49 -60
  252. package/src/index.ts +9 -2
  253. package/src/jsonrpc-envelope.ts +81 -0
  254. package/src/mcpl/channel-registry.ts +353 -85
  255. package/src/mcpl/checkpoint-manager.ts +3 -2
  256. package/src/mcpl/feature-set-manager.ts +2 -1
  257. package/src/mcpl/inbound-source.ts +2 -1
  258. package/src/mcpl/inference-router.ts +7 -4
  259. package/src/mcpl/push-coalescer.ts +193 -34
  260. package/src/mcpl/push-handler.ts +10 -5
  261. package/src/mcpl/server-connection.ts +141 -60
  262. package/src/mcpl/tool-classes.ts +3 -0
  263. package/src/mcpl/types.ts +8 -2
  264. package/src/module-registry.ts +73 -17
  265. package/src/modules/discord/index.ts +229 -81
  266. package/src/modules/history/index.ts +439 -70
  267. package/src/modules/history/semantic.ts +15 -21
  268. package/src/modules/workspace/disk-agreement.ts +1 -1
  269. package/src/modules/workspace/index.ts +85 -23
  270. package/src/notice-tags.ts +10 -1
  271. package/src/operator-log.ts +36 -3
  272. package/src/presentation.ts +1676 -0
  273. package/src/prose-drafts.ts +16 -12
  274. package/src/read-marks.ts +328 -0
  275. package/src/recovery/offline-branch.ts +346 -32
  276. package/src/recovery/recover-cli.ts +21 -3
  277. package/src/send-tools.ts +40 -7
  278. package/src/stored-injections.ts +2 -2
  279. package/src/stored-removal.ts +31 -7
  280. package/src/tool-result-guard.ts +41 -7
  281. package/src/tune-out/coordinator.ts +4089 -457
  282. package/src/tune-out/tools.ts +160 -43
  283. package/src/tune-out/window-anchor.ts +277 -0
  284. package/src/types/agent.ts +90 -31
  285. package/src/types/events.ts +2 -0
  286. package/src/types/framework.ts +43 -21
  287. package/src/types/module.ts +181 -68
  288. package/src/types/trace.ts +542 -40
  289. package/dist/src/reasoning-loss-notice.d.ts +0 -23
  290. package/dist/src/reasoning-loss-notice.d.ts.map +0 -1
  291. package/dist/src/reasoning-loss-notice.js +0 -52
  292. package/dist/src/reasoning-loss-notice.js.map +0 -1
  293. package/dist/src/reasoning-loss.d.ts +0 -24
  294. package/dist/src/reasoning-loss.d.ts.map +0 -1
  295. package/dist/src/reasoning-loss.js +0 -102
  296. package/dist/src/reasoning-loss.js.map +0 -1
  297. package/src/reasoning-loss-notice.ts +0 -64
  298. package/src/reasoning-loss.ts +0 -120
@@ -1,23 +0,0 @@
1
- export type ReasoningLossCause = 'tools' | 'system' | 'model';
2
- export type ReasoningLossAnchor = {
3
- text: string;
4
- } | {
5
- toolCall: string;
6
- };
7
- export interface ReasoningLossNoticeInput {
8
- agentName: string;
9
- scope: {
10
- kind: 'all';
11
- through?: ReasoningLossAnchor;
12
- thisTurn: boolean;
13
- } | {
14
- kind: 'some';
15
- count: number;
16
- first?: ReasoningLossAnchor;
17
- unplaced?: boolean;
18
- thisTurn: boolean;
19
- };
20
- causes: readonly ReasoningLossCause[];
21
- }
22
- export declare function reasoningLossNotice(input: ReasoningLossNoticeInput): string;
23
- //# sourceMappingURL=reasoning-loss-notice.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reasoning-loss-notice.d.ts","sourceRoot":"","sources":["../../src/reasoning-loss-notice.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EACD;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,GACjE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACxG,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACvC;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAyB3E"}
@@ -1,52 +0,0 @@
1
- import { NOTICE_TAG } from './notice-tags.js';
2
- import { oneLine, suppliedValue } from './supplied-text.js';
3
- import { safeSlice } from './safe-slice.js';
4
- const ANCHOR_CHARS = 80;
5
- const CAUSE_WORDS = {
6
- tools: 'your tools changed',
7
- system: 'your system prompt changed',
8
- model: 'your model changed',
9
- };
10
- const CAUSE_ORDER = ['tools', 'system', 'model'];
11
- export function reasoningLossNotice(input) {
12
- const causes = CAUSE_ORDER.filter((c) => input.causes.includes(c)).map((c) => CAUSE_WORDS[c]);
13
- const because = causes.length > 0 ? `, because ${joinAnd(causes)}` : '';
14
- const scope = input.scope;
15
- let lost;
16
- let reread;
17
- if (scope.kind === 'all') {
18
- const through = scope.through ? anchorWords(scope.through) : undefined;
19
- const among = scope.thisTurn ? ", this turn's earlier steps among them," : '';
20
- lost = through
21
- ? `The reasoning behind your replies up to the one ${through}${among} is no longer in your context${because}.`
22
- : `The reasoning behind your earlier replies${among} is no longer in your context${because}.`;
23
- reread = 'Re-read before relying on an earlier decision.';
24
- }
25
- else {
26
- const one = scope.count === 1 && !scope.unplaced;
27
- const replies = scope.unplaced
28
- ? `at least ${scope.count} of your replies`
29
- : one ? 'one of your replies' : `${scope.count} of your replies`;
30
- const named = scope.first && !scope.unplaced ? anchorWords(scope.first) : undefined;
31
- const first = named ? (one ? `, the one ${named}` : `, the first being the one ${named}`) : '';
32
- const among = scope.thisTurn ? (one ? ', an earlier step of this turn' : ", this turn's earlier steps among them") : '';
33
- lost = `Some of your earlier reasoning is no longer in your context: the reasoning behind ${replies}${first}${among}${because}.`;
34
- reread = named ? 'Re-read before relying on a decision made since then.' : 'Re-read before relying on an earlier decision.';
35
- }
36
- return `[${NOTICE_TAG.reasoning}] ${input.agentName}: ${lost} Their words are still here. ${reread}`;
37
- }
38
- function anchorWords(anchor) {
39
- if ('toolCall' in anchor)
40
- return anchor.toolCall ? `that called \`${suppliedValue(anchor.toolCall)}\`` : undefined;
41
- const text = oneLine(anchor.text).replace(/\s+/g, ' ').trim();
42
- if (!text)
43
- return undefined;
44
- const clipped = text.length > ANCHOR_CHARS ? `${safeSlice(text, 0, ANCHOR_CHARS).trimEnd()}…` : text;
45
- return `beginning "${clipped}"`;
46
- }
47
- function joinAnd(parts) {
48
- if (parts.length <= 1)
49
- return parts.join('');
50
- return `${parts.slice(0, -1).join(', ')} and ${parts[parts.length - 1]}`;
51
- }
52
- //# sourceMappingURL=reasoning-loss-notice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reasoning-loss-notice.js","sourceRoot":"","sources":["../../src/reasoning-loss-notice.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import type { ContentBlock } from '@animalabs/membrane';
2
- import type { MessageId, ThinkingStrip } from '@animalabs/context-manager';
3
- import { type PlacedDrop } from './thinking-drops.js';
4
- export interface StoredReplyReader {
5
- getMessage(id: MessageId): {
6
- sequence: number;
7
- content: readonly ContentBlock[];
8
- } | null;
9
- }
10
- export interface ReasoningLossTurn {
11
- start?: {
12
- branch: string;
13
- sequence: number;
14
- };
15
- }
16
- export declare class ReasoningLossTeller {
17
- private readonly told;
18
- private readonly drops;
19
- forStrip(agentName: string, branch: string, strip: ThinkingStrip, turn: ReasoningLossTurn, store: StoredReplyReader): string | undefined;
20
- forDrops(agentName: string, branch: string, placed: readonly PlacedDrop[], turn: ReasoningLossTurn, store: StoredReplyReader): string | undefined;
21
- forget(agentName: string): void;
22
- private toldFor;
23
- }
24
- //# sourceMappingURL=reasoning-loss.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reasoning-loss.d.ts","sourceRoot":"","sources":["../../src/reasoning-loss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO7E,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAC1F;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAQD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkD;IACvE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IAErD,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,iBAAiB,GACvB,MAAM,GAAG,SAAS,CA0BpB;IAED,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,iBAAiB,GACvB,MAAM,GAAG,SAAS,CAuBpB;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,OAAO,CAAC,OAAO;CAOhB"}
@@ -1,102 +0,0 @@
1
- import { ThinkingLossIncidents } from './thinking-drops.js';
2
- import { reasoningLossNotice, } from './reasoning-loss-notice.js';
3
- const HEAD_CAUSES = {
4
- tools: 'tools',
5
- system: 'system',
6
- model: 'model',
7
- };
8
- export class ReasoningLossTeller {
9
- told = new Map();
10
- drops = new ThinkingLossIncidents();
11
- forStrip(agentName, branch, strip, turn, store) {
12
- const told = this.toldFor(agentName, branch);
13
- const taken = strip.newly
14
- .map((id) => ({ id, sequence: store.getMessage(id)?.sequence }))
15
- .sort((a, b) => (a.sequence ?? Infinity) - (b.sequence ?? Infinity));
16
- const replies = taken.filter((r) => !told.has(r.id));
17
- if (replies.length === 0)
18
- return undefined;
19
- const thisTurn = replies.some((r) => isThisTurn(r.sequence, branch, turn));
20
- if (strip.cause === 'head') {
21
- const causes = (strip.changed ?? [])
22
- .map((c) => HEAD_CAUSES[c])
23
- .filter((c) => c !== undefined);
24
- const newest = taken.filter((r) => r.sequence !== undefined).at(-1);
25
- const through = newest ? anchorOf(store.getMessage(newest.id)?.content) : undefined;
26
- const amongThisTurn = taken.some((r) => isThisTurn(r.sequence, branch, turn));
27
- for (const r of replies)
28
- told.add(r.id);
29
- return reasoningLossNotice({ agentName, scope: { kind: 'all', ...(through ? { through } : {}), thisTurn: amongThisTurn }, causes });
30
- }
31
- if (strip.cause !== 'first' && !taken.some((r) => isThisTurn(r.sequence, branch, turn)))
32
- return undefined;
33
- const first = anchorOf(store.getMessage(replies[0].id)?.content);
34
- for (const r of replies)
35
- told.add(r.id);
36
- return reasoningLossNotice({
37
- agentName,
38
- scope: { kind: 'some', count: replies.length, ...(first ? { first } : {}), thisTurn },
39
- causes: [],
40
- });
41
- }
42
- forDrops(agentName, branch, placed, turn, store) {
43
- const replies = new Map();
44
- const rounds = new Set();
45
- let blocks = 0;
46
- for (const drop of placed) {
47
- if (drop.kind === 'unplaced')
48
- continue;
49
- blocks++;
50
- if (drop.kind === 'round')
51
- rounds.add(drop.round);
52
- else
53
- for (const body of drop.bodies)
54
- replies.set(body.messageId, body.sequence);
55
- }
56
- const unplaced = blocks < placed.length;
57
- const count = replies.size + rounds.size;
58
- const ordered = [...replies].sort((a, b) => a[1] - b[1]);
59
- const thisTurn = rounds.size > 0 || ordered.some(([, sequence]) => isThisTurn(sequence, branch, turn));
60
- const first = ordered.length > 0 && !unplaced ? anchorOf(store.getMessage(ordered[0][0])?.content) : undefined;
61
- if (this.drops.observe(agentName, blocks, branch) === undefined)
62
- return undefined;
63
- const told = this.toldFor(agentName, branch);
64
- for (const id of replies.keys())
65
- told.add(id);
66
- return reasoningLossNotice({
67
- agentName,
68
- scope: { kind: 'some', count, ...(first ? { first } : {}), ...(unplaced ? { unplaced: true } : {}), thisTurn },
69
- causes: [],
70
- });
71
- }
72
- forget(agentName) {
73
- this.told.delete(agentName);
74
- this.drops.forget(agentName);
75
- }
76
- toldFor(agentName, branch) {
77
- let branches = this.told.get(agentName);
78
- if (!branches)
79
- this.told.set(agentName, (branches = new Map()));
80
- let told = branches.get(branch);
81
- if (!told)
82
- branches.set(branch, (told = new Set()));
83
- return told;
84
- }
85
- }
86
- function isThisTurn(sequence, branch, turn) {
87
- return sequence !== undefined && turn.start?.branch === branch && sequence > turn.start.sequence;
88
- }
89
- function anchorOf(content) {
90
- if (!content)
91
- return undefined;
92
- for (const block of content) {
93
- if (block.type === 'text' && typeof block.text === 'string' && block.text.trim() !== '')
94
- return { text: block.text };
95
- }
96
- for (const block of content) {
97
- if (block.type === 'tool_use' && typeof block.name === 'string' && block.name !== '')
98
- return { toolCall: block.name };
99
- }
100
- return undefined;
101
- }
102
- //# sourceMappingURL=reasoning-loss.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reasoning-loss.js","sourceRoot":"","sources":["../../src/reasoning-loss.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- import { NOTICE_TAG } from './notice-tags.js';
2
- import { oneLine, suppliedValue } from './supplied-text.js';
3
- import { safeSlice } from './safe-slice.js';
4
-
5
- export type ReasoningLossCause = 'tools' | 'system' | 'model';
6
-
7
- export type ReasoningLossAnchor = { text: string } | { toolCall: string };
8
-
9
- export interface ReasoningLossNoticeInput {
10
- agentName: string;
11
- scope:
12
- | { kind: 'all'; through?: ReasoningLossAnchor; thisTurn: boolean }
13
- | { kind: 'some'; count: number; first?: ReasoningLossAnchor; unplaced?: boolean; thisTurn: boolean };
14
- causes: readonly ReasoningLossCause[];
15
- }
16
-
17
- const ANCHOR_CHARS = 80;
18
-
19
- const CAUSE_WORDS: Record<ReasoningLossCause, string> = {
20
- tools: 'your tools changed',
21
- system: 'your system prompt changed',
22
- model: 'your model changed',
23
- };
24
- const CAUSE_ORDER: readonly ReasoningLossCause[] = ['tools', 'system', 'model'];
25
-
26
- export function reasoningLossNotice(input: ReasoningLossNoticeInput): string {
27
- const causes = CAUSE_ORDER.filter((c) => input.causes.includes(c)).map((c) => CAUSE_WORDS[c]);
28
- const because = causes.length > 0 ? `, because ${joinAnd(causes)}` : '';
29
- const scope = input.scope;
30
- let lost: string;
31
- let reread: string;
32
- if (scope.kind === 'all') {
33
- const through = scope.through ? anchorWords(scope.through) : undefined;
34
- const among = scope.thisTurn ? ", this turn's earlier steps among them," : '';
35
- lost = through
36
- ? `The reasoning behind your replies up to the one ${through}${among} is no longer in your context${because}.`
37
- : `The reasoning behind your earlier replies${among} is no longer in your context${because}.`;
38
- reread = 'Re-read before relying on an earlier decision.';
39
- } else {
40
- const one = scope.count === 1 && !scope.unplaced;
41
- const replies = scope.unplaced
42
- ? `at least ${scope.count} of your replies`
43
- : one ? 'one of your replies' : `${scope.count} of your replies`;
44
- const named = scope.first && !scope.unplaced ? anchorWords(scope.first) : undefined;
45
- const first = named ? (one ? `, the one ${named}` : `, the first being the one ${named}`) : '';
46
- const among = scope.thisTurn ? (one ? ', an earlier step of this turn' : ", this turn's earlier steps among them") : '';
47
- lost = `Some of your earlier reasoning is no longer in your context: the reasoning behind ${replies}${first}${among}${because}.`;
48
- reread = named ? 'Re-read before relying on a decision made since then.' : 'Re-read before relying on an earlier decision.';
49
- }
50
- return `[${NOTICE_TAG.reasoning}] ${input.agentName}: ${lost} Their words are still here. ${reread}`;
51
- }
52
-
53
- function anchorWords(anchor: ReasoningLossAnchor): string | undefined {
54
- if ('toolCall' in anchor) return anchor.toolCall ? `that called \`${suppliedValue(anchor.toolCall)}\`` : undefined;
55
- const text = oneLine(anchor.text).replace(/\s+/g, ' ').trim();
56
- if (!text) return undefined;
57
- const clipped = text.length > ANCHOR_CHARS ? `${safeSlice(text, 0, ANCHOR_CHARS).trimEnd()}…` : text;
58
- return `beginning "${clipped}"`;
59
- }
60
-
61
- function joinAnd(parts: readonly string[]): string {
62
- if (parts.length <= 1) return parts.join('');
63
- return `${parts.slice(0, -1).join(', ')} and ${parts[parts.length - 1]}`;
64
- }
@@ -1,120 +0,0 @@
1
- import type { ContentBlock } from '@animalabs/membrane';
2
- import type { MessageId, ThinkingStrip } from '@animalabs/context-manager';
3
- import { ThinkingLossIncidents, type PlacedDrop } from './thinking-drops.js';
4
- import {
5
- reasoningLossNotice,
6
- type ReasoningLossAnchor,
7
- type ReasoningLossCause,
8
- } from './reasoning-loss-notice.js';
9
-
10
- export interface StoredReplyReader {
11
- getMessage(id: MessageId): { sequence: number; content: readonly ContentBlock[] } | null;
12
- }
13
-
14
- export interface ReasoningLossTurn {
15
- start?: { branch: string; sequence: number };
16
- }
17
-
18
- const HEAD_CAUSES: Partial<Record<NonNullable<ThinkingStrip['changed']>[number], ReasoningLossCause>> = {
19
- tools: 'tools',
20
- system: 'system',
21
- model: 'model',
22
- };
23
-
24
- export class ReasoningLossTeller {
25
- private readonly told = new Map<string, Map<string, Set<MessageId>>>();
26
- private readonly drops = new ThinkingLossIncidents();
27
-
28
- forStrip(
29
- agentName: string,
30
- branch: string,
31
- strip: ThinkingStrip,
32
- turn: ReasoningLossTurn,
33
- store: StoredReplyReader,
34
- ): string | undefined {
35
- const told = this.toldFor(agentName, branch);
36
- const taken = strip.newly
37
- .map((id) => ({ id, sequence: store.getMessage(id)?.sequence }))
38
- .sort((a, b) => (a.sequence ?? Infinity) - (b.sequence ?? Infinity));
39
- const replies = taken.filter((r) => !told.has(r.id));
40
- if (replies.length === 0) return undefined;
41
- const thisTurn = replies.some((r) => isThisTurn(r.sequence, branch, turn));
42
- if (strip.cause === 'head') {
43
- const causes = (strip.changed ?? [])
44
- .map((c) => HEAD_CAUSES[c])
45
- .filter((c): c is ReasoningLossCause => c !== undefined);
46
- const newest = taken.filter((r) => r.sequence !== undefined).at(-1);
47
- const through = newest ? anchorOf(store.getMessage(newest.id)?.content) : undefined;
48
- const amongThisTurn = taken.some((r) => isThisTurn(r.sequence, branch, turn));
49
- for (const r of replies) told.add(r.id);
50
- return reasoningLossNotice({ agentName, scope: { kind: 'all', ...(through ? { through } : {}), thisTurn: amongThisTurn }, causes });
51
- }
52
- if (strip.cause !== 'first' && !taken.some((r) => isThisTurn(r.sequence, branch, turn))) return undefined;
53
- const first = anchorOf(store.getMessage(replies[0]!.id)?.content);
54
- for (const r of replies) told.add(r.id);
55
- return reasoningLossNotice({
56
- agentName,
57
- scope: { kind: 'some', count: replies.length, ...(first ? { first } : {}), thisTurn },
58
- causes: [],
59
- });
60
- }
61
-
62
- forDrops(
63
- agentName: string,
64
- branch: string,
65
- placed: readonly PlacedDrop[],
66
- turn: ReasoningLossTurn,
67
- store: StoredReplyReader,
68
- ): string | undefined {
69
- const replies = new Map<MessageId, number>();
70
- const rounds = new Set<number>();
71
- let blocks = 0;
72
- for (const drop of placed) {
73
- if (drop.kind === 'unplaced') continue;
74
- blocks++;
75
- if (drop.kind === 'round') rounds.add(drop.round);
76
- else for (const body of drop.bodies) replies.set(body.messageId, body.sequence);
77
- }
78
- const unplaced = blocks < placed.length;
79
- const count = replies.size + rounds.size;
80
- const ordered = [...replies].sort((a, b) => a[1] - b[1]);
81
- const thisTurn = rounds.size > 0 || ordered.some(([, sequence]) => isThisTurn(sequence, branch, turn));
82
- const first = ordered.length > 0 && !unplaced ? anchorOf(store.getMessage(ordered[0]![0])?.content) : undefined;
83
- if (this.drops.observe(agentName, blocks, branch) === undefined) return undefined;
84
- const told = this.toldFor(agentName, branch);
85
- for (const id of replies.keys()) told.add(id);
86
- return reasoningLossNotice({
87
- agentName,
88
- scope: { kind: 'some', count, ...(first ? { first } : {}), ...(unplaced ? { unplaced: true } : {}), thisTurn },
89
- causes: [],
90
- });
91
- }
92
-
93
- forget(agentName: string): void {
94
- this.told.delete(agentName);
95
- this.drops.forget(agentName);
96
- }
97
-
98
- private toldFor(agentName: string, branch: string): Set<MessageId> {
99
- let branches = this.told.get(agentName);
100
- if (!branches) this.told.set(agentName, (branches = new Map()));
101
- let told = branches.get(branch);
102
- if (!told) branches.set(branch, (told = new Set()));
103
- return told;
104
- }
105
- }
106
-
107
- function isThisTurn(sequence: number | undefined, branch: string, turn: ReasoningLossTurn): boolean {
108
- return sequence !== undefined && turn.start?.branch === branch && sequence > turn.start.sequence;
109
- }
110
-
111
- function anchorOf(content: readonly ContentBlock[] | undefined): ReasoningLossAnchor | undefined {
112
- if (!content) return undefined;
113
- for (const block of content) {
114
- if (block.type === 'text' && typeof block.text === 'string' && block.text.trim() !== '') return { text: block.text };
115
- }
116
- for (const block of content) {
117
- if (block.type === 'tool_use' && typeof block.name === 'string' && block.name !== '') return { toolCall: block.name };
118
- }
119
- return undefined;
120
- }