@arbidocs/blocks 0.4.137 → 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 (61) hide show
  1. package/dist/agents/index.cjs +380 -356
  2. package/dist/agents/index.js +8 -8
  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/chat/index.cjs +139 -139
  7. package/dist/chat/index.js +4 -4
  8. package/dist/{chunk-CHVCTKF4.cjs → chunk-3BI6EWKP.cjs} +672 -55
  9. package/dist/chunk-3BI6EWKP.cjs.map +1 -0
  10. package/dist/{chunk-VMESMX7N.js → chunk-5BXEYYH6.js} +3 -3
  11. package/dist/{chunk-VMESMX7N.js.map → chunk-5BXEYYH6.js.map} +1 -1
  12. package/dist/{chunk-EHOPZBAX.cjs → chunk-7YLJHTDC.cjs} +11 -11
  13. package/dist/{chunk-EHOPZBAX.cjs.map → chunk-7YLJHTDC.cjs.map} +1 -1
  14. package/dist/{chunk-M33QUNFH.js → chunk-ED4HHTIA.js} +3 -3
  15. package/dist/{chunk-M33QUNFH.js.map → chunk-ED4HHTIA.js.map} +1 -1
  16. package/dist/{chunk-HDYWXEQU.cjs → chunk-IE5CUCZK.cjs} +4 -4
  17. package/dist/{chunk-HDYWXEQU.cjs.map → chunk-IE5CUCZK.cjs.map} +1 -1
  18. package/dist/{chunk-7M4C6CK7.js → chunk-JO3EMZ4X.js} +3 -3
  19. package/dist/{chunk-7M4C6CK7.js.map → chunk-JO3EMZ4X.js.map} +1 -1
  20. package/dist/{chunk-C3ZRLULA.cjs → chunk-JVL7HUIQ.cjs} +5 -5
  21. package/dist/{chunk-C3ZRLULA.cjs.map → chunk-JVL7HUIQ.cjs.map} +1 -1
  22. package/dist/{chunk-JY73DJOS.cjs → chunk-MJKBVIV3.cjs} +80 -495
  23. package/dist/{chunk-KMNZ2RVO.js.map → chunk-MJKBVIV3.cjs.map} +1 -1
  24. package/dist/{chunk-BUNZWOPX.cjs → chunk-OAL3B2ZU.cjs} +5 -5
  25. package/dist/{chunk-BUNZWOPX.cjs.map → chunk-OAL3B2ZU.cjs.map} +1 -1
  26. package/dist/{chunk-6F7SZCVL.cjs → chunk-OWCEQKAR.cjs} +3 -3
  27. package/dist/{chunk-6F7SZCVL.cjs.map → chunk-OWCEQKAR.cjs.map} +1 -1
  28. package/dist/{chunk-KMNZ2RVO.js → chunk-UBEI6WFJ.js} +10 -411
  29. package/dist/{chunk-JY73DJOS.cjs.map → chunk-UBEI6WFJ.js.map} +1 -1
  30. package/dist/{chunk-ATJUVHVB.js → chunk-XVME4XYD.js} +604 -8
  31. package/dist/chunk-XVME4XYD.js.map +1 -0
  32. package/dist/{chunk-YOMPLCP6.js → chunk-Y5KTM3V5.js} +3 -3
  33. package/dist/{chunk-YOMPLCP6.js.map → chunk-Y5KTM3V5.js.map} +1 -1
  34. package/dist/{chunk-L3T7OJRX.js → chunk-ZNI4SW2G.js} +3 -3
  35. package/dist/{chunk-L3T7OJRX.js.map → chunk-ZNI4SW2G.js.map} +1 -1
  36. package/dist/collaboration/index.cjs +9 -9
  37. package/dist/collaboration/index.js +1 -1
  38. package/dist/connect/index.cjs +436 -54
  39. package/dist/connect/index.cjs.map +1 -1
  40. package/dist/connect/index.d.ts +1 -0
  41. package/dist/connect/index.js +399 -18
  42. package/dist/connect/index.js.map +1 -1
  43. package/dist/connection/ConnectedSkillsLibrary.d.ts +26 -0
  44. package/dist/document-tools/index.cjs +1 -1
  45. package/dist/document-tools/index.js +1 -1
  46. package/dist/facts/index.cjs +2 -2
  47. package/dist/facts/index.js +2 -2
  48. package/dist/index.cjs +650 -626
  49. package/dist/index.js +15 -15
  50. package/dist/settings/index.cjs +10 -10
  51. package/dist/settings/index.js +2 -2
  52. package/dist/site/index.cjs +5 -5
  53. package/dist/site/index.js +1 -1
  54. package/dist/studio/index.cjs +6 -6
  55. package/dist/studio/index.js +5 -5
  56. package/dist/workflow-canvas/index.cjs +59 -59
  57. package/dist/workflow-canvas/index.js +8 -8
  58. package/node_modules/@arbidocs/coedit/package.json +1 -1
  59. package/package.json +4 -4
  60. package/dist/chunk-ATJUVHVB.js.map +0 -1
  61. package/dist/chunk-CHVCTKF4.cjs.map +0 -1
