Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
43c62d5
Cleanup
MelbourneDeveloper Feb 9, 2026
4962a2a
Revert stuff
MelbourneDeveloper Feb 9, 2026
b0c9f80
Make it faster
MelbourneDeveloper Feb 9, 2026
5651581
Get test coverage up
MelbourneDeveloper Feb 9, 2026
52f8092
Fix tree hierarchy
MelbourneDeveloper Feb 23, 2026
6cc85f4
Fixed?
MelbourneDeveloper Feb 23, 2026
d5a9dd6
Refactor tree nodes
MelbourneDeveloper Feb 23, 2026
884bb2d
Remove the root folder
MelbourneDeveloper Feb 23, 2026
fee1e3a
Further refactoring
MelbourneDeveloper Feb 23, 2026
15e07b1
Fix tests
MelbourneDeveloper Feb 24, 2026
c2956de
restore descriptions
MelbourneDeveloper Feb 24, 2026
fad1532
Stuff
MelbourneDeveloper Mar 25, 2026
f4eafa6
make file and format
MelbourneDeveloper Mar 25, 2026
616eb62
Fixes
MelbourneDeveloper Mar 25, 2026
4b287b5
Fixes
MelbourneDeveloper Mar 25, 2026
e1bfcce
Stuff
MelbourneDeveloper Mar 25, 2026
095110a
Format
MelbourneDeveloper Mar 25, 2026
8044f9d
fixes
MelbourneDeveloper Mar 25, 2026
7e97187
Settings
MelbourneDeveloper Mar 25, 2026
ad78503
Fixes
MelbourneDeveloper Mar 25, 2026
80e1444
Fixes
MelbourneDeveloper Mar 25, 2026
5e4de81
Add Rust LSP server spec and implementation plan
MelbourneDeveloper Mar 25, 2026
5c9b5d4
fixes
MelbourneDeveloper Mar 25, 2026
bb5242b
Exclude Copilot-dependent tests from CI and add ci Makefile target
MelbourneDeveloper Mar 25, 2026
3a42bae
Add Rust LSP server spec and implementation plan
MelbourneDeveloper Mar 25, 2026
3776801
fixes
MelbourneDeveloper Mar 25, 2026
d821107
Exclude Copilot-dependent tests from CI and add ci Makefile target
MelbourneDeveloper Mar 25, 2026
199f100
Fixes
MelbourneDeveloper Mar 26, 2026
720465a
Fix coverage check
MelbourneDeveloper Mar 26, 2026
8e7fbef
fixes
MelbourneDeveloper Mar 26, 2026
1e1b57e
Fixes
MelbourneDeveloper Mar 26, 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
25 changes: 25 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"permissions": {
"allow": [
"Bash(git push:*)",
"WebFetch(domain:code.visualstudio.com)",
"mcp__too-many-cooks__lock",
"Bash(npm run compile:*)",
"Bash(node -e:*)",
"Bash(npx tsc:*)",
"Bash(npm run lint:*)",
"mcp__too-many-cooks__message",
"mcp__too-many-cooks__register",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(find /Users/christianfindlay/Documents/Code/tmc/too-many-cooks -name test*.sh -o -name *test.sh)",
"mcp__too-many-cooks__plan",
"Bash(npm ci:*)",
"Bash(npm run:*)",
"Bash(npx cspell:*)",
"Bash(gh pr:*)",
"Bash(gh run:*)"
]
},
"autoMemoryEnabled": false
}
62 changes: 62 additions & 0 deletions .claude/skills/ci-prep/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
name: ci-prep
description: Prepare the codebase for CI. Reads the CI workflow, builds a checklist, then loops through format/lint/build/test/coverage until every single check passes. Use before submitting a PR or when the user wants to ensure CI will pass.
argument-hint: "[optional focus area]"
allowed-tools: Read, Grep, Glob, Edit, Write, Bash
---

# CI Prep — Get the Codebase PR-Ready

You MUST NOT STOP until every check passes and coverage threshold is met.

## Step 1: Read the CI Pipeline and Build Your Checklist

Read the CI workflow file:

```bash
cat .github/workflows/ci.yml
```

Parse EVERY step in the workflow. Extract the exact commands CI runs. Build yourself a numbered checklist of every check you need to pass. This is YOUR checklist — derived from the actual CI config, not from assumptions. The CI pipeline changes over time so you MUST read it fresh and build your list from what you find.

## Step 2: Coordinate with Other Agents

