claude-mpm 5.1.9__py3-none-any.whl → 5.4.48__py3-none-any.whl
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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +4 -0
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
- claude_mpm/agents/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +843 -900
- claude_mpm/agents/WORKFLOW.md +5 -254
- claude_mpm/agents/agent_loader.py +13 -44
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/frontmatter_validator.py +2 -2
- claude_mpm/agents/templates/circuit-breakers.md +138 -1
- claude_mpm/cli/__main__.py +4 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agent_state_manager.py +18 -27
- claude_mpm/cli/commands/agents.py +9 -40
- claude_mpm/cli/commands/auto_configure.py +210 -25
- claude_mpm/cli/commands/config.py +88 -2
- claude_mpm/cli/commands/configure.py +1098 -159
- claude_mpm/cli/commands/configure_agent_display.py +25 -6
- claude_mpm/cli/commands/mpm_init/core.py +225 -46
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/postmortem.py +1 -1
- claude_mpm/cli/commands/profile.py +277 -0
- claude_mpm/cli/commands/skills.py +218 -197
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +21 -3
- claude_mpm/cli/interactive/agent_wizard.py +2 -2
- claude_mpm/cli/parsers/agents_parser.py +0 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
- claude_mpm/cli/parsers/base_parser.py +12 -0
- claude_mpm/cli/parsers/config_parser.py +153 -83
- claude_mpm/cli/parsers/profile_parser.py +148 -0
- claude_mpm/cli/parsers/skills_parser.py +0 -5
- claude_mpm/cli/startup.py +876 -149
- claude_mpm/commands/mpm-config.md +28 -0
- claude_mpm/commands/mpm-doctor.md +9 -22
- claude_mpm/commands/mpm-help.md +5 -287
- claude_mpm/commands/mpm-init.md +81 -507
- claude_mpm/commands/mpm-monitor.md +15 -402
- claude_mpm/commands/mpm-organize.md +120 -0
- claude_mpm/commands/mpm-postmortem.md +6 -108
- claude_mpm/commands/mpm-session-resume.md +12 -363
- claude_mpm/commands/mpm-status.md +5 -69
- claude_mpm/commands/mpm-ticket-view.md +52 -495
- claude_mpm/commands/mpm-version.md +5 -107
- claude_mpm/config/agent_sources.py +27 -0
- claude_mpm/core/config.py +2 -4
- claude_mpm/core/framework/formatters/content_formatter.py +3 -13
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- claude_mpm/core/framework_loader.py +4 -2
- claude_mpm/core/logger.py +13 -0
- claude_mpm/core/optimized_startup.py +59 -0
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/socketio_pool.py +3 -3
- claude_mpm/core/unified_agent_registry.py +5 -15
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
- claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
- claude_mpm/hooks/claude_hooks/installer.py +33 -10
- claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
- claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
- claude_mpm/hooks/kuzu_memory_hook.py +5 -5
- claude_mpm/hooks/memory_integration_hook.py +46 -1
- claude_mpm/init.py +63 -19
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +58 -18
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/services/agents/agent_builder.py +3 -3
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- claude_mpm/services/agents/cache_git_manager.py +6 -6
- claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +23 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +32 -20
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
- claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
- claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +247 -35
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +392 -87
- claude_mpm/services/agents/git_source_manager.py +53 -4
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
- claude_mpm/services/agents/recommender.py +5 -3
- claude_mpm/services/agents/single_tier_deployment_service.py +2 -2
- claude_mpm/services/agents/sources/git_source_sync_service.py +120 -7
- claude_mpm/services/agents/startup_sync.py +22 -2
- claude_mpm/services/agents/toolchain_detector.py +10 -6
- claude_mpm/services/analysis/__init__.py +11 -1
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/command_deployment_service.py +81 -10
- claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +1 -1
- claude_mpm/services/event_bus/config.py +3 -1
- claude_mpm/services/git/git_operations_service.py +101 -16
- claude_mpm/services/monitor/daemon.py +9 -2
- claude_mpm/services/monitor/daemon_manager.py +39 -3
- claude_mpm/services/monitor/management/lifecycle.py +8 -1
- claude_mpm/services/monitor/server.py +698 -22
- claude_mpm/services/pm_skills_deployer.py +711 -0
- claude_mpm/services/profile_manager.py +331 -0
- claude_mpm/services/self_upgrade_service.py +120 -12
- claude_mpm/services/skills/__init__.py +3 -0
- claude_mpm/services/skills/git_skill_source_manager.py +130 -2
- claude_mpm/services/skills/selective_skill_deployer.py +704 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_deployer.py +127 -9
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +51 -6
- claude_mpm/services/socketio/server/core.py +386 -108
- claude_mpm/services/version_control/git_operations.py +103 -0
- claude_mpm/skills/skill_manager.py +92 -3
- claude_mpm/utils/agent_dependency_loader.py +14 -2
- claude_mpm/utils/agent_filters.py +17 -44
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +47 -3
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/METADATA +53 -87
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/RECORD +157 -197
- claude_mpm-5.4.48.dist-info/entry_points.txt +5 -0
- claude_mpm-5.4.48.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.48.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
- claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
- claude_mpm/agents/BASE_OPS.md +0 -219
- claude_mpm/agents/BASE_PM.md +0 -480
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
- claude_mpm/agents/BASE_QA.md +0 -167
- claude_mpm/agents/BASE_RESEARCH.md +0 -53
- claude_mpm/agents/base_agent_loader.py +0 -601
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/cli/ticket_cli.py +0 -35
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- claude_mpm/commands/mpm-config-view.md +0 -150
- claude_mpm/commands/mpm-ticket-organize.md +0 -304
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
- claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/WHEEL +0 -0
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/top_level.txt +0 -0
|
@@ -4,119 +4,17 @@ command: version
|
|
|
4
4
|
aliases: [mpm-version]
|
|
5
5
|
migration_target: /mpm/system:version
|
|
6
6
|
category: system
|
|
7
|
-
|
|
8
|
-
description: Show comprehensive version information for Claude MPM
|
|
7
|
+
description: Show version information
|
|
9
8
|
---
|
|
10
|
-
#
|
|
9
|
+
# /mpm-version
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
Display version information for MPM, agents, and skills.
|
|
13
12
|
|
|
14
13
|
## Usage
|
|
15
|
-
|
|
16
14
|
```
|
|
17
15
|
/mpm-version
|
|
18
16
|
```
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
Display version information including:
|
|
23
|
-
- Project version and build number
|
|
24
|
-
- All deployed agents with their versions (grouped by tier: system/user/project)
|
|
25
|
-
- All available skills with their versions (grouped by source: bundled/user/project)
|
|
26
|
-
- Summary statistics
|
|
27
|
-
|
|
28
|
-
## Implementation
|
|
29
|
-
|
|
30
|
-
When you run `/mpm-version`, the PM will:
|
|
31
|
-
|
|
32
|
-
1. **Collect Version Information**
|
|
33
|
-
- Use VersionService to gather all version data
|
|
34
|
-
- Project version from pyproject.toml
|
|
35
|
-
- Build number from BUILD_NUMBER file
|
|
36
|
-
- Agent versions from AgentRegistry
|
|
37
|
-
- Skills versions from SkillRegistry
|
|
38
|
-
|
|
39
|
-
2. **Format Output**
|
|
40
|
-
- Hierarchical display: Project → Agents → Skills
|
|
41
|
-
- Grouped by tier/source for clarity
|
|
42
|
-
- Sorted alphabetically within groups
|
|
43
|
-
- Summary statistics at the end
|
|
44
|
-
|
|
45
|
-
3. **Display Results**
|
|
46
|
-
- Well-formatted tree structure
|
|
47
|
-
- Easy to scan and read
|
|
48
|
-
- Includes totals and counts
|
|
49
|
-
|
|
50
|
-
## Example Output
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
Claude MPM Version Information
|
|
54
|
-
==============================
|
|
55
|
-
|
|
56
|
-
Project Version: 4.16.3
|
|
57
|
-
Build: 481
|
|
58
|
-
|
|
59
|
-
Agents (35 total)
|
|
60
|
-
-----------------
|
|
61
|
-
|
|
62
|
-
System Agents (30):
|
|
63
|
-
├─ agent-manager (1.0.0)
|
|
64
|
-
├─ engineer (3.9.1)
|
|
65
|
-
├─ research-agent (4.5.1)
|
|
66
|
-
├─ documentation (2.1.0)
|
|
67
|
-
├─ qa (2.0.3)
|
|
68
|
-
└─ ... (25 more)
|
|
69
|
-
|
|
70
|
-
User Agents (3):
|
|
71
|
-
├─ custom-agent (1.0.0)
|
|
72
|
-
├─ testing-agent (0.5.0)
|
|
73
|
-
└─ prototype-agent (0.1.0)
|
|
74
|
-
|
|
75
|
-
Project Agents (2):
|
|
76
|
-
├─ project-specific (2.0.0)
|
|
77
|
-
└─ domain-expert (1.1.0)
|
|
78
|
-
|
|
79
|
-
Skills (20 total)
|
|
80
|
-
-----------------
|
|
81
|
-
|
|
82
|
-
Bundled Skills (20):
|
|
83
|
-
├─ test-driven-development (0.1.0)
|
|
84
|
-
├─ systematic-debugging (0.1.0)
|
|
85
|
-
├─ async-testing (0.1.0)
|
|
86
|
-
├─ performance-profiling (0.1.0)
|
|
87
|
-
├─ security-scanning (0.1.0)
|
|
88
|
-
└─ ... (15 more)
|
|
89
|
-
|
|
90
|
-
User Skills (0):
|
|
91
|
-
(none)
|
|
92
|
-
|
|
93
|
-
Project Skills (0):
|
|
94
|
-
(none)
|
|
95
|
-
|
|
96
|
-
Summary
|
|
97
|
-
-------
|
|
98
|
-
• Project: v4.16.3 (build 481)
|
|
99
|
-
• Agents: 35 total (30 system, 3 user, 2 project)
|
|
100
|
-
• Skills: 20 total (20 bundled, 0 user, 0 project)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## PM Implementation Instructions
|
|
104
|
-
|
|
105
|
-
To execute this command, PM should:
|
|
106
|
-
|
|
107
|
-
1. Import and use VersionService:
|
|
108
|
-
```python
|
|
109
|
-
from claude_mpm.services.version_service import VersionService
|
|
110
|
-
|
|
111
|
-
service = VersionService()
|
|
112
|
-
summary = service.get_version_summary()
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
2. Format output following the example structure above
|
|
116
|
-
3. Handle missing data gracefully (show "unknown" for missing versions)
|
|
117
|
-
4. Include all tiers/sources even if counts are zero
|
|
118
|
-
|
|
119
|
-
## Related Commands
|
|
18
|
+
Shows project version, build number, all agents (by tier), all skills (by source).
|
|
120
19
|
|
|
121
|
-
|
|
122
|
-
- `/mpm-status` - Show system status information
|
|
20
|
+
See docs/commands/version.md for details.
|
|
@@ -316,6 +316,33 @@ class AgentSourceConfiguration:
|
|
|
316
316
|
|
|
317
317
|
return errors
|
|
318
318
|
|
|
319
|
+
def list_sources(self) -> list[dict]:
|
|
320
|
+
"""Return list of source configurations as dictionaries.
|
|
321
|
+
|
|
322
|
+
This method converts GitRepository objects to dictionaries for CLI
|
|
323
|
+
and API compatibility. Called by GitSourceManager and CLI commands.
|
|
324
|
+
|
|
325
|
+
Returns:
|
|
326
|
+
List of dicts with keys: identifier, url, subdirectory, enabled, priority
|
|
327
|
+
|
|
328
|
+
Example:
|
|
329
|
+
>>> config = AgentSourceConfiguration()
|
|
330
|
+
>>> sources = config.list_sources()
|
|
331
|
+
>>> for source in sources:
|
|
332
|
+
... print(f"{source['identifier']} (priority: {source['priority']})")
|
|
333
|
+
"""
|
|
334
|
+
repos = self.get_enabled_repositories()
|
|
335
|
+
return [
|
|
336
|
+
{
|
|
337
|
+
"identifier": repo.identifier,
|
|
338
|
+
"url": repo.url,
|
|
339
|
+
"subdirectory": repo.subdirectory,
|
|
340
|
+
"enabled": repo.enabled,
|
|
341
|
+
"priority": repo.priority,
|
|
342
|
+
}
|
|
343
|
+
for repo in repos
|
|
344
|
+
]
|
|
345
|
+
|
|
319
346
|
def __repr__(self) -> str:
|
|
320
347
|
"""Return string representation of configuration."""
|
|
321
348
|
return (
|
claude_mpm/core/config.py
CHANGED
|
@@ -563,7 +563,7 @@ class Config:
|
|
|
563
563
|
# Instruction reinforcement system configuration
|
|
564
564
|
"instruction_reinforcement": {
|
|
565
565
|
"enabled": True,
|
|
566
|
-
"test_mode":
|
|
566
|
+
"test_mode": False,
|
|
567
567
|
"injection_interval": 5,
|
|
568
568
|
"test_messages": [
|
|
569
569
|
"[TEST-REMINDER] This is an injected instruction reminder",
|
|
@@ -603,9 +603,7 @@ class Config:
|
|
|
603
603
|
}
|
|
604
604
|
],
|
|
605
605
|
"sync_interval": "startup", # Options: "startup", "hourly", "daily", "manual"
|
|
606
|
-
"cache_dir": str(
|
|
607
|
-
Path.home() / ".claude-mpm" / "cache" / "remote-agents"
|
|
608
|
-
),
|
|
606
|
+
"cache_dir": str(Path.home() / ".claude-mpm" / "cache" / "agents"),
|
|
609
607
|
},
|
|
610
608
|
}
|
|
611
609
|
|
|
@@ -100,19 +100,9 @@ class ContentFormatter:
|
|
|
100
100
|
instructions += framework_content["actual_memories"]
|
|
101
101
|
instructions += "\n"
|
|
102
102
|
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if agent_memories:
|
|
107
|
-
instructions += "\n\n## Agent Memories\n\n"
|
|
108
|
-
instructions += "**The following are accumulated memories from specialized agents:**\n\n"
|
|
109
|
-
|
|
110
|
-
for agent_name in sorted(agent_memories.keys()):
|
|
111
|
-
memory_content = agent_memories[agent_name]
|
|
112
|
-
if memory_content:
|
|
113
|
-
instructions += f"### {agent_name.replace('_', ' ').title()} Agent Memory\n\n"
|
|
114
|
-
instructions += memory_content
|
|
115
|
-
instructions += "\n\n"
|
|
103
|
+
# NOTE: Agent memories are now injected at agent deployment time
|
|
104
|
+
# in agent_template_builder.py, not in PM instructions.
|
|
105
|
+
# This ensures each agent gets its own memory, not all memories embedded in PM.
|
|
116
106
|
|
|
117
107
|
# Add dynamic agent capabilities section
|
|
118
108
|
instructions += capabilities_section
|
|
@@ -115,7 +115,11 @@ class AgentLoader:
|
|
|
115
115
|
return agents
|
|
116
116
|
|
|
117
117
|
def discover_local_json_templates(self) -> Dict[str, Dict[str, Any]]:
|
|
118
|
-
"""Discover local JSON agent templates
|
|
118
|
+
"""Discover local JSON agent templates.
|
|
119
|
+
|
|
120
|
+
NOTE: This method is kept for backward compatibility but is deprecated.
|
|
121
|
+
The new architecture uses SOURCE (~/.claude-mpm/cache/agents/)
|
|
122
|
+
and DEPLOYMENT (.claude/agents/) locations only.
|
|
119
123
|
|
|
120
124
|
Returns:
|
|
121
125
|
Dictionary mapping agent IDs to agent metadata
|
|
@@ -125,11 +129,10 @@ class AgentLoader:
|
|
|
125
129
|
local_agents = {}
|
|
126
130
|
|
|
127
131
|
# Check for local JSON templates in priority order
|
|
132
|
+
# NOTE: These directories are deprecated in the simplified architecture
|
|
128
133
|
template_dirs = [
|
|
129
|
-
Path.cwd()
|
|
130
|
-
/ ".claude-mpm"
|
|
131
|
-
/ "agents", # Project local agents (highest priority)
|
|
132
|
-
Path.home() / ".claude-mpm" / "agents", # User local agents
|
|
134
|
+
Path.cwd() / ".claude-mpm" / "agents", # Deprecated: Project local agents
|
|
135
|
+
Path.home() / ".claude-mpm" / "agents", # Deprecated: User local agents
|
|
133
136
|
]
|
|
134
137
|
|
|
135
138
|
for priority, template_dir in enumerate(template_dirs):
|
|
@@ -88,39 +88,80 @@ class InstructionLoader:
|
|
|
88
88
|
self.packaged_loader.framework_last_modified
|
|
89
89
|
)
|
|
90
90
|
|
|
91
|
+
def _extract_version(self, file_content: str) -> int:
|
|
92
|
+
"""Extract version number from PM_INSTRUCTIONS_VERSION comment.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
file_content: Content of the file to extract version from
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Version number as integer, or 0 if not found
|
|
99
|
+
"""
|
|
100
|
+
import re
|
|
101
|
+
|
|
102
|
+
match = re.search(r"PM_INSTRUCTIONS_VERSION:\s*(\d+)", file_content)
|
|
103
|
+
if match:
|
|
104
|
+
return int(match.group(1))
|
|
105
|
+
return 0 # No version = oldest
|
|
106
|
+
|
|
91
107
|
def _load_filesystem_framework_instructions(self, content: Dict[str, Any]) -> None:
|
|
92
108
|
"""Load framework instructions from filesystem.
|
|
93
109
|
|
|
94
110
|
Priority order:
|
|
95
|
-
1. Deployed compiled file: .claude-mpm/PM_INSTRUCTIONS_DEPLOYED.md (
|
|
111
|
+
1. Deployed compiled file: .claude-mpm/PM_INSTRUCTIONS_DEPLOYED.md (if version >= source)
|
|
96
112
|
2. Source file (development): src/claude_mpm/agents/PM_INSTRUCTIONS.md
|
|
97
113
|
3. Legacy file (backward compat): src/claude_mpm/agents/INSTRUCTIONS.md
|
|
98
114
|
|
|
115
|
+
Version validation ensures deployed file is never stale compared to source.
|
|
116
|
+
|
|
99
117
|
Args:
|
|
100
118
|
content: Dictionary to update with framework instructions
|
|
101
119
|
"""
|
|
120
|
+
# Define source path for version checking
|
|
121
|
+
pm_instructions_path = (
|
|
122
|
+
self.framework_path / "src" / "claude_mpm" / "agents" / "PM_INSTRUCTIONS.md"
|
|
123
|
+
)
|
|
124
|
+
|
|
102
125
|
# PRIORITY 1: Check for compiled/deployed version in .claude-mpm/
|
|
103
126
|
# This is the merged PM_INSTRUCTIONS.md + WORKFLOW.md + MEMORY.md
|
|
104
127
|
deployed_path = self.current_dir / ".claude-mpm" / "PM_INSTRUCTIONS_DEPLOYED.md"
|
|
105
128
|
if deployed_path.exists():
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
# Validate version before using deployed file
|
|
130
|
+
deployed_content = deployed_path.read_text()
|
|
131
|
+
deployed_version = self._extract_version(deployed_content)
|
|
132
|
+
|
|
133
|
+
# Check source version for comparison
|
|
134
|
+
if pm_instructions_path.exists():
|
|
135
|
+
source_content = pm_instructions_path.read_text()
|
|
136
|
+
source_version = self._extract_version(source_content)
|
|
137
|
+
|
|
138
|
+
if deployed_version < source_version:
|
|
139
|
+
self.logger.warning(
|
|
140
|
+
f"Deployed PM instructions v{deployed_version:04d} is stale, "
|
|
141
|
+
f"source is v{source_version:04d}. Using source instead."
|
|
142
|
+
)
|
|
143
|
+
# Fall through to source loading - don't return early
|
|
144
|
+
else:
|
|
145
|
+
# Version OK, use deployed
|
|
146
|
+
content["framework_instructions"] = deployed_content
|
|
147
|
+
content["loaded"] = True
|
|
148
|
+
self.logger.info(
|
|
149
|
+
f"Loaded PM_INSTRUCTIONS_DEPLOYED.md v{deployed_version:04d} from .claude-mpm/"
|
|
150
|
+
)
|
|
151
|
+
return # Stop here - deployed version is current
|
|
152
|
+
else:
|
|
153
|
+
# Source doesn't exist, use deployed even without version check
|
|
154
|
+
content["framework_instructions"] = deployed_content
|
|
111
155
|
content["loaded"] = True
|
|
112
156
|
self.logger.info("Loaded PM_INSTRUCTIONS_DEPLOYED.md from .claude-mpm/")
|
|
113
|
-
return
|
|
157
|
+
return
|
|
114
158
|
|
|
115
159
|
# PRIORITY 2: Development mode - load from source PM_INSTRUCTIONS.md
|
|
116
|
-
pm_instructions_path = (
|
|
117
|
-
self.framework_path / "src" / "claude_mpm" / "agents" / "PM_INSTRUCTIONS.md"
|
|
118
|
-
)
|
|
119
160
|
framework_instructions_path = (
|
|
120
161
|
self.framework_path / "src" / "claude_mpm" / "agents" / "INSTRUCTIONS.md"
|
|
121
162
|
)
|
|
122
163
|
|
|
123
|
-
# Try loading new consolidated file
|
|
164
|
+
# Try loading new consolidated file (pm_instructions_path already defined above)
|
|
124
165
|
if pm_instructions_path.exists():
|
|
125
166
|
loaded_content = self.file_loader.try_load_file(
|
|
126
167
|
pm_instructions_path, "source PM_INSTRUCTIONS.md (development mode)"
|
|
@@ -255,10 +255,12 @@ class FrameworkLoader:
|
|
|
255
255
|
"""Load actual memories using the MemoryManager service."""
|
|
256
256
|
memories = self._memory_manager.load_memories()
|
|
257
257
|
|
|
258
|
+
# Only load PM memories (PM.md)
|
|
259
|
+
# Agent memories are loaded at deployment time in agent_template_builder.py
|
|
258
260
|
if "actual_memories" in memories:
|
|
259
261
|
content["actual_memories"] = memories["actual_memories"]
|
|
260
|
-
|
|
261
|
-
|
|
262
|
+
# NOTE: agent_memories are no longer loaded for PM instructions
|
|
263
|
+
# They are injected per-agent at deployment time
|
|
262
264
|
|
|
263
265
|
# === Agent Discovery Methods ===
|
|
264
266
|
|
claude_mpm/core/logger.py
CHANGED
|
@@ -175,6 +175,19 @@ def setup_logging(
|
|
|
175
175
|
Returns:
|
|
176
176
|
Configured logger
|
|
177
177
|
"""
|
|
178
|
+
# Detect deployment context for install-type-aware defaults
|
|
179
|
+
if level == "INFO": # Only override default, not explicit settings
|
|
180
|
+
from claude_mpm.core.unified_paths import DeploymentContext, PathContext
|
|
181
|
+
|
|
182
|
+
context = PathContext.detect_deployment_context()
|
|
183
|
+
if context in (
|
|
184
|
+
DeploymentContext.DEVELOPMENT,
|
|
185
|
+
DeploymentContext.EDITABLE_INSTALL,
|
|
186
|
+
):
|
|
187
|
+
level = "INFO" # Development: verbose logging
|
|
188
|
+
else:
|
|
189
|
+
level = "OFF" # Production installs: silent by default
|
|
190
|
+
|
|
178
191
|
logger = logging.getLogger(name)
|
|
179
192
|
|
|
180
193
|
# Handle OFF level
|
|
@@ -165,6 +165,9 @@ class OptimizedStartup:
|
|
|
165
165
|
# Just setup agent registry, load on demand
|
|
166
166
|
self._setup_agent_registry()
|
|
167
167
|
|
|
168
|
+
# Verify PM skills after agent setup (non-blocking)
|
|
169
|
+
self._verify_pm_skills()
|
|
170
|
+
|
|
168
171
|
elapsed = time.time() - phase_start
|
|
169
172
|
self.metrics.phases["agents"] = elapsed
|
|
170
173
|
self.metrics.agent_time = elapsed
|
|
@@ -198,6 +201,62 @@ class OptimizedStartup:
|
|
|
198
201
|
|
|
199
202
|
return self.metrics
|
|
200
203
|
|
|
204
|
+
def _verify_pm_skills(self) -> None:
|
|
205
|
+
"""Verify PM skills are deployed. Non-blocking with warnings."""
|
|
206
|
+
try:
|
|
207
|
+
from claude_mpm.services.pm_skills_deployer import PMSkillsDeployerService
|
|
208
|
+
|
|
209
|
+
deployer = PMSkillsDeployerService()
|
|
210
|
+
project_dir = Path.cwd()
|
|
211
|
+
|
|
212
|
+
result = deployer.verify_pm_skills(project_dir)
|
|
213
|
+
|
|
214
|
+
if not result.verified:
|
|
215
|
+
for warning in result.warnings:
|
|
216
|
+
self.logger.warning(warning)
|
|
217
|
+
|
|
218
|
+
# Check if auto-deploy is enabled
|
|
219
|
+
if self._should_auto_deploy_pm_skills():
|
|
220
|
+
self.logger.info("Auto-deploying PM skills...")
|
|
221
|
+
deploy_result = deployer.deploy_pm_skills(project_dir)
|
|
222
|
+
if deploy_result.success:
|
|
223
|
+
self.logger.info(
|
|
224
|
+
f"PM skills deployed: {len(deploy_result.deployed)} deployed, "
|
|
225
|
+
f"{len(deploy_result.skipped)} skipped"
|
|
226
|
+
)
|
|
227
|
+
else:
|
|
228
|
+
self.logger.warning(
|
|
229
|
+
f"PM skills deployment had errors: {len(deploy_result.errors)}"
|
|
230
|
+
)
|
|
231
|
+
else:
|
|
232
|
+
# Count skills from registry
|
|
233
|
+
registry = deployer._load_registry(project_dir)
|
|
234
|
+
skill_count = len(registry.get("skills", []))
|
|
235
|
+
self.logger.debug(f"PM skills verified: {skill_count} skills")
|
|
236
|
+
|
|
237
|
+
except ImportError:
|
|
238
|
+
self.logger.debug("PM skills deployer not available")
|
|
239
|
+
except Exception as e:
|
|
240
|
+
self.logger.warning(f"PM skills verification failed: {e}")
|
|
241
|
+
|
|
242
|
+
def _should_auto_deploy_pm_skills(self) -> bool:
|
|
243
|
+
"""Check if auto-deploy is enabled via config.
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
True if auto-deploy should be performed (default: True for convenience)
|
|
247
|
+
"""
|
|
248
|
+
# Default to True for convenience - PM skills are essential for PM agents
|
|
249
|
+
# Users can disable by setting environment variable or config
|
|
250
|
+
import os
|
|
251
|
+
|
|
252
|
+
# Check environment variable override
|
|
253
|
+
env_disable = os.environ.get("CLAUDE_MPM_DISABLE_AUTO_DEPLOY_PM_SKILLS", "").lower()
|
|
254
|
+
if env_disable in ("1", "true", "yes"):
|
|
255
|
+
return False
|
|
256
|
+
|
|
257
|
+
# Default to enabled
|
|
258
|
+
return True
|
|
259
|
+
|
|
201
260
|
def _setup_logging(self):
|
|
202
261
|
"""Setup basic logging (critical path)."""
|
|
203
262
|
# Minimal logging setup - already handled by logger module
|
|
@@ -51,7 +51,7 @@ class ConfigLoader:
|
|
|
51
51
|
search_paths=[".", ".claude-mpm", "agents"],
|
|
52
52
|
env_prefix="CLAUDE_MPM_AGENT_",
|
|
53
53
|
defaults={"timeout": 30, "max_retries": 3, "log_level": "INFO"},
|
|
54
|
-
required_keys=["name",
|
|
54
|
+
required_keys=["name"], # model is optional - defaults to sonnet if not specified
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
MEMORY_CONFIG = ConfigPattern(
|
claude_mpm/core/socketio_pool.py
CHANGED
|
@@ -55,8 +55,8 @@ class CircuitState(Enum):
|
|
|
55
55
|
class ConnectionStats:
|
|
56
56
|
"""Connection statistics for monitoring."""
|
|
57
57
|
|
|
58
|
-
created_at: datetime = field(default_factory=datetime.now)
|
|
59
|
-
last_used: datetime = field(default_factory=datetime.now)
|
|
58
|
+
created_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
|
|
59
|
+
last_used: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
|
|
60
60
|
events_sent: int = 0
|
|
61
61
|
errors: int = 0
|
|
62
62
|
consecutive_errors: int = 0
|
|
@@ -70,7 +70,7 @@ class BatchEvent:
|
|
|
70
70
|
namespace: str
|
|
71
71
|
event: str
|
|
72
72
|
data: Dict[str, Any]
|
|
73
|
-
timestamp: datetime = field(default_factory=datetime.now)
|
|
73
|
+
timestamp: datetime = field(default_factory=lambda: datetime.now(timezone.utc))
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
class CircuitBreaker:
|
|
@@ -174,26 +174,16 @@ class UnifiedAgentRegistry:
|
|
|
174
174
|
if project_path.exists():
|
|
175
175
|
self.discovery_paths.append(project_path)
|
|
176
176
|
|
|
177
|
-
#
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
local_project_path.exists()
|
|
181
|
-
and local_project_path not in self.discovery_paths
|
|
182
|
-
):
|
|
183
|
-
self.discovery_paths.append(local_project_path)
|
|
184
|
-
logger.debug(f"Added local project templates path: {local_project_path}")
|
|
177
|
+
# NOTE: .claude-mpm/agents/ is deprecated in the simplified architecture
|
|
178
|
+
# Source agents come from ~/.claude-mpm/cache/agents/
|
|
179
|
+
# Deployed agents go to .claude/agents/
|
|
185
180
|
|
|
186
|
-
# User-level agents
|
|
181
|
+
# User-level agents (deprecated in simplified architecture)
|
|
182
|
+
# Keeping for backward compatibility but not actively used
|
|
187
183
|
user_path = self.path_manager.get_user_agents_dir()
|
|
188
184
|
if user_path.exists():
|
|
189
185
|
self.discovery_paths.append(user_path)
|
|
190
186
|
|
|
191
|
-
# Also check for user JSON templates in ~/.claude-mpm/agents/
|
|
192
|
-
local_user_path = Path.home() / ".claude-mpm" / "agents"
|
|
193
|
-
if local_user_path.exists() and local_user_path not in self.discovery_paths:
|
|
194
|
-
self.discovery_paths.append(local_user_path)
|
|
195
|
-
logger.debug(f"Added local user templates path: {local_user_path}")
|
|
196
|
-
|
|
197
187
|
# System-level agents (includes templates as a subdirectory)
|
|
198
188
|
system_path = self.path_manager.get_system_agents_dir()
|
|
199
189
|
if system_path.exists():
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const env={}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.static{position:static}.relative{position:relative}.sticky{position:sticky}.top-0{top:0}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[calc\(100vh-280px\)\]{max-height:calc(100vh - 280px)}.min-h-0{min-height:0px}.min-h-screen{min-height:100vh}.w-1\/3{width:33.333333%}.w-12{width:3rem}.w-16{width:4rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-\[110px_120px_160px_120px_100px\]{grid-template-columns:110px 120px 160px 120px 100px}.grid-cols-\[140px_1fr_80px_100px\]{grid-template-columns:140px 1fr 80px 100px}.grid-cols-\[50px_1fr_100px_120px\]{grid-template-columns:50px 1fr 100px 120px}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-500\/20{border-color:#3b82f633}.border-blue-500\/30{border-color:#3b82f64d}.border-green-500\/20{border-color:#22c55e33}.border-green-500\/30{border-color:#22c55e4d}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-500\/20{border-color:#a855f733}.border-purple-500\/30{border-color:#a855f74d}.border-red-500\/20{border-color:#ef444433}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-500\/20{border-color:#64748b33}.border-slate-500\/30{border-color:#64748b4d}.border-l-cyan-500{--tw-border-opacity: 1;border-left-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-200{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-500\/5{background-color:#3b82f60d}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/20{background-color:#22c55e33}.bg-green-500\/5{background-color:#22c55e0d}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500\/20{background-color:#a855f733}.bg-purple-500\/5{background-color:#a855f70d}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/5{background-color:#ef44440d}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-500\/20{background-color:#64748b33}.bg-slate-500\/5{background-color:#64748b0d}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-2{padding-bottom:.5rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-none{line-height:1}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.placeholder-slate-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(148 163 184 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(148 163 184 / var(--tw-placeholder-opacity, 1))}.opacity-50{opacity:.5}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-cyan-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;--color-bg-primary: #ffffff;--color-bg-secondary: #f8fafc;--color-bg-code: #f1f5f9;--color-text-primary: #0f172a;--color-text-secondary: #475569;--color-text-tertiary: #64748b;--color-border: #e2e8f0;--color-primary: #0891b2}.dark{--color-bg-primary: #0f172a;--color-bg-secondary: #1e293b;--color-bg-code: #334155;--color-text-primary: #f1f5f9;--color-text-secondary: #cbd5e1;--color-text-tertiary: #94a3b8;--color-border: #334155;--color-primary: #06b6d4}body{margin:0;padding:0;background-color:#0f172a;color:#e2e8f0}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500\/10:hover{background-color:#3b82f61a}.hover\:bg-green-500\/10:hover{background-color:#22c55e1a}.hover\:bg-purple-500\/10:hover{background-color:#a855f71a}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-500\/10:hover{background-color:#64748b1a}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-cyan-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(6 182 212 / var(--tw-ring-opacity, 1))}.dark\:divide-slate-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(51 65 85 / var(--tw-divide-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-purple-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 33 168 / var(--tw-border-opacity, 1))}.dark\:border-slate-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-l-cyan-400:is(.dark *){--tw-border-opacity: 1;border-left-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:bg-amber-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-black\/30:is(.dark *){background-color:#0000004d}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-cyan-500\/20:is(.dark *){background-color:#06b6d433}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-slate-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800\/20:is(.dark *){background-color:#1e293b33}.dark\:bg-slate-800\/40:is(.dark *){background-color:#1e293b66}.dark\:bg-slate-800\/50:is(.dark *){background-color:#1e293b80}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-500:is(.dark *){--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-slate-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-slate-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.dark\:ring-cyan-500\/30:is(.dark *){--tw-ring-color: rgb(6 182 212 / .3)}.dark\:hover\:border-slate-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-slate-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-700\/30:hover:is(.dark *){background-color:#3341554d}.dark\:hover\:bg-slate-700\/50:hover:is(.dark *){background-color:#33415580}.dark\:hover\:bg-slate-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:hover\:text-slate-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
option.active-stream.svelte-1elxaub{font-weight:600;background-color:#22c55e1a}@keyframes svelte-1elxaub-pulse-green{0%,to{opacity:1}50%{opacity:.5}}select.svelte-1elxaub option:where(.svelte-1elxaub):first-child{animation:svelte-1elxaub-pulse-green 2s cubic-bezier(.4,0,.6,1) infinite}.langtag.svelte-167dipq{position:relative}.langtag.svelte-167dipq:after{content:attr(data-language);position:absolute;top:var(--langtag-top, 0);right:var(--langtag-right, 0);display:flex;align-items:center;justify-content:center;background:var(--langtag-background, inherit);color:var(--langtag-color, inherit);border-radius:var(--langtag-border-radius, 0);padding:var(--langtag-padding, 1em)}.file-viewer.svelte-1y85kzg{display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.5rem;overflow:hidden}.file-viewer.empty.svelte-1y85kzg{display:flex;align-items:center;justify-content:center}.empty-message.svelte-1y85kzg{text-align:center;color:var(--color-text-tertiary);font-size:1rem}.viewer-header.svelte-1y85kzg{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary)}.file-info.svelte-1y85kzg{flex:1;min-width:0}.view-toggle.svelte-1y85kzg{display:flex;gap:0;background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.375rem;overflow:hidden}.toggle-btn.svelte-1y85kzg{padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all .15s ease}.toggle-btn.svelte-1y85kzg:hover:not(.disabled){background:var(--color-bg-secondary);color:var(--color-text-primary)}.toggle-btn.active.svelte-1y85kzg{background:var(--color-primary);color:#fff}.toggle-btn.disabled.svelte-1y85kzg{opacity:.4;cursor:not-allowed}.toggle-btn.svelte-1y85kzg:not(:last-child){border-right:1px solid var(--color-border)}.file-path.svelte-1y85kzg{margin:0 0 .25rem;font-size:1rem;font-weight:600;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;color:var(--color-text-primary);word-break:break-all}.file-meta.svelte-1y85kzg{margin:0;font-size:.8125rem;color:var(--color-text-secondary)}.viewer-content.svelte-1y85kzg{flex:1;overflow:auto;padding:1rem}.code-container.svelte-1y85kzg{font-size:.875rem;line-height:1.5}.code-container.svelte-1y85kzg pre{margin:0;padding:0!important;border-radius:.375rem;overflow-x:auto}.code-container.svelte-1y85kzg pre code.hljs{display:block;padding:1rem;border-radius:.375rem}.code-container[data-theme=light].svelte-1y85kzg pre code.hljs{background:#fafafa!important;color:#383a42!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-comment,.code-container[data-theme=light].svelte-1y85kzg .hljs-quote{color:#a0a1a7!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-keyword,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-tag,.code-container[data-theme=light].svelte-1y85kzg .hljs-addition{color:#a626a4!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-number,.code-container[data-theme=light].svelte-1y85kzg .hljs-string,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta .hljs-string,.code-container[data-theme=light].svelte-1y85kzg .hljs-literal,.code-container[data-theme=light].svelte-1y85kzg .hljs-doctag,.code-container[data-theme=light].svelte-1y85kzg .hljs-regexp{color:#50a14f!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-title,.code-container[data-theme=light].svelte-1y85kzg .hljs-section,.code-container[data-theme=light].svelte-1y85kzg .hljs-name,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-id,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-class{color:#c18401!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-attribute,.code-container[data-theme=light].svelte-1y85kzg .hljs-attr,.code-container[data-theme=light].svelte-1y85kzg .hljs-variable,.code-container[data-theme=light].svelte-1y85kzg .hljs-template-variable,.code-container[data-theme=light].svelte-1y85kzg .hljs-class .hljs-title,.code-container[data-theme=light].svelte-1y85kzg .hljs-type{color:#986801!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-symbol,.code-container[data-theme=light].svelte-1y85kzg .hljs-bullet,.code-container[data-theme=light].svelte-1y85kzg .hljs-subst,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta .hljs-keyword,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-attr,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-pseudo,.code-container[data-theme=light].svelte-1y85kzg .hljs-link{color:#4078f2!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-built_in,.code-container[data-theme=light].svelte-1y85kzg .hljs-deletion{color:#e45649!important}.code-container[data-theme=dark].svelte-1y85kzg pre code.hljs{background:#282c34!important;color:#abb2bf!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-comment,.code-container[data-theme=dark].svelte-1y85kzg .hljs-quote{color:#5c6370!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-keyword,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-tag,.code-container[data-theme=dark].svelte-1y85kzg .hljs-addition{color:#c678dd!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-number,.code-container[data-theme=dark].svelte-1y85kzg .hljs-string,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta .hljs-string,.code-container[data-theme=dark].svelte-1y85kzg .hljs-literal,.code-container[data-theme=dark].svelte-1y85kzg .hljs-doctag,.code-container[data-theme=dark].svelte-1y85kzg .hljs-regexp{color:#98c379!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-title,.code-container[data-theme=dark].svelte-1y85kzg .hljs-section,.code-container[data-theme=dark].svelte-1y85kzg .hljs-name,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-id,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-class{color:#e5c07b!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-attribute,.code-container[data-theme=dark].svelte-1y85kzg .hljs-attr,.code-container[data-theme=dark].svelte-1y85kzg .hljs-variable,.code-container[data-theme=dark].svelte-1y85kzg .hljs-template-variable,.code-container[data-theme=dark].svelte-1y85kzg .hljs-class .hljs-title,.code-container[data-theme=dark].svelte-1y85kzg .hljs-type{color:#d19a66!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-symbol,.code-container[data-theme=dark].svelte-1y85kzg .hljs-bullet,.code-container[data-theme=dark].svelte-1y85kzg .hljs-subst,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta .hljs-keyword,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-attr,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-pseudo,.code-container[data-theme=dark].svelte-1y85kzg .hljs-link{color:#61afef!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-built_in,.code-container[data-theme=dark].svelte-1y85kzg .hljs-deletion{color:#e06c75!important}.code-container.svelte-1y85kzg .plaintext:where(.svelte-1y85kzg){margin:0;padding:1rem;border-radius:.375rem;overflow-x:auto;background:var(--color-bg-secondary);color:var(--color-text-primary);font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.875rem;line-height:1.5}.image-container.svelte-1y85kzg{display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--color-bg-secondary);min-height:300px}.image-preview.svelte-1y85kzg{max-width:100%;max-height:80vh;-o-object-fit:contain;object-fit:contain;border-radius:.5rem;box-shadow:0 4px 6px #0000001a}.no-content.svelte-1y85kzg{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-tertiary);font-style:italic}.loading-state.svelte-1y85kzg{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:1rem;color:var(--color-text-secondary)}.spinner.svelte-1y85kzg{width:2rem;height:2rem;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:svelte-1y85kzg-spin .8s linear infinite}@keyframes svelte-1y85kzg-spin{to{transform:rotate(360deg)}}.diff-container.svelte-1y85kzg{font-size:.875rem;line-height:1.5;height:100%;overflow:auto}.commit-selector.svelte-1y85kzg{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}.commit-selector.svelte-1y85kzg label:where(.svelte-1y85kzg){font-size:.8125rem;font-weight:500;color:var(--color-text-secondary);white-space:nowrap}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg){flex:1;padding:.375rem .75rem;font-size:.8125rem;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;color:var(--color-text-primary);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.375rem;cursor:pointer;transition:all .15s ease}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg):hover{border-color:var(--color-primary)}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg):focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #6366f11a}.diff-content.svelte-1y85kzg{margin:0;padding:1rem;background:var(--color-bg-secondary);color:var(--color-text-primary);font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.diff-content.svelte-1y85kzg .diff-header{color:#a78bfa;font-weight:600}.diff-content.svelte-1y85kzg .diff-file{color:#8b5cf6;font-weight:600}.diff-content.svelte-1y85kzg .diff-hunk{color:#0891b2;background-color:#0891b21a;font-weight:600}.diff-content.svelte-1y85kzg .diff-add{background-color:#22c55e26;color:#22c55e}.diff-content.svelte-1y85kzg .diff-remove{background-color:#ef444426;color:#ef4444}.diff-content.svelte-1y85kzg .diff-context{color:var(--color-text-secondary)}.diff-content.svelte-1y85kzg .diff-index{color:var(--color-text-tertiary);font-size:.8125rem}.dark .diff-content.svelte-1y85kzg .diff-add{background-color:#22c55e33;color:#4ade80}.dark .diff-content.svelte-1y85kzg .diff-remove{background-color:#ef444433;color:#f87171}.dark .diff-content.svelte-1y85kzg .diff-hunk{background-color:#0891b226}.tab.svelte-1uha8ag{padding:.5rem 1.5rem;font-size:.875rem;font-weight:600;background-color:#475569;color:#94a3b8;border-top-left-radius:.375rem;border-top-right-radius:.375rem;transition:all .2s;cursor:pointer;border:none;outline:none}.dark .tab.svelte-1uha8ag{background-color:#475569}.tab.svelte-1uha8ag:hover:not(.active){background-color:#64748b;color:#cbd5e1}.tab.active.svelte-1uha8ag{background-color:#0891b2;color:#fff}.divider.svelte-1uha8ag{width:6px;background:#cbd5e1;cursor:col-resize;transition:background .2s;flex-shrink:0}.dark .divider.svelte-1uha8ag{background:#334155}.divider.svelte-1uha8ag:hover,.divider.dragging.svelte-1uha8ag{background:#0891b2}body.dragging{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:col-resize!important}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var te=Object.defineProperty;var F=s=>{throw TypeError(s)};var ie=(s,e,r)=>e in s?te(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r;var C=(s,e,r)=>ie(s,typeof e!="symbol"?e+"":e,r),K=(s,e,r)=>e.has(s)||F("Cannot "+r);var a=(s,e,r)=>(K(s,e,"read from private field"),r?r.call(s):e.get(s)),_=(s,e,r)=>e.has(s)?F("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,r),$=(s,e,r,t)=>(K(s,e,"write to private field"),t?t.call(s,r):e.set(s,r),r);import{D as j,F as ne,G as T,H as ae,A as q,I as z,x as D,y as fe,J as ue,K as ce,L as le,z as oe,M as de,N as he,O as pe,P as _e,C as ve,Q as G,R as be,S as Se,b as V,U as Pe,V as N,W as H,X as ge,Y as we,Z as W,_ as ye,g as y,$ as Oe,a0 as Ae,a1 as m,a2 as Ee,a3 as X,f as Re,a4 as xe,a5 as Ie,a6 as Te,w as L,a7 as De,a8 as me,a9 as Me,aa as Ne,ab as Le,ac as Be,ad as k,ae as Ue,af as Z,ag as J,ah as w}from"./DjhvlsAc.js";var d,h,o,v,O,A,x;class Ye{constructor(e,r=!0){C(this,"anchor");_(this,d,new Map);_(this,h,new Map);_(this,o,new Map);_(this,v,new Set);_(this,O,!0);_(this,A,()=>{var e=j;if(a(this,d).has(e)){var r=a(this,d).get(e),t=a(this,h).get(r);if(t)ne(t),a(this,v).delete(r);else{var i=a(this,o).get(r);i&&(a(this,h).set(r,i.effect),a(this,o).delete(r),i.fragment.lastChild.remove(),this.anchor.before(i.fragment),t=i.effect)}for(const[n,u]of a(this,d)){if(a(this,d).delete(n),n===e)break;const f=a(this,o).get(u);f&&(T(f.effect),a(this,o).delete(u))}for(const[n,u]of a(this,h)){if(n===r||a(this,v).has(n))continue;const f=()=>{if(Array.from(a(this,d).values()).includes(n)){var p=document.createDocumentFragment();ue(u,p),p.append(q()),a(this,o).set(n,{effect:u,fragment:p})}else T(u);a(this,v).delete(n),a(this,h).delete(n)};a(this,O)||!t?(a(this,v).add(n),ae(u,f,!1)):f()}}});_(this,x,e=>{a(this,d).delete(e);const r=Array.from(a(this,d).values());for(const[t,i]of a(this,o))r.includes(t)||(T(i.effect),a(this,o).delete(t))});this.anchor=e,$(this,O,r)}ensure(e,r){var t=j,i=ce();if(r&&!a(this,h).has(e)&&!a(this,o).has(e))if(i){var n=document.createDocumentFragment(),u=q();n.append(u),a(this,o).set(e,{effect:z(()=>r(u)),fragment:n})}else a(this,h).set(e,z(()=>r(this.anchor)));if(a(this,d).set(t,e),i){for(const[f,c]of a(this,h))f===e?t.skipped_effects.delete(c):t.skipped_effects.add(c);for(const[f,c]of a(this,o))f===e?t.skipped_effects.delete(c.effect):t.skipped_effects.add(c.effect);t.oncommit(a(this,A)),t.ondiscard(a(this,x))}else D&&(this.anchor=fe),a(this,A).call(this)}}d=new WeakMap,h=new WeakMap,o=new WeakMap,v=new WeakMap,O=new WeakMap,A=new WeakMap,x=new WeakMap;function ze(s,e,r=!1){D&&oe();var t=new Ye(s),i=r?de:0;function n(u,f){if(D){const p=he(s)===pe;if(u===p){var c=_e();ve(c),t.anchor=c,G(!1),t.ensure(u,f),G(!0);return}}t.ensure(u,f)}le(()=>{var u=!1;e((f,c=!0)=>{u=!0,n(c,f)}),u||n(!1,null)},i)}function Q(s,e){return s===e||(s==null?void 0:s[N])===e}function Ge(s={},e,r,t){return be(()=>{var i,n;return Se(()=>{i=n,n=[],V(()=>{s!==r(...n)&&(e(s,...n),i&&Q(r(...i),s)&&e(null,...i))})}),()=>{Pe(()=>{n&&Q(r(...n),s)&&e(null,...n)})}}),s}let R=!1,M=Symbol();function He(s,e,r){const t=r[e]??(r[e]={store:null,source:ge(void 0),unsubscribe:H});if(t.store!==s&&!(M in r))if(t.unsubscribe(),t.store=s??null,s==null)t.source.v=void 0,t.unsubscribe=H;else{var i=!0;t.unsubscribe=we(s,n=>{i?t.source.v=n:W(t.source,n)}),i=!1}return s&&M in r?ye(s):y(t.source)}function Ze(s,e){return s.set(e),e}function Je(){const s={};function e(){Oe(()=>{for(var r in s)s[r].unsubscribe();Ae(s,M,{enumerable:!1,value:!0})})}return[s,e]}function Fe(s){var e=R;try{return R=!1,[s(),R]}finally{R=e}}const Ce={get(s,e){if(!s.exclude.includes(e))return y(s.version),e in s.special?s.special[e]():s.props[e]},set(s,e,r){if(!(e in s.special)){var t=L;try{J(s.parent_effect),s.special[e]=$e({get[e](){return s.props[e]}},e,X)}finally{J(t)}}return s.special[e](r),Z(s.version),!0},getOwnPropertyDescriptor(s,e){if(!s.exclude.includes(e)&&e in s.props)return{enumerable:!0,configurable:!0,value:s.props[e]}},deleteProperty(s,e){return s.exclude.includes(e)||(s.exclude.push(e),Z(s.version)),!0},has(s,e){return s.exclude.includes(e)?!1:e in s.props},ownKeys(s){return Reflect.ownKeys(s.props).filter(e=>!s.exclude.includes(e))}};function Qe(s,e){return new Proxy({props:s,exclude:e,special:{},version:Ue(0),parent_effect:L},Ce)}const Ke={get(s,e){let r=s.props.length;for(;r--;){let t=s.props[r];if(w(t)&&(t=t()),typeof t=="object"&&t!==null&&e in t)return t[e]}},set(s,e,r){let t=s.props.length;for(;t--;){let i=s.props[t];w(i)&&(i=i());const n=m(i,e);if(n&&n.set)return n.set(r),!0}return!1},getOwnPropertyDescriptor(s,e){let r=s.props.length;for(;r--;){let t=s.props[r];if(w(t)&&(t=t()),typeof t=="object"&&t!==null&&e in t){const i=m(t,e);return i&&!i.configurable&&(i.configurable=!0),i}}},has(s,e){if(e===N||e===k)return!1;for(let r of s.props)if(w(r)&&(r=r()),r!=null&&e in r)return!0;return!1},ownKeys(s){const e=[];for(let r of s.props)if(w(r)&&(r=r()),!!r){for(const t in r)e.includes(t)||e.push(t);for(const t of Object.getOwnPropertySymbols(r))e.includes(t)||e.push(t)}return e}};function Ve(...s){return new Proxy({props:s},Ke)}function $e(s,e,r,t){var U;var i=!Me||(r&Ne)!==0,n=(r&me)!==0,u=(r&Be)!==0,f=t,c=!0,p=()=>(c&&(c=!1,f=u?V(t):t),f),S;if(n){var ee=N in s||k in s;S=((U=m(s,e))==null?void 0:U.set)??(ee&&e in s?l=>s[e]=l:void 0)}var P,B=!1;n?[P,B]=Fe(()=>s[e]):P=s[e],P===void 0&&t!==void 0&&(P=p(),S&&(i&&Ee(),S(P)));var b;if(i?b=()=>{var l=s[e];return l===void 0?p():(c=!0,l)}:b=()=>{var l=s[e];return l!==void 0&&(f=void 0),l===void 0?f:l},i&&(r&X)===0)return b;if(S){var se=s.$$legacy;return(function(l,E){return arguments.length>0?((!i||!E||se||B)&&S(E?b():l),l):b()})}var I=!1,g=((r&Le)!==0?Re:xe)(()=>(I=!1,b()));n&&y(g);var re=L;return(function(l,E){if(arguments.length>0){const Y=E?y(g):i&&n?Ie(l):l;return W(g,Y),I=!0,f!==void 0&&(f=Y),l}return Te&&I||(re.f&De)!==0?g.v:y(g)})}export{Ye as B,Je as a,Ge as b,Ze as c,Ve as d,ze as i,Qe as l,$e as p,He as s};
|