@superblocksteam/vite-plugin-file-sync 2.0.34 → 2.0.35-next.1

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 (524) hide show
  1. package/dist/ai-service/agent/apis.d.ts +45 -0
  2. package/dist/ai-service/agent/apis.d.ts.map +1 -0
  3. package/dist/ai-service/agent/apis.js +1255 -0
  4. package/dist/ai-service/agent/apis.js.map +1 -0
  5. package/dist/ai-service/agent/tool-message-utils.d.ts +30 -0
  6. package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -0
  7. package/dist/ai-service/agent/tool-message-utils.js +261 -0
  8. package/dist/ai-service/agent/tool-message-utils.js.map +1 -0
  9. package/dist/ai-service/agent/tools/build-add-event.d.ts +16 -0
  10. package/dist/ai-service/agent/tools/build-add-event.d.ts.map +1 -0
  11. package/dist/ai-service/agent/tools/build-add-event.js +43 -0
  12. package/dist/ai-service/agent/tools/build-add-event.js.map +1 -0
  13. package/dist/ai-service/agent/tools/build-add-state-var.d.ts +18 -0
  14. package/dist/ai-service/agent/tools/build-add-state-var.d.ts.map +1 -0
  15. package/dist/ai-service/agent/tools/build-add-state-var.js +61 -0
  16. package/dist/ai-service/agent/tools/build-add-state-var.js.map +1 -0
  17. package/dist/ai-service/agent/tools/build-add-timer.d.ts +18 -0
  18. package/dist/ai-service/agent/tools/build-add-timer.d.ts.map +1 -0
  19. package/dist/ai-service/agent/tools/build-add-timer.js +45 -0
  20. package/dist/ai-service/agent/tools/build-add-timer.js.map +1 -0
  21. package/dist/ai-service/agent/tools/build-create-page.d.ts +11 -0
  22. package/dist/ai-service/agent/tools/build-create-page.d.ts.map +1 -0
  23. package/dist/ai-service/agent/tools/build-create-page.js +56 -0
  24. package/dist/ai-service/agent/tools/build-create-page.js.map +1 -0
  25. package/dist/ai-service/agent/tools/build-debug.d.ts +4 -0
  26. package/dist/ai-service/agent/tools/build-debug.d.ts.map +1 -0
  27. package/dist/ai-service/agent/tools/build-debug.js +41 -0
  28. package/dist/ai-service/agent/tools/build-debug.js.map +1 -0
  29. package/dist/ai-service/agent/tools/build-edit-file.d.ts +28 -0
  30. package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -0
  31. package/dist/ai-service/agent/tools/build-edit-file.js +433 -0
  32. package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -0
  33. package/dist/ai-service/agent/tools/build-finalize.d.ts +37 -0
  34. package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -0
  35. package/dist/ai-service/agent/tools/build-finalize.js +97 -0
  36. package/dist/ai-service/agent/tools/build-finalize.js.map +1 -0
  37. package/dist/ai-service/agent/tools/build-install-packages.d.ts +7 -0
  38. package/dist/ai-service/agent/tools/build-install-packages.d.ts.map +1 -0
  39. package/dist/ai-service/agent/tools/build-install-packages.js +20 -0
  40. package/dist/ai-service/agent/tools/build-install-packages.js.map +1 -0
  41. package/dist/ai-service/agent/tools/build-list-available-components.d.ts +9 -0
  42. package/dist/ai-service/agent/tools/build-list-available-components.d.ts.map +1 -0
  43. package/dist/ai-service/agent/tools/build-list-available-components.js +44 -0
  44. package/dist/ai-service/agent/tools/build-list-available-components.js.map +1 -0
  45. package/dist/ai-service/agent/tools/build-list-files.d.ts +5 -0
  46. package/dist/ai-service/agent/tools/build-list-files.d.ts.map +1 -0
  47. package/dist/ai-service/agent/tools/build-list-files.js +24 -0
  48. package/dist/ai-service/agent/tools/build-list-files.js.map +1 -0
  49. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +50 -0
  50. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts.map +1 -0
  51. package/dist/ai-service/agent/tools/build-manage-checklist.js +156 -0
  52. package/dist/ai-service/agent/tools/build-manage-checklist.js.map +1 -0
  53. package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts +18 -0
  54. package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -0
  55. package/dist/ai-service/agent/tools/build-multi-edit-file.js +185 -0
  56. package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -0
  57. package/dist/ai-service/agent/tools/build-read-files.d.ts +9 -0
  58. package/dist/ai-service/agent/tools/build-read-files.d.ts.map +1 -0
  59. package/dist/ai-service/agent/tools/build-read-files.js +49 -0
  60. package/dist/ai-service/agent/tools/build-read-files.js.map +1 -0
  61. package/dist/ai-service/agent/tools/build-register-component-name.d.ts +11 -0
  62. package/dist/ai-service/agent/tools/build-register-component-name.d.ts.map +1 -0
  63. package/dist/ai-service/agent/tools/build-register-component-name.js +52 -0
  64. package/dist/ai-service/agent/tools/build-register-component-name.js.map +1 -0
  65. package/dist/ai-service/agent/tools/build-rename-page.d.ts +10 -0
  66. package/dist/ai-service/agent/tools/build-rename-page.d.ts.map +1 -0
  67. package/dist/ai-service/agent/tools/build-rename-page.js +49 -0
  68. package/dist/ai-service/agent/tools/build-rename-page.js.map +1 -0
  69. package/dist/ai-service/agent/tools/build-update-state-var.d.ts +17 -0
  70. package/dist/ai-service/agent/tools/build-update-state-var.d.ts.map +1 -0
  71. package/dist/ai-service/agent/tools/build-update-state-var.js +66 -0
  72. package/dist/ai-service/agent/tools/build-update-state-var.js.map +1 -0
  73. package/dist/ai-service/agent/tools/build-validate-icons.d.ts +24 -0
  74. package/dist/ai-service/agent/tools/build-validate-icons.d.ts.map +1 -0
  75. package/dist/ai-service/agent/tools/build-validate-icons.js +96 -0
  76. package/dist/ai-service/agent/tools/build-validate-icons.js.map +1 -0
  77. package/dist/ai-service/agent/tools/build-write-file.d.ts +11 -0
  78. package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -0
  79. package/dist/ai-service/agent/tools/build-write-file.js +59 -0
  80. package/dist/ai-service/agent/tools/build-write-file.js.map +1 -0
  81. package/dist/ai-service/agent/tools/debug-cache.d.ts +39 -0
  82. package/dist/ai-service/agent/tools/debug-cache.d.ts.map +1 -0
  83. package/dist/ai-service/agent/tools/debug-cache.js +118 -0
  84. package/dist/ai-service/agent/tools/debug-cache.js.map +1 -0
  85. package/dist/ai-service/agent/tools/index.d.ts +20 -0
  86. package/dist/ai-service/agent/tools/index.d.ts.map +1 -0
  87. package/dist/ai-service/agent/tools/index.js +20 -0
  88. package/dist/ai-service/agent/tools/index.js.map +1 -0
  89. package/dist/ai-service/agent/tools/shared-helpers.d.ts +8 -0
  90. package/dist/ai-service/agent/tools/shared-helpers.d.ts.map +1 -0
  91. package/dist/ai-service/agent/tools/shared-helpers.js +26 -0
  92. package/dist/ai-service/agent/tools/shared-helpers.js.map +1 -0
  93. package/dist/ai-service/agent/tools/study-current-app-state.d.ts +19 -0
  94. package/dist/ai-service/agent/tools/study-current-app-state.d.ts.map +1 -0
  95. package/dist/ai-service/agent/tools/study-current-app-state.js +18 -0
  96. package/dist/ai-service/agent/tools/study-current-app-state.js.map +1 -0
  97. package/dist/ai-service/agent/tools.d.ts +262 -0
  98. package/dist/ai-service/agent/tools.d.ts.map +1 -0
  99. package/dist/ai-service/agent/tools.js +102 -0
  100. package/dist/ai-service/agent/tools.js.map +1 -0
  101. package/dist/ai-service/agent/utils.d.ts +34 -0
  102. package/dist/ai-service/agent/utils.d.ts.map +1 -0
  103. package/dist/ai-service/agent/utils.js +242 -0
  104. package/dist/ai-service/agent/utils.js.map +1 -0
  105. package/dist/ai-service/app-interface/{source-tracker.d.ts → file-system-interface.d.ts} +7 -2
  106. package/dist/ai-service/app-interface/file-system-interface.d.ts.map +1 -0
  107. package/dist/ai-service/app-interface/{source-tracker.js → file-system-interface.js} +18 -2
  108. package/dist/ai-service/app-interface/file-system-interface.js.map +1 -0
  109. package/dist/ai-service/app-interface/linter.d.ts.map +1 -1
  110. package/dist/ai-service/app-interface/linter.js +5 -1
  111. package/dist/ai-service/app-interface/linter.js.map +1 -1
  112. package/dist/ai-service/app-interface/shell.d.ts +16 -2
  113. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  114. package/dist/ai-service/app-interface/shell.js +109 -18
  115. package/dist/ai-service/app-interface/shell.js.map +1 -1
  116. package/dist/ai-service/chat/chat-session-store.d.ts +21 -1
  117. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  118. package/dist/ai-service/chat/chat-session-store.js +149 -10
  119. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  120. package/dist/ai-service/chat/extract-history.d.ts +10 -0
  121. package/dist/ai-service/chat/extract-history.d.ts.map +1 -1
  122. package/dist/ai-service/chat/extract-history.js +56 -13
  123. package/dist/ai-service/chat/extract-history.js.map +1 -1
  124. package/dist/ai-service/clark-provider/clark-error-handler.d.ts +4 -46
  125. package/dist/ai-service/clark-provider/clark-error-handler.d.ts.map +1 -1
  126. package/dist/ai-service/clark-provider/clark-error-handler.js +1 -1
  127. package/dist/ai-service/clark-provider/clark-error-handler.js.map +1 -1
  128. package/dist/ai-service/clark-provider/clark-language-model.d.ts +6 -5
  129. package/dist/ai-service/clark-provider/clark-language-model.d.ts.map +1 -1
  130. package/dist/ai-service/clark-provider/clark-language-model.js +163 -129
  131. package/dist/ai-service/clark-provider/clark-language-model.js.map +1 -1
  132. package/dist/ai-service/clark-provider/clark-provider.d.ts +5 -5
  133. package/dist/ai-service/clark-provider/clark-provider.d.ts.map +1 -1
  134. package/dist/ai-service/clark-provider/clark-provider.js +4 -0
  135. package/dist/ai-service/clark-provider/clark-provider.js.map +1 -1
  136. package/dist/ai-service/const.d.ts +20 -4
  137. package/dist/ai-service/const.d.ts.map +1 -1
  138. package/dist/ai-service/const.js +12 -3
  139. package/dist/ai-service/const.js.map +1 -1
  140. package/dist/ai-service/context/app-context.d.ts +32 -2
  141. package/dist/ai-service/context/app-context.d.ts.map +1 -1
  142. package/dist/ai-service/context/app-context.js +75 -6
  143. package/dist/ai-service/context/app-context.js.map +1 -1
  144. package/dist/ai-service/evals/content-matchers/index.d.ts.map +1 -1
  145. package/dist/ai-service/evals/content-matchers/index.js +4 -1
  146. package/dist/ai-service/evals/content-matchers/index.js.map +1 -1
  147. package/dist/ai-service/evals/helpers/index.d.ts +1 -1
  148. package/dist/ai-service/evals/helpers/index.d.ts.map +1 -1
  149. package/dist/ai-service/evals/helpers/index.js +15 -3
  150. package/dist/ai-service/evals/helpers/index.js.map +1 -1
  151. package/dist/ai-service/evals/llm-provider.d.ts +1 -1
  152. package/dist/ai-service/evals/llm-provider.d.ts.map +1 -1
  153. package/dist/ai-service/evals/llm-provider.js +2 -2
  154. package/dist/ai-service/evals/llm-provider.js.map +1 -1
  155. package/dist/ai-service/index.d.ts +10 -5
  156. package/dist/ai-service/index.d.ts.map +1 -1
  157. package/dist/ai-service/index.js +143 -216
  158. package/dist/ai-service/index.js.map +1 -1
  159. package/dist/ai-service/integrations/metadata/database.d.ts.map +1 -1
  160. package/dist/ai-service/integrations/metadata/database.js +7 -29
  161. package/dist/ai-service/integrations/metadata/database.js.map +1 -1
  162. package/dist/ai-service/integrations/metadata/graphql-based.d.ts.map +1 -1
  163. package/dist/ai-service/integrations/metadata/graphql-based.js +6 -29
  164. package/dist/ai-service/integrations/metadata/graphql-based.js.map +1 -1
  165. package/dist/ai-service/integrations/metadata/open-api.d.ts.map +1 -1
  166. package/dist/ai-service/integrations/metadata/open-api.js +7 -31
  167. package/dist/ai-service/integrations/metadata/open-api.js.map +1 -1
  168. package/dist/ai-service/llm/impl/anthropic.js +3 -3
  169. package/dist/ai-service/llm/impl/anthropic.js.map +1 -1
  170. package/dist/ai-service/llm/impl/clark.js +3 -3
  171. package/dist/ai-service/llm/impl/clark.js.map +1 -1
  172. package/dist/ai-service/llm/provider.d.ts +3 -2
  173. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  174. package/dist/ai-service/llm/provider.js +6 -3
  175. package/dist/ai-service/llm/provider.js.map +1 -1
  176. package/dist/ai-service/llm/types.d.ts +4 -4
  177. package/dist/ai-service/llm/types.d.ts.map +1 -1
  178. package/dist/ai-service/llm/utils.d.ts +6 -5
  179. package/dist/ai-service/llm/utils.d.ts.map +1 -1
  180. package/dist/ai-service/llm/utils.js +2 -2
  181. package/dist/ai-service/llm/utils.js.map +1 -1
  182. package/dist/ai-service/llmobs.d.ts +151 -0
  183. package/dist/ai-service/llmobs.d.ts.map +1 -0
  184. package/dist/ai-service/llmobs.js +216 -0
  185. package/dist/ai-service/llmobs.js.map +1 -0
  186. package/dist/ai-service/profiler/clark-profiler.d.ts +86 -0
  187. package/dist/ai-service/profiler/clark-profiler.d.ts.map +1 -0
  188. package/dist/ai-service/profiler/clark-profiler.js +208 -0
  189. package/dist/ai-service/profiler/clark-profiler.js.map +1 -0
  190. package/dist/ai-service/profiler/index.d.ts +4 -0
  191. package/dist/ai-service/profiler/index.d.ts.map +1 -0
  192. package/dist/ai-service/profiler/index.js +4 -0
  193. package/dist/ai-service/profiler/index.js.map +1 -0
  194. package/dist/ai-service/profiler/perfetto-profiler.d.ts +116 -0
  195. package/dist/ai-service/profiler/perfetto-profiler.d.ts.map +1 -0
  196. package/dist/ai-service/profiler/perfetto-profiler.js +240 -0
  197. package/dist/ai-service/profiler/perfetto-profiler.js.map +1 -0
  198. package/dist/ai-service/profiler/tool-profiler.d.ts +33 -0
  199. package/dist/ai-service/profiler/tool-profiler.d.ts.map +1 -0
  200. package/dist/ai-service/profiler/tool-profiler.js +157 -0
  201. package/dist/ai-service/profiler/tool-profiler.js.map +1 -0
  202. package/dist/ai-service/prompt-builder-service/builders/code-generation.d.ts.map +1 -1
  203. package/dist/ai-service/prompt-builder-service/builders/code-generation.js +37 -9
  204. package/dist/ai-service/prompt-builder-service/builders/code-generation.js.map +1 -1
  205. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts +13 -0
  206. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.d.ts.map +1 -0
  207. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js +71 -0
  208. package/dist/ai-service/prompt-builder-service/builders/incremental-edits.js.map +1 -0
  209. package/dist/ai-service/prompt-builder-service/builders/specific-edits.js +4 -4
  210. package/dist/ai-service/prompt-builder-service/builders/specific-edits.js.map +1 -1
  211. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.d.ts.map +1 -1
  212. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js +4 -2
  213. package/dist/ai-service/prompt-builder-service/classifiers/prompt-interpret-task.js.map +1 -1
  214. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts +2 -1
  215. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.d.ts.map +1 -1
  216. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js +40 -31
  217. package/dist/ai-service/prompt-builder-service/constants/superblocks-platform-fragments.js.map +1 -1
  218. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts +4 -3
  219. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.d.ts.map +1 -1
  220. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js +12 -8
  221. package/dist/ai-service/prompt-builder-service/fragment-generators/base-fragment.js.map +1 -1
  222. package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.d.ts +6 -0
  223. package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.d.ts.map +1 -0
  224. package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.js +52 -0
  225. package/dist/ai-service/prompt-builder-service/fragment-generators/chakra-tokens.js.map +1 -0
  226. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ButtonPropsDocs.js +1 -1
  227. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.d.ts +1 -1
  228. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.d.ts.map +1 -1
  229. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js +2 -2
  230. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/CheckboxPropsDocs.js.map +1 -1
  231. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ColumnPropsDocs.js +1 -1
  232. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ContainerPropsDocs.js +1 -1
  233. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts +1 -1
  234. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.d.ts.map +1 -1
  235. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js +2 -2
  236. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DatePickerPropsDocs.js.map +1 -1
  237. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.d.ts +1 -1
  238. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.d.ts.map +1 -1
  239. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js +2 -2
  240. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/DropdownPropsDocs.js.map +1 -1
  241. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/IconPropsDocs.js +1 -1
  242. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ImagePropsDocs.js +1 -1
  243. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts +1 -1
  244. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.d.ts.map +1 -1
  245. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js +2 -2
  246. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/InputPropsDocs.js.map +1 -1
  247. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/ModalPropsDocs.js +1 -1
  248. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/PagePropsDocs.js +1 -1
  249. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SectionPropsDocs.js +1 -1
  250. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SlideoutPropsDocs.js +1 -1
  251. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.d.ts +1 -1
  252. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.d.ts.map +1 -1
  253. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js +2 -2
  254. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/SwitchPropsDocs.js.map +1 -1
  255. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts +1 -1
  256. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.d.ts.map +1 -1
  257. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js +2 -2
  258. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TablePropsDocs.js.map +1 -1
  259. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts +1 -1
  260. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.d.ts.map +1 -1
  261. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js +2 -2
  262. package/dist/ai-service/prompt-builder-service/static-fragments/library-components/TextPropsDocs.js.map +1 -1
  263. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Dim.js +1 -1
  264. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/EventFlow.js +1 -1
  265. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/TextStyleWithVariant.js +1 -1
  266. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.d.ts +0 -1
  267. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.d.ts.map +1 -1
  268. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.js +0 -1
  269. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/index.js.map +1 -1
  270. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts +1 -1
  271. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.d.ts.map +1 -1
  272. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js +2 -2
  273. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/full-examples.js.map +1 -1
  274. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts +1 -1
  275. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.d.ts.map +1 -1
  276. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js +1 -1
  277. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/index.js.map +1 -1
  278. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts +1 -1
  279. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.d.ts.map +1 -1
  280. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js +2 -2
  281. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-api.js.map +1 -1
  282. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.d.ts +1 -1
  283. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.d.ts.map +1 -1
  284. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js +2 -2
  285. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-components-rules.js.map +1 -1
  286. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.d.ts +1 -1
  287. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.d.ts.map +1 -1
  288. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js +2 -2
  289. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-custom-components.js.map +1 -1
  290. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-data-filtering.js +1 -1
  291. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.d.ts +1 -1
  292. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.d.ts.map +1 -1
  293. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js +2 -2
  294. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-event-flow.js.map +1 -1
  295. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.d.ts +1 -1
  296. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.d.ts.map +1 -1
  297. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js +2 -2
  298. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-forms.js.map +1 -1
  299. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.d.ts +1 -1
  300. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.d.ts.map +1 -1
  301. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js +2 -2
  302. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-layouts.js.map +1 -1
  303. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.d.ts +1 -1
  304. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.d.ts.map +1 -1
  305. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js +2 -2
  306. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-page.js.map +1 -1
  307. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.d.ts +1 -1
  308. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.d.ts.map +1 -1
  309. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js +2 -2
  310. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-rbac.js.map +1 -1
  311. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-routes.js +1 -1
  312. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.d.ts +1 -1
  313. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.d.ts.map +1 -1
  314. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js +2 -2
  315. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-state.js.map +1 -1
  316. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.d.ts +2 -0
  317. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.d.ts.map +1 -0
  318. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.js +6 -0
  319. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming-chakra-new.js.map +1 -0
  320. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.d.ts +1 -1
  321. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.d.ts.map +1 -1
  322. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js +2 -2
  323. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-base.js.map +1 -1
  324. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts +1 -1
  325. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.d.ts.map +1 -1
  326. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js +2 -2
  327. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-incremental.js.map +1 -1
  328. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.d.ts +1 -1
  329. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.d.ts.map +1 -1
  330. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.js +2 -2
  331. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/system-specific-edit.js.map +1 -1
  332. package/dist/ai-service/prompt-builder-service/types.d.ts +2 -0
  333. package/dist/ai-service/prompt-builder-service/types.d.ts.map +1 -1
  334. package/dist/ai-service/prompt-builder-service/types.js.map +1 -1
  335. package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.d.ts +18 -0
  336. package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.d.ts.map +1 -0
  337. package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.js +340 -0
  338. package/dist/ai-service/prompt-builder-service/utils/chakra/extract-chakra-tokens.js.map +1 -0
  339. package/dist/ai-service/prompt-builder-service/utils/integrations/to-sdk-prompt.js +2 -308
  340. package/dist/ai-service/prompt-builder-service/utils/integrations/to-sdk-prompt.js.map +1 -1
  341. package/dist/ai-service/state-machine/clark-fsm.d.ts +31 -12
  342. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  343. package/dist/ai-service/state-machine/clark-fsm.js +2 -0
  344. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  345. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  346. package/dist/ai-service/state-machine/handlers/agent-planning.js +75 -214
  347. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  348. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +1 -1
  349. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  350. package/dist/ai-service/state-machine/handlers/awaiting-user.js +32 -11
  351. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  352. package/dist/ai-service/state-machine/handlers/idle.d.ts +1 -1
  353. package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
  354. package/dist/ai-service/state-machine/handlers/idle.js +5 -2
  355. package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
  356. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +2 -2
  357. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  358. package/dist/ai-service/state-machine/handlers/llm-generating.js +333 -329
  359. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  360. package/dist/ai-service/state-machine/handlers/post-processing.d.ts +1 -1
  361. package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -1
  362. package/dist/ai-service/state-machine/handlers/post-processing.js +20 -9
  363. package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -1
  364. package/dist/ai-service/state-machine/handlers/simple-prompt-builder.d.ts +2 -0
  365. package/dist/ai-service/state-machine/handlers/simple-prompt-builder.d.ts.map +1 -0
  366. package/dist/ai-service/state-machine/handlers/simple-prompt-builder.js +2269 -0
  367. package/dist/ai-service/state-machine/handlers/simple-prompt-builder.js.map +1 -0
  368. package/dist/ai-service/state-machine/helpers/change-info.d.ts.map +1 -1
  369. package/dist/ai-service/state-machine/helpers/change-info.js +9 -0
  370. package/dist/ai-service/state-machine/helpers/change-info.js.map +1 -1
  371. package/dist/ai-service/state-machine/helpers/classification.d.ts.map +1 -1
  372. package/dist/ai-service/state-machine/helpers/classification.js +2 -1
  373. package/dist/ai-service/state-machine/helpers/classification.js.map +1 -1
  374. package/dist/ai-service/state-machine/helpers/file-read-tracker.d.ts +7 -0
  375. package/dist/ai-service/state-machine/helpers/file-read-tracker.d.ts.map +1 -0
  376. package/dist/ai-service/state-machine/helpers/file-read-tracker.js +17 -0
  377. package/dist/ai-service/state-machine/helpers/file-read-tracker.js.map +1 -0
  378. package/dist/ai-service/state-machine/helpers/peer.d.ts +1 -1
  379. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
  380. package/dist/ai-service/state-machine/helpers/peer.js +2 -6
  381. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
  382. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  383. package/dist/ai-service/state-machine/mocks.js +11 -6
  384. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  385. package/dist/ai-service/transform/api-builder/shared.d.ts +6 -0
  386. package/dist/ai-service/transform/api-builder/shared.d.ts.map +1 -1
  387. package/dist/ai-service/transform/api-builder/shared.js +19 -8
  388. package/dist/ai-service/transform/api-builder/shared.js.map +1 -1
  389. package/dist/ai-service/types.d.ts +5 -3
  390. package/dist/ai-service/types.d.ts.map +1 -1
  391. package/dist/ai-service/types.js.map +1 -1
  392. package/dist/ai-service/util/ddog-llmobs.d.ts +20 -0
  393. package/dist/ai-service/util/ddog-llmobs.d.ts.map +1 -0
  394. package/dist/ai-service/util/ddog-llmobs.js +197 -0
  395. package/dist/ai-service/util/ddog-llmobs.js.map +1 -0
  396. package/dist/ai-service/util/llm-config-utils.d.ts +16 -0
  397. package/dist/ai-service/util/llm-config-utils.d.ts.map +1 -0
  398. package/dist/ai-service/util/llm-config-utils.js +45 -0
  399. package/dist/ai-service/util/llm-config-utils.js.map +1 -0
  400. package/dist/component-docs-service/index.d.ts +37 -0
  401. package/dist/component-docs-service/index.d.ts.map +1 -0
  402. package/dist/component-docs-service/index.js +120 -0
  403. package/dist/component-docs-service/index.js.map +1 -0
  404. package/dist/components-manager.d.ts +3 -1
  405. package/dist/components-manager.d.ts.map +1 -1
  406. package/dist/components-manager.js +24 -24
  407. package/dist/components-manager.js.map +1 -1
  408. package/dist/draft-interface.d.ts +5 -0
  409. package/dist/draft-interface.d.ts.map +1 -1
  410. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  411. package/dist/file-sync-vite-plugin.js +98 -46
  412. package/dist/file-sync-vite-plugin.js.map +1 -1
  413. package/dist/file-system-helpers.d.ts +1 -0
  414. package/dist/file-system-helpers.d.ts.map +1 -1
  415. package/dist/file-system-helpers.js +3 -0
  416. package/dist/file-system-helpers.js.map +1 -1
  417. package/dist/file-system-manager.d.ts +11 -2
  418. package/dist/file-system-manager.d.ts.map +1 -1
  419. package/dist/file-system-manager.js +98 -42
  420. package/dist/file-system-manager.js.map +1 -1
  421. package/dist/injected-index.d.ts +1 -0
  422. package/dist/injected-index.d.ts.map +1 -1
  423. package/dist/injected-index.js +8 -3
  424. package/dist/injected-index.js.map +1 -1
  425. package/dist/parsing/bindings.d.ts +1 -1
  426. package/dist/parsing/bindings.d.ts.map +1 -1
  427. package/dist/parsing/bindings.js +14 -5
  428. package/dist/parsing/bindings.js.map +1 -1
  429. package/dist/parsing/entity/to-code-entity.d.ts.map +1 -1
  430. package/dist/parsing/entity/to-code-entity.js +12 -0
  431. package/dist/parsing/entity/to-code-entity.js.map +1 -1
  432. package/dist/parsing/entity/to-value-entity.d.ts.map +1 -1
  433. package/dist/parsing/entity/to-value-entity.js +4 -1
  434. package/dist/parsing/entity/to-value-entity.js.map +1 -1
  435. package/dist/parsing/events/to-code-events.d.ts.map +1 -1
  436. package/dist/parsing/events/to-code-events.js +1 -11
  437. package/dist/parsing/events/to-code-events.js.map +1 -1
  438. package/dist/parsing/events/to-value-events.d.ts +1 -1
  439. package/dist/parsing/function/index.d.ts +4 -0
  440. package/dist/parsing/function/index.d.ts.map +1 -0
  441. package/dist/parsing/function/index.js +7 -0
  442. package/dist/parsing/function/index.js.map +1 -0
  443. package/dist/parsing/function/to-code-function.d.ts +2 -0
  444. package/dist/parsing/function/to-code-function.d.ts.map +1 -0
  445. package/dist/parsing/function/to-code-function.js +4 -0
  446. package/dist/parsing/function/to-code-function.js.map +1 -0
  447. package/dist/parsing/function/to-value-function.d.ts +4 -0
  448. package/dist/parsing/function/to-value-function.d.ts.map +1 -0
  449. package/dist/parsing/function/to-value-function.js +33 -0
  450. package/dist/parsing/function/to-value-function.js.map +1 -0
  451. package/dist/parsing/ids.js +2 -2
  452. package/dist/parsing/ids.js.map +1 -1
  453. package/dist/parsing/imports.d.ts +4 -0
  454. package/dist/parsing/imports.d.ts.map +1 -1
  455. package/dist/parsing/imports.js +26 -0
  456. package/dist/parsing/imports.js.map +1 -1
  457. package/dist/parsing/jsx-utils.d.ts +1 -0
  458. package/dist/parsing/jsx-utils.d.ts.map +1 -1
  459. package/dist/parsing/jsx-utils.js +3 -0
  460. package/dist/parsing/jsx-utils.js.map +1 -1
  461. package/dist/parsing/jsx.d.ts +4 -3
  462. package/dist/parsing/jsx.d.ts.map +1 -1
  463. package/dist/parsing/jsx.js +63 -23
  464. package/dist/parsing/jsx.js.map +1 -1
  465. package/dist/parsing/page.d.ts +2 -2
  466. package/dist/parsing/page.d.ts.map +1 -1
  467. package/dist/parsing/page.js +182 -98
  468. package/dist/parsing/page.js.map +1 -1
  469. package/dist/parsing/properties.d.ts +2 -1
  470. package/dist/parsing/properties.d.ts.map +1 -1
  471. package/dist/parsing/properties.js +41 -14
  472. package/dist/parsing/properties.js.map +1 -1
  473. package/dist/parsing/scope.d.ts.map +1 -1
  474. package/dist/parsing/scope.js +51 -5
  475. package/dist/parsing/scope.js.map +1 -1
  476. package/dist/parsing/type-parsing-registry.d.ts +1 -0
  477. package/dist/parsing/type-parsing-registry.d.ts.map +1 -1
  478. package/dist/parsing/type-parsing-registry.js +2 -0
  479. package/dist/parsing/type-parsing-registry.js.map +1 -1
  480. package/dist/parsing/util.d.ts.map +1 -1
  481. package/dist/parsing/util.js +22 -14
  482. package/dist/parsing/util.js.map +1 -1
  483. package/dist/plugin-options.d.ts +1 -0
  484. package/dist/plugin-options.d.ts.map +1 -1
  485. package/dist/plugin-options.js.map +1 -1
  486. package/dist/routing.d.ts.map +1 -1
  487. package/dist/routing.js +81 -34
  488. package/dist/routing.js.map +1 -1
  489. package/dist/sb-scope-manager.d.ts.map +1 -1
  490. package/dist/sb-scope-manager.js +37 -6
  491. package/dist/sb-scope-manager.js.map +1 -1
  492. package/dist/socket-manager.d.ts +3 -1
  493. package/dist/socket-manager.d.ts.map +1 -1
  494. package/dist/socket-manager.js +16 -1
  495. package/dist/socket-manager.js.map +1 -1
  496. package/dist/source-tracker.d.ts +14 -0
  497. package/dist/source-tracker.d.ts.map +1 -1
  498. package/dist/source-tracker.js +34 -28
  499. package/dist/source-tracker.js.map +1 -1
  500. package/dist/sync-service/draft-helpers.d.ts +7 -0
  501. package/dist/sync-service/draft-helpers.d.ts.map +1 -1
  502. package/dist/sync-service/draft-helpers.js +81 -19
  503. package/dist/sync-service/draft-helpers.js.map +1 -1
  504. package/dist/sync-service/index.d.ts +8 -0
  505. package/dist/sync-service/index.d.ts.map +1 -1
  506. package/dist/sync-service/index.js +15 -1
  507. package/dist/sync-service/index.js.map +1 -1
  508. package/dist/sync-service/snapshot/upload-snapshot.d.ts.map +1 -1
  509. package/dist/sync-service/snapshot/upload-snapshot.js.map +1 -1
  510. package/dist/util/ignore-patterns.d.ts +9 -0
  511. package/dist/util/ignore-patterns.d.ts.map +1 -0
  512. package/dist/util/ignore-patterns.js +53 -0
  513. package/dist/util/ignore-patterns.js.map +1 -0
  514. package/package.json +16 -11
  515. package/dist/ai-service/app-interface/source-tracker.d.ts.map +0 -1
  516. package/dist/ai-service/app-interface/source-tracker.js.map +0 -1
  517. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.d.ts +0 -2
  518. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.d.ts.map +0 -1
  519. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.js +0 -6
  520. package/dist/ai-service/prompt-builder-service/static-fragments/library-typedefs/Annotations.js.map +0 -1
  521. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.d.ts +0 -2
  522. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.d.ts.map +0 -1
  523. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js +0 -6
  524. package/dist/ai-service/prompt-builder-service/static-fragments/platform-parts/superblocks-theming.js.map +0 -1
