@truefoundry/trueforge-ui 0.3.1 → 0.4.0-rc.0
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.
- package/CHANGELOG.md +18 -0
- package/NOTICE +1 -1
- package/README.md +26 -89
- package/dist/{AgentCodeSnippets-DAZWEBJS.js → AgentCodeSnippets-BPC6TD7K.js} +5 -5
- package/dist/AgentMetricChart-T6DZZ37Y.js +15 -0
- package/dist/{AgentOverview-5JIVYXPX.js → AgentOverview-BFU7EO4Y.js} +5 -5
- package/dist/{AgentSessionEventTimeline-WELJSS6O.js → AgentSessionEventTimeline-ATVBTYDF.js} +5 -5
- package/dist/{AgentSessionEventTimelineChart-ADB3KICM.js → AgentSessionEventTimelineChart-H577STKW.js} +5 -5
- package/dist/{AgentSessions-NSN4LIGJ.js → AgentSessions-GDLBXFIK.js} +6 -6
- package/dist/{ConnectorSettings-C6MFCKYX.js → ConnectorSettings-FYNF6J3F.js} +5 -5
- package/dist/{DockLayout-VY7OZ55R.js → DockLayout-SGUOMZ5E.js} +8 -8
- package/dist/{DrawerLayout-B2UA3CZO.js → DrawerLayout-MJJYQDCW.js} +9 -9
- package/dist/{ModelSettings-3YAHICJ3.js → ModelSettings-6EW7U2MP.js} +5 -5
- package/dist/{SandboxSettings-ALR6F5KU.js → SandboxSettings-HQVBGHXZ.js} +5 -5
- package/dist/SchedulesPage-ZO3PJY4J.js +15 -0
- package/dist/{SettingsBuilder-G5CP5X6Q.js → SettingsBuilder-FODMI7HG.js} +19 -10
- package/dist/SettingsBuilder-FODMI7HG.js.map +1 -0
- package/dist/{ShellRouteSync-G7IJ5VIW.js → ShellRouteSync-4I5BP2VY.js} +4 -4
- package/dist/{SidebarLayout-FKRLGEDB.js → SidebarLayout-ZLWG2YGO.js} +10 -10
- package/dist/{SkillSettings-E5SJ4U3T.js → SkillSettings-AFSAOU6O.js} +5 -5
- package/dist/{TrueForgeUIWithRouter-WD7O3TWR.js → TrueForgeUIWithRouter-RQX5XWGI.js} +7 -7
- package/dist/WebSearchSettings-BW4CWGRR.js +322 -0
- package/dist/WebSearchSettings-BW4CWGRR.js.map +1 -0
- package/dist/{WidgetLayout-KQZTQNE7.js → WidgetLayout-WIPKUIL4.js} +8 -8
- package/dist/{chunk-2XT2VUT4.js → chunk-7S7A3PNP.js} +3 -3
- package/dist/chunk-7S7A3PNP.js.map +1 -0
- package/dist/{chunk-AU4BJQMK.js → chunk-GHXA46A2.js} +22 -22
- package/dist/chunk-GHXA46A2.js.map +1 -0
- package/dist/{chunk-7AAO4UDQ.js → chunk-HCGDDQ4G.js} +5 -5
- package/dist/chunk-HCGDDQ4G.js.map +1 -0
- package/dist/{chunk-XHPIJ77Q.js → chunk-HDMBSLDC.js} +2 -2
- package/dist/{chunk-XR4S7B2K.js → chunk-MLMR26WQ.js} +53 -50
- package/dist/chunk-MLMR26WQ.js.map +1 -0
- package/dist/{chunk-7UE7LZS2.js → chunk-Q22RHDYS.js} +34 -59
- package/dist/chunk-Q22RHDYS.js.map +1 -0
- package/dist/{chunk-G7BT4OKG.js → chunk-TFQWCBFQ.js} +11 -11
- package/dist/chunk-TFQWCBFQ.js.map +1 -0
- package/dist/{chunk-B76JC5B2.js → chunk-TJGGIEF6.js} +3 -3
- package/dist/{chunk-4OZFQVSR.js → chunk-TX6PB3DY.js} +2 -2
- package/dist/{chunk-2XFOONKH.js → chunk-VBZXCX7Y.js} +7 -7
- package/dist/{chunk-SAYUMANU.js → chunk-Y47LJKXD.js} +10 -10
- package/dist/{chunk-IGYCJIU7.js → chunk-YN5ZBBQM.js} +8 -8
- package/dist/{chunk-AO23SZBG.js → chunk-ZYJ2SBF7.js} +2 -2
- package/dist/createTrueForgeServer-DiSooQdh.d.ts +42 -0
- package/dist/index.d.ts +29 -36
- package/dist/index.js +41 -41
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +57 -894
- package/dist/plugins/trueforge-agent-server-adapter/index.js +104 -5
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/package.json +8 -7
- package/dist/AgentMetricChart-VDIE3S2P.js +0 -15
- package/dist/SchedulesPage-TIS3BH67.js +0 -15
- package/dist/SettingsBuilder-G5CP5X6Q.js.map +0 -1
- package/dist/chunk-2XT2VUT4.js.map +0 -1
- package/dist/chunk-7AAO4UDQ.js.map +0 -1
- package/dist/chunk-7UE7LZS2.js.map +0 -1
- package/dist/chunk-AU4BJQMK.js.map +0 -1
- package/dist/chunk-G7BT4OKG.js.map +0 -1
- package/dist/chunk-XR4S7B2K.js.map +0 -1
- package/dist/createTrueFoundryServer-B_FYhSdn.d.ts +0 -42
- /package/dist/{AgentCodeSnippets-DAZWEBJS.js.map → AgentCodeSnippets-BPC6TD7K.js.map} +0 -0
- /package/dist/{AgentMetricChart-VDIE3S2P.js.map → AgentMetricChart-T6DZZ37Y.js.map} +0 -0
- /package/dist/{AgentOverview-5JIVYXPX.js.map → AgentOverview-BFU7EO4Y.js.map} +0 -0
- /package/dist/{AgentSessionEventTimeline-WELJSS6O.js.map → AgentSessionEventTimeline-ATVBTYDF.js.map} +0 -0
- /package/dist/{AgentSessionEventTimelineChart-ADB3KICM.js.map → AgentSessionEventTimelineChart-H577STKW.js.map} +0 -0
- /package/dist/{AgentSessions-NSN4LIGJ.js.map → AgentSessions-GDLBXFIK.js.map} +0 -0
- /package/dist/{ConnectorSettings-C6MFCKYX.js.map → ConnectorSettings-FYNF6J3F.js.map} +0 -0
- /package/dist/{DockLayout-VY7OZ55R.js.map → DockLayout-SGUOMZ5E.js.map} +0 -0
- /package/dist/{DrawerLayout-B2UA3CZO.js.map → DrawerLayout-MJJYQDCW.js.map} +0 -0
- /package/dist/{ModelSettings-3YAHICJ3.js.map → ModelSettings-6EW7U2MP.js.map} +0 -0
- /package/dist/{SandboxSettings-ALR6F5KU.js.map → SandboxSettings-HQVBGHXZ.js.map} +0 -0
- /package/dist/{SchedulesPage-TIS3BH67.js.map → SchedulesPage-ZO3PJY4J.js.map} +0 -0
- /package/dist/{ShellRouteSync-G7IJ5VIW.js.map → ShellRouteSync-4I5BP2VY.js.map} +0 -0
- /package/dist/{SidebarLayout-FKRLGEDB.js.map → SidebarLayout-ZLWG2YGO.js.map} +0 -0
- /package/dist/{SkillSettings-E5SJ4U3T.js.map → SkillSettings-AFSAOU6O.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-WD7O3TWR.js.map → TrueForgeUIWithRouter-RQX5XWGI.js.map} +0 -0
- /package/dist/{WidgetLayout-KQZTQNE7.js.map → WidgetLayout-WIPKUIL4.js.map} +0 -0
- /package/dist/{chunk-XHPIJ77Q.js.map → chunk-HDMBSLDC.js.map} +0 -0
- /package/dist/{chunk-B76JC5B2.js.map → chunk-TJGGIEF6.js.map} +0 -0
- /package/dist/{chunk-4OZFQVSR.js.map → chunk-TX6PB3DY.js.map} +0 -0
- /package/dist/{chunk-2XFOONKH.js.map → chunk-VBZXCX7Y.js.map} +0 -0
- /package/dist/{chunk-SAYUMANU.js.map → chunk-Y47LJKXD.js.map} +0 -0
- /package/dist/{chunk-IGYCJIU7.js.map → chunk-YN5ZBBQM.js.map} +0 -0
- /package/dist/{chunk-AO23SZBG.js.map → chunk-ZYJ2SBF7.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/containers/SettingsBuilder/index.tsx"],"sourcesContent":["'use client';\n\nimport { lazy, Suspense, useCallback, useEffect, useMemo } from 'react';\n\nimport { useDraftCatalog } from '@/atoms/draft/DraftCatalogProvider.js';\nimport { auiButtonClass } from '@/atoms/lib/buttonClasses.js';\nimport { cn } from '@/atoms/lib/cn.js';\nimport { useCompactLayout } from '@/atoms/lib/CompactLayoutContext.js';\nimport { PageHeader } from '@/atoms/PageHeader.js';\nimport { Spinner } from '@/atoms/primitives/Spinner.js';\nimport { Icon } from '@/icons/Icon.js';\nimport { useOptionalCatalogServer, useOptionalRefreshServerCapabilities } from '@/server/ServerContext.js';\nimport { useShellMode, type SettingsSection } from '@/server/ShellModeContext.js';\n\n// Section modules (and their list/catalog APIs) load only when that tab mounts.\nconst ModelSettings = lazy(() => import('./ModelSettings.js'));\nconst ConnectorSettings = lazy(() => import('./ConnectorSettings.js'));\nconst SkillSettings = lazy(() => import('./SkillSettings.js'));\nconst SandboxSettings = lazy(() => import('./SandboxSettings.js'));\nconst WebSearchSettings = lazy(() => import('./WebSearchSettings.js'));\n\nfunction SettingsSectionFallback() {\n return (\n <div className=\"flex flex-1 items-center justify-center py-8\" role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\n <Spinner size={20} className=\"text-text-secondary\" />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nconst TruefoundrySettingsBuilder = () => {\n const { settingsOpen, settingsSection: section, setSettingsOpen } = useShellMode();\n const catalog = useOptionalCatalogServer();\n const refreshServerCapabilities = useOptionalRefreshServerCapabilities();\n const { refresh: refreshDraftCatalog } = useDraftCatalog();\n // dock/widget panels are ~mobile width even on a wide viewport — keep Settings stacked.\n const compact = useCompactLayout();\n const hasSkills = catalog?.skillCatalog != null;\n const hasSandbox = catalog?.sandboxCatalog != null;\n const hasWebSearch = catalog?.webSearchCatalog != null;\n\n const closeSettings = useCallback(() => {\n setSettingsOpen(false);\n }, [setSettingsOpen]);\n\n // Refresh catalogs whenever settings are closed or navigated away from.\n useEffect(() => {\n if (!settingsOpen) return;\n return () => {\n refreshDraftCatalog();\n refreshServerCapabilities?.();\n };\n }, [settingsOpen, refreshDraftCatalog, refreshServerCapabilities]);\n\n useEffect(() => {\n if (!hasSkills && section === 'skills') {\n setSettingsOpen(settingsOpen, 'models');\n }\n if (!hasSandbox && section === 'sandbox') {\n setSettingsOpen(settingsOpen, 'models');\n }\n if (!hasWebSearch && section === 'web-search') {\n setSettingsOpen(settingsOpen, 'models');\n }\n }, [hasSkills, hasSandbox, hasWebSearch, section, settingsOpen, setSettingsOpen]);\n\n useEffect(() => {\n if (!settingsOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n event.stopImmediatePropagation();\n closeSettings();\n };\n // Capture so layout Escape handlers (sessions drawer / widget) do not also fire.\n window.addEventListener('keydown', onKeyDown, true);\n return () => window.removeEventListener('keydown', onKeyDown, true);\n }, [closeSettings, settingsOpen]);\n\n const sections = useMemo<\n Array<{\n id: SettingsSection;\n label: string;\n icon: 'cpu' | 'plug' | 'lightbulb' | 'cube' | 'search';\n }>\n >(() => {\n const baseSections: Array<{\n id: SettingsSection;\n label: string;\n icon: 'cpu' | 'plug' | 'lightbulb' | 'cube' | 'search';\n }> = [\n { id: 'models', label: 'Models', icon: 'cpu' },\n { id: 'connectors', label: 'Connectors', icon: 'plug' },\n ];\n if (hasSkills) {\n baseSections.push({ id: 'skills', label: 'Skills', icon: 'lightbulb' });\n }\n if (hasSandbox) {\n baseSections.push({ id: 'sandbox', label: 'Sandbox providers', icon: 'cube' });\n }\n if (hasWebSearch) {\n baseSections.push({ id: 'web-search', label: 'Web search', icon: 'search' });\n }\n return baseSections;\n }, [hasSkills, hasSandbox, hasWebSearch]);\n\n if (!settingsOpen || !catalog) return null;\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col bg-primary-bg\">\n <PageHeader\n title=\"Settings\"\n start={\n <button\n type=\"button\"\n aria-label=\"Back\"\n title=\"Back\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={closeSettings}\n >\n <Icon name=\"arrow-left\" />\n </button>\n }\n />\n\n <div className={cn('flex min-h-0 flex-1 flex-col', !compact && 'md:flex-row')}>\n <nav\n aria-label=\"Settings sections\"\n className={cn(\n 'flex w-full gap-1 border-b border-border bg-secondary-bg/40 p-2',\n compact ? 'min-w-0' : 'justify-center md:w-48 md:flex-col md:justify-start md:border-b-0 md:border-r',\n )}\n >\n {sections.map(item => (\n <button\n key={item.id}\n type=\"button\"\n aria-current={section === item.id ? 'page' : undefined}\n {...(compact ? { title: item.label } : {})}\n className={cn(\n 'flex min-h-9 items-center gap-2 rounded-md px-3 text-sm font-medium transition-colors',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring',\n // Narrow panels cannot fit fixed-width tabs, so tabs split the row instead.\n compact ? 'min-w-0 flex-1 justify-center gap-1.5 px-1.5' : 'shrink-0',\n section === item.id\n ? 'bg-primary-button-bg/10 text-primary-button-bg'\n : 'text-text-secondary hover:bg-ghost-button-hover/60 hover:text-text-primary',\n )}\n onClick={() => {\n setSettingsOpen(true, item.id);\n }}\n >\n <Icon name={item.icon} className=\"h-4 w-4 shrink-0\" />\n {compact ? <span className=\"truncate\">{item.label}</span> : item.label}\n </button>\n ))}\n </nav>\n\n <section className=\"flex flex-col h-full flex-1 overflow-y-hidden px-6 py-4\">\n <div className=\"w-full max-w-210 h-full min-h-0 flex flex-col mx-auto\">\n <Suspense fallback={<SettingsSectionFallback />}>\n {section === 'models' ? <ModelSettings /> : null}\n {section === 'connectors' ? <ConnectorSettings /> : null}\n {section === 'skills' && hasSkills ? <SkillSettings /> : null}\n {section === 'sandbox' && hasSandbox ? <SandboxSettings /> : null}\n {section === 'web-search' && hasWebSearch ? <WebSearchSettings /> : null}\n </Suspense>\n </div>\n </section>\n </div>\n </div>\n );\n};\n\nexport default TruefoundrySettingsBuilder;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,SAAS,MAAM,UAAU,aAAa,WAAW,eAAe;AAqB5D,SACE,KADF;AARJ,IAAM,gBAAgB,KAAK,MAAM,OAAO,6BAAoB,CAAC;AAC7D,IAAM,oBAAoB,KAAK,MAAM,OAAO,iCAAwB,CAAC;AACrE,IAAM,gBAAgB,KAAK,MAAM,OAAO,6BAAoB,CAAC;AAC7D,IAAM,kBAAkB,KAAK,MAAM,OAAO,+BAAsB,CAAC;AACjE,IAAM,oBAAoB,KAAK,MAAM,OAAO,iCAAwB,CAAC;AAErE,SAAS,0BAA0B;AACjC,SACE,qBAAC,SAAI,WAAU,gDAA+C,MAAK,UAAS,aAAU,UAAS,aAAU,QACvG;AAAA,wBAAC,WAAQ,MAAM,IAAI,WAAU,uBAAsB;AAAA,IACnD,oBAAC,UAAK,WAAU,WAAU,qBAAO;AAAA,KACnC;AAEJ;AAEA,IAAM,6BAA6B,MAAM;AACvC,QAAM,EAAE,cAAc,iBAAiB,SAAS,gBAAgB,IAAI,aAAa;AACjF,QAAM,UAAU,yBAAyB;AACzC,QAAM,4BAA4B,qCAAqC;AACvE,QAAM,EAAE,SAAS,oBAAoB,IAAI,gBAAgB;AAEzD,QAAM,UAAU,iBAAiB;AACjC,QAAM,YAAY,SAAS,gBAAgB;AAC3C,QAAM,aAAa,SAAS,kBAAkB;AAC9C,QAAM,eAAe,SAAS,oBAAoB;AAElD,QAAM,gBAAgB,YAAY,MAAM;AACtC,oBAAgB,KAAK;AAAA,EACvB,GAAG,CAAC,eAAe,CAAC;AAGpB,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AACnB,WAAO,MAAM;AACX,0BAAoB;AACpB,kCAA4B;AAAA,IAC9B;AAAA,EACF,GAAG,CAAC,cAAc,qBAAqB,yBAAyB,CAAC;AAEjE,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,YAAY,UAAU;AACtC,sBAAgB,cAAc,QAAQ;AAAA,IACxC;AACA,QAAI,CAAC,cAAc,YAAY,WAAW;AACxC,sBAAgB,cAAc,QAAQ;AAAA,IACxC;AACA,QAAI,CAAC,gBAAgB,YAAY,cAAc;AAC7C,sBAAgB,cAAc,QAAQ;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,WAAW,YAAY,cAAc,SAAS,cAAc,eAAe,CAAC;AAEhF,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AACnB,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,SAAU;AAC5B,YAAM,yBAAyB;AAC/B,oBAAc;AAAA,IAChB;AAEA,WAAO,iBAAiB,WAAW,WAAW,IAAI;AAClD,WAAO,MAAM,OAAO,oBAAoB,WAAW,WAAW,IAAI;AAAA,EACpE,GAAG,CAAC,eAAe,YAAY,CAAC;AAEhC,QAAM,WAAW,QAMf,MAAM;AACN,UAAM,eAID;AAAA,MACH,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,MAAM;AAAA,MAC7C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,OAAO;AAAA,IACxD;AACA,QAAI,WAAW;AACb,mBAAa,KAAK,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAY,CAAC;AAAA,IACxE;AACA,QAAI,YAAY;AACd,mBAAa,KAAK,EAAE,IAAI,WAAW,OAAO,qBAAqB,MAAM,OAAO,CAAC;AAAA,IAC/E;AACA,QAAI,cAAc;AAChB,mBAAa,KAAK,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,SAAS,CAAC;AAAA,IAC7E;AACA,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,YAAY,YAAY,CAAC;AAExC,MAAI,CAAC,gBAAgB,CAAC,QAAS,QAAO;AAEtC,SACE,qBAAC,SAAI,WAAU,qDACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,OACE;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,OAAM;AAAA,YACN,WAAW,eAAe,EAAE,SAAS,SAAS,MAAM,OAAO,CAAC;AAAA,YAC5D,SAAS;AAAA,YAET,8BAAC,QAAK,MAAK,cAAa;AAAA;AAAA,QAC1B;AAAA;AAAA,IAEJ;AAAA,IAEA,qBAAC,SAAI,WAAW,GAAG,gCAAgC,CAAC,WAAW,aAAa,GAC1E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,cAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,YAAY;AAAA,UACxB;AAAA,UAEC,mBAAS,IAAI,UACZ;AAAA,YAAC;AAAA;AAAA,cAEC,MAAK;AAAA,cACL,gBAAc,YAAY,KAAK,KAAK,SAAS;AAAA,cAC5C,GAAI,UAAU,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,cACxC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA;AAAA,gBAEA,UAAU,iDAAiD;AAAA,gBAC3D,YAAY,KAAK,KACb,mDACA;AAAA,cACN;AAAA,cACA,SAAS,MAAM;AACb,gCAAgB,MAAM,KAAK,EAAE;AAAA,cAC/B;AAAA,cAEA;AAAA,oCAAC,QAAK,MAAM,KAAK,MAAM,WAAU,oBAAmB;AAAA,gBACnD,UAAU,oBAAC,UAAK,WAAU,YAAY,eAAK,OAAM,IAAU,KAAK;AAAA;AAAA;AAAA,YAlB5D,KAAK;AAAA,UAmBZ,CACD;AAAA;AAAA,MACH;AAAA,MAEA,oBAAC,aAAQ,WAAU,2DACjB,8BAAC,SAAI,WAAU,yDACb,+BAAC,YAAS,UAAU,oBAAC,2BAAwB,GAC1C;AAAA,oBAAY,WAAW,oBAAC,iBAAc,IAAK;AAAA,QAC3C,YAAY,eAAe,oBAAC,qBAAkB,IAAK;AAAA,QACnD,YAAY,YAAY,YAAY,oBAAC,iBAAc,IAAK;AAAA,QACxD,YAAY,aAAa,aAAa,oBAAC,mBAAgB,IAAK;AAAA,QAC5D,YAAY,gBAAgB,eAAe,oBAAC,qBAAkB,IAAK;AAAA,SACtE,GACF,GACF;AAAA,OACF;AAAA,KACF;AAEJ;AAEA,IAAO,0BAAQ;","names":[]}
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
matchLocation,
|
|
5
5
|
placesEqual,
|
|
6
6
|
sanitizeSearchForPlace
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-TJGGIEF6.js";
|
|
8
8
|
import {
|
|
9
9
|
sessionIsCreateAgent
|
|
10
10
|
} from "./chunk-RDXBMTP5.js";
|
|
11
11
|
import {
|
|
12
12
|
findAgentByName
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZYJ2SBF7.js";
|
|
14
14
|
import {
|
|
15
15
|
libraryAgentId,
|
|
16
16
|
toEffectiveRoutes,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
useServerCapabilities,
|
|
22
22
|
useServerCapabilitiesSettled,
|
|
23
23
|
useShellMode
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-7S7A3PNP.js";
|
|
25
25
|
|
|
26
26
|
// src/routing/ShellRouteSync.tsx
|
|
27
27
|
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
@@ -387,4 +387,4 @@ function ShellRouteSync({
|
|
|
387
387
|
export {
|
|
388
388
|
ShellRouteSync
|
|
389
389
|
};
|
|
390
|
-
//# sourceMappingURL=ShellRouteSync-
|
|
390
|
+
//# sourceMappingURL=ShellRouteSync-4I5BP2VY.js.map
|
|
@@ -3,32 +3,32 @@ import {
|
|
|
3
3
|
AgentConfigDrawerContainer,
|
|
4
4
|
NamedAgentHeaderLabel,
|
|
5
5
|
ShellActions
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TFQWCBFQ.js";
|
|
7
7
|
import {
|
|
8
8
|
ThreadListContainer
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VBZXCX7Y.js";
|
|
10
10
|
import {
|
|
11
11
|
Thread
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GHXA46A2.js";
|
|
13
13
|
import "./chunk-BSIPI3KV.js";
|
|
14
14
|
import {
|
|
15
15
|
resolveBrandChrome,
|
|
16
16
|
useChatHeaderContentVisible,
|
|
17
17
|
useIsMobile,
|
|
18
18
|
useSlot
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-AO23SZBG.js";
|
|
19
|
+
} from "./chunk-MLMR26WQ.js";
|
|
21
20
|
import {
|
|
22
21
|
Icon,
|
|
23
22
|
PageHeader,
|
|
24
23
|
Spinner,
|
|
25
24
|
auiButtonClass,
|
|
26
25
|
sidebarRailButtonClassName
|
|
27
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-TX6PB3DY.js";
|
|
27
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
28
28
|
import {
|
|
29
29
|
shellIsCreateAgent,
|
|
30
30
|
useOptionalShellMode
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-7S7A3PNP.js";
|
|
32
32
|
import {
|
|
33
33
|
useAui
|
|
34
34
|
} from "./chunk-M6MHLVSO.js";
|
|
@@ -47,9 +47,9 @@ import {
|
|
|
47
47
|
useState
|
|
48
48
|
} from "react";
|
|
49
49
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
50
|
-
var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-
|
|
50
|
+
var TruefoundrySettingsBuilder = lazy(() => import("./SettingsBuilder-FODMI7HG.js"));
|
|
51
51
|
var SchedulesPage = lazy(
|
|
52
|
-
() => import("./SchedulesPage-
|
|
52
|
+
() => import("./SchedulesPage-ZO3PJY4J.js").then((m) => ({ default: m.SchedulesPage }))
|
|
53
53
|
);
|
|
54
54
|
var brandLogoClassName = "h-5 w-5 max-w-40 shrink-0 object-contain";
|
|
55
55
|
var railWidthClassName = "w-20";
|
|
@@ -327,4 +327,4 @@ function SidebarLayout({ className }) {
|
|
|
327
327
|
export {
|
|
328
328
|
SidebarLayout
|
|
329
329
|
};
|
|
330
|
-
//# sourceMappingURL=SidebarLayout-
|
|
330
|
+
//# sourceMappingURL=SidebarLayout-ZLWG2YGO.js.map
|
|
@@ -5,15 +5,15 @@ import {
|
|
|
5
5
|
SearchInput_default,
|
|
6
6
|
auiInputClass,
|
|
7
7
|
useToasterOptional
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-AO23SZBG.js";
|
|
8
|
+
} from "./chunk-MLMR26WQ.js";
|
|
10
9
|
import {
|
|
11
10
|
Icon
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-TX6PB3DY.js";
|
|
12
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
13
13
|
import {
|
|
14
14
|
getErrorMessage,
|
|
15
15
|
useCatalogServer
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-7S7A3PNP.js";
|
|
17
17
|
import "./chunk-M6MHLVSO.js";
|
|
18
18
|
import "./chunk-QKFMAQ7O.js";
|
|
19
19
|
import "./chunk-6UACSIIY.js";
|
|
@@ -392,4 +392,4 @@ var SkillSettings_default = SkillSettings;
|
|
|
392
392
|
export {
|
|
393
393
|
SkillSettings_default as default
|
|
394
394
|
};
|
|
395
|
-
//# sourceMappingURL=SkillSettings-
|
|
395
|
+
//# sourceMappingURL=SkillSettings-AFSAOU6O.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
TrueForgeUIShell
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q22RHDYS.js";
|
|
5
5
|
import "./chunk-DJUFS2BW.js";
|
|
6
6
|
import "./chunk-BSIPI3KV.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveRoutesConfig
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TJGGIEF6.js";
|
|
10
10
|
import "./chunk-Y6S4OVVQ.js";
|
|
11
11
|
import "./chunk-RDXBMTP5.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-MLMR26WQ.js";
|
|
13
|
+
import "./chunk-TX6PB3DY.js";
|
|
14
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
15
|
+
import "./chunk-7S7A3PNP.js";
|
|
16
16
|
import "./chunk-M6MHLVSO.js";
|
|
17
17
|
import "./chunk-QKFMAQ7O.js";
|
|
18
18
|
import "./chunk-6UACSIIY.js";
|
|
@@ -31,4 +31,4 @@ function TrueForgeUIWithRouter({
|
|
|
31
31
|
export {
|
|
32
32
|
TrueForgeUIWithRouter
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=TrueForgeUIWithRouter-
|
|
34
|
+
//# sourceMappingURL=TrueForgeUIWithRouter-RQX5XWGI.js.map
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
CenteredModal,
|
|
5
|
+
auiInputClass,
|
|
6
|
+
useToasterOptional
|
|
7
|
+
} from "./chunk-MLMR26WQ.js";
|
|
8
|
+
import {
|
|
9
|
+
Icon
|
|
10
|
+
} from "./chunk-TX6PB3DY.js";
|
|
11
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
12
|
+
import {
|
|
13
|
+
getErrorMessage,
|
|
14
|
+
useCatalogServer
|
|
15
|
+
} from "./chunk-7S7A3PNP.js";
|
|
16
|
+
import "./chunk-M6MHLVSO.js";
|
|
17
|
+
import "./chunk-QKFMAQ7O.js";
|
|
18
|
+
import "./chunk-6UACSIIY.js";
|
|
19
|
+
|
|
20
|
+
// src/containers/SettingsBuilder/WebSearchSettings.tsx
|
|
21
|
+
import { useCallback, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
|
|
22
|
+
|
|
23
|
+
// src/containers/SettingsBuilder/ConfigureWebSearchForm.tsx
|
|
24
|
+
import { useEffect, useState } from "react";
|
|
25
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
26
|
+
var inputClassName = auiInputClass("h-11 shadow-sm");
|
|
27
|
+
var ConfigureWebSearchForm = ({
|
|
28
|
+
open,
|
|
29
|
+
onOpenChange,
|
|
30
|
+
onSave,
|
|
31
|
+
title,
|
|
32
|
+
description,
|
|
33
|
+
requireApiKey = true,
|
|
34
|
+
busy = false,
|
|
35
|
+
error
|
|
36
|
+
}) => {
|
|
37
|
+
const [apiKey, setApiKey] = useState("");
|
|
38
|
+
const resetForm = () => {
|
|
39
|
+
setApiKey("");
|
|
40
|
+
};
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!open) return;
|
|
43
|
+
setApiKey("");
|
|
44
|
+
}, [open]);
|
|
45
|
+
const handleOpenChange = (nextOpen) => {
|
|
46
|
+
if (!nextOpen) resetForm();
|
|
47
|
+
onOpenChange(nextOpen);
|
|
48
|
+
};
|
|
49
|
+
const trimmedKey = apiKey.trim();
|
|
50
|
+
const isValid = !requireApiKey || !!trimmedKey;
|
|
51
|
+
const handleSubmit = async (event) => {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
if (!isValid || busy) return;
|
|
54
|
+
try {
|
|
55
|
+
await onSave({ apiKey: trimmedKey });
|
|
56
|
+
resetForm();
|
|
57
|
+
onOpenChange(false);
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return /* @__PURE__ */ jsx(
|
|
62
|
+
CenteredModal,
|
|
63
|
+
{
|
|
64
|
+
open,
|
|
65
|
+
onOpenChange: handleOpenChange,
|
|
66
|
+
title,
|
|
67
|
+
description,
|
|
68
|
+
contentSized: true,
|
|
69
|
+
headerIcon: /* @__PURE__ */ jsx(
|
|
70
|
+
"span",
|
|
71
|
+
{
|
|
72
|
+
className: "flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
73
|
+
"aria-hidden": true,
|
|
74
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "search", className: "size-6" })
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
children: /* @__PURE__ */ jsxs("form", { className: "flex flex-col overflow-y-auto p-5 md:p-6", onSubmit: handleSubmit, children: [
|
|
78
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
79
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: "web-search-api-key", className: "mb-1.5 block text-sm font-medium text-text-primary", children: [
|
|
80
|
+
"API key",
|
|
81
|
+
!requireApiKey ? /* @__PURE__ */ jsx("span", { className: "font-normal text-text-secondary", children: " (optional)" }) : null
|
|
82
|
+
] }),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"input",
|
|
85
|
+
{
|
|
86
|
+
id: "web-search-api-key",
|
|
87
|
+
type: "password",
|
|
88
|
+
required: requireApiKey,
|
|
89
|
+
value: apiKey,
|
|
90
|
+
onChange: (event) => {
|
|
91
|
+
setApiKey(event.target.value);
|
|
92
|
+
},
|
|
93
|
+
placeholder: requireApiKey ? "Parallel API key" : "Leave blank to keep existing",
|
|
94
|
+
autoFocus: true,
|
|
95
|
+
className: inputClassName
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
] }) }),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-6 space-y-3", children: [
|
|
100
|
+
error ? /* @__PURE__ */ jsx("p", { className: "text-failure-bg text-sm", children: error }) : null,
|
|
101
|
+
/* @__PURE__ */ jsx(Button.Primary, { type: "submit", size: "large", disabled: !isValid || busy, className: "w-full shrink-0", children: "Save" })
|
|
102
|
+
] })
|
|
103
|
+
] })
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
var ConfigureWebSearchForm_default = ConfigureWebSearchForm;
|
|
108
|
+
|
|
109
|
+
// src/containers/SettingsBuilder/WebSearchSettings.tsx
|
|
110
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
111
|
+
var WebSearchSettings = () => {
|
|
112
|
+
const { webSearchCatalog } = useCatalogServer();
|
|
113
|
+
const toaster = useToasterOptional();
|
|
114
|
+
const [providers, setProviders] = useState2([]);
|
|
115
|
+
const [catalog, setCatalog] = useState2([]);
|
|
116
|
+
const [loading, setLoading] = useState2(true);
|
|
117
|
+
const [error, setError] = useState2(null);
|
|
118
|
+
const [formError, setFormError] = useState2(null);
|
|
119
|
+
const [busy, setBusy] = useState2(false);
|
|
120
|
+
const [createEntry, setCreateEntry] = useState2(null);
|
|
121
|
+
const [updateProvider, setUpdateProvider] = useState2(null);
|
|
122
|
+
const refresh = useCallback(
|
|
123
|
+
async ({ quiet = false } = {}) => {
|
|
124
|
+
if (!webSearchCatalog) return;
|
|
125
|
+
if (!quiet) setLoading(true);
|
|
126
|
+
setError(null);
|
|
127
|
+
try {
|
|
128
|
+
const [listed, available] = await Promise.all([
|
|
129
|
+
webSearchCatalog.listWebSearchProviders(),
|
|
130
|
+
webSearchCatalog.getWebSearchProviderCatalog()
|
|
131
|
+
]);
|
|
132
|
+
setProviders(listed);
|
|
133
|
+
setCatalog(available);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
setError(getErrorMessage(err, "Failed to load web search providers"));
|
|
136
|
+
} finally {
|
|
137
|
+
if (!quiet) setLoading(false);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
[webSearchCatalog]
|
|
141
|
+
);
|
|
142
|
+
useEffect2(() => {
|
|
143
|
+
void refresh();
|
|
144
|
+
}, [refresh]);
|
|
145
|
+
const hasConfiguredProvider = providers.length > 0;
|
|
146
|
+
const availableEntries = useMemo(() => {
|
|
147
|
+
if (hasConfiguredProvider) return [];
|
|
148
|
+
const connectedCatalogIds = new Set(providers.map((provider) => provider.catalogId));
|
|
149
|
+
return catalog.filter((entry) => !connectedCatalogIds.has(entry.id));
|
|
150
|
+
}, [catalog, providers, hasConfiguredProvider]);
|
|
151
|
+
if (!webSearchCatalog) {
|
|
152
|
+
return /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: "Web search provider catalog is not available." });
|
|
153
|
+
}
|
|
154
|
+
const runMutation = async (fn, setMutationError = setError) => {
|
|
155
|
+
setBusy(true);
|
|
156
|
+
setError(null);
|
|
157
|
+
try {
|
|
158
|
+
await fn();
|
|
159
|
+
await refresh({ quiet: true });
|
|
160
|
+
} catch (err) {
|
|
161
|
+
setMutationError(getErrorMessage(err, "Request failed"));
|
|
162
|
+
throw err;
|
|
163
|
+
} finally {
|
|
164
|
+
setBusy(false);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const handleCreate = async (draft) => {
|
|
168
|
+
if (!createEntry) return;
|
|
169
|
+
setFormError(null);
|
|
170
|
+
await runMutation(async () => {
|
|
171
|
+
await webSearchCatalog.createWebSearchProvider({
|
|
172
|
+
catalogId: createEntry.id,
|
|
173
|
+
name: createEntry.name,
|
|
174
|
+
type: createEntry.type,
|
|
175
|
+
apiKey: draft.apiKey
|
|
176
|
+
});
|
|
177
|
+
}, setFormError);
|
|
178
|
+
setCreateEntry(null);
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
toaster?.showSuccess({ title: `${createEntry.name} configured` });
|
|
181
|
+
}, 0);
|
|
182
|
+
};
|
|
183
|
+
const handleUpdate = async (draft) => {
|
|
184
|
+
if (!updateProvider) return;
|
|
185
|
+
setFormError(null);
|
|
186
|
+
await runMutation(async () => {
|
|
187
|
+
await webSearchCatalog.updateWebSearchProvider({
|
|
188
|
+
id: updateProvider.id,
|
|
189
|
+
...draft.apiKey ? { apiKey: draft.apiKey } : {}
|
|
190
|
+
});
|
|
191
|
+
}, setFormError);
|
|
192
|
+
setUpdateProvider(null);
|
|
193
|
+
setTimeout(() => {
|
|
194
|
+
toaster?.showSuccess({ title: `${updateProvider.name} updated` });
|
|
195
|
+
}, 0);
|
|
196
|
+
};
|
|
197
|
+
const formOpen = createEntry != null || updateProvider != null;
|
|
198
|
+
const isUpdate = updateProvider != null;
|
|
199
|
+
const formTitle = updateProvider ? `Update ${updateProvider.name}` : createEntry ? `Configure ${createEntry.name}` : "Configure web search provider";
|
|
200
|
+
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
201
|
+
/* @__PURE__ */ jsx2("h3", { className: "text-xl font-semibold tracking-tight text-text-primary", children: "Web search" }),
|
|
202
|
+
/* @__PURE__ */ jsx2("p", { className: "mt-1 text-sm text-text-secondary", children: "Configure a provider so agents can search the web. Only one can be active at a time." }),
|
|
203
|
+
error ? /* @__PURE__ */ jsx2("p", { className: "mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg", children: error }) : null,
|
|
204
|
+
/* @__PURE__ */ jsx2("div", { className: "mt-4 flex-1 overflow-y-auto", children: loading ? /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: "Loading web search providers\u2026" }) : /* @__PURE__ */ jsxs2("div", { className: "space-y-6", children: [
|
|
205
|
+
providers.length > 0 ? /* @__PURE__ */ jsxs2("section", { children: [
|
|
206
|
+
/* @__PURE__ */ jsxs2("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary", children: [
|
|
207
|
+
"Configured \xB7 ",
|
|
208
|
+
providers.length
|
|
209
|
+
] }),
|
|
210
|
+
/* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: providers.map((provider) => /* @__PURE__ */ jsxs2(
|
|
211
|
+
"article",
|
|
212
|
+
{
|
|
213
|
+
className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
|
|
214
|
+
children: [
|
|
215
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
|
|
216
|
+
/* @__PURE__ */ jsx2(
|
|
217
|
+
"span",
|
|
218
|
+
{
|
|
219
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
220
|
+
"aria-hidden": true,
|
|
221
|
+
children: /* @__PURE__ */ jsx2(Icon, { name: "search", className: "size-4.5" })
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0", children: [
|
|
225
|
+
/* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: provider.name }),
|
|
226
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-xs text-text-secondary", children: "Parallel web search" })
|
|
227
|
+
] })
|
|
228
|
+
] }),
|
|
229
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2.5 sm:justify-end", children: [
|
|
230
|
+
/* @__PURE__ */ jsxs2("span", { className: "inline-flex items-center gap-1.5 text-sm font-medium text-success-bg", children: [
|
|
231
|
+
/* @__PURE__ */ jsx2("span", { className: "size-2 rounded-full bg-success-bg", "aria-hidden": true }),
|
|
232
|
+
"Connected"
|
|
233
|
+
] }),
|
|
234
|
+
/* @__PURE__ */ jsx2(
|
|
235
|
+
Button.Secondary,
|
|
236
|
+
{
|
|
237
|
+
size: "small",
|
|
238
|
+
type: "button",
|
|
239
|
+
disabled: busy,
|
|
240
|
+
onClick: () => {
|
|
241
|
+
setFormError(null);
|
|
242
|
+
setCreateEntry(null);
|
|
243
|
+
setUpdateProvider(provider);
|
|
244
|
+
},
|
|
245
|
+
children: "Update"
|
|
246
|
+
}
|
|
247
|
+
)
|
|
248
|
+
] })
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
provider.id
|
|
252
|
+
)) })
|
|
253
|
+
] }) : null,
|
|
254
|
+
!hasConfiguredProvider ? /* @__PURE__ */ jsxs2("section", { children: [
|
|
255
|
+
/* @__PURE__ */ jsxs2("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary", children: [
|
|
256
|
+
"Available \xB7 ",
|
|
257
|
+
availableEntries.length
|
|
258
|
+
] }),
|
|
259
|
+
availableEntries.length === 0 ? /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: catalog.length > 0 ? "All catalog providers are configured." : "No web search providers in the catalog." }) : /* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: availableEntries.map((entry) => /* @__PURE__ */ jsxs2(
|
|
260
|
+
"article",
|
|
261
|
+
{
|
|
262
|
+
className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
|
|
263
|
+
children: [
|
|
264
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
|
|
265
|
+
/* @__PURE__ */ jsx2(
|
|
266
|
+
"span",
|
|
267
|
+
{
|
|
268
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
269
|
+
"aria-hidden": true,
|
|
270
|
+
children: /* @__PURE__ */ jsx2(Icon, { name: "search", className: "size-4.5" })
|
|
271
|
+
}
|
|
272
|
+
),
|
|
273
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0", children: [
|
|
274
|
+
/* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: entry.name }),
|
|
275
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-xs text-text-secondary", children: "Parallel web search" })
|
|
276
|
+
] })
|
|
277
|
+
] }),
|
|
278
|
+
/* @__PURE__ */ jsx2(
|
|
279
|
+
Button.Secondary,
|
|
280
|
+
{
|
|
281
|
+
type: "button",
|
|
282
|
+
disabled: busy,
|
|
283
|
+
onClick: () => {
|
|
284
|
+
setFormError(null);
|
|
285
|
+
setUpdateProvider(null);
|
|
286
|
+
setCreateEntry(entry);
|
|
287
|
+
},
|
|
288
|
+
children: "Configure"
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
entry.id
|
|
294
|
+
)) })
|
|
295
|
+
] }) : null
|
|
296
|
+
] }) }),
|
|
297
|
+
/* @__PURE__ */ jsx2(
|
|
298
|
+
ConfigureWebSearchForm_default,
|
|
299
|
+
{
|
|
300
|
+
open: formOpen,
|
|
301
|
+
onOpenChange: (open) => {
|
|
302
|
+
if (!open) {
|
|
303
|
+
setFormError(null);
|
|
304
|
+
setCreateEntry(null);
|
|
305
|
+
setUpdateProvider(null);
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
onSave: isUpdate ? handleUpdate : handleCreate,
|
|
309
|
+
title: formTitle,
|
|
310
|
+
description: isUpdate ? "Update this web search provider. Leave API key blank to keep the existing key." : "Configure this web search provider. API key is never stored in the catalog.",
|
|
311
|
+
requireApiKey: !isUpdate,
|
|
312
|
+
busy,
|
|
313
|
+
error: formError
|
|
314
|
+
}
|
|
315
|
+
)
|
|
316
|
+
] });
|
|
317
|
+
};
|
|
318
|
+
var WebSearchSettings_default = WebSearchSettings;
|
|
319
|
+
export {
|
|
320
|
+
WebSearchSettings_default as default
|
|
321
|
+
};
|
|
322
|
+
//# sourceMappingURL=WebSearchSettings-BW4CWGRR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/containers/SettingsBuilder/WebSearchSettings.tsx","../src/containers/SettingsBuilder/ConfigureWebSearchForm.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { Icon } from '../../icons/Icon.js';\nimport { useCatalogServer } from '../../server/ServerContext.js';\nimport type { WebSearchProviderBase, WebSearchProviderCatalogEntry } from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\nimport { useToasterOptional } from '../ToasterContainer.js';\nimport ConfigureWebSearchForm, { type WebSearchConfigDraft } from './ConfigureWebSearchForm.js';\n\nconst WebSearchSettings = () => {\n const { webSearchCatalog } = useCatalogServer();\n const toaster = useToasterOptional();\n\n const [providers, setProviders] = useState<WebSearchProviderBase[]>([]);\n const [catalog, setCatalog] = useState<WebSearchProviderCatalogEntry[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [formError, setFormError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const [createEntry, setCreateEntry] = useState<WebSearchProviderCatalogEntry | null>(null);\n const [updateProvider, setUpdateProvider] = useState<WebSearchProviderBase | null>(null);\n\n const refresh = useCallback(\n async ({ quiet = false }: { quiet?: boolean } = {}) => {\n if (!webSearchCatalog) return;\n if (!quiet) setLoading(true);\n setError(null);\n try {\n const [listed, available] = await Promise.all([\n webSearchCatalog.listWebSearchProviders(),\n webSearchCatalog.getWebSearchProviderCatalog(),\n ]);\n setProviders(listed);\n setCatalog(available);\n } catch (err) {\n setError(getErrorMessage(err, 'Failed to load web search providers'));\n } finally {\n if (!quiet) setLoading(false);\n }\n },\n [webSearchCatalog],\n );\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n // Tenant/UI-wide: only one web-search provider may be configured at a time.\n const hasConfiguredProvider = providers.length > 0;\n const availableEntries = useMemo(() => {\n if (hasConfiguredProvider) return [];\n const connectedCatalogIds = new Set(providers.map(provider => provider.catalogId));\n return catalog.filter(entry => !connectedCatalogIds.has(entry.id));\n }, [catalog, providers, hasConfiguredProvider]);\n\n if (!webSearchCatalog) {\n return <p className=\"text-sm text-text-secondary\">Web search provider catalog is not available.</p>;\n }\n\n const runMutation = async (fn: () => Promise<void>, setMutationError = setError) => {\n setBusy(true);\n setError(null);\n try {\n await fn();\n await refresh({ quiet: true });\n } catch (err) {\n setMutationError(getErrorMessage(err, 'Request failed'));\n throw err;\n } finally {\n setBusy(false);\n }\n };\n\n const handleCreate = async (draft: WebSearchConfigDraft) => {\n if (!createEntry) return;\n setFormError(null);\n await runMutation(async () => {\n await webSearchCatalog.createWebSearchProvider({\n catalogId: createEntry.id,\n name: createEntry.name,\n type: createEntry.type,\n apiKey: draft.apiKey,\n });\n }, setFormError);\n setCreateEntry(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${createEntry.name} configured` });\n }, 0);\n };\n\n const handleUpdate = async (draft: WebSearchConfigDraft) => {\n if (!updateProvider) return;\n setFormError(null);\n await runMutation(async () => {\n await webSearchCatalog.updateWebSearchProvider({\n id: updateProvider.id,\n ...(draft.apiKey ? { apiKey: draft.apiKey } : {}),\n });\n }, setFormError);\n setUpdateProvider(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${updateProvider.name} updated` });\n }, 0);\n };\n\n const formOpen = createEntry != null || updateProvider != null;\n const isUpdate = updateProvider != null;\n const formTitle = updateProvider\n ? `Update ${updateProvider.name}`\n : createEntry\n ? `Configure ${createEntry.name}`\n : 'Configure web search provider';\n\n return (\n <>\n <h3 className=\"text-xl font-semibold tracking-tight text-text-primary\">Web search</h3>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Configure a provider so agents can search the web. Only one can be active at a time.\n </p>\n\n {error ? (\n <p className=\"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg\">\n {error}\n </p>\n ) : null}\n\n <div className=\"mt-4 flex-1 overflow-y-auto\">\n {loading ? (\n <p className=\"text-sm text-text-secondary\">Loading web search providers…</p>\n ) : (\n <div className=\"space-y-6\">\n {providers.length > 0 ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Configured · {providers.length}\n </h4>\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {providers.map(provider => (\n <article\n key={provider.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{provider.name}</h5>\n <p className=\"truncate text-xs text-text-secondary\">Parallel web search</p>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2.5 sm:justify-end\">\n <span className=\"inline-flex items-center gap-1.5 text-sm font-medium text-success-bg\">\n <span className=\"size-2 rounded-full bg-success-bg\" aria-hidden />\n Connected\n </span>\n <Button.Secondary\n size=\"small\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(provider);\n }}\n >\n Update\n </Button.Secondary>\n </div>\n </article>\n ))}\n </div>\n </section>\n ) : null}\n\n {!hasConfiguredProvider ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Available · {availableEntries.length}\n </h4>\n {availableEntries.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {catalog.length > 0\n ? 'All catalog providers are configured.'\n : 'No web search providers in the catalog.'}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {availableEntries.map(entry => (\n <article\n key={entry.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{entry.name}</h5>\n <p className=\"truncate text-xs text-text-secondary\">Parallel web search</p>\n </div>\n </div>\n\n <Button.Secondary\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setUpdateProvider(null);\n setCreateEntry(entry);\n }}\n >\n Configure\n </Button.Secondary>\n </article>\n ))}\n </div>\n )}\n </section>\n ) : null}\n </div>\n )}\n </div>\n\n <ConfigureWebSearchForm\n open={formOpen}\n onOpenChange={open => {\n if (!open) {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(null);\n }\n }}\n onSave={isUpdate ? handleUpdate : handleCreate}\n title={formTitle}\n description={\n isUpdate\n ? 'Update this web search provider. Leave API key blank to keep the existing key.'\n : 'Configure this web search provider. API key is never stored in the catalog.'\n }\n requireApiKey={!isUpdate}\n busy={busy}\n error={formError}\n />\n </>\n );\n};\n\nexport default WebSearchSettings;\n","'use client';\n\nimport { useEffect, useState, type FormEvent } from 'react';\n\nimport { auiInputClass } from '../../atoms/lib/inputClasses.js';\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { CenteredModal } from '../../atoms/primitives/CenteredModal.js';\nimport { Icon } from '../../icons/Icon.js';\n\nexport type WebSearchConfigDraft = {\n apiKey: string;\n};\n\ntype ConfigureWebSearchFormProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSave: (draft: WebSearchConfigDraft) => void | Promise<void>;\n title: string;\n description?: string;\n /** When false (updates), empty apiKey means keep the existing key. */\n requireApiKey?: boolean;\n busy?: boolean;\n error?: string | null;\n};\n\nconst inputClassName = auiInputClass('h-11 shadow-sm');\n\nconst ConfigureWebSearchForm = ({\n open,\n onOpenChange,\n onSave,\n title,\n description,\n requireApiKey = true,\n busy = false,\n error,\n}: ConfigureWebSearchFormProps) => {\n const [apiKey, setApiKey] = useState('');\n\n const resetForm = () => {\n setApiKey('');\n };\n\n useEffect(() => {\n if (!open) return;\n setApiKey('');\n }, [open]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) resetForm();\n onOpenChange(nextOpen);\n };\n\n const trimmedKey = apiKey.trim();\n const isValid = !requireApiKey || !!trimmedKey;\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!isValid || busy) return;\n\n try {\n await onSave({ apiKey: trimmedKey });\n resetForm();\n onOpenChange(false);\n } catch {\n // Parent surfaces error; keep form open.\n }\n };\n\n return (\n <CenteredModal\n open={open}\n onOpenChange={handleOpenChange}\n title={title}\n description={description}\n contentSized\n headerIcon={\n <span\n className=\"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-6\" />\n </span>\n }\n >\n <form className=\"flex flex-col overflow-y-auto p-5 md:p-6\" onSubmit={handleSubmit}>\n <div className=\"space-y-4\">\n <div>\n <label htmlFor=\"web-search-api-key\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n API key\n {!requireApiKey ? <span className=\"font-normal text-text-secondary\"> (optional)</span> : null}\n </label>\n <input\n id=\"web-search-api-key\"\n type=\"password\"\n required={requireApiKey}\n value={apiKey}\n onChange={event => {\n setApiKey(event.target.value);\n }}\n placeholder={requireApiKey ? 'Parallel API key' : 'Leave blank to keep existing'}\n autoFocus\n className={inputClassName}\n />\n </div>\n </div>\n\n <div className=\"mt-6 space-y-3\">\n {error ? <p className=\"text-failure-bg text-sm\">{error}</p> : null}\n <Button.Primary type=\"submit\" size=\"large\" disabled={!isValid || busy} className=\"w-full shrink-0\">\n Save\n </Button.Primary>\n </div>\n </form>\n </CenteredModal>\n );\n};\n\nexport default ConfigureWebSearchForm;\n"],"mappings":"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","names":["useEffect","useState","jsx","jsxs","useState","useEffect"]}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
StackChatPanel
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-YN5ZBBQM.js";
|
|
5
|
+
import "./chunk-TFQWCBFQ.js";
|
|
6
|
+
import "./chunk-GHXA46A2.js";
|
|
7
7
|
import {
|
|
8
8
|
useWidgetVisibility
|
|
9
9
|
} from "./chunk-DJUFS2BW.js";
|
|
10
10
|
import "./chunk-BSIPI3KV.js";
|
|
11
11
|
import {
|
|
12
12
|
useSlot
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-AO23SZBG.js";
|
|
13
|
+
} from "./chunk-MLMR26WQ.js";
|
|
15
14
|
import {
|
|
16
15
|
CompactLayoutProvider,
|
|
17
16
|
Icon,
|
|
18
17
|
auiButtonClass
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-TX6PB3DY.js";
|
|
19
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
20
|
+
import "./chunk-7S7A3PNP.js";
|
|
21
21
|
import "./chunk-M6MHLVSO.js";
|
|
22
22
|
import "./chunk-QKFMAQ7O.js";
|
|
23
23
|
import {
|
|
@@ -104,4 +104,4 @@ function WidgetLayout({ className }) {
|
|
|
104
104
|
export {
|
|
105
105
|
WidgetLayout
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=WidgetLayout-
|
|
107
|
+
//# sourceMappingURL=WidgetLayout-WIPKUIL4.js.map
|
|
@@ -56,7 +56,7 @@ function useOptionalRefreshServerCapabilities() {
|
|
|
56
56
|
function useCatalogServer() {
|
|
57
57
|
const server = useServer();
|
|
58
58
|
if (server.catalog == null) {
|
|
59
|
-
throw new Error("useCatalogServer requires AgentUIServer.catalog. Pass catalog to
|
|
59
|
+
throw new Error("useCatalogServer requires AgentUIServer.catalog. Pass catalog to createTrueForgeServer.");
|
|
60
60
|
}
|
|
61
61
|
return server.catalog;
|
|
62
62
|
}
|
|
@@ -86,7 +86,7 @@ function useOptionalAgentMetricsServer() {
|
|
|
86
86
|
function useScheduleServer() {
|
|
87
87
|
const server = useServer();
|
|
88
88
|
if (server.schedules == null) {
|
|
89
|
-
throw new Error("useScheduleServer requires AgentUIServer.schedules. Pass schedules to
|
|
89
|
+
throw new Error("useScheduleServer requires AgentUIServer.schedules. Pass schedules to createTrueForgeServer.");
|
|
90
90
|
}
|
|
91
91
|
return server.schedules;
|
|
92
92
|
}
|
|
@@ -1112,4 +1112,4 @@ export {
|
|
|
1112
1112
|
shellIsCreateAgent,
|
|
1113
1113
|
getErrorMessage
|
|
1114
1114
|
};
|
|
1115
|
-
//# sourceMappingURL=chunk-
|
|
1115
|
+
//# sourceMappingURL=chunk-7S7A3PNP.js.map
|