@botbotgo/runtime 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/.github/workflows/ci.yml +46 -0
  2. package/.github/workflows/release.yml +79 -0
  3. package/README.md +71 -0
  4. package/config/examples/memory.yaml +39 -0
  5. package/config/examples/model.yaml +21 -0
  6. package/config/examples/runtime.yaml +44 -0
  7. package/config/examples/skills.yaml +8 -0
  8. package/config/examples/tool.yaml +16 -0
  9. package/dist/config/index.d.ts +7 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +4 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/loader.d.ts +41 -0
  14. package/dist/config/loader.d.ts.map +1 -0
  15. package/dist/config/loader.js +140 -0
  16. package/dist/config/loader.js.map +1 -0
  17. package/dist/config/resolveRuntimeConfig.d.ts +83 -0
  18. package/dist/config/resolveRuntimeConfig.d.ts.map +1 -0
  19. package/dist/config/resolveRuntimeConfig.js +85 -0
  20. package/dist/config/resolveRuntimeConfig.js.map +1 -0
  21. package/dist/config/resources.d.ts +112 -0
  22. package/dist/config/resources.d.ts.map +1 -0
  23. package/dist/config/resources.js +20 -0
  24. package/dist/config/resources.js.map +1 -0
  25. package/dist/config/runtimeConfigLoader.d.ts +28 -0
  26. package/dist/config/runtimeConfigLoader.d.ts.map +1 -0
  27. package/dist/config/runtimeConfigLoader.js +38 -0
  28. package/dist/config/runtimeConfigLoader.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +5 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/runtime/agentMiddleware.d.ts +3 -0
  34. package/dist/runtime/agentMiddleware.d.ts.map +1 -0
  35. package/dist/runtime/agentMiddleware.js +2 -0
  36. package/dist/runtime/agentMiddleware.js.map +1 -0
  37. package/dist/runtime/bootstrap/runtimeFactory.d.ts +7 -0
  38. package/dist/runtime/bootstrap/runtimeFactory.d.ts.map +1 -0
  39. package/dist/runtime/bootstrap/runtimeFactory.js +139 -0
  40. package/dist/runtime/bootstrap/runtimeFactory.js.map +1 -0
  41. package/dist/runtime/bootstrap/runtimeModuleInitializer.d.ts +5 -0
  42. package/dist/runtime/bootstrap/runtimeModuleInitializer.d.ts.map +1 -0
  43. package/dist/runtime/bootstrap/runtimeModuleInitializer.js +32 -0
  44. package/dist/runtime/bootstrap/runtimeModuleInitializer.js.map +1 -0
  45. package/dist/runtime/context/agentContext.d.ts +5 -0
  46. package/dist/runtime/context/agentContext.d.ts.map +1 -0
  47. package/dist/runtime/context/agentContext.js +19 -0
  48. package/dist/runtime/context/agentContext.js.map +1 -0
  49. package/dist/runtime/context/globalContext.d.ts +19 -0
  50. package/dist/runtime/context/globalContext.d.ts.map +1 -0
  51. package/dist/runtime/context/globalContext.js +47 -0
  52. package/dist/runtime/context/globalContext.js.map +1 -0
  53. package/dist/runtime/events/eventPublisher.d.ts +15 -0
  54. package/dist/runtime/events/eventPublisher.d.ts.map +1 -0
  55. package/dist/runtime/events/eventPublisher.js +23 -0
  56. package/dist/runtime/events/eventPublisher.js.map +1 -0
  57. package/dist/runtime/execution/agentRunExecutor.d.ts +38 -0
  58. package/dist/runtime/execution/agentRunExecutor.d.ts.map +1 -0
  59. package/dist/runtime/execution/agentRunExecutor.js +378 -0
  60. package/dist/runtime/execution/agentRunExecutor.js.map +1 -0
  61. package/dist/runtime/execution/agentRunExecutor.types.d.ts +37 -0
  62. package/dist/runtime/execution/agentRunExecutor.types.d.ts.map +1 -0
  63. package/dist/runtime/execution/agentRunExecutor.types.js +2 -0
  64. package/dist/runtime/execution/agentRunExecutor.types.js.map +1 -0
  65. package/dist/runtime/execution/agentRunProgress.d.ts +8 -0
  66. package/dist/runtime/execution/agentRunProgress.d.ts.map +1 -0
  67. package/dist/runtime/execution/agentRunProgress.js +46 -0
  68. package/dist/runtime/execution/agentRunProgress.js.map +1 -0
  69. package/dist/runtime/execution/agentRunState.d.ts +44 -0
  70. package/dist/runtime/execution/agentRunState.d.ts.map +1 -0
  71. package/dist/runtime/execution/agentRunState.js +17 -0
  72. package/dist/runtime/execution/agentRunState.js.map +1 -0
  73. package/dist/runtime/execution/policies/runCompletionPolicy.d.ts +5 -0
  74. package/dist/runtime/execution/policies/runCompletionPolicy.d.ts.map +1 -0
  75. package/dist/runtime/execution/policies/runCompletionPolicy.js +30 -0
  76. package/dist/runtime/execution/policies/runCompletionPolicy.js.map +1 -0
  77. package/dist/runtime/execution/policies/runErrorPolicy.d.ts +7 -0
  78. package/dist/runtime/execution/policies/runErrorPolicy.d.ts.map +1 -0
  79. package/dist/runtime/execution/policies/runErrorPolicy.js +40 -0
  80. package/dist/runtime/execution/policies/runErrorPolicy.js.map +1 -0
  81. package/dist/runtime/execution/policies/runPromptBuilder.d.ts +10 -0
  82. package/dist/runtime/execution/policies/runPromptBuilder.d.ts.map +1 -0
  83. package/dist/runtime/execution/policies/runPromptBuilder.js +34 -0
  84. package/dist/runtime/execution/policies/runPromptBuilder.js.map +1 -0
  85. package/dist/runtime/execution/policies/runSummaryFormatter.d.ts +6 -0
  86. package/dist/runtime/execution/policies/runSummaryFormatter.d.ts.map +1 -0
  87. package/dist/runtime/execution/policies/runSummaryFormatter.js +47 -0
  88. package/dist/runtime/execution/policies/runSummaryFormatter.js.map +1 -0
  89. package/dist/runtime/execution/policies/runtimeDelay.d.ts +4 -0
  90. package/dist/runtime/execution/policies/runtimeDelay.d.ts.map +1 -0
  91. package/dist/runtime/execution/policies/runtimeDelay.js +6 -0
  92. package/dist/runtime/execution/policies/runtimeDelay.js.map +1 -0
  93. package/dist/runtime/execution/policies/toolConfigReader.d.ts +8 -0
  94. package/dist/runtime/execution/policies/toolConfigReader.d.ts.map +1 -0
  95. package/dist/runtime/execution/policies/toolConfigReader.js +91 -0
  96. package/dist/runtime/execution/policies/toolConfigReader.js.map +1 -0
  97. package/dist/runtime/human-loop/consoleHumanLoop.d.ts +21 -0
  98. package/dist/runtime/human-loop/consoleHumanLoop.d.ts.map +1 -0
  99. package/dist/runtime/human-loop/consoleHumanLoop.js +102 -0
  100. package/dist/runtime/human-loop/consoleHumanLoop.js.map +1 -0
  101. package/dist/runtime/human-loop/humanLoop.d.ts +44 -0
  102. package/dist/runtime/human-loop/humanLoop.d.ts.map +1 -0
  103. package/dist/runtime/human-loop/humanLoop.js +36 -0
  104. package/dist/runtime/human-loop/humanLoop.js.map +1 -0
  105. package/dist/runtime/index.d.ts +10 -0
  106. package/dist/runtime/index.d.ts.map +1 -0
  107. package/dist/runtime/index.js +6 -0
  108. package/dist/runtime/index.js.map +1 -0
  109. package/dist/runtime/middleware/agentToolMiddleware.d.ts +30 -0
  110. package/dist/runtime/middleware/agentToolMiddleware.d.ts.map +1 -0
  111. package/dist/runtime/middleware/agentToolMiddleware.js +259 -0
  112. package/dist/runtime/middleware/agentToolMiddleware.js.map +1 -0
  113. package/dist/runtime/middleware/commandPolicy.d.ts +8 -0
  114. package/dist/runtime/middleware/commandPolicy.d.ts.map +1 -0
  115. package/dist/runtime/middleware/commandPolicy.js +55 -0
  116. package/dist/runtime/middleware/commandPolicy.js.map +1 -0
  117. package/dist/runtime/middleware/frameworkPrompt.d.ts +4 -0
  118. package/dist/runtime/middleware/frameworkPrompt.d.ts.map +1 -0
  119. package/dist/runtime/middleware/frameworkPrompt.js +44 -0
  120. package/dist/runtime/middleware/frameworkPrompt.js.map +1 -0
  121. package/dist/runtime/middleware/index.d.ts +4 -0
  122. package/dist/runtime/middleware/index.d.ts.map +1 -0
  123. package/dist/runtime/middleware/index.js +3 -0
  124. package/dist/runtime/middleware/index.js.map +1 -0
  125. package/dist/runtime/middleware/skillPathMap.d.ts +3 -0
  126. package/dist/runtime/middleware/skillPathMap.d.ts.map +1 -0
  127. package/dist/runtime/middleware/skillPathMap.js +44 -0
  128. package/dist/runtime/middleware/skillPathMap.js.map +1 -0
  129. package/dist/runtime/middleware/toolArgsNormalizer.d.ts +21 -0
  130. package/dist/runtime/middleware/toolArgsNormalizer.d.ts.map +1 -0
  131. package/dist/runtime/middleware/toolArgsNormalizer.js +227 -0
  132. package/dist/runtime/middleware/toolArgsNormalizer.js.map +1 -0
  133. package/dist/runtime/middleware/toolCallGuard.d.ts +8 -0
  134. package/dist/runtime/middleware/toolCallGuard.d.ts.map +1 -0
  135. package/dist/runtime/middleware/toolCallGuard.js +60 -0
  136. package/dist/runtime/middleware/toolCallGuard.js.map +1 -0
  137. package/dist/runtime/middleware/toolFsHandlers.d.ts +12 -0
  138. package/dist/runtime/middleware/toolFsHandlers.d.ts.map +1 -0
  139. package/dist/runtime/middleware/toolFsHandlers.js +79 -0
  140. package/dist/runtime/middleware/toolFsHandlers.js.map +1 -0
  141. package/dist/runtime/middleware/toolRequestParser.d.ts +14 -0
  142. package/dist/runtime/middleware/toolRequestParser.d.ts.map +1 -0
  143. package/dist/runtime/middleware/toolRequestParser.js +72 -0
  144. package/dist/runtime/middleware/toolRequestParser.js.map +1 -0
  145. package/dist/runtime/middleware/types.d.ts +87 -0
  146. package/dist/runtime/middleware/types.d.ts.map +1 -0
  147. package/dist/runtime/middleware/types.js +3 -0
  148. package/dist/runtime/middleware/types.js.map +1 -0
  149. package/dist/runtime/providers/backendResolver.d.ts +26 -0
  150. package/dist/runtime/providers/backendResolver.d.ts.map +1 -0
  151. package/dist/runtime/providers/backendResolver.js +73 -0
  152. package/dist/runtime/providers/backendResolver.js.map +1 -0
  153. package/dist/runtime/providers/index.d.ts +14 -0
  154. package/dist/runtime/providers/index.d.ts.map +1 -0
  155. package/dist/runtime/providers/index.js +10 -0
  156. package/dist/runtime/providers/index.js.map +1 -0
  157. package/dist/runtime/providers/langchainRuntime.d.ts +11 -0
  158. package/dist/runtime/providers/langchainRuntime.d.ts.map +1 -0
  159. package/dist/runtime/providers/langchainRuntime.js +45 -0
  160. package/dist/runtime/providers/langchainRuntime.js.map +1 -0
  161. package/dist/runtime/providers/localShellBackend.d.ts +10 -0
  162. package/dist/runtime/providers/localShellBackend.d.ts.map +1 -0
  163. package/dist/runtime/providers/localShellBackend.js +23 -0
  164. package/dist/runtime/providers/localShellBackend.js.map +1 -0
  165. package/dist/runtime/providers/openaiDeepAgent.d.ts +9 -0
  166. package/dist/runtime/providers/openaiDeepAgent.d.ts.map +1 -0
  167. package/dist/runtime/providers/openaiDeepAgent.js +7 -0
  168. package/dist/runtime/providers/openaiDeepAgent.js.map +1 -0
  169. package/dist/runtime/providers/openaiLocalAgent.d.ts +17 -0
  170. package/dist/runtime/providers/openaiLocalAgent.d.ts.map +1 -0
  171. package/dist/runtime/providers/openaiLocalAgent.js +26 -0
  172. package/dist/runtime/providers/openaiLocalAgent.js.map +1 -0
  173. package/dist/runtime/providers/openaiLocalAgentFactory.d.ts +36 -0
  174. package/dist/runtime/providers/openaiLocalAgentFactory.d.ts.map +1 -0
  175. package/dist/runtime/providers/openaiLocalAgentFactory.js +139 -0
  176. package/dist/runtime/providers/openaiLocalAgentFactory.js.map +1 -0
  177. package/dist/runtime/providers/shared/agentProbe.d.ts +4 -0
  178. package/dist/runtime/providers/shared/agentProbe.d.ts.map +1 -0
  179. package/dist/runtime/providers/shared/agentProbe.js +17 -0
  180. package/dist/runtime/providers/shared/agentProbe.js.map +1 -0
  181. package/dist/runtime/providers/shared/moduleFallback.d.ts +2 -0
  182. package/dist/runtime/providers/shared/moduleFallback.d.ts.map +1 -0
  183. package/dist/runtime/providers/shared/moduleFallback.js +34 -0
  184. package/dist/runtime/providers/shared/moduleFallback.js.map +1 -0
  185. package/dist/runtime/providers/shared/resourceCloser.d.ts +6 -0
  186. package/dist/runtime/providers/shared/resourceCloser.d.ts.map +1 -0
  187. package/dist/runtime/providers/shared/resourceCloser.js +30 -0
  188. package/dist/runtime/providers/shared/resourceCloser.js.map +1 -0
  189. package/dist/runtime/runtimeService.d.ts +109 -0
  190. package/dist/runtime/runtimeService.d.ts.map +1 -0
  191. package/dist/runtime/runtimeService.js +90 -0
  192. package/dist/runtime/runtimeService.js.map +1 -0
  193. package/dist/runtime/stream/agentMessages.d.ts +40 -0
  194. package/dist/runtime/stream/agentMessages.d.ts.map +1 -0
  195. package/dist/runtime/stream/agentMessages.js +44 -0
  196. package/dist/runtime/stream/agentMessages.js.map +1 -0
  197. package/dist/runtime/stream/agentStream.d.ts +31 -0
  198. package/dist/runtime/stream/agentStream.d.ts.map +1 -0
  199. package/dist/runtime/stream/agentStream.js +106 -0
  200. package/dist/runtime/stream/agentStream.js.map +1 -0
  201. package/dist/runtime/stream/messageSummary.d.ts +20 -0
  202. package/dist/runtime/stream/messageSummary.d.ts.map +1 -0
  203. package/dist/runtime/stream/messageSummary.js +150 -0
  204. package/dist/runtime/stream/messageSummary.js.map +1 -0
  205. package/dist/runtime/stream/runArtifacts.d.ts +9 -0
  206. package/dist/runtime/stream/runArtifacts.d.ts.map +1 -0
  207. package/dist/runtime/stream/runArtifacts.js +48 -0
  208. package/dist/runtime/stream/runArtifacts.js.map +1 -0
  209. package/dist/state/index.d.ts +7 -0
  210. package/dist/state/index.d.ts.map +1 -0
  211. package/dist/state/index.js +4 -0
  212. package/dist/state/index.js.map +1 -0
  213. package/dist/state/runState.d.ts +36 -0
  214. package/dist/state/runState.d.ts.map +1 -0
  215. package/dist/state/runState.js +51 -0
  216. package/dist/state/runState.js.map +1 -0
  217. package/dist/state/todos.d.ts +19 -0
  218. package/dist/state/todos.d.ts.map +1 -0
  219. package/dist/state/todos.js +45 -0
  220. package/dist/state/todos.js.map +1 -0
  221. package/dist/state/workspaceRunSession.d.ts +32 -0
  222. package/dist/state/workspaceRunSession.d.ts.map +1 -0
  223. package/dist/state/workspaceRunSession.js +67 -0
  224. package/dist/state/workspaceRunSession.js.map +1 -0
  225. package/dist/state/workspaceState.d.ts +94 -0
  226. package/dist/state/workspaceState.d.ts.map +1 -0
  227. package/dist/state/workspaceState.js +119 -0
  228. package/dist/state/workspaceState.js.map +1 -0
  229. package/dist/types.d.ts +2 -0
  230. package/dist/types.d.ts.map +1 -0
  231. package/dist/types.js +2 -0
  232. package/dist/types.js.map +1 -0
  233. package/example/.tsbuildinfo +1 -0
  234. package/example/build/.tsbuildinfo +1 -0
  235. package/example/config/memory.yaml +35 -0
  236. package/example/config/model.yaml +14 -0
  237. package/example/config/runtime.yaml +46 -0
  238. package/example/config/tool.yaml +24 -0
  239. package/example/index.ts +159 -0
  240. package/example/package-lock.json +1396 -0
  241. package/example/package.json +26 -0
  242. package/example/serve-output.mjs +52 -0
  243. package/example/tsconfig.json +19 -0
  244. package/package.json +73 -0
  245. package/scripts/resolve-deps.js +40 -0
  246. package/src/config/index.ts +29 -0
  247. package/src/config/loader.ts +174 -0
  248. package/src/config/resolveRuntimeConfig.ts +160 -0
  249. package/src/config/resources.ts +152 -0
  250. package/src/config/runtimeConfigLoader.ts +68 -0
  251. package/src/external-modules.d.ts +20 -0
  252. package/src/index.ts +36 -0
  253. package/src/runtime/agentMiddleware.ts +6 -0
  254. package/src/runtime/bootstrap/runtimeFactory.ts +212 -0
  255. package/src/runtime/bootstrap/runtimeModuleInitializer.ts +34 -0
  256. package/src/runtime/context/agentContext.ts +24 -0
  257. package/src/runtime/context/globalContext.ts +70 -0
  258. package/src/runtime/events/eventPublisher.ts +45 -0
  259. package/src/runtime/execution/agentRunExecutor.ts +499 -0
  260. package/src/runtime/execution/agentRunExecutor.types.ts +39 -0
  261. package/src/runtime/execution/agentRunProgress.ts +67 -0
  262. package/src/runtime/execution/agentRunState.ts +66 -0
  263. package/src/runtime/execution/policies/runCompletionPolicy.ts +30 -0
  264. package/src/runtime/execution/policies/runErrorPolicy.ts +50 -0
  265. package/src/runtime/execution/policies/runPromptBuilder.ts +39 -0
  266. package/src/runtime/execution/policies/runSummaryFormatter.ts +57 -0
  267. package/src/runtime/execution/policies/runtimeDelay.ts +5 -0
  268. package/src/runtime/execution/policies/toolConfigReader.ts +107 -0
  269. package/src/runtime/human-loop/consoleHumanLoop.ts +113 -0
  270. package/src/runtime/human-loop/humanLoop.ts +90 -0
  271. package/src/runtime/index.ts +36 -0
  272. package/src/runtime/middleware/agentToolMiddleware.ts +329 -0
  273. package/src/runtime/middleware/commandPolicy.ts +65 -0
  274. package/src/runtime/middleware/frameworkPrompt.ts +51 -0
  275. package/src/runtime/middleware/index.ts +7 -0
  276. package/src/runtime/middleware/skillPathMap.ts +49 -0
  277. package/src/runtime/middleware/toolArgsNormalizer.ts +277 -0
  278. package/src/runtime/middleware/toolCallGuard.ts +73 -0
  279. package/src/runtime/middleware/toolFsHandlers.ts +94 -0
  280. package/src/runtime/middleware/toolRequestParser.ts +84 -0
  281. package/src/runtime/middleware/types.ts +91 -0
  282. package/src/runtime/providers/backendResolver.ts +127 -0
  283. package/src/runtime/providers/index.ts +19 -0
  284. package/src/runtime/providers/langchainRuntime.ts +67 -0
  285. package/src/runtime/providers/localShellBackend.ts +54 -0
  286. package/src/runtime/providers/openaiDeepAgent.ts +17 -0
  287. package/src/runtime/providers/openaiLocalAgent.ts +35 -0
  288. package/src/runtime/providers/openaiLocalAgentFactory.ts +185 -0
  289. package/src/runtime/providers/shared/agentProbe.ts +24 -0
  290. package/src/runtime/providers/shared/moduleFallback.ts +41 -0
  291. package/src/runtime/providers/shared/resourceCloser.ts +30 -0
  292. package/src/runtime/runtimeService.ts +205 -0
  293. package/src/runtime/stream/agentMessages.ts +72 -0
  294. package/src/runtime/stream/agentStream.ts +168 -0
  295. package/src/runtime/stream/messageSummary.ts +164 -0
  296. package/src/runtime/stream/runArtifacts.ts +72 -0
  297. package/src/state/index.ts +19 -0
  298. package/src/state/runState.ts +84 -0
  299. package/src/state/todos.ts +59 -0
  300. package/src/state/workspaceRunSession.ts +96 -0
  301. package/src/state/workspaceState.ts +199 -0
  302. package/src/types/easynet-agent-common.d.ts +62 -0
  303. package/src/types.ts +1 -0
  304. package/test/integration/runtime-live.integration.test.ts +30 -0
  305. package/test/unit/config/loader.test.ts +429 -0
  306. package/test/unit/runtime/agentContext.test.ts +23 -0
  307. package/test/unit/runtime/agentRuntime.test.ts +99 -0
  308. package/test/unit/runtime/consoleHumanLoop.test.ts +52 -0
  309. package/test/unit/runtime/events.test.ts +11 -0
  310. package/test/unit/runtime/globalContext.test.ts +34 -0
  311. package/test/unit/runtime/humanLoop.test.ts +104 -0
  312. package/test/unit/runtime/toolArgsNormalizer.test.ts +136 -0
  313. package/tsconfig.json +18 -0
