@dexto/core 1.1.4 → 1.1.6
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 +125 -0
- package/dist/agent/DextoAgent.cjs +793 -0
- package/dist/agent/DextoAgent.d.cts +473 -0
- package/dist/agent/DextoAgent.d.ts +473 -0
- package/dist/agent/DextoAgent.js +774 -0
- package/dist/agent/agentCard.cjs +44 -0
- package/dist/agent/agentCard.d.cts +20 -0
- package/dist/agent/agentCard.d.ts +20 -0
- package/dist/agent/agentCard.js +20 -0
- package/dist/agent/error-codes.cjs +35 -0
- package/dist/agent/error-codes.d.cts +14 -0
- package/dist/agent/error-codes.d.ts +14 -0
- package/dist/agent/error-codes.js +11 -0
- package/dist/agent/errors.cjs +84 -0
- package/dist/agent/errors.d.cts +40 -0
- package/dist/agent/errors.d.ts +40 -0
- package/dist/agent/errors.js +60 -0
- package/dist/agent/index.cjs +44 -0
- package/dist/agent/index.d.cts +60 -0
- package/dist/agent/index.d.ts +60 -0
- package/dist/agent/index.js +13 -0
- package/dist/agent/registry/error-codes.cjs +42 -0
- package/dist/agent/registry/error-codes.d.cts +20 -0
- package/dist/agent/registry/error-codes.d.ts +20 -0
- package/dist/agent/registry/error-codes.js +18 -0
- package/dist/agent/registry/errors.cjs +158 -0
- package/dist/agent/registry/errors.d.cts +67 -0
- package/dist/agent/registry/errors.d.ts +67 -0
- package/dist/{chunk-PI6XFMEW.js → agent/registry/errors.js} +43 -50
- package/dist/agent/registry/registry.cjs +291 -0
- package/dist/agent/registry/registry.d.cts +67 -0
- package/dist/agent/registry/registry.d.ts +67 -0
- package/dist/agent/registry/registry.js +256 -0
- package/dist/agent/registry/types.cjs +41 -0
- package/dist/agent/registry/types.d.cts +100 -0
- package/dist/agent/registry/types.d.ts +100 -0
- package/dist/agent/registry/types.js +16 -0
- package/dist/agent/schemas.cjs +113 -0
- package/dist/agent/schemas.d.cts +1502 -0
- package/dist/agent/schemas.d.ts +1502 -0
- package/dist/agent/schemas.js +88 -0
- package/dist/agent/state-manager.cjs +214 -0
- package/dist/agent/state-manager.d.cts +97 -0
- package/dist/agent/state-manager.d.ts +97 -0
- package/dist/agent/state-manager.js +190 -0
- package/dist/config/agent-resolver.cjs +153 -0
- package/dist/config/agent-resolver.d.cts +15 -0
- package/dist/config/agent-resolver.d.ts +15 -0
- package/dist/config/agent-resolver.js +122 -0
- package/dist/config/error-codes.cjs +39 -0
- package/dist/config/error-codes.d.cts +17 -0
- package/dist/config/error-codes.d.ts +17 -0
- package/dist/config/error-codes.js +15 -0
- package/dist/config/errors.cjs +126 -0
- package/dist/config/errors.d.cts +49 -0
- package/dist/config/errors.d.ts +49 -0
- package/dist/config/errors.js +102 -0
- package/dist/config/index.cjs +26 -0
- package/dist/config/index.d.cts +7 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.js +3 -0
- package/dist/config/loader.cjs +119 -0
- package/dist/config/loader.d.cts +19 -0
- package/dist/config/loader.d.ts +19 -0
- package/dist/config/loader.js +85 -0
- package/dist/config/writer.cjs +182 -0
- package/dist/config/writer.d.cts +38 -0
- package/dist/config/writer.d.ts +38 -0
- package/dist/config/writer.js +146 -0
- package/dist/context/compression/middle-removal.cjs +95 -0
- package/dist/context/compression/middle-removal.d.cts +48 -0
- package/dist/context/compression/middle-removal.d.ts +48 -0
- package/dist/context/compression/middle-removal.js +71 -0
- package/dist/context/compression/oldest-removal.cjs +70 -0
- package/dist/context/compression/oldest-removal.d.cts +43 -0
- package/dist/context/compression/oldest-removal.d.ts +43 -0
- package/dist/context/compression/oldest-removal.js +46 -0
- package/dist/context/compression/types.cjs +16 -0
- package/dist/context/compression/types.d.cts +21 -0
- package/dist/context/compression/types.d.ts +21 -0
- package/dist/context/compression/types.js +0 -0
- package/dist/context/error-codes.cjs +41 -0
- package/dist/context/error-codes.d.cts +19 -0
- package/dist/context/error-codes.d.ts +19 -0
- package/dist/context/error-codes.js +17 -0
- package/dist/context/errors.cjs +146 -0
- package/dist/context/errors.d.cts +36 -0
- package/dist/context/errors.d.ts +36 -0
- package/dist/context/errors.js +122 -0
- package/dist/context/index.cjs +24 -0
- package/dist/context/index.d.cts +19 -0
- package/dist/context/index.d.ts +19 -0
- package/dist/context/index.js +2 -0
- package/dist/context/manager.cjs +516 -0
- package/dist/context/manager.d.cts +254 -0
- package/dist/context/manager.d.ts +254 -0
- package/dist/context/manager.js +492 -0
- package/dist/context/types.cjs +16 -0
- package/dist/context/types.d.cts +113 -0
- package/dist/context/types.d.ts +113 -0
- package/dist/context/types.js +0 -0
- package/dist/context/utils.cjs +406 -0
- package/dist/context/utils.d.cts +79 -0
- package/dist/context/utils.d.ts +79 -0
- package/dist/context/utils.js +374 -0
- package/dist/errors/DextoBaseError.cjs +36 -0
- package/dist/errors/DextoBaseError.d.cts +15 -0
- package/dist/errors/DextoBaseError.d.ts +15 -0
- package/dist/errors/DextoBaseError.js +12 -0
- package/dist/errors/DextoRuntimeError.cjs +50 -0
- package/dist/errors/DextoRuntimeError.d.cts +37 -0
- package/dist/errors/DextoRuntimeError.d.ts +37 -0
- package/dist/errors/DextoRuntimeError.js +26 -0
- package/dist/errors/DextoValidationError.cjs +118 -0
- package/dist/errors/DextoValidationError.d.cts +65 -0
- package/dist/errors/DextoValidationError.d.ts +65 -0
- package/dist/{chunk-XFQLRBHE.js → errors/DextoValidationError.js} +4 -32
- package/dist/errors/index.cjs +42 -0
- package/dist/errors/index.d.cts +18 -0
- package/dist/errors/index.d.ts +18 -0
- package/dist/errors/index.js +13 -0
- package/dist/errors/result-bridge.cjs +38 -0
- package/dist/errors/result-bridge.d.cts +39 -0
- package/dist/errors/result-bridge.d.ts +39 -0
- package/dist/errors/result-bridge.js +14 -0
- package/dist/errors/types.cjs +54 -0
- package/dist/errors/types.d.cts +62 -0
- package/dist/errors/types.d.ts +62 -0
- package/dist/errors/types.js +29 -0
- package/dist/events/index.cjs +169 -0
- package/dist/events/index.d.cts +272 -0
- package/dist/events/index.d.ts +272 -0
- package/dist/events/index.js +136 -0
- package/dist/index.browser.cjs +9 -220
- package/dist/index.browser.d.cts +53 -379
- package/dist/index.browser.d.ts +53 -379
- package/dist/index.browser.js +4 -210
- package/dist/index.cjs +31 -15266
- package/dist/index.d.cts +89 -6842
- package/dist/index.d.ts +89 -6842
- package/dist/index.js +14 -9914
- package/dist/llm/error-codes.cjs +48 -0
- package/dist/llm/error-codes.d.cts +26 -0
- package/dist/llm/error-codes.d.ts +26 -0
- package/dist/llm/error-codes.js +24 -0
- package/dist/llm/errors.cjs +108 -0
- package/dist/llm/errors.d.cts +58 -0
- package/dist/llm/errors.d.ts +58 -0
- package/dist/llm/errors.js +84 -0
- package/dist/llm/formatters/anthropic.cjs +246 -0
- package/dist/llm/formatters/anthropic.d.cts +45 -0
- package/dist/llm/formatters/anthropic.d.ts +45 -0
- package/dist/llm/formatters/anthropic.js +227 -0
- package/dist/llm/formatters/factory.cjs +51 -0
- package/dist/llm/formatters/factory.d.cts +12 -0
- package/dist/llm/formatters/factory.d.ts +12 -0
- package/dist/llm/formatters/factory.js +27 -0
- package/dist/llm/formatters/openai.cjs +167 -0
- package/dist/llm/formatters/openai.d.cts +38 -0
- package/dist/llm/formatters/openai.d.ts +38 -0
- package/dist/llm/formatters/openai.js +147 -0
- package/dist/llm/formatters/types.cjs +16 -0
- package/dist/llm/formatters/types.d.cts +43 -0
- package/dist/llm/formatters/types.d.ts +43 -0
- package/dist/llm/formatters/types.js +0 -0
- package/dist/llm/formatters/vercel.cjs +411 -0
- package/dist/llm/formatters/vercel.d.cts +48 -0
- package/dist/llm/formatters/vercel.d.ts +48 -0
- package/dist/llm/formatters/vercel.js +387 -0
- package/dist/llm/index.cjs +34 -0
- package/dist/llm/index.d.cts +39 -0
- package/dist/llm/index.d.ts +39 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/registry.cjs +881 -0
- package/dist/llm/registry.d.cts +176 -0
- package/dist/llm/registry.d.ts +176 -0
- package/dist/{chunk-J6AXCN3H.js → llm/registry.js} +25 -455
- package/dist/llm/resolver.cjs +154 -0
- package/dist/llm/resolver.d.cts +34 -0
- package/dist/llm/resolver.d.ts +34 -0
- package/dist/llm/resolver.js +136 -0
- package/dist/llm/schemas.cjs +188 -0
- package/dist/llm/schemas.d.cts +111 -0
- package/dist/llm/schemas.d.ts +111 -0
- package/dist/llm/schemas.js +172 -0
- package/dist/llm/services/anthropic.cjs +398 -0
- package/dist/llm/services/anthropic.d.cts +65 -0
- package/dist/llm/services/anthropic.d.ts +65 -0
- package/dist/llm/services/anthropic.js +374 -0
- package/dist/llm/services/factory.cjs +164 -0
- package/dist/llm/services/factory.d.cts +39 -0
- package/dist/llm/services/factory.d.ts +39 -0
- package/dist/llm/services/factory.js +130 -0
- package/dist/llm/services/index.cjs +22 -0
- package/dist/llm/services/index.d.cts +21 -0
- package/dist/llm/services/index.d.ts +21 -0
- package/dist/llm/services/index.js +1 -0
- package/dist/llm/services/openai.cjs +470 -0
- package/dist/llm/services/openai.d.cts +65 -0
- package/dist/llm/services/openai.d.ts +65 -0
- package/dist/llm/services/openai.js +446 -0
- package/dist/llm/services/test-utils.integration.cjs +169 -0
- package/dist/llm/services/test-utils.integration.d.cts +83 -0
- package/dist/llm/services/test-utils.integration.d.ts +83 -0
- package/dist/llm/services/test-utils.integration.js +142 -0
- package/dist/llm/services/types.cjs +16 -0
- package/dist/llm/services/types.d.cts +56 -0
- package/dist/llm/services/types.d.ts +56 -0
- package/dist/llm/services/types.js +0 -0
- package/dist/llm/services/vercel.cjs +525 -0
- package/dist/llm/services/vercel.d.cts +72 -0
- package/dist/llm/services/vercel.d.ts +72 -0
- package/dist/llm/services/vercel.js +506 -0
- package/dist/llm/tokenizer/anthropic.cjs +43 -0
- package/dist/llm/tokenizer/anthropic.d.cts +21 -0
- package/dist/llm/tokenizer/anthropic.d.ts +21 -0
- package/dist/llm/tokenizer/anthropic.js +19 -0
- package/dist/llm/tokenizer/default.cjs +41 -0
- package/dist/llm/tokenizer/default.d.cts +16 -0
- package/dist/llm/tokenizer/default.d.ts +16 -0
- package/dist/llm/tokenizer/default.js +17 -0
- package/dist/llm/tokenizer/factory.cjs +44 -0
- package/dist/llm/tokenizer/factory.d.cts +12 -0
- package/dist/llm/tokenizer/factory.d.ts +12 -0
- package/dist/llm/tokenizer/factory.js +20 -0
- package/dist/llm/tokenizer/google.cjs +52 -0
- package/dist/llm/tokenizer/google.d.cts +31 -0
- package/dist/llm/tokenizer/google.d.ts +31 -0
- package/dist/llm/tokenizer/google.js +28 -0
- package/dist/llm/tokenizer/openai.cjs +108 -0
- package/dist/llm/tokenizer/openai.d.cts +32 -0
- package/dist/llm/tokenizer/openai.d.ts +32 -0
- package/dist/llm/tokenizer/openai.js +83 -0
- package/dist/llm/tokenizer/types.cjs +33 -0
- package/dist/llm/tokenizer/types.d.cts +19 -0
- package/dist/llm/tokenizer/types.d.ts +19 -0
- package/dist/llm/tokenizer/types.js +9 -0
- package/dist/llm/types.cjs +42 -0
- package/dist/llm/types.d.cts +29 -0
- package/dist/llm/types.d.ts +29 -0
- package/dist/llm/types.js +16 -0
- package/dist/llm/validation.cjs +162 -0
- package/dist/llm/validation.d.cts +60 -0
- package/dist/llm/validation.d.ts +60 -0
- package/dist/llm/validation.js +138 -0
- package/dist/logger/browser.cjs +86 -0
- package/dist/logger/browser.d.cts +29 -0
- package/dist/logger/browser.d.ts +29 -0
- package/dist/logger/browser.js +61 -0
- package/dist/logger/index.cjs +22 -0
- package/dist/logger/index.d.cts +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.js +1 -0
- package/dist/logger/logger.cjs +362 -0
- package/dist/logger/logger.d.cts +52 -0
- package/dist/logger/logger.d.ts +52 -0
- package/dist/logger/logger.js +327 -0
- package/dist/mcp/error-codes.cjs +38 -0
- package/dist/mcp/error-codes.d.cts +16 -0
- package/dist/mcp/error-codes.d.ts +16 -0
- package/dist/mcp/error-codes.js +14 -0
- package/dist/mcp/errors.cjs +131 -0
- package/dist/mcp/errors.d.cts +72 -0
- package/dist/mcp/errors.d.ts +72 -0
- package/dist/mcp/errors.js +107 -0
- package/dist/mcp/index.cjs +34 -0
- package/dist/mcp/index.d.cts +26 -0
- package/dist/mcp/index.d.ts +26 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/manager.cjs +473 -0
- package/dist/mcp/manager.d.cts +163 -0
- package/dist/mcp/manager.d.ts +163 -0
- package/dist/mcp/manager.js +449 -0
- package/dist/mcp/mcp-client.cjs +420 -0
- package/dist/mcp/mcp-client.d.cts +108 -0
- package/dist/mcp/mcp-client.d.ts +108 -0
- package/dist/mcp/mcp-client.js +396 -0
- package/dist/mcp/resolver.cjs +78 -0
- package/dist/mcp/resolver.d.cts +22 -0
- package/dist/mcp/resolver.d.ts +22 -0
- package/dist/mcp/resolver.js +56 -0
- package/dist/mcp/schemas.cjs +82 -0
- package/dist/mcp/schemas.d.cts +266 -0
- package/dist/mcp/schemas.d.ts +266 -0
- package/dist/mcp/schemas.js +54 -0
- package/dist/mcp/types.cjs +16 -0
- package/dist/mcp/types.d.cts +21 -0
- package/dist/mcp/types.d.ts +21 -0
- package/dist/mcp/types.js +0 -0
- package/dist/preferences/constants.cjs +28 -0
- package/dist/preferences/constants.d.cts +3 -0
- package/dist/preferences/constants.d.ts +3 -0
- package/dist/preferences/constants.js +4 -0
- package/dist/preferences/error-codes.cjs +35 -0
- package/dist/preferences/error-codes.d.cts +9 -0
- package/dist/preferences/error-codes.d.ts +9 -0
- package/dist/preferences/error-codes.js +11 -0
- package/dist/preferences/errors.cjs +75 -0
- package/dist/preferences/errors.d.cts +33 -0
- package/dist/preferences/errors.d.ts +33 -0
- package/dist/preferences/errors.js +50 -0
- package/dist/preferences/index.cjs +55 -0
- package/dist/preferences/index.d.cts +21 -0
- package/dist/preferences/index.d.ts +21 -0
- package/dist/preferences/index.js +31 -0
- package/dist/preferences/loader.cjs +136 -0
- package/dist/preferences/loader.d.cts +45 -0
- package/dist/preferences/loader.d.ts +45 -0
- package/dist/preferences/loader.js +107 -0
- package/dist/preferences/schemas.cjs +74 -0
- package/dist/preferences/schemas.d.cts +104 -0
- package/dist/preferences/schemas.d.ts +104 -0
- package/dist/preferences/schemas.js +47 -0
- package/dist/search/index.cjs +28 -0
- package/dist/search/index.d.cts +5 -0
- package/dist/search/index.d.ts +5 -0
- package/dist/search/index.js +4 -0
- package/dist/search/search-service.cjs +245 -0
- package/dist/search/search-service.d.cts +47 -0
- package/dist/search/search-service.d.ts +47 -0
- package/dist/search/search-service.js +221 -0
- package/dist/search/types.cjs +16 -0
- package/dist/search/types.d.cts +78 -0
- package/dist/search/types.d.ts +78 -0
- package/dist/search/types.js +0 -0
- package/dist/session/chat-session.cjs +354 -0
- package/dist/session/chat-session.d.cts +284 -0
- package/dist/session/chat-session.d.ts +284 -0
- package/dist/session/chat-session.js +333 -0
- package/dist/session/error-codes.cjs +35 -0
- package/dist/session/error-codes.d.cts +13 -0
- package/dist/session/error-codes.d.ts +13 -0
- package/dist/session/error-codes.js +11 -0
- package/dist/session/errors.cjs +93 -0
- package/dist/session/errors.d.cts +58 -0
- package/dist/session/errors.d.ts +58 -0
- package/dist/session/errors.js +69 -0
- package/dist/session/history/database.cjs +95 -0
- package/dist/session/history/database.d.cts +28 -0
- package/dist/session/history/database.d.ts +28 -0
- package/dist/session/history/database.js +71 -0
- package/dist/session/history/factory.cjs +31 -0
- package/dist/session/history/factory.d.cts +11 -0
- package/dist/session/history/factory.d.ts +11 -0
- package/dist/session/history/factory.js +7 -0
- package/dist/session/history/types.cjs +16 -0
- package/dist/session/history/types.d.cts +17 -0
- package/dist/session/history/types.d.ts +17 -0
- package/dist/session/history/types.js +0 -0
- package/dist/session/index.cjs +37 -0
- package/dist/session/index.d.cts +53 -0
- package/dist/session/index.d.ts +53 -0
- package/dist/session/index.js +10 -0
- package/dist/session/schemas.cjs +32 -0
- package/dist/session/schemas.d.cts +16 -0
- package/dist/session/schemas.d.ts +16 -0
- package/dist/session/schemas.js +8 -0
- package/dist/session/session-manager.cjs +481 -0
- package/dist/session/session-manager.d.cts +219 -0
- package/dist/session/session-manager.d.ts +219 -0
- package/dist/session/session-manager.js +457 -0
- package/dist/storage/backend/cache-backend.cjs +16 -0
- package/dist/storage/backend/cache-backend.d.cts +15 -0
- package/dist/storage/backend/cache-backend.d.ts +15 -0
- package/dist/storage/backend/cache-backend.js +0 -0
- package/dist/storage/backend/database-backend.cjs +16 -0
- package/dist/storage/backend/database-backend.d.cts +19 -0
- package/dist/storage/backend/database-backend.d.ts +19 -0
- package/dist/storage/backend/database-backend.js +0 -0
- package/dist/storage/backend/memory-backend.cjs +140 -0
- package/dist/storage/backend/memory-backend.d.cts +34 -0
- package/dist/storage/backend/memory-backend.d.ts +34 -0
- package/dist/storage/backend/memory-backend.js +116 -0
- package/dist/storage/backend/postgres-backend.cjs +231 -0
- package/dist/storage/backend/postgres-backend.d.cts +37 -0
- package/dist/storage/backend/postgres-backend.d.ts +37 -0
- package/dist/{postgres-backend-WMWS7RAT.js → storage/backend/postgres-backend.js} +3 -12
- package/dist/storage/backend/redis-backend.cjs +184 -0
- package/dist/storage/backend/redis-backend.d.cts +36 -0
- package/dist/storage/backend/redis-backend.d.ts +36 -0
- package/dist/{redis-backend-BNLN3XHX.js → storage/backend/redis-backend.js} +3 -12
- package/dist/storage/backend/sqlite-backend.cjs +271 -0
- package/dist/storage/backend/sqlite-backend.d.cts +35 -0
- package/dist/storage/backend/sqlite-backend.d.ts +35 -0
- package/dist/{sqlite-backend-AR6XNK2Q.js → storage/backend/sqlite-backend.js} +6 -17
- package/dist/storage/backend/types.cjs +16 -0
- package/dist/storage/backend/types.d.cts +14 -0
- package/dist/storage/backend/types.d.ts +14 -0
- package/dist/storage/backend/types.js +0 -0
- package/dist/storage/error-codes.cjs +36 -0
- package/dist/storage/error-codes.d.cts +14 -0
- package/dist/storage/error-codes.d.ts +14 -0
- package/dist/storage/error-codes.js +12 -0
- package/dist/storage/errors.cjs +104 -0
- package/dist/storage/errors.d.cts +63 -0
- package/dist/storage/errors.d.ts +63 -0
- package/dist/{chunk-F2QFAECT.js → storage/errors.js} +23 -30
- package/dist/storage/index.cjs +33 -0
- package/dist/storage/index.d.cts +7 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/schemas.cjs +113 -0
- package/dist/storage/schemas.d.cts +856 -0
- package/dist/storage/schemas.d.ts +856 -0
- package/dist/storage/schemas.js +89 -0
- package/dist/storage/storage-manager.cjs +208 -0
- package/dist/storage/storage-manager.d.cts +52 -0
- package/dist/storage/storage-manager.d.ts +52 -0
- package/dist/storage/storage-manager.js +173 -0
- package/dist/storage/types.cjs +16 -0
- package/dist/storage/types.d.cts +5 -0
- package/dist/storage/types.d.ts +5 -0
- package/dist/storage/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +146 -0
- package/dist/systemPrompt/contributors.d.cts +44 -0
- package/dist/systemPrompt/contributors.d.ts +44 -0
- package/dist/systemPrompt/contributors.js +120 -0
- package/dist/systemPrompt/error-codes.cjs +35 -0
- package/dist/systemPrompt/error-codes.d.cts +13 -0
- package/dist/systemPrompt/error-codes.d.ts +13 -0
- package/dist/systemPrompt/error-codes.js +11 -0
- package/dist/systemPrompt/errors.cjs +93 -0
- package/dist/systemPrompt/errors.d.cts +55 -0
- package/dist/systemPrompt/errors.d.ts +55 -0
- package/dist/systemPrompt/errors.js +69 -0
- package/dist/systemPrompt/in-built-prompts.cjs +68 -0
- package/dist/systemPrompt/in-built-prompts.d.cts +28 -0
- package/dist/systemPrompt/in-built-prompts.d.ts +28 -0
- package/dist/systemPrompt/in-built-prompts.js +42 -0
- package/dist/systemPrompt/index.cjs +30 -0
- package/dist/systemPrompt/index.d.cts +14 -0
- package/dist/systemPrompt/index.d.ts +14 -0
- package/dist/systemPrompt/index.js +5 -0
- package/dist/systemPrompt/manager.cjs +93 -0
- package/dist/systemPrompt/manager.d.cts +31 -0
- package/dist/systemPrompt/manager.d.ts +31 -0
- package/dist/systemPrompt/manager.js +69 -0
- package/dist/systemPrompt/registry.cjs +51 -0
- package/dist/systemPrompt/registry.d.cts +20 -0
- package/dist/systemPrompt/registry.d.ts +20 -0
- package/dist/systemPrompt/registry.js +15 -0
- package/dist/systemPrompt/schemas.cjs +107 -0
- package/dist/systemPrompt/schemas.d.cts +401 -0
- package/dist/systemPrompt/schemas.d.ts +401 -0
- package/dist/systemPrompt/schemas.js +81 -0
- package/dist/systemPrompt/types.cjs +16 -0
- package/dist/systemPrompt/types.d.cts +19 -0
- package/dist/systemPrompt/types.d.ts +19 -0
- package/dist/systemPrompt/types.js +0 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.cjs +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.cts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +20 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.cjs +62 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.cts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +38 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +68 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.cts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.cts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.js +0 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.cjs +158 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.cts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.ts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.js +134 -0
- package/dist/tools/confirmation/factory.cjs +52 -0
- package/dist/tools/confirmation/factory.d.cts +37 -0
- package/dist/tools/confirmation/factory.d.ts +37 -0
- package/dist/tools/confirmation/factory.js +28 -0
- package/dist/tools/confirmation/noop-confirmation-provider.cjs +49 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.cts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.ts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.js +25 -0
- package/dist/tools/confirmation/types.cjs +16 -0
- package/dist/tools/confirmation/types.d.cts +46 -0
- package/dist/tools/confirmation/types.d.ts +46 -0
- package/dist/tools/confirmation/types.js +0 -0
- package/dist/tools/error-codes.cjs +40 -0
- package/dist/tools/error-codes.d.cts +18 -0
- package/dist/tools/error-codes.d.ts +18 -0
- package/dist/tools/error-codes.js +16 -0
- package/dist/tools/errors.cjs +164 -0
- package/dist/tools/errors.d.cts +97 -0
- package/dist/tools/errors.d.ts +97 -0
- package/dist/tools/errors.js +140 -0
- package/dist/tools/index.cjs +37 -0
- package/dist/tools/index.d.cts +19 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.cjs +61 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.cts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.js +37 -0
- package/dist/tools/internal-tools/index.cjs +24 -0
- package/dist/tools/internal-tools/index.d.cts +13 -0
- package/dist/tools/internal-tools/index.d.ts +13 -0
- package/dist/tools/internal-tools/index.js +2 -0
- package/dist/tools/internal-tools/provider.cjs +159 -0
- package/dist/tools/internal-tools/provider.d.cts +66 -0
- package/dist/tools/internal-tools/provider.d.ts +66 -0
- package/dist/tools/internal-tools/provider.js +135 -0
- package/dist/tools/internal-tools/registry.cjs +43 -0
- package/dist/tools/internal-tools/registry.d.cts +45 -0
- package/dist/tools/internal-tools/registry.d.ts +45 -0
- package/dist/tools/internal-tools/registry.js +17 -0
- package/dist/tools/schemas.cjs +45 -0
- package/dist/tools/schemas.d.cts +21 -0
- package/dist/tools/schemas.d.ts +21 -0
- package/dist/tools/schemas.js +20 -0
- package/dist/tools/tool-manager.cjs +275 -0
- package/dist/tools/tool-manager.d.cts +106 -0
- package/dist/tools/tool-manager.d.ts +106 -0
- package/dist/tools/tool-manager.js +251 -0
- package/dist/tools/types.cjs +16 -0
- package/dist/tools/types.d.cts +66 -0
- package/dist/tools/types.d.ts +66 -0
- package/dist/tools/types.js +0 -0
- package/dist/utils/api-key-resolver.cjs +62 -0
- package/dist/utils/api-key-resolver.d.cts +23 -0
- package/dist/utils/api-key-resolver.d.ts +23 -0
- package/dist/utils/api-key-resolver.js +36 -0
- package/dist/utils/api-key-store.cjs +56 -0
- package/dist/utils/api-key-store.d.cts +26 -0
- package/dist/utils/api-key-store.d.ts +26 -0
- package/dist/utils/api-key-store.js +30 -0
- package/dist/utils/env.cjs +154 -0
- package/dist/utils/env.d.cts +29 -0
- package/dist/utils/env.d.ts +29 -0
- package/dist/utils/env.js +118 -0
- package/dist/utils/error-conversion.cjs +53 -0
- package/dist/utils/error-conversion.d.cts +13 -0
- package/dist/utils/error-conversion.d.ts +13 -0
- package/dist/utils/error-conversion.js +29 -0
- package/dist/utils/execution-context.cjs +85 -0
- package/dist/utils/execution-context.d.cts +21 -0
- package/dist/utils/execution-context.d.ts +21 -0
- package/dist/utils/execution-context.js +49 -0
- package/dist/{chunk-MVKLS3LM.js → utils/fs-walk.cjs} +27 -18
- package/dist/utils/fs-walk.d.cts +9 -0
- package/dist/utils/fs-walk.d.ts +9 -0
- package/dist/utils/fs-walk.js +18 -0
- package/dist/utils/index.cjs +44 -0
- package/dist/utils/index.d.cts +63 -0
- package/dist/utils/index.d.ts +63 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/path.cjs +197 -0
- package/dist/utils/path.d.cts +54 -0
- package/dist/utils/path.d.ts +54 -0
- package/dist/utils/path.js +159 -0
- package/dist/utils/port-utils.cjs +37 -0
- package/dist/utils/port-utils.d.cts +11 -0
- package/dist/utils/port-utils.d.ts +11 -0
- package/dist/utils/port-utils.js +13 -0
- package/dist/utils/port-utils.spec.cjs +26 -0
- package/dist/utils/port-utils.spec.d.cts +2 -0
- package/dist/utils/port-utils.spec.d.ts +2 -0
- package/dist/utils/port-utils.spec.js +25 -0
- package/dist/utils/redactor.cjs +105 -0
- package/dist/utils/redactor.d.cts +18 -0
- package/dist/utils/redactor.d.ts +18 -0
- package/dist/utils/redactor.js +81 -0
- package/dist/utils/result.cjs +115 -0
- package/dist/utils/result.d.cts +180 -0
- package/dist/utils/result.d.ts +180 -0
- package/dist/utils/result.js +82 -0
- package/dist/utils/safe-stringify.cjs +57 -0
- package/dist/utils/safe-stringify.d.cts +7 -0
- package/dist/utils/safe-stringify.d.ts +7 -0
- package/dist/utils/safe-stringify.js +33 -0
- package/dist/utils/schema.cjs +42 -0
- package/dist/utils/schema.d.cts +6 -0
- package/dist/utils/schema.d.ts +6 -0
- package/dist/utils/schema.js +18 -0
- package/dist/utils/service-initializer.cjs +119 -0
- package/dist/utils/service-initializer.d.cts +63 -0
- package/dist/utils/service-initializer.d.ts +63 -0
- package/dist/utils/service-initializer.js +95 -0
- package/dist/utils/user-info.cjs +30 -0
- package/dist/utils/user-info.d.cts +3 -0
- package/dist/utils/user-info.d.ts +3 -0
- package/dist/utils/user-info.js +6 -0
- package/dist/utils/zod-schema-converter.cjs +112 -0
- package/dist/utils/zod-schema-converter.d.cts +13 -0
- package/dist/utils/zod-schema-converter.d.ts +13 -0
- package/dist/utils/zod-schema-converter.js +87 -0
- package/package.json +2 -2
- package/dist/chunk-D62MHQBE.js +0 -2203
- package/dist/chunk-FCJVTIBV.js +0 -535
- package/dist/chunk-TPERKLLN.js +0 -75
- package/dist/errors-ZZ4Z3FKB.js +0 -10
- package/dist/loader-HBNEYPQZ.js +0 -20
- package/dist/path-TP7WBDED.js +0 -21
- package/dist/registry-Z4DFXODW.js +0 -14
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var registry_exports = {};
|
|
30
|
+
__export(registry_exports, {
|
|
31
|
+
LocalAgentRegistry: () => LocalAgentRegistry,
|
|
32
|
+
getAgentRegistry: () => getAgentRegistry
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(registry_exports);
|
|
35
|
+
var import_fs = require("fs");
|
|
36
|
+
var import_fs2 = require("fs");
|
|
37
|
+
var import_path = __toESM(require("path"), 1);
|
|
38
|
+
var import_logger = require("../../logger/index.cjs");
|
|
39
|
+
var import_path2 = require("../../utils/path.cjs");
|
|
40
|
+
var import_loader = require("../../preferences/loader.cjs");
|
|
41
|
+
var import_writer = require("../../config/writer.cjs");
|
|
42
|
+
var import_types = require("./types.js");
|
|
43
|
+
var import_errors = require("./errors.js");
|
|
44
|
+
let cachedRegistry = null;
|
|
45
|
+
class LocalAgentRegistry {
|
|
46
|
+
_registry = null;
|
|
47
|
+
/**
|
|
48
|
+
* Lazy load registry from JSON file
|
|
49
|
+
*/
|
|
50
|
+
getRegistry() {
|
|
51
|
+
if (this._registry === null) {
|
|
52
|
+
this._registry = this.loadRegistry();
|
|
53
|
+
}
|
|
54
|
+
return this._registry;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load registry from bundled JSON file
|
|
58
|
+
* Uses fail-fast approach - throws RegistryError for any loading issues
|
|
59
|
+
*/
|
|
60
|
+
loadRegistry() {
|
|
61
|
+
let jsonPath;
|
|
62
|
+
try {
|
|
63
|
+
jsonPath = (0, import_path2.resolveBundledScript)("agents/agent-registry.json");
|
|
64
|
+
} catch (error) {
|
|
65
|
+
throw import_errors.RegistryError.registryNotFound(
|
|
66
|
+
"agents/agent-registry.json",
|
|
67
|
+
error instanceof Error ? error.message : String(error)
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
if (!(0, import_fs.existsSync)(jsonPath)) {
|
|
71
|
+
throw import_errors.RegistryError.registryNotFound(jsonPath, "File doesn't exist");
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const jsonData = (0, import_fs.readFileSync)(jsonPath, "utf-8");
|
|
75
|
+
const rawRegistry = JSON.parse(jsonData);
|
|
76
|
+
return import_types.RegistrySchema.parse(rawRegistry);
|
|
77
|
+
} catch (error) {
|
|
78
|
+
throw import_errors.RegistryError.registryParseError(
|
|
79
|
+
jsonPath,
|
|
80
|
+
error instanceof Error ? error.message : String(error)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if agent exists in registry
|
|
86
|
+
*/
|
|
87
|
+
hasAgent(name) {
|
|
88
|
+
const registry = this.getRegistry();
|
|
89
|
+
return name in registry.agents;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get available agents with their metadata from registry
|
|
93
|
+
*/
|
|
94
|
+
getAvailableAgents() {
|
|
95
|
+
const registry = this.getRegistry();
|
|
96
|
+
return registry.agents;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve main config file for installed agent
|
|
100
|
+
* Handles both directory agents (with main field) and single-file agents
|
|
101
|
+
*/
|
|
102
|
+
resolveMainConfig(agentDir, agentName) {
|
|
103
|
+
const registry = this.getRegistry();
|
|
104
|
+
const agentData = registry.agents[agentName];
|
|
105
|
+
if (!agentData) {
|
|
106
|
+
const available = Object.keys(registry.agents);
|
|
107
|
+
throw import_errors.RegistryError.agentNotFound(agentName, available);
|
|
108
|
+
}
|
|
109
|
+
if (agentData.source.endsWith("/")) {
|
|
110
|
+
if (!agentData.main) {
|
|
111
|
+
throw import_errors.RegistryError.agentInvalidEntry(
|
|
112
|
+
agentName,
|
|
113
|
+
"directory entry missing main field"
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
const mainConfigPath = import_path.default.join(agentDir, agentData.main);
|
|
117
|
+
if (!(0, import_fs.existsSync)(mainConfigPath)) {
|
|
118
|
+
throw import_errors.RegistryError.mainConfigMissing(agentName, mainConfigPath);
|
|
119
|
+
}
|
|
120
|
+
return mainConfigPath;
|
|
121
|
+
} else {
|
|
122
|
+
const filename = import_path.default.basename(agentData.source);
|
|
123
|
+
const configPath = import_path.default.join(agentDir, filename);
|
|
124
|
+
if (!(0, import_fs.existsSync)(configPath)) {
|
|
125
|
+
throw import_errors.RegistryError.configNotFound(configPath);
|
|
126
|
+
}
|
|
127
|
+
return configPath;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Install agent atomically using temp + rename pattern
|
|
132
|
+
* @param agentName Name of the agent to install
|
|
133
|
+
* @param injectPreferences Whether to inject global preferences into installed agent (default: true)
|
|
134
|
+
*/
|
|
135
|
+
async installAgent(agentName, injectPreferences = true) {
|
|
136
|
+
import_logger.logger.info(`Installing agent: ${agentName}`);
|
|
137
|
+
const registry = this.getRegistry();
|
|
138
|
+
const agentData = registry.agents[agentName];
|
|
139
|
+
if (!agentData) {
|
|
140
|
+
const available = Object.keys(registry.agents);
|
|
141
|
+
throw import_errors.RegistryError.agentNotFound(agentName, available);
|
|
142
|
+
}
|
|
143
|
+
const globalAgentsDir = (0, import_path2.getDextoGlobalPath)("agents");
|
|
144
|
+
const targetDir = import_path.default.join(globalAgentsDir, agentName);
|
|
145
|
+
if ((0, import_fs.existsSync)(targetDir)) {
|
|
146
|
+
import_logger.logger.info(`Agent '${agentName}' already installed`);
|
|
147
|
+
return this.resolveMainConfig(targetDir, agentName);
|
|
148
|
+
}
|
|
149
|
+
await import_fs2.promises.mkdir(globalAgentsDir, { recursive: true });
|
|
150
|
+
const sourcePath = (0, import_path2.resolveBundledScript)(`agents/${agentData.source}`);
|
|
151
|
+
const tempDir = `${targetDir}.tmp.${Date.now()}`;
|
|
152
|
+
try {
|
|
153
|
+
if (agentData.source.endsWith("/")) {
|
|
154
|
+
await (0, import_path2.copyDirectory)(sourcePath, tempDir);
|
|
155
|
+
} else {
|
|
156
|
+
await import_fs2.promises.mkdir(tempDir, { recursive: true });
|
|
157
|
+
const targetFile = import_path.default.join(tempDir, import_path.default.basename(sourcePath));
|
|
158
|
+
await import_fs2.promises.copyFile(sourcePath, targetFile);
|
|
159
|
+
}
|
|
160
|
+
const mainConfigPath = this.resolveMainConfig(tempDir, agentName);
|
|
161
|
+
if (!(0, import_fs.existsSync)(mainConfigPath)) {
|
|
162
|
+
throw import_errors.RegistryError.installationValidationFailed(agentName, mainConfigPath);
|
|
163
|
+
}
|
|
164
|
+
await import_fs2.promises.rename(tempDir, targetDir);
|
|
165
|
+
import_logger.logger.info(`\u2713 Installed agent '${agentName}' to ${targetDir}`);
|
|
166
|
+
if (injectPreferences) {
|
|
167
|
+
try {
|
|
168
|
+
const preferences = await (0, import_loader.loadGlobalPreferences)();
|
|
169
|
+
await (0, import_writer.writePreferencesToAgent)(targetDir, preferences);
|
|
170
|
+
import_logger.logger.info(`\u2713 Applied global preferences to installed agent '${agentName}'`);
|
|
171
|
+
} catch (error) {
|
|
172
|
+
import_logger.logger.warn(
|
|
173
|
+
`Failed to inject preferences to '${agentName}': ${error instanceof Error ? error.message : String(error)}`
|
|
174
|
+
);
|
|
175
|
+
console.log(
|
|
176
|
+
`\u26A0\uFE0F Warning: Could not apply preferences to '${agentName}' - agent will use bundled settings`
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
} else {
|
|
180
|
+
import_logger.logger.info(
|
|
181
|
+
`Skipped preference injection for '${agentName}' (injectPreferences=false)`
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
return this.resolveMainConfig(targetDir, agentName);
|
|
185
|
+
} catch (error) {
|
|
186
|
+
try {
|
|
187
|
+
if ((0, import_fs.existsSync)(tempDir)) {
|
|
188
|
+
await import_fs2.promises.rm(tempDir, { recursive: true, force: true });
|
|
189
|
+
}
|
|
190
|
+
} catch (cleanupError) {
|
|
191
|
+
import_logger.logger.error(
|
|
192
|
+
`Failed to clean up temp directory: ${cleanupError}. Skipping cleanup...`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
throw import_errors.RegistryError.installationFailed(
|
|
196
|
+
agentName,
|
|
197
|
+
error instanceof Error ? error.message : String(error)
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Resolve a registry agent name to a config path
|
|
203
|
+
* NOTE: Only handles registry names, not file paths (routing done in loadAgentConfig)
|
|
204
|
+
* Handles installing agent if needed
|
|
205
|
+
* @param agentName Name of the agent to resolve
|
|
206
|
+
* @param autoInstall Whether to automatically install missing agents from registry (default: true)
|
|
207
|
+
* @param injectPreferences Whether to inject preferences during auto-installation (default: true)
|
|
208
|
+
*/
|
|
209
|
+
async resolveAgent(agentName, autoInstall = true, injectPreferences = true) {
|
|
210
|
+
import_logger.logger.debug(`Resolving registry agent: ${agentName}`);
|
|
211
|
+
const globalAgentsDir = (0, import_path2.getDextoGlobalPath)("agents");
|
|
212
|
+
const installedPath = import_path.default.join(globalAgentsDir, agentName);
|
|
213
|
+
if ((0, import_fs.existsSync)(installedPath)) {
|
|
214
|
+
const mainConfig = this.resolveMainConfig(installedPath, agentName);
|
|
215
|
+
import_logger.logger.debug(`Resolved installed agent '${agentName}' to: ${mainConfig}`);
|
|
216
|
+
return mainConfig;
|
|
217
|
+
}
|
|
218
|
+
import_logger.logger.debug(`Agent '${agentName}' not found in installed path: ${installedPath}`);
|
|
219
|
+
if (this.hasAgent(agentName)) {
|
|
220
|
+
if (autoInstall) {
|
|
221
|
+
import_logger.logger.info(`Installing agent '${agentName}' from registry...`);
|
|
222
|
+
return await this.installAgent(agentName, injectPreferences);
|
|
223
|
+
} else {
|
|
224
|
+
const registry2 = this.getRegistry();
|
|
225
|
+
const available2 = Object.keys(registry2.agents);
|
|
226
|
+
throw import_errors.RegistryError.agentNotInstalledAutoInstallDisabled(agentName, available2);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const registry = this.getRegistry();
|
|
230
|
+
const available = Object.keys(registry.agents);
|
|
231
|
+
throw import_errors.RegistryError.agentNotFound(agentName, available);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get list of currently installed agents
|
|
235
|
+
*/
|
|
236
|
+
async getInstalledAgents() {
|
|
237
|
+
const globalAgentsDir = (0, import_path2.getDextoGlobalPath)("agents");
|
|
238
|
+
if (!(0, import_fs.existsSync)(globalAgentsDir)) {
|
|
239
|
+
return [];
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
const entries = await import_fs2.promises.readdir(globalAgentsDir, { withFileTypes: true });
|
|
243
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((name) => !name.startsWith(".tmp") && !name.includes(".tmp."));
|
|
244
|
+
} catch (error) {
|
|
245
|
+
import_logger.logger.error(`Failed to read installed agents directory: ${error}`);
|
|
246
|
+
return [];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Check if an agent is safe to uninstall (not the default-agent which is critical)
|
|
251
|
+
*/
|
|
252
|
+
isAgentSafeToUninstall(agentName) {
|
|
253
|
+
return agentName !== "default-agent";
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Uninstall an agent by removing its directory
|
|
257
|
+
* @param agentName Name of the agent to uninstall
|
|
258
|
+
* @param force Whether to force uninstall even if agent is protected (default: false)
|
|
259
|
+
*/
|
|
260
|
+
async uninstallAgent(agentName, force = false) {
|
|
261
|
+
const globalAgentsDir = (0, import_path2.getDextoGlobalPath)("agents");
|
|
262
|
+
const agentDir = import_path.default.join(globalAgentsDir, agentName);
|
|
263
|
+
import_logger.logger.info(`Uninstalling agent: ${agentName} from ${agentDir}`);
|
|
264
|
+
if (!(0, import_fs.existsSync)(agentDir)) {
|
|
265
|
+
throw import_errors.RegistryError.agentNotInstalled(agentName);
|
|
266
|
+
}
|
|
267
|
+
if (!force && !this.isAgentSafeToUninstall(agentName)) {
|
|
268
|
+
throw import_errors.RegistryError.agentProtected(agentName);
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
await import_fs2.promises.rm(agentDir, { recursive: true, force: true });
|
|
272
|
+
import_logger.logger.info(`\u2713 Removed agent '${agentName}' from ${agentDir}`);
|
|
273
|
+
} catch (error) {
|
|
274
|
+
throw import_errors.RegistryError.uninstallationFailed(
|
|
275
|
+
agentName,
|
|
276
|
+
error instanceof Error ? error.message : String(error)
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function getAgentRegistry() {
|
|
282
|
+
if (cachedRegistry === null) {
|
|
283
|
+
cachedRegistry = new LocalAgentRegistry();
|
|
284
|
+
}
|
|
285
|
+
return cachedRegistry;
|
|
286
|
+
}
|
|
287
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
288
|
+
0 && (module.exports = {
|
|
289
|
+
LocalAgentRegistry,
|
|
290
|
+
getAgentRegistry
|
|
291
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AgentRegistry, Registry, AgentRegistryEntry } from './types.cjs';
|
|
2
|
+
import 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Local agent registry implementation
|
|
6
|
+
* TODO: MOVE THIS INTO CLI WHERE IT IS USED, and add posthog instrumentation for install/uninstall/resolve/etc, similar to manual install command
|
|
7
|
+
*/
|
|
8
|
+
declare class LocalAgentRegistry implements AgentRegistry {
|
|
9
|
+
private _registry;
|
|
10
|
+
/**
|
|
11
|
+
* Lazy load registry from JSON file
|
|
12
|
+
*/
|
|
13
|
+
getRegistry(): Registry;
|
|
14
|
+
/**
|
|
15
|
+
* Load registry from bundled JSON file
|
|
16
|
+
* Uses fail-fast approach - throws RegistryError for any loading issues
|
|
17
|
+
*/
|
|
18
|
+
private loadRegistry;
|
|
19
|
+
/**
|
|
20
|
+
* Check if agent exists in registry
|
|
21
|
+
*/
|
|
22
|
+
hasAgent(name: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get available agents with their metadata from registry
|
|
25
|
+
*/
|
|
26
|
+
getAvailableAgents(): Record<string, AgentRegistryEntry>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve main config file for installed agent
|
|
29
|
+
* Handles both directory agents (with main field) and single-file agents
|
|
30
|
+
*/
|
|
31
|
+
resolveMainConfig(agentDir: string, agentName: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Install agent atomically using temp + rename pattern
|
|
34
|
+
* @param agentName Name of the agent to install
|
|
35
|
+
* @param injectPreferences Whether to inject global preferences into installed agent (default: true)
|
|
36
|
+
*/
|
|
37
|
+
installAgent(agentName: string, injectPreferences?: boolean): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve a registry agent name to a config path
|
|
40
|
+
* NOTE: Only handles registry names, not file paths (routing done in loadAgentConfig)
|
|
41
|
+
* Handles installing agent if needed
|
|
42
|
+
* @param agentName Name of the agent to resolve
|
|
43
|
+
* @param autoInstall Whether to automatically install missing agents from registry (default: true)
|
|
44
|
+
* @param injectPreferences Whether to inject preferences during auto-installation (default: true)
|
|
45
|
+
*/
|
|
46
|
+
resolveAgent(agentName: string, autoInstall?: boolean, injectPreferences?: boolean): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Get list of currently installed agents
|
|
49
|
+
*/
|
|
50
|
+
getInstalledAgents(): Promise<string[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Check if an agent is safe to uninstall (not the default-agent which is critical)
|
|
53
|
+
*/
|
|
54
|
+
private isAgentSafeToUninstall;
|
|
55
|
+
/**
|
|
56
|
+
* Uninstall an agent by removing its directory
|
|
57
|
+
* @param agentName Name of the agent to uninstall
|
|
58
|
+
* @param force Whether to force uninstall even if agent is protected (default: false)
|
|
59
|
+
*/
|
|
60
|
+
uninstallAgent(agentName: string, force?: boolean): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get cached registry instance (singleton pattern)
|
|
64
|
+
*/
|
|
65
|
+
declare function getAgentRegistry(): LocalAgentRegistry;
|
|
66
|
+
|
|
67
|
+
export { LocalAgentRegistry, getAgentRegistry };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AgentRegistry, Registry, AgentRegistryEntry } from './types.js';
|
|
2
|
+
import 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Local agent registry implementation
|
|
6
|
+
* TODO: MOVE THIS INTO CLI WHERE IT IS USED, and add posthog instrumentation for install/uninstall/resolve/etc, similar to manual install command
|
|
7
|
+
*/
|
|
8
|
+
declare class LocalAgentRegistry implements AgentRegistry {
|
|
9
|
+
private _registry;
|
|
10
|
+
/**
|
|
11
|
+
* Lazy load registry from JSON file
|
|
12
|
+
*/
|
|
13
|
+
getRegistry(): Registry;
|
|
14
|
+
/**
|
|
15
|
+
* Load registry from bundled JSON file
|
|
16
|
+
* Uses fail-fast approach - throws RegistryError for any loading issues
|
|
17
|
+
*/
|
|
18
|
+
private loadRegistry;
|
|
19
|
+
/**
|
|
20
|
+
* Check if agent exists in registry
|
|
21
|
+
*/
|
|
22
|
+
hasAgent(name: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get available agents with their metadata from registry
|
|
25
|
+
*/
|
|
26
|
+
getAvailableAgents(): Record<string, AgentRegistryEntry>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve main config file for installed agent
|
|
29
|
+
* Handles both directory agents (with main field) and single-file agents
|
|
30
|
+
*/
|
|
31
|
+
resolveMainConfig(agentDir: string, agentName: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Install agent atomically using temp + rename pattern
|
|
34
|
+
* @param agentName Name of the agent to install
|
|
35
|
+
* @param injectPreferences Whether to inject global preferences into installed agent (default: true)
|
|
36
|
+
*/
|
|
37
|
+
installAgent(agentName: string, injectPreferences?: boolean): Promise<string>;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve a registry agent name to a config path
|
|
40
|
+
* NOTE: Only handles registry names, not file paths (routing done in loadAgentConfig)
|
|
41
|
+
* Handles installing agent if needed
|
|
42
|
+
* @param agentName Name of the agent to resolve
|
|
43
|
+
* @param autoInstall Whether to automatically install missing agents from registry (default: true)
|
|
44
|
+
* @param injectPreferences Whether to inject preferences during auto-installation (default: true)
|
|
45
|
+
*/
|
|
46
|
+
resolveAgent(agentName: string, autoInstall?: boolean, injectPreferences?: boolean): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Get list of currently installed agents
|
|
49
|
+
*/
|
|
50
|
+
getInstalledAgents(): Promise<string[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Check if an agent is safe to uninstall (not the default-agent which is critical)
|
|
53
|
+
*/
|
|
54
|
+
private isAgentSafeToUninstall;
|
|
55
|
+
/**
|
|
56
|
+
* Uninstall an agent by removing its directory
|
|
57
|
+
* @param agentName Name of the agent to uninstall
|
|
58
|
+
* @param force Whether to force uninstall even if agent is protected (default: false)
|
|
59
|
+
*/
|
|
60
|
+
uninstallAgent(agentName: string, force?: boolean): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get cached registry instance (singleton pattern)
|
|
64
|
+
*/
|
|
65
|
+
declare function getAgentRegistry(): LocalAgentRegistry;
|
|
66
|
+
|
|
67
|
+
export { LocalAgentRegistry, getAgentRegistry };
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { logger } from "../../logger/index.js";
|
|
5
|
+
import { resolveBundledScript, getDextoGlobalPath, copyDirectory } from "../../utils/path.js";
|
|
6
|
+
import { loadGlobalPreferences } from "../../preferences/loader.js";
|
|
7
|
+
import { writePreferencesToAgent } from "../../config/writer.js";
|
|
8
|
+
import { RegistrySchema } from "./types.js";
|
|
9
|
+
import { RegistryError } from "./errors.js";
|
|
10
|
+
let cachedRegistry = null;
|
|
11
|
+
class LocalAgentRegistry {
|
|
12
|
+
_registry = null;
|
|
13
|
+
/**
|
|
14
|
+
* Lazy load registry from JSON file
|
|
15
|
+
*/
|
|
16
|
+
getRegistry() {
|
|
17
|
+
if (this._registry === null) {
|
|
18
|
+
this._registry = this.loadRegistry();
|
|
19
|
+
}
|
|
20
|
+
return this._registry;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load registry from bundled JSON file
|
|
24
|
+
* Uses fail-fast approach - throws RegistryError for any loading issues
|
|
25
|
+
*/
|
|
26
|
+
loadRegistry() {
|
|
27
|
+
let jsonPath;
|
|
28
|
+
try {
|
|
29
|
+
jsonPath = resolveBundledScript("agents/agent-registry.json");
|
|
30
|
+
} catch (error) {
|
|
31
|
+
throw RegistryError.registryNotFound(
|
|
32
|
+
"agents/agent-registry.json",
|
|
33
|
+
error instanceof Error ? error.message : String(error)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
if (!existsSync(jsonPath)) {
|
|
37
|
+
throw RegistryError.registryNotFound(jsonPath, "File doesn't exist");
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const jsonData = readFileSync(jsonPath, "utf-8");
|
|
41
|
+
const rawRegistry = JSON.parse(jsonData);
|
|
42
|
+
return RegistrySchema.parse(rawRegistry);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
throw RegistryError.registryParseError(
|
|
45
|
+
jsonPath,
|
|
46
|
+
error instanceof Error ? error.message : String(error)
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if agent exists in registry
|
|
52
|
+
*/
|
|
53
|
+
hasAgent(name) {
|
|
54
|
+
const registry = this.getRegistry();
|
|
55
|
+
return name in registry.agents;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get available agents with their metadata from registry
|
|
59
|
+
*/
|
|
60
|
+
getAvailableAgents() {
|
|
61
|
+
const registry = this.getRegistry();
|
|
62
|
+
return registry.agents;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve main config file for installed agent
|
|
66
|
+
* Handles both directory agents (with main field) and single-file agents
|
|
67
|
+
*/
|
|
68
|
+
resolveMainConfig(agentDir, agentName) {
|
|
69
|
+
const registry = this.getRegistry();
|
|
70
|
+
const agentData = registry.agents[agentName];
|
|
71
|
+
if (!agentData) {
|
|
72
|
+
const available = Object.keys(registry.agents);
|
|
73
|
+
throw RegistryError.agentNotFound(agentName, available);
|
|
74
|
+
}
|
|
75
|
+
if (agentData.source.endsWith("/")) {
|
|
76
|
+
if (!agentData.main) {
|
|
77
|
+
throw RegistryError.agentInvalidEntry(
|
|
78
|
+
agentName,
|
|
79
|
+
"directory entry missing main field"
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
const mainConfigPath = path.join(agentDir, agentData.main);
|
|
83
|
+
if (!existsSync(mainConfigPath)) {
|
|
84
|
+
throw RegistryError.mainConfigMissing(agentName, mainConfigPath);
|
|
85
|
+
}
|
|
86
|
+
return mainConfigPath;
|
|
87
|
+
} else {
|
|
88
|
+
const filename = path.basename(agentData.source);
|
|
89
|
+
const configPath = path.join(agentDir, filename);
|
|
90
|
+
if (!existsSync(configPath)) {
|
|
91
|
+
throw RegistryError.configNotFound(configPath);
|
|
92
|
+
}
|
|
93
|
+
return configPath;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Install agent atomically using temp + rename pattern
|
|
98
|
+
* @param agentName Name of the agent to install
|
|
99
|
+
* @param injectPreferences Whether to inject global preferences into installed agent (default: true)
|
|
100
|
+
*/
|
|
101
|
+
async installAgent(agentName, injectPreferences = true) {
|
|
102
|
+
logger.info(`Installing agent: ${agentName}`);
|
|
103
|
+
const registry = this.getRegistry();
|
|
104
|
+
const agentData = registry.agents[agentName];
|
|
105
|
+
if (!agentData) {
|
|
106
|
+
const available = Object.keys(registry.agents);
|
|
107
|
+
throw RegistryError.agentNotFound(agentName, available);
|
|
108
|
+
}
|
|
109
|
+
const globalAgentsDir = getDextoGlobalPath("agents");
|
|
110
|
+
const targetDir = path.join(globalAgentsDir, agentName);
|
|
111
|
+
if (existsSync(targetDir)) {
|
|
112
|
+
logger.info(`Agent '${agentName}' already installed`);
|
|
113
|
+
return this.resolveMainConfig(targetDir, agentName);
|
|
114
|
+
}
|
|
115
|
+
await fs.mkdir(globalAgentsDir, { recursive: true });
|
|
116
|
+
const sourcePath = resolveBundledScript(`agents/${agentData.source}`);
|
|
117
|
+
const tempDir = `${targetDir}.tmp.${Date.now()}`;
|
|
118
|
+
try {
|
|
119
|
+
if (agentData.source.endsWith("/")) {
|
|
120
|
+
await copyDirectory(sourcePath, tempDir);
|
|
121
|
+
} else {
|
|
122
|
+
await fs.mkdir(tempDir, { recursive: true });
|
|
123
|
+
const targetFile = path.join(tempDir, path.basename(sourcePath));
|
|
124
|
+
await fs.copyFile(sourcePath, targetFile);
|
|
125
|
+
}
|
|
126
|
+
const mainConfigPath = this.resolveMainConfig(tempDir, agentName);
|
|
127
|
+
if (!existsSync(mainConfigPath)) {
|
|
128
|
+
throw RegistryError.installationValidationFailed(agentName, mainConfigPath);
|
|
129
|
+
}
|
|
130
|
+
await fs.rename(tempDir, targetDir);
|
|
131
|
+
logger.info(`\u2713 Installed agent '${agentName}' to ${targetDir}`);
|
|
132
|
+
if (injectPreferences) {
|
|
133
|
+
try {
|
|
134
|
+
const preferences = await loadGlobalPreferences();
|
|
135
|
+
await writePreferencesToAgent(targetDir, preferences);
|
|
136
|
+
logger.info(`\u2713 Applied global preferences to installed agent '${agentName}'`);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
logger.warn(
|
|
139
|
+
`Failed to inject preferences to '${agentName}': ${error instanceof Error ? error.message : String(error)}`
|
|
140
|
+
);
|
|
141
|
+
console.log(
|
|
142
|
+
`\u26A0\uFE0F Warning: Could not apply preferences to '${agentName}' - agent will use bundled settings`
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
logger.info(
|
|
147
|
+
`Skipped preference injection for '${agentName}' (injectPreferences=false)`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
return this.resolveMainConfig(targetDir, agentName);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
try {
|
|
153
|
+
if (existsSync(tempDir)) {
|
|
154
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
} catch (cleanupError) {
|
|
157
|
+
logger.error(
|
|
158
|
+
`Failed to clean up temp directory: ${cleanupError}. Skipping cleanup...`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
throw RegistryError.installationFailed(
|
|
162
|
+
agentName,
|
|
163
|
+
error instanceof Error ? error.message : String(error)
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolve a registry agent name to a config path
|
|
169
|
+
* NOTE: Only handles registry names, not file paths (routing done in loadAgentConfig)
|
|
170
|
+
* Handles installing agent if needed
|
|
171
|
+
* @param agentName Name of the agent to resolve
|
|
172
|
+
* @param autoInstall Whether to automatically install missing agents from registry (default: true)
|
|
173
|
+
* @param injectPreferences Whether to inject preferences during auto-installation (default: true)
|
|
174
|
+
*/
|
|
175
|
+
async resolveAgent(agentName, autoInstall = true, injectPreferences = true) {
|
|
176
|
+
logger.debug(`Resolving registry agent: ${agentName}`);
|
|
177
|
+
const globalAgentsDir = getDextoGlobalPath("agents");
|
|
178
|
+
const installedPath = path.join(globalAgentsDir, agentName);
|
|
179
|
+
if (existsSync(installedPath)) {
|
|
180
|
+
const mainConfig = this.resolveMainConfig(installedPath, agentName);
|
|
181
|
+
logger.debug(`Resolved installed agent '${agentName}' to: ${mainConfig}`);
|
|
182
|
+
return mainConfig;
|
|
183
|
+
}
|
|
184
|
+
logger.debug(`Agent '${agentName}' not found in installed path: ${installedPath}`);
|
|
185
|
+
if (this.hasAgent(agentName)) {
|
|
186
|
+
if (autoInstall) {
|
|
187
|
+
logger.info(`Installing agent '${agentName}' from registry...`);
|
|
188
|
+
return await this.installAgent(agentName, injectPreferences);
|
|
189
|
+
} else {
|
|
190
|
+
const registry2 = this.getRegistry();
|
|
191
|
+
const available2 = Object.keys(registry2.agents);
|
|
192
|
+
throw RegistryError.agentNotInstalledAutoInstallDisabled(agentName, available2);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const registry = this.getRegistry();
|
|
196
|
+
const available = Object.keys(registry.agents);
|
|
197
|
+
throw RegistryError.agentNotFound(agentName, available);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get list of currently installed agents
|
|
201
|
+
*/
|
|
202
|
+
async getInstalledAgents() {
|
|
203
|
+
const globalAgentsDir = getDextoGlobalPath("agents");
|
|
204
|
+
if (!existsSync(globalAgentsDir)) {
|
|
205
|
+
return [];
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const entries = await fs.readdir(globalAgentsDir, { withFileTypes: true });
|
|
209
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((name) => !name.startsWith(".tmp") && !name.includes(".tmp."));
|
|
210
|
+
} catch (error) {
|
|
211
|
+
logger.error(`Failed to read installed agents directory: ${error}`);
|
|
212
|
+
return [];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Check if an agent is safe to uninstall (not the default-agent which is critical)
|
|
217
|
+
*/
|
|
218
|
+
isAgentSafeToUninstall(agentName) {
|
|
219
|
+
return agentName !== "default-agent";
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Uninstall an agent by removing its directory
|
|
223
|
+
* @param agentName Name of the agent to uninstall
|
|
224
|
+
* @param force Whether to force uninstall even if agent is protected (default: false)
|
|
225
|
+
*/
|
|
226
|
+
async uninstallAgent(agentName, force = false) {
|
|
227
|
+
const globalAgentsDir = getDextoGlobalPath("agents");
|
|
228
|
+
const agentDir = path.join(globalAgentsDir, agentName);
|
|
229
|
+
logger.info(`Uninstalling agent: ${agentName} from ${agentDir}`);
|
|
230
|
+
if (!existsSync(agentDir)) {
|
|
231
|
+
throw RegistryError.agentNotInstalled(agentName);
|
|
232
|
+
}
|
|
233
|
+
if (!force && !this.isAgentSafeToUninstall(agentName)) {
|
|
234
|
+
throw RegistryError.agentProtected(agentName);
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
await fs.rm(agentDir, { recursive: true, force: true });
|
|
238
|
+
logger.info(`\u2713 Removed agent '${agentName}' from ${agentDir}`);
|
|
239
|
+
} catch (error) {
|
|
240
|
+
throw RegistryError.uninstallationFailed(
|
|
241
|
+
agentName,
|
|
242
|
+
error instanceof Error ? error.message : String(error)
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function getAgentRegistry() {
|
|
248
|
+
if (cachedRegistry === null) {
|
|
249
|
+
cachedRegistry = new LocalAgentRegistry();
|
|
250
|
+
}
|
|
251
|
+
return cachedRegistry;
|
|
252
|
+
}
|
|
253
|
+
export {
|
|
254
|
+
LocalAgentRegistry,
|
|
255
|
+
getAgentRegistry
|
|
256
|
+
};
|