@exoscient/control-panel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +14 -0
  2. package/dist/AppControlPanel.d.ts +77 -0
  3. package/dist/AppControlPanel.d.ts.map +1 -0
  4. package/dist/AppControlPanel.js +1625 -0
  5. package/dist/AppControlPanel.js.map +1 -0
  6. package/dist/ControlPanelShell.d.ts +39 -0
  7. package/dist/ControlPanelShell.d.ts.map +1 -0
  8. package/dist/ControlPanelShell.js +152 -0
  9. package/dist/ControlPanelShell.js.map +1 -0
  10. package/dist/ExoLauncherSimulator.d.ts +36 -0
  11. package/dist/ExoLauncherSimulator.d.ts.map +1 -0
  12. package/dist/ExoLauncherSimulator.js +253 -0
  13. package/dist/ExoLauncherSimulator.js.map +1 -0
  14. package/dist/TaskDetail.d.ts +180 -0
  15. package/dist/TaskDetail.d.ts.map +1 -0
  16. package/dist/TaskDetail.js +889 -0
  17. package/dist/TaskDetail.js.map +1 -0
  18. package/dist/TaskListPage.d.ts +28 -0
  19. package/dist/TaskListPage.d.ts.map +1 -0
  20. package/dist/TaskListPage.js +16 -0
  21. package/dist/TaskListPage.js.map +1 -0
  22. package/dist/TaskWorkspace.d.ts +62 -0
  23. package/dist/TaskWorkspace.d.ts.map +1 -0
  24. package/dist/TaskWorkspace.js +592 -0
  25. package/dist/TaskWorkspace.js.map +1 -0
  26. package/dist/ai-plane.d.ts +75 -0
  27. package/dist/ai-plane.d.ts.map +1 -0
  28. package/dist/ai-plane.js +124 -0
  29. package/dist/ai-plane.js.map +1 -0
  30. package/dist/browser-icons.d.ts +25 -0
  31. package/dist/browser-icons.d.ts.map +1 -0
  32. package/dist/browser-icons.js +125 -0
  33. package/dist/browser-icons.js.map +1 -0
  34. package/dist/client-actions.d.ts +45 -0
  35. package/dist/client-actions.d.ts.map +1 -0
  36. package/dist/client-actions.js +48 -0
  37. package/dist/client-actions.js.map +1 -0
  38. package/dist/control-panel-shared.d.ts +58 -0
  39. package/dist/control-panel-shared.d.ts.map +1 -0
  40. package/dist/control-panel-shared.js +79 -0
  41. package/dist/control-panel-shared.js.map +1 -0
  42. package/dist/control-panel.css +4156 -0
  43. package/dist/index.d.ts +30 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +16 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/repository-workflow.d.ts +27 -0
  48. package/dist/repository-workflow.d.ts.map +1 -0
  49. package/dist/repository-workflow.js +24 -0
  50. package/dist/repository-workflow.js.map +1 -0
  51. package/dist/result.d.ts +6 -0
  52. package/dist/result.d.ts.map +1 -0
  53. package/dist/result.js +77 -0
  54. package/dist/result.js.map +1 -0
  55. package/dist/task-consistency.d.ts +28 -0
  56. package/dist/task-consistency.d.ts.map +1 -0
  57. package/dist/task-consistency.js +25 -0
  58. package/dist/task-consistency.js.map +1 -0
  59. package/dist/task-detail.browser.js +2709 -0
  60. package/dist/task-detail.css +1601 -0
  61. package/dist/task-state.d.ts +11 -0
  62. package/dist/task-state.d.ts.map +1 -0
  63. package/dist/task-state.js +103 -0
  64. package/dist/task-state.js.map +1 -0
  65. package/dist/telemetry.d.ts +39 -0
  66. package/dist/telemetry.d.ts.map +1 -0
  67. package/dist/telemetry.js +106 -0
  68. package/dist/telemetry.js.map +1 -0
  69. package/dist/trace.d.ts +80 -0
  70. package/dist/trace.d.ts.map +1 -0
  71. package/dist/trace.js +694 -0
  72. package/dist/trace.js.map +1 -0
  73. package/dist/updates.d.ts +72 -0
  74. package/dist/updates.d.ts.map +1 -0
  75. package/dist/updates.js +269 -0
  76. package/dist/updates.js.map +1 -0
  77. package/package.json +58 -0
