@mrquake/quakecode-cli 0.64.8 → 0.64.10

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.
Files changed (28) hide show
  1. package/dist/core/settings-manager.d.ts.map +1 -1
  2. package/dist/core/settings-manager.js +8 -1
  3. package/dist/core/settings-manager.js.map +1 -1
  4. package/dist/core/system-prompt.d.ts.map +1 -1
  5. package/dist/core/system-prompt.js +31 -0
  6. package/dist/core/system-prompt.js.map +1 -1
  7. package/dist/core/tools/bash.d.ts.map +1 -1
  8. package/dist/core/tools/bash.js +4 -0
  9. package/dist/core/tools/bash.js.map +1 -1
  10. package/dist/core/tools/web-runtime.d.ts +36 -0
  11. package/dist/core/tools/web-runtime.d.ts.map +1 -0
  12. package/dist/core/tools/web-runtime.js +127 -0
  13. package/dist/core/tools/web-runtime.js.map +1 -0
  14. package/dist/core/tools/web-search.d.ts +32 -0
  15. package/dist/core/tools/web-search.d.ts.map +1 -0
  16. package/dist/core/tools/web-search.js +176 -0
  17. package/dist/core/tools/web-search.js.map +1 -0
  18. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  19. package/dist/modes/interactive/components/assistant-message.js +48 -9
  20. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  21. package/dist/modes/interactive/components/tool-execution.d.ts +1 -0
  22. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  23. package/dist/modes/interactive/components/tool-execution.js +11 -9
  24. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  25. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  26. package/dist/modes/interactive/interactive-mode.js +31 -37
  27. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  28. package/package.json +2 -2
