@mastra/server 1.15.0-alpha.0 → 1.15.0-alpha.2

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 (213) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{chunk-V2KPTU3N.cjs → chunk-2SQXNXDG.cjs} +30 -30
  3. package/dist/{chunk-V2KPTU3N.cjs.map → chunk-2SQXNXDG.cjs.map} +1 -1
  4. package/dist/{chunk-XGPK3HFX.cjs → chunk-3CUUB624.cjs} +10 -10
  5. package/dist/{chunk-XGPK3HFX.cjs.map → chunk-3CUUB624.cjs.map} +1 -1
  6. package/dist/{chunk-FGVINEGE.cjs → chunk-3KRZUGE2.cjs} +11 -11
  7. package/dist/{chunk-FGVINEGE.cjs.map → chunk-3KRZUGE2.cjs.map} +1 -1
  8. package/dist/{chunk-US6UOOSR.js → chunk-4AUZJETY.js} +4 -4
  9. package/dist/{chunk-US6UOOSR.js.map → chunk-4AUZJETY.js.map} +1 -1
  10. package/dist/{chunk-LEN6GOK4.cjs → chunk-4H646L2Z.cjs} +11 -11
  11. package/dist/{chunk-LEN6GOK4.cjs.map → chunk-4H646L2Z.cjs.map} +1 -1
  12. package/dist/{chunk-GNW3DGR7.cjs → chunk-4ZHENCAC.cjs} +17 -17
  13. package/dist/{chunk-GNW3DGR7.cjs.map → chunk-4ZHENCAC.cjs.map} +1 -1
  14. package/dist/{chunk-LKBVN25S.js → chunk-5A232FX3.js} +3 -3
  15. package/dist/{chunk-LKBVN25S.js.map → chunk-5A232FX3.js.map} +1 -1
  16. package/dist/{chunk-VXXU2IL3.js → chunk-5BBO2RHV.js} +5 -3
  17. package/dist/chunk-5BBO2RHV.js.map +1 -0
  18. package/dist/{chunk-KQHX6XBO.cjs → chunk-5OJTF4BH.cjs} +6 -6
  19. package/dist/{chunk-KQHX6XBO.cjs.map → chunk-5OJTF4BH.cjs.map} +1 -1
  20. package/dist/{chunk-G6FMIEKX.cjs → chunk-6AXJQ6UB.cjs} +6 -6
  21. package/dist/{chunk-G6FMIEKX.cjs.map → chunk-6AXJQ6UB.cjs.map} +1 -1
  22. package/dist/{chunk-Z2GTZMB6.js → chunk-6INBDRFJ.js} +3 -3
  23. package/dist/{chunk-Z2GTZMB6.js.map → chunk-6INBDRFJ.js.map} +1 -1
  24. package/dist/{chunk-75XLM5YU.js → chunk-6QUGCOP5.js} +4 -4
  25. package/dist/{chunk-75XLM5YU.js.map → chunk-6QUGCOP5.js.map} +1 -1
  26. package/dist/{chunk-LIDMRFHS.cjs → chunk-7KSSSSLW.cjs} +30 -30
  27. package/dist/{chunk-LIDMRFHS.cjs.map → chunk-7KSSSSLW.cjs.map} +1 -1
  28. package/dist/{chunk-JMXNHFJT.js → chunk-7WP6LX5N.js} +3 -3
  29. package/dist/{chunk-JMXNHFJT.js.map → chunk-7WP6LX5N.js.map} +1 -1
  30. package/dist/{chunk-Z72NDEOG.js → chunk-B4YTCF2Y.js} +3 -3
  31. package/dist/{chunk-Z72NDEOG.js.map → chunk-B4YTCF2Y.js.map} +1 -1
  32. package/dist/{chunk-6I3NC77Y.js → chunk-BN5YN4UU.js} +4 -4
  33. package/dist/{chunk-6I3NC77Y.js.map → chunk-BN5YN4UU.js.map} +1 -1
  34. package/dist/{chunk-VNM3X7IW.cjs → chunk-BWTGKLXJ.cjs} +11 -11
  35. package/dist/{chunk-VNM3X7IW.cjs.map → chunk-BWTGKLXJ.cjs.map} +1 -1
  36. package/dist/{chunk-BISARVCB.js → chunk-CCEVYU3X.js} +3 -3
  37. package/dist/{chunk-BISARVCB.js.map → chunk-CCEVYU3X.js.map} +1 -1
  38. package/dist/{chunk-WB6AK7JY.js → chunk-CLXK74N7.js} +3 -3
  39. package/dist/{chunk-WB6AK7JY.js.map → chunk-CLXK74N7.js.map} +1 -1
  40. package/dist/{chunk-CQDKHDO5.js → chunk-CSSSPADR.js} +4 -4
  41. package/dist/{chunk-CQDKHDO5.js.map → chunk-CSSSPADR.js.map} +1 -1
  42. package/dist/{chunk-53CKJ5MP.cjs → chunk-DUWAI5L3.cjs} +10 -10
  43. package/dist/{chunk-53CKJ5MP.cjs.map → chunk-DUWAI5L3.cjs.map} +1 -1
  44. package/dist/{chunk-XQKMLH77.cjs → chunk-DWJI2VL3.cjs} +6 -6
  45. package/dist/{chunk-XQKMLH77.cjs.map → chunk-DWJI2VL3.cjs.map} +1 -1
  46. package/dist/{chunk-LBAMGUCK.cjs → chunk-E4RLL73F.cjs} +11 -11
  47. package/dist/{chunk-LBAMGUCK.cjs.map → chunk-E4RLL73F.cjs.map} +1 -1
  48. package/dist/{chunk-EQ5FORA4.js → chunk-EL2DRC3C.js} +5 -12
  49. package/dist/chunk-EL2DRC3C.js.map +1 -0
  50. package/dist/{chunk-BUGOOXLQ.js → chunk-EYPXYWPY.js} +4 -4
  51. package/dist/{chunk-BUGOOXLQ.js.map → chunk-EYPXYWPY.js.map} +1 -1
  52. package/dist/{chunk-NSMUADXN.cjs → chunk-FLTCEG6J.cjs} +10 -10
  53. package/dist/{chunk-NSMUADXN.cjs.map → chunk-FLTCEG6J.cjs.map} +1 -1
  54. package/dist/{chunk-2ZVOQX2Q.js → chunk-FO5SVAKR.js} +4 -4
  55. package/dist/{chunk-2ZVOQX2Q.js.map → chunk-FO5SVAKR.js.map} +1 -1
  56. package/dist/{chunk-VWYXBBBK.cjs → chunk-G4FSJJAS.cjs} +10 -10
  57. package/dist/{chunk-VWYXBBBK.cjs.map → chunk-G4FSJJAS.cjs.map} +1 -1
  58. package/dist/{chunk-V5PP7KDX.js → chunk-GHPFPYUG.js} +3 -3
  59. package/dist/{chunk-V5PP7KDX.js.map → chunk-GHPFPYUG.js.map} +1 -1
  60. package/dist/{chunk-IIUQFWJQ.js → chunk-H37CMPNZ.js} +3 -3
  61. package/dist/{chunk-IIUQFWJQ.js.map → chunk-H37CMPNZ.js.map} +1 -1
  62. package/dist/{chunk-UHU7XGN5.cjs → chunk-HMJCSYZW.cjs} +5 -5
  63. package/dist/{chunk-UHU7XGN5.cjs.map → chunk-HMJCSYZW.cjs.map} +1 -1
  64. package/dist/{chunk-RVLJB7VT.js → chunk-HPJ2CRVK.js} +207 -39
  65. package/dist/chunk-HPJ2CRVK.js.map +1 -0
  66. package/dist/{chunk-CGHIAHE4.js → chunk-HRVCVRIR.js} +4 -4
  67. package/dist/{chunk-CGHIAHE4.js.map → chunk-HRVCVRIR.js.map} +1 -1
  68. package/dist/{chunk-PY7BK6R5.js → chunk-IB2ZR7T7.js} +3 -3
  69. package/dist/{chunk-PY7BK6R5.js.map → chunk-IB2ZR7T7.js.map} +1 -1
  70. package/dist/{chunk-PR74IWI7.cjs → chunk-IGZADYRV.cjs} +10 -10
  71. package/dist/{chunk-PR74IWI7.cjs.map → chunk-IGZADYRV.cjs.map} +1 -1
  72. package/dist/{chunk-I7C56OKO.cjs → chunk-IPQTQESA.cjs} +89 -88
  73. package/dist/chunk-IPQTQESA.cjs.map +1 -0
  74. package/dist/{chunk-Z5HHA64S.js → chunk-IWH4OW2X.js} +5 -5
  75. package/dist/{chunk-Z5HHA64S.js.map → chunk-IWH4OW2X.js.map} +1 -1
  76. package/dist/{chunk-HEOJ25V5.cjs → chunk-JKUQ3PWM.cjs} +10 -10
  77. package/dist/{chunk-HEOJ25V5.cjs.map → chunk-JKUQ3PWM.cjs.map} +1 -1
  78. package/dist/{chunk-XVGLASCJ.cjs → chunk-JLIHQAX7.cjs} +10 -10
  79. package/dist/{chunk-XVGLASCJ.cjs.map → chunk-JLIHQAX7.cjs.map} +1 -1
  80. package/dist/{chunk-QD6VVPVE.cjs → chunk-KH7BZQVQ.cjs} +207 -39
  81. package/dist/chunk-KH7BZQVQ.cjs.map +1 -0
  82. package/dist/{chunk-F53VVSTG.js → chunk-KKFLSWNW.js} +4 -4
  83. package/dist/{chunk-F53VVSTG.js.map → chunk-KKFLSWNW.js.map} +1 -1
  84. package/dist/{chunk-U443PPE6.js → chunk-KLGVHICT.js} +5 -5
  85. package/dist/{chunk-U443PPE6.js.map → chunk-KLGVHICT.js.map} +1 -1
  86. package/dist/{chunk-Z2BIGMS5.cjs → chunk-KYKIFNJQ.cjs} +14 -14
  87. package/dist/{chunk-Z2BIGMS5.cjs.map → chunk-KYKIFNJQ.cjs.map} +1 -1
  88. package/dist/{chunk-ZQKKKLSE.js → chunk-L4VJYJCY.js} +3 -3
  89. package/dist/{chunk-ZQKKKLSE.js.map → chunk-L4VJYJCY.js.map} +1 -1
  90. package/dist/{chunk-RJIYWHJT.cjs → chunk-LPLSDJEE.cjs} +10 -10
  91. package/dist/{chunk-RJIYWHJT.cjs.map → chunk-LPLSDJEE.cjs.map} +1 -1
  92. package/dist/{chunk-2KEASYDU.cjs → chunk-M2PIFW7O.cjs} +23 -23
  93. package/dist/{chunk-2KEASYDU.cjs.map → chunk-M2PIFW7O.cjs.map} +1 -1
  94. package/dist/{chunk-TQSLT72T.js → chunk-MN45G3GB.js} +3 -3
  95. package/dist/{chunk-TQSLT72T.js.map → chunk-MN45G3GB.js.map} +1 -1
  96. package/dist/{chunk-G3ITOFN4.js → chunk-NDI2C7UD.js} +3 -3
  97. package/dist/{chunk-G3ITOFN4.js.map → chunk-NDI2C7UD.js.map} +1 -1
  98. package/dist/{chunk-55RZXH3T.cjs → chunk-NHTUBHMO.cjs} +24 -24
  99. package/dist/{chunk-55RZXH3T.cjs.map → chunk-NHTUBHMO.cjs.map} +1 -1
  100. package/dist/{chunk-VKXG3BEY.js → chunk-OH2TKHUS.js} +4 -4
  101. package/dist/{chunk-VKXG3BEY.js.map → chunk-OH2TKHUS.js.map} +1 -1
  102. package/dist/{chunk-FMQXIXOI.js → chunk-OV64H74M.js} +10 -9
  103. package/dist/chunk-OV64H74M.js.map +1 -0
  104. package/dist/{chunk-Q2EPTZ2U.js → chunk-P63CP2ZR.js} +3 -3
  105. package/dist/{chunk-Q2EPTZ2U.js.map → chunk-P63CP2ZR.js.map} +1 -1
  106. package/dist/{chunk-MPS2N4MR.cjs → chunk-Q2X6FP4W.cjs} +28 -28
  107. package/dist/{chunk-MPS2N4MR.cjs.map → chunk-Q2X6FP4W.cjs.map} +1 -1
  108. package/dist/{chunk-4ZHBZQXM.cjs → chunk-RRQAOK3A.cjs} +11 -11
  109. package/dist/{chunk-4ZHBZQXM.cjs.map → chunk-RRQAOK3A.cjs.map} +1 -1
  110. package/dist/{chunk-KEEXFB4G.js → chunk-TZTKWB74.js} +3 -3
  111. package/dist/{chunk-KEEXFB4G.js.map → chunk-TZTKWB74.js.map} +1 -1
  112. package/dist/{chunk-SDZGXISK.js → chunk-UQALKED3.js} +3 -3
  113. package/dist/{chunk-SDZGXISK.js.map → chunk-UQALKED3.js.map} +1 -1
  114. package/dist/{chunk-LM6RQBYB.cjs → chunk-VO6UDRJS.cjs} +38 -45
  115. package/dist/chunk-VO6UDRJS.cjs.map +1 -0
  116. package/dist/{chunk-B2D7XPAW.js → chunk-W7I2JHCT.js} +3 -3
  117. package/dist/{chunk-B2D7XPAW.js.map → chunk-W7I2JHCT.js.map} +1 -1
  118. package/dist/{chunk-BUNC6PXE.cjs → chunk-WCZPCP3F.cjs} +7 -7
  119. package/dist/{chunk-BUNC6PXE.cjs.map → chunk-WCZPCP3F.cjs.map} +1 -1
  120. package/dist/{chunk-DDLPCKB2.cjs → chunk-WQCIZSIK.cjs} +10 -10
  121. package/dist/{chunk-DDLPCKB2.cjs.map → chunk-WQCIZSIK.cjs.map} +1 -1
  122. package/dist/{chunk-SVAGXZHK.js → chunk-X7USLRKI.js} +3 -3
  123. package/dist/{chunk-SVAGXZHK.js.map → chunk-X7USLRKI.js.map} +1 -1
  124. package/dist/{chunk-URKPHJ3V.cjs → chunk-XJ4C64FH.cjs} +33 -33
  125. package/dist/{chunk-URKPHJ3V.cjs.map → chunk-XJ4C64FH.cjs.map} +1 -1
  126. package/dist/{chunk-QATGBU6M.js → chunk-YIVUIIWJ.js} +4 -4
  127. package/dist/{chunk-QATGBU6M.js.map → chunk-YIVUIIWJ.js.map} +1 -1
  128. package/dist/{chunk-WBWSO2XP.cjs → chunk-YJLDMFSE.cjs} +6 -4
  129. package/dist/chunk-YJLDMFSE.cjs.map +1 -0
  130. package/dist/{chunk-INP5SRVC.cjs → chunk-ZHKXVTMQ.cjs} +4 -4
  131. package/dist/{chunk-INP5SRVC.cjs.map → chunk-ZHKXVTMQ.cjs.map} +1 -1
  132. package/dist/{chunk-QLZ77CJP.cjs → chunk-ZXGZ7K6D.cjs} +12 -12
  133. package/dist/{chunk-QLZ77CJP.cjs.map → chunk-ZXGZ7K6D.cjs.map} +1 -1
  134. package/dist/docs/SKILL.md +1 -1
  135. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  136. package/dist/{observational-memory-UEDVTWS2-4W3HN25B.cjs → observational-memory-5NFPG6M3-L7EU4ABW.cjs} +18 -18
  137. package/dist/{observational-memory-UEDVTWS2-4W3HN25B.cjs.map → observational-memory-5NFPG6M3-L7EU4ABW.cjs.map} +1 -1
  138. package/dist/{observational-memory-UEDVTWS2-BX4GF252.js → observational-memory-5NFPG6M3-MG2OMRFW.js} +3 -3
  139. package/dist/{observational-memory-UEDVTWS2-BX4GF252.js.map → observational-memory-5NFPG6M3-MG2OMRFW.js.map} +1 -1
  140. package/dist/server/handlers/a2a.cjs +9 -9
  141. package/dist/server/handlers/a2a.js +1 -1
  142. package/dist/server/handlers/agent-builder.cjs +16 -16
  143. package/dist/server/handlers/agent-builder.js +1 -1
  144. package/dist/server/handlers/agent-versions.cjs +8 -8
  145. package/dist/server/handlers/agent-versions.js +1 -1
  146. package/dist/server/handlers/agents.cjs +33 -33
  147. package/dist/server/handlers/agents.d.ts.map +1 -1
  148. package/dist/server/handlers/agents.js +1 -1
  149. package/dist/server/handlers/auth.cjs +10 -10
  150. package/dist/server/handlers/auth.js +1 -1
  151. package/dist/server/handlers/datasets.cjs +21 -21
  152. package/dist/server/handlers/datasets.js +1 -1
  153. package/dist/server/handlers/logs.cjs +4 -4
  154. package/dist/server/handlers/logs.js +1 -1
  155. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  156. package/dist/server/handlers/mcp-client-versions.js +1 -1
  157. package/dist/server/handlers/mcp.cjs +9 -9
  158. package/dist/server/handlers/mcp.js +1 -1
  159. package/dist/server/handlers/memory.cjs +27 -27
  160. package/dist/server/handlers/memory.js +1 -1
  161. package/dist/server/handlers/observability-new-endpoints.cjs +19 -19
  162. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  163. package/dist/server/handlers/observability.cjs +24 -24
  164. package/dist/server/handlers/observability.js +2 -2
  165. package/dist/server/handlers/processor-providers.cjs +3 -3
  166. package/dist/server/handlers/processor-providers.js +1 -1
  167. package/dist/server/handlers/processors.cjs +4 -4
  168. package/dist/server/handlers/processors.js +1 -1
  169. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  170. package/dist/server/handlers/prompt-block-versions.js +1 -1
  171. package/dist/server/handlers/scorer-versions.cjs +8 -8
  172. package/dist/server/handlers/scorer-versions.js +1 -1
  173. package/dist/server/handlers/scores.cjs +7 -7
  174. package/dist/server/handlers/scores.js +1 -1
  175. package/dist/server/handlers/stored-agents.cjs +7 -7
  176. package/dist/server/handlers/stored-agents.js +1 -1
  177. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  178. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  179. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  180. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  181. package/dist/server/handlers/stored-scorers.cjs +6 -6
  182. package/dist/server/handlers/stored-scorers.js +1 -1
  183. package/dist/server/handlers/stored-skills.cjs +7 -7
  184. package/dist/server/handlers/stored-skills.js +1 -1
  185. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  186. package/dist/server/handlers/stored-workspaces.js +1 -1
  187. package/dist/server/handlers/system.cjs +2 -2
  188. package/dist/server/handlers/system.js +1 -1
  189. package/dist/server/handlers/tool-providers.cjs +5 -5
  190. package/dist/server/handlers/tool-providers.js +1 -1
  191. package/dist/server/handlers/tools.cjs +6 -6
  192. package/dist/server/handlers/tools.js +1 -1
  193. package/dist/server/handlers/vector.cjs +16 -16
  194. package/dist/server/handlers/vector.js +1 -1
  195. package/dist/server/handlers/voice.cjs +8 -8
  196. package/dist/server/handlers/voice.js +1 -1
  197. package/dist/server/handlers/workflows.cjs +24 -24
  198. package/dist/server/handlers/workflows.js +1 -1
  199. package/dist/server/handlers/workspace.cjs +26 -26
  200. package/dist/server/handlers/workspace.js +1 -1
  201. package/dist/server/handlers.cjs +26 -26
  202. package/dist/server/handlers.js +13 -13
  203. package/dist/server/server-adapter/index.cjs +281 -281
  204. package/dist/server/server-adapter/index.js +34 -34
  205. package/package.json +6 -6
  206. package/dist/chunk-EQ5FORA4.js.map +0 -1
  207. package/dist/chunk-FMQXIXOI.js.map +0 -1
  208. package/dist/chunk-I7C56OKO.cjs.map +0 -1
  209. package/dist/chunk-LM6RQBYB.cjs.map +0 -1
  210. package/dist/chunk-QD6VVPVE.cjs.map +0 -1
  211. package/dist/chunk-RVLJB7VT.js.map +0 -1
  212. package/dist/chunk-VXXU2IL3.js.map +0 -1
  213. package/dist/chunk-WBWSO2XP.cjs.map +0 -1
