Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build/
node_modules/
12 changes: 12 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"env": {
"node": true,
"es2022": true
},
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
},
"extends": ["eslint:recommended"],
"rules": {}
}
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ jobs:
fi

# Verify build succeeded (postgenerate hook builds automatically)
if [ ! -f "build/build/index.js" ]; then
echo "❌ Build failed - build/build/index.js not found"
if [ ! -f "build/dist/index.js" ]; then
echo "❌ Build failed - build/dist/index.js not found"
exit 1
fi

Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/generate-windmill-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ jobs:
echo "📥 Fetching OpenAPI spec from running Windmill instance..."

# Ensure cache directory exists
mkdir -p generator/cache
mkdir -p cache

# Fetch from local Windmill instance
curl -f http://localhost:8000/api/openapi.json -o generator/cache/openapi-spec.json
curl -f http://localhost:8000/api/openapi.json -o cache/openapi-spec.json

# Extract version from spec
SPEC_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('generator/cache/openapi-spec.json', 'utf8')).info.version")
SPEC_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('cache/openapi-spec.json', 'utf8')).info.version")
echo "spec_version=$SPEC_VERSION" >> $GITHUB_OUTPUT
echo "✅ Fetched OpenAPI spec version: $SPEC_VERSION"

Expand All @@ -71,8 +71,8 @@ jobs:
fi

# Verify build succeeded (postgenerate hook builds automatically)
if [ ! -f "build/build/index.js" ]; then
echo "❌ Build failed - build/build/index.js not found"
if [ ! -f "build/dist/index.js" ]; then
echo "❌ Build failed - build/dist/index.js not found"
exit 1
fi

Expand Down Expand Up @@ -218,7 +218,7 @@ jobs:
Generated by workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
files: |
generated-mcp-server.tar.gz
generator/cache/openapi-spec.json
cache/openapi-spec.json
draft: false
prerelease: false
make_latest: ${{ github.event.inputs.windmill_version == 'latest' || github.event_name == 'schedule' }}
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/rebuild-all-versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,14 @@ jobs:
echo "📥 Fetching OpenAPI spec for Windmill ${{ matrix.version }}..."

# Ensure cache directory exists
mkdir -p generator/cache
mkdir -p cache

# Fetch from local Windmill instance
# Note: In reality, we'd need a way to fetch specific version specs
# For now, we use the running instance
curl -f http://localhost:8000/api/openapi.json -o generator/cache/openapi-spec.json
curl -f http://localhost:8000/api/openapi.json -o cache/openapi-spec.json

SPEC_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('generator/cache/openapi-spec.json', 'utf8')).info.version")
SPEC_VERSION=$(node -p "JSON.parse(require('fs').readFileSync('cache/openapi-spec.json', 'utf8')).info.version")
echo "spec_version=$SPEC_VERSION" >> $GITHUB_OUTPUT
echo "✅ Fetched OpenAPI spec version: $SPEC_VERSION"

Expand All @@ -108,8 +108,8 @@ jobs:
fi

# Verify build succeeded (postgenerate hook builds automatically)
if [ ! -f "build/build/index.js" ]; then
echo "❌ Build failed - build/build/index.js not found"
if [ ! -f "build/dist/index.js" ]; then
echo "❌ Build failed - build/dist/index.js not found"
exit 1
fi

Expand All @@ -127,7 +127,7 @@ jobs:
env:
E2E_WINDMILL_URL: http://localhost:8000
E2E_WINDMILL_TOKEN: test-super-secret
E2E_WORKSPACE: demo
E2E_WORKSPACE: admins
WINDMILL_BASE_URL: http://localhost:8000
run: |
echo "🧪 Running E2E tests..."
Expand Down Expand Up @@ -195,7 +195,7 @@ jobs:
Generated by workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
files: |
generated-mcp-server.tar.gz
generator/cache/openapi-spec.json
cache/openapi-spec.json
draft: false
prerelease: false

Expand Down
9 changes: 7 additions & 2 deletions .ls-lint.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
ls:
# Root directory - specific uppercase files allowed
.js: regex:^vitest\.config$
.json: regex:^package$
.json: regex:^(package|\.eslintrc)$
.yml: regex:^\.ls-lint$
.md: regex:^(README|CHANGELOG|CONTRIBUTING|PROJECT_STATUS|AGENTS)$
.example: regex:^\.env$
.ignore: regex:^(\.gitignore|\.npmignore)$
.ignore: regex:^(\.gitignore|\.npmignore|\.eslintignore)$
.dir: regex:^([a-z][a-z0-9-]*|\.github|\.husky)$ # kebab-case or conventional dot-directories

# Scripts directory
scripts:
.js: kebab-case

