@superblocksteam/vite-plugin-file-sync 2.0.96 → 2.0.97-next.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 (293) hide show
  1. package/dist/ai-service/agent/middleware.d.ts.map +1 -1
  2. package/dist/ai-service/agent/middleware.js +8 -2
  3. package/dist/ai-service/agent/middleware.js.map +1 -1
  4. package/dist/ai-service/agent/prompts/api-prompts.d.ts.map +1 -1
  5. package/dist/ai-service/agent/prompts/api-prompts.js +84 -91
  6. package/dist/ai-service/agent/prompts/api-prompts.js.map +1 -1
  7. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts +1 -1
  8. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  9. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +7 -23
  10. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  11. package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
  12. package/dist/ai-service/agent/tool-message-utils.js +32 -0
  13. package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts +28 -0
  15. package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts.map +1 -0
  16. package/dist/ai-service/agent/tools/apis/api-testing-state.js +141 -0
  17. package/dist/ai-service/agent/tools/apis/api-testing-state.js.map +1 -0
  18. package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts +4 -0
  19. package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts.map +1 -0
  20. package/dist/ai-service/agent/tools/apis/sdk-registry.js +23 -0
  21. package/dist/ai-service/agent/tools/apis/sdk-registry.js.map +1 -0
  22. package/dist/ai-service/agent/tools/apis/test-api.d.ts +1 -63
  23. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  24. package/dist/ai-service/agent/tools/apis/test-api.js +12 -5
  25. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  26. package/dist/ai-service/agent/tools/apis/write-api.d.ts +2 -2
  27. package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
  28. package/dist/ai-service/agent/tools/build-capture-screenshot.js +2 -0
  29. package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
  30. package/dist/ai-service/agent/tools/build-edit-file.d.ts +1 -1
  31. package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
  32. package/dist/ai-service/agent/tools/build-edit-file.js +15 -0
  33. package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
  34. package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
  35. package/dist/ai-service/agent/tools/build-finalize.js +1 -0
  36. package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
  37. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
  38. package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts +1 -1
  39. package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
  40. package/dist/ai-service/agent/tools/build-multi-edit-file.js +8 -0
  41. package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
  42. package/dist/ai-service/agent/tools/build-write-file.d.ts +1 -1
  43. package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
  44. package/dist/ai-service/agent/tools/build-write-file.js +8 -0
  45. package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
  46. package/dist/ai-service/agent/tools/get-logs.d.ts +2 -0
  47. package/dist/ai-service/agent/tools/get-logs.d.ts.map +1 -1
  48. package/dist/ai-service/agent/tools/get-logs.js +49 -35
  49. package/dist/ai-service/agent/tools/get-logs.js.map +1 -1
  50. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
  51. package/dist/ai-service/agent/tools/integrations/internal.d.ts +4 -0
  52. package/dist/ai-service/agent/tools/integrations/internal.d.ts.map +1 -1
  53. package/dist/ai-service/agent/tools/integrations/internal.js +1 -1
  54. package/dist/ai-service/agent/tools/integrations/internal.js.map +1 -1
  55. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  56. package/dist/ai-service/agent/tools.js +78 -21
  57. package/dist/ai-service/agent/tools.js.map +1 -1
  58. package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
  59. package/dist/ai-service/agent/tools2/access-control.js +0 -3
  60. package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
  61. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.d.ts.map +1 -1
  62. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js +1 -0
  63. package/dist/ai-service/agent/tools2/tools/ask-multi-choice.js.map +1 -1
  64. package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts +2 -2
  65. package/dist/ai-service/agent/tools2/tools/git.d.ts +50 -0
  66. package/dist/ai-service/agent/tools2/tools/git.d.ts.map +1 -0
  67. package/dist/ai-service/agent/tools2/tools/git.js +465 -0
  68. package/dist/ai-service/agent/tools2/tools/git.js.map +1 -0
  69. package/dist/ai-service/agent/tools2/tools/glob.d.ts.map +1 -1
  70. package/dist/ai-service/agent/tools2/tools/glob.js +3 -1
  71. package/dist/ai-service/agent/tools2/tools/glob.js.map +1 -1
  72. package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
  73. package/dist/ai-service/agent/tools2/tools/grep.js +9 -2
  74. package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
  75. package/dist/ai-service/agent/tools2/tools/index.d.ts +1 -7
  76. package/dist/ai-service/agent/tools2/tools/index.d.ts.map +1 -1
  77. package/dist/ai-service/agent/tools2/tools/index.js +2 -8
  78. package/dist/ai-service/agent/tools2/tools/index.js.map +1 -1
  79. package/dist/ai-service/agent/tools2/tools/ls.d.ts.map +1 -1
  80. package/dist/ai-service/agent/tools2/tools/ls.js +5 -1
  81. package/dist/ai-service/agent/tools2/tools/ls.js.map +1 -1
  82. package/dist/ai-service/agent/tools2/tools/read.d.ts +1 -1
  83. package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts +10 -6
  84. package/dist/ai-service/agent/tools2/tools/remember-knowledge.d.ts.map +1 -1
  85. package/dist/ai-service/agent/tools2/tools/remember-knowledge.js +25 -18
  86. package/dist/ai-service/agent/tools2/tools/remember-knowledge.js.map +1 -1
  87. package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +2 -2
  88. package/dist/ai-service/agent/tools2/types.d.ts +6 -2
  89. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  90. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  91. package/dist/ai-service/agent/utils.d.ts.map +1 -1
  92. package/dist/ai-service/agent/utils.js +46 -0
  93. package/dist/ai-service/agent/utils.js.map +1 -1
  94. package/dist/ai-service/app-interface/constants.d.ts +10 -3
  95. package/dist/ai-service/app-interface/constants.d.ts.map +1 -1
  96. package/dist/ai-service/app-interface/constants.js +16 -8
  97. package/dist/ai-service/app-interface/constants.js.map +1 -1
  98. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts +11 -4
  99. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.d.ts.map +1 -1
  100. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js +152 -11
  101. package/dist/ai-service/app-interface/filesystem/handlers/skill-handler.js.map +1 -1
  102. package/dist/ai-service/app-interface/filesystem/validation.d.ts +4 -4
  103. package/dist/ai-service/app-interface/filesystem/validation.d.ts.map +1 -1
  104. package/dist/ai-service/app-interface/filesystem/validation.js +14 -11
  105. package/dist/ai-service/app-interface/filesystem/validation.js.map +1 -1
  106. package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts +1 -0
  107. package/dist/ai-service/app-interface/filesystem/virtual-file-system.d.ts.map +1 -1
  108. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js +2 -2
  109. package/dist/ai-service/app-interface/filesystem/virtual-file-system.js.map +1 -1
  110. package/dist/ai-service/app-interface/shell.d.ts +10 -1
  111. package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
  112. package/dist/ai-service/app-interface/shell.js +62 -16
  113. package/dist/ai-service/app-interface/shell.js.map +1 -1
  114. package/dist/ai-service/app-skills/build-knowledge-feedback-message.d.ts +3 -0
  115. package/dist/ai-service/app-skills/build-knowledge-feedback-message.d.ts.map +1 -0
  116. package/dist/ai-service/app-skills/build-knowledge-feedback-message.js +47 -0
  117. package/dist/ai-service/app-skills/build-knowledge-feedback-message.js.map +1 -0
  118. package/dist/ai-service/app-skills/helpers.d.ts +6 -11
  119. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  120. package/dist/ai-service/app-skills/helpers.js +282 -75
  121. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  122. package/dist/ai-service/attachment-upload.d.ts +9 -1
  123. package/dist/ai-service/attachment-upload.d.ts.map +1 -1
  124. package/dist/ai-service/attachment-upload.js +82 -62
  125. package/dist/ai-service/attachment-upload.js.map +1 -1
  126. package/dist/ai-service/attachments/store.d.ts +12 -1
  127. package/dist/ai-service/attachments/store.d.ts.map +1 -1
  128. package/dist/ai-service/attachments/store.js +35 -0
  129. package/dist/ai-service/attachments/store.js.map +1 -1
  130. package/dist/ai-service/attachments/uploaded-content-part.d.ts +28 -0
  131. package/dist/ai-service/attachments/uploaded-content-part.d.ts.map +1 -0
  132. package/dist/ai-service/attachments/uploaded-content-part.js +88 -0
  133. package/dist/ai-service/attachments/uploaded-content-part.js.map +1 -0
  134. package/dist/ai-service/chat/chat-session-store.d.ts +4 -2
  135. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  136. package/dist/ai-service/chat/chat-session-store.js +150 -19
  137. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  138. package/dist/ai-service/chat/utils.d.ts +12 -0
  139. package/dist/ai-service/chat/utils.d.ts.map +1 -1
  140. package/dist/ai-service/chat/utils.js +128 -2
  141. package/dist/ai-service/chat/utils.js.map +1 -1
  142. package/dist/ai-service/clark-provider/attachment-service.d.ts +56 -0
  143. package/dist/ai-service/clark-provider/attachment-service.d.ts.map +1 -0
  144. package/dist/ai-service/clark-provider/attachment-service.js +295 -0
  145. package/dist/ai-service/clark-provider/attachment-service.js.map +1 -0
  146. package/dist/ai-service/clark-provider/clark-language-model.d.ts +3 -0
  147. package/dist/ai-service/clark-provider/clark-language-model.d.ts.map +1 -1
  148. package/dist/ai-service/clark-provider/clark-language-model.js +15 -5
  149. package/dist/ai-service/clark-provider/clark-language-model.js.map +1 -1
  150. package/dist/ai-service/clark-provider/clark-provider.d.ts +9 -0
  151. package/dist/ai-service/clark-provider/clark-provider.d.ts.map +1 -1
  152. package/dist/ai-service/clark-provider/clark-provider.js +2 -0
  153. package/dist/ai-service/clark-provider/clark-provider.js.map +1 -1
  154. package/dist/ai-service/context-upload.d.ts +2 -1
  155. package/dist/ai-service/context-upload.d.ts.map +1 -1
  156. package/dist/ai-service/context-upload.js +63 -26
  157. package/dist/ai-service/context-upload.js.map +1 -1
  158. package/dist/ai-service/features.d.ts +12 -1
  159. package/dist/ai-service/features.d.ts.map +1 -1
  160. package/dist/ai-service/features.js +12 -1
  161. package/dist/ai-service/features.js.map +1 -1
  162. package/dist/ai-service/index.d.ts +19 -2
  163. package/dist/ai-service/index.d.ts.map +1 -1
  164. package/dist/ai-service/index.js +129 -21
  165. package/dist/ai-service/index.js.map +1 -1
  166. package/dist/ai-service/judge/judge-eval-service-runner.js +1 -0
  167. package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -1
  168. package/dist/ai-service/judge/tools/playwright-action.d.ts +1 -1
  169. package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
  170. package/dist/ai-service/llm/impl/clark.js +18 -2
  171. package/dist/ai-service/llm/impl/clark.js.map +1 -1
  172. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  173. package/dist/ai-service/llm/interaction/adapters/vercel.js +4 -0
  174. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  175. package/dist/ai-service/llm/provider.d.ts +2 -1
  176. package/dist/ai-service/llm/provider.d.ts.map +1 -1
  177. package/dist/ai-service/llm/provider.js +11 -2
  178. package/dist/ai-service/llm/provider.js.map +1 -1
  179. package/dist/ai-service/llm/stream/config.d.ts +3 -1
  180. package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
  181. package/dist/ai-service/llm/stream/config.js +1 -0
  182. package/dist/ai-service/llm/stream/config.js.map +1 -1
  183. package/dist/ai-service/llm/stream/observers/logging.js +1 -1
  184. package/dist/ai-service/llm/stream/observers/logging.js.map +1 -1
  185. package/dist/ai-service/llm/stream/retry-engine.d.ts +8 -8
  186. package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
  187. package/dist/ai-service/llm/stream/retry-engine.js +42 -24
  188. package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
  189. package/dist/ai-service/llm/types.d.ts +11 -0
  190. package/dist/ai-service/llm/types.d.ts.map +1 -1
  191. package/dist/ai-service/skills/system/materialized.d.ts +6 -0
  192. package/dist/ai-service/skills/system/materialized.d.ts.map +1 -0
  193. package/dist/ai-service/skills/system/materialized.js +33 -0
  194. package/dist/ai-service/skills/system/materialized.js.map +1 -0
  195. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  196. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  197. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +42 -54
  198. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  199. package/dist/ai-service/skills/system/tool-paths.d.ts +3 -0
  200. package/dist/ai-service/skills/system/tool-paths.d.ts.map +1 -0
  201. package/dist/ai-service/skills/system/tool-paths.js +16 -0
  202. package/dist/ai-service/skills/system/tool-paths.js.map +1 -0
  203. package/dist/ai-service/state-machine/clark-fsm.d.ts +29 -5
  204. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  205. package/dist/ai-service/state-machine/clark-fsm.js +47 -1
  206. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  207. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
  208. package/dist/ai-service/state-machine/handlers/agent-planning.js +57 -36
  209. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
  210. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
  211. package/dist/ai-service/state-machine/handlers/awaiting-user.js +21 -3
  212. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
  213. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  214. package/dist/ai-service/state-machine/handlers/llm-generating.js +74 -27
  215. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  216. package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -1
  217. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +94 -1
  218. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -1
  219. package/dist/ai-service/util/mode-message.d.ts.map +1 -1
  220. package/dist/ai-service/util/mode-message.js +0 -3
  221. package/dist/ai-service/util/mode-message.js.map +1 -1
  222. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  223. package/dist/file-sync-vite-plugin.js +7 -0
  224. package/dist/file-sync-vite-plugin.js.map +1 -1
  225. package/dist/git-operation-lock.d.ts +22 -0
  226. package/dist/git-operation-lock.d.ts.map +1 -0
  227. package/dist/git-operation-lock.js +25 -0
  228. package/dist/git-operation-lock.js.map +1 -0
  229. package/dist/git-service/errors.d.ts +4 -0
  230. package/dist/git-service/errors.d.ts.map +1 -1
  231. package/dist/git-service/errors.js +6 -0
  232. package/dist/git-service/errors.js.map +1 -1
  233. package/dist/git-service/github-workflow.d.ts +6 -0
  234. package/dist/git-service/github-workflow.d.ts.map +1 -0
  235. package/dist/git-service/github-workflow.js +40 -0
  236. package/dist/git-service/github-workflow.js.map +1 -0
  237. package/dist/git-service/index.d.ts +2 -2
  238. package/dist/git-service/index.d.ts.map +1 -1
  239. package/dist/git-service/index.js +54 -12
  240. package/dist/git-service/index.js.map +1 -1
  241. package/dist/git-service/live-branch.d.ts.map +1 -1
  242. package/dist/git-service/live-branch.js +81 -5
  243. package/dist/git-service/live-branch.js.map +1 -1
  244. package/dist/inject-index-vite-plugin.d.ts.map +1 -1
  245. package/dist/inject-index-vite-plugin.js +37 -6
  246. package/dist/inject-index-vite-plugin.js.map +1 -1
  247. package/dist/injected-index.d.ts.map +1 -1
  248. package/dist/injected-index.js +23 -3
  249. package/dist/injected-index.js.map +1 -1
  250. package/dist/lock-service/index.d.ts.map +1 -1
  251. package/dist/lock-service/index.js +38 -0
  252. package/dist/lock-service/index.js.map +1 -1
  253. package/dist/parsing/index.d.ts +1 -0
  254. package/dist/parsing/index.d.ts.map +1 -1
  255. package/dist/parsing/index.js +1 -0
  256. package/dist/parsing/index.js.map +1 -1
  257. package/dist/parsing/sdk-registry.d.ts +5 -0
  258. package/dist/parsing/sdk-registry.d.ts.map +1 -0
  259. package/dist/parsing/sdk-registry.js +128 -0
  260. package/dist/parsing/sdk-registry.js.map +1 -0
  261. package/dist/socket-manager.d.ts +3 -1
  262. package/dist/socket-manager.d.ts.map +1 -1
  263. package/dist/socket-manager.js +192 -45
  264. package/dist/socket-manager.js.map +1 -1
  265. package/package.json +7 -6
  266. package/dist/ai-service/agent/tools2/tools/git-commit.d.ts +0 -15
  267. package/dist/ai-service/agent/tools2/tools/git-commit.d.ts.map +0 -1
  268. package/dist/ai-service/agent/tools2/tools/git-commit.js +0 -105
  269. package/dist/ai-service/agent/tools2/tools/git-commit.js.map +0 -1
  270. package/dist/ai-service/agent/tools2/tools/git-diff.d.ts +0 -9
  271. package/dist/ai-service/agent/tools2/tools/git-diff.d.ts.map +0 -1
  272. package/dist/ai-service/agent/tools2/tools/git-diff.js +0 -23
  273. package/dist/ai-service/agent/tools2/tools/git-diff.js.map +0 -1
  274. package/dist/ai-service/agent/tools2/tools/git-log.d.ts +0 -12
  275. package/dist/ai-service/agent/tools2/tools/git-log.d.ts.map +0 -1
  276. package/dist/ai-service/agent/tools2/tools/git-log.js +0 -27
  277. package/dist/ai-service/agent/tools2/tools/git-log.js.map +0 -1
  278. package/dist/ai-service/agent/tools2/tools/git-merge-abort.d.ts +0 -7
  279. package/dist/ai-service/agent/tools2/tools/git-merge-abort.d.ts.map +0 -1
  280. package/dist/ai-service/agent/tools2/tools/git-merge-abort.js +0 -42
  281. package/dist/ai-service/agent/tools2/tools/git-merge-abort.js.map +0 -1
  282. package/dist/ai-service/agent/tools2/tools/git-pull.d.ts +0 -20
  283. package/dist/ai-service/agent/tools2/tools/git-pull.d.ts.map +0 -1
  284. package/dist/ai-service/agent/tools2/tools/git-pull.js +0 -80
  285. package/dist/ai-service/agent/tools2/tools/git-pull.js.map +0 -1
  286. package/dist/ai-service/agent/tools2/tools/git-stage.d.ts +0 -9
  287. package/dist/ai-service/agent/tools2/tools/git-stage.d.ts.map +0 -1
  288. package/dist/ai-service/agent/tools2/tools/git-stage.js +0 -34
  289. package/dist/ai-service/agent/tools2/tools/git-stage.js.map +0 -1
  290. package/dist/ai-service/agent/tools2/tools/git-status.d.ts +0 -9
  291. package/dist/ai-service/agent/tools2/tools/git-status.d.ts.map +0 -1
  292. package/dist/ai-service/agent/tools2/tools/git-status.js +0 -18
  293. package/dist/ai-service/agent/tools2/tools/git-status.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { parse } from "@babel/parser";
