oharness 0.9.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/auth.d.ts CHANGED
@@ -2,6 +2,7 @@ import type { createInterface } from "node:readline/promises";
2
2
  import type { Harness } from "@oharness/engine/harness.ts";
3
3
  import type { Session } from "@oharness/engine/agent/session.ts";
4
4
  import type { AuthManager } from "@oharness/engine/auth/manager.ts";
5
+ import type { AuthorizeResult, CallbackResult } from "@oharness/engine/auth/types.ts";
5
6
  type Readline = ReturnType<typeof createInterface>;
6
7
  /**
7
8
  * The half of a login that is not the flow: showing a list, reading a line,
@@ -29,6 +30,8 @@ export interface LoginIo {
29
30
  secret?: boolean;
30
31
  placeholder?: string;
31
32
  detail?: string[];
33
+ /** Withdraw the question; it then resolves with nothing. */
34
+ signal?: AbortSignal;
32
35
  }): Promise<string | undefined>;
33
36
  /** Report progress or an outcome. */
34
37
  say(text: string): void;
@@ -47,6 +50,19 @@ export declare function runLogin(harness: Harness, io: LoginIo, providerId?: str
47
50
  * switch, and the stored catalog is what the next run reads.
48
51
  */
49
52
  session?: Session): Promise<void>;
53
+ /**
54
+ * Wait for a browser redirect, while offering to take it pasted instead.
55
+ *
56
+ * The redirect lands on this machine's loopback, which a browser on another
57
+ * machine cannot reach — the usual case over SSH. So alongside the wait the
58
+ * address the browser ended on can be pasted back; whichever comes first
59
+ * finishes the sign-in, and the question is taken down if the redirect wins.
60
+ * A paste that is refused says why and asks again; an empty answer stops
61
+ * asking and goes on waiting.
62
+ */
63
+ export declare function waitOrPaste(flow: Extract<AuthorizeResult, {
64
+ method: "auto";
65
+ }>, io: LoginIo): Promise<CallbackResult>;
50
66
  export declare function runLogout(auth: AuthManager, providerId: string): Promise<void>;
51
67
  export declare function printAuthStatus(auth: AuthManager): Promise<void>;
