genaicode 0.14.2 → 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 (283) hide show
  1. package/README.md +0 -7
  2. package/dist/ai-service/ai-studio.d.ts +2 -18
  3. package/dist/ai-service/ai-studio.js +87 -31
  4. package/dist/ai-service/ai-studio.js.map +1 -1
  5. package/dist/ai-service/anthropic.js +87 -45
  6. package/dist/ai-service/anthropic.js.map +1 -1
  7. package/dist/ai-service/common-types.d.ts +36 -3
  8. package/dist/ai-service/common-types.js +0 -2
  9. package/dist/ai-service/common-types.js.map +1 -1
  10. package/dist/ai-service/common.js +0 -2
  11. package/dist/ai-service/common.js.map +1 -1
  12. package/dist/ai-service/files-api.d.ts +33 -0
  13. package/dist/ai-service/files-api.js +239 -0
  14. package/dist/ai-service/files-api.js.map +1 -0
  15. package/dist/ai-service/github-models.js +0 -2
  16. package/dist/ai-service/github-models.js.map +1 -1
  17. package/dist/ai-service/local-llm.js +0 -4
  18. package/dist/ai-service/local-llm.js.map +1 -1
  19. package/dist/ai-service/openai-responses.js +62 -16
  20. package/dist/ai-service/openai-responses.js.map +1 -1
  21. package/dist/ai-service/openai.js +157 -54
  22. package/dist/ai-service/openai.js.map +1 -1
  23. package/dist/ai-service/service-configurations-types.d.ts +0 -1
  24. package/dist/ai-service/service-configurations.js +19 -20
  25. package/dist/ai-service/service-configurations.js.map +1 -1
  26. package/dist/ai-service/vertex-ai.js +2 -1
  27. package/dist/ai-service/vertex-ai.js.map +1 -1
  28. package/dist/cli/cli-params.js +2 -2
  29. package/dist/cli/cli-params.js.map +1 -1
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/main/codegen-types.d.ts +2 -2
  34. package/dist/main/codegen.d.ts +1 -3
  35. package/dist/main/codegen.js +2 -19
  36. package/dist/main/codegen.js.map +1 -1
  37. package/dist/main/common/content-bus-types.d.ts +14 -0
  38. package/dist/main/common/content-bus.d.ts +1 -1
  39. package/dist/main/common/content-bus.js +21 -3
  40. package/dist/main/common/content-bus.js.map +1 -1
  41. package/dist/main/common/user-actions.d.ts +1 -1
  42. package/dist/main/config-types.d.ts +0 -3
  43. package/dist/main/config-types.js.map +1 -1
  44. package/dist/main/config.js +1 -1
  45. package/dist/main/config.js.map +1 -1
  46. package/dist/main/generate-content-functions.d.ts +3 -0
  47. package/dist/main/generate-content-functions.js +19 -0
  48. package/dist/main/generate-content-functions.js.map +1 -0
  49. package/dist/main/plugin-loader.d.ts +1 -1
  50. package/dist/main/ui/backend/endpoints/config-endpoint.js +1 -1
  51. package/dist/main/ui/backend/endpoints/config-endpoint.js.map +1 -1
  52. package/dist/main/ui/backend/endpoints/edit-message-endpoint.js +9 -6
  53. package/dist/main/ui/backend/endpoints/edit-message-endpoint.js.map +1 -1
  54. package/dist/main/ui/backend/endpoints/generate-content-endpoint.js +2 -4
  55. package/dist/main/ui/backend/endpoints/generate-content-endpoint.js.map +1 -1
  56. package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js +1 -1
  57. package/dist/main/ui/backend/endpoints/interrupt-execution-endpoint.js.map +1 -1
  58. package/dist/main/ui/backend/service.d.ts +5 -4
  59. package/dist/main/ui/backend/service.js +54 -28
  60. package/dist/main/ui/backend/service.js.map +1 -1
  61. package/dist/main/ui/common/api-types.d.ts +1 -2
  62. package/dist/main/ui/common/api-types.js.map +1 -1
  63. package/dist/main/ui/frontend/assets/index-C_k1AhO2.js +3445 -0
  64. package/dist/main/ui/frontend/index.html +1 -1
  65. package/dist/prompt/dynamic-function-generator.d.ts +2 -0
  66. package/dist/prompt/dynamic-function-generator.js +58 -0
  67. package/dist/prompt/dynamic-function-generator.js.map +1 -0
  68. package/dist/prompt/function-calling.js +4 -5
  69. package/dist/prompt/function-calling.js.map +1 -1
  70. package/dist/prompt/function-defs/code-execution.d.ts +7 -0
  71. package/dist/prompt/function-defs/code-execution.js +27 -0
  72. package/dist/prompt/function-defs/code-execution.js.map +1 -0
  73. package/dist/prompt/function-defs/conversation-graph.d.ts +1 -1
  74. package/dist/prompt/function-defs/conversation-graph.js +1 -1
  75. package/dist/prompt/function-defs/conversation-graph.js.map +1 -1
  76. package/dist/prompt/function-defs/iterate.d.ts +20 -0
  77. package/dist/prompt/function-defs/iterate.js +373 -0
  78. package/dist/prompt/function-defs/iterate.js.map +1 -0
  79. package/dist/prompt/prompt-service.js +6 -6
  80. package/dist/prompt/prompt-service.js.map +1 -1
  81. package/dist/prompt/steps/step-codegen-planning.js +6 -2
  82. package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
  83. package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.d.ts +7 -0
  84. package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.js +301 -0
  85. package/dist/prompt/steps/step-iterate/handlers/container-task/command-execution-loop.js.map +1 -0
  86. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.d.ts +4 -0
  87. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.js +49 -0
  88. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/complete-task.js.map +1 -0
  89. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.d.ts +4 -0
  90. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.js +190 -0
  91. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-from-container.js.map +1 -0
  92. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.d.ts +4 -0
  93. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.js +139 -0
  94. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/copy-to-container.js.map +1 -0
  95. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.d.ts +10 -0
  96. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.js +93 -0
  97. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/edit-file.js.map +1 -0
  98. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.d.ts +4 -0
  99. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.js +72 -0
  100. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/fail-task.js.map +1 -0
  101. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.d.ts +10 -0
  102. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.js +125 -0
  103. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/gain-knowledge.js.map +1 -0
  104. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.d.ts +19 -0
  105. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js +33 -0
  106. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/interrupt-controller.js.map +1 -0
  107. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.d.ts +8 -0
  108. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.js +85 -0
  109. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/query-knowledge.js.map +1 -0
  110. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.d.ts +6 -0
  111. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.js +122 -0
  112. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/request-secret.js.map +1 -0
  113. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.d.ts +7 -0
  114. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.js +146 -0
  115. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/run-command.js.map +1 -0
  116. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.d.ts +4 -0
  117. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.js +56 -0
  118. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/send-message.js.map +1 -0
  119. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.d.ts +4 -0
  120. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.js +56 -0
  121. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/set-execution-plan.js.map +1 -0
  122. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.d.ts +4 -0
  123. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.js +39 -0
  124. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/update-execution-plan.js.map +1 -0
  125. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.d.ts +10 -0
  126. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.js +95 -0
  127. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/view-file.js.map +1 -0
  128. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.d.ts +2 -0
  129. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.js +96 -0
  130. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/web-search.js.map +1 -0
  131. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.d.ts +4 -0
  132. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.js +123 -0
  133. package/dist/prompt/steps/step-iterate/handlers/container-task/commands/wrap-context.js.map +1 -0
  134. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.d.ts +11 -0
  135. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.js +50 -0
  136. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-registry.js.map +1 -0
  137. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.d.ts +28 -0
  138. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.js +2 -0
  139. package/dist/prompt/steps/step-iterate/handlers/container-task/container-commands-types.js.map +1 -0
  140. package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.d.ts +2 -0
  141. package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.js +202 -0
  142. package/dist/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.js.map +1 -0
  143. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.d.ts +4 -0
  144. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.js +15 -0
  145. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.js.map +1 -0
  146. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.d.ts +50 -0
  147. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.js +358 -0
  148. package/dist/prompt/steps/step-iterate/handlers/container-task/utils/docker-utils.js.map +1 -0
  149. package/dist/prompt/steps/step-iterate/handlers/file-request-utils.d.ts +47 -0
  150. package/dist/prompt/steps/step-iterate/handlers/file-request-utils.js +114 -0
  151. package/dist/prompt/steps/step-iterate/handlers/file-request-utils.js.map +1 -0
  152. package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.d.ts +1 -0
  153. package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.js +133 -0
  154. package/dist/prompt/steps/step-iterate/handlers/handle-code-execution.js.map +1 -0
  155. package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.d.ts +4 -0
  156. package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.js +177 -0
  157. package/dist/prompt/steps/step-iterate/handlers/handle-code-generation.js.map +1 -0
  158. package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.d.ts +20 -0
  159. package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.js +305 -0
  160. package/dist/prompt/steps/step-iterate/handlers/handle-compound-action.js.map +1 -0
  161. package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.d.ts +2 -0
  162. package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.js +40 -0
  163. package/dist/prompt/steps/step-iterate/handlers/handle-confirm-code-generation.js.map +1 -0
  164. package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.d.ts +2 -0
  165. package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.js +35 -0
  166. package/dist/prompt/steps/step-iterate/handlers/handle-context-compression.js.map +1 -0
  167. package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.d.ts +2 -0
  168. package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.js +34 -0
  169. package/dist/prompt/steps/step-iterate/handlers/handle-context-optimization.js.map +1 -0
  170. package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.d.ts +11 -0
  171. package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.js +503 -0
  172. package/dist/prompt/steps/step-iterate/handlers/handle-conversation-graph.js.map +1 -0
  173. package/dist/prompt/steps/step-iterate/handlers/handle-create-file.d.ts +2 -0
  174. package/dist/prompt/steps/step-iterate/handlers/handle-create-file.js +159 -0
  175. package/dist/prompt/steps/step-iterate/handlers/handle-create-file.js.map +1 -0
  176. package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.d.ts +2 -0
  177. package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.js +30 -0
  178. package/dist/prompt/steps/step-iterate/handlers/handle-end-conversation.js.map +1 -0
  179. package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.d.ts +2 -0
  180. package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.js +280 -0
  181. package/dist/prompt/steps/step-iterate/handlers/handle-explore-external-directories.js.map +1 -0
  182. package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.d.ts +8 -0
  183. package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.js +105 -0
  184. package/dist/prompt/steps/step-iterate/handlers/handle-genaicode-help.js.map +1 -0
  185. package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.d.ts +2 -0
  186. package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.js +110 -0
  187. package/dist/prompt/steps/step-iterate/handlers/handle-generate-image.js.map +1 -0
  188. package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.d.ts +6 -0
  189. package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.js +110 -0
  190. package/dist/prompt/steps/step-iterate/handlers/handle-perform-analysis.js.map +1 -0
  191. package/dist/prompt/steps/step-iterate/handlers/handle-project-command.d.ts +2 -0
  192. package/dist/prompt/steps/step-iterate/handlers/handle-project-command.js +280 -0
  193. package/dist/prompt/steps/step-iterate/handlers/handle-project-command.js.map +1 -0
  194. package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.d.ts +9 -0
  195. package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.js +94 -0
  196. package/dist/prompt/steps/step-iterate/handlers/handle-pull-app-context.js.map +1 -0
  197. package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.d.ts +2 -0
  198. package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.js +174 -0
  199. package/dist/prompt/steps/step-iterate/handlers/handle-pull-console-logs.js.map +1 -0
  200. package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.d.ts +9 -0
  201. package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.js +104 -0
  202. package/dist/prompt/steps/step-iterate/handlers/handle-push-app-context.js.map +1 -0
  203. package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.d.ts +2 -0
  204. package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.js +149 -0
  205. package/dist/prompt/steps/step-iterate/handlers/handle-read-external-files.js.map +1 -0
  206. package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.d.ts +7 -0
  207. package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.js +119 -0
  208. package/dist/prompt/steps/step-iterate/handlers/handle-reasoning-inference.js.map +1 -0
  209. package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.d.ts +2 -0
  210. package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.js +100 -0
  211. package/dist/prompt/steps/step-iterate/handlers/handle-remove-files-from-context.js.map +1 -0
  212. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.d.ts +8 -0
  213. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.js +146 -0
  214. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-content.js.map +1 -0
  215. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.d.ts +8 -0
  216. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.js +197 -0
  217. package/dist/prompt/steps/step-iterate/handlers/handle-request-files-fragments.js.map +1 -0
  218. package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.d.ts +3 -0
  219. package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.js +251 -0
  220. package/dist/prompt/steps/step-iterate/handlers/handle-request-git-context.js.map +1 -0
  221. package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.d.ts +2 -0
  222. package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.js +83 -0
  223. package/dist/prompt/steps/step-iterate/handlers/handle-request-permissions.js.map +1 -0
  224. package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.d.ts +2 -0
  225. package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.js +185 -0
  226. package/dist/prompt/steps/step-iterate/handlers/handle-run-bash-command.js.map +1 -0
  227. package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.d.ts +2 -0
  228. package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.js +7 -0
  229. package/dist/prompt/steps/step-iterate/handlers/handle-run-container-task.js.map +1 -0
  230. package/dist/prompt/steps/step-iterate/handlers/handle-search-code.d.ts +2 -0
  231. package/dist/prompt/steps/step-iterate/handlers/handle-search-code.js +96 -0
  232. package/dist/prompt/steps/step-iterate/handlers/handle-search-code.js.map +1 -0
  233. package/dist/prompt/steps/step-iterate/handlers/handle-send-message.d.ts +2 -0
  234. package/dist/prompt/steps/step-iterate/handlers/handle-send-message.js +21 -0
  235. package/dist/prompt/steps/step-iterate/handlers/handle-send-message.js.map +1 -0
  236. package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.d.ts +1 -0
  237. package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.js +72 -0
  238. package/dist/prompt/steps/step-iterate/handlers/handle-structured-question.js.map +1 -0
  239. package/dist/prompt/steps/step-iterate/handlers/handle-update-file.d.ts +2 -0
  240. package/dist/prompt/steps/step-iterate/handlers/handle-update-file.js +161 -0
  241. package/dist/prompt/steps/step-iterate/handlers/handle-update-file.js.map +1 -0
  242. package/dist/prompt/steps/step-iterate/handlers/handle-web-search.d.ts +1 -0
  243. package/dist/prompt/steps/step-iterate/handlers/handle-web-search.js +85 -0
  244. package/dist/prompt/steps/step-iterate/handlers/handle-web-search.js.map +1 -0
  245. package/dist/prompt/steps/step-iterate/iterate-handler.d.ts +4 -0
  246. package/dist/prompt/steps/step-iterate/iterate-handler.js +14 -0
  247. package/dist/prompt/steps/step-iterate/iterate-handler.js.map +1 -0
  248. package/dist/prompt/steps/step-iterate/step-iterate-handlers.d.ts +3 -0
  249. package/dist/prompt/steps/step-iterate/step-iterate-handlers.js +5 -0
  250. package/dist/prompt/steps/step-iterate/step-iterate-handlers.js.map +1 -0
  251. package/dist/prompt/steps/step-iterate/step-iterate-types.d.ts +255 -0
  252. package/dist/prompt/steps/step-iterate/step-iterate-types.js +2 -0
  253. package/dist/prompt/steps/step-iterate/step-iterate-types.js.map +1 -0
  254. package/dist/prompt/steps/step-iterate/step-iterate.d.ts +37 -0
  255. package/dist/prompt/steps/step-iterate/step-iterate.js +132 -0
  256. package/dist/prompt/steps/step-iterate/step-iterate.js.map +1 -0
  257. package/dist/prompt/systemprompt.js +6 -6
  258. package/dist/prompt/systemprompt.js.map +1 -1
  259. package/dist/vite-genaicode/code-transformer.d.ts +5 -0
  260. package/dist/vite-genaicode/code-transformer.js +83 -0
  261. package/dist/vite-genaicode/code-transformer.js.map +1 -0
  262. package/dist/vite-genaicode/console-interceptor.d.ts +19 -6
  263. package/dist/vite-genaicode/console-interceptor.js +45 -13
  264. package/dist/vite-genaicode/console-interceptor.js.map +1 -1
  265. package/dist/vite-genaicode/constants.d.ts +3 -0
  266. package/dist/vite-genaicode/constants.js +4 -0
  267. package/dist/vite-genaicode/constants.js.map +1 -0
  268. package/dist/vite-genaicode/dynamic-function-generator.d.ts +2 -0
  269. package/dist/vite-genaicode/dynamic-function-generator.js +47 -0
  270. package/dist/vite-genaicode/dynamic-function-generator.js.map +1 -0
  271. package/dist/vite-genaicode/html-injector.d.ts +6 -0
  272. package/dist/vite-genaicode/html-injector.js +14 -0
  273. package/dist/vite-genaicode/html-injector.js.map +1 -0
  274. package/dist/vite-genaicode/server-manager.d.ts +26 -0
  275. package/dist/vite-genaicode/server-manager.js +91 -0
  276. package/dist/vite-genaicode/server-manager.js.map +1 -0
  277. package/dist/vite-genaicode/vite-genaicode-frontend.js +1 -1
  278. package/dist/vite-genaicode/vite-genaicode-frontend.js.map +1 -1
  279. package/dist/vite-genaicode/vite-genaicode-plugin.d.ts +11 -2
  280. package/dist/vite-genaicode/vite-genaicode-plugin.js +60 -65
  281. package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
  282. package/package.json +10 -9
  283. package/dist/main/ui/frontend/assets/index-We_MLSaC.js +0 -3405
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=container-commands-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-commands-types.js","sourceRoot":"","sources":["../../../../../../src/prompt/steps/step-iterate/handlers/container-task/container-commands-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { ActionHandlerProps, ActionResult } from '../../step-iterate-types.js';
2
+ export declare function runContainerTaskOrchestrator({ iterateCall, prompt, generateContentFn, options, waitIfPaused, }: ActionHandlerProps): Promise<ActionResult>;
@@ -0,0 +1,202 @@
1
+ import Docker from 'dockerode';
2
+ import { ModelType } from '../../../../../ai-service/common-types.js';
3
+ import { putAssistantMessage, putContainerLog, putSystemMessage, putUserMessage, } from '../../../../../main/common/content-bus.js';
4
+ import { askUserForConfirmationWithAnswer } from '../../../../../main/common/user-actions.js';
5
+ import { abortController } from '../../../../../main/common/abort-controller.js';
6
+ import { runContainerTaskDef } from '../../../../function-defs/run-container-task.js';
7
+ import { cleanupOrphanedContainers, createAndStartContainer, executeCommand, pullImage, stopContainer, } from './utils/docker-utils.js';
8
+ import { commandExecutionLoop } from './command-execution-loop.js';
9
+ import { getFunctionDefs } from '../../../../function-calling.js';
10
+ export async function runContainerTaskOrchestrator({ iterateCall, prompt, generateContentFn, options, waitIfPaused, }) {
11
+ const docker = new Docker({ socketPath: '/var/run/docker.sock' });
12
+ await cleanupOrphanedContainers(docker);
13
+ if (abortController?.signal.aborted) {
14
+ putContainerLog('warn', 'Container task aborted before start.');
15
+ putSystemMessage('Container task aborted before start.');
16
+ return { breakLoop: false, items: [] };
17
+ }
18
+ try {
19
+ putContainerLog('info', 'Container task: generating proper task request');
20
+ const request = [
21
+ [
22
+ ...prompt,
23
+ {
24
+ type: 'assistant',
25
+ text: iterateCall.args.message,
26
+ },
27
+ {
28
+ type: 'user',
29
+ text: 'I understand that you want to run a container task. Please provide the Docker image and task description.',
30
+ },
31
+ ],
32
+ {
33
+ functionDefs: getFunctionDefs(),
34
+ requiredFunctionName: runContainerTaskDef.name,
35
+ temperature: 0.7,
36
+ modelType: ModelType.CHEAP,
37
+ expectedResponseType: {
38
+ text: false,
39
+ functionCall: true,
40
+ media: false,
41
+ },
42
+ },
43
+ options,
44
+ ];
45
+ const response = await generateContentFn(...request);
46
+ const runContainerTaskCall = response
47
+ .filter((item) => item.type === 'functionCall')
48
+ .map((item) => item.functionCall).find((call) => call.name === 'runContainerTask');
49
+ if (!runContainerTaskCall?.args?.image || !runContainerTaskCall.args.taskDescription) {
50
+ putContainerLog('error', 'Failed to get valid runContainerTask request');
51
+ putSystemMessage('❌ Failed to get valid runContainerTask request');
52
+ prompt.push({
53
+ type: 'assistant',
54
+ text: iterateCall.args.message,
55
+ }, {
56
+ type: 'user',
57
+ text: 'Failed to get valid runContainerTask request',
58
+ });
59
+ return { breakLoop: false, items: [] };
60
+ }
61
+ putAssistantMessage(`I would like to run a container task with image: ${runContainerTaskCall.args.image}`, runContainerTaskCall.args);
62
+ const confirmation = await askUserForConfirmationWithAnswer(`Do you want to run the task?`, 'Run task', 'Reject', true, options);
63
+ if (!confirmation.confirmed) {
64
+ putContainerLog('warn', 'Container task cancelled by user.');
65
+ putSystemMessage('Container task cancelled by user.');
66
+ if (confirmation.answer) {
67
+ putUserMessage(confirmation.answer);
68
+ }
69
+ prompt.push({
70
+ type: 'assistant',
71
+ text: iterateCall.args.message,
72
+ }, {
73
+ type: 'user',
74
+ text: 'I reject running the container task.' + (confirmation.answer ? ` ${confirmation.answer}` : ''),
75
+ });
76
+ return { breakLoop: false, items: [] };
77
+ }
78
+ prompt.push({
79
+ type: 'assistant',
80
+ text: iterateCall.args.message,
81
+ }, {
82
+ type: 'user',
83
+ text: 'I accept running the container task.' + (confirmation.answer ? ` ${confirmation.answer}` : ''),
84
+ });
85
+ const { image, taskDescription, workingDir } = runContainerTaskCall.args;
86
+ putContainerLog('info', `Starting container task with image: ${image}`);
87
+ putSystemMessage(`🐳 Starting container task with image: ${image}`);
88
+ if (confirmation.answer) {
89
+ putUserMessage(confirmation.answer);
90
+ }
91
+ if (abortController?.signal.aborted) {
92
+ putContainerLog('warn', 'Container task aborted before pulling image.');
93
+ putSystemMessage('Container task aborted by user.');
94
+ return { breakLoop: false, items: [] };
95
+ }
96
+ try {
97
+ await pullImage(docker, image);
98
+ }
99
+ catch (error) {
100
+ const errorMessage = error instanceof Error ? error.message : String(error);
101
+ putSystemMessage('❌ Failed to pull Docker image', { error: errorMessage });
102
+ // The pullImage function already logs the detailed error to the terminal.
103
+ prompt.push({
104
+ type: 'assistant',
105
+ text: iterateCall.args.message,
106
+ functionCalls: [runContainerTaskCall],
107
+ }, {
108
+ type: 'user',
109
+ functionResponses: [
110
+ {
111
+ name: 'runContainerTask',
112
+ call_id: runContainerTaskCall.id || undefined,
113
+ content: `Failed to pull Docker image: ${errorMessage}`,
114
+ },
115
+ ],
116
+ });
117
+ return { breakLoop: false, items: [] };
118
+ }
119
+ let container;
120
+ let onAbort;
121
+ try {
122
+ container = await createAndStartContainer(docker, image);
123
+ onAbort = () => {
124
+ putContainerLog('warn', 'Execution interrupted by user. Stopping container...', undefined, 'docker');
125
+ // Best-effort stop; stopContainer is idempotent/safe via try/catch
126
+ if (container) {
127
+ stopContainer(container).catch(() => { });
128
+ }
129
+ };
130
+ abortController?.signal.addEventListener('abort', onAbort);
131
+ putContainerLog('info', 'Ensuring working directory exists.');
132
+ await executeCommand(container, '/bin/sh', `mkdir -p ${workingDir}`, '', '/');
133
+ putContainerLog('info', 'Entering command execution loop.');
134
+ const { success, summary } = await commandExecutionLoop(runContainerTaskCall.args, container, taskDescription, generateContentFn, options, waitIfPaused);
135
+ const finalMessage = `✅ Task finished with status: ${success ? 'Success' : 'Failed'}.
136
+
137
+ **Summary:**
138
+ ${summary}`;
139
+ putContainerLog(success ? 'success' : 'error', `Task finished. Summary: ${summary}`);
140
+ putSystemMessage(finalMessage);
141
+ prompt.push({
142
+ type: 'assistant',
143
+ text: iterateCall.args.message,
144
+ functionCalls: [runContainerTaskCall],
145
+ }, {
146
+ type: 'user',
147
+ functionResponses: [
148
+ {
149
+ name: 'runContainerTask',
150
+ call_id: runContainerTaskCall.id || undefined,
151
+ content: finalMessage,
152
+ },
153
+ ],
154
+ });
155
+ return { breakLoop: false, items: [] };
156
+ }
157
+ catch (error) {
158
+ const errorMessage = error instanceof Error ? error.message : String(error);
159
+ putContainerLog('error', 'An error occurred during the container task', { error: errorMessage });
160
+ putSystemMessage('❌ An error occurred during the container task', {
161
+ error: errorMessage,
162
+ });
163
+ prompt.push({
164
+ type: 'assistant',
165
+ text: iterateCall.args.message,
166
+ functionCalls: [runContainerTaskCall],
167
+ }, {
168
+ type: 'user',
169
+ functionResponses: [
170
+ {
171
+ name: 'runContainerTask',
172
+ call_id: runContainerTaskCall.id || undefined,
173
+ content: `An error occurred during the container task: ${errorMessage}`,
174
+ },
175
+ ],
176
+ });
177
+ return { breakLoop: false, items: [] };
178
+ }
179
+ finally {
180
+ if (container) {
181
+ await stopContainer(container);
182
+ if (onAbort) {
183
+ abortController?.signal.removeEventListener('abort', onAbort);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ const errorMessage = error instanceof Error ? error.message : String(error);
190
+ putContainerLog('error', 'Error during container task initialization', { error: errorMessage });
191
+ putSystemMessage('Error during container task initialization', { error: errorMessage });
192
+ prompt.push({
193
+ type: 'assistant',
194
+ text: iterateCall.args.message,
195
+ }, {
196
+ type: 'user',
197
+ text: `Error during container task initialization: ${errorMessage}`,
198
+ });
199
+ return { breakLoop: false, items: [] };
200
+ }
201
+ }
202
+ //# sourceMappingURL=container-task-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-task-orchestrator.js","sourceRoot":"","sources":["../../../../../../src/prompt/steps/step-iterate/handlers/container-task/container-task-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Check if Docker is available
3
+ */
4
+ export declare function checkDockerAvailability(): Promise<boolean>;
@@ -0,0 +1,15 @@
1
+ import Docker from 'dockerode';
2
+ /**
3
+ * Check if Docker is available
4
+ */
5
+ export async function checkDockerAvailability() {
6
+ try {
7
+ const docker = new Docker({ socketPath: '/var/run/docker.sock' });
8
+ await docker.ping();
9
+ return true;
10
+ }
11
+ catch (error) {
12
+ return false;
13
+ }
14
+ }
15
+ //# sourceMappingURL=docker-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-check.js","sourceRoot":"","sources":["../../../../../../../src/prompt/steps/step-iterate/handlers/container-task/utils/docker-check.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B;;GAEG;AAEH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ import Docker from 'dockerode';
2
+ import { AllowedDockerImage } from '../../../../../function-defs/run-container-task.js';
3
+ /**
4
+ * Pull a Docker image
5
+ */
6
+ export declare function pullImage(docker: Docker, image: AllowedDockerImage): Promise<void>;
7
+ /**
8
+ * Create and start a Docker container
9
+ */
10
+ export declare function createAndStartContainer(docker: Docker, image: AllowedDockerImage): Promise<Docker.Container>;
11
+ /**
12
+ * Execute a command in a Docker container
13
+ */
14
+ export declare function executeCommand(container: Docker.Container, shell: '/bin/sh' | '/bin/bash', command: string, stdin: string | undefined, workingDir: string, abortSignal?: AbortSignal): Promise<{
15
+ output: string;
16
+ exitCode: number;
17
+ }>;
18
+ /**
19
+ * Stop and clean up a Docker container
20
+ */
21
+ export declare function stopContainer(container: Docker.Container): Promise<void>;
22
+ /**
23
+ * Clean up orphaned containers left over from previous runs.
24
+ */
25
+ export declare function cleanupOrphanedContainers(docker: Docker): Promise<void>;
26
+ /**
27
+ * Copy a file or directory from the host to the container.
28
+ */
29
+ export declare function copyToContainer(container: Docker.Container, hostPath: string, containerPath: string): Promise<void>;
30
+ export interface ArchiveEntry {
31
+ name: string;
32
+ type: 'file' | 'directory';
33
+ }
34
+ /**
35
+ * Lists the files within a container archive without extracting them.
36
+ */
37
+ export declare function listFilesInContainerArchive(container: Docker.Container, containerPath: string): Promise<ArchiveEntry[]>;
38
+ /**
39
+ * Extracts a tar stream to a specified directory, with path validation.
40
+ * @param tarStream The readable tar stream.
41
+ * @param destinationHostPath The absolute path on the host to extract files to.
42
+ * @param pathValidator A function to validate each file path before writing.
43
+ */
44
+ export declare function extractTarStreamToDirectory(tarStream: NodeJS.ReadableStream, destinationHostPath: string, pathValidator: (filePath: string) => boolean): Promise<void>;
45
+ /**
46
+ * Copy a file or directory from the container to the host.
47
+ */
48
+ export declare function copyFromContainer(container: Docker.Container, containerPath: string, hostPath: string): Promise<void>;
49
+ export declare function checkPathExistsInContainer(container: Docker.Container, containerPath: string): Promise<boolean>;
50
+ export declare function getFileContentFromContainer(container: Docker.Container, filePath: string): Promise<string>;
@@ -0,0 +1,358 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ import tar from 'tar-stream';
4
+ import { putContainerLog, putSystemMessage } from '../../../../../../main/common/content-bus.js';
5
+ import { rcConfig } from '../../../../../../main/config.js';
6
+ import { cacheContainerId, clearCachedContainerIds, getCachedContainerIds, removeCachedContainerId, } from '../../../../../../files/cache-file.js';
7
+ import { isProjectPath } from '../../../../../../files/path-utils.js';
8
+ import { isIgnoredPath } from '../../../../../../files/find-files.js';
9
+ /**
10
+ * Pull a Docker image
11
+ */
12
+ export async function pullImage(docker, image) {
13
+ putContainerLog('info', `Pulling Docker image: ${image}`, undefined, 'docker');
14
+ return new Promise((resolve, reject) => {
15
+ docker
16
+ .pull(image)
17
+ .then((stream) => {
18
+ docker.modem.followProgress(stream, (err) => {
19
+ if (err) {
20
+ putContainerLog('error', `Failed to pull Docker image: ${err.message}`, undefined, 'docker');
21
+ reject(err);
22
+ }
23
+ else {
24
+ putContainerLog('success', `Successfully pulled Docker image: ${image}`, undefined, 'docker');
25
+ putSystemMessage(`✅ Successfully pulled Docker image: ${image}`);
26
+ resolve();
27
+ }
28
+ });
29
+ })
30
+ .catch((error) => {
31
+ putContainerLog('error', `Failed to pull Docker image: ${error.message}`, undefined, 'docker');
32
+ putSystemMessage(`❌ Failed to pull Docker image: ${error.message}`);
33
+ reject(error);
34
+ });
35
+ });
36
+ }
37
+ /**
38
+ * Create and start a Docker container
39
+ */
40
+ export async function createAndStartContainer(docker, image) {
41
+ const container = await docker.createContainer({
42
+ Image: image,
43
+ Tty: true,
44
+ HostConfig: {
45
+ AutoRemove: true,
46
+ },
47
+ });
48
+ await container.start();
49
+ putContainerLog('info', `Container started (ID: ${container.id.substring(0, 12)})`, { image }, 'docker');
50
+ cacheContainerId(container.id);
51
+ putSystemMessage(`✅ Container started successfully (ID: ${container.id.substring(0, 12)})`);
52
+ return container;
53
+ }
54
+ /**
55
+ * Execute a command in a Docker container
56
+ */
57
+ export async function executeCommand(container, shell, command, stdin, workingDir, abortSignal) {
58
+ putContainerLog('info', `Executing command in ${workingDir}: ${command}`, { stdin: !!stdin }, 'command');
59
+ const exec = await container.exec({
60
+ Cmd: [shell, '-c', command],
61
+ WorkingDir: workingDir,
62
+ AttachStdin: true,
63
+ Tty: false,
64
+ AttachStdout: true,
65
+ AttachStderr: true,
66
+ });
67
+ const stream = await exec.start({ hijack: true, stdin: true });
68
+ if (stdin) {
69
+ stream.write(stdin);
70
+ }
71
+ stream.end();
72
+ abortSignal?.addEventListener('abort', async () => {
73
+ const killExec = await container.exec({
74
+ Cmd: ['pkill', '-9', '-f', command],
75
+ AttachStdout: true,
76
+ AttachStderr: true,
77
+ });
78
+ await killExec.start({});
79
+ stream.destroy();
80
+ });
81
+ let output = '';
82
+ // Collect output from the stream
83
+ await new Promise((resolve) => {
84
+ stream.on('data', (chunk) => {
85
+ // Docker stream format: first 8 bytes are header, rest is data
86
+ const data = chunk.slice(8).toString();
87
+ output += data;
88
+ });
89
+ stream.on('end', () => {
90
+ resolve();
91
+ });
92
+ stream.on('error', () => {
93
+ resolve();
94
+ });
95
+ abortSignal?.addEventListener('abort', () => {
96
+ resolve();
97
+ });
98
+ });
99
+ if (abortSignal?.aborted) {
100
+ output += '\n\nAborted command execution';
101
+ }
102
+ const inspect = await exec.inspect();
103
+ putContainerLog('info', `Command finished with exit code: ${inspect.ExitCode || 0}`, { command }, 'command');
104
+ return { output: output.trim(), exitCode: inspect.ExitCode || 0 };
105
+ }
106
+ /**
107
+ * Stop and clean up a Docker container
108
+ */
109
+ export async function stopContainer(container) {
110
+ try {
111
+ await container.stop();
112
+ putContainerLog('info', 'Container stopped successfully', undefined, 'docker');
113
+ putSystemMessage('🛑 Container stopped successfully');
114
+ }
115
+ catch (error) {
116
+ putContainerLog('info', 'Container cleanup completed', undefined, 'docker');
117
+ putSystemMessage('🛑 Container cleanup completed');
118
+ }
119
+ finally {
120
+ removeCachedContainerId(container.id);
121
+ }
122
+ }
123
+ /**
124
+ * Clean up orphaned containers left over from previous runs.
125
+ */
126
+ export async function cleanupOrphanedContainers(docker) {
127
+ const containerIds = getCachedContainerIds();
128
+ if (containerIds.length === 0) {
129
+ return;
130
+ }
131
+ putContainerLog('info', `Found ${containerIds.length} potentially orphaned containers. Cleaning up...`);
132
+ putSystemMessage(`🧹 Found ${containerIds.length} potentially orphaned containers. Cleaning up...`);
133
+ const cleanupPromises = containerIds.map(async (id) => {
134
+ try {
135
+ const container = docker.getContainer(id);
136
+ const inspectInfo = await container.inspect();
137
+ if (inspectInfo.State.Running) {
138
+ await container.stop();
139
+ putContainerLog('info', `Stopped orphaned container ${id.substring(0, 12)}`);
140
+ putSystemMessage(`🛑 Stopped orphaned container ${id.substring(0, 12)}`);
141
+ }
142
+ }
143
+ catch (error) {
144
+ // Ignore errors (e.g., container not found)
145
+ }
146
+ });
147
+ await Promise.all(cleanupPromises);
148
+ clearCachedContainerIds();
149
+ putContainerLog('success', 'Orphaned container cleanup complete.');
150
+ putSystemMessage('✅ Orphaned container cleanup complete.');
151
+ }
152
+ /**
153
+ * Validates that the host path is within the project root directory.
154
+ * @param hostPath The path on the host machine. Can be absolute or relative to the project root.
155
+ * @returns The absolute, validated path.
156
+ */
157
+ function validateHostPath(hostPath) {
158
+ const absoluteHostPath = path.resolve(rcConfig.rootDir, hostPath);
159
+ if (!absoluteHostPath.startsWith(rcConfig.rootDir)) {
160
+ throw new Error(`Invalid host path: ${hostPath} is outside the project root directory.`);
161
+ }
162
+ return absoluteHostPath;
163
+ }
164
+ /**
165
+ * Recursively adds files and directories to a tar pack stream.
166
+ * @param pack The tar-stream pack instance.
167
+ * @param directoryPath The absolute path of the directory to add.
168
+ * @param relativeTo The base path for entries in the tar archive.
169
+ */
170
+ function addDirectoryToPack(pack, directoryPath, relativeTo) {
171
+ if (isIgnoredPath(directoryPath)) {
172
+ return;
173
+ }
174
+ const items = fs.readdirSync(directoryPath);
175
+ const dirStats = fs.lstatSync(directoryPath);
176
+ pack.entry({
177
+ name: relativeTo.endsWith('/') ? relativeTo : relativeTo + '/',
178
+ type: 'directory',
179
+ mode: dirStats.mode & 0o777,
180
+ mtime: dirStats.mtime,
181
+ }, () => { });
182
+ for (const item of items) {
183
+ const fullPath = path.join(directoryPath, item);
184
+ const tarPath = path.join(relativeTo, item);
185
+ const stats = fs.lstatSync(fullPath);
186
+ if (stats.isDirectory()) {
187
+ addDirectoryToPack(pack, fullPath, tarPath);
188
+ }
189
+ else if (isIgnoredPath(fullPath)) {
190
+ // Skip ignored files
191
+ }
192
+ else if (stats.isSymbolicLink()) {
193
+ const linkname = fs.readlinkSync(fullPath);
194
+ pack.entry({
195
+ name: tarPath,
196
+ type: 'symlink',
197
+ linkname,
198
+ mode: 0o777,
199
+ mtime: stats.mtime,
200
+ }, () => { });
201
+ }
202
+ else if (stats.isFile()) {
203
+ const data = fs.readFileSync(fullPath);
204
+ pack.entry({
205
+ name: tarPath,
206
+ type: 'file',
207
+ mode: stats.mode & 0o777,
208
+ size: data.length,
209
+ mtime: stats.mtime,
210
+ }, data);
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * Copy a file or directory from the host to the container.
216
+ */
217
+ export async function copyToContainer(container, hostPath, containerPath) {
218
+ try {
219
+ const absoluteHostPath = validateHostPath(hostPath);
220
+ putContainerLog('info', `Copying from host:${absoluteHostPath} to container:${containerPath}`, undefined, 'copy');
221
+ putSystemMessage(`📦 Copying from host:${absoluteHostPath} to container:${containerPath}`);
222
+ const pack = tar.pack();
223
+ const stats = fs.statSync(absoluteHostPath);
224
+ if (stats.isDirectory()) {
225
+ addDirectoryToPack(pack, absoluteHostPath, '');
226
+ }
227
+ else if (!isIgnoredPath(absoluteHostPath)) {
228
+ pack.entry({ name: path.basename(absoluteHostPath) }, fs.readFileSync(absoluteHostPath));
229
+ }
230
+ pack.finalize();
231
+ await container.putArchive(pack, { path: containerPath });
232
+ putContainerLog('success', `Successfully copied to container.`, undefined, 'copy');
233
+ putSystemMessage(`✅ Successfully copied to container.`);
234
+ }
235
+ catch (error) {
236
+ const errorMessage = error instanceof Error ? error.message : String(error);
237
+ putContainerLog('error', `Failed to copy to container: ${errorMessage}`, undefined, 'copy');
238
+ putSystemMessage(`❌ Failed to copy to container: ${errorMessage}`);
239
+ throw error;
240
+ }
241
+ }
242
+ /**
243
+ * Lists the files within a container archive without extracting them.
244
+ */
245
+ export async function listFilesInContainerArchive(container, containerPath) {
246
+ const entries = [];
247
+ try {
248
+ const stream = await container.getArchive({ path: containerPath });
249
+ const extract = tar.extract();
250
+ extract.on('entry', (header, stream, next) => {
251
+ if (header.type === 'file' || header.type === 'directory') {
252
+ entries.push({
253
+ name: header.name,
254
+ type: header.type,
255
+ });
256
+ }
257
+ stream.on('end', () => next());
258
+ stream.resume(); // Discard the stream's data
259
+ });
260
+ await new Promise((resolve, reject) => {
261
+ extract.on('finish', resolve);
262
+ extract.on('error', reject);
263
+ stream.pipe(extract);
264
+ });
265
+ putContainerLog('debug', `Listed ${entries.length} entries in archive at: ${containerPath}`, undefined, 'copy');
266
+ return entries;
267
+ }
268
+ catch (error) {
269
+ // If the path doesn't exist, getArchive throws an error. Return an empty list.
270
+ return [];
271
+ }
272
+ }
273
+ /**
274
+ * Extracts a tar stream to a specified directory, with path validation.
275
+ * @param tarStream The readable tar stream.
276
+ * @param destinationHostPath The absolute path on the host to extract files to.
277
+ * @param pathValidator A function to validate each file path before writing.
278
+ */
279
+ export async function extractTarStreamToDirectory(tarStream, destinationHostPath, pathValidator) {
280
+ const extract = tar.extract();
281
+ extract.on('entry', (header, stream, next) => {
282
+ const filePath = path.join(destinationHostPath, header.name);
283
+ const dir = path.dirname(filePath);
284
+ if (!pathValidator(filePath)) {
285
+ const errorMessage = `Refusing to write outside project root: ${filePath}`;
286
+ putContainerLog('error', errorMessage, undefined, 'copy');
287
+ // Pass an error to next() to stop the extraction process
288
+ stream.on('end', () => next(new Error(errorMessage)));
289
+ stream.resume();
290
+ return;
291
+ }
292
+ if (header.type === 'directory') {
293
+ if (!fs.existsSync(filePath)) {
294
+ fs.mkdirSync(filePath, { recursive: true });
295
+ }
296
+ stream.on('end', () => next());
297
+ stream.resume();
298
+ return;
299
+ }
300
+ // Ensure directory exists for the file
301
+ if (!fs.existsSync(dir)) {
302
+ fs.mkdirSync(dir, { recursive: true });
303
+ }
304
+ const writeStream = fs.createWriteStream(filePath);
305
+ stream.pipe(writeStream);
306
+ writeStream.on('finish', () => next());
307
+ writeStream.on('error', (err) => {
308
+ console.error(`Error writing file ${filePath}:`, err);
309
+ next(err); // Pass error to tar-stream
310
+ });
311
+ stream.on('error', (err) => {
312
+ console.error(`Error in tar stream for ${filePath}:`, err);
313
+ next(err); // Pass error to tar-stream
314
+ });
315
+ });
316
+ return new Promise((resolve, reject) => {
317
+ tarStream.on('error', reject);
318
+ extract.on('finish', resolve);
319
+ extract.on('error', reject);
320
+ tarStream.pipe(extract);
321
+ });
322
+ }
323
+ /**
324
+ * Copy a file or directory from the container to the host.
325
+ */
326
+ export async function copyFromContainer(container, containerPath, hostPath) {
327
+ try {
328
+ const absoluteHostPath = validateHostPath(hostPath);
329
+ putContainerLog('info', `Copying from container:${containerPath} to host:${absoluteHostPath}`, undefined, 'copy');
330
+ putSystemMessage(`📦 Copying from container:${containerPath} to host:${absoluteHostPath}`);
331
+ const stream = await container.getArchive({ path: containerPath });
332
+ await extractTarStreamToDirectory(stream, absoluteHostPath, isProjectPath);
333
+ putContainerLog('success', 'Successfully copied from container.', undefined, 'copy');
334
+ putSystemMessage(`✅ Successfully copied from container.`);
335
+ }
336
+ catch (error) {
337
+ const errorMessage = error instanceof Error ? error.message : String(error);
338
+ putContainerLog('error', `Failed to copy from container: ${errorMessage}`, undefined, 'copy');
339
+ putSystemMessage(`❌ Failed to copy from container: ${errorMessage}`);
340
+ throw error;
341
+ }
342
+ }
343
+ export async function checkPathExistsInContainer(container, containerPath) {
344
+ const check = await executeCommand(container, '/bin/sh', `ls ${containerPath}`, '', '/');
345
+ return check.exitCode === 0;
346
+ }
347
+ export async function getFileContentFromContainer(container, filePath) {
348
+ const { output, exitCode } = await executeCommand(container, '/bin/sh', `cat "${filePath}"`, '', '/');
349
+ if (exitCode !== 0) {
350
+ // If cat fails, it might be because the file doesn't exist, which is a valid case for patching (creating a new file).
351
+ if (output.includes('No such file or directory')) {
352
+ return '';
353
+ }
354
+ throw new Error(`Failed to read file content: ${output}`);
355
+ }
356
+ return output;
357
+ }
358
+ //# sourceMappingURL=docker-utils.js.map