@kolisachint/hoocode-agent 0.4.21 → 0.4.23

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 (118) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cli/args.d.ts +1 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +5 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/config.d.ts +2 -6
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +5 -9
  9. package/dist/config.js.map +1 -1
  10. package/dist/core/agent-frontmatter.d.ts +3 -0
  11. package/dist/core/agent-frontmatter.d.ts.map +1 -1
  12. package/dist/core/agent-frontmatter.js +41 -1
  13. package/dist/core/agent-frontmatter.js.map +1 -1
  14. package/dist/core/agent-manifest-paths.d.ts +17 -0
  15. package/dist/core/agent-manifest-paths.d.ts.map +1 -0
  16. package/dist/core/agent-manifest-paths.js +27 -0
  17. package/dist/core/agent-manifest-paths.js.map +1 -0
  18. package/dist/core/agent-registry.d.ts +14 -7
  19. package/dist/core/agent-registry.d.ts.map +1 -1
  20. package/dist/core/agent-registry.js +114 -8
  21. package/dist/core/agent-registry.js.map +1 -1
  22. package/dist/core/agent-session.d.ts.map +1 -1
  23. package/dist/core/agent-session.js +9 -0
  24. package/dist/core/agent-session.js.map +1 -1
  25. package/dist/core/extensions/index.d.ts +1 -1
  26. package/dist/core/extensions/index.d.ts.map +1 -1
  27. package/dist/core/extensions/index.js.map +1 -1
  28. package/dist/core/extensions/runner.d.ts.map +1 -1
  29. package/dist/core/extensions/runner.js +1 -0
  30. package/dist/core/extensions/runner.js.map +1 -1
  31. package/dist/core/extensions/types.d.ts +26 -0
  32. package/dist/core/extensions/types.d.ts.map +1 -1
  33. package/dist/core/extensions/types.js.map +1 -1
  34. package/dist/core/keybindings.d.ts +8 -0
  35. package/dist/core/keybindings.d.ts.map +1 -1
  36. package/dist/core/keybindings.js +2 -0
  37. package/dist/core/keybindings.js.map +1 -1
  38. package/dist/core/package-manager.d.ts +2 -1
  39. package/dist/core/package-manager.d.ts.map +1 -1
  40. package/dist/core/package-manager.js +38 -9
  41. package/dist/core/package-manager.js.map +1 -1
  42. package/dist/core/resource-loader.d.ts +14 -0
  43. package/dist/core/resource-loader.d.ts.map +1 -1
  44. package/dist/core/resource-loader.js +12 -0
  45. package/dist/core/resource-loader.js.map +1 -1
  46. package/dist/core/sdk.d.ts +2 -0
  47. package/dist/core/sdk.d.ts.map +1 -1
  48. package/dist/core/sdk.js +1 -1
  49. package/dist/core/sdk.js.map +1 -1
  50. package/dist/core/skills.d.ts +9 -0
  51. package/dist/core/skills.d.ts.map +1 -1
  52. package/dist/core/skills.js +32 -1
  53. package/dist/core/skills.js.map +1 -1
  54. package/dist/core/source-info.d.ts +1 -1
  55. package/dist/core/source-info.d.ts.map +1 -1
  56. package/dist/core/source-info.js.map +1 -1
  57. package/dist/core/subagent-pool-instance.d.ts +7 -0
  58. package/dist/core/subagent-pool-instance.d.ts.map +1 -1
  59. package/dist/core/subagent-pool-instance.js +14 -1
  60. package/dist/core/subagent-pool-instance.js.map +1 -1
  61. package/dist/core/subagent-pool.d.ts +10 -0
  62. package/dist/core/subagent-pool.d.ts.map +1 -1
  63. package/dist/core/subagent-pool.js +14 -2
  64. package/dist/core/subagent-pool.js.map +1 -1
  65. package/dist/core/system-prompt.d.ts +7 -0
  66. package/dist/core/system-prompt.d.ts.map +1 -1
  67. package/dist/core/system-prompt.js +15 -3
  68. package/dist/core/system-prompt.js.map +1 -1
  69. package/dist/core/tools/bash.d.ts +10 -0
  70. package/dist/core/tools/bash.d.ts.map +1 -1
  71. package/dist/core/tools/bash.js +34 -0
  72. package/dist/core/tools/bash.js.map +1 -1
  73. package/dist/extensions/core/hoo-core.d.ts +10 -3
  74. package/dist/extensions/core/hoo-core.d.ts.map +1 -1
  75. package/dist/extensions/core/hoo-core.js +254 -13
  76. package/dist/extensions/core/hoo-core.js.map +1 -1
  77. package/dist/init-templates.generated.d.ts.map +1 -1
  78. package/dist/init-templates.generated.js +5 -4
  79. package/dist/init-templates.generated.js.map +1 -1
  80. package/dist/init.d.ts.map +1 -1
  81. package/dist/init.js +6 -2
  82. package/dist/init.js.map +1 -1
  83. package/dist/main.d.ts.map +1 -1
  84. package/dist/main.js +4 -0
  85. package/dist/main.js.map +1 -1
  86. package/dist/modes/interactive/components/ask-options.d.ts +44 -0
  87. package/dist/modes/interactive/components/ask-options.d.ts.map +1 -0
  88. package/dist/modes/interactive/components/ask-options.js +202 -0
  89. package/dist/modes/interactive/components/ask-options.js.map +1 -0
  90. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  91. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  92. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  93. package/dist/modes/interactive/components/index.d.ts +1 -0
  94. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  95. package/dist/modes/interactive/components/index.js +1 -0
  96. package/dist/modes/interactive/components/index.js.map +1 -1
  97. package/dist/modes/interactive/components/task-panel.d.ts +15 -4
  98. package/dist/modes/interactive/components/task-panel.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/task-panel.js +178 -63
  100. package/dist/modes/interactive/components/task-panel.js.map +1 -1
  101. package/dist/modes/interactive/interactive-mode.d.ts +10 -0
  102. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  103. package/dist/modes/interactive/interactive-mode.js +50 -1
  104. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  105. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  106. package/dist/modes/rpc/rpc-mode.js +26 -0
  107. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  108. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  109. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  110. package/examples/extensions/sandbox/package.json +1 -1
  111. package/examples/extensions/with-deps/package.json +1 -1
  112. package/examples/sdk/12-full-control.ts +2 -0
  113. package/package.json +4 -4
  114. package/templates/agents/doc.md +1 -1
  115. package/templates/agents/edit.md +1 -0
  116. package/templates/agents/explore.md +3 -3
  117. package/templates/agents/general-purpose.md +36 -0
  118. package/templates/agents/review.md +2 -2
