@oh-my-pi/pi-coding-agent 16.1.23 → 16.2.1

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 (260) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/dist/cli.js +3785 -3695
  3. package/dist/types/advisor/__tests__/emission-guard.test.d.ts +1 -0
  4. package/dist/types/advisor/emission-guard.d.ts +73 -0
  5. package/dist/types/advisor/index.d.ts +1 -0
  6. package/dist/types/advisor/runtime.d.ts +7 -0
  7. package/dist/types/advisor/watchdog.d.ts +13 -0
  8. package/dist/types/cli/flag-tables.d.ts +1 -0
  9. package/dist/types/cli/gallery-fixtures/search.d.ts +1 -1
  10. package/dist/types/collab/display-name.d.ts +3 -0
  11. package/dist/types/collab/host.d.ts +0 -2
  12. package/dist/types/commands/worktree.d.ts +0 -3
  13. package/dist/types/config/inline-tool-descriptors-mode.d.ts +13 -0
  14. package/dist/types/config/model-discovery.d.ts +6 -1
  15. package/dist/types/config/model-registry.d.ts +6 -2
  16. package/dist/types/config/model-resolver.d.ts +12 -0
  17. package/dist/types/config/models-config-schema.d.ts +29 -2
  18. package/dist/types/config/models-config.d.ts +22 -1
  19. package/dist/types/config/settings-schema.d.ts +91 -21
  20. package/dist/types/config/settings.d.ts +2 -0
  21. package/dist/types/dap/config.d.ts +1 -1
  22. package/dist/types/edit/hashline/filesystem.d.ts +4 -2
  23. package/dist/types/edit/renderer.d.ts +4 -0
  24. package/dist/types/extensibility/extensions/types.d.ts +17 -17
  25. package/dist/types/extensibility/hooks/types.d.ts +10 -10
  26. package/dist/types/extensibility/plugins/marketplace/types.d.ts +1 -0
  27. package/dist/types/internal-urls/__tests__/ssh-protocol.test.d.ts +1 -0
  28. package/dist/types/internal-urls/index.d.ts +1 -0
  29. package/dist/types/internal-urls/registry-helpers.d.ts +2 -0
  30. package/dist/types/internal-urls/router.d.ts +1 -1
  31. package/dist/types/internal-urls/ssh-protocol.d.ts +10 -0
  32. package/dist/types/internal-urls/types.d.ts +19 -2
  33. package/dist/types/irc/bus.d.ts +6 -0
  34. package/dist/types/modes/acp/acp-event-mapper.d.ts +1 -0
  35. package/dist/types/modes/components/__tests__/move-overlay.test.d.ts +1 -0
  36. package/dist/types/modes/components/custom-editor.d.ts +7 -0
  37. package/dist/types/modes/components/move-overlay.d.ts +23 -0
  38. package/dist/types/modes/components/plugin-selector.d.ts +2 -1
  39. package/dist/types/modes/components/queue-mode-selector.d.ts +2 -1
  40. package/dist/types/modes/components/select-list-mouse-routing.d.ts +2 -0
  41. package/dist/types/modes/components/settings-defs.d.ts +4 -1
  42. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  43. package/dist/types/modes/components/show-images-selector.d.ts +2 -1
  44. package/dist/types/modes/components/status-line/component.d.ts +2 -0
  45. package/dist/types/modes/components/status-line/types.d.ts +2 -0
  46. package/dist/types/modes/components/theme-selector.d.ts +2 -1
  47. package/dist/types/modes/components/thinking-selector.d.ts +2 -1
  48. package/dist/types/modes/controllers/command-controller.d.ts +10 -1
  49. package/dist/types/modes/controllers/streaming-reveal.d.ts +6 -0
  50. package/dist/types/modes/interactive-mode.d.ts +10 -1
  51. package/dist/types/modes/internal-url-autocomplete.d.ts +1 -1
  52. package/dist/types/modes/running-subagent-badge.d.ts +6 -0
  53. package/dist/types/modes/theme/theme.d.ts +1 -1
  54. package/dist/types/modes/types.d.ts +9 -1
  55. package/dist/types/sdk.d.ts +2 -2
  56. package/dist/types/session/agent-session.d.ts +8 -1
  57. package/dist/types/session/blob-store.d.ts +4 -0
  58. package/dist/types/session/session-manager.d.ts +13 -0
  59. package/dist/types/slash-commands/builtin-registry.d.ts +1 -1
  60. package/dist/types/ssh/__tests__/connection-manager-args.test.d.ts +1 -0
  61. package/dist/types/ssh/__tests__/file-transfer-posix-guard.test.d.ts +1 -0
  62. package/dist/types/ssh/connection-manager.d.ts +2 -0
  63. package/dist/types/ssh/file-transfer.d.ts +79 -0
  64. package/dist/types/ssh/utils.d.ts +6 -0
  65. package/dist/types/system-prompt.d.ts +3 -0
  66. package/dist/types/task/executor.d.ts +16 -0
  67. package/dist/types/tiny/text.d.ts +1 -1
  68. package/dist/types/tools/builtin-names.d.ts +5 -1
  69. package/dist/types/tools/{find.d.ts → glob.d.ts} +15 -15
  70. package/dist/types/tools/{search.d.ts → grep.d.ts} +14 -14
  71. package/dist/types/tools/index.d.ts +3 -3
  72. package/dist/types/tools/path-utils.d.ts +29 -0
  73. package/dist/types/tools/read.d.ts +2 -2
  74. package/dist/types/tools/render-utils.d.ts +8 -0
  75. package/dist/types/tools/renderers.d.ts +11 -0
  76. package/dist/types/tools/ssh.d.ts +2 -0
  77. package/dist/types/tools/todo.d.ts +0 -16
  78. package/dist/types/tools/write.d.ts +2 -2
  79. package/dist/types/utils/active-repo-context.d.ts +8 -0
  80. package/dist/types/utils/image-resize.d.ts +1 -0
  81. package/dist/types/utils/markit-cache.d.ts +23 -0
  82. package/dist/types/utils/markit.d.ts +5 -1
  83. package/dist/types/utils/prompt-path.d.ts +1 -0
  84. package/dist/types/web/search/providers/duckduckgo.d.ts +14 -0
  85. package/dist/types/web/search/providers/firecrawl.d.ts +28 -0
  86. package/dist/types/web/search/providers/tinyfish.d.ts +29 -0
  87. package/dist/types/web/search/providers/xai.d.ts +13 -0
  88. package/dist/types/web/search/types.d.ts +18 -2
  89. package/package.json +30 -15
  90. package/scripts/build-binary.ts +9 -9
  91. package/scripts/bundle-dist.ts +2 -2
  92. package/src/advisor/__tests__/advisor.test.ts +61 -4
  93. package/src/advisor/__tests__/emission-guard.test.ts +147 -0
  94. package/src/advisor/advise-tool.ts +1 -1
  95. package/src/advisor/emission-guard.ts +172 -0
  96. package/src/advisor/index.ts +1 -0
  97. package/src/advisor/runtime.ts +11 -0
  98. package/src/advisor/watchdog.ts +27 -1
  99. package/src/cli/args.ts +5 -2
  100. package/src/cli/auth-broker-cli.ts +17 -0
  101. package/src/cli/config-cli.ts +4 -0
  102. package/src/cli/flag-tables.ts +7 -4
  103. package/src/cli/gallery-cli.ts +14 -2
  104. package/src/cli/gallery-fixtures/edit.ts +60 -0
  105. package/src/cli/gallery-fixtures/fs.ts +17 -17
  106. package/src/cli/gallery-fixtures/search.ts +4 -4
  107. package/src/cli/usage-cli.ts +20 -1
  108. package/src/cli/web-search-cli.ts +1 -1
  109. package/src/collab/display-name.ts +13 -0
  110. package/src/collab/guest.ts +5 -1
  111. package/src/collab/host.ts +2 -13
  112. package/src/commands/worktree.ts +6 -0
  113. package/src/config/inline-tool-descriptors-mode.ts +27 -0
  114. package/src/config/model-discovery.ts +77 -8
  115. package/src/config/model-registry.ts +89 -11
  116. package/src/config/model-resolver.ts +39 -1
  117. package/src/config/models-config-schema.ts +41 -5
  118. package/src/config/models-config.ts +4 -1
  119. package/src/config/settings-schema.ts +85 -27
  120. package/src/config/settings.ts +172 -1
  121. package/src/cursor.ts +1 -1
  122. package/src/dap/config.ts +152 -8
  123. package/src/dap/session.ts +1 -1
  124. package/src/discovery/claude-plugins.ts +3 -2
  125. package/src/discovery/helpers.ts +3 -1
  126. package/src/edit/hashline/diff.ts +14 -3
  127. package/src/edit/hashline/execute.ts +42 -6
  128. package/src/edit/hashline/filesystem.ts +38 -2
  129. package/src/edit/index.ts +1 -0
  130. package/src/edit/modes/patch.ts +11 -1
  131. package/src/edit/renderer.ts +140 -13
  132. package/src/eval/__tests__/agent-bridge.test.ts +101 -0
  133. package/src/eval/agent-bridge.ts +26 -3
  134. package/src/eval/js/tool-bridge.ts +2 -2
  135. package/src/export/html/index.ts +1 -1
  136. package/src/export/html/template.js +3 -1
  137. package/src/export/html/tool-views.generated.js +20 -20
  138. package/src/extensibility/extensions/types.ts +22 -22
  139. package/src/extensibility/hooks/types.ts +11 -11
  140. package/src/extensibility/plugins/legacy-pi-bundled-keys.ts +8 -3
  141. package/src/extensibility/plugins/legacy-pi-bundled-registry.ts +25 -10
  142. package/src/extensibility/plugins/marketplace/manager.ts +22 -0
  143. package/src/extensibility/plugins/marketplace/types.ts +1 -0
  144. package/src/internal-urls/__tests__/ssh-protocol.test.ts +331 -0
  145. package/src/internal-urls/docs-index.generated.txt +2 -2
  146. package/src/internal-urls/docs-index.ts +2 -3
  147. package/src/internal-urls/index.ts +1 -0
  148. package/src/internal-urls/registry-helpers.ts +19 -4
  149. package/src/internal-urls/router.ts +5 -3
  150. package/src/internal-urls/ssh-protocol.ts +367 -0
  151. package/src/internal-urls/types.ts +19 -2
  152. package/src/irc/bus.ts +11 -3
  153. package/src/mcp/tool-bridge.ts +32 -2
  154. package/src/memories/index.ts +1 -1
  155. package/src/modes/acp/acp-agent.ts +14 -1
  156. package/src/modes/acp/acp-event-mapper.ts +91 -27
  157. package/src/modes/components/__tests__/move-overlay.test.ts +166 -0
  158. package/src/modes/components/agent-hub.ts +3 -0
  159. package/src/modes/components/agent-transcript-viewer.ts +9 -7
  160. package/src/modes/components/custom-editor.ts +90 -5
  161. package/src/modes/components/move-overlay.ts +282 -0
  162. package/src/modes/components/plan-review-overlay.ts +35 -35
  163. package/src/modes/components/plugin-selector.ts +6 -1
  164. package/src/modes/components/queue-mode-selector.ts +6 -1
  165. package/src/modes/components/select-list-mouse-routing.ts +35 -0
  166. package/src/modes/components/session-selector.ts +11 -10
  167. package/src/modes/components/settings-defs.ts +14 -1
  168. package/src/modes/components/settings-selector.ts +196 -29
  169. package/src/modes/components/show-images-selector.ts +6 -1
  170. package/src/modes/components/status-line/component.ts +108 -28
  171. package/src/modes/components/status-line/segments.ts +5 -1
  172. package/src/modes/components/status-line/types.ts +2 -0
  173. package/src/modes/components/theme-selector.ts +6 -1
  174. package/src/modes/components/thinking-selector.ts +6 -1
  175. package/src/modes/components/tool-execution.ts +25 -9
  176. package/src/modes/components/tree-selector.ts +5 -5
  177. package/src/modes/controllers/command-controller.ts +140 -47
  178. package/src/modes/controllers/event-controller.ts +59 -3
  179. package/src/modes/controllers/input-controller.ts +68 -2
  180. package/src/modes/controllers/selector-controller.ts +5 -2
  181. package/src/modes/controllers/streaming-reveal.ts +17 -0
  182. package/src/modes/controllers/tool-args-reveal.ts +1 -1
  183. package/src/modes/interactive-mode.ts +116 -50
  184. package/src/modes/internal-url-autocomplete.ts +17 -2
  185. package/src/modes/prompt-action-autocomplete.ts +3 -1
  186. package/src/modes/running-subagent-badge.ts +13 -0
  187. package/src/modes/setup-wizard/scenes/glyph.ts +2 -13
  188. package/src/modes/setup-wizard/scenes/providers.ts +2 -1
  189. package/src/modes/setup-wizard/scenes/theme.ts +6 -12
  190. package/src/modes/setup-wizard/scenes/web-search.ts +8 -13
  191. package/src/modes/setup-wizard/wizard-overlay.ts +6 -5
  192. package/src/modes/theme/theme.ts +9 -1
  193. package/src/modes/types.ts +9 -1
  194. package/src/modes/utils/interactive-context-helpers.ts +1 -1
  195. package/src/priority.json +15 -0
  196. package/src/prompts/advisor/active-repo-watchdog.md +6 -0
  197. package/src/prompts/advisor/context-files.md +8 -0
  198. package/src/prompts/advisor/system.md +21 -7
  199. package/src/prompts/agents/designer.md +1 -1
  200. package/src/prompts/agents/explore.md +1 -1
  201. package/src/prompts/agents/librarian.md +2 -2
  202. package/src/prompts/agents/plan.md +2 -2
  203. package/src/prompts/agents/reviewer.md +1 -1
  204. package/src/prompts/agents/task.md +2 -2
  205. package/src/prompts/system/active-repo-context.md +4 -0
  206. package/src/prompts/system/gemini-tool-call-reminder.md +9 -0
  207. package/src/prompts/system/plan-mode-active.md +3 -3
  208. package/src/prompts/system/project-prompt.md +2 -2
  209. package/src/prompts/system/system-prompt.md +6 -6
  210. package/src/prompts/tools/bash.md +2 -2
  211. package/src/prompts/tools/checkpoint.md +1 -1
  212. package/src/prompts/tools/{find.md → glob.md} +1 -1
  213. package/src/prompts/tools/{search.md → grep.md} +3 -3
  214. package/src/prompts/tools/read.md +4 -2
  215. package/src/sdk.ts +65 -25
  216. package/src/session/agent-session.ts +519 -132
  217. package/src/session/blob-store.ts +24 -0
  218. package/src/session/session-history-format.ts +2 -2
  219. package/src/session/session-manager.ts +46 -0
  220. package/src/slash-commands/builtin-registry.ts +138 -20
  221. package/src/slash-commands/helpers/usage-report.ts +23 -2
  222. package/src/ssh/__tests__/connection-manager-args.test.ts +69 -0
  223. package/src/ssh/__tests__/file-transfer-posix-guard.test.ts +68 -0
  224. package/src/ssh/connection-manager.ts +12 -15
  225. package/src/ssh/file-transfer.ts +209 -0
  226. package/src/ssh/utils.ts +24 -0
  227. package/src/system-prompt.ts +56 -28
  228. package/src/task/executor.ts +96 -36
  229. package/src/task/index.ts +3 -3
  230. package/src/task/render.ts +14 -13
  231. package/src/task/worktree.ts +38 -1
  232. package/src/tiny/text.ts +49 -4
  233. package/src/tiny/worker.ts +3 -3
  234. package/src/tools/bash.ts +2 -2
  235. package/src/tools/builtin-names.ts +26 -2
  236. package/src/tools/{find.ts → glob.ts} +48 -42
  237. package/src/tools/{search.ts → grep.ts} +311 -129
  238. package/src/tools/index.ts +13 -14
  239. package/src/tools/irc.ts +6 -2
  240. package/src/tools/path-utils.ts +64 -1
  241. package/src/tools/read.ts +35 -6
  242. package/src/tools/render-utils.ts +14 -0
  243. package/src/tools/renderers.ts +15 -4
  244. package/src/tools/ssh.ts +17 -2
  245. package/src/tools/todo.ts +4 -26
  246. package/src/tools/write.ts +25 -9
  247. package/src/utils/active-repo-context.ts +143 -0
  248. package/src/utils/image-resize.ts +88 -7
  249. package/src/utils/lang-from-path.ts +3 -3
  250. package/src/utils/markit-cache.ts +166 -0
  251. package/src/utils/markit.ts +86 -18
  252. package/src/utils/prompt-path.ts +3 -0
  253. package/src/utils/title-generator.ts +1 -1
  254. package/src/web/search/provider.ts +54 -34
  255. package/src/web/search/providers/duckduckgo.ts +140 -0
  256. package/src/web/search/providers/firecrawl.ts +144 -0
  257. package/src/web/search/providers/tinyfish.ts +159 -0
  258. package/src/web/search/providers/xai.ts +292 -0
  259. package/src/web/search/providers/zai.ts +142 -56
  260. package/src/web/search/types.ts +6 -2