2
+ export async function parseSdkRegistryFromContent(registryContent, resolveImportPath) {
3
+ const result = new Map();
4
+ if (registryContent.trim() === "") {
5
+ return result;
6
+ }
7
+ let ast;
8
+ try {
9
+ ast = parse(registryContent, {
10
+ sourceType: "module",
11
+ plugins: ["typescript"],
12
+ });
13
+ }
14
+ catch {
15
+ return result;
16
+ }
17
+ const importMap = new Map();
18
+ for (const node of ast.program.body) {
19
+ if (node.type !== "ImportDeclaration")
20
+ continue;
21
+ const specifier = node.specifiers[0];
22
+ if (!specifier || specifier.type !== "ImportDefaultSpecifier")
23
+ continue;
24
+ const localName = specifier.local?.name;
25
+ const source = node.source?.value;
26
+ if (typeof localName !== "string" || typeof source !== "string")
27
+ continue;
28
+ const resolved = await resolveImportPath(source);
29
+ if (resolved) {
30
+ importMap.set(localName, resolved);
31
+ }
32
+ }
33
+ const exportedObject = findExportedObject(ast);
34
+ if (!exportedObject) {
35
+ return result;
36
+ }
37
+ for (const prop of exportedObject.properties) {
38
+ if (prop.type !== "ObjectProperty")
39
+ continue;
40
+ const key = getPropertyKey(prop);
41
+ if (!key)
42
+ continue;
43
+ const value = prop.value;
44
+ let resolvedPath;
45
+ if (value.type === "Identifier") {
46
+ resolvedPath = importMap.get(value.name ?? "");
47
+ }
48
+ else if (value.type === "CallExpression") {
49
+ resolvedPath = await resolveImportPathFromCall(value, resolveImportPath);
50
+ }
51
+ else if (value.type === "ArrowFunctionExpression") {
52
+ const body = value.body;
53
+ if (body?.type === "CallExpression") {
54
+ resolvedPath = await resolveImportPathFromCall(body, resolveImportPath);
55
+ }
56
+ }
57
+ if (resolvedPath) {
58
+ result.set(key, resolvedPath);
59
+ }
60
+ }
61
+ return result;
62
+ }
63
+ async function resolveImportPathFromCall(call, resolveImportPath) {
64
+ if (call.callee.type !== "Import") {
65
+ return undefined;
66
+ }
67
+ const arg = call.arguments[0];
68
+ if (arg?.type !== "StringLiteral" || typeof arg.value !== "string") {
69
+ return undefined;
70
+ }
71
+ return resolveImportPath(arg.value);
72
+ }
73
+ function getPropertyKey(prop) {
74
+ if (prop.key.type === "Identifier")
75
+ return prop.key.name;
76
+ if (prop.key.type === "StringLiteral")
77
+ return prop.key.value;
78
+ return undefined;
79
+ }
80
+ function findExportedObject(ast) {
81
+ for (const node of ast.program.body) {
82
+ if (node.type !== "ExportDefaultDeclaration")
83
+ continue;
84
+ const declaration = node.declaration;
85
+ const objectExpression = getObjectExpression(declaration);
86
+ if (objectExpression) {
87
+ return objectExpression;
88
+ }
89
+ if (declaration.type !== "Identifier" || !declaration.name)
90
+ continue;
91
+ const variableDeclaration = findVariableDeclaration(ast, declaration.name);
92
+ if (variableDeclaration?.init) {
93
+ return variableDeclaration.init;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ function getObjectExpression(node) {
99
+ if (node.type === "ObjectExpression") {
100
+ return node;
101
+ }
102
+ if ((node.type === "TSAsExpression" || node.type === "TSSatisfiesExpression") &&
103
+ "expression" in node) {
104
+ const expression = node.expression;
105
+ if (expression?.type === "ObjectExpression") {
106
+ return expression;
107
+ }
108
+ }
109
+ return undefined;
110
+ }
111
+ function findVariableDeclaration(ast, name) {
112
+ for (const node of ast.program.body) {
113
+ if (node.type !== "VariableDeclaration")
114
+ continue;
115
+ for (const declarator of node.declarations) {
116
+ if (declarator.id.type === "Identifier" &&
117
+ declarator.id.name === name &&
118
+ declarator.init) {
119
+ const objectExpression = getObjectExpression(declarator.init);
120
+ if (objectExpression) {
121
+ return { init: objectExpression };
122
+ }
123
+ }
124
+ }
125
+ }
126
+ return undefined;
127
+ }
128
+ //# sourceMappingURL=sdk-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-registry.js","sourceRoot":"","sources":["../../src/parsing/sdk-registry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { TracedEventEmitter } from "@superblocksteam/shared";
2
+ import { type GitOperationLock } from "./git-operation-lock.js";
2
3
  import type { AiService } from "./ai-service/index.js";
3
4
  import type { FileSystemManager } from "./file-system-manager.js";
4
5
  import type { GitService } from "./git-service/index.js";
@@ -25,7 +26,7 @@ declare class SocketManager extends TracedEventEmitter<SocketManagerEvents> {
25
26
  private _disposer;
26
27
  constructor(tracer: Tracer);
27
28
  private socketServer;
28
- startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, }: {
29
+ startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, gitOperationLock, }: {
29
30
  server: http.Server;
30
31
  fileSyncManager: FileSystemManager;
31
32
  syncService?: SyncService;
@@ -36,6 +37,7 @@ declare class SocketManager extends TracedEventEmitter<SocketManagerEvents> {
36
37
  checkAuthorization: CheckAuthorization;
37
38
  path: string;
38
39
  tracer: Tracer;
40
+ gitOperationLock?: GitOperationLock;
39
41
  }): void;
40
42
  callEditorClients(fn: (socket: ISocketClient<EditorClientMethods>) => Promise<void>): void;
41
43
  callLibraryClients(fn: (socket: ISocketClient<LibraryClientMethods>) => Promise<void>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"socket-manager.d.ts","sourceRoot":"","sources":["../src/socket-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAYjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAGV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,KAAK,mBAAmB,GAAG;IACzB,gBAAgB,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,iBAAiB,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACzD,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAOF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,iBAIjD;AAED,wBAAgB,oBAAoB,SAGnC;AAED,cAAM,aAAc,SAAQ,kBAAkB,CAAC,mBAAmB,CAAC;IACjE,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,SAAS,CAAwB;gBAE7B,MAAM,EAAE,MAAM;IAI1B,OAAO,CAAC,YAAY,CAA8B;IAClD,iBAAiB,CAAC,EAChB,MAAM,EACN,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,EACJ,MAAM,GACP,EAAE;QACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,eAAe,EAAE,iBAAiB,CAAC;QACnC,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC3D,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB;IAs8BD,iBAAiB,CACf,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOnE,kBAAkB,CAChB,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOpE,mBAAmB;IAInB,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAIhE,eAAe;IASf,OAAO;CAGR"}
1
+ {"version":3,"file":"socket-manager.d.ts","sourceRoot":"","sources":["../src/socket-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAGV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,KAAK,mBAAmB,GAAG;IACzB,gBAAgB,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,iBAAiB,EAAE,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACzD,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AAOF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,iBAIjD;AAED,wBAAgB,oBAAoB,SAGnC;AAED,cAAM,aAAc,SAAQ,kBAAkB,CAAC,mBAAmB,CAAC;IACjE,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,SAAS,CAAwB;gBAE7B,MAAM,EAAE,MAAM;IAI1B,OAAO,CAAC,YAAY,CAA8B;IAClD,iBAAiB,CAAC,EAChB,MAAM,EACN,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,gBAAgB,GACjB,EAAE;QACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,eAAe,EAAE,iBAAiB,CAAC;QACnC,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC3D,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACrC;IA8mCD,iBAAiB,CACf,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOnE,kBAAkB,CAChB,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAOpE,mBAAmB;IAInB,gBAAgB,IAAI,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAIhE,eAAe;IASf,OAAO;CAGR"}
@@ -6,6 +6,8 @@ import { createISocketClient, SUPERBLOCKS_LIVE_GIT_BRANCH, TracedEventEmitter, T
6
6
  import { WebSocketServer } from "ws";
7
7
  import { uploadContextToBucketeer } from "./ai-service/context-upload.js";
8
8
  import { createSocketRecordingMiddleware } from "./ai-service/recording/recorders/socket-recorder.js";
9
+ import { GIT_OPERATION_BUSY_MESSAGE, } from "./git-operation-lock.js";
10
+ import { ensureGithubWorkflowFile } from "./git-service/github-workflow.js";
9
11
  import { GitConflictError } from "./git-service/index.js";
10
12
  import { ensureLiveBranchCheckedOut, pushLiveBranchWithAutoRecreate, rollbackLastCommit, } from "./git-service/live-branch.js";
11
13
  import { getErrorMeta, getLogger } from "./util/logger.js";
@@ -37,7 +39,7 @@ class SocketManager extends TracedEventEmitter {
37
39
  super(tracer);
38
40
  }
39
41
  socketServer;
40
- startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, }) {
42
+ startSocketServer({ server, fileSyncManager, syncService, lockService, aiService, gitService, activateGitService, checkAuthorization, path, tracer, gitOperationLock, }) {
41
43
  if (this.socketServer) {
42
44
  throw new Error("Socket server already started");
43
45
  }
@@ -47,6 +49,7 @@ class SocketManager extends TracedEventEmitter {
47
49
  const getActiveGitService = async () => {
48
50
  if (activeGitService) {
49
51
  await ensureLiveBranchCheckedOut(activeGitService);
52
+ aiService?.setRuntimeGitServices(activeGitService, syncService, gitOperationLock);
50
53
  return activeGitService;
51
54
  }
52
55
  if (!activateGitService) {
@@ -60,13 +63,21 @@ class SocketManager extends TracedEventEmitter {
60
63
  activeGitService = await activateGitService();
61
64
  if (activeGitService) {
62
65
  await ensureLiveBranchCheckedOut(activeGitService);
66
+ aiService?.setRuntimeGitServices(activeGitService, syncService, gitOperationLock);
63
67
  return activeGitService;
64
68
  }
65
69
  }
66
70
  catch (error) {
67
- getLogger().warn(`[git] getActiveGitService: activation attempt ${attempt}/${maxAttempts} failed: ${error instanceof Error ? error.message : String(error)}`);
71
+ getLogger().warn("[git] activation attempt failed", {
72
+ gitCategory: "setup",
73
+ gitOperation: "activate",
74
+ gitOutcome: "failed",
75
+ gitAttempt: attempt,
76
+ gitMaxAttempts: maxAttempts,
77
+ ...getErrorMeta(error),
78
+ });
68
79
  if (attempt === maxAttempts) {
69
- getLogger().error(`[git] getActiveGitService: all ${maxAttempts} activation attempts exhausted`, getErrorMeta(error));
80
+ getLogger().error(`[git] activation attempts exhausted (${attempt}/${maxAttempts})`, getErrorMeta(error));
70
81
  throw error;
71
82
  }
72
83
  }
@@ -78,6 +89,21 @@ class SocketManager extends TracedEventEmitter {
78
89
  }
79
90
  return undefined;
80
91
  };
92
+ async function runWithGitLock(fn) {
93
+ if (!gitOperationLock) {
94
+ return fn();
95
+ }
96
+ const result = gitOperationLock.tryAcquire();
97
+ if (!result.acquired) {
98
+ throw new Error(GIT_OPERATION_BUSY_MESSAGE);
99
+ }
100
+ try {
101
+ return await fn();
102
+ }
103
+ finally {
104
+ result.release();
105
+ }
106
+ }
81
107
  const handleUpgrade = (req, socket, head) => {
82
108
  if (!req.url) {
83
109
  return;
@@ -214,6 +240,7 @@ class SocketManager extends TracedEventEmitter {
214
240
  branchName: syncService.branchName,
215
241
  appRootDirPath: aiService.appRootDirPath,
216
242
  userId: contextId.userId,
243
+ useServerUpload: aiService.isAiFileUploadEnabled,
217
244
  superblocksBaseUrl: aiService.superblocksBaseUrl,
218
245
  logger: getLogger(),
219
246
  jwt,
@@ -317,6 +344,14 @@ class SocketManager extends TracedEventEmitter {
317
344
  return { fact };
318
345
  },
319
346
  ],
347
+ aiMoveAppKnowledge: [
348
+ async (request) => {
349
+ if (!aiService) {
350
+ throw new Error("AI service not available");
351
+ }
352
+ return await aiService.moveAppFact(request);
353
+ },
354
+ ],
320
355
  aiRestoreToCommit: [
321
356
  async (request, _context) => {
322
357
  // Update clark.context.jwt from socket if missing (for restore operations)
@@ -379,37 +414,57 @@ class SocketManager extends TracedEventEmitter {
379
414
  },
380
415
  ],
381
416
  gitCommitLocal: [
382
- async (request) => {
383
- const readyGitService = await getActiveGitService();
384
- if (!readyGitService) {
385
- throw new Error("Git is not configured for this application");
386
- }
387
- await readyGitService
388
- .fetch("origin", SUPERBLOCKS_LIVE_GIT_BRANCH)
389
- .catch((fetchErr) => {
390
- const msg = fetchErr instanceof Error
391
- ? fetchErr.message
392
- : String(fetchErr);
393
- if (!msg.includes("couldn't find remote ref")) {
394
- throw fetchErr;
417
+ async (request) => runWithGitLock(async () => {
418
+ try {
419
+ const readyGitService = await getActiveGitService();
420
+ if (!readyGitService) {
421
+ throw new Error("Git is not configured for this application");
395
422
  }
396
- });
397
- await readyGitService.add(".");
398
- const result = await readyGitService.commit(request.message);
399
- return { sha: result.commit };
400
- },
423
+ await readyGitService
424
+ .fetch("origin", SUPERBLOCKS_LIVE_GIT_BRANCH)
425
+ .catch((fetchErr) => {
426
+ const msg = fetchErr instanceof Error
427
+ ? fetchErr.message
428
+ : String(fetchErr);
429
+ if (!msg.includes("couldn't find remote ref")) {
430
+ throw fetchErr;
431
+ }
432
+ });
433
+ await ensureGithubWorkflowFile(readyGitService, aiService?.superblocksBaseUrl).catch((error) => {
434
+ getLogger().warn("[git] gitCommitLocal failed to ensure GitHub workflow file", {
435
+ gitCategory: "setup",
436
+ gitOperation: "ensure-github-workflow-file",
437
+ gitOutcome: "failed",
438
+ ...getErrorMeta(error),
439
+ });
440
+ });
441
+ await readyGitService.add(".");
442
+ const result = await readyGitService.commit(request.message);
443
+ return { sha: result.commit };
444
+ }
445
+ catch (error) {
446
+ getLogger().error("[git] gitCommitLocal failed", getErrorMeta(error));
447
+ throw error;
448
+ }
449
+ }),
401
450
  ],
402
451
  gitPushLiveBranch: [
403
- async () => {
404
- const readyGitService = await getActiveGitService();
405
- if (!readyGitService) {
406
- throw new Error("Git is not configured for this application");
452
+ async () => runWithGitLock(async () => {
453
+ try {
454
+ const readyGitService = await getActiveGitService();
455
+ if (!readyGitService) {
456
+ throw new Error("Git is not configured for this application");
457
+ }
458
+ await pushLiveBranchWithAutoRecreate(readyGitService);
407
459
  }
408
- await pushLiveBranchWithAutoRecreate(readyGitService);
409
- },
460
+ catch (error) {
461
+ getLogger().error("[git] gitPushLiveBranch failed", getErrorMeta(error));
462
+ throw error;
463
+ }
464
+ }),
410
465
  ],
411
466
  gitRollbackLastCommit: [
412
- async (request) => {
467
+ async (request) => runWithGitLock(async () => {
413
468
  const readyGitService = await getActiveGitService();
414
469
  if (!readyGitService) {
415
470
  throw new Error("Git is not configured for this application");
@@ -418,10 +473,10 @@ class SocketManager extends TracedEventEmitter {
418
473
  gitService: readyGitService,
419
474
  expectedSha: request.expectedSha,
420
475
  });
421
- },
476
+ }),
422
477
  ],
423
478
  gitPull: [
424
- async (_request, _context) => {
479
+ async (_request, _context) => runWithGitLock(async () => {
425
480
  const readyGitService = await getActiveGitService();
426
481
  if (!readyGitService) {
427
482
  throw new Error("Git is not configured for this application");
@@ -489,10 +544,18 @@ class SocketManager extends TracedEventEmitter {
489
544
  }
490
545
  if (hasConflicts) {
491
546
  const conflictedFiles = await readyGitService.getConflictedFiles();
547
+ getLogger().warn("[git] pull conflict detected", {
548
+ gitCategory: "pull",
549
+ gitOperation: "pull",
550
+ gitOutcome: "conflict",
551
+ branch: SUPERBLOCKS_LIVE_GIT_BRANCH,
552
+ conflictedFileCount: conflictedFiles.length,
553
+ conflictedFiles,
554
+ });
492
555
  return { merged: false, conflictedFiles };
493
556
  }
494
557
  return { merged };
495
- },
558
+ }),
496
559
  ],
497
560
  gitSyncStatus: [
498
561
  async () => {
@@ -506,7 +569,13 @@ class SocketManager extends TracedEventEmitter {
506
569
  hasUncommittedChanges = status.files.length > 0;
507
570
  }
508
571
  catch (statusErr) {
509
- getLogger().warn("[git] gitSyncStatus: git status failed — .git may be corrupted, treating as not configured", getErrorMeta(statusErr));
572
+ getLogger().warn("[git] gitSyncStatus status failed", {
573
+ gitCategory: "status",
574
+ gitOperation: "syncStatus",
575
+ gitOutcome: "failed",
576
+ gitErrorKind: "status_failed",
577
+ ...getErrorMeta(statusErr),
578
+ });
510
579
  return null;
511
580
  }
512
581
  let ahead = 0;
@@ -518,9 +587,34 @@ class SocketManager extends TracedEventEmitter {
518
587
  behind = counts.behind;
519
588
  }
520
589
  catch (fetchErr) {
521
- getLogger().warn(`[git] gitSyncStatus: fetch/revList failed (remote unreachable or tracking branch missing): ${fetchErr instanceof Error ? fetchErr.message : String(fetchErr)}`);
590
+ getLogger().warn("[git] gitSyncStatus fetch/revList failed", {
591
+ gitCategory: "status",
592
+ gitOperation: "syncStatus",
593
+ gitOutcome: "failed",
594
+ gitErrorKind: "fetch_or_rev_list_failed",
595
+ branch: SUPERBLOCKS_LIVE_GIT_BRANCH,
596
+ remote: "origin",
597
+ ...getErrorMeta(fetchErr),
598
+ });
522
599
  }
523
- return { ahead, behind, hasUncommittedChanges };
600
+ let aheadOfDefaultBranch = false;
601
+ try {
602
+ const defaultBranch = await readyGitService.getDefaultBranch();
603
+ if (defaultBranch) {
604
+ await readyGitService.fetch("origin", defaultBranch);
605
+ const defaultCounts = await readyGitService.revList("HEAD", `origin/${defaultBranch}`);
606
+ aheadOfDefaultBranch = defaultCounts.ahead > 0;
607
+ }
608
+ }
609
+ catch {
610
+ // Optional: enable Open PR when branch has commits vs default.
611
+ }
612
+ return {
613
+ ahead,
614
+ behind,
615
+ hasUncommittedChanges,
616
+ aheadOfDefaultBranch,
617
+ };
524
618
  },
525
619
  ],
526
620
  gitChangedFiles: [
@@ -540,25 +634,49 @@ class SocketManager extends TracedEventEmitter {
540
634
  }));
541
635
  }
542
636
  catch (err) {
543
- getLogger().warn("[git] gitChangedFiles: git status failed", getErrorMeta(err));
637
+ getLogger().warn("[git] gitChangedFiles status failed", {
638
+ gitCategory: "status",
639
+ gitOperation: "changed-files",
640
+ gitOutcome: "failed",
641
+ gitErrorKind: "status_failed",
642
+ ...getErrorMeta(err),
643
+ });
544
644
  return [];
545
645
  }
546
646
  },
547
647
  ],
548
648
  gitActivate: [
549
- async () => {
649
+ async () => runWithGitLock(async () => {
550
650
  const service = await getActiveGitService();
551
651
  return { activated: !!service };
552
- },
652
+ }),
553
653
  ],
554
654
  gitDisconnect: [
555
- async () => {
655
+ async () => runWithGitLock(async () => {
656
+ // Native git disconnect should move runtime lock context back
657
+ // to default branch before clients reconnect.
658
+ if (lockService) {
659
+ try {
660
+ await lockService.switchBranch("main", {
661
+ reacquireLock: true,
662
+ });
663
+ }
664
+ catch (err) {
665
+ getLogger().warn("[git] gitDisconnect failed to switch lock branch back to main", {
666
+ gitCategory: "setup",
667
+ gitOperation: "disconnect",
668
+ gitOutcome: "failed",
669
+ gitErrorKind: "switch_lock_branch_failed",
670
+ ...getErrorMeta(err),
671
+ });
672
+ }
673
+ }
556
674
  if (activeGitService) {
557
675
  const gitDir = join(activeGitService.workDir, ".git");
558
676
  activeGitService = undefined;
559
677
  await rm(gitDir, { recursive: true, force: true });
560
678
  }
561
- },
679
+ }),
562
680
  ],
563
681
  gitDefaultBranch: [
564
682
  async () => {
@@ -569,7 +687,13 @@ class SocketManager extends TracedEventEmitter {
569
687
  return await readyGitService.getDefaultBranch();
570
688
  }
571
689
  catch (err) {
572
- getLogger().warn("[git] gitDefaultBranch: failed to detect default branch", getErrorMeta(err));
690
+ getLogger().warn("[git] gitDefaultBranch failed", {
691
+ gitCategory: "branch",
692
+ gitOperation: "default-branch",
693
+ gitOutcome: "failed",
694
+ gitErrorKind: "default_branch_detection_failed",
695
+ ...getErrorMeta(err),
696
+ });
573
697
  return null;
574
698
  }
575
699
  },
@@ -598,7 +722,15 @@ class SocketManager extends TracedEventEmitter {
598
722
  await readyGitService.fetch("origin", branch);
599
723
  }
600
724
  catch (fetchErr) {
601
- getLogger().warn(`[git] gitBranchLog: fetch origin/${branch} failed: ${fetchErr instanceof Error ? fetchErr.message : String(fetchErr)}`);
725
+ getLogger().warn("[git] gitBranchLog fetch failed", {
726
+ gitCategory: "branch",
727
+ gitOperation: "branch-log",
728
+ gitOutcome: "failed",
729
+ gitErrorKind: "branch_log_fetch_failed",
730
+ branch,
731
+ remote: "origin",
732
+ ...getErrorMeta(fetchErr),
733
+ });
602
734
  }
603
735
  }
604
736
  const SEP = "<<SEP>>";
@@ -627,7 +759,7 @@ class SocketManager extends TracedEventEmitter {
627
759
  },
628
760
  ],
629
761
  gitPrepareMainCommit: [
630
- async (request) => {
762
+ async (request) => runWithGitLock(async () => {
631
763
  const readyGitService = await getActiveGitService();
632
764
  if (!readyGitService) {
633
765
  throw new Error("Git service is not available");
@@ -644,7 +776,15 @@ class SocketManager extends TracedEventEmitter {
644
776
  await readyGitService.fetch("origin", defaultBranch);
645
777
  }
646
778
  catch (fetchErr) {
647
- getLogger().warn(`[git] gitPrepareMainCommit: fetch origin/${defaultBranch} failed: ${fetchErr instanceof Error ? fetchErr.message : String(fetchErr)}`);
779
+ getLogger().warn("[git] gitPrepareMainCommit fetch failed", {
780
+ gitCategory: "build",
781
+ gitOperation: "prepare-main-commit",
782
+ gitOutcome: "failed",
783
+ gitErrorKind: "prepare_main_commit_fetch_failed",
784
+ defaultBranch,
785
+ remote: "origin",
786
+ ...getErrorMeta(fetchErr),
787
+ });
648
788
  }
649
789
  const worktreeBase = await mkdtemp(join(tmpdir(), "sb-main-deploy-"));
650
790
  const worktreePath = join(worktreeBase, "worktree");
@@ -687,14 +827,21 @@ class SocketManager extends TracedEventEmitter {
687
827
  ]);
688
828
  }
689
829
  catch (cleanupErr) {
690
- getLogger().warn(`[git] gitPrepareMainCommit: worktree cleanup failed: ${cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr)}`);
830
+ getLogger().warn("[git] gitPrepareMainCommit worktree cleanup failed", {
831
+ gitCategory: "build",
832
+ gitOperation: "prepare-main-commit",
833
+ gitOutcome: "failed",
834
+ gitErrorKind: "worktree_cleanup_failed",
835
+ worktreePath,
836
+ ...getErrorMeta(cleanupErr),
837
+ });
691
838
  }
692
839
  await rm(worktreeBase, {
693
840
  recursive: true,
694
841
  force: true,
695
842
  });
696
843
  }
697
- },
844
+ }),
698
845
  ],
699
846
  },
700
847
  }, middlewares, tracer, {