@llmist/cli 15.6.0 → 15.7.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/cli.js CHANGED
@@ -98,7 +98,7 @@ import { Command, InvalidArgumentError as InvalidArgumentError2 } from "commande
98
98
  // package.json
99
99
  var package_default = {
100
100
  name: "@llmist/cli",
101
- version: "15.6.0",
101
+ version: "15.7.0",
102
102
  description: "CLI for llmist - run LLM agents from the command line",
103
103
  type: "module",
104
104
  main: "dist/cli.js",
@@ -154,7 +154,7 @@ var package_default = {
154
154
  node: ">=22.0.0"
155
155
  },
156
156
  dependencies: {
157
- llmist: "^15.6.0",
157
+ llmist: "^15.7.0",
158
158
  "@unblessed/node": "^1.0.0-alpha.23",
159
159
  chalk: "^5.6.2",
160
160
  commander: "^12.1.0",
@@ -168,7 +168,7 @@ var package_default = {
168
168
  zod: "^4.1.12"
169
169
  },
170
170
  devDependencies: {
171
- "@llmist/testing": "^15.6.0",
171
+ "@llmist/testing": "^15.7.0",
172
172
  "@types/diff": "^8.0.0",
173
173
  "@types/js-yaml": "^4.0.9",
174
174
  "@types/marked-terminal": "^6.1.1",
@@ -5187,16 +5187,16 @@ var BlockRenderer = class _BlockRenderer {
5187
5187
  }
5188
5188
  /**
5189
5189
  * Check if a gadget should render as plain text in focused mode.
5190
- * TellUser and AskUser render as text for a chat-like experience.
5190
+ * TellUser, AskUser, and Finish render as text for a chat-like experience.
5191
5191
  */
5192
5192
  shouldRenderAsText(node) {
5193
5193
  if (this.contentFilterMode !== "focused") return false;
5194
5194
  if (node.type !== "gadget") return false;
5195
5195
  const name = node.name;
5196
- return name === "TellUser" || name === "AskUser";
5196
+ return name === "TellUser" || name === "AskUser" || name === "Finish";
5197
5197
  }
5198
5198
  /**
5199
- * Create a text-like block for TellUser/AskUser gadgets in focused mode.
5199
+ * Create a text-like block for TellUser/AskUser/Finish gadgets in focused mode.
5200
5200
  * Renders just the content without the gadget header.
5201
5201
  */
5202
5202
  createTextLikeBlock(node, top) {
@@ -5213,6 +5213,13 @@ ${renderMarkdown(message)}
5213
5213
  if (typeof question === "string") {
5214
5214
  content = `
5215
5215
  ? ${question}
5216
+ `;
5217
+ }
5218
+ } else if (node.name === "Finish") {
5219
+ const message = node.parameters?.message;
5220
+ if (typeof message === "string" && message.trim()) {
5221
+ content = `
5222
+ \x1B[32m\u2713\x1B[0m ${renderMarkdown(message)}
5216
5223
  `;
5217
5224
  }
5218
5225
  }
@@ -5635,7 +5642,7 @@ ${indicator}`;
5635
5642
  return false;
5636
5643
  case "gadget": {
5637
5644
  const name = node.name;
5638
- return name === "TellUser" || name === "AskUser";
5645
+ return name === "TellUser" || name === "AskUser" || name === "Finish";
5639
5646
  }
5640
5647
  default:
5641
5648
  return false;
@@ -6674,10 +6681,18 @@ var KeyboardManager = class {
6674
6681
  onAction({ type: "scroll_page", direction: 1 });
6675
6682
  });
6676
6683
  screen.key(["up", "k"], () => {
6684
+ if (this.config.getContentFilterMode() === "focused") {
6685
+ onAction({ type: "scroll_line", direction: -1 });
6686
+ return;
6687
+ }
6677
6688
  if (this.config.getFocusMode() !== "browse") return;
6678
6689
  onAction({ type: "navigation", action: "select_previous" });
6679
6690
  });
6680
6691
  screen.key(["down", "j"], () => {
6692
+ if (this.config.getContentFilterMode() === "focused") {
6693
+ onAction({ type: "scroll_line", direction: 1 });
6694
+ return;
6695
+ }
6681
6696
  if (this.config.getFocusMode() !== "browse") return;
6682
6697
  onAction({ type: "navigation", action: "select_next" });
6683
6698
  });
@@ -7917,6 +7932,7 @@ var TUIApp = class _TUIApp {
7917
7932
  const keyboardManager = new KeyboardManager({
7918
7933
  screen,
7919
7934
  getFocusMode: () => controller.getFocusMode(),
7935
+ getContentFilterMode: () => controller.getContentFilterMode(),
7920
7936
  isWaitingForREPLPrompt: () => inputHandler.isWaitingForREPLPrompt(),
7921
7937
  hasPendingInput: () => inputHandler.hasPendingInput(),
7922
7938
  isBlockExpanded: () => blockRenderer.getSelectedBlock()?.expanded ?? false,
@@ -8338,6 +8354,14 @@ function handleKeyAction(action, controller, blockRenderer, statusBar, screenCtx
8338
8354
  screenCtx.renderNow();
8339
8355
  break;
8340
8356
  }
8357
+ case "scroll_line": {
8358
+ const body = layout.body;
8359
+ if (!body.scroll) return;
8360
+ body.scroll(action.direction);
8361
+ blockRenderer.handleUserScroll();
8362
+ screenCtx.renderNow();
8363
+ break;
8364
+ }
8341
8365
  case "navigation":
8342
8366
  switch (action.action) {
8343
8367
  case "select_next":