pub.dev requires README.md and CHANGELOG.md in each package directory.
Added minimal but accurate files to all four packages.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- core: Add ProjectDirs helper class on ProjectContext (context.dirs)
with project getter for .project/ dir; feature packages extend it
via extension methods to expose their own dirs
- kanban: Add KanbanDirs extension on ProjectDirs exposing .kanban;
replace all 14 p.join(context.root, '.project', 'kanban') call
sites with context.dirs.kanban; drop now-unused path imports
- kanban: Add clock: DateTime Function() field to TicketStore
(defaults to DateTime.now); use clock().toUtc() in create() for
deterministic timestamps in tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace dart:io File/Directory with package:file abstractions so that
tests can use MemoryFileSystem instead of mutating the process-global
Directory.current.
- Add file: ^7.0.1 to core and kanban dependencies
- ProjectContext.find() accepts FileSystem fs parameter
- TicketStore, KanbanInitHook, InitCommand, all kanban commands accept
FileSystem fs (defaulting to LocalFileSystem())
- KanbanCommand and registerCommands() thread fs to subcommands
- Tests rewritten to use MemoryFileSystem() — no Directory.current mutation
- Remove dart_test.yaml (concurrency: 1 no longer needed)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1. get shows milestones/labels: GetCommand._format() now shows Milestones:/Labels:
lines when non-empty, between Created: and Links:
2. unarchive command: kanban unarchive --id <id> [--column <col>] restores a
ticket from archive/ back to a column (default: first configured column);
registered as 'kanban_unarchive_ticket' MCP tool (15 tools total)
3. Test isolation: add dart_test.yaml (concurrency: 1) — Directory.current is
a process-global OS chdir(); concurrent test files in the same process
would race. Now dart test packages/core packages/kanban passes cleanly.
4. update empty multi-option fix: --milestone '' / --label '' with empty
strings now filters them out (treats as 'clear to empty') rather than
writing spurious empty-string YAML list entries
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
DewConfig in core is now a thin YamlMap wrapper. Feature-specific config
classes live in their own packages and expose themselves via Dart extensions:
- KanbanConfig, ColumnConfig, TicketTypeConfig + KanbanDewConfig extension
moved to packages/kanban/lib/src/kanban_config.dart
- McpConfig + McpDewConfig extension added to
packages/mcp/lib/src/mcp_config.dart
- DewConfig.fromYaml() now trivially wraps the raw YamlMap
- All call sites unchanged: context.config.kanban.* / context.config.mcp.*
- Added yaml dependency to dew_mcp pubspec
- Updated core test to validate raw yaml instead of typed fields
- Fixed cross-suite Directory.current isolation (existing issue, not introduced)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add DewToolCommand mixin that auto-derives MCP tool JSON Schema from
ArgParser, eliminating the need to define CLI commands and MCP tools
separately
- Add schemaFromArgParser() to generate JSON Schema from ArgParser options
- Add CommandRegistry.mcpTools recursive collector for all DewToolCommand
subcommands
- Refactor all kanban subcommands to use the mixin; switch get/update/delete
from positional rest args to --id / -i option for schema compatibility
- Promote list to a proper CLI subcommand (was MCP-only before)
- Add search, comment, and config subcommands (CLI + MCP tools)
- Add TicketStore.addComment() for non-destructive comment appending
- Simplify mcp.registerCommands() to take only CommandRegistry
- Simplify CLI entry point (no more KanbanToolProvider/McpToolRegistry)
- Delete stale files: kanban_tool_provider.dart, mcp_tool_provider.dart,
mcp_tool_registry.dart (superseded by DewToolCommand mixin)
- Add tools/mcp_client.dart debug client for manual MCP server testing
- Update .vscode/mcp.json with correct server config
All 26 tests pass, dart analyze clean.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Flesh out docs/index.md, docs/config.md, docs/features/mcp.md,
docs/features/kanban.md with full content and aligned tables
- Fix .markdownlint-cli2.mjs config (rules were outside 'config' key)
- Add packages/mcp as a standalone MCP server package
- Update all pubspec descriptions
- Implement DewCommand + CommandRegistry in core
- Implement KanbanCommand and McpCommand stubs with registerCommands()
- Wire CLI entry point using CommandRunner + CommandRegistry
- Add 'melos run dew' script for running the CLI from workspace root
- Update tests across core, kanban, mcp packages
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>