@@ -300,51 +300,45 @@ export class InteractiveMode {
300
300
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
301
301
  const currentModel = this.session.model?.id ?? "no model";
302
302
  const cwd = this.sessionManager.getCwd();
303
- const owner = os.userInfo().username;
304
- const title = `${DISPLAY_NAME} v${this.version}`;
305
- const leftInner = 44;
306
- const maxTotalWidth = Math.max(128, Math.min(this.ui.terminal.columns - 6, 172));
307
- const rightInner = maxTotalWidth - leftInner - 7;
308
- const totalWidth = leftInner + rightInner + 7;
303
+ const innerWidth = Math.max(56, Math.min(this.ui.terminal.columns - 8, 84));
309
304
  const border = (s) => theme.fg("borderAccent", s);
310
- const accent = (s) => theme.bold(theme.fg("accent", s));
311
305
  const fit = (text, width) => {
312
306
  let out = text;
313
- while (visibleWidth(out) > width && out.length > 0) {
307
+ while (visibleWidth(out) > width && out.length > 0)
314
308
  out = out.slice(0, -1);
315
- }
316
309
  if (visibleWidth(text) > width) {
317
310
  while (visibleWidth(`${out}…`) > width && out.length > 0)
318
311
  out = out.slice(0, -1);
319
312
  out = `${out}…`;
320
313
  }
321
- const remaining = Math.max(0, width - visibleWidth(out));
322
- return out + " ".repeat(remaining);
314
+ return out + " ".repeat(Math.max(0, width - visibleWidth(out)));
323
315
  };
324
- const row = (left, right) => `${border("")} ${fit(left, leftInner)} ${border("│")} ${fit(right, rightInner)} ${border("│")}`;
325
- const top = `╭── ${title} ${"─".repeat(Math.max(0, totalWidth - title.length - 5))}╮`;
326
- const bottom = `╰${"─".repeat(totalWidth - 2)}╯`;
327
- const logo1 = accent(" ██████╗ ██╗ ██╗ █████╗ ██╗ ██╗███████╗ ");
328
- const logo2 = accent("██╔═══██╗██║ ██║██╔══██╗██║ ██╔╝██╔════╝ ");
329
- const logo3 = accent("██║ ██║██║ ██║███████║█████╔╝ █████╗ ");
330
- const logo4 = accent("██║▄▄ ██║██║ ██║██╔══██║██╔═██╗ ██╔══╝ ");
331
- const logo5 = accent("╚██████╔╝╚██████╔╝██║ ██║██║ ██╗███████╗ ");
332
- const logo6 = accent(" ╚══▀▀═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ");
333
- const quick = theme.fg("muted", "/login") + " · " + theme.fg("muted", "/model") + " · " + theme.fg("muted", "/resume") + " · " + theme.fg("muted", "/agents");
334
- const tips = `${theme.bold("Quick start")} ${quick}`;
335
- const status = `${theme.bold("Model")} ${theme.fg("borderAccent", currentModel)} · ${theme.bold("User")} ${owner}`;
336
- const workspace = `${theme.bold("Workspace")} ${cwd}`;
337
- const note = theme.fg("dim", "Built for terminal-native coding, sessions, tools, and fast iteration.");
316
+ const row = (text = "") => `${border("│")} ${fit(text, innerWidth)} ${border("│")}`;
317
+ const top = `${border("╭")}${border("─".repeat(innerWidth + 2))}${border("╮")}`;
318
+ const bottom = `${border("╰")}${border("─".repeat(innerWidth + 2))}${border("╯")}`;
319
+ const modelLine = `${theme.fg("dim", "model:")} ${theme.fg("accent", currentModel)} ${theme.fg("accent", "/model")} ${theme.fg("dim", "to change")}`;
320
+ const dirLine = `${theme.fg("dim", "directory:")} ${cwd}`;
321
+ const help1 = theme.fg("dim", "To get started, describe a task or try one of these commands:");
322
+ const help2 = ` ${theme.fg("accent", "/settings")} ${theme.fg("dim", "- open the settings menu")}`;
323
+ const help3 = ` ${theme.fg("accent", "/model")} ${theme.fg("dim", "- choose what model to use")}`;
324
+ const help4 = ` ${theme.fg("accent", "/resume")} ${theme.fg("dim", "- resume a different session")}`;
325
+ const help5 = ` ${theme.fg("accent", "/session")} ${theme.fg("dim", "- show current session info and stats")}`;
326
+ const help6 = ` ${theme.fg("accent", "/changelog")} ${theme.fg("dim", "- view recent updates")}`;
338
327
  const dashboard = [
339
- border(top),
340
- row(logo1, `${theme.bold("Welcome back")} ${owner}`),
341
- row(logo2, tips),
342
- row(logo3, "Run /init to generate AGENTS.md for this repo."),
343
- row(logo4, "Use Tab for completion, Ctrl+R to resume, and /settings to tune Quake."),
344
- row(logo5, status),
345
- row(logo6, workspace),
346
- row(theme.fg("dim", " "), note),
347
- border(bottom),
328
+ top,
329
+ row(`${theme.fg("dim", ">_ ")}${theme.bold("Quake")}${theme.fg("dim", ` (v${this.version})`)}`),
330
+ row(),
331
+ row(modelLine),
332
+ row(dirLine),
333
+ bottom,
334
+ "",
335
+ help1,
336
+ "",
337
+ help2,
338
+ help3,
339
+ help4,
340
+ help5,
341
+ help6,
348
342
  ].join("\n");
349
343
  this.builtInHeader = new Text(dashboard, 1, 0);
350
344
  // Setup UI layout
@@ -426,9 +420,9 @@ export class InteractiveMode {
426
420
  // Add spinner if agent is thinking or working
427
421
  const isActive = this.session.agent.state.isStreaming || this.session.agent.state.pendingToolCalls.size > 0;
428
422
  if (isActive) {
429
- const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
430
- const frame = frames[Math.floor(Date.now() / 100) % frames.length];
431
- this.ui.terminal.setTitle(`${frame} ${title}`);
423
+ const isBlinkOn = Math.floor((Date.now() / 100) / 6) % 2 === 0;
424
+ const dot = isBlinkOn ? "•" : "◦";
425
+ this.ui.terminal.setTitle(`${dot} ${title}`);
432
426
  }
433
427
  else {
434
428
  this.ui.terminal.setTitle(title);