You are likely working alongside other agents who are editing files concurrently. Before making changes:

1. Check TMC status and messages for active agents and locked files
2. Do NOT edit files that are locked by other agents
3. Lock files before editing them yourself
4. Communicate what you are doing via TMC broadcasts
5. After each fix cycle, check TMC again — another agent may have broken something

## Step 3: The Loop

Run through your checklist from Step 1 in order. For each check:

1. Run the exact command from CI
2. If it passes, move to the next check
3. If it fails, FIX IT. Do NOT suppress warnings, ignore errors, remove assertions, or lower thresholds. Fix the actual code.
4. Re-run that check to confirm the fix works
5. Move to the next check

When you reach the end of the checklist, GO BACK TO THE START AND RUN THE ENTIRE CHECKLIST AGAIN. Other agents are working concurrently and may have broken something you already fixed. A fix for one check may have broken an earlier check.

**Keep looping through the full checklist until you get a COMPLETE CLEAN RUN with ZERO failures from start to finish.** One clean pass is not enough if you fixed anything during that pass — you need a clean pass where NOTHING needed fixing.

Do NOT stop after one loop. Do NOT stop after two loops. Keep going until a full pass completes with every single check green on the first try.

## Step 4: Final Coordination

1. Broadcast on TMC that CI prep is complete and all checks pass
2. Release any locks you hold
3. Report the final status to the user with the output of each passing check

## Rules

- NEVER stop with failing checks. Loop until everything is green.
- NEVER suppress lint warnings, skip tests, or lower coverage thresholds.
- NEVER remove assertions to make tests pass.
- Fix the CODE, not the checks.
- If you are stuck on a failure after 3 attempts on the same issue, ask the user for help. Do NOT silently give up.
- Always coordinate with other agents via TMC. Check for messages regularly.
- Leave the codebase in a state that will pass CI on the first try.
66 changes: 66 additions & 0 deletions .claude/skills/fix-bug/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
name: fix-bug
description: Fix a bug using test-driven development. Use when the user reports a bug, describes unexpected behavior, wants to fix a defect, or says something is broken. Enforces a strict test-first workflow where a failing test must be written and verified before any fix is attempted.
argument-hint: "[bug description]"
allowed-tools: Read, Grep, Glob, Edit, Write, Bash
---

# Bug Fix Skill — Test-First Workflow

You MUST follow this exact workflow. Do NOT skip steps. Do NOT fix the bug before writing a failing test.

## Step 1: Understand the Bug

- Read the bug description: $ARGUMENTS
- Investigate the codebase to understand the relevant code
- Identify the root cause (or narrow down candidates)
- Summarize your understanding of the bug to the user before proceeding

## Step 2: Write a Failing Test

- Write a test that **directly exercises the buggy behavior**
- The test must assert the **correct/expected** behavior — so it FAILS against the current broken code
- The test name should clearly describe the bug (e.g., `test_orange_color_not_applied_to_head`)
- Use the project's existing test framework and conventions

## Step 3: Run the Test — Confirm It FAILS

- Run ONLY the new test (not the full suite)
- **Verify the test FAILS** and that it fails **because of the bug**, not for some other reason (typo, import error, wrong selector, etc.)
- If the test passes: your test does not capture the bug. Go back to Step 2
- If the test fails for the wrong reason: fix the test, not the code. Go back to Step 2
- **Repeat until the test fails specifically because of the bug**

## Step 4: Show Failure to User

- Show the user the test code and the failure output
- Explicitly ask: "This test fails because of the bug. Can you confirm this captures the issue before I fix it?"
- **STOP and WAIT for user acknowledgment before proceeding**
- Do NOT continue to Step 5 until the user confirms

## Step 5: Fix the Bug

- Make the **minimum change** needed to fix the bug
- Do not refactor, clean up, or "improve" surrounding code
- Do not change the test

## Step 6: Run the Test — Confirm It PASSES

- Run the new test again
- **Verify it PASSES**
- If it fails: go back to Step 5 and adjust the fix
- **Repeat until the test passes**

## Step 7: Run the Full Test Suite

- Run ALL tests to make sure nothing else broke
- If other tests fail: fix the regression without breaking the new test
- Report the final result to the user

## Rules

- NEVER fix the bug before the failing test is written and confirmed
- NEVER skip asking the user to acknowledge the test failure
- NEVER modify the test to make it pass — modify the source code
- If you cannot write a test for the bug, explain why and ask the user how to proceed
- Keep the fix minimal — one bug, one fix, one test
10 changes: 8 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ jobs:

