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

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 +28 -16
  4. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +2 -2
  6. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  8. package/dist/cjs/components/agent-builder/components/MentionEditor.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/MentionPicker.js +11 -11
  12. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/RequireVerificationModal.js +1 -1
  14. package/dist/cjs/components/agent-builder/components/RequireVerificationModal.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +1 -1
  16. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
  18. package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  20. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.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/utils/mentionSerialization.js +4 -4
  24. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  25. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  26. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  27. package/dist/cjs/editor/BikEditor.styles.js +0 -6
  28. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  29. package/dist/cjs/icons/Informational/Common UI/ShieldOutline.js +2 -0
  30. package/dist/cjs/icons/Informational/Common UI/ShieldOutline.js.map +1 -0
  31. package/dist/cjs/icons/index.js +1 -1
  32. package/dist/esm/components/agent-builder/AgentBuilder.js +69 -71
  33. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  34. package/dist/esm/components/agent-builder/AgentBuilder.model.d.ts +0 -8
  35. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +3 -0
  36. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +46 -33
  37. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  38. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +0 -3
  39. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +110 -113
  40. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  41. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +0 -7
  42. package/dist/esm/components/agent-builder/components/MentionEditor.js +74 -89
  43. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  44. package/dist/esm/components/agent-builder/components/MentionField.js +26 -28
  45. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  46. package/dist/esm/components/agent-builder/components/MentionPicker.d.ts +1 -14
  47. package/dist/esm/components/agent-builder/components/MentionPicker.js +138 -167
  48. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  49. package/dist/esm/components/agent-builder/components/RequireVerificationModal.js +5 -5
  50. package/dist/esm/components/agent-builder/components/RequireVerificationModal.js.map +1 -1
  51. package/dist/esm/components/agent-builder/components/SelectableListSection.js +72 -63
  52. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  53. package/dist/esm/components/agent-builder/constants/tools.d.ts +1 -1
  54. package/dist/esm/components/agent-builder/constants/tools.js +5 -6
  55. package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
  56. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +0 -7
  57. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +96 -99
  58. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  59. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +174 -165
  60. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  61. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +4 -14
  62. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +38 -50
  63. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  64. package/dist/esm/components/agent-listing/AgentTableRow.js +1 -1
  65. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  66. package/dist/esm/editor/BikEditor.styles.js +0 -6
  67. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  68. package/dist/esm/icons/Informational/Common UI/ShieldOutline.d.ts +7 -0
  69. package/dist/esm/icons/Informational/Common UI/ShieldOutline.js +35 -0
  70. package/dist/esm/icons/Informational/Common UI/ShieldOutline.js.map +1 -0
  71. package/dist/esm/icons/Informational/Common UI/index.d.ts +1 -0
  72. package/dist/esm/icons/index.d.ts +25 -25
  73. package/dist/esm/icons/index.js +172 -170
  74. package/dist/esm/icons/index.js.map +1 -1
  75. package/package.json +1 -1
@@ -1,25 +1,25 @@
1
- import { jsxs as lt, Fragment as Kt, jsx as c } from "react/jsx-runtime";
2
- import { useState as r, useRef as h, useMemo as Nt, useCallback as a } from "react";
3
- import Dt from "styled-components";
4
- import { addUnique as at } from "../../../utils/arrayUtils.js";
1
+ import { jsxs as it, Fragment as Ot, jsx as c } from "react/jsx-runtime";
2
+ import { useState as r, useRef as h, useMemo as Kt, useCallback as a } from "react";
3
+ import Nt from "styled-components";
4
+ import { addUnique as lt } from "../../../utils/arrayUtils.js";
5
5
  import { COLORS as F } from "../../../constants/Theme.js";
6
- import { AGENT_CHAR_LIMITS as Gt } from "../constants/charLimits.js";
7
- import { CONFIG_TOOL_SOURCES as Bt, ToolSource as p } from "../constants/tools.js";
8
- import { buildAgentMentionItems as Pt, buildCustomToolMentionItems as zt, restApiMentionItem as Lt, configToolMentionItem as Ut, restApiToolName as Ht, configToolName as $t, toolSourceLabel as Ft } from "../utils/mentionSerialization.js";
9
- import { sourceIcon as j, SOURCE_ICONS as ct, renderSourceIcon as ut } from "../utils/sourceIcons.js";
10
- import { buildToolActions as jt } from "../utils/toolActions.js";
11
- import { ConfigToolPanel as Wt } from "./ConfigToolPanel.js";
12
- import { DRAWER_BODY_STYLE as Yt, DRAWER_HEADER_STYLE as Xt, DrawerHeaderText as Zt } from "./DrawerHeaderText.js";
13
- import { MentionEditor as dt } from "./MentionEditor.js";
14
- import { RestApiToolPanel as qt } from "./RestApiToolPanel.js";
15
- import { SelectableListSection as Jt } from "./SelectableListSection.js";
16
- import { SideModal as Qt } from "../../side-modal/SideModal.js";
17
- import { Input as Vt } from "../../input/Input.js";
18
- import { Toaster as te } from "../../toaster/Toaster.js";
19
- const ee = 1e3, W = 1002, mt = (v, f) => {
20
- const s = v ?? [];
6
+ import { AGENT_CHAR_LIMITS as Dt } from "../constants/charLimits.js";
7
+ import { CONFIG_TOOL_SOURCES as Gt, ToolSource as p } from "../constants/tools.js";
8
+ import { buildAgentMentionItems as Bt, buildCustomToolMentionItems as Pt, restApiMentionItem as zt, configToolMentionItem as Lt, restApiToolName as Ut, configToolName as Ht, toolSourceLabel as $t } from "../utils/mentionSerialization.js";
9
+ import { sourceIcon as j, SOURCE_ICONS as at, renderSourceIcon as ct } from "../utils/sourceIcons.js";
10
+ import { buildToolActions as Ft } from "../utils/toolActions.js";
11
+ import { ConfigToolPanel as jt } from "./ConfigToolPanel.js";
12
+ import { DRAWER_BODY_STYLE as Wt, DRAWER_HEADER_STYLE as Yt, DrawerHeaderText as Xt } from "./DrawerHeaderText.js";
13
+ import { MentionEditor as ut } from "./MentionEditor.js";
14
+ import { RestApiToolPanel as Zt } from "./RestApiToolPanel.js";
15
+ import { SelectableListSection as qt } from "./SelectableListSection.js";
16
+ import { SideModal as Jt } from "../../side-modal/SideModal.js";
17
+ import { Input as Qt } from "../../input/Input.js";
18
+ import { Toaster as Vt } from "../../toaster/Toaster.js";
19
+ const te = 1e3, W = 1002, dt = (x, f) => {
20
+ const s = x ?? [];
21
21
  return s.some((u) => u.id === f.id) ? s.map((u) => u.id === f.id ? f : u) : [...s, f];
22
- }, pt = Dt.button`
22
+ }, mt = Nt.button`
23
23
  align-self: flex-start;
24
24
  border: 1px solid ${F.stroke.primary};
25
25
  color: ${F.content.primary};
@@ -35,8 +35,8 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
35
35
  cursor: default;
36
36
  opacity: 0.6;
37
37
  }
