@datatechsolutions/ui 2.11.83 → 2.11.84
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/dist/astrlabe/index.d.mts +3 -52
- package/dist/astrlabe/index.d.ts +3 -52
- package/dist/astrlabe/index.js +107 -107
- package/dist/astrlabe/index.mjs +4 -4
- package/dist/astrlabe/workflow-canvas.js +4 -4
- package/dist/astrlabe/workflow-canvas.mjs +3 -3
- package/dist/chunk-3T2WGL47.js +44 -0
- package/dist/chunk-3T2WGL47.js.map +1 -0
- package/dist/{chunk-UVGMKHWH.mjs → chunk-63AL2RN5.mjs} +4 -4
- package/dist/{chunk-UVGMKHWH.mjs.map → chunk-63AL2RN5.mjs.map} +1 -1
- package/dist/chunk-64G2HBRQ.mjs +481 -0
- package/dist/chunk-64G2HBRQ.mjs.map +1 -0
- package/dist/{chunk-J3OYJ44D.mjs → chunk-BH2AU3LG.mjs} +3 -3
- package/dist/{chunk-J3OYJ44D.mjs.map → chunk-BH2AU3LG.mjs.map} +1 -1
- package/dist/chunk-CCRBT7TA.mjs +941 -0
- package/dist/chunk-CCRBT7TA.mjs.map +1 -0
- package/dist/chunk-CHLJUSXX.mjs +128 -0
- package/dist/chunk-CHLJUSXX.mjs.map +1 -0
- package/dist/chunk-CXIQWPBH.js +214 -0
- package/dist/chunk-CXIQWPBH.js.map +1 -0
- package/dist/chunk-EDE36MKE.mjs +412 -0
- package/dist/chunk-EDE36MKE.mjs.map +1 -0
- package/dist/{chunk-M7P2TQ6X.js → chunk-EFREXNZB.js} +64 -64
- package/dist/{chunk-M7P2TQ6X.js.map → chunk-EFREXNZB.js.map} +1 -1
- package/dist/chunk-FAGDZEKM.js +23 -0
- package/dist/chunk-FAGDZEKM.js.map +1 -0
- package/dist/{chunk-TUEYBNWL.js → chunk-GV6WJCEB.js} +3 -3
- package/dist/{chunk-TUEYBNWL.js.map → chunk-GV6WJCEB.js.map} +1 -1
- package/dist/chunk-HU3EAHFO.mjs +20 -0
- package/dist/chunk-HU3EAHFO.mjs.map +1 -0
- package/dist/{chunk-LLFU42KC.mjs → chunk-I6WYV2AN.mjs} +3 -3
- package/dist/{chunk-LLFU42KC.mjs.map → chunk-I6WYV2AN.mjs.map} +1 -1
- package/dist/chunk-JJWFMKZY.js +132 -0
- package/dist/chunk-JJWFMKZY.js.map +1 -0
- package/dist/{chunk-JFWZHROG.js → chunk-L6FVIWAJ.js} +128 -128
- package/dist/{chunk-JFWZHROG.js.map → chunk-L6FVIWAJ.js.map} +1 -1
- package/dist/chunk-MNQEZL7B.mjs +210 -0
- package/dist/chunk-MNQEZL7B.mjs.map +1 -0
- package/dist/chunk-SGJ24J2Q.js +943 -0
- package/dist/chunk-SGJ24J2Q.js.map +1 -0
- package/dist/chunk-SW6TVAIJ.js +418 -0
- package/dist/chunk-SW6TVAIJ.js.map +1 -0
- package/dist/chunk-SYNVNTLJ.mjs +20 -0
- package/dist/chunk-SYNVNTLJ.mjs.map +1 -0
- package/dist/chunk-UQXVCVAN.mjs +41 -0
- package/dist/chunk-UQXVCVAN.mjs.map +1 -0
- package/dist/chunk-WGELLCOZ.js +22 -0
- package/dist/chunk-WGELLCOZ.js.map +1 -0
- package/dist/chunk-YXPHJ2BQ.js +541 -0
- package/dist/chunk-YXPHJ2BQ.js.map +1 -0
- package/dist/index.d.mts +3 -47
- package/dist/index.d.ts +3 -47
- package/dist/index.js +765 -765
- package/dist/index.mjs +2 -2
- package/dist/navigation-BiWVffAN.d.mts +49 -0
- package/dist/navigation-BiWVffAN.d.ts +49 -0
- package/dist/platform/agents-workspace.d.mts +19 -0
- package/dist/platform/agents-workspace.d.ts +19 -0
- package/dist/platform/agents-workspace.js +26 -0
- package/dist/platform/agents-workspace.js.map +1 -0
- package/dist/platform/agents-workspace.mjs +17 -0
- package/dist/platform/agents-workspace.mjs.map +1 -0
- package/dist/platform/app-shell.d.mts +58 -0
- package/dist/platform/app-shell.d.ts +58 -0
- package/dist/platform/app-shell.js +17 -0
- package/dist/platform/app-shell.js.map +1 -0
- package/dist/platform/app-shell.mjs +8 -0
- package/dist/platform/app-shell.mjs.map +1 -0
- package/dist/platform/index.d.mts +100 -3
- package/dist/platform/index.d.ts +100 -3
- package/dist/platform/index.js +499 -28
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.mjs +472 -27
- package/dist/platform/index.mjs.map +1 -1
- package/dist/platform/pages/index.d.mts +243 -82
- package/dist/platform/pages/index.d.ts +243 -82
- package/dist/platform/pages/index.js +886 -614
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +756 -511
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/utils/index.js +18 -56
- package/dist/platform/utils/index.js.map +1 -1
- package/dist/platform/utils/index.mjs +3 -53
- package/dist/platform/utils/index.mjs.map +1 -1
- package/dist/platform/workflow-api-client.d.mts +6 -0
- package/dist/platform/workflow-api-client.d.ts +6 -0
- package/dist/platform/workflow-api-client.js +246 -0
- package/dist/platform/workflow-api-client.js.map +1 -0
- package/dist/platform/workflow-api-client.mjs +5 -0
- package/dist/platform/workflow-api-client.mjs.map +1 -0
- package/dist/platform/workflow-canvas-shell.d.mts +18 -0
- package/dist/platform/workflow-canvas-shell.d.ts +18 -0
- package/dist/platform/workflow-canvas-shell.js +20 -0
- package/dist/platform/workflow-canvas-shell.js.map +1 -0
- package/dist/platform/workflow-canvas-shell.mjs +11 -0
- package/dist/platform/workflow-canvas-shell.mjs.map +1 -0
- package/dist/{rule-form-F5jBOeqk.d.mts → rule-form-BYJzyork.d.mts} +50 -1
- package/dist/{rule-form-F5jBOeqk.d.ts → rule-form-BYJzyork.d.ts} +50 -1
- package/dist/workflow-api-client-C8gPn_D1.d.mts +386 -0
- package/dist/workflow-api-client-Dy1Ph8W-.d.ts +386 -0
- package/package.json +21 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/platform/session-switcher.tsx","../../src/platform/platform-state-provider.tsx","../../src/platform/windsock-mappers.ts"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Select, Button } from '@ui/index'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { SessionSwitcherProps } from '@datatechsolutions/shared-domain/common'\n\nexport function SessionSwitcher({\n organizations,\n users,\n organizationId,\n userEmail,\n onOrganizationChange,\n onUserChange,\n}: SessionSwitcherProps) {\n const tSession = useTranslations('platform.session')\n const tCommon = useTranslations('common')\n\n return (\n <div className=\"session-switcher\">\n <Select\n value={organizationId}\n aria-label={tSession('organization')}\n onChange={(event) => {\n onOrganizationChange(event.target.value)\n }}\n options={organizations}\n placeholder={tSession('organization')}\n />\n <Select\n value={userEmail}\n aria-label={tSession('user')}\n onChange={(event) => {\n onUserChange(event.target.value)\n }}\n options={users}\n placeholder={tSession('user')}\n />\n <Button outline onClick={() => globalThis.location.reload()}>\n {tCommon('refresh')}\n </Button>\n </div>\n )\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useAuth, type AuthUser } from '@datatechsolutions/windsock/client'\n\ntype PlatformState = {\n currentOrganizationId: string\n actor: AuthUser | null\n}\n\nconst PlatformStateContext = createContext<PlatformState | null>(null)\n\nexport type PlatformStateProviderProps = {\n children: ReactNode\n /**\n * Function that converts a JWT role claim to the app's canonical role\n * union (the same `normalizePlatformRole` produced by\n * `createPlatformRbac()` in this app). Lifted out as a prop because\n * each consuming app uses its own role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport function PlatformStateProvider({ children, normalizeRole }: PlatformStateProviderProps) {\n const { user } = useAuth()\n\n const state = useMemo<PlatformState>(() => {\n const organizationId = user?.organizationId ?? ''\n\n const actor: AuthUser | null = user\n ? {\n ...user,\n role: normalizeRole(user.role),\n organizationId,\n }\n : null\n\n return {\n currentOrganizationId: organizationId,\n actor,\n }\n }, [user, normalizeRole])\n\n return (\n <PlatformStateContext.Provider value={state}>\n {children}\n </PlatformStateContext.Provider>\n )\n}\n\nexport function usePlatformState() {\n const context = useContext(PlatformStateContext)\n if (!context) throw new Error('usePlatformState must be used inside PlatformStateProvider')\n return context\n}\n","import type {\n AdminUserSummary,\n AuthOrganization,\n} from '@datatechsolutions/shared-domain'\nimport type { ManagedUser, Organization, UserRole } from '@datatechsolutions/shared-domain/common'\n\n/** Maps a windsock AuthOrganization to the app-level Organization shape used by UI pages. */\nexport function mapAuthOrg(raw: AuthOrganization): Organization {\n return {\n id: raw.id,\n name: raw.displayName ?? raw.name,\n currency: 'BRL',\n country: 'BR',\n } as Organization\n}\n\n/**\n * Maps a windsock AdminUserSummary to the app-level ManagedUser shape.\n * Takes `normalizeRole` as a parameter so each consuming app can plug in\n * the role normalizer produced by its own `createPlatformRbac()` call —\n * we deliberately don't hardcode an app-specific role enum here.\n */\nexport function mapAdminUser(\n row: AdminUserSummary,\n normalizeRole: (input: unknown) => string,\n): ManagedUser {\n return {\n id: row.id,\n email: row.email,\n name: row.name ?? row.email,\n role: normalizeRole(row.role) as UserRole,\n active: row.status === 'active',\n }\n}\n\n/** Maps an app-level UserRole to a windsock AuthOrganizationRole. */\nexport const ORG_ROLE_MAP: Record<string, 'owner' | 'admin' | 'member' | 'viewer'> = {\n owner: 'owner',\n admin: 'admin',\n manager: 'admin',\n analyst: 'member',\n operator: 'member',\n viewer: 'viewer',\n finance: 'member',\n sales: 'member',\n support: 'member',\n member: 'member',\n}\n\nexport function mapRoleToOrgRole(role: string): 'owner' | 'admin' | 'member' | 'viewer' {\n return ORG_ROLE_MAP[role] ?? 'member'\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/platform/session-switcher.tsx","../../src/platform/dock-container.tsx","../../src/hooks/use-locale-switcher.ts","../../src/platform/preferences-controls.tsx","../../src/platform/windsock-mappers.ts","../../src/platform/admin-settings-sections.tsx","../../src/platform/ai-workflow-generate-modal.tsx","../../src/platform/workflow-template-modal.tsx"],"names":["jsxs","jsx","useWindsockAuth","useCallback","SUPPORTED_LOCALES","usePlatformPreferences","useState","useEffect","useMemo","Fragment"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Select, Button } from '@ui/index'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { SessionSwitcherProps } from '@datatechsolutions/shared-domain/common'\n\nexport function SessionSwitcher({\n organizations,\n users,\n organizationId,\n userEmail,\n onOrganizationChange,\n onUserChange,\n}: SessionSwitcherProps) {\n const tSession = useTranslations('platform.session')\n const tCommon = useTranslations('common')\n\n return (\n <div className=\"session-switcher\">\n <Select\n value={organizationId}\n aria-label={tSession('organization')}\n onChange={(event) => {\n onOrganizationChange(event.target.value)\n }}\n options={organizations}\n placeholder={tSession('organization')}\n />\n <Select\n value={userEmail}\n aria-label={tSession('user')}\n onChange={(event) => {\n onUserChange(event.target.value)\n }}\n options={users}\n placeholder={tSession('user')}\n />\n <Button outline onClick={() => globalThis.location.reload()}>\n {tCommon('refresh')}\n </Button>\n </div>\n )\n}\n","import { useMemo, useState, useCallback } from 'react'\nimport { useAuth, usePlatformPreferences } from '@datatechsolutions/windsock/client'\nimport type { AuthUser } from '@datatechsolutions/windsock/client'\nimport {\n AppNavigation,\n filterByPermission,\n GlassModal,\n type NavigationItem,\n} from '@ui/index'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { usePathname, useRouter } from '@ui/lib/router-context'\n\nexport type PlatformDockContainerProps = {\n /** JWT-derived actor used for permission filtering. */\n actor: AuthUser | null\n /** App-specific navigation items (already translated). */\n navigationItems: NavigationItem[]\n /**\n * Pathname where the dock should be hidden (defaults to `/dashboard`).\n * The dashboard typically owns its own navigation chrome.\n */\n dashboardPath?: string\n /** Path to redirect to on sign-out (defaults to `/login`). */\n signOutPath?: string\n}\n\n/**\n * Floating dock + profile-modal trigger shared by every platform app.\n * Reads the active route from ui's router context and uses windsock for\n * preferences + sign-out, so the consumer only has to wire up navigation\n * items + an optional dashboard/sign-out path.\n */\nexport function PlatformDockContainer({\n actor,\n navigationItems,\n dashboardPath = '/dashboard',\n signOutPath = '/login',\n}: PlatformDockContainerProps) {\n const pathname = usePathname()\n const router = useRouter()\n const { logout } = useAuth()\n const tCommon = useTranslations('common')\n const {\n dockPosition,\n dockAutoHide,\n dockEnabled,\n } = usePlatformPreferences()\n const [profileOpen, setProfileOpen] = useState(false)\n\n const filteredItems = useMemo(\n () => filterByPermission(navigationItems, (actor as { permissions?: string[] } | null)?.permissions ?? []),\n [navigationItems, actor],\n )\n\n const handleNavigate = useCallback((href: string) => router.push(href), [router])\n const handleSignOut = useCallback(() => { void logout(signOutPath) }, [logout, signOutPath])\n\n if (pathname === dashboardPath) return null\n\n return (\n <>\n <AppNavigation\n items={filteredItems}\n pathname={pathname}\n dockEnabled={dockEnabled}\n dockPosition={dockPosition as 'left' | 'right' | 'bottom'}\n dockAutoHide={dockAutoHide}\n showLaunchpad={false}\n onNavigate={handleNavigate}\n onOpenProfile={() => setProfileOpen(true)}\n onSignOut={handleSignOut}\n labels={{\n home: tCommon('home'),\n profile: tCommon('profile'),\n signOut: tCommon('signOut'),\n }}\n />\n <GlassModal\n open={profileOpen}\n onClose={() => setProfileOpen(false)}\n title={tCommon('profile')}\n >\n <div />\n </GlassModal>\n </>\n )\n}\n","import { useCallback } from 'react'\nimport { useAuth as useWindsockAuth } from '@datatechsolutions/windsock/client'\nimport type { LocaleCode } from '@datatechsolutions/shared-domain/common'\nimport {\n applyClientLocale,\n LOCALE_TO_SHORT,\n SUPPORTED_LOCALES,\n} from '@datatechsolutions/shared-domain/i18n'\nimport { useLocale } from '@ui/lib/i18n-context'\n\n/**\n * Locale switcher hook — reads the current locale from the i18n context and\n * pushes the user's choice through windsock so the next session inherits it.\n *\n * Lifted from astrlabe; consumers (astrlabe, kori-erp) wrap their tree in\n * `<I18nProvider>` + windsock's `<AuthProvider>` and import this directly.\n */\nexport function useLocaleSwitcher() {\n const locale = useLocale() as LocaleCode\n const { client } = useWindsockAuth()\n\n const setLocale = useCallback(\n (newLocale: LocaleCode | string) => {\n const resolved = applyClientLocale(newLocale)\n client.updateLocale(resolved)\n },\n [client],\n )\n\n return {\n locale,\n shortCode: LOCALE_TO_SHORT[locale] || 'pt',\n setLocale,\n locales: SUPPORTED_LOCALES,\n }\n}\n","import { MoonIcon, SunIcon } from '@heroicons/react/24/outline'\nimport { Select, IconButton } from '@ui/index'\nimport { SUPPORTED_LOCALES, LANGUAGE_META } from '@datatechsolutions/shared-domain/i18n'\nimport { usePlatformPreferences } from '@datatechsolutions/windsock/client'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { useLocaleSwitcher } from '@ui/hooks/use-locale-switcher'\n\nconst LOCALE_OPTIONS = SUPPORTED_LOCALES.map((code) => ({\n value: code,\n label: LANGUAGE_META[code].nativeName,\n}))\n\n/**\n * Locale + theme controls used inside the platform preferences drawer.\n * Reads the active locale from the i18n context and the theme/dock\n * preferences from windsock — both shared providers consuming apps must\n * mount above this component.\n */\nexport function PreferencesControls() {\n const { locale, setLocale } = useLocaleSwitcher()\n const { theme, setTheme } = usePlatformPreferences()\n const toggleTheme = () => setTheme(theme === 'dark' ? 'light' : 'dark')\n const t = useTranslations('platform.preferences')\n\n return (\n <div className=\"preferences-controls\">\n <Select\n value={locale}\n options={LOCALE_OPTIONS}\n onChange={(event) => setLocale(event.target.value)}\n />\n <IconButton\n label={t('theme')}\n icon={theme === 'dark' ? <SunIcon /> : <MoonIcon />}\n onClick={toggleTheme}\n variant=\"outline\"\n />\n </div>\n )\n}\n","import type {\n AdminUserSummary,\n AuthOrganization,\n} from '@datatechsolutions/shared-domain'\nimport type { ManagedUser, Organization, UserRole } from '@datatechsolutions/shared-domain/common'\n\n/** Maps a windsock AuthOrganization to the app-level Organization shape used by UI pages. */\nexport function mapAuthOrg(raw: AuthOrganization): Organization {\n return {\n id: raw.id,\n name: raw.displayName ?? raw.name,\n currency: 'BRL',\n country: 'BR',\n } as Organization\n}\n\n/**\n * Maps a windsock AdminUserSummary to the app-level ManagedUser shape.\n * Takes `normalizeRole` as a parameter so each consuming app can plug in\n * the role normalizer produced by its own `createPlatformRbac()` call —\n * we deliberately don't hardcode an app-specific role enum here.\n */\nexport function mapAdminUser(\n row: AdminUserSummary,\n normalizeRole: (input: unknown) => string,\n): ManagedUser {\n return {\n id: row.id,\n email: row.email,\n name: row.name ?? row.email,\n role: normalizeRole(row.role) as UserRole,\n active: row.status === 'active',\n }\n}\n\n/** Maps an app-level UserRole to a windsock AuthOrganizationRole. */\nexport const ORG_ROLE_MAP: Record<string, 'owner' | 'admin' | 'member' | 'viewer'> = {\n owner: 'owner',\n admin: 'admin',\n manager: 'admin',\n analyst: 'member',\n operator: 'member',\n viewer: 'viewer',\n finance: 'member',\n sales: 'member',\n support: 'member',\n member: 'member',\n}\n\nexport function mapRoleToOrgRole(role: string): 'owner' | 'admin' | 'member' | 'viewer' {\n return ORG_ROLE_MAP[role] ?? 'member'\n}\n","import { useEffect, useState } from 'react'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport { useNotifications } from '@ui/components/notifications'\nimport type { ManagedUser } from '@datatechsolutions/shared-domain/common'\nimport {\n listUsers,\n createUser as createUserApi,\n addOrganizationMember,\n} from './windsock-admin-client'\nimport { mapAdminUser, mapRoleToOrgRole } from './windsock-mappers'\nimport { UsersPageView } from './pages/users-page-view'\nimport { RolesPageView } from './pages/roles-page-view'\nimport { usePlatformState } from './platform-state-provider'\nimport type { PlatformRoleDefinition } from './rbac'\n\nexport type UsersSettingsSectionProps = {\n /**\n * Role normalizer produced by each app's `createPlatformRbac()` call.\n * Used to coerce JWT role strings into the app's canonical role enum.\n */\n normalizeRole: (input: unknown) => string\n}\n\nexport type RolesSettingsSectionProps = UsersSettingsSectionProps & {\n /** App-defined role definitions (from `createPlatformRbac`). */\n roleDefinitions: Record<string, PlatformRoleDefinition<string>>\n /** Display options for the role-assignment select. */\n roleOptions: Array<{ value: string; label: string }>\n}\n\nexport function UsersSettingsSection({ normalizeRole }: UsersSettingsSectionProps) {\n const t = useTranslations('platform.users')\n const { currentOrganizationId } = usePlatformState()\n const { error: notifyError, success: notifySuccess } = useNotifications()\n const [users, setUsers] = useState<ManagedUser[]>([])\n const [loading, setLoading] = useState(true)\n\n const reload = async () => {\n try {\n const result = await listUsers({ organizationId: currentOrganizationId })\n setUsers(result.items.map((row) => mapAdminUser(row, normalizeRole)))\n } catch (error) {\n notifyError((error as Error).message)\n } finally {\n setLoading(false)\n }\n }\n\n useEffect(() => {\n void reload()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentOrganizationId])\n\n return (\n <UsersPageView\n labels={{\n title: t('title'),\n subtitle: t('subtitle'),\n create: t('create'),\n list: t('list'),\n add: t('add'),\n statusActive: t('statusActive'),\n statusInactive: t('statusInactive'),\n name: t('name'),\n email: t('email'),\n role: t('role'),\n status: t('status'),\n save: t('save'),\n userNamePlaceholder: t('userNamePlaceholder'),\n userEmailPlaceholder: t('userEmailPlaceholder'),\n }}\n users={loading ? [] : users}\n onCreateUser={async ({ name, email, role }) => {\n try {\n await createUserApi({ name, email, role: role as never, organizationId: currentOrganizationId })\n notifySuccess(t('add'))\n await reload()\n } catch (error) {\n notifyError((error as Error).message)\n }\n }}\n onUpdateRole={() => {\n notifyError(t('reassignInRolesTab'))\n }}\n />\n )\n}\n\nexport function RolesSettingsSection({ roleDefinitions, roleOptions, normalizeRole }: RolesSettingsSectionProps) {\n const t = useTranslations('platform.roles')\n const { currentOrganizationId } = usePlatformState()\n const { error: notifyError, success: notifySuccess } = useNotifications()\n const [users, setUsers] = useState<ManagedUser[]>([])\n\n useEffect(() => {\n listUsers({ organizationId: currentOrganizationId })\n .then((result) => setUsers(result.items.map((row) => mapAdminUser(row, normalizeRole))))\n .catch((error: Error) => notifyError(error.message))\n }, [currentOrganizationId, notifyError, normalizeRole])\n\n return (\n <RolesPageView\n roleDefinitions={roleDefinitions}\n roleOptions={roleOptions}\n labels={{\n title: t('title'),\n subtitle: t('subtitle'),\n definitions: t('definitions'),\n assign: t('assign'),\n current: t('current'),\n permissionsEnabled: t('permissionsEnabled'),\n apply: t('apply'),\n role: t('role'),\n description: t('description'),\n user: t('user'),\n email: t('email'),\n userEmail: t('userEmail'),\n }}\n users={users}\n onAssignRole={async ({ email, role }) => {\n const target = users.find((user) => user.email.toLowerCase() === email.toLowerCase())\n if (!target) {\n notifyError(t('userNotFound'))\n return\n }\n try {\n await addOrganizationMember(currentOrganizationId, target.id, mapRoleToOrgRole(role))\n notifySuccess(t('apply'))\n } catch (error) {\n notifyError((error as Error).message)\n }\n }}\n />\n )\n}\n","import { useEffect, useState } from 'react'\nimport { GlassModal, Textarea } from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport type { Workflow } from '@ui/astrlabe/contracts'\nimport {\n aiGenerateWorkflow,\n createWorkflow,\n listModelProviderConnections,\n saveWorkflowDraft,\n type ModelProviderConnection,\n} from './workflow-api-client'\n\ninterface Props {\n open: boolean\n onClose: () => void\n onGenerated: (workflow: Workflow) => void\n}\n\n/**\n * Minimal NL → graph generator surface. Lets the user pick one of the\n * org's model provider connections, enter a prompt, and produces a\n * Workflow row whose `graph` is the LLM's output. The caller navigates\n * the editor to the new workflow once generation succeeds — validation\n * issues are surfaced as notifications so the user can iterate.\n */\nexport function AiWorkflowGenerateModal({ open, onClose, onGenerated }: Props) {\n const { error: notifyError, success: notifySuccess } = useNotifications()\n const t = useTranslations('agents.workflow')\n const [connections, setConnections] = useState<ModelProviderConnection[]>([])\n const [connectionId, setConnectionId] = useState('')\n const [prompt, setPrompt] = useState('')\n const [busy, setBusy] = useState(false)\n\n useEffect(() => {\n if (!open) return\n listModelProviderConnections()\n .then((items) => {\n setConnections(items)\n const firstEnabled = items.find((item) => item.enabled) ?? items[0]\n setConnectionId(firstEnabled?.id ?? '')\n })\n .catch((error: Error) => notifyError(error.message))\n }, [open, notifyError])\n\n async function handleSubmit() {\n if (!connectionId) { notifyError(t('aiErrorMissingConnection')); return }\n if (prompt.trim().length === 0) { notifyError(t('aiErrorMissingPrompt')); return }\n setBusy(true)\n try {\n const generation = await aiGenerateWorkflow({ prompt: prompt.trim(), connectionId })\n const workflow = await createWorkflow({ name: deriveWorkflowName(prompt) })\n const saved = await saveWorkflowDraft(workflow.id, generation.graph, { name: workflow.name })\n if (!generation.ok) {\n notifyError(\n t('aiWarnValidation'),\n [...generation.structuralIssues, ...generation.nodeIssues.map((issue) => `${issue.nodeId}: ${issue.message}`)].join('\\n'),\n )\n } else {\n notifySuccess(t('aiSuccessGenerated'))\n }\n onGenerated(saved)\n onClose()\n setPrompt('')\n } catch (error) {\n notifyError((error as Error).message)\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <GlassModal\n open={open}\n onClose={onClose}\n title={t('aiTitle')}\n subtitle={t('aiSubtitle')}\n onSubmit={handleSubmit}\n showFormFooter\n submitLabel={busy ? t('aiGenerateBusy') : t('aiGenerate')}\n cancelLabel={t('aiCancel')}\n submitDisabled={busy}\n isLoading={busy}\n >\n <div className=\"space-y-4\">\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-200\">\n {t('aiConnection')}\n <select\n className=\"mt-1 w-full rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm text-slate-900 dark:border-white/10 dark:bg-white/5 dark:text-slate-100\"\n value={connectionId}\n onChange={(event) => setConnectionId(event.target.value)}\n disabled={busy}\n >\n <option value=\"\">{t('aiConnectionPlaceholder')}</option>\n {connections.map((connection) => (\n <option key={connection.id} value={connection.id}>\n {connection.name} {connection.enabled ? '' : t('aiDisabledSuffix')}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"block text-sm font-medium text-slate-700 dark:text-slate-200\">\n {t('aiPromptLabel')}\n <Textarea\n rows={6}\n className=\"mt-1 w-full\"\n placeholder={t('aiPromptPlaceholder')}\n value={prompt}\n onChange={(event) => setPrompt(event.target.value)}\n disabled={busy}\n />\n </label>\n\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {t('aiFooterNote')}\n </p>\n </div>\n </GlassModal>\n )\n}\n\nfunction deriveWorkflowName(prompt: string): string {\n const trimmed = prompt.trim().replace(/\\s+/g, ' ')\n if (trimmed.length <= 60) return trimmed\n return `${trimmed.slice(0, 57)}…`\n}\n","/**\n * WorkflowTemplateModal\n * =====================\n *\n * Lets the user instantiate a pre-built workflow template (e.g. the\n * fuel-pricing dashboard flow) from the workflows list page. The template\n * requires a `connectionId` that references one of the org's\n * `model_provider_connections` rows — we load the list on open so the\n * picker is always fresh.\n *\n * Why not inline in `workflows-page-client.tsx`? Two reasons:\n * 1. Keeps the modal focused: one component, one responsibility.\n * 2. Makes the flow testable end-to-end without mounting the whole page.\n */\n\n'use client'\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { GlassModal } from '@ui/index'\nimport { useNotifications } from '@ui/components/notifications'\nimport { useTranslations } from '@ui/lib/i18n-context'\nimport {\n createWorkflowFromTemplate,\n listModelProviderConnections,\n listWorkflowTemplates,\n type ModelProviderConnection,\n type WorkflowTemplateSummary,\n} from './workflow-api-client'\nimport type { Workflow } from '@ui/astrlabe/contracts'\n\nexport interface WorkflowTemplateModalProps {\n open: boolean\n onClose: () => void\n onCreated: (workflow: Workflow) => void\n}\n\nexport function WorkflowTemplateModal({ open, onClose, onCreated }: WorkflowTemplateModalProps) {\n const tWorkflow = useTranslations('agents.workflow')\n const tCommon = useTranslations('common')\n const { error: notifyError, success: notifySuccess } = useNotifications()\n\n const [templates, setTemplates] = useState<WorkflowTemplateSummary[]>([])\n const [connections, setConnections] = useState<ModelProviderConnection[]>([])\n const [templateId, setTemplateId] = useState<string>('')\n const [connectionId, setConnectionId] = useState<string>('')\n const [name, setName] = useState<string>('')\n const [isLoading, setIsLoading] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n // Load templates + connections when the modal opens. Clear prior state so\n // reopening feels fresh.\n useEffect(() => {\n if (!open) return\n let cancelled = false\n setIsLoading(true)\n setTemplateId('')\n setConnectionId('')\n setName('')\n ;(async () => {\n try {\n const [tpls, conns] = await Promise.all([\n listWorkflowTemplates(),\n listModelProviderConnections(),\n ])\n if (cancelled) return\n setTemplates(tpls)\n setConnections(conns)\n if (tpls.length > 0) {\n const firstTemplate = tpls[0]\n if (firstTemplate) setTemplateId(firstTemplate.id)\n }\n if (conns.length > 0) {\n const firstConnection = conns[0]\n if (firstConnection) setConnectionId(firstConnection.id)\n }\n } catch (error) {\n if (!cancelled) notifyError((error as Error).message)\n } finally {\n if (!cancelled) setIsLoading(false)\n }\n })()\n return () => {\n cancelled = true\n }\n }, [open, notifyError])\n\n const selectedTemplate = useMemo(\n () => templates.find((t) => t.id === templateId),\n [templates, templateId],\n )\n\n const canSubmit =\n !isLoading && !isSubmitting && templateId.length > 0 && connectionId.length > 0\n\n const handleSubmit = useCallback(async () => {\n if (!canSubmit) return\n setIsSubmitting(true)\n try {\n const created = await createWorkflowFromTemplate(templateId, {\n connectionId,\n name: name.trim().length > 0 ? name.trim() : undefined,\n })\n notifySuccess(tWorkflow('templateCreatedSuccess'))\n onCreated(created)\n onClose()\n } catch (error) {\n notifyError((error as Error).message)\n } finally {\n setIsSubmitting(false)\n }\n }, [canSubmit, templateId, connectionId, name, onCreated, onClose, notifySuccess, notifyError, tWorkflow])\n\n return (\n <GlassModal\n open={open}\n onClose={onClose}\n title={tWorkflow('createFromTemplate')}\n subtitle={selectedTemplate?.description ?? tWorkflow('createFromTemplateSubtitle')}\n gradient=\"from-indigo-500 to-purple-600\"\n showFormFooter\n onSubmit={(event) => {\n event.preventDefault()\n void handleSubmit()\n }}\n isLoading={isSubmitting}\n submitDisabled={!canSubmit}\n submitLabel={tCommon('create')}\n cancelLabel={tCommon('cancel')}\n maxWidth=\"lg\"\n >\n <div className=\"space-y-4\">\n {isLoading ? (\n <div className=\"shimmer h-32 w-full rounded-xl\" />\n ) : templates.length === 0 ? (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {tWorkflow('noTemplatesAvailable')}\n </p>\n ) : (\n <>\n <label className=\"block\">\n <span className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {tWorkflow('template')}\n </span>\n <select\n className=\"w-full rounded-lg border border-white/20 bg-white/70 px-3 py-2 text-sm text-gray-900 shadow-sm backdrop-blur dark:bg-gray-800/70 dark:text-gray-100\"\n value={templateId}\n onChange={(event) => setTemplateId(event.target.value)}\n >\n {templates.map((template) => (\n <option key={template.id} value={template.id}>\n {template.name}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"block\">\n <span className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {tWorkflow('llmConnection')}\n </span>\n {connections.length === 0 ? (\n <p className=\"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200\">\n {tWorkflow('noConnectionsHint')}\n </p>\n ) : (\n <select\n className=\"w-full rounded-lg border border-white/20 bg-white/70 px-3 py-2 text-sm text-gray-900 shadow-sm backdrop-blur dark:bg-gray-800/70 dark:text-gray-100\"\n value={connectionId}\n onChange={(event) => setConnectionId(event.target.value)}\n >\n {connections.map((connection) => (\n <option key={connection.id} value={connection.id}>\n {connection.name}\n {connection.providerSlug ? ` · ${connection.providerSlug}` : ''}\n </option>\n ))}\n </select>\n )}\n </label>\n\n <label className=\"block\">\n <span className=\"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300\">\n {tWorkflow('workflowName')}\n <span className=\"ml-1 text-[10px] text-gray-400\">\n ({tCommon('optional')})\n </span>\n </span>\n <input\n type=\"text\"\n value={name}\n placeholder={selectedTemplate?.name ?? ''}\n onChange={(event) => setName(event.target.value)}\n className=\"w-full rounded-lg border border-white/20 bg-white/70 px-3 py-2 text-sm text-gray-900 shadow-sm backdrop-blur dark:bg-gray-800/70 dark:text-gray-100\"\n />\n </label>\n\n {selectedTemplate && selectedTemplate.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {selectedTemplate.tags.map((tag) => (\n <span\n key={tag}\n className=\"rounded-full bg-indigo-500/10 px-2 py-0.5 text-[10px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300\"\n >\n {tag}\n </span>\n ))}\n </div>\n ) : null}\n </>\n )}\n </div>\n </GlassModal>\n )\n}\n"]}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { UsersPageViewProps, DataSource } from '@datatechsolutions/shared-domain/common';
|
|
3
|
-
import { AgentModel, AgentTool, AgentRule } from '../../astrlabe/contracts.mjs';
|
|
2
|
+
import { UsersPageViewProps, DataSource, RolesPageViewProps, WorkflowsPageViewProps } from '@datatechsolutions/shared-domain/common';
|
|
3
|
+
import { AgentModel, AgentTool, AgentRule, WorkflowRun, ModelProviderType } from '../../astrlabe/contracts.mjs';
|
|
4
4
|
import { A as AgentWithPrompts } from '../../index-AioB90qq.mjs';
|
|
5
5
|
import { AgentPrompt } from '@datatechsolutions/shared-domain/ports/workflow';
|
|
6
|
-
import { R as RuleFormValue } from '../../rule-form-
|
|
6
|
+
import { R as RuleFormValue, E as ExecutionTimelineLabels } from '../../rule-form-BYJzyork.mjs';
|
|
7
|
+
import { D as DatasourceFormData, A as AnalyticsSummary, R as RunTimelineEntry, M as ModelProviderConnection } from '../../workflow-api-client-C8gPn_D1.mjs';
|
|
8
|
+
export { a as DIALECT_CATEGORIES, b as DatasourceFormModal, c as DatasourceFormModalProps, d as DatasourceModal, e as DatasourceModalProps, f as findCategory, g as findDialect } from '../../workflow-api-client-C8gPn_D1.mjs';
|
|
9
|
+
import { ReactNode } from 'react';
|
|
10
|
+
import { PlatformRoleDefinition } from '../rbac.mjs';
|
|
11
|
+
import { SecretSummary } from '../windsock-admin-client.mjs';
|
|
12
|
+
import '@datatechsolutions/windsock/client';
|
|
13
|
+
import '@datatechsolutions/shared-domain';
|
|
7
14
|
|
|
8
15
|
declare function UsersPageView({ labels, users, onCreateUser, onUpdateRole }: UsersPageViewProps): react_jsx_runtime.JSX.Element;
|
|
9
16
|
|
|
@@ -15,12 +22,12 @@ type AgentsModelsLabels = {
|
|
|
15
22
|
disabled: string;
|
|
16
23
|
empty: string;
|
|
17
24
|
};
|
|
18
|
-
type Props$
|
|
25
|
+
type Props$9 = {
|
|
19
26
|
labels: AgentsModelsLabels;
|
|
20
27
|
models: AgentModel[];
|
|
21
28
|
loading: boolean;
|
|
22
29
|
};
|
|
23
|
-
declare function AgentsModelsPageView({ labels, models, loading }: Props$
|
|
30
|
+
declare function AgentsModelsPageView({ labels, models, loading }: Props$9): react_jsx_runtime.JSX.Element;
|
|
24
31
|
|
|
25
32
|
type AgentConfigFormInput = {
|
|
26
33
|
agentId?: string;
|
|
@@ -51,7 +58,7 @@ type AgentsConfigLabels = {
|
|
|
51
58
|
activeVersion: string;
|
|
52
59
|
empty: string;
|
|
53
60
|
};
|
|
54
|
-
type Props$
|
|
61
|
+
type Props$8 = {
|
|
55
62
|
labels: AgentsConfigLabels;
|
|
56
63
|
agents: AgentWithPrompts[];
|
|
57
64
|
models: AgentModel[];
|
|
@@ -60,7 +67,7 @@ type Props$3 = {
|
|
|
60
67
|
onUpdate: (agentId: string, input: AgentConfigFormInput) => void;
|
|
61
68
|
onDelete: (agent: AgentWithPrompts) => void;
|
|
62
69
|
};
|
|
63
|
-
declare function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }: Props$
|
|
70
|
+
declare function AgentsConfigPageView({ labels, agents, models, loading, onCreate, onUpdate, onDelete }: Props$8): react_jsx_runtime.JSX.Element;
|
|
64
71
|
|
|
65
72
|
type PromptFormInput = {
|
|
66
73
|
agentId: string;
|
|
@@ -91,7 +98,7 @@ type AgentsPromptsLabels = {
|
|
|
91
98
|
deleteConfirm: string;
|
|
92
99
|
empty: string;
|
|
93
100
|
};
|
|
94
|
-
type Props$
|
|
101
|
+
type Props$7 = {
|
|
95
102
|
labels: AgentsPromptsLabels;
|
|
96
103
|
agents: AgentWithPrompts[];
|
|
97
104
|
prompts: AgentPrompt[];
|
|
@@ -100,7 +107,7 @@ type Props$2 = {
|
|
|
100
107
|
onActivate: (prompt: AgentPrompt) => void;
|
|
101
108
|
onDelete: (prompt: AgentPrompt) => void;
|
|
102
109
|
};
|
|
103
|
-
declare function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }: Props$
|
|
110
|
+
declare function AgentsPromptsPageView({ labels, agents, prompts, loading, onCreate, onActivate, onDelete }: Props$7): react_jsx_runtime.JSX.Element;
|
|
104
111
|
|
|
105
112
|
declare const TOOL_TYPES: readonly ["http", "function", "database_query", "code_execution", "api_call"];
|
|
106
113
|
type ToolType = (typeof TOOL_TYPES)[number];
|
|
@@ -144,7 +151,7 @@ type AgentsToolDefinitionsLabels = {
|
|
|
144
151
|
deleteConfirm: string;
|
|
145
152
|
empty: string;
|
|
146
153
|
};
|
|
147
|
-
type Props$
|
|
154
|
+
type Props$6 = {
|
|
148
155
|
labels: AgentsToolDefinitionsLabels;
|
|
149
156
|
tools: AgentTool[];
|
|
150
157
|
loading: boolean;
|
|
@@ -152,7 +159,7 @@ type Props$1 = {
|
|
|
152
159
|
onUpdate: (toolId: string, input: ToolDefinitionFormInput) => void;
|
|
153
160
|
onDelete: (tool: AgentTool) => void;
|
|
154
161
|
};
|
|
155
|
-
declare function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }: Props$
|
|
162
|
+
declare function AgentsToolDefinitionsPageView({ labels, tools, loading, onCreate, onUpdate, onDelete }: Props$6): react_jsx_runtime.JSX.Element;
|
|
156
163
|
/**
|
|
157
164
|
* Build a JSON Schema object from the parameter list. Mirrors the
|
|
158
165
|
* format the backend validator (`validate_input_schema`) expects —
|
|
@@ -180,7 +187,7 @@ type RulesLabels = {
|
|
|
180
187
|
disabled: string;
|
|
181
188
|
order: string;
|
|
182
189
|
};
|
|
183
|
-
type Props = {
|
|
190
|
+
type Props$5 = {
|
|
184
191
|
labels: RulesLabels;
|
|
185
192
|
rules: AgentRule[];
|
|
186
193
|
loading: boolean;
|
|
@@ -188,85 +195,239 @@ type Props = {
|
|
|
188
195
|
onUpdate: (ruleId: string, input: RuleFormValue) => void;
|
|
189
196
|
onDelete: (rule: AgentRule) => void;
|
|
190
197
|
};
|
|
191
|
-
declare function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }: Props): react_jsx_runtime.JSX.Element;
|
|
198
|
+
declare function RulesPageView({ labels, rules, loading, onCreate, onUpdate, onDelete }: Props$5): react_jsx_runtime.JSX.Element;
|
|
192
199
|
|
|
193
|
-
type
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
type Labels = Record<string, string>;
|
|
201
|
+
type DatasourcesPageViewProps = {
|
|
202
|
+
labels: Labels;
|
|
203
|
+
datasources?: DataSource[];
|
|
204
|
+
useSampleData?: boolean;
|
|
205
|
+
onCreate?: (data: DatasourceFormData) => void;
|
|
206
|
+
};
|
|
207
|
+
declare function DatasourcesPageView({ labels, datasources: externalDatasources, useSampleData, onCreate, }: DatasourcesPageViewProps): react_jsx_runtime.JSX.Element;
|
|
208
|
+
|
|
209
|
+
type DashboardLabels = {
|
|
210
|
+
title: string;
|
|
211
|
+
subtitle: string;
|
|
212
|
+
totalRuns: string;
|
|
213
|
+
successRate: string;
|
|
214
|
+
avgDuration: string;
|
|
215
|
+
runsByStatus: string;
|
|
216
|
+
perWorkflow: string;
|
|
217
|
+
noData: string;
|
|
218
|
+
runs: string;
|
|
219
|
+
};
|
|
220
|
+
type Props$4 = {
|
|
221
|
+
labels: DashboardLabels;
|
|
222
|
+
summary: AnalyticsSummary | null;
|
|
223
|
+
loading: boolean;
|
|
224
|
+
/**
|
|
225
|
+
* App-branded logo node rendered in the dashboard hero. Each app passes
|
|
226
|
+
* its own logo (typically a pair of light/dark <img> tags toggled via
|
|
227
|
+
* Tailwind `dark:` classes) so this view stays brand-agnostic.
|
|
228
|
+
*/
|
|
229
|
+
appLogo: ReactNode;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Platform dashboard — a centered hero with the app's logo + subtitle.
|
|
233
|
+
* Metrics and workflow tables live on dedicated pages (Analytics /
|
|
234
|
+
* Workflow Runs); this view intentionally renders only the landing chrome.
|
|
235
|
+
*
|
|
236
|
+
* `summary` and `loading` are kept on the prop type so the page that
|
|
237
|
+
* mounts this view doesn't have to change, but we intentionally don't
|
|
238
|
+
* render them here.
|
|
239
|
+
*/
|
|
240
|
+
declare function DashboardPageView({ labels, appLogo }: Props$4): react_jsx_runtime.JSX.Element;
|
|
241
|
+
|
|
242
|
+
type AgentsIndexLabels = {
|
|
243
|
+
title: string;
|
|
244
|
+
subtitle: string;
|
|
245
|
+
configTitle: string;
|
|
246
|
+
configSubtitle: string;
|
|
247
|
+
toolDefinitionsTitle: string;
|
|
248
|
+
toolDefinitionsSubtitle: string;
|
|
249
|
+
modelsTitle: string;
|
|
250
|
+
modelsSubtitle: string;
|
|
251
|
+
promptsTitle: string;
|
|
252
|
+
promptsSubtitle: string;
|
|
253
|
+
};
|
|
254
|
+
declare function AgentsIndexPageView({ labels }: {
|
|
255
|
+
labels: AgentsIndexLabels;
|
|
256
|
+
}): react_jsx_runtime.JSX.Element;
|
|
257
|
+
|
|
258
|
+
type RolesPageViewExtraProps = {
|
|
259
|
+
/**
|
|
260
|
+
* App-defined role definitions, e.g. `{ admin: { id, label, description }, ... }`.
|
|
261
|
+
* Each app passes the output of its own `createPlatformRbac()` call.
|
|
262
|
+
*/
|
|
263
|
+
roleDefinitions: Record<string, PlatformRoleDefinition<string>>;
|
|
264
|
+
/**
|
|
265
|
+
* Display options surfaced in the role-assignment modal select. Each
|
|
266
|
+
* entry is `{ value: roleId, label: localizedLabel }`.
|
|
267
|
+
*/
|
|
268
|
+
roleOptions: Array<{
|
|
269
|
+
value: string;
|
|
270
|
+
label: string;
|
|
198
271
|
}>;
|
|
199
|
-
gradient: string;
|
|
200
|
-
dialects: DialectOption[];
|
|
201
272
|
};
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
273
|
+
declare function RolesPageView({ labels, users, onAssignRole, roleDefinitions, roleOptions, }: RolesPageViewProps & RolesPageViewExtraProps): react_jsx_runtime.JSX.Element;
|
|
274
|
+
|
|
275
|
+
declare function WorkflowsPageView({ labels, workflows, onCreate, onUpdateMeta, onPublish }: WorkflowsPageViewProps): react_jsx_runtime.JSX.Element;
|
|
276
|
+
|
|
277
|
+
type WorkflowRunsLabels = {
|
|
278
|
+
title: string;
|
|
279
|
+
subtitle: string;
|
|
280
|
+
status: string;
|
|
281
|
+
duration: string;
|
|
282
|
+
triggeredBy: string;
|
|
283
|
+
startedAt: string;
|
|
284
|
+
cancel: string;
|
|
285
|
+
replay: string;
|
|
286
|
+
view: string;
|
|
287
|
+
statusPending: string;
|
|
288
|
+
statusRunning: string;
|
|
289
|
+
statusCompleted: string;
|
|
290
|
+
statusFailed: string;
|
|
291
|
+
statusCancelled: string;
|
|
292
|
+
filterAll: string;
|
|
293
|
+
filterStatus: string;
|
|
294
|
+
empty: string;
|
|
295
|
+
timeline?: string;
|
|
296
|
+
};
|
|
297
|
+
type Props$3 = {
|
|
298
|
+
labels: WorkflowRunsLabels;
|
|
299
|
+
runs: WorkflowRun[];
|
|
300
|
+
loading: boolean;
|
|
301
|
+
onCancel: (run: WorkflowRun) => void;
|
|
302
|
+
onReplay: (run: WorkflowRun) => void;
|
|
303
|
+
onView?: (run: WorkflowRun) => void;
|
|
304
|
+
onViewTimeline?: (run: WorkflowRun) => void;
|
|
305
|
+
};
|
|
306
|
+
declare function WorkflowRunsPageView({ labels, runs, loading, onCancel, onReplay, onView, onViewTimeline }: Props$3): react_jsx_runtime.JSX.Element;
|
|
307
|
+
|
|
308
|
+
type RunTimelineLabels = ExecutionTimelineLabels & {
|
|
309
|
+
title: string;
|
|
310
|
+
subtitle: string;
|
|
311
|
+
};
|
|
312
|
+
type Props$2 = {
|
|
313
|
+
labels: RunTimelineLabels;
|
|
314
|
+
entries: RunTimelineEntry[];
|
|
315
|
+
loading: boolean;
|
|
316
|
+
runId: string;
|
|
208
317
|
};
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
318
|
+
/**
|
|
319
|
+
* Astrlabe-shaped wrapper around the shared `ExecutionTimelinePanel`
|
|
320
|
+
* (#68). Adds the page chrome (HeroSection + ManagementPageLayout) so
|
|
321
|
+
* the runs page renders consistently with the rest of the platform.
|
|
322
|
+
* Other apps (fuel-price-ai, kori-erp) can drop `ExecutionTimelinePanel`
|
|
323
|
+
* directly inside their own card layouts without taking on this page
|
|
324
|
+
* wrapper.
|
|
325
|
+
*/
|
|
326
|
+
declare function RunTimelinePageView({ labels, entries, loading, runId }: Props$2): react_jsx_runtime.JSX.Element;
|
|
327
|
+
|
|
328
|
+
type CreateConnectionInput = {
|
|
329
|
+
providerSlug: string;
|
|
213
330
|
name: string;
|
|
214
|
-
dialect: string;
|
|
215
|
-
host?: string;
|
|
216
|
-
port?: number;
|
|
217
|
-
database?: string;
|
|
218
|
-
username?: string;
|
|
219
|
-
password?: string;
|
|
220
|
-
schema?: string;
|
|
221
|
-
ssl?: boolean;
|
|
222
|
-
readOnly?: boolean;
|
|
223
|
-
connectionString?: string;
|
|
224
|
-
projectId?: string;
|
|
225
|
-
dataset?: string;
|
|
226
|
-
keyFile?: string;
|
|
227
|
-
account?: string;
|
|
228
|
-
warehouse?: string;
|
|
229
331
|
region?: string;
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
url?: string;
|
|
236
|
-
/** Whitelist of tables the engine is allowed to query. Empty/undef =
|
|
237
|
-
* allow every table the credential can see. */
|
|
238
|
-
allowedTables?: string[];
|
|
239
|
-
/** Columns the engine MUST NOT surface to workflows. Applied at the
|
|
240
|
-
* driver layer — trying to SELECT a blocked column still fails. */
|
|
241
|
-
blockedColumns?: string[];
|
|
242
|
-
/** Max concurrent connections in the org's cached pool (default 5). */
|
|
243
|
-
maxPoolSize?: number;
|
|
244
|
-
/** Query/connect timeout in ms (default 5000). */
|
|
245
|
-
timeoutMs?: number;
|
|
332
|
+
endpoint?: string;
|
|
333
|
+
credentialRef?: string;
|
|
334
|
+
apiKeyRef?: string;
|
|
335
|
+
modelFilter?: string[];
|
|
336
|
+
config?: Record<string, unknown>;
|
|
246
337
|
};
|
|
247
|
-
type
|
|
248
|
-
|
|
249
|
-
open: boolean;
|
|
250
|
-
onClose: () => void;
|
|
251
|
-
labels: Labels$1;
|
|
252
|
-
onSave: (data: DatasourceFormData) => void;
|
|
338
|
+
type UpdateConnectionInput = Partial<Omit<CreateConnectionInput, 'providerSlug'>> & {
|
|
339
|
+
enabled?: boolean;
|
|
253
340
|
};
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
341
|
+
type ConnectionFormValue = {
|
|
342
|
+
providerSlug: ModelProviderType;
|
|
343
|
+
name: string;
|
|
344
|
+
region: string;
|
|
345
|
+
endpoint: string;
|
|
346
|
+
/** Plaintext — only present when the user is entering a NEW key. On
|
|
347
|
+
* save we push this to `/organizations/{id}/secrets` and replace
|
|
348
|
+
* with the returned UUID before calling the connections API. */
|
|
349
|
+
apiKey: string;
|
|
350
|
+
/** Vault secret UUID — displayed as "••• (set)" in the UI. */
|
|
351
|
+
credentialRef: string;
|
|
352
|
+
modelFilter: string;
|
|
353
|
+
configJson: string;
|
|
260
354
|
};
|
|
261
|
-
|
|
355
|
+
type ConnectionsLabels = {
|
|
356
|
+
title: string;
|
|
357
|
+
subtitle: string;
|
|
358
|
+
add: string;
|
|
359
|
+
createTitle: string;
|
|
360
|
+
editTitle: string;
|
|
361
|
+
save: string;
|
|
362
|
+
delete: string;
|
|
363
|
+
edit: string;
|
|
364
|
+
enable: string;
|
|
365
|
+
disable: string;
|
|
366
|
+
deleteConfirm: string;
|
|
367
|
+
empty: string;
|
|
368
|
+
};
|
|
369
|
+
type CreateSecret = (name: string, value: string) => Promise<{
|
|
370
|
+
id: string;
|
|
371
|
+
}>;
|
|
372
|
+
type Props$1 = {
|
|
373
|
+
labels: ConnectionsLabels;
|
|
374
|
+
connections: ModelProviderConnection[];
|
|
375
|
+
loading: boolean;
|
|
376
|
+
onCreate: (input: CreateConnectionInput) => Promise<void>;
|
|
377
|
+
onUpdate: (id: string, input: UpdateConnectionInput) => Promise<void>;
|
|
378
|
+
onDelete: (connection: ModelProviderConnection) => Promise<void>;
|
|
379
|
+
/** Takes a secret name + plaintext value, stores it in the vault and
|
|
380
|
+
* returns the UUID the connections API should reference. */
|
|
381
|
+
onCreateSecret: CreateSecret;
|
|
382
|
+
/**
|
|
383
|
+
* Prefix for auto-generated secret names when the user enters a new
|
|
384
|
+
* API key. Final shape is `${prefix}-${providerSlug}-${timestamp}`.
|
|
385
|
+
* Defaults to `'platform'` so consumers that don't override land on a
|
|
386
|
+
* sensible namespace.
|
|
387
|
+
*/
|
|
388
|
+
secretNamePrefix?: string;
|
|
389
|
+
};
|
|
390
|
+
declare function ConnectionsPageView({ labels, connections, loading, onCreate, onUpdate, onDelete, onCreateSecret, secretNamePrefix, }: Props$1): react_jsx_runtime.JSX.Element;
|
|
262
391
|
|
|
263
|
-
type
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
onCreate?: (data: DatasourceFormData) => void;
|
|
392
|
+
type CredentialFormInput = {
|
|
393
|
+
name: string;
|
|
394
|
+
value: string;
|
|
395
|
+
secretType: string;
|
|
396
|
+
description?: string;
|
|
269
397
|
};
|
|
270
|
-
|
|
398
|
+
type CredentialsPageViewLabels = {
|
|
399
|
+
title: string;
|
|
400
|
+
subtitle: string;
|
|
401
|
+
addCredential: string;
|
|
402
|
+
createTitle: string;
|
|
403
|
+
name: string;
|
|
404
|
+
namePlaceholder: string;
|
|
405
|
+
value: string;
|
|
406
|
+
valuePlaceholder: string;
|
|
407
|
+
type: string;
|
|
408
|
+
typeGeneric: string;
|
|
409
|
+
typeApiKey: string;
|
|
410
|
+
typeOAuth: string;
|
|
411
|
+
typePassword: string;
|
|
412
|
+
description: string;
|
|
413
|
+
descriptionPlaceholder: string;
|
|
414
|
+
save: string;
|
|
415
|
+
rotate: string;
|
|
416
|
+
disable: string;
|
|
417
|
+
disableConfirm: string;
|
|
418
|
+
expiresAt: string;
|
|
419
|
+
createdAt: string;
|
|
420
|
+
neverExpires: string;
|
|
421
|
+
empty: string;
|
|
422
|
+
};
|
|
423
|
+
type Props = {
|
|
424
|
+
labels: CredentialsPageViewLabels;
|
|
425
|
+
credentials: SecretSummary[];
|
|
426
|
+
loading: boolean;
|
|
427
|
+
onCreate: (input: CredentialFormInput) => void;
|
|
428
|
+
onRotate: (secret: SecretSummary, newValue: string) => void;
|
|
429
|
+
onDisable: (secret: SecretSummary) => void;
|
|
430
|
+
};
|
|
431
|
+
declare function CredentialsPageView({ labels, credentials, loading, onCreate, onRotate, onDisable }: Props): react_jsx_runtime.JSX.Element;
|
|
271
432
|
|
|
272
|
-
export { type AgentConfigFormInput, type AgentsConfigLabels, AgentsConfigPageView, type AgentsModelsLabels, AgentsModelsPageView, type AgentsPromptsLabels, AgentsPromptsPageView, type AgentsToolDefinitionsLabels, AgentsToolDefinitionsPageView,
|
|
433
|
+
export { type AgentConfigFormInput, type AgentsConfigLabels, AgentsConfigPageView, type AgentsIndexLabels, AgentsIndexPageView, type AgentsModelsLabels, AgentsModelsPageView, type AgentsPromptsLabels, AgentsPromptsPageView, type AgentsToolDefinitionsLabels, AgentsToolDefinitionsPageView, type ConnectionFormValue, type ConnectionsLabels, ConnectionsPageView, type CreateConnectionInput, type CredentialFormInput, CredentialsPageView, type CredentialsPageViewLabels, type DashboardLabels, DashboardPageView, DatasourceFormData, DatasourcesPageView, type DatasourcesPageViewProps, type PromptFormInput, RolesPageView, type RolesPageViewExtraProps, RuleFormValue, type RulesLabels, RulesPageView, type RunTimelineLabels, RunTimelinePageView, TOOL_TYPES, type ToolDefinitionFormInput, type ToolParameter, type ToolType, type UpdateConnectionInput, UsersPageView, type WorkflowRunsLabels, WorkflowRunsPageView, WorkflowsPageView, jsonSchemaToParameters, parametersToJsonSchema };
|