@@ -10,7 +10,7 @@ var processors = require('@mastra/core/processors');
10
10
  var crypto$1 = require('crypto');
11
11
  var async_hooks = require('async_hooks');
12
12
 
13
- // ../memory/dist/chunk-4KPXPQX3.js
13
+ // ../memory/dist/chunk-5SMKVGJP.js
14
14
 
15
15
  // ../../node_modules/.pnpm/xxhash-wasm@1.1.0/node_modules/xxhash-wasm/esm/xxhash-wasm.js
16
16
  var t = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 48, 8, 96, 3, 127, 127, 127, 1, 127, 96, 3, 127, 127, 127, 0, 96, 2, 127, 127, 0, 96, 1, 127, 1, 127, 96, 3, 127, 127, 126, 1, 126, 96, 3, 126, 127, 127, 1, 126, 96, 2, 127, 126, 0, 96, 1, 127, 1, 126, 3, 11, 10, 0, 0, 2, 1, 3, 4, 5, 6, 1, 7, 5, 3, 1, 0, 1, 7, 85, 9, 3, 109, 101, 109, 2, 0, 5, 120, 120, 104, 51, 50, 0, 0, 6, 105, 110, 105, 116, 51, 50, 0, 2, 8, 117, 112, 100, 97, 116, 101, 51, 50, 0, 3, 8, 100, 105, 103, 101, 115, 116, 51, 50, 0, 4, 5, 120, 120, 104, 54, 52, 0, 5, 6, 105, 110, 105, 116, 54, 52, 0, 7, 8, 117, 112, 100, 97, 116, 101, 54, 52, 0, 8, 8, 100, 105, 103, 101, 115, 116, 54, 52, 0, 9, 10, 251, 22, 10, 242, 1, 1, 4, 127, 32, 0, 32, 1, 106, 33, 3, 32, 1, 65, 16, 79, 4, 127, 32, 3, 65, 16, 107, 33, 6, 32, 2, 65, 168, 136, 141, 161, 2, 106, 33, 3, 32, 2, 65, 137, 235, 208, 208, 7, 107, 33, 4, 32, 2, 65, 207, 140, 162, 142, 6, 106, 33, 5, 3, 64, 32, 3, 32, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 3, 32, 4, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 4, 32, 2, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 5, 32, 0, 65, 4, 106, 34, 0, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 5, 32, 6, 32, 0, 65, 4, 106, 34, 0, 79, 13, 0, 11, 32, 2, 65, 12, 119, 32, 5, 65, 18, 119, 106, 32, 4, 65, 7, 119, 106, 32, 3, 65, 1, 119, 106, 5, 32, 2, 65, 177, 207, 217, 178, 1, 106, 11, 32, 1, 106, 32, 0, 32, 1, 65, 15, 113, 16, 1, 11, 146, 1, 0, 32, 1, 32, 2, 106, 33, 2, 3, 64, 32, 1, 65, 4, 106, 32, 2, 75, 69, 4, 64, 32, 0, 32, 1, 40, 2, 0, 65, 189, 220, 202, 149, 124, 108, 106, 65, 17, 119, 65, 175, 214, 211, 190, 2, 108, 33, 0, 32, 1, 65, 4, 106, 33, 1, 12, 1, 11, 11, 3, 64, 32, 1, 32, 2, 79, 69, 4, 64, 32, 0, 32, 1, 45, 0, 0, 65, 177, 207, 217, 178, 1, 108, 106, 65, 11, 119, 65, 177, 243, 221, 241, 121, 108, 33, 0, 32, 1, 65, 1, 106, 33, 1, 12, 1, 11, 11, 32, 0, 32, 0, 65, 15, 118, 115, 65, 247, 148, 175, 175, 120, 108, 34, 0, 65, 13, 118, 32, 0, 115, 65, 189, 220, 202, 149, 124, 108, 34, 0, 65, 16, 118, 32, 0, 115, 11, 63, 0, 32, 0, 65, 8, 106, 32, 1, 65, 168, 136, 141, 161, 2, 106, 54, 2, 0, 32, 0, 65, 12, 106, 32, 1, 65, 137, 235, 208, 208, 7, 107, 54, 2, 0, 32, 0, 65, 16, 106, 32, 1, 54, 2, 0, 32, 0, 65, 20, 106, 32, 1, 65, 207, 140, 162, 142, 6, 106, 54, 2, 0, 11, 195, 4, 1, 6, 127, 32, 1, 32, 2, 106, 33, 6, 32, 0, 65, 24, 106, 33, 4, 32, 0, 65, 40, 106, 40, 2, 0, 33, 3, 32, 0, 32, 0, 40, 2, 0, 32, 2, 106, 54, 2, 0, 32, 0, 65, 4, 106, 34, 5, 32, 5, 40, 2, 0, 32, 2, 65, 16, 79, 32, 0, 40, 2, 0, 65, 16, 79, 114, 114, 54, 2, 0, 32, 2, 32, 3, 106, 65, 16, 73, 4, 64, 32, 3, 32, 4, 106, 32, 1, 32, 2, 252, 10, 0, 0, 32, 0, 65, 40, 106, 32, 2, 32, 3, 106, 54, 2, 0, 15, 11, 32, 3, 4, 64, 32, 3, 32, 4, 106, 32, 1, 65, 16, 32, 3, 107, 34, 2, 252, 10, 0, 0, 32, 0, 65, 8, 106, 34, 3, 32, 3, 40, 2, 0, 32, 4, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 54, 2, 0, 32, 0, 65, 12, 106, 34, 3, 32, 3, 40, 2, 0, 32, 4, 65, 4, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 54, 2, 0, 32, 0, 65, 16, 106, 34, 3, 32, 3, 40, 2, 0, 32, 4, 65, 8, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 54, 2, 0, 32, 0, 65, 20, 106, 34, 3, 32, 3, 40, 2, 0, 32, 4, 65, 12, 106, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 54, 2, 0, 32, 0, 65, 40, 106, 65, 0, 54, 2, 0, 32, 1, 32, 2, 106, 33, 1, 11, 32, 1, 32, 6, 65, 16, 107, 77, 4, 64, 32, 6, 65, 16, 107, 33, 8, 32, 0, 65, 8, 106, 40, 2, 0, 33, 2, 32, 0, 65, 12, 106, 40, 2, 0, 33, 3, 32, 0, 65, 16, 106, 40, 2, 0, 33, 5, 32, 0, 65, 20, 106, 40, 2, 0, 33, 7, 3, 64, 32, 2, 32, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 2, 32, 3, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 3, 32, 5, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 5, 32, 7, 32, 1, 65, 4, 106, 34, 1, 40, 2, 0, 65, 247, 148, 175, 175, 120, 108, 106, 65, 13, 119, 65, 177, 243, 221, 241, 121, 108, 33, 7, 32, 8, 32, 1, 65, 4, 106, 34, 1, 79, 13, 0, 11, 32, 0, 65, 8, 106, 32, 2, 54, 2, 0, 32, 0, 65, 12, 106, 32, 3, 54, 2, 0, 32, 0, 65, 16, 106, 32, 5, 54, 2, 0, 32, 0, 65, 20, 106, 32, 7, 54, 2, 0, 11, 32, 1, 32, 6, 73, 4, 64, 32, 4, 32, 1, 32, 6, 32, 1, 107, 34, 1, 252, 10, 0, 0, 32, 0, 65, 40, 106, 32, 1, 54, 2, 0, 11, 11, 97, 1, 1, 127, 32, 0, 65, 16, 106, 40, 2, 0, 33, 1, 32, 0, 65, 4, 106, 40, 2, 0, 4, 127, 32, 1, 65, 12, 119, 32, 0, 65, 20, 106, 40, 2, 0, 65, 18, 119, 106, 32, 0, 65, 12, 106, 40, 2, 0, 65, 7, 119, 106, 32, 0, 65, 8, 106, 40, 2, 0, 65, 1, 119, 106, 5, 32, 1, 65, 177, 207, 217, 178, 1, 106, 11, 32, 0, 40, 2, 0, 106, 32, 0, 65, 24, 106, 32, 0, 65, 40, 106, 40, 2, 0, 16, 1, 11, 255, 3, 2, 3, 126, 1, 127, 32, 0, 32, 1, 106, 33, 6, 32, 1, 65, 32, 79, 4, 126, 32, 6, 65, 32, 107, 33, 6, 32, 2, 66, 214, 235, 130, 238, 234, 253, 137, 245, 224, 0, 124, 33, 3, 32, 2, 66, 177, 169, 172, 193, 173, 184, 212, 166, 61, 125, 33, 4, 32, 2, 66, 249, 234, 208, 208, 231, 201, 161, 228, 225, 0, 124, 33, 5, 3, 64, 32, 3, 32, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 3, 32, 4, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 4, 32, 2, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 2, 32, 5, 32, 0, 65, 8, 106, 34, 0, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 5, 32, 6, 32, 0, 65, 8, 106, 34, 0, 79, 13, 0, 11, 32, 2, 66, 12, 137, 32, 5, 66, 18, 137, 124, 32, 4, 66, 7, 137, 124, 32, 3, 66, 1, 137, 124, 32, 3, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 4, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 2, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 5, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 5, 32, 2, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 124, 11, 32, 1, 173, 124, 32, 0, 32, 1, 65, 31, 113, 16, 6, 11, 134, 2, 0, 32, 1, 32, 2, 106, 33, 2, 3, 64, 32, 2, 32, 1, 65, 8, 106, 79, 4, 64, 32, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 32, 0, 133, 66, 27, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 33, 0, 32, 1, 65, 8, 106, 33, 1, 12, 1, 11, 11, 32, 1, 65, 4, 106, 32, 2, 77, 4, 64, 32, 0, 32, 1, 53, 2, 0, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 23, 137, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 124, 33, 0, 32, 1, 65, 4, 106, 33, 1, 11, 3, 64, 32, 1, 32, 2, 73, 4, 64, 32, 0, 32, 1, 49, 0, 0, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 126, 133, 66, 11, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 0, 32, 1, 65, 1, 106, 33, 1, 12, 1, 11, 11, 32, 0, 32, 0, 66, 33, 136, 133, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 34, 0, 32, 0, 66, 29, 136, 133, 66, 249, 243, 221, 241, 153, 246, 153, 171, 22, 126, 34, 0, 32, 0, 66, 32, 136, 133, 11, 77, 0, 32, 0, 65, 8, 106, 32, 1, 66, 214, 235, 130, 238, 234, 253, 137, 245, 224, 0, 124, 55, 3, 0, 32, 0, 65, 16, 106, 32, 1, 66, 177, 169, 172, 193, 173, 184, 212, 166, 61, 125, 55, 3, 0, 32, 0, 65, 24, 106, 32, 1, 55, 3, 0, 32, 0, 65, 32, 106, 32, 1, 66, 249, 234, 208, 208, 231, 201, 161, 228, 225, 0, 124, 55, 3, 0, 11, 244, 4, 2, 3, 127, 4, 126, 32, 1, 32, 2, 106, 33, 5, 32, 0, 65, 40, 106, 33, 4, 32, 0, 65, 200, 0, 106, 40, 2, 0, 33, 3, 32, 0, 32, 0, 41, 3, 0, 32, 2, 173, 124, 55, 3, 0, 32, 2, 32, 3, 106, 65, 32, 73, 4, 64, 32, 3, 32, 4, 106, 32, 1, 32, 2, 252, 10, 0, 0, 32, 0, 65, 200, 0, 106, 32, 2, 32, 3, 106, 54, 2, 0, 15, 11, 32, 3, 4, 64, 32, 3, 32, 4, 106, 32, 1, 65, 32, 32, 3, 107, 34, 2, 252, 10, 0, 0, 32, 0, 65, 8, 106, 34, 3, 32, 3, 41, 3, 0, 32, 4, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 55, 3, 0, 32, 0, 65, 16, 106, 34, 3, 32, 3, 41, 3, 0, 32, 4, 65, 8, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 55, 3, 0, 32, 0, 65, 24, 106, 34, 3, 32, 3, 41, 3, 0, 32, 4, 65, 16, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 55, 3, 0, 32, 0, 65, 32, 106, 34, 3, 32, 3, 41, 3, 0, 32, 4, 65, 24, 106, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 55, 3, 0, 32, 0, 65, 200, 0, 106, 65, 0, 54, 2, 0, 32, 1, 32, 2, 106, 33, 1, 11, 32, 1, 65, 32, 106, 32, 5, 77, 4, 64, 32, 5, 65, 32, 107, 33, 2, 32, 0, 65, 8, 106, 41, 3, 0, 33, 6, 32, 0, 65, 16, 106, 41, 3, 0, 33, 7, 32, 0, 65, 24, 106, 41, 3, 0, 33, 8, 32, 0, 65, 32, 106, 41, 3, 0, 33, 9, 3, 64, 32, 6, 32, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 6, 32, 7, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 7, 32, 8, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 8, 32, 9, 32, 1, 65, 8, 106, 34, 1, 41, 3, 0, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 124, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 33, 9, 32, 2, 32, 1, 65, 8, 106, 34, 1, 79, 13, 0, 11, 32, 0, 65, 8, 106, 32, 6, 55, 3, 0, 32, 0, 65, 16, 106, 32, 7, 55, 3, 0, 32, 0, 65, 24, 106, 32, 8, 55, 3, 0, 32, 0, 65, 32, 106, 32, 9, 55, 3, 0, 11, 32, 1, 32, 5, 73, 4, 64, 32, 4, 32, 1, 32, 5, 32, 1, 107, 34, 1, 252, 10, 0, 0, 32, 0, 65, 200, 0, 106, 32, 1, 54, 2, 0, 11, 11, 188, 2, 1, 5, 126, 32, 0, 65, 24, 106, 41, 3, 0, 33, 1, 32, 0, 41, 3, 0, 34, 2, 66, 32, 90, 4, 126, 32, 0, 65, 8, 106, 41, 3, 0, 34, 3, 66, 1, 137, 32, 0, 65, 16, 106, 41, 3, 0, 34, 4, 66, 7, 137, 124, 32, 1, 66, 12, 137, 32, 0, 65, 32, 106, 41, 3, 0, 34, 5, 66, 18, 137, 124, 124, 32, 3, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 4, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 1, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 32, 5, 66, 207, 214, 211, 190, 210, 199, 171, 217, 66, 126, 66, 31, 137, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 133, 66, 135, 149, 175, 175, 152, 182, 222, 155, 158, 127, 126, 66, 157, 163, 181, 234, 131, 177, 141, 138, 250, 0, 125, 5, 32, 1, 66, 197, 207, 217, 178, 241, 229, 186, 234, 39, 124, 11, 32, 2, 124, 32, 0, 65, 40, 106, 32, 2, 66, 31, 131, 167, 16, 6, 11]);
