@arbidocs/blocks 0.4.136 → 0.4.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/agents/index.cjs +384 -353
  2. package/dist/agents/index.js +8 -9
  3. package/dist/agents/skills/SkillLibraryDetail.d.ts +26 -0
  4. package/dist/agents/skills/index.d.ts +2 -0
  5. package/dist/agents/skills/skillLibrary.d.ts +46 -0
  6. package/dist/agents/workflows/WorkflowDocumentsField.d.ts +42 -5
  7. package/dist/agents/workflows/index.d.ts +2 -2
  8. package/dist/agents/workflows/workspaceScope.d.ts +12 -0
  9. package/dist/calls/index.cjs +3 -3
  10. package/dist/calls/index.js +2 -2
  11. package/dist/chunk-2KUCVSFF.js +51 -0
  12. package/dist/chunk-2KUCVSFF.js.map +1 -0
  13. package/dist/{chunk-LIHRGG4M.cjs → chunk-3BI6EWKP.cjs} +2022 -89
  14. package/dist/chunk-3BI6EWKP.cjs.map +1 -0
  15. package/dist/{chunk-3FFRYZKV.js → chunk-3RJN2VTL.js} +36 -6
  16. package/dist/chunk-3RJN2VTL.js.map +1 -0
  17. package/dist/{chunk-OR4CO743.cjs → chunk-AAFX64WD.cjs} +3 -3
  18. package/dist/{chunk-OR4CO743.cjs.map → chunk-AAFX64WD.cjs.map} +1 -1
  19. package/dist/chunk-CQCC7LE7.js +210 -0
  20. package/dist/chunk-CQCC7LE7.js.map +1 -0
  21. package/dist/{chunk-ZAVEMQ37.cjs → chunk-DWZXSPMB.cjs} +3 -3
  22. package/dist/{chunk-ZAVEMQ37.cjs.map → chunk-DWZXSPMB.cjs.map} +1 -1
  23. package/dist/{chunk-VIU7AMHF.js → chunk-E5OYHJMU.js} +3 -3
  24. package/dist/{chunk-VIU7AMHF.js.map → chunk-E5OYHJMU.js.map} +1 -1
  25. package/dist/{chunk-RUB62J2X.js → chunk-ED4HHTIA.js} +3 -3
  26. package/dist/{chunk-RUB62J2X.js.map → chunk-ED4HHTIA.js.map} +1 -1
  27. package/dist/{chunk-5HFPRI3W.js → chunk-FUTMU4FR.js} +3 -3
  28. package/dist/{chunk-5HFPRI3W.js.map → chunk-FUTMU4FR.js.map} +1 -1
  29. package/dist/{chunk-C44D4WFG.cjs → chunk-HLB4DIYV.cjs} +3 -3
  30. package/dist/{chunk-C44D4WFG.cjs.map → chunk-HLB4DIYV.cjs.map} +1 -1
  31. package/dist/{chunk-N55UIXVT.cjs → chunk-JVL7HUIQ.cjs} +5 -5
  32. package/dist/{chunk-N55UIXVT.cjs.map → chunk-JVL7HUIQ.cjs.map} +1 -1
  33. package/dist/{chunk-6S5FLMWG.js → chunk-KSHKTOY2.js} +203 -7
  34. package/dist/chunk-KSHKTOY2.js.map +1 -0
  35. package/dist/{chunk-OZLWSNUC.cjs → chunk-MJKBVIV3.cjs} +83 -1650
  36. package/dist/chunk-MJKBVIV3.cjs.map +1 -0
  37. package/dist/{chunk-DJM7DLCT.cjs → chunk-OPTBQSCV.cjs} +3 -3
  38. package/dist/{chunk-DJM7DLCT.cjs.map → chunk-OPTBQSCV.cjs.map} +1 -1
  39. package/dist/{chunk-GFYGYME3.js → chunk-OQ7RUNOC.js} +3 -3
  40. package/dist/{chunk-GFYGYME3.js.map → chunk-OQ7RUNOC.js.map} +1 -1
  41. package/dist/chunk-RFIBUWLF.cjs +232 -0
  42. package/dist/chunk-RFIBUWLF.cjs.map +1 -0
  43. package/dist/{chunk-N26CXGXC.cjs → chunk-RQ2Y7USX.cjs} +201 -3
  44. package/dist/chunk-RQ2Y7USX.cjs.map +1 -0
  45. package/dist/{chunk-LT2X5N37.js → chunk-UBEI6WFJ.js} +58 -1592
  46. package/dist/chunk-UBEI6WFJ.js.map +1 -0
  47. package/dist/chunk-UUHUQHXR.cjs +56 -0
  48. package/dist/chunk-UUHUQHXR.cjs.map +1 -0
  49. package/dist/{chunk-ECERC6TI.js → chunk-VHJHY7TT.js} +3 -3
  50. package/dist/{chunk-ECERC6TI.js.map → chunk-VHJHY7TT.js.map} +1 -1
  51. package/dist/{chunk-44R3CCZT.cjs → chunk-WS5EX7DN.cjs} +37 -6
  52. package/dist/chunk-WS5EX7DN.cjs.map +1 -0
  53. package/dist/{chunk-IQU2GI6V.js → chunk-XVME4XYD.js} +1982 -93
  54. package/dist/chunk-XVME4XYD.js.map +1 -0
  55. package/dist/collaboration/index.cjs +42 -42
  56. package/dist/collaboration/index.js +2 -2
  57. package/dist/connect/docx.cjs +5 -5
  58. package/dist/connect/docx.js +4 -4
  59. package/dist/connect/index.cjs +710 -51
  60. package/dist/connect/index.cjs.map +1 -1
  61. package/dist/connect/index.d.ts +4 -0
  62. package/dist/connect/index.js +655 -20
  63. package/dist/connect/index.js.map +1 -1
  64. package/dist/connection/ConnectedSkillsLibrary.d.ts +26 -0
  65. package/dist/connection/ConnectedWorkflowBuilder.d.ts +1 -1
  66. package/dist/connection/ConnectedWorkflowLauncher.d.ts +35 -0
  67. package/dist/connection/ConnectedWorkflowsTable.d.ts +62 -0
  68. package/dist/connection/workspaceData.d.ts +45 -0
  69. package/dist/facts/index.cjs +2 -2
  70. package/dist/facts/index.js +2 -2
  71. package/dist/files/index.cjs +3 -3
  72. package/dist/files/index.js +3 -3
  73. package/dist/home/index.cjs +22 -23
  74. package/dist/home/index.cjs.map +1 -1
  75. package/dist/home/index.js +4 -5
  76. package/dist/home/index.js.map +1 -1
  77. package/dist/index.cjs +503 -472
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.js +12 -13
  80. package/dist/index.js.map +1 -1
  81. package/dist/retrieval/index.cjs +1 -1
  82. package/dist/retrieval/index.js +1 -1
  83. package/dist/settings/index.cjs +49 -49
  84. package/dist/settings/index.js +6 -6
  85. package/dist/shell/index.cjs +2 -2
  86. package/dist/shell/index.js +2 -2
  87. package/dist/studio/index.cjs +2 -2
  88. package/dist/studio/index.js +2 -2
  89. package/dist/workflow-canvas/index.cjs +32 -30
  90. package/dist/workflow-canvas/index.cjs.map +1 -1
  91. package/dist/workflow-canvas/index.js +20 -18
  92. package/dist/workflow-canvas/index.js.map +1 -1
  93. package/node_modules/@arbidocs/coedit/package.json +1 -1
  94. package/package.json +4 -4
  95. package/dist/chunk-3FFRYZKV.js.map +0 -1
  96. package/dist/chunk-44R3CCZT.cjs.map +0 -1
  97. package/dist/chunk-4XJZ6AAY.js +0 -407
  98. package/dist/chunk-4XJZ6AAY.js.map +0 -1
  99. package/dist/chunk-6S5FLMWG.js.map +0 -1
  100. package/dist/chunk-7D737FLE.cjs +0 -43
  101. package/dist/chunk-7D737FLE.cjs.map +0 -1
  102. package/dist/chunk-IQU2GI6V.js.map +0 -1
  103. package/dist/chunk-LIHRGG4M.cjs.map +0 -1
  104. package/dist/chunk-LT2X5N37.js.map +0 -1
  105. package/dist/chunk-N26CXGXC.cjs.map +0 -1
  106. package/dist/chunk-OZLWSNUC.cjs.map +0 -1
  107. package/dist/chunk-S5HZBXZA.cjs +0 -430
  108. package/dist/chunk-S5HZBXZA.cjs.map +0 -1
  109. package/dist/chunk-XD2M6LIG.js +0 -41
  110. package/dist/chunk-XD2M6LIG.js.map +0 -1