@@ -1,368 +1,372 @@
1
- import { AiGenerationState } from "@superblocksteam/library-shared/types";
2
- import { streamText, smoothStream } from "ai";
1
+ import { hasToolCall, smoothStream } from "ai";
3
2
  import ddTrace from "dd-trace";
4
- import { getErrorMeta, getLogger } from "../../../util/logger.js";
5
- import { Paths, SAVE_LLM_GENERATION_STEPS, SAVE_RAW_LLM_RESPONSE, } from "../../const.js";
6
- import { BoltResultBuffer, BoltResultType } from "../../result-buffer/bolt.js";
7
- import { ApiBuilderToYamlTransformer } from "../../transform/api-builder/to-yaml-transformer.js";
8
- import { applyFileTransformations, matchPath } from "../../transform/shared.js";
9
- import { AGENT_PLANNED, APP_RUNTIME_UPDATED_WITHOUT_EDITS, LLM_ERRORED, LLM_FINISHED, LLM_FINISHED_UNEXPECTEDLY, POST_PROCESSING_ERRORED, } from "../clark-fsm.js";
10
- import { sendChangeInfoHelper } from "../helpers/change-info.js";
11
- import { classificationHelper } from "../helpers/classification.js";
12
- import { sendUserGenerationStateChannel, sendUserMessageChannel, } from "../helpers/peer.js";
13
- import { checkRateLimitHeaders } from "../helpers/rate-limiting.js";
3
+ import { getLogger } from "../../../util/logger.js";
4
+ import { buildTools } from "../../agent/tools.js";
5
+ import { getAppState, processStreamChunk } from "../../agent/utils.js";
6
+ import { DEFAULT_CACHE_PROVIDER_OPTIONS } from "../../const.js";
7
+ import { tracedStreamText, traceWorkflow } from "../../util/ddog-llmobs.js";
8
+ import { processLLMConfig } from "../../util/llm-config-utils.js";
9
+ import { AGENT_PLANNED, APP_RUNTIME_UPDATED_WITHOUT_EDITS, V3_AGENT_FINISHED, } from "../clark-fsm.js";
14
10
  import { transitionFrom } from "../helpers/transition.js";
