Metadata: - Bump dew CLI version 0.0.1 → 1.0.0 - Add repository + issue_tracker URLs to all pubspec.yaml files - Switch inter-package path deps to versioned deps (^1.0.0) - Remove publish_to: none from all packages - Add MIT LICENSE to root and all packages - Confirm all four pub.dev names available (dew, dew_core, dew_kanban, dew_mcp) Documentation: - Add CHANGELOG.md (Keep a Changelog format, full 1.0.0 feature history) - Overhaul README.md (pitch, pub.dev badge, quick-start, feature sections) - Add TUI section + full keybinding tables to docs/features/kanban.md - Add CONTRIBUTING.md (setup, test, lint, branch strategy, command guide) Tests: - Add packages/cli/test/cli_test.dart (6 smoke tests) - Add packages/kanban/test/integration_test.dart (6 TicketStore e2e tests) - Expand packages/mcp/test/mcp_test.dart (5 tool registration tests) - Add dew_kanban as dev dependency in packages/mcp/pubspec.yaml - 57/57 tests passing Code quality: - dart format applied across all 23 changed source files - dart analyze: zero errors, zero warnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
3.1 KiB
Contributing to Dew
Thank you for your interest in contributing! This guide covers everything you need to get set up and start making changes.
Prerequisites
- Dart SDK ^3.11.4 — verify with
dart --version - Melos (optional, for workspace scripts) —
dart pub global activate melos
Clone & setup
git clone https://github.com/artificery-dev/dew.git
cd dew
dart pub get
Running the CLI locally
dart run packages/cli/bin/dew.dart kanban --help
Running tests
dart test packages/core/test/
dart test packages/kanban/test/
dart test packages/mcp/test/
Linting and formatting
dart analyze
dart format .
Fix any analysis warnings before opening a PR. The project uses the rules defined in analysis_options.yaml.
Branch strategy
| Branch | Purpose |
|---|---|
main |
Stable, released code. Only merged into from develop. |
develop |
Integration branch. All PRs target this branch. |
feat/* |
Feature branches cut from develop. |
fix/* |
Bug-fix branches cut from develop. |
Workflow:
- Cut a feature branch from
develop:git checkout -b feat/my-feature develop - Make your changes, add tests, run
dart analyze && dart format . - Open a PR targeting
develop - Releases are prepared on
developand merged tomain
Adding a new kanban command
Follow these three steps to add a command that is simultaneously a CLI subcommand and an MCP tool:
1. Create the command class
Create packages/kanban/lib/src/commands/my_command.dart implementing DewToolCommand:
import 'package:args/command_runner.dart';
import 'package:dew_core/dew_core.dart';
class MyCommand extends DewCommand with DewToolCommand {
@override
final String name = 'my-command';
@override
final String description = 'Does something useful.';
MyCommand() {
argParser.addOption('id', mandatory: true, help: 'Ticket ID.');
}
@override
Future<void> run() async {
final id = argResults!['id'] as String;
// implementation
}
}
The DewToolCommand mixin automatically derives the MCP tool JSON Schema from
the ArgParser — no extra registration work needed.
2. Register in the kanban base
Add your command in packages/kanban/lib/src/dew_kanban_base.dart alongside the existing commands:
addSubcommand(MyCommand());
3. Add tests
Add tests in packages/kanban/test/my_command_test.dart. Use the existing command tests as a reference for how to set up a ProjectContext with an in-memory filesystem.
dart test packages/kanban/test/my_command_test.dart
Project structure
packages/
├── cli/ — Entry point; wires all packages together
├── core/ — DewCommand, DewToolCommand, CommandRegistry, DewConfig
├── kanban/ — All kanban commands and storage logic
└── mcp/ — MCP server; reads tools from CommandRegistry