Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ae959db
fix: vendor bash-mcp-sdk v5.1.0 for exit-trap cleanup on shutdown
SpiGAndromeda Sep 14, 2026
0690d8a
feat(dev-tooling)!: resolve the project root per tool call
SpiGAndromeda Sep 14, 2026
503547e
test(dev-tooling): cover per-call project root resolution
SpiGAndromeda Sep 14, 2026
713f08e
fix(dev-tooling): resolve a relative output_file against the project …
SpiGAndromeda Sep 15, 2026
6fc3a3c
fix(dev-tooling): harden worktree root and path validation
SpiGAndromeda Sep 15, 2026
b401e31
fix(dev-tooling): disambiguate worktree refusals and harden the test …
SpiGAndromeda Sep 15, 2026
63b7d94
docs(dev-tooling): correct and destale the worktree documentation
SpiGAndromeda Sep 15, 2026
5fa3af7
fix(dev-tooling): resolve the scope six tools declared and ignored
SpiGAndromeda Sep 15, 2026
a8efbb9
fix(dev-tooling)!: refuse a tool call carrying an undeclared parameter
SpiGAndromeda Sep 15, 2026
38f6267
refactor(dev-tooling): share the server tail, make cleanup public
SpiGAndromeda Sep 15, 2026
fe4b67e
docs(dev-tooling): record this branch's behavior changes
SpiGAndromeda Sep 15, 2026
52dc569
chore(dev-tooling): release 4.0.0
SpiGAndromeda Sep 14, 2026
f505c31
feat(dev-tooling): add environment-side path mapping for per-call roots
SpiGAndromeda Sep 16, 2026
0614a41
feat(dev-tooling)!: target worktrees in every environment
SpiGAndromeda Sep 16, 2026
13fc1de
docs(dev-tooling): describe worktree targeting for all five environments
SpiGAndromeda Sep 16, 2026
79b2309
chore(shopware-env): release 1.4.0
SpiGAndromeda Sep 16, 2026
895158b
fix(dev-tooling): accept worktrees with relative gitdir back-pointers
SpiGAndromeda Sep 16, 2026
75975e4
feat(dev-tooling): add worktree_prepare for dependency provisioning
SpiGAndromeda Sep 16, 2026
1b7ddf1
fix(dev-tooling): complete the admin jest provisioning guidance
SpiGAndromeda Sep 16, 2026
887f398
fix(dev-tooling): refuse unknown environments and rekey the probe cache
SpiGAndromeda Sep 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .mcp-sdk.lock
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version=v3.0.0
sha256=3fc8bc7a58fec1a7e9df1fff64d6f022fd14d9561b1faf82bf4e464e70637e46
version=v5.1.0
sha256=6a4d91bf16569555d988ceb3c2e32c45f519ac853c96fa225f387df367126fd6
27 changes: 17 additions & 10 deletions plugin-tests/dev-tooling/mcp_tool_console.bats
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ setup() {
}

teardown() {
unset LINT_ENV LINT_WORKDIR LINT_CONFIG_FILE CONSOLE_FAKE_CMD
worktree_state_cleanup
unset LINT_ENV LINT_WORKDIR LINT_CONFIG_FILE CONSOLE_FAKE_CMD PROJECT_ROOT DEV_TOOLING_STATE_FILE
}

# Replace the wrapped invocation with a controlled shell snippet, so the
Expand Down Expand Up @@ -227,7 +228,7 @@ bats_test_function --description "console: option name containing a line break i
@test "console: malformed top-level JSON is refused rather than defaulting silently" {
run tool_console_run '{not valid json'
assert_failure
assert_output --partial "Refusing to run: could not parse arguments as JSON"
assert_output --partial 'Refusing to run: the tool call'"'"'s own arguments do not parse as a JSON object, so "project_root" could not be read from them.'
}

# --- output_file: stdout captured to a file ---
Expand Down Expand Up @@ -334,8 +335,13 @@ bats_test_function --description "console: option name containing a line break i
assert_output --partial "\"${target}\" exists as a directory"
}

