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.
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +4 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +1 -1
- package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.d.ts +2 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.d.ts.map +1 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.js +122 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/board-watcher-support-files.test.js.map +1 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.d.ts +2 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.d.ts.map +1 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.js +48 -0
- package/node_modules/@conductor-oss/core/dist/__tests__/project-paths.test.js.map +1 -0
- package/node_modules/@conductor-oss/core/dist/board-diagnostics.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/board-diagnostics.js +12 -2
- package/node_modules/@conductor-oss/core/dist/board-diagnostics.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/board-watcher.d.ts +14 -0
- package/node_modules/@conductor-oss/core/dist/board-watcher.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/board-watcher.js +97 -39
- package/node_modules/@conductor-oss/core/dist/board-watcher.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/config.js +2 -1
- package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/index.d.ts +3 -2
- package/node_modules/@conductor-oss/core/dist/index.d.ts.map +1 -1
- package/node_modules/@conductor-oss/core/dist/index.js +2 -1
- package/node_modules/@conductor-oss/core/dist/index.js.map +1 -1
- package/node_modules/@conductor-oss/core/dist/project-paths.d.ts +2 -0
- package/node_modules/@conductor-oss/core/dist/project-paths.d.ts.map +1 -0
- package/node_modules/@conductor-oss/core/dist/project-paths.js +67 -0
- package/node_modules/@conductor-oss/core/dist/project-paths.js.map +1 -0
- package/node_modules/@conductor-oss/core/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-amp/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-ccr/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-claude-code/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-codex/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-droid/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-gemini/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-opencode/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-mcp-server/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-notifier-desktop/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-notifier-discord/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-runtime-tmux/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-scm-github/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-terminal-web/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-tracker-github/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-webhook/package.json +2 -2
- package/node_modules/@conductor-oss/plugin-workspace-worktree/dist/index.js +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +2 -2
- package/package.json +21 -21
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/1bc17_next_dist_esm_build_templates_app-route_34b04c2b.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/1bc17_next_dist_esm_build_templates_app-route_b41c4976.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__005aa909._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__03ff76ee._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__07ec6d5c._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0a0f0f01._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0ad3545b._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0e59a166._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__13ad088c._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__14b1d4a3._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__1cd55204._.js → [root-of-the-server]__1bc4f8f5._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1f626a16._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2062aaab._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__206c3d8a._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2556a816._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3fde7043._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__44606e04._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__48875cbb._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ac9d639._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c3fb752._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4dab6a6a._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ca91fef._.js → [root-of-the-server]__53970b23._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__544326ac._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54a218f0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54a76cd2._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5661ca72._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5cd49624._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5d124f64._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e0533de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__62608541._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6d62709d._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6f6826fa._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__749331b0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__778e46a1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c9c79703._.js → [root-of-the-server]__7e505454._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7e6ea46e._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__84362910._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__848eb266._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8596d782._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__881858fa._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__885e3a00._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8c519453._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96633022._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__98697e45._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__6b396859._.js → [root-of-the-server]__9b62b450._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9f36b7ec._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a44f91a4._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__afa79f55._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b057f7b2._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b091b8bc._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c6c755b1._.js → [root-of-the-server]__b3f4ff98._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b59abfbd._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bea07e07._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c8618cb1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__caf8e7cb._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb112606._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc74ea40._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cd3692a0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cf3cdecd._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d09e7a99._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d538c110._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d93447b9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__dda8eac1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e113f6df._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e2573a77._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e308bb89._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e4976f6d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef773ea6._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f0d15920._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f47a2a9e._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f48eb2d4._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f6a8bbd9._.js +12 -12
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__faceea9b._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fb6ab669._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_core_dist_index_cdd30418.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-amp_dist_index_bf3d8239.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-ccr_dist_index_69cbf726.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-claude-code_dist_index_31314e43.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-cursor-cli_dist_index_8d5cc426.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-droid_dist_index_f731227a.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-gemini_dist_index_b2d219e8.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-github-copilot_dist_index_9f80cb45.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-opencode_dist_index_7c7015da.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-qwen-code_dist_index_46dd8653.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-desktop_dist_index_ef3473f0.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-discord_dist_index_34257226.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_scm-github_dist_index_3b5a621e.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_terminal-web_dist_index_1e0706d3.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_tracker-github_dist_index_2d7af62f.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/packages/web/src/app/api/preferences/route.ts +7 -3
- package/web/.next/standalone/packages/web/src/app/api/repositories/route.ts +7 -2
- package/web/.next/standalone/packages/web/src/app/api/spawn/route.ts +7 -2
- package/web/.next/standalone/packages/web/src/app/api/workspaces/route.ts +16 -4
- package/web/.next/standalone/packages/web/src/lib/projectConfigSync.ts +57 -9
- package/web/.next/standalone/packages/web/tsconfig.tsbuildinfo +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__22609b55._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c3b5cb01._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfb45c10._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ee0dea96._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f1ccd6fd._.js +0 -3
- /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_ssgManifest.js +0 -0
- /package/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_buildManifest.js +0 -0
- /package/web/.next/static/{NkapotuwrwSJq04fXtieC → 2lp61OU9Asm88Hx_JCL5e}/_clientMiddlewareManifest.json +0 -0
- /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 {
|
|
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 {
|
|
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(
|
|
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:
|
|
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
|
|
73
|
-
if (!
|
|
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);
|