conductor-oss 0.2.3 → 0.2.5

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 (211) hide show
  1. package/dist/commands/start.d.ts.map +1 -1
  2. package/dist/commands/start.js +4 -0
  3. package/dist/commands/start.js.map +1 -1
  4. package/dist/index.js +1 -1
  5. package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.d.ts +2 -0
  6. package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.d.ts.map +1 -0
  7. package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.js +122 -0
  8. package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.js.map +1 -0
  9. package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.d.ts +2 -0
  10. package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.d.ts.map +1 -0
  11. package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.js +48 -0
  12. package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.js.map +1 -0
  13. package/node_modules/@conductor-oss/core/dist/board-diagnostics.d.ts.map +1 -1
  14. package/node_modules/@conductor-oss/core/dist/board-diagnostics.js +12 -2
  15. package/node_modules/@conductor-oss/core/dist/board-diagnostics.js.map +1 -1
  16. package/node_modules/@conductor-oss/core/dist/board-watcher.d.ts +14 -0
  17. package/node_modules/@conductor-oss/core/dist/board-watcher.d.ts.map +1 -1
  18. package/node_modules/@conductor-oss/core/dist/board-watcher.js +97 -39
  19. package/node_modules/@conductor-oss/core/dist/board-watcher.js.map +1 -1
  20. package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
  21. package/node_modules/@conductor-oss/core/dist/config.js +2 -1
  22. package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
  23. package/node_modules/@conductor-oss/core/dist/index.d.ts +3 -2
  24. package/node_modules/@conductor-oss/core/dist/index.d.ts.map +1 -1
  25. package/node_modules/@conductor-oss/core/dist/index.js +2 -1
  26. package/node_modules/@conductor-oss/core/dist/index.js.map +1 -1
  27. package/node_modules/@conductor-oss/core/dist/project-paths.d.ts +2 -0
  28. package/node_modules/@conductor-oss/core/dist/project-paths.d.ts.map +1 -0
  29. package/node_modules/@conductor-oss/core/dist/project-paths.js +67 -0
  30. package/node_modules/@conductor-oss/core/dist/project-paths.js.map +1 -0
  31. package/node_modules/@conductor-oss/core/package.json +1 -1
  32. package/node_modules/@conductor-oss/plugin-agent-amp/dist/index.js +1 -1
  33. package/node_modules/@conductor-oss/plugin-agent-amp/package.json +2 -2
  34. package/node_modules/@conductor-oss/plugin-agent-ccr/dist/index.js +1 -1
  35. package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +2 -2
  36. package/node_modules/@conductor-oss/plugin-agent-claude-code/dist/index.js +1 -1
  37. package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +2 -2
  38. package/node_modules/@conductor-oss/plugin-agent-codex/dist/index.js +1 -1
  39. package/node_modules/@conductor-oss/plugin-agent-codex/package.json +2 -2
  40. package/node_modules/@conductor-oss/plugin-agent-cursor-cli/dist/index.js +1 -1
  41. package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +2 -2
  42. package/node_modules/@conductor-oss/plugin-agent-droid/dist/index.js +1 -1
  43. package/node_modules/@conductor-oss/plugin-agent-droid/package.json +2 -2
  44. package/node_modules/@conductor-oss/plugin-agent-gemini/dist/index.js +1 -1
  45. package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +2 -2
  46. package/node_modules/@conductor-oss/plugin-agent-github-copilot/dist/index.js +1 -1
  47. package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +2 -2
  48. package/node_modules/@conductor-oss/plugin-agent-opencode/dist/index.js +1 -1
  49. package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +2 -2
  50. package/node_modules/@conductor-oss/plugin-agent-qwen-code/dist/index.js +1 -1
  51. package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +2 -2
  52. package/node_modules/@conductor-oss/plugin-mcp-server/dist/index.js +1 -1
  53. package/node_modules/@conductor-oss/plugin-mcp-server/package.json +2 -2
  54. package/node_modules/@conductor-oss/plugin-notifier-desktop/dist/index.js +1 -1
  55. package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +2 -2
  56. package/node_modules/@conductor-oss/plugin-notifier-discord/dist/index.js +1 -1
  57. package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +2 -2
  58. package/node_modules/@conductor-oss/plugin-runtime-tmux/dist/index.js +1 -1
  59. package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +2 -2
  60. package/node_modules/@conductor-oss/plugin-scm-github/dist/index.js +1 -1
  61. package/node_modules/@conductor-oss/plugin-scm-github/package.json +2 -2
  62. package/node_modules/@conductor-oss/plugin-terminal-web/dist/index.js +1 -1
  63. package/node_modules/@conductor-oss/plugin-terminal-web/package.json +2 -2
  64. package/node_modules/@conductor-oss/plugin-tracker-github/dist/index.js +1 -1
  65. package/node_modules/@conductor-oss/plugin-tracker-github/package.json +2 -2
  66. package/node_modules/@conductor-oss/plugin-webhook/package.json +2 -2
  67. package/node_modules/@conductor-oss/plugin-workspace-worktree/dist/index.js +1 -1
  68. package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +2 -2
  69. package/package.json +21 -21
  70. package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
  71. package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
  72. package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
  73. package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
  74. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  75. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  76. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  77. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  78. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  79. package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
  80. package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +1 -1
  81. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  82. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  83. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  84. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  85. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  86. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  87. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +1 -1
  88. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
  89. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -3
  90. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
  91. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +2 -2
  92. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
  93. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +1 -1
  94. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
  95. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +1 -1
  96. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  97. package/web/.next/standalone/packages/web/.next/server/app/index.html +1 -1
  98. package/web/.next/standalone/packages/web/.next/server/app/index.rsc +1 -1
  99. package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  100. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  101. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  102. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  103. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  104. package/web/.next/standalone/packages/web/.next/server/chunks/1bc17_next_dist_esm_build_templates_app-route_34b04c2b.js +1 -1
  105. package/web/.next/standalone/packages/web/.next/server/chunks/1bc17_next_dist_esm_build_templates_app-route_b41c4976.js +1 -1
  106. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__005aa909._.js +1 -1
  107. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__03ff76ee._.js +1 -1
  108. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__07ec6d5c._.js +1 -1
  109. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0a0f0f01._.js +1 -1
  110. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0ad3545b._.js +1 -1
  111. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0e59a166._.js +3 -0
  112. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__13ad088c._.js +1 -1
  113. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__14b1d4a3._.js +1 -1
  114. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__1cd55204._.js → [root-of-the-server]__1bc4f8f5._.js} +1 -1
  115. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1f626a16._.js +1 -1
  116. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2062aaab._.js +1 -1
  117. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__206c3d8a._.js +1 -1
  118. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2556a816._.js +1 -1
  119. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3fde7043._.js +1 -1
  120. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__44606e04._.js +1 -1
  121. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__48875cbb._.js +1 -1
  122. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ac9d639._.js +1 -1
  123. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c3fb752._.js +1 -1
  124. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4dab6a6a._.js +1 -1
  125. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ca91fef._.js → [root-of-the-server]__53970b23._.js} +2 -2
  126. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__544326ac._.js +1 -1
  127. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54a218f0._.js +1 -1
  128. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54a76cd2._.js +1 -1
  129. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5661ca72._.js +1 -1
  130. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5cd49624._.js +1 -1
  131. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5d124f64._.js +3 -0
  132. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e0533de._.js +1 -1
  133. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__62608541._.js +1 -1
  134. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6d62709d._.js +1 -1
  135. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6f6826fa._.js +3 -0
  136. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__749331b0._.js +1 -1
  137. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__778e46a1._.js +1 -1
  138. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c9c79703._.js → [root-of-the-server]__7e505454._.js} +1 -1
  139. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7e6ea46e._.js +1 -1
  140. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__84362910._.js +1 -1
  141. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__848eb266._.js +1 -1
  142. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8596d782._.js +1 -1
  143. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__881858fa._.js +1 -1
  144. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__885e3a00._.js +1 -1
  145. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8c519453._.js +1 -1
  146. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96633022._.js +1 -1
  147. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__98697e45._.js +1 -1
  148. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__6b396859._.js → [root-of-the-server]__9b62b450._.js} +1 -1
  149. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9f36b7ec._.js +1 -1
  150. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a44f91a4._.js +1 -1
  151. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__afa79f55._.js +1 -1
  152. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b057f7b2._.js +1 -1
  153. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b091b8bc._.js +3 -0
  154. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c6c755b1._.js → [root-of-the-server]__b3f4ff98._.js} +1 -1
  155. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b59abfbd._.js +1 -1
  156. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bea07e07._.js +1 -1
  157. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c8618cb1._.js +1 -1
  158. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__caf8e7cb._.js +1 -1
  159. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb112606._.js +1 -1
  160. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc74ea40._.js +1 -1
  161. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cd3692a0._.js +1 -1
  162. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cf3cdecd._.js +1 -1
  163. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d09e7a99._.js +1 -1
  164. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d538c110._.js +1 -1
  165. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d93447b9._.js +1 -1
  166. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__dda8eac1._.js +1 -1
  167. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e113f6df._.js +1 -1
  168. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e2573a77._.js +1 -1
  169. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e308bb89._.js +1 -1
  170. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e4976f6d._.js +3 -0
  171. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef773ea6._.js +1 -1
  172. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f0d15920._.js +1 -1
  173. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f47a2a9e._.js +1 -1
  174. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f48eb2d4._.js +1 -1
  175. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f6a8bbd9._.js +12 -12
  176. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__faceea9b._.js +1 -1
  177. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fb6ab669._.js +1 -1
  178. package/web/.next/standalone/packages/web/.next/server/chunks/packages_core_dist_index_cdd30418.js +1 -1
  179. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-amp_dist_index_bf3d8239.js +1 -1
  180. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-ccr_dist_index_69cbf726.js +1 -1
  181. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-claude-code_dist_index_31314e43.js +1 -1
  182. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-cursor-cli_dist_index_8d5cc426.js +1 -1
  183. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-droid_dist_index_f731227a.js +1 -1
  184. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-gemini_dist_index_b2d219e8.js +1 -1
  185. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-github-copilot_dist_index_9f80cb45.js +1 -1
  186. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-opencode_dist_index_7c7015da.js +1 -1
  187. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-qwen-code_dist_index_46dd8653.js +1 -1
  188. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-desktop_dist_index_ef3473f0.js +1 -1
  189. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-discord_dist_index_34257226.js +1 -1
  190. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_scm-github_dist_index_3b5a621e.js +1 -1
  191. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_terminal-web_dist_index_1e0706d3.js +1 -1
  192. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_tracker-github_dist_index_2d7af62f.js +1 -1
  193. package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
  194. package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
  195. package/web/.next/standalone/packages/web/src/app/api/preferences/route.ts +7 -3
  196. package/web/.next/standalone/packages/web/src/app/api/repositories/route.ts +7 -2
  197. package/web/.next/standalone/packages/web/src/app/api/spawn/route.ts +7 -2
  198. package/web/.next/standalone/packages/web/src/app/api/workspaces/route.ts +16 -4
  199. package/web/.next/standalone/packages/web/src/lib/projectConfigSync.ts +57 -9
  200. package/web/.next/standalone/packages/web/tsconfig.tsbuildinfo +1 -1
  201. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__22609b55._.js +0 -3
  202. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c3b5cb01._.js +0 -3
  203. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfb45c10._.js +0 -3
  204. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ee0dea96._.js +0 -3
  205. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f1ccd6fd._.js +0 -3
  206. /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_buildManifest.js +0 -0
  207. /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_clientMiddlewareManifest.json +0 -0
  208. /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_ssgManifest.js +0 -0
  209. /package/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_buildManifest.js +0 -0
  210. /package/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_clientMiddlewareManifest.json +0 -0
  211. /package/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_ssgManifest.js +0 -0
