conductor-oss 0.2.18 → 0.2.20
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/dashboard.js +2 -2
- package/dist/commands/start.d.ts +3 -6
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +450 -220
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/native/conductor +0 -0
- package/node_modules/@conductor-oss/core/dist/session-manager.js +1 -1
- package/node_modules/@conductor-oss/core/dist/session-manager.js.map +1 -1
- package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
- package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
- package/package.json +21 -22
- package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/packages/web/.next/routes-manifest.json +0 -6
- 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/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +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 +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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 +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +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/config/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +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/branches/route.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +4 -4
- 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 +4 -4
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
- package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +0 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1ed2e6c1._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3d6b30a3._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a0b6570d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0e4dc4f7.js +2 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__12eb9005._.js → [root-of-the-server]__48817f02._.js} +2 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__6622b514._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__869d9ac0._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__9dc23e5a._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_38e7b35d._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_f665760b._.js +3 -0
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_f2ebd7a9._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_79316445._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_a078c137._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_page_tsx_cd282e82._.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{packages_web_src_components_3809c507._.js → packages_web_src_components_6cab1c8c._.js} +1 -1
- package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +1 -2
- 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/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
- package/web/.next/standalone/packages/web/.next/static/chunks/062888342200567f.js +1 -0
- package/web/.next/{static/chunks/28dd6ef2af62b509.js → standalone/packages/web/.next/static/chunks/3b757dce050133c8.js} +2 -2
- package/web/.next/standalone/packages/web/.next/static/chunks/{c959976264f14eba.js → 5c7e8425945ad682.js} +1 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/6c9a11faed9daf4d.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/8221b78965a50858.js +1 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/8de84e208e201d72.css +3 -0
- package/web/.next/standalone/packages/web/.next/static/chunks/{e862e73b22fe29c2.js → c4ea57fb949fb623.js} +1 -1
- package/web/.next/standalone/packages/web/src/components/layout/TopBar.tsx +8 -10
- package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +32 -16
- package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +12 -2
- package/web/.next/standalone/packages/web/src/proxy.ts +1 -0
- package/web/.next/static/chunks/062888342200567f.js +1 -0
- package/web/.next/{standalone/packages/web/.next/static/chunks/28dd6ef2af62b509.js → static/chunks/3b757dce050133c8.js} +2 -2
- package/web/.next/static/chunks/{c959976264f14eba.js → 5c7e8425945ad682.js} +1 -1
- package/web/.next/static/chunks/6c9a11faed9daf4d.js +1 -0
- package/web/.next/static/chunks/8221b78965a50858.js +1 -0
- package/web/.next/static/chunks/8de84e208e201d72.css +3 -0
- package/web/.next/static/chunks/{e862e73b22fe29c2.js → c4ea57fb949fb623.js} +1 -1
- package/dist/commands/watch.d.ts +0 -12
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -84
- package/dist/commands/watch.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -12
- package/dist/commands/webhook.d.ts.map +0 -1
- package/dist/commands/webhook.js +0 -59
- package/dist/commands/webhook.js.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.d.ts +0 -28
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.d.ts.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.js +0 -295
- package/node_modules/@conductor-oss/plugin-webhook/dist/index.js.map +0 -1
- package/node_modules/@conductor-oss/plugin-webhook/package.json +0 -11
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/app-paths-manifest.json +0 -3
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/build-manifest.json +0 -11
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/server-reference-manifest.json +0 -4
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +0 -8
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.map +0 -5
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +0 -1
- package/web/.next/standalone/packages/web/.next/server/app/api/agents/route_client-reference-manifest.js +0 -2
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7633d324._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bf8faac8._.js +0 -4
- package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_agents_route_actions_29063d1a.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_78af9fdf._.js +0 -3
- package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_c4bad84a._.js +0 -3
- package/web/.next/standalone/packages/web/.next/static/chunks/1e67fbc3874d3f51.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/2b2a24dff50e7dc9.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/483eb2824f5282c7.js +0 -1
- package/web/.next/standalone/packages/web/.next/static/chunks/860d84e1f09476a4.css +0 -3
- package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +0 -223
- package/web/.next/static/chunks/1e67fbc3874d3f51.js +0 -1
- package/web/.next/static/chunks/2b2a24dff50e7dc9.js +0 -1
- package/web/.next/static/chunks/483eb2824f5282c7.js +0 -1
- package/web/.next/static/chunks/860d84e1f09476a4.css +0 -3
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_buildManifest.js +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/packages/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_ssgManifest.js +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_buildManifest.js +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{eSF3qxz6RT8UXiwr-uibJ → P8IBAo_woCzrGXJiYCZto}/_ssgManifest.js +0 -0
|
@@ -2,32 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo } from "react";
|
|
4
4
|
import { Settings } from "lucide-react";
|
|
5
|
-
import type { DashboardSession } from "@/lib/types";
|
|
6
5
|
|
|
7
6
|
interface TopBarProps {
|
|
8
|
-
|
|
9
|
-
fallbackTitle?: string;
|
|
7
|
+
title?: string;
|
|
10
8
|
onOpenPreferences?: () => void;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
|
-
export const TopBar = memo(function TopBar({
|
|
14
|
-
const title = session?.summary ?? fallbackTitle ?? "Create Workspace";
|
|
15
|
-
|
|
11
|
+
export const TopBar = memo(function TopBar({ title, onOpenPreferences }: TopBarProps) {
|
|
16
12
|
return (
|
|
17
|
-
<header className="flex h-
|
|
13
|
+
<header className="flex h-12 items-center border-b border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-4 text-[13px] text-[var(--vk-text-muted)] sm:h-14 sm:px-5 sm:text-[14px]">
|
|
18
14
|
<div className="min-w-0 flex-1 text-center">
|
|
19
|
-
<span className="block truncate">
|
|
15
|
+
<span className="block truncate font-medium tracking-[0.01em] text-[var(--vk-text-normal)]">
|
|
16
|
+
{title ?? "All Projects"}
|
|
17
|
+
</span>
|
|
20
18
|
</div>
|
|
21
19
|
{onOpenPreferences ? (
|
|
22
20
|
<div className="ml-1 flex shrink-0">
|
|
23
21
|
<button
|
|
24
22
|
type="button"
|
|
25
23
|
onClick={onOpenPreferences}
|
|
26
|
-
className="inline-flex h-
|
|
24
|
+
className="inline-flex h-8 w-8 items-center justify-center rounded-[6px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]"
|
|
27
25
|
aria-label="Open preferences"
|
|
28
26
|
title="Preferences"
|
|
29
27
|
>
|
|
30
|
-
<Settings className="h-
|
|
28
|
+
<Settings className="h-4 w-4" />
|
|
31
29
|
</button>
|
|
32
30
|
</div>
|
|
33
31
|
) : null}
|
|
@@ -75,6 +75,8 @@ const EXECUTOR_ORDER = [
|
|
|
75
75
|
"ccr",
|
|
76
76
|
];
|
|
77
77
|
|
|
78
|
+
const DEFAULT_AGENT = "claude-code";
|
|
79
|
+
|
|
78
80
|
const EXECUTOR_LABELS: Record<string, string> = {
|
|
79
81
|
codex: "Codex",
|
|
80
82
|
gemini: "Gemini",
|
|
@@ -928,6 +930,17 @@ export default function DashboardClient() {
|
|
|
928
930
|
() => projects.find((project) => project.id === selectedProjectId) ?? null,
|
|
929
931
|
[projects, selectedProjectId],
|
|
930
932
|
);
|
|
933
|
+
const topBarTitle = useMemo(() => {
|
|
934
|
+
if (selectedSession) {
|
|
935
|
+
return [selectedSession.projectId, selectedSession.branch].filter(Boolean).join(" \u00b7 ");
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
if (selectedProject) {
|
|
939
|
+
return [selectedProject.id, selectedProject.defaultBranch || "main"].filter(Boolean).join(" \u00b7 ");
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
return "All Projects";
|
|
943
|
+
}, [selectedProject, selectedSession]);
|
|
931
944
|
|
|
932
945
|
const agentOptions = useMemo(() => {
|
|
933
946
|
const safeAgents = Array.isArray(agents)
|
|
@@ -950,7 +963,7 @@ export default function DashboardClient() {
|
|
|
950
963
|
opts.add(selectedAgent);
|
|
951
964
|
}
|
|
952
965
|
if (opts.size === 0) {
|
|
953
|
-
opts.add(preferences?.codingAgent ||
|
|
966
|
+
opts.add(preferences?.codingAgent || DEFAULT_AGENT);
|
|
954
967
|
}
|
|
955
968
|
return [...opts];
|
|
956
969
|
}, [agents, preferences?.codingAgent, projects, selectedAgent]);
|
|
@@ -1017,12 +1030,12 @@ export default function DashboardClient() {
|
|
|
1017
1030
|
throw new Error(data?.error ?? `Failed to load preferences: ${res.status}`);
|
|
1018
1031
|
}
|
|
1019
1032
|
if (cancelled) return;
|
|
1020
|
-
const normalized = normalizePreferences(data?.preferences,
|
|
1033
|
+
const normalized = normalizePreferences(data?.preferences, DEFAULT_AGENT);
|
|
1021
1034
|
setPreferences(normalized);
|
|
1022
1035
|
setPreferencesError(null);
|
|
1023
1036
|
} catch (err) {
|
|
1024
1037
|
if (cancelled) return;
|
|
1025
|
-
setPreferences(normalizePreferences(null,
|
|
1038
|
+
setPreferences(normalizePreferences(null, DEFAULT_AGENT));
|
|
1026
1039
|
setPreferencesError(err instanceof Error ? err.message : "Failed to load preferences");
|
|
1027
1040
|
} finally {
|
|
1028
1041
|
if (!cancelled) {
|
|
@@ -1063,17 +1076,17 @@ export default function DashboardClient() {
|
|
|
1063
1076
|
useEffect(() => {
|
|
1064
1077
|
if (agentOptions.length === 0) return;
|
|
1065
1078
|
if (!selectedAgent || !agentOptions.includes(selectedAgent)) {
|
|
1066
|
-
const fallbackAgent = preferences?.codingAgent ||
|
|
1079
|
+
const fallbackAgent = preferences?.codingAgent || DEFAULT_AGENT;
|
|
1067
1080
|
setSelectedAgent(
|
|
1068
1081
|
agentOptions.includes(fallbackAgent)
|
|
1069
1082
|
? fallbackAgent
|
|
1070
|
-
: agentOptions[0] ??
|
|
1083
|
+
: agentOptions[0] ?? DEFAULT_AGENT,
|
|
1071
1084
|
);
|
|
1072
1085
|
}
|
|
1073
1086
|
}, [agentOptions, preferences?.codingAgent, selectedAgent]);
|
|
1074
1087
|
|
|
1075
1088
|
useEffect(() => {
|
|
1076
|
-
const effectiveAgent = selectedAgent || selectedProject?.agent || preferences?.codingAgent ||
|
|
1089
|
+
const effectiveAgent = selectedAgent || selectedProject?.agent || preferences?.codingAgent || DEFAULT_AGENT;
|
|
1077
1090
|
const preferredModel = selectedProject && normalizeAgentName(selectedProject.agent) === normalizeAgentName(effectiveAgent)
|
|
1078
1091
|
? selectedProject.agentModel
|
|
1079
1092
|
: null;
|
|
@@ -1110,7 +1123,7 @@ export default function DashboardClient() {
|
|
|
1110
1123
|
if (!res.ok) {
|
|
1111
1124
|
throw new Error(data?.error ?? `Failed to save preferences: ${res.status}`);
|
|
1112
1125
|
}
|
|
1113
|
-
const normalized = normalizePreferences(data?.preferences, next.codingAgent ||
|
|
1126
|
+
const normalized = normalizePreferences(data?.preferences, next.codingAgent || DEFAULT_AGENT);
|
|
1114
1127
|
setPreferences(normalized);
|
|
1115
1128
|
setSelectedAgent(normalized.codingAgent);
|
|
1116
1129
|
if (options?.closeDialog !== false) {
|
|
@@ -1165,7 +1178,7 @@ export default function DashboardClient() {
|
|
|
1165
1178
|
return;
|
|
1166
1179
|
}
|
|
1167
1180
|
|
|
1168
|
-
const effectiveAgent = selectedAgent ||
|
|
1181
|
+
const effectiveAgent = selectedAgent || DEFAULT_AGENT;
|
|
1169
1182
|
const selectedAgentState = agentStatesByName[normalizeAgentName(effectiveAgent)] ?? null;
|
|
1170
1183
|
if (selectedAgentState && !selectedAgentState.ready) {
|
|
1171
1184
|
setCreateError(
|
|
@@ -1300,14 +1313,18 @@ export default function DashboardClient() {
|
|
|
1300
1313
|
}, [refreshConfig, syncSidebarForViewport]);
|
|
1301
1314
|
|
|
1302
1315
|
const onboardingRequired = !preferencesLoading && !!preferences && !preferences.onboardingAcknowledged;
|
|
1303
|
-
const resolvedPreferences = preferences ?? normalizePreferences(null, selectedAgent ||
|
|
1304
|
-
const resolvedCodingAgent = selectedAgent || resolvedPreferences.codingAgent ||
|
|
1316
|
+
const resolvedPreferences = preferences ?? normalizePreferences(null, selectedAgent || DEFAULT_AGENT);
|
|
1317
|
+
const resolvedCodingAgent = selectedAgent || resolvedPreferences.codingAgent || DEFAULT_AGENT;
|
|
1305
1318
|
|
|
1306
1319
|
const handleSelectProject = useCallback((projectId: string | null) => {
|
|
1307
1320
|
setSelectedProjectId(projectId);
|
|
1308
1321
|
setSelectedSessionId(null);
|
|
1322
|
+
const nextAgent = projectId
|
|
1323
|
+
? projects.find((project) => project.id === projectId)?.agent
|
|
1324
|
+
: preferences?.codingAgent;
|
|
1325
|
+
setSelectedAgent(nextAgent || DEFAULT_AGENT);
|
|
1309
1326
|
closeSidebarOnMobile();
|
|
1310
|
-
}, [closeSidebarOnMobile]);
|
|
1327
|
+
}, [closeSidebarOnMobile, preferences?.codingAgent, projects]);
|
|
1311
1328
|
|
|
1312
1329
|
const handleSelectSession = useCallback((id: string) => {
|
|
1313
1330
|
setSelectedSessionId(id);
|
|
@@ -1459,8 +1476,7 @@ export default function DashboardClient() {
|
|
|
1459
1476
|
sidebar={sidebarContent}
|
|
1460
1477
|
>
|
|
1461
1478
|
<TopBar
|
|
1462
|
-
|
|
1463
|
-
fallbackTitle={selectedProjectId ?? "All Projects"}
|
|
1479
|
+
title={topBarTitle}
|
|
1464
1480
|
onOpenPreferences={handleOpenPreferences}
|
|
1465
1481
|
/>
|
|
1466
1482
|
|
|
@@ -1583,7 +1599,7 @@ function NewWorkspaceDialog({
|
|
|
1583
1599
|
const orderedAgentOptions = useMemo(() => {
|
|
1584
1600
|
const opts = [...new Set(agentOptions)];
|
|
1585
1601
|
if (opts.length === 0) {
|
|
1586
|
-
opts.push(defaultAgent ||
|
|
1602
|
+
opts.push(defaultAgent || DEFAULT_AGENT);
|
|
1587
1603
|
}
|
|
1588
1604
|
|
|
1589
1605
|
const rankMap = new Map(EXECUTOR_ORDER.map((name, index) => [name, index]));
|
|
@@ -1597,7 +1613,7 @@ function NewWorkspaceDialog({
|
|
|
1597
1613
|
|
|
1598
1614
|
useEffect(() => {
|
|
1599
1615
|
if (!orderedAgentOptions.includes(agent)) {
|
|
1600
|
-
setAgent(orderedAgentOptions[0] ??
|
|
1616
|
+
setAgent(orderedAgentOptions[0] ?? DEFAULT_AGENT);
|
|
1601
1617
|
}
|
|
1602
1618
|
}, [agent, orderedAgentOptions]);
|
|
1603
1619
|
|
|
@@ -3349,7 +3365,7 @@ function SettingsDialog({
|
|
|
3349
3365
|
opts.add(codingAgent);
|
|
3350
3366
|
}
|
|
3351
3367
|
if (opts.size === 0) {
|
|
3352
|
-
opts.add(
|
|
3368
|
+
opts.add(DEFAULT_AGENT);
|
|
3353
3369
|
}
|
|
3354
3370
|
const rankMap = new Map(EXECUTOR_ORDER.map((name, index) => [name, index]));
|
|
3355
3371
|
return [...opts].sort((left, right) => {
|
|
@@ -30,6 +30,17 @@ export default function SessionPageClient() {
|
|
|
30
30
|
() => dashboardSessions.find((session) => session.id === params.id) ?? null,
|
|
31
31
|
[dashboardSessions, params.id],
|
|
32
32
|
);
|
|
33
|
+
const topBarTitle = useMemo(() => {
|
|
34
|
+
if (selectedSession) {
|
|
35
|
+
return [selectedSession.projectId, selectedSession.branch].filter(Boolean).join(" \u00b7 ");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (selectedProjectId) {
|
|
39
|
+
return selectedProjectId;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return "Session";
|
|
43
|
+
}, [selectedProjectId, selectedSession]);
|
|
33
44
|
|
|
34
45
|
useEffect(() => {
|
|
35
46
|
if (selectedSession?.projectId) {
|
|
@@ -114,8 +125,7 @@ export default function SessionPageClient() {
|
|
|
114
125
|
}
|
|
115
126
|
>
|
|
116
127
|
<TopBar
|
|
117
|
-
|
|
118
|
-
fallbackTitle={selectedSession?.projectId ?? "Session"}
|
|
128
|
+
title={topBarTitle}
|
|
119
129
|
/>
|
|
120
130
|
<div className="min-h-0 flex-1 overflow-hidden">
|
|
121
131
|
<SessionDetail sessionId={params.id} />
|