@nanocollective/nanocoder 1.13.3 → 1.13.4

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 (77) hide show
  1. package/README.md +1 -0
  2. package/dist/app/hooks/useAppInitialization.d.ts +3 -1
  3. package/dist/app/hooks/useAppInitialization.d.ts.map +1 -1
  4. package/dist/app/hooks/useAppInitialization.js +13 -2
  5. package/dist/app/hooks/useAppInitialization.js.map +1 -1
  6. package/dist/app/hooks/useAppState.d.ts +3 -2
  7. package/dist/app/hooks/useAppState.d.ts.map +1 -1
  8. package/dist/app/hooks/useAppState.js +3 -7
  9. package/dist/app/hooks/useAppState.js.map +1 -1
  10. package/dist/app/hooks/useChatHandler.d.ts +1 -3
  11. package/dist/app/hooks/useChatHandler.d.ts.map +1 -1
  12. package/dist/app/hooks/useChatHandler.js +10 -318
  13. package/dist/app/hooks/useChatHandler.js.map +1 -1
  14. package/dist/app/hooks/useModeHandlers.d.ts +2 -1
  15. package/dist/app/hooks/useModeHandlers.d.ts.map +1 -1
  16. package/dist/app/hooks/useModeHandlers.js +5 -2
  17. package/dist/app/hooks/useModeHandlers.js.map +1 -1
  18. package/dist/app/utils/appUtils.d.ts.map +1 -1
  19. package/dist/app/utils/appUtils.js +5 -1
  20. package/dist/app/utils/appUtils.js.map +1 -1
  21. package/dist/app.d.ts.map +1 -1
  22. package/dist/app.js +30 -5
  23. package/dist/app.js.map +1 -1
  24. package/dist/commands/index.d.ts +1 -0
  25. package/dist/commands/index.d.ts.map +1 -1
  26. package/dist/commands/index.js +1 -0
  27. package/dist/commands/index.js.map +1 -1
  28. package/dist/commands/status.d.ts +3 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +11 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/components/assistant-message.d.ts +1 -0
  33. package/dist/components/assistant-message.d.ts.map +1 -1
  34. package/dist/components/assistant-message.js +1 -1
  35. package/dist/components/assistant-message.js.map +1 -1
  36. package/dist/components/chat-queue.d.ts.map +1 -1
  37. package/dist/components/chat-queue.js +43 -19
  38. package/dist/components/chat-queue.js.map +1 -1
  39. package/dist/components/status.d.ts +10 -0
  40. package/dist/components/status.d.ts.map +1 -1
  41. package/dist/components/status.js +7 -25
  42. package/dist/components/status.js.map +1 -1
  43. package/dist/components/theme-selector.d.ts.map +1 -1
  44. package/dist/components/theme-selector.js +5 -2
  45. package/dist/components/theme-selector.js.map +1 -1
  46. package/dist/components/thinking-indicator.d.ts +1 -2
  47. package/dist/components/thinking-indicator.d.ts.map +1 -1
  48. package/dist/components/thinking-indicator.js +2 -9
  49. package/dist/components/thinking-indicator.js.map +1 -1
  50. package/dist/config/index.d.ts.map +1 -1
  51. package/dist/config/index.js +12 -1
  52. package/dist/config/index.js.map +1 -1
  53. package/dist/langgraph-client.d.ts +0 -1
  54. package/dist/langgraph-client.d.ts.map +1 -1
  55. package/dist/langgraph-client.js +8 -28
  56. package/dist/langgraph-client.js.map +1 -1
  57. package/dist/tools/delete-lines.d.ts.map +1 -1
  58. package/dist/tools/delete-lines.js +4 -12
  59. package/dist/tools/delete-lines.js.map +1 -1
  60. package/dist/tools/insert-lines.d.ts.map +1 -1
  61. package/dist/tools/insert-lines.js +4 -12
  62. package/dist/tools/insert-lines.js.map +1 -1
  63. package/dist/tools/read-file.js +17 -20
  64. package/dist/tools/read-file.js.map +1 -1
  65. package/dist/tools/read-many-files.d.ts.map +1 -1
  66. package/dist/tools/read-many-files.js +27 -29
  67. package/dist/tools/read-many-files.js.map +1 -1
  68. package/dist/tools/replace-lines.d.ts.map +1 -1
  69. package/dist/tools/replace-lines.js +4 -12
  70. package/dist/tools/replace-lines.js.map +1 -1
  71. package/dist/types/app.d.ts +3 -0
  72. package/dist/types/app.d.ts.map +1 -1
  73. package/dist/types/components.d.ts +1 -6
  74. package/dist/types/components.d.ts.map +1 -1
  75. package/dist/types/hooks.d.ts +0 -2
  76. package/dist/types/hooks.d.ts.map +1 -1
  77. package/package.json +2 -2
