@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,85 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { getConfiguredPort, isLaunchAgentLoaded, getLaunchAgentPlistPath, launchctlLoad, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
|
|
5
|
+
class DaemonStart extends Command {
|
|
6
|
+
async run() {
|
|
7
|
+
try {
|
|
8
|
+
const port = getConfiguredPort();
|
|
9
|
+
const plistPath = getLaunchAgentPlistPath();
|
|
10
|
+
// Check if plist exists
|
|
11
|
+
if (!fs.existsSync(plistPath)) {
|
|
12
|
+
this.error(`LaunchAgent plist not found: ${plistPath}\n\n` +
|
|
13
|
+
'The plist file is required for daemon management.\n' +
|
|
14
|
+
'Run ./auto-deploy.sh to set up the LaunchAgent.');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// Check if already loaded and running
|
|
18
|
+
if (isLaunchAgentLoaded()) {
|
|
19
|
+
const pid = getLaunchdPid();
|
|
20
|
+
if (pid) {
|
|
21
|
+
this.log(`Daemon already running (PID: ${pid}, port: ${port})`);
|
|
22
|
+
this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Loaded but not running - try to kickstart
|
|
26
|
+
this.log('LaunchAgent loaded but daemon not running, restarting...');
|
|
27
|
+
try {
|
|
28
|
+
execSync(`launchctl kickstart -k gui/$(id -u)/${LAUNCHD_SERVICE_NAME}`, {
|
|
29
|
+
encoding: 'utf-8',
|
|
30
|
+
stdio: 'pipe'
|
|
31
|
+
});
|
|
32
|
+
// Wait for startup
|
|
33
|
+
await this.waitForDaemon(port, 5000);
|
|
34
|
+
const newPid = getLaunchdPid();
|
|
35
|
+
this.log(`Daemon started (PID: ${newPid}, port: ${port})`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
this.warn('Kickstart failed, trying unload/load cycle...');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Load the LaunchAgent
|
|
43
|
+
this.log(`Starting daemon on port ${port}...`);
|
|
44
|
+
if (launchctlLoad()) {
|
|
45
|
+
// Wait for daemon to start
|
|
46
|
+
await this.waitForDaemon(port, 5000);
|
|
47
|
+
const pid = getLaunchdPid();
|
|
48
|
+
if (pid) {
|
|
49
|
+
this.log(`Daemon started successfully (PID: ${pid})`);
|
|
50
|
+
this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
|
|
51
|
+
this.log(`Port: ${port}`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.log('Daemon started (launchd managing process)');
|
|
55
|
+
this.log(`Port: ${port}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.error('Failed to load LaunchAgent. Check logs: tail -f ~/mcp/metalink/logs/metalink-launchd.log');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.error(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async waitForDaemon(port, timeoutMs) {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
69
|
+
try {
|
|
70
|
+
execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
|
|
71
|
+
encoding: 'utf-8',
|
|
72
|
+
stdio: ['pipe', 'pipe', 'ignore']
|
|
73
|
+
});
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
DaemonStart.description = 'Start the MetaLink daemon via launchd';
|
|
84
|
+
export default DaemonStart;
|
|
85
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/daemon/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAUtC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,MAAM,CAAC,WAAW,SAA6C;IAEzD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,OAAO,CAAC,UAAU;CAiBnB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { getConfiguredPort, isLaunchAgentLoaded, getLaunchAgentPlistPath, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
|
|
4
|
+
class DaemonStatus extends Command {
|
|
5
|
+
async run() {
|
|
6
|
+
try {
|
|
7
|
+
const port = getConfiguredPort();
|
|
8
|
+
const plistPath = getLaunchAgentPlistPath();
|
|
9
|
+
// Check LaunchAgent status
|
|
10
|
+
const launchAgentLoaded = isLaunchAgentLoaded();
|
|
11
|
+
if (launchAgentLoaded) {
|
|
12
|
+
const launchdPid = getLaunchdPid();
|
|
13
|
+
const portPid = this.getPortPid(port);
|
|
14
|
+
if (launchdPid && portPid) {
|
|
15
|
+
this.log(`Daemon is running (PID: ${portPid}, port: ${port})`);
|
|
16
|
+
this.log(`Service: ${LAUNCHD_SERVICE_NAME} (launchd managed)`);
|
|
17
|
+
this.log(`Plist: ${plistPath}`);
|
|
18
|
+
}
|
|
19
|
+
else if (portPid) {
|
|
20
|
+
this.log(`Daemon is running (PID: ${portPid}, port: ${port})`);
|
|
21
|
+
this.log('Note: Running but launchd shows no PID (might be restarting)');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.log('LaunchAgent loaded but daemon not responding');
|
|
25
|
+
this.log(`Service: ${LAUNCHD_SERVICE_NAME}`);
|
|
26
|
+
this.log('Try: metalink daemon restart');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// LaunchAgent not loaded - check if something else is on the port
|
|
31
|
+
const portPid = this.getPortPid(port);
|
|
32
|
+
if (portPid) {
|
|
33
|
+
this.log(`Daemon is running outside launchd (PID: ${portPid}, port: ${port})`);
|
|
34
|
+
this.log('Note: LaunchAgent not loaded, daemon started manually');
|
|
35
|
+
this.log('To use launchd: metalink daemon stop && metalink daemon start');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.log(`Daemon is not running (port ${port} not in use)`);
|
|
39
|
+
this.log('LaunchAgent: Not loaded');
|
|
40
|
+
this.log('Use: metalink daemon start');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
this.error(`Failed to check daemon status: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getPortPid(port) {
|
|
49
|
+
try {
|
|
50
|
+
const result = execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
|
|
51
|
+
encoding: 'utf-8',
|
|
52
|
+
stdio: ['pipe', 'pipe', 'ignore']
|
|
53
|
+
});
|
|
54
|
+
if (result && result.trim()) {
|
|
55
|
+
const pid = result.trim().split(/\s+/)[1];
|
|
56
|
+
if (pid && !isNaN(parseInt(pid, 10))) {
|
|
57
|
+
return parseInt(pid, 10);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// No process on port
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
DaemonStatus.description = 'Check the status of the MetaLink daemon';
|
|
68
|
+
export default DaemonStatus;
|
|
69
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/daemon/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAUtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA0C;IAEtD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C1B,OAAO,CAAC,UAAU;YAkBJ,WAAW;CAU1B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { getConfiguredPort, isLaunchAgentLoaded, launchctlUnload, getLaunchdPid, LAUNCHD_SERVICE_NAME } from '../../utils/get-configured-port.js';
|
|
4
|
+
class DaemonStop extends Command {
|
|
5
|
+
async run() {
|
|
6
|
+
try {
|
|
7
|
+
const port = getConfiguredPort();
|
|
8
|
+
// Check if LaunchAgent is loaded
|
|
9
|
+
if (!isLaunchAgentLoaded()) {
|
|
10
|
+
// Check if something is still running on the port
|
|
11
|
+
const portPid = this.getPortPid(port);
|
|
12
|
+
if (portPid) {
|
|
13
|
+
this.log(`Daemon running outside launchd (PID: ${portPid}), killing...`);
|
|
14
|
+
try {
|
|
15
|
+
process.kill(portPid, 'SIGTERM');
|
|
16
|
+
await this.waitForStop(port, 3000);
|
|
17
|
+
this.log('Daemon stopped');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
this.error(`Failed to stop daemon (PID: ${portPid})`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.log('Daemon is not running');
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Get current PID before stopping
|
|
29
|
+
const pid = getLaunchdPid();
|
|
30
|
+
this.log(`Stopping daemon${pid ? ` (PID: ${pid})` : ''}...`);
|
|
31
|
+
if (launchctlUnload()) {
|
|
32
|
+
// Wait for daemon to stop
|
|
33
|
+
await this.waitForStop(port, 3000);
|
|
34
|
+
this.log('Daemon stopped successfully');
|
|
35
|
+
this.log(`Service ${LAUNCHD_SERVICE_NAME} unloaded`);
|
|
36
|
+
this.log('Note: Use "metalink daemon start" to restart');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.error('Failed to unload LaunchAgent');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
this.error(`Failed to stop daemon: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getPortPid(port) {
|
|
47
|
+
try {
|
|
48
|
+
const result = execSync(`lsof -i :${port} -n -P 2>/dev/null | grep LISTEN`, {
|
|
49
|
+
encoding: 'utf-8',
|
|
50
|
+
stdio: ['pipe', 'pipe', 'ignore']
|
|
51
|
+
});
|
|
52
|
+
if (result && result.trim()) {
|
|
53
|
+
const pid = result.trim().split(/\s+/)[1];
|
|
54
|
+
if (pid && !isNaN(parseInt(pid, 10))) {
|
|
55
|
+
return parseInt(pid, 10);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// No process on port
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
async waitForStop(port, timeoutMs) {
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
67
|
+
if (!this.getPortPid(port)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
DaemonStop.description = 'Stop the MetaLink daemon via launchd';
|
|
76
|
+
export default DaemonStop;
|
|
77
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/daemon/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class ImportMcpm extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
mcpm: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=mcpm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpm.d.ts","sourceRoot":"","sources":["../../../src/commands/import/mcpm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA4C;IAE9D,MAAM,CAAC,KAAK;;;MASV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as yaml from 'js-yaml';
|
|
4
|
+
class ImportMcpm extends Command {
|
|
5
|
+
async run() {
|
|
6
|
+
const { flags } = await this.parse(ImportMcpm);
|
|
7
|
+
try {
|
|
8
|
+
if (!fs.existsSync(flags.mcpm)) {
|
|
9
|
+
this.error(`MCPM configuration not found at ${flags.mcpm}`);
|
|
10
|
+
}
|
|
11
|
+
const mcpmConfig = JSON.parse(fs.readFileSync(flags.mcpm, 'utf-8'));
|
|
12
|
+
// Convert MCPM format to MetaLink format
|
|
13
|
+
const metalinkConfig = {
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
daemon: {
|
|
16
|
+
port: 3000,
|
|
17
|
+
host: '127.0.0.1',
|
|
18
|
+
logLevel: 'info',
|
|
19
|
+
},
|
|
20
|
+
servers: Object.entries(mcpmConfig).map(([name, config]) => ({
|
|
21
|
+
name,
|
|
22
|
+
command: config.command,
|
|
23
|
+
args: config.args || [],
|
|
24
|
+
env: config.env || {},
|
|
25
|
+
healthCheck: {
|
|
26
|
+
enabled: true,
|
|
27
|
+
interval: 30000,
|
|
28
|
+
timeout: 5000,
|
|
29
|
+
},
|
|
30
|
+
})),
|
|
31
|
+
environment: {},
|
|
32
|
+
secrets: { provider: 'env', keyringService: 'metalink' },
|
|
33
|
+
};
|
|
34
|
+
// Write to file
|
|
35
|
+
const configYaml = yaml.dump(metalinkConfig, { indent: 2 });
|
|
36
|
+
fs.writeFileSync(flags.output, configYaml);
|
|
37
|
+
const serverCount = Object.keys(mcpmConfig).length;
|
|
38
|
+
this.log(`✓ Imported ${serverCount} servers from MCPM`);
|
|
39
|
+
this.log(`✓ Configuration written to ${flags.output}`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.error(`Import failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
ImportMcpm.description = 'Import servers from MCPM configuration';
|
|
47
|
+
ImportMcpm.flags = {
|
|
48
|
+
output: Flags.string({
|
|
49
|
+
description: 'Output config file path',
|
|
50
|
+
default: 'metalink.config.yaml',
|
|
51
|
+
}),
|
|
52
|
+
mcpm: Flags.string({
|
|
53
|
+
description: 'MCPM servers.json path',
|
|
54
|
+
default: `${process.env.HOME || ''}/.config/mcpm/servers.json`,
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
export default ImportMcpm;
|
|
58
|
+
//# sourceMappingURL=mcpm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpm.js","sourceRoot":"","sources":["../../../src/commands/import/mcpm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,MAAqB,UAAW,SAAQ,OAAO;IAc7C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAEpE,yCAAyC;YACzC,MAAM,cAAc,GAAQ;gBAC1B,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,MAAM;iBACjB;gBACD,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAgB,EAAE,EAAE,CAAC,CAAC;oBAC1E,IAAI;oBACJ,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;oBACvB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;oBACrB,WAAW,EAAE;wBACX,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC,CAAC;gBACH,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE;aACzD,CAAC;YAEF,gBAAgB;YAChB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,cAAc,WAAW,oBAAoB,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;;AAxDM,sBAAW,GAAG,wCAAwC,CAAC;AAEvD,gBAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,4BAA4B;KAC/D,CAAC;CACH,CAAC;eAZiB,UAAU"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class SafetyAddRiskyPattern extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: {
|
|
5
|
+
description: string;
|
|
6
|
+
command: string;
|
|
7
|
+
}[];
|
|
8
|
+
static args: {
|
|
9
|
+
pattern: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
static flags: {
|
|
12
|
+
reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=add-risky-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-risky-pattern.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-risky-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,OAAO;IACxD,MAAM,CAAC,WAAW,SAAuD;IAEzE,MAAM,CAAC,QAAQ;;;QAab;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
|
|
3
|
+
class SafetyAddRiskyPattern extends Command {
|
|
4
|
+
async run() {
|
|
5
|
+
const { args, flags } = await this.parse(SafetyAddRiskyPattern);
|
|
6
|
+
try {
|
|
7
|
+
// Validate regex pattern
|
|
8
|
+
try {
|
|
9
|
+
new RegExp(args.pattern);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
this.error(`Invalid regex pattern: ${args.pattern}`);
|
|
13
|
+
}
|
|
14
|
+
const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/patterns/risky`, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
pattern: args.pattern,
|
|
21
|
+
reason: flags.reason || undefined,
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
this.error(`Failed to add risky pattern: ${data.error || 'Unknown error'}`);
|
|
27
|
+
}
|
|
28
|
+
const result = await response.json();
|
|
29
|
+
if (result.success) {
|
|
30
|
+
this.log(`✗ Risky pattern added: ${args.pattern}`);
|
|
31
|
+
if (flags.reason) {
|
|
32
|
+
this.log(` Reason: ${flags.reason}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.error(result.message || 'Failed to add risky pattern');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
this.error(`Failed to add risky pattern: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
SafetyAddRiskyPattern.description = 'Add a regex pattern to match tools that are risky';
|
|
45
|
+
SafetyAddRiskyPattern.examples = [
|
|
46
|
+
{
|
|
47
|
+
description: 'Add pattern for all delete operations (quotes required for wildcards)',
|
|
48
|
+
command: '<%= config.bin %> <%= command.id %> \'.*delete.*\'',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
description: 'Add pattern for destructive operations',
|
|
52
|
+
command: '<%= config.bin %> <%= command.id %> \'.*destroy.*\'',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
description: 'Add pattern with reason',
|
|
56
|
+
command: '<%= config.bin %> <%= command.id %> \'.*drop.*\' -r "Database drop operations require confirmation"',
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
SafetyAddRiskyPattern.args = {
|
|
60
|
+
pattern: Args.string({
|
|
61
|
+
description: 'Regex pattern (MUST quote if contains * or special chars). Examples: \'.*delete.*\', \'.*drop.*\'',
|
|
62
|
+
required: true,
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
SafetyAddRiskyPattern.flags = {
|
|
66
|
+
reason: Flags.string({
|
|
67
|
+
char: 'r',
|
|
68
|
+
description: 'Optional reason for the pattern',
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
export default SafetyAddRiskyPattern;
|
|
72
|
+
//# sourceMappingURL=add-risky-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-risky-pattern.js","sourceRoot":"","sources":["../../../src/commands/safety/add-risky-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,qBAAsB,SAAQ,OAAO;IAgCxD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,+BAA+B,EACrD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;iBAClC,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,6BAA6B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;;AA1EM,iCAAW,GAAG,mDAAmD,CAAC;AAElE,8BAAQ,GAAG;IAChB;QACE,WAAW,EAAE,uEAAuE;QACpF,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,wCAAwC;QACrD,OAAO,EAAE,qDAAqD;KAC/D;IACD;QACE,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,qGAAqG;KAC/G;CACF,CAAC;AAEK,0BAAI,GAAG;IACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,mGAAmG;QAChH,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,2BAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iCAAiC;KAC/C,CAAC;CACH,CAAC;eA9BiB,qBAAqB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class SafetyAddRisky extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
tool: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=add-risky.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-risky.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-risky.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,MAAM,CAAC,WAAW,SAA2D;IAE7E,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuC3B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
|
|
3
|
+
class SafetyAddRisky extends Command {
|
|
4
|
+
async run() {
|
|
5
|
+
const { args, flags } = await this.parse(SafetyAddRisky);
|
|
6
|
+
// Normalize tool identifier: convert - to :
|
|
7
|
+
const toolId = args.tool.includes(':') ? args.tool : args.tool.replace('-', ':');
|
|
8
|
+
try {
|
|
9
|
+
const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/tools/risky`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json',
|
|
13
|
+
},
|
|
14
|
+
body: JSON.stringify({
|
|
15
|
+
tool: toolId,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const data = await response.json();
|
|
20
|
+
this.error(`Failed to add risky override: ${data.error || 'Unknown error'}`);
|
|
21
|
+
}
|
|
22
|
+
const result = await response.json();
|
|
23
|
+
if (result.success) {
|
|
24
|
+
this.log(`✗ Tool '${toolId}' marked as risky`);
|
|
25
|
+
if (flags.reason) {
|
|
26
|
+
this.log(` Reason: ${flags.reason}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.error(result.message || 'Failed to add risky override');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
this.error(`Failed to add risky override: ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
SafetyAddRisky.description = 'Mark a tool as risky (requires explicit confirmation)';
|
|
39
|
+
SafetyAddRisky.args = {
|
|
40
|
+
tool: Args.string({
|
|
41
|
+
description: 'Tool identifier (server:toolName or server-toolName)',
|
|
42
|
+
required: true,
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
SafetyAddRisky.flags = {
|
|
46
|
+
reason: Flags.string({
|
|
47
|
+
char: 'r',
|
|
48
|
+
description: 'Optional reason for marking as risky',
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
export default SafetyAddRisky;
|
|
52
|
+
//# sourceMappingURL=add-risky.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-risky.js","sourceRoot":"","sources":["../../../src/commands/safety/add-risky.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,cAAe,SAAQ,OAAO;IAiBjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEzD,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,4BAA4B,EAClD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,MAAM;iBACb,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,WAAW,MAAM,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;;AAtDM,0BAAW,GAAG,uDAAuD,CAAC;AAEtE,mBAAI,GAAG;IACZ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,sDAAsD;QACnE,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,oBAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,sCAAsC;KACpD,CAAC;CACH,CAAC;eAfiB,cAAc"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class SafetyAddSafePattern extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: {
|
|
5
|
+
description: string;
|
|
6
|
+
command: string;
|
|
7
|
+
}[];
|
|
8
|
+
static args: {
|
|
9
|
+
pattern: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
static flags: {
|
|
12
|
+
reason: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=add-safe-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-safe-pattern.d.ts","sourceRoot":"","sources":["../../../src/commands/safety/add-safe-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACvD,MAAM,CAAC,WAAW,SAAsD;IAExE,MAAM,CAAC,QAAQ;;;QAab;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;MAKV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import { getDaemonEndpoint } from '../../utils/daemon-endpoint.js';
|
|
3
|
+
class SafetyAddSafePattern extends Command {
|
|
4
|
+
async run() {
|
|
5
|
+
const { args, flags } = await this.parse(SafetyAddSafePattern);
|
|
6
|
+
try {
|
|
7
|
+
// Validate regex pattern
|
|
8
|
+
try {
|
|
9
|
+
new RegExp(args.pattern);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
this.error(`Invalid regex pattern: ${args.pattern}`);
|
|
13
|
+
}
|
|
14
|
+
const response = await fetch(`${getDaemonEndpoint()}/api/v1/safety/patterns/safe`, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
},
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
pattern: args.pattern,
|
|
21
|
+
reason: flags.reason || undefined,
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
this.error(`Failed to add safe pattern: ${data.error || 'Unknown error'}`);
|
|
27
|
+
}
|
|
28
|
+
const result = await response.json();
|
|
29
|
+
if (result.success) {
|
|
30
|
+
this.log(`✓ Safe pattern added: ${args.pattern}`);
|
|
31
|
+
if (flags.reason) {
|
|
32
|
+
this.log(` Reason: ${flags.reason}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.error(result.message || 'Failed to add safe pattern');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
this.error(`Failed to add safe pattern: ${error instanceof Error ? error.message : String(error)}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
SafetyAddSafePattern.description = 'Add a regex pattern to match tools that are safe';
|
|
45
|
+
SafetyAddSafePattern.examples = [
|
|
46
|
+
{
|
|
47
|
+
description: 'Add pattern for all memory tools (quotes required for wildcards)',
|
|
48
|
+
command: '<%= config.bin %> <%= command.id %> \'^memory:.*\'',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
description: 'Add pattern for search operations',
|
|
52
|
+
command: '<%= config.bin %> <%= command.id %> \'.*search.*\'',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
description: 'Add pattern for specific server with reason',
|
|
56
|
+
command: '<%= config.bin %> <%= command.id %> \'^vault:.*\' -r "All Vault tools are read-only"',
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
SafetyAddSafePattern.args = {
|
|
60
|
+
pattern: Args.string({
|
|
61
|
+
description: 'Regex pattern (MUST quote if contains * or special chars). Examples: \'^memory:.*\', \'.*search.*\'',
|
|
62
|
+
required: true,
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
SafetyAddSafePattern.flags = {
|
|
66
|
+
reason: Flags.string({
|
|
67
|
+
char: 'r',
|
|
68
|
+
description: 'Optional reason for the pattern',
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
export default SafetyAddSafePattern;
|
|
72
|
+
//# sourceMappingURL=add-safe-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-safe-pattern.js","sourceRoot":"","sources":["../../../src/commands/safety/add-safe-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAqB,oBAAqB,SAAQ,OAAO;IAgCvD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,yBAAyB;YACzB,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,iBAAiB,EAAE,8BAA8B,EACpD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;iBAClC,CAAC;aACH,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;gBACzD,IAAI,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAE/E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,4BAA4B,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;;AA1EM,gCAAW,GAAG,kDAAkD,CAAC;AAEjE,6BAAQ,GAAG;IAChB;QACE,WAAW,EAAE,kEAAkE;QAC/E,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,oDAAoD;KAC9D;IACD;QACE,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,sFAAsF;KAChG;CACF,CAAC;AAEK,yBAAI,GAAG;IACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,qGAAqG;QAClH,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;AAEK,0BAAK,GAAG;IACb,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iCAAiC;KAC/C,CAAC;CACH,CAAC;eA9BiB,oBAAoB"}
|