@@ -0,0 +1,150 @@
1
+ export class MessageSummary {
2
+ static looksLikeStartPrompt(message) {
3
+ const content = typeof message?.content === "string" ? message.content : "";
4
+ if (String(message?.role) !== "user" && String(message?.role) !== "human") {
5
+ return false;
6
+ }
7
+ return content.includes("Tool-call rules:") || content.includes("Continue in the current thread");
8
+ }
9
+ static summarizeToolCall(toolCalls, config) {
10
+ const labels = toolCalls.map((tool) => this.describeToolCall(tool));
11
+ if (labels.every((label) => label === "update todo list")) {
12
+ return null;
13
+ }
14
+ return labels.length === 1
15
+ ? `${config.toolCallLabel}: ${labels[0]}`
16
+ : `${config.toolCallLabel}: ${labels.join(", ")}`;
17
+ }
18
+ static summarizeToolResult(content, config) {
19
+ if (typeof content !== "string" || !content.trim()) {
20
+ return `${config.toolResultLabel} (empty)`;
21
+ }
22
+ const text = this.sanitizePreview(content);
23
+ if (text.startsWith("Successfully wrote to")) {
24
+ return `Saved file${this.extractQuotedPath(text) ? ` to ${this.extractQuotedPath(text)}` : ""}`;
25
+ }
26
+ if (text.includes("Too Many Requests"))
27
+ return "Rate limited, continuing";
28
+ if (text.includes("Updated todo list to"))
29
+ return null;
30
+ if (this.looksLikeFileListing(text))
31
+ return "Checked workspace files";
32
+ if (text.startsWith("Usage:"))
33
+ return "Command returned a usage error";
34
+ if (text.startsWith("OK:"))
35
+ return "Command reported success";
36
+ if (text.includes("[Command succeeded"))
37
+ return "Command completed";
38
+ const preview = text.slice(0, config.textPreviewLength);
39
+ return `${config.toolResultLabel}: ${preview}${text.length > config.textPreviewLength ? "…" : ""}`;
40
+ }
41
+ static summarizeContextualMessage(content, previous) {
42
+ const text = this.sanitizePreview(content);
43
+ if (!text || text.includes("Updated todo list to") || this.looksLikeInternalPlanning(text)) {
44
+ return null;
45
+ }
46
+ if (text.startsWith("✅"))
47
+ return "Run completed";
48
+ if (text.startsWith("Successfully wrote to")) {
49
+ return `Saved file${this.extractQuotedPath(text) ? ` to ${this.extractQuotedPath(text)}` : ""}`;
50
+ }
51
+ if (text.includes("Too Many Requests"))
52
+ return "Rate limited, continuing";
53
+ if (this.looksLikeFileListing(text))
54
+ return "Checked workspace files";
55
+ if (text.startsWith("<!-- <!DOCTYPE HTML") || text.startsWith("<!DOCTYPE HTML") || text.startsWith("<html")) {
56
+ return "Reviewed generated content";
57
+ }
58
+ if (this.looksLikeSkillFrontMatter(content))
59
+ return "Loaded instructions";
60
+ if (text.startsWith("OK:"))
61
+ return "Command reported success";
62
+ if (this.isToolMessage(previous) && this.looksLikeFileDump(content))
63
+ return "Reviewed file contents";
64
+ return null;
65
+ }
66
+ static describeToolCall(tool) {
67
+ const name = tool?.name ?? tool?.function?.name ?? "?";
68
+ const normalizedName = this.humanizeToolName(name);
69
+ const args = this.normalizeToolCallArgs(tool);
70
+ if ((name === "read_file" || name === "write_file" || name === "edit_file") && typeof args.file_path === "string") {
71
+ return `${normalizedName} ${this.formatPath(args.file_path)}`;
72
+ }
73
+ if ((name === "read_file" || name === "write_file" || name === "edit_file") && typeof args.path === "string") {
74
+ return `${normalizedName} ${this.formatPath(args.path)}`;
75
+ }
76
+ if (name === "execute" && typeof args.command === "string") {
77
+ return `${normalizedName} ${this.truncateText(args.command, 72)}`;
78
+ }
79
+ return name === "write_todos" ? "update todo list" : normalizedName;
80
+ }
81
+ static normalizeToolCallArgs(tool) {
82
+ const directArgs = tool?.args;
83
+ if (directArgs && typeof directArgs === "object") {
84
+ return directArgs;
85
+ }
86
+ const rawArguments = tool?.function?.arguments;
87
+ if (typeof rawArguments === "string") {
88
+ try {
89
+ const parsed = JSON.parse(rawArguments);
90
+ if (parsed && typeof parsed === "object") {
91
+ return parsed;
92
+ }
93
+ }
94
+ catch { }
95
+ }
96
+ else if (rawArguments && typeof rawArguments === "object") {
97
+ return rawArguments;
98
+ }
99
+ return {};
100
+ }
101
+ static sanitizePreview(content) {
102
+ return content.replace(/\s+/g, " ").trim();
103
+ }
104
+ static humanizeToolName(name) {
105
+ switch (name) {
106
+ case "read_file": return "read file";
107
+ case "write_file": return "write file";
108
+ case "edit_file": return "edit file";
109
+ case "write_todos": return "update todo list";
110
+ case "ls": return "inspect files";
111
+ default: return name.replace(/_/g, " ");
112
+ }
113
+ }
114
+ static extractQuotedPath(text) {
115
+ const match = text.match(/'([^']+)'/);
116
+ return match?.[1] ? this.formatPath(match[1]) : null;
117
+ }
118
+ static truncateText(text, maxLength) {
119
+ return text.length > maxLength ? `${text.slice(0, maxLength - 1)}...` : text;
120
+ }
121
+ static formatPath(path) {
122
+ const normalized = path.replace(/\\/g, "/");
123
+ for (const marker of ["/skills/", "/output/", "/config/", "/.agent/"]) {
124
+ const index = normalized.indexOf(marker);
125
+ if (index >= 0)
126
+ return normalized.slice(index + 1);
127
+ }
128
+ const segments = normalized.split("/").filter(Boolean);
129
+ return segments.length <= 3 ? normalized : segments.slice(-3).join("/");
130
+ }
131
+ static looksLikeFileListing(text) {
132
+ return text.includes("\n[file]") || text.includes("\n... truncated ") || /^[./\w-]+\n[\w./@-]+/m.test(text);
133
+ }
134
+ static looksLikeInternalPlanning(text) {
135
+ return text.startsWith("<think") || text.includes("I should") || text.includes("I'll ");
136
+ }
137
+ static looksLikeSkillFrontMatter(content) {
138
+ return content.includes("## Skills") || content.includes("### Available skills");
139
+ }
140
+ static isToolMessage(message) {
141
+ if (!message)
142
+ return false;
143
+ const idStr = Array.isArray(message.id) ? message.id.join(" ") : String(message.id ?? "");
144
+ return String(message.role) === "tool" || String(message.type).includes("Tool") || idStr.includes("ToolMessage");
145
+ }
146
+ static looksLikeFileDump(content) {
147
+ return content.includes("\n") && !content.includes("Tool-call rules:") && !content.startsWith("{\"messages\"");
148
+ }
149
+ }
150
+ //# sourceMappingURL=messageSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageSummary.js","sourceRoot":"","sources":["../../../src/runtime/stream/messageSummary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class RunArtifactService {
2
+ static inferPromptArtifactPaths(prompt: string): string[];
3
+ static resolveTrackedArtifactFiles(rootDir: string, artifactFiles: Record<string, string>, prompt: string): string[];
4
+ static buildTrackedPaths(rootDir: string, runStateFile: string, todosFile: string, trackedArtifactFiles: string[]): string[];
5
+ static resetTrackedArtifactsForFreshRun(previousStatus: string | undefined, trackedArtifactFiles: string[]): Promise<void>;
6
+ static areArtifactsUsable(trackedArtifactFiles: string[]): boolean;
7
+ private static isArtifactUsable;
8
+ }
9
+ //# sourceMappingURL=runArtifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runArtifacts.d.ts","sourceRoot":"","sources":["../../../src/runtime/stream/runArtifacts.ts"],"names":[],"mappings":"AAIA,qBAAa,kBAAkB;WACf,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;WAKlD,2BAA2B,CACvC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,MAAM,EAAE,MAAM,GACb,MAAM,EAAE;WASG,iBAAiB,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,MAAM,EAAE,GAC7B,MAAM,EAAE;WAMS,gCAAgC,CAClD,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC;WAYF,kBAAkB,CAAC,oBAAoB,EAAE,MAAM,EAAE,GAAG,OAAO;IAKzE,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAiBhC"}
@@ -0,0 +1,48 @@
1
+ import { existsSync, readFileSync, statSync } from "node:fs";
2
+ import { unlink } from "node:fs/promises";
3
+ import { relative, resolve } from "node:path";
4
+ export class RunArtifactService {
5
+ static inferPromptArtifactPaths(prompt) {
6
+ const matches = [...prompt.matchAll(/\b(?:save(?: it)? to|write to)\s+([^\s"'`]+?\.[a-z0-9]+)/gi)];
7
+ return matches.map((match) => match[1]).filter(Boolean);
8
+ }
9
+ static resolveTrackedArtifactFiles(rootDir, artifactFiles, prompt) {
10
+ const configuredArtifacts = Object.values(artifactFiles);
11
+ if (configuredArtifacts.length > 0) {
12
+ return configuredArtifacts;
13
+ }
14
+ return RunArtifactService.inferPromptArtifactPaths(prompt).map((file) => resolve(rootDir, file));
15
+ }
16
+ static buildTrackedPaths(rootDir, runStateFile, todosFile, trackedArtifactFiles) {
17
+ return [runStateFile, todosFile, ...trackedArtifactFiles]
18
+ .map((file) => relative(rootDir, file))
19
+ .filter(Boolean);
20
+ }
21
+ static async resetTrackedArtifactsForFreshRun(previousStatus, trackedArtifactFiles) {
22
+ if (previousStatus === "running") {
23
+ return;
24
+ }
25
+ await Promise.all(trackedArtifactFiles
26
+ .filter((file) => existsSync(file))
27
+ .map((file) => unlink(file).catch(() => { })));
28
+ }
29
+ static areArtifactsUsable(trackedArtifactFiles) {
30
+ return trackedArtifactFiles.length === 0 ||
31
+ trackedArtifactFiles.every((file) => RunArtifactService.isArtifactUsable(file));
32
+ }
33
+ static isArtifactUsable(filePath) {
34
+ if (!existsSync(filePath)) {
35
+ return false;
36
+ }
37
+ const stat = statSync(filePath, { throwIfNoEntry: false });
38
+ if (!stat || !stat.isFile() || stat.size <= 0) {
39
+ return false;
40
+ }
41
+ if (!/\.html?$/i.test(filePath)) {
42
+ return true;
43
+ }
44
+ const text = readFileSync(filePath, "utf8").trim().toLowerCase();
45
+ return text.includes("<html") || text.includes("<!doctype html");
46
+ }
47
+ }
48
+ //# sourceMappingURL=runArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runArtifacts.js","sourceRoot":"","sources":["../../../src/runtime/stream/runArtifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { createTodoPersister, normalizeTodos, TodoPersister } from "./todos.js";
2
+ export type { CreateTodoPersisterOptions, NormalizedTodo, } from "./todos.js";
3
+ export { createAgentRunStateStore, AgentRunStateStore } from "./runState.js";
4
+ export type { AgentRunState, AgentRunStatus, CreateAgentRunStateStoreOptions, UpdateAgentRunStateOptions, } from "./runState.js";
5
+ export { createAgentWorkspaceState, AgentWorkspaceStateManager } from "./workspaceState.js";
6
+ export type { CreateAgentWorkspaceStateOptions, AgentWorkspaceState, } from "./workspaceState.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChF,YAAY,EACV,0BAA0B,EAC1B,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7E,YAAY,EACV,aAAa,EACb,cAAc,EACd,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EACV,gCAAgC,EAChC,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createTodoPersister, normalizeTodos, TodoPersister } from "./todos.js";
2
+ export { createAgentRunStateStore, AgentRunStateStore } from "./runState.js";
3
+ export { createAgentWorkspaceState, AgentWorkspaceStateManager } from "./workspaceState.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhF,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAQ7E,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,36 @@
1
+ export type AgentRunStatus = "running" | "completed" | "failed";
2
+ export interface AgentRunState {
3
+ prompt: string;
4
+ threadId: string;
5
+ status: AgentRunStatus;
6
+ startedAt: string;
7
+ updatedAt: string;
8
+ stepCount: number;
9
+ lastSummary: string;
10
+ artifacts: Record<string, unknown>;
11
+ }
12
+ export interface CreateAgentRunStateStoreOptions {
13
+ filePath: string;
14
+ getArtifacts?: () => Record<string, unknown>;
15
+ }
16
+ export interface UpdateAgentRunStateOptions {
17
+ prompt: string;
18
+ threadId: string;
19
+ previousState?: AgentRunState | null;
20
+ stepCount: number;
21
+ lastSummary: string;
22
+ status: AgentRunStatus;
23
+ updatedAt?: string;
24
+ }
25
+ export declare class AgentRunStateStore {
26
+ readonly filePath: string;
27
+ private readonly getArtifacts;
28
+ constructor(options: CreateAgentRunStateStoreOptions);
29
+ read(): Promise<AgentRunState | null>;
30
+ write(state: AgentRunState): Promise<void>;
31
+ update(params: UpdateAgentRunStateOptions): Promise<AgentRunState>;
32
+ buildResumePrompt(basePrompt: string, previousState: AgentRunState | null, resumeHint: string): string;
33
+ getThreadId(previousState: AgentRunState | null, fallbackThreadId: string): string;
34
+ }
35
+ export declare function createAgentRunStateStore(options: CreateAgentRunStateStoreOptions): AgentRunStateStore;
36
+ //# sourceMappingURL=runState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runState.d.ts","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;gBAE1C,OAAO,EAAE,+BAA+B;IAK9C,IAAI,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAQrC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBxE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAKtG,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;CAG1F;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,sBAEhF"}
@@ -0,0 +1,51 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ export class AgentRunStateStore {
4
+ filePath;
5
+ getArtifacts;
6
+ constructor(options) {
7
+ this.filePath = options.filePath;
8
+ this.getArtifacts = options.getArtifacts ?? (() => ({}));
9
+ }
10
+ async read() {
11
+ try {
12
+ return JSON.parse(await readFile(this.filePath, "utf8"));
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ async write(state) {
19
+ await mkdir(dirname(this.filePath), { recursive: true });
20
+ await writeFile(this.filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
21
+ }
22
+ async update(params) {
23
+ const now = params.updatedAt ?? new Date().toISOString();
24
+ const state = {
25
+ prompt: params.prompt,
26
+ threadId: params.threadId,
27
+ status: params.status,
28
+ startedAt: params.previousState?.status === "running"
29
+ ? params.previousState.startedAt
30
+ : now,
31
+ updatedAt: now,
32
+ stepCount: params.stepCount,
33
+ lastSummary: params.lastSummary,
34
+ artifacts: this.getArtifacts(),
35
+ };
36
+ await this.write(state);
37
+ return state;
38
+ }
39
+ buildResumePrompt(basePrompt, previousState, resumeHint) {
40
+ if (previousState?.status !== "running")
41
+ return basePrompt;
42
+ return `${basePrompt}\n\n${resumeHint}`;
43
+ }
44
+ getThreadId(previousState, fallbackThreadId) {
45
+ return previousState?.status === "running" ? previousState.threadId : fallbackThreadId;
46
+ }
47
+ }
48
+ export function createAgentRunStateStore(options) {
49
+ return new AgentRunStateStore(options);
50
+ }
51
+ //# sourceMappingURL=runState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runState.js","sourceRoot":"","sources":["../../src/state/runState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,MAAM,OAAO,kBAAkB;IACb,QAAQ,CAAS;IAChB,YAAY,CAAgC;IAE7D,YAAmB,OAAwC;QACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAkB,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAAoB;QACrC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAkC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,KAAK,GAAkB;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,KAAK,SAAS;gBACnD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS;gBAChC,CAAC,CAAC,GAAG;YACP,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;SAC/B,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,iBAAiB,CAAC,UAAkB,EAAE,aAAmC,EAAE,UAAkB;QAClG,IAAI,aAAa,EAAE,MAAM,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC;QAC3D,OAAO,GAAG,UAAU,OAAO,UAAU,EAAE,CAAC;IAC1C,CAAC;IAEM,WAAW,CAAC,aAAmC,EAAE,gBAAwB;QAC9E,OAAO,aAAa,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACzF,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAwC;IAC/E,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export interface NormalizedTodo {
2
+ content: unknown;
3
+ status: string;
4
+ }
5
+ export interface CreateTodoPersisterOptions {
6
+ filePath: string;
7
+ logger?: (message: string) => void;
8
+ }
9
+ export declare function normalizeTodos(todos: unknown): NormalizedTodo[];
10
+ export declare class TodoPersister {
11
+ private readonly filePath;
12
+ private readonly logger;
13
+ private lastPersistedJson;
14
+ constructor(options: CreateTodoPersisterOptions);
15
+ static normalize(todos: unknown): NormalizedTodo[];
16
+ persist(todos: unknown): Promise<void>;
17
+ }
18
+ export declare function createTodoPersister(options: CreateTodoPersisterOptions): (todos: unknown) => Promise<void>;
19
+ //# sourceMappingURL=todos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todos.d.ts","sourceRoot":"","sources":["../../src/state/todos.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAE/D;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,iBAAiB,CAAM;gBAEZ,OAAO,EAAE,0BAA0B;WAKxC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE;IAc5C,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAYpD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,WAdzC,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CAiBpD"}
@@ -0,0 +1,45 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ export function normalizeTodos(todos) {
4
+ return TodoPersister.normalize(todos);
5
+ }
6
+ export class TodoPersister {
7
+ filePath;
8
+ logger;
9
+ lastPersistedJson = "";
10
+ constructor(options) {
11
+ this.filePath = options.filePath;
12
+ this.logger = options.logger ?? (() => { });
13
+ }
14
+ static normalize(todos) {
15
+ if (!Array.isArray(todos) || todos.length === 0)
16
+ return [];
17
+ return todos
18
+ .map((todo) => {
19
+ if (!todo || typeof todo !== "object" || !("content" in todo))
20
+ return null;
21
+ return {
22
+ content: todo.content,
23
+ status: todo.status ?? "pending",
24
+ };
25
+ })
26
+ .filter((todo) => todo !== null);
27
+ }
28
+ async persist(todos) {
29
+ const normalized = TodoPersister.normalize(todos);
30
+ if (normalized.length === 0)
31
+ return;
32
+ const nextJson = JSON.stringify(normalized, null, 2);
33
+ if (nextJson === this.lastPersistedJson)
34
+ return;
35
+ this.lastPersistedJson = nextJson;
36
+ await mkdir(dirname(this.filePath), { recursive: true });
37
+ await writeFile(this.filePath, nextJson, "utf8");
38
+ this.logger(`[todos] persisted ${normalized.length} item(s) -> ${this.filePath}`);
39
+ }
40
+ }
41
+ export function createTodoPersister(options) {
42
+ const persister = new TodoPersister(options);
43
+ return persister.persist.bind(persister);
44
+ }
45
+ //# sourceMappingURL=todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todos.js","sourceRoot":"","sources":["../../src/state/todos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,aAAa;IACP,QAAQ,CAAS;IACjB,MAAM,CAA4B;IAC3C,iBAAiB,GAAG,EAAE,CAAC;IAE/B,YAAmB,OAAmC;QACpD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,KAAc;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3D,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3E,OAAO;gBACL,OAAO,EAAG,IAA6B,CAAC,OAAO;gBAC/C,MAAM,EAAG,IAA4B,CAAC,MAAM,IAAI,SAAS;aAC1D,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAA0B,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAc;QACjC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAChD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAElC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,qBAAqB,UAAU,CAAC,MAAM,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpF,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { AgentRunState, AgentRunStateStore } from "./runState.js";
2
+ import type { AgentRuntimeEventPublisher } from "../runtime/events/eventPublisher.js";
3
+ export interface PreparedWorkspaceRun {
4
+ previousState: AgentRunState | null;
5
+ threadId: string;
6
+ config: {
7
+ configurable: {
8
+ thread_id: string;
9
+ };
10
+ };
11
+ input: {
12
+ messages: Array<{
13
+ role: "user";
14
+ content: string;
15
+ }>;
16
+ };
17
+ start(): Promise<void>;
18
+ update(stepCount: number, lastSummary: string): Promise<void>;
19
+ finish(stepCount: number, lastSummary: string): Promise<void>;
20
+ }
21
+ export declare class WorkspaceRunSessionFactory {
22
+ static create(params: {
23
+ prompt: string;
24
+ threadId: string;
25
+ previousState: AgentRunState | null;
26
+ resumeHint: string;
27
+ runState: AgentRunStateStore;
28
+ events?: AgentRuntimeEventPublisher;
29
+ isCompleted: () => boolean;
30
+ }): PreparedWorkspaceRun;
31
+ }
32
+ //# sourceMappingURL=workspaceRunSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceRunSession.d.ts","sourceRoot":"","sources":["../../src/state/workspaceRunSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEtF,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;IACF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,qBAAa,0BAA0B;WACvB,MAAM,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,kBAAkB,CAAC;QAC7B,MAAM,CAAC,EAAE,0BAA0B,CAAC;QACpC,WAAW,EAAE,MAAM,OAAO,CAAC;KAC5B,GAAG,oBAAoB;CAgEzB"}
@@ -0,0 +1,67 @@
1
+ export class WorkspaceRunSessionFactory {
2
+ static create(params) {
3
+ return {
4
+ previousState: params.previousState,
5
+ threadId: params.threadId,
6
+ config: { configurable: { thread_id: params.threadId } },
7
+ input: {
8
+ messages: [{
9
+ role: "user",
10
+ content: params.runState.buildResumePrompt(params.prompt, params.previousState, params.resumeHint),
11
+ }],
12
+ },
13
+ start: async () => {
14
+ await params.runState.update({
15
+ prompt: params.prompt,
16
+ threadId: params.threadId,
17
+ stepCount: 0,
18
+ lastSummary: "",
19
+ status: "running",
20
+ previousState: params.previousState,
21
+ });
22
+ params.events?.emit({
23
+ name: "agent.runtime2.workspace.run.start",
24
+ from: "agent-runtime2.workspace",
25
+ to: "agent-runtime2.state",
26
+ payload: { threadId: params.threadId, prompt: params.prompt },
27
+ });
28
+ },
29
+ update: async (stepCount, lastSummary) => {
30
+ await params.runState.update({
31
+ prompt: params.prompt,
32
+ threadId: params.threadId,
33
+ stepCount,
34
+ lastSummary,
35
+ status: "running",
36
+ previousState: params.previousState,
37
+ updatedAt: new Date().toISOString(),
38
+ });
39
+ params.events?.emit({
40
+ name: "agent.runtime2.workspace.run.update",
41
+ from: "agent-runtime2.workspace",
42
+ to: "agent-runtime2.state",
43
+ payload: { threadId: params.threadId, stepCount, lastSummary },
44
+ });
45
+ },
46
+ finish: async (stepCount, lastSummary) => {
47
+ const status = params.isCompleted() ? "completed" : "failed";
48
+ await params.runState.update({
49
+ prompt: params.prompt,
50
+ threadId: params.threadId,
51
+ stepCount,
52
+ lastSummary,
53
+ status,
54
+ previousState: params.previousState,
55
+ updatedAt: new Date().toISOString(),
56
+ });
57
+ params.events?.emit({
58
+ name: "agent.runtime2.workspace.run.finish",
59
+ from: "agent-runtime2.workspace",
60
+ to: "agent-runtime2.state",
61
+ payload: { threadId: params.threadId, stepCount, lastSummary, status },
62
+ });
63
+ },
64
+ };
65
+ }
66
+ }
67
+ //# sourceMappingURL=workspaceRunSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceRunSession.js","sourceRoot":"","sources":["../../src/state/workspaceRunSession.ts"],"names":[],"mappings":"AAsBA,MAAM,OAAO,0BAA0B;IAC9B,MAAM,CAAC,MAAM,CAAC,MAQpB;QACC,OAAO;YACL,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE;YACxD,KAAK,EAAE;gBACL,QAAQ,EAAE,CAAC;wBACT,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC;qBACnG,CAAC;aACH;YACD,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS,EAAE,CAAC;oBACZ,WAAW,EAAE,EAAE;oBACf,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;iBACpC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;oBAClB,IAAI,EAAE,oCAAoC;oBAC1C,IAAI,EAAE,0BAA0B;oBAChC,EAAE,EAAE,sBAAsB;oBAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;iBAC9D,CAAC,CAAC;YACL,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;gBACvC,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS;oBACT,WAAW;oBACX,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;oBAClB,IAAI,EAAE,qCAAqC;oBAC3C,IAAI,EAAE,0BAA0B;oBAChC,EAAE,EAAE,sBAAsB;oBAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;gBACvC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS;oBACT,WAAW;oBACX,MAAM;oBACN,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;oBAClB,IAAI,EAAE,qCAAqC;oBAC3C,IAAI,EAAE,0BAA0B;oBAChC,EAAE,EAAE,sBAAsB;oBAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE;iBACvE,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,94 @@
1
+ import { type AgentRunState } from "./runState.js";
2
+ import { type AgentRuntimeEventPublisher } from "../runtime/events/eventPublisher.js";
3
+ import { type PreparedWorkspaceRun } from "./workspaceRunSession.js";
4
+ export interface CreateAgentWorkspaceStateOptions {
5
+ rootDir: string;
6
+ artifacts?: Array<{
7
+ key: string;
8
+ path: string;
9
+ }>;
10
+ stateDirName?: string;
11
+ legacyOutputState?: boolean;
12
+ todosLogger?: (message: string) => void;
13
+ events?: AgentRuntimeEventPublisher;
14
+ }
15
+ export interface AgentWorkspaceState {
16
+ stateDir: string;
17
+ todosFile: string;
18
+ runStateFile: string;
19
+ artifactFiles: Record<string, string>;
20
+ prepareRun(params: {
21
+ prompt: string;
22
+ fallbackThreadId?: string;
23
+ resumeHint: string;
24
+ }): Promise<PreparedWorkspaceRun>;
25
+ readRunState(): Promise<AgentRunState | null>;
26
+ getThreadId(previousState: AgentRunState | null, fallbackThreadId: string): string;
27
+ buildResumePrompt(basePrompt: string, previousState: AgentRunState | null, resumeHint: string): string;
28
+ startRun(params: {
29
+ prompt: string;
30
+ threadId: string;
31
+ previousState: AgentRunState | null;
32
+ }): Promise<void>;
33
+ updateRun(params: {
34
+ prompt: string;
35
+ threadId: string;
36
+ previousState: AgentRunState | null;
37
+ stepCount: number;
38
+ lastSummary: string;
39
+ }): Promise<void>;
40
+ finishRun(params: {
41
+ prompt: string;
42
+ threadId: string;
43
+ previousState: AgentRunState | null;
44
+ stepCount: number;
45
+ lastSummary: string;
46
+ }): Promise<void>;
47
+ resetForFreshRun(previousState: AgentRunState | null): Promise<void>;
48
+ persistTodos(todos: unknown): Promise<void>;
49
+ }
50
+ export declare class AgentWorkspaceStateManager implements AgentWorkspaceState {
51
+ readonly stateDir: string;
52
+ readonly todosFile: string;
53
+ readonly runStateFile: string;
54
+ readonly artifactFiles: Record<string, string>;
55
+ private readonly legacyOutputState;
56
+ private readonly legacyTodosFile;
57
+ private readonly legacyRunStateFile;
58
+ private readonly persistTodosHandler;
59
+ private readonly runState;
60
+ private readonly events?;
61
+ constructor(options: CreateAgentWorkspaceStateOptions);
62
+ prepareRun(params: {
63
+ prompt: string;
64
+ fallbackThreadId?: string;
65
+ resumeHint: string;
66
+ }): Promise<PreparedWorkspaceRun>;
67
+ readRunState(): Promise<AgentRunState | null>;
68
+ getThreadId(previousState: AgentRunState | null, fallbackThreadId: string): string;
69
+ buildResumePrompt(basePrompt: string, previousState: AgentRunState | null, resumeHint: string): string;
70
+ startRun(params: {
71
+ prompt: string;
72
+ threadId: string;
73
+ previousState: AgentRunState | null;
74
+ }): Promise<void>;
75
+ updateRun(params: {
76
+ prompt: string;
77
+ threadId: string;
78
+ previousState: AgentRunState | null;
79
+ stepCount: number;
80
+ lastSummary: string;
81
+ }): Promise<void>;
82
+ finishRun(params: {
83
+ prompt: string;
84
+ threadId: string;
85
+ previousState: AgentRunState | null;
86
+ stepCount: number;
87
+ lastSummary: string;
88
+ }): Promise<void>;
89
+ resetForFreshRun(previousState: AgentRunState | null): Promise<void>;
90
+ persistTodos(todos: unknown): Promise<void>;
91
+ private isCompleted;
92
+ }
93
+ export declare function createAgentWorkspaceState(options: CreateAgentWorkspaceStateOptions): AgentWorkspaceState;
94
+ //# sourceMappingURL=workspaceState.d.ts.map