@overlordai/server 1.0.79 → 1.0.80
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/package.json +4 -4
- package/public/assets/{AccessTokensPage-DGAc4uhy.js → AccessTokensPage-BvW-LCXG.js} +1 -1
- package/public/assets/{AdminPage-Dl6tHeRR.js → AdminPage-DiKZLhZW.js} +1 -1
- package/public/assets/{ApiReferencePage-BgkcfkYe.js → ApiReferencePage-CtZxcDHG.js} +1 -1
- package/public/assets/{ArchitecturePage-BLU7MpAk.js → ArchitecturePage-CfgUbG4O.js} +1 -1
- package/public/assets/{AuditLogPage-BwRjz54d.js → AuditLogPage-Ds63eciz.js} +1 -1
- package/public/assets/{BindPlatformPage-B92pH7M5.js → BindPlatformPage-Ch3hKXsj.js} +1 -1
- package/public/assets/{BotIntegrationPage-DIyadADc.js → BotIntegrationPage-B44RAprz.js} +1 -1
- package/public/assets/{BotManage-Bsqw0Xs0.js → BotManage-JS2VVo9Q.js} +1 -1
- package/public/assets/{BotSetupPage-KoWBRUO-.js → BotSetupPage-7A7ME_S2.js} +1 -1
- package/public/assets/{ChangelogPage-vdN9yYI7.js → ChangelogPage-bUtcbLB8.js} +1 -1
- package/public/assets/{CliReferencePage-CyuWBiWy.js → CliReferencePage-T5FnKwNb.js} +1 -1
- package/public/assets/{DeploymentPage-DgIWYDHb.js → DeploymentPage-CFCEZ4J0.js} +1 -1
- package/public/assets/{DevWorkflowPage-C4dsPqSa.js → DevWorkflowPage-CbOK_TWB.js} +1 -1
- package/public/assets/{DeveloperManage-CThq8pwt.js → DeveloperManage-rI_WZsAI.js} +1 -1
- package/public/assets/{DeveloperSetupPage-BBiPr8aW.js → DeveloperSetupPage-CBkNzG2U.js} +1 -1
- package/public/assets/{DocsIndexPage-DGO0O8af.js → DocsIndexPage-DOxm0c4A.js} +1 -1
- package/public/assets/{DocsLayout-B3843BNk.js → DocsLayout-7G58WOok.js} +1 -1
- package/public/assets/{DocsPrimitives-C-VEBJNk.js → DocsPrimitives-BvJeXx-N.js} +1 -1
- package/public/assets/{EditProjectPage-D_OVNzaU.js → EditProjectPage-DJIFLTQx.js} +1 -1
- package/public/assets/{EmptyState-kWEDv_B1.js → EmptyState-hMYCML5H.js} +1 -1
- package/public/assets/{EnvVariablesPage-mS_l-6FV.js → EnvVariablesPage-BTWK-RYB.js} +1 -1
- package/public/assets/{HomePage-BT2TWy4X.js → HomePage-CwpR1mFu.js} +1 -1
- package/public/assets/{InfoRow-DJJSU_E8.js → InfoRow-BW1-hzEo.js} +1 -1
- package/public/assets/{InstallationPage-p7ktRQZU.js → InstallationPage-B3UAtSk5.js} +1 -1
- package/public/assets/{LandingPage-PZJ0hmRb.js → LandingPage-CZkGfp7Q.js} +1 -1
- package/public/assets/{LocalDevelopmentPage-Bfuhpcrv.js → LocalDevelopmentPage-Xw-XLKFu.js} +1 -1
- package/public/assets/{LoginPage-DXWCX5ho.js → LoginPage-CgD8hhx1.js} +1 -1
- package/public/assets/{MetricBar-C0F56tIo.js → MetricBar-BipALWds.js} +1 -1
- package/public/assets/{NotFoundPage-l8x4TLrh.js → NotFoundPage-Vo8ScjY0.js} +1 -1
- package/public/assets/{OnboardingGuide-Dr3rP4YQ.js → OnboardingGuide-4p0KVULG.js} +1 -1
- package/public/assets/{PermissionsPage-CwUmSGmE.js → PermissionsPage-D-dPbXmI.js} +1 -1
- package/public/assets/{PipelineConfigPage-Dtr7I1MR.js → PipelineConfigPage-DN3pOwHI.js} +1 -1
- package/public/assets/{PipelineEditorPage-BDNhYmj3.js → PipelineEditorPage-DFf-w5EC.js} +1 -1
- package/public/assets/{ProfilePage-DhWIheta.js → ProfilePage-D3XfRaAT.js} +1 -1
- package/public/assets/{ProjectDetailPage-DvHpP1uP.js → ProjectDetailPage-8CAbe66G.js} +1 -1
- package/public/assets/{ProjectListPage-Z8yucTX_.js → ProjectListPage-gMfWMo25.js} +1 -1
- package/public/assets/{PtyTerminal-B7l-gWMv.js → PtyTerminal-D7XE_2mC.js} +1 -1
- package/public/assets/{QuickAuth-DWblmzDr.js → QuickAuth-Dj8yajQQ.js} +1 -1
- package/public/assets/{RemoveMemberConfirmDialog-B0e9xZ7v.js → RemoveMemberConfirmDialog-8czGU-Nx.js} +1 -1
- package/public/assets/{Select-7N_dTLsV.js → Select-DrLMTjZl.js} +1 -1
- package/public/assets/{SettingsPage-CMfiC5nO.js → SettingsPage-CLOxTZcJ.js} +1 -1
- package/public/assets/{Skeleton-6FU0_YU6.js → Skeleton-CCaX4pFY.js} +1 -1
- package/public/assets/{SkillPage-BZFIcxnH.js → SkillPage-BkXtU425.js} +1 -1
- package/public/assets/{TaskDetailPage-Zp05tlaD.js → TaskDetailPage-B_T8NVze.js} +1 -1
- package/public/assets/{TaskListPage-CRDO27i_.js → TaskListPage-Bi_uTExH.js} +1 -1
- package/public/assets/{TaskStatusBadge-dQQnDnEf.js → TaskStatusBadge-CbCSLOV8.js} +1 -1
- package/public/assets/{TerminalHomePage-DBZDlFto.js → TerminalHomePage-C0c-MnyI.js} +1 -1
- package/public/assets/{TokenManage-CJ3cgY3x.js → TokenManage-CQDv0Eab.js} +1 -1
- package/public/assets/{TotpSetupPage-eoX9Mlhu.js → TotpSetupPage-C3-OkdYF.js} +1 -1
- package/public/assets/{WorkerDetailPage-JfxixcaP.js → WorkerDetailPage-D6FcW7Z_.js} +1 -1
- package/public/assets/{WorkerListPage-7JF5Tnk5.js → WorkerListPage-Dfa9aeD1.js} +1 -1
- package/public/assets/{WorkerOperationsPage-ckVjWB0R.js → WorkerOperationsPage-xyZ3H_E2.js} +1 -1
- package/public/assets/{WorkerSetupGuidePage-DnGo1oDf.js → WorkerSetupGuidePage-DPqS45ur.js} +1 -1
- package/public/assets/{WorkerSetupPage-DRuKeDtG.js → WorkerSetupPage-ZXVMNRlb.js} +1 -1
- package/public/assets/{arrow-left-BsnKNIab.js → arrow-left-Bl0LBeAl.js} +1 -1
- package/public/assets/{arrow-right-DvF49iN7.js → arrow-right-CTYhrhZ-.js} +1 -1
- package/public/assets/{bot-BC5rmLk6.js → bot-CaddAHyz.js} +1 -1
- package/public/assets/{chevron-right-BH4dxIzm.js → chevron-right-EZcefS0d.js} +1 -1
- package/public/assets/{copy-BOg9bSye.js → copy-CMzQmuD1.js} +1 -1
- package/public/assets/{download-C3L4KBc4.js → download-BMjlF4Rx.js} +1 -1
- package/public/assets/{external-link-HoixWzjI.js → external-link-AtLj8DBS.js} +1 -1
- package/public/assets/{index-8m9b3JE1.js → index-BAG9QOi-.js} +2 -2
- package/public/assets/{index-BR0pYpxj.css → index-D6SxbKAh.css} +1 -1
- package/public/assets/{key-BJqXx8BA.js → key-BMP3yK7n.js} +1 -1
- package/public/assets/{loader-circle-iD_O1taV.js → loader-circle-BAOLSbUU.js} +1 -1
- package/public/assets/{pencil-CSfBFc6K.js → pencil-QjIqOV1r.js} +1 -1
- package/public/assets/{plus-5xvP19Ee.js → plus-C6aWA4Jt.js} +1 -1
- package/public/assets/{rotate-ccw-BC4FbLxQ.js → rotate-ccw-Bznyv9fR.js} +1 -1
- package/public/assets/{scroll-text-DKrW2ss5.js → scroll-text-DDEdUdQh.js} +1 -1
- package/public/assets/{settings-BP2iKcyn.js → settings-BpG7vGJ1.js} +1 -1
- package/public/assets/{sparkles-Bymlr6fb.js → sparkles-C-udvRYP.js} +1 -1
- package/public/assets/{status-colors-BDSwDnu_.js → status-colors-gROOUXnv.js} +1 -1
- package/public/assets/{task-constants-B7ko_3HU.js → task-constants-B3cTYqAf.js} +1 -1
- package/public/assets/{trash-2-CSvPAyap.js → trash-2-BCijY9rW.js} +1 -1
- package/public/assets/{useFetch-D_NgBHi6.js → useFetch-CXNysRDt.js} +1 -1
- package/public/assets/{users-CT_MHZFm.js → users-Bkh1w0hw.js} +1 -1
- package/public/assets/{wifi-eh4UVcIT.js → wifi-BwoJqcTY.js} +1 -1
- package/public/assets/{workflow-Q7HzwTyy.js → workflow-DpYRGTE2.js} +1 -1
- package/public/index.html +2 -2
- package/public/sw.js +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LandingPage-CZkGfp7Q.js","assets/arrow-right-CTYhrhZ-.js","assets/bot-CaddAHyz.js","assets/workflow-DpYRGTE2.js","assets/users-Bkh1w0hw.js","assets/copy-CMzQmuD1.js","assets/HomePage-CwpR1mFu.js","assets/TaskStatusBadge-CbCSLOV8.js","assets/status-colors-gROOUXnv.js","assets/Skeleton-CCaX4pFY.js","assets/OnboardingGuide-4p0KVULG.js","assets/chevron-right-EZcefS0d.js","assets/date-BdNtiQTP.js","assets/string-B39tzdVK.js","assets/useFetch-CXNysRDt.js","assets/TerminalHomePage-C0c-MnyI.js","assets/task-constants-B3cTYqAf.js","assets/PtyTerminal-D7XE_2mC.js","assets/PtyTerminal-Beg8tuEN.css","assets/Select-DrLMTjZl.js","assets/plus-C6aWA4Jt.js","assets/rotate-ccw-Bznyv9fR.js","assets/wifi-BwoJqcTY.js","assets/TaskListPage-Bi_uTExH.js","assets/EmptyState-hMYCML5H.js","assets/TaskDetailPage-B_T8NVze.js","assets/arrow-left-Bl0LBeAl.js","assets/external-link-AtLj8DBS.js","assets/loader-circle-BAOLSbUU.js","assets/WorkerListPage-Dfa9aeD1.js","assets/MetricBar-BipALWds.js","assets/WorkerSetupGuidePage-DPqS45ur.js","assets/key-BMP3yK7n.js","assets/download-BMjlF4Rx.js","assets/settings-BpG7vGJ1.js","assets/WorkerDetailPage-D6FcW7Z_.js","assets/InfoRow-BW1-hzEo.js","assets/trash-2-BCijY9rW.js","assets/ProjectListPage-gMfWMo25.js","assets/ProjectDetailPage-8CAbe66G.js","assets/RemoveMemberConfirmDialog-8czGU-Nx.js","assets/pencil-QjIqOV1r.js","assets/EditProjectPage-DJIFLTQx.js","assets/PipelineEditorPage-DFf-w5EC.js","assets/ProfilePage-D3XfRaAT.js","assets/password-CHk45-jw.js","assets/AccessTokensPage-BvW-LCXG.js","assets/CliReferencePage-T5FnKwNb.js","assets/QuickAuth-Dj8yajQQ.js","assets/ApiReferencePage-CtZxcDHG.js","assets/SkillPage-BkXtU425.js","assets/DocsPrimitives-BvJeXx-N.js","assets/DocsLayout-7G58WOok.js","assets/sparkles-C-udvRYP.js","assets/InstallationPage-B3UAtSk5.js","assets/DeveloperSetupPage-CBkNzG2U.js","assets/WorkerSetupPage-ZXVMNRlb.js","assets/BotSetupPage-7A7ME_S2.js","assets/LocalDevelopmentPage-Xw-XLKFu.js","assets/DeploymentPage-CFCEZ4J0.js","assets/PipelineConfigPage-DN3pOwHI.js","assets/DevWorkflowPage-CbOK_TWB.js","assets/ArchitecturePage-CfgUbG4O.js","assets/DocsIndexPage-DOxm0c4A.js","assets/AdminPage-DiKZLhZW.js","assets/scroll-text-DDEdUdQh.js","assets/DeveloperManage-rI_WZsAI.js","assets/BotManage-JS2VVo9Q.js","assets/TokenManage-CQDv0Eab.js","assets/AuditLogPage-Ds63eciz.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var Zy=Object.defineProperty;var Im=r=>{throw TypeError(r)};var Ky=(r,u,s)=>u in r?Zy(r,u,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[u]=s;var Ve=(r,u,s)=>Ky(r,typeof u!="symbol"?u+"":u,s),_s=(r,u,s)=>u.has(r)||Im("Cannot "+s);var U=(r,u,s)=>(_s(r,u,"read from private field"),s?s.call(r):u.get(r)),Pt=(r,u,s)=>u.has(r)?Im("Cannot add the same private member more than once"):u instanceof WeakSet?u.add(r):u.set(r,s),Zt=(r,u,s,o)=>(_s(r,u,"write to private field"),o?o.call(r,s):u.set(r,s),s),Se=(r,u,s)=>(_s(r,u,"access private method"),s);var Pm=(r,u,s,o)=>({set _(f){Zt(r,u,f,s)},get _(){return U(r,u,o)}});(function(){const u=document.createElement("link").relList;if(u&&u.supports&&u.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))o(f);new MutationObserver(f=>{for(const h of f)if(h.type==="childList")for(const _ of h.addedNodes)_.tagName==="LINK"&&_.rel==="modulepreload"&&o(_)}).observe(document,{childList:!0,subtree:!0});function s(f){const h={};return f.integrity&&(h.integrity=f.integrity),f.referrerPolicy&&(h.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?h.credentials="include":f.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function o(f){if(f.ep)return;f.ep=!0;const h=s(f);fetch(f.href,h)}})();function Jy(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var ys={exports:{}},ti={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
@@ -232,4 +232,4 @@ Please change the parent <Route path="${H}"> to <Route path="${H==="/"?"*":`${H}
|
|
|
232
232
|
you will need to set up 2fa again on your next login.`,regenerate_2fa:"regenerate 2FA",regenerating:"regenerating...",access_tokens:"access tokens",access_tokens_desc:"// manage personal access tokens for cli & api",git_info_updated:"git info updated.",failed_to_update_git_info:"failed to update git info.",two_fa_reset:"2fa has been reset. please set up your authenticator again on next login.",failed_to_regenerate_2fa:"failed to regenerate 2fa.",failed_to_load_profile:"failed to load profile.",unable_to_load_profile:"// unable to load profile information",personal_settings:"// personal settings",password_length_10_20:"password must be between 10 and 20 characters.",password_hint_10_20:"// 10-20 characters, letters, numbers, and special characters",current_totp_code:"current TOTP code",totp_code_placeholder:"6-digit code",totp_code_required:"please enter your current 6-digit totp code to regenerate 2fa.",two_fa_regenerated:"2fa regenerated. you will need to set it up again on next login.",totp_code_invalid:"invalid totp code or failed to regenerate 2fa.",platform_accounts:"platform accounts",not_linked:"not linked",bind_hint:'send "bind" to the bot in lark or slack to link your account.'},access_tokens:{title:"access tokens",subtitle:"// personal access tokens",create_token:"create token",no_tokens:"no personal access tokens",create_token_desc:"create a token to authenticate with the cli or api",copy_token_warning:"// copy your token now. you will not be able to see it again.",token_name:"token name",token_name_placeholder:"my-cli-token",expires_in:"expires in",days_30:"30 days",days_90:"90 days",days_365:"365 days",no_expiry:"no expiry",token_created:"token created.",failed_to_create_token:"failed to create token.",token_revoked:"token revoked.",failed_to_revoke_token:"failed to revoke token.",failed_to_load_tokens:"failed to load tokens.",revoke:"revoke",revoke_token:"revoke token",last_used:"last used",expires_at:"expires at",token:"token",created:"created",expires:"expires",revoke_confirm:'are you sure you want to revoke "{name}"? this action cannot be undone.',create_personal_access_token:"// create personal access token",tokens_authenticate_desc:"// tokens authenticate the ov cli and api requests",revoke_token_title:"// revoke token",token_label_required:"token label is required."},admin:{title:"admin",subtitle:"// system control",tab_developers:"developers",tab_bots:"bots",tab_tokens:"worker tokens",tab_audit_logs:"audit logs",tab_settings:"settings",developers_title:"admin / developers",developers_subtitle:"// developer account management",create_developer:"create developer",search_developers:"search developers...",no_matching_developers:"no matching developers",no_developers_found:"no developers found",try_adjusting_search:"try adjusting your search query",username:"username",display_name:"display name",role:"role",status:"status",two_fa_status:"2FA status",dev_name:"dev name",totp:"totp",reset_2fa:"reset 2fa",deactivate:"deactivate",activate:"activate",create_developer_title:"create developer",create_developer_desc:"// add a new developer account",edit_developer_title:"edit developer",edit_developer_desc:"// update developer account settings",developer_created:"developer created.",developer_updated:"developer updated.",failed_to_create_developer:"failed to create developer",failed_to_update_developer:"failed to update developer",confirm_reset_2fa:'reset 2fa for "{name}"? they will need to set up 2fa again on next login.',two_fa_reset:"2fa has been reset.",failed_to_reset_2fa:"failed to reset 2fa",confirm_deactivate:'deactivate "{name}"? they will not be able to log in.',confirm_activate:'activate "{name}"?',developer_deactivated:"developer deactivated.",developer_activated:"developer activated.",failed_to_update_status:"failed to update developer status.",create_first_developer:"create your first developer to get started",all_fields_required:"all fields are required.",password_length_error:"password must be between 10 and 20 characters.",password_complexity_error:"password must contain at least one letter, one digit, and one special character.",password_hint:"// must be 10-20 characters with letters, digits, and special characters.",display_name_required:"display name is required.",demote_self_warning:"you are about to demote yourself from admin. the system must have at least one admin. please verify another admin exists before proceeding.",demote_self_inline_warning:"// warning: you are demoting yourself from admin. ensure at least one other admin exists.",lark_uid:"lark open ID",slack_uid:"slack user ID",platform_accounts:"platform accounts",reset_2fa_confirm_message:"are you sure you want to reset two-factor authentication for",reset_2fa_audit_note:"// the user will be required to set up 2fa again on their next login. this action is recorded in the audit log.",resetting:"resetting...",bots_title:"admin / bots",bots_subtitle:"// bot instance management",create_bot:"create bot",no_bots_configured:"no bots configured",add_bot_desc:"add a bot instance to enable chat integrations with lark or slack",bot_name:"bot name",platform:"platform",app_id:"app ID",lark:"lark",slack:"slack",delete_bot:"delete bot",delete_bot_confirm:'delete bot "{name}"? this cannot be undone.',bot_deleted:"bot deleted.",failed_to_delete_bot:"failed to delete bot.",bot_created:"bot created.",failed_to_create_bot:"failed to create bot",chat_bindings:"chat bindings",chat_bindings_subtitle:"// all integrations",no_chat_bindings:"// no chat bindings configured",chat_id:"chat ID",chat_name:"chat name",project:"project",bot:"bot",edit_bot:"edit bot",name_and_app_id_required:"name and app id are required.",app_secret_required:"app secret is required for new bots.",app_secret:"app secret",app_secret_keep_current:"app secret (leave empty to keep current)",webhook_url_optional:"webhook URL (optional)",lark_feishu:"lark (feishu)",failed_to_update_bot:"failed to update bot",bot_token:"bot token",bot_token_keep_current:"bot token (leave empty to keep current)",bot_token_placeholder:"xoxb-...",bot_token_hint:"// OAuth & Permissions → Bot User OAuth Token",signing_secret:"signing secret",signing_secret_keep_current:"signing secret (leave empty to keep current)",signing_secret_placeholder:"your signing secret",signing_secret_hint:"// Basic Information → App Credentials → Signing Secret",app_secret_hint_lark:"// lark open platform → app credentials → app secret",app_id_hint_slack:"// Basic Information → App ID",app_id_hint_lark:"// lark open platform → app id",webhook_config:"// webhook configuration",webhook_config_hint_slack:"// copy these URLs to your Slack app settings",webhook_config_hint_lark:"// copy this URL to event subscriptions → request url",webhook_events_url:"events url",webhook_interact_url:"interactivity url",webhook_commands_url:"slash commands url",webhook_request_url:"request url",slack_events_hint:"// paste in Event Subscriptions → Request URL",slack_interact_hint:"// paste in Interactivity & Shortcuts → Request URL",slack_commands_hint:"// paste in Slash Commands → Request URL",invalid_bot_token:"// bot token must start with xoxb-",signing_secret_required:"// signing secret is required for Slack bots",no_chat_bindings_for_bot:"// no chat bindings configured for this bot.",add_chat_binding_desc:"// add chat binding",add_binding:"add binding",failed_to_add_binding:"failed to add binding",tokens_title:"admin / worker tokens",tokens_subtitle:"// worker registration token management",generate_token:"generate token",no_worker_tokens:"no worker tokens",generate_token_desc:"generate a token to register a new worker",label:"label",purpose:"purpose",expires_at:"expires at",token_generated:"token generated.",failed_to_generate_token:"failed to generate token.",token_revoked:"token revoked.",failed_to_revoke_token:"failed to revoke token.",revoke_token:"revoke token",revoke_token_confirm:'revoke token "{label}"? this cannot be undone.',show_revoked:"show revoked",hide_revoked:"hide revoked",audit_title:"admin / audit logs",audit_subtitle:"// system activity audit trail",all_actions:"all actions",filter_by_user:"filter by user...",no_audit_entries:"no audit log entries",audit_logs_appear:"audit logs will appear here as actions are performed in the system",timestamp:"timestamp",user_id:"user ID",action:"action",resource:"resource",detail:"detail",ip:"ip",action_login:"login",action_logout:"logout",action_create:"create",action_update:"update",action_delete:"delete",action_revoke:"revoke",action_reset_2fa:"reset 2FA",action_generate_token:"generate token",showing_entries:"showing {count} entries",revoke:"revoke",generate_worker_token_title:"> generate worker token",create_one_time_token:"// create a one-time registration token",label_identifies_worker:"// identifies which worker this token is for",generating:"generating...",generate:"generate",worker_registered:"> worker registered",worker_token_generated:"> worker token generated",run_command_desc:"// run this command on the target machine to register the worker",token_shown_once:"// this token will only be shown once. copy the command before closing.",setup_command:"setup command",waiting_for_worker:"// waiting for worker to register...",token_not_yet_used:"// token not yet used. the worker can still register later using this token.",worker_registered_success:"// worker registered successfully",worker:"worker",copied_wait_for_worker:"copied — wait for worker",close_worker_can_register:"close // worker can still register",view_worker:"view worker",label_required:"label is required.",settings_title:"admin / settings",settings_subtitle:"// global system configuration",save_settings:"save settings",settings_saved:"settings saved",failed_to_save_settings:"failed to save settings",loading_settings:"// loading settings...",scheduling:"> scheduling",heartbeat:"> heartbeat",output:"> output",defaults:"> defaults",max_concurrent_tasks:"max concurrent tasks per worker",max_concurrent_tasks_desc:"// maximum number of tasks a single worker can run simultaneously",task_timeout:"task timeout minutes",task_timeout_desc:"// auto-cancel tasks after this many minutes of inactivity",heartbeat_interval:"heartbeat interval seconds",heartbeat_interval_desc:"// expected interval between worker heartbeats",worker_offline_threshold:"worker offline threshold seconds",worker_offline_threshold_desc:"// mark worker offline after missing heartbeats for this duration",default_agent_type:"default agent type",default_agent_type_desc:"// default agent type for new projects",server_url:"server URL",server_url_desc:"// public server url used in worker setup instructions",chat_binding_title:"// chat bindings — {name}",chat_binding_no_bindings:"// no chat bindings configured for this bot.",chat_binding_add:"// add chat binding",chat_binding_id_placeholder:"platform chat/group id",chat_binding_name_placeholder:"display name for the chat",chat_binding_select_project:"select project...",chat_binding_all_fields_required:"all fields are required.",chat_binding_adding:"adding...",pat_label_required:"label is required.",pat_failed_to_generate:"failed to generate token",pat_label_placeholder:"e.g. build-server-03"},landing:{overlord:"overlord",version_badge:"self-hosted · bring your own subscriptions and machines",hero_line1:"turn your subscriptions / machines into",hero_turn_your:"turn your",hero_into:"into",hero_word_subscriptions:"subscriptions",hero_word_machines:"machines",hero_highlight:"a dev team that never sleeps.",hero_desc:"dispatch coding tasks across your machine fleet. ai agents execute in parallel — you watch, jump in, or come back to finished pull requests.",get_started:"get started",read_docs:"read docs",how_it_works:"how it works",three_steps:"from task description to merged pull request.",step_n:"step {n}",step_define:"connect your fleet",step_define_desc:"register your machines as workers. each one runs ai agents — claude code, cursor, codex — using your existing subscriptions.",step_dispatch:"send a task",step_dispatch_desc:"describe what you want from slack, lark, cli, or the web dashboard. overlord finds the best available machine and starts the ai agent automatically.",step_monitor:"watch or walk away",step_monitor_desc:"live terminal streams agent output to your browser. jump in to guide the agent, or come back later to a finished pull request.",everything_you_need:"everything you need",complete_platform:"self-hosted. your machines, your ai subscriptions, your control.",feature_terminal:"real-time pty terminal",feature_terminal_desc:"stream live agent output directly in the browser. full xterm.js integration with scrollback and search.",feature_multi_agent:"multi-agent support",feature_multi_agent_desc:"first-class support for claude code, cursor, and codex. route tasks to the right agent automatically.",feature_routing:"smart task routing",feature_routing_desc:"intelligent scheduling across your machine fleet. tasks land on the best available worker every time.",feature_pipeline:"pipeline automation",feature_pipeline_desc:"chain tasks into multi-stage pipelines. build, test, and deploy in one continuous flow.",feature_collab:"team collaboration",feature_collab_desc:"project-level permissions, audit logs, and shared dashboards. keep your whole team in sync.",feature_pool:"pool subscriptions, maximize value",feature_pool_desc:"every team member's ai subscription goes into a shared pool — everyone can use any seat. no idle subscriptions, no duplicate costs. the bigger your team, the more you save.",feature_trigger:"trigger from everywhere",feature_trigger_desc:"slack message, lark bot, cli command, or web dashboard — create tasks from whatever tool you already use. phone, laptop, tablet, it all works.",feature_remote:"code from anywhere",feature_remote_desc:"on the bus, at a café, or away from your desk — dispatch tasks from your phone or laptop and your fleet keeps coding. come back to finished pull requests.",feature_security:"secure by design",feature_security_desc:"totp two-factor auth, scoped api tokens, and full audit trail. enterprise-ready from day one.",install_title:"get up and running",install_desc:"three components, three commands. deploy in minutes.",install_command:"npm install -g @overlordai/developer-cli",setup_step_1_title:"deploy the server",setup_step_1_desc:"install overlord and start the central server. it manages all tasks, authentication, and real-time communication.",setup_step_1_command:`npm install -g @overlordai/cli @overlordai/server
|
|
233
233
|
overlord install`,setup_step_1_link:"installation guide",setup_step_2_title:"register workers",setup_step_2_desc:"set up worker machines that execute tasks. each worker runs ai agents in isolated workspaces with full git integration.",setup_step_2_command:`npm install -g @overlordai/cli @overlordai/worker
|
|
234
234
|
overlord setup worker`,setup_step_2_link:"worker setup guide",setup_step_3_title:"connect as developer",setup_step_3_desc:"install the developer cli to create tasks, attach to running sessions, and monitor progress from your terminal.",setup_step_3_command:`npm install -g @overlordai/developer-cli
|
|
235
|
-
ov login https://overlord.yourdomain.com`,setup_step_3_link:"development workflow",go_to_app:"open app",documentation:"documentation",api:"api",copy_install_command:"copy install command"},docs:{cli_reference:"cli",cli_subtitle:"// command-line tools",api_reference:"api",api_subtitle:"// rest api endpoints",quick_start:"// quick start",developer_cli:"developer cli (ov)",admin_cli:"admin cli (overlord)",authentication:"// authentication",usage:"usage",flags:"flags",example:"example",request_body:"request body",response:"response",quick_start_with_token:"// quick start with your token",replace_token_hint:"// replace <your-token> with the actual token value from your access tokens page",cli_tools_desc:"// overlord provides two cli tools: {ov} (developer cli) and {overlord} (admin/ops cli)",api_base_url_desc:"// base url: {url} · all endpoints return json · auth via bearer token in authorization header",docs_nav_getting_started:"// getting started",docs_nav_guides:"// guides",docs_nav_reference:"// reference",docs_nav_other:"// other",docs_installation:"installation",docs_developer_setup:"developer setup",docs_worker_setup:"worker setup",docs_bot_setup:"bot setup",docs_local_dev:"local development",docs_worker_ops:"worker operations",docs_deployment:"deployment",docs_bot_integration:"bot integration",docs_pipeline:"pipeline config",docs_dev_workflow:"dev workflow",docs_cli:"cli reference",docs_api:"api reference",docs_skill:"skill reference",docs_permissions:"permissions & roles",docs_env_vars:"environment variables",docs_architecture:"architecture",docs_changelog:"changelog",docs_menu:"docs menu",docs_back:"< back",docs_all_title:"// all documentation",docs_all_subtitle:"browse all guides, references, and resources",docs_desc_installation:"install overlord server and cli tools",docs_desc_developer_setup:"set up your local development environment",docs_desc_worker_setup:"register and configure worker machines",docs_desc_bot_setup:"connect lark or slack bots to overlord",docs_desc_local_dev:"run and debug overlord locally",docs_desc_worker_ops:"manage worker lifecycle and monitoring",docs_desc_deployment:"deploy overlord to production servers",docs_desc_bot_integration:"interactive cards, adapter pattern, troubleshooting",docs_desc_pipeline:"define multi-stage task pipelines",docs_desc_dev_workflow:"git workflow, branching, and merge requests",docs_desc_cli:"cli command reference",docs_desc_api:"http api endpoint reference",docs_desc_skill:"custom skill definitions and configuration",docs_desc_permissions:"roles, access control, and authorization",docs_desc_env_vars:"environment variables for server and worker",docs_desc_architecture:"system architecture and component overview",docs_desc_changelog:"version history and release notes"},onboarding:{getting_started:"// getting started",completed_count:"{done}/{total} completed",dismiss:"dismiss",all_done:"all set! you're ready to go.",admin_create_project_title:"create your first project",admin_create_project_desc:"set up a project with a git repo and pipeline",admin_register_worker_title:"register a worker",admin_register_worker_desc:"generate a token and set up a worker to run tasks",admin_create_developer_title:"create a developer account",admin_create_developer_desc:"add team members who can create and monitor tasks",admin_configure_bot_title:"configure a chat bot",admin_configure_bot_desc:"register a Lark or Slack bot to enable task management via chat",admin_first_task_title:"create your first task",admin_first_task_desc:"verify the full pipeline works end-to-end",lead_view_projects_title:"view your projects",lead_view_projects_desc:"check the projects assigned to you",lead_configure_pipeline_title:"configure a pipeline",lead_configure_pipeline_desc:"set up stages for your project workflow",lead_add_member_title:"add a team member",lead_add_member_desc:"invite developers to your project",lead_first_task_title:"create your first task",lead_first_task_desc:"submit a task and watch it execute",dev_install_cli_title:"install the ov cli",dev_install_cli_desc:"npm install -g @overlordai/developer-cli",dev_setup_cli_title:"run ov setup",dev_setup_cli_desc:"connect to the server and authenticate",dev_link_chat_title:"link your chat account",dev_link_chat_desc:'send "bind" to the bot in Lark or Slack to connect your account',dev_view_projects_title:"explore projects",dev_view_projects_desc:"browse available projects and their pipelines",dev_first_task_title:"create your first task",dev_first_task_desc:"submit a task via web or cli",go_to_projects:"go to projects",go_to_workers:"go to workers",go_to_tasks:"go to tasks",go_to_bots:"manage bots",manage_developers:"manage developers",cli:"cli",setup_guide:"setup guide"},bind:{title:"// link platform account",linking:"linking your account...",success:"account linked successfully!",success_detail:"your {platform} account has been connected. you can now use bot commands.",error:"failed to link account",invalid_token:'this link is invalid or has expired. send "bind" to the bot again to get a new link.',back_to_home:"go to dashboard",no_token:"no bind token provided."},pwa_install:{title:"overlord://install",command:"overlord --install",desc_1:"add to home screen for standalone app experience",desc_2:"works offline · full-screen · instant launch",install:"y — install",skip:"n — skip",ios_command:"install --manual",ios_step_1:"tap share button in safari toolbar",ios_step_2:'scroll down → tap "add to home screen"',ios_step_3:'tap "add" to confirm'},terminal_home:{title:"terminal",select_project:"project...",all_projects:"all projects",task_description_placeholder:"describe the task...",new_task:"new task",no_active_tasks:"no active tasks",create_task_hint:"create a task using the bar above to get started"}};function Sb(r,u){const s=u.split(".");let o=r;for(const f of s){if(o==null||typeof o!="object")return u;o=o[f]}return typeof o=="string"?o:u}function kb(r,u){return u?r.replace(/\{(\w+)\}/g,(s,o)=>u[o]!=null?String(u[o]):`{${o}}`):r}function Hr(r,u){return kb(Sb(xb,r),u)}function Jt(){return{t:g.useCallback((u,s)=>Hr(u,s),[])}}function rp(){const{theme:r,setTheme:u}=ip(),{t:s}=Jt(),o=r==="dark"||r==="system"&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches;function f(){u(o?"light":"dark")}return m.jsx("button",{onClick:f,className:"flex items-center gap-1.5 rounded-[4px] p-2 text-[var(--text-secondary)] transition-colors hover:bg-[var(--border)] hover:text-[var(--text-primary)]","aria-label":s(o?"common.switch_to_light":"common.switch_to_dark"),title:s(o?"common.light_mode":"common.dark_mode"),children:o?m.jsx(cb,{size:16}):m.jsx(ib,{size:16})})}class Ds extends Error{constructor(s,o,f){const h=s.status||s.status===0?s.status:"",_=s.statusText??"",x=`${h} ${_}`.trim(),v=x?`status code ${x}`:"an unknown error";super(`Request failed with ${v}: ${o.method} ${o.url}`);Ve(this,"response");Ve(this,"request");Ve(this,"options");this.name="HTTPError",this.response=s,this.request=o,this.options=f}}class up extends Error{constructor(s){let o="Non-error value was thrown";try{typeof s=="string"?o=s:s&&typeof s=="object"&&"message"in s&&typeof s.message=="string"&&(o=s.message)}catch{}super(o);Ve(this,"name","NonError");Ve(this,"value");this.value=s}}class js extends Error{constructor(s){const o=s!=null&&s.cause?s.cause instanceof Error?s.cause:new up(s.cause):void 0;super(s!=null&&s.code?`Forced retry: ${s.code}`:"Forced retry",o?{cause:o}:void 0);Ve(this,"name","ForceRetryError");Ve(this,"customDelay");Ve(this,"code");Ve(this,"customRequest");this.customDelay=s==null?void 0:s.delay,this.code=s==null?void 0:s.code,this.customRequest=s==null?void 0:s.request}}const xh=(()=>{let r=!1,u=!1;const s=typeof globalThis.ReadableStream=="function",o=typeof globalThis.Request=="function";if(s&&o)try{u=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type")}catch(f){if(f instanceof Error&&f.message==="unsupported BodyInit type")return!1;throw f}return r&&!u})(),Eb=typeof globalThis.AbortController=="function",op=typeof globalThis.AbortSignal=="function"&&typeof globalThis.AbortSignal.any=="function",wb=typeof globalThis.ReadableStream=="function",Tb=typeof globalThis.FormData=="function",sp=["get","post","put","patch","head","delete"],jb={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*",bytes:"*/*"},Rs=2147483647,Rb=new TextEncoder().encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length,cp=Symbol("stop");class fp{constructor(u){Ve(this,"options");this.options=u}}const Ab=r=>new fp(r),zb={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0,context:!0},Ob={next:!0},Cb={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,duplex:!0},Db=r=>{if(!r)return 0;if(r instanceof FormData){let u=0;for(const[s,o]of r)u+=Rb,u+=new TextEncoder().encode(`Content-Disposition: form-data; name="${s}"`).length,u+=typeof o=="string"?new TextEncoder().encode(o).length:o.size;return u}if(r instanceof Blob)return r.size;if(r instanceof ArrayBuffer)return r.byteLength;if(typeof r=="string")return new TextEncoder().encode(r).length;if(r instanceof URLSearchParams)return new TextEncoder().encode(r.toString()).length;if("byteLength"in r)return r.byteLength;if(typeof r=="object"&&r!==null)try{const u=JSON.stringify(r);return new TextEncoder().encode(u).length}catch{return 0}return 0},dp=(r,u,s)=>{let o,f=0;return r.pipeThrough(new TransformStream({transform(h,_){if(_.enqueue(h),o){f+=o.byteLength;let x=u===0?0:f/u;x>=1&&(x=1-Number.EPSILON),s==null||s({percent:x,totalBytes:Math.max(u,f),transferredBytes:f},o)}o=h},flush(){o&&(f+=o.byteLength,s==null||s({percent:1,totalBytes:Math.max(u,f),transferredBytes:f},o))}}))},Nb=(r,u)=>{if(!r.body)return r;if(r.status===204)return new Response(null,{status:r.status,statusText:r.statusText,headers:r.headers});const s=Math.max(0,Number(r.headers.get("content-length"))||0);return new Response(dp(r.body,s,u),{status:r.status,statusText:r.statusText,headers:r.headers})},Mb=(r,u,s)=>{if(!r.body)return r;const o=Db(s??r.body);return new Request(r,{duplex:"half",body:dp(r.body,o,u)})},gn=r=>r!==null&&typeof r=="object",Dr=(...r)=>{for(const u of r)if((!gn(u)||Array.isArray(u))&&u!==void 0)throw new TypeError("The `options` argument must be an object");return $s({},...r)},mp=(r={},u={})=>{const s=new globalThis.Headers(r),o=u instanceof globalThis.Headers,f=new globalThis.Headers(u);for(const[h,_]of f.entries())o&&_==="undefined"||_===void 0?s.delete(h):s.set(h,_);return s};function Nr(r,u,s){return Object.hasOwn(u,s)&&u[s]===void 0?[]:$s(r[s]??[],u[s]??[])}const hp=(r={},u={})=>({beforeRequest:Nr(r,u,"beforeRequest"),beforeRetry:Nr(r,u,"beforeRetry"),afterResponse:Nr(r,u,"afterResponse"),beforeError:Nr(r,u,"beforeError")}),Ub=(r,u)=>{const s=new URLSearchParams;for(const o of[r,u])if(o!==void 0)if(o instanceof URLSearchParams)for(const[f,h]of o.entries())s.append(f,h);else if(Array.isArray(o))for(const f of o){if(!Array.isArray(f)||f.length!==2)throw new TypeError("Array search parameters must be provided in [[key, value], ...] format");s.append(String(f[0]),String(f[1]))}else if(gn(o))for(const[f,h]of Object.entries(o))h!==void 0&&s.append(f,String(h));else{const f=new URLSearchParams(o);for(const[h,_]of f.entries())s.append(h,_)}return s},$s=(...r)=>{let u={},s={},o={},f;const h=[];for(const _ of r)if(Array.isArray(_))Array.isArray(u)||(u=[]),u=[...u,..._];else if(gn(_)){for(let[x,v]of Object.entries(_)){if(x==="signal"&&v instanceof globalThis.AbortSignal){h.push(v);continue}if(x==="context"){if(v!=null&&(!gn(v)||Array.isArray(v)))throw new TypeError("The `context` option must be an object");u={...u,context:v==null?{}:{...u.context,...v}};continue}if(x==="searchParams"){v==null?f=void 0:f=f===void 0?v:Ub(f,v);continue}gn(v)&&x in u&&(v=$s(u[x],v)),u={...u,[x]:v}}gn(_.hooks)&&(o=hp(o,_.hooks),u.hooks=o),gn(_.headers)&&(s=mp(s,_.headers),u.headers=s)}return f!==void 0&&(u.searchParams=f),h.length>0&&(h.length===1?u.signal=h[0]:op?u.signal=AbortSignal.any(h):u.signal=h.at(-1)),u},qb=r=>sp.includes(r)?r.toUpperCase():r,Lb=["get","put","head","delete","options","trace"],Hb=[408,413,429,500,502,503,504],Bb=[413,429,503],Sh={limit:2,methods:Lb,statusCodes:Hb,afterStatusCodes:Bb,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:r=>.3*2**(r-1)*1e3,jitter:void 0,retryOnTimeout:!1},Yb=(r={})=>{if(typeof r=="number")return{...Sh,limit:r};if(r.methods&&!Array.isArray(r.methods))throw new Error("retry.methods must be an array");if(r.methods&&(r.methods=r.methods.map(s=>s.toLowerCase())),r.statusCodes&&!Array.isArray(r.statusCodes))throw new Error("retry.statusCodes must be an array");const u=Object.fromEntries(Object.entries(r).filter(([,s])=>s!==void 0));return{...Sh,...u}};class Ns extends Error{constructor(s){super(`Request timed out: ${s.method} ${s.url}`);Ve(this,"request");this.name="TimeoutError",this.request=s}}async function Gb(r,u,s,o){return new Promise((f,h)=>{const _=setTimeout(()=>{s&&s.abort(),h(new Ns(r))},o.timeout);o.fetch(r,u).then(f).catch(h).then(()=>{clearTimeout(_)})})}async function Vb(r,{signal:u}){return new Promise((s,o)=>{u&&(u.throwIfAborted(),u.addEventListener("abort",f,{once:!0}));function f(){clearTimeout(h),o(u.reason)}const h=setTimeout(()=>{u==null||u.removeEventListener("abort",f),s()},r)})}const Xb=(r,u)=>{const s={};for(const o in u)Object.hasOwn(u,o)&&!(o in Cb)&&!(o in zb)&&(!(o in r)||o in Ob)&&(s[o]=u[o]);return s},Qb=r=>r===void 0?!1:Array.isArray(r)?r.length>0:r instanceof URLSearchParams?r.size>0:typeof r=="object"?Object.keys(r).length>0:typeof r=="string"?r.trim().length>0:!!r;function Zb(r){return r instanceof Ds||(r==null?void 0:r.name)===Ds.name}function Kb(r){return r instanceof Ns||(r==null?void 0:r.name)===Ns.name}var Zr,pp,Kt,Bt,rt,X,$a,ea,vn,ue,Br,_p,Ms,Yr,Ja,Us,yp,ii,Gr,qs;const ri=class ri{constructor(u,s={}){Pt(this,ue);Ve(this,"request");Pt(this,Kt);Pt(this,Bt,0);Pt(this,rt);Pt(this,X);Pt(this,$a);Pt(this,ea);Pt(this,vn);var f,h,_;if(Zt(this,rt,u),Zt(this,X,{...s,headers:mp(U(this,rt).headers,s.headers),hooks:hp({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},s.hooks),method:qb(s.method??U(this,rt).method??"GET"),prefixUrl:String(s.prefixUrl||""),retry:Yb(s.retry),throwHttpErrors:s.throwHttpErrors??!0,timeout:s.timeout??1e4,fetch:s.fetch??globalThis.fetch.bind(globalThis),context:s.context??{}}),typeof U(this,rt)!="string"&&!(U(this,rt)instanceof URL||U(this,rt)instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(U(this,X).prefixUrl&&typeof U(this,rt)=="string"){if(U(this,rt).startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");U(this,X).prefixUrl.endsWith("/")||(U(this,X).prefixUrl+="/"),Zt(this,rt,U(this,X).prefixUrl+U(this,rt))}Eb&&op&&(Zt(this,ea,U(this,X).signal??U(this,rt).signal),Zt(this,Kt,new globalThis.AbortController),U(this,X).signal=U(this,ea)?AbortSignal.any([U(this,ea),U(this,Kt).signal]):U(this,Kt).signal),xh&&(U(this,X).duplex="half"),U(this,X).json!==void 0&&(U(this,X).body=((h=(f=U(this,X)).stringifyJson)==null?void 0:h.call(f,U(this,X).json))??JSON.stringify(U(this,X).json),U(this,X).headers.set("content-type",U(this,X).headers.get("content-type")??"application/json"));const o=s.headers&&new globalThis.Headers(s.headers).has("content-type");if(U(this,rt)instanceof globalThis.Request&&(Tb&&U(this,X).body instanceof globalThis.FormData||U(this,X).body instanceof URLSearchParams)&&!o&&U(this,X).headers.delete("content-type"),this.request=new globalThis.Request(U(this,rt),U(this,X)),Qb(U(this,X).searchParams)){const v="?"+(typeof U(this,X).searchParams=="string"?U(this,X).searchParams.replace(/^\?/,""):new URLSearchParams(Se(_=ri,Zr,pp).call(_,U(this,X).searchParams)).toString()),p=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,v);this.request=new globalThis.Request(p,U(this,X))}if(U(this,X).onUploadProgress){if(typeof U(this,X).onUploadProgress!="function")throw new TypeError("The `onUploadProgress` option must be a function");if(!xh)throw new Error("Request streams are not supported in your environment. The `duplex` option for `Request` is not available.");this.request=Se(this,ue,qs).call(this,this.request,U(this,X).body??void 0)}}static create(u,s){var _,x,v;const o=new ri(u,s),f=async()=>{var j,k,M,V,B,q,L,H,I,J,_e,ye;if(typeof U(o,X).timeout=="number"&&U(o,X).timeout>Rs)throw new RangeError(`The \`timeout\` option cannot be greater than ${Rs}`);await Promise.resolve();let p=await Se(j=o,ue,yp).call(j);for(const he of U(o,X).hooks.afterResponse){const W=Se(k=o,ue,Ms).call(k,p.clone());let $;try{$=await he(o.request,Se(M=o,ue,ii).call(M),W,{retryCount:U(o,Bt)})}catch(Pe){throw Se(V=o,ue,Ja).call(V,W),Se(B=o,ue,Ja).call(B,p),Pe}if($ instanceof fp)throw Se(q=o,ue,Ja).call(q,W),Se(L=o,ue,Ja).call(L,p),new js($.options);const oe=$ instanceof globalThis.Response?$:p;W!==oe&&Se(H=o,ue,Ja).call(H,W),p!==oe&&Se(I=o,ue,Ja).call(I,p),p=oe}if(Se(J=o,ue,Ms).call(J,p),!p.ok&&(typeof U(o,X).throwHttpErrors=="function"?U(o,X).throwHttpErrors(p.status):U(o,X).throwHttpErrors)){let he=new Ds(p,o.request,Se(_e=o,ue,ii).call(_e));for(const W of U(o,X).hooks.beforeError)he=await W(he,{retryCount:U(o,Bt)});throw he}if(U(o,X).onDownloadProgress){if(typeof U(o,X).onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!wb)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");const he=p.clone();return Se(ye=o,ue,Ja).call(ye,p),Nb(he,U(o,X).onDownloadProgress)}return p},h=Se(_=o,ue,Us).call(_,f).finally(()=>{var j,k;const p=U(o,$a);Se(j=o,ue,Yr).call(j,(p==null?void 0:p.body)??void 0),Se(k=o,ue,Yr).call(k,o.request.body??void 0)});for(const[p,j]of Object.entries(jb))p==="bytes"&&typeof((v=(x=globalThis.Response)==null?void 0:x.prototype)==null?void 0:v.bytes)!="function"||(h[p]=async()=>{o.request.headers.set("accept",o.request.headers.get("accept")||j);const k=await h;if(p==="json"){if(k.status===204)return"";const M=await k.text();return M===""?"":s.parseJson?s.parseJson(M):JSON.parse(M)}return k[p]()});return h}};Zr=new WeakSet,pp=function(u){return u&&typeof u=="object"&&!Array.isArray(u)&&!(u instanceof URLSearchParams)?Object.fromEntries(Object.entries(u).filter(([,s])=>s!==void 0)):u},Kt=new WeakMap,Bt=new WeakMap,rt=new WeakMap,X=new WeakMap,$a=new WeakMap,ea=new WeakMap,vn=new WeakMap,ue=new WeakSet,Br=function(){const u=U(this,X).retry.delay(U(this,Bt));let s=u;U(this,X).retry.jitter===!0?s=Math.random()*u:typeof U(this,X).retry.jitter=="function"&&(s=U(this,X).retry.jitter(u),(!Number.isFinite(s)||s<0)&&(s=u));const o=U(this,X).retry.backoffLimit??Number.POSITIVE_INFINITY;return Math.min(o,s)},_p=async function(u){if(Pm(this,Bt)._++,U(this,Bt)>U(this,X).retry.limit)throw u;const s=u instanceof Error?u:new up(u);if(s instanceof js)return s.customDelay??Se(this,ue,Br).call(this);if(!U(this,X).retry.methods.includes(this.request.method.toLowerCase()))throw u;if(U(this,X).retry.shouldRetry!==void 0){const o=await U(this,X).retry.shouldRetry({error:s,retryCount:U(this,Bt)});if(o===!1)throw u;if(o===!0)return Se(this,ue,Br).call(this)}if(Kb(u)&&!U(this,X).retry.retryOnTimeout)throw u;if(Zb(u)){if(!U(this,X).retry.statusCodes.includes(u.response.status))throw u;const o=u.response.headers.get("Retry-After")??u.response.headers.get("RateLimit-Reset")??u.response.headers.get("X-RateLimit-Retry-After")??u.response.headers.get("X-RateLimit-Reset")??u.response.headers.get("X-Rate-Limit-Reset");if(o&&U(this,X).retry.afterStatusCodes.includes(u.response.status)){let f=Number(o)*1e3;Number.isNaN(f)?f=Date.parse(o)-Date.now():f>=Date.parse("2024-01-01")&&(f-=Date.now());const h=U(this,X).retry.maxRetryAfter??f;return f<h?f:h}if(u.response.status===413)throw u}return Se(this,ue,Br).call(this)},Ms=function(u){return U(this,X).parseJson&&(u.json=async()=>U(this,X).parseJson(await u.text())),u},Yr=function(u){u&&u.cancel().catch(()=>{})},Ja=function(u){Se(this,ue,Yr).call(this,u.body??void 0)},Us=async function(u){try{return await u()}catch(s){const o=Math.min(await Se(this,ue,_p).call(this,s),Rs);if(U(this,Bt)<1)throw s;if(await Vb(o,U(this,ea)?{signal:U(this,ea)}:{}),s instanceof js&&s.customRequest){const f=U(this,X).signal?new globalThis.Request(s.customRequest,{signal:U(this,X).signal}):new globalThis.Request(s.customRequest);Se(this,ue,Gr).call(this,f)}for(const f of U(this,X).hooks.beforeRetry){const h=await f({request:this.request,options:Se(this,ue,ii).call(this),error:s,retryCount:U(this,Bt)});if(h instanceof globalThis.Request){Se(this,ue,Gr).call(this,h);break}if(h instanceof globalThis.Response)return h;if(h===cp)return}return Se(this,ue,Us).call(this,u)}},yp=async function(){var s;(s=U(this,Kt))!=null&&s.signal.aborted&&(Zt(this,Kt,new globalThis.AbortController),U(this,X).signal=U(this,ea)?AbortSignal.any([U(this,ea),U(this,Kt).signal]):U(this,Kt).signal,this.request=new globalThis.Request(this.request,{signal:U(this,X).signal}));for(const o of U(this,X).hooks.beforeRequest){const f=await o(this.request,Se(this,ue,ii).call(this),{retryCount:U(this,Bt)});if(f instanceof Response)return f;if(f instanceof globalThis.Request){Se(this,ue,Gr).call(this,f);break}}const u=Xb(this.request,U(this,X));return Zt(this,$a,this.request),this.request=U(this,$a).clone(),U(this,X).timeout===!1?U(this,X).fetch(U(this,$a),u):Gb(U(this,$a),u,U(this,Kt),U(this,X))},ii=function(){if(!U(this,vn)){const{hooks:u,...s}=U(this,X);Zt(this,vn,Object.freeze(s))}return U(this,vn)},Gr=function(u){Zt(this,vn,void 0),this.request=Se(this,ue,qs).call(this,u)},qs=function(u,s){return!U(this,X).onUploadProgress||!u.body?u:Mb(u,U(this,X).onUploadProgress,s??U(this,X).body??void 0)},Pt(ri,Zr);let Qr=ri;/*! MIT License © Sindre Sorhus */const Ls=r=>{const u=(s,o)=>Qr.create(s,Dr(r,o));for(const s of sp)u[s]=(o,f)=>Qr.create(o,Dr(r,f,{method:s}));return u.create=s=>Ls(Dr(s)),u.extend=s=>(typeof s=="function"&&(s=s(r??{})),Ls(Dr(r,s))),u.stop=cp,u.retry=Ab,u},kh=Ls();let Mr=null;const Vr=kh.create({prefixUrl:"/api",timeout:3e4,hooks:{beforeRequest:[r=>{const u=xa.getState().accessToken;u&&r.headers.set("Authorization",`Bearer ${u}`)}],afterResponse:[async(r,u,s)=>{if(s.status===401&&!r.headers.has("X-Retry-After-Refresh")){Mr||(Mr=xa.getState().refresh().finally(()=>{Mr=null}));try{await Mr}catch{throw s}const o=xa.getState().accessToken;return o&&r.headers.set("Authorization",`Bearer ${o}`),r.headers.set("X-Retry-After-Refresh","1"),kh(r,u)}}]}}),Jb=3e4;function $b(r){if(r.link)return r.link;const u=(r.title+" "+r.body).match(/task\s*#?(\d+)/i);if(u)return`/tasks/${u[1]}`;const s=(r.title+" "+r.body).match(/worker\s+(\S+)/i);return s?`/workers/${s[1]}`:null}function gp(){const r=Fa(),[u,s]=g.useState([]),[o,f]=g.useState(0),[h,_]=g.useState(!1),[x,v]=g.useState(!1),p=g.useRef(null),{t:j}=Jt(),k=g.useRef(async()=>{try{v(!0);const q=(await Vr.get("web/notifications",{searchParams:{limit:"20"}}).json()).data,L=q.filter(H=>!H.isRead).length;s(H=>H.length===q.length&&H.every((I,J)=>I.id===q[J].id&&I.isRead===q[J].isRead)?H:q),f(H=>H===L?H:L)}catch{}finally{v(!1)}});g.useEffect(()=>{k.current();const B=setInterval(()=>k.current(),Jb);return()=>clearInterval(B)},[]),g.useEffect(()=>{function B(q){p.current&&!p.current.contains(q.target)&&_(!1)}return document.addEventListener("mousedown",B),()=>document.removeEventListener("mousedown",B)},[]);async function M(B){try{await Vr.post(`web/notifications/${B}/read`),s(q=>q.map(L=>L.id===B?{...L,isRead:!0}:L)),f(q=>Math.max(0,q-1))}catch{}}async function V(){try{await Vr.post("web/notifications/read-all"),s(B=>B.map(q=>({...q,isRead:!0}))),f(0)}catch{}}return m.jsxs("div",{className:"relative",ref:p,children:[m.jsxs("button",{type:"button",onClick:()=>_(B=>!B),"aria-label":j("common.notifications"),className:"relative inline-flex items-center justify-center rounded-[4px] p-2 text-[var(--text-secondary)] transition-colors hover:bg-[var(--border)] hover:text-[var(--text-primary)]",children:[m.jsx(Vv,{size:16}),o>0&&m.jsx("span",{className:"absolute right-0 top-0 flex h-3 min-w-3 items-center justify-center rounded-full bg-[var(--destructive)] px-0.5 text-[8px] font-semibold leading-none text-white",children:o})]}),h&&m.jsxs("div",{className:"absolute right-0 top-full z-50 mt-2 w-[min(320px,calc(100vw-2rem))] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] shadow-lg",children:[m.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[m.jsx("span",{className:"text-sm font-semibold",children:j("common.notifications")}),o>0&&m.jsxs("button",{type:"button",onClick:V,"aria-label":j("common.mark_all_read"),className:"inline-flex items-center gap-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[m.jsx(Xv,{className:"h-3.5 w-3.5"}),j("common.mark_all_read")]})]}),m.jsx("div",{className:"max-h-80 overflow-y-auto",children:x&&u.length===0?m.jsx("div",{className:"flex justify-center py-8",children:m.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})}):u.length===0?m.jsxs("div",{className:"flex flex-col items-center gap-3 py-8",children:[m.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),m.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:j("common.no_notifications")})]}):u.map(B=>{const q=$b(B);return m.jsxs("div",{className:`flex items-start gap-3 border-b border-[var(--border)] px-4 py-3 last:border-b-0 transition-colors ${q?"cursor-pointer hover:bg-[var(--bg-input)]":""} ${B.isRead?"opacity-60":"bg-[var(--accent)]/5"}`,onClick:()=>{q&&(B.isRead||M(B.id),_(!1),r(q))},children:[m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsx("p",{className:"text-sm font-medium",children:B.title}),m.jsx("p",{className:"text-xs text-[var(--text-secondary)]",children:B.body}),m.jsx("p",{className:"mt-1 text-xs text-[var(--text-secondary)] opacity-60",children:new Date(B.createdAt).toLocaleString()})]}),!B.isRead&&m.jsx("button",{type:"button",onClick:L=>{L.stopPropagation(),M(B.id)},"aria-label":j("common.mark_as_read"),className:"shrink-0 rounded-[4px] p-1 text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:m.jsx(Qv,{className:"h-3.5 w-3.5"})})]},B.id)})})]})]})}function Wb(r){return{tasks:r.tasks.map(u=>({type:"task",id:u.id,title:`#${u.id} ${u.description}`,subtitle:`${u.status} · ${u.project_key}`})),workers:(r.workers??[]).map(u=>({type:"worker",id:u.id,title:u.name,subtitle:`${u.hostname} · ${u.status}`})),projects:r.projects.map(u=>({type:"project",id:u.key,title:u.name,subtitle:u.repository}))}}const Fb=300,Eh={tasks:sb,workers:Ph,projects:Fv},Ib={tasks:"tasks",workers:"workers",projects:"projects"};function vp({renderTrigger:r}={}){const[u,s]=g.useState(""),[o,f]=g.useState({tasks:[],workers:[],projects:[]}),[h,_]=g.useState(!1),[x,v]=g.useState(!1),[p,j]=g.useState(0),k=g.useRef(null),M=g.useRef(null),V=g.useRef(void 0),B=g.useRef(void 0),q=Fa(),{t:L}=Jt(),H=g.useMemo(()=>[...o.tasks,...o.workers,...o.projects],[o]),I=g.useCallback(async $=>{var Pe;if(!$.trim()){f({tasks:[],workers:[],projects:[]});return}(Pe=B.current)==null||Pe.abort();const oe=new AbortController;B.current=oe;try{_(!0);const Je=await Vr.get("web/search",{searchParams:{q:$},signal:oe.signal}).json();f(Wb(Je)),j(0)}catch(Je){if(Je instanceof DOMException&&Je.name==="AbortError")return}finally{oe.signal.aborted||_(!1)}},[]);g.useEffect(()=>(V.current&&clearTimeout(V.current),V.current=setTimeout(()=>I(u),Fb),()=>{V.current&&clearTimeout(V.current)}),[u,I]),g.useEffect(()=>{function $(oe){oe.key==="/"&&!x&&!(oe.target instanceof HTMLInputElement||oe.target instanceof HTMLTextAreaElement)&&(oe.preventDefault(),v(!0)),oe.key==="Escape"&&x&&(oe.preventDefault(),J())}return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[x]),g.useEffect(()=>{x&&setTimeout(()=>{var $;return($=M.current)==null?void 0:$.focus()},50)},[x]);function J(){v(!1),s(""),f({tasks:[],workers:[],projects:[]}),j(0)}function _e($){switch(J(),$.type){case"task":q(`/tasks/${$.id}`);break;case"worker":q(`/workers/${$.id}`);break;case"project":q(`/projects/${$.id}`);break}}function ye($){$.key==="ArrowDown"?($.preventDefault(),j(oe=>Math.min(oe+1,H.length-1))):$.key==="ArrowUp"?($.preventDefault(),j(oe=>Math.max(oe-1,0))):$.key==="Enter"&&H[p]&&($.preventDefault(),_e(H[p]))}const he=H.length>0;let W=0;return m.jsxs(m.Fragment,{children:[r?r(()=>v(!0)):m.jsxs("button",{type:"button",onClick:()=>v(!0),className:"flex items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)]",children:[m.jsx(Ih,{className:"h-3.5 w-3.5"}),m.jsx("span",{children:L("common.search_placeholder")}),m.jsx("kbd",{className:"ml-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-primary)] px-1.5 py-0.5 text-[11px] text-[var(--text-muted)]",children:"/"})]}),x&&m.jsx("div",{ref:k,className:"fixed inset-0 z-[100] flex items-start justify-center pt-[calc(var(--safe-area-top,0px)+16px)] md:pt-[15vh]",style:{backgroundColor:"rgba(0, 0, 0, 0.6)"},onClick:$=>{$.target===k.current&&J()},children:m.jsxs("div",{className:"mx-3 w-full max-w-[640px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] shadow-2xl sm:mx-4 md:mx-0",children:[m.jsxs("div",{className:"flex items-center gap-3 border-b border-[var(--border)] px-4 py-3",children:[m.jsx("span",{className:"text-sm text-[var(--accent)]",children:"/"}),m.jsx("input",{ref:M,type:"text",placeholder:L("common.search_input_placeholder"),value:u,onChange:$=>s($.target.value),onKeyDown:ye,className:"flex-1 bg-transparent text-sm text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none"}),h&&m.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})]}),m.jsx("div",{className:"max-h-[50vh] overflow-y-auto sm:max-h-[60vh] md:max-h-[400px]",children:u.trim()&&!he&&!h?m.jsx("div",{className:"py-10 text-center text-xs text-[var(--text-muted)]",children:L("common.no_search_results",{query:u})}):Object.keys(Eh).map($=>{const oe=o[$];if(oe.length===0)return null;const Pe=Eh[$],Je=W;return W+=oe.length,m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 text-[var(--text-muted)]",children:[m.jsx(Pe,{className:"h-3 w-3"}),m.jsx("span",{className:"text-[11px] lowercase tracking-wider",children:Ib[$]})]}),oe.map((qe,At)=>{const ut=Je+At,Ne=ut===p;return m.jsxs("button",{type:"button",className:`flex w-full items-center gap-3 px-4 py-2.5 text-left transition-colors ${Ne?"bg-[var(--accent)]/10 text-[var(--accent)]":"hover:bg-[var(--bg-input)]"}`,onClick:()=>_e(qe),onMouseEnter:()=>j(ut),children:[m.jsx("span",{className:`text-xs ${Ne?"text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:Ne?">":" "}),m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsx("p",{className:"truncate text-sm",children:qe.title}),qe.subtitle&&m.jsx("p",{className:"truncate text-xs text-[var(--text-muted)]",children:qe.subtitle})]})]},`${qe.type}-${qe.id}`)})]},$)})}),m.jsxs("div",{className:"hidden items-center gap-4 border-t border-[var(--border)] px-4 py-2 md:flex",children:[m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"↑↓"})," ",L("common.navigate_hint")]}),m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"↵"})," ",L("common.select_hint")]}),m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"esc"})," ",L("common.close_hint")]})]})]})})]})}const Pb={danger:"var(--destructive)",warning:"var(--warning)",accent:"var(--accent)"},wh="confirm-dialog-title";function Th(r){return Array.from(r.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))}function e0({isOpen:r,onClose:u,onConfirm:s,title:o,message:f,confirmVariant:h="danger",isLoading:_,...x}){const{t:v}=Jt(),p=x.confirmLabel??v("common.confirm"),j=x.cancelLabel??v("common.cancel"),k=g.useRef(null),M=g.useRef(null),V=Pb[h];g.useEffect(()=>{if(!r)return;M.current=document.activeElement;const q=requestAnimationFrame(()=>{if(k.current){const L=Th(k.current);L.length>0&&L[0].focus()}});return()=>{var L;cancelAnimationFrame(q),(L=M.current)==null||L.focus()}},[r]);const B=g.useCallback(q=>{if(q.key==="Tab"&&k.current){const L=Th(k.current);if(L.length===0)return;const H=L[0],I=L[L.length-1];q.shiftKey?document.activeElement===H&&(q.preventDefault(),I.focus()):document.activeElement===I&&(q.preventDefault(),H.focus())}},[]);return r?m.jsx("div",{onClick:u,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"max(1rem, 10vh)",paddingLeft:"1rem",paddingRight:"1rem",backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},children:m.jsxs("div",{ref:k,role:"dialog","aria-modal":"true","aria-labelledby":wh,onClick:q=>q.stopPropagation(),onKeyDown:B,style:{width:"100%",maxWidth:"480px",backgroundColor:"var(--bg-card)",border:"1px solid var(--border)",borderRadius:"4px",padding:"1.5rem"},children:[m.jsx("div",{style:{marginBottom:"1.25rem"},children:m.jsxs("div",{id:wh,style:{color:"var(--accent)",fontSize:"0.875rem",fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem"},children:[m.jsx(ep,{style:{width:"1rem",height:"1rem"}}),o]})}),m.jsx("div",{style:{marginBottom:"1.25rem"},children:m.jsx("p",{style:{color:"var(--text-muted)",fontSize:"0.75rem",lineHeight:"1.5"},children:f})}),m.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[m.jsx("button",{type:"button",onClick:u,disabled:_,className:"text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:border-[var(--text-muted)]",style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",cursor:_?"not-allowed":"pointer",opacity:_?.7:1,transition:"color 0.15s, border-color 0.15s"},children:j}),m.jsx("button",{type:"button",onClick:s,disabled:_,style:{flex:1,padding:"0.5rem",backgroundColor:V,color:"#0C0C0C",border:"none",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,cursor:_?"not-allowed":"pointer",opacity:_?.7:1},children:_?v("common.processing"):p})]})]})}):null}const jh="overlord-pwa-install-dismissed";function t0(){const r=navigator.userAgent;return/iP(hone|od|ad)/.test(r)&&/WebKit/.test(r)&&!/(CriOS|FxiOS|OPiOS|mercury)/.test(r)}function a0(){return navigator.standalone===!0||window.matchMedia("(display-mode: standalone)").matches}function n0(){const{t:r}=Jt(),[u,s]=g.useState("hidden"),[o,f]=g.useState(!1),h=g.useRef(null),_=g.useRef(void 0);g.useEffect(()=>{if(a0()||localStorage.getItem(jh)||window.innerWidth>=768)return;const p=k=>{k.preventDefault(),h.current=k};window.addEventListener("beforeinstallprompt",p);const j=setTimeout(()=>s("visible"),2e3);return()=>{window.removeEventListener("beforeinstallprompt",p),clearTimeout(j),clearTimeout(_.current)}},[]);function x(){localStorage.setItem(jh,"1"),s("dismissing"),_.current=setTimeout(()=>s("hidden"),200)}async function v(){if(h.current){await h.current.prompt();const{outcome:p}=await h.current.userChoice;p==="accepted"&&x(),h.current=null}else t0()&&f(!0)}return u==="hidden"?null:m.jsx("div",{className:`fixed bottom-4 left-4 right-4 z-40 md:hidden ${u==="dismissing"?"animate-slide-down":"animate-slide-up"}`,role:"dialog","aria-label":r("pwa_install.title"),children:m.jsxs("div",{className:"overflow-hidden rounded-[4px] border border-[var(--accent)]/40 bg-[#0C0C0C] shadow-[0_8px_32px_rgba(0,0,0,0.4)]",children:[m.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--accent)]/20 bg-[var(--accent)]/[0.06] px-3 py-1.5",children:[m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("div",{className:"h-1.5 w-1.5 rounded-full bg-[var(--accent)]"}),m.jsx("span",{className:"text-[9px] font-medium text-[var(--accent)]",children:r("pwa_install.title")})]}),m.jsx("button",{onClick:x,className:"p-1 text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:m.jsx(tp,{size:14})})]}),m.jsx("div",{className:"px-3.5 py-3",children:o?m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"text-[10px] text-[var(--text-muted)]",children:[m.jsx("span",{className:"text-[var(--accent)]",children:"$"})," ",r("pwa_install.ios_command")]}),m.jsx("div",{className:"mt-2.5 flex flex-col gap-2.5",children:[r("pwa_install.ios_step_1"),r("pwa_install.ios_step_2"),r("pwa_install.ios_step_3")].map((p,j)=>m.jsxs("div",{className:"flex items-center gap-2.5",children:[m.jsx("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-[4px] bg-[var(--accent)]/[0.08]",children:m.jsx("span",{className:"text-xs font-semibold text-[var(--accent)]",children:j+1})}),m.jsxs("span",{className:"text-[10px] leading-snug text-[var(--text-secondary)]",children:[j===0&&m.jsx(ub,{size:12,className:"mr-1 inline-block align-text-bottom text-[var(--text-muted)]"}),p]})]},j))})]}):m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"text-[10px] text-[var(--text-muted)]",children:[m.jsx("span",{className:"text-[var(--accent)]",children:"$"})," ",r("pwa_install.command")]}),m.jsxs("div",{className:"mt-1.5 text-[10px] leading-relaxed text-[var(--text-secondary)]",children:["→ ",r("pwa_install.desc_1"),m.jsx("br",{}),"→ ",r("pwa_install.desc_2")]}),m.jsxs("div",{className:"mt-2.5 flex gap-2",children:[m.jsx("button",{onClick:v,className:"rounded-[4px] bg-[var(--accent)] px-4 py-1.5 text-[10px] font-semibold text-black transition-all hover:brightness-110",children:r("pwa_install.install")}),m.jsx("button",{onClick:x,className:"rounded-[4px] border border-[#333] px-3 py-1.5 text-[10px] text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)]",children:r("pwa_install.skip")})]})]})})]})})}const bp=g.createContext({setActions:()=>{}});function T1(r){const{setActions:u}=g.useContext(bp);g.useEffect(()=>(u(r),()=>u(null)),[r,u])}const xp=g.createContext({setSubtitle:()=>{}});function j1(r){const{setSubtitle:u}=g.useContext(xp);g.useEffect(()=>(u(r),()=>u(null)),[r,u])}const l0=[{to:"/home",label:"terminal",icon:Js},{to:"/tasks",label:"tasks",icon:Fh},{to:"/dashboard",label:"dashboard",icon:Wh},{to:"/workers",label:"workers",icon:Ph},{to:"/projects",label:"projects",icon:Iv},{to:"/access-tokens",label:"tokens",icon:eb}],i0=[{to:"/docs/cli",label:"cli",icon:Js},{to:"/docs/api",label:"api",icon:Wv},{to:"/docs/bot",label:"bot",icon:lb},{to:"/docs/all",label:"all",icon:tb}],r0=[{to:"/admin",label:"admin",icon:ob}],u0=[{to:"/home",label:"terminal",icon:Js},{to:"/tasks",label:"tasks",icon:Fh},{to:"/dashboard",label:"dashboard",icon:Wh}],Ur={"/home":{title:"common.breadcrumb_terminal",subtitle:"common.breadcrumb_terminal_sub"},"/dashboard":{title:"common.breadcrumb_dashboard",subtitle:"common.breadcrumb_dashboard_sub"},"/tasks":{title:"common.breadcrumb_tasks",subtitle:"common.breadcrumb_tasks_sub"},"/workers":{title:"common.breadcrumb_workers",subtitle:"common.breadcrumb_workers_sub"},"/projects":{title:"common.breadcrumb_projects",subtitle:"common.breadcrumb_projects_sub"},"/admin":{title:"common.breadcrumb_admin",subtitle:"common.breadcrumb_admin_sub"},"/profile":{title:"common.breadcrumb_profile",subtitle:"common.breadcrumb_profile_sub"},"/access-tokens":{title:"common.breadcrumb_tokens",subtitle:"common.breadcrumb_tokens_sub"},"/docs":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_sub"},"/docs/cli":{title:"common.breadcrumb_docs_cli",subtitle:"common.breadcrumb_docs_cli_sub"},"/docs/api":{title:"common.breadcrumb_docs_api",subtitle:"common.breadcrumb_docs_api_sub"},"/docs/skill":{title:"common.breadcrumb_docs_skill",subtitle:"common.breadcrumb_docs_skill_sub"},"/docs/bot":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_bot_sub"},"/docs/all":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_all_sub"}};function o0(r){const{t:u}=Jt();if(Ur[r]){const o=Ur[r];return{title:u(o.title),subtitle:u(o.subtitle)}}const s="/"+r.split("/").filter(Boolean)[0];if(Ur[s]){const o=Ur[s],f=r.split("/").filter(Boolean).slice(1).join(" / ");return{title:u(o.title),subtitle:f||u(o.subtitle)}}return{title:r.slice(1).replace(/\//g," // ")||"home"}}function s0(r,u){return r==="/home"?u==="/home":r==="/dashboard"?u==="/dashboard":u.startsWith(r)}function c0(){const r=yt(),{t:u}=Jt(),s={terminal:u("terminal_home.title"),dashboard:u("dashboard.title"),tasks:u("tasks.title"),workers:u("workers.title")};return m.jsxs("nav",{className:"flex items-center justify-around border-t border-[var(--border)] bg-[var(--bg-card)] md:hidden",style:{height:"calc(60px + var(--safe-area-bottom, 0px))",paddingTop:8,paddingBottom:"var(--safe-area-bottom, 0px)"},children:[u0.map(({to:o,label:f,icon:h})=>{const _=s0(o,r.pathname);return m.jsxs(Ks,{to:o,className:"flex flex-1 flex-col items-center gap-1",children:[m.jsx(h,{size:18,className:_?"text-[var(--accent)]":"text-[var(--text-muted)]"}),m.jsx("span",{className:`text-[11px] lowercase ${_?"font-bold text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:s[f]??f})]},o)}),m.jsx(vp,{renderTrigger:o=>m.jsxs("button",{type:"button",onClick:o,className:"flex flex-1 flex-col items-center gap-1",children:[m.jsx(Ih,{size:18,className:"text-[var(--text-muted)]"}),m.jsx("span",{className:"text-[11px] lowercase text-[var(--text-muted)]",children:u("common.search_placeholder")})]})})]})}function f0(){const r=Fa(),{t:u}=Jt();return m.jsxs("header",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--bg-card)] px-4 md:hidden",style:{height:"calc(56px + env(safe-area-inset-top, 0px))",minHeight:"calc(56px + env(safe-area-inset-top, 0px))",paddingTop:"env(safe-area-inset-top, 0px)"},children:[m.jsxs("button",{onClick:()=>r("/home"),className:"flex items-center gap-2",style:{background:"none",border:"none",padding:0},children:[m.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-[4px] bg-[var(--accent)]",children:m.jsx("span",{className:"text-sm font-semibold",style:{color:"#0C0C0C"},children:"~"})}),m.jsx("span",{className:"text-sm font-bold lowercase text-[var(--text-primary)]",children:u("common.overlord")})]}),m.jsxs("div",{className:"flex items-center gap-1",children:[m.jsx("button",{onClick:()=>r("/profile"),className:"p-2 text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]","aria-label":u("common.profile"),children:m.jsx(fb,{size:18})}),m.jsx(gp,{}),m.jsx(rp,{})]})]})}function As({label:r,items:u,collapsed:s}){return m.jsxs("div",{className:"mt-4 first:mt-0",children:[!s&&m.jsx("div",{className:"mb-2 px-3 text-xs lowercase",style:{color:"var(--text-muted)"},children:r}),u.map(({to:o,label:f,icon:h})=>m.jsx(Ks,{to:o,className:({isActive:_})=>`flex items-center text-sm lowercase transition-colors ${s?"justify-center py-3":"gap-2.5 px-3 py-1.5"} ${_?"text-[var(--accent)] bg-[var(--accent)]/5":"text-[var(--text-secondary)] hover:text-[var(--text-primary)]"}`,children:({isActive:_})=>m.jsxs(m.Fragment,{children:[m.jsx(h,{size:14,style:{flexShrink:0}}),!s&&m.jsx("span",{children:_?`> ${f}`:` ${f}`})]})},o))]})}function d0(){const{user:r,logout:u}=xa(),s=Fa(),[o,f]=g.useState(!1),h=pb(),{t:_}=Jt(),{sidebarCollapsed:x,toggleSidebar:v}=yb();function p(){u(),s("/login")}return m.jsxs("aside",{className:"hidden md:flex flex-col border-r border-[var(--border)] transition-[width,min-width] duration-300 overflow-hidden",style:{width:x?56:240,minWidth:x?56:240,backgroundColor:"var(--bg-card)"},children:[m.jsx("div",{className:"flex items-center px-5",style:{height:48},children:m.jsxs("button",{onClick:()=>s("/home"),className:"flex items-center gap-2.5",style:{background:"none",border:"none",padding:0},children:[m.jsx("div",{className:"flex h-7 w-7 items-center justify-center rounded-[4px] bg-[var(--accent)]",style:{flexShrink:0},children:m.jsx("span",{className:"text-lg font-semibold",style:{color:"#0C0C0C"},children:"~"})}),!x&&m.jsx("span",{className:"text-base font-bold lowercase tracking-tight",style:{color:"var(--text-primary)"},children:_("common.overlord")})]})}),m.jsxs("nav",{className:"flex-1 px-3 pt-2",children:[m.jsx(As,{label:_("common.navigation"),items:l0,collapsed:x}),m.jsx(As,{label:_("common.docs_section"),items:i0,collapsed:x}),h&&m.jsx(As,{label:_("common.admin_section"),items:r0,collapsed:x})]}),m.jsx("div",{className:`px-3 py-1 ${x?"flex justify-center":""}`,children:m.jsx("button",{onClick:v,className:"flex items-center justify-center w-full py-1.5 rounded-[4px] text-[var(--text-secondary)] transition-colors hover:text-[var(--accent)] hover:bg-[var(--accent)]/5","aria-label":x?"expand sidebar":"collapse sidebar",children:x?m.jsx(Kv,{size:14}):m.jsx(Zv,{size:14})})}),m.jsx("div",{className:"border-t border-[var(--border)] p-3",children:m.jsxs("div",{className:`flex items-center py-2 ${x?"justify-center":"gap-3 px-3"}`,children:[m.jsx("button",{onClick:()=>s("/profile"),className:"flex h-7 w-7 items-center justify-center text-xs font-bold text-black transition-opacity hover:opacity-80",style:{backgroundColor:"var(--accent)",borderRadius:4,flexShrink:0},title:_("common.profile"),children:((r==null?void 0:r.username)??"u")[0].toUpperCase()}),!x&&m.jsxs(m.Fragment,{children:[m.jsxs("button",{onClick:()=>s("/profile"),className:"min-w-0 flex-1 text-left transition-colors hover:opacity-80",title:_("common.profile"),children:[m.jsx("div",{className:"truncate text-sm lowercase",style:{color:"var(--text-primary)"},children:(r==null?void 0:r.username)??"user"}),m.jsx("div",{className:"truncate text-xs lowercase",style:{color:"var(--text-muted)"},children:(r==null?void 0:r.role)??"user"})]}),m.jsx("button",{onClick:()=>f(!0),className:"p-1 text-[var(--text-secondary)] transition-colors hover:text-[var(--accent)]","aria-label":_("common.log_out"),children:m.jsx(nb,{size:14})})]})]})}),m.jsx(e0,{isOpen:o,onClose:()=>f(!1),onConfirm:p,title:_("common.logout_title"),message:_("common.logout_message"),confirmLabel:_("common.logout"),confirmVariant:"warning"})]})}function m0({headerActions:r,subtitleOverride:u}){const s=yt(),{title:o,subtitle:f}=o0(s.pathname),h=u??f;return m.jsxs("header",{className:"hidden md:flex items-center justify-between border-b border-[var(--border)] px-5",style:{height:48,minHeight:48,backgroundColor:"var(--bg-card)"},children:[m.jsxs("div",{className:"text-sm lowercase",children:[m.jsx("span",{style:{color:"var(--text-primary)"},children:o}),h&&m.jsxs("span",{style:{color:"var(--text-muted)"},children:[" ","// ",h]})]}),m.jsxs("div",{className:"flex items-center gap-3",children:[r,m.jsxs("div",{className:"flex items-center gap-1",children:[m.jsx(vp,{}),m.jsx(gp,{}),m.jsx(rp,{})]})]})]})}function h0(){const[r,u]=g.useState(null),[s,o]=g.useState(null),f=yt(),h=f.pathname==="/home",_=f.pathname.startsWith("/docs");return g.useEffect(()=>vb.getState().init(),[]),m.jsxs("div",{className:"flex font-mono",style:{height:"100dvh",minHeight:"100dvh"},children:[m.jsx(d0,{}),m.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[m.jsx(f0,{}),!_&&m.jsx(m0,{headerActions:r,subtitleOverride:s}),m.jsx("main",{className:h?"flex-1 overflow-hidden bg-[var(--bg-primary)]":"flex-1 overflow-auto bg-[var(--bg-primary)] p-4 pb-6 md:p-6 md:pb-6",children:m.jsx(bp.Provider,{value:{setActions:u},children:m.jsx(xp.Provider,{value:{setSubtitle:o},children:m.jsx(lv,{})})})}),m.jsx(n0,{}),m.jsx(c0,{})]})]})}function Rh(r){var s;const u=(s=r.state)==null?void 0:s.from;return u?{from:u}:{from:{pathname:r.pathname,search:r.search}}}function li({children:r,requireAdmin:u=!1}){const{accessToken:s,user:o,requireTotpSetup:f,initializing:h}=xa(),_=yt();if(h)return m.jsx("div",{className:"flex h-screen items-center justify-center",children:m.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-[var(--border)] border-t-[var(--accent)]"})});if(!s)return m.jsx(ll,{to:"/login",state:Rh(_),replace:!0});if(f){const x=Rh(_);return _.pathname!=="/totp-setup"&&_.pathname!=="/bind"?m.jsx(ll,{to:"/totp-setup",state:x,replace:!0}):_.pathname==="/bind"?(sessionStorage.setItem("overlord_bind_redirect",JSON.stringify(x.from)),m.jsx(ll,{to:"/totp-setup",state:x,replace:!0})):m.jsx(m.Fragment,{children:r})}return u&&(o==null?void 0:o.role)!==ap.ADMIN?m.jsx(ll,{to:"/home",replace:!0}):m.jsx(m.Fragment,{children:r})}function p0({children:r}){const{theme:u,resolved:s,setResolved:o}=ip();return g.useEffect(()=>{if(u!=="system"){o(u);return}const f=window.matchMedia("(prefers-color-scheme: dark)");o(f.matches?"dark":"light");const h=_=>o(_.matches?"dark":"light");return f.addEventListener("change",h),()=>f.removeEventListener("change",h)},[u,o]),g.useEffect(()=>{document.documentElement.classList.toggle("dark",s==="dark")},[s]),m.jsx(m.Fragment,{children:r})}class _0 extends g.Component{constructor(u){super(u),this.state={hasError:!1,error:null}}static getDerivedStateFromError(u){return{hasError:!0,error:u}}render(){var u;return this.state.hasError?m.jsxs("div",{className:"flex h-full min-h-[300px] flex-col items-center justify-center gap-4 p-8 font-mono",children:[m.jsx("span",{className:"text-lg font-bold text-[var(--destructive)]",children:Hr("common.runtime_error")}),m.jsx("p",{className:"max-w-md text-center text-xs text-[var(--text-muted)]",children:((u=this.state.error)==null?void 0:u.message)||Hr("common.an_unexpected_error_occurred")}),m.jsxs("button",{onClick:()=>{this.setState({hasError:!1,error:null}),window.location.reload()},className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--border)] px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[m.jsx(rb,{className:"h-3.5 w-3.5"}),Hr("common.reload")]})]}):this.props.children}}function y0({isOpen:r}){const u=Fa(),{logout:s,setSessionExpired:o}=xa(),{t:f}=Jt();function h(){s(),o(!1),u("/login")}return r?m.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[m.jsx("div",{className:"fixed inset-0 bg-[var(--modal-backdrop)]"}),m.jsx("div",{className:"relative z-10 w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",children:m.jsxs("div",{className:"flex flex-col items-center px-8 py-10",children:[m.jsx("div",{className:"mb-5 flex h-14 w-14 items-center justify-center rounded-full bg-[var(--warning)]/10",children:m.jsx(ab,{className:"h-7 w-7 text-[var(--warning)]"})}),m.jsx("h3",{className:"mb-2 text-base font-bold text-[var(--text-primary)]",children:f("auth.session_expired")}),m.jsx("p",{className:"mb-8 text-center text-xs text-[var(--text-secondary)]",children:f("auth.session_expired_message")}),m.jsx("button",{type:"button",className:"w-full rounded-[4px] bg-[var(--accent)] px-3 py-2.5 text-xs font-medium text-black hover:opacity-90 transition-opacity",onClick:h,children:f("auth.go_to_login")})]})})]}):null}const Ah=5;let ba=[];const Hs=new Set;function Sp(){Hs.forEach(r=>r())}function g0(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Wa(r,u,s=4e3){const o=g0();return ba=[...ba,{id:o,variant:r,message:u,duration:s}],ba.length>Ah&&(ba=ba.slice(ba.length-Ah)),Sp(),o}Wa.success=(r,u)=>Wa("success",r,u);Wa.error=(r,u)=>Wa("error",r,u);Wa.warning=(r,u)=>Wa("warning",r,u);Wa.info=(r,u)=>Wa("info",r,u);function v0(r){ba=ba.filter(u=>u.id!==r),Sp()}function b0(){const[,r]=g.useState(0);return g.useEffect(()=>{const u=()=>r(s=>s+1);return Hs.add(u),()=>{Hs.delete(u)}},[]),ba}const x0={success:{icon:Jv,borderColor:"var(--accent)"},error:{icon:$v,borderColor:"var(--destructive)"},warning:{icon:ep,borderColor:"var(--warning)"},info:{icon:Pv,borderColor:"var(--info)"}};function S0({item:r}){const u=x0[r.variant],s=u.icon,{t:o}=Jt(),f=g.useCallback(()=>v0(r.id),[r.id]);return g.useEffect(()=>{if(!r.duration)return;const h=setTimeout(f,r.duration);return()=>clearTimeout(h)},[r.duration,f]),m.jsxs("div",{className:"flex items-center gap-3 rounded-[4px] bg-[var(--bg-card)] px-4 py-3 shadow-lg",style:{borderLeft:`3px solid ${u.borderColor}`},role:"alert",children:[m.jsx(s,{className:"h-4 w-4 shrink-0",style:{color:u.borderColor}}),m.jsx("p",{className:"flex-1 text-xs text-[var(--text-primary)]",children:r.message}),m.jsx("button",{onClick:f,className:"shrink-0 rounded-[4px] p-0.5 text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]","aria-label":o("common.dismiss_notification"),children:m.jsx(tp,{className:"h-3.5 w-3.5"})})]})}function k0(){const r=b0();return r.length===0?null:m.jsx("div",{className:"pointer-events-none fixed right-4 top-4 z-[9999] flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2",children:r.map(u=>m.jsx("div",{className:"pointer-events-auto",children:m.jsx(S0,{item:u})},u.id))})}const E0=g.lazy(()=>ne(()=>import("./LandingPage-PZJ0hmRb.js"),__vite__mapDeps([0,1,2,3,4,5]))),w0=g.lazy(()=>ne(()=>import("./LoginPage-DXWCX5ho.js"),[])),T0=g.lazy(()=>ne(()=>import("./TotpSetupPage-eoX9Mlhu.js"),[])),j0=g.lazy(()=>ne(()=>import("./NotFoundPage-l8x4TLrh.js"),[])),R0=g.lazy(()=>ne(()=>import("./HomePage-BT2TWy4X.js"),__vite__mapDeps([6,7,8,9,10,11,12,13,14,1]))),A0=g.lazy(()=>ne(()=>import("./TerminalHomePage-DBZDlFto.js"),__vite__mapDeps([15,16,17,18,10,11,19,8,12,14,20,21,22]))),z0=g.lazy(()=>ne(()=>import("./TaskListPage-CRDO27i_.js"),__vite__mapDeps([23,16,7,8,12,13,19,5,24,9,20]))),O0=g.lazy(()=>ne(()=>import("./TaskDetailPage-Zp05tlaD.js"),__vite__mapDeps([25,16,17,18,12,19,8,26,21,27,28]))),C0=g.lazy(()=>ne(()=>import("./WorkerListPage-7JF5Tnk5.js"),__vite__mapDeps([29,8,30,31,32,33,34,22,5,28,19,24,9,14,20]))),D0=g.lazy(()=>ne(()=>import("./WorkerDetailPage-JfxixcaP.js"),__vite__mapDeps([35,12,8,36,30,14,37,26]))),N0=g.lazy(()=>ne(()=>import("./WorkerSetupGuidePage-DnGo1oDf.js"),__vite__mapDeps([31,32,33,34,22]))),M0=g.lazy(()=>ne(()=>import("./ProjectListPage-Z8yucTX_.js"),__vite__mapDeps([38,19,24,9,12,14,20]))),U0=g.lazy(()=>ne(()=>import("./ProjectDetailPage-DvHpP1uP.js"),__vite__mapDeps([39,40,19,12,8,36,14,41,37,20]))),q0=g.lazy(()=>ne(()=>import("./EditProjectPage-D_OVNzaU.js"),__vite__mapDeps([42,19,40,20]))),L0=g.lazy(()=>ne(()=>import("./PipelineEditorPage-BDNhYmj3.js"),__vite__mapDeps([43,19,13]))),H0=g.lazy(()=>ne(()=>import("./ProfilePage-DhWIheta.js"),__vite__mapDeps([44,45,36,14]))),B0=g.lazy(()=>ne(()=>import("./BindPlatformPage-B92pH7M5.js"),[])),Y0=g.lazy(()=>ne(()=>import("./AccessTokensPage-DGAc4uhy.js"),__vite__mapDeps([46,19,24,9,12,14,20,5,37]))),G0=g.lazy(()=>ne(()=>import("./CliReferencePage-CyuWBiWy.js"),__vite__mapDeps([47,48,5,20]))),V0=g.lazy(()=>ne(()=>import("./ApiReferencePage-BgkcfkYe.js"),__vite__mapDeps([49,48,5,20]))),X0=g.lazy(()=>ne(()=>import("./SkillPage-BZFIcxnH.js"),__vite__mapDeps([50,51,5,27]))),Q0=g.lazy(()=>ne(()=>import("./DocsLayout-B3843BNk.js"),__vite__mapDeps([52,26,53]))),Z0=g.lazy(()=>ne(()=>import("./InstallationPage-p7ktRQZU.js"),__vite__mapDeps([54,51,5]))),K0=g.lazy(()=>ne(()=>import("./DeveloperSetupPage-BBiPr8aW.js"),__vite__mapDeps([55,51,5]))),J0=g.lazy(()=>ne(()=>import("./WorkerSetupPage-DRuKeDtG.js"),__vite__mapDeps([56,51,5]))),$0=g.lazy(()=>ne(()=>import("./BotSetupPage-KoWBRUO-.js"),__vite__mapDeps([57,51,5]))),W0=g.lazy(()=>ne(()=>import("./LocalDevelopmentPage-Bfuhpcrv.js"),__vite__mapDeps([58,51,5]))),F0=g.lazy(()=>ne(()=>import("./WorkerOperationsPage-ckVjWB0R.js"),[])),I0=g.lazy(()=>ne(()=>import("./DeploymentPage-DgIWYDHb.js"),__vite__mapDeps([59,51,5]))),zh=g.lazy(()=>ne(()=>import("./BotIntegrationPage-DIyadADc.js"),[])),P0=g.lazy(()=>ne(()=>import("./PipelineConfigPage-Dtr7I1MR.js"),__vite__mapDeps([60,51,5]))),e1=g.lazy(()=>ne(()=>import("./DevWorkflowPage-C4dsPqSa.js"),__vite__mapDeps([61,51,5]))),t1=g.lazy(()=>ne(()=>import("./PermissionsPage-CwUmSGmE.js"),[])),a1=g.lazy(()=>ne(()=>import("./EnvVariablesPage-mS_l-6FV.js"),[])),n1=g.lazy(()=>ne(()=>import("./ArchitecturePage-BLU7MpAk.js"),__vite__mapDeps([62,51,5]))),l1=g.lazy(()=>ne(()=>import("./ChangelogPage-vdN9yYI7.js"),[])),i1=g.lazy(()=>ne(()=>import("./DocsIndexPage-DGO0O8af.js"),__vite__mapDeps([63,33,2,3,53,34]))),r1=g.lazy(()=>ne(()=>import("./AdminPage-Dl6tHeRR.js"),__vite__mapDeps([64,4,2,65,34]))),u1=g.lazy(()=>ne(()=>import("./DeveloperManage-CThq8pwt.js"),__vite__mapDeps([66,19,45,24,9,14,8,20,4,41,21]))),o1=g.lazy(()=>ne(()=>import("./BotManage-Bsqw0Xs0.js"),__vite__mapDeps([67,19,51,5,37,20,24,9,14,8,2,41]))),s1=g.lazy(()=>ne(()=>import("./TokenManage-CJ3cgY3x.js"),__vite__mapDeps([68,32,5,27,24,9,14,8,20]))),c1=g.lazy(()=>ne(()=>import("./AuditLogPage-BwRjz54d.js"),__vite__mapDeps([69,19,24,9,65,11]))),f1=g.lazy(()=>ne(()=>import("./SettingsPage-CMfiC5nO.js"),[]));function d1(){return m.jsx("div",{className:"flex h-full items-center justify-center",children:m.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-[var(--border)] border-t-[var(--accent)]"})})}function m1(){const r=xa(u=>u.sessionExpired);return m.jsxs(p0,{children:[m.jsx(k0,{}),m.jsx(_0,{children:m.jsxs(Ov,{children:[m.jsx(y0,{isOpen:r}),m.jsx(g.Suspense,{fallback:m.jsx(d1,{}),children:m.jsxs(rv,{children:[m.jsx(te,{path:"/",element:m.jsx(E0,{})}),m.jsx(te,{path:"/login",element:m.jsx(w0,{})}),m.jsx(te,{path:"/totp-setup",element:m.jsx(li,{children:m.jsx(T0,{})})}),m.jsx(te,{path:"/bind",element:m.jsx(li,{children:m.jsx(B0,{})})}),m.jsxs(te,{element:m.jsx(li,{children:m.jsx(h0,{})}),children:[m.jsx(te,{path:"/home",element:m.jsx(A0,{})}),m.jsx(te,{path:"/dashboard",element:m.jsx(R0,{})}),m.jsx(te,{path:"/tasks",element:m.jsx(z0,{})}),m.jsx(te,{path:"/tasks/:id",element:m.jsx(O0,{})}),m.jsx(te,{path:"/workers",element:m.jsx(C0,{})}),m.jsx(te,{path:"/workers/setup",element:m.jsx(li,{requireAdmin:!0,children:m.jsx(N0,{})})}),m.jsx(te,{path:"/workers/:id",element:m.jsx(D0,{})}),m.jsx(te,{path:"/projects",element:m.jsx(M0,{})}),m.jsx(te,{path:"/projects/:key",element:m.jsx(U0,{})}),m.jsx(te,{path:"/projects/:key/edit",element:m.jsx(q0,{})}),m.jsx(te,{path:"/projects/:key/pipeline",element:m.jsx(L0,{})}),m.jsx(te,{path:"/profile",element:m.jsx(H0,{})}),m.jsx(te,{path:"/access-tokens",element:m.jsx(Y0,{})}),m.jsxs(te,{path:"/docs",element:m.jsx(Q0,{}),children:[m.jsx(te,{index:!0,element:m.jsx(ll,{to:"cli",replace:!0})}),m.jsx(te,{path:"cli",element:m.jsx(G0,{})}),m.jsx(te,{path:"api",element:m.jsx(V0,{})}),m.jsx(te,{path:"bot",element:m.jsx(zh,{})}),m.jsx(te,{path:"all",element:m.jsx(i1,{})}),m.jsx(te,{path:"skill",element:m.jsx(X0,{})}),m.jsx(te,{path:"installation",element:m.jsx(Z0,{})}),m.jsx(te,{path:"developer-setup",element:m.jsx(K0,{})}),m.jsx(te,{path:"worker-setup",element:m.jsx(J0,{})}),m.jsx(te,{path:"bot-setup",element:m.jsx($0,{})}),m.jsx(te,{path:"local-development",element:m.jsx(W0,{})}),m.jsx(te,{path:"worker-operations",element:m.jsx(F0,{})}),m.jsx(te,{path:"deployment",element:m.jsx(I0,{})}),m.jsx(te,{path:"bot-integration",element:m.jsx(zh,{})}),m.jsx(te,{path:"pipeline-config",element:m.jsx(P0,{})}),m.jsx(te,{path:"dev-workflow",element:m.jsx(e1,{})}),m.jsx(te,{path:"permissions",element:m.jsx(t1,{})}),m.jsx(te,{path:"env-variables",element:m.jsx(a1,{})}),m.jsx(te,{path:"architecture",element:m.jsx(n1,{})}),m.jsx(te,{path:"changelog",element:m.jsx(l1,{})})]}),m.jsxs(te,{path:"/admin",element:m.jsx(li,{requireAdmin:!0,children:m.jsx(r1,{})}),children:[m.jsx(te,{index:!0,element:m.jsx(ll,{to:"developers",replace:!0})}),m.jsx(te,{path:"developers",element:m.jsx(u1,{})}),m.jsx(te,{path:"bots",element:m.jsx(o1,{})}),m.jsx(te,{path:"tokens",element:m.jsx(s1,{})}),m.jsx(te,{path:"audit-logs",element:m.jsx(c1,{})}),m.jsx(te,{path:"settings",element:m.jsx(f1,{})})]})]}),m.jsx(te,{path:"*",element:m.jsx(j0,{})})]})})]})})]})}xa.getState().initialize();lg.createRoot(document.getElementById("root")).render(m.jsx(g.StrictMode,{children:m.jsx(m1,{})}));export{b1 as A,rb as B,Qv as C,ap as D,nb as E,_1 as F,S1 as G,Ds as H,x1 as I,Wv as J,eb as K,Kh as L,lb as M,ll as N,Ks as O,n0 as P,lv as Q,Rr as R,Ph as S,rp as T,k1 as U,E1 as V,g1 as W,tp as X,$v as Y,Jt as a,Js as b,ke as c,ob as d,tb as e,Fa as f,yt as g,Vr as h,pb as i,m as j,vb as k,Wr as l,y1 as m,j1 as n,T1 as o,Ih as p,Fh as q,g as r,w1 as s,Wa as t,xa as u,e0 as v,p1 as w,Jv as x,ep as y,v1 as z};
|
|
235
|
+
ov login https://overlord.yourdomain.com`,setup_step_3_link:"development workflow",go_to_app:"open app",documentation:"documentation",api:"api",copy_install_command:"copy install command"},docs:{cli_reference:"cli",cli_subtitle:"// command-line tools",api_reference:"api",api_subtitle:"// rest api endpoints",quick_start:"// quick start",developer_cli:"developer cli (ov)",admin_cli:"admin cli (overlord)",authentication:"// authentication",usage:"usage",flags:"flags",example:"example",request_body:"request body",response:"response",quick_start_with_token:"// quick start with your token",replace_token_hint:"// replace <your-token> with the actual token value from your access tokens page",cli_tools_desc:"// overlord provides two cli tools: {ov} (developer cli) and {overlord} (admin/ops cli)",api_base_url_desc:"// base url: {url} · all endpoints return json · auth via bearer token in authorization header",docs_nav_getting_started:"// getting started",docs_nav_guides:"// guides",docs_nav_reference:"// reference",docs_nav_other:"// other",docs_installation:"installation",docs_developer_setup:"developer setup",docs_worker_setup:"worker setup",docs_bot_setup:"bot setup",docs_local_dev:"local development",docs_worker_ops:"worker operations",docs_deployment:"deployment",docs_bot_integration:"bot integration",docs_pipeline:"pipeline config",docs_dev_workflow:"dev workflow",docs_cli:"cli reference",docs_api:"api reference",docs_skill:"skill reference",docs_permissions:"permissions & roles",docs_env_vars:"environment variables",docs_architecture:"architecture",docs_changelog:"changelog",docs_menu:"docs menu",docs_back:"< back",docs_all_title:"// all documentation",docs_all_subtitle:"browse all guides, references, and resources",docs_desc_installation:"install overlord server and cli tools",docs_desc_developer_setup:"set up your local development environment",docs_desc_worker_setup:"register and configure worker machines",docs_desc_bot_setup:"connect lark or slack bots to overlord",docs_desc_local_dev:"run and debug overlord locally",docs_desc_worker_ops:"manage worker lifecycle and monitoring",docs_desc_deployment:"deploy overlord to production servers",docs_desc_bot_integration:"interactive cards, adapter pattern, troubleshooting",docs_desc_pipeline:"define multi-stage task pipelines",docs_desc_dev_workflow:"git workflow, branching, and merge requests",docs_desc_cli:"cli command reference",docs_desc_api:"http api endpoint reference",docs_desc_skill:"custom skill definitions and configuration",docs_desc_permissions:"roles, access control, and authorization",docs_desc_env_vars:"environment variables for server and worker",docs_desc_architecture:"system architecture and component overview",docs_desc_changelog:"version history and release notes"},onboarding:{getting_started:"// getting started",completed_count:"{done}/{total} completed",dismiss:"dismiss",all_done:"all set! you're ready to go.",admin_create_project_title:"create your first project",admin_create_project_desc:"set up a project with a git repo and pipeline",admin_register_worker_title:"register a worker",admin_register_worker_desc:"generate a token and set up a worker to run tasks",admin_create_developer_title:"create a developer account",admin_create_developer_desc:"add team members who can create and monitor tasks",admin_configure_bot_title:"configure a chat bot",admin_configure_bot_desc:"register a Lark or Slack bot to enable task management via chat",admin_first_task_title:"create your first task",admin_first_task_desc:"verify the full pipeline works end-to-end",lead_view_projects_title:"view your projects",lead_view_projects_desc:"check the projects assigned to you",lead_configure_pipeline_title:"configure a pipeline",lead_configure_pipeline_desc:"set up stages for your project workflow",lead_add_member_title:"add a team member",lead_add_member_desc:"invite developers to your project",lead_first_task_title:"create your first task",lead_first_task_desc:"submit a task and watch it execute",dev_install_cli_title:"install the ov cli",dev_install_cli_desc:"npm install -g @overlordai/developer-cli",dev_setup_cli_title:"run ov setup",dev_setup_cli_desc:"connect to the server and authenticate",dev_link_chat_title:"link your chat account",dev_link_chat_desc:'send "bind" to the bot in Lark or Slack to connect your account',dev_view_projects_title:"explore projects",dev_view_projects_desc:"browse available projects and their pipelines",dev_first_task_title:"create your first task",dev_first_task_desc:"submit a task via web or cli",go_to_projects:"go to projects",go_to_workers:"go to workers",go_to_tasks:"go to tasks",go_to_bots:"manage bots",manage_developers:"manage developers",cli:"cli",setup_guide:"setup guide"},bind:{title:"// link platform account",linking:"linking your account...",success:"account linked successfully!",success_detail:"your {platform} account has been connected. you can now use bot commands.",error:"failed to link account",invalid_token:'this link is invalid or has expired. send "bind" to the bot again to get a new link.',back_to_home:"go to dashboard",no_token:"no bind token provided."},pwa_install:{title:"overlord://install",command:"overlord --install",desc_1:"add to home screen for standalone app experience",desc_2:"works offline · full-screen · instant launch",install:"y — install",skip:"n — skip",ios_command:"install --manual",ios_step_1:"tap share button in safari toolbar",ios_step_2:'scroll down → tap "add to home screen"',ios_step_3:'tap "add" to confirm'},terminal_home:{title:"terminal",select_project:"project...",all_projects:"all projects",task_description_placeholder:"describe the task...",new_task:"new task",no_active_tasks:"no active tasks",create_task_hint:"create a task using the bar above to get started"}};function Sb(r,u){const s=u.split(".");let o=r;for(const f of s){if(o==null||typeof o!="object")return u;o=o[f]}return typeof o=="string"?o:u}function kb(r,u){return u?r.replace(/\{(\w+)\}/g,(s,o)=>u[o]!=null?String(u[o]):`{${o}}`):r}function Hr(r,u){return kb(Sb(xb,r),u)}function Jt(){return{t:g.useCallback((u,s)=>Hr(u,s),[])}}function rp(){const{theme:r,setTheme:u}=ip(),{t:s}=Jt(),o=r==="dark"||r==="system"&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").matches;function f(){u(o?"light":"dark")}return m.jsx("button",{onClick:f,className:"flex items-center gap-1.5 rounded-[4px] p-2 text-[var(--text-secondary)] transition-colors hover:bg-[var(--border)] hover:text-[var(--text-primary)]","aria-label":s(o?"common.switch_to_light":"common.switch_to_dark"),title:s(o?"common.light_mode":"common.dark_mode"),children:o?m.jsx(cb,{size:16}):m.jsx(ib,{size:16})})}class Ds extends Error{constructor(s,o,f){const h=s.status||s.status===0?s.status:"",_=s.statusText??"",x=`${h} ${_}`.trim(),v=x?`status code ${x}`:"an unknown error";super(`Request failed with ${v}: ${o.method} ${o.url}`);Ve(this,"response");Ve(this,"request");Ve(this,"options");this.name="HTTPError",this.response=s,this.request=o,this.options=f}}class up extends Error{constructor(s){let o="Non-error value was thrown";try{typeof s=="string"?o=s:s&&typeof s=="object"&&"message"in s&&typeof s.message=="string"&&(o=s.message)}catch{}super(o);Ve(this,"name","NonError");Ve(this,"value");this.value=s}}class js extends Error{constructor(s){const o=s!=null&&s.cause?s.cause instanceof Error?s.cause:new up(s.cause):void 0;super(s!=null&&s.code?`Forced retry: ${s.code}`:"Forced retry",o?{cause:o}:void 0);Ve(this,"name","ForceRetryError");Ve(this,"customDelay");Ve(this,"code");Ve(this,"customRequest");this.customDelay=s==null?void 0:s.delay,this.code=s==null?void 0:s.code,this.customRequest=s==null?void 0:s.request}}const xh=(()=>{let r=!1,u=!1;const s=typeof globalThis.ReadableStream=="function",o=typeof globalThis.Request=="function";if(s&&o)try{u=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return r=!0,"half"}}).headers.has("Content-Type")}catch(f){if(f instanceof Error&&f.message==="unsupported BodyInit type")return!1;throw f}return r&&!u})(),Eb=typeof globalThis.AbortController=="function",op=typeof globalThis.AbortSignal=="function"&&typeof globalThis.AbortSignal.any=="function",wb=typeof globalThis.ReadableStream=="function",Tb=typeof globalThis.FormData=="function",sp=["get","post","put","patch","head","delete"],jb={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*",bytes:"*/*"},Rs=2147483647,Rb=new TextEncoder().encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length,cp=Symbol("stop");class fp{constructor(u){Ve(this,"options");this.options=u}}const Ab=r=>new fp(r),zb={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0,context:!0},Ob={next:!0},Cb={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,duplex:!0},Db=r=>{if(!r)return 0;if(r instanceof FormData){let u=0;for(const[s,o]of r)u+=Rb,u+=new TextEncoder().encode(`Content-Disposition: form-data; name="${s}"`).length,u+=typeof o=="string"?new TextEncoder().encode(o).length:o.size;return u}if(r instanceof Blob)return r.size;if(r instanceof ArrayBuffer)return r.byteLength;if(typeof r=="string")return new TextEncoder().encode(r).length;if(r instanceof URLSearchParams)return new TextEncoder().encode(r.toString()).length;if("byteLength"in r)return r.byteLength;if(typeof r=="object"&&r!==null)try{const u=JSON.stringify(r);return new TextEncoder().encode(u).length}catch{return 0}return 0},dp=(r,u,s)=>{let o,f=0;return r.pipeThrough(new TransformStream({transform(h,_){if(_.enqueue(h),o){f+=o.byteLength;let x=u===0?0:f/u;x>=1&&(x=1-Number.EPSILON),s==null||s({percent:x,totalBytes:Math.max(u,f),transferredBytes:f},o)}o=h},flush(){o&&(f+=o.byteLength,s==null||s({percent:1,totalBytes:Math.max(u,f),transferredBytes:f},o))}}))},Nb=(r,u)=>{if(!r.body)return r;if(r.status===204)return new Response(null,{status:r.status,statusText:r.statusText,headers:r.headers});const s=Math.max(0,Number(r.headers.get("content-length"))||0);return new Response(dp(r.body,s,u),{status:r.status,statusText:r.statusText,headers:r.headers})},Mb=(r,u,s)=>{if(!r.body)return r;const o=Db(s??r.body);return new Request(r,{duplex:"half",body:dp(r.body,o,u)})},gn=r=>r!==null&&typeof r=="object",Dr=(...r)=>{for(const u of r)if((!gn(u)||Array.isArray(u))&&u!==void 0)throw new TypeError("The `options` argument must be an object");return $s({},...r)},mp=(r={},u={})=>{const s=new globalThis.Headers(r),o=u instanceof globalThis.Headers,f=new globalThis.Headers(u);for(const[h,_]of f.entries())o&&_==="undefined"||_===void 0?s.delete(h):s.set(h,_);return s};function Nr(r,u,s){return Object.hasOwn(u,s)&&u[s]===void 0?[]:$s(r[s]??[],u[s]??[])}const hp=(r={},u={})=>({beforeRequest:Nr(r,u,"beforeRequest"),beforeRetry:Nr(r,u,"beforeRetry"),afterResponse:Nr(r,u,"afterResponse"),beforeError:Nr(r,u,"beforeError")}),Ub=(r,u)=>{const s=new URLSearchParams;for(const o of[r,u])if(o!==void 0)if(o instanceof URLSearchParams)for(const[f,h]of o.entries())s.append(f,h);else if(Array.isArray(o))for(const f of o){if(!Array.isArray(f)||f.length!==2)throw new TypeError("Array search parameters must be provided in [[key, value], ...] format");s.append(String(f[0]),String(f[1]))}else if(gn(o))for(const[f,h]of Object.entries(o))h!==void 0&&s.append(f,String(h));else{const f=new URLSearchParams(o);for(const[h,_]of f.entries())s.append(h,_)}return s},$s=(...r)=>{let u={},s={},o={},f;const h=[];for(const _ of r)if(Array.isArray(_))Array.isArray(u)||(u=[]),u=[...u,..._];else if(gn(_)){for(let[x,v]of Object.entries(_)){if(x==="signal"&&v instanceof globalThis.AbortSignal){h.push(v);continue}if(x==="context"){if(v!=null&&(!gn(v)||Array.isArray(v)))throw new TypeError("The `context` option must be an object");u={...u,context:v==null?{}:{...u.context,...v}};continue}if(x==="searchParams"){v==null?f=void 0:f=f===void 0?v:Ub(f,v);continue}gn(v)&&x in u&&(v=$s(u[x],v)),u={...u,[x]:v}}gn(_.hooks)&&(o=hp(o,_.hooks),u.hooks=o),gn(_.headers)&&(s=mp(s,_.headers),u.headers=s)}return f!==void 0&&(u.searchParams=f),h.length>0&&(h.length===1?u.signal=h[0]:op?u.signal=AbortSignal.any(h):u.signal=h.at(-1)),u},qb=r=>sp.includes(r)?r.toUpperCase():r,Lb=["get","put","head","delete","options","trace"],Hb=[408,413,429,500,502,503,504],Bb=[413,429,503],Sh={limit:2,methods:Lb,statusCodes:Hb,afterStatusCodes:Bb,maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:r=>.3*2**(r-1)*1e3,jitter:void 0,retryOnTimeout:!1},Yb=(r={})=>{if(typeof r=="number")return{...Sh,limit:r};if(r.methods&&!Array.isArray(r.methods))throw new Error("retry.methods must be an array");if(r.methods&&(r.methods=r.methods.map(s=>s.toLowerCase())),r.statusCodes&&!Array.isArray(r.statusCodes))throw new Error("retry.statusCodes must be an array");const u=Object.fromEntries(Object.entries(r).filter(([,s])=>s!==void 0));return{...Sh,...u}};class Ns extends Error{constructor(s){super(`Request timed out: ${s.method} ${s.url}`);Ve(this,"request");this.name="TimeoutError",this.request=s}}async function Gb(r,u,s,o){return new Promise((f,h)=>{const _=setTimeout(()=>{s&&s.abort(),h(new Ns(r))},o.timeout);o.fetch(r,u).then(f).catch(h).then(()=>{clearTimeout(_)})})}async function Vb(r,{signal:u}){return new Promise((s,o)=>{u&&(u.throwIfAborted(),u.addEventListener("abort",f,{once:!0}));function f(){clearTimeout(h),o(u.reason)}const h=setTimeout(()=>{u==null||u.removeEventListener("abort",f),s()},r)})}const Xb=(r,u)=>{const s={};for(const o in u)Object.hasOwn(u,o)&&!(o in Cb)&&!(o in zb)&&(!(o in r)||o in Ob)&&(s[o]=u[o]);return s},Qb=r=>r===void 0?!1:Array.isArray(r)?r.length>0:r instanceof URLSearchParams?r.size>0:typeof r=="object"?Object.keys(r).length>0:typeof r=="string"?r.trim().length>0:!!r;function Zb(r){return r instanceof Ds||(r==null?void 0:r.name)===Ds.name}function Kb(r){return r instanceof Ns||(r==null?void 0:r.name)===Ns.name}var Zr,pp,Kt,Bt,rt,X,$a,ea,vn,ue,Br,_p,Ms,Yr,Ja,Us,yp,ii,Gr,qs;const ri=class ri{constructor(u,s={}){Pt(this,ue);Ve(this,"request");Pt(this,Kt);Pt(this,Bt,0);Pt(this,rt);Pt(this,X);Pt(this,$a);Pt(this,ea);Pt(this,vn);var f,h,_;if(Zt(this,rt,u),Zt(this,X,{...s,headers:mp(U(this,rt).headers,s.headers),hooks:hp({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},s.hooks),method:qb(s.method??U(this,rt).method??"GET"),prefixUrl:String(s.prefixUrl||""),retry:Yb(s.retry),throwHttpErrors:s.throwHttpErrors??!0,timeout:s.timeout??1e4,fetch:s.fetch??globalThis.fetch.bind(globalThis),context:s.context??{}}),typeof U(this,rt)!="string"&&!(U(this,rt)instanceof URL||U(this,rt)instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(U(this,X).prefixUrl&&typeof U(this,rt)=="string"){if(U(this,rt).startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");U(this,X).prefixUrl.endsWith("/")||(U(this,X).prefixUrl+="/"),Zt(this,rt,U(this,X).prefixUrl+U(this,rt))}Eb&&op&&(Zt(this,ea,U(this,X).signal??U(this,rt).signal),Zt(this,Kt,new globalThis.AbortController),U(this,X).signal=U(this,ea)?AbortSignal.any([U(this,ea),U(this,Kt).signal]):U(this,Kt).signal),xh&&(U(this,X).duplex="half"),U(this,X).json!==void 0&&(U(this,X).body=((h=(f=U(this,X)).stringifyJson)==null?void 0:h.call(f,U(this,X).json))??JSON.stringify(U(this,X).json),U(this,X).headers.set("content-type",U(this,X).headers.get("content-type")??"application/json"));const o=s.headers&&new globalThis.Headers(s.headers).has("content-type");if(U(this,rt)instanceof globalThis.Request&&(Tb&&U(this,X).body instanceof globalThis.FormData||U(this,X).body instanceof URLSearchParams)&&!o&&U(this,X).headers.delete("content-type"),this.request=new globalThis.Request(U(this,rt),U(this,X)),Qb(U(this,X).searchParams)){const v="?"+(typeof U(this,X).searchParams=="string"?U(this,X).searchParams.replace(/^\?/,""):new URLSearchParams(Se(_=ri,Zr,pp).call(_,U(this,X).searchParams)).toString()),p=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,v);this.request=new globalThis.Request(p,U(this,X))}if(U(this,X).onUploadProgress){if(typeof U(this,X).onUploadProgress!="function")throw new TypeError("The `onUploadProgress` option must be a function");if(!xh)throw new Error("Request streams are not supported in your environment. The `duplex` option for `Request` is not available.");this.request=Se(this,ue,qs).call(this,this.request,U(this,X).body??void 0)}}static create(u,s){var _,x,v;const o=new ri(u,s),f=async()=>{var j,k,M,V,B,q,L,H,I,J,_e,ye;if(typeof U(o,X).timeout=="number"&&U(o,X).timeout>Rs)throw new RangeError(`The \`timeout\` option cannot be greater than ${Rs}`);await Promise.resolve();let p=await Se(j=o,ue,yp).call(j);for(const he of U(o,X).hooks.afterResponse){const W=Se(k=o,ue,Ms).call(k,p.clone());let $;try{$=await he(o.request,Se(M=o,ue,ii).call(M),W,{retryCount:U(o,Bt)})}catch(Pe){throw Se(V=o,ue,Ja).call(V,W),Se(B=o,ue,Ja).call(B,p),Pe}if($ instanceof fp)throw Se(q=o,ue,Ja).call(q,W),Se(L=o,ue,Ja).call(L,p),new js($.options);const oe=$ instanceof globalThis.Response?$:p;W!==oe&&Se(H=o,ue,Ja).call(H,W),p!==oe&&Se(I=o,ue,Ja).call(I,p),p=oe}if(Se(J=o,ue,Ms).call(J,p),!p.ok&&(typeof U(o,X).throwHttpErrors=="function"?U(o,X).throwHttpErrors(p.status):U(o,X).throwHttpErrors)){let he=new Ds(p,o.request,Se(_e=o,ue,ii).call(_e));for(const W of U(o,X).hooks.beforeError)he=await W(he,{retryCount:U(o,Bt)});throw he}if(U(o,X).onDownloadProgress){if(typeof U(o,X).onDownloadProgress!="function")throw new TypeError("The `onDownloadProgress` option must be a function");if(!wb)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");const he=p.clone();return Se(ye=o,ue,Ja).call(ye,p),Nb(he,U(o,X).onDownloadProgress)}return p},h=Se(_=o,ue,Us).call(_,f).finally(()=>{var j,k;const p=U(o,$a);Se(j=o,ue,Yr).call(j,(p==null?void 0:p.body)??void 0),Se(k=o,ue,Yr).call(k,o.request.body??void 0)});for(const[p,j]of Object.entries(jb))p==="bytes"&&typeof((v=(x=globalThis.Response)==null?void 0:x.prototype)==null?void 0:v.bytes)!="function"||(h[p]=async()=>{o.request.headers.set("accept",o.request.headers.get("accept")||j);const k=await h;if(p==="json"){if(k.status===204)return"";const M=await k.text();return M===""?"":s.parseJson?s.parseJson(M):JSON.parse(M)}return k[p]()});return h}};Zr=new WeakSet,pp=function(u){return u&&typeof u=="object"&&!Array.isArray(u)&&!(u instanceof URLSearchParams)?Object.fromEntries(Object.entries(u).filter(([,s])=>s!==void 0)):u},Kt=new WeakMap,Bt=new WeakMap,rt=new WeakMap,X=new WeakMap,$a=new WeakMap,ea=new WeakMap,vn=new WeakMap,ue=new WeakSet,Br=function(){const u=U(this,X).retry.delay(U(this,Bt));let s=u;U(this,X).retry.jitter===!0?s=Math.random()*u:typeof U(this,X).retry.jitter=="function"&&(s=U(this,X).retry.jitter(u),(!Number.isFinite(s)||s<0)&&(s=u));const o=U(this,X).retry.backoffLimit??Number.POSITIVE_INFINITY;return Math.min(o,s)},_p=async function(u){if(Pm(this,Bt)._++,U(this,Bt)>U(this,X).retry.limit)throw u;const s=u instanceof Error?u:new up(u);if(s instanceof js)return s.customDelay??Se(this,ue,Br).call(this);if(!U(this,X).retry.methods.includes(this.request.method.toLowerCase()))throw u;if(U(this,X).retry.shouldRetry!==void 0){const o=await U(this,X).retry.shouldRetry({error:s,retryCount:U(this,Bt)});if(o===!1)throw u;if(o===!0)return Se(this,ue,Br).call(this)}if(Kb(u)&&!U(this,X).retry.retryOnTimeout)throw u;if(Zb(u)){if(!U(this,X).retry.statusCodes.includes(u.response.status))throw u;const o=u.response.headers.get("Retry-After")??u.response.headers.get("RateLimit-Reset")??u.response.headers.get("X-RateLimit-Retry-After")??u.response.headers.get("X-RateLimit-Reset")??u.response.headers.get("X-Rate-Limit-Reset");if(o&&U(this,X).retry.afterStatusCodes.includes(u.response.status)){let f=Number(o)*1e3;Number.isNaN(f)?f=Date.parse(o)-Date.now():f>=Date.parse("2024-01-01")&&(f-=Date.now());const h=U(this,X).retry.maxRetryAfter??f;return f<h?f:h}if(u.response.status===413)throw u}return Se(this,ue,Br).call(this)},Ms=function(u){return U(this,X).parseJson&&(u.json=async()=>U(this,X).parseJson(await u.text())),u},Yr=function(u){u&&u.cancel().catch(()=>{})},Ja=function(u){Se(this,ue,Yr).call(this,u.body??void 0)},Us=async function(u){try{return await u()}catch(s){const o=Math.min(await Se(this,ue,_p).call(this,s),Rs);if(U(this,Bt)<1)throw s;if(await Vb(o,U(this,ea)?{signal:U(this,ea)}:{}),s instanceof js&&s.customRequest){const f=U(this,X).signal?new globalThis.Request(s.customRequest,{signal:U(this,X).signal}):new globalThis.Request(s.customRequest);Se(this,ue,Gr).call(this,f)}for(const f of U(this,X).hooks.beforeRetry){const h=await f({request:this.request,options:Se(this,ue,ii).call(this),error:s,retryCount:U(this,Bt)});if(h instanceof globalThis.Request){Se(this,ue,Gr).call(this,h);break}if(h instanceof globalThis.Response)return h;if(h===cp)return}return Se(this,ue,Us).call(this,u)}},yp=async function(){var s;(s=U(this,Kt))!=null&&s.signal.aborted&&(Zt(this,Kt,new globalThis.AbortController),U(this,X).signal=U(this,ea)?AbortSignal.any([U(this,ea),U(this,Kt).signal]):U(this,Kt).signal,this.request=new globalThis.Request(this.request,{signal:U(this,X).signal}));for(const o of U(this,X).hooks.beforeRequest){const f=await o(this.request,Se(this,ue,ii).call(this),{retryCount:U(this,Bt)});if(f instanceof Response)return f;if(f instanceof globalThis.Request){Se(this,ue,Gr).call(this,f);break}}const u=Xb(this.request,U(this,X));return Zt(this,$a,this.request),this.request=U(this,$a).clone(),U(this,X).timeout===!1?U(this,X).fetch(U(this,$a),u):Gb(U(this,$a),u,U(this,Kt),U(this,X))},ii=function(){if(!U(this,vn)){const{hooks:u,...s}=U(this,X);Zt(this,vn,Object.freeze(s))}return U(this,vn)},Gr=function(u){Zt(this,vn,void 0),this.request=Se(this,ue,qs).call(this,u)},qs=function(u,s){return!U(this,X).onUploadProgress||!u.body?u:Mb(u,U(this,X).onUploadProgress,s??U(this,X).body??void 0)},Pt(ri,Zr);let Qr=ri;/*! MIT License © Sindre Sorhus */const Ls=r=>{const u=(s,o)=>Qr.create(s,Dr(r,o));for(const s of sp)u[s]=(o,f)=>Qr.create(o,Dr(r,f,{method:s}));return u.create=s=>Ls(Dr(s)),u.extend=s=>(typeof s=="function"&&(s=s(r??{})),Ls(Dr(r,s))),u.stop=cp,u.retry=Ab,u},kh=Ls();let Mr=null;const Vr=kh.create({prefixUrl:"/api",timeout:3e4,hooks:{beforeRequest:[r=>{const u=xa.getState().accessToken;u&&r.headers.set("Authorization",`Bearer ${u}`)}],afterResponse:[async(r,u,s)=>{if(s.status===401&&!r.headers.has("X-Retry-After-Refresh")){Mr||(Mr=xa.getState().refresh().finally(()=>{Mr=null}));try{await Mr}catch{throw s}const o=xa.getState().accessToken;return o&&r.headers.set("Authorization",`Bearer ${o}`),r.headers.set("X-Retry-After-Refresh","1"),kh(r,u)}}]}}),Jb=3e4;function $b(r){if(r.link)return r.link;const u=(r.title+" "+r.body).match(/task\s*#?(\d+)/i);if(u)return`/tasks/${u[1]}`;const s=(r.title+" "+r.body).match(/worker\s+(\S+)/i);return s?`/workers/${s[1]}`:null}function gp(){const r=Fa(),[u,s]=g.useState([]),[o,f]=g.useState(0),[h,_]=g.useState(!1),[x,v]=g.useState(!1),p=g.useRef(null),{t:j}=Jt(),k=g.useRef(async()=>{try{v(!0);const q=(await Vr.get("web/notifications",{searchParams:{limit:"20"}}).json()).data,L=q.filter(H=>!H.isRead).length;s(H=>H.length===q.length&&H.every((I,J)=>I.id===q[J].id&&I.isRead===q[J].isRead)?H:q),f(H=>H===L?H:L)}catch{}finally{v(!1)}});g.useEffect(()=>{k.current();const B=setInterval(()=>k.current(),Jb);return()=>clearInterval(B)},[]),g.useEffect(()=>{function B(q){p.current&&!p.current.contains(q.target)&&_(!1)}return document.addEventListener("mousedown",B),()=>document.removeEventListener("mousedown",B)},[]);async function M(B){try{await Vr.post(`web/notifications/${B}/read`),s(q=>q.map(L=>L.id===B?{...L,isRead:!0}:L)),f(q=>Math.max(0,q-1))}catch{}}async function V(){try{await Vr.post("web/notifications/read-all"),s(B=>B.map(q=>({...q,isRead:!0}))),f(0)}catch{}}return m.jsxs("div",{className:"relative",ref:p,children:[m.jsxs("button",{type:"button",onClick:()=>_(B=>!B),"aria-label":j("common.notifications"),className:"relative inline-flex items-center justify-center rounded-[4px] p-2 text-[var(--text-secondary)] transition-colors hover:bg-[var(--border)] hover:text-[var(--text-primary)]",children:[m.jsx(Vv,{size:16}),o>0&&m.jsx("span",{className:"absolute right-0 top-0 flex h-3 min-w-3 items-center justify-center rounded-full bg-[var(--destructive)] px-0.5 text-[8px] font-semibold leading-none text-white",children:o})]}),h&&m.jsxs("div",{className:"absolute right-0 top-full z-50 mt-2 w-[min(320px,calc(100vw-2rem))] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] shadow-lg",children:[m.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--border)] px-4 py-3",children:[m.jsx("span",{className:"text-sm font-semibold",children:j("common.notifications")}),o>0&&m.jsxs("button",{type:"button",onClick:V,"aria-label":j("common.mark_all_read"),className:"inline-flex items-center gap-1.5 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[m.jsx(Xv,{className:"h-3.5 w-3.5"}),j("common.mark_all_read")]})]}),m.jsx("div",{className:"max-h-80 overflow-y-auto",children:x&&u.length===0?m.jsx("div",{className:"flex justify-center py-8",children:m.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})}):u.length===0?m.jsxs("div",{className:"flex flex-col items-center gap-3 py-8",children:[m.jsx("span",{className:"text-xl font-bold text-[var(--border)]",children:"[ ]"}),m.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:j("common.no_notifications")})]}):u.map(B=>{const q=$b(B);return m.jsxs("div",{className:`flex items-start gap-3 border-b border-[var(--border)] px-4 py-3 last:border-b-0 transition-colors ${q?"cursor-pointer hover:bg-[var(--bg-input)]":""} ${B.isRead?"opacity-60":"bg-[var(--accent)]/5"}`,onClick:()=>{q&&(B.isRead||M(B.id),_(!1),r(q))},children:[m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsx("p",{className:"text-sm font-medium",children:B.title}),m.jsx("p",{className:"text-xs text-[var(--text-secondary)]",children:B.body}),m.jsx("p",{className:"mt-1 text-xs text-[var(--text-secondary)] opacity-60",children:new Date(B.createdAt).toLocaleString()})]}),!B.isRead&&m.jsx("button",{type:"button",onClick:L=>{L.stopPropagation(),M(B.id)},"aria-label":j("common.mark_as_read"),className:"shrink-0 rounded-[4px] p-1 text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:m.jsx(Qv,{className:"h-3.5 w-3.5"})})]},B.id)})})]})]})}function Wb(r){return{tasks:r.tasks.map(u=>({type:"task",id:u.id,title:`#${u.id} ${u.description}`,subtitle:`${u.status} · ${u.project_key}`})),workers:(r.workers??[]).map(u=>({type:"worker",id:u.id,title:u.name,subtitle:`${u.hostname} · ${u.status}`})),projects:r.projects.map(u=>({type:"project",id:u.key,title:u.name,subtitle:u.repository}))}}const Fb=300,Eh={tasks:sb,workers:Ph,projects:Fv},Ib={tasks:"tasks",workers:"workers",projects:"projects"};function vp({renderTrigger:r}={}){const[u,s]=g.useState(""),[o,f]=g.useState({tasks:[],workers:[],projects:[]}),[h,_]=g.useState(!1),[x,v]=g.useState(!1),[p,j]=g.useState(0),k=g.useRef(null),M=g.useRef(null),V=g.useRef(void 0),B=g.useRef(void 0),q=Fa(),{t:L}=Jt(),H=g.useMemo(()=>[...o.tasks,...o.workers,...o.projects],[o]),I=g.useCallback(async $=>{var Pe;if(!$.trim()){f({tasks:[],workers:[],projects:[]});return}(Pe=B.current)==null||Pe.abort();const oe=new AbortController;B.current=oe;try{_(!0);const Je=await Vr.get("web/search",{searchParams:{q:$},signal:oe.signal}).json();f(Wb(Je)),j(0)}catch(Je){if(Je instanceof DOMException&&Je.name==="AbortError")return}finally{oe.signal.aborted||_(!1)}},[]);g.useEffect(()=>(V.current&&clearTimeout(V.current),V.current=setTimeout(()=>I(u),Fb),()=>{V.current&&clearTimeout(V.current)}),[u,I]),g.useEffect(()=>{function $(oe){oe.key==="/"&&!x&&!(oe.target instanceof HTMLInputElement||oe.target instanceof HTMLTextAreaElement)&&(oe.preventDefault(),v(!0)),oe.key==="Escape"&&x&&(oe.preventDefault(),J())}return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[x]),g.useEffect(()=>{x&&setTimeout(()=>{var $;return($=M.current)==null?void 0:$.focus()},50)},[x]);function J(){v(!1),s(""),f({tasks:[],workers:[],projects:[]}),j(0)}function _e($){switch(J(),$.type){case"task":q(`/tasks/${$.id}`);break;case"worker":q(`/workers/${$.id}`);break;case"project":q(`/projects/${$.id}`);break}}function ye($){$.key==="ArrowDown"?($.preventDefault(),j(oe=>Math.min(oe+1,H.length-1))):$.key==="ArrowUp"?($.preventDefault(),j(oe=>Math.max(oe-1,0))):$.key==="Enter"&&H[p]&&($.preventDefault(),_e(H[p]))}const he=H.length>0;let W=0;return m.jsxs(m.Fragment,{children:[r?r(()=>v(!0)):m.jsxs("button",{type:"button",onClick:()=>v(!0),className:"flex items-center gap-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-input)] px-3 py-1.5 text-xs text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)]",children:[m.jsx(Ih,{className:"h-3.5 w-3.5"}),m.jsx("span",{children:L("common.search_placeholder")}),m.jsx("kbd",{className:"ml-2 rounded-[4px] border border-[var(--border)] bg-[var(--bg-primary)] px-1.5 py-0.5 text-[11px] text-[var(--text-muted)]",children:"/"})]}),x&&m.jsx("div",{ref:k,className:"fixed inset-0 z-[100] flex items-start justify-center pt-[calc(var(--safe-area-top,0px)+16px)] md:pt-[15vh]",style:{backgroundColor:"rgba(0, 0, 0, 0.6)"},onClick:$=>{$.target===k.current&&J()},children:m.jsxs("div",{className:"mx-3 w-full max-w-[640px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)] shadow-2xl sm:mx-4 md:mx-0",children:[m.jsxs("div",{className:"flex items-center gap-3 border-b border-[var(--border)] px-4 py-3",children:[m.jsx("span",{className:"text-sm text-[var(--accent)]",children:"/"}),m.jsx("input",{ref:M,type:"text",placeholder:L("common.search_input_placeholder"),value:u,onChange:$=>s($.target.value),onKeyDown:ye,className:"flex-1 bg-transparent text-sm text-[var(--text-primary)] placeholder:text-[var(--text-muted)] outline-none"}),h&&m.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-[var(--border)] border-t-[var(--accent)]"})]}),m.jsx("div",{className:"max-h-[50vh] overflow-y-auto sm:max-h-[60vh] md:max-h-[400px]",children:u.trim()&&!he&&!h?m.jsx("div",{className:"py-10 text-center text-xs text-[var(--text-muted)]",children:L("common.no_search_results",{query:u})}):Object.keys(Eh).map($=>{const oe=o[$];if(oe.length===0)return null;const Pe=Eh[$],Je=W;return W+=oe.length,m.jsxs("div",{children:[m.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 text-[var(--text-muted)]",children:[m.jsx(Pe,{className:"h-3 w-3"}),m.jsx("span",{className:"text-[11px] lowercase tracking-wider",children:Ib[$]})]}),oe.map((qe,At)=>{const ut=Je+At,Ne=ut===p;return m.jsxs("button",{type:"button",className:`flex w-full items-center gap-3 px-4 py-2.5 text-left transition-colors ${Ne?"bg-[var(--accent)]/10 text-[var(--accent)]":"hover:bg-[var(--bg-input)]"}`,onClick:()=>_e(qe),onMouseEnter:()=>j(ut),children:[m.jsx("span",{className:`text-xs ${Ne?"text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:Ne?">":" "}),m.jsxs("div",{className:"min-w-0 flex-1",children:[m.jsx("p",{className:"truncate text-sm",children:qe.title}),qe.subtitle&&m.jsx("p",{className:"truncate text-xs text-[var(--text-muted)]",children:qe.subtitle})]})]},`${qe.type}-${qe.id}`)})]},$)})}),m.jsxs("div",{className:"hidden items-center gap-4 border-t border-[var(--border)] px-4 py-2 md:flex",children:[m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"↑↓"})," ",L("common.navigate_hint")]}),m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"↵"})," ",L("common.select_hint")]}),m.jsxs("span",{className:"flex items-center gap-1 text-[11px] text-[var(--text-muted)]",children:[m.jsx("kbd",{className:"rounded-[4px] border border-[var(--border)] px-1",children:"esc"})," ",L("common.close_hint")]})]})]})})]})}const Pb={danger:"var(--destructive)",warning:"var(--warning)",accent:"var(--accent)"},wh="confirm-dialog-title";function Th(r){return Array.from(r.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))}function e0({isOpen:r,onClose:u,onConfirm:s,title:o,message:f,confirmVariant:h="danger",isLoading:_,...x}){const{t:v}=Jt(),p=x.confirmLabel??v("common.confirm"),j=x.cancelLabel??v("common.cancel"),k=g.useRef(null),M=g.useRef(null),V=Pb[h];g.useEffect(()=>{if(!r)return;M.current=document.activeElement;const q=requestAnimationFrame(()=>{if(k.current){const L=Th(k.current);L.length>0&&L[0].focus()}});return()=>{var L;cancelAnimationFrame(q),(L=M.current)==null||L.focus()}},[r]);const B=g.useCallback(q=>{if(q.key==="Tab"&&k.current){const L=Th(k.current);if(L.length===0)return;const H=L[0],I=L[L.length-1];q.shiftKey?document.activeElement===H&&(q.preventDefault(),I.focus()):document.activeElement===I&&(q.preventDefault(),H.focus())}},[]);return r?m.jsx("div",{onClick:u,style:{position:"fixed",inset:0,zIndex:50,display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"max(1rem, 10vh)",paddingLeft:"1rem",paddingRight:"1rem",backgroundColor:"var(--modal-backdrop, rgba(12,12,12,0.6))"},children:m.jsxs("div",{ref:k,role:"dialog","aria-modal":"true","aria-labelledby":wh,onClick:q=>q.stopPropagation(),onKeyDown:B,style:{width:"100%",maxWidth:"480px",backgroundColor:"var(--bg-card)",border:"1px solid var(--border)",borderRadius:"4px",padding:"1.5rem"},children:[m.jsx("div",{style:{marginBottom:"1.25rem"},children:m.jsxs("div",{id:wh,style:{color:"var(--accent)",fontSize:"0.875rem",fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem"},children:[m.jsx(ep,{style:{width:"1rem",height:"1rem"}}),o]})}),m.jsx("div",{style:{marginBottom:"1.25rem"},children:m.jsx("p",{style:{color:"var(--text-muted)",fontSize:"0.75rem",lineHeight:"1.5"},children:f})}),m.jsxs("div",{style:{display:"flex",gap:"0.75rem"},children:[m.jsx("button",{type:"button",onClick:u,disabled:_,className:"text-[var(--text-muted)] hover:text-[var(--text-primary)] hover:border-[var(--text-muted)]",style:{flex:1,padding:"0.5rem",backgroundColor:"transparent",border:"1px solid var(--border)",borderRadius:"4px",fontSize:"0.75rem",cursor:_?"not-allowed":"pointer",opacity:_?.7:1,transition:"color 0.15s, border-color 0.15s"},children:j}),m.jsx("button",{type:"button",onClick:s,disabled:_,style:{flex:1,padding:"0.5rem",backgroundColor:V,color:"#0C0C0C",border:"none",borderRadius:"4px",fontSize:"0.75rem",fontWeight:600,cursor:_?"not-allowed":"pointer",opacity:_?.7:1},children:_?v("common.processing"):p})]})]})}):null}const jh="overlord-pwa-install-dismissed";function t0(){const r=navigator.userAgent;return/iP(hone|od|ad)/.test(r)&&/WebKit/.test(r)&&!/(CriOS|FxiOS|OPiOS|mercury)/.test(r)}function a0(){return navigator.standalone===!0||window.matchMedia("(display-mode: standalone)").matches}function n0(){const{t:r}=Jt(),[u,s]=g.useState("hidden"),[o,f]=g.useState(!1),h=g.useRef(null),_=g.useRef(void 0);g.useEffect(()=>{if(a0()||localStorage.getItem(jh)||window.innerWidth>=768)return;const p=k=>{k.preventDefault(),h.current=k};window.addEventListener("beforeinstallprompt",p);const j=setTimeout(()=>s("visible"),2e3);return()=>{window.removeEventListener("beforeinstallprompt",p),clearTimeout(j),clearTimeout(_.current)}},[]);function x(){localStorage.setItem(jh,"1"),s("dismissing"),_.current=setTimeout(()=>s("hidden"),200)}async function v(){if(h.current){await h.current.prompt();const{outcome:p}=await h.current.userChoice;p==="accepted"&&x(),h.current=null}else t0()&&f(!0)}return u==="hidden"?null:m.jsx("div",{className:`fixed bottom-4 left-4 right-4 z-40 md:hidden ${u==="dismissing"?"animate-slide-down":"animate-slide-up"}`,role:"dialog","aria-label":r("pwa_install.title"),children:m.jsxs("div",{className:"overflow-hidden rounded-[4px] border border-[var(--accent)]/40 bg-[#0C0C0C] shadow-[0_8px_32px_rgba(0,0,0,0.4)]",children:[m.jsxs("div",{className:"flex items-center justify-between border-b border-[var(--accent)]/20 bg-[var(--accent)]/[0.06] px-3 py-1.5",children:[m.jsxs("div",{className:"flex items-center gap-1.5",children:[m.jsx("div",{className:"h-1.5 w-1.5 rounded-full bg-[var(--accent)]"}),m.jsx("span",{className:"text-[9px] font-medium text-[var(--accent)]",children:r("pwa_install.title")})]}),m.jsx("button",{onClick:x,className:"p-1 text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]",children:m.jsx(tp,{size:14})})]}),m.jsx("div",{className:"px-3.5 py-3",children:o?m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"text-[10px] text-[var(--text-muted)]",children:[m.jsx("span",{className:"text-[var(--accent)]",children:"$"})," ",r("pwa_install.ios_command")]}),m.jsx("div",{className:"mt-2.5 flex flex-col gap-2.5",children:[r("pwa_install.ios_step_1"),r("pwa_install.ios_step_2"),r("pwa_install.ios_step_3")].map((p,j)=>m.jsxs("div",{className:"flex items-center gap-2.5",children:[m.jsx("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-[4px] bg-[var(--accent)]/[0.08]",children:m.jsx("span",{className:"text-xs font-semibold text-[var(--accent)]",children:j+1})}),m.jsxs("span",{className:"text-[10px] leading-snug text-[var(--text-secondary)]",children:[j===0&&m.jsx(ub,{size:12,className:"mr-1 inline-block align-text-bottom text-[var(--text-muted)]"}),p]})]},j))})]}):m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"text-[10px] text-[var(--text-muted)]",children:[m.jsx("span",{className:"text-[var(--accent)]",children:"$"})," ",r("pwa_install.command")]}),m.jsxs("div",{className:"mt-1.5 text-[10px] leading-relaxed text-[var(--text-secondary)]",children:["→ ",r("pwa_install.desc_1"),m.jsx("br",{}),"→ ",r("pwa_install.desc_2")]}),m.jsxs("div",{className:"mt-2.5 flex gap-2",children:[m.jsx("button",{onClick:v,className:"rounded-[4px] bg-[var(--accent)] px-4 py-1.5 text-[10px] font-semibold text-black transition-all hover:brightness-110",children:r("pwa_install.install")}),m.jsx("button",{onClick:x,className:"rounded-[4px] border border-[#333] px-3 py-1.5 text-[10px] text-[var(--text-muted)] transition-colors hover:border-[var(--text-muted)]",children:r("pwa_install.skip")})]})]})})]})})}const bp=g.createContext({setActions:()=>{}});function T1(r){const{setActions:u}=g.useContext(bp);g.useEffect(()=>(u(r),()=>u(null)),[r,u])}const xp=g.createContext({setSubtitle:()=>{}});function j1(r){const{setSubtitle:u}=g.useContext(xp);g.useEffect(()=>(u(r),()=>u(null)),[r,u])}const l0=[{to:"/home",label:"terminal",icon:Js},{to:"/tasks",label:"tasks",icon:Fh},{to:"/dashboard",label:"dashboard",icon:Wh},{to:"/workers",label:"workers",icon:Ph},{to:"/projects",label:"projects",icon:Iv},{to:"/access-tokens",label:"tokens",icon:eb}],i0=[{to:"/docs/cli",label:"cli",icon:Js},{to:"/docs/api",label:"api",icon:Wv},{to:"/docs/bot",label:"bot",icon:lb},{to:"/docs/all",label:"all",icon:tb}],r0=[{to:"/admin",label:"admin",icon:ob}],u0=[{to:"/home",label:"terminal",icon:Js},{to:"/tasks",label:"tasks",icon:Fh},{to:"/dashboard",label:"dashboard",icon:Wh}],Ur={"/home":{title:"common.breadcrumb_terminal",subtitle:"common.breadcrumb_terminal_sub"},"/dashboard":{title:"common.breadcrumb_dashboard",subtitle:"common.breadcrumb_dashboard_sub"},"/tasks":{title:"common.breadcrumb_tasks",subtitle:"common.breadcrumb_tasks_sub"},"/workers":{title:"common.breadcrumb_workers",subtitle:"common.breadcrumb_workers_sub"},"/projects":{title:"common.breadcrumb_projects",subtitle:"common.breadcrumb_projects_sub"},"/admin":{title:"common.breadcrumb_admin",subtitle:"common.breadcrumb_admin_sub"},"/profile":{title:"common.breadcrumb_profile",subtitle:"common.breadcrumb_profile_sub"},"/access-tokens":{title:"common.breadcrumb_tokens",subtitle:"common.breadcrumb_tokens_sub"},"/docs":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_sub"},"/docs/cli":{title:"common.breadcrumb_docs_cli",subtitle:"common.breadcrumb_docs_cli_sub"},"/docs/api":{title:"common.breadcrumb_docs_api",subtitle:"common.breadcrumb_docs_api_sub"},"/docs/skill":{title:"common.breadcrumb_docs_skill",subtitle:"common.breadcrumb_docs_skill_sub"},"/docs/bot":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_bot_sub"},"/docs/all":{title:"common.breadcrumb_docs",subtitle:"common.breadcrumb_docs_all_sub"}};function o0(r){const{t:u}=Jt();if(Ur[r]){const o=Ur[r];return{title:u(o.title),subtitle:u(o.subtitle)}}const s="/"+r.split("/").filter(Boolean)[0];if(Ur[s]){const o=Ur[s],f=r.split("/").filter(Boolean).slice(1).join(" / ");return{title:u(o.title),subtitle:f||u(o.subtitle)}}return{title:r.slice(1).replace(/\//g," // ")||"home"}}function s0(r,u){return r==="/home"?u==="/home":r==="/dashboard"?u==="/dashboard":u.startsWith(r)}function c0(){const r=yt(),{t:u}=Jt(),s={terminal:u("terminal_home.title"),dashboard:u("dashboard.title"),tasks:u("tasks.title"),workers:u("workers.title")};return m.jsxs("nav",{className:"flex items-center justify-around border-t border-[var(--border)] bg-[var(--bg-card)] md:hidden",style:{height:"calc(60px + var(--safe-area-bottom, 0px))",paddingTop:8,paddingBottom:"var(--safe-area-bottom, 0px)"},children:[u0.map(({to:o,label:f,icon:h})=>{const _=s0(o,r.pathname);return m.jsxs(Ks,{to:o,className:"flex flex-1 flex-col items-center gap-1",children:[m.jsx(h,{size:18,className:_?"text-[var(--accent)]":"text-[var(--text-muted)]"}),m.jsx("span",{className:`text-[11px] lowercase ${_?"font-bold text-[var(--accent)]":"text-[var(--text-muted)]"}`,children:s[f]??f})]},o)}),m.jsx(vp,{renderTrigger:o=>m.jsxs("button",{type:"button",onClick:o,className:"flex flex-1 flex-col items-center gap-1",children:[m.jsx(Ih,{size:18,className:"text-[var(--text-muted)]"}),m.jsx("span",{className:"text-[11px] lowercase text-[var(--text-muted)]",children:u("common.search_placeholder")})]})})]})}function f0(){const r=Fa(),{t:u}=Jt();return m.jsxs("header",{className:"flex items-center justify-between border-b border-[var(--border)] bg-[var(--bg-card)] px-4 md:hidden",style:{height:"calc(56px + env(safe-area-inset-top, 0px))",minHeight:"calc(56px + env(safe-area-inset-top, 0px))",paddingTop:"env(safe-area-inset-top, 0px)"},children:[m.jsxs("button",{onClick:()=>r("/home"),className:"flex items-center gap-2",style:{background:"none",border:"none",padding:0},children:[m.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-[4px] bg-[var(--accent)]",children:m.jsx("span",{className:"text-sm font-semibold",style:{color:"#0C0C0C"},children:"~"})}),m.jsx("span",{className:"text-sm font-bold lowercase text-[var(--text-primary)]",children:u("common.overlord")})]}),m.jsxs("div",{className:"flex items-center gap-1",children:[m.jsx("button",{onClick:()=>r("/profile"),className:"p-2 text-[var(--text-secondary)] transition-colors hover:text-[var(--text-primary)]","aria-label":u("common.profile"),children:m.jsx(fb,{size:18})}),m.jsx(gp,{}),m.jsx(rp,{})]})]})}function As({label:r,items:u,collapsed:s}){return m.jsxs("div",{className:"mt-4 first:mt-0",children:[!s&&m.jsx("div",{className:"mb-2 px-3 text-xs lowercase",style:{color:"var(--text-muted)"},children:r}),u.map(({to:o,label:f,icon:h})=>m.jsx(Ks,{to:o,className:({isActive:_})=>`flex items-center text-sm lowercase transition-colors ${s?"justify-center py-3":"gap-2.5 px-3 py-1.5"} ${_?"text-[var(--accent)] bg-[var(--accent)]/5":"text-[var(--text-secondary)] hover:text-[var(--text-primary)]"}`,children:({isActive:_})=>m.jsxs(m.Fragment,{children:[m.jsx(h,{size:14,style:{flexShrink:0}}),!s&&m.jsx("span",{children:_?`> ${f}`:` ${f}`})]})},o))]})}function d0(){const{user:r,logout:u}=xa(),s=Fa(),[o,f]=g.useState(!1),h=pb(),{t:_}=Jt(),{sidebarCollapsed:x,toggleSidebar:v}=yb();function p(){u(),s("/login")}return m.jsxs("aside",{className:"hidden md:flex flex-col border-r border-[var(--border)] transition-[width,min-width] duration-300 overflow-hidden",style:{width:x?56:240,minWidth:x?56:240,backgroundColor:"var(--bg-card)"},children:[m.jsx("div",{className:"flex items-center px-5",style:{height:48},children:m.jsxs("button",{onClick:()=>s("/home"),className:"flex items-center gap-2.5",style:{background:"none",border:"none",padding:0},children:[m.jsx("div",{className:"flex h-7 w-7 items-center justify-center rounded-[4px] bg-[var(--accent)]",style:{flexShrink:0},children:m.jsx("span",{className:"text-lg font-semibold",style:{color:"#0C0C0C"},children:"~"})}),!x&&m.jsx("span",{className:"text-base font-bold lowercase tracking-tight",style:{color:"var(--text-primary)"},children:_("common.overlord")})]})}),m.jsxs("nav",{className:"flex-1 px-3 pt-2",children:[m.jsx(As,{label:_("common.navigation"),items:l0,collapsed:x}),m.jsx(As,{label:_("common.docs_section"),items:i0,collapsed:x}),h&&m.jsx(As,{label:_("common.admin_section"),items:r0,collapsed:x})]}),m.jsx("div",{className:`px-3 py-1 ${x?"flex justify-center":""}`,children:m.jsx("button",{onClick:v,className:"flex items-center justify-center w-full py-1.5 rounded-[4px] text-[var(--text-secondary)] transition-colors hover:text-[var(--accent)] hover:bg-[var(--accent)]/5","aria-label":x?"expand sidebar":"collapse sidebar",children:x?m.jsx(Kv,{size:14}):m.jsx(Zv,{size:14})})}),m.jsx("div",{className:"border-t border-[var(--border)] p-3",children:m.jsxs("div",{className:`flex items-center py-2 ${x?"justify-center":"gap-3 px-3"}`,children:[m.jsx("button",{onClick:()=>s("/profile"),className:"flex h-7 w-7 items-center justify-center text-xs font-bold text-black transition-opacity hover:opacity-80",style:{backgroundColor:"var(--accent)",borderRadius:4,flexShrink:0},title:_("common.profile"),children:((r==null?void 0:r.username)??"u")[0].toUpperCase()}),!x&&m.jsxs(m.Fragment,{children:[m.jsxs("button",{onClick:()=>s("/profile"),className:"min-w-0 flex-1 text-left transition-colors hover:opacity-80",title:_("common.profile"),children:[m.jsx("div",{className:"truncate text-sm lowercase",style:{color:"var(--text-primary)"},children:(r==null?void 0:r.username)??"user"}),m.jsx("div",{className:"truncate text-xs lowercase",style:{color:"var(--text-muted)"},children:(r==null?void 0:r.role)??"user"})]}),m.jsx("button",{onClick:()=>f(!0),className:"p-1 text-[var(--text-secondary)] transition-colors hover:text-[var(--accent)]","aria-label":_("common.log_out"),children:m.jsx(nb,{size:14})})]})]})}),m.jsx(e0,{isOpen:o,onClose:()=>f(!1),onConfirm:p,title:_("common.logout_title"),message:_("common.logout_message"),confirmLabel:_("common.logout"),confirmVariant:"warning"})]})}function m0({headerActions:r,subtitleOverride:u}){const s=yt(),{title:o,subtitle:f}=o0(s.pathname),h=u??f;return m.jsxs("header",{className:"hidden md:flex items-center justify-between border-b border-[var(--border)] px-5",style:{height:48,minHeight:48,backgroundColor:"var(--bg-card)"},children:[m.jsxs("div",{className:"text-sm lowercase",children:[m.jsx("span",{style:{color:"var(--text-primary)"},children:o}),h&&m.jsxs("span",{style:{color:"var(--text-muted)"},children:[" ","// ",h]})]}),m.jsxs("div",{className:"flex items-center gap-3",children:[r,m.jsxs("div",{className:"flex items-center gap-1",children:[m.jsx(vp,{}),m.jsx(gp,{}),m.jsx(rp,{})]})]})]})}function h0(){const[r,u]=g.useState(null),[s,o]=g.useState(null),f=yt(),h=f.pathname==="/home",_=f.pathname.startsWith("/docs");return g.useEffect(()=>vb.getState().init(),[]),m.jsxs("div",{className:"fixed inset-0 flex font-mono",children:[m.jsx(d0,{}),m.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden",children:[m.jsx(f0,{}),!_&&m.jsx(m0,{headerActions:r,subtitleOverride:s}),m.jsx("main",{className:h?"flex-1 overflow-hidden bg-[var(--bg-primary)]":"flex-1 overflow-auto bg-[var(--bg-primary)] p-4 pb-6 md:p-6 md:pb-6",children:m.jsx(bp.Provider,{value:{setActions:u},children:m.jsx(xp.Provider,{value:{setSubtitle:o},children:m.jsx(lv,{})})})}),m.jsx(n0,{}),m.jsx(c0,{})]})]})}function Rh(r){var s;const u=(s=r.state)==null?void 0:s.from;return u?{from:u}:{from:{pathname:r.pathname,search:r.search}}}function li({children:r,requireAdmin:u=!1}){const{accessToken:s,user:o,requireTotpSetup:f,initializing:h}=xa(),_=yt();if(h)return m.jsx("div",{className:"flex h-screen items-center justify-center",children:m.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-[var(--border)] border-t-[var(--accent)]"})});if(!s)return m.jsx(ll,{to:"/login",state:Rh(_),replace:!0});if(f){const x=Rh(_);return _.pathname!=="/totp-setup"&&_.pathname!=="/bind"?m.jsx(ll,{to:"/totp-setup",state:x,replace:!0}):_.pathname==="/bind"?(sessionStorage.setItem("overlord_bind_redirect",JSON.stringify(x.from)),m.jsx(ll,{to:"/totp-setup",state:x,replace:!0})):m.jsx(m.Fragment,{children:r})}return u&&(o==null?void 0:o.role)!==ap.ADMIN?m.jsx(ll,{to:"/home",replace:!0}):m.jsx(m.Fragment,{children:r})}function p0({children:r}){const{theme:u,resolved:s,setResolved:o}=ip();return g.useEffect(()=>{if(u!=="system"){o(u);return}const f=window.matchMedia("(prefers-color-scheme: dark)");o(f.matches?"dark":"light");const h=_=>o(_.matches?"dark":"light");return f.addEventListener("change",h),()=>f.removeEventListener("change",h)},[u,o]),g.useEffect(()=>{document.documentElement.classList.toggle("dark",s==="dark")},[s]),m.jsx(m.Fragment,{children:r})}class _0 extends g.Component{constructor(u){super(u),this.state={hasError:!1,error:null}}static getDerivedStateFromError(u){return{hasError:!0,error:u}}render(){var u;return this.state.hasError?m.jsxs("div",{className:"flex h-full min-h-[300px] flex-col items-center justify-center gap-4 p-8 font-mono",children:[m.jsx("span",{className:"text-lg font-bold text-[var(--destructive)]",children:Hr("common.runtime_error")}),m.jsx("p",{className:"max-w-md text-center text-xs text-[var(--text-muted)]",children:((u=this.state.error)==null?void 0:u.message)||Hr("common.an_unexpected_error_occurred")}),m.jsxs("button",{onClick:()=>{this.setState({hasError:!1,error:null}),window.location.reload()},className:"flex items-center gap-1.5 rounded-[4px] border border-[var(--border)] px-4 py-2 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)]",children:[m.jsx(rb,{className:"h-3.5 w-3.5"}),Hr("common.reload")]})]}):this.props.children}}function y0({isOpen:r}){const u=Fa(),{logout:s,setSessionExpired:o}=xa(),{t:f}=Jt();function h(){s(),o(!1),u("/login")}return r?m.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[m.jsx("div",{className:"fixed inset-0 bg-[var(--modal-backdrop)]"}),m.jsx("div",{className:"relative z-10 w-full max-w-[480px] rounded-[4px] border border-[var(--border)] bg-[var(--bg-card)]",children:m.jsxs("div",{className:"flex flex-col items-center px-8 py-10",children:[m.jsx("div",{className:"mb-5 flex h-14 w-14 items-center justify-center rounded-full bg-[var(--warning)]/10",children:m.jsx(ab,{className:"h-7 w-7 text-[var(--warning)]"})}),m.jsx("h3",{className:"mb-2 text-base font-bold text-[var(--text-primary)]",children:f("auth.session_expired")}),m.jsx("p",{className:"mb-8 text-center text-xs text-[var(--text-secondary)]",children:f("auth.session_expired_message")}),m.jsx("button",{type:"button",className:"w-full rounded-[4px] bg-[var(--accent)] px-3 py-2.5 text-xs font-medium text-black hover:opacity-90 transition-opacity",onClick:h,children:f("auth.go_to_login")})]})})]}):null}const Ah=5;let ba=[];const Hs=new Set;function Sp(){Hs.forEach(r=>r())}function g0(){return`${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Wa(r,u,s=4e3){const o=g0();return ba=[...ba,{id:o,variant:r,message:u,duration:s}],ba.length>Ah&&(ba=ba.slice(ba.length-Ah)),Sp(),o}Wa.success=(r,u)=>Wa("success",r,u);Wa.error=(r,u)=>Wa("error",r,u);Wa.warning=(r,u)=>Wa("warning",r,u);Wa.info=(r,u)=>Wa("info",r,u);function v0(r){ba=ba.filter(u=>u.id!==r),Sp()}function b0(){const[,r]=g.useState(0);return g.useEffect(()=>{const u=()=>r(s=>s+1);return Hs.add(u),()=>{Hs.delete(u)}},[]),ba}const x0={success:{icon:Jv,borderColor:"var(--accent)"},error:{icon:$v,borderColor:"var(--destructive)"},warning:{icon:ep,borderColor:"var(--warning)"},info:{icon:Pv,borderColor:"var(--info)"}};function S0({item:r}){const u=x0[r.variant],s=u.icon,{t:o}=Jt(),f=g.useCallback(()=>v0(r.id),[r.id]);return g.useEffect(()=>{if(!r.duration)return;const h=setTimeout(f,r.duration);return()=>clearTimeout(h)},[r.duration,f]),m.jsxs("div",{className:"flex items-center gap-3 rounded-[4px] bg-[var(--bg-card)] px-4 py-3 shadow-lg",style:{borderLeft:`3px solid ${u.borderColor}`},role:"alert",children:[m.jsx(s,{className:"h-4 w-4 shrink-0",style:{color:u.borderColor}}),m.jsx("p",{className:"flex-1 text-xs text-[var(--text-primary)]",children:r.message}),m.jsx("button",{onClick:f,className:"shrink-0 rounded-[4px] p-0.5 text-[var(--text-muted)] transition-colors hover:text-[var(--text-primary)]","aria-label":o("common.dismiss_notification"),children:m.jsx(tp,{className:"h-3.5 w-3.5"})})]})}function k0(){const r=b0();return r.length===0?null:m.jsx("div",{className:"pointer-events-none fixed right-4 top-4 z-[9999] flex w-80 max-w-[calc(100vw-2rem)] flex-col gap-2",children:r.map(u=>m.jsx("div",{className:"pointer-events-auto",children:m.jsx(S0,{item:u})},u.id))})}const E0=g.lazy(()=>ne(()=>import("./LandingPage-CZkGfp7Q.js"),__vite__mapDeps([0,1,2,3,4,5]))),w0=g.lazy(()=>ne(()=>import("./LoginPage-CgD8hhx1.js"),[])),T0=g.lazy(()=>ne(()=>import("./TotpSetupPage-C3-OkdYF.js"),[])),j0=g.lazy(()=>ne(()=>import("./NotFoundPage-Vo8ScjY0.js"),[])),R0=g.lazy(()=>ne(()=>import("./HomePage-CwpR1mFu.js"),__vite__mapDeps([6,7,8,9,10,11,12,13,14,1]))),A0=g.lazy(()=>ne(()=>import("./TerminalHomePage-C0c-MnyI.js"),__vite__mapDeps([15,16,17,18,10,11,19,8,12,14,20,21,22]))),z0=g.lazy(()=>ne(()=>import("./TaskListPage-Bi_uTExH.js"),__vite__mapDeps([23,16,7,8,12,13,19,5,24,9,20]))),O0=g.lazy(()=>ne(()=>import("./TaskDetailPage-B_T8NVze.js"),__vite__mapDeps([25,16,17,18,12,19,8,26,21,27,28]))),C0=g.lazy(()=>ne(()=>import("./WorkerListPage-Dfa9aeD1.js"),__vite__mapDeps([29,8,30,31,32,33,34,22,5,28,19,24,9,14,20]))),D0=g.lazy(()=>ne(()=>import("./WorkerDetailPage-D6FcW7Z_.js"),__vite__mapDeps([35,12,8,36,30,14,37,26]))),N0=g.lazy(()=>ne(()=>import("./WorkerSetupGuidePage-DPqS45ur.js"),__vite__mapDeps([31,32,33,34,22]))),M0=g.lazy(()=>ne(()=>import("./ProjectListPage-gMfWMo25.js"),__vite__mapDeps([38,19,24,9,12,14,20]))),U0=g.lazy(()=>ne(()=>import("./ProjectDetailPage-8CAbe66G.js"),__vite__mapDeps([39,40,19,12,8,36,14,41,37,20]))),q0=g.lazy(()=>ne(()=>import("./EditProjectPage-DJIFLTQx.js"),__vite__mapDeps([42,19,40,20]))),L0=g.lazy(()=>ne(()=>import("./PipelineEditorPage-DFf-w5EC.js"),__vite__mapDeps([43,19,13]))),H0=g.lazy(()=>ne(()=>import("./ProfilePage-D3XfRaAT.js"),__vite__mapDeps([44,45,36,14]))),B0=g.lazy(()=>ne(()=>import("./BindPlatformPage-Ch3hKXsj.js"),[])),Y0=g.lazy(()=>ne(()=>import("./AccessTokensPage-BvW-LCXG.js"),__vite__mapDeps([46,19,24,9,12,14,20,5,37]))),G0=g.lazy(()=>ne(()=>import("./CliReferencePage-T5FnKwNb.js"),__vite__mapDeps([47,48,5,20]))),V0=g.lazy(()=>ne(()=>import("./ApiReferencePage-CtZxcDHG.js"),__vite__mapDeps([49,48,5,20]))),X0=g.lazy(()=>ne(()=>import("./SkillPage-BkXtU425.js"),__vite__mapDeps([50,51,5,27]))),Q0=g.lazy(()=>ne(()=>import("./DocsLayout-7G58WOok.js"),__vite__mapDeps([52,26,53]))),Z0=g.lazy(()=>ne(()=>import("./InstallationPage-B3UAtSk5.js"),__vite__mapDeps([54,51,5]))),K0=g.lazy(()=>ne(()=>import("./DeveloperSetupPage-CBkNzG2U.js"),__vite__mapDeps([55,51,5]))),J0=g.lazy(()=>ne(()=>import("./WorkerSetupPage-ZXVMNRlb.js"),__vite__mapDeps([56,51,5]))),$0=g.lazy(()=>ne(()=>import("./BotSetupPage-7A7ME_S2.js"),__vite__mapDeps([57,51,5]))),W0=g.lazy(()=>ne(()=>import("./LocalDevelopmentPage-Xw-XLKFu.js"),__vite__mapDeps([58,51,5]))),F0=g.lazy(()=>ne(()=>import("./WorkerOperationsPage-xyZ3H_E2.js"),[])),I0=g.lazy(()=>ne(()=>import("./DeploymentPage-CFCEZ4J0.js"),__vite__mapDeps([59,51,5]))),zh=g.lazy(()=>ne(()=>import("./BotIntegrationPage-B44RAprz.js"),[])),P0=g.lazy(()=>ne(()=>import("./PipelineConfigPage-DN3pOwHI.js"),__vite__mapDeps([60,51,5]))),e1=g.lazy(()=>ne(()=>import("./DevWorkflowPage-CbOK_TWB.js"),__vite__mapDeps([61,51,5]))),t1=g.lazy(()=>ne(()=>import("./PermissionsPage-D-dPbXmI.js"),[])),a1=g.lazy(()=>ne(()=>import("./EnvVariablesPage-BTWK-RYB.js"),[])),n1=g.lazy(()=>ne(()=>import("./ArchitecturePage-CfgUbG4O.js"),__vite__mapDeps([62,51,5]))),l1=g.lazy(()=>ne(()=>import("./ChangelogPage-bUtcbLB8.js"),[])),i1=g.lazy(()=>ne(()=>import("./DocsIndexPage-DOxm0c4A.js"),__vite__mapDeps([63,33,2,3,53,34]))),r1=g.lazy(()=>ne(()=>import("./AdminPage-DiKZLhZW.js"),__vite__mapDeps([64,4,2,65,34]))),u1=g.lazy(()=>ne(()=>import("./DeveloperManage-rI_WZsAI.js"),__vite__mapDeps([66,19,45,24,9,14,8,20,4,41,21]))),o1=g.lazy(()=>ne(()=>import("./BotManage-JS2VVo9Q.js"),__vite__mapDeps([67,19,51,5,37,20,24,9,14,8,2,41]))),s1=g.lazy(()=>ne(()=>import("./TokenManage-CQDv0Eab.js"),__vite__mapDeps([68,32,5,27,24,9,14,8,20]))),c1=g.lazy(()=>ne(()=>import("./AuditLogPage-Ds63eciz.js"),__vite__mapDeps([69,19,24,9,65,11]))),f1=g.lazy(()=>ne(()=>import("./SettingsPage-CLOxTZcJ.js"),[]));function d1(){return m.jsx("div",{className:"flex h-full items-center justify-center",children:m.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-[var(--border)] border-t-[var(--accent)]"})})}function m1(){const r=xa(u=>u.sessionExpired);return m.jsxs(p0,{children:[m.jsx(k0,{}),m.jsx(_0,{children:m.jsxs(Ov,{children:[m.jsx(y0,{isOpen:r}),m.jsx(g.Suspense,{fallback:m.jsx(d1,{}),children:m.jsxs(rv,{children:[m.jsx(te,{path:"/",element:m.jsx(E0,{})}),m.jsx(te,{path:"/login",element:m.jsx(w0,{})}),m.jsx(te,{path:"/totp-setup",element:m.jsx(li,{children:m.jsx(T0,{})})}),m.jsx(te,{path:"/bind",element:m.jsx(li,{children:m.jsx(B0,{})})}),m.jsxs(te,{element:m.jsx(li,{children:m.jsx(h0,{})}),children:[m.jsx(te,{path:"/home",element:m.jsx(A0,{})}),m.jsx(te,{path:"/dashboard",element:m.jsx(R0,{})}),m.jsx(te,{path:"/tasks",element:m.jsx(z0,{})}),m.jsx(te,{path:"/tasks/:id",element:m.jsx(O0,{})}),m.jsx(te,{path:"/workers",element:m.jsx(C0,{})}),m.jsx(te,{path:"/workers/setup",element:m.jsx(li,{requireAdmin:!0,children:m.jsx(N0,{})})}),m.jsx(te,{path:"/workers/:id",element:m.jsx(D0,{})}),m.jsx(te,{path:"/projects",element:m.jsx(M0,{})}),m.jsx(te,{path:"/projects/:key",element:m.jsx(U0,{})}),m.jsx(te,{path:"/projects/:key/edit",element:m.jsx(q0,{})}),m.jsx(te,{path:"/projects/:key/pipeline",element:m.jsx(L0,{})}),m.jsx(te,{path:"/profile",element:m.jsx(H0,{})}),m.jsx(te,{path:"/access-tokens",element:m.jsx(Y0,{})}),m.jsxs(te,{path:"/docs",element:m.jsx(Q0,{}),children:[m.jsx(te,{index:!0,element:m.jsx(ll,{to:"cli",replace:!0})}),m.jsx(te,{path:"cli",element:m.jsx(G0,{})}),m.jsx(te,{path:"api",element:m.jsx(V0,{})}),m.jsx(te,{path:"bot",element:m.jsx(zh,{})}),m.jsx(te,{path:"all",element:m.jsx(i1,{})}),m.jsx(te,{path:"skill",element:m.jsx(X0,{})}),m.jsx(te,{path:"installation",element:m.jsx(Z0,{})}),m.jsx(te,{path:"developer-setup",element:m.jsx(K0,{})}),m.jsx(te,{path:"worker-setup",element:m.jsx(J0,{})}),m.jsx(te,{path:"bot-setup",element:m.jsx($0,{})}),m.jsx(te,{path:"local-development",element:m.jsx(W0,{})}),m.jsx(te,{path:"worker-operations",element:m.jsx(F0,{})}),m.jsx(te,{path:"deployment",element:m.jsx(I0,{})}),m.jsx(te,{path:"bot-integration",element:m.jsx(zh,{})}),m.jsx(te,{path:"pipeline-config",element:m.jsx(P0,{})}),m.jsx(te,{path:"dev-workflow",element:m.jsx(e1,{})}),m.jsx(te,{path:"permissions",element:m.jsx(t1,{})}),m.jsx(te,{path:"env-variables",element:m.jsx(a1,{})}),m.jsx(te,{path:"architecture",element:m.jsx(n1,{})}),m.jsx(te,{path:"changelog",element:m.jsx(l1,{})})]}),m.jsxs(te,{path:"/admin",element:m.jsx(li,{requireAdmin:!0,children:m.jsx(r1,{})}),children:[m.jsx(te,{index:!0,element:m.jsx(ll,{to:"developers",replace:!0})}),m.jsx(te,{path:"developers",element:m.jsx(u1,{})}),m.jsx(te,{path:"bots",element:m.jsx(o1,{})}),m.jsx(te,{path:"tokens",element:m.jsx(s1,{})}),m.jsx(te,{path:"audit-logs",element:m.jsx(c1,{})}),m.jsx(te,{path:"settings",element:m.jsx(f1,{})})]})]}),m.jsx(te,{path:"*",element:m.jsx(j0,{})})]})})]})})]})}xa.getState().initialize();lg.createRoot(document.getElementById("root")).render(m.jsx(g.StrictMode,{children:m.jsx(m1,{})}));export{b1 as A,rb as B,Qv as C,ap as D,nb as E,_1 as F,S1 as G,Ds as H,x1 as I,Wv as J,eb as K,Kh as L,lb as M,ll as N,Ks as O,n0 as P,lv as Q,Rr as R,Ph as S,rp as T,k1 as U,E1 as V,g1 as W,tp as X,$v as Y,Jt as a,Js as b,ke as c,ob as d,tb as e,Fa as f,yt as g,Vr as h,pb as i,m as j,vb as k,Wr as l,y1 as m,j1 as n,T1 as o,Ih as p,Fh as q,g as r,w1 as s,Wa as t,xa as u,e0 as v,p1 as w,Jv as x,ep as y,v1 as z};
|