@bikdotai/bik-component-library 0.0.823-beta.2 → 0.0.823

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 (75) hide show
  1. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  2. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +97 -66
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js +1 -1
  6. package/dist/cjs/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
  8. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  10. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +4 -4
  12. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/StepRail.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/StepRail.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  16. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/steps/Step1About.js +1 -1
  18. package/dist/cjs/components/agent-builder/steps/Step1About.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js +1 -1
  20. package/dist/cjs/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  22. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  23. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js +1 -1
  24. package/dist/cjs/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  25. package/dist/cjs/components/agent-listing/AgentListing.js +1 -1
  26. package/dist/cjs/components/agent-listing/AgentListing.js.map +1 -1
  27. package/dist/cjs/components/agent-listing/AgentListing.styled.js +32 -28
  28. package/dist/cjs/components/agent-listing/AgentListing.styled.js.map +1 -1
  29. package/dist/cjs/components/agent-listing/AgentListingHeader.js +1 -1
  30. package/dist/cjs/components/agent-listing/AgentListingHeader.js.map +1 -1
  31. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  32. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  33. package/dist/cjs/components/template-preview/models/TemplateMeta.js +1 -1
  34. package/dist/cjs/components/template-preview/models/TemplateMeta.js.map +1 -1
  35. package/dist/esm/components/agent-builder/AgentBuilder.js +82 -83
  36. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  37. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +13 -5
  38. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +141 -102
  39. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  40. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.d.ts +0 -1
  41. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js +33 -46
  42. package/dist/esm/components/agent-builder/components/AgentBuilderTopBar.js.map +1 -1
  43. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +135 -119
  44. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  45. package/dist/esm/components/agent-builder/components/MentionField.js +44 -45
  46. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  47. package/dist/esm/components/agent-builder/components/SelectableListSection.js +91 -94
  48. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  49. package/dist/esm/components/agent-builder/components/StepRail.js +28 -20
  50. package/dist/esm/components/agent-builder/components/StepRail.js.map +1 -1
  51. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +7 -0
  52. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +108 -98
  53. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  54. package/dist/esm/components/agent-builder/steps/Step1About.js +38 -35
  55. package/dist/esm/components/agent-builder/steps/Step1About.js.map +1 -1
  56. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js +118 -122
  57. package/dist/esm/components/agent-builder/steps/Step2WhenItStepsIn.js.map +1 -1
  58. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +112 -110
  59. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  60. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js +72 -70
  61. package/dist/esm/components/agent-builder/steps/Step4HandoverRules.js.map +1 -1
  62. package/dist/esm/components/agent-listing/AgentListing.js +45 -43
  63. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  64. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +7 -0
  65. package/dist/esm/components/agent-listing/AgentListing.styled.js +28 -24
  66. package/dist/esm/components/agent-listing/AgentListing.styled.js.map +1 -1
  67. package/dist/esm/components/agent-listing/AgentListingHeader.d.ts +2 -0
  68. package/dist/esm/components/agent-listing/AgentListingHeader.js +14 -12
  69. package/dist/esm/components/agent-listing/AgentListingHeader.js.map +1 -1
  70. package/dist/esm/components/agent-listing/AgentTableRow.js +102 -57
  71. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  72. package/dist/esm/components/template-preview/models/TemplateMeta.d.ts +1 -2
  73. package/dist/esm/components/template-preview/models/TemplateMeta.js +11 -11
  74. package/dist/esm/components/template-preview/models/TemplateMeta.js.map +1 -1
  75. package/package.json +1 -1