@@ -1,9 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkO4YPVYPO_cjs = require('../chunk-O4YPVYPO.cjs');
5
4
  var chunkAAFX64WD_cjs = require('../chunk-AAFX64WD.cjs');
6
- var chunkHDYWXEQU_cjs = require('../chunk-HDYWXEQU.cjs');
5
+ var chunkIE5CUCZK_cjs = require('../chunk-IE5CUCZK.cjs');
7
6
  var chunkUUHUQHXR_cjs = require('../chunk-UUHUQHXR.cjs');
8
7
  var chunkHLB4DIYV_cjs = require('../chunk-HLB4DIYV.cjs');
9
8
  var chunkKDUGTKVI_cjs = require('../chunk-KDUGTKVI.cjs');
@@ -11,15 +10,16 @@ var chunkJH6JTI76_cjs = require('../chunk-JH6JTI76.cjs');
11
10
  require('../chunk-S24XEVPS.cjs');
12
11
  require('../chunk-V5OAXIBN.cjs');
13
12
  require('../chunk-5FYU7ZIU.cjs');
14
- var chunkC3ZRLULA_cjs = require('../chunk-C3ZRLULA.cjs');
13
+ var chunkO4YPVYPO_cjs = require('../chunk-O4YPVYPO.cjs');
14
+ var chunkJVL7HUIQ_cjs = require('../chunk-JVL7HUIQ.cjs');
15
15
  var chunkO6IEZDRC_cjs = require('../chunk-O6IEZDRC.cjs');
16
16
  var chunkI2QSDQQV_cjs = require('../chunk-I2QSDQQV.cjs');
17
17
  require('../chunk-RC25WMVB.cjs');
18
- var chunkCHVCTKF4_cjs = require('../chunk-CHVCTKF4.cjs');
19
- require('../chunk-DETZZBG2.cjs');
18
+ var chunk3BI6EWKP_cjs = require('../chunk-3BI6EWKP.cjs');
19
+ require('../chunk-WS5EX7DN.cjs');
20
20
  var chunkRQ2Y7USX_cjs = require('../chunk-RQ2Y7USX.cjs');
21
21
  require('../chunk-ZW6FPIFC.cjs');
22
- require('../chunk-WS5EX7DN.cjs');
22
+ require('../chunk-DETZZBG2.cjs');
23
23
  require('../chunk-R26BK7YL.cjs');
24
24
  require('../chunk-V4ISCZJ7.cjs');
25
25
  var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
@@ -28,12 +28,12 @@ var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
28
28
  require('../chunk-ADOKTJHV.cjs');
29
29
  var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
30
30
  var chunk7RGLTF76_cjs = require('../chunk-7RGLTF76.cjs');
31
- var chunkEHOPZBAX_cjs = require('../chunk-EHOPZBAX.cjs');
31
+ var chunk7YLJHTDC_cjs = require('../chunk-7YLJHTDC.cjs');
32
32
  require('../chunk-B6MVQCXW.cjs');
33
33
  var chunkJKB7WT7L_cjs = require('../chunk-JKB7WT7L.cjs');
