kemdicode-mcp 1.15.0
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/LICENSE +674 -0
- package/README.md +486 -0
- package/dist/ai/agents.d.ts +40 -0
- package/dist/ai/agents.d.ts.map +1 -0
- package/dist/ai/agents.js +164 -0
- package/dist/ai/agents.js.map +1 -0
- package/dist/ai/client.d.ts +73 -0
- package/dist/ai/client.d.ts.map +1 -0
- package/dist/ai/client.js +235 -0
- package/dist/ai/client.js.map +1 -0
- package/dist/ai/execute.d.ts +61 -0
- package/dist/ai/execute.d.ts.map +1 -0
- package/dist/ai/execute.js +98 -0
- package/dist/ai/execute.js.map +1 -0
- package/dist/ai/file-context.d.ts +44 -0
- package/dist/ai/file-context.d.ts.map +1 -0
- package/dist/ai/file-context.js +220 -0
- package/dist/ai/file-context.js.map +1 -0
- package/dist/ai/index.d.ts +14 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +21 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/model-spec.d.ts +33 -0
- package/dist/ai/model-spec.d.ts.map +1 -0
- package/dist/ai/model-spec.js +106 -0
- package/dist/ai/model-spec.js.map +1 -0
- package/dist/ai/providers/anthropic.provider.d.ts +23 -0
- package/dist/ai/providers/anthropic.provider.d.ts.map +1 -0
- package/dist/ai/providers/anthropic.provider.js +135 -0
- package/dist/ai/providers/anthropic.provider.js.map +1 -0
- package/dist/ai/providers/gemini.provider.d.ts +20 -0
- package/dist/ai/providers/gemini.provider.d.ts.map +1 -0
- package/dist/ai/providers/gemini.provider.js +113 -0
- package/dist/ai/providers/gemini.provider.js.map +1 -0
- package/dist/ai/providers/index.d.ts +13 -0
- package/dist/ai/providers/index.d.ts.map +1 -0
- package/dist/ai/providers/index.js +12 -0
- package/dist/ai/providers/index.js.map +1 -0
- package/dist/ai/providers/openai-compat.provider.d.ts +13 -0
- package/dist/ai/providers/openai-compat.provider.d.ts.map +1 -0
- package/dist/ai/providers/openai-compat.provider.js +68 -0
- package/dist/ai/providers/openai-compat.provider.js.map +1 -0
- package/dist/ai/providers/openai-shared.d.ts +41 -0
- package/dist/ai/providers/openai-shared.d.ts.map +1 -0
- package/dist/ai/providers/openai-shared.js +67 -0
- package/dist/ai/providers/openai-shared.js.map +1 -0
- package/dist/ai/providers/openai.provider.d.ts +22 -0
- package/dist/ai/providers/openai.provider.d.ts.map +1 -0
- package/dist/ai/providers/openai.provider.js +74 -0
- package/dist/ai/providers/openai.provider.js.map +1 -0
- package/dist/ai/providers/registry.d.ts +33 -0
- package/dist/ai/providers/registry.d.ts.map +1 -0
- package/dist/ai/providers/registry.js +137 -0
- package/dist/ai/providers/registry.js.map +1 -0
- package/dist/ai/providers/types.d.ts +59 -0
- package/dist/ai/providers/types.d.ts.map +1 -0
- package/dist/ai/providers/types.js +58 -0
- package/dist/ai/providers/types.js.map +1 -0
- package/dist/ai/workspace-editor.d.ts +59 -0
- package/dist/ai/workspace-editor.d.ts.map +1 -0
- package/dist/ai/workspace-editor.js +155 -0
- package/dist/ai/workspace-editor.js.map +1 -0
- package/dist/config/defaults.d.ts +31 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +100 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +45 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +44 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +101 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +338 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/schema.d.ts +382 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +150 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +189 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +32 -0
- package/dist/config/types.js.map +1 -0
- package/dist/constants.d.ts +92 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +100 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/agent-monitor.d.ts +173 -0
- package/dist/context/agent-monitor.d.ts.map +1 -0
- package/dist/context/agent-monitor.js +958 -0
- package/dist/context/agent-monitor.js.map +1 -0
- package/dist/context/feedback-loop.d.ts +73 -0
- package/dist/context/feedback-loop.d.ts.map +1 -0
- package/dist/context/feedback-loop.js +303 -0
- package/dist/context/feedback-loop.js.map +1 -0
- package/dist/context/index.d.ts +29 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +29 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/integration.d.ts +83 -0
- package/dist/context/integration.d.ts.map +1 -0
- package/dist/context/integration.js +276 -0
- package/dist/context/integration.js.map +1 -0
- package/dist/context/iteration-tracker.d.ts +87 -0
- package/dist/context/iteration-tracker.d.ts.map +1 -0
- package/dist/context/iteration-tracker.js +333 -0
- package/dist/context/iteration-tracker.js.map +1 -0
- package/dist/context/storage.d.ts +234 -0
- package/dist/context/storage.d.ts.map +1 -0
- package/dist/context/storage.js +513 -0
- package/dist/context/storage.js.map +1 -0
- package/dist/context/types.d.ts +396 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +125 -0
- package/dist/context/types.js.map +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +207 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/redis/connection.d.ts +111 -0
- package/dist/infrastructure/redis/connection.d.ts.map +1 -0
- package/dist/infrastructure/redis/connection.js +242 -0
- package/dist/infrastructure/redis/connection.js.map +1 -0
- package/dist/infrastructure/redis/index.d.ts +2 -0
- package/dist/infrastructure/redis/index.d.ts.map +1 -0
- package/dist/infrastructure/redis/index.js +2 -0
- package/dist/infrastructure/redis/index.js.map +1 -0
- package/dist/infrastructure/redis/redis-backed-service.d.ts +35 -0
- package/dist/infrastructure/redis/redis-backed-service.d.ts.map +1 -0
- package/dist/infrastructure/redis/redis-backed-service.js +55 -0
- package/dist/infrastructure/redis/redis-backed-service.js.map +1 -0
- package/dist/kanban/board-store.d.ts +222 -0
- package/dist/kanban/board-store.d.ts.map +1 -0
- package/dist/kanban/board-store.js +486 -0
- package/dist/kanban/board-store.js.map +1 -0
- package/dist/kanban/index.d.ts +33 -0
- package/dist/kanban/index.d.ts.map +1 -0
- package/dist/kanban/index.js +37 -0
- package/dist/kanban/index.js.map +1 -0
- package/dist/kanban/kanban-store.d.ts +236 -0
- package/dist/kanban/kanban-store.d.ts.map +1 -0
- package/dist/kanban/kanban-store.js +854 -0
- package/dist/kanban/kanban-store.js.map +1 -0
- package/dist/kanban/membership-store.d.ts +230 -0
- package/dist/kanban/membership-store.d.ts.map +1 -0
- package/dist/kanban/membership-store.js +384 -0
- package/dist/kanban/membership-store.js.map +1 -0
- package/dist/kanban/migration.d.ts +131 -0
- package/dist/kanban/migration.d.ts.map +1 -0
- package/dist/kanban/migration.js +275 -0
- package/dist/kanban/migration.js.map +1 -0
- package/dist/kanban/types.d.ts +314 -0
- package/dist/kanban/types.d.ts.map +1 -0
- package/dist/kanban/types.js +126 -0
- package/dist/kanban/types.js.map +1 -0
- package/dist/kanban/workspace-store.d.ts +193 -0
- package/dist/kanban/workspace-store.d.ts.map +1 -0
- package/dist/kanban/workspace-store.js +386 -0
- package/dist/kanban/workspace-store.js.map +1 -0
- package/dist/loci/graph-storage.d.ts +120 -0
- package/dist/loci/graph-storage.d.ts.map +1 -0
- package/dist/loci/graph-storage.js +489 -0
- package/dist/loci/graph-storage.js.map +1 -0
- package/dist/loci/graph-traversal.d.ts +56 -0
- package/dist/loci/graph-traversal.d.ts.map +1 -0
- package/dist/loci/graph-traversal.js +291 -0
- package/dist/loci/graph-traversal.js.map +1 -0
- package/dist/loci/index.d.ts +30 -0
- package/dist/loci/index.d.ts.map +1 -0
- package/dist/loci/index.js +27 -0
- package/dist/loci/index.js.map +1 -0
- package/dist/loci/loci-manager.d.ts +119 -0
- package/dist/loci/loci-manager.d.ts.map +1 -0
- package/dist/loci/loci-manager.js +435 -0
- package/dist/loci/loci-manager.js.map +1 -0
- package/dist/loci/sequence-tracker.d.ts +89 -0
- package/dist/loci/sequence-tracker.d.ts.map +1 -0
- package/dist/loci/sequence-tracker.js +311 -0
- package/dist/loci/sequence-tracker.js.map +1 -0
- package/dist/loci/types.d.ts +306 -0
- package/dist/loci/types.d.ts.map +1 -0
- package/dist/loci/types.js +143 -0
- package/dist/loci/types.js.map +1 -0
- package/dist/mpc/auth.d.ts +67 -0
- package/dist/mpc/auth.d.ts.map +1 -0
- package/dist/mpc/auth.js +173 -0
- package/dist/mpc/auth.js.map +1 -0
- package/dist/mpc/crypto.d.ts +139 -0
- package/dist/mpc/crypto.d.ts.map +1 -0
- package/dist/mpc/crypto.js +287 -0
- package/dist/mpc/crypto.js.map +1 -0
- package/dist/mpc/index.d.ts +30 -0
- package/dist/mpc/index.d.ts.map +1 -0
- package/dist/mpc/index.js +27 -0
- package/dist/mpc/index.js.map +1 -0
- package/dist/mpc/redis-store.d.ts +88 -0
- package/dist/mpc/redis-store.d.ts.map +1 -0
- package/dist/mpc/redis-store.js +337 -0
- package/dist/mpc/redis-store.js.map +1 -0
- package/dist/mpc/share-manager.d.ts +59 -0
- package/dist/mpc/share-manager.d.ts.map +1 -0
- package/dist/mpc/share-manager.js +254 -0
- package/dist/mpc/share-manager.js.map +1 -0
- package/dist/mpc/types.d.ts +213 -0
- package/dist/mpc/types.d.ts.map +1 -0
- package/dist/mpc/types.js +42 -0
- package/dist/mpc/types.js.map +1 -0
- package/dist/recursive/index.d.ts +27 -0
- package/dist/recursive/index.d.ts.map +1 -0
- package/dist/recursive/index.js +27 -0
- package/dist/recursive/index.js.map +1 -0
- package/dist/recursive/tool-invoker.d.ts +51 -0
- package/dist/recursive/tool-invoker.d.ts.map +1 -0
- package/dist/recursive/tool-invoker.js +293 -0
- package/dist/recursive/tool-invoker.js.map +1 -0
- package/dist/recursive/types.d.ts +110 -0
- package/dist/recursive/types.d.ts.map +1 -0
- package/dist/recursive/types.js +52 -0
- package/dist/recursive/types.js.map +1 -0
- package/dist/rl/dopamine.d.ts +96 -0
- package/dist/rl/dopamine.d.ts.map +1 -0
- package/dist/rl/dopamine.js +242 -0
- package/dist/rl/dopamine.js.map +1 -0
- package/dist/rl/index.d.ts +30 -0
- package/dist/rl/index.d.ts.map +1 -0
- package/dist/rl/index.js +27 -0
- package/dist/rl/index.js.map +1 -0
- package/dist/rl/potential.d.ts +78 -0
- package/dist/rl/potential.d.ts.map +1 -0
- package/dist/rl/potential.js +152 -0
- package/dist/rl/potential.js.map +1 -0
- package/dist/rl/rewards.d.ts +92 -0
- package/dist/rl/rewards.d.ts.map +1 -0
- package/dist/rl/rewards.js +278 -0
- package/dist/rl/rewards.js.map +1 -0
- package/dist/rl/state-tracker.d.ts +107 -0
- package/dist/rl/state-tracker.d.ts.map +1 -0
- package/dist/rl/state-tracker.js +285 -0
- package/dist/rl/state-tracker.js.map +1 -0
- package/dist/rl/types.d.ts +274 -0
- package/dist/rl/types.d.ts.map +1 -0
- package/dist/rl/types.js +145 -0
- package/dist/rl/types.js.map +1 -0
- package/dist/runtime/crypto.d.ts +87 -0
- package/dist/runtime/crypto.d.ts.map +1 -0
- package/dist/runtime/crypto.js +226 -0
- package/dist/runtime/crypto.js.map +1 -0
- package/dist/runtime/http.d.ts +111 -0
- package/dist/runtime/http.d.ts.map +1 -0
- package/dist/runtime/http.js +350 -0
- package/dist/runtime/http.js.map +1 -0
- package/dist/runtime/index.d.ts +48 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +43 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/net.d.ts +42 -0
- package/dist/runtime/net.d.ts.map +1 -0
- package/dist/runtime/net.js +108 -0
- package/dist/runtime/net.js.map +1 -0
- package/dist/runtime/process.d.ts +54 -0
- package/dist/runtime/process.d.ts.map +1 -0
- package/dist/runtime/process.js +247 -0
- package/dist/runtime/process.js.map +1 -0
- package/dist/runtime/types.d.ts +143 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +19 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/server/http-server.d.ts +26 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/http-server.js +290 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +25 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/progress.d.ts +74 -0
- package/dist/server/progress.d.ts.map +1 -0
- package/dist/server/progress.js +174 -0
- package/dist/server/progress.js.map +1 -0
- package/dist/server/session-server.d.ts +76 -0
- package/dist/server/session-server.d.ts.map +1 -0
- package/dist/server/session-server.js +186 -0
- package/dist/server/session-server.js.map +1 -0
- package/dist/server/types.d.ts +82 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +25 -0
- package/dist/server/types.js.map +1 -0
- package/dist/session/cwd-resolver.d.ts +136 -0
- package/dist/session/cwd-resolver.d.ts.map +1 -0
- package/dist/session/cwd-resolver.js +715 -0
- package/dist/session/cwd-resolver.js.map +1 -0
- package/dist/session/index.d.ts +27 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +27 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +296 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +605 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/types.d.ts +152 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +60 -0
- package/dist/session/types.js.map +1 -0
- package/dist/tools/agents/agent-alert.tool.d.ts +20 -0
- package/dist/tools/agents/agent-alert.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-alert.tool.js +103 -0
- package/dist/tools/agents/agent-alert.tool.js.map +1 -0
- package/dist/tools/agents/agent-history.tool.d.ts +20 -0
- package/dist/tools/agents/agent-history.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-history.tool.js +133 -0
- package/dist/tools/agents/agent-history.tool.js.map +1 -0
- package/dist/tools/agents/agent-inject.tool.d.ts +39 -0
- package/dist/tools/agents/agent-inject.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-inject.tool.js +121 -0
- package/dist/tools/agents/agent-inject.tool.js.map +1 -0
- package/dist/tools/agents/agent-list.tool.d.ts +20 -0
- package/dist/tools/agents/agent-list.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-list.tool.js +86 -0
- package/dist/tools/agents/agent-list.tool.js.map +1 -0
- package/dist/tools/agents/agent-register.tool.d.ts +20 -0
- package/dist/tools/agents/agent-register.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-register.tool.js +114 -0
- package/dist/tools/agents/agent-register.tool.js.map +1 -0
- package/dist/tools/agents/agent-summary.tool.d.ts +20 -0
- package/dist/tools/agents/agent-summary.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-summary.tool.js +99 -0
- package/dist/tools/agents/agent-summary.tool.js.map +1 -0
- package/dist/tools/agents/agent-watch.tool.d.ts +20 -0
- package/dist/tools/agents/agent-watch.tool.d.ts.map +1 -0
- package/dist/tools/agents/agent-watch.tool.js +56 -0
- package/dist/tools/agents/agent-watch.tool.js.map +1 -0
- package/dist/tools/agents/index.d.ts +41 -0
- package/dist/tools/agents/index.d.ts.map +1 -0
- package/dist/tools/agents/index.js +41 -0
- package/dist/tools/agents/index.js.map +1 -0
- package/dist/tools/agents/monitor.tool.d.ts +20 -0
- package/dist/tools/agents/monitor.tool.d.ts.map +1 -0
- package/dist/tools/agents/monitor.tool.js +314 -0
- package/dist/tools/agents/monitor.tool.js.map +1 -0
- package/dist/tools/agents/queue-message.tool.d.ts +20 -0
- package/dist/tools/agents/queue-message.tool.d.ts.map +1 -0
- package/dist/tools/agents/queue-message.tool.js +176 -0
- package/dist/tools/agents/queue-message.tool.js.map +1 -0
- package/dist/tools/ask-ai.tool.d.ts +20 -0
- package/dist/tools/ask-ai.tool.d.ts.map +1 -0
- package/dist/tools/ask-ai.tool.js +49 -0
- package/dist/tools/ask-ai.tool.js.map +1 -0
- package/dist/tools/batch.tool.d.ts +42 -0
- package/dist/tools/batch.tool.d.ts.map +1 -0
- package/dist/tools/batch.tool.js +146 -0
- package/dist/tools/batch.tool.js.map +1 -0
- package/dist/tools/brainstorm.tool.d.ts +20 -0
- package/dist/tools/brainstorm.tool.d.ts.map +1 -0
- package/dist/tools/brainstorm.tool.js +86 -0
- package/dist/tools/brainstorm.tool.js.map +1 -0
- package/dist/tools/code/code-outline.tool.d.ts +20 -0
- package/dist/tools/code/code-outline.tool.d.ts.map +1 -0
- package/dist/tools/code/code-outline.tool.js +803 -0
- package/dist/tools/code/code-outline.tool.js.map +1 -0
- package/dist/tools/code/find-definition.tool.d.ts +20 -0
- package/dist/tools/code/find-definition.tool.d.ts.map +1 -0
- package/dist/tools/code/find-definition.tool.js +218 -0
- package/dist/tools/code/find-definition.tool.js.map +1 -0
- package/dist/tools/code/find-references.tool.d.ts +20 -0
- package/dist/tools/code/find-references.tool.d.ts.map +1 -0
- package/dist/tools/code/find-references.tool.js +207 -0
- package/dist/tools/code/find-references.tool.js.map +1 -0
- package/dist/tools/code/find-symbols.tool.d.ts +20 -0
- package/dist/tools/code/find-symbols.tool.d.ts.map +1 -0
- package/dist/tools/code/find-symbols.tool.js +367 -0
- package/dist/tools/code/find-symbols.tool.js.map +1 -0
- package/dist/tools/code/index.d.ts +34 -0
- package/dist/tools/code/index.d.ts.map +1 -0
- package/dist/tools/code/index.js +35 -0
- package/dist/tools/code/index.js.map +1 -0
- package/dist/tools/code/insert-after-symbol.tool.d.ts +20 -0
- package/dist/tools/code/insert-after-symbol.tool.d.ts.map +1 -0
- package/dist/tools/code/insert-after-symbol.tool.js +224 -0
- package/dist/tools/code/insert-after-symbol.tool.js.map +1 -0
- package/dist/tools/code/insert-before-symbol.tool.d.ts +20 -0
- package/dist/tools/code/insert-before-symbol.tool.d.ts.map +1 -0
- package/dist/tools/code/insert-before-symbol.tool.js +136 -0
- package/dist/tools/code/insert-before-symbol.tool.js.map +1 -0
- package/dist/tools/code/rename-symbol.tool.d.ts +20 -0
- package/dist/tools/code/rename-symbol.tool.d.ts.map +1 -0
- package/dist/tools/code/rename-symbol.tool.js +255 -0
- package/dist/tools/code/rename-symbol.tool.js.map +1 -0
- package/dist/tools/code/semantic-search.tool.d.ts +20 -0
- package/dist/tools/code/semantic-search.tool.d.ts.map +1 -0
- package/dist/tools/code/semantic-search.tool.js +172 -0
- package/dist/tools/code/semantic-search.tool.js.map +1 -0
- package/dist/tools/code/symbol-search.d.ts +39 -0
- package/dist/tools/code/symbol-search.d.ts.map +1 -0
- package/dist/tools/code/symbol-search.js +118 -0
- package/dist/tools/code/symbol-search.js.map +1 -0
- package/dist/tools/context/feedback.tool.d.ts +20 -0
- package/dist/tools/context/feedback.tool.d.ts.map +1 -0
- package/dist/tools/context/feedback.tool.js +176 -0
- package/dist/tools/context/feedback.tool.js.map +1 -0
- package/dist/tools/context/get-shared-context.tool.d.ts +20 -0
- package/dist/tools/context/get-shared-context.tool.d.ts.map +1 -0
- package/dist/tools/context/get-shared-context.tool.js +83 -0
- package/dist/tools/context/get-shared-context.tool.js.map +1 -0
- package/dist/tools/context/index.d.ts +26 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +26 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context/shared-thoughts.tool.d.ts +20 -0
- package/dist/tools/context/shared-thoughts.tool.d.ts.map +1 -0
- package/dist/tools/context/shared-thoughts.tool.js +199 -0
- package/dist/tools/context/shared-thoughts.tool.js.map +1 -0
- package/dist/tools/edit/delete-lines.tool.d.ts +20 -0
- package/dist/tools/edit/delete-lines.tool.d.ts.map +1 -0
- package/dist/tools/edit/delete-lines.tool.js +88 -0
- package/dist/tools/edit/delete-lines.tool.js.map +1 -0
- package/dist/tools/edit/edit-shared.d.ts +55 -0
- package/dist/tools/edit/edit-shared.d.ts.map +1 -0
- package/dist/tools/edit/edit-shared.js +122 -0
- package/dist/tools/edit/edit-shared.js.map +1 -0
- package/dist/tools/edit/index.d.ts +29 -0
- package/dist/tools/edit/index.d.ts.map +1 -0
- package/dist/tools/edit/index.js +29 -0
- package/dist/tools/edit/index.js.map +1 -0
- package/dist/tools/edit/insert-at-line.tool.d.ts +20 -0
- package/dist/tools/edit/insert-at-line.tool.d.ts.map +1 -0
- package/dist/tools/edit/insert-at-line.tool.js +92 -0
- package/dist/tools/edit/insert-at-line.tool.js.map +1 -0
- package/dist/tools/edit/replace-content.tool.d.ts +20 -0
- package/dist/tools/edit/replace-content.tool.d.ts.map +1 -0
- package/dist/tools/edit/replace-content.tool.js +214 -0
- package/dist/tools/edit/replace-content.tool.js.map +1 -0
- package/dist/tools/edit/replace-lines.tool.d.ts +20 -0
- package/dist/tools/edit/replace-lines.tool.d.ts.map +1 -0
- package/dist/tools/edit/replace-lines.tool.js +97 -0
- package/dist/tools/edit/replace-lines.tool.js.map +1 -0
- package/dist/tools/file/file-diff.tool.d.ts +20 -0
- package/dist/tools/file/file-diff.tool.d.ts.map +1 -0
- package/dist/tools/file/file-diff.tool.js +359 -0
- package/dist/tools/file/file-diff.tool.js.map +1 -0
- package/dist/tools/file/file-read.tool.d.ts +20 -0
- package/dist/tools/file/file-read.tool.d.ts.map +1 -0
- package/dist/tools/file/file-read.tool.js +270 -0
- package/dist/tools/file/file-read.tool.js.map +1 -0
- package/dist/tools/file/file-search.tool.d.ts +20 -0
- package/dist/tools/file/file-search.tool.d.ts.map +1 -0
- package/dist/tools/file/file-search.tool.js +339 -0
- package/dist/tools/file/file-search.tool.js.map +1 -0
- package/dist/tools/file/file-tree.tool.d.ts +49 -0
- package/dist/tools/file/file-tree.tool.d.ts.map +1 -0
- package/dist/tools/file/file-tree.tool.js +398 -0
- package/dist/tools/file/file-tree.tool.js.map +1 -0
- package/dist/tools/file/file-write.tool.d.ts +20 -0
- package/dist/tools/file/file-write.tool.d.ts.map +1 -0
- package/dist/tools/file/file-write.tool.js +204 -0
- package/dist/tools/file/file-write.tool.js.map +1 -0
- package/dist/tools/file/index.d.ts +31 -0
- package/dist/tools/file/index.d.ts.map +1 -0
- package/dist/tools/file/index.js +31 -0
- package/dist/tools/file/index.js.map +1 -0
- package/dist/tools/git/git-blame.tool.d.ts +20 -0
- package/dist/tools/git/git-blame.tool.d.ts.map +1 -0
- package/dist/tools/git/git-blame.tool.js +138 -0
- package/dist/tools/git/git-blame.tool.js.map +1 -0
- package/dist/tools/git/git-branch.tool.d.ts +20 -0
- package/dist/tools/git/git-branch.tool.d.ts.map +1 -0
- package/dist/tools/git/git-branch.tool.js +158 -0
- package/dist/tools/git/git-branch.tool.js.map +1 -0
- package/dist/tools/git/git-diff.tool.d.ts +20 -0
- package/dist/tools/git/git-diff.tool.d.ts.map +1 -0
- package/dist/tools/git/git-diff.tool.js +117 -0
- package/dist/tools/git/git-diff.tool.js.map +1 -0
- package/dist/tools/git/git-log.tool.d.ts +20 -0
- package/dist/tools/git/git-log.tool.d.ts.map +1 -0
- package/dist/tools/git/git-log.tool.js +150 -0
- package/dist/tools/git/git-log.tool.js.map +1 -0
- package/dist/tools/git/git-status.tool.d.ts +20 -0
- package/dist/tools/git/git-status.tool.d.ts.map +1 -0
- package/dist/tools/git/git-status.tool.js +81 -0
- package/dist/tools/git/git-status.tool.js.map +1 -0
- package/dist/tools/git/index.d.ts +31 -0
- package/dist/tools/git/index.d.ts.map +1 -0
- package/dist/tools/git/index.js +32 -0
- package/dist/tools/git/index.js.map +1 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +170 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kanban/board-create.tool.d.ts +20 -0
- package/dist/tools/kanban/board-create.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-create.tool.js +92 -0
- package/dist/tools/kanban/board-create.tool.js.map +1 -0
- package/dist/tools/kanban/board-invite.tool.d.ts +20 -0
- package/dist/tools/kanban/board-invite.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-invite.tool.js +96 -0
- package/dist/tools/kanban/board-invite.tool.js.map +1 -0
- package/dist/tools/kanban/board-list.tool.d.ts +20 -0
- package/dist/tools/kanban/board-list.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-list.tool.js +94 -0
- package/dist/tools/kanban/board-list.tool.js.map +1 -0
- package/dist/tools/kanban/board-members.tool.d.ts +20 -0
- package/dist/tools/kanban/board-members.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-members.tool.js +153 -0
- package/dist/tools/kanban/board-members.tool.js.map +1 -0
- package/dist/tools/kanban/board-share.tool.d.ts +20 -0
- package/dist/tools/kanban/board-share.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-share.tool.js +91 -0
- package/dist/tools/kanban/board-share.tool.js.map +1 -0
- package/dist/tools/kanban/board-status.tool.d.ts +20 -0
- package/dist/tools/kanban/board-status.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-status.tool.js +79 -0
- package/dist/tools/kanban/board-status.tool.js.map +1 -0
- package/dist/tools/kanban/index.d.ts +42 -0
- package/dist/tools/kanban/index.d.ts.map +1 -0
- package/dist/tools/kanban/index.js +46 -0
- package/dist/tools/kanban/index.js.map +1 -0
- package/dist/tools/kanban/task-assign.tool.d.ts +20 -0
- package/dist/tools/kanban/task-assign.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-assign.tool.js +103 -0
- package/dist/tools/kanban/task-assign.tool.js.map +1 -0
- package/dist/tools/kanban/task-claim.tool.d.ts +20 -0
- package/dist/tools/kanban/task-claim.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-claim.tool.js +107 -0
- package/dist/tools/kanban/task-claim.tool.js.map +1 -0
- package/dist/tools/kanban/task-create.tool.d.ts +20 -0
- package/dist/tools/kanban/task-create.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-create.tool.js +123 -0
- package/dist/tools/kanban/task-create.tool.js.map +1 -0
- package/dist/tools/kanban/task-list.tool.d.ts +20 -0
- package/dist/tools/kanban/task-list.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-list.tool.js +95 -0
- package/dist/tools/kanban/task-list.tool.js.map +1 -0
- package/dist/tools/kanban/task-push-multi.tool.d.ts +20 -0
- package/dist/tools/kanban/task-push-multi.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-push-multi.tool.js +273 -0
- package/dist/tools/kanban/task-push-multi.tool.js.map +1 -0
- package/dist/tools/kanban/task-update.tool.d.ts +20 -0
- package/dist/tools/kanban/task-update.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-update.tool.js +173 -0
- package/dist/tools/kanban/task-update.tool.js.map +1 -0
- package/dist/tools/kanban/workspace-create.tool.d.ts +20 -0
- package/dist/tools/kanban/workspace-create.tool.d.ts.map +1 -0
- package/dist/tools/kanban/workspace-create.tool.js +84 -0
- package/dist/tools/kanban/workspace-create.tool.js.map +1 -0
- package/dist/tools/kanban/workspace-join.tool.d.ts +20 -0
- package/dist/tools/kanban/workspace-join.tool.d.ts.map +1 -0
- package/dist/tools/kanban/workspace-join.tool.js +76 -0
- package/dist/tools/kanban/workspace-join.tool.js.map +1 -0
- package/dist/tools/kanban/workspace-leave.tool.d.ts +20 -0
- package/dist/tools/kanban/workspace-leave.tool.d.ts.map +1 -0
- package/dist/tools/kanban/workspace-leave.tool.js +74 -0
- package/dist/tools/kanban/workspace-leave.tool.js.map +1 -0
- package/dist/tools/kanban/workspace-list.tool.d.ts +20 -0
- package/dist/tools/kanban/workspace-list.tool.d.ts.map +1 -0
- package/dist/tools/kanban/workspace-list.tool.js +75 -0
- package/dist/tools/kanban/workspace-list.tool.js.map +1 -0
- package/dist/tools/loci/graph-find-path.tool.d.ts +38 -0
- package/dist/tools/loci/graph-find-path.tool.d.ts.map +1 -0
- package/dist/tools/loci/graph-find-path.tool.js +133 -0
- package/dist/tools/loci/graph-find-path.tool.js.map +1 -0
- package/dist/tools/loci/graph-query.tool.d.ts +55 -0
- package/dist/tools/loci/graph-query.tool.d.ts.map +1 -0
- package/dist/tools/loci/graph-query.tool.js +98 -0
- package/dist/tools/loci/graph-query.tool.js.map +1 -0
- package/dist/tools/loci/index.d.ts +27 -0
- package/dist/tools/loci/index.d.ts.map +1 -0
- package/dist/tools/loci/index.js +27 -0
- package/dist/tools/loci/index.js.map +1 -0
- package/dist/tools/loci/loci-recall.tool.d.ts +33 -0
- package/dist/tools/loci/loci-recall.tool.d.ts.map +1 -0
- package/dist/tools/loci/loci-recall.tool.js +156 -0
- package/dist/tools/loci/loci-recall.tool.js.map +1 -0
- package/dist/tools/loci/sequence-recommend.tool.d.ts +33 -0
- package/dist/tools/loci/sequence-recommend.tool.d.ts.map +1 -0
- package/dist/tools/loci/sequence-recommend.tool.js +114 -0
- package/dist/tools/loci/sequence-recommend.tool.js.map +1 -0
- package/dist/tools/memory/delete-memory.tool.d.ts +20 -0
- package/dist/tools/memory/delete-memory.tool.d.ts.map +1 -0
- package/dist/tools/memory/delete-memory.tool.js +96 -0
- package/dist/tools/memory/delete-memory.tool.js.map +1 -0
- package/dist/tools/memory/edit-memory.tool.d.ts +20 -0
- package/dist/tools/memory/edit-memory.tool.d.ts.map +1 -0
- package/dist/tools/memory/edit-memory.tool.js +172 -0
- package/dist/tools/memory/edit-memory.tool.js.map +1 -0
- package/dist/tools/memory/index.d.ts +31 -0
- package/dist/tools/memory/index.d.ts.map +1 -0
- package/dist/tools/memory/index.js +31 -0
- package/dist/tools/memory/index.js.map +1 -0
- package/dist/tools/memory/list-memories.tool.d.ts +20 -0
- package/dist/tools/memory/list-memories.tool.d.ts.map +1 -0
- package/dist/tools/memory/list-memories.tool.js +142 -0
- package/dist/tools/memory/list-memories.tool.js.map +1 -0
- package/dist/tools/memory/read-memory.tool.d.ts +20 -0
- package/dist/tools/memory/read-memory.tool.d.ts.map +1 -0
- package/dist/tools/memory/read-memory.tool.js +98 -0
- package/dist/tools/memory/read-memory.tool.js.map +1 -0
- package/dist/tools/memory/write-memory.tool.d.ts +20 -0
- package/dist/tools/memory/write-memory.tool.d.ts.map +1 -0
- package/dist/tools/memory/write-memory.tool.js +162 -0
- package/dist/tools/memory/write-memory.tool.js.map +1 -0
- package/dist/tools/mpc/index.d.ts +27 -0
- package/dist/tools/mpc/index.d.ts.map +1 -0
- package/dist/tools/mpc/index.js +27 -0
- package/dist/tools/mpc/index.js.map +1 -0
- package/dist/tools/mpc/mpc-distribute.tool.d.ts +36 -0
- package/dist/tools/mpc/mpc-distribute.tool.d.ts.map +1 -0
- package/dist/tools/mpc/mpc-distribute.tool.js +129 -0
- package/dist/tools/mpc/mpc-distribute.tool.js.map +1 -0
- package/dist/tools/mpc/mpc-reconstruct.tool.d.ts +28 -0
- package/dist/tools/mpc/mpc-reconstruct.tool.d.ts.map +1 -0
- package/dist/tools/mpc/mpc-reconstruct.tool.js +125 -0
- package/dist/tools/mpc/mpc-reconstruct.tool.js.map +1 -0
- package/dist/tools/mpc/mpc-split.tool.d.ts +43 -0
- package/dist/tools/mpc/mpc-split.tool.d.ts.map +1 -0
- package/dist/tools/mpc/mpc-split.tool.js +120 -0
- package/dist/tools/mpc/mpc-split.tool.js.map +1 -0
- package/dist/tools/mpc/mpc-status.tool.d.ts +33 -0
- package/dist/tools/mpc/mpc-status.tool.d.ts.map +1 -0
- package/dist/tools/mpc/mpc-status.tool.js +129 -0
- package/dist/tools/mpc/mpc-status.tool.js.map +1 -0
- package/dist/tools/multi-llm/consensus-prompt.tool.d.ts +9 -0
- package/dist/tools/multi-llm/consensus-prompt.tool.d.ts.map +1 -0
- package/dist/tools/multi-llm/consensus-prompt.tool.js +165 -0
- package/dist/tools/multi-llm/consensus-prompt.tool.js.map +1 -0
- package/dist/tools/multi-llm/index.d.ts +8 -0
- package/dist/tools/multi-llm/index.d.ts.map +1 -0
- package/dist/tools/multi-llm/index.js +8 -0
- package/dist/tools/multi-llm/index.js.map +1 -0
- package/dist/tools/multi-llm/multi-prompt.tool.d.ts +9 -0
- package/dist/tools/multi-llm/multi-prompt.tool.d.ts.map +1 -0
- package/dist/tools/multi-llm/multi-prompt.tool.js +90 -0
- package/dist/tools/multi-llm/multi-prompt.tool.js.map +1 -0
- package/dist/tools/project/check-types.tool.d.ts +20 -0
- package/dist/tools/project/check-types.tool.d.ts.map +1 -0
- package/dist/tools/project/check-types.tool.js +254 -0
- package/dist/tools/project/check-types.tool.js.map +1 -0
- package/dist/tools/project/index.d.ts +35 -0
- package/dist/tools/project/index.d.ts.map +1 -0
- package/dist/tools/project/index.js +35 -0
- package/dist/tools/project/index.js.map +1 -0
- package/dist/tools/project/project-info.tool.d.ts +20 -0
- package/dist/tools/project/project-info.tool.d.ts.map +1 -0
- package/dist/tools/project/project-info.tool.js +364 -0
- package/dist/tools/project/project-info.tool.js.map +1 -0
- package/dist/tools/project/run-lint.tool.d.ts +20 -0
- package/dist/tools/project/run-lint.tool.d.ts.map +1 -0
- package/dist/tools/project/run-lint.tool.js +279 -0
- package/dist/tools/project/run-lint.tool.js.map +1 -0
- package/dist/tools/project/run-script.tool.d.ts +20 -0
- package/dist/tools/project/run-script.tool.d.ts.map +1 -0
- package/dist/tools/project/run-script.tool.js +141 -0
- package/dist/tools/project/run-script.tool.js.map +1 -0
- package/dist/tools/project/run-tests.tool.d.ts +20 -0
- package/dist/tools/project/run-tests.tool.d.ts.map +1 -0
- package/dist/tools/project/run-tests.tool.js +357 -0
- package/dist/tools/project/run-tests.tool.js.map +1 -0
- package/dist/tools/recursive/index.d.ts +28 -0
- package/dist/tools/recursive/index.d.ts.map +1 -0
- package/dist/tools/recursive/index.js +28 -0
- package/dist/tools/recursive/index.js.map +1 -0
- package/dist/tools/recursive/invocation-log.tool.d.ts +20 -0
- package/dist/tools/recursive/invocation-log.tool.d.ts.map +1 -0
- package/dist/tools/recursive/invocation-log.tool.js +110 -0
- package/dist/tools/recursive/invocation-log.tool.js.map +1 -0
- package/dist/tools/recursive/invoke-batch.tool.d.ts +20 -0
- package/dist/tools/recursive/invoke-batch.tool.d.ts.map +1 -0
- package/dist/tools/recursive/invoke-batch.tool.js +99 -0
- package/dist/tools/recursive/invoke-batch.tool.js.map +1 -0
- package/dist/tools/recursive/invoke-tool.tool.d.ts +20 -0
- package/dist/tools/recursive/invoke-tool.tool.d.ts.map +1 -0
- package/dist/tools/recursive/invoke-tool.tool.js +100 -0
- package/dist/tools/recursive/invoke-tool.tool.js.map +1 -0
- package/dist/tools/registry.d.ts +261 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +462 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/rl/index.d.ts +25 -0
- package/dist/tools/rl/index.d.ts.map +1 -0
- package/dist/tools/rl/index.js +25 -0
- package/dist/tools/rl/index.js.map +1 -0
- package/dist/tools/rl/rl-dopamine-log.tool.d.ts +32 -0
- package/dist/tools/rl/rl-dopamine-log.tool.d.ts.map +1 -0
- package/dist/tools/rl/rl-dopamine-log.tool.js +112 -0
- package/dist/tools/rl/rl-dopamine-log.tool.js.map +1 -0
- package/dist/tools/rl/rl-reward-stats.tool.d.ts +33 -0
- package/dist/tools/rl/rl-reward-stats.tool.d.ts.map +1 -0
- package/dist/tools/rl/rl-reward-stats.tool.js +100 -0
- package/dist/tools/rl/rl-reward-stats.tool.js.map +1 -0
- package/dist/tools/session/index.d.ts +28 -0
- package/dist/tools/session/index.d.ts.map +1 -0
- package/dist/tools/session/index.js +28 -0
- package/dist/tools/session/index.js.map +1 -0
- package/dist/tools/session/session-create.tool.d.ts +35 -0
- package/dist/tools/session/session-create.tool.d.ts.map +1 -0
- package/dist/tools/session/session-create.tool.js +74 -0
- package/dist/tools/session/session-create.tool.js.map +1 -0
- package/dist/tools/session/session-delete.tool.d.ts +32 -0
- package/dist/tools/session/session-delete.tool.d.ts.map +1 -0
- package/dist/tools/session/session-delete.tool.js +94 -0
- package/dist/tools/session/session-delete.tool.js.map +1 -0
- package/dist/tools/session/session-info.tool.d.ts +30 -0
- package/dist/tools/session/session-info.tool.d.ts.map +1 -0
- package/dist/tools/session/session-info.tool.js +89 -0
- package/dist/tools/session/session-info.tool.js.map +1 -0
- package/dist/tools/session/session-list.tool.d.ts +43 -0
- package/dist/tools/session/session-list.tool.d.ts.map +1 -0
- package/dist/tools/session/session-list.tool.js +85 -0
- package/dist/tools/session/session-list.tool.js.map +1 -0
- package/dist/tools/session/session-switch.tool.d.ts +32 -0
- package/dist/tools/session/session-switch.tool.d.ts.map +1 -0
- package/dist/tools/session/session-switch.tool.js +75 -0
- package/dist/tools/session/session-switch.tool.js.map +1 -0
- package/dist/tools/simple-tools.d.ts +23 -0
- package/dist/tools/simple-tools.d.ts.map +1 -0
- package/dist/tools/simple-tools.js +73 -0
- package/dist/tools/simple-tools.js.map +1 -0
- package/dist/tools/specialized/analyze-deps.tool.d.ts +20 -0
- package/dist/tools/specialized/analyze-deps.tool.d.ts.map +1 -0
- package/dist/tools/specialized/analyze-deps.tool.js +102 -0
- package/dist/tools/specialized/analyze-deps.tool.js.map +1 -0
- package/dist/tools/specialized/auto-fix-agent.tool.d.ts +12 -0
- package/dist/tools/specialized/auto-fix-agent.tool.d.ts.map +1 -0
- package/dist/tools/specialized/auto-fix-agent.tool.js +154 -0
- package/dist/tools/specialized/auto-fix-agent.tool.js.map +1 -0
- package/dist/tools/specialized/auto-fix.tool.d.ts +20 -0
- package/dist/tools/specialized/auto-fix.tool.d.ts.map +1 -0
- package/dist/tools/specialized/auto-fix.tool.js +264 -0
- package/dist/tools/specialized/auto-fix.tool.js.map +1 -0
- package/dist/tools/specialized/code-review.tool.d.ts +20 -0
- package/dist/tools/specialized/code-review.tool.d.ts.map +1 -0
- package/dist/tools/specialized/code-review.tool.js +140 -0
- package/dist/tools/specialized/code-review.tool.js.map +1 -0
- package/dist/tools/specialized/explain-code.tool.d.ts +20 -0
- package/dist/tools/specialized/explain-code.tool.d.ts.map +1 -0
- package/dist/tools/specialized/explain-code.tool.js +90 -0
- package/dist/tools/specialized/explain-code.tool.js.map +1 -0
- package/dist/tools/specialized/fix-bug.tool.d.ts +20 -0
- package/dist/tools/specialized/fix-bug.tool.d.ts.map +1 -0
- package/dist/tools/specialized/fix-bug.tool.js +107 -0
- package/dist/tools/specialized/fix-bug.tool.js.map +1 -0
- package/dist/tools/specialized/index.d.ts +26 -0
- package/dist/tools/specialized/index.d.ts.map +1 -0
- package/dist/tools/specialized/index.js +26 -0
- package/dist/tools/specialized/index.js.map +1 -0
- package/dist/tools/specialized/refactor.tool.d.ts +20 -0
- package/dist/tools/specialized/refactor.tool.d.ts.map +1 -0
- package/dist/tools/specialized/refactor.tool.js +115 -0
- package/dist/tools/specialized/refactor.tool.js.map +1 -0
- package/dist/tools/specialized/write-tests.tool.d.ts +20 -0
- package/dist/tools/specialized/write-tests.tool.d.ts.map +1 -0
- package/dist/tools/specialized/write-tests.tool.js +115 -0
- package/dist/tools/specialized/write-tests.tool.js.map +1 -0
- package/dist/tools/system/ai-config.tool.d.ts +13 -0
- package/dist/tools/system/ai-config.tool.d.ts.map +1 -0
- package/dist/tools/system/ai-config.tool.js +252 -0
- package/dist/tools/system/ai-config.tool.js.map +1 -0
- package/dist/tools/system/ai-models.tool.d.ts +45 -0
- package/dist/tools/system/ai-models.tool.d.ts.map +1 -0
- package/dist/tools/system/ai-models.tool.js +194 -0
- package/dist/tools/system/ai-models.tool.js.map +1 -0
- package/dist/tools/system/config.tool.d.ts +57 -0
- package/dist/tools/system/config.tool.d.ts.map +1 -0
- package/dist/tools/system/config.tool.js +320 -0
- package/dist/tools/system/config.tool.js.map +1 -0
- package/dist/tools/system/env-info.tool.d.ts +20 -0
- package/dist/tools/system/env-info.tool.d.ts.map +1 -0
- package/dist/tools/system/env-info.tool.js +228 -0
- package/dist/tools/system/env-info.tool.js.map +1 -0
- package/dist/tools/system/index.d.ts +37 -0
- package/dist/tools/system/index.d.ts.map +1 -0
- package/dist/tools/system/index.js +37 -0
- package/dist/tools/system/index.js.map +1 -0
- package/dist/tools/system/memory-usage.tool.d.ts +20 -0
- package/dist/tools/system/memory-usage.tool.d.ts.map +1 -0
- package/dist/tools/system/memory-usage.tool.js +223 -0
- package/dist/tools/system/memory-usage.tool.js.map +1 -0
- package/dist/tools/system/process-list.tool.d.ts +20 -0
- package/dist/tools/system/process-list.tool.d.ts.map +1 -0
- package/dist/tools/system/process-list.tool.js +202 -0
- package/dist/tools/system/process-list.tool.js.map +1 -0
- package/dist/tools/system/shell-exec.tool.d.ts +20 -0
- package/dist/tools/system/shell-exec.tool.d.ts.map +1 -0
- package/dist/tools/system/shell-exec.tool.js +293 -0
- package/dist/tools/system/shell-exec.tool.js.map +1 -0
- package/dist/tools/timeout-test.tool.d.ts +20 -0
- package/dist/tools/timeout-test.tool.d.ts.map +1 -0
- package/dist/tools/timeout-test.tool.js +46 -0
- package/dist/tools/timeout-test.tool.js.map +1 -0
- package/dist/tree-sitter/index.d.ts +27 -0
- package/dist/tree-sitter/index.d.ts.map +1 -0
- package/dist/tree-sitter/index.js +27 -0
- package/dist/tree-sitter/index.js.map +1 -0
- package/dist/tree-sitter/parser-manager.d.ts +83 -0
- package/dist/tree-sitter/parser-manager.d.ts.map +1 -0
- package/dist/tree-sitter/parser-manager.js +430 -0
- package/dist/tree-sitter/parser-manager.js.map +1 -0
- package/dist/tree-sitter/types.d.ts +117 -0
- package/dist/tree-sitter/types.d.ts.map +1 -0
- package/dist/tree-sitter/types.js +375 -0
- package/dist/tree-sitter/types.js.map +1 -0
- package/dist/types/file-types.d.ts +277 -0
- package/dist/types/file-types.d.ts.map +1 -0
- package/dist/types/file-types.js +75 -0
- package/dist/types/file-types.js.map +1 -0
- package/dist/types/git-types.d.ts +270 -0
- package/dist/types/git-types.d.ts.map +1 -0
- package/dist/types/git-types.js +26 -0
- package/dist/types/git-types.js.map +1 -0
- package/dist/types/index.d.ts +28 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +31 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/tool-types.d.ts +231 -0
- package/dist/types/tool-types.d.ts.map +1 -0
- package/dist/types/tool-types.js +30 -0
- package/dist/types/tool-types.js.map +1 -0
- package/dist/utils/bun-file.d.ts +99 -0
- package/dist/utils/bun-file.d.ts.map +1 -0
- package/dist/utils/bun-file.js +393 -0
- package/dist/utils/bun-file.js.map +1 -0
- package/dist/utils/cache.d.ts +124 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +228 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/commandExecutor.d.ts +54 -0
- package/dist/utils/commandExecutor.d.ts.map +1 -0
- package/dist/utils/commandExecutor.js +165 -0
- package/dist/utils/commandExecutor.js.map +1 -0
- package/dist/utils/edit-utils.d.ts +72 -0
- package/dist/utils/edit-utils.d.ts.map +1 -0
- package/dist/utils/edit-utils.js +129 -0
- package/dist/utils/edit-utils.js.map +1 -0
- package/dist/utils/errors.d.ts +170 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +304 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-utils.d.ts +195 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +401 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/git-utils.d.ts +204 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +352 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/languageDetection.d.ts +54 -0
- package/dist/utils/languageDetection.d.ts.map +1 -0
- package/dist/utils/languageDetection.js +340 -0
- package/dist/utils/languageDetection.js.map +1 -0
- package/dist/utils/logger.d.ts +207 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +484 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/process-utils.d.ts +196 -0
- package/dist/utils/process-utils.d.ts.map +1 -0
- package/dist/utils/process-utils.js +302 -0
- package/dist/utils/process-utils.js.map +1 -0
- package/dist/utils/projectContext.enhanced.d.ts +71 -0
- package/dist/utils/projectContext.enhanced.d.ts.map +1 -0
- package/dist/utils/projectContext.enhanced.js +816 -0
- package/dist/utils/projectContext.enhanced.js.map +1 -0
- package/dist/utils/security.d.ts +123 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +337 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/validation.d.ts +163 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +558 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/version.d.ts +17 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +17 -0
- package/dist/version.js.map +1 -0
- package/kemdi-code-mcp-logo.png +0 -0
- package/package.json +136 -0
|
@@ -0,0 +1,958 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KemdiCode MCP Server
|
|
3
|
+
* Copyright (C) 2025-2026 Kemdi Sp. z o.o.
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU General Public License as published by
|
|
7
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU General Public License
|
|
16
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Agent Monitor - Real-time multi-agent supervision via Redis Pub/Sub
|
|
20
|
+
*
|
|
21
|
+
* Enables:
|
|
22
|
+
* - Real-time monitoring of agent conversations
|
|
23
|
+
* - Sending alerts/directives to agents
|
|
24
|
+
* - Context injection during execution
|
|
25
|
+
* - Agent lifecycle management
|
|
26
|
+
*/
|
|
27
|
+
import { Redis } from 'ioredis';
|
|
28
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
29
|
+
import { Logger } from '../utils/logger.js';
|
|
30
|
+
import { REDIS_KEYS, TTL, } from './types.js';
|
|
31
|
+
export class AgentMonitor {
|
|
32
|
+
config;
|
|
33
|
+
redis = null;
|
|
34
|
+
subscriber = null;
|
|
35
|
+
connected = false;
|
|
36
|
+
messageHandlers = [];
|
|
37
|
+
alertHandlers = [];
|
|
38
|
+
statusHandlers = [];
|
|
39
|
+
messageHandlerRegistered = false;
|
|
40
|
+
alertHandlerRegistered = false;
|
|
41
|
+
statusHandlerRegistered = false;
|
|
42
|
+
constructor(config = {}) {
|
|
43
|
+
this.config = config;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Initialize Redis connections (main + subscriber)
|
|
47
|
+
*/
|
|
48
|
+
async connect() {
|
|
49
|
+
if (this.connected)
|
|
50
|
+
return true;
|
|
51
|
+
try {
|
|
52
|
+
const redisConfig = {
|
|
53
|
+
host: this.config.host || process.env.REDIS_HOST || '127.0.0.1',
|
|
54
|
+
port: this.config.port || parseInt(process.env.REDIS_PORT || '6379'),
|
|
55
|
+
password: this.config.password || process.env.REDIS_PASSWORD || undefined,
|
|
56
|
+
db: this.config.db ?? 2,
|
|
57
|
+
keyPrefix: REDIS_KEYS.PREFIX,
|
|
58
|
+
lazyConnect: false,
|
|
59
|
+
maxRetriesPerRequest: 3,
|
|
60
|
+
};
|
|
61
|
+
// Main connection for commands
|
|
62
|
+
this.redis = new Redis(redisConfig);
|
|
63
|
+
await this.redis.ping();
|
|
64
|
+
// Separate connection for Pub/Sub (required by Redis)
|
|
65
|
+
this.subscriber = new Redis({
|
|
66
|
+
...redisConfig,
|
|
67
|
+
keyPrefix: '', // No prefix for pub/sub channels
|
|
68
|
+
});
|
|
69
|
+
await this.subscriber.ping();
|
|
70
|
+
this.connected = true;
|
|
71
|
+
Logger.debug('AgentMonitor connected to Redis');
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
Logger.error('AgentMonitor connection failed:', error);
|
|
76
|
+
this.redis = null;
|
|
77
|
+
this.subscriber = null;
|
|
78
|
+
this.connected = false;
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
isConnected() {
|
|
83
|
+
return this.connected && this.redis !== null;
|
|
84
|
+
}
|
|
85
|
+
async disconnect() {
|
|
86
|
+
if (this.subscriber) {
|
|
87
|
+
await this.subscriber.quit();
|
|
88
|
+
this.subscriber = null;
|
|
89
|
+
}
|
|
90
|
+
if (this.redis) {
|
|
91
|
+
await this.redis.quit();
|
|
92
|
+
this.redis = null;
|
|
93
|
+
}
|
|
94
|
+
this.connected = false;
|
|
95
|
+
this.messageHandlerRegistered = false;
|
|
96
|
+
this.alertHandlerRegistered = false;
|
|
97
|
+
this.statusHandlerRegistered = false;
|
|
98
|
+
}
|
|
99
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
100
|
+
// AGENT REGISTRATION & LIFECYCLE
|
|
101
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
102
|
+
/**
|
|
103
|
+
* Register a new agent in the system
|
|
104
|
+
*/
|
|
105
|
+
async registerAgent(name, role, sessionId, serverId, model, metadata = {}) {
|
|
106
|
+
if (!this.redis)
|
|
107
|
+
return null;
|
|
108
|
+
const agent = {
|
|
109
|
+
id: `agent_${uuidv4().slice(0, 8)}`,
|
|
110
|
+
name,
|
|
111
|
+
role,
|
|
112
|
+
status: 'active',
|
|
113
|
+
sessionId,
|
|
114
|
+
serverId,
|
|
115
|
+
model,
|
|
116
|
+
registeredAt: Date.now(),
|
|
117
|
+
lastHeartbeat: Date.now(),
|
|
118
|
+
metadata,
|
|
119
|
+
};
|
|
120
|
+
try {
|
|
121
|
+
const key = `${REDIS_KEYS.AGENTS}${agent.id}`;
|
|
122
|
+
await this.redis.setex(key, TTL.SESSION, JSON.stringify(agent));
|
|
123
|
+
// Add to session's agent list
|
|
124
|
+
await this.redis.sadd(`${REDIS_KEYS.AGENTS}session:${sessionId}`, agent.id);
|
|
125
|
+
// Publish status update
|
|
126
|
+
await this.publishStatusUpdate(agent);
|
|
127
|
+
Logger.debug(`Agent registered: ${agent.id} (${name})`);
|
|
128
|
+
return agent;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
Logger.error('Failed to register agent:', error);
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Update agent status
|
|
137
|
+
*/
|
|
138
|
+
async updateAgentStatus(agentId, status, currentTask) {
|
|
139
|
+
if (!this.redis)
|
|
140
|
+
return false;
|
|
141
|
+
try {
|
|
142
|
+
const agent = await this.getAgent(agentId);
|
|
143
|
+
if (!agent)
|
|
144
|
+
return false;
|
|
145
|
+
agent.status = status;
|
|
146
|
+
agent.currentTask = currentTask;
|
|
147
|
+
agent.lastHeartbeat = Date.now();
|
|
148
|
+
const key = `${REDIS_KEYS.AGENTS}${agentId}`;
|
|
149
|
+
await this.redis.setex(key, TTL.SESSION, JSON.stringify(agent));
|
|
150
|
+
await this.publishStatusUpdate(agent);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
Logger.error('Failed to update agent status:', error);
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get agent by ID
|
|
160
|
+
*/
|
|
161
|
+
async getAgent(agentId) {
|
|
162
|
+
if (!this.redis)
|
|
163
|
+
return null;
|
|
164
|
+
try {
|
|
165
|
+
const data = await this.redis.get(`${REDIS_KEYS.AGENTS}${agentId}`);
|
|
166
|
+
return data ? JSON.parse(data) : null;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* List all active agents (optionally filtered by session)
|
|
174
|
+
*/
|
|
175
|
+
async listAgents(sessionId) {
|
|
176
|
+
if (!this.redis)
|
|
177
|
+
return [];
|
|
178
|
+
try {
|
|
179
|
+
let agentIds;
|
|
180
|
+
if (sessionId) {
|
|
181
|
+
agentIds = await this.redis.smembers(`${REDIS_KEYS.AGENTS}session:${sessionId}`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
// Scan for all agent keys
|
|
185
|
+
const keys = await this.redis.keys(`${REDIS_KEYS.AGENTS}agent_*`);
|
|
186
|
+
agentIds = keys.map((k) => k.replace(REDIS_KEYS.PREFIX + REDIS_KEYS.AGENTS, ''));
|
|
187
|
+
}
|
|
188
|
+
const agents = [];
|
|
189
|
+
for (const id of agentIds) {
|
|
190
|
+
const agent = await this.getAgent(id);
|
|
191
|
+
if (agent && agent.status !== 'terminated') {
|
|
192
|
+
agents.push(agent);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return agents.sort((a, b) => b.lastHeartbeat - a.lastHeartbeat);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
Logger.error('Failed to list agents:', error);
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Send heartbeat for an agent
|
|
204
|
+
*/
|
|
205
|
+
async heartbeat(agentId) {
|
|
206
|
+
if (!this.redis)
|
|
207
|
+
return false;
|
|
208
|
+
try {
|
|
209
|
+
const agent = await this.getAgent(agentId);
|
|
210
|
+
if (!agent)
|
|
211
|
+
return false;
|
|
212
|
+
agent.lastHeartbeat = Date.now();
|
|
213
|
+
const key = `${REDIS_KEYS.AGENTS}${agentId}`;
|
|
214
|
+
await this.redis.setex(key, TTL.SESSION, JSON.stringify(agent));
|
|
215
|
+
// Update heartbeat timestamp
|
|
216
|
+
await this.redis.setex(`${REDIS_KEYS.AGENT_HEARTBEAT}${agentId}`, 60, // 1 minute TTL
|
|
217
|
+
Date.now().toString());
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
225
|
+
// MESSAGE HANDLING
|
|
226
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
227
|
+
/**
|
|
228
|
+
* Send a message between agents or from supervisor
|
|
229
|
+
*/
|
|
230
|
+
async sendMessage(fromAgentId, toAgentId, sessionId, content, type = 'chat', priority = 'normal', data, replyTo) {
|
|
231
|
+
if (!this.redis)
|
|
232
|
+
return null;
|
|
233
|
+
const message = {
|
|
234
|
+
id: `msg_${uuidv4().slice(0, 12)}`,
|
|
235
|
+
fromAgentId,
|
|
236
|
+
toAgentId,
|
|
237
|
+
sessionId,
|
|
238
|
+
type,
|
|
239
|
+
priority,
|
|
240
|
+
content,
|
|
241
|
+
data,
|
|
242
|
+
timestamp: Date.now(),
|
|
243
|
+
acknowledged: false,
|
|
244
|
+
replyTo,
|
|
245
|
+
};
|
|
246
|
+
try {
|
|
247
|
+
// Store message in history
|
|
248
|
+
const key = `${REDIS_KEYS.AGENT_MESSAGES}${sessionId}`;
|
|
249
|
+
await this.redis.zadd(key, message.timestamp, JSON.stringify(message));
|
|
250
|
+
await this.redis.expire(key, TTL.SESSION);
|
|
251
|
+
// Publish to channel for real-time subscribers
|
|
252
|
+
await this.redis.publish(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_MESSAGES, JSON.stringify(message));
|
|
253
|
+
Logger.debug(`Message sent: ${message.id} (${type})`);
|
|
254
|
+
return message;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
Logger.error('Failed to send message:', error);
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Send an alert from supervisor (e.g., "[ALERT: Słowo od Claude Opus 4.5]")
|
|
263
|
+
*/
|
|
264
|
+
async sendAlert(targetAgentIds, content, source = 'Claude Opus 4.5', priority = 'high', interrupt = false, sessionId) {
|
|
265
|
+
if (!this.redis)
|
|
266
|
+
return null;
|
|
267
|
+
const alert = {
|
|
268
|
+
id: `alert_${uuidv4().slice(0, 8)}`,
|
|
269
|
+
targetAgentIds: targetAgentIds === '*' ? ['*'] : targetAgentIds,
|
|
270
|
+
content,
|
|
271
|
+
source,
|
|
272
|
+
priority,
|
|
273
|
+
timestamp: Date.now(),
|
|
274
|
+
interrupt,
|
|
275
|
+
};
|
|
276
|
+
try {
|
|
277
|
+
// Store alert
|
|
278
|
+
const key = sessionId
|
|
279
|
+
? `${REDIS_KEYS.AGENT_ALERTS}${sessionId}`
|
|
280
|
+
: `${REDIS_KEYS.AGENT_ALERTS}global`;
|
|
281
|
+
await this.redis.zadd(key, alert.timestamp, JSON.stringify(alert));
|
|
282
|
+
await this.redis.expire(key, TTL.SESSION);
|
|
283
|
+
// Publish to alerts channel
|
|
284
|
+
await this.redis.publish(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_ALERTS, JSON.stringify(alert));
|
|
285
|
+
// Also send as message to each target agent
|
|
286
|
+
const targets = targetAgentIds === '*'
|
|
287
|
+
? (await this.listAgents(sessionId)).map((a) => a.id)
|
|
288
|
+
: targetAgentIds;
|
|
289
|
+
for (const agentId of targets) {
|
|
290
|
+
await this.sendMessage('supervisor', agentId, sessionId || 'global', `[ALERT: ${source}] ${content}`, 'alert', priority);
|
|
291
|
+
}
|
|
292
|
+
Logger.debug(`Alert sent: ${alert.id} to ${targets.length} agents`);
|
|
293
|
+
return alert;
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
Logger.error('Failed to send alert:', error);
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Inject context into an agent's stream
|
|
302
|
+
*/
|
|
303
|
+
async injectContext(agentId, sessionId, context, data) {
|
|
304
|
+
const message = await this.sendMessage('supervisor', agentId, sessionId, context, 'context', 'high', data);
|
|
305
|
+
return message !== null;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Send directive to change agent behavior
|
|
309
|
+
*/
|
|
310
|
+
async sendDirective(agentId, sessionId, directive, data) {
|
|
311
|
+
const message = await this.sendMessage('supervisor', agentId, sessionId, `[DIRECTIVE] ${directive}`, 'directive', 'critical', data);
|
|
312
|
+
return message !== null;
|
|
313
|
+
}
|
|
314
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
315
|
+
// MESSAGE HISTORY & QUERIES
|
|
316
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
317
|
+
/**
|
|
318
|
+
* Get message history for a session
|
|
319
|
+
*/
|
|
320
|
+
async getMessageHistory(sessionId, limit = 50, since) {
|
|
321
|
+
if (!this.redis)
|
|
322
|
+
return [];
|
|
323
|
+
try {
|
|
324
|
+
const key = `${REDIS_KEYS.AGENT_MESSAGES}${sessionId}`;
|
|
325
|
+
const minScore = since || 0;
|
|
326
|
+
const rawMessages = await this.redis.zrangebyscore(key, minScore, '+inf', 'LIMIT', 0, limit);
|
|
327
|
+
return rawMessages
|
|
328
|
+
.map((m) => {
|
|
329
|
+
try {
|
|
330
|
+
return JSON.parse(m);
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
})
|
|
336
|
+
.filter(Boolean);
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
Logger.error('Failed to get message history:', error);
|
|
340
|
+
return [];
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get recent messages for an agent
|
|
345
|
+
*/
|
|
346
|
+
async getAgentMessages(agentId, sessionId, limit = 20) {
|
|
347
|
+
const history = await this.getMessageHistory(sessionId, limit * 2);
|
|
348
|
+
return history
|
|
349
|
+
.filter((m) => m.toAgentId === agentId || m.fromAgentId === agentId)
|
|
350
|
+
.slice(0, limit);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get pending alerts for an agent
|
|
354
|
+
*/
|
|
355
|
+
async getPendingAlerts(agentId, sessionId) {
|
|
356
|
+
if (!this.redis)
|
|
357
|
+
return [];
|
|
358
|
+
try {
|
|
359
|
+
const keys = sessionId
|
|
360
|
+
? [`${REDIS_KEYS.AGENT_ALERTS}${sessionId}`]
|
|
361
|
+
: [`${REDIS_KEYS.AGENT_ALERTS}global`];
|
|
362
|
+
const alerts = [];
|
|
363
|
+
for (const key of keys) {
|
|
364
|
+
const rawAlerts = await this.redis.zrange(key, 0, -1);
|
|
365
|
+
for (const raw of rawAlerts) {
|
|
366
|
+
try {
|
|
367
|
+
const alert = JSON.parse(raw);
|
|
368
|
+
if (alert.targetAgentIds.includes('*') || alert.targetAgentIds.includes(agentId)) {
|
|
369
|
+
alerts.push(alert);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
Logger.warn(`Failed to parse alert: ${raw.substring(0, 100)}`);
|
|
374
|
+
// Kontynuuj z następnym alertem
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return alerts.sort((a, b) => b.timestamp - a.timestamp);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return [];
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Get full conversation snapshot
|
|
386
|
+
*/
|
|
387
|
+
async getConversationSnapshot(sessionId, messageLimit = 30) {
|
|
388
|
+
const [agents, messages] = await Promise.all([
|
|
389
|
+
this.listAgents(sessionId),
|
|
390
|
+
this.getMessageHistory(sessionId, messageLimit),
|
|
391
|
+
]);
|
|
392
|
+
// Get pending alerts for all agents in session
|
|
393
|
+
const alertSets = await Promise.all(agents.map((a) => this.getPendingAlerts(a.id, sessionId)));
|
|
394
|
+
const pendingAlerts = [...new Map(alertSets.flat().map((a) => [a.id, a])).values()];
|
|
395
|
+
return {
|
|
396
|
+
sessionId,
|
|
397
|
+
agents,
|
|
398
|
+
recentMessages: messages,
|
|
399
|
+
pendingAlerts,
|
|
400
|
+
snapshotAt: Date.now(),
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
404
|
+
// REAL-TIME SUBSCRIPTIONS (Pub/Sub)
|
|
405
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
406
|
+
/**
|
|
407
|
+
* Subscribe to real-time message updates
|
|
408
|
+
*/
|
|
409
|
+
async subscribeToMessages(handler) {
|
|
410
|
+
if (!this.subscriber)
|
|
411
|
+
return;
|
|
412
|
+
this.messageHandlers.push(handler);
|
|
413
|
+
if (!this.messageHandlerRegistered) {
|
|
414
|
+
this.messageHandlerRegistered = true;
|
|
415
|
+
await this.subscriber.subscribe(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_MESSAGES);
|
|
416
|
+
this.subscriber.on('message', (channel, data) => {
|
|
417
|
+
if (channel.endsWith(REDIS_KEYS.CHANNEL_MESSAGES)) {
|
|
418
|
+
try {
|
|
419
|
+
const message = JSON.parse(data);
|
|
420
|
+
this.messageHandlers.forEach((h) => h(message));
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
/* ignore parse errors */
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Subscribe to alerts
|
|
431
|
+
*/
|
|
432
|
+
async subscribeToAlerts(handler) {
|
|
433
|
+
if (!this.subscriber)
|
|
434
|
+
return;
|
|
435
|
+
this.alertHandlers.push(handler);
|
|
436
|
+
if (!this.alertHandlerRegistered) {
|
|
437
|
+
this.alertHandlerRegistered = true;
|
|
438
|
+
await this.subscriber.subscribe(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_ALERTS);
|
|
439
|
+
this.subscriber.on('message', (channel, data) => {
|
|
440
|
+
if (channel.endsWith(REDIS_KEYS.CHANNEL_ALERTS)) {
|
|
441
|
+
try {
|
|
442
|
+
const alert = JSON.parse(data);
|
|
443
|
+
this.alertHandlers.forEach((h) => h(alert));
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
/* ignore */
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Subscribe to agent status changes
|
|
454
|
+
*/
|
|
455
|
+
async subscribeToStatusUpdates(handler) {
|
|
456
|
+
if (!this.subscriber)
|
|
457
|
+
return;
|
|
458
|
+
this.statusHandlers.push(handler);
|
|
459
|
+
if (!this.statusHandlerRegistered) {
|
|
460
|
+
this.statusHandlerRegistered = true;
|
|
461
|
+
await this.subscriber.subscribe(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_AGENT_STATUS);
|
|
462
|
+
this.subscriber.on('message', (channel, data) => {
|
|
463
|
+
if (channel.endsWith(REDIS_KEYS.CHANNEL_AGENT_STATUS)) {
|
|
464
|
+
try {
|
|
465
|
+
const agent = JSON.parse(data);
|
|
466
|
+
this.statusHandlers.forEach((h) => h(agent));
|
|
467
|
+
}
|
|
468
|
+
catch {
|
|
469
|
+
/* ignore */
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
async publishStatusUpdate(agent) {
|
|
476
|
+
if (!this.redis)
|
|
477
|
+
return;
|
|
478
|
+
try {
|
|
479
|
+
await this.redis.publish(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_AGENT_STATUS, JSON.stringify(agent));
|
|
480
|
+
}
|
|
481
|
+
catch {
|
|
482
|
+
/* ignore */
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
486
|
+
// AGENT ACTIVITY SUMMARIES
|
|
487
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
488
|
+
/**
|
|
489
|
+
* Update agent activity summary (agent reports what they're doing)
|
|
490
|
+
*/
|
|
491
|
+
async updateAgentSummary(agentId, summary) {
|
|
492
|
+
if (!this.redis)
|
|
493
|
+
return false;
|
|
494
|
+
try {
|
|
495
|
+
const fullSummary = {
|
|
496
|
+
...summary,
|
|
497
|
+
agentId,
|
|
498
|
+
updatedAt: Date.now(),
|
|
499
|
+
};
|
|
500
|
+
const key = `${REDIS_KEYS.AGENT_SUMMARY}${agentId}`;
|
|
501
|
+
await this.redis.setex(key, 3600, JSON.stringify(fullSummary)); // 1 hour TTL
|
|
502
|
+
// Publish update for real-time monitoring
|
|
503
|
+
await this.redis.publish(REDIS_KEYS.PREFIX + REDIS_KEYS.CHANNEL_AGENT_SUMMARY, JSON.stringify(fullSummary));
|
|
504
|
+
Logger.debug(`Agent summary updated: ${agentId}`);
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
catch (error) {
|
|
508
|
+
Logger.error('Failed to update agent summary:', error);
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Get current activity summary for an agent
|
|
514
|
+
*/
|
|
515
|
+
async getAgentSummary(agentId) {
|
|
516
|
+
if (!this.redis)
|
|
517
|
+
return null;
|
|
518
|
+
try {
|
|
519
|
+
const data = await this.redis.get(`${REDIS_KEYS.AGENT_SUMMARY}${agentId}`);
|
|
520
|
+
return data ? JSON.parse(data) : null;
|
|
521
|
+
}
|
|
522
|
+
catch {
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Get all activity summaries for agents in a session
|
|
528
|
+
*/
|
|
529
|
+
async getSessionSummaries(sessionId) {
|
|
530
|
+
if (!this.redis)
|
|
531
|
+
return [];
|
|
532
|
+
try {
|
|
533
|
+
const agents = await this.listAgents(sessionId);
|
|
534
|
+
const summaries = [];
|
|
535
|
+
for (const agent of agents) {
|
|
536
|
+
const summary = await this.getAgentSummary(agent.id);
|
|
537
|
+
if (summary) {
|
|
538
|
+
summaries.push(summary);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
return summaries.sort((a, b) => b.updatedAt - a.updatedAt);
|
|
542
|
+
}
|
|
543
|
+
catch (error) {
|
|
544
|
+
Logger.error('Failed to get session summaries:', error);
|
|
545
|
+
return [];
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
549
|
+
// MESSAGE QUEUE - Supervisor pushes messages to agents
|
|
550
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
551
|
+
/**
|
|
552
|
+
* Queue a message for an agent
|
|
553
|
+
* Messages are stored in a ZSET with priority-based scoring
|
|
554
|
+
*/
|
|
555
|
+
async queueMessage(targetAgentId, sessionId, content, options = {}) {
|
|
556
|
+
if (!this.redis)
|
|
557
|
+
return null;
|
|
558
|
+
const priorityLevel = {
|
|
559
|
+
critical: 0,
|
|
560
|
+
high: 1,
|
|
561
|
+
normal: 2,
|
|
562
|
+
low: 3,
|
|
563
|
+
};
|
|
564
|
+
const priority = options.priority || 'normal';
|
|
565
|
+
const message = {
|
|
566
|
+
id: `qmsg_${uuidv4().slice(0, 12)}`,
|
|
567
|
+
targetAgentId,
|
|
568
|
+
sessionId,
|
|
569
|
+
content,
|
|
570
|
+
priority,
|
|
571
|
+
files: options.files,
|
|
572
|
+
context: options.context,
|
|
573
|
+
forceContextChange: options.forceContextChange,
|
|
574
|
+
createdAt: Date.now(),
|
|
575
|
+
expiresAt: options.expiresAt,
|
|
576
|
+
fromAgentId: options.fromAgentId || 'supervisor',
|
|
577
|
+
};
|
|
578
|
+
try {
|
|
579
|
+
const key = `${REDIS_KEYS.AGENT_QUEUE}${targetAgentId}`;
|
|
580
|
+
// Score: (4 - priorityLevel) * 1e12 + timestamp
|
|
581
|
+
// Higher priority = higher score, earlier timestamp = lower score within priority
|
|
582
|
+
const score = (4 - priorityLevel[priority]) * 1e12 + message.createdAt;
|
|
583
|
+
await this.redis.zadd(key, score, JSON.stringify(message));
|
|
584
|
+
await this.redis.expire(key, TTL.SESSION);
|
|
585
|
+
Logger.debug(`Message queued for ${targetAgentId}: ${message.id} (${priority})`);
|
|
586
|
+
return message;
|
|
587
|
+
}
|
|
588
|
+
catch (error) {
|
|
589
|
+
Logger.error('Failed to queue message:', error);
|
|
590
|
+
return null;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Get messages from agent's queue without removing them
|
|
595
|
+
*/
|
|
596
|
+
async getMessageQueue(agentId, options = {}) {
|
|
597
|
+
if (!this.redis)
|
|
598
|
+
return [];
|
|
599
|
+
try {
|
|
600
|
+
const key = `${REDIS_KEYS.AGENT_QUEUE}${agentId}`;
|
|
601
|
+
const limit = options.limit || 50;
|
|
602
|
+
// Get messages in reverse order (highest score/priority first)
|
|
603
|
+
const rawMessages = await this.redis.zrevrange(key, 0, limit - 1);
|
|
604
|
+
const messages = rawMessages
|
|
605
|
+
.map((m) => {
|
|
606
|
+
try {
|
|
607
|
+
return JSON.parse(m);
|
|
608
|
+
}
|
|
609
|
+
catch {
|
|
610
|
+
return null;
|
|
611
|
+
}
|
|
612
|
+
})
|
|
613
|
+
.filter((m) => {
|
|
614
|
+
if (!m)
|
|
615
|
+
return false;
|
|
616
|
+
// Filter expired messages
|
|
617
|
+
if (m.expiresAt && m.expiresAt < Date.now())
|
|
618
|
+
return false;
|
|
619
|
+
// Filter by priority if specified
|
|
620
|
+
if (options.priority && m.priority !== options.priority)
|
|
621
|
+
return false;
|
|
622
|
+
return true;
|
|
623
|
+
});
|
|
624
|
+
return messages;
|
|
625
|
+
}
|
|
626
|
+
catch (error) {
|
|
627
|
+
Logger.error('Failed to get message queue:', error);
|
|
628
|
+
return [];
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Pop the next message from agent's queue (removes it)
|
|
633
|
+
*/
|
|
634
|
+
async popMessage(agentId) {
|
|
635
|
+
if (!this.redis)
|
|
636
|
+
return null;
|
|
637
|
+
try {
|
|
638
|
+
const key = `${REDIS_KEYS.AGENT_QUEUE}${agentId}`;
|
|
639
|
+
const maxAttempts = 100;
|
|
640
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
641
|
+
const result = await this.redis.zpopmax(key, 1);
|
|
642
|
+
if (!result || result.length === 0)
|
|
643
|
+
return null;
|
|
644
|
+
const message = JSON.parse(result[0]);
|
|
645
|
+
// Skip expired messages
|
|
646
|
+
if (message.expiresAt && message.expiresAt < Date.now()) {
|
|
647
|
+
continue;
|
|
648
|
+
}
|
|
649
|
+
Logger.debug(`Message popped for ${agentId}: ${message.id}`);
|
|
650
|
+
return message;
|
|
651
|
+
}
|
|
652
|
+
Logger.warn(`popMessage: skipped ${maxAttempts} expired messages for ${agentId}`);
|
|
653
|
+
return null;
|
|
654
|
+
}
|
|
655
|
+
catch (error) {
|
|
656
|
+
Logger.error('Failed to pop message:', error);
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Clear all messages from agent's queue
|
|
662
|
+
*/
|
|
663
|
+
async clearMessageQueue(agentId) {
|
|
664
|
+
if (!this.redis)
|
|
665
|
+
return 0;
|
|
666
|
+
try {
|
|
667
|
+
const key = `${REDIS_KEYS.AGENT_QUEUE}${agentId}`;
|
|
668
|
+
const count = await this.redis.zcard(key);
|
|
669
|
+
await this.redis.del(key);
|
|
670
|
+
Logger.debug(`Cleared ${count} messages from queue for ${agentId}`);
|
|
671
|
+
return count;
|
|
672
|
+
}
|
|
673
|
+
catch (error) {
|
|
674
|
+
Logger.error('Failed to clear message queue:', error);
|
|
675
|
+
return 0;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Get queue depth (number of pending messages) for an agent
|
|
680
|
+
*/
|
|
681
|
+
async getQueueDepth(agentId) {
|
|
682
|
+
if (!this.redis)
|
|
683
|
+
return 0;
|
|
684
|
+
try {
|
|
685
|
+
const key = `${REDIS_KEYS.AGENT_QUEUE}${agentId}`;
|
|
686
|
+
return await this.redis.zcard(key);
|
|
687
|
+
}
|
|
688
|
+
catch {
|
|
689
|
+
return 0;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
693
|
+
// SESSION OVERVIEW - Hierarchical view of session state
|
|
694
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
695
|
+
/**
|
|
696
|
+
* Get comprehensive overview of a session
|
|
697
|
+
* Includes: workspaces, boards, agents, tasks, activity
|
|
698
|
+
*/
|
|
699
|
+
async getSessionOverview(sessionId) {
|
|
700
|
+
if (!this.redis) {
|
|
701
|
+
return this.emptySessionOverview(sessionId);
|
|
702
|
+
}
|
|
703
|
+
try {
|
|
704
|
+
// Get agents and their summaries
|
|
705
|
+
const agents = await this.listAgents(sessionId);
|
|
706
|
+
const agentOverviews = [];
|
|
707
|
+
for (const agent of agents) {
|
|
708
|
+
const overview = await this.getAgentOverview(agent.id);
|
|
709
|
+
if (overview) {
|
|
710
|
+
agentOverviews.push(overview);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
// Get workspaces this session belongs to
|
|
714
|
+
const workspaceIds = await this.redis.smembers(`mcp:kanban:workspaces:session:${sessionId}`);
|
|
715
|
+
const workspaces = [];
|
|
716
|
+
for (const wsId of workspaceIds) {
|
|
717
|
+
const wsData = await this.redis.get(`mcp:kanban:workspace:${wsId}`);
|
|
718
|
+
if (wsData) {
|
|
719
|
+
const ws = JSON.parse(wsData);
|
|
720
|
+
const boardCount = await this.redis.scard(`mcp:kanban:boards:workspace:${wsId}`);
|
|
721
|
+
workspaces.push({
|
|
722
|
+
id: ws.id,
|
|
723
|
+
name: ws.name,
|
|
724
|
+
memberCount: ws.memberSessions?.length || 0,
|
|
725
|
+
boardCount,
|
|
726
|
+
isOwner: ws.ownerSessionId === sessionId,
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
// Get boards for this session (including from workspaces)
|
|
731
|
+
const boardIds = await this.redis.smembers(`mcp:kanban:boards:session:${sessionId}`);
|
|
732
|
+
const boards = [];
|
|
733
|
+
for (const boardId of boardIds) {
|
|
734
|
+
const boardData = await this.redis.get(`mcp:kanban:board:${boardId}`);
|
|
735
|
+
if (boardData) {
|
|
736
|
+
const board = JSON.parse(boardData);
|
|
737
|
+
const taskCount = await this.redis.zcard(`mcp:kanban:board:${boardId}:tasks`);
|
|
738
|
+
// Get tasks by status
|
|
739
|
+
const byStatus = {
|
|
740
|
+
backlog: 0,
|
|
741
|
+
in_progress: 0,
|
|
742
|
+
review: 0,
|
|
743
|
+
done: 0,
|
|
744
|
+
};
|
|
745
|
+
// Count tasks per status
|
|
746
|
+
const statusKeys = ['backlog', 'in_progress', 'review', 'done'];
|
|
747
|
+
for (const status of statusKeys) {
|
|
748
|
+
const count = await this.redis.scard(`mcp:kanban:status:${sessionId}:${status}`);
|
|
749
|
+
byStatus[status] = count;
|
|
750
|
+
}
|
|
751
|
+
// Get active agents on this board
|
|
752
|
+
const activeAgents = agentOverviews
|
|
753
|
+
.filter((a) => a.currentTask?.boardId === boardId && a.status === 'active')
|
|
754
|
+
.map((a) => a.id);
|
|
755
|
+
boards.push({
|
|
756
|
+
id: board.id,
|
|
757
|
+
name: board.name,
|
|
758
|
+
workspaceId: board.workspaceId,
|
|
759
|
+
taskCount,
|
|
760
|
+
byStatus,
|
|
761
|
+
activeAgents,
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
// Get recent activity from messages
|
|
766
|
+
const messages = await this.getMessageHistory(sessionId, 20);
|
|
767
|
+
const recentActivity = messages.map((msg) => ({
|
|
768
|
+
type: 'message',
|
|
769
|
+
timestamp: msg.timestamp,
|
|
770
|
+
agentId: msg.fromAgentId,
|
|
771
|
+
description: `${msg.fromAgentId} → ${msg.toAgentId}: ${msg.content.slice(0, 50)}...`,
|
|
772
|
+
data: { messageType: msg.type },
|
|
773
|
+
}));
|
|
774
|
+
// Calculate stats
|
|
775
|
+
const stats = {
|
|
776
|
+
totalAgents: agents.length,
|
|
777
|
+
activeAgents: agents.filter((a) => a.status === 'active' || a.status === 'processing')
|
|
778
|
+
.length,
|
|
779
|
+
totalTasks: boards.reduce((sum, b) => sum + b.taskCount, 0),
|
|
780
|
+
tasksInProgress: boards.reduce((sum, b) => sum + b.byStatus.in_progress, 0),
|
|
781
|
+
pendingMessages: await this.getTotalPendingMessages(agents.map((a) => a.id)),
|
|
782
|
+
workspaceCount: workspaces.length,
|
|
783
|
+
boardCount: boards.length,
|
|
784
|
+
};
|
|
785
|
+
return {
|
|
786
|
+
sessionId,
|
|
787
|
+
workspaces,
|
|
788
|
+
boards,
|
|
789
|
+
agents: agentOverviews,
|
|
790
|
+
recentActivity: recentActivity.slice(0, 10),
|
|
791
|
+
stats,
|
|
792
|
+
snapshotAt: Date.now(),
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
catch (error) {
|
|
796
|
+
Logger.error('Failed to get session overview:', error);
|
|
797
|
+
return this.emptySessionOverview(sessionId);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Get detailed overview of a single agent
|
|
802
|
+
*/
|
|
803
|
+
async getAgentOverview(agentId) {
|
|
804
|
+
const agent = await this.getAgent(agentId);
|
|
805
|
+
if (!agent)
|
|
806
|
+
return null;
|
|
807
|
+
const summary = await this.getAgentSummary(agentId);
|
|
808
|
+
const pendingMessages = await this.getQueueDepth(agentId);
|
|
809
|
+
// Get current task from kanban (if any)
|
|
810
|
+
let currentTask;
|
|
811
|
+
if (this.redis) {
|
|
812
|
+
try {
|
|
813
|
+
const taskIds = await this.redis.smembers(`mcp:kanban:agent:${agentId}`);
|
|
814
|
+
for (const taskId of taskIds) {
|
|
815
|
+
const taskData = await this.redis.get(`mcp:kanban:task:${taskId}`);
|
|
816
|
+
if (taskData) {
|
|
817
|
+
const task = JSON.parse(taskData);
|
|
818
|
+
if (task.status === 'in_progress') {
|
|
819
|
+
currentTask = {
|
|
820
|
+
id: task.id,
|
|
821
|
+
title: task.title,
|
|
822
|
+
status: task.status,
|
|
823
|
+
boardId: task.boardId,
|
|
824
|
+
};
|
|
825
|
+
break;
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
catch {
|
|
831
|
+
/* ignore errors */
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
return {
|
|
835
|
+
id: agent.id,
|
|
836
|
+
name: agent.name,
|
|
837
|
+
role: agent.role,
|
|
838
|
+
status: agent.status,
|
|
839
|
+
summary: summary || undefined,
|
|
840
|
+
currentTask,
|
|
841
|
+
pendingMessages,
|
|
842
|
+
};
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Helper: Get total pending messages for multiple agents
|
|
846
|
+
*/
|
|
847
|
+
async getTotalPendingMessages(agentIds) {
|
|
848
|
+
let total = 0;
|
|
849
|
+
for (const id of agentIds) {
|
|
850
|
+
total += await this.getQueueDepth(id);
|
|
851
|
+
}
|
|
852
|
+
return total;
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Helper: Create empty session overview
|
|
856
|
+
*/
|
|
857
|
+
emptySessionOverview(sessionId) {
|
|
858
|
+
return {
|
|
859
|
+
sessionId,
|
|
860
|
+
workspaces: [],
|
|
861
|
+
boards: [],
|
|
862
|
+
agents: [],
|
|
863
|
+
recentActivity: [],
|
|
864
|
+
stats: {
|
|
865
|
+
totalAgents: 0,
|
|
866
|
+
activeAgents: 0,
|
|
867
|
+
totalTasks: 0,
|
|
868
|
+
tasksInProgress: 0,
|
|
869
|
+
pendingMessages: 0,
|
|
870
|
+
workspaceCount: 0,
|
|
871
|
+
boardCount: 0,
|
|
872
|
+
},
|
|
873
|
+
snapshotAt: Date.now(),
|
|
874
|
+
};
|
|
875
|
+
}
|
|
876
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
877
|
+
// WATCH MODE - Continuous monitoring
|
|
878
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
879
|
+
/**
|
|
880
|
+
* Watch session in real-time (returns formatted output)
|
|
881
|
+
*/
|
|
882
|
+
async watchSession(sessionId, durationMs = 10000, onUpdate) {
|
|
883
|
+
const _startTime = Date.now(); // Track for potential future timing metrics
|
|
884
|
+
const outputs = [];
|
|
885
|
+
const formatMessage = (msg) => {
|
|
886
|
+
const time = new Date(msg.timestamp).toLocaleTimeString();
|
|
887
|
+
const priority = msg.priority === 'critical'
|
|
888
|
+
? '🔴'
|
|
889
|
+
: msg.priority === 'high'
|
|
890
|
+
? '🟠'
|
|
891
|
+
: msg.priority === 'normal'
|
|
892
|
+
? '🟢'
|
|
893
|
+
: '⚪';
|
|
894
|
+
const type = msg.type.toUpperCase().padEnd(9);
|
|
895
|
+
return `[${time}] ${priority} ${type} ${msg.fromAgentId} → ${msg.toAgentId}: ${msg.content.slice(0, 100)}`;
|
|
896
|
+
};
|
|
897
|
+
// Get initial snapshot
|
|
898
|
+
const snapshot = await this.getConversationSnapshot(sessionId);
|
|
899
|
+
outputs.push(`\n═══════════════════════════════════════════════════════════════`);
|
|
900
|
+
outputs.push(` AGENT MONITOR - Session: ${sessionId}`);
|
|
901
|
+
outputs.push(`═══════════════════════════════════════════════════════════════`);
|
|
902
|
+
outputs.push(`\n📊 ACTIVE AGENTS (${snapshot.agents.length}):`);
|
|
903
|
+
for (const agent of snapshot.agents) {
|
|
904
|
+
const status = agent.status === 'active'
|
|
905
|
+
? '🟢'
|
|
906
|
+
: agent.status === 'processing'
|
|
907
|
+
? '🔄'
|
|
908
|
+
: agent.status === 'idle'
|
|
909
|
+
? '💤'
|
|
910
|
+
: '⛔';
|
|
911
|
+
outputs.push(` ${status} ${agent.name} (${agent.id}) - ${agent.role} @ ${agent.serverId}`);
|
|
912
|
+
if (agent.currentTask) {
|
|
913
|
+
outputs.push(` └─ Task: ${agent.currentTask}`);
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
outputs.push(`\n💬 RECENT MESSAGES (${snapshot.recentMessages.length}):`);
|
|
917
|
+
for (const msg of snapshot.recentMessages.slice(-10)) {
|
|
918
|
+
outputs.push(` ${formatMessage(msg)}`);
|
|
919
|
+
}
|
|
920
|
+
if (snapshot.pendingAlerts.length > 0) {
|
|
921
|
+
outputs.push(`\n⚠️ PENDING ALERTS (${snapshot.pendingAlerts.length}):`);
|
|
922
|
+
for (const alert of snapshot.pendingAlerts) {
|
|
923
|
+
outputs.push(` [${alert.source}] ${alert.content}`);
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
// Subscribe to real-time updates
|
|
927
|
+
let messageCount = 0;
|
|
928
|
+
await this.subscribeToMessages((msg) => {
|
|
929
|
+
if (msg.sessionId === sessionId) {
|
|
930
|
+
messageCount++;
|
|
931
|
+
const line = ` ${formatMessage(msg)}`;
|
|
932
|
+
outputs.push(line);
|
|
933
|
+
if (onUpdate)
|
|
934
|
+
onUpdate(line);
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
// Wait for duration
|
|
938
|
+
await new Promise((resolve) => setTimeout(resolve, durationMs));
|
|
939
|
+
outputs.push(`\n───────────────────────────────────────────────────────────────`);
|
|
940
|
+
outputs.push(` Monitoring ended. New messages during watch: ${messageCount}`);
|
|
941
|
+
outputs.push(`───────────────────────────────────────────────────────────────\n`);
|
|
942
|
+
return outputs.join('\n');
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
// Singleton
|
|
946
|
+
let monitorInstance = null;
|
|
947
|
+
export function getAgentMonitor(config) {
|
|
948
|
+
if (!monitorInstance) {
|
|
949
|
+
monitorInstance = new AgentMonitor(config);
|
|
950
|
+
}
|
|
951
|
+
return monitorInstance;
|
|
952
|
+
}
|
|
953
|
+
export async function initAgentMonitor(config) {
|
|
954
|
+
const monitor = getAgentMonitor(config);
|
|
955
|
+
await monitor.connect();
|
|
956
|
+
return monitor;
|
|
957
|
+
}
|
|
958
|
+
//# sourceMappingURL=agent-monitor.js.map
|