@@ -1,70 +1,57 @@
1
- import { jsxs as r, jsx as t } from "react/jsx-runtime";
2
- import p from "../../../assets/icons/arrow_left.svg.js";
3
- import { TitleRegular as u } from "../../TypographyStyle.js";
4
- import { COLORS as a } from "../../../constants/Theme.js";
5
- import { TopBar as g, TopBarSide as o, BackButton as f } from "../AgentBuilder.styled.js";
6
- import { Tag as T } from "../../tag/Tag.js";
7
- import { Button as n } from "../../button/Button.js";
1
+ import { jsxs as i, jsx as t } from "react/jsx-runtime";
2
+ import c from "../../../assets/icons/arrow_left.svg.js";
3
+ import { TitleRegular as p } from "../../TypographyStyle.js";
4
+ import { COLORS as o } from "../../../constants/Theme.js";
5
+ import { TopBar as s, TopBarSide as a, BackButton as f } from "../AgentBuilder.styled.js";
6
+ import { Tag as g } from "../../tag/Tag.js";
7
+ import { Button as u } from "../../button/Button.js";
8
8
  const L = ({
9
- name: l,
10
- status: d,
11
- onBack: e,
12
- onDiscard: s,
13
- onSaveDraft: c,
9
+ name: n,
10
+ status: l,
11
+ onBack: r,
12
+ onSaveDraft: d,
14
13
  isSaving: m
15
14
  }) => {
16
- const i = d === "live";
17
- return /* @__PURE__ */ r(g, { children: [
18
- /* @__PURE__ */ r(o, { children: [
19
- e && /* @__PURE__ */ t(
15
+ const e = l === "live";
16
+ return /* @__PURE__ */ i(s, { children: [
17
+ /* @__PURE__ */ i(a, { children: [
18
+ r && /* @__PURE__ */ t(
20
19
  f,
21
20
  {
22
21
  "data-test": "agent-builder-back",
23
- onClick: e,
22
+ onClick: r,
24
23
  "aria-label": "Back",
25
24
  children: /* @__PURE__ */ t(
26
- p,
25
+ c,
27
26
  {
28
27
  width: 20,
29
28
  height: 20,
30
- color: a.content.primary
29
+ color: o.content.primary
31
30
  }
32
31
  )
33
32
  }
34
33
  ),
35
- /* @__PURE__ */ t(u, { color: a.content.primary, children: l || "Untitled agent" }),
34
+ /* @__PURE__ */ t(p, { color: o.content.primary, children: n || "Untitled agent" }),
36
35
  /* @__PURE__ */ t(
37
- T,
36
+ g,
38
37
  {
39
- tagText: i ? "Live" : "Draft",
40
- type: i ? "positive" : "neutral",
38
+ tagText: e ? "Live" : "Draft",
39
+ type: e ? "positive" : "neutral",
41
40
  variant: "regular"
42
41
  }
43
42
  )
44
43
  ] }),
45
- /* @__PURE__ */ r(o, { children: [
46
- /* @__PURE__ */ t(
47
- n,
48
- {
49
- "data-test": "agent-builder-discard",
50
- buttonType: "text",
51
- size: "small",
52
- buttonText: "Discard",
53
- onClick: s
54
- }
55
- ),
56
- /* @__PURE__ */ t(
57
- n,
58
- {
59
- "data-test": "agent-builder-save-draft",
60
- buttonType: "secondary",
61
- size: "small",
62
- buttonText: "Save as draft",
63
- isLoading: m,
64
- onClick: c
65
- }
66
- )
67
- ] })
44
+ /* @__PURE__ */ t(a, { children: /* @__PURE__ */ t(
45
+ u,
46
+ {
47
+ "data-test": "agent-builder-save-draft",
48
+ buttonType: "secondary",
49
+ size: "small",
50
+ buttonText: "Save as draft",
51
+ isLoading: m,
52
+ onClick: d
53
+ }
54
+ ) })
68
55
  ] });
69
56
  };
70
57
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"AgentBuilderTopBar.js","sources":["../../../../../src/components/agent-builder/components/AgentBuilderTopBar.tsx"],"sourcesContent":["import ArrowLeftIcon from '@src/assets/icons/arrow_left.svg';\nimport React from 'react';\nimport { Button } from '@src/components/button';\nimport { Tag } from '@src/components/tag';\nimport { TitleRegular } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentStatus } from '../AgentBuilder.model';\nimport { BackButton, TopBar, TopBarSide } from '../AgentBuilder.styled';\n\ninterface AgentBuilderTopBarProps {\n\tname: string;\n\tstatus: AgentStatus;\n\tonBack?: () => void;\n\tonDiscard: () => void;\n\tonSaveDraft: () => void;\n\tisSaving?: boolean;\n}\n\nexport const AgentBuilderTopBar: React.FC<AgentBuilderTopBarProps> = ({\n\tname,\n\tstatus,\n\tonBack,\n\tonDiscard,\n\tonSaveDraft,\n\tisSaving,\n}) => {\n\tconst isLive = status === 'live';\n\treturn (\n\t\t<TopBar>\n\t\t\t<TopBarSide>\n\t\t\t\t{onBack && (\n\t\t\t\t\t<BackButton\n\t\t\t\t\t\tdata-test=\"agent-builder-back\"\n\t\t\t\t\t\tonClick={onBack}\n\t\t\t\t\t\taria-label=\"Back\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ArrowLeftIcon\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.primary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BackButton>\n\t\t\t\t)}\n\t\t\t\t<TitleRegular color={COLORS.content.primary}>\n\t\t\t\t\t{name || 'Untitled agent'}\n\t\t\t\t</TitleRegular>\n\t\t\t\t<Tag\n\t\t\t\t\ttagText={isLive ? 'Live' : 'Draft'}\n\t\t\t\t\ttype={isLive ? 'positive' : 'neutral'}\n\t\t\t\t\tvariant=\"regular\"\n\t\t\t\t/>\n\t\t\t</TopBarSide>\n\n\t\t\t<TopBarSide>\n\t\t\t\t<Button\n\t\t\t\t\tdata-test=\"agent-builder-discard\"\n\t\t\t\t\tbuttonType=\"text\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tbuttonText=\"Discard\"\n\t\t\t\t\tonClick={onDiscard}\n\t\t\t\t/>\n\t\t\t\t<Button\n\t\t\t\t\tdata-test=\"agent-builder-save-draft\"\n\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tbuttonText=\"Save as draft\"\n\t\t\t\t\tisLoading={isSaving}\n\t\t\t\t\tonClick={onSaveDraft}\n\t\t\t\t/>\n\t\t\t</TopBarSide>\n\t\t</TopBar>\n\t);\n};\n"],"names":["AgentBuilderTopBar","name","status","onBack","onDiscard","onSaveDraft","isSaving","isLive","TopBar","jsxs","TopBarSide","jsx","BackButton","ArrowLeftIcon","COLORS","TitleRegular","Tag","Button"],"mappings":";;;;;;;AAkBO,MAAMA,IAAwD,CAAC;AAAA,EACrE,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AACD,MAAM;AACL,QAAMC,IAASL,MAAW;AAC1B,2BACEM,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EACC,UAAA;AAAA,MAAAP,KACA,gBAAAQ;AAAA,QAACC;AAAA,QAAA;AAAA,UACA,aAAU;AAAA,UACV,SAAST;AAAA,UACT,cAAW;AAAA,UAEX,UAAA,gBAAAQ;AAAA,YAACE;AAAAA,YAAA;AAAA,cACA,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,OAAOC,EAAO,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACvB;AAAA,MAAA;AAAA,wBAGDC,GAAA,EAAa,OAAOD,EAAO,QAAQ,SAClC,eAAQ,kBACV;AAAA,MACA,gBAAAH;AAAA,QAACK;AAAA,QAAA;AAAA,UACA,SAAST,IAAS,SAAS;AAAA,UAC3B,MAAMA,IAAS,aAAa;AAAA,UAC5B,SAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GACD;AAAA,sBAECG,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,aAAU;AAAA,UACV,YAAW;AAAA,UACX,MAAK;AAAA,UACL,YAAW;AAAA,UACX,SAASb;AAAA,QAAA;AAAA,MAAA;AAAA,MAEV,gBAAAO;AAAA,QAACM;AAAA,QAAA;AAAA,UACA,aAAU;AAAA,UACV,YAAW;AAAA,UACX,MAAK;AAAA,UACL,YAAW;AAAA,UACX,WAAWX;AAAA,UACX,SAASD;AAAA,QAAA;AAAA,MAAA;AAAA,IACV,EAAA,CACD;AAAA,EAAA,GACD;AAEF;"}
1
+ {"version":3,"file":"AgentBuilderTopBar.js","sources":["../../../../../src/components/agent-builder/components/AgentBuilderTopBar.tsx"],"sourcesContent":["import ArrowLeftIcon from '@src/assets/icons/arrow_left.svg';\nimport React from 'react';\nimport { Button } from '@src/components/button';\nimport { Tag } from '@src/components/tag';\nimport { TitleRegular } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentStatus } from '../AgentBuilder.model';\nimport { BackButton, TopBar, TopBarSide } from '../AgentBuilder.styled';\n\ninterface AgentBuilderTopBarProps {\n\tname: string;\n\tstatus: AgentStatus;\n\tonBack?: () => void;\n\tonSaveDraft: () => void;\n\tisSaving?: boolean;\n}\n\nexport const AgentBuilderTopBar: React.FC<AgentBuilderTopBarProps> = ({\n\tname,\n\tstatus,\n\tonBack,\n\tonSaveDraft,\n\tisSaving,\n}) => {\n\tconst isLive = status === 'live';\n\treturn (\n\t\t<TopBar>\n\t\t\t<TopBarSide>\n\t\t\t\t{onBack && (\n\t\t\t\t\t<BackButton\n\t\t\t\t\t\tdata-test=\"agent-builder-back\"\n\t\t\t\t\t\tonClick={onBack}\n\t\t\t\t\t\taria-label=\"Back\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ArrowLeftIcon\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.primary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BackButton>\n\t\t\t\t)}\n\t\t\t\t<TitleRegular color={COLORS.content.primary}>\n\t\t\t\t\t{name || 'Untitled agent'}\n\t\t\t\t</TitleRegular>\n\t\t\t\t<Tag\n\t\t\t\t\ttagText={isLive ? 'Live' : 'Draft'}\n\t\t\t\t\ttype={isLive ? 'positive' : 'neutral'}\n\t\t\t\t\tvariant=\"regular\"\n\t\t\t\t/>\n\t\t\t</TopBarSide>\n\n\t\t\t<TopBarSide>\n\t\t\t\t<Button\n\t\t\t\t\tdata-test=\"agent-builder-save-draft\"\n\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tbuttonText=\"Save as draft\"\n\t\t\t\t\tisLoading={isSaving}\n\t\t\t\t\tonClick={onSaveDraft}\n\t\t\t\t/>\n\t\t\t</TopBarSide>\n\t\t</TopBar>\n\t);\n};\n"],"names":["AgentBuilderTopBar","name","status","onBack","onSaveDraft","isSaving","isLive","TopBar","jsxs","TopBarSide","jsx","BackButton","ArrowLeftIcon","COLORS","TitleRegular","Tag","Button"],"mappings":";;;;;;;AAiBO,MAAMA,IAAwD,CAAC;AAAA,EACrE,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AACD,MAAM;AACL,QAAMC,IAASJ,MAAW;AAC1B,2BACEK,GAAA,EACA,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EACC,UAAA;AAAA,MAAAN,KACA,gBAAAO;AAAA,QAACC;AAAA,QAAA;AAAA,UACA,aAAU;AAAA,UACV,SAASR;AAAA,UACT,cAAW;AAAA,UAEX,UAAA,gBAAAO;AAAA,YAACE;AAAAA,YAAA;AAAA,cACA,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,OAAOC,EAAO,QAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACvB;AAAA,MAAA;AAAA,wBAGDC,GAAA,EAAa,OAAOD,EAAO,QAAQ,SAClC,eAAQ,kBACV;AAAA,MACA,gBAAAH;AAAA,QAACK;AAAA,QAAA;AAAA,UACA,SAAST,IAAS,SAAS;AAAA,UAC3B,MAAMA,IAAS,aAAa;AAAA,UAC5B,SAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IACT,GACD;AAAA,sBAECG,GAAA,EACA,UAAA,gBAAAC;AAAA,MAACM;AAAA,MAAA;AAAA,QACA,aAAU;AAAA,QACV,YAAW;AAAA,QACX,MAAK;AAAA,QACL,YAAW;AAAA,QACX,WAAWX;AAAA,QACX,SAASD;AAAA,MAAA;AAAA,IAAA,EACV,CACD;AAAA,EAAA,GACD;AAEF;"}
@@ -1,198 +1,214 @@
1
- import { jsxs as a, Fragment as nt, jsx as o } from "react/jsx-runtime";
2
- import ot from "../../../assets/icons/cross.svg.js";
3
- import { useState as r, useMemo as rt, useRef as p, useCallback as l } from "react";
4
- import { TitleRegular as st, BodySecondary as it } from "../../TypographyStyle.js";
5
- import { addUnique as K } from "../../../utils/arrayUtils.js";
6
- import { COLORS as A } from "../../../constants/Theme.js";
7
- import { SubAgentScrim as at, SubAgentPanel as lt, SubAgentPanelHeader as ct, SubAgentPanelHeaderText as ut, SubAgentCloseButton as dt, SubAgentPanelBody as mt, SubAgentPanelFooter as gt } from "../AgentBuilder.styled.js";
8
- import { AGENT_CHAR_LIMITS as pt } from "../constants/charLimits.js";
9
- import { buildAgentMentionItems as ft } from "../utils/mentionSerialization.js";
10
- import { SOURCE_ICONS as F, renderSourceIcon as ht } from "../utils/sourceIcons.js";
11
- import { MentionEditor as L } from "./MentionEditor.js";
12
- import { SelectableListSection as bt } from "./SelectableListSection.js";
13
- import { Input as yt } from "../../input/Input.js";
14
- import { Button as N } from "../../button/Button.js";
15
- import { Toaster as St } from "../../toaster/Toaster.js";
16
- const Lt = ({
17
- onClose: f,
18
- onSave: U,
19
- availableTools: s,
20
- onImprove: Ct,
21
- title: j = "Create sub-agent",
22
- initial: c,
23
- appLabel: R = "Manifest",
24
- charLimits: h = pt
1
+ import { jsxs as l, Fragment as rt, jsx as r } from "react/jsx-runtime";
2
+ import st from "../../../assets/icons/cross.svg.js";
3
+ import { useState as s, useMemo as it, useRef as f, useCallback as c } from "react";
4
+ import { TitleRegular as at, BodySecondary as lt } from "../../TypographyStyle.js";
5
+ import { addUnique as L } from "../../../utils/arrayUtils.js";
6
+ import { COLORS as R } from "../../../constants/Theme.js";
7
+ import { SubAgentScrim as ct, SubAgentPanel as ut, SubAgentPanelHeader as dt, SubAgentPanelHeaderText as mt, SubAgentCloseButton as gt, SubAgentPanelBody as pt, SubAgentPanelFooter as ft } from "../AgentBuilder.styled.js";
8
+ import { AGENT_CHAR_LIMITS as ht } from "../constants/charLimits.js";
9
+ import { buildAgentMentionItems as bt, toolSourceLabel as yt } from "../utils/mentionSerialization.js";
10
+ import { SOURCE_ICONS as P, renderSourceIcon as F } from "../utils/sourceIcons.js";
11
+ import { MentionEditor as N } from "./MentionEditor.js";
12
+ import { SelectableListSection as St } from "./SelectableListSection.js";
13
+ import { Input as Ct } from "../../input/Input.js";
14
+ import { Button as U } from "../../button/Button.js";
15
+ import { Toaster as xt } from "../../toaster/Toaster.js";
16
+ const Ut = ({
17
+ onClose: h,
18
+ onSave: j,
19
+ availableTools: i,
20
+ onImprove: It,
21
+ title: w = "Create sub-agent",
22
+ initial: u,
23
+ appLabel: G = "Manifest",
24
+ charLimits: b = ht
25
25
  }) => {
26
- const [b, $] = r(c?.name ?? ""), [u, y] = r(c?.instructions ?? ""), [d, S] = r(c?.guardrail ?? ""), [C, m] = r(c?.tools ?? []), [P, _] = r(!1), [w, k] = r(0), [z, B] = r(0), [xt, Tt] = r(null), M = rt(
27
- () => ft(s, [], R),
28
- [s, R]
29
- ), g = p({}), x = p("instructions"), q = l((t) => {
30
- g.current.instructions = t ?? void 0;
31
- }, []), W = l((t) => {
32
- g.current.guardrail = t ?? void 0;
33
- }, []), D = l(() => {
34
- x.current = "instructions";
35
- }, []), J = l(() => {
36
- x.current = "guardrail";
37
- }, []), O = l(
26
+ const [y, $] = s(u?.name ?? ""), [d, S] = s(u?.instructions ?? ""), [m, C] = s(u?.guardrail ?? ""), [x, g] = s(u?.tools ?? []), [M, k] = s(!1), [z, B] = s(0), [q, E] = s(0), [Tt, vt] = s(null), I = it(
27
+ () => bt(i, [], G),
28
+ [i, G]
29
+ ), p = f({}), T = f("instructions"), W = c((t) => {
30
+ p.current.instructions = t ?? void 0;
31
+ }, []), D = c((t) => {
32
+ p.current.guardrail = t ?? void 0;
33
+ }, []), J = c(() => {
34
+ T.current = "instructions";
35
+ }, []), Q = c(() => {
36
+ T.current = "guardrail";
37
+ }, []), O = c(
38
38
  (t, e) => {
39
- t === "tool" && m((i) => K(i, e));
39
+ t === "tool" && g((n) => L(n, e));
40
40
  },
41
41
  []
42
- ), Q = l((t) => {
43
- (g.current[x.current] ?? g.current.instructions)?.("tool", t);
44
- }, []), [T, I] = r(
42
+ ), V = c((t) => {
43
+ (p.current[T.current] ?? p.current.instructions)?.("tool", t);
44
+ }, []), [v, A] = s(
45
45
  null
46
- ), v = p(null), E = p(0), V = (t) => {
47
- const e = s.find((n) => n.tool_id === t), i = e ? `{{tool:${e.function_key}}}` : null, H = (n) => i ? n.split(i).join("") : n;
48
- v.current = { instructions: u, guardrail: d, tools: C }, y((n) => H(n)), S((n) => H(n)), m((n) => n.filter((et) => et !== t)), k((n) => n + 1), B((n) => n + 1), E.current += 1, I({
49
- id: E.current,
46
+ ), _ = f(null), H = f(0), X = (t) => {
47
+ const e = i.find((o) => o.tool_id === t), n = e ? `{{tool:${e.function_key}}}` : null, a = (o) => n ? o.split(n).join("") : o;
48
+ _.current = { instructions: d, guardrail: m, tools: x }, S((o) => a(o)), C((o) => a(o)), g((o) => o.filter((ot) => ot !== t)), B((o) => o + 1), E((o) => o + 1), H.current += 1, A({
49
+ id: H.current,
50
50
  message: `Tool "${e?.display_name ?? "Tool"}" removed`
51
51
  });
52
- }, X = () => {
53
- const t = v.current;
54
- t && (y(t.instructions), S(t.guardrail), m(t.tools), k((e) => e + 1), B((e) => e + 1), v.current = null), I(null);
55
- }, G = b.trim().length > 0 && (u.trim().length > 0 || d.trim().length > 0), Y = C.map((t) => {
56
- const e = s.find((i) => i.tool_id === t);
52
+ }, Y = () => {
53
+ const t = _.current;
54
+ t && (S(t.instructions), C(t.guardrail), g(t.tools), B((e) => e + 1), E((e) => e + 1), _.current = null), A(null);
55
+ }, K = y.trim().length > 0 && (d.trim().length > 0 || m.trim().length > 0), Z = x.map((t) => {
56
+ const e = i.find((n) => n.tool_id === t);
57
57
  return e ? {
58
58
  id: t,
59
59
  label: e.display_name,
60
- icon: F[e.source ?? "manifest"]
60
+ icon: P[e.source ?? "manifest"]
61
61
  } : null;
62
- }).filter((t) => t !== null), Z = s.map((t) => ({
62
+ }).filter((t) => t !== null), tt = i.map((t) => ({
63
63
  label: t.display_name,
64
64
  value: t.tool_id,
65
- leadingIcon: ht(F[t.source ?? "manifest"]) ?? void 0
66
- })), tt = async () => {
67
- if (!G || P)
65
+ leadingIcon: F(P[t.source ?? "manifest"]) ?? void 0
66
+ })), et = (() => {
67
+ const t = [], e = /* @__PURE__ */ new Map();
68
+ return i.forEach((n) => {
69
+ const a = n.source ?? "manifest";
70
+ e.has(a) || (e.set(a, []), t.push(a)), e.get(a)?.push({
71
+ label: n.display_name,
72
+ value: n.tool_id,
73
+ leadingIcon: F(P[n.source ?? "manifest"]) ?? void 0
74
+ });
75
+ }), t.map((n) => ({
76
+ source: n,
77
+ label: yt(n),
78
+ options: e.get(n) ?? []
79
+ }));
80
+ })(), nt = async () => {
81
+ if (!K || M)
68
82
  return;
69
- const t = U({
70
- name: b.trim(),
71
- instructions: u,
72
- guardrail: d,
73
- tools: C
83
+ const t = j({
84
+ name: y.trim(),
85
+ instructions: d,
86
+ guardrail: m,
87
+ tools: x
74
88
  });
75
89
  if (t && typeof t.then == "function") {
76
- _(!0);
90
+ k(!0);
77
91
  try {
78
92
  await t;
79
93
  } finally {
80
- _(!1);
94
+ k(!1);
81
95
  }
82
96
  }
83
97
  };
84
- return /* @__PURE__ */ a(nt, { children: [
85
- /* @__PURE__ */ o(at, { onClick: f, "data-test": "subagent-scrim" }),
86
- /* @__PURE__ */ a(lt, { "data-test": "create-subagent-panel", children: [
87
- /* @__PURE__ */ a(ct, { children: [
88
- /* @__PURE__ */ a(ut, { children: [
89
- /* @__PURE__ */ o(st, { color: A.content.primary, children: j }),
90
- /* @__PURE__ */ o(it, { color: A.content.secondary, children: "Each sub-agent handles one piece of the job. Use @ in the main instructions to call them." })
98
+ return /* @__PURE__ */ l(rt, { children: [
99
+ /* @__PURE__ */ r(ct, { onClick: h, "data-test": "subagent-scrim" }),
100
+ /* @__PURE__ */ l(ut, { "data-test": "create-subagent-panel", children: [
101
+ /* @__PURE__ */ l(dt, { children: [
102
+ /* @__PURE__ */ l(mt, { children: [
103
+ /* @__PURE__ */ r(at, { color: R.content.primary, children: w }),
104
+ /* @__PURE__ */ r(lt, { color: R.content.secondary, children: "Each sub-agent handles one piece of the job. Use @ in the main instructions to call them." })
91
105
  ] }),
92
- /* @__PURE__ */ o(dt, { onClick: f, "aria-label": "Close", children: /* @__PURE__ */ o(
93
- ot,
106
+ /* @__PURE__ */ r(gt, { onClick: h, "aria-label": "Close", children: /* @__PURE__ */ r(
107
+ st,
94
108
  {
95
109
  width: 20,
96
110
  height: 20,
97
- color: A.content.secondary
111
+ color: R.content.secondary
98
112
  }
99
113
  ) })
100
114
  ] }),
101
- /* @__PURE__ */ a(mt, { children: [
102
- /* @__PURE__ */ o(
103
- yt,
115
+ /* @__PURE__ */ l(pt, { children: [
116
+ /* @__PURE__ */ r(
117
+ Ct,
104
118
  {
105
119
  "data-test": "subagent-name",
106
120
  labelText: "Agent name",
107
121
  labelTextBold: !0,
108
122
  placeholder: "Enter agent name",
109
- value: b,
110
- maxCharLimit: h.name,
123
+ value: y,
124
+ maxCharLimit: b.name,
111
125
  maxCharLimitPosition: "TOP",
112
126
  maxCharStyle: { fontSize: 12, lineHeight: "16px" },
113
127
  onChangeText: $
114
128
  }
115
129
  ),
116
- /* @__PURE__ */ o(
117
- L,
130
+ /* @__PURE__ */ r(
131
+ N,
118
132
  {
119
133
  "data-test": "subagent-instructions",
120
134
  label: "Instructions",
121
- value: u,
122
- onChange: y,
123
- maxLength: h.instructions,
135
+ value: d,
136
+ onChange: S,
137
+ maxLength: b.instructions,
124
138
  placeholder: "Write the steps in plain English. Type @ to reference a tool.",
125
139
  minHeight: "160px",
126
- resetKey: `instr-${w}`,
127
- mentionItems: M,
128
- tools: s,
140
+ resetKey: `instr-${z}`,
141
+ mentionItems: I,
142
+ tools: i,
129
143
  onMentionSelect: O,
130
- onFocus: D,
131
- registerInsert: q
144
+ onFocus: J,
145
+ registerInsert: W
132
146
  }
133
147
  ),
134
- /* @__PURE__ */ o(
135
- L,
148
+ /* @__PURE__ */ r(
149
+ N,
136
150
  {
137
151
  "data-test": "subagent-guardrail",
138
152
  label: "Guardrails",
139
- value: d,
140
- onChange: S,
141
- maxLength: h.guardrail,
153
+ value: m,
154
+ onChange: C,
155
+ maxLength: b.guardrail,
142
156
  placeholder: "e.g. Never discuss competitor pricing. Type @ to reference a tool.",
143
157
  minHeight: "160px",
144
- resetKey: `guard-${z}`,
145
- mentionItems: M,
146
- tools: s,
158
+ resetKey: `guard-${q}`,
159
+ mentionItems: I,
160
+ tools: i,
147
161
  onMentionSelect: O,
148
- onFocus: J,
149
- registerInsert: W
162
+ onFocus: Q,
163
+ registerInsert: D
150
164
  }
151
165
  ),
152
- /* @__PURE__ */ o(
153
- bt,
166
+ /* @__PURE__ */ r(
167
+ St,
154
168
  {
155
169
  title: "Tools this agent can use",
156
170
  dataTestPrefix: "subagent-tools",
157
- items: Y,
158
- addableOptions: Z,
171
+ items: Z,
172
+ addableOptions: tt,
173
+ sourceGroups: et,
174
+ mentionItems: I,
159
175
  emptyText: "No tools added yet.",
160
176
  onAdd: (t) => {
161
- Q(t), m((e) => K(e, t));
177
+ V(t), g((e) => L(e, t));
162
178
  },
163
- onRemove: V
179
+ onRemove: X
164
180
  }
165
181
  )
166
182
  ] }),
167
- /* @__PURE__ */ a(gt, { children: [
168
- /* @__PURE__ */ o(
169
- N,
183
+ /* @__PURE__ */ l(ft, { children: [
184
+ /* @__PURE__ */ r(
185
+ U,
170
186
  {
171
187
  "data-test": "subagent-save",
172
188
  buttonType: "primary",
173
189
  size: "small",
174
190
  buttonText: "Save",
175
- disabled: !G,
176
- isLoading: P,
177
- onClick: tt
191
+ disabled: !K,
192
+ isLoading: M,
193
+ onClick: nt
178
194
  }
179
195
  ),
180
- /* @__PURE__ */ o(
181
- N,
196
+ /* @__PURE__ */ r(
197
+ U,
182
198
  {
183
199
  "data-test": "subagent-cancel",
184
- buttonType: "secondary",
200
+ buttonType: "tertiaryGray",
185
201
  size: "small",
186
202
  buttonText: "Cancel",
187
- onClick: f
203
+ onClick: h
188
204
  }
189
205
  )
190
206
  ] })
191
207
  ] }),
192
- T && /* @__PURE__ */ o(
193
- St,
208
+ v && /* @__PURE__ */ r(
209
+ xt,
194
210
  {
195
- text: T.message,
211
+ text: v.message,
196
212
  type: "info",
197
213
  position: "top-right",
198
214
  autoClose: 5e3,
@@ -200,15 +216,15 @@ const Lt = ({
200
216
  buttonProps: {
201
217
  buttonText: "Undo",
202
218
  showButton: !0,
203
- onButtonClick: () => (X(), {})
219
+ onButtonClick: () => (Y(), {})
204
220
  },
205
- onCloseToast: () => I(null)
221
+ onCloseToast: () => A(null)
206
222
  },
207
- T.id
223
+ v.id
208
224
  )
209
225
  ] });
210
226
  };
211
227
  export {
212
- Lt as CreateSubAgentPanel
228
+ Ut as CreateSubAgentPanel
213
229
  };
214
230
  //# sourceMappingURL=CreateSubAgentPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateSubAgentPanel.js","sources":["../../../../../src/components/agent-builder/components/CreateSubAgentPanel.tsx"],"sourcesContent":["import CrossIcon from '@src/assets/icons/cross.svg';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { Button } from '@src/components/button';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Input } from '@src/components/input';\nimport { Toaster } from '@src/components/toaster';\nimport { BodySecondary, TitleRegular } from '@src/components/TypographyStyle';\nimport { addUnique } from '@src/utils/arrayUtils';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentTool, SubAgentDraft } from '../AgentBuilder.model';\nimport {\n\tSubAgentCloseButton,\n\tSubAgentPanel,\n\tSubAgentPanelBody,\n\tSubAgentPanelFooter,\n\tSubAgentPanelHeader,\n\tSubAgentPanelHeaderText,\n\tSubAgentScrim,\n} from '../AgentBuilder.styled';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { buildAgentMentionItems } from '../utils/mentionSerialization';\nimport { renderSourceIcon, SOURCE_ICONS } from '../utils/sourceIcons';\nimport { MentionEditor } from './MentionEditor';\nimport { SelectableItem, SelectableListSection } from './SelectableListSection';\n\ntype InsertFn = (kind: 'tool' | 'subagent', id: string, label?: string) => void;\n\ninterface CreateSubAgentPanelProps {\n\tonClose: () => void;\n\t/** Persist the draft. The drawer shows a loader while the returned promise is pending. */\n\tonSave: (draft: SubAgentDraft) => void | Promise<void>;\n\tavailableTools: AgentTool[];\n\t/** Optional \"Improve with AI\" for instructions / guardrails. Omit to hide the buttons. */\n\tonImprove?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\t/** Header title — \"Create sub-agent\" (default) or \"Edit sub-agent\". */\n\ttitle?: string;\n\t/** Initial values, e.g. when configuring an existing sub-agent. */\n\tinitial?: SubAgentDraft;\n\t/** Tool-source fallback label for chips (host app). */\n\tappLabel?: string;\n\t/** Resolved character limits (defaults to {@link AGENT_CHAR_LIMITS}). */\n\tcharLimits?: AgentCharLimits;\n}\n\n/**\n * Right-side drawer for creating / editing a sub-agent (name, instructions,\n * guardrails, tools). Instructions & Guardrails are `@`-mention editors (tools\n * only — sub-agents can't nest); adding a tool from the list inserts it at the\n * last-focused field's cursor. Mount it fresh per open (key it) so `initial`\n * seeds the draft.\n */\nexport const CreateSubAgentPanel: React.FC<CreateSubAgentPanelProps> = ({\n\tonClose,\n\tonSave,\n\tavailableTools,\n\tonImprove,\n\ttitle = 'Create sub-agent',\n\tinitial,\n\tappLabel = 'Manifest',\n\tcharLimits = AGENT_CHAR_LIMITS,\n}) => {\n\tconst [name, setName] = useState(initial?.name ?? '');\n\tconst [instructions, setInstructions] = useState(initial?.instructions ?? '');\n\tconst [guardrail, setGuardrail] = useState(initial?.guardrail ?? '');\n\tconst [tools, setTools] = useState<string[]>(initial?.tools ?? []);\n\tconst [saving, setSaving] = useState(false);\n\t// Bumped to remount a field after its text is replaced (e.g. by Improve).\n\tconst [instrKey, setInstrKey] = useState(0);\n\tconst [guardKey, setGuardKey] = useState(0);\n\tconst [improving, setImproving] = useState<\n\t\t'instructions' | 'guardrail' | null\n\t>(null);\n\n\t// Tools-only mention list (sub-agents can't reference other sub-agents).\n\tconst mentionItems = useMemo(\n\t\t() => buildAgentMentionItems(availableTools, [], appLabel),\n\t\t[availableTools, appLabel],\n\t);\n\n\t// Per-field insert + focus registry, so the Tools list inserts a chip into the\n\t// last-focused editor at its cursor.\n\tconst insertersRef = useRef<\n\t\tPartial<Record<'instructions' | 'guardrail', InsertFn>>\n\t>({});\n\tconst lastFocusedRef = useRef<'instructions' | 'guardrail'>('instructions');\n\tconst registerInstr = useCallback((fn: InsertFn | null) => {\n\t\tinsertersRef.current.instructions = fn ?? undefined;\n\t}, []);\n\tconst registerGuard = useCallback((fn: InsertFn | null) => {\n\t\tinsertersRef.current.guardrail = fn ?? undefined;\n\t}, []);\n\tconst focusInstr = useCallback(() => {\n\t\tlastFocusedRef.current = 'instructions';\n\t}, []);\n\tconst focusGuard = useCallback(() => {\n\t\tlastFocusedRef.current = 'guardrail';\n\t}, []);\n\tconst addToolMention = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tif (kind === 'tool') {\n\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tconst insertToolAtCursor = useCallback((id: string) => {\n\t\tconst target =\n\t\t\tinsertersRef.current[lastFocusedRef.current] ??\n\t\t\tinsertersRef.current.instructions;\n\t\ttarget?.('tool', id);\n\t}, []);\n\n\t// Local undo toast for tool removal (drawer state isn't in AgentValue).\n\tconst [undo, setUndo] = useState<{ id: number; message: string } | null>(\n\t\tnull,\n\t);\n\tconst undoSnapshotRef = useRef<{\n\t\tinstructions: string;\n\t\tguardrail: string;\n\t\ttools: string[];\n\t} | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\tconst removeTool = (id: string) => {\n\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\tconst token = tool ? `{{tool:${tool.function_key}}}` : null;\n\t\tconst strip = (text: string) => (token ? text.split(token).join('') : text);\n\t\tundoSnapshotRef.current = { instructions, guardrail, tools };\n\t\tsetInstructions((prev) => strip(prev));\n\t\tsetGuardrail((prev) => strip(prev));\n\t\tsetTools((prev) => prev.filter((t) => t !== id));\n\t\tsetInstrKey((k) => k + 1);\n\t\tsetGuardKey((k) => k + 1);\n\t\tundoIdRef.current += 1;\n\t\tsetUndo({\n\t\t\tid: undoIdRef.current,\n\t\t\tmessage: `Tool \"${tool?.display_name ?? 'Tool'}\" removed`,\n\t\t});\n\t};\n\n\tconst undoRemove = () => {\n\t\tconst snap = undoSnapshotRef.current;\n\t\tif (snap) {\n\t\t\tsetInstructions(snap.instructions);\n\t\t\tsetGuardrail(snap.guardrail);\n\t\t\tsetTools(snap.tools);\n\t\t\tsetInstrKey((k) => k + 1);\n\t\t\tsetGuardKey((k) => k + 1);\n\t\t\tundoSnapshotRef.current = null;\n\t\t}\n\t\tsetUndo(null);\n\t};\n\n\tconst canSave =\n\t\tname.trim().length > 0 &&\n\t\t(instructions.trim().length > 0 || guardrail.trim().length > 0);\n\n\tconst toolItems: SelectableItem[] = tools\n\t\t.map((id): SelectableItem | null => {\n\t\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\t\treturn tool\n\t\t\t\t? {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tlabel: tool.display_name,\n\t\t\t\t\t\ticon: SOURCE_ICONS[tool.source ?? 'manifest'],\n\t\t\t\t }\n\t\t\t\t: null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\t// Offer all tools (re-add allowed); the chip list stays deduped. Icon left of\n\t// the name, no description.\n\tconst toolOptions: SingleOption[] = availableTools.map((t) => ({\n\t\tlabel: t.display_name,\n\t\tvalue: t.tool_id,\n\t\tleadingIcon:\n\t\t\trenderSourceIcon(SOURCE_ICONS[t.source ?? 'manifest']) ?? undefined,\n\t}));\n\n\tconst handleSave = async () => {\n\t\tif (!canSave || saving) {\n\t\t\treturn;\n\t\t}\n\t\tconst result = onSave({\n\t\t\tname: name.trim(),\n\t\t\tinstructions,\n\t\t\tguardrail,\n\t\t\ttools,\n\t\t});\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetSaving(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t} finally {\n\t\t\t\tsetSaving(false);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleImprove = async (kind: 'instructions' | 'guardrail') => {\n\t\tif (!onImprove || improving) {\n\t\t\treturn;\n\t\t}\n\t\tsetImproving(kind);\n\t\ttry {\n\t\t\tconst current = kind === 'instructions' ? instructions : guardrail;\n\t\t\tconst improved = await onImprove(kind, current);\n\t\t\tif (kind === 'instructions') {\n\t\t\t\tsetInstructions(improved);\n\t\t\t\tsetInstrKey((k) => k + 1);\n\t\t\t} else {\n\t\t\t\tsetGuardrail(improved);\n\t\t\t\tsetGuardKey((k) => k + 1);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetImproving(null);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<SubAgentScrim onClick={onClose} data-test=\"subagent-scrim\" />\n\t\t\t<SubAgentPanel data-test=\"create-subagent-panel\">\n\t\t\t\t<SubAgentPanelHeader>\n\t\t\t\t\t<SubAgentPanelHeaderText>\n\t\t\t\t\t\t<TitleRegular color={COLORS.content.primary}>{title}</TitleRegular>\n\t\t\t\t\t\t<BodySecondary color={COLORS.content.secondary}>\n\t\t\t\t\t\t\tEach sub-agent handles one piece of the job. Use @ in the main\n\t\t\t\t\t\t\tinstructions to call them.\n\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t</SubAgentPanelHeaderText>\n\t\t\t\t\t<SubAgentCloseButton onClick={onClose} aria-label=\"Close\">\n\t\t\t\t\t\t<CrossIcon\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SubAgentCloseButton>\n\t\t\t\t</SubAgentPanelHeader>\n\n\t\t\t\t<SubAgentPanelBody>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tdata-test=\"subagent-name\"\n\t\t\t\t\t\tlabelText=\"Agent name\"\n\t\t\t\t\t\tlabelTextBold\n\t\t\t\t\t\tplaceholder=\"Enter agent name\"\n\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\t\t\tmaxCharLimitPosition=\"TOP\"\n\t\t\t\t\t\tmaxCharStyle={{ fontSize: 12, lineHeight: '16px' }}\n\t\t\t\t\t\tonChangeText={setName}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionEditor\n\t\t\t\t\t\tdata-test=\"subagent-instructions\"\n\t\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\t\tvalue={instructions}\n\t\t\t\t\t\tonChange={setInstructions}\n\t\t\t\t\t\tmaxLength={charLimits.instructions}\n\t\t\t\t\t\tplaceholder=\"Write the steps in plain English. Type @ to reference a tool.\"\n\t\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\t\tresetKey={`instr-${instrKey}`}\n\t\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\t\ttools={availableTools}\n\t\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\t\tonFocus={focusInstr}\n\t\t\t\t\t\tregisterInsert={registerInstr}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionEditor\n\t\t\t\t\t\tdata-test=\"subagent-guardrail\"\n\t\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\t\tvalue={guardrail}\n\t\t\t\t\t\tonChange={setGuardrail}\n\t\t\t\t\t\tmaxLength={charLimits.guardrail}\n\t\t\t\t\t\tplaceholder=\"e.g. Never discuss competitor pricing. Type @ to reference a tool.\"\n\t\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\t\tresetKey={`guard-${guardKey}`}\n\t\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\t\ttools={availableTools}\n\t\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\t\tonFocus={focusGuard}\n\t\t\t\t\t\tregisterInsert={registerGuard}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Tools this agent can use\"\n\t\t\t\t\t\tdataTestPrefix=\"subagent-tools\"\n\t\t\t\t\t\titems={toolItems}\n\t\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\tinsertToolAtCursor(id);\n\t\t\t\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={removeTool}\n\t\t\t\t\t/>\n\t\t\t\t</SubAgentPanelBody>\n\n\t\t\t\t<SubAgentPanelFooter>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-test=\"subagent-save\"\n\t\t\t\t\t\tbuttonType=\"primary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tbuttonText=\"Save\"\n\t\t\t\t\t\tdisabled={!canSave}\n\t\t\t\t\t\tisLoading={saving}\n\t\t\t\t\t\tonClick={handleSave}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-test=\"subagent-cancel\"\n\t\t\t\t\t\tbuttonType=\"secondary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tbuttonText=\"Cancel\"\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t/>\n\t\t\t\t</SubAgentPanelFooter>\n\t\t\t</SubAgentPanel>\n\n\t\t\t{undo && (\n\t\t\t\t<Toaster\n\t\t\t\t\tkey={undo.id}\n\t\t\t\t\ttext={undo.message}\n\t\t\t\t\ttype=\"info\"\n\t\t\t\t\tposition=\"top-right\"\n\t\t\t\t\tautoClose={5000}\n\t\t\t\t\thideCloseButton\n\t\t\t\t\tbuttonProps={{\n\t\t\t\t\t\tbuttonText: 'Undo',\n\t\t\t\t\t\tshowButton: true,\n\t\t\t\t\t\tonButtonClick: () => {\n\t\t\t\t\t\t\tundoRemove();\n\t\t\t\t\t\t\treturn {} as Record<string, never>;\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tonCloseToast={() => setUndo(null)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n"],"names":["CreateSubAgentPanel","onClose","onSave","availableTools","onImprove","title","initial","appLabel","charLimits","AGENT_CHAR_LIMITS","name","setName","useState","instructions","setInstructions","guardrail","setGuardrail","tools","setTools","saving","setSaving","instrKey","setInstrKey","guardKey","setGuardKey","improving","setImproving","mentionItems","useMemo","buildAgentMentionItems","insertersRef","useRef","lastFocusedRef","registerInstr","useCallback","fn","registerGuard","focusInstr","focusGuard","addToolMention","kind","id","prev","addUnique","insertToolAtCursor","undo","setUndo","undoSnapshotRef","undoIdRef","removeTool","tool","t","token","strip","text","k","undoRemove","snap","canSave","toolItems","SOURCE_ICONS","x","toolOptions","renderSourceIcon","handleSave","result","jsxs","Fragment","jsx","SubAgentScrim","SubAgentPanel","SubAgentPanelHeader","SubAgentPanelHeaderText","TitleRegular","COLORS","BodySecondary","SubAgentCloseButton","CrossIcon","SubAgentPanelBody","Input","MentionEditor","SelectableListSection","SubAgentPanelFooter","Button","Toaster"],"mappings":"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"}
1
+ {"version":3,"file":"CreateSubAgentPanel.js","sources":["../../../../../src/components/agent-builder/components/CreateSubAgentPanel.tsx"],"sourcesContent":["import CrossIcon from '@src/assets/icons/cross.svg';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { Button } from '@src/components/button';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Input } from '@src/components/input';\nimport { Toaster } from '@src/components/toaster';\nimport { BodySecondary, TitleRegular } from '@src/components/TypographyStyle';\nimport { addUnique } from '@src/utils/arrayUtils';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentTool, SubAgentDraft } from '../AgentBuilder.model';\nimport {\n\tSubAgentCloseButton,\n\tSubAgentPanel,\n\tSubAgentPanelBody,\n\tSubAgentPanelFooter,\n\tSubAgentPanelHeader,\n\tSubAgentPanelHeaderText,\n\tSubAgentScrim,\n} from '../AgentBuilder.styled';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport {\n\tbuildAgentMentionItems,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport { renderSourceIcon, SOURCE_ICONS } from '../utils/sourceIcons';\nimport { MentionEditor } from './MentionEditor';\nimport {\n\tSelectableItem,\n\tSelectableListSection,\n\tSourceGroup,\n} from './SelectableListSection';\n\ntype InsertFn = (kind: 'tool' | 'subagent', id: string, label?: string) => void;\n\ninterface CreateSubAgentPanelProps {\n\tonClose: () => void;\n\t/** Persist the draft. The drawer shows a loader while the returned promise is pending. */\n\tonSave: (draft: SubAgentDraft) => void | Promise<void>;\n\tavailableTools: AgentTool[];\n\t/** Optional \"Improve with AI\" for instructions / guardrails. Omit to hide the buttons. */\n\tonImprove?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\t/** Header title — \"Create sub-agent\" (default) or \"Edit sub-agent\". */\n\ttitle?: string;\n\t/** Initial values, e.g. when configuring an existing sub-agent. */\n\tinitial?: SubAgentDraft;\n\t/** Tool-source fallback label for chips (host app). */\n\tappLabel?: string;\n\t/** Resolved character limits (defaults to {@link AGENT_CHAR_LIMITS}). */\n\tcharLimits?: AgentCharLimits;\n}\n\n/**\n * Right-side drawer for creating / editing a sub-agent (name, instructions,\n * guardrails, tools). Instructions & Guardrails are `@`-mention editors (tools\n * only — sub-agents can't nest); adding a tool from the list inserts it at the\n * last-focused field's cursor. Mount it fresh per open (key it) so `initial`\n * seeds the draft.\n */\nexport const CreateSubAgentPanel: React.FC<CreateSubAgentPanelProps> = ({\n\tonClose,\n\tonSave,\n\tavailableTools,\n\tonImprove,\n\ttitle = 'Create sub-agent',\n\tinitial,\n\tappLabel = 'Manifest',\n\tcharLimits = AGENT_CHAR_LIMITS,\n}) => {\n\tconst [name, setName] = useState(initial?.name ?? '');\n\tconst [instructions, setInstructions] = useState(initial?.instructions ?? '');\n\tconst [guardrail, setGuardrail] = useState(initial?.guardrail ?? '');\n\tconst [tools, setTools] = useState<string[]>(initial?.tools ?? []);\n\tconst [saving, setSaving] = useState(false);\n\t// Bumped to remount a field after its text is replaced (e.g. by Improve).\n\tconst [instrKey, setInstrKey] = useState(0);\n\tconst [guardKey, setGuardKey] = useState(0);\n\tconst [improving, setImproving] = useState<\n\t\t'instructions' | 'guardrail' | null\n\t>(null);\n\n\t// Tools-only mention list (sub-agents can't reference other sub-agents).\n\tconst mentionItems = useMemo(\n\t\t() => buildAgentMentionItems(availableTools, [], appLabel),\n\t\t[availableTools, appLabel],\n\t);\n\n\t// Per-field insert + focus registry, so the Tools list inserts a chip into the\n\t// last-focused editor at its cursor.\n\tconst insertersRef = useRef<\n\t\tPartial<Record<'instructions' | 'guardrail', InsertFn>>\n\t>({});\n\tconst lastFocusedRef = useRef<'instructions' | 'guardrail'>('instructions');\n\tconst registerInstr = useCallback((fn: InsertFn | null) => {\n\t\tinsertersRef.current.instructions = fn ?? undefined;\n\t}, []);\n\tconst registerGuard = useCallback((fn: InsertFn | null) => {\n\t\tinsertersRef.current.guardrail = fn ?? undefined;\n\t}, []);\n\tconst focusInstr = useCallback(() => {\n\t\tlastFocusedRef.current = 'instructions';\n\t}, []);\n\tconst focusGuard = useCallback(() => {\n\t\tlastFocusedRef.current = 'guardrail';\n\t}, []);\n\tconst addToolMention = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tif (kind === 'tool') {\n\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tconst insertToolAtCursor = useCallback((id: string) => {\n\t\tconst target =\n\t\t\tinsertersRef.current[lastFocusedRef.current] ??\n\t\t\tinsertersRef.current.instructions;\n\t\ttarget?.('tool', id);\n\t}, []);\n\n\t// Local undo toast for tool removal (drawer state isn't in AgentValue).\n\tconst [undo, setUndo] = useState<{ id: number; message: string } | null>(\n\t\tnull,\n\t);\n\tconst undoSnapshotRef = useRef<{\n\t\tinstructions: string;\n\t\tguardrail: string;\n\t\ttools: string[];\n\t} | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\tconst removeTool = (id: string) => {\n\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\tconst token = tool ? `{{tool:${tool.function_key}}}` : null;\n\t\tconst strip = (text: string) => (token ? text.split(token).join('') : text);\n\t\tundoSnapshotRef.current = { instructions, guardrail, tools };\n\t\tsetInstructions((prev) => strip(prev));\n\t\tsetGuardrail((prev) => strip(prev));\n\t\tsetTools((prev) => prev.filter((t) => t !== id));\n\t\tsetInstrKey((k) => k + 1);\n\t\tsetGuardKey((k) => k + 1);\n\t\tundoIdRef.current += 1;\n\t\tsetUndo({\n\t\t\tid: undoIdRef.current,\n\t\t\tmessage: `Tool \"${tool?.display_name ?? 'Tool'}\" removed`,\n\t\t});\n\t};\n\n\tconst undoRemove = () => {\n\t\tconst snap = undoSnapshotRef.current;\n\t\tif (snap) {\n\t\t\tsetInstructions(snap.instructions);\n\t\t\tsetGuardrail(snap.guardrail);\n\t\t\tsetTools(snap.tools);\n\t\t\tsetInstrKey((k) => k + 1);\n\t\t\tsetGuardKey((k) => k + 1);\n\t\t\tundoSnapshotRef.current = null;\n\t\t}\n\t\tsetUndo(null);\n\t};\n\n\tconst canSave =\n\t\tname.trim().length > 0 &&\n\t\t(instructions.trim().length > 0 || guardrail.trim().length > 0);\n\n\tconst toolItems: SelectableItem[] = tools\n\t\t.map((id): SelectableItem | null => {\n\t\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\t\treturn tool\n\t\t\t\t? {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tlabel: tool.display_name,\n\t\t\t\t\t\ticon: SOURCE_ICONS[tool.source ?? 'manifest'],\n\t\t\t\t }\n\t\t\t\t: null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\t// Offer all tools (re-add allowed); the chip list stays deduped. Icon left of\n\t// the name, no description.\n\tconst toolOptions: SingleOption[] = availableTools.map((t) => ({\n\t\tlabel: t.display_name,\n\t\tvalue: t.tool_id,\n\t\tleadingIcon:\n\t\t\trenderSourceIcon(SOURCE_ICONS[t.source ?? 'manifest']) ?? undefined,\n\t}));\n\n\t// Group tools by source (Manifest / Shopify / …) so the empty state shows the\n\t// same per-source buttons as the main builder's side panel.\n\tconst toolSourceGroups: SourceGroup[] = (() => {\n\t\tconst order: string[] = [];\n\t\tconst bySource = new Map<string, SingleOption[]>();\n\t\tavailableTools.forEach((t) => {\n\t\t\tconst src = t.source ?? 'manifest';\n\t\t\tif (!bySource.has(src)) {\n\t\t\t\tbySource.set(src, []);\n\t\t\t\torder.push(src);\n\t\t\t}\n\t\t\tbySource.get(src)?.push({\n\t\t\t\tlabel: t.display_name,\n\t\t\t\tvalue: t.tool_id,\n\t\t\t\tleadingIcon:\n\t\t\t\t\trenderSourceIcon(SOURCE_ICONS[t.source ?? 'manifest']) ?? undefined,\n\t\t\t});\n\t\t});\n\t\treturn order.map((src) => ({\n\t\t\tsource: src,\n\t\t\tlabel: toolSourceLabel(src),\n\t\t\toptions: bySource.get(src) ?? [],\n\t\t}));\n\t})();\n\n\tconst handleSave = async () => {\n\t\tif (!canSave || saving) {\n\t\t\treturn;\n\t\t}\n\t\tconst result = onSave({\n\t\t\tname: name.trim(),\n\t\t\tinstructions,\n\t\t\tguardrail,\n\t\t\ttools,\n\t\t});\n\t\tif (result && typeof (result as Promise<void>).then === 'function') {\n\t\t\tsetSaving(true);\n\t\t\ttry {\n\t\t\t\tawait result;\n\t\t\t} finally {\n\t\t\t\tsetSaving(false);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleImprove = async (kind: 'instructions' | 'guardrail') => {\n\t\tif (!onImprove || improving) {\n\t\t\treturn;\n\t\t}\n\t\tsetImproving(kind);\n\t\ttry {\n\t\t\tconst current = kind === 'instructions' ? instructions : guardrail;\n\t\t\tconst improved = await onImprove(kind, current);\n\t\t\tif (kind === 'instructions') {\n\t\t\t\tsetInstructions(improved);\n\t\t\t\tsetInstrKey((k) => k + 1);\n\t\t\t} else {\n\t\t\t\tsetGuardrail(improved);\n\t\t\t\tsetGuardKey((k) => k + 1);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetImproving(null);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<SubAgentScrim onClick={onClose} data-test=\"subagent-scrim\" />\n\t\t\t<SubAgentPanel data-test=\"create-subagent-panel\">\n\t\t\t\t<SubAgentPanelHeader>\n\t\t\t\t\t<SubAgentPanelHeaderText>\n\t\t\t\t\t\t<TitleRegular color={COLORS.content.primary}>{title}</TitleRegular>\n\t\t\t\t\t\t<BodySecondary color={COLORS.content.secondary}>\n\t\t\t\t\t\t\tEach sub-agent handles one piece of the job. Use @ in the main\n\t\t\t\t\t\t\tinstructions to call them.\n\t\t\t\t\t\t</BodySecondary>\n\t\t\t\t\t</SubAgentPanelHeaderText>\n\t\t\t\t\t<SubAgentCloseButton onClick={onClose} aria-label=\"Close\">\n\t\t\t\t\t\t<CrossIcon\n\t\t\t\t\t\t\twidth={20}\n\t\t\t\t\t\t\theight={20}\n\t\t\t\t\t\t\tcolor={COLORS.content.secondary}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SubAgentCloseButton>\n\t\t\t\t</SubAgentPanelHeader>\n\n\t\t\t\t<SubAgentPanelBody>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tdata-test=\"subagent-name\"\n\t\t\t\t\t\tlabelText=\"Agent name\"\n\t\t\t\t\t\tlabelTextBold\n\t\t\t\t\t\tplaceholder=\"Enter agent name\"\n\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\t\t\tmaxCharLimitPosition=\"TOP\"\n\t\t\t\t\t\tmaxCharStyle={{ fontSize: 12, lineHeight: '16px' }}\n\t\t\t\t\t\tonChangeText={setName}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionEditor\n\t\t\t\t\t\tdata-test=\"subagent-instructions\"\n\t\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\t\tvalue={instructions}\n\t\t\t\t\t\tonChange={setInstructions}\n\t\t\t\t\t\tmaxLength={charLimits.instructions}\n\t\t\t\t\t\tplaceholder=\"Write the steps in plain English. Type @ to reference a tool.\"\n\t\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\t\tresetKey={`instr-${instrKey}`}\n\t\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\t\ttools={availableTools}\n\t\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\t\tonFocus={focusInstr}\n\t\t\t\t\t\tregisterInsert={registerInstr}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionEditor\n\t\t\t\t\t\tdata-test=\"subagent-guardrail\"\n\t\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\t\tvalue={guardrail}\n\t\t\t\t\t\tonChange={setGuardrail}\n\t\t\t\t\t\tmaxLength={charLimits.guardrail}\n\t\t\t\t\t\tplaceholder=\"e.g. Never discuss competitor pricing. Type @ to reference a tool.\"\n\t\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\t\tresetKey={`guard-${guardKey}`}\n\t\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\t\ttools={availableTools}\n\t\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\t\tonFocus={focusGuard}\n\t\t\t\t\t\tregisterInsert={registerGuard}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Tools this agent can use\"\n\t\t\t\t\t\tdataTestPrefix=\"subagent-tools\"\n\t\t\t\t\t\titems={toolItems}\n\t\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\t\tsourceGroups={toolSourceGroups}\n\t\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\tinsertToolAtCursor(id);\n\t\t\t\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={removeTool}\n\t\t\t\t\t/>\n\t\t\t\t</SubAgentPanelBody>\n\n\t\t\t\t<SubAgentPanelFooter>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-test=\"subagent-save\"\n\t\t\t\t\t\tbuttonType=\"primary\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tbuttonText=\"Save\"\n\t\t\t\t\t\tdisabled={!canSave}\n\t\t\t\t\t\tisLoading={saving}\n\t\t\t\t\t\tonClick={handleSave}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdata-test=\"subagent-cancel\"\n\t\t\t\t\t\tbuttonType=\"tertiaryGray\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tbuttonText=\"Cancel\"\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t/>\n\t\t\t\t</SubAgentPanelFooter>\n\t\t\t</SubAgentPanel>\n\n\t\t\t{undo && (\n\t\t\t\t<Toaster\n\t\t\t\t\tkey={undo.id}\n\t\t\t\t\ttext={undo.message}\n\t\t\t\t\ttype=\"info\"\n\t\t\t\t\tposition=\"top-right\"\n\t\t\t\t\tautoClose={5000}\n\t\t\t\t\thideCloseButton\n\t\t\t\t\tbuttonProps={{\n\t\t\t\t\t\tbuttonText: 'Undo',\n\t\t\t\t\t\tshowButton: true,\n\t\t\t\t\t\tonButtonClick: () => {\n\t\t\t\t\t\t\tundoRemove();\n\t\t\t\t\t\t\treturn {} as Record<string, never>;\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t\tonCloseToast={() => setUndo(null)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n"],"names":["CreateSubAgentPanel","onClose","onSave","availableTools","onImprove","title","initial","appLabel","charLimits","AGENT_CHAR_LIMITS","name","setName","useState","instructions","setInstructions","guardrail","setGuardrail","tools","setTools","saving","setSaving","instrKey","setInstrKey","guardKey","setGuardKey","improving","setImproving","mentionItems","useMemo","buildAgentMentionItems","insertersRef","useRef","lastFocusedRef","registerInstr","useCallback","fn","registerGuard","focusInstr","focusGuard","addToolMention","kind","id","prev","addUnique","insertToolAtCursor","undo","setUndo","undoSnapshotRef","undoIdRef","removeTool","tool","t","token","strip","text","k","undoRemove","snap","canSave","toolItems","SOURCE_ICONS","x","toolOptions","renderSourceIcon","toolSourceGroups","order","bySource","src","toolSourceLabel","handleSave","result","jsxs","Fragment","jsx","SubAgentScrim","SubAgentPanel","SubAgentPanelHeader","SubAgentPanelHeaderText","TitleRegular","COLORS","BodySecondary","SubAgentCloseButton","CrossIcon","SubAgentPanelBody","Input","MentionEditor","SelectableListSection","SubAgentPanelFooter","Button","Toaster"],"mappings":"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"}