@test "console: a relative output_file resolves against the working directory" {
cd "${BATS_TEST_TMPDIR}"
# Both tests below run from a directory that is NOT the project root, because
# that is the only arrangement that tells the documented contract ("a relative
# path resolves against the project root") from resolving against $PWD. With
# the two directories equal, either implementation passes.
@test "console: a relative output_file resolves against the project root" {
mkdir -p "${BATS_TEST_TMPDIR}/elsewhere"
cd "${BATS_TEST_TMPDIR}/elsewhere"
_stub_wrapped_command 'printf "ok\n"'
run tool_console_run '{"command":"debug:container","output_file":"nested/dump.txt"}'
assert_success
Expand All @@ -344,8 +350,9 @@ bats_test_function --description "console: option name containing a line break i
assert_output "ok"
}

@test "console: an output_file beginning with a dash is pinned to the working directory" {
cd "${BATS_TEST_TMPDIR}"
@test "console: an output_file beginning with a dash is pinned to the project root" {
mkdir -p "${BATS_TEST_TMPDIR}/elsewhere"
cd "${BATS_TEST_TMPDIR}/elsewhere"
_stub_wrapped_command 'printf "ok\n"'
run tool_console_run '{"command":"debug:container","output_file":"-dash.txt"}'
assert_success
Expand Down Expand Up @@ -374,7 +381,7 @@ bats_test_function --description "console: option name containing a line break i
@test "console: an empty output_file behaves as an absent parameter" {
run tool_console_run '{"command":"cache:clear","output_file":""}'
assert_success
assert_output 'bin/console "cache:clear"'
assert_line 'bin/console "cache:clear"'
}

@test "console: env and output_file compose in one call" {
Expand Down Expand Up @@ -409,7 +416,7 @@ _stub_compose_resolution() {
LINT_ENV="native"
run tool_console_run '{"command":"cache:clear","feature_all":"major"}'
assert_success
assert_output 'FEATURE_ALL=major bin/console "cache:clear"'
assert_line 'FEATURE_ALL=major bin/console "cache:clear"'
}

@test "console: feature_all opens the containerized command under docker-compose" {
Expand All @@ -426,7 +433,7 @@ _stub_compose_resolution() {
LINT_ENV="native"
run tool_console_run '{"command":"cache:clear"}'
assert_success
assert_output 'bin/console "cache:clear"'
assert_line 'bin/console "cache:clear"'
}

@test "console: feature_all value outside the enum is refused by the tool" {
Expand Down Expand Up @@ -480,5 +487,5 @@ _stub_compose_resolution() {
@test "console list: malformed top-level JSON is refused rather than defaulting silently" {
run tool_console_list '{not valid json'
assert_failure
assert_output --partial "Refusing to run: could not parse arguments as JSON"
assert_output --partial 'Refusing to run: the tool call'"'"'s own arguments do not parse as a JSON object, so "project_root" could not be read from them.'
}
5 changes: 3 additions & 2 deletions plugin-tests/dev-tooling/mcp_tool_ecs.bats
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ setup() {
}

teardown() {
unset LINT_ENV LINT_WORKDIR LINT_CONFIG_FILE
worktree_state_cleanup
unset LINT_ENV LINT_WORKDIR LINT_CONFIG_FILE PROJECT_ROOT DEV_TOOLING_STATE_FILE
}

@test "ecs: check uses composer ecs" {
Expand Down Expand Up @@ -138,7 +139,7 @@ ecs_refuses_malformed_json() {
local tool="$1"
run "${tool}" '{not valid json'
assert_failure
assert_output --partial "Refusing to run: could not parse arguments as JSON"
assert_output --partial 'Refusing to run: the tool call'"'"'s own arguments do not parse as a JSON object, so "project_root" could not be read from them.'
}

bats_test_function --description "ecs: check malformed top-level JSON is refused rather than defaulting silently" \
Expand Down
Loading
Loading