- run: npm ci

- name: Format check
run: npm run format:check

- name: Lint
run: npm run lint

Expand All @@ -31,8 +34,11 @@ jobs:
- name: Unit tests
run: npm run test:unit

- name: E2E tests
run: xvfb-run -a npm run test:e2e
- name: E2E tests with coverage
run: xvfb-run -a npx vscode-test --coverage --grep @exclude-ci --invert

- name: Coverage threshold (90%)
run: npm run coverage:check

website:
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ src/test/fixtures/workspace/.vscode/tasktree.json
website/_site/

.commandtree/

logs/
3 changes: 3 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"mcpServers": {}
}
7 changes: 7 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "es5",
"tabWidth": 2,
"printWidth": 120
}
39 changes: 23 additions & 16 deletions .vscode-test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,31 @@ cpSync('./src/test/fixtures/workspace', testWorkspace, { recursive: true });
const userDataDir = resolve(__dirname, '.vscode-test/user-data');

export default defineConfig({
files: ['out/test/e2e/**/*.test.js', 'out/test/providers/**/*.test.js'],
version: 'stable',
workspaceFolder: testWorkspace,
extensionDevelopmentPath: './',
mocha: {
ui: 'tdd',
timeout: 60000,
color: true,
slow: 10000
},
launchArgs: [
'--disable-gpu',
'--user-data-dir', userDataDir
],
tests: [{
files: ['out/test/e2e/**/*.test.js', 'out/test/providers/**/*.test.js'],
version: 'stable',
workspaceFolder: testWorkspace,
extensionDevelopmentPath: './',
mocha: {
ui: 'tdd',
timeout: 60000,
color: true,
slow: 10000
},
launchArgs: [
'--disable-gpu',
'--user-data-dir', userDataDir
]
}],
coverage: {
include: ['out/**/*.js'],
exclude: ['out/test/**/*.js'],
reporter: ['text', 'lcov', 'html'],
exclude: [
'out/test/**/*.js',
'out/semantic/summariser.js', // requires Copilot auth, not available in CI
'out/semantic/summaryPipeline.js', // requires Copilot auth, not available in CI
'out/semantic/vscodeAdapters.js', // requires Copilot auth, not available in CI
],
reporter: ['text', 'lcov', 'html', 'json-summary'],
output: './coverage'
}
});
45 changes: 37 additions & 8 deletions Agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ You are working with many other agents. Make sure there is effective cooperation

- **Zero duplication - TOP PRIORITY** - Always search for existing code before adding. Move; don't copy files. Add assertions to tests rather than duplicating tests. AIM FOR LESS CODE!
- **No string literals** - Named constants only, and it ONE location
- DO NOT USE GIT
- **Functional style** - Prefer pure functions, avoid classes where possible
- **No suppressing warnings** - Fix them properly
- **No REGEX** It is absolutely ⛔️ illegal
- **No REGEX** It is absolutely ⛔️ illegal, and no text matching in general
- **Don't run long runnings tasks** like docker builds, tests. Ask the user to do it!!
- **Expressions over assignments** - Prefer const and immutable patterns
- **Named parameters** - Use object params for functions with 3+ args
Expand All @@ -23,6 +24,8 @@ You are working with many other agents. Make sure there is effective cooperation

### Typescript
- **TypeScript strict mode** - No `any`, no implicit types, turn all lints up to error
- **Regularly run the linter** - Fix lint errors IMMEDIATELY
- **Decouple providers from the VSCODE SDK** - No vscode sdk use within the providers
- **Ignoring lints = ⛔️ illegal** - Fix violations immediately
- **No throwing** - Only return `Result<T,E>`

Expand All @@ -36,7 +39,6 @@ You are working with many other agents. Make sure there is effective cooperation

#### Rules
- **Prefer e2e tests over unit tests** - only unit tests for isolating bugs
- DO NOT USE GIT
- Separate e2e tests from unit tests by file. They should not be in the same file together.
- Prefer adding assertions to existing tests rather than adding new tests
- Test files in `src/test/suite/*.test.ts`
Expand Down Expand Up @@ -96,8 +98,21 @@ assert.ok(true, 'Command ran');

## Critical Docs