52
68
  /**
package/dist/ui/auth.js CHANGED
@@ -31,6 +31,12 @@ session) {
31
31
  io.say(c.yellow(`${provider.label} declares no login methods.`));
32
32
  return;
33
33
  }
34
+ // Someone with a Claude plan comes here looking for a way to use it. It
35
+ // works in Claude Code, not in other apps, so they are pointed there before
36
+ // being asked for a key they may not want to buy.
37
+ if (provider.id === "anthropic") {
38
+ io.say(c.gray("Have a Claude Pro or Max plan? It works in Claude Code, not in other apps: run /claude (or `claude` in a terminal)."));
39
+ }
34
40
  const methodIndex = await pickMethod(provider.methods, io);
35
41
  if (methodIndex === undefined)
36
42
  return;
@@ -65,7 +71,7 @@ session) {
65
71
  }
66
72
  if (flow.method === "auto") {
67
73
  io.say(c.gray("Waiting for authorization…"));
68
- await auth.complete(provider.id, await flow.callback());
74
+ await auth.complete(provider.id, await waitOrPaste(flow, io));
69
75
  }
70
76
  else {
71
77
  const code = await io.input("Paste the code here");
@@ -95,6 +101,39 @@ session) {
95
101
  sayModelHint(result.models, io);
96
102
  }
97
103
  }
104
+ /**
105
+ * Wait for a browser redirect, while offering to take it pasted instead.
106
+ *
107
+ * The redirect lands on this machine's loopback, which a browser on another
108
+ * machine cannot reach — the usual case over SSH. So alongside the wait the
109
+ * address the browser ended on can be pasted back; whichever comes first
110
+ * finishes the sign-in, and the question is taken down if the redirect wins.
111
+ * A paste that is refused says why and asks again; an empty answer stops
112
+ * asking and goes on waiting.
113
+ */
114
+ export async function waitOrPaste(flow, io) {
115
+ const done = flow.callback();
116
+ if (!flow.paste)
117
+ return done;
118
+ const paste = flow.paste.bind(flow);
119
+ const asking = new AbortController();
120
+ void done.finally(() => asking.abort());
121
+ void (async () => {
122
+ while (!asking.signal.aborted) {
123
+ const pasted = await io.input("Browser on another machine? Paste the address it ended on", {
124
+ placeholder: "http://127.0.0.1:…",
125
+ signal: asking.signal,
126
+ });
127
+ if (pasted === undefined)
128
+ return;
129
+ const refused = paste(pasted);
130
+ if (!refused)
131
+ return;
132
+ io.say(c.yellow(refused));
133
+ }
134
+ })();
135
+ return done;
136
+ }
98
137
  /**
99
138
  * Finish the errand, rather than leaving the last step as homework.
100
139
  *
@@ -375,8 +414,17 @@ export function readlineIo(rl) {
375
414
  const suffix = opts?.placeholder ? c.gray(` (${opts.placeholder})`) : "";
376
415
  const prompt = `\n${message}${suffix}${c.yellow(": ")}`;
377
416
  if (!opts?.secret) {
378
- const answer = await rl.question(prompt);
379
- return answer.trim() === "" ? undefined : answer.trim();
417
+ try {
418
+ const answer = opts?.signal ? await rl.question(prompt, { signal: opts.signal }) : await rl.question(prompt);
419
+ return answer.trim() === "" ? undefined : answer.trim();
420
+ }
421
+ catch (err) {
422
+ if (opts?.signal?.aborted) {
423
+ console.log();
424
+ return undefined;
425
+ }
426
+ throw err;
427
+ }
380
428
  }
381
429
  const iface = rl;
382
430
  const real = iface.output;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/ui/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/ui/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `/claude`: hand the terminal to the user's own Claude Code.
3
+ *
4
+ * The terminal frontends' version of the project menu's "Open in Claude
5
+ * Code". It runs the `claude` the user installed, in this session's folder,
6
+ * with the whole terminal, and comes back when it exits — signed in however
7
+ * they signed it in, which is the one way of using a Claude plan from
8
+ * another app that Anthropic's terms leave plainly open. OHarness starts it
9
+ * and does nothing else.
10
+ */
11
+ export declare const CLAUDE_CODE_URL = "https://claude.com/claude-code";
12
+ export declare function runClaudeCode(cwd: string): Promise<{
13
+ code: number | null;
14
+ } | {
15
+ missing: true;
16
+ } | {
17
+ error: string;
18
+ }>;
19
+ /** One line for the transcript after `/claude` returns, or could not start. */
20
+ export declare function claudeCodeOutcome(result: Awaited<ReturnType<typeof runClaudeCode>>): string;
@@ -0,0 +1,39 @@
1
+ import { spawn } from "node:child_process";
2
+ import { findExecutable } from "@oharness/engine/acp/claude.ts";
3
+ import { spawnTarget } from "@oharness/engine/acp/client.ts";
4
+ /**
5
+ * `/claude`: hand the terminal to the user's own Claude Code.
6
+ *
7
+ * The terminal frontends' version of the project menu's "Open in Claude
8
+ * Code". It runs the `claude` the user installed, in this session's folder,
9
+ * with the whole terminal, and comes back when it exits — signed in however
10
+ * they signed it in, which is the one way of using a Claude plan from
11
+ * another app that Anthropic's terms leave plainly open. OHarness starts it
12
+ * and does nothing else.
13
+ */
14
+ export const CLAUDE_CODE_URL = "https://claude.com/claude-code";
15
+ export async function runClaudeCode(cwd) {
16
+ const names = process.platform === "win32" ? ["claude.exe", "claude.cmd"] : ["claude"];
17
+ const claude = await findExecutable(names);
18
+ if (!claude)
19
+ return { missing: true };
20
+ const target = spawnTarget(claude, []);
21
+ return new Promise((resolve) => {
22
+ const child = spawn(target.command, target.args, {
23
+ cwd,
24
+ stdio: "inherit",
25
+ ...(target.shell ? { shell: true } : {}),
26
+ });
27
+ child.on("error", (err) => resolve({ error: err.message }));
28
+ child.on("exit", (code) => resolve({ code }));
29
+ });
30
+ }
31
+ /** One line for the transcript after `/claude` returns, or could not start. */
32
+ export function claudeCodeOutcome(result) {
33
+ if ("missing" in result)
34
+ return `Claude Code is not installed. Get it at ${CLAUDE_CODE_URL}, then run /claude again.`;
35
+ if ("error" in result)
36
+ return `Could not start Claude Code: ${result.error}`;
37
+ return "Back from Claude Code.";
38
+ }
39
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/ui/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;YAC/C,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,MAAiD;IACjF,IAAI,SAAS,IAAI,MAAM;QAAE,OAAO,2CAA2C,eAAe,2BAA2B,CAAC;IACtH,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,gCAAgC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7E,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
@@ -10,6 +10,7 @@ export const SLASH_COMMANDS = [
10
10
  { name: "model", args: "[id]", description: "Show or switch the model mid-session" },
11
11
  { name: "models", description: "List registered models (/models refresh to re-query providers)" },
12
12
  { name: "login", args: "[prov]", description: "Sign in to a provider (API key or subscription)" },
13
+ { name: "claude", description: "Open Claude Code here, on your own Claude account" },
13
14
  { name: "logout", args: "<prov>", description: "Remove stored credentials" },
14
15
  { name: "auth", description: "Show authentication status" },
15
16
  { name: "tools", description: "List available tools" },
@@ -20,8 +21,10 @@ export const SLASH_COMMANDS = [
20
21
  { name: "mcp", description: "Show MCP server status" },
21
22
  { name: "permissions", description: "Show rules; allow/deny/ask <pattern> [scope] to persist one" },
22
23
  { name: "mode", args: "[m]", description: "Pick the permission mode (no argument opens the picker)" },
24
+ { name: "goal", args: "[text|clear]", description: "Keep working until a goal is done (no argument shows it)" },
23
25
  { name: "compact", description: "Summarize the conversation now" },
24
26
  { name: "todos", description: "Show the current task list" },
27
+ { name: "tasks", args: "[id|stop id|send id text]", description: "Background tasks: list, read one, stop or message it" },
25
28
  { name: "cost", description: "Show token usage and estimated cost" },
26
29
  { name: "sessions", description: "List recent sessions" },
27
30
  { name: "sync", args: "[on|off]", description: "Whether this machine mirrors sessions to a sync server" },
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"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"}
package/dist/ui/main.js CHANGED
@@ -10,11 +10,13 @@ import { makeQuestionPrompt } from "./questions.js";
10
10
  import { MODE_DESCRIPTIONS, MODE_LABELS, PERMISSION_MODES, } from "@oharness/engine/agent/permissions.ts";
11
11
  import { getTodos, renderTodos } from "@oharness/engine/tools/builtin/todo.ts";
12
12
  import { printAuthStatus, readlineIo, runLogin, runLogout } from "./auth.js";
13
+ import { claudeCodeOutcome, runClaudeCode } from "./claude.js";
13
14
  import { visibleText } from "@oharness/engine/core/types.ts";
14
15
  import { previewJson } from "@oharness/engine/util/json.ts";
15
- import { c, explainError, newRenderState, renderEvent } from "./render.js";
16
+ import { c, explainError, goalLine, newRenderState, renderEvent } from "./render.js";
16
17
  import { select } from "./select.js";
17
18
  import { slashHelp } from "./commands.js";
19
+ import { createWorktree, findWorktree, finishWorktree, listWorktrees, worktreeStatus } from "@oharness/engine/worktree/index.ts";
18
20
  import { currentVersion, runUpdateCommand, updateNotice } from "../update.js";
19
21
  /** The interactive readline, when there is one. Pickers need it to pause. */
20
22
  let activeReadline;
@@ -43,6 +45,10 @@ function parseArgs(argv) {
43
45
  case "--permission-mode":
44
46
  args.permissionMode = argv[++i];
45
47
  break;
48
+ case "-w":
49
+ case "--worktree":
50
+ args.worktree = argv[++i];
51
+ break;
46
52
  case "--dangerously-skip-permissions":
47
53
  args.permissionMode = "bypassPermissions";
48
54
  break;
@@ -65,6 +71,7 @@ Usage:
65
71
  oharness auth <login|logout|list> [provider]
66
72
  oharness schedule <list|run|pause|resume|daemon> [name]
67
73
  oharness session <list|show|fork|rename|delete> [id]
74
+ oharness worktree <list|status|finish> [path] [action]
68
75
  oharness update Install the latest version from npm
69
76
 
70
77
  Options:
@@ -72,6 +79,8 @@ Options:
72
79
  -p, --print Run one prompt, print the result, and exit
73
80
  -c, --continue Resume the most recent session in this directory
74
81
  -r, --resume <id> Resume a specific session
82
+ -w, --worktree <task> Start in a new worktree beside this project
83
+ (<project>-<slug>, branch <type>/<slug>)
75
84
  --permission-mode <m> default | acceptEdits | plan | auto | bypassPermissions
76
85
  --dangerously-skip-permissions
77
86
  -v, --version Print the version
@@ -95,6 +104,10 @@ async function main() {
95
104
  await runSessionCommand(argv.slice(1));
96
105
  return;
97
106
  }
107
+ if (argv[0] === "worktree") {
108
+ await runWorktreeCommand(argv.slice(1));
109
+ return;
110
+ }
98
111
  if (argv[0] === "update") {
99
112
  await runUpdateCommand();
100
113
  return;
@@ -127,7 +140,18 @@ async function main() {
127
140
  const tui = useTui(args);
128
141
  const pendingLogs = [];
129
142
  let logLine = (line) => pendingLogs.push(line);
143
+ // A worktree first, so everything after — config, instructions, sessions —
144
+ // belongs to the tree the work happens in.
145
+ let cwd;
146
+ if (args.worktree) {
147
+ const made = await createWorktree(process.cwd(), { task: args.worktree });
148
+ cwd = made.cwd;
149
+ process.chdir(cwd);
150
+ console.log(c.gray(`worktree: ${made.path}${made.branch ? ` on ${made.branch}` : " (a copy of the folder)"}`));
151
+ console.log(c.gray(` finish it with: oharness worktree finish ${made.path} <action>`));
152
+ }
130
153
  const harness = await Harness.create({
154
+ ...(cwd ? { cwd } : {}),
131
155
  permissionPrompt: (request, signal) => activePrompt(request, signal),
132
156
  questionPrompt: (request, signal) => activeQuestions ? activeQuestions(request, signal) : Promise.resolve({ outcome: "unavailable" }),
133
157
  ...(tui ? { logSink: (line) => logLine(line) } : {}),
@@ -205,6 +229,18 @@ async function main() {
205
229
  if (outcome && typeof outcome === "object") {
206
230
  if ("login" in outcome)
207
231
  await runLogin(harness, readlineIo(rl), outcome.login, session);
232
+ else if ("claude" in outcome) {
233
+ // The line editor gives up the terminal for as long as Claude Code has it.
234
+ rl.pause();
235
+ try {
236
+ console.log(c.gray(claudeCodeOutcome(await runClaudeCode(session.cwd))));
237
+ }
238
+ finally {
239
+ rl.resume();
240
+ }
241
+ }
242
+ else if ("prompt" in outcome)
243
+ await runPrompt(outcome.prompt);
208
244
  else {
209
245
  session = outcome.session;
210
246
  agent = outcome.agent;
@@ -308,6 +344,10 @@ async function handleSlashCommand(line, harness, session, agent) {
308
344
  // handled by the caller, which owns the readline instance
309
345
  return { login: arg || undefined };
310
346
  }
347
+ case "claude": {
348
+ // Handled by the caller too: it owns the terminal Claude Code needs.
349
+ return { claude: true };
350
+ }
311
351
  case "logout": {
312
352
  if (!arg) {
313
353
  console.log("Usage: /logout <provider>");
@@ -564,24 +604,95 @@ async function handleSlashCommand(line, harness, session, agent) {
564
604
  console.log(c.magenta(`mode → ${MODE_LABELS[named]}`));
565
605
  return undefined;
566
606
  }
567
- case "compact": {
568
- const { compact } = await import("@oharness/engine/agent/compaction.ts");
569
- const provider = harness.providers.getProvider(session.model.provider);
570
- try {
571
- const result = await compact(session.messages, provider, session.model, {
572
- // Manual compaction is a deliberate act; keep less of the tail.
573
- keepTailFraction: 0.15,
574
- });
575
- if (result.droppedMessages === 0) {
576
- console.log(c.yellow("Nothing safe to compact yet."));
577
- return undefined;
607
+ case "goal": {
608
+ // No argument reports; "clear" drops it; anything else is the goal,
609
+ // and is sent as the first message toward it.
610
+ if (!arg) {
611
+ console.log(session.goal ? goalLine(session.goal) : "No goal set. /goal <what done looks like> sets one.");
612
+ return undefined;
613
+ }
614
+ if (/^(clear|off|stop)$/i.test(arg)) {
615
+ session.goal = undefined;
616
+ await session.persist();
617
+ console.log(c.magenta("goal cleared"));
618
+ return undefined;
619
+ }
620
+ session.setGoal(arg);
621
+ await session.persist();
622
+ console.log(c.magenta(`◎ goal set — working until it is done (Ctrl-C to stop, /goal clear to drop it)`));
623
+ return { prompt: arg };
624
+ }
625
+ case "tasks": {
626
+ const tasks = agent.backgroundTasks;
627
+ if (!tasks) {
628
+ console.log("Background tasks are not available here.");
629
+ return undefined;
630
+ }
631
+ const [sub, id, ...words] = rest;
632
+ if (!sub) {
633
+ const all = tasks.list();
634
+ if (!all.length)
635
+ console.log("No background tasks in this conversation.");
636
+ for (const task of all) {
637
+ const now = task.activity ? c.gray(` · ${task.activity}`) : "";
638
+ console.log(`${task.id} ${task.status.padEnd(9)} ${task.agentType}: ${task.description}${now}`);
578
639
  }
579
- await session.replaceMessages(result.messages);
580
- console.log(c.yellow(`⟳ Compacted ${result.droppedMessages} messages (~${result.tokensBefore} → ~${result.tokensAfter} tokens)`));
640
+ if (all.length)
641
+ console.log(c.gray("/tasks <id> reads one · /tasks send <id> <text> · /tasks stop <id>"));
642
+ return undefined;
581
643
  }
582
- catch (err) {
583
- console.log(c.red(`Compaction failed: ${errorMessage(err)}`));
644
+ if (sub === "stop") {
645
+ if (!id || !tasks.get(id))
646
+ return void console.log("Usage: /tasks stop <id>");
647
+ console.log(tasks.stop(id) ? c.magenta(`stopped ${id}`) : `${id} was already stopped.`);
648
+ return undefined;
584
649
  }
650
+ if (sub === "send") {
651
+ const text = words.join(" ").trim();
652
+ if (!id || !text)
653
+ return void console.log("Usage: /tasks send <id> <text>");
654
+ const sent = tasks.send(id, `[From the person, directly:]\n${text}`);
655
+ const said = {
656
+ interjected: "told it; it reads this at its next step",
657
+ resumed: "running again with your message",
658
+ busy: "it is between steps; try again in a moment",
659
+ stopped: "it was stopped and cannot be continued",
660
+ unknown: `no background task "${id}"`,
661
+ };
662
+ console.log(sent === "interjected" || sent === "resumed" ? c.magenta(said[sent]) : said[sent]);
663
+ return undefined;
664
+ }
665
+ const task = tasks.get(sub);
666
+ if (!task)
667
+ return void console.log(`No background task "${sub}". /tasks lists them.`);
668
+ console.log(`${task.id} ${task.status} ${task.agentType}: ${task.description} · ${task.turns} turns`);
669
+ if (task.worktree)
670
+ console.log(c.gray(task.worktree));
671
+ // The tail of its conversation: what it was told, said and ran.
672
+ for (const message of (agent.backgroundTranscript(sub) ?? []).slice(-24)) {
673
+ const said = visibleText(message).trim();
674
+ if (said)
675
+ console.log(`${message.role === "assistant" ? "◆" : "›"} ${said.length > 600 ? `${said.slice(0, 600)}…` : said}`);
676
+ for (const block of message.content) {
677
+ if (block.type === "tool_call")
678
+ console.log(c.gray(` ${block.name} ${previewJson(block.input, 100)}`));
679
+ }
680
+ }
681
+ if (task.error)
682
+ console.log(c.red(task.error));
683
+ return undefined;
684
+ }
685
+ case "compact": {
686
+ // Through the agent, so what is cut is archived for recall and handed to
687
+ // memory extraction, as when the window fills by itself.
688
+ const event = await agent.compactNow();
689
+ if (!event)
690
+ console.log(c.yellow("Nothing safe to compact yet."));
691
+ else if (event.type === "compacted") {
692
+ console.log(c.yellow(`⟳ Compacted ${event.droppedMessages} messages (~${event.tokensBefore} → ~${event.tokensAfter} tokens)`));
693
+ }
694
+ else if (event.type === "notice")
695
+ console.log(c.red(event.message));
585
696
  return undefined;
586
697
  }
587
698
  case "todos": {
@@ -726,6 +837,51 @@ async function attachImages(prompt, cwd) {
726
837
  return prompt;
727
838
  return [{ role: "user", content: [{ type: "text", text }, ...content] }];
728
839
  }
840
+ /**
841
+ * `oharness worktree`: the worktrees made from here or the app, and the way
842
+ * out of one — the terminal's half of the sidebar's "Finish worktree".
843
+ */
844
+ async function runWorktreeCommand(argv) {
845
+ const [sub, target, action, ...rest] = argv;
846
+ const usage = "usage: oharness worktree <list | status <path> | finish <path> <remove|discard|commit|push|merge|apply> [message]>";
847
+ if (!sub || sub === "list") {
848
+ const all = await listWorktrees();
849
+ if (!all.length)
850
+ return void console.log(c.gray("no worktrees"));
851
+ for (const one of all) {
852
+ const status = await worktreeStatus(one).catch(() => undefined);
853
+ const state = !status ? "?" : !status.exists ? "missing" : status.clean ? "clean" : `${status.commits} commit(s), ${status.changes.length} change(s)`;
854
+ console.log(`${one.path} ${c.gray(one.branch ?? "copy")} ${c.gray(state)}`);
855
+ }
856
+ return;
857
+ }
858
+ const found = target ? await findWorktree(target) : undefined;
859
+ if (!found) {
860
+ console.error(target ? `not a worktree: ${target}` : usage);
861
+ process.exitCode = 1;
862
+ return;
863
+ }
864
+ if (sub === "status") {
865
+ const status = await worktreeStatus(found);
866
+ console.log(JSON.stringify({ ...found, status }, null, 2));
867
+ return;
868
+ }
869
+ if (sub === "finish" && action) {
870
+ try {
871
+ const result = await finishWorktree(found, action, rest.length ? { message: rest.join(" ") } : {});
872
+ console.log(result.message);
873
+ if (result.url)
874
+ console.log(result.url);
875
+ }
876
+ catch (err) {
877
+ console.error(err instanceof Error ? err.message : String(err));
878
+ process.exitCode = 1;
879
+ }
880
+ return;
881
+ }
882
+ console.error(usage);
883
+ process.exitCode = 1;
884
+ }
729
885
  async function runSessionCommand(argv) {
730
886
  const [sub, id, ...rest] = argv;
731
887
  const harness = await Harness.create({ ephemeral: true });
@@ -1103,8 +1259,13 @@ async function runTui(harness, session, agent, args, installPrompt, installLogSi
1103
1259
  const outcome = await handleSlashCommand(line, harness, tui.session, tui.agent);
1104
1260
  if (outcome === "exit")
1105
1261
  return "exit";
1106
- if (outcome && typeof outcome === "object" && "session" in outcome)
1262
+ if (outcome && typeof outcome === "object" && ("session" in outcome || "prompt" in outcome))
1107
1263
  return outcome;
1264
+ if (outcome && typeof outcome === "object" && "claude" in outcome) {
1265
+ const result = await tui.suspendWhile(() => runClaudeCode(tui.session.cwd));
1266
+ tui.write(claudeCodeOutcome(result));
1267
+ return undefined;
1268
+ }
1108
1269
  if (outcome && typeof outcome === "object" && "login" in outcome) {
1109
1270
  // Restore the real console first: the login draws its own overlays
1110
1271
  // and writes into the transcript itself, and the capture above would