@aquaclawai/aquarium 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-types/claude-code/index.d.ts +2 -0
- package/dist/agent-types/claude-code/index.d.ts.map +1 -0
- package/dist/agent-types/claude-code/index.js +2 -0
- package/dist/agent-types/claude-code/index.js.map +1 -0
- package/dist/agent-types/claude-code/manifest.d.ts +3 -0
- package/dist/agent-types/claude-code/manifest.d.ts.map +1 -0
- package/dist/agent-types/claude-code/manifest.js +45 -0
- package/dist/agent-types/claude-code/manifest.js.map +1 -0
- package/dist/agent-types/openclaw/adapter.d.ts +3 -0
- package/dist/agent-types/openclaw/adapter.d.ts.map +1 -0
- package/dist/agent-types/openclaw/adapter.js +714 -0
- package/dist/agent-types/openclaw/adapter.js.map +1 -0
- package/dist/agent-types/openclaw/gateway-rpc.d.ts +21 -0
- package/dist/agent-types/openclaw/gateway-rpc.d.ts.map +1 -0
- package/dist/agent-types/openclaw/gateway-rpc.js +202 -0
- package/dist/agent-types/openclaw/gateway-rpc.js.map +1 -0
- package/dist/agent-types/openclaw/index.d.ts +3 -0
- package/dist/agent-types/openclaw/index.d.ts.map +1 -0
- package/dist/agent-types/openclaw/index.js +3 -0
- package/dist/agent-types/openclaw/index.js.map +1 -0
- package/dist/agent-types/openclaw/manifest.d.ts +137 -0
- package/dist/agent-types/openclaw/manifest.d.ts.map +1 -0
- package/dist/agent-types/openclaw/manifest.js +191 -0
- package/dist/agent-types/openclaw/manifest.js.map +1 -0
- package/dist/agent-types/openclaw/provider-registry.d.ts +46 -0
- package/dist/agent-types/openclaw/provider-registry.d.ts.map +1 -0
- package/dist/agent-types/openclaw/provider-registry.js +108 -0
- package/dist/agent-types/openclaw/provider-registry.js.map +1 -0
- package/dist/agent-types/openclaw/reverse-adapter.d.ts +7 -0
- package/dist/agent-types/openclaw/reverse-adapter.d.ts.map +1 -0
- package/dist/agent-types/openclaw/reverse-adapter.js +528 -0
- package/dist/agent-types/openclaw/reverse-adapter.js.map +1 -0
- package/dist/agent-types/openclaw/security-profiles.d.ts +21 -0
- package/dist/agent-types/openclaw/security-profiles.d.ts.map +1 -0
- package/dist/agent-types/openclaw/security-profiles.js +251 -0
- package/dist/agent-types/openclaw/security-profiles.js.map +1 -0
- package/dist/agent-types/openclaw/workspace-templates.d.ts +2 -0
- package/dist/agent-types/openclaw/workspace-templates.d.ts.map +1 -0
- package/dist/agent-types/openclaw/workspace-templates.js +363 -0
- package/dist/agent-types/openclaw/workspace-templates.js.map +1 -0
- package/dist/agent-types/opencode/index.d.ts +2 -0
- package/dist/agent-types/opencode/index.d.ts.map +1 -0
- package/dist/agent-types/opencode/index.js +2 -0
- package/dist/agent-types/opencode/index.js.map +1 -0
- package/dist/agent-types/opencode/manifest.d.ts +3 -0
- package/dist/agent-types/opencode/manifest.d.ts.map +1 -0
- package/dist/agent-types/opencode/manifest.js +63 -0
- package/dist/agent-types/opencode/manifest.js.map +1 -0
- package/dist/agent-types/registry.d.ts +4 -0
- package/dist/agent-types/registry.d.ts.map +1 -0
- package/dist/agent-types/registry.js +24 -0
- package/dist/agent-types/registry.js.map +1 -0
- package/dist/agent-types/types.d.ts +169 -0
- package/dist/agent-types/types.d.ts.map +1 -0
- package/dist/agent-types/types.js +2 -0
- package/dist/agent-types/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +72 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +68 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +98 -0
- package/dist/config.js.map +1 -0
- package/dist/db/adapter.d.ts +21 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +11 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/knexfile.d.ts +5 -0
- package/dist/db/knexfile.d.ts.map +1 -0
- package/dist/db/knexfile.js +34 -0
- package/dist/db/knexfile.js.map +1 -0
- package/dist/db/migration-helpers.d.ts +45 -0
- package/dist/db/migration-helpers.d.ts.map +1 -0
- package/dist/db/migration-helpers.js +90 -0
- package/dist/db/migration-helpers.js.map +1 -0
- package/dist/db/migrations/001_initial.d.ts +4 -0
- package/dist/db/migrations/001_initial.d.ts.map +1 -0
- package/dist/db/migrations/001_initial.js +56 -0
- package/dist/db/migrations/001_initial.js.map +1 -0
- package/dist/db/migrations/002_instance_config.d.ts +4 -0
- package/dist/db/migrations/002_instance_config.d.ts.map +1 -0
- package/dist/db/migrations/002_instance_config.js +12 -0
- package/dist/db/migrations/002_instance_config.js.map +1 -0
- package/dist/db/migrations/003_instance_status_message.d.ts +4 -0
- package/dist/db/migrations/003_instance_status_message.d.ts.map +1 -0
- package/dist/db/migrations/003_instance_status_message.js +11 -0
- package/dist/db/migrations/003_instance_status_message.js.map +1 -0
- package/dist/db/migrations/004_templates.d.ts +4 -0
- package/dist/db/migrations/004_templates.d.ts.map +1 -0
- package/dist/db/migrations/004_templates.js +95 -0
- package/dist/db/migrations/004_templates.js.map +1 -0
- package/dist/db/migrations/005_group_chats.d.ts +4 -0
- package/dist/db/migrations/005_group_chats.d.ts.map +1 -0
- package/dist/db/migrations/005_group_chats.js +66 -0
- package/dist/db/migrations/005_group_chats.js.map +1 -0
- package/dist/db/migrations/006_template_setup.d.ts +4 -0
- package/dist/db/migrations/006_template_setup.d.ts.map +1 -0
- package/dist/db/migrations/006_template_setup.js +14 -0
- package/dist/db/migrations/006_template_setup.js.map +1 -0
- package/dist/db/migrations/007_group_chat_v2.d.ts +4 -0
- package/dist/db/migrations/007_group_chat_v2.d.ts.map +1 -0
- package/dist/db/migrations/007_group_chat_v2.js +59 -0
- package/dist/db/migrations/007_group_chat_v2.js.map +1 -0
- package/dist/db/migrations/008_default_provider_openrouter.d.ts +4 -0
- package/dist/db/migrations/008_default_provider_openrouter.d.ts.map +1 -0
- package/dist/db/migrations/008_default_provider_openrouter.js +33 -0
- package/dist/db/migrations/008_default_provider_openrouter.js.map +1 -0
- package/dist/db/migrations/009_opencode_default_provider_openrouter.d.ts +4 -0
- package/dist/db/migrations/009_opencode_default_provider_openrouter.d.ts.map +1 -0
- package/dist/db/migrations/009_opencode_default_provider_openrouter.js +33 -0
- package/dist/db/migrations/009_opencode_default_provider_openrouter.js.map +1 -0
- package/dist/db/migrations/010_fix_null_default_provider.d.ts +4 -0
- package/dist/db/migrations/010_fix_null_default_provider.d.ts.map +1 -0
- package/dist/db/migrations/010_fix_null_default_provider.js +24 -0
- package/dist/db/migrations/010_fix_null_default_provider.js.map +1 -0
- package/dist/db/migrations/011_snapshots.d.ts +4 -0
- package/dist/db/migrations/011_snapshots.d.ts.map +1 -0
- package/dist/db/migrations/011_snapshots.js +27 -0
- package/dist/db/migrations/011_snapshots.js.map +1 -0
- package/dist/db/migrations/013_official_templates.d.ts +4 -0
- package/dist/db/migrations/013_official_templates.d.ts.map +1 -0
- package/dist/db/migrations/013_official_templates.js +173 -0
- package/dist/db/migrations/013_official_templates.js.map +1 -0
- package/dist/db/migrations/014_notifications.d.ts +4 -0
- package/dist/db/migrations/014_notifications.d.ts.map +1 -0
- package/dist/db/migrations/014_notifications.js +45 -0
- package/dist/db/migrations/014_notifications.js.map +1 -0
- package/dist/db/migrations/015_security_profile.d.ts +4 -0
- package/dist/db/migrations/015_security_profile.d.ts.map +1 -0
- package/dist/db/migrations/015_security_profile.js +14 -0
- package/dist/db/migrations/015_security_profile.js.map +1 -0
- package/dist/db/migrations/016_template_security.d.ts +4 -0
- package/dist/db/migrations/016_template_security.d.ts.map +1 -0
- package/dist/db/migrations/016_template_security.js +12 -0
- package/dist/db/migrations/016_template_security.js.map +1 -0
- package/dist/db/migrations/017_auth_events.d.ts +4 -0
- package/dist/db/migrations/017_auth_events.d.ts.map +1 -0
- package/dist/db/migrations/017_auth_events.js +19 -0
- package/dist/db/migrations/017_auth_events.js.map +1 -0
- package/dist/db/migrations/018_skill_market.d.ts +4 -0
- package/dist/db/migrations/018_skill_market.d.ts.map +1 -0
- package/dist/db/migrations/018_skill_market.js +21 -0
- package/dist/db/migrations/018_skill_market.js.map +1 -0
- package/dist/db/migrations/019_credential_audit_log.d.ts +4 -0
- package/dist/db/migrations/019_credential_audit_log.d.ts.map +1 -0
- package/dist/db/migrations/019_credential_audit_log.js +19 -0
- package/dist/db/migrations/019_credential_audit_log.js.map +1 -0
- package/dist/db/migrations/020_template_security_score.d.ts +4 -0
- package/dist/db/migrations/020_template_security_score.d.ts.map +1 -0
- package/dist/db/migrations/020_template_security_score.js +31 -0
- package/dist/db/migrations/020_template_security_score.js.map +1 -0
- package/dist/db/migrations/021_credential_enhancements.d.ts +4 -0
- package/dist/db/migrations/021_credential_enhancements.d.ts.map +1 -0
- package/dist/db/migrations/021_credential_enhancements.js +15 -0
- package/dist/db/migrations/021_credential_enhancements.js.map +1 -0
- package/dist/db/migrations/021_user_roles.d.ts +4 -0
- package/dist/db/migrations/021_user_roles.d.ts.map +1 -0
- package/dist/db/migrations/021_user_roles.js +11 -0
- package/dist/db/migrations/021_user_roles.js.map +1 -0
- package/dist/db/migrations/022_config_hash.d.ts +4 -0
- package/dist/db/migrations/022_config_hash.d.ts.map +1 -0
- package/dist/db/migrations/022_config_hash.js +11 -0
- package/dist/db/migrations/022_config_hash.js.map +1 -0
- package/dist/db/migrations/023_account_security.d.ts +4 -0
- package/dist/db/migrations/023_account_security.d.ts.map +1 -0
- package/dist/db/migrations/023_account_security.js +22 -0
- package/dist/db/migrations/023_account_security.js.map +1 -0
- package/dist/db/migrations/024_wizard_configs.d.ts +4 -0
- package/dist/db/migrations/024_wizard_configs.d.ts.map +1 -0
- package/dist/db/migrations/024_wizard_configs.js +165 -0
- package/dist/db/migrations/024_wizard_configs.js.map +1 -0
- package/dist/db/migrations/025_auth_dual_mode.d.ts +4 -0
- package/dist/db/migrations/025_auth_dual_mode.d.ts.map +1 -0
- package/dist/db/migrations/025_auth_dual_mode.js +19 -0
- package/dist/db/migrations/025_auth_dual_mode.js.map +1 -0
- package/dist/db/migrations/027_add_avatar_to_instances.d.ts +4 -0
- package/dist/db/migrations/027_add_avatar_to_instances.d.ts.map +1 -0
- package/dist/db/migrations/027_add_avatar_to_instances.js +11 -0
- package/dist/db/migrations/027_add_avatar_to_instances.js.map +1 -0
- package/dist/db/migrations/027_add_clerk_id.d.ts +4 -0
- package/dist/db/migrations/027_add_clerk_id.d.ts.map +1 -0
- package/dist/db/migrations/027_add_clerk_id.js +11 -0
- package/dist/db/migrations/027_add_clerk_id.js.map +1 -0
- package/dist/db/migrations/028_template_plugin_dependencies.d.ts +4 -0
- package/dist/db/migrations/028_template_plugin_dependencies.d.ts.map +1 -0
- package/dist/db/migrations/028_template_plugin_dependencies.js +18 -0
- package/dist/db/migrations/028_template_plugin_dependencies.js.map +1 -0
- package/dist/db/migrations/029_remap_orphan_config_keys.d.ts +21 -0
- package/dist/db/migrations/029_remap_orphan_config_keys.d.ts.map +1 -0
- package/dist/db/migrations/029_remap_orphan_config_keys.js +63 -0
- package/dist/db/migrations/029_remap_orphan_config_keys.js.map +1 -0
- package/dist/db/migrations/030_extend_notification_types.d.ts +4 -0
- package/dist/db/migrations/030_extend_notification_types.d.ts.map +1 -0
- package/dist/db/migrations/030_extend_notification_types.js +10 -0
- package/dist/db/migrations/030_extend_notification_types.js.map +1 -0
- package/dist/db/migrations/031_default_security_profile_developer.d.ts +9 -0
- package/dist/db/migrations/031_default_security_profile_developer.d.ts.map +1 -0
- package/dist/db/migrations/031_default_security_profile_developer.js +22 -0
- package/dist/db/migrations/031_default_security_profile_developer.js.map +1 -0
- package/dist/db/migrations/032_geo_template.d.ts +4 -0
- package/dist/db/migrations/032_geo_template.d.ts.map +1 -0
- package/dist/db/migrations/032_geo_template.js +133 -0
- package/dist/db/migrations/032_geo_template.js.map +1 -0
- package/dist/db/migrations/033_jinko_travel_template.d.ts +4 -0
- package/dist/db/migrations/033_jinko_travel_template.d.ts.map +1 -0
- package/dist/db/migrations/033_jinko_travel_template.js +126 -0
- package/dist/db/migrations/033_jinko_travel_template.js.map +1 -0
- package/dist/db/postgres-adapter.d.ts +13 -0
- package/dist/db/postgres-adapter.d.ts.map +1 -0
- package/dist/db/postgres-adapter.js +27 -0
- package/dist/db/postgres-adapter.js.map +1 -0
- package/dist/db/run-migrations.d.ts +2 -0
- package/dist/db/run-migrations.d.ts.map +1 -0
- package/dist/db/run-migrations.js +26 -0
- package/dist/db/run-migrations.js.map +1 -0
- package/dist/db/sqlite-adapter.d.ts +13 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.js +29 -0
- package/dist/db/sqlite-adapter.js.map +1 -0
- package/dist/ee/litellm/litellm-key-manager.d.ts +16 -0
- package/dist/ee/litellm/litellm-key-manager.d.ts.map +1 -0
- package/dist/ee/litellm/litellm-key-manager.js +16 -0
- package/dist/ee/litellm/litellm-key-manager.js.map +1 -0
- package/dist/ee/litellm/litellm-model-seeder.d.ts +6 -0
- package/dist/ee/litellm/litellm-model-seeder.d.ts.map +1 -0
- package/dist/ee/litellm/litellm-model-seeder.js +6 -0
- package/dist/ee/litellm/litellm-model-seeder.js.map +1 -0
- package/dist/index.ce.d.ts +2 -0
- package/dist/index.ce.d.ts.map +1 -0
- package/dist/index.ce.js +12 -0
- package/dist/index.ce.js.map +1 -0
- package/dist/middleware/auth.d.ts +30 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +86 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/dynamic-middleware.d.ts +7 -0
- package/dist/middleware/dynamic-middleware.d.ts.map +1 -0
- package/dist/middleware/dynamic-middleware.js +46 -0
- package/dist/middleware/dynamic-middleware.js.map +1 -0
- package/dist/middleware/log-redaction.d.ts +2 -0
- package/dist/middleware/log-redaction.d.ts.map +1 -0
- package/dist/middleware/log-redaction.js +56 -0
- package/dist/middleware/log-redaction.js.map +1 -0
- package/dist/routes/admin.d.ts +3 -0
- package/dist/routes/admin.d.ts.map +1 -0
- package/dist/routes/admin.js +491 -0
- package/dist/routes/admin.js.map +1 -0
- package/dist/routes/agent-types.d.ts +3 -0
- package/dist/routes/agent-types.d.ts.map +1 -0
- package/dist/routes/agent-types.js +85 -0
- package/dist/routes/agent-types.js.map +1 -0
- package/dist/routes/auth.d.ts +3 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +242 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/channels.d.ts +3 -0
- package/dist/routes/channels.d.ts.map +1 -0
- package/dist/routes/channels.js +527 -0
- package/dist/routes/channels.js.map +1 -0
- package/dist/routes/credentials.d.ts +3 -0
- package/dist/routes/credentials.d.ts.map +1 -0
- package/dist/routes/credentials.js +81 -0
- package/dist/routes/credentials.js.map +1 -0
- package/dist/routes/dashboard.d.ts +3 -0
- package/dist/routes/dashboard.d.ts.map +1 -0
- package/dist/routes/dashboard.js +75 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/exec-approval.d.ts +3 -0
- package/dist/routes/exec-approval.d.ts.map +1 -0
- package/dist/routes/exec-approval.js +60 -0
- package/dist/routes/exec-approval.js.map +1 -0
- package/dist/routes/group-chats.d.ts +3 -0
- package/dist/routes/group-chats.d.ts.map +1 -0
- package/dist/routes/group-chats.js +190 -0
- package/dist/routes/group-chats.js.map +1 -0
- package/dist/routes/instance-files.d.ts +3 -0
- package/dist/routes/instance-files.d.ts.map +1 -0
- package/dist/routes/instance-files.js +255 -0
- package/dist/routes/instance-files.js.map +1 -0
- package/dist/routes/instance-proxy.d.ts +40 -0
- package/dist/routes/instance-proxy.d.ts.map +1 -0
- package/dist/routes/instance-proxy.js +318 -0
- package/dist/routes/instance-proxy.js.map +1 -0
- package/dist/routes/instances.d.ts +3 -0
- package/dist/routes/instances.d.ts.map +1 -0
- package/dist/routes/instances.js +325 -0
- package/dist/routes/instances.js.map +1 -0
- package/dist/routes/metadata.d.ts +3 -0
- package/dist/routes/metadata.d.ts.map +1 -0
- package/dist/routes/metadata.js +13 -0
- package/dist/routes/metadata.js.map +1 -0
- package/dist/routes/notifications.d.ts +3 -0
- package/dist/routes/notifications.d.ts.map +1 -0
- package/dist/routes/notifications.js +104 -0
- package/dist/routes/notifications.js.map +1 -0
- package/dist/routes/oauth.d.ts +3 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +516 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/routes/rpc-proxy.d.ts +3 -0
- package/dist/routes/rpc-proxy.d.ts.map +1 -0
- package/dist/routes/rpc-proxy.js +116 -0
- package/dist/routes/rpc-proxy.js.map +1 -0
- package/dist/routes/security.d.ts +3 -0
- package/dist/routes/security.d.ts.map +1 -0
- package/dist/routes/security.js +43 -0
- package/dist/routes/security.js.map +1 -0
- package/dist/routes/skills.d.ts +3 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +48 -0
- package/dist/routes/skills.js.map +1 -0
- package/dist/routes/snapshots.d.ts +3 -0
- package/dist/routes/snapshots.d.ts.map +1 -0
- package/dist/routes/snapshots.js +99 -0
- package/dist/routes/snapshots.js.map +1 -0
- package/dist/routes/system-config.d.ts +3 -0
- package/dist/routes/system-config.d.ts.map +1 -0
- package/dist/routes/system-config.js +75 -0
- package/dist/routes/system-config.js.map +1 -0
- package/dist/routes/templates.d.ts +3 -0
- package/dist/routes/templates.d.ts.map +1 -0
- package/dist/routes/templates.js +256 -0
- package/dist/routes/templates.js.map +1 -0
- package/dist/routes/ui-proxy.d.ts +3 -0
- package/dist/routes/ui-proxy.d.ts.map +1 -0
- package/dist/routes/ui-proxy.js +90 -0
- package/dist/routes/ui-proxy.js.map +1 -0
- package/dist/routes/user-credentials.d.ts +3 -0
- package/dist/routes/user-credentials.d.ts.map +1 -0
- package/dist/routes/user-credentials.js +85 -0
- package/dist/routes/user-credentials.js.map +1 -0
- package/dist/routes/users.d.ts +3 -0
- package/dist/routes/users.d.ts.map +1 -0
- package/dist/routes/users.js +30 -0
- package/dist/routes/users.js.map +1 -0
- package/dist/runtime/docker.d.ts +37 -0
- package/dist/runtime/docker.d.ts.map +1 -0
- package/dist/runtime/docker.js +612 -0
- package/dist/runtime/docker.js.map +1 -0
- package/dist/runtime/factory.d.ts +4 -0
- package/dist/runtime/factory.d.ts.map +1 -0
- package/dist/runtime/factory.js +21 -0
- package/dist/runtime/factory.js.map +1 -0
- package/dist/runtime/kubernetes.d.ts +34 -0
- package/dist/runtime/kubernetes.d.ts.map +1 -0
- package/dist/runtime/kubernetes.js +513 -0
- package/dist/runtime/kubernetes.js.map +1 -0
- package/dist/runtime/types.d.ts +81 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/server-core.d.ts +26 -0
- package/dist/server-core.d.ts.map +1 -0
- package/dist/server-core.js +184 -0
- package/dist/server-core.js.map +1 -0
- package/dist/services/config-diff.d.ts +6 -0
- package/dist/services/config-diff.d.ts.map +1 -0
- package/dist/services/config-diff.js +85 -0
- package/dist/services/config-diff.js.map +1 -0
- package/dist/services/config-field-meta.d.ts +22 -0
- package/dist/services/config-field-meta.d.ts.map +1 -0
- package/dist/services/config-field-meta.js +177 -0
- package/dist/services/config-field-meta.js.map +1 -0
- package/dist/services/config-validator.d.ts +8 -0
- package/dist/services/config-validator.d.ts.map +1 -0
- package/dist/services/config-validator.js +59 -0
- package/dist/services/config-validator.js.map +1 -0
- package/dist/services/credential-audit.d.ts +13 -0
- package/dist/services/credential-audit.d.ts.map +1 -0
- package/dist/services/credential-audit.js +18 -0
- package/dist/services/credential-audit.js.map +1 -0
- package/dist/services/credential-store.d.ts +28 -0
- package/dist/services/credential-store.d.ts.map +1 -0
- package/dist/services/credential-store.js +99 -0
- package/dist/services/credential-store.js.map +1 -0
- package/dist/services/dlp-scanner.d.ts +9 -0
- package/dist/services/dlp-scanner.d.ts.map +1 -0
- package/dist/services/dlp-scanner.js +90 -0
- package/dist/services/dlp-scanner.js.map +1 -0
- package/dist/services/gateway-event-relay.d.ts +53 -0
- package/dist/services/gateway-event-relay.d.ts.map +1 -0
- package/dist/services/gateway-event-relay.js +519 -0
- package/dist/services/gateway-event-relay.js.map +1 -0
- package/dist/services/group-chat-manager.d.ts +17 -0
- package/dist/services/group-chat-manager.d.ts.map +1 -0
- package/dist/services/group-chat-manager.js +613 -0
- package/dist/services/group-chat-manager.js.map +1 -0
- package/dist/services/health-monitor.d.ts +3 -0
- package/dist/services/health-monitor.d.ts.map +1 -0
- package/dist/services/health-monitor.js +342 -0
- package/dist/services/health-monitor.js.map +1 -0
- package/dist/services/instance-manager.d.ts +20 -0
- package/dist/services/instance-manager.d.ts.map +1 -0
- package/dist/services/instance-manager.js +833 -0
- package/dist/services/instance-manager.js.map +1 -0
- package/dist/services/metadata-store.d.ts +3 -0
- package/dist/services/metadata-store.d.ts.map +1 -0
- package/dist/services/metadata-store.js +34 -0
- package/dist/services/metadata-store.js.map +1 -0
- package/dist/services/notification-store.d.ts +24 -0
- package/dist/services/notification-store.d.ts.map +1 -0
- package/dist/services/notification-store.js +216 -0
- package/dist/services/notification-store.js.map +1 -0
- package/dist/services/openrouter-models.d.ts +13 -0
- package/dist/services/openrouter-models.d.ts.map +1 -0
- package/dist/services/openrouter-models.js +46 -0
- package/dist/services/openrouter-models.js.map +1 -0
- package/dist/services/output-filter.d.ts +8 -0
- package/dist/services/output-filter.d.ts.map +1 -0
- package/dist/services/output-filter.js +230 -0
- package/dist/services/output-filter.js.map +1 -0
- package/dist/services/prompt-guard.d.ts +6 -0
- package/dist/services/prompt-guard.d.ts.map +1 -0
- package/dist/services/prompt-guard.js +165 -0
- package/dist/services/prompt-guard.js.map +1 -0
- package/dist/services/security-event-service.d.ts +11 -0
- package/dist/services/security-event-service.d.ts.map +1 -0
- package/dist/services/security-event-service.js +201 -0
- package/dist/services/security-event-service.js.map +1 -0
- package/dist/services/snapshot-store.d.ts +21 -0
- package/dist/services/snapshot-store.d.ts.map +1 -0
- package/dist/services/snapshot-store.js +330 -0
- package/dist/services/snapshot-store.js.map +1 -0
- package/dist/services/system-config.d.ts +15 -0
- package/dist/services/system-config.d.ts.map +1 -0
- package/dist/services/system-config.js +80 -0
- package/dist/services/system-config.js.map +1 -0
- package/dist/services/template-file-format.d.ts +32 -0
- package/dist/services/template-file-format.d.ts.map +1 -0
- package/dist/services/template-file-format.js +125 -0
- package/dist/services/template-file-format.js.map +1 -0
- package/dist/services/template-store.d.ts +21 -0
- package/dist/services/template-store.d.ts.map +1 -0
- package/dist/services/template-store.js +701 -0
- package/dist/services/template-store.js.map +1 -0
- package/dist/services/user-credential-store.d.ts +20 -0
- package/dist/services/user-credential-store.d.ts.map +1 -0
- package/dist/services/user-credential-store.js +243 -0
- package/dist/services/user-credential-store.js.map +1 -0
- package/dist/services/wizard-config-store.d.ts +38 -0
- package/dist/services/wizard-config-store.d.ts.map +1 -0
- package/dist/services/wizard-config-store.js +70 -0
- package/dist/services/wizard-config-store.js.map +1 -0
- package/dist/web-dist/assets/AdminPage-BrAU67Dg.js +1 -0
- package/dist/web-dist/assets/AgentAvatar-BKJckc1W.js +1 -0
- package/dist/web-dist/assets/AgentAvatar-Cq-M5jMd.css +1 -0
- package/dist/web-dist/assets/AppLayout-Bf0v_2wK.css +1 -0
- package/dist/web-dist/assets/AppLayout-DXgV0atq.js +1 -0
- package/dist/web-dist/assets/AssistantChatPage-uVLgKLay.js +6 -0
- package/dist/web-dist/assets/AssistantEditPage-Bab1X-DA.js +1 -0
- package/dist/web-dist/assets/AssistantVersionsPage-BQRw3BUF.js +1 -0
- package/dist/web-dist/assets/AvatarPicker-DmnkD8Rb.js +1 -0
- package/dist/web-dist/assets/AvatarPicker-LHUepNFa.css +1 -0
- package/dist/web-dist/assets/CeAuthProvider-38_x9VGA.js +1 -0
- package/dist/web-dist/assets/ChatHubPage-2l4cKq0x.css +1 -0
- package/dist/web-dist/assets/ChatHubPage-B2WduoUM.js +1 -0
- package/dist/web-dist/assets/ChatTab-CHpjEu8M.js +6 -0
- package/dist/web-dist/assets/CreateWizardPage-DFEQ3VX3.js +47 -0
- package/dist/web-dist/assets/CreateWizardPage-IqNXDOER.css +1 -0
- package/dist/web-dist/assets/CredentialsPage-CDeXpnLG.js +1 -0
- package/dist/web-dist/assets/CredentialsPage-aI4kLoJD.css +1 -0
- package/dist/web-dist/assets/DocsAboutPage-CMbxiw1u.js +26 -0
- package/dist/web-dist/assets/DocsChannelsPage-CtmKYKK_.js +1 -0
- package/dist/web-dist/assets/DocsGettingStartedPage-CpM7o8sw.js +1 -0
- package/dist/web-dist/assets/DocsGroupChatsPage-7w-RVSJR.js +1 -0
- package/dist/web-dist/assets/DocsHomePage-BGEU5xBg.js +1 -0
- package/dist/web-dist/assets/DocsInstancesPage-Sewnw_x7.js +1 -0
- package/dist/web-dist/assets/DocsLayout-S7-ONZwP.js +1 -0
- package/dist/web-dist/assets/DocsProvidersPage-MeWneL5K.js +1 -0
- package/dist/web-dist/assets/DocsSkillsPage-CzsHPXxE.js +1 -0
- package/dist/web-dist/assets/DocsTemplatesPage-BXASAEoO.js +1 -0
- package/dist/web-dist/assets/DocsWorkspacePage-qYNeK_YS.js +24 -0
- package/dist/web-dist/assets/ExportWizardPage-BhNvovbU.js +3 -0
- package/dist/web-dist/assets/ExportWizardPage-Cp-KSYUy.css +1 -0
- package/dist/web-dist/assets/GoogleOAuthCallback-CBvLawe2.js +1 -0
- package/dist/web-dist/assets/GroupChatPage-rMfhmtsX.js +1 -0
- package/dist/web-dist/assets/GroupChatsListPage-BOwxHFfA.js +1 -0
- package/dist/web-dist/assets/InstancePage-BBL68DKB.js +1 -0
- package/dist/web-dist/assets/InstancePage-CzysRY40.css +1 -0
- package/dist/web-dist/assets/MyAssistantsPage-B808ZfHg.css +1 -0
- package/dist/web-dist/assets/MyAssistantsPage-q3-hNMth.js +1 -0
- package/dist/web-dist/assets/ProfilePage-Dx8YdU59.js +1 -0
- package/dist/web-dist/assets/ProfilePage-JMOkUDx7.css +1 -0
- package/dist/web-dist/assets/SessionDrawer-Ba7pbZDJ.css +1 -0
- package/dist/web-dist/assets/SessionDrawer-CXzEQAfF.js +1 -0
- package/dist/web-dist/assets/SystemConfigPage-4dvxADwi.js +1 -0
- package/dist/web-dist/assets/SystemConfigPage-DRqVfLGt.css +1 -0
- package/dist/web-dist/assets/TemplatesPage-DqXuG-Gy.css +1 -0
- package/dist/web-dist/assets/TemplatesPage-HMS__ODO.js +1 -0
- package/dist/web-dist/assets/TestLoginPage-xVQL0lYP.js +1 -0
- package/dist/web-dist/assets/ThemeToggle-DymKEYXG.js +1 -0
- package/dist/web-dist/assets/WorkbenchPage-Bymo4SSt.css +1 -0
- package/dist/web-dist/assets/WorkbenchPage-ST3hVrbL.js +33 -0
- package/dist/web-dist/assets/api-B5psysvQ.js +1 -0
- package/dist/web-dist/assets/clock-dRyRszad.js +1 -0
- package/dist/web-dist/assets/createLucideIcon-DiGX-lN4.js +1 -0
- package/dist/web-dist/assets/group-chat-9BaA9G_8.css +1 -0
- package/dist/web-dist/assets/index-BqzqZJ96.js +26 -0
- package/dist/web-dist/assets/index-DyrDN1Of.css +1 -0
- package/dist/web-dist/assets/index-wWimwgy7.js +1 -0
- package/dist/web-dist/assets/provider-display-BgrE7u33.js +1 -0
- package/dist/web-dist/assets/types-1lNWpzYk.js +57 -0
- package/dist/web-dist/assets/types-B6ttO-6G.css +1 -0
- package/dist/web-dist/assets/useTranslation-B-8kenfJ.js +1 -0
- package/dist/web-dist/assets/zap-CVBnETFW.js +1 -0
- package/dist/web-dist/index.html +31 -0
- package/dist/web-dist/vite.svg +1 -0
- package/dist/ws/index.d.ts +7 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/index.js +112 -0
- package/dist/ws/index.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,r as n,a as oe,c as ve,f as be,L as Ne}from"./index-BqzqZJ96.js";import{a as k}from"./api-B5psysvQ.js";import{u as O}from"./useTranslation-B-8kenfJ.js";import{f as Z,g as ye}from"./provider-display-BgrE7u33.js";/* empty css */import{r as ee}from"./SessionDrawer-CXzEQAfF.js";import{C as we}from"./ChatTab-CHpjEu8M.js";import"./types-1lNWpzYk.js";const ue={manual:"snapshots.triggerTypes.manual",pre_operation:"snapshots.triggerTypes.preOperation",daily:"snapshots.triggerTypes.daily"},Se={manual:"snapshot-badge--manual",pre_operation:"snapshot-badge--auto",daily:"snapshot-badge--daily"};function Ce(s){return s==null||s===0?"—":s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:`${(s/(1024*1024)).toFixed(1)} MB`}function Te({snapshot:s,onSelect:a,onDelete:t}){const{t:i}=O();return e.jsx("button",{type:"button",className:"snapshot-card",onClick:a,children:e.jsxs("div",{className:"snapshot-card-row",children:[e.jsx("span",{className:`snapshot-badge ${Se[s.triggerType]??""}`,children:ue[s.triggerType]?i(ue[s.triggerType]):s.triggerType}),e.jsx("span",{className:"snapshot-card-date",children:new Date(s.createdAt).toLocaleString()}),e.jsx("span",{className:"snapshot-card-desc",children:s.description||s.triggerDetail||i("snapshots.noDescription")}),e.jsxs("span",{className:"snapshot-card-meta",children:[e.jsx("span",{className:"snapshot-card-size",children:Ce(s.totalSizeBytes)}),s.instanceStatus&&e.jsx("span",{className:`snapshot-card-status snapshot-card-status--${s.instanceStatus}`,children:s.instanceStatus}),e.jsx("span",{role:"button",tabIndex:0,className:"snapshot-card-delete",onClick:o=>{o.stopPropagation(),t()},onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.stopPropagation(),t())},children:i("common.buttons.delete")})]})]})})}const he={modified:"snapshots.diff.changeTypes.modified",added:"snapshots.diff.changeTypes.added",removed:"snapshots.diff.changeTypes.removed",unchanged:"snapshots.diff.changeTypes.unchanged"},me={modified:"diff-modified",added:"diff-added",removed:"diff-removed",unchanged:"diff-unchanged"};function ke({entry:s}){const{t:a}=O(),[t,i]=n.useState(s.type!=="unchanged");return e.jsxs("div",{className:`diff-entry ${me[s.type]??""}`,children:[e.jsxs("button",{className:"diff-entry-header",onClick:()=>i(!t),type:"button",children:[e.jsx("span",{className:`diff-badge ${me[s.type]??""}`,children:he[s.type]?a(he[s.type]):s.type}),e.jsx("span",{className:"diff-entry-file",children:s.file}),e.jsx("span",{className:"diff-entry-toggle",children:t?"▾":"▸"})]}),t&&s.type!=="unchanged"&&e.jsxs("div",{className:"diff-entry-content",children:[s.type==="removed"&&s.snapshotContent!=null&&e.jsxs("div",{className:"diff-block diff-block--old",children:[e.jsx("div",{className:"diff-block-label",children:a("snapshots.diff.snapshotWillBeRestored")}),e.jsx("pre",{children:s.snapshotContent})]}),s.type==="added"&&s.currentContent!=null&&e.jsxs("div",{className:"diff-block diff-block--new",children:[e.jsx("div",{className:"diff-block-label",children:a("snapshots.diff.currentWillBeRemoved")}),e.jsx("pre",{children:s.currentContent})]}),s.type==="modified"&&e.jsxs("div",{className:"diff-side-by-side",children:[e.jsxs("div",{className:"diff-block diff-block--old",children:[e.jsx("div",{className:"diff-block-label",children:a("snapshots.diff.snapshotWillBeRestored")}),e.jsx("pre",{children:s.snapshotContent??""})]}),e.jsxs("div",{className:"diff-block diff-block--new",children:[e.jsx("div",{className:"diff-block-label",children:a("snapshots.diff.current")}),e.jsx("pre",{children:s.currentContent??""})]})]})]})]})}function Ee({instanceId:s,snapshotId:a,onRestore:t,onClose:i}){const{t:o}=O(),[d,l]=n.useState(null),[r,c]=n.useState(!1),[N,j]=n.useState(null);n.useEffect(()=>{let m=!1;return k.get(`/instances/${s}/snapshots/${a}/diff`).then(v=>{m||l(v)}).catch(v=>{m||j(v instanceof Error?v.message:o("snapshots.diff.failedToLoadDiff"))}).finally(()=>{m||c(!0)}),()=>{m=!0}},[s,a,o]);const T=!r,y=d?d.changes.filter(m=>m.type!=="unchanged").length:0;return e.jsxs("div",{className:"snapshot-diff-view",children:[e.jsxs("div",{className:"snapshot-diff-header",children:[e.jsxs("div",{children:[e.jsx("h3",{children:o("snapshots.diff.title")}),d&&e.jsx("span",{className:"snapshot-diff-subtitle",children:o("snapshots.diff.takenAt",{date:new Date(d.snapshotCreatedAt).toLocaleString(),count:y})})]}),e.jsxs("div",{className:"snapshot-diff-actions",children:[e.jsx("button",{onClick:t,disabled:T||!!N,children:o("snapshots.diff.restoreButton")}),e.jsx("button",{className:"btn-secondary",onClick:i,children:o("common.buttons.close")})]})]}),T&&e.jsx("div",{className:"snapshot-diff-loading",children:o("snapshots.diff.loadingDiff")}),N&&e.jsx("div",{className:"error-message",role:"alert",children:N}),d&&e.jsx("div",{className:"snapshot-diff-entries",children:d.changes.length===0?e.jsx("div",{className:"info-message",children:o("snapshots.diff.noChanges")}):d.changes.map(m=>e.jsx(ke,{entry:m},m.file))})]})}function pe({instanceId:s,snapshotId:a,snapshotDate:t,instanceStatus:i,onConfirm:o,onCancel:d,restoring:l}){const[r,c]=n.useState(null),[N,j]=n.useState(!1);n.useEffect(()=>{let C=!1;return k.get(`/instances/${s}/snapshots/${a}/diff`).then(h=>{C||c(h)}).catch(()=>{C||c(null)}).finally(()=>{C||j(!0)}),()=>{C=!0}},[s,a]);const T=!N,y=C=>{C.preventDefault(),o()},m=i==="running",v=r?.changes.filter(C=>C.type!=="unchanged")??[];return e.jsx("div",{className:"modal-overlay",onClick:l?void 0:d,children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true",onClick:C=>C.stopPropagation(),children:[e.jsx("h3",{children:"Restore Snapshot"}),e.jsxs("p",{style:{color:"var(--color-text-secondary)",margin:"var(--spacing-sm) 0 var(--spacing-md)"},children:["This will restore the instance configuration to the state captured on"," ",e.jsx("strong",{children:new Date(t).toLocaleString()}),"."]}),m&&e.jsx("p",{style:{color:"var(--color-warning)",fontSize:"0.9rem",marginBottom:"var(--spacing-sm)",padding:"var(--spacing-sm) var(--spacing-md)",background:"var(--color-warning-bg, rgba(255,170,0,0.08))",borderRadius:"var(--radius-sm)"},children:"⚠ Instance is currently running. Restoring will trigger a hot-reload or restart."}),e.jsx("p",{style:{color:"var(--color-warning)",fontSize:"0.9rem",marginBottom:"var(--spacing-md)"},children:"A safety snapshot of the current state will be created automatically before restoring."}),T?e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--color-text-secondary)",marginBottom:"var(--spacing-md)"},children:"Loading affected files..."}):v.length>0?e.jsxs("div",{style:{marginBottom:"var(--spacing-md)"},children:[e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--color-text-secondary)",marginBottom:"var(--spacing-xs)"},children:"The following files will be affected:"}),e.jsx("ul",{style:{fontSize:"0.85rem",fontFamily:"var(--font-mono)",margin:0,padding:"0 0 0 var(--spacing-lg)",listStyle:"none"},children:v.map(C=>e.jsxs("li",{style:{padding:"2px 0"},children:[e.jsx("span",{className:`diff-badge ${C.type==="modified"?"diff-modified":C.type==="added"?"diff-added":"diff-removed"}`,style:{fontSize:"0.75rem",marginRight:"var(--spacing-xs)"},children:C.type==="modified"?"M":C.type==="added"?"A":"R"}),C.file]},C.file))})]}):r&&v.length===0?e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--color-text-secondary)",marginBottom:"var(--spacing-md)"},children:"No file changes detected — snapshot matches current state."}):null,e.jsxs("p",{style:{fontSize:"0.85rem",color:"var(--color-text-secondary)",marginBottom:"var(--spacing-lg)"},children:["Snapshot ID: ",e.jsx("code",{style:{fontFamily:"var(--font-mono)",fontSize:"0.8rem"},children:a})]}),e.jsx("form",{onSubmit:y,children:e.jsxs("div",{className:"form-actions",style:{display:"flex",gap:"var(--spacing-sm)",justifyContent:"flex-end"},children:[e.jsx("button",{type:"button",className:"btn-secondary",onClick:d,disabled:l,children:"Cancel"}),e.jsx("button",{type:"submit",className:"danger",disabled:l,children:l?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," Restoring…"]}):"Restore"})]})})]})})}function _e({instanceId:s,instanceStatus:a}){const{t}=O(),i=oe(),{addHandler:o,removeHandler:d}=ve(),[l,r]=n.useState([]),[c,N]=n.useState(!0),[j,T]=n.useState(null),[y,m]=n.useState(1),[v,C]=n.useState(1),[h,u]=n.useState(!1),[S,M]=n.useState(null),[f,$]=n.useState(null),[B,D]=n.useState(!1),L=n.useCallback(async _=>{N(!0),T(null);try{const p=await k.get(`/instances/${s}/snapshots?page=${_}&limit=20`);r(p.items),C(p.totalPages)}catch(p){T(p instanceof Error?p.message:t("snapshots.failedToLoad"))}finally{N(!1)}},[s,t]);n.useEffect(()=>{L(y)},[y,L]),n.useEffect(()=>{const _=()=>{L(y)};return o("instance:snapshot_restored",_),()=>{d("instance:snapshot_restored",_)}},[o,d,L,y]);const z=async()=>{u(!0),T(null);try{await k.post(`/instances/${s}/snapshots`,{}),m(1),await L(1)}catch(_){T(_ instanceof Error?_.message:t("snapshots.failedToCreate"))}finally{u(!1)}},b=async _=>{if(window.confirm(t("snapshots.deleteConfirm")))try{await k.delete(`/instances/${s}/snapshots/${_}`),S===_&&M(null),await L(y)}catch(p){T(p instanceof Error?p.message:t("snapshots.failedToDelete"))}},E=async()=>{if(f){D(!0),T(null);try{await k.post(`/instances/${s}/snapshots/${f.id}/restore`,{}),$(null),M(null),await L(y)}catch(_){T(_ instanceof Error?_.message:t("snapshots.failedToRestore"))}finally{D(!1)}}},F=a==="running";return S?e.jsxs("div",{className:"details-tab",children:[e.jsx(Ee,{instanceId:s,snapshotId:S,onRestore:()=>{const _=l.find(p=>p.id===S);_&&$({id:_.id,createdAt:_.createdAt})},onClose:()=>M(null)}),f&&e.jsx(pe,{instanceId:s,snapshotId:f.id,snapshotDate:f.createdAt,instanceStatus:a,onConfirm:E,onCancel:()=>$(null),restoring:B})]}):e.jsxs("div",{className:"details-tab",children:[e.jsxs("div",{className:"snapshots-header",children:[e.jsx("h3",{children:t("snapshots.title")}),e.jsxs("div",{className:"snapshots-header__actions",children:[e.jsx("button",{onClick:()=>i(`/assistants/${s}/versions`),children:t("snapshots.viewVersionHistory")}),e.jsx("button",{onClick:z,disabled:!F||h,children:h?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",t("snapshots.creating")]}):t("snapshots.createButton")})]})]}),j&&e.jsx("div",{className:"error-message",role:"alert",children:j}),!F&&e.jsx("div",{className:"info-message",children:t("snapshots.instanceMustBeRunning")}),c?e.jsx("div",{children:t("snapshots.loading")}):l.length===0?e.jsx("div",{className:"info-message",children:t("snapshots.noSnapshots")}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"snapshot-list",children:l.map(_=>e.jsx(Te,{snapshot:_,onSelect:()=>M(_.id),onDelete:()=>b(_.id)},_.id))}),v>1&&e.jsxs("div",{className:"snapshot-pagination",children:[e.jsx("button",{className:"btn-small btn-secondary",disabled:y<=1,onClick:()=>m(_=>_-1),children:t("common.pagination.previous")}),e.jsx("span",{style:{color:"var(--color-text-secondary)",fontSize:"0.9rem"},children:t("common.pagination.pageOf",{page:y,totalPages:v})}),e.jsx("button",{className:"btn-small btn-secondary",disabled:y>=v,onClick:()=>m(_=>_+1),children:t("common.pagination.next")})]})]}),f&&e.jsx(pe,{instanceId:s,snapshotId:f.id,snapshotDate:f.createdAt,instanceStatus:a,onConfirm:E,onCancel:()=>$(null),restoring:B})]})}function Me({instance:s,agentType:a}){const{t}=O(),[i,o]=n.useState(!1),[d,l]=n.useState(!0),r=n.useRef(null),c=s.status==="running";n.useEffect(()=>{if(s.status!=="running")return;const v="openclaw.control.settings.v1",h=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/instances/${s.id}/ui`;try{const u=localStorage.getItem(v),S=u?JSON.parse(u):{};S.gatewayUrl!==h&&(S.gatewayUrl=h,localStorage.setItem(v,JSON.stringify(S)))}catch{localStorage.setItem(v,JSON.stringify({gatewayUrl:h}))}},[s.id,s.status]);const N=n.useCallback(()=>{l(!1),o(!1)},[]),j=n.useCallback(()=>{l(!1),o(!0)},[]),T=n.useCallback(()=>{if(l(!0),o(!1),r.current){const v=r.current.src;r.current.src="",r.current.src=v}},[]);if(s.status!=="running")return e.jsxs("div",{className:"agent-ui-frame-placeholder",children:[e.jsx("div",{className:"agent-ui-frame-icon",children:"⏸"}),e.jsx("p",{className:"agent-ui-frame-title",children:t("agentUI.unavailable.title")}),e.jsx("p",{className:"agent-ui-frame-subtitle",children:t("agentUI.unavailable.description")})]});const y=a?.capabilities?.hasWebUI===!0,m=a?.webUI?.iframeAllowed===!0;return!y||!m?e.jsxs("div",{className:"agent-ui-frame-placeholder",children:[e.jsx("div",{className:"agent-ui-frame-icon",children:"🚫"}),e.jsx("p",{className:"agent-ui-frame-title",children:t("agentUI.notSupported.title")}),e.jsx("p",{className:"agent-ui-frame-subtitle",children:t("agentUI.notSupported.description")})]}):e.jsxs("div",{className:"agent-ui-frame-container",children:[d&&e.jsxs("div",{className:"agent-ui-frame-loading",children:[e.jsx("span",{className:"spinner"}),e.jsx("span",{children:t("chat.loadingAgentUI")})]}),i&&e.jsxs("div",{className:"agent-ui-frame-error",children:[e.jsx("div",{className:"agent-ui-frame-icon",children:"⚠️"}),e.jsx("p",{className:"agent-ui-frame-title",children:t("agentUI.loadFailed.title")}),e.jsx("p",{className:"agent-ui-frame-subtitle",children:t("agentUI.loadFailed.description")}),e.jsx("button",{onClick:T,className:"btn-secondary",children:t("common.buttons.retry")})]}),c&&e.jsx("iframe",{ref:r,src:`/api/instances/${s.id}/ui/`,title:t("agentUI.iframeTitle"),className:`agent-ui-frame-iframe${d||i?" agent-ui-frame-iframe--hidden":""}`,onLoad:N,onError:j,sandbox:"allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox",allow:"clipboard-read; clipboard-write"})]})}function $e(){const[s,a]=n.useState([]),[t,i]=n.useState(!0),[o,d]=n.useState(null);return n.useEffect(()=>{let l=!1;return k.get("/agent-types").then(r=>{l||a(r)}).catch(r=>{l||d(r instanceof Error?r.message:"Failed to load agent types")}).finally(()=>{l||i(!1)}),()=>{l=!0}},[]),{agentTypes:s,loading:t,error:o}}const Re=[{value:"anthropic",label:"Anthropic",authModes:["api_key"],oauthFlow:null},{value:"openai",label:"OpenAI",authModes:["api_key","oauth"],oauthFlow:"device_code"},{value:"google",label:"Google",authModes:["api_key","oauth"],oauthFlow:"pkce"},{value:"openrouter",label:"OpenRouter",authModes:["api_key"],oauthFlow:null},{value:"ollama",label:"Ollama",authModes:["api_key"],oauthFlow:null},{value:"bedrock",label:"AWS Bedrock",authModes:["api_key"],oauthFlow:null},{value:"github-copilot",label:"GitHub Copilot",authModes:["oauth"],oauthFlow:"device_code"},{value:"xai",label:"xAI (Grok)",authModes:["api_key"],oauthFlow:null},{value:"together",label:"Together AI",authModes:["api_key"],oauthFlow:null},{value:"venice",label:"Venice AI",authModes:["api_key"],oauthFlow:null},{value:"groq",label:"Groq",authModes:["api_key"],oauthFlow:null},{value:"deepseek",label:"DeepSeek",authModes:["api_key"],oauthFlow:null},{value:"mistral",label:"Mistral",authModes:["api_key"],oauthFlow:null},{value:"moonshot",label:"Moonshot / Kimi",authModes:["api_key"],oauthFlow:null},{value:"minimax",label:"MiniMax",authModes:["api_key"],oauthFlow:null},{value:"litellm",label:"LiteLLM",authModes:["api_key"],oauthFlow:null},{value:"custom",label:"Custom Provider",authModes:["api_key"],oauthFlow:null}],Le=[{value:"brave",label:"Brave Search",authModes:["api_key"],oauthFlow:null},{value:"telegram",label:"Telegram Bot",authModes:["api_key"],oauthFlow:null},{value:"discord",label:"Discord Bot",authModes:["api_key"],oauthFlow:null},{value:"slack_bot",label:"Slack Bot",authModes:["api_key"],oauthFlow:null},{value:"salevoice",label:"SaleVoice (GEO)",authModes:["api_key","oauth"],oauthFlow:null}],se="__other__",ne={marginBottom:"2rem",padding:"1.5rem",borderRadius:"8px",border:"1px solid var(--border)",background:"var(--bg-secondary)"},ce={margin:"0 0 1rem 0",fontSize:"1rem",fontWeight:600,color:"var(--text-primary)"},de={display:"flex",flexDirection:"column",gap:"0.75rem"},re=s=>({display:"flex",alignItems:"flex-start",gap:"0.75rem",padding:"1rem",borderRadius:"8px",border:`2px solid ${s?"var(--color-primary)":"var(--border)"}`,background:s?"var(--color-primary-bg, rgba(99, 102, 241, 0.05))":"transparent",cursor:"pointer",transition:"border-color 0.15s, background 0.15s"}),te={width:"100%",padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)",background:"var(--bg-secondary)",color:"var(--text-primary)"};function Fe({instance:s,agentType:a,onInstanceUpdate:t}){const i=s.billingMode==="platform";return e.jsxs("div",{className:"details-tab",children:[e.jsx(Be,{instanceId:s.id,isPlatform:i,instanceStatus:s.status,onInstanceUpdate:t}),e.jsx(De,{instance:s,agentType:a,isPlatform:i,onInstanceUpdate:t}),e.jsx(Ae,{instanceId:s.id})]})}function Be({instanceId:s,isPlatform:a,instanceStatus:t,onInstanceUpdate:i}){const{t:o}=O(),[d,l]=n.useState(!1),[r,c]=n.useState(!1),[N,j]=n.useState(!1),[T,y]=n.useState(null),[m,v]=n.useState(null),[C,h]=n.useState(null);function u($){$===a||d||v($)}async function S(){if(m!==null){v(null),l(!0),y(null);try{await k.patch(`/instances/${s}/config`,{billingMode:m?"platform":"byok"}),h(o(m?"aiTab.providerMode.platformTitle":"aiTab.providerMode.byokTitle")),i(),c(!0)}catch($){y($ instanceof Error?$.message:o("aiTab.providerMode.switchError"))}finally{l(!1)}}}async function M(){j(!0);try{await k.post(`/instances/${s}/restart`,{}),c(!1),i()}catch($){y($ instanceof Error?$.message:o("aiTab.providerMode.switchError"))}finally{j(!1)}}const f=t==="running"||t==="error";return e.jsxs("div",{style:ne,children:[e.jsx("h3",{style:ce,children:o("aiTab.providerMode.title")}),e.jsxs("div",{style:de,children:[e.jsxs("label",{style:{...re(a),opacity:d?.6:1},onClick:()=>u(!0),children:[e.jsx("input",{type:"radio",checked:a,readOnly:!0,style:{marginTop:"2px"}}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600},children:o("aiTab.providerMode.platformTitle")}),e.jsx("div",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:"2px"},children:o("aiTab.providerMode.platformDesc")})]})]}),e.jsxs("label",{style:{...re(!a),opacity:d?.6:1},onClick:()=>u(!1),children:[e.jsx("input",{type:"radio",checked:!a,readOnly:!0,style:{marginTop:"2px"}}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600},children:o("aiTab.providerMode.byokTitle")}),e.jsx("div",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:"2px"},children:o("aiTab.providerMode.byokDesc")})]})]})]}),d&&e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:"0.75rem",marginBottom:0},children:o("aiTab.providerMode.switching")}),T&&e.jsx("div",{className:"error-message",role:"alert",style:{marginTop:"0.75rem"},children:T}),r&&!d&&e.jsxs("div",{style:{marginTop:"0.75rem",padding:"0.75rem 1rem",borderRadius:"8px",background:"var(--color-warning-bg, rgba(245, 158, 11, 0.1))",border:"1px solid var(--color-warning, #f59e0b)"},children:[e.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.85rem",color:"var(--text-primary)"},children:o("aiTab.providerMode.switchSuccess",{mode:C??o(a?"aiTab.providerMode.platformTitle":"aiTab.providerMode.byokTitle")})}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[f&&e.jsx("button",{onClick:M,disabled:N,children:o(N?"aiTab.providerMode.switching":"aiTab.providerMode.restartNow")}),e.jsx("button",{className:"btn-secondary",onClick:()=>c(!1),children:o("aiTab.providerMode.restartLater")})]})]}),!r&&!d&&e.jsx("p",{style:{fontSize:"0.8rem",color:"var(--text-tertiary)",marginTop:"0.75rem",marginBottom:0},children:o("aiTab.providerMode.immutableNote")}),m!==null&&e.jsx("div",{className:"modal-overlay",onClick:()=>v(null),children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true",onClick:$=>$.stopPropagation(),children:[e.jsx("h3",{style:{margin:"0 0 0.75rem 0"},children:o("aiTab.providerMode.confirmTitle")}),e.jsx("p",{style:{color:"var(--text-secondary)",fontSize:"0.9rem",margin:"0 0 1.25rem 0",lineHeight:1.6},children:o("aiTab.providerMode.switchConfirm",{mode:o(m?"aiTab.providerMode.platformTitle":"aiTab.providerMode.byokTitle")})}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("button",{type:"button",className:"btn-secondary",onClick:()=>v(null),children:o("aiTab.providerMode.confirmCancel")}),e.jsx("button",{type:"button",onClick:S,children:o("aiTab.providerMode.confirmOk")})]})]})})]})}function De({instance:s,agentType:a,isPlatform:t,onInstanceUpdate:i}){const o=s.config?.defaultModel||"",d=s.config?.defaultProvider||"",l=o==="auto",{t:r}=O(),[c,N]=n.useState(l?"auto":"specific"),[j,T]=n.useState(d),[y,m]=n.useState(l?"":o),[v,C]=n.useState(!1),[h,u]=n.useState(null),[S,M]=n.useState([]),[f,$]=n.useState(!1),[B,D]=n.useState(""),[L,z]=n.useState([]),[b,E]=n.useState(""),[F,_]=n.useState(!1),[p,G]=n.useState(null);n.useEffect(()=>{if(!t)return;let x=!1;return $(!0),k.get("/litellm/models/available").then(P=>{x||M(P.models)}).catch(()=>{if(!x){const P=a?.wizard?.platformModels??[];M(P.map(U=>({id:U.id,name:U.displayName||U.id,provider:"",recommended:U.isDefault??!1})))}}).finally(()=>{x||$(!1)}),()=>{x=!0}},[t,a]);const H=n.useCallback(()=>{t||k.get(`/instances/${s.id}/credentials`).then(x=>z(x)).catch(()=>{})},[t,s.id]);n.useEffect(()=>{H()},[H]);const I=n.useMemo(()=>L.find(x=>x.provider===j&&x.credentialType==="api_key"),[L,j]),J=n.useMemo(()=>{let x=S;if(!B){const W=new Set(x.filter(q=>q.id.includes("-latest")||q.name.includes("(latest)")).map(q=>q.id)),Q=new Set([y]);x=x.filter(q=>{if(Q.has(q.id)||q.recommended)return!0;if(/\d{6,}/.test(q.id)&&!q.id.includes("latest")&&!W.has(q.id)){const je=q.id.replace(/-\d{6,}.*$/,"");if(x.some(ie=>ie.id!==q.id&&ie.id.startsWith(je)&&!/\d{6,}/.test(ie.id)))return!1}return!0})}const P=B?x.filter(W=>W.name.toLowerCase().includes(B.toLowerCase())||W.id.toLowerCase().includes(B.toLowerCase())):x,U=new Map;for(const W of P){const Q=W.provider||"Other";U.has(Q)||U.set(Q,[]),U.get(Q).push(W)}for(const[,W]of U)W.sort((Q,q)=>(q.recommended?1:0)-(Q.recommended?1:0)||Q.name.localeCompare(q.name));return U},[S,B,y]),K=a?.wizard?.providers??[],g=K.find(x=>x.name===j)?.models??[],R=t?c==="auto"&&o!=="auto"||c==="specific"&&y!==o:j!==d||y!==o;function A(x){T(x);const P=K.find(W=>W.name===x),U=P?.models.find(W=>W.isDefault)?.id??P?.models[0]?.id??"";m(U),u(null),E(""),G(null)}async function V(){if(!(!j||!b.trim())){_(!0),G(null);try{await k.post(`/instances/${s.id}/credentials`,{provider:j,credentialType:"api_key",value:b.trim()}),I&&await k.delete(`/instances/${s.id}/credentials/${I.id}`),E(""),G({type:"success",text:r("aiTab.byokCredential.saved")}),H()}catch(x){G({type:"error",text:x instanceof Error?x.message:r("aiTab.byokCredential.saveFailed")})}finally{_(!1)}}}async function Y(){if(I)try{await k.delete(`/instances/${s.id}/credentials/${I.id}`),G({type:"success",text:r("aiTab.byokCredential.deleted")}),H()}catch(x){G({type:"error",text:x instanceof Error?x.message:r("aiTab.byokCredential.deleteFailed")})}}async function X(){if(R){C(!0),u(null);try{t?await k.patch(`/instances/${s.id}/config`,{defaultModel:c==="auto"?"auto":y}):await k.patch(`/instances/${s.id}/config`,{defaultProvider:j,defaultModel:y}),u({type:"success",text:r("aiTab.save.success")}),i()}catch(x){u({type:"error",text:x instanceof Error?x.message:r("aiTab.save.error")})}finally{C(!1)}}}return e.jsxs("div",{style:ne,children:[e.jsx("h3",{style:ce,children:r("aiTab.model.title")}),t?e.jsx(e.Fragment,{children:e.jsxs("div",{style:de,children:[e.jsxs("label",{style:re(c==="auto"),onClick:()=>{N("auto"),u(null)},children:[e.jsx("input",{type:"radio",checked:c==="auto",onChange:()=>N("auto"),style:{marginTop:"2px"}}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600},children:r("aiTab.model.autoTitle")}),e.jsx("div",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:"2px"},children:r("aiTab.model.autoDesc")}),e.jsxs("div",{style:{fontSize:"0.8rem",color:"var(--text-tertiary)",marginTop:"6px",lineHeight:1.6},children:[r("aiTab.model.autoRouting1"),e.jsx("br",{}),r("aiTab.model.autoRouting2"),e.jsx("br",{}),r("aiTab.model.autoRouting3")]})]})]}),e.jsxs("label",{style:re(c==="specific"),onClick:()=>{if(N("specific"),!y||y==="auto"){const x=S.find(P=>P.recommended)?.id??S[0]?.id??"";m(x)}u(null)},children:[e.jsx("input",{type:"radio",checked:c==="specific",onChange:()=>N("specific"),style:{marginTop:"2px"}}),e.jsxs("div",{style:{flex:1},children:[e.jsx("div",{style:{fontWeight:600},children:r("aiTab.model.specificTitle")}),e.jsx("div",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:"2px"},children:r("aiTab.model.specificDesc")}),c==="specific"&&e.jsx("div",{style:{marginTop:"0.75rem"},children:S.length>0?e.jsxs(e.Fragment,{children:[S.length>10&&e.jsx("input",{className:"wiz-input wiz-model-search",type:"text",placeholder:r("wizard.confirm.modelSearchPlaceholder"),value:B,onChange:x=>D(x.target.value),onClick:x=>x.stopPropagation()}),e.jsx("div",{className:"wiz-model-list",children:[...J.entries()].map(([x,P])=>e.jsxs("div",{className:"wiz-model-group",children:[J.size>1&&e.jsx("div",{className:"wiz-model-group__label",children:x}),P.map(U=>e.jsxs("button",{type:"button",className:`wiz-model-item${y===U.id?" wiz-model-item--active":""}`,onClick:W=>{W.stopPropagation(),m(U.id),u(null)},children:[e.jsx("span",{className:"wiz-model-item__name",children:U.name||Z(U.id)}),e.jsx("span",{className:"wiz-model-item__id",children:Z(U.id)}),U.recommended&&e.jsx("span",{className:"wiz-model-item__badge",children:r("wizard.confirm.modelRecommended")})]},U.id))]},x))})]}):f?e.jsx("div",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",padding:"0.5rem 0"},children:r("wizard.confirm.modelsLoading","Loading models...")}):e.jsx("input",{type:"text",value:y,onChange:x=>{m(x.target.value),u(null)},placeholder:r("aiTab.model.placeholder"),style:te,onClick:x=>x.stopPropagation()})})]})]})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{marginBottom:"1rem"},children:[e.jsx("label",{style:{display:"block",marginBottom:"0.5rem",fontWeight:600,fontSize:"0.9rem"},children:r("aiTab.model.providerLabel")}),e.jsxs("select",{value:j,onChange:x=>A(x.target.value),style:te,children:[!K.some(x=>x.name===j)&&e.jsx("option",{value:j,children:ye(j,r)}),K.map(x=>e.jsxs("option",{value:x.name,children:[x.displayName," (",x.models.length," models)"]},x.name))]})]}),j&&e.jsxs("div",{style:{marginBottom:"1rem",padding:"1rem",borderRadius:"8px",border:"1px solid var(--border)",background:I?"var(--color-primary-bg, rgba(99, 102, 241, 0.05))":"transparent"},children:[e.jsx("label",{style:{display:"block",marginBottom:"0.5rem",fontWeight:600,fontSize:"0.9rem"},children:r("aiTab.byokCredential.label")}),I?e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",flex:1},children:r("aiTab.byokCredential.configured",{date:new Date(I.createdAt).toLocaleDateString()})}),e.jsx("button",{className:"btn-secondary",style:{fontSize:"0.8rem",padding:"0.25rem 0.6rem"},onClick:Y,children:r("aiTab.byokCredential.deleteButton")})]}):e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--text-tertiary)",margin:"0 0 0.5rem 0"},children:r("aiTab.byokCredential.hint")}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem",marginTop:I?"0.5rem":0},children:[e.jsx("input",{type:"password",value:b,onChange:x=>{E(x.target.value),G(null)},placeholder:r(I?"aiTab.byokCredential.updatePlaceholder":"aiTab.byokCredential.placeholder"),style:{...te,flex:1}}),e.jsx("button",{onClick:V,disabled:!b.trim()||F,style:{whiteSpace:"nowrap"},children:r(F?"aiTab.save.saving":I?"aiTab.byokCredential.updateButton":"aiTab.byokCredential.saveButton")})]}),p&&e.jsx("div",{className:p.type==="success"?"success-message":"error-message",role:"alert",style:{marginTop:"0.5rem",fontSize:"0.85rem"},children:p.text})]}),e.jsxs("div",{style:{marginBottom:"1rem"},children:[e.jsx("label",{style:{display:"block",marginBottom:"0.5rem",fontWeight:600,fontSize:"0.9rem"},children:r("aiTab.model.modelLabel")}),g.length>0?e.jsx("div",{className:"wiz-model-list",children:g.map(x=>e.jsxs("button",{type:"button",className:`wiz-model-item${y===x.id?" wiz-model-item--active":""}`,onClick:()=>{m(x.id),u(null)},children:[e.jsx("span",{className:"wiz-model-item__name",children:x.displayName||Z(x.id)}),e.jsx("span",{className:"wiz-model-item__id",children:Z(x.id)}),x.isDefault&&e.jsx("span",{className:"wiz-model-item__badge",children:r("aiTab.model.defaultSuffix")})]},x.id))}):e.jsx("input",{type:"text",value:y,onChange:x=>{m(x.target.value),u(null)},placeholder:r("aiTab.model.placeholder"),style:te})]})]}),h&&e.jsx("div",{className:h.type==="success"?"success-message":"error-message",role:"alert",style:{marginTop:"1rem"},children:h.text}),e.jsx("button",{onClick:X,disabled:!R||v,style:{marginTop:"1rem"},children:r(v?"aiTab.save.saving":"aiTab.save.button")})]})}function Ae({instanceId:s}){const{t:a}=O(),[t,i]=n.useState([]),[o,d]=n.useState(!0),[l,r]=n.useState(null),[c,N]=n.useState(!1),[j,T]=n.useState(""),[y,m]=n.useState(""),[v,C]=n.useState(""),[h,u]=n.useState(null),[S,M]=n.useState("oauth"),[f,$]=n.useState(""),[B,D]=n.useState(!1),[L,z]=n.useState(!1),b=j===se?y:j,E=n.useCallback(async()=>{try{const w=await k.get(`/instances/${s}/credentials`);i(w)}catch(w){r(w instanceof Error?w.message:a("aiTab.toolCredentials.loadFailed"))}finally{d(!1)}},[s]),F=n.useCallback(async()=>{try{const w=await k.get(`/instances/${s}/template-requirements`);u(w)}catch{}},[s]);n.useEffect(()=>{E(),F()},[E,F]);const _=async w=>{w.preventDefault(),r(null);const g=b;if(!g){r(a("aiTab.toolCredentials.selectError"));return}try{await k.post(`/instances/${s}/credentials`,{provider:g,credentialType:"api_key",value:v}),N(!1),T(""),m(""),C(""),E(),F()}catch(R){r(R instanceof Error?R.message:a("aiTab.toolCredentials.addFailed"))}},p=async w=>{if(window.confirm(a("aiTab.toolCredentials.deleteConfirm")))try{await k.delete(`/instances/${s}/credentials/${w}`),E(),F()}catch(g){r(g instanceof Error?g.message:a("aiTab.toolCredentials.deleteFailed"))}},G=async()=>{z(!0),r(null);try{const w=await k.post("/oauth/salevoice/authorize",{});sessionStorage.setItem("salevoice_oauth_pending",JSON.stringify({state:w.state}));let g=!1;const R=P=>{g||P?.type!=="salevoice_oauth_complete"||!P.success||(g=!0,X(),D(!0),z(!1),k.post(`/instances/${s}/credentials`,{provider:"salevoice",credentialType:"api_key",value:"oauth_connected"}).then(()=>{E(),F()}).catch(()=>{}))};let A=null;try{A=new BroadcastChannel("salevoice_oauth"),A.onmessage=P=>R(P.data)}catch{}const V=P=>R(P.data);window.addEventListener("message",V);const Y=P=>{if(!(P.key!=="salevoice_oauth_result"||!P.newValue))try{R(JSON.parse(P.newValue))}catch{}};window.addEventListener("storage",Y);const X=()=>{A?.close(),window.removeEventListener("message",V),window.removeEventListener("storage",Y);try{localStorage.removeItem("salevoice_oauth_result")}catch{}};window.open(w.authUrl,"salevoice_oauth","width=600,height=700,popup=yes")||(X(),r(a("aiTab.toolCredentials.salevoice.authFailed")),z(!1))}catch(w){r(w instanceof Error?w.message:a("aiTab.toolCredentials.salevoice.authFailed")),z(!1)}},H=async()=>{if(f.trim()){z(!0),r(null);try{await k.post("/credentials",{provider:"salevoice",credentialType:"api_key",value:f.trim(),displayName:"SaleVoice (API Key)"}),await k.post(`/instances/${s}/credentials`,{provider:"salevoice",credentialType:"api_key",value:f.trim()}),D(!0),z(!1),$(""),E(),F()}catch(w){r(w instanceof Error?w.message:a("aiTab.toolCredentials.salevoice.saveFailed")),z(!1)}}},I=h?.requirements.some(w=>w.provider==="salevoice")??!1,J=h?.credentialStatus["salevoice:api_key"]==="fulfilled",K=h?Object.entries(h.credentialStatus).filter(([,w])=>w==="missing"):[];return o?e.jsx("div",{style:ne,children:e.jsx("p",{children:a("aiTab.toolCredentials.loading")})}):e.jsxs("div",{style:ne,children:[e.jsx("h3",{style:ce,children:a("aiTab.toolCredentials.title")}),e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",marginTop:0,marginBottom:"1rem"},children:a("aiTab.toolCredentials.description")}),l&&e.jsx("div",{className:"error-message",role:"alert",style:{marginBottom:"1rem"},children:l}),h&&h.requirements.length>0&&K.length>0&&e.jsxs("div",{className:"credential-checklist has-missing",style:{marginBottom:"1rem"},children:[e.jsx("div",{className:"credential-checklist-header",children:a("aiTab.toolCredentials.required",{count:K.length})}),h.requirements.map(w=>{const g=`${w.provider}:${w.credentialType}`,R=h.credentialStatus[g];return e.jsxs("div",{className:`credential-checklist-item ${R==="fulfilled"?"credential-fulfilled":"credential-missing"}`,children:[e.jsx("span",{className:"credential-checklist-icon",children:R==="fulfilled"?"✓":"✗"}),e.jsxs("div",{className:"credential-checklist-info",children:[e.jsx("strong",{children:w.provider})," : ",w.credentialType,w.description&&e.jsxs("span",{className:"credential-checklist-desc",children:[" — ",w.description]})]})]},g)})]}),I&&!J&&!B&&e.jsxs("div",{style:{marginBottom:"1rem",padding:"1rem",borderRadius:"8px",border:"1px solid var(--color-primary)",background:"var(--bg-tertiary)"},children:[e.jsx("h4",{style:{margin:"0 0 0.5rem 0",fontSize:"0.95rem",color:"var(--text-primary)"},children:a("aiTab.toolCredentials.salevoice.title")}),e.jsx("p",{style:{fontSize:"0.85rem",color:"var(--text-secondary)",margin:"0 0 1rem 0"},children:a("aiTab.toolCredentials.salevoice.description")}),e.jsxs("div",{style:de,children:[e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer"},children:[e.jsx("input",{type:"radio",name:"geo-cred-mode",checked:S==="oauth",onChange:()=>M("oauth")}),e.jsxs("div",{children:[e.jsx("strong",{children:a("aiTab.toolCredentials.salevoice.oauthLabel")}),e.jsx("div",{style:{fontSize:"0.8rem",color:"var(--text-secondary)"},children:a("aiTab.toolCredentials.salevoice.oauthDescription")})]})]}),e.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer"},children:[e.jsx("input",{type:"radio",name:"geo-cred-mode",checked:S==="apikey",onChange:()=>M("apikey")}),e.jsxs("div",{children:[e.jsx("strong",{children:a("aiTab.toolCredentials.salevoice.apiKeyLabel")}),e.jsx("div",{style:{fontSize:"0.8rem",color:"var(--text-secondary)"},children:a("aiTab.toolCredentials.salevoice.apiKeyDescription")})]})]})]}),e.jsx("div",{style:{marginTop:"1rem"},children:S==="oauth"?e.jsx("button",{onClick:G,disabled:L,children:a(L?"aiTab.toolCredentials.salevoice.connecting":"aiTab.toolCredentials.salevoice.connectButton")}):e.jsxs("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[e.jsx("input",{type:"password",value:f,onChange:w=>$(w.target.value),placeholder:a("aiTab.toolCredentials.salevoice.apiKeyPlaceholder"),style:{flex:1}}),e.jsx("button",{onClick:H,disabled:L||!f.trim(),children:a(L?"aiTab.toolCredentials.salevoice.connecting":"aiTab.toolCredentials.salevoice.saveButton")})]})})]}),I&&(J||B)&&e.jsx("div",{style:{marginBottom:"1rem",padding:"1rem",borderRadius:"8px",border:"1px solid var(--color-success, #22c55e)",background:"var(--bg-tertiary)"},children:e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",color:"var(--color-success, #22c55e)"},children:[e.jsx("span",{children:"✓"}),e.jsx("strong",{children:a("aiTab.toolCredentials.salevoice.connected")})]})}),t.length>0&&e.jsx("div",{className:"provider-list",style:{marginBottom:"1rem"},children:t.map(w=>e.jsxs("div",{className:"provider-card",children:[e.jsxs("div",{className:"provider-card-header",children:[e.jsx("strong",{children:w.provider}),e.jsx("div",{className:"provider-card-actions",children:e.jsx("button",{className:"danger",onClick:()=>p(w.id),children:a("aiTab.toolCredentials.deleteButton")})})]}),e.jsxs("div",{className:"provider-card-details",children:[e.jsxs("span",{children:[a("aiTab.toolCredentials.type")," ",w.credentialType]}),e.jsxs("span",{children:[a("aiTab.toolCredentials.added")," ",new Date(w.createdAt).toLocaleDateString()]})]})]},w.id))}),t.length===0&&!c&&K.length===0&&e.jsx("p",{style:{color:"var(--text-secondary)",fontSize:"0.9rem"},children:a("aiTab.toolCredentials.noCredentials")}),c?e.jsxs("div",{className:"provider-form",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"tool-cred-provider",children:a("aiTab.model.providerLabel")}),e.jsxs("select",{id:"tool-cred-provider",value:j,onChange:w=>{T(w.target.value),w.target.value!==se&&m(""),C("")},children:[e.jsx("option",{value:"",children:a("aiTab.toolCredentials.selectProvider")}),e.jsx("optgroup",{label:a("aiTab.toolCredentials.toolsGroup"),children:Le.map(w=>e.jsx("option",{value:w.value,children:w.label},w.value))}),e.jsx("optgroup",{label:a("aiTab.toolCredentials.aiProvidersGroup"),children:Re.map(w=>e.jsx("option",{value:w.value,children:w.label},w.value))}),e.jsx("option",{value:se,children:a("aiTab.toolCredentials.other")})]})]}),j===se&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"tool-cred-custom",children:a("aiTab.toolCredentials.providerName")}),e.jsx("input",{type:"text",id:"tool-cred-custom",value:y,onChange:w=>m(w.target.value),placeholder:a("aiTab.toolCredentials.providerPlaceholder"),required:!0})]}),b&&e.jsxs("form",{onSubmit:_,children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"tool-cred-value",children:a("aiTab.toolCredentials.apiKeyLabel")}),e.jsx("input",{type:"password",id:"tool-cred-value",value:v,onChange:w=>C(w.target.value),placeholder:a("aiTab.toolCredentials.apiKeyPlaceholder"),required:!0})]}),e.jsx("div",{className:"form-actions",children:e.jsx("button",{type:"submit",children:a("aiTab.toolCredentials.addButton")})})]}),e.jsx("div",{className:"form-actions",children:e.jsx("button",{type:"button",className:"btn-secondary",onClick:()=>{N(!1),T(""),m("")},children:a("aiTab.toolCredentials.cancel")})})]}):e.jsx("button",{onClick:()=>N(!0),children:a("aiTab.toolCredentials.addButton")})]})}const Ie={openai:{oauthFlow:"device_code"},google:{oauthFlow:"pkce"},"github-copilot":{oauthFlow:"device_code"}},ze={strict:{background:"var(--color-error-bg, #fde8e8)",color:"var(--color-error, #c53030)"},standard:{background:"var(--color-info-bg, #e8f0fe)",color:"var(--color-info, #2b6cb0)"},developer:{background:"var(--color-warning-bg, #fef3cd)",color:"var(--color-warning, #b7791f)"},unrestricted:{background:"var(--color-success-bg, #e6ffed)",color:"var(--color-success, #276749)"}};function Pe({instance:s,onInstanceUpdate:a,onLifecycle:t,actionInProgress:i,onClone:o,cloning:d}){const{t:l}=O(),r=oe(),[c,N]=n.useState([]),[j,T]=n.useState(!0),[y,m]=n.useState(!1),[v,C]=n.useState(!1),[h,u]=n.useState(s.securityProfile??"standard"),S=s.status==="running",M=s.status==="stopped"||s.status==="created",f=s.status==="error",B=s.status==="starting"||s.status==="stopping"||i!==null,D=n.useCallback(async()=>{try{const I=await k.get(`/instances/${s.id}/credentials`);N(I)}catch{}finally{T(!1)}},[s.id]);n.useEffect(()=>{D()},[D]);const L=s.config?.defaultProvider;async function z(){C(!0);try{await k.patch(`/instances/${s.id}/security-profile`,{securityProfile:h}),m(!1),a()}catch{}finally{C(!1)}}const b=s.securityProfile??"standard",E=ye(L,l)??L,F=s.config?.defaultModel,_=I=>c.some(J=>J.provider===I),p=L?L in Ie:!1,G=p&&!j&&!_(E)&&s.billingMode!=="platform",H=p&&!j&&_(E);return e.jsxs("div",{className:"details-tab",children:[e.jsxs("div",{className:"overview-actions",children:[e.jsx("button",{onClick:()=>t("start"),disabled:!(M||f)||B,children:i==="start"||s.status==="starting"?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",l("instance.overview.starting")]}):l("instance.overview.start")}),e.jsx("button",{onClick:()=>t("stop"),disabled:!(S||f)||B,children:i==="stop"||s.status==="stopping"?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",l("instance.overview.stopping")]}):l("instance.overview.stop")}),e.jsx("button",{onClick:()=>t("restart"),disabled:!(S||f)||B,children:i==="restart"?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",l("instance.overview.restarting")]}):l("instance.overview.restart")}),e.jsx("button",{className:"btn-secondary",onClick:o,disabled:d||B,children:d?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",l("instance.overview.cloning","Cloning...")]}):l("instance.overview.clone","Clone")}),e.jsx("button",{className:"btn-secondary",onClick:()=>r(`/export/${s.id}`),children:l("instance.overview.exportTemplate","Export as Template")})]}),e.jsx("h3",{children:l("instance.overview.title")}),e.jsx("table",{className:"models-table",children:e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.id")})}),e.jsx("td",{children:s.id})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.name")})}),e.jsx("td",{children:s.name})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.agentType")})}),e.jsx("td",{children:s.agentType})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.imageTag")})}),e.jsx("td",{children:s.imageTag})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.status")})}),e.jsx("td",{children:e.jsx("span",{className:`status-${s.status}`,children:l(`common.status.${s.status}`)})})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.securityProfile")})}),e.jsx("td",{children:y?e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"var(--spacing-sm)"},children:[e.jsx("select",{value:h,onChange:I=>u(I.target.value),disabled:v,style:{padding:"2px 4px"},children:["strict","standard","developer","unrestricted"].map(I=>e.jsx("option",{value:I,children:l(`instance.overview.securityProfiles.${I}`)},I))}),e.jsx("button",{type:"button",onClick:z,disabled:v||h===b,style:{padding:"2px 8px",fontSize:"0.85rem"},children:v?l("instance.overview.savingSecurityProfile"):"OK"}),e.jsx("button",{type:"button",className:"btn-secondary",onClick:()=>{m(!1),u(b)},disabled:v,style:{padding:"2px 8px",fontSize:"0.85rem"},children:"✕"})]}):e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"var(--spacing-sm)"},children:[e.jsx("span",{style:{display:"inline-block",padding:"2px 8px",borderRadius:"4px",fontSize:"0.85rem",fontWeight:600,...ze[b]},children:l(`instance.overview.securityProfiles.${b}`)}),e.jsx("button",{type:"button",className:"btn-secondary",onClick:()=>{m(!0),u(b)},style:{padding:"2px 8px",fontSize:"0.85rem"},children:l("instance.overview.changeSecurityProfile")})]})})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.deployment")})}),e.jsx("td",{children:l("common.deploymentTarget."+s.deploymentTarget)})]}),E&&e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.aiProvider")})}),e.jsx("td",{children:E})]}),F&&e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.defaultModel")})}),e.jsx("td",{children:Z(F)})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.created")})}),e.jsx("td",{children:new Date(s.createdAt).toLocaleString()})]}),e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:l("instance.overview.fields.updated")})}),e.jsx("td",{children:new Date(s.updatedAt).toLocaleString()})]})]})}),H&&e.jsx("div",{className:"oauth-section",children:e.jsx("div",{className:"oauth-status",children:l("instance.overview.oauthAuthenticated",{provider:L})})}),G&&e.jsxs("div",{className:"setup-required",children:[e.jsx("h3",{children:l("instance.overview.setupRequired",{provider:L})}),e.jsx("p",{children:l("instance.overview.setupRequiredDescription",{provider:L})}),E==="github-copilot"&&e.jsx(Oe,{instanceId:s.id,onComplete:()=>{D(),a()}}),E==="openai"&&e.jsx(Ue,{instanceId:s.id,onComplete:()=>{D(),a()}}),E==="google"&&e.jsx(Ge,{instanceId:s.id,onComplete:()=>{D(),a()}})]})]})}function Oe({instanceId:s,onComplete:a}){const{t}=O(),[i,o]=n.useState(null),[d,l]=n.useState(!1),[r,c]=n.useState(null),[N,j]=n.useState(!1),[T,y]=n.useState(!1),m=n.useCallback(async()=>{c(null),j(!0);try{const h=await k.post("/oauth/github/device-code",{});o(h),l(!0),window.open(h.verificationUri,"_blank","noopener,noreferrer")}catch(h){c(h instanceof Error?h.message:t("instance.oauth.github.failedToStart"))}finally{j(!1)}},[t]),v=n.useCallback(()=>{i&&navigator.clipboard.writeText(i.userCode).then(()=>{y(!0),setTimeout(()=>y(!1),2e3)})},[i]);n.useEffect(()=>{if(!d||!i)return;const h=Math.max((i.interval||5)*1e3,5e3);let u=!1;const S=async()=>{if(!u)try{const f=await k.post("/oauth/github/poll",{deviceCode:i.deviceCode});if(u)return;if(f.status==="success"&&f.accessToken){await k.post(`/instances/${s}/credentials`,{provider:"github-copilot",credentialType:"oauth_token",value:f.accessToken}),l(!1),a();return}if(f.status==="authorization_pending"||f.status==="slow_down"){setTimeout(S,h);return}c(f.description||t("instance.oauth.github.oauthError",{status:f.status})),l(!1)}catch(f){u||(c(f instanceof Error?f.message:t("instance.oauth.github.pollingFailed")),l(!1))}},M=setTimeout(S,h);return()=>{u=!0,clearTimeout(M)}},[d,i,s,a,t]);const C=()=>{l(!1),o(null)};return e.jsxs("div",{className:"oauth-section",children:[e.jsx("h4",{children:t("instance.oauth.github.title")}),r&&e.jsx("div",{className:"error-message",role:"alert",children:r}),!i&&e.jsxs("div",{children:[e.jsx("p",{style:{marginBottom:"0.75rem",color:"#666"},children:t("instance.oauth.github.description")}),e.jsx("button",{onClick:m,disabled:N,children:t(N?"instance.oauth.github.startingButton":"instance.oauth.github.authenticateButton")})]}),i&&e.jsxs("div",{className:"device-code-display",children:[e.jsxs("div",{className:"device-code-steps",children:[e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.github.step1")})," ",t("instance.oauth.github.step1Text")]}),e.jsxs("div",{className:"user-code-row",children:[e.jsx("div",{className:"user-code",children:i.userCode}),e.jsx("button",{className:"btn-copy",onClick:v,children:t(T?"instance.oauth.github.copiedCode":"common.buttons.copy")})]}),e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.github.step2")})," ",t("instance.oauth.github.step2Text")]}),e.jsxs("p",{children:[e.jsx("a",{href:i.verificationUri,target:"_blank",rel:"noopener noreferrer",children:i.verificationUri})," ",e.jsx("button",{className:"btn-secondary btn-small",onClick:()=>window.open(i.verificationUri,"_blank","noopener,noreferrer"),children:t("instance.oauth.github.openAgain")})]}),e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.github.step3")})," ",t("instance.oauth.github.step3Text")]})]}),d&&e.jsxs("p",{style:{marginTop:"1rem"},children:[e.jsx("span",{className:"spinner"})," ",t("instance.oauth.github.waitingForAuth")]}),e.jsx("div",{style:{marginTop:"1rem"},children:e.jsx("button",{className:"btn-secondary",onClick:C,children:t("common.buttons.cancel")})})]})]})}function Ue({instanceId:s,onComplete:a}){const{t}=O(),[i,o]=n.useState(null),[d,l]=n.useState(!1),[r,c]=n.useState(null),[N,j]=n.useState(!1),[T,y]=n.useState(!1),m=n.useCallback(async()=>{c(null),j(!0);try{const h=await k.post("/oauth/openai/device-code",{});o(h),l(!0),window.open(h.verificationUri,"_blank","noopener,noreferrer")}catch(h){c(h instanceof Error?h.message:t("instance.oauth.openai.failedToStart"))}finally{j(!1)}},[t]),v=n.useCallback(()=>{i&&navigator.clipboard.writeText(i.userCode).then(()=>{y(!0),setTimeout(()=>y(!1),2e3)})},[i]);n.useEffect(()=>{if(!d||!i)return;const h=Math.max((i.interval||5)*1e3,5e3);let u=!1;const S=async()=>{if(!u)try{const f=await k.post("/oauth/openai/poll",{deviceAuthId:i.deviceAuthId,userCode:i.userCode});if(u)return;if(f.status==="success"&&f.accessToken){await k.post(`/instances/${s}/credentials`,{provider:"openai",credentialType:"oauth_token",value:f.accessToken,metadata:{refreshToken:f.refreshToken,expiresIn:f.expiresIn}}),l(!1),a();return}if(f.status==="authorization_pending"||f.status==="slow_down"){setTimeout(S,h);return}c(f.description||t("instance.oauth.openai.oauthError",{status:f.status})),l(!1)}catch(f){u||(c(f instanceof Error?f.message:t("instance.oauth.openai.pollingFailed")),l(!1))}},M=setTimeout(S,h);return()=>{u=!0,clearTimeout(M)}},[d,i,s,a,t]);const C=()=>{l(!1),o(null)};return e.jsxs("div",{className:"oauth-section",children:[e.jsx("h4",{children:t("instance.oauth.openai.title")}),r&&e.jsx("div",{className:"error-message",role:"alert",children:r}),!i&&e.jsxs("div",{children:[e.jsx("p",{style:{marginBottom:"0.75rem",color:"#666"},children:t("instance.oauth.openai.description")}),e.jsx("button",{onClick:m,disabled:N,children:t(N?"instance.oauth.openai.startingButton":"instance.oauth.openai.authenticateButton")})]}),i&&e.jsxs("div",{className:"device-code-display",children:[e.jsxs("div",{className:"device-code-steps",children:[e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.openai.step1")})," ",t("instance.oauth.openai.step1Text")]}),e.jsxs("div",{className:"user-code-row",children:[e.jsx("div",{className:"user-code",children:i.userCode}),e.jsx("button",{className:"btn-copy",onClick:v,children:t(T?"instance.oauth.openai.copiedCode":"common.buttons.copy")})]}),e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.openai.step2")})," ",t("instance.oauth.openai.step2Text")]}),e.jsxs("p",{children:[e.jsx("a",{href:i.verificationUri,target:"_blank",rel:"noopener noreferrer",children:i.verificationUri})," ",e.jsx("button",{className:"btn-secondary btn-small",onClick:()=>window.open(i.verificationUri,"_blank","noopener,noreferrer"),children:t("instance.oauth.openai.openAgain")})]}),e.jsxs("p",{children:[e.jsx("strong",{children:t("instance.oauth.openai.step3")})," ",t("instance.oauth.openai.step3Text")]})]}),d&&e.jsxs("p",{style:{marginTop:"1rem"},children:[e.jsx("span",{className:"spinner"})," ",t("instance.oauth.openai.waitingForAuth")]}),e.jsx("div",{style:{marginTop:"1rem"},children:e.jsx("button",{className:"btn-secondary",onClick:C,children:t("common.buttons.cancel")})})]})]})}function Ge({instanceId:s,onComplete:a}){const{t}=O(),[i,o]=n.useState(null),[d,l]=n.useState(!1);n.useEffect(()=>{const c=()=>{const N=sessionStorage.getItem("google_oauth_success");if(N){sessionStorage.removeItem("google_oauth_success");try{JSON.parse(N).instanceId===s&&a()}catch{}}};return c(),window.addEventListener("focus",c),()=>window.removeEventListener("focus",c)},[s,a]);const r=n.useCallback(async()=>{o(null),l(!0);try{const c=await k.post("/oauth/google/authorize",{});sessionStorage.setItem("google_oauth_pending",JSON.stringify({state:c.state,instanceId:s})),window.location.href=c.authUrl}catch(c){o(c instanceof Error?c.message:t("instance.oauth.google.failedToStart")),l(!1)}},[s,t]);return e.jsxs("div",{className:"oauth-section",children:[e.jsx("h4",{children:t("instance.oauth.google.title")}),i&&e.jsx("div",{className:"error-message",role:"alert",children:i}),e.jsxs("div",{children:[e.jsx("p",{style:{marginBottom:"0.75rem",color:"#666"},children:t("instance.oauth.google.description")}),e.jsx("button",{onClick:r,disabled:d,children:d?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"spinner"})," ",t("instance.oauth.google.redirectingButton")]}):t("instance.oauth.google.authenticateButton")})]})]})}const le=["trace","debug","info","warn","error","fatal"],Ve=new Set(le),We=2e3,qe=2e3;function He(s){if(!s.trim())return{raw:s,message:s};try{const a=JSON.parse(s),t=a&&typeof a._meta=="object"&&a._meta!==null?a._meta:null,i=typeof a.time=="string"?a.time:typeof t?.date=="string"?t.date:null,o=t?.logLevelName??t?.level,d=typeof o=="string"&&Ve.has(o.toLowerCase())?o.toLowerCase():null,l=typeof a[0]=="string"?a[0]:typeof t?.name=="string"?t.name:null;let r=null;if(l&&l.length<120)try{const N=JSON.parse(l);r=typeof N.subsystem=="string"?N.subsystem:typeof N.module=="string"?N.module:l}catch{r=l}let c=null;return typeof a[1]=="string"?c=a[1]:typeof a[0]=="string"&&!r?c=a[0]:typeof a.message=="string"&&(c=a.message),{raw:s,time:i,level:d,subsystem:r,message:c??s}}catch{return{raw:s,message:s}}}function Ke(s){if(!s)return"";const a=new Date(s);return Number.isNaN(a.getTime())?s:a.toLocaleTimeString()}function Je({instanceId:s,instanceStatus:a}){const{t}=O(),[i,o]=n.useState([]),[d,l]=n.useState(!1),[r,c]=n.useState(null),[N,j]=n.useState(!1),[T,y]=n.useState(""),[m,v]=n.useState(()=>{const b={};for(const E of le)b[E]=!0;return b}),[C,h]=n.useState(!0),u=n.useRef(null),S=n.useRef(null),M=n.useRef(null),f=n.useCallback(async b=>{l(!0),c(null);try{const E={limit:500};!b&&u.current!=null&&(E.cursor=u.current);const F=await ee(s,"logs.tail",E),p=(Array.isArray(F.lines)?F.lines.filter(H=>typeof H=="string"):[]).map(He),G=b||F.reset||u.current==null;o(H=>G?p:[...H,...p].slice(-We)),typeof F.cursor=="number"&&(u.current=F.cursor),j(!!F.truncated)}catch(E){c(E instanceof Error?E.message:t("common.errors.failedToLoad"))}finally{l(!1)}},[s]),$=a==="running"||a==="stopping"||a==="error";n.useEffect(()=>{if($)return u.current=null,f(!0),M.current=setInterval(()=>{f()},qe),()=>{M.current&&clearInterval(M.current)}},[$,f]),n.useEffect(()=>{C&&S.current&&(S.current.scrollTop=S.current.scrollHeight)},[i,C]);const B=n.useCallback(()=>{if(!S.current)return;const b=S.current,E=b.scrollHeight-b.scrollTop-b.clientHeight<40;C&&!E&&h(!1)},[C]),D=n.useCallback(b=>{v(E=>({...E,[b]:!E[b]}))},[]),L=T.trim().toLowerCase(),z=i.filter(b=>!(b.level&&!m[b.level]||L&&![b.message,b.subsystem,b.raw].filter(Boolean).join(" ").toLowerCase().includes(L)));return $?e.jsxs("div",{className:"instance-logs",children:[e.jsxs("div",{className:"logs-toolbar",children:[e.jsx("input",{type:"text",className:"logs-filter-input",placeholder:t("instance.logs.filterPlaceholder"),value:T,onChange:b=>y(b.target.value)}),e.jsx("div",{className:"logs-level-chips",children:le.map(b=>e.jsxs("label",{className:`logs-level-chip logs-level-chip--${b} ${m[b]?"active":""}`,children:[e.jsx("input",{type:"checkbox",checked:m[b],onChange:()=>D(b)}),e.jsx("span",{children:t(`instance.logs.levels.${b}`)})]},b))}),e.jsxs("div",{className:"logs-actions",children:[e.jsxs("label",{className:"logs-autofollow",children:[e.jsx("input",{type:"checkbox",checked:C,onChange:b=>h(b.target.checked)}),e.jsx("span",{children:t("instance.logs.autoFollow")})]}),e.jsx("button",{className:"btn-small",onClick:()=>{u.current=null,f(!0)},disabled:d,children:t(d?"common.labels.loading":"common.buttons.refresh")})]})]}),r&&e.jsx("div",{className:"error-message",role:"alert",children:r}),N&&e.jsx("div",{className:"info-message",children:t("instance.logs.truncated")}),e.jsx("div",{className:"logs-container",ref:S,onScroll:B,children:z.length===0?e.jsx("div",{className:"log-line log-empty",children:t("instance.logs.noEntries")}):z.map((b,E)=>e.jsxs("div",{className:`log-row ${b.level??""}`,children:[e.jsx("span",{className:"log-time",children:Ke(b.time)}),e.jsx("span",{className:`log-level ${b.level??""}`,children:b.level??""}),e.jsx("span",{className:"log-subsystem",children:b.subsystem??""}),e.jsx("span",{className:"log-message",children:b.message??b.raw})]},E))})]}):e.jsx("div",{className:"instance-logs",children:e.jsx("div",{className:"info-message",children:t("instance.logs.startRequired")})})}function Ye({instanceId:s}){const{t:a}=O(),[t,i]=n.useState([]),[o,d]=n.useState(!0),[l,r]=n.useState(null);return n.useEffect(()=>{k.get(`/instances/${s}/events`).then(i).catch(c=>r(c instanceof Error?c.message:a("common.errors.failedToLoad"))).finally(()=>d(!1))},[s,a]),o?e.jsx("div",{children:a("instance.events.loading")}):e.jsxs("div",{children:[e.jsx("h3",{children:a("instance.events.title")}),l&&e.jsx("div",{className:"error-message",role:"alert",children:l}),t.length===0?e.jsx("div",{className:"info-message",children:a("instance.events.noEvents")}):e.jsxs("table",{className:"models-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:a("instance.events.columns.time")}),e.jsx("th",{children:a("instance.events.columns.event")}),e.jsx("th",{children:a("instance.events.columns.details")})]})}),e.jsx("tbody",{children:t.map(c=>e.jsxs("tr",{children:[e.jsx("td",{children:new Date(c.createdAt).toLocaleString()}),e.jsx("td",{children:c.eventType}),e.jsx("td",{children:e.jsx("pre",{className:"result-payload",style:{margin:0,maxHeight:"100px"},children:JSON.stringify(c.metadata,null,2)})})]},c.id))})]})]})}const Qe={fast_burn:{icon:"🔥",label:"Fast burn",className:"trend-badge--fast-burn"},rising:{icon:"▲",label:"Rising",className:"trend-badge--rising"},steady:{icon:"→",label:"Steady",className:"trend-badge--steady"},cooling:{icon:"▼",label:"Cooling",className:"trend-badge--cooling"},idle:{icon:"○",label:"Idle",className:"trend-badge--idle"}};function Xe({trend:s}){const a=Qe[s];return e.jsxs("span",{className:`trend-badge ${a.className}`,children:[e.jsx("span",{className:"trend-badge-icon",children:a.icon}),e.jsx("span",{className:"trend-badge-label",children:a.label})]})}function ae(s){return s<.01?`$${s.toFixed(4)}`:`$${s.toFixed(2)}`}function ge({instanceId:s}){const{t:a}=O(),[t,i]=n.useState(null),[o,d]=n.useState(!1),[l,r]=n.useState(!1);if(n.useEffect(()=>{const N=s?`/usage/instances/${s}/burn-rate`:"/usage/burn-rate";let j=!1;return k.get(N).then(T=>{j||i(T)}).catch(()=>{j||r(!0)}).finally(()=>{j||d(!0)}),()=>{j=!0}},[s]),!o)return e.jsxs("div",{className:"burn-rate-card",children:[e.jsx("h4",{className:"burn-rate-card-title",children:a("burnRate.title")}),e.jsx("div",{className:"burn-rate-card-loading",children:a("burnRate.loading")})]});if(l)return e.jsxs("div",{className:"burn-rate-card",children:[e.jsx("h4",{className:"burn-rate-card-title",children:a("burnRate.title")}),e.jsx("div",{className:"burn-rate-card-error",children:a("burnRate.fetchError")})]});if(!t?.burnRate)return t?.reason==="not_provisioned"||t?.reason==="no_team"?e.jsxs("div",{className:"burn-rate-card",children:[e.jsx("h4",{className:"burn-rate-card-title",children:a("burnRate.title")}),e.jsx("div",{className:"burn-rate-card-info",children:a("burnRate.notProvisioned")})]}):t?.reason==="no_usage"?e.jsxs("div",{className:"burn-rate-card",children:[e.jsx("h4",{className:"burn-rate-card-title",children:a("burnRate.title")}),e.jsx("div",{className:"burn-rate-card-info",children:a("burnRate.noUsage")})]}):null;const{burnRate:c}=t;return e.jsxs("div",{className:"burn-rate-card",children:[e.jsx("h4",{className:"burn-rate-card-title",children:a("burnRate.title")}),e.jsxs("div",{className:"burn-rate-card-rows",children:[e.jsxs("div",{className:"burn-rate-row",children:[e.jsx("span",{className:"burn-rate-row-label",children:a("burnRate.today")}),e.jsx("span",{className:"burn-rate-row-value",children:ae(c.dailyRateToday)})]}),e.jsxs("div",{className:"burn-rate-row",children:[e.jsx("span",{className:"burn-rate-row-label",children:a("burnRate.sevenDayAvg")}),e.jsxs("span",{className:"burn-rate-row-value",children:[ae(c.dailyRate7d),e.jsx(Xe,{trend:c.trend})]})]}),e.jsxs("div",{className:"burn-rate-row",children:[e.jsx("span",{className:"burn-rate-row-label",children:a("burnRate.thirtyDayAvg")}),e.jsx("span",{className:"burn-rate-row-value",children:ae(c.dailyRate30d)})]}),e.jsx("div",{className:"burn-rate-divider"}),c.daysUntilExhaustion!==null&&e.jsxs("div",{className:"burn-rate-row",children:[e.jsx("span",{className:"burn-rate-row-label",children:a("burnRate.daysUntilExhaustion")}),e.jsx("span",{className:`burn-rate-row-value ${c.daysUntilExhaustion<=3?"burn-rate-row-value--danger":""}`,children:a("burnRate.daysCount",{count:c.daysUntilExhaustion})})]}),e.jsxs("div",{className:"burn-rate-row",children:[e.jsx("span",{className:"burn-rate-row-label",children:a("burnRate.projectedMonthly")}),e.jsx("span",{className:"burn-rate-row-value",children:ae(c.projectedMonthlySpend)})]})]})]})}function fe({spend:s,loading:a,error:t}){const{t:i}=O();if(a)return e.jsx("div",{className:"usage-chart-section",children:e.jsx("div",{children:i("instance.usage.loadingPlatformSpend")})});if(t)return e.jsx("div",{className:"usage-chart-section",children:e.jsx("div",{className:"error-message",role:"alert",children:t})});if(!s)return null;const o=s.budgetUsedPercent??0,d=o>90?"var(--color-danger)":o>70?"var(--color-warning)":"var(--color-primary)",l=r=>{const c=r??0;return c<.01?`$${c.toFixed(4)}`:`$${c.toFixed(2)}`};return e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.platformSpend")}),e.jsxs("div",{className:"usage-summary-grid",children:[e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:l(s.totalSpendUsd)}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.totalSpend")})]}),s.budgetLimitUsd!=null&&e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:l(s.budgetLimitUsd)}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.budgetLimit")})]})]}),s.budgetLimitUsd!=null&&e.jsxs("div",{style:{margin:"var(--spacing-md) 0"},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"var(--spacing-xs)",fontSize:"0.85rem",color:"var(--color-text-secondary)"},children:[e.jsx("span",{children:i("instance.usage.used",{amount:l(s.totalSpendUsd)})}),e.jsx("span",{children:i("instance.usage.limit",{amount:l(s.budgetLimitUsd)})})]}),e.jsx("div",{style:{height:"8px",background:"var(--color-surface)",borderRadius:"var(--radius-sm)",overflow:"hidden"},children:e.jsx("div",{style:{height:"100%",width:`${Math.min(o,100)}%`,background:d,borderRadius:"var(--radius-sm)",transition:"width 0.3s ease-out"}})})]}),Object.keys(s.spendByModel).length>0&&e.jsxs("table",{className:"usage-breakdown-table",style:{marginTop:"var(--spacing-md)"},children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:i("instance.usage.columns.model")}),e.jsx("th",{children:i("instance.usage.columns.spend")})]})}),e.jsx("tbody",{children:Object.entries(s.spendByModel).sort((r,c)=>c[1]-r[1]).map(([r,c])=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:r})}),e.jsx("td",{children:l(c)})]},r))})]})]})}function Ze({instanceId:s,instanceStatus:a,billingMode:t}){const{t:i}=O(),[o,d]=n.useState(null),[l,r]=n.useState(!0),[c,N]=n.useState(null),j=new Date().toISOString().split("T")[0],T=new Date(Date.now()-7*864e5).toISOString().split("T")[0],[y,m]=n.useState(T),[v,C]=n.useState(j),[h,u]=n.useState(null),[S,M]=n.useState(!1),[f,$]=n.useState(null);n.useEffect(()=>{t==="platform"&&(M(!0),k.get(`/usage/instances/${s}`).then(p=>u(p)).catch(p=>$(p instanceof Error?p.message:i("common.errors.failedToLoad"))).finally(()=>M(!1)))},[t,s]);const B=n.useCallback(async()=>{r(!0),N(null);try{const p=await ee(s,"sessions.usage",{startDate:y,endDate:v,limit:100});d(p)}catch(p){N(p instanceof Error?p.message:i("common.errors.failedToLoad"))}finally{r(!1)}},[s,y,v]);if(n.useEffect(()=>{a==="running"?B():r(!1)},[a,B]),a!=="running")return e.jsxs("div",{className:"usage-container",children:[t==="platform"&&e.jsx(fe,{spend:h,loading:S,error:f}),t==="platform"&&e.jsx(ge,{instanceId:s}),t==="byok"&&e.jsx("div",{className:"info-message",children:i("instance.usage.byokMessage")}),e.jsx("div",{className:"info-message",children:i("instance.usage.startRequired")})]});if(l)return e.jsx("div",{children:i("instance.usage.loading")});if(!o)return e.jsxs("div",{className:"usage-container",children:[e.jsx("h3",{children:i("instance.usage.title")}),c&&e.jsx("div",{className:"error-message",role:"alert",children:c}),e.jsx("div",{className:"info-message",children:i("instance.usage.noData")})]});const{totals:D,aggregates:L}=o,z=L?.daily||[],b=Math.max(...z.map(p=>p.tokens),1),E=Math.max(...z.map(p=>p.cost),.001),F=p=>p<.01?`$${p.toFixed(4)}`:`$${p.toFixed(2)}`,_=p=>{const G=p.split("-");return`${G[1]}/${G[2]}`};return e.jsxs("div",{className:"usage-container",children:[t==="platform"&&e.jsx(fe,{spend:h,loading:S,error:f}),t==="platform"&&e.jsx(ge,{instanceId:s}),t==="byok"&&e.jsx("div",{className:"info-message",style:{marginBottom:"var(--spacing-md)"},children:i("instance.usage.byokMessage")}),e.jsxs("div",{className:"sessions-header",children:[e.jsx("h3",{children:i("instance.usage.title")}),e.jsxs("div",{className:"usage-date-range",children:[e.jsx("input",{type:"date",value:y,onChange:p=>m(p.target.value)}),e.jsx("span",{children:i("instance.usage.dateRangeTo")}),e.jsx("input",{type:"date",value:v,onChange:p=>C(p.target.value)}),e.jsx("button",{onClick:B,children:i("common.buttons.refresh")})]})]}),c&&e.jsx("div",{className:"error-message",role:"alert",children:c}),e.jsxs("div",{className:"usage-summary-grid",children:[e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:D.totalTokens.toLocaleString()}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.totalTokens")})]}),e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:F(D.totalCost)}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.totalCost")})]}),e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:L?.messages?.total?.toLocaleString()||"0"}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.messages")})]}),e.jsxs("div",{className:"usage-stat-card",children:[e.jsx("span",{className:"usage-stat-value",children:L?.tools?.totalCalls?.toLocaleString()||"0"}),e.jsx("span",{className:"usage-stat-label",children:i("instance.usage.toolCalls")})]})]}),z.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.dailyTokens")}),e.jsx("div",{className:"usage-chart",children:z.map(p=>e.jsxs("div",{className:"usage-chart-bar-group",title:`${p.date}: ${p.tokens.toLocaleString()} tokens`,children:[e.jsx("div",{className:"usage-chart-bar",style:{height:`${p.tokens/b*180}px`}}),e.jsx("span",{className:"usage-chart-bar-label",children:_(p.date)})]},p.date))})]}),e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.dailyCost")}),e.jsx("div",{className:"usage-chart",children:z.map(p=>e.jsxs("div",{className:"usage-chart-bar-group",title:`${p.date}: ${F(p.cost)}`,children:[e.jsx("div",{className:"usage-chart-bar cost",style:{height:`${p.cost/E*180}px`}}),e.jsx("span",{className:"usage-chart-bar-label",children:_(p.date)})]},p.date))})]})]}),L?.byModel&&L.byModel.length>0&&e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.byModel")}),e.jsxs("table",{className:"usage-breakdown-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:i("instance.usage.columns.model")}),e.jsx("th",{children:i("instance.usage.columns.provider")}),e.jsx("th",{children:i("instance.usage.columns.requests")}),e.jsx("th",{children:i("instance.usage.columns.tokens")}),e.jsx("th",{children:i("instance.usage.columns.cost")})]})}),e.jsx("tbody",{children:L.byModel.map(p=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("strong",{children:p.model})}),e.jsx("td",{children:p.provider}),e.jsx("td",{children:p.count}),e.jsx("td",{children:p.totals.totalTokens.toLocaleString()}),e.jsx("td",{children:F(p.totals.totalCost)})]},`${p.provider}/${p.model}`))})]})]}),L?.tools?.tools&&L.tools.tools.length>0&&e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.topTools")}),e.jsxs("table",{className:"usage-breakdown-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:i("instance.usage.columns.tool")}),e.jsx("th",{children:i("instance.usage.columns.calls")})]})}),e.jsx("tbody",{children:L.tools.tools.slice(0,15).map(p=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("code",{children:p.name})}),e.jsx("td",{children:p.count})]},p.name))})]})]}),e.jsxs("div",{className:"usage-chart-section",children:[e.jsx("h4",{children:i("instance.usage.tokenBreakdown")}),e.jsxs("table",{className:"usage-breakdown-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:i("instance.usage.columns.category")}),e.jsx("th",{children:i("instance.usage.columns.tokens")}),e.jsx("th",{children:i("instance.usage.columns.cost")})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{children:[e.jsx("td",{children:i("instance.usage.tokenCategories.input")}),e.jsx("td",{children:D.input.toLocaleString()}),e.jsx("td",{children:F(D.inputCost)})]}),e.jsxs("tr",{children:[e.jsx("td",{children:i("instance.usage.tokenCategories.output")}),e.jsx("td",{children:D.output.toLocaleString()}),e.jsx("td",{children:F(D.outputCost)})]}),e.jsxs("tr",{children:[e.jsx("td",{children:i("instance.usage.tokenCategories.cacheRead")}),e.jsx("td",{children:D.cacheRead.toLocaleString()}),e.jsx("td",{children:F(D.cacheReadCost)})]}),e.jsxs("tr",{children:[e.jsx("td",{children:i("instance.usage.tokenCategories.cacheWrite")}),e.jsx("td",{children:D.cacheWrite.toLocaleString()}),e.jsx("td",{children:F(D.cacheWriteCost)})]})]})]})]})]})}function es(s,a=2){if(!+s)return"0 Bytes";const t=1024,i=a<0?0:a,o=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],d=Math.floor(Math.log(s)/Math.log(t));return`${parseFloat((s/Math.pow(t,d)).toFixed(i))} ${o[d]}`}function ss({instanceId:s,instanceStatus:a}){const{t}=O(),[i,o]=n.useState([]),[d,l]=n.useState(!1),[r,c]=n.useState(null),[N,j]=n.useState(null),[T,y]=n.useState(!1),m=n.useCallback(async()=>{if(a==="running"){l(!0),c(null);try{const h=await ee(s,"agents.files.list",{agentId:"main"});o((h?.files||[]).filter(u=>!u.missing))}catch(h){console.error("Failed to list files:",h),c(t("files.errors.listFailed"))}finally{l(!1)}}},[s,a,t]);n.useEffect(()=>{m()},[m]);const v=async h=>{y(!0);try{const u=await ee(s,"agents.files.get",{agentId:"main",name:h.name});j({name:h.name,content:u.file.content||""})}catch(u){console.error("Failed to read file:",u),alert(t("files.errors.readFailed"))}finally{y(!1)}},C=async h=>{try{const S=(await ee(s,"agents.files.get",{agentId:"main",name:h.name})).file.content||"",M=new Blob([S],{type:"text/plain"}),f=window.URL.createObjectURL(M),$=document.createElement("a");$.style.display="none",$.href=f,$.download=h.name,document.body.appendChild($),$.click(),window.URL.revokeObjectURL(f),document.body.removeChild($)}catch(u){console.error("Failed to download file:",u),alert(t("files.errors.readFailed"))}};return a!=="running"?e.jsx("div",{style:{padding:"2rem",textAlign:"center",color:"var(--color-text-secondary)"},children:e.jsx("p",{children:t("files.startRequired")})}):e.jsxs("div",{className:"files-tab",style:{padding:"1rem"},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1rem"},children:[e.jsx("h3",{style:{margin:0},children:t("instance.tabs.files")}),e.jsx("button",{onClick:m,disabled:d,style:{background:"var(--color-surface-hover)",border:"1px solid var(--color-border)",color:"var(--color-text)",padding:"0.5rem 1rem",borderRadius:"4px",cursor:d?"not-allowed":"pointer"},children:d?"...":t("files.refresh")})]}),r&&e.jsx("div",{style:{padding:"1rem",marginBottom:"1rem",background:"var(--color-error-bg)",color:"var(--color-error-text)",borderRadius:"4px"},children:r}),d&&i.length===0?e.jsx("div",{style:{padding:"2rem",textAlign:"center",color:"var(--color-text-secondary)"},children:"Loading..."}):i.length===0?e.jsx("div",{style:{padding:"2rem",textAlign:"center",color:"var(--color-text-secondary)"},children:t("files.emptyState")}):e.jsx("div",{style:{overflowX:"auto"},children:e.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.9rem"},children:[e.jsx("thead",{children:e.jsxs("tr",{style:{borderBottom:"1px solid var(--color-border)",textAlign:"left"},children:[e.jsx("th",{style:{padding:"0.75rem"},children:t("files.table.name")}),e.jsx("th",{style:{padding:"0.75rem"},children:t("files.table.size")}),e.jsx("th",{style:{padding:"0.75rem"},children:t("files.table.type")}),e.jsx("th",{style:{padding:"0.75rem"},children:t("files.table.modified")}),e.jsx("th",{style:{padding:"0.75rem",textAlign:"right"},children:t("files.table.actions")})]})}),e.jsx("tbody",{children:i.map(h=>e.jsxs("tr",{style:{borderBottom:"1px solid var(--color-border-subtle)"},children:[e.jsx("td",{style:{padding:"0.75rem"},children:h.name}),e.jsx("td",{style:{padding:"0.75rem",color:"var(--color-text-secondary)"},children:h.size!=null?es(h.size):"-"}),e.jsx("td",{style:{padding:"0.75rem",color:"var(--color-text-secondary)"},children:h.name.includes(".")?h.name.split(".").pop():"-"}),e.jsx("td",{style:{padding:"0.75rem",color:"var(--color-text-secondary)"},children:h.updatedAtMs?new Date(h.updatedAtMs).toLocaleDateString():"-"}),e.jsxs("td",{style:{padding:"0.75rem",textAlign:"right",display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[e.jsx("button",{onClick:()=>v(h),disabled:T,style:{background:"transparent",border:"1px solid var(--color-border)",color:"var(--color-primary)",padding:"0.25rem 0.5rem",borderRadius:"4px",fontSize:"0.8rem",cursor:"pointer"},children:t("files.actions.view")}),e.jsx("button",{onClick:()=>C(h),style:{background:"transparent",border:"1px solid var(--color-border)",color:"var(--color-text)",padding:"0.25rem 0.5rem",borderRadius:"4px",fontSize:"0.8rem",cursor:"pointer"},children:t("files.actions.download")})]})]},h.path))})]})}),N&&e.jsx("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"rgba(0, 0, 0, 0.8)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:1e3,padding:"2rem"},children:e.jsxs("div",{style:{background:"var(--color-surface)",borderRadius:"8px",maxWidth:"90vw",maxHeight:"90vh",display:"flex",flexDirection:"column",overflow:"hidden",boxShadow:"0 4px 24px rgba(0, 0, 0, 0.5)",width:"800px"},children:[e.jsxs("div",{style:{padding:"1rem",borderBottom:"1px solid var(--color-border)",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsx("h4",{style:{margin:0},children:N.name}),e.jsx("button",{onClick:()=>j(null),style:{background:"transparent",border:"none",color:"var(--color-text-secondary)",cursor:"pointer",fontSize:"1.2rem",lineHeight:1},children:"×"})]}),e.jsx("div",{style:{overflow:"auto",padding:"1rem",flex:1,display:"flex",justifyContent:"center"},children:e.jsx("pre",{style:{margin:0,fontFamily:"monospace",whiteSpace:"pre-wrap",wordBreak:"break-all",width:"100%"},children:N.content})})]})})]})}function xe(s){const a=new Date(s.requestedAt).getTime()+s.timeoutMs;return Math.max(0,a-Date.now())}function ts(s){return s.args?.length?`${s.command} ${s.args.join(" ")}`:s.command}function as({item:s,onApprove:a,onDeny:t}){const[i,o]=n.useState(()=>xe(s)),d=n.useRef(!1);n.useEffect(()=>{const c=setInterval(()=>{const N=xe(s);o(N),N<=0&&!d.current&&(d.current=!0,t(s.approvalId))},500);return()=>clearInterval(c)},[s,t]);const l=Math.ceil(i/1e3),r=l<=10;return e.jsxs("div",{className:"exec-approval-card",children:[e.jsx("div",{className:"exec-approval-header",children:e.jsx("span",{children:"⚠ Command Execution Request"})}),e.jsxs("div",{className:"exec-approval-command",children:["$ ",ts(s)]}),s.workDir&&e.jsxs("div",{className:"exec-approval-workdir",children:["in ",s.workDir]}),e.jsxs("div",{className:"exec-approval-footer",children:[e.jsx("span",{className:`exec-approval-timer${r?" exec-approval-timer--urgent":""}`,children:l>0?`Auto-deny in ${l}s`:"Expired"}),e.jsxs("div",{className:"exec-approval-actions",children:[e.jsx("button",{className:"exec-approval-btn exec-approval-btn--deny",onClick:()=>t(s.approvalId),children:"Deny"}),e.jsx("button",{className:"exec-approval-btn exec-approval-btn--approve",onClick:()=>a(s.approvalId),disabled:l<=0,children:"Approve"})]})]})]})}function ns({items:s,onApprove:a,onDeny:t}){const i=n.useCallback(d=>a(d),[a]),o=n.useCallback(d=>t(d),[t]);return s.length===0?null:e.jsx("div",{className:"exec-approval-overlay",children:s.map(d=>e.jsx(as,{item:d,onApprove:i,onDeny:o},d.approvalId))})}const rs=["critical","warning","info"],is=["security:prompt_injection","security:trust_violation","security:tool_abuse","security:credential_accessed","security:config_changed","security:suspicious_activity"];function ls(s){return s.metadata?.severity??"info"}function os(s){const a=new Date(s),i=new Date().getTime()-a.getTime(),o=Math.floor(i/6e4);if(o<1)return"just now";if(o<60)return`${o}m ago`;const d=Math.floor(o/60);return d<24?`${d}h ago`:a.toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function cs({instanceId:s}){const{t:a}=O(),[t,i]=n.useState([]),[o,d]=n.useState(0),[l,r]=n.useState(1),[c,N]=n.useState(1),[j,T]=n.useState(!0),[y,m]=n.useState(""),[v,C]=n.useState(""),h=n.useCallback(async()=>{T(!0);try{const u=new URLSearchParams({page:String(l),limit:"20"});y&&u.set("severity",y),v&&u.set("type",v);const S=await k.get(`/instances/${s}/security-events?${u}`);i(S.items),d(S.total),N(S.totalPages)}catch{i([])}finally{T(!1)}},[s,l,y,v]);return n.useEffect(()=>{h()},[h]),n.useEffect(()=>{r(1)},[y,v]),e.jsxs("div",{className:"security-timeline",children:[e.jsxs("div",{className:"security-timeline-header",children:[e.jsxs("h3",{children:[a("instance.security.timeline.title")," (",o,")"]}),e.jsxs("div",{className:"security-timeline-filters",children:[e.jsxs("select",{value:y,onChange:u=>m(u.target.value),children:[e.jsx("option",{value:"",children:a("instance.security.timeline.allSeverities")}),rs.map(u=>e.jsx("option",{value:u,children:a(`instance.security.severity.${u}`)},u))]}),e.jsxs("select",{value:v,onChange:u=>C(u.target.value),children:[e.jsx("option",{value:"",children:a("instance.security.timeline.allTypes")}),is.map(u=>e.jsx("option",{value:u,children:a(`instance.security.eventType.${u}`)},u))]})]})]}),j&&e.jsx("div",{children:a("common.labels.loading")}),!j&&t.length===0&&e.jsx("div",{className:"security-timeline-empty",children:a("instance.security.timeline.noEvents")}),!j&&t.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"security-event-list",children:t.map(u=>{const S=ls(u);return e.jsxs("div",{className:`security-event-item security-event-item--${S}`,children:[e.jsx("div",{className:`security-event-severity security-event-severity--${S}`}),e.jsxs("div",{className:"security-event-body",children:[e.jsx("div",{className:"security-event-type",children:a(`instance.security.eventType.${u.eventType}`,{defaultValue:u.eventType})}),e.jsx("div",{className:"security-event-time",children:os(u.createdAt)}),u.metadata&&Object.keys(u.metadata).filter(M=>M!=="severity").length>0&&e.jsx("div",{className:"security-event-meta",children:Object.entries(u.metadata).filter(([M])=>M!=="severity").map(([M,f])=>`${M}: ${typeof f=="object"?JSON.stringify(f):String(f)}`).join(" · ")})]})]},u.id)})}),c>1&&e.jsxs("div",{className:"security-timeline-pagination",children:[e.jsx("button",{disabled:l<=1,onClick:()=>r(u=>u-1),children:"«"}),e.jsx("span",{children:a("instance.security.timeline.page",{page:l,total:c})}),e.jsx("button",{disabled:l>=c,onClick:()=>r(u=>u+1),children:"»"})]})]})]})}function ds(s){const a=new Date(s),i=new Date().getTime()-a.getTime(),o=Math.floor(i/6e4);if(o<1)return"just now";if(o<60)return`${o}m ago`;const d=Math.floor(o/60);return d<24?`${d}h ago`:a.toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const us=["trustLayers","injectionDetection","outputFiltering","dlpScanning","configIntegrity"];function hs({instanceId:s}){const{t:a}=O(),[t,i]=n.useState(null),[o,d]=n.useState(!0);return n.useEffect(()=>{k.get(`/instances/${s}/security-summary`).then(i).catch(()=>i(null)).finally(()=>d(!1))},[s]),o?e.jsx("div",{className:"security-status",children:e.jsx("div",{children:a("common.labels.loading")})}):t?e.jsxs("div",{className:"security-status",children:[e.jsxs("div",{className:"security-status-card",children:[e.jsx("h4",{children:a("instance.security.status.events24h")}),e.jsxs("div",{className:"security-stats-grid",children:[e.jsxs("div",{className:"security-stat",children:[e.jsx("span",{className:"security-stat-value security-stat-value--total",children:t.totalEvents24h}),e.jsx("span",{className:"security-stat-label",children:a("instance.security.status.events24h")})]}),e.jsxs("div",{className:"security-stat",children:[e.jsx("span",{className:"security-stat-value security-stat-value--critical",children:t.bySeverity.critical??0}),e.jsx("span",{className:"security-stat-label",children:a("instance.security.status.criticalEvents")})]}),e.jsxs("div",{className:"security-stat",children:[e.jsx("span",{className:"security-stat-value security-stat-value--warning",children:t.bySeverity.warning??0}),e.jsx("span",{className:"security-stat-label",children:a("instance.security.status.warningEvents")})]}),e.jsxs("div",{className:"security-stat",children:[e.jsx("span",{className:"security-stat-value security-stat-value--info",children:t.bySeverity.info??0}),e.jsx("span",{className:"security-stat-label",children:a("instance.security.status.infoEvents")})]})]})]}),e.jsxs("div",{className:"security-status-card",children:[e.jsx("h4",{children:a("instance.security.status.protectionIndicators")}),e.jsx("div",{className:"security-protection-list",children:us.map(l=>{const r=t.protection[l],c=typeof r=="boolean"?r:!!r;return e.jsxs("div",{className:"security-protection-item",children:[e.jsx("span",{children:a(`instance.security.status.${l}`)}),e.jsx("span",{className:`security-protection-badge security-protection-badge--${c?"enabled":"disabled"}`,children:a(`instance.security.status.${c?"enabled":"disabled"}`)})]},l)})})]}),t.topEvents.length>0&&e.jsxs("div",{className:"security-status-card",children:[e.jsx("h4",{children:a("instance.security.status.recentEvents")}),e.jsx("div",{className:"security-event-list",children:t.topEvents.slice(0,3).map(l=>{const r=l.metadata?.severity??"info";return e.jsxs("div",{className:`security-event-item security-event-item--${r}`,children:[e.jsx("div",{className:`security-event-severity security-event-severity--${r}`}),e.jsxs("div",{className:"security-event-body",children:[e.jsx("div",{className:"security-event-type",children:a(`instance.security.eventType.${l.eventType}`,{defaultValue:l.eventType})}),e.jsx("div",{className:"security-event-time",children:ds(l.createdAt)})]})]},l.id)})})]})]}):null}const ms=new Set(["agent-management","snapshots","security","logs","events"]),ps={"agent-management":"instance.tabs.agentManagement",snapshots:"instance.tabs.snapshots",security:"instance.tabs.security",logs:"instance.tabs.logs",events:"instance.tabs.events"};function Ss(){const{id:s}=be(),a=oe(),{t}=O(),{subscribe:i,unsubscribe:o,addHandler:d,removeHandler:l}=ve(),[r,c]=n.useState(null),[N,j]=n.useState(!0),[T,y]=n.useState(null),[m,v]=n.useState("chat"),{agentTypes:C}=$e(),[h,u]=n.useState(!1),S=n.useRef(null),M=n.useCallback(async()=>{if(s)try{const g=await k.get(`/instances/${s}`);c(g)}catch(g){y(g instanceof Error?g.message:t("common.errors.failedToLoad"))}finally{j(!1)}},[s,t]);n.useEffect(()=>{M()},[M]),n.useEffect(()=>{if(s)return i(s),()=>o(s)},[s,i,o]);const f=n.useCallback(g=>{if(g.instanceId===s&&g.type==="instance:status"){const R=g.payload.status,A=g.payload.statusMessage??null;c(V=>V?{...V,status:R,statusMessage:A}:null)}},[s]);n.useEffect(()=>(d("instance:status",f),()=>l("instance:status",f)),[d,l,f]),n.useEffect(()=>{if(r?.status!=="starting")return;const g=setInterval(M,5e3);return()=>clearInterval(g)},[r?.status,M]);const[$,B]=n.useState([]),D=n.useCallback(g=>{if(g.instanceId!==s)return;const R=g.payload;typeof R.approvalId!="string"||!R.approvalId||B(A=>A.some(V=>V.approvalId===R.approvalId)?A:[...A,R])},[s]),L=n.useCallback(g=>{if(g.instanceId!==s)return;const R=g.payload.approvalId;B(A=>A.filter(V=>V.approvalId!==R))},[s]);n.useEffect(()=>(d("instance:exec_approval_request",D),d("instance:exec_approval_resolved",L),()=>{l("instance:exec_approval_request",D),l("instance:exec_approval_resolved",L)}),[d,l,D,L]),n.useEffect(()=>{if(!s||r?.status!=="running"){B([]);return}k.get(`/instances/${s}/exec-approval/pending`).then(g=>B(g)).catch(()=>{})},[s,r?.status]);const z=n.useCallback(async g=>{if(!s)return;const R=$.find(A=>A.approvalId===g);B(A=>A.filter(V=>V.approvalId!==g));try{await k.post(`/instances/${s}/exec-approval`,{approvalId:g,approved:!0})}catch{R&&B(A=>[...A,R])}},[s,$]),b=n.useCallback(async g=>{if(!s)return;const R=$.find(A=>A.approvalId===g);B(A=>A.filter(V=>V.approvalId!==g));try{await k.post(`/instances/${s}/exec-approval`,{approvalId:g,approved:!1})}catch{R&&B(A=>[...A,R])}},[s,$]),[E,F]=n.useState([]),_=n.useCallback(g=>{if(g.instanceId!==s)return;if(g.payload.severity==="critical"){const A=g.payload.category??"security_event",V=`${Date.now()}-${Math.random()}`;F(Y=>[...Y,{id:V,message:A}]),setTimeout(()=>{F(Y=>Y.filter(X=>X.id!==V))},6e3)}},[s]);n.useEffect(()=>(d("security_event",_),()=>l("security_event",_)),[d,l,_]),n.useEffect(()=>{const g=R=>{S.current&&!S.current.contains(R.target)&&u(!1)};return h&&document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[h]);const[p,G]=n.useState(null),[H,I]=n.useState(!1),J=async()=>{if(s){I(!0);try{const g=await k.post(`/instances/${s}/clone`,{});a(`/instances/${g.id}`)}catch(g){y(g instanceof Error?g.message:t("common.errors.actionFailed"))}finally{I(!1)}}},K=async g=>{if(s){y(null),G(g),g==="start"||g==="restart"?c(R=>R?{...R,status:"starting",statusMessage:null}:null):g==="stop"&&c(R=>R?{...R,status:"stopping",statusMessage:null}:null);try{const R=await k.post(`/instances/${s}/${g}`,{});c(R)}catch(R){y(R instanceof Error?R.message:t("common.errors.actionFailed")),M()}finally{G(null)}}};if(N)return e.jsx("div",{className:"instance-page",children:t("instance.loading")});if(!r)return e.jsx("div",{className:"instance-page",children:t("instance.notFound")});const w=r.status==="starting"||r.status==="stopping";return e.jsxs("main",{className:"instance-page",children:[e.jsx("header",{className:"instance-header",children:e.jsxs("div",{children:[e.jsx(Ne,{to:"/dashboard",className:"back-link",children:t("instance.backToDashboard")}),e.jsx("h1",{children:r.name})]})}),T&&e.jsx("div",{className:"error-message",role:"alert",children:T}),e.jsxs("div",{className:"instance-status-bar",children:[t("instance.statusBar.status")," ",w&&e.jsx("span",{className:"spinner"})," ",e.jsx("span",{className:`status-${r.status}`,children:t(`common.status.${r.status}`)}),r.status==="starting"&&r.statusMessage&&e.jsxs("span",{className:"status-message",children:[" — ",r.statusMessage]}),e.jsx("span",{className:"separator",children:"|"}),t("instance.statusBar.type",{type:r.agentType}),e.jsx("span",{className:"separator",children:"|"}),t("instance.statusBar.image",{tag:r.imageTag}),e.jsx("span",{className:"separator",children:"|"}),t("instance.statusBar.target",{target:r.deploymentTarget})]}),e.jsxs("div",{className:"tabs",children:[e.jsx("button",{className:m==="chat"?"active":"",onClick:()=>v("chat"),children:t("instance.tabs.chat")}),e.jsx("button",{className:m==="overview"?"active":"",onClick:()=>v("overview"),children:t("instance.tabs.overview")}),e.jsx("button",{className:m==="ai"?"active":"",onClick:()=>v("ai"),children:"AI"}),e.jsx("button",{className:m==="usage"?"active":"",onClick:()=>v("usage"),children:t("instance.tabs.usage")}),e.jsx("button",{className:m==="files"?"active":"",onClick:()=>v("files"),children:t("instance.tabs.files")}),ms.has(m)&&e.jsx("button",{className:"active",onClick:()=>v(m),children:t(ps[m])}),e.jsxs("div",{className:"tabs-more",ref:S,children:[e.jsxs("button",{className:h?"active":"",onClick:()=>u(g=>!g),children:[t("instance.tabs.more")," ▾"]}),h&&e.jsxs("div",{className:"tabs-more-menu",children:[e.jsx("button",{onClick:()=>{v("agent-management"),u(!1)},children:t("instance.tabs.agentManagement")}),e.jsx("button",{onClick:()=>{v("snapshots"),u(!1)},children:t("instance.tabs.snapshots")}),e.jsx("button",{onClick:()=>{v("security"),u(!1)},children:t("instance.tabs.security")}),e.jsx("button",{onClick:()=>{v("logs"),u(!1)},children:t("instance.tabs.logs")}),e.jsx("button",{onClick:()=>{v("events"),u(!1)},children:t("instance.tabs.events")})]})]})]}),e.jsxs("div",{className:"tab-content",children:[m==="overview"&&e.jsx(Pe,{instance:r,onInstanceUpdate:M,onLifecycle:K,actionInProgress:p,onClone:J,cloning:H}),m==="ai"&&e.jsx(Fe,{instance:r,agentType:C.find(g=>g.id===r.agentType)??null,onInstanceUpdate:M}),m==="chat"&&e.jsx(we,{instanceId:r.id,instanceStatus:r.status}),m==="agent-management"&&e.jsx(Me,{instance:r,agentType:C.find(g=>g.id===r.agentType)??null}),m==="usage"&&e.jsx(Ze,{instanceId:r.id,instanceStatus:r.status,billingMode:r.billingMode}),m==="files"&&e.jsx(ss,{instanceId:r.id,instanceStatus:r.status}),m==="logs"&&e.jsx(Je,{instanceId:r.id,instanceStatus:r.status}),m==="events"&&e.jsx(Ye,{instanceId:r.id}),m==="snapshots"&&e.jsx(_e,{instanceId:r.id,instanceStatus:r.status}),m==="security"&&e.jsxs("div",{className:"security-tab",children:[e.jsx(cs,{instanceId:r.id}),e.jsx(hs,{instanceId:r.id})]})]}),e.jsx(ns,{items:$,onApprove:z,onDeny:b}),E.length>0&&e.jsx("div",{className:"security-toast",children:E.map(g=>e.jsxs("div",{className:"security-toast-item",children:["⚠ ",g.message]},g.id))})]})}export{Ss as InstancePage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.exec-approval-overlay{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column-reverse;gap:10px;max-height:calc(100vh - 40px);overflow-y:auto;pointer-events:none}.exec-approval-card{pointer-events:auto;background:var(--color-surface);border:1px solid var(--color-warning);border-left:4px solid var(--color-warning);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:16px;width:380px;max-width:calc(100vw - 40px);animation:exec-approval-slide-in .2s ease-out}@keyframes exec-approval-slide-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.exec-approval-header{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-weight:600;font-size:13px;color:var(--color-warning)}.exec-approval-command{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:8px 10px;font-family:var(--font-mono);font-size:12px;color:var(--color-text);word-break:break-all;white-space:pre-wrap;margin-bottom:6px}.exec-approval-workdir{font-size:11px;color:var(--color-text-secondary);margin-bottom:10px}.exec-approval-footer{display:flex;align-items:center;justify-content:space-between}.exec-approval-timer{font-size:12px;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.exec-approval-timer--urgent{color:var(--color-error, #ef4444);font-weight:600}.exec-approval-actions{display:flex;gap:8px}.exec-approval-btn{padding:5px 14px;border-radius:var(--radius-sm);font-size:12px;font-weight:500;cursor:pointer;border:1px solid var(--color-border);transition:background .15s,border-color .15s}.exec-approval-btn--deny{background:var(--color-surface);color:var(--color-text)}.exec-approval-btn--deny:hover{background:var(--color-bg)}.exec-approval-btn--approve{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.exec-approval-btn--approve:hover{background:var(--color-primary-dark);border-color:var(--color-primary-dark)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.my-assistants-page{padding:var(--spacing-xl) var(--spacing-2xl);max-width:1280px;margin:0 auto}.my-assistants-page__header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:32px}.my-assistants-page__title{font-size:1.5rem;font-weight:700;color:var(--color-text);margin:0;line-height:1.3}.my-assistants-page__subtitle{font-size:.875rem;color:var(--color-text-secondary);margin:6px 0 0}.my-assistants-page__create{display:inline-flex;align-items:center;gap:6px;padding:10px 24px;font-size:.875rem;font-weight:600;color:#fff;background:#2563eb;border:none;border-radius:var(--radius-full);cursor:pointer;transition:background .15s ease;white-space:nowrap}.my-assistants-page__create:hover{background:#1d4ed8}.my-assistants-page__list{display:flex;flex-direction:column;gap:16px}.my-assistants-page__empty-banner{display:flex;align-items:center;justify-content:space-between;background:var(--dashboard-cta-gradient);color:var(--dashboard-cta-text);border-radius:var(--radius-lg);padding:var(--spacing-xl) var(--spacing-2xl)}.my-assistants-page__empty-content{display:flex;align-items:center;gap:var(--spacing-md)}.my-assistants-page__empty-icon{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--radius-md);background:#ffffff26;flex-shrink:0}.my-assistants-page__empty-text{display:flex;flex-direction:column;gap:2px}.my-assistants-page__empty-text h3{margin:0;font-size:1.15rem;font-weight:700;letter-spacing:-.01em}.my-assistants-page__empty-text p{margin:0;font-size:.88rem;opacity:.85}.my-assistants-page__empty-btn{display:flex;align-items:center;gap:var(--spacing-sm);padding:10px 24px;background:#fff;color:#0052ff;border:2px solid rgba(255,255,255,.8);border-radius:var(--radius-md);font-weight:700;font-size:.9rem;cursor:pointer;transition:background var(--transition-fast);white-space:nowrap;font-family:var(--font-sans)}.my-assistants-page__empty-btn:hover{background:#f0f4ff}.my-assistants-page__loading{display:flex;align-items:center;justify-content:center;min-height:200px;color:var(--color-text-secondary)}.my-assistants-page__list .assistant-card{display:flex;flex-direction:row;align-items:center;gap:20px;padding:20px 24px;min-height:92px;box-sizing:border-box;background:var(--assistant-card-bg);border:1px solid var(--assistant-card-border);border-radius:12px}.assistant-card__icon{display:flex;align-items:center;justify-content:center;width:48px;height:48px;min-width:48px;border-radius:10px;background:var(--assistant-card-icon-bg);color:var(--assistant-card-icon-color)}.assistant-card__info{flex:1;min-width:0}.assistant-card__primary{display:flex;align-items:center;gap:10px}.assistant-card__name{font-size:.9375rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assistant-card__version{font-size:.8125rem;color:var(--assistant-card-meta-color);font-weight:400}.assistant-card__meta{display:flex;align-items:center;gap:16px;margin-top:4px}.assistant-card__meta-item{display:inline-flex;align-items:center;gap:4px;font-size:.8125rem;color:var(--assistant-card-meta-color)}.assistant-card__actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.assistant-card__action{display:inline-flex;align-items:center;gap:5px;padding:7px 16px;font-size:.8125rem;font-weight:500;color:var(--color-text);background:transparent;border:1px solid var(--assistant-action-border);border-radius:var(--radius-full);cursor:pointer;transition:background .15s ease,border-color .15s ease;white-space:nowrap}.assistant-card__action:hover:not(:disabled){background:var(--assistant-action-hover-bg);border-color:var(--color-text-secondary)}.assistant-card__action:disabled{opacity:.45;cursor:not-allowed}.assistant-card__action--primary{color:var(--assistant-action-primary);border-color:var(--assistant-action-primary)}.assistant-card__action--primary:hover:not(:disabled){background:#2563eb0f;border-color:var(--assistant-action-primary)}.assistant-card__action--danger{color:var(--assistant-action-danger);border-color:var(--assistant-action-danger)}.assistant-card__action--danger:hover:not(:disabled){background:#ef44440f;border-color:var(--assistant-action-danger)}.assistant-card__action--success{color:var(--assistant-action-success);border-color:var(--assistant-action-success)}.assistant-card__action--success:hover:not(:disabled){background:#0596690f;border-color:var(--assistant-action-success)}.achat-page{display:flex;flex-direction:column;height:100dvh;max-width:1280px;margin:0 auto;min-height:0;overflow:hidden;position:relative}.achat-topbar{display:flex;align-items:center;gap:12px;padding:12px 24px;background:var(--achat-topbar-bg);border-bottom:1px solid var(--achat-topbar-border);flex-shrink:0;position:relative}.achat-drawer-toggle{position:absolute;left:12px;top:100%;z-index:20;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--color-border);background:var(--color-card-bg);color:var(--color-text-secondary);border-radius:0 0 var(--radius-md) var(--radius-md);border-top:none;cursor:pointer;padding:0;box-shadow:var(--shadow-sm);transform:none;font-weight:400;transition:left .2s ease,background .15s,color .15s}.achat-drawer-toggle--shifted{left:272px}.achat-drawer-toggle:hover{background:var(--color-surface);color:var(--color-text);transform:none;box-shadow:var(--shadow-sm)}.achat-topbar__back,.achat-input-bar__icon{display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-text-secondary);border-radius:var(--radius-md);cursor:pointer;flex-shrink:0;padding:0;box-shadow:none;transform:none;font-weight:400}.achat-topbar__back:hover,.achat-input-bar__icon:hover:not(:disabled){background:var(--color-surface);color:var(--color-text);transform:none;box-shadow:none}.achat-topbar__avatar{display:flex;align-items:center;justify-content:center;width:40px;height:40px;min-width:40px;border-radius:10px;background:var(--achat-avatar-bg);color:#fff;flex-shrink:0}.achat-topbar__info{display:flex;flex-direction:column;flex:1;min-width:0}.achat-topbar__name{font-size:.9375rem;font-weight:600;color:var(--color-text);line-height:1.3}.achat-topbar__status{display:flex;align-items:center;gap:5px;font-size:.8125rem;color:var(--color-text-secondary)}.achat-topbar__dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--achat-status-dot)}.achat-topbar__back{width:36px;height:36px}.achat-messages{flex:1;overflow-y:auto;padding:24px 32px;display:flex;flex-direction:column;gap:16px}.achat-scroll-bottom-btn{position:absolute;right:32px;bottom:100px;width:36px;height:36px;border-radius:var(--radius-full);background:var(--color-card-bg);border:1px solid var(--color-border);color:var(--color-text-secondary);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:var(--shadow-md);z-index:10;padding:0;transform:none;transition:opacity var(--transition-fast),background var(--transition-fast);animation:achat-fade-in .15s ease}.achat-scroll-bottom-btn:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary);transform:none;box-shadow:var(--shadow-md)}@keyframes achat-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.achat-not-running{margin:auto;color:var(--color-text-secondary);font-size:.9rem;text-align:center;padding:40px 20px}.achat-msg{display:flex;flex-direction:column;max-width:75%}.achat-msg--agent{align-self:flex-start;align-items:flex-start}.achat-msg--user{align-self:flex-end;align-items:flex-end}.achat-msg__row{display:flex;align-items:flex-start;gap:12px}.achat-msg__avatar{display:flex;align-items:center;justify-content:center;width:32px;height:32px;min-width:32px;border-radius:8px;background:var(--achat-avatar-bg);color:#fff;flex-shrink:0;margin-top:2px}.achat-msg__bubble{border-radius:12px;padding:14px 18px;font-size:.9rem;line-height:1.6}.achat-msg--agent .achat-msg__bubble{background:var(--achat-msg-agent-bg);border:1px solid var(--achat-msg-agent-border);color:var(--color-text)}.achat-msg--agent .achat-msg__bubble .chat-message-content{white-space:normal}.achat-msg__bubble--streaming{border-style:dashed;border-color:var(--color-primary)}.achat-msg--user .achat-msg__bubble{background:var(--achat-msg-user-bg);color:var(--achat-msg-user-color);border:1px solid rgba(37,99,235,.12)}.achat-msg--user .achat-msg__bubble .chat-message-content{white-space:normal}.achat-msg__time{font-size:.75rem;color:var(--color-text-secondary);margin-top:6px}.achat-msg__time--left{padding-left:44px}.achat-msg__time--right{text-align:right}.achat-msg--system{align-self:center;align-items:center;max-width:85%}.achat-msg__system-bubble{font-size:.8125rem;color:var(--color-danger);background:#ef44440f;border:1px solid rgba(239,68,68,.15);border-radius:var(--radius-full);padding:6px 16px;text-align:center}.achat-suggestions{padding:8px 32px 0;flex-shrink:0}.achat-suggestions__label{display:flex;align-items:center;gap:6px;font-size:.8125rem;color:var(--color-text-secondary);margin-bottom:10px}.achat-suggestions__list{display:flex;gap:8px;flex-wrap:wrap}.achat-suggestions__item{padding:8px 16px;font-size:.8125rem;font-weight:400;color:var(--color-text);background:var(--achat-suggestion-bg);border:1px solid var(--achat-suggestion-border);border-radius:var(--radius-full);cursor:pointer;transition:background .15s ease;white-space:nowrap;box-shadow:none;transform:none}.achat-suggestions__item:hover{background:var(--achat-suggestion-hover-bg);transform:none;box-shadow:none}.achat-input-bar{padding:12px 32px 16px;flex-shrink:0}.achat-input-bar__row{display:flex;align-items:flex-end;gap:8px;padding:8px 12px;background:var(--achat-input-bg);border:1px solid var(--achat-input-border);border-radius:12px}.achat-input-bar__icon{width:36px;height:36px}.achat-input-bar__icon:disabled{opacity:.4;cursor:not-allowed}.achat-input-bar__textarea{flex:1;border:none;background:transparent;color:var(--color-text);font-family:inherit;font-size:.9rem;line-height:1.5;resize:none;min-height:36px;max-height:160px;padding:6px 0;outline:none;overflow-y:auto}.achat-input-bar__textarea::placeholder{color:var(--color-text-secondary)}.achat-input-bar__send{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:var(--achat-avatar-bg);color:#fff;border-radius:var(--radius-md);cursor:pointer;flex-shrink:0;padding:0;box-shadow:none;transform:none;transition:opacity .15s ease}.achat-input-bar__send:hover{transform:none;box-shadow:none;background:var(--achat-avatar-bg)}.achat-input-bar__send:disabled{opacity:.4;cursor:not-allowed;transform:none}.achat-input-bar__send--stop{background:var(--color-danger)}.achat-stop-icon{display:block;width:12px;height:12px;background:#fff;border-radius:2px}.achat-disclaimer{text-align:center;font-size:.75rem;color:var(--achat-disclaimer-color);margin-top:8px}.achat-loading{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-secondary)}.achat-new-chat-btn,.achat-settings-btn{background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;color:var(--color-text-secondary);font-size:.8rem;font-family:var(--font-sans);padding:.25em .6em;transition:color .15s,border-color .15s;white-space:nowrap}.achat-new-chat-btn:hover,.achat-settings-btn:hover{color:var(--color-text);border-color:var(--color-text-secondary)}.achat-new-chat-btn:disabled{opacity:.4;cursor:not-allowed}.achat-settings-panel{display:flex;flex-direction:column;gap:var(--space-3, 12px);padding:var(--space-4, 16px);border-bottom:1px solid var(--color-border);background:var(--color-surface)}.achat-settings-field{display:flex;flex-direction:column;gap:var(--space-1, 4px)}.achat-settings-field label{font-size:.8rem;font-weight:600;color:var(--color-text-secondary)}.achat-settings-field input,.achat-settings-field select{padding:.35em .5em;font-size:.85rem;font-family:var(--font-sans);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text);outline:none;transition:border-color .15s}.achat-settings-field input:focus,.achat-settings-field select:focus{border-color:var(--color-primary)}.achat-settings-actions{display:flex;gap:var(--space-2, 8px);align-items:center}.achat-settings-actions button{background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;color:var(--color-text-secondary);font-size:.8rem;font-family:var(--font-sans);padding:.3em .75em;transition:color .15s,border-color .15s}.achat-settings-actions button:hover{color:var(--color-text);border-color:var(--color-text-secondary)}.achat-settings-save-btn{background:var(--color-primary)!important;color:#fff!important;border-color:var(--color-primary)!important}.achat-settings-save-btn:hover{opacity:.9}.achat-settings-save-btn:disabled{opacity:.5;cursor:not-allowed}.achat-msg{position:relative}.achat-msg-copy-btn{position:absolute;top:.4em;right:.4em;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;opacity:0;transition:opacity .2s;color:var(--color-text-secondary);z-index:1}.achat-msg:hover .achat-msg-copy-btn{opacity:1}.achat-msg-copy-btn:active{opacity:.7}.aep-page{min-height:100%;background:var(--color-bg);padding:var(--space-6) var(--space-8);position:relative}.aep-page--loading{display:flex;align-items:center;justify-content:center}.aep-loading-text{color:var(--color-text-secondary);font-size:.9375rem}.aep-content{max-width:840px;margin:0 auto;display:flex;flex-direction:column;gap:var(--space-6)}.aep-back-btn{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-2);background:none;border:none;cursor:pointer;color:var(--color-text-secondary);font-size:.875rem;font-family:var(--font-sans);padding:var(--space-1) 0;transition:color .15s ease}.aep-back-btn:hover{color:var(--color-primary);background:#0052ff14;transform:none;box-shadow:none}.aep-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-6)}.aep-header-text{display:flex;flex-direction:column;gap:var(--space-2)}.aep-title{font-size:1.875rem;font-weight:700;color:var(--color-text);margin:0;font-family:var(--font-sans);line-height:1.2}.aep-subtitle{font-size:.9375rem;color:var(--color-text-secondary);margin:0;font-family:var(--font-sans);line-height:1.5}.aep-subtitle-name{color:var(--color-primary);font-weight:600}.aep-save-btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-radius:var(--radius-sm);border:none;cursor:pointer;font-size:.9375rem;font-family:var(--font-sans);font-weight:500;background:var(--color-primary);color:#fff;white-space:nowrap;flex-shrink:0;transition:opacity .15s ease,background .15s ease}.aep-save-btn:hover:not(:disabled){opacity:.88}.aep-save-btn:disabled{opacity:.6;cursor:not-allowed}.aep-save-btn--saving{opacity:.7}.aep-save-btn--saved{background:var(--color-success, #22c55e)}.aep-save-btn--error{background:var(--color-error, #ef4444)}.aep-alert{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);font-size:.875rem;font-family:var(--font-sans)}.aep-alert--warning{background:color-mix(in srgb,#f59e0b 12%,transparent);color:#92400e;border:1px solid color-mix(in srgb,#f59e0b 30%,transparent)}[data-theme=dark] .aep-alert--warning{color:#fcd34d;border-color:color-mix(in srgb,#f59e0b 20%,transparent)}.aep-alert--error{background:color-mix(in srgb,#ef4444 12%,transparent);color:#991b1b;border:1px solid color-mix(in srgb,#ef4444 30%,transparent)}[data-theme=dark] .aep-alert--error{color:#fca5a5;border-color:color-mix(in srgb,#ef4444 20%,transparent)}.aep-sections{display:flex;flex-direction:column;gap:var(--space-8)}.aep-section{display:flex;flex-direction:column;gap:var(--space-4)}.aep-section-header{display:flex;align-items:center;gap:var(--space-3)}.aep-section-icon{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}.aep-section-icon--name{background:color-mix(in srgb,var(--color-primary) 12%,transparent);color:var(--color-primary)}.aep-section-icon--principles,.aep-section-icon--identity{background:color-mix(in srgb,#0ea5e9 12%,transparent);color:#0ea5e9}.aep-section-title{font-size:1rem;font-weight:600;color:var(--color-text);margin:0;font-family:var(--font-sans)}.aep-input,.aep-textarea{width:100%;box-sizing:border-box;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4) var(--space-5);font-size:.9375rem;font-family:var(--font-sans);color:var(--color-text);outline:none;transition:border-color .15s ease,box-shadow .15s ease;resize:none}.aep-input:focus,.aep-textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-primary) 15%,transparent)}.aep-input::placeholder,.aep-textarea::placeholder{color:var(--color-text-secondary);opacity:.6}.aep-textarea{line-height:1.6;resize:vertical}.aep-help-btn{position:fixed;bottom:var(--space-8);right:var(--space-8);width:40px;height:40px;border-radius:50%;border:1.5px solid var(--color-border);background:var(--color-surface);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);font-size:1rem;font-weight:600;font-family:var(--font-sans);box-shadow:var(--shadow-md);transition:border-color .15s ease,color .15s ease}.aep-help-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.aver-page{padding:var(--spacing-xl) var(--spacing-2xl);max-width:1280px;margin:0 auto}.aver-back{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-2);padding:var(--space-1) 0;border:none;background:none;color:var(--color-text-secondary);font-size:.875rem;font-family:var(--font-sans);font-weight:400;cursor:pointer;margin-bottom:var(--space-5);transition:color .15s ease}.aver-back:hover{color:var(--color-primary);background:#0052ff14;transform:none;box-shadow:none}.aver-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:32px}.aver-header__title{font-size:1.5rem;font-weight:700;color:var(--color-text);margin:0;line-height:1.3}.aver-header__subtitle{font-size:.9rem;color:var(--aver-meta-color);margin:8px 0 0}.aver-header__subtitle strong{color:var(--color-text);font-weight:600}.aver-header__actions{display:flex;gap:10px;flex-shrink:0}.aver-header__btn{display:inline-flex;align-items:center;gap:6px;padding:10px 22px;font-size:.875rem;font-weight:600;color:var(--color-text);background:transparent;border:1px solid var(--color-border);border-radius:8px;cursor:pointer;box-shadow:none;transform:none;white-space:nowrap}.aver-header__btn:hover{background:var(--color-surface);transform:none;box-shadow:none}.aver-header__btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.aver-header__btn--primary{background:#2563eb;color:#fff;border-color:#2563eb}.aver-header__btn--primary:hover{background:#1d4ed8;border-color:#1d4ed8}.aver-error{font-size:.85rem;color:var(--color-danger);margin-bottom:16px}.aver-list{display:flex;flex-direction:column;gap:16px}.aver-card{background:var(--aver-card-bg);border:1px solid var(--aver-card-border);border-radius:12px;padding:24px 28px}.aver-card--current{border-color:color-mix(in srgb,var(--aver-card-current-border) 40%,transparent)}.aver-card__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.aver-card__version-row{display:flex;align-items:center;gap:12px}.aver-card__version{font-size:1.25rem;font-weight:700;color:var(--color-text)}.aver-card__badge{font-size:.75rem;font-weight:600;padding:3px 12px;border-radius:var(--radius-full);background:var(--aver-badge-bg);color:var(--aver-badge-color)}.aver-card__date{display:inline-flex;align-items:center;gap:5px;font-size:.8125rem;color:var(--aver-meta-color)}.aver-card__desc{font-size:.9rem;color:var(--color-text);margin:0 0 16px;line-height:1.5}.aver-card__changes{display:flex;flex-direction:column;gap:10px}.aver-card__change-row{display:flex;align-items:center;gap:14px;font-size:.8125rem}.aver-card__change-label{color:var(--aver-meta-color);min-width:80px;flex-shrink:0}.aver-card__change-old{color:var(--aver-diff-old-color);background:var(--aver-diff-old-bg);padding:3px 12px;border-radius:var(--radius-full);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.aver-card__change-arrow{color:var(--aver-meta-color);font-size:1.1rem;flex-shrink:0}.aver-card__change-new{color:var(--aver-diff-new-color);background:var(--aver-diff-new-bg);padding:3px 12px;border-radius:var(--radius-full);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}.aver-card__footer{display:flex;justify-content:flex-end;margin-top:16px}.aver-card__restore{display:inline-flex;align-items:center;gap:6px;padding:7px 18px;font-size:.8125rem;font-weight:500;color:var(--aver-badge-color);background:transparent;border:1px solid var(--aver-badge-color);border-radius:var(--radius-full);cursor:pointer;box-shadow:none;transform:none}.aver-card__restore:hover{background:#2563eb0f;transform:none;box-shadow:none}.aver-card__restore:disabled{opacity:.45;cursor:not-allowed;transform:none}.aver-empty{text-align:center;color:var(--aver-meta-color);padding:60px 20px;font-size:.9rem}.aver-loading{display:flex;align-items:center;justify-content:center;min-height:200px;color:var(--color-text-secondary)}.aver-diff-panel{margin-top:8px}.aver-diff-list{display:flex;flex-direction:column;gap:8px}.aver-diff-entry{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--aver-card-bg);border:1px solid var(--aver-card-border);border-radius:8px;font-size:.85rem}.aver-diff-entry__file{font-family:var(--font-mono);color:var(--color-text)}.aver-diff-entry__type{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:var(--radius-full)}.aver-diff-entry__type--modified{color:var(--aver-badge-color);background:var(--aver-badge-bg)}.aver-diff-entry__type--added{color:var(--aver-diff-new-color);background:var(--aver-diff-new-bg)}.aver-diff-entry__type--removed{color:var(--aver-diff-old-color);background:var(--aver-diff-old-bg)}.aep-danger-zone{margin-top:var(--spacing-2xl);padding:var(--spacing-lg);border:1px solid var(--color-danger);border-radius:var(--radius-md);background:var(--color-danger-bg, rgba(239, 68, 68, .05))}.aep-danger-zone-title{margin:0 0 var(--spacing-sm);font-size:1rem;font-weight:600;color:var(--color-danger)}.aep-danger-zone-desc{margin:0 0 var(--spacing-md);font-size:.875rem;color:var(--color-text-secondary)}.aep-modal-desc{color:var(--color-text-secondary);margin:var(--spacing-sm) 0 var(--spacing-md)}.aep-modal-warning{color:var(--color-danger);font-size:.9rem;margin-bottom:var(--spacing-lg);padding:var(--spacing-sm) var(--spacing-md);background:var(--color-danger-bg, rgba(239, 68, 68, .05));border-radius:var(--radius-sm)}.aep-modal-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end}.achat-error-banner{align-self:center;width:85%;max-width:600px;padding:var(--spacing-md);background:var(--color-bg-secondary);border:1px solid rgba(239,68,68,.2);border-left:3px solid var(--color-danger);border-radius:var(--radius-md);position:relative;animation:achat-error-slide-in .2s ease-out}.achat-error-banner__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-xs)}.achat-error-banner__title{font-weight:600;font-size:.8125rem;color:var(--color-danger);display:flex;align-items:center;gap:6px}.achat-error-banner__dismiss{background:none;border:none;color:var(--color-text-tertiary);cursor:pointer;padding:2px 6px;font-size:.875rem;opacity:.7;line-height:1}.achat-error-banner__dismiss:hover{opacity:1;color:var(--color-text)}.achat-error-banner__body{font-size:.8125rem;color:var(--color-text-secondary);line-height:1.5;margin-bottom:var(--spacing-xs)}.achat-error-banner__suggestion{font-size:.75rem;color:var(--color-text-tertiary);margin-bottom:var(--spacing-sm)}.achat-error-banner__actions{display:flex;align-items:center;gap:var(--spacing-sm)}.achat-error-banner__retry{font-size:.8125rem;padding:4px 12px;background:var(--color-danger);color:#fff;border:none;border-radius:var(--radius-sm);cursor:pointer;font-weight:500;transition:opacity .15s ease}.achat-error-banner__retry:hover{opacity:.9}.achat-error-banner__retry:disabled{opacity:.5;cursor:not-allowed}.achat-error-banner__link{font-size:.8125rem;color:var(--color-primary);background:none;border:none;cursor:pointer;text-decoration:underline;padding:0}.achat-error-banner__link:hover{color:var(--color-primary-hover)}@keyframes achat-error-slide-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.achat-input-bar__icon--disabled{opacity:.35;cursor:not-allowed;pointer-events:none}.achat-attachment-preview{display:flex;gap:8px;padding:8px 12px 0;overflow-x:auto;flex-shrink:0}.achat-attachment-thumb{position:relative;width:64px;flex-shrink:0;display:flex;flex-direction:column;align-items:center}.achat-attachment-thumb img{width:64px;height:64px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--color-border)}.achat-attachment-remove{position:absolute;top:-4px;right:-4px;width:20px;height:20px;border-radius:50%;background:var(--color-danger);color:#fff;border:2px solid var(--color-bg);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;line-height:1;transition:opacity .15s ease}.achat-attachment-remove:hover{opacity:.85}.achat-attachment-name{font-size:.625rem;color:var(--color-text-secondary);max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px;text-align:center}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as A,j as s,c as $,r as c}from"./index-BqzqZJ96.js";import{a as y}from"./api-B5psysvQ.js";import{A as E,P}from"./AgentAvatar-BKJckc1W.js";import{f as D}from"./provider-display-BgrE7u33.js";/* empty css */import{u as M}from"./useTranslation-B-8kenfJ.js";import{Z as k,M as B,B as F}from"./zap-CVBnETFW.js";import{C as L}from"./clock-dRyRszad.js";import{c as f}from"./createLucideIcon-DiGX-lN4.js";import"./index-wWimwgy7.js";const H=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],I=f("eye",H);const R=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],v=f("power",R);const T=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],W=f("settings",T);function Z(a){return a==="latest"?"latest":a.startsWith("v")?a:`v${a}`}function q({instance:a,modelName:u,onAction:p,actionInProgress:_}){const{t:r}=M(),d=A(),l=a.status==="starting"||a.status==="stopping",n=l||_===a.id,x=a.status==="running",h=a.status==="stopped"||a.status==="created"||a.status==="error";return s.jsxs("div",{className:"assistant-card",children:[s.jsx("div",{className:"assistant-card__icon",children:s.jsx(E,{avatar:a.avatar,name:a.name,size:"md"})}),s.jsxs("div",{className:"assistant-card__info",children:[s.jsxs("div",{className:"assistant-card__primary",children:[s.jsx("span",{className:"assistant-card__name",children:a.name}),s.jsxs("span",{className:`status-badge status-${a.status}`,children:[l&&s.jsx("span",{className:"spinner"}),r(`common.status.${a.status}`)]}),s.jsx("span",{className:"assistant-card__version",children:Z(a.imageTag)})]}),s.jsxs("div",{className:"assistant-card__meta",children:[u&&s.jsxs("span",{className:"assistant-card__meta-item",children:[s.jsx(k,{size:14}),D(u)]}),s.jsxs("span",{className:"assistant-card__meta-item",children:[s.jsx(L,{size:14}),new Date(a.updatedAt).toLocaleDateString()]})]})]}),s.jsxs("div",{className:"assistant-card__actions",children:[s.jsxs("button",{className:"assistant-card__action assistant-card__action--primary",onClick:()=>d(`/assistants/${a.id}/chat`),disabled:n,children:[s.jsx(B,{size:14}),r("myAssistants.chat")]}),s.jsxs("button",{className:"assistant-card__action",onClick:()=>d(`/instances/${a.id}`),disabled:n,children:[s.jsx(I,{size:14}),r("myAssistants.view")]}),s.jsxs("button",{className:"assistant-card__action",onClick:()=>d(`/assistants/${a.id}/edit`),disabled:n,children:[s.jsx(W,{size:14}),r("myAssistants.configure")]}),x&&s.jsxs("button",{className:"assistant-card__action assistant-card__action--danger",onClick:()=>p(a.id,"stop"),disabled:n,children:[s.jsx(v,{size:14}),r("myAssistants.disable")]}),h&&s.jsxs("button",{className:"assistant-card__action assistant-card__action--success",onClick:()=>p(a.id,"start"),disabled:n,children:[s.jsx(v,{size:14}),r("myAssistants.enable")]})]})]})}function as(){const{t:a}=M(),u=A(),{subscribe:p,unsubscribe:_,addHandler:r,removeHandler:d}=$(),[l,n]=c.useState([]),[x,h]=c.useState({}),[z,C]=c.useState(!0),[N,j]=c.useState(null),[S,b]=c.useState(null);c.useEffect(()=>{Promise.all([y.get("/instances"),y.get("/agent-types")]).then(([t,m])=>{n(t);const i={};for(const e of m)e.wizard?.defaultModel&&(i[e.id]=e.wizard.defaultModel);h(i)}).catch(t=>j(t instanceof Error?t.message:a("myAssistants.loadFailed"))).finally(()=>C(!1))},[a]),c.useEffect(()=>{for(const t of l)p(t.id);return()=>{for(const t of l)_(t.id)}},[l,p,_]);const g=c.useCallback(t=>{const{instanceId:m,payload:i}=t;n(e=>e.map(o=>o.id===m?{...o,status:i.status,statusMessage:i.statusMessage??null}:o))},[]);c.useEffect(()=>(r("instance:status",g),()=>d("instance:status",g)),[r,d,g]);const w=c.useCallback(async(t,m)=>{j(null),b(t),n(i=>i.map(e=>e.id===t?{...e,status:m==="start"?"starting":"stopping",statusMessage:null}:e));try{const i=await y.post(`/instances/${t}/${m}`,{});n(e=>e.map(o=>o.id===t?{...o,status:i.status,statusMessage:i.statusMessage}:o))}catch(i){j(i instanceof Error?i.message:a("myAssistants.actionFailed"));const e=await y.get("/instances").catch(()=>null);e&&n(e)}finally{b(null)}},[a]);return z?s.jsx("main",{className:"my-assistants-page",children:s.jsx("div",{className:"my-assistants-page__loading",children:a("common.labels.loading")})}):s.jsxs("main",{className:"my-assistants-page",children:[s.jsxs("header",{className:"my-assistants-page__header",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"my-assistants-page__title",children:a("myAssistants.title")}),s.jsx("p",{className:"my-assistants-page__subtitle",children:a("myAssistants.subtitle")})]}),s.jsxs("button",{className:"my-assistants-page__create",onClick:()=>u("/create"),children:[s.jsx(P,{size:18}),a("myAssistants.createNew")]})]}),N&&s.jsx("div",{className:"error-message",role:"alert",children:N}),l.length===0?s.jsxs("div",{className:"my-assistants-page__empty-banner",children:[s.jsxs("div",{className:"my-assistants-page__empty-content",children:[s.jsx("div",{className:"my-assistants-page__empty-icon",children:s.jsx(k,{size:22})}),s.jsxs("div",{className:"my-assistants-page__empty-text",children:[s.jsx("h3",{children:a("myAssistants.emptyTitle")}),s.jsx("p",{children:a("myAssistants.emptyDescription")})]})]}),s.jsxs("button",{className:"my-assistants-page__empty-btn",onClick:()=>u("/create"),children:[s.jsx(F,{size:18}),s.jsx("span",{children:a("myAssistants.createFirst")})]})]}):s.jsx("div",{className:"my-assistants-page__list",children:l.map(t=>s.jsx(q,{instance:t,modelName:x[t.agentType]??null,onAction:w,actionInProgress:S},t.id))})]})}export{as as MyAssistantsPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as T,r as l,j as e}from"./index-BqzqZJ96.js";import{a as y}from"./api-B5psysvQ.js";import{u as R}from"./useTranslation-B-8kenfJ.js";function M(){const{t:a}=R(),{user:n,updateUser:S}=T(),[r,c]=l.useState(null),[C,x]=l.useState(!0),[d,p]=l.useState(""),[f,g]=l.useState(null),[j,N]=l.useState(!1),[I,m]=l.useState(!1),[o,w]=l.useState(!1),[_,E]=l.useState([]),[h,b]=l.useState(!1),[u,v]=l.useState(null),P=l.useCallback(()=>{x(!0),y.get("/auth/me").then(s=>{c(s.user),p(s.user.displayName)}).catch(()=>{n&&(c({...n,avatarUrl:null,passwordChangedAt:null,totpEnabled:!1,role:"user"}),p(n.displayName))}).finally(()=>x(!1))},[n]);l.useEffect(()=>{P()},[P]);const D=async s=>{s.preventDefault(),g(null),N(!0);try{const i=await y.put("/auth/profile",{displayName:d});p(i.displayName),S({displayName:i.displayName}),c(t=>t&&{...t,displayName:i.displayName}),g({type:"success",text:a("profilePage.basicInfo.updateSuccess")})}catch(i){g({type:"error",text:i instanceof Error?i.message:a("profilePage.basicInfo.updateFailed")})}finally{N(!1)}},A=()=>{m(!1)},L=s=>{const i=s.trim().split(/\s+/);return i.length>=2?(i[0][0]+i[i.length-1][0]).toUpperCase():s.slice(0,2).toUpperCase()},U=s=>new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}),H=s=>{const i=new Date(s);return i.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})+" "+i.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})},k=s=>({login_success:a("profilePage.security.eventLogin"),login_failed:a("profilePage.security.eventLoginFailed"),signup:a("profilePage.security.eventSignup"),password_changed:a("profilePage.security.eventPasswordChanged"),logout:a("profilePage.security.eventLogout")})[s]??s,O=s=>{if(!s)return"—";const i=s.match(/(Chrome|Firefox|Safari|Edge|Opera)\/[\d.]+/)?.[0]??s.match(/(MSIE|Trident)[\s/][\d.]+/)?.[0]??"",t=s.match(/(Windows NT [\d.]+|Mac OS X [\d_.]+|Linux|Android [\d.]+|iOS [\d.]+)/)?.[0]??"";return i||t?[i,t].filter(Boolean).join(" · "):s.length>40?s.slice(0,40)+"…":s};return l.useEffect(()=>{o&&(b(!0),v(null),y.get("/auth/login-history").then(s=>E(s)).catch(s=>v(s instanceof Error?s.message:String(s))).finally(()=>b(!1)))},[o]),C||!r?e.jsx("main",{className:"profile-page",children:e.jsx("div",{className:"profile-page__loading",children:a("common.loading")})}):e.jsxs("main",{className:"profile-page",children:[e.jsxs("div",{className:"profile-page__header",children:[e.jsx("h1",{children:a("profilePage.title")}),e.jsx("p",{className:"profile-page__subtitle",children:a("profilePage.subtitle")})]}),e.jsxs("section",{className:"profile-page__section",children:[e.jsx("h2",{className:"profile-page__section-title",children:a("profilePage.basicInfo.title")}),e.jsxs("div",{className:"profile-page__avatar-row",children:[e.jsx("div",{className:"profile-page__avatar",children:L(r.displayName||r.email)}),e.jsxs("div",{className:"profile-page__avatar-info",children:[e.jsx("span",{className:"profile-page__avatar-name",children:r.displayName}),e.jsx("span",{className:"profile-page__avatar-email",children:r.email})]})]}),e.jsxs("div",{className:"profile-page__info-grid",children:[e.jsxs("div",{className:"profile-page__info-item",children:[e.jsx("span",{className:"profile-page__info-label",children:a("profilePage.basicInfo.email")}),e.jsx("span",{className:"profile-page__info-value",children:r.email})]}),e.jsxs("div",{className:"profile-page__info-item",children:[e.jsx("span",{className:"profile-page__info-label",children:a("profilePage.basicInfo.role")}),e.jsx("span",{className:`profile-page__badge profile-page__badge--${r.role}`,children:r.role==="admin"?a("profilePage.basicInfo.roleAdmin"):a("profilePage.basicInfo.roleUser")})]}),e.jsxs("div",{className:"profile-page__info-item",children:[e.jsx("span",{className:"profile-page__info-label",children:a("profilePage.basicInfo.memberId")}),e.jsx("span",{className:"profile-page__info-value profile-page__info-value--mono",children:r.id})]}),e.jsxs("div",{className:"profile-page__info-item",children:[e.jsx("span",{className:"profile-page__info-label",children:a("profilePage.basicInfo.memberSince")}),e.jsx("span",{className:"profile-page__info-value",children:U(r.createdAt)})]})]}),f&&e.jsx("div",{className:`profile-page__message profile-page__message--${f.type}`,children:f.text}),e.jsxs("form",{className:"profile-page__form-row",onSubmit:D,children:[e.jsxs("div",{className:"profile-page__form-field",children:[e.jsx("label",{htmlFor:"profile-display-name",children:a("profilePage.basicInfo.displayName")}),e.jsx("input",{id:"profile-display-name",className:"profile-page__input",type:"text",value:d,onChange:s=>p(s.target.value),required:!0})]}),e.jsx("button",{className:"profile-page__btn profile-page__btn--primary",type:"submit",disabled:j||d===r.displayName,children:a(j?"profilePage.basicInfo.updating":"profilePage.basicInfo.updateProfile")})]})]}),e.jsxs("section",{className:"profile-page__section",children:[e.jsx("h2",{className:"profile-page__section-title",children:a("profilePage.security.title")}),e.jsxs("div",{className:"profile-page__security-list",children:[e.jsx("div",{className:"profile-page__security-row",children:e.jsxs("div",{className:"profile-page__security-left",children:[e.jsx("span",{className:"profile-page__security-label",children:a("profilePage.security.password")}),e.jsx("span",{className:"profile-page__security-desc",children:a("profilePage.security.managedByClerk",{defaultValue:"Authentication is managed by Clerk. Use Clerk to change your password or manage security settings."})})]})}),e.jsxs("div",{className:"profile-page__security-row",children:[e.jsxs("div",{className:"profile-page__security-left",children:[e.jsx("span",{className:"profile-page__security-label",children:a("profilePage.security.loginHistory")}),e.jsx("span",{className:"profile-page__security-desc",children:a("profilePage.security.loginHistoryDesc")})]}),e.jsx("div",{className:"profile-page__security-right",children:e.jsx("button",{className:"profile-page__btn profile-page__btn--secondary profile-page__btn--sm",type:"button",onClick:()=>w(!o),children:a(o?"profilePage.security.hideHistory":"profilePage.security.viewHistory")})})]}),o&&e.jsxs("div",{className:"profile-page__login-history",children:[h&&e.jsx("div",{className:"profile-page__login-history-loading",children:a("common.loading")}),u&&e.jsx("div",{className:"profile-page__message profile-page__message--error",children:u}),!h&&!u&&_.length===0&&e.jsx("div",{className:"profile-page__login-history-empty",children:a("profilePage.security.noHistory")}),!h&&_.length>0&&e.jsxs("table",{className:"profile-page__history-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:a("profilePage.security.historyTime")}),e.jsx("th",{children:a("profilePage.security.historyEvent")}),e.jsx("th",{children:a("profilePage.security.historyIp")}),e.jsx("th",{children:a("profilePage.security.historyDevice")})]})}),e.jsx("tbody",{children:_.map(s=>e.jsxs("tr",{className:s.failureReason?"profile-page__history-row--failed":"",children:[e.jsx("td",{children:H(s.createdAt)}),e.jsxs("td",{children:[e.jsx("span",{className:`profile-page__history-event profile-page__history-event--${s.failureReason?"failed":"success"}`,children:k(s.eventType)}),s.failureReason&&e.jsx("span",{className:"profile-page__history-reason",children:s.failureReason})]}),e.jsx("td",{className:"profile-page__history-mono",children:s.ipAddress??"—"}),e.jsx("td",{className:"profile-page__history-device",children:O(s.userAgent)})]},s.id))})]})]})]})]}),e.jsxs("section",{className:"profile-page__section profile-page__section--danger",children:[e.jsx("h2",{className:"profile-page__section-title",children:a("profilePage.dangerZone.title")}),e.jsxs("div",{className:"profile-page__danger-content",children:[e.jsx("p",{className:"profile-page__danger-text",children:a("profilePage.dangerZone.deleteAccountDesc")}),I?e.jsxs("div",{style:{display:"flex",gap:"var(--spacing-sm)",alignItems:"center"},children:[e.jsx("span",{style:{fontSize:"0.85rem",color:"var(--color-danger)",fontWeight:500},children:a("profilePage.dangerZone.deleteConfirm")}),e.jsx("button",{className:"profile-page__btn profile-page__btn--danger profile-page__btn--sm",type:"button",onClick:A,children:a("profilePage.dangerZone.deleteButton")}),e.jsx("button",{className:"profile-page__btn profile-page__btn--secondary profile-page__btn--sm",type:"button",onClick:()=>m(!1),children:a("common.buttons.cancel")})]}):e.jsx("button",{className:"profile-page__btn profile-page__btn--danger",type:"button",onClick:()=>m(!0),children:a("profilePage.dangerZone.deleteButton")})]})]})]})}export{M as ProfilePage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.profile-page{max-width:800px;margin:0 auto;padding:var(--spacing-xl) var(--spacing-lg)}.profile-page__header{margin-bottom:var(--spacing-xl)}.profile-page__header h1{font-size:1.75rem;font-weight:700;color:var(--color-text);margin:0}.profile-page__subtitle{color:var(--color-text-secondary);font-size:.95rem;margin:var(--spacing-xs) 0 0}.profile-page__section{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--spacing-lg);margin-bottom:var(--spacing-lg)}.profile-page__section-title{font-size:1rem;font-weight:700;color:var(--color-text);margin:0 0 var(--spacing-lg) 0}.profile-page__avatar-row{display:flex;align-items:center;gap:var(--spacing-lg);margin-bottom:var(--spacing-lg);padding-bottom:var(--spacing-lg);border-bottom:1px solid var(--color-border)}.profile-page__avatar{width:72px;height:72px;border-radius:var(--radius-full);background:var(--color-primary-light);color:var(--color-primary);display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:700;flex-shrink:0;-webkit-user-select:none;user-select:none;text-transform:uppercase}.profile-page__avatar-info{display:flex;flex-direction:column;gap:.25rem}.profile-page__avatar-name{font-size:1.1rem;font-weight:600;color:var(--color-text)}.profile-page__avatar-email{font-size:.85rem;color:var(--color-text-secondary)}.profile-page__avatar-btn{margin-left:auto;padding:.4rem .9rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.8rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.profile-page__avatar-btn:hover{border-color:var(--color-text-secondary);color:var(--color-text)}.profile-page__info-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--spacing-md) var(--spacing-lg);margin-bottom:var(--spacing-lg)}.profile-page__info-item{display:flex;flex-direction:column;gap:.2rem}.profile-page__info-label{font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.03em}.profile-page__info-value{font-size:.95rem;font-weight:500;color:var(--color-text)}.profile-page__info-value--mono{font-family:var(--font-mono);font-size:.8rem;color:var(--color-text-secondary)}.profile-page__badge{display:inline-flex;align-items:center;padding:.1rem .55rem;border-radius:var(--radius-full);font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;width:fit-content}.profile-page__badge--admin{background:var(--color-primary-light);color:var(--color-primary)}.profile-page__badge--user{background:var(--color-surface);color:var(--color-text-secondary)}.profile-page__form-row{display:flex;align-items:flex-end;gap:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--color-border)}.profile-page__form-field{flex:1;display:flex;flex-direction:column;gap:.3rem}.profile-page__form-field label{font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.03em}.profile-page__input{padding:.625rem .875rem;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);font-size:.9rem;outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.profile-page__input:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.profile-page__btn{padding:.5rem 1.25rem;border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;border:none}.profile-page__btn:disabled{opacity:.5;cursor:not-allowed}.profile-page__btn--primary{background:var(--color-primary);color:var(--color-on-primary)}.profile-page__btn--primary:hover:not(:disabled){background:var(--color-primary-dark)}.profile-page__btn--secondary{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.profile-page__btn--secondary:hover:not(:disabled){border-color:var(--color-text-secondary)}.profile-page__btn--danger{background:#ef444414;color:var(--color-danger)}.profile-page__btn--danger:hover:not(:disabled){background:#ef444426}.profile-page__btn--sm{padding:.35rem .8rem;font-size:.8rem}.profile-page__security-list{display:flex;flex-direction:column;gap:0}.profile-page__security-row{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) 0;border-bottom:1px solid var(--color-border)}.profile-page__security-row:last-child{border-bottom:none;padding-bottom:0}.profile-page__security-row:first-child{padding-top:0}.profile-page__security-left{display:flex;flex-direction:column;gap:.15rem}.profile-page__security-label{font-size:.9rem;font-weight:600;color:var(--color-text)}.profile-page__security-desc{font-size:.8rem;color:var(--color-text-secondary)}.profile-page__security-right{display:flex;align-items:center;gap:var(--spacing-sm)}.profile-page__badge--enabled{background:#05966914;color:var(--color-success)}.profile-page__badge--disabled{background:var(--color-surface);color:var(--color-text-secondary)}.profile-page__login-history{margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--color-border)}.profile-page__login-history-loading,.profile-page__login-history-empty{padding:var(--spacing-lg) 0;text-align:center;color:var(--color-text-secondary);font-size:.85rem}.profile-page__history-table{width:100%;border-collapse:collapse;font-size:.82rem}.profile-page__history-table thead th{text-align:left;font-size:.75rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.03em;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--color-border)}.profile-page__history-table tbody td{padding:var(--spacing-sm);color:var(--color-text);border-bottom:1px solid var(--color-border);vertical-align:top}.profile-page__history-table tbody tr:last-child td{border-bottom:none}.profile-page__history-row--failed td{background:#ef444408}.profile-page__history-event{display:inline-block;padding:.1rem .45rem;border-radius:var(--radius-sm);font-size:.75rem;font-weight:600}.profile-page__history-event--success{background:#05966914;color:var(--color-success)}.profile-page__history-event--failed{background:#ef444414;color:var(--color-danger)}.profile-page__history-reason{display:block;font-size:.72rem;color:var(--color-danger);margin-top:.15rem}.profile-page__history-mono{font-family:var(--font-mono);font-size:.78rem;color:var(--color-text-secondary)}.profile-page__history-device{font-size:.78rem;color:var(--color-text-secondary);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-page__section--danger{border-color:#ef444433}.profile-page__section--danger .profile-page__section-title{color:var(--color-danger)}.profile-page__danger-content{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md)}.profile-page__danger-text{font-size:.85rem;color:var(--color-text-secondary);line-height:1.5}.profile-page__message{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);font-size:.85rem;font-weight:500;margin-bottom:var(--spacing-md)}.profile-page__message--success{background:#05966914;color:var(--color-success)}.profile-page__message--error{background:#ef444414;color:var(--color-danger)}.profile-page__modal-overlay{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000}.profile-page__modal{background:var(--color-card-bg);border-radius:var(--radius-lg);padding:var(--spacing-xl);max-width:440px;width:90%;box-shadow:var(--shadow-xl)}.profile-page__modal h2{font-size:1.15rem;font-weight:700;color:var(--color-text);margin:0 0 var(--spacing-lg) 0}.profile-page__modal-field{margin-bottom:var(--spacing-md)}.profile-page__modal-field label{display:block;font-size:.85rem;font-weight:600;color:var(--color-text);margin-bottom:var(--spacing-xs)}.profile-page__modal-field input{width:100%;padding:.625rem .875rem;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);font-size:.875rem;outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast);box-sizing:border-box}.profile-page__modal-field input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.profile-page__modal-actions{display:flex;justify-content:flex-end;gap:var(--spacing-sm);margin-top:var(--spacing-lg)}.profile-page__loading{display:flex;align-items:center;justify-content:center;min-height:300px;color:var(--color-text-secondary);font-size:.95rem}@media(max-width:768px){.profile-page{padding:var(--spacing-lg) var(--spacing-md)}.profile-page__info-grid{grid-template-columns:1fr}.profile-page__avatar-row{flex-direction:column;text-align:center}.profile-page__avatar-btn{margin-left:0}.profile-page__form-row{flex-direction:column;align-items:stretch}.profile-page__danger-content{flex-direction:column;align-items:flex-start}.profile-page__security-row{flex-direction:column;align-items:flex-start;gap:var(--spacing-sm)}.profile-page__history-table thead{display:none}.profile-page__history-table tbody td{display:block;padding:var(--spacing-xs) 0;border-bottom:none}.profile-page__history-table tbody tr{padding:var(--spacing-sm) 0;border-bottom:1px solid var(--color-border);display:block}.profile-page__history-table tbody tr:last-child{border-bottom:none}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.achat-drawer{width:260px;flex-shrink:0;background:var(--achat-drawer-bg);border-right:1px solid var(--achat-drawer-border);display:flex;flex-direction:column;transform:translate(-100%);transition:transform .2s ease;overflow:hidden;position:relative}.achat-drawer--open{transform:translate(0)}.achat-drawer--hidden{width:0;border-right:none}.achat-drawer--overlay{position:absolute;top:0;left:0;bottom:0;z-index:20}.achat-drawer__header{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 8px;font-weight:600;font-size:.85rem;color:var(--color-text)}.achat-drawer__new-btn{background:none;border:1px solid var(--achat-drawer-border);border-radius:6px;padding:4px 10px;font-size:.75rem;color:var(--color-text-secondary);cursor:pointer;transition:background .15s ease}.achat-drawer__new-btn:hover{background:var(--achat-drawer-item-hover-bg)}.achat-drawer__list{flex:1;overflow-y:auto;padding:0 8px 8px}.achat-drawer__group-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--achat-drawer-group-color);padding:12px 8px 4px}.achat-drawer__item{display:flex;align-items:flex-start;gap:8px;padding:8px;border-radius:6px;cursor:pointer;border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.achat-drawer__item:hover{background:var(--achat-drawer-item-hover-bg)}.achat-drawer__item--active{background:var(--achat-drawer-item-active-bg);border-color:var(--achat-drawer-item-active-border)}.achat-drawer__item--disabled{opacity:.5;cursor:not-allowed}.achat-drawer__item-body{flex:1;min-width:0}.achat-drawer__item-title{font-size:.82rem;font-weight:500;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.achat-drawer__item-preview{font-size:.72rem;color:var(--achat-drawer-preview-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.achat-drawer__item-actions{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex-shrink:0;margin-left:auto}.achat-drawer__item-time{font-size:.65rem;color:var(--achat-drawer-preview-color);white-space:nowrap}.achat-drawer__item-delete{background:none;border:1px solid var(--achat-drawer-delete-color);width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--achat-drawer-delete-color);opacity:.35;transition:opacity .15s ease,color .15s ease,border-color .15s ease,background .15s ease;border-radius:4px;flex-shrink:0;padding:0}.achat-drawer__item:hover .achat-drawer__item-delete,.achat-drawer__item--active .achat-drawer__item-delete{opacity:.8}.achat-drawer__item-delete:hover{color:var(--achat-drawer-delete-hover-color);border-color:var(--achat-drawer-delete-hover-color);background:#ef44441a}.achat-drawer__overlay{position:fixed;inset:0;background:var(--achat-drawer-overlay-bg);z-index:19}.achat-drawer__empty{display:flex;align-items:center;justify-content:center;height:100%;font-size:.8rem;color:var(--color-text-secondary);padding:24px;text-align:center}.achat-drawer__loading{display:flex;align-items:center;justify-content:center;height:100%;padding:24px}.achat-drawer__error{font-size:.8rem;color:var(--color-danger);padding:16px 12px;text-align:center}@media(max-width:768px){.achat-drawer{position:absolute;top:0;left:0;bottom:0;z-index:20}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as l,j as e}from"./index-BqzqZJ96.js";import{a as F}from"./api-B5psysvQ.js";import{u as U}from"./useTranslation-B-8kenfJ.js";async function R(o,c,s={}){return F.post(`/instances/${o}/rpc`,{method:c,params:s})}function X(o){const c=new Date,s=new Date(c.getFullYear(),c.getMonth(),c.getDate()).getTime(),i=s-864e5,h=s-c.getDay()*864e5;return o>=s?"today":o>=i?"yesterday":o>=h?"thisWeek":"older"}function Y(o){const c=Date.now()-o,s=Math.floor(c/6e4);if(s<1)return"now";if(s<60)return`${s}m`;const i=Math.floor(s/60);return i<24?`${i}h`:`${Math.floor(i/24)}d`}const q=3e4;function Q({instanceId:o,currentSessionKey:c,isOpen:s,isStreaming:i,onSelectSession:h,onNewChat:D,onClose:L,mode:g="sidebar",refreshFlag:u}){const{t:r}=U(),[m,y]=l.useState([]),[W,C]=l.useState(!1),[N,p]=l.useState(null),[$,b]=l.useState(null),[k,x]=l.useState(null),S=l.useRef(0),M=l.useRef(u),A=l.useCallback(async(t=!1)=>{const n=Date.now(),a=u!==M.current;if(!(!t&&!a&&n-S.current<q)){M.current=u,C(!0),p(null);try{const w=await R(o,"sessions.list",{limit:50,includeGlobal:!1,includeDerivedTitles:!0,includeLastMessage:!0}),f=new Set(["group","cron","hook","node"]),_=(w.sessions??[]).filter(d=>!d.kind||!f.has(d.kind)).sort((d,j)=>(j.updatedAt??0)-(d.updatedAt??0));y(_),S.current=Date.now()}catch{p(r("chat.sessionDrawer.fetchError"))}finally{C(!1)}}},[o,u,r]);l.useEffect(()=>{s&&A()},[s,A]);const v=l.useCallback(()=>{const t=D();y(n=>n.some(a=>a.key===t)?n:[{key:t,updatedAt:Date.now()},...n])},[D]),K=l.useCallback((t,n)=>{n.stopPropagation(),x(t)},[]),P=l.useCallback(async()=>{const t=k;if(t){x(null),b(t);try{await R(o,"sessions.delete",{key:t,deleteTranscript:!0}),y(n=>n.filter(a=>a.key!==t)),t===c&&v()}catch{p(r("chat.sessionDrawer.fetchError"))}finally{b(null)}}},[k,o,c,v,r]),E=l.useCallback(()=>{x(null)},[]),B=l.useCallback(t=>{i||h(t)},[i,h]),T={today:[],yesterday:[],thisWeek:[],older:[]};for(const t of m){const n=t.updatedAt?X(t.updatedAt):"older";T[n].push(t)}const G=["today","yesterday","thisWeek","older"],V=["achat-drawer",s?"achat-drawer--open":"achat-drawer--hidden",g==="overlay"?"achat-drawer--overlay":""].filter(Boolean).join(" ");return e.jsxs(e.Fragment,{children:[g==="overlay"&&s&&e.jsx("div",{className:"achat-drawer__overlay",onClick:L}),e.jsxs("aside",{className:V,children:[e.jsxs("div",{className:"achat-drawer__header",children:[e.jsx("span",{children:r("chat.sessionDrawer.sessions")}),e.jsx("button",{className:"achat-drawer__new-btn",onClick:v,disabled:i,children:r("chat.sessionDrawer.newChat")})]}),W&&m.length===0?e.jsx("div",{className:"achat-drawer__loading",children:e.jsx("span",{className:"spinner"})}):N&&m.length===0?e.jsx("div",{className:"achat-drawer__error",children:N}):m.length===0?e.jsx("div",{className:"achat-drawer__empty",children:r("chat.sessionDrawer.emptyState")}):e.jsx("div",{className:"achat-drawer__list",children:G.map(t=>{const n=T[t];return n.length===0?null:e.jsxs("div",{children:[e.jsx("div",{className:"achat-drawer__group-label",children:r(`chat.sessionDrawer.${t}`)}),n.map(a=>{const w=a.key===c,f=a.key===$,_=a.derivedTitle??a.lastMessagePreview?.slice(0,40)??r("chat.sessionDrawer.newChat"),d=a.lastMessagePreview?.slice(0,60);return e.jsxs("div",{className:["achat-drawer__item",w?"achat-drawer__item--active":"",i&&!w?"achat-drawer__item--disabled":""].filter(Boolean).join(" "),onClick:()=>B(a.key),children:[e.jsxs("div",{className:"achat-drawer__item-body",children:[e.jsx("div",{className:"achat-drawer__item-title",children:_}),d&&e.jsx("div",{className:"achat-drawer__item-preview",children:d})]}),e.jsxs("div",{className:"achat-drawer__item-actions",children:[a.updatedAt&&e.jsx("span",{className:"achat-drawer__item-time",children:Y(a.updatedAt)}),a.key!=="main"&&!a.key.endsWith(":main")&&e.jsx("button",{className:"achat-drawer__item-delete",onClick:j=>K(a.key,j),disabled:f,title:r("chat.sessionDrawer.deleteConfirm"),children:f?"…":e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:e.jsx("path",{d:"M2.5 4h9M5.5 4V3a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1M4 4v7.5a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1V4",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]},a.key)})]},t)})})]}),k&&e.jsx("div",{className:"modal-overlay",onClick:E,children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true",onClick:t=>t.stopPropagation(),children:[e.jsx("h3",{children:r("chat.sessionDrawer.deleteTitle")}),e.jsx("p",{style:{color:"var(--color-text-secondary)",margin:"var(--spacing-sm) 0 var(--spacing-md)"},children:r("chat.sessionDrawer.deleteConfirm")}),e.jsxs("div",{className:"form-actions",style:{display:"flex",gap:"var(--spacing-sm)",justifyContent:"flex-end"},children:[e.jsx("button",{type:"button",className:"btn-secondary",onClick:E,children:r("chat.sessionDrawer.deleteCancel")}),e.jsx("button",{type:"button",className:"danger",onClick:P,children:r("common.buttons.delete")})]})]})})]})}export{Q as S,R as r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as o,j as s}from"./index-BqzqZJ96.js";import{a as g}from"./api-B5psysvQ.js";import{u as ys}from"./useTranslation-B-8kenfJ.js";const _s=["general","api","notifications","security","data","permissions"],us=["UTC","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","Europe/London","Europe/Paris","Europe/Berlin","Asia/Tokyo","Asia/Shanghai","Asia/Singapore","Australia/Sydney"],xs=[{value:"zh",label:"中文"},{value:"en",label:"English"},{value:"es",label:"Español"},{value:"fr",label:"Français"},{value:"de",label:"Deutsch"},{value:"it",label:"Italiano"}],ps={windowMs:900*1e3,max:300},js={windowMs:900*1e3,max:10},Cs={windowMs:60*1e3,max:30},u={platformName:"",platformDescription:"",timezone:"UTC",language:"zh",enableUserRegistration:!0};function ws(){const{t:e}=ys(),[d,q]=o.useState("general"),[a,l]=o.useState({...u}),[S,L]=o.useState({...u}),[Y,Z]=o.useState(!0),[x,U]=o.useState(!1),[R,c]=o.useState(null),[A,m]=o.useState(null),[p,D]=o.useState(""),[k,j]=o.useState(null),[C,T]=o.useState(""),[O,H]=o.useState(null),[f,X]=o.useState(null),[F,I]=o.useState(!1),[K,M]=o.useState(!1),[N,ss]=o.useState("json"),[v,P]=o.useState([]),[G,es]=o.useState([]),[ns,z]=o.useState(!1),[h,is]=o.useState(""),[as,$]=o.useState(null),b=async()=>{try{const n=await g.get("/admin/config"),i={...u,...n};l(i),L(i)}catch(n){c(n instanceof Error?n.message:e("systemConfig.failedToLoad"))}};o.useEffect(()=>{b().finally(()=>Z(!1))},[]);const y=o.useCallback(async()=>{I(!0);try{const n=await g.get("/admin/storage-stats");X(n)}catch(n){c(n instanceof Error?n.message:e("systemConfig.data.failedToLoadStats"))}finally{I(!1)}},[]),W=o.useCallback(async()=>{z(!0);try{const n=await g.get("/admin/users-with-roles");P(n.users),es(n.adminEmails)}catch(n){c(n instanceof Error?n.message:e("systemConfig.permissions.failedToLoadUsers"))}finally{z(!1)}},[]);o.useEffect(()=>{d==="data"&&!f&&y(),d==="permissions"&&v.length===0&&W()},[d,f,v.length,y,W]);const ts=async()=>{U(!0),c(null),m(null);try{const n=await g.put("/admin/config",a),i={...u,...n};l(i),L(i),m(e("systemConfig.saved")),setTimeout(()=>m(null),3e3)}catch(n){c(n instanceof Error?n.message:e("systemConfig.failedToSave"))}finally{U(!1)}},os=()=>{l({...S}),c(null),m(null)},B=()=>{const n=p.trim();if(!n.startsWith("http://")&&!n.startsWith("https://")){j(e("systemConfig.api.invalidOrigin"));return}j(null);const i=a.corsOrigins??[];i.includes(n)||l({...a,corsOrigins:[...i,n]}),D("")},ls=n=>{const i=a.corsOrigins??[];l({...a,corsOrigins:i.filter(t=>t!==n)})},J=async()=>{const n=C.trim();if(n){c(null);try{const i=await g.post("/admin/config/api-keys",{name:n});H(i.fullKey),T(""),await b()}catch(i){c(i instanceof Error?i.message:e("systemConfig.api.failedToGenerateKey"))}}},cs=async n=>{c(null);try{await g.delete(`/admin/config/api-keys/${n}`),await b()}catch(i){c(i instanceof Error?i.message:e("systemConfig.api.failedToRevokeKey"))}},rs=async()=>{if(window.confirm(e("systemConfig.data.cleanupConfirm"))){M(!0),c(null);try{const n=await g.post("/admin/cleanup");m(e("systemConfig.data.cleanupSuccess",{events:n.deletedEvents,authEvents:n.deletedAuthEvents,auditLog:n.deletedAuditLog})),setTimeout(()=>m(null),5e3),await y()}catch(n){c(n instanceof Error?n.message:e("systemConfig.data.cleanupFailed"))}finally{M(!1)}}},w=async n=>{try{const i=`/admin/export/${n}?format=${N}`,t=await fetch(`/api${i}`,{credentials:"include"});if(!t.ok)throw new Error(e("systemConfig.data.exportFailed"));const r=await t.blob(),_=document.createElement("a");_.href=URL.createObjectURL(r),_.download=`${n}.${N}`,_.click(),URL.revokeObjectURL(_.href)}catch(i){c(i instanceof Error?i.message:e("systemConfig.data.exportFailed"))}},ds=async(n,i)=>{$(n);try{await g.put(`/admin/users/${n}/role`,{role:i}),P(t=>t.map(r=>r.id===n?{...r,role:i}:r)),m(e("systemConfig.permissions.roleUpdated")),setTimeout(()=>m(null),3e3)}catch(t){c(t instanceof Error?t.message:e("systemConfig.permissions.roleUpdateFailed"))}finally{$(null)}},ms=n=>{const i={rateLimitGeneral:ps,rateLimitLogin:js,rateLimitCredentials:Cs};return a[n]??i[n]},Q=(n,i)=>{l({...a,[n]:i})},V=JSON.stringify(a)!==JSON.stringify(S);if(Y)return s.jsx("div",{className:"sys-config",children:e("admin.loading")});const E=(n,i)=>{const t=ms(i);return s.jsxs("div",{className:"sys-config__rate-group",children:[s.jsx("h3",{className:"sys-config__rate-group-title",children:n}),s.jsxs("div",{className:"sys-config__rate-fields",children:[s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.api.windowMinutes")}),s.jsx("input",{type:"number",min:1,value:Math.round(t.windowMs/6e4),onChange:r=>Q(i,{...t,windowMs:(parseInt(r.target.value,10)||1)*6e4})})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.api.maxRequests")}),s.jsx("input",{type:"number",min:1,value:t.max,onChange:r=>Q(i,{...t,max:parseInt(r.target.value,10)||1})})]})]})]})},gs=()=>{const n=a.corsOrigins??[],i=a.apiKeys??[];return s.jsxs(s.Fragment,{children:[s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.api.rateLimiting")}),E(e("systemConfig.api.rateLimitGeneral"),"rateLimitGeneral"),E(e("systemConfig.api.rateLimitLogin"),"rateLimitLogin"),E(e("systemConfig.api.rateLimitCredentials"),"rateLimitCredentials")]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.api.corsOrigins")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.api.corsOriginsDesc")}),n.length>0&&s.jsx("ul",{className:"sys-config__list",children:n.map(t=>s.jsxs("li",{className:"sys-config__list-item",children:[s.jsx("span",{children:t}),s.jsx("button",{className:"sys-config__btn sys-config__btn--danger sys-config__btn--sm",onClick:()=>ls(t),children:e("systemConfig.api.remove")})]},t))}),s.jsxs("div",{className:"sys-config__add-row",children:[s.jsx("input",{type:"text",value:p,onChange:t=>{D(t.target.value),j(null)},placeholder:e("systemConfig.api.originPlaceholder"),onKeyDown:t=>{t.key==="Enter"&&B()}}),s.jsx("button",{className:"sys-config__btn sys-config__btn--primary sys-config__btn--sm",onClick:B,disabled:!p.trim(),children:e("systemConfig.api.addOrigin")})]}),k&&s.jsx("div",{className:"error-message",style:{marginTop:"0.5rem"},children:k})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.api.webhookUrl")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.api.webhookUrlDesc")}),s.jsx("div",{className:"sys-config__field",children:s.jsx("input",{type:"text",value:a.webhookUrl??"",onChange:t=>l({...a,webhookUrl:t.target.value}),placeholder:e("systemConfig.api.webhookPlaceholder")})})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.api.apiKeys")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.api.apiKeysDesc")}),s.jsxs("table",{className:"sys-config__table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:e("systemConfig.api.keyName")}),s.jsx("th",{children:e("systemConfig.api.keyPrefix")}),s.jsx("th",{children:e("systemConfig.api.createdAt")}),s.jsx("th",{children:e("systemConfig.api.actions")})]})}),s.jsx("tbody",{children:i.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:4,className:"sys-config__table-empty",children:e("systemConfig.api.noKeys")})}):i.map(t=>s.jsxs("tr",{children:[s.jsx("td",{children:t.name}),s.jsx("td",{children:s.jsxs("code",{children:[t.prefix,"..."]})}),s.jsx("td",{children:new Date(t.createdAt).toLocaleDateString()}),s.jsx("td",{children:s.jsx("button",{className:"sys-config__btn sys-config__btn--danger sys-config__btn--sm",onClick:()=>cs(t.id),children:e("systemConfig.api.revoke")})})]},t.id))})]}),s.jsxs("div",{className:"sys-config__add-row",children:[s.jsx("input",{type:"text",value:C,onChange:t=>T(t.target.value),placeholder:e("systemConfig.api.keyNamePlaceholder"),onKeyDown:t=>{t.key==="Enter"&&J()}}),s.jsx("button",{className:"sys-config__btn sys-config__btn--primary sys-config__btn--sm",onClick:J,disabled:!C.trim(),children:e("systemConfig.api.generateKey")})]}),O&&s.jsxs("div",{className:"sys-config__key-display",children:[s.jsx("p",{children:e("systemConfig.api.generatedKeyMsg")}),s.jsx("code",{children:O})]})]})]})},fs=()=>s.jsxs(s.Fragment,{children:[s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.data.retentionPolicies")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.data.retentionPoliciesDesc")}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.data.eventLogRetention")}),s.jsx("input",{type:"number",min:1,value:a.dataRetentionEventsDays??90,onChange:n=>l({...a,dataRetentionEventsDays:parseInt(n.target.value,10)||90})})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.data.authEventRetention")}),s.jsx("input",{type:"number",min:1,value:a.dataRetentionAuthEventsDays??90,onChange:n=>l({...a,dataRetentionAuthEventsDays:parseInt(n.target.value,10)||90})})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.data.auditLogRetention")}),s.jsx("input",{type:"number",min:1,value:a.dataRetentionAuditLogDays??90,onChange:n=>l({...a,dataRetentionAuditLogDays:parseInt(n.target.value,10)||90})})]}),s.jsxs("div",{className:"sys-config__toggle-row",children:[s.jsxs("div",{className:"sys-config__toggle-info",children:[s.jsx("span",{className:"sys-config__toggle-label",children:e("systemConfig.data.autoCleanup")}),s.jsx("span",{className:"sys-config__toggle-desc",children:e("systemConfig.data.autoCleanupDesc")})]}),s.jsx("button",{type:"button",role:"switch","aria-checked":a.dataAutoCleanupEnabled??!1,className:`sys-config__switch${a.dataAutoCleanupEnabled?" sys-config__switch--on":""}`,onClick:()=>l({...a,dataAutoCleanupEnabled:!a.dataAutoCleanupEnabled}),children:s.jsx("span",{className:"sys-config__switch-thumb"})})]})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.data.storageUsage")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.data.storageUsageDesc")}),F?s.jsx("p",{className:"sys-config__loading-text",children:e("systemConfig.data.loadingStats")}):f?s.jsxs(s.Fragment,{children:[s.jsxs("table",{className:"sys-config__table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:e("systemConfig.data.tableName")}),s.jsx("th",{children:e("systemConfig.data.tableSize")}),s.jsx("th",{children:e("systemConfig.data.tableRows")})]})}),s.jsxs("tbody",{children:[f.tables.map(n=>s.jsxs("tr",{children:[s.jsx("td",{children:s.jsx("code",{children:n.table})}),s.jsx("td",{children:n.sizeFormatted}),s.jsx("td",{children:n.rowCount.toLocaleString()})]},n.table)),s.jsxs("tr",{className:"sys-config__table-total",children:[s.jsx("td",{children:s.jsx("strong",{children:e("systemConfig.data.totalSize")})}),s.jsx("td",{children:s.jsx("strong",{children:f.totalSizeFormatted})}),s.jsx("td",{})]})]})]}),s.jsx("button",{className:"sys-config__btn sys-config__btn--secondary sys-config__btn--sm",onClick:y,disabled:F,children:e("systemConfig.data.refreshStats")})]}):null]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.data.manualCleanup")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.data.manualCleanupDesc")}),s.jsx("button",{className:"sys-config__btn sys-config__btn--danger",onClick:rs,disabled:K,children:K?"...":e("systemConfig.data.runCleanup")})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.data.dataExport")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.data.dataExportDesc")}),s.jsxs("div",{className:"sys-config__export-controls",children:[s.jsxs("div",{className:"sys-config__field",style:{marginBottom:"var(--spacing-md)"},children:[s.jsx("label",{children:e("systemConfig.data.exportFormat")}),s.jsxs("select",{value:N,onChange:n=>ss(n.target.value),style:{width:"auto",minWidth:120},children:[s.jsx("option",{value:"json",children:e("systemConfig.data.formatJson")}),s.jsx("option",{value:"csv",children:e("systemConfig.data.formatCsv")})]})]}),s.jsxs("div",{className:"sys-config__export-buttons",children:[s.jsx("button",{className:"sys-config__btn sys-config__btn--secondary",onClick:()=>w("users"),children:e("systemConfig.data.exportUsers")}),s.jsx("button",{className:"sys-config__btn sys-config__btn--secondary",onClick:()=>w("instances"),children:e("systemConfig.data.exportInstances")}),s.jsx("button",{className:"sys-config__btn sys-config__btn--secondary",onClick:()=>w("events"),children:e("systemConfig.data.exportEvents")})]})]})]})]}),hs=()=>{const n=v.filter(i=>i.email.toLowerCase().includes(h.toLowerCase())||i.displayName.toLowerCase().includes(h.toLowerCase()));return s.jsxs(s.Fragment,{children:[s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.permissions.adminEmails")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.permissions.adminEmailsDesc")}),G.length>0?s.jsx("ul",{className:"sys-config__list",children:G.map(i=>s.jsxs("li",{className:"sys-config__list-item",children:[s.jsx("span",{children:i}),s.jsx("span",{className:"sys-config__role-badge sys-config__role-badge--admin",children:e("systemConfig.permissions.roleAdmin")})]},i))}):s.jsx("p",{className:"sys-config__empty-text",children:e("systemConfig.permissions.noAdminEmails")})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.permissions.roleManagement")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.permissions.roleManagementDesc")}),s.jsx("div",{className:"sys-config__field",style:{marginBottom:"var(--spacing-md)"},children:s.jsx("input",{type:"text",value:h,onChange:i=>is(i.target.value),placeholder:e("systemConfig.permissions.searchUsers")})}),ns?s.jsx("p",{className:"sys-config__loading-text",children:e("systemConfig.permissions.loadingUsers")}):s.jsxs("table",{className:"sys-config__table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:e("systemConfig.permissions.userName")}),s.jsx("th",{children:e("systemConfig.permissions.userEmail")}),s.jsx("th",{children:e("systemConfig.permissions.userRole")}),s.jsx("th",{children:e("systemConfig.permissions.userInstances")}),s.jsx("th",{children:e("systemConfig.permissions.userJoined")})]})}),s.jsx("tbody",{children:n.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:5,className:"sys-config__table-empty",children:e(h?"systemConfig.permissions.noMatchingUsers":"systemConfig.permissions.noUsersFound")})}):n.map(i=>s.jsxs("tr",{children:[s.jsx("td",{children:i.displayName}),s.jsx("td",{children:s.jsx("code",{children:i.email})}),s.jsx("td",{children:s.jsxs("select",{className:"sys-config__role-select",value:i.role,onChange:t=>ds(i.id,t.target.value),disabled:as===i.id,children:[s.jsx("option",{value:"admin",children:e("systemConfig.permissions.roleAdmin")}),s.jsx("option",{value:"user",children:e("systemConfig.permissions.roleUser")}),s.jsx("option",{value:"viewer",children:e("systemConfig.permissions.roleViewer")})]})}),s.jsx("td",{children:i.instanceCount}),s.jsx("td",{children:new Date(i.createdAt).toLocaleDateString()})]},i.id))})]})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.permissions.instanceQuota")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.permissions.instanceQuotaDesc")}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{children:e("systemConfig.permissions.quotaPerUser")}),s.jsx("input",{type:"number",min:0,value:a.instanceQuotaPerUser??0,onChange:i=>l({...a,instanceQuotaPerUser:parseInt(i.target.value,10)||0})})]})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.permissions.defaultRole")}),s.jsx("p",{className:"sys-config__field-desc",children:e("systemConfig.permissions.defaultRoleDesc")}),s.jsx("div",{className:"sys-config__field",children:s.jsxs("select",{value:a.defaultUserRole??"user",onChange:i=>l({...a,defaultUserRole:i.target.value}),children:[s.jsx("option",{value:"admin",children:e("systemConfig.permissions.roleAdmin")}),s.jsx("option",{value:"user",children:e("systemConfig.permissions.roleUser")}),s.jsx("option",{value:"viewer",children:e("systemConfig.permissions.roleViewer")})]})})]})]})};return s.jsxs("main",{className:"sys-config",children:[s.jsxs("header",{className:"sys-config__header",children:[s.jsxs("div",{className:"sys-config__header-left",children:[s.jsx("h1",{children:e("systemConfig.title")}),s.jsx("span",{className:"sys-config__admin-badge",children:e("systemConfig.adminBadge")})]}),s.jsx("p",{className:"sys-config__subtitle",children:e("systemConfig.subtitle")}),s.jsxs("div",{className:"sys-config__header-actions",children:[s.jsx("button",{className:"sys-config__btn sys-config__btn--secondary",onClick:os,disabled:x||!V,children:e("systemConfig.resetDefaults")}),s.jsx("button",{className:"sys-config__btn sys-config__btn--primary",onClick:ts,disabled:x||!V,children:e(x?"systemConfig.saving":"systemConfig.saveConfig")})]})]}),R&&s.jsx("div",{className:"error-message",role:"alert",children:R}),A&&s.jsx("div",{className:"success-message",role:"status",children:A}),s.jsxs("div",{className:"sys-config__body",children:[s.jsx("nav",{className:"sys-config__nav",children:_s.map(n=>s.jsx("button",{className:`sys-config__nav-item${d===n?" sys-config__nav-item--active":""}`,onClick:()=>q(n),children:e(`systemConfig.nav.${n}`)},n))}),s.jsx("div",{className:"sys-config__content",children:d==="general"?s.jsxs(s.Fragment,{children:[s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.general.basicSettings")}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{htmlFor:"platform-name",children:e("systemConfig.general.platformName")}),s.jsx("input",{id:"platform-name",type:"text",value:a.platformName??"",onChange:n=>l({...a,platformName:n.target.value}),placeholder:e("systemConfig.general.platformNamePlaceholder")})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{htmlFor:"platform-desc",children:e("systemConfig.general.platformDescription")}),s.jsx("textarea",{id:"platform-desc",value:a.platformDescription??"",onChange:n=>l({...a,platformDescription:n.target.value}),placeholder:e("systemConfig.general.platformDescriptionPlaceholder"),rows:3})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{htmlFor:"timezone",children:e("systemConfig.general.timezone")}),s.jsx("select",{id:"timezone",value:a.timezone??"UTC",onChange:n=>l({...a,timezone:n.target.value}),children:us.map(n=>s.jsx("option",{value:n,children:n},n))})]}),s.jsxs("div",{className:"sys-config__field",children:[s.jsx("label",{htmlFor:"language",children:e("systemConfig.general.language")}),s.jsx("select",{id:"language",value:a.language??"zh",onChange:n=>l({...a,language:n.target.value}),children:xs.map(n=>s.jsx("option",{value:n.value,children:n.label},n.value))})]})]}),s.jsxs("section",{className:"sys-config__section",children:[s.jsx("h2",{className:"sys-config__section-title",children:e("systemConfig.general.featureToggles")}),s.jsxs("div",{className:"sys-config__toggle-row",children:[s.jsxs("div",{className:"sys-config__toggle-info",children:[s.jsx("span",{className:"sys-config__toggle-label",children:e("systemConfig.general.enableUserRegistration")}),s.jsx("span",{className:"sys-config__toggle-desc",children:e("systemConfig.general.enableUserRegistrationDesc")})]}),s.jsx("button",{type:"button",role:"switch","aria-checked":a.enableUserRegistration??!0,className:`sys-config__switch${a.enableUserRegistration!==!1?" sys-config__switch--on":""}`,onClick:()=>l({...a,enableUserRegistration:!(a.enableUserRegistration??!0)}),children:s.jsx("span",{className:"sys-config__switch-thumb"})})]})]})]}):d==="api"?gs():d==="data"?fs():d==="permissions"?hs():s.jsx("div",{className:"sys-config__coming-soon",children:e("common.comingSoon")})})]})]})}export{ws as SystemConfigPage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.sys-config{max-width:1100px;margin:0 auto;padding:var(--spacing-xl) var(--spacing-lg)}.sys-config__header{margin-bottom:var(--spacing-xl);display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--spacing-sm)}.sys-config__header-left{display:flex;align-items:center;gap:var(--spacing-sm);width:100%}.sys-config__header-left h1{font-size:1.75rem;font-weight:700;color:var(--color-text);margin:0}.sys-config__admin-badge{display:inline-flex;align-items:center;background:var(--color-primary);color:var(--color-on-primary);padding:.15rem .6rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.sys-config__subtitle{color:var(--color-text-secondary);font-size:.95rem;margin:0;flex:1;min-width:200px}.sys-config__header-actions{display:flex;gap:var(--spacing-sm);margin-left:auto;flex-shrink:0}.sys-config__btn{padding:.5rem 1.25rem;border-radius:var(--radius-md);font-family:var(--font-sans);font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.sys-config__btn:disabled{opacity:.5;cursor:not-allowed}.sys-config__btn--primary{background:var(--color-primary);color:var(--color-on-primary);border:none}.sys-config__btn--primary:hover:not(:disabled){background:var(--color-primary-dark)}.sys-config__btn--secondary{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.sys-config__btn--secondary:hover:not(:disabled){background:var(--color-light);border-color:var(--color-text-secondary)}.sys-config__body{display:flex;gap:var(--spacing-xl);min-height:500px}.sys-config__nav{display:flex;flex-direction:column;gap:.25rem;width:200px;flex-shrink:0}.sys-config__nav-item{padding:.625rem 1rem;border:none;background:transparent;color:var(--color-text-secondary);font-family:var(--font-sans);font-size:.875rem;font-weight:500;text-align:left;border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.sys-config__nav-item:hover{background:var(--color-light);color:var(--color-text)}.sys-config__nav-item--active{background:var(--color-primary-light);color:var(--color-primary);font-weight:600}.sys-config__nav-item--active:hover{background:var(--color-primary-light);color:var(--color-primary)}.sys-config__content{flex:1;min-width:0;background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--spacing-xl)}.sys-config__section{margin-bottom:var(--spacing-xl)}.sys-config__section:last-child{margin-bottom:0}.sys-config__section-title{font-size:1rem;font-weight:700;color:var(--color-text);margin:0 0 var(--spacing-lg) 0;padding-bottom:var(--spacing-sm);border-bottom:1px solid var(--color-border)}.sys-config__field{margin-bottom:var(--spacing-lg)}.sys-config__field:last-child{margin-bottom:0}.sys-config__field label{display:block;font-size:.85rem;font-weight:600;color:var(--color-text);margin-bottom:var(--spacing-xs)}.sys-config__field input[type=text],.sys-config__field input[type=number],.sys-config__field textarea,.sys-config__field select{width:100%;padding:.625rem .875rem;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);font-size:.875rem;outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.sys-config__field input[type=text]:focus,.sys-config__field input[type=number]:focus,.sys-config__field textarea:focus,.sys-config__field select:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.sys-config__field textarea{resize:vertical;min-height:80px}.sys-config__field select{cursor:pointer}.sys-config__toggle-row{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md);background:var(--color-bg);border-radius:var(--radius-md);border:1px solid var(--color-border)}.sys-config__toggle-info{display:flex;flex-direction:column;gap:.2rem}.sys-config__toggle-label{font-size:.875rem;font-weight:600;color:var(--color-text)}.sys-config__toggle-desc{font-size:.8rem;color:var(--color-text-secondary)}.sys-config__switch{position:relative;width:44px;height:24px;border-radius:var(--radius-full);border:none;background:var(--color-neutral);cursor:pointer;transition:background-color var(--transition-fast);flex-shrink:0;padding:0}.sys-config__switch--on{background:var(--color-primary)}.sys-config__switch-thumb{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:var(--shadow-xs);transition:transform var(--transition-fast);pointer-events:none}.sys-config__switch--on .sys-config__switch-thumb{transform:translate(20px)}.sys-config__coming-soon{display:flex;align-items:center;justify-content:center;min-height:300px;color:var(--color-text-secondary);font-size:1rem}.sys-config__rate-group{margin-bottom:var(--spacing-lg)}.sys-config__rate-group:last-child{margin-bottom:0}.sys-config__rate-group-title{font-size:.85rem;font-weight:600;color:var(--color-text);margin:0 0 var(--spacing-sm) 0}.sys-config__rate-fields{display:flex;gap:var(--spacing-md)}.sys-config__rate-fields .sys-config__field{flex:1;margin-bottom:0}.sys-config__list{list-style:none;padding:0;margin:0 0 var(--spacing-md) 0}.sys-config__list-item{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-sm) var(--spacing-md);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);font-size:.875rem;color:var(--color-text);font-family:var(--font-mono, monospace)}.sys-config__list-item+.sys-config__list-item{margin-top:var(--spacing-xs)}.sys-config__add-row{display:flex;gap:var(--spacing-sm)}.sys-config__add-row input{flex:1}.sys-config__field-desc{font-size:.8rem;color:var(--color-text-secondary);margin-bottom:var(--spacing-sm)}.sys-config__table{width:100%;border-collapse:collapse;margin-bottom:var(--spacing-md)}.sys-config__table th,.sys-config__table td{text-align:left;padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--color-border);font-size:.85rem}.sys-config__table th{font-weight:600;color:var(--color-text-secondary);font-size:.8rem;text-transform:uppercase;letter-spacing:.03em}.sys-config__table td{color:var(--color-text)}.sys-config__table-empty{text-align:center;color:var(--color-text-secondary);padding:var(--spacing-lg) var(--spacing-md)}.sys-config__btn--sm{padding:.3rem .75rem;font-size:.8rem;border-radius:var(--radius-sm)}.sys-config__btn--danger{background:var(--color-danger, #dc3545);color:#fff;border:none}.sys-config__btn--danger:hover:not(:disabled){opacity:.85}.sys-config__key-display{margin-top:var(--spacing-md);padding:var(--spacing-md);background:var(--color-bg);border:1px solid var(--color-warning, #f0ad4e);border-radius:var(--radius-md);font-size:.85rem}.sys-config__key-display p{margin:0 0 var(--spacing-xs) 0;color:var(--color-text);font-weight:600}.sys-config__key-display code{display:block;font-family:var(--font-mono, monospace);font-size:.85rem;color:var(--color-primary);word-break:break-all;background:var(--color-surface);padding:var(--spacing-sm);border-radius:var(--radius-sm)}.sys-config__loading-text{color:var(--color-text-secondary);font-size:.875rem;padding:var(--spacing-md) 0}.sys-config__table-total td{border-top:2px solid var(--color-border);border-bottom:none;padding-top:var(--spacing-md)}.sys-config__export-controls{display:flex;flex-direction:column;gap:var(--spacing-sm)}.sys-config__export-buttons{display:flex;gap:var(--spacing-sm);flex-wrap:wrap}.sys-config__role-badge{display:inline-flex;align-items:center;padding:.15rem .5rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.sys-config__role-badge--admin{background:var(--color-primary-light);color:var(--color-primary)}.sys-config__role-select{padding:.35rem .6rem;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);font-size:.8rem;cursor:pointer;outline:none;transition:border-color var(--transition-fast)}.sys-config__role-select:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.sys-config__role-select:disabled{opacity:.5;cursor:not-allowed}.sys-config__empty-text{color:var(--color-text-secondary);font-size:.875rem;font-style:italic;padding:var(--spacing-sm) 0}@media(max-width:768px){.sys-config{padding:var(--spacing-lg) var(--spacing-md)}.sys-config__body{flex-direction:column}.sys-config__nav{width:100%;flex-direction:row;overflow-x:auto;gap:.25rem}.sys-config__nav-item{white-space:nowrap}.sys-config__header-actions{width:100%;justify-content:flex-end}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-market{max-width:1200px;margin:0 auto;padding:var(--spacing-xl) var(--spacing-lg)}.agent-market__header{margin-bottom:var(--spacing-xl)}.agent-market__header h1{font-size:1.75rem;font-weight:700;color:var(--color-text);margin:0 0 var(--spacing-xs) 0}.agent-market__subtitle{color:var(--color-text-secondary);font-size:.95rem;margin:0}.agent-market__search{display:flex;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg)}.agent-market__search-input{flex:1;padding:.625rem 1rem;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-surface);color:var(--color-text);font-family:var(--font-sans);font-size:.9rem;outline:none;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.agent-market__search-input::placeholder{color:var(--color-text-secondary)}.agent-market__search-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.agent-market__search-btn{width:42px;height:42px;border:none;border-radius:var(--radius-full);background:var(--color-primary);color:var(--color-on-primary);font-size:1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color var(--transition-fast);flex-shrink:0}.agent-market__search-btn:hover{background:var(--color-primary-dark)}.agent-market__categories{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);margin-bottom:var(--spacing-xl)}.agent-market__category-pill{padding:.375rem 1rem;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-surface);color:var(--color-text-secondary);font-family:var(--font-sans);font-size:.8125rem;font-weight:500;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.agent-market__category-pill:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-light)}.agent-market__category-pill--active{background:var(--color-primary);color:var(--color-on-primary);border-color:var(--color-primary)}.agent-market__category-pill--active:hover{background:var(--color-primary-dark);border-color:var(--color-primary-dark);color:var(--color-on-primary)}.agent-market__section{margin-bottom:var(--spacing-2xl)}.agent-market__section-title{font-size:1.15rem;font-weight:700;color:var(--color-text);margin:0 0 var(--spacing-lg) 0}.agent-market__featured-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--spacing-lg)}.featured-card{position:relative;background:linear-gradient(135deg,#6366f1,#8b5cf6,#a855f7);border-radius:var(--radius-lg);padding:var(--spacing-lg);color:#fff;display:flex;flex-direction:column;gap:var(--spacing-sm);box-shadow:var(--shadow-md);transition:transform var(--transition-base),box-shadow var(--transition-base);overflow:hidden}.featured-card:before{content:"";position:absolute;top:-40%;right:-20%;width:200px;height:200px;background:#ffffff14;border-radius:50%;pointer-events:none}.featured-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.featured-card__emoji{font-size:2.5rem;line-height:1}.featured-card__badge{position:absolute;top:var(--spacing-md);right:var(--spacing-md);background:#fff3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:.2rem .6rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.featured-card__name{font-size:1.1rem;font-weight:700;margin:0}.featured-card__desc{font-size:.85rem;opacity:.85;margin:0;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.featured-card__meta{display:flex;align-items:center;gap:var(--spacing-md);font-size:.8rem;opacity:.9;margin-top:auto}.featured-card__rating{font-weight:600}.featured-card__usage{opacity:.8}.featured-card__cta{margin-top:var(--spacing-sm);padding:.5rem 1rem;border:1.5px solid rgba(255,255,255,.5);border-radius:var(--radius-md);background:#ffffff1f;color:#fff;font-family:var(--font-sans);font-size:.85rem;font-weight:600;cursor:pointer;transition:all var(--transition-fast);text-align:center}.featured-card__cta:hover{background:#ffffff40;border-color:#fffc}.agent-market__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--spacing-lg)}.assistant-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--spacing-lg);display:flex;flex-direction:column;gap:var(--spacing-sm);transition:transform var(--transition-base),box-shadow var(--transition-base),border-color var(--transition-base)}.assistant-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-primary)}.assistant-card__header{display:flex;align-items:flex-start;gap:var(--spacing-sm)}.assistant-card__emoji{font-size:2rem;line-height:1;flex-shrink:0}.assistant-card__title-row{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem}.assistant-card__name{font-size:.95rem;font-weight:700;color:var(--color-text);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assistant-card__category-badge{display:inline-block;background:var(--color-primary-light);color:var(--color-primary);padding:.1rem .5rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:600;white-space:nowrap;width:fit-content}.assistant-card__rating{color:var(--color-warning);font-size:.8rem;font-weight:600;flex-shrink:0;margin-left:auto;padding-top:.15rem}.assistant-card__desc{font-size:.85rem;color:var(--color-text-secondary);line-height:1.5;margin:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.assistant-card__tags{display:flex;flex-wrap:wrap;gap:.375rem}.assistant-card__tag{background:var(--color-light);color:var(--color-text-secondary);padding:.15rem .5rem;border-radius:var(--radius-full);font-size:.7rem;font-weight:500}.assistant-card__cta{margin-top:auto;padding:.5rem 1rem;border:none;border-radius:var(--radius-md);background:var(--color-primary);color:var(--color-on-primary);font-family:var(--font-sans);font-size:.85rem;font-weight:600;cursor:pointer;transition:background-color var(--transition-fast);text-align:center}.assistant-card__cta:hover{background:var(--color-primary-dark)}.security-score-badge{font-size:.75rem;font-weight:600;white-space:nowrap;flex-shrink:0}.security-warning{padding:var(--spacing-sm) var(--spacing-md);margin-bottom:var(--spacing-md);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-warning) 12%,transparent);border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent);color:var(--color-warning);font-size:.85rem;font-weight:500;line-height:1.5}@media(max-width:768px){.agent-market{padding:var(--spacing-lg) var(--spacing-md)}.agent-market__featured-grid,.agent-market__grid{grid-template-columns:1fr}.agent-market__header h1{font-size:1.4rem}}@media(max-width:480px){.agent-market__categories{gap:var(--spacing-xs)}.agent-market__category-pill{padding:.25rem .75rem;font-size:.75rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as ce,r as n,j as e}from"./index-BqzqZJ96.js";import{a as d}from"./api-B5psysvQ.js";import{u as oe}from"./useTranslation-B-8kenfJ.js";const S=["strict","standard","developer","unrestricted"],de=[{key:"templates.categories.all",value:""},{key:"templates.categories.customerService",value:"customer-service"},{key:"templates.categories.general",value:"general"},{key:"templates.categories.coding",value:"coding"},{key:"templates.categories.dataAnalysis",value:"data-analysis"},{key:"templates.categories.contentCreation",value:"content-creation"}],me={"customer-service":"templates.categories.customerService",sales:"templates.categories.sales",marketing:"templates.categories.marketing",devops:"templates.categories.devops",education:"templates.categories.education",personal:"templates.categories.personal",custom:"templates.categories.custom",general:"templates.categories.general",coding:"templates.categories.coding","data-analysis":"templates.categories.dataAnalysis","content-creation":"templates.categories.contentCreation"},ue={"customer-service":"💬",sales:"📈",marketing:"📣",devops:"⚙️",education:"📚",personal:"👤",general:"🤖",coding:"💻","data-analysis":"📊","content-creation":"✍️",custom:"🔧"};function X(a){return ue[a.category]??"🤖"}function pe(a){return a>=1e3?`${(a/1e3).toFixed(1)}k`:String(a)}function Z(a){return a===0?"var(--color-text-secondary)":a>=70?"var(--color-success)":a>=40?"var(--color-warning)":"var(--color-error)"}function Q(a){return a===0?"—":String(a)}function fe(){const{t:a}=oe(),ee=ce(),[j,te]=n.useState([]),[I,M]=n.useState(!0),[F,O]=n.useState(null),[C,ae]=n.useState(""),[_,se]=n.useState(""),[w,E]=n.useState("byok"),[f,N]=n.useState(null),[v,T]=n.useState(""),[B,o]=n.useState(null),[A,D]=n.useState(!1),[K,L]=n.useState("standard"),[h,x]=n.useState(null),[P,$]=n.useState("oauth"),[b,R]=n.useState(""),[z,k]=n.useState(!1),[y,r]=n.useState(!1),G=async(t,s)=>{M(!0),O(null);try{const i=new URLSearchParams;t&&i.set("search",t),s&&i.set("category",s),i.set("limit","50");const l=i.toString(),p=await d.get(`/templates${l?`?${l}`:""}`);te(p.items)}catch(i){O(i instanceof Error?i.message:a("templates.instantiate.failedToLoad"))}finally{M(!1)}};n.useEffect(()=>{G(C,_)},[_]);const q=()=>{G(C,_)},ne=t=>{t.key==="Enter"&&q()},U=async()=>{if(!(!f||!v.trim())){D(!0),o(null);try{const t=await d.post(`/templates/${f}/instantiate`,{instanceName:v.trim(),billingMode:w,...h?{securityProfile:K}:{}});N(null),T(""),x(null),ee(`/instances/${t.instance.id}`)}catch(t){o(t instanceof Error?t.message:a("templates.instantiate.failedToCreate"))}finally{D(!1)}}},V=t=>{let s=!1;const i=c=>{s||c?.type!=="salevoice_oauth_complete"||!c.success||!c.code||!c.state||(s=!0,g(),t({code:c.code,state:c.state}))};let l=null;try{l=new BroadcastChannel("salevoice_oauth"),l.onmessage=c=>i(c.data)}catch{}const p=c=>i(c.data);window.addEventListener("message",p);const m=c=>{if(!(c.key!=="salevoice_oauth_result"||!c.newValue))try{i(JSON.parse(c.newValue))}catch{}};window.addEventListener("storage",m);const g=()=>{l?.close(),window.removeEventListener("message",p),window.removeEventListener("storage",m);try{localStorage.removeItem("salevoice_oauth_result")}catch{}};return g},ie=async t=>{if(t.preventDefault(),!(!f||!v.trim())){if(H&&!z){r(!0),o(null);try{const s=await d.post("/oauth/salevoice/authorize",{}),i=V(async({code:p,state:m})=>{try{const g=await d.post("/oauth/salevoice/token",{code:p,state:m});await d.post("/credentials",{provider:"salevoice",credentialType:"api_key",value:g.accessToken,displayName:"SaleVoice (OAuth)"}),k(!0),r(!1),U()}catch(g){o(g instanceof Error?g.message:a("templates.instantiate.geoAuthFailed")),r(!1)}});window.open(s.authUrl,"salevoice_oauth","width=600,height=700,popup=yes")||(i(),o(a("templates.instantiate.geoAuthFailed")),r(!1))}catch(s){o(s instanceof Error?s.message:a("templates.instantiate.geoAuthFailed")),r(!1)}return}await U()}},Y=async t=>{N(t.id),T(`${t.name} Instance`),E(t.billingMode??"byok"),o(null),x(null),L("standard"),$("oauth"),R(""),k(!1),r(!1);try{const s=await d.get(`/templates/${t.id}/content`);s.security&&(x(s.security),L(s.security.minSecurityProfile??"standard"))}catch{}},re=async()=>{r(!0);try{const t=await d.post("/oauth/salevoice/authorize",{}),s=V(async({code:l,state:p})=>{try{const m=await d.post("/oauth/salevoice/token",{code:l,state:p});await d.post("/credentials",{provider:"salevoice",credentialType:"api_key",value:m.accessToken,displayName:"SaleVoice (OAuth)"}),k(!0),r(!1)}catch(m){o(m instanceof Error?m.message:a("templates.instantiate.geoAuthFailed")),r(!1)}});window.open(t.authUrl,"salevoice_oauth","width=600,height=700,popup=yes")||(s(),o(a("templates.instantiate.geoAuthFailed")),r(!1))}catch(t){o(t instanceof Error?t.message:a("templates.instantiate.geoAuthFailed")),r(!1)}},le=async()=>{if(b.trim()){r(!0);try{await d.post("/credentials",{provider:"salevoice",credentialType:"api_key",value:b.trim(),displayName:"SaleVoice (API Key)"}),k(!0),r(!1)}catch(t){o(t instanceof Error?t.message:a("templates.instantiate.geoSaveFailed")),r(!1)}}},J=j.filter(t=>t.featured),W=j,u=j.find(t=>t.id===f),H=u?.requiredCredentials.some(t=>t.provider==="salevoice")??!1;return I&&j.length===0?e.jsx("div",{className:"agent-market",children:a("templates.loading")}):e.jsxs("main",{className:"agent-market",children:[e.jsxs("header",{className:"agent-market__header",children:[e.jsx("h1",{children:a("templates.title")}),e.jsx("p",{className:"agent-market__subtitle",children:a("skillMarket.subtitle")})]}),F&&e.jsx("div",{className:"error-message",role:"alert",children:F}),e.jsxs("div",{className:"agent-market__search",children:[e.jsx("input",{type:"text",value:C,onChange:t=>ae(t.target.value),onKeyDown:ne,placeholder:a("templates.searchPlaceholder"),className:"agent-market__search-input"}),e.jsx("button",{className:"agent-market__search-btn",onClick:q,children:"🔍"})]}),e.jsx("div",{className:"agent-market__categories",children:de.map(({key:t,value:s})=>e.jsx("button",{className:`agent-market__category-pill${_===s?" agent-market__category-pill--active":""}`,onClick:()=>se(s),children:a(t)},s))}),J.length>0&&e.jsxs("section",{className:"agent-market__section",children:[e.jsx("h2",{className:"agent-market__section-title",children:a("skillMarket.featured")}),e.jsx("div",{className:"agent-market__featured-grid",children:J.map(t=>e.jsxs("div",{className:"featured-card",children:[e.jsx("div",{className:"featured-card__emoji",children:X(t)}),e.jsx("span",{className:"featured-card__badge",children:a("skillMarket.featuredBadge")}),e.jsx("h3",{className:"featured-card__name",children:t.name}),e.jsx("p",{className:"featured-card__desc",children:t.description}),e.jsxs("div",{className:"featured-card__meta",children:[e.jsxs("span",{className:"featured-card__rating",children:["★ ",t.rating.toFixed(1)]}),e.jsxs("span",{className:"featured-card__usage",children:[pe(t.usageCount)," ",a("skillMarket.usageCount",{count:t.usageCount})]}),e.jsxs("span",{className:"security-score-badge",style:{color:Z(t.securityScore)},children:["🛡 ",Q(t.securityScore)]})]}),e.jsx("button",{className:"featured-card__cta",onClick:()=>Y(t),children:a("templates.useTemplate")})]},t.id))})]}),e.jsxs("section",{className:"agent-market__section",children:[e.jsx("h2",{className:"agent-market__section-title",children:a("skillMarket.allAssistants")}),W.length===0&&!I&&e.jsx("div",{className:"info-message",children:a("templates.noTemplates")}),e.jsx("div",{className:"agent-market__grid",children:W.map(t=>e.jsxs("div",{className:"assistant-card",children:[e.jsxs("div",{className:"assistant-card__header",children:[e.jsx("span",{className:"assistant-card__emoji",children:X(t)}),e.jsxs("div",{className:"assistant-card__title-row",children:[e.jsx("h3",{className:"assistant-card__name",children:t.name}),e.jsx("span",{className:"assistant-card__category-badge",children:a(me[t.category]??"templates.categories.custom")})]}),e.jsxs("span",{className:"security-score-badge",style:{color:Z(t.securityScore)},children:["🛡 ",Q(t.securityScore)]}),e.jsxs("span",{className:"assistant-card__rating",children:["★ ",t.rating.toFixed(1)]})]}),e.jsx("p",{className:"assistant-card__desc",children:t.description}),t.tags.length>0&&e.jsx("div",{className:"assistant-card__tags",children:t.tags.slice(0,3).map(s=>e.jsx("span",{className:"assistant-card__tag",children:s},s))}),e.jsx("button",{className:"assistant-card__cta",onClick:()=>Y(t),children:a("templates.useTemplate")})]},t.id))})]}),f&&u&&e.jsx("div",{className:"modal-overlay",onClick:()=>{N(null),x(null)},children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"template-modal-title",onClick:t=>t.stopPropagation(),children:[e.jsx("h2",{id:"template-modal-title",children:a("templates.instantiate.title")}),e.jsx("p",{className:"template-meta",children:a("templates.instantiate.templateLabel",{name:u.name,version:u.version})}),u.requiredCredentials.filter(t=>t.provider!=="salevoice").length>0&&e.jsx("div",{className:"info-message",style:{marginBottom:"var(--spacing-md)"},children:a("templates.instantiate.credentialsRequired",{credentials:u.requiredCredentials.filter(t=>t.provider!=="salevoice").map(t=>`${t.provider} (${t.credentialType})`).join(", ")})}),B&&e.jsx("div",{className:"error-message",role:"alert",children:B}),u.securityScore>0&&u.securityScore<40&&e.jsxs("div",{className:"security-warning",role:"alert",children:["⚠️ ",a("templates.instantiate.lowSecurityWarning")]}),e.jsxs("form",{onSubmit:ie,children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"instance-name",children:a("templates.instantiate.instanceNameLabel")}),e.jsx("input",{type:"text",id:"instance-name",value:v,onChange:t=>T(t.target.value),required:!0})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("templates.instantiate.billingModeLabel")}),e.jsxs("div",{className:"billing-mode-options",children:[e.jsxs("button",{type:"button",className:`billing-mode-option${w==="platform"?" selected":""}`,onClick:()=>E("platform"),children:[e.jsx("strong",{children:a("templates.instantiate.platformProvided")}),e.jsx("span",{children:a("templates.instantiate.platformDescription")})]}),e.jsxs("button",{type:"button",className:`billing-mode-option${w==="byok"?" selected":""}`,onClick:()=>E("byok"),children:[e.jsx("strong",{children:a("templates.instantiate.bringYourOwnKey")}),e.jsx("span",{children:a("templates.instantiate.byokDescription")})]})]})]}),h&&e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{children:[a("templates.instantiate.securityProfileLabel"),h.minSecurityProfile&&e.jsx("span",{className:"template-official-badge",style:{marginLeft:"var(--spacing-xs)",fontSize:"0.75rem"},children:a("templates.instantiate.minSecurityBadge",{profile:h.minSecurityProfile})})]}),e.jsx("p",{className:"template-meta",style:{marginBottom:"var(--spacing-sm)"},children:a("templates.instantiate.securityProfileDescription")}),e.jsx("div",{className:"wizard-provider-grid",children:S.map(t=>{const s=S.indexOf(t),i=h.minSecurityProfile?S.indexOf(h.minSecurityProfile):S.length-1,l=s>i;return e.jsxs("button",{type:"button",className:`wizard-provider-card${K===t?" selected":""}${l?" disabled":""}`,onClick:()=>!l&&L(t),disabled:l,title:l?a("templates.instantiate.securityProfileDisabled"):void 0,children:[e.jsx("strong",{children:a(`wizard.security.profiles.${t}.title`)}),e.jsx("span",{style:{color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:a(`wizard.security.profiles.${t}.description`)})]},t)})})]}),H&&e.jsxs("div",{className:"form-group",style:{marginTop:"var(--spacing-md)"},children:[e.jsx("label",{children:a("templates.instantiate.geoCredentialLabel")}),e.jsx("p",{className:"template-meta",style:{marginBottom:"var(--spacing-sm)"},children:a("templates.instantiate.geoCredentialDescription")}),z?e.jsxs("div",{className:"info-message",style:{color:"var(--color-success)"},children:["✓ ",a("templates.instantiate.geoConnected")]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"billing-mode-options",style:{marginBottom:"var(--spacing-sm)"},children:[e.jsxs("button",{type:"button",className:`billing-mode-option${P==="oauth"?" selected":""}`,onClick:()=>$("oauth"),children:[e.jsx("strong",{children:a("templates.instantiate.geoOAuthLabel")}),e.jsx("span",{children:a("templates.instantiate.geoOAuthDescription")})]}),e.jsxs("button",{type:"button",className:`billing-mode-option${P==="apikey"?" selected":""}`,onClick:()=>$("apikey"),children:[e.jsx("strong",{children:a("templates.instantiate.geoApiKeyLabel")}),e.jsx("span",{children:a("templates.instantiate.geoApiKeyDescription")})]})]}),P==="oauth"?e.jsx("button",{type:"button",className:"featured-card__cta",style:{width:"100%"},onClick:re,disabled:y,children:a(y?"templates.instantiate.geoConnecting":"templates.instantiate.geoConnectButton")}):e.jsxs("div",{style:{display:"flex",gap:"var(--spacing-sm)"},children:[e.jsx("input",{type:"password",value:b,onChange:t=>R(t.target.value),placeholder:a("templates.instantiate.geoApiKeyPlaceholder"),style:{flex:1}}),e.jsx("button",{type:"button",onClick:le,disabled:!b.trim()||y,children:a(y?"templates.instantiate.geoConnecting":"templates.instantiate.geoSaveButton")})]})]})]}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("button",{type:"button",onClick:()=>{N(null),x(null)},disabled:A,children:a("common.buttons.cancel")}),e.jsx("button",{type:"submit",disabled:A||y||!v.trim(),children:a(y?"templates.instantiate.geoConnecting":A?"templates.instantiate.creating":"templates.instantiate.createButton")})]})]})]})})]})}export{fe as TemplatesPage};
|