@@ -1041,7 +1041,7 @@ function imageSize(input) {
1041
1041
  throw new TypeError(`unsupported file type: ${type}`);
1042
1042
  }
1043
1043
 
1044
- // ../memory/dist/chunk-4KPXPQX3.js
1044
+ // ../memory/dist/chunk-5SMKVGJP.js
1045
1045
  function formatRelativeTime(date, currentDate) {
1046
1046
  const diffMs = currentDate.getTime() - date.getTime();
1047
1047
  const diffDays = Math.floor(diffMs / (1e3 * 60 * 60 * 24));
@@ -1326,6 +1326,18 @@ function createActivationMarker(params) {
1326
1326
  }
1327
1327
  };
1328
1328
  }
1329
+ function createThreadUpdateMarker(params) {
1330
+ return {
1331
+ type: "data-om-thread-update",
1332
+ data: {
1333
+ cycleId: params.cycleId,
1334
+ threadId: params.threadId,
1335
+ oldTitle: params.oldTitle,
1336
+ newTitle: params.newTitle,
1337
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
1338
+ }
1339
+ };
1340
+ }
1329
1341
  var ENCRYPTED_CONTENT_KEY = "encryptedContent";
1330
1342
  var ENCRYPTED_CONTENT_REDACTION_THRESHOLD = 256;