@@ -1,31 +1,33 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkOR4CO743_cjs = require('../chunk-OR4CO743.cjs');
4
+ var chunkAAFX64WD_cjs = require('../chunk-AAFX64WD.cjs');
5
5
  var chunkIE5CUCZK_cjs = require('../chunk-IE5CUCZK.cjs');
6
- var chunkC44D4WFG_cjs = require('../chunk-C44D4WFG.cjs');
6
+ var chunkUUHUQHXR_cjs = require('../chunk-UUHUQHXR.cjs');
7
+ var chunkHLB4DIYV_cjs = require('../chunk-HLB4DIYV.cjs');
7
8
  var chunkKDUGTKVI_cjs = require('../chunk-KDUGTKVI.cjs');
8
9
  var chunkJH6JTI76_cjs = require('../chunk-JH6JTI76.cjs');
9
10
  require('../chunk-S24XEVPS.cjs');
10
11
  require('../chunk-V5OAXIBN.cjs');
11
12
  require('../chunk-5FYU7ZIU.cjs');
12
13
  var chunkO4YPVYPO_cjs = require('../chunk-O4YPVYPO.cjs');
13
- var chunkN55UIXVT_cjs = require('../chunk-N55UIXVT.cjs');
14
+ var chunkJVL7HUIQ_cjs = require('../chunk-JVL7HUIQ.cjs');
14
15
  var chunkO6IEZDRC_cjs = require('../chunk-O6IEZDRC.cjs');
15
16
  var chunkI2QSDQQV_cjs = require('../chunk-I2QSDQQV.cjs');
16
17
  require('../chunk-RC25WMVB.cjs');
17
- var chunkLIHRGG4M_cjs = require('../chunk-LIHRGG4M.cjs');
18
- require('../chunk-7D737FLE.cjs');
19
- var chunkN26CXGXC_cjs = require('../chunk-N26CXGXC.cjs');
18
+ var chunk3BI6EWKP_cjs = require('../chunk-3BI6EWKP.cjs');
19
+ require('../chunk-WS5EX7DN.cjs');
20
+ var chunkRQ2Y7USX_cjs = require('../chunk-RQ2Y7USX.cjs');
21
+ require('../chunk-ZW6FPIFC.cjs');
20
22
  require('../chunk-DETZZBG2.cjs');
23
+ require('../chunk-R26BK7YL.cjs');
24
+ require('../chunk-V4ISCZJ7.cjs');
21
25
  var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
22
26
  require('../chunk-C2CWWEHO.cjs');
23
27
  var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
24
28
  require('../chunk-ADOKTJHV.cjs');
25
- var chunkZAVEMQ37_cjs = require('../chunk-ZAVEMQ37.cjs');
29
+ var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
26
30
  var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
27
- var chunkC4WSHRR6_cjs = require('../chunk-C4WSHRR6.cjs');
28
- var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
29
31
  var chunk7YLJHTDC_cjs = require('../chunk-7YLJHTDC.cjs');
30
32
  require('../chunk-B6MVQCXW.cjs');
31
33
  var chunkJKB7WT7L_cjs = require('../chunk-JKB7WT7L.cjs');
@@ -35,6 +37,8 @@ require('../chunk-32HW2Q33.cjs');
35
37
  require('../chunk-FX3K6LNZ.cjs');
36
38
  require('../chunk-PPCATBOY.cjs');
37
39
  require('../chunk-MHVNT4J3.cjs');
40
+ var chunkC4WSHRR6_cjs = require('../chunk-C4WSHRR6.cjs');
41
+ var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
38
42
  var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
39
43
  require('../chunk-DES3K4SD.cjs');
40
44
  var react = require('react');
@@ -42,9 +46,9 @@ var reactQuery = require('@tanstack/react-query');
42
46
  var react$1 = require('@arbidocs/react');
43
47
  var jsxRuntime = require('react/jsx-runtime');
44
48
  var ui = require('@arbidocs/react/ui');
49
+ var documentTools = require('@arbidocs/react/document-tools');
45
50
  var lucideReact = require('lucide-react');
46
51
  var artifacts = require('@arbidocs/react/artifacts');
47
- var documentTools = require('@arbidocs/react/document-tools');
48
52
  var shell = require('@arbidocs/react/shell');
49
53
  var client = require('@arbidocs/client');
50
54
  var reactDom = require('react-dom');
