@xandout/libra-harness 0.1.33 → 0.1.90

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 (453) hide show
  1. package/README.md +30 -30
  2. package/dist/agent.d.ts +8 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +205 -193
  5. package/dist/agent.js.map +1 -1
  6. package/dist/ai-sdk-model.d.ts.map +1 -1
  7. package/dist/ai-sdk-model.js +91 -78
  8. package/dist/ai-sdk-model.js.map +1 -1
  9. package/dist/context.d.ts +2 -0
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/{extras/extensions → extensions}/auto-steer/extension.d.ts +1 -1
  12. package/dist/extensions/auto-steer/extension.d.ts.map +1 -0
  13. package/dist/extensions/auto-steer/extension.js.map +1 -0
  14. package/dist/extensions/auto-steer/index.d.ts.map +1 -0
  15. package/dist/extensions/auto-steer/index.js.map +1 -0
  16. package/dist/extensions/code-tools/extension.d.ts +15 -0
  17. package/dist/extensions/code-tools/extension.d.ts.map +1 -0
  18. package/dist/extensions/code-tools/extension.js +73 -0
  19. package/dist/extensions/code-tools/extension.js.map +1 -0
  20. package/dist/extensions/code-tools/extension.test.d.ts.map +1 -0
  21. package/dist/extensions/code-tools/extension.test.js +504 -0
  22. package/dist/extensions/code-tools/extension.test.js.map +1 -0
  23. package/dist/extensions/code-tools/index.d.ts.map +1 -0
  24. package/dist/extensions/code-tools/index.js.map +1 -0
  25. package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.d.ts +2 -2
  26. package/dist/extensions/code-tools/tools/code-search.d.ts.map +1 -0
  27. package/dist/{extras/extensions → extensions}/code-tools/tools/code-search.js +1 -1
  28. package/dist/extensions/code-tools/tools/code-search.js.map +1 -0
  29. package/dist/extensions/code-tools/tools/find.d.ts.map +1 -0
  30. package/dist/extensions/code-tools/tools/find.js +83 -0
  31. package/dist/extensions/code-tools/tools/find.js.map +1 -0
  32. package/dist/extensions/code-tools/tools/grep.d.ts.map +1 -0
  33. package/dist/extensions/code-tools/tools/grep.js +90 -0
  34. package/dist/extensions/code-tools/tools/grep.js.map +1 -0
  35. package/dist/extensions/code-tools/tools/read.d.ts.map +1 -0
  36. package/dist/{extras/extensions → extensions}/code-tools/tools/read.js +17 -25
  37. package/dist/extensions/code-tools/tools/read.js.map +1 -0
  38. package/dist/{extras/extensions → extensions}/code-tools/tools/shared.d.ts +5 -1
  39. package/dist/extensions/code-tools/tools/shared.d.ts.map +1 -0
  40. package/dist/{extras/extensions → extensions}/code-tools/tools/shared.js +68 -0
  41. package/dist/extensions/code-tools/tools/shared.js.map +1 -0
  42. package/dist/extensions/code-tools/tools/shell.d.ts +39 -0
  43. package/dist/extensions/code-tools/tools/shell.d.ts.map +1 -0
  44. package/dist/extensions/code-tools/tools/shell.js +441 -0
  45. package/dist/extensions/code-tools/tools/shell.js.map +1 -0
  46. package/dist/{extras/extensions → extensions}/code-tools/tools/todo.d.ts +0 -3
  47. package/dist/extensions/code-tools/tools/todo.d.ts.map +1 -0
  48. package/dist/{extras/extensions → extensions}/code-tools/tools/todo.js +0 -8
  49. package/dist/extensions/code-tools/tools/todo.js.map +1 -0
  50. package/dist/extensions/code-tools/tools/view-image.d.ts +10 -0
  51. package/dist/extensions/code-tools/tools/view-image.d.ts.map +1 -0
  52. package/dist/extensions/code-tools/tools/view-image.js +87 -0
  53. package/dist/extensions/code-tools/tools/view-image.js.map +1 -0
  54. package/dist/extensions/code-tools/tools/write.d.ts.map +1 -0
  55. package/dist/{extras/extensions → extensions}/code-tools/tools/write.js +47 -37
  56. package/dist/extensions/code-tools/tools/write.js.map +1 -0
  57. package/dist/{extras/extensions → extensions}/disk-session/extension.d.ts +45 -2
  58. package/dist/extensions/disk-session/extension.d.ts.map +1 -0
  59. package/dist/extensions/disk-session/extension.js +818 -0
  60. package/dist/extensions/disk-session/extension.js.map +1 -0
  61. package/dist/extensions/disk-session/extension.test.d.ts.map +1 -0
  62. package/dist/{extras/extensions → extensions}/disk-session/extension.test.js +445 -16
  63. package/dist/extensions/disk-session/extension.test.js.map +1 -0
  64. package/dist/extensions/disk-session/index.d.ts +3 -0
  65. package/dist/extensions/disk-session/index.d.ts.map +1 -0
  66. package/dist/extensions/disk-session/index.js +2 -0
  67. package/dist/extensions/disk-session/index.js.map +1 -0
  68. package/dist/{extras/extensions → extensions}/emoji/extension.d.ts +1 -1
  69. package/dist/extensions/emoji/extension.d.ts.map +1 -0
  70. package/dist/extensions/emoji/extension.js.map +1 -0
  71. package/dist/extensions/emoji/index.d.ts.map +1 -0
  72. package/dist/extensions/emoji/index.js.map +1 -0
  73. package/dist/extensions/filesystem/extension.d.ts.map +1 -0
  74. package/dist/extensions/filesystem/extension.js.map +1 -0
  75. package/dist/extensions/filesystem/extension.test.d.ts.map +1 -0
  76. package/dist/extensions/filesystem/extension.test.js.map +1 -0
  77. package/dist/extensions/filesystem/index.d.ts.map +1 -0
  78. package/dist/extensions/filesystem/index.js.map +1 -0
  79. package/dist/extensions/index.d.ts +3 -0
  80. package/dist/extensions/index.d.ts.map +1 -0
  81. package/dist/extensions/index.js +2 -0
  82. package/dist/extensions/index.js.map +1 -0
  83. package/dist/{extras/extensions → extensions}/keyword-extractor/extension.d.ts +1 -1
  84. package/dist/extensions/keyword-extractor/extension.d.ts.map +1 -0
  85. package/dist/{extras/extensions → extensions}/keyword-extractor/extension.js +1 -1
  86. package/dist/extensions/keyword-extractor/extension.js.map +1 -0
  87. package/dist/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
  88. package/dist/extensions/keyword-extractor/extension.test.js.map +1 -0
  89. package/dist/extensions/keyword-extractor/index.d.ts.map +1 -0
  90. package/dist/extensions/keyword-extractor/index.js.map +1 -0
  91. package/dist/extensions/keyword-extractor/nlp.d.ts.map +1 -0
  92. package/dist/extensions/keyword-extractor/nlp.js.map +1 -0
  93. package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
  94. package/dist/extensions/keyword-extractor/nlp.test.js.map +1 -0
  95. package/dist/{extras/extension-loader.d.ts → extensions/loader.d.ts} +1 -1
  96. package/dist/extensions/loader.d.ts.map +1 -0
  97. package/dist/{extras/extension-loader.js → extensions/loader.js} +2 -2
  98. package/dist/extensions/loader.js.map +1 -0
  99. package/dist/{extras/extensions → extensions}/logger/extension.d.ts +1 -1
  100. package/dist/extensions/logger/extension.d.ts.map +1 -0
  101. package/dist/{extras/extensions → extensions}/logger/extension.js +1 -1
  102. package/dist/extensions/logger/extension.js.map +1 -0
  103. package/dist/extensions/logger/index.d.ts.map +1 -0
  104. package/dist/extensions/logger/index.js.map +1 -0
  105. package/dist/{extras/extensions → extensions}/mcp/extension.d.ts +1 -1
  106. package/dist/extensions/mcp/extension.d.ts.map +1 -0
  107. package/dist/extensions/mcp/extension.js.map +1 -0
  108. package/dist/extensions/mcp/extension.test.d.ts.map +1 -0
  109. package/dist/{extras/extensions → extensions}/mcp/extension.test.js +1 -1
  110. package/dist/extensions/mcp/extension.test.js.map +1 -0
  111. package/dist/extensions/mcp/index.d.ts.map +1 -0
  112. package/dist/extensions/mcp/index.js.map +1 -0
  113. package/dist/{extras/extensions → extensions}/mem-session/extension.d.ts +2 -2
  114. package/dist/extensions/mem-session/extension.d.ts.map +1 -0
  115. package/dist/extensions/mem-session/extension.js.map +1 -0
  116. package/dist/extensions/mem-session/index.d.ts.map +1 -0
  117. package/dist/extensions/mem-session/index.js.map +1 -0
  118. package/dist/{extras/extensions → extensions}/memory/extension.d.ts +1 -1
  119. package/dist/extensions/memory/extension.d.ts.map +1 -0
  120. package/dist/{extras/extensions → extensions}/memory/extension.js +1 -1
  121. package/dist/extensions/memory/extension.js.map +1 -0
  122. package/dist/extensions/memory/index.d.ts +4 -0
  123. package/dist/extensions/memory/index.d.ts.map +1 -0
  124. package/dist/extensions/memory/index.js.map +1 -0
  125. package/dist/{extras/extensions → extensions}/memory/llm-extractor.d.ts +1 -1
  126. package/dist/extensions/memory/llm-extractor.d.ts.map +1 -0
  127. package/dist/{extras/extensions → extensions}/memory/llm-extractor.js +1 -1
  128. package/dist/extensions/memory/llm-extractor.js.map +1 -0
  129. package/dist/{extras/extensions → extensions}/memory/types.d.ts +2 -2
  130. package/dist/extensions/memory/types.d.ts.map +1 -0
  131. package/dist/extensions/memory/types.js.map +1 -0
  132. package/dist/{extras/extensions → extensions}/otel/extension.d.ts +1 -1
  133. package/dist/extensions/otel/extension.d.ts.map +1 -0
  134. package/dist/{extras/extensions → extensions}/otel/extension.js +1 -1
  135. package/dist/extensions/otel/extension.js.map +1 -0
  136. package/dist/extensions/otel/extension.test.d.ts.map +1 -0
  137. package/dist/{extras/extensions → extensions}/otel/extension.test.js +1 -1
  138. package/dist/extensions/otel/extension.test.js.map +1 -0
  139. package/dist/extensions/otel/index.d.ts.map +1 -0
  140. package/dist/extensions/otel/index.js.map +1 -0
  141. package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
  142. package/dist/extensions/otel/jsonl-span-exporter.js.map +1 -0
  143. package/dist/{extras/extensions → extensions}/scripts/extension.d.ts +1 -1
  144. package/dist/extensions/scripts/extension.d.ts.map +1 -0
  145. package/dist/extensions/scripts/extension.js.map +1 -0
  146. package/dist/extensions/scripts/extension.test.d.ts.map +1 -0
  147. package/dist/extensions/scripts/extension.test.js.map +1 -0
  148. package/dist/extensions/scripts/index.d.ts.map +1 -0
  149. package/dist/extensions/scripts/index.js.map +1 -0
  150. package/dist/{extras/extensions → extensions}/skills/extension.d.ts +1 -1
  151. package/dist/extensions/skills/extension.d.ts.map +1 -0
  152. package/dist/extensions/skills/extension.js.map +1 -0
  153. package/dist/extensions/skills/extension.test.d.ts.map +1 -0
  154. package/dist/{extras/extensions → extensions}/skills/extension.test.js +1 -1
  155. package/dist/extensions/skills/extension.test.js.map +1 -0
  156. package/dist/extensions/skills/index.d.ts.map +1 -0
  157. package/dist/extensions/skills/index.js.map +1 -0
  158. package/dist/{extras/extensions → extensions}/streaming/extension.d.ts +1 -1
  159. package/dist/extensions/streaming/extension.d.ts.map +1 -0
  160. package/dist/extensions/streaming/extension.js.map +1 -0
  161. package/dist/extensions/streaming/index.d.ts.map +1 -0
  162. package/dist/extensions/streaming/index.js.map +1 -0
  163. package/dist/{extras/extensions → extensions}/structured-output/extension.d.ts +1 -1
  164. package/dist/extensions/structured-output/extension.d.ts.map +1 -0
  165. package/dist/extensions/structured-output/extension.js.map +1 -0
  166. package/dist/extensions/structured-output/index.d.ts.map +1 -0
  167. package/dist/extensions/structured-output/index.js.map +1 -0
  168. package/dist/{extras/extensions → extensions}/timestamp/extension.d.ts +1 -1
  169. package/dist/extensions/timestamp/extension.d.ts.map +1 -0
  170. package/dist/extensions/timestamp/extension.js.map +1 -0
  171. package/dist/extensions/timestamp/index.d.ts.map +1 -0
  172. package/dist/extensions/timestamp/index.js.map +1 -0
  173. package/dist/{extras/extensions → extensions}/token-stats/extension.d.ts +1 -1
  174. package/dist/extensions/token-stats/extension.d.ts.map +1 -0
  175. package/dist/extensions/token-stats/extension.js.map +1 -0
  176. package/dist/extensions/token-stats/extension.test.d.ts.map +1 -0
  177. package/dist/{extras/extensions → extensions}/token-stats/extension.test.js +1 -1
  178. package/dist/extensions/token-stats/extension.test.js.map +1 -0
  179. package/dist/extensions/token-stats/index.d.ts.map +1 -0
  180. package/dist/extensions/token-stats/index.js.map +1 -0
  181. package/dist/{extras/extensions → extensions}/tool-buffer/extension.d.ts +1 -1
  182. package/dist/extensions/tool-buffer/extension.d.ts.map +1 -0
  183. package/dist/extensions/tool-buffer/extension.js.map +1 -0
  184. package/dist/extensions/tool-buffer/extension.test.d.ts.map +1 -0
  185. package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.js +1 -1
  186. package/dist/extensions/tool-buffer/extension.test.js.map +1 -0
  187. package/dist/extensions/tool-buffer/index.d.ts.map +1 -0
  188. package/dist/extensions/tool-buffer/index.js.map +1 -0
  189. package/dist/{extras/extensions → extensions}/weather-tool/extension.d.ts +1 -1
  190. package/dist/extensions/weather-tool/extension.d.ts.map +1 -0
  191. package/dist/extensions/weather-tool/extension.js.map +1 -0
  192. package/dist/extensions/weather-tool/index.d.ts.map +1 -0
  193. package/dist/extensions/weather-tool/index.js.map +1 -0
  194. package/dist/handle.d.ts +4 -0
  195. package/dist/handle.d.ts.map +1 -1
  196. package/dist/{extras/models → models}/ai-sdk-resolver.d.ts +1 -1
  197. package/dist/models/ai-sdk-resolver.d.ts.map +1 -0
  198. package/dist/{extras/models → models}/ai-sdk-resolver.js +1 -1
  199. package/dist/models/ai-sdk-resolver.js.map +1 -0
  200. package/dist/models/index.d.ts.map +1 -0
  201. package/dist/models/index.js.map +1 -0
  202. package/dist/{extras/models → models}/routing-model.d.ts +1 -1
  203. package/dist/models/routing-model.d.ts.map +1 -0
  204. package/dist/{extras/models → models}/routing-model.js +1 -1
  205. package/dist/models/routing-model.js.map +1 -0
  206. package/dist/openai-provider/index.d.ts.map +1 -0
  207. package/dist/openai-provider/index.js.map +1 -0
  208. package/dist/{extras/openai-provider → openai-provider}/server.d.ts +1 -1
  209. package/dist/openai-provider/server.d.ts.map +1 -0
  210. package/dist/openai-provider/server.js.map +1 -0
  211. package/package.json +108 -83
  212. package/dist/extras/extension-loader.d.ts.map +0 -1
  213. package/dist/extras/extension-loader.js.map +0 -1
  214. package/dist/extras/extensions/auto-steer/extension.d.ts.map +0 -1
  215. package/dist/extras/extensions/auto-steer/extension.js.map +0 -1
  216. package/dist/extras/extensions/auto-steer/index.d.ts.map +0 -1
  217. package/dist/extras/extensions/auto-steer/index.js.map +0 -1
  218. package/dist/extras/extensions/code-tools/extension.d.ts +0 -83
  219. package/dist/extras/extensions/code-tools/extension.d.ts.map +0 -1
  220. package/dist/extras/extensions/code-tools/extension.js +0 -93
  221. package/dist/extras/extensions/code-tools/extension.js.map +0 -1
  222. package/dist/extras/extensions/code-tools/extension.test.d.ts.map +0 -1
  223. package/dist/extras/extensions/code-tools/extension.test.js +0 -656
  224. package/dist/extras/extensions/code-tools/extension.test.js.map +0 -1
  225. package/dist/extras/extensions/code-tools/index.d.ts.map +0 -1
  226. package/dist/extras/extensions/code-tools/index.js.map +0 -1
  227. package/dist/extras/extensions/code-tools/tools/code-search.d.ts.map +0 -1
  228. package/dist/extras/extensions/code-tools/tools/code-search.js.map +0 -1
  229. package/dist/extras/extensions/code-tools/tools/find.d.ts.map +0 -1
  230. package/dist/extras/extensions/code-tools/tools/find.js +0 -161
  231. package/dist/extras/extensions/code-tools/tools/find.js.map +0 -1
  232. package/dist/extras/extensions/code-tools/tools/grep.d.ts.map +0 -1
  233. package/dist/extras/extensions/code-tools/tools/grep.js +0 -307
  234. package/dist/extras/extensions/code-tools/tools/grep.js.map +0 -1
  235. package/dist/extras/extensions/code-tools/tools/read.d.ts.map +0 -1
  236. package/dist/extras/extensions/code-tools/tools/read.js.map +0 -1
  237. package/dist/extras/extensions/code-tools/tools/shared.d.ts.map +0 -1
  238. package/dist/extras/extensions/code-tools/tools/shared.js.map +0 -1
  239. package/dist/extras/extensions/code-tools/tools/shell.d.ts +0 -49
  240. package/dist/extras/extensions/code-tools/tools/shell.d.ts.map +0 -1
  241. package/dist/extras/extensions/code-tools/tools/shell.js +0 -623
  242. package/dist/extras/extensions/code-tools/tools/shell.js.map +0 -1
  243. package/dist/extras/extensions/code-tools/tools/todo.d.ts.map +0 -1
  244. package/dist/extras/extensions/code-tools/tools/todo.js.map +0 -1
  245. package/dist/extras/extensions/code-tools/tools/write.d.ts.map +0 -1
  246. package/dist/extras/extensions/code-tools/tools/write.js.map +0 -1
  247. package/dist/extras/extensions/disk-session/extension.d.ts.map +0 -1
  248. package/dist/extras/extensions/disk-session/extension.js +0 -640
  249. package/dist/extras/extensions/disk-session/extension.js.map +0 -1
  250. package/dist/extras/extensions/disk-session/extension.test.d.ts.map +0 -1
  251. package/dist/extras/extensions/disk-session/extension.test.js.map +0 -1
  252. package/dist/extras/extensions/disk-session/index.d.ts +0 -3
  253. package/dist/extras/extensions/disk-session/index.d.ts.map +0 -1
  254. package/dist/extras/extensions/disk-session/index.js +0 -2
  255. package/dist/extras/extensions/disk-session/index.js.map +0 -1
  256. package/dist/extras/extensions/emoji/extension.d.ts.map +0 -1
  257. package/dist/extras/extensions/emoji/extension.js.map +0 -1
  258. package/dist/extras/extensions/emoji/index.d.ts.map +0 -1
  259. package/dist/extras/extensions/emoji/index.js.map +0 -1
  260. package/dist/extras/extensions/filesystem/extension.d.ts.map +0 -1
  261. package/dist/extras/extensions/filesystem/extension.js.map +0 -1
  262. package/dist/extras/extensions/filesystem/extension.test.d.ts.map +0 -1
  263. package/dist/extras/extensions/filesystem/extension.test.js.map +0 -1
  264. package/dist/extras/extensions/filesystem/index.d.ts.map +0 -1
  265. package/dist/extras/extensions/filesystem/index.js.map +0 -1
  266. package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +0 -1
  267. package/dist/extras/extensions/keyword-extractor/extension.js.map +0 -1
  268. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
  269. package/dist/extras/extensions/keyword-extractor/extension.test.js.map +0 -1
  270. package/dist/extras/extensions/keyword-extractor/index.d.ts.map +0 -1
  271. package/dist/extras/extensions/keyword-extractor/index.js.map +0 -1
  272. package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +0 -1
  273. package/dist/extras/extensions/keyword-extractor/nlp.js.map +0 -1
  274. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
  275. package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +0 -1
  276. package/dist/extras/extensions/logger/extension.d.ts.map +0 -1
  277. package/dist/extras/extensions/logger/extension.js.map +0 -1
  278. package/dist/extras/extensions/logger/index.d.ts.map +0 -1
  279. package/dist/extras/extensions/logger/index.js.map +0 -1
  280. package/dist/extras/extensions/mcp/extension.d.ts.map +0 -1
  281. package/dist/extras/extensions/mcp/extension.js.map +0 -1
  282. package/dist/extras/extensions/mcp/extension.test.d.ts.map +0 -1
  283. package/dist/extras/extensions/mcp/extension.test.js.map +0 -1
  284. package/dist/extras/extensions/mcp/index.d.ts.map +0 -1
  285. package/dist/extras/extensions/mcp/index.js.map +0 -1
  286. package/dist/extras/extensions/mem-session/extension.d.ts.map +0 -1
  287. package/dist/extras/extensions/mem-session/extension.js.map +0 -1
  288. package/dist/extras/extensions/mem-session/index.d.ts.map +0 -1
  289. package/dist/extras/extensions/mem-session/index.js.map +0 -1
  290. package/dist/extras/extensions/memory/extension.d.ts.map +0 -1
  291. package/dist/extras/extensions/memory/extension.js.map +0 -1
  292. package/dist/extras/extensions/memory/index.d.ts +0 -5
  293. package/dist/extras/extensions/memory/index.d.ts.map +0 -1
  294. package/dist/extras/extensions/memory/index.js.map +0 -1
  295. package/dist/extras/extensions/memory/llm-extractor.d.ts.map +0 -1
  296. package/dist/extras/extensions/memory/llm-extractor.js.map +0 -1
  297. package/dist/extras/extensions/memory/types.d.ts.map +0 -1
  298. package/dist/extras/extensions/memory/types.js.map +0 -1
  299. package/dist/extras/extensions/otel/extension.d.ts.map +0 -1
  300. package/dist/extras/extensions/otel/extension.js.map +0 -1
  301. package/dist/extras/extensions/otel/extension.test.d.ts.map +0 -1
  302. package/dist/extras/extensions/otel/extension.test.js.map +0 -1
  303. package/dist/extras/extensions/otel/index.d.ts.map +0 -1
  304. package/dist/extras/extensions/otel/index.js.map +0 -1
  305. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
  306. package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +0 -1
  307. package/dist/extras/extensions/scripts/extension.d.ts.map +0 -1
  308. package/dist/extras/extensions/scripts/extension.js.map +0 -1
  309. package/dist/extras/extensions/scripts/extension.test.d.ts.map +0 -1
  310. package/dist/extras/extensions/scripts/extension.test.js.map +0 -1
  311. package/dist/extras/extensions/scripts/index.d.ts.map +0 -1
  312. package/dist/extras/extensions/scripts/index.js.map +0 -1
  313. package/dist/extras/extensions/skills/extension.d.ts.map +0 -1
  314. package/dist/extras/extensions/skills/extension.js.map +0 -1
  315. package/dist/extras/extensions/skills/extension.test.d.ts.map +0 -1
  316. package/dist/extras/extensions/skills/extension.test.js.map +0 -1
  317. package/dist/extras/extensions/skills/index.d.ts.map +0 -1
  318. package/dist/extras/extensions/skills/index.js.map +0 -1
  319. package/dist/extras/extensions/streaming/extension.d.ts.map +0 -1
  320. package/dist/extras/extensions/streaming/extension.js.map +0 -1
  321. package/dist/extras/extensions/streaming/index.d.ts.map +0 -1
  322. package/dist/extras/extensions/streaming/index.js.map +0 -1
  323. package/dist/extras/extensions/structured-output/extension.d.ts.map +0 -1
  324. package/dist/extras/extensions/structured-output/extension.js.map +0 -1
  325. package/dist/extras/extensions/structured-output/index.d.ts.map +0 -1
  326. package/dist/extras/extensions/structured-output/index.js.map +0 -1
  327. package/dist/extras/extensions/timestamp/extension.d.ts.map +0 -1
  328. package/dist/extras/extensions/timestamp/extension.js.map +0 -1
  329. package/dist/extras/extensions/timestamp/index.d.ts.map +0 -1
  330. package/dist/extras/extensions/timestamp/index.js.map +0 -1
  331. package/dist/extras/extensions/token-stats/extension.d.ts.map +0 -1
  332. package/dist/extras/extensions/token-stats/extension.js.map +0 -1
  333. package/dist/extras/extensions/token-stats/extension.test.d.ts.map +0 -1
  334. package/dist/extras/extensions/token-stats/extension.test.js.map +0 -1
  335. package/dist/extras/extensions/token-stats/index.d.ts.map +0 -1
  336. package/dist/extras/extensions/token-stats/index.js.map +0 -1
  337. package/dist/extras/extensions/tool-buffer/extension.d.ts.map +0 -1
  338. package/dist/extras/extensions/tool-buffer/extension.js.map +0 -1
  339. package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +0 -1
  340. package/dist/extras/extensions/tool-buffer/extension.test.js.map +0 -1
  341. package/dist/extras/extensions/tool-buffer/index.d.ts.map +0 -1
  342. package/dist/extras/extensions/tool-buffer/index.js.map +0 -1
  343. package/dist/extras/extensions/weather-tool/extension.d.ts.map +0 -1
  344. package/dist/extras/extensions/weather-tool/extension.js.map +0 -1
  345. package/dist/extras/extensions/weather-tool/index.d.ts.map +0 -1
  346. package/dist/extras/extensions/weather-tool/index.js.map +0 -1
  347. package/dist/extras/models/ai-sdk-resolver.d.ts.map +0 -1
  348. package/dist/extras/models/ai-sdk-resolver.js.map +0 -1
  349. package/dist/extras/models/index.d.ts.map +0 -1
  350. package/dist/extras/models/index.js.map +0 -1
  351. package/dist/extras/models/routing-model.d.ts.map +0 -1
  352. package/dist/extras/models/routing-model.js.map +0 -1
  353. package/dist/extras/openai-provider/index.d.ts.map +0 -1
  354. package/dist/extras/openai-provider/index.js.map +0 -1
  355. package/dist/extras/openai-provider/server.d.ts.map +0 -1
  356. package/dist/extras/openai-provider/server.js.map +0 -1
  357. /package/dist/{extras/extensions → extensions}/auto-steer/extension.js +0 -0
  358. /package/dist/{extras/extensions → extensions}/auto-steer/extension.json +0 -0
  359. /package/dist/{extras/extensions → extensions}/auto-steer/index.d.ts +0 -0
  360. /package/dist/{extras/extensions → extensions}/auto-steer/index.js +0 -0
  361. /package/dist/{extras/extensions → extensions}/code-tools/extension.json +0 -0
  362. /package/dist/{extras/extensions → extensions}/code-tools/extension.test.d.ts +0 -0
  363. /package/dist/{extras/extensions → extensions}/code-tools/index.d.ts +0 -0
  364. /package/dist/{extras/extensions → extensions}/code-tools/index.js +0 -0
  365. /package/dist/{extras/extensions → extensions}/code-tools/tools/find.d.ts +0 -0
  366. /package/dist/{extras/extensions → extensions}/code-tools/tools/grep.d.ts +0 -0
  367. /package/dist/{extras/extensions → extensions}/code-tools/tools/read.d.ts +0 -0
  368. /package/dist/{extras/extensions → extensions}/code-tools/tools/write.d.ts +0 -0
  369. /package/dist/{extras/extensions → extensions}/disk-session/extension.json +0 -0
  370. /package/dist/{extras/extensions → extensions}/disk-session/extension.test.d.ts +0 -0
  371. /package/dist/{extras/extensions → extensions}/emoji/extension.js +0 -0
  372. /package/dist/{extras/extensions → extensions}/emoji/extension.json +0 -0
  373. /package/dist/{extras/extensions → extensions}/emoji/index.d.ts +0 -0
  374. /package/dist/{extras/extensions → extensions}/emoji/index.js +0 -0
  375. /package/dist/{extras/extensions → extensions}/filesystem/extension.d.ts +0 -0
  376. /package/dist/{extras/extensions → extensions}/filesystem/extension.js +0 -0
  377. /package/dist/{extras/extensions → extensions}/filesystem/extension.json +0 -0
  378. /package/dist/{extras/extensions → extensions}/filesystem/extension.test.d.ts +0 -0
  379. /package/dist/{extras/extensions → extensions}/filesystem/extension.test.js +0 -0
  380. /package/dist/{extras/extensions → extensions}/filesystem/index.d.ts +0 -0
  381. /package/dist/{extras/extensions → extensions}/filesystem/index.js +0 -0
  382. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.json +0 -0
  383. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.d.ts +0 -0
  384. /package/dist/{extras/extensions → extensions}/keyword-extractor/extension.test.js +0 -0
  385. /package/dist/{extras/extensions → extensions}/keyword-extractor/index.d.ts +0 -0
  386. /package/dist/{extras/extensions → extensions}/keyword-extractor/index.js +0 -0
  387. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.d.ts +0 -0
  388. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.js +0 -0
  389. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.d.ts +0 -0
  390. /package/dist/{extras/extensions → extensions}/keyword-extractor/nlp.test.js +0 -0
  391. /package/dist/{extras/extensions → extensions}/logger/extension.json +0 -0
  392. /package/dist/{extras/extensions → extensions}/logger/index.d.ts +0 -0
  393. /package/dist/{extras/extensions → extensions}/logger/index.js +0 -0
  394. /package/dist/{extras/extensions → extensions}/mcp/extension.js +0 -0
  395. /package/dist/{extras/extensions → extensions}/mcp/extension.json +0 -0
  396. /package/dist/{extras/extensions → extensions}/mcp/extension.test.d.ts +0 -0
  397. /package/dist/{extras/extensions → extensions}/mcp/index.d.ts +0 -0
  398. /package/dist/{extras/extensions → extensions}/mcp/index.js +0 -0
  399. /package/dist/{extras/extensions → extensions}/mem-session/extension.js +0 -0
  400. /package/dist/{extras/extensions → extensions}/mem-session/extension.json +0 -0
  401. /package/dist/{extras/extensions → extensions}/mem-session/index.d.ts +0 -0
  402. /package/dist/{extras/extensions → extensions}/mem-session/index.js +0 -0
  403. /package/dist/{extras/extensions → extensions}/memory/extension.json +0 -0
  404. /package/dist/{extras/extensions → extensions}/memory/index.js +0 -0
  405. /package/dist/{extras/extensions → extensions}/memory/types.js +0 -0
  406. /package/dist/{extras/extensions → extensions}/otel/extension.json +0 -0
  407. /package/dist/{extras/extensions → extensions}/otel/extension.test.d.ts +0 -0
  408. /package/dist/{extras/extensions → extensions}/otel/index.d.ts +0 -0
  409. /package/dist/{extras/extensions → extensions}/otel/index.js +0 -0
  410. /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.d.ts +0 -0
  411. /package/dist/{extras/extensions → extensions}/otel/jsonl-span-exporter.js +0 -0
  412. /package/dist/{extras/extensions → extensions}/scripts/extension.js +0 -0
  413. /package/dist/{extras/extensions → extensions}/scripts/extension.json +0 -0
  414. /package/dist/{extras/extensions → extensions}/scripts/extension.test.d.ts +0 -0
  415. /package/dist/{extras/extensions → extensions}/scripts/extension.test.js +0 -0
  416. /package/dist/{extras/extensions → extensions}/scripts/index.d.ts +0 -0
  417. /package/dist/{extras/extensions → extensions}/scripts/index.js +0 -0
  418. /package/dist/{extras/extensions → extensions}/skills/extension.js +0 -0
  419. /package/dist/{extras/extensions → extensions}/skills/extension.json +0 -0
  420. /package/dist/{extras/extensions → extensions}/skills/extension.test.d.ts +0 -0
  421. /package/dist/{extras/extensions → extensions}/skills/index.d.ts +0 -0
  422. /package/dist/{extras/extensions → extensions}/skills/index.js +0 -0
  423. /package/dist/{extras/extensions → extensions}/streaming/extension.js +0 -0
  424. /package/dist/{extras/extensions → extensions}/streaming/extension.json +0 -0
  425. /package/dist/{extras/extensions → extensions}/streaming/index.d.ts +0 -0
  426. /package/dist/{extras/extensions → extensions}/streaming/index.js +0 -0
  427. /package/dist/{extras/extensions → extensions}/structured-output/extension.js +0 -0
  428. /package/dist/{extras/extensions → extensions}/structured-output/extension.json +0 -0
  429. /package/dist/{extras/extensions → extensions}/structured-output/index.d.ts +0 -0
  430. /package/dist/{extras/extensions → extensions}/structured-output/index.js +0 -0
  431. /package/dist/{extras/extensions → extensions}/timestamp/extension.js +0 -0
  432. /package/dist/{extras/extensions → extensions}/timestamp/extension.json +0 -0
  433. /package/dist/{extras/extensions → extensions}/timestamp/index.d.ts +0 -0
  434. /package/dist/{extras/extensions → extensions}/timestamp/index.js +0 -0
  435. /package/dist/{extras/extensions → extensions}/token-stats/extension.js +0 -0
  436. /package/dist/{extras/extensions → extensions}/token-stats/extension.json +0 -0
  437. /package/dist/{extras/extensions → extensions}/token-stats/extension.test.d.ts +0 -0
  438. /package/dist/{extras/extensions → extensions}/token-stats/index.d.ts +0 -0
  439. /package/dist/{extras/extensions → extensions}/token-stats/index.js +0 -0
  440. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.js +0 -0
  441. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.json +0 -0
  442. /package/dist/{extras/extensions → extensions}/tool-buffer/extension.test.d.ts +0 -0
  443. /package/dist/{extras/extensions → extensions}/tool-buffer/index.d.ts +0 -0
  444. /package/dist/{extras/extensions → extensions}/tool-buffer/index.js +0 -0
  445. /package/dist/{extras/extensions → extensions}/weather-tool/extension.js +0 -0
  446. /package/dist/{extras/extensions → extensions}/weather-tool/extension.json +0 -0
  447. /package/dist/{extras/extensions → extensions}/weather-tool/index.d.ts +0 -0
  448. /package/dist/{extras/extensions → extensions}/weather-tool/index.js +0 -0
  449. /package/dist/{extras/models → models}/index.d.ts +0 -0
  450. /package/dist/{extras/models → models}/index.js +0 -0
  451. /package/dist/{extras/openai-provider → openai-provider}/index.d.ts +0 -0
  452. /package/dist/{extras/openai-provider → openai-provider}/index.js +0 -0
  453. /package/dist/{extras/openai-provider → openai-provider}/server.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/extensions/disk-session/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.test.d.ts","sourceRoot":"","sources":["../../../src/extensions/disk-session/extension.test.ts"],"names":[],"mappings":""}