1331
1343
  var DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS = 1e4;
@@ -1633,17 +1645,60 @@ Only add a new observation for a repeated action if the NEW result changes the p
1633
1645
  ACTIONABLE INSIGHTS:
1634
1646
  - What worked well in explanations
1635
1647
  - What needs follow-up or clarification
1636
- - User's stated goals or next steps (note if the user tells you not to do a next step, or asks for something specific, other next steps besides the users request should be marked as "waiting for user", unless the user explicitly says to continue all next steps)`;
1637
- var OBSERVER_OUTPUT_FORMAT_BASE = `Use priority levels:
1638
- - \u{1F534} High: explicit user facts, preferences, goals achieved, critical context
1648
+ - User's stated goals or next steps (note if the user tells you not to do a next step, or asks for something specific, other next steps besides the users request should be marked as "waiting for user", unless the user explicitly says to continue all next steps)
1649
+
1650
+ COMPLETION TRACKING:
1651
+ Completion observations are not just summaries. They are explicit memory signals to the assistant that a task, question, or subtask has been resolved.
1652
+ Without clear completion markers, the assistant may forget that work is already finished and may repeat, reopen, or continue an already-completed task.
1653
+
1654
+ Use \u2705 to answer: "What exactly is now done?"
1655
+ Choose completion observations that help the assistant know what is finished and should not be reworked unless new information appears.
1656
+
1657
+ Use \u2705 when:
1658
+ - The user explicitly confirms something worked or was answered ("thanks, that fixed it", "got it", "perfect")
1659
+ - The assistant provided a definitive, complete answer to a factual question and the user moved on
1660
+ - A multi-step task reached its stated goal
1661
+ - The user acknowledged receipt of requested information
1662
+ - A concrete subtask, fix, deliverable, or implementation step became complete during ongoing work
1663
+
1664
+ Do NOT use \u2705 when:
1665
+ - The assistant merely responded \u2014 the user might follow up with corrections
1666
+ - The topic is paused but not resolved ("I'll try that later")
1667
+ - The user's reaction is ambiguous
1668
+
1669
+ FORMAT:
1670
+ As a sub-bullet under the related observation group:
1671
+ * \u{1F534} (14:30) User asked how to configure auth middleware
1672
+ * -> Agent explained JWT setup with code example
1673
+ * \u2705 User confirmed auth is working
1674
+
1675
+ Or as a standalone observation when closing out a broader task:
1676
+ * \u2705 (14:45) Auth configuration task completed \u2014 user confirmed middleware is working
1677
+
1678
+ Completion observations should be terse but specific about WHAT was completed.
1679
+ Prefer concrete resolved outcomes over abstract workflow status so the assistant remembers what is already done.`;
1680
+ var OBSERVER_OUTPUT_FORMAT_BASE = buildObserverOutputFormat();
1681
+ function buildObserverOutputFormat(includeThreadTitle = false) {
1682
+ const threadTitleSection = includeThreadTitle ? `
1683
+ <thread-title>
1684
+ A short, noun-phrase title for this conversation (2-5 words). Examples:
1685
+ - "Auth bug fix" \u2014 not "Fixing the auth bug"
1686
+ - "Dark mode toggle" \u2014 not "User wants dark mode toggle added"
1687
+ - "Deployment pipeline setup" \u2014 not "Setting up deployment pipeline for project"
1688
+ Only update when the topic meaningfully changes.
1689
+ </thread-title>` : "";
1690
+ return `Use priority levels:
1691
+ - \u{1F534} High: explicit user facts, preferences, unresolved goals, critical context
1639
1692
  - \u{1F7E1} Medium: project details, learned information, tool results
1640
1693
  - \u{1F7E2} Low: minor details, uncertain observations
1694
+ - \u2705 Completed: concrete task finished, question answered, issue resolved, goal achieved, or subtask completed in a way that helps the assistant know it is done
1641
1695
 
1642
1696
  Group related observations (like tool sequences) by indenting:
1643
1697
  * \u{1F534} (14:33) Agent debugging auth issue
1644
1698
  * -> ran git status, found 3 modified files
1645
1699
  * -> viewed auth.ts:45-60, found missing null check
1646
1700
  * -> applied fix, tests now pass
1701
+ * \u2705 Tests passing, auth issue resolved
1647
1702
 
1648
1703
  Group observations by date, then list each with 24-hour time.
1649
1704
 
@@ -1670,7 +1725,8 @@ Hint for the agent's immediate next message. Examples:
1670
1725
  - "I've updated the navigation model. Let me walk you through the changes..."
1671
1726
  - "The assistant should wait for the user to respond before continuing."
1672
1727
  - Call the view tool on src/example.ts to continue debugging.
1673
- </suggested-response>`;
1728
+ </suggested-response>${threadTitleSection}`;
1729
+ }
1674
1730
  var OBSERVER_GUIDELINES = `- Be specific enough for the assistant to act on
1675
1731
  - Good: "User prefers short, direct answers without lengthy explanations"
1676
1732
  - Bad: "User stated a preference" (too vague)
@@ -1680,12 +1736,21 @@ var OBSERVER_GUIDELINES = `- Be specific enough for the assistant to act on
1680
1736
  - If the agent calls tools, observe what was called, why, and what was learned
1681
1737
  - When observing files with line numbers, include the line number if useful
1682
1738
  - If the agent provides a detailed response, observe the contents so it could be repeated
1683
- - Make sure you start each observation with a priority emoji (\u{1F534}, \u{1F7E1}, \u{1F7E2})
1684
- - User messages are always \u{1F534} priority, so are the completions of tasks. Capture the user's words closely \u2014 short/medium messages near-verbatim, long messages summarized with key quotes
1739
+ - Make sure you start each observation with a priority emoji (\u{1F534}, \u{1F7E1}, \u{1F7E2}) or a completion marker (\u2705)
1740
+ - Capture the user's words closely \u2014 short/medium messages near-verbatim, long messages summarized with key quotes. User confirmations or explicit resolved outcomes should be \u2705 when they clearly signal something is done; unresolved or critical user facts remain \u{1F534}
1741
+ - Treat \u2705 as a memory signal that tells the assistant something is finished and should not be repeated unless new information changes it
1742
+ - Make completion observations answer "What exactly is now done?"
1743
+ - Prefer concrete resolved outcomes over meta-level workflow or bookkeeping updates
1744
+ - When multiple concrete things were completed, capture the concrete completed work rather than collapsing it into a vague progress summary
1685
1745
  - Observe WHAT the agent did and WHAT it means
1686
1746
  - If the user provides detailed messages or code snippets, observe all important details`;
1687
- function buildObserverSystemPrompt(multiThread = false, instruction) {
1688
- const outputFormat = OBSERVER_OUTPUT_FORMAT_BASE;
1747
+ function buildObserverSystemPrompt(multiThread = false, instruction, includeThreadTitle = false) {
1748
+ const outputFormat = buildObserverOutputFormat(includeThreadTitle);
1749
+ const multiThreadTitleInstruction = includeThreadTitle ? ` Each thread's observations, current-task, suggested-response, and thread-title should be nested inside a <thread id="..."> block within <observations>.` : ` Each thread's observations, current-task, and suggested-response should be nested inside a <thread id="..."> block within <observations>.`;
1750
+ const multiThreadTitleExample = includeThreadTitle ? `
1751
+ <thread-title>Feature X implementation</thread-title>` : "";
1752
+ const multiThreadSecondTitleExample = includeThreadTitle ? `
1753
+ <thread-title>Deployment setup</thread-title>` : "";
1689
1754
  if (multiThread) {
1690
1755
  return `You are the memory consciousness of an AI assistant. Your observations will be the ONLY information the assistant has about past interactions with this user.
1691
1756
 
@@ -1700,7 +1765,13 @@ Process each thread separately and output observations for each thread.
1700
1765
 
1701
1766
  === OUTPUT FORMAT ===
1702
1767
 
1703
- Your output MUST use XML tags to structure the response. Each thread's observations, current-task, and suggested-response should be nested inside a <thread id="..."> block within <observations>.
1768
+ Your output MUST use XML tags to structure the response.${multiThreadTitleInstruction}
1769
+
1770
+ Use this observation format inside each thread block:
1771
+
1772
+ ${outputFormat}
1773
+
1774
+ For multi-thread output, wrap each thread's observations like this:
1704
1775
 
1705
1776
  <observations>
1706
1777
  <thread id="thread_id_1">
@@ -1714,7 +1785,7 @@ What the agent is currently working on in this thread
1714
1785
 
1715
1786
  <suggested-response>
1716
1787
  Hint for the agent's next message in this thread
1717
- </suggested-response>
1788
+ </suggested-response>${multiThreadTitleExample}
1718
1789
  </thread>
1719
1790
 
1720
1791
  <thread id="thread_id_2">
@@ -1727,15 +1798,10 @@ Current task for this thread
1727
1798
 
1728
1799
  <suggested-response>
1729
1800
  Suggested response for this thread
1730
- </suggested-response>
1801
+ </suggested-response>${multiThreadSecondTitleExample}
1731
1802
  </thread>
1732
1803
  </observations>
1733
1804
 
1734
- Use priority levels:
1735
- - \u{1F534} High: explicit user facts, preferences, goals achieved, critical context, user messages
1736
- - \u{1F7E1} Medium: project details, learned information, tool results
1737
- - \u{1F7E2} Low: minor details, uncertain observations
1738
-
1739
1805
  === GUIDELINES ===
1740
1806
 
1741
1807
  ${OBSERVER_GUIDELINES}
@@ -2015,7 +2081,7 @@ The following messages are from ${threadOrder.length} different conversation thr
2015
2081
  content
2016
2082
  };
2017
2083
  }
2018
- function buildMultiThreadObserverTaskPrompt(existingObservations, threadOrder, priorMetadataByThread, wasTruncated) {
2084
+ function buildMultiThreadObserverTaskPrompt(existingObservations, threadOrder, priorMetadataByThread, wasTruncated, includeThreadTitle) {
2019
2085
  let prompt = "";
2020
2086
  if (existingObservations) {
2021
2087
  prompt += `## Previous Observations
@@ -2030,7 +2096,8 @@ ${existingObservations}
2030
2096
  const hasTruncatedObservations = wasTruncated ?? false;
2031
2097
  const threadMetadataLines = threadOrder?.map((threadId) => {
2032
2098
  const metadata = priorMetadataByThread?.get(threadId);
2033
- if (!metadata?.currentTask && !metadata?.suggestedResponse) {
2099
+ const hasRelevantMetadata = metadata?.currentTask || metadata?.suggestedResponse || includeThreadTitle && metadata?.threadTitle;
2100
+ if (!hasRelevantMetadata) {
2034
2101
  return "";
2035
2102
  }
2036
2103
  const lines = [`- thread ${threadId}`];
@@ -2040,6 +2107,9 @@ ${existingObservations}
2040
2107
  if (metadata.suggestedResponse) {
2041
2108
  lines.push(` - prior suggested-response: ${metadata.suggestedResponse}`);
2042
2109
  }
2110
+ if (includeThreadTitle && metadata.threadTitle) {
2111
+ lines.push(` - prior thread-title: ${metadata.threadTitle}`);
2112
+ }
2043
2113
  return lines.join("\n");
2044
2114
  }).filter(Boolean).join("\n");
2045
2115
  if (threadMetadataLines) {
@@ -2054,7 +2124,8 @@ ${threadMetadataLines}
2054
2124
  prompt += `The main agent still has full memory context outside this observer window.
2055
2125
  `;
2056
2126
  }
2057
- prompt += `Use each thread's prior current-task and suggested-response as continuity hints, then update them based on that thread's new messages.
2127
+ const titleHint = includeThreadTitle ? ", and thread-title" : "";
2128
+ prompt += `Use each thread's prior current-task, suggested-response${titleHint} as continuity hints, then update them based on that thread's new messages.
2058
2129
 
2059
2130
  ---
2060
2131
 
@@ -2063,7 +2134,8 @@ ${threadMetadataLines}
2063
2134
  prompt += `## Your Task
2064
2135
 
2065
2136
  `;
2066
- prompt += `Extract new observations from each thread. Output your observations grouped by thread using <thread id="..."> tags inside your <observations> block. Each thread block should contain that thread's observations, current-task, and suggested-response.
2137
+ const titleInstruction = includeThreadTitle ? ", and thread-title" : "";
2138
+ prompt += `Extract new observations from each thread. Output your observations grouped by thread using <thread id="..."> tags inside your <observations> block. Each thread block should contain that thread's observations, current-task, suggested-response${titleInstruction}.
2067
2139
 
2068
2140
  `;
2069
2141
  prompt += `Example output format:
@@ -2079,6 +2151,8 @@ ${threadMetadataLines}
2079
2151
  prompt += `<current-task>Working on feature X</current-task>
2080
2152
  `;
2081
2153
  prompt += `<suggested-response>Continue with the implementation</suggested-response>
2154
+ `;
2155
+ if (includeThreadTitle) prompt += `<thread-title>Feature X implementation</thread-title>
2082
2156
  `;
2083
2157
  prompt += `</thread>
2084
2158
  `;
@@ -2091,6 +2165,8 @@ ${threadMetadataLines}
2091
2165
  prompt += `<current-task>Discussing deployment options</current-task>
2092
2166
  `;
2093
2167
  prompt += `<suggested-response>Explain the deployment process</suggested-response>
2168
+ `;
2169
+ if (includeThreadTitle) prompt += `<thread-title>Deployment setup</thread-title>
2094
2170
  `;
2095
2171
  prompt += `</thread>
2096
2172
  `;
@@ -2123,11 +2199,18 @@ function parseMultiThreadObserverOutput(output) {
2123
2199
  suggestedContinuation = suggestedMatch[1].trim();
2124
2200
  observations = observations.replace(/<suggested-response>[\s\S]*?<\/suggested-response>/i, "");
2125
2201
  }
2202
+ let threadTitle;
2203
+ const threadTitleMatch = threadContent.match(/<thread-title>([\s\S]*?)<\/thread-title>/i);
2204
+ if (threadTitleMatch?.[1]) {
2205
+ threadTitle = threadTitleMatch[1].trim();
2206
+ observations = observations.replace(/<thread-title>[\s\S]*?<\/thread-title>/i, "");
2207
+ }
2126
2208
  observations = sanitizeObservationLines(observations.trim());
2127
2209
  threads.set(threadId, {
2128
2210
  observations,
2129
2211
  currentTask,
2130
2212
  suggestedContinuation,
2213
+ threadTitle,
2131
2214
  rawOutput: threadContent
2132
2215
  });
2133
2216
  }
@@ -2156,6 +2239,9 @@ ${existingObservations}
2156
2239
  if (options?.priorSuggestedResponse) {
2157
2240
  priorMetadataLines.push(`- prior suggested-response: ${options.priorSuggestedResponse}`);
2158
2241
  }
2242
+ if (options?.includeThreadTitle && options?.priorThreadTitle) {
2243
+ priorMetadataLines.push(`- prior thread-title: ${options.priorThreadTitle}`);
2244
+ }
2159
2245
  if (priorMetadataLines.length > 0) {
2160
2246
  prompt += `## Prior Thread Metadata
2161
2247
 
@@ -2168,7 +2254,8 @@ ${priorMetadataLines.join("\n")}
2168
2254
  prompt += `The main agent still has full memory context outside this observer window.
2169
2255
  `;
2170
2256
  }
2171
- prompt += `Use the prior current-task and suggested-response as continuity hints, then update them based on the new messages.
2257
+ const titleHint = options?.includeThreadTitle ? ", and thread-title" : "";
2258
+ prompt += `Use the prior current-task, suggested-response${titleHint} as continuity hints, then update them based on the new messages.
2172
2259
 
2173
2260
  ---
2174
2261
 
@@ -2178,10 +2265,15 @@ ${priorMetadataLines.join("\n")}
2178
2265
 
2179
2266
  `;
2180
2267
  prompt += `Extract new observations from the message history above. Do not repeat observations that are already in the previous observations. Add your new observations in the format specified in your instructions.`;
2268
+ if (options?.includeThreadTitle) {
2269
+ prompt += `
2270
+
2271
+ Also output a <thread-title> \u2014 a short noun-phrase label for this conversation (2-5 words). Write it like a file name or PR title: "Auth bug fix", "Memory config refactor", "RAG pipeline setup". Avoid verbs/sentences ("Fixing the auth bug"), filler ("Working on stuff"), and generic labels ("Code review"). Only change it from the prior title if the topic meaningfully shifted.`;
2272
+ }
2181
2273
  if (options?.skipContinuationHints) {
2182
2274
  prompt += `
2183
2275
 
2184
- IMPORTANT: Do NOT include <current-task> or <suggested-response> sections in your output. Only output <observations>.`;
2276
+ IMPORTANT: Do NOT include <current-task> or <suggested-response> sections in your output. Only output <observations>${options?.includeThreadTitle ? " and <thread-title>" : ""}.`;
2185
2277
  }
2186
2278
  return prompt;
2187
2279
  }
@@ -2209,6 +2301,7 @@ function parseObserverOutput(output) {
2209
2301
  observations,
2210
2302
  currentTask: parsed.currentTask || void 0,
2211
2303
  suggestedContinuation: parsed.suggestedResponse || void 0,
2304
+ threadTitle: parsed.threadTitle || void 0,
2212
2305
  rawOutput: output
2213
2306
  };
2214
2307
  }
@@ -2216,7 +2309,8 @@ function parseMemorySectionXml(content) {
2216
2309
  const result = {
2217
2310
  observations: "",
2218
2311
  currentTask: "",
2219
- suggestedResponse: ""
2312
+ suggestedResponse: "",
2313
+ threadTitle: ""
2220
2314
  };
2221
2315
  const observationsRegex = /^[ \t]*<observations>([\s\S]*?)^[ \t]*<\/observations>/gim;
2222
2316
  const observationsMatches = [...content.matchAll(observationsRegex)];
@@ -2233,6 +2327,10 @@ function parseMemorySectionXml(content) {
2233
2327
  if (suggestedResponseMatch?.[1]) {
2234
2328
  result.suggestedResponse = suggestedResponseMatch[1].trim();
2235
2329
  }
2330
+ const threadTitleMatch = content.match(/^[ \t]*<thread-title>([\s\S]*?)<\/thread-title>/im);
2331
+ if (threadTitleMatch?.[1]) {
2332
+ result.threadTitle = threadTitleMatch[1].trim();
2333
+ }
2236
2334
  return result;
2237
2335
  }
2238
2336
  function extractListItemsOnly(content) {
@@ -2366,6 +2464,8 @@ When consolidating observations:
2366
2464
  - Preserve and include dates/times when present (temporal context is critical)
2367
2465
  - Retain the most relevant timestamps (start times, completion times, significant events)
2368
2466
  - Combine related items where it makes sense (e.g., "agent called view tool 5 times on file x")
2467
+ - Preserve \u2705 completion markers \u2014 they are memory signals that tell the assistant what is already resolved and help prevent repeated work
2468
+ - Preserve the concrete resolved outcome captured by \u2705 markers so the assistant knows what exactly is done
2369
2469
  - Condense older observations more aggressively, retain more detail for recent ones
2370
2470
 
2371
2471
  CRITICAL: USER ASSERTIONS vs QUESTIONS
@@ -2446,6 +2546,8 @@ Please re-process with slightly more compression:
2446
2546
  - Closer to the end, retain more fine details (recent context matters more)
2447
2547
  - Memory is getting long - use a more condensed style throughout
2448
2548
  - Combine related items more aggressively but do not lose important specific details of names, places, events, and people
2549
+ - Preserve \u2705 completion markers \u2014 they are memory signals that tell the assistant what is already resolved and help prevent repeated work
2550
+ - Preserve the concrete resolved outcome captured by \u2705 markers so the assistant knows what exactly is done
2449
2551
  - For example if there is a long nested observation list about repeated tool calls, you can combine those into a single line and observe that the tool was called multiple times for x reason, and finally y outcome happened.
2450
2552
 
2451
2553
  Your current detail level was a 10/10, lets aim for a 8/10 detail level.
@@ -2460,6 +2562,8 @@ Please re-process with much more aggressive compression:
2460
2562
  - Closer to the end, retain fine details (recent context matters more)
2461
2563
  - Memory is getting very long - use a significantly more condensed style throughout
2462
2564
  - Combine related items aggressively but do not lose important specific details of names, places, events, and people
2565
+ - Preserve \u2705 completion markers \u2014 they are memory signals that tell the assistant what is already resolved and help prevent repeated work
2566
+ - Preserve the concrete resolved outcome captured by \u2705 markers so the assistant knows what exactly is done
2463
2567
  - For example if there is a long nested observation list about repeated tool calls, you can combine those into a single line and observe that the tool was called multiple times for x reason, and finally y outcome happened.
2464
2568
  - Remove redundant information and merge overlapping observations
2465
2569
 
@@ -2476,6 +2580,8 @@ Please re-process with maximum compression:
2476
2580
  - Ruthlessly merge related observations \u2014 if 10 observations are about the same topic, combine into 1-2 lines
2477
2581
  - Drop procedural details (tool calls, retries, intermediate steps) \u2014 keep only final outcomes
2478
2582
  - Drop observations that are no longer relevant or have been superseded by newer information
2583
+ - Preserve \u2705 completion markers \u2014 they are memory signals that tell the assistant what is already resolved and help prevent repeated work
2584
+ - Preserve the concrete resolved outcome captured by \u2705 markers so the assistant knows what exactly is done
2479
2585
  - Preserve: names, dates, decisions, errors, user preferences, and architectural choices
2480
2586
 
2481
2587
  Your current detail level was a 10/10, lets aim for a 4/10 detail level.
@@ -4452,7 +4558,8 @@ Async buffering is enabled by default \u2014 this opt-out is only needed when us
4452
4558
  config.observation?.messageTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens
4453
4559
  ),
4454
4560
  previousObserverTokens: config.observation?.previousObserverTokens ?? 2e3,
4455
- instruction: config.observation?.instruction
4561
+ instruction: config.observation?.instruction,
4562
+ threadTitle: config.observation?.threadTitle ?? false
4456
4563
  };
4457
4564
  this.reflectionConfig = {
4458
4565
  model: reflectionModel,
@@ -4678,7 +4785,11 @@ Async buffering is enabled by default \u2014 this opt-out is only needed when us
4678
4785
  */
4679
4786
  getObserverAgent() {
4680
4787
  if (!this.observerAgent) {
4681
- const systemPrompt = buildObserverSystemPrompt(false, this.observationConfig.instruction);
4788
+ const systemPrompt = buildObserverSystemPrompt(
4789
+ false,
4790
+ this.observationConfig.instruction,
4791
+ this.observationConfig.threadTitle
4792
+ );
4682
4793
  this.observerAgent = new agent.Agent({
4683
4794
  id: "observational-memory-observer",
4684
4795
  name: "Observer",
@@ -5100,7 +5211,7 @@ ${unreflectedContent}` : bufferedReflection;
5100
5211
  const isImportant = new Array(totalCount);
5101
5212
  for (let i = 0; i < totalCount; i++) {
5102
5213
  lineTokens[i] = this.tokenCounter.countString(lines[i]);
5103
- isImportant[i] = lines[i].includes("\u{1F534}");
5214
+ isImportant[i] = lines[i].includes("\u{1F534}") || lines[i].includes("\u2705");
5104
5215
  }
5105
5216
  const suffixTokens = new Array(totalCount + 1);
5106
5217
  suffixTokens[totalCount] = 0;
@@ -5186,7 +5297,9 @@ ${unreflectedContent}` : bufferedReflection;
5186
5297
  skipContinuationHints: options?.skipContinuationHints,
5187
5298
  priorCurrentTask: options?.priorCurrentTask,
5188
5299
  priorSuggestedResponse: options?.priorSuggestedResponse,
5189
- wasTruncated: options?.wasTruncated
5300
+ priorThreadTitle: options?.priorThreadTitle,
5301
+ wasTruncated: options?.wasTruncated,
5302
+ includeThreadTitle: this.observationConfig.threadTitle
5190
5303
  })
5191
5304
  },
5192
5305
  buildObserverHistoryMessage(messagesToObserve)
@@ -5221,6 +5334,7 @@ ${unreflectedContent}` : bufferedReflection;
5221
5334
  observations: parsed.observations,
5222
5335
  currentTask: parsed.currentTask,
5223
5336
  suggestedContinuation: parsed.suggestedContinuation,
5337
+ threadTitle: parsed.threadTitle,
5224
5338
  usage: usage ? {
5225
5339
  inputTokens: usage.inputTokens,
5226
5340
  outputTokens: usage.outputTokens,
@@ -5235,7 +5349,11 @@ ${unreflectedContent}` : bufferedReflection;
5235
5349
  * plus the total usage for the batch.
5236
5350
  */
5237
5351
  async callMultiThreadObserver(existingObservations, messagesByThread, threadOrder, priorMetadataByThread, abortSignal, requestContext, wasTruncated) {
5238
- const systemPrompt = buildObserverSystemPrompt(true, this.observationConfig.instruction);
5352
+ const systemPrompt = buildObserverSystemPrompt(
5353
+ true,
5354
+ this.observationConfig.instruction,
5355
+ this.observationConfig.threadTitle
5356
+ );
5239
5357
  const agent$1 = new agent.Agent({
5240
5358
  id: "multi-thread-observer",
5241
5359
  name: "multi-thread-observer",
@@ -5249,7 +5367,8 @@ ${unreflectedContent}` : bufferedReflection;
5249
5367
  existingObservations,
5250
5368
  threadOrder,
5251
5369
  priorMetadataByThread,
5252
- wasTruncated
5370
+ wasTruncated,
5371
+ this.observationConfig.threadTitle
5253
5372
  )
5254
5373
  },
5255
5374
  buildMultiThreadObserverHistoryMessage(messagesByThread, threadOrder)
@@ -5291,7 +5410,8 @@ ${unreflectedContent}` : bufferedReflection;
5291
5410
  results.set(threadId, {
5292
5411
  observations: threadResult.observations,
5293
5412
  currentTask: threadResult.currentTask,
5294
- suggestedContinuation: threadResult.suggestedContinuation
5413
+ suggestedContinuation: threadResult.suggestedContinuation,
5414
+ threadTitle: threadResult.threadTitle
5295
5415
  });
5296
5416
  }
5297
5417
  for (const threadId of threadOrder) {
@@ -6734,6 +6854,7 @@ ${threadClose}`;
6734
6854
  requestContext,
6735
6855
  priorCurrentTask: threadOMMetadata?.currentTask,
6736
6856
  priorSuggestedResponse: threadOMMetadata?.suggestedResponse,
6857
+ priorThreadTitle: thread?.title,
6737
6858
  wasTruncated
6738
6859
  });
6739
6860
  const lastObservedAt = this.getMaxMessageTimestamp(messagesToObserve);
@@ -6764,10 +6885,31 @@ ${threadClose}`;
6764
6885
  });
6765
6886
  await this.storage.updateThread({
6766
6887
  id: threadId,
6767
- title: threadForMetadata.title ?? "",
6888
+ title: threadForMetadata.title || "",
6768
6889
  metadata: newMetadata
6769
6890
  });
6770
6891
  }
6892
+ if (this.observationConfig.threadTitle && threadForMetadata && result.threadTitle) {
6893
+ const oldTitle = threadForMetadata.title;
6894
+ const newTitle = result.threadTitle;
6895
+ if (newTitle.trim().length >= 3 && newTitle !== oldTitle) {
6896
+ await this.storage.updateThread({
6897
+ id: threadId,
6898
+ title: newTitle,
6899
+ metadata: threadForMetadata.metadata ?? {}
6900
+ });
6901
+ if (writer) {
6902
+ const threadUpdateMarker = createThreadUpdateMarker({
6903
+ cycleId,
6904
+ threadId,
6905
+ oldTitle: oldTitle ?? void 0,
6906
+ newTitle
6907
+ });
6908
+ await writer.custom(threadUpdateMarker).catch(() => {
6909
+ });
6910
+ }
6911
+ }
6912
+ }
6771
6913
  await this.storage.updateActiveObservations({
6772
6914
  id: record.id,
6773
6915
  observations: newObservations,
@@ -7011,6 +7153,7 @@ ${threadClose}`;
7011
7153
  requestContext,
7012
7154
  priorCurrentTask: threadOMMetadata?.currentTask,
7013
7155
  priorSuggestedResponse: threadOMMetadata?.suggestedResponse,
7156
+ priorThreadTitle: thread?.title,
7014
7157
  wasTruncated
7015
7158
  }
7016
7159
  );
@@ -7018,6 +7161,22 @@ ${threadClose}`;
7018
7161
  omDebug(`[OM:doAsyncBufferedObservation] empty observations returned, skipping buffer storage`);
7019
7162
  return;
7020
7163
  }
7164
+ if (this.observationConfig.threadTitle && result.threadTitle) {
7165
+ const newTitle = result.threadTitle;
7166
+ if (newTitle.length >= 3 && newTitle !== thread?.title) {
7167
+ await this.storage.updateThread({ id: threadId, title: newTitle, metadata: thread?.metadata ?? {} });
7168
+ if (writer) {
7169
+ const marker = createThreadUpdateMarker({
7170
+ cycleId,
7171
+ threadId,
7172
+ oldTitle: thread?.title,
7173
+ newTitle
7174
+ });
7175
+ void writer.custom(marker).catch(() => {
7176
+ });
7177
+ }
7178
+ }
7179
+ }
7021
7180
  let newObservations;
7022
7181
  if (this.scope === "resource") {
7023
7182
  newObservations = await this.wrapWithThreadTag(threadId, result.observations);
@@ -7441,7 +7600,8 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
7441
7600
  threadMetadataMap.set(thread.id, {
7442
7601
  lastObservedAt: omMetadata?.lastObservedAt,
7443
7602
  currentTask: omMetadata?.currentTask,
7444
- suggestedResponse: omMetadata?.suggestedResponse
7603
+ suggestedResponse: omMetadata?.suggestedResponse,
7604
+ threadTitle: thread.title
7445
7605
  });
7446
7606
  }
7447
7607
  const messagesByThread = /* @__PURE__ */ new Map();
@@ -7594,10 +7754,11 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
7594
7754
  const batchPriorMetadata = /* @__PURE__ */ new Map();
7595
7755
  for (const threadId of batch.threadIds) {
7596
7756
  const metadata = threadMetadataMap.get(threadId);
7597
- if (metadata?.currentTask || metadata?.suggestedResponse) {
7757
+ if (metadata?.currentTask || metadata?.suggestedResponse || metadata?.threadTitle) {
7598
7758
  batchPriorMetadata.set(threadId, {
7599
7759
  currentTask: metadata.currentTask,
7600
- suggestedResponse: metadata.suggestedResponse
7760
+ suggestedResponse: metadata.suggestedResponse,
7761
+ threadTitle: metadata.threadTitle
7601
7762
  });
7602
7763
  }
7603
7764
  }
@@ -7655,6 +7816,13 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
7655
7816
  );
7656
7817
  const thread = await this.storage.getThreadById({ threadId });
7657
7818
  if (thread) {
7819
+ let titleForUpdate = thread.title ?? "";
7820
+ if (this.observationConfig.threadTitle && result.threadTitle) {
7821
+ const newTitle = result.threadTitle.trim();
7822
+ if (newTitle.length >= 3 && newTitle !== thread.title) {
7823
+ titleForUpdate = newTitle;
7824
+ }
7825
+ }
7658
7826
  const newMetadata = memory.setThreadOMMetadata(thread.metadata, {
7659
7827
  lastObservedAt: threadLastObservedAt.toISOString(),
7660
7828
  suggestedResponse: result.suggestedContinuation,
@@ -7663,7 +7831,7 @@ ${unreflectedContent}` : freshRecord.bufferedReflection;
7663
7831
  });
7664
7832
  await this.storage.updateThread({
7665
7833
  id: threadId,
7666
- title: thread.title ?? "",
7834
+ title: titleForUpdate,
7667
7835
  metadata: newMetadata
7668
7836
  });
7669
7837
  }
@@ -8135,5 +8303,5 @@ exports.getObservationsAsOf = getObservationsAsOf;
8135
8303
  exports.hasCurrentTaskSection = hasCurrentTaskSection;
8136
8304
  exports.optimizeObservationsForContext = optimizeObservationsForContext;
8137
8305
  exports.parseObserverOutput = parseObserverOutput;
8138
- //# sourceMappingURL=chunk-QD6VVPVE.cjs.map
8139
- //# sourceMappingURL=chunk-QD6VVPVE.cjs.map
8306
+ //# sourceMappingURL=chunk-KH7BZQVQ.cjs.map
8307
+ //# sourceMappingURL=chunk-KH7BZQVQ.cjs.map