@animalabs/agent-framework 0.26.1 → 0.27.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 (276) hide show
  1. package/README.md +57 -7
  2. package/dist/src/agent.d.ts +263 -22
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +531 -54
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/server.d.ts.map +1 -1
  7. package/dist/src/api/server.js +1 -2
  8. package/dist/src/api/server.js.map +1 -1
  9. package/dist/src/auto-continue.d.ts +33 -0
  10. package/dist/src/auto-continue.d.ts.map +1 -0
  11. package/dist/src/auto-continue.js +35 -0
  12. package/dist/src/auto-continue.js.map +1 -0
  13. package/dist/src/code-execution/isolate/scripts.d.ts +11 -0
  14. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  15. package/dist/src/code-execution/isolate/scripts.js +5 -1
  16. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  17. package/dist/src/framework.d.ts +829 -156
  18. package/dist/src/framework.d.ts.map +1 -1
  19. package/dist/src/framework.js +3906 -1008
  20. package/dist/src/framework.js.map +1 -1
  21. package/dist/src/gate/event-gate.d.ts +309 -46
  22. package/dist/src/gate/event-gate.d.ts.map +1 -1
  23. package/dist/src/gate/event-gate.js +2117 -395
  24. package/dist/src/gate/event-gate.js.map +1 -1
  25. package/dist/src/gate/index.d.ts +2 -2
  26. package/dist/src/gate/index.d.ts.map +1 -1
  27. package/dist/src/gate/index.js +1 -1
  28. package/dist/src/gate/index.js.map +1 -1
  29. package/dist/src/gate/recipe-reconcile.d.ts +103 -0
  30. package/dist/src/gate/recipe-reconcile.d.ts.map +1 -0
  31. package/dist/src/gate/recipe-reconcile.js +325 -0
  32. package/dist/src/gate/recipe-reconcile.js.map +1 -0
  33. package/dist/src/gate/types.d.ts +68 -8
  34. package/dist/src/gate/types.d.ts.map +1 -1
  35. package/dist/src/index.d.ts +6 -4
  36. package/dist/src/index.d.ts.map +1 -1
  37. package/dist/src/index.js +5 -2
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/mcpl/channel-registry.d.ts +433 -113
  40. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  41. package/dist/src/mcpl/channel-registry.js +1152 -434
  42. package/dist/src/mcpl/channel-registry.js.map +1 -1
  43. package/dist/src/mcpl/conversation-router.d.ts +16 -8
  44. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  45. package/dist/src/mcpl/conversation-router.js +29 -15
  46. package/dist/src/mcpl/conversation-router.js.map +1 -1
  47. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  48. package/dist/src/mcpl/convert-block.js +14 -2
  49. package/dist/src/mcpl/convert-block.js.map +1 -1
  50. package/dist/src/mcpl/hook-orchestrator.d.ts +7 -1
  51. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  52. package/dist/src/mcpl/hook-orchestrator.js +32 -7
  53. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  54. package/dist/src/mcpl/index.d.ts +5 -1
  55. package/dist/src/mcpl/index.d.ts.map +1 -1
  56. package/dist/src/mcpl/index.js +4 -0
  57. package/dist/src/mcpl/index.js.map +1 -1
  58. package/dist/src/mcpl/inference-router.d.ts +14 -2
  59. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  60. package/dist/src/mcpl/inference-router.js +73 -28
  61. package/dist/src/mcpl/inference-router.js.map +1 -1
  62. package/dist/src/mcpl/prose-grammar.d.ts +4 -0
  63. package/dist/src/mcpl/prose-grammar.d.ts.map +1 -1
  64. package/dist/src/mcpl/prose-grammar.js +6 -0
  65. package/dist/src/mcpl/prose-grammar.js.map +1 -1
  66. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  67. package/dist/src/mcpl/protocol-family.js +3 -0
  68. package/dist/src/mcpl/protocol-family.js.map +1 -1
  69. package/dist/src/mcpl/push-coalescer.d.ts +20 -2
  70. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  71. package/dist/src/mcpl/push-coalescer.js +33 -11
  72. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  73. package/dist/src/mcpl/reference-fetcher.d.ts +63 -42
  74. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  75. package/dist/src/mcpl/reference-fetcher.js +177 -145
  76. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  77. package/dist/src/mcpl/references.d.ts +380 -46
  78. package/dist/src/mcpl/references.d.ts.map +1 -1
  79. package/dist/src/mcpl/references.js +737 -78
  80. package/dist/src/mcpl/references.js.map +1 -1
  81. package/dist/src/mcpl/server-connection.d.ts +82 -3
  82. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  83. package/dist/src/mcpl/server-connection.js +132 -7
  84. package/dist/src/mcpl/server-connection.js.map +1 -1
  85. package/dist/src/mcpl/tool-lifecycle.d.ts +11 -0
  86. package/dist/src/mcpl/tool-lifecycle.d.ts.map +1 -1
  87. package/dist/src/mcpl/tool-lifecycle.js +21 -0
  88. package/dist/src/mcpl/tool-lifecycle.js.map +1 -1
  89. package/dist/src/mcpl/tool-presence.d.ts +259 -0
  90. package/dist/src/mcpl/tool-presence.d.ts.map +1 -0
  91. package/dist/src/mcpl/tool-presence.js +628 -0
  92. package/dist/src/mcpl/tool-presence.js.map +1 -0
  93. package/dist/src/mcpl/tool-result-normalize.d.ts +9 -3
  94. package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -1
  95. package/dist/src/mcpl/tool-result-normalize.js +14 -6
  96. package/dist/src/mcpl/tool-result-normalize.js.map +1 -1
  97. package/dist/src/mcpl/tool-signature.d.ts +39 -0
  98. package/dist/src/mcpl/tool-signature.d.ts.map +1 -0
  99. package/dist/src/mcpl/tool-signature.js +292 -0
  100. package/dist/src/mcpl/tool-signature.js.map +1 -0
  101. package/dist/src/mcpl/toolset-host.d.ts +200 -0
  102. package/dist/src/mcpl/toolset-host.d.ts.map +1 -0
  103. package/dist/src/mcpl/toolset-host.js +621 -0
  104. package/dist/src/mcpl/toolset-host.js.map +1 -0
  105. package/dist/src/mcpl/toolsets-module.d.ts +80 -0
  106. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -0
  107. package/dist/src/mcpl/toolsets-module.js +431 -0
  108. package/dist/src/mcpl/toolsets-module.js.map +1 -0
  109. package/dist/src/mcpl/transport.d.ts +2 -2
  110. package/dist/src/mcpl/transport.d.ts.map +1 -1
  111. package/dist/src/mcpl/transport.js +3 -2
  112. package/dist/src/mcpl/transport.js.map +1 -1
  113. package/dist/src/mcpl/types.d.ts +21 -1
  114. package/dist/src/mcpl/types.d.ts.map +1 -1
  115. package/dist/src/mcpl/types.js.map +1 -1
  116. package/dist/src/mcpl/visible-content.d.ts +7 -9
  117. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  118. package/dist/src/mcpl/visible-content.js +21 -9
  119. package/dist/src/mcpl/visible-content.js.map +1 -1
  120. package/dist/src/module-registry.d.ts +23 -8
  121. package/dist/src/module-registry.d.ts.map +1 -1
  122. package/dist/src/module-registry.js +68 -15
  123. package/dist/src/module-registry.js.map +1 -1
  124. package/dist/src/modules/discord/index.js +1 -1
  125. package/dist/src/modules/discord/index.js.map +1 -1
  126. package/dist/src/modules/history/index.d.ts +2 -1
  127. package/dist/src/modules/history/index.d.ts.map +1 -1
  128. package/dist/src/modules/history/index.js +51 -17
  129. package/dist/src/modules/history/index.js.map +1 -1
  130. package/dist/src/modules/history/semantic.d.ts +108 -6
  131. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  132. package/dist/src/modules/history/semantic.js +273 -57
  133. package/dist/src/modules/history/semantic.js.map +1 -1
  134. package/dist/src/modules/workspace/direct-write.d.ts +181 -0
  135. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -0
  136. package/dist/src/modules/workspace/direct-write.js +384 -0
  137. package/dist/src/modules/workspace/direct-write.js.map +1 -0
  138. package/dist/src/modules/workspace/edit-text.d.ts +26 -12
  139. package/dist/src/modules/workspace/edit-text.d.ts.map +1 -1
  140. package/dist/src/modules/workspace/edit-text.js +58 -28
  141. package/dist/src/modules/workspace/edit-text.js.map +1 -1
  142. package/dist/src/modules/workspace/effects.d.ts +10 -0
  143. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  144. package/dist/src/modules/workspace/effects.js +1 -1
  145. package/dist/src/modules/workspace/effects.js.map +1 -1
  146. package/dist/src/modules/workspace/index.d.ts +246 -27
  147. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  148. package/dist/src/modules/workspace/index.js +1216 -236
  149. package/dist/src/modules/workspace/index.js.map +1 -1
  150. package/dist/src/modules/workspace/read-page.d.ts +41 -0
  151. package/dist/src/modules/workspace/read-page.d.ts.map +1 -0
  152. package/dist/src/modules/workspace/read-page.js +213 -0
  153. package/dist/src/modules/workspace/read-page.js.map +1 -0
  154. package/dist/src/modules/workspace/result-text.d.ts +67 -0
  155. package/dist/src/modules/workspace/result-text.d.ts.map +1 -0
  156. package/dist/src/modules/workspace/result-text.js +94 -0
  157. package/dist/src/modules/workspace/result-text.js.map +1 -0
  158. package/dist/src/modules/workspace/text.d.ts +29 -12
  159. package/dist/src/modules/workspace/text.d.ts.map +1 -1
  160. package/dist/src/modules/workspace/text.js +35 -33
  161. package/dist/src/modules/workspace/text.js.map +1 -1
  162. package/dist/src/modules/workspace/types.d.ts +41 -17
  163. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  164. package/dist/src/modules/workspace/types.js.map +1 -1
  165. package/dist/src/sent-rows.d.ts +59 -0
  166. package/dist/src/sent-rows.d.ts.map +1 -0
  167. package/dist/src/sent-rows.js +145 -0
  168. package/dist/src/sent-rows.js.map +1 -0
  169. package/dist/src/silent-heartbeat.d.ts +17 -10
  170. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  171. package/dist/src/silent-heartbeat.js.map +1 -1
  172. package/dist/src/stable-hash.d.ts +3 -0
  173. package/dist/src/stable-hash.d.ts.map +1 -0
  174. package/dist/src/stable-hash.js +15 -0
  175. package/dist/src/stable-hash.js.map +1 -0
  176. package/dist/src/stored-injections.d.ts +99 -0
  177. package/dist/src/stored-injections.d.ts.map +1 -0
  178. package/dist/src/stored-injections.js +106 -0
  179. package/dist/src/stored-injections.js.map +1 -0
  180. package/dist/src/text-as-stored.d.ts +4 -3
  181. package/dist/src/text-as-stored.d.ts.map +1 -1
  182. package/dist/src/text-as-stored.js +4 -3
  183. package/dist/src/text-as-stored.js.map +1 -1
  184. package/dist/src/thinking-drops.d.ts +81 -0
  185. package/dist/src/thinking-drops.d.ts.map +1 -0
  186. package/dist/src/thinking-drops.js +103 -0
  187. package/dist/src/thinking-drops.js.map +1 -0
  188. package/dist/src/tool-image-ledger.d.ts +9 -8
  189. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  190. package/dist/src/tool-image-ledger.js +9 -8
  191. package/dist/src/tool-image-ledger.js.map +1 -1
  192. package/dist/src/tool-presentation.d.ts.map +1 -1
  193. package/dist/src/tool-presentation.js +3 -1
  194. package/dist/src/tool-presentation.js.map +1 -1
  195. package/dist/src/tool-result-guard.d.ts +4 -2
  196. package/dist/src/tool-result-guard.d.ts.map +1 -1
  197. package/dist/src/tool-result-guard.js +21 -6
  198. package/dist/src/tool-result-guard.js.map +1 -1
  199. package/dist/src/tool-result-history.d.ts +186 -21
  200. package/dist/src/tool-result-history.d.ts.map +1 -1
  201. package/dist/src/tool-result-history.js +428 -89
  202. package/dist/src/tool-result-history.js.map +1 -1
  203. package/dist/src/tune-out/coordinator.d.ts +17 -9
  204. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  205. package/dist/src/tune-out/coordinator.js +84 -37
  206. package/dist/src/tune-out/coordinator.js.map +1 -1
  207. package/dist/src/types/agent.d.ts +186 -7
  208. package/dist/src/types/agent.d.ts.map +1 -1
  209. package/dist/src/types/events.d.ts +19 -2
  210. package/dist/src/types/events.d.ts.map +1 -1
  211. package/dist/src/types/framework.d.ts +24 -3
  212. package/dist/src/types/framework.d.ts.map +1 -1
  213. package/dist/src/types/module.d.ts +90 -7
  214. package/dist/src/types/module.d.ts.map +1 -1
  215. package/dist/src/types/trace.d.ts +57 -2
  216. package/dist/src/types/trace.d.ts.map +1 -1
  217. package/package.json +4 -3
  218. package/src/agent.ts +593 -60
  219. package/src/api/server.ts +1 -2
  220. package/src/auto-continue.ts +42 -0
  221. package/src/code-execution/isolate/scripts.ts +11 -3
  222. package/src/framework.ts +4004 -1026
  223. package/src/gate/event-gate.ts +2315 -389
  224. package/src/gate/index.ts +2 -1
  225. package/src/gate/recipe-reconcile.ts +355 -0
  226. package/src/gate/types.ts +70 -8
  227. package/src/index.ts +7 -4
  228. package/src/mcpl/channel-registry.ts +1220 -467
  229. package/src/mcpl/conversation-router.ts +34 -16
  230. package/src/mcpl/convert-block.ts +14 -1
  231. package/src/mcpl/hook-orchestrator.ts +33 -6
  232. package/src/mcpl/index.ts +6 -1
  233. package/src/mcpl/inference-router.ts +79 -34
  234. package/src/mcpl/prose-grammar.ts +7 -0
  235. package/src/mcpl/protocol-family.ts +2 -0
  236. package/src/mcpl/push-coalescer.ts +51 -13
  237. package/src/mcpl/reference-fetcher.ts +201 -162
  238. package/src/mcpl/references.ts +852 -78
  239. package/src/mcpl/server-connection.ts +145 -7
  240. package/src/mcpl/tool-lifecycle.ts +21 -0
  241. package/src/mcpl/tool-presence.ts +650 -0
  242. package/src/mcpl/tool-result-normalize.ts +18 -6
  243. package/src/mcpl/tool-signature.ts +285 -0
  244. package/src/mcpl/toolset-host.ts +637 -0
  245. package/src/mcpl/toolsets-module.ts +451 -0
  246. package/src/mcpl/transport.ts +3 -2
  247. package/src/mcpl/types.ts +22 -1
  248. package/src/mcpl/visible-content.ts +22 -9
  249. package/src/module-registry.ts +77 -24
  250. package/src/modules/discord/index.ts +1 -1
  251. package/src/modules/history/index.ts +48 -18
  252. package/src/modules/history/semantic.ts +308 -54
  253. package/src/modules/workspace/direct-write.ts +425 -0
  254. package/src/modules/workspace/edit-text.ts +82 -35
  255. package/src/modules/workspace/effects.ts +1 -1
  256. package/src/modules/workspace/index.ts +1274 -241
  257. package/src/modules/workspace/read-page.ts +222 -0
  258. package/src/modules/workspace/result-text.ts +119 -0
  259. package/src/modules/workspace/text.ts +58 -32
  260. package/src/modules/workspace/types.ts +41 -17
  261. package/src/sent-rows.ts +162 -0
  262. package/src/silent-heartbeat.ts +17 -10
  263. package/src/stable-hash.ts +14 -0
  264. package/src/stored-injections.ts +131 -0
  265. package/src/text-as-stored.ts +4 -3
  266. package/src/thinking-drops.ts +141 -0
  267. package/src/tool-image-ledger.ts +9 -8
  268. package/src/tool-presentation.ts +3 -1
  269. package/src/tool-result-guard.ts +19 -6
  270. package/src/tool-result-history.ts +488 -88
  271. package/src/tune-out/coordinator.ts +80 -37
  272. package/src/types/agent.ts +189 -7
  273. package/src/types/events.ts +19 -2
  274. package/src/types/framework.ts +21 -3
  275. package/src/types/module.ts +86 -7
  276. package/src/types/trace.ts +58 -2