@@ -1,4 +1,4 @@
1
- import { Filesystem, type WriteResult } from "@oh-my-pi/hashline";
1
+ import { Filesystem, type PreflightWriteOptions, type WriteResult } from "@oh-my-pi/hashline";
2
2
  import type { FileDiagnosticsResult, WritethroughCallback, WritethroughDeferredHandle } from "../../lsp";
3
3
  import type { ToolSession } from "../../tools";
4
4
  import type { LspBatchRequest } from "../renderer";
@@ -34,7 +34,9 @@ export declare class HashlineFilesystem extends Filesystem {
34
34
  canonicalPath(relativePath: string): string;
35
35
  allowTagPathRecovery(authoredPath: string, resolvedPath: string): boolean;
36
36
  readText(relativePath: string): Promise<string>;
37
- preflightWrite(relativePath: string): Promise<void>;
37
+ preflightWrite(relativePath: string, options?: PreflightWriteOptions): Promise<void>;
38
+ delete(relativePath: string): Promise<void>;
39
+ move(fromRelative: string, toRelative: string, content?: string): Promise<void>;
38
40
  writeText(relativePath: string, content: string): Promise<WriteResult>;
39
41
  exists(relativePath: string): Promise<boolean>;
40
42
  }
@@ -29,6 +29,8 @@ export interface EditToolPerFileResult {
29
29
  oldText?: string;
30
30
  /** Source-of-truth content after the edit; `undefined` for delete operations. */
31
31
  newText?: string;
32
+ /** Pre-move source path; set only when the edit moved/renamed the file. The header renders `sourcePath → path`. */
33
+ sourcePath?: string;
32
34
  }
