kemdicode-mcp 1.19.0 → 1.20.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/dist/kanban/index.d.ts +1 -0
- package/dist/kanban/index.d.ts.map +1 -1
- package/dist/kanban/index.js +2 -0
- package/dist/kanban/index.js.map +1 -1
- package/dist/kanban/kanban-store.d.ts +44 -1
- package/dist/kanban/kanban-store.d.ts.map +1 -1
- package/dist/kanban/kanban-store.js +75 -0
- package/dist/kanban/kanban-store.js.map +1 -1
- package/dist/kanban/resolvers.d.ts +72 -0
- package/dist/kanban/resolvers.d.ts.map +1 -0
- package/dist/kanban/resolvers.js +159 -0
- package/dist/kanban/resolvers.js.map +1 -0
- package/dist/kanban/types.d.ts +8 -0
- package/dist/kanban/types.d.ts.map +1 -1
- package/dist/kanban/types.js.map +1 -1
- package/dist/server/session-server.d.ts.map +1 -1
- package/dist/server/session-server.js +3 -0
- package/dist/server/session-server.js.map +1 -1
- package/dist/tools/agents/agent-alert.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-alert.tool.js +9 -0
- package/dist/tools/agents/agent-alert.tool.js.map +1 -1
- package/dist/tools/agents/agent-history.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-history.tool.js +9 -0
- package/dist/tools/agents/agent-history.tool.js.map +1 -1
- package/dist/tools/agents/agent-inject.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-inject.tool.js +9 -0
- package/dist/tools/agents/agent-inject.tool.js.map +1 -1
- package/dist/tools/agents/agent-list.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-list.tool.js +9 -0
- package/dist/tools/agents/agent-list.tool.js.map +1 -1
- package/dist/tools/agents/agent-register.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-register.tool.js +9 -0
- package/dist/tools/agents/agent-register.tool.js.map +1 -1
- package/dist/tools/agents/agent-summary.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-summary.tool.js +9 -0
- package/dist/tools/agents/agent-summary.tool.js.map +1 -1
- package/dist/tools/agents/agent-watch.tool.d.ts.map +1 -1
- package/dist/tools/agents/agent-watch.tool.js +10 -0
- package/dist/tools/agents/agent-watch.tool.js.map +1 -1
- package/dist/tools/agents/monitor.tool.d.ts.map +1 -1
- package/dist/tools/agents/monitor.tool.js +10 -0
- package/dist/tools/agents/monitor.tool.js.map +1 -1
- package/dist/tools/agents/queue-message.tool.d.ts.map +1 -1
- package/dist/tools/agents/queue-message.tool.js +9 -0
- package/dist/tools/agents/queue-message.tool.js.map +1 -1
- package/dist/tools/ask-ai.tool.d.ts.map +1 -1
- package/dist/tools/ask-ai.tool.js +10 -0
- package/dist/tools/ask-ai.tool.js.map +1 -1
- package/dist/tools/batch.tool.d.ts +1 -0
- package/dist/tools/batch.tool.d.ts.map +1 -1
- package/dist/tools/batch.tool.js +18 -3
- package/dist/tools/batch.tool.js.map +1 -1
- package/dist/tools/brainstorm.tool.d.ts.map +1 -1
- package/dist/tools/brainstorm.tool.js +10 -0
- package/dist/tools/brainstorm.tool.js.map +1 -1
- package/dist/tools/code/code-outline.tool.d.ts.map +1 -1
- package/dist/tools/code/code-outline.tool.js +11 -0
- package/dist/tools/code/code-outline.tool.js.map +1 -1
- package/dist/tools/code/find-definition.tool.d.ts.map +1 -1
- package/dist/tools/code/find-definition.tool.js +11 -0
- package/dist/tools/code/find-definition.tool.js.map +1 -1
- package/dist/tools/code/find-references.tool.d.ts.map +1 -1
- package/dist/tools/code/find-references.tool.js +11 -0
- package/dist/tools/code/find-references.tool.js.map +1 -1
- package/dist/tools/code/find-symbols.tool.d.ts.map +1 -1
- package/dist/tools/code/find-symbols.tool.js +11 -0
- package/dist/tools/code/find-symbols.tool.js.map +1 -1
- package/dist/tools/code/insert-after-symbol.tool.d.ts.map +1 -1
- package/dist/tools/code/insert-after-symbol.tool.js +16 -0
- package/dist/tools/code/insert-after-symbol.tool.js.map +1 -1
- package/dist/tools/code/insert-before-symbol.tool.d.ts.map +1 -1
- package/dist/tools/code/insert-before-symbol.tool.js +16 -0
- package/dist/tools/code/insert-before-symbol.tool.js.map +1 -1
- package/dist/tools/code/rename-symbol.tool.d.ts.map +1 -1
- package/dist/tools/code/rename-symbol.tool.js +11 -0
- package/dist/tools/code/rename-symbol.tool.js.map +1 -1
- package/dist/tools/code/semantic-search.tool.d.ts.map +1 -1
- package/dist/tools/code/semantic-search.tool.js +12 -0
- package/dist/tools/code/semantic-search.tool.js.map +1 -1
- package/dist/tools/context/feedback.tool.d.ts.map +1 -1
- package/dist/tools/context/feedback.tool.js +10 -0
- package/dist/tools/context/feedback.tool.js.map +1 -1
- package/dist/tools/context/get-shared-context.tool.d.ts.map +1 -1
- package/dist/tools/context/get-shared-context.tool.js +9 -0
- package/dist/tools/context/get-shared-context.tool.js.map +1 -1
- package/dist/tools/context/shared-thoughts.tool.d.ts.map +1 -1
- package/dist/tools/context/shared-thoughts.tool.js +9 -0
- package/dist/tools/context/shared-thoughts.tool.js.map +1 -1
- package/dist/tools/edit/delete-lines.tool.d.ts.map +1 -1
- package/dist/tools/edit/delete-lines.tool.js +11 -0
- package/dist/tools/edit/delete-lines.tool.js.map +1 -1
- package/dist/tools/edit/insert-at-line.tool.d.ts.map +1 -1
- package/dist/tools/edit/insert-at-line.tool.js +11 -0
- package/dist/tools/edit/insert-at-line.tool.js.map +1 -1
- package/dist/tools/edit/replace-content.tool.d.ts.map +1 -1
- package/dist/tools/edit/replace-content.tool.js +10 -1
- package/dist/tools/edit/replace-content.tool.js.map +1 -1
- package/dist/tools/edit/replace-lines.tool.d.ts.map +1 -1
- package/dist/tools/edit/replace-lines.tool.js +16 -0
- package/dist/tools/edit/replace-lines.tool.js.map +1 -1
- package/dist/tools/file/file-backup-restore.tool.d.ts +20 -0
- package/dist/tools/file/file-backup-restore.tool.d.ts.map +1 -0
- package/dist/tools/file/file-backup-restore.tool.js +301 -0
- package/dist/tools/file/file-backup-restore.tool.js.map +1 -0
- package/dist/tools/file/file-copy.tool.d.ts +20 -0
- package/dist/tools/file/file-copy.tool.d.ts.map +1 -0
- package/dist/tools/file/file-copy.tool.js +215 -0
- package/dist/tools/file/file-copy.tool.js.map +1 -0
- package/dist/tools/file/file-delete.tool.d.ts +20 -0
- package/dist/tools/file/file-delete.tool.d.ts.map +1 -0
- package/dist/tools/file/file-delete.tool.js +195 -0
- package/dist/tools/file/file-delete.tool.js.map +1 -0
- package/dist/tools/file/file-diff.tool.d.ts.map +1 -1
- package/dist/tools/file/file-diff.tool.js +9 -0
- package/dist/tools/file/file-diff.tool.js.map +1 -1
- package/dist/tools/file/file-move.tool.d.ts +20 -0
- package/dist/tools/file/file-move.tool.d.ts.map +1 -0
- package/dist/tools/file/file-move.tool.js +227 -0
- package/dist/tools/file/file-move.tool.js.map +1 -0
- package/dist/tools/file/file-read.tool.d.ts.map +1 -1
- package/dist/tools/file/file-read.tool.js +25 -2
- package/dist/tools/file/file-read.tool.js.map +1 -1
- package/dist/tools/file/file-search.tool.d.ts.map +1 -1
- package/dist/tools/file/file-search.tool.js +9 -0
- package/dist/tools/file/file-search.tool.js.map +1 -1
- package/dist/tools/file/file-tree.tool.d.ts.map +1 -1
- package/dist/tools/file/file-tree.tool.js +9 -0
- package/dist/tools/file/file-tree.tool.js.map +1 -1
- package/dist/tools/file/file-write.tool.d.ts.map +1 -1
- package/dist/tools/file/file-write.tool.js +9 -0
- package/dist/tools/file/file-write.tool.js.map +1 -1
- package/dist/tools/file/index.d.ts +4 -0
- package/dist/tools/file/index.d.ts.map +1 -1
- package/dist/tools/file/index.js +4 -0
- package/dist/tools/file/index.js.map +1 -1
- package/dist/tools/git/git-add.tool.d.ts +20 -0
- package/dist/tools/git/git-add.tool.d.ts.map +1 -0
- package/dist/tools/git/git-add.tool.js +83 -0
- package/dist/tools/git/git-add.tool.js.map +1 -0
- package/dist/tools/git/git-blame.tool.d.ts.map +1 -1
- package/dist/tools/git/git-blame.tool.js +9 -0
- package/dist/tools/git/git-blame.tool.js.map +1 -1
- package/dist/tools/git/git-branch.tool.d.ts.map +1 -1
- package/dist/tools/git/git-branch.tool.js +9 -0
- package/dist/tools/git/git-branch.tool.js.map +1 -1
- package/dist/tools/git/git-commit.tool.d.ts +20 -0
- package/dist/tools/git/git-commit.tool.d.ts.map +1 -0
- package/dist/tools/git/git-commit.tool.js +77 -0
- package/dist/tools/git/git-commit.tool.js.map +1 -0
- package/dist/tools/git/git-diff.tool.d.ts.map +1 -1
- package/dist/tools/git/git-diff.tool.js +27 -6
- package/dist/tools/git/git-diff.tool.js.map +1 -1
- package/dist/tools/git/git-log.tool.d.ts.map +1 -1
- package/dist/tools/git/git-log.tool.js +9 -0
- package/dist/tools/git/git-log.tool.js.map +1 -1
- package/dist/tools/git/git-stash.tool.d.ts +20 -0
- package/dist/tools/git/git-stash.tool.d.ts.map +1 -0
- package/dist/tools/git/git-stash.tool.js +125 -0
- package/dist/tools/git/git-stash.tool.js.map +1 -0
- package/dist/tools/git/git-status.tool.d.ts.map +1 -1
- package/dist/tools/git/git-status.tool.js +21 -3
- package/dist/tools/git/git-status.tool.js.map +1 -1
- package/dist/tools/git/index.d.ts +3 -0
- package/dist/tools/git/index.d.ts.map +1 -1
- package/dist/tools/git/index.js +3 -0
- package/dist/tools/git/index.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +19 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kanban/board-create.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-create.tool.js +20 -5
- package/dist/tools/kanban/board-create.tool.js.map +1 -1
- package/dist/tools/kanban/board-delete.tool.d.ts +20 -0
- package/dist/tools/kanban/board-delete.tool.d.ts.map +1 -0
- package/dist/tools/kanban/board-delete.tool.js +125 -0
- package/dist/tools/kanban/board-delete.tool.js.map +1 -0
- package/dist/tools/kanban/board-invite.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-invite.tool.js +22 -9
- package/dist/tools/kanban/board-invite.tool.js.map +1 -1
- package/dist/tools/kanban/board-list.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-list.tool.js +23 -8
- package/dist/tools/kanban/board-list.tool.js.map +1 -1
- package/dist/tools/kanban/board-members.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-members.tool.js +23 -10
- package/dist/tools/kanban/board-members.tool.js.map +1 -1
- package/dist/tools/kanban/board-share.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-share.tool.js +20 -6
- package/dist/tools/kanban/board-share.tool.js.map +1 -1
- package/dist/tools/kanban/board-status.tool.d.ts.map +1 -1
- package/dist/tools/kanban/board-status.tool.js +15 -4
- package/dist/tools/kanban/board-status.tool.js.map +1 -1
- package/dist/tools/kanban/index.d.ts +5 -0
- package/dist/tools/kanban/index.d.ts.map +1 -1
- package/dist/tools/kanban/index.js +6 -0
- package/dist/tools/kanban/index.js.map +1 -1
- package/dist/tools/kanban/task-assign.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-assign.tool.js +9 -0
- package/dist/tools/kanban/task-assign.tool.js.map +1 -1
- package/dist/tools/kanban/task-claim.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-claim.tool.js +13 -10
- package/dist/tools/kanban/task-claim.tool.js.map +1 -1
- package/dist/tools/kanban/task-comment.tool.d.ts +20 -0
- package/dist/tools/kanban/task-comment.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-comment.tool.js +119 -0
- package/dist/tools/kanban/task-comment.tool.js.map +1 -0
- package/dist/tools/kanban/task-create.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-create.tool.js +23 -7
- package/dist/tools/kanban/task-create.tool.js.map +1 -1
- package/dist/tools/kanban/task-delete.tool.d.ts +20 -0
- package/dist/tools/kanban/task-delete.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-delete.tool.js +101 -0
- package/dist/tools/kanban/task-delete.tool.js.map +1 -0
- package/dist/tools/kanban/task-get.tool.d.ts +20 -0
- package/dist/tools/kanban/task-get.tool.d.ts.map +1 -0
- package/dist/tools/kanban/task-get.tool.js +103 -0
- package/dist/tools/kanban/task-get.tool.js.map +1 -0
- package/dist/tools/kanban/task-list.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-list.tool.js +22 -6
- package/dist/tools/kanban/task-list.tool.js.map +1 -1
- package/dist/tools/kanban/task-push-multi.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-push-multi.tool.js +19 -4
- package/dist/tools/kanban/task-push-multi.tool.js.map +1 -1
- package/dist/tools/kanban/task-update.tool.d.ts.map +1 -1
- package/dist/tools/kanban/task-update.tool.js +12 -2
- package/dist/tools/kanban/task-update.tool.js.map +1 -1
- package/dist/tools/kanban/workspace-create.tool.d.ts.map +1 -1
- package/dist/tools/kanban/workspace-create.tool.js +14 -3
- package/dist/tools/kanban/workspace-create.tool.js.map +1 -1
- package/dist/tools/kanban/workspace-delete.tool.d.ts +20 -0
- package/dist/tools/kanban/workspace-delete.tool.d.ts.map +1 -0
- package/dist/tools/kanban/workspace-delete.tool.js +141 -0
- package/dist/tools/kanban/workspace-delete.tool.js.map +1 -0
- package/dist/tools/kanban/workspace-join.tool.d.ts.map +1 -1
- package/dist/tools/kanban/workspace-join.tool.js +20 -8
- package/dist/tools/kanban/workspace-join.tool.js.map +1 -1
- package/dist/tools/kanban/workspace-leave.tool.d.ts.map +1 -1
- package/dist/tools/kanban/workspace-leave.tool.js +19 -7
- package/dist/tools/kanban/workspace-leave.tool.js.map +1 -1
- package/dist/tools/kanban/workspace-list.tool.d.ts.map +1 -1
- package/dist/tools/kanban/workspace-list.tool.js +9 -0
- package/dist/tools/kanban/workspace-list.tool.js.map +1 -1
- package/dist/tools/loci/graph-find-path.tool.d.ts.map +1 -1
- package/dist/tools/loci/graph-find-path.tool.js +9 -0
- package/dist/tools/loci/graph-find-path.tool.js.map +1 -1
- package/dist/tools/loci/graph-query.tool.d.ts.map +1 -1
- package/dist/tools/loci/graph-query.tool.js +9 -0
- package/dist/tools/loci/graph-query.tool.js.map +1 -1
- package/dist/tools/loci/loci-recall.tool.d.ts.map +1 -1
- package/dist/tools/loci/loci-recall.tool.js +9 -0
- package/dist/tools/loci/loci-recall.tool.js.map +1 -1
- package/dist/tools/loci/sequence-recommend.tool.d.ts.map +1 -1
- package/dist/tools/loci/sequence-recommend.tool.js +9 -0
- package/dist/tools/loci/sequence-recommend.tool.js.map +1 -1
- package/dist/tools/memory/checkpoint-diff.tool.d.ts +20 -0
- package/dist/tools/memory/checkpoint-diff.tool.d.ts.map +1 -0
- package/dist/tools/memory/checkpoint-diff.tool.js +235 -0
- package/dist/tools/memory/checkpoint-diff.tool.js.map +1 -0
- package/dist/tools/memory/checkpoint-restore.tool.d.ts.map +1 -1
- package/dist/tools/memory/checkpoint-restore.tool.js +8 -0
- package/dist/tools/memory/checkpoint-restore.tool.js.map +1 -1
- package/dist/tools/memory/checkpoint-save.tool.d.ts.map +1 -1
- package/dist/tools/memory/checkpoint-save.tool.js +9 -0
- package/dist/tools/memory/checkpoint-save.tool.js.map +1 -1
- package/dist/tools/memory/delete-memory.tool.d.ts.map +1 -1
- package/dist/tools/memory/delete-memory.tool.js +9 -0
- package/dist/tools/memory/delete-memory.tool.js.map +1 -1
- package/dist/tools/memory/edit-memory.tool.d.ts.map +1 -1
- package/dist/tools/memory/edit-memory.tool.js +9 -0
- package/dist/tools/memory/edit-memory.tool.js.map +1 -1
- package/dist/tools/memory/index.d.ts +1 -0
- package/dist/tools/memory/index.d.ts.map +1 -1
- package/dist/tools/memory/index.js +1 -0
- package/dist/tools/memory/index.js.map +1 -1
- package/dist/tools/memory/list-memories.tool.d.ts.map +1 -1
- package/dist/tools/memory/list-memories.tool.js +9 -0
- package/dist/tools/memory/list-memories.tool.js.map +1 -1
- package/dist/tools/memory/read-memory.tool.d.ts.map +1 -1
- package/dist/tools/memory/read-memory.tool.js +9 -0
- package/dist/tools/memory/read-memory.tool.js.map +1 -1
- package/dist/tools/memory/write-memory.tool.d.ts.map +1 -1
- package/dist/tools/memory/write-memory.tool.js +23 -1
- package/dist/tools/memory/write-memory.tool.js.map +1 -1
- package/dist/tools/mpc/mpc-distribute.tool.d.ts.map +1 -1
- package/dist/tools/mpc/mpc-distribute.tool.js +8 -0
- package/dist/tools/mpc/mpc-distribute.tool.js.map +1 -1
- package/dist/tools/mpc/mpc-reconstruct.tool.d.ts.map +1 -1
- package/dist/tools/mpc/mpc-reconstruct.tool.js +8 -0
- package/dist/tools/mpc/mpc-reconstruct.tool.js.map +1 -1
- package/dist/tools/mpc/mpc-split.tool.d.ts.map +1 -1
- package/dist/tools/mpc/mpc-split.tool.js +8 -0
- package/dist/tools/mpc/mpc-split.tool.js.map +1 -1
- package/dist/tools/mpc/mpc-status.tool.d.ts.map +1 -1
- package/dist/tools/mpc/mpc-status.tool.js +9 -0
- package/dist/tools/mpc/mpc-status.tool.js.map +1 -1
- package/dist/tools/multi-llm/consensus-prompt.tool.d.ts.map +1 -1
- package/dist/tools/multi-llm/consensus-prompt.tool.js +9 -0
- package/dist/tools/multi-llm/consensus-prompt.tool.js.map +1 -1
- package/dist/tools/multi-llm/multi-prompt.tool.d.ts.map +1 -1
- package/dist/tools/multi-llm/multi-prompt.tool.js +9 -0
- package/dist/tools/multi-llm/multi-prompt.tool.js.map +1 -1
- package/dist/tools/pipeline.tool.d.ts +45 -0
- package/dist/tools/pipeline.tool.d.ts.map +1 -0
- package/dist/tools/pipeline.tool.js +161 -0
- package/dist/tools/pipeline.tool.js.map +1 -0
- package/dist/tools/project/check-types.tool.d.ts.map +1 -1
- package/dist/tools/project/check-types.tool.js +11 -0
- package/dist/tools/project/check-types.tool.js.map +1 -1
- package/dist/tools/project/project-info.tool.d.ts.map +1 -1
- package/dist/tools/project/project-info.tool.js +9 -0
- package/dist/tools/project/project-info.tool.js.map +1 -1
- package/dist/tools/project/run-lint.tool.d.ts.map +1 -1
- package/dist/tools/project/run-lint.tool.js +14 -3
- package/dist/tools/project/run-lint.tool.js.map +1 -1
- package/dist/tools/project/run-tests.tool.d.ts.map +1 -1
- package/dist/tools/project/run-tests.tool.js +11 -0
- package/dist/tools/project/run-tests.tool.js.map +1 -1
- package/dist/tools/recursive/invocation-log.tool.d.ts.map +1 -1
- package/dist/tools/recursive/invocation-log.tool.js +9 -0
- package/dist/tools/recursive/invocation-log.tool.js.map +1 -1
- package/dist/tools/recursive/invoke-batch.tool.d.ts.map +1 -1
- package/dist/tools/recursive/invoke-batch.tool.js +9 -0
- package/dist/tools/recursive/invoke-batch.tool.js.map +1 -1
- package/dist/tools/recursive/invoke-tool.tool.d.ts.map +1 -1
- package/dist/tools/recursive/invoke-tool.tool.js +9 -0
- package/dist/tools/recursive/invoke-tool.tool.js.map +1 -1
- package/dist/tools/registry.d.ts +8 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/rl/rl-dopamine-log.tool.d.ts.map +1 -1
- package/dist/tools/rl/rl-dopamine-log.tool.js +9 -0
- package/dist/tools/rl/rl-dopamine-log.tool.js.map +1 -1
- package/dist/tools/rl/rl-reward-stats.tool.d.ts.map +1 -1
- package/dist/tools/rl/rl-reward-stats.tool.js +9 -0
- package/dist/tools/rl/rl-reward-stats.tool.js.map +1 -1
- package/dist/tools/session/session-create.tool.d.ts.map +1 -1
- package/dist/tools/session/session-create.tool.js +9 -0
- package/dist/tools/session/session-create.tool.js.map +1 -1
- package/dist/tools/session/session-delete.tool.d.ts.map +1 -1
- package/dist/tools/session/session-delete.tool.js +9 -0
- package/dist/tools/session/session-delete.tool.js.map +1 -1
- package/dist/tools/session/session-info.tool.d.ts.map +1 -1
- package/dist/tools/session/session-info.tool.js +8 -0
- package/dist/tools/session/session-info.tool.js.map +1 -1
- package/dist/tools/session/session-list.tool.d.ts.map +1 -1
- package/dist/tools/session/session-list.tool.js +9 -0
- package/dist/tools/session/session-list.tool.js.map +1 -1
- package/dist/tools/session/session-switch.tool.d.ts.map +1 -1
- package/dist/tools/session/session-switch.tool.js +9 -0
- package/dist/tools/session/session-switch.tool.js.map +1 -1
- package/dist/tools/simple-tools.d.ts.map +1 -1
- package/dist/tools/simple-tools.js +23 -1
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/tools/specialized/analyze-deps.tool.d.ts.map +1 -1
- package/dist/tools/specialized/analyze-deps.tool.js +10 -0
- package/dist/tools/specialized/analyze-deps.tool.js.map +1 -1
- package/dist/tools/specialized/auto-fix-agent.tool.d.ts.map +1 -1
- package/dist/tools/specialized/auto-fix-agent.tool.js +10 -0
- package/dist/tools/specialized/auto-fix-agent.tool.js.map +1 -1
- package/dist/tools/specialized/auto-fix.tool.d.ts.map +1 -1
- package/dist/tools/specialized/auto-fix.tool.js +12 -2
- package/dist/tools/specialized/auto-fix.tool.js.map +1 -1
- package/dist/tools/specialized/code-review.tool.d.ts.map +1 -1
- package/dist/tools/specialized/code-review.tool.js +11 -2
- package/dist/tools/specialized/code-review.tool.js.map +1 -1
- package/dist/tools/specialized/explain-code.tool.d.ts.map +1 -1
- package/dist/tools/specialized/explain-code.tool.js +11 -1
- package/dist/tools/specialized/explain-code.tool.js.map +1 -1
- package/dist/tools/specialized/fix-bug.tool.d.ts.map +1 -1
- package/dist/tools/specialized/fix-bug.tool.js +11 -1
- package/dist/tools/specialized/fix-bug.tool.js.map +1 -1
- package/dist/tools/specialized/refactor.tool.d.ts.map +1 -1
- package/dist/tools/specialized/refactor.tool.js +11 -1
- package/dist/tools/specialized/refactor.tool.js.map +1 -1
- package/dist/tools/specialized/write-tests.tool.d.ts.map +1 -1
- package/dist/tools/specialized/write-tests.tool.js +11 -1
- package/dist/tools/specialized/write-tests.tool.js.map +1 -1
- package/dist/tools/system/ai-config.tool.d.ts.map +1 -1
- package/dist/tools/system/ai-config.tool.js +10 -0
- package/dist/tools/system/ai-config.tool.js.map +1 -1
- package/dist/tools/system/ai-models.tool.d.ts.map +1 -1
- package/dist/tools/system/ai-models.tool.js +10 -0
- package/dist/tools/system/ai-models.tool.js.map +1 -1
- package/dist/tools/system/config.tool.d.ts +1 -1
- package/dist/tools/system/config.tool.d.ts.map +1 -1
- package/dist/tools/system/config.tool.js +10 -0
- package/dist/tools/system/config.tool.js.map +1 -1
- package/dist/tools/system/env-info.tool.d.ts.map +1 -1
- package/dist/tools/system/env-info.tool.js +10 -0
- package/dist/tools/system/env-info.tool.js.map +1 -1
- package/dist/tools/system/memory-usage.tool.d.ts.map +1 -1
- package/dist/tools/system/memory-usage.tool.js +9 -0
- package/dist/tools/system/memory-usage.tool.js.map +1 -1
- package/dist/tools/system/process-list.tool.d.ts.map +1 -1
- package/dist/tools/system/process-list.tool.js +10 -0
- package/dist/tools/system/process-list.tool.js.map +1 -1
- package/dist/tools/system/shell-exec.tool.d.ts.map +1 -1
- package/dist/tools/system/shell-exec.tool.js +10 -0
- package/dist/tools/system/shell-exec.tool.js.map +1 -1
- package/dist/tools/timeout-test.tool.d.ts.map +1 -1
- package/dist/tools/timeout-test.tool.js +9 -0
- package/dist/tools/timeout-test.tool.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,301 @@
|
|
|
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
|
+
* File Backup Restore Tool
|
|
20
|
+
*
|
|
21
|
+
* List and restore file backups created by file-write tool.
|
|
22
|
+
* Backups use the `.bak` naming convention (e.g. `file.ts.bak`).
|
|
23
|
+
* Restoring creates a safety backup of the current file first.
|
|
24
|
+
*
|
|
25
|
+
* @module tools/file/file-backup-restore
|
|
26
|
+
*/
|
|
27
|
+
import { z } from 'zod';
|
|
28
|
+
import { promises as fs } from 'fs';
|
|
29
|
+
import { dirname, basename } from 'path';
|
|
30
|
+
import { Logger } from '../../utils/logger.js';
|
|
31
|
+
import { fromNodeError, formatErrorResponse } from '../../utils/errors.js';
|
|
32
|
+
import { validatePath, ValidationError, checkRateLimit } from '../../utils/validation.js';
|
|
33
|
+
const schema = z.object({
|
|
34
|
+
action: z.enum(['list', 'restore']).describe('List available backups or restore one'),
|
|
35
|
+
path: z.string().min(1).describe('Original file path'),
|
|
36
|
+
backupPath: z.string().optional().describe('Specific backup to restore (for restore action)'),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Backup file patterns to search for.
|
|
40
|
+
* file-write creates backups as `<filename>.bak`
|
|
41
|
+
*/
|
|
42
|
+
const BACKUP_SUFFIXES = ['.bak'];
|
|
43
|
+
/**
|
|
44
|
+
* Find all backup files for a given original file path
|
|
45
|
+
*/
|
|
46
|
+
async function findBackups(originalPath) {
|
|
47
|
+
const dir = dirname(originalPath);
|
|
48
|
+
const base = basename(originalPath);
|
|
49
|
+
const backups = [];
|
|
50
|
+
try {
|
|
51
|
+
const entries = await fs.readdir(dir);
|
|
52
|
+
for (const entry of entries) {
|
|
53
|
+
// Match exact .bak suffix pattern
|
|
54
|
+
for (const suffix of BACKUP_SUFFIXES) {
|
|
55
|
+
if (entry === `${base}${suffix}`) {
|
|
56
|
+
const fullPath = `${dir}/${entry}`;
|
|
57
|
+
try {
|
|
58
|
+
const stats = await fs.stat(fullPath);
|
|
59
|
+
if (stats.isFile()) {
|
|
60
|
+
backups.push({
|
|
61
|
+
path: fullPath,
|
|
62
|
+
size: stats.size,
|
|
63
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Skip inaccessible files
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Also match timestamped backup patterns like file.ts.bak.20260130-120000
|
|
73
|
+
if (entry.startsWith(`${base}.bak`)) {
|
|
74
|
+
const fullPath = `${dir}/${entry}`;
|
|
75
|
+
try {
|
|
76
|
+
const stats = await fs.stat(fullPath);
|
|
77
|
+
if (stats.isFile()) {
|
|
78
|
+
// Avoid duplicates
|
|
79
|
+
if (!backups.some((b) => b.path === fullPath)) {
|
|
80
|
+
backups.push({
|
|
81
|
+
path: fullPath,
|
|
82
|
+
size: stats.size,
|
|
83
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Skip inaccessible files
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const nodeError = error;
|
|
96
|
+
if (nodeError.code !== 'ENOENT') {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
// Directory doesn't exist - no backups
|
|
100
|
+
}
|
|
101
|
+
// Sort by modification time, newest first
|
|
102
|
+
backups.sort((a, b) => new Date(b.modifiedAt).getTime() - new Date(a.modifiedAt).getTime());
|
|
103
|
+
return backups;
|
|
104
|
+
}
|
|
105
|
+
export const fileBackupRestoreTool = {
|
|
106
|
+
name: 'file-backup-restore',
|
|
107
|
+
description: 'List available backups or restore a backup file. Works with .bak backups created by file-write.',
|
|
108
|
+
zodSchema: schema,
|
|
109
|
+
metadata: { category: 'file', tags: ['backup', 'restore', 'recovery'] },
|
|
110
|
+
execute: async (args) => {
|
|
111
|
+
const { action, path: inputPath, backupPath } = args;
|
|
112
|
+
if (!checkRateLimit('file-operations', { maxRequests: 50, windowMs: 60000 })) {
|
|
113
|
+
return JSON.stringify({
|
|
114
|
+
success: false,
|
|
115
|
+
error: 'Rate limit exceeded for file operations',
|
|
116
|
+
code: 'RATE_LIMIT_EXCEEDED',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const sessionCwd = args._sessionCwd;
|
|
120
|
+
// Validate the original file path
|
|
121
|
+
let validatedPath;
|
|
122
|
+
try {
|
|
123
|
+
validatedPath = await validatePath(inputPath, {
|
|
124
|
+
allowSymlinks: false,
|
|
125
|
+
requireWithinProject: false,
|
|
126
|
+
allowReadFromBlocked: true,
|
|
127
|
+
operation: 'read',
|
|
128
|
+
projectRoot: sessionCwd,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (validationError) {
|
|
132
|
+
if (validationError instanceof ValidationError) {
|
|
133
|
+
Logger.warn(`file-backup-restore validation failed: ${validationError.message}`);
|
|
134
|
+
return JSON.stringify({
|
|
135
|
+
success: false,
|
|
136
|
+
error: validationError.message,
|
|
137
|
+
code: validationError.code,
|
|
138
|
+
path: inputPath,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
throw validationError;
|
|
142
|
+
}
|
|
143
|
+
if (action === 'list') {
|
|
144
|
+
try {
|
|
145
|
+
const backups = await findBackups(validatedPath);
|
|
146
|
+
return JSON.stringify({
|
|
147
|
+
success: true,
|
|
148
|
+
action: 'list',
|
|
149
|
+
originalPath: validatedPath,
|
|
150
|
+
backupCount: backups.length,
|
|
151
|
+
backups,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
156
|
+
Logger.error(`file-backup-restore list error: ${errorMessage}`);
|
|
157
|
+
return JSON.stringify({
|
|
158
|
+
success: false,
|
|
159
|
+
error: errorMessage,
|
|
160
|
+
code: 'LIST_ERROR',
|
|
161
|
+
path: validatedPath,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// action === 'restore'
|
|
166
|
+
try {
|
|
167
|
+
// Determine which backup to restore
|
|
168
|
+
let restoreFrom;
|
|
169
|
+
if (backupPath) {
|
|
170
|
+
// Validate the specified backup path
|
|
171
|
+
try {
|
|
172
|
+
restoreFrom = await validatePath(backupPath, {
|
|
173
|
+
allowSymlinks: false,
|
|
174
|
+
requireWithinProject: false,
|
|
175
|
+
allowReadFromBlocked: true,
|
|
176
|
+
operation: 'read',
|
|
177
|
+
projectRoot: sessionCwd,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (validationError) {
|
|
181
|
+
if (validationError instanceof ValidationError) {
|
|
182
|
+
return JSON.stringify({
|
|
183
|
+
success: false,
|
|
184
|
+
error: validationError.message,
|
|
185
|
+
code: validationError.code,
|
|
186
|
+
backupPath,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
throw validationError;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Find the most recent backup
|
|
194
|
+
const backups = await findBackups(validatedPath);
|
|
195
|
+
if (backups.length === 0) {
|
|
196
|
+
return JSON.stringify({
|
|
197
|
+
success: false,
|
|
198
|
+
error: `No backups found for: ${validatedPath}`,
|
|
199
|
+
code: 'NO_BACKUPS',
|
|
200
|
+
path: validatedPath,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
restoreFrom = backups[0].path;
|
|
204
|
+
}
|
|
205
|
+
// Check backup file exists
|
|
206
|
+
let backupStats;
|
|
207
|
+
try {
|
|
208
|
+
backupStats = await fs.stat(restoreFrom);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
const nodeError = error;
|
|
212
|
+
if (nodeError.code === 'ENOENT') {
|
|
213
|
+
return JSON.stringify({
|
|
214
|
+
success: false,
|
|
215
|
+
error: `Backup file not found: ${restoreFrom}`,
|
|
216
|
+
code: 'BACKUP_NOT_FOUND',
|
|
217
|
+
backupPath: restoreFrom,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
if (!backupStats.isFile()) {
|
|
223
|
+
return JSON.stringify({
|
|
224
|
+
success: false,
|
|
225
|
+
error: `Backup path is not a file: ${restoreFrom}`,
|
|
226
|
+
code: 'NOT_A_FILE',
|
|
227
|
+
backupPath: restoreFrom,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// Validate destination for write
|
|
231
|
+
let writePath;
|
|
232
|
+
try {
|
|
233
|
+
writePath = await validatePath(inputPath, {
|
|
234
|
+
allowSymlinks: false,
|
|
235
|
+
requireWithinProject: false,
|
|
236
|
+
allowReadFromBlocked: false,
|
|
237
|
+
operation: 'write',
|
|
238
|
+
projectRoot: sessionCwd,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (validationError) {
|
|
242
|
+
if (validationError instanceof ValidationError) {
|
|
243
|
+
return JSON.stringify({
|
|
244
|
+
success: false,
|
|
245
|
+
error: validationError.message,
|
|
246
|
+
code: validationError.code,
|
|
247
|
+
path: inputPath,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
throw validationError;
|
|
251
|
+
}
|
|
252
|
+
// Create a safety backup of the current file before restoring
|
|
253
|
+
let safetyBackupPath = null;
|
|
254
|
+
try {
|
|
255
|
+
const currentStats = await fs.stat(writePath);
|
|
256
|
+
if (currentStats.isFile()) {
|
|
257
|
+
safetyBackupPath = `${writePath}.bak`;
|
|
258
|
+
await fs.copyFile(writePath, safetyBackupPath);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
const nodeError = error;
|
|
263
|
+
if (nodeError.code !== 'ENOENT') {
|
|
264
|
+
// Non-critical: log but continue
|
|
265
|
+
Logger.warn(`file-backup-restore: could not create safety backup: ${error.message}`);
|
|
266
|
+
safetyBackupPath = null;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Restore: copy backup over original
|
|
270
|
+
await fs.copyFile(restoreFrom, writePath);
|
|
271
|
+
const restoredStats = await fs.stat(writePath);
|
|
272
|
+
Logger.debug(`file-backup-restore: restored ${restoreFrom} -> ${writePath}`);
|
|
273
|
+
return JSON.stringify({
|
|
274
|
+
success: true,
|
|
275
|
+
action: 'restore',
|
|
276
|
+
originalPath: writePath,
|
|
277
|
+
restoredFrom: restoreFrom,
|
|
278
|
+
safetyBackup: safetyBackupPath,
|
|
279
|
+
size: restoredStats.size,
|
|
280
|
+
restoredAt: new Date().toISOString(),
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
285
|
+
Logger.error(`file-backup-restore restore error: ${errorMessage}`);
|
|
286
|
+
const nodeError = error;
|
|
287
|
+
if (nodeError.code) {
|
|
288
|
+
const mcpError = fromNodeError(nodeError, inputPath, 'write');
|
|
289
|
+
const errorResponse = formatErrorResponse(mcpError);
|
|
290
|
+
return JSON.stringify({ success: false, ...errorResponse, path: inputPath });
|
|
291
|
+
}
|
|
292
|
+
return JSON.stringify({
|
|
293
|
+
success: false,
|
|
294
|
+
error: errorMessage,
|
|
295
|
+
code: 'RESTORE_ERROR',
|
|
296
|
+
path: inputPath,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
//# sourceMappingURL=file-backup-restore.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-backup-restore.tool.js","sourceRoot":"","sources":["../../../src/tools/file/file-backup-restore.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
import { UnifiedTool } from '../registry.js';
|
|
19
|
+
export declare const fileCopyTool: UnifiedTool;
|
|
20
|
+
//# sourceMappingURL=file-copy.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-copy.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/file-copy.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAkL7C,eAAO,MAAM,YAAY,EAAE,WAiC1B,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
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
|
+
* File Copy Tool
|
|
20
|
+
*
|
|
21
|
+
* Copy files with security validation, overwrite protection,
|
|
22
|
+
* automatic directory creation, and batch operations.
|
|
23
|
+
*
|
|
24
|
+
* @module tools/file/file-copy
|
|
25
|
+
*/
|
|
26
|
+
import { z } from 'zod';
|
|
27
|
+
import { promises as fs } from 'fs';
|
|
28
|
+
import { dirname } from 'path';
|
|
29
|
+
import { Logger } from '../../utils/logger.js';
|
|
30
|
+
import { fromNodeError, formatErrorResponse } from '../../utils/errors.js';
|
|
31
|
+
import { validatePath, ValidationError, checkRateLimit } from '../../utils/validation.js';
|
|
32
|
+
const schema = z.object({
|
|
33
|
+
operations: z
|
|
34
|
+
.array(z.object({
|
|
35
|
+
source: z.string().min(1).describe('Source file path'),
|
|
36
|
+
destination: z.string().min(1).describe('Destination file path'),
|
|
37
|
+
}))
|
|
38
|
+
.min(1)
|
|
39
|
+
.max(20)
|
|
40
|
+
.describe('Copy operations (1-20)'),
|
|
41
|
+
overwrite: z.boolean().default(false).describe('Overwrite if destination exists'),
|
|
42
|
+
createDirs: z.boolean().default(true).describe('Create destination directories'),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Create parent directories recursively
|
|
46
|
+
*/
|
|
47
|
+
async function ensureDirectory(dirPath) {
|
|
48
|
+
try {
|
|
49
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const nodeError = error;
|
|
53
|
+
if (nodeError.code !== 'EEXIST') {
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Copy a single file and return structured result
|
|
60
|
+
*/
|
|
61
|
+
async function copySingleFile(source, destination, overwrite, createDirs, sessionCwd) {
|
|
62
|
+
try {
|
|
63
|
+
// Validate source path
|
|
64
|
+
let validatedSource;
|
|
65
|
+
try {
|
|
66
|
+
validatedSource = await validatePath(source, {
|
|
67
|
+
allowSymlinks: false,
|
|
68
|
+
requireWithinProject: false,
|
|
69
|
+
allowReadFromBlocked: true,
|
|
70
|
+
operation: 'read',
|
|
71
|
+
projectRoot: sessionCwd,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (validationError) {
|
|
75
|
+
if (validationError instanceof ValidationError) {
|
|
76
|
+
Logger.warn(`file-copy source validation failed: ${validationError.message}`);
|
|
77
|
+
return {
|
|
78
|
+
success: false,
|
|
79
|
+
error: validationError.message,
|
|
80
|
+
code: validationError.code,
|
|
81
|
+
source,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
throw validationError;
|
|
85
|
+
}
|
|
86
|
+
// Validate destination path
|
|
87
|
+
let validatedDest;
|
|
88
|
+
try {
|
|
89
|
+
validatedDest = await validatePath(destination, {
|
|
90
|
+
allowSymlinks: false,
|
|
91
|
+
requireWithinProject: false,
|
|
92
|
+
allowReadFromBlocked: false,
|
|
93
|
+
operation: 'write',
|
|
94
|
+
projectRoot: sessionCwd,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (validationError) {
|
|
98
|
+
if (validationError instanceof ValidationError) {
|
|
99
|
+
Logger.warn(`file-copy destination validation failed: ${validationError.message}`);
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
error: validationError.message,
|
|
103
|
+
code: validationError.code,
|
|
104
|
+
source,
|
|
105
|
+
destination,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
throw validationError;
|
|
109
|
+
}
|
|
110
|
+
// Check source exists and is a file
|
|
111
|
+
let sourceStats;
|
|
112
|
+
try {
|
|
113
|
+
sourceStats = await fs.stat(validatedSource);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const nodeError = error;
|
|
117
|
+
if (nodeError.code === 'ENOENT') {
|
|
118
|
+
return {
|
|
119
|
+
success: false,
|
|
120
|
+
error: `Source file not found: ${validatedSource}`,
|
|
121
|
+
code: 'FILE_NOT_FOUND',
|
|
122
|
+
source: validatedSource,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
if (!sourceStats.isFile()) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: `Source is not a file: ${validatedSource}`,
|
|
131
|
+
code: 'NOT_A_FILE',
|
|
132
|
+
source: validatedSource,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Check destination does not exist (unless overwrite)
|
|
136
|
+
if (!overwrite) {
|
|
137
|
+
try {
|
|
138
|
+
await fs.stat(validatedDest);
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: `Destination already exists: ${validatedDest}`,
|
|
142
|
+
code: 'DESTINATION_EXISTS',
|
|
143
|
+
source: validatedSource,
|
|
144
|
+
destination: validatedDest,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
const nodeError = error;
|
|
149
|
+
if (nodeError.code !== 'ENOENT') {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
// ENOENT is expected - destination doesn't exist
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Create destination directories if needed
|
|
156
|
+
if (createDirs) {
|
|
157
|
+
const destDir = dirname(validatedDest);
|
|
158
|
+
try {
|
|
159
|
+
await fs.access(destDir);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
await ensureDirectory(destDir);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Copy file
|
|
166
|
+
const copyFlags = overwrite ? 0 : fs.constants.COPYFILE_EXCL;
|
|
167
|
+
await fs.copyFile(validatedSource, validatedDest, copyFlags);
|
|
168
|
+
const destStats = await fs.stat(validatedDest);
|
|
169
|
+
Logger.debug(`file-copy: copied ${validatedSource} -> ${validatedDest} (${destStats.size} bytes)`);
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
source: validatedSource,
|
|
173
|
+
destination: validatedDest,
|
|
174
|
+
size: destStats.size,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
179
|
+
Logger.error(`file-copy error: ${errorMessage}`);
|
|
180
|
+
const nodeError = error;
|
|
181
|
+
if (nodeError.code) {
|
|
182
|
+
const mcpError = fromNodeError(nodeError, source, 'write');
|
|
183
|
+
const errorResponse = formatErrorResponse(mcpError);
|
|
184
|
+
return { success: false, ...errorResponse, source, destination };
|
|
185
|
+
}
|
|
186
|
+
return { success: false, error: errorMessage, code: 'UNKNOWN_ERROR', source, destination };
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export const fileCopyTool = {
|
|
190
|
+
name: 'file-copy',
|
|
191
|
+
description: 'Copy 1-20 files with overwrite protection and automatic directory creation.',
|
|
192
|
+
zodSchema: schema,
|
|
193
|
+
metadata: { category: 'file', tags: ['copy', 'duplicate', 'batch'] },
|
|
194
|
+
execute: async (args) => {
|
|
195
|
+
const { operations, overwrite, createDirs } = args;
|
|
196
|
+
if (!checkRateLimit('file-operations', { maxRequests: 50, windowMs: 60000 })) {
|
|
197
|
+
return JSON.stringify({
|
|
198
|
+
success: false,
|
|
199
|
+
error: 'Rate limit exceeded for file operations',
|
|
200
|
+
code: 'RATE_LIMIT_EXCEEDED',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
const sessionCwd = args._sessionCwd;
|
|
204
|
+
const results = await Promise.all(operations.map((op) => copySingleFile(op.source, op.destination, overwrite, createDirs, sessionCwd)));
|
|
205
|
+
const successful = results.filter((r) => r.success);
|
|
206
|
+
const failed = results.filter((r) => !r.success);
|
|
207
|
+
return JSON.stringify({
|
|
208
|
+
success: failed.length === 0,
|
|
209
|
+
copied: successful.length,
|
|
210
|
+
failed: failed.length,
|
|
211
|
+
results,
|
|
212
|
+
});
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=file-copy.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-copy.tool.js","sourceRoot":"","sources":["../../../src/tools/file/file-copy.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
import { UnifiedTool } from '../registry.js';
|
|
19
|
+
export declare const fileDeleteTool: UnifiedTool;
|
|
20
|
+
//# sourceMappingURL=file-delete.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-delete.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/file/file-delete.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAkK7C,eAAO,MAAM,cAAc,EAAE,WAkC5B,CAAC"}
|