local-operator-ui 0.31.10 → 0.31.11

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.
Files changed (63) hide show
  1. package/README.md +110 -126
  2. package/out/main/index.js +37 -0
  3. package/out/renderer/assets/{_basePickBy-9ROOwmxL.js → _basePickBy-DfG4wjig.js} +1 -1
  4. package/out/renderer/assets/{_baseUniq-eE-r5ZZ4.js → _baseUniq-BGWDx1XP.js} +1 -1
  5. package/out/renderer/assets/{agent-details-page-Vs9AZBwz.js → agent-details-page-DhkOKq6G.js} +1 -1
  6. package/out/renderer/assets/{agent-hub-page-CGJbElaY.js → agent-hub-page-BRjvfsAy.js} +2 -2
  7. package/out/renderer/assets/{agents-page-tftebSEL.js → agents-page-DgY_6v2S.js} +2 -2
  8. package/out/renderer/assets/{arc-DN4pJSIq.js → arc-BbZdEs1w.js} +1 -1
  9. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-uYP9fQLK.js → architectureDiagram-IEHRJDOE-4lLfeFcj.js} +1 -1
  10. package/out/renderer/assets/{blockDiagram-JOT3LUYC-CmsXiKwe.js → blockDiagram-JOT3LUYC-CzCeK4l6.js} +1 -1
  11. package/out/renderer/assets/{browser-page-Bu7bkVij.js → browser-page-BVkXt8Il.js} +1 -1
  12. package/out/renderer/assets/{browser-webauthn-prompt-CCZq7UZY.js → browser-webauthn-prompt-Bynwfiuq.js} +1 -1
  13. package/out/renderer/assets/{c4Diagram-VJAJSXHY-DSjqK2s4.js → c4Diagram-VJAJSXHY-DV6jCVYX.js} +1 -1
  14. package/out/renderer/assets/channel-DZvj1zQv.js +1 -0
  15. package/out/renderer/assets/{chunk-4BMEZGHF-C1_SAsaq.js → chunk-4BMEZGHF-oN7e33U6.js} +1 -1
  16. package/out/renderer/assets/{chunk-A2AXSNBT-Cq0zFbJT.js → chunk-A2AXSNBT-BY7xgPLa.js} +1 -1
  17. package/out/renderer/assets/{chunk-AEK57VVT-BcKdPjvg.js → chunk-AEK57VVT-CdvId8Is.js} +1 -1
  18. package/out/renderer/assets/{chunk-D6G4REZN-DRByxdTc.js → chunk-D6G4REZN-BnHX7WDi.js} +1 -1
  19. package/out/renderer/assets/{chunk-RZ5BOZE2-Duscm0Bg.js → chunk-RZ5BOZE2-D-FjPJs7.js} +1 -1
  20. package/out/renderer/assets/{chunk-XZIHB7SX-BWEXg8AD.js → chunk-XZIHB7SX-DE_XcGmS.js} +1 -1
  21. package/out/renderer/assets/{classDiagram-GIVACNV2-CU02kTw_.js → classDiagram-GIVACNV2-CxG-TQSG.js} +1 -1
  22. package/out/renderer/assets/{classDiagram-v2-COTLJTTW-CU02kTw_.js → classDiagram-v2-COTLJTTW-CxG-TQSG.js} +1 -1
  23. package/out/renderer/assets/clone-CzEyof2a.js +1 -0
  24. package/out/renderer/assets/{dagre-OKDRZEBW-Cn7pFiK5.js → dagre-OKDRZEBW-DSno4uDg.js} +1 -1
  25. package/out/renderer/assets/{diagram-SSKATNLV-LyA2eojc.js → diagram-SSKATNLV-Cta_mlzh.js} +1 -1
  26. package/out/renderer/assets/{diagram-VNBRO52H-LPidUHcc.js → diagram-VNBRO52H-DXZvuw9Y.js} +1 -1
  27. package/out/renderer/assets/{erDiagram-Q7BY3M3F-CTjCMg7T.js → erDiagram-Q7BY3M3F-DX_NZcvT.js} +1 -1
  28. package/out/renderer/assets/{flowDiagram-4HSFHLVR-BmWZ8kNr.js → flowDiagram-4HSFHLVR-CkKn14vu.js} +1 -1
  29. package/out/renderer/assets/{ganttDiagram-APWFNJXF-CfDRHTNJ.js → ganttDiagram-APWFNJXF-pfUZL8XQ.js} +1 -1
  30. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-CEYh6RxP.js → gitGraphDiagram-7IBYFJ6S-DyxkVnKD.js} +1 -1
  31. package/out/renderer/assets/{graph-_dzRI-I_.js → graph-CS6U_APD.js} +1 -1
  32. package/out/renderer/assets/{index-BKqWQaFB.js → index-0hsmy_dv.js} +1 -1
  33. package/out/renderer/assets/{index-tykR0DI9.js → index-BoBj0LUC.js} +391 -386
  34. package/out/renderer/assets/{index-DPFT_2au.js → index-W19BqfEn.js} +1 -1
  35. package/out/renderer/assets/{infoDiagram-PH2N3AL5-BRBj70Iz.js → infoDiagram-PH2N3AL5-DstV9F9y.js} +1 -1
  36. package/out/renderer/assets/{journeyDiagram-U35MCT3I-kHoqijou.js → journeyDiagram-U35MCT3I-DMxIQQHc.js} +1 -1
  37. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-DEpxCCmE.js → kanban-definition-NDS4AKOZ-DwCNWIKf.js} +1 -1
  38. package/out/renderer/assets/{layout-C8CaQmGy.js → layout-rRE-L5H5.js} +1 -1
  39. package/out/renderer/assets/{legacy-agents-page-TbzorhDj.js → legacy-agents-page-D3XdLDk2.js} +1 -1
  40. package/out/renderer/assets/{mermaid.core-xrJy-S5f.js → mermaid.core-CHO9EN5d.js} +5 -5
  41. package/out/renderer/assets/{mesh-page-Do2sLCUJ.js → mesh-page-Bo6Mw1uW.js} +1 -1
  42. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BUYs8m2Y.js → mindmap-definition-ALO5MXBD-C0TbE2NA.js} +1 -1
  43. package/out/renderer/assets/{org-surface-gate-9zY-gRI7.js → org-surface-gate-CyrcQL7E.js} +1 -1
  44. package/out/renderer/assets/{pieDiagram-IB7DONF6-DLyxJ6_z.js → pieDiagram-IB7DONF6-psQNoVHK.js} +1 -1
  45. package/out/renderer/assets/{projects-page-pUwqeYdO.js → projects-page-DLrWcA92.js} +1 -1
  46. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-DH7de3iA.js → quadrantDiagram-7GDLP6J5-DAX1qBwZ.js} +1 -1
  47. package/out/renderer/assets/{radar-MK3ICKWK-07d8mdrE.js → radar-MK3ICKWK-BRutmqUf.js} +1 -1
  48. package/out/renderer/assets/{radient-auth-buttons-8U1osKLe.js → radient-auth-buttons-fe1Bn89n.js} +1 -1
  49. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-B32qFUIl.js → requirementDiagram-KVF5MWMF-PTinIVCd.js} +1 -1
  50. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-sbqxByYH.js → sankeyDiagram-QLVOVGJD-DuPXhi_4.js} +1 -1
  51. package/out/renderer/assets/{schedules-page-XTDmccje.js → schedules-page-Bxn30SeI.js} +1 -1
  52. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-B73M11ec.js → sequenceDiagram-X6HHIX6F-CSbiipy3.js} +1 -1
  53. package/out/renderer/assets/{settings-page-CK0UZY_b.js → settings-page-DeQ29q0v.js} +1 -1
  54. package/out/renderer/assets/{stateDiagram-DGXRK772-B4WvgL0d.js → stateDiagram-DGXRK772-B0olW3ZC.js} +1 -1
  55. package/out/renderer/assets/{stateDiagram-v2-YXO3MK2T-DNtZ1inO.js → stateDiagram-v2-YXO3MK2T-DesKgCmL.js} +1 -1
  56. package/out/renderer/assets/{timeline-definition-BDJGKUSR-C4QiFAyx.js → timeline-definition-BDJGKUSR-DrFO8Scg.js} +1 -1
  57. package/out/renderer/assets/{use-download-agent-mutation-uGo2AQXO.js → use-download-agent-mutation-DB-9HDGk.js} +1 -1
  58. package/out/renderer/assets/{use-memberships-query-CjIPH1YX.js → use-memberships-query-DJonF1zy.js} +1 -1
  59. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-wcBKtlf2.js → xychartDiagram-VJFVF3MP-ResXi4IE.js} +1 -1
  60. package/out/renderer/index.html +1 -1
  61. package/package.json +2 -2
  62. package/out/renderer/assets/channel-bHKgHeS_.js +0 -1
  63. package/out/renderer/assets/clone-ARdM9vXs.js +0 -1
