diff --git a/README.assets/image.png b/README.assets/image.png new file mode 100644 index 0000000..48c3910 Binary files /dev/null and b/README.assets/image.png differ diff --git a/README.md b/README.md index d0b5ffe..6833f31 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,42 @@ # code_work_spawner -Repository issue thread assistant with an Agent Orchestrator style YAML config. +Repository issue thread assistant configured by YAML. -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. +It watches GitHub, GitLab, Gitea, or OpenProject issue events, reads threads, and triggers CLI responders such as `codex`, `opencode`, or `copilot-cli`. +Supports multi-repo config, responder fallback chains, isolated worktrees, and optional Discord or desktop notifications. + + ## 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 +- Track issue events across multiple repositories +- Reply on mentions or meaningful thread updates +- Run planning and bug verification in isolated worktrees +- Send optional Discord and desktop notifications ## Requirements - Dart SDK -- `gh`, `glab`, `tea`, and/or OpenProject API credentials authenticated for the target projects +- Authenticated `gh`, `glab`, `tea`, and/or OpenProject API credentials - Local checkouts for configured repositories -- Optional local responder CLIs such as `codex`, `opencode`, or `copilot-cli` +- Optional responder CLIs (`codex`, `opencode`, `copilot-cli`) ## Config -Create a local `agent-orchestrator.yaml` and use -[`examples/README.md`](examples/README.md) plus -[`examples/simple-github.yaml`](examples/simple-github.yaml), -[`examples/simple-gitlab.yaml`](examples/simple-gitlab.yaml), or -[`examples/simple-gitea.yaml`](examples/simple-gitea.yaml) as the reference. +Create `CWS_conf.yaml` using: +- [examples/README.md](examples/README.md) +- [examples/simple-github.yaml](examples/simple-github.yaml) +- [examples/simple-gitlab.yaml](examples/simple-gitlab.yaml) +- [examples/simple-gitea.yaml](examples/simple-gitea.yaml) -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](.env.example) for a minimal starter file. +Environment placeholders (for example `${CWS_DISCORD_WEBHOOK}`) are resolved +from process env vars and from a `.env` file next to your config. -Generate a starter config: +Logging level can be set with `CWS_LOG_LEVEL` (or `LOG_LEVEL`): `trace`, +`debug`, `info`, `warning`, `error`, `fatal`. Minimal example: +[.env.example](.env.example). + +Generate starter config: ```bash dart run bin/code_work_spawner.dart init-config @@ -50,23 +48,25 @@ dart run bin/code_work_spawner.dart init-config --output agent-orchestrator.yaml ## Run +Generate code first: + ```bash dart run build_runner build --delete-conflicting-outputs ``` -Single event-source reconciliation cycle: +Run once: ```bash dart run bin/code_work_spawner.dart --once ``` -Long-running tracker runtime: +Run continuously: ```bash dart run bin/code_work_spawner.dart ``` -Override tracker CLI paths when needed: +Override CLI paths if needed: ```bash dart run bin/code_work_spawner.dart \ @@ -79,7 +79,7 @@ dart run bin/code_work_spawner.dart \ ## Install Binary -Install the latest matching release binary from GitHub Releases: +Install latest release binary: ```bash # export GH_TOKEN="$TOKEN" # If got 404, `GITHUB_TOKEN` also work diff --git a/bin/code_work_spawner.dart b/bin/code_work_spawner.dart index 7eaf156..0dc64fd 100644 --- a/bin/code_work_spawner.dart +++ b/bin/code_work_spawner.dart @@ -18,7 +18,7 @@ class _CodeWorkSpawnerCommandRunner extends CommandRunner { _CodeWorkSpawnerCommandRunner() : super( 'code_work_spawner', - 'Repository issue thread assistant with an Agent Orchestrator style YAML config.', + 'Repository issue thread assistant with a YAML config.', ) { argParser ..addFlag( @@ -30,8 +30,8 @@ class _CodeWorkSpawnerCommandRunner extends CommandRunner { ..addOption( 'config', abbr: 'c', - help: 'Path to agent-orchestrator.yaml.', - defaultsTo: 'agent-orchestrator.yaml', + help: 'Path to the YAML config file.', + defaultsTo: 'CWS_conf.yaml', ) ..addOption( 'db', diff --git a/examples/simple-github.yaml b/examples/simple-github.yaml index f6c4ff0..6489918 100644 --- a/examples/simple-github.yaml +++ b/examples/simple-github.yaml @@ -25,10 +25,15 @@ defaults: # Replace this with a responder available on your machine. - id: codex command: codex - args: ["exec", "--json"] + args: ["-s", "danger-full-access", "exec", "--json"] timeout: 10m # - id: opencode # command: opencode + # args: ["run", "-f", "json"] + # timeout: 10m + # - id: copilot-cli + # command: copilot + # args: ["--allow-all", "--autopilot", "-p", "--output-format", "json"] # timeout: 10m # notifications: # # Optional Discord notifications for assistant activity. diff --git a/lib/src/config/config.dart b/lib/src/config/config.dart index b49ee90..d2233ea 100644 --- a/lib/src/config/config.dart +++ b/lib/src/config/config.dart @@ -1081,6 +1081,11 @@ ${_commentBlock(defaultIssueAssistantPrompt, indent: ' # ')} # timeout: 10m # - id: opencode # command: opencode + # args: ["run", "-f", "json"] + # timeout: 10m + # - id: copilot-cli + # command: copilot + # args: ["--allow-all", "--autopilot", "-p", "--output-format", "json"] # timeout: 10m # notifications: # - type: discordWebhook diff --git a/skills-lock.json b/skills-lock.json index 6dcd056..e401c99 100644 --- a/skills-lock.json +++ b/skills-lock.json @@ -46,6 +46,11 @@ "sourceType": "github", "computedHash": "8bfae087ef27eb37092d94caf1da3406b500aa908756772bb1349a1ac70823dd" }, + "babysit-pr": { + "source": "openai/codex", + "sourceType": "github", + "computedHash": "8d952e21312ebf8573d9f5655c0e0eb3ad6e2ca14fcc6b95cbad046692eaf651" + }, "breakdown-epic-arch": { "source": "github/awesome-copilot", "sourceType": "github", @@ -101,6 +106,11 @@ "sourceType": "github", "computedHash": "a7d80450799b2141ddff9ec614477e237c1f50acb9eeade2dd869aeac3d004a9" }, + "codex": { + "source": "softaworks/agent-toolkit", + "sourceType": "github", + "computedHash": "4b7e8695807b567a7a7d467ab15b3da330aa0a847827067d79c654c540a72fe9" + }, "comment-code-generate-a-tutorial": { "source": "github/awesome-copilot", "sourceType": "github", @@ -121,6 +131,11 @@ "sourceType": "github", "computedHash": "934c017d41118a44f4db0e80b526db175cadcfdf8c5354fc9eceb0b3cb6beb50" }, + "copilot-cli-quickstart": { + "source": "github/awesome-copilot", + "sourceType": "github", + "computedHash": "720e848c508c9fccc0d9edbdb7a68ede333866e1e0a126b7d4b179e01d7ba5d7" + }, "create-agentsmd": { "source": "github/awesome-copilot", "sourceType": "github", diff --git a/test/config/app_config_test.dart b/test/config/app_config_test.dart index ed34540..a2a71a6 100644 --- a/test/config/app_config_test.dart +++ b/test/config/app_config_test.dart @@ -60,7 +60,7 @@ void main() { test('Merge defaults with project overrides', () async { // Given camelCase config with shared defaults and one project override. final tempDir = await Directory.systemTemp.createTemp('cws-config-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -120,7 +120,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-default-templates-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -163,7 +163,7 @@ projects: test('Resolve config placeholders from a colocated dotenv file', () async { // Given an orchestrator config with environment placeholders and a colocated dotenv file. final tempDir = await Directory.systemTemp.createTemp('cws-dotenv-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); final dotenvFile = File(p.join(tempDir.path, '.env')); addTearDown(AppEnvironment.resetForTest); await dotenvFile.writeAsString(''' @@ -211,7 +211,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-comment-template-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -249,7 +249,7 @@ projects: test('Normalize legacy codex json flag', () async { // Given an orchestrator config that still uses the legacy codex --json-output flag. final tempDir = await Directory.systemTemp.createTemp('cws-codex-args-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -285,7 +285,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-notification-config-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -340,7 +340,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-desktop-notification-config-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -379,7 +379,7 @@ projects: test('Load camelCase config with shared worktree root', () async { // Given camelCase config with dataDir, worktreeDir, and project settings. final tempDir = await Directory.systemTemp.createTemp('cws-camel-case-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' dataDir: ~/.agent-orchestrator worktreeDir: ~/.worktrees @@ -420,7 +420,7 @@ projects: test('Infer a Gitea issue tracker provider from the event source', () async { // Given a config whose project sets tea/polling as the event source type. final tempDir = await Directory.systemTemp.createTemp('cws-gitea-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -456,7 +456,7 @@ projects: test('Infer a GitLab issue tracker provider from the event source', () async { // Given a config whose project sets glab/polling as the event source type. final tempDir = await Directory.systemTemp.createTemp('cws-gitlab-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -497,9 +497,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-openproject-', ); - final configFile = File( - p.join(tempDir.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -542,7 +540,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-openproject-missing-scm-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -585,7 +583,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-openproject-project-name-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -621,7 +619,7 @@ projects: test('Load gh/gosmee as the issue event source', () async { // Given a GitHub project config that opts into gh/gosmee. final tempDir = await Directory.systemTemp.createTemp('cws-gh-gosmee-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -655,7 +653,7 @@ projects: test('Load glab/gosmee as the issue event source', () async { // Given a GitLab project config that opts into glab/gosmee. final tempDir = await Directory.systemTemp.createTemp('cws-glab-gosmee-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -693,9 +691,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-explicit-scm-', ); - final configFile = File( - p.join(tempDir.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -732,7 +728,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-legacy-provider-fallback-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -769,7 +765,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-gh-gosmee-gitea-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -813,9 +809,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-glab-gosmee-github-', ); - final configFile = File( - p.join(tempDir.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -860,7 +854,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-webhook-forward-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -896,7 +890,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-channel-reconcile-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -941,7 +935,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-legacy-channel-poll-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -985,9 +979,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-webhook-forward-gitea-', ); - final configFile = File( - p.join(tempDir.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -1028,7 +1020,7 @@ projects: test('Load tea/gosmee as the issue event source', () async { // Given a Gitea project config that opts into tea/gosmee. final tempDir = await Directory.systemTemp.createTemp('cws-gosmee-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -1066,9 +1058,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-gosmee-github-', ); - final configFile = File( - p.join(tempDir.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -1110,7 +1100,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-snake-case-invalid-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' worktree_dir: ~/.worktrees projects: @@ -1146,7 +1136,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-invalid-repo-slug-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: @@ -1180,7 +1170,7 @@ projects: test('Generate a starter config that parses as valid YAML', () async { // Given the built-in initial config renderer. final tempDir = await Directory.systemTemp.createTemp('cws-init-config-'); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); final contents = AppConfig.renderInitialConfig(); // When writing the generated starter config to disk. @@ -1220,7 +1210,7 @@ projects: final tempDir = await Directory.systemTemp.createTemp( 'cws-init-optional-', ); - final configFile = File(p.join(tempDir.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(tempDir.path, 'CWS_conf.yaml')); final contents = AppConfig.renderInitialConfig() .replaceFirst( ' # capabilities: ["planning", "bug_verification"]', diff --git a/test/config/init_config_cli_test.dart b/test/config/init_config_cli_test.dart index 5bd412b..8259328 100644 --- a/test/config/init_config_cli_test.dart +++ b/test/config/init_config_cli_test.dart @@ -115,7 +115,7 @@ void main() { test('Print the starter config to stdout', () async { // Given the CLI is executed with the init-config command. final sandbox = await Directory.systemTemp.createTemp('cws-cli-stdout-'); - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); final result = await runCli(['init-config']); // When the process completes successfully. @@ -164,7 +164,7 @@ void main() { test('Refuse overwrite unless force is provided', () async { // Given an existing output file for the init-config command. final sandbox = await Directory.systemTemp.createTemp('cws-cli-force-'); - final outputFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final outputFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await outputFile.writeAsString('original'); // When the CLI writes without the force flag and then with the force flag. diff --git a/test/core/concurrency_test.dart b/test/core/concurrency_test.dart index faa42b0..53806b9 100644 --- a/test/core/concurrency_test.dart +++ b/test/core/concurrency_test.dart @@ -124,7 +124,7 @@ void registerIssueAssistantAppRunOnceConcurrencyTests() { ); // And an orchestrator-style config with maxConcurrentIssues set to three. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -266,7 +266,7 @@ projects: }); // And a fake gh command that fails the authenticated user lookup. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -360,7 +360,7 @@ projects: ); // And an AO subset config that enables the assistant without defining responders. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' projects: sample: diff --git a/test/core/core_test.dart b/test/core/core_test.dart index 7c9efd8..c558645 100644 --- a/test/core/core_test.dart +++ b/test/core/core_test.dart @@ -79,7 +79,7 @@ void registerIssueAssistantAppRunOnceCoreTests() { }); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -189,9 +189,7 @@ projects: }); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -291,7 +289,7 @@ projects: }); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -419,9 +417,7 @@ projects: }); // And an orchestrator-style config limiting replies after a human comment to one. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -524,7 +520,7 @@ projects: }, stderr: 'codex diagnostic trace'); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/core/multi_project_test.dart b/test/core/multi_project_test.dart index 9417d68..33d8ceb 100644 --- a/test/core/multi_project_test.dart +++ b/test/core/multi_project_test.dart @@ -144,9 +144,7 @@ void registerIssueAssistantAppRunOnceMultiProjectTests() { }); // And an orchestrator-style config with both repositories enabled. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -293,7 +291,7 @@ projects: }); // And an orchestrator-style config that marks the project provider as gitea. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -392,9 +390,7 @@ CWS_GITEA_TOKEN=test-token }); // And an orchestrator-style config that uses an OpenProject project name. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/core/no_reply_acknowledgement_test.dart b/test/core/no_reply_acknowledgement_test.dart index 29b93bf..004915e 100644 --- a/test/core/no_reply_acknowledgement_test.dart +++ b/test/core/no_reply_acknowledgement_test.dart @@ -85,9 +85,7 @@ void main() { }); // And an orchestrator-style config that marks the project provider as gitea. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -212,9 +210,7 @@ CWS_GITEA_TOKEN=test-token }); // And an orchestrator-style config that marks the project provider as gitlab. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -315,9 +311,7 @@ projects: }); // And an orchestrator-style config that uses OpenProject as the tracker provider. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/core/retry_test.dart b/test/core/retry_test.dart index 5223a0a..2b8810d 100644 --- a/test/core/retry_test.dart +++ b/test/core/retry_test.dart @@ -67,7 +67,7 @@ void registerIssueAssistantAppRunRetryTests() { ); // And an orchestrator-style config with a short poll interval. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/issue_event_source/test_helpers.dart b/test/issue_event_source/test_helpers.dart index 52cdc60..1c87246 100644 --- a/test/issue_event_source/test_helpers.dart +++ b/test/issue_event_source/test_helpers.dart @@ -22,7 +22,7 @@ Future writeSingleProjectIssueAssistantConfig({ required String repoPath, required List eventSourceLines, }) async { - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); final eventSourceYaml = eventSourceLines .map((line) => ' $line') .join('\n'); diff --git a/test/issue_event_source/webhook_forward_test.dart b/test/issue_event_source/webhook_forward_test.dart index e72335c..330c23e 100644 --- a/test/issue_event_source/webhook_forward_test.dart +++ b/test/issue_event_source/webhook_forward_test.dart @@ -168,7 +168,7 @@ void registerIssueAssistantAppRunWebhookForwardTests() { }; // And an orchestrator-style config that uses gh/webhook-forward. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/notifier/notifications_test.dart b/test/notifier/notifications_test.dart index c72dc55..658f9d1 100644 --- a/test/notifier/notifications_test.dart +++ b/test/notifier/notifications_test.dart @@ -99,7 +99,7 @@ void registerIssueAssistantAppRunOnceNotificationTests() { }); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -225,9 +225,7 @@ projects: }()); // And an orchestrator-style config with a discord webhook notifier. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: diff --git a/test/workspace/worktree_test.dart b/test/workspace/worktree_test.dart index 88d9b1c..29faaee 100644 --- a/test/workspace/worktree_test.dart +++ b/test/workspace/worktree_test.dart @@ -88,9 +88,7 @@ void registerIssueAssistantAppRunOnceWorktreeTests() { ); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File( - p.join(sandbox.path, 'agent-orchestrator.yaml'), - ); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: @@ -212,7 +210,7 @@ projects: }, cwdCapture: cwdCapture); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' worktreeDir: ${worktreeRoot.path} defaults: @@ -312,7 +310,7 @@ projects: }); // And an orchestrator-style config pointing to the fake repo and responder. - final configFile = File(p.join(sandbox.path, 'agent-orchestrator.yaml')); + final configFile = File(p.join(sandbox.path, 'CWS_conf.yaml')); await configFile.writeAsString(''' defaults: issueAssistant: