conductor-oss 0.3.1 → 0.3.3

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 (136) hide show
  1. package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
  2. package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
  3. package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
  4. package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
  5. package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
  6. package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
  7. package/node_modules/@conductor-oss/plugin-agent-gemini/dist/index.d.ts +44 -2
  8. package/node_modules/@conductor-oss/plugin-agent-gemini/dist/index.js +203 -17
  9. package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
  10. package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
  11. package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
  12. package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
  13. package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
  14. package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
  15. package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
  16. package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
  17. package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
  18. package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
  19. package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
  20. package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
  21. package/package.json +24 -23
  22. package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
  23. package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
  24. package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
  25. package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
  26. package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
  27. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  28. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  30. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  31. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  32. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  33. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  34. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
  36. package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +3 -3
  37. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  38. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  40. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  43. package/web/.next/standalone/packages/web/.next/server/app/index.html +1 -1
  44. package/web/.next/standalone/packages/web/.next/server/app/index.rsc +4 -4
  45. package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  46. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
  47. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  48. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
  49. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  50. package/web/.next/standalone/packages/web/.next/server/app/page/react-loadable-manifest.json +1 -1
  51. package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
  52. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  53. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  54. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
  55. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  56. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  57. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
  58. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  59. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
  61. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  62. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  63. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__6622b514._.js +1 -1
  64. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__869d9ac0._.js +1 -1
  65. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__9dc23e5a._.js +1 -1
  66. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__c3eb4913._.js → [root-of-the-server]__a324b6db._.js} +2 -2
  67. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b388693f._.js +1 -1
  68. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
  69. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_3acfb388._.js +1 -1
  70. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_668c9201._.js +1 -1
  71. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
  72. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
  73. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
  74. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
  75. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
  76. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_129dde21._.js → node_modules_@clerk_nextjs_dist_esm_app-router_6ed7a74d._.js} +2 -2
  77. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_9e576054._.js +3 -0
  78. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_f2ebd7a9._.js +1 -1
  79. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_79316445._.js +1 -1
  80. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_a078c137._.js +1 -1
  81. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_page_tsx_cd282e82._.js +1 -1
  82. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{packages_web_src_components_aad7de7c._.js → packages_web_src_components_80ce6eea._.js} +1 -1
  83. package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
  84. package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
  85. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  86. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
  87. package/web/.next/standalone/packages/web/.next/static/chunks/25438e9094804f85.js +1 -0
  88. package/web/.next/standalone/packages/web/.next/static/chunks/{5c5637796e242130.js → 34d660195aaf8635.js} +2 -2
  89. package/web/.next/standalone/packages/web/.next/static/chunks/{07a5ac7389686572.js → 3814813ead38f9ae.js} +1 -1
  90. package/web/.next/standalone/packages/web/.next/static/chunks/524a7c2a8e85ea2f.js +1 -0
  91. package/web/.next/{static/chunks/e8d146cc2723147b.js → standalone/packages/web/.next/static/chunks/5672ef74a562c5dd.js} +1 -1
  92. package/web/.next/standalone/packages/web/.next/static/chunks/77d150e9b7dda43c.js +1 -0
  93. package/web/.next/standalone/packages/web/.next/static/chunks/8ec81b945f12169b.js +1 -0
  94. package/web/.next/standalone/packages/web/.next/static/chunks/aa158726d4a10331.js +1 -0
  95. package/web/.next/standalone/packages/web/.next/static/chunks/d3cd3cf58c908ec9.js +1 -0
  96. package/web/.next/standalone/packages/web/.next/static/chunks/df9658182f4f7d54.css +3 -0
  97. package/web/.next/standalone/packages/web/package.json +1 -0
  98. package/web/.next/standalone/packages/web/src/components/layout/Sidebar.tsx +20 -2
  99. package/web/.next/standalone/packages/web/src/components/layout/WorkspaceSidebarPanel.tsx +64 -74
  100. package/web/.next/standalone/packages/web/src/components/sessions/SessionOverview.tsx +114 -50
  101. package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +459 -115
  102. package/web/.next/standalone/packages/web/src/features/dashboard/components/WorkspaceOverview.tsx +13 -31
  103. package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +4 -1
  104. package/web/.next/standalone/packages/web/src/hooks/useSessions.ts +13 -0
  105. package/web/.next/standalone/packages/web/src/lib/types.ts +3 -0
  106. package/web/.next/static/chunks/25438e9094804f85.js +1 -0
  107. package/web/.next/static/chunks/{5c5637796e242130.js → 34d660195aaf8635.js} +2 -2
  108. package/web/.next/static/chunks/{07a5ac7389686572.js → 3814813ead38f9ae.js} +1 -1
  109. package/web/.next/static/chunks/524a7c2a8e85ea2f.js +1 -0
  110. package/web/.next/{standalone/packages/web/.next/static/chunks/e8d146cc2723147b.js → static/chunks/5672ef74a562c5dd.js} +1 -1
  111. package/web/.next/static/chunks/77d150e9b7dda43c.js +1 -0
  112. package/web/.next/static/chunks/8ec81b945f12169b.js +1 -0
  113. package/web/.next/static/chunks/aa158726d4a10331.js +1 -0
  114. package/web/.next/static/chunks/d3cd3cf58c908ec9.js +1 -0
  115. package/web/.next/static/chunks/df9658182f4f7d54.css +3 -0
  116. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_1776df7f._.js +0 -3
  117. package/web/.next/standalone/packages/web/.next/static/chunks/3603312f8407bd12.js +0 -1
  118. package/web/.next/standalone/packages/web/.next/static/chunks/382be8f0b30c5f08.js +0 -1
  119. package/web/.next/standalone/packages/web/.next/static/chunks/479b8cb58c95a8a0.js +0 -1
  120. package/web/.next/standalone/packages/web/.next/static/chunks/53e4f3b495e423c9.js +0 -1
  121. package/web/.next/standalone/packages/web/.next/static/chunks/5e05e67a26b7ecbc.js +0 -1
  122. package/web/.next/standalone/packages/web/.next/static/chunks/6d083840413686dd.css +0 -3
  123. package/web/.next/standalone/packages/web/.next/static/chunks/c7c1bd729f17c8bf.js +0 -1
  124. package/web/.next/static/chunks/3603312f8407bd12.js +0 -1
  125. package/web/.next/static/chunks/382be8f0b30c5f08.js +0 -1
  126. package/web/.next/static/chunks/479b8cb58c95a8a0.js +0 -1
  127. package/web/.next/static/chunks/53e4f3b495e423c9.js +0 -1
  128. package/web/.next/static/chunks/5e05e67a26b7ecbc.js +0 -1
  129. package/web/.next/static/chunks/6d083840413686dd.css +0 -3
  130. package/web/.next/static/chunks/c7c1bd729f17c8bf.js +0 -1
  131. /package/web/.next/standalone/packages/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_buildManifest.js +0 -0
  132. /package/web/.next/standalone/packages/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_clientMiddlewareManifest.json +0 -0
  133. /package/web/.next/standalone/packages/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_ssgManifest.js +0 -0
  134. /package/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_buildManifest.js +0 -0
  135. /package/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_clientMiddlewareManifest.json +0 -0
  136. /package/web/.next/static/{oFTStwDpHHac4pinj0rAJ → -Z2NIcYE-i0soCDJ1TgtS}/_ssgManifest.js +0 -0