@@ -0,0 +1,592 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { Send, X } from 'lucide-react';
4
+ import { AttachmentPicker, TaskDetailPage, WorkingIndicator, isTaskBusy, isTaskQueued, taskTitleText, useElapsedNow, } from './TaskDetail';
5
+ import { TaskListPage } from './TaskListPage';
6
+ import { appendTaskTraceEvent, lastTaskTurn, mergeTaskTrace, mergeTasks, taskSyncVersion, upsertTask } from './task-state';
7
+ import { sameTaskConsistencySignature, taskConsistencySignature } from './task-consistency';
8
+ import { selectedTaskModelSelection, taskModelOptionValue } from './control-panel-shared';
9
+ const tasksPerPage = 10;
10
+ const taskStateUpdateTypes = [
11
+ 'task.access.released',
12
+ 'task.access.requested',
13
+ 'task.created',
14
+ 'task.external_continuation.created',
15
+ 'task.resources.released',
16
+ 'task.shared',
17
+ 'task.terminated',
18
+ 'task.turn.completed',
19
+ 'task.turn.created',
20
+ 'task.turn.failed',
21
+ 'task.turn.started',
22
+ 'task.unshared',
23
+ ];
24
+ const taskTraceUpdateTypes = ['task.turn.completed', 'task.turn.failed', 'task.turn.trace.appended'];
25
+ export function TaskWorkspace({ dataSource, platformStatus, onPlatformStatusChange, onOpenMenu, onTaskDetailStateChange, listVisible = true, currentUserId = null, modelOptions = [], banner, initialTaskId = null, }) {
26
+ const [tasks, setTasks] = useState([]);
27
+ const [message, setMessage] = useState('');
28
+ const [messageAttachments, setMessageAttachments] = useState([]);
29
+ const [messageAttachmentsProcessing, setMessageAttachmentsProcessing] = useState(false);
30
+ const [selectedModelOption, setSelectedModelOption] = useState('');
31
+ const [taskDialogOpen, setTaskDialogOpen] = useState(false);
32
+ const [selectedTaskId, setSelectedTaskId] = useState(null);
33
+ const [taskDetailMaximized, setTaskDetailMaximized] = useState(false);
34
+ const [taskDetailMinimized, setTaskDetailMinimized] = useState(false);
35
+ const [taskDetailRestoreMaximized, setTaskDetailRestoreMaximized] = useState(false);
36
+ const [openTraceTurnId, setOpenTraceTurnId] = useState(null);
37
+ const [traceLoadingTurnId, setTraceLoadingTurnId] = useState(null);
38
+ const [pendingTurnScrollId, setPendingTurnScrollId] = useState(null);
39
+ const [taskDetailDrafts, setTaskDetailDrafts] = useState({});
40
+ const [taskStatusFilter, setTaskStatusFilter] = useState('all');
41
+ const [taskFilter, setTaskFilter] = useState('');
42
+ const [taskPage, setTaskPage] = useState(1);
43
+ const [taskFiltersOpen, setTaskFiltersOpen] = useState(false);
44
+ const [tasksLoading, setTasksLoading] = useState(true);
45
+ const [taskDetailRefreshing, setTaskDetailRefreshing] = useState(false);
46
+ const [taskSubmitting, setTaskSubmitting] = useState(false);
47
+ const [taskSubmitError, setTaskSubmitError] = useState(null);
48
+ const [followUpError, setFollowUpError] = useState(null);
49
+ const [followUpSubmitting, setFollowUpSubmitting] = useState(false);
50
+ const [interruptSubmitting, setInterruptSubmitting] = useState(false);
51
+ const [steerSubmitting, setSteerSubmitting] = useState(false);
52
+ const [taskCommandStatus, setTaskCommandStatus] = useState(null);
53
+ const [updateNumber, setUpdateNumber] = useState(0);
54
+ const [taskStateReady, setTaskStateReady] = useState(false);
55
+ const [traceSubscriptionBaseline, setTraceSubscriptionBaseline] = useState(null);
56
+ const tasksRef = useRef([]);
57
+ const taskTurnRefs = useRef(new Map());
58
+ const taskListRefreshTimerRef = useRef(null);
59
+ const taskDetailRefreshTimersRef = useRef(new Map());
60
+ const updateNumberRef = useRef(0);
61
+ const appliedInitialTaskIdRef = useRef(null);
62
+ const selectedTask = useMemo(() => tasks.find((task) => task.id === selectedTaskId), [tasks, selectedTaskId]);
63
+ const taskStatusOptions = useMemo(() => Array.from(new Set(tasks.map((task) => task.status).filter(Boolean))).sort((a, b) => a.localeCompare(b)), [tasks]);
64
+ const visibleTasks = useMemo(() => {
65
+ const query = taskFilter.trim().toLocaleLowerCase();
66
+ return [...tasks]
67
+ .sort((left, right) => new Date(right.createdAt).getTime() - new Date(left.createdAt).getTime())
68
+ .filter((task) => {
69
+ const matchesStatus = taskStatusFilter === 'all' || task.status === taskStatusFilter;
70
+ const matchesFilter = !query
71
+ || taskTitleText(task).toLocaleLowerCase().includes(query)
72
+ || task.id.toLocaleLowerCase().includes(query);
73
+ return matchesStatus && matchesFilter;
74
+ });
75
+ }, [taskFilter, taskStatusFilter, tasks]);
76
+ const taskPageCount = Math.max(1, Math.ceil(visibleTasks.length / tasksPerPage));
77
+ const pagedTasks = useMemo(() => visibleTasks.slice((taskPage - 1) * tasksPerPage, taskPage * tasksPerPage), [taskPage, visibleTasks]);
78
+ const selectedTraceTurn = useMemo(() => selectedTask?.turns.find((turn) => turn.id === openTraceTurnId) ?? null, [openTraceTurnId, selectedTask]);
79
+ const selectedTaskDraft = selectedTask
80
+ ? taskDetailDrafts[selectedTask.id] ?? emptyTaskDetailDraft()
81
+ : emptyTaskDetailDraft();
82
+ const selectedTraceTurnIndex = useMemo(() => selectedTask && selectedTraceTurn ? selectedTask.turns.findIndex((turn) => turn.id === selectedTraceTurn.id) : -1, [selectedTask, selectedTraceTurn]);
83
+ const hasBusyTask = useMemo(() => tasks.some(isTaskBusy), [tasks]);
84
+ const elapsedNow = useElapsedNow(hasBusyTask);
85
+ // Submission is gated only by in-flight state, never by live-update/platform health: a flaky update
86
+ // stream must not block creating tasks. The server is the authority on whether a request is accepted.
87
+ const newTaskDisabled = tasksLoading || taskSubmitting || messageAttachmentsProcessing;
88
+ const taskDetailState = taskDetailMinimized
89
+ ? 'minimized'
90
+ : taskDetailMaximized
91
+ ? 'maximized'
92
+ : selectedTask
93
+ ? 'open'
94
+ : 'none';
95
+ useEffect(() => {
96
+ tasksRef.current = tasks;
97
+ }, [tasks]);
98
+ useEffect(() => {
99
+ if (modelOptions.length === 0) {
100
+ setSelectedModelOption('');
101
+ return;
102
+ }
103
+ setSelectedModelOption((current) => modelOptions.some((option) => taskModelOptionValue(option) === current) ? current : taskModelOptionValue(modelOptions[0]));
104
+ }, [modelOptions]);
105
+ useEffect(() => {
106
+ updateNumberRef.current = updateNumber;
107
+ }, [updateNumber]);
108
+ useEffect(() => {
109
+ onTaskDetailStateChange?.(taskDetailState);
110
+ }, [onTaskDetailStateChange, taskDetailState]);
111
+ useEffect(() => {
112
+ if (!pendingTurnScrollId || !selectedTask?.turns.some((turn) => turn.id === pendingTurnScrollId)) {
113
+ return;
114
+ }
115
+ let settleTimer = null;
116
+ const scrollLatestTurn = () => {
117
+ const turn = taskTurnRefs.current.get(pendingTurnScrollId);
118
+ if (!turn)
119
+ return;
120
+ turn.scrollIntoView({ block: 'end' });
121
+ };
122
+ const timer = window.setTimeout(() => {
123
+ scrollLatestTurn();
124
+ settleTimer = window.setTimeout(() => {
125
+ scrollLatestTurn();
126
+ setPendingTurnScrollId(null);
127
+ }, 100);
128
+ }, 0);
129
+ return () => {
130
+ window.clearTimeout(timer);
131
+ if (settleTimer !== null)
132
+ window.clearTimeout(settleTimer);
133
+ };
134
+ }, [pendingTurnScrollId, selectedTask]);
135
+ const loadTaskState = useCallback(async (showLoading = false) => {
136
+ if (showLoading)
137
+ setTasksLoading(true);
138
+ try {
139
+ const snapshot = await dataSource.loadTasks();
140
+ dataSource.setUpdateCursor?.(snapshot.updateNumber);
141
+ setUpdateNumber((current) => Math.max(current, snapshot.updateNumber));
142
+ setTaskStateReady(true);
143
+ setTasks((currentTasks) => mergeTasks(currentTasks, snapshot.state, snapshot.updateNumber));
144
+ }
145
+ catch {
146
+ // Swallow transient snapshot-fetch failures. The dedicated /api/platform-status poll owns the
147
+ // "platform availability" banner; a one-off list reload error self-heals on the next update or poll.
148
+ }
149
+ finally {
150
+ if (showLoading)
151
+ setTasksLoading(false);
152
+ }
153
+ }, [dataSource]);
154
+ const loadTaskDetail = useCallback(async (taskId, scrollToLatest = false) => {
155
+ setTaskDetailRefreshing(true);
156
+ try {
157
+ const snapshot = await dataSource.loadTask(taskId);
158
+ const task = snapshot.state;
159
+ dataSource.setUpdateCursor?.(snapshot.updateNumber);
160
+ setUpdateNumber((current) => Math.max(current, snapshot.updateNumber));
161
+ setTasks((current) => upsertTask(current, task, snapshot.updateNumber));
162
+ if (scrollToLatest) {
163
+ setPendingTurnScrollId(lastTaskTurn(task)?.id ?? null);
164
+ }
165
+ }
166
+ catch {
167
+ // Transient detail-fetch failure; the /api/platform-status poll owns the availability banner.
168
+ }
169
+ finally {
170
+ setTaskDetailRefreshing(false);
171
+ }
172
+ }, [dataSource]);
173
+ const scheduleTaskListRefresh = useCallback(() => {
174
+ if (taskListRefreshTimerRef.current !== null)
175
+ return;
176
+ taskListRefreshTimerRef.current = window.setTimeout(() => {
177
+ taskListRefreshTimerRef.current = null;
178
+ void loadTaskState();
179
+ }, 750);
180
+ }, [loadTaskState]);
181
+ const scheduleTaskDetailRefresh = useCallback((taskId) => {
182
+ if (taskDetailRefreshTimersRef.current.has(taskId))
183
+ return;
184
+ const timer = window.setTimeout(() => {
185
+ taskDetailRefreshTimersRef.current.delete(taskId);
186
+ void loadTaskDetail(taskId);
187
+ }, 750);
188
+ taskDetailRefreshTimersRef.current.set(taskId, timer);
189
+ }, [loadTaskDetail]);
190
+ useEffect(() => {
191
+ void loadTaskState(true);
192
+ return () => {
193
+ if (taskListRefreshTimerRef.current !== null)
194
+ window.clearTimeout(taskListRefreshTimerRef.current);
195
+ for (const timer of taskDetailRefreshTimersRef.current.values())
196
+ window.clearTimeout(timer);
197
+ taskDetailRefreshTimersRef.current.clear();
198
+ };
199
+ }, [loadTaskState]);
200
+ // Safety net while any task is busy: the live view is stream-driven, so a lost update
201
+ // (transport drop, server-side gap) would otherwise leave a task stuck "working" until
202
+ // a manual refresh. Snapshot merges are version-gated, so this poll can never regress
203
+ // newer streamed state — at worst it is a no-op.
204
+ useEffect(() => {
205
+ if (!taskStateReady || !hasBusyTask)
206
+ return;
207
+ const timer = window.setInterval(() => void loadTaskState(), 10000);
208
+ return () => window.clearInterval(timer);
209
+ }, [hasBusyTask, loadTaskState, taskStateReady]);
210
+ useEffect(() => {
211
+ if (!initialTaskId || appliedInitialTaskIdRef.current === initialTaskId)
212
+ return;
213
+ appliedInitialTaskIdRef.current = initialTaskId;
214
+ setSelectedTaskId(initialTaskId);
215
+ setTaskDetailMaximized(true);
216
+ setTaskDetailMinimized(false);
217
+ setOpenTraceTurnId(null);
218
+ void loadTaskDetail(initialTaskId, true);
219
+ }, [initialTaskId, loadTaskDetail]);
220
+ useEffect(() => {
221
+ if (!taskStateReady)
222
+ return;
223
+ return dataSource.subscribe({
224
+ after: updateNumberRef.current,
225
+ filterType: 'task',
226
+ filter: { objectTypes: ['task'], updateTypes: taskStateUpdateTypes },
227
+ onItem: (item) => {
228
+ if (item.kind === 'skip' && item.to) {
229
+ setUpdateNumber((current) => Math.max(current, item.to ?? current));
230
+ return;
231
+ }
232
+ if (!item.update)
233
+ return;
234
+ const updateNumber = item.update.updateNumber;
235
+ setUpdateNumber((current) => Math.max(current, updateNumber));
236
+ const payload = item.update.payload;
237
+ if (payload?.task) {
238
+ setTasks((current) => upsertTask(current, payload.task, updateNumber));
239
+ }
240
+ else if (selectedTaskId && item.update.objectId === selectedTaskId) {
241
+ scheduleTaskDetailRefresh(selectedTaskId);
242
+ }
243
+ else {
244
+ scheduleTaskListRefresh();
245
+ }
246
+ if (openTraceTurnId && payload?.task && isTaskTurnSettled(payload.task, openTraceTurnId)) {
247
+ setTraceLoadingTurnId(null);
248
+ }
249
+ },
250
+ });
251
+ }, [dataSource, openTraceTurnId, scheduleTaskDetailRefresh, scheduleTaskListRefresh, selectedTaskId, taskStateReady]);
252
+ useEffect(() => {
253
+ if (!taskStateReady || !selectedTaskId || !openTraceTurnId)
254
+ return;
255
+ if (!traceSubscriptionBaseline || traceSubscriptionBaseline.taskId !== selectedTaskId || traceSubscriptionBaseline.turnId !== openTraceTurnId)
256
+ return;
257
+ return dataSource.subscribe({
258
+ after: traceSubscriptionBaseline.updateNumber,
259
+ filterType: 'task',
260
+ filter: { objectTypes: ['task'], objectIds: [selectedTaskId], updateTypes: taskTraceUpdateTypes },
261
+ onItem: (item) => {
262
+ if (item.kind === 'skip' && item.to) {
263
+ setUpdateNumber((current) => Math.max(current, item.to ?? current));
264
+ return;
265
+ }
266
+ const update = item.update;
267
+ if (!update)
268
+ return;
269
+ setUpdateNumber((current) => Math.max(current, update.updateNumber));
270
+ const payload = update.payload;
271
+ if (payload?.turnId === openTraceTurnId && payload.traceEvent) {
272
+ setTasks((current) => appendTaskTraceEvent(current, selectedTaskId, openTraceTurnId, payload.traceEvent));
273
+ }
274
+ if (payload?.task && isTaskTurnSettled(payload.task, openTraceTurnId)) {
275
+ setTraceLoadingTurnId(null);
276
+ }
277
+ },
278
+ });
279
+ }, [dataSource, openTraceTurnId, selectedTaskId, taskStateReady, traceSubscriptionBaseline]);
280
+ useEffect(() => {
281
+ if (!taskStateReady || !selectedTaskId)
282
+ return;
283
+ let disposed = false;
284
+ const verifyTaskDetail = async () => {
285
+ const localTask = tasksRef.current.find((task) => task.id === selectedTaskId);
286
+ if (!localTask)
287
+ return;
288
+ try {
289
+ const snapshot = await dataSource.loadTask(selectedTaskId);
290
+ if (disposed)
291
+ return;
292
+ // A snapshot older than the state we already applied is a stale in-flight read
293
+ // (the fetch straddled a turn transition), not a discrepancy: the local state is
294
+ // ahead of it, so recovering from it would regress a completed task to working.
295
+ if (snapshot.updateNumber < taskSyncVersion(localTask))
296
+ return;
297
+ const localSignature = taskConsistencySignature(localTask);
298
+ const serverSignature = taskConsistencySignature(snapshot.state);
299
+ if (sameTaskConsistencySignature(localSignature, serverSignature))
300
+ return;
301
+ const event = {
302
+ type: 'task.detail.state_discrepancy',
303
+ severity: 'warning',
304
+ details: {
305
+ taskId: selectedTaskId,
306
+ openTraceTurnId,
307
+ localUpdateNumber: updateNumberRef.current,
308
+ serverUpdateNumber: snapshot.updateNumber,
309
+ localSignature,
310
+ serverSignature,
311
+ recovered: true,
312
+ },
313
+ };
314
+ console.warn('Task detail state discrepancy recovered from backend snapshot.', event.details);
315
+ dataSource.recordTelemetry?.(event);
316
+ await recoverTaskDetail(snapshot, openTraceTurnId);
317
+ }
318
+ catch (error) {
319
+ dataSource.recordTelemetry?.({
320
+ type: 'task.detail.verification_failed',
321
+ severity: 'warning',
322
+ details: {
323
+ taskId: selectedTaskId,
324
+ openTraceTurnId,
325
+ message: error instanceof Error ? error.message : 'Task detail verification failed.',
326
+ },
327
+ });
328
+ }
329
+ };
330
+ const timer = window.setInterval(() => void verifyTaskDetail(), 20000);
331
+ return () => {
332
+ disposed = true;
333
+ window.clearInterval(timer);
334
+ };
335
+ }, [dataSource, openTraceTurnId, selectedTaskId, taskStateReady]);
336
+ useEffect(() => {
337
+ if (openTraceTurnId && !selectedTraceTurn)
338
+ setOpenTraceTurnId(null);
339
+ }, [openTraceTurnId, selectedTraceTurn]);
340
+ useEffect(() => {
341
+ setFollowUpError(null);
342
+ }, [selectedTaskId]);
343
+ useEffect(() => {
344
+ setTaskPage(1);
345
+ }, [taskFilter, taskStatusFilter]);
346
+ useEffect(() => {
347
+ setTaskPage((currentPage) => Math.min(currentPage, taskPageCount));
348
+ }, [taskPageCount]);
349
+ async function loadTaskTrace(taskId, turnId) {
350
+ try {
351
+ const [traceSnapshot, taskSnapshot] = await Promise.all([
352
+ dataSource.loadTaskTrace(taskId, turnId),
353
+ dataSource.loadTask(taskId),
354
+ ]);
355
+ const nextUpdateNumber = Math.max(traceSnapshot.updateNumber, taskSnapshot.updateNumber);
356
+ dataSource.setUpdateCursor?.(nextUpdateNumber);
357
+ setUpdateNumber((current) => Math.max(current, nextUpdateNumber));
358
+ setTraceSubscriptionBaseline({ taskId, turnId, updateNumber: nextUpdateNumber });
359
+ setTasks((current) => mergeTaskTrace(upsertTask(current, taskSnapshot.state, taskSnapshot.updateNumber), traceSnapshot.state.taskId, traceSnapshot.state.turnId, traceSnapshot.state.trace));
360
+ }
361
+ catch {
362
+ // Transient trace-fetch failure; the /api/platform-status poll owns the availability banner.
363
+ }
364
+ }
365
+ async function recoverTaskDetail(taskSnapshot, turnId) {
366
+ let nextUpdateNumber = taskSnapshot.updateNumber;
367
+ let traceSnapshot = null;
368
+ if (turnId) {
369
+ try {
370
+ traceSnapshot = await dataSource.loadTaskTrace(taskSnapshot.state.id, turnId);
371
+ nextUpdateNumber = Math.max(nextUpdateNumber, traceSnapshot.updateNumber);
372
+ }
373
+ catch {
374
+ traceSnapshot = null;
375
+ }
376
+ }
377
+ dataSource.setUpdateCursor?.(nextUpdateNumber);
378
+ setUpdateNumber((current) => Math.max(current, nextUpdateNumber));
379
+ if (turnId && traceSnapshot) {
380
+ setTraceSubscriptionBaseline({ taskId: taskSnapshot.state.id, turnId, updateNumber: nextUpdateNumber });
381
+ setTasks((current) => mergeTaskTrace(upsertTask(current, taskSnapshot.state, taskSnapshot.updateNumber), traceSnapshot.state.taskId, traceSnapshot.state.turnId, traceSnapshot.state.trace));
382
+ return;
383
+ }
384
+ setTasks((current) => upsertTask(current, taskSnapshot.state, taskSnapshot.updateNumber));
385
+ }
386
+ async function submitTask(event) {
387
+ event.preventDefault();
388
+ if (!message.trim() || newTaskDisabled)
389
+ return;
390
+ setTaskSubmitError(null);
391
+ setTaskSubmitting(true);
392
+ try {
393
+ const modelSelection = selectedTaskModelSelection(modelOptions, selectedModelOption);
394
+ const createdTask = await dataSource.createTask({
395
+ message,
396
+ attachments: messageAttachments,
397
+ model: modelSelection?.model,
398
+ reasoningEffort: modelSelection?.reasoningEffort,
399
+ });
400
+ if (createdTask) {
401
+ const latestTurn = lastTaskTurn(createdTask);
402
+ setMessage('');
403
+ setMessageAttachments([]);
404
+ setTaskDialogOpen(false);
405
+ setSelectedTaskId(createdTask.id);
406
+ setTaskDetailMaximized(true);
407
+ setTaskDetailMinimized(false);
408
+ setPendingTurnScrollId(latestTurn?.id ?? null);
409
+ setTasks((current) => [...current.filter((task) => task.id !== createdTask.id), createdTask]);
410
+ await loadTaskState(true);
411
+ }
412
+ }
413
+ catch (error) {
414
+ // The server is the authority: surface its rejection (e.g. a conflict) inline and keep the
415
+ // draft so the user can retry. The dialog stays open.
416
+ setTaskSubmitError(submissionErrorMessage(error, 'Your task could not be created. Please try again.'));
417
+ }
418
+ finally {
419
+ setTaskSubmitting(false);
420
+ }
421
+ }
422
+ async function submitFollowUp(event) {
423
+ event.preventDefault();
424
+ if (!selectedTask || isTaskQueued(selectedTask) || !selectedTaskDraft.message.trim() || followUpSubmitting)
425
+ return;
426
+ setFollowUpError(null);
427
+ setFollowUpSubmitting(true);
428
+ const draft = selectedTaskDraft;
429
+ try {
430
+ const updatedTask = await dataSource.sendFollowUp(selectedTask.id, { message: draft.message, attachments: draft.attachments });
431
+ if (updatedTask) {
432
+ const latestTurn = lastTaskTurn(updatedTask);
433
+ clearTaskDetailDraft(selectedTask.id);
434
+ setPendingTurnScrollId(latestTurn?.id ?? null);
435
+ setTasks((current) => upsertTask(current, updatedTask));
436
+ await loadTaskState(true);
437
+ }
438
+ }
439
+ catch (error) {
440
+ // Server rejected the continuation (e.g. a conflict). Surface it and keep the draft for retry.
441
+ setFollowUpError(submissionErrorMessage(error, 'Your message could not be sent. Please try again.'));
442
+ }
443
+ finally {
444
+ setFollowUpSubmitting(false);
445
+ }
446
+ }
447
+ async function submitClientAction(taskId, input) {
448
+ if (!dataSource.submitClientAction)
449
+ return null;
450
+ const updatedTask = await dataSource.submitClientAction(taskId, input);
451
+ if (updatedTask) {
452
+ const latestTurn = lastTaskTurn(updatedTask);
453
+ setPendingTurnScrollId(latestTurn?.id ?? null);
454
+ setTasks((current) => upsertTask(current, updatedTask));
455
+ await loadTaskState(true);
456
+ }
457
+ return updatedTask;
458
+ }
459
+ async function submitInterrupt() {
460
+ if (!selectedTask || !selectedTask.busy || interruptSubmitting || steerSubmitting)
461
+ return;
462
+ const message = selectedTaskDraft.message;
463
+ setInterruptSubmitting(true);
464
+ setTaskDetailDraftMessage(selectedTask.id, '');
465
+ setTaskCommandStatus('interrupting');
466
+ try {
467
+ const interruptedTask = await dataSource.interruptTask(selectedTask.id, message);
468
+ if (interruptedTask) {
469
+ setTasks((current) => upsertTask(current, interruptedTask));
470
+ setTaskCommandStatus('interrupt-accepted');
471
+ void loadTaskDetail(selectedTask.id);
472
+ }
473
+ else {
474
+ setTaskDetailDraftMessage(selectedTask.id, message);
475
+ setTaskCommandStatus('failed');
476
+ }
477
+ }
478
+ catch {
479
+ setTaskDetailDraftMessage(selectedTask.id, message);
480
+ setTaskCommandStatus('failed');
481
+ }
482
+ finally {
483
+ setInterruptSubmitting(false);
484
+ }
485
+ }
486
+ async function submitSteer() {
487
+ if (!selectedTask || !selectedTask.busy || isTaskQueued(selectedTask) || !selectedTaskDraft.message.trim() || interruptSubmitting || steerSubmitting)
488
+ return;
489
+ const message = selectedTaskDraft.message;
490
+ setSteerSubmitting(true);
491
+ setTaskDetailDraftMessage(selectedTask.id, '');
492
+ setTaskCommandStatus('steering');
493
+ try {
494
+ const steeredTask = await dataSource.steerTask(selectedTask.id, message);
495
+ if (steeredTask) {
496
+ setTasks((current) => upsertTask(current, steeredTask));
497
+ setTaskCommandStatus('steer-accepted');
498
+ void loadTaskDetail(selectedTask.id);
499
+ }
500
+ else {
501
+ setTaskDetailDraftMessage(selectedTask.id, message);
502
+ setTaskCommandStatus('failed');
503
+ }
504
+ }
505
+ catch {
506
+ setTaskDetailDraftMessage(selectedTask.id, message);
507
+ setTaskCommandStatus('failed');
508
+ }
509
+ finally {
510
+ setSteerSubmitting(false);
511
+ }
512
+ }
513
+ function refreshTaskList() {
514
+ void loadTaskState(true);
515
+ }
516
+ function refreshSelectedTask() {
517
+ if (!selectedTaskId)
518
+ return;
519
+ void loadTaskDetail(selectedTaskId);
520
+ }
521
+ function openTrace(turnId) {
522
+ if (!selectedTask)
523
+ return;
524
+ setTraceLoadingTurnId(turnId);
525
+ void loadTaskTrace(selectedTask.id, turnId)
526
+ .then(() => setOpenTraceTurnId(turnId))
527
+ .finally(() => setTraceLoadingTurnId(null));
528
+ }
529
+ function setTaskDetailDraftMessage(taskId, message) {
530
+ setTaskDetailDrafts((drafts) => ({
531
+ ...drafts,
532
+ [taskId]: {
533
+ ...(drafts[taskId] ?? emptyTaskDetailDraft()),
534
+ message,
535
+ },
536
+ }));
537
+ }
538
+ function setTaskDetailDraftAttachments(taskId, attachments) {
539
+ setTaskDetailDrafts((drafts) => ({
540
+ ...drafts,
541
+ [taskId]: {
542
+ ...(drafts[taskId] ?? emptyTaskDetailDraft()),
543
+ attachments,
544
+ },
545
+ }));
546
+ }
547
+ function clearTaskDetailDraft(taskId) {
548
+ setTaskDetailDrafts((drafts) => {
549
+ if (!drafts[taskId])
550
+ return drafts;
551
+ const next = { ...drafts };
552
+ delete next[taskId];
553
+ return next;
554
+ });
555
+ }
556
+ return (_jsxs(_Fragment, { children: [listVisible && (_jsx(TaskListPage, { banner: banner, tasks: tasks, visibleTasks: visibleTasks, pagedTasks: pagedTasks, selectedTaskId: selectedTaskId, tasksLoading: tasksLoading, taskSubmitting: taskSubmitting, newTaskDisabled: newTaskDisabled, taskFiltersOpen: taskFiltersOpen, taskFilter: taskFilter, taskStatusFilter: taskStatusFilter, taskStatusOptions: taskStatusOptions, taskPage: taskPage, taskPageCount: taskPageCount, onOpenMenu: onOpenMenu, onNewTask: () => {
557
+ setTaskSubmitError(null);
558
+ setTaskDialogOpen(true);
559
+ }, onRefreshTasks: refreshTaskList, onTaskFiltersOpenChange: setTaskFiltersOpen, onTaskFilterChange: setTaskFilter, onTaskStatusFilterChange: setTaskStatusFilter, onTaskPageChange: setTaskPage, onSelectTask: (task) => {
560
+ setSelectedTaskId(task.id);
561
+ setTaskDetailMaximized(false);
562
+ setTaskDetailMinimized(false);
563
+ setOpenTraceTurnId(null);
564
+ setTaskCommandStatus(null);
565
+ void loadTaskDetail(task.id, true);
566
+ } })), taskDialogOpen && (_jsx("div", { className: "modal-layer", role: "presentation", onMouseDown: () => !taskSubmitting && !messageAttachmentsProcessing && setTaskDialogOpen(false), children: _jsxs("div", { className: "modal", role: "dialog", "aria-modal": "true", "aria-labelledby": "new-task-title", onMouseDown: (event) => event.stopPropagation(), children: [_jsxs("header", { children: [_jsx("h2", { id: "new-task-title", children: "New Agent Task" }), _jsx("button", { className: "icon-button", onClick: () => setTaskDialogOpen(false), disabled: taskSubmitting || messageAttachmentsProcessing, "aria-label": "Close", title: "Close", children: _jsx(X, { "aria-hidden": "true" }) })] }), _jsxs("form", { onSubmit: submitTask, children: [_jsx("textarea", { autoFocus: true, disabled: taskSubmitting, value: message, onChange: (event) => setMessage(event.target.value), placeholder: "Send work to the coding agent" }), _jsx(AttachmentPicker, { attachments: messageAttachments, disabled: taskSubmitting, onChange: setMessageAttachments, onProcessingChange: setMessageAttachmentsProcessing, uploadAttachment: dataSource.uploadAttachment }), taskSubmitError && _jsx("p", { className: "platform-modal-note", role: "alert", children: taskSubmitError }), _jsxs("div", { className: "modal-actions", children: [_jsx("button", { type: "button", onClick: () => setTaskDialogOpen(false), disabled: taskSubmitting || messageAttachmentsProcessing, children: "Cancel" }), modelOptions.length > 0 && (_jsxs("label", { className: "task-model-selector", children: [_jsx("span", { children: "Model" }), _jsx("select", { value: selectedModelOption, onChange: (event) => setSelectedModelOption(event.target.value), disabled: taskSubmitting || messageAttachmentsProcessing, children: modelOptions.map((option) => (_jsxs("option", { value: taskModelOptionValue(option), children: [option.modelLabel, " / ", option.reasoningLabel] }, taskModelOptionValue(option)))) })] })), _jsx("button", { className: "primary", disabled: newTaskDisabled || !message.trim(), children: messageAttachmentsProcessing ? _jsx(WorkingIndicator, { label: "Preparing attachments" }) : taskSubmitting ? _jsx(WorkingIndicator, { label: "Sending" }) : (_jsxs(_Fragment, { children: [_jsx(Send, { "aria-hidden": "true" }), _jsx("span", { children: "Send" })] })) })] })] })] }) })), _jsx(TaskDetailPage, { task: selectedTask ?? null, maximized: taskDetailMaximized, minimized: taskDetailMinimized, restoreMaximized: taskDetailRestoreMaximized, setMaximized: setTaskDetailMaximized, setMinimized: setTaskDetailMinimized, setRestoreMaximized: setTaskDetailRestoreMaximized, setOpenTraceTurnId: setOpenTraceTurnId, platformStatus: platformStatus, elapsedNow: elapsedNow, traceLoadingTurnId: traceLoadingTurnId, selectedTraceTurn: selectedTraceTurn, selectedTraceTurnIndex: selectedTraceTurnIndex, turnRefs: taskTurnRefs, followUp: selectedTaskDraft.message, followUpAttachments: selectedTaskDraft.attachments, followUpSubmitting: followUpSubmitting, followUpError: followUpError, interruptMessage: selectedTaskDraft.message, interruptSubmitting: interruptSubmitting, steerSubmitting: steerSubmitting, taskCommandStatus: taskCommandStatus, refreshSubmitting: taskDetailRefreshing, onCloseTask: () => setSelectedTaskId(null), onCloseReset: () => setTaskCommandStatus(null), onRefresh: refreshSelectedTask, onOpenTrace: openTrace, onSubmitFollowUp: submitFollowUp, onSubmitSteer: submitSteer, onFollowUpChange: (value) => selectedTask && setTaskDetailDraftMessage(selectedTask.id, value), onFollowUpAttachmentsChange: (attachments) => selectedTask && setTaskDetailDraftAttachments(selectedTask.id, attachments), uploadAttachment: dataSource.uploadAttachment, onSubmitInterrupt: submitInterrupt, onInterruptMessageChange: (value) => selectedTask && setTaskDetailDraftMessage(selectedTask.id, value), onSubmitClientAction: dataSource.submitClientAction ? submitClientAction : undefined, currentUserId: currentUserId, shareTask: dataSource.shareTask ? async (taskId, input) => {
567
+ const task = await dataSource.shareTask(taskId, input);
568
+ if (task)
569
+ setTasks((current) => upsertTask(current, task));
570
+ return task;
571
+ } : undefined, unshareTask: dataSource.unshareTask ? async (taskId, userId) => {
572
+ const task = await dataSource.unshareTask(taskId, userId);
573
+ if (task)
574
+ setTasks((current) => upsertTask(current, task));
575
+ return task;
576
+ } : undefined })] }));
577
+ }
578
+ function isTaskTurnSettled(task, turnId) {
579
+ const turn = task.turns.find((item) => item.id === turnId);
580
+ if (!turn)
581
+ return false;
582
+ const normalized = turn.status.trim().toLocaleLowerCase();
583
+ return normalized !== 'working' && normalized !== 'running' && normalized !== 'queued' && normalized !== 'in_progress';
584
+ }
585
+ function emptyTaskDetailDraft() {
586
+ return { message: '', attachments: [] };
587
+ }
588
+ function submissionErrorMessage(error, fallback) {
589
+ const message = error instanceof Error ? error.message.trim() : '';
590
+ return message.length > 0 ? message : fallback;
591
+ }
592
+ //# sourceMappingURL=TaskWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskWorkspace.js","sourceRoot":"","sources":["../src/TaskWorkspace.tsx"],"names":[],"mappings":"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"}