@nookplot/runtime 0.5.131 → 0.5.132

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 (397) hide show
  1. package/dist/__tests__/apiMarketplace.test.d.ts +2 -0
  2. package/dist/__tests__/apiMarketplace.test.d.ts.map +1 -0
  3. package/dist/__tests__/apiMarketplace.test.js +102 -0
  4. package/dist/__tests__/apiMarketplace.test.js.map +1 -0
  5. package/dist/__tests__/autonomous.actionDispatch.test.d.ts +2 -0
  6. package/dist/__tests__/autonomous.actionDispatch.test.d.ts.map +1 -0
  7. package/dist/__tests__/autonomous.actionDispatch.test.js +287 -0
  8. package/dist/__tests__/autonomous.actionDispatch.test.js.map +1 -0
  9. package/dist/__tests__/autonomous.dedup.test.d.ts +2 -0
  10. package/dist/__tests__/autonomous.dedup.test.d.ts.map +1 -0
  11. package/dist/__tests__/autonomous.dedup.test.js +125 -0
  12. package/dist/__tests__/autonomous.dedup.test.js.map +1 -0
  13. package/dist/__tests__/autonomous.doomLoop.test.d.ts +2 -0
  14. package/dist/__tests__/autonomous.doomLoop.test.d.ts.map +1 -0
  15. package/dist/__tests__/autonomous.doomLoop.test.js +126 -0
  16. package/dist/__tests__/autonomous.doomLoop.test.js.map +1 -0
  17. package/dist/__tests__/autonomous.getAvailableActions.test.d.ts +2 -0
  18. package/dist/__tests__/autonomous.getAvailableActions.test.d.ts.map +1 -0
  19. package/dist/__tests__/autonomous.getAvailableActions.test.js +233 -0
  20. package/dist/__tests__/autonomous.getAvailableActions.test.js.map +1 -0
  21. package/dist/__tests__/autonomous.guardrails.test.d.ts +2 -0
  22. package/dist/__tests__/autonomous.guardrails.test.d.ts.map +1 -0
  23. package/dist/__tests__/autonomous.guardrails.test.js +215 -0
  24. package/dist/__tests__/autonomous.guardrails.test.js.map +1 -0
  25. package/dist/__tests__/autonomous.hooks.test.d.ts +2 -0
  26. package/dist/__tests__/autonomous.hooks.test.d.ts.map +1 -0
  27. package/dist/__tests__/autonomous.hooks.test.js +107 -0
  28. package/dist/__tests__/autonomous.hooks.test.js.map +1 -0
  29. package/dist/__tests__/autonomous.latentSpace.test.d.ts +2 -0
  30. package/dist/__tests__/autonomous.latentSpace.test.d.ts.map +1 -0
  31. package/dist/__tests__/autonomous.latentSpace.test.js +224 -0
  32. package/dist/__tests__/autonomous.latentSpace.test.js.map +1 -0
  33. package/dist/__tests__/autonomous.lifecycle.test.d.ts +2 -0
  34. package/dist/__tests__/autonomous.lifecycle.test.d.ts.map +1 -0
  35. package/dist/__tests__/autonomous.lifecycle.test.js +147 -0
  36. package/dist/__tests__/autonomous.lifecycle.test.js.map +1 -0
  37. package/dist/__tests__/autonomous.loadedSkillRefs.test.d.ts +2 -0
  38. package/dist/__tests__/autonomous.loadedSkillRefs.test.d.ts.map +1 -0
  39. package/dist/__tests__/autonomous.loadedSkillRefs.test.js +150 -0
  40. package/dist/__tests__/autonomous.loadedSkillRefs.test.js.map +1 -0
  41. package/dist/__tests__/chatEngine.episodicHook.test.d.ts +2 -0
  42. package/dist/__tests__/chatEngine.episodicHook.test.d.ts.map +1 -0
  43. package/dist/__tests__/chatEngine.episodicHook.test.js +160 -0
  44. package/dist/__tests__/chatEngine.episodicHook.test.js.map +1 -0
  45. package/dist/__tests__/chatEngine.test.d.ts +2 -0
  46. package/dist/__tests__/chatEngine.test.d.ts.map +1 -0
  47. package/dist/__tests__/chatEngine.test.js +482 -0
  48. package/dist/__tests__/chatEngine.test.js.map +1 -0
  49. package/dist/__tests__/codegen-drift.test.d.ts +23 -0
  50. package/dist/__tests__/codegen-drift.test.d.ts.map +1 -0
  51. package/dist/__tests__/codegen-drift.test.js +185 -0
  52. package/dist/__tests__/codegen-drift.test.js.map +1 -0
  53. package/dist/__tests__/contentSafety.test.d.ts +2 -0
  54. package/dist/__tests__/contentSafety.test.d.ts.map +1 -0
  55. package/dist/__tests__/contentSafety.test.js +90 -0
  56. package/dist/__tests__/contentSafety.test.js.map +1 -0
  57. package/dist/__tests__/conversation/compactionMemory.test.d.ts +2 -0
  58. package/dist/__tests__/conversation/compactionMemory.test.d.ts.map +1 -0
  59. package/dist/__tests__/conversation/compactionMemory.test.js +447 -0
  60. package/dist/__tests__/conversation/compactionMemory.test.js.map +1 -0
  61. package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts +2 -0
  62. package/dist/__tests__/conversation/modelThresholdsParity.test.d.ts.map +1 -0
  63. package/dist/__tests__/conversation/modelThresholdsParity.test.js +79 -0
  64. package/dist/__tests__/conversation/modelThresholdsParity.test.js.map +1 -0
  65. package/dist/__tests__/doomLoop.test.d.ts +6 -0
  66. package/dist/__tests__/doomLoop.test.d.ts.map +1 -0
  67. package/dist/__tests__/doomLoop.test.js +144 -0
  68. package/dist/__tests__/doomLoop.test.js.map +1 -0
  69. package/dist/__tests__/guardrails.test.d.ts +2 -0
  70. package/dist/__tests__/guardrails.test.d.ts.map +1 -0
  71. package/dist/__tests__/guardrails.test.js +236 -0
  72. package/dist/__tests__/guardrails.test.js.map +1 -0
  73. package/dist/__tests__/helpers/mockRuntime.d.ts +11 -0
  74. package/dist/__tests__/helpers/mockRuntime.d.ts.map +1 -0
  75. package/dist/__tests__/helpers/mockRuntime.js +146 -0
  76. package/dist/__tests__/helpers/mockRuntime.js.map +1 -0
  77. package/dist/__tests__/hooks.test.d.ts +9 -0
  78. package/dist/__tests__/hooks.test.d.ts.map +1 -0
  79. package/dist/__tests__/hooks.test.js +192 -0
  80. package/dist/__tests__/hooks.test.js.map +1 -0
  81. package/dist/__tests__/manifestActivationHook.test.d.ts +2 -0
  82. package/dist/__tests__/manifestActivationHook.test.d.ts.map +1 -0
  83. package/dist/__tests__/manifestActivationHook.test.js +312 -0
  84. package/dist/__tests__/manifestActivationHook.test.js.map +1 -0
  85. package/dist/__tests__/memory.test.d.ts +2 -0
  86. package/dist/__tests__/memory.test.d.ts.map +1 -0
  87. package/dist/__tests__/memory.test.js +192 -0
  88. package/dist/__tests__/memory.test.js.map +1 -0
  89. package/dist/__tests__/onChainActions.parity.test.d.ts +12 -0
  90. package/dist/__tests__/onChainActions.parity.test.d.ts.map +1 -0
  91. package/dist/__tests__/onChainActions.parity.test.js +104 -0
  92. package/dist/__tests__/onChainActions.parity.test.js.map +1 -0
  93. package/dist/__tests__/querySegmentation.test.d.ts +2 -0
  94. package/dist/__tests__/querySegmentation.test.d.ts.map +1 -0
  95. package/dist/__tests__/querySegmentation.test.js +187 -0
  96. package/dist/__tests__/querySegmentation.test.js.map +1 -0
  97. package/dist/__tests__/sandbox.test.d.ts +13 -0
  98. package/dist/__tests__/sandbox.test.d.ts.map +1 -0
  99. package/dist/__tests__/sandbox.test.js +413 -0
  100. package/dist/__tests__/sandbox.test.js.map +1 -0
  101. package/dist/__tests__/signing.test.d.ts +2 -0
  102. package/dist/__tests__/signing.test.d.ts.map +1 -0
  103. package/dist/__tests__/signing.test.js +260 -0
  104. package/dist/__tests__/signing.test.js.map +1 -0
  105. package/dist/__tests__/wakeUpStack.test.d.ts +2 -0
  106. package/dist/__tests__/wakeUpStack.test.d.ts.map +1 -0
  107. package/dist/__tests__/wakeUpStack.test.js +239 -0
  108. package/dist/__tests__/wakeUpStack.test.js.map +1 -0
  109. package/dist/actionCatalog.d.ts +57 -0
  110. package/dist/actionCatalog.d.ts.map +1 -0
  111. package/dist/actionCatalog.generated.d.ts +4 -0
  112. package/dist/actionCatalog.generated.d.ts.map +1 -0
  113. package/dist/actionCatalog.generated.js +2194 -0
  114. package/dist/actionCatalog.generated.js.map +1 -0
  115. package/dist/actionCatalog.js +214 -0
  116. package/dist/actionCatalog.js.map +1 -0
  117. package/dist/api-marketplace.d.ts +111 -0
  118. package/dist/api-marketplace.d.ts.map +1 -0
  119. package/dist/api-marketplace.js +154 -0
  120. package/dist/api-marketplace.js.map +1 -0
  121. package/dist/artifactEmbeddings.d.ts +69 -0
  122. package/dist/artifactEmbeddings.d.ts.map +1 -0
  123. package/dist/artifactEmbeddings.js +52 -0
  124. package/dist/artifactEmbeddings.js.map +1 -0
  125. package/dist/autonomous.d.ts +271 -0
  126. package/dist/autonomous.d.ts.map +1 -0
  127. package/dist/autonomous.js +3517 -0
  128. package/dist/autonomous.js.map +1 -0
  129. package/dist/bounties.d.ts +112 -0
  130. package/dist/bounties.d.ts.map +1 -0
  131. package/dist/bounties.js +140 -0
  132. package/dist/bounties.js.map +1 -0
  133. package/dist/bundles.d.ts +174 -0
  134. package/dist/bundles.d.ts.map +1 -0
  135. package/dist/bundles.js +208 -0
  136. package/dist/bundles.js.map +1 -0
  137. package/dist/channels.d.ts +131 -0
  138. package/dist/channels.d.ts.map +1 -0
  139. package/dist/channels.js +227 -0
  140. package/dist/channels.js.map +1 -0
  141. package/dist/chat/chatEngine.d.ts +138 -0
  142. package/dist/chat/chatEngine.d.ts.map +1 -0
  143. package/dist/chat/chatEngine.js +613 -0
  144. package/dist/chat/chatEngine.js.map +1 -0
  145. package/dist/chat/index.d.ts +30 -0
  146. package/dist/chat/index.d.ts.map +1 -0
  147. package/dist/chat/index.js +29 -0
  148. package/dist/chat/index.js.map +1 -0
  149. package/dist/chat/terminal.d.ts +19 -0
  150. package/dist/chat/terminal.d.ts.map +1 -0
  151. package/dist/chat/terminal.js +17 -0
  152. package/dist/chat/terminal.js.map +1 -0
  153. package/dist/chat/terminals/discordTerminal.d.ts +22 -0
  154. package/dist/chat/terminals/discordTerminal.d.ts.map +1 -0
  155. package/dist/chat/terminals/discordTerminal.js +132 -0
  156. package/dist/chat/terminals/discordTerminal.js.map +1 -0
  157. package/dist/chat/terminals/openclawTerminal.d.ts +43 -0
  158. package/dist/chat/terminals/openclawTerminal.d.ts.map +1 -0
  159. package/dist/chat/terminals/openclawTerminal.js +186 -0
  160. package/dist/chat/terminals/openclawTerminal.js.map +1 -0
  161. package/dist/chat/terminals/stdinTerminal.d.ts +18 -0
  162. package/dist/chat/terminals/stdinTerminal.d.ts.map +1 -0
  163. package/dist/chat/terminals/stdinTerminal.js +58 -0
  164. package/dist/chat/terminals/stdinTerminal.js.map +1 -0
  165. package/dist/chat/terminals/telegramTerminal.d.ts +27 -0
  166. package/dist/chat/terminals/telegramTerminal.d.ts.map +1 -0
  167. package/dist/chat/terminals/telegramTerminal.js +123 -0
  168. package/dist/chat/terminals/telegramTerminal.js.map +1 -0
  169. package/dist/cognitiveWorkspace.d.ts +107 -0
  170. package/dist/cognitiveWorkspace.d.ts.map +1 -0
  171. package/dist/cognitiveWorkspace.js +94 -0
  172. package/dist/cognitiveWorkspace.js.map +1 -0
  173. package/dist/communities.d.ts +40 -0
  174. package/dist/communities.d.ts.map +1 -0
  175. package/dist/communities.js +53 -0
  176. package/dist/communities.js.map +1 -0
  177. package/dist/connection.d.ts +90 -0
  178. package/dist/connection.d.ts.map +1 -0
  179. package/dist/connection.js +429 -0
  180. package/dist/connection.js.map +1 -0
  181. package/dist/contentSafety.d.ts +64 -0
  182. package/dist/contentSafety.d.ts.map +1 -0
  183. package/dist/contentSafety.js +119 -0
  184. package/dist/contentSafety.js.map +1 -0
  185. package/dist/conversation/compactionMemory.d.ts +124 -0
  186. package/dist/conversation/compactionMemory.d.ts.map +1 -0
  187. package/dist/conversation/compactionMemory.js +379 -0
  188. package/dist/conversation/compactionMemory.js.map +1 -0
  189. package/dist/conversation/conversationLogStore.d.ts +111 -0
  190. package/dist/conversation/conversationLogStore.d.ts.map +1 -0
  191. package/dist/conversation/conversationLogStore.js +248 -0
  192. package/dist/conversation/conversationLogStore.js.map +1 -0
  193. package/dist/conversation/conversationMemory.d.ts +59 -0
  194. package/dist/conversation/conversationMemory.d.ts.map +1 -0
  195. package/dist/conversation/conversationMemory.js +32 -0
  196. package/dist/conversation/conversationMemory.js.map +1 -0
  197. package/dist/conversation/index.d.ts +16 -0
  198. package/dist/conversation/index.d.ts.map +1 -0
  199. package/dist/conversation/index.js +5 -0
  200. package/dist/conversation/index.js.map +1 -0
  201. package/dist/conversation/modelLimits.d.ts +43 -0
  202. package/dist/conversation/modelLimits.d.ts.map +1 -0
  203. package/dist/conversation/modelLimits.js +67 -0
  204. package/dist/conversation/modelLimits.js.map +1 -0
  205. package/dist/cro.d.ts +243 -0
  206. package/dist/cro.d.ts.map +1 -0
  207. package/dist/cro.js +263 -0
  208. package/dist/cro.js.map +1 -0
  209. package/dist/defaultGuardrails.d.ts +21 -0
  210. package/dist/defaultGuardrails.d.ts.map +1 -0
  211. package/dist/defaultGuardrails.js +90 -0
  212. package/dist/defaultGuardrails.js.map +1 -0
  213. package/dist/delegations.d.ts +63 -0
  214. package/dist/delegations.d.ts.map +1 -0
  215. package/dist/delegations.js +41 -0
  216. package/dist/delegations.js.map +1 -0
  217. package/dist/discovery.d.ts +172 -0
  218. package/dist/discovery.d.ts.map +1 -0
  219. package/dist/discovery.js +300 -0
  220. package/dist/discovery.js.map +1 -0
  221. package/dist/doomLoop.d.ts +52 -0
  222. package/dist/doomLoop.d.ts.map +1 -0
  223. package/dist/doomLoop.js +173 -0
  224. package/dist/doomLoop.js.map +1 -0
  225. package/dist/economy.d.ts +244 -0
  226. package/dist/economy.d.ts.map +1 -0
  227. package/dist/economy.js +263 -0
  228. package/dist/economy.js.map +1 -0
  229. package/dist/email.d.ts +125 -0
  230. package/dist/email.d.ts.map +1 -0
  231. package/dist/email.js +91 -0
  232. package/dist/email.js.map +1 -0
  233. package/dist/embeddingExchange.d.ts +141 -0
  234. package/dist/embeddingExchange.d.ts.map +1 -0
  235. package/dist/embeddingExchange.js +95 -0
  236. package/dist/embeddingExchange.js.map +1 -0
  237. package/dist/episodicMemoryHook.d.ts +39 -0
  238. package/dist/episodicMemoryHook.d.ts.map +1 -0
  239. package/dist/episodicMemoryHook.js +58 -0
  240. package/dist/episodicMemoryHook.js.map +1 -0
  241. package/dist/evaluator.d.ts +113 -0
  242. package/dist/evaluator.d.ts.map +1 -0
  243. package/dist/evaluator.js +144 -0
  244. package/dist/evaluator.js.map +1 -0
  245. package/dist/events.d.ts +58 -0
  246. package/dist/events.d.ts.map +1 -0
  247. package/dist/events.js +86 -0
  248. package/dist/events.js.map +1 -0
  249. package/dist/formatters.d.ts +31 -0
  250. package/dist/formatters.d.ts.map +1 -0
  251. package/dist/formatters.js +227 -0
  252. package/dist/formatters.js.map +1 -0
  253. package/dist/gpu.d.ts +137 -0
  254. package/dist/gpu.d.ts.map +1 -0
  255. package/dist/gpu.js +166 -0
  256. package/dist/gpu.js.map +1 -0
  257. package/dist/guardrails.d.ts +182 -0
  258. package/dist/guardrails.d.ts.map +1 -0
  259. package/dist/guardrails.js +277 -0
  260. package/dist/guardrails.js.map +1 -0
  261. package/dist/guilds.d.ts +158 -0
  262. package/dist/guilds.d.ts.map +1 -0
  263. package/dist/guilds.js +205 -0
  264. package/dist/guilds.js.map +1 -0
  265. package/dist/heartbeat.d.ts +43 -0
  266. package/dist/heartbeat.d.ts.map +1 -0
  267. package/dist/heartbeat.js +72 -0
  268. package/dist/heartbeat.js.map +1 -0
  269. package/dist/hooks.d.ts +172 -0
  270. package/dist/hooks.d.ts.map +1 -0
  271. package/dist/hooks.js +91 -0
  272. package/dist/hooks.js.map +1 -0
  273. package/dist/identity.d.ts +61 -0
  274. package/dist/identity.d.ts.map +1 -0
  275. package/dist/identity.js +76 -0
  276. package/dist/identity.js.map +1 -0
  277. package/dist/inbox.d.ts +77 -0
  278. package/dist/inbox.d.ts.map +1 -0
  279. package/dist/inbox.js +98 -0
  280. package/dist/inbox.js.map +1 -0
  281. package/dist/index.d.ts +321 -0
  282. package/dist/index.d.ts.map +1 -0
  283. package/dist/index.js +361 -0
  284. package/dist/index.js.map +1 -0
  285. package/dist/insights.d.ts +166 -0
  286. package/dist/insights.d.ts.map +1 -0
  287. package/dist/insights.js +100 -0
  288. package/dist/insights.js.map +1 -0
  289. package/dist/intents.d.ts +132 -0
  290. package/dist/intents.d.ts.map +1 -0
  291. package/dist/intents.js +81 -0
  292. package/dist/intents.js.map +1 -0
  293. package/dist/knowledgeContext.d.ts +68 -0
  294. package/dist/knowledgeContext.d.ts.map +1 -0
  295. package/dist/knowledgeContext.js +109 -0
  296. package/dist/knowledgeContext.js.map +1 -0
  297. package/dist/leaderboard.d.ts +30 -0
  298. package/dist/leaderboard.d.ts.map +1 -0
  299. package/dist/leaderboard.js +34 -0
  300. package/dist/leaderboard.js.map +1 -0
  301. package/dist/manifest.d.ts +127 -0
  302. package/dist/manifest.d.ts.map +1 -0
  303. package/dist/manifest.js +123 -0
  304. package/dist/manifest.js.map +1 -0
  305. package/dist/manifestActivationHook.d.ts +72 -0
  306. package/dist/manifestActivationHook.d.ts.map +1 -0
  307. package/dist/manifestActivationHook.js +180 -0
  308. package/dist/manifestActivationHook.js.map +1 -0
  309. package/dist/marketplace.d.ts +156 -0
  310. package/dist/marketplace.d.ts.map +1 -0
  311. package/dist/marketplace.js +215 -0
  312. package/dist/marketplace.js.map +1 -0
  313. package/dist/matching.d.ts +192 -0
  314. package/dist/matching.d.ts.map +1 -0
  315. package/dist/matching.js +138 -0
  316. package/dist/matching.js.map +1 -0
  317. package/dist/memory.d.ts +287 -0
  318. package/dist/memory.d.ts.map +1 -0
  319. package/dist/memory.js +379 -0
  320. package/dist/memory.js.map +1 -0
  321. package/dist/mining.d.ts +155 -0
  322. package/dist/mining.d.ts.map +1 -0
  323. package/dist/mining.js +365 -0
  324. package/dist/mining.js.map +1 -0
  325. package/dist/oracle.d.ts +30 -0
  326. package/dist/oracle.d.ts.map +1 -0
  327. package/dist/oracle.js +31 -0
  328. package/dist/oracle.js.map +1 -0
  329. package/dist/policies.d.ts +132 -0
  330. package/dist/policies.d.ts.map +1 -0
  331. package/dist/policies.js +62 -0
  332. package/dist/policies.js.map +1 -0
  333. package/dist/proactive.d.ts +197 -0
  334. package/dist/proactive.d.ts.map +1 -0
  335. package/dist/proactive.js +229 -0
  336. package/dist/proactive.js.map +1 -0
  337. package/dist/projects.d.ts +307 -0
  338. package/dist/projects.d.ts.map +1 -0
  339. package/dist/projects.js +438 -0
  340. package/dist/projects.js.map +1 -0
  341. package/dist/querySegmentation.d.ts +54 -0
  342. package/dist/querySegmentation.d.ts.map +1 -0
  343. package/dist/querySegmentation.js +80 -0
  344. package/dist/querySegmentation.js.map +1 -0
  345. package/dist/sandbox.d.ts +156 -0
  346. package/dist/sandbox.d.ts.map +1 -0
  347. package/dist/sandbox.js +425 -0
  348. package/dist/sandbox.js.map +1 -0
  349. package/dist/signalActionMap.d.ts +59 -0
  350. package/dist/signalActionMap.d.ts.map +1 -0
  351. package/dist/signalActionMap.js +305 -0
  352. package/dist/signalActionMap.js.map +1 -0
  353. package/dist/signing.d.ts +94 -0
  354. package/dist/signing.d.ts.map +1 -0
  355. package/dist/signing.js +158 -0
  356. package/dist/signing.js.map +1 -0
  357. package/dist/social.d.ts +176 -0
  358. package/dist/social.d.ts.map +1 -0
  359. package/dist/social.js +232 -0
  360. package/dist/social.js.map +1 -0
  361. package/dist/specialization.d.ts +108 -0
  362. package/dist/specialization.d.ts.map +1 -0
  363. package/dist/specialization.js +104 -0
  364. package/dist/specialization.js.map +1 -0
  365. package/dist/swarms.d.ts +106 -0
  366. package/dist/swarms.d.ts.map +1 -0
  367. package/dist/swarms.js +99 -0
  368. package/dist/swarms.js.map +1 -0
  369. package/dist/teaching.d.ts +171 -0
  370. package/dist/teaching.d.ts.map +1 -0
  371. package/dist/teaching.js +87 -0
  372. package/dist/teaching.js.map +1 -0
  373. package/dist/tools.d.ts +223 -0
  374. package/dist/tools.d.ts.map +1 -0
  375. package/dist/tools.js +325 -0
  376. package/dist/tools.js.map +1 -0
  377. package/dist/treasury-ops.d.ts +101 -0
  378. package/dist/treasury-ops.d.ts.map +1 -0
  379. package/dist/treasury-ops.js +59 -0
  380. package/dist/treasury-ops.js.map +1 -0
  381. package/dist/types.d.ts +1193 -0
  382. package/dist/types.d.ts.map +1 -0
  383. package/dist/types.js +7 -0
  384. package/dist/types.js.map +1 -0
  385. package/dist/wakeUpStack.d.ts +94 -0
  386. package/dist/wakeUpStack.d.ts.map +1 -0
  387. package/dist/wakeUpStack.js +215 -0
  388. package/dist/wakeUpStack.js.map +1 -0
  389. package/dist/workspace.d.ts +318 -0
  390. package/dist/workspace.d.ts.map +1 -0
  391. package/dist/workspace.js +207 -0
  392. package/dist/workspace.js.map +1 -0
  393. package/dist/xmtp.d.ts +85 -0
  394. package/dist/xmtp.d.ts.map +1 -0
  395. package/dist/xmtp.js +250 -0
  396. package/dist/xmtp.js.map +1 -0
  397. package/package.json +1 -1