@@ -41,6 +41,7 @@ interface SessionOverviewProps {
41
41
 
42
42
  const statusVariant: Record<string, "success" | "warning" | "error" | "info" | "default"> = {
43
43
  archived: "default",
44
+ queued: "info",
44
45
  running: "success",
45
46
  working: "success",
46
47
  done: "default",
@@ -123,6 +124,12 @@ function pickMetadata(session: SessionData, key: string): string | undefined {
123
124
  return undefined;
124
125
  }
125
126
 
127
+ function parsePositiveInteger(value?: string): number | null {
128
+ if (!value) return null;
129
+ const parsed = Number.parseInt(value, 10);
130
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
131
+ }
132
+
126
133
  export function SessionOverview({ session }: SessionOverviewProps) {
127
134
  const { preferences } = usePreferences();
128
135
 
@@ -167,6 +174,40 @@ export function SessionOverview({ session }: SessionOverviewProps) {
167
174
  [session],
168
175
  );
169
176
 
177
+ const queuePosition = useMemo(
178
+ () => parsePositiveInteger(pickMetadata(session, "queuePosition")),
179
+ [session],
180
+ );
181
+ const queueDepth = useMemo(
182
+ () => parsePositiveInteger(pickMetadata(session, "queueDepth")),
183
+ [session],
184
+ );
185
+ const recoveryState = useMemo(
186
+ () => pickMetadata(session, "recoveryState") ?? "",
187
+ [session],
188
+ );
189
+ const recoverySummary = useMemo(
190
+ () => {
191
+ if (session.status === "queued") {
192
+ return queuePosition ? `Waiting in queue at position ${queuePosition}${queueDepth ? ` of ${queueDepth}` : ""}.` : "Waiting in the launch queue.";
193
+ }
194
+ if (recoveryState === "requeued_after_restart") {
195
+ return "This session was recovered after a backend restart and requeued automatically.";
196
+ }
197
+ if (recoveryState === "reattach_pending") {
198
+ return "Reattaching the tmux-managed runtime after backend restart.";
199
+ }
200
+ if (recoveryState === "detached_runtime") {
201
+ return "The backend restarted while the agent may still be running. Kill or archive this session before resuming.";
202
+ }
203
+ if (recoveryState === "resume_required") {
204
+ return "This session was recovered after a backend restart. Send a message to resume in the same workspace.";
205
+ }
206
+ return "";
207
+ },
208
+ [queueDepth, queuePosition, recoveryState, session.status],
209
+ );
210
+
170
211
  const remoteEditorUrl = useMemo(
171
212
  () => buildRemoteEditorUrl({
172
213
  editorId: preferences?.ide,
@@ -207,56 +248,80 @@ export function SessionOverview({ session }: SessionOverviewProps) {
207
248
  </Card>
208
249
  )}
209
250
 
210
- <div className="grid gap-3 lg:grid-cols-[minmax(0,1fr)_300px]">
211
- <div className="space-y-3">
212
- {(session.branch || worktree) && (
213
- <Card>
214
- <CardHeader>
215
- <GitBranch className="h-4 w-4 text-[var(--text-faint)]" />
216
- <span className="text-[12px] font-semibold text-[var(--text-normal)]">Workspace</span>
217
- </CardHeader>
218
- <CardContent className="space-y-2">
219
- {session.branch && (
220
- <div className="surface-panel flex items-center gap-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
221
- <GitBranch className="h-3.5 w-3.5 text-[var(--text-faint)]" />
222
- <CopyText text={session.branch} />
223
- </div>
224
- )}
225
- {worktree && (
226
- <div className="surface-panel flex items-center gap-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
227
- <FolderGit2 className="h-3.5 w-3.5 text-[var(--text-faint)]" />
228
- <CopyText text={worktree} />
229
- </div>
230
- )}
231
- {(remoteEditorUrl || remoteAuthority) && (
232
- <div className="surface-panel space-y-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
233
- {remoteEditorUrl && remoteEditorLabel ? (
234
- <a
235
- href={remoteEditorUrl}
236
- rel="noreferrer"
237
- className="inline-flex items-center gap-1.5 text-[12px] font-medium text-[var(--accent)] transition-colors hover:text-[var(--text-strong)]"
238
- >
239
- <SquareArrowOutUpRight className="h-3.5 w-3.5" />
240
- <span>{`Open in ${remoteEditorLabel}`}</span>
241
- </a>
242
- ) : (
243
- <p className="text-[12px] text-[var(--text-muted)]">
244
- Remote deep links currently support VS Code and VS Code Insiders.
245
- </p>
246
- )}
247
- {remoteAuthority && (
248
- <p className="text-[11px] text-[var(--text-muted)]">
249
- Remote SSH: <span className="font-mono text-[var(--text-normal)]">{remoteAuthority}</span>
250
- </p>
251
- )}
252
- </div>
253
- )}
254
- </CardContent>
255
- </Card>
256
- )}
257
- </div>
251
+ {(session.status === "queued" || recoveryState) && (
252
+ <Card>
253
+ <CardHeader>
254
+ <Clock3 className="h-4 w-4 text-[var(--accent)]" />
255
+ <span className="text-[12px] font-semibold uppercase tracking-[0.08em] text-[var(--text-faint)]">
256
+ Launch State
257
+ </span>
258
+ </CardHeader>
259
+ <CardContent className="space-y-2">
260
+ <div className="flex flex-wrap items-center gap-2">
261
+ <Badge variant={statusVariant[session.status] ?? "default"}>{session.status}</Badge>
262
+ {queuePosition ? (
263
+ <Badge variant="info">
264
+ Queue #{queuePosition}{queueDepth ? ` / ${queueDepth}` : ""}
265
+ </Badge>
266
+ ) : null}
267
+ {recoveryState ? (
268
+ <Badge variant="warning">{recoveryState.replaceAll("_", " ")}</Badge>
269
+ ) : null}
270
+ </div>
271
+ {recoverySummary ? (
272
+ <p className="text-[13px] leading-relaxed text-[var(--text-normal)]">{recoverySummary}</p>
273
+ ) : null}
274
+ </CardContent>
275
+ </Card>
276
+ )}
277
+
278
+ <div className="space-y-3">
279
+ {(session.branch || worktree) && (
280
+ <Card>
281
+ <CardHeader>
282
+ <GitBranch className="h-4 w-4 text-[var(--text-faint)]" />
283
+ <span className="text-[12px] font-semibold text-[var(--text-normal)]">Workspace</span>
284
+ </CardHeader>
285
+ <CardContent className="space-y-2">
286
+ {session.branch && (
287
+ <div className="surface-panel flex items-center gap-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
288
+ <GitBranch className="h-3.5 w-3.5 text-[var(--text-faint)]" />
289
+ <CopyText text={session.branch} />
290
+ </div>
291
+ )}
292
+ {worktree && (
293
+ <div className="surface-panel flex items-center gap-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
294
+ <FolderGit2 className="h-3.5 w-3.5 text-[var(--text-faint)]" />
295
+ <CopyText text={worktree} />
296
+ </div>
297
+ )}
298
+ {(remoteEditorUrl || remoteAuthority) && (
299
+ <div className="surface-panel space-y-2 rounded-[var(--radius-sm)] border px-2.5 py-2">
300
+ {remoteEditorUrl && remoteEditorLabel ? (
301
+ <a
302
+ href={remoteEditorUrl}
303
+ rel="noreferrer"
304
+ className="inline-flex items-center gap-1.5 text-[12px] font-medium text-[var(--accent)] transition-colors hover:text-[var(--text-strong)]"
305
+ >
306
+ <SquareArrowOutUpRight className="h-3.5 w-3.5" />
307
+ <span>{`Open in ${remoteEditorLabel}`}</span>
308
+ </a>
309
+ ) : (
310
+ <p className="text-[12px] text-[var(--text-muted)]">
311
+ Remote deep links currently support VS Code and VS Code Insiders.
312
+ </p>
313
+ )}
314
+ {remoteAuthority && (
315
+ <p className="text-[11px] text-[var(--text-muted)]">
316
+ Remote SSH: <span className="font-mono text-[var(--text-normal)]">{remoteAuthority}</span>
317
+ </p>
318
+ )}
319
+ </div>
320
+ )}
321
+ </CardContent>
322
+ </Card>
323
+ )}
258
324
 
259
- <div className="space-y-3">
260
325
  <Card>
261
326
  <CardHeader>
262
327
  <AgentTileIcon seed={{ label: agentName || "agent" }} className="h-6 w-6" />
@@ -289,7 +354,6 @@ export function SessionOverview({ session }: SessionOverviewProps) {
289
354
  />
290
355
  </CardContent>
291
356
  </Card>
292
- </div>
293
357
  </div>
294
358
  </div>
295
359
  );