@arbidocs/blocks 0.4.137 → 0.4.139
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/agents/definitions/AgentConnectInstructions.d.ts +12 -0
- package/dist/agents/definitions/defaults.d.ts +12 -0
- package/dist/agents/definitions/index.d.ts +2 -0
- package/dist/agents/index.cjs +457 -418
- package/dist/agents/index.js +12 -13
- package/dist/agents/skills/SkillLibraryDetail.d.ts +26 -0
- package/dist/agents/skills/index.d.ts +2 -0
- package/dist/agents/skills/skillLibrary.d.ts +46 -0
- package/dist/calendar/CalendarFormDialog.d.ts +13 -0
- package/dist/calendar/ProposeTimeDialog.d.ts +22 -0
- package/dist/calendar/WeeklyHoursEditor.d.ts +7 -0
- package/dist/calendar/access-setup.d.ts +8 -0
- package/dist/calendar/api-mapping.d.ts +22 -0
- package/dist/calendar/booking-form.d.ts +46 -0
- package/dist/calendar/conference.d.ts +11 -0
- package/dist/calendar/errors.d.ts +7 -0
- package/dist/calendar/feeds.d.ts +2 -0
- package/dist/calendar/freebusy.d.ts +22 -0
- package/dist/calendar/ics.d.ts +33 -0
- package/dist/calendar/index.cjs +472 -4293
- package/dist/calendar/index.cjs.map +1 -1
- package/dist/calendar/index.d.ts +17 -1
- package/dist/calendar/index.js +1 -4227
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/requests.d.ts +42 -0
- package/dist/calendar/room-window.d.ts +6 -0
- package/dist/calendar/settings-value.d.ts +4 -0
- package/dist/calls/index.cjs +4 -4
- package/dist/calls/index.js +3 -3
- package/dist/chat/index.cjs +141 -141
- package/dist/chat/index.js +6 -6
- package/dist/{chunk-M33QUNFH.js → chunk-22WFGXG2.js} +3 -3
- package/dist/{chunk-M33QUNFH.js.map → chunk-22WFGXG2.js.map} +1 -1
- package/dist/{chunk-VMESMX7N.js → chunk-453PNNNW.js} +3 -3
- package/dist/{chunk-VMESMX7N.js.map → chunk-453PNNNW.js.map} +1 -1
- package/dist/{chunk-2KUCVSFF.js → chunk-45LRMW54.js} +3 -3
- package/dist/{chunk-2KUCVSFF.js.map → chunk-45LRMW54.js.map} +1 -1
- package/dist/chunk-5FTIHRZH.cjs +177 -0
- package/dist/chunk-5FTIHRZH.cjs.map +1 -0
- package/dist/{chunk-FUTMU4FR.js → chunk-5HFPRI3W.js} +3 -3
- package/dist/{chunk-FUTMU4FR.js.map → chunk-5HFPRI3W.js.map} +1 -1
- package/dist/{chunk-JY73DJOS.cjs → chunk-5UXDUOOB.cjs} +84 -1211
- package/dist/chunk-5UXDUOOB.cjs.map +1 -0
- package/dist/{chunk-ATJUVHVB.js → chunk-6QMWP5IU.js} +1445 -11
- package/dist/chunk-6QMWP5IU.js.map +1 -0
- package/dist/chunk-6YTHQ73P.cjs +5334 -0
- package/dist/chunk-6YTHQ73P.cjs.map +1 -0
- package/dist/{chunk-KMNZ2RVO.js → chunk-7QUUZBQZ.js} +15 -1109
- package/dist/chunk-7QUUZBQZ.js.map +1 -0
- package/dist/{chunk-C3ZRLULA.cjs → chunk-7X255TOM.cjs} +5 -5
- package/dist/{chunk-C3ZRLULA.cjs.map → chunk-7X255TOM.cjs.map} +1 -1
- package/dist/chunk-A3XPS2EU.js +245 -0
- package/dist/chunk-A3XPS2EU.js.map +1 -0
- package/dist/chunk-B3AHCIV5.js +5206 -0
- package/dist/chunk-B3AHCIV5.js.map +1 -0
- package/dist/{chunk-2Q7FDZAY.js → chunk-BPBSSMRB.js} +5 -163
- package/dist/chunk-BPBSSMRB.js.map +1 -0
- package/dist/{chunk-KSHKTOY2.js → chunk-CKCBBYTA.js} +205 -5
- package/dist/chunk-CKCBBYTA.js.map +1 -0
- package/dist/chunk-CYNF5PZI.js +170 -0
- package/dist/chunk-CYNF5PZI.js.map +1 -0
- package/dist/{chunk-OPTBQSCV.cjs → chunk-DJM7DLCT.cjs} +3 -3
- package/dist/{chunk-OPTBQSCV.cjs.map → chunk-DJM7DLCT.cjs.map} +1 -1
- package/dist/{chunk-E5OYHJMU.js → chunk-DN55PRGS.js} +4 -4
- package/dist/{chunk-E5OYHJMU.js.map → chunk-DN55PRGS.js.map} +1 -1
- package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
- package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
- package/dist/{chunk-KDUGTKVI.cjs → chunk-GFNELPDP.cjs} +17 -6
- package/dist/chunk-GFNELPDP.cjs.map +1 -0
- package/dist/{chunk-OGBXV326.cjs → chunk-GFRQG36Y.cjs} +2 -243
- package/dist/chunk-GFRQG36Y.cjs.map +1 -0
- package/dist/{chunk-WXYQ66KC.cjs → chunk-HEMU73OP.cjs} +2 -166
- package/dist/chunk-HEMU73OP.cjs.map +1 -0
- package/dist/{chunk-UUHUQHXR.cjs → chunk-JZNXRMLH.cjs} +6 -6
- package/dist/{chunk-UUHUQHXR.cjs.map → chunk-JZNXRMLH.cjs.map} +1 -1
- package/dist/{chunk-HDYWXEQU.cjs → chunk-K3HNLWZZ.cjs} +8 -8
- package/dist/{chunk-HDYWXEQU.cjs.map → chunk-K3HNLWZZ.cjs.map} +1 -1
- package/dist/{chunk-7M4C6CK7.js → chunk-KTFDUSON.js} +4 -4
- package/dist/{chunk-7M4C6CK7.js.map → chunk-KTFDUSON.js.map} +1 -1
- package/dist/{chunk-HLB4DIYV.cjs → chunk-MABUMUCA.cjs} +6 -6
- package/dist/{chunk-HLB4DIYV.cjs.map → chunk-MABUMUCA.cjs.map} +1 -1
- package/dist/{chunk-RQ2Y7USX.cjs → chunk-MIDXCYZB.cjs} +235 -15
- package/dist/chunk-MIDXCYZB.cjs.map +1 -0
- package/dist/{chunk-L3T7OJRX.js → chunk-MTPWZQTL.js} +4 -4
- package/dist/{chunk-L3T7OJRX.js.map → chunk-MTPWZQTL.js.map} +1 -1
- package/dist/{chunk-BUNZWOPX.cjs → chunk-O4ZIQDUT.cjs} +5 -5
- package/dist/{chunk-BUNZWOPX.cjs.map → chunk-O4ZIQDUT.cjs.map} +1 -1
- package/dist/{chunk-W3VYZXNS.js → chunk-O6W6RW3B.js} +5 -240
- package/dist/chunk-O6W6RW3B.js.map +1 -0
- package/dist/{chunk-WS5EX7DN.cjs → chunk-OGP6MQXQ.cjs} +3 -3
- package/dist/{chunk-WS5EX7DN.cjs.map → chunk-OGP6MQXQ.cjs.map} +1 -1
- package/dist/{chunk-6F7SZCVL.cjs → chunk-OWCEQKAR.cjs} +3 -3
- package/dist/{chunk-6F7SZCVL.cjs.map → chunk-OWCEQKAR.cjs.map} +1 -1
- package/dist/{chunk-OQ7RUNOC.js → chunk-PC5KVHX3.js} +22 -6
- package/dist/chunk-PC5KVHX3.js.map +1 -0
- package/dist/{chunk-CHVCTKF4.cjs → chunk-ULEDHANM.cjs} +1543 -66
- package/dist/chunk-ULEDHANM.cjs.map +1 -0
- package/dist/{chunk-L2PAPOZ5.js → chunk-US3S4DCB.js} +17 -6
- package/dist/chunk-US3S4DCB.js.map +1 -0
- package/dist/chunk-V46W7YLI.cjs +252 -0
- package/dist/chunk-V46W7YLI.cjs.map +1 -0
- package/dist/{chunk-3RJN2VTL.js → chunk-XDQXDWE7.js} +3 -3
- package/dist/{chunk-3RJN2VTL.js.map → chunk-XDQXDWE7.js.map} +1 -1
- package/dist/{chunk-EHOPZBAX.cjs → chunk-XOC44HQY.cjs} +12 -12
- package/dist/{chunk-EHOPZBAX.cjs.map → chunk-XOC44HQY.cjs.map} +1 -1
- package/dist/{chunk-YOMPLCP6.js → chunk-Y5KTM3V5.js} +3 -3
- package/dist/{chunk-YOMPLCP6.js.map → chunk-Y5KTM3V5.js.map} +1 -1
- package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
- package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
- package/dist/{chunk-AAFX64WD.cjs → chunk-ZXAWOLBQ.cjs} +22 -5
- package/dist/chunk-ZXAWOLBQ.cjs.map +1 -0
- package/dist/citations/QuietMarks.d.ts +5 -2
- package/dist/citations/index.cjs +15 -14
- package/dist/citations/index.js +3 -2
- package/dist/collaboration/index.cjs +51 -51
- package/dist/collaboration/index.js +3 -3
- package/dist/connect/docx.cjs +6 -6
- package/dist/connect/docx.js +5 -5
- package/dist/connect/index.cjs +6595 -1600
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +5 -0
- package/dist/connect/index.js +5064 -90
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedAgentCreator.d.ts +37 -0
- package/dist/connection/ConnectedSkillsLibrary.d.ts +26 -0
- package/dist/connection/ConnectedWorkflowHistory.d.ts +45 -0
- package/dist/connection/ConnectionProvider.d.ts +3 -1
- package/dist/connection/calendar/AddCalendarDialogs.d.ts +9 -0
- package/dist/connection/calendar/BookingPagesPanel.d.ts +13 -0
- package/dist/connection/calendar/CalendarAccountsPanel.d.ts +5 -0
- package/dist/connection/calendar/CalendarSettingsDialog.d.ts +12 -0
- package/dist/connection/calendar/ConnectedCalendar.d.ts +13 -0
- package/dist/connection/calendar/ConnectedMailInviteCard.d.ts +12 -0
- package/dist/connection/calendar/ConnectedPublicBooking.d.ts +9 -0
- package/dist/connection/calendar/ConnectedUpcomingEvents.d.ts +12 -0
- package/dist/connection/calendar/CopyField.d.ts +9 -0
- package/dist/connection/calendar/EventEditorDialog.d.ts +29 -0
- package/dist/connection/calendar/EventScheduling.d.ts +8 -0
- package/dist/connection/calendar/InvitationsPanel.d.ts +5 -0
- package/dist/connection/calendar/OpenAccessPanel.d.ts +7 -0
- package/dist/connection/calendar/PublishCalendarDialog.d.ts +8 -0
- package/dist/connection/calendar/RoomsDirectoryPanel.d.ts +8 -0
- package/dist/connection/calendar/ShareCalendarDialog.d.ts +6 -0
- package/dist/connection/calendar/copy.d.ts +2 -0
- package/dist/connection/calendar/index.d.ts +6 -0
- package/dist/connection/calendar/store.d.ts +47 -0
- package/dist/connection/calendar/types.d.ts +36 -0
- package/dist/connection/calendar/useWebinarAttendee.d.ts +3 -0
- package/dist/connection/notification-center/ConnectedNotificationCenter.d.ts +15 -0
- package/dist/connection/notification-center/NotificationCenter.d.ts +37 -0
- package/dist/connection/notification-center/NotificationEvent.d.ts +33 -0
- package/dist/connection/notification-center/index.d.ts +4 -0
- package/dist/connection/notification-center/items.d.ts +44 -0
- package/dist/document-tools/index.cjs +1 -1
- package/dist/document-tools/index.js +1 -1
- package/dist/facts/index.cjs +6 -6
- package/dist/facts/index.js +6 -6
- package/dist/files/index.cjs +6 -6
- package/dist/files/index.js +6 -6
- package/dist/home/index.cjs +20 -20
- package/dist/home/index.js +5 -5
- package/dist/index.cjs +969 -928
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -25
- package/dist/index.js.map +1 -1
- package/dist/retrieval/index.cjs +1 -1
- package/dist/retrieval/index.js +1 -1
- package/dist/settings/index.cjs +58 -72
- package/dist/settings/index.cjs.map +1 -1
- package/dist/settings/index.js +6 -23
- package/dist/settings/index.js.map +1 -1
- package/dist/shell/index.cjs +61 -60
- package/dist/shell/index.js +5 -4
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +11 -11
- package/dist/studio/index.js +9 -9
- package/dist/workflow-canvas/index.cjs +69 -70
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +14 -15
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workspaces/index.cjs +2 -2
- package/dist/workspaces/index.js +2 -2
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +4 -4
- package/dist/chunk-2Q7FDZAY.js.map +0 -1
- package/dist/chunk-AAFX64WD.cjs.map +0 -1
- package/dist/chunk-ATJUVHVB.js.map +0 -1
- package/dist/chunk-CHVCTKF4.cjs.map +0 -1
- package/dist/chunk-CQCC7LE7.js +0 -210
- package/dist/chunk-CQCC7LE7.js.map +0 -1
- package/dist/chunk-JY73DJOS.cjs.map +0 -1
- package/dist/chunk-KDUGTKVI.cjs.map +0 -1
- package/dist/chunk-KMNZ2RVO.js.map +0 -1
- package/dist/chunk-KSHKTOY2.js.map +0 -1
- package/dist/chunk-L2PAPOZ5.js.map +0 -1
- package/dist/chunk-OGBXV326.cjs.map +0 -1
- package/dist/chunk-OQ7RUNOC.js.map +0 -1
- package/dist/chunk-RFIBUWLF.cjs +0 -232
- package/dist/chunk-RFIBUWLF.cjs.map +0 -1
- package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
- package/dist/chunk-W3VYZXNS.js.map +0 -1
- package/dist/chunk-WXYQ66KC.cjs.map +0 -1
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var chunkULEDHANM_cjs = require('./chunk-ULEDHANM.cjs');
|
|
5
|
+
var chunkOGP6MQXQ_cjs = require('./chunk-OGP6MQXQ.cjs');
|
|
6
|
+
var chunkMIDXCYZB_cjs = require('./chunk-MIDXCYZB.cjs');
|
|
7
|
+
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
4
8
|
var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
|
|
5
|
-
var chunkRFIBUWLF_cjs = require('./chunk-RFIBUWLF.cjs');
|
|
6
9
|
var chunkDVUZTGVL_cjs = require('./chunk-DVUZTGVL.cjs');
|
|
7
|
-
var chunkCHVCTKF4_cjs = require('./chunk-CHVCTKF4.cjs');
|
|
8
|
-
var chunkRQ2Y7USX_cjs = require('./chunk-RQ2Y7USX.cjs');
|
|
9
|
-
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
10
|
-
var chunkWS5EX7DN_cjs = require('./chunk-WS5EX7DN.cjs');
|
|
11
10
|
var chunkR26BK7YL_cjs = require('./chunk-R26BK7YL.cjs');
|
|
12
11
|
var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
|
|
13
12
|
var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
|
|
14
|
-
var
|
|
13
|
+
var chunkC4WSHRR6_cjs = require('./chunk-C4WSHRR6.cjs');
|
|
15
14
|
var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
|
|
16
|
-
var
|
|
15
|
+
var chunkOWCEQKAR_cjs = require('./chunk-OWCEQKAR.cjs');
|
|
17
16
|
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
17
|
+
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
18
|
+
var chunkC2CWWEHO_cjs = require('./chunk-C2CWWEHO.cjs');
|
|
19
|
+
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
18
20
|
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
19
21
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
20
|
-
var chunkC4WSHRR6_cjs = require('./chunk-C4WSHRR6.cjs');
|
|
21
|
-
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
22
|
-
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
23
22
|
var jsxRuntime = require('react/jsx-runtime');
|
|
24
23
|
var react = require('react');
|
|
25
24
|
var lucideReact = require('lucide-react');
|
|
@@ -29,7 +28,7 @@ function defaultScopeRenderer(scopeSource) {
|
|
|
29
28
|
if (!scopeSource) return void 0;
|
|
30
29
|
return function renderScope(_field, value, onChange) {
|
|
31
30
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
32
|
-
|
|
31
|
+
chunkOGP6MQXQ_cjs.ScopePicker,
|
|
33
32
|
{
|
|
34
33
|
folders: scopeSource.folders,
|
|
35
34
|
unfiledCount: scopeSource.unfiledCount,
|
|
@@ -48,14 +47,14 @@ function resolveScopeInputs(workflow, inputs, scopeSource) {
|
|
|
48
47
|
for (const field of workflow.inputs) {
|
|
49
48
|
if (field.type !== "scope") continue;
|
|
50
49
|
const raw = inputs[field.name];
|
|
51
|
-
const scope =
|
|
50
|
+
const scope = chunkOWCEQKAR_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
|
|
52
51
|
next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) };
|
|
53
52
|
}
|
|
54
53
|
return next;
|
|
55
54
|
}
|
|
56
55
|
function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
|
|
57
|
-
const steps =
|
|
58
|
-
const [inputs, setInputs] = react.useState(() =>
|
|
56
|
+
const steps = chunkOWCEQKAR_cjs.workflowSteps(workflow);
|
|
57
|
+
const [inputs, setInputs] = react.useState(() => chunkOWCEQKAR_cjs.initialRunInputs(workflow));
|
|
59
58
|
const [states, setStates] = react.useState({});
|
|
60
59
|
const set = (id, state) => setStates((s) => ({ ...s, [id]: state }));
|
|
61
60
|
const timers = react.useRef(/* @__PURE__ */ new Map());
|
|
@@ -77,10 +76,10 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
77
76
|
react.useEffect(() => {
|
|
78
77
|
if (Object.values(states).some((s) => s.status === "running")) return;
|
|
79
78
|
const next = steps.find(
|
|
80
|
-
(s) => (s.kind === "agent" || s.kind === "action") &&
|
|
79
|
+
(s) => (s.kind === "agent" || s.kind === "action") && chunkOWCEQKAR_cjs.stepPhase(steps, states, s.id) === "ready"
|
|
81
80
|
);
|
|
82
81
|
if (!next || next.kind !== "agent" && next.kind !== "action") return;
|
|
83
|
-
const prompt = next.kind === "agent" ?
|
|
82
|
+
const prompt = next.kind === "agent" ? chunkOWCEQKAR_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
|
|
84
83
|
set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
85
84
|
timers.current.set(
|
|
86
85
|
next.id,
|
|
@@ -93,7 +92,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
93
92
|
}, delayMs)
|
|
94
93
|
);
|
|
95
94
|
}, [states, steps, workflow]);
|
|
96
|
-
return
|
|
95
|
+
return chunkULEDHANM_cjs.useWorkflowView({
|
|
97
96
|
steps,
|
|
98
97
|
states,
|
|
99
98
|
inputs,
|
|
@@ -341,606 +340,6 @@ function AgentGallery({
|
|
|
341
340
|
)
|
|
342
341
|
] });
|
|
343
342
|
}
|
|
344
|
-
function CapabilityTile({
|
|
345
|
-
label,
|
|
346
|
-
description,
|
|
347
|
-
icon: Icon,
|
|
348
|
-
selected,
|
|
349
|
-
onToggle,
|
|
350
|
-
testId,
|
|
351
|
-
className
|
|
352
|
-
}) {
|
|
353
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
354
|
-
"button",
|
|
355
|
-
{
|
|
356
|
-
type: "button",
|
|
357
|
-
onClick: onToggle,
|
|
358
|
-
"aria-pressed": selected,
|
|
359
|
-
"data-testid": testId,
|
|
360
|
-
"data-slot": "capability-tile",
|
|
361
|
-
className: ui.cn(
|
|
362
|
-
"flex flex-col items-start gap-1 rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
363
|
-
selected ? "bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30" : "bg-muted hover:bg-accent/60",
|
|
364
|
-
className
|
|
365
|
-
),
|
|
366
|
-
children: [
|
|
367
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 16, className: selected ? "text-accent-foreground" : "text-muted-foreground" }),
|
|
368
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium leading-tight", children: label }),
|
|
369
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs leading-tight text-muted-foreground", children: description })
|
|
370
|
-
]
|
|
371
|
-
}
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
function CapabilityGrid({
|
|
375
|
-
children,
|
|
376
|
-
testId,
|
|
377
|
-
className
|
|
378
|
-
}) {
|
|
379
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
380
|
-
"div",
|
|
381
|
-
{
|
|
382
|
-
className: ui.cn("grid grid-cols-2 gap-2 sm:grid-cols-4", className),
|
|
383
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "agent-capabilities" }),
|
|
384
|
-
children
|
|
385
|
-
}
|
|
386
|
-
);
|
|
387
|
-
}
|
|
388
|
-
var DEFAULT_AGENT_TYPE_SELECTOR_LABELS = {
|
|
389
|
-
agentType: "Agent type"
|
|
390
|
-
};
|
|
391
|
-
function AgentTypeSelector({
|
|
392
|
-
value,
|
|
393
|
-
onChange,
|
|
394
|
-
options,
|
|
395
|
-
label,
|
|
396
|
-
labels,
|
|
397
|
-
testId,
|
|
398
|
-
optionTestId
|
|
399
|
-
}) {
|
|
400
|
-
const l = { ...DEFAULT_AGENT_TYPE_SELECTOR_LABELS, ...labels };
|
|
401
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", "data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "agent-type-selector" }), children: [
|
|
402
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: label ?? l.agentType }),
|
|
403
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: options.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
404
|
-
"button",
|
|
405
|
-
{
|
|
406
|
-
type: "button",
|
|
407
|
-
onClick: () => onChange(opt.value),
|
|
408
|
-
"aria-pressed": value === opt.value,
|
|
409
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(optionTestId?.(opt.value), { testId: `agent-type-${opt.value}` }),
|
|
410
|
-
className: ui.cn(
|
|
411
|
-
"rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
412
|
-
value === opt.value ? "bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30" : "bg-muted hover:bg-accent/60"
|
|
413
|
-
),
|
|
414
|
-
children: [
|
|
415
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium", children: opt.title }),
|
|
416
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: opt.description })
|
|
417
|
-
]
|
|
418
|
-
},
|
|
419
|
-
opt.value
|
|
420
|
-
)) })
|
|
421
|
-
] });
|
|
422
|
-
}
|
|
423
|
-
var DEFAULT_AGENT_AVATAR_FIELD_LABELS = {
|
|
424
|
-
painting: "Painting\u2026",
|
|
425
|
-
generate: "Generate avatar",
|
|
426
|
-
regenerate: "Regenerate"
|
|
427
|
-
};
|
|
428
|
-
function AgentAvatarField({
|
|
429
|
-
picture,
|
|
430
|
-
isBusy,
|
|
431
|
-
canGenerate,
|
|
432
|
-
onGenerate,
|
|
433
|
-
labels,
|
|
434
|
-
testIds
|
|
435
|
-
}) {
|
|
436
|
-
const l = { ...DEFAULT_AGENT_AVATAR_FIELD_LABELS, ...labels };
|
|
437
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2", "data-slot": "agent-avatar-field", children: [
|
|
438
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
439
|
-
"div",
|
|
440
|
-
{
|
|
441
|
-
className: "flex size-24 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted",
|
|
442
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.preview, { testId: "agent-avatar-preview" }),
|
|
443
|
-
children: isBusy ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-1 text-ai-ink", children: [
|
|
444
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-7 animate-spin" }),
|
|
445
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: l.painting })
|
|
446
|
-
] }) : picture ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: picture, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bot, { className: "size-10 text-ai-ink/70" })
|
|
447
|
-
}
|
|
448
|
-
),
|
|
449
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
450
|
-
ui.Button,
|
|
451
|
-
{
|
|
452
|
-
variant: "outline",
|
|
453
|
-
size: "sm",
|
|
454
|
-
className: "h-8 gap-1 px-2 text-xs pointer-coarse:h-11",
|
|
455
|
-
disabled: isBusy || !canGenerate,
|
|
456
|
-
onClick: onGenerate,
|
|
457
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.generate, { testId: "agent-avatar-generate" }),
|
|
458
|
-
children: [
|
|
459
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wand2, { size: 12 }),
|
|
460
|
-
" ",
|
|
461
|
-
picture ? l.regenerate : l.generate
|
|
462
|
-
]
|
|
463
|
-
}
|
|
464
|
-
)
|
|
465
|
-
] });
|
|
466
|
-
}
|
|
467
|
-
var DEFAULT_AGENT_CREATOR_LABELS = {
|
|
468
|
-
titleNew: "New agent",
|
|
469
|
-
titleEdit: (name) => `Edit ${name}`,
|
|
470
|
-
descriptionNew: "Say what this agent is for. Everything else follows from that.",
|
|
471
|
-
descriptionEdit: "Change what this agent is for, or fine-tune it under Advanced.",
|
|
472
|
-
describe: "What should it do?",
|
|
473
|
-
describePlaceholder: "e.g. Reads new files each morning and tells me what changed, with sources.",
|
|
474
|
-
describeHint: "This becomes the agent\u2019s persona and shapes every answer.",
|
|
475
|
-
startFrom: "Or start from",
|
|
476
|
-
summaryHeading: "What it can do (its tools)",
|
|
477
|
-
summaryCan: (list) => `Can ${list}.`,
|
|
478
|
-
summaryCannot: (list) => `Cannot ${list}.`,
|
|
479
|
-
summaryNone: "It can read your files and answer. Nothing else is switched on yet.",
|
|
480
|
-
summaryModel: (model) => `Uses ${model}.`,
|
|
481
|
-
summaryModelAuto: "Uses the default model.",
|
|
482
|
-
summaryWorkspaces: (list) => `Can read ${list}.`,
|
|
483
|
-
summaryNoWorkspaces: "Cannot read any workspace yet. Give it access under Advanced.",
|
|
484
|
-
summaryName: (name) => `Will be called ${name}.`,
|
|
485
|
-
workspaceAccess: "Workspace access",
|
|
486
|
-
workspaceAccessHint: "Each workspace stays separate. The agent can only read the ones you tick here.",
|
|
487
|
-
workspaceAlready: "Already has access",
|
|
488
|
-
revokeWorkspace: (name) => `Remove access to ${name}`,
|
|
489
|
-
noWorkspacesToGrant: "You have no workspaces yet.",
|
|
490
|
-
name: "Name",
|
|
491
|
-
nameHint: "Letters, digits, - and _ only; must start with a letter or digit.",
|
|
492
|
-
nameInvalid: "Letters, digits, - and _ only; must start with a letter or digit.",
|
|
493
|
-
advanced: "Advanced",
|
|
494
|
-
capabilities: "Tools",
|
|
495
|
-
toolsHint: "Tools are switches on this agent: what it may do on its own, such as search the web or run code. Change them any time.",
|
|
496
|
-
summaryChange: "Change tools",
|
|
497
|
-
model: "Model",
|
|
498
|
-
modelAuto: "Automatic",
|
|
499
|
-
cancel: "Cancel",
|
|
500
|
-
create: "Create agent",
|
|
501
|
-
save: "Save changes",
|
|
502
|
-
saving: "Saving\u2026"
|
|
503
|
-
};
|
|
504
|
-
var NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;
|
|
505
|
-
var FILLER = /* @__PURE__ */ new Set([
|
|
506
|
-
"a",
|
|
507
|
-
"an",
|
|
508
|
-
"the",
|
|
509
|
-
"who",
|
|
510
|
-
"that",
|
|
511
|
-
"which",
|
|
512
|
-
"to",
|
|
513
|
-
"for",
|
|
514
|
-
"and",
|
|
515
|
-
"of",
|
|
516
|
-
"i",
|
|
517
|
-
"my"
|
|
518
|
-
]);
|
|
519
|
-
function deriveAgentName(description) {
|
|
520
|
-
const words = description.toLowerCase().replace(/[^a-z0-9\s-]/g, " ").split(/\s+/).filter((w) => w && !FILLER.has(w)).slice(0, 3);
|
|
521
|
-
return words.join("-").slice(0, 64);
|
|
522
|
-
}
|
|
523
|
-
var isValidAgentName = (name) => NAME_RE.test(name) && name.length <= 64;
|
|
524
|
-
var joinList = (items) => items.length <= 2 ? items.join(" and ") : `${items.slice(0, -1).join(", ")} and ${items[items.length - 1]}`;
|
|
525
|
-
function summarizeCapabilities(capabilities, enabled, modelName, labels = DEFAULT_AGENT_CREATOR_LABELS) {
|
|
526
|
-
const on = capabilities.filter((c) => enabled[c.key]).map((c) => c.label.toLowerCase());
|
|
527
|
-
const off = capabilities.filter((c) => !enabled[c.key]).map((c) => c.label.toLowerCase());
|
|
528
|
-
const lines = [];
|
|
529
|
-
if (on.length === 0) lines.push(labels.summaryNone);
|
|
530
|
-
else {
|
|
531
|
-
lines.push(labels.summaryCan(joinList(on)));
|
|
532
|
-
if (off.length > 0) lines.push(labels.summaryCannot(joinList(off)));
|
|
533
|
-
}
|
|
534
|
-
lines.push(modelName ? labels.summaryModel(modelName) : labels.summaryModelAuto);
|
|
535
|
-
return lines;
|
|
536
|
-
}
|
|
537
|
-
function summarizeAgent(capabilities, values, workspaces, labels = DEFAULT_AGENT_CREATOR_LABELS) {
|
|
538
|
-
const lines = summarizeCapabilities(capabilities, values.capabilities, values.modelName, labels);
|
|
539
|
-
const names = workspaces.filter((w) => values.workspaceIds.includes(w.id)).map((w) => w.name);
|
|
540
|
-
lines.push(
|
|
541
|
-
names.length > 0 ? labels.summaryWorkspaces(joinList(names)) : labels.summaryNoWorkspaces
|
|
542
|
-
);
|
|
543
|
-
if (values.name) lines.push(labels.summaryName(values.name));
|
|
544
|
-
return lines;
|
|
545
|
-
}
|
|
546
|
-
var BLANK = {
|
|
547
|
-
name: "",
|
|
548
|
-
persona: "",
|
|
549
|
-
capabilities: {},
|
|
550
|
-
modelName: "",
|
|
551
|
-
type: "builtin",
|
|
552
|
-
workspaceIds: []
|
|
553
|
-
};
|
|
554
|
-
function AgentCreator({
|
|
555
|
-
open,
|
|
556
|
-
onOpenChange,
|
|
557
|
-
isEdit = false,
|
|
558
|
-
agentName,
|
|
559
|
-
capabilities,
|
|
560
|
-
templates = [],
|
|
561
|
-
models = [],
|
|
562
|
-
workspaces = [],
|
|
563
|
-
grantedWorkspaceIds = [],
|
|
564
|
-
onRevokeWorkspace,
|
|
565
|
-
revokingWorkspaceId,
|
|
566
|
-
avatar,
|
|
567
|
-
types,
|
|
568
|
-
values: valuesProp,
|
|
569
|
-
initialValues,
|
|
570
|
-
onValuesChange,
|
|
571
|
-
advanced,
|
|
572
|
-
isSaving,
|
|
573
|
-
onSubmit,
|
|
574
|
-
labels,
|
|
575
|
-
testId
|
|
576
|
-
}) {
|
|
577
|
-
const l = { ...DEFAULT_AGENT_CREATOR_LABELS, ...labels };
|
|
578
|
-
const seed = react.useMemo(
|
|
579
|
-
() => ({ ...BLANK, ...initialValues }),
|
|
580
|
-
// Seeded once per open.
|
|
581
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
582
|
-
[open]
|
|
583
|
-
);
|
|
584
|
-
const [values, setValues] = chunkCHVCTKF4_cjs.useControllableState(
|
|
585
|
-
valuesProp,
|
|
586
|
-
seed,
|
|
587
|
-
onValuesChange
|
|
588
|
-
);
|
|
589
|
-
const [advancedOpen, setAdvancedOpen] = react.useState(false);
|
|
590
|
-
const [nameTouched, setNameTouched] = react.useState(false);
|
|
591
|
-
react.useEffect(() => {
|
|
592
|
-
if (open) {
|
|
593
|
-
if (valuesProp === void 0) setValues(seed);
|
|
594
|
-
setAdvancedOpen(false);
|
|
595
|
-
setNameTouched(Boolean(seed.name));
|
|
596
|
-
}
|
|
597
|
-
}, [open]);
|
|
598
|
-
const id = chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "agent-creator" });
|
|
599
|
-
const name = values.name;
|
|
600
|
-
const nameValid = isValidAgentName(name);
|
|
601
|
-
const canSubmit = (isEdit || nameValid) && !isSaving;
|
|
602
|
-
const patch = (next) => setValues({ ...values, ...next });
|
|
603
|
-
const setPersona = (persona) => patch({ persona, ...!isEdit && !nameTouched ? { name: deriveAgentName(persona) } : {} });
|
|
604
|
-
const applyTemplate = (t) => patch({
|
|
605
|
-
persona: t.persona,
|
|
606
|
-
capabilities: Object.fromEntries(
|
|
607
|
-
capabilities.map((c) => [c.key, t.capabilities.includes(c.key)])
|
|
608
|
-
),
|
|
609
|
-
...!isEdit && !nameTouched ? { name: deriveAgentName(t.persona) } : {}
|
|
610
|
-
});
|
|
611
|
-
const summary = summarizeAgent(capabilities, values, workspaces, l);
|
|
612
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
613
|
-
ui.DialogContent,
|
|
614
|
-
{
|
|
615
|
-
presentation: "sheet",
|
|
616
|
-
className: "max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl",
|
|
617
|
-
"data-testid": id,
|
|
618
|
-
children: [
|
|
619
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
620
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: isEdit ? l.titleEdit(agentName ?? name) : l.titleNew }),
|
|
621
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: isEdit ? l.descriptionEdit : l.descriptionNew })
|
|
622
|
-
] }),
|
|
623
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
624
|
-
"form",
|
|
625
|
-
{
|
|
626
|
-
className: "flex flex-col gap-5",
|
|
627
|
-
onSubmit: (event) => {
|
|
628
|
-
event.preventDefault();
|
|
629
|
-
if (canSubmit) onSubmit(values);
|
|
630
|
-
},
|
|
631
|
-
children: [
|
|
632
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
633
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "agent-creator-describe", children: l.describe }),
|
|
634
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
635
|
-
ui.Textarea,
|
|
636
|
-
{
|
|
637
|
-
id: "agent-creator-describe",
|
|
638
|
-
"data-testid": `${id}-describe`,
|
|
639
|
-
value: values.persona,
|
|
640
|
-
placeholder: l.describePlaceholder,
|
|
641
|
-
rows: 4,
|
|
642
|
-
autoFocus: true,
|
|
643
|
-
onChange: (e) => setPersona(e.target.value)
|
|
644
|
-
}
|
|
645
|
-
),
|
|
646
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.describeHint })
|
|
647
|
-
] }),
|
|
648
|
-
!isEdit && templates.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", "data-testid": `${id}-templates`, children: [
|
|
649
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: l.startFrom }),
|
|
650
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: templates.map((t) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
651
|
-
"button",
|
|
652
|
-
{
|
|
653
|
-
type: "button",
|
|
654
|
-
title: t.description,
|
|
655
|
-
onClick: () => applyTemplate(t),
|
|
656
|
-
"data-testid": `${id}-template-${t.id}`,
|
|
657
|
-
className: ui.cn(
|
|
658
|
-
"rounded-full border border-border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 [&:hover]:bg-accent"
|
|
659
|
-
),
|
|
660
|
-
children: t.title
|
|
661
|
-
},
|
|
662
|
-
t.id
|
|
663
|
-
)) })
|
|
664
|
-
] }),
|
|
665
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
666
|
-
"div",
|
|
667
|
-
{
|
|
668
|
-
className: "rounded-lg bg-muted p-3 text-sm",
|
|
669
|
-
"data-testid": `${id}-summary`,
|
|
670
|
-
"aria-live": "polite",
|
|
671
|
-
children: [
|
|
672
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground", children: [
|
|
673
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "size-4 text-ai-ink", "aria-hidden": "true" }),
|
|
674
|
-
l.summaryHeading
|
|
675
|
-
] }),
|
|
676
|
-
summary.map((line) => /* @__PURE__ */ jsxRuntime.jsx("p", { children: line }, line)),
|
|
677
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
678
|
-
"button",
|
|
679
|
-
{
|
|
680
|
-
type: "button",
|
|
681
|
-
onClick: () => setAdvancedOpen(true),
|
|
682
|
-
"data-testid": `${id}-summary-change`,
|
|
683
|
-
className: "mt-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
|
|
684
|
-
children: l.summaryChange
|
|
685
|
-
}
|
|
686
|
-
)
|
|
687
|
-
]
|
|
688
|
-
}
|
|
689
|
-
),
|
|
690
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-end gap-4", children: [
|
|
691
|
-
typeof avatar === "function" ? avatar(values) : avatar,
|
|
692
|
-
!isEdit && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
|
|
693
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "agent-creator-name", children: l.name }),
|
|
694
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
695
|
-
ui.Input,
|
|
696
|
-
{
|
|
697
|
-
id: "agent-creator-name",
|
|
698
|
-
"data-testid": `${id}-name`,
|
|
699
|
-
value: name,
|
|
700
|
-
placeholder: "research-assistant",
|
|
701
|
-
"aria-invalid": name !== "" && !nameValid ? true : void 0,
|
|
702
|
-
onChange: (e) => {
|
|
703
|
-
setNameTouched(true);
|
|
704
|
-
patch({ name: e.target.value });
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
),
|
|
708
|
-
name !== "" && !nameValid && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive", children: l.nameInvalid })
|
|
709
|
-
] })
|
|
710
|
-
] }),
|
|
711
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
712
|
-
chunkWS5EX7DN_cjs.FoldSection,
|
|
713
|
-
{
|
|
714
|
-
label: l.advanced,
|
|
715
|
-
open: advancedOpen,
|
|
716
|
-
onOpenChange: setAdvancedOpen,
|
|
717
|
-
testId: `${id}-advanced-toggle`,
|
|
718
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
|
|
719
|
-
!isEdit && types && types.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
720
|
-
AgentTypeSelector,
|
|
721
|
-
{
|
|
722
|
-
value: values.type,
|
|
723
|
-
onChange: (type) => patch({ type }),
|
|
724
|
-
options: types,
|
|
725
|
-
testId: `${id}-type`,
|
|
726
|
-
optionTestId: (value) => `${id}-type-${value}`
|
|
727
|
-
}
|
|
728
|
-
),
|
|
729
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
730
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: l.capabilities }),
|
|
731
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.toolsHint }),
|
|
732
|
-
/* @__PURE__ */ jsxRuntime.jsx(CapabilityGrid, { testId: `${id}-capabilities`, children: capabilities.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
733
|
-
CapabilityTile,
|
|
734
|
-
{
|
|
735
|
-
label: c.label,
|
|
736
|
-
description: c.description,
|
|
737
|
-
icon: c.icon,
|
|
738
|
-
selected: Boolean(values.capabilities[c.key]),
|
|
739
|
-
onToggle: () => patch({
|
|
740
|
-
capabilities: {
|
|
741
|
-
...values.capabilities,
|
|
742
|
-
[c.key]: !values.capabilities[c.key]
|
|
743
|
-
}
|
|
744
|
-
}),
|
|
745
|
-
testId: `${id}-cap-${c.key}`
|
|
746
|
-
},
|
|
747
|
-
c.key
|
|
748
|
-
)) })
|
|
749
|
-
] }),
|
|
750
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", "data-testid": `${id}-workspaces`, children: [
|
|
751
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: l.workspaceAccess }),
|
|
752
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.workspaceAccessHint }),
|
|
753
|
-
workspaces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: l.noWorkspacesToGrant }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: workspaces.map((w) => {
|
|
754
|
-
const already = grantedWorkspaceIds.includes(w.id);
|
|
755
|
-
const on = already || values.workspaceIds.includes(w.id);
|
|
756
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
757
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
758
|
-
"button",
|
|
759
|
-
{
|
|
760
|
-
type: "button",
|
|
761
|
-
role: "checkbox",
|
|
762
|
-
"aria-checked": on,
|
|
763
|
-
disabled: already,
|
|
764
|
-
title: already ? l.workspaceAlready : void 0,
|
|
765
|
-
"data-testid": `${id}-workspace-${w.id}`,
|
|
766
|
-
onClick: () => patch({
|
|
767
|
-
workspaceIds: on ? values.workspaceIds.filter((x) => x !== w.id) : [...values.workspaceIds, w.id]
|
|
768
|
-
}),
|
|
769
|
-
className: ui.cn(
|
|
770
|
-
"rounded-md border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60 pointer-coarse:min-h-11",
|
|
771
|
-
on ? "border-primary bg-primary/10 text-primary" : "border-border [&:hover:not(:disabled)]:bg-accent"
|
|
772
|
-
),
|
|
773
|
-
children: w.name
|
|
774
|
-
}
|
|
775
|
-
),
|
|
776
|
-
already && onRevokeWorkspace && /* @__PURE__ */ jsxRuntime.jsx(
|
|
777
|
-
"button",
|
|
778
|
-
{
|
|
779
|
-
type: "button",
|
|
780
|
-
"aria-label": l.revokeWorkspace(w.name),
|
|
781
|
-
title: l.revokeWorkspace(w.name),
|
|
782
|
-
disabled: revokingWorkspaceId === w.id,
|
|
783
|
-
"data-testid": `${id}-workspace-${w.id}-revoke`,
|
|
784
|
-
onClick: () => onRevokeWorkspace(w.id),
|
|
785
|
-
className: "flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 pointer-coarse:size-11",
|
|
786
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "size-4", "aria-hidden": true })
|
|
787
|
-
}
|
|
788
|
-
)
|
|
789
|
-
] }, w.id);
|
|
790
|
-
}) })
|
|
791
|
-
] }),
|
|
792
|
-
models.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
793
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { children: l.model }),
|
|
794
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
795
|
-
ui.Select,
|
|
796
|
-
{
|
|
797
|
-
value: values.modelName || "__auto__",
|
|
798
|
-
onValueChange: (v) => patch({ modelName: v === "__auto__" ? "" : v }),
|
|
799
|
-
children: [
|
|
800
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { "data-testid": `${id}-model`, className: "pointer-coarse:min-h-11", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, {}) }),
|
|
801
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.SelectContent, { children: [
|
|
802
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "__auto__", children: l.modelAuto }),
|
|
803
|
-
models.map((m) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: m, children: m }, m))
|
|
804
|
-
] })
|
|
805
|
-
]
|
|
806
|
-
}
|
|
807
|
-
)
|
|
808
|
-
] }),
|
|
809
|
-
typeof advanced === "function" ? advanced(values) : advanced
|
|
810
|
-
] })
|
|
811
|
-
}
|
|
812
|
-
),
|
|
813
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border pt-3", children: [
|
|
814
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
815
|
-
ui.Button,
|
|
816
|
-
{
|
|
817
|
-
type: "button",
|
|
818
|
-
variant: "ghost",
|
|
819
|
-
onClick: () => onOpenChange(false),
|
|
820
|
-
"data-testid": `${id}-cancel`,
|
|
821
|
-
className: "pointer-coarse:min-h-11",
|
|
822
|
-
children: l.cancel
|
|
823
|
-
}
|
|
824
|
-
),
|
|
825
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
826
|
-
ui.Button,
|
|
827
|
-
{
|
|
828
|
-
type: "submit",
|
|
829
|
-
disabled: !canSubmit,
|
|
830
|
-
"data-testid": `${id}-submit`,
|
|
831
|
-
className: "gap-1.5 pointer-coarse:min-h-11",
|
|
832
|
-
children: [
|
|
833
|
-
isSaving ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "size-4" }),
|
|
834
|
-
isSaving ? l.saving : isEdit ? l.save : l.create
|
|
835
|
-
]
|
|
836
|
-
}
|
|
837
|
-
)
|
|
838
|
-
] })
|
|
839
|
-
]
|
|
840
|
-
}
|
|
841
|
-
)
|
|
842
|
-
]
|
|
843
|
-
}
|
|
844
|
-
) });
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
// src/agents/definitions/persona.ts
|
|
848
|
-
function composePersona(name, description) {
|
|
849
|
-
const body = description.trim();
|
|
850
|
-
const preamble = `You are ${name}, an AI agent.`;
|
|
851
|
-
return body ? `${preamble} ${body}` : preamble;
|
|
852
|
-
}
|
|
853
|
-
function stripPersonaPreamble(persona) {
|
|
854
|
-
return persona.replace(/^You are .+?, an AI agent\.\s*/, "").trim();
|
|
855
|
-
}
|
|
856
|
-
function agentCreatorToConfigSection(values, capabilityKeys) {
|
|
857
|
-
return {
|
|
858
|
-
PERSONA: composePersona(values.name, values.persona),
|
|
859
|
-
...values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {},
|
|
860
|
-
...Object.fromEntries(capabilityKeys.map((k) => [k, !!values.capabilities[k]]))
|
|
861
|
-
};
|
|
862
|
-
}
|
|
863
|
-
function agentConfigSectionToValues(section, capabilityKeys) {
|
|
864
|
-
const s = section ?? {};
|
|
865
|
-
return {
|
|
866
|
-
persona: stripPersonaPreamble(String(s.PERSONA ?? "")),
|
|
867
|
-
modelName: String(s.AGENT_MODEL_NAME ?? ""),
|
|
868
|
-
capabilities: Object.fromEntries(capabilityKeys.map((k) => [k, Boolean(s[k])]))
|
|
869
|
-
};
|
|
870
|
-
}
|
|
871
|
-
function SkillTypeBadge({ type, className }) {
|
|
872
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
873
|
-
"span",
|
|
874
|
-
{
|
|
875
|
-
className: ui.cn(
|
|
876
|
-
"shrink-0 rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground",
|
|
877
|
-
className
|
|
878
|
-
),
|
|
879
|
-
"data-slot": "skill-type-badge",
|
|
880
|
-
children: type
|
|
881
|
-
}
|
|
882
|
-
);
|
|
883
|
-
}
|
|
884
|
-
var DEFAULT_SKILL_GLOBAL_BADGE_LABELS = {
|
|
885
|
-
global: "Global",
|
|
886
|
-
globalTitle: "Shared with everyone in the marketplace"
|
|
887
|
-
};
|
|
888
|
-
function SkillGlobalBadge({
|
|
889
|
-
className,
|
|
890
|
-
labels
|
|
891
|
-
}) {
|
|
892
|
-
const l = { ...DEFAULT_SKILL_GLOBAL_BADGE_LABELS, ...labels };
|
|
893
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
894
|
-
"span",
|
|
895
|
-
{
|
|
896
|
-
className: ui.cn(
|
|
897
|
-
"inline-flex shrink-0 items-center gap-1 rounded bg-accent px-1.5 py-0.5 text-xs uppercase tracking-wide text-accent-foreground",
|
|
898
|
-
className
|
|
899
|
-
),
|
|
900
|
-
title: l.globalTitle,
|
|
901
|
-
"data-slot": "skill-global-badge",
|
|
902
|
-
children: [
|
|
903
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "size-3" }),
|
|
904
|
-
l.global
|
|
905
|
-
]
|
|
906
|
-
}
|
|
907
|
-
);
|
|
908
|
-
}
|
|
909
|
-
function SkillActionButton({
|
|
910
|
-
label,
|
|
911
|
-
tooltip,
|
|
912
|
-
onClick,
|
|
913
|
-
children,
|
|
914
|
-
testId
|
|
915
|
-
}) {
|
|
916
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
|
|
917
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, onFocusCapture: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
918
|
-
ui.Button,
|
|
919
|
-
{
|
|
920
|
-
variant: "ghost",
|
|
921
|
-
size: "icon",
|
|
922
|
-
className: "size-7 shrink-0 pointer-coarse:size-11",
|
|
923
|
-
onClick: (e) => {
|
|
924
|
-
e.stopPropagation();
|
|
925
|
-
onClick(e);
|
|
926
|
-
},
|
|
927
|
-
"aria-label": label,
|
|
928
|
-
"data-testid": testId,
|
|
929
|
-
children
|
|
930
|
-
}
|
|
931
|
-
) }),
|
|
932
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: tooltip ?? label }) })
|
|
933
|
-
] });
|
|
934
|
-
}
|
|
935
|
-
function activateOnKey(handler) {
|
|
936
|
-
return (e) => {
|
|
937
|
-
if (e.target !== e.currentTarget) return;
|
|
938
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
939
|
-
e.preventDefault();
|
|
940
|
-
handler();
|
|
941
|
-
}
|
|
942
|
-
};
|
|
943
|
-
}
|
|
944
343
|
var DEFAULT_SKILL_CARD_LABELS = {
|
|
945
344
|
global: "Global",
|
|
946
345
|
globalTitle: "Shared with everyone in the marketplace",
|
|
@@ -983,7 +382,7 @@ function SkillCard({
|
|
|
983
382
|
className
|
|
984
383
|
),
|
|
985
384
|
onClick,
|
|
986
|
-
onKeyDown: activateOnKey(onClick),
|
|
385
|
+
onKeyDown: chunkULEDHANM_cjs.activateOnKey(onClick),
|
|
987
386
|
"data-skill-name": name,
|
|
988
387
|
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId ?? testIds?.root, { testId: "skill-card" }),
|
|
989
388
|
"data-slot": "skill-card",
|
|
@@ -1007,12 +406,12 @@ function SkillCard({
|
|
|
1007
406
|
"/",
|
|
1008
407
|
name
|
|
1009
408
|
] }),
|
|
1010
|
-
type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(SkillTypeBadge, { type }),
|
|
1011
|
-
isGlobal && /* @__PURE__ */ jsxRuntime.jsx(SkillGlobalBadge, { labels: l }),
|
|
409
|
+
type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillTypeBadge, { type }),
|
|
410
|
+
isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillGlobalBadge, { labels: l }),
|
|
1012
411
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate", children: description }),
|
|
1013
412
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1", "data-slot": "skill-card-actions", children: [
|
|
1014
413
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1015
|
-
SkillActionButton,
|
|
414
|
+
chunkULEDHANM_cjs.SkillActionButton,
|
|
1016
415
|
{
|
|
1017
416
|
label: l.preview,
|
|
1018
417
|
onClick: onPreview,
|
|
@@ -1021,7 +420,7 @@ function SkillCard({
|
|
|
1021
420
|
}
|
|
1022
421
|
),
|
|
1023
422
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1024
|
-
SkillActionButton,
|
|
423
|
+
chunkULEDHANM_cjs.SkillActionButton,
|
|
1025
424
|
{
|
|
1026
425
|
label: l.edit,
|
|
1027
426
|
onClick: onEdit,
|
|
@@ -1030,7 +429,7 @@ function SkillCard({
|
|
|
1030
429
|
}
|
|
1031
430
|
),
|
|
1032
431
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1033
|
-
SkillActionButton,
|
|
432
|
+
chunkULEDHANM_cjs.SkillActionButton,
|
|
1034
433
|
{
|
|
1035
434
|
label: l.export,
|
|
1036
435
|
onClick: onExport,
|
|
@@ -1039,7 +438,7 @@ function SkillCard({
|
|
|
1039
438
|
}
|
|
1040
439
|
),
|
|
1041
440
|
isOwner && onToggleVisibility && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1042
|
-
SkillActionButton,
|
|
441
|
+
chunkULEDHANM_cjs.SkillActionButton,
|
|
1043
442
|
{
|
|
1044
443
|
label: isGlobal ? l.makePrivate : l.publish,
|
|
1045
444
|
tooltip: isGlobal ? l.makePrivateTooltip : l.publish,
|
|
@@ -1094,7 +493,7 @@ function SkillRow({
|
|
|
1094
493
|
className
|
|
1095
494
|
),
|
|
1096
495
|
onClick: onInvoke,
|
|
1097
|
-
onKeyDown: activateOnKey(onInvoke),
|
|
496
|
+
onKeyDown: chunkULEDHANM_cjs.activateOnKey(onInvoke),
|
|
1098
497
|
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testId, { testId: `skills-panel-row-${name}` }),
|
|
1099
498
|
"data-slot": "skill-row",
|
|
1100
499
|
title: l.insertTitle(name),
|
|
@@ -1112,356 +511,28 @@ function SkillRow({
|
|
|
1112
511
|
"/",
|
|
1113
512
|
name
|
|
1114
513
|
] }),
|
|
1115
|
-
type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(SkillTypeBadge, { type }),
|
|
1116
|
-
isGlobal && /* @__PURE__ */ jsxRuntime.jsx(SkillGlobalBadge, { labels: l })
|
|
514
|
+
type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillTypeBadge, { type }),
|
|
515
|
+
isGlobal && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillGlobalBadge, { labels: l })
|
|
1117
516
|
] }),
|
|
1118
517
|
description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-muted-foreground", children: description })
|
|
1119
518
|
] }),
|
|
1120
519
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [
|
|
1121
|
-
/* @__PURE__ */ jsxRuntime.jsx(SkillActionButton, { label: l.preview, onClick: () => onPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-4" }) }),
|
|
1122
|
-
onEdit && /* @__PURE__ */ jsxRuntime.jsx(SkillActionButton, { label: l.edit, onClick: () => onEdit(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-4" }) }),
|
|
520
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillActionButton, { label: l.preview, onClick: () => onPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "size-4" }) }),
|
|
521
|
+
onEdit && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillActionButton, { label: l.edit, onClick: () => onEdit(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { className: "size-4" }) }),
|
|
1123
522
|
onTogglePublish && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1124
|
-
SkillActionButton,
|
|
523
|
+
chunkULEDHANM_cjs.SkillActionButton,
|
|
1125
524
|
{
|
|
1126
525
|
label: isGlobal ? l.makePrivate : l.publish,
|
|
1127
526
|
onClick: () => onTogglePublish(),
|
|
1128
527
|
children: isGlobal ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Lock, { className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Globe, { className: "size-4 text-primary" })
|
|
1129
528
|
}
|
|
1130
529
|
),
|
|
1131
|
-
onDelete && /* @__PURE__ */ jsxRuntime.jsx(SkillActionButton, { label: l.delete, onClick: () => onDelete(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-4 text-destructive" }) })
|
|
1132
|
-
] })
|
|
1133
|
-
]
|
|
1134
|
-
}
|
|
1135
|
-
);
|
|
1136
|
-
}
|
|
1137
|
-
var DEFAULT_SKILL_GENERATE_FORM_LABELS = {
|
|
1138
|
-
title: "Generate with AI",
|
|
1139
|
-
hint: "Describe what the skill should do. The assistant drafts it in chat, then you can edit it here.",
|
|
1140
|
-
placeholder: "e.g. Summarize a contract into key obligations, dates, and parties",
|
|
1141
|
-
generate: "Generate with AI",
|
|
1142
|
-
writeManually: "\u2026or write it manually"
|
|
1143
|
-
};
|
|
1144
|
-
function SkillGenerateForm({
|
|
1145
|
-
onGenerate,
|
|
1146
|
-
onManual,
|
|
1147
|
-
icon,
|
|
1148
|
-
labels,
|
|
1149
|
-
testIds
|
|
1150
|
-
}) {
|
|
1151
|
-
const l = { ...DEFAULT_SKILL_GENERATE_FORM_LABELS, ...labels };
|
|
1152
|
-
const [desc, setDesc] = react.useState("");
|
|
1153
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col gap-4 overflow-y-auto p-4", "data-slot": "skill-generate-form", children: [
|
|
1154
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg bg-muted p-4", children: [
|
|
1155
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center gap-2", children: [
|
|
1156
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wand2, { className: "size-4 text-primary" }),
|
|
1157
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: l.title })
|
|
1158
|
-
] }),
|
|
1159
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-muted-foreground", children: l.hint }),
|
|
1160
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1161
|
-
ui.Textarea,
|
|
1162
|
-
{
|
|
1163
|
-
value: desc,
|
|
1164
|
-
onChange: (e) => setDesc(e.target.value),
|
|
1165
|
-
rows: 4,
|
|
1166
|
-
placeholder: l.placeholder,
|
|
1167
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.description, { testId: "skills-panel-ai-desc" })
|
|
1168
|
-
}
|
|
1169
|
-
),
|
|
1170
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1171
|
-
ui.Button,
|
|
1172
|
-
{
|
|
1173
|
-
size: "sm",
|
|
1174
|
-
disabled: !desc.trim(),
|
|
1175
|
-
onClick: () => onGenerate(desc.trim()),
|
|
1176
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.generate, { testId: "skills-panel-ai-generate" }),
|
|
1177
|
-
children: [
|
|
1178
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1 [&>svg]:size-4", children: icon }),
|
|
1179
|
-
l.generate
|
|
1180
|
-
]
|
|
1181
|
-
}
|
|
1182
|
-
) })
|
|
1183
|
-
] }),
|
|
1184
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1185
|
-
"button",
|
|
1186
|
-
{
|
|
1187
|
-
type: "button",
|
|
1188
|
-
className: "self-start text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline pointer-coarse:min-h-11",
|
|
1189
|
-
onClick: onManual,
|
|
1190
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.writeManually, { testId: "skills-panel-write-manually" }),
|
|
1191
|
-
children: l.writeManually
|
|
1192
|
-
}
|
|
1193
|
-
)
|
|
1194
|
-
] });
|
|
1195
|
-
}
|
|
1196
|
-
var DEFAULT_SKILL_EDIT_FORM_LABELS = {
|
|
1197
|
-
name: "Name",
|
|
1198
|
-
namePlaceholder: "contract-summary",
|
|
1199
|
-
invokedAs: (name) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1200
|
-
"Invoked as ",
|
|
1201
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono", children: [
|
|
1202
|
-
"/",
|
|
1203
|
-
name || "skill-name"
|
|
1204
|
-
] })
|
|
1205
|
-
] }),
|
|
1206
|
-
description: "Description",
|
|
1207
|
-
descriptionPlaceholder: "What it does and when to use it",
|
|
1208
|
-
instructions: "Instructions",
|
|
1209
|
-
cancel: "Cancel",
|
|
1210
|
-
saving: "Saving\u2026",
|
|
1211
|
-
saveChanges: "Save changes",
|
|
1212
|
-
create: "Create skill"
|
|
1213
|
-
};
|
|
1214
|
-
var FIELD_LABEL = "text-xs font-semibold uppercase tracking-wide text-muted-foreground";
|
|
1215
|
-
function SkillEditForm({
|
|
1216
|
-
name,
|
|
1217
|
-
onNameChange,
|
|
1218
|
-
isNameLocked,
|
|
1219
|
-
nameError,
|
|
1220
|
-
description,
|
|
1221
|
-
onDescriptionChange,
|
|
1222
|
-
editor,
|
|
1223
|
-
isSaving,
|
|
1224
|
-
isEditing,
|
|
1225
|
-
onSave,
|
|
1226
|
-
onCancel,
|
|
1227
|
-
labels,
|
|
1228
|
-
testIds
|
|
1229
|
-
}) {
|
|
1230
|
-
const l = { ...DEFAULT_SKILL_EDIT_FORM_LABELS, ...labels };
|
|
1231
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", "data-slot": "skill-edit-form", children: [
|
|
1232
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4", children: [
|
|
1233
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1234
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "sp-name", className: FIELD_LABEL, children: l.name }),
|
|
1235
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1236
|
-
ui.Input,
|
|
1237
|
-
{
|
|
1238
|
-
id: "sp-name",
|
|
1239
|
-
value: name,
|
|
1240
|
-
disabled: isNameLocked,
|
|
1241
|
-
placeholder: l.namePlaceholder,
|
|
1242
|
-
onChange: (e) => onNameChange(e.target.value),
|
|
1243
|
-
className: "mt-1",
|
|
1244
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.name, { testId: "skills-panel-edit-name" })
|
|
1245
|
-
}
|
|
1246
|
-
),
|
|
1247
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: l.invokedAs(name) }),
|
|
1248
|
-
nameError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-destructive", children: nameError })
|
|
1249
|
-
] }),
|
|
1250
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1251
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "sp-desc", className: FIELD_LABEL, children: l.description }),
|
|
1252
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1253
|
-
ui.Input,
|
|
1254
|
-
{
|
|
1255
|
-
id: "sp-desc",
|
|
1256
|
-
value: description,
|
|
1257
|
-
placeholder: l.descriptionPlaceholder,
|
|
1258
|
-
onChange: (e) => onDescriptionChange(e.target.value),
|
|
1259
|
-
className: "mt-1",
|
|
1260
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.description, { testId: "skills-panel-edit-desc" })
|
|
1261
|
-
}
|
|
1262
|
-
)
|
|
1263
|
-
] }),
|
|
1264
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [
|
|
1265
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Label, { className: `${FIELD_LABEL} mb-1`, children: l.instructions }),
|
|
1266
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-[240px] flex-1 overflow-hidden rounded-md border border-border", children: editor })
|
|
1267
|
-
] })
|
|
1268
|
-
] }),
|
|
1269
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-4 py-3", children: [
|
|
1270
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", size: "sm", onClick: onCancel, children: l.cancel }),
|
|
1271
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1272
|
-
ui.Button,
|
|
1273
|
-
{
|
|
1274
|
-
size: "sm",
|
|
1275
|
-
onClick: onSave,
|
|
1276
|
-
disabled: isSaving,
|
|
1277
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.save, { testId: "skills-panel-edit-save" }),
|
|
1278
|
-
children: isSaving ? l.saving : isEditing ? l.saveChanges : l.create
|
|
1279
|
-
}
|
|
1280
|
-
)
|
|
1281
|
-
] })
|
|
1282
|
-
] });
|
|
1283
|
-
}
|
|
1284
|
-
function SkillFilterChips({
|
|
1285
|
-
options,
|
|
1286
|
-
value,
|
|
1287
|
-
onChange,
|
|
1288
|
-
label,
|
|
1289
|
-
testIdPrefix = "skills-filter",
|
|
1290
|
-
className
|
|
1291
|
-
}) {
|
|
1292
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1293
|
-
"div",
|
|
1294
|
-
{
|
|
1295
|
-
role: "radiogroup",
|
|
1296
|
-
"aria-label": label,
|
|
1297
|
-
className: ui.cn("flex flex-wrap gap-2", className),
|
|
1298
|
-
"data-slot": "skill-filter-chips",
|
|
1299
|
-
children: options.map((option) => {
|
|
1300
|
-
const selected = option.id === value;
|
|
1301
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1302
|
-
"button",
|
|
1303
|
-
{
|
|
1304
|
-
type: "button",
|
|
1305
|
-
role: "radio",
|
|
1306
|
-
"aria-checked": selected,
|
|
1307
|
-
onClick: () => onChange(option.id),
|
|
1308
|
-
"data-testid": `${testIdPrefix}-${option.id}`,
|
|
1309
|
-
className: ui.cn(
|
|
1310
|
-
"inline-flex min-h-8 items-center gap-1.5 rounded-full border px-3 text-sm transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1311
|
-
selected ? "border-primary bg-primary/10 text-foreground" : "border-border bg-background text-muted-foreground [&:hover]:bg-muted"
|
|
1312
|
-
),
|
|
1313
|
-
children: [
|
|
1314
|
-
option.label,
|
|
1315
|
-
option.count !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: option.count })
|
|
1316
|
-
]
|
|
1317
|
-
},
|
|
1318
|
-
option.id
|
|
1319
|
-
);
|
|
1320
|
-
})
|
|
1321
|
-
}
|
|
1322
|
-
);
|
|
1323
|
-
}
|
|
1324
|
-
var DEFAULT_SKILL_VIEW_TOGGLE_LABELS = {
|
|
1325
|
-
group: "View",
|
|
1326
|
-
gallery: "Gallery",
|
|
1327
|
-
list: "List"
|
|
1328
|
-
};
|
|
1329
|
-
function SkillViewToggle({ value, onChange, labels, testId }) {
|
|
1330
|
-
const l = { ...DEFAULT_SKILL_VIEW_TOGGLE_LABELS, ...labels };
|
|
1331
|
-
const item = (view, label, icon) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1332
|
-
"button",
|
|
1333
|
-
{
|
|
1334
|
-
type: "button",
|
|
1335
|
-
role: "radio",
|
|
1336
|
-
"aria-checked": value === view,
|
|
1337
|
-
"aria-label": label,
|
|
1338
|
-
title: label,
|
|
1339
|
-
onClick: () => onChange(view),
|
|
1340
|
-
"data-testid": `${testId ?? "skills-view-toggle"}-${view}`,
|
|
1341
|
-
className: ui.cn(
|
|
1342
|
-
"flex size-8 items-center justify-center rounded-md pointer-coarse:size-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1343
|
-
value === view ? "bg-background text-foreground shadow-sm" : "text-muted-foreground"
|
|
1344
|
-
),
|
|
1345
|
-
children: icon
|
|
1346
|
-
}
|
|
1347
|
-
);
|
|
1348
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1349
|
-
"div",
|
|
1350
|
-
{
|
|
1351
|
-
role: "radiogroup",
|
|
1352
|
-
"aria-label": l.group,
|
|
1353
|
-
className: "inline-flex shrink-0 gap-0.5 rounded-lg bg-muted p-0.5",
|
|
1354
|
-
"data-testid": testId ?? "skills-view-toggle",
|
|
1355
|
-
children: [
|
|
1356
|
-
item("gallery", l.gallery, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutGrid, { className: "size-4" })),
|
|
1357
|
-
item("list", l.list, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "size-4" }))
|
|
1358
|
-
]
|
|
1359
|
-
}
|
|
1360
|
-
);
|
|
1361
|
-
}
|
|
1362
|
-
function SkillTile({
|
|
1363
|
-
name,
|
|
1364
|
-
description,
|
|
1365
|
-
sourceLabel,
|
|
1366
|
-
type,
|
|
1367
|
-
icon,
|
|
1368
|
-
layout,
|
|
1369
|
-
selected,
|
|
1370
|
-
onSelect,
|
|
1371
|
-
testId
|
|
1372
|
-
}) {
|
|
1373
|
-
const isRow = layout === "list";
|
|
1374
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1375
|
-
"div",
|
|
1376
|
-
{
|
|
1377
|
-
role: "button",
|
|
1378
|
-
tabIndex: 0,
|
|
1379
|
-
"aria-pressed": selected,
|
|
1380
|
-
onClick: onSelect,
|
|
1381
|
-
onKeyDown: activateOnKey(onSelect),
|
|
1382
|
-
"data-testid": testId ?? `skill-tile-${name}`,
|
|
1383
|
-
"data-skill-name": name,
|
|
1384
|
-
"data-slot": "skill-tile",
|
|
1385
|
-
className: ui.cn(
|
|
1386
|
-
"flex cursor-pointer rounded-lg border p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1387
|
-
isRow ? "items-center gap-3" : "h-full flex-col gap-2",
|
|
1388
|
-
selected ? "border-primary bg-primary/5" : "border-transparent bg-muted [&:hover]:bg-accent"
|
|
1389
|
-
),
|
|
1390
|
-
children: [
|
|
1391
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
1392
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-ai-ink [&>svg]:size-5", children: icon }),
|
|
1393
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-sm font-semibold text-foreground", children: name })
|
|
1394
|
-
] }),
|
|
1395
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1396
|
-
"p",
|
|
1397
|
-
{
|
|
1398
|
-
className: ui.cn(
|
|
1399
|
-
"min-w-0 text-sm text-muted-foreground",
|
|
1400
|
-
isRow ? "flex-1 truncate max-sm:hidden" : "line-clamp-3"
|
|
1401
|
-
),
|
|
1402
|
-
children: description
|
|
1403
|
-
}
|
|
1404
|
-
),
|
|
1405
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: ui.cn("flex shrink-0 items-center gap-1.5", isRow && "ml-auto"), children: [
|
|
1406
|
-
type && type !== "markdown" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground", children: type }),
|
|
1407
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded bg-background px-1.5 py-0.5 text-xs text-muted-foreground", children: sourceLabel })
|
|
530
|
+
onDelete && /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.SkillActionButton, { label: l.delete, onClick: () => onDelete(), children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "size-4 text-destructive" }) })
|
|
1408
531
|
] })
|
|
1409
532
|
]
|
|
1410
533
|
}
|
|
1411
534
|
);
|
|
1412
535
|
}
|
|
1413
|
-
function SkillDetail({
|
|
1414
|
-
title,
|
|
1415
|
-
sourceLabel,
|
|
1416
|
-
description,
|
|
1417
|
-
icon,
|
|
1418
|
-
notice,
|
|
1419
|
-
children,
|
|
1420
|
-
actions,
|
|
1421
|
-
testId
|
|
1422
|
-
}) {
|
|
1423
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1424
|
-
"section",
|
|
1425
|
-
{
|
|
1426
|
-
className: "flex min-h-0 flex-1 flex-col",
|
|
1427
|
-
"data-testid": testId ?? "skill-detail",
|
|
1428
|
-
"data-slot": "skill-detail",
|
|
1429
|
-
"aria-label": title,
|
|
1430
|
-
children: [
|
|
1431
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 space-y-4 overflow-y-auto p-4", children: [
|
|
1432
|
-
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "space-y-1", children: [
|
|
1433
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
1434
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-ai-ink [&>svg]:size-5", children: icon }),
|
|
1435
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-foreground", children: title }),
|
|
1436
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: sourceLabel })
|
|
1437
|
-
] }),
|
|
1438
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: description }),
|
|
1439
|
-
notice && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground", children: notice })
|
|
1440
|
-
] }),
|
|
1441
|
-
children
|
|
1442
|
-
] }),
|
|
1443
|
-
actions && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1444
|
-
"div",
|
|
1445
|
-
{
|
|
1446
|
-
className: "flex flex-wrap gap-2 border-t border-border bg-background p-3",
|
|
1447
|
-
"data-slot": "skill-detail-actions",
|
|
1448
|
-
children: actions
|
|
1449
|
-
}
|
|
1450
|
-
)
|
|
1451
|
-
]
|
|
1452
|
-
}
|
|
1453
|
-
);
|
|
1454
|
-
}
|
|
1455
|
-
function SkillDetailSection({
|
|
1456
|
-
title,
|
|
1457
|
-
children,
|
|
1458
|
-
testId
|
|
1459
|
-
}) {
|
|
1460
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", "data-testid": testId, children: [
|
|
1461
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: title }),
|
|
1462
|
-
children
|
|
1463
|
-
] });
|
|
1464
|
-
}
|
|
1465
536
|
var DEFAULT_TASK_PLAN_LABELS = {
|
|
1466
537
|
emptyTitle: "Draft a plan to review",
|
|
1467
538
|
emptyBody: "The assistant writes a short checklist of what its work must cover. You can edit it, and it checks its own draft against it before handing it to you.",
|
|
@@ -2890,7 +1961,7 @@ function TaskTable(props) {
|
|
|
2890
1961
|
isMe: mine
|
|
2891
1962
|
};
|
|
2892
1963
|
};
|
|
2893
|
-
const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1964
|
+
const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.PersonPill, { person }));
|
|
2894
1965
|
const q = (query.trim() || (props.filterText ?? "").trim()).toLowerCase();
|
|
2895
1966
|
const counts = react.useMemo(() => {
|
|
2896
1967
|
const map = new Map(STATUS_ORDER.map((s) => [s, 0]));
|
|
@@ -3504,7 +2575,7 @@ function TaskInbox(p) {
|
|
|
3504
2575
|
else next.add(id);
|
|
3505
2576
|
return next;
|
|
3506
2577
|
});
|
|
3507
|
-
p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2578
|
+
p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(chunkULEDHANM_cjs.PersonPill, { person: value }));
|
|
3508
2579
|
const taskById = new Map(all.map((t) => [t.external_id, t]));
|
|
3509
2580
|
const visible = new Set(rows.map((t) => t.external_id));
|
|
3510
2581
|
for (const task of rows) {
|
|
@@ -3692,7 +2763,7 @@ function TaskInbox(p) {
|
|
|
3692
2763
|
fieldsButton: "tasks-filter-fields"
|
|
3693
2764
|
},
|
|
3694
2765
|
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3695
|
-
|
|
2766
|
+
chunkMIDXCYZB_cjs.TriStateFilterMenu,
|
|
3696
2767
|
{
|
|
3697
2768
|
testId: "tasks-status-filter",
|
|
3698
2769
|
open: filterOpen,
|
|
@@ -4202,7 +3273,7 @@ function TaskStartDialog({
|
|
|
4202
3273
|
setSourceOpen(false);
|
|
4203
3274
|
}, [open]);
|
|
4204
3275
|
const textareaRef = react.useRef(null);
|
|
4205
|
-
const mention =
|
|
3276
|
+
const mention = chunkOWCEQKAR_cjs.useMentionAutocomplete({
|
|
4206
3277
|
value: prompt,
|
|
4207
3278
|
onValueChange: setPrompt,
|
|
4208
3279
|
candidates: people,
|
|
@@ -4553,7 +3624,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
4553
3624
|
}
|
|
4554
3625
|
const typed = name?.trim();
|
|
4555
3626
|
if (workflow.options?.agent === false) {
|
|
4556
|
-
const message =
|
|
3627
|
+
const message = chunkOWCEQKAR_cjs.composeWorkflowPrompt(workflow, inputs, context);
|
|
4557
3628
|
return { name: typed || message, prompt: "", skill_ref: null, skill_inputs: null };
|
|
4558
3629
|
}
|
|
4559
3630
|
const derived = typed || deriveWorkflowName(workflow, inputs);
|
|
@@ -4567,7 +3638,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
4567
3638
|
}
|
|
4568
3639
|
return {
|
|
4569
3640
|
name: derived,
|
|
4570
|
-
prompt:
|
|
3641
|
+
prompt: chunkOWCEQKAR_cjs.composeWorkflowPrompt(workflow, inputs, context),
|
|
4571
3642
|
skill_ref: null,
|
|
4572
3643
|
// The files a run is bound to travel in the saved inputs, whatever the template: the server binds
|
|
4573
3644
|
// the run to the ids listed under any input's `documents`.
|
|
@@ -5070,37 +4141,6 @@ function NewThreadDialog({
|
|
|
5070
4141
|
}
|
|
5071
4142
|
) });
|
|
5072
4143
|
}
|
|
5073
|
-
function TaskActivityDialog({
|
|
5074
|
-
open,
|
|
5075
|
-
onOpenChange,
|
|
5076
|
-
taskName,
|
|
5077
|
-
events,
|
|
5078
|
-
isLoading,
|
|
5079
|
-
isError,
|
|
5080
|
-
labels,
|
|
5081
|
-
testId,
|
|
5082
|
-
...timeline
|
|
5083
|
-
}) {
|
|
5084
|
-
const l = { ...chunkCHVCTKF4_cjs.DEFAULT_TASK_ACTIVITY_LABELS, ...labels };
|
|
5085
|
-
const id = chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "task-activity" });
|
|
5086
|
-
const count = events?.length ?? 0;
|
|
5087
|
-
const scrollToEnd = react.useCallback(
|
|
5088
|
-
(el) => {
|
|
5089
|
-
if (count >= 0) el?.scrollIntoView?.({ block: "end" });
|
|
5090
|
-
},
|
|
5091
|
-
[count]
|
|
5092
|
-
);
|
|
5093
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogContent, { presentation: "sheet", className: "max-h-[80dvh] sm:max-w-lg", "data-testid": id, children: [
|
|
5094
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
5095
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: l.title }),
|
|
5096
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "truncate", children: taskName })
|
|
5097
|
-
] }),
|
|
5098
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-h-[55dvh] overflow-y-auto pr-1", "data-testid": `${id}-scroll`, children: [
|
|
5099
|
-
isLoading && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.loading }) : isError && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.error }) : count === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) : /* @__PURE__ */ jsxRuntime.jsx(chunkCHVCTKF4_cjs.TaskActivityTimeline, { events: events ?? [], labels, testId: id, ...timeline }),
|
|
5100
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollToEnd })
|
|
5101
|
-
] })
|
|
5102
|
-
] }) });
|
|
5103
|
-
}
|
|
5104
4144
|
function TaskFlow({
|
|
5105
4145
|
items,
|
|
5106
4146
|
className
|
|
@@ -5134,7 +4174,7 @@ function TaskFlow({
|
|
|
5134
4174
|
},
|
|
5135
4175
|
children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex w-max min-w-full items-center gap-1 py-0.5", children: items.map((item, i) => {
|
|
5136
4176
|
const chip = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5137
|
-
|
|
4177
|
+
chunkOWCEQKAR_cjs.StepChip,
|
|
5138
4178
|
{
|
|
5139
4179
|
kind: "adhoc",
|
|
5140
4180
|
phase: "ready",
|
|
@@ -5188,7 +4228,7 @@ function ThreadActivity({ item, children }) {
|
|
|
5188
4228
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full max-w-xl items-center gap-2", children: [
|
|
5189
4229
|
/* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link", "data-done": done || void 0 }),
|
|
5190
4230
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5191
|
-
|
|
4231
|
+
chunkOWCEQKAR_cjs.StepChip,
|
|
5192
4232
|
{
|
|
5193
4233
|
inert: true,
|
|
5194
4234
|
kind,
|
|
@@ -5207,7 +4247,7 @@ function ThreadActivity({ item, children }) {
|
|
|
5207
4247
|
}
|
|
5208
4248
|
),
|
|
5209
4249
|
document && /* @__PURE__ */ jsxRuntime.jsx(
|
|
5210
|
-
|
|
4250
|
+
chunkOWCEQKAR_cjs.StepDocumentButton,
|
|
5211
4251
|
{
|
|
5212
4252
|
kind,
|
|
5213
4253
|
name: document.name,
|
|
@@ -5274,7 +4314,7 @@ function ThreadLauncher({
|
|
|
5274
4314
|
const [shared, setShared] = react.useState(false);
|
|
5275
4315
|
const [started, setStarted] = react.useState(null);
|
|
5276
4316
|
const textareaRef = react.useRef(null);
|
|
5277
|
-
const mention =
|
|
4317
|
+
const mention = chunkOWCEQKAR_cjs.useMentionAutocomplete({
|
|
5278
4318
|
value: prompt,
|
|
5279
4319
|
onValueChange: setPrompt,
|
|
5280
4320
|
candidates: people,
|
|
@@ -5471,10 +4511,10 @@ function WorkflowRunStatus({
|
|
|
5471
4511
|
testId = "workflow-run-status"
|
|
5472
4512
|
}) {
|
|
5473
4513
|
const l = { ...DEFAULT_WORKFLOW_RUN_STATUS_LABELS, ...labels };
|
|
5474
|
-
const ordered =
|
|
5475
|
-
const phaseOf = (id) => isLoading ? "blocked" :
|
|
5476
|
-
const finished = !isLoading &&
|
|
5477
|
-
const atId = finished || isLoading ? void 0 :
|
|
4514
|
+
const ordered = chunkOWCEQKAR_cjs.stepLevels(steps).flat();
|
|
4515
|
+
const phaseOf = (id) => isLoading ? "blocked" : chunkOWCEQKAR_cjs.stepPhase(steps, states, id);
|
|
4516
|
+
const finished = !isLoading && chunkOWCEQKAR_cjs.isRunFinished(steps, states);
|
|
4517
|
+
const atId = finished || isLoading ? void 0 : chunkULEDHANM_cjs.activeStepId(chunkOWCEQKAR_cjs.stepLevels(steps), phaseOf);
|
|
5478
4518
|
const at = ordered.find((s) => s.id === atId);
|
|
5479
4519
|
const phase = at ? phaseOf(at.id) : "done";
|
|
5480
4520
|
const assignee = at && ["ready", "waiting"].includes(phase) ? assigneeOf?.(at) : void 0;
|
|
@@ -5506,7 +4546,7 @@ function WorkflowRunStatus({
|
|
|
5506
4546
|
"span",
|
|
5507
4547
|
{
|
|
5508
4548
|
className: ui.cn(
|
|
5509
|
-
`wf-kind-${
|
|
4549
|
+
`wf-kind-${chunkOWCEQKAR_cjs.stepKindOf(s)}`,
|
|
5510
4550
|
"h-1.5 w-3 shrink-0 rounded-full",
|
|
5511
4551
|
SEGMENT[phaseOf(s.id)],
|
|
5512
4552
|
s.id === atId && "w-5"
|
|
@@ -5552,7 +4592,7 @@ function groupThreadActivity(steps, items) {
|
|
|
5552
4592
|
continue;
|
|
5553
4593
|
}
|
|
5554
4594
|
if (current === void 0) out.before.push(item);
|
|
5555
|
-
else if (
|
|
4595
|
+
else if (chunkOWCEQKAR_cjs.isRunFinished(steps, states)) out.after.push(item);
|
|
5556
4596
|
else {
|
|
5557
4597
|
const status = states[current]?.status;
|
|
5558
4598
|
const at = status === "done" || status === "skipped" ? steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? ""))?.id ?? current : current;
|
|
@@ -5575,9 +4615,9 @@ var DEFAULT_WORKFLOW_THREAD_STRIP_LABELS = {
|
|
|
5575
4615
|
after: "After",
|
|
5576
4616
|
beforeSteps: "Before the first step",
|
|
5577
4617
|
afterSteps: "After the last step",
|
|
5578
|
-
kinds:
|
|
5579
|
-
documents:
|
|
5580
|
-
record:
|
|
4618
|
+
kinds: chunkOWCEQKAR_cjs.DEFAULT_STEP_KIND_LABELS,
|
|
4619
|
+
documents: chunkOWCEQKAR_cjs.DEFAULT_STEP_DOCUMENT_LABELS,
|
|
4620
|
+
record: chunkOWCEQKAR_cjs.DEFAULT_STEP_RECORD_LABELS
|
|
5581
4621
|
};
|
|
5582
4622
|
function WorkflowThreadStartedBy({
|
|
5583
4623
|
origin,
|
|
@@ -5708,7 +4748,7 @@ function EntriesChip({
|
|
|
5708
4748
|
const latest = items.at(-1);
|
|
5709
4749
|
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Popover, { children: [
|
|
5710
4750
|
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5711
|
-
|
|
4751
|
+
chunkOWCEQKAR_cjs.StepChip,
|
|
5712
4752
|
{
|
|
5713
4753
|
kind,
|
|
5714
4754
|
phase: "ready",
|
|
@@ -5747,23 +4787,23 @@ function WorkflowThreadStrip({
|
|
|
5747
4787
|
className
|
|
5748
4788
|
}) {
|
|
5749
4789
|
const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels };
|
|
5750
|
-
const barL = { ...
|
|
4790
|
+
const barL = { ...chunkULEDHANM_cjs.DEFAULT_STEP_BAR_LABELS, ...barLabels };
|
|
5751
4791
|
const grouped = groupThreadActivity(steps, items);
|
|
5752
4792
|
const strays = signals.filter((s) => !steps.some((step) => step.id === s.step));
|
|
5753
4793
|
const link = /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "wf-link wf-kind-start max-w-6", "data-done": true });
|
|
5754
4794
|
const [selected, setSelected] = react.useState(null);
|
|
5755
4795
|
const [open, setOpen] = react.useState(null);
|
|
5756
|
-
const phaseOf = (id) =>
|
|
4796
|
+
const phaseOf = (id) => chunkOWCEQKAR_cjs.stepPhase(steps, states, id);
|
|
5757
4797
|
const iconOf = (step) => step.icon && renderIcon ? renderIcon(step.icon) : void 0;
|
|
5758
4798
|
const glyphOf = (step) => {
|
|
5759
|
-
const KindIcon =
|
|
4799
|
+
const KindIcon = chunkOWCEQKAR_cjs.STEP_KIND_ICONS[chunkOWCEQKAR_cjs.stepKindOf(step)];
|
|
5760
4800
|
return iconOf(step) ?? /* @__PURE__ */ jsxRuntime.jsx(KindIcon, {});
|
|
5761
4801
|
};
|
|
5762
4802
|
const waitingOf = (id) => {
|
|
5763
4803
|
const step = steps.find((s) => s.id === id);
|
|
5764
4804
|
const phase = phaseOf(id);
|
|
5765
|
-
const documents =
|
|
5766
|
-
if (documents.length) return
|
|
4805
|
+
const documents = chunkOWCEQKAR_cjs.waitingDocuments(states[id]);
|
|
4806
|
+
if (documents.length) return chunkOWCEQKAR_cjs.waitingForDocumentsText(documents.length);
|
|
5767
4807
|
const name = step && (phase === "ready" || phase === "waiting") ? assigneeOf?.(step) : void 0;
|
|
5768
4808
|
return name ? l.waitingFor.replace("{name}", name) : void 0;
|
|
5769
4809
|
};
|
|
@@ -5773,8 +4813,8 @@ function WorkflowThreadStrip({
|
|
|
5773
4813
|
const assignee = phase === "ready" || phase === "waiting" ? assigneeOf?.(step) : void 0;
|
|
5774
4814
|
const waiting = waitingOf(step.id);
|
|
5775
4815
|
const sentBack = states[step.id]?.sentBack;
|
|
5776
|
-
const kind =
|
|
5777
|
-
const documents =
|
|
4816
|
+
const kind = chunkOWCEQKAR_cjs.stepKindOf(step);
|
|
4817
|
+
const documents = chunkOWCEQKAR_cjs.stepDocuments(steps, states, step.id);
|
|
5778
4818
|
const latestDoc = onOpenDocument ? documents.at(-1) : void 0;
|
|
5779
4819
|
const finished = ["done", "skipped", "failed"].includes(phase);
|
|
5780
4820
|
const chip = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -5787,7 +4827,7 @@ function WorkflowThreadStrip({
|
|
|
5787
4827
|
},
|
|
5788
4828
|
children: [
|
|
5789
4829
|
/* @__PURE__ */ jsxRuntime.jsx(ui.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5790
|
-
|
|
4830
|
+
chunkOWCEQKAR_cjs.StepChip,
|
|
5791
4831
|
{
|
|
5792
4832
|
kind,
|
|
5793
4833
|
phase,
|
|
@@ -5801,7 +4841,7 @@ function WorkflowThreadStrip({
|
|
|
5801
4841
|
waiting
|
|
5802
4842
|
] })
|
|
5803
4843
|
] }),
|
|
5804
|
-
labelClassName: isCurrent ?
|
|
4844
|
+
labelClassName: isCurrent ? chunkULEDHANM_cjs.STEP_LABEL_CURRENT : ui.cn(chunkULEDHANM_cjs.STEP_LABEL, chunkULEDHANM_cjs.STEP_LABEL_MAX),
|
|
5805
4845
|
className: ui.cn(latestDoc && "rounded-r-none"),
|
|
5806
4846
|
title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
|
|
5807
4847
|
"data-testid": `workflow-thread-step-${step.id}`,
|
|
@@ -5836,7 +4876,7 @@ function WorkflowThreadStrip({
|
|
|
5836
4876
|
),
|
|
5837
4877
|
sentBack && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-amber-700 dark:text-amber-300", children: l.sentBack }),
|
|
5838
4878
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5839
|
-
|
|
4879
|
+
chunkOWCEQKAR_cjs.StepDocumentCards,
|
|
5840
4880
|
{
|
|
5841
4881
|
refs: documents,
|
|
5842
4882
|
heading: step.kind === "review" ? phase === "done" ? l.documents.approved : l.documents.toApprove : l.documents.produced,
|
|
@@ -5847,7 +4887,7 @@ function WorkflowThreadStrip({
|
|
|
5847
4887
|
}
|
|
5848
4888
|
),
|
|
5849
4889
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5850
|
-
|
|
4890
|
+
chunkOWCEQKAR_cjs.StepRecord,
|
|
5851
4891
|
{
|
|
5852
4892
|
step,
|
|
5853
4893
|
state: states[step.id],
|
|
@@ -5879,10 +4919,10 @@ function WorkflowThreadStrip({
|
|
|
5879
4919
|
return latestDoc ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 items-center", children: [
|
|
5880
4920
|
chip,
|
|
5881
4921
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5882
|
-
|
|
4922
|
+
chunkOWCEQKAR_cjs.StepDocumentButton,
|
|
5883
4923
|
{
|
|
5884
4924
|
kind,
|
|
5885
|
-
name: nameOfDoc?.(
|
|
4925
|
+
name: nameOfDoc?.(chunkOWCEQKAR_cjs.splitDocRef(latestDoc).id) ?? latestDoc,
|
|
5886
4926
|
onOpen: () => onOpenDocument?.(latestDoc),
|
|
5887
4927
|
testId: `workflow-thread-step-${step.id}-open-document`
|
|
5888
4928
|
}
|
|
@@ -5921,17 +4961,17 @@ function WorkflowThreadStrip({
|
|
|
5921
4961
|
] }),
|
|
5922
4962
|
strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }, `${s.step}-${s.signal}`))
|
|
5923
4963
|
] }) : null;
|
|
5924
|
-
const at = steps.find((s) => s.id === (selected ??
|
|
5925
|
-
const headingPx = (step) => `${l.kinds[
|
|
4964
|
+
const at = steps.find((s) => s.id === (selected ?? chunkULEDHANM_cjs.activeStepId(chunkOWCEQKAR_cjs.stepLevels(steps), phaseOf)));
|
|
4965
|
+
const headingPx = (step) => `${l.kinds[chunkOWCEQKAR_cjs.stepKindOf(step)]} \xB7 ${waitingOf(step.id) ?? ""}`.length * 5.6 - step.title.length * 6.5;
|
|
5926
4966
|
const reserve = {
|
|
5927
|
-
always: (at ? Math.max(0, headingPx(at)) : 0) + steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX + (onOpenDocument ? steps.filter((s) =>
|
|
4967
|
+
always: (at ? Math.max(0, headingPx(at)) : 0) + steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX + (onOpenDocument ? steps.filter((s) => chunkOWCEQKAR_cjs.stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX : 0),
|
|
5928
4968
|
leading: leading ? 150 : 0,
|
|
5929
4969
|
trailing: trailing ? 120 : 0
|
|
5930
4970
|
};
|
|
5931
4971
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5932
|
-
|
|
4972
|
+
chunkULEDHANM_cjs.StepBarFrame,
|
|
5933
4973
|
{
|
|
5934
|
-
levels:
|
|
4974
|
+
levels: chunkOWCEQKAR_cjs.stepLevels(steps),
|
|
5935
4975
|
phaseOf,
|
|
5936
4976
|
current: selected,
|
|
5937
4977
|
onSelect: (id) => {
|
|
@@ -5944,7 +4984,7 @@ function WorkflowThreadStrip({
|
|
|
5944
4984
|
trailing,
|
|
5945
4985
|
reservePx: reserve,
|
|
5946
4986
|
icon: glyphOf,
|
|
5947
|
-
kindOf:
|
|
4987
|
+
kindOf: chunkOWCEQKAR_cjs.stepKindOf,
|
|
5948
4988
|
labels: { waitingFor: l.waitingFor, ...barLabels },
|
|
5949
4989
|
tid: (suffix) => `workflow-thread-${suffix}`
|
|
5950
4990
|
}
|
|
@@ -6020,11 +5060,11 @@ function compactThreadActivity(events, stepTitleOf) {
|
|
|
6020
5060
|
const count = Math.max(1, entry.recipients.length);
|
|
6021
5061
|
entry.label = `Notified ${count} ${count === 1 ? "user" : "users"}`;
|
|
6022
5062
|
} else if (STEP_LABELS[event.kind]) {
|
|
6023
|
-
const documents =
|
|
5063
|
+
const documents = chunkOWCEQKAR_cjs.eventWaitingDocuments(event.detail);
|
|
6024
5064
|
const title = typeof event.detail?.step === "string" ? stepTitleOf?.(event.detail.step) : void 0;
|
|
6025
5065
|
result.push({
|
|
6026
5066
|
event,
|
|
6027
|
-
label: documents ?
|
|
5067
|
+
label: documents ? chunkOWCEQKAR_cjs.waitingForDocumentsText(documents.length) : title && STEP_VERBS[event.kind] ? `${title} ${STEP_VERBS[event.kind]}` : STEP_LABELS[event.kind],
|
|
6028
5068
|
recipients: []
|
|
6029
5069
|
});
|
|
6030
5070
|
} else if (["artifact_created", "artifact_edited", "document_added", "document_removed"].includes(
|
|
@@ -6120,140 +5160,6 @@ function TaskThreadChip({
|
|
|
6120
5160
|
}
|
|
6121
5161
|
);
|
|
6122
5162
|
}
|
|
6123
|
-
var DEFAULT_TASK_RUNS_DIALOG_LABELS = {
|
|
6124
|
-
title: (taskName) => `Run history \u2014 ${taskName}`,
|
|
6125
|
-
description: "Every time this task ran. Open a run to read or watch it in its conversation.",
|
|
6126
|
-
loading: "Loading runs\u2026",
|
|
6127
|
-
empty: "This task hasn\u2019t run yet.",
|
|
6128
|
-
open: "Open"
|
|
6129
|
-
};
|
|
6130
|
-
var STATUS_STYLE = {
|
|
6131
|
-
running: "bg-ai-soft text-ai-ink",
|
|
6132
|
-
success: "bg-green-bg text-green-text",
|
|
6133
|
-
completed: "bg-green-bg text-green-text",
|
|
6134
|
-
failed: "bg-red-bg text-red-text"
|
|
6135
|
-
};
|
|
6136
|
-
function TaskRunsDialog({
|
|
6137
|
-
inline = false,
|
|
6138
|
-
renderErrorReport,
|
|
6139
|
-
hideHeader = false,
|
|
6140
|
-
open,
|
|
6141
|
-
onOpenChange,
|
|
6142
|
-
taskName,
|
|
6143
|
-
runs,
|
|
6144
|
-
isLoading,
|
|
6145
|
-
onOpenRun,
|
|
6146
|
-
onOpenResult,
|
|
6147
|
-
getRunHref,
|
|
6148
|
-
testIds,
|
|
6149
|
-
labels
|
|
6150
|
-
}) {
|
|
6151
|
-
const l = { ...DEFAULT_TASK_RUNS_DIALOG_LABELS, ...labels };
|
|
6152
|
-
const columns = react.useMemo(
|
|
6153
|
-
() => [
|
|
6154
|
-
{
|
|
6155
|
-
colId: "status",
|
|
6156
|
-
field: "status",
|
|
6157
|
-
headerName: "Status",
|
|
6158
|
-
width: 160,
|
|
6159
|
-
minWidth: 140,
|
|
6160
|
-
cellRenderer: ({ data }) => data && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6161
|
-
"span",
|
|
6162
|
-
{
|
|
6163
|
-
className: ui.cn(
|
|
6164
|
-
"rounded-full px-2 py-0.5 text-xs font-medium capitalize",
|
|
6165
|
-
STATUS_STYLE[data.status] ?? "text-muted-foreground"
|
|
6166
|
-
),
|
|
6167
|
-
children: chunkCHVCTKF4_cjs.workflowRunStatusLabel(data.status)
|
|
6168
|
-
}
|
|
6169
|
-
)
|
|
6170
|
-
},
|
|
6171
|
-
{ colId: "when", field: "when", headerName: "Run", flex: 2, minWidth: 240 },
|
|
6172
|
-
{
|
|
6173
|
-
colId: "result",
|
|
6174
|
-
headerName: "",
|
|
6175
|
-
width: 280,
|
|
6176
|
-
minWidth: 220,
|
|
6177
|
-
sortable: false,
|
|
6178
|
-
cellRenderer: ({ data: run }) => {
|
|
6179
|
-
if (!run) return null;
|
|
6180
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full items-center gap-2", children: [
|
|
6181
|
-
run.error && renderErrorReport?.(run),
|
|
6182
|
-
(run.conversationId || run.resultId && onOpenResult) && /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { asChild: true, variant: "ghost", size: "sm", className: "h-7 gap-1.5", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6183
|
-
chunkR26BK7YL_cjs.ActionLink,
|
|
6184
|
-
{
|
|
6185
|
-
href: getRunHref?.(run),
|
|
6186
|
-
onSelect: () => {
|
|
6187
|
-
if (run.conversationId) onOpenRun(run.conversationId);
|
|
6188
|
-
else if (run.resultId) onOpenResult?.(run.resultId);
|
|
6189
|
-
onOpenChange(false);
|
|
6190
|
-
},
|
|
6191
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.open, { testId: "task-run-open" }),
|
|
6192
|
-
children: [
|
|
6193
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { size: 13 }),
|
|
6194
|
-
" ",
|
|
6195
|
-
l.open
|
|
6196
|
-
]
|
|
6197
|
-
}
|
|
6198
|
-
) })
|
|
6199
|
-
] });
|
|
6200
|
-
}
|
|
6201
|
-
}
|
|
6202
|
-
],
|
|
6203
|
-
[onOpenRun, onOpenResult, getRunHref, onOpenChange, testIds?.open, l.open, renderErrorReport]
|
|
6204
|
-
);
|
|
6205
|
-
const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6206
|
-
hideHeader ? null : inline ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6207
|
-
chunk7RGLTF76_cjs.TabHeader,
|
|
6208
|
-
{
|
|
6209
|
-
tabs: [
|
|
6210
|
-
{
|
|
6211
|
-
id: "history",
|
|
6212
|
-
label: l.title(taskName),
|
|
6213
|
-
count: runs.length,
|
|
6214
|
-
countIcon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { size: 14 }),
|
|
6215
|
-
presentation: "count",
|
|
6216
|
-
onClose: () => onOpenChange(false)
|
|
6217
|
-
}
|
|
6218
|
-
],
|
|
6219
|
-
activeTabId: "history",
|
|
6220
|
-
onTabChange: () => {
|
|
6221
|
-
}
|
|
6222
|
-
}
|
|
6223
|
-
) : /* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { children: [
|
|
6224
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogTitle, { className: "flex items-center gap-2", children: [
|
|
6225
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.History, { size: 16 }),
|
|
6226
|
-
" ",
|
|
6227
|
-
l.title(taskName)
|
|
6228
|
-
] }),
|
|
6229
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: l.description })
|
|
6230
|
-
] }),
|
|
6231
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6232
|
-
chunkC2CWWEHO_cjs.GridView,
|
|
6233
|
-
{
|
|
6234
|
-
testId: chunkMHVNT4J3_cjs.testIdOr(testIds?.list, { testId: "task-runs-list" }),
|
|
6235
|
-
gridId: "workflow-runs",
|
|
6236
|
-
items: runs,
|
|
6237
|
-
columnDefs: columns,
|
|
6238
|
-
getItemId: (run) => run.id,
|
|
6239
|
-
getRowTestId: () => chunkMHVNT4J3_cjs.testIdOr(testIds?.row, { testId: "task-run-row" }),
|
|
6240
|
-
isLoading,
|
|
6241
|
-
loadingMessage: l.loading,
|
|
6242
|
-
emptyState: { title: l.empty },
|
|
6243
|
-
height: "100%"
|
|
6244
|
-
}
|
|
6245
|
-
) })
|
|
6246
|
-
] });
|
|
6247
|
-
return inline ? /* @__PURE__ */ jsxRuntime.jsx("section", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "automation-history", children: content }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6248
|
-
ui.DialogContent,
|
|
6249
|
-
{
|
|
6250
|
-
presentation: "sheet",
|
|
6251
|
-
className: "flex h-[min(32rem,calc(100dvh-2rem))] min-h-0 max-w-3xl flex-col",
|
|
6252
|
-
"data-testid": chunkMHVNT4J3_cjs.testIdOr(testIds?.modal, { testId: "task-runs-modal" }),
|
|
6253
|
-
children: content
|
|
6254
|
-
}
|
|
6255
|
-
) });
|
|
6256
|
-
}
|
|
6257
5163
|
var DEFAULT_TASKS_CHROME_LABELS = {
|
|
6258
5164
|
tasksTab: "Tasks",
|
|
6259
5165
|
newTask: "New task"
|
|
@@ -6431,7 +5337,7 @@ function defaultTaskComposerValues(workflows, initial) {
|
|
|
6431
5337
|
return {
|
|
6432
5338
|
assignee: "me",
|
|
6433
5339
|
workflowId,
|
|
6434
|
-
inputs: workflow ? { ...
|
|
5340
|
+
inputs: workflow ? { ...chunkOWCEQKAR_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
|
|
6435
5341
|
when: "manual",
|
|
6436
5342
|
runAt: "",
|
|
6437
5343
|
rrule: "",
|
|
@@ -6507,7 +5413,7 @@ function WorkflowComposer({
|
|
|
6507
5413
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
6508
5414
|
[workflows, open]
|
|
6509
5415
|
);
|
|
6510
|
-
const [values, setValues] =
|
|
5416
|
+
const [values, setValues] = chunkULEDHANM_cjs.useControllableState(
|
|
6511
5417
|
valuesProp,
|
|
6512
5418
|
seed,
|
|
6513
5419
|
onValuesChange
|
|
@@ -6540,7 +5446,7 @@ function WorkflowComposer({
|
|
|
6540
5446
|
return !docs?.length;
|
|
6541
5447
|
})
|
|
6542
5448
|
);
|
|
6543
|
-
const whatMissing = !workflow || Object.keys(
|
|
5449
|
+
const whatMissing = !workflow || Object.keys(chunkOWCEQKAR_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
|
|
6544
5450
|
const runAtPast = values.when === "once" && values.runAt !== "" && values.runAt !== initialValues?.runAt && new Date(values.runAt).getTime() <= Date.now();
|
|
6545
5451
|
const whenMissing = missingWhen(values, runAtPast);
|
|
6546
5452
|
const scheduled = values.when !== "now" && values.when !== "manual";
|
|
@@ -6552,7 +5458,7 @@ function WorkflowComposer({
|
|
|
6552
5458
|
setValues({
|
|
6553
5459
|
...values,
|
|
6554
5460
|
workflowId: next,
|
|
6555
|
-
inputs: def ?
|
|
5461
|
+
inputs: def ? chunkOWCEQKAR_cjs.defaultInputs(def) : {},
|
|
6556
5462
|
...def?.documentAction ? { access: "standing" } : {}
|
|
6557
5463
|
});
|
|
6558
5464
|
};
|
|
@@ -6680,7 +5586,7 @@ function WorkflowComposer({
|
|
|
6680
5586
|
},
|
|
6681
5587
|
"data-testid": `${id}-dropzone`,
|
|
6682
5588
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6683
|
-
|
|
5589
|
+
chunkOGP6MQXQ_cjs.AddFilesFirst,
|
|
6684
5590
|
{
|
|
6685
5591
|
reason: l.addFilesReason,
|
|
6686
5592
|
action: addFilesAction,
|
|
@@ -6690,7 +5596,7 @@ function WorkflowComposer({
|
|
|
6690
5596
|
}
|
|
6691
5597
|
),
|
|
6692
5598
|
!noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6693
|
-
|
|
5599
|
+
chunkULEDHANM_cjs.SchemaForm,
|
|
6694
5600
|
{
|
|
6695
5601
|
fields,
|
|
6696
5602
|
values: values.inputs,
|
|
@@ -7115,7 +6021,7 @@ function WorkTaskComposer({
|
|
|
7115
6021
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
7116
6022
|
[workflows, open]
|
|
7117
6023
|
);
|
|
7118
|
-
const [values, setValues] =
|
|
6024
|
+
const [values, setValues] = chunkULEDHANM_cjs.useControllableState(
|
|
7119
6025
|
valuesProp,
|
|
7120
6026
|
seed,
|
|
7121
6027
|
onValuesChange
|
|
@@ -7129,7 +6035,7 @@ function WorkTaskComposer({
|
|
|
7129
6035
|
}, [open]);
|
|
7130
6036
|
const workflow = workflows.find((w) => w.id === values.workflowId);
|
|
7131
6037
|
const fields = workflow?.inputs ?? [];
|
|
7132
|
-
const errors = workflow ?
|
|
6038
|
+
const errors = workflow ? chunkOWCEQKAR_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
|
|
7133
6039
|
const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0;
|
|
7134
6040
|
const unattended = hasWork && values.when !== "now" && values.when !== "manual";
|
|
7135
6041
|
const canConfigure = !isEdit || seed.assignee === "agent";
|
|
@@ -7137,7 +6043,7 @@ function WorkTaskComposer({
|
|
|
7137
6043
|
const set = (key, value) => setValues({ ...values, [key]: value });
|
|
7138
6044
|
const pickWorkflow = (id2) => {
|
|
7139
6045
|
const next = workflows.find((w) => w.id === id2);
|
|
7140
|
-
setValues({ ...values, workflowId: id2, inputs: next ?
|
|
6046
|
+
setValues({ ...values, workflowId: id2, inputs: next ? chunkOWCEQKAR_cjs.defaultInputs(next) : {} });
|
|
7141
6047
|
};
|
|
7142
6048
|
const openConfigure = () => {
|
|
7143
6049
|
setConfigOpen(true);
|
|
@@ -7323,7 +6229,7 @@ function WorkTaskComposer({
|
|
|
7323
6229
|
)
|
|
7324
6230
|
] }),
|
|
7325
6231
|
workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7326
|
-
|
|
6232
|
+
chunkULEDHANM_cjs.SchemaForm,
|
|
7327
6233
|
{
|
|
7328
6234
|
fields,
|
|
7329
6235
|
values: values.inputs,
|
|
@@ -9267,7 +8173,7 @@ function AgentCreateView({
|
|
|
9267
8173
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-normal text-muted-foreground", children: l.optional })
|
|
9268
8174
|
] }),
|
|
9269
8175
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9270
|
-
|
|
8176
|
+
chunkMIDXCYZB_cjs.MultiSelect,
|
|
9271
8177
|
{
|
|
9272
8178
|
data: workspaces.map((ws) => ({ label: ws.name, value: ws.id })),
|
|
9273
8179
|
value: selectedWorkspaces,
|
|
@@ -9299,7 +8205,6 @@ function AgentCreateView({
|
|
|
9299
8205
|
] });
|
|
9300
8206
|
}
|
|
9301
8207
|
|
|
9302
|
-
exports.AgentAvatarField = AgentAvatarField;
|
|
9303
8208
|
exports.AgentBar = AgentBar;
|
|
9304
8209
|
exports.AgentBarIconButton = AgentBarIconButton;
|
|
9305
8210
|
exports.AgentBarMenu = AgentBarMenu;
|
|
@@ -9310,13 +8215,9 @@ exports.AgentBarStatus = AgentBarStatus;
|
|
|
9310
8215
|
exports.AgentCard = AgentCard;
|
|
9311
8216
|
exports.AgentCreateView = AgentCreateView;
|
|
9312
8217
|
exports.AgentCreatedView = AgentCreatedView;
|
|
9313
|
-
exports.AgentCreator = AgentCreator;
|
|
9314
8218
|
exports.AgentEditView = AgentEditView;
|
|
9315
8219
|
exports.AgentGallery = AgentGallery;
|
|
9316
8220
|
exports.AgentMainView = AgentMainView;
|
|
9317
|
-
exports.AgentTypeSelector = AgentTypeSelector;
|
|
9318
|
-
exports.CapabilityGrid = CapabilityGrid;
|
|
9319
|
-
exports.CapabilityTile = CapabilityTile;
|
|
9320
8221
|
exports.ConfigField = ConfigField;
|
|
9321
8222
|
exports.ConfigForm = ConfigForm;
|
|
9322
8223
|
exports.ConsentActions = ConsentActions;
|
|
@@ -9334,13 +8235,10 @@ exports.ConsentText = ConsentText;
|
|
|
9334
8235
|
exports.ConversationListView = ConversationListView;
|
|
9335
8236
|
exports.ConversationTurnSpeaker = ConversationTurnSpeaker;
|
|
9336
8237
|
exports.CopyableUrl = CopyableUrl;
|
|
9337
|
-
exports.DEFAULT_AGENT_AVATAR_FIELD_LABELS = DEFAULT_AGENT_AVATAR_FIELD_LABELS;
|
|
9338
8238
|
exports.DEFAULT_AGENT_BAR_LABELS = DEFAULT_AGENT_BAR_LABELS;
|
|
9339
8239
|
exports.DEFAULT_AGENT_CARD_LABELS = DEFAULT_AGENT_CARD_LABELS;
|
|
9340
|
-
exports.DEFAULT_AGENT_CREATOR_LABELS = DEFAULT_AGENT_CREATOR_LABELS;
|
|
9341
8240
|
exports.DEFAULT_AGENT_GALLERY_LABELS = DEFAULT_AGENT_GALLERY_LABELS;
|
|
9342
8241
|
exports.DEFAULT_AGENT_STEPS_LABELS = DEFAULT_AGENT_STEPS_LABELS;
|
|
9343
|
-
exports.DEFAULT_AGENT_TYPE_SELECTOR_LABELS = DEFAULT_AGENT_TYPE_SELECTOR_LABELS;
|
|
9344
8242
|
exports.DEFAULT_AUTHORIZE_AGENT_LABELS = DEFAULT_AUTHORIZE_AGENT_LABELS;
|
|
9345
8243
|
exports.DEFAULT_CONFIG_FIELD_LABELS = DEFAULT_CONFIG_FIELD_LABELS;
|
|
9346
8244
|
exports.DEFAULT_CONFIG_FORM_LABELS = DEFAULT_CONFIG_FORM_LABELS;
|
|
@@ -9351,18 +8249,13 @@ exports.DEFAULT_PILL_SELECT_LABELS = DEFAULT_PILL_SELECT_LABELS;
|
|
|
9351
8249
|
exports.DEFAULT_RECURRENCE = DEFAULT_RECURRENCE;
|
|
9352
8250
|
exports.DEFAULT_RECURRENCE_BUILDER_LABELS = DEFAULT_RECURRENCE_BUILDER_LABELS;
|
|
9353
8251
|
exports.DEFAULT_SKILL_CARD_LABELS = DEFAULT_SKILL_CARD_LABELS;
|
|
9354
|
-
exports.DEFAULT_SKILL_EDIT_FORM_LABELS = DEFAULT_SKILL_EDIT_FORM_LABELS;
|
|
9355
|
-
exports.DEFAULT_SKILL_GENERATE_FORM_LABELS = DEFAULT_SKILL_GENERATE_FORM_LABELS;
|
|
9356
|
-
exports.DEFAULT_SKILL_GLOBAL_BADGE_LABELS = DEFAULT_SKILL_GLOBAL_BADGE_LABELS;
|
|
9357
8252
|
exports.DEFAULT_SKILL_ROW_LABELS = DEFAULT_SKILL_ROW_LABELS;
|
|
9358
|
-
exports.DEFAULT_SKILL_VIEW_TOGGLE_LABELS = DEFAULT_SKILL_VIEW_TOGGLE_LABELS;
|
|
9359
8253
|
exports.DEFAULT_SUBAGENT_ROSTER_LABELS = DEFAULT_SUBAGENT_ROSTER_LABELS;
|
|
9360
8254
|
exports.DEFAULT_TASKS_CHROME_LABELS = DEFAULT_TASKS_CHROME_LABELS;
|
|
9361
8255
|
exports.DEFAULT_TASK_COMPOSER_LABELS = DEFAULT_TASK_COMPOSER_LABELS;
|
|
9362
8256
|
exports.DEFAULT_TASK_LIST_LABELS = DEFAULT_TASK_LIST_LABELS;
|
|
9363
8257
|
exports.DEFAULT_TASK_OUTPUTS_CELL_LABELS = DEFAULT_TASK_OUTPUTS_CELL_LABELS;
|
|
9364
8258
|
exports.DEFAULT_TASK_PLAN_LABELS = DEFAULT_TASK_PLAN_LABELS;
|
|
9365
|
-
exports.DEFAULT_TASK_RUNS_DIALOG_LABELS = DEFAULT_TASK_RUNS_DIALOG_LABELS;
|
|
9366
8259
|
exports.DEFAULT_TASK_STATUS_PILL_LABELS = DEFAULT_TASK_STATUS_PILL_LABELS;
|
|
9367
8260
|
exports.DEFAULT_TASK_THREAD_CHIP_LABELS = DEFAULT_TASK_THREAD_CHIP_LABELS;
|
|
9368
8261
|
exports.DEFAULT_THREAD_LAUNCHER_LABELS = DEFAULT_THREAD_LAUNCHER_LABELS;
|
|
@@ -9384,18 +8277,8 @@ exports.RecurrenceBuilder = RecurrenceBuilder;
|
|
|
9384
8277
|
exports.STATUS_LABELS = STATUS_LABELS;
|
|
9385
8278
|
exports.STATUS_ORDER = STATUS_ORDER;
|
|
9386
8279
|
exports.STATUS_TONE = STATUS_TONE;
|
|
9387
|
-
exports.SkillActionButton = SkillActionButton;
|
|
9388
8280
|
exports.SkillCard = SkillCard;
|
|
9389
|
-
exports.SkillDetail = SkillDetail;
|
|
9390
|
-
exports.SkillDetailSection = SkillDetailSection;
|
|
9391
|
-
exports.SkillEditForm = SkillEditForm;
|
|
9392
|
-
exports.SkillFilterChips = SkillFilterChips;
|
|
9393
|
-
exports.SkillGenerateForm = SkillGenerateForm;
|
|
9394
|
-
exports.SkillGlobalBadge = SkillGlobalBadge;
|
|
9395
8281
|
exports.SkillRow = SkillRow;
|
|
9396
|
-
exports.SkillTile = SkillTile;
|
|
9397
|
-
exports.SkillTypeBadge = SkillTypeBadge;
|
|
9398
|
-
exports.SkillViewToggle = SkillViewToggle;
|
|
9399
8282
|
exports.StepDetail = StepDetail;
|
|
9400
8283
|
exports.StepNarration = StepNarration;
|
|
9401
8284
|
exports.StepOutcome = StepOutcome;
|
|
@@ -9409,14 +8292,12 @@ exports.SubStepGroup = SubStepGroup;
|
|
|
9409
8292
|
exports.SubagentRoster = SubagentRoster;
|
|
9410
8293
|
exports.TASK_COLUMN_ORDER = TASK_COLUMN_ORDER;
|
|
9411
8294
|
exports.TRIGGER_LABELS = TRIGGER_LABELS;
|
|
9412
|
-
exports.TaskActivityDialog = TaskActivityDialog;
|
|
9413
8295
|
exports.TaskComposer = TaskComposer;
|
|
9414
8296
|
exports.TaskFlow = TaskFlow;
|
|
9415
8297
|
exports.TaskInbox = TaskInbox;
|
|
9416
8298
|
exports.TaskMoveDialog = TaskMoveDialog;
|
|
9417
8299
|
exports.TaskOutputsCell = TaskOutputsCell;
|
|
9418
8300
|
exports.TaskPlan = TaskPlan;
|
|
9419
|
-
exports.TaskRunsDialog = TaskRunsDialog;
|
|
9420
8301
|
exports.TaskStartDialog = TaskStartDialog;
|
|
9421
8302
|
exports.TaskStatusPill = TaskStatusPill;
|
|
9422
8303
|
exports.TaskTable = TaskTable;
|
|
@@ -9434,14 +8315,11 @@ exports.WorkflowRunStatus = WorkflowRunStatus;
|
|
|
9434
8315
|
exports.WorkflowThreadStartedBy = WorkflowThreadStartedBy;
|
|
9435
8316
|
exports.WorkflowThreadStrip = WorkflowThreadStrip;
|
|
9436
8317
|
exports.WorkflowsToolbar = WorkflowsToolbar;
|
|
9437
|
-
exports.agentConfigSectionToValues = agentConfigSectionToValues;
|
|
9438
|
-
exports.agentCreatorToConfigSection = agentCreatorToConfigSection;
|
|
9439
8318
|
exports.asTaskStatus = asTaskStatus;
|
|
9440
8319
|
exports.authModeFor = authModeFor;
|
|
9441
8320
|
exports.buildRRule = buildRRule;
|
|
9442
8321
|
exports.buildTaskRows = buildTaskRows;
|
|
9443
8322
|
exports.compactThreadActivity = compactThreadActivity;
|
|
9444
|
-
exports.composePersona = composePersona;
|
|
9445
8323
|
exports.composerToTaskQuery = composerToTaskQuery;
|
|
9446
8324
|
exports.composerToWorkRequest = composerToWorkRequest;
|
|
9447
8325
|
exports.composerToWorkflowRequest = composerToWorkflowRequest;
|
|
@@ -9450,7 +8328,6 @@ exports.createTaskColumns = createTaskColumns;
|
|
|
9450
8328
|
exports.createsWork = createsWork;
|
|
9451
8329
|
exports.defaultScopeRenderer = defaultScopeRenderer;
|
|
9452
8330
|
exports.defaultTaskComposerValues = defaultTaskComposerValues;
|
|
9453
|
-
exports.deriveAgentName = deriveAgentName;
|
|
9454
8331
|
exports.deriveWorkflowName = deriveWorkflowName;
|
|
9455
8332
|
exports.descendantIds = descendantIds;
|
|
9456
8333
|
exports.describeRRule = describeRRule;
|
|
@@ -9467,7 +8344,6 @@ exports.inputDocumentIds = inputDocumentIds;
|
|
|
9467
8344
|
exports.isAgenticWorkflow = isAgenticWorkflow;
|
|
9468
8345
|
exports.isOutOfBounds = isOutOfBounds;
|
|
9469
8346
|
exports.isPlainTodo = isPlainTodo;
|
|
9470
|
-
exports.isValidAgentName = isValidAgentName;
|
|
9471
8347
|
exports.isoToLocalInput = isoToLocalInput;
|
|
9472
8348
|
exports.linkedRunsFromActivity = linkedRunsFromActivity;
|
|
9473
8349
|
exports.localInputToIso = localInputToIso;
|
|
@@ -9478,9 +8354,6 @@ exports.ownerExtId = ownerExtId;
|
|
|
9478
8354
|
exports.parseRRule = parseRRule;
|
|
9479
8355
|
exports.prettifyKey = prettifyKey;
|
|
9480
8356
|
exports.resolveScopeInputs = resolveScopeInputs;
|
|
9481
|
-
exports.stripPersonaPreamble = stripPersonaPreamble;
|
|
9482
|
-
exports.summarizeAgent = summarizeAgent;
|
|
9483
|
-
exports.summarizeCapabilities = summarizeCapabilities;
|
|
9484
8357
|
exports.taskComposerToCreateRequest = taskComposerToCreateRequest;
|
|
9485
8358
|
exports.taskComposerToUpdateRequest = taskComposerToUpdateRequest;
|
|
9486
8359
|
exports.taskNeedsAccess = taskNeedsAccess;
|
|
@@ -9489,5 +8362,5 @@ exports.useWorkflowPreview = useWorkflowPreview;
|
|
|
9489
8362
|
exports.workflowTaskFields = workflowTaskFields;
|
|
9490
8363
|
exports.workflowToComposerValues = workflowToComposerValues;
|
|
9491
8364
|
exports.workflowWhen = workflowWhen;
|
|
9492
|
-
//# sourceMappingURL=chunk-
|
|
9493
|
-
//# sourceMappingURL=chunk-
|
|
8365
|
+
//# sourceMappingURL=chunk-5UXDUOOB.cjs.map
|
|
8366
|
+
//# sourceMappingURL=chunk-5UXDUOOB.cjs.map
|