33
35
  export interface EditToolDetails {
34
36
  /** Unified diff of the changes made */
@@ -51,6 +53,8 @@ export interface EditToolDetails {
51
53
  oldText?: string;
52
54
  /** Source-of-truth content after the edit; `undefined` for delete operations. */
53
55
  newText?: string;
56
+ /** Pre-move source path; set only when the edit moved/renamed the file. The header renders `sourcePath → path`. */
57
+ sourcePath?: string;
54
58
  }
55
59
  interface EditRenderArgs {
56
60
  path?: string;
@@ -28,7 +28,7 @@ import type { Theme } from "../../modes/theme/theme";
28
28
  import type { CompactMode } from "../../session/compact-modes";
29
29
  import type { CustomMessage } from "../../session/messages";
30
30
  import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
31
- import type { BashToolDetails, BashToolInput, FindToolDetails, FindToolInput, ReadToolDetails, ReadToolInput, SearchToolDetails, SearchToolInput, WriteToolInput } from "../../tools";
31
+ import type { BashToolDetails, BashToolInput, GlobToolDetails, GlobToolInput, GrepToolDetails, GrepToolInput, ReadToolDetails, ReadToolInput, WriteToolInput } from "../../tools";
32
32
  import type { ApprovalMode } from "../../tools/approval";
33
33
  import type { EventBus } from "../../utils/event-bus";
34
34
  import type { AgentEndEvent, AgentStartEvent, AutoCompactionEndEvent, AutoCompactionStartEvent, AutoRetryEndEvent, AutoRetryStartEvent, ContextEvent, GoalUpdatedEvent, SessionBeforeBranchEvent, SessionBeforeBranchResult, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionBranchEvent, SessionCompactEvent, SessionCompactingEvent, SessionCompactingResult, SessionEvent, SessionShutdownEvent, SessionStartEvent, SessionStopEvent, SessionStopEventResult, SessionSwitchEvent, SessionTreeEvent, TodoReminderEvent, ToolCallEventResult, ToolResultEventResult, TtsrTriggeredEvent, TurnEndEvent, TurnStartEvent } from "../shared-events";
@@ -468,20 +468,20 @@ export interface WriteToolCallEvent extends ToolCallEventBase {
468
468
  toolName: "write";
469
469
  input: WriteToolInput;
470
470
  }
471
- export interface SearchToolCallEvent extends ToolCallEventBase {
472
- toolName: "search";
473
- input: SearchToolInput;
471
+ export interface GrepToolCallEvent extends ToolCallEventBase {
472
+ toolName: "grep";
473
+ input: GrepToolInput;
474
474
  }
475
- export interface FindToolCallEvent extends ToolCallEventBase {
476
- toolName: "find";
477
- input: FindToolInput;
475
+ export interface GlobToolCallEvent extends ToolCallEventBase {
476
+ toolName: "glob";
477
+ input: GlobToolInput;
478
478
  }
479
479
  export interface CustomToolCallEvent extends ToolCallEventBase {
480
480
  toolName: string;
481
481
  input: Record<string, unknown>;
482
482
  }
483
483
  /** Fired before a tool executes. Can block. */
484
- export type ToolCallEvent = BashToolCallEvent | ReadToolCallEvent | EditToolCallEvent | WriteToolCallEvent | SearchToolCallEvent | FindToolCallEvent | CustomToolCallEvent;
484
+ export type ToolCallEvent = BashToolCallEvent | ReadToolCallEvent | EditToolCallEvent | WriteToolCallEvent | GrepToolCallEvent | GlobToolCallEvent | CustomToolCallEvent;
485
485
  interface ToolResultEventBase {
486
486
  type: "tool_result";
487
487
  toolCallId: string;
@@ -505,20 +505,20 @@ export interface WriteToolResultEvent extends ToolResultEventBase {
505
505
  toolName: "write";
506
506
  details: undefined;
507
507
  }
508
- export interface SearchToolResultEvent extends ToolResultEventBase {
509
- toolName: "search";
510
- details: SearchToolDetails | undefined;
508
+ export interface GrepToolResultEvent extends ToolResultEventBase {
509
+ toolName: "grep";
510
+ details: GrepToolDetails | undefined;
511
511
  }
512
- export interface FindToolResultEvent extends ToolResultEventBase {
513
- toolName: "find";
514
- details: FindToolDetails | undefined;
512
+ export interface GlobToolResultEvent extends ToolResultEventBase {
513
+ toolName: "glob";
514
+ details: GlobToolDetails | undefined;
515
515
  }
516
516
  export interface CustomToolResultEvent extends ToolResultEventBase {
517
517
  toolName: string;
518
518
  details: unknown;
519
519
  }
520
520
  /** Fired after a tool executes. Can modify result. */
521
- export type ToolResultEvent = BashToolResultEvent | ReadToolResultEvent | EditToolResultEvent | WriteToolResultEvent | SearchToolResultEvent | FindToolResultEvent | CustomToolResultEvent;
521
+ export type ToolResultEvent = BashToolResultEvent | ReadToolResultEvent | EditToolResultEvent | WriteToolResultEvent | GrepToolResultEvent | GlobToolResultEvent | CustomToolResultEvent;
522
522
  /**
523
523
  * Type guard for narrowing ToolCallEvent by tool name.
524
524
  *
@@ -543,8 +543,8 @@ export declare function isToolCallEventType(toolName: "bash", event: ToolCallEve
543
543
  export declare function isToolCallEventType(toolName: "read", event: ToolCallEvent): event is ReadToolCallEvent;
544
544
  export declare function isToolCallEventType(toolName: "edit", event: ToolCallEvent): event is EditToolCallEvent;
545
545
  export declare function isToolCallEventType(toolName: "write", event: ToolCallEvent): event is WriteToolCallEvent;
546
- export declare function isToolCallEventType(toolName: "search", event: ToolCallEvent): event is SearchToolCallEvent;
547
- export declare function isToolCallEventType(toolName: "find", event: ToolCallEvent): event is FindToolCallEvent;
546
+ export declare function isToolCallEventType(toolName: "grep", event: ToolCallEvent): event is GrepToolCallEvent;
547
+ export declare function isToolCallEventType(toolName: "glob", event: ToolCallEvent): event is GlobToolCallEvent;
548
548
  export declare function isToolCallEventType<TName extends string, TInput extends Record<string, unknown>>(toolName: TName, event: ToolCallEvent): event is ToolCallEvent & {
549
549
  toolName: TName;
550
550
  input: TInput;
@@ -10,7 +10,7 @@ import type * as PiCodingAgent from "../../index";
10
10
  import type { Theme } from "../../modes/theme/theme";
11
11
  import type { HookMessage } from "../../session/messages";
12
12
  import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
13
- import type { BashToolDetails, FindToolDetails, ReadToolDetails, SearchToolDetails } from "../../tools";
13
+ import type { BashToolDetails, GlobToolDetails, GrepToolDetails, ReadToolDetails } from "../../tools";
14
14
  import type { AgentEndEvent, AgentStartEvent, AutoCompactionEndEvent, AutoCompactionStartEvent, AutoRetryEndEvent, AutoRetryStartEvent, ContextEvent, SessionBeforeBranchEvent, SessionBeforeBranchResult, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionBranchEvent, SessionCompactEvent, SessionCompactingEvent, SessionCompactingResult, SessionEvent, SessionShutdownEvent, SessionStartEvent, SessionSwitchEvent, SessionTreeEvent, TodoReminderEvent, ToolCallEventResult, ToolResultEventResult, TtsrTriggeredEvent, TurnEndEvent, TurnStartEvent } from "../shared-events";
15
15
  import type * as TypeBox from "../typebox";
16
16
  export type { ExecOptions, ExecResult } from "../../exec/exec";
@@ -254,15 +254,15 @@ export interface WriteToolResultEvent extends ToolResultEventBase {
254
254
  toolName: "write";
255
255
  details: undefined;
256
256
  }
257
- /** Tool result event for search tool */
258
- export interface SearchToolResultEvent extends ToolResultEventBase {
259
- toolName: "search";
260
- details: SearchToolDetails | undefined;
257
+ /** Tool result event for grep tool */
258
+ export interface GrepToolResultEvent extends ToolResultEventBase {
259
+ toolName: "grep";
260
+ details: GrepToolDetails | undefined;
261
261
  }
262
- /** Tool result event for find tool */
263
- export interface FindToolResultEvent extends ToolResultEventBase {
264
- toolName: "find";
265
- details: FindToolDetails | undefined;
262
+ /** Tool result event for glob tool */
263
+ export interface GlobToolResultEvent extends ToolResultEventBase {
264
+ toolName: "glob";
265
+ details: GlobToolDetails | undefined;
266
266
  }
267
267
  /** Tool result event for custom/unknown tools */
268
268
  export interface CustomToolResultEvent extends ToolResultEventBase {
@@ -274,7 +274,7 @@ export interface CustomToolResultEvent extends ToolResultEventBase {
274
274
  * Fired after a tool is executed. Hooks can modify the result.
275
275
  * Use toolName to discriminate and get typed details.
276
276
  */
277
- export type ToolResultEvent = BashToolResultEvent | ReadToolResultEvent | EditToolResultEvent | WriteToolResultEvent | SearchToolResultEvent | FindToolResultEvent | CustomToolResultEvent;
277
+ export type ToolResultEvent = BashToolResultEvent | ReadToolResultEvent | EditToolResultEvent | WriteToolResultEvent | GrepToolResultEvent | GlobToolResultEvent | CustomToolResultEvent;
278
278
  /**
279
279
  * Union of all hook event types.
280
280
  */
@@ -55,6 +55,7 @@ export interface MarketplacePluginEntry {
55
55
  hooks?: string | Record<string, unknown>;
56
56
  mcpServers?: string | Record<string, unknown>;
57
57
  lspServers?: string | Record<string, unknown>;
58
+ dapAdapters?: string | Record<string, unknown>;
58
59
  }
59
60
  export type PluginSource = string | PluginSourceGitHub | PluginSourceUrl | PluginSourceGitSubdir | PluginSourceNpm;
60
61
  export interface PluginSourceGitHub {
@@ -20,5 +20,6 @@ export * from "./parse";
20
20
  export * from "./router";
21
21
  export * from "./rule-protocol";
22
22
  export * from "./skill-protocol";
23
+ export * from "./ssh-protocol";
23
24
  export type * from "./types";
24
25
  export * from "./vault-protocol";
@@ -1,3 +1,5 @@
1
+ export declare function registerArtifactsDir(dir: string): () => void;
2
+ export declare function resetRegisteredArtifactDirsForTests(): void;
1
3
  /**
2
4
  * Snapshot of artifacts dirs for every registered session, deduped.
3
5
  *
@@ -16,6 +16,6 @@ export declare class InternalUrlRouter {
16
16
  * Candidate completions for the host/path portion of `scheme://<query>`.
17
17
  * Returns `null` when the scheme is unknown or does not support completion.
18
18
  */
19
- complete(scheme: string, query: string): Promise<UrlCompletion[] | null>;
19
+ complete(scheme: string, query: string, context?: ResolveContext): Promise<UrlCompletion[] | null>;
20
20
  resolve(input: string, context?: ResolveContext): Promise<InternalResource>;
21
21
  }
@@ -0,0 +1,10 @@
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, ResolveContext, UrlCompletion, WriteContext } from "./types";
2
+ export declare class SshProtocolHandler implements ProtocolHandler {
3
+ #private;
4
+ readonly scheme = "ssh";
5
+ readonly immutable = false;
6
+ resolve(url: InternalUrl, context?: ResolveContext): Promise<InternalResource>;
7
+ /** Autocomplete the host segment of `ssh://` with the configured SSH hosts. */
8
+ complete(_query?: string, context?: ResolveContext): Promise<UrlCompletion[]>;
9
+ write(url: InternalUrl, content: string, context?: WriteContext): Promise<void>;
10
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Types for the internal URL routing system.
3
3
  *
4
- * Internal URLs (`agent://`, `artifact://`, `history://`, `issue://`, `local://`, `mcp://`, `memory://`, `omp://`, `pr://`, `rule://`, `skill://`, and `vault://`) are resolved by tools like read,
4
+ * Internal URLs (`agent://`, `artifact://`, `history://`, `issue://`, `local://`, `mcp://`, `memory://`, `omp://`, `pr://`, `rule://`, `skill://`, `ssh://`, and `vault://`) are resolved by tools like read,
5
5
  * providing access to agent outputs and server resources without exposing filesystem paths.
6
6
  */
7
7
  import type { Skill } from "../extensibility/skills";
@@ -31,6 +31,13 @@ export interface InternalResource {
31
31
  * resources. Mutable resources (e.g. local://) behave like editable files.
32
32
  */
33
33
  immutable?: boolean;
34
+ /**
35
+ * True when the resource is a directory listing rather than file content.
36
+ * `search` refuses to grep such a resource when it has no `sourcePath` — a
37
+ * remote `ssh://` listing has no local path to recurse, so its listing text
38
+ * must never be mistaken for the directory's contents.
39
+ */
40
+ isDirectory?: boolean;
34
41
  }
35
42
  /**
36
43
  * A single autocomplete candidate for the host/path portion of a `scheme://`
@@ -88,6 +95,13 @@ export interface ResolveContext {
88
95
  localProtocolOptions?: LocalProtocolOptions;
89
96
  /** Calling session's loaded skills. Prefer this over process-global skill state. */
90
97
  skills?: readonly Skill[];
98
+ /**
99
+ * When set, handlers that would otherwise materialize an expensive directory
100
+ * listing (e.g. the ssh:// handler draining a full remote `ls`) instead return
101
+ * the directory shape (`isDirectory: true`) with empty content. `search`/`find`
102
+ * reject directory resources, so they never need the listing.
103
+ */
104
+ skipDirectoryListing?: boolean;
91
105
  }
92
106
  /**
93
107
  * Caller context for write operations dispatched to host-owned URI handlers.
@@ -143,6 +157,9 @@ export interface ProtocolHandler {
143
157
  * mcp://) omit it. The caller fuzzy-filters the returned set against the
144
158
  * partially typed `query`, so handlers return their full (bounded) candidate
145
159
  * list; `query` is provided only so handlers can scope expensive enumeration.
160
+ * `context.cwd`/`context.localProtocolOptions` carry the caller's working dir
161
+ * and session, for handlers whose candidates are project- or session-scoped
162
+ * (e.g. ssh:// hosts from a project `ssh.json`, local:// roots per session).
146
163
  */
147
- complete?(query: string): Promise<UrlCompletion[]>;
164
+ complete?(query?: string, context?: ResolveContext): Promise<UrlCompletion[]>;
148
165
  }
@@ -55,9 +55,15 @@ export declare class IrcBus {
55
55
  * disabled — e.g. blocked in a synchronous task spawn awaiting the
56
56
  * sender's own batch) can generate an ephemeral side-channel auto-reply
57
57
  * instead of stranding the sender until timeout.
58
+ *
59
+ * `opts.suppressRelay` skips the display-only main-UI relay for this leg.
60
+ * Set by broadcast fan-out when the same broadcast also targets the main
61
+ * agent directly: the main agent then already sees the body as its own
62
+ * incoming card, so relaying the sibling legs would duplicate it.
58
63
  */
59
64
  send(msg: Omit<IrcMessage, "id" | "ts">, opts?: {
60
65
  expectsReply?: boolean;
66
+ suppressRelay?: boolean;
61
67
  }): Promise<IrcDeliveryReceipt>;
62
68
  /**
63
69
  * Block until a message for `agentId` (optionally from `filter.from`)
@@ -8,6 +8,7 @@ interface AcpEventMapperOptions {
8
8
  getMessageId?: (message: unknown) => string | undefined;
9
9
  getMessageProgress?: (message: unknown) => MessageProgress | undefined;
10
10
  getToolArgs?: (toolCallId: string) => unknown;
11
+ resolveImageData?: (data: string, mimeType: string | undefined) => string;
11
12
  /**
12
13
  * Session cwd. Tool call locations sent to ACP clients must be absolute
13
14
  * (the editor host needs them to open or focus files). When provided,
@@ -28,6 +28,13 @@ export declare const SPACE_HOLD_RELEASE_MS = 250;
28
28
  export declare function extractPastePathsFromText(text: string): string[] | undefined;
29
29
  export declare function extractBracketedPastePaths(data: string): string[] | undefined;
30
30
  export declare function extractBracketedImagePastePaths(data: string): string[] | undefined;
31
+ /**
32
+ * Same shape as {@link extractBracketedImagePastePaths} but operates on a
33
+ * payload that has already been stripped of the `\x1b[200~` / `\x1b[201~`
34
+ * markers — used by the assembled-paste router in {@link CustomEditor.handleInput}
35
+ * so split bracketed pastes get the same image-path detection as single-chunk ones.
36
+ */
37
+ export declare function extractImagePastePathsFromText(text: string): string[] | undefined;
31
38
  export declare function extractBracketedImagePastePath(data: string): string | undefined;
32
39
  /**
33
40
  * Return a single image file path when `text` is exactly one explicit path
@@ -0,0 +1,23 @@
1
+ import { type Component, type Focusable } from "@oh-my-pi/pi-tui";
2
+ export interface MoveOverlayResult {
3
+ directory: string;
4
+ }
5
+ /** Resolve a user-typed path (`~`, absolute, or relative to `cwd`) to an absolute path. */
6
+ export declare function resolveMovePath(input: string, cwd: string): string;
7
+ /** If `input` resolves to an existing directory, return it; otherwise `null`. */
8
+ export declare function resolveExistingDirectory(input: string, cwd: string): string | null;
9
+ /**
10
+ * Overlay component for `/move`: a single-line path input with a live-filtered
11
+ * list of matching directories. Tab accepts the highlighted suggestion; Enter
12
+ * confirms the current input (or the highlighted suggestion if the input is
13
+ * empty); Escape cancels.
14
+ */
15
+ export declare class MoveOverlay implements Component, Focusable {
16
+ #private;
17
+ constructor(cwd: string, done: (result: MoveOverlayResult | undefined) => void);
18
+ get focused(): boolean;
19
+ set focused(value: boolean);
20
+ handleInput(data: string): void;
21
+ render(_width: number): readonly string[];
22
+ invalidate(): void;
23
+ }
@@ -4,7 +4,7 @@
4
4
  * Shows available plugins from all configured marketplaces in a SelectList.
5
5
  * Selecting a plugin triggers installation. Esc cancels.
6
6
  */
7
- import { Container, SelectList } from "@oh-my-pi/pi-tui";
7
+ import { Container, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
8
8
  export interface PluginSelectorCallbacks {
9
9
  onSelect: (pluginName: string, marketplace: string, scope?: "user" | "project") => void;
10
10
  onCancel: () => void;
@@ -23,4 +23,5 @@ export declare class PluginSelectorComponent extends Container {
23
23
  #private;
24
24
  constructor(marketplaceCount: number, plugins: PluginItem[], installedIds: Set<string>, callbacks: PluginSelectorCallbacks);
25
25
  getSelectList(): SelectList;
26
+ routeMouse(event: SgrMouseEvent, line: number, col: number): void;
26
27
  }
@@ -1,4 +1,4 @@
1
- import { Container, SelectList } from "@oh-my-pi/pi-tui";
1
+ import { Container, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
2
2
  /**
3
3
  * Component that renders a queue mode selector with borders
4
4
  */
@@ -6,4 +6,5 @@ export declare class QueueModeSelectorComponent extends Container {
6
6
  #private;
7
7
  constructor(currentMode: "all" | "one-at-a-time", onSelect: (mode: "all" | "one-at-a-time") => void, onCancel: () => void);
8
8
  getSelectList(): SelectList;
9
+ routeMouse(event: SgrMouseEvent, line: number, col: number): void;
9
10
  }
@@ -0,0 +1,2 @@
1
+ import type { SelectList, SgrMouseEvent } from "@oh-my-pi/pi-tui";
2
+ export declare function routeSelectListMouseWithTopBorder(selectList: SelectList, event: SgrMouseEvent, line: number, col: number): void;
@@ -41,7 +41,10 @@ export interface SubmenuSettingDef extends BaseSettingDef {
41
41
  export interface TextInputSettingDef extends BaseSettingDef {
42
42
  type: "text";
43
43
  }
44
- export type SettingDef = BooleanSettingDef | EnumSettingDef | SubmenuSettingDef | TextInputSettingDef;
44
+ export interface ProviderLimitsSettingDef extends BaseSettingDef {
45
+ type: "providerLimits";
46
+ }
47
+ export type SettingDef = BooleanSettingDef | EnumSettingDef | SubmenuSettingDef | TextInputSettingDef | ProviderLimitsSettingDef;
45
48
  /** Get all setting definitions with UI */
46
49
  export declare function getAllSettingDefs(): SettingDef[];
47
50
  /**
@@ -15,6 +15,8 @@ export interface SettingsRuntimeContext {
15
15
  thinkingLevel: ThinkingLevel | undefined;
16
16
  /** Available themes */
17
17
  availableThemes: string[];
18
+ /** Provider/source ids shown in /model. */
19
+ providers: string[];
18
20
  /** Working directory for plugins tab */
19
21
  cwd: string;
20
22
  /** Active model (api + id); resolves what the snapcompact `auto` shape maps to. */
@@ -1,4 +1,4 @@
1
- import { Container, SelectList } from "@oh-my-pi/pi-tui";
1
+ import { Container, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
2
2
  /**
3
3
  * Component that renders a show images selector with borders
4
4
  */
@@ -6,4 +6,5 @@ export declare class ShowImagesSelectorComponent extends Container {
6
6
  #private;
7
7
  constructor(currentValue: boolean, onSelect: (show: boolean) => void, onCancel: () => void);
8
8
  getSelectList(): SelectList;
9
+ routeMouse(event: SgrMouseEvent, line: number, col: number): void;
9
10
  }
@@ -14,6 +14,8 @@ export declare class StatusLineComponent implements Component {
14
14
  getEffectiveSettingsForTest(): EffectiveStatusLineSettings;
15
15
  setAutoCompactEnabled(enabled: boolean): void;
16
16
  setSubagentCount(count: number): void;
17
+ /** Hub key label shown in the forced running-subagents badge. */
18
+ setSubagentHubHint(hint: string | undefined): void;
17
19
  /** Active subagent count as currently displayed (collab state mirroring). */
18
20
  get subagentCount(): number;
19
21
  setSessionStartTime(time: number): void;
@@ -1,6 +1,7 @@
1
1
  import type { CollabSessionState } from "../../../collab/protocol";
2
2
  import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../../config/settings-schema";
3
3
  import type { AgentSession } from "../../../session/agent-session";
4
+ import type { ActiveRepoContext } from "../../../utils/active-repo-context";
4
5
  export type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle };
5
6
  /** Collab session indicator + (guest-only) host-state override for segments. */
6
7
  export interface CollabStatus {
@@ -47,6 +48,7 @@ export interface SegmentContext {
47
48
  session: AgentSession;
48
49
  /** Focused subagent id while the view is proxied at its session, undefined otherwise. */
49
50
  focusedAgentId?: string | undefined;
51
+ activeRepo: ActiveRepoContext | null;
50
52
  width: number;
51
53
  options: StatusLineSegmentOptions;
52
54
  planMode: {
@@ -1,4 +1,4 @@
1
- import { Container, SelectList } from "@oh-my-pi/pi-tui";
1
+ import { Container, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
2
2
  /**
3
3
  * Component that renders a theme selector.
4
4
  * Themes must be pre-loaded and passed to the constructor.
@@ -7,4 +7,5 @@ export declare class ThemeSelectorComponent extends Container {
7
7
  #private;
8
8
  constructor(currentTheme: string, themes: string[], onSelect: (themeName: string) => void, onCancel: () => void, onPreview: (themeName: string) => void);
9
9
  getSelectList(): SelectList;
10
+ routeMouse(event: SgrMouseEvent, line: number, col: number): void;
10
11
  }
@@ -1,5 +1,5 @@
1
1
  import type { Effort } from "@oh-my-pi/pi-ai";
2
- import { Container, SelectList } from "@oh-my-pi/pi-tui";
2
+ import { Container, SelectList, type SgrMouseEvent } from "@oh-my-pi/pi-tui";
3
3
  /**
4
4
  * Component that renders a thinking level selector with borders
5
5
  */
@@ -7,4 +7,5 @@ export declare class ThinkingSelectorComponent extends Container {
7
7
  #private;
8
8
  constructor(currentLevel: Effort, availableLevels: Effort[], onSelect: (level: Effort) => void, onCancel: () => void);
9
9
  getSelectList(): SelectList;
10
+ routeMouse(event: SgrMouseEvent, line: number, col: number): void;
10
11
  }
@@ -29,7 +29,16 @@ export declare class CommandController {
29
29
  handleFreshCommand(): Promise<void>;
30
30
  handleDropCommand(): Promise<void>;
31
31
  handleForkCommand(): Promise<void>;
32
- handleMoveCommand(targetPath: string): Promise<void>;
32
+ /**
33
+ * `/move` — switch to a fresh empty session in a different directory.
34
+ *
35
+ * With no `targetPath` (TUI only), opens an autocomplete overlay so the user
36
+ * can pick or type a directory. With a `targetPath`, resolves it directly.
37
+ * If the target directory does not exist, the user is asked whether to create
38
+ * it. A brand-new empty session is then started in the target directory and
39
+ * the current session is left behind (resumable via `/resume`).
40
+ */
41
+ handleMoveCommand(targetPath?: string): Promise<void>;
33
42
  handleRenameCommand(title: string): Promise<void>;
34
43
  handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;
35
44
  handlePythonCommand(code: string, excludeFromContext?: boolean): Promise<void>;
@@ -19,5 +19,11 @@ export declare class StreamingRevealController {
19
19
  begin(component: StreamingRevealComponent, message: AssistantMessage): void;
20
20
  setTarget(message: AssistantMessage): void;
21
21
  stop(): void;
22
+ /**
23
+ * Re-read cached visibility flags (hideThinkingBlock, proseOnlyThinking)
24
+ * and re-render the current target. Called when the thinking level changes
25
+ * mid-stream so the reveal controller doesn't keep rendering with stale values.
26
+ */
27
+ resyncVisibility(): void;
22
28
  }
23
29
  export {};
@@ -109,6 +109,13 @@ export declare class InteractiveMode implements InteractiveModeContext {
109
109
  loopLimit: LoopLimitRuntime | undefined;
110
110
  todoPhases: TodoPhase[];
111
111
  hideThinkingBlock: boolean;
112
+ /**
113
+ * Effective thinking-block visibility: hidden when the user's setting is on
114
+ * OR the session thinking level is "off". Some providers (MiniMax, GLM,
115
+ * DeepSeek) return thinking blocks even with reasoning disabled; this
116
+ * respects the user's intent when they set thinking to "off" (#626).
117
+ */
118
+ get effectiveHideThinkingBlock(): boolean;
112
119
  proseOnlyThinking: boolean;
113
120
  compactionQueuedMessages: CompactionQueuedMessage[];
114
121
  pendingTools: Map<string, ToolExecutionHandle>;
@@ -198,6 +205,8 @@ export declare class InteractiveMode implements InteractiveModeContext {
198
205
  markPendingSubmissionStarted(input: SubmittedUserInput): boolean;
199
206
  finishPendingSubmission(input: SubmittedUserInput): void;
200
207
  updateEditorBorderColor(): void;
208
+ /** Refresh the running-subagents status badge from the active local or collab registry. */
209
+ syncRunningSubagentBadge(): void;
201
210
  updateEditorTopBorder(): void;
202
211
  rebuildChatFromMessages(): void;
203
212
  /**
@@ -291,7 +300,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
291
300
  handleFreshCommand(): Promise<void>;
292
301
  handleDropCommand(): Promise<void>;
293
302
  handleForkCommand(): Promise<void>;
294
- handleMoveCommand(targetPath: string): Promise<void>;
303
+ handleMoveCommand(targetPath?: string): Promise<void>;
295
304
  handleRenameCommand(title: string): Promise<void>;
296
305
  handleMemoryCommand(text: string): Promise<void>;
297
306
  handleSTTToggle(): Promise<void>;
@@ -25,7 +25,7 @@ export declare function extractInternalUrlContext(textBeforeCursor: string): Int
25
25
  * Suggestions for the internal-url token ending at the cursor, or `null` when
26
26
  * the text is not such a token or no candidate matches the typed query.
27
27
  */
28
- export declare function getInternalUrlSuggestions(textBeforeCursor: string): Promise<{
28
+ export declare function getInternalUrlSuggestions(textBeforeCursor: string, cwd?: string): Promise<{
29
29
  items: AutocompleteItem[];
30
30
  prefix: string;
31
31
  } | null>;
@@ -0,0 +1,6 @@
1
+ import { AgentRegistry } from "../registry/agent-registry";
2
+ export interface RunningSubagentRegistrySource {
3
+ agentRegistry: AgentRegistry;
4
+ }
5
+ export declare function getRunningSubagentBadgeRegistry(collabGuest: RunningSubagentRegistrySource | undefined): AgentRegistry;
6
+ export declare function countRunningSubagentBadgeAgents(registry: AgentRegistry): number;
@@ -6,7 +6,7 @@ export type SymbolPreset = "unicode" | "nerd" | "ascii";
6
6
  /**
7
7
  * All available symbol keys organized by category.
8
8
  */
9
- export type SymbolKey = "status.success" | "status.error" | "status.warning" | "status.info" | "status.pending" | "status.disabled" | "status.enabled" | "status.running" | "status.shadowed" | "status.aborted" | "status.done" | "nav.cursor" | "nav.selected" | "nav.expand" | "nav.collapse" | "nav.back" | "tree.branch" | "tree.last" | "tree.vertical" | "tree.horizontal" | "tree.hook" | "boxRound.topLeft" | "boxRound.topRight" | "boxRound.bottomLeft" | "boxRound.bottomRight" | "boxRound.horizontal" | "boxRound.vertical" | "boxSharp.topLeft" | "boxSharp.topRight" | "boxSharp.bottomLeft" | "boxSharp.bottomRight" | "boxSharp.horizontal" | "boxSharp.vertical" | "boxSharp.cross" | "boxSharp.teeDown" | "boxSharp.teeUp" | "boxSharp.teeRight" | "boxSharp.teeLeft" | "sep.powerline" | "sep.powerlineThin" | "sep.powerlineLeft" | "sep.powerlineRight" | "sep.powerlineThinLeft" | "sep.powerlineThinRight" | "sep.block" | "sep.space" | "sep.asciiLeft" | "sep.asciiRight" | "sep.dot" | "sep.slash" | "sep.pipe" | "icon.model" | "icon.plan" | "icon.goal" | "icon.pause" | "icon.loop" | "icon.folder" | "icon.search" | "icon.scratchFolder" | "icon.file" | "icon.git" | "icon.branch" | "icon.pr" | "icon.tokens" | "icon.context" | "icon.cost" | "icon.time" | "icon.pi" | "icon.ghost" | "icon.agents" | "icon.job" | "icon.cache" | "icon.cacheMiss" | "icon.input" | "icon.output" | "icon.host" | "icon.session" | "icon.package" | "icon.warning" | "icon.rewind" | "icon.auto" | "icon.fast" | "icon.extensionSkill" | "icon.extensionTool" | "icon.extensionSlashCommand" | "icon.extensionMcp" | "icon.extensionRule" | "icon.extensionHook" | "icon.extensionPrompt" | "icon.extensionContextFile" | "icon.extensionInstruction" | "icon.mic" | "icon.camera" | "thinking.minimal" | "thinking.low" | "thinking.medium" | "thinking.high" | "thinking.xhigh" | "thinking.autoPending" | "checkbox.checked" | "checkbox.unchecked" | "radio.selected" | "radio.unselected" | "format.bullet" | "format.dash" | "format.bracketLeft" | "format.bracketRight" | "md.quoteBorder" | "md.hrChar" | "md.bullet" | "md.colorSwatch" | "lang.default" | "lang.typescript" | "lang.javascript" | "lang.python" | "lang.rust" | "lang.go" | "lang.java" | "lang.c" | "lang.cpp" | "lang.csharp" | "lang.ruby" | "lang.julia" | "lang.php" | "lang.swift" | "lang.kotlin" | "lang.shell" | "lang.html" | "lang.css" | "lang.json" | "lang.yaml" | "lang.markdown" | "lang.sql" | "lang.docker" | "lang.lua" | "lang.text" | "lang.env" | "lang.toml" | "lang.xml" | "lang.ini" | "lang.conf" | "lang.log" | "lang.csv" | "lang.tsv" | "lang.image" | "lang.pdf" | "lang.archive" | "lang.binary" | "tab.appearance" | "tab.model" | "tab.interaction" | "tab.context" | "tab.files" | "tab.shell" | "tab.tools" | "tab.memory" | "tab.tasks" | "tab.providers" | "tool.write" | "tool.edit" | "tool.bash" | "tool.ssh" | "tool.lsp" | "tool.gh" | "tool.webSearch" | "tool.exa" | "tool.browser" | "tool.eval" | "tool.debug" | "tool.mcp" | "tool.job" | "tool.task" | "tool.todo" | "tool.memory" | "tool.ask" | "tool.resolve" | "tool.review" | "tool.inspectImage" | "tool.goal" | "tool.irc";
9
+ export type SymbolKey = "status.success" | "status.error" | "status.warning" | "status.info" | "status.pending" | "status.disabled" | "status.enabled" | "status.running" | "status.shadowed" | "status.aborted" | "status.done" | "nav.cursor" | "nav.selected" | "nav.expand" | "nav.collapse" | "nav.back" | "tree.branch" | "tree.last" | "tree.vertical" | "tree.horizontal" | "tree.hook" | "boxRound.topLeft" | "boxRound.topRight" | "boxRound.bottomLeft" | "boxRound.bottomRight" | "boxRound.horizontal" | "boxRound.vertical" | "boxSharp.topLeft" | "boxSharp.topRight" | "boxSharp.bottomLeft" | "boxSharp.bottomRight" | "boxSharp.horizontal" | "boxSharp.vertical" | "boxSharp.cross" | "boxSharp.teeDown" | "boxSharp.teeUp" | "boxSharp.teeRight" | "boxSharp.teeLeft" | "sep.powerline" | "sep.powerlineThin" | "sep.powerlineLeft" | "sep.powerlineRight" | "sep.powerlineThinLeft" | "sep.powerlineThinRight" | "sep.block" | "sep.space" | "sep.asciiLeft" | "sep.asciiRight" | "sep.dot" | "sep.slash" | "sep.pipe" | "icon.model" | "icon.plan" | "icon.goal" | "icon.pause" | "icon.loop" | "icon.folder" | "icon.search" | "icon.scratchFolder" | "icon.file" | "icon.git" | "icon.branch" | "icon.pr" | "icon.tokens" | "icon.context" | "icon.cost" | "icon.time" | "icon.pi" | "icon.ghost" | "icon.agents" | "icon.job" | "icon.cache" | "icon.cacheMiss" | "icon.input" | "icon.output" | "icon.host" | "icon.session" | "icon.package" | "icon.warning" | "icon.rewind" | "icon.auto" | "icon.fast" | "icon.extensionSkill" | "icon.extensionTool" | "icon.extensionSlashCommand" | "icon.extensionMcp" | "icon.extensionRule" | "icon.extensionHook" | "icon.extensionPrompt" | "icon.extensionContextFile" | "icon.extensionInstruction" | "icon.mic" | "icon.camera" | "thinking.minimal" | "thinking.low" | "thinking.medium" | "thinking.high" | "thinking.xhigh" | "thinking.autoPending" | "checkbox.checked" | "checkbox.unchecked" | "radio.selected" | "radio.unselected" | "format.bullet" | "format.dash" | "format.bracketLeft" | "format.bracketRight" | "md.quoteBorder" | "md.hrChar" | "md.bullet" | "md.colorSwatch" | "lang.default" | "lang.typescript" | "lang.javascript" | "lang.python" | "lang.rust" | "lang.go" | "lang.java" | "lang.c" | "lang.cpp" | "lang.csharp" | "lang.ruby" | "lang.julia" | "lang.php" | "lang.swift" | "lang.kotlin" | "lang.shell" | "lang.html" | "lang.css" | "lang.json" | "lang.yaml" | "lang.markdown" | "lang.sql" | "lang.docker" | "lang.lua" | "lang.text" | "lang.env" | "lang.toml" | "lang.xml" | "lang.ini" | "lang.conf" | "lang.log" | "lang.csv" | "lang.tsv" | "lang.image" | "lang.pdf" | "lang.archive" | "lang.binary" | "tab.appearance" | "tab.model" | "tab.interaction" | "tab.context" | "tab.files" | "tab.shell" | "tab.tools" | "tab.memory" | "tab.tasks" | "tab.providers" | "tool.write" | "tool.edit" | "tool.bash" | "tool.ssh" | "tool.lsp" | "tool.gh" | "tool.webSearch" | "tool.exa" | "tool.browser" | "tool.eval" | "tool.debug" | "tool.mcp" | "tool.job" | "tool.task" | "tool.todo" | "tool.memory" | "tool.ask" | "tool.resolve" | "tool.review" | "tool.inspectImage" | "tool.goal" | "tool.irc" | "tool.delete" | "tool.move";
10
10
  export type SpinnerType = "status" | "activity";
11
11
  export type ThemeColor = "accent" | "border" | "borderAccent" | "borderMuted" | "success" | "error" | "warning" | "muted" | "dim" | "text" | "thinkingText" | "userMessageText" | "customMessageText" | "customMessageLabel" | "toolTitle" | "toolOutput" | "mdHeading" | "mdLink" | "mdLinkUrl" | "mdCode" | "mdCodeBlock" | "mdCodeBlockBorder" | "mdQuote" | "mdQuoteBorder" | "mdHr" | "mdListBullet" | "toolDiffAdded" | "toolDiffRemoved" | "toolDiffContext" | "syntaxComment" | "syntaxKeyword" | "syntaxFunction" | "syntaxVariable" | "syntaxString" | "syntaxNumber" | "syntaxType" | "syntaxOperator" | "syntaxPunctuation" | "thinkingOff" | "thinkingMinimal" | "thinkingLow" | "thinkingMedium" | "thinkingHigh" | "thinkingXhigh" | "bashMode" | "pythonMode" | "statusLineSep" | "statusLineModel" | "statusLinePath" | "statusLineGitClean" | "statusLineGitDirty" | "statusLineContext" | "statusLineSpend" | "statusLineStaged" | "statusLineDirty" | "statusLineUntracked" | "statusLineOutput" | "statusLineCost" | "statusLineSubagents";
12
12
  /** Check if a string is a valid ThemeColor value */
@@ -140,6 +140,12 @@ export interface InteractiveModeContext {
140
140
  loopLimit?: LoopLimitRuntime;
141
141
  planModePlanFilePath?: string;
142
142
  hideThinkingBlock: boolean;
143
+ /**
144
+ * Effective thinking-block visibility: true when hidden by user setting OR
145
+ * thinking level is "off". Read this in render paths instead of
146
+ * {@link hideThinkingBlock} so blocks are auto-hidden when thinking is off.
147
+ */
148
+ readonly effectiveHideThinkingBlock: boolean;
143
149
  proseOnlyThinking: boolean;
144
150
  compactionQueuedMessages: CompactionQueuedMessage[];
145
151
  pendingTools: Map<string, ToolExecutionHandle>;
@@ -269,6 +275,8 @@ export interface InteractiveModeContext {
269
275
  findLastAssistantMessage(): AssistantMessage | undefined;
270
276
  extractAssistantText(message: AssistantMessage): string;
271
277
  updateEditorTopBorder(): void;
278
+ /** Refresh the running-subagents status badge from the active local or collab registry. */
279
+ syncRunningSubagentBadge(): void;
272
280
  updateEditorBorderColor(): void;
273
281
  rebuildChatFromMessages(): void;
274
282
  setTodos(todos: TodoItem[] | TodoPhase[]): void;
@@ -299,7 +307,7 @@ export interface InteractiveModeContext {
299
307
  handleCompactCommand(customInstructions?: string, mode?: CompactMode): Promise<CompactionOutcome>;
300
308
  handleHandoffCommand(customInstructions?: string): Promise<void>;
301
309
  handleShakeCommand(mode: ShakeMode): Promise<void>;
302
- handleMoveCommand(targetPath: string): Promise<void>;
310
+ handleMoveCommand(targetPath?: string): Promise<void>;
303
311
  handleRenameCommand(title: string): Promise<void>;
304
312
  handleMemoryCommand(text: string): Promise<void>;
305
313
  handleSTTToggle(): Promise<void>;
@@ -22,7 +22,7 @@ import type { AuthStorage } from "./session/auth-storage";
22
22
  import { SessionManager } from "./session/session-manager";
23
23
  import { type BuildSystemPromptResult } from "./system-prompt";
24
24
  import { type ConfiguredThinkingLevel } from "./thinking";
25
- import { BashTool, BUILTIN_TOOLS, createTools, EditTool, EvalTool, FindTool, HIDDEN_TOOLS, type LspStartupServerInfo, loadSshTool, ReadTool, ResolveTool, SearchTool, type Tool, type ToolSession, WebSearchTool, WriteTool } from "./tools";
25
+ import { BashTool, BUILTIN_TOOLS, createTools, EditTool, EvalTool, GlobTool, GrepTool, HIDDEN_TOOLS, type LspStartupServerInfo, loadSshTool, ReadTool, ResolveTool, type Tool, type ToolSession, WebSearchTool, WriteTool } from "./tools";
26
26
  import { EventBus } from "./utils/event-bus";
27
27
  import { type WorkspaceTree } from "./workspace-tree";
28
28
  export interface CreateAgentSessionOptions {
@@ -224,7 +224,7 @@ export type { FileSlashCommand } from "./extensibility/slash-commands";
224
224
  export type { MCPManager, MCPServerConfig, MCPServerConnection, MCPToolsLoadResult } from "./mcp";
225
225
  export type { Tool } from "./tools";
226
226
  export { buildDirectoryTree, buildWorkspaceTree, type DirectoryTree, type WorkspaceTree } from "./workspace-tree";
227
- export { BashTool, BUILTIN_TOOLS, createTools, EditTool, EvalTool, FindTool, HIDDEN_TOOLS, loadSshTool, ReadTool, ResolveTool, SearchTool, type ToolSession, WebSearchTool, WriteTool, };
227
+ export { BashTool, BUILTIN_TOOLS, createTools, EditTool, EvalTool, GlobTool, GrepTool, HIDDEN_TOOLS, loadSshTool, ReadTool, ResolveTool, type ToolSession, WebSearchTool, WriteTool, };
228
228
  /**
229
229
  * Create an AuthStorage instance.
230
230
  *