@@ -125,7 +129,7 @@ function ConnectedWorkspaceActivity({
125
129
  [feed.data]
126
130
  );
127
131
  return /* @__PURE__ */ jsxRuntime.jsx(
128
- chunkN55UIXVT_cjs.WorkspaceActivityList,
132
+ chunkJVL7HUIQ_cjs.WorkspaceActivityList,
129
133
  {
130
134
  ...listProps,
131
135
  items,
@@ -151,7 +155,7 @@ function ConnectedWorkspaceNotificationMenu({
151
155
  });
152
156
  if (!workspaceId) return null;
153
157
  return /* @__PURE__ */ jsxRuntime.jsx(
154
- chunkN55UIXVT_cjs.WorkspaceNotificationMenu,
158
+ chunkJVL7HUIQ_cjs.WorkspaceNotificationMenu,
155
159
  {
156
160
  ...menuProps,
157
161
  level,
@@ -170,7 +174,7 @@ function ConnectedThreadFollow({
170
174
  enabled: status === "authenticated"
171
175
  });
172
176
  if (!conversationId) return null;
173
- const Control = as === "menu-item" ? chunkN55UIXVT_cjs.ThreadFollowMenuItem : chunkN55UIXVT_cjs.ThreadFollowButton;
177
+ const Control = as === "menu-item" ? chunkJVL7HUIQ_cjs.ThreadFollowMenuItem : chunkJVL7HUIQ_cjs.ThreadFollowButton;
174
178
  return /* @__PURE__ */ jsxRuntime.jsx(
175
179
  Control,
176
180
  {
@@ -181,6 +185,255 @@ function ConnectedThreadFollow({
181
185
  }
182
186
  );
183
187
  }
188
+ function useConnectedWorkspaceRole() {
189
+ const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkKDUGTKVI_cjs.useConnectedWorkspace();
190
+ const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
191
+ enabled: live && !!workspaceId,
192
+ beforeFetch: ensureWorkspaceOpen
193
+ });
194
+ const role = members.find((m) => m.user.external_id === userId)?.role;
195
+ return {
196
+ members,
197
+ role,
198
+ /** An owner or a collaborator edits, pauses, resumes and runs what is shared with the workspace. */
199
+ canEditShared: role === "owner" || role === "collaborator",
200
+ /** With an item's creator, the only one who deletes it. */
201
+ isWorkspaceOwner: role === "owner"
202
+ };
203
+ }
204
+ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
205
+ updateFailed: "Could not update the workflow",
206
+ deleteTitle: "Delete workflow",
207
+ deleteOne: (name) => `Delete \u201C${name}\u201D? Threads it already created stay.`,
208
+ deleteMany: (count) => `Delete ${count} workflows? Threads they already created stay.`,
209
+ runFailed: "The workflow failed. You can send an error report from its history.",
210
+ noThread: "The workflow did not create a thread.",
211
+ documentAction: (workflow) => workflow.action?.type === "email_documents" ? "Preparing your document email" : "Reviewing documents",
212
+ untitledTask: "Untitled thread"
213
+ };
214
+ var messageOf = (error) => error instanceof Error ? error.message : "";
215
+ function ConnectedWorkflowsTable({
216
+ filter,
217
+ describeTrigger = (w) => chunk3BI6EWKP_cjs.workflowTriggerType(w).replaceAll("_", " "),
218
+ formatDate = chunkKDG6FER6_cjs.fmtDate,
219
+ onViewRuns,
220
+ connectedLabels,
221
+ ...tableProps
222
+ }) {
223
+ const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
224
+ const { notify, confirm, openConversation } = chunkC4WSHRR6_cjs.useBlocksEnvironment();
225
+ const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
226
+ const { data: saved = [], isLoading } = react$1.useWorkflows({ live: true });
227
+ const { data: conversations, refetch } = chunkUUHUQHXR_cjs.useConnectedConversations({ live: true });
228
+ const { data: agents = [] } = react$1.useAgents();
229
+ const update = react$1.useUpdateWorkflow();
230
+ const remove = react$1.useDeleteWorkflow();
231
+ const run = react$1.useRunWorkflow();
232
+ const [busyId, setBusyId] = react.useState(null);
233
+ const workflows = react.useMemo(() => filter ? saved.filter(filter) : saved, [saved, filter]);
234
+ const firingStamp = saved.map((w) => `${w.external_id}:${w.last_fired_at ?? ""}`).join("|");
235
+ react.useEffect(() => {
236
+ void refetch?.();
237
+ }, [firingStamp, refetch]);
238
+ const lastRuns = react.useMemo(() => {
239
+ const out = {};
240
+ for (const c of conversations) {
241
+ const id = c.workflow_ext_id;
242
+ if (id && (!out[id] || Date.parse(c.created_at) > Date.parse(out[id].at)))
243
+ out[id] = { conversationId: c.external_id, at: c.created_at, threadStatus: c.status };
244
+ }
245
+ return out;
246
+ }, [conversations]);
247
+ const agentNames = react.useMemo(
248
+ () => Object.fromEntries(agents.map((a) => [a.external_id, a.given_name || a.email])),
249
+ [agents]
250
+ );
251
+ const taskNames = react.useMemo(
252
+ () => Object.fromEntries(
253
+ conversations.filter((c) => c.status != null).map((c) => [c.external_id, c.title || l.untitledTask])
254
+ ),
255
+ [conversations, l.untitledTask]
256
+ );
257
+ const act = async (workflow, action) => {
258
+ setBusyId(workflow.external_id);
259
+ try {
260
+ await action();
261
+ } catch (error) {
262
+ notify(messageOf(error) || l.updateFailed, "error");
263
+ } finally {
264
+ setBusyId(null);
265
+ }
266
+ };
267
+ const setActive = (workflow, active) => act(workflow, () => update.mutateAsync({ workflowId: workflow.external_id, patch: { active } }));
268
+ const deleteAll = async (items) => {
269
+ if (!items.length) return;
270
+ const ok = await confirm({
271
+ title: l.deleteTitle,
272
+ message: items.length === 1 ? l.deleteOne(items[0].name) : l.deleteMany(items.length)
273
+ });
274
+ if (!ok) return;
275
+ for (const workflow of items)
276
+ await act(workflow, () => remove.mutateAsync(workflow.external_id));
277
+ };
278
+ return /* @__PURE__ */ jsxRuntime.jsx(
279
+ chunk3BI6EWKP_cjs.WorkflowsTable,
280
+ {
281
+ ...tableProps,
282
+ workflows,
283
+ isLoading,
284
+ busyId,
285
+ describeTrigger,
286
+ formatDate,
287
+ agentNames,
288
+ taskNames,
289
+ lastRuns,
290
+ canEditShared,
291
+ isWorkspaceOwner,
292
+ onOpenThread: (conversationId) => openConversation(conversationId),
293
+ onViewRuns,
294
+ onToggleActive: (workflow, active) => void setActive(workflow, active),
295
+ onToggleActiveMany: (items, active) => {
296
+ void (async () => {
297
+ for (const workflow of items) await setActive(workflow, active);
298
+ })();
299
+ },
300
+ onToggleShared: (workflow, shared) => void act(
301
+ workflow,
302
+ () => update.mutateAsync({ workflowId: workflow.external_id, patch: { shared } })
303
+ ),
304
+ onDelete: (workflow) => void deleteAll([workflow]),
305
+ onDeleteMany: (items) => void deleteAll(items),
306
+ onRun: (workflow) => void act(workflow, async () => {
307
+ const result = await run.mutateAsync(workflow.external_id);
308
+ if (result.conversation_ext_id) openConversation(result.conversation_ext_id);
309
+ if (result.error) {
310
+ onViewRuns?.(workflow);
311
+ notify(l.runFailed, "error");
312
+ return;
313
+ }
314
+ if (result.execution_id && !result.conversation_ext_id) {
315
+ onViewRuns?.(workflow);
316
+ notify(l.documentAction(workflow), "success");
317
+ return;
318
+ }
319
+ if (!result.conversation_ext_id) throw new Error(l.noThread);
320
+ })
321
+ }
322
+ );
323
+ }
324
+ var IMAGE_FILE_TYPES = /* @__PURE__ */ new Set(["png", "jpg", "jpeg", "gif", "bmp", "tiff", "webp"]);
325
+ function toWorkflowFieldDocument(doc) {
326
+ const isImage = IMAGE_FILE_TYPES.has((doc.file_type ?? "").toLowerCase());
327
+ return {
328
+ id: doc.external_id,
329
+ title: doc.doc_metadata?.title || doc.file_name || doc.external_id,
330
+ fileName: doc.file_name,
331
+ pages: isImage ? null : doc.n_pages ?? null,
332
+ tokens: isImage ? null : doc.tokens ?? null,
333
+ status: doc.status,
334
+ isImage
335
+ };
336
+ }
337
+ function useConnectedWorkflowScopeSource() {
338
+ const { data: docs } = chunkUUHUQHXR_cjs.useConnectedDocuments();
339
+ const { data: tags } = chunkUUHUQHXR_cjs.useConnectedTags();
340
+ return react.useMemo(() => chunk3BI6EWKP_cjs.buildWorkflowScopeSource(docs, chunk3BI6EWKP_cjs.documentScopeLabels(tags)), [docs, tags]);
341
+ }
342
+ function useConnectedAgentOptions() {
343
+ const { data: agents } = react$1.useAgents();
344
+ return react.useMemo(
345
+ () => (agents ?? []).map((a) => ({ id: a.external_id, label: a.given_name || a.email })),
346
+ [agents]
347
+ );
348
+ }
349
+ function ConnectedWorkflowDocumentsField({
350
+ field,
351
+ value,
352
+ onChange,
353
+ onAddFiles,
354
+ labels
355
+ }) {
356
+ const arbi = react$1.useArbi();
357
+ const { notify } = chunkC4WSHRR6_cjs.useBlocksEnvironment();
358
+ const { ensureWorkspaceOpen } = chunkKDUGTKVI_cjs.useConnectedWorkspace();
359
+ const { data: docs, loaded, refetch } = chunkUUHUQHXR_cjs.useConnectedDocuments();
360
+ const documents = react.useMemo(() => docs.map(toWorkflowFieldDocument), [docs]);
361
+ const chosen = value.documents ?? [];
362
+ const { data: thumbnails } = react$1.useThumbnails(chosen, { enabled: (field.max ?? 1) > 1 });
363
+ const input = react.useRef(null);
364
+ const [adding, setAdding] = react.useState(false);
365
+ const upload = react.useCallback(
366
+ async (files) => {
367
+ setAdding(true);
368
+ try {
369
+ await ensureWorkspaceOpen();
370
+ for (const file of files) await arbi.documents.uploadFile(file, file.name);
371
+ } catch (error) {
372
+ notify(error instanceof Error && error.message ? error.message : String(error), "error");
373
+ } finally {
374
+ setAdding(false);
375
+ await refetch?.();
376
+ }
377
+ },
378
+ [arbi, ensureWorkspaceOpen, notify, refetch]
379
+ );
380
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
381
+ !onAddFiles && /* @__PURE__ */ jsxRuntime.jsx(
382
+ "input",
383
+ {
384
+ ref: input,
385
+ type: "file",
386
+ multiple: true,
387
+ className: "hidden",
388
+ "aria-label": "Add files",
389
+ "data-testid": "workflow-add-files-input",
390
+ onChange: (e) => {
391
+ const files = Array.from(e.target.files ?? []);
392
+ e.target.value = "";
393
+ if (files.length) void upload(files);
394
+ }
395
+ }
396
+ ),
397
+ /* @__PURE__ */ jsxRuntime.jsx(
398
+ chunk3BI6EWKP_cjs.WorkflowDocumentsField,
399
+ {
400
+ field,
401
+ value,
402
+ onChange,
403
+ documents,
404
+ loaded,
405
+ thumbnailOf: (id) => thumbnails?.[id],
406
+ onAddFiles: onAddFiles ?? ((files) => files?.length ? void upload(files) : input.current?.click()),
407
+ adding,
408
+ labels
409
+ }
410
+ )
411
+ ] });
412
+ }
413
+ function ConnectedWorkflowLauncher({
414
+ onAddFiles,
415
+ ...props
416
+ }) {
417
+ const scopeSource = useConnectedWorkflowScopeSource();
418
+ const agents = useConnectedAgentOptions();
419
+ return /* @__PURE__ */ jsxRuntime.jsx(
420
+ chunk3BI6EWKP_cjs.WorkflowLauncher,
421
+ {
422
+ ...props,
423
+ scopeSource,
424
+ agents,
425
+ renderDocuments: (field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
426
+ ConnectedWorkflowDocumentsField,
427
+ {
428
+ field,
429
+ value,
430
+ onChange,
431
+ onAddFiles
432
+ }
433
+ )
434
+ }
435
+ );
436
+ }
184
437
  var DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS = {
185
438
  title: "Add a skill",
186
439
  description: "Bring in a skill someone sent you, from a file or a link.",
@@ -243,7 +496,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
243
496
  onChange: (e) => {
244
497
  const file = e.target.files?.[0];
245
498
  e.target.value = "";
246
- if (file) void add(() => chunkLIHRGG4M_cjs.importSkillFile(file));
499
+ if (file) void add(() => chunk3BI6EWKP_cjs.importSkillFile(file));
247
500
  }
248
501
  }