# GitHub workflows
.github/workflows:
.yml: kebab-case
Expand Down Expand Up @@ -48,3 +52,4 @@ ignore:
- .env.local
- package-lock.json
- npm-debug.log
- .opencode # OpenCode configuration (user-specific)
16 changes: 8 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ This project uses AI agents to assist with development, maintenance, and testing

**Key Files**:

- `generator/config.json`
- `generator/fetch-spec.js`
- `generator/generate.js`
- `overrides/apply-overrides.js`
- `src/generator/config.json`
- `src/generator/fetch-spec.js`
- `src/generator/generate.js`
- `src/overrides/apply-overrides.js`

**Commands**:

Expand All @@ -48,7 +48,7 @@ The `npm run generate` command executes a complete workflow:
3. **Post-generation** (`postgenerate` hook):
- Applies custom overrides from `overrides/`
- Installs dependencies in `build/`
- Compiles TypeScript to `build/build/index.js`
- Compiles TypeScript to `build/dist/index.js`

**Output Structure**:

Expand All @@ -64,7 +64,7 @@ build/

**Troubleshooting**:

- If build fails, check `build/build/index.js` exists after generation
- If build fails, check `build/dist/index.js` exists after generation
- Generated code location changed from `src/` to `build/` in recent updates
- The complete workflow is now atomic - no need to manually build after generation

Expand Down Expand Up @@ -286,9 +286,9 @@ RUN_TESTS_ON_GENERATE=true

Store in respective config files:

- Generator: `generator/config.json`
- Generator: `src/generator/config.json`
- Testing: `tests/config.json`
- Overrides: `overrides/config.json`
- Overrides: `src/overrides/config.json`

---

Expand Down
115 changes: 82 additions & 33 deletions PROJECT_STATUS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Project Status

**Last Updated**: 2025-11-14
**Status**: ✅ Foundation Complete - Ready for Phase 2 (with Automated Updates)
**Last Updated**: 2025-11-18
**Status**: ✅ Agent Team Complete - Full Tooling & Specialization Ready

## Overview

Expand All @@ -16,18 +16,24 @@ The Windmill MCP Server generator project foundation is complete with:
- ✅ npm package configuration (npx execution ready)
- ✅ All unit tests passing (13/13)
- ✅ Automated GitHub Actions workflow for updates
- ✅ Complete agent team configuration (13 agents)
- ✅ Tool namespacing system (501 tools → 59 categories)
- ✅ Auto-generated tool documentation

## Quick Stats

| Metric | Count |
| ---------------------- | ---------------- |
| Total Files | 26 |
| Documentation Files | 10 |
| Scripts | 7 |
| Total Files | 45 |
| Documentation Files | 13 |
| Scripts | 9 |
| Test Files | 4 |
| Config Files | 5 |
| Agent Configs | 13 |
| MCP Tools Generated | 501 |
| Tool Categories | 59 |
| Unit Tests | 13 passing ✅ |
| Lines of Documentation | ~2000+ |
| Lines of Documentation | ~3500+ |
| Dependencies | 3 runtime, 5 dev |

## Project Structure
Expand All @@ -39,15 +45,35 @@ windmill-mcp/
│ │ └── AGENTS.md # Agent roles and workflows
│ └── workflows/ # GitHub Actions workflows
│ └── update-mcp-server.yml # Automated update workflow
├── .opencode/
│ ├── agent/ # Agent configurations
│ │ ├── windmill-manager.md # Primary coordinator
│ │ ├── job-specialist.md # Job operations
│ │ ├── user-specialist.md # User management
│ │ ├── script-specialist.md # Script operations
│ │ ├── flow-specialist.md # Flow orchestration
│ │ ├── resource-specialist.md # Resource management
│ │ ├── trigger-specialist.md # Triggers & schedules
│ │ ├── app-specialist.md # Application management
│ │ ├── workspace-specialist.md # Workspaces & folders
│ │ ├── audit-specialist.md # Audit logs & security
│ │ ├── integration-specialist.md # OAuth, webhooks, integrations
│ │ ├── storage-specialist.md # Database & file storage
│ │ └── system-specialist.md # System health & configuration
│ └── templates/
│ └── agent/
│ └── windmill-ROLE.md # Agent template
├── src/
│ ├── generator/ # OpenAPI spec fetching & generation
│ │ ├── config.json # Generator configuration
│ │ ├── fetch-spec.js # Fetch OpenAPI specs
│ │ └── generate.js # Generate MCP server
│ │ ├── config.json # Generator configuration
│ │ ├── fetch-spec.js # Fetch OpenAPI specs
│ │ ├── generate.js # Generate MCP server
│ │ └── generate-tool-list.js # Generate tool documentation
│ ├── overrides/ # Custom code overrides
│ │ ├── README.md # Override documentation
│ │ ├── apply-overrides.js # Apply custom overrides
│ │ └── validate-overrides.js # Validate override syntax
│ │ ├── README.md # Override documentation
│ │ ├── apply-overrides.js # Apply custom overrides
│ │ ├── add-tool-namespaces.js # Add namespace prefixes to tools
│ │ └── validate-overrides.js # Validate override syntax
│ └── runtime/ # Runtime loader for version management
│ ├── index.js # Main entry point
│ ├── cache.js # Cache management
Expand All @@ -65,10 +91,13 @@ windmill-mcp/
│ ├── utils/ # Test utilities & mocks
│ ├── setup.js # Test setup
│ └── config.json # Test configuration
├── docs/ # Documentation
│ ├── quickstart.md # Getting started guide
│ ├── testing.md # Testing guide
│ └── architecture-verification.md
├── docs/ # Documentation
│ ├── quickstart.md # Getting started guide
│ ├── testing.md # Testing guide
│ ├── architecture-verification.md
│ ├── agent-setup-complete.md # Agent team setup summary
│ ├── windmill-agent-team-plan.md # Agent architecture & workflows
│ └── generated-tools.md # Auto-generated tool list (501 tools)
├── README.md # Main documentation
├── CONTRIBUTING.md # Contribution guidelines
├── CHANGELOG.md # Version history
Expand Down Expand Up @@ -150,6 +179,17 @@ windmill-mcp/
- [x] Test result artifacts
- [x] Workflow summary reporting

