@goah/cli 0.13.3 → 0.13.5

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/cli.js CHANGED
@@ -25,14 +25,14 @@ import {
25
25
  streamEvents,
26
26
  updateWorkspaceRunnerProfile,
27
27
  writeDefaultConfig
28
- } from "./chunk-KJ4HJCTK.js";
28
+ } from "./chunk-ORAANUAR.js";
29
29
  import {
30
30
  runnerManifests,
31
31
  runnerPlugin
32
- } from "./chunk-D2DVAH37.js";
33
- import "./chunk-YH6YJ2IB.js";
34
- import "./chunk-QBD6EJ2Z.js";
35
- import "./chunk-7E7V6OIU.js";
32
+ } from "./chunk-J32EKOQ4.js";
33
+ import "./chunk-CDELLMIJ.js";
34
+ import "./chunk-RDUUXBZ2.js";
35
+ import "./chunk-24NAHA3D.js";
36
36
  import "./chunk-6M3OOCKO.js";
37
37
  import "./chunk-K26BVR6O.js";
38
38
  import "./chunk-IIJQ3DW4.js";
@@ -12670,6 +12670,9 @@ var ConversationView = class {
12670
12670
  this.entries.push({ kind: "component", component });
12671
12671
  }
12672
12672
  addText(content) {
12673
+ const previous = this.entries.at(-1);
12674
+ if (previous?.kind === "text" && previous.content === content)
12675
+ return;
12673
12676
  this.entries.push({ kind: "text", content });
12674
12677
  this.trim();
12675
12678
  }
@@ -12677,20 +12680,27 @@ var ConversationView = class {
12677
12680
  this.entries.push({ kind: "user", content });
12678
12681
  this.trim();
12679
12682
  }