38
- `, Ie = ({
39
- onClose: v,
38
+ `, be = ({
39
+ onClose: x,
40
40
  onSave: f,
41
41
  availableTools: s,
42
42
  onImprove: u,
@@ -45,34 +45,33 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
45
45
  title: Z = "Create sub-agent",
46
46
  initial: g,
47
47
  appLabel: q = "Manifest",
48
- charLimits: T = Gt,
49
- variablesData: J
48
+ charLimits: T = Dt
50
49
  }) => {
51
- const [M, ft] = r(g?.name ?? ""), [b, A] = r(g?.instructions ?? ""), [I, R] = r(g?.guardrail ?? ""), [w, _] = r(g?.tools ?? []), [m, O] = r(
50
+ const [M, pt] = r(g?.name ?? ""), [b, A] = r(g?.instructions ?? ""), [I, R] = r(g?.guardrail ?? ""), [w, _] = r(g?.tools ?? []), [m, O] = r(
52
51
  g?.configTools ?? []
53
52
  ), [d, K] = r(
54
53
  g?.restApiTools ?? []
55
- ), [i, y] = r(null), k = h(0), [Q, V] = r(!1), [gt, N] = r(0), [yt, D] = r(0), [S, tt] = r(null), G = Nt(
54
+ ), [i, y] = r(null), k = h(0), [J, Q] = r(!1), [ft, N] = r(0), [gt, D] = r(0), [S, V] = r(null), G = Kt(
56
55
  () => [
57
- ...Pt(s, [], q),
58
- ...zt(m, d)
56
+ ...Bt(s, [], q),
57
+ ...Pt(m, d)
59
58
  ],
60
59
  [s, q, m, d]
61
- ), E = h({}), B = h("instructions"), ht = a((t) => {
60
+ ), E = h({}), B = h("instructions"), yt = a((t) => {
62
61
  E.current.instructions = t ?? void 0;
63
- }, []), Tt = a((t) => {
62
+ }, []), ht = a((t) => {
64
63
  E.current.guardrail = t ?? void 0;
65
- }, []), bt = a(() => {
64
+ }, []), Tt = a(() => {
66
65
  B.current = "instructions";
67
- }, []), It = a(() => {
66
+ }, []), bt = a(() => {
68
67
  B.current = "guardrail";
69
- }, []), et = h(/* @__PURE__ */ new Set());
70
- et.current = new Set(
68
+ }, []), tt = h(/* @__PURE__ */ new Set());
69
+ tt.current = new Set(
71
70
  [...m, ...d].map((t) => t.id)
72
71
  );
73
- const ot = a(
72
+ const et = a(
74
73
  (t, e) => {
75
- t === "tool" && !et.current.has(e) && _((o) => at(o, e));
74
+ t === "tool" && !tt.current.has(e) && _((o) => lt(o, e));
76
75
  },
77
76
  []
78
77
  ), C = a((t, e) => {
@@ -93,27 +92,27 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
93
92
  });
94
93
  },
95
94
  []
96
- ), St = a(
95
+ ), It = a(
97
96
  (t) => {
98
- const e = Bt[t];
97
+ const e = Gt[t];
99
98
  e ? z(e) : P();
100
99
  },
101
100
  [z, P]
102
- ), Ct = a(
101
+ ), St = a(
103
102
  (t) => {
104
103
  const e = !d.some((o) => o.id === t.id);
105
- K((o) => mt(o, t)), e && C(t.id, Lt(t).label), y(null);
104
+ K((o) => dt(o, t)), e && C(t.id, zt(t).label), y(null);
106
105
  },
107
106
  [d, C]
108
- ), xt = a(
107
+ ), Ct = a(
109
108
  (t) => {
110
109
  const e = !m.some((o) => o.id === t.id);
111
- O((o) => mt(o, t)), e && C(t.id, Ut(t).label), y(null);
110
+ O((o) => dt(o, t)), e && C(t.id, Lt(t).label), y(null);
112
111
  },
113
112
  [m, C]
114
113
  ), [L, U] = r(
115
114
  null
116
- ), H = h(null), nt = h(0), vt = (t) => {
115
+ ), H = h(null), ot = h(0), vt = (t) => {
117
116
  const e = s.find((n) => n.tool_id === t)?.display_name ?? d.find((n) => n.id === t)?.name ?? "Tool", o = `{{tool:${t}}}`, l = (n) => n.split(o).join("");
118
117
  H.current = {
119
118
  instructions: b,
@@ -121,54 +120,54 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
121
120
  tools: w,
122
121
  configTools: m,
123
122
  restApiTools: d
124
- }, A((n) => l(n)), R((n) => l(n)), _((n) => n.filter((x) => x !== t)), O((n) => n.filter((x) => x.id !== t)), K((n) => n.filter((x) => x.id !== t)), N((n) => n + 1), D((n) => n + 1), nt.current += 1, U({ id: nt.current, message: `Tool "${e}" removed` });
125
- }, At = () => {
123
+ }, A((n) => l(n)), R((n) => l(n)), _((n) => n.filter((v) => v !== t)), O((n) => n.filter((v) => v.id !== t)), K((n) => n.filter((v) => v.id !== t)), N((n) => n + 1), D((n) => n + 1), ot.current += 1, U({ id: ot.current, message: `Tool "${e}" removed` });
124
+ }, xt = () => {
126
125
  const t = H.current;
127
126
  t && (A(t.instructions), R(t.guardrail), _(t.tools), O(t.configTools), K(t.restApiTools), N((e) => e + 1), D((e) => e + 1), H.current = null), U(null);
128
- }, st = M.trim().length > 0 && (b.trim().length > 0 || I.trim().length > 0), Rt = w.map((t) => {
127
+ }, nt = M.trim().length > 0 && (b.trim().length > 0 || I.trim().length > 0), At = w.map((t) => {
129
128
  const e = s.find((o) => o.tool_id === t);
130
129
  return e ? {
131
130
  id: t,
132
131
  label: e.display_name,
133
132
  icon: j(e.source ?? p.Manifest)
134
133
  } : null;
135
- }).filter((t) => t !== null), _t = d.map((t) => ({
134
+ }).filter((t) => t !== null), Rt = d.map((t) => ({
136
135
  id: t.id,
137
- label: Ht(t),
138
- icon: ct[p.RestApi],
136
+ label: Ut(t),
137
+ icon: at[p.RestApi],
139
138
  onConfigure: () => P(t)
140
- })), kt = m.map((t) => ({
139
+ })), _t = m.map((t) => ({
141
140
  id: t.id,
142
- label: $t(t),
143
- icon: ct[t.tool_key === "send_slack_message" ? p.Slack : p.EmailHandover],
141
+ label: Ht(t),
142
+ icon: at[t.tool_key === "send_slack_message" ? p.Slack : p.EmailHandover],
144
143
  onConfigure: () => z(t.tool_key, t)
145
- })), Et = [
144
+ })), kt = [
145
+ ...At,
146
146
  ...Rt,
147
- ..._t,
148
- ...kt
149
- ], $ = jt(
147
+ ..._t
148
+ ], $ = Ft(
150
149
  X,
151
- St
152
- ), rt = i?.kind === "config" && i.toolKey ? X?.[i.toolKey] : void 0, Mt = s.map((t) => ({
150
+ It
151
+ ), st = i?.kind === "config" && i.toolKey ? X?.[i.toolKey] : void 0, Et = s.map((t) => ({
153
152
  label: t.display_name,
154
153
  value: t.tool_id,
155
- leadingIcon: ut(j(t.source ?? p.Manifest)) ?? void 0
156
- })), wt = (() => {
154
+ leadingIcon: ct(j(t.source ?? p.Manifest)) ?? void 0
155
+ })), Mt = (() => {
157
156
  const t = [], e = /* @__PURE__ */ new Map();
158
157
  return s.forEach((o) => {
159
158
  const l = o.source ?? p.Manifest;
160
159
  e.has(l) || (e.set(l, []), t.push(l)), e.get(l)?.push({
161
160
  label: o.display_name,
162
161
  value: o.tool_id,
163
- leadingIcon: ut(j(o.source ?? p.Manifest)) ?? void 0
162
+ leadingIcon: ct(j(o.source ?? p.Manifest)) ?? void 0
164
163
  });
165
164
  }), t.map((o) => ({
166
165
  source: o,
167
- label: Ft(o),
166
+ label: $t(o),
168
167
  options: e.get(o) ?? []
169
168
  }));
170
- })(), Ot = async () => {
171
- if (!st || Q)
169
+ })(), wt = async () => {
170
+ if (!nt || J)
172
171
  return;
173
172
  const t = f({
174
173
  name: M.trim(),
@@ -179,61 +178,61 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
179
178
  restApiTools: d
180
179
  });
181
180
  if (t && typeof t.then == "function") {
182
- V(!0);
181
+ Q(!0);
183
182
  try {
184
183
  await t;
185
184
  } finally {
186
- V(!1);
185
+ Q(!1);
187
186
  }
188
187
  }
189
- }, it = async (t) => {
188
+ }, rt = async (t) => {
190
189
  if (!(!u || S)) {
191
- tt(t);
190
+ V(t);
192
191
  try {
193
192
  const o = await u(t, t === "instructions" ? b : I);
194
193
  t === "instructions" ? (A(o), N((l) => l + 1)) : (R(o), D((l) => l + 1));
195
194
  } finally {
196
- tt(null);
195
+ V(null);
197
196
  }
198
197
  }
199
198
  };
