@kolisachint/hoocode-agent 0.4.18 → 0.4.20

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.
@@ -24,7 +24,7 @@ import { SessionManager } from "../../core/session-manager.js";
24
24
  import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
25
25
  import { getSubagentPool } from "../../core/subagent-pool-instance.js";
26
26
  import { taskStore } from "../../core/task-store.js";
27
- import { WORDMARK } from "../../core/wordmark.js";
27
+ import { buildCompactWordmark } from "../../core/wordmark.js";
28
28
  import { getChangelogPath, getNewEntries, parseChangelog } from "../../utils/changelog.js";
29
29
  import { copyToClipboard } from "../../utils/clipboard.js";
30
30
  import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
@@ -85,7 +85,7 @@ function isDeadTerminalError(error) {
85
85
  const code = error.code;
86
86
  return code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code);
87
87
  }
88
- const ANTHROPIC_SUBSCRIPTION_AUTH_WARNING = "Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage.";
88
+ const ANTHROPIC_SUBSCRIPTION_AUTH_WARNING = "Anthropic subscription auth: billed per token as extra usage, not plan limits.";
89
89
  function isAnthropicSubscriptionAuthKey(apiKey) {
90
90
  return typeof apiKey === "string" && apiKey.startsWith("sk-ant-oat");
91
91
  }
@@ -403,8 +403,17 @@ export class InteractiveMode {
403
403
  // Add header with keybindings from config (unless silenced)
404
404
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
405
405
  const termW = this.ui.terminal.columns;
406
- const logo = termW >= 70
407
- ? `${theme.fg("accent", WORDMARK)}\n${theme.fg("dim", `v${this.version}`)}`
406
+ const logo = termW >= 40
407
+ ? buildCompactWordmark({
408
+ appName: APP_NAME,
409
+ version: this.version,
410
+ cwd: this.formatDisplayPath(this.sessionManager.getCwd()),
411
+ accent: (text) => theme.fg("accent", text),
412
+ dim: (text) => theme.fg("dim", text),
413
+ muted: (text) => theme.fg("muted", text),
414
+ cursor: (text) => theme.blink(theme.fg("accent", text)),
415
+ note: () => theme.fg("dim", ` ${keyText("app.tools.expand")} more`),
416
+ })
408
417
  : theme.bold(theme.fg("accent", APP_NAME)) + theme.fg("dim", ` v${this.version}`);
409
418
  // Build startup instructions using keybinding hint helpers
410
419
  const hint = (keybinding, description) => keyHint(keybinding, description);
@@ -429,20 +438,10 @@ export class InteractiveMode {
429
438
  hint("app.clipboard.pasteImage", "to paste image"),
430
439
  rawKeyHint("drop files", "to attach"),
431
440
  ].join("\n");
432
- const compactInstructions = [
433
- hint("app.interrupt", "interrupt"),
434
- rawKeyHint(`${keyText("app.clear")}/${keyText("app.exit")}`, "clear/exit"),
435
- rawKeyHint("/", "commands"),
436
- rawKeyHint("!", "bash"),
437
- hint("app.tools.expand", "more"),
438
- ].join(theme.fg("muted", " · "));
439
- const compactOnboarding = theme.fg("dim", `Press ${keyText("app.tools.expand")} to show full startup help and loaded resources.`);
440
441
  const onboarding = theme.fg("dim", `${APP_NAME} can explain its own features and look up its docs. Ask it how to use or extend ${APP_NAME}.`);
441
- this.builtInHeader = new ExpandableText(() => `${logo}\n${compactInstructions}\n${compactOnboarding}\n\n${onboarding}`, () => `${logo}\n${expandedInstructions}\n\n${onboarding}`, this.getStartupExpansionState(), 1, 0);
442
+ this.builtInHeader = new ExpandableText(() => logo, () => `${logo}\n${expandedInstructions}\n\n${onboarding}`, this.getStartupExpansionState(), 1, 0);
442
443
  // Setup UI layout
443
- this.headerContainer.addChild(new Spacer(1));
444
444
  this.headerContainer.addChild(this.builtInHeader);
445
- this.headerContainer.addChild(new Spacer(1));
446
445
  }
