@parhelia/core 0.1.12636 → 0.1.12638
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/components/ui/LanguageSelector.js +1 -7
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +11 -11
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +44 -5
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/TaskBoardWorkspace.js +1 -1
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +3 -2
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +89 -4
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +3 -2
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/services/taskService.d.ts +2 -1
- package/dist/task-board/services/taskService.js +3 -0
- package/dist/task-board/services/taskService.js.map +1 -1
- package/dist/task-board/types.d.ts +10 -1
- package/dist/task-board/views/DependencyGraphView.js +17 -9
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/KanbanView.js +1 -1
- package/dist/task-board/views/KanbanView.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,6 @@ import { Switch } from "./switch";
|
|
|
9
9
|
import { FilterInput, highlightMatch } from "../FilterInput";
|
|
10
10
|
import { Command, CommandEmpty, CommandGroup, CommandItem, CommandList, } from "./command";
|
|
11
11
|
import { Popover, PopoverContent, PopoverTrigger } from "./popover";
|
|
12
|
-
const MAX_LANG_SELECTOR_NAME_LENGTH = 5;
|
|
13
12
|
export function LanguageSelector({ selectedLanguage, onLanguageSelected, showAllLanguagesSwitch, showAllLanguages = false, disabled = false, }) {
|
|
14
13
|
const [open, setOpen] = React.useState(false);
|
|
15
14
|
const [showAllLanguagesInternal, setShowAllLanguagesInternal] = React.useState(showAllLanguages);
|
|
@@ -45,12 +44,7 @@ export function LanguageSelector({ selectedLanguage, onLanguageSelected, showAll
|
|
|
45
44
|
setFilterText("");
|
|
46
45
|
}
|
|
47
46
|
};
|
|
48
|
-
|
|
49
|
-
? editContext?.isMobile && currentLanguage.name.length > MAX_LANG_SELECTOR_NAME_LENGTH
|
|
50
|
-
? `${currentLanguage.name.slice(0, MAX_LANG_SELECTOR_NAME_LENGTH)}\u2026`
|
|
51
|
-
: currentLanguage.name
|
|
52
|
-
: null;
|
|
53
|
-
return (_jsxs(Popover, { open: open, onOpenChange: handleOpenChange, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { ref: triggerRef, variant: "select", role: "combobox", "aria-expanded": open, className: cn(disabled && "cursor-not-allowed opacity-50"), "data-testid": "language-selector", disabled: disabled, title: currentLanguage?.name ?? undefined, children: [_jsxs("div", { className: "flex items-center gap-2", children: [currentLanguage && (_jsxs(_Fragment, { children: [_jsx("img", { src: currentLanguage.icon, className: "h-5", alt: currentLanguage.name }), langSelectorLabel] })), !currentLanguage && _jsx("div", { children: "Select language" })] }), _jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50 hidden md:block", strokeWidth: 1 })] }) }), _jsx(PopoverContent, { className: "w-64 p-0", align: "start", container: portalContainer, onMouseDown: (e) => e.stopPropagation(), onClick: (e) => e.stopPropagation(), children: _jsxs(Command, { children: [showAllLanguagesSwitch && (_jsxs("div", { className: "flex items-center justify-center gap-2 p-2 text-xs font-light", children: [_jsx("span", { className: "cursor-pointer", onClick: () => setShowAllLanguagesInternal(false), children: "Item languages" }), _jsx(Switch, { checked: showAllLanguagesInternal, className: "cursor-pointer", onCheckedChange: (checked) => setShowAllLanguagesInternal(checked) }), _jsx("span", { className: "cursor-pointer", onClick: () => setShowAllLanguagesInternal(true), children: "All languages" })] })), _jsx("div", { className: "p-2", children: _jsx(FilterInput, { value: filterText, onChange: setFilterText, placeholder: "Filter languages...", className: "w-full", onClear: () => setFilterText("") }) }), _jsxs(CommandList, { className: "max-h-[50vh]", children: [_jsx(CommandEmpty, { children: filterText.trim()
|
|
47
|
+
return (_jsxs(Popover, { open: open, onOpenChange: handleOpenChange, enableIframeClickDetection: false, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { ref: triggerRef, variant: "select", role: "combobox", "aria-expanded": open, className: cn("min-w-0 max-w-full", disabled && "cursor-not-allowed opacity-50"), "data-testid": "language-selector", disabled: disabled, title: currentLanguage?.name ?? undefined, children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [currentLanguage && (_jsxs(_Fragment, { children: [_jsx("img", { src: currentLanguage.icon, className: "h-5 shrink-0", alt: currentLanguage.name }), _jsx("span", { "data-testid": "language-selector-label", className: "truncate min-w-[5ch]", children: currentLanguage.name })] })), !currentLanguage && _jsx("div", { children: "Select language" })] }), _jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50 hidden md:block", strokeWidth: 1 })] }) }), _jsx(PopoverContent, { className: "w-64 p-0", align: "start", container: portalContainer, onMouseDown: (e) => e.stopPropagation(), onClick: (e) => e.stopPropagation(), children: _jsxs(Command, { children: [showAllLanguagesSwitch && (_jsxs("div", { className: "flex items-center justify-center gap-2 p-2 text-xs font-light", children: [_jsx("span", { className: "cursor-pointer", onClick: () => setShowAllLanguagesInternal(false), children: "Item languages" }), _jsx(Switch, { checked: showAllLanguagesInternal, className: "cursor-pointer", onCheckedChange: (checked) => setShowAllLanguagesInternal(checked) }), _jsx("span", { className: "cursor-pointer", onClick: () => setShowAllLanguagesInternal(true), children: "All languages" })] })), _jsx("div", { className: "p-2", children: _jsx(FilterInput, { value: filterText, onChange: setFilterText, placeholder: "Filter languages...", className: "w-full", onClear: () => setFilterText("") }) }), _jsxs(CommandList, { className: "max-h-[50vh]", children: [_jsx(CommandEmpty, { children: filterText.trim()
|
|
54
48
|
? `No languages found matching "${filterText}"`
|
|
55
49
|
: "This item has no languages" }), _jsx(CommandGroup, { children: languages.map((language) => (_jsxs(CommandItem, { value: language.languageCode, onSelect: () => selectLanguage(language), className: cn("flex items-center gap-2 px-2 py-2 text-xs font-light",
|
|
56
50
|
// Remove background when selected (auto-focused) but not hovered
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageSelector.js","sourceRoot":"","sources":["../../../src/components/ui/LanguageSelector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEpE,MAAM,
|
|
1
|
+
{"version":3,"file":"LanguageSelector.js","sourceRoot":"","sources":["../../../src/components/ui/LanguageSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export function ItemLanguageVersion() {
|
|
|
51
51
|
editContext.loadItem({ ...item, version });
|
|
52
52
|
} })) : null;
|
|
53
53
|
if (editContext.isMobile) {
|
|
54
|
-
return (_jsxs("div", { className: "mr-1 flex w-full min-w-0 items-center gap-1
|
|
54
|
+
return (_jsxs("div", { className: "mr-1 flex w-full min-w-0 items-center gap-1", children: [_jsx(PageSelector, { itemDescriptor: item || null }), !isCompareMode && languageSelector && (_jsx("div", { className: "flex min-w-0", children: languageSelector })), !isCompareMode && versionSelector && (_jsx("div", { className: "shrink-0", children: versionSelector }))] }));
|
|
55
55
|
}
|
|
56
56
|
return (_jsxs("div", { className: "mr-3 flex min-w-0 items-center gap-3", "data-testid": "item-language-version-bar", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [_jsx(PageSelector, { itemDescriptor: item || null }), _jsx("div", { className: "shrink-0", children: _jsx(FavoritesControls, { itemDescriptor: item || null, editContext: editContext }) })] }), item && (_jsx("div", { className: "shrink-0", children: _jsx(ItemActionsMenu, { isMobile: false }) })), !isCompareMode && languageSelector && (_jsx("div", { className: "shrink-0", children: languageSelector })), !isCompareMode && versionSelector && (_jsx("div", { className: "shrink-0", children: versionSelector }))] }));
|
|
57
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemLanguageVersion.js","sourceRoot":"","sources":["../../../src/editor/menubar/ItemLanguageVersion.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ItemLanguageVersion.js","sourceRoot":"","sources":["../../../src/editor/menubar/ItemLanguageVersion.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,17 +19,6 @@ const FIELD_GROUPS = [
|
|
|
19
19
|
icon: _jsx(Sparkles, { className: "h-4 w-4", strokeWidth: 1.5 }),
|
|
20
20
|
fieldNames: [["Default Model"], ["Models"]],
|
|
21
21
|
},
|
|
22
|
-
{
|
|
23
|
-
title: "Tools",
|
|
24
|
-
description: "Which tools this profile may use and tool-call behavior.",
|
|
25
|
-
icon: _jsx(Wrench, { className: "h-4 w-4", strokeWidth: 1.5 }),
|
|
26
|
-
fieldNames: [
|
|
27
|
-
["Allowed Tools"],
|
|
28
|
-
["Ask Mode Tools", "Read-Only Mode Tools"],
|
|
29
|
-
["Max Tool Calls"],
|
|
30
|
-
["Disable Tool Call Pruning"],
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
22
|
{
|
|
34
23
|
title: "Skills",
|
|
35
24
|
description: "Skill packs and which profiles the agent may switch to.",
|
|
@@ -41,6 +30,17 @@ const FIELD_GROUPS = [
|
|
|
41
30
|
["Allowed Switch Profiles"],
|
|
42
31
|
],
|
|
43
32
|
},
|
|
33
|
+
{
|
|
34
|
+
title: "Tools",
|
|
35
|
+
description: "Which tools this profile may use and tool-call behavior.",
|
|
36
|
+
icon: _jsx(Wrench, { className: "h-4 w-4", strokeWidth: 1.5 }),
|
|
37
|
+
fieldNames: [
|
|
38
|
+
["Allowed Tools"],
|
|
39
|
+
["Ask Mode Tools", "Read-Only Mode Tools"],
|
|
40
|
+
["Max Tool Calls"],
|
|
41
|
+
["Disable Tool Call Pruning"],
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
44
|
{
|
|
45
45
|
title: "Behavior",
|
|
46
46
|
description: "Controls how the profile operates in the editor.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentProfileConfigPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/AgentProfileConfigPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAUnC,MAAM,YAAY,GAA2B;IAC3C;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACpD,UAAU,EAAE;YACV,CAAC,eAAe,CAAC;YACjB,CAAC,yBAAyB,CAAC;YAC3B,CAAC,aAAa,CAAC;YACf,CAAC,kBAAkB,CAAC;SACrB;KACF;IACD;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACxD,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC5C;IACD;QACE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"AgentProfileConfigPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/AgentProfileConfigPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAUnC,MAAM,YAAY,GAA2B;IAC3C;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACpD,UAAU,EAAE;YACV,CAAC,eAAe,CAAC;YACjB,CAAC,yBAAyB,CAAC;YAC3B,CAAC,aAAa,CAAC;YACf,CAAC,kBAAkB,CAAC;SACrB;KACF;IACD;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACxD,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;KAC5C;IACD;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,yDAAyD;QACtE,IAAI,EAAE,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACtD,UAAU,EAAE;YACV,CAAC,gBAAgB,CAAC;YAClB,CAAC,kBAAkB,CAAC;YACpB,CAAC,gBAAgB,CAAC;YAClB,CAAC,yBAAyB,CAAC;SAC5B;KACF;IACD;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,KAAC,MAAM,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACtD,UAAU,EAAE;YACV,CAAC,eAAe,CAAC;YACjB,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;YAC1C,CAAC,gBAAgB,CAAC;YAClB,CAAC,2BAA2B,CAAC;SAC9B;KACF;IACD;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,kDAAkD;QAC/D,IAAI,EAAE,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI;QACrD,UAAU,EAAE;YACV,CAAC,cAAc,CAAC;YAChB,CAAC,wBAAwB,CAAC;YAC1B,CAAC,sBAAsB,CAAC;YACxB,CAAC,qBAAqB,CAAC;YACvB,CAAC,uBAAuB,CAAC;YACzB,CAAC,sBAAsB,CAAC;SACzB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,EACtC,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,YAAY,GAAG,CAAC,GACa;IAC7B,OAAO,CACL,KAAC,uBAAuB,IACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,KAAC,GAAG,IAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAE,GAAG,GAAI,EACzD,cAAc,EAAC,8BAA8B,EAC7C,YAAY,EAAC,mDAAmD,EAChE,aAAa,EAAC,eAAe,EAC7B,iBAAiB,EAAC,oFAAoF,GACtG,CACH,CAAC;AACJ,CAAC;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -35,6 +35,14 @@ const PRIORITY_OPTIONS = [
|
|
|
35
35
|
{ value: "High", label: "High" },
|
|
36
36
|
{ value: "Critical", label: "Critical" },
|
|
37
37
|
];
|
|
38
|
+
const TASK_TYPE_OPTIONS = [
|
|
39
|
+
{ value: "Task", label: "Task" },
|
|
40
|
+
{ value: "DecisionPoint", label: "Decision Point" },
|
|
41
|
+
];
|
|
42
|
+
const DECISION_MODE_OPTIONS = [
|
|
43
|
+
{ value: "MultiSelect", label: "Multi-select" },
|
|
44
|
+
{ value: "SingleSelect", label: "Single-select" },
|
|
45
|
+
];
|
|
38
46
|
const PROJECT_TEMPLATE_AUTOSAVE_DEBOUNCE_MS = 1200;
|
|
39
47
|
const PROJECT_TEMPLATE_EXTERNAL_REFRESH_DEBOUNCE_MS = 350;
|
|
40
48
|
const PROJECT_TEMPLATE_ROOT_PATHS = [
|
|
@@ -63,12 +71,22 @@ function normalizeTaskTemplate(task) {
|
|
|
63
71
|
const rawAgentProfileId = task.agentProfileId?.trim() || null;
|
|
64
72
|
const rawParentTaskId = task.parentTaskId?.trim() || null;
|
|
65
73
|
const disabled = task.disabled === true;
|
|
74
|
+
const taskType = String(task.taskType ?? "").toLowerCase() === "decisionpoint"
|
|
75
|
+
? "DecisionPoint"
|
|
76
|
+
: "Task";
|
|
77
|
+
const decisionMode = taskType === "DecisionPoint"
|
|
78
|
+
? String(task.decisionMode ?? "").toLowerCase() === "singleselect"
|
|
79
|
+
? "SingleSelect"
|
|
80
|
+
: "MultiSelect"
|
|
81
|
+
: null;
|
|
66
82
|
const assigneeType = task.assigneeType ?? (rawAgentProfileId ? "Agent" : null);
|
|
67
83
|
if (assigneeType === "Agent") {
|
|
68
84
|
const canonicalAgentId = rawAgentProfileId || (isValidGuid(rawAssigneeId) ? rawAssigneeId : null);
|
|
69
85
|
return {
|
|
70
86
|
...task,
|
|
71
87
|
disabled,
|
|
88
|
+
taskType,
|
|
89
|
+
decisionMode,
|
|
72
90
|
assigneeType: "Agent",
|
|
73
91
|
assigneeId: canonicalAgentId,
|
|
74
92
|
agentProfileId: canonicalAgentId,
|
|
@@ -79,6 +97,8 @@ function normalizeTaskTemplate(task) {
|
|
|
79
97
|
return {
|
|
80
98
|
...task,
|
|
81
99
|
disabled,
|
|
100
|
+
taskType,
|
|
101
|
+
decisionMode,
|
|
82
102
|
assigneeType,
|
|
83
103
|
assigneeId: rawAssigneeId,
|
|
84
104
|
agentProfileId: null,
|
|
@@ -88,6 +108,8 @@ function normalizeTaskTemplate(task) {
|
|
|
88
108
|
return {
|
|
89
109
|
...task,
|
|
90
110
|
disabled,
|
|
111
|
+
taskType,
|
|
112
|
+
decisionMode,
|
|
91
113
|
assigneeType: null,
|
|
92
114
|
assigneeId: rawAssigneeId,
|
|
93
115
|
agentProfileId: null,
|
|
@@ -135,6 +157,8 @@ function createEmptyTaskTemplate(taskCount, title) {
|
|
|
135
157
|
assigneeType: null,
|
|
136
158
|
assigneeId: null,
|
|
137
159
|
priority: null,
|
|
160
|
+
taskType: "Task",
|
|
161
|
+
decisionMode: null,
|
|
138
162
|
sortOrder: taskCount * 100,
|
|
139
163
|
parentTaskId: null,
|
|
140
164
|
dependencyIds: [],
|
|
@@ -170,6 +194,10 @@ function buildUpsertTemplateRequest(template) {
|
|
|
170
194
|
title: normalizedTask.title.trim(),
|
|
171
195
|
description: normalizedTask.description?.trim() || null,
|
|
172
196
|
disabled: normalizedTask.disabled === true,
|
|
197
|
+
taskType: normalizedTask.taskType ?? "Task",
|
|
198
|
+
decisionMode: normalizedTask.taskType === "DecisionPoint"
|
|
199
|
+
? normalizedTask.decisionMode ?? "MultiSelect"
|
|
200
|
+
: null,
|
|
173
201
|
priority: normalizedTask.priority || null,
|
|
174
202
|
sortOrder: normalizedTask.sortOrder || index * 100,
|
|
175
203
|
parentTaskId: normalizedTask.parentTaskId || null,
|
|
@@ -259,7 +287,7 @@ function buildTemplateTaskItems(template, aiProfilesById) {
|
|
|
259
287
|
taskId: task.id,
|
|
260
288
|
projectId: template.id,
|
|
261
289
|
parentTaskId: normalizedTask.parentTaskId ?? null,
|
|
262
|
-
taskType: "Task",
|
|
290
|
+
taskType: normalizedTask.taskType ?? "Task",
|
|
263
291
|
title: task.title || "Untitled Task",
|
|
264
292
|
description: normalizedTask.description ?? null,
|
|
265
293
|
status: "Todo",
|
|
@@ -1541,23 +1569,34 @@ export function ProjectTemplatesPanel() {
|
|
|
1541
1569
|
}));
|
|
1542
1570
|
return nextLayout;
|
|
1543
1571
|
} }) }));
|
|
1544
|
-
const taskPane = (_jsx("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", "data-testid": "project-template-task-detail-pane", children: !selectedTask ? (_jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: _jsx("div", { className: "rounded-lg border border-dashed border-gray-200 bg-gray-50 p-6 text-center text-xs text-gray-500", children: "Select a task node to edit its details." }) })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "shrink-0 border-b border-gray-100 bg-white px-4 pt-4 pb-3", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "text-xs font-semibold text-gray-900", "data-testid": "project-template-selected-task-title", children: selectedTask.title || "Untitled Task" }), selectedTask.disabled ? (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: "Disabled" })) : null] }), _jsx("div", { className: "text-xs text-gray-500", children: "Configure task details, assignment, and dependencies." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: handleDeleteSelectedTask, "data-testid": "project-template-remove-task-button", children: [_jsx(Trash2, { className: "h-4 w-4", strokeWidth: 1.5 }), "Remove Task"] })] }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-4 pt-3 pb-4", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "grid gap-1.5 md:col-span-2", children: [_jsx(Label, { className: "text-xs", children: "Task title" }), _jsx(Input, { value: selectedTask.title, onChange: (event) => updateSelectedTask((currentTask) => ({
|
|
1572
|
+
const taskPane = (_jsx("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", "data-testid": "project-template-task-detail-pane", children: !selectedTask ? (_jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-4", children: _jsx("div", { className: "rounded-lg border border-dashed border-gray-200 bg-gray-50 p-6 text-center text-xs text-gray-500", children: "Select a task node to edit its details." }) })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "shrink-0 border-b border-gray-100 bg-white px-4 pt-4 pb-3", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "text-xs font-semibold text-gray-900", "data-testid": "project-template-selected-task-title", children: selectedTask.title || "Untitled Task" }), selectedTask.taskType === "DecisionPoint" ? (_jsx(Badge, { variant: "outline", className: "border-violet-200 bg-violet-50 text-[10px] uppercase text-violet-700", children: "Decision Point" })) : null, selectedTask.disabled ? (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: "Disabled" })) : null] }), _jsx("div", { className: "text-xs text-gray-500", children: "Configure task details, assignment, and dependencies." })] }), _jsxs(Button, { variant: "outline", size: "sm", onClick: handleDeleteSelectedTask, "data-testid": "project-template-remove-task-button", children: [_jsx(Trash2, { className: "h-4 w-4", strokeWidth: 1.5 }), "Remove Task"] })] }) }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-4 pt-3 pb-4", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "grid gap-1.5 md:col-span-2", children: [_jsx(Label, { className: "text-xs", children: "Task title" }), _jsx(Input, { value: selectedTask.title, onChange: (event) => updateSelectedTask((currentTask) => ({
|
|
1545
1573
|
...currentTask,
|
|
1546
1574
|
title: event.target.value,
|
|
1547
1575
|
})), placeholder: "Task title", className: "text-xs md:text-xs", "data-testid": "project-template-task-title-input" })] }), _jsxs("div", { className: "grid gap-1.5 md:col-span-2", children: [_jsx(Label, { className: "text-xs", children: "Description" }), _jsx(Textarea, { className: "text-xs", value: selectedTask.description ?? "", onChange: (event) => updateSelectedTask((currentTask) => ({
|
|
1548
1576
|
...currentTask,
|
|
1549
1577
|
description: event.target.value,
|
|
1550
|
-
})), rows: 4, placeholder: "Describe what this task should accomplish", "data-testid": "project-template-task-description-input" })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { className: "text-xs", children: "
|
|
1578
|
+
})), rows: 4, placeholder: "Describe what this task should accomplish", "data-testid": "project-template-task-description-input" })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { className: "text-xs", children: "Task type" }), _jsx(Select, { className: "text-xs", value: selectedTask.taskType ?? "Task", onValueChange: (value) => updateSelectedTask((currentTask) => ({
|
|
1579
|
+
...currentTask,
|
|
1580
|
+
taskType: value === "DecisionPoint" ? "DecisionPoint" : "Task",
|
|
1581
|
+
decisionMode: value === "DecisionPoint"
|
|
1582
|
+
? currentTask.decisionMode ?? "MultiSelect"
|
|
1583
|
+
: null,
|
|
1584
|
+
})), options: TASK_TYPE_OPTIONS, "data-testid": "project-template-task-type-select" })] }), selectedTask.taskType === "DecisionPoint" ? (_jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { className: "text-xs", children: "Decision mode" }), _jsx(Select, { className: "text-xs", value: selectedTask.decisionMode ?? "MultiSelect", onValueChange: (value) => updateSelectedTask((currentTask) => ({
|
|
1585
|
+
...currentTask,
|
|
1586
|
+
decisionMode: value === "SingleSelect"
|
|
1587
|
+
? "SingleSelect"
|
|
1588
|
+
: "MultiSelect",
|
|
1589
|
+
})), options: DECISION_MODE_OPTIONS, "data-testid": "project-template-task-decision-mode-select" })] })) : null, _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { className: "text-xs", children: "Priority" }), _jsx(Select, { className: "text-xs", value: selectedTask.priority ?? "", onValueChange: (value) => updateSelectedTask((currentTask) => ({
|
|
1551
1590
|
...currentTask,
|
|
1552
1591
|
priority: value || null,
|
|
1553
|
-
})), options: PRIORITY_OPTIONS, "data-testid": "project-template-task-priority-select" })] }), _jsxs("div", { className: "grid gap-1.5 md:col-span-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { className: "text-xs", children: "Default assignee" }), selectedTask.assigneeType === "Agent" ? (_jsxs(Button, { type: "button", size: "sm", variant: "outline", className: "h-7 gap-1 px-2 text-xs", onClick: () => void handleEditAssignedAgentProfile(), disabled: !selectedAgentProfileId, "data-testid": "project-template-task-edit-agent-profile-button", children: [_jsx(Settings2, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }), "Edit Profile"] })) : null] }), _jsx(TaskAssigneePicker, { projectTemplateId: draftTemplate.id, assigneeType: selectedTask.assigneeType ?? null, value: selectedTask.assigneeId ?? null, displayValue: selectedTaskAssigneeDisplayValue, onChange: (next) => updateSelectedTask((currentTask) => ({
|
|
1592
|
+
})), options: PRIORITY_OPTIONS, "data-testid": "project-template-task-priority-select" })] }), selectedTask.taskType === "DecisionPoint" ? (_jsx("div", { className: "grid gap-1.5 md:col-span-2", children: _jsx("div", { className: "rounded-md border border-violet-100 bg-violet-50 px-3 py-2 text-[11px] leading-snug text-violet-800", children: "Direct dependents of this task become selectable option roots when the project is created. Their descendants are materialized only after the Decision Point is resolved at runtime." }) })) : null, _jsxs("div", { className: "grid gap-1.5 md:col-span-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(Label, { className: "text-xs", children: "Default assignee" }), selectedTask.assigneeType === "Agent" ? (_jsxs(Button, { type: "button", size: "sm", variant: "outline", className: "h-7 gap-1 px-2 text-xs", onClick: () => void handleEditAssignedAgentProfile(), disabled: !selectedAgentProfileId, "data-testid": "project-template-task-edit-agent-profile-button", children: [_jsx(Settings2, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }), "Edit Profile"] })) : null] }), _jsx(TaskAssigneePicker, { projectTemplateId: draftTemplate.id, assigneeType: selectedTask.assigneeType ?? null, value: selectedTask.assigneeId ?? null, displayValue: selectedTaskAssigneeDisplayValue, onChange: (next) => updateSelectedTask((currentTask) => ({
|
|
1554
1593
|
...currentTask,
|
|
1555
1594
|
assigneeType: next?.assigneeType ?? null,
|
|
1556
1595
|
assigneeId: next?.assigneeId ?? null,
|
|
1557
1596
|
agentProfileId: next?.assigneeType === "Agent"
|
|
1558
1597
|
? next.assigneeId
|
|
1559
1598
|
: null,
|
|
1560
|
-
})), placeholder: "Assign user or agent", buttonClassName: "h-
|
|
1599
|
+
})), placeholder: "Assign user or agent", buttonClassName: "h-[27px] w-full justify-between rounded-md bg-gray-5 text-xs", buttonTestId: "project-template-task-assignee-picker" }), profilesError ? (_jsx("div", { className: "text-xs text-amber-700", children: profilesError })) : null] })] }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "rounded-lg border border-gray-200 bg-gray-50 p-3", "data-testid": "project-template-dependencies-section", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2 text-xs font-medium text-gray-800", children: [_jsx(Shield, { className: "h-4 w-4 text-gray-500", strokeWidth: 1.5 }), "Dependencies"] }), _jsxs(Popover, { open: dependencyPickerOpen, onOpenChange: setDependencyPickerOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { type: "button", size: "sm", variant: "outline", className: "h-7 gap-1 px-2", disabled: dependencyAddCandidates.length === 0, "aria-label": "Add dependency", "data-testid": "project-template-add-dependency-button", children: _jsx(Plus, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }) }) }), _jsxs(PopoverContent, { align: "end", className: "w-72 p-0", sideOffset: 6, "data-testid": "project-template-dependency-popover", children: [_jsx("div", { className: "border-b border-gray-100 px-3 py-2 text-xs font-medium text-gray-700", children: "Depends on" }), _jsx("div", { className: "max-h-56 overflow-y-auto p-1", children: dependencyAddCandidates.length === 0 ? (_jsx("div", { className: "px-2 py-3 text-center text-xs text-gray-500", children: "All other tasks are already linked." })) : (dependencyAddCandidates.map((task) => (_jsxs("button", { type: "button", className: "flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-xs hover:bg-gray-100", onClick: () => handleAddDependency(task.id), "data-testid": `project-template-dependency-option-${task.id}`, children: [_jsx(Link2, { className: "h-3.5 w-3.5 shrink-0 text-gray-400", strokeWidth: 1.5 }), _jsx("span", { className: "min-w-0 truncate font-medium text-gray-900", children: task.title || "Untitled Task" })] }, task.id)))) })] })] })] }), _jsx("p", { className: "mb-2 text-[11px] leading-snug text-gray-500", children: "This task must wait for these tasks to finish first." }), dependencyTasks.length === 0 ? (_jsx("div", { className: "text-xs text-gray-500", children: draftTemplate.taskTemplates.filter((t) => t.id !== selectedTask.id).length === 0
|
|
1561
1600
|
? "Add more task templates to create dependencies."
|
|
1562
1601
|
: "No dependencies yet. Use + to add one." })) : (_jsx("ul", { className: "space-y-1.5", children: dependencyTasks.map((task) => (_jsxs("li", { tabIndex: 0, className: cn("flex items-center justify-between gap-2 rounded-md border bg-white px-3 py-2 text-xs transition-colors outline-none", selectedDependencyId === task.id
|
|
1563
1602
|
? "border-amber-300 bg-amber-50 ring-1 ring-amber-200"
|