@@ -12,7 +12,11 @@
12
12
  * so a message stamped slightly out of order is still picked up; the
13
13
  * service dedups by id + text hash, so re-sending is free. Summaries are
14
14
  * watermarked by `createdMs` (a fresh L3 spans months of old timestamps —
15
- * its creation time is the only monotonic signal).
15
+ * its creation time is the only monotonic signal). Both watermarks are
16
+ * kept in the module's state, which follows the store's branches, so each
17
+ * branch sends its own messages and summaries. A branch made at an earlier
18
+ * point, as an undo makes one, mints summary ids its parent already used,
19
+ * so a summary is keyed `sum:<id>@<created>`.
16
20
  *
17
21
  * What gets embedded per message: text blocks verbatim, plus the string
18
22
  * arguments of the agent's private-prose tools (think / journal / skip_reply
@@ -29,6 +33,7 @@
29
33
  */
30
34
  import { safeSlice } from '../../safe-slice.js';
31
35
  import { SEND_TOOLS, bareToolName } from '../../send-tools.js';
36
+ import { storedInjectionMarkOf } from '../../stored-injections.js';
32
37
  const PRIVATE_PROSE_TOOLS = new Set(['think', 'journal', 'skip_reply', 'private_note']);
33
38
  /**
34
39
  * Tools whose message argument is what the resident said: the send tools,
@@ -157,7 +162,12 @@ export class SemanticIndexClient {
157
162
  }
158
163
  }
159
164
  async upsert(items) {
160
- return this.call('POST', `/v1/index/${this.ns}/upsert`, { items }, { what: 'a JSON object', is: isObject });
165
+ return this.call('POST', `/v1/index/${this.ns}/upsert`, { items }, {
166
+ // A pass's budget spends the counts, so an answer without them isn't
167
+ // taken as one.
168
+ what: 'counts of the items inserted and updated', is: (json) => isObject(json)
169
+ && Number.isFinite(json.inserted) && Number.isFinite(json.updated),
170
+ });
161
171
  }
162
172
  async delete(ids) {
163
173
  return this.call('POST', `/v1/index/${this.ns}/delete`, { ids });
@@ -221,6 +231,11 @@ function authorOf(msg) {
221
231
  return typeof a === 'string' ? a : null;
222
232
  }
223
233
  export function messageToItem(msg, cfg) {
234
+ // A stored context injection (stored-injections.ts) is a source's context,
235
+ // such as retrieval's lessons, not something that happened: indexed, it
236
+ // would come back to a search as history.
237
+ if (storedInjectionMarkOf(msg.metadata))
238
+ return null;
224
239
  const text = messageIndexText(msg, cfg.includePrivateTools ?? true);
225
240
  if (!text)
226
241
  return null;
@@ -239,11 +254,37 @@ export function messageToItem(msg, cfg) {
239
254
  export function summaryIndexText(s, cfg) {
240
255
  return safeSlice(s.content.trim(), 0, cfg.maxChars ?? 32_000);
241
256
  }
257
+ /**
258
+ * A summary's index key, `sum:<id>@<created>`. A branch made at an earlier
259
+ * point mints ids its parent already used, so the id alone names two
260
+ * summaries; its creation time, set when it was minted and kept by a branch
261
+ * that inherits it, tells them apart.
262
+ */
263
+ export function summaryKey(id, createdMs) {
264
+ return `sum:${id}@${createdMs}`;
265
+ }
266
+ /**
267
+ * A `sum:` key read back: its summary id, and its creation time, or null for
268
+ * a key in the form written before summaries were keyed by it (`sum:<id>`).
269
+ * Null for a key that isn't a summary's. A finite number written as a string
270
+ * reads back as the same number, so the time compares equal to the
271
+ * summary's own.
272
+ */
273
+ export function parseSummaryKey(key) {
274
+ if (!key.startsWith('sum:'))
275
+ return null;
276
+ const rest = key.slice(4);
277
+ const at = rest.lastIndexOf('@');
278
+ if (at > 0 && /^-?\d+(?:\.\d+)?(?:e[+-]?\d+)?$/.test(rest.slice(at + 1))) {
279
+ return { id: rest.slice(0, at), createdMs: Number(rest.slice(at + 1)) };
280
+ }
281
+ return rest ? { id: rest, createdMs: null } : null;
282
+ }
242
283
  export function summaryToItem(s, cfg) {
243
284
  if (!s.content.trim())
244
285
  return null;
245
286
  return {
246
- id: `sum:${s.id}`,
287
+ id: summaryKey(s.id, s.createdMs),
247
288
  text: summaryIndexText(s, cfg),
248
289
  ts: s.startMs / 1000,
249
290
  kind: 'summary',
@@ -258,6 +299,8 @@ export class SemanticIndexer {
258
299
  cfg;
259
300
  log;
260
301
  inFlight = null;
302
+ /** The branch each pass read, by its report, for a search that joined it. */
303
+ passBranch = new WeakMap();
261
304
  consecutiveFailures = 0;
262
305
  backoffUntil = 0;
263
306
  lastError = null;
@@ -298,6 +341,53 @@ export class SemanticIndexer {
298
341
  deleteUnsupported = false;
299
342
  /** Called whenever the pending edit/remove sets change. */
300
343
  onPendingChange = null;
344
+ /**
345
+ * Where the sync cursors are kept, set by the host. Without one, as
346
+ * before the host wires module state or after it unwires it, this indexer
347
+ * goes on from the cursors it last wrote for each branch, which it keeps
348
+ * in memory. A branch it wrote none for starts with none.
349
+ */
350
+ cursorStore = null;
351
+ /** The cursors this indexer last wrote, by branch id ('' for a store without branches). */
352
+ ownCursors = new Map();
353
+ /** The store's current branch, by id ('' for a store without branches). */
354
+ branchId() {
355
+ return this.cm.currentBranch?.()?.id ?? '';
356
+ }
357
+ /**
358
+ * The current branch's cursors for this indexer's index. Cursors kept for
359
+ * another namespace, as before the host's index setting changed, are none
360
+ * here.
361
+ */
362
+ syncCursors() {
363
+ const c = this.cursorStore ? this.cursorStore.read() : this.ownCursors.get(this.branchId()) ?? null;
364
+ return c && c.namespace === this.cfg.namespace ? c : { summaries: null, messages: null };
365
+ }
366
+ /** Writes the current branch's cursors, which must be `branch`'s. */
367
+ setSyncCursors(c, branch) {
368
+ const cursors = { namespace: this.cfg.namespace, summaries: c.summaries, messages: c.messages };
369
+ this.ownCursors.set(branch, cursors);
370
+ this.cursorStore?.write(cursors);
371
+ }
372
+ /**
373
+ * Deletes ids from the index. A 404 in a pass whose /stats answered with
374
+ * stats shows the index is made, so it means a service build without the
375
+ * route: that sets deleteUnsupported and answers the 404's message. Null
376
+ * when the ids are deleted; any other failure throws.
377
+ */
378
+ async deleteIds(ids, stats) {
379
+ try {
380
+ await this.client.delete(ids);
381
+ return null;
382
+ }
383
+ catch (e) {
384
+ if (e instanceof EmbedServiceError && e.status === 404 && stats !== null) {
385
+ this.deleteUnsupported = true;
386
+ return e.message;
387
+ }
388
+ throw e;
389
+ }
390
+ }
301
391
  pendingSnapshot() { return { edited: [...this.editedIds], removed: [...this.removedIds] }; }
302
392
  restorePending(p) {
303
393
  for (const id of p?.removed ?? []) {
@@ -335,9 +425,14 @@ export class SemanticIndexer {
335
425
  }
336
426
  dispose() { this.detach?.(); this.detach = null; }
337
427
  get backingOff() { return Date.now() < this.backoffUntil; }
428
+ /** The branch the pass that gave this report read, or null if it read none. */
429
+ passedOn(report) { return this.passBranch.get(report) ?? null; }
338
430
  /**
339
- * Push what the index is missing, up to `maxItems`. Coalesces: a call while
340
- * a sync is already running returns that run's promise instead of racing it.
431
+ * Push what the index is missing, writing at most `maxItems` items by the
432
+ * service's own count (edits one each), and stopping where that runs out,
433
+ * inside a millisecond or a message page too.
434
+ * Coalesces: a call while a sync is already running returns that run's
435
+ * promise instead of racing it.
341
436
  */
342
437
  catchUp(maxItems) {
343
438
  if (this.inFlight)
@@ -359,11 +454,10 @@ export class SemanticIndexer {
359
454
  let notStats = null;
360
455
  try {
361
456
  // A 2xx that isn't stats, such as a web page from a wrong route, gives no
362
- // watermark: the pass walks from the start, as for a namespace that
363
- // doesn't exist yet, and lastError names the answer. Every pass then
364
- // starts over, and a history longer than a pass's budget is never
365
- // walked to its end, so a pass whose budget runs out fails on that
366
- // answer.
457
+ // service watermark, and lastError names the answer. A branch with no
458
+ // message cursor of its own then walks its messages from the beginning,
459
+ // as for a namespace that doesn't exist yet, so a pass whose budget
460
+ // runs out fails on that answer.
367
461
  let stats = null;
368
462
  try {
369
463
  stats = await this.client.stats();
@@ -376,9 +470,57 @@ export class SemanticIndexer {
376
470
  // /stats answered 404, which stats() reads as a namespace that doesn't
377
471
  // exist: there's no index to remove from.
378
472
  const noIndex = stats === null && notStats === null;
379
- const msgWm = stats?.by_kind.message?.max_cursor ?? null;
380
- const sumWm = stats?.by_kind.summary?.max_cursor ?? null;
381
- let budget = maxItems;
473
+ // This branch's cursors, read at each pass so a switch between passes is
474
+ // seen. They're written only when every read this pass made of the
475
+ // store was on the branch read here, so one branch's pass can't move
476
+ // another's cursor past what that branch hasn't sent. A branch with no
477
+ // message cursor starts from the service's watermark, as before cursors
478
+ // were kept per branch, so an upgrade doesn't walk every history again.
479
+ const branch = this.branchId();
480
+ this.passBranch.set(report, branch);
481
+ // Set when a read of the store finds it on another branch.
482
+ let strayed = false;
483
+ // Set when a delete of summaries' old items fails.
484
+ let oldItemsOwed = false;
485
+ const reading = () => { if (this.branchId() !== branch)
486
+ strayed = true; };
487
+ let kept = this.syncCursors();
488
+ // A namespace that doesn't exist holds nothing of this branch's, as after
489
+ // an index is deleted, so the cursors start over, at once, so a pass
490
+ // that fails partway through sending everything again still finds them
491
+ // over.
492
+ if (noIndex && (kept.summaries !== null || kept.messages !== null)) {
493
+ kept = { summaries: null, messages: null };
494
+ this.setSyncCursors(kept, branch);
495
+ }
496
+ // A branch's cursor is its own while the index holds what it sent, and
497
+ // the index's when it doesn't. Every branch's items are in the one
498
+ // index, so an index whose newest item of a kind is older than the
499
+ // cursor may have lost what this branch sent, as a restore from an
500
+ // older backup leaves it, and the pass walks from the index's newest,
501
+ // as the service's watermark did before cursors were kept. Nothing is
502
+ // lost when the newest the branch walked had nothing to index, such as
503
+ // a summary that's blank once trimmed, or was removed since, and then
504
+ // the pass re-sends what lies between, which the service finds
505
+ // unchanged. A kind the stats don't list has no items left.
506
+ const held = (cursor, kind) => {
507
+ if (cursor === null || stats === null)
508
+ return cursor;
509
+ const newest = stats.by_kind[kind]?.max_cursor ?? null;
510
+ return newest === null ? null : Math.min(cursor, newest);
511
+ };
512
+ const sumCursor = held(kept.summaries, 'summary');
513
+ const msgWm = held(kept.messages, 'message') ?? stats?.by_kind.message?.max_cursor ?? null;
514
+ let sumNext = sumCursor;
515
+ let msgThrough = null;
516
+ // What the pass may still write. Edits spend one each; summaries and
517
+ // messages spend what the service says each upsert wrote (inserted or
518
+ // updated), so a re-send it finds unchanged, such as the overlap's
519
+ // behind the message cursor, spends no budget and can't freeze a pass.
520
+ // A budget of 1.5 writes one item. One that isn't a number is no limit,
521
+ // as it was before the budget counted writes, and chunks stay a batch.
522
+ const floored = Math.floor(maxItems);
523
+ let budget = Number.isNaN(floored) ? Infinity : floored;
382
524
  let pending = [];
383
525
  const flush = async () => {
384
526
  if (pending.length === 0)
@@ -388,8 +530,12 @@ export class SemanticIndexer {
388
530
  report.inserted += r.inserted;
389
531
  report.updated += r.updated;
390
532
  report.unchanged += r.unchanged;
533
+ budget -= r.inserted + r.updated;
391
534
  pending = [];
392
535
  };
536
+ /** Pending items are sent once they could write all the budget left,
537
+ * so a pass never writes more than its budget. */
538
+ const full = () => pending.length >= Math.min(batchSize, budget);
393
539
  // Edits and removals first: they never come back round in the time walk.
394
540
  // This phase fails on its own: a failure re-queues its ids, is logged
395
541
  // and reported via lastError, and the tick falls through to summaries
@@ -438,37 +584,32 @@ export class SemanticIndexer {
438
584
  // search-time checks (on-branch, still indexable) keep them out of
439
585
  // results.
440
586
  if (toDelete.length > 0 && !noIndex && !this.deleteUnsupported) {
587
+ // What the delete held, by kind, for a warning.
588
+ const what = [
589
+ removed.length > 0 ? `${removed.length} removal(s)` : null,
590
+ blanked.length > 0 ? `${blanked.length} edit(s) down to nothing indexable` : null,
591
+ ].filter((s) => s !== null).join(' and ');
441
592
  try {
442
- await this.client.delete(toDelete);
443
- }
444
- catch (e) {
445
- const msg = e instanceof Error ? e.message : String(e);
446
- // What the delete held, by kind, for the warning.
447
- const what = [
448
- removed.length > 0 ? `${removed.length} removal(s)` : null,
449
- blanked.length > 0 ? `${blanked.length} edit(s) down to nothing indexable` : null,
450
- ].filter((s) => s !== null).join(' and ');
451
- if (e instanceof EmbedServiceError && e.status === 404 && stats !== null) {
452
- // This pass's /stats answered with stats, so the index is made
453
- // and the 404 is the route's: a service build without /delete.
454
- this.deleteUnsupported = true;
593
+ const missing = await this.deleteIds(toDelete, stats);
594
+ if (missing !== null) {
455
595
  this.warn(`/delete answered 404, so the service lacks that route; dropping ${what}. Later removals and edits `
456
596
  + `down to nothing indexable are dropped too, until the host restarts or binds the history module `
457
- + `again: ${msg}`);
458
- }
459
- else {
460
- // Any other failure, and a 404 in a pass whose /stats answered
461
- // with something that isn't stats, which doesn't show the index
462
- // is made: re-queued, for a later pass.
463
- for (const id of removed)
464
- this.removedIds.add(id);
465
- for (const id of blanked)
466
- if (!this.removedIds.has(id))
467
- this.editedIds.add(id);
468
- phaseErrors.push(msg);
469
- this.warn(`delete failed, ${what} re-queued: ${msg}`);
597
+ + `again: ${missing}`);
470
598
  }
471
599
  }
600
+ catch (e) {
601
+ // Any other failure, and a 404 in a pass whose /stats answered
602
+ // with something that isn't stats, which doesn't show the index
603
+ // is made: re-queued, for a later pass.
604
+ const msg = e instanceof Error ? e.message : String(e);
605
+ for (const id of removed)
606
+ this.removedIds.add(id);
607
+ for (const id of blanked)
608
+ if (!this.removedIds.has(id))
609
+ this.editedIds.add(id);
610
+ phaseErrors.push(msg);
611
+ this.warn(`delete failed, ${what} re-queued: ${msg}`);
612
+ }
472
613
  }
473
614
  try {
474
615
  for (let i = 0; i < toUpsert.length; i += batchSize) {
@@ -493,27 +634,78 @@ export class SemanticIndexer {
493
634
  // Summaries before messages: they are few, and a message backlog that
494
635
  // exceeds every tick's budget must not keep new summaries out forever.
495
636
  {
637
+ const cursor = sumCursor;
638
+ reading();
496
639
  const all = this.cm.getSummariesInRange({ fromMs: 0, toMs: Number.MAX_SAFE_INTEGER });
497
640
  report.summariesScanned = all.length;
498
- // `>=`: summaries sharing the watermark's millisecond may be only
499
- // partly indexed (a bounded pass can stop inside a tie). Re-sending
500
- // them is a dedup no-op for the service and costs no budget.
501
- const fresh = all.filter((s) => sumWm === null || s.createdMs >= sumWm).sort((a, b) => a.createdMs - b.createdMs);
641
+ // `>=`: a summary minted in the cursor's millisecond after the pass
642
+ // that wrote it read the store is sent by the next one. Re-sending
643
+ // the others there is a dedup no-op for the service and costs no
644
+ // budget.
645
+ const fresh = all.filter((s) => cursor === null || s.createdMs >= cursor).sort((a, b) => a.createdMs - b.createdMs);
646
+ // Through which creation time this pass sent every summary it read.
647
+ // A pass whose budget runs out inside a millisecond leaves the cursor
648
+ // at the one before, so the next pass sends the rest of that
649
+ // millisecond, re-sending what this one wrote of it at no cost, and
650
+ // counts all of it as new for the old keys below.
651
+ let through = null;
652
+ // The millisecond of the summaries being sent.
653
+ let at = null;
654
+ let finished = true;
655
+ // Each newly sent summary's key in the form written before keys
656
+ // carried the creation time, for deleting once its new item is in.
657
+ const oldKeys = [];
502
658
  for (const s of fresh) {
659
+ if (s.createdMs !== at) {
660
+ through = at;
661
+ at = s.createdMs;
662
+ }
503
663
  if (budget <= 0) {
504
664
  report.more = true;
665
+ finished = false;
505
666
  break;
506
667
  }
507
668
  const item = summaryToItem(s, this.cfg);
508
669
  if (!item)
509
670
  continue;
510
671
  pending.push(item);
511
- if (sumWm === null || s.createdMs > sumWm)
512
- budget--;
513
- if (pending.length >= batchSize)
672
+ if (cursor === null || s.createdMs > cursor)
673
+ oldKeys.push(`sum:${s.id}`);
674
+ if (full())
514
675
  await flush();
515
676
  }
516
677
  await flush();
678
+ if (finished)
679
+ through = at;
680
+ // The index's old items go once their summaries' new ones are in, a
681
+ // batch of ids to a request. On a service without /delete they stay,
682
+ // and search leaves them out. A failed delete leaves the cursor, so
683
+ // the next pass sends those summaries again, which the service finds
684
+ // unchanged, and deletes again.
685
+ let deleted = true;
686
+ if (oldKeys.length > 0 && !noIndex && !this.deleteUnsupported) {
687
+ try {
688
+ let missing = null;
689
+ for (let i = 0; i < oldKeys.length && missing === null; i += batchSize) {
690
+ missing = await this.deleteIds(oldKeys.slice(i, i + batchSize), stats);
691
+ }
692
+ if (missing !== null) {
693
+ this.warn(`/delete answered 404, so the service lacks that route; any items these ${oldKeys.length} summaries had `
694
+ + `from before keys carried the creation time stay, and search leaves them out. Later removals and edits `
695
+ + `down to nothing indexable are dropped too, until the host restarts or binds the history module `
696
+ + `again: ${missing}`);
697
+ }
698
+ }
699
+ catch (e) {
700
+ const msg = e instanceof Error ? e.message : String(e);
701
+ deleted = false;
702
+ oldItemsOwed = true;
703
+ phaseErrors.push(msg);
704
+ this.warn(`deleting ${oldKeys.length} summaries' items from before they were keyed by creation time failed; the next pass tries again: ${msg}`);
705
+ }
706
+ }
707
+ if (deleted && through !== null)
708
+ sumNext = through;
517
709
  }
518
710
  // Messages: walk forward from (watermark - overlap) via the time index.
519
711
  // Sound because rows are stamped at append time (CM addMessage takes no
@@ -527,31 +719,43 @@ export class SemanticIndexer {
527
719
  // of more than a page within one millisecond is walked, not jumped.
528
720
  let offset = 0;
529
721
  const pageSize = 256;
530
- for (;;) {
722
+ // The walk starts with the overlap's re-sends, which spend no budget, but
723
+ // like every chunk go out no bigger than the budget left, so a pass
724
+ // whose summaries left little sends them a few at a time.
725
+ for (let stopped = false; !stopped;) {
531
726
  if (budget <= 0) {
532
727
  report.more = true;
533
728
  break;
534
729
  }
730
+ reading();
535
731
  const page = this.cm.queryMessagesByTime({ fromMs, offset, limit: pageSize });
536
732
  const msgs = page.messages;
537
733
  report.messagesScanned += msgs.length;
538
734
  for (const m of msgs) {
735
+ // Only what the service writes spends the budget (flush). The
736
+ // overlap re-walk behind the watermark is a dedup no-op for the
737
+ // service, and it must be one for the budget too: when the overlap
738
+ // window held more messages than a tick's budget, every tick spent
739
+ // it all re-sending the same indexed items and never reached the
740
+ // first new one — the index froze at the watermark while reporting
741
+ // merely `more: true`. A pass stops inside a page once the budget
742
+ // is spent; the next one's overlap sends the rest of the
743
+ // millisecond it stopped in.
744
+ if (budget <= 0) {
745
+ report.more = true;
746
+ stopped = true;
747
+ break;
748
+ }
539
749
  const item = messageToItem(m, this.cfg);
540
750
  if (!item)
541
751
  continue;
542
752
  pending.push(item);
543
- // Only NEW items spend the budget. The overlap re-walk behind the
544
- // watermark is a dedup no-op for the service, and it must be one
545
- // for the budget too: when the overlap window held more messages
546
- // than a tick's budget, every tick spent it all re-sending the same
547
- // indexed items and never reached the first new one — the index
548
- // froze at the watermark while reporting merely `more: true`.
549
- if (msgWm === null || item.cursor === undefined || item.cursor > msgWm)
550
- budget--;
551
- if (pending.length >= batchSize)
753
+ if (item.cursor !== undefined && (msgThrough === null || item.cursor > msgThrough))
754
+ msgThrough = item.cursor;
755
+ if (full())
552
756
  await flush();
553
757
  }
554
- if (msgs.length < pageSize)
758
+ if (stopped || msgs.length < pageSize)
555
759
  break;
556
760
  const lastMs = msgs[msgs.length - 1].timestamp.getTime();
557
761
  const atLast = msgs.filter((m) => m.timestamp.getTime() === lastMs).length;
@@ -559,8 +763,20 @@ export class SemanticIndexer {
559
763
  fromMs = lastMs;
560
764
  }
561
765
  await flush();
766
+ // Every send of this pass is in, so its cursors stand, unless the store
767
+ // left the branch the pass read during it: what it read may then be
768
+ // another branch's. A pass that moves neither cursor writes no state.
769
+ const msgNext = msgThrough ?? msgWm;
770
+ const left = strayed || this.branchId() !== branch;
771
+ if ((sumNext !== kept.summaries || msgNext !== kept.messages) && !left) {
772
+ this.setSyncCursors({ summaries: sumNext, messages: msgNext }, branch);
773
+ }
562
774
  if (notStats && report.more)
563
775
  throw notStats;
776
+ // The current branch may then have items this pass didn't send, and
777
+ // old items a failed delete left are still to go.
778
+ if (left || oldItemsOwed)
779
+ report.more = true;
564
780
  this.consecutiveFailures = 0;
565
781
  this.lastError = named(notStats?.message ?? null, ...phaseErrors);
566
782
  this.lastSyncAt = Date.now();
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/modules/history/semantic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/modules/history/semantic.ts"],"names":[],"mappings":"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"}