package/README.md CHANGED
@@ -5,70 +5,58 @@
5
5
  src="./resources/local-operator-icon-2-light-clear.png">
6
6
  </picture>
7
7
 
8
- <h1 align="center">Local Operator: AI Agent Assistants On Your Device</h1>
9
- <div align="center">
10
- <h2>🤖 Personal AI Assistants that Turn Ideas into Action</h2>
11
- <p><i>Real-time code execution on your device through natural conversation</i></p>
12
- </div>
8
+ <h1 align="center">Local Operator</h1>
13
9
 
14
- <br />
10
+ <p align="center"><i>AI agent assistants on your device — they plan, write, and run Python, and every step stays in the conversation.</i></p>
15
11
 
16
12
  <p align="center">
17
- <img src="./resources/preview-example.gif" alt="Local Operator UI Dashboard Example" style="width: 640px">
18
- </div>
13
+ <a href="https://github.com/damianvtran/local-operator-ui/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/damianvtran/local-operator-ui"></a>
14
+ <a href="https://github.com/damianvtran/local-operator-ui/actions/workflows/ci.yml"><img alt="CI status" src="https://img.shields.io/github/actions/workflow/status/damianvtran/local-operator-ui/ci.yml?branch=main"></a>
15
+ <a href="https://www.npmjs.com/package/local-operator-ui"><img alt="npm version" src="https://img.shields.io/npm/v/local-operator-ui"></a>
16
+ <a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/github/license/damianvtran/local-operator-ui"></a>
17
+ <img alt="Platforms: macOS, Windows, and Linux" src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey">
18
+ </p>
19
19
 