15
- export const doLLMGenerating = (clark, { appShell, artifactProcessor, templateRenderer, draftInterface, llmProvider, chatSessionStore, }) => {
11
+ import { buildSimplePrompt } from "./simple-prompt-builder.js";
12
+ function formatSummaryForAgents(latestSummary) {
13
+ if (!latestSummary) {
14
+ return null;
15
+ }
16
+ const parts = [];
17
+ if (latestSummary.outcome === "accepted") {
18
+ parts.push(`The user *accepted* the changes associated with the following summary. They have been applied to the application.`);
19
+ }
20
+ else if (latestSummary.outcome === "rejected") {
21
+ parts.push(`The user *rejected* the changes associated with the following summary. The changes were discarded.`);
22
+ }
23
+ if (latestSummary.summary) {
24
+ parts.push(`Summary: ${latestSummary.summary}`);
25
+ }
26
+ if (latestSummary.goals && latestSummary.goals.length > 0) {
27
+ parts.push(`User Goals: ${latestSummary.goals.join(", ")}`);
28
+ }
29
+ if (latestSummary.decisions && latestSummary.decisions.length > 0) {
30
+ parts.push(`Decisions: ${latestSummary.decisions.join(", ")}`);
31
+ }
32
+ if (latestSummary.adviceToAgents) {
33
+ parts.push(`Agent Advice: ${latestSummary.adviceToAgents}`);
34
+ }
35
+ if (latestSummary.relevantFilePaths &&
36
+ latestSummary.relevantFilePaths.length > 0) {
37
+ parts.push(`Relevant files:\n${latestSummary.relevantFilePaths
38
+ .map((path) => `- ${path}`)
39
+ .join("\n")}`);
40
+ }
41
+ return parts.length > 0 ? parts.join("\n\n") : null;
42
+ }
43
+ export const doLLMGenerating = (clark, services) => {
44
+ const { chatSessionStore } = services;
16
45
  const transitionTo = transitionFrom(clark);
17
- const sendUserMessage = sendUserMessageChannel(clark, chatSessionStore);
18
- const sendUserGenerationState = sendUserGenerationStateChannel(clark);
19
- const sendChangeInfo = sendChangeInfoHelper(clark, chatSessionStore);
20
- const { isFullAppOrBroadUpdate } = classificationHelper(clark);
21
- const logger = getLogger();
22
- const matchGeneratedApi = matchPath(Paths.GeneratedApis);
23
- const { llmobs } = ddTrace;
24
46
  return async ({ event }) => {
25
47
  switch (event.type) {
26
48
  case AGENT_PLANNED: {
27
- const { systemMessages, userPrompt, debuggingPrompt: debugging, classification, } = event;
49
+ const { userPrompt, promptContext } = event;
28
50
  const { abortController } = clark.context;
29
- const showControlMessages = isFullAppOrBroadUpdate();
30
51
  await chatSessionStore.getMessages();
31
- const historyMessages = classification !== "specific_edit"
32
- ? // only include history for non-specific edits
33
- (chatSessionStore.getRecentExchanges() ?? [])
34
- : [];
35
- if (debugging) {
36
- // include the user's original prompt; userPrompt contains the debugging instructions
37
- const lastUserMessage = chatSessionStore.getLastUserMessage();
38
- if (lastUserMessage && lastUserMessage.content !== userPrompt) {
39
- historyMessages.push({
40
- role: "user",
41
- content: lastUserMessage.content,
42
- });
43
- }
44
- }
52
+ const latestSummary = await chatSessionStore.getLatestSummary();
53
+ const focusedEntities = promptContext?.entities
54
+ // tagged integrations are ignored
55
+ ?.filter((e) => e.type !== "integration")
56
+ .map((e) => `- ${e.id} (${e.type})`)
57
+ .join("\n");
58
+ const appState = await getAppState(services, promptContext);
59
+ const systemPrompt = buildSimplePrompt();
45
60
  const messages = [
46
- ...systemMessages.map((msg) => ({
47
- role: msg.role,
48
- content: msg.content,
49
- })),
50
- ...historyMessages,
51
- ...(debugging
61
+ {
62
+ role: "system",
63
+ content: systemPrompt,
64
+ ...(!clark.context.disablePromptCaching && {
65
+ providerOptions: DEFAULT_CACHE_PROVIDER_OPTIONS,
66
+ }),
67
+ },
68
+ ...(latestSummary
52
69
  ? [
53
70
  {
54
71
  role: "user",
55
- content: debugging,
72
+ content: `Reference the context from the previous exchange with the user, if relevant:\n\n${formatSummaryForAgents(latestSummary)}`,
56
73
  },
57
74
  ]
58
- : [
75
+ : []),
76
+ {
77
+ role: "user",
78
+ content: `<current_app_state>\nHere is metadata about the current state of the users's application.\n\`\`\`json\n${JSON.stringify(appState)}\n\`\`\`\n</current_app_state>`,
79
+ },
80
+ ...(focusedEntities
81
+ ? [
59
82
  {
60
83
  role: "user",
61
- content: userPrompt,
84
+ content: `<focused_entities>\nThe user has focused the editor on the following entities corresponding to the current app state. Attempt to constrain your actions to affect only these entities.\n${focusedEntities}\n</focused_entities>`,
62
85
  },
63
- ]),
86
+ ]
87
+ : []),
88
+ {
89
+ role: "user",
90
+ content: userPrompt,
91
+ },
64
92
  ];
65
- const model = llmProvider.modelForClassification(classification);
66
- await llmobs.wrap({
67
- kind: "llm",
68
- name: "doLLMGenerating",
69
- modelName: model.modelId,
70
- modelProvider: model.provider,
71
- }, async () => {
72
- llmobs.annotate({
73
- tags: {
74
- classification,
75
- },
76
- });
77
- // Store span context so we can run an eval on it later
78
- clark.updateContext({
79
- spanContext: llmobs.exportSpan(),
93
+ const model = services.llmProvider.modelForClassification("broad_edit");
94
+ // Process LLM configuration up front so we can log it once at the top
95
+ const llmConfig = clark.context.llmConfig;
96
+ const disabledTools = clark.context.llmConfig?.disabledTools;
97
+ const { headers, thinkingEnabled, thinkingBudgetTokens, interleavedThinking, } = processLLMConfig(llmConfig, 5000, // default budget tokens
98
+ `LLM Generating (model=${model.modelId}, disabledTools=${disabledTools?.length ? disabledTools.join(",") : "none"})`);
99
+ const conversationId = Date.now();
100
+ const startTimestamp = new Date().toISOString();
101
+ const runTimestamp = clark.context.runTimestamp || startTimestamp;
102
+ // Initialize log content
103
+ const logRef = {
104
+ content: `=== LLM CONVERSATION START [${conversationId}] ===\n`,
105
+ };
106
+ logRef.content += `Timestamp: ${startTimestamp}\n`;
107
+ logRef.content += `Model: ${model.modelId}\n`;
108
+ // Log AI provider config
109
+ logRef.content += `Provider Config: provider=${llmConfig?.provider || "anthropic (default)"}, thinking=${thinkingEnabled}, budget=${thinkingBudgetTokens}, interleaved=${interleavedThinking}`;
110
+ if (disabledTools?.length) {
111
+ logRef.content += `, disabledTools=${disabledTools.join(",")}`;
112
+ }
113
+ if (headers && Object.keys(headers).length > 0) {
114
+ logRef.content += `, headers=${JSON.stringify(headers)}`;
115
+ }
116
+ logRef.content += `--- INPUT MESSAGES ---\n`;
117
+ logRef.content += `[SYSTEM] ${systemPrompt}\n\n`;
118
+ messages.forEach((msg, _index) => {
119
+ logRef.content += `[${msg.role.toUpperCase()}] ${msg.content}\n\n`;
120
+ });
121
+ // Note: Input token count will be logged once LLM call begins
122
+ const tools = buildTools(clark, services, promptContext, logRef, disabledTools);
123
+ await traceWorkflow("doLLMGenerating", async () => {
124
+ let stepCount = 0;
125
+ const llmConfig = clark.context.llmConfig;
126
+ const { providerOptions, headers } = processLLMConfig(llmConfig, 5000, `LLM Generating (model=${model.modelId}, disabledTools=${disabledTools?.length ? disabledTools.join(",") : "none"})`);
127
+ // Track cumulative token usage across all steps
128
+ let totalInputTokens = 0;
129
+ let totalOutputTokens = 0;
130
+ let totalCachedTokens = 0;
131
+ services.clarkProfiler.startLLMWaiting({
132
+ messages: messages,
133
+ model: model.modelId,
80
134
  });
81
- const fullStream = streamText({
135
+ let firstTokenReceived = false;
136
+ let thinkingSpanActive = false;
137
+ let textSpanActive = false;
138
+ const allReasoningDeltas = [];
139
+ let currentStepReasoningDeltas = [];
140
+ let currentStepTextDeltas = [];
141
+ const build = tracedStreamText({
142
+ abortSignal: abortController?.signal,
82
143
  model,
144
+ providerOptions,
145
+ headers,
146
+ experimental_transform: [smoothStream({ chunking: "line" })],
83
147
  messages,
84
- experimental_transform: smoothStream(),
85
- abortSignal: abortController?.signal,
86
- }).fullStream;
87
- let pendingArtifacts = false;
88
- let artifactChunk = null;
89
- let stepId = null;
90
- const flushedAfterArtifacts = [];
91
- // Raw LLM response text logging
92
- let rawLLMResponse = "";
93
- // the buffer collects the text and artifact chunks and
94
- // yields side effects on flush or when a new chunk type is detected
95
- const resultBuffer = new BoltResultBuffer({
96
- onTypeChange: (type) => {
97
- void (async () => {
98
- switch (type) {
99
- case BoltResultType.Artifact:
100
- if (!pendingArtifacts &&
101
- !debugging &&
102
- showControlMessages) {
103
- void sendUserMessage({
104
- type: "text",
105
- group: "clark",
106
- text: "Passing it over to the Engineer Agent to start building!",
107
- });
108
- void sendUserMessage({
109
- type: "text",
110
- group: "agent-engineer",
111
- text: "Great, thanks Clark - let's get to work! You can track my progress below.",
112
- }, 750);
113
- }
114
- pendingArtifacts = true;
115
- break;
116
- case BoltResultType.Text:
117
- void sendUserMessage({
118
- type: "control",
119
- group: "clark",
120
- status: "ready",
121
- text: "Generating…",
122
- });
123
- break;
124
- }
125
- })();
126
- },
127
- onFlush: (type, text) => {
128
- void (async () => {
129
- switch (type) {
130
- case BoltResultType.Text:
131
- if (!debugging) {
132
- if (artifactChunk) {
133
- flushedAfterArtifacts.push([type, text]);
134
- }
135
- else {
136
- void sendUserMessage({ text, type: "text" });
137
- }
138
- }
139
- break;
140
- case BoltResultType.Think:
141
- if (artifactChunk) {
142
- flushedAfterArtifacts.push([type, text]);
143
- }
144
- else {
145
- void sendUserMessage({ text, type: "reasoning" });
146
- }
147
- break;
148
- case BoltResultType.Artifact: {
149
- if (!artifactChunk) {
150
- artifactChunk = text;
151
- }
152
- break;
153
- }
154
- }
155
- })();
156
- },
157
- onPendingFile: (filePath) => {
158
- void (async () => {
159
- void sendChangeInfo({
160
- type: "pending",
161
- filePath,
148
+ tools,
149
+ stopWhen: hasToolCall("build_finalize"),
150
+ onChunk: (chunkData) => {
151
+ if (!firstTokenReceived) {
152
+ firstTokenReceived = true;
153
+ services.clarkProfiler.startLLMStreaming({
154
+ firstChunk: chunkData.chunk.type === "text-delta"
155
+ ? chunkData.chunk.text
156
+ : `[${chunkData.chunk.type}]`,
162
157
  });
163
- })();
164
- },
165
- onFlushFile: (filePath, buffer) => {
166
- void (async () => {
167
- void sendChangeInfo({
168
- type: "ready",
169
- filePath,
170
- });
171
- const generatedFileDfd = (async () => {
172
- const files = artifactProcessor.extractFileArtifacts(buffer);
173
- return files.find((file) => file.filePath === filePath);
174
- })();
175
- if (SAVE_LLM_GENERATION_STEPS) {
176
- const generatedFile = await generatedFileDfd;
177
- if (!generatedFile) {
178
- return;
179
- }
180
- await appShell.saveGeneratedArtifact(generatedFile, stepId ?? "unknown-step-id", clark.context.runTimestamp ?? "unknown-run-timestamp");
181
- }
182
- if (!matchGeneratedApi(filePath).matched) {
183
- return;
184
- }
185
- const generatedFile = await generatedFileDfd;
186
- if (!generatedFile) {
187
- return;
188
- }
189
- try {
190
- const [apiYaml] = await applyFileTransformations([generatedFile], [
191
- new ApiBuilderToYamlTransformer({
192
- skipCleanup: true,
193
- templateRenderer,
194
- }),
195
- ]);
196
- if (apiYaml) {
197
- await draftInterface.createDraftFile(apiYaml.filePath, apiYaml.content);
198
- }
158
+ }
159
+ if (chunkData.chunk.type === "reasoning-delta") {
160
+ const thinkingTrack = "thinking";
161
+ services.clarkProfiler
162
+ .getProfiler()
163
+ .createTrack(thinkingTrack, "AI Thinking/Reasoning", "llm");
164
+ allReasoningDeltas.push(chunkData.chunk.text);
165
+ currentStepReasoningDeltas.push(chunkData.chunk.text);
166
+ if (!thinkingSpanActive) {
167
+ thinkingSpanActive = true;
168
+ services.clarkProfiler
169
+ .getProfiler()
170
+ .startFrame(`Thinking Step ${stepCount + 1}`, thinkingTrack, {
171
+ stepNumber: stepCount + 1,
172
+ chunkType: chunkData.chunk.type,
173
+ });
199
174
  }
200
- catch (error) {
201
- logger.error("[ai-service] Error flushing file:", getErrorMeta(error));
202
- void transitionTo({
203
- type: POST_PROCESSING_ERRORED,
204
- error: error instanceof Error
205
- ? error
206
- : new Error("Unknown error"),
175
+ }
176
+ if (chunkData.chunk.type === "text-delta") {
177
+ const textTrack = "text_generation";
178
+ services.clarkProfiler
179
+ .getProfiler()
180
+ .createTrack(textTrack, "Text Generation", "llm");
181
+ currentStepTextDeltas.push(chunkData.chunk.text);
182
+ if (!textSpanActive) {
183
+ textSpanActive = true;
184
+ services.clarkProfiler
185
+ .getProfiler()
186
+ .startFrame(`Text Generation Step ${stepCount + 1}`, textTrack, {
187
+ stepNumber: stepCount + 1,
188
+ firstTextDelta: chunkData.chunk.text.slice(0, 50) +
189
+ (chunkData.chunk.text.length > 50 ? "..." : ""),
207
190
  });
208
191
  }
209
- })();
192
+ }
210
193
  },
211
- });
212
- // process stream. in general this should be agnostic to the bolt-oriented prompt
213
- for await (const chunk of fullStream) {
214
- switch (chunk.type) {
215
- case "text-delta":
216
- if (SAVE_LLM_GENERATION_STEPS) {
217
- rawLLMResponse += chunk.textDelta;
194
+ onStepFinish: async (step) => {
195
+ stepCount++;
196
+ const stepTimestamp = new Date().toISOString();
197
+ logRef.content += `--- OUTPUT STEP ${stepCount} [${stepTimestamp}] ---\n`;
198
+ if (step.reasoning && thinkingSpanActive) {
199
+ const thinkingTrack = "thinking";
200
+ services.clarkProfiler
201
+ .getProfiler()
202
+ .updateActiveFrameArgs(thinkingTrack, {
203
+ completeReasoningText: currentStepReasoningDeltas.join(" "),
204
+ reasoningLength: step.reasoning.length,
205
+ stepComplete: true,
206
+ });
207
+ services.clarkProfiler.getProfiler().endFrame(thinkingTrack);
208
+ thinkingSpanActive = false;
209
+ currentStepReasoningDeltas = [];
210
+ }
211
+ // Log token usage for this step and accumulate totals
212
+ if (step.usage) {
213
+ const stepInputTokens = step.usage.inputTokens ?? 0;
214
+ const stepOutputTokens = step.usage.outputTokens ?? 0;
215
+ const stepCachedTokens = step.usage.cachedInputTokens ?? 0;
216
+ // Accumulate totals
217
+ totalInputTokens += stepInputTokens;
218
+ totalOutputTokens += stepOutputTokens;
219
+ totalCachedTokens += stepCachedTokens;
220
+ logRef.content += `[TOKEN USAGE] Input: ${stepInputTokens}, Output: ${stepOutputTokens}, Total: ${step.usage.totalTokens ?? 0}`;
221
+ if (stepCachedTokens) {
222
+ logRef.content += `, Cached: ${stepCachedTokens}`;
218
223
  }
219
- resultBuffer.add(chunk.textDelta);
220
- resultBuffer.maybeFlush();
221
- break;
222
- case "reasoning":
223
- // note: unused; the system prompt encourages <think> tags
224
- break;
225
- case "file":
226
- // note: unused; the system prompt encourages <boltArtifact> tags
227
- break;
228
- case "step-start":
229
- stepId = chunk.messageId;
230
- logger.debug("[ai-service] Step started:", chunk.messageId);
231
- // Save input messages to the same folder as other artifacts
232
- if (SAVE_LLM_GENERATION_STEPS) {
224
+ logRef.content += `\n`;
225
+ }
226
+ if (step.reasoning) {
227
+ const reasoningLines = [
228
+ "[REASONING]",
229
+ ...step.reasoning.map(({ text }) => text),
230
+ "",
231
+ ];
232
+ logRef.content += reasoningLines.join("\n");
233
+ }
234
+ if (step.text && textSpanActive) {
235
+ const textTrack = "text_generation";
236
+ services.clarkProfiler
237
+ .getProfiler()
238
+ .updateActiveFrameArgs(textTrack, {
239
+ completeTextContent: currentStepTextDeltas.join(""),
240
+ finalText: step.text,
241
+ textLength: step.text.length,
242
+ stepComplete: true,
243
+ });
244
+ services.clarkProfiler.getProfiler().endFrame(textTrack);
245
+ textSpanActive = false;
246
+ currentStepTextDeltas = [];
247
+ }
248
+ if (step.text) {
249
+ logRef.content += `[ASSISTANT TEXT] ${step.text}\n`;
250
+ void services.chatSessionStore.recordAssistant({
251
+ type: "text",
252
+ text: step.text,
253
+ });
254
+ }
255
+ const toolsCalled = step.content
256
+ .filter((c) => c.type === "tool-result")
257
+ .map((c) => ({
258
+ toolName: c.toolName,
259
+ input: JSON.stringify(c.input),
260
+ output: JSON.stringify(c.output, null, 2),
261
+ }));
262
+ if (toolsCalled.length > 0) {
263
+ logRef.content += `[TOOLS CALLED]\n`;
264
+ toolsCalled.forEach((tool, idx) => {
265
+ logRef.content += ` Tool ${idx + 1}: ${tool.toolName}\n`;
266
+ logRef.content += ` Input: ${tool.input}\n`;
267
+ logRef.content += ` Output: ${tool.output}\n`;
268
+ });
269
+ toolsCalled.forEach((tool, idx) => {
270
+ let parsedInput, parsedOutput;
233
271
  try {
234
- await appShell.saveGeneratedArtifact({
235
- type: "file",
236
- filePath: "input-messages.json",
237
- content: JSON.stringify(messages, null, 2),
238
- }, stepId, clark.context.runTimestamp ?? "unknown-run-timestamp");
239
- logger.debug(`[ai-service] Input messages saved to generation folder for step: ${stepId}`);
272
+ parsedInput = JSON.parse(tool.input);
240
273
  }
241
- catch (error) {
242
- logger.error("[ai-service] Failed to save input messages:", getErrorMeta(error));
274
+ catch {
275
+ parsedInput = tool.input;
243
276
  }
244
- }
245
- break;
246
- case "step-finish":
247
- resultBuffer.maybeFlush(true);
248
- logger.debug("[ai-service] Step finished:", chunk.messageId);
249
- break;
250
- case "error": {
251
- // TODO(saksham, omar): remove this once we have a clear picture of the errors we are dealing with
252
- console.error(typeof chunk.error === "object" && chunk.error != null
253
- ? JSON.stringify(chunk.error)
254
- : chunk.error);
255
- logger.error("[ai-service] LLM error chunk:", getErrorMeta(chunk.error));
256
- let error = {
257
- type: "unknown",
258
- };
259
- if (typeof chunk.error === "object" &&
260
- chunk.error !== null &&
261
- "type" in chunk.error &&
262
- typeof chunk.error.type === "string") {
263
- error = chunk.error;
264
- }
265
- const chunkError = chunk.error;
266
- if (chunkError?.lastError &&
267
- chunkError.lastError.data?.error) {
268
- error = chunkError.lastError.data?.error;
269
- }
270
- void transitionTo({
271
- type: LLM_ERRORED,
272
- error: error,
273
- });
274
- return;
275
- }
276
- case "finish": {
277
- // safely set metrics from usage for trace span
278
- const usage = chunk?.usage;
279
- const metrics = usage &&
280
- typeof usage.promptTokens === "number" &&
281
- typeof usage.completionTokens === "number" &&
282
- typeof usage.totalTokens === "number"
283
- ? {
284
- inputTokens: usage.promptTokens,
285
- outputTokens: usage.completionTokens,
286
- totalTokens: usage.totalTokens,
277
+ try {
278
+ parsedOutput = JSON.parse(tool.output);
287
279
  }
288
- : undefined;
289
- llmobs.annotate({
290
- inputData: messages,
291
- outputData: { content: rawLLMResponse, role: "assistant" },
292
- metrics,
293
- });
294
- if (chunk.finishReason !== "stop") {
295
- const rateLimitErrorMsg = checkRateLimitHeaders("response" in chunk ? chunk.response?.headers : undefined);
296
- if (rateLimitErrorMsg) {
297
- logger.error(`[ai-service] Rate limit detected: ${rateLimitErrorMsg}`);
280
+ catch {
281
+ parsedOutput = tool.output;
298
282
  }
299
- void transitionTo({
300
- type: LLM_FINISHED_UNEXPECTEDLY,
301
- finishReason: chunk.finishReason,
302
- });
303
- abortController?.abort();
304
- return;
305
- }
306
- else if (!pendingArtifacts || !artifactChunk) {
307
- void transitionTo({
308
- type: APP_RUNTIME_UPDATED_WITHOUT_EDITS,
283
+ services.clarkProfiler
284
+ .getProfiler()
285
+ .addInstantEvent(`Tool Call: ${tool.toolName}`, "llm", {
286
+ step: stepCount,
287
+ toolIndex: idx + 1,
288
+ toolName: tool.toolName,
289
+ input: parsedInput,
290
+ output: parsedOutput,
291
+ inputSize: tool.input.length,
292
+ outputSize: tool.output.length,
309
293
  });
310
- // TODO: do this in the state handler
311
- void sendUserGenerationState({
312
- state: AiGenerationState.COMPLETED,
313
- hasSuggestions: false,
314
- });
315
- }
316
- else {
317
- const generated = artifactProcessor.extractFileArtifacts(artifactChunk);
318
- const summaryMessages = flushedAfterArtifacts
319
- .filter(([type]) => type === BoltResultType.Text)
320
- .map(([_, content]) => ({
321
- role: "assistant",
322
- isDebugging: !!debugging,
323
- content,
324
- }));
325
- clark.updateContext({
326
- summaryMessages: clark.context.summaryMessages
327
- ? [...clark.context.summaryMessages, ...summaryMessages]
328
- : summaryMessages,
329
- });
330
- void transitionTo({
331
- type: LLM_FINISHED,
332
- files: generated,
333
- });
334
- }
335
- break;
294
+ });
336
295
  }
337
- case "tool-call":
338
- case "tool-call-streaming-start":
339
- case "tool-call-delta":
340
- case "reasoning-signature":
341
- case "redacted-reasoning":
342
- case "source":
343
- break;
344
- default:
345
- logger.error(`[ai-service] Unhandled chunk type: ${chunk.type}`);
346
- break;
347
- }
296
+ logRef.content += `\n`;
297
+ },
298
+ });
299
+ for await (const chunk of build.fullStream) {
300
+ await processStreamChunk(chunk, clark, logRef);
301
+ }
302
+ if (firstTokenReceived) {
303
+ services.clarkProfiler.endFrame();
304
+ }
305
+ services.clarkProfiler.endFrame();
306
+ if (thinkingSpanActive) {
307
+ services.clarkProfiler.getProfiler().endFrame("thinking");
308
+ }
309
+ if (textSpanActive) {
310
+ services.clarkProfiler.getProfiler().endFrame("text_generation");
348
311
  }
349
- resultBuffer.maybeFlush(true);
350
- // Save raw LLM response using existing debug infrastructure
351
- if (SAVE_RAW_LLM_RESPONSE && rawLLMResponse.length > 0) {
352
- try {
353
- logger.debug(`[ai-service] Raw LLM response length: ${rawLLMResponse.length} characters`);
354
- void appShell.saveGeneratedArtifact({
355
- type: "file",
356
- filePath: "raw-llm-response.txt",
357
- content: rawLLMResponse,
358
- }, stepId ?? "unknown-step-id", clark.context.runTimestamp ?? "unknown-run-timestamp");
359
- logger.info(`[ai-service] Raw LLM response saved to debug folder`);
360
- }
361
- catch (error) {
362
- logger.error("[ai-service] Failed to save raw LLM response:", getErrorMeta(error));
363
- }
312
+ const usage = await build.usage;
313
+ const { llmobs } = ddTrace;
314
+ llmobs.annotate({
315
+ inputData: JSON.stringify(messages),
316
+ outputData: JSON.stringify(build.fullStream),
317
+ metrics: {
318
+ inputTokens: usage?.inputTokens ?? 0,
319
+ outputTokens: usage?.outputTokens ?? 0,
320
+ totalTokens: usage?.totalTokens ?? 0,
321
+ cachedInputTokens: usage?.cachedInputTokens ?? 0,
322
+ },
323
+ metadata: {
324
+ request: build.request,
325
+ },
326
+ });
327
+ const endTimestamp = new Date().toISOString();
328
+ logRef.content += `=== LLM CONVERSATION END [${conversationId}] ===\n`;
329
+ logRef.content += `End Timestamp: ${endTimestamp}\n`;
330
+ logRef.content += `Total Steps: ${stepCount}\n`;
331
+ // Log final token usage summary using accumulated totals
332
+ const finalTotalTokens = totalInputTokens + totalOutputTokens;
333
+ logRef.content += `[TOTAL TOKEN USAGE] Input: ${totalInputTokens}, Output: ${totalOutputTokens}, Total: ${finalTotalTokens}`;
334
+ if (totalCachedTokens > 0) {
335
+ logRef.content += `, Cached: ${totalCachedTokens}`;
336
+ }
337
+ logRef.content += `\n`;
338
+ // Save the complete log using saveGeneratedArtifact
339
+ try {
340
+ const logArtifact = {
341
+ type: "file",
342
+ filePath: `llm-conversation-${conversationId}.log`,
343
+ content: logRef.content,
344
+ };
345
+ const stepId = `llm-conversation-${conversationId}`;
346
+ await services.appShell.saveGeneratedArtifact(logArtifact, stepId, runTimestamp);
347
+ getLogger().debug("LLM conversation log saved");
348
+ }
349
+ catch (error) {
350
+ getLogger().error("Failed to save LLM conversation log", {
351
+ error: {
352
+ kind: "SaveLogError",
353
+ message: error instanceof Error ? error.message : String(error),
354
+ stack: error instanceof Error ? error.stack : undefined,
355
+ },
356
+ });
357
+ }
358
+ const hasLocalDraft = await services.draftInterface.hasLocalDraftChanges();
359
+ if (hasLocalDraft) {
360
+ void transitionTo({
361
+ type: V3_AGENT_FINISHED,
362
+ });
363
+ }
364
+ else {
365
+ void transitionTo({
366
+ type: APP_RUNTIME_UPDATED_WITHOUT_EDITS,
367
+ });
364
368
  }
365
- })();
369
+ });
366
370
  }
367
371
  }
368
372
  };