@xopcai/xopc 0.0.47 → 0.0.48
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/extensions/telegram/src/command-handler.js +1 -1
- package/dist/extensions/telegram/src/command-handler.js.map +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DdWPgyn-.js → agents-BdISC5UA.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DdWPgyn-.js.map → agents-BdISC5UA.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BTi_W1y1.js → apps-page-CXU_Jg95.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BTi_W1y1.js.map → apps-page-CXU_Jg95.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-CjUmKQrC.js → channels-settings-Doe1ciOW.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-CjUmKQrC.js.map → channels-settings-Doe1ciOW.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-DinMur-Z.js → cron-dreaming-jobs-C-V4_3vz.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-DinMur-Z.js.map → cron-dreaming-jobs-C-V4_3vz.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-Bu05Z2oL.js → cron-page-CIIy81K6.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-Bu05Z2oL.js.map → cron-page-CIIy81K6.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-wDej8fSi.js → dist-VW7dXc5X.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-wDej8fSi.js.map → dist-VW7dXc5X.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CZBu7-zM.js → extension-debug-page-Cslwx62-.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-CZBu7-zM.js.map → extension-debug-page-Cslwx62-.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CnOyLPrh.js → extension-page-Dzyebr6T.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-CnOyLPrh.js.map → extension-page-Dzyebr6T.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BOHn3S1a.js → extension-settings-page-B07uetL_.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-BOHn3S1a.js.map → extension-settings-page-B07uetL_.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-OqFXdrMO.js → heartbeat-config-api-kmvGNriW.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-OqFXdrMO.js.map → heartbeat-config-api-kmvGNriW.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-DeELk--t.js → index-DW6JvymK.js} +11 -11
- package/dist/gateway/static/root/assets/{index-DeELk--t.js.map → index-DW6JvymK.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DiN42-yE.js → logs-page-BiRnV2Ex.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DiN42-yE.js.map → logs-page-BiRnV2Ex.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B5oxRfRm.js → sessions-page-DQq0QaQh.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-B5oxRfRm.js.map → sessions-page-DQq0QaQh.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DaRY3XEp.js → settings-page-BV_l8nJ3.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-page-DaRY3XEp.js.map → settings-page-BV_l8nJ3.js.map} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-BGDLiQZ6.js → skills-page-Bv0pphDM.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-BGDLiQZ6.js.map → skills-page-Bv0pphDM.js.map} +1 -1
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-DcP2SYn3.js → use-image-provider-credentials-BPcW1K0N.js} +2 -2
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-DcP2SYn3.js.map → use-image-provider-credentials-BPcW1K0N.js.map} +1 -1
- package/dist/gateway/static/root/index.html +1 -1
- package/dist/package.js +1 -1
- package/dist/src/agent/goals/checklist-judge.js +21 -17
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.js +6 -11
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/judge.d.ts +16 -0
- package/dist/src/agent/goals/judge.js +61 -13
- package/dist/src/agent/goals/judge.js.map +1 -1
- package/dist/src/agent/goals/state.d.ts +7 -0
- package/dist/src/agent/goals/state.js +24 -1
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/chat-commands/builtins/model.d.ts +2 -2
- package/dist/src/chat-commands/builtins/model.js +10 -8
- package/dist/src/chat-commands/builtins/model.js.map +1 -1
- package/dist/src/chat-commands/builtins/system.js +1 -1
- package/dist/src/chat-commands/builtins/system.js.map +1 -1
- package/dist/src/tui/backends/embedded-backend.d.ts +1 -1
- package/dist/src/tui/backends/embedded-backend.js +24 -3
- package/dist/src/tui/backends/embedded-backend.js.map +1 -1
- package/dist/src/tui/backends/gateway-sse-backend.js +36 -10
- package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-commands.js.map +1 -1
- package/dist/src/tui/tui.js +12 -1
- package/dist/src/tui/tui.js.map +1 -1
- package/package.json +1 -1
|
@@ -57,7 +57,7 @@ function createTelegramCommandHandler(deps) {
|
|
|
57
57
|
const handleStart = async (ctx) => {
|
|
58
58
|
try {
|
|
59
59
|
const hasProviders = getAvailableProviders().length > 0;
|
|
60
|
-
await ctx.reply("👋 *Welcome to xopc!*\n\nI am your AI assistant. Here are the available commands:\n\n🤖 *Model Selection*\n/models -
|
|
60
|
+
await ctx.reply("👋 *Welcome to xopc!*\n\nI am your AI assistant. Here are the available commands:\n\n🤖 *Model Selection*\n/models - List models (name + `provider/model` ref for /switch)\n/switch <provider/model-id> - Same ref as shown in /models\n\n📊 *Session Management*\n/new - Start a new session (archive current)\n/list - List all your sessions\n/usage - View token usage statistics\n/cleanup - Clean up old sessions\n\n🔊 *Voice (TTS)*\n/tts - Show TTS settings\n/tts on|off - Enable/disable TTS\n/tts always|inbound|tagged|never - Set trigger mode\n\n🛠️ *Skills*\n/skills reload - Reload all skills from disk\n\n💡 *Tip*: Just send a message to start chatting!" + (hasProviders ? "" : "\n\n⚠️ *Note*: No LLM providers configured. Please set up API keys in your config."), { parse_mode: "Markdown" });
|
|
61
61
|
} catch (err) {
|
|
62
62
|
log.error({ err }, "Failed to handle start command");
|
|
63
63
|
await ctx.reply("❌ Failed to show welcome message.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-handler.js","names":[],"sources":["../../../../extensions/telegram/src/command-handler.ts"],"sourcesContent":["/**\n * Telegram Command Handler\n * \n * Handles Telegram-specific UI interactions (inline keyboards, callbacks).\n * Core commands (/new, /usage, /models, etc.) are handled by the unified command system.\n */\n\nimport type { Context } from 'grammy';\n\nimport type { TelegramAccountManager } from './account-manager.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type { Config } from '@xopcai/xopc/config/index.js';\nimport { isProviderConfiguredSync } from '@xopcai/xopc/providers/index.js';\nimport { TelegramInlineKeyboards, type ProviderInfo } from './inline-keyboards.js';\nimport { getProviderDisplayName, getModelsByProvider, getDefaultModelSync, getAllProviders } from '@xopcai/xopc/providers/index.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\n\nconst log = createLogger('TelegramCommandHandler');\n\nexport interface TelegramCommandHandlerDeps {\n bus: any;\n config: Config;\n accountManager: TelegramAccountManager;\n getSessionModel: (sessionKey: string) => string | undefined;\n setSessionModel: (sessionKey: string, modelId: string) => void | Promise<void>;\n // Optional callbacks for inline keyboard handling\n showProviderModels?: (ctx: Context, providerId: string) => Promise<void>;\n showProvidersAgain?: (ctx: Context) => Promise<void>;\n handleCleanupConfirm?: (ctx: Context) => Promise<void>;\n}\n\nexport function createTelegramCommandHandler(deps: TelegramCommandHandlerDeps) {\n const { config, accountManager, getSessionModel, setSessionModel, bus } = deps;\n\n // ========== Helper Functions ==========\n\n const getAvailableProviders = (): ProviderInfo[] => {\n const allProviders = getAllProviders();\n const available: ProviderInfo[] = [];\n\n for (const providerId of allProviders) {\n if (isProviderConfiguredSync(providerId)) {\n available.push({ id: providerId, name: getProviderDisplayName(providerId) });\n }\n }\n\n if (available.length === 0) {\n available.push({ id: 'minimax', name: 'MiniMax' });\n }\n\n return available;\n };\n\n const getModelsForProvider = (providerId: string) => {\n const models = getModelsByProvider(providerId);\n \n if (models.length === 0) {\n return [{ id: `${providerId}/default`, name: 'default', provider: providerId }];\n }\n \n return models.map(m => ({\n id: `${m.provider}/${m.id}`,\n name: m.name || m.id,\n provider: m.provider,\n }));\n };\n\n // ========== Helper Functions ==========\n\n // Helper to get sessionKey from Telegram context\n const getSessionKeyFromCtx = (ctx: Context): string => {\n const chatId = String(ctx.chat?.id);\n const senderId = String(ctx.from?.id);\n const isGroup = ctx.chat?.type === 'group' || ctx.chat?.type === 'supergroup';\n const threadId =\n (ctx.message as { message_thread_id?: number })?.message_thread_id ??\n (ctx.callbackQuery?.message as { message_thread_id?: number } | undefined)?.message_thread_id;\n\n const accountId = accountManager.resolveAccountIdFromContext(ctx);\n\n return generateSessionKey({\n source: 'telegram',\n chatId,\n senderId,\n isGroup,\n threadId: threadId ? String(threadId) : undefined,\n accountId,\n });\n };\n\n // ========== Command Handlers ==========\n\n /**\n * /start - Show welcome message\n * Note: Other commands (/new, /usage, /models, etc.) are handled by the unified command system\n */\n const handleStart = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n const hasProviders = providers.length > 0;\n\n await ctx.reply(\n '👋 *Welcome to xopc!*\\n\\n' +\n 'I am your AI assistant. Here are the available commands:\\n\\n' +\n '🤖 *Model Selection*\\n' +\n '/models - Select a model to use\\n' +\n '/switch \\u003cmodel-id\\u003e - Switch to a specific model\\n\\n' +\n '📊 *Session Management*\\n' +\n '/new - Start a new session (archive current)\\n' +\n '/list - List all your sessions\\n' +\n '/usage - View token usage statistics\\n' +\n '/cleanup - Clean up old sessions\\n\\n' +\n '🔊 *Voice (TTS)*\\n' +\n '/tts - Show TTS settings\\n' +\n '/tts on|off - Enable/disable TTS\\n' +\n '/tts always|inbound|tagged|never - Set trigger mode\\n\\n' +\n '🛠️ *Skills*\\n' +\n '/skills reload - Reload all skills from disk\\n\\n' +\n '💡 *Tip*: Just send a message to start chatting!' +\n (hasProviders ? '' : '\\n\\n⚠️ *Note*: No LLM providers configured. Please set up API keys in your config.'),\n { parse_mode: 'Markdown' }\n );\n } catch (err) {\n log.error({ err }, 'Failed to handle start command');\n await ctx.reply('❌ Failed to show welcome message.');\n }\n };\n\n /**\n * /models - Show model selector with inline keyboard\n * Note: This provides a UI enhancement over the basic /models command\n */\n const handleModels = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n\n if (providers.length === 0) {\n await ctx.reply('❌ No providers available. Please check your configuration.');\n return;\n }\n\n await ctx.reply('🤖 Select a provider:', {\n reply_markup: TelegramInlineKeyboards.providerSelector(providers),\n });\n } catch (err) {\n log.error({ err }, 'Failed to show provider selector');\n await ctx.reply('❌ Failed to load providers. Please try again.');\n }\n };\n\n /**\n * /cleanup - Show cleanup confirmation dialog\n */\n const handleCleanup = async (ctx: Context): Promise<void> => {\n try {\n await ctx.reply(\n '🧹 *Session Cleanup*\\n\\n' +\n 'This will archive sessions that have been inactive for more than 30 days.\\n\\n' +\n 'Archived sessions can be restored later.',\n { parse_mode: 'Markdown', reply_markup: TelegramInlineKeyboards.cleanupConfirm() }\n );\n } catch (err) {\n log.error({ err }, 'Failed to show cleanup dialog');\n await ctx.reply('❌ Failed to initiate cleanup.');\n }\n };\n\n // ========== Callback Handlers (Inline Keyboard) ==========\n\n const handleProviderSelect = async (ctx: Context, providerId: string): Promise<void> => {\n try {\n const sessionKey = getSessionKeyFromCtx(ctx);\n const modelConfig = config.agents?.defaults?.model;\n const defaultModel = typeof modelConfig === 'string' ? modelConfig : modelConfig?.primary || getDefaultModelSync(config);\n const currentModel = getSessionModel(sessionKey) || defaultModel;\n\n const models = getModelsForProvider(providerId);\n \n if (models.length === 0) {\n await ctx.editMessageText('❌ No models available for this provider.');\n await ctx.answerCallbackQuery();\n return;\n }\n\n const keyboard = TelegramInlineKeyboards.modelSelector(models, currentModel);\n const providerName = getProviderDisplayName(providerId);\n \n await ctx.editMessageText(`🤖 Select a model from *${providerName}*:`, { \n reply_markup: keyboard,\n parse_mode: 'Markdown',\n });\n await ctx.answerCallbackQuery();\n } catch (err) {\n log.error({ err, providerId }, 'Failed to show provider models');\n await ctx.answerCallbackQuery('Failed to load models');\n }\n };\n\n const handleModelSelect = async (ctx: Context, modelId: string): Promise<void> => {\n try {\n const sessionKey = getSessionKeyFromCtx(ctx);\n await Promise.resolve(setSessionModel(sessionKey, modelId));\n\n const modelName = modelId.split('/').pop() || modelId;\n await ctx.editMessageText(\n `✅ Model switched to *${modelName}*\\n\\nThis model will be used for your next message.`,\n { parse_mode: 'Markdown' }\n );\n await ctx.answerCallbackQuery(`Switched to ${modelName}`);\n\n log.info({ sessionKey, modelId }, 'Model switched via Telegram');\n } catch (err) {\n log.error({ err }, 'Failed to handle model selection');\n await ctx.answerCallbackQuery('Failed to switch model');\n }\n };\n\n const handleShowProviders = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n\n await ctx.editMessageText('🤖 Select a provider:', {\n reply_markup: TelegramInlineKeyboards.providerSelector(providers),\n });\n await ctx.answerCallbackQuery();\n } catch (err) {\n log.error({ err }, 'Failed to show providers again');\n await ctx.answerCallbackQuery('Failed to go back');\n }\n };\n\n const handleCleanupConfirm = async (ctx: Context): Promise<void> => {\n try {\n await ctx.editMessageText('🧹 Cleaning up old sessions...');\n \n const chatId = String(ctx.chat?.id);\n\n await bus.publishInbound({\n channel: 'system',\n sender_id: 'telegram:cleanup',\n chat_id: chatId,\n content: '/cleanup --days 30 --force',\n });\n\n await ctx.editMessageText('✅ Cleanup initiated. Old sessions will be archived.');\n await ctx.answerCallbackQuery('Cleanup started');\n } catch (err) {\n log.error({ err }, 'Failed to execute cleanup');\n await ctx.editMessageText('❌ Cleanup failed. Please try again later.');\n await ctx.answerCallbackQuery('Cleanup failed');\n }\n };\n\n const handleCancel = async (ctx: Context): Promise<void> => {\n await ctx.editMessageText('Cancelled.');\n await ctx.answerCallbackQuery();\n };\n\n return {\n // Command handlers\n handleStart,\n handleModels,\n handleCleanup,\n // Callback handlers\n handleProviderSelect,\n handleModelSelect,\n handleShowProviders,\n handleCleanupConfirm,\n handleCancel,\n // Helpers\n getAvailableProviders,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-handler.js","names":[],"sources":["../../../../extensions/telegram/src/command-handler.ts"],"sourcesContent":["/**\n * Telegram Command Handler\n * \n * Handles Telegram-specific UI interactions (inline keyboards, callbacks).\n * Core commands (/new, /usage, /models, etc.) are handled by the unified command system.\n */\n\nimport type { Context } from 'grammy';\n\nimport type { TelegramAccountManager } from './account-manager.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type { Config } from '@xopcai/xopc/config/index.js';\nimport { isProviderConfiguredSync } from '@xopcai/xopc/providers/index.js';\nimport { TelegramInlineKeyboards, type ProviderInfo } from './inline-keyboards.js';\nimport { getProviderDisplayName, getModelsByProvider, getDefaultModelSync, getAllProviders } from '@xopcai/xopc/providers/index.js';\nimport { generateSessionKey } from '@xopcai/xopc/chat-commands/session-key.js';\n\nconst log = createLogger('TelegramCommandHandler');\n\nexport interface TelegramCommandHandlerDeps {\n bus: any;\n config: Config;\n accountManager: TelegramAccountManager;\n getSessionModel: (sessionKey: string) => string | undefined;\n setSessionModel: (sessionKey: string, modelId: string) => void | Promise<void>;\n // Optional callbacks for inline keyboard handling\n showProviderModels?: (ctx: Context, providerId: string) => Promise<void>;\n showProvidersAgain?: (ctx: Context) => Promise<void>;\n handleCleanupConfirm?: (ctx: Context) => Promise<void>;\n}\n\nexport function createTelegramCommandHandler(deps: TelegramCommandHandlerDeps) {\n const { config, accountManager, getSessionModel, setSessionModel, bus } = deps;\n\n // ========== Helper Functions ==========\n\n const getAvailableProviders = (): ProviderInfo[] => {\n const allProviders = getAllProviders();\n const available: ProviderInfo[] = [];\n\n for (const providerId of allProviders) {\n if (isProviderConfiguredSync(providerId)) {\n available.push({ id: providerId, name: getProviderDisplayName(providerId) });\n }\n }\n\n if (available.length === 0) {\n available.push({ id: 'minimax', name: 'MiniMax' });\n }\n\n return available;\n };\n\n const getModelsForProvider = (providerId: string) => {\n const models = getModelsByProvider(providerId);\n \n if (models.length === 0) {\n return [{ id: `${providerId}/default`, name: 'default', provider: providerId }];\n }\n \n return models.map(m => ({\n id: `${m.provider}/${m.id}`,\n name: m.name || m.id,\n provider: m.provider,\n }));\n };\n\n // ========== Helper Functions ==========\n\n // Helper to get sessionKey from Telegram context\n const getSessionKeyFromCtx = (ctx: Context): string => {\n const chatId = String(ctx.chat?.id);\n const senderId = String(ctx.from?.id);\n const isGroup = ctx.chat?.type === 'group' || ctx.chat?.type === 'supergroup';\n const threadId =\n (ctx.message as { message_thread_id?: number })?.message_thread_id ??\n (ctx.callbackQuery?.message as { message_thread_id?: number } | undefined)?.message_thread_id;\n\n const accountId = accountManager.resolveAccountIdFromContext(ctx);\n\n return generateSessionKey({\n source: 'telegram',\n chatId,\n senderId,\n isGroup,\n threadId: threadId ? String(threadId) : undefined,\n accountId,\n });\n };\n\n // ========== Command Handlers ==========\n\n /**\n * /start - Show welcome message\n * Note: Other commands (/new, /usage, /models, etc.) are handled by the unified command system\n */\n const handleStart = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n const hasProviders = providers.length > 0;\n\n await ctx.reply(\n '👋 *Welcome to xopc!*\\n\\n' +\n 'I am your AI assistant. Here are the available commands:\\n\\n' +\n '🤖 *Model Selection*\\n' +\n '/models - List models (name + `provider/model` ref for /switch)\\n' +\n '/switch \\u003cprovider/model-id\\u003e - Same ref as shown in /models\\n\\n' +\n '📊 *Session Management*\\n' +\n '/new - Start a new session (archive current)\\n' +\n '/list - List all your sessions\\n' +\n '/usage - View token usage statistics\\n' +\n '/cleanup - Clean up old sessions\\n\\n' +\n '🔊 *Voice (TTS)*\\n' +\n '/tts - Show TTS settings\\n' +\n '/tts on|off - Enable/disable TTS\\n' +\n '/tts always|inbound|tagged|never - Set trigger mode\\n\\n' +\n '🛠️ *Skills*\\n' +\n '/skills reload - Reload all skills from disk\\n\\n' +\n '💡 *Tip*: Just send a message to start chatting!' +\n (hasProviders ? '' : '\\n\\n⚠️ *Note*: No LLM providers configured. Please set up API keys in your config.'),\n { parse_mode: 'Markdown' }\n );\n } catch (err) {\n log.error({ err }, 'Failed to handle start command');\n await ctx.reply('❌ Failed to show welcome message.');\n }\n };\n\n /**\n * /models - Show model selector with inline keyboard\n * Note: This provides a UI enhancement over the basic /models command\n */\n const handleModels = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n\n if (providers.length === 0) {\n await ctx.reply('❌ No providers available. Please check your configuration.');\n return;\n }\n\n await ctx.reply('🤖 Select a provider:', {\n reply_markup: TelegramInlineKeyboards.providerSelector(providers),\n });\n } catch (err) {\n log.error({ err }, 'Failed to show provider selector');\n await ctx.reply('❌ Failed to load providers. Please try again.');\n }\n };\n\n /**\n * /cleanup - Show cleanup confirmation dialog\n */\n const handleCleanup = async (ctx: Context): Promise<void> => {\n try {\n await ctx.reply(\n '🧹 *Session Cleanup*\\n\\n' +\n 'This will archive sessions that have been inactive for more than 30 days.\\n\\n' +\n 'Archived sessions can be restored later.',\n { parse_mode: 'Markdown', reply_markup: TelegramInlineKeyboards.cleanupConfirm() }\n );\n } catch (err) {\n log.error({ err }, 'Failed to show cleanup dialog');\n await ctx.reply('❌ Failed to initiate cleanup.');\n }\n };\n\n // ========== Callback Handlers (Inline Keyboard) ==========\n\n const handleProviderSelect = async (ctx: Context, providerId: string): Promise<void> => {\n try {\n const sessionKey = getSessionKeyFromCtx(ctx);\n const modelConfig = config.agents?.defaults?.model;\n const defaultModel = typeof modelConfig === 'string' ? modelConfig : modelConfig?.primary || getDefaultModelSync(config);\n const currentModel = getSessionModel(sessionKey) || defaultModel;\n\n const models = getModelsForProvider(providerId);\n \n if (models.length === 0) {\n await ctx.editMessageText('❌ No models available for this provider.');\n await ctx.answerCallbackQuery();\n return;\n }\n\n const keyboard = TelegramInlineKeyboards.modelSelector(models, currentModel);\n const providerName = getProviderDisplayName(providerId);\n \n await ctx.editMessageText(`🤖 Select a model from *${providerName}*:`, { \n reply_markup: keyboard,\n parse_mode: 'Markdown',\n });\n await ctx.answerCallbackQuery();\n } catch (err) {\n log.error({ err, providerId }, 'Failed to show provider models');\n await ctx.answerCallbackQuery('Failed to load models');\n }\n };\n\n const handleModelSelect = async (ctx: Context, modelId: string): Promise<void> => {\n try {\n const sessionKey = getSessionKeyFromCtx(ctx);\n await Promise.resolve(setSessionModel(sessionKey, modelId));\n\n const modelName = modelId.split('/').pop() || modelId;\n await ctx.editMessageText(\n `✅ Model switched to *${modelName}*\\n\\nThis model will be used for your next message.`,\n { parse_mode: 'Markdown' }\n );\n await ctx.answerCallbackQuery(`Switched to ${modelName}`);\n\n log.info({ sessionKey, modelId }, 'Model switched via Telegram');\n } catch (err) {\n log.error({ err }, 'Failed to handle model selection');\n await ctx.answerCallbackQuery('Failed to switch model');\n }\n };\n\n const handleShowProviders = async (ctx: Context): Promise<void> => {\n try {\n const providers = getAvailableProviders();\n\n await ctx.editMessageText('🤖 Select a provider:', {\n reply_markup: TelegramInlineKeyboards.providerSelector(providers),\n });\n await ctx.answerCallbackQuery();\n } catch (err) {\n log.error({ err }, 'Failed to show providers again');\n await ctx.answerCallbackQuery('Failed to go back');\n }\n };\n\n const handleCleanupConfirm = async (ctx: Context): Promise<void> => {\n try {\n await ctx.editMessageText('🧹 Cleaning up old sessions...');\n \n const chatId = String(ctx.chat?.id);\n\n await bus.publishInbound({\n channel: 'system',\n sender_id: 'telegram:cleanup',\n chat_id: chatId,\n content: '/cleanup --days 30 --force',\n });\n\n await ctx.editMessageText('✅ Cleanup initiated. Old sessions will be archived.');\n await ctx.answerCallbackQuery('Cleanup started');\n } catch (err) {\n log.error({ err }, 'Failed to execute cleanup');\n await ctx.editMessageText('❌ Cleanup failed. Please try again later.');\n await ctx.answerCallbackQuery('Cleanup failed');\n }\n };\n\n const handleCancel = async (ctx: Context): Promise<void> => {\n await ctx.editMessageText('Cancelled.');\n await ctx.answerCallbackQuery();\n };\n\n return {\n // Command handlers\n handleStart,\n handleModels,\n handleCleanup,\n // Callback handlers\n handleProviderSelect,\n handleModelSelect,\n handleShowProviders,\n handleCleanupConfirm,\n handleCancel,\n // Helpers\n getAvailableProviders,\n };\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "telegram",
|
|
3
3
|
"name": "Telegram Channel",
|
|
4
4
|
"description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.48",
|
|
6
6
|
"kind": "channel",
|
|
7
7
|
"main": "src/index.ts",
|
|
8
8
|
"channels": ["telegram"],
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{$n as i,A as a,An as o,Ar as s,At as c,C as l,Cn as u,Cr as d,D as f,Di as p,Dn as m,Dt as h,E as g,F as _,Gn as v,Hn as y,I as b,In as x,Ir as S,It as C,Jr as w,Kn as T,Kr as ee,Ln as E,Lt as D,M as O,Mn as k,Mt as te,N as A,Nt as j,O as M,Oi as ne,Ot as re,P as N,Q as ie,Rn as ae,Rr as oe,Rt as P,S as se,Si as ce,Sn as le,St as ue,T as de,Un as F,Ur as fe,Vn as pe,Vr as me,Wn as I,X as he,Xn as ge,Z as _e,Zn as ve,_ as ye,_n as be,at as xe,b as Se,bn as L,br as Ce,cr as R,ct as we,dn as z,dr as Te,ei as B,er as V,fr as Ee,gi as De,gn as H,ii as Oe,it as ke,j as Ae,jn as je,jr as Me,jt as Ne,k as Pe,ki as Fe,kn as Ie,kt as Le,lt as Re,m as ze,mr as Be,ni as Ve,nt as He,or as Ue,ot as We,pr as Ge,ri as Ke,rt as qe,si as U,sr as W,st as G,tt as K,v as Je,vi as Ye,vn as Xe,vr as Ze,w as Qe,wi as $e,x as et,xt as tt,y as nt,zn as rt,zt as it}from"./index-DeELk--t.js";import{a as at,b as ot,d as st,h as ct,r as lt,t as ut,u as dt}from"./cron-dreaming-jobs-DinMur-Z.js";var q=n();function ft({open:e,onOpenChange:t,busy:n,deletePurge:r,deleteTarget:i,deleteConfirmText:a,onDeleteConfirmTextChange:o,onConfirm:s,onCancel:l,a:u}){return(0,q.jsx)(te,{open:e,onOpenChange:t,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:`fixed inset-0 z-[80] bg-scrim backdrop-blur-[2px]`}),(0,q.jsxs)(re,{className:x(`fixed left-1/2 top-1/2 z-[81] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover`,`dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsx)(j,{className:`text-base font-semibold text-fg`,children:r?u.purgeDisk:u.removeFromConfig}),(0,q.jsx)(Le,{className:`mt-2 whitespace-pre-wrap text-sm leading-relaxed text-fg-muted`,children:r?u.confirmDeletePurge:u.confirmDelete}),r&&i?(0,q.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,q.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-fg`,htmlFor:`agent-delete-confirm`,children:u.purgeConfirmLabel}),(0,q.jsx)(`input`,{id:`agent-delete-confirm`,type:`text`,autoComplete:`off`,spellCheck:!1,className:x(`w-full rounded-md border border-edge bg-surface-panel px-3 py-1.5 font-mono text-xs text-fg`,`placeholder:text-fg-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`dark:border-edge`),placeholder:u.purgeConfirmPlaceholder.replace(`{{agentId}}`,i.id),value:a,onChange:e=>o(e.target.value)}),(0,q.jsx)(`p`,{className:`pt-0.5 text-xs text-fg-muted`,children:u.purgeConfirmHint.replace(`{{agentId}}`,i.id)})]}):null,(0,q.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center justify-end gap-2 border-t border-edge-subtle/60 pt-3`,children:[(0,q.jsx)(k,{type:`button`,variant:`ghost`,disabled:n,onClick:l,children:u.createModalCancel}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:r?`border-red-200 text-red-700 hover:bg-red-50 dark:border-red-900/60 dark:text-red-300 dark:hover:bg-red-950/40`:void 0,disabled:n||!i||r&&a.trim().toLowerCase()!==i.id.toLowerCase(),onClick:s,children:r?u.purgeDisk:u.removeFromConfig})]})]})]})})}var pt=[{id:`overview`,labelKey:`navIdentity`,icon:pe},{id:`profile`,labelKey:`navProfile`,icon:U},{id:`tools`,labelKey:`navTools`,icon:rt},{id:`skills`,labelKey:`navSkills`,icon:Ee},{id:`files`,labelKey:`navCoreFiles`,icon:ee}],mt=[{id:`channels`,labelKey:`tabChannels`,icon:Be},{id:`cron`,labelKey:`tabCron`,icon:Oe}];function ht(e){let{a:t,panel:n,onPanelChange:r}=e,i=(e,t,i)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),className:x(`flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm font-medium transition-colors`,n===e?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),children:[(0,q.jsx)(i,{className:`size-4 shrink-0 opacity-90`,strokeWidth:2,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]},e);return(0,q.jsxs)(`nav`,{className:`flex w-full flex-col gap-1`,"aria-label":t.editorNavAria,children:[(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:pt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))}),(0,q.jsx)(`p`,{className:`mt-4 px-3 text-[10px] font-semibold uppercase tracking-wide text-fg-subtle`,children:t.navAdvanced}),(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:mt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))})]})}function gt(e){let{open:t,onOpenChange:n,a:r,title:i,subtitle:a,panel:o,onPanelChange:s,onFooterSave:l,footerSaveDisabled:u,footerSavedFlash:d,busy:f,children:p}=e;return(0,q.jsx)(te,{open:t,onOpenChange:n,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:x(`xopc-dialog-overlay fixed inset-0 bg-scrim`,Je)}),(0,q.jsxs)(re,{className:x(`xopc-dialog-content fixed flex flex-col overflow-hidden rounded-xl border border-edge bg-surface-panel shadow-popover dark:border-edge`,ye,`inset-4 h-[calc(100dvh-2rem)] max-h-[calc(100dvh-2rem)] min-h-0`,`sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-[min(88vh,48rem)] sm:max-h-[min(88vh,48rem)] sm:min-h-[32rem] sm:w-[min(100%-2rem,58rem)] sm:-translate-x-1/2 sm:-translate-y-1/2`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-2 border-b border-edge-subtle px-4 pb-3 pt-4 dark:border-edge`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,q.jsx)(j,{className:`text-base font-semibold leading-snug text-fg`,children:i}),(0,q.jsx)(Le,{className:`mt-1 font-mono text-xs text-fg-muted`,children:a})]}),(0,q.jsx)(h,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":r.closeDialogAria,children:(0,q.jsx)(ae,{className:`size-4`,"aria-hidden":!0})})})]}),(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col sm:flex-row sm:overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`shrink-0 border-b border-edge-subtle px-4 py-3 dark:border-edge sm:flex sm:w-56 sm:shrink-0 sm:flex-col sm:overflow-y-auto sm:border-b-0 sm:border-r sm:px-0 sm:py-4 sm:pl-4 sm:pr-3`,children:(0,q.jsx)(ht,{a:r,panel:o,onPanelChange:s})}),(0,q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-4 sm:pl-2 sm:pr-5`,children:p}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-1 border-t border-edge-subtle px-4 py-3 dark:border-edge sm:flex-row sm:items-center sm:justify-end sm:gap-3`,children:[d?(0,q.jsxs)(`p`,{className:`order-2 text-center text-xs font-medium text-green-600 sm:order-1 sm:mr-auto sm:text-left dark:text-green-400`,children:[`✓ `,r.personaSaved]}):u?(0,q.jsx)(`p`,{className:`order-2 text-center text-xs text-fg-muted sm:order-1 sm:mr-auto sm:text-left`,children:r.footerSaveNotApplicable}):null,(0,q.jsx)(k,{type:`button`,className:`order-1 w-full sm:order-2 sm:w-auto`,disabled:f||u,onClick:()=>void l(),children:r.save})]})]})]})]})]})})}function _t(){return`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`}function J({children:e,className:t}){return(0,q.jsx)(`section`,{className:x(_t(),t),children:e})}var vt=`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted transition-colors dark:bg-surface-hover/70`;function Y({icon:e,title:t,subtitle:n,trailing:r,className:i,iconInteractive:a,iconLeading:o}){let s=o??(0,q.jsx)(e,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),c=o?x(`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel p-0 ring-1 ring-inset ring-edge-subtle transition-[box-shadow] hover:ring-accent/40 dark:ring-edge-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`):x(vt,`hover:text-fg`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`),l=!!(a&&o);return(0,q.jsxs)(`div`,{className:x(`mb-5 flex items-start gap-3`,i),children:[a?l?(0,q.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}),(0,q.jsx)(`span`,{className:`pointer-events-none absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-md border border-edge bg-surface-panel text-fg-muted shadow-sm dark:border-edge dark:bg-surface-base`,"aria-hidden":!0,children:(0,q.jsx)(Ze,{className:`size-2.5`,strokeWidth:2.25})})]}):(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}):(0,q.jsx)(`div`,{className:x(o?`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel ring-1 ring-inset ring-edge-subtle dark:ring-edge-subtle`:vt),"aria-hidden":!o,children:s}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n})]}),r?(0,q.jsx)(`div`,{className:`shrink-0`,children:r}):null]})}function X(){return x(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,o,`dark:border-edge`)}function yt(e,t,n){let r=e.agentId?.trim().toLowerCase();return r?r===t.toLowerCase():t.toLowerCase()===n.toLowerCase()}function bt(e){return[e.channel,e.accountId,e.peerKind,e.peerId].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||e.channel}function xt(e,t,n,r){let i=e.trim(),a=t.trim();if(a)return{channel:i,peerId:a};if(n!=null){let e=r[n];if(!e)return{channel:i};let t={channel:i};e.accountId?.trim()&&(t.accountId=e.accountId.trim()),e.peerKind?.trim()&&(t.peerKind=e.peerKind.trim());let a=e.peerId?.trim()||e.chatId?.trim();return a&&(t.peerId=a),t}return{channel:i}}var St=x(Ie,`w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0`);function Ct(e){let{a:t,busy:n,bindingsLoading:r,agentBindings:i,onRemoveBinding:a,onAddBinding:o,channelStatuses:c,channelsStatusLoading:l,useManualChannel:u,newBindChannel:d,setNewBindChannel:f,bindSessionChats:p,sessionsLoading:m,newBindSessionIdx:h,setNewBindSessionIdx:g,newBindCustomPeer:_,setNewBindCustomPeer:v,onRefreshSessions:y,lastActiveLabels:b,selectRecipient:S}=e,C=!l&&(u||c.length>0);return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:s,title:t.channelsTitle,subtitle:t.channelsHint}),r?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoading}):i.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsNone}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-2 text-sm`,children:i.map((e,r)=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-lg border border-edge bg-surface-panel px-3 py-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-xs`,children:bt(e.match)}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:n,onClick:()=>void a(e),children:t.removeBinding})]},`${e.match.channel}-${r}`))}),(0,q.jsxs)(`form`,{className:`mt-4 flex flex-col gap-3`,onSubmit:o,children:[l?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoadingChannels}):u?(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`input`,{className:X(),value:d,onChange:e=>f(e.target.value),placeholder:`telegram`,autoComplete:`off`}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsManualChannelHint})]}):(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`select`,{className:x(X(),`py-2`),value:d,onChange:e=>{f(e.target.value),g(null),v(``)},children:c.map(e=>(0,q.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:t.channelsDisabledSuffix]},e.name))})]}),C&&d.trim()?(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 border-t border-edge-subtle pt-3 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsSessionLabel}),(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,disabled:n||m||!d.trim(),title:t.channelsRefreshSessionsHint,onClick:()=>y(),children:[(0,q.jsx)(Te,{className:x(`size-3.5`,m&&`animate-spin`),strokeWidth:1.75}),t.channelsRefreshSessions]})]}),m&&p.length===0?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsLoadingSessions}):null,(0,q.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsPeerFromSessions}),(0,q.jsxs)(`select`,{className:x(X(),`py-2`),value:h==null?``:String(h),disabled:n||!d.trim()||!!_.trim(),onChange:e=>{let t=e.target.value;g(t===``?null:Number(t))},children:[(0,q.jsx)(`option`,{value:``,children:t.channelsPeerAny}),p.map((e,t)=>(0,q.jsx)(`option`,{value:String(t),children:ot(e,b)},`${e.channel}-${e.chatId}-${t}`))]})]}),p.length===0&&d.trim()&&!m?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsNoSessionsHint}):null,(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.peerIdLabel}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2`,children:[(0,q.jsx)(`input`,{type:`text`,className:x(X(),`min-w-0 w-full sm:flex-1`),value:_,onChange:e=>{v(e.target.value),e.target.value.trim()&&g(null)},placeholder:t.channelsCustomPeerPlaceholder,autoComplete:`off`}),(0,q.jsxs)(`select`,{className:St,value:_,onChange:e=>{let t=e.target.value;v(t||``),g(null)},children:[(0,q.jsx)(`option`,{value:``,children:S}),p.map(e=>(0,q.jsx)(`option`,{value:e.chatId,children:ot(e,b)},`${e.channel}-${e.chatId}`))]})]}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsCustomPeerHint})]})]}):null,(0,q.jsx)(`div`,{children:(0,q.jsx)(k,{type:`submit`,disabled:n||!d.trim()||l,children:t.addBinding})})]})]})}function wt(e){let{a:t,data:n,busy:r,cronLoading:i,agentCronJobs:a,onSetCronJobAgent:o}=e;return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:ce,title:t.cronTitle,subtitle:t.cronHint}),i?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronLoading}):a.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronNone}):(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b border-edge text-fg-muted`,children:[(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSchedule}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColMessage}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSession}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColAgent})]})}),(0,q.jsx)(`tbody`,{children:a.map(e=>{let i=!e.agentId?.trim(),a=i?``:e.agentId.trim().toLowerCase();return(0,q.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,q.jsx)(`td`,{className:`py-2 pr-3 font-mono text-xs`,children:e.schedule}),(0,q.jsx)(`td`,{className:`max-w-[12rem] truncate py-2 pr-3 text-xs`,title:lt(e),children:lt(e)}),(0,q.jsx)(`td`,{className:`py-2 pr-3 text-xs`,children:e.sessionTarget??`main`}),(0,q.jsx)(`td`,{className:`py-2 pr-3`,children:(0,q.jsxs)(`select`,{className:x(X(),`min-w-[8rem] py-1 text-xs`),value:a,disabled:r||e.sessionTarget!==`isolated`,onChange:t=>void o(e,t.target.value),children:[(0,q.jsx)(`option`,{value:``,children:i?t.cronAgentDefault:t.cronAgentClear}),n.agents.map(e=>(0,q.jsx)(`option`,{value:e.id,children:e.id},e.id))]})})]},e.id)})})]})})]})}function Tt(e){let{a:t,filesLoading:n,files:r,activeFile:i,setActiveFile:a,bootstrapViewMode:o,setBootstrapViewMode:s,fileDraft:c,setFileDraft:l,fileSaving:u,bootstrapFileLoading:d,bootstrapEditorNonce:f}=e,p=le(e=>e.resolved===`dark`);return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden`,children:[(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesHint}),n?(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesLoading}):r?(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-3 overflow-hidden`,children:[(0,q.jsx)(`nav`,{className:`flex shrink-0 flex-row flex-wrap gap-x-0.5 gap-y-0 border-b border-edge-subtle`,"aria-label":t.tabFiles,children:r.files.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:x(`-mb-px shrink-0 border-b-2 border-transparent px-3 py-2 text-left font-mono text-xs whitespace-nowrap transition-colors`,i===e.name?`border-accent text-fg`:`text-fg-muted hover:border-edge-subtle hover:text-fg`,e.missing&&`opacity-60`),onClick:()=>a(e.name),children:[e.name,e.missing?` (${t.missing})`:``]},e.name))}),(0,q.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-hidden`,children:i?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`inline-flex rounded-lg border border-edge bg-surface-panel p-0.5`,role:`group`,"aria-label":t.filesBootstrapEdit,children:[(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`edit`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`edit`),children:[(0,q.jsx)(ge,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapEdit]}),(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`preview`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`preview`),children:[(0,q.jsx)(w,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapPreview]})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[u?(0,q.jsx)(`span`,{children:t.filesSavingStatus}):null,(0,q.jsx)(`span`,{children:t.filesAutoSaveHint})]})]}),o===`edit`?(0,q.jsx)(`div`,{className:x(X(),`flex min-h-0 flex-1 flex-col overflow-hidden p-0`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(_e,{initialContent:c,onChange:l,isDark:p,className:`min-h-0 flex-1`},`${i??`file`}-${f}`)}):(0,q.jsx)(`div`,{className:x(X(),`min-h-0 flex-1 overflow-y-auto text-sm`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(he,{content:c,className:`text-sm`})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.pickFile})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesEmpty})]})}var Z=e(t(),1);function Et(e,t){switch(e){case`adventurer`:return t.avatarStyleAdventurer;case`bottts`:return t.avatarStyleRobot;case`lorelei`:return t.avatarStyleLorelei;case`thumbs`:return t.avatarStyleThumbs;case`fun-emoji`:return t.avatarStyleFunEmoji;default:return e}}function Dt(e){let{agentId:t,value:n,onChange:r,a:i,id:a}=e,o=(0,Z.useRef)(null),[s,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(null),[d,f]=(0,Z.useState)(!1),p=(0,Z.useMemo)(()=>{let e=Re(n.trim());return e&&we(e.styleId)?e.styleId:ke[0]??`adventurer`},[n]),m=(0,Z.useCallback)(async(e,n)=>{try{await g(t)}catch{}r(We(e,n)),f(!1)},[t,r]),h=(0,Z.useCallback)(async e=>{let n=e.target.files?.[0];if(e.target.value=``,n){u(null),c(!0);try{await b(t,n),r(xe)}catch(e){let t=e instanceof Error?e.message:``;u(t===`avatar_too_large`?i.avatarTooLarge:t===`unsupported_image_type`||t===`empty_file`?i.avatarInvalidImage:i.avatarUploadFailed)}finally{c(!1)}}},[i,t,r]),_=(e,t)=>{let r=Re(n.trim());return!!(r&&r.styleId===e&&r.seed===t)};return(0,q.jsxs)(`div`,{...a?{id:a}:{},className:`flex flex-col gap-3 sm:col-span-2`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:i.avatarPickerTitle}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{ref:o,type:`file`,accept:`image/png,image/jpeg,image/webp,.png,.jpg,.jpeg,.webp`,className:`hidden`,onChange:e=>void h(e)}),(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1.5 px-2.5 py-1.5 text-xs`,disabled:s,onClick:()=>o.current?.click(),children:[(0,q.jsx)(F,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),s?i.avatarUploading:i.avatarUploadCustom]})]})]}),l?(0,q.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:l}):null,(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:ke.map(e=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>void m(e,qe[0]??t),className:x(`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,p===e?`border-fg bg-fg text-surface-base`:`border-edge-subtle bg-surface-panel text-fg hover:border-edge`),children:Et(e,i)},e))}),(0,q.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/50 p-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[qe.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,96),alt:``,width:44,height:44,className:`size-11 rounded-full object-cover`,draggable:!1})},e)),(0,q.jsxs)(P,{open:d,onOpenChange:f,children:[(0,q.jsx)(it,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`flex size-12 shrink-0 items-center justify-center rounded-xl border border-edge-subtle bg-surface-base text-xs font-medium text-fg-muted hover:border-edge hover:text-fg`,children:i.avatarMore})}),(0,q.jsx)(D,{children:(0,q.jsxs)(C,{className:`z-[80] max-h-72 w-[min(22rem,calc(100vw-2rem))] overflow-y-auto rounded-xl border border-edge-subtle bg-surface-panel p-3 shadow-lg`,sideOffset:6,align:`end`,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs font-medium text-fg-muted`,children:Et(p,i)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:He.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-11 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,88),alt:``,width:40,height:40,className:`size-10 rounded-full object-cover`,draggable:!1})},e))})]})})]})]}),(0,q.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:i.personaAvatar}),(0,q.jsx)(K,{agentId:t,avatar:n,size:40}),n.trim()&&!Re(n.trim())&&n.trim()!==`xopc:custom`?(0,q.jsx)(`span`,{className:`truncate font-mono text-[10px] text-fg-muted`,title:n,children:n}):null]})]})]})}var Ot={name:``,creature:``,emoji:``,avatar:``};function kt(e){let t={...Ot};if(!e.trim())return t;let n={name:`name`,creature:`creature`,emoji:`emoji`,avatar:`avatar`};for(let r of e.split(`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{$n as i,A as a,An as o,Ar as s,At as c,C as l,Cn as u,Cr as d,D as f,Di as p,Dn as m,Dt as h,E as g,F as _,Gn as v,Hn as y,I as b,In as x,Ir as S,It as C,Jr as w,Kn as T,Kr as ee,Ln as E,Lt as D,M as O,Mn as k,Mt as te,N as A,Nt as j,O as M,Oi as ne,Ot as re,P as N,Q as ie,Rn as ae,Rr as oe,Rt as P,S as se,Si as ce,Sn as le,St as ue,T as de,Un as F,Ur as fe,Vn as pe,Vr as me,Wn as I,X as he,Xn as ge,Z as _e,Zn as ve,_ as ye,_n as be,at as xe,b as Se,bn as L,br as Ce,cr as R,ct as we,dn as z,dr as Te,ei as B,er as V,fr as Ee,gi as De,gn as H,ii as Oe,it as ke,j as Ae,jn as je,jr as Me,jt as Ne,k as Pe,ki as Fe,kn as Ie,kt as Le,lt as Re,m as ze,mr as Be,ni as Ve,nt as He,or as Ue,ot as We,pr as Ge,ri as Ke,rt as qe,si as U,sr as W,st as G,tt as K,v as Je,vi as Ye,vn as Xe,vr as Ze,w as Qe,wi as $e,x as et,xt as tt,y as nt,zn as rt,zt as it}from"./index-DW6JvymK.js";import{a as at,b as ot,d as st,h as ct,r as lt,t as ut,u as dt}from"./cron-dreaming-jobs-C-V4_3vz.js";var q=n();function ft({open:e,onOpenChange:t,busy:n,deletePurge:r,deleteTarget:i,deleteConfirmText:a,onDeleteConfirmTextChange:o,onConfirm:s,onCancel:l,a:u}){return(0,q.jsx)(te,{open:e,onOpenChange:t,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:`fixed inset-0 z-[80] bg-scrim backdrop-blur-[2px]`}),(0,q.jsxs)(re,{className:x(`fixed left-1/2 top-1/2 z-[81] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover`,`dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsx)(j,{className:`text-base font-semibold text-fg`,children:r?u.purgeDisk:u.removeFromConfig}),(0,q.jsx)(Le,{className:`mt-2 whitespace-pre-wrap text-sm leading-relaxed text-fg-muted`,children:r?u.confirmDeletePurge:u.confirmDelete}),r&&i?(0,q.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,q.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-fg`,htmlFor:`agent-delete-confirm`,children:u.purgeConfirmLabel}),(0,q.jsx)(`input`,{id:`agent-delete-confirm`,type:`text`,autoComplete:`off`,spellCheck:!1,className:x(`w-full rounded-md border border-edge bg-surface-panel px-3 py-1.5 font-mono text-xs text-fg`,`placeholder:text-fg-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`dark:border-edge`),placeholder:u.purgeConfirmPlaceholder.replace(`{{agentId}}`,i.id),value:a,onChange:e=>o(e.target.value)}),(0,q.jsx)(`p`,{className:`pt-0.5 text-xs text-fg-muted`,children:u.purgeConfirmHint.replace(`{{agentId}}`,i.id)})]}):null,(0,q.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center justify-end gap-2 border-t border-edge-subtle/60 pt-3`,children:[(0,q.jsx)(k,{type:`button`,variant:`ghost`,disabled:n,onClick:l,children:u.createModalCancel}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:r?`border-red-200 text-red-700 hover:bg-red-50 dark:border-red-900/60 dark:text-red-300 dark:hover:bg-red-950/40`:void 0,disabled:n||!i||r&&a.trim().toLowerCase()!==i.id.toLowerCase(),onClick:s,children:r?u.purgeDisk:u.removeFromConfig})]})]})]})})}var pt=[{id:`overview`,labelKey:`navIdentity`,icon:pe},{id:`profile`,labelKey:`navProfile`,icon:U},{id:`tools`,labelKey:`navTools`,icon:rt},{id:`skills`,labelKey:`navSkills`,icon:Ee},{id:`files`,labelKey:`navCoreFiles`,icon:ee}],mt=[{id:`channels`,labelKey:`tabChannels`,icon:Be},{id:`cron`,labelKey:`tabCron`,icon:Oe}];function ht(e){let{a:t,panel:n,onPanelChange:r}=e,i=(e,t,i)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),className:x(`flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm font-medium transition-colors`,n===e?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),children:[(0,q.jsx)(i,{className:`size-4 shrink-0 opacity-90`,strokeWidth:2,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]},e);return(0,q.jsxs)(`nav`,{className:`flex w-full flex-col gap-1`,"aria-label":t.editorNavAria,children:[(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:pt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))}),(0,q.jsx)(`p`,{className:`mt-4 px-3 text-[10px] font-semibold uppercase tracking-wide text-fg-subtle`,children:t.navAdvanced}),(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:mt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))})]})}function gt(e){let{open:t,onOpenChange:n,a:r,title:i,subtitle:a,panel:o,onPanelChange:s,onFooterSave:l,footerSaveDisabled:u,footerSavedFlash:d,busy:f,children:p}=e;return(0,q.jsx)(te,{open:t,onOpenChange:n,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:x(`xopc-dialog-overlay fixed inset-0 bg-scrim`,Je)}),(0,q.jsxs)(re,{className:x(`xopc-dialog-content fixed flex flex-col overflow-hidden rounded-xl border border-edge bg-surface-panel shadow-popover dark:border-edge`,ye,`inset-4 h-[calc(100dvh-2rem)] max-h-[calc(100dvh-2rem)] min-h-0`,`sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-[min(88vh,48rem)] sm:max-h-[min(88vh,48rem)] sm:min-h-[32rem] sm:w-[min(100%-2rem,58rem)] sm:-translate-x-1/2 sm:-translate-y-1/2`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-2 border-b border-edge-subtle px-4 pb-3 pt-4 dark:border-edge`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,q.jsx)(j,{className:`text-base font-semibold leading-snug text-fg`,children:i}),(0,q.jsx)(Le,{className:`mt-1 font-mono text-xs text-fg-muted`,children:a})]}),(0,q.jsx)(h,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":r.closeDialogAria,children:(0,q.jsx)(ae,{className:`size-4`,"aria-hidden":!0})})})]}),(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col sm:flex-row sm:overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`shrink-0 border-b border-edge-subtle px-4 py-3 dark:border-edge sm:flex sm:w-56 sm:shrink-0 sm:flex-col sm:overflow-y-auto sm:border-b-0 sm:border-r sm:px-0 sm:py-4 sm:pl-4 sm:pr-3`,children:(0,q.jsx)(ht,{a:r,panel:o,onPanelChange:s})}),(0,q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-4 sm:pl-2 sm:pr-5`,children:p}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-1 border-t border-edge-subtle px-4 py-3 dark:border-edge sm:flex-row sm:items-center sm:justify-end sm:gap-3`,children:[d?(0,q.jsxs)(`p`,{className:`order-2 text-center text-xs font-medium text-green-600 sm:order-1 sm:mr-auto sm:text-left dark:text-green-400`,children:[`✓ `,r.personaSaved]}):u?(0,q.jsx)(`p`,{className:`order-2 text-center text-xs text-fg-muted sm:order-1 sm:mr-auto sm:text-left`,children:r.footerSaveNotApplicable}):null,(0,q.jsx)(k,{type:`button`,className:`order-1 w-full sm:order-2 sm:w-auto`,disabled:f||u,onClick:()=>void l(),children:r.save})]})]})]})]})]})})}function _t(){return`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`}function J({children:e,className:t}){return(0,q.jsx)(`section`,{className:x(_t(),t),children:e})}var vt=`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted transition-colors dark:bg-surface-hover/70`;function Y({icon:e,title:t,subtitle:n,trailing:r,className:i,iconInteractive:a,iconLeading:o}){let s=o??(0,q.jsx)(e,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),c=o?x(`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel p-0 ring-1 ring-inset ring-edge-subtle transition-[box-shadow] hover:ring-accent/40 dark:ring-edge-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`):x(vt,`hover:text-fg`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`),l=!!(a&&o);return(0,q.jsxs)(`div`,{className:x(`mb-5 flex items-start gap-3`,i),children:[a?l?(0,q.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}),(0,q.jsx)(`span`,{className:`pointer-events-none absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-md border border-edge bg-surface-panel text-fg-muted shadow-sm dark:border-edge dark:bg-surface-base`,"aria-hidden":!0,children:(0,q.jsx)(Ze,{className:`size-2.5`,strokeWidth:2.25})})]}):(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}):(0,q.jsx)(`div`,{className:x(o?`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel ring-1 ring-inset ring-edge-subtle dark:ring-edge-subtle`:vt),"aria-hidden":!o,children:s}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n})]}),r?(0,q.jsx)(`div`,{className:`shrink-0`,children:r}):null]})}function X(){return x(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,o,`dark:border-edge`)}function yt(e,t,n){let r=e.agentId?.trim().toLowerCase();return r?r===t.toLowerCase():t.toLowerCase()===n.toLowerCase()}function bt(e){return[e.channel,e.accountId,e.peerKind,e.peerId].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||e.channel}function xt(e,t,n,r){let i=e.trim(),a=t.trim();if(a)return{channel:i,peerId:a};if(n!=null){let e=r[n];if(!e)return{channel:i};let t={channel:i};e.accountId?.trim()&&(t.accountId=e.accountId.trim()),e.peerKind?.trim()&&(t.peerKind=e.peerKind.trim());let a=e.peerId?.trim()||e.chatId?.trim();return a&&(t.peerId=a),t}return{channel:i}}var St=x(Ie,`w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0`);function Ct(e){let{a:t,busy:n,bindingsLoading:r,agentBindings:i,onRemoveBinding:a,onAddBinding:o,channelStatuses:c,channelsStatusLoading:l,useManualChannel:u,newBindChannel:d,setNewBindChannel:f,bindSessionChats:p,sessionsLoading:m,newBindSessionIdx:h,setNewBindSessionIdx:g,newBindCustomPeer:_,setNewBindCustomPeer:v,onRefreshSessions:y,lastActiveLabels:b,selectRecipient:S}=e,C=!l&&(u||c.length>0);return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:s,title:t.channelsTitle,subtitle:t.channelsHint}),r?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoading}):i.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsNone}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-2 text-sm`,children:i.map((e,r)=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-lg border border-edge bg-surface-panel px-3 py-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-xs`,children:bt(e.match)}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:n,onClick:()=>void a(e),children:t.removeBinding})]},`${e.match.channel}-${r}`))}),(0,q.jsxs)(`form`,{className:`mt-4 flex flex-col gap-3`,onSubmit:o,children:[l?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoadingChannels}):u?(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`input`,{className:X(),value:d,onChange:e=>f(e.target.value),placeholder:`telegram`,autoComplete:`off`}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsManualChannelHint})]}):(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`select`,{className:x(X(),`py-2`),value:d,onChange:e=>{f(e.target.value),g(null),v(``)},children:c.map(e=>(0,q.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:t.channelsDisabledSuffix]},e.name))})]}),C&&d.trim()?(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 border-t border-edge-subtle pt-3 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsSessionLabel}),(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,disabled:n||m||!d.trim(),title:t.channelsRefreshSessionsHint,onClick:()=>y(),children:[(0,q.jsx)(Te,{className:x(`size-3.5`,m&&`animate-spin`),strokeWidth:1.75}),t.channelsRefreshSessions]})]}),m&&p.length===0?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsLoadingSessions}):null,(0,q.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsPeerFromSessions}),(0,q.jsxs)(`select`,{className:x(X(),`py-2`),value:h==null?``:String(h),disabled:n||!d.trim()||!!_.trim(),onChange:e=>{let t=e.target.value;g(t===``?null:Number(t))},children:[(0,q.jsx)(`option`,{value:``,children:t.channelsPeerAny}),p.map((e,t)=>(0,q.jsx)(`option`,{value:String(t),children:ot(e,b)},`${e.channel}-${e.chatId}-${t}`))]})]}),p.length===0&&d.trim()&&!m?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsNoSessionsHint}):null,(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.peerIdLabel}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2`,children:[(0,q.jsx)(`input`,{type:`text`,className:x(X(),`min-w-0 w-full sm:flex-1`),value:_,onChange:e=>{v(e.target.value),e.target.value.trim()&&g(null)},placeholder:t.channelsCustomPeerPlaceholder,autoComplete:`off`}),(0,q.jsxs)(`select`,{className:St,value:_,onChange:e=>{let t=e.target.value;v(t||``),g(null)},children:[(0,q.jsx)(`option`,{value:``,children:S}),p.map(e=>(0,q.jsx)(`option`,{value:e.chatId,children:ot(e,b)},`${e.channel}-${e.chatId}`))]})]}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsCustomPeerHint})]})]}):null,(0,q.jsx)(`div`,{children:(0,q.jsx)(k,{type:`submit`,disabled:n||!d.trim()||l,children:t.addBinding})})]})]})}function wt(e){let{a:t,data:n,busy:r,cronLoading:i,agentCronJobs:a,onSetCronJobAgent:o}=e;return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:ce,title:t.cronTitle,subtitle:t.cronHint}),i?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronLoading}):a.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronNone}):(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b border-edge text-fg-muted`,children:[(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSchedule}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColMessage}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSession}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColAgent})]})}),(0,q.jsx)(`tbody`,{children:a.map(e=>{let i=!e.agentId?.trim(),a=i?``:e.agentId.trim().toLowerCase();return(0,q.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,q.jsx)(`td`,{className:`py-2 pr-3 font-mono text-xs`,children:e.schedule}),(0,q.jsx)(`td`,{className:`max-w-[12rem] truncate py-2 pr-3 text-xs`,title:lt(e),children:lt(e)}),(0,q.jsx)(`td`,{className:`py-2 pr-3 text-xs`,children:e.sessionTarget??`main`}),(0,q.jsx)(`td`,{className:`py-2 pr-3`,children:(0,q.jsxs)(`select`,{className:x(X(),`min-w-[8rem] py-1 text-xs`),value:a,disabled:r||e.sessionTarget!==`isolated`,onChange:t=>void o(e,t.target.value),children:[(0,q.jsx)(`option`,{value:``,children:i?t.cronAgentDefault:t.cronAgentClear}),n.agents.map(e=>(0,q.jsx)(`option`,{value:e.id,children:e.id},e.id))]})})]},e.id)})})]})})]})}function Tt(e){let{a:t,filesLoading:n,files:r,activeFile:i,setActiveFile:a,bootstrapViewMode:o,setBootstrapViewMode:s,fileDraft:c,setFileDraft:l,fileSaving:u,bootstrapFileLoading:d,bootstrapEditorNonce:f}=e,p=le(e=>e.resolved===`dark`);return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden`,children:[(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesHint}),n?(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesLoading}):r?(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-3 overflow-hidden`,children:[(0,q.jsx)(`nav`,{className:`flex shrink-0 flex-row flex-wrap gap-x-0.5 gap-y-0 border-b border-edge-subtle`,"aria-label":t.tabFiles,children:r.files.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:x(`-mb-px shrink-0 border-b-2 border-transparent px-3 py-2 text-left font-mono text-xs whitespace-nowrap transition-colors`,i===e.name?`border-accent text-fg`:`text-fg-muted hover:border-edge-subtle hover:text-fg`,e.missing&&`opacity-60`),onClick:()=>a(e.name),children:[e.name,e.missing?` (${t.missing})`:``]},e.name))}),(0,q.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-hidden`,children:i?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`inline-flex rounded-lg border border-edge bg-surface-panel p-0.5`,role:`group`,"aria-label":t.filesBootstrapEdit,children:[(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`edit`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`edit`),children:[(0,q.jsx)(ge,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapEdit]}),(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`preview`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`preview`),children:[(0,q.jsx)(w,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapPreview]})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[u?(0,q.jsx)(`span`,{children:t.filesSavingStatus}):null,(0,q.jsx)(`span`,{children:t.filesAutoSaveHint})]})]}),o===`edit`?(0,q.jsx)(`div`,{className:x(X(),`flex min-h-0 flex-1 flex-col overflow-hidden p-0`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(_e,{initialContent:c,onChange:l,isDark:p,className:`min-h-0 flex-1`},`${i??`file`}-${f}`)}):(0,q.jsx)(`div`,{className:x(X(),`min-h-0 flex-1 overflow-y-auto text-sm`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(he,{content:c,className:`text-sm`})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.pickFile})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesEmpty})]})}var Z=e(t(),1);function Et(e,t){switch(e){case`adventurer`:return t.avatarStyleAdventurer;case`bottts`:return t.avatarStyleRobot;case`lorelei`:return t.avatarStyleLorelei;case`thumbs`:return t.avatarStyleThumbs;case`fun-emoji`:return t.avatarStyleFunEmoji;default:return e}}function Dt(e){let{agentId:t,value:n,onChange:r,a:i,id:a}=e,o=(0,Z.useRef)(null),[s,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(null),[d,f]=(0,Z.useState)(!1),p=(0,Z.useMemo)(()=>{let e=Re(n.trim());return e&&we(e.styleId)?e.styleId:ke[0]??`adventurer`},[n]),m=(0,Z.useCallback)(async(e,n)=>{try{await g(t)}catch{}r(We(e,n)),f(!1)},[t,r]),h=(0,Z.useCallback)(async e=>{let n=e.target.files?.[0];if(e.target.value=``,n){u(null),c(!0);try{await b(t,n),r(xe)}catch(e){let t=e instanceof Error?e.message:``;u(t===`avatar_too_large`?i.avatarTooLarge:t===`unsupported_image_type`||t===`empty_file`?i.avatarInvalidImage:i.avatarUploadFailed)}finally{c(!1)}}},[i,t,r]),_=(e,t)=>{let r=Re(n.trim());return!!(r&&r.styleId===e&&r.seed===t)};return(0,q.jsxs)(`div`,{...a?{id:a}:{},className:`flex flex-col gap-3 sm:col-span-2`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:i.avatarPickerTitle}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{ref:o,type:`file`,accept:`image/png,image/jpeg,image/webp,.png,.jpg,.jpeg,.webp`,className:`hidden`,onChange:e=>void h(e)}),(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1.5 px-2.5 py-1.5 text-xs`,disabled:s,onClick:()=>o.current?.click(),children:[(0,q.jsx)(F,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),s?i.avatarUploading:i.avatarUploadCustom]})]})]}),l?(0,q.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:l}):null,(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:ke.map(e=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>void m(e,qe[0]??t),className:x(`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,p===e?`border-fg bg-fg text-surface-base`:`border-edge-subtle bg-surface-panel text-fg hover:border-edge`),children:Et(e,i)},e))}),(0,q.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/50 p-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[qe.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,96),alt:``,width:44,height:44,className:`size-11 rounded-full object-cover`,draggable:!1})},e)),(0,q.jsxs)(P,{open:d,onOpenChange:f,children:[(0,q.jsx)(it,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`flex size-12 shrink-0 items-center justify-center rounded-xl border border-edge-subtle bg-surface-base text-xs font-medium text-fg-muted hover:border-edge hover:text-fg`,children:i.avatarMore})}),(0,q.jsx)(D,{children:(0,q.jsxs)(C,{className:`z-[80] max-h-72 w-[min(22rem,calc(100vw-2rem))] overflow-y-auto rounded-xl border border-edge-subtle bg-surface-panel p-3 shadow-lg`,sideOffset:6,align:`end`,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs font-medium text-fg-muted`,children:Et(p,i)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:He.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-11 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,88),alt:``,width:40,height:40,className:`size-10 rounded-full object-cover`,draggable:!1})},e))})]})})]})]}),(0,q.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:i.personaAvatar}),(0,q.jsx)(K,{agentId:t,avatar:n,size:40}),n.trim()&&!Re(n.trim())&&n.trim()!==`xopc:custom`?(0,q.jsx)(`span`,{className:`truncate font-mono text-[10px] text-fg-muted`,title:n,children:n}):null]})]})]})}var Ot={name:``,creature:``,emoji:``,avatar:``};function kt(e){let t={...Ot};if(!e.trim())return t;let n={name:`name`,creature:`creature`,emoji:`emoji`,avatar:`avatar`};for(let r of e.split(`
|
|
2
2
|
`)){let e=r.match(/^[-*]\s+\*\*(\w+):\*\*\s*(.*)/i);if(!e)continue;let i=n[e[1].toLowerCase()];if(!i)continue;let a=e[2].trim();/^_\(.*\)_$/.test(a)&&(a=``),t[i]=a}return t}function At(e){return[`# IDENTITY.md - Who Am I?`,``,`- **Name:** ${e.name}`,`- **Creature:** ${e.creature}`,`- **Emoji:** ${e.emoji}`,`- **Avatar:** ${e.avatar}`,``].join(`
|
|
3
3
|
`)}var jt={callName:``,pronouns:``,timezone:``,notes:``};function Mt(e){let t={...jt};if(!e.trim())return t;let n={name:`callName`,"what to call them":`callName`,pronouns:`pronouns`,timezone:`timezone`,notes:`notes`},r=e.split(`
|
|
4
4
|
`),i=-1;for(let e=0;e<r.length;e++){let a=r[e];if(/^##\s+Context/i.test(a)){i=e+1;continue}let o=a.match(/^[-*]\s+\*\*(.+?):\*\*\s*(.*)/i);if(!o)continue;let s=n[o[1].toLowerCase().trim()];if(!s)continue;let c=o[2].trim();/^_\(.*\)_$/.test(c)&&(c=``),t[s]=c}if(i>0){let e=r.slice(i).join(`
|
|
@@ -213,4 +213,4 @@ Analytical, clear, and methodical. Like a good data scientist — lets the numbe
|
|
|
213
213
|
|
|
214
214
|
Bold, aesthetic, and thoughtful. Like a creative director who has opinions but listens — pushes for better while respecting what the client actually needs.
|
|
215
215
|
`}];function dn({existingAgentIds:e,onComplete:t,onSkip:n}){let r=u(e=>e.language),i=je(r).agentsSettings,a=(0,Z.useMemo)(()=>un.filter(t=>!e.has(t.id)),[e]),[o,s]=(0,Z.useState)(()=>new Set(un.map(e=>e.id))),[c,l]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(null),[p,m]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{a.length===0&&t()},[a,t]);let h=e=>{s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=async()=>{let e=a.filter(e=>o.has(e.id));if(e.length===0){t();return}l(!0),m(null),f({current:0,total:e.length});for(let t=0;t<e.length;t++){let n=e[t];f({current:t+1,total:e.length});try{await de({name:n.name,id:n.id,workspace:`~/.xopc/workspace/${n.id}`,description:r===`zh`?n.descriptionZh:n.descriptionEn}),await N(n.id,`IDENTITY.md`,n.identityMd),await N(n.id,`SOUL.md`,n.soulMd);let e=n.toolsDisable;e&&e.length>0&&await _(n.id,{toolsDisable:e})}catch(e){let t=e instanceof Error?e.message:String(e);if(t.toLowerCase().includes(`already exists`))continue;m(i.presetCreateFailed.replace(`{{name}}`,n.name).replace(`{{message}}`,t)),l(!1);return}}l(!1),t()};return a.length===0?null:(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-2xl flex-col items-center gap-6 px-4 py-12`,children:[(0,q.jsxs)(`div`,{className:`text-center`,children:[(0,q.jsxs)(`div`,{className:`mb-3 inline-flex items-center gap-2 rounded-full bg-accent/10 px-3 py-1.5 text-sm font-medium text-accent`,children:[(0,q.jsx)(ve,{className:`size-4`,"aria-hidden":!0}),i.presetSetupBadge]}),(0,q.jsx)(`h2`,{className:`text-xl font-semibold text-fg`,children:i.presetSetupTitle}),(0,q.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:i.presetSetupSubtitle})]}),(0,q.jsx)(`div`,{className:`w-full space-y-3`,children:a.map(e=>(0,q.jsx)(fn,{preset:e,checked:o.has(e.id),disabled:c,language:r,onToggle:()=>h(e.id)},e.id))}),p?(0,q.jsx)(`div`,{role:`alert`,className:`w-full rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`,children:p}):null,d&&c?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:i.presetCreatingProgress.replace(`{{current}}`,String(d.current)).replace(`{{total}}`,String(d.total))}):null,(0,q.jsxs)(`div`,{className:`flex w-full items-center justify-between border-t border-edge-subtle pt-4`,children:[(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`gap-2 text-fg-muted`,disabled:c,onClick:()=>{localStorage.setItem(ln,`true`),n()},children:[(0,q.jsx)(V,{className:`size-4`,"aria-hidden":!0}),i.presetSkip]}),(0,q.jsxs)(k,{type:`button`,variant:`primary`,className:`gap-2`,disabled:c||o.size===0,onClick:()=>void g(),children:[(0,q.jsx)(ve,{className:`size-4`,"aria-hidden":!0}),c?i.presetCreating:i.presetCreateSelected.replace(`{{count}}`,String(o.size))]})]})]})}function fn(e){let{preset:t,checked:n,disabled:r,language:i,onToggle:a}=e,o=i===`zh`?t.descriptionZh:t.descriptionEn;return(0,q.jsxs)(`label`,{className:x(`flex cursor-pointer items-start gap-3 rounded-xl border px-4 py-3 transition-colors`,n?`border-accent/50 bg-accent/5`:`border-edge-subtle bg-surface-panel/40`,r&&`pointer-events-none opacity-50`),children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:n,disabled:r,onChange:a,className:`mt-1 shrink-0 accent-accent`}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`text-lg`,"aria-hidden":!0,children:t.emoji}),(0,q.jsx)(`span`,{className:`font-medium text-fg`,children:t.name})]}),(0,q.jsx)(`p`,{className:`mt-0.5 text-sm text-fg-muted`,children:o})]})]})}var pn=`main`,mn=/^[a-z0-9][a-z0-9_-]{0,63}$/i,hn=/[^a-z0-9_-]+/g,gn=/^-+/,_n=/-+$/,vn=/^[a-z0-9][a-z0-9_-]{0,63}$/,yn=new Set([`con`,`prn`,`aux`,`nul`,`com1`,`com2`,`com3`,`com4`,`com5`,`com6`,`com7`,`com8`,`com9`,`lpt1`,`lpt2`,`lpt3`,`lpt4`,`lpt5`,`lpt6`,`lpt7`,`lpt8`,`lpt9`]);function bn(e){let t=e.trim();if(!t)return pn;let n=t.toLowerCase();return mn.test(t)?n:n.replace(hn,`-`).replace(gn,``).replace(_n,``).slice(0,64)||pn}function xn(e,t){let n=e?.trim();if(n){let e=n.toLowerCase();return vn.test(e)?e===pn?{ok:!1,error:`"${pn}" is reserved`}:yn.has(e)?{ok:!1,error:`Agent id "${e}" is reserved (Windows device name).`}:{ok:!0,agentId:e}:{ok:!1,error:`Invalid agent id: use 1–64 characters; letters, digits, underscores, and hyphens only; start with a letter or digit.`}}let r=bn(t.trim());return r===pn?{ok:!1,error:`Display name cannot produce a valid agent folder id. Set an explicit Agent id (letters, digits, underscores, hyphens only).`}:yn.has(r)?{ok:!1,error:`That display name resolves to "${r}", which is reserved. Use a different display name or set an explicit Agent id.`}:vn.test(r)?{ok:!0,agentId:r}:{ok:!1,error:`Could not derive a folder-safe agent id from the display name. Set an explicit Agent id (letters, digits, underscores, hyphens only).`}}function Sn(e){let t=e.trim();return t?`~/.xopc/workspace/${bn(t)}`:``}function Cn(){return z(`/api/dreaming`)}async function wn(){let e=await H(Cn());if(!e.payload)throw Error(`Missing payload`);return e.payload}async function Tn(e){await H(z(`/api/dreaming/action`),{method:`POST`,body:JSON.stringify({action:e})})}async function En(e=`deep`){let t=await H(z(`/api/dreaming/run`),{method:`POST`,body:JSON.stringify({phase:e})}),n=!!t.payload?.triggered,r=typeof t.payload?.jobId==`string`?t.payload.jobId:``;if(!n||!r)throw Error(`Failed to trigger`);return{triggered:n,jobId:r,phase:e}}async function Dn(e){let t=await H(z(`/api/dreaming/preview${typeof e==`number`&&Number.isFinite(e)?`?limit=${encodeURIComponent(String(e))}`:``}`));if(!t.payload)throw Error(`Missing payload`);return t.payload}async function On(e=50){return(await H(z(`/api/dreaming/events${`?limit=${encodeURIComponent(String(e))}`}`))).payload?.events??[]}function kn({language:e,a:t,busy:n,sleeping:r,listSearchQuery:i,onListSearchQueryChange:a,onSleep:o,onAddAgent:s}){return(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2`,children:[(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`shrink-0 gap-2`,disabled:n||r,onClick:()=>void o(),"aria-label":e===`zh`?`让智能体进入睡眠流程`:`Trigger agent sleep sequence`,title:e===`zh`?`由浅入深:Light → Deep → REM`:`Light → Deep → REM`,children:[(0,q.jsx)(Ce,{className:`size-4 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),e===`zh`?r?`睡眠中…`:`睡眠`:r?`Sleeping…`:`Sleep`]}),(0,q.jsxs)(`label`,{className:`relative flex min-h-9 min-w-0 max-w-sm cursor-text items-center rounded-pill border border-edge bg-surface-base py-1.5 pl-9 pr-3 shadow-surface dark:bg-surface-hover/40 sm:max-w-md`,children:[(0,q.jsx)(Ue,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-disabled`,strokeWidth:1.75,"aria-hidden":!0}),(0,q.jsx)(`input`,{type:`search`,role:`searchbox`,enterKeyHint:`search`,value:i,onChange:e=>a(e.target.value),placeholder:t.listSearchPlaceholder,autoComplete:`off`,spellCheck:!1,"aria-label":t.listSearchPlaceholder,className:`min-w-0 flex-1 appearance-none border-0 bg-transparent py-0.5 text-sm leading-normal text-fg caret-current placeholder:text-fg-disabled focus:border-0 focus:shadow-none focus:outline-none focus:ring-0 focus-visible:outline-none`})]}),(0,q.jsxs)(k,{type:`button`,variant:`primary`,className:`shrink-0 gap-2`,"aria-label":t.addAgentAria,disabled:n,onClick:()=>s(),children:[(0,q.jsx)(Ge,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t.addAgent]})]})}function An(e){let{panel:t,selectedId:n,hasToken:r,dataAgentsLength:i,saveErrorMessage:a,setError:o}=e,[s,c]=(0,Z.useState)(null),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(null),[p,m]=(0,Z.useState)(``),[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(`edit`),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(0),C=(0,Z.useRef)(p);C.current=p;let w=(0,Z.useRef)(n);w.current=n;let T=(0,Z.useRef)(d);T.current=d;let ee=(0,Z.useRef)(null),E=(0,Z.useRef)(``),D=(0,Z.useRef)(``),O=ie(async()=>{let e=w.current,t=T.current;if(!e||!t||`${e}:${t}`!==E.current)return;let n=C.current;if(n!==D.current){g(!0),o(null);try{await N(e,t,n),D.current=n,c(n=>!n||n.agentId!==e?n:{...n,files:n.files.map(e=>e.name===t?{...e,missing:!1}:e)})}catch(e){o(e instanceof Error?e.message:a)}finally{g(!1)}}},800),k=(0,Z.useRef)(O.flush);return k.current=O.flush,(0,Z.useEffect)(()=>()=>{k.current()},[]),(0,Z.useEffect)(()=>{if(t!==`files`||!n||!r)return;let e=!1;return u(!0),Pe(n).then(t=>{e||c(t)}).catch(()=>{e||c(null)}).finally(()=>{e||u(!1)}),()=>{e=!0}},[t,n,r,i]),(0,Z.useEffect)(()=>{if(!d||!n||!r)return;let e=!1;return O.flush(),b(!0),M(n,d).then(t=>{e||(E.current=`${n}:${d}`,D.current=t,m(t),S(e=>e+1))}).catch(()=>{e||(E.current=`${n}:${d}`,D.current=``,m(``),S(e=>e+1))}).finally(()=>{e||b(!1)}),()=>{e=!0}},[d,n,r,O]),(0,Z.useEffect)(()=>{!d||!n||y||O()},[p,d,n,y,O]),(0,Z.useEffect)(()=>{if(t===`files`)return()=>{O.flush()}},[t,O]),(0,Z.useEffect)(()=>{v(`edit`)},[d,n]),{files:s,setFiles:c,filesLoading:l,activeFile:d,setActiveFile:f,fileDraft:p,setFileDraft:m,fileSaving:h,bootstrapViewMode:_,setBootstrapViewMode:v,bootstrapFileLoading:y,bootstrapEditorNonce:x,overviewSaveBootstrapRef:ee,saveBootstrapDebounced:O}}function jn(e){let{panel:t,hasToken:n,bindingsFromConfig:r,gatewayCfgLoading:i,selected:a,saveErrorMessage:o,setBusy:s,setError:c}=e,[l,u]=(0,Z.useState)([]),[d,f]=(0,Z.useState)(``),[p,m]=(0,Z.useState)([]),[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)([]),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(null),[C,w]=(0,Z.useState)(``),T=(0,Z.useMemo)(()=>a?l.filter(e=>e.agentId.toLowerCase()===a.id.toLowerCase()):[],[l,a?.id]);(0,Z.useEffect)(()=>{t!==`channels`||!n||u(r)},[t,n,r]),(0,Z.useEffect)(()=>{if(t!==`channels`||!n)return;let e=!1;return g(!0),at().then(t=>{e||m(t)}).catch(()=>{e||m([])}).finally(()=>{e||g(!1)}),()=>{e=!0}},[t,n]),(0,Z.useEffect)(()=>{h||t!==`channels`||p.length===0||f(e=>e&&p.some(t=>t.name===e)?e:p[0].name)},[h,t,p]),(0,Z.useEffect)(()=>{if(t!==`channels`||!n)return;let e=d.trim();if(!e){v([]);return}let r=!1;return S(null),b(!0),dt(e).then(e=>{r||v(e)}).catch(()=>{r||v([])}).finally(()=>{r||b(!1)}),()=>{r=!0}},[t,n,d]);let ee=(0,Z.useCallback)(()=>{let e=d.trim();e&&(b(!0),dt(e).then(e=>{v(e),S(t=>t!=null&&t<e.length?t:null)}).catch(()=>{v([]),S(null)}).finally(()=>{b(!1)}))},[d]),E=!h&&p.length===0,D=t===`channels`&&n&&i,O=(0,Z.useCallback)(async e=>{s(!0),c(null);try{let t=l.filter(t=>t!==e);await A(t),u(t)}catch(e){c(e instanceof Error?e.message:o)}finally{s(!1)}},[l,o,s,c]);return{agentBindings:T,allBindings:l,bindChannelStatuses:p,bindChannelsLoading:h,bindSessionChats:_,bindSessionsLoading:y,bindingsLoading:D,newBindChannel:d,setNewBindChannel:f,newBindSessionIdx:x,setNewBindSessionIdx:S,newBindCustomPeer:C,setNewBindCustomPeer:w,onAddBinding:(0,Z.useCallback)(async e=>{if(e.preventDefault(),!a||!d.trim())return;let t=xt(d,C,x,_),n=[...l,{agentId:a.id,priority:100,enabled:!0,match:t}];s(!0),c(null);try{await A(n),u(n),S(null),w(``)}catch(e){c(e instanceof Error?e.message:o)}finally{s(!1)}},[l,_,d,C,x,o,a,s,c]),onRemoveBinding:O,refreshBindSessions:ee,useManualChannel:E}}function Mn(e){let{panel:t,hasToken:n,data:r,selected:i,saveErrorMessage:a,setBusy:o,setError:s}=e,[c,l]=(0,Z.useState)([]),[u,d]=(0,Z.useState)(!1),f=(0,Z.useMemo)(()=>!r||!i?[]:c.filter(e=>!ut(e)&&yt(e,i.id,r.defaultId)),[c,r,i]);(0,Z.useEffect)(()=>{if(t!==`cron`||!n)return;let e=!1;return d(!0),st().then(t=>{e||l(t)}).catch(()=>{e||l([])}).finally(()=>{e||d(!1)}),()=>{e=!0}},[t,n]);async function p(e,t){o(!0),s(null);try{await ct(e.id,{agentId:t===``?null:t}),l(await st())}catch(e){s(e instanceof Error?e.message:a)}finally{o(!1)}}return{agentCronJobs:f,cronJobs:c,cronLoading:u,onSetCronJobAgent:p}}function Nn(e,t){let[n,r]=(0,Z.useState)([]),[i,a]=(0,Z.useState)(!1),o=(0,Z.useMemo)(()=>n.filter(e=>e.enabled!==!1),[n]);return(0,Z.useEffect)(()=>{if(!e||!t)return;let n=!1;return a(!0),Ae().then(e=>{n||r(e)}).catch(()=>{n||r([])}).finally(()=>{n||a(!1)}),()=>{n=!0}},[e,t]),{catalogForPick:o,skillCatalog:n,skillsCatalogLoading:i}}function Pn(e){return Nn(e.panel===`skills`,e.hasToken)}function Fn(e){let{panel:t,selected:n}=e,[r,i]=(0,Z.useState)(()=>new Set),[a,o]=(0,Z.useState)(()=>new Set),[s,c]=(0,Z.useState)(!0);return(0,Z.useEffect)(()=>{!n||t!==`tools`||i(new Set(n.tools.entryDisable))},[t,n]),(0,Z.useEffect)(()=>{if(!n||t!==`skills`)return;let e=n.skills.entry===void 0;if(c(e),e){let e=n.skills.effectiveAllowlist;o(new Set(e??[]))}else o(new Set(n.skills.entry??[]))},[t,n]),{toolEntryDisable:r,setToolEntryDisable:i,skillsPick:a,setSkillsPick:o,skillsInherit:s,setSkillsInherit:c}}function In(){let e=u(e=>e.language),t=je(e),n=t.agentsSettings,[i,o]=(0,Z.useState)(!1),[s,c]=(0,Z.useState)(null),[l,d]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(``),g=t.cron,v=t.chat,y=!!Xe(e=>e.token),[b,x]=Fe(),S=p(),{agentId:C}=ne(),w=be(e=>e.setPageHeader),T=be(e=>e.clearPageHeader),{data:ee,error:E,isLoading:D,mutate:k}=r(y?`settings-gateway-agents`:null,a,{revalidateOnFocus:!1}),{data:te}=ue(y),A=(0,Z.useMemo)(()=>O(te?.payload?.config??{}),[te]),j=ee??null,M=!!(y&&D),[re,N]=(0,Z.useState)(null),ie=E instanceof Error?E.message:E?n.loadError:null,ae=re??ie,[oe,P]=(0,Z.useState)(null),[ce,le]=(0,Z.useState)(!1),[F,fe]=(0,Z.useState)(`overview`),[pe,me]=(0,Z.useState)(``),[I,he]=(0,Z.useState)(``),[ge,_e]=(0,Z.useState)(``),[ve,ye]=(0,Z.useState)(``),[xe,L]=(0,Z.useState)(``),[Ce,R]=(0,Z.useState)(null),[we,z]=(0,Z.useState)(!1),Te=(0,Z.useRef)(``),[B,V]=(0,Z.useState)(!1),[Ee,De]=(0,Z.useState)(!1),[H,Oe]=(0,Z.useState)(``),[ke,Ae]=(0,Z.useState)(``),[Me,Ne]=(0,Z.useState)(``),[Pe,Ie]=(0,Z.useState)(``),[Le,Re]=(0,Z.useState)(``),ze=(0,Z.useRef)(null),[Be,Ve]=(0,Z.useState)(!1),[He,Ue]=(0,Z.useState)(!1),[We,Ge]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{if(j){if(C&&j.agents.some(e=>e.id===C)){P(C);return}P(e=>e&&j.agents.some(t=>t.id===e)?e:j.defaultId)}},[j,C]),(0,Z.useEffect)(()=>{if(!j||M)return;let e=j.agents.length<=1&&j.agents.every(e=>e.id===j.defaultId),t=localStorage.getItem(ln)===`true`;le(e&&!t)},[j,M]);let Ke=(0,Z.useCallback)(()=>{le(!1),k()},[k]),qe=(0,Z.useCallback)(()=>{le(!1)},[]);(0,Z.useEffect)(()=>{!j||!C||j.agents.some(e=>e.id===C)||S(et,{replace:!0})},[j,C,S]),(0,Z.useEffect)(()=>{C&&fe(`overview`)},[C]),(0,Z.useEffect)(()=>{b.get(`panel`)===`defaults`&&S(`/settings/agent-chat`,{replace:!0,state:{[Se]:et}})},[b,S]),(0,Z.useEffect)(()=>{if(b.get(`focus`)!==`avatar`||!C||(fe(`overview`),M||!j?.agents.some(e=>e.id===C)))return;let e=window.setTimeout(()=>{document.getElementById(`agent-avatar-settings`)?.scrollIntoView({behavior:`smooth`,block:`center`}),x(e=>{let t=new URLSearchParams(e);return t.delete(`focus`),t},{replace:!0})},220);return()=>window.clearTimeout(e)},[b,C,M,j,x]);let U=(0,Z.useMemo)(()=>j?.agents.find(e=>e.id===oe)??null,[j,oe]),W=An({panel:F,selectedId:oe,hasToken:y,dataAgentsLength:j?.agents.length,saveErrorMessage:n.saveError,setError:N}),G=Fn({panel:F,selected:U}),K=jn({panel:F,hasToken:y,bindingsFromConfig:A,gatewayCfgLoading:te===void 0,selected:U,saveErrorMessage:n.saveError,setBusy:V,setError:N}),Je=Mn({panel:F,hasToken:y,data:j,selected:U,saveErrorMessage:n.saveError,setBusy:V,setError:N}),Ye=Pn({panel:F,hasToken:y});(0,Z.useEffect)(()=>{if(!U){Ae(``),Ne(``),Ie(``),Re(``);return}Ae(U.workspace),Ne(U.model?.primary??``),Ie(Qe(U,je(e).agentsSettings)),Re(U.description?.trim()??``)},[U?.id,e]);let Ze=(0,Z.useCallback)(()=>{let e=Sn(I.trim()||pe);ye(t=>t===``||t===Te.current?(Te.current=e,e):t)},[I,pe]),$e=(0,Z.useCallback)(()=>{Te.current=``,me(``),he(``),_e(``),ye(``),L(``),R(null),z(!0)},[]),tt=(0,Z.useCallback)(e=>new Promise(t=>window.setTimeout(t,e)),[]),nt=(0,Z.useCallback)(async()=>{if(Ee||B)return;De(!0),N(null);let e=[`light`,`deep`,`rem`];try{(async()=>{for(let t of e)try{await En(t)}catch{}})();for(let t=0;t<e.length;t++){let n=e[t];window.dispatchEvent(new CustomEvent(`dreaming-phase-start`,{detail:{phase:n,source:`ui`}})),await tt(n===`light`?7e3:n===`deep`?9e3:8e3),t===e.length-1&&(window.__xopcDreamingIgnoreSseUntil=Date.now()+6e4,window.dispatchEvent(new CustomEvent(`dreaming-phase-end`,{detail:{phase:n,source:`ui`}})))}}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{De(!1)}},[n.saveError,B,Ee,tt]),rt=(0,Z.useMemo)(()=>(0,q.jsx)(kn,{language:e,a:n,busy:B,sleeping:Ee,listSearchQuery:H,onListSearchQueryChange:Oe,onSleep:()=>void nt(),onAddAgent:()=>$e()}),[n,B,e,H,$e,Ee,nt]);(0,Z.useLayoutEffect)(()=>y?(w({startExtra:null,main:null,end:rt}),()=>T()):(T(),()=>T()),[rt,T,y,w]);async function it(e){e.preventDefault();let t=pe.trim();if(!t)return;let r=xn(I,t);if(r.ok===!1){R(r.error);return}let i=ve.trim()||Sn(I.trim()||t);if(i){V(!0),R(null);try{let e=ge.trim(),{createdAgentId:n,...r}=await de({name:t,workspace:i,...I.trim()?{id:I.trim()}:{},...xe.trim()?{model:xe.trim()}:{},...e?{description:e}:{}});k(r,{revalidate:!1}),me(``),he(``),_e(``),ye(``),L(``),R(null),z(!1),P(n),S(se(n))}catch(e){R(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function at(){if(U){V(!0),N(null);try{let e=Le.trim();k(await _(U.id,{name:Pe.trim()||void 0,description:e.length>0?e:null,workspace:ke.trim()||void 0,model:Me.trim()||null}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function ot(e){V(!0),N(null);try{k(await _(e.id,{setDefault:!0}),{revalidate:!1}),P(e.id)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}async function st(e,t){V(!0),N(null);try{let n=await f(e.id,t);k(n,{revalidate:!1}),P(n.defaultId),fe(`overview`),C===e.id&&S(et,{replace:!0}),o(!1),c(null),h(``)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}function ct(e,t){e.id!==`main`&&(c(e),d(t),h(``),o(!0))}async function lt(){if(U){V(!0),N(null);try{let e=[...G.toolEntryDisable].sort((e,t)=>e.localeCompare(t));k(await _(U.id,{toolsDisable:e}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function ut(){if(U){V(!0),N(null);try{k(await _(U.id,{toolsDisable:null}),{revalidate:!1}),G.setToolEntryDisable(new Set)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function dt(){if(U){V(!0),N(null);try{k(await _(U.id,{skills:G.skillsInherit?null:[...G.skillsPick].sort((e,t)=>e.localeCompare(t))}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}let ft=F===`channels`||F===`cron`,pt=(()=>{if(!U||F!==`overview`)return!1;let e=Qe(U,n),t=U.description?.trim()??``,r=U.workspace,i=U.model?.primary??``;return Pe.trim()!==e||Le.trim()!==t||ke.trim()!==r||Me.trim()!==i})(),mt=(()=>{if(ft)return!1;switch(F){case`overview`:return pt||Be;case`profile`:return He;default:return!0}})(),ht=ft||!mt;function gt(){Ge(!0),setTimeout(()=>Ge(!1),2e3)}async function _t(){switch(F){case`overview`:await Promise.all([at(),W.overviewSaveBootstrapRef.current?.()??Promise.resolve()]),gt();break;case`profile`:await ze.current?.(),gt();break;case`tools`:await lt(),gt();break;case`skills`:await dt(),gt();break;case`files`:W.saveBootstrapDebounced.flush(),gt();break;default:break}}function J(e){e||S(et)}return{hasToken:y,a:n,chat:v,language:e,data:j,loading:M,displayError:ae,navigate:S,routeAgentId:C,showPresetSetup:ce,onPresetSetupComplete:Ke,onPresetSetupSkip:qe,busy:B,listSearchQuery:H,openAddAgentModal:$e,panel:F,setPanel:fe,modalTitle:U?Pe.trim()||Qe(U,n):C??``,modalSubtitle:U?.id??C??``,footerSaveDisabled:ht,savedFlash:We,handleModalFooterSave:_t,onAgentModalOpenChange:J,addAgentModalOpen:we,setAddAgentModalOpen:z,createWorkspaceSuggestedRef:Te,createModalError:Ce,setCreateModalError:R,createDisplayName:pe,setCreateDisplayName:me,createAgentId:I,setCreateAgentId:he,createDescription:ge,setCreateDescription:_e,createWorkspace:ve,setCreateWorkspace:ye,createModel:xe,setCreateModel:L,onCreate:it,applyCreateWorkspaceSuggestion:Ze,deleteDialogOpen:i,setDeleteDialogOpen:o,deletePurge:l,deleteTarget:s,setDeleteTarget:c,deleteConfirmText:m,setDeleteConfirmText:h,performDelete:st,editorPanelProps:{a:n,chat:v,cCron:g,selected:U,panel:F,data:j,busy:B,editName:Pe,setEditName:Ie,editDescription:Le,setEditDescription:Re,editWorkspace:ke,setEditWorkspace:Ae,editModel:Me,setEditModel:Ne,onSetDefault:()=>{U&&ot(U)},onSaveAgentEdits:()=>void at(),onDelete:e=>{U&&ct(U,e)},overviewSaveBootstrapRef:W.overviewSaveBootstrapRef,profileSaveRef:ze,setOverviewBootstrapDirty:Ve,setProfileDirty:Ue,filesLoading:W.filesLoading,files:W.files,activeFile:W.activeFile,setActiveFile:W.setActiveFile,bootstrapViewMode:W.bootstrapViewMode,setBootstrapViewMode:W.setBootstrapViewMode,fileDraft:W.fileDraft,setFileDraft:W.setFileDraft,fileSaving:W.fileSaving,bootstrapFileLoading:W.bootstrapFileLoading,bootstrapEditorNonce:W.bootstrapEditorNonce,toolEntryDisable:G.toolEntryDisable,setToolEntryDisable:G.setToolEntryDisable,onSaveTools:()=>void lt(),onClearToolsEntry:()=>void ut(),skillsCatalogLoading:Ye.skillsCatalogLoading,catalogForPick:Ye.catalogForPick,skillsInherit:G.skillsInherit,setSkillsInherit:G.setSkillsInherit,skillsPick:G.skillsPick,setSkillsPick:G.setSkillsPick,onSaveSkills:()=>void dt(),bindingsLoading:K.bindingsLoading,agentBindings:K.agentBindings,bindChannelStatuses:K.bindChannelStatuses,bindChannelsLoading:K.bindChannelsLoading,useManualChannel:K.useManualChannel,newBindChannel:K.newBindChannel,setNewBindChannel:K.setNewBindChannel,bindSessionChats:K.bindSessionChats,bindSessionsLoading:K.bindSessionsLoading,newBindSessionIdx:K.newBindSessionIdx,setNewBindSessionIdx:K.setNewBindSessionIdx,newBindCustomPeer:K.newBindCustomPeer,setNewBindCustomPeer:K.setNewBindCustomPeer,refreshBindSessions:K.refreshBindSessions,onRemoveBinding:e=>void K.onRemoveBinding(e),onAddBinding:K.onAddBinding,cronLoading:Je.cronLoading,agentCronJobs:Je.agentCronJobs,onSetCronJobAgent:(e,t)=>void Je.onSetCronJobAgent(e,t)}}}function Ln(){let e=In();return e.hasToken?e.showPresetSetup&&e.data?(0,q.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col px-4 py-8`,children:(0,q.jsx)(dn,{existingAgentIds:new Set(e.data.agents.map(e=>e.id)),onComplete:e.onPresetSetupComplete,onSkip:e.onPresetSetupSkip})}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,q.jsx)(sn,{a:e.a}),e.displayError?(0,q.jsx)(`div`,{className:`rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`,children:e.displayError}):null,e.loading?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.loading}):e.data?(0,q.jsx)(on,{a:e.a,agents:e.data.agents,searchQuery:e.listSearchQuery,onOpenAgent:t=>e.navigate(se(t)),onChatWithAgent:t=>e.navigate(`/chat/new`,{state:{agentId:t.trim().toLowerCase()}}),onNewAgent:e.openAddAgentModal,busy:e.busy}):null,e.routeAgentId&&e.hasToken?(0,q.jsx)(gt,{open:!!e.routeAgentId,onOpenChange:e.onAgentModalOpenChange,a:e.a,title:e.modalTitle,subtitle:e.modalSubtitle,panel:e.panel,onPanelChange:e.setPanel,onFooterSave:()=>void e.handleModalFooterSave(),footerSaveDisabled:e.footerSaveDisabled,footerSavedFlash:e.savedFlash,busy:e.busy,children:e.loading||!e.data?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.loading}):(0,q.jsx)(nn,{...e.editorPanelProps})}):null,(0,q.jsx)(cn,{open:e.addAgentModalOpen,onOpenChange:t=>{e.setAddAgentModalOpen(t),t||(e.createWorkspaceSuggestedRef.current=``,e.setCreateDisplayName(``),e.setCreateAgentId(``),e.setCreateDescription(``),e.setCreateWorkspace(``),e.setCreateModel(``),e.setCreateModalError(null))},a:e.a,chat:e.chat,busy:e.busy,modalError:e.createModalError,createDisplayName:e.createDisplayName,setCreateDisplayName:e.setCreateDisplayName,createAgentId:e.createAgentId,setCreateAgentId:e.setCreateAgentId,createDescription:e.createDescription,setCreateDescription:e.setCreateDescription,createWorkspace:e.createWorkspace,setCreateWorkspace:e.setCreateWorkspace,createModel:e.createModel,setCreateModel:e.setCreateModel,onCreate:e.onCreate,onSuggestWorkspace:()=>e.applyCreateWorkspaceSuggestion()}),(0,q.jsx)(ft,{open:e.deleteDialogOpen,onOpenChange:t=>{e.setDeleteDialogOpen(t),t||(e.setDeleteTarget(null),e.setDeleteConfirmText(``))},busy:e.busy,deletePurge:e.deletePurge,deleteTarget:e.deleteTarget,deleteConfirmText:e.deleteConfirmText,onDeleteConfirmTextChange:e.setDeleteConfirmText,onConfirm:()=>{e.deleteTarget&&e.performDelete(e.deleteTarget,e.deletePurge)},onCancel:()=>e.setDeleteDialogOpen(!1),a:e.a})]}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,q.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:e.a.title}),(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.needToken})]})}function $({label:e,description:t,children:n}){return(0,q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e}),n,(0,q.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:t})]})}var Rn=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`adaptive`];function zn(e){let{a:t,chat:n,form:r,update:a}=e;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:B,title:t.cardModelsTitle,subtitle:t.label.model}),(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsx)($,{label:t.label.model,description:t.desc.model,children:(0,q.jsx)(ze,{value:r.model,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>a({model:e})})})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:i,title:t.cardGenerationTitle,subtitle:t.cardGenerationSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.maxTokens,description:t.desc.maxTokens,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.maxTokens,min:1,onChange:e=>a({maxTokens:Number.parseInt(e.target.value,10)||0})})}),(0,q.jsx)($,{label:t.label.temperature,description:t.desc.temperature,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.temperature,min:0,max:2,step:.1,onChange:e=>a({temperature:Number.parseFloat(e.target.value)||0})})}),(0,q.jsx)(`div`,{className:`sm:col-span-2`,children:(0,q.jsx)($,{label:t.label.maxToolIterations,description:t.desc.maxToolIterations,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.maxToolIterations,min:1,onChange:e=>a({maxToolIterations:Number.parseInt(e.target.value,10)||0})})})})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:E,title:t.cardBehaviorTitle,subtitle:t.cardBehaviorSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:t.label.thinkingDefault,description:t.desc.thinkingDefault,children:(0,q.jsx)(`select`,{className:Jt(),value:r.thinkingDefault,onChange:e=>a({thinkingDefault:e.target.value}),children:Rn.map(e=>(0,q.jsx)(`option`,{value:e,children:n.thinkingLevels[e]},e))})}),(0,q.jsx)($,{label:t.label.reasoningDefault,description:t.desc.reasoningDefault,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.reasoningDefault,onChange:e=>a({reasoningDefault:e.target.value}),children:[(0,q.jsx)(`option`,{value:`off`,children:t.reasoning.off}),(0,q.jsx)(`option`,{value:`on`,children:t.reasoning.on}),(0,q.jsx)(`option`,{value:`stream`,children:t.reasoning.stream})]})}),(0,q.jsx)($,{label:t.label.verboseDefault,description:t.desc.verboseDefault,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.verboseDefault,onChange:e=>a({verboseDefault:e.target.value}),children:[(0,q.jsx)(`option`,{value:`off`,children:t.verbose.off}),(0,q.jsx)(`option`,{value:`on`,children:t.verbose.on}),(0,q.jsx)(`option`,{value:`full`,children:t.verbose.full})]})})]})]})]})}function Bn(e){let{a:t,form:n,update:r}=e;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:me,title:t.cardBrowserTitle,subtitle:t.cardBrowserSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserEnabled,description:t.desc.browserEnabled,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserEnabled,onChange:e=>r({browserEnabled:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserEnabledOn})]})}),(0,q.jsx)($,{label:t.label.browserHeadless,description:t.desc.browserHeadless,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserHeadless,onChange:e=>r({browserHeadless:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserHeadlessOn})]})}),(0,q.jsx)($,{label:t.label.browserAllowPrivateUrls,description:t.desc.browserAllowPrivateUrls,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserAllowPrivateUrls,onChange:e=>r({browserAllowPrivateUrls:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserAllowPrivateOn})]})}),(0,q.jsx)($,{label:t.label.browserCommandTimeout,description:t.desc.browserCommandTimeout,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:5,value:n.browserCommandTimeout??``,placeholder:`30`,onChange:e=>{let t=e.target.value;r({browserCommandTimeout:t===``?void 0:Number.parseInt(t,10)})}})})]}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserCloudProvider,description:t.desc.browserCloudProvider,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.browserCloudProvider,onChange:e=>r({browserCloudProvider:e.target.value}),children:[(0,q.jsx)(`option`,{value:`local`,children:t.browserCloudProviderLocal}),(0,q.jsx)(`option`,{value:`browserbase`,children:t.browserCloudProviderBrowserbase}),(0,q.jsx)(`option`,{value:`browser-use`,children:t.browserCloudProviderBrowserUse})]})}),(0,q.jsx)($,{label:t.label.browserDialogPolicy,description:t.desc.browserDialogPolicy,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.browserDialogPolicy,onChange:e=>r({browserDialogPolicy:e.target.value}),children:[(0,q.jsx)(`option`,{value:`must_respond`,children:t.browserDialogPolicyMustRespond}),(0,q.jsx)(`option`,{value:`auto_dismiss`,children:t.browserDialogPolicyAutoDismiss}),(0,q.jsx)(`option`,{value:`auto_accept`,children:t.browserDialogPolicyAutoAccept})]})})]}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserCdpUrl,description:t.desc.browserCdpUrl,children:(0,q.jsx)(`input`,{type:`text`,className:Q(),value:n.browserCdpUrl,placeholder:`ws://localhost:9222`,onChange:e=>r({browserCdpUrl:e.target.value}),autoComplete:`off`})}),(0,q.jsx)($,{label:t.label.browserDialogTimeout,description:t.desc.browserDialogTimeout,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:n.browserDialogTimeout??``,placeholder:`300`,onChange:e=>{let t=e.target.value;r({browserDialogTimeout:t===``?void 0:Number.parseInt(t,10)})}})})]})]})]})})}function Vn(e,t){let[n,r]=(0,Z.useState)([]),[i,o]=(0,Z.useState)(!1);return(0,Z.useEffect)(()=>{if(!e||!t)return;let n=!1;return o(!0),a().then(e=>{n||r(Array.isArray(e.builtinToolIds)?e.builtinToolIds:[])}).catch(()=>{n||r([])}).finally(()=>{n||o(!1)}),()=>{n=!0}},[e,t]),{builtinToolIds:n,loading:i}}function Hn(e){let{a:t,form:n,update:r}=e,i=t.advanced,a=je(u(e=>e.language)).agentsSettings,o=!!Xe(e=>e.token),{builtinToolIds:s,loading:c}=Vn(!0,o),l=(0,Z.useMemo)(()=>new Set(n.toolsDisable.map(e=>e.trim()).filter(Boolean)),[n.toolsDisable]),d=(0,Z.useMemo)(()=>n.toolsDisable.map(e=>e.trim()).filter(Boolean).filter(e=>!s.includes(e)).sort((e,t)=>e.localeCompare(t)),[n.toolsDisable,s]),f=(0,Z.useCallback)(e=>{r({toolsDisable:$t(e)})},[r]),p=a.toolsDisableGroups,m=(0,Z.useCallback)(e=>p[e],[p]),h=(0,Z.useCallback)(e=>e in a.toolDescriptions?a.toolDescriptions[e]:``,[a.toolDescriptions]);return(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:rt,title:i.cardToolsDisableTitle,subtitle:i.cardToolsDisableSubtitle}),(0,q.jsx)($,{label:i.toolsDisableFieldLabel,description:i.toolsDisableHint,children:(0,q.jsx)(`div`,{className:`flex flex-col gap-3`,children:o?(0,q.jsx)(en,{mode:`defaults`,builtinToolIds:s,loading:c,disableSet:l,onDisableSetChange:f,unknownDisabledIds:d,getToolDescription:h,getGroupTitle:m,quickActionsDisabled:c,labels:{loadingBuiltin:i.toolsDisableLoadingBuiltin,emptyBuiltin:i.toolsDisableEmptyBuiltin,quickActionsLabel:i.toolsDisableQuickActionsLabel,quickEnableAll:i.toolsDisableQuickEnableAll,quickDisableAll:i.toolsDisableQuickDisableAll,quickReadOnlyWorkspace:i.toolsDisableQuickReadOnlyWorkspace,quickHighRiskOff:i.toolsDisableQuickHighRiskOff,quickNoOutbound:i.toolsDisableQuickNoOutbound,notInBuiltin:i.toolsDisableNotInBuiltin,lockedByDefaults:a.toolsLockedByDefaults}}):(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.needToken})})})]})}function Un(e){let{a:t,chat:n,form:r,update:i}=e,a=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:ee,title:a.cardWebExtractTitle,subtitle:a.cardWebExtractSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)(`div`,{className:`sm:col-span-2`,children:(0,q.jsx)($,{label:a.webExtractModel,description:a.webExtractModelDesc,children:(0,q.jsx)(ze,{value:r.webExtract.model,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>i({webExtract:{...r.webExtract,model:e}})})})}),(0,q.jsx)($,{label:a.webExtractMaxLength,description:a.webExtractMaxLengthDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.webExtract.maxLength??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({webExtract:{...r.webExtract,maxLength:t===``?void 0:Number.parseInt(t,10)}})}})})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Ke,title:a.cardDelegateTitle,subtitle:a.cardDelegateSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.delegateEnabled,description:a.delegateEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.delegate.enabled,onChange:e=>i({delegate:{...r.delegate,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.delegateEnabledOn})]})}),(0,q.jsx)($,{label:a.executeCodeEnabled,description:a.executeCodeEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.executeCode.enabled,onChange:e=>i({executeCode:{...r.executeCode,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.executeCodeEnabledOn})]})})]})]}),(0,q.jsx)(Hn,{...e})]})}function Wn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:T,title:i.cardLimitsTitle,subtitle:i.cardLimitsSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.maxTaskDurationMs,description:i.maxTaskDurationMsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:240,step:1,value:n.maxTaskDurationMinutes??``,placeholder:i.maxTaskDurationPlaceholder,onChange:e=>{let t=e.target.value;if(t===``){r({maxTaskDurationMinutes:void 0});return}let n=Number.parseInt(t,10);Number.isNaN(n)||r({maxTaskDurationMinutes:Math.min(240,Math.max(1,n))})}})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.maxRequestsPerTurn,description:i.maxRequestsPerTurnDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:10,max:200,value:n.maxRequestsPerTurn,onChange:e=>r({maxRequestsPerTurn:Number.parseInt(e.target.value,10)||50})})}),(0,q.jsx)($,{label:i.maxToolFailuresPerTurn,description:i.maxToolFailuresPerTurnDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:20,value:n.maxToolFailuresPerTurn,onChange:e=>r({maxToolFailuresPerTurn:Number.parseInt(e.target.value,10)||3})})})]})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:S,title:i.cardCompactionTitle,subtitle:i.cardCompactionSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.compactionEnabled,description:i.compactionEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.compaction.enabled,onChange:e=>r({compaction:{...n.compaction,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:i.compactionEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.compactionMode,description:i.compactionModeDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.compaction.mode,onChange:e=>r({compaction:{...n.compaction,mode:e.target.value}}),children:[(0,q.jsx)(`option`,{value:`default`,children:i.compactionModeDefault}),(0,q.jsx)(`option`,{value:`safeguard`,children:i.compactionModeSafeguard})]})}),(0,q.jsx)($,{label:i.reserveTokens,description:i.reserveTokensDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1e3,value:n.compaction.reserveTokens,onChange:e=>r({compaction:{...n.compaction,reserveTokens:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:i.triggerThreshold,description:i.triggerThresholdDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:.5,max:.95,step:.05,value:n.compaction.triggerThreshold,onChange:e=>r({compaction:{...n.compaction,triggerThreshold:Number.parseFloat(e.target.value)||.8}})})}),(0,q.jsx)($,{label:i.minMessagesBeforeCompact,description:i.minMessagesBeforeCompactDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:n.compaction.minMessagesBeforeCompact,onChange:e=>r({compaction:{...n.compaction,minMessagesBeforeCompact:Number.parseInt(e.target.value,10)||10}})})}),(0,q.jsx)($,{label:i.keepRecentMessages,description:i.keepRecentMessagesDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:n.compaction.keepRecentMessages,onChange:e=>r({compaction:{...n.compaction,keepRecentMessages:Number.parseInt(e.target.value,10)||5}})})}),(0,q.jsx)($,{label:i.evictionWindow,description:i.evictionWindowDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:.1,max:.5,step:.05,value:n.compaction.evictionWindow,onChange:e=>r({compaction:{...n.compaction,evictionWindow:Number.parseFloat(e.target.value)||.2}})})}),(0,q.jsx)($,{label:i.retentionWindow,description:i.retentionWindowDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:3,max:20,value:n.compaction.retentionWindow,onChange:e=>r({compaction:{...n.compaction,retentionWindow:Number.parseInt(e.target.value,10)||6}})})})]})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:R,title:i.cardPruningTitle,subtitle:i.cardPruningSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.pruningEnabled,description:i.pruningEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.pruning.enabled,onChange:e=>r({pruning:{...n.pruning,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:i.pruningEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.maxToolResultChars,description:i.maxToolResultCharsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1e3,value:n.pruning.maxToolResultChars,onChange:e=>r({pruning:{...n.pruning,maxToolResultChars:Number.parseInt(e.target.value,10)||1e4}})})}),(0,q.jsx)($,{label:i.headKeepRatio,description:i.headKeepRatioDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,max:1,step:.05,value:n.pruning.headKeepRatio,onChange:e=>r({pruning:{...n.pruning,headKeepRatio:Number.parseFloat(e.target.value)||.3}})})}),(0,q.jsx)($,{label:i.tailKeepRatio,description:i.tailKeepRatioDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,max:1,step:.05,value:n.pruning.tailKeepRatio,onChange:e=>r({pruning:{...n.pruning,tailKeepRatio:Number.parseFloat(e.target.value)||.3}})})})]})]})]})]})}function Gn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Oe,title:i.cardParamsTitle,subtitle:i.cardParamsSubtitle}),(0,q.jsx)($,{label:i.paramsJson,description:i.paramsJsonDesc,children:(0,q.jsx)(`textarea`,{className:x(Q(),`min-h-[88px] resize-y font-mono text-xs`),value:n.paramsJson,placeholder:`{}`,onChange:e=>r({paramsJson:e.target.value})})})]})})}function Kn(e){let{a:t,chat:n,form:r,update:i}=e,a=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:De,title:a.cardMemoryTitle,subtitle:a.cardMemorySubtitle}),(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.memoryEnabled,description:a.memoryEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.enabled,onChange:e=>i({memory:{...r.memory,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.memoryEnabledOn})]})}),(0,q.jsx)($,{label:a.useEnhancedSystem,description:a.useEnhancedSystemDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.useEnhancedSystem,onChange:e=>i({memory:{...r.memory,useEnhancedSystem:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.useEnhancedSystemOn})]})}),(0,q.jsx)($,{label:a.userProfileEnabled,description:a.userProfileEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.userProfileEnabled,onChange:e=>i({memory:{...r.memory,userProfileEnabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.userProfileEnabledOn})]})}),(0,q.jsx)($,{label:a.memoryProvider,description:a.memoryProviderDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.memory.provider,onChange:e=>i({memory:{...r.memory,provider:e.target.value}}),children:[(0,q.jsx)(`option`,{value:``,children:a.memoryProviderUnset}),(0,q.jsx)(`option`,{value:`none`,children:`none`}),(0,q.jsx)(`option`,{value:`stub`,children:`stub`})]})}),(0,q.jsx)($,{label:a.injectionFrequency,description:a.injectionFrequencyDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.memory.injectionFrequency,onChange:e=>i({memory:{...r.memory,injectionFrequency:e.target.value}}),children:[(0,q.jsx)(`option`,{value:``,children:a.injectionFrequencyUnset}),(0,q.jsx)(`option`,{value:`every-turn`,children:a.injectionEveryTurn}),(0,q.jsx)(`option`,{value:`first-turn`,children:a.injectionFirstTurn})]})}),(0,q.jsx)($,{label:a.memoryCharLimit,description:a.memoryCharLimitDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.memoryCharLimit??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,memoryCharLimit:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.userCharLimit,description:a.userCharLimitDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.userCharLimit??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,userCharLimit:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.contextCadence,description:a.contextCadenceDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.contextCadence??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,contextCadence:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.dialecticCadence,description:a.dialecticCadenceDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.dialecticCadence??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,dialecticCadence:t===``?void 0:Number.parseInt(t,10)}})}})})]})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Ue,title:a.cardSessionSearchTitle,subtitle:a.cardSessionSearchSubtitle}),(0,q.jsx)($,{label:a.sessionSearchSummaryModel,description:a.sessionSearchSummaryModelDesc,children:(0,q.jsx)(ze,{value:r.sessionSearch.summaryModel,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>i({sessionSearch:{...r.sessionSearch,summaryModel:e}})})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:ve,title:a.cardReviewTitle,subtitle:a.cardReviewSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:a.reviewEnabled,description:a.reviewEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.backgroundReview.enabled,onChange:e=>i({backgroundReview:{...r.backgroundReview,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.reviewEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.memoryNudgeInterval,description:a.memoryNudgeIntervalDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:r.backgroundReview.memoryNudgeInterval,onChange:e=>i({backgroundReview:{...r.backgroundReview,memoryNudgeInterval:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:a.skillNudgeInterval,description:a.skillNudgeIntervalDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:r.backgroundReview.skillNudgeInterval,onChange:e=>i({backgroundReview:{...r.backgroundReview,skillNudgeInterval:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:a.reviewMaxToolRounds,description:a.reviewMaxToolRoundsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:32,value:r.backgroundReview.maxToolRounds,onChange:e=>i({backgroundReview:{...r.backgroundReview,maxToolRounds:Number.parseInt(e.target.value,10)||8}})})}),(0,q.jsx)($,{label:a.reviewMaxHistoryMessages,description:a.reviewMaxHistoryMessagesDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:10,max:200,value:r.backgroundReview.maxHistoryMessages,onChange:e=>i({backgroundReview:{...r.backgroundReview,maxHistoryMessages:Number.parseInt(e.target.value,10)||80}})})}),(0,q.jsx)($,{label:a.reviewMaxDurationMs,description:a.reviewMaxDurationMsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:30,max:600,step:1,value:Math.round((r.backgroundReview.maxDurationMs??12e4)/1e3),onChange:e=>i({backgroundReview:{...r.backgroundReview,maxDurationMs:(Number.parseInt(e.target.value,10)||120)*1e3}})})})]})]})]})]})}function qn(e){return(e.name||e.directoryId).trim()}function Jn(e,t){let n=[];for(let r of t)e.has(r)&&n.push(r);let r=[...e].filter(e=>!t.includes(e)).sort();return[...n,...r]}function Yn(e){let{a:t,form:n,update:r}=e,i=t.advanced,a=je(u(e=>e.language)).agentsSettings,o=!!Xe(e=>e.token),{catalogForPick:s,skillsCatalogLoading:c}=Nn(!0,o),l=(0,Z.useMemo)(()=>s.map(qn),[s]),d=n.skillsAllowlist.length>0,f=(0,Z.useMemo)(()=>new Set(n.skillsAllowlist.map(e=>e.trim()).filter(Boolean)),[n.skillsAllowlist]),p=(0,Z.useMemo)(()=>n.skillsAllowlist.filter(e=>e.trim()&&!l.includes(e.trim())),[n.skillsAllowlist,l]),m=(0,Z.useMemo)(()=>p.map(e=>({name:e.trim(),directoryId:e.trim()})),[p]),h=(0,Z.useMemo)(()=>[...m,...s],[m,s]),g=(0,Z.useCallback)(()=>{r({skillsAllowlist:[]})},[r]),_=(0,Z.useCallback)(()=>{r({skillsAllowlist:[...l]})},[r,l]),v=(0,Z.useCallback)((e,t)=>{let i=new Set(n.skillsAllowlist.map(e=>e.trim()).filter(Boolean));if(t?i.add(e):i.delete(e),i.size===0){r({skillsAllowlist:[]});return}r({skillsAllowlist:Jn(i,l)})},[n.skillsAllowlist,l,r]);return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Me,title:i.cardSkillsTitle,subtitle:i.cardSkillsSubtitle}),(0,q.jsx)($,{label:i.skillsAllowlist,description:i.skillsAllowlistDesc,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:Yt,onClick:g,children:i.skillsAllowlistModeAll}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:Yt,disabled:!d&&l.length===0,onClick:()=>{d||_()},children:i.skillsAllowlistModeRestrict})]}),(0,q.jsx)($e,{to:L(`skills`),className:`shrink-0 text-xs font-medium text-accent-fg hover:underline`,children:a.skillsLibraryLink})]}),o?c?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.skillsCatalogLoading}):h.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.skillsEmptyCatalog}):(0,q.jsx)(`div`,{className:x(`max-h-[min(50vh,22rem)] overflow-y-auto overscroll-contain pr-0.5`,!d&&`pointer-events-none opacity-50`),children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-2.5 text-sm`,role:`list`,children:h.filter(e=>qn(e)).map(e=>{let t=qn(e),n=d&&f.has(t),r=typeof e.description==`string`?e.description.trim():``,o=r||a.skillsNoDescription,s=!l.includes(t);return(0,q.jsx)(`li`,{className:`h-16 shrink-0 overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 dark:border-edge-subtle`,children:(0,q.jsxs)(`label`,{className:`flex h-full cursor-pointer items-center gap-3 text-sm`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`shrink-0 rounded border-edge`,checked:n,disabled:!d,onChange:()=>v(t,!n)}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1 overflow-hidden`,children:[(0,q.jsxs)(`div`,{className:`truncate font-mono text-xs font-medium text-fg`,title:t,children:[t,s?(0,q.jsxs)(`span`,{className:`ml-1.5 font-sans text-[10px] font-normal text-fg-muted`,children:[`(`,i.skillsAllowlistNotInCatalog,`)`]}):null]}),(0,q.jsx)(`p`,{className:x(`mt-0.5 truncate text-xs leading-tight text-fg-muted`,!r&&`italic text-fg-subtle`),title:o,children:o})]})]})},t)})})}):(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.needToken})]})})]})})}function Xn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:W,title:i.cardSystemPromptTitle,subtitle:i.cardSystemPromptSubtitle}),(0,q.jsx)($,{label:i.systemPromptOverride,description:i.systemPromptOverrideDesc,children:(0,q.jsx)(`textarea`,{className:x(Q(),`min-h-[140px] resize-y font-mono text-xs`),value:n.systemPromptOverride,placeholder:i.systemPromptPlaceholder,onChange:e=>r({systemPromptOverride:e.target.value})})})]})})}function Zn(e){let{a:t,form:n,update:r}=e;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:fe,title:t.cardWorkspaceTitle,subtitle:t.cardWorkspaceSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:t.label.workspace,description:t.desc.workspace,children:(0,q.jsx)(`input`,{type:`text`,className:Q(),value:n.workspace,onChange:e=>r({workspace:e.target.value}),autoComplete:`off`})}),(0,q.jsx)($,{label:t.label.mediaMaxMb,description:t.desc.mediaMaxMb,children:(0,q.jsx)(`input`,{type:`number`,min:1,step:1,className:Q(),value:n.mediaMaxMb??``,placeholder:`20`,onChange:e=>{let t=e.target.value;r({mediaMaxMb:t===``?void 0:Number(t)})}})})]})]})})}function Qn(e){let{sectionId:t,intro:n,vm:r,children:i}=e,a=je(u(e=>e.language)),o=a.agentSettings,s=a.settingsSections[t]??t;return r.hasToken?r.loading?(0,q.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-8`,children:[(0,q.jsx)(`div`,{className:`h-8 w-48 animate-pulse rounded bg-surface-hover`}),(0,q.jsx)(`div`,{className:`mt-6 h-32 animate-pulse rounded-xl bg-surface-hover`}),(0,q.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:a.logs.loading})]}):r.form?(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,q.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:s}),(0,q.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-fg-muted`,children:n}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:o.sectionDesc})]}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-end gap-2`,children:[r.saveOk?(0,q.jsx)(`span`,{className:`text-sm text-fg-muted`,children:o.saved}):null,(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:!r.dirty||r.saving,onClick:r.discard,children:o.discard}),(0,q.jsx)(k,{type:`button`,variant:`primary`,disabled:!r.dirty||r.saving,onClick:()=>void r.save(),children:r.saving?o.saving:o.save})]})]}),r.error?(0,q.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`,role:`alert`,children:r.error}):null,(0,q.jsx)(`div`,{className:`flex min-w-0 flex-col gap-5 pb-8`,children:i})]}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:[(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:r.error??r.fetchError??o.loadError}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>void r.mutate(),children:a.logs.refresh})]}):(0,q.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:(0,q.jsxs)(`div`,{className:`flex items-start gap-3 rounded-2xl bg-surface-base p-6`,children:[(0,q.jsx)(B,{className:`mt-0.5 size-5 shrink-0 text-fg-subtle`,strokeWidth:1.75}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`text-base font-semibold text-fg`,children:s}),(0,q.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:o.needToken})]})]})})}var $n={enabled:!0,mode:`default`,reserveTokens:8e3,triggerThreshold:.8,minMessagesBeforeCompact:10,keepRecentMessages:5,evictionWindow:.2,retentionWindow:6},er={enabled:!0,maxToolResultChars:1e4,headKeepRatio:.3,tailKeepRatio:.3},tr={enabled:!0,useEnhancedSystem:!0,userProfileEnabled:!0,provider:``,injectionFrequency:``,memoryCharLimit:void 0,userCharLimit:void 0,contextCadence:void 0,dialecticCadence:void 0},nr={summaryModel:``},rr={enabled:!1,memoryNudgeInterval:10,skillNudgeInterval:10,maxToolRounds:8,maxHistoryMessages:80,maxDurationMs:12e4},ir={model:``,maxLength:void 0};function ar(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`&&e&&`primary`in e){let t=e.primary;return typeof t==`string`?t:``}return``}function or(e){if(typeof e!=`object`||!e||!(`fallbacks`in e))return[];let t=e.fallbacks;return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e.trim().length>0):[]}function sr(e){if(!e||typeof e!=`object`)return;let t=e,n=t.payload;if(n&&typeof n==`object`&&`config`in n)return n.config;if(`config`in t)return t.config}function cr(e){return e===!0||e===`true`||e===1}function lr(e){let t=e.browser;if(!t||typeof t!=`object`||Array.isArray(t))return{browserEnabled:!1,browserHeadless:!0,browserAllowPrivateUrls:!1,browserCommandTimeout:void 0,browserCloudProvider:`local`,browserCdpUrl:``,browserDialogPolicy:`auto_dismiss`,browserDialogTimeout:void 0};let n=t,r=cr(n.enabled),i=n.headless,a=!(i===!1||i===`false`||i===0),o=cr(n.allowPrivateUrls),s=typeof n.commandTimeout==`number`&&Number.isFinite(n.commandTimeout)&&n.commandTimeout>=5?Math.floor(n.commandTimeout):void 0,c=n.cloudProvider,l=c===`browserbase`||c===`browser-use`?c:`local`,u=typeof n.cdpUrl==`string`?n.cdpUrl:``,d=n.dialogPolicy;return{browserEnabled:r,browserHeadless:a,browserAllowPrivateUrls:o,browserCommandTimeout:s,browserCloudProvider:l,browserCdpUrl:u,browserDialogPolicy:d===`must_respond`||d===`auto_accept`?d:`auto_dismiss`,browserDialogTimeout:typeof n.dialogTimeoutSeconds==`number`&&Number.isFinite(n.dialogTimeoutSeconds)&&n.dialogTimeoutSeconds>=1?Math.floor(n.dialogTimeoutSeconds):void 0}}function ur(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...$n};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:$n.enabled,mode:t.mode===`safeguard`?`safeguard`:`default`,reserveTokens:typeof t.reserveTokens==`number`&&Number.isFinite(t.reserveTokens)?Math.floor(t.reserveTokens):$n.reserveTokens,triggerThreshold:typeof t.triggerThreshold==`number`&&Number.isFinite(t.triggerThreshold)?t.triggerThreshold:$n.triggerThreshold,minMessagesBeforeCompact:typeof t.minMessagesBeforeCompact==`number`&&Number.isFinite(t.minMessagesBeforeCompact)?Math.floor(t.minMessagesBeforeCompact):$n.minMessagesBeforeCompact,keepRecentMessages:typeof t.keepRecentMessages==`number`&&Number.isFinite(t.keepRecentMessages)?Math.floor(t.keepRecentMessages):$n.keepRecentMessages,evictionWindow:typeof t.evictionWindow==`number`&&Number.isFinite(t.evictionWindow)?t.evictionWindow:$n.evictionWindow,retentionWindow:typeof t.retentionWindow==`number`&&Number.isFinite(t.retentionWindow)?Math.floor(t.retentionWindow):$n.retentionWindow}}function dr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...er};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:er.enabled,maxToolResultChars:typeof t.maxToolResultChars==`number`&&Number.isFinite(t.maxToolResultChars)?Math.floor(t.maxToolResultChars):er.maxToolResultChars,headKeepRatio:typeof t.headKeepRatio==`number`&&Number.isFinite(t.headKeepRatio)?t.headKeepRatio:er.headKeepRatio,tailKeepRatio:typeof t.tailKeepRatio==`number`&&Number.isFinite(t.tailKeepRatio)?t.tailKeepRatio:er.tailKeepRatio}}function fr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...tr};let t=e,n=t.provider,r=n===`none`||n===`stub`?n:``,i=t.injectionFrequency,a=i===`every-turn`||i===`first-turn`?i:``;return{enabled:typeof t.enabled==`boolean`?t.enabled:tr.enabled,useEnhancedSystem:typeof t.useEnhancedSystem==`boolean`?t.useEnhancedSystem:tr.useEnhancedSystem,userProfileEnabled:typeof t.userProfileEnabled==`boolean`?t.userProfileEnabled:tr.userProfileEnabled,provider:r,injectionFrequency:a,memoryCharLimit:typeof t.memoryCharLimit==`number`&&t.memoryCharLimit>0?Math.floor(t.memoryCharLimit):void 0,userCharLimit:typeof t.userCharLimit==`number`&&t.userCharLimit>0?Math.floor(t.userCharLimit):void 0,contextCadence:typeof t.contextCadence==`number`&&t.contextCadence>=1?Math.floor(t.contextCadence):void 0,dialecticCadence:typeof t.dialecticCadence==`number`&&t.dialecticCadence>=1?Math.floor(t.dialecticCadence):void 0}}function pr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...nr};let t=e;return{summaryModel:typeof t.summaryModel==`string`?t.summaryModel:``}}function mr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...rr};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:rr.enabled,memoryNudgeInterval:typeof t.memoryNudgeInterval==`number`&&t.memoryNudgeInterval>=0?Math.floor(t.memoryNudgeInterval):rr.memoryNudgeInterval,skillNudgeInterval:typeof t.skillNudgeInterval==`number`&&t.skillNudgeInterval>=0?Math.floor(t.skillNudgeInterval):rr.skillNudgeInterval,maxToolRounds:typeof t.maxToolRounds==`number`&&t.maxToolRounds>=1&&t.maxToolRounds<=32?Math.floor(t.maxToolRounds):rr.maxToolRounds,maxHistoryMessages:typeof t.maxHistoryMessages==`number`&&t.maxHistoryMessages>=10&&t.maxHistoryMessages<=200?Math.floor(t.maxHistoryMessages):rr.maxHistoryMessages,maxDurationMs:typeof t.maxDurationMs==`number`&&t.maxDurationMs>=3e4&&t.maxDurationMs<=6e5?Math.floor(t.maxDurationMs):rr.maxDurationMs}}function hr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...ir};let t=e;return{model:typeof t.model==`string`?t.model:``,maxLength:typeof t.maxLength==`number`&&t.maxLength>0?t.maxLength:void 0}}function gr(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return{enabled:t};let n=e;return{enabled:typeof n.enabled==`boolean`?n.enabled:t}}function _r(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function vr(e){if(e==null)return``;if(typeof e==`string`){let t=e.trim();if(!t)return``;try{let e=JSON.parse(t);if(typeof e==`object`&&e&&!Array.isArray(e))return JSON.stringify(e,null,2)}catch{return t}return``}if(typeof e==`object`&&!Array.isArray(e))try{return JSON.stringify(e,null,2)}catch{return``}return``}function yr(e){let t=e.imageGenerationModelTimeoutMs;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return Math.floor(t);let n=e.imageGenerationModel;if(n&&typeof n==`object`&&!Array.isArray(n)){let e=n.timeoutMs;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return Math.floor(e)}return null}function br(e){if(e.imageGenerationModelAutoProviderFallback===!0)return!0;let t=e.imageGenerationModel;return t&&typeof t==`object`&&!Array.isArray(t)?t.autoProviderFallback===!0:!1}function xr(e){let t=e&&typeof e==`object`&&!Array.isArray(e)&&`agents`in e?e.agents:void 0,n=t&&typeof t==`object`&&!Array.isArray(t)&&`defaults`in t?t.defaults:void 0,r=n&&typeof n==`object`&&!Array.isArray(n)?n:{},i=r.modelFallbacks,a=Array.isArray(i)&&i.every(e=>typeof e==`string`)?i:or(r.model),o=r.imageModelFallbacks,s=Array.isArray(o)&&o.every(e=>typeof e==`string`)?o:or(r.imageModel),c=r.imageGenerationModelFallbacks,l=Array.isArray(c)&&c.every(e=>typeof e==`string`)?c:or(r.imageGenerationModel),u=lr(r),d=typeof r.maxTaskDurationMs==`number`&&Number.isFinite(r.maxTaskDurationMs)?r.maxTaskDurationMs:void 0,f=d===void 0?void 0:Math.round(d/6e4);return{model:ar(r.model),modelFallbacks:a,imageModel:ar(r.imageModel),imageModelFallbacks:s,imageGenerationModel:ar(r.imageGenerationModel),imageGenerationModelFallbacks:l,imageGenerationModelTimeoutMs:yr(r),imageGenerationModelAutoProviderFallback:br(r),mediaMaxMb:typeof r.mediaMaxMb==`number`&&!Number.isNaN(r.mediaMaxMb)?r.mediaMaxMb:void 0,maxTokens:typeof r.maxTokens==`number`?r.maxTokens:8192,temperature:typeof r.temperature==`number`?r.temperature:.7,maxToolIterations:typeof r.maxToolIterations==`number`?r.maxToolIterations:20,maxTaskDurationMinutes:f,maxRequestsPerTurn:typeof r.maxRequestsPerTurn==`number`?r.maxRequestsPerTurn:50,maxToolFailuresPerTurn:typeof r.maxToolFailuresPerTurn==`number`?r.maxToolFailuresPerTurn:3,workspace:typeof r.workspace==`string`?r.workspace:`~/.xopc/workspace`,...u,thinkingDefault:typeof r.thinkingDefault==`string`?r.thinkingDefault:`medium`,reasoningDefault:typeof r.reasoningDefault==`string`?r.reasoningDefault:`stream`,verboseDefault:typeof r.verboseDefault==`string`?r.verboseDefault:`full`,compaction:ur(r.compaction),pruning:dr(r.pruning),memory:fr(r.memory),sessionSearch:pr(r.sessionSearch),backgroundReview:mr(r.backgroundReview),webExtract:hr(r.webExtract),delegate:gr(r.delegate,!1),executeCode:gr(r.executeCode,!1),systemPromptOverride:typeof r.systemPromptOverride==`string`?r.systemPromptOverride:``,skillsAllowlist:_r(r.skills),toolsDisable:(()=>{let e=r.tools;if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e.disable;return _r(t)})(),paramsJson:vr(r.params)}}function Sr(e){let t={enabled:e.enabled,useEnhancedSystem:e.useEnhancedSystem,userProfileEnabled:e.userProfileEnabled};return e.provider===`none`||e.provider===`stub`?t.provider=e.provider:t.provider=null,e.injectionFrequency===`every-turn`||e.injectionFrequency===`first-turn`?t.injectionFrequency=e.injectionFrequency:t.injectionFrequency=null,t.memoryCharLimit=e.memoryCharLimit??null,t.userCharLimit=e.userCharLimit??null,t.contextCadence=e.contextCadence??null,t.dialecticCadence=e.dialecticCadence??null,t}function Cr(e){let t=e.trim();if(!t)return null;let n=JSON.parse(t);if(n===null)return null;if(typeof n!=`object`||Array.isArray(n))throw Error(`params must be a JSON object`);return n}async function wr(){return xr(sr(await H(z(`/api/config`)))??{})}async function Tr(e){let t=e.modelFallbacks.map(e=>e.trim()).filter(Boolean),n=t.length>0?{primary:e.model,fallbacks:t}:e.model,r=e.imageModelFallbacks.map(e=>e.trim()).filter(Boolean),i=r.length>0&&e.imageModel.trim()?{primary:e.imageModel.trim(),fallbacks:r}:e.imageModel||``,a=e.imageGenerationModelFallbacks.map(e=>e.trim()).filter(Boolean),o=e.imageGenerationModel.trim(),s=typeof e.imageGenerationModelTimeoutMs==`number`&&e.imageGenerationModelTimeoutMs>0?Math.floor(e.imageGenerationModelTimeoutMs):null,c=e.imageGenerationModelAutoProviderFallback===!0,l=(()=>{let e={};return o&&(e.primary=o),a.length>0&&(e.fallbacks=a),s&&(e.timeoutMs=s),c&&(e.autoProviderFallback=!0),Object.keys(e).length===0?``:Object.keys(e).length===1&&typeof e.primary==`string`?e.primary:e})(),u=e.maxTaskDurationMinutes===void 0||e.maxTaskDurationMinutes===null?null:(()=>{let t=Math.floor(e.maxTaskDurationMinutes)*6e4;return t<6e4||t>144e5?null:t})(),d=e.skillsAllowlist.map(e=>e.trim()).filter(Boolean),f=e.toolsDisable.map(e=>e.trim()).filter(Boolean),p=Cr(e.paramsJson),m=p===null||Object.keys(p).length===0?null:p,h={model:n,imageModel:i,imageGenerationModel:l,mediaMaxMb:e.mediaMaxMb??null,maxTokens:e.maxTokens,temperature:e.temperature,maxToolIterations:e.maxToolIterations,maxTaskDurationMs:u,maxRequestsPerTurn:e.maxRequestsPerTurn,maxToolFailuresPerTurn:e.maxToolFailuresPerTurn,workspace:e.workspace,browser:{enabled:e.browserEnabled,headless:e.browserHeadless,allowPrivateUrls:e.browserAllowPrivateUrls,commandTimeout:e.browserCommandTimeout??null,cloudProvider:e.browserCloudProvider===`local`?null:e.browserCloudProvider,cdpUrl:e.browserCdpUrl.trim()||null,dialogPolicy:e.browserDialogPolicy===`auto_dismiss`?null:e.browserDialogPolicy,dialogTimeoutSeconds:e.browserDialogTimeout??null},thinkingDefault:e.thinkingDefault,reasoningDefault:e.reasoningDefault,verboseDefault:e.verboseDefault,compaction:{...e.compaction},pruning:{...e.pruning},memory:Sr(e.memory),sessionSearch:{summaryModel:e.sessionSearch.summaryModel.trim()||null},backgroundReview:{enabled:e.backgroundReview.enabled,memoryNudgeInterval:e.backgroundReview.memoryNudgeInterval,skillNudgeInterval:e.backgroundReview.skillNudgeInterval,maxToolRounds:e.backgroundReview.maxToolRounds,maxHistoryMessages:e.backgroundReview.maxHistoryMessages,maxDurationMs:e.backgroundReview.maxDurationMs},webExtract:{model:e.webExtract.model.trim()||null,maxLength:e.webExtract.maxLength??null},delegate:{enabled:e.delegate.enabled},executeCode:{enabled:e.executeCode.enabled},systemPromptOverride:e.systemPromptOverride.trim()||null,skills:d.length>0?d:null,tools:{disable:f.length>0?f:null},params:m};await H(z(`/api/config`),{method:`PATCH`,body:JSON.stringify({agents:{defaults:h}})}),tt()}function Er(e){let t=!!Xe(e=>e.token),[n,r]=(0,Z.useState)(null),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(null),[u,d]=(0,Z.useState)(!1),f=(0,Z.useRef)(!1),{data:p,error:m,isLoading:h,mutate:g}=ue(t),_=(0,Z.useMemo)(()=>p?.payload?.config===void 0?null:xr(p.payload.config),[p]);(0,Z.useEffect)(()=>{if(!t){r(null),a(null),f.current=!1;return}if(_!==null&&!f.current){let e=structuredClone(_);r(e),a(structuredClone(e))}},[t,_]);let v=!!(t&&h&&p===void 0&&!m),y=m instanceof Error?m.message:m?String(m):null,b=(0,Z.useMemo)(()=>!n||!i?!1:JSON.stringify(n)!==JSON.stringify(i),[n,i]);return{hasToken:t,loading:v,fetchError:y,form:n,update:(0,Z.useCallback)(e=>{f.current=!0,r(t=>t?{...t,...e}:null)},[]),dirty:b,saving:o,saveOk:u,error:c,setError:l,save:(0,Z.useCallback)(async()=>{if(!n||o)return!1;s(!0),l(null),d(!1);try{try{Cr(n.paramsJson)}catch(t){return l(t instanceof SyntaxError?e.advanced.paramsInvalidJson:t instanceof Error?t.message:e.advanced.paramsInvalidJson),!1}return await Tr(n),f.current=!1,a(structuredClone(n)),d(!0),window.setTimeout(()=>d(!1),2500),!0}catch(t){return l(t instanceof Error?t.message:e.saveError),!1}finally{s(!1)}},[n,o,e.saveError,e.advanced]),discard:(0,Z.useCallback)(()=>{i&&(f.current=!1,r(structuredClone(i)),l(null),d(!1))},[i]),mutate:g}}function Dr(){let e=je(u(e=>e.language)),t=e.agentSettings,n=e.chat,r=Er(t);return{vm:r,pp:(0,Z.useMemo)(()=>r.form?{form:r.form,update:r.update,a:t,chat:n}:null,[r.form,r.update,t,n]),a:t}}function Or(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-chat`,intro:n.routeIntro.chat,vm:e,children:t?(0,q.jsx)(zn,{...t}):null})}function kr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-workspace`,intro:n.routeIntro.workspace,vm:e,children:t?(0,q.jsx)(Zn,{...t}):null})}function Ar(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-browser`,intro:n.routeIntro.browser,vm:e,children:t?(0,q.jsx)(Bn,{...t}):null})}function jr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-runtime`,intro:n.routeIntro.runtime,vm:e,children:t?(0,q.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,q.jsx)(Wn,{...t}),(0,q.jsx)(Kn,{...t})]}):null})}function Mr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-tools`,intro:n.routeIntro.tools,vm:e,children:t?(0,q.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,q.jsx)(Un,{...t}),(0,q.jsx)(Yn,{...t}),(0,q.jsx)(Gn,{...t})]}):null})}function Nr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-system-prompt`,intro:n.routeIntro.systemPrompt,vm:e,children:t?(0,q.jsx)(Xn,{...t}):null})}export{Ln as AgentsSettingsPanel,En as _,Mr as a,_t as b,wr as c,$ as d,Cn as f,Tn as g,wn as h,Nr as i,Cr as l,Dn as m,Or as n,kr as o,On as p,jr as r,Er as s,Ar as t,Tr as u,J as v,Y as y};
|
|
216
|
-
//# sourceMappingURL=agents-
|
|
216
|
+
//# sourceMappingURL=agents-BdISC5UA.js.map
|