@@ -34,6 +34,7 @@ import { killTrackedDetachedChildren } from "../../utils/shell.js";
34
34
  import { ensureTool } from "../../utils/tools-manager.js";
35
35
  import { checkForNewHooCodeVersion } from "../../utils/version-check.js";
36
36
  import { ArminComponent } from "./components/armin.js";
37
+ import { AskOptionsComponent } from "./components/ask-options.js";
37
38
  import { AssistantMessageComponent } from "./components/assistant-message.js";
38
39
  import { BashExecutionComponent } from "./components/bash-execution.js";
39
40
  import { BorderedLoader } from "./components/bordered-loader.js";
@@ -178,6 +179,7 @@ export class InteractiveMode {
178
179
  // Extension UI state
179
180
  extensionSelector = undefined;
180
181
  extensionInput = undefined;
182
+ askOptions = undefined;
181
183
  extensionEditor = undefined;
182
184
  extensionTerminalInputUnsubscribers = new Set();
183
185
  // Extension widgets (components rendered above/below the editor)
@@ -242,7 +244,7 @@ export class InteractiveMode {
242
244
  this.footer = new FooterComponent(this.session, this.footerDataProvider);
243
245
  this.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);
244
246
  this.footerDataProvider.setSubagentEnabled(this.session.getActiveToolNames().includes("Task"));
245
- this.taskPanel = new TaskPanelComponent();
247
+ this.taskPanel = new TaskPanelComponent(this.ui);
246
248
  // Load hide thinking block setting
247
249
  this.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();
248
250
  // Register themes from resource loader and initialize
@@ -1428,6 +1430,9 @@ export class InteractiveMode {
1428
1430
  if (this.extensionInput) {
1429
1431
  this.hideExtensionInput();
1430
1432
  }
1433
+ if (this.askOptions) {
1434
+ this.hideAskOptions();
1435
+ }
1431
1436
  if (this.extensionEditor) {
1432
1437
  this.hideExtensionEditor();
1433
1438
  }
@@ -1568,6 +1573,7 @@ export class InteractiveMode {
1568
1573
  select: (title, options, opts) => this.showExtensionSelector(title, options, opts),
1569
1574
  confirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),
1570
1575
  input: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),
1576
+ askOptions: (questions, opts) => this.showAskOptions(questions, opts),
1571
1577
  notify: (message, type) => this.showExtensionNotify(message, type),
1572
1578
  onTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),
