diff --git a/AGENTS.md b/AGENTS.md index b1411aa3..2af34120 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -36,7 +36,7 @@ Use Plain Language in introductory, expository, friendly, and other sensible com - After each `agent.act`, assert exactly with `expect`. Do not add mocks, request interception, or test-only endpoints. - Pass `--changed-since ` to `nub exec e2e list` and `nub exec e2e run` directly. Do not write `nub run test -- --changed-since`. e2e treats a flag after `--` as a test file. - `nub run test` boots SolStatus with `alchemy dev` on ports 3000, 8787, and 8788. The state for a run lives only in `.e2e/runs//.alchemy`, and the launcher removes it on exit. The suite does not deploy or destroy remote Cloudflare resources, and it does not use `CLOUDFLARE_API_TOKEN`. -- `@e2e-dev/decision` drives semantic steps through the Cloudflare AI Gateway. `scripts/e2e/models.ts` selects the decision model (`E2E_DECISION_MODEL`, default Cloudflare Clef) and the language model (`E2E_LANGUAGE_MODEL`, default `anthropic/claude-haiku-5.5`) through official AI SDK providers. CI reads both from SolZeroAI organization Actions variables. Keep `scripts/e2e/models.ts` and `scripts/e2e/filters.ts` identical across SolZero repositories, and do not add a custom executor. +- `@e2e-dev/decision` drives semantic steps through the Cloudflare AI Gateway. `scripts/e2e/models.ts` selects the decision model (`E2E_DECISION_MODEL`, default Cloudflare Clef) and the language model (`E2E_LANGUAGE_MODEL`, default `meta/muse-ember-1.0`) through official AI SDK providers. CI reads both from SolZeroAI organization Actions variables. Keep `scripts/e2e/models.ts` and `scripts/e2e/filters.ts` identical across SolZero repositories, and do not add a custom executor. - Action replay recordings in `.e2e/cache` are committed, and CI replays them with `--strict-cache`. Before you mark a pull request ready for review, re-record if you changed an `agent.act` step or the UI one drives: run `gh workflow run validate.yml --ref -f e2e_record=true`, wait for it to pass, and pull the recordings commit it pushes to your branch. Without CI access, run `nub run test` locally and commit the changed recordings. - Declare credentials and secrets in `e2e.config.ts`, never in test code. Never deploy, pay, or send external alerts from tests. - All tests run locally against `alchemy dev`. Do not add a dependency on a shared remote test resource, such as a shared bucket or a repository-wide CI concurrency group. diff --git a/e2e.config.ts b/e2e.config.ts index c8fbf3ce..07d87728 100644 --- a/e2e.config.ts +++ b/e2e.config.ts @@ -78,6 +78,9 @@ export default { agents: { default: { executor: decisionExecutor({ model: decisionModel, textModel: languageModel }), + // Muse Ember spends most output tokens on reasoning unless effort is low. + // The runner forwards this into language-model generateText calls only. + providerOptions: { openai: { reasoningEffort: "low" } }, maxSteps: 20, maxModelCalls: 20, context: diff --git a/scripts/e2e/models.ts b/scripts/e2e/models.ts index 39fd026d..621764fa 100644 --- a/scripts/e2e/models.ts +++ b/scripts/e2e/models.ts @@ -8,7 +8,7 @@ import * as P from "effect/Predicate" // variables, so CI changes models for the fleet in one place. The defaults // below serve local runs and must match the DNA page. const DEFAULT_DECISION_MODEL = "@cf/cloudflare/clef" -const DEFAULT_LANGUAGE_MODEL = "anthropic/claude-haiku-5.5" +const DEFAULT_LANGUAGE_MODEL = "meta/muse-ember-1.0" /** * Official AI SDK providers pointed at the Cloudflare AI Gateway REST API.