@@ -1,10 +1,11 @@
1
1
  import { type NextRequest, NextResponse } from "next/server";
2
2
  import { readFile, writeFile } from "node:fs/promises";
3
3
  import { parse, stringify } from "yaml";
4
+ import { syncWorkspaceSupportFiles } from "@conductor-oss/core";
4
5
  import { getServices, invalidateServicesCache } from "@/lib/services";
5
6
  import { guardApiAccess, guardApiActionAccess } from "@/lib/auth";
6
7
  import { sessionToDashboard } from "@/lib/serialize";
7
- import { syncProjectLocalConfig } from "@/lib/projectConfigSync";
8
+ import { normalizeRootProjectPaths, syncProjectLocalConfig } from "@/lib/projectConfigSync";
8
9
 
9
10
  /** POST /api/spawn -- Spawn a new agent session. */
10
11
 
@@ -38,14 +39,18 @@ async function persistSpawnAgentSelection(configPath: string, projectId: string,
38
39
  ...nextPreferences,
39
40
  codingAgent: agent,
40
41
  };
42
+ await normalizeRootProjectPaths(nextRoot);
41
43
 
42
44
  const updatedYaml = stringify(nextRoot, { lineWidth: 0 });
43
45
  await writeFile(configPath, updatedYaml, "utf8");