249
502
  ),
@@ -268,7 +521,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
268
521
  className: "space-y-2",
269
522
  onSubmit: (e) => {
270
523
  e.preventDefault();
271
- if (url.trim()) void add(() => chunkLIHRGG4M_cjs.importSkillFromUrl(url));
524
+ if (url.trim()) void add(() => chunk3BI6EWKP_cjs.importSkillFromUrl(url));
272
525
  },
273
526
  children: [
274
527
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "skills-add-url", children: l.fromLink }),
@@ -307,6 +560,387 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
307
560
  }
308
561
  );
309
562
  }
563
+ var SKILL_FOLDER = "skills/";
564
+ var NAME_PATTERN = /^[a-z0-9-]{1,64}$/;
565
+ var icon = /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "SKILL" });
566
+ var errorText = (error, fallback) => error instanceof Error && error.message ? error.message : fallback;
567
+ var statusOf = (error) => error && typeof error === "object" && "status" in error ? error.status : void 0;
568
+ function ConnectedSkillsLibrary({
569
+ builtins = [],
570
+ initialSlug,
571
+ onRun,
572
+ onDraft,
573
+ renderEditor
574
+ }) {
575
+ const arbi = react$1.useArbi();
576
+ const { confirm, notify } = chunkC4WSHRR6_cjs.useBlocksEnvironment();
577
+ const { data: listings } = react$1.useSkills();
578
+ const upload = react$1.useUploadSkillFiles();
579
+ const setVisibility = react$1.useSetSkillVisibility();
580
+ const deleteSkill = react$1.useDeleteSkill();
581
+ const [mode, setMode] = react.useState("detail");
582
+ const [selected, setSelected] = react.useState(initialSlug ?? null);
583
+ const [query, setQuery] = react.useState("");
584
+ const [source, setSource] = react.useState("all");
585
+ const [type, setType] = react.useState("all");
586
+ const [view, setView] = react.useState("gallery");
587
+ const [isBusy, setIsBusy] = react.useState(false);
588
+ const all = react.useMemo(() => chunk3BI6EWKP_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
589
+ const shown = react.useMemo(
590
+ () => chunk3BI6EWKP_cjs.filterLibrarySkills(all, { query, source, type }),
591
+ [all, query, source, type]
592
+ );
593
+ const current = all.find((s) => s.slug === selected) ?? null;
594
+ const { data: currentText, isLoading: textLoading } = react$1.useSkillSource(current?.docExtId);
595
+ react.useEffect(() => {
596
+ if (selected && !current && all.length > 0) setSelected(null);
597
+ }, [selected, current, all.length]);
598
+ const count = (s) => all.filter((x) => x.source === s).length;
599
+ const sourceOptions = [
600
+ { id: "all", label: "All", count: all.length },
601
+ { id: "builtin", label: chunk3BI6EWKP_cjs.SKILL_SOURCE_LABELS.builtin, count: count("builtin") },
602
+ { id: "mine", label: chunk3BI6EWKP_cjs.SKILL_SOURCE_LABELS.mine, count: count("mine") },
603
+ { id: "shared", label: chunk3BI6EWKP_cjs.SKILL_SOURCE_LABELS.shared, count: count("shared") }
604
+ ];
605
+ const types = [...new Set(all.map((s) => s.type))];
606
+ const typeOptions = [
607
+ { id: "all", label: "Any kind" },
608
+ ...types.map((t) => ({ id: t, label: chunk3BI6EWKP_cjs.SKILL_TYPE_LABELS[t] ?? t }))
609
+ ];
610
+ const pick = (slug) => {
611
+ setSelected(slug);
612
+ setMode("detail");
613
+ };
614
+ const markdownOf = async (skill) => {
615
+ if (!skill.docExtId) return chunk3BI6EWKP_cjs.workflowToSkillMarkdown(skill.workflow);
616
+ const response = await arbi.documents.download(skill.docExtId);
617
+ if (!response.ok) throw new Error(`Could not read the skill (${response.status})`);
618
+ return response.text();
619
+ };
620
+ const saveAs = (slug, markdown, shared = false) => upload.mutateAsync([
621
+ {
622
+ folder: `${SKILL_FOLDER}${slug}`,
623
+ fileName: chunk3BI6EWKP_cjs.SKILL_MAIN_FILENAME,
624
+ content: new Blob([markdown], { type: "text/markdown" }),
625
+ shared
626
+ }
627
+ ]);
628
+ const busy = async (work) => {
629
+ setIsBusy(true);
630
+ try {
631
+ await work();
632
+ } finally {
633
+ setIsBusy(false);
634
+ }
635
+ };
636
+ const makeCopy = (skill) => busy(async () => {
637
+ try {
638
+ await saveAs(skill.slug, await markdownOf(skill));
639
+ notify(
640
+ "Your copy is ready. It is used instead of the original; delete it to go back.",
641
+ "success"
642
+ );
643
+ setSelected(skill.slug);
644
+ } catch (error) {
645
+ notify(errorText(error, "Could not make a copy"), "error");
646
+ }
647
+ });
648
+ const toggleShare = (skill) => {
649
+ if (!skill.docExtId) return;
650
+ const docExtId = skill.docExtId;
651
+ const next = skill.isShared ? "mine" : "global";
652
+ return busy(async () => {
653
+ try {
654
+ await setVisibility.mutateAsync({ docExtId, visibility: next });
655
+ notify(next === "global" ? "Shared with everyone" : "Made private", "success");
656
+ } catch (error) {
657
+ notify(
658
+ statusOf(error) === 409 || errorText(error, "").includes("409") ? "Someone has already shared a skill with this name. Rename yours first." : "Could not change who can see this skill",
659
+ "error"
660
+ );
661
+ }
662
+ });
663
+ };
664
+ const remove = async (skill) => {
665
+ if (!skill.docExtId) return;
666
+ const docExtId = skill.docExtId;
667
+ const ok = await confirm({
668
+ message: skill.replacesBuiltin ? `Delete your copy of "${skill.title}"? The original will be used again.` : `Delete "${skill.title}"? This cannot be undone.`,
669
+ title: "Delete skill"
670
+ });
671
+ if (!ok) return;
672
+ await busy(async () => {
673
+ try {
674
+ await deleteSkill.mutateAsync(docExtId);
675
+ notify(`${skill.title} deleted`, "success");
676
+ setSelected(null);
677
+ } catch {
678
+ notify("Could not delete the skill", "error");
679
+ }
680
+ });
681
+ };
682
+ const exportFile = async (skill) => {
683
+ try {
684
+ documentTools.downloadBlob(
685
+ new Blob([await markdownOf(skill)], { type: "text/markdown" }),
686
+ chunk3BI6EWKP_cjs.SKILL_MAIN_FILENAME
687
+ );
688
+ } catch (error) {
689
+ notify(errorText(error, "Could not export the skill"), "error");
690
+ }
691
+ };
692
+ const rightVisible = mode !== "detail" || current !== null;
693
+ const backToList = () => {
694
+ setMode("detail");
695
+ setSelected(null);
696
+ };
697
+ const done = (slug) => {
698
+ if (slug) setSelected(slug);
699
+ setMode("detail");
700
+ };
701
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 border-t border-border", children: [
702
+ /* @__PURE__ */ jsxRuntime.jsxs(
703
+ "div",
704
+ {
705
+ className: ui.cn(
706
+ "flex min-h-0 w-full flex-col md:w-[26rem] md:shrink-0 md:border-r md:border-border",
707
+ rightVisible && "max-md:hidden"
708
+ ),
709
+ "data-testid": "skills-list-pane",
710
+ children: [
711
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 p-3", children: [
712
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
713
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-w-0 flex-1", children: [
714
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
715
+ /* @__PURE__ */ jsxRuntime.jsx(
716
+ ui.Input,
717
+ {
718
+ value: query,
719
+ onChange: (e) => setQuery(e.target.value),
720
+ placeholder: "Search skills",
721
+ "aria-label": "Search skills",
722
+ className: "pl-9 pointer-coarse:min-h-11",
723
+ "data-testid": "skills-browser-search"
724
+ }
725
+ )
726
+ ] }),
727
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BI6EWKP_cjs.SkillViewToggle, { value: view, onChange: setView })
728
+ ] }),
729
+ /* @__PURE__ */ jsxRuntime.jsx(
730
+ chunk3BI6EWKP_cjs.SkillFilterChips,
731
+ {
732
+ label: "Show",
733
+ value: source,
734
+ onChange: (id) => setSource(id),
735
+ options: sourceOptions
736
+ }
737
+ ),
738
+ types.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
739
+ chunk3BI6EWKP_cjs.SkillFilterChips,
740
+ {
741
+ label: "Kind",
742
+ value: type,
743
+ onChange: setType,
744
+ options: typeOptions,
745
+ testIdPrefix: "skills-type"
746
+ }
747
+ ),
748
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
749
+ /* @__PURE__ */ jsxRuntime.jsxs(
750
+ ui.Button,
751
+ {
752
+ size: "sm",
753
+ onClick: () => setMode("new"),
754
+ className: "pointer-coarse:min-h-11",
755
+ "data-testid": "skills-new",
756
+ children: [
757
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-1 size-4" }),
758
+ "New skill"
759
+ ]
760
+ }
761
+ ),
762
+ /* @__PURE__ */ jsxRuntime.jsxs(
763
+ ui.Button,
764
+ {
765
+ size: "sm",
766
+ variant: "outline",
767
+ onClick: () => setMode("add"),
768
+ className: "pointer-coarse:min-h-11",
769
+ "data-testid": "skills-add",
770
+ children: [
771
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { className: "mr-1 size-4" }),
772
+ "Add a skill"
773
+ ]
774
+ }
775
+ )
776
+ ] })
777
+ ] }),
778
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto px-3 pb-3", "data-testid": "skills-list", children: shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "py-10 text-center text-sm text-muted-foreground", children: "No skills match. Try another word or filter." }) : /* @__PURE__ */ jsxRuntime.jsx(
779
+ "div",
780
+ {
781
+ className: ui.cn(
782
+ "gap-2",
783
+ view === "gallery" ? "grid grid-cols-[repeat(auto-fill,minmax(9.5rem,1fr))]" : "flex flex-col"
784
+ ),
785
+ children: shown.map((skill) => /* @__PURE__ */ jsxRuntime.jsx(
786
+ chunk3BI6EWKP_cjs.SkillTile,
787
+ {
788
+ name: skill.title,
789
+ testId: `skill-tile-${skill.slug}`,
790
+ description: skill.description,
791
+ sourceLabel: skill.isShared ? `${chunk3BI6EWKP_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunk3BI6EWKP_cjs.SKILL_SOURCE_LABELS[skill.source],
792
+ type: skill.type,
793
+ icon,
794
+ layout: view,
795
+ selected: skill.slug === selected,
796
+ onSelect: () => pick(skill.slug)
797
+ },
798
+ skill.slug
799
+ ))
800
+ }
801
+ ) })
802
+ ]
803
+ }
804
+ ),
805
+ /* @__PURE__ */ jsxRuntime.jsxs(
806
+ "div",
807
+ {
808
+ className: ui.cn("flex min-h-0 min-w-0 flex-1 flex-col", !rightVisible && "max-md:hidden"),
809
+ "data-testid": "skills-detail-pane",
810
+ children: [
811
+ rightVisible && /* @__PURE__ */ jsxRuntime.jsxs(
812
+ ui.Button,
813
+ {
814
+ variant: "ghost",
815
+ size: "sm",
816
+ onClick: backToList,
817
+ className: "m-2 self-start pointer-coarse:min-h-11 md:hidden",
818
+ "data-testid": "skills-back",
819
+ children: [
820
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, { className: "mr-1 size-4" }),
821
+ "All skills"
822
+ ]
823
+ }
824
+ ),
825
+ mode === "new" && /* @__PURE__ */ jsxRuntime.jsx(
826
+ chunk3BI6EWKP_cjs.SkillGenerateForm,
827
+ {
828
+ icon,
829
+ onGenerate: (desc) => {
830
+ onDraft(`/create-skill ${desc}`.trim() + " ");
831
+ notify("Sent to the chat: the assistant will draft your skill.", "info");
832
+ },
833
+ onManual: () => setMode("edit")
834
+ }
835
+ ),
836
+ mode === "edit" && /* @__PURE__ */ jsxRuntime.jsx(
837
+ SkillEditor,
838
+ {
839
+ skill: current?.source === "mine" ? current : null,
840
+ text: current?.source === "mine" ? currentText : void 0,
841
+ renderEditor,
842
+ onSave: async (slug, markdown, isEditing) => {
843
+ await saveAs(slug, markdown, isEditing && !!current?.isShared);
844
+ notify(isEditing ? `${slug} saved` : `${slug} added`, "success");
845
+ done(slug);
846
+ },
847
+ onCancel: () => done(),
848
+ isSaving: upload.isPending
849
+ }
850
+ ),
851
+ mode === "add" && /* @__PURE__ */ jsxRuntime.jsx(ConnectedSkillUpload, { onDone: done }),
852
+ mode === "detail" && current && /* @__PURE__ */ jsxRuntime.jsx(
853
+ chunk3BI6EWKP_cjs.SkillLibraryDetail,
854
+ {
855
+ skill: current,
856
+ icon,
857
+ instructions: current.docExtId ? currentText ? chunk3BI6EWKP_cjs.parseSkillFrontmatter(currentText, chunk3BI6EWKP_cjs.SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
858
+ isLoading: !!current.docExtId && textLoading,
859
+ actions: {
860
+ onRun: () => onRun(current.slug),
861
+ onCopy: () => void makeCopy(current),
862
+ onEdit: () => setMode("edit"),
863
+ onToggleShare: () => void toggleShare(current),
864
+ onExport: () => void exportFile(current),
865
+ onDelete: () => void remove(current),
866
+ isBusy
867
+ }
868
+ }
869
+ ),
870
+ mode === "detail" && !current && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 items-center justify-center p-8 text-center text-sm text-muted-foreground max-md:hidden", children: "Pick a skill to read it, run it or make a copy." })
871
+ ]
872
+ }
873
+ )
874
+ ] });
875
+ }
876
+ function SkillEditor({
877
+ skill,
878
+ text,
879
+ renderEditor,
880
+ onSave,
881
+ onCancel,
882
+ isSaving
883
+ }) {
884
+ const { notify } = chunkC4WSHRR6_cjs.useBlocksEnvironment();
885
+ const isEditing = !!skill;
886
+ const [name, setName] = react.useState(skill?.slug ?? "");
887
+ const [description, setDescription] = react.useState("");
888
+ const [body, setBody] = react.useState("");
889
+ const [seeded, setSeeded] = react.useState(!isEditing);
890
+ const [nameError, setNameError] = react.useState(null);
891
+ if (isEditing && !seeded && text !== void 0) {
892
+ const parsed = chunk3BI6EWKP_cjs.parseSkillFrontmatter(text, chunk3BI6EWKP_cjs.SKILL_MAIN_FILENAME);
893
+ setDescription(parsed.description ?? "");
894
+ setBody(parsed.content ?? "");
895
+ setSeeded(true);
896
+ }
897
+ const save = async () => {
898
+ if (!NAME_PATTERN.test(name)) {
899
+ setNameError("Use 1\u201364 lowercase letters, numbers or hyphens.");
900
+ return;
901
+ }
902
+ if (description.trim().length < 1) {
903
+ notify("Add a short description.", "error");
904
+ return;
905
+ }
906
+ const slug = chunk3BI6EWKP_cjs.skillSlug(name);
907
+ try {
908
+ await onSave(slug, chunk3BI6EWKP_cjs.serializeSkill({ name: slug, description, body }), isEditing);
909
+ } catch (err) {
910
+ notify(errorText(err, "Could not save the skill"), "error");
911
+ }
912
+ };
913
+ return /* @__PURE__ */ jsxRuntime.jsx(
914
+ chunk3BI6EWKP_cjs.SkillEditForm,
915
+ {
916
+ name,
917
+ onNameChange: setName,
918
+ isNameLocked: isEditing,
919
+ nameError,
920
+ description,
921
+ onDescriptionChange: setDescription,
922
+ editor: renderEditor ? renderEditor(body, setBody) : /* @__PURE__ */ jsxRuntime.jsx(
923
+ ui.Textarea,
924
+ {
925
+ value: body,
926
+ onChange: (e) => setBody(e.target.value),
927
+ className: "min-h-64 flex-1 font-mono text-sm",
928
+ "aria-label": "Instructions"
929
+ }
930
+ ),
931
+ isSaving,
932
+ isEditing,
933
+ onSave: save,
934
+ onCancel,
935
+ labels: { create: "Add skill" },
936
+ testIds: {
937
+ name: "skill-edit-name",
938
+ description: "skill-edit-description",
939
+ save: "skill-edit-save"
940
+ }
941
+ }
942
+ );
943
+ }
310
944
  var StreamedArtifactEditor = react.lazy(() => import('../StreamedArtifactEditor-TQAND4H5.cjs'));
311
945
  function StreamedArtifact({
312
946
  artifacts: artifacts$1,
@@ -438,7 +1072,7 @@ function useWorkflowThread(workflow, options = {}) {
438
1072
  );
439
1073
  const conversation = conversations.data?.find((c) => c.external_id === threadId);
440
1074
  const steps = react.useMemo(
441
- () => chunkOWCEQKAR_cjs.workflowSteps(workflow).length > 0 ? chunkOWCEQKAR_cjs.workflowSteps(workflow) : chunkLIHRGG4M_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1075
+ () => chunkOWCEQKAR_cjs.workflowSteps(workflow).length > 0 ? chunkOWCEQKAR_cjs.workflowSteps(workflow) : chunk3BI6EWKP_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
442
1076
  [workflow, conversation?.plan?.steps]
443
1077
  );
444
1078
  const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
@@ -498,7 +1132,7 @@ function useWorkflowThread(workflow, options = {}) {
498
1132
  criteria: [],
499
1133
  max_passes: 3,
500
1134
  documents: [],
501
- steps: chunkLIHRGG4M_cjs.toPlanSteps(workflow, {
1135
+ steps: chunk3BI6EWKP_cjs.toPlanSteps(workflow, {
502
1136
  inputs: values,
503
1137
  resolveWorkflow: options.resolveWorkflow,
504
1138
  compose: options.compose
@@ -585,7 +1219,7 @@ function useWorkflowThread(workflow, options = {}) {
585
1219
  const anyRunning = Object.values(states).some((s) => s.status === "running");
586
1220
  const needsStart = !threadId || idle && !anyRunning;
587
1221
  const runError = idle ? conversation?.last_error ?? null : null;
588
- const view = chunkLIHRGG4M_cjs.useWorkflowView({
1222
+ const view = chunk3BI6EWKP_cjs.useWorkflowView({
589
1223
  steps,
590
1224
  states,
591
1225
  inputs,
@@ -753,7 +1387,7 @@ function WorkflowWordDialog({
753
1387
  title: title ?? labels.wordTitle,
754
1388
  size: "xl",
755
1389
  testId: "workflow-word-dialog",
756
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkC44D4WFG_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
1390
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkHLB4DIYV_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
757
1391
  }
758
1392
  );
759
1393
  }
@@ -1062,7 +1696,7 @@ function ConnectedWorkflowRunner({
1062
1696
  );
1063
1697
  };
1064
1698
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
1065
- chunkLIHRGG4M_cjs.WorkflowRunner,
1699
+ chunk3BI6EWKP_cjs.WorkflowRunner,
1066
1700
  {
1067
1701
  people,
1068
1702
  ...runnerProps,
@@ -1108,7 +1742,7 @@ function ConnectedWorkflowRunner({
1108
1742
  ) }),
1109
1743
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1110
1744
  /* @__PURE__ */ jsxRuntime.jsx(
1111
- chunkLIHRGG4M_cjs.WorkflowStepBar,
1745
+ chunk3BI6EWKP_cjs.WorkflowStepBar,
1112
1746
  {
1113
1747
  run: view,
1114
1748
  levels: chunkOWCEQKAR_cjs.stepLevels(view.steps),
@@ -1309,7 +1943,7 @@ function ConnectedTagTable({
1309
1943
  const fail = (e) => setError(e instanceof Error ? e.message : String(e));
1310
1944
  const snapshot = (data) => {
1311
1945
  const title = exportTitle ?? KIND_TITLES[kind];
1312
- const bytes = chunkN55UIXVT_cjs.tagTableDocx(data, {
1946
+ const bytes = chunkJVL7HUIQ_cjs.tagTableDocx(data, {
1313
1947
  title,
1314
1948
  nameOf: (id) => people.find((p) => p.value === id)?.label
1315
1949
  });
@@ -1319,7 +1953,7 @@ function ConnectedTagTable({
1319
1953
  };
1320
1954
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
1321
1955
  /* @__PURE__ */ jsxRuntime.jsx(
1322
- chunkN55UIXVT_cjs.TagTable,
1956
+ chunkJVL7HUIQ_cjs.TagTable,
1323
1957
  {
1324
1958
  ...props,
1325
1959
  table,
@@ -1396,7 +2030,7 @@ function useConnectedShellWorkspaces(options = {}) {
1396
2030
  select: (workspace) => setWorkspace(workspace.id)
1397
2031
  });
1398
2032
  }
1399
- function errorText(error, fallback) {
2033
+ function errorText2(error, fallback) {
1400
2034
  const body = error?.apiError;
1401
2035
  return typeof body?.detail === "string" ? body.detail : fallback;
1402
2036
  }
@@ -1446,7 +2080,7 @@ function ConnectedProfileCard({
1446
2080
  await requestEmailChange.mutateAsync(address);
1447
2081
  notify("Verification code sent to your new email", "success");
1448
2082
  } catch (e) {
1449
- notify(errorText(e, "Failed to send verification code"), "error");
2083
+ notify(errorText2(e, "Failed to send verification code"), "error");
1450
2084
  throw e;
1451
2085
  }
1452
2086
  },
@@ -1455,19 +2089,19 @@ function ConnectedProfileCard({
1455
2089
  await confirmEmailChange.mutateAsync(args);
1456
2090
  notify("Email address updated", "success");
1457
2091
  } catch (e) {
1458
- notify(errorText(e, "Invalid or expired verification code"), "error");
2092
+ notify(errorText2(e, "Invalid or expired verification code"), "error");
1459
2093
  throw e;
1460
2094
  }
1461
2095
  }
1462
2096
  });
1463
2097
  const display = profile?.fullName || "Unnamed";
1464
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkOR4CO743_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
2098
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkAAFX64WD_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
1465
2099
  /* @__PURE__ */ jsxRuntime.jsx(
1466
- chunkOR4CO743_cjs.ProfileCard,
2100
+ chunkAAFX64WD_cjs.ProfileCard,
1467
2101
  {
1468
2102
  avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1469
2103
  /* @__PURE__ */ jsxRuntime.jsx(
1470
- chunkOR4CO743_cjs.AvatarPicker,
2104
+ chunkAAFX64WD_cjs.AvatarPicker,
1471
2105
  {
1472
2106
  pictureUrl: profile?.picture,
1473
2107
  initials: chunkKDG6FER6_cjs.initials(display),
@@ -1514,9 +2148,9 @@ function ConnectedIdentityVerification({
1514
2148
  onNameAccepted: () => notify("Name updated to match your ID", "success")
1515
2149
  });
1516
2150
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1517
- /* @__PURE__ */ jsxRuntime.jsx(chunkOR4CO743_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
2151
+ /* @__PURE__ */ jsxRuntime.jsx(chunkAAFX64WD_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
1518
2152
  /* @__PURE__ */ jsxRuntime.jsx(
1519
- chunkOR4CO743_cjs.IdentityVerificationDialog,
2153
+ chunkAAFX64WD_cjs.IdentityVerificationDialog,
1520
2154
  {
1521
2155
  flow,
1522
2156
  accountName: profile?.fullName ?? "",
@@ -1529,7 +2163,7 @@ function ConnectedIdentityVerification({
1529
2163
  function ConnectedRequireVerified({ children, labels }) {
1530
2164
  const { data: profile } = react$1.useProfile();
1531
2165
  const flow = react$1.useIdentityVerification();
1532
- return /* @__PURE__ */ jsxRuntime.jsx(chunkOR4CO743_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
2166
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkAAFX64WD_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
1533
2167
  }
1534
2168
  function defaultUnmetPasswordRequirement(password) {
1535
2169
  if (password.length < 8) return "Minimum 8 characters";
@@ -1562,7 +2196,7 @@ function ConnectedPasswordChangeDialog({
1562
2196
  onRecoveryComplete
1563
2197
  });
1564
2198
  return /* @__PURE__ */ jsxRuntime.jsx(
1565
- chunkOR4CO743_cjs.PasswordChangeDialog,
2199
+ chunkAAFX64WD_cjs.PasswordChangeDialog,
1566
2200
  {
1567
2201
  open,
1568
2202
  onClose: form.onCancel,
@@ -1588,10 +2222,10 @@ function ConnectedSecuritySection({
1588
2222
  children
1589
2223
  }) {
1590
2224
  const [open, setOpen] = react.useState(false);
1591
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkOR4CO743_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
1592
- /* @__PURE__ */ jsxRuntime.jsxs(chunkOR4CO743_cjs.SettingsCard, { padding: "sm", children: [
2225
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkAAFX64WD_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
2226
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkAAFX64WD_cjs.SettingsCard, { padding: "sm", children: [
1593
2227
  /* @__PURE__ */ jsxRuntime.jsx(
1594
- chunkOR4CO743_cjs.SettingsActionRow,
2228
+ chunkAAFX64WD_cjs.SettingsActionRow,
1595
2229
  {
1596
2230
  title: "Change password",
1597
2231
  description: "Used to sign in and to unlock your account key. Changing it keeps everything readable and re-encrypts nothing.",
@@ -1612,23 +2246,23 @@ function ConnectedSecuritySection({
1612
2246
  ] });
1613
2247
  }
1614
2248
  function ConnectedNotificationPreferences({
1615
- categories = chunkOR4CO743_cjs.EMAIL_NOTIFICATION_CATEGORIES,
2249
+ categories = chunkAAFX64WD_cjs.EMAIL_NOTIFICATION_CATEGORIES,
1616
2250
  title = "Notifications"
1617
2251
  }) {
1618
2252
  const keys = react.useMemo(
1619
- () => categories === chunkOR4CO743_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkOR4CO743_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
2253
+ () => categories === chunkAAFX64WD_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkAAFX64WD_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
1620
2254
  [categories]
1621
2255
  );
1622
2256
  const prefs = react$1.useNotificationPreferences(keys);
1623
- return /* @__PURE__ */ jsxRuntime.jsx(chunkOR4CO743_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkOR4CO743_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
1624
- chunkOR4CO743_cjs.NotificationCategoryList,
2257
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkAAFX64WD_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkAAFX64WD_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
2258
+ chunkAAFX64WD_cjs.NotificationCategoryList,
1625
2259
  {
1626
2260
  masterId: "emailNotifications",
1627
2261
  masterTitle: "Email Notifications",
1628
2262
  masterDescription: "Email me about activity when I\u2019m away",
1629
2263
  masterChecked: prefs.masterChecked,
1630
2264
  onMasterChange: prefs.setAll,
1631
- categories: chunkOR4CO743_cjs.toNotificationCategories(prefs.checked, categories),
2265
+ categories: chunkAAFX64WD_cjs.toNotificationCategories(prefs.checked, categories),
1632
2266
  onCategoryChange: prefs.setCategory
1633
2267
  }
1634
2268
  ) }) });
@@ -1639,14 +2273,14 @@ function ConnectedSessionsRow({ renderSessionIcon }) {
1639
2273
  const sessions = react$1.useSessions({ enabled: open });
1640
2274
  const currentSessionId = react$1.useCurrentSessionId();
1641
2275
  const terminate = react$1.useTerminateSession();
1642
- const views = chunkOR4CO743_cjs.toActiveSessionViews(sessions.data ?? [], {
2276
+ const views = chunkAAFX64WD_cjs.toActiveSessionViews(sessions.data ?? [], {
1643
2277
  currentSessionId,
1644
2278
  terminatingId: terminate.isPending ? terminate.variables : null,
1645
2279
  renderIcon: renderSessionIcon
1646
2280
  });
1647
2281
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1648
2282
  /* @__PURE__ */ jsxRuntime.jsx(
1649
- chunkOR4CO743_cjs.SettingsRow,
2283
+ chunkAAFX64WD_cjs.SettingsRow,
1650
2284
  {
1651
2285
  label: "Active sessions",
1652
2286
  description: "Devices and agents currently signed in to your account.",
@@ -1668,7 +2302,7 @@ function ConnectedSessionsRow({ renderSessionIcon }) {
1668
2302
  }
1669
2303
  ),
1670
2304
  /* @__PURE__ */ jsxRuntime.jsx(
1671
- chunkOR4CO743_cjs.ActiveSessionsDialog,
2305
+ chunkAAFX64WD_cjs.ActiveSessionsDialog,
1672
2306
  {
1673
2307
  open,
1674
2308
  onOpenChange: setOpen,
@@ -1710,7 +2344,7 @@ function ConnectedLogoutDialog({
1710
2344
  signOut.mutate({ everywhere, reason: "manual" });
1711
2345
  };
1712
2346
  return /* @__PURE__ */ jsxRuntime.jsx(
1713
- chunkOR4CO743_cjs.LogoutDialog,
2347
+ chunkAAFX64WD_cjs.LogoutDialog,
1714
2348
  {
1715
2349
  open,
1716
2350
  onClose,
@@ -1718,7 +2352,7 @@ function ConnectedLogoutDialog({
1718
2352
  onLogoutAll: () => void run(true),
1719
2353
  canLogoutAll,
1720
2354
  isOnline,
1721
- sessions: chunkOR4CO743_cjs.toLogoutSessionViews(sessions.data ?? []),
2355
+ sessions: chunkAAFX64WD_cjs.toLogoutSessionViews(sessions.data ?? []),
1722
2356
  renderSessionIcon
1723
2357
  }
1724
2358
  );
@@ -1740,7 +2374,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
1740
2374
  });
1741
2375
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1742
2376
  /* @__PURE__ */ jsxRuntime.jsx(
1743
- chunkOR4CO743_cjs.SettingsDangerZone,
2377
+ chunkAAFX64WD_cjs.SettingsDangerZone,
1744
2378
  {
1745
2379
  isOpen: zoneOpen,
1746
2380
  onToggle: () => setZoneOpen((o) => !o),
@@ -1760,12 +2394,12 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
1760
2394
  }
1761
2395
  ),
1762
2396
  /* @__PURE__ */ jsxRuntime.jsx(
1763
- chunkOR4CO743_cjs.DeleteAccountDialog,
2397
+ chunkAAFX64WD_cjs.DeleteAccountDialog,
1764
2398
  {
1765
2399
  open: dialogOpen,
1766
2400
  onClose: flow.onClose,
1767
2401
  step: flow.step,
1768
- blockers: chunkOR4CO743_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
2402
+ blockers: chunkAAFX64WD_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
1769
2403
  onContinue: flow.onContinue,
1770
2404
  onBack: flow.onBack,
1771
2405
  userEmail,
@@ -3460,7 +4094,7 @@ function ConnectedMailbox({
3460
4094
  testIds: { root: "mail-search", input: "mail-filter-input" },
3461
4095
  className: "min-w-28 flex-1 sm:max-w-72",
3462
4096
  filter: /* @__PURE__ */ jsxRuntime.jsx(
3463
- chunkN26CXGXC_cjs.TriStateFilterMenu,
4097
+ chunkRQ2Y7USX_cjs.TriStateFilterMenu,
3464
4098
  {
3465
4099
  testId: "mail-bar-filter-button",
3466
4100
  open: filterMenuOpen,
@@ -3749,7 +4383,7 @@ function ConnectedMailbox({
3749
4383
  }
3750
4384
  ),
3751
4385
  /* @__PURE__ */ jsxRuntime.jsx(
3752
- chunkZAVEMQ37_cjs.ConfirmDialog,
4386
+ chunkDWZXSPMB_cjs.ConfirmDialog,
3753
4387
  {
3754
4388
  isOpen: confirmDelete !== null,
3755
4389
  onClose: () => setConfirmDelete(null),
@@ -3941,6 +4575,22 @@ Object.defineProperty(exports, "useWorkspaceDocs", {
3941
4575
  enumerable: true,
3942
4576
  get: function () { return chunkIE5CUCZK_cjs.useWorkspaceDocs; }
3943
4577
  });
4578
+ Object.defineProperty(exports, "ConnectedWorkspaceDataProvider", {
4579
+ enumerable: true,
4580
+ get: function () { return chunkUUHUQHXR_cjs.ConnectedWorkspaceDataProvider; }
4581
+ });
4582
+ Object.defineProperty(exports, "useConnectedConversations", {
4583
+ enumerable: true,
4584
+ get: function () { return chunkUUHUQHXR_cjs.useConnectedConversations; }
4585
+ });
4586
+ Object.defineProperty(exports, "useConnectedDocuments", {
4587
+ enumerable: true,
4588
+ get: function () { return chunkUUHUQHXR_cjs.useConnectedDocuments; }
4589
+ });
4590
+ Object.defineProperty(exports, "useConnectedTags", {
4591
+ enumerable: true,
4592
+ get: function () { return chunkUUHUQHXR_cjs.useConnectedTags; }
4593
+ });
3944
4594
  Object.defineProperty(exports, "ConnectionProvider", {
3945
4595
  enumerable: true,
3946
4596
  get: function () { return chunkKDUGTKVI_cjs.ConnectionProvider; }
@@ -3978,20 +4628,29 @@ exports.ConnectedRequireVerified = ConnectedRequireVerified;
3978
4628
  exports.ConnectedSecuritySection = ConnectedSecuritySection;
3979
4629
  exports.ConnectedSessionsRow = ConnectedSessionsRow;
3980
4630
  exports.ConnectedSkillUpload = ConnectedSkillUpload;
4631
+ exports.ConnectedSkillsLibrary = ConnectedSkillsLibrary;
3981
4632
  exports.ConnectedTagTable = ConnectedTagTable;
3982
4633
  exports.ConnectedTaskAccessRequest = ConnectedTaskAccessRequest;
3983
4634
  exports.ConnectedThreadFollow = ConnectedThreadFollow;
4635
+ exports.ConnectedWorkflowDocumentsField = ConnectedWorkflowDocumentsField;
4636
+ exports.ConnectedWorkflowLauncher = ConnectedWorkflowLauncher;
3984
4637
  exports.ConnectedWorkflowRunner = ConnectedWorkflowRunner;
4638
+ exports.ConnectedWorkflowsTable = ConnectedWorkflowsTable;
3985
4639
  exports.ConnectedWorkspaceActivity = ConnectedWorkspaceActivity;
3986
4640
  exports.ConnectedWorkspaceNotificationMenu = ConnectedWorkspaceNotificationMenu;
3987
4641
  exports.DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS = DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS;
4642
+ exports.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS;
3988
4643
  exports.DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS = DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS;
3989
4644
  exports.StreamedArtifact = StreamedArtifact;
3990
4645
  exports.WorkflowRunThread = WorkflowRunThread;
3991
4646
  exports.defaultUnmetPasswordRequirement = defaultUnmetPasswordRequirement;
3992
4647
  exports.resolveMailbox = resolveMailbox;
4648
+ exports.toWorkflowFieldDocument = toWorkflowFieldDocument;
4649
+ exports.useConnectedAgentOptions = useConnectedAgentOptions;
3993
4650
  exports.useConnectedDocxNotifications = useConnectedDocxNotifications;
3994
4651
  exports.useConnectedShellWorkspaces = useConnectedShellWorkspaces;
3995
4652
  exports.useConnectedWorkNotifications = useConnectedWorkNotifications;
4653
+ exports.useConnectedWorkflowScopeSource = useConnectedWorkflowScopeSource;
4654
+ exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
3996
4655
  //# sourceMappingURL=index.cjs.map
3997
4656
  //# sourceMappingURL=index.cjs.map