447
446
  else {
448
447
  // Minimal header when silenced
@@ -1002,6 +1001,7 @@ export class InteractiveMode {
1002
1001
  }
1003
1002
  }
1004
1003
  if (showListing) {
1004
+ this.chatContainer.addChild(new Spacer(1));
1005
1005
  const { agentsFiles: contextFiles, warnings: contextWarnings } = this.session.resourceLoader.getAgentsFiles();
1006
1006
  const skills = skillsResult.skills;
1007
1007
  const templates = this.session.promptTemplates;
@@ -1016,7 +1016,6 @@ export class InteractiveMode {
1016
1016
  metaItems.push("subagent_system_prompt");
1017
1017
  }
1018
1018
  if (totalItems > 0 && totalItems <= 5) {
1019
- this.chatContainer.addChild(new Spacer(1));
1020
1019
  const allCompactItems = [...metaItems];
1021
1020
  if (contextFiles.length > 0) {
1022
1021
  allCompactItems.push(...contextFiles.map((contextFile) => this.formatContextPath(contextFile.path)));
@@ -1033,14 +1032,12 @@ export class InteractiveMode {
1033
1032
  if (customThemes.length > 0) {
1034
1033
  allCompactItems.push(...customThemes.map((loadedTheme) => loadedTheme.name ?? this.getCompactPathLabel(loadedTheme.sourcePath, loadedTheme.sourceInfo)));
1035
1034
  }
1036
- addLoadedSection("Resources", formatCompactList(allCompactItems), formatCompactList(allCompactItems));
1035
+ this.chatContainer.addChild(new Text(`${theme.fg("mdHeading", "[Resources]")} ${theme.fg("dim", allCompactItems.join(", "))}`, 0, 0));
1037
1036
  }
1038
1037
  else if (totalItems === 0) {
1039
- this.chatContainer.addChild(new Spacer(1));
1040
- addLoadedSection("Resources", formatCompactList(metaItems), formatCompactList(metaItems));
1038
+ this.chatContainer.addChild(new Text(`${theme.fg("mdHeading", "[Resources]")} ${theme.fg("dim", metaItems.join(", "))}`, 0, 0));
1041
1039
  }
1042
1040
  else {
1043
- this.chatContainer.addChild(new Spacer(1));
1044
1041
  addLoadedSection("Resources", formatCompactList(metaItems), formatCompactList(metaItems));
1045
1042
  if (contextFiles.length > 0) {
1046
1043
  this.chatContainer.addChild(new Spacer(1));
@@ -1099,9 +1096,8 @@ export class InteractiveMode {
1099
1096
  }
1100
1097
  if (contextWarnings.length > 0) {
1101
1098
  for (const warning of contextWarnings) {
1102
- this.chatContainer.addChild(new Text(theme.fg("warning", ` ${warning}`), 0, 0));
1099
+ this.chatContainer.addChild(new Text(theme.fg("warning", warning), 0, 0));
1103
1100
  }
1104
- this.chatContainer.addChild(new Spacer(1));
1105
1101
  }
1106
1102
  }
1107
1103
  if (showDiagnostics) {
@@ -2967,8 +2963,7 @@ export class InteractiveMode {
2967
2963
  this.ui.requestRender();
2968
2964
  }
2969
2965
  showWarning(warningMessage) {
2970
- this.chatContainer.addChild(new Spacer(1));
2971
- this.chatContainer.addChild(new Text(theme.fg("warning", `Warning: ${warningMessage}`), 1, 0));
2966
+ this.chatContainer.addChild(new Text(theme.fg("warning", warningMessage), 1, 0));
2972
2967
  this.ui.requestRender();
2973
2968
  }
2974
2969
  showNewVersionNotification(newVersion) {