200
- return /* @__PURE__ */ lt(Kt, { children: [
201
- /* @__PURE__ */ lt(
202
- Qt,
199
+ return /* @__PURE__ */ it(Ot, { children: [
200
+ /* @__PURE__ */ it(
201
+ Jt,
203
202
  {
204
203
  header: Z,
205
204
  closeOnEscapeKey: !1,
206
- zIndex: ee,
205
+ zIndex: te,
207
206
  headerCustomComponent: /* @__PURE__ */ c(
208
- Zt,
207
+ Xt,
209
208
  {
210
209
  title: Z,
211
210
  subtitle: "Each sub-agent handles one piece of the job. Use @ in the main instructions to call them."
212
211
  }
213
212
  ),
214
213
  width: "421px",
215
- headerStyle: Xt,
216
- bodyStyle: Yt,
217
- onClose: v,
214
+ headerStyle: Yt,
215
+ bodyStyle: Wt,
216
+ onClose: x,
218
217
  saveButtonProps: {
219
218
  "data-test": "subagent-save",
220
219
  buttonText: "Save",
221
220
  buttonType: "primary",
222
221
  size: "small",
223
- disabled: !st,
224
- isLoading: Q,
225
- onClick: Ot
222
+ disabled: !nt,
223
+ isLoading: J,
224
+ onClick: wt
226
225
  },
227
226
  cancelButtonProps: {
228
227
  "data-test": "subagent-cancel",
229
228
  buttonText: "Cancel",
230
229
  buttonType: "tertiaryGray",
231
230
  size: "small",
232
- onClick: v
231
+ onClick: x
233
232
  },
234
233
  children: [
235
234
  /* @__PURE__ */ c(
236
- Vt,
235
+ Qt,
237
236
  {
238
237
  "data-test": "subagent-name",
239
238
  labelText: "Agent name",
@@ -243,11 +242,11 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
243
242
  maxCharLimit: T.name,
244
243
  maxCharLimitPosition: "TOP",
245
244
  maxCharStyle: { fontSize: 12, lineHeight: "16px" },
246
- onChangeText: ft
245
+ onChangeText: pt
247
246
  }
248
247
  ),
249
248
  /* @__PURE__ */ c(
250
- dt,
249
+ ut,
251
250
  {
252
251
  "data-test": "subagent-instructions",
253
252
  label: "Instructions",
@@ -256,28 +255,27 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
256
255
  maxLength: T.instructions,
257
256
  placeholder: "Write the steps in plain English. Type @ to reference a tool.",
258
257
  minHeight: "160px",
259
- resetKey: `instr-${gt}`,
258
+ resetKey: `instr-${ft}`,
260
259
  mentionItems: G,
261
260
  tools: s,
262
261
  toolActions: $,
263
- variablesData: J,
264
- onMentionSelect: ot,
265
- onFocus: bt,
266
- registerInsert: ht,
262
+ onMentionSelect: et,
263
+ onFocus: Tt,
264
+ registerInsert: yt,
267
265
  action: u ? /* @__PURE__ */ c(
268
- pt,
266
+ mt,
269
267
  {
270
268
  type: "button",
271
269
  "data-test": "subagent-improve-instructions",
272
270
  disabled: S !== null,
273
- onClick: () => it("instructions"),
271
+ onClick: () => rt("instructions"),
274
272
  children: S === "instructions" ? "Improving…" : "Improve with AI"
275
273
  }
276
274
  ) : void 0
277
275
  }
278
276
  ),
279
277
  /* @__PURE__ */ c(
280
- dt,
278
+ ut,
281
279
  {
282
280
  "data-test": "subagent-guardrail",
283
281
  label: "Guardrails",
@@ -286,40 +284,39 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
286
284
  maxLength: T.guardrail,
287
285
  placeholder: "e.g. Never discuss competitor pricing. Type @ to reference a tool.",
288
286
  minHeight: "160px",
289
- resetKey: `guard-${yt}`,
287
+ resetKey: `guard-${gt}`,
290
288
  mentionItems: G,
291
289
  tools: s,
292
290
  toolActions: $,
293
- variablesData: J,
294
- onMentionSelect: ot,
295
- onFocus: It,
296
- registerInsert: Tt,
291
+ onMentionSelect: et,
292
+ onFocus: bt,
293
+ registerInsert: ht,
297
294
  action: u ? /* @__PURE__ */ c(
298
- pt,
295
+ mt,
299
296
  {
300
297
  type: "button",
301
298
  "data-test": "subagent-improve-guardrail",
302
299
  disabled: S !== null,
303
- onClick: () => it("guardrail"),
300
+ onClick: () => rt("guardrail"),
304
301
  children: S === "guardrail" ? "Improving…" : "Improve with AI"
305
302
  }
306
303
  ) : void 0
307
304
  }
308
305
  ),
309
306
  /* @__PURE__ */ c(
310
- Jt,
307
+ qt,
311
308
  {
312
309
  title: "Tools this agent can use",
313
310
  dataTestPrefix: "subagent-tools",
314
- items: Et,
315
- addableOptions: Mt,
316
- sourceGroups: wt,
311
+ items: kt,
312
+ addableOptions: Et,
313
+ sourceGroups: Mt,
317
314
  mentionItems: G,
318
315
  actionSources: $,
319
316
  emptyText: "No tools added yet.",
320
317
  pickerOpensUp: !0,
321
318
  onAdd: (t) => {
322
- C(t), _((e) => at(e, t));
319
+ C(t), _((e) => lt(e, t));
323
320
  },
324
321
  onRemove: vt,
325
322
  confirmDelete: { noun: "tool", zIndex: W + 1 }
@@ -329,33 +326,33 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
329
326
  }
330
327
  ),
331
328
  i?.kind === "restapi" && /* @__PURE__ */ c(
332
- qt,
329
+ Zt,
333
330
  {
334
331
  initial: i.initialRest,
335
332
  charLimits: T,
336
333
  onImprove: Y,
337
334
  onClose: () => y(null),
338
- onSave: Ct,
335
+ onSave: St,
339
336
  zIndex: W
340
337
  },
341
338
  i.key
342
339
  ),
343
- i?.kind === "config" && i.toolKey && rt && /* @__PURE__ */ c(
344
- Wt,
340
+ i?.kind === "config" && i.toolKey && st && /* @__PURE__ */ c(
341
+ jt,
345
342
  {
346
343
  toolKey: i.toolKey,
347
- template: rt,
344
+ template: st,
348
345
  initial: i.initialConfig,
349
346
  charLimits: T,
350
347
  onImprove: Y,
351
348
  onClose: () => y(null),
352
- onSave: xt,
349
+ onSave: Ct,
353
350
  zIndex: W
354
351
  },
355
352
  i.key
356
353
  ),
357
354
  L && /* @__PURE__ */ c(
358
- te,
355
+ Vt,
359
356
  {
360
357
  text: L.message,
361
358
  type: "info",
@@ -365,7 +362,7 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
365
362
  buttonProps: {
366
363
  buttonText: "Undo",
367
364
  showButton: !0,
368
- onButtonClick: () => (At(), {})
365
+ onButtonClick: () => (xt(), {})
369
366
  },
370
367
  onCloseToast: () => U(null)
371
368
  },
@@ -374,6 +371,6 @@ const ee = 1e3, W = 1002, mt = (v, f) => {
374
371
  ] });
375
372
  };
376
373
  export {
377
- Ie as CreateSubAgentPanel
374
+ be as CreateSubAgentPanel
378
375
  };
379
376
  //# sourceMappingURL=CreateSubAgentPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateSubAgentPanel.js","sources":["../../../../../src/components/agent-builder/components/CreateSubAgentPanel.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Input } from '@src/components/input';\nimport { SideModal } from '@src/components/side-modal';\nimport { Toaster } from '@src/components/toaster';\nimport { addUnique } from '@src/utils/arrayUtils';\nimport { COLORS } from '@src/constants/Theme';\nimport type { VariableListInterfaceV3 } from '../../variable-picker-v3/model';\nimport {\n\tAgentTool,\n\tConfigToolConfig,\n\tConfigToolKey,\n\tParamsBlob,\n\tRestApiToolConfig,\n\tSubAgentDraft,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { CONFIG_TOOL_SOURCES, ToolSource } from '../constants/tools';\nimport {\n\tbuildAgentMentionItems,\n\tbuildCustomToolMentionItems,\n\tconfigToolMentionItem,\n\tconfigToolName,\n\trestApiMentionItem,\n\trestApiToolName,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport {\n\trenderSourceIcon,\n\tSOURCE_ICONS,\n\tsourceIcon,\n} from '../utils/sourceIcons';\nimport { buildToolActions } from '../utils/toolActions';\nimport { ConfigToolPanel } from './ConfigToolPanel';\nimport {\n\tDRAWER_BODY_STYLE,\n\tDRAWER_HEADER_STYLE,\n\tDrawerHeaderText,\n} from './DrawerHeaderText';\nimport { MentionEditor } from './MentionEditor';\nimport { RestApiToolPanel } from './RestApiToolPanel';\nimport {\n\tSelectableItem,\n\tSelectableListSection,\n\tSourceGroup,\n} from './SelectableListSection';\n\n/**\n * The sub-agent drawer sits above the main builder; its own tool drawers\n * (Rest API / email / Slack) stack one level higher so they open ON TOP of it\n * rather than behind (SideModal defaults to z-index 10).\n */\nconst SUBAGENT_ZINDEX = 1000;\nconst TOOL_DRAWER_ZINDEX = 1002;\n\n/** Upsert an item by id (replace when present, append otherwise). */\nconst upsertById = <T extends { id: string }>(\n\tlist: T[] | undefined,\n\titem: T,\n): T[] => {\n\tconst arr = list ?? [];\n\treturn arr.some((x) => x.id === item.id)\n\t\t? arr.map((x) => (x.id === item.id ? item : x))\n\t\t: [...arr, item];\n};\n\n/** Config-tool / Rest API drawer state; `key` remounts fresh per open. */\ninterface ToolDrawerState {\n\tkey: number;\n\tkind: 'restapi' | 'config';\n\ttoolKey?: ConfigToolKey;\n\tinitialRest?: RestApiToolConfig;\n\tinitialConfig?: ConfigToolConfig;\n}\n\n/** Inline \"Improve with AI\" action rendered below a mention editor. */\nconst ImproveButton = styled.button`\n\talign-self: flex-start;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 8px;\n\tpadding: 6px 12px;\n\tfont-size: 13px;\n\tline-height: 1.1;\n\tfont-weight: 600;\n\tcursor: pointer;\n\n\t&:disabled {\n\t\tcursor: default;\n\t\topacity: 0.6;\n\t}\n`;\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/** Optional \"Improve with AI\" for the Rest API / config-tool drawers. */\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n\t/**\n\t * Backend templates (email / Slack) that drive the shared config-tool drawer.\n\t * Each present key enables its tool action in this drawer; absent → hidden.\n\t * Same prop the main builder gets — sub-agents can add the same tools.\n\t */\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\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\t/** Variable catalog for the editors' `@` picker \"Variables\" view. */\n\tvariablesData?: VariableListInterfaceV3[];\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\tonImproveToolInstructions,\n\tconfigToolTemplates,\n\ttitle = 'Create sub-agent',\n\tinitial,\n\tappLabel = 'Manifest',\n\tcharLimits = AGENT_CHAR_LIMITS,\n\tvariablesData,\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\t// Inline-configured tools owned by this sub-agent (same drawers as the main\n\t// agent). Local to the drawer; flow to the consumer via the saved draft.\n\tconst [configTools, setConfigTools] = useState<ConfigToolConfig[]>(\n\t\tinitial?.configTools ?? [],\n\t);\n\tconst [restApiTools, setRestApiTools] = useState<RestApiToolConfig[]>(\n\t\tinitial?.restApiTools ?? [],\n\t);\n\tconst [toolDrawer, setToolDrawer] = useState<ToolDrawerState | null>(null);\n\tconst toolDrawerKeyRef = useRef(0);\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), PLUS\n\t// this drawer's inline custom tools so their `{{tool:<id>}}` tokens rehydrate\n\t// as chips on remount (they aren't in `availableTools`).\n\tconst mentionItems = useMemo(\n\t\t() => [\n\t\t\t...buildAgentMentionItems(availableTools, [], appLabel),\n\t\t\t...buildCustomToolMentionItems(configTools, restApiTools),\n\t\t],\n\t\t[availableTools, appLabel, configTools, restApiTools],\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\t// Latest custom-tool ids, readable from the mount-captured `@` onSelect handler\n\t// (BikEditor captures it once) — mirrors the context's valueRef trick.\n\tconst customToolIdsRef = useRef<Set<string>>(new Set());\n\tcustomToolIdsRef.current = new Set(\n\t\t[...configTools, ...restApiTools].map((t) => t.id),\n\t);\n\tconst addToolMention = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\t// Only catalog tool ids belong in `tools`; custom tools (Rest API / email /\n\t\t\t// Slack) track themselves on their own lists. Picking an existing custom\n\t\t\t// tool from `@` must not leak its id in as a bogus native ref.\n\t\t\tif (kind === 'tool' && !customToolIdsRef.current.has(id)) {\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, label?: string) => {\n\t\tconst target =\n\t\t\tinsertersRef.current[lastFocusedRef.current] ??\n\t\t\tinsertersRef.current.instructions;\n\t\ttarget?.('tool', id, label);\n\t}, []);\n\n\t// Rest API (bespoke) + shared config-tool (email / Slack) drawers, same as the\n\t// main builder's Step 3 — here backed by the drawer's local state.\n\t// ponytail: mirrors Step3HowItResponds; kept local rather than sharing a hook\n\t// because Step3 is context-backed and this drawer is local-state.\n\tconst openRestApi = useCallback((tool?: RestApiToolConfig) => {\n\t\ttoolDrawerKeyRef.current += 1;\n\t\tsetToolDrawer({\n\t\t\tkey: toolDrawerKeyRef.current,\n\t\t\tkind: 'restapi',\n\t\t\tinitialRest: tool,\n\t\t});\n\t}, []);\n\tconst openConfigTool = useCallback(\n\t\t(toolKey: ConfigToolKey, tool?: ConfigToolConfig) => {\n\t\t\ttoolDrawerKeyRef.current += 1;\n\t\t\tsetToolDrawer({\n\t\t\t\tkey: toolDrawerKeyRef.current,\n\t\t\t\tkind: 'config',\n\t\t\t\ttoolKey,\n\t\t\t\tinitialConfig: tool,\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\tconst openToolAction = useCallback(\n\t\t(source: ToolSource) => {\n\t\t\tconst toolKey = CONFIG_TOOL_SOURCES[source];\n\t\t\tif (toolKey) {\n\t\t\t\topenConfigTool(toolKey);\n\t\t\t} else {\n\t\t\t\topenRestApi();\n\t\t\t}\n\t\t},\n\t\t[openConfigTool, openRestApi],\n\t);\n\tconst handleSaveRestApi = useCallback(\n\t\t(tool: RestApiToolConfig) => {\n\t\t\tconst isNew = !restApiTools.some((t) => t.id === tool.id);\n\t\t\tsetRestApiTools((prev) => upsertById(prev, tool));\n\t\t\t// Drop a reference chip at the cursor on creation (edits keep the chip).\n\t\t\tif (isNew) {\n\t\t\t\tinsertToolAtCursor(tool.id, restApiMentionItem(tool).label);\n\t\t\t}\n\t\t\tsetToolDrawer(null);\n\t\t},\n\t\t[restApiTools, insertToolAtCursor],\n\t);\n\tconst handleSaveConfigTool = useCallback(\n\t\t(tool: ConfigToolConfig) => {\n\t\t\tconst isNew = !configTools.some((t) => t.id === tool.id);\n\t\t\tsetConfigTools((prev) => upsertById(prev, tool));\n\t\t\tif (isNew) {\n\t\t\t\tinsertToolAtCursor(tool.id, configToolMentionItem(tool).label);\n\t\t\t}\n\t\t\tsetToolDrawer(null);\n\t\t},\n\t\t[configTools, insertToolAtCursor],\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\tconfigTools: ConfigToolConfig[];\n\t\trestApiTools: RestApiToolConfig[];\n\t} | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\t// Remove ANY tool by id: strip its `{{tool:<id>}}` tokens, remount the fields,\n\t// and drop it from whichever list holds it (catalog `tools` or an inline\n\t// custom-tool list). One undo restores all of it.\n\tconst removeTool = (id: string) => {\n\t\tconst label =\n\t\t\tavailableTools.find((t) => t.tool_id === id)?.display_name ??\n\t\t\trestApiTools.find((t) => t.id === id)?.name ??\n\t\t\t'Tool';\n\t\t// The token stores the tool id (a tool's id is its tool_id).\n\t\tconst token = `{{tool:${id}}}`;\n\t\tconst strip = (text: string) => text.split(token).join('');\n\t\tundoSnapshotRef.current = {\n\t\t\tinstructions,\n\t\t\tguardrail,\n\t\t\ttools,\n\t\t\tconfigTools,\n\t\t\trestApiTools,\n\t\t};\n\t\tsetInstructions((prev) => strip(prev));\n\t\tsetGuardrail((prev) => strip(prev));\n\t\tsetTools((prev) => prev.filter((t) => t !== id));\n\t\tsetConfigTools((prev) => prev.filter((t) => t.id !== id));\n\t\tsetRestApiTools((prev) => prev.filter((t) => t.id !== id));\n\t\tsetInstrKey((k) => k + 1);\n\t\tsetGuardKey((k) => k + 1);\n\t\tundoIdRef.current += 1;\n\t\tsetUndo({ id: undoIdRef.current, message: `Tool \"${label}\" removed` });\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\tsetConfigTools(snap.configTools);\n\t\t\tsetRestApiTools(snap.restApiTools);\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: sourceIcon(tool.source ?? ToolSource.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// Inline-configured tools (Rest API + email / Slack) render as rows in the same\n\t// list, each with its own Configure (edit) action that reopens its drawer.\n\tconst restApiItems: SelectableItem[] = restApiTools.map((t) => ({\n\t\tid: t.id,\n\t\tlabel: restApiToolName(t),\n\t\ticon: SOURCE_ICONS[ToolSource.RestApi],\n\t\tonConfigure: () => openRestApi(t),\n\t}));\n\tconst configToolItems: SelectableItem[] = configTools.map((t) => ({\n\t\tid: t.id,\n\t\tlabel: configToolName(t),\n\t\ticon: SOURCE_ICONS[\n\t\t\tt.tool_key === 'send_slack_message'\n\t\t\t\t? ToolSource.Slack\n\t\t\t\t: ToolSource.EmailHandover\n\t\t],\n\t\tonConfigure: () => openConfigTool(t.tool_key, t),\n\t}));\n\tconst allToolItems: SelectableItem[] = [\n\t\t...toolItems,\n\t\t...restApiItems,\n\t\t...configToolItems,\n\t];\n\n\t// Built-in tool actions (Rest API / email / Slack); the shared email / Slack\n\t// forms appear only when their backend template was provided.\n\tconst toolActionSources = buildToolActions(\n\t\tconfigToolTemplates,\n\t\topenToolAction,\n\t);\n\n\tconst openConfigTemplate =\n\t\ttoolDrawer?.kind === 'config' && toolDrawer.toolKey\n\t\t\t? configToolTemplates?.[toolDrawer.toolKey]\n\t\t\t: undefined;\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(sourceIcon(t.source ?? ToolSource.Manifest)) ??\n\t\t\tundefined,\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 ?? ToolSource.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(sourceIcon(t.source ?? ToolSource.Manifest)) ??\n\t\t\t\t\tundefined,\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\tconfigTools,\n\t\t\trestApiTools,\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<SideModal\n\t\t\t\theader={title}\n\t\t\t\tcloseOnEscapeKey={false}\n\t\t\t\tzIndex={SUBAGENT_ZINDEX}\n\t\t\t\theaderCustomComponent={\n\t\t\t\t\t<DrawerHeaderText\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\tsubtitle=\"Each sub-agent handles one piece of the job. Use @ in the main instructions to call them.\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\twidth=\"421px\"\n\t\t\t\theaderStyle={DRAWER_HEADER_STYLE}\n\t\t\t\tbodyStyle={DRAWER_BODY_STYLE}\n\t\t\t\tonClose={onClose}\n\t\t\t\tsaveButtonProps={{\n\t\t\t\t\t'data-test': 'subagent-save',\n\t\t\t\t\tbuttonText: 'Save',\n\t\t\t\t\tbuttonType: 'primary',\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tdisabled: !canSave,\n\t\t\t\t\tisLoading: saving,\n\t\t\t\t\tonClick: handleSave,\n\t\t\t\t}}\n\t\t\t\tcancelButtonProps={{\n\t\t\t\t\t'data-test': 'subagent-cancel',\n\t\t\t\t\tbuttonText: 'Cancel',\n\t\t\t\t\tbuttonType: 'tertiaryGray',\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tdata-test=\"subagent-name\"\n\t\t\t\t\tlabelText=\"Agent name\"\n\t\t\t\t\tlabelTextBold\n\t\t\t\t\tplaceholder=\"Enter agent name\"\n\t\t\t\t\tvalue={name}\n\t\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\t\tmaxCharLimitPosition=\"TOP\"\n\t\t\t\t\tmaxCharStyle={{ fontSize: 12, lineHeight: '16px' }}\n\t\t\t\t\tonChangeText={setName}\n\t\t\t\t/>\n\n\t\t\t\t<MentionEditor\n\t\t\t\t\tdata-test=\"subagent-instructions\"\n\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\tvalue={instructions}\n\t\t\t\t\tonChange={setInstructions}\n\t\t\t\t\tmaxLength={charLimits.instructions}\n\t\t\t\t\tplaceholder=\"Write the steps in plain English. Type @ to reference a tool.\"\n\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\tresetKey={`instr-${instrKey}`}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\ttools={availableTools}\n\t\t\t\t\ttoolActions={toolActionSources}\n\t\t\t\t\tvariablesData={variablesData}\n\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\tonFocus={focusInstr}\n\t\t\t\t\tregisterInsert={registerInstr}\n\t\t\t\t\taction={\n\t\t\t\t\t\tonImprove ? (\n\t\t\t\t\t\t\t<ImproveButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test=\"subagent-improve-instructions\"\n\t\t\t\t\t\t\t\tdisabled={improving !== null}\n\t\t\t\t\t\t\t\tonClick={() => handleImprove('instructions')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{improving === 'instructions'\n\t\t\t\t\t\t\t\t\t? 'Improving…'\n\t\t\t\t\t\t\t\t\t: 'Improve with AI'}\n\t\t\t\t\t\t\t</ImproveButton>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<MentionEditor\n\t\t\t\t\tdata-test=\"subagent-guardrail\"\n\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\tvalue={guardrail}\n\t\t\t\t\tonChange={setGuardrail}\n\t\t\t\t\tmaxLength={charLimits.guardrail}\n\t\t\t\t\tplaceholder=\"e.g. Never discuss competitor pricing. Type @ to reference a tool.\"\n\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\tresetKey={`guard-${guardKey}`}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\ttools={availableTools}\n\t\t\t\t\ttoolActions={toolActionSources}\n\t\t\t\t\tvariablesData={variablesData}\n\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\tonFocus={focusGuard}\n\t\t\t\t\tregisterInsert={registerGuard}\n\t\t\t\t\taction={\n\t\t\t\t\t\tonImprove ? (\n\t\t\t\t\t\t\t<ImproveButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test=\"subagent-improve-guardrail\"\n\t\t\t\t\t\t\t\tdisabled={improving !== null}\n\t\t\t\t\t\t\t\tonClick={() => handleImprove('guardrail')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{improving === 'guardrail' ? 'Improving…' : 'Improve with AI'}\n\t\t\t\t\t\t\t</ImproveButton>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<SelectableListSection\n\t\t\t\t\ttitle=\"Tools this agent can use\"\n\t\t\t\t\tdataTestPrefix=\"subagent-tools\"\n\t\t\t\t\titems={allToolItems}\n\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\tsourceGroups={toolSourceGroups}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\tactionSources={toolActionSources}\n\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\tpickerOpensUp\n\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\tinsertToolAtCursor(id);\n\t\t\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t\t\t}}\n\t\t\t\t\tonRemove={removeTool}\n\t\t\t\t\tconfirmDelete={{ noun: 'tool', zIndex: TOOL_DRAWER_ZINDEX + 1 }}\n\t\t\t\t/>\n\t\t\t</SideModal>\n\n\t\t\t{toolDrawer?.kind === 'restapi' && (\n\t\t\t\t<RestApiToolPanel\n\t\t\t\t\tkey={toolDrawer.key}\n\t\t\t\t\tinitial={toolDrawer.initialRest}\n\t\t\t\t\tcharLimits={charLimits}\n\t\t\t\t\tonImprove={onImproveToolInstructions}\n\t\t\t\t\tonClose={() => setToolDrawer(null)}\n\t\t\t\t\tonSave={handleSaveRestApi}\n\t\t\t\t\tzIndex={TOOL_DRAWER_ZINDEX}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{toolDrawer?.kind === 'config' &&\n\t\t\t\ttoolDrawer.toolKey &&\n\t\t\t\topenConfigTemplate && (\n\t\t\t\t\t<ConfigToolPanel\n\t\t\t\t\t\tkey={toolDrawer.key}\n\t\t\t\t\t\ttoolKey={toolDrawer.toolKey}\n\t\t\t\t\t\ttemplate={openConfigTemplate}\n\t\t\t\t\t\tinitial={toolDrawer.initialConfig}\n\t\t\t\t\t\tcharLimits={charLimits}\n\t\t\t\t\t\tonImprove={onImproveToolInstructions}\n\t\t\t\t\t\tonClose={() => setToolDrawer(null)}\n\t\t\t\t\t\tonSave={handleSaveConfigTool}\n\t\t\t\t\t\tzIndex={TOOL_DRAWER_ZINDEX}\n\t\t\t\t\t/>\n\t\t\t\t)}\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":["SUBAGENT_ZINDEX","TOOL_DRAWER_ZINDEX","upsertById","list","item","arr","x","ImproveButton","styled","COLORS","CreateSubAgentPanel","onClose","onSave","availableTools","onImprove","onImproveToolInstructions","configToolTemplates","title","initial","appLabel","charLimits","AGENT_CHAR_LIMITS","variablesData","name","setName","useState","instructions","setInstructions","guardrail","setGuardrail","tools","setTools","configTools","setConfigTools","restApiTools","setRestApiTools","toolDrawer","setToolDrawer","toolDrawerKeyRef","useRef","saving","setSaving","instrKey","setInstrKey","guardKey","setGuardKey","improving","setImproving","mentionItems","useMemo","buildAgentMentionItems","buildCustomToolMentionItems","insertersRef","lastFocusedRef","registerInstr","useCallback","fn","registerGuard","focusInstr","focusGuard","customToolIdsRef","addToolMention","kind","id","prev","addUnique","insertToolAtCursor","label","openRestApi","tool","openConfigTool","toolKey","openToolAction","source","CONFIG_TOOL_SOURCES","handleSaveRestApi","isNew","t","restApiMentionItem","handleSaveConfigTool","configToolMentionItem","undo","setUndo","undoSnapshotRef","undoIdRef","removeTool","token","strip","text","k","undoRemove","snap","canSave","toolItems","sourceIcon","ToolSource","restApiItems","restApiToolName","SOURCE_ICONS","configToolItems","configToolName","allToolItems","toolActionSources","buildToolActions","openConfigTemplate","toolOptions","renderSourceIcon","toolSourceGroups","order","bySource","src","toolSourceLabel","handleSave","result","handleImprove","improved","jsxs","Fragment","SideModal","jsx","DrawerHeaderText","DRAWER_HEADER_STYLE","DRAWER_BODY_STYLE","Input","MentionEditor","SelectableListSection","RestApiToolPanel","ConfigToolPanel","Toaster"],"mappings":"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"}
1
+ {"version":3,"file":"CreateSubAgentPanel.js","sources":["../../../../../src/components/agent-builder/components/CreateSubAgentPanel.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { Input } from '@src/components/input';\nimport { SideModal } from '@src/components/side-modal';\nimport { Toaster } from '@src/components/toaster';\nimport { addUnique } from '@src/utils/arrayUtils';\nimport { COLORS } from '@src/constants/Theme';\nimport {\n\tAgentTool,\n\tConfigToolConfig,\n\tConfigToolKey,\n\tParamsBlob,\n\tRestApiToolConfig,\n\tSubAgentDraft,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { CONFIG_TOOL_SOURCES, ToolSource } from '../constants/tools';\nimport {\n\tbuildAgentMentionItems,\n\tbuildCustomToolMentionItems,\n\tconfigToolMentionItem,\n\tconfigToolName,\n\trestApiMentionItem,\n\trestApiToolName,\n\ttoolSourceLabel,\n} from '../utils/mentionSerialization';\nimport {\n\trenderSourceIcon,\n\tSOURCE_ICONS,\n\tsourceIcon,\n} from '../utils/sourceIcons';\nimport { buildToolActions } from '../utils/toolActions';\nimport { ConfigToolPanel } from './ConfigToolPanel';\nimport {\n\tDRAWER_BODY_STYLE,\n\tDRAWER_HEADER_STYLE,\n\tDrawerHeaderText,\n} from './DrawerHeaderText';\nimport { MentionEditor } from './MentionEditor';\nimport { RestApiToolPanel } from './RestApiToolPanel';\nimport {\n\tSelectableItem,\n\tSelectableListSection,\n\tSourceGroup,\n} from './SelectableListSection';\n\n/**\n * The sub-agent drawer sits above the main builder; its own tool drawers\n * (Rest API / email / Slack) stack one level higher so they open ON TOP of it\n * rather than behind (SideModal defaults to z-index 10).\n */\nconst SUBAGENT_ZINDEX = 1000;\nconst TOOL_DRAWER_ZINDEX = 1002;\n\n/** Upsert an item by id (replace when present, append otherwise). */\nconst upsertById = <T extends { id: string }>(\n\tlist: T[] | undefined,\n\titem: T,\n): T[] => {\n\tconst arr = list ?? [];\n\treturn arr.some((x) => x.id === item.id)\n\t\t? arr.map((x) => (x.id === item.id ? item : x))\n\t\t: [...arr, item];\n};\n\n/** Config-tool / Rest API drawer state; `key` remounts fresh per open. */\ninterface ToolDrawerState {\n\tkey: number;\n\tkind: 'restapi' | 'config';\n\ttoolKey?: ConfigToolKey;\n\tinitialRest?: RestApiToolConfig;\n\tinitialConfig?: ConfigToolConfig;\n}\n\n/** Inline \"Improve with AI\" action rendered below a mention editor. */\nconst ImproveButton = styled.button`\n\talign-self: flex-start;\n\tborder: 1px solid ${COLORS.stroke.primary};\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 8px;\n\tpadding: 6px 12px;\n\tfont-size: 13px;\n\tline-height: 1.1;\n\tfont-weight: 600;\n\tcursor: pointer;\n\n\t&:disabled {\n\t\tcursor: default;\n\t\topacity: 0.6;\n\t}\n`;\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/** Optional \"Improve with AI\" for the Rest API / config-tool drawers. */\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n\t/**\n\t * Backend templates (email / Slack) that drive the shared config-tool drawer.\n\t * Each present key enables its tool action in this drawer; absent → hidden.\n\t * Same prop the main builder gets — sub-agents can add the same tools.\n\t */\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\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\tonImproveToolInstructions,\n\tconfigToolTemplates,\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\t// Inline-configured tools owned by this sub-agent (same drawers as the main\n\t// agent). Local to the drawer; flow to the consumer via the saved draft.\n\tconst [configTools, setConfigTools] = useState<ConfigToolConfig[]>(\n\t\tinitial?.configTools ?? [],\n\t);\n\tconst [restApiTools, setRestApiTools] = useState<RestApiToolConfig[]>(\n\t\tinitial?.restApiTools ?? [],\n\t);\n\tconst [toolDrawer, setToolDrawer] = useState<ToolDrawerState | null>(null);\n\tconst toolDrawerKeyRef = useRef(0);\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), PLUS\n\t// this drawer's inline custom tools so their `{{tool:<id>}}` tokens rehydrate\n\t// as chips on remount (they aren't in `availableTools`).\n\tconst mentionItems = useMemo(\n\t\t() => [\n\t\t\t...buildAgentMentionItems(availableTools, [], appLabel),\n\t\t\t...buildCustomToolMentionItems(configTools, restApiTools),\n\t\t],\n\t\t[availableTools, appLabel, configTools, restApiTools],\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\t// Latest custom-tool ids, readable from the mount-captured `@` onSelect handler\n\t// (BikEditor captures it once) — mirrors the context's valueRef trick.\n\tconst customToolIdsRef = useRef<Set<string>>(new Set());\n\tcustomToolIdsRef.current = new Set(\n\t\t[...configTools, ...restApiTools].map((t) => t.id),\n\t);\n\tconst addToolMention = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\t// Only catalog tool ids belong in `tools`; custom tools (Rest API / email /\n\t\t\t// Slack) track themselves on their own lists. Picking an existing custom\n\t\t\t// tool from `@` must not leak its id in as a bogus native ref.\n\t\t\tif (kind === 'tool' && !customToolIdsRef.current.has(id)) {\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, label?: string) => {\n\t\tconst target =\n\t\t\tinsertersRef.current[lastFocusedRef.current] ??\n\t\t\tinsertersRef.current.instructions;\n\t\ttarget?.('tool', id, label);\n\t}, []);\n\n\t// Rest API (bespoke) + shared config-tool (email / Slack) drawers, same as the\n\t// main builder's Step 3 — here backed by the drawer's local state.\n\t// ponytail: mirrors Step3HowItResponds; kept local rather than sharing a hook\n\t// because Step3 is context-backed and this drawer is local-state.\n\tconst openRestApi = useCallback((tool?: RestApiToolConfig) => {\n\t\ttoolDrawerKeyRef.current += 1;\n\t\tsetToolDrawer({\n\t\t\tkey: toolDrawerKeyRef.current,\n\t\t\tkind: 'restapi',\n\t\t\tinitialRest: tool,\n\t\t});\n\t}, []);\n\tconst openConfigTool = useCallback(\n\t\t(toolKey: ConfigToolKey, tool?: ConfigToolConfig) => {\n\t\t\ttoolDrawerKeyRef.current += 1;\n\t\t\tsetToolDrawer({\n\t\t\t\tkey: toolDrawerKeyRef.current,\n\t\t\t\tkind: 'config',\n\t\t\t\ttoolKey,\n\t\t\t\tinitialConfig: tool,\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\tconst openToolAction = useCallback(\n\t\t(source: ToolSource) => {\n\t\t\tconst toolKey = CONFIG_TOOL_SOURCES[source];\n\t\t\tif (toolKey) {\n\t\t\t\topenConfigTool(toolKey);\n\t\t\t} else {\n\t\t\t\topenRestApi();\n\t\t\t}\n\t\t},\n\t\t[openConfigTool, openRestApi],\n\t);\n\tconst handleSaveRestApi = useCallback(\n\t\t(tool: RestApiToolConfig) => {\n\t\t\tconst isNew = !restApiTools.some((t) => t.id === tool.id);\n\t\t\tsetRestApiTools((prev) => upsertById(prev, tool));\n\t\t\t// Drop a reference chip at the cursor on creation (edits keep the chip).\n\t\t\tif (isNew) {\n\t\t\t\tinsertToolAtCursor(tool.id, restApiMentionItem(tool).label);\n\t\t\t}\n\t\t\tsetToolDrawer(null);\n\t\t},\n\t\t[restApiTools, insertToolAtCursor],\n\t);\n\tconst handleSaveConfigTool = useCallback(\n\t\t(tool: ConfigToolConfig) => {\n\t\t\tconst isNew = !configTools.some((t) => t.id === tool.id);\n\t\t\tsetConfigTools((prev) => upsertById(prev, tool));\n\t\t\tif (isNew) {\n\t\t\t\tinsertToolAtCursor(tool.id, configToolMentionItem(tool).label);\n\t\t\t}\n\t\t\tsetToolDrawer(null);\n\t\t},\n\t\t[configTools, insertToolAtCursor],\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\tconfigTools: ConfigToolConfig[];\n\t\trestApiTools: RestApiToolConfig[];\n\t} | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\t// Remove ANY tool by id: strip its `{{tool:<id>}}` tokens, remount the fields,\n\t// and drop it from whichever list holds it (catalog `tools` or an inline\n\t// custom-tool list). One undo restores all of it.\n\tconst removeTool = (id: string) => {\n\t\tconst label =\n\t\t\tavailableTools.find((t) => t.tool_id === id)?.display_name ??\n\t\t\trestApiTools.find((t) => t.id === id)?.name ??\n\t\t\t'Tool';\n\t\t// The token stores the tool id (a tool's id is its tool_id).\n\t\tconst token = `{{tool:${id}}}`;\n\t\tconst strip = (text: string) => text.split(token).join('');\n\t\tundoSnapshotRef.current = {\n\t\t\tinstructions,\n\t\t\tguardrail,\n\t\t\ttools,\n\t\t\tconfigTools,\n\t\t\trestApiTools,\n\t\t};\n\t\tsetInstructions((prev) => strip(prev));\n\t\tsetGuardrail((prev) => strip(prev));\n\t\tsetTools((prev) => prev.filter((t) => t !== id));\n\t\tsetConfigTools((prev) => prev.filter((t) => t.id !== id));\n\t\tsetRestApiTools((prev) => prev.filter((t) => t.id !== id));\n\t\tsetInstrKey((k) => k + 1);\n\t\tsetGuardKey((k) => k + 1);\n\t\tundoIdRef.current += 1;\n\t\tsetUndo({ id: undoIdRef.current, message: `Tool \"${label}\" removed` });\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\tsetConfigTools(snap.configTools);\n\t\t\tsetRestApiTools(snap.restApiTools);\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: sourceIcon(tool.source ?? ToolSource.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// Inline-configured tools (Rest API + email / Slack) render as rows in the same\n\t// list, each with its own Configure (edit) action that reopens its drawer.\n\tconst restApiItems: SelectableItem[] = restApiTools.map((t) => ({\n\t\tid: t.id,\n\t\tlabel: restApiToolName(t),\n\t\ticon: SOURCE_ICONS[ToolSource.RestApi],\n\t\tonConfigure: () => openRestApi(t),\n\t}));\n\tconst configToolItems: SelectableItem[] = configTools.map((t) => ({\n\t\tid: t.id,\n\t\tlabel: configToolName(t),\n\t\ticon: SOURCE_ICONS[\n\t\t\tt.tool_key === 'send_slack_message'\n\t\t\t\t? ToolSource.Slack\n\t\t\t\t: ToolSource.EmailHandover\n\t\t],\n\t\tonConfigure: () => openConfigTool(t.tool_key, t),\n\t}));\n\tconst allToolItems: SelectableItem[] = [\n\t\t...toolItems,\n\t\t...restApiItems,\n\t\t...configToolItems,\n\t];\n\n\t// Built-in tool actions (Rest API / email / Slack); the shared email / Slack\n\t// forms appear only when their backend template was provided.\n\tconst toolActionSources = buildToolActions(\n\t\tconfigToolTemplates,\n\t\topenToolAction,\n\t);\n\n\tconst openConfigTemplate =\n\t\ttoolDrawer?.kind === 'config' && toolDrawer.toolKey\n\t\t\t? configToolTemplates?.[toolDrawer.toolKey]\n\t\t\t: undefined;\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(sourceIcon(t.source ?? ToolSource.Manifest)) ??\n\t\t\tundefined,\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 ?? ToolSource.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(sourceIcon(t.source ?? ToolSource.Manifest)) ??\n\t\t\t\t\tundefined,\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\tconfigTools,\n\t\t\trestApiTools,\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<SideModal\n\t\t\t\theader={title}\n\t\t\t\tcloseOnEscapeKey={false}\n\t\t\t\tzIndex={SUBAGENT_ZINDEX}\n\t\t\t\theaderCustomComponent={\n\t\t\t\t\t<DrawerHeaderText\n\t\t\t\t\t\ttitle={title}\n\t\t\t\t\t\tsubtitle=\"Each sub-agent handles one piece of the job. Use @ in the main instructions to call them.\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\twidth=\"421px\"\n\t\t\t\theaderStyle={DRAWER_HEADER_STYLE}\n\t\t\t\tbodyStyle={DRAWER_BODY_STYLE}\n\t\t\t\tonClose={onClose}\n\t\t\t\tsaveButtonProps={{\n\t\t\t\t\t'data-test': 'subagent-save',\n\t\t\t\t\tbuttonText: 'Save',\n\t\t\t\t\tbuttonType: 'primary',\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tdisabled: !canSave,\n\t\t\t\t\tisLoading: saving,\n\t\t\t\t\tonClick: handleSave,\n\t\t\t\t}}\n\t\t\t\tcancelButtonProps={{\n\t\t\t\t\t'data-test': 'subagent-cancel',\n\t\t\t\t\tbuttonText: 'Cancel',\n\t\t\t\t\tbuttonType: 'tertiaryGray',\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tdata-test=\"subagent-name\"\n\t\t\t\t\tlabelText=\"Agent name\"\n\t\t\t\t\tlabelTextBold\n\t\t\t\t\tplaceholder=\"Enter agent name\"\n\t\t\t\t\tvalue={name}\n\t\t\t\t\tmaxCharLimit={charLimits.name}\n\t\t\t\t\tmaxCharLimitPosition=\"TOP\"\n\t\t\t\t\tmaxCharStyle={{ fontSize: 12, lineHeight: '16px' }}\n\t\t\t\t\tonChangeText={setName}\n\t\t\t\t/>\n\n\t\t\t\t<MentionEditor\n\t\t\t\t\tdata-test=\"subagent-instructions\"\n\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\tvalue={instructions}\n\t\t\t\t\tonChange={setInstructions}\n\t\t\t\t\tmaxLength={charLimits.instructions}\n\t\t\t\t\tplaceholder=\"Write the steps in plain English. Type @ to reference a tool.\"\n\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\tresetKey={`instr-${instrKey}`}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\ttools={availableTools}\n\t\t\t\t\ttoolActions={toolActionSources}\n\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\tonFocus={focusInstr}\n\t\t\t\t\tregisterInsert={registerInstr}\n\t\t\t\t\taction={\n\t\t\t\t\t\tonImprove ? (\n\t\t\t\t\t\t\t<ImproveButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test=\"subagent-improve-instructions\"\n\t\t\t\t\t\t\t\tdisabled={improving !== null}\n\t\t\t\t\t\t\t\tonClick={() => handleImprove('instructions')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{improving === 'instructions'\n\t\t\t\t\t\t\t\t\t? 'Improving…'\n\t\t\t\t\t\t\t\t\t: 'Improve with AI'}\n\t\t\t\t\t\t\t</ImproveButton>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<MentionEditor\n\t\t\t\t\tdata-test=\"subagent-guardrail\"\n\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\tvalue={guardrail}\n\t\t\t\t\tonChange={setGuardrail}\n\t\t\t\t\tmaxLength={charLimits.guardrail}\n\t\t\t\t\tplaceholder=\"e.g. Never discuss competitor pricing. Type @ to reference a tool.\"\n\t\t\t\t\tminHeight=\"160px\"\n\t\t\t\t\tresetKey={`guard-${guardKey}`}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\ttools={availableTools}\n\t\t\t\t\ttoolActions={toolActionSources}\n\t\t\t\t\tonMentionSelect={addToolMention}\n\t\t\t\t\tonFocus={focusGuard}\n\t\t\t\t\tregisterInsert={registerGuard}\n\t\t\t\t\taction={\n\t\t\t\t\t\tonImprove ? (\n\t\t\t\t\t\t\t<ImproveButton\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdata-test=\"subagent-improve-guardrail\"\n\t\t\t\t\t\t\t\tdisabled={improving !== null}\n\t\t\t\t\t\t\t\tonClick={() => handleImprove('guardrail')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{improving === 'guardrail' ? 'Improving…' : 'Improve with AI'}\n\t\t\t\t\t\t\t</ImproveButton>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\n\t\t\t\t<SelectableListSection\n\t\t\t\t\ttitle=\"Tools this agent can use\"\n\t\t\t\t\tdataTestPrefix=\"subagent-tools\"\n\t\t\t\t\titems={allToolItems}\n\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\tsourceGroups={toolSourceGroups}\n\t\t\t\t\tmentionItems={mentionItems}\n\t\t\t\t\tactionSources={toolActionSources}\n\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\tpickerOpensUp\n\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\tinsertToolAtCursor(id);\n\t\t\t\t\t\tsetTools((prev) => addUnique(prev, id));\n\t\t\t\t\t}}\n\t\t\t\t\tonRemove={removeTool}\n\t\t\t\t\tconfirmDelete={{ noun: 'tool', zIndex: TOOL_DRAWER_ZINDEX + 1 }}\n\t\t\t\t/>\n\t\t\t</SideModal>\n\n\t\t\t{toolDrawer?.kind === 'restapi' && (\n\t\t\t\t<RestApiToolPanel\n\t\t\t\t\tkey={toolDrawer.key}\n\t\t\t\t\tinitial={toolDrawer.initialRest}\n\t\t\t\t\tcharLimits={charLimits}\n\t\t\t\t\tonImprove={onImproveToolInstructions}\n\t\t\t\t\tonClose={() => setToolDrawer(null)}\n\t\t\t\t\tonSave={handleSaveRestApi}\n\t\t\t\t\tzIndex={TOOL_DRAWER_ZINDEX}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{toolDrawer?.kind === 'config' &&\n\t\t\t\ttoolDrawer.toolKey &&\n\t\t\t\topenConfigTemplate && (\n\t\t\t\t\t<ConfigToolPanel\n\t\t\t\t\t\tkey={toolDrawer.key}\n\t\t\t\t\t\ttoolKey={toolDrawer.toolKey}\n\t\t\t\t\t\ttemplate={openConfigTemplate}\n\t\t\t\t\t\tinitial={toolDrawer.initialConfig}\n\t\t\t\t\t\tcharLimits={charLimits}\n\t\t\t\t\t\tonImprove={onImproveToolInstructions}\n\t\t\t\t\t\tonClose={() => setToolDrawer(null)}\n\t\t\t\t\t\tonSave={handleSaveConfigTool}\n\t\t\t\t\t\tzIndex={TOOL_DRAWER_ZINDEX}\n\t\t\t\t\t/>\n\t\t\t\t)}\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":["SUBAGENT_ZINDEX","TOOL_DRAWER_ZINDEX","upsertById","list","item","arr","x","ImproveButton","styled","COLORS","CreateSubAgentPanel","onClose","onSave","availableTools","onImprove","onImproveToolInstructions","configToolTemplates","title","initial","appLabel","charLimits","AGENT_CHAR_LIMITS","name","setName","useState","instructions","setInstructions","guardrail","setGuardrail","tools","setTools","configTools","setConfigTools","restApiTools","setRestApiTools","toolDrawer","setToolDrawer","toolDrawerKeyRef","useRef","saving","setSaving","instrKey","setInstrKey","guardKey","setGuardKey","improving","setImproving","mentionItems","useMemo","buildAgentMentionItems","buildCustomToolMentionItems","insertersRef","lastFocusedRef","registerInstr","useCallback","fn","registerGuard","focusInstr","focusGuard","customToolIdsRef","addToolMention","kind","id","prev","addUnique","insertToolAtCursor","label","openRestApi","tool","openConfigTool","toolKey","openToolAction","source","CONFIG_TOOL_SOURCES","handleSaveRestApi","isNew","t","restApiMentionItem","handleSaveConfigTool","configToolMentionItem","undo","setUndo","undoSnapshotRef","undoIdRef","removeTool","token","strip","text","k","undoRemove","snap","canSave","toolItems","sourceIcon","ToolSource","restApiItems","restApiToolName","SOURCE_ICONS","configToolItems","configToolName","allToolItems","toolActionSources","buildToolActions","openConfigTemplate","toolOptions","renderSourceIcon","toolSourceGroups","order","bySource","src","toolSourceLabel","handleSave","result","handleImprove","improved","jsxs","Fragment","SideModal","jsx","DrawerHeaderText","DRAWER_HEADER_STYLE","DRAWER_BODY_STYLE","Input","MentionEditor","SelectableListSection","RestApiToolPanel","ConfigToolPanel","Toaster"],"mappings":";;;;;;;;;;;;;;;;;;AAqDA,MAAMA,KAAkB,KAClBC,IAAqB,MAGrBC,KAAa,CAClBC,GACAC,MACS;AACT,QAAMC,IAAMF,KAAQ,CAAA;AACpB,SAAOE,EAAI,KAAK,CAACC,MAAMA,EAAE,OAAOF,EAAK,EAAE,IACpCC,EAAI,IAAI,CAACC,MAAOA,EAAE,OAAOF,EAAK,KAAKA,IAAOE,CAAE,IAC5C,CAAC,GAAGD,GAAKD,CAAI;AACjB,GAYMG,KAAgBC,GAAO;AAAA;AAAA,qBAERC,EAAO,OAAO,OAAO;AAAA,UAChCA,EAAO,QAAQ,OAAO;AAAA,eACjBA,EAAO,QAAQ,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDzBC,KAA0D,CAAC;AAAA,EACvE,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAaC;AACd,MAAM;AACL,QAAM,CAACC,GAAMC,EAAO,IAAIC,EAASN,GAAS,QAAQ,EAAE,GAC9C,CAACO,GAAcC,CAAe,IAAIF,EAASN,GAAS,gBAAgB,EAAE,GACtE,CAACS,GAAWC,CAAY,IAAIJ,EAASN,GAAS,aAAa,EAAE,GAC7D,CAACW,GAAOC,CAAQ,IAAIN,EAAmBN,GAAS,SAAS,EAAE,GAG3D,CAACa,GAAaC,CAAc,IAAIR;AAAA,IACrCN,GAAS,eAAe,CAAA;AAAA,EAAC,GAEpB,CAACe,GAAcC,CAAe,IAAIV;AAAA,IACvCN,GAAS,gBAAgB,CAAA;AAAA,EAAC,GAErB,CAACiB,GAAYC,CAAa,IAAIZ,EAAiC,IAAI,GACnEa,IAAmBC,EAAO,CAAC,GAC3B,CAACC,GAAQC,CAAS,IAAIhB,EAAS,EAAK,GAEpC,CAACiB,IAAUC,CAAW,IAAIlB,EAAS,CAAC,GACpC,CAACmB,IAAUC,CAAW,IAAIpB,EAAS,CAAC,GACpC,CAACqB,GAAWC,CAAY,IAAItB,EAEhC,IAAI,GAKAuB,IAAeC;AAAA,IACpB,MAAM;AAAA,MACL,GAAGC,GAAuBpC,GAAgB,CAAA,GAAIM,CAAQ;AAAA,MACtD,GAAG+B,GAA4BnB,GAAaE,CAAY;AAAA,IAAA;AAAA,IAEzD,CAACpB,GAAgBM,GAAUY,GAAaE,CAAY;AAAA,EAAA,GAK/CkB,IAAeb,EAEnB,EAAE,GACEc,IAAiBd,EAAqC,cAAc,GACpEe,KAAgBC,EAAY,CAACC,MAAwB;AAC1D,IAAAJ,EAAa,QAAQ,eAAeI,KAAM;AAAA,EAC3C,GAAG,CAAA,CAAE,GACCC,KAAgBF,EAAY,CAACC,MAAwB;AAC1D,IAAAJ,EAAa,QAAQ,YAAYI,KAAM;AAAA,EACxC,GAAG,CAAA,CAAE,GACCE,KAAaH,EAAY,MAAM;AACpC,IAAAF,EAAe,UAAU;AAAA,EAC1B,GAAG,CAAA,CAAE,GACCM,KAAaJ,EAAY,MAAM;AACpC,IAAAF,EAAe,UAAU;AAAA,EAC1B,GAAG,CAAA,CAAE,GAGCO,KAAmBrB,EAAoB,oBAAI,KAAK;AACtD,EAAAqB,GAAiB,UAAU,IAAI;AAAA,IAC9B,CAAC,GAAG5B,GAAa,GAAGE,CAAY,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,EAAA;AAElD,QAAM2B,KAAiBN;AAAA,IACtB,CAACO,GAA2BC,MAAe;AAI1C,MAAID,MAAS,UAAU,CAACF,GAAiB,QAAQ,IAAIG,CAAE,KACtDhC,EAAS,CAACiC,MAASC,GAAUD,GAAMD,CAAE,CAAC;AAAA,IAExC;AAAA,IACA,CAAA;AAAA,EAAC,GAEIG,IAAqBX,EAAY,CAACQ,GAAYI,MAAmB;AAItE,KAFCf,EAAa,QAAQC,EAAe,OAAO,KAC3CD,EAAa,QAAQ,gBACb,QAAQW,GAAII,CAAK;AAAA,EAC3B,GAAG,CAAA,CAAE,GAMCC,IAAcb,EAAY,CAACc,MAA6B;AAC7D,IAAA/B,EAAiB,WAAW,GAC5BD,EAAc;AAAA,MACb,KAAKC,EAAiB;AAAA,MACtB,MAAM;AAAA,MACN,aAAa+B;AAAA,IAAA,CACb;AAAA,EACF,GAAG,CAAA,CAAE,GACCC,IAAiBf;AAAA,IACtB,CAACgB,GAAwBF,MAA4B;AACpD,MAAA/B,EAAiB,WAAW,GAC5BD,EAAc;AAAA,QACb,KAAKC,EAAiB;AAAA,QACtB,MAAM;AAAA,QACN,SAAAiC;AAAA,QACA,eAAeF;AAAA,MAAA,CACf;AAAA,IACF;AAAA,IACA,CAAA;AAAA,EAAC,GAEIG,KAAiBjB;AAAA,IACtB,CAACkB,MAAuB;AACvB,YAAMF,IAAUG,GAAoBD,CAAM;AAC1C,MAAIF,IACHD,EAAeC,CAAO,IAEtBH,EAAA;AAAA,IAEF;AAAA,IACA,CAACE,GAAgBF,CAAW;AAAA,EAAA,GAEvBO,KAAoBpB;AAAA,IACzB,CAACc,MAA4B;AAC5B,YAAMO,IAAQ,CAAC1C,EAAa,KAAK,CAAC2C,MAAMA,EAAE,OAAOR,EAAK,EAAE;AACxD,MAAAlC,EAAgB,CAAC6B,MAAS7D,GAAW6D,GAAMK,CAAI,CAAC,GAE5CO,KACHV,EAAmBG,EAAK,IAAIS,GAAmBT,CAAI,EAAE,KAAK,GAE3DhC,EAAc,IAAI;AAAA,IACnB;AAAA,IACA,CAACH,GAAcgC,CAAkB;AAAA,EAAA,GAE5Ba,KAAuBxB;AAAA,IAC5B,CAACc,MAA2B;AAC3B,YAAMO,IAAQ,CAAC5C,EAAY,KAAK,CAAC6C,MAAMA,EAAE,OAAOR,EAAK,EAAE;AACvD,MAAApC,EAAe,CAAC+B,MAAS7D,GAAW6D,GAAMK,CAAI,CAAC,GAC3CO,KACHV,EAAmBG,EAAK,IAAIW,GAAsBX,CAAI,EAAE,KAAK,GAE9DhC,EAAc,IAAI;AAAA,IACnB;AAAA,IACA,CAACL,GAAakC,CAAkB;AAAA,EAAA,GAI3B,CAACe,GAAMC,CAAO,IAAIzD;AAAA,IACvB;AAAA,EAAA,GAEK0D,IAAkB5C,EAMd,IAAI,GACR6C,KAAY7C,EAAO,CAAC,GAKpB8C,KAAa,CAACtB,MAAe;AAClC,UAAMI,IACLrD,EAAe,KAAK,CAAC+D,MAAMA,EAAE,YAAYd,CAAE,GAAG,gBAC9C7B,EAAa,KAAK,CAAC2C,MAAMA,EAAE,OAAOd,CAAE,GAAG,QACvC,QAEKuB,IAAQ,UAAUvB,CAAE,MACpBwB,IAAQ,CAACC,MAAiBA,EAAK,MAAMF,CAAK,EAAE,KAAK,EAAE;AACzD,IAAAH,EAAgB,UAAU;AAAA,MACzB,cAAAzD;AAAA,MACA,WAAAE;AAAA,MACA,OAAAE;AAAA,MACA,aAAAE;AAAA,MACA,cAAAE;AAAA,IAAA,GAEDP,EAAgB,CAACqC,MAASuB,EAAMvB,CAAI,CAAC,GACrCnC,EAAa,CAACmC,MAASuB,EAAMvB,CAAI,CAAC,GAClCjC,EAAS,CAACiC,MAASA,EAAK,OAAO,CAACa,MAAMA,MAAMd,CAAE,CAAC,GAC/C9B,EAAe,CAAC+B,MAASA,EAAK,OAAO,CAACa,MAAMA,EAAE,OAAOd,CAAE,CAAC,GACxD5B,EAAgB,CAAC6B,MAASA,EAAK,OAAO,CAACa,MAAMA,EAAE,OAAOd,CAAE,CAAC,GACzDpB,EAAY,CAAC8C,MAAMA,IAAI,CAAC,GACxB5C,EAAY,CAAC4C,MAAMA,IAAI,CAAC,GACxBL,GAAU,WAAW,GACrBF,EAAQ,EAAE,IAAIE,GAAU,SAAS,SAAS,SAASjB,CAAK,aAAa;AAAA,EACtE,GAEMuB,KAAa,MAAM;AACxB,UAAMC,IAAOR,EAAgB;AAC7B,IAAIQ,MACHhE,EAAgBgE,EAAK,YAAY,GACjC9D,EAAa8D,EAAK,SAAS,GAC3B5D,EAAS4D,EAAK,KAAK,GACnB1D,EAAe0D,EAAK,WAAW,GAC/BxD,EAAgBwD,EAAK,YAAY,GACjChD,EAAY,CAAC8C,MAAMA,IAAI,CAAC,GACxB5C,EAAY,CAAC4C,MAAMA,IAAI,CAAC,GACxBN,EAAgB,UAAU,OAE3BD,EAAQ,IAAI;AAAA,EACb,GAEMU,KACLrE,EAAK,KAAA,EAAO,SAAS,MACpBG,EAAa,KAAA,EAAO,SAAS,KAAKE,EAAU,KAAA,EAAO,SAAS,IAExDiE,KAA8B/D,EAClC,IAAI,CAACiC,MAA8B;AACnC,UAAMM,IAAOvD,EAAe,KAAK,CAAC+D,MAAMA,EAAE,YAAYd,CAAE;AACxD,WAAOM,IACJ;AAAA,MACA,IAAAN;AAAA,MACA,OAAOM,EAAK;AAAA,MACZ,MAAMyB,EAAWzB,EAAK,UAAU0B,EAAW,QAAQ;AAAA,IAAA,IAEnD;AAAA,EACJ,CAAC,EACA,OAAO,CAACxF,MAA2BA,MAAM,IAAI,GAIzCyF,KAAiC9D,EAAa,IAAI,CAAC,OAAO;AAAA,IAC/D,IAAI,EAAE;AAAA,IACN,OAAO+D,GAAgB,CAAC;AAAA,IACxB,MAAMC,GAAaH,EAAW,OAAO;AAAA,IACrC,aAAa,MAAM3B,EAAY,CAAC;AAAA,EAAA,EAC/B,GACI+B,KAAoCnE,EAAY,IAAI,CAAC,OAAO;AAAA,IACjE,IAAI,EAAE;AAAA,IACN,OAAOoE,GAAe,CAAC;AAAA,IACvB,MAAMF,GACL,EAAE,aAAa,uBACZH,EAAW,QACXA,EAAW,aACf;AAAA,IACA,aAAa,MAAMzB,EAAe,EAAE,UAAU,CAAC;AAAA,EAAA,EAC9C,GACI+B,KAAiC;AAAA,IACtC,GAAGR;AAAA,IACH,GAAGG;AAAA,IACH,GAAGG;AAAA,EAAA,GAKEG,IAAoBC;AAAA,IACzBtF;AAAA,IACAuD;AAAA,EAAA,GAGKgC,KACLpE,GAAY,SAAS,YAAYA,EAAW,UACzCnB,IAAsBmB,EAAW,OAAO,IACxC,QAIEqE,KAA8B3F,EAAe,IAAI,CAAC,OAAO;AAAA,IAC9D,OAAO,EAAE;AAAA,IACT,OAAO,EAAE;AAAA,IACT,aACC4F,GAAiBZ,EAAW,EAAE,UAAUC,EAAW,QAAQ,CAAC,KAC5D;AAAA,EAAA,EACA,GAIIY,MAAmC,MAAM;AAC9C,UAAMC,IAAkB,CAAA,GAClBC,wBAAe,IAAA;AACrB,WAAA/F,EAAe,QAAQ,CAAC+D,MAAM;AAC7B,YAAMiC,IAAMjC,EAAE,UAAUkB,EAAW;AACnC,MAAKc,EAAS,IAAIC,CAAG,MACpBD,EAAS,IAAIC,GAAK,EAAE,GACpBF,EAAM,KAAKE,CAAG,IAEfD,EAAS,IAAIC,CAAG,GAAG,KAAK;AAAA,QACvB,OAAOjC,EAAE;AAAA,QACT,OAAOA,EAAE;AAAA,QACT,aACC6B,GAAiBZ,EAAWjB,EAAE,UAAUkB,EAAW,QAAQ,CAAC,KAC5D;AAAA,MAAA,CACD;AAAA,IACF,CAAC,GACMa,EAAM,IAAI,CAACE,OAAS;AAAA,MAC1B,QAAQA;AAAA,MACR,OAAOC,GAAgBD,CAAG;AAAA,MAC1B,SAASD,EAAS,IAAIC,CAAG,KAAK,CAAA;AAAA,IAAC,EAC9B;AAAA,EACH,GAAA,GAEME,KAAa,YAAY;AAC9B,QAAI,CAACpB,MAAWpD;AACf;AAED,UAAMyE,IAASpG,EAAO;AAAA,MACrB,MAAMU,EAAK,KAAA;AAAA,MACX,cAAAG;AAAA,MACA,WAAAE;AAAA,MACA,OAAAE;AAAA,MACA,aAAAE;AAAA,MACA,cAAAE;AAAA,IAAA,CACA;AACD,QAAI+E,KAAU,OAAQA,EAAyB,QAAS,YAAY;AACnE,MAAAxE,EAAU,EAAI;AACd,UAAI;AACH,cAAMwE;AAAA,MACP,UAAA;AACC,QAAAxE,EAAU,EAAK;AAAA,MAChB;AAAA,IACD;AAAA,EACD,GAEMyE,KAAgB,OAAOpD,MAAuC;AACnE,QAAI,GAAC/C,KAAa+B,IAGlB;AAAA,MAAAC,EAAae,CAAI;AACjB,UAAI;AAEH,cAAMqD,IAAW,MAAMpG,EAAU+C,GADjBA,MAAS,iBAAiBpC,IAAeE,CACX;AAC9C,QAAIkC,MAAS,kBACZnC,EAAgBwF,CAAQ,GACxBxE,EAAY,CAAC8C,MAAMA,IAAI,CAAC,MAExB5D,EAAasF,CAAQ,GACrBtE,EAAY,CAAC4C,MAAMA,IAAI,CAAC;AAAA,MAE1B,UAAA;AACC,QAAA1C,EAAa,IAAI;AAAA,MAClB;AAAA;AAAA,EACD;AAEA,SACC,gBAAAqE,GAAAC,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACA,QAAQpG;AAAA,QACR,kBAAkB;AAAA,QAClB,QAAQjB;AAAA,QACR,uBACC,gBAAAsH;AAAA,UAACC;AAAA,UAAA;AAAA,YACA,OAAAtG;AAAA,YACA,UAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAGX,OAAM;AAAA,QACN,aAAauG;AAAA,QACb,WAAWC;AAAA,QACX,SAAA9G;AAAA,QACA,iBAAiB;AAAA,UAChB,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,MAAM;AAAA,UACN,UAAU,CAACgF;AAAA,UACX,WAAWpD;AAAA,UACX,SAASwE;AAAA,QAAA;AAAA,QAEV,mBAAmB;AAAA,UAClB,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,MAAM;AAAA,UACN,SAASpG;AAAA,QAAA;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAA2G;AAAA,YAACI;AAAA,YAAA;AAAA,cACA,aAAU;AAAA,cACV,WAAU;AAAA,cACV,eAAa;AAAA,cACb,aAAY;AAAA,cACZ,OAAOpG;AAAA,cACP,cAAcF,EAAW;AAAA,cACzB,sBAAqB;AAAA,cACrB,cAAc,EAAE,UAAU,IAAI,YAAY,OAAA;AAAA,cAC1C,cAAcG;AAAA,YAAA;AAAA,UAAA;AAAA,UAGf,gBAAA+F;AAAA,YAACK;AAAA,YAAA;AAAA,cACA,aAAU;AAAA,cACV,OAAM;AAAA,cACN,OAAOlG;AAAA,cACP,UAAUC;AAAA,cACV,WAAWN,EAAW;AAAA,cACtB,aAAY;AAAA,cACZ,WAAU;AAAA,cACV,UAAU,SAASqB,EAAQ;AAAA,cAC3B,cAAAM;AAAA,cACA,OAAOlC;AAAA,cACP,aAAawF;AAAA,cACb,iBAAiBzC;AAAA,cACjB,SAASH;AAAA,cACT,gBAAgBJ;AAAA,cAChB,QACCvC,IACC,gBAAAwG;AAAA,gBAAC/G;AAAA,gBAAA;AAAA,kBACA,MAAK;AAAA,kBACL,aAAU;AAAA,kBACV,UAAUsC,MAAc;AAAA,kBACxB,SAAS,MAAMoE,GAAc,cAAc;AAAA,kBAE1C,UAAApE,MAAc,iBACZ,eACA;AAAA,gBAAA;AAAA,cAAA,IAED;AAAA,YAAA;AAAA,UAAA;AAAA,UAIN,gBAAAyE;AAAA,YAACK;AAAA,YAAA;AAAA,cACA,aAAU;AAAA,cACV,OAAM;AAAA,cACN,OAAOhG;AAAA,cACP,UAAUC;AAAA,cACV,WAAWR,EAAW;AAAA,cACtB,aAAY;AAAA,cACZ,WAAU;AAAA,cACV,UAAU,SAASuB,EAAQ;AAAA,cAC3B,cAAAI;AAAA,cACA,OAAOlC;AAAA,cACP,aAAawF;AAAA,cACb,iBAAiBzC;AAAA,cACjB,SAASF;AAAA,cACT,gBAAgBF;AAAA,cAChB,QACC1C,IACC,gBAAAwG;AAAA,gBAAC/G;AAAA,gBAAA;AAAA,kBACA,MAAK;AAAA,kBACL,aAAU;AAAA,kBACV,UAAUsC,MAAc;AAAA,kBACxB,SAAS,MAAMoE,GAAc,WAAW;AAAA,kBAEvC,UAAApE,MAAc,cAAc,eAAe;AAAA,gBAAA;AAAA,cAAA,IAE1C;AAAA,YAAA;AAAA,UAAA;AAAA,UAIN,gBAAAyE;AAAA,YAACM;AAAA,YAAA;AAAA,cACA,OAAM;AAAA,cACN,gBAAe;AAAA,cACf,OAAOxB;AAAA,cACP,gBAAgBI;AAAA,cAChB,cAAcE;AAAA,cACd,cAAA3D;AAAA,cACA,eAAesD;AAAA,cACf,WAAU;AAAA,cACV,eAAa;AAAA,cACb,OAAO,CAACvC,MAAO;AACd,gBAAAG,EAAmBH,CAAE,GACrBhC,EAAS,CAACiC,MAASC,GAAUD,GAAMD,CAAE,CAAC;AAAA,cACvC;AAAA,cACA,UAAUsB;AAAA,cACV,eAAe,EAAE,MAAM,QAAQ,QAAQnF,IAAqB,EAAA;AAAA,YAAE;AAAA,UAAA;AAAA,QAC/D;AAAA,MAAA;AAAA,IAAA;AAAA,IAGAkC,GAAY,SAAS,aACrB,gBAAAmF;AAAA,MAACO;AAAA,MAAA;AAAA,QAEA,SAAS1F,EAAW;AAAA,QACpB,YAAAf;AAAA,QACA,WAAWL;AAAA,QACX,SAAS,MAAMqB,EAAc,IAAI;AAAA,QACjC,QAAQsC;AAAA,QACR,QAAQzE;AAAA,MAAA;AAAA,MANHkC,EAAW;AAAA,IAAA;AAAA,IAUjBA,GAAY,SAAS,YACrBA,EAAW,WACXoE,MACC,gBAAAe;AAAA,MAACQ;AAAA,MAAA;AAAA,QAEA,SAAS3F,EAAW;AAAA,QACpB,UAAUoE;AAAA,QACV,SAASpE,EAAW;AAAA,QACpB,YAAAf;AAAA,QACA,WAAWL;AAAA,QACX,SAAS,MAAMqB,EAAc,IAAI;AAAA,QACjC,QAAQ0C;AAAA,QACR,QAAQ7E;AAAA,MAAA;AAAA,MARHkC,EAAW;AAAA,IAAA;AAAA,IAYlB6C,KACA,gBAAAsC;AAAA,MAACS;AAAA,MAAA;AAAA,QAEA,MAAM/C,EAAK;AAAA,QACX,MAAK;AAAA,QACL,UAAS;AAAA,QACT,WAAW;AAAA,QACX,iBAAe;AAAA,QACf,aAAa;AAAA,UACZ,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,eAAe,OACdS,GAAA,GACO,CAAA;AAAA,QACR;AAAA,QAED,cAAc,MAAMR,EAAQ,IAAI;AAAA,MAAA;AAAA,MAd3BD,EAAK;AAAA,IAAA;AAAA,EAeX,GAEF;AAEF;"}
@@ -1,6 +1,5 @@
1
1
  import { MentionItem } from '../../../editor';
2
2
  import { default as React } from 'react';
3
- import { VariableListInterfaceV3 } from '../../variable-picker-v3/model';
4
3
  import { AgentTool } from '../AgentBuilder.model';
5
4
  import { ToolAction, ToolSource } from '../constants/tools';
6
5
  type InsertFn = (kind: 'tool' | 'subagent', id: string, label?: string) => void;
@@ -35,12 +34,6 @@ interface MentionEditorProps {
35
34
  toolActions?: ToolAction[];
36
35
  integrationStatus?: Partial<Record<ToolSource, boolean>>;
37
36
  onConnectIntegration?: (source: ToolSource) => void;
38
- /**
39
- * Variable catalog for the `@` picker's "Variables" view. Picking one inserts
40
- * a `Variable: <name>` mention chip at the cursor, persisted as a
41
- * `{{variable:<name>}}` token. Omit to hide the category.
42
- */
43
- variablesData?: VariableListInterfaceV3[];
44
37
  /** Optional action(s) rendered inside the shell, below the editor. */
45
38
  action?: React.ReactNode;
46
39
  'data-test'?: string;