### ✅ Agent Team & Tool Organization

- [x] Complete agent team architecture (1 manager + 12 specialists)
- [x] Tool namespacing system (namespace_subgroup_operationId format)
- [x] 501 tools organized into 59 categories
- [x] Auto-generated tool documentation
- [x] Agent configurations with YAML frontmatter
- [x] Glob pattern-based tool access control
- [x] Deny-by-default security model
- [x] Agent team workflow documentation

## Test Results

### Unit Tests ✅
Expand Down Expand Up @@ -329,31 +369,34 @@ The project includes an automated workflow for keeping the MCP server up to date
- **Rationale**: Standard MCP server pattern, better UX
- **Impact**: Easier adoption, simpler for end users

## Next Steps (Phase 2)
## Next Steps (Phase 3)

### Immediate

- [x] Set up GitHub Actions CI/CD for automated updates
- [ ] Install openapi-mcp-generator as dependency
- [ ] Integrate actual MCP server generation
- [ ] Create real tool implementations from OpenAPI
- [ ] Add more unit tests for generated code
- [x] Complete agent team configuration (13 agents)
- [x] Implement tool namespacing system
- [x] Generate tool documentation
- [ ] Test agent coordination workflows
- [ ] Validate tool access patterns
- [ ] Create example agent workflows

### Short Term

- [ ] Publish v0.1.0 to npm
- [ ] Create example MCP client integration
- [ ] Add integration tests
- [ ] Implement caching for OpenAPI specs
- [ ] Add more override examples
- [ ] Test MCP server with actual Windmill instance
- [ ] Validate agent tool access in practice
- [ ] Create agent coordination examples
- [ ] Add integration tests for agent workflows
- [ ] Document common agent patterns

### Medium Term

- [ ] Full E2E test coverage
- [ ] Publish v0.1.0 to npm
- [ ] Full E2E test coverage with agents
- [ ] Performance optimization
- [ ] Error handling improvements
- [ ] Agent workflow tutorials
- [ ] Documentation site
- [ ] Video tutorials

## Dependencies

Expand Down Expand Up @@ -411,18 +454,24 @@ The project includes an automated workflow for keeping the MCP server up to date
- **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md)
- **Project Plan**: See [docs/project-plan.md](docs/project-plan.md)
- **Sprints**: See [docs/sprints.md](docs/sprints.md)
- **Agent Setup**: See [docs/agent-setup-complete.md](docs/agent-setup-complete.md)
- **Agent Team Plan**: See [docs/windmill-agent-team-plan.md](docs/windmill-agent-team-plan.md)
- **Tool List**: See [docs/generated-tools.md](docs/generated-tools.md)

## Conclusion

✅ **Foundation is complete and solid**
✅ **Agent Team & Tooling Complete**

The project has a robust foundation with:
The project now has:

- Complete project structure
- Working generator system
- Working generator system with tool namespacing
- 13 specialized agents (1 manager + 12 specialists)
- 501 tools organized into 59 categories
- Auto-generated tool documentation
- Comprehensive testing infrastructure
- All unit tests passing
- Excellent documentation
- Ready for actual MCP server generation
- Ready for agent coordination testing

**Ready to proceed to Phase 2!** 🚀
**Ready to proceed to Phase 3 - Agent Testing & Coordination!** 🚀
Loading
Loading