@daniel.stefan/metalink 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -0
- package/package.json +96 -0
- package/packages/cli/dist/bin/cli.d.ts +3 -0
- package/packages/cli/dist/bin/cli.d.ts.map +1 -0
- package/packages/cli/dist/bin/cli.js +4 -0
- package/packages/cli/dist/bin/cli.js.map +1 -0
- package/packages/cli/dist/commands/config/init.d.ts +9 -0
- package/packages/cli/dist/commands/config/init.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/init.js +38 -0
- package/packages/cli/dist/commands/config/init.js.map +1 -0
- package/packages/cli/dist/commands/config/validate.d.ts +9 -0
- package/packages/cli/dist/commands/config/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/config/validate.js +34 -0
- package/packages/cli/dist/commands/config/validate.js.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts +15 -0
- package/packages/cli/dist/commands/daemon/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/restart.js +184 -0
- package/packages/cli/dist/commands/daemon/restart.js.map +1 -0
- package/packages/cli/dist/commands/daemon/start.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/start.js +85 -0
- package/packages/cli/dist/commands/daemon/start.js.map +1 -0
- package/packages/cli/dist/commands/daemon/status.d.ts +7 -0
- package/packages/cli/dist/commands/daemon/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/status.js +69 -0
- package/packages/cli/dist/commands/daemon/status.js.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts +8 -0
- package/packages/cli/dist/commands/daemon/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/daemon/stop.js +77 -0
- package/packages/cli/dist/commands/daemon/stop.js.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts +10 -0
- package/packages/cli/dist/commands/import/mcpm.d.ts.map +1 -0
- package/packages/cli/dist/commands/import/mcpm.js +58 -0
- package/packages/cli/dist/commands/import/mcpm.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-risky-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-risky.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-risky.js +52 -0
- package/packages/cli/dist/commands/safety/add-risky.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts +16 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js +72 -0
- package/packages/cli/dist/commands/safety/add-safe-pattern.js.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts +12 -0
- package/packages/cli/dist/commands/safety/add-safe.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/add-safe.js +52 -0
- package/packages/cli/dist/commands/safety/add-safe.js.map +1 -0
- package/packages/cli/dist/commands/safety/check.d.ts +9 -0
- package/packages/cli/dist/commands/safety/check.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/check.js +36 -0
- package/packages/cli/dist/commands/safety/check.js.map +1 -0
- package/packages/cli/dist/commands/safety/export.d.ts +10 -0
- package/packages/cli/dist/commands/safety/export.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/export.js +48 -0
- package/packages/cli/dist/commands/safety/export.js.map +1 -0
- package/packages/cli/dist/commands/safety/import.d.ts +12 -0
- package/packages/cli/dist/commands/safety/import.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/import.js +78 -0
- package/packages/cli/dist/commands/safety/import.js.map +1 -0
- package/packages/cli/dist/commands/safety/index.d.ts +8 -0
- package/packages/cli/dist/commands/safety/index.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/index.js +46 -0
- package/packages/cli/dist/commands/safety/index.js.map +1 -0
- package/packages/cli/dist/commands/safety/list.d.ts +6 -0
- package/packages/cli/dist/commands/safety/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/list.js +77 -0
- package/packages/cli/dist/commands/safety/list.js.map +1 -0
- package/packages/cli/dist/commands/safety/remove.d.ts +9 -0
- package/packages/cli/dist/commands/safety/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/remove.js +46 -0
- package/packages/cli/dist/commands/safety/remove.js.map +1 -0
- package/packages/cli/dist/commands/safety/reset.d.ts +9 -0
- package/packages/cli/dist/commands/safety/reset.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/reset.js +46 -0
- package/packages/cli/dist/commands/safety/reset.js.map +1 -0
- package/packages/cli/dist/commands/safety/validate.d.ts +9 -0
- package/packages/cli/dist/commands/safety/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/safety/validate.js +51 -0
- package/packages/cli/dist/commands/safety/validate.js.map +1 -0
- package/packages/cli/dist/commands/secret/get.d.ts +9 -0
- package/packages/cli/dist/commands/secret/get.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/get.js +26 -0
- package/packages/cli/dist/commands/secret/get.js.map +1 -0
- package/packages/cli/dist/commands/secret/set.d.ts +10 -0
- package/packages/cli/dist/commands/secret/set.d.ts.map +1 -0
- package/packages/cli/dist/commands/secret/set.js +22 -0
- package/packages/cli/dist/commands/secret/set.js.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts +2 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js +234 -0
- package/packages/cli/dist/commands/server/__tests__/server-management-e2e.test.js.map +1 -0
- package/packages/cli/dist/commands/server/add.d.ts +14 -0
- package/packages/cli/dist/commands/server/add.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/add.js +86 -0
- package/packages/cli/dist/commands/server/add.js.map +1 -0
- package/packages/cli/dist/commands/server/available.d.ts +10 -0
- package/packages/cli/dist/commands/server/available.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/available.js +62 -0
- package/packages/cli/dist/commands/server/available.js.map +1 -0
- package/packages/cli/dist/commands/server/debug.d.ts +18 -0
- package/packages/cli/dist/commands/server/debug.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/debug.js +165 -0
- package/packages/cli/dist/commands/server/debug.js.map +1 -0
- package/packages/cli/dist/commands/server/info.d.ts +13 -0
- package/packages/cli/dist/commands/server/info.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/info.js +62 -0
- package/packages/cli/dist/commands/server/info.js.map +1 -0
- package/packages/cli/dist/commands/server/list.d.ts +10 -0
- package/packages/cli/dist/commands/server/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/list.js +105 -0
- package/packages/cli/dist/commands/server/list.js.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts +13 -0
- package/packages/cli/dist/commands/server/refresh-tools.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/refresh-tools.js +46 -0
- package/packages/cli/dist/commands/server/refresh-tools.js.map +1 -0
- package/packages/cli/dist/commands/server/remove.d.ts +12 -0
- package/packages/cli/dist/commands/server/remove.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/remove.js +39 -0
- package/packages/cli/dist/commands/server/remove.js.map +1 -0
- package/packages/cli/dist/commands/server/restart.d.ts +9 -0
- package/packages/cli/dist/commands/server/restart.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/restart.js +30 -0
- package/packages/cli/dist/commands/server/restart.js.map +1 -0
- package/packages/cli/dist/commands/server/start.d.ts +9 -0
- package/packages/cli/dist/commands/server/start.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/start.js +37 -0
- package/packages/cli/dist/commands/server/start.js.map +1 -0
- package/packages/cli/dist/commands/server/status.d.ts +9 -0
- package/packages/cli/dist/commands/server/status.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/status.js +30 -0
- package/packages/cli/dist/commands/server/status.js.map +1 -0
- package/packages/cli/dist/commands/server/stop.d.ts +9 -0
- package/packages/cli/dist/commands/server/stop.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/stop.js +31 -0
- package/packages/cli/dist/commands/server/stop.js.map +1 -0
- package/packages/cli/dist/commands/server/validate.d.ts +15 -0
- package/packages/cli/dist/commands/server/validate.d.ts.map +1 -0
- package/packages/cli/dist/commands/server/validate.js +87 -0
- package/packages/cli/dist/commands/server/validate.js.map +1 -0
- package/packages/cli/dist/commands/stdio.d.ts +36 -0
- package/packages/cli/dist/commands/stdio.d.ts.map +1 -0
- package/packages/cli/dist/commands/stdio.js +85 -0
- package/packages/cli/dist/commands/stdio.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute-confirm.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js +98 -0
- package/packages/cli/dist/commands/tool/execute-confirm.js.map +1 -0
- package/packages/cli/dist/commands/tool/execute.d.ts +12 -0
- package/packages/cli/dist/commands/tool/execute.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/execute.js +55 -0
- package/packages/cli/dist/commands/tool/execute.js.map +1 -0
- package/packages/cli/dist/commands/tool/list.d.ts +13 -0
- package/packages/cli/dist/commands/tool/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/list.js +91 -0
- package/packages/cli/dist/commands/tool/list.js.map +1 -0
- package/packages/cli/dist/commands/tool/search.d.ts +12 -0
- package/packages/cli/dist/commands/tool/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/tool/search.js +87 -0
- package/packages/cli/dist/commands/tool/search.js.map +1 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.d.ts.map +1 -0
- package/packages/cli/dist/index.js +9 -0
- package/packages/cli/dist/index.js.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts +18 -0
- package/packages/cli/dist/utils/daemon-checker.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-checker.js +69 -0
- package/packages/cli/dist/utils/daemon-checker.js.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts +7 -0
- package/packages/cli/dist/utils/daemon-endpoint.d.ts.map +1 -0
- package/packages/cli/dist/utils/daemon-endpoint.js +13 -0
- package/packages/cli/dist/utils/daemon-endpoint.js.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts +43 -0
- package/packages/cli/dist/utils/get-configured-port.d.ts.map +1 -0
- package/packages/cli/dist/utils/get-configured-port.js +141 -0
- package/packages/cli/dist/utils/get-configured-port.js.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts +48 -0
- package/packages/cli/dist/utils/stdio-bridge.d.ts.map +1 -0
- package/packages/cli/dist/utils/stdio-bridge.js +181 -0
- package/packages/cli/dist/utils/stdio-bridge.js.map +1 -0
- package/packages/cli/package.json +48 -0
- package/packages/core/dist/config/defaults.d.ts +36 -0
- package/packages/core/dist/config/defaults.d.ts.map +1 -0
- package/packages/core/dist/config/defaults.js +324 -0
- package/packages/core/dist/config/defaults.js.map +1 -0
- package/packages/core/dist/config/index.d.ts +9 -0
- package/packages/core/dist/config/index.d.ts.map +1 -0
- package/packages/core/dist/config/index.js +14 -0
- package/packages/core/dist/config/index.js.map +1 -0
- package/packages/core/dist/config/loader.d.ts +269 -0
- package/packages/core/dist/config/loader.d.ts.map +1 -0
- package/packages/core/dist/config/loader.js +777 -0
- package/packages/core/dist/config/loader.js.map +1 -0
- package/packages/core/dist/config/registry.d.ts +212 -0
- package/packages/core/dist/config/registry.d.ts.map +1 -0
- package/packages/core/dist/config/registry.js +754 -0
- package/packages/core/dist/config/registry.js.map +1 -0
- package/packages/core/dist/config/schema.d.ts +4352 -0
- package/packages/core/dist/config/schema.d.ts.map +1 -0
- package/packages/core/dist/config/schema.js +267 -0
- package/packages/core/dist/config/schema.js.map +1 -0
- package/packages/core/dist/daemon.d.ts +7 -0
- package/packages/core/dist/daemon.d.ts.map +1 -0
- package/packages/core/dist/daemon.js +116 -0
- package/packages/core/dist/daemon.js.map +1 -0
- package/packages/core/dist/http-client-retry.d.ts +67 -0
- package/packages/core/dist/http-client-retry.d.ts.map +1 -0
- package/packages/core/dist/http-client-retry.js +133 -0
- package/packages/core/dist/http-client-retry.js.map +1 -0
- package/packages/core/dist/http-client-updated.d.ts +147 -0
- package/packages/core/dist/http-client-updated.d.ts.map +1 -0
- package/packages/core/dist/http-client-updated.js +452 -0
- package/packages/core/dist/http-client-updated.js.map +1 -0
- package/packages/core/dist/http-client.d.ts +207 -0
- package/packages/core/dist/http-client.d.ts.map +1 -0
- package/packages/core/dist/http-client.js +704 -0
- package/packages/core/dist/http-client.js.map +1 -0
- package/packages/core/dist/index.d.ts +13 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +23 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/logging/index.d.ts +46 -0
- package/packages/core/dist/logging/index.d.ts.map +1 -0
- package/packages/core/dist/logging/index.js +74 -0
- package/packages/core/dist/logging/index.js.map +1 -0
- package/packages/core/dist/metrics/index.d.ts +339 -0
- package/packages/core/dist/metrics/index.d.ts.map +1 -0
- package/packages/core/dist/metrics/index.js +792 -0
- package/packages/core/dist/metrics/index.js.map +1 -0
- package/packages/core/dist/plugins/index.d.ts +49 -0
- package/packages/core/dist/plugins/index.d.ts.map +1 -0
- package/packages/core/dist/plugins/index.js +82 -0
- package/packages/core/dist/plugins/index.js.map +1 -0
- package/packages/core/dist/secrets/index.d.ts +6 -0
- package/packages/core/dist/secrets/index.d.ts.map +1 -0
- package/packages/core/dist/secrets/index.js +5 -0
- package/packages/core/dist/secrets/index.js.map +1 -0
- package/packages/core/dist/secrets/keyring.d.ts +54 -0
- package/packages/core/dist/secrets/keyring.d.ts.map +1 -0
- package/packages/core/dist/secrets/keyring.js +141 -0
- package/packages/core/dist/secrets/keyring.js.map +1 -0
- package/packages/core/dist/server/batch-executor.d.ts +83 -0
- package/packages/core/dist/server/batch-executor.d.ts.map +1 -0
- package/packages/core/dist/server/batch-executor.js +291 -0
- package/packages/core/dist/server/batch-executor.js.map +1 -0
- package/packages/core/dist/server/circuit-breaker.d.ts +215 -0
- package/packages/core/dist/server/circuit-breaker.d.ts.map +1 -0
- package/packages/core/dist/server/circuit-breaker.js +330 -0
- package/packages/core/dist/server/circuit-breaker.js.map +1 -0
- package/packages/core/dist/server/client-detection.d.ts +40 -0
- package/packages/core/dist/server/client-detection.d.ts.map +1 -0
- package/packages/core/dist/server/client-detection.js +242 -0
- package/packages/core/dist/server/client-detection.js.map +1 -0
- package/packages/core/dist/server/client-profiles.d.ts +102 -0
- package/packages/core/dist/server/client-profiles.d.ts.map +1 -0
- package/packages/core/dist/server/client-profiles.js +254 -0
- package/packages/core/dist/server/client-profiles.js.map +1 -0
- package/packages/core/dist/server/http.d.ts +386 -0
- package/packages/core/dist/server/http.d.ts.map +1 -0
- package/packages/core/dist/server/http.js +4253 -0
- package/packages/core/dist/server/http.js.map +1 -0
- package/packages/core/dist/server/index.d.ts +7 -0
- package/packages/core/dist/server/index.d.ts.map +1 -0
- package/packages/core/dist/server/index.js +6 -0
- package/packages/core/dist/server/index.js.map +1 -0
- package/packages/core/dist/server/manager.d.ts +458 -0
- package/packages/core/dist/server/manager.d.ts.map +1 -0
- package/packages/core/dist/server/manager.js +3255 -0
- package/packages/core/dist/server/manager.js.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts +69 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js +214 -0
- package/packages/core/dist/server/managers/HttpConnectionManager.js.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts +128 -0
- package/packages/core/dist/server/managers/ProcessManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/ProcessManager.js +443 -0
- package/packages/core/dist/server/managers/ProcessManager.js.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts +152 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.d.ts.map +1 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js +426 -0
- package/packages/core/dist/server/managers/SchemaCacheManager.js.map +1 -0
- package/packages/core/dist/server/managers/index.d.ts +9 -0
- package/packages/core/dist/server/managers/index.d.ts.map +1 -0
- package/packages/core/dist/server/managers/index.js +9 -0
- package/packages/core/dist/server/managers/index.js.map +1 -0
- package/packages/core/dist/server/metrics.d.ts +134 -0
- package/packages/core/dist/server/metrics.d.ts.map +1 -0
- package/packages/core/dist/server/metrics.js +273 -0
- package/packages/core/dist/server/metrics.js.map +1 -0
- package/packages/core/dist/server/prompts.d.ts +58 -0
- package/packages/core/dist/server/prompts.d.ts.map +1 -0
- package/packages/core/dist/server/prompts.js +405 -0
- package/packages/core/dist/server/prompts.js.map +1 -0
- package/packages/core/dist/server/protocol-versions.d.ts +49 -0
- package/packages/core/dist/server/protocol-versions.d.ts.map +1 -0
- package/packages/core/dist/server/protocol-versions.js +173 -0
- package/packages/core/dist/server/protocol-versions.js.map +1 -0
- package/packages/core/dist/server/resources.d.ts +64 -0
- package/packages/core/dist/server/resources.d.ts.map +1 -0
- package/packages/core/dist/server/resources.js +243 -0
- package/packages/core/dist/server/resources.js.map +1 -0
- package/packages/core/dist/server/schema-store.d.ts +84 -0
- package/packages/core/dist/server/schema-store.d.ts.map +1 -0
- package/packages/core/dist/server/schema-store.js +234 -0
- package/packages/core/dist/server/schema-store.js.map +1 -0
- package/packages/core/dist/server/schema-validator.d.ts +51 -0
- package/packages/core/dist/server/schema-validator.d.ts.map +1 -0
- package/packages/core/dist/server/schema-validator.js +208 -0
- package/packages/core/dist/server/schema-validator.js.map +1 -0
- package/packages/core/dist/server/token-calculator.d.ts +44 -0
- package/packages/core/dist/server/token-calculator.d.ts.map +1 -0
- package/packages/core/dist/server/token-calculator.js +53 -0
- package/packages/core/dist/server/token-calculator.js.map +1 -0
- package/packages/core/dist/server/types.d.ts +45 -0
- package/packages/core/dist/server/types.d.ts.map +1 -0
- package/packages/core/dist/server/types.js +5 -0
- package/packages/core/dist/server/types.js.map +1 -0
- package/packages/core/dist/utils/file-lock.d.ts +73 -0
- package/packages/core/dist/utils/file-lock.d.ts.map +1 -0
- package/packages/core/dist/utils/file-lock.js +235 -0
- package/packages/core/dist/utils/file-lock.js.map +1 -0
- package/packages/core/package.json +36 -0
- package/packages/dashboard/dist/assets/index-B7hvkCMu.css +1 -0
- package/packages/dashboard/dist/assets/index-yZhLPpzr.js +1 -0
- package/packages/dashboard/dist/index.html +14 -0
- package/packages/dashboard/package.json +24 -0
- package/packages/shared/dist/version.d.ts +2 -0
- package/packages/shared/dist/version.d.ts.map +1 -0
- package/packages/shared/dist/version.js +2 -0
- package/packages/shared/dist/version.js.map +1 -0
- package/packages/shared/package.json +18 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Advisory file locking utility for atomic file operations.
|
|
5
|
+
* Ensures that concurrent writes to the same file don't cause corruption.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const lock = new FileLock('path/to/file.lock');
|
|
9
|
+
* await lock.acquire(5000); // 5 second timeout
|
|
10
|
+
* try {
|
|
11
|
+
* // Perform atomic write operations
|
|
12
|
+
* await fs.writeFile('target.json', data);
|
|
13
|
+
* } finally {
|
|
14
|
+
* await lock.release();
|
|
15
|
+
* }
|
|
16
|
+
*/
|
|
17
|
+
export class FileLock {
|
|
18
|
+
constructor(filePath) {
|
|
19
|
+
this.lockFileHandle = null;
|
|
20
|
+
this.lockTimeout = null;
|
|
21
|
+
this.isLocked = false;
|
|
22
|
+
// Lock file is stored next to the target file with .lock extension
|
|
23
|
+
this.lockPath = filePath.endsWith('.lock') ? filePath : `${filePath}.lock`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Acquire lock with optional timeout.
|
|
27
|
+
* Throws if lock cannot be acquired within timeout period.
|
|
28
|
+
*
|
|
29
|
+
* @param timeoutMs - Maximum time to wait for lock (default: 5000ms)
|
|
30
|
+
* @throws Error if lock acquisition times out
|
|
31
|
+
*/
|
|
32
|
+
async acquire(timeoutMs = 5000) {
|
|
33
|
+
if (this.isLocked) {
|
|
34
|
+
throw new Error('Lock already held');
|
|
35
|
+
}
|
|
36
|
+
const lockDir = path.dirname(this.lockPath);
|
|
37
|
+
// Ensure lock directory exists
|
|
38
|
+
try {
|
|
39
|
+
await fs.mkdir(lockDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error.code !== 'EEXIST') {
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
const maxWaitTime = timeoutMs;
|
|
48
|
+
// Try to acquire lock with exponential backoff
|
|
49
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
50
|
+
try {
|
|
51
|
+
// Try to open lock file exclusively (fails if exists)
|
|
52
|
+
this.lockFileHandle = await fs.open(this.lockPath, 'wx');
|
|
53
|
+
// Write PID and timestamp for debugging
|
|
54
|
+
await this.lockFileHandle.write(`${process.pid}:${Date.now()}`, 0, 'utf8');
|
|
55
|
+
this.isLocked = true;
|
|
56
|
+
// Register cleanup on process exit
|
|
57
|
+
this.registerCleanup();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error.code === 'EEXIST') {
|
|
62
|
+
// Lock file exists, check if it's stale
|
|
63
|
+
try {
|
|
64
|
+
const stats = await fs.stat(this.lockPath);
|
|
65
|
+
const age = Date.now() - stats.mtime.getTime();
|
|
66
|
+
// If lock is older than 30 seconds, consider it stale and remove it
|
|
67
|
+
if (age > 30000) {
|
|
68
|
+
try {
|
|
69
|
+
await fs.unlink(this.lockPath);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Ignore if already deleted by another process
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Ignore stat errors, try again on next iteration
|
|
78
|
+
}
|
|
79
|
+
// Wait before retrying (exponential backoff: 10ms → 100ms)
|
|
80
|
+
const waitTime = Math.min(100, 10 * Math.pow(2, (Date.now() - startTime) / 500));
|
|
81
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`Failed to acquire lock on ${this.lockPath} within ${timeoutMs}ms`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Release the lock.
|
|
91
|
+
* Safe to call even if lock is not held.
|
|
92
|
+
*/
|
|
93
|
+
async release() {
|
|
94
|
+
if (!this.isLocked) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
if (this.lockFileHandle) {
|
|
99
|
+
await this.lockFileHandle.close();
|
|
100
|
+
this.lockFileHandle = null;
|
|
101
|
+
}
|
|
102
|
+
// Remove lock file
|
|
103
|
+
try {
|
|
104
|
+
await fs.unlink(this.lockPath);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error.code !== 'ENOENT') {
|
|
108
|
+
// Log but don't throw - lock cleanup is best-effort
|
|
109
|
+
console.warn(`Failed to remove lock file ${this.lockPath}:`, error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
this.isLocked = false;
|
|
113
|
+
// Clear timeout if set
|
|
114
|
+
if (this.lockTimeout) {
|
|
115
|
+
clearTimeout(this.lockTimeout);
|
|
116
|
+
this.lockTimeout = null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.warn('Error releasing lock:', error);
|
|
121
|
+
this.isLocked = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if lock is currently held by this instance.
|
|
126
|
+
*/
|
|
127
|
+
isLockHeld() {
|
|
128
|
+
return this.isLocked;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get lock file path.
|
|
132
|
+
*/
|
|
133
|
+
getLockPath() {
|
|
134
|
+
return this.lockPath;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Register automatic cleanup on process exit.
|
|
138
|
+
* Ensures lock is released even if exception occurs.
|
|
139
|
+
*/
|
|
140
|
+
registerCleanup() {
|
|
141
|
+
// Only register once per process
|
|
142
|
+
if (this.lockTimeout) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const cleanup = async () => {
|
|
146
|
+
try {
|
|
147
|
+
await this.release();
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.error('Error during lock cleanup:', error);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
// Handle various exit signals
|
|
154
|
+
['SIGINT', 'SIGTERM', 'SIGHUP'].forEach(signal => {
|
|
155
|
+
process.on(signal, cleanup);
|
|
156
|
+
});
|
|
157
|
+
// Also cleanup on uncaught exceptions (best effort)
|
|
158
|
+
process.on('uncaughtException', async (error) => {
|
|
159
|
+
console.error('Uncaught exception:', error);
|
|
160
|
+
await cleanup();
|
|
161
|
+
process.exit(1);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Helper function for atomic file operations with automatic lock management.
|
|
167
|
+
*
|
|
168
|
+
* Usage:
|
|
169
|
+
* const result = await withFileLock('path/to/file.json', async () => {
|
|
170
|
+
* // Perform operations with lock held
|
|
171
|
+
* return await someAsyncOperation();
|
|
172
|
+
* });
|
|
173
|
+
*/
|
|
174
|
+
export async function withFileLock(filePath, callback, timeoutMs = 5000) {
|
|
175
|
+
const lock = new FileLock(filePath);
|
|
176
|
+
try {
|
|
177
|
+
await lock.acquire(timeoutMs);
|
|
178
|
+
return await callback();
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await lock.release();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Helper function for atomic file write with automatic lock management.
|
|
186
|
+
*
|
|
187
|
+
* Usage:
|
|
188
|
+
* await atomicWrite('path/to/file.json', JSON.stringify(data, null, 2));
|
|
189
|
+
*/
|
|
190
|
+
export async function atomicWrite(filePath, content, options = {}) {
|
|
191
|
+
const { timeout = 5000, createBackup = true } = options;
|
|
192
|
+
await withFileLock(filePath, async () => {
|
|
193
|
+
const dir = path.dirname(filePath);
|
|
194
|
+
const filename = path.basename(filePath);
|
|
195
|
+
const tempPath = path.join(dir, `.${filename}.tmp`);
|
|
196
|
+
// Create backup before writing
|
|
197
|
+
if (createBackup) {
|
|
198
|
+
try {
|
|
199
|
+
const backupPath = `${filePath}.backup`;
|
|
200
|
+
await fs.copyFile(filePath, backupPath);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (error.code !== 'ENOENT') {
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
// Original file doesn't exist yet, skip backup
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Write to temp file first (atomic write pattern)
|
|
210
|
+
await fs.writeFile(tempPath, content, 'utf8');
|
|
211
|
+
// Rename temp file to target (atomic operation on most systems)
|
|
212
|
+
await fs.rename(tempPath, filePath);
|
|
213
|
+
}, timeout);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Restore file from backup.
|
|
217
|
+
* Useful for rollback on write failures.
|
|
218
|
+
*/
|
|
219
|
+
export async function restoreFromBackup(filePath) {
|
|
220
|
+
const backupPath = `${filePath}.backup`;
|
|
221
|
+
try {
|
|
222
|
+
const stat = await fs.stat(backupPath);
|
|
223
|
+
if (!stat.isFile()) {
|
|
224
|
+
throw new Error(`Backup is not a file: ${backupPath}`);
|
|
225
|
+
}
|
|
226
|
+
await fs.copyFile(backupPath, filePath);
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (error.code === 'ENOENT') {
|
|
230
|
+
throw new Error(`Backup file not found: ${backupPath}`);
|
|
231
|
+
}
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@metalink/core",
|
|
3
|
+
"version": "1.3.1",
|
|
4
|
+
"description": "MetaLink Core Server",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "node --loader ts-node/esm src/daemon.ts",
|
|
13
|
+
"start": "node dist/daemon.js",
|
|
14
|
+
"test": "vitest"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"dotenv": "^17.2.3",
|
|
18
|
+
"express": "^4.18.2",
|
|
19
|
+
"express-rate-limit": "^6.7.0",
|
|
20
|
+
"js-yaml": "^4.1.0",
|
|
21
|
+
"keytar": "^7.9.0",
|
|
22
|
+
"lru-cache": "^10.0.0",
|
|
23
|
+
"undici": "^6.0.0",
|
|
24
|
+
"uuid": "^9.0.0",
|
|
25
|
+
"xml2js": "^0.6.2",
|
|
26
|
+
"zod": "^3.22.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/express": "^4.17.0",
|
|
30
|
+
"@types/js-yaml": "^4.0.0",
|
|
31
|
+
"@types/node": "^20.0.0",
|
|
32
|
+
"ts-node": "^10.9.0",
|
|
33
|
+
"typescript": "^5.0.0",
|
|
34
|
+
"vitest": "^1.0.0"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
body{margin:0;padding:0;background-color:#0f172a;color:#e2e8f0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}main.svelte-1jhjtdw.svelte-1jhjtdw{max-width:1200px;margin:0 auto;padding:2rem}header.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:2rem}h1.svelte-1jhjtdw.svelte-1jhjtdw{margin:0;font-size:2.5rem;font-weight:700;color:#ff3e00}.version.svelte-1jhjtdw.svelte-1jhjtdw{margin:.5rem 0 0;color:#94a3b8;font-size:.9rem}.dashboard-top-sections.svelte-1jhjtdw.svelte-1jhjtdw{display:grid;grid-template-columns:minmax(300px,1fr) minmax(500px,2fr);gap:1.5rem;margin-bottom:2rem;align-items:start}@media (max-width: 1024px){.dashboard-top-sections.svelte-1jhjtdw.svelte-1jhjtdw{grid-template-columns:1fr}}.error.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#7f1d1d;border:1px solid #dc2626;border-radius:.5rem;padding:1rem;margin-bottom:1.5rem;display:flex;justify-content:space-between;align-items:center}.error.svelte-1jhjtdw button.svelte-1jhjtdw{background:none;border:1px solid #dc2626;color:#fecaca;padding:.25rem .75rem;border-radius:.25rem;cursor:pointer;font-size:.85rem}.error.svelte-1jhjtdw button.svelte-1jhjtdw:hover{background-color:#dc2626}.health.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:2rem;position:relative}.health-card.svelte-1jhjtdw.svelte-1jhjtdw{background:linear-gradient(135deg,#1e293b,#0f172a);border:1px solid #334155;border-radius:.75rem;padding:1.5rem;position:relative}.health-indicator.svelte-1jhjtdw.svelte-1jhjtdw{position:absolute;top:1.5rem;right:1.5rem;width:1.5rem;height:1.5rem;border-radius:50%;background-color:#10b981;animation:svelte-1jhjtdw-pulse 2s infinite}@keyframes svelte-1jhjtdw-pulse{0%,to{opacity:1}50%{opacity:.7}}.health[data-health-status=degraded].svelte-1jhjtdw .health-indicator.svelte-1jhjtdw{background-color:#f59e0b}.health[data-health-status=unhealthy].svelte-1jhjtdw .health-indicator.svelte-1jhjtdw{background-color:#ef4444}.health-card.svelte-1jhjtdw h3.svelte-1jhjtdw{margin:0 0 1rem;font-size:1.1rem}.health-card.svelte-1jhjtdw p.svelte-1jhjtdw{margin:.5rem 0;font-size:.95rem}.timestamp.svelte-1jhjtdw.svelte-1jhjtdw{color:#64748b;font-size:.85rem!important;margin-top:.75rem}.badge.svelte-1jhjtdw.svelte-1jhjtdw{display:inline-block;padding:.25rem .75rem;border-radius:.25rem;font-size:.85rem;font-weight:600;background-color:#1e40af;color:#dbeafe}.badge.healthy.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#064e3b;color:#d1fae5}.servers.svelte-1jhjtdw h2.svelte-1jhjtdw,.available-servers.svelte-1jhjtdw h2.svelte-1jhjtdw{margin:0 0 1.5rem;font-size:1.5rem}.available-servers.svelte-1jhjtdw.svelte-1jhjtdw{margin-top:3rem}.available-card.svelte-1jhjtdw.svelte-1jhjtdw{background:linear-gradient(135deg,#1a2332,#0f172a);border:1px solid #2d3748;border-radius:.5rem;padding:1rem;transition:all .2s;display:flex;flex-direction:column}.available-card.svelte-1jhjtdw.svelte-1jhjtdw:hover{border-color:#475569;box-shadow:0 2px 4px #0003}.card-header.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:.75rem}.title-section.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;justify-content:space-between;align-items:start;gap:.5rem}.title-section.svelte-1jhjtdw h3.svelte-1jhjtdw{margin:0;font-size:.95rem;word-break:break-word;color:#e2e8f0}.title-section.svelte-1jhjtdw .status-badge.svelte-1jhjtdw{background-color:#4b5563;color:#cbd5e1;padding:.2rem .5rem;border-radius:.25rem;font-size:.65rem;font-weight:600;text-transform:uppercase;white-space:nowrap;flex-shrink:0}.card-content.svelte-1jhjtdw.svelte-1jhjtdw{flex:1;font-size:.8rem;margin-bottom:.75rem;overflow:hidden}.info-section.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:.75rem}.info-section.svelte-1jhjtdw p.svelte-1jhjtdw{margin:0 0 .35rem;color:#cbd5e1;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.command-code.svelte-1jhjtdw.svelte-1jhjtdw,.args-code.svelte-1jhjtdw.svelte-1jhjtdw{display:block;background-color:#0000004d;padding:.35rem;border-radius:.25rem;color:#86efac;font-family:Courier New,monospace;font-size:.7rem;word-break:break-all;white-space:normal;overflow-wrap:break-word}.mini-env-vars.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;flex-direction:column;gap:.35rem}.mini-env.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0f172a80;padding:.35rem;border-radius:.25rem;border-left:2px solid #10b981;font-size:.7rem;word-break:break-all;white-space:normal;overflow-wrap:break-word}.mini-env.svelte-1jhjtdw code.env-key.svelte-1jhjtdw{color:#86efac;margin-right:.25rem}.mini-env.svelte-1jhjtdw em.svelte-1jhjtdw{color:#94a3b8;font-style:italic}.card-actions.svelte-1jhjtdw.svelte-1jhjtdw{margin-top:auto}.card-actions.svelte-1jhjtdw .btn-enable.svelte-1jhjtdw{width:100%}.loading.svelte-1jhjtdw.svelte-1jhjtdw,.empty.svelte-1jhjtdw.svelte-1jhjtdw{color:#94a3b8;text-align:center;padding:2rem;font-style:italic}.server-card.svelte-1jhjtdw.svelte-1jhjtdw{background:linear-gradient(135deg,#1e293b,#0f172a);border:1px solid #334155;border-radius:.75rem;padding:1.5rem;transition:all .2s}.server-card.svelte-1jhjtdw.svelte-1jhjtdw:hover{border-color:#64748b;box-shadow:0 4px 6px #0000004d}.server-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;justify-content:space-between;align-items:start;margin-bottom:1rem;gap:1rem}.server-header.svelte-1jhjtdw h3.svelte-1jhjtdw{margin:0;font-size:1.1rem;word-break:break-word}.status-badge.svelte-1jhjtdw.svelte-1jhjtdw{display:inline-block;padding:.25rem .75rem;border-radius:.25rem;font-size:.75rem;font-weight:600;text-transform:uppercase;color:#fff;white-space:nowrap;flex-shrink:0}.server-details.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0f172a80;border-radius:.5rem;padding:1rem;margin-bottom:1rem;font-size:.85rem}.server-details.svelte-1jhjtdw p.svelte-1jhjtdw{margin:.5rem 0;word-break:break-word;overflow-wrap:break-word}.server-details.svelte-1jhjtdw p.svelte-1jhjtdw:first-child{margin-top:0}.server-details.svelte-1jhjtdw code.svelte-1jhjtdw{background-color:#0000004d;padding:.25rem .5rem;border-radius:.25rem;font-family:Courier New,monospace;color:#86efac;display:inline-block;max-width:100%;word-break:break-all;overflow-wrap:break-word;white-space:normal}.server-actions.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.75rem}.btn-details.svelte-1jhjtdw.svelte-1jhjtdw{background:none;border:1px solid #64748b;color:#94a3b8;padding:.35rem .75rem;border-radius:.25rem;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .2s;text-align:left;width:100%;margin-top:.5rem}.btn-details.svelte-1jhjtdw.svelte-1jhjtdw:hover{background-color:#64748b1a;border-color:#cbd5e1;color:#cbd5e1}.server-expanded.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0003;border-radius:.5rem;padding:1rem;margin:1rem 0;border:1px solid #334155}.server-expanded.svelte-1jhjtdw .section.svelte-1jhjtdw{margin-bottom:1.5rem}.server-expanded.svelte-1jhjtdw .section.svelte-1jhjtdw:last-child{margin-bottom:0}.server-expanded.svelte-1jhjtdw h4.svelte-1jhjtdw{margin:0 0 .75rem;font-size:.9rem;color:#cbd5e1;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid #334155;padding-bottom:.5rem}.env-vars.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;flex-direction:column;gap:.5rem;font-size:.8rem}.env-var.svelte-1jhjtdw.svelte-1jhjtdw{display:grid;grid-template-columns:auto 1fr;gap:.75rem;background-color:#0f172a80;padding:.5rem;border-radius:.25rem;border-left:2px solid #10b981;align-items:center}.env-key.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0000004d;padding:.25rem .5rem;border-radius:.25rem;color:#86efac;word-break:break-word;white-space:nowrap}.env-value.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0000004d;padding:.25rem .5rem;border-radius:.25rem;color:#60a5fa;word-break:break-all;font-family:Courier New,monospace}.tools-list.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;flex-direction:column;gap:.75rem;font-size:.8rem}.tool-container.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:0}.btn-execute-tool.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#3b82f6;color:#eff6ff;padding:.25rem .75rem;border:none;border-radius:.25rem;font-size:.7rem;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;text-transform:uppercase;letter-spacing:.02em}.btn-execute-tool.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#2563eb}.btn-execute-tool.svelte-1jhjtdw.svelte-1jhjtdw:disabled{opacity:.6;cursor:not-allowed}.tool-result.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0000004d;border:1px solid #334155;border-radius:.25rem;padding:.5rem;margin-top:.5rem;overflow-x:auto}.tool-result.svelte-1jhjtdw pre.svelte-1jhjtdw{margin:0;color:#d1d5db;font-size:.7rem;font-family:Courier New,monospace;line-height:1.4;word-break:break-word;white-space:pre-wrap}.loading-tools.svelte-1jhjtdw.svelte-1jhjtdw,.no-tools.svelte-1jhjtdw.svelte-1jhjtdw{font-size:.8rem;color:#94a3b8;margin:0;padding:.5rem 0;font-style:italic}button.svelte-1jhjtdw.svelte-1jhjtdw{flex:1;padding:.5rem;border:none;border-radius:.375rem;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .2s;text-transform:uppercase;letter-spacing:.025em}button.svelte-1jhjtdw.svelte-1jhjtdw:disabled{opacity:.5;cursor:not-allowed}.btn-success.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#10b981;color:#ecfdf5}.btn-success.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#059669}.btn-danger.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#ef4444;color:#fef2f2}.btn-danger.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#dc2626}.btn-secondary.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#6366f1;color:#e0e7ff}.btn-secondary.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#4f46e5}.btn-enable.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#8b5cf6;color:#f3e8ff}.btn-enable.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#7c3aed}.metalink-commands.svelte-1jhjtdw.svelte-1jhjtdw{margin-bottom:2rem;padding:1.5rem;background-color:#0f172acc;border:1px solid #334155;border-radius:.5rem}.metalink-commands.svelte-1jhjtdw h2.svelte-1jhjtdw{margin-top:0;margin-bottom:1rem;font-size:1.3rem}.commands-grid.svelte-1jhjtdw.svelte-1jhjtdw{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;align-items:stretch}.search-command.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:0;align-items:center}.search-command.svelte-1jhjtdw input.svelte-1jhjtdw{flex:1;padding:.5rem;background-color:#0000004d;border:1px solid #64748b;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0;border-bottom-right-radius:0;color:#e2e8f0;font-size:.9rem}.search-command.svelte-1jhjtdw input.svelte-1jhjtdw:focus{outline:none;border-color:#cbd5e1;background-color:#00000080}.search-command.svelte-1jhjtdw input.svelte-1jhjtdw::placeholder{color:#64748b}.search-command.svelte-1jhjtdw .btn-command.svelte-1jhjtdw{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px;margin-right:.5rem}.cmd-select.svelte-1jhjtdw.svelte-1jhjtdw{padding:.5rem;background-color:#0000004d;border:1px solid #64748b;border-radius:.25rem;color:#e2e8f0;font-size:.9rem}.cmd-select.svelte-1jhjtdw.svelte-1jhjtdw:focus{outline:none;border-color:#cbd5e1;background-color:#00000080}.cmd-select.svelte-1jhjtdw option.svelte-1jhjtdw{background-color:#1e293b;color:#e2e8f0}.btn-command.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#3b82f6;color:#fff;padding:.5rem 1rem;border:none;border-radius:.25rem;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-command.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#2563eb}.btn-command.svelte-1jhjtdw.svelte-1jhjtdw:disabled{opacity:.5;cursor:not-allowed}.modal-overlay.svelte-1jhjtdw.svelte-1jhjtdw{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#1e293b;border:1px solid #475569;border-radius:.5rem;width:90%;max-width:800px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 20px 25px -5px #00000080}.modal-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid #334155}.modal-header.svelte-1jhjtdw h3.svelte-1jhjtdw{margin:0;font-size:1.2rem}.btn-close.svelte-1jhjtdw.svelte-1jhjtdw{background:none;border:none;color:#94a3b8;font-size:1.5rem;cursor:pointer;transition:color .2s}.btn-close.svelte-1jhjtdw.svelte-1jhjtdw:hover{color:#e2e8f0}.modal-body.svelte-1jhjtdw.svelte-1jhjtdw{flex:1;overflow-y:auto;padding:1.5rem;font-size:.9rem}.result-content.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0000004d;padding:1rem;border-radius:.25rem;overflow-x:auto;white-space:pre-wrap;word-break:break-word;margin:0;font-family:Courier New,monospace;color:#86efac}.error-block.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#7f1d1d80;border:1px solid #dc2626;padding:1rem;border-radius:.25rem;color:#fecaca}.available-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:1rem}.available-header.svelte-1jhjtdw h2.svelte-1jhjtdw{margin:0;flex:1}.view-toggle.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.5rem}.toggle-btn.svelte-1jhjtdw.svelte-1jhjtdw{background-color:transparent;border:1px solid #64748b;color:#94a3b8;padding:.35rem .75rem;border-radius:.25rem;font-size:.85rem;cursor:pointer;transition:all .2s}.toggle-btn.svelte-1jhjtdw.svelte-1jhjtdw:hover{border-color:#cbd5e1;color:#cbd5e1}.toggle-btn.active.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#3b82f6;border-color:#3b82f6;color:#fff}.servers-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:1rem}.servers-header.svelte-1jhjtdw h2.svelte-1jhjtdw{margin:0;flex:0 0 auto}.header-actions.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.expand-toggle.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.5rem}.btn-expand.svelte-1jhjtdw.svelte-1jhjtdw,.btn-collapse.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#1e40af;border:1px solid #3b82f6;color:#dbeafe;padding:.4rem .8rem;border-radius:.25rem;font-size:.85rem;cursor:pointer;transition:all .2s}.btn-expand.svelte-1jhjtdw.svelte-1jhjtdw:hover,.btn-collapse.svelte-1jhjtdw.svelte-1jhjtdw:hover{background-color:#1e3a8a;border-color:#60a5fa}.btn-expand.active.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#059669;border-color:#10b981}.server-list.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;flex-direction:column;gap:.5rem}.server-list-item.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0f172a80;border:1px solid #334155;border-radius:.35rem;overflow:hidden}.server-list-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.6rem;align-items:center;padding:.6rem;flex-wrap:wrap}.server-list-name.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.5rem;align-items:center;min-width:fit-content}.server-list-name.svelte-1jhjtdw h3.svelte-1jhjtdw{font-size:.95rem;margin:0;font-weight:600;white-space:nowrap}.server-list-name.svelte-1jhjtdw .status-badge.svelte-1jhjtdw{padding:.15rem .5rem;font-size:.65rem;white-space:nowrap}.server-list-toggles.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.35rem}.btn-info-toggle.svelte-1jhjtdw.svelte-1jhjtdw{background-color:transparent;border:1px solid #64748b;color:#94a3b8;padding:.25rem .5rem;border-radius:.2rem;font-size:.7rem;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-info-toggle.svelte-1jhjtdw.svelte-1jhjtdw:hover:not(:disabled){background-color:#64748b26;border-color:#cbd5e1;color:#cbd5e1}.server-list-details.svelte-1jhjtdw.svelte-1jhjtdw{flex-shrink:0}.server-list-details.svelte-1jhjtdw .btn-details.svelte-1jhjtdw{padding:.25rem .5rem;font-size:.7rem;margin:0;white-space:nowrap}.server-list-actions.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.35rem;margin-left:auto;flex-shrink:0}.server-list-actions.svelte-1jhjtdw button.svelte-1jhjtdw{padding:.3rem .6rem;font-size:.7rem;white-space:nowrap;font-weight:600}.server-info-section.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.5rem;padding:.4rem .6rem;background-color:#0003;border-top:1px solid #334155;font-size:.75rem;align-items:center}.server-info-section.svelte-1jhjtdw strong.svelte-1jhjtdw{min-width:fit-content;color:#cbd5e1}.server-info-section.svelte-1jhjtdw code.svelte-1jhjtdw{font-size:.7rem;padding:.1rem .3rem;background-color:#0000004d;border-radius:.2rem;color:#86efac;word-break:break-all;overflow-x:auto}.server-list.svelte-1jhjtdw .server-expanded.svelte-1jhjtdw{border-top:1px solid #334155;background-color:#00000026}.env-value-wrapper.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.4rem;align-items:center;flex:1}.env-value-wrapper.svelte-1jhjtdw .env-value.svelte-1jhjtdw{flex:1;word-break:break-all}.env-value-wrapper.svelte-1jhjtdw .env-value.masked.svelte-1jhjtdw{letter-spacing:.2em;color:#f87171}.btn-toggle-secret.svelte-1jhjtdw.svelte-1jhjtdw{flex-shrink:0;background:none;border:none;padding:.2rem .4rem;cursor:pointer;font-size:.8rem;color:#cbd5e1;transition:all .2s}.btn-toggle-secret.svelte-1jhjtdw.svelte-1jhjtdw:hover{color:#fff;background-color:#64748b26;border-radius:.2rem}.server-cards.svelte-1jhjtdw.svelte-1jhjtdw{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:1rem}.server-cards.svelte-1jhjtdw .server-card.svelte-1jhjtdw{display:flex;flex-direction:column;height:100%}.available-list.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;flex-direction:column;gap:.5rem}.available-list-item.svelte-1jhjtdw.svelte-1jhjtdw{background-color:#0f172a80;border:1px solid #334155;border-radius:.35rem;overflow:hidden}.available-list-header.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.6rem;align-items:center;padding:.6rem;flex-wrap:wrap}.available-list-name.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.5rem;align-items:center;min-width:fit-content}.available-list-name.svelte-1jhjtdw h3.svelte-1jhjtdw{font-size:.95rem;margin:0;font-weight:600;white-space:nowrap}.available-list-name.svelte-1jhjtdw .status-badge.svelte-1jhjtdw{padding:.15rem .5rem;font-size:.65rem;white-space:nowrap}.available-list-toggles.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.35rem}.available-list-details.svelte-1jhjtdw.svelte-1jhjtdw{flex-shrink:0}.available-list-details.svelte-1jhjtdw .btn-details.svelte-1jhjtdw{padding:.25rem .5rem;font-size:.7rem;margin:0;white-space:nowrap}.available-list-actions.svelte-1jhjtdw.svelte-1jhjtdw{display:flex;gap:.35rem;margin-left:auto;flex-shrink:0}.available-list-actions.svelte-1jhjtdw button.svelte-1jhjtdw{padding:.25rem .5rem;font-size:.7rem;white-space:nowrap}.available-cards.svelte-1jhjtdw.svelte-1jhjtdw{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.available-cards.svelte-1jhjtdw .available-card.svelte-1jhjtdw{display:flex;flex-direction:column;height:100%}footer.svelte-1jhjtdw.svelte-1jhjtdw{margin-top:3rem;padding-top:2rem;border-top:1px solid #334155;text-align:center;color:#64748b;font-size:.85rem}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Cl=Object.defineProperty;var yl=(t,e,l)=>e in t?Cl(t,e,{enumerable:!0,configurable:!0,writable:!0,value:l}):t[e]=l;var dt=(t,e,l)=>yl(t,typeof e!="symbol"?e+"":e,l);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function l(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=l(i);fetch(i.href,a)}})();function ge(){}function jl(t){return t()}function jt(){return Object.create(null)}function ke(t){t.forEach(jl)}function bl(t){return typeof t=="function"}function Ol(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}function Tl(t){return Object.keys(t).length===0}function o(t,e){t.appendChild(e)}function S(t,e,l){t.insertBefore(e,l||null)}function w(t){t.parentNode&&t.parentNode.removeChild(t)}function ye(t,e){for(let l=0;l<t.length;l+=1)t[l]&&t[l].d(e)}function d(t){return document.createElement(t)}function p(t){return document.createTextNode(t)}function g(){return p(" ")}function pl(){return p("")}function V(t,e,l,n){return t.addEventListener(e,l,n),()=>t.removeEventListener(e,l,n)}function Al(t){return function(e){return e.stopPropagation(),t.call(this,e)}}function f(t,e,l){l==null?t.removeAttribute(e):t.getAttribute(e)!==l&&t.setAttribute(e,l)}function Ll(t){return Array.from(t.childNodes)}function E(t,e){e=""+e,t.data!==e&&(t.data=e)}function Ue(t,e){t.value=e??""}function Ze(t,e,l,n){l==null?t.style.removeProperty(e):t.style.setProperty(e,l,"")}function bt(t,e,l){for(let n=0;n<t.options.length;n+=1){const i=t.options[n];if(i.__value===e){i.selected=!0;return}}(!l||e!==void 0)&&(t.selectedIndex=-1)}function Pl(t){const e=t.querySelector(":checked");return e&&e.__value}let Qe;function ze(t){Qe=t}function Ml(){if(!Qe)throw new Error("Function called outside component initialization");return Qe}function Rl(t){Ml().$$.on_mount.push(t)}function Hl(t,e){const l=t.$$.callbacks[e.type];l&&l.slice().forEach(n=>n.call(this,e))}const Ve=[],pt=[];let Be=[];const gt=[],Dl=Promise.resolve();let _t=!1;function Fl(){_t||(_t=!0,Dl.then(gl))}function $e(t){Be.push(t)}const ut=new Set;let Je=0;function gl(){if(Je!==0)return;const t=Qe;do{try{for(;Je<Ve.length;){const e=Ve[Je];Je++,ze(e),Il(e.$$)}}catch(e){throw Ve.length=0,Je=0,e}for(ze(null),Ve.length=0,Je=0;pt.length;)pt.pop()();for(let e=0;e<Be.length;e+=1){const l=Be[e];ut.has(l)||(ut.add(l),l())}Be.length=0}while(Ve.length);for(;gt.length;)gt.pop()();_t=!1,ut.clear(),ze(t)}function Il(t){if(t.fragment!==null){t.update(),ke(t.before_update);const e=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,e),t.after_update.forEach($e)}}function Jl(t){const e=[],l=[];Be.forEach(n=>t.indexOf(n)===-1?e.push(n):l.push(n)),l.forEach(n=>n()),Be=e}const Vl=new Set;function kl(t,e){t&&t.i&&(Vl.delete(t),t.i(e))}function ae(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function wl(t,e){t.d(1),e.delete(t.key)}function Sl(t,e,l,n,i,a,s,r,u,c,_,h){let j=t.length,m=a.length,b=j;const k={};for(;b--;)k[t[b].key]=b;const M=[],L=new Map,I=new Map,y=[];for(b=m;b--;){const O=h(i,a,b),J=l(O);let H=s.get(J);H?y.push(()=>H.p(O,e)):(H=c(J,O),H.c()),L.set(J,M[b]=H),J in k&&I.set(J,Math.abs(b-k[J]))}const K=new Set,R=new Set;function D(O){kl(O,1),O.m(r,_),s.set(O.key,O),_=O.first,m--}for(;j&&m;){const O=M[m-1],J=t[j-1],H=O.key,B=J.key;O===J?(_=O.first,j--,m--):L.has(B)?!s.has(H)||K.has(H)?D(O):R.has(B)?j--:I.get(H)>I.get(B)?(R.add(H),D(O)):(K.add(B),j--):(u(J,s),j--)}for(;j--;){const O=t[j];L.has(O.key)||u(O,s)}for(;m;)D(M[m-1]);return ke(y),M}function Bl(t,e,l){const{fragment:n,after_update:i}=t.$$;n&&n.m(e,l),$e(()=>{const a=t.$$.on_mount.map(jl).filter(bl);t.$$.on_destroy?t.$$.on_destroy.push(...a):ke(a),t.$$.on_mount=[]}),i.forEach($e)}function Nl(t,e){const l=t.$$;l.fragment!==null&&(Jl(l.after_update),ke(l.on_destroy),l.fragment&&l.fragment.d(e),l.on_destroy=l.fragment=null,l.ctx=[])}function Kl(t,e){t.$$.dirty[0]===-1&&(Ve.push(t),Fl(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<<e%31}function ql(t,e,l,n,i,a,s=null,r=[-1]){const u=Qe;ze(t);const c=t.$$={fragment:null,ctx:[],props:a,update:ge,not_equal:i,bound:jt(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(u?u.$$.context:[])),callbacks:jt(),dirty:r,skip_bound:!1,root:e.target||u.$$.root};s&&s(c.root);let _=!1;if(c.ctx=l?l(t,e.props||{},(h,j,...m)=>{const b=m.length?m[0]:j;return c.ctx&&i(c.ctx[h],c.ctx[h]=b)&&(!c.skip_bound&&c.bound[h]&&c.bound[h](b),_&&Kl(t,h)),j}):[],c.update(),_=!0,ke(c.before_update),c.fragment=n?n(c.ctx):!1,e.target){if(e.hydrate){const h=Ll(e.target);c.fragment&&c.fragment.l(h),h.forEach(w)}else c.fragment&&c.fragment.c();e.intro&&kl(t.$$.fragment),Bl(t,e.target,e.anchor),gl()}ze(u)}class Gl{constructor(){dt(this,"$$");dt(this,"$$set")}$destroy(){Nl(this,1),this.$destroy=ge}$on(e,l){if(!bl(l))return ge;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(l),()=>{const i=n.indexOf(l);i!==-1&&n.splice(i,1)}}$set(e){this.$$set&&!Tl(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Ul="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Ul);function kt(t,e,l){const n=t.slice();return n[74]=e[l],n}function wt(t,e,l){const n=t.slice();return n[77]=e[l][0],n[78]=e[l][1],n}function St(t,e,l){const n=t.slice();return n[74]=e[l],n}function Et(t,e,l){const n=t.slice();return n[77]=e[l][0],n[78]=e[l][1],n}function Ct(t,e,l){const n=t.slice();return n[74]=e[l],n}function yt(t,e,l){const n=t.slice();return n[87]=e[l],n}function Ot(t,e,l){const n=t.slice();return n[77]=e[l][0],n[78]=e[l][1],n}function Tt(t,e,l){const n=t.slice();return n[74]=e[l],n}function At(t,e,l){const n=t.slice();return n[87]=e[l],n}function Lt(t,e,l){const n=t.slice();return n[77]=e[l][0],n[78]=e[l][1],n}function Pt(t,e,l){const n=t.slice();return n[74]=e[l],n}function Mt(t){let e,l,n,i,a,s,r,u;return{c(){e=d("div"),l=d("strong"),l.textContent="Error:",n=g(),i=p(t[4]),a=g(),s=d("button"),s.textContent="Dismiss",f(s,"class","svelte-1jhjtdw"),f(e,"class","error svelte-1jhjtdw")},m(c,_){S(c,e,_),o(e,l),o(e,n),o(e,i),o(e,a),o(e,s),r||(u=V(s,"click",t[35]),r=!0)},p(c,_){_[0]&16&&E(i,c[4])},d(c){c&&w(e),r=!1,u()}}}function Rt(t){let e,l,n,i,a,s,r,u,c,_,h=t[2].status+"",j,m,b,k,M,L=t[2].running+"",I,y,K=t[2].servers+"",R,D,O,J,H,B=new Date(t[2].timestamp).toLocaleTimeString()+"",q,X;return{c(){e=d("section"),l=d("div"),n=d("div"),i=g(),a=d("h3"),a.textContent="System Health",s=g(),r=d("p"),u=d("strong"),u.textContent="Status:",c=g(),_=d("span"),j=p(h),m=g(),b=d("p"),k=d("strong"),k.textContent="Servers:",M=g(),I=p(L),y=p("/"),R=p(K),D=p(" running"),O=g(),J=d("p"),H=p("Updated: "),q=p(B),f(n,"class","health-indicator svelte-1jhjtdw"),f(a,"class","svelte-1jhjtdw"),f(_,"class","badge healthy svelte-1jhjtdw"),f(r,"class","svelte-1jhjtdw"),f(b,"class","svelte-1jhjtdw"),f(J,"class","timestamp svelte-1jhjtdw"),f(l,"class","health-card svelte-1jhjtdw"),f(e,"class","health svelte-1jhjtdw"),f(e,"data-health-status",X=t[2].status)},m(P,T){S(P,e,T),o(e,l),o(l,n),o(l,i),o(l,a),o(l,s),o(l,r),o(r,u),o(r,c),o(r,_),o(_,j),o(l,m),o(l,b),o(b,k),o(b,M),o(b,I),o(b,y),o(b,R),o(b,D),o(l,O),o(l,J),o(J,H),o(J,q)},p(P,T){T[0]&4&&h!==(h=P[2].status+"")&&E(j,h),T[0]&4&&L!==(L=P[2].running+"")&&E(I,L),T[0]&4&&K!==(K=P[2].servers+"")&&E(R,K),T[0]&4&&B!==(B=new Date(P[2].timestamp).toLocaleTimeString()+"")&&E(q,B),T[0]&4&&X!==(X=P[2].status)&&f(e,"data-health-status",X)},d(P){P&&w(e)}}}function Ht(t){let e,l=t[74].name+"",n,i;return{c(){e=d("option"),n=p(l),e.__value=i=t[74].name,Ue(e,e.__value),f(e,"class","svelte-1jhjtdw")},m(a,s){S(a,e,s),o(e,n)},p(a,s){s[0]&2&&l!==(l=a[74].name+"")&&E(n,l),s[0]&2&&i!==(i=a[74].name)&&(e.__value=i,Ue(e,e.__value))},d(a){a&&w(e)}}}function Dt(t){let e,l,n,i,a,s,r,u,c,_;function h(b,k){if(b[21])return Wl;if(b[22])return Ql;if(b[20])return zl}let j=h(t),m=j&&j(t);return{c(){e=d("div"),l=d("div"),n=d("div"),i=d("h3"),i.textContent="Command Result",a=g(),s=d("button"),s.textContent="✕",r=g(),u=d("div"),m&&m.c(),f(i,"class","svelte-1jhjtdw"),f(s,"class","btn-close svelte-1jhjtdw"),f(n,"class","modal-header svelte-1jhjtdw"),f(u,"class","modal-body svelte-1jhjtdw"),f(l,"class","modal svelte-1jhjtdw"),f(l,"role","dialog"),f(l,"aria-modal","true"),f(e,"class","modal-overlay svelte-1jhjtdw")},m(b,k){S(b,e,k),o(e,l),o(l,n),o(n,i),o(n,a),o(n,s),o(l,r),o(l,u),m&&m.m(u,null),c||(_=[V(s,"click",t[43]),V(l,"click",Al(t[34])),V(e,"click",t[44])],c=!0)},p(b,k){j===(j=h(b))&&m?m.p(b,k):(m&&m.d(1),m=j&&j(b),m&&(m.c(),m.m(u,null)))},d(b){b&&w(e),m&&m.d(),c=!1,ke(_)}}}function zl(t){let e,l=JSON.stringify(t[20],null,2)+"",n;return{c(){e=d("pre"),n=p(l),f(e,"class","result-content svelte-1jhjtdw")},m(i,a){S(i,e,a),o(e,n)},p(i,a){a[0]&1048576&&l!==(l=JSON.stringify(i[20],null,2)+"")&&E(n,l)},d(i){i&&w(e)}}}function Ql(t){let e,l,n,i;return{c(){e=d("div"),l=d("strong"),l.textContent="Error:",n=g(),i=p(t[22]),f(e,"class","error-block svelte-1jhjtdw")},m(a,s){S(a,e,s),o(e,l),o(e,n),o(e,i)},p(a,s){s[0]&4194304&&E(i,a[22])},d(a){a&&w(e)}}}function Wl(t){let e;return{c(){e=d("p"),e.textContent="Executing command...",f(e,"class","loading svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function Ft(t){let e,l,n,i,a,s,r,u;return{c(){e=d("div"),l=d("button"),n=p("⬇️ Expand All"),a=g(),s=d("button"),s.textContent="⬆️ Collapse All",f(l,"class",i="btn-expand "+(t[19]?"active":"")+" svelte-1jhjtdw"),f(l,"title","Expand all servers to see details"),f(s,"class","btn-collapse svelte-1jhjtdw"),f(s,"title","Collapse all servers"),f(e,"class","expand-toggle svelte-1jhjtdw")},m(c,_){S(c,e,_),o(e,l),o(l,n),o(e,a),o(e,s),r||(u=[V(l,"click",t[32]),V(s,"click",t[33])],r=!0)},p(c,_){_[0]&524288&&i!==(i="btn-expand "+(c[19]?"active":"")+" svelte-1jhjtdw")&&f(l,"class",i)},d(c){c&&w(e),r=!1,ke(u)}}}function Xl(t){let e,l=[],n=new Map,i=ae(t[1]);const a=s=>s[74].name;for(let s=0;s<i.length;s+=1){let r=Ct(t,i,s),u=a(r);n.set(u,l[s]=Gt(u,r))}return{c(){e=d("div");for(let s=0;s<l.length;s+=1)l[s].c();f(e,"class","server-cards svelte-1jhjtdw")},m(s,r){S(s,e,r);for(let u=0;u<l.length;u+=1)l[u]&&l[u].m(e,null)},p(s,r){r[0]&939788258|r[1]&1&&(i=ae(s[1]),l=Sl(l,r,a,1,s,i,n,e,wl,Gt,null,Ct))},d(s){s&&w(e);for(let r=0;r<l.length;r+=1)l[r].d()}}}function Yl(t){let e,l=[],n=new Map,i=ae(t[1]);const a=s=>s[74].name;for(let s=0;s<i.length;s+=1){let r=Tt(t,i,s),u=a(r);n.set(u,l[s]=tl(u,r))}return{c(){e=d("div");for(let s=0;s<l.length;s+=1)l[s].c();f(e,"class","server-list svelte-1jhjtdw")},m(s,r){S(s,e,r);for(let u=0;u<l.length;u+=1)l[u]&&l[u].m(e,null)},p(s,r){r[0]&939853794|r[1]&1&&(i=ae(s[1]),l=Sl(l,r,a,1,s,i,n,e,wl,tl,null,Tt))},d(s){s&&w(e);for(let r=0;r<l.length;r+=1)l[r].d()}}}function Zl(t){let e;return{c(){e=d("p"),e.textContent="No servers configured",f(e,"class","empty svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function $l(t){let e;return{c(){e=d("p"),e.textContent="Loading servers...",f(e,"class","loading svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function It(t){let e,l,n,i,a=t[74].args.join(" ")+"",s;return{c(){e=d("p"),l=d("strong"),l.textContent="Args:",n=g(),i=d("code"),s=p(a),f(i,"class","svelte-1jhjtdw"),f(e,"class","svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2&&a!==(a=r[74].args.join(" ")+"")&&E(s,a)},d(r){r&&w(e)}}}function Jt(t){let e,l=Object.keys(t[74].env).length>0,n,i=l&&Vt(t),a=t[74].status==="running"&&Nt(t);return{c(){e=d("div"),i&&i.c(),n=g(),a&&a.c(),f(e,"class","server-expanded svelte-1jhjtdw")},m(s,r){S(s,e,r),i&&i.m(e,null),o(e,n),a&&a.m(e,null)},p(s,r){r[0]&2&&(l=Object.keys(s[74].env).length>0),l?i?i.p(s,r):(i=Vt(s),i.c(),i.m(e,n)):i&&(i.d(1),i=null),s[74].status==="running"?a?a.p(s,r):(a=Nt(s),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},d(s){s&&w(e),i&&i.d(),a&&a.d()}}}function Vt(t){let e,l,n,i,a=ae(Object.entries(t[74].env)),s=[];for(let r=0;r<a.length;r+=1)s[r]=Bt(Ot(t,a,r));return{c(){e=d("div"),l=d("h4"),l.textContent="Environment Variables",n=g(),i=d("div");for(let r=0;r<s.length;r+=1)s[r].c();f(l,"class","svelte-1jhjtdw"),f(i,"class","env-vars svelte-1jhjtdw"),f(e,"class","section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i);for(let c=0;c<s.length;c+=1)s[c]&&s[c].m(i,null)},p(r,u){if(u[0]&537133058){a=ae(Object.entries(r[74].env));let c;for(c=0;c<a.length;c+=1){const _=Ot(r,a,c);s[c]?s[c].p(_,u):(s[c]=Bt(_),s[c].c(),s[c].m(i,null))}for(;c<s.length;c+=1)s[c].d(1);s.length=a.length}},d(r){r&&w(e),ye(s,r)}}}function xl(t){let e,l=t[78]+"",n;return{c(){e=d("code"),n=p(l),f(e,"class","env-value svelte-1jhjtdw")},m(i,a){S(i,e,a),o(e,n)},p(i,a){a[0]&2&&l!==(l=i[78]+"")&&E(n,l)},d(i){i&&w(e)}}}function en(t){let e,l=(t[18][t[77]]?t[78]:"••••••••")+"",n,i,a,s,r=t[18][t[77]]?"👁️":"🚫",u,c,_,h;function j(){return t[56](t[77])}return{c(){e=d("code"),n=p(l),a=g(),s=d("button"),u=p(r),f(e,"class",i="env-value "+(t[18][t[77]]?"":"masked")+" svelte-1jhjtdw"),f(s,"class","btn-toggle-secret svelte-1jhjtdw"),f(s,"title",c=t[18][t[77]]?"Hide":"Show")},m(m,b){S(m,e,b),o(e,n),S(m,a,b),S(m,s,b),o(s,u),_||(h=V(s,"click",j),_=!0)},p(m,b){t=m,b[0]&262146&&l!==(l=(t[18][t[77]]?t[78]:"••••••••")+"")&&E(n,l),b[0]&262146&&i!==(i="env-value "+(t[18][t[77]]?"":"masked")+" svelte-1jhjtdw")&&f(e,"class",i),b[0]&262146&&r!==(r=t[18][t[77]]?"👁️":"🚫")&&E(u,r),b[0]&262146&&c!==(c=t[18][t[77]]?"Hide":"Show")&&f(s,"title",c)},d(m){m&&(w(e),w(a),w(s)),_=!1,h()}}}function Bt(t){let e,l,n=t[77]+"",i,a,s,r,u;function c(j,m){return m[0]&2&&(r=null),r==null&&(r=!!El(j[77])),r?en:xl}let _=c(t,[-1,-1,-1,-1]),h=_(t);return{c(){e=d("div"),l=d("code"),i=p(n),a=g(),s=d("div"),h.c(),u=g(),f(l,"class","env-key svelte-1jhjtdw"),f(s,"class","env-value-wrapper svelte-1jhjtdw"),f(e,"class","env-var svelte-1jhjtdw")},m(j,m){S(j,e,m),o(e,l),o(l,i),o(e,a),o(e,s),h.m(s,null),o(e,u)},p(j,m){m[0]&2&&n!==(n=j[77]+"")&&E(i,n),_===(_=c(j,m))&&h?h.p(j,m):(h.d(1),h=_(j),h&&(h.c(),h.m(s,null)))},d(j){j&&w(e),h.d()}}}function Nt(t){let e,l,n,i=t[8][t[74].name]?"(loading...)":"",a,s;function r(_,h){return _[8][_[74].name]?nn:_[7][_[74].name]&&_[7][_[74].name].length>0?ln:tn}let u=r(t),c=u(t);return{c(){e=d("div"),l=d("h4"),n=p("Tools "),a=p(i),s=g(),c.c(),f(l,"class","svelte-1jhjtdw"),f(e,"class","section svelte-1jhjtdw")},m(_,h){S(_,e,h),o(e,l),o(l,n),o(l,a),o(e,s),c.m(e,null)},p(_,h){h[0]&258&&i!==(i=_[8][_[74].name]?"(loading...)":"")&&E(a,i),u===(u=r(_))&&c?c.p(_,h):(c.d(1),c=u(_),c&&(c.c(),c.m(e,null)))},d(_){_&&w(e),c.d()}}}function tn(t){let e;return{c(){e=d("p"),e.textContent="No tools available",f(e,"class","no-tools svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function ln(t){let e,l=ae(t[7][t[74].name]),n=[];for(let i=0;i<l.length;i+=1)n[i]=qt(yt(t,l,i));return{c(){e=d("div");for(let i=0;i<n.length;i+=1)n[i].c();f(e,"class","tools-list svelte-1jhjtdw")},m(i,a){S(i,e,a);for(let s=0;s<n.length;s+=1)n[s]&&n[s].m(e,null)},p(i,a){if(a[0]&268437122){l=ae(i[7][i[74].name]);let s;for(s=0;s<l.length;s+=1){const r=yt(i,l,s);n[s]?n[s].p(r,a):(n[s]=qt(r),n[s].c(),n[s].m(e,null))}for(;s<n.length;s+=1)n[s].d(1);n.length=l.length}},d(i){i&&w(e),ye(n,i)}}}function nn(t){let e;return{c(){e=d("p"),e.textContent="Loading tools...",f(e,"class","loading-tools svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function Kt(t){let e,l,n=JSON.stringify(t[10][`${t[74].name}-${t[87].name||t[87]}`],null,2)+"",i;return{c(){e=d("div"),l=d("pre"),i=p(n),f(l,"class","svelte-1jhjtdw"),f(e,"class","tool-result svelte-1jhjtdw")},m(a,s){S(a,e,s),o(e,l),o(l,i)},p(a,s){s[0]&1154&&n!==(n=JSON.stringify(a[10][`${a[74].name}-${a[87].name||a[87]}`],null,2)+"")&&E(i,n)},d(a){a&&w(e)}}}function qt(t){let e,l,n=(t[9][`${t[74].name}-${t[87].name||t[87]}`]?"...":t[87].name||t[87])+"",i,a,s,r,u,c;function _(){return t[57](t[74],t[87])}let h=t[10][`${t[74].name}-${t[87].name||t[87]}`]&&Kt(t);return{c(){e=d("div"),l=d("button"),i=p(n),s=g(),h&&h.c(),r=g(),l.disabled=a=t[9][`${t[74].name}-${t[87].name||t[87]}`],f(l,"class","btn-execute-tool svelte-1jhjtdw"),f(e,"class","tool-container svelte-1jhjtdw")},m(j,m){S(j,e,m),o(e,l),o(l,i),o(e,s),h&&h.m(e,null),o(e,r),u||(c=V(l,"click",_),u=!0)},p(j,m){t=j,m[0]&642&&n!==(n=(t[9][`${t[74].name}-${t[87].name||t[87]}`]?"...":t[87].name||t[87])+"")&&E(i,n),m[0]&642&&a!==(a=t[9][`${t[74].name}-${t[87].name||t[87]}`])&&(l.disabled=a),t[10][`${t[74].name}-${t[87].name||t[87]}`]?h?h.p(t,m):(h=Kt(t),h.c(),h.m(e,r)):h&&(h.d(1),h=null)},d(j){j&&w(e),h&&h.d(),u=!1,c()}}}function sn(t){let e,l=t[5][t[74].name]?"Starting...":"Start",n,i,a,s;function r(){return t[60](t[74])}return{c(){e=d("button"),n=p(l),e.disabled=i=t[5][t[74].name],f(e,"class","btn-success svelte-1jhjtdw")},m(u,c){S(u,e,c),o(e,n),a||(s=V(e,"click",r),a=!0)},p(u,c){t=u,c[0]&34&&l!==(l=t[5][t[74].name]?"Starting...":"Start")&&E(n,l),c[0]&34&&i!==(i=t[5][t[74].name])&&(e.disabled=i)},d(u){u&&w(e),a=!1,s()}}}function on(t){let e,l=t[5][t[74].name]?"Stopping...":"Stop",n,i,a,s,r=t[5][t[74].name]?"Restarting...":"Restart",u,c,_,h;function j(){return t[58](t[74])}function m(){return t[59](t[74])}return{c(){e=d("button"),n=p(l),a=g(),s=d("button"),u=p(r),e.disabled=i=t[5][t[74].name],f(e,"class","btn-danger svelte-1jhjtdw"),s.disabled=c=t[5][t[74].name],f(s,"class","btn-secondary svelte-1jhjtdw")},m(b,k){S(b,e,k),o(e,n),S(b,a,k),S(b,s,k),o(s,u),_||(h=[V(e,"click",j),V(s,"click",m)],_=!0)},p(b,k){t=b,k[0]&34&&l!==(l=t[5][t[74].name]?"Stopping...":"Stop")&&E(n,l),k[0]&34&&i!==(i=t[5][t[74].name])&&(e.disabled=i),k[0]&34&&r!==(r=t[5][t[74].name]?"Restarting...":"Restart")&&E(u,r),k[0]&34&&c!==(c=t[5][t[74].name])&&(s.disabled=c)},d(b){b&&(w(e),w(a),w(s)),_=!1,ke(h)}}}function Gt(t,e){let l,n,i,a=e[74].name+"",s,r,u,c=e[74].status+"",_,h,j,m,b,k,M,L=e[74].command+"",I,y,K,R,D=e[6][e[74].name]?"▼":"▶",O,J,H=Object.keys(e[74].env).length+"",B,q,X,P,T,le,Y,G,z=e[74].args.length>0&&It(e);function ce(){return e[55](e[74])}let Z=e[6][e[74].name]&&Jt(e);function de(re,N){return re[74].status==="running"?on:sn}let A=de(e),F=A(e);return{key:t,first:null,c(){l=d("div"),n=d("div"),i=d("h3"),s=p(a),r=g(),u=d("span"),_=p(c),h=g(),j=d("div"),m=d("p"),b=d("strong"),b.textContent="Command:",k=g(),M=d("code"),I=p(L),y=g(),z&&z.c(),K=g(),R=d("button"),O=p(D),J=p(" Details ("),B=p(H),q=p(" env vars)"),X=g(),Z&&Z.c(),P=g(),T=d("div"),F.c(),le=g(),f(i,"class","svelte-1jhjtdw"),f(u,"class","status-badge svelte-1jhjtdw"),Ze(u,"background-color",xe(e[74].status)),f(n,"class","server-header svelte-1jhjtdw"),f(M,"class","svelte-1jhjtdw"),f(m,"class","svelte-1jhjtdw"),f(R,"class","btn-details svelte-1jhjtdw"),f(j,"class","server-details svelte-1jhjtdw"),f(T,"class","server-actions svelte-1jhjtdw"),f(l,"class","server-card svelte-1jhjtdw"),this.first=l},m(re,N){S(re,l,N),o(l,n),o(n,i),o(i,s),o(n,r),o(n,u),o(u,_),o(l,h),o(l,j),o(j,m),o(m,b),o(m,k),o(m,M),o(M,I),o(j,y),z&&z.m(j,null),o(j,K),o(j,R),o(R,O),o(R,J),o(R,B),o(R,q),o(l,X),Z&&Z.m(l,null),o(l,P),o(l,T),F.m(T,null),o(l,le),Y||(G=V(R,"click",ce),Y=!0)},p(re,N){e=re,N[0]&2&&a!==(a=e[74].name+"")&&E(s,a),N[0]&2&&c!==(c=e[74].status+"")&&E(_,c),N[0]&2&&Ze(u,"background-color",xe(e[74].status)),N[0]&2&&L!==(L=e[74].command+"")&&E(I,L),e[74].args.length>0?z?z.p(e,N):(z=It(e),z.c(),z.m(j,K)):z&&(z.d(1),z=null),N[0]&66&&D!==(D=e[6][e[74].name]?"▼":"▶")&&E(O,D),N[0]&2&&H!==(H=Object.keys(e[74].env).length+"")&&E(B,H),e[6][e[74].name]?Z?Z.p(e,N):(Z=Jt(e),Z.c(),Z.m(l,P)):Z&&(Z.d(1),Z=null),A===(A=de(e))&&F?F.p(e,N):(F.d(1),F=A(e),F&&(F.c(),F.m(T,null)))},d(re){re&&w(l),z&&z.d(),Z&&Z.d(),F.d(),Y=!1,G()}}}function Ut(t){var u;let e,l=(u=t[16][t[74].name])!=null&&u.args?"▼":"▶",n,i,a,s;function r(){return t[48](t[74])}return{c(){e=d("button"),n=p(l),i=p(" ARGS"),f(e,"class","btn-info-toggle svelte-1jhjtdw")},m(c,_){S(c,e,_),o(e,n),o(e,i),a||(s=V(e,"click",r),a=!0)},p(c,_){var h;t=c,_[0]&65538&&l!==(l=(h=t[16][t[74].name])!=null&&h.args?"▼":"▶")&&E(n,l)},d(c){c&&w(e),a=!1,s()}}}function zt(t){let e,l=t[7][t[74].name].length+"",n,i;return{c(){e=p(", "),n=p(l),i=p(" tools")},m(a,s){S(a,e,s),S(a,n,s),S(a,i,s)},p(a,s){s[0]&130&&l!==(l=a[7][a[74].name].length+"")&&E(n,l)},d(a){a&&(w(e),w(n),w(i))}}}function an(t){let e,l=t[5][t[74].name]?"...":"START",n,i,a,s;function r(){return t[52](t[74])}return{c(){e=d("button"),n=p(l),e.disabled=i=t[5][t[74].name],f(e,"class","btn-success svelte-1jhjtdw")},m(u,c){S(u,e,c),o(e,n),a||(s=V(e,"click",r),a=!0)},p(u,c){t=u,c[0]&34&&l!==(l=t[5][t[74].name]?"...":"START")&&E(n,l),c[0]&34&&i!==(i=t[5][t[74].name])&&(e.disabled=i)},d(u){u&&w(e),a=!1,s()}}}function rn(t){let e,l=t[5][t[74].name]?"...":"STOP",n,i,a,s,r=t[5][t[74].name]?"...":"RESTART",u,c,_,h;function j(){return t[50](t[74])}function m(){return t[51](t[74])}return{c(){e=d("button"),n=p(l),a=g(),s=d("button"),u=p(r),e.disabled=i=t[5][t[74].name],f(e,"class","btn-danger svelte-1jhjtdw"),s.disabled=c=t[5][t[74].name],f(s,"class","btn-secondary svelte-1jhjtdw")},m(b,k){S(b,e,k),o(e,n),S(b,a,k),S(b,s,k),o(s,u),_||(h=[V(e,"click",j),V(s,"click",m)],_=!0)},p(b,k){t=b,k[0]&34&&l!==(l=t[5][t[74].name]?"...":"STOP")&&E(n,l),k[0]&34&&i!==(i=t[5][t[74].name])&&(e.disabled=i),k[0]&34&&r!==(r=t[5][t[74].name]?"...":"RESTART")&&E(u,r),k[0]&34&&c!==(c=t[5][t[74].name])&&(s.disabled=c)},d(b){b&&(w(e),w(a),w(s)),_=!1,ke(h)}}}function Qt(t){let e,l,n,i,a=t[74].command+"",s;return{c(){e=d("div"),l=d("strong"),l.textContent="Command:",n=g(),i=d("code"),s=p(a),f(l,"class","svelte-1jhjtdw"),f(i,"class","svelte-1jhjtdw"),f(e,"class","server-info-section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2&&a!==(a=r[74].command+"")&&E(s,a)},d(r){r&&w(e)}}}function Wt(t){let e,l,n,i,a=t[74].args.join(" ")+"",s;return{c(){e=d("div"),l=d("strong"),l.textContent="Args:",n=g(),i=d("code"),s=p(a),f(l,"class","svelte-1jhjtdw"),f(i,"class","svelte-1jhjtdw"),f(e,"class","server-info-section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2&&a!==(a=r[74].args.join(" ")+"")&&E(s,a)},d(r){r&&w(e)}}}function Xt(t){let e,l=Object.keys(t[74].env).length>0,n,i=l&&Yt(t),a=t[74].status==="running"&&$t(t);return{c(){e=d("div"),i&&i.c(),n=g(),a&&a.c(),f(e,"class","server-expanded svelte-1jhjtdw")},m(s,r){S(s,e,r),i&&i.m(e,null),o(e,n),a&&a.m(e,null)},p(s,r){r[0]&2&&(l=Object.keys(s[74].env).length>0),l?i?i.p(s,r):(i=Yt(s),i.c(),i.m(e,n)):i&&(i.d(1),i=null),s[74].status==="running"?a?a.p(s,r):(a=$t(s),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},d(s){s&&w(e),i&&i.d(),a&&a.d()}}}function Yt(t){let e,l,n,i,a=ae(Object.entries(t[74].env)),s=[];for(let r=0;r<a.length;r+=1)s[r]=Zt(Lt(t,a,r));return{c(){e=d("div"),l=d("h4"),l.textContent="Environment Variables",n=g(),i=d("div");for(let r=0;r<s.length;r+=1)s[r].c();f(l,"class","svelte-1jhjtdw"),f(i,"class","env-vars svelte-1jhjtdw"),f(e,"class","section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i);for(let c=0;c<s.length;c+=1)s[c]&&s[c].m(i,null)},p(r,u){if(u[0]&537133058){a=ae(Object.entries(r[74].env));let c;for(c=0;c<a.length;c+=1){const _=Lt(r,a,c);s[c]?s[c].p(_,u):(s[c]=Zt(_),s[c].c(),s[c].m(i,null))}for(;c<s.length;c+=1)s[c].d(1);s.length=a.length}},d(r){r&&w(e),ye(s,r)}}}function cn(t){let e,l=t[78]+"",n;return{c(){e=d("code"),n=p(l),f(e,"class","env-value svelte-1jhjtdw")},m(i,a){S(i,e,a),o(e,n)},p(i,a){a[0]&2&&l!==(l=i[78]+"")&&E(n,l)},d(i){i&&w(e)}}}function fn(t){let e,l=(t[18][t[77]]?t[78]:"••••••••")+"",n,i,a,s,r=t[18][t[77]]?"👁️":"🚫",u,c,_,h;function j(){return t[53](t[77])}return{c(){e=d("code"),n=p(l),a=g(),s=d("button"),u=p(r),f(e,"class",i="env-value "+(t[18][t[77]]?"":"masked")+" svelte-1jhjtdw"),f(s,"class","btn-toggle-secret svelte-1jhjtdw"),f(s,"title",c=t[18][t[77]]?"Hide":"Show")},m(m,b){S(m,e,b),o(e,n),S(m,a,b),S(m,s,b),o(s,u),_||(h=V(s,"click",j),_=!0)},p(m,b){t=m,b[0]&262146&&l!==(l=(t[18][t[77]]?t[78]:"••••••••")+"")&&E(n,l),b[0]&262146&&i!==(i="env-value "+(t[18][t[77]]?"":"masked")+" svelte-1jhjtdw")&&f(e,"class",i),b[0]&262146&&r!==(r=t[18][t[77]]?"👁️":"🚫")&&E(u,r),b[0]&262146&&c!==(c=t[18][t[77]]?"Hide":"Show")&&f(s,"title",c)},d(m){m&&(w(e),w(a),w(s)),_=!1,h()}}}function Zt(t){let e,l,n=t[77]+"",i,a,s,r,u;function c(j,m){return m[0]&2&&(r=null),r==null&&(r=!!El(j[77])),r?fn:cn}let _=c(t,[-1,-1,-1,-1]),h=_(t);return{c(){e=d("div"),l=d("code"),i=p(n),a=g(),s=d("div"),h.c(),u=g(),f(l,"class","env-key svelte-1jhjtdw"),f(s,"class","env-value-wrapper svelte-1jhjtdw"),f(e,"class","env-var svelte-1jhjtdw")},m(j,m){S(j,e,m),o(e,l),o(l,i),o(e,a),o(e,s),h.m(s,null),o(e,u)},p(j,m){m[0]&2&&n!==(n=j[77]+"")&&E(i,n),_===(_=c(j,m))&&h?h.p(j,m):(h.d(1),h=_(j),h&&(h.c(),h.m(s,null)))},d(j){j&&w(e),h.d()}}}function $t(t){let e,l,n,i=t[8][t[74].name]?"(loading...)":"",a,s;function r(_,h){return _[8][_[74].name]?_n:_[7][_[74].name]&&_[7][_[74].name].length>0?un:dn}let u=r(t),c=u(t);return{c(){e=d("div"),l=d("h4"),n=p("Tools "),a=p(i),s=g(),c.c(),f(l,"class","svelte-1jhjtdw"),f(e,"class","section svelte-1jhjtdw")},m(_,h){S(_,e,h),o(e,l),o(l,n),o(l,a),o(e,s),c.m(e,null)},p(_,h){h[0]&258&&i!==(i=_[8][_[74].name]?"(loading...)":"")&&E(a,i),u===(u=r(_))&&c?c.p(_,h):(c.d(1),c=u(_),c&&(c.c(),c.m(e,null)))},d(_){_&&w(e),c.d()}}}function dn(t){let e;return{c(){e=d("p"),e.textContent="No tools available",f(e,"class","no-tools svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function un(t){let e,l=ae(t[7][t[74].name]),n=[];for(let i=0;i<l.length;i+=1)n[i]=el(At(t,l,i));return{c(){e=d("div");for(let i=0;i<n.length;i+=1)n[i].c();f(e,"class","tools-list svelte-1jhjtdw")},m(i,a){S(i,e,a);for(let s=0;s<n.length;s+=1)n[s]&&n[s].m(e,null)},p(i,a){if(a[0]&268437122){l=ae(i[7][i[74].name]);let s;for(s=0;s<l.length;s+=1){const r=At(i,l,s);n[s]?n[s].p(r,a):(n[s]=el(r),n[s].c(),n[s].m(e,null))}for(;s<n.length;s+=1)n[s].d(1);n.length=l.length}},d(i){i&&w(e),ye(n,i)}}}function _n(t){let e;return{c(){e=d("p"),e.textContent="Loading tools...",f(e,"class","loading-tools svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function xt(t){let e,l,n=JSON.stringify(t[10][`${t[74].name}-${t[87].name||t[87]}`],null,2)+"",i;return{c(){e=d("div"),l=d("pre"),i=p(n),f(l,"class","svelte-1jhjtdw"),f(e,"class","tool-result svelte-1jhjtdw")},m(a,s){S(a,e,s),o(e,l),o(l,i)},p(a,s){s[0]&1154&&n!==(n=JSON.stringify(a[10][`${a[74].name}-${a[87].name||a[87]}`],null,2)+"")&&E(i,n)},d(a){a&&w(e)}}}function el(t){let e,l,n=(t[9][`${t[74].name}-${t[87].name||t[87]}`]?"...":t[87].name||t[87])+"",i,a,s,r,u,c;function _(){return t[54](t[74],t[87])}let h=t[10][`${t[74].name}-${t[87].name||t[87]}`]&&xt(t);return{c(){e=d("div"),l=d("button"),i=p(n),s=g(),h&&h.c(),r=g(),l.disabled=a=t[9][`${t[74].name}-${t[87].name||t[87]}`],f(l,"class","btn-execute-tool svelte-1jhjtdw"),f(e,"class","tool-container svelte-1jhjtdw")},m(j,m){S(j,e,m),o(e,l),o(l,i),o(e,s),h&&h.m(e,null),o(e,r),u||(c=V(l,"click",_),u=!0)},p(j,m){t=j,m[0]&642&&n!==(n=(t[9][`${t[74].name}-${t[87].name||t[87]}`]?"...":t[87].name||t[87])+"")&&E(i,n),m[0]&642&&a!==(a=t[9][`${t[74].name}-${t[87].name||t[87]}`])&&(l.disabled=a),t[10][`${t[74].name}-${t[87].name||t[87]}`]?h?h.p(t,m):(h=xt(t),h.c(),h.m(e,r)):h&&(h.d(1),h=null)},d(j){j&&w(e),h&&h.d(),u=!1,c()}}}function tl(t,e){var ue,te,we;let l,n,i,a,s=e[74].name+"",r,u,c,_=e[74].status+"",h,j,m,b,k=(ue=e[16][e[74].name])!=null&&ue.command?"▼":"▶",M,L,I,y,K,R,D=e[6][e[74].name]?"▼":"▶",O,J,H=Object.keys(e[74].env).length+"",B,q,X,P,T,le,Y,G,z,ce,Z;function de(){return e[47](e[74])}let A=e[74].args.length>0&&Ut(e),F=e[7][e[74].name]&&zt(e);function re(){return e[49](e[74])}function N(_e,ie){return _e[74].status==="running"?rn:an}let x=N(e),U=x(e),ne=((te=e[16][e[74].name])==null?void 0:te.command)&&Qt(e),se=((we=e[16][e[74].name])==null?void 0:we.args)&&e[74].args.length>0&&Wt(e),$=e[6][e[74].name]&&Xt(e);return{key:t,first:null,c(){l=d("div"),n=d("div"),i=d("div"),a=d("h3"),r=p(s),u=g(),c=d("span"),h=p(_),j=g(),m=d("div"),b=d("button"),M=p(k),L=p(" CMD"),I=g(),A&&A.c(),y=g(),K=d("div"),R=d("button"),O=p(D),J=p(" Details ("),B=p(H),q=p(" vars"),F&&F.c(),X=p(")"),P=g(),T=d("div"),U.c(),le=g(),ne&&ne.c(),Y=g(),se&&se.c(),G=g(),$&&$.c(),z=g(),f(a,"class","svelte-1jhjtdw"),f(c,"class","status-badge svelte-1jhjtdw"),Ze(c,"background-color",xe(e[74].status)),f(i,"class","server-list-name svelte-1jhjtdw"),f(b,"class","btn-info-toggle svelte-1jhjtdw"),f(m,"class","server-list-toggles svelte-1jhjtdw"),f(R,"class","btn-details svelte-1jhjtdw"),f(K,"class","server-list-details svelte-1jhjtdw"),f(T,"class","server-list-actions svelte-1jhjtdw"),f(n,"class","server-list-header svelte-1jhjtdw"),f(l,"class","server-list-item svelte-1jhjtdw"),this.first=l},m(_e,ie){S(_e,l,ie),o(l,n),o(n,i),o(i,a),o(a,r),o(i,u),o(i,c),o(c,h),o(n,j),o(n,m),o(m,b),o(b,M),o(b,L),o(m,I),A&&A.m(m,null),o(n,y),o(n,K),o(K,R),o(R,O),o(R,J),o(R,B),o(R,q),F&&F.m(R,null),o(R,X),o(n,P),o(n,T),U.m(T,null),o(l,le),ne&&ne.m(l,null),o(l,Y),se&&se.m(l,null),o(l,G),$&&$.m(l,null),o(l,z),ce||(Z=[V(b,"click",de),V(R,"click",re)],ce=!0)},p(_e,ie){var Se,De,Oe;e=_e,ie[0]&2&&s!==(s=e[74].name+"")&&E(r,s),ie[0]&2&&_!==(_=e[74].status+"")&&E(h,_),ie[0]&2&&Ze(c,"background-color",xe(e[74].status)),ie[0]&65538&&k!==(k=(Se=e[16][e[74].name])!=null&&Se.command?"▼":"▶")&&E(M,k),e[74].args.length>0?A?A.p(e,ie):(A=Ut(e),A.c(),A.m(m,null)):A&&(A.d(1),A=null),ie[0]&66&&D!==(D=e[6][e[74].name]?"▼":"▶")&&E(O,D),ie[0]&2&&H!==(H=Object.keys(e[74].env).length+"")&&E(B,H),e[7][e[74].name]?F?F.p(e,ie):(F=zt(e),F.c(),F.m(R,X)):F&&(F.d(1),F=null),x===(x=N(e))&&U?U.p(e,ie):(U.d(1),U=x(e),U&&(U.c(),U.m(T,null))),(De=e[16][e[74].name])!=null&&De.command?ne?ne.p(e,ie):(ne=Qt(e),ne.c(),ne.m(l,Y)):ne&&(ne.d(1),ne=null),(Oe=e[16][e[74].name])!=null&&Oe.args&&e[74].args.length>0?se?se.p(e,ie):(se=Wt(e),se.c(),se.m(l,G)):se&&(se.d(1),se=null),e[6][e[74].name]?$?$.p(e,ie):($=Xt(e),$.c(),$.m(l,z)):$&&($.d(1),$=null)},d(_e){_e&&w(l),A&&A.d(),F&&F.d(),U.d(),ne&&ne.d(),se&&se.d(),$&&$.d(),ce=!1,ke(Z)}}}function hn(t){let e,l=ae(t[11]),n=[];for(let i=0;i<l.length;i+=1)n[i]=al(kt(t,l,i));return{c(){e=d("div");for(let i=0;i<n.length;i+=1)n[i].c();f(e,"class","available-cards svelte-1jhjtdw")},m(i,a){S(i,e,a);for(let s=0;s<n.length;s+=1)n[s]&&n[s].m(e,null)},p(i,a){if(a[0]&67119104){l=ae(i[11]);let s;for(s=0;s<l.length;s+=1){const r=kt(i,l,s);n[s]?n[s].p(r,a):(n[s]=al(r),n[s].c(),n[s].m(e,null))}for(;s<n.length;s+=1)n[s].d(1);n.length=l.length}},d(i){i&&w(e),ye(n,i)}}}function vn(t){let e,l=ae(t[11]),n=[];for(let i=0;i<l.length;i+=1)n[i]=vl(St(t,l,i));return{c(){e=d("div");for(let i=0;i<n.length;i+=1)n[i].c();f(e,"class","available-list svelte-1jhjtdw")},m(i,a){S(i,e,a);for(let s=0;s<n.length;s+=1)n[s]&&n[s].m(e,null)},p(i,a){if(a[0]&67315712){l=ae(i[11]);let s;for(s=0;s<l.length;s+=1){const r=St(i,l,s);n[s]?n[s].p(r,a):(n[s]=vl(r),n[s].c(),n[s].m(e,null))}for(;s<n.length;s+=1)n[s].d(1);n.length=l.length}},d(i){i&&w(e),ye(n,i)}}}function mn(t){let e;return{c(){e=d("p"),e.textContent="Loading available servers...",f(e,"class","loading svelte-1jhjtdw")},m(l,n){S(l,e,n)},p:ge,d(l){l&&w(e)}}}function ll(t){let e,l,n,i,a=t[74].name+"",s,r,u,c,_,h,j,m,b,k=t[74].command+"",M,L,I,y=Object.keys(t[74].env).length>0,K,R,D,O=t[13][t[74].name]?"Enabling...":"Enable",J,H,B,q,X,P=t[74].args.length>0&&nl(t),T=y&&sl(t);function le(){return t[67](t[74])}return{c(){e=d("div"),l=d("div"),n=d("div"),i=d("h3"),s=p(a),r=g(),u=d("span"),u.textContent="available",c=g(),_=d("div"),h=d("div"),j=d("p"),j.innerHTML="<strong>Command:</strong>",m=g(),b=d("code"),M=p(k),L=g(),P&&P.c(),I=g(),T&&T.c(),K=g(),R=d("div"),D=d("button"),J=p(O),B=g(),f(i,"class","svelte-1jhjtdw"),f(u,"class","status-badge svelte-1jhjtdw"),f(n,"class","title-section svelte-1jhjtdw"),f(l,"class","card-header svelte-1jhjtdw"),f(j,"class","svelte-1jhjtdw"),f(b,"class","command-code svelte-1jhjtdw"),f(h,"class","info-section svelte-1jhjtdw"),f(_,"class","card-content svelte-1jhjtdw"),D.disabled=H=t[13][t[74].name],f(D,"class","btn-enable svelte-1jhjtdw"),f(R,"class","card-actions svelte-1jhjtdw"),f(e,"class","available-card svelte-1jhjtdw")},m(Y,G){S(Y,e,G),o(e,l),o(l,n),o(n,i),o(i,s),o(n,r),o(n,u),o(e,c),o(e,_),o(_,h),o(h,j),o(h,m),o(h,b),o(b,M),o(_,L),P&&P.m(_,null),o(_,I),T&&T.m(_,null),o(e,K),o(e,R),o(R,D),o(D,J),o(e,B),q||(X=V(D,"click",le),q=!0)},p(Y,G){t=Y,G[0]&2048&&a!==(a=t[74].name+"")&&E(s,a),G[0]&2048&&k!==(k=t[74].command+"")&&E(M,k),t[74].args.length>0?P?P.p(t,G):(P=nl(t),P.c(),P.m(_,I)):P&&(P.d(1),P=null),G[0]&2048&&(y=Object.keys(t[74].env).length>0),y?T?T.p(t,G):(T=sl(t),T.c(),T.m(_,null)):T&&(T.d(1),T=null),G[0]&10240&&O!==(O=t[13][t[74].name]?"Enabling...":"Enable")&&E(J,O),G[0]&10240&&H!==(H=t[13][t[74].name])&&(D.disabled=H)},d(Y){Y&&w(e),P&&P.d(),T&&T.d(),q=!1,X()}}}function nl(t){let e,l,n,i,a=t[74].args.join(" ")+"",s;return{c(){e=d("div"),l=d("p"),l.innerHTML="<strong>Args:</strong>",n=g(),i=d("code"),s=p(a),f(l,"class","svelte-1jhjtdw"),f(i,"class","args-code svelte-1jhjtdw"),f(e,"class","info-section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2048&&a!==(a=r[74].args.join(" ")+"")&&E(s,a)},d(r){r&&w(e)}}}function sl(t){let e,l,n,i,a=Object.keys(t[74].env).length+"",s,r,u,c,_,h=Object.keys(t[74].env).length>3,j=ae(Object.entries(t[74].env).slice(0,3)),m=[];for(let k=0;k<j.length;k+=1)m[k]=il(wt(t,j,k));let b=h&&ol(t);return{c(){e=d("div"),l=d("p"),n=d("strong"),n.textContent="Environment Variables:",i=p(" ("),s=p(a),r=p(")"),u=g(),c=d("div");for(let k=0;k<m.length;k+=1)m[k].c();_=g(),b&&b.c(),f(l,"class","svelte-1jhjtdw"),f(c,"class","mini-env-vars svelte-1jhjtdw"),f(e,"class","info-section svelte-1jhjtdw")},m(k,M){S(k,e,M),o(e,l),o(l,n),o(l,i),o(l,s),o(l,r),o(e,u),o(e,c);for(let L=0;L<m.length;L+=1)m[L]&&m[L].m(c,null);o(c,_),b&&b.m(c,null)},p(k,M){if(M[0]&2048&&a!==(a=Object.keys(k[74].env).length+"")&&E(s,a),M[0]&2048){j=ae(Object.entries(k[74].env).slice(0,3));let L;for(L=0;L<j.length;L+=1){const I=wt(k,j,L);m[L]?m[L].p(I,M):(m[L]=il(I),m[L].c(),m[L].m(c,_))}for(;L<m.length;L+=1)m[L].d(1);m.length=j.length}M[0]&2048&&(h=Object.keys(k[74].env).length>3),h?b?b.p(k,M):(b=ol(k),b.c(),b.m(c,null)):b&&(b.d(1),b=null)},d(k){k&&w(e),ye(m,k),b&&b.d()}}}function il(t){let e,l,n=t[77]+"",i,a,s=t[78]?t[78].substring(0,30)+(t[78].length>30?"...":""):"",r;return{c(){e=d("div"),l=d("code"),i=p(n),a=p("="),r=p(s),f(l,"class","env-key svelte-1jhjtdw"),f(e,"class","mini-env svelte-1jhjtdw")},m(u,c){S(u,e,c),o(e,l),o(l,i),o(e,a),o(e,r)},p(u,c){c[0]&2048&&n!==(n=u[77]+"")&&E(i,n),c[0]&2048&&s!==(s=u[78]?u[78].substring(0,30)+(u[78].length>30?"...":""):"")&&E(r,s)},d(u){u&&w(e)}}}function ol(t){let e,l,n,i=Object.keys(t[74].env).length-3+"",a,s;return{c(){e=d("div"),l=d("em"),n=p("+"),a=p(i),s=p(" more"),f(l,"class","svelte-1jhjtdw"),f(e,"class","mini-env svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(l,n),o(l,a),o(l,s)},p(r,u){u[0]&2048&&i!==(i=Object.keys(r[74].env).length-3+"")&&E(a,i)},d(r){r&&w(e)}}}function al(t){let e,l=!t[74].enabled&&ll(t);return{c(){l&&l.c(),e=pl()},m(n,i){l&&l.m(n,i),S(n,e,i)},p(n,i){n[74].enabled?l&&(l.d(1),l=null):l?l.p(n,i):(l=ll(n),l.c(),l.m(e.parentNode,e))},d(n){n&&w(e),l&&l.d(n)}}}function rl(t){var ne,se,$;let e,l,n,i,a=t[74].name+"",s,r,u,c,_,h,j=(ne=t[16][t[74].name])!=null&&ne.command?"▼":"▶",m,b,k,M,L,I,y=t[17][t[74].name]?"▼":"▶",K,R,D=Object.keys(t[74].env).length+"",O,J,H,B,q,X=t[13][t[74].name]?"Enabling...":"ENABLE",P,T,le,Y,G,z,ce,Z;function de(){return t[63](t[74])}let A=t[74].args.length>0&&cl(t);function F(){return t[65](t[74])}function re(){return t[66](t[74])}let N=((se=t[16][t[74].name])==null?void 0:se.command)&&fl(t),x=(($=t[16][t[74].name])==null?void 0:$.args)&&t[74].args.length>0&&dl(t),U=t[17][t[74].name]&&ul(t);return{c(){e=d("div"),l=d("div"),n=d("div"),i=d("h3"),s=p(a),r=g(),u=d("span"),u.textContent="available",c=g(),_=d("div"),h=d("button"),m=p(j),b=p(" CMD"),k=g(),A&&A.c(),M=g(),L=d("div"),I=d("button"),K=p(y),R=p(" DETAILS ("),O=p(D),J=p(")"),H=g(),B=d("div"),q=d("button"),P=p(X),le=g(),N&&N.c(),Y=g(),x&&x.c(),G=g(),U&&U.c(),z=g(),f(i,"class","svelte-1jhjtdw"),f(u,"class","status-badge svelte-1jhjtdw"),f(n,"class","available-list-name svelte-1jhjtdw"),f(h,"class","btn-info-toggle svelte-1jhjtdw"),f(_,"class","available-list-toggles svelte-1jhjtdw"),f(I,"class","btn-details svelte-1jhjtdw"),f(L,"class","available-list-details svelte-1jhjtdw"),q.disabled=T=t[13][t[74].name],f(q,"class","btn-success svelte-1jhjtdw"),f(B,"class","available-list-actions svelte-1jhjtdw"),f(l,"class","available-list-header svelte-1jhjtdw"),f(e,"class","available-list-item svelte-1jhjtdw")},m(ue,te){S(ue,e,te),o(e,l),o(l,n),o(n,i),o(i,s),o(n,r),o(n,u),o(l,c),o(l,_),o(_,h),o(h,m),o(h,b),o(_,k),A&&A.m(_,null),o(l,M),o(l,L),o(L,I),o(I,K),o(I,R),o(I,O),o(I,J),o(l,H),o(l,B),o(B,q),o(q,P),o(e,le),N&&N.m(e,null),o(e,Y),x&&x.m(e,null),o(e,G),U&&U.m(e,null),o(e,z),ce||(Z=[V(h,"click",de),V(I,"click",F),V(q,"click",re)],ce=!0)},p(ue,te){var we,_e,ie;t=ue,te[0]&2048&&a!==(a=t[74].name+"")&&E(s,a),te[0]&67584&&j!==(j=(we=t[16][t[74].name])!=null&&we.command?"▼":"▶")&&E(m,j),t[74].args.length>0?A?A.p(t,te):(A=cl(t),A.c(),A.m(_,null)):A&&(A.d(1),A=null),te[0]&133120&&y!==(y=t[17][t[74].name]?"▼":"▶")&&E(K,y),te[0]&2048&&D!==(D=Object.keys(t[74].env).length+"")&&E(O,D),te[0]&10240&&X!==(X=t[13][t[74].name]?"Enabling...":"ENABLE")&&E(P,X),te[0]&10240&&T!==(T=t[13][t[74].name])&&(q.disabled=T),(_e=t[16][t[74].name])!=null&&_e.command?N?N.p(t,te):(N=fl(t),N.c(),N.m(e,Y)):N&&(N.d(1),N=null),(ie=t[16][t[74].name])!=null&&ie.args&&t[74].args.length>0?x?x.p(t,te):(x=dl(t),x.c(),x.m(e,G)):x&&(x.d(1),x=null),t[17][t[74].name]?U?U.p(t,te):(U=ul(t),U.c(),U.m(e,z)):U&&(U.d(1),U=null)},d(ue){ue&&w(e),A&&A.d(),N&&N.d(),x&&x.d(),U&&U.d(),ce=!1,ke(Z)}}}function cl(t){var u;let e,l=(u=t[16][t[74].name])!=null&&u.args?"▼":"▶",n,i,a,s;function r(){return t[64](t[74])}return{c(){e=d("button"),n=p(l),i=p(" ARGS"),f(e,"class","btn-info-toggle svelte-1jhjtdw")},m(c,_){S(c,e,_),o(e,n),o(e,i),a||(s=V(e,"click",r),a=!0)},p(c,_){var h;t=c,_[0]&67584&&l!==(l=(h=t[16][t[74].name])!=null&&h.args?"▼":"▶")&&E(n,l)},d(c){c&&w(e),a=!1,s()}}}function fl(t){let e,l,n,i,a=t[74].command+"",s;return{c(){e=d("div"),l=d("strong"),l.textContent="Command:",n=g(),i=d("code"),s=p(a),f(l,"class","svelte-1jhjtdw"),f(i,"class","svelte-1jhjtdw"),f(e,"class","server-info-section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2048&&a!==(a=r[74].command+"")&&E(s,a)},d(r){r&&w(e)}}}function dl(t){let e,l,n,i,a=t[74].args.join(" ")+"",s;return{c(){e=d("div"),l=d("strong"),l.textContent="Args:",n=g(),i=d("code"),s=p(a),f(l,"class","svelte-1jhjtdw"),f(i,"class","svelte-1jhjtdw"),f(e,"class","server-info-section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i),o(i,s)},p(r,u){u[0]&2048&&a!==(a=r[74].args.join(" ")+"")&&E(s,a)},d(r){r&&w(e)}}}function ul(t){let e,l=Object.keys(t[74].env).length>0,n=l&&_l(t);return{c(){e=d("div"),n&&n.c(),f(e,"class","server-expanded svelte-1jhjtdw")},m(i,a){S(i,e,a),n&&n.m(e,null)},p(i,a){a[0]&2048&&(l=Object.keys(i[74].env).length>0),l?n?n.p(i,a):(n=_l(i),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(i){i&&w(e),n&&n.d()}}}function _l(t){let e,l,n,i,a=ae(Object.entries(t[74].env)),s=[];for(let r=0;r<a.length;r+=1)s[r]=hl(Et(t,a,r));return{c(){e=d("div"),l=d("h4"),l.textContent="Environment Variables",n=g(),i=d("div");for(let r=0;r<s.length;r+=1)s[r].c();f(l,"class","svelte-1jhjtdw"),f(i,"class","env-vars svelte-1jhjtdw"),f(e,"class","section svelte-1jhjtdw")},m(r,u){S(r,e,u),o(e,l),o(e,n),o(e,i);for(let c=0;c<s.length;c+=1)s[c]&&s[c].m(i,null)},p(r,u){if(u[0]&2048){a=ae(Object.entries(r[74].env));let c;for(c=0;c<a.length;c+=1){const _=Et(r,a,c);s[c]?s[c].p(_,u):(s[c]=hl(_),s[c].c(),s[c].m(i,null))}for(;c<s.length;c+=1)s[c].d(1);s.length=a.length}},d(r){r&&w(e),ye(s,r)}}}function hl(t){let e,l,n=t[77]+"",i,a,s,r=t[78]+"",u,c;return{c(){e=d("div"),l=d("code"),i=p(n),a=g(),s=d("code"),u=p(r),c=g(),f(l,"class","env-key svelte-1jhjtdw"),f(s,"class","env-value svelte-1jhjtdw"),f(e,"class","env-var svelte-1jhjtdw")},m(_,h){S(_,e,h),o(e,l),o(l,i),o(e,a),o(e,s),o(s,u),o(e,c)},p(_,h){h[0]&2048&&n!==(n=_[77]+"")&&E(i,n),h[0]&2048&&r!==(r=_[78]+"")&&E(u,r)},d(_){_&&w(e)}}}function vl(t){let e,l=!t[74].enabled&&rl(t);return{c(){l&&l.c(),e=pl()},m(n,i){l&&l.m(n,i),S(n,e,i)},p(n,i){n[74].enabled?l&&(l.d(1),l=null):l?l.p(n,i):(l=rl(n),l.c(),l.m(e.parentNode,e))},d(n){n&&w(e),l&&l.d(n)}}}function jn(t){let e,l,n,i,a,s,r,u,c,_,h,j,m,b,k,M,L,I,y,K,R,D,O,J,H,B,q,X,P,T,le,Y,G,z,ce,Z,de,A,F,re,N,x=t[1].length+"",U,ne,se,$,ue,te,we,_e,ie,Se,De,Oe,et,tt,lt,Te,Ae,Le,nt,Ne=t[11].filter(ml).length+"",We,st,it,Pe,Me,ot,Ke,at,Re,rt,qe,ct,ft,Ge,v,Q,W,oe,he,Fe,ve=t[4]&&Mt(t),fe=t[2]&&Rt(t),Ie=ae(t[1]),je=[];for(let C=0;C<Ie.length;C+=1)je[C]=Ht(Pt(t,Ie,C));let be=t[24]&&Dt(t),pe=t[1].length>0&&Ft(t);function ht(C,ee){return C[3]?$l:C[1].length===0?Zl:C[15]==="list"?Yl:Xl}let Xe=ht(t),Ee=Xe(t);function vt(C,ee){return C[12]?mn:C[14]==="list"?vn:hn}let Ye=vt(t),Ce=Ye(t);return{c(){e=d("main"),l=d("header"),n=d("h1"),n.textContent="MetaLink Dashboard",i=g(),a=d("p"),s=p("v"),r=p(t[0]),u=g(),ve&&ve.c(),c=g(),_=d("div"),fe&&fe.c(),h=g(),j=d("section"),m=d("h2"),m.textContent="MetaLink Core Commands",b=g(),k=d("div"),M=d("button"),L=p("List Available Servers"),I=g(),y=d("button"),K=p("List Active Servers"),R=g(),D=d("div"),O=d("input"),J=g(),H=d("button"),B=p("Search Tools"),X=g(),P=d("div"),T=d("select"),le=d("option"),le.textContent="Select server...";for(let C=0;C<je.length;C+=1)je[C].c();Y=g(),G=d("button"),z=p("List Tools"),Z=g(),be&&be.c(),de=g(),A=d("section"),F=d("div"),re=d("h2"),N=p("Active Servers ("),U=p(x),ne=p(")"),se=g(),$=d("div"),ue=d("div"),te=d("button"),we=p("List"),ie=g(),Se=d("button"),De=p("Cards"),et=g(),pe&&pe.c(),tt=g(),Ee.c(),lt=g(),Te=d("section"),Ae=d("div"),Le=d("h2"),nt=p("Available Servers ("),We=p(Ne),st=p(" can be enabled)"),it=g(),Pe=d("div"),Me=d("button"),ot=p("List"),at=g(),Re=d("button"),rt=p("Cards"),ct=g(),Ce.c(),ft=g(),Ge=d("footer"),v=d("p"),Q=p("MetaLink v"),W=p(t[0]),oe=p(" | Press F12 for API details"),f(n,"class","svelte-1jhjtdw"),f(a,"class","version svelte-1jhjtdw"),f(l,"class","svelte-1jhjtdw"),f(m,"class","svelte-1jhjtdw"),M.disabled=t[21],f(M,"class","btn-command svelte-1jhjtdw"),y.disabled=t[21],f(y,"class","btn-command svelte-1jhjtdw"),f(O,"type","text"),f(O,"placeholder","Search tools..."),f(O,"class","svelte-1jhjtdw"),H.disabled=q=t[21]||!t[23].trim(),f(H,"class","btn-command svelte-1jhjtdw"),f(D,"class","search-command svelte-1jhjtdw"),le.__value="",Ue(le,le.__value),f(le,"class","svelte-1jhjtdw"),f(T,"class","cmd-select svelte-1jhjtdw"),t[25]===void 0&&$e(()=>t[41].call(T)),G.disabled=ce=t[21]||!t[25],f(G,"class","btn-command svelte-1jhjtdw"),f(P,"class","search-command svelte-1jhjtdw"),f(k,"class","commands-grid svelte-1jhjtdw"),f(j,"class","metalink-commands svelte-1jhjtdw"),f(_,"class","dashboard-top-sections svelte-1jhjtdw"),f(re,"class","svelte-1jhjtdw"),f(te,"class",_e="toggle-btn "+(t[15]==="list"?"active":"")+" svelte-1jhjtdw"),f(Se,"class",Oe="toggle-btn "+(t[15]==="cards"?"active":"")+" svelte-1jhjtdw"),f(ue,"class","view-toggle svelte-1jhjtdw"),f($,"class","header-actions svelte-1jhjtdw"),f(F,"class","servers-header svelte-1jhjtdw"),f(A,"class","servers svelte-1jhjtdw"),f(Le,"class","svelte-1jhjtdw"),f(Me,"class",Ke="toggle-btn "+(t[14]==="list"?"active":"")+" svelte-1jhjtdw"),f(Re,"class",qe="toggle-btn "+(t[14]==="cards"?"active":"")+" svelte-1jhjtdw"),f(Pe,"class","view-toggle svelte-1jhjtdw"),f(Ae,"class","available-header svelte-1jhjtdw"),f(Te,"class","available-servers svelte-1jhjtdw"),f(Ge,"class","svelte-1jhjtdw"),f(e,"class","svelte-1jhjtdw")},m(C,ee){S(C,e,ee),o(e,l),o(l,n),o(l,i),o(l,a),o(a,s),o(a,r),o(e,u),ve&&ve.m(e,null),o(e,c),o(e,_),fe&&fe.m(_,null),o(_,h),o(_,j),o(j,m),o(j,b),o(j,k),o(k,M),o(M,L),o(k,I),o(k,y),o(y,K),o(k,R),o(k,D),o(D,O),Ue(O,t[23]),o(D,J),o(D,H),o(H,B),o(k,X),o(k,P),o(P,T),o(T,le);for(let me=0;me<je.length;me+=1)je[me]&&je[me].m(T,null);bt(T,t[25],!0),o(P,Y),o(P,G),o(G,z),o(e,Z),be&&be.m(e,null),o(e,de),o(e,A),o(A,F),o(F,re),o(re,N),o(re,U),o(re,ne),o(F,se),o(F,$),o($,ue),o(ue,te),o(te,we),o(ue,ie),o(ue,Se),o(Se,De),o($,et),pe&&pe.m($,null),o(A,tt),Ee.m(A,null),o(e,lt),o(e,Te),o(Te,Ae),o(Ae,Le),o(Le,nt),o(Le,We),o(Le,st),o(Ae,it),o(Ae,Pe),o(Pe,Me),o(Me,ot),o(Pe,at),o(Pe,Re),o(Re,rt),o(Te,ct),Ce.m(Te,null),o(e,ft),o(e,Ge),o(Ge,v),o(v,Q),o(v,W),o(v,oe),he||(Fe=[V(M,"click",t[36]),V(y,"click",t[37]),V(O,"input",t[38]),V(O,"keydown",t[39]),V(H,"click",t[40]),V(T,"change",t[41]),V(G,"click",t[42]),V(te,"click",t[45]),V(Se,"click",t[46]),V(Me,"click",t[61]),V(Re,"click",t[62])],he=!0)},p(C,ee){if(ee[0]&1&&E(r,C[0]),C[4]?ve?ve.p(C,ee):(ve=Mt(C),ve.c(),ve.m(e,c)):ve&&(ve.d(1),ve=null),C[2]?fe?fe.p(C,ee):(fe=Rt(C),fe.c(),fe.m(_,h)):fe&&(fe.d(1),fe=null),ee[0]&2097152&&(M.disabled=C[21]),ee[0]&2097152&&(y.disabled=C[21]),ee[0]&8388608&&O.value!==C[23]&&Ue(O,C[23]),ee[0]&10485760&&q!==(q=C[21]||!C[23].trim())&&(H.disabled=q),ee[0]&2){Ie=ae(C[1]);let me;for(me=0;me<Ie.length;me+=1){const mt=Pt(C,Ie,me);je[me]?je[me].p(mt,ee):(je[me]=Ht(mt),je[me].c(),je[me].m(T,null))}for(;me<je.length;me+=1)je[me].d(1);je.length=Ie.length}ee[0]&33554434&&bt(T,C[25]),ee[0]&35651586&&ce!==(ce=C[21]||!C[25])&&(G.disabled=ce),C[24]?be?be.p(C,ee):(be=Dt(C),be.c(),be.m(e,de)):be&&(be.d(1),be=null),ee[0]&2&&x!==(x=C[1].length+"")&&E(U,x),ee[0]&32768&&_e!==(_e="toggle-btn "+(C[15]==="list"?"active":"")+" svelte-1jhjtdw")&&f(te,"class",_e),ee[0]&32768&&Oe!==(Oe="toggle-btn "+(C[15]==="cards"?"active":"")+" svelte-1jhjtdw")&&f(Se,"class",Oe),C[1].length>0?pe?pe.p(C,ee):(pe=Ft(C),pe.c(),pe.m($,null)):pe&&(pe.d(1),pe=null),Xe===(Xe=ht(C))&&Ee?Ee.p(C,ee):(Ee.d(1),Ee=Xe(C),Ee&&(Ee.c(),Ee.m(A,null))),ee[0]&2048&&Ne!==(Ne=C[11].filter(ml).length+"")&&E(We,Ne),ee[0]&16384&&Ke!==(Ke="toggle-btn "+(C[14]==="list"?"active":"")+" svelte-1jhjtdw")&&f(Me,"class",Ke),ee[0]&16384&&qe!==(qe="toggle-btn "+(C[14]==="cards"?"active":"")+" svelte-1jhjtdw")&&f(Re,"class",qe),Ye===(Ye=vt(C))&&Ce?Ce.p(C,ee):(Ce.d(1),Ce=Ye(C),Ce&&(Ce.c(),Ce.m(Te,null))),ee[0]&1&&E(W,C[0])},i:ge,o:ge,d(C){C&&w(e),ve&&ve.d(),fe&&fe.d(),ye(je,C),be&&be.d(),pe&&pe.d(),Ee.d(),Ce.d(),he=!1,ke(Fe)}}}const He="/api/v1";function El(t){const e=["pass","password","key","secret","token","api","auth","credential"],l=t.toLowerCase();return e.some(n=>l.includes(n))}function xe(t){switch(t){case"running":return"#10b981";case"stopped":return"#6b7280";case"crashed":return"#ef4444";default:return"#9ca3af"}}const ml=t=>!t.enabled;function bn(t,e,l){let n="1.0.0",i=[],a=null,s=!0,r=null,u={},c={},_={},h={},j={},m={},b=[],k=!1,M={},L="list",I="list",y={},K={},R={},D=!1,O=null,J=!1,H=null,B="",q=!1,X="";async function P(){try{const v=await fetch(`${He}/servers`);if(!v.ok)throw new Error(`API error: ${v.status}`);const Q=await v.json();l(1,i=Q.servers||[])}catch(v){l(4,r=`Failed to fetch servers: ${v instanceof Error?v.message:String(v)}`)}}async function T(){l(12,k=!0);try{const v=await fetch(`${He}/servers/available/list`);if(!v.ok)throw new Error(`API error: ${v.status}`);const Q=await v.json();l(11,b=Q.servers||[])}catch(v){console.error("Failed to fetch available servers:",v),l(11,b=[])}finally{l(12,k=!1)}}async function le(v,Q){l(13,M[v]=!0,M);try{const W=await fetch(`${He}/servers/${v}/${Q}`,{method:"POST"});if(!W.ok)throw new Error(`Action failed: ${W.status}`);await P(),await T()}catch(W){l(4,r=`Failed to ${Q} ${v}: ${W instanceof Error?W.message:String(W)}`)}finally{l(13,M[v]=!1,M)}}async function Y(){try{const v=await fetch(`${He}/health`);if(!v.ok)throw new Error(`Health check failed: ${v.status}`);l(2,a=await v.json())}catch(v){console.error("Health check error:",v)}}async function G(v){var Q,W,oe;if(!h[v]){l(8,h[v]=!0,h),l(8,h={...h});try{const he=await fetch("/mcp",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:Math.random(),method:"tools/call",params:{name:"list_tools",arguments:{server_name:v}}})});if(!he.ok)console.warn(`Failed to fetch tools for ${v}: ${he.status}`),l(7,_={..._,[v]:[]});else{const ve=(oe=(W=(Q=(await he.json()).result)==null?void 0:Q.content)==null?void 0:W[0])==null?void 0:oe.text;if(ve)try{const fe=JSON.parse(ve);l(7,_={..._,[v]:fe.tools||[]})}catch(fe){console.error(`Failed to parse tools for ${v}:`,fe),l(7,_={..._,[v]:[]})}else console.warn(`No content text in response for ${v}`),l(7,_={..._,[v]:[]})}}catch(he){console.error(`Error fetching tools for ${v}:`,he),l(7,_={..._,[v]:[]})}finally{l(8,h[v]=!1,h),l(8,h={...h})}}}function z(v){l(6,c[v]=!c[v],c),c[v]&&G(v)}async function ce(v,Q){const W=`${v}-${Q}`;l(9,j[W]=!0,j);try{const oe=await fetch("/mcp",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:Math.random(),method:"tools/call",params:{name:`${v}-${Q}`,arguments:{}}})});if(!oe.ok)l(10,m[W]={success:!1,error:`HTTP ${oe.status}: ${oe.statusText}`},m);else{const he=await oe.json();l(10,m[W]=he.result||he,m)}}catch(oe){l(10,m[W]={success:!1,error:oe instanceof Error?oe.message:String(oe)},m)}finally{l(9,j[W]=!1,j)}}function Z(v){l(18,R[v]=!R[v],R)}async function de(v,Q,W){l(21,J=!0),l(22,H=null),l(20,O=null),l(24,q=!0);try{const oe={};v==="search_tools"&&Q&&(oe.query=Q),v==="list_tools"&&W&&(oe.server_name=W);const he=await fetch("/mcp",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:Math.random(),method:"tools/call",params:{name:v,arguments:oe}})});if(!he.ok)throw new Error(`HTTP ${he.status}: ${he.statusText}`);const Fe=await he.json();l(20,O=Fe.result||Fe)}catch(oe){l(22,H=oe instanceof Error?oe.message:String(oe))}finally{l(21,J=!1)}}async function A(v,Q){l(5,u[v]=!0,u);try{const W=await fetch(`${He}/servers/${v}/${Q}`,{method:"POST"});if(!W.ok)throw new Error(`Action failed: ${W.status}`);await P(),await Y()}catch(W){l(4,r=`Failed to ${Q} ${v}: ${W instanceof Error?W.message:String(W)}`)}finally{l(5,u[v]=!1,u)}}function F(){try{const v=new EventSource(`${He}/events`);v.addEventListener("server:started",()=>{P(),Y()}),v.addEventListener("server:stopped",()=>{P(),Y()}),v.addEventListener("server:error",()=>{P(),Y()}),v.addEventListener("health:check",()=>{Y()}),v.onerror=()=>{console.error("SSE connection lost"),v.close(),setTimeout(F,3e3)}}catch(v){console.error("SSE connection error:",v),setTimeout(F,3e3)}}Rl(async()=>{await re(),await P(),await T(),await Y(),l(3,s=!1),F()});async function re(){try{const v=await fetch(`${He}/version`);if(v.ok){const Q=await v.json();l(0,n=Q.version||"1.0.0")}}catch(v){console.warn("Failed to fetch version:",v)}}function N(){for(const v of i)l(6,c[v.name]=!0,c),G(v.name);l(6,c={...c}),l(19,D=!0)}function x(){l(6,c={}),l(19,D=!1)}function U(v){Hl.call(this,t,v)}const ne=()=>l(4,r=null),se=()=>de("list_available_servers"),$=()=>de("list_servers");function ue(){B=this.value,l(23,B)}const te=v=>{v.key==="Enter"&&B.trim()&&de("search_tools",B)},we=()=>de("search_tools",B);function _e(){X=Pl(this),l(25,X),l(1,i)}return[n,i,a,s,r,u,c,_,h,j,m,b,k,M,L,I,y,K,R,D,O,J,H,B,q,X,le,z,ce,Z,de,A,N,x,U,ne,se,$,ue,te,we,_e,()=>de("list_tools",void 0,X),()=>l(24,q=!1),()=>l(24,q=!1),()=>l(15,I="list"),()=>l(15,I="cards"),v=>{y[v.name]||l(16,y[v.name]={command:!1,args:!1},y),l(16,y[v.name].command=!y[v.name].command,y)},v=>{y[v.name]||l(16,y[v.name]={command:!1,args:!1},y),l(16,y[v.name].args=!y[v.name].args,y)},v=>z(v.name),v=>A(v.name,"stop"),v=>A(v.name,"restart"),v=>A(v.name,"start"),v=>Z(v),(v,Q)=>ce(v.name,Q.name||Q),v=>z(v.name),v=>Z(v),(v,Q)=>ce(v.name,Q.name||Q),v=>A(v.name,"stop"),v=>A(v.name,"restart"),v=>A(v.name,"start"),()=>l(14,L="list"),()=>l(14,L="cards"),v=>{y[v.name]||l(16,y[v.name]={command:!1,args:!1},y),l(16,y[v.name].command=!y[v.name].command,y)},v=>{y[v.name]||l(16,y[v.name]={command:!1,args:!1},y),l(16,y[v.name].args=!y[v.name].args,y)},v=>{l(17,K[v.name]=!K[v.name],K)},v=>le(v.name,"enable"),v=>le(v.name,"enable")]}class pn extends Gl{constructor(e){super(),ql(this,e,bn,jn,Ol,{},null,[-1,-1,-1,-1])}}new pn({target:document.getElementById("app")});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>MetaLink Dashboard</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-yZhLPpzr.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B7hvkCMu.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@metalink/dashboard",
|
|
3
|
+
"version": "1.3.1",
|
|
4
|
+
"description": "MetaLink Web Dashboard",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"preview": "vite preview",
|
|
10
|
+
"test": "vitest"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@metalink/core": "file:../core",
|
|
14
|
+
"svelte": "^4.0.0"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@sveltejs/adapter-static": "^2.0.0",
|
|
18
|
+
"@sveltejs/vite-plugin-svelte": "^2.4.0",
|
|
19
|
+
"svelte": "^4.0.0",
|
|
20
|
+
"typescript": "^5.0.0",
|
|
21
|
+
"vite": "^5.0.0",
|
|
22
|
+
"vitest": "^1.0.0"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@metalink/shared",
|
|
3
|
+
"version": "1.3.1",
|
|
4
|
+
"description": "Shared utilities and types for MetaLink",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./version.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc"
|
|
9
|
+
},
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./version.js",
|
|
12
|
+
"./version": "./version.js",
|
|
13
|
+
"./version.js": "./version.js"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"typescript": "^5.0.0"
|
|
17
|
+
}
|
|
18
|
+
}
|