mcp-coder-utils 0.1.3__tar.gz → 0.1.4__tar.gz
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.
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/CLAUDE.md +19 -8
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/knowledge_base/refactoring_principles.md +1 -1
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/settings.local.json +46 -39
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/commit_push/SKILL.md +6 -10
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implement_direct/SKILL.md +2 -4
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_review/SKILL.md +7 -16
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_review_supervisor/SKILL.md +4 -4
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/issue_analyse/SKILL.md +4 -7
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/issue_approve/SKILL.md +2 -5
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/issue_create/SKILL.md +2 -5
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/issue_update/SKILL.md +5 -8
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/plan_review/SKILL.md +4 -8
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/plan_review_supervisor/SKILL.md +2 -2
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/rebase/SKILL.md +8 -18
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/rebase/rebase_design.md +6 -3
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.mcp.json +4 -4
- {mcp_coder_utils-0.1.3/src/mcp_coder_utils.egg-info → mcp_coder_utils-0.1.4}/PKG-INFO +2 -1
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/claude.bat +5 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/docs/architecture/architecture.md +5 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/pyproject.toml +2 -0
- mcp_coder_utils-0.1.4/src/mcp_coder_utils/__init__.py +10 -0
- mcp_coder_utils-0.1.4/src/mcp_coder_utils/fs/__init__.py +11 -0
- mcp_coder_utils-0.1.4/src/mcp_coder_utils/fs/path_security.py +36 -0
- mcp_coder_utils-0.1.4/src/mcp_coder_utils/fs/read_file.py +25 -0
- mcp_coder_utils-0.1.4/src/mcp_coder_utils/fs/text.py +18 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils/log_utils.py +155 -72
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils/subprocess_streaming.py +8 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4/src/mcp_coder_utils.egg-info}/PKG-INFO +2 -1
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils.egg-info/SOURCES.txt +7 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils.egg-info/requires.txt +1 -0
- mcp_coder_utils-0.1.4/tests/test_fs_path_security.py +53 -0
- mcp_coder_utils-0.1.4/tests/test_fs_read_file.py +40 -0
- mcp_coder_utils-0.1.4/tests/test_fs_text.py +28 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/test_log_utils.py +75 -1
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/test_subprocess_streaming.py +14 -0
- mcp_coder_utils-0.1.3/src/mcp_coder_utils/__init__.py +0 -1
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/agents/commit-pusher.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/knowledge_base/planning_principles.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/knowledge_base/python.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/knowledge_base/software_engineering_principles.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/check_branch_status/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/discuss/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_approve/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_finalise/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_needs_rework/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_new_tasks/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/issue_requirements/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/plan_approve/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/plan_update/SKILL.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.gitattributes +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.github/dependabot.yml +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.github/workflows/approve-command.yml +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.github/workflows/ci.yml +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.github/workflows/label-new-issues.yml +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.github/workflows/publish.yml +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.gitignore +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.importlinter +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.large-files-allowlist +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.python-version +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/LICENSE +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/README.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/claude_local.bat +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/setup.cfg +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils/py.typed +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils/redaction.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils/subprocess_runner.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils.egg-info/dependency_links.txt +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/src/mcp_coder_utils.egg-info/top_level.txt +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/__init__.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/test_redaction.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/test_subprocess_runner.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tests/test_subprocess_runner_real.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/todo_issues.md +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tools/read_github_deps.py +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tools/reinstall_local.bat +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tools/ruff_check.bat +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/tools/ruff_check.sh +0 -0
- {mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/vulture_whitelist.py +0 -0
|
@@ -13,7 +13,7 @@ When in doubt, keep it in the consumer until a second consumer needs it.
|
|
|
13
13
|
|
|
14
14
|
## MCP Tools — mandatory
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**Do NOT use native Claude Code file tools** (`Read`, `Write`, `Edit`, `Glob`, `Grep`, `Bash`) for any operation that has an MCP equivalent. Always use the `mcp__workspace__*` tools instead. This applies to all file reading, writing, editing, searching, listing, and git operations.
|
|
17
17
|
|
|
18
18
|
### Tool mapping
|
|
19
19
|
|
|
@@ -27,6 +27,7 @@ Use MCP tools for **all** operations. Never use `Read`, `Write`, `Edit`, or `Bas
|
|
|
27
27
|
| Move file | `mcp__workspace__move_file` |
|
|
28
28
|
| List directory | `mcp__workspace__list_directory` |
|
|
29
29
|
| Search files | `mcp__workspace__search_files` |
|
|
30
|
+
| Search reference files | `mcp__workspace__search_reference_files` |
|
|
30
31
|
| Read reference project | `mcp__workspace__read_reference_file` |
|
|
31
32
|
| List reference dir | `mcp__workspace__list_reference_directory` |
|
|
32
33
|
| Get reference projects | `mcp__workspace__get_reference_projects` |
|
|
@@ -38,12 +39,20 @@ Use MCP tools for **all** operations. Never use `Read`, `Write`, `Edit`, or `Bas
|
|
|
38
39
|
| Format code (black+isort) | `mcp__tools-py__run_format_code` |
|
|
39
40
|
| Get library source | `mcp__tools-py__get_library_source` |
|
|
40
41
|
| Refactoring | `mcp__tools-py__move_symbol`, `move_module`, `rename_symbol`, `list_symbols`, `find_references` |
|
|
42
|
+
| Git (read-only) | `mcp__workspace__git` |
|
|
43
|
+
| Get base branch | `mcp__workspace__get_base_branch` |
|
|
44
|
+
| Check file size | `mcp__workspace__check_file_size` |
|
|
45
|
+
| Check branch status | `mcp__workspace__check_branch_status` |
|
|
46
|
+
| List GitHub issues | `mcp__workspace__github_issue_list` |
|
|
47
|
+
| View GitHub issue | `mcp__workspace__github_issue_view` |
|
|
48
|
+
| View GitHub PR | `mcp__workspace__github_pr_view` |
|
|
49
|
+
| Search GitHub | `mcp__workspace__github_search` |
|
|
41
50
|
|
|
42
51
|
### Reference projects
|
|
43
52
|
|
|
44
53
|
Read-only browse via `mcp__workspace__read_reference_file`:
|
|
45
54
|
|
|
46
|
-
- `
|
|
55
|
+
- `p_coder` — `mcp_coder` source
|
|
47
56
|
- `p_workspace` — `mcp-workspace` source
|
|
48
57
|
- `p_config` — `mcp-config` source
|
|
49
58
|
- `p_tools` — `mcp-tools-py` source
|
|
@@ -64,17 +73,19 @@ All checks must pass before proceeding.
|
|
|
64
73
|
|
|
65
74
|
## Git operations
|
|
66
75
|
|
|
67
|
-
**
|
|
76
|
+
**Prefer MCP tools** for read-only git operations: use `mcp__workspace__git` with the `command` parameter (log, diff, status, merge_base, show, branch, fetch, rev_parse, ls_tree, ls_files, ls_remote). These run without permission prompts.
|
|
77
|
+
|
|
78
|
+
**Compact diff:** `mcp__workspace__git` with command `"diff"` includes compact diff by default — detects moved code, collapses unchanged blocks. Use `compact=False` for raw output.
|
|
79
|
+
|
|
80
|
+
**Bash commands** for git operations that have no MCP equivalent:
|
|
68
81
|
|
|
69
82
|
```
|
|
70
|
-
git
|
|
71
|
-
gh issue view / gh run view
|
|
72
|
-
mcp-coder git-tool compact-diff # diff that detects moves, collapses unchanged blocks
|
|
73
|
-
mcp-coder check branch-status # CI status, rebase needs, task completion, labels
|
|
74
|
-
mcp-coder check file-size # find files exceeding line-count threshold
|
|
83
|
+
git commit / git add
|
|
75
84
|
mcp-coder gh-tool set-status <label> # change issue workflow status label
|
|
76
85
|
```
|
|
77
86
|
|
|
87
|
+
**Status labels:** use `mcp-coder gh-tool set-status` to change issue workflow status — never use raw `gh issue edit` with label flags.
|
|
88
|
+
|
|
78
89
|
**Before every commit:** run `mcp__tools-py__run_format_code`, then stage and commit.
|
|
79
90
|
|
|
80
91
|
**Bash discipline:** no `cd` prefix. Don't chain approved with unapproved commands. Run them separately.
|
{mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/knowledge_base/refactoring_principles.md
RENAMED
|
@@ -15,7 +15,7 @@ Quick reference for refactoring rules and tools. For detailed process, examples,
|
|
|
15
15
|
1. Plan target structure
|
|
16
16
|
2. Move source code — `move_symbol` / `move_module`
|
|
17
17
|
3. Move tests to mirror new structure
|
|
18
|
-
4. Review diff — `
|
|
18
|
+
4. Review diff — `mcp__workspace__git_diff` (remaining diff should be imports only)
|
|
19
19
|
5. Run all checks — pytest, pylint, mypy, ruff
|
|
20
20
|
6. Check file sizes — `mcp-coder check file-size --max-lines 750`
|
|
21
21
|
|
|
@@ -1,30 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"permissions": {
|
|
3
3
|
"allow": [
|
|
4
|
-
"mcp__tools-py__run_pylint_check",
|
|
5
|
-
"mcp__tools-py__run_pytest_check",
|
|
6
|
-
"mcp__tools-py__run_mypy_check",
|
|
7
|
-
"mcp__workspace__get_reference_projects",
|
|
8
|
-
"mcp__workspace__list_reference_directory",
|
|
9
|
-
"mcp__workspace__read_reference_file",
|
|
10
|
-
"mcp__workspace__list_directory",
|
|
11
|
-
"mcp__workspace__read_file",
|
|
12
|
-
"mcp__workspace__save_file",
|
|
13
|
-
"mcp__workspace__append_file",
|
|
14
|
-
"mcp__workspace__delete_this_file",
|
|
15
|
-
"mcp__workspace__move_file",
|
|
16
|
-
"mcp__workspace__edit_file",
|
|
17
|
-
"Bash(git diff:*)",
|
|
18
|
-
"Bash(gh run view:*)",
|
|
19
|
-
"Bash(gh issue view:*)",
|
|
20
|
-
"Bash(./tools/tach_check.sh:*)",
|
|
21
|
-
"Bash(tach check:*)",
|
|
22
|
-
"Bash(start docs/architecture/dependency_graph.html)",
|
|
23
|
-
"Bash(./tools/pycycle_check.sh:*)",
|
|
24
|
-
"Bash(python -m pytest:*)",
|
|
25
4
|
"Bash(./tools/ruff_check.sh:*)",
|
|
5
|
+
"Bash(git checkout:*)",
|
|
6
|
+
"Bash(git pull:*)",
|
|
7
|
+
"Bash(mcp-coder gh-tool:*)",
|
|
8
|
+
"Bash(mcp-coder git-tool:*)",
|
|
9
|
+
"Bash(start docs/architecture/dependency_graph.html)",
|
|
10
|
+
"Skill(check_branch_status)",
|
|
26
11
|
"Skill(commit_push)",
|
|
27
12
|
"Skill(discuss)",
|
|
13
|
+
"Skill(implement_direct)",
|
|
28
14
|
"Skill(implementation_approve)",
|
|
29
15
|
"Skill(implementation_finalise)",
|
|
30
16
|
"Skill(implementation_needs_rework)",
|
|
@@ -34,37 +20,58 @@
|
|
|
34
20
|
"Skill(issue_analyse)",
|
|
35
21
|
"Skill(issue_approve)",
|
|
36
22
|
"Skill(issue_create)",
|
|
23
|
+
"Skill(issue_requirements)",
|
|
37
24
|
"Skill(issue_update)",
|
|
38
25
|
"Skill(plan_approve)",
|
|
39
26
|
"Skill(plan_review)",
|
|
40
27
|
"Skill(plan_review_supervisor)",
|
|
41
28
|
"Skill(plan_update)",
|
|
42
29
|
"Skill(rebase)",
|
|
43
|
-
"Bash(find:*)",
|
|
44
|
-
"Bash(git status:*)",
|
|
45
|
-
"Bash(git log:*)",
|
|
46
|
-
"Bash(git fetch:*)",
|
|
47
|
-
"Bash(mcp-coder check file-size:*)",
|
|
48
|
-
"Bash(mcp-coder check branch-status:*)",
|
|
49
|
-
"Skill(check_branch_status)",
|
|
50
|
-
"Skill(implement_direct)",
|
|
51
|
-
"Skill(issue_requirements)",
|
|
52
30
|
"WebFetch(domain:*)",
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
31
|
+
"mcp__obsidian-wiki__add-tags",
|
|
32
|
+
"mcp__obsidian-wiki__create-directory",
|
|
33
|
+
"mcp__obsidian-wiki__create-note",
|
|
34
|
+
"mcp__obsidian-wiki__delete-note",
|
|
35
|
+
"mcp__obsidian-wiki__edit-note",
|
|
36
|
+
"mcp__obsidian-wiki__list-available-vaults",
|
|
37
|
+
"mcp__obsidian-wiki__move-note",
|
|
38
|
+
"mcp__obsidian-wiki__read-note",
|
|
39
|
+
"mcp__obsidian-wiki__remove-tags",
|
|
40
|
+
"mcp__obsidian-wiki__rename-tag",
|
|
41
|
+
"mcp__obsidian-wiki__search-vault",
|
|
59
42
|
"mcp__tools-py__find_references",
|
|
43
|
+
"mcp__tools-py__get_library_source",
|
|
44
|
+
"mcp__tools-py__list_symbols",
|
|
45
|
+
"mcp__tools-py__move_module",
|
|
60
46
|
"mcp__tools-py__move_symbol",
|
|
61
47
|
"mcp__tools-py__rename_symbol",
|
|
62
|
-
"mcp__tools-py__move_module",
|
|
63
48
|
"mcp__tools-py__run_format_code",
|
|
64
49
|
"mcp__tools-py__run_lint_imports_check",
|
|
50
|
+
"mcp__tools-py__run_mypy_check",
|
|
51
|
+
"mcp__tools-py__run_pylint_check",
|
|
52
|
+
"mcp__tools-py__run_pytest_check",
|
|
53
|
+
"mcp__tools-py__run_ruff_check",
|
|
65
54
|
"mcp__tools-py__run_vulture_check",
|
|
66
|
-
"
|
|
67
|
-
"
|
|
55
|
+
"mcp__workspace__append_file",
|
|
56
|
+
"mcp__workspace__check_branch_status",
|
|
57
|
+
"mcp__workspace__check_file_size",
|
|
58
|
+
"mcp__workspace__delete_this_file",
|
|
59
|
+
"mcp__workspace__edit_file",
|
|
60
|
+
"mcp__workspace__get_base_branch",
|
|
61
|
+
"mcp__workspace__get_reference_projects",
|
|
62
|
+
"mcp__workspace__git",
|
|
63
|
+
"mcp__workspace__github_issue_list",
|
|
64
|
+
"mcp__workspace__github_issue_view",
|
|
65
|
+
"mcp__workspace__github_pr_view",
|
|
66
|
+
"mcp__workspace__github_search",
|
|
67
|
+
"mcp__workspace__list_directory",
|
|
68
|
+
"mcp__workspace__list_reference_directory",
|
|
69
|
+
"mcp__workspace__move_file",
|
|
70
|
+
"mcp__workspace__read_file",
|
|
71
|
+
"mcp__workspace__read_reference_file",
|
|
72
|
+
"mcp__workspace__save_file",
|
|
73
|
+
"mcp__workspace__search_files",
|
|
74
|
+
"mcp__workspace__search_reference_files"
|
|
68
75
|
]
|
|
69
76
|
},
|
|
70
77
|
"enableAllProjectMcpServers": true,
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
description: Format code, review changes, commit, and push to remote
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
6
|
-
- "Bash(git diff *)"
|
|
5
|
+
- mcp__workspace__git
|
|
7
6
|
- "Bash(git add *)"
|
|
8
7
|
- "Bash(git commit *)"
|
|
9
8
|
- "Bash(git push *)"
|
|
10
|
-
- "Bash(git log *)"
|
|
11
9
|
- mcp__tools-py__run_format_code
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
10
|
+
- mcp__workspace__read_file
|
|
11
|
+
- mcp__workspace__list_directory
|
|
12
|
+
- mcp__workspace__search_files
|
|
15
13
|
---
|
|
16
14
|
|
|
17
15
|
# Commit and Push Changes
|
|
@@ -22,10 +20,8 @@ Follow this process to commit and push your changes:
|
|
|
22
20
|
Use `mcp__tools-py__run_format_code` to format all code (black + isort).
|
|
23
21
|
|
|
24
22
|
## 2. Review Changes
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
git diff
|
|
28
|
-
```
|
|
23
|
+
Use `mcp__workspace__git` with command `"status"` to check working directory state.
|
|
24
|
+
Use `mcp__workspace__git` with command `"diff"` to review the changes.
|
|
29
25
|
|
|
30
26
|
## 3. Stage Changes
|
|
31
27
|
Stage all relevant changes (exclude any files that shouldn't be committed).
|
|
@@ -3,7 +3,7 @@ name: implement-direct
|
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
argument-hint: [issue-number]
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
6
|
+
- mcp__workspace__github_issue_view
|
|
7
7
|
- "Bash(mcp-coder gh-tool *)"
|
|
8
8
|
- mcp__workspace__read_file
|
|
9
9
|
- mcp__tools-py__run_format_code
|
|
@@ -23,9 +23,7 @@ If no issue number is provided:
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
25
25
|
1. **Fetch issue details**
|
|
26
|
-
|
|
27
|
-
gh issue view <issue_number>
|
|
28
|
-
```
|
|
26
|
+
Use `mcp__workspace__github_issue_view` to fetch the issue details.
|
|
29
27
|
Read the issue title, description, and acceptance criteria carefully.
|
|
30
28
|
|
|
31
29
|
2. **Checkout/create issue branch**
|
{mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/implementation_review/SKILL.md
RENAMED
|
@@ -2,25 +2,19 @@
|
|
|
2
2
|
description: Code review of implementation with compact diff analysis
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
- "Bash(git diff *)"
|
|
8
|
-
- "Bash(mcp-coder git-tool *)"
|
|
9
|
-
- "Bash(mcp-coder check branch-status *)"
|
|
5
|
+
- mcp__workspace__git
|
|
6
|
+
- mcp__workspace__check_branch_status
|
|
10
7
|
- mcp__workspace__read_file
|
|
11
8
|
- mcp__workspace__list_directory
|
|
12
|
-
-
|
|
13
|
-
- Grep
|
|
9
|
+
- mcp__workspace__search_files
|
|
14
10
|
---
|
|
15
11
|
|
|
16
12
|
# Implementation Review (Code Review)
|
|
17
13
|
|
|
18
14
|
**First, ensure we're up to date:**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
mcp-coder check branch-status --llm-truncate
|
|
23
|
-
```
|
|
15
|
+
Call `mcp__workspace__git` with command `"fetch"` and args `["origin"]`.
|
|
16
|
+
Use `mcp__workspace__git` with command `"status"` to check working directory state.
|
|
17
|
+
Call `mcp__workspace__check_branch_status`.
|
|
24
18
|
|
|
25
19
|
Confirm and display the current feature branch name.
|
|
26
20
|
|
|
@@ -30,10 +24,7 @@ Confirm and display the current feature branch name.
|
|
|
30
24
|
|
|
31
25
|
## Code Review Request
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
mcp-coder git-tool compact-diff
|
|
36
|
-
```
|
|
27
|
+
Use `mcp__workspace__git` with command `"diff"` to get the changes to review.
|
|
37
28
|
|
|
38
29
|
No need to run all checks; do not use pylint warnings. Feel free to further analyse any mentioned files and/or the file structure.
|
|
39
30
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
description: Autonomous code review — supervisor delegates to engineer subagents with knowledge base
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
5
|
+
- mcp__workspace__github_issue_view
|
|
6
|
+
- mcp__workspace__check_branch_status
|
|
7
|
+
- mcp__workspace__git
|
|
8
8
|
- mcp__workspace__read_file
|
|
9
9
|
- mcp__workspace__save_file
|
|
10
10
|
- mcp__workspace__edit_file
|
|
@@ -20,7 +20,7 @@ You are a technical lead supervising a software engineer (subagent). You do not
|
|
|
20
20
|
|
|
21
21
|
**Setup:**
|
|
22
22
|
|
|
23
|
-
1. Read the GitHub issue (`
|
|
23
|
+
1. Read the GitHub issue (call `mcp__workspace__github_issue_view` with the issue number from the branch name), `pr_info/steps/summary.md`, and `pr_info/steps/Decisions.md` (if it exists) to understand requirements and design decisions.
|
|
24
24
|
2. Read the knowledge base files:
|
|
25
25
|
- `.claude/knowledge_base/software_engineering_principles.md`
|
|
26
26
|
- `.claude/knowledge_base/python.md`
|
|
@@ -3,8 +3,8 @@ description: Analyse GitHub issue requirements, feasibility, and implementation
|
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
argument-hint: "<issue-number>"
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
6
|
+
- mcp__workspace__github_issue_view
|
|
7
|
+
- mcp__workspace__git
|
|
8
8
|
- mcp__workspace__read_file
|
|
9
9
|
- mcp__workspace__list_directory
|
|
10
10
|
---
|
|
@@ -20,10 +20,7 @@ If no issue number is provided:
|
|
|
20
20
|
1. Read `.vscodeclaude_status.txt` and extract the issue number from the `Issue #NNN` line
|
|
21
21
|
2. If the file doesn't exist or has no issue number, ask the user
|
|
22
22
|
|
|
23
|
-
Fetch the issue
|
|
24
|
-
```bash
|
|
25
|
-
gh issue view <issue_number>
|
|
26
|
-
```
|
|
23
|
+
Fetch the issue using `mcp__workspace__github_issue_view`.
|
|
27
24
|
|
|
28
25
|
## Instructions
|
|
29
26
|
|
|
@@ -46,7 +43,7 @@ During the discussion, actively identify constraints and rationale — the "why"
|
|
|
46
43
|
**Base Branch Handling:**
|
|
47
44
|
If the issue contains a `### Base Branch` section:
|
|
48
45
|
- Display the specified base branch prominently
|
|
49
|
-
- Verify the branch exists using
|
|
46
|
+
- Verify the branch exists using `mcp__workspace__git` with command `"ls_remote"` and args `["--heads", "origin", "<branch-name>"]`
|
|
50
47
|
- If the branch does NOT exist, show a clear warning:
|
|
51
48
|
"Warning: Base branch 'X' does not exist on remote. Branch creation will fail."
|
|
52
49
|
- Continue with the analysis (non-blocking error)
|
|
@@ -3,7 +3,7 @@ description: Approve issue to transition to next workflow status
|
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
argument-hint: "<issue-number>"
|
|
5
5
|
allowed-tools:
|
|
6
|
-
-
|
|
6
|
+
- mcp__workspace__github_issue_view
|
|
7
7
|
- "Bash(gh issue comment *)"
|
|
8
8
|
- "Bash(MSYS_NO_PATHCONV=1 gh issue comment *)"
|
|
9
9
|
- mcp__workspace__read_file
|
|
@@ -23,10 +23,7 @@ If no issue number is provided:
|
|
|
23
23
|
|
|
24
24
|
## Instructions
|
|
25
25
|
|
|
26
|
-
1. Fetch the issue to confirm it exists
|
|
27
|
-
```bash
|
|
28
|
-
gh issue view <issue_number>
|
|
29
|
-
```
|
|
26
|
+
1. Fetch the issue to confirm it exists using `mcp__workspace__github_issue_view`.
|
|
30
27
|
|
|
31
28
|
2. Validate that the issue is ready for approval:
|
|
32
29
|
- Issue has been analyzed/discussed
|
|
@@ -4,7 +4,7 @@ disable-model-invocation: true
|
|
|
4
4
|
argument-hint: "<title>"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- "Bash(gh issue create *)"
|
|
7
|
-
-
|
|
7
|
+
- mcp__workspace__git
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Create GitHub Issue
|
|
@@ -31,10 +31,7 @@ Use cases:
|
|
|
31
31
|
- Features building on existing work
|
|
32
32
|
- Long-running feature branches
|
|
33
33
|
|
|
34
|
-
**Important:** Before specifying a base branch, verify it exists
|
|
35
|
-
```bash
|
|
36
|
-
git ls-remote --heads origin <branch-name>
|
|
37
|
-
```
|
|
34
|
+
**Important:** Before specifying a base branch, verify it exists using `mcp__workspace__git` with command `"ls_remote"` and args `["--heads", "origin", "<branch-name>"]`.
|
|
38
35
|
|
|
39
36
|
If no base branch is needed, omit this section entirely.
|
|
40
37
|
|
|
@@ -4,12 +4,12 @@ disable-model-invocation: true
|
|
|
4
4
|
argument-hint: "<issue-number>"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- "Bash(gh issue edit *)"
|
|
7
|
-
-
|
|
7
|
+
- mcp__workspace__github_issue_view
|
|
8
8
|
- mcp__workspace__save_file
|
|
9
9
|
- mcp__workspace__delete_this_file
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
10
|
+
- mcp__workspace__read_file
|
|
11
|
+
- mcp__workspace__list_directory
|
|
12
|
+
- mcp__workspace__search_files
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# Update GitHub Issue
|
|
@@ -19,10 +19,7 @@ Based on our prior `/issue_analyse` discussion, update the GitHub issue with ref
|
|
|
19
19
|
**Instructions:**
|
|
20
20
|
1. If no issue context is found from prior analysis, respond: "No issue context found. Please run `/issue_analyse <number>` first."
|
|
21
21
|
|
|
22
|
-
2. First, fetch the current issue content
|
|
23
|
-
```bash
|
|
24
|
-
gh issue view <issue_number> --json title,body
|
|
25
|
-
```
|
|
22
|
+
2. First, fetch the current issue content using `mcp__workspace__github_issue_view`.
|
|
26
23
|
|
|
27
24
|
3. Draft updated issue text with:
|
|
28
25
|
- Clear, concise title
|
|
@@ -2,21 +2,17 @@
|
|
|
2
2
|
description: Review implementation plan for completeness, simplicity, and risks
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
6
|
-
- "Bash(git status *)"
|
|
5
|
+
- mcp__workspace__git
|
|
7
6
|
- mcp__workspace__read_file
|
|
8
7
|
- mcp__workspace__list_directory
|
|
9
|
-
-
|
|
10
|
-
- Grep
|
|
8
|
+
- mcp__workspace__search_files
|
|
11
9
|
---
|
|
12
10
|
|
|
13
11
|
# Review Implementation Plan
|
|
14
12
|
|
|
15
13
|
**First, ensure we're up to date:**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
git status
|
|
19
|
-
```
|
|
14
|
+
Call `mcp__workspace__git` with command `"fetch"` and args `["origin"]`.
|
|
15
|
+
Use `mcp__workspace__git` with command `"status"` to check working directory state.
|
|
20
16
|
|
|
21
17
|
Confirm and display the current feature branch name.
|
|
22
18
|
|
{mcp_coder_utils-0.1.3 → mcp_coder_utils-0.1.4}/.claude/skills/plan_review_supervisor/SKILL.md
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Autonomous plan review — supervisor delegates to engineer subagents
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
5
|
+
- mcp__workspace__github_issue_view
|
|
6
6
|
- mcp__workspace__read_file
|
|
7
7
|
- mcp__workspace__save_file
|
|
8
8
|
- mcp__workspace__edit_file
|
|
@@ -18,7 +18,7 @@ You are a technical lead supervising a software engineer (subagent). You do not
|
|
|
18
18
|
|
|
19
19
|
**Setup:**
|
|
20
20
|
|
|
21
|
-
1. Read the GitHub issue (
|
|
21
|
+
1. Read the GitHub issue (using `mcp__workspace__github_issue_view`), `pr_info/steps/summary.md`, and `pr_info/steps/Decisions.md` (if it exists) to understand requirements and design decisions.
|
|
22
22
|
2. Read the knowledge base files:
|
|
23
23
|
- `.claude/knowledge_base/software_engineering_principles.md`
|
|
24
24
|
- `.claude/knowledge_base/planning_principles.md`
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
description: Rebase feature branch onto base branch with conflict resolution
|
|
3
3
|
disable-model-invocation: true
|
|
4
4
|
allowed-tools:
|
|
5
|
-
-
|
|
6
|
-
- "Bash(git log *)"
|
|
7
|
-
- "Bash(git branch *)"
|
|
8
|
-
- "Bash(git ls-files *)"
|
|
9
|
-
- "Bash(git fetch *)"
|
|
5
|
+
- mcp__workspace__git
|
|
10
6
|
- "Bash(git rebase *)"
|
|
11
7
|
- "Bash(git add *)"
|
|
12
8
|
- "Bash(git rm *)"
|
|
@@ -17,12 +13,8 @@ allowed-tools:
|
|
|
17
13
|
- "Bash(git restore *)"
|
|
18
14
|
- "Bash(git stash *)"
|
|
19
15
|
- "Bash(git push --force-with-lease *)"
|
|
20
|
-
- "Bash(git diff *)"
|
|
21
|
-
- "Bash(git rev-parse *)"
|
|
22
|
-
- "Bash(gh run view *)"
|
|
23
|
-
- "Bash(gh issue view *)"
|
|
24
16
|
- mcp__tools-py__run_format_code
|
|
25
|
-
-
|
|
17
|
+
- mcp__workspace__get_base_branch
|
|
26
18
|
- mcp__tools-py__run_pylint_check
|
|
27
19
|
- mcp__tools-py__run_pytest_check
|
|
28
20
|
- mcp__tools-py__run_mypy_check
|
|
@@ -38,10 +30,12 @@ allowed-tools:
|
|
|
38
30
|
- mcp__workspace__move_file
|
|
39
31
|
---
|
|
40
32
|
|
|
41
|
-
!`git status`
|
|
42
|
-
|
|
43
33
|
# Rebase Branch onto Base Branch
|
|
44
34
|
|
|
35
|
+
## First Step
|
|
36
|
+
|
|
37
|
+
Call `mcp__workspace__git` with command `"status"` before doing anything else.
|
|
38
|
+
|
|
45
39
|
Rebase the current feature branch onto its base branch and resolve conflicts.
|
|
46
40
|
|
|
47
41
|
**Core philosophy:** Main is the source of truth. The feature branch adapts to main. For source code conflicts, preserve main's improvements and rework the feature branch code to fit.
|
|
@@ -52,11 +46,7 @@ If the rebase becomes complex, suggest switching to cherry-picking as an alterna
|
|
|
52
46
|
|
|
53
47
|
## Determine Base Branch
|
|
54
48
|
|
|
55
|
-
First, detect the correct base branch
|
|
56
|
-
```bash
|
|
57
|
-
BASE_BRANCH=$(mcp-coder gh-tool get-base-branch)
|
|
58
|
-
echo "Rebasing onto: $BASE_BRANCH"
|
|
59
|
-
```
|
|
49
|
+
First, detect the correct base branch using `mcp__workspace__get_base_branch`.
|
|
60
50
|
|
|
61
51
|
## Base Branch Confirmation
|
|
62
52
|
|
|
@@ -72,7 +62,7 @@ If the base branch is not `main` or `master`, ask the user to confirm before pro
|
|
|
72
62
|
|
|
73
63
|
## Workflow
|
|
74
64
|
|
|
75
|
-
1. `
|
|
65
|
+
1. Call `mcp__workspace__git` with command `"fetch"` and args `["origin"]`
|
|
76
66
|
2. `git rebase origin/${BASE_BRANCH}`
|
|
77
67
|
3. For each conflict:
|
|
78
68
|
- If file is under `pr_info/`: auto-resolve with `git checkout --theirs <file>` (keep feature branch version), then `git add <file>` — no user input needed
|
|
@@ -14,10 +14,13 @@ The slash command requires two sets of permissions in `allowed-tools`:
|
|
|
14
14
|
|
|
15
15
|
These are the additional git permissions needed specifically for rebase operations:
|
|
16
16
|
|
|
17
|
+
**MCP tools:**
|
|
18
|
+
- `mcp__workspace__git_status`
|
|
19
|
+
- `mcp__workspace__git_log`
|
|
20
|
+
|
|
21
|
+
**Bash commands:**
|
|
17
22
|
```
|
|
18
|
-
#
|
|
19
|
-
Bash(git status:*)
|
|
20
|
-
Bash(git log:*)
|
|
23
|
+
# Investigation
|
|
21
24
|
Bash(git branch:*)
|
|
22
25
|
Bash(git ls-files:*)
|
|
23
26
|
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"--log-level",
|
|
29
29
|
"INFO",
|
|
30
30
|
"--reference-project",
|
|
31
|
-
"
|
|
31
|
+
"name=p_coder,path=${USERPROFILE}\\Documents\\GitHub\\mcp_coder,url=https://github.com/MarcusJellinghaus/mcp_coder",
|
|
32
32
|
"--reference-project",
|
|
33
|
-
"p_workspace=${USERPROFILE}\\Documents\\GitHub\\mcp-workspace",
|
|
33
|
+
"name=p_workspace,path=${USERPROFILE}\\Documents\\GitHub\\mcp-workspace,url=https://github.com/MarcusJellinghaus/mcp-workspace",
|
|
34
34
|
"--reference-project",
|
|
35
|
-
"p_config=${USERPROFILE}\\Documents\\GitHub\\mcp-config",
|
|
35
|
+
"name=p_config,path=${USERPROFILE}\\Documents\\GitHub\\mcp-config,url=https://github.com/MarcusJellinghaus/mcp-config",
|
|
36
36
|
"--reference-project",
|
|
37
|
-
"p_tools=${USERPROFILE}\\Documents\\GitHub\\mcp-tools-py"
|
|
37
|
+
"name=p_tools,path=${USERPROFILE}\\Documents\\GitHub\\mcp-tools-py,url=https://github.com/MarcusJellinghaus/mcp-tools-py"
|
|
38
38
|
],
|
|
39
39
|
"env": {
|
|
40
40
|
"PYTHONPATH": "${MCP_CODER_VENV_DIR}\\Lib\\"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-coder-utils
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Shared low-level Python helpers (subprocess, logging, fs) for the mcp-coder family of repos
|
|
5
5
|
Author-email: Marcus Jellinghaus <Marcus@Jellinghaus.ch>
|
|
6
6
|
Project-URL: Homepage, https://github.com/MarcusJellinghaus/mcp-coder-utils
|
|
@@ -17,6 +17,7 @@ Requires-Dist: structlog>=23.2.0
|
|
|
17
17
|
Requires-Dist: python-json-logger>=3.3.0
|
|
18
18
|
Provides-Extra: test
|
|
19
19
|
Requires-Dist: pytest; extra == "test"
|
|
20
|
+
Requires-Dist: pytest-asyncio; extra == "test"
|
|
20
21
|
Requires-Dist: pytest-xdist; extra == "test"
|
|
21
22
|
Provides-Extra: dev
|
|
22
23
|
Requires-Dist: mcp-coder-utils[test]; extra == "dev"
|
|
@@ -90,3 +90,8 @@ echo Project dir: !MCP_CODER_PROJECT_DIR!
|
|
|
90
90
|
echo Venv dir: !MCP_CODER_VENV_DIR!
|
|
91
91
|
|
|
92
92
|
C:\Users\%USERNAME%\.local\bin\claude.exe %*
|
|
93
|
+
|
|
94
|
+
REM Reset terminal state after Claude exits (workaround for dirty terminal bug)
|
|
95
|
+
REM See https://github.com/anthropics/claude-code/issues/38761
|
|
96
|
+
for /f %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
|
|
97
|
+
<nul set /p="!ESC![?2004l!ESC![?1l!ESC![?25h!ESC![J"
|
|
@@ -25,6 +25,7 @@ dependencies = [
|
|
|
25
25
|
[project.optional-dependencies]
|
|
26
26
|
test = [
|
|
27
27
|
"pytest",
|
|
28
|
+
"pytest-asyncio",
|
|
28
29
|
"pytest-xdist",
|
|
29
30
|
]
|
|
30
31
|
|
|
@@ -60,6 +61,7 @@ where = ["src"]
|
|
|
60
61
|
[tool.pytest.ini_options]
|
|
61
62
|
testpaths = ["tests"]
|
|
62
63
|
pythonpath = ["src"]
|
|
64
|
+
asyncio_mode = "auto"
|
|
63
65
|
addopts = ["--strict-markers", "--tb=short", "-n", "auto"]
|
|
64
66
|
|
|
65
67
|
[tool.black]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Shared low-level Python helpers for the mcp-coder family of repos."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = version("mcp-coder-utils")
|
|
7
|
+
except PackageNotFoundError:
|
|
8
|
+
__version__ = "0.0.0.dev0"
|
|
9
|
+
|
|
10
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Filesystem helpers — encoding, line-endings, path security."""
|
|
2
|
+
|
|
3
|
+
from mcp_coder_utils.fs.path_security import normalize_path
|
|
4
|
+
from mcp_coder_utils.fs.read_file import read_file
|
|
5
|
+
from mcp_coder_utils.fs.text import normalize_line_endings
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"normalize_line_endings",
|
|
9
|
+
"normalize_path",
|
|
10
|
+
"read_file",
|
|
11
|
+
]
|