@@ -0,0 +1,248 @@
1
+ /**
2
+ * `ConversationLogStore` — JSONL-on-disk persistence for `CompactionMemory`.
3
+ *
4
+ * Two implementations:
5
+ * - {@link LocalConversationLogStore} — one JSONL file per session under a
6
+ * fixed base directory. Append-only writes are durable across restarts.
7
+ * - {@link InMemoryConversationLogStore} — in-process map; the standard test
8
+ * double for unit suites that don't want disk IO.
9
+ *
10
+ * **Path-traversal defense.** The disk store hashes every `sessionId` to a safe
11
+ * filename — the LLM never reaches the filesystem because (a) `sessionId` comes
12
+ * from the closure, not LLM args, and (b) even if a caller forgets and pipes
13
+ * something attacker-controlled in, the hash strips path metacharacters.
14
+ *
15
+ * @module conversation/conversationLogStore
16
+ */
17
+ import { mkdir, readFile, appendFile, access, readdir, unlink } from "node:fs/promises";
18
+ import { join, resolve } from "node:path";
19
+ import { createHash } from "node:crypto";
20
+ // ── In-memory implementation ─────────────────────────────────
21
+ /**
22
+ * In-process log store for tests. Round-trips identically to
23
+ * `LocalConversationLogStore` but never touches disk.
24
+ */
25
+ export class InMemoryConversationLogStore {
26
+ logs = new Map();
27
+ async append(sessionId, entry) {
28
+ let list = this.logs.get(sessionId);
29
+ if (!list) {
30
+ list = [];
31
+ this.logs.set(sessionId, list);
32
+ }
33
+ list.push(entry);
34
+ }
35
+ async exists(sessionId) {
36
+ return this.logs.has(sessionId);
37
+ }
38
+ async read(sessionId) {
39
+ const list = this.logs.get(sessionId);
40
+ return list ? list.slice() : [];
41
+ }
42
+ async searchMessages(sessionId, query, maxResults) {
43
+ return searchEntries(await this.read(sessionId), query, maxResults);
44
+ }
45
+ async listSessions() {
46
+ return [...this.logs.keys()];
47
+ }
48
+ async delete(sessionId) {
49
+ this.logs.delete(sessionId);
50
+ }
51
+ }
52
+ /**
53
+ * JSONL-on-disk log. One file per session, named by SHA-256 of the
54
+ * `sessionId` so the on-disk layout is path-traversal-safe even if a caller
55
+ * pipes attacker-controlled input as the session id.
56
+ *
57
+ * The original `sessionId` is stored alongside the hashed filename in a
58
+ * sidecar map (`<baseDir>/_sessions.json`) so {@link listSessions} can return
59
+ * the human-readable identifiers.
60
+ *
61
+ * **Concurrency.** Appends and sidecar writes within ONE instance are
62
+ * serialized via a per-instance promise chain — calling `append()` ten times
63
+ * in parallel produces ten lines in call order, not ten interleaved partial
64
+ * writes. Concurrent writers across *processes* (same baseDir, different
65
+ * runtime instances) are still unsafe; the store is intended for single-
66
+ * process agents. Use separate `baseDir`s per process to avoid cross-process
67
+ * races on `_sessions.json`.
68
+ */
69
+ export class LocalConversationLogStore {
70
+ baseDir;
71
+ indexLoaded = false;
72
+ index = new Map(); // sessionId → relative filename
73
+ indexFilePromise = null;
74
+ /**
75
+ * In-process mutation chain. Any method that reads *and* writes shared state
76
+ * (`index`, `_sessions.json`, session JSONL files) awaits the previous op
77
+ * before starting. Read-only ops can skip this.
78
+ */
79
+ mutationChain = Promise.resolve();
80
+ constructor(opts = {}) {
81
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? ".";
82
+ this.baseDir = resolve(opts.baseDir ?? join(home, ".nookplot", "conversations"));
83
+ }
84
+ /**
85
+ * Run `fn` serialized against any other mutation on this instance. Failures
86
+ * in `fn` are surfaced to the caller but do NOT poison the chain — the next
87
+ * call starts from a resolved state.
88
+ */
89
+ serialize(fn) {
90
+ const run = this.mutationChain.then(fn, fn);
91
+ this.mutationChain = run.then(() => undefined, () => undefined);
92
+ return run;
93
+ }
94
+ /** Filename for a session: 32-char SHA-256 prefix + `.jsonl`. */
95
+ fileFor(sessionId) {
96
+ const hash = createHash("sha256").update(sessionId).digest("hex").slice(0, 32);
97
+ return `${hash}.jsonl`;
98
+ }
99
+ indexPath() {
100
+ return join(this.baseDir, "_sessions.json");
101
+ }
102
+ async ensureIndex() {
103
+ if (this.indexLoaded)
104
+ return;
105
+ if (this.indexFilePromise) {
106
+ await this.indexFilePromise;
107
+ return;
108
+ }
109
+ this.indexFilePromise = (async () => {
110
+ try {
111
+ await mkdir(this.baseDir, { recursive: true });
112
+ const raw = await readFile(this.indexPath(), "utf8");
113
+ const parsed = JSON.parse(raw);
114
+ for (const [sid, fname] of Object.entries(parsed)) {
115
+ this.index.set(sid, fname);
116
+ }
117
+ }
118
+ catch {
119
+ // First run — index doesn't exist yet. Leave map empty.
120
+ }
121
+ finally {
122
+ this.indexLoaded = true;
123
+ }
124
+ })();
125
+ await this.indexFilePromise;
126
+ }
127
+ async persistIndex() {
128
+ const obj = {};
129
+ for (const [sid, fname] of this.index)
130
+ obj[sid] = fname;
131
+ // Atomic-ish: write tmp + rename. Concurrent writers across processes
132
+ // would race; intended for single-process agent use.
133
+ const tmp = `${this.indexPath()}.tmp`;
134
+ await mkdir(this.baseDir, { recursive: true });
135
+ await appendFile(tmp, ""); // truncate via empty append after delete
136
+ await unlink(tmp).catch(() => { });
137
+ const { writeFile, rename } = await import("node:fs/promises");
138
+ await writeFile(tmp, JSON.stringify(obj, null, 2), "utf8");
139
+ await rename(tmp, this.indexPath());
140
+ }
141
+ async pathFor(sessionId) {
142
+ await this.ensureIndex();
143
+ let fname = this.index.get(sessionId);
144
+ if (!fname) {
145
+ fname = this.fileFor(sessionId);
146
+ this.index.set(sessionId, fname);
147
+ await this.persistIndex();
148
+ }
149
+ return join(this.baseDir, fname);
150
+ }
151
+ async append(sessionId, entry) {
152
+ // Serialize against other append/delete calls on this instance so
153
+ // concurrent `Promise.all([store.append(...), store.append(...)])` lands
154
+ // lines in call order with no interleaving at the page boundary.
155
+ await this.serialize(async () => {
156
+ const path = await this.pathFor(sessionId);
157
+ await mkdir(this.baseDir, { recursive: true });
158
+ await appendFile(path, `${JSON.stringify(entry)}\n`, "utf8");
159
+ });
160
+ }
161
+ async exists(sessionId) {
162
+ await this.ensureIndex();
163
+ if (!this.index.has(sessionId))
164
+ return false;
165
+ try {
166
+ await access(join(this.baseDir, this.index.get(sessionId)));
167
+ return true;
168
+ }
169
+ catch {
170
+ return false;
171
+ }
172
+ }
173
+ async read(sessionId) {
174
+ if (!(await this.exists(sessionId)))
175
+ return [];
176
+ const path = await this.pathFor(sessionId);
177
+ const raw = await readFile(path, "utf8");
178
+ const lines = raw.split("\n");
179
+ const out = [];
180
+ for (let i = 0; i < lines.length; i++) {
181
+ const line = lines[i];
182
+ if (!line)
183
+ continue;
184
+ try {
185
+ out.push(JSON.parse(line));
186
+ }
187
+ catch {
188
+ // Skip malformed line. The most common cause is a truncated tail
189
+ // from a crashed write — we don't want restore to fail because of it.
190
+ // Tests assert that this branch is exercised under simulated crash.
191
+ }
192
+ }
193
+ return out;
194
+ }
195
+ async searchMessages(sessionId, query, maxResults) {
196
+ return searchEntries(await this.read(sessionId), query, maxResults);
197
+ }
198
+ async listSessions() {
199
+ await this.ensureIndex();
200
+ return [...this.index.keys()];
201
+ }
202
+ async delete(sessionId) {
203
+ await this.serialize(async () => {
204
+ await this.ensureIndex();
205
+ const fname = this.index.get(sessionId);
206
+ if (!fname)
207
+ return;
208
+ try {
209
+ await unlink(join(this.baseDir, fname));
210
+ }
211
+ catch {
212
+ // Already gone.
213
+ }
214
+ this.index.delete(sessionId);
215
+ await this.persistIndex();
216
+ });
217
+ }
218
+ /** Test helper — list every JSONL file currently on disk. */
219
+ async _debugListFiles() {
220
+ try {
221
+ return (await readdir(this.baseDir)).filter((f) => f.endsWith(".jsonl"));
222
+ }
223
+ catch {
224
+ return [];
225
+ }
226
+ }
227
+ }
228
+ // ── Shared search helper ─────────────────────────────────────
229
+ function searchEntries(entries, query, maxResults) {
230
+ if (!query)
231
+ return [];
232
+ const needle = query.toLowerCase();
233
+ const out = [];
234
+ // Walk in reverse so the most recent matches come first.
235
+ for (let i = entries.length - 1; i >= 0; i--) {
236
+ const entry = entries[i];
237
+ if (entry.kind !== "message")
238
+ continue;
239
+ const content = entry.msg.content ?? "";
240
+ if (typeof content === "string" && content.toLowerCase().includes(needle)) {
241
+ out.push(entry.msg);
242
+ if (out.length >= maxResults)
243
+ break;
244
+ }
245
+ }
246
+ return out;
247
+ }
248
+ //# sourceMappingURL=conversationLogStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversationLogStore.js","sourceRoot":"","sources":["../../src/conversation/conversationLogStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `ConversationMemory` — abstract per-session chat history with a clean
3
+ * extension point for compaction. The basic implementation is an unbounded
4
+ * append-only list (matches the previous chatEngine behavior); the compacting
5
+ * implementation lives in `compactionMemory.ts`.
6
+ *
7
+ * Reuses {@link InferenceMessage} from `runtime/src/types.ts` deliberately —
8
+ * we don't want a parallel `ChatMessage` shape that drifts from the inference
9
+ * call site.
10
+ *
11
+ * @module conversation/conversationMemory
12
+ */
13
+ import type { InferenceMessage } from "../types.js";
14
+ /**
15
+ * A per-session conversation history. Implementations decide whether to grow
16
+ * unbounded ({@link BasicConversationMemory}) or compact at a token threshold
17
+ * ({@link import("./compactionMemory.js").CompactionMemory}).
18
+ *
19
+ * Methods are async to leave room for IO-backed implementations (e.g. a future
20
+ * Postgres-backed memory).
21
+ */
22
+ export interface ConversationMemory {
23
+ /** Append a message. Implementations may choose to compact afterwards. */
24
+ addMessage(msg: InferenceMessage): Promise<void>;
25
+ /** Snapshot of the messages to feed into the next inference call. */
26
+ getContext(): InferenceMessage[];
27
+ /** Drop all messages and reset internal counters. */
28
+ reset(): Promise<void>;
29
+ /** Stable identifier for this session. */
30
+ readonly sessionId: string;
31
+ }
32
+ export interface BasicConversationMemoryOptions {
33
+ /** Override the session id. Defaults to `"__default__"`. */
34
+ sessionId?: string;
35
+ /**
36
+ * Optional message cap. When set, the oldest messages are dropped to keep
37
+ * the array under `maxMessages`. Defaults to undefined (unbounded — matches
38
+ * the old chatEngine semantics for callers that opted out of compaction).
39
+ */
40
+ maxMessages?: number;
41
+ }
42
+ /**
43
+ * Append-only message log with an optional max-message cap. No compaction.
44
+ *
45
+ * Used by callers who want the legacy unbounded history without paying the
46
+ * compaction setup cost (no model name, no `compactFn`, no log store).
47
+ */
48
+ export declare class BasicConversationMemory implements ConversationMemory {
49
+ readonly sessionId: string;
50
+ private readonly maxMessages?;
51
+ private messages;
52
+ constructor(opts?: BasicConversationMemoryOptions);
53
+ addMessage(msg: InferenceMessage): Promise<void>;
54
+ getContext(): InferenceMessage[];
55
+ reset(): Promise<void>;
56
+ /** Test inspection — current message count. */
57
+ get length(): number;
58
+ }
59
+ //# sourceMappingURL=conversationMemory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversationMemory.d.ts","sourceRoot":"","sources":["../../src/conversation/conversationMemory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,qEAAqE;IACrE,UAAU,IAAI,gBAAgB,EAAE,CAAC;IACjC,qDAAqD;IACrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,IAAI,GAAE,8BAAmC;IAK/C,UAAU,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,UAAU,IAAI,gBAAgB,EAAE;IAI1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,+CAA+C;IAC/C,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Append-only message log with an optional max-message cap. No compaction.
3
+ *
4
+ * Used by callers who want the legacy unbounded history without paying the
5
+ * compaction setup cost (no model name, no `compactFn`, no log store).
6
+ */
7
+ export class BasicConversationMemory {
8
+ sessionId;
9
+ maxMessages;
10
+ messages = [];
11
+ constructor(opts = {}) {
12
+ this.sessionId = opts.sessionId ?? "__default__";
13
+ this.maxMessages = opts.maxMessages;
14
+ }
15
+ async addMessage(msg) {
16
+ this.messages.push(msg);
17
+ if (this.maxMessages !== undefined && this.messages.length > this.maxMessages) {
18
+ this.messages.splice(0, this.messages.length - this.maxMessages);
19
+ }
20
+ }
21
+ getContext() {
22
+ return this.messages.slice();
23
+ }
24
+ async reset() {
25
+ this.messages = [];
26
+ }
27
+ /** Test inspection — current message count. */
28
+ get length() {
29
+ return this.messages.length;
30
+ }
31
+ }
32
+ //# sourceMappingURL=conversationMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversationMemory.js","sourceRoot":"","sources":["../../src/conversation/conversationMemory.ts"],"names":[],"mappings":"AA4CA;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IACzB,SAAS,CAAS;IACV,WAAW,CAAU;IAC9B,QAAQ,GAAuB,EAAE,CAAC;IAE1C,YAAY,OAAuC,EAAE;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAqB;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Conversation memory primitives — see `conversationMemory.ts` for the
3
+ * abstraction, `compactionMemory.ts` for the turn-boundary-aware compactor,
4
+ * and `conversationLogStore.ts` for JSONL persistence.
5
+ *
6
+ * @module conversation
7
+ */
8
+ export type { ConversationMemory, BasicConversationMemoryOptions } from "./conversationMemory.js";
9
+ export { BasicConversationMemory } from "./conversationMemory.js";
10
+ export type { ConversationLogStore, LogEntry, LocalConversationLogStoreOptions, } from "./conversationLogStore.js";
11
+ export { InMemoryConversationLogStore, LocalConversationLogStore, } from "./conversationLogStore.js";
12
+ export type { CompactionConfig, CompactionStats, CompactFn, MemoryToolDefinition, } from "./compactionMemory.js";
13
+ export { CompactionMemory } from "./compactionMemory.js";
14
+ export type { ModelThreshold } from "./modelLimits.js";
15
+ export { MODEL_THRESHOLDS, DEFAULT_THRESHOLD, DEFAULT_COMPACTION_SYSTEM_PROMPT, estimateTokens, getModelThreshold, } from "./modelLimits.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,YAAY,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EACV,oBAAoB,EACpB,QAAQ,EACR,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { BasicConversationMemory } from "./conversationMemory.js";
2
+ export { InMemoryConversationLogStore, LocalConversationLogStore, } from "./conversationLogStore.js";
3
+ export { CompactionMemory } from "./compactionMemory.js";
4
+ export { MODEL_THRESHOLDS, DEFAULT_THRESHOLD, DEFAULT_COMPACTION_SYSTEM_PROMPT, estimateTokens, getModelThreshold, } from "./modelLimits.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversation/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMlE,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,gCAAgC,EAChC,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Model-aware compaction thresholds + token estimator.
3
+ *
4
+ * Lifted from `gateway/src/services/sessionCompactor.ts:29-45`. THIS file is now
5
+ * the canonical source. Gateway's copy is currently kept in sync manually; a
6
+ * follow-up PR will switch the gateway to import from `@nookplot/runtime`.
7
+ *
8
+ * The token estimator deliberately matches the gateway's heuristic
9
+ * (`Math.ceil(content.length / 4)`) so both compactors agree on "when to
10
+ * compact" — important so the two layers don't fight each other on the same
11
+ * conversation viewed through different lenses.
12
+ *
13
+ * @module conversation/modelLimits
14
+ */
15
+ import type { InferenceMessage } from "../types.js";
16
+ export interface ModelThreshold {
17
+ /** Estimated token count that triggers compaction. */
18
+ compactAt: number;
19
+ /** Number of recent messages preserved uncompacted. */
20
+ preserveRecent: number;
21
+ }
22
+ /**
23
+ * Per-model compaction thresholds. Add new model IDs here as they become
24
+ * supported on the platform; unknown models fall back to {@link DEFAULT_THRESHOLD}.
25
+ */
26
+ export declare const MODEL_THRESHOLDS: Record<string, ModelThreshold>;
27
+ /** Fallback for any model not listed in {@link MODEL_THRESHOLDS}. */
28
+ export declare const DEFAULT_THRESHOLD: ModelThreshold;
29
+ export declare function getModelThreshold(modelName: string): ModelThreshold;
30
+ /**
31
+ * Default token estimator: ceil(content.length / 4) per message.
32
+ *
33
+ * Matches `gateway/src/services/sessionCompactor.ts:98-100`. Replace via
34
+ * `CompactionConfig.estimateTokens` if you need a tokenizer-accurate count
35
+ * (the heuristic over-counts code-heavy text and under-counts CJK).
36
+ */
37
+ export declare function estimateTokens(messages: InferenceMessage[]): number;
38
+ /**
39
+ * Default system preamble passed to the caller-supplied `compactFn`. Same shape
40
+ * the gateway uses so summaries on either layer have the same structure.
41
+ */
42
+ export declare const DEFAULT_COMPACTION_SYSTEM_PROMPT = "You are a conversation summarizer. Given a conversation history, produce a structured JSON summary that preserves ALL important context.\n\nOutput format (JSON only, no markdown):\n{\n \"activeGoals\": [\"goal 1\", \"goal 2\"],\n \"keyDecisions\": [\"decision 1\"],\n \"pendingActions\": [\"action 1\"],\n \"userPreferences\": [\"preference 1\"],\n \"importantFacts\": [\"fact 1\"],\n \"conversationTone\": \"brief description of the conversation dynamic\"\n}\n\nRules:\n- Include EVERY active goal, pending action, and key decision\n- Be specific \u2014 \"deploy DeFi monitoring agent\" not \"deploy agent\"\n- Drop pleasantries, greetings, and meta-commentary about the conversation\n- If user expressed preferences (model choice, budget, style), capture them\n- Keep each array item under 20 words";
43
+ //# sourceMappingURL=modelLimits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelLimits.d.ts","sourceRoot":"","sources":["../../src/conversation/modelLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAkB3D,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,cAAuD,CAAC;AAExF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAQnE;AAED;;;GAGG;AACH,eAAO,MAAM,gCAAgC,2yBAiBP,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Per-model compaction thresholds. Add new model IDs here as they become
3
+ * supported on the platform; unknown models fall back to {@link DEFAULT_THRESHOLD}.
4
+ */
5
+ export const MODEL_THRESHOLDS = {
6
+ // Small models — compact early, preserve fewer messages
7
+ "hermes3": { compactAt: 4800, preserveRecent: 4 },
8
+ "hermes3:8b": { compactAt: 4800, preserveRecent: 4 },
9
+ "hermes-3-llama-3.1-8b": { compactAt: 4800, preserveRecent: 4 },
10
+ "llama3.2:8b": { compactAt: 4800, preserveRecent: 4 },
11
+ "mistral:7b": { compactAt: 4800, preserveRecent: 4 },
12
+ // Large models — more headroom
13
+ "hermes-3-llama-3.1-405b": { compactAt: 12000, preserveRecent: 8 },
14
+ "llama3.3:70b": { compactAt: 12000, preserveRecent: 8 },
15
+ "qwen3:32b": { compactAt: 10000, preserveRecent: 6 },
16
+ "deepseek-r1:32b": { compactAt: 10000, preserveRecent: 6 },
17
+ // Advisor models — larger context windows
18
+ "claude-3-5-sonnet-20241022": { compactAt: 24000, preserveRecent: 12 },
19
+ "claude-sonnet-4-20250514": { compactAt: 24000, preserveRecent: 12 },
20
+ "claude-opus-4-6": { compactAt: 24000, preserveRecent: 12 },
21
+ "gpt-4o": { compactAt: 24000, preserveRecent: 12 },
22
+ "deepseek-r1:70b": { compactAt: 16000, preserveRecent: 10 },
23
+ };
24
+ /** Fallback for any model not listed in {@link MODEL_THRESHOLDS}. */
25
+ export const DEFAULT_THRESHOLD = { compactAt: 6000, preserveRecent: 6 };
26
+ export function getModelThreshold(modelName) {
27
+ return MODEL_THRESHOLDS[modelName] ?? DEFAULT_THRESHOLD;
28
+ }
29
+ /**
30
+ * Default token estimator: ceil(content.length / 4) per message.
31
+ *
32
+ * Matches `gateway/src/services/sessionCompactor.ts:98-100`. Replace via
33
+ * `CompactionConfig.estimateTokens` if you need a tokenizer-accurate count
34
+ * (the heuristic over-counts code-heavy text and under-counts CJK).
35
+ */
36
+ export function estimateTokens(messages) {
37
+ let total = 0;
38
+ for (const m of messages) {
39
+ if (typeof m.content === "string") {
40
+ total += Math.ceil(m.content.length / 4);
41
+ }
42
+ }
43
+ return total;
44
+ }
45
+ /**
46
+ * Default system preamble passed to the caller-supplied `compactFn`. Same shape
47
+ * the gateway uses so summaries on either layer have the same structure.
48
+ */
49
+ export const DEFAULT_COMPACTION_SYSTEM_PROMPT = `You are a conversation summarizer. Given a conversation history, produce a structured JSON summary that preserves ALL important context.
50
+
51
+ Output format (JSON only, no markdown):
52
+ {
53
+ "activeGoals": ["goal 1", "goal 2"],
54
+ "keyDecisions": ["decision 1"],
55
+ "pendingActions": ["action 1"],
56
+ "userPreferences": ["preference 1"],
57
+ "importantFacts": ["fact 1"],
58
+ "conversationTone": "brief description of the conversation dynamic"
59
+ }
60
+
61
+ Rules:
62
+ - Include EVERY active goal, pending action, and key decision
63
+ - Be specific — "deploy DeFi monitoring agent" not "deploy agent"
64
+ - Drop pleasantries, greetings, and meta-commentary about the conversation
65
+ - If user expressed preferences (model choice, budget, style), capture them
66
+ - Keep each array item under 20 words`;
67
+ //# sourceMappingURL=modelLimits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelLimits.js","sourceRoot":"","sources":["../../src/conversation/modelLimits.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,wDAAwD;IACxD,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;IACjD,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;IACpD,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;IAC/D,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;IACrD,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;IACpD,+BAA+B;IAC/B,yBAAyB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;IAClE,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;IACvD,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;IACpD,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;IAC1D,0CAA0C;IAC1C,4BAA4B,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;IACtE,0BAA0B,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;IACpE,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;IAC3D,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;IAClD,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;CAC5D,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAExF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAA4B;IACzD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;sCAiBV,CAAC"}