Repository issue thread assistant with an Agent Orchestrator style YAML config.
Go to file
insleker c55643337c refactor: remove shell-dependent test seams from CLI integration paths
The Windows process launcher no longer needs Bash/PowerShell mediation, and the event-source tests now exercise CLI boundaries through an injectable executor instead of generated scripts. This keeps production behavior on real external commands while letting tests model long-running process streams and kill semantics in Dart.

Constraint: Tests must not mock CLIs by writing generated Dart or shell scripts and executing them.
Rejected: Use generated Dart script fixtures | still depends on subprocess execution for mocks.
Rejected: Use only mocktail mocks for process handles | stream, kill, and exit behavior are clearer as a small stateful fake.
Confidence: high
Scope-risk: moderate
Directive: Keep long-running CLI test behavior behind ExternalCommandExecutor rather than reintroducing script fixtures.
Tested: dart analyze; dart run tool\\validate_gherkin_test_format.dart; dart test
Not-tested: Real gh/gosmee webhook forwarding against live services
2026-04-11 15:36:39 +08:00
.github/workflows test: stabilize parallel event-source coverage (#37) 2026-04-10 11:39:54 +08:00
.vscode feat: Add minimal GitHub repo configuration and issue assistant setup 2026-04-04 22:12:03 +08:00
bin feat: add GitLab tracker and SCM support (#35) 2026-04-10 02:25:06 +08:00
docs chore: support windows OS 2026-04-09 11:26:35 +08:00
examples fix: `tea` CLI call hang in windows by replaced it with direct http API called 2026-04-11 05:35:47 +08:00
lib refactor: remove shell-dependent test seams from CLI integration paths 2026-04-11 15:36:39 +08:00
skills/dart-gherkin-tests feat: add Gherkin test validation and enforce doc-comment format 2026-04-04 20:17:05 +08:00
test refactor: remove shell-dependent test seams from CLI integration paths 2026-04-11 15:36:39 +08:00
tool refactor: remove shell-dependent test seams from CLI integration paths 2026-04-11 15:36:39 +08:00
.env.example feat: load dotenv runtime config for #27 2026-04-09 01:40:28 +08:00
.gitignore refactor: remove shell-dependent test seams from CLI integration paths 2026-04-11 15:36:39 +08:00
AGENTS.md chore: cleanup deprecated `IssueAssistantEventSourceDocument` 2026-04-10 15:37:02 +08:00
CHANGELOG.md feat: 1st commit 2026-04-04 18:52:01 +08:00
README.md test: stabilize parallel event-source coverage (#37) 2026-04-10 11:39:54 +08:00
analysis_options.yaml feat: 1st commit 2026-04-04 18:52:01 +08:00
build.yaml feat: add glab/gosmee GitLab channel support (#37) 2026-04-10 11:12:14 +08:00
lefthook.yml feat: Add minimal GitHub repo configuration and issue assistant setup 2026-04-04 22:12:03 +08:00
pubspec.yaml refactor: remove shell-dependent test seams from CLI integration paths 2026-04-11 15:36:39 +08:00
skills-lock.json refactor: improve repo structure 2026-04-10 10:45:48 +08:00

README.md

code_work_spawner

Repository issue thread assistant with an Agent Orchestrator style YAML config.

It consumes issue tracker events for configured GitHub, GitLab, Gitea, or OpenProject
projects, reads issue threads, and uses CLI responders such as codex, opencode, or
copilot-cli to decide when to reply. It supports
multi-repo config, responder fallback chains, and optional Discord webhook and
desktop notifications. Repository access is configured separately through each
project's scm block so tracker and checkout handling can evolve
independently.

Highlights

  • Consume GitHub, GitLab, Gitea, and OpenProject issue events across multiple projects
  • Trigger replies from mentions or meaningful thread updates
  • Run planning and bug-verification flows in isolated worktrees
  • Send optional Discord or desktop notifications for assistant events

Requirements

  • Dart SDK
  • gh, glab, tea, and/or OpenProject API credentials authenticated for the target projects
  • Local checkouts for configured repositories
  • Optional local responder CLIs such as codex, opencode, or copilot-cli

Config

Create a local agent-orchestrator.yaml and use
examples/README.md plus
examples/simple-github.yaml,
examples/simple-gitlab.yaml, or
examples/simple-gitea.yaml as the reference.

Environment placeholders such as ${CWS_DISCORD_WEBHOOK} are resolved from the
process environment and from a .env file placed next to the selected config
file. Logging also supports CWS_LOG_LEVEL (or LOG_LEVEL) with values such
as trace, debug, info, warning, error, or fatal. See
.env.example for a minimal starter file.

Generate a starter config:

dart run bin/code_work_spawner.dart init-config
# Write it to a file:
dart run bin/code_work_spawner.dart init-config --output agent-orchestrator.yaml
# Overwrite an existing file:
dart run bin/code_work_spawner.dart init-config --output agent-orchestrator.yaml --force

Run

dart run build_runner build --delete-conflicting-outputs

Single event-source reconciliation cycle:

dart run bin/code_work_spawner.dart --once

Long-running tracker runtime:

dart run bin/code_work_spawner.dart

Override tracker CLI paths when needed:

dart run bin/code_work_spawner.dart \
  --config /path/to/agent-orchestrator.yaml \
  --db /path/to/state.sqlite3 \
  --gh-command /usr/bin/gh \
  --glab-command /usr/bin/glab \
  --tea-command /usr/bin/tea

Testing

dart run tool/validate_gherkin_test_format.dart
dart analyze
dart test

ref

agent-orchestrator