44
46
 
45
47
  try {
46
48
  invalidateServicesCache("spawn agent selection updated");
47
- const { config: refreshedConfig } = await getServices();
49
+ const { config: refreshedConfig, registry } = await getServices();
48
50
  await syncProjectLocalConfig(refreshedConfig as unknown as Record<string, unknown>, projectId);
51
+ syncWorkspaceSupportFiles(refreshedConfig, {
52
+ agentNames: registry.list("agent").map((agent) => agent.name),
53
+ });
49
54
  } catch (err) {
50
55
  await writeFile(configPath, originalConfigRaw, "utf8");
51
56
  invalidateServicesCache("spawn agent selection rollback");
@@ -5,10 +5,15 @@ import { homedir } from "node:os";
5
5
  import { execFile } from "node:child_process";
6
6
  import { promisify } from "node:util";
7
7
  import { parse, stringify } from "yaml";
8
- import { buildConductorBoard, buildProjectConfigRecord, generateSessionPrefix } from "@conductor-oss/core";
8
+ import {
9
+ buildConductorBoard,
10
+ buildProjectConfigRecord,
11
+ generateSessionPrefix,
12
+ syncWorkspaceSupportFiles,
13
+ } from "@conductor-oss/core";
9
14
  import { getServices, invalidateServicesCache } from "@/lib/services";
10
15
  import { guardApiAccess, guardApiActionAccess } from "@/lib/auth";
11
- import { syncProjectLocalConfig } from "@/lib/projectConfigSync";
16
+ import { normalizeRootProjectPaths, syncProjectLocalConfig } from "@/lib/projectConfigSync";
12
17
 
13
18
  const execFileAsync = promisify(execFile);
14
19
 
@@ -277,6 +282,7 @@ async function writeProjectToConfig(args: {
277
282
  const nextProjects = toProjectMap(nextRoot.projects);
278
283
  nextProjects[args.projectId] = args.projectData;
279
284
  nextRoot.projects = nextProjects;
285
+ await normalizeRootProjectPaths(nextRoot);
280
286
 
281
287
  const updatedYaml = stringify(nextRoot, {
282
288
  lineWidth: 0,
@@ -451,8 +457,11 @@ export async function POST(request: NextRequest) {
451
457
  displayName: deriveDisplayName(projectId),
452
458
  });
453
459
  {
454
- const { config: refreshedConfig } = await getServices();
460
+ const { config: refreshedConfig, registry } = await getServices();
455
461
  await syncProjectLocalConfig(refreshedConfig as unknown as Record<string, unknown>, projectId);
462
+ syncWorkspaceSupportFiles(refreshedConfig, {
463
+ agentNames: registry.list("agent").map((agent) => agent.name),
464
+ });
456
465
  }
457
466
 
458
467
  return NextResponse.json(
@@ -537,8 +546,11 @@ export async function POST(request: NextRequest) {
537
546
  displayName: deriveDisplayName(projectId),
538
547
  });
539
548
  {
540
- const { config: refreshedConfig } = await getServices();
549
+ const { config: refreshedConfig, registry } = await getServices();
541
550
  await syncProjectLocalConfig(refreshedConfig as unknown as Record<string, unknown>, projectId);
551
+ syncWorkspaceSupportFiles(refreshedConfig, {
552
+ agentNames: registry.list("agent").map((agent) => agent.name),
553
+ });
542
554
  }
543
555
 
544
556
  return NextResponse.json(
@@ -1,7 +1,11 @@
1
1
  import { join, resolve } from "node:path";
2
- import { writeFile } from "node:fs/promises";
2
+ import { stat, writeFile } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
- import { buildConductorYaml, type ScaffoldProjectConfig } from "@conductor-oss/core";
4
+ import {
5
+ buildConductorYaml,
6
+ resolveConfiguredProjectPath,
7
+ type ScaffoldProjectConfig,
8
+ } from "@conductor-oss/core";
5
9
 
6
10
  type MutableConfig = Record<string, unknown>;
7
11
 
@@ -25,6 +29,14 @@ function expandHome(value: string): string {
25
29
  return resolve(value);
26
30
  }
27
31
 
32
+ async function isDirectory(path: string): Promise<boolean> {
33
+ try {
34
+ return (await stat(path)).isDirectory();
35
+ } catch {
36
+ return false;
37
+ }
38
+ }
39
+
28
40
  function normalizePreferences(value: unknown) {
29
41
  const root = toObject(value);
30
42
  const notifications = toObject(root["notifications"]);
@@ -45,14 +57,18 @@ function normalizePreferences(value: unknown) {
45
57
  };
46
58
  }
47
59
 
48
- function buildProjectScaffold(projectId: string, project: Record<string, unknown>): ScaffoldProjectConfig {
60
+ function buildProjectScaffold(
61
+ projectId: string,
62
+ project: Record<string, unknown>,
63
+ projectPath: string,
64
+ ): ScaffoldProjectConfig {
49
65
  const agentConfig = toObject(project["agentConfig"]);
50
66
 
51
67
  return {
52
68
  projectId,
53
69
  displayName: asNonEmptyString(project["name"]) ?? projectId,
54
70
  repo: asNonEmptyString(project["repo"]) ?? `local-${projectId}`,
55
- path: expandHome(asNonEmptyString(project["path"]) ?? projectId),
71
+ path: projectPath,
56
72
  agent: asNonEmptyString(project["agent"]) ?? "claude-code",
57
73
  defaultBranch: asNonEmptyString(project["defaultBranch"]) ?? "main",
58
74
  defaultWorkingDirectory: asNonEmptyString(project["defaultWorkingDirectory"]),
@@ -66,11 +82,43 @@ function buildProjectScaffold(projectId: string, project: Record<string, unknown
66
82
  };
67
83
  }
68
84
 
85
+ export async function normalizeRootProjectPaths(rootConfig: MutableConfig): Promise<void> {
86
+ const projects = toObject(rootConfig["projects"]);
87
+
88
+ for (const [projectId, rawProject] of Object.entries(projects)) {
89
+ const project = toObject(rawProject);
90
+ const rawProjectPath = asNonEmptyString(project["path"]);
91
+ if (!rawProjectPath) {
92
+ continue;
93
+ }
94
+
95
+ const resolvedProjectPath = resolveConfiguredProjectPath(
96
+ rawProjectPath,
97
+ asNonEmptyString(project["repo"]),
98
+ );
99
+
100
+ if (!await isDirectory(resolvedProjectPath)) {
101
+ continue;
102
+ }
103
+
104
+ projects[projectId] = {
105
+ ...project,
106
+ path: resolvedProjectPath,
107
+ };
108
+ }
109
+
110
+ rootConfig["projects"] = projects;
111
+ }
112
+
69
113
  export async function syncProjectLocalConfig(rootConfig: MutableConfig, projectId: string): Promise<void> {
70
114
  const projects = toObject(rootConfig["projects"]);
71
115
  const project = toObject(projects[projectId]);
72
- const projectPath = asNonEmptyString(project["path"]);
73
- if (!projectPath) {
116
+ const rawProjectPath = asNonEmptyString(project["path"]);
117
+ if (!rawProjectPath) {
118
+ return;
119
+ }
120
+ const projectPath = resolveConfiguredProjectPath(rawProjectPath, asNonEmptyString(project["repo"]));
121
+ if (!await isDirectory(projectPath)) {
74
122
  return;
75
123
  }
76
124
 
@@ -78,13 +126,13 @@ export async function syncProjectLocalConfig(rootConfig: MutableConfig, projectI
78
126
  port: typeof rootConfig["port"] === "number" ? rootConfig["port"] : 4747,
79
127
  dashboardUrl: asNonEmptyString(rootConfig["dashboardUrl"]),
80
128
  preferences: normalizePreferences(rootConfig["preferences"]),
81
- projects: [buildProjectScaffold(projectId, project)],
129
+ projects: [buildProjectScaffold(projectId, project, projectPath)],
82
130
  });
83
-
84
- await writeFile(join(expandHome(projectPath), "conductor.yaml"), yaml, "utf8");
131
+ await writeFile(join(projectPath, "conductor.yaml"), yaml, "utf8");
85
132
  }
86
133
 
87
134
  export async function syncAllProjectLocalConfigs(rootConfig: MutableConfig): Promise<void> {
135
+ await normalizeRootProjectPaths(rootConfig);
88
136
  const projects = toObject(rootConfig["projects"]);
89
137
  for (const projectId of Object.keys(projects)) {
90
138
  await syncProjectLocalConfig(rootConfig, projectId);