### Vscode SDK
[VSCode Extension API](https://code.visualstudio.com/api/)
[SCode Extension Testing API](https://code.visualstudio.com/api/extension-guides/testing)
[VSCode Extension Testing API](https://code.visualstudio.com/api/extension-guides/testing)
[VSCODE Language Model API](https://code.visualstudio.com/api/extension-guides/ai/language-model)
[Language Model Tool API](https://code.visualstudio.com/api/extension-guides/ai/tools)
[AI extensibility in VS Cod](https://code.visualstudio.com/api/extension-guides/ai/ai-extensibility-overview)
[AI language models in VS Code](https://code.visualstudio.com/docs/copilot/customization/language-models)

### Website

https://developers.google.com/search/blog/2025/05/succeeding-in-ai-search
https://developers.google.com/search/docs/fundamentals/seo-starter-guide

https://studiohawk.com.au/blog/how-to-optimise-ai-overviews/
https://about.ads.microsoft.com/en/blog/post/october-2025/optimizing-your-content-for-inclusion-in-ai-search-answers

## Project Structure

Expand All @@ -110,11 +125,25 @@ CommandTree/
│ │ └── TagConfig.ts # Tag configuration from commandtree.json
│ ├── discovery/
│ │ ├── index.ts # Discovery orchestration
│ │ ├── shell.ts # Shell script discovery
│ │ ├── npm.ts # NPM script discovery
│ │ ├── make.ts # Makefile target discovery
│ │ ├── launch.ts # launch.json discovery
│ │ └── tasks.ts # tasks.json discovery
│ │ ├── shell.ts # Shell scripts (.sh, .bash, .zsh)
│ │ ├── npm.ts # NPM scripts (package.json)
│ │ ├── make.ts # Makefile targets
│ │ ├── launch.ts # VS Code launch configs
│ │ ├── tasks.ts # VS Code tasks
│ │ ├── python.ts # Python scripts (.py)
│ │ ├── powershell.ts # PowerShell scripts (.ps1)
│ │ ├── gradle.ts # Gradle tasks
│ │ ├── cargo.ts # Cargo (Rust) tasks
│ │ ├── maven.ts # Maven goals (pom.xml)
│ │ ├── ant.ts # Ant targets (build.xml)
│ │ ├── just.ts # Just recipes (justfile)
│ │ ├── taskfile.ts # Taskfile tasks (Taskfile.yml)
│ │ ├── deno.ts # Deno tasks (deno.json)
│ │ ├── rake.ts # Rake tasks (Rakefile)
│ │ ├── composer.ts # Composer scripts (composer.json)
│ │ ├── docker.ts # Docker Compose services
│ │ ├── dotnet.ts # .NET projects (.csproj)
│ │ └── markdown.ts # Markdown files (.md)
│ ├── models/
│ │ └── TaskItem.ts # Task data model and TreeItem
│ ├── runners/
Expand Down
6 changes: 4 additions & 2 deletions Claude.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ You are working with many other agents. Make sure there is effective cooperation
- DO NOT USE GIT
- **Functional style** - Prefer pure functions, avoid classes where possible
- **No suppressing warnings** - Fix them properly
- **No REGEX** It is absolutely ⛔️ illegal, and no text matching in general
- **Don't run long runnings tasks** like docker builds, tests. Ask the user to do it!!
- Text matching (including Regex) is illegal. Use a proper parser/treesitter. If text matching is absolutely necessary, prefer Regex
- **Expressions over assignments** - Prefer const and immutable patterns
- **Named parameters** - Use object params for functions with 3+ args
- **Keep files under 450 LOC and functions under 20 LOC**
- **No commented-out code** - Delete it
- **No placeholders** - If incomplete, leave LOUD compilation error with TODO

### Typescript
- **CENTRALIZE global state** Keep it in one type/file.
- **TypeScript strict mode** - No `any`, no implicit types, turn all lints up to error
- **Regularly run the linter** - Fix lint errors IMMEDIATELY
- **Decouple providers from the VSCODE SDK** - No vscode sdk use within the providers
Expand All @@ -40,6 +40,8 @@ You are working with many other agents. Make sure there is effective cooperation
#### Rules
- **Prefer e2e tests over unit tests** - only unit tests for isolating bugs
- Separate e2e tests from unit tests by file. They should not be in the same file together.
- Tests must prove USER INTERACTIONS work
- E2E tests should have multiple user interactions each and loads of assertions
- Prefer adding assertions to existing tests rather than adding new tests
- Test files in `src/test/suite/*.test.ts`
- Run tests: `npm test`
Expand Down
Loading
Loading