@parhelia/core 0.1.12425 → 0.1.12436
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/config/config.js +9 -2
- package/dist/config/config.js.map +1 -1
- package/dist/editor/PictureCropper.js +45 -41
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +32 -5
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.js +65 -0
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/Agents.js +19 -0
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/ContentInspectorPopover.d.ts +1 -0
- package/dist/editor/ai/ContentInspectorPopover.js +22 -8
- package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +32 -3
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +55 -20
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +7 -4
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +27 -0
- package/dist/editor/services/agentService.js +11 -2
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.js +54 -3
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/settings/About.js +40 -4
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.d.ts +2 -0
- package/dist/editor/settings/panels/PersistentLogsPanel.js +221 -0
- package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +24 -2
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +1 -0
- package/dist/editor/settings/panels/index.js +1 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +1 -0
- package/dist/editor/ui/Splitter.js +7 -1
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/licensing/LicenseContext.js +40 -4
- package/dist/licensing/LicenseContext.js.map +1 -1
- package/dist/licensing/LicenseOverlay.js +1 -1
- package/dist/licensing/LicenseOverlay.js.map +1 -1
- package/dist/licensing/types.d.ts +3 -1
- package/dist/licensing/types.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/TaskBoardWorkspace.js +18 -282
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/ProjectDashboard.js +2 -1
- package/dist/task-board/components/ProjectDashboard.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.d.ts +1 -0
- package/dist/task-board/components/ProjectSettingsDialog.js +112 -4
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.d.ts +1 -0
- package/dist/task-board/components/TaskAgentPanel.js +2 -2
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.js +2 -2
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
- package/dist/task-board/components/TaskDetailDialog.d.ts +1 -0
- package/dist/task-board/components/TaskDetailDialog.js +2 -2
- package/dist/task-board/components/TaskDetailDialog.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.d.ts +1 -0
- package/dist/task-board/components/TaskDetailPanel.js +23 -8
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.d.ts +11 -0
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +114 -0
- package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -0
- package/dist/task-board/components/WizardTaskDetailsPanel.js +2 -1
- package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
- package/dist/task-board/persistentLogLabels.d.ts +38 -0
- package/dist/task-board/persistentLogLabels.js +189 -0
- package/dist/task-board/persistentLogLabels.js.map +1 -0
- package/dist/task-board/services/taskService.d.ts +17 -1
- package/dist/task-board/services/taskService.js +56 -0
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/task-board/taskExecutionRecords.js +2 -0
- package/dist/task-board/taskExecutionRecords.js.map +1 -1
- package/dist/task-board/types.d.ts +71 -1
- package/dist/task-board/useTaskBoardAgentPanelState.d.ts +34 -0
- package/dist/task-board/useTaskBoardAgentPanelState.js +283 -0
- package/dist/task-board/useTaskBoardAgentPanelState.js.map +1 -0
- package/dist/task-board/views/DependencyGraphView.js +5 -0
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/KanbanView.js +8 -1
- package/dist/task-board/views/KanbanView.js.map +1 -1
- package/dist/task-board/views/ListView.js +1 -1
- package/dist/task-board/views/ListView.js.map +1 -1
- package/dist/task-board/views/WizardView.js +4 -0
- package/dist/task-board/views/WizardView.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,6 @@ export function LicenseOverlay() {
|
|
|
11
11
|
if (activationState === "idle") {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
|
-
return (_jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm p-4", children: _jsxs("div", { className: "w-full max-w-2xl", children: [_jsxs("div", { className: "shadow-2xl border-none overflow-hidden bg-white rounded-2xl", children: [_jsx("div", { className: "h-1 w-full bg-gray-100", children: _jsx("div", { className: "h-full w-full bg-blue-600" }) }), _jsxs("div", { className: "min-h-[520px] flex flex-col items-center justify-center p-12", children: [_jsx("div", { className: "mb-8 rounded-2xl bg-blue-50 p-6 ring-1 ring-blue-100", children: _jsx(KeyRound, { className: "h-16 w-12 text-blue-600", strokeWidth: 1.5 }) }), activationState === "loading" && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-gray-600", children: [_jsx(RefreshCw, { className: "h-10 w-10 animate-spin text-blue-600" }), _jsx("p", { className: "text-sm font-medium", children: "Processing..." })] })), activationState === "email_entry" && (_jsx(EmailEntry, { onSubmit: checkEmail, error: error })), activationState === "trial_form" && activationEmail && (_jsx(LicenseActivationForm, { email: activationEmail, onSubmit: submitLicenseRequest, onBack: () => startActivation(), error: error })), activationState === "code_entry" && (_jsx(LicenseCodeEntry, { email: activationEmail || "", onSubmit: submitActivationCode, onBack: () => startActivation(), error: error })), activationState === "trial_expired" && (_jsxs("div", { className: "max-w-md text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-amber-100", children: _jsx(AlertCircle, { className: "h-8 w-8 text-amber-600" }) }), _jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-4 tracking-tight", children: "Trial Expired" }), _jsx("p", { className: "text-gray-500 leading-relaxed", children: "Your trial period has ended. Please contact us to purchase a license." }), _jsx("a", { href: "mailto:sales@parhelia.ai?subject=License%20Inquiry", className: "mt-8 inline-block rounded-full bg-blue-600 px-8 py-2.5 text-xs font-black uppercase tracking-widest text-white shadow-lg shadow-blue-200 transition-colors hover:bg-blue-700", children: "Contact Sales" })] })), activationState === "success" && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-green-600 animate-in fade-in zoom-in duration-500", children: [_jsx("div", { className: "rounded-full bg-green-100 p-3", children: _jsx(CheckCircle, { className: "h-10 w-10", strokeWidth: 2 }) }), _jsx("h2", { className: "text-xl font-semibold text-gray-900", children: "License Activated!" }), _jsx("p", { className: "text-gray-600 text-center", children: licenseType === "trial" ? (_jsxs(_Fragment, { children: ["Your trial is now active.", " ", daysRemaining && `${daysRemaining} days remaining.`] })) : ("Your license has been activated successfully.") })] })), activationState === "error" && (_jsxs("div", { className: "max-w-md text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-100", children: _jsx(AlertCircle, { className: "h-8 w-8 text-red-600" }) }), _jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-2", children: "Error" }), _jsx("p", { className: "text-gray-600", children: error || "An error occurred" }), _jsx("button", { onClick: () => startActivation(), className: "mt-8 rounded-full bg-blue-600 px-8 py-2.5 text-xs font-black uppercase tracking-widest text-white shadow-lg shadow-blue-200 transition-colors hover:bg-blue-700", children: "Try Again" })] }))] })] }), _jsxs("p", { className: "mt-8 text-center text-xs text-gray-400", children: ["\u00A9 ", new Date().getFullYear(), " Parhelia. All rights reserved."] })] }) }));
|
|
14
|
+
return (_jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm p-4", children: _jsxs("div", { className: "w-full max-w-2xl", children: [_jsxs("div", { className: "shadow-2xl border-none overflow-hidden bg-white rounded-2xl", children: [_jsx("div", { className: "h-1 w-full bg-gray-100", children: _jsx("div", { className: "h-full w-full bg-blue-600" }) }), _jsxs("div", { className: "min-h-[520px] flex flex-col items-center justify-center p-12", children: [_jsx("div", { className: "mb-8 rounded-2xl bg-blue-50 p-6 ring-1 ring-blue-100", children: _jsx(KeyRound, { className: "h-16 w-12 text-blue-600", strokeWidth: 1.5 }) }), activationState === "loading" && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-gray-600", children: [_jsx(RefreshCw, { className: "h-10 w-10 animate-spin text-blue-600" }), _jsx("p", { className: "text-sm font-medium", children: "Processing..." })] })), activationState === "email_entry" && (_jsx(EmailEntry, { onSubmit: checkEmail, error: error })), activationState === "trial_form" && activationEmail && (_jsx(LicenseActivationForm, { email: activationEmail, onSubmit: submitLicenseRequest, onBack: () => startActivation(), error: error })), activationState === "code_entry" && (_jsx(LicenseCodeEntry, { email: activationEmail || "", onSubmit: submitActivationCode, onBack: () => startActivation(), error: error })), activationState === "trial_expired" && (_jsxs("div", { className: "max-w-md text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-amber-100", children: _jsx(AlertCircle, { className: "h-8 w-8 text-amber-600" }) }), _jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-4 tracking-tight", children: "Trial Expired" }), _jsx("p", { className: "text-gray-500 leading-relaxed", children: "Your trial period has ended. Please contact us to purchase a license." }), _jsx("a", { href: "mailto:sales@parhelia.ai?subject=License%20Inquiry", className: "mt-8 inline-block rounded-full bg-blue-600 px-8 py-2.5 text-xs font-black uppercase tracking-widest text-white shadow-lg shadow-blue-200 transition-colors hover:bg-blue-700", children: "Contact Sales" })] })), activationState === "welcome_back" && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-green-600 animate-in fade-in zoom-in duration-500", children: [_jsx("div", { className: "rounded-full bg-green-100 p-3", children: _jsx(CheckCircle, { className: "h-10 w-10", strokeWidth: 2 }) }), _jsx("h2", { className: "text-xl font-semibold text-gray-900", children: "Welcome back" }), _jsx("p", { className: "text-gray-600 text-center", children: licenseType === "trial" ? (_jsxs(_Fragment, { children: ["Your trial is active again on this environment.", " ", daysRemaining != null && `${daysRemaining} days remaining.`] })) : ("Your license has been restored.") })] })), activationState === "success" && (_jsxs("div", { className: "flex flex-col items-center gap-3 text-green-600 animate-in fade-in zoom-in duration-500", children: [_jsx("div", { className: "rounded-full bg-green-100 p-3", children: _jsx(CheckCircle, { className: "h-10 w-10", strokeWidth: 2 }) }), _jsx("h2", { className: "text-xl font-semibold text-gray-900", children: "License Activated!" }), _jsx("p", { className: "text-gray-600 text-center", children: licenseType === "trial" ? (_jsxs(_Fragment, { children: ["Your trial is now active.", " ", daysRemaining && `${daysRemaining} days remaining.`] })) : ("Your license has been activated successfully.") })] })), activationState === "error" && (_jsxs("div", { className: "max-w-md text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-100", children: _jsx(AlertCircle, { className: "h-8 w-8 text-red-600" }) }), _jsx("h2", { className: "text-2xl font-bold text-gray-900 mb-2", children: "Error" }), _jsx("p", { className: "text-gray-600", children: error || "An error occurred" }), _jsx("button", { onClick: () => startActivation(), className: "mt-8 rounded-full bg-blue-600 px-8 py-2.5 text-xs font-black uppercase tracking-widest text-white shadow-lg shadow-blue-200 transition-colors hover:bg-blue-700", children: "Try Again" })] }))] })] }), _jsxs("p", { className: "mt-8 text-center text-xs text-gray-400", children: ["\u00A9 ", new Date().getFullYear(), " Parhelia. All rights reserved."] })] }) }));
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=LicenseOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LicenseOverlay.js","sourceRoot":"","sources":["../../src/licensing/LicenseOverlay.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LicenseOverlay.js","sourceRoot":"","sources":["../../src/licensing/LicenseOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,8 @@ export interface LicenseRequestResponse {
|
|
|
46
46
|
license?: LicenseData | LicensePayloadV2;
|
|
47
47
|
/** v2 only: RSA signature over canonical inner `license` JSON. */
|
|
48
48
|
signature?: string;
|
|
49
|
+
/** When status is trial: true if the client should collect name and company before treating activation as complete. */
|
|
50
|
+
requiresProfileCompletion?: boolean;
|
|
49
51
|
expiresAt?: string;
|
|
50
52
|
expiredAt?: string;
|
|
51
53
|
codeExpiresInMinutes?: number;
|
|
@@ -80,7 +82,7 @@ export interface VerifyCodeRequest {
|
|
|
80
82
|
/**
|
|
81
83
|
* Activation flow state
|
|
82
84
|
*/
|
|
83
|
-
export type ActivationState = "idle" | "loading" | "email_entry" | "trial_form" | "code_entry" | "trial_expired" | "success" | "error";
|
|
85
|
+
export type ActivationState = "idle" | "loading" | "email_entry" | "trial_form" | "code_entry" | "trial_expired" | "welcome_back" | "success" | "error";
|
|
84
86
|
/**
|
|
85
87
|
* Known feature flags
|
|
86
88
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/licensing/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/licensing/types.ts"],"names":[],"mappings":"AAgHA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC"}
|
package/dist/revision.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.1.
|
|
2
|
-
export declare const buildDate = "2026-03-
|
|
1
|
+
export declare const version = "0.1.12436";
|
|
2
|
+
export declare const buildDate = "2026-03-29 12:43:50";
|
package/dist/revision.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const version = "0.1.
|
|
2
|
-
export const buildDate = "2026-03-
|
|
1
|
+
export const version = "0.1.12436";
|
|
2
|
+
export const buildDate = "2026-03-29 12:43:50";
|
|
3
3
|
//# sourceMappingURL=revision.js.map
|
|
@@ -4,7 +4,6 @@ import { toast } from "sonner";
|
|
|
4
4
|
import { cn } from "../lib/utils";
|
|
5
5
|
import { Splitter } from "../editor/ui/Splitter";
|
|
6
6
|
import { deleteProject, getExecutionState, getGraphLayout, getProjects, getTasks, getDependencies, runOrchestrator, triggerPlanning, updateProject, updateTask, } from "./services/taskService";
|
|
7
|
-
import { getAgent, } from "../editor/services/agentService";
|
|
8
7
|
import { loadAiProfiles } from "../editor/services/aiService";
|
|
9
8
|
import { useEditContext } from "../editor/client/editContext";
|
|
10
9
|
import { KanbanView } from "./views/KanbanView";
|
|
@@ -13,7 +12,7 @@ import { DependencyGraphView } from "./views/DependencyGraphView";
|
|
|
13
12
|
import { WizardView } from "./views/WizardView";
|
|
14
13
|
import { SimpleTabs } from "../editor/ui/SimpleTabs";
|
|
15
14
|
import { TaskDetailPanel } from "./components/TaskDetailPanel";
|
|
16
|
-
import { TaskAgentPanel
|
|
15
|
+
import { TaskAgentPanel } from "./components/TaskAgentPanel";
|
|
17
16
|
import { ProjectDashboard, } from "./components/ProjectDashboard";
|
|
18
17
|
import { CreateTaskDialog } from "./components/CreateTaskDialog";
|
|
19
18
|
import { AssignAgentDialog } from "./components/AssignAgentDialog";
|
|
@@ -36,6 +35,7 @@ import { WizardCommunicationCenter } from "./components/WizardCommunicationCente
|
|
|
36
35
|
import { Button } from "../components/ui/button";
|
|
37
36
|
import { Loader2, Plus } from "lucide-react";
|
|
38
37
|
import { MainContentTree } from "../editor/sidebar/MainContentTree";
|
|
38
|
+
import { useTaskBoardAgentPanelState } from "./useTaskBoardAgentPanelState";
|
|
39
39
|
function TaskboardPreviewEditor({ itemDescriptor, }) {
|
|
40
40
|
const slotContext = useEditorSlotContext({
|
|
41
41
|
slotId: "taskboard-preview-slot",
|
|
@@ -161,11 +161,6 @@ export function TaskBoardWorkspace() {
|
|
|
161
161
|
const [subprojectTasksByProjectId, setSubprojectTasksByProjectId] = useState({});
|
|
162
162
|
const [subprojectExecutionRecordsByProjectId, setSubprojectExecutionRecordsByProjectId,] = useState({});
|
|
163
163
|
const [subprojectCountsLoading, setSubprojectCountsLoading] = useState(false);
|
|
164
|
-
const [previewItemName, setPreviewItemName] = useState("");
|
|
165
|
-
const [previewItemPath, setPreviewItemPath] = useState("");
|
|
166
|
-
const [agentContextItems, setAgentContextItems] = useState([]);
|
|
167
|
-
const [contextItemNamesByKey, setContextItemNamesByKey] = useState({});
|
|
168
|
-
const [contextItemPathsByKey, setContextItemPathsByKey] = useState({});
|
|
169
164
|
const [wizardPinnedTaskId, setWizardPinnedTaskId] = useState(null);
|
|
170
165
|
const [, setWizardPinnedTaskSource] = useState(null);
|
|
171
166
|
const [wizardForceOverview, setWizardForceOverview] = useState(false);
|
|
@@ -411,110 +406,16 @@ export function TaskBoardWorkspace() {
|
|
|
411
406
|
return selectedProject;
|
|
412
407
|
return (projects.find((project) => project.project.projectId === selectedTask.projectId) ?? selectedProject);
|
|
413
408
|
}, [projects, selectedProject, selectedTask]);
|
|
414
|
-
const selectedTaskIsPlan =
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
if (!selectedTask)
|
|
420
|
-
return false;
|
|
421
|
-
if (selectedTask.projectId !== selectedProjectId)
|
|
422
|
-
return false;
|
|
423
|
-
const blockerIds = dependencies
|
|
424
|
-
.filter((dependency) => dependency.taskId === selectedTask.taskId &&
|
|
425
|
-
dependency.dependencyType === "BlockedBy")
|
|
426
|
-
.map((dependency) => dependency.dependsOnTaskId);
|
|
427
|
-
if (blockerIds.length === 0)
|
|
428
|
-
return false;
|
|
429
|
-
const taskById = new Map(tasksWithDisplayAssignees.map((task) => [task.taskId, task]));
|
|
430
|
-
return blockerIds.some((blockerId) => {
|
|
431
|
-
const blockerTask = taskById.get(blockerId);
|
|
432
|
-
return (!blockerTask ||
|
|
433
|
-
normalizeTaskStatus(blockerTask.status, blockerTask.executionState) !==
|
|
434
|
-
"Done");
|
|
435
|
-
});
|
|
436
|
-
}, [
|
|
437
|
-
selectedTask,
|
|
438
|
-
selectedProjectId,
|
|
439
|
-
dependencies,
|
|
440
|
-
tasksWithDisplayAssignees,
|
|
441
|
-
]);
|
|
442
|
-
const selectedTaskHasAssignedAgentProfile = useMemo(() => {
|
|
443
|
-
if (!selectedTask)
|
|
444
|
-
return false;
|
|
445
|
-
return selectedTask.assigneeType === "Agent" && !!selectedTask.assigneeId;
|
|
446
|
-
}, [selectedTask]);
|
|
447
|
-
const canRunAssignedAgent = useMemo(() => {
|
|
448
|
-
return !selectedTaskIsBlocked;
|
|
449
|
-
}, [selectedTaskIsBlocked]);
|
|
450
|
-
const runAssignedAgentDisabledReason = useMemo(() => {
|
|
451
|
-
if (selectedTaskIsBlocked) {
|
|
452
|
-
return "This task is blocked by unfinished dependencies.";
|
|
453
|
-
}
|
|
454
|
-
return undefined;
|
|
455
|
-
}, [selectedTaskIsBlocked]);
|
|
456
|
-
// ── current agent ID and panel mode for the right panel ──
|
|
457
|
-
const currentAgentId = useMemo(() => {
|
|
458
|
-
return getLinkedAgentId(selectedTask);
|
|
459
|
-
}, [selectedTask]);
|
|
460
|
-
const selectedTaskStatus = useMemo(() => {
|
|
461
|
-
if (!selectedTask)
|
|
462
|
-
return null;
|
|
463
|
-
return normalizeTaskStatus(selectedTask.status, selectedTask.executionState);
|
|
464
|
-
}, [selectedTask]);
|
|
465
|
-
const selectedTaskHasResultData = useMemo(() => {
|
|
466
|
-
return !!selectedTask?.resultData?.trim();
|
|
467
|
-
}, [selectedTask?.resultData]);
|
|
468
|
-
const shouldHideAgentPanelForSelectedTask = useMemo(() => {
|
|
469
|
-
return (!!selectedTask &&
|
|
470
|
-
selectedTaskIsPlan &&
|
|
471
|
-
selectedTaskStatus === "Done" &&
|
|
472
|
-
selectedTaskHasResultData);
|
|
473
|
-
}, [
|
|
409
|
+
const { agentPanelMode, canRunAssignedAgent, contextItemOptions, displayAgentId, handleSelectContextItem, hasMultipleContextItems, previewItemName, previewItemPath, previewItemVersion, runAssignedAgentDisabledReason, selectedContextItemValue, selectedTaskHasAssignedAgentProfile, selectedTaskIsBlocked, selectedTaskIsPlan, shouldHideAgentPanelForSelectedTask, } = useTaskBoardAgentPanelState({
|
|
410
|
+
currentItemDescriptor,
|
|
411
|
+
editContext,
|
|
412
|
+
isMobile,
|
|
413
|
+
mobileActiveTab,
|
|
474
414
|
selectedTask,
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
const displayAgentId = useMemo(() => {
|
|
480
|
-
return currentAgentId;
|
|
481
|
-
}, [currentAgentId]);
|
|
482
|
-
useEffect(() => {
|
|
483
|
-
if (isMobile && selectedTaskId) {
|
|
484
|
-
setMobileActiveTab(1); // Task tab
|
|
485
|
-
}
|
|
486
|
-
}, [selectedTaskId, isMobile]);
|
|
487
|
-
useEffect(() => {
|
|
488
|
-
if (isMobile && displayAgentId && !shouldHideAgentPanelForSelectedTask) {
|
|
489
|
-
setMobileActiveTab(2); // Agent tab
|
|
490
|
-
}
|
|
491
|
-
}, [displayAgentId, isMobile, shouldHideAgentPanelForSelectedTask]);
|
|
492
|
-
useEffect(() => {
|
|
493
|
-
if (!isMobile)
|
|
494
|
-
return;
|
|
495
|
-
if (!shouldHideAgentPanelForSelectedTask)
|
|
496
|
-
return;
|
|
497
|
-
if (mobileActiveTab !== 2)
|
|
498
|
-
return;
|
|
499
|
-
setMobileActiveTab(1);
|
|
500
|
-
}, [isMobile, mobileActiveTab, shouldHideAgentPanelForSelectedTask]);
|
|
501
|
-
useEffect(() => {
|
|
502
|
-
if (!showEditorPanel && mobileActiveTab === 3) {
|
|
503
|
-
setMobileActiveTab(0);
|
|
504
|
-
}
|
|
505
|
-
}, [showEditorPanel, mobileActiveTab]);
|
|
506
|
-
const currentItemKey = useMemo(() => {
|
|
507
|
-
if (!currentItemDescriptor)
|
|
508
|
-
return "";
|
|
509
|
-
return `${currentItemDescriptor.id}|${currentItemDescriptor.language}|${currentItemDescriptor.version}`;
|
|
510
|
-
}, [currentItemDescriptor]);
|
|
511
|
-
const agentPanelMode = useMemo(() => {
|
|
512
|
-
if (!selectedTask)
|
|
513
|
-
return "no-task-selected";
|
|
514
|
-
if (displayAgentId)
|
|
515
|
-
return "agent";
|
|
516
|
-
return "no-agent";
|
|
517
|
-
}, [selectedTask, displayAgentId]);
|
|
415
|
+
selectedTaskId,
|
|
416
|
+
setMobileActiveTab,
|
|
417
|
+
showEditorPanel,
|
|
418
|
+
});
|
|
518
419
|
const wizardAttentionState = useMemo(() => {
|
|
519
420
|
const openTasks = orderedWizardTasks.filter((task) => normalizeTaskStatus(task.status, task.executionState) !== "Done");
|
|
520
421
|
let runningCount = 0;
|
|
@@ -612,19 +513,6 @@ export function TaskBoardWorkspace() {
|
|
|
612
513
|
wizardForceOverview,
|
|
613
514
|
wizardPinnedTaskId,
|
|
614
515
|
]);
|
|
615
|
-
useEffect(() => {
|
|
616
|
-
if (!wizardDisplayedTask ||
|
|
617
|
-
(wizardDisplayedExecutionDisplay?.label !== "Questions" &&
|
|
618
|
-
wizardDisplayedTask.executionState !== "WaitingForInput" &&
|
|
619
|
-
wizardDisplayedTask.executionState !== "WaitingForUser")) {
|
|
620
|
-
return;
|
|
621
|
-
}
|
|
622
|
-
}, [
|
|
623
|
-
wizardDisplayedTask,
|
|
624
|
-
wizardDisplayedAgentId,
|
|
625
|
-
wizardDisplayedExecutionDisplay?.label,
|
|
626
|
-
selectedProjectId,
|
|
627
|
-
]);
|
|
628
516
|
const clearWizardCloseTransitionTimeout = useCallback(() => {
|
|
629
517
|
if (wizardCloseTransitionTimeoutRef.current !== null) {
|
|
630
518
|
window.clearTimeout(wizardCloseTransitionTimeoutRef.current);
|
|
@@ -1707,7 +1595,7 @@ export function TaskBoardWorkspace() {
|
|
|
1707
1595
|
return (_jsx("div", { className: "flex h-full min-h-[240px] items-center justify-center rounded-lg border border-dashed border-slate-200 bg-slate-50/70", "data-testid": "taskboard-project-loading-state", children: _jsxs("div", { className: "text-muted-foreground flex flex-col items-center gap-3 text-sm", children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin" }), _jsx("div", { children: "Loading project..." })] }) }));
|
|
1708
1596
|
}
|
|
1709
1597
|
if (!selectedProjectId || (!selectedProject && !isProjectsLoading)) {
|
|
1710
|
-
return (_jsx("div", { className: "flex min-h-full w-full flex-col p-4 md:p-8", children: _jsx("div", { className: "mx-auto flex h-full w-full max-w-7xl flex-1
|
|
1598
|
+
return (_jsx("div", { className: "flex min-h-full w-full flex-col p-4 md:p-8", children: _jsx("div", { className: "mx-auto flex h-full min-h-0 w-full max-w-7xl flex-1", children: _jsx(ProjectOverviewContent, { nav: nav }) }) }));
|
|
1711
1599
|
}
|
|
1712
1600
|
if (isWizardMode) {
|
|
1713
1601
|
return (_jsx(WizardView, { projectId: selectedProjectId, tasks: tasksWithDisplayAssignees, projectTasksLoading: isTasksLoading, dependencies: dependencies, subprojectTaskLists: wizardSubprojectTaskLists, subprojectTasksLoading: subprojectCountsLoading, selectedTaskId: wizardDisplayedTask?.taskId ?? null, onSelectTask: (id) => {
|
|
@@ -1763,7 +1651,7 @@ export function TaskBoardWorkspace() {
|
|
|
1763
1651
|
setTaskSelection,
|
|
1764
1652
|
refreshVisibleTaskData,
|
|
1765
1653
|
]);
|
|
1766
|
-
const taskDetailPanel = useMemo(() => (_jsx(TaskDetailPanel, { project: selectedTaskProject, task: selectedTask, allTasks: taskSelectionUniverse, dependencies: dependencies, onTaskChanged: () => {
|
|
1654
|
+
const taskDetailPanel = useMemo(() => (_jsx(TaskDetailPanel, { project: selectedTaskProject, projects: projects, task: selectedTask, allTasks: taskSelectionUniverse, dependencies: dependencies, onTaskChanged: () => {
|
|
1767
1655
|
void refreshVisibleTaskData();
|
|
1768
1656
|
}, onSelectTask: (taskId) => setTaskSelection(taskId, { source: "user" }), onClose: () => setTaskSelection(null), variant: "panel" })), [
|
|
1769
1657
|
selectedTaskProject,
|
|
@@ -1805,161 +1693,6 @@ export function TaskBoardWorkspace() {
|
|
|
1805
1693
|
selectedTask,
|
|
1806
1694
|
handleReopenSelectedTask,
|
|
1807
1695
|
]);
|
|
1808
|
-
const previewItemVersion = useMemo(() => {
|
|
1809
|
-
if (!currentItemDescriptor)
|
|
1810
|
-
return null;
|
|
1811
|
-
return currentItemDescriptor.version === 0
|
|
1812
|
-
? (editContext?.item?.version ?? null)
|
|
1813
|
-
: currentItemDescriptor.version;
|
|
1814
|
-
}, [currentItemDescriptor, editContext?.item?.version]);
|
|
1815
|
-
const contextItemOptions = useMemo(() => {
|
|
1816
|
-
return agentContextItems.map((contextItem) => {
|
|
1817
|
-
const key = `${contextItem.id}|${contextItem.language}|${contextItem.version}`;
|
|
1818
|
-
const name = contextItemNamesByKey[key] || contextItem.name || contextItem.id;
|
|
1819
|
-
const path = contextItemPathsByKey[key] || contextItem.path || "";
|
|
1820
|
-
return {
|
|
1821
|
-
value: key,
|
|
1822
|
-
label: name,
|
|
1823
|
-
description: `${path || contextItem.id} (${contextItem.language}/v${contextItem.version})`,
|
|
1824
|
-
};
|
|
1825
|
-
});
|
|
1826
|
-
}, [agentContextItems, contextItemNamesByKey, contextItemPathsByKey]);
|
|
1827
|
-
const selectedContextItemValue = useMemo(() => {
|
|
1828
|
-
if (currentItemKey)
|
|
1829
|
-
return currentItemKey;
|
|
1830
|
-
const first = agentContextItems[0];
|
|
1831
|
-
if (!first)
|
|
1832
|
-
return "";
|
|
1833
|
-
return `${first.id}|${first.language}|${first.version}`;
|
|
1834
|
-
}, [currentItemKey, agentContextItems]);
|
|
1835
|
-
const hasMultipleContextItems = contextItemOptions.length > 1;
|
|
1836
|
-
useEffect(() => {
|
|
1837
|
-
if (!currentAgentId) {
|
|
1838
|
-
setAgentContextItems([]);
|
|
1839
|
-
return;
|
|
1840
|
-
}
|
|
1841
|
-
let cancelled = false;
|
|
1842
|
-
getAgent(currentAgentId)
|
|
1843
|
-
.then((agent) => {
|
|
1844
|
-
if (cancelled)
|
|
1845
|
-
return;
|
|
1846
|
-
const rawContext = agent?.agentContext;
|
|
1847
|
-
if (!rawContext) {
|
|
1848
|
-
setAgentContextItems([]);
|
|
1849
|
-
return;
|
|
1850
|
-
}
|
|
1851
|
-
let parsed = null;
|
|
1852
|
-
try {
|
|
1853
|
-
parsed = JSON.parse(rawContext);
|
|
1854
|
-
}
|
|
1855
|
-
catch {
|
|
1856
|
-
parsed = null;
|
|
1857
|
-
}
|
|
1858
|
-
const items = (parsed?.items || []).filter((x) => !!x?.id && !!x?.language && typeof x?.version === "number");
|
|
1859
|
-
setAgentContextItems(items);
|
|
1860
|
-
})
|
|
1861
|
-
.catch(() => {
|
|
1862
|
-
if (cancelled)
|
|
1863
|
-
return;
|
|
1864
|
-
setAgentContextItems([]);
|
|
1865
|
-
});
|
|
1866
|
-
return () => {
|
|
1867
|
-
cancelled = true;
|
|
1868
|
-
};
|
|
1869
|
-
}, [currentAgentId]);
|
|
1870
|
-
useEffect(() => {
|
|
1871
|
-
if (!editContext || agentContextItems.length === 0) {
|
|
1872
|
-
setContextItemNamesByKey({});
|
|
1873
|
-
setContextItemPathsByKey({});
|
|
1874
|
-
return;
|
|
1875
|
-
}
|
|
1876
|
-
let cancelled = false;
|
|
1877
|
-
Promise.all(agentContextItems.map(async (contextItem) => {
|
|
1878
|
-
const key = `${contextItem.id}|${contextItem.language}|${contextItem.version}`;
|
|
1879
|
-
const descriptor = {
|
|
1880
|
-
id: contextItem.id,
|
|
1881
|
-
language: contextItem.language,
|
|
1882
|
-
version: contextItem.version,
|
|
1883
|
-
};
|
|
1884
|
-
const item = await editContext.itemsRepository.getItem(descriptor);
|
|
1885
|
-
return {
|
|
1886
|
-
key,
|
|
1887
|
-
name: item?.name || contextItem.name || "",
|
|
1888
|
-
path: item?.path || contextItem.path || "",
|
|
1889
|
-
};
|
|
1890
|
-
}))
|
|
1891
|
-
.then((results) => {
|
|
1892
|
-
if (cancelled)
|
|
1893
|
-
return;
|
|
1894
|
-
const nextNames = {};
|
|
1895
|
-
const nextPaths = {};
|
|
1896
|
-
for (const result of results) {
|
|
1897
|
-
nextNames[result.key] = result.name;
|
|
1898
|
-
nextPaths[result.key] = result.path;
|
|
1899
|
-
}
|
|
1900
|
-
setContextItemNamesByKey(nextNames);
|
|
1901
|
-
setContextItemPathsByKey(nextPaths);
|
|
1902
|
-
})
|
|
1903
|
-
.catch(() => {
|
|
1904
|
-
if (cancelled)
|
|
1905
|
-
return;
|
|
1906
|
-
setContextItemNamesByKey({});
|
|
1907
|
-
setContextItemPathsByKey({});
|
|
1908
|
-
});
|
|
1909
|
-
return () => {
|
|
1910
|
-
cancelled = true;
|
|
1911
|
-
};
|
|
1912
|
-
}, [editContext, agentContextItems]);
|
|
1913
|
-
const handleSelectContextItem = useCallback((value) => {
|
|
1914
|
-
const [id, language, versionText] = value.split("|");
|
|
1915
|
-
const version = Number(versionText);
|
|
1916
|
-
if (!id || !language || Number.isNaN(version) || !editContext?.loadItem)
|
|
1917
|
-
return;
|
|
1918
|
-
void editContext.loadItem({ id, language, version });
|
|
1919
|
-
}, [editContext]);
|
|
1920
|
-
useEffect(() => {
|
|
1921
|
-
if (!editContext || !currentItemDescriptor) {
|
|
1922
|
-
setPreviewItemName("");
|
|
1923
|
-
setPreviewItemPath("");
|
|
1924
|
-
return;
|
|
1925
|
-
}
|
|
1926
|
-
const activeItem = editContext.item;
|
|
1927
|
-
const itemMatchesDescriptor = activeItem?.id === currentItemDescriptor.id &&
|
|
1928
|
-
activeItem?.language === currentItemDescriptor.language;
|
|
1929
|
-
if (itemMatchesDescriptor) {
|
|
1930
|
-
setPreviewItemName(activeItem?.name || "");
|
|
1931
|
-
setPreviewItemPath(activeItem?.path || "");
|
|
1932
|
-
return;
|
|
1933
|
-
}
|
|
1934
|
-
let cancelled = false;
|
|
1935
|
-
editContext.itemsRepository
|
|
1936
|
-
.getItem(currentItemDescriptor)
|
|
1937
|
-
.then((item) => {
|
|
1938
|
-
if (cancelled)
|
|
1939
|
-
return;
|
|
1940
|
-
setPreviewItemName(item?.name || "");
|
|
1941
|
-
setPreviewItemPath(item?.path || "");
|
|
1942
|
-
})
|
|
1943
|
-
.catch(() => {
|
|
1944
|
-
if (cancelled)
|
|
1945
|
-
return;
|
|
1946
|
-
setPreviewItemName("");
|
|
1947
|
-
setPreviewItemPath("");
|
|
1948
|
-
});
|
|
1949
|
-
return () => {
|
|
1950
|
-
cancelled = true;
|
|
1951
|
-
};
|
|
1952
|
-
}, [
|
|
1953
|
-
editContext,
|
|
1954
|
-
currentItemDescriptor,
|
|
1955
|
-
currentItemDescriptor?.id,
|
|
1956
|
-
currentItemDescriptor?.language,
|
|
1957
|
-
currentItemDescriptor?.version,
|
|
1958
|
-
editContext?.item?.id,
|
|
1959
|
-
editContext?.item?.language,
|
|
1960
|
-
editContext?.item?.name,
|
|
1961
|
-
editContext?.item?.path,
|
|
1962
|
-
]);
|
|
1963
1696
|
const itemPreviewPanel = useMemo(() => {
|
|
1964
1697
|
const hasCurrentItem = !!currentItemDescriptor;
|
|
1965
1698
|
const previewSidebar = (_jsx("div", { className: "relative z-10 flex h-full min-h-0 flex-col bg-white", children: _jsx("div", { className: "min-h-0 flex-1", children: _jsx(MainContentTree, { mode: "normal" }) }) }));
|
|
@@ -2132,7 +1865,7 @@ export function TaskBoardWorkspace() {
|
|
|
2132
1865
|
id: "agent",
|
|
2133
1866
|
label: "Agent",
|
|
2134
1867
|
content: null,
|
|
2135
|
-
disabled: !
|
|
1868
|
+
disabled: !displayAgentId || shouldHideAgentPanelForSelectedTask,
|
|
2136
1869
|
},
|
|
2137
1870
|
...(showEditorPanel
|
|
2138
1871
|
? [{ id: "editor", label: "Editor", content: null }]
|
|
@@ -2158,7 +1891,10 @@ export function TaskBoardWorkspace() {
|
|
|
2158
1891
|
} }), _jsx(ProjectSettingsDialog, { open: !!settingsProjectId, onOpenChange: (open) => {
|
|
2159
1892
|
if (!open)
|
|
2160
1893
|
setSettingsProjectId(null);
|
|
2161
|
-
}, projectId: settingsProjectId, selectedProject: settingsProject,
|
|
1894
|
+
}, projectId: settingsProjectId, selectedProject: settingsProject, projects: projects, onChanged: async () => {
|
|
1895
|
+
await refreshProjects();
|
|
1896
|
+
await refreshVisibleTaskData();
|
|
1897
|
+
} }), _jsx(AssignAgentDialog, { open: assignAgentDialogOpen, task: selectedTask, onOpenChange: setAssignAgentDialogOpen, onAssigned: async () => {
|
|
2162
1898
|
if (!selectedProjectId)
|
|
2163
1899
|
return;
|
|
2164
1900
|
await refreshTasks(selectedProjectId);
|