package/README.md CHANGED
@@ -300,6 +300,7 @@ Nanocoder automatically saves your preferences to remember your choices across s
300
300
  - `/clear` - Clear chat history
301
301
  - `/model` - Switch between available models
302
302
  - `/provider` - Switch between configured AI providers
303
+ - `/status` - Display current status (CWD, provider, model, theme, available updates, AGENTS setup)
303
304
  - `/recommendations` - Get AI model recommendations based on your system capabilities (RAM, GPU, network)
304
305
  - `/mcp` - Show connected MCP servers and their tools
305
306
  - `/debug` - Toggle logging levels (silent/normal/verbose)
@@ -3,6 +3,7 @@ import { LLMClient } from '../../types/core.js';
3
3
  import { ToolManager } from '../../tools/tool-manager.js';
4
4
  import { CustomCommandLoader } from '../../custom-commands/loader.js';
5
5
  import { CustomCommandExecutor } from '../../custom-commands/executor.js';
6
+ import type { UpdateInfo } from '../../types/index.js';
6
7
  interface UseAppInitializationProps {
7
8
  setClient: (client: LLMClient | null) => void;
8
9
  setCurrentModel: (model: string) => void;
@@ -13,11 +14,12 @@ interface UseAppInitializationProps {
13
14
  setCustomCommandCache: (cache: Map<string, any>) => void;
14
15
  setStartChat: (start: boolean) => void;
15
16
  setMcpInitialized: (initialized: boolean) => void;
17
+ setUpdateInfo: (info: UpdateInfo | null) => void;
16
18
  addToChatQueue: (component: React.ReactNode) => void;
17
19
  componentKeyCounter: number;
18
20
  customCommandCache: Map<string, any>;
19
21
  }
20
- export declare function useAppInitialization({ setClient, setCurrentModel, setCurrentProvider, setToolManager, setCustomCommandLoader, setCustomCommandExecutor, setCustomCommandCache, setStartChat, setMcpInitialized, addToChatQueue, componentKeyCounter, customCommandCache, }: UseAppInitializationProps): {
22
+ export declare function useAppInitialization({ setClient, setCurrentModel, setCurrentProvider, setToolManager, setCustomCommandLoader, setCustomCommandExecutor, setCustomCommandCache, setStartChat, setMcpInitialized, setUpdateInfo, addToChatQueue, componentKeyCounter, customCommandCache, }: UseAppInitializationProps): {
21
23
  initializeClient: (preferredProvider?: string) => Promise<void>;
22
24
  loadCustomCommands: (loader: CustomCommandLoader) => Promise<void>;
23
25
  initializeMCPServers: (toolManager: ToolManager) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"useAppInitialization.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useAppInitialization.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAC;AAkCxE,UAAU,yBAAyB;IAClC,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,sBAAsB,EAAE,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,wBAAwB,EAAE,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,qBAAqB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iBAAiB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED,wBAAgB,oBAAoB,CAAC,EACpC,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GAClB,EAAE,yBAAyB;2CAEyB,MAAM;iCA4BhB,mBAAmB;wCA4BZ,WAAW;EAoJ5D"}
1
+ {"version":3,"file":"useAppInitialization.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useAppInitialization.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAC;AAmCxE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAErD,UAAU,yBAAyB;IAClC,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,sBAAsB,EAAE,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IACrE,wBAAwB,EAAE,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,qBAAqB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,iBAAiB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AAED,wBAAgB,oBAAoB,CAAC,EACpC,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GAClB,EAAE,yBAAyB;2CAEyB,MAAM;iCA4BhB,mBAAmB;wCA4BZ,WAAW;EA+J5D"}
@@ -9,11 +9,12 @@ import { setToolManagerGetter, setToolRegistryGetter, } from '../../message-hand
9
9
  import { commandRegistry } from '../../commands.js';
10
10
  import { shouldLog } from '../../config/logging.js';
11
11
  import { appConfig } from '../../config/index.js';
12
- import { clearCommand, commandsCommand, debugCommand, exitCommand, exportCommand, helpCommand, initCommand, mcpCommand, modelCommand, providerCommand, recommendationsCommand, themeCommand, updateCommand, } from '../../commands/index.js';
12
+ import { clearCommand, commandsCommand, debugCommand, exitCommand, exportCommand, helpCommand, initCommand, mcpCommand, modelCommand, providerCommand, recommendationsCommand, statusCommand, themeCommand, updateCommand, } from '../../commands/index.js';
13
13
  import SuccessMessage from '../../components/success-message.js';
14
14
  import ErrorMessage from '../../components/error-message.js';
15
15
  import InfoMessage from '../../components/info-message.js';
16
- export function useAppInitialization({ setClient, setCurrentModel, setCurrentProvider, setToolManager, setCustomCommandLoader, setCustomCommandExecutor, setCustomCommandCache, setStartChat, setMcpInitialized, addToChatQueue, componentKeyCounter, customCommandCache, }) {
16
+ import { checkForUpdates } from '../../utils/update-checker.js';
17
+ export function useAppInitialization({ setClient, setCurrentModel, setCurrentProvider, setToolManager, setCustomCommandLoader, setCustomCommandExecutor, setCustomCommandCache, setStartChat, setMcpInitialized, setUpdateInfo, addToChatQueue, componentKeyCounter, customCommandCache, }) {
17
18
  // Initialize LLM client and model
18
19
  const initializeClient = async (preferredProvider) => {
19
20
  const { client, actualProvider } = await createLLMClient(preferredProvider);
@@ -134,9 +135,19 @@ export function useAppInitialization({ setClient, setCurrentModel, setCurrentPro
134
135
  exportCommand,
135
136
  updateCommand,
136
137
  recommendationsCommand,
138
+ statusCommand,
137
139
  ]);
138
140
  // Now start with the properly initialized objects (excluding MCP)
139
141
  await start(newToolManager, newCustomCommandLoader, preferences);
142
+ // Check for updates before showing UI
143
+ try {
144
+ const info = await checkForUpdates();
145
+ setUpdateInfo(info);
146
+ }
147
+ catch (error) {
148
+ // Silent failure - don't show errors for update checks
149
+ setUpdateInfo(null);
150
+ }
140
151
  setStartChat(true);
141
152
  // Initialize MCP servers after UI is shown
142
153
  await initializeMCPServers(newToolManager);
@@ -1 +1 @@
1
- {"version":3,"file":"useAppInitialization.js","sourceRoot":"","sources":["../../../source/app/hooks/useAppInitialization.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAppInitialization.js","sourceRoot":"","sources":["../../../source/app/hooks/useAppInitialization.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { ToolManager } from '../../tools/tool-manager.js';
3
3
  import { CustomCommandLoader } from '../../custom-commands/loader.js';
4
4
  import { CustomCommandExecutor } from '../../custom-commands/executor.js';
5
5
  import type { ThemePreset } from '../../types/ui.js';
6
+ import type { UpdateInfo } from '../../types/index.js';
6
7
  import React from 'react';
7
8
  export interface ThinkingStats {
8
9
  tokenCount: number;
@@ -29,9 +30,9 @@ export declare function useAppState(): {
29
30
  customCommandCache: Map<string, any>;
30
31
  startChat: boolean;
31
32
  mcpInitialized: boolean;
33
+ updateInfo: UpdateInfo | null;
32
34
  isThinking: boolean;
33
35
  isCancelling: boolean;
34
- thinkingStats: ThinkingStats;
35
36
  abortController: AbortController | null;
36
37
  isModelSelectionMode: boolean;
37
38
  isProviderSelectionMode: boolean;
@@ -61,9 +62,9 @@ export declare function useAppState(): {
61
62
  setCustomCommandCache: React.Dispatch<React.SetStateAction<Map<string, any>>>;
62
63
  setStartChat: React.Dispatch<React.SetStateAction<boolean>>;
63
64
  setMcpInitialized: React.Dispatch<React.SetStateAction<boolean>>;
65
+ setUpdateInfo: React.Dispatch<React.SetStateAction<UpdateInfo | null>>;
64
66
  setIsThinking: React.Dispatch<React.SetStateAction<boolean>>;
65
67
  setIsCancelling: React.Dispatch<React.SetStateAction<boolean>>;
66
- setThinkingStats: React.Dispatch<React.SetStateAction<ThinkingStats>>;
67
68
  setAbortController: React.Dispatch<React.SetStateAction<AbortController | null>>;
68
69
  setIsModelSelectionMode: React.Dispatch<React.SetStateAction<boolean>>;
69
70
  setIsProviderSelectionMode: React.Dispatch<React.SetStateAction<boolean>>;
@@ -1 +1 @@
1
- {"version":3,"file":"useAppState.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useAppState.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAC;AAGxE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IACnC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAsEb,KAAK,CAAC,SAAS;gCAwBjB,OAAO;kCAe+B,OAAO,EAAE;;EAiG1D"}
1
+ {"version":3,"file":"useAppState.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useAppState.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAC;AAGxE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IACnC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAmEb,KAAK,CAAC,SAAS;gCAwBjB,OAAO;kCAe+B,OAAO,EAAE;;EAiG1D"}
@@ -19,14 +19,10 @@ export function useAppState() {
19
19
  const [customCommandCache, setCustomCommandCache] = useState(new Map());
20
20
  const [startChat, setStartChat] = useState(false);
21
21
  const [mcpInitialized, setMcpInitialized] = useState(false);
22
+ const [updateInfo, setUpdateInfo] = useState(null);
22
23
  // Thinking indicator state
23
24
  const [isThinking, setIsThinking] = useState(false);
24
25
  const [isCancelling, setIsCancelling] = useState(false);
25
- const [thinkingStats, setThinkingStats] = useState({
26
- tokenCount: 0,
27
- contextSize: 0,
28
- totalTokensUsed: 0,
29
- });
30
26
  // Cancellation state
31
27
  const [abortController, setAbortController] = useState(null);
32
28
  // Mode states
@@ -109,9 +105,9 @@ export function useAppState() {
109
105
  customCommandCache,
110
106
  startChat,
111
107
  mcpInitialized,
108
+ updateInfo,
112
109
  isThinking,
113
110
  isCancelling,
114
- thinkingStats,
115
111
  abortController,
116
112
  isModelSelectionMode,
117
113
  isProviderSelectionMode,
@@ -142,9 +138,9 @@ export function useAppState() {
142
138
  setCustomCommandCache,
143
139
  setStartChat,
144
140
  setMcpInitialized,
141
+ setUpdateInfo,
145
142
  setIsThinking,
146
143
  setIsCancelling,
147
- setThinkingStats,
148
144
  setAbortController,
149
145
  setIsModelSelectionMode,
150
146
  setIsProviderSelectionMode,
@@ -1 +1 @@
1
- {"version":3,"file":"useAppState.js","sourceRoot":"","sources":["../../../source/app/hooks/useAppState.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAppState.js","sourceRoot":"","sources":["../../../source/app/hooks/useAppState.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { LLMClient, Message } from '../../types/core.js';
2
2
  import { ToolManager } from '../../tools/tool-manager.js';
3
- import { ThinkingStats } from './useAppState.js';
4
3
  import React from 'react';
5
4
  interface UseChatHandlerProps {
6
5
  client: LLMClient | null;
@@ -11,7 +10,6 @@ interface UseChatHandlerProps {
11
10
  currentModel: string;
12
11
  setIsThinking: (thinking: boolean) => void;
13
12
  setIsCancelling: (cancelling: boolean) => void;
14
- setThinkingStats: (stats: ThinkingStats | ((prev: ThinkingStats) => ThinkingStats)) => void;
15
13
  addToChatQueue: (component: React.ReactNode) => void;
16
14
  componentKeyCounter: number;
17
15
  abortController: AbortController | null;
@@ -19,7 +17,7 @@ interface UseChatHandlerProps {
19
17
  developmentMode?: 'normal' | 'auto-accept' | 'plan';
20
18
  onStartToolConfirmationFlow: (toolCalls: any[], updatedMessages: Message[], assistantMsg: Message, systemMessage: Message) => void;
21
19
  }
22
- export declare function useChatHandler({ client, toolManager, messages, setMessages, getMessageTokens, currentModel, setIsThinking, setIsCancelling, setThinkingStats, addToChatQueue, componentKeyCounter, abortController, setAbortController, developmentMode, onStartToolConfirmationFlow, }: UseChatHandlerProps): {
20
+ export declare function useChatHandler({ client, toolManager, messages, setMessages, getMessageTokens, currentModel, setIsThinking, setIsCancelling, addToChatQueue, componentKeyCounter, abortController, setAbortController, developmentMode, onStartToolConfirmationFlow, }: UseChatHandlerProps): {
23
21
  handleChatMessage: (message: string) => Promise<void>;
24
22
  processAssistantResponse: (systemMessage: Message, messages: Message[]) => Promise<void>;
25
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useChatHandler.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useChatHandler.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAuB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAYxD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAuC1B,UAAU,mBAAmB;IAC5B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,gBAAgB,EAAE,CACjB,KAAK,EAAE,aAAa,GAAG,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,aAAa,CAAC,KAC3D,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,eAAe,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IACpD,2BAA2B,EAAE,CAC5B,SAAS,EAAE,GAAG,EAAE,EAChB,eAAe,EAAE,OAAO,EAAE,EAC1B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,KAClB,IAAI,CAAC;CACV;AAED,wBAAgB,cAAc,CAAC,EAC9B,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,eAA0B,EAC1B,2BAA2B,GAC3B,EAAE,mBAAmB;iCAi4BqB,MAAM;8CA/WhC,OAAO,YACZ,OAAO,EAAE;EAycpB"}
1
+ {"version":3,"file":"useChatHandler.d.ts","sourceRoot":"","sources":["../../../source/app/hooks/useChatHandler.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAuB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAaxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAuC1B,UAAU,mBAAmB;IAC5B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAE/C,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,eAAe,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IACpD,2BAA2B,EAAE,CAC5B,SAAS,EAAE,GAAG,EAAE,EAChB,eAAe,EAAE,OAAO,EAAE,EAC1B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,KAClB,IAAI,CAAC;CACV;AAED,wBAAgB,cAAc,CAAC,EAC9B,MAAM,EACN,WAAW,EACX,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,eAA0B,EAC1B,2BAA2B,GAC3B,EAAE,mBAAmB;iCAudqB,MAAM;8CA/VhC,OAAO,YACZ,OAAO,EAAE;EAgbpB"}
@@ -36,7 +36,7 @@ const filterValidToolCalls = (toolCalls) => {
36
36
  return true;
37
37
  });
38
38
  };
39
- export function useChatHandler({ client, toolManager, messages, setMessages, getMessageTokens, currentModel, setIsThinking, setIsCancelling, setThinkingStats, addToChatQueue, componentKeyCounter, abortController, setAbortController, developmentMode = 'normal', onStartToolConfirmationFlow, }) {
39
+ export function useChatHandler({ client, toolManager, messages, setMessages, getMessageTokens, currentModel, setIsThinking, setIsCancelling, addToChatQueue, componentKeyCounter, abortController, setAbortController, developmentMode = 'normal', onStartToolConfirmationFlow, }) {
40
40
  // Conversation state manager for enhanced context
41
41
  const conversationStateManager = React.useRef(new ConversationStateManager());
42
42
  // Reset conversation state when messages are cleared
@@ -82,18 +82,6 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
82
82
  }
83
83
  }
84
84
  };
85
- // Throttle thinking stats updates to reduce re-renders
86
- const throttledSetThinkingStats = React.useCallback((() => {
87
- let lastUpdate = 0;
88
- const throttleMs = 250; // Update at most 4 times per second
89
- return (stats) => {
90
- const now = Date.now();
91
- if (now - lastUpdate >= throttleMs) {
92
- lastUpdate = now;
93
- setThinkingStats(stats);
94
- }
95
- };
96
- })(), [setThinkingStats]);
97
85
  // Helper to make async iterator cancellable with frequent abort checking
98
86
  const makeCancellableStream = async function* (stream, abortSignal) {
99
87
  const iterator = stream[Symbol.asyncIterator]();
@@ -132,286 +120,6 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
132
120
  }
133
121
  }
134
122
  };
135
- // Process assistant response with token tracking (for initial user messages)
136
- const processAssistantResponseWithTokenTracking = async (systemMessage, messages, controller) => {
137
- if (!client)
138
- return;
139
- const stream = client.chatStream([systemMessage, ...messages], toolManager?.getAllTools() || []);
140
- let toolCalls = null;
141
- let fullContent = '';
142
- let tokenCount = 0;
143
- let hasContent = false;
144
- // Process streaming response with cancellation support
145
- const cancellableStream = makeCancellableStream(stream, controller.signal);
146
- for await (const chunk of cancellableStream) {
147
- hasContent = true;
148
- if (chunk.message?.content) {
149
- fullContent += chunk.message.content;
150
- tokenCount = Math.ceil(fullContent.length / 4);
151
- }
152
- // If server provides eval_count, use it as it's more accurate
153
- // But ensure we don't reset to a lower count if content tokens are higher
154
- if (chunk.eval_count) {
155
- tokenCount = Math.max(tokenCount, chunk.eval_count);
156
- }
157
- if (chunk.message?.tool_calls) {
158
- toolCalls = chunk.message.tool_calls;
159
- }
160
- // Update thinking stats in real-time
161
- if (!chunk.done) {
162
- const systemTokens = Math.ceil(systemMessage.content.length / 4); // Use actual system prompt length
163
- const conversationTokens = getMessageTokens
164
- ? messages.reduce((total, msg) => total + getMessageTokens(msg), 0)
165
- : messages.reduce((total, msg) => total + Math.ceil((msg.content?.length || 0) / 4), 0);
166
- const totalTokensUsed = systemTokens + conversationTokens + tokenCount;
167
- throttledSetThinkingStats({
168
- tokenCount,
169
- contextSize: client.getContextSize(),
170
- totalTokensUsed,
171
- tokensPerSecond: chunk.tokens_per_second,
172
- });
173
- }
174
- }
175
- if (!hasContent) {
176
- throw new Error('No response received from model');
177
- }
178
- // Parse any tool calls from content for non-tool-calling models
179
- const parsedToolCalls = parseToolCallsFromContent(fullContent);
180
- const cleanedContent = cleanContentFromToolCalls(fullContent, parsedToolCalls);
181
- // Display the assistant response (cleaned of any tool calls)
182
- if (cleanedContent.trim()) {
183
- addToChatQueue(_jsx(AssistantMessage, { message: cleanedContent, model: currentModel }, `assistant-${componentKeyCounter}`));
184
- }
185
- // Merge structured tool calls from LangGraph with content-parsed tool calls
186
- const allToolCalls = [...(toolCalls || []), ...parsedToolCalls];
187
- const validToolCalls = filterValidToolCalls(allToolCalls);
188
- // Add assistant message to conversation history
189
- const assistantMsg = {
190
- role: 'assistant',
191
- content: cleanedContent,
192
- tool_calls: validToolCalls.length > 0 ? validToolCalls : undefined,
193
- };
194
- setMessages([...messages, assistantMsg]);
195
- // Update conversation state with assistant message
196
- conversationStateManager.current.updateAssistantMessage(assistantMsg);
197
- // Handle tool calls if present - this continues the loop
198
- if (validToolCalls && validToolCalls.length > 0) {
199
- // First, validate tools and separate valid from unknown
200
- const knownToolCalls = [];
201
- const unknownToolErrors = [];
202
- for (const toolCall of validToolCalls) {
203
- if (!toolManager?.hasTool(toolCall.function.name)) {
204
- // Get list of available tools for helpful error message
205
- const availableTools = toolManager?.getAllTools().map(t => t.function.name) || [];
206
- const toolList = availableTools.slice(0, 5).join(', ');
207
- const moreTools = availableTools.length > 5
208
- ? ` (and ${availableTools.length - 5} more)`
209
- : '';
210
- // Create error result for unknown tool
211
- const errorResult = {
212
- tool_call_id: toolCall.id,
213
- role: 'tool',
214
- name: toolCall.function.name,
215
- content: `⚒ Unknown tool: "${toolCall.function.name}". Available tools: ${toolList}${moreTools}`,
216
- };
217
- unknownToolErrors.push(errorResult);
218
- // Display the error to user
219
- addToChatQueue(_jsx(ErrorMessage, { message: `⚒ Unknown tool: "${toolCall.function.name}"`, hideBox: true }, `unknown-tool-${toolCall.id}-${Date.now()}`));
220
- }
221
- else {
222
- // Tool exists, add to valid list
223
- knownToolCalls.push(toolCall);
224
- }
225
- }
226
- // If there were unknown tools, continue conversation with all errors
227
- if (unknownToolErrors.length > 0) {
228
- const toolMessages = unknownToolErrors.map(result => ({
229
- role: 'tool',
230
- content: result.content || '',
231
- tool_call_id: result.tool_call_id,
232
- name: result.name,
233
- }));
234
- const updatedMessagesWithError = [
235
- ...messages,
236
- assistantMsg,
237
- ...toolMessages,
238
- ];
239
- setMessages(updatedMessagesWithError);
240
- // Continue the main conversation loop with error messages as context
241
- await processAssistantResponse(systemMessage, updatedMessagesWithError);
242
- return;
243
- }
244
- // If we get here, all tools are valid - proceed with normal flow
245
- // Use knownToolCalls for the rest of the processing
246
- // In Plan Mode, block file modification tools
247
- if (developmentMode === 'plan') {
248
- const fileModificationTools = ['create_file', 'delete_lines', 'insert_lines', 'replace_lines'];
249
- const blockedTools = knownToolCalls.filter(tc => fileModificationTools.includes(tc.function.name));
250
- if (blockedTools.length > 0) {
251
- // Create error results for blocked tools
252
- const blockedToolErrors = blockedTools.map(toolCall => ({
253
- tool_call_id: toolCall.id,
254
- role: 'tool',
255
- name: toolCall.function.name,
256
- content: `⚠ Tool "${toolCall.function.name}" is not allowed in Plan Mode. File modification tools are restricted in this mode. Switch to Normal Mode or Auto-accept Mode to execute file modifications.`,
257
- }));
258
- // Display error messages
259
- for (const error of blockedToolErrors) {
260
- addToChatQueue(_jsx(ErrorMessage, { message: error.content, hideBox: true }, `plan-mode-blocked-${error.tool_call_id}-${Date.now()}`));
261
- }
262
- // Continue conversation with error messages
263
- const toolMessages = blockedToolErrors.map(result => ({
264
- role: 'tool',
265
- content: result.content || '',
266
- tool_call_id: result.tool_call_id,
267
- name: result.name,
268
- }));
269
- const updatedMessagesWithError = [
270
- ...messages,
271
- assistantMsg,
272
- ...toolMessages,
273
- ];
274
- setMessages(updatedMessagesWithError);
275
- // Continue the main conversation loop with error messages as context
276
- await processAssistantResponse(systemMessage, updatedMessagesWithError);
277
- return;
278
- }
279
- }
280
- // Separate tools that need confirmation vs those that don't
281
- // BUT: if a tool fails validation, execute directly (skip confirmation)
282
- const toolsNeedingConfirmation = [];
283
- const toolsToExecuteDirectly = [];
284
- for (const toolCall of knownToolCalls) {
285
- const toolDef = toolDefinitions.find(def => def.config.function.name === toolCall.function.name);
286
- // Check if tool has a validator
287
- let validationFailed = false;
288
- if (toolManager) {
289
- const validator = toolManager.getToolValidator(toolCall.function.name);
290
- if (validator) {
291
- try {
292
- // Parse arguments if they're a JSON string
293
- let parsedArgs = toolCall.function.arguments;
294
- if (typeof parsedArgs === 'string') {
295
- try {
296
- parsedArgs = JSON.parse(parsedArgs);
297
- }
298
- catch (e) {
299
- // If parsing fails, use as-is
300
- }
301
- }
302
- const validationResult = await validator(parsedArgs);
303
- if (!validationResult.valid) {
304
- validationFailed = true;
305
- }
306
- }
307
- catch (error) {
308
- // Validation threw an error - treat as validation failure
309
- validationFailed = true;
310
- }
311
- }
312
- }
313
- // If validation failed OR tool doesn't require confirmation OR in auto-accept mode, execute directly
314
- // EXCEPT: execute_bash always requires confirmation for security
315
- const isBashTool = toolCall.function.name === 'execute_bash';
316
- if (validationFailed ||
317
- (toolDef && toolDef.requiresConfirmation === false) ||
318
- (developmentMode === 'auto-accept' && !isBashTool)) {
319
- toolsToExecuteDirectly.push(toolCall);
320
- }
321
- else {
322
- toolsNeedingConfirmation.push(toolCall);
323
- }
324
- }
325
- // Execute non-confirmation tools directly
326
- if (toolsToExecuteDirectly.length > 0) {
327
- // Import processToolUse here to avoid circular dependencies
328
- const { processToolUse } = await import('../../message-handler.js');
329
- const directResults = [];
330
- for (const toolCall of toolsToExecuteDirectly) {
331
- try {
332
- // Double-check tool exists before execution (safety net)
333
- if (!toolManager?.hasTool(toolCall.function.name)) {
334
- throw new Error(`Unknown tool: ${toolCall.function.name}`);
335
- }
336
- // Run validator if available
337
- const validator = toolManager?.getToolValidator(toolCall.function.name);
338
- if (validator) {
339
- // Parse arguments if they're a JSON string
340
- let parsedArgs = toolCall.function.arguments;
341
- if (typeof parsedArgs === 'string') {
342
- try {
343
- parsedArgs = JSON.parse(parsedArgs);
344
- }
345
- catch (e) {
346
- // If parsing fails, use as-is
347
- }
348
- }
349
- const validationResult = await validator(parsedArgs);
350
- if (!validationResult.valid) {
351
- // Validation failed - create error result and skip execution
352
- const errorResult = {
353
- tool_call_id: toolCall.id,
354
- role: 'tool',
355
- name: toolCall.function.name,
356
- content: validationResult.error,
357
- };
358
- directResults.push(errorResult);
359
- // Update conversation state with error
360
- conversationStateManager.current.updateAfterToolExecution(toolCall, errorResult.content);
361
- // Display the validation error to the user
362
- addToChatQueue(_jsx(ErrorMessage, { message: validationResult.error, hideBox: true }, `validation-error-${toolCall.id}-${Date.now()}`));
363
- continue; // Skip to next tool
364
- }
365
- }
366
- const result = await processToolUse(toolCall);
367
- directResults.push(result);
368
- // Update conversation state with tool execution
369
- conversationStateManager.current.updateAfterToolExecution(toolCall, result.content);
370
- // Display the tool result immediately
371
- await displayToolResult(toolCall, result);
372
- }
373
- catch (error) {
374
- // Handle tool execution errors
375
- const errorResult = {
376
- tool_call_id: toolCall.id,
377
- role: 'tool',
378
- name: toolCall.function.name,
379
- content: `Error: ${error instanceof Error ? error.message : String(error)}`,
380
- };
381
- directResults.push(errorResult);
382
- // Update conversation state with error
383
- conversationStateManager.current.updateAfterToolExecution(toolCall, errorResult.content);
384
- // Display the error result
385
- await displayToolResult(toolCall, errorResult);
386
- }
387
- }
388
- // If we have results, continue the conversation with them
389
- if (directResults.length > 0) {
390
- // Format tool results as standard tool messages
391
- const toolMessages = directResults.map(result => ({
392
- role: 'tool',
393
- content: result.content || '',
394
- tool_call_id: result.tool_call_id,
395
- name: result.name,
396
- }));
397
- const updatedMessagesWithTools = [
398
- ...messages,
399
- assistantMsg,
400
- ...toolMessages,
401
- ];
402
- setMessages(updatedMessagesWithTools);
403
- // Continue the main conversation loop with tool results as context
404
- await processAssistantResponse(systemMessage, updatedMessagesWithTools);
405
- return;
406
- }
407
- }
408
- // Start confirmation flow only for tools that need it
409
- if (toolsNeedingConfirmation.length > 0) {
410
- onStartToolConfirmationFlow(toolsNeedingConfirmation, messages, assistantMsg, systemMessage);
411
- return; // IMPORTANT: Stop processing here, wait for user confirmation
412
- }
413
- }
414
- };
415
123
  // Process assistant response - handles the conversation loop with potential tool calls (for follow-ups)
416
124
  const processAssistantResponse = async (systemMessage, messages) => {
417
125
  if (!client)
@@ -445,20 +153,6 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
445
153
  if (chunk.message?.tool_calls) {
446
154
  toolCalls = chunk.message.tool_calls;
447
155
  }
448
- // Update thinking stats in real-time (similar to initial response)
449
- if (!chunk.done) {
450
- const systemTokens = Math.ceil(systemMessage.content.length / 4); // Use actual system prompt length
451
- const conversationTokens = getMessageTokens
452
- ? messages.reduce((total, msg) => total + getMessageTokens(msg), 0)
453
- : messages.reduce((total, msg) => total + Math.ceil((msg.content?.length || 0) / 4), 0);
454
- const totalTokensUsed = systemTokens + conversationTokens + tokenCount;
455
- throttledSetThinkingStats({
456
- tokenCount,
457
- contextSize: client.getContextSize(),
458
- totalTokensUsed,
459
- tokensPerSecond: chunk.tokens_per_second,
460
- });
461
- }
462
156
  }
463
157
  if (!hasContent) {
464
158
  throw new Error('No response received from model');
@@ -486,7 +180,12 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
486
180
  if (validToolCalls && validToolCalls.length > 0) {
487
181
  // In Plan Mode, block file modification tools
488
182
  if (developmentMode === 'plan') {
489
- const fileModificationTools = ['create_file', 'delete_lines', 'insert_lines', 'replace_lines'];
183
+ const fileModificationTools = [
184
+ 'create_file',
185
+ 'delete_lines',
186
+ 'insert_lines',
187
+ 'replace_lines',
188
+ ];
490
189
  const blockedTools = validToolCalls.filter(tc => fileModificationTools.includes(tc.function.name));
491
190
  if (blockedTools.length > 0) {
492
191
  // Create error results for blocked tools
@@ -514,8 +213,7 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
514
213
  ];
515
214
  setMessages(updatedMessagesWithError);
516
215
  // Continue the main conversation loop with error messages as context
517
- const controller = new AbortController();
518
- await processAssistantResponseWithTokenTracking(systemMessage, updatedMessagesWithError, controller);
216
+ await processAssistantResponse(systemMessage, updatedMessagesWithError);
519
217
  return;
520
218
  }
521
219
  }
@@ -639,8 +337,7 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
639
337
  ];
640
338
  setMessages(updatedMessagesWithTools);
641
339
  // Continue the main conversation loop with tool results as context
642
- const controller = new AbortController();
643
- await processAssistantResponseWithTokenTracking(systemMessage, updatedMessagesWithTools, controller);
340
+ await processAssistantResponse(systemMessage, updatedMessagesWithTools);
644
341
  return;
645
342
  }
646
343
  }
@@ -702,13 +399,8 @@ export function useChatHandler({ client, toolManager, messages, setMessages, get
702
399
  // Use the new conversation loop
703
400
  // Initialize per-message stats with actual system prompt tokens
704
401
  const systemTokens = Math.ceil(systemMessage.content.length / 4);
705
- setThinkingStats({
706
- tokenCount: 0,
707
- contextSize: client.getContextSize(),
708
- totalTokensUsed: systemTokens + existingConversationTokens,
709
- });
710
402
  // Use the new conversation loop
711
- await processAssistantResponseWithTokenTracking(systemMessage, updatedMessages, controller);
403
+ await processAssistantResponse(systemMessage, updatedMessages);
712
404
  }
713
405
  catch (error) {
714
406
  if (error instanceof Error &&