12680
- addMarkdown(content) {
12683
+ addMarkdown(content, messageId) {
12681
12684
  this.liveMarkdown = "";
12682
12685
  content = content.trim();
12683
12686
  if (!content)
12684
12687
  return;
12688
+ if (messageId && this.entries.some((entry) => entry.kind === "markdown" && entry.messageId === messageId))
12689
+ return;
12685
12690
  const previous = this.entries.at(-1);
12686
12691
  if (previous?.kind === "markdown" && previous.content === content)
12687
12692
  return;
12688
- this.entries.push({ kind: "markdown", content });
12693
+ this.entries.push({ kind: "markdown", content, ...messageId ? { messageId } : {} });
12689
12694
  this.trim();
12690
12695
  }
12691
12696
  appendLiveMarkdown(content) {
12692
12697
  this.liveMarkdown += content;
12693
12698
  }
12699
+ setLive(text, thinking, thinkingActive) {
12700
+ this.liveMarkdown = text;
12701
+ this.liveThinking = thinking;
12702
+ this.thinkingActive = thinkingActive;
12703
+ }
12694
12704
  clearLiveMarkdown() {
12695
12705
  this.liveMarkdown = "";
12696
12706
  }
@@ -12990,14 +13000,14 @@ async function runGoahTui(configPath, stateDir, initialMessage) {
12990
13000
  transcriptView.appendLiveMarkdown(text);
12991
13001
  tui.requestRender();
12992
13002
  };
12993
- const commitLive = (text) => {
13003
+ const commitLive = (text, messageId) => {
12994
13004
  transcriptView.clearLiveMarkdown();
12995
13005
  if (text)
12996
- transcriptView.addMarkdown(text);
13006
+ transcriptView.addMarkdown(text, messageId);
12997
13007
  tui.requestRender();
12998
13008
  };
12999
- const pushResponse = (text) => {
13000
- transcriptView.addMarkdown(text);
13009
+ const pushResponse = (text, messageId) => {
13010
+ transcriptView.addMarkdown(text, messageId);
13001
13011
  tui.requestRender();
13002
13012
  };
13003
13013
  const updateTool = (activity) => {
@@ -13008,6 +13018,10 @@ async function runGoahTui(configPath, stateDir, initialMessage) {
13008
13018
  transcriptView.updateThinking(activity);
13009
13019
  tui.requestRender();
13010
13020
  };
13021
+ const replaceLive = (text, thinking, thinkingActive) => {
13022
+ transcriptView.setLive(text, thinking, thinkingActive);
13023
+ tui.requestRender();
13024
+ };
13011
13025
  const setWakeState = (mode) => {
13012
13026
  statusView.setText(statusText(mode, mode === "queued" ? 1 : queued.length));
13013
13027
  tui.requestRender();
@@ -13069,7 +13083,7 @@ async function runGoahTui(configPath, stateDir, initialMessage) {
13069
13083
  activeInteractionTurnId = frame.turnId;
13070
13084
  if (frame.type === "result" || frame.type === "error")
13071
13085
  activeInteractionTurnId = null;
13072
- renderFrame(frame, push, appendLive, commitLive, pushResponse, updateTool, updateThinking, setWakeState, () => commitLive(""));
13086
+ renderFrame(frame, push, appendLive, commitLive, pushResponse, updateTool, updateThinking, setWakeState, () => commitLive(""), replaceLive);
13073
13087
  }, controller.signal);
13074
13088
  } catch (error) {
13075
13089
  if (!ownsStream) {
@@ -13121,7 +13135,7 @@ async function runGoahTui(configPath, stateDir, initialMessage) {
13121
13135
  return;
13122
13136
  if (frame.type === "result" || frame.type === "error")
13123
13137
  activeInteractionTurnId = null;
13124
- renderFrame(frame, push, appendLive, commitLive, pushResponse, updateTool, updateThinking, setWakeState, () => commitLive(""));
13138
+ renderFrame(frame, push, appendLive, commitLive, pushResponse, updateTool, updateThinking, setWakeState, () => commitLive(""), replaceLive);
13125
13139
  }, controller.signal);
13126
13140
  } catch (error) {
13127
13141
  if (streams.isCurrent(controller) && !controller.signal.aborted)
@@ -13389,6 +13403,7 @@ function frameToLine(frame) {
13389
13403
  function renderFrame(frame, push, appendLive = push, commitLive = push, pushResponse = push, updateTool = (activity) => push(toolActivityLine(activity)), updateThinking = () => {
13390
13404
  }, setWakeState = () => {
13391
13405
  }, clearLive = () => {
13406
+ }, replaceLive = () => {
13392
13407
  }) {
13393
13408
  if (frame.type === "error") {
13394
13409
  updateThinking({ phase: "clear", text: "" });
@@ -13430,6 +13445,10 @@ function renderFrame(frame, push, appendLive = push, commitLive = push, pushResp
13430
13445
  setWakeState("working");
13431
13446
  return;
13432
13447
  }
13448
+ if (record.type === "message.assistant.live") {
13449
+ replaceLive(typeof data.text === "string" ? data.text : "", typeof data.thinking === "string" ? data.thinking : "", data.thinkingActive === true);
13450
+ return;
13451
+ }
13433
13452
  if (record.type === "tool.called") {
13434
13453
  updateThinking({ phase: "done", text: "" });
13435
13454
  updateTool({ kind: "tool", callId: String(data.callId ?? "tool"), name: String(data.name ?? "tool"), detail: toolDetail(data.arguments), status: "running" });
@@ -13457,15 +13476,16 @@ function renderFrame(frame, push, appendLive = push, commitLive = push, pushResp
13457
13476
  return;
13458
13477
  }
13459
13478
  const text = messageText(message.content);
13479
+ const messageId = typeof message.id === "string" ? message.id : void 0;
13460
13480
  if (data.commitState === "provisional") {
13461
13481
  clearLive();
13462
13482
  return;
13463
13483
  }
13464
13484
  if (text)
13465
- commitLive(text);
13485
+ commitLive(text, messageId);
13466
13486
  } else if (record.type === "response.committed") {
13467
13487
  if (typeof data.text === "string" && data.text.trim())
13468
- commitLive(data.text.trim());
13488
+ commitLive(data.text.trim(), typeof data.messageItemId === "string" ? data.messageItemId : void 0);
13469
13489
  } else if (record.type === "handoff.recorded") {
13470
13490
  if (typeof data.goalId === "string")
13471
13491
  push(`${data.outcome === "blocked" ? tuiTheme.error("goal blocked") : tuiTheme.success("goal saved")} ${tuiTheme.muted(`${String(data.outcome).replaceAll("_", " ")} \xB7 record r${String(data.recordRevision)}`)}`);
@@ -13955,7 +13975,7 @@ async function main() {
13955
13975
  console.log(JSON.stringify({ goal }, null, 2));
13956
13976
  } else if (command === "dashboard") {
13957
13977
  const path4 = option("--output") ?? join7(config.stateDir, "status.html");
13958
- writeFileSync(path4, (await import("./dist-KNR2XL6J.js")).renderDashboard(ledger));
13978
+ writeFileSync(path4, (await import("./dist-EYYNPOYG.js")).renderDashboard(ledger));
13959
13979
  console.log(path4);
13960
13980
  } else
13961
13981
  throw new Error(`unknown command: ${command}`);
@@ -13965,7 +13985,7 @@ async function main() {
13965
13985
  }
13966
13986
  }
13967
13987
  async function run(supervisor, signal) {
13968
- const { runSupervisorDaemon } = await import("./dist-KNR2XL6J.js");
13988
+ const { runSupervisorDaemon } = await import("./dist-EYYNPOYG.js");
13969
13989
  await runSupervisorDaemon(supervisor, { signal });
13970
13990
  }
13971
13991
  async function waitForConsole(stateDir) {
@@ -14200,7 +14220,7 @@ async function runRunnerCommand(command, commandArgs, configPath) {
14200
14220
  async function runRunnerEarly(configPath) {
14201
14221
  const action = args[1] ?? "list";
14202
14222
  if (action === "list") {
14203
- for (const manifest of (await import("./runner-registry-GD4BYCQC.js")).runnerManifests())
14223
+ for (const manifest of (await import("./runner-registry-XCGUS2P3.js")).runnerManifests())
14204
14224
  console.log(`${manifest.id.padEnd(16)} ${manifest.description}`);
14205
14225
  return;
14206
14226
  }