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
+7
-6
@@ -3,7 +3,8 @@ import { useKeyboard, useRenderer, useTerminalDimensions } from "@opentui/solid"
|
||||
import { createEffect, createMemo, createSignal, onCleanup, Show } from "solid-js"
|
||||
import { stricterMode, type App as Runtime } from "../app.ts"
|
||||
import { isLocal } from "../config/paths.ts"
|
||||
import type { Effort, Mode } from "../config/schema.ts"
|
||||
import type { Mode } from "../config/schema.ts"
|
||||
import { levelLabel, type Level } from "../provider/effort.ts"
|
||||
import { COMMANDS, findCommand, type CommandCtx } from "./commands.ts"
|
||||
import { Dialog, type DialogSpec } from "./components/dialog.tsx"
|
||||
import { Messages } from "./components/messages.tsx"
|
||||
@@ -58,7 +59,7 @@ export function Root(p: { app: Runtime; view: View; theme: Theme; onQuit: () =>
|
||||
const refresh = () => setRev((n) => n + 1)
|
||||
const mode = () => (rev(), app.engine.mode)
|
||||
const model = () => (rev(), app.engine.model.ref)
|
||||
const effort = () => (rev(), app.engine.effort ?? "")
|
||||
const effort = () => (rev(), levelLabel(app.engine.model, app.engine.effort))
|
||||
const busy = () => view.state.phase !== "idle"
|
||||
const branch = () => (rev(), app.project.gitRoot ? currentBranch(app.project.gitRoot) : undefined)
|
||||
// A word in the status bar that goes by itself (a copy): it says something happened without
|
||||
@@ -223,8 +224,8 @@ export function Root(p: { app: Runtime; view: View; theme: Theme; onQuit: () =>
|
||||
setMode(m: Mode) {
|
||||
app.settings.set("mode", m)
|
||||
},
|
||||
setEffort(e: Effort | null) {
|
||||
app.settings.set("effort", e ?? "off")
|
||||
setEffort(e: Level) {
|
||||
app.settings.set("effort", e)
|
||||
},
|
||||
setTheme(name: string) {
|
||||
try {
|
||||
@@ -246,7 +247,7 @@ export function Root(p: { app: Runtime; view: View; theme: Theme; onQuit: () =>
|
||||
confirmStop("reload", () => {
|
||||
// Back on this session, with what it was using; everything else comes from the files again.
|
||||
const e = app.engine
|
||||
const args = [...(isLocal() ? ["-l"] : []), ...(e.sessionId ? ["-s", e.sessionId] : []), "-m", e.model.ref, "--mode", e.mode, "-e", e.effort ?? "off"]
|
||||
const args = [...(isLocal() ? ["-l"] : []), ...(e.sessionId ? ["-s", e.sessionId] : []), "-m", e.model.ref, "--mode", e.mode, "-e", e.effort]
|
||||
void app
|
||||
.close()
|
||||
.catch(() => {})
|
||||
@@ -402,7 +403,7 @@ export function Root(p: { app: Runtime; view: View; theme: Theme; onQuit: () =>
|
||||
const id = view.shellStart(command)
|
||||
const t0 = performance.now()
|
||||
bashTool
|
||||
.run({ command }, { ...app.engine.o.toolCtx, signal: new AbortController().signal, bashTimeline: false })
|
||||
.run({ command, cwd: app.engine.o.toolCtx.cwd }, { ...app.engine.o.toolCtx, signal: new AbortController().signal, bashTimeline: false })
|
||||
.then((r) => {
|
||||
view.shellEnd(id, r, performance.now() - t0)
|
||||
app.engine.pendingContext.push(`<shell command="${command.replaceAll('"', "'")}">\n${r.output}\n</shell>`)
|
||||
|
||||
Reference in new issue
Block a user