@@ -3,7 +3,7 @@ import { mkdtempSync, rmSync, readFileSync, existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { Agent, messageContentToText } from '@xandout/libra-harness';
6
- import { createDiskSessionExtension } from './index.js';
6
+ import { createDiskSessionExtension, sanitizeConversationMessages } from './index.js';
7
7
  // ── Mock model ─────────────────────────────────────────────────────
8
8
  // Returns a fixed assistant message. Optionally logs what the agent sees.
9
9
  function mockModel(seen) {
@@ -424,14 +424,12 @@ describe('disk-session', () => {
424
424
  expect(contents).toContain('after 5');
425
425
  });
426
426
  // ── Tool-call intermediate filtering ────────────────────────────
427
- it('filters out tool-call intermediates from channel context to prevent split pairs', async () => {
427
+ it('preserves tool-call intermediates but slices at turn boundaries to prevent split sequences', async () => {
428
428
  // If a tool call pair (assistant+tool) spans the boundary of the
429
- // channelContextMessages window, the tool message would be included
430
- // without its preceding assistant message — causing an LLM API error.
431
- // The fix: filter out tool messages and tool-only assistant messages
432
- // from channel context windows (topLevelBefore and recentTopLevel).
433
- // Thread messages keep tool-call intermediates (they're complete sequences).
434
- const ext = makeExt({ channelContextMessages: 4, recentChannelMessages: 0 });
429
+ // channelContextMessages window, the tool message would be sliced mid-sequence
430
+ // if we just did a naive .slice(). With sliceAtTurnBoundary, it skips forward
431
+ // to the next user message, dropping the partial turn entirely rather than splitting it.
432
+ const ext = makeExt({ channelContextMessages: 3, recentChannelMessages: 0 }); // 3 ensures it cuts into the 4-message turn
435
433
  let seenMsgs = [];
436
434
  // Create a tool-call exchange early in the channel (NOT the thread parent)
437
435
  const toolModel = {
@@ -463,7 +461,7 @@ describe('disk-session', () => {
463
461
  parameters: { type: 'object', properties: {} },
464
462
  async execute() { return { toolCallId: 'tc1', content: 'tool output' }; },
465
463
  });
466
- // Turn 1: tool call exchange (produces assistant+tool+assistant records)
464
+ // Turn 1: tool call exchange (produces user+assistant[tool]+tool+assistant records = 4 records)
467
465
  await toolAgent.run({
468
466
  message: 'use the tool',
469
467
  metadata: { session: { key: 'C1', messageTs: '1001' } },
@@ -471,19 +469,21 @@ describe('disk-session', () => {
471
469
  // Turn 2: thread parent (a regular message, no tool calls)
472
470
  const regAgent = makeAgent(ext);
473
471
  await runTurn(regAgent, 'thread parent', sessionIdentity('C1', '1002'));
474
- // Turns 3-4: more messages to push the tool exchange out of the window
475
- await runTurn(regAgent, 'msg3', sessionIdentity('C1', '1003'));
476
- await runTurn(regAgent, 'msg4', sessionIdentity('C1', '1004'));
477
- // Now thread reply on ts=1002 — the channel context window (4)
478
- // would include records from the tool exchange (ts=1001) if not filtered.
472
+ // Now thread reply on ts=1002
473
+ // The topLevelBefore messages before the parent are the 4 messages from Turn 1.
474
+ // We configured channelContextMessages: 3.
475
+ // If we took the last 3 messages of Turn 1, we would get [assistant, tool, assistant].
476
+ // But sliceAtTurnBoundary will see it starts with 'assistant', skip forward looking for
477
+ // a 'user' or 'system', find none, and return an empty array.
479
478
  regAgent.hook('beforeContext', 'capture', async (ctx) => {
480
479
  seenMsgs = ctx.turn.messages.map((m) => ({ role: m.role, content: m.content }));
481
480
  });
482
481
  await runTurn(regAgent, 'thread reply', sessionIdentity('C1', '1005', { threadTs: '1002' }));
483
- // No tool messages should be in the channel context
482
+ // Because the context window (3) starts in the middle of Turn 1,
483
+ // sliceAtTurnBoundary will drop it entirely.
484
484
  const toolMsgs = seenMsgs.filter((m) => m.role === 'tool');
485
485
  expect(toolMsgs).toHaveLength(0);
486
- // No assistant messages with empty content (tool-call only) in channel context
486
+ // No assistant messages from Turn 1 should be present.
487
487
  const emptyAssistantMsgs = seenMsgs.filter((m) => m.role === 'assistant' && !messageContentToText(m.content).trim());
488
488
  expect(emptyAssistantMsgs).toHaveLength(0);
489
489
  // But the thread messages should still be there
@@ -668,5 +668,434 @@ describe('disk-session', () => {
668
668
  expect(records[1].role).toBe('user');
669
669
  expect(records[2].role).toBe('assistant');
670
670
  });
671
+ // ── Schema sanitization & Steering integrity ───────────────────
672
+ describe('sanitizeConversationMessages', () => {
673
+ it('drops orphan tool messages that have no preceding assistant message', () => {
674
+ const input = [
675
+ { role: 'user', content: 'hello' },
676
+ { role: 'tool', toolCallId: 'call_orphan', content: 'orphan output' },
677
+ { role: 'assistant', content: 'hi' },
678
+ ];
679
+ const output = sanitizeConversationMessages(input);
680
+ expect(output).toEqual([
681
+ { role: 'user', content: 'hello' },
682
+ { role: 'assistant', content: 'hi' },
683
+ ]);
684
+ });
685
+ it('drops orphan tool messages following an assistant message that has no tool_calls', () => {
686
+ const input = [
687
+ { role: 'assistant', content: 'just text, no tool calls' },
688
+ { role: 'tool', toolCallId: 'call_orphan', content: 'unexpected result' },
689
+ ];
690
+ const output = sanitizeConversationMessages(input);
691
+ expect(output).toEqual([
692
+ { role: 'assistant', content: 'just text, no tool calls' },
693
+ ]);
694
+ });
695
+ it('drops duplicate tool results for the same toolCallId', () => {
696
+ const input = [
697
+ {
698
+ role: 'assistant',
699
+ content: '',
700
+ toolCalls: [{ id: 'call_1', name: 'search', arguments: '{}' }],
701
+ },
702
+ { role: 'tool', toolCallId: 'call_1', content: 'first result' },
703
+ { role: 'tool', toolCallId: 'call_1', content: 'duplicate result' },
704
+ ];
705
+ const output = sanitizeConversationMessages(input);
706
+ expect(output).toHaveLength(2);
707
+ expect(output[0].role).toBe('assistant');
708
+ expect(output[1].role).toBe('tool');
709
+ expect(output[1].content).toBe('first result');
710
+ });
711
+ it('prunes unfulfilled tool calls from an assistant message when only partial calls completed', () => {
712
+ const input = [
713
+ {
714
+ role: 'assistant',
715
+ content: '',
716
+ toolCalls: [
717
+ { id: 'call_1', name: 'tool1', arguments: '{}' },
718
+ { id: 'call_2', name: 'tool2', arguments: '{}' },
719
+ ],
720
+ },
721
+ { role: 'tool', toolCallId: 'call_1', content: 'res1' },
722
+ { role: 'user', content: 'next turn' },
723
+ ];
724
+ const output = sanitizeConversationMessages(input);
725
+ expect(output).toHaveLength(3);
726
+ expect(output[0].role).toBe('assistant');
727
+ expect(output[0].toolCalls).toEqual([
728
+ { id: 'call_1', name: 'tool1', arguments: '{}' },
729
+ ]);
730
+ expect(output[1].role).toBe('tool');
731
+ expect(output[2].role).toBe('user');
732
+ });
733
+ it('strips toolCalls from assistant when none completed but assistant has text content', () => {
734
+ const input = [
735
+ {
736
+ role: 'assistant',
737
+ content: 'Let me look that up',
738
+ toolCalls: [{ id: 'call_1', name: 'tool1', arguments: '{}' }],
739
+ },
740
+ { role: 'user', content: 'cancelled' },
741
+ ];
742
+ const output = sanitizeConversationMessages(input);
743
+ expect(output).toEqual([
744
+ { role: 'assistant', content: 'Let me look that up' },
745
+ { role: 'user', content: 'cancelled' },
746
+ ]);
747
+ expect(output[0].toolCalls).toBeUndefined();
748
+ });
749
+ it('drops empty assistant message when no tool calls completed and content is empty', () => {
750
+ const input = [
751
+ { role: 'user', content: 'search something' },
752
+ {
753
+ role: 'assistant',
754
+ content: '',
755
+ toolCalls: [{ id: 'call_1', name: 'tool1', arguments: '{}' }],
756
+ },
757
+ { role: 'user', content: 'new prompt' },
758
+ ];
759
+ const output = sanitizeConversationMessages(input);
760
+ expect(output).toEqual([
761
+ { role: 'user', content: 'search something' },
762
+ { role: 'user', content: 'new prompt' },
763
+ ]);
764
+ });
765
+ });
766
+ describe('steering and tool-call persistence integrity', () => {
767
+ it('persists steering messages in correct chronological order without duplicating records', async () => {
768
+ const ext = makeExt();
769
+ let iteration = 0;
770
+ const model = {
771
+ async generate(_req) {
772
+ iteration++;
773
+ if (iteration === 1) {
774
+ // First iteration: model issues a tool call
775
+ return {
776
+ message: {
777
+ role: 'assistant',
778
+ content: 'calling tool',
779
+ toolCalls: [{ id: 'tc1', name: 'my_tool', arguments: '{}' }],
780
+ },
781
+ finishReason: 'tool_calls',
782
+ };
783
+ }
784
+ // Second iteration (after tool + steering): model returns final answer
785
+ return {
786
+ message: { role: 'assistant', content: 'done with steering response' },
787
+ finishReason: 'stop',
788
+ };
789
+ },
790
+ };
791
+ const agent = new Agent({ model: model });
792
+ agent.use(ext);
793
+ agent.tool({
794
+ name: 'my_tool',
795
+ parameters: { type: 'object' },
796
+ async execute() {
797
+ // While the tool is executing, inject steering into this turn!
798
+ agent.steer('keep me posted');
799
+ return { toolCallId: 'tc1', content: 'tool output' };
800
+ },
801
+ });
802
+ await agent.run({
803
+ message: 'initial prompt',
804
+ metadata: { session: sessionIdentity('steer-test', '100') },
805
+ });
806
+ const records = ext.getRecords('steer-test');
807
+ // Expected records in strict chronological order:
808
+ // 1. user: 'initial prompt'
809
+ // 2. assistant: 'calling tool' (toolCalls: [tc1])
810
+ // 3. tool: 'tool output' (toolCallId: tc1)
811
+ // 4. user: '[steering] keep me posted'
812
+ // 5. assistant: 'done with steering response'
813
+ expect(records).toHaveLength(5);
814
+ expect(records[0].role).toBe('user');
815
+ expect(records[0].content).toBe('initial prompt');
816
+ expect(records[1].role).toBe('assistant');
817
+ expect(records[1].content).toBe('calling tool');
818
+ expect(records[1].toolCalls).toBeDefined();
819
+ expect(records[2].role).toBe('tool');
820
+ expect(records[2].toolCallId).toBe('tc1');
821
+ expect(records[3].role).toBe('user');
822
+ expect(records[3].content).toBe('[steering] keep me posted');
823
+ expect(records[4].role).toBe('assistant');
824
+ expect(records[4].content).toBe('done with steering response');
825
+ // Verify file on disk matches memory records exactly (no duplicates!)
826
+ const diskRecords = readJsonl('steer-test');
827
+ expect(diskRecords).toHaveLength(5);
828
+ expect(diskRecords.map((r) => r.role)).toEqual([
829
+ 'user',
830
+ 'assistant',
831
+ 'tool',
832
+ 'user',
833
+ 'assistant',
834
+ ]);
835
+ });
836
+ it('buildContext filters out corrupted orphan tool records from existing session files', async () => {
837
+ // Manually simulate a corrupted file with Ronny\'s duplicate tool bug:
838
+ // Record 1: user
839
+ // Record 2: assistant (with tool call)
840
+ // Record 3: tool result
841
+ // Record 4: user (steering)
842
+ // Record 5: assistant (text only, no tool calls)
843
+ // Record 6: DUPLICATE tool result (orphan!)
844
+ const corruptedRecords = [
845
+ { role: 'user', content: 'scrape site', ts: '1', recordedAt: new Date().toISOString() },
846
+ {
847
+ role: 'assistant',
848
+ content: 'running scraper',
849
+ toolCalls: [{ id: 'call_99', name: 'scraper', arguments: '{}' }],
850
+ ts: '2',
851
+ recordedAt: new Date().toISOString(),
852
+ },
853
+ {
854
+ role: 'tool',
855
+ content: 'scrape result',
856
+ toolCallId: 'call_99',
857
+ name: 'scraper',
858
+ ts: '3',
859
+ recordedAt: new Date().toISOString(),
860
+ },
861
+ { role: 'user', content: '[steering] update please', ts: '4', recordedAt: new Date().toISOString() },
862
+ { role: 'assistant', content: 'will do', ts: '5', recordedAt: new Date().toISOString() },
863
+ {
864
+ role: 'tool',
865
+ content: 'scrape result',
866
+ toolCallId: 'call_99',
867
+ name: 'scraper',
868
+ ts: '6',
869
+ recordedAt: new Date().toISOString(),
870
+ },
871
+ ];
872
+ const fs = await import('node:fs');
873
+ const filePath = join(tmpDir, 'corrupt_session.jsonl');
874
+ fs.writeFileSync(filePath, corruptedRecords.map((r) => JSON.stringify(r)).join('\n') + '\n');
875
+ // Create new extension instance that loads the corrupted file
876
+ const loadedExt = makeExt({ loadOnStartup: true });
877
+ let seenByModel = [];
878
+ const agent = makeAgent(loadedExt, (msgs) => {
879
+ seenByModel = msgs;
880
+ });
881
+ // Run next turn
882
+ await runTurn(agent, 'what is next?', sessionIdentity('corrupt_session', '7'));
883
+ // The model should NOT see the orphan tool record #6!
884
+ // In the context passed to the model, every tool message must follow an assistant with toolCalls.
885
+ for (let i = 0; i < seenByModel.length; i++) {
886
+ if (seenByModel[i].role === 'tool') {
887
+ const prev = seenByModel[i - 1];
888
+ expect(prev).toBeDefined();
889
+ const isValidPreceding = (prev.role === 'assistant' && prev.toolCalls?.some((tc) => tc.id === seenByModel[i].toolCallId)) ||
890
+ (prev.role === 'tool');
891
+ expect(isValidPreceding).toBe(true);
892
+ }
893
+ }
894
+ // Specifically, record #6 must have been omitted
895
+ const toolMsgs = seenByModel.filter((m) => m.role === 'tool');
896
+ expect(toolMsgs).toHaveLength(1);
897
+ });
898
+ });
899
+ // ── Auto-summarization & Cache-Preserving Compaction ────────────
900
+ describe('auto-summarization and cache preservation', () => {
901
+ it('auto-summarizes earlier messages using the session model when reaching maxContextMessages', async () => {
902
+ let summarizationCallCount = 0;
903
+ let summarizedPromptText = '';
904
+ const testModel = {
905
+ async generate(req) {
906
+ const lastMsg = req.messages[req.messages.length - 1];
907
+ const text = messageContentToText(lastMsg.content);
908
+ if (req.systemPrompt?.includes('summarizer') || text.includes('summarize')) {
909
+ summarizationCallCount++;
910
+ summarizedPromptText = text;
911
+ return {
912
+ message: { role: 'assistant', content: 'Summarized decisions: files modified and tasks done.' },
913
+ finishReason: 'stop',
914
+ usage: { promptTokens: 10, completionTokens: 5 },
915
+ };
916
+ }
917
+ return {
918
+ message: { role: 'assistant', content: `Reply to: ${text}` },
919
+ finishReason: 'stop',
920
+ usage: { promptTokens: 5, completionTokens: 5 },
921
+ };
922
+ },
923
+ };
924
+ // Set threshold to 6 messages, eviction step to 3 messages
925
+ const ext = createDiskSessionExtension({
926
+ sessionDir: tmpDir,
927
+ maxContextMessages: 6,
928
+ contextEvictionStep: 3,
929
+ model: testModel,
930
+ });
931
+ const agent = new Agent({ model: testModel });
932
+ agent.use(ext);
933
+ // Turn 1: 2 records (user1, assistant1)
934
+ await runTurn(agent, 'message 1', sessionIdentity('compact-test', '1'));
935
+ // Turn 2: 4 records (user2, assistant2)
936
+ await runTurn(agent, 'message 2', sessionIdentity('compact-test', '2'));
937
+ // Turn 3: 6 records (user3, assistant3)
938
+ await runTurn(agent, 'message 3', sessionIdentity('compact-test', '3'));
939
+ expect(summarizationCallCount).toBe(0);
940
+ expect(ext.getRecords('compact-test')).toHaveLength(6);
941
+ // Turn 4: history is at 6 records (>= maxContextMessages).
942
+ // Auto-summarization triggers in beforeTurn!
943
+ let seenInTurn4 = [];
944
+ const trackingAgent = new Agent({
945
+ model: {
946
+ async generate(req) {
947
+ const lastMsg = req.messages[req.messages.length - 1];
948
+ const text = messageContentToText(lastMsg.content);
949
+ if (req.systemPrompt?.includes('summarizer') || text.includes('summarize')) {
950
+ return testModel.generate(req);
951
+ }
952
+ seenInTurn4 = req.messages;
953
+ return {
954
+ message: { role: 'assistant', content: 'Turn 4 reply' },
955
+ finishReason: 'stop',
956
+ usage: { promptTokens: 5, completionTokens: 5 },
957
+ };
958
+ },
959
+ },
960
+ });
961
+ trackingAgent.use(ext);
962
+ const res4 = await runTurn(trackingAgent, 'message 4', sessionIdentity('compact-test', '4'));
963
+ // 1. Summarization was invoked
964
+ expect(summarizationCallCount).toBe(1);
965
+ expect(summarizedPromptText).toContain('message 1');
966
+ // 2. The human's response does NOT leak any compaction text
967
+ expect(res4.message).toBe('Turn 4 reply');
968
+ // 3. Immediately before the model acts, the model receives the notification
969
+ const noticeMsg = seenInTurn4.find((m) => m.role === 'system' && messageContentToText(m.content).includes('automatically compacted into the summary above'));
970
+ expect(noticeMsg).toBeDefined();
971
+ // 4. The context begins with the summary record
972
+ const summaryMsg = seenInTurn4.find((m) => messageContentToText(m.content).includes('Summarized decisions'));
973
+ expect(summaryMsg).toBeDefined();
974
+ });
975
+ it('preserves prompt cache prefix stability across consecutive turns between compactions', async () => {
976
+ const prefixesSeen = [];
977
+ const model = {
978
+ async generate(req) {
979
+ if (req.systemPrompt?.includes('summarizer')) {
980
+ return {
981
+ message: { role: 'assistant', content: 'Consolidated summary' },
982
+ finishReason: 'stop',
983
+ usage: { promptTokens: 10, completionTokens: 5 },
984
+ };
985
+ }
986
+ // Record the first message in the history prefix
987
+ prefixesSeen.push(messageContentToText(req.messages[0].content));
988
+ return {
989
+ message: { role: 'assistant', content: 'ok' },
990
+ finishReason: 'stop',
991
+ usage: { promptTokens: 5, completionTokens: 5 },
992
+ };
993
+ },
994
+ };
995
+ const ext = createDiskSessionExtension({
996
+ sessionDir: tmpDir,
997
+ maxContextMessages: 10,
998
+ contextEvictionStep: 5,
999
+ model,
1000
+ });
1001
+ const agent = new Agent({ model });
1002
+ agent.use(ext);
1003
+ // Run 5 turns (records grow from 2 to 10)
1004
+ for (let i = 1; i <= 5; i++) {
1005
+ await runTurn(agent, `turn ${i}`, sessionIdentity('cache-test', `${i}`));
1006
+ }
1007
+ // During turns 1-5, all turns share the exact same first message ("turn 1")
1008
+ for (let i = 0; i < 5; i++) {
1009
+ expect(prefixesSeen[i]).toBe('turn 1');
1010
+ }
1011
+ // Turn 6 triggers auto-summarization because records count is 10 (>= maxContextMessages)
1012
+ await runTurn(agent, 'turn 6', sessionIdentity('cache-test', '6'));
1013
+ // Turn 7 and Turn 8: history has been compacted to a summary record at index 0.
1014
+ // Both turn 7 and turn 8 must start with the exact same summary record!
1015
+ await runTurn(agent, 'turn 7', sessionIdentity('cache-test', '7'));
1016
+ await runTurn(agent, 'turn 8', sessionIdentity('cache-test', '8'));
1017
+ const prefix7 = prefixesSeen[6];
1018
+ const prefix8 = prefixesSeen[7];
1019
+ expect(prefix7).toContain('Consolidated summary');
1020
+ expect(prefix8).toBe(prefix7); // 100% prefix cache hit!
1021
+ });
1022
+ it('backs off context limit (e.g. 100 -> 50 -> 25) when a context length error occurs', async () => {
1023
+ let callCount = 0;
1024
+ const model = {
1025
+ async generate(req) {
1026
+ callCount++;
1027
+ if (req.systemPrompt?.includes('summarizer')) {
1028
+ return {
1029
+ message: { role: 'assistant', content: 'Compact backoff summary' },
1030
+ finishReason: 'stop',
1031
+ usage: { promptTokens: 5, completionTokens: 5 },
1032
+ };
1033
+ }
1034
+ if (callCount === 3) {
1035
+ // Throw a context length error on turn 3
1036
+ throw new Error('400 Maximum context length exceeded: prompt too long');
1037
+ }
1038
+ return {
1039
+ message: { role: 'assistant', content: 'ok' },
1040
+ finishReason: 'stop',
1041
+ usage: { promptTokens: 5, completionTokens: 5 },
1042
+ };
1043
+ },
1044
+ };
1045
+ const ext = createDiskSessionExtension({
1046
+ sessionDir: tmpDir,
1047
+ maxContextMessages: 100,
1048
+ fallbackThresholds: [100, 50, 25],
1049
+ model,
1050
+ });
1051
+ const agent = new Agent({
1052
+ model,
1053
+ errorPolicy: 'fallback',
1054
+ });
1055
+ agent.use(ext);
1056
+ expect(ext.getEffectiveLimit('backoff-session')).toBe(100);
1057
+ // Turn 1 & 2 succeed
1058
+ await runTurn(agent, 'msg 1', sessionIdentity('backoff-session', '1'));
1059
+ await runTurn(agent, 'msg 2', sessionIdentity('backoff-session', '2'));
1060
+ // Turn 3 throws context length error
1061
+ const res3 = await runTurn(agent, 'msg 3', sessionIdentity('backoff-session', '3'));
1062
+ expect(res3.finishReason).toBe('error');
1063
+ // The extension detected the context error and backed off to 50
1064
+ expect(ext.getEffectiveLimit('backoff-session')).toBe(50);
1065
+ });
1066
+ it('uses the agent configured model automatically if not explicitly provided in config', async () => {
1067
+ let summarizerCalled = false;
1068
+ const model = {
1069
+ async generate(req) {
1070
+ if (req.systemPrompt?.includes('summarizer')) {
1071
+ summarizerCalled = true;
1072
+ return {
1073
+ message: { role: 'assistant', content: 'Auto summary using agent model' },
1074
+ finishReason: 'stop',
1075
+ usage: { promptTokens: 5, completionTokens: 5 },
1076
+ };
1077
+ }
1078
+ return {
1079
+ message: { role: 'assistant', content: 'agent reply' },
1080
+ finishReason: 'stop',
1081
+ usage: { promptTokens: 5, completionTokens: 5 },
1082
+ };
1083
+ },
1084
+ };
1085
+ // Notice: NO model passed into createDiskSessionExtension
1086
+ const ext = createDiskSessionExtension({
1087
+ sessionDir: tmpDir,
1088
+ maxContextMessages: 4,
1089
+ contextEvictionStep: 2,
1090
+ });
1091
+ const agent = new Agent({ model });
1092
+ agent.use(ext);
1093
+ await runTurn(agent, 'msg 1', sessionIdentity('agent-model-test', '1'));
1094
+ await runTurn(agent, 'msg 2', sessionIdentity('agent-model-test', '2'));
1095
+ // Reached 4 messages, turn 3 triggers summarizer
1096
+ await runTurn(agent, 'msg 3', sessionIdentity('agent-model-test', '3'));
1097
+ expect(summarizerCalled).toBe(true);
1098
+ });
1099
+ });
671
1100
  });
672
1101
  //# sourceMappingURL=extension.test.js.map