@bikdotai/bik-component-library 0.0.821-beta.12 → 0.0.821-beta.13

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 (65) hide show
  1. package/dist/cjs/assets/icons/Shopify.svg.js +2 -0
  2. package/dist/cjs/assets/icons/Shopify.svg.js.map +1 -0
  3. package/dist/cjs/components/agent-builder/AgentBuilder.js +1 -1
  4. package/dist/cjs/components/agent-builder/AgentBuilder.js.map +1 -1
  5. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js +57 -23
  6. package/dist/cjs/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  7. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js +1 -1
  8. package/dist/cjs/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  9. package/dist/cjs/components/agent-builder/components/GoLiveModal.js.map +1 -1
  10. package/dist/cjs/components/agent-builder/components/MentionEditor.js +1 -1
  11. package/dist/cjs/components/agent-builder/components/MentionEditor.js.map +1 -1
  12. package/dist/cjs/components/agent-builder/components/MentionField.js +1 -1
  13. package/dist/cjs/components/agent-builder/components/MentionField.js.map +1 -1
  14. package/dist/cjs/components/agent-builder/components/MentionPicker.js +37 -6
  15. package/dist/cjs/components/agent-builder/components/MentionPicker.js.map +1 -1
  16. package/dist/cjs/components/agent-builder/components/SelectableListSection.js +1 -1
  17. package/dist/cjs/components/agent-builder/components/SelectableListSection.js.map +1 -1
  18. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js +1 -1
  19. package/dist/cjs/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  20. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js +1 -1
  21. package/dist/cjs/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  22. package/dist/cjs/components/agent-builder/utils/sourceIcons.js +2 -0
  23. package/dist/cjs/components/agent-builder/utils/sourceIcons.js.map +1 -0
  24. package/dist/cjs/editor/BikEditor.types.js.map +1 -1
  25. package/dist/cjs/editor/extensions/mention/MentionDropdown.js +1 -1
  26. package/dist/cjs/editor/extensions/mention/MentionDropdown.js.map +1 -1
  27. package/dist/cjs/editor/extensions/mention/MentionExtension.js +1 -1
  28. package/dist/cjs/editor/extensions/mention/MentionExtension.js.map +1 -1
  29. package/dist/esm/assets/icons/Shopify.svg.js +6 -0
  30. package/dist/esm/assets/icons/Shopify.svg.js.map +1 -0
  31. package/dist/esm/components/agent-builder/AgentBuilder.js +47 -47
  32. package/dist/esm/components/agent-builder/AgentBuilder.js.map +1 -1
  33. package/dist/esm/components/agent-builder/AgentBuilder.styled.d.ts +6 -0
  34. package/dist/esm/components/agent-builder/AgentBuilder.styled.js +82 -42
  35. package/dist/esm/components/agent-builder/AgentBuilder.styled.js.map +1 -1
  36. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js +83 -75
  37. package/dist/esm/components/agent-builder/components/CreateSubAgentPanel.js.map +1 -1
  38. package/dist/esm/components/agent-builder/components/GoLiveModal.js.map +1 -1
  39. package/dist/esm/components/agent-builder/components/MentionEditor.d.ts +6 -0
  40. package/dist/esm/components/agent-builder/components/MentionEditor.js +31 -30
  41. package/dist/esm/components/agent-builder/components/MentionEditor.js.map +1 -1
  42. package/dist/esm/components/agent-builder/components/MentionField.js +40 -37
  43. package/dist/esm/components/agent-builder/components/MentionField.js.map +1 -1
  44. package/dist/esm/components/agent-builder/components/MentionPicker.d.ts +6 -1
  45. package/dist/esm/components/agent-builder/components/MentionPicker.js +202 -101
  46. package/dist/esm/components/agent-builder/components/MentionPicker.js.map +1 -1
  47. package/dist/esm/components/agent-builder/components/SelectableListSection.d.ts +18 -2
  48. package/dist/esm/components/agent-builder/components/SelectableListSection.js +159 -91
  49. package/dist/esm/components/agent-builder/components/SelectableListSection.js.map +1 -1
  50. package/dist/esm/components/agent-builder/context/AgentBuilderContext.d.ts +7 -0
  51. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js +108 -100
  52. package/dist/esm/components/agent-builder/context/AgentBuilderContext.js.map +1 -1
  53. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js +132 -107
  54. package/dist/esm/components/agent-builder/steps/Step3HowItResponds.js.map +1 -1
  55. package/dist/esm/components/agent-builder/utils/sourceIcons.d.ts +10 -0
  56. package/dist/esm/components/agent-builder/utils/sourceIcons.js +10 -0
  57. package/dist/esm/components/agent-builder/utils/sourceIcons.js.map +1 -0
  58. package/dist/esm/editor/BikEditor.types.d.ts +7 -0
  59. package/dist/esm/editor/BikEditor.types.js.map +1 -1
  60. package/dist/esm/editor/extensions/mention/MentionDropdown.d.ts +2 -0
  61. package/dist/esm/editor/extensions/mention/MentionDropdown.js +21 -20
  62. package/dist/esm/editor/extensions/mention/MentionDropdown.js.map +1 -1
  63. package/dist/esm/editor/extensions/mention/MentionExtension.js +66 -55
  64. package/dist/esm/editor/extensions/mention/MentionExtension.js.map +1 -1
  65. 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\tIntentOption,\n\tModelOption,\n\tStepKey,\n\tStepValidation,\n\tSubAgentDraft,\n\tSubAgentRef,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport { getStepIndex, STEP_KEYS } from '../constants/steps';\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/** 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/** Host application context (e.g. MANIFEST) — drives tool-chip labelling. */\n\tapplicationType?: ApplicationType;\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/** 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}\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 = (value: AgentValue): 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 <= AGENT_CHAR_LIMITS.name &&\n\t\t\tvalue.description.length <= AGENT_CHAR_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\tvalidation?: Partial<StepValidation>;\n\tapplicationType?: ApplicationType;\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\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\tvalidation: validationOverride,\n\tapplicationType,\n\tdisableStepNavigation = true,\n\tonCreateSubAgent,\n\tonFetchSubAgent,\n\tonUpdateSubAgent,\n\tonImproveSubAgent,\n\tchildren,\n}) => {\n\tconst [internalStep, setInternalStep] = useState<StepKey>('about');\n\tconst activeStep = controlledStep ?? internalStep;\n\tconst activeIndex = getStepIndex(activeStep);\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\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\tconst goToStep = useCallback(\n\t\t(step: StepKey) => {\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],\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 removeReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tconst token =\n\t\t\t\tkind === 'tool'\n\t\t\t\t\t? (() => {\n\t\t\t\t\t\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\t\t\t\t\t\treturn tool ? `{{tool:${tool.function_key}}}` : null;\n\t\t\t\t\t })()\n\t\t\t\t\t: `{{subagent:${id}}}`;\n\t\t\tconst strip = (text: string) =>\n\t\t\t\ttoken ? text.split(token).join('') : text;\n\n\t\t\t// Snapshot the four fields a removal touches, for undo.\n\t\t\tundoSnapshotRef.current = {\n\t\t\t\ttools: value.tools,\n\t\t\t\tsubagents: value.subagents,\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? { tools: value.tools.filter((t) => t !== id) }\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 ?? '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 validation: StepValidation = useMemo(\n\t\t() => ({ ...deriveValidation(value), ...validationOverride }),\n\t\t[value, validationOverride],\n\t);\n\n\tconst ctx = useMemo<AgentBuilderContextShape>(\n\t\t() => ({\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\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\tapplicationType,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t}),\n\t\t[\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\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\tapplicationType,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\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","triggerValid","AGENT_CHAR_LIMITS","AgentBuilderProvider","onChange","controlledStep","onStepChange","availableTools","availableSubAgents","availableIntents","availableModels","validationOverride","applicationType","disableStepNavigation","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","children","internalStep","setInternalStep","useState","activeStep","activeIndex","getStepIndex","mentionResetKey","setMentionResetKey","mentionInsertersRef","useRef","lastFocusedFieldRef","registerMentionField","useCallback","fieldKey","fn","notifyMentionFocus","insertMention","kind","id","label","inserters","undoToast","setUndoToast","undoSnapshotRef","undoIdRef","goToStep","step","goNext","next","STEP_KEYS","goPrev","prev","patch","partial","updateField","key","val","removeReference","token","tool","t","strip","text","s","k","undoRemoval","dismissUndo","validation","useMemo"],"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\tIntentOption,\n\tModelOption,\n\tStepKey,\n\tStepValidation,\n\tSubAgentDraft,\n\tSubAgentRef,\n} from '../AgentBuilder.model';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport { getStepIndex, STEP_KEYS } from '../constants/steps';\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/** 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/** Host application context (e.g. MANIFEST) — drives tool-chip labelling. */\n\tapplicationType?: ApplicationType;\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/** 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}\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 = (value: AgentValue): 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 <= AGENT_CHAR_LIMITS.name &&\n\t\t\tvalue.description.length <= AGENT_CHAR_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\tvalidation?: Partial<StepValidation>;\n\tapplicationType?: ApplicationType;\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\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\tvalidation: validationOverride,\n\tapplicationType,\n\tdisableStepNavigation = true,\n\tonCreateSubAgent,\n\tonFetchSubAgent,\n\tonUpdateSubAgent,\n\tonImproveSubAgent,\n\tchildren,\n}) => {\n\tconst [internalStep, setInternalStep] = useState<StepKey>('about');\n\tconst activeStep = controlledStep ?? internalStep;\n\tconst activeIndex = getStepIndex(activeStep);\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\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\tconst goToStep = useCallback(\n\t\t(step: StepKey) => {\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],\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 removeReference = useCallback(\n\t\t(kind: 'tool' | 'subagent', id: string) => {\n\t\t\tconst token =\n\t\t\t\tkind === 'tool'\n\t\t\t\t\t? (() => {\n\t\t\t\t\t\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\t\t\t\t\t\treturn tool ? `{{tool:${tool.function_key}}}` : null;\n\t\t\t\t\t })()\n\t\t\t\t\t: `{{subagent:${id}}}`;\n\t\t\tconst strip = (text: string) =>\n\t\t\t\ttoken ? text.split(token).join('') : text;\n\n\t\t\t// Snapshot the four fields a removal touches, for undo.\n\t\t\tundoSnapshotRef.current = {\n\t\t\t\ttools: value.tools,\n\t\t\t\tsubagents: value.subagents,\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? { tools: value.tools.filter((t) => t !== id) }\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 ?? '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 validation: StepValidation = useMemo(\n\t\t() => ({ ...deriveValidation(value), ...validationOverride }),\n\t\t[value, validationOverride],\n\t);\n\n\tconst ctx = useMemo<AgentBuilderContextShape>(\n\t\t() => ({\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\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\tapplicationType,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\n\t\t}),\n\t\t[\n\t\t\tvalue,\n\t\t\tpatch,\n\t\t\tupdateField,\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\tapplicationType,\n\t\t\tdisableStepNavigation,\n\t\t\tonCreateSubAgent,\n\t\t\tregisterSubAgentCreator,\n\t\t\trequestCreateSubAgent,\n\t\t\tonFetchSubAgent,\n\t\t\tonUpdateSubAgent,\n\t\t\tonImproveSubAgent,\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","triggerValid","AGENT_CHAR_LIMITS","AgentBuilderProvider","onChange","controlledStep","onStepChange","availableTools","availableSubAgents","availableIntents","availableModels","validationOverride","applicationType","disableStepNavigation","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","children","internalStep","setInternalStep","useState","activeStep","activeIndex","getStepIndex","mentionResetKey","setMentionResetKey","mentionInsertersRef","useRef","lastFocusedFieldRef","registerMentionField","useCallback","fieldKey","fn","notifyMentionFocus","subAgentCreatorRef","registerSubAgentCreator","requestCreateSubAgent","insertMention","kind","id","label","inserters","undoToast","setUndoToast","undoSnapshotRef","undoIdRef","goToStep","step","goNext","next","STEP_KEYS","goPrev","prev","patch","partial","updateField","key","val","removeReference","token","tool","t","strip","text","s","k","undoRemoval","dismissUndo","validation","useMemo"],"mappings":"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"}
@@ -1,193 +1,218 @@
1
- import { jsxs as s, jsx as o } from "react/jsx-runtime";
2
- import { useState as A, useRef as z, useCallback as S } from "react";
3
- import { TitleSmall as T } from "../../TypographyStyle.js";
4
- import { COLORS as I } from "../../../constants/Theme.js";
5
- import { Step3Grid as U, Step3Main as W, Step3Side as $, SideSection as q } from "../AgentBuilder.styled.js";
6
- import { CreateSubAgentPanel as J } from "../components/CreateSubAgentPanel.js";
1
+ import { jsxs as c, jsx as l } from "react/jsx-runtime";
2
+ import q, { useState as C, useRef as J, useCallback as A, useEffect as Q } from "react";
3
+ import { TitleSmall as w } from "../../TypographyStyle.js";
4
+ import { COLORS as O } from "../../../constants/Theme.js";
5
+ import { Step3Grid as V, Step3Main as X, Step3Side as Y, SideSection as Z } from "../AgentBuilder.styled.js";
6
+ import { CreateSubAgentPanel as ee } from "../components/CreateSubAgentPanel.js";
7
7
  import { MentionField as x } from "../components/MentionField.js";
8
- import { SelectableListSection as C } from "../components/SelectableListSection.js";
9
- import { StepSectionHeader as Q } from "../components/StepSectionHeader.js";
10
- import { AGENT_CHAR_LIMITS as w } from "../constants/charLimits.js";
11
- import { STEP_DEFINITIONS as V } from "../constants/steps.js";
12
- import { useAgentBuilderContext as X } from "../context/AgentBuilderContext.js";
13
- import { appTypeLabel as Y } from "../utils/mentionSerialization.js";
14
- import { Dropdown as Z } from "../../dropdown/Dropdown.js";
15
- const O = V[2], ge = () => {
8
+ import { SelectableListSection as E } from "../components/SelectableListSection.js";
9
+ import { StepSectionHeader as te } from "../components/StepSectionHeader.js";
10
+ import { AGENT_CHAR_LIMITS as R } from "../constants/charLimits.js";
11
+ import { STEP_DEFINITIONS as ne } from "../constants/steps.js";
12
+ import { useAgentBuilderContext as oe } from "../context/AgentBuilderContext.js";
13
+ import { toolSourceLabel as ae, appTypeLabel as le } from "../utils/mentionSerialization.js";
14
+ import { SOURCE_ICONS as L } from "../utils/sourceIcons.js";
15
+ import { Dropdown as se } from "../../dropdown/Dropdown.js";
16
+ const ie = (n) => {
17
+ const a = L[n];
18
+ return a ? q.createElement(a.Icon, { width: a.w, height: a.h }) : void 0;
19
+ }, _ = (n) => ({
20
+ label: n.display_name,
21
+ value: n.tool_id,
22
+ leadingIcon: ie(n.source ?? "manifest")
23
+ }), k = ne[2], Te = () => {
16
24
  const {
17
25
  value: n,
18
- patch: i,
19
- updateField: k,
20
- removeReference: v,
21
- availableTools: g,
22
- availableSubAgents: R,
23
- availableModels: b,
24
- applicationType: E,
25
- insertMention: r,
26
- onCreateSubAgent: d,
27
- onFetchSubAgent: c,
28
- onUpdateSubAgent: f,
29
- onImproveSubAgent: L
30
- } = X(), [l, u] = A(null), p = z(0), [M, y] = A([]), m = /* @__PURE__ */ new Map();
31
- R.forEach((e) => m.set(e.id, e)), M.forEach((e) => m.set(e.id, e));
32
- const P = Array.from(m.values()), _ = S(() => {
33
- p.current += 1, u({ key: p.current, title: "Create sub-agent" });
34
- }, []), H = S(
26
+ patch: a,
27
+ updateField: M,
28
+ removeReference: I,
29
+ availableTools: u,
30
+ availableSubAgents: N,
31
+ availableModels: f,
32
+ applicationType: P,
33
+ insertMention: d,
34
+ onCreateSubAgent: i,
35
+ onFetchSubAgent: p,
36
+ onUpdateSubAgent: h,
37
+ onImproveSubAgent: H,
38
+ registerSubAgentCreator: S
39
+ } = oe(), [s, m] = C(null), g = J(0), [G, T] = C([]), b = /* @__PURE__ */ new Map();
40
+ N.forEach((e) => b.set(e.id, e)), G.forEach((e) => b.set(e.id, e));
41
+ const F = Array.from(b.values()), v = A(() => {
42
+ g.current += 1, m({ key: g.current, title: "Create sub-agent" });
43
+ }, []);
44
+ Q(() => {
45
+ if (i)
46
+ return S(v), () => S(null);
47
+ }, [S, v, i]);
48
+ const K = A(
35
49
  async (e) => {
36
- if (!c)
50
+ if (!p)
37
51
  return;
38
- const t = await c(e);
39
- p.current += 1, u({
40
- key: p.current,
52
+ const t = await p(e);
53
+ g.current += 1, m({
54
+ key: g.current,
41
55
  title: "Edit sub-agent",
42
56
  editingId: e,
43
57
  initial: t
44
58
  });
45
59
  },
46
- [c]
47
- ), N = S(
60
+ [p]
61
+ ), j = A(
48
62
  async (e) => {
49
- if (l?.editingId) {
50
- if (f) {
51
- const t = await f(l.editingId, e);
52
- y((a) => [
53
- ...a.filter((D) => D.id !== t.id),
63
+ if (s?.editingId) {
64
+ if (h) {
65
+ const t = await h(s.editingId, e);
66
+ T((o) => [
67
+ ...o.filter((r) => r.id !== t.id),
54
68
  t
55
69
  ]);
56
70
  }
57
- } else if (d) {
58
- const t = await d(e);
59
- y((a) => [...a, t]), i({ subagents: [...n.subagents, t.id] }), r("subagent", t.id, `sub-agent: ${t.name}`);
71
+ } else if (i) {
72
+ const t = await i(e);
73
+ T((o) => [...o, t]), a({ subagents: [...n.subagents, t.id] }), d("subagent", t.id, `sub-agent: ${t.name}`);
60
74
  }
61
- u(null);
75
+ m(null);
62
76
  },
63
77
  [
64
- l,
65
- f,
66
- d,
78
+ s,
79
+ h,
67
80
  i,
81
+ a,
68
82
  n.subagents,
69
- r
83
+ d
70
84
  ]
71
- ), F = n.tools.map((e) => {
72
- const t = g.find((a) => a.tool_id === e);
73
- return t ? { id: e, label: t.display_name } : null;
74
- }).filter((e) => e !== null), G = g.map((e) => ({
75
- label: e.display_name,
76
- value: e.tool_id,
77
- subText: e.description
78
- })), K = n.subagents.map((e) => {
79
- const t = m.get(e);
85
+ ), B = n.tools.map((e) => {
86
+ const t = u.find((o) => o.tool_id === e);
87
+ return t ? {
88
+ id: e,
89
+ label: t.display_name,
90
+ icon: L[t.source ?? "manifest"]
91
+ } : null;
92
+ }).filter((e) => e !== null), D = u.map(_), U = (() => {
93
+ const e = [], t = /* @__PURE__ */ new Map();
94
+ return u.forEach((o) => {
95
+ const r = o.source ?? "manifest";
96
+ t.has(r) || (t.set(r, []), e.push(r)), t.get(r)?.push(_(o));
97
+ }), e.map((o) => ({
98
+ source: o,
99
+ label: ae(o),
100
+ options: t.get(o) ?? []
101
+ }));
102
+ })(), z = n.subagents.map((e) => {
103
+ const t = b.get(e);
80
104
  return t ? { id: e, label: t.name } : null;
81
- }).filter((e) => e !== null), j = P.map((e) => ({
105
+ }).filter((e) => e !== null), W = F.map((e) => ({
82
106
  label: e.name,
83
107
  value: e.id
84
- })), B = b.map((e) => ({
108
+ })), $ = f.map((e) => ({
85
109
  label: e.label,
86
110
  value: e.value,
87
111
  selected: e.value === n.model
88
- })), h = b.find((e) => e.value === n.model);
89
- return /* @__PURE__ */ s("div", { className: "bik-agent-step bik-agent-step--response", children: [
90
- /* @__PURE__ */ o(Q, { title: O.title, helper: O.helper }),
91
- /* @__PURE__ */ s(U, { children: [
92
- /* @__PURE__ */ s(W, { children: [
93
- /* @__PURE__ */ o(
112
+ })), y = f.find((e) => e.value === n.model);
113
+ return /* @__PURE__ */ c("div", { className: "bik-agent-step bik-agent-step--response", children: [
114
+ /* @__PURE__ */ l(te, { title: k.title, helper: k.helper }),
115
+ /* @__PURE__ */ c(V, { children: [
116
+ /* @__PURE__ */ c(X, { children: [
117
+ /* @__PURE__ */ l(
94
118
  x,
95
119
  {
96
120
  fieldKey: "instructions",
97
121
  "data-test": "agent-instructions",
98
122
  label: "Instructions",
99
- maxLength: w.instructions,
123
+ maxLength: R.instructions,
100
124
  placeholder: "Write what this agent should do. Type @ to reference a tool or sub-agent.",
101
125
  minHeight: "200px"
102
126
  }
103
127
  ),
104
- /* @__PURE__ */ o(
128
+ /* @__PURE__ */ l(
105
129
  x,
106
130
  {
107
131
  fieldKey: "guardrail",
108
132
  "data-test": "agent-guardrail",
109
133
  label: "Guardrails",
110
- maxLength: w.guardrail,
134
+ maxLength: R.guardrail,
111
135
  placeholder: "Things this agent must never do. Type @ to reference a tool or sub-agent.",
112
136
  minHeight: "140px"
113
137
  }
114
138
  )
115
139
  ] }),
116
- /* @__PURE__ */ s($, { children: [
117
- /* @__PURE__ */ o(
118
- C,
140
+ /* @__PURE__ */ c(Y, { children: [
141
+ /* @__PURE__ */ l(
142
+ E,
119
143
  {
120
144
  title: "Tools",
121
145
  helper: "Actions this agent can take while responding.",
122
146
  dataTestPrefix: "agent-tools",
123
- items: F,
124
- addableOptions: G,
147
+ items: B,
148
+ addableOptions: D,
149
+ sourceGroups: U,
125
150
  emptyText: "No tools added yet.",
126
151
  onAdd: (e) => {
127
- r("tool", e), n.tools.includes(e) || i({ tools: [...n.tools, e] });
152
+ d("tool", e), n.tools.includes(e) || a({ tools: [...n.tools, e] });
128
153
  },
129
- onRemove: (e) => v("tool", e)
154
+ onRemove: (e) => I("tool", e)
130
155
  }
131
156
  ),
132
- /* @__PURE__ */ o(
133
- C,
157
+ /* @__PURE__ */ l(
158
+ E,
134
159
  {
135
160
  title: "Sub-agents",
136
161
  helper: "Other agents this agent can hand off the conversation to.",
137
162
  dataTestPrefix: "agent-subagents",
138
- items: K,
139
- addableOptions: j,
163
+ items: z,
164
+ addableOptions: W,
140
165
  emptyText: "No sub-agents added yet.",
141
166
  onAdd: (e) => {
142
- r("subagent", e), n.subagents.includes(e) || i({ subagents: [...n.subagents, e] });
167
+ d("subagent", e), n.subagents.includes(e) || a({ subagents: [...n.subagents, e] });
143
168
  },
144
- onRemove: (e) => v("subagent", e),
145
- onConfigure: c ? H : void 0,
146
- createOption: d ? { label: "Create new", onSelect: _ } : void 0
169
+ onRemove: (e) => I("subagent", e),
170
+ onConfigure: p ? K : void 0,
171
+ createOption: i ? { label: "Create new", onSelect: v } : void 0
147
172
  }
148
173
  ),
149
- b.length > 0 && /* @__PURE__ */ s(q, { children: [
150
- /* @__PURE__ */ o(T, { color: I.content.primary, children: "Advanced settings" }),
151
- /* @__PURE__ */ o(T, { color: I.content.secondary, children: "Select AI model" }),
152
- /* @__PURE__ */ o(
153
- Z,
174
+ f.length > 0 && /* @__PURE__ */ c(Z, { children: [
175
+ /* @__PURE__ */ l(w, { color: O.content.primary, children: "Advanced settings" }),
176
+ /* @__PURE__ */ l(w, { color: O.content.secondary, children: "Select AI model" }),
177
+ /* @__PURE__ */ l(
178
+ se,
154
179
  {
155
180
  "data-test": "agent-model",
156
181
  size: "small",
157
182
  width: "100%",
158
183
  placeHolder: "Select model",
159
- options: B,
160
- defaultOptions: h ? [
184
+ options: $,
185
+ defaultOptions: y ? [
161
186
  {
162
- label: h.label,
163
- value: h.value
187
+ label: y.label,
188
+ value: y.value
164
189
  }
165
190
  ] : void 0,
166
191
  onSelect: (e) => {
167
- const a = (Array.isArray(e) ? e[0] : e)?.value;
168
- a && k("model", a);
192
+ const o = (Array.isArray(e) ? e[0] : e)?.value;
193
+ o && M("model", o);
169
194
  }
170
195
  }
171
196
  )
172
197
  ] })
173
198
  ] })
174
199
  ] }),
175
- l && /* @__PURE__ */ o(
176
- J,
200
+ s && /* @__PURE__ */ l(
201
+ ee,
177
202
  {
178
- title: l.title,
179
- initial: l.initial,
180
- availableTools: g,
181
- appLabel: Y(E),
182
- onImprove: L,
183
- onClose: () => u(null),
184
- onSave: N
203
+ title: s.title,
204
+ initial: s.initial,
205
+ availableTools: u,
206
+ appLabel: le(P),
207
+ onImprove: H,
208
+ onClose: () => m(null),
209
+ onSave: j
185
210
  },
186
- l.key
211
+ s.key
187
212
  )
188
213
  ] });
189
214
  };
190
215
  export {
191
- ge as Step3HowItResponds
216
+ Te as Step3HowItResponds
192
217
  };
193
218
  //# sourceMappingURL=Step3HowItResponds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Step3HowItResponds.js","sources":["../../../../../src/components/agent-builder/steps/Step3HowItResponds.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport { Dropdown } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { SubAgentDraft, SubAgentRef } from '../AgentBuilder.model';\nimport {\n\tSideSection,\n\tStep3Grid,\n\tStep3Main,\n\tStep3Side,\n} from '../AgentBuilder.styled';\nimport { CreateSubAgentPanel } from '../components/CreateSubAgentPanel';\nimport { MentionField } from '../components/MentionField';\nimport {\n\tSelectableItem,\n\tSelectableListSection,\n} from '../components/SelectableListSection';\nimport { StepSectionHeader } from '../components/StepSectionHeader';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport { STEP_DEFINITIONS } from '../constants/steps';\nimport { useAgentBuilderContext } from '../context/AgentBuilderContext';\nimport { appTypeLabel } from '../utils/mentionSerialization';\n\nconst STEP = STEP_DEFINITIONS[2];\n\n/** Drawer state — null when closed; `key` remounts it fresh per open. */\ninterface SubAgentPanelState {\n\tkey: number;\n\ttitle: string;\n\teditingId?: string;\n\tinitial?: SubAgentDraft;\n}\n\nexport const Step3HowItResponds: React.FC = () => {\n\tconst {\n\t\tvalue,\n\t\tpatch,\n\t\tupdateField,\n\t\tremoveReference,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tavailableModels,\n\t\tapplicationType,\n\t\tinsertMention,\n\t\tonCreateSubAgent,\n\t\tonFetchSubAgent,\n\t\tonUpdateSubAgent,\n\t\tonImproveSubAgent,\n\t} = useAgentBuilderContext();\n\n\tconst [panel, setPanel] = useState<SubAgentPanelState | null>(null);\n\tconst panelKeyRef = useRef(0);\n\t// Sub-agents created / edited in this session, so a chip resolves (and reflects\n\t// a renamed sub-agent) before the consumer refreshes `availableSubAgents`.\n\tconst [createdSubAgents, setCreatedSubAgents] = useState<SubAgentRef[]>([]);\n\t// Created/edited refs take precedence over the consumer-supplied list.\n\tconst subAgentById = new Map<string, SubAgentRef>();\n\tavailableSubAgents.forEach((s) => subAgentById.set(s.id, s));\n\tcreatedSubAgents.forEach((s) => subAgentById.set(s.id, s));\n\tconst knownSubAgents = Array.from(subAgentById.values());\n\n\tconst openCreate = useCallback(() => {\n\t\tpanelKeyRef.current += 1;\n\t\tsetPanel({ key: panelKeyRef.current, title: 'Create sub-agent' });\n\t}, []);\n\n\tconst openConfigure = useCallback(\n\t\tasync (id: string) => {\n\t\t\tif (!onFetchSubAgent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst data = await onFetchSubAgent(id);\n\t\t\tpanelKeyRef.current += 1;\n\t\t\tsetPanel({\n\t\t\t\tkey: panelKeyRef.current,\n\t\t\t\ttitle: 'Edit sub-agent',\n\t\t\t\teditingId: id,\n\t\t\t\tinitial: data,\n\t\t\t});\n\t\t},\n\t\t[onFetchSubAgent],\n\t);\n\n\tconst handlePanelSave = useCallback(\n\t\tasync (draft: SubAgentDraft) => {\n\t\t\tif (panel?.editingId) {\n\t\t\t\tif (onUpdateSubAgent) {\n\t\t\t\t\tconst ref = await onUpdateSubAgent(panel.editingId, draft);\n\t\t\t\t\tsetCreatedSubAgents((prev) => [\n\t\t\t\t\t\t...prev.filter((s) => s.id !== ref.id),\n\t\t\t\t\t\tref,\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t} else if (onCreateSubAgent) {\n\t\t\t\tconst ref = await onCreateSubAgent(draft);\n\t\t\t\tsetCreatedSubAgents((prev) => [...prev, ref]);\n\t\t\t\tpatch({ subagents: [...value.subagents, ref.id] });\n\t\t\t\tinsertMention('subagent', ref.id, `sub-agent: ${ref.name}`);\n\t\t\t}\n\t\t\tsetPanel(null);\n\t\t},\n\t\t[\n\t\t\tpanel,\n\t\t\tonUpdateSubAgent,\n\t\t\tonCreateSubAgent,\n\t\t\tpatch,\n\t\t\tvalue.subagents,\n\t\t\tinsertMention,\n\t\t],\n\t);\n\n\tconst toolItems: SelectableItem[] = value.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 ? { id, label: tool.display_name } : null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\t// All tools are offered (even already-added ones) so a tool can be referenced\n\t// again in the text; the chip list below still shows each only once.\n\tconst toolOptions: SingleOption[] = availableTools.map((t) => ({\n\t\tlabel: t.display_name,\n\t\tvalue: t.tool_id,\n\t\tsubText: t.description,\n\t}));\n\n\tconst subAgentItems: SelectableItem[] = value.subagents\n\t\t.map((id): SelectableItem | null => {\n\t\t\tconst sub = subAgentById.get(id);\n\t\t\treturn sub ? { id, label: sub.name } : null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\tconst subAgentOptions: SingleOption[] = knownSubAgents.map((s) => ({\n\t\tlabel: s.name,\n\t\tvalue: s.id,\n\t}));\n\n\tconst modelOptions: SingleOption[] = availableModels.map((m) => ({\n\t\tlabel: m.label,\n\t\tvalue: m.value,\n\t\tselected: m.value === value.model,\n\t}));\n\tconst selectedModel = availableModels.find((m) => m.value === value.model);\n\n\treturn (\n\t\t<div className=\"bik-agent-step bik-agent-step--response\">\n\t\t\t<StepSectionHeader title={STEP.title} helper={STEP.helper} />\n\n\t\t\t<Step3Grid>\n\t\t\t\t<Step3Main>\n\t\t\t\t\t<MentionField\n\t\t\t\t\t\tfieldKey=\"instructions\"\n\t\t\t\t\t\tdata-test=\"agent-instructions\"\n\t\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\t\tmaxLength={AGENT_CHAR_LIMITS.instructions}\n\t\t\t\t\t\tplaceholder=\"Write what this agent should do. Type @ to reference a tool or sub-agent.\"\n\t\t\t\t\t\tminHeight=\"200px\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionField\n\t\t\t\t\t\tfieldKey=\"guardrail\"\n\t\t\t\t\t\tdata-test=\"agent-guardrail\"\n\t\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\t\tmaxLength={AGENT_CHAR_LIMITS.guardrail}\n\t\t\t\t\t\tplaceholder=\"Things this agent must never do. Type @ to reference a tool or sub-agent.\"\n\t\t\t\t\t\tminHeight=\"140px\"\n\t\t\t\t\t/>\n\t\t\t\t</Step3Main>\n\n\t\t\t\t<Step3Side>\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Tools\"\n\t\t\t\t\t\thelper=\"Actions this agent can take while responding.\"\n\t\t\t\t\t\tdataTestPrefix=\"agent-tools\"\n\t\t\t\t\t\titems={toolItems}\n\t\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\t// Always drop a chip at the cursor; keep the list deduped.\n\t\t\t\t\t\t\tinsertMention('tool', id);\n\t\t\t\t\t\t\tif (!value.tools.includes(id)) {\n\t\t\t\t\t\t\t\tpatch({ tools: [...value.tools, id] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={(id) => removeReference('tool', id)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Sub-agents\"\n\t\t\t\t\t\thelper=\"Other agents this agent can hand off the conversation to.\"\n\t\t\t\t\t\tdataTestPrefix=\"agent-subagents\"\n\t\t\t\t\t\titems={subAgentItems}\n\t\t\t\t\t\taddableOptions={subAgentOptions}\n\t\t\t\t\t\temptyText=\"No sub-agents added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\tinsertMention('subagent', id);\n\t\t\t\t\t\t\tif (!value.subagents.includes(id)) {\n\t\t\t\t\t\t\t\tpatch({ subagents: [...value.subagents, id] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={(id) => removeReference('subagent', id)}\n\t\t\t\t\t\tonConfigure={onFetchSubAgent ? openConfigure : undefined}\n\t\t\t\t\t\tcreateOption={\n\t\t\t\t\t\t\tonCreateSubAgent\n\t\t\t\t\t\t\t\t? { label: 'Create new', onSelect: openCreate }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{availableModels.length > 0 && (\n\t\t\t\t\t\t<SideSection>\n\t\t\t\t\t\t\t<TitleSmall color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\tAdvanced settings\n\t\t\t\t\t\t\t</TitleSmall>\n\t\t\t\t\t\t\t<TitleSmall color={COLORS.content.secondary}>\n\t\t\t\t\t\t\t\tSelect AI model\n\t\t\t\t\t\t\t</TitleSmall>\n\t\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\t\tdata-test=\"agent-model\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\tplaceHolder=\"Select model\"\n\t\t\t\t\t\t\t\toptions={modelOptions}\n\t\t\t\t\t\t\t\tdefaultOptions={\n\t\t\t\t\t\t\t\t\tselectedModel\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: selectedModel.label,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: selectedModel.value,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\t\tconst single = Array.isArray(opt) ? opt[0] : opt;\n\t\t\t\t\t\t\t\t\tconst v = (single as SingleOption)?.value;\n\t\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\t\tupdateField('model', v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</SideSection>\n\t\t\t\t\t)}\n\t\t\t\t</Step3Side>\n\t\t\t</Step3Grid>\n\n\t\t\t{panel && (\n\t\t\t\t<CreateSubAgentPanel\n\t\t\t\t\tkey={panel.key}\n\t\t\t\t\ttitle={panel.title}\n\t\t\t\t\tinitial={panel.initial}\n\t\t\t\t\tavailableTools={availableTools}\n\t\t\t\t\tappLabel={appTypeLabel(applicationType)}\n\t\t\t\t\tonImprove={onImproveSubAgent}\n\t\t\t\t\tonClose={() => setPanel(null)}\n\t\t\t\t\tonSave={handlePanelSave}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["STEP","STEP_DEFINITIONS","Step3HowItResponds","value","patch","updateField","removeReference","availableTools","availableSubAgents","availableModels","applicationType","insertMention","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","useAgentBuilderContext","panel","setPanel","useState","panelKeyRef","useRef","createdSubAgents","setCreatedSubAgents","subAgentById","s","knownSubAgents","openCreate","useCallback","openConfigure","id","data","handlePanelSave","draft","ref","prev","toolItems","tool","t","x","toolOptions","subAgentItems","sub","subAgentOptions","modelOptions","m","selectedModel","jsxs","jsx","StepSectionHeader","Step3Grid","Step3Main","MentionField","AGENT_CHAR_LIMITS","Step3Side","SelectableListSection","SideSection","TitleSmall","COLORS","Dropdown","opt","v","CreateSubAgentPanel","appTypeLabel"],"mappings":"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"}
1
+ {"version":3,"file":"Step3HowItResponds.js","sources":["../../../../../src/components/agent-builder/steps/Step3HowItResponds.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Dropdown } from '@src/components/dropdown';\nimport { SingleOption } from '@src/components/dropdown/type';\nimport { TitleSmall } from '@src/components/TypographyStyle';\nimport { COLORS } from '@src/constants/Theme';\nimport { AgentTool, SubAgentDraft, SubAgentRef } from '../AgentBuilder.model';\nimport {\n\tSideSection,\n\tStep3Grid,\n\tStep3Main,\n\tStep3Side,\n} from '../AgentBuilder.styled';\nimport { CreateSubAgentPanel } from '../components/CreateSubAgentPanel';\nimport { MentionField } from '../components/MentionField';\nimport {\n\tSelectableItem,\n\tSelectableListSection,\n\tSourceGroup,\n} from '../components/SelectableListSection';\nimport { StepSectionHeader } from '../components/StepSectionHeader';\nimport { AGENT_CHAR_LIMITS } from '../constants/charLimits';\nimport { STEP_DEFINITIONS } from '../constants/steps';\nimport { useAgentBuilderContext } from '../context/AgentBuilderContext';\nimport { appTypeLabel, toolSourceLabel } from '../utils/mentionSerialization';\nimport { SOURCE_ICONS } from '../utils/sourceIcons';\n\n/** Source brand glyph for a tool, as a dropdown leadingIcon element. */\nconst toolIconEl = (source: string): JSX.Element | undefined => {\n\tconst ic = SOURCE_ICONS[source];\n\treturn ic\n\t\t? React.createElement(ic.Icon, { width: ic.w, height: ic.h })\n\t\t: undefined;\n};\n\n/** Dropdown option for a tool: icon left of the name, no description. */\nconst toolOption = (t: AgentTool): SingleOption => ({\n\tlabel: t.display_name,\n\tvalue: t.tool_id,\n\tleadingIcon: toolIconEl(t.source ?? 'manifest'),\n});\n\nconst STEP = STEP_DEFINITIONS[2];\n\n/** Drawer state — null when closed; `key` remounts it fresh per open. */\ninterface SubAgentPanelState {\n\tkey: number;\n\ttitle: string;\n\teditingId?: string;\n\tinitial?: SubAgentDraft;\n}\n\nexport const Step3HowItResponds: React.FC = () => {\n\tconst {\n\t\tvalue,\n\t\tpatch,\n\t\tupdateField,\n\t\tremoveReference,\n\t\tavailableTools,\n\t\tavailableSubAgents,\n\t\tavailableModels,\n\t\tapplicationType,\n\t\tinsertMention,\n\t\tonCreateSubAgent,\n\t\tonFetchSubAgent,\n\t\tonUpdateSubAgent,\n\t\tonImproveSubAgent,\n\t\tregisterSubAgentCreator,\n\t} = useAgentBuilderContext();\n\n\tconst [panel, setPanel] = useState<SubAgentPanelState | null>(null);\n\tconst panelKeyRef = useRef(0);\n\t// Sub-agents created / edited in this session, so a chip resolves (and reflects\n\t// a renamed sub-agent) before the consumer refreshes `availableSubAgents`.\n\tconst [createdSubAgents, setCreatedSubAgents] = useState<SubAgentRef[]>([]);\n\t// Created/edited refs take precedence over the consumer-supplied list.\n\tconst subAgentById = new Map<string, SubAgentRef>();\n\tavailableSubAgents.forEach((s) => subAgentById.set(s.id, s));\n\tcreatedSubAgents.forEach((s) => subAgentById.set(s.id, s));\n\tconst knownSubAgents = Array.from(subAgentById.values());\n\n\tconst openCreate = useCallback(() => {\n\t\tpanelKeyRef.current += 1;\n\t\tsetPanel({ key: panelKeyRef.current, title: 'Create sub-agent' });\n\t}, []);\n\n\t// Let the `@` picker's \"Create new\" row open this step's drawer.\n\tuseEffect(() => {\n\t\tif (!onCreateSubAgent) {\n\t\t\treturn;\n\t\t}\n\t\tregisterSubAgentCreator(openCreate);\n\t\treturn () => registerSubAgentCreator(null);\n\t}, [registerSubAgentCreator, openCreate, onCreateSubAgent]);\n\n\tconst openConfigure = useCallback(\n\t\tasync (id: string) => {\n\t\t\tif (!onFetchSubAgent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst data = await onFetchSubAgent(id);\n\t\t\tpanelKeyRef.current += 1;\n\t\t\tsetPanel({\n\t\t\t\tkey: panelKeyRef.current,\n\t\t\t\ttitle: 'Edit sub-agent',\n\t\t\t\teditingId: id,\n\t\t\t\tinitial: data,\n\t\t\t});\n\t\t},\n\t\t[onFetchSubAgent],\n\t);\n\n\tconst handlePanelSave = useCallback(\n\t\tasync (draft: SubAgentDraft) => {\n\t\t\tif (panel?.editingId) {\n\t\t\t\tif (onUpdateSubAgent) {\n\t\t\t\t\tconst ref = await onUpdateSubAgent(panel.editingId, draft);\n\t\t\t\t\tsetCreatedSubAgents((prev) => [\n\t\t\t\t\t\t...prev.filter((s) => s.id !== ref.id),\n\t\t\t\t\t\tref,\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t} else if (onCreateSubAgent) {\n\t\t\t\tconst ref = await onCreateSubAgent(draft);\n\t\t\t\tsetCreatedSubAgents((prev) => [...prev, ref]);\n\t\t\t\tpatch({ subagents: [...value.subagents, ref.id] });\n\t\t\t\tinsertMention('subagent', ref.id, `sub-agent: ${ref.name}`);\n\t\t\t}\n\t\t\tsetPanel(null);\n\t\t},\n\t\t[\n\t\t\tpanel,\n\t\t\tonUpdateSubAgent,\n\t\t\tonCreateSubAgent,\n\t\t\tpatch,\n\t\t\tvalue.subagents,\n\t\t\tinsertMention,\n\t\t],\n\t);\n\n\tconst toolItems: SelectableItem[] = value.tools\n\t\t.map((id): SelectableItem | null => {\n\t\t\tconst tool = availableTools.find((t) => t.tool_id === id);\n\t\t\treturn tool\n\t\t\t\t? {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tlabel: tool.display_name,\n\t\t\t\t\t\ticon: SOURCE_ICONS[tool.source ?? 'manifest'],\n\t\t\t\t }\n\t\t\t\t: null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\t// All tools are offered (even already-added ones) so a tool can be referenced\n\t// again in the text; the chip list below still shows each only once.\n\tconst toolOptions: SingleOption[] = availableTools.map(toolOption);\n\n\t// Group tools by source (Manifest / Shopify / …) for the empty-state buttons.\n\tconst toolSourceGroups: SourceGroup[] = (() => {\n\t\tconst order: string[] = [];\n\t\tconst bySource = new Map<string, SingleOption[]>();\n\t\tavailableTools.forEach((t) => {\n\t\t\tconst src = t.source ?? 'manifest';\n\t\t\tif (!bySource.has(src)) {\n\t\t\t\tbySource.set(src, []);\n\t\t\t\torder.push(src);\n\t\t\t}\n\t\t\tbySource.get(src)?.push(toolOption(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 subAgentItems: SelectableItem[] = value.subagents\n\t\t.map((id): SelectableItem | null => {\n\t\t\tconst sub = subAgentById.get(id);\n\t\t\treturn sub ? { id, label: sub.name } : null;\n\t\t})\n\t\t.filter((x): x is SelectableItem => x !== null);\n\n\tconst subAgentOptions: SingleOption[] = knownSubAgents.map((s) => ({\n\t\tlabel: s.name,\n\t\tvalue: s.id,\n\t}));\n\n\tconst modelOptions: SingleOption[] = availableModels.map((m) => ({\n\t\tlabel: m.label,\n\t\tvalue: m.value,\n\t\tselected: m.value === value.model,\n\t}));\n\tconst selectedModel = availableModels.find((m) => m.value === value.model);\n\n\treturn (\n\t\t<div className=\"bik-agent-step bik-agent-step--response\">\n\t\t\t<StepSectionHeader title={STEP.title} helper={STEP.helper} />\n\n\t\t\t<Step3Grid>\n\t\t\t\t<Step3Main>\n\t\t\t\t\t<MentionField\n\t\t\t\t\t\tfieldKey=\"instructions\"\n\t\t\t\t\t\tdata-test=\"agent-instructions\"\n\t\t\t\t\t\tlabel=\"Instructions\"\n\t\t\t\t\t\tmaxLength={AGENT_CHAR_LIMITS.instructions}\n\t\t\t\t\t\tplaceholder=\"Write what this agent should do. Type @ to reference a tool or sub-agent.\"\n\t\t\t\t\t\tminHeight=\"200px\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<MentionField\n\t\t\t\t\t\tfieldKey=\"guardrail\"\n\t\t\t\t\t\tdata-test=\"agent-guardrail\"\n\t\t\t\t\t\tlabel=\"Guardrails\"\n\t\t\t\t\t\tmaxLength={AGENT_CHAR_LIMITS.guardrail}\n\t\t\t\t\t\tplaceholder=\"Things this agent must never do. Type @ to reference a tool or sub-agent.\"\n\t\t\t\t\t\tminHeight=\"140px\"\n\t\t\t\t\t/>\n\t\t\t\t</Step3Main>\n\n\t\t\t\t<Step3Side>\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Tools\"\n\t\t\t\t\t\thelper=\"Actions this agent can take while responding.\"\n\t\t\t\t\t\tdataTestPrefix=\"agent-tools\"\n\t\t\t\t\t\titems={toolItems}\n\t\t\t\t\t\taddableOptions={toolOptions}\n\t\t\t\t\t\tsourceGroups={toolSourceGroups}\n\t\t\t\t\t\temptyText=\"No tools added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\t// Always drop a chip at the cursor; keep the list deduped.\n\t\t\t\t\t\t\tinsertMention('tool', id);\n\t\t\t\t\t\t\tif (!value.tools.includes(id)) {\n\t\t\t\t\t\t\t\tpatch({ tools: [...value.tools, id] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={(id) => removeReference('tool', id)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SelectableListSection\n\t\t\t\t\t\ttitle=\"Sub-agents\"\n\t\t\t\t\t\thelper=\"Other agents this agent can hand off the conversation to.\"\n\t\t\t\t\t\tdataTestPrefix=\"agent-subagents\"\n\t\t\t\t\t\titems={subAgentItems}\n\t\t\t\t\t\taddableOptions={subAgentOptions}\n\t\t\t\t\t\temptyText=\"No sub-agents added yet.\"\n\t\t\t\t\t\tonAdd={(id) => {\n\t\t\t\t\t\t\tinsertMention('subagent', id);\n\t\t\t\t\t\t\tif (!value.subagents.includes(id)) {\n\t\t\t\t\t\t\t\tpatch({ subagents: [...value.subagents, id] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonRemove={(id) => removeReference('subagent', id)}\n\t\t\t\t\t\tonConfigure={onFetchSubAgent ? openConfigure : undefined}\n\t\t\t\t\t\tcreateOption={\n\t\t\t\t\t\t\tonCreateSubAgent\n\t\t\t\t\t\t\t\t? { label: 'Create new', onSelect: openCreate }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{availableModels.length > 0 && (\n\t\t\t\t\t\t<SideSection>\n\t\t\t\t\t\t\t<TitleSmall color={COLORS.content.primary}>\n\t\t\t\t\t\t\t\tAdvanced settings\n\t\t\t\t\t\t\t</TitleSmall>\n\t\t\t\t\t\t\t<TitleSmall color={COLORS.content.secondary}>\n\t\t\t\t\t\t\t\tSelect AI model\n\t\t\t\t\t\t\t</TitleSmall>\n\t\t\t\t\t\t\t<Dropdown\n\t\t\t\t\t\t\t\tdata-test=\"agent-model\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\tplaceHolder=\"Select model\"\n\t\t\t\t\t\t\t\toptions={modelOptions}\n\t\t\t\t\t\t\t\tdefaultOptions={\n\t\t\t\t\t\t\t\t\tselectedModel\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: selectedModel.label,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue: selectedModel.value,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonSelect={(opt) => {\n\t\t\t\t\t\t\t\t\tconst single = Array.isArray(opt) ? opt[0] : opt;\n\t\t\t\t\t\t\t\t\tconst v = (single as SingleOption)?.value;\n\t\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\t\tupdateField('model', v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</SideSection>\n\t\t\t\t\t)}\n\t\t\t\t</Step3Side>\n\t\t\t</Step3Grid>\n\n\t\t\t{panel && (\n\t\t\t\t<CreateSubAgentPanel\n\t\t\t\t\tkey={panel.key}\n\t\t\t\t\ttitle={panel.title}\n\t\t\t\t\tinitial={panel.initial}\n\t\t\t\t\tavailableTools={availableTools}\n\t\t\t\t\tappLabel={appTypeLabel(applicationType)}\n\t\t\t\t\tonImprove={onImproveSubAgent}\n\t\t\t\t\tonClose={() => setPanel(null)}\n\t\t\t\t\tonSave={handlePanelSave}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["toolIconEl","source","ic","SOURCE_ICONS","React","toolOption","t","STEP","STEP_DEFINITIONS","Step3HowItResponds","value","patch","updateField","removeReference","availableTools","availableSubAgents","availableModels","applicationType","insertMention","onCreateSubAgent","onFetchSubAgent","onUpdateSubAgent","onImproveSubAgent","registerSubAgentCreator","useAgentBuilderContext","panel","setPanel","useState","panelKeyRef","useRef","createdSubAgents","setCreatedSubAgents","subAgentById","s","knownSubAgents","openCreate","useCallback","useEffect","openConfigure","id","data","handlePanelSave","draft","ref","prev","toolItems","tool","x","toolOptions","toolSourceGroups","order","bySource","src","toolSourceLabel","subAgentItems","sub","subAgentOptions","modelOptions","m","selectedModel","jsxs","jsx","StepSectionHeader","Step3Grid","Step3Main","MentionField","AGENT_CHAR_LIMITS","Step3Side","SelectableListSection","SideSection","TitleSmall","COLORS","Dropdown","opt","v","CreateSubAgentPanel","appTypeLabel"],"mappings":";;;;;;;;;;;;;;;AA2BA,MAAMA,KAAa,CAACC,MAA4C;AAC/D,QAAMC,IAAKC,EAAaF,CAAM;AAC9B,SAAOC,IACJE,EAAM,cAAcF,EAAG,MAAM,EAAE,OAAOA,EAAG,GAAG,QAAQA,EAAG,EAAA,CAAG,IAC1D;AACJ,GAGMG,IAAa,CAACC,OAAgC;AAAA,EACnD,OAAOA,EAAE;AAAA,EACT,OAAOA,EAAE;AAAA,EACT,aAAaN,GAAWM,EAAE,UAAU,UAAU;AAC/C,IAEMC,IAAOC,GAAiB,CAAC,GAUlBC,KAA+B,MAAM;AACjD,QAAM;AAAA,IACL,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,yBAAAC;AAAA,EAAA,IACGC,GAAA,GAEE,CAACC,GAAOC,CAAQ,IAAIC,EAAoC,IAAI,GAC5DC,IAAcC,EAAO,CAAC,GAGtB,CAACC,GAAkBC,CAAmB,IAAIJ,EAAwB,CAAA,CAAE,GAEpEK,wBAAmB,IAAA;AACzB,EAAAjB,EAAmB,QAAQ,CAACkB,MAAMD,EAAa,IAAIC,EAAE,IAAIA,CAAC,CAAC,GAC3DH,EAAiB,QAAQ,CAACG,MAAMD,EAAa,IAAIC,EAAE,IAAIA,CAAC,CAAC;AACzD,QAAMC,IAAiB,MAAM,KAAKF,EAAa,QAAQ,GAEjDG,IAAaC,EAAY,MAAM;AACpC,IAAAR,EAAY,WAAW,GACvBF,EAAS,EAAE,KAAKE,EAAY,SAAS,OAAO,oBAAoB;AAAA,EACjE,GAAG,CAAA,CAAE;AAGL,EAAAS,EAAU,MAAM;AACf,QAAKlB;AAGL,aAAAI,EAAwBY,CAAU,GAC3B,MAAMZ,EAAwB,IAAI;AAAA,EAC1C,GAAG,CAACA,GAAyBY,GAAYhB,CAAgB,CAAC;AAE1D,QAAMmB,IAAgBF;AAAA,IACrB,OAAOG,MAAe;AACrB,UAAI,CAACnB;AACJ;AAED,YAAMoB,IAAO,MAAMpB,EAAgBmB,CAAE;AACrC,MAAAX,EAAY,WAAW,GACvBF,EAAS;AAAA,QACR,KAAKE,EAAY;AAAA,QACjB,OAAO;AAAA,QACP,WAAWW;AAAA,QACX,SAASC;AAAA,MAAA,CACT;AAAA,IACF;AAAA,IACA,CAACpB,CAAe;AAAA,EAAA,GAGXqB,IAAkBL;AAAA,IACvB,OAAOM,MAAyB;AAC/B,UAAIjB,GAAO;AACV,YAAIJ,GAAkB;AACrB,gBAAMsB,IAAM,MAAMtB,EAAiBI,EAAM,WAAWiB,CAAK;AACzD,UAAAX,EAAoB,CAACa,MAAS;AAAA,YAC7B,GAAGA,EAAK,OAAO,CAACX,MAAMA,EAAE,OAAOU,EAAI,EAAE;AAAA,YACrCA;AAAA,UAAA,CACA;AAAA,QACF;AAAA,iBACUxB,GAAkB;AAC5B,cAAMwB,IAAM,MAAMxB,EAAiBuB,CAAK;AACxC,QAAAX,EAAoB,CAACa,MAAS,CAAC,GAAGA,GAAMD,CAAG,CAAC,GAC5ChC,EAAM,EAAE,WAAW,CAAC,GAAGD,EAAM,WAAWiC,EAAI,EAAE,GAAG,GACjDzB,EAAc,YAAYyB,EAAI,IAAI,cAAcA,EAAI,IAAI,EAAE;AAAA,MAC3D;AACA,MAAAjB,EAAS,IAAI;AAAA,IACd;AAAA,IACA;AAAA,MACCD;AAAA,MACAJ;AAAA,MACAF;AAAA,MACAR;AAAA,MACAD,EAAM;AAAA,MACNQ;AAAA,IAAA;AAAA,EACD,GAGK2B,IAA8BnC,EAAM,MACxC,IAAI,CAAC6B,MAA8B;AACnC,UAAMO,IAAOhC,EAAe,KAAK,CAACR,MAAMA,EAAE,YAAYiC,CAAE;AACxD,WAAOO,IACJ;AAAA,MACA,IAAAP;AAAA,MACA,OAAOO,EAAK;AAAA,MACZ,MAAM3C,EAAa2C,EAAK,UAAU,UAAU;AAAA,IAAA,IAE5C;AAAA,EACJ,CAAC,EACA,OAAO,CAACC,MAA2BA,MAAM,IAAI,GAIzCC,IAA8BlC,EAAe,IAAIT,CAAU,GAG3D4C,KAAmC,MAAM;AAC9C,UAAMC,IAAkB,CAAA,GAClBC,wBAAe,IAAA;AACrB,WAAArC,EAAe,QAAQ,CAACR,MAAM;AAC7B,YAAM8C,IAAM9C,EAAE,UAAU;AACxB,MAAK6C,EAAS,IAAIC,CAAG,MACpBD,EAAS,IAAIC,GAAK,EAAE,GACpBF,EAAM,KAAKE,CAAG,IAEfD,EAAS,IAAIC,CAAG,GAAG,KAAK/C,EAAWC,CAAC,CAAC;AAAA,IACtC,CAAC,GACM4C,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,IAAkC5C,EAAM,UAC5C,IAAI,CAAC6B,MAA8B;AACnC,UAAMgB,IAAMvB,EAAa,IAAIO,CAAE;AAC/B,WAAOgB,IAAM,EAAE,IAAAhB,GAAI,OAAOgB,EAAI,SAAS;AAAA,EACxC,CAAC,EACA,OAAO,CAACR,MAA2BA,MAAM,IAAI,GAEzCS,IAAkCtB,EAAe,IAAI,CAACD,OAAO;AAAA,IAClE,OAAOA,EAAE;AAAA,IACT,OAAOA,EAAE;AAAA,EAAA,EACR,GAEIwB,IAA+BzC,EAAgB,IAAI,CAAC0C,OAAO;AAAA,IAChE,OAAOA,EAAE;AAAA,IACT,OAAOA,EAAE;AAAA,IACT,UAAUA,EAAE,UAAUhD,EAAM;AAAA,EAAA,EAC3B,GACIiD,IAAgB3C,EAAgB,KAAK,CAAC0C,MAAMA,EAAE,UAAUhD,EAAM,KAAK;AAEzE,SACC,gBAAAkD,EAAC,OAAA,EAAI,WAAU,2CACd,UAAA;AAAA,IAAA,gBAAAC,EAACC,MAAkB,OAAOvD,EAAK,OAAO,QAAQA,EAAK,QAAQ;AAAA,sBAE1DwD,GAAA,EACA,UAAA;AAAA,MAAA,gBAAAH,EAACI,GAAA,EACA,UAAA;AAAA,QAAA,gBAAAH;AAAA,UAACI;AAAA,UAAA;AAAA,YACA,UAAS;AAAA,YACT,aAAU;AAAA,YACV,OAAM;AAAA,YACN,WAAWC,EAAkB;AAAA,YAC7B,aAAY;AAAA,YACZ,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAGX,gBAAAL;AAAA,UAACI;AAAA,UAAA;AAAA,YACA,UAAS;AAAA,YACT,aAAU;AAAA,YACV,OAAM;AAAA,YACN,WAAWC,EAAkB;AAAA,YAC7B,aAAY;AAAA,YACZ,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACX,GACD;AAAA,wBAECC,GAAA,EACA,UAAA;AAAA,QAAA,gBAAAN;AAAA,UAACO;AAAA,UAAA;AAAA,YACA,OAAM;AAAA,YACN,QAAO;AAAA,YACP,gBAAe;AAAA,YACf,OAAOvB;AAAA,YACP,gBAAgBG;AAAA,YAChB,cAAcC;AAAA,YACd,WAAU;AAAA,YACV,OAAO,CAACV,MAAO;AAEd,cAAArB,EAAc,QAAQqB,CAAE,GACnB7B,EAAM,MAAM,SAAS6B,CAAE,KAC3B5B,EAAM,EAAE,OAAO,CAAC,GAAGD,EAAM,OAAO6B,CAAE,GAAG;AAAA,YAEvC;AAAA,YACA,UAAU,CAACA,MAAO1B,EAAgB,QAAQ0B,CAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAG7C,gBAAAsB;AAAA,UAACO;AAAA,UAAA;AAAA,YACA,OAAM;AAAA,YACN,QAAO;AAAA,YACP,gBAAe;AAAA,YACf,OAAOd;AAAA,YACP,gBAAgBE;AAAA,YAChB,WAAU;AAAA,YACV,OAAO,CAACjB,MAAO;AACd,cAAArB,EAAc,YAAYqB,CAAE,GACvB7B,EAAM,UAAU,SAAS6B,CAAE,KAC/B5B,EAAM,EAAE,WAAW,CAAC,GAAGD,EAAM,WAAW6B,CAAE,GAAG;AAAA,YAE/C;AAAA,YACA,UAAU,CAACA,MAAO1B,EAAgB,YAAY0B,CAAE;AAAA,YAChD,aAAanB,IAAkBkB,IAAgB;AAAA,YAC/C,cACCnB,IACG,EAAE,OAAO,cAAc,UAAUgB,MACjC;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJnB,EAAgB,SAAS,KACzB,gBAAA4C,EAACS,GAAA,EACA,UAAA;AAAA,UAAA,gBAAAR,EAACS,GAAA,EAAW,OAAOC,EAAO,QAAQ,SAAS,UAAA,qBAE3C;AAAA,4BACCD,GAAA,EAAW,OAAOC,EAAO,QAAQ,WAAW,UAAA,mBAE7C;AAAA,UACA,gBAAAV;AAAA,YAACW;AAAA,YAAA;AAAA,cACA,aAAU;AAAA,cACV,MAAK;AAAA,cACL,OAAM;AAAA,cACN,aAAY;AAAA,cACZ,SAASf;AAAA,cACT,gBACCE,IACG;AAAA,gBACA;AAAA,kBACC,OAAOA,EAAc;AAAA,kBACrB,OAAOA,EAAc;AAAA,gBAAA;AAAA,cACtB,IAEA;AAAA,cAEJ,UAAU,CAACc,MAAQ;AAElB,sBAAMC,KADS,MAAM,QAAQD,CAAG,IAAIA,EAAI,CAAC,IAAIA,IACT;AACpC,gBAAIC,KACH9D,EAAY,SAAS8D,CAAC;AAAA,cAExB;AAAA,YAAA;AAAA,UAAA;AAAA,QACD,EAAA,CACD;AAAA,MAAA,EAAA,CAEF;AAAA,IAAA,GACD;AAAA,IAECjD,KACA,gBAAAoC;AAAA,MAACc;AAAA,MAAA;AAAA,QAEA,OAAOlD,EAAM;AAAA,QACb,SAASA,EAAM;AAAA,QACf,gBAAAX;AAAA,QACA,UAAU8D,GAAa3D,CAAe;AAAA,QACtC,WAAWK;AAAA,QACX,SAAS,MAAMI,EAAS,IAAI;AAAA,QAC5B,QAAQe;AAAA,MAAA;AAAA,MAPHhB,EAAM;AAAA,IAAA;AAAA,EAQZ,GAEF;AAEF;"}
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ export type IconComp = React.FunctionComponent<React.SVGAttributes<SVGElement>>;
3
+ /** Brand glyph for a tool source, with its own size so each keeps its aspect ratio. */
4
+ export interface SourceIcon {
5
+ Icon: IconComp;
6
+ w: number;
7
+ h: number;
8
+ }
9
+ /** Per-source brand glyph — shared by the `@` picker and the Tools source buttons. */
10
+ export declare const SOURCE_ICONS: Record<string, SourceIcon>;
@@ -0,0 +1,10 @@
1
+ import o from "../../../assets/icons/ManifestGlass.svg.js";
2
+ import f from "../../../assets/icons/Shopify.svg.js";
3
+ const t = {
4
+ manifest: { Icon: o, w: 24, h: 24 },
5
+ shopify: { Icon: f, w: 21, h: 24 }
6
+ };
7
+ export {
8
+ t as SOURCE_ICONS
9
+ };
10
+ //# sourceMappingURL=sourceIcons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceIcons.js","sources":["../../../../../src/components/agent-builder/utils/sourceIcons.ts"],"sourcesContent":["import ManifestGlass from '@src/assets/icons/ManifestGlass.svg';\nimport Shopify from '@src/assets/icons/Shopify.svg';\nimport type React from 'react';\n\nexport type IconComp = React.FunctionComponent<React.SVGAttributes<SVGElement>>;\n\n/** Brand glyph for a tool source, with its own size so each keeps its aspect ratio. */\nexport interface SourceIcon {\n\tIcon: IconComp;\n\tw: number;\n\th: number;\n}\n\n/** Per-source brand glyph — shared by the `@` picker and the Tools source buttons. */\nexport const SOURCE_ICONS: Record<string, SourceIcon> = {\n\tmanifest: { Icon: ManifestGlass, w: 24, h: 24 },\n\tshopify: { Icon: Shopify, w: 21, h: 24 },\n};\n"],"names":["SOURCE_ICONS","ManifestGlass","Shopify"],"mappings":";;AAcO,MAAMA,IAA2C;AAAA,EACvD,UAAU,EAAE,MAAMC,GAAe,GAAG,IAAI,GAAG,GAAA;AAAA,EAC3C,SAAS,EAAE,MAAMC,GAAS,GAAG,IAAI,GAAG,GAAA;AACrC;"}
@@ -142,6 +142,13 @@ export interface MentionDropdownRenderProps {
142
142
  * navigating the flat `items` list.
143
143
  */
144
144
  registerKeyHandler?: (handler: ((event: KeyboardEvent) => boolean) | null) => void;
145
+ /**
146
+ * Dismiss the dropdown WITHOUT selecting an item: closes the menu and strips
147
+ * the typed `@`/`#` trigger + query. Use for custom actions in a multi-level
148
+ * picker (e.g. a "Create new" row that opens a drawer instead of inserting a
149
+ * mention).
150
+ */
151
+ onClose?: () => void;
145
152
  }
146
153
  /**
147
154
  * Everything related to @ and # mention dropdowns, in one place.