Harness spec 3.2.0 in the CLI: effort levels, reasoning round-trip, no absolute paths
ci / check (push) Waiting to run
ci / check (push) Waiting to run
Levels (models/schema.json levels): provider/effort.ts levelsOf/levelFields/ readLevel — `off` only with thinking_switch and sends enable_thinking false and no effort, `default` for a model that takes no efforts and sends nothing, a level not offered is read as the start level. The engine's effort is a level; /effort shows nothing for one level, a Thinking switch for [off, X], a list otherwise; the status bar follows. /v1/models' thinking_switch, efforts [] and capacity.parallel are read (lembas/webui.ts); session/capacity.ts counts parallel slots. Reasoning (context.md §8): an assistant message of the current turn carries reasoning_content (provider/common.ts turnReasoning, openai-chat.ts); step-boundary deliveries, nudges and the wrap-up are marked turn: false and do not start a turn. Paths (context.md §11): the <env> block names the project and, started below the root, that directory relative to it (assemble.ts envLines); instruction files and @ attachments are named from the root or as ~/…; file tools and bash resolve relative paths against the project root. The team rules (team/team.ts) and conformance runners for levels, reasoning, paths and team; the team runtime follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
36 files changed
+1168
-153
No files matched your search
+11
-4
@@ -139,11 +139,18 @@ describe("openai-chat streaming", () => {
|
||||
expect(fake.requests[0].chat_template_kwargs).toEqual({ reasoning_effort: "high" })
|
||||
})
|
||||
|
||||
test("effort outside the vocabulary is not sent", async () => {
|
||||
fake = fakeProvider([{ chunks: [delta({ content: "ok" })] }])
|
||||
test("a level the model does not offer is read as its start level (spec 3.2.0 levels)", async () => {
|
||||
fake = fakeProvider([{ chunks: [delta({ content: "ok" })] }, { chunks: [delta({ content: "ok" })] }, { chunks: [delta({ content: "ok" })] }])
|
||||
await collect(new OpenAIChatClient(model(fake.url, { efforts: ["low"] })), "high")
|
||||
expect(fake.requests[0].reasoning_effort).toBeUndefined()
|
||||
expect(fake.requests[0].chat_template_kwargs).toBeUndefined()
|
||||
expect(fake.requests[0].reasoning_effort).toBe("low")
|
||||
// off: only with the switch, and then enable_thinking false and no effort anywhere.
|
||||
await collect(new OpenAIChatClient(model(fake.url, { efforts: ["medium"], thinking_switch: true })), "off")
|
||||
expect(fake.requests[1].reasoning_effort).toBeUndefined()
|
||||
expect(fake.requests[1].chat_template_kwargs).toEqual({ enable_thinking: false })
|
||||
// default: a model that takes no efforts — nothing sent.
|
||||
await collect(new OpenAIChatClient(model(fake.url, { efforts: [] })), "default")
|
||||
expect(fake.requests[2].reasoning_effort).toBeUndefined()
|
||||
expect(fake.requests[2].chat_template_kwargs).toBeUndefined()
|
||||
})
|
||||
|
||||
test("template refuses an effort → retried without it, vocabulary learned from the message", async () => {
|
||||
|
||||
Reference in new issue
Block a user