1573
1579
  setStatus: (key, text) => this.setExtensionStatus(key, text),
@@ -1664,6 +1670,48 @@ export class InteractiveMode {
1664
1670
  this.ui.setFocus(this.editor);
1665
1671
  this.ui.requestRender();
1666
1672
  }
1673
+ /**
1674
+ * Show the options pane — the agent asking the user one or more questions.
1675
+ * Resolves with one answer per question, or undefined if skipped/aborted.
1676
+ */
1677
+ showAskOptions(questions, opts) {
1678
+ return new Promise((resolve) => {
1679
+ if (!questions.length || opts?.signal?.aborted) {
1680
+ resolve(undefined);
1681
+ return;
1682
+ }
1683
+ const onAbort = () => {
1684
+ this.hideAskOptions();
1685
+ resolve(undefined);
1686
+ };
1687
+ opts?.signal?.addEventListener("abort", onAbort, { once: true });
1688
+ this.askOptions = new AskOptionsComponent(questions, (answers) => {
1689
+ opts?.signal?.removeEventListener("abort", onAbort);
1690
+ this.hideAskOptions();
1691
+ resolve(answers);
1692
+ }, () => {
1693
+ opts?.signal?.removeEventListener("abort", onAbort);
1694
+ this.hideAskOptions();
1695
+ resolve(undefined);
1696
+ });
1697
+ this.editorContainer.clear();
1698
+ this.editorContainer.addChild(this.askOptions);
1699
+ this.ui.setFocus(this.askOptions);
1700
+ this.ui.requestRender();
1701
+ });
1702
+ }
1703
+ /**
1704
+ * Hide the options pane and restore the editor.
1705
+ */
1706
+ hideAskOptions() {
1707
+ if (!this.askOptions)
1708
+ return;
1709
+ this.editorContainer.clear();
1710
+ this.editorContainer.addChild(this.editor);
1711
+ this.askOptions = undefined;
1712
+ this.ui.setFocus(this.editor);
1713
+ this.ui.requestRender();
1714
+ }
1667
1715
  /**
1668
1716
  * Show a confirmation dialog for extensions.
1669
1717
  */
@@ -2701,6 +2749,7 @@ export class InteractiveMode {
2701
2749
  // This prevents escape sequences from leaking to the parent shell over slow SSH.
2702
2750
  await this.ui.terminal.drainInput(1000);
2703
2751
  this.taskStoreUnsubscribe?.();
2752
+ this.taskPanel.dispose();
2704
2753
  this.stop();
2705
2754
  await this.runtimeHost.dispose();
2706
2755
  process.exit(0);