@bikdotai/bik-component-library 0.0.850-beta.1 → 0.0.850-beta.2

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 (170) hide show
  1. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +14 -7
  2. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  3. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js +1 -1
  4. package/dist/cjs/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +5 -5
  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/MentionPicker.js +24 -24
  10. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  11. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js +4 -4
  12. package/dist/cjs/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  13. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +2 -2
  14. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  15. package/dist/cjs/components/agent-builder/constants/tools.js +1 -1
  16. package/dist/cjs/components/agent-builder/constants/tools.js.map +1 -1
  17. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  18. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  19. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  20. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  21. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js +2 -2
  22. package/dist/cjs/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  23. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +1 -1
  24. package/dist/cjs/components/agent-builder/utils/sourceIcons.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/AgentTable.js +1 -1
  28. package/dist/cjs/components/agent-listing/AgentTable.js.map +1 -1
  29. package/dist/cjs/components/agent-listing/AgentTableRow.js +1 -1
  30. package/dist/cjs/components/agent-listing/AgentTableRow.js.map +1 -1
  31. package/dist/cjs/components/bik-layout/CommonStyles.js +6 -4
  32. package/dist/cjs/components/bik-layout/CommonStyles.js.map +1 -1
  33. package/dist/cjs/components/button/themes.js +3 -3
  34. package/dist/cjs/components/button/themes.js.map +1 -1
  35. package/dist/cjs/components/datePicker/DatePicker.js +1 -1
  36. package/dist/cjs/components/datePicker/DatePicker.js.map +1 -1
  37. package/dist/cjs/components/datePicker/DatePicker.styled.js +14 -20
  38. package/dist/cjs/components/datePicker/DatePicker.styled.js.map +1 -1
  39. package/dist/cjs/components/dropdown/ChipInput.js +1 -1
  40. package/dist/cjs/components/dropdown/ChipInput.js.map +1 -1
  41. package/dist/cjs/components/dropdown/Common.styled.js +5 -6
  42. package/dist/cjs/components/dropdown/Common.styled.js.map +1 -1
  43. package/dist/cjs/components/dropdown/Dropdown.js +1 -1
  44. package/dist/cjs/components/dropdown/Dropdown.js.map +1 -1
  45. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  46. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  47. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
  48. package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  49. package/dist/cjs/components/input/Input.js +1 -1
  50. package/dist/cjs/components/input/Input.js.map +1 -1
  51. package/dist/cjs/components/input/Input.styled.js +12 -25
  52. package/dist/cjs/components/input/Input.styled.js.map +1 -1
  53. package/dist/cjs/components/tabs/Tabs.js +1 -1
  54. package/dist/cjs/components/tabs/Tabs.js.map +1 -1
  55. package/dist/cjs/components/tabs/Tabs.styles.js +8 -22
  56. package/dist/cjs/components/tabs/Tabs.styles.js.map +1 -1
  57. package/dist/cjs/components/tag/Tag.js +1 -1
  58. package/dist/cjs/components/tag/Tag.js.map +1 -1
  59. package/dist/cjs/components/tag/Tag.styled.js +0 -4
  60. package/dist/cjs/components/tag/Tag.styled.js.map +1 -1
  61. package/dist/cjs/components/tag/model.js.map +1 -1
  62. package/dist/cjs/editor/BikEditor.js +1 -1
  63. package/dist/cjs/editor/BikEditor.js.map +1 -1
  64. package/dist/cjs/editor/BikEditor.styles.js +4 -4
  65. package/dist/cjs/editor/BikEditor.styles.js.map +1 -1
  66. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  67. package/dist/cjs/editor/extensions/buildExtensions.js +2 -2
  68. package/dist/cjs/editor/extensions/buildExtensions.js.map +1 -1
  69. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js +2 -0
  70. package/dist/cjs/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  71. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  72. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  73. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +17 -10
  74. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  75. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js +1 -1
  76. package/dist/esm/components/agent-builder/components/ConfigToolPanel.js.map +1 -1
  77. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.d.ts +5 -0
  78. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +243 -227
  79. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  80. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +1 -1
  81. package/dist/esm/components/agent-builder/components/MentionEditor.js +93 -78
  82. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  83. package/dist/esm/components/agent-builder/components/MentionPicker.js +179 -161
  84. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  85. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js +118 -109
  86. package/dist/esm/components/agent-builder/components/RestApiToolPanel.js.map +1 -1
  87. package/dist/esm/components/agent-builder/components/SelectableListSection.js +117 -110
  88. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  89. package/dist/esm/components/agent-builder/constants/tools.d.ts +10 -0
  90. package/dist/esm/components/agent-builder/constants/tools.js +27 -14
  91. package/dist/esm/components/agent-builder/constants/tools.js.map +1 -1
  92. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +6 -2
  93. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +46 -43
  94. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  95. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +132 -117
  96. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  97. package/dist/esm/components/agent-builder/utils/mentionSerialization.d.ts +3 -2
  98. package/dist/esm/components/agent-builder/utils/mentionSerialization.js +24 -19
  99. package/dist/esm/components/agent-builder/utils/mentionSerialization.js.map +1 -1
  100. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +9 -1
  101. package/dist/esm/components/agent-builder/utils/sourceIcons.js +15 -9
  102. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -1
  103. package/dist/esm/components/agent-listing/AgentListing.js +71 -69
  104. package/dist/esm/components/agent-listing/AgentListing.js.map +1 -1
  105. package/dist/esm/components/agent-listing/AgentListing.model.d.ts +6 -0
  106. package/dist/esm/components/agent-listing/AgentTable.d.ts +2 -0
  107. package/dist/esm/components/agent-listing/AgentTable.js +29 -27
  108. package/dist/esm/components/agent-listing/AgentTable.js.map +1 -1
  109. package/dist/esm/components/agent-listing/AgentTableRow.d.ts +2 -0
  110. package/dist/esm/components/agent-listing/AgentTableRow.js +50 -36
  111. package/dist/esm/components/agent-listing/AgentTableRow.js.map +1 -1
  112. package/dist/esm/components/bik-layout/CommonStyles.js +3 -1
  113. package/dist/esm/components/bik-layout/CommonStyles.js.map +1 -1
  114. package/dist/esm/components/button/themes.js +1 -1
  115. package/dist/esm/components/button/themes.js.map +1 -1
  116. package/dist/esm/components/datePicker/DatePicker.js +21 -22
  117. package/dist/esm/components/datePicker/DatePicker.js.map +1 -1
  118. package/dist/esm/components/datePicker/DatePicker.styled.d.ts +0 -10
  119. package/dist/esm/components/datePicker/DatePicker.styled.js +16 -23
  120. package/dist/esm/components/datePicker/DatePicker.styled.js.map +1 -1
  121. package/dist/esm/components/dropdown/ChipInput.d.ts +0 -1
  122. package/dist/esm/components/dropdown/ChipInput.js +30 -37
  123. package/dist/esm/components/dropdown/ChipInput.js.map +1 -1
  124. package/dist/esm/components/dropdown/Common.styled.js +6 -7
  125. package/dist/esm/components/dropdown/Common.styled.js.map +1 -1
  126. package/dist/esm/components/dropdown/Dropdown.d.ts +0 -2
  127. package/dist/esm/components/dropdown/Dropdown.js +89 -96
  128. package/dist/esm/components/dropdown/Dropdown.js.map +1 -1
  129. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +95 -103
  130. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  131. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +0 -1
  132. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +17 -17
  133. package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js.map +1 -1
  134. package/dist/esm/components/dropdown/type.d.ts +0 -2
  135. package/dist/esm/components/input/Input.js +101 -104
  136. package/dist/esm/components/input/Input.js.map +1 -1
  137. package/dist/esm/components/input/Input.model.d.ts +0 -2
  138. package/dist/esm/components/input/Input.styled.d.ts +0 -2
  139. package/dist/esm/components/input/Input.styled.js +25 -38
  140. package/dist/esm/components/input/Input.styled.js.map +1 -1
  141. package/dist/esm/components/tabs/Tabs.js +81 -103
  142. package/dist/esm/components/tabs/Tabs.js.map +1 -1
  143. package/dist/esm/components/tabs/Tabs.model.d.ts +0 -7
  144. package/dist/esm/components/tabs/Tabs.styles.d.ts +0 -2
  145. package/dist/esm/components/tabs/Tabs.styles.js +9 -23
  146. package/dist/esm/components/tabs/Tabs.styles.js.map +1 -1
  147. package/dist/esm/components/tag/Tag.d.ts +1 -1
  148. package/dist/esm/components/tag/Tag.js +15 -17
  149. package/dist/esm/components/tag/Tag.js.map +1 -1
  150. package/dist/esm/components/tag/Tag.styled.d.ts +0 -1
  151. package/dist/esm/components/tag/Tag.styled.js +6 -10
  152. package/dist/esm/components/tag/Tag.styled.js.map +1 -1
  153. package/dist/esm/components/tag/model.d.ts +0 -5
  154. package/dist/esm/components/tag/model.js.map +1 -1
  155. package/dist/esm/editor/BikEditor.js +84 -83
  156. package/dist/esm/editor/BikEditor.js.map +1 -1
  157. package/dist/esm/editor/BikEditor.styles.js +4 -4
  158. package/dist/esm/editor/BikEditor.styles.js.map +1 -1
  159. package/dist/esm/editor/BikEditor.types.d.ts +7 -0
  160. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  161. package/dist/esm/editor/extensions/buildExtensions.d.ts +1 -0
  162. package/dist/esm/editor/extensions/buildExtensions.js +13 -12
  163. package/dist/esm/editor/extensions/buildExtensions.js.map +1 -1
  164. package/dist/esm/editor/extensions/mention/MentionChipNodeView.d.ts +17 -0
  165. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js +39 -0
  166. package/dist/esm/editor/extensions/mention/MentionChipNodeView.js.map +1 -0
  167. package/dist/esm/editor/extensions/mention/MentionExtension.d.ts +1 -1
  168. package/dist/esm/editor/extensions/mention/MentionExtension.js +67 -45
  169. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  170. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AgentBuilderContext.js","sources":["../../../../../src/components/agent-builder/context/AgentBuilderContext.tsx"],"sourcesContent":["import type { ApplicationType } from '@bikdotai/bik-models/growth';\nimport React, {\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tAgentTool,\n\tAgentValue,\n\tConfigToolKey,\n\tIntentOption,\n\tModelOption,\n\tParamsBlob,\n\tStepKey,\n\tStepValidation,\n\tSubAgentDraft,\n\tSubAgentRef,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { getStepIndex, STEP_KEYS } from '../constants/steps';\nimport type { ToolSource } from '../constants/tools';\n\n/** Mention-capable text fields in Step 3 (both store firebase token text). */\nexport type MentionFieldKey = 'instructions' | 'guardrail';\ntype MentionInsertFn = (\n\tkind: 'tool' | 'subagent',\n\tid: string,\n\tlabel?: string,\n) => void;\n\n/** Toast shown after a tool / sub-agent is removed, offering an undo. */\nexport interface UndoToastState {\n\t/** Bumped per removal so the toast timer restarts. */\n\tid: number;\n\tmessage: string;\n}\n\nexport interface AgentBuilderContextShape {\n\t/** Controlled value relayed from props. */\n\tvalue: AgentValue;\n\t/** Patch one or more fields. */\n\tpatch: (partial: Partial<AgentValue>) => void;\n\t/** Patch a single field. */\n\tupdateField: <K extends keyof AgentValue>(key: K, val: AgentValue[K]) => void;\n\t/**\n\t * Remove a tool / sub-agent everywhere: drops it from the list AND strips ALL\n\t * its `{{tool:KEY}}` / `{{subagent:ID}}` tokens from BOTH the instructions and\n\t * the guardrails, remounts the editors, and raises an undo toast.\n\t */\n\tremoveReference: (kind: 'tool' | 'subagent', id: string) => void;\n\t/**\n\t * Append a tool / sub-agent id to its list (deduped), reading the LATEST value\n\t * via a ref. Use this instead of `patch({ tools: [...value.tools, id] })` from\n\t * any handler that may be captured with a stale `value` — notably the `@`\n\t * editor's mount-time `onSelect`, which would otherwise keep only the last pick.\n\t */\n\taddReference: (kind: 'tool' | 'subagent', id: string) => void;\n\t/** Remount signal for the mention editors after an external edit. */\n\tmentionResetKey: number;\n\t/**\n\t * Insert a tool / sub-agent mention chip at the last cursor position of\n\t * whichever mention field was focused most recently (Instructions or\n\t * Guardrails). `label` overrides the chip text (e.g. a just-created sub-agent\n\t * not yet in the available list).\n\t */\n\tinsertMention: (\n\t\tkind: 'tool' | 'subagent',\n\t\tid: string,\n\t\tlabel?: string,\n\t) => void;\n\t/** A mention field registers its editor-backed insert here (internal). */\n\tregisterMentionField: (\n\t\tfieldKey: MentionFieldKey,\n\t\tfn: MentionInsertFn | null,\n\t) => void;\n\t/** A mention field reports focus so inserts target it (internal). */\n\tnotifyMentionFocus: (fieldKey: MentionFieldKey) => void;\n\n\t// Undo (post-removal)\n\t/** Non-null while the undo toast should be visible. */\n\tundoToast: UndoToastState | null;\n\t/** Restore the last removed tool / sub-agent (list + stripped tokens). */\n\tundoRemoval: () => void;\n\t/** Dismiss the undo toast without restoring. */\n\tdismissUndo: () => void;\n\n\t// Navigation\n\tactiveStep: StepKey;\n\tactiveIndex: number;\n\tgoToStep: (step: StepKey) => void;\n\tgoNext: () => void;\n\tgoPrev: () => void;\n\tisFirstStep: boolean;\n\tisLastStep: boolean;\n\n\t// Validation\n\tvalidation: StepValidation;\n\tisActiveStepValid: boolean;\n\n\t// Reference data\n\tavailableTools: AgentTool[];\n\tavailableSubAgents: SubAgentRef[];\n\tavailableIntents: IntentOption[];\n\tavailableModels: ModelOption[];\n\t/**\n\t * Backend templates for the shared-drawer tools (email / Slack), keyed by\n\t * `tool_key`. A present key drives its dynamic form + enables its tool action.\n\t */\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\n\t/**\n\t * Per-source integration connection state (today: Slack). A source mapped to\n\t * `false` renders a \"Connect\" row in the `@` picker instead of drilling in;\n\t * `true`/absent renders normally. Fed by the consumer via `integrationStatus`.\n\t */\n\tintegrationStatus?: Partial<Record<ToolSource, boolean>>;\n\t/** Open the consumer's connect flow for an unconnected integration source. */\n\tonConnectIntegration?: (source: ToolSource) => void;\n\t/** Host application context (e.g. MANIFEST) — drives tool-chip labelling. */\n\tapplicationType?: ApplicationType;\n\t/** Resolved per-field character limits (consumer overrides merged over defaults). */\n\tcharLimits: AgentCharLimits;\n\t/** When true, step-rail items are not clickable (Back / Next only). */\n\tdisableStepNavigation: boolean;\n\n\t// Sub-agent creation (Step 3 drawer)\n\t/** Persist a new sub-agent and resolve with its ref. Omit to hide the create flow. */\n\tonCreateSubAgent?: (draft: SubAgentDraft) => Promise<SubAgentRef>;\n\t/**\n\t * Step 3 registers its \"open create-sub-agent drawer\" action here so the `@`\n\t * picker's \"Create new\" row can trigger it. Pass `null` to unregister.\n\t */\n\tregisterSubAgentCreator: (fn: (() => void) | null) => void;\n\t/** Open the create-sub-agent drawer (no-op until Step 3 registers it). */\n\trequestCreateSubAgent: () => void;\n\t/**\n\t * Step 3 registers its \"open the drawer for this built-in tool action\"\n\t * (Rest API / email handover / Slack) handler here so the `@` reference picker\n\t * can trigger it. Pass `null` to unregister.\n\t */\n\tregisterToolActionHandler: (\n\t\tfn: ((source: ToolSource) => void) | null,\n\t) => void;\n\t/** Open a built-in tool action's drawer (no-op until Step 3 registers it). */\n\trequestToolAction: (source: ToolSource) => void;\n\t/** Fetch a sub-agent's editable data (Configure). Omit to hide Configure. */\n\tonFetchSubAgent?: (id: string) => Promise<SubAgentDraft>;\n\t/** Persist edits to an existing sub-agent. */\n\tonUpdateSubAgent?: (id: string, draft: SubAgentDraft) => Promise<SubAgentRef>;\n\t/** Optional \"Improve with AI\" for the drawer's instructions / guardrails. */\n\tonImproveSubAgent?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\t/** Optional \"Improve with AI\" for the Rest API / email-handover tool drawers. */\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n}\n\nconst AgentBuilderContext =\n\tReact.createContext<AgentBuilderContextShape | null>(null);\n\nexport const useAgentBuilderContext = (): AgentBuilderContextShape => {\n\tconst ctx = useContext(AgentBuilderContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'useAgentBuilderContext must be used within an AgentBuilderProvider',\n\t\t);\n\t}\n\treturn ctx;\n};\n\n/** Validity derived purely from the current value (no effects). */\nconst deriveValidation = (\n\tvalue: AgentValue,\n\tlimits: AgentCharLimits,\n): StepValidation => {\n\tconst triggerValid =\n\t\tvalue.trigger.mode === 'custom_intent'\n\t\t\t? (value.trigger.custom_intent ?? '').trim().length > 0\n\t\t\t: value.trigger.intents.length > 0;\n\n\treturn {\n\t\tabout:\n\t\t\tvalue.name.trim().length > 0 &&\n\t\t\tvalue.name.length <= limits.name &&\n\t\t\tvalue.description.length <= limits.description,\n\t\ttrigger: triggerValid,\n\t\t// At least one of Instructions / Guardrails must be filled.\n\t\tresponse:\n\t\t\tvalue.instructions.trim().length > 0 ||\n\t\t\t(value.guardrail ?? '').trim().length > 0,\n\t\t// Optional until specced further — never blocks go-live.\n\t\thandover: true,\n\t};\n};\n\ninterface ProviderProps {\n\tvalue: AgentValue;\n\tonChange: (patch: Partial<AgentValue>) => void;\n\tactiveStep?: StepKey;\n\tonStepChange?: (step: StepKey) => void;\n\tavailableTools: AgentTool[];\n\tavailableSubAgents: SubAgentRef[];\n\tavailableIntents: IntentOption[];\n\tavailableModels: ModelOption[];\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\n\tintegrationStatus?: Partial<Record<ToolSource, boolean>>;\n\tonConnectIntegration?: (source: ToolSource) => void;\n\tvalidation?: Partial<StepValidation>;\n\tapplicationType?: ApplicationType;\n\tcharLimits?: Partial<AgentCharLimits>;\n\tdisableStepNavigation?: boolean;\n\tonCreateSubAgent?: (draft: SubAgentDraft) => Promise<SubAgentRef>;\n\tonFetchSubAgent?: (id: string) => Promise<SubAgentDraft>;\n\tonUpdateSubAgent?: (id: string, draft: SubAgentDraft) => Promise<SubAgentRef>;\n\tonImproveSubAgent?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n\tchildren: React.ReactNode;\n}\n\nexport const AgentBuilderProvider: React.FC<ProviderProps> = ({\n\tvalue,\n\tonChange,\n\tactiveStep: controlledStep,\n\tonStepChange,\n\tavailableTools,\n\tavailableSubAgents,\n\tavailableIntents,\n\tavailableModels,\n\tconfigToolTemplates,\n\tintegrationStatus,\n\tonConnectIntegration,\n\tvalidation: validationOverride,\n\tapplicationType,\n\tcharLimits: charLimitsOverride,\n\tdisableStepNavigation = true,\n\tonCreateSubAgent,\n\tonFetchSubAgent,\n\tonUpdateSubAgent,\n\tonImproveSubAgent,\n\tonImproveToolInstructions,\n\tchildren,\n}) => {\n\tconst [internalStep, setInternalStep] = useState<StepKey>('about');\n\tconst activeStep = controlledStep ?? internalStep;\n\tconst activeIndex = getStepIndex(activeStep);\n\n\t// Latest value, so closure-captured handlers (e.g. the `@` editor's mount-time\n\t// mention onSelect) append against the current lists, not a stale snapshot.\n\tconst valueRef = useRef(value);\n\tvalueRef.current = value;\n\n\t// Bumped when a mention field is edited from OUTSIDE its editor (removing a\n\t// tool from the side list, undo), forcing the mention editors to remount.\n\tconst [mentionResetKey, setMentionResetKey] = useState(0);\n\n\t// Each mention field registers an editor-backed insert fn + reports focus, so\n\t// side-panel adds drop a chip into the last-focused field at its cursor.\n\tconst mentionInsertersRef = useRef<\n\t\tPartial<Record<MentionFieldKey, MentionInsertFn>>\n\t>({});\n\tconst lastFocusedFieldRef = useRef<MentionFieldKey>('instructions');\n\tconst registerMentionField = useCallback(\n\t\t(fieldKey: MentionFieldKey, fn: MentionInsertFn | null) => {\n\t\t\tif (fn) {\n\t\t\t\tmentionInsertersRef.current[fieldKey] = fn;\n\t\t\t} else {\n\t\t\t\tdelete mentionInsertersRef.current[fieldKey];\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tconst notifyMentionFocus = useCallback((fieldKey: MentionFieldKey) => {\n\t\tlastFocusedFieldRef.current = fieldKey;\n\t}, []);\n\n\t// Step 3 registers its drawer opener here; the `@` picker's \"Create new\" calls it.\n\tconst subAgentCreatorRef = useRef<(() => void) | null>(null);\n\tconst registerSubAgentCreator = useCallback((fn: (() => void) | null) => {\n\t\tsubAgentCreatorRef.current = fn;\n\t}, []);\n\tconst requestCreateSubAgent = useCallback(() => {\n\t\tsubAgentCreatorRef.current?.();\n\t}, []);\n\n\t// Step 3 registers a dispatcher that opens a built-in tool action's drawer.\n\tconst toolActionHandlerRef = useRef<((source: ToolSource) => void) | null>(\n\t\tnull,\n\t);\n\tconst registerToolActionHandler = useCallback(\n\t\t(fn: ((source: ToolSource) => void) | null) => {\n\t\t\ttoolActionHandlerRef.current = fn;\n\t\t},\n\t\t[],\n\t);\n\tconst requestToolAction = useCallback((source: ToolSource) => {\n\t\ttoolActionHandlerRef.current?.(source);\n\t}, []);\n\tconst insertMention = useCallback<MentionInsertFn>((kind, id, label) => {\n\t\tconst inserters = mentionInsertersRef.current;\n\t\tconst target =\n\t\t\tinserters[lastFocusedFieldRef.current] ?? inserters.instructions;\n\t\ttarget?.(kind, id, label);\n\t}, []);\n\n\t// Undo state for the most recent removal.\n\tconst [undoToast, setUndoToast] = useState<UndoToastState | null>(null);\n\tconst undoSnapshotRef = useRef<Partial<AgentValue> | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\t// Consumer overrides merged over the built-in defaults (name 60, rest 1000).\n\tconst charLimits = useMemo<AgentCharLimits>(\n\t\t() => ({ ...AGENT_CHAR_LIMITS, ...charLimitsOverride }),\n\t\t[charLimitsOverride],\n\t);\n\n\tconst validation: StepValidation = useMemo(\n\t\t() => ({ ...deriveValidation(value, charLimits), ...validationOverride }),\n\t\t[value, charLimits, validationOverride],\n\t);\n\n\tconst goToStep = useCallback(\n\t\t(step: StepKey) => {\n\t\t\t// Forward jumps (side rail) must not skip past an incomplete step —\n\t\t\t// otherwise an agent with an empty step 3 could reach step 4 and be\n\t\t\t// published. Going back is always allowed.\n\t\t\tconst targetIndex = STEP_KEYS.indexOf(step);\n\t\t\tif (\n\t\t\t\ttargetIndex > activeIndex &&\n\t\t\t\tSTEP_KEYS.slice(0, targetIndex).some((k) => !validation[k])\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (controlledStep === undefined) {\n\t\t\t\tsetInternalStep(step);\n\t\t\t}\n\t\t\tonStepChange?.(step);\n\t\t},\n\t\t[controlledStep, onStepChange, activeIndex, validation],\n\t);\n\n\tconst goNext = useCallback(() => {\n\t\tconst next = STEP_KEYS[Math.min(activeIndex + 1, STEP_KEYS.length - 1)];\n\t\tgoToStep(next);\n\t}, [activeIndex, goToStep]);\n\n\tconst goPrev = useCallback(() => {\n\t\tconst prev = STEP_KEYS[Math.max(activeIndex - 1, 0)];\n\t\tgoToStep(prev);\n\t}, [activeIndex, goToStep]);\n\n\tconst patch = useCallback(\n\t\t(partial: Partial<AgentValue>) => onChange(partial),\n\t\t[onChange],\n\t);\n\n\tconst updateField = useCallback(\n\t\t<K extends keyof AgentValue>(key: K, val: AgentValue[K]) =>\n\t\t\tonChange({ [key]: val } as Partial<AgentValue>),\n\t\t[onChange],\n\t);\n\n\tconst addReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tconst v = valueRef.current;\n\t\t\tif (kind === 'tool') {\n\t\t\t\t// Custom tools (Rest API / email / Slack) track themselves on their own\n\t\t\t\t// lists; only catalog/native ids belong in `tools`. Picking an EXISTING\n\t\t\t\t// custom tool from the `@` picker must not leak its id in here — on save\n\t\t\t\t// it becomes a bogus native ref and create-agent validation rejects it.\n\t\t\t\tconst isCustom =\n\t\t\t\t\t(v.configTools ?? []).some((t) => t.id === id) ||\n\t\t\t\t\t(v.restApiTools ?? []).some((t) => t.id === id);\n\t\t\t\tif (!isCustom && !v.tools.includes(id)) {\n\t\t\t\t\tonChange({ tools: [...v.tools, id] });\n\t\t\t\t}\n\t\t\t} else if (!v.subagents.includes(id)) {\n\t\t\t\tonChange({ subagents: [...v.subagents, id] });\n\t\t\t}\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst removeReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\t// Tokens store the id for both kinds (a tool's id is its tool_id).\n\t\t\tconst token = kind === 'tool' ? `{{tool:${id}}}` : `{{subagent:${id}}}`;\n\t\t\tconst strip = (text: string) => text.split(token).join('');\n\n\t\t\t// Snapshot every field a removal touches, for undo. Custom tools (Rest\n\t\t\t// API / email / Slack) live on their own lists, so include them too.\n\t\t\tundoSnapshotRef.current = {\n\t\t\t\ttools: value.tools,\n\t\t\t\tsubagents: value.subagents,\n\t\t\t\tconfigTools: value.configTools,\n\t\t\t\trestApiTools: value.restApiTools,\n\t\t\t\tinstructions: value.instructions,\n\t\t\t\tguardrail: value.guardrail,\n\t\t\t};\n\n\t\t\tconst next: Partial<AgentValue> = {\n\t\t\t\tinstructions: strip(value.instructions),\n\t\t\t\tguardrail: strip(value.guardrail ?? ''),\n\t\t\t\t...(kind === 'tool'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t// A tool id may be a catalog tool OR an inline custom tool — drop\n\t\t\t\t\t\t\t// it from whichever list holds it (the others are no-op filters).\n\t\t\t\t\t\t\ttools: value.tools.filter((t) => t !== id),\n\t\t\t\t\t\t\tconfigTools: (value.configTools ?? []).filter((t) => t.id !== id),\n\t\t\t\t\t\t\trestApiTools: (value.restApiTools ?? []).filter(\n\t\t\t\t\t\t\t\t(t) => t.id !== id,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t }\n\t\t\t\t\t: { subagents: value.subagents.filter((s) => s !== id) }),\n\t\t\t};\n\t\t\tonChange(next);\n\t\t\tsetMentionResetKey((k) => k + 1);\n\n\t\t\tconst label =\n\t\t\t\tkind === 'tool'\n\t\t\t\t\t? availableTools.find((t) => t.tool_id === id)?.display_name ??\n\t\t\t\t\t (value.restApiTools ?? []).find((t) => t.id === id)?.name ??\n\t\t\t\t\t 'Tool'\n\t\t\t\t\t: availableSubAgents.find((s) => s.id === id)?.name ?? 'Sub-agent';\n\t\t\tundoIdRef.current += 1;\n\t\t\tsetUndoToast({\n\t\t\t\tid: undoIdRef.current,\n\t\t\t\tmessage: `${kind === 'tool' ? 'Tool' : 'Sub-agent'} \"${label}\" removed`,\n\t\t\t});\n\t\t},\n\t\t[availableTools, availableSubAgents, value, onChange],\n\t);\n\n\tconst undoRemoval = useCallback(() => {\n\t\tif (undoSnapshotRef.current) {\n\t\t\tonChange(undoSnapshotRef.current);\n\t\t\tundoSnapshotRef.current = null;\n\t\t\tsetMentionResetKey((k) => k + 1);\n\t\t}\n\t\tsetUndoToast(null);\n\t}, [onChange]);\n\n\tconst dismissUndo = useCallback(() => setUndoToast(null), []);\n\n\tconst ctx = useMemo<AgentBuilderContextShape>(\n\t\t() => ({\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\n\t\t\taddReference,\n\t\t\tremoveReference,\n\t\t\tmentionResetKey,\n\t\t\tinsertMention,\n\t\t\tregisterMentionField,\n\t\t\tnotifyMentionFocus,\n\t\t\tundoToast,\n\t\t\tundoRemoval,\n\t\t\tdismissUndo,\n\t\t\tactiveStep,\n\t\t\tactiveIndex,\n\t\t\tgoToStep,\n\t\t\tgoNext,\n\t\t\tgoPrev,\n\t\t\tisFirstStep: activeIndex === 0,\n\t\t\tisLastStep: activeIndex === STEP_KEYS.length - 1,\n\t\t\tvalidation,\n\t\t\tisActiveStepValid: validation[activeStep],\n\t\t\tavailableTools,\n\t\t\tavailableSubAgents,\n\t\t\tavailableIntents,\n\t\t\tavailableModels,\n\t\t\tconfigToolTemplates,\n\t\t\tintegrationStatus,\n\t\t\tonConnectIntegration,\n\t\t\tapplicationType,\n\t\t\tcharLimits,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tregisterToolActionHandler,\n\t\t\trequestToolAction,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t\tonImproveToolInstructions,\n\t\t}),\n\t\t[\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\n\t\t\taddReference,\n\t\t\tremoveReference,\n\t\t\tmentionResetKey,\n\t\t\tinsertMention,\n\t\t\tregisterMentionField,\n\t\t\tnotifyMentionFocus,\n\t\t\tundoToast,\n\t\t\tundoRemoval,\n\t\t\tdismissUndo,\n\t\t\tactiveStep,\n\t\t\tactiveIndex,\n\t\t\tgoToStep,\n\t\t\tgoNext,\n\t\t\tgoPrev,\n\t\t\tvalidation,\n\t\t\tavailableTools,\n\t\t\tavailableSubAgents,\n\t\t\tavailableIntents,\n\t\t\tavailableModels,\n\t\t\tconfigToolTemplates,\n\t\t\tintegrationStatus,\n\t\t\tonConnectIntegration,\n\t\t\tapplicationType,\n\t\t\tcharLimits,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tregisterToolActionHandler,\n\t\t\trequestToolAction,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t\tonImproveToolInstructions,\n\t\t],\n\t);\n\n\treturn (\n\t\t<AgentBuilderContext.Provider value={ctx}>\n\t\t\t{children}\n\t\t</AgentBuilderContext.Provider>\n\t);\n};\n"],"names":["AgentBuilderContext","React","useAgentBuilderContext","ctx","useContext","deriveValidation","value","limits","triggerValid","AgentBuilderProvider","onChange","controlledStep","onStepChange","availableTools","availableSubAgents","availableIntents","availableModels","configToolTemplates","integrationStatus","onConnectIntegration","validationOverride","applicationType","charLimitsOverride","disableStepNavigation","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","onImproveToolInstructions","children","internalStep","setInternalStep","useState","activeStep","activeIndex","getStepIndex","valueRef","useRef","mentionResetKey","setMentionResetKey","mentionInsertersRef","lastFocusedFieldRef","registerMentionField","useCallback","fieldKey","fn","notifyMentionFocus","subAgentCreatorRef","registerSubAgentCreator","requestCreateSubAgent","toolActionHandlerRef","registerToolActionHandler","requestToolAction","source","insertMention","kind","id","label","inserters","undoToast","setUndoToast","undoSnapshotRef","undoIdRef","charLimits","useMemo","AGENT_CHAR_LIMITS","validation","goToStep","step","targetIndex","STEP_KEYS","k","goNext","next","goPrev","prev","patch","partial","updateField","key","val","addReference","v","t","removeReference","token","strip","text","s","undoRemoval","dismissUndo"],"mappings":"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"}
1
+ {"version":3,"file":"AgentBuilderContext.js","sources":["../../../../../src/components/agent-builder/context/AgentBuilderContext.tsx"],"sourcesContent":["import type { ApplicationType } from '@bikdotai/bik-models/growth';\nimport React, {\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport {\n\tAgentTool,\n\tAgentValue,\n\tConfigToolKey,\n\tIntentOption,\n\tModelOption,\n\tParamsBlob,\n\tStepKey,\n\tStepValidation,\n\tSubAgentDraft,\n\tSubAgentRef,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport type { AgentCharLimits } from '../constants/charLimits';\nimport { getStepIndex, STEP_KEYS } from '../constants/steps';\nimport type { ToolSource } from '../constants/tools';\n\n/** Mention-capable text fields in Step 3 (both store firebase token text). */\nexport type MentionFieldKey = 'instructions' | 'guardrail';\ntype MentionInsertFn = (\n\tkind: 'tool' | 'subagent',\n\tid: string,\n\tlabel?: string,\n\t/** Tool source, for the chip's leading icon. Pass it for a JUST-created custom\n\t * tool that isn't in the editor's mention list yet (else the chip has no icon\n\t * until reload); existing tools resolve it from the list. */\n\tsource?: string,\n) => void;\n\n/** Toast shown after a tool / sub-agent is removed, offering an undo. */\nexport interface UndoToastState {\n\t/** Bumped per removal so the toast timer restarts. */\n\tid: number;\n\tmessage: string;\n}\n\nexport interface AgentBuilderContextShape {\n\t/** Controlled value relayed from props. */\n\tvalue: AgentValue;\n\t/** Patch one or more fields. */\n\tpatch: (partial: Partial<AgentValue>) => void;\n\t/** Patch a single field. */\n\tupdateField: <K extends keyof AgentValue>(key: K, val: AgentValue[K]) => void;\n\t/**\n\t * Remove a tool / sub-agent everywhere: drops it from the list AND strips ALL\n\t * its `{{tool:KEY}}` / `{{subagent:ID}}` tokens from BOTH the instructions and\n\t * the guardrails, remounts the editors, and raises an undo toast.\n\t */\n\tremoveReference: (kind: 'tool' | 'subagent', id: string) => void;\n\t/**\n\t * Append a tool / sub-agent id to its list (deduped), reading the LATEST value\n\t * via a ref. Use this instead of `patch({ tools: [...value.tools, id] })` from\n\t * any handler that may be captured with a stale `value` — notably the `@`\n\t * editor's mount-time `onSelect`, which would otherwise keep only the last pick.\n\t */\n\taddReference: (kind: 'tool' | 'subagent', id: string) => void;\n\t/** Remount signal for the mention editors after an external edit. */\n\tmentionResetKey: number;\n\t/**\n\t * Insert a tool / sub-agent mention chip at the last cursor position of\n\t * whichever mention field was focused most recently (Instructions or\n\t * Guardrails). `label` overrides the chip text (e.g. a just-created sub-agent\n\t * not yet in the available list).\n\t */\n\tinsertMention: MentionInsertFn;\n\t/** A mention field registers its editor-backed insert here (internal). */\n\tregisterMentionField: (\n\t\tfieldKey: MentionFieldKey,\n\t\tfn: MentionInsertFn | null,\n\t) => void;\n\t/** A mention field reports focus so inserts target it (internal). */\n\tnotifyMentionFocus: (fieldKey: MentionFieldKey) => void;\n\n\t// Undo (post-removal)\n\t/** Non-null while the undo toast should be visible. */\n\tundoToast: UndoToastState | null;\n\t/** Restore the last removed tool / sub-agent (list + stripped tokens). */\n\tundoRemoval: () => void;\n\t/** Dismiss the undo toast without restoring. */\n\tdismissUndo: () => void;\n\n\t// Navigation\n\tactiveStep: StepKey;\n\tactiveIndex: number;\n\tgoToStep: (step: StepKey) => void;\n\tgoNext: () => void;\n\tgoPrev: () => void;\n\tisFirstStep: boolean;\n\tisLastStep: boolean;\n\n\t// Validation\n\tvalidation: StepValidation;\n\tisActiveStepValid: boolean;\n\n\t// Reference data\n\tavailableTools: AgentTool[];\n\tavailableSubAgents: SubAgentRef[];\n\tavailableIntents: IntentOption[];\n\tavailableModels: ModelOption[];\n\t/**\n\t * Backend templates for the shared-drawer tools (email / Slack), keyed by\n\t * `tool_key`. A present key drives its dynamic form + enables its tool action.\n\t */\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\n\t/**\n\t * Per-source integration connection state (today: Slack). A source mapped to\n\t * `false` renders a \"Connect\" row in the `@` picker instead of drilling in;\n\t * `true`/absent renders normally. Fed by the consumer via `integrationStatus`.\n\t */\n\tintegrationStatus?: Partial<Record<ToolSource, boolean>>;\n\t/** Open the consumer's connect flow for an unconnected integration source. */\n\tonConnectIntegration?: (source: ToolSource) => void;\n\t/** Host application context (e.g. MANIFEST) — drives tool-chip labelling. */\n\tapplicationType?: ApplicationType;\n\t/** Resolved per-field character limits (consumer overrides merged over defaults). */\n\tcharLimits: AgentCharLimits;\n\t/** When true, step-rail items are not clickable (Back / Next only). */\n\tdisableStepNavigation: boolean;\n\n\t// Sub-agent creation (Step 3 drawer)\n\t/** Persist a new sub-agent and resolve with its ref. Omit to hide the create flow. */\n\tonCreateSubAgent?: (draft: SubAgentDraft) => Promise<SubAgentRef>;\n\t/**\n\t * Step 3 registers its \"open create-sub-agent drawer\" action here so the `@`\n\t * picker's \"Create new\" row can trigger it. Pass `null` to unregister.\n\t */\n\tregisterSubAgentCreator: (fn: (() => void) | null) => void;\n\t/** Open the create-sub-agent drawer (no-op until Step 3 registers it). */\n\trequestCreateSubAgent: () => void;\n\t/**\n\t * Step 3 registers its \"open the drawer for this built-in tool action\"\n\t * (Rest API / email handover / Slack) handler here so the `@` reference picker\n\t * can trigger it. Pass `null` to unregister.\n\t */\n\tregisterToolActionHandler: (\n\t\tfn: ((source: ToolSource) => void) | null,\n\t) => void;\n\t/** Open a built-in tool action's drawer (no-op until Step 3 registers it). */\n\trequestToolAction: (source: ToolSource) => void;\n\t/** Fetch a sub-agent's editable data (Configure). Omit to hide Configure. */\n\tonFetchSubAgent?: (id: string) => Promise<SubAgentDraft>;\n\t/** Persist edits to an existing sub-agent. */\n\tonUpdateSubAgent?: (id: string, draft: SubAgentDraft) => Promise<SubAgentRef>;\n\t/** Optional \"Improve with AI\" for the drawer's instructions / guardrails. */\n\tonImproveSubAgent?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\t/** Optional \"Improve with AI\" for the Rest API / email-handover tool drawers. */\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n}\n\nconst AgentBuilderContext =\n\tReact.createContext<AgentBuilderContextShape | null>(null);\n\nexport const useAgentBuilderContext = (): AgentBuilderContextShape => {\n\tconst ctx = useContext(AgentBuilderContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'useAgentBuilderContext must be used within an AgentBuilderProvider',\n\t\t);\n\t}\n\treturn ctx;\n};\n\n/** Validity derived purely from the current value (no effects). */\nconst deriveValidation = (\n\tvalue: AgentValue,\n\tlimits: AgentCharLimits,\n): StepValidation => {\n\tconst triggerValid =\n\t\tvalue.trigger.mode === 'custom_intent'\n\t\t\t? (value.trigger.custom_intent ?? '').trim().length > 0\n\t\t\t: value.trigger.intents.length > 0;\n\n\treturn {\n\t\tabout:\n\t\t\tvalue.name.trim().length > 0 &&\n\t\t\tvalue.name.length <= limits.name &&\n\t\t\tvalue.description.length <= limits.description,\n\t\ttrigger: triggerValid,\n\t\t// At least one of Instructions / Guardrails must be filled.\n\t\tresponse:\n\t\t\tvalue.instructions.trim().length > 0 ||\n\t\t\t(value.guardrail ?? '').trim().length > 0,\n\t\t// Optional until specced further — never blocks go-live.\n\t\thandover: true,\n\t};\n};\n\ninterface ProviderProps {\n\tvalue: AgentValue;\n\tonChange: (patch: Partial<AgentValue>) => void;\n\tactiveStep?: StepKey;\n\tonStepChange?: (step: StepKey) => void;\n\tavailableTools: AgentTool[];\n\tavailableSubAgents: SubAgentRef[];\n\tavailableIntents: IntentOption[];\n\tavailableModels: ModelOption[];\n\tconfigToolTemplates?: Partial<Record<ConfigToolKey, ParamsBlob>>;\n\tintegrationStatus?: Partial<Record<ToolSource, boolean>>;\n\tonConnectIntegration?: (source: ToolSource) => void;\n\tvalidation?: Partial<StepValidation>;\n\tapplicationType?: ApplicationType;\n\tcharLimits?: Partial<AgentCharLimits>;\n\tdisableStepNavigation?: boolean;\n\tonCreateSubAgent?: (draft: SubAgentDraft) => Promise<SubAgentRef>;\n\tonFetchSubAgent?: (id: string) => Promise<SubAgentDraft>;\n\tonUpdateSubAgent?: (id: string, draft: SubAgentDraft) => Promise<SubAgentRef>;\n\tonImproveSubAgent?: (\n\t\tkind: 'instructions' | 'guardrail',\n\t\ttext: string,\n\t) => Promise<string>;\n\tonImproveToolInstructions?: (text: string) => Promise<string>;\n\tchildren: React.ReactNode;\n}\n\nexport const AgentBuilderProvider: React.FC<ProviderProps> = ({\n\tvalue,\n\tonChange,\n\tactiveStep: controlledStep,\n\tonStepChange,\n\tavailableTools,\n\tavailableSubAgents,\n\tavailableIntents,\n\tavailableModels,\n\tconfigToolTemplates,\n\tintegrationStatus,\n\tonConnectIntegration,\n\tvalidation: validationOverride,\n\tapplicationType,\n\tcharLimits: charLimitsOverride,\n\tdisableStepNavigation = true,\n\tonCreateSubAgent,\n\tonFetchSubAgent,\n\tonUpdateSubAgent,\n\tonImproveSubAgent,\n\tonImproveToolInstructions,\n\tchildren,\n}) => {\n\tconst [internalStep, setInternalStep] = useState<StepKey>('about');\n\tconst activeStep = controlledStep ?? internalStep;\n\tconst activeIndex = getStepIndex(activeStep);\n\n\t// Latest value, so closure-captured handlers (e.g. the `@` editor's mount-time\n\t// mention onSelect) append against the current lists, not a stale snapshot.\n\tconst valueRef = useRef(value);\n\tvalueRef.current = value;\n\n\t// Bumped when a mention field is edited from OUTSIDE its editor (removing a\n\t// tool from the side list, undo), forcing the mention editors to remount.\n\tconst [mentionResetKey, setMentionResetKey] = useState(0);\n\n\t// Each mention field registers an editor-backed insert fn + reports focus, so\n\t// side-panel adds drop a chip into the last-focused field at its cursor.\n\tconst mentionInsertersRef = useRef<\n\t\tPartial<Record<MentionFieldKey, MentionInsertFn>>\n\t>({});\n\tconst lastFocusedFieldRef = useRef<MentionFieldKey>('instructions');\n\tconst registerMentionField = useCallback(\n\t\t(fieldKey: MentionFieldKey, fn: MentionInsertFn | null) => {\n\t\t\tif (fn) {\n\t\t\t\tmentionInsertersRef.current[fieldKey] = fn;\n\t\t\t} else {\n\t\t\t\tdelete mentionInsertersRef.current[fieldKey];\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tconst notifyMentionFocus = useCallback((fieldKey: MentionFieldKey) => {\n\t\tlastFocusedFieldRef.current = fieldKey;\n\t}, []);\n\n\t// Step 3 registers its drawer opener here; the `@` picker's \"Create new\" calls it.\n\tconst subAgentCreatorRef = useRef<(() => void) | null>(null);\n\tconst registerSubAgentCreator = useCallback((fn: (() => void) | null) => {\n\t\tsubAgentCreatorRef.current = fn;\n\t}, []);\n\tconst requestCreateSubAgent = useCallback(() => {\n\t\tsubAgentCreatorRef.current?.();\n\t}, []);\n\n\t// Step 3 registers a dispatcher that opens a built-in tool action's drawer.\n\tconst toolActionHandlerRef = useRef<((source: ToolSource) => void) | null>(\n\t\tnull,\n\t);\n\tconst registerToolActionHandler = useCallback(\n\t\t(fn: ((source: ToolSource) => void) | null) => {\n\t\t\ttoolActionHandlerRef.current = fn;\n\t\t},\n\t\t[],\n\t);\n\tconst requestToolAction = useCallback((source: ToolSource) => {\n\t\ttoolActionHandlerRef.current?.(source);\n\t}, []);\n\tconst insertMention = useCallback<MentionInsertFn>(\n\t\t(kind, id, label, source) => {\n\t\t\tconst inserters = mentionInsertersRef.current;\n\t\t\tconst target =\n\t\t\t\tinserters[lastFocusedFieldRef.current] ?? inserters.instructions;\n\t\t\ttarget?.(kind, id, label, source);\n\t\t},\n\t\t[],\n\t);\n\n\t// Undo state for the most recent removal.\n\tconst [undoToast, setUndoToast] = useState<UndoToastState | null>(null);\n\tconst undoSnapshotRef = useRef<Partial<AgentValue> | null>(null);\n\tconst undoIdRef = useRef(0);\n\n\t// Consumer overrides merged over the built-in defaults (name 60, rest 1000).\n\tconst charLimits = useMemo<AgentCharLimits>(\n\t\t() => ({ ...AGENT_CHAR_LIMITS, ...charLimitsOverride }),\n\t\t[charLimitsOverride],\n\t);\n\n\tconst validation: StepValidation = useMemo(\n\t\t() => ({ ...deriveValidation(value, charLimits), ...validationOverride }),\n\t\t[value, charLimits, validationOverride],\n\t);\n\n\tconst goToStep = useCallback(\n\t\t(step: StepKey) => {\n\t\t\t// Forward jumps (side rail) must not skip past an incomplete step —\n\t\t\t// otherwise an agent with an empty step 3 could reach step 4 and be\n\t\t\t// published. Going back is always allowed.\n\t\t\tconst targetIndex = STEP_KEYS.indexOf(step);\n\t\t\tif (\n\t\t\t\ttargetIndex > activeIndex &&\n\t\t\t\tSTEP_KEYS.slice(0, targetIndex).some((k) => !validation[k])\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (controlledStep === undefined) {\n\t\t\t\tsetInternalStep(step);\n\t\t\t}\n\t\t\tonStepChange?.(step);\n\t\t},\n\t\t[controlledStep, onStepChange, activeIndex, validation],\n\t);\n\n\tconst goNext = useCallback(() => {\n\t\tconst next = STEP_KEYS[Math.min(activeIndex + 1, STEP_KEYS.length - 1)];\n\t\tgoToStep(next);\n\t}, [activeIndex, goToStep]);\n\n\tconst goPrev = useCallback(() => {\n\t\tconst prev = STEP_KEYS[Math.max(activeIndex - 1, 0)];\n\t\tgoToStep(prev);\n\t}, [activeIndex, goToStep]);\n\n\tconst patch = useCallback(\n\t\t(partial: Partial<AgentValue>) => onChange(partial),\n\t\t[onChange],\n\t);\n\n\tconst updateField = useCallback(\n\t\t<K extends keyof AgentValue>(key: K, val: AgentValue[K]) =>\n\t\t\tonChange({ [key]: val } as Partial<AgentValue>),\n\t\t[onChange],\n\t);\n\n\tconst addReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tconst v = valueRef.current;\n\t\t\tif (kind === 'tool') {\n\t\t\t\t// Custom tools (Rest API / email / Slack) track themselves on their own\n\t\t\t\t// lists; only catalog/native ids belong in `tools`. Picking an EXISTING\n\t\t\t\t// custom tool from the `@` picker must not leak its id in here — on save\n\t\t\t\t// it becomes a bogus native ref and create-agent validation rejects it.\n\t\t\t\tconst isCustom =\n\t\t\t\t\t(v.configTools ?? []).some((t) => t.id === id) ||\n\t\t\t\t\t(v.restApiTools ?? []).some((t) => t.id === id);\n\t\t\t\tif (!isCustom && !v.tools.includes(id)) {\n\t\t\t\t\tonChange({ tools: [...v.tools, id] });\n\t\t\t\t}\n\t\t\t} else if (!v.subagents.includes(id)) {\n\t\t\t\tonChange({ subagents: [...v.subagents, id] });\n\t\t\t}\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst removeReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\t// Tokens store the id for both kinds (a tool's id is its tool_id).\n\t\t\tconst token = kind === 'tool' ? `{{tool:${id}}}` : `{{subagent:${id}}}`;\n\t\t\tconst strip = (text: string) => text.split(token).join('');\n\n\t\t\t// Snapshot every field a removal touches, for undo. Custom tools (Rest\n\t\t\t// API / email / Slack) live on their own lists, so include them too.\n\t\t\tundoSnapshotRef.current = {\n\t\t\t\ttools: value.tools,\n\t\t\t\tsubagents: value.subagents,\n\t\t\t\tconfigTools: value.configTools,\n\t\t\t\trestApiTools: value.restApiTools,\n\t\t\t\tinstructions: value.instructions,\n\t\t\t\tguardrail: value.guardrail,\n\t\t\t};\n\n\t\t\tconst next: Partial<AgentValue> = {\n\t\t\t\tinstructions: strip(value.instructions),\n\t\t\t\tguardrail: strip(value.guardrail ?? ''),\n\t\t\t\t...(kind === 'tool'\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t// A tool id may be a catalog tool OR an inline custom tool — drop\n\t\t\t\t\t\t\t// it from whichever list holds it (the others are no-op filters).\n\t\t\t\t\t\t\ttools: value.tools.filter((t) => t !== id),\n\t\t\t\t\t\t\tconfigTools: (value.configTools ?? []).filter((t) => t.id !== id),\n\t\t\t\t\t\t\trestApiTools: (value.restApiTools ?? []).filter(\n\t\t\t\t\t\t\t\t(t) => t.id !== id,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t }\n\t\t\t\t\t: { subagents: value.subagents.filter((s) => s !== id) }),\n\t\t\t};\n\t\t\tonChange(next);\n\t\t\tsetMentionResetKey((k) => k + 1);\n\n\t\t\tconst label =\n\t\t\t\tkind === 'tool'\n\t\t\t\t\t? availableTools.find((t) => t.tool_id === id)?.display_name ??\n\t\t\t\t\t (value.restApiTools ?? []).find((t) => t.id === id)?.name ??\n\t\t\t\t\t 'Tool'\n\t\t\t\t\t: availableSubAgents.find((s) => s.id === id)?.name ?? 'Sub-agent';\n\t\t\tundoIdRef.current += 1;\n\t\t\tsetUndoToast({\n\t\t\t\tid: undoIdRef.current,\n\t\t\t\tmessage: `${kind === 'tool' ? 'Tool' : 'Sub-agent'} \"${label}\" removed`,\n\t\t\t});\n\t\t},\n\t\t[availableTools, availableSubAgents, value, onChange],\n\t);\n\n\tconst undoRemoval = useCallback(() => {\n\t\tif (undoSnapshotRef.current) {\n\t\t\tonChange(undoSnapshotRef.current);\n\t\t\tundoSnapshotRef.current = null;\n\t\t\tsetMentionResetKey((k) => k + 1);\n\t\t}\n\t\tsetUndoToast(null);\n\t}, [onChange]);\n\n\tconst dismissUndo = useCallback(() => setUndoToast(null), []);\n\n\tconst ctx = useMemo<AgentBuilderContextShape>(\n\t\t() => ({\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\n\t\t\taddReference,\n\t\t\tremoveReference,\n\t\t\tmentionResetKey,\n\t\t\tinsertMention,\n\t\t\tregisterMentionField,\n\t\t\tnotifyMentionFocus,\n\t\t\tundoToast,\n\t\t\tundoRemoval,\n\t\t\tdismissUndo,\n\t\t\tactiveStep,\n\t\t\tactiveIndex,\n\t\t\tgoToStep,\n\t\t\tgoNext,\n\t\t\tgoPrev,\n\t\t\tisFirstStep: activeIndex === 0,\n\t\t\tisLastStep: activeIndex === STEP_KEYS.length - 1,\n\t\t\tvalidation,\n\t\t\tisActiveStepValid: validation[activeStep],\n\t\t\tavailableTools,\n\t\t\tavailableSubAgents,\n\t\t\tavailableIntents,\n\t\t\tavailableModels,\n\t\t\tconfigToolTemplates,\n\t\t\tintegrationStatus,\n\t\t\tonConnectIntegration,\n\t\t\tapplicationType,\n\t\t\tcharLimits,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tregisterToolActionHandler,\n\t\t\trequestToolAction,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t\tonImproveToolInstructions,\n\t\t}),\n\t\t[\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\n\t\t\taddReference,\n\t\t\tremoveReference,\n\t\t\tmentionResetKey,\n\t\t\tinsertMention,\n\t\t\tregisterMentionField,\n\t\t\tnotifyMentionFocus,\n\t\t\tundoToast,\n\t\t\tundoRemoval,\n\t\t\tdismissUndo,\n\t\t\tactiveStep,\n\t\t\tactiveIndex,\n\t\t\tgoToStep,\n\t\t\tgoNext,\n\t\t\tgoPrev,\n\t\t\tvalidation,\n\t\t\tavailableTools,\n\t\t\tavailableSubAgents,\n\t\t\tavailableIntents,\n\t\t\tavailableModels,\n\t\t\tconfigToolTemplates,\n\t\t\tintegrationStatus,\n\t\t\tonConnectIntegration,\n\t\t\tapplicationType,\n\t\t\tcharLimits,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tregisterToolActionHandler,\n\t\t\trequestToolAction,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t\tonImproveToolInstructions,\n\t\t],\n\t);\n\n\treturn (\n\t\t<AgentBuilderContext.Provider value={ctx}>\n\t\t\t{children}\n\t\t</AgentBuilderContext.Provider>\n\t);\n};\n"],"names":["AgentBuilderContext","React","useAgentBuilderContext","ctx","useContext","deriveValidation","value","limits","triggerValid","AgentBuilderProvider","onChange","controlledStep","onStepChange","availableTools","availableSubAgents","availableIntents","availableModels","configToolTemplates","integrationStatus","onConnectIntegration","validationOverride","applicationType","charLimitsOverride","disableStepNavigation","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","onImproveToolInstructions","children","internalStep","setInternalStep","useState","activeStep","activeIndex","getStepIndex","valueRef","useRef","mentionResetKey","setMentionResetKey","mentionInsertersRef","lastFocusedFieldRef","registerMentionField","useCallback","fieldKey","fn","notifyMentionFocus","subAgentCreatorRef","registerSubAgentCreator","requestCreateSubAgent","toolActionHandlerRef","registerToolActionHandler","requestToolAction","source","insertMention","kind","id","label","inserters","undoToast","setUndoToast","undoSnapshotRef","undoIdRef","charLimits","useMemo","AGENT_CHAR_LIMITS","validation","goToStep","step","targetIndex","STEP_KEYS","k","goNext","next","goPrev","prev","patch","partial","updateField","key","val","addReference","v","t","removeReference","token","strip","text","s","undoRemoval","dismissUndo"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { jsxs as d, jsx as n, Fragment as Le } from "react/jsx-runtime";
1
+ import { jsxs as d, jsx as i, Fragment as Le } from "react/jsx-runtime";
2
2
  import { useState as k, useRef as ee, useCallback as s, useEffect as U } from "react";
3
3
  import { TitleSmall as oe, BodyCaption as Ke, BodySecondary as te } from "../../TypographyStyle.js";
4
- import { COLORS as A } from "../../../constants/Theme.js";
4
+ import { COLORS as I } from "../../../constants/Theme.js";
5
5
  import { Step3Root as qe, Step3Grid as Be, SectionBodyWrap as ne, Step3Divider as Fe, SideSection as ie, SideSectionHeader as Ge } from "../AgentBuilder.styled.js";
6
6
  import { ConfigToolPanel as Ue } from "../components/ConfigToolPanel.js";
7
7
  import { CreateSubAgentPanel as We } from "../components/CreateSubAgentPanel.js";
@@ -11,7 +11,7 @@ import { RestApiToolPanel as Ve } from "../components/RestApiToolPanel.js";
11
11
  import { SelectableListSection as ae } from "../components/SelectableListSection.js";
12
12
  import { StepSectionHeader as je } from "../components/StepSectionHeader.js";
13
13
  import { STEP_DEFINITIONS as $e } from "../constants/steps.js";
14
- import { CONFIG_TOOL_SOURCES as Je, ToolSource as T } from "../constants/tools.js";
14
+ import { ToolSource as u, CONFIG_TOOL_SOURCES as Je } from "../constants/tools.js";
15
15
  import { useAgentBuilderContext as Qe } from "../context/AgentBuilderContext.js";
16
16
  import { restApiMentionItem as Xe, configToolMentionItem as Ye, restApiToolName as Ze, configToolName as eo, toolSourceLabel as oo, buildAgentMentionItems as se, buildCustomToolMentionItems as to, appTypeLabel as re } from "../utils/mentionSerialization.js";
17
17
  import { sourceIcon as ge, SOURCE_ICONS as ce, renderSourceIcon as no } from "../utils/sourceIcons.js";
@@ -24,19 +24,19 @@ import { Switch as so } from "../../switch/Switch.js";
24
24
  const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
25
25
  label: t.display_name,
26
26
  value: t.tool_id,
27
- leadingIcon: ro(t.source ?? T.Manifest)
27
+ leadingIcon: ro(t.source ?? u.Manifest)
28
28
  }), me = $e[2], W = [
29
29
  { label: "OTP to phone", value: "phone_otp" },
30
30
  { label: "OTP to email", value: "email_otp" }
31
31
  ], fe = (t, l) => {
32
- const S = t ?? [];
33
- return S.some((u) => u.id === l.id) ? S.map((u) => u.id === l.id ? l : u) : [...S, l];
32
+ const T = t ?? [];
33
+ return T.some((p) => p.id === l.id) ? T.map((p) => p.id === l.id ? l : p) : [...T, l];
34
34
  }, No = () => {
35
35
  const {
36
36
  value: t,
37
37
  patch: l,
38
- updateField: S,
39
- addReference: u,
38
+ updateField: T,
39
+ addReference: p,
40
40
  removeReference: z,
41
41
  availableTools: r,
42
42
  availableSubAgents: he,
@@ -45,24 +45,24 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
45
45
  applicationType: V,
46
46
  charLimits: v,
47
47
  insertMention: c,
48
- onCreateSubAgent: f,
49
- onFetchSubAgent: I,
48
+ onCreateSubAgent: g,
49
+ onFetchSubAgent: C,
50
50
  onUpdateSubAgent: E,
51
51
  onImproveSubAgent: be,
52
52
  onImproveToolInstructions: N,
53
53
  registerSubAgentCreator: P,
54
- registerToolActionHandler: D,
54
+ registerToolActionHandler: H,
55
55
  integrationStatus: j,
56
56
  onConnectIntegration: $
57
- } = Qe(), [p, C] = k(null), w = ee(0), [a, g] = k(null), R = ee(0), H = s((e) => {
58
- R.current += 1, g({
57
+ } = Qe(), [m, w] = k(null), _ = ee(0), [a, h] = k(null), R = ee(0), D = s((e) => {
58
+ R.current += 1, h({
59
59
  key: R.current,
60
60
  kind: "restapi",
61
61
  initialRest: e
62
62
  });
63
63
  }, []), L = s(
64
64
  (e, o) => {
65
- R.current += 1, g({
65
+ R.current += 1, h({
66
66
  key: R.current,
67
67
  kind: "config",
68
68
  toolKey: e,
@@ -72,137 +72,151 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
72
72
  []
73
73
  ), ye = s(
74
74
  (e) => {
75
- const o = !(t.restApiTools ?? []).some((i) => i.id === e.id);
76
- l({ restApiTools: fe(t.restApiTools, e) }), o && c("tool", e.id, Xe(e).label), g(null);
75
+ const o = !(t.restApiTools ?? []).some((n) => n.id === e.id);
76
+ l({ restApiTools: fe(t.restApiTools, e) }), o && c(
77
+ "tool",
78
+ e.id,
79
+ Xe(e).label,
80
+ u.RestApi
81
+ ), h(null);
77
82
  },
78
83
  [l, t.restApiTools, c]
79
- ), Te = s(
84
+ ), Se = s(
80
85
  (e) => {
81
- const o = !(t.configTools ?? []).some((i) => i.id === e.id);
82
- l({ configTools: fe(t.configTools, e) }), o && c("tool", e.id, Ye(e).label), g(null);
86
+ const o = !(t.configTools ?? []).some((n) => n.id === e.id);
87
+ if (l({ configTools: fe(t.configTools, e) }), o) {
88
+ const n = e.tool_key === "send_slack_message" ? u.Slack : u.EmailHandover;
89
+ c(
90
+ "tool",
91
+ e.id,
92
+ Ye(e).label,
93
+ n
94
+ );
95
+ }
96
+ h(null);
83
97
  },
84
98
  [l, t.configTools, c]
85
99
  ), K = s(
86
100
  (e) => {
87
101
  const o = Je[e];
88
- o ? L(o) : H();
102
+ o ? L(o) : D();
89
103
  },
90
- [L, H]
104
+ [L, D]
91
105
  );
92
- U(() => (D(K), () => D(null)), [D, K]);
93
- const [Se, J] = k([]), O = /* @__PURE__ */ new Map();
94
- he.forEach((e) => O.set(e.id, e)), Se.forEach((e) => O.set(e.id, e));
95
- const Q = Array.from(O.values()), q = s(() => {
96
- w.current += 1, C({ key: w.current, title: "Create sub-agent" });
106
+ U(() => (H(K), () => H(null)), [H, K]);
107
+ const [Te, J] = k([]), A = /* @__PURE__ */ new Map();
108
+ he.forEach((e) => A.set(e.id, e)), Te.forEach((e) => A.set(e.id, e));
109
+ const Q = Array.from(A.values()), q = s(() => {
110
+ _.current += 1, w({ key: _.current, title: "Create sub-agent" });
97
111
  }, []);
98
112
  U(() => {
99
- if (f)
113
+ if (g)
100
114
  return P(q), () => P(null);
101
- }, [P, q, f]);
115
+ }, [P, q, g]);
102
116
  const ve = s(
103
117
  async (e) => {
104
- if (!I)
118
+ if (!C)
105
119
  return;
106
- const o = await I(e);
107
- w.current += 1, C({
108
- key: w.current,
120
+ const o = await C(e);
121
+ _.current += 1, w({
122
+ key: _.current,
109
123
  title: "Edit sub-agent",
110
124
  editingId: e,
111
125
  initial: o
112
126
  });
113
127
  },
114
- [I]
128
+ [C]
115
129
  ), Ae = s(
116
130
  async (e) => {
117
- if (p?.editingId) {
131
+ if (m?.editingId) {
118
132
  if (E) {
119
- const o = await E(p.editingId, e);
120
- J((i) => [
121
- ...i.filter((y) => y.id !== o.id),
133
+ const o = await E(m.editingId, e);
134
+ J((n) => [
135
+ ...n.filter((S) => S.id !== o.id),
122
136
  o
123
137
  ]);
124
138
  }
125
- } else if (f) {
126
- const o = await f(e);
127
- J((i) => [...i, o]), l({ subagents: [...t.subagents, o.id] }), c("subagent", o.id, `sub-agent: ${o.name}`);
139
+ } else if (g) {
140
+ const o = await g(e);
141
+ J((n) => [...n, o]), l({ subagents: [...t.subagents, o.id] }), c("subagent", o.id, `sub-agent: ${o.name}`);
128
142
  }
129
- C(null);
143
+ w(null);
130
144
  },
131
145
  [
132
- p,
146
+ m,
133
147
  E,
134
- f,
148
+ g,
135
149
  l,
136
150
  t.subagents,
137
151
  c
138
152
  ]
139
- ), m = t.tools.some(
153
+ ), f = t.tools.some(
140
154
  (e) => r.find((o) => o.tool_id === e)?.auth_required
141
- ), h = t.authentication?.enabled ?? !1, b = t.authentication?.type ?? "email_otp";
155
+ ), b = t.authentication?.enabled ?? !1, y = t.authentication?.type ?? "email_otp";
142
156
  U(() => {
143
- m && !h && l({ authentication: { enabled: !0, type: b } });
144
- }, [m, h, b, l]);
145
- const [_, B] = k(null), F = s(
157
+ f && !b && l({ authentication: { enabled: !0, type: y } });
158
+ }, [f, b, y, l]);
159
+ const [O, B] = k(null), F = s(
146
160
  (e) => {
147
- c("tool", e), u("tool", e);
161
+ c("tool", e), p("tool", e);
148
162
  },
149
- [c, u]
163
+ [c, p]
150
164
  ), Ie = s(
151
165
  (e) => {
152
- if (r.find((i) => i.tool_id === e)?.auth_required && !h) {
166
+ if (r.find((n) => n.tool_id === e)?.auth_required && !b) {
153
167
  B(e);
154
168
  return;
155
169
  }
156
170
  F(e);
157
171
  },
158
- [r, h, F]
172
+ [r, b, F]
159
173
  ), Ce = t.tools.map((e) => {
160
- const o = r.find((i) => i.tool_id === e);
174
+ const o = r.find((n) => n.tool_id === e);
161
175
  return o ? {
162
176
  id: e,
163
177
  label: o.display_name,
164
- icon: ge(o.source ?? T.Manifest),
178
+ icon: ge(o.source ?? u.Manifest),
165
179
  authRequired: o.auth_required
166
180
  } : null;
167
181
  }).filter((e) => e !== null), we = (t.restApiTools ?? []).map(
168
182
  (e) => ({
169
183
  id: e.id,
170
184
  label: Ze(e),
171
- icon: ce[T.RestApi],
172
- onConfigure: () => H(e)
185
+ icon: ce[u.RestApi],
186
+ onConfigure: () => D(e)
173
187
  })
174
- ), Re = (t.configTools ?? []).map(
188
+ ), _e = (t.configTools ?? []).map(
175
189
  (e) => ({
176
190
  id: e.id,
177
191
  label: eo(e),
178
- icon: ce[e.tool_key === "send_slack_message" ? T.Slack : T.EmailHandover],
192
+ icon: ce[e.tool_key === "send_slack_message" ? u.Slack : u.EmailHandover],
179
193
  onConfigure: () => L(e.tool_key, e)
180
194
  })
181
- ), Oe = [
195
+ ), Re = [
182
196
  ...Ce,
183
197
  ...we,
184
- ...Re
185
- ], _e = io(
198
+ ..._e
199
+ ], Oe = io(
186
200
  M,
187
201
  K,
188
202
  j,
189
203
  $
190
204
  ), ke = r.map(pe), xe = (() => {
191
205
  const e = [], o = /* @__PURE__ */ new Map();
192
- return r.forEach((i) => {
193
- const y = i.source ?? T.Manifest;
194
- o.has(y) || (o.set(y, []), e.push(y)), o.get(y)?.push(pe(i));
195
- }), e.map((i) => ({
196
- source: i,
197
- label: oo(i),
198
- options: o.get(i) ?? [],
206
+ return r.forEach((n) => {
207
+ const S = n.source ?? u.Manifest;
208
+ o.has(S) || (o.set(S, []), e.push(S)), o.get(S)?.push(pe(n));
209
+ }), e.map((n) => ({
210
+ source: n,
211
+ label: oo(n),
212
+ options: o.get(n) ?? [],
199
213
  // Not connected → the source button opens the connect flow instead of
200
214
  // its tool list (see SelectableListSection / onConnectIntegration).
201
- connected: j?.[i],
202
- onConnect: () => $?.(i)
215
+ connected: j?.[n],
216
+ onConnect: () => $?.(n)
203
217
  }));
204
218
  })(), Me = t.subagents.map((e) => {
205
- const o = O.get(e);
219
+ const o = A.get(e);
206
220
  return o ? { id: e, label: o.name } : null;
207
221
  }).filter((e) => e !== null), Ee = Q.map((e) => ({
208
222
  label: e.name,
@@ -214,33 +228,33 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
214
228
  [],
215
229
  Q,
216
230
  X
217
- ), De = x.map((e) => ({
231
+ ), He = x.map((e) => ({
218
232
  label: e.label,
219
233
  value: e.value,
220
234
  selected: e.value === t.model
221
- })), G = x.find((e) => e.value === t.model), Y = a?.kind === "config" && a.toolKey ? M?.[a.toolKey] : void 0, Z = /* @__PURE__ */ n(
235
+ })), G = x.find((e) => e.value === t.model), Y = a?.kind === "config" && a.toolKey ? M?.[a.toolKey] : void 0, Z = /* @__PURE__ */ i(
222
236
  so,
223
237
  {
224
238
  "data-test": "agent-auth-toggle",
225
- value: h || m,
226
- disabled: m,
239
+ value: b || f,
240
+ disabled: f,
227
241
  onValueChange: async (e) => {
228
- l({ authentication: { enabled: e, type: b } });
242
+ l({ authentication: { enabled: e, type: y } });
229
243
  }
230
244
  }
231
- ), He = m ? /* @__PURE__ */ n(
245
+ ), De = f ? /* @__PURE__ */ i(
232
246
  ao,
233
247
  {
234
248
  body: "Remove tools that requires customer verification to change this setting.",
235
249
  placement: "bottom",
236
- children: /* @__PURE__ */ n("span", { style: { display: "flex" }, children: Z })
250
+ children: /* @__PURE__ */ i("span", { style: { display: "flex" }, children: Z })
237
251
  }
238
252
  ) : Z;
239
253
  return /* @__PURE__ */ d(qe, { children: [
240
- /* @__PURE__ */ n(je, { title: me.title, helper: me.helper }),
254
+ /* @__PURE__ */ i(je, { title: me.title, helper: me.helper }),
241
255
  /* @__PURE__ */ d(Be, { $grow: !0, children: [
242
256
  /* @__PURE__ */ d(ne, { children: [
243
- /* @__PURE__ */ n(
257
+ /* @__PURE__ */ i(
244
258
  le,
245
259
  {
246
260
  fieldKey: "instructions",
@@ -251,7 +265,7 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
251
265
  minHeight: "200px"
252
266
  }
253
267
  ),
254
- /* @__PURE__ */ n(
268
+ /* @__PURE__ */ i(
255
269
  le,
256
270
  {
257
271
  fieldKey: "guardrail",
@@ -263,26 +277,26 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
263
277
  }
264
278
  )
265
279
  ] }),
266
- /* @__PURE__ */ n(Fe, {}),
280
+ /* @__PURE__ */ i(Fe, {}),
267
281
  /* @__PURE__ */ d(ne, { children: [
268
- /* @__PURE__ */ n(
282
+ /* @__PURE__ */ i(
269
283
  ae,
270
284
  {
271
285
  title: "Tools",
272
286
  helper: "Actions this agent can take while responding.",
273
287
  dataTestPrefix: "agent-tools",
274
- items: Oe,
288
+ items: Re,
275
289
  addableOptions: ke,
276
290
  sourceGroups: xe,
277
291
  mentionItems: Ne,
278
- actionSources: _e,
292
+ actionSources: Oe,
279
293
  emptyText: "No tools added yet.",
280
294
  onAdd: Ie,
281
295
  onRemove: (e) => z("tool", e),
282
296
  confirmDelete: { noun: "tool" }
283
297
  }
284
298
  ),
285
- /* @__PURE__ */ n(
299
+ /* @__PURE__ */ i(
286
300
  ae,
287
301
  {
288
302
  title: "Sub-agents",
@@ -293,26 +307,26 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
293
307
  mentionItems: Pe,
294
308
  emptyText: "No sub-agents added yet.",
295
309
  onAdd: (e) => {
296
- c("subagent", e), u("subagent", e);
310
+ c("subagent", e), p("subagent", e);
297
311
  },
298
312
  onRemove: (e) => z("subagent", e),
299
313
  confirmDelete: { noun: "sub-agent" },
300
- onConfigure: I ? ve : void 0,
301
- createOption: f ? { label: "Create new", onSelect: q } : void 0
314
+ onConfigure: C ? ve : void 0,
315
+ createOption: g ? { label: "Create new", onSelect: q } : void 0
302
316
  }
303
317
  ),
304
318
  /* @__PURE__ */ d(ie, { children: [
305
319
  /* @__PURE__ */ d(Ge, { children: [
306
320
  /* @__PURE__ */ d("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
307
- /* @__PURE__ */ n(lo, { size: 20 }),
308
- /* @__PURE__ */ n(oe, { color: A.content.primary, children: "Require customer verification" })
321
+ /* @__PURE__ */ i(lo, { size: 20 }),
322
+ /* @__PURE__ */ i(oe, { color: I.content.primary, children: "Require customer verification" })
309
323
  ] }),
310
- He
324
+ De
311
325
  ] }),
312
- /* @__PURE__ */ n(Ke, { color: A.content.secondary, children: m ? "Required — this agent uses a tool that accesses customer order details." : "Customers must verify their identity before this agent responds." }),
313
- (h || m) && /* @__PURE__ */ d(Le, { children: [
314
- /* @__PURE__ */ n(te, { color: A.content.primary, children: "Select verification method" }),
315
- /* @__PURE__ */ n(
326
+ /* @__PURE__ */ i(Ke, { color: I.content.secondary, children: f ? "Required — this agent uses a tool that accesses customer order details." : "Customers must verify their identity before this agent responds." }),
327
+ (b || f) && /* @__PURE__ */ d(Le, { children: [
328
+ /* @__PURE__ */ i(te, { color: I.content.primary, children: "Select verification method" }),
329
+ /* @__PURE__ */ i(
316
330
  de,
317
331
  {
318
332
  "data-test": "agent-auth-method",
@@ -322,10 +336,10 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
322
336
  placeHolder: "Select verification method",
323
337
  options: W.map((e) => ({
324
338
  ...e,
325
- selected: e.value === b
339
+ selected: e.value === y
326
340
  })),
327
341
  defaultOptions: [
328
- W.find((e) => e.value === b) ?? W[0]
342
+ W.find((e) => e.value === y) ?? W[0]
329
343
  ],
330
344
  onSelect: (e) => {
331
345
  const o = ue(e);
@@ -341,9 +355,9 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
341
355
  ] })
342
356
  ] }),
343
357
  x.length > 0 && /* @__PURE__ */ d(ie, { children: [
344
- /* @__PURE__ */ n(oe, { color: A.content.primary, children: "Advanced settings" }),
345
- /* @__PURE__ */ n(te, { color: A.content.primary, children: "Select AI model" }),
346
- /* @__PURE__ */ n(
358
+ /* @__PURE__ */ i(oe, { color: I.content.primary, children: "Advanced settings" }),
359
+ /* @__PURE__ */ i(te, { color: I.content.primary, children: "Select AI model" }),
360
+ /* @__PURE__ */ i(
347
361
  de,
348
362
  {
349
363
  "data-test": "agent-model",
@@ -351,7 +365,7 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
351
365
  width: "100%",
352
366
  dropdownWidth: "328px",
353
367
  placeHolder: "Select model",
354
- options: De,
368
+ options: He,
355
369
  defaultOptions: G ? [
356
370
  {
357
371
  label: G.label,
@@ -360,42 +374,43 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
360
374
  ] : void 0,
361
375
  onSelect: (e) => {
362
376
  const o = ue(e);
363
- o && S("model", o);
377
+ o && T("model", o);
364
378
  }
365
379
  }
366
380
  )
367
381
  ] })
368
382
  ] })
369
383
  ] }),
370
- p && /* @__PURE__ */ n(
384
+ m && /* @__PURE__ */ i(
371
385
  We,
372
386
  {
373
- title: p.title,
374
- initial: p.initial,
387
+ title: m.title,
388
+ initial: m.initial,
389
+ existingNames: t.subagents.filter((e) => e !== m.editingId).map((e) => A.get(e)?.name).filter((e) => !!e),
375
390
  availableTools: r,
376
391
  configToolTemplates: M,
377
392
  appLabel: re(V),
378
393
  charLimits: v,
379
394
  onImprove: be,
380
395
  onImproveToolInstructions: N,
381
- onClose: () => C(null),
396
+ onClose: () => w(null),
382
397
  onSave: Ae
383
398
  },
384
- p.key
399
+ m.key
385
400
  ),
386
- a?.kind === "restapi" && /* @__PURE__ */ n(
401
+ a?.kind === "restapi" && /* @__PURE__ */ i(
387
402
  Ve,
388
403
  {
389
404
  initial: a.initialRest,
390
405
  charLimits: v,
391
406
  existingNames: (t.restApiTools ?? []).filter((e) => e.id !== a.initialRest?.id).map((e) => e.name),
392
407
  onImprove: N,
393
- onClose: () => g(null),
408
+ onClose: () => h(null),
394
409
  onSave: ye
395
410
  },
396
411
  a.key
397
412
  ),
398
- a?.kind === "config" && a.toolKey && Y && /* @__PURE__ */ n(
413
+ a?.kind === "config" && a.toolKey && Y && /* @__PURE__ */ i(
399
414
  Ue,
400
415
  {
401
416
  toolKey: a.toolKey,
@@ -403,19 +418,19 @@ const ro = (t) => no(ge(t)) ?? void 0, pe = (t) => ({
403
418
  initial: a.initialConfig,
404
419
  charLimits: v,
405
420
  onImprove: N,
406
- onClose: () => g(null),
407
- onSave: Te
421
+ onClose: () => h(null),
422
+ onSave: Se
408
423
  },
409
424
  a.key
410
425
  ),
411
- /* @__PURE__ */ n(
426
+ /* @__PURE__ */ i(
412
427
  ze,
413
428
  {
414
- open: _ !== null,
415
- toolLabel: r.find((e) => e.tool_id === _)?.display_name ?? "This tool",
429
+ open: O !== null,
430
+ toolLabel: r.find((e) => e.tool_id === O)?.display_name ?? "This tool",
416
431
  onCancel: () => B(null),
417
432
  onConfirm: () => {
418
- l({ authentication: { enabled: !0, type: b } }), _ && F(_), B(null);
433
+ l({ authentication: { enabled: !0, type: y } }), O && F(O), B(null);
419
434
  }
420
435
  }
421
436
  )