20
20
  <br />
21
21
 
22
- **<span style="color: #38C96A">Local Operator</span>** empowers you to run Python code safely on your own machine through an intuitive chat interface. The AI agent:
23
-
24
- 🎯 **Plans & Executes** - Breaks down complex goals into manageable steps and executes them with precision.
25
-
26
- 🔒 **Prioritizes Security** - Built-in safety checks by independent AI review and user confirmations keep your system protected
27
-
28
- 🌐 **Flexible Deployment** - Run completely locally with Ollama models or leverage cloud providers like OpenAI
22
+ <p align="center">
23
+ <picture>
24
+ <source media="(prefers-color-scheme: dark)" srcset="./resources/readme/app-shell-chat-dark.webp">
25
+ <source media="(prefers-color-scheme: light)" srcset="./resources/readme/app-shell-chat-light.webp">
26
+ <img alt="The app's chat view: an agent's reply, the run details panel with two subagents running, and their shared to-do list." src="./resources/readme/app-shell-chat-light.webp">
27
+ </picture>
28
+ <br />
29
+ <sub><code>the app at work</code> — a conversation with an agent, two subagents running beside it, and the to-do list they share.</sub>
30
+ </p>
29
31
 
30
- 🔧 **Problem Solving** - Intelligently handles errors and roadblocks by adapting approaches and finding alternative solutions
32
+ <br />
31
33
 
32
- This project is proudly open source under the MIT license. We believe AI tools should be accessible to everyone, given their transformative impact on productivity. Your contributions and feedback help make this vision a reality!
34
+ **Local Operator** runs AI agent assistants on your own machine, from a desktop chat app. You give an agent a goal; it plans the work, writes and runs Python on your device, reads and writes files, and asks before it takes anything risky. The whole run — messages, tool calls, commands, and results — stays in the conversation in front of you.
33
35
 
