@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,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Validator for MCP Tool Schemas
|
|
3
|
+
*
|
|
4
|
+
* Validates tool input schemas and provides helpful hints for:
|
|
5
|
+
* - Missing required fields
|
|
6
|
+
* - Type mismatches
|
|
7
|
+
* - Invalid JSON Schema constructs
|
|
8
|
+
* - Best practices recommendations
|
|
9
|
+
*/
|
|
10
|
+
import type { Tool } from './types.js';
|
|
11
|
+
import type { ToolInfo } from './manager.js';
|
|
12
|
+
export interface ValidationResult {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
errors: ValidationError[];
|
|
15
|
+
warnings: ValidationWarning[];
|
|
16
|
+
hints: string[];
|
|
17
|
+
suggestions?: string[];
|
|
18
|
+
inferredRequired?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ValidationError {
|
|
21
|
+
field: string;
|
|
22
|
+
message: string;
|
|
23
|
+
severity: 'error';
|
|
24
|
+
}
|
|
25
|
+
export interface ValidationWarning {
|
|
26
|
+
field: string;
|
|
27
|
+
message: string;
|
|
28
|
+
severity: 'warning';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* SchemaValidator - validates tool schemas and provides helpful feedback
|
|
32
|
+
*/
|
|
33
|
+
export declare class SchemaValidator {
|
|
34
|
+
/**
|
|
35
|
+
* Validate a tool's schema structure
|
|
36
|
+
* Works with both Tool and ToolInfo types
|
|
37
|
+
*/
|
|
38
|
+
validateToolSchema(tool: Tool | ToolInfo): ValidationResult;
|
|
39
|
+
/**
|
|
40
|
+
* Validate an input schema structure
|
|
41
|
+
*/
|
|
42
|
+
private validateInputSchema;
|
|
43
|
+
/**
|
|
44
|
+
* Validate input arguments against a schema
|
|
45
|
+
*/
|
|
46
|
+
validateArguments(args: Record<string, unknown>, schema: unknown): {
|
|
47
|
+
valid: boolean;
|
|
48
|
+
errors: string[];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=schema-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/server/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,gBAAgB;IA+C3D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoH3B;;OAEG;IACH,iBAAiB,CACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,OAAO,GACd;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CA0CxC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Validator for MCP Tool Schemas
|
|
3
|
+
*
|
|
4
|
+
* Validates tool input schemas and provides helpful hints for:
|
|
5
|
+
* - Missing required fields
|
|
6
|
+
* - Type mismatches
|
|
7
|
+
* - Invalid JSON Schema constructs
|
|
8
|
+
* - Best practices recommendations
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* SchemaValidator - validates tool schemas and provides helpful feedback
|
|
12
|
+
*/
|
|
13
|
+
export class SchemaValidator {
|
|
14
|
+
/**
|
|
15
|
+
* Validate a tool's schema structure
|
|
16
|
+
* Works with both Tool and ToolInfo types
|
|
17
|
+
*/
|
|
18
|
+
validateToolSchema(tool) {
|
|
19
|
+
const errors = [];
|
|
20
|
+
const warnings = [];
|
|
21
|
+
const hints = [];
|
|
22
|
+
// Validate required fields
|
|
23
|
+
if (!tool.name || tool.name.trim() === '') {
|
|
24
|
+
errors.push({
|
|
25
|
+
field: 'name',
|
|
26
|
+
message: 'Tool name is required and cannot be empty',
|
|
27
|
+
severity: 'error',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (!tool.description || tool.description.trim() === '') {
|
|
31
|
+
warnings.push({
|
|
32
|
+
field: 'description',
|
|
33
|
+
message: 'Tool description is missing or empty',
|
|
34
|
+
severity: 'warning',
|
|
35
|
+
});
|
|
36
|
+
hints.push('Add a clear description to help users understand what this tool does');
|
|
37
|
+
}
|
|
38
|
+
// Validate inputSchema if present (handle both input_schema and inputSchema)
|
|
39
|
+
const schema = 'input_schema' in tool ? tool.input_schema : tool.inputSchema;
|
|
40
|
+
if (schema) {
|
|
41
|
+
const schemaValidation = this.validateInputSchema(schema);
|
|
42
|
+
errors.push(...schemaValidation.errors);
|
|
43
|
+
warnings.push(...schemaValidation.warnings);
|
|
44
|
+
hints.push(...schemaValidation.hints);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
warnings.push({
|
|
48
|
+
field: 'input_schema',
|
|
49
|
+
message: 'No input schema defined',
|
|
50
|
+
severity: 'warning',
|
|
51
|
+
});
|
|
52
|
+
hints.push('Define an input schema to provide better validation and auto-completion');
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
valid: errors.length === 0,
|
|
56
|
+
errors,
|
|
57
|
+
warnings,
|
|
58
|
+
hints,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validate an input schema structure
|
|
63
|
+
*/
|
|
64
|
+
validateInputSchema(schema) {
|
|
65
|
+
const errors = [];
|
|
66
|
+
const warnings = [];
|
|
67
|
+
const hints = [];
|
|
68
|
+
if (typeof schema !== 'object' || schema === null) {
|
|
69
|
+
errors.push({
|
|
70
|
+
field: 'input_schema',
|
|
71
|
+
message: 'Input schema must be an object',
|
|
72
|
+
severity: 'error',
|
|
73
|
+
});
|
|
74
|
+
return { errors, warnings, hints };
|
|
75
|
+
}
|
|
76
|
+
const schemaObj = schema;
|
|
77
|
+
// Check for type field
|
|
78
|
+
if (!schemaObj.type) {
|
|
79
|
+
warnings.push({
|
|
80
|
+
field: 'input_schema.type',
|
|
81
|
+
message: 'Schema type is not defined',
|
|
82
|
+
severity: 'warning',
|
|
83
|
+
});
|
|
84
|
+
hints.push('Add "type": "object" to your input schema');
|
|
85
|
+
}
|
|
86
|
+
// Validate properties if present
|
|
87
|
+
if (schemaObj.properties) {
|
|
88
|
+
if (typeof schemaObj.properties !== 'object') {
|
|
89
|
+
errors.push({
|
|
90
|
+
field: 'input_schema.properties',
|
|
91
|
+
message: 'Properties must be an object',
|
|
92
|
+
severity: 'error',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const props = schemaObj.properties;
|
|
97
|
+
for (const [key, value] of Object.entries(props)) {
|
|
98
|
+
if (typeof value !== 'object' || value === null) {
|
|
99
|
+
errors.push({
|
|
100
|
+
field: `input_schema.properties.${key}`,
|
|
101
|
+
message: `Property "${key}" must be an object`,
|
|
102
|
+
severity: 'error',
|
|
103
|
+
});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const prop = value;
|
|
107
|
+
// Check for type
|
|
108
|
+
if (!prop.type) {
|
|
109
|
+
warnings.push({
|
|
110
|
+
field: `input_schema.properties.${key}`,
|
|
111
|
+
message: `Property "${key}" is missing a type`,
|
|
112
|
+
severity: 'warning',
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// Check for description
|
|
116
|
+
if (!prop.description) {
|
|
117
|
+
warnings.push({
|
|
118
|
+
field: `input_schema.properties.${key}`,
|
|
119
|
+
message: `Property "${key}" is missing a description`,
|
|
120
|
+
severity: 'warning',
|
|
121
|
+
});
|
|
122
|
+
hints.push(`Add a description for property "${key}" to improve usability`);
|
|
123
|
+
}
|
|
124
|
+
// Check for examples on required fields
|
|
125
|
+
const required = schemaObj.required;
|
|
126
|
+
if (required && required.includes(key) && !prop.example && !prop.default) {
|
|
127
|
+
hints.push(`Consider adding an example or default value for required property "${key}"`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Validate required array if present
|
|
133
|
+
if (schemaObj.required) {
|
|
134
|
+
if (!Array.isArray(schemaObj.required)) {
|
|
135
|
+
errors.push({
|
|
136
|
+
field: 'input_schema.required',
|
|
137
|
+
message: 'Required field must be an array',
|
|
138
|
+
severity: 'error',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const required = schemaObj.required;
|
|
143
|
+
const props = schemaObj.properties || {};
|
|
144
|
+
for (const field of required) {
|
|
145
|
+
if (typeof field !== 'string') {
|
|
146
|
+
errors.push({
|
|
147
|
+
field: 'input_schema.required',
|
|
148
|
+
message: 'Required array must contain only strings',
|
|
149
|
+
severity: 'error',
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
else if (!props[field]) {
|
|
153
|
+
errors.push({
|
|
154
|
+
field: 'input_schema.required',
|
|
155
|
+
message: `Required field "${field}" is not defined in properties`,
|
|
156
|
+
severity: 'error',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Check for additionalProperties
|
|
163
|
+
if (schemaObj.additionalProperties === undefined) {
|
|
164
|
+
hints.push('Consider setting "additionalProperties": false for stricter validation');
|
|
165
|
+
}
|
|
166
|
+
return { errors, warnings, hints };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate input arguments against a schema
|
|
170
|
+
*/
|
|
171
|
+
validateArguments(args, schema) {
|
|
172
|
+
const errors = [];
|
|
173
|
+
if (typeof schema !== 'object' || schema === null) {
|
|
174
|
+
return { valid: true, errors: [] };
|
|
175
|
+
}
|
|
176
|
+
const schemaObj = schema;
|
|
177
|
+
const required = schemaObj.required || [];
|
|
178
|
+
const properties = schemaObj.properties || {};
|
|
179
|
+
// Check required fields
|
|
180
|
+
for (const field of required) {
|
|
181
|
+
if (!(field in args)) {
|
|
182
|
+
errors.push(`Missing required field: ${field}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Check field types
|
|
186
|
+
for (const [key, value] of Object.entries(args)) {
|
|
187
|
+
const propSchema = properties[key];
|
|
188
|
+
if (!propSchema) {
|
|
189
|
+
if (schemaObj.additionalProperties === false) {
|
|
190
|
+
errors.push(`Unknown field: ${key}`);
|
|
191
|
+
}
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const expectedType = propSchema.type;
|
|
195
|
+
if (expectedType) {
|
|
196
|
+
const actualType = Array.isArray(value) ? 'array' : typeof value;
|
|
197
|
+
if (expectedType !== actualType && !(value === null && expectedType === 'null')) {
|
|
198
|
+
errors.push(`Field "${key}" has type ${actualType}, expected ${expectedType}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
valid: errors.length === 0,
|
|
204
|
+
errors,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=schema-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/server/schema-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token estimation utilities for MCP tools
|
|
3
|
+
*
|
|
4
|
+
* Provides rough token count estimates for tool definitions based on:
|
|
5
|
+
* - Tool name length
|
|
6
|
+
* - Description length
|
|
7
|
+
* - JSON schema complexity
|
|
8
|
+
*
|
|
9
|
+
* Estimation uses ~4 characters per token (conservative estimate)
|
|
10
|
+
*/
|
|
11
|
+
import type { Tool } from './types.js';
|
|
12
|
+
import type { ToolInfo } from './manager.js';
|
|
13
|
+
/**
|
|
14
|
+
* Estimate tokens for a single tool definition
|
|
15
|
+
*
|
|
16
|
+
* Formula:
|
|
17
|
+
* - Name tokens: ceil(name.length / 4)
|
|
18
|
+
* - Description tokens: ceil(description.length / 4)
|
|
19
|
+
* - Schema tokens: ceil(JSON.stringify(schema).length / 4)
|
|
20
|
+
*
|
|
21
|
+
* @param tool - MCP tool definition (Tool or ToolInfo)
|
|
22
|
+
* @returns Estimated token count (conservative estimate)
|
|
23
|
+
*/
|
|
24
|
+
export declare function estimateToolTokens(tool: Tool | ToolInfo): number;
|
|
25
|
+
/**
|
|
26
|
+
* Calculate total tokens for a list of tools
|
|
27
|
+
*
|
|
28
|
+
* @param tools - Array of MCP tool definitions (Tool[] or ToolInfo[])
|
|
29
|
+
* @returns Total estimated token count
|
|
30
|
+
*/
|
|
31
|
+
export declare function calculateTotalTokens(tools: (Tool | ToolInfo)[]): number;
|
|
32
|
+
/**
|
|
33
|
+
* Format token count with comma separators for readability
|
|
34
|
+
*
|
|
35
|
+
* Examples:
|
|
36
|
+
* - 1247 → "1,247"
|
|
37
|
+
* - 34630 → "34,630"
|
|
38
|
+
* - 120 → "120"
|
|
39
|
+
*
|
|
40
|
+
* @param tokens - Token count to format
|
|
41
|
+
* @returns Formatted string with comma separators
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatTokens(tokens: number): string;
|
|
44
|
+
//# sourceMappingURL=token-calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-calculator.d.ts","sourceRoot":"","sources":["../../src/server/token-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,MAAM,CAShE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAEvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token estimation utilities for MCP tools
|
|
3
|
+
*
|
|
4
|
+
* Provides rough token count estimates for tool definitions based on:
|
|
5
|
+
* - Tool name length
|
|
6
|
+
* - Description length
|
|
7
|
+
* - JSON schema complexity
|
|
8
|
+
*
|
|
9
|
+
* Estimation uses ~4 characters per token (conservative estimate)
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Estimate tokens for a single tool definition
|
|
13
|
+
*
|
|
14
|
+
* Formula:
|
|
15
|
+
* - Name tokens: ceil(name.length / 4)
|
|
16
|
+
* - Description tokens: ceil(description.length / 4)
|
|
17
|
+
* - Schema tokens: ceil(JSON.stringify(schema).length / 4)
|
|
18
|
+
*
|
|
19
|
+
* @param tool - MCP tool definition (Tool or ToolInfo)
|
|
20
|
+
* @returns Estimated token count (conservative estimate)
|
|
21
|
+
*/
|
|
22
|
+
export function estimateToolTokens(tool) {
|
|
23
|
+
const nameTokens = Math.ceil(tool.name.length / 4); // ~4 chars per token
|
|
24
|
+
const descTokens = Math.ceil((tool.description || '').length / 4);
|
|
25
|
+
// Handle both input_schema (Tool) and inputSchema (ToolInfo)
|
|
26
|
+
const schema = 'input_schema' in tool ? tool.input_schema : tool.inputSchema;
|
|
27
|
+
const schemaTokens = Math.ceil(JSON.stringify(schema || {}).length / 4);
|
|
28
|
+
return nameTokens + descTokens + schemaTokens;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Calculate total tokens for a list of tools
|
|
32
|
+
*
|
|
33
|
+
* @param tools - Array of MCP tool definitions (Tool[] or ToolInfo[])
|
|
34
|
+
* @returns Total estimated token count
|
|
35
|
+
*/
|
|
36
|
+
export function calculateTotalTokens(tools) {
|
|
37
|
+
return tools.reduce((sum, tool) => sum + estimateToolTokens(tool), 0);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format token count with comma separators for readability
|
|
41
|
+
*
|
|
42
|
+
* Examples:
|
|
43
|
+
* - 1247 → "1,247"
|
|
44
|
+
* - 34630 → "34,630"
|
|
45
|
+
* - 120 → "120"
|
|
46
|
+
*
|
|
47
|
+
* @param tokens - Token count to format
|
|
48
|
+
* @returns Formatted string with comma separators
|
|
49
|
+
*/
|
|
50
|
+
export function formatTokens(tokens) {
|
|
51
|
+
return tokens.toLocaleString('en-US');
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=token-calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-calculator.js","sourceRoot":"","sources":["../../src/server/token-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAElE,6DAA6D;IAC7D,MAAM,MAAM,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAE,IAAiB,CAAC,WAAW,CAAC;IAC3F,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAExE,OAAO,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA0B;IAC7D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server management types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
export interface ServerProcess {
|
|
5
|
+
pid: number;
|
|
6
|
+
status: 'running' | 'stopped' | 'crashed';
|
|
7
|
+
uptime: number;
|
|
8
|
+
lastHealthCheck: number;
|
|
9
|
+
errorCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ServerState {
|
|
12
|
+
[serverName: string]: ServerProcess;
|
|
13
|
+
}
|
|
14
|
+
export interface Tool {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
input_schema: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface ServerInfo {
|
|
20
|
+
name: string;
|
|
21
|
+
command: string;
|
|
22
|
+
args: string[];
|
|
23
|
+
env: Record<string, string>;
|
|
24
|
+
cwd?: string;
|
|
25
|
+
status: 'running' | 'stopped' | 'crashed';
|
|
26
|
+
process?: ServerProcess;
|
|
27
|
+
tools?: Tool[];
|
|
28
|
+
}
|
|
29
|
+
export interface ExecuteToolRequest {
|
|
30
|
+
serverName: string;
|
|
31
|
+
toolName: string;
|
|
32
|
+
arguments: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
export interface ExecuteToolResponse {
|
|
35
|
+
success: boolean;
|
|
36
|
+
result?: unknown;
|
|
37
|
+
error?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface HealthCheckResult {
|
|
40
|
+
serverName: string;
|
|
41
|
+
healthy: boolean;
|
|
42
|
+
error?: string;
|
|
43
|
+
timestamp: number;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC;CACrC;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advisory file locking utility for atomic file operations.
|
|
3
|
+
* Ensures that concurrent writes to the same file don't cause corruption.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* const lock = new FileLock('path/to/file.lock');
|
|
7
|
+
* await lock.acquire(5000); // 5 second timeout
|
|
8
|
+
* try {
|
|
9
|
+
* // Perform atomic write operations
|
|
10
|
+
* await fs.writeFile('target.json', data);
|
|
11
|
+
* } finally {
|
|
12
|
+
* await lock.release();
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export declare class FileLock {
|
|
16
|
+
private lockPath;
|
|
17
|
+
private lockFileHandle;
|
|
18
|
+
private lockTimeout;
|
|
19
|
+
private isLocked;
|
|
20
|
+
constructor(filePath: string);
|
|
21
|
+
/**
|
|
22
|
+
* Acquire lock with optional timeout.
|
|
23
|
+
* Throws if lock cannot be acquired within timeout period.
|
|
24
|
+
*
|
|
25
|
+
* @param timeoutMs - Maximum time to wait for lock (default: 5000ms)
|
|
26
|
+
* @throws Error if lock acquisition times out
|
|
27
|
+
*/
|
|
28
|
+
acquire(timeoutMs?: number): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Release the lock.
|
|
31
|
+
* Safe to call even if lock is not held.
|
|
32
|
+
*/
|
|
33
|
+
release(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if lock is currently held by this instance.
|
|
36
|
+
*/
|
|
37
|
+
isLockHeld(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get lock file path.
|
|
40
|
+
*/
|
|
41
|
+
getLockPath(): string;
|
|
42
|
+
/**
|
|
43
|
+
* Register automatic cleanup on process exit.
|
|
44
|
+
* Ensures lock is released even if exception occurs.
|
|
45
|
+
*/
|
|
46
|
+
private registerCleanup;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Helper function for atomic file operations with automatic lock management.
|
|
50
|
+
*
|
|
51
|
+
* Usage:
|
|
52
|
+
* const result = await withFileLock('path/to/file.json', async () => {
|
|
53
|
+
* // Perform operations with lock held
|
|
54
|
+
* return await someAsyncOperation();
|
|
55
|
+
* });
|
|
56
|
+
*/
|
|
57
|
+
export declare function withFileLock<T>(filePath: string, callback: () => Promise<T>, timeoutMs?: number): Promise<T>;
|
|
58
|
+
/**
|
|
59
|
+
* Helper function for atomic file write with automatic lock management.
|
|
60
|
+
*
|
|
61
|
+
* Usage:
|
|
62
|
+
* await atomicWrite('path/to/file.json', JSON.stringify(data, null, 2));
|
|
63
|
+
*/
|
|
64
|
+
export declare function atomicWrite(filePath: string, content: string, options?: {
|
|
65
|
+
timeout?: number;
|
|
66
|
+
createBackup?: boolean;
|
|
67
|
+
}): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Restore file from backup.
|
|
70
|
+
* Useful for rollback on write failures.
|
|
71
|
+
*/
|
|
72
|
+
export declare function restoreFromBackup(filePath: string): Promise<void>;
|
|
73
|
+
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/utils/file-lock.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAK5B;;;;;;OAMG;IACG,OAAO,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwEtD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACH,OAAO,CAAC,eAAe;CA0BxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC1B,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACzD,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvE"}
|