34
- var chunk6F7SZCVL_cjs = require('../chunk-6F7SZCVL.cjs');
35
- require('../chunk-32HW2Q33.cjs');
34
+ var chunkOWCEQKAR_cjs = require('../chunk-OWCEQKAR.cjs');
36
35
  require('../chunk-7UTB4PHM.cjs');
36
+ require('../chunk-32HW2Q33.cjs');
37
37
  require('../chunk-FX3K6LNZ.cjs');
38
38
  require('../chunk-PPCATBOY.cjs');
39
39
  require('../chunk-MHVNT4J3.cjs');
@@ -46,9 +46,9 @@ var reactQuery = require('@tanstack/react-query');
46
46
  var react$1 = require('@arbidocs/react');
47
47
  var jsxRuntime = require('react/jsx-runtime');
48
48
  var ui = require('@arbidocs/react/ui');
49
+ var documentTools = require('@arbidocs/react/document-tools');
49
50
  var lucideReact = require('lucide-react');
50
51
  var artifacts = require('@arbidocs/react/artifacts');
51
- var documentTools = require('@arbidocs/react/document-tools');
52
52
  var shell = require('@arbidocs/react/shell');
53
53
  var client = require('@arbidocs/client');
54
54
  var reactDom = require('react-dom');
@@ -129,7 +129,7 @@ function ConnectedWorkspaceActivity({
129
129
  [feed.data]
130
130
  );
131
131
  return /* @__PURE__ */ jsxRuntime.jsx(
132
- chunkC3ZRLULA_cjs.WorkspaceActivityList,
132
+ chunkJVL7HUIQ_cjs.WorkspaceActivityList,
133
133
  {
134
134
  ...listProps,
135
135
  items,
@@ -155,7 +155,7 @@ function ConnectedWorkspaceNotificationMenu({
155
155
  });
156
156
  if (!workspaceId) return null;
157
157
  return /* @__PURE__ */ jsxRuntime.jsx(
158
- chunkC3ZRLULA_cjs.WorkspaceNotificationMenu,
158
+ chunkJVL7HUIQ_cjs.WorkspaceNotificationMenu,
159
159
  {
160
160
  ...menuProps,
161
161
  level,
@@ -174,7 +174,7 @@ function ConnectedThreadFollow({
174
174
  enabled: status === "authenticated"
175
175
  });
176
176
  if (!conversationId) return null;
177
- const Control = as === "menu-item" ? chunkC3ZRLULA_cjs.ThreadFollowMenuItem : chunkC3ZRLULA_cjs.ThreadFollowButton;
177
+ const Control = as === "menu-item" ? chunkJVL7HUIQ_cjs.ThreadFollowMenuItem : chunkJVL7HUIQ_cjs.ThreadFollowButton;
178
178
  return /* @__PURE__ */ jsxRuntime.jsx(
179
179
  Control,
180
180
  {
@@ -214,7 +214,7 @@ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
214
214
  var messageOf = (error) => error instanceof Error ? error.message : "";
215
215
  function ConnectedWorkflowsTable({
216
216
  filter,
217
- describeTrigger = (w) => chunkCHVCTKF4_cjs.workflowTriggerType(w).replaceAll("_", " "),
217
+ describeTrigger = (w) => chunk3BI6EWKP_cjs.workflowTriggerType(w).replaceAll("_", " "),
218
218
  formatDate = chunkKDG6FER6_cjs.fmtDate,
219
219
  onViewRuns,
220
220
  connectedLabels,
@@ -276,7 +276,7 @@ function ConnectedWorkflowsTable({
276
276
  await act(workflow, () => remove.mutateAsync(workflow.external_id));
277
277
  };
278
278
  return /* @__PURE__ */ jsxRuntime.jsx(
279
- chunkCHVCTKF4_cjs.WorkflowsTable,
279
+ chunk3BI6EWKP_cjs.WorkflowsTable,
280
280
  {
281
281
  ...tableProps,
282
282
  workflows,
@@ -337,7 +337,7 @@ function toWorkflowFieldDocument(doc) {
337
337
  function useConnectedWorkflowScopeSource() {
338
338
  const { data: docs } = chunkUUHUQHXR_cjs.useConnectedDocuments();
339
339
  const { data: tags } = chunkUUHUQHXR_cjs.useConnectedTags();
340
- return react.useMemo(() => chunkCHVCTKF4_cjs.buildWorkflowScopeSource(docs, chunkCHVCTKF4_cjs.documentScopeLabels(tags)), [docs, tags]);
340
+ return react.useMemo(() => chunk3BI6EWKP_cjs.buildWorkflowScopeSource(docs, chunk3BI6EWKP_cjs.documentScopeLabels(tags)), [docs, tags]);
341
341
  }
342
342
  function useConnectedAgentOptions() {
343
343
  const { data: agents } = react$1.useAgents();
@@ -395,7 +395,7 @@ function ConnectedWorkflowDocumentsField({
395
395
  }
396
396
  ),
397
397
  /* @__PURE__ */ jsxRuntime.jsx(
398
- chunkCHVCTKF4_cjs.WorkflowDocumentsField,
398
+ chunk3BI6EWKP_cjs.WorkflowDocumentsField,
399
399
  {
400
400
  field,
401
401
  value,
@@ -417,7 +417,7 @@ function ConnectedWorkflowLauncher({
417
417
  const scopeSource = useConnectedWorkflowScopeSource();
418
418
  const agents = useConnectedAgentOptions();
419
419
  return /* @__PURE__ */ jsxRuntime.jsx(
420
- chunkCHVCTKF4_cjs.WorkflowLauncher,
420
+ chunk3BI6EWKP_cjs.WorkflowLauncher,
421
421
  {
422
422
  ...props,
423
423
  scopeSource,
@@ -496,7 +496,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
496
496
  onChange: (e) => {
497
497
  const file = e.target.files?.[0];
498
498
  e.target.value = "";
499
- if (file) void add(() => chunkCHVCTKF4_cjs.importSkillFile(file));
499
+ if (file) void add(() => chunk3BI6EWKP_cjs.importSkillFile(file));
500
500
  }
501
501
  }
502
502
  ),
@@ -521,7 +521,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
521
521
  className: "space-y-2",
522
522
  onSubmit: (e) => {
523
523
  e.preventDefault();
524
- if (url.trim()) void add(() => chunkCHVCTKF4_cjs.importSkillFromUrl(url));
524
+ if (url.trim()) void add(() => chunk3BI6EWKP_cjs.importSkillFromUrl(url));
525
525
  },
526
526
  children: [
527
527
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "skills-add-url", children: l.fromLink }),
@@ -560,6 +560,387 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
560
560
  }
561
561
  );
562
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
+ }
563
944
  var StreamedArtifactEditor = react.lazy(() => import('../StreamedArtifactEditor-TQAND4H5.cjs'));
564
945
  function StreamedArtifact({
565
946
  artifacts: artifacts$1,
@@ -633,7 +1014,7 @@ function StreamedArtifact({
633
1014
  }
634
1015
  var STARTING = /* @__PURE__ */ new Set(["pending", "running"]);
635
1016
  function formValues(step, inputs) {
636
- const fields = chunk6F7SZCVL_cjs.stepFields(step);
1017
+ const fields = chunkOWCEQKAR_cjs.stepFields(step);
637
1018
  if (!fields.length) return void 0;
638
1019
  if (step.kind === "form")
639
1020
  return Object.fromEntries(fields.map((f) => [f.name, inputs[f.name] ?? ""]));
@@ -668,10 +1049,10 @@ function useAnswerRetry(missing, refetch) {
668
1049
  function useWorkflowThread(workflow, options = {}) {
669
1050
  const arbi = react$1.useArbi();
670
1051
  const { ensureWorkspaceOpen, status } = chunkKDUGTKVI_cjs.useConnection();
671
- const { wsId } = chunkHDYWXEQU_cjs.useWorkspaceDocs();
1052
+ const { wsId } = chunkIE5CUCZK_cjs.useWorkspaceDocs();
672
1053
  const [threadId, setThreadId] = react.useState(options.conversationId);
673
1054
  const [localInputs, setLocalInputs] = react.useState(
674
- () => chunk6F7SZCVL_cjs.initialRunInputs(workflow, options.initialInputs)
1055
+ () => chunkOWCEQKAR_cjs.initialRunInputs(workflow, options.initialInputs)
675
1056
  );
676
1057
  const [edits, setEdits] = react.useState({});
677
1058
  const [localStates, setLocalStates] = react.useState({});
@@ -691,12 +1072,12 @@ function useWorkflowThread(workflow, options = {}) {
691
1072
  );
692
1073
  const conversation = conversations.data?.find((c) => c.external_id === threadId);
693
1074
  const steps = react.useMemo(
694
- () => chunk6F7SZCVL_cjs.workflowSteps(workflow).length > 0 ? chunk6F7SZCVL_cjs.workflowSteps(workflow) : chunkCHVCTKF4_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1075
+ () => chunkOWCEQKAR_cjs.workflowSteps(workflow).length > 0 ? chunkOWCEQKAR_cjs.workflowSteps(workflow) : chunk3BI6EWKP_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
695
1076
  [workflow, conversation?.plan?.steps]
696
1077
  );
697
1078
  const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
698
1079
  const serverStates = react.useMemo(
699
- () => chunk6F7SZCVL_cjs.stepStatesFromActivity(activity.data ?? []),
1080
+ () => chunkOWCEQKAR_cjs.stepStatesFromActivity(activity.data ?? []),
700
1081
  [activity.data]
701
1082
  );
702
1083
  const working = steps.some(
@@ -739,7 +1120,7 @@ function useWorkflowThread(workflow, options = {}) {
739
1120
  async (values, done) => {
740
1121
  await ensureWorkspaceOpen();
741
1122
  const created = await createWork.mutateAsync({
742
- title: chunk6F7SZCVL_cjs.runThreadTitle(workflow, values).slice(0, 60),
1123
+ title: chunkOWCEQKAR_cjs.runThreadTitle(workflow, values).slice(0, 60),
743
1124
  description: workflow.description || null,
744
1125
  prompt: null,
745
1126
  skill_ref: null,
@@ -751,7 +1132,7 @@ function useWorkflowThread(workflow, options = {}) {
751
1132
  criteria: [],
752
1133
  max_passes: 3,
753
1134
  documents: [],
754
- steps: chunkCHVCTKF4_cjs.toPlanSteps(workflow, {
1135
+ steps: chunk3BI6EWKP_cjs.toPlanSteps(workflow, {
755
1136
  inputs: values,
756
1137
  resolveWorkflow: options.resolveWorkflow,
757
1138
  compose: options.compose
@@ -838,7 +1219,7 @@ function useWorkflowThread(workflow, options = {}) {
838
1219
  const anyRunning = Object.values(states).some((s) => s.status === "running");
839
1220
  const needsStart = !threadId || idle && !anyRunning;
840
1221
  const runError = idle ? conversation?.last_error ?? null : null;
841
- const view = chunkCHVCTKF4_cjs.useWorkflowView({
1222
+ const view = chunk3BI6EWKP_cjs.useWorkflowView({
842
1223
  steps,
843
1224
  states,
844
1225
  inputs,
@@ -881,7 +1262,7 @@ function WorkflowRunThread({
881
1262
  if (listed && activeThreadId !== conversationId) selectThread(conversationId);
882
1263
  }, [listed, activeThreadId, conversationId, selectThread]);
883
1264
  return /* @__PURE__ */ jsxRuntime.jsx(
884
- chunkEHOPZBAX_cjs.ChatPage,
1265
+ chunk7YLJHTDC_cjs.ChatPage,
885
1266
  {
886
1267
  chat: { ...chat, threads: chat.threads.filter((t) => t.id === conversationId) },
887
1268
  singleThread: true,
@@ -919,7 +1300,7 @@ function WorkflowSignDialog({
919
1300
  const arbi = react$1.useArbi();
920
1301
  const { user, ensureWorkspaceOpen } = chunkKDUGTKVI_cjs.useConnection();
921
1302
  const tools = documentTools.useOptionalDocumentTools();
922
- const { id, version: stepVersion } = chunk6F7SZCVL_cjs.splitDocRef(docRef);
1303
+ const { id, version: stepVersion } = chunkOWCEQKAR_cjs.splitDocRef(docRef);
923
1304
  const [version, setVersion] = react.useState(stepVersion);
924
1305
  const [pdf, setPdf] = react.useState(null);
925
1306
  const [preparing, setPreparing] = react.useState(false);
@@ -997,7 +1378,7 @@ function WorkflowWordDialog({
997
1378
  onClose,
998
1379
  labels
999
1380
  }) {
1000
- const { id } = chunk6F7SZCVL_cjs.splitDocRef(docRef);
1381
+ const { id } = chunkOWCEQKAR_cjs.splitDocRef(docRef);
1001
1382
  return /* @__PURE__ */ jsxRuntime.jsx(
1002
1383
  chunkULWRNGGE_cjs.ModalScaffold,
1003
1384
  {
@@ -1146,7 +1527,7 @@ function ConnectedWorkflowRunner({
1146
1527
  const dl = { ...DEFAULT_WORKFLOW_RUNNER_DIALOG_LABELS, ...dialogLabels };
1147
1528
  const arbi = react$1.useArbi();
1148
1529
  const { ensureWorkspaceOpen, user } = chunkKDUGTKVI_cjs.useConnection();
1149
- const { wsId } = chunkHDYWXEQU_cjs.useWorkspaceDocs();
1530
+ const { wsId } = chunkIE5CUCZK_cjs.useWorkspaceDocs();
1150
1531
  const { data: docs = [], refetch } = react$1.useDocuments(wsId);
1151
1532
  const [sending, setSending] = react.useState([]);
1152
1533
  const [added, setAdded] = react.useState({});
@@ -1169,7 +1550,7 @@ function ConnectedWorkflowRunner({
1169
1550
  () => ({
1170
1551
  me: user?.externalId,
1171
1552
  openDocument: onOpenDocument && ((ref) => {
1172
- const { id, version } = chunk6F7SZCVL_cjs.splitDocRef(ref);
1553
+ const { id, version } = chunkOWCEQKAR_cjs.splitDocRef(ref);
1173
1554
  onOpenDocument(id, version);
1174
1555
  }),
1175
1556
  openDraft: onOpenDraft && ((draftId) => onOpenDraft(draftId)),
@@ -1179,7 +1560,7 @@ function ConnectedWorkflowRunner({
1179
1560
  const w = state.waiting;
1180
1561
  if (w?.doc_ext_id) setDialog({ kind: "sign", docRef: w.doc_ext_id });
1181
1562
  }),
1182
- openRedline: hostActions?.openRedline ?? ((ref) => setDialog({ kind: "word", docRef: ref, title: nameOfDoc(chunk6F7SZCVL_cjs.splitDocRef(ref).id) ?? "" })),
1563
+ openRedline: hostActions?.openRedline ?? ((ref) => setDialog({ kind: "word", docRef: ref, title: nameOfDoc(chunkOWCEQKAR_cjs.splitDocRef(ref).id) ?? "" })),
1183
1564
  openReview: hostActions?.openReview ?? ((tags, documents) => setDialog({ kind: "review", tags, documents }))
1184
1565
  }),
1185
1566
  [user?.externalId, onOpenDocument, onOpenDraft, onOpenMessage, hostActions, nameOfDoc, inThread]
@@ -1315,7 +1696,7 @@ function ConnectedWorkflowRunner({
1315
1696
  );
1316
1697
  };
1317
1698
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
1318
- chunkCHVCTKF4_cjs.WorkflowRunner,
1699
+ chunk3BI6EWKP_cjs.WorkflowRunner,
1319
1700
  {
1320
1701
  people,
1321
1702
  ...runnerProps,
@@ -1361,10 +1742,10 @@ function ConnectedWorkflowRunner({
1361
1742
  ) }),
1362
1743
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1363
1744
  /* @__PURE__ */ jsxRuntime.jsx(
1364
- chunkCHVCTKF4_cjs.WorkflowStepBar,
1745
+ chunk3BI6EWKP_cjs.WorkflowStepBar,
1365
1746
  {
1366
1747
  run: view,
1367
- levels: chunk6F7SZCVL_cjs.stepLevels(view.steps),
1748
+ levels: chunkOWCEQKAR_cjs.stepLevels(view.steps),
1368
1749
  doneTitle: (workflow.run.kind === "steps" ? workflow.run.completion?.title : void 0) ?? runnerProps.labels?.complete ?? "Done",
1369
1750
  icon: (key) => key && runnerProps.renderIcon ? runnerProps.renderIcon(key) : void 0,
1370
1751
  tid: (suffix) => `${testIdPrefix}-${suffix}`
@@ -1384,13 +1765,13 @@ function ConnectedWorkflowRunner({
1384
1765
  return state ? [[s.id, state]] : [];
1385
1766
  })
1386
1767
  );
1387
- const ref = chunk6F7SZCVL_cjs.stepDocuments(view.steps, states, id).at(-1);
1768
+ const ref = chunkOWCEQKAR_cjs.stepDocuments(view.steps, states, id).at(-1);
1388
1769
  const open = actions.openDocument ?? actions.openRedline;
1389
1770
  return {
1390
1771
  title: step.title,
1391
- kind: chunk6F7SZCVL_cjs.stepKindOf(step),
1772
+ kind: chunkOWCEQKAR_cjs.stepKindOf(step),
1392
1773
  phase: view.phaseOf(id),
1393
- document: ref && open ? { name: nameOfDoc(chunk6F7SZCVL_cjs.splitDocRef(ref).id) ?? ref, onOpen: () => open(ref) } : void 0
1774
+ document: ref && open ? { name: nameOfDoc(chunkOWCEQKAR_cjs.splitDocRef(ref).id) ?? ref, onOpen: () => open(ref) } : void 0
1394
1775
  };
1395
1776
  },
1396
1777
  targetMessageId: target,
@@ -1562,7 +1943,7 @@ function ConnectedTagTable({
1562
1943
  const fail = (e) => setError(e instanceof Error ? e.message : String(e));
1563
1944
  const snapshot = (data) => {
1564
1945
  const title = exportTitle ?? KIND_TITLES[kind];
1565
- const bytes = chunkC3ZRLULA_cjs.tagTableDocx(data, {
1946
+ const bytes = chunkJVL7HUIQ_cjs.tagTableDocx(data, {
1566
1947
  title,
1567
1948
  nameOf: (id) => people.find((p) => p.value === id)?.label
1568
1949
  });
@@ -1572,7 +1953,7 @@ function ConnectedTagTable({
1572
1953
  };
1573
1954
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
1574
1955
  /* @__PURE__ */ jsxRuntime.jsx(
1575
- chunkC3ZRLULA_cjs.TagTable,
1956
+ chunkJVL7HUIQ_cjs.TagTable,
1576
1957
  {
1577
1958
  ...props,
1578
1959
  table,
@@ -1649,7 +2030,7 @@ function useConnectedShellWorkspaces(options = {}) {
1649
2030
  select: (workspace) => setWorkspace(workspace.id)
1650
2031
  });
1651
2032
  }
1652
- function errorText(error, fallback) {
2033
+ function errorText2(error, fallback) {
1653
2034
  const body = error?.apiError;
1654
2035
  return typeof body?.detail === "string" ? body.detail : fallback;
1655
2036
  }
@@ -1699,7 +2080,7 @@ function ConnectedProfileCard({
1699
2080
  await requestEmailChange.mutateAsync(address);
1700
2081
  notify("Verification code sent to your new email", "success");
1701
2082
  } catch (e) {
1702
- notify(errorText(e, "Failed to send verification code"), "error");
2083
+ notify(errorText2(e, "Failed to send verification code"), "error");
1703
2084
  throw e;
1704
2085
  }
1705
2086
  },
@@ -1708,7 +2089,7 @@ function ConnectedProfileCard({
1708
2089
  await confirmEmailChange.mutateAsync(args);
1709
2090
  notify("Email address updated", "success");
1710
2091
  } catch (e) {
1711
- notify(errorText(e, "Invalid or expired verification code"), "error");
2092
+ notify(errorText2(e, "Invalid or expired verification code"), "error");
1712
2093
  throw e;
1713
2094
  }
1714
2095
  }
@@ -4102,7 +4483,7 @@ function ActiveChat({ agentId, workspaceId }) {
4102
4483
  activeArtifact: () => chunkJKB7WT7L_cjs.takeOpenDocumentForTurn({ workspaceId })
4103
4484
  });
4104
4485
  return /* @__PURE__ */ jsxRuntime.jsx(
4105
- chunkEHOPZBAX_cjs.ChatPage,
4486
+ chunk7YLJHTDC_cjs.ChatPage,
4106
4487
  {
4107
4488
  chat: { ...chat, assistantMode: void 0, setAssistantMode: void 0 },
4108
4489
  documentsRequired: false,
@@ -4164,35 +4545,35 @@ function ConnectedAgentChatPanel({
4164
4545
 
4165
4546
  Object.defineProperty(exports, "ConnectedAssistantDock", {
4166
4547
  enumerable: true,
4167
- get: function () { return chunkHDYWXEQU_cjs.ConnectedAssistantDock; }
4548
+ get: function () { return chunkIE5CUCZK_cjs.ConnectedAssistantDock; }
4168
4549
  });
4169
4550
  Object.defineProperty(exports, "redlineStats", {
4170
4551
  enumerable: true,
4171
- get: function () { return chunkHDYWXEQU_cjs.redlineStats; }
4552
+ get: function () { return chunkIE5CUCZK_cjs.redlineStats; }
4172
4553
  });
4173
4554
  Object.defineProperty(exports, "textToArtifact", {
4174
4555
  enumerable: true,
4175
- get: function () { return chunkHDYWXEQU_cjs.textToArtifact; }
4556
+ get: function () { return chunkIE5CUCZK_cjs.textToArtifact; }
4176
4557
  });
4177
4558
  Object.defineProperty(exports, "toRedlineMarkdown", {
4178
4559
  enumerable: true,
4179
- get: function () { return chunkHDYWXEQU_cjs.toRedlineMarkdown; }
4560
+ get: function () { return chunkIE5CUCZK_cjs.toRedlineMarkdown; }
4180
4561
  });
4181
4562
  Object.defineProperty(exports, "useConnectedAiTask", {
4182
4563
  enumerable: true,
4183
- get: function () { return chunkHDYWXEQU_cjs.useConnectedAiTask; }
4564
+ get: function () { return chunkIE5CUCZK_cjs.useConnectedAiTask; }
4184
4565
  });
4185
4566
  Object.defineProperty(exports, "useConnectedChat", {
4186
4567
  enumerable: true,
4187
- get: function () { return chunkHDYWXEQU_cjs.useConnectedChat; }
4568
+ get: function () { return chunkIE5CUCZK_cjs.useConnectedChat; }
4188
4569
  });
4189
4570
  Object.defineProperty(exports, "useSemanticSearch", {
4190
4571
  enumerable: true,
4191
- get: function () { return chunkHDYWXEQU_cjs.useSemanticSearch; }
4572
+ get: function () { return chunkIE5CUCZK_cjs.useSemanticSearch; }
4192
4573
  });
4193
4574
  Object.defineProperty(exports, "useWorkspaceDocs", {
4194
4575
  enumerable: true,
4195
- get: function () { return chunkHDYWXEQU_cjs.useWorkspaceDocs; }
4576
+ get: function () { return chunkIE5CUCZK_cjs.useWorkspaceDocs; }
4196
4577
  });
4197
4578
  Object.defineProperty(exports, "ConnectedWorkspaceDataProvider", {
4198
4579
  enumerable: true,
@@ -4247,6 +4628,7 @@ exports.ConnectedRequireVerified = ConnectedRequireVerified;
4247
4628
  exports.ConnectedSecuritySection = ConnectedSecuritySection;
4248
4629
  exports.ConnectedSessionsRow = ConnectedSessionsRow;
4249
4630
  exports.ConnectedSkillUpload = ConnectedSkillUpload;
4631
+ exports.ConnectedSkillsLibrary = ConnectedSkillsLibrary;
4250
4632
  exports.ConnectedTagTable = ConnectedTagTable;
4251
4633
  exports.ConnectedTaskAccessRequest = ConnectedTaskAccessRequest;
4252
4634
  exports.ConnectedThreadFollow = ConnectedThreadFollow;