34
- > "Democratizing AI-powered productivity, one conversation at a time."
36
+ For the agent environment CLI and server backend, see the [Local Operator repository](https://github.com/damianvtran/local-operator).
35
37
 
36
- <div align="center">
37
- <a href="https://github.com/damianvtran/local-operator">Agent Backend</a> •
38
- <a href="https://local-operator.com">Learn More</a> •
38
+ <p align="center">
39
+ <a href="https://github.com/damianvtran/local-operator">Agent backend</a> •
40
+ <a href="https://local-operator.com">Website</a> •
39
41
  <a href="https://github.com/damianvtran/local-operator/tree/main/examples/notebooks">Examples</a>
40
- </div>
42
+ </p>
41
43
 
42
- ## 💡 Overview
43
-
44
- The Local Operator UI is a user interface for managing and interacting with the Local Operator agent environment. It is built using Electron, React, and TypeScript, leveraging modern web technologies for a rich and responsive user experience.
45
-
46
- 👉 For the agent environment CLI and Server backend, see the [Local Operator GitHub repository](https://github.com/damianvtran/local-operator).
47
-
48
- ## 🚀 Getting Started
44
+ ## Getting started
49
45
 
50
46
  ### Prerequisites
51
47
 
52
- Before you begin, ensure you have the following installed:
53
-
54
- - **Node.js**: Version 22.13.1 or higher. It's recommended to use [nvm](https://github.com/nvm-sh/nvm) for managing Node.js versions.
55
-
56
- The Local Operator backend is now bundled with the application and will be installed automatically when you first run the application. If you prefer to use an existing Local Operator backend installation, the application will detect it and use it instead.
57
-
58
- ### NPM Installation
48
+ - **Node.js** 22.13.1 or newer, for the npm install paths below. [nvm](https://github.com/nvm-sh/nvm) is a good way to manage Node versions. The desktop installers need no toolchain.
59
49
 
60
- You can install and run Local Operator UI directly using [npx](https://docs.n8n.io/hosting/installation/npm/).
50
+ ### Run with npx
61
51
 
62
52
  ```bash
63
- # Install and run in one command
53
+ # Download and run in one command
64
54
  npx local-operator-ui
65
55
  ```
66
56
 
67
- This will download and execute the latest version of the Local Operator UI, launching the application immediately.
57
+ This runs the latest version and launches the app.
68
58
 
69
- ### Manual Installation
70
-
71
- Alternatively, without npx, you can install the package globally with standard npm:
59
+ ### Install with npm
72
60
 
73
61
  ```bash
74
62
  # Install globally
@@ -78,52 +66,67 @@ npm install -g local-operator-ui
78
66
  local-operator-ui
79
67
  ```
80
68
 
81
- After installation, the application will automatically connect to the Local Operator backend API at `http://localhost:1111` by default.
82
-
83
- ### Desktop Applications
69
+ ### Desktop applications
84
70
 
85
- Pre-built desktop applications are available for macOS, Windows, and Linux. Visit the [Releases](https://github.com/damianvtran/local-operator-ui/releases) page to download the latest version for your platform.
71
+ Prebuilt apps are on the [download page](https://local-operator.com/download) and the [releases page](https://github.com/damianvtran/local-operator-ui/releases):
86
72
 
87
- - **macOS**: Download the `.dmg` file and drag the application to your Applications folder.
73
+ - **macOS**: Download the `.dmg` (or `.zip`) and open it.
88
74
  - **Windows**: Download the `.exe` installer and follow the installation prompts.
89
- - **Linux**: Download the appropriate package (`.deb`, `.rpm`, or `.AppImage`) for your distribution.
75
+ - **Linux**: Download the `.deb`, `.rpm`, or `.AppImage` for your distribution.
90
76
 
91
- ### Building from Source
77
+ The Local Operator backend is bundled with the application and is installed automatically on first run. If you already have a Local Operator backend installed, the application detects it and uses it instead; by default it connects to the backend API at `http://localhost:1111`.
92
78
 
93
- If you want to build the application from source, see the [BUILD.md](./docs/BUILD.md) file for detailed instructions.
79
+ ## What it looks like
94
80
 
95
- #### Python Bundling
81
+ ### Chat and agents
96
82
 
97
- For macOS builds, we now bundle a standalone Python directly with the application instead of requiring Homebrew installation. This approach:
83
+ | Light | Dark |
84
+ | :---: | :---: |
85
+ | <img src="./resources/readme/chat-trace-light.webp" alt="Light theme: a conversation showing tool rows, a blocked risky action, and a question the agent asked." width="420"> | <img src="./resources/readme/chat-trace-dark.webp" alt="Dark theme: the same conversation." width="420"> |
98
86
 
99
- - Eliminates the need for admin privileges during installation
100
- - Makes the application more self-contained
101
- - Works offline
102
- - Provides a more reliable user experience
103
- - Supports installation of Python packages via pip
87
+ <sub><code>chat</code> — a working agent's tool rows, a blocked risky action, and the question it asked before continuing.</sub>
104
88
 
105
- To set up the standalone Python for development:
89
+ ### Agent hub
106
90
 
107
- ```bash
108
- # Run the setup script to download and configure standalone Python
109
- pnpm setup-python-standalone
110
- ```
91
+ | Light | Dark |
92
+ | :---: | :---: |
93
+ | <img src="./resources/readme/agent-hub-light.webp" alt="Light theme: the agent hub with categories and a grid of community agents." width="420"> | <img src="./resources/readme/agent-hub-dark.webp" alt="Dark theme: the agent hub grid." width="420"> |
111
94
 
112
- This uses [python-build-standalone](https://github.com/indygreg/python-build-standalone), the same approach used by Datasette Desktop and PyOxidizer.
95
+ <sub><code>agent hub</code> — community agents you can browse and download, by category.</sub>
113
96
 
114
- For more details, see the [PYTHON_BUNDLING.md](./docs/PYTHON_BUNDLING.md) documentation.
97
+ ### Schedules
115
98
 
116
- ### Code Signing and Notarization
99
+ | Light | Dark |
100
+ | :---: | :---: |
101
+ | <img src="./resources/readme/schedules-light.webp" alt="Light theme: the schedules page, listing scheduled wakes with their cadence and run history." width="420"> | <img src="./resources/readme/schedules-dark.webp" alt="Dark theme: the schedules page." width="420"> |
117
102
 
118
- All desktop applications are code signed and notarized to ensure security and trust:
103
+ <sub><code>schedules</code> — conversations that wake on a timer, with what ran and when they run next.</sub>
119
104
 
120
- - **macOS**: Applications are signed with an Apple Developer ID and notarized with Apple's notarization service
121
- - **Windows**: Applications are signed with a trusted code signing certificate
122
- - **Linux**: While code signing is less common on Linux, packages are built with integrity checks
105
+ ### Projects
123
106
 
124
- For detailed information about the code signing and notarization process, see the [CODE_SIGNING.md](./docs/CODE_SIGNING.md) document.
107
+ | Light | Dark |
108
+ | :---: | :---: |
109
+ | <img src="./resources/readme/projects-board-light.webp" alt="Light theme: the projects board with active, paused, and done columns." width="420"> | <img src="./resources/readme/projects-board-dark.webp" alt="Dark theme: the projects board." width="420"> |
110
+
111
+ <sub><code>projects</code> — workstreams you and your agents track across sessions, as a board or a timeline.</sub>
112
+
113
+ ### Appearance
114
+
115
+ | Light | Dark |
116
+ | :---: | :---: |
117
+ | <img src="./resources/readme/appearance-light.webp" alt="Light theme: the appearance picker showing the Local Operator themes as swatches." width="420"> | <img src="./resources/readme/appearance-dark.webp" alt="Dark theme: the appearance picker." width="420"> |
118
+
119
+ <sub><code>appearance</code> — 59 colour themes ship with the app; Local Operator Dark is the default.</sub>
125
120
 
126
- ## 🗂️ Project Structure
121
+ ## Features
122
+
123
+ - **Chat with agents** — real-time conversation with markdown rendering for code blocks and formatted text, syntax highlighting, and per-conversation history.
124
+ - **Agent management** — create, update, and delete agents, and configure their settings: model and description (general), temperature and top_p (chat), and security prompt and execution permissions (security).
125
+ - **Settings** — system prompt configuration, API credentials management, and application configuration in one place.
126
+ - **Local Operator API integration** — the app talks to the Local Operator backend API and shows real-time status updates for long-running operations.
127
+ - **Bundled backend** — the Local Operator backend is installed automatically on first run on every platform; an existing backend installation is detected and used instead.
128
+
129
+ ## Project structure
127
130
 
128
131
  The codebase is organized for modularity and code reuse:
129
132
 
@@ -132,59 +135,55 @@ The codebase is organized for modularity and code reuse:
132
135
  - `src/renderer/src/app.tsx`, `main.tsx`, etc.: Entry points for the Electron renderer process.
133
136
  - `build/`, `resources/`, `scripts/`: Build assets, static resources, and build scripts.
134
137
 
135
- **Import Conventions:**
138
+ **Import conventions:**
136
139
 
137
140
  - Use `@shared/` for shared modules (e.g., `import { useAgents } from "@shared/hooks/use-agents"`).
138
141
  - Use `@features/` for feature-specific modules.
139
- - The old aliases (`@renderer`, `@components`, `@hooks`, etc.) have been removed in favor of this unified structure.
142
+ - The build also resolves the older aliases (`@renderer`, `@components`, `@hooks`, etc.) for the files that still import them.
140
143
 
141
144
  For more details on building or contributing, see the [Contributing Guide](./CONTRIBUTING.md) and [BUILD.md](./docs/BUILD.md).
142
145
 
143
- ## ✨ Features
146
+ ## Building from source
147
+
148
+ If you want to build the application from source, see the [BUILD.md](./docs/BUILD.md) file for detailed instructions.
144
149
 
145
- The Local Operator UI provides a comprehensive interface for interacting with AI agents:
150
+ ### Python bundling
146
151
 
147
- ### Chat Interface
152
+ For macOS builds, the app bundles a standalone Python directly instead of requiring a Homebrew installation. This approach:
148
153
 
149
- - Real-time chat with AI agents
150
- - Markdown rendering for code blocks and formatted text
151
- - Syntax highlighting for code snippets
152
- - Message history and conversation management
154
+ - Needs no admin privileges during installation
155
+ - Keeps the application self-contained
156
+ - Works offline
157
+ - Supports installing Python packages with pip
153
158
 
154
- ### Agent Management
159
+ To set up the standalone Python for development:
155
160
 
156
- - Create, update, and delete AI agents
157
- - Configure agent settings:
158
- - General settings (name, description, model)
159
- - Chat settings (temperature, top_p, etc.)
160
- - Security settings (security prompt, execution permissions)
161
+ ```bash
162
+ # Run the setup script to download and configure standalone Python
163
+ pnpm setup-python-standalone
164
+ ```
161
165
 
162
- ### Settings
166
+ This uses [python-build-standalone](https://github.com/indygreg/python-build-standalone), the same approach used by Datasette Desktop and PyOxidizer.
163
167
 
164
- - System prompt configuration
165
- - API credentials management
166
- - Application configuration
168
+ For more details, see the [PYTHON_BUNDLING.md](./docs/PYTHON_BUNDLING.md) documentation.
167
169
 
168
- ### API Integration
170
+ ### Code signing and notarization
169
171
 
170
- - Seamless integration with the Local Operator backend API
171
- - Real-time status updates for long-running operations
172
- - Error handling and retry mechanisms
172
+ All desktop applications are code signed and notarized to ensure security and trust:
173
173
 
174
- ### Bundled Backend
174
+ - **macOS**: Applications are signed with an Apple Developer ID and notarized with Apple's notarization service
175
+ - **Windows**: Applications are signed with a trusted code signing certificate
176
+ - **Linux**: While code signing is less common on Linux, packages are built with integrity checks
175
177
 
176
- - The Local Operator backend is now bundled with the application
177
- - Automatic installation of the backend when first running the application
178
- - Automatic detection and use of existing backend installations
179
- - Cross-platform support for Windows, macOS, and Linux
178
+ For detailed information about the code signing and notarization process, see the [CODE_SIGNING.md](./docs/CODE_SIGNING.md) document.
180
179
 
181
- ## 🤝 Contributing
180
+ ## Contributing
182
181
 
183
182
  Contributions are welcome! Please see our [Contributing Guide](./CONTRIBUTING.md) for details on how to get started with development, code style guidelines, and our contribution process.
184
183
 
185
- ## 🐛 Troubleshooting
184
+ ## Troubleshooting
186
185
 
187
- ### Common Issues
186
+ ### Common issues
188
187
 
189
188
  #### Application fails to connect to the backend
190
189
 
@@ -197,7 +196,7 @@ Contributions are welcome! Please see our [Contributing Guide](./CONTRIBUTING.md
197
196
  #### Backend installation fails
198
197
 
199
198
  - Check the application logs for error messages
200
- - For macOS, the application now uses a bundled Python framework instead of requiring Homebrew and pyenv
199
+ - For macOS, the application uses a bundled Python framework instead of requiring Homebrew and pyenv
201
200
  - If you encounter issues with the bundled Python, see the [PYTHON_BUNDLING.md](./docs/PYTHON_BUNDLING.md) documentation
202
201
  - As a fallback, you can try installing the backend manually with `pip install local-operator` and then start it with `local-operator serve`
203
202
 
@@ -215,38 +214,23 @@ Contributions are welcome! Please see our [Contributing Guide](./CONTRIBUTING.md
215
214
 
216
215
  #### The window came to the front on its own, or a run never appeared
217
216
 
218
- Every time the app brings a window to the front it writes one line to its own
219
- backend log (`~/Library/Application Support/Local Operator/logs/backend-service.log`
220
- on macOS; the `LOCAL_OPERATOR_LOG_DIR` environment variable moves it):
217
+ Every time the app brings a window to the front it writes one line to its own backend log (`~/Library/Application Support/Local Operator/logs/backend-service.log` on macOS; the `LOCAL_OPERATOR_LOG_DIR` environment variable moves it):
221
218
 
222
219
  ```
223
220
  [window-raise] trigger=second-instance mode=normal requested=focus pid=9182 cwd=/Users/you/project applied=restore+show+focus
224
221
  ```
225
222
 
226
- `trigger` names what asked: `initial-present` (the app starting up),
227
- `second-instance` (a second launch sharing this profile), `banner-click`,
228
- `viewer-focus` or `viewer-resume`. `pid` and `cwd`, when they are there, name the
229
- process that asked — that is the one to stop if something keeps doing it. A run
230
- that raises nothing writes nothing, so an app that never came forward has no line
231
- at all — although a conversation that is WAITING for a window does: a `headless`
232
- launch against an app with no window open writes `applied=parked`, `parked=<id>`
233
- rather than a raise, and that conversation opens the next window you give the app.
234
- In the line above, `mode` is the window mode the raise ran under and `applied` is
235
- what it actually did.
236
-
237
- A second launch only brings the window as far as IT asked: a `headless` run never
238
- raises it (it can still load the conversation it names), an `inactive` one orders
239
- the window without activating the app and without pulling it back out of the
240
- Dock, and a launch that declares nothing — you double-clicking the app while it is
241
- already running — still comes to the front.
242
-
243
- ### Getting Help
223
+ `trigger` names what asked: `initial-present` (the app starting up), `second-instance` (a second launch sharing this profile), `banner-click`, `viewer-focus` or `viewer-resume`. `pid` and `cwd`, when they are there, name the process that asked — that is the one to stop if something keeps doing it. A run that raises nothing writes nothing, so an app that never came forward has no line at all — although a conversation that is WAITING for a window does: a `headless` launch against an app with no window open writes `applied=parked`, `parked=<id>` rather than a raise, and that conversation opens the next window you give the app. In the line above, `mode` is the window mode the raise ran under and `applied` is what it actually did.
224
+
225
+ A second launch only brings the window as far as IT asked: a `headless` run never raises it (it can still load the conversation it names), an `inactive` one orders the window without activating the app and without pulling it back out of the Dock, and a launch that declares nothing — you double-clicking the app while it is already running — still comes to the front.
226
+
227
+ ## Getting help
244
228
 
245
229
  If you encounter issues not covered here, please:
246
230
 
247
231
  1. Check the [GitHub Issues](https://github.com/damianvtran/local-operator-ui/issues) for similar problems
248
232
  2. Open a new issue if your problem hasn't been reported
249
233
 
250
- ## 📄 License
234
+ ## License
251
235
 
252
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
236
+ This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details. It is open source because AI tools should be accessible to everyone, and your contributions and feedback help make that real.
package/out/main/index.js CHANGED
@@ -1466,6 +1466,30 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
1466
1466
  op: zod.z.literal("projects.milestone.remove"),
1467
1467
  key: projectKey,
1468
1468
  name: zod.z.string().min(1).max(PROJECT_MILESTONE_NAME_MAX_CHARS)
1469
+ }).strict(),
1470
+ /*
1471
+ * AIDA'S CONTROL PLANE: one read and one control op on the same route
1472
+ * (`/v1/desktop/aida`), because the rail's row and the composer's `/aida`
1473
+ * need the SAME state and a second spelling of it would be a second answer
1474
+ * about her one long session (`design.md` § 4 freezes the route).
1475
+ *
1476
+ * The feature is gated by its OWN capability key (`features.aida`), never a
1477
+ * bump of `commands`: a renderer that does not read it keeps working against
1478
+ * this backend, and this renderer must not call the route while the key is
1479
+ * absent or 0 (§ 3.4's version skew).
1480
+ *
1481
+ * Deliberately NOT a `MESSAGE_OPS` member (see `desktopRequestByteBudget`):
1482
+ * an enum word and a receipt are not prose, so this costs the control budget.
1483
+ */
1484
+ zod.z.object({ op: zod.z.literal("aida.status") }).strict(),
1485
+ zod.z.object({
1486
+ op: zod.z.literal("aida.control"),
1487
+ /*
1488
+ * The route's own op vocabulary, held to it here: a word the backend does
1489
+ * not serve must fail at this boundary rather than travel as a 422 the
1490
+ * user reads as a defect of their press.
1491
+ */
1492
+ action: zod.z.enum(["open", "pause", "resume", "greet", "status"])
1469
1493
  }).strict()
1470
1494
  ]);
1471
1495
  const desktopRequestSchema = desktopRequestUnion.superRefine(
@@ -2526,6 +2550,19 @@ function desktopEndpoint(request) {
2526
2550
  path: `/v1/desktop/projects/${encodeURIComponent(request.key)}/milestones/${encodeURIComponent(request.name)}`,
2527
2551
  method: "DELETE"
2528
2552
  };
2553
+ case "aida.status":
2554
+ return { path: "/v1/desktop/aida", method: "GET" };
2555
+ case "aida.control":
2556
+ return {
2557
+ path: "/v1/desktop/aida",
2558
+ method: "POST",
2559
+ /*
2560
+ * The route's body is `{"op": ...}` — its own word, not this envelope's
2561
+ * — so the ACTION travels under the route's field name and the two `op`s
2562
+ * cannot be read as one.
2563
+ */
2564
+ body: { op: request.action }
2565
+ };
2529
2566
  }
2530
2567
  }
2531
2568
  const MAX_PROBE_PATHS = 64;
@@ -1 +1 @@
1
- import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-eE-r5ZZ4.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-xrJy-S5f.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
1
+ import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-BGWDx1XP.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-CHO9EN5d.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
@@ -1 +1 @@
1
- import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-xrJy-S5f.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=t&Re;if(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
1
+ import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-CHO9EN5d.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=t&Re;if(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
@@ -1,4 +1,4 @@
1
- import{r as E,j as e,c as Z}from"./index-C-P4UaBn.js";import{l as ue,c as he,u as xe,d as ge,g as je,i as fe,a as pe,b as ye,e as ve}from"./use-memberships-query-CjIPH1YX.js";import{h as ne,g as I,aJ as b,aK as K,av as Y,aL as O,aM as we,aN as be,aO as ie,i as re,a as Ce,aw as Ne,aP as Ae,B as ke,aQ as Se,aR as De,aS as G,au as Te,aT as Ee,aU as Fe}from"./index-tykR0DI9.js";import{c as Pe,L as _e,T as ee,B as l,S as z,b as oe,d as L,e as M,a as v,X as qe,f as w,A as te,g as se,h as ae}from"./error-boundary-Be38BRVp.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Oe,H as Qe,A as Ue}from"./use-download-agent-mutation-uGo2AQXO.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.js";/**
1
+ import{r as E,j as e,c as Z}from"./index-C-P4UaBn.js";import{l as ue,c as he,u as xe,d as ge,g as je,i as fe,a as pe,b as ye,e as ve}from"./use-memberships-query-DJonF1zy.js";import{h as ne,g as I,aJ as b,aK as K,av as Y,aL as O,aM as we,aN as be,aO as ie,i as re,a as Ce,aw as Ne,aP as Ae,B as ke,aQ as Se,aR as De,aS as G,au as Te,aT as Ee,aU as Fe}from"./index-BoBj0LUC.js";import{c as Pe,L as _e,T as ee,B as l,S as z,b as oe,d as L,e as M,a as v,X as qe,f as w,A as te,g as se,h as ae}from"./error-boundary-Be38BRVp.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Oe,H as Qe,A as Ue}from"./use-download-agent-mutation-DB-9HDGk.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.js";/**
2
2
  * @license lucide-react v0.507.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.