@defai.digital/ax-cli 3.6.1 → 3.7.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 (137) hide show
  1. package/README.md +129 -16
  2. package/config-defaults/settings.yaml +24 -0
  3. package/dist/agent/llm-agent.d.ts +48 -3
  4. package/dist/agent/llm-agent.js +145 -40
  5. package/dist/agent/llm-agent.js.map +1 -1
  6. package/dist/agent/subagent.d.ts +6 -0
  7. package/dist/agent/subagent.js +41 -24
  8. package/dist/agent/subagent.js.map +1 -1
  9. package/dist/constants.d.ts +13 -0
  10. package/dist/constants.js +28 -0
  11. package/dist/constants.js.map +1 -1
  12. package/dist/index.js +0 -0
  13. package/dist/mcp/client.js +2 -2
  14. package/dist/mcp/client.js.map +1 -1
  15. package/dist/schemas/settings-schemas.d.ts +17 -0
  16. package/dist/schemas/settings-schemas.js +15 -0
  17. package/dist/schemas/settings-schemas.js.map +1 -1
  18. package/dist/sdk/errors.d.ts +93 -0
  19. package/dist/sdk/errors.js +124 -0
  20. package/dist/sdk/errors.js.map +1 -0
  21. package/dist/sdk/index.d.ts +116 -46
  22. package/dist/sdk/index.js +178 -57
  23. package/dist/sdk/index.js.map +1 -1
  24. package/dist/sdk/progress-reporter.d.ts +111 -0
  25. package/dist/sdk/progress-reporter.js +178 -0
  26. package/dist/sdk/progress-reporter.js.map +1 -0
  27. package/dist/sdk/testing.d.ts +184 -0
  28. package/dist/sdk/testing.js +291 -0
  29. package/dist/sdk/testing.js.map +1 -0
  30. package/dist/sdk/tool-registry.d.ts +163 -0
  31. package/dist/sdk/tool-registry.js +218 -0
  32. package/dist/sdk/tool-registry.js.map +1 -0
  33. package/dist/sdk/unified-logger.d.ts +163 -0
  34. package/dist/sdk/unified-logger.js +274 -0
  35. package/dist/sdk/unified-logger.js.map +1 -0
  36. package/dist/sdk/version.d.ts +59 -0
  37. package/dist/sdk/version.js +64 -0
  38. package/dist/sdk/version.js.map +1 -0
  39. package/dist/tools/bash.d.ts +4 -0
  40. package/dist/tools/bash.js +22 -2
  41. package/dist/tools/bash.js.map +1 -1
  42. package/dist/ui/components/chat-history.d.ts +2 -0
  43. package/dist/ui/components/chat-history.js +32 -81
  44. package/dist/ui/components/chat-history.js.map +1 -1
  45. package/dist/ui/components/chat-interface.js +3 -3
  46. package/dist/ui/components/chat-interface.js.map +1 -1
  47. package/dist/ui/components/status-bar.d.ts +2 -0
  48. package/dist/ui/components/status-bar.js +33 -9
  49. package/dist/ui/components/status-bar.js.map +1 -1
  50. package/dist/ui/components/tool-group-display.d.ts +15 -0
  51. package/dist/ui/components/tool-group-display.js +91 -0
  52. package/dist/ui/components/tool-group-display.js.map +1 -0
  53. package/dist/ui/hooks/use-enhanced-input.js +43 -6
  54. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  55. package/dist/ui/hooks/use-input-handler.d.ts +2 -0
  56. package/dist/ui/hooks/use-input-handler.js +13 -7
  57. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  58. package/dist/ui/utils/change-summarizer.d.ts +20 -0
  59. package/dist/ui/utils/change-summarizer.js +193 -0
  60. package/dist/ui/utils/change-summarizer.js.map +1 -0
  61. package/dist/ui/utils/tool-grouper.d.ts +62 -0
  62. package/dist/ui/utils/tool-grouper.js +224 -0
  63. package/dist/ui/utils/tool-grouper.js.map +1 -0
  64. package/dist/utils/config-loader.d.ts +4 -0
  65. package/dist/utils/config-loader.js.map +1 -1
  66. package/dist/utils/paste-utils.js +45 -19
  67. package/dist/utils/paste-utils.js.map +1 -1
  68. package/dist/utils/token-counter.d.ts +12 -0
  69. package/dist/utils/token-counter.js +32 -4
  70. package/dist/utils/token-counter.js.map +1 -1
  71. package/package.json +2 -2
  72. package/packages/schemas/package.json +1 -1
  73. package/.ax-cli/CUSTOM.md +0 -269
  74. package/.ax-cli/checkpoints/2025-11-20/checkpoint-11e9e0ba-c39d-4fd2-aa77-bc818811c921.json +0 -69
  75. package/.ax-cli/checkpoints/2025-11-20/checkpoint-2b260b98-b418-4c7c-9694-e2b94967e662.json +0 -24
  76. package/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +0 -69
  77. package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +0 -24
  78. package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +0 -69
  79. package/.ax-cli/checkpoints/2025-11-20/checkpoint-7e03601e-e8ab-4cd7-9841-a74b66adf78f.json +0 -69
  80. package/.ax-cli/checkpoints/2025-11-20/checkpoint-7f9c6562-771f-4fd0-adcf-9e7e9ac34ae8.json +0 -44
  81. package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +0 -44
  82. package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +0 -24
  83. package/.ax-cli/checkpoints/2025-11-20/checkpoint-e1ebe666-4c3a-4367-ba5c-27fe512a9c70.json +0 -24
  84. package/.ax-cli/checkpoints/2025-11-21/checkpoint-15743e7d-430c-4d76-b6fc-955d7a5c250c.json +0 -44
  85. package/.ax-cli/checkpoints/2025-11-21/checkpoint-25cf7679-0b3f-4988-83d7-704548fbba91.json +0 -69
  86. package/.ax-cli/checkpoints/2025-11-21/checkpoint-54aedbac-6db0-464e-8ebb-dbb3979e6dca.json +0 -24
  87. package/.ax-cli/checkpoints/2025-11-21/checkpoint-7658aed8-fe5d-4222-903f-1a7c63717ea7.json +0 -24
  88. package/.ax-cli/checkpoints/2025-11-21/checkpoint-c9c13497-40dc-4294-a327-6a5fc854eaa1.json +0 -69
  89. package/.ax-cli/checkpoints/metadata.json +0 -62
  90. package/.ax-cli/index.json +0 -44
  91. package/.ax-cli/memory.json +0 -62
  92. package/.ax-cli/settings.json +0 -1
  93. package/ax.config.json +0 -333
  94. package/dist/agent/chat-history-manager.d.ts +0 -56
  95. package/dist/agent/chat-history-manager.js +0 -150
  96. package/dist/agent/chat-history-manager.js.map +0 -1
  97. package/dist/agent/tool-manager.d.ts +0 -39
  98. package/dist/agent/tool-manager.js +0 -76
  99. package/dist/agent/tool-manager.js.map +0 -1
  100. package/dist/hooks/use-chat-reducer.d.ts +0 -61
  101. package/dist/hooks/use-chat-reducer.js +0 -118
  102. package/dist/hooks/use-chat-reducer.js.map +0 -1
  103. package/dist/hooks/use-enhanced-input.d.ts +0 -40
  104. package/dist/hooks/use-enhanced-input.js +0 -249
  105. package/dist/hooks/use-enhanced-input.js.map +0 -1
  106. package/dist/hooks/use-input-handler.d.ts +0 -46
  107. package/dist/hooks/use-input-handler.js +0 -1430
  108. package/dist/hooks/use-input-handler.js.map +0 -1
  109. package/dist/hooks/use-input-history.d.ts +0 -9
  110. package/dist/hooks/use-input-history.js +0 -112
  111. package/dist/hooks/use-input-history.js.map +0 -1
  112. package/dist/index.js.bak +0 -664
  113. package/dist/tools/web-search/engines/brave.d.ts +0 -16
  114. package/dist/tools/web-search/engines/brave.js +0 -99
  115. package/dist/tools/web-search/engines/brave.js.map +0 -1
  116. package/dist/tools/web-search/engines/tavily.d.ts +0 -17
  117. package/dist/tools/web-search/engines/tavily.js +0 -73
  118. package/dist/tools/web-search/engines/tavily.js.map +0 -1
  119. package/dist/utils/paste-collapse.d.ts +0 -46
  120. package/dist/utils/paste-collapse.js +0 -77
  121. package/dist/utils/paste-collapse.js.map +0 -1
  122. package/packages/schemas/dist/index.d.ts +0 -14
  123. package/packages/schemas/dist/index.d.ts.map +0 -1
  124. package/packages/schemas/dist/index.js +0 -19
  125. package/packages/schemas/dist/index.js.map +0 -1
  126. package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
  127. package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
  128. package/packages/schemas/dist/public/core/brand-types.js +0 -243
  129. package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
  130. package/packages/schemas/dist/public/core/enums.d.ts +0 -227
  131. package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
  132. package/packages/schemas/dist/public/core/enums.js +0 -222
  133. package/packages/schemas/dist/public/core/enums.js.map +0 -1
  134. package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
  135. package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
  136. package/packages/schemas/dist/public/core/id-types.js +0 -136
  137. package/packages/schemas/dist/public/core/id-types.js.map +0 -1
@@ -1,61 +0,0 @@
1
- /**
2
- * Unified chat state reducer for batched state updates
3
- * Reduces re-renders by combining multiple state changes into single update
4
- */
5
- import type { ChatEntry } from '../agent/llm-agent.js';
6
- export interface ChatState {
7
- history: ChatEntry[];
8
- isProcessing: boolean;
9
- isStreaming: boolean;
10
- tokenCount: number;
11
- processingTime: number;
12
- contextPercentage: number;
13
- showAutoPrune: boolean;
14
- }
15
- export type ChatAction = {
16
- type: 'ADD_ENTRY';
17
- entry: ChatEntry;
18
- } | {
19
- type: 'UPDATE_STREAMING_CONTENT';
20
- content: string;
21
- } | {
22
- type: 'UPDATE_LAST_ENTRY';
23
- updates: Partial<ChatEntry>;
24
- } | {
25
- type: 'BATCH_UPDATE';
26
- updates: Partial<ChatState>;
27
- } | {
28
- type: 'START_PROCESSING';
29
- } | {
30
- type: 'STOP_PROCESSING';
31
- } | {
32
- type: 'START_STREAMING';
33
- } | {
34
- type: 'STOP_STREAMING';
35
- } | {
36
- type: 'UPDATE_TOKEN_COUNT';
37
- count: number;
38
- } | {
39
- type: 'UPDATE_PROCESSING_TIME';
40
- time: number;
41
- } | {
42
- type: 'UPDATE_CONTEXT_PERCENTAGE';
43
- percentage: number;
44
- showAutoPrune?: boolean;
45
- } | {
46
- type: 'CLEAR_HISTORY';
47
- } | {
48
- type: 'REPLACE_HISTORY';
49
- history: ChatEntry[];
50
- } | {
51
- type: 'UPDATE_TOOL_RESULT';
52
- toolCallId: string;
53
- result: any;
54
- };
55
- export interface UseChatReducerOptions {
56
- initialHistory?: ChatEntry[];
57
- }
58
- export declare const useChatReducer: (options?: UseChatReducerOptions) => {
59
- state: ChatState;
60
- dispatch: import("react").Dispatch<ChatAction>;
61
- };
@@ -1,118 +0,0 @@
1
- /**
2
- * Unified chat state reducer for batched state updates
3
- * Reduces re-renders by combining multiple state changes into single update
4
- */
5
- import { useReducer } from 'react';
6
- const chatReducer = (state, action) => {
7
- switch (action.type) {
8
- case 'BATCH_UPDATE':
9
- // Most efficient: update multiple fields in one re-render
10
- return { ...state, ...action.updates };
11
- case 'ADD_ENTRY':
12
- // Add new chat entry
13
- return {
14
- ...state,
15
- history: [...state.history, action.entry],
16
- };
17
- case 'UPDATE_STREAMING_CONTENT':
18
- // Update content of the last streaming entry
19
- return {
20
- ...state,
21
- history: state.history.map((entry, idx) => idx === state.history.length - 1 && entry.isStreaming
22
- ? { ...entry, content: entry.content + action.content }
23
- : entry),
24
- };
25
- case 'UPDATE_LAST_ENTRY':
26
- // Update specific fields of the last entry
27
- return {
28
- ...state,
29
- history: state.history.map((entry, idx) => idx === state.history.length - 1
30
- ? { ...entry, ...action.updates }
31
- : entry),
32
- };
33
- case 'START_PROCESSING':
34
- return {
35
- ...state,
36
- isProcessing: true,
37
- };
38
- case 'STOP_PROCESSING':
39
- return {
40
- ...state,
41
- isProcessing: false,
42
- processingTime: 0,
43
- };
44
- case 'START_STREAMING':
45
- return {
46
- ...state,
47
- isStreaming: true,
48
- };
49
- case 'STOP_STREAMING':
50
- return {
51
- ...state,
52
- isStreaming: false,
53
- };
54
- case 'UPDATE_TOKEN_COUNT':
55
- return {
56
- ...state,
57
- tokenCount: action.count,
58
- };
59
- case 'UPDATE_PROCESSING_TIME':
60
- return {
61
- ...state,
62
- processingTime: action.time,
63
- };
64
- case 'UPDATE_CONTEXT_PERCENTAGE':
65
- return {
66
- ...state,
67
- contextPercentage: action.percentage,
68
- showAutoPrune: action.showAutoPrune ?? state.showAutoPrune,
69
- };
70
- case 'CLEAR_HISTORY':
71
- return {
72
- ...state,
73
- history: [],
74
- tokenCount: 0,
75
- processingTime: 0,
76
- isProcessing: false,
77
- isStreaming: false,
78
- };
79
- case 'REPLACE_HISTORY':
80
- return {
81
- ...state,
82
- history: action.history,
83
- };
84
- case 'UPDATE_TOOL_RESULT':
85
- // Update a specific tool call entry with results
86
- return {
87
- ...state,
88
- history: state.history.map((entry) => {
89
- if (entry.type === 'tool_call' && entry.toolCall?.id === action.toolCallId) {
90
- return {
91
- ...entry,
92
- type: 'tool_result',
93
- content: action.result.success
94
- ? action.result.output || 'Success'
95
- : action.result.error || 'Error occurred',
96
- toolResult: action.result,
97
- };
98
- }
99
- return entry;
100
- }),
101
- };
102
- default:
103
- return state;
104
- }
105
- };
106
- export const useChatReducer = (options = {}) => {
107
- const [state, dispatch] = useReducer(chatReducer, {
108
- history: options.initialHistory || [],
109
- isProcessing: false,
110
- isStreaming: false,
111
- tokenCount: 0,
112
- processingTime: 0,
113
- contextPercentage: 0,
114
- showAutoPrune: false,
115
- });
116
- return { state, dispatch };
117
- };
118
- //# sourceMappingURL=use-chat-reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-chat-reducer.js","sourceRoot":"","sources":["../../src/hooks/use-chat-reducer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAW,MAAM,OAAO,CAAC;AA6B5C,MAAM,WAAW,GAAmC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IACpE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,cAAc;YACjB,0DAA0D;YAC1D,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAEzC,KAAK,WAAW;YACd,qBAAqB;YACrB,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;aAC1C,CAAC;QAEJ,KAAK,0BAA0B;YAC7B,6CAA6C;YAC7C,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACxC,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW;oBACnD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE;oBACvD,CAAC,CAAC,KAAK,CACV;aACF,CAAC;QAEJ,KAAK,mBAAmB;YACtB,2CAA2C;YAC3C,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACxC,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAC9B,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;oBACjC,CAAC,CAAC,KAAK,CACV;aACF,CAAC;QAEJ,KAAK,kBAAkB;YACrB,OAAO;gBACL,GAAG,KAAK;gBACR,YAAY,EAAE,IAAI;aACnB,CAAC;QAEJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,CAAC;aAClB,CAAC;QAEJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE,IAAI;aAClB,CAAC;QAEJ,KAAK,gBAAgB;YACnB,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE,KAAK;aACnB,CAAC;QAEJ,KAAK,oBAAoB;YACvB,OAAO;gBACL,GAAG,KAAK;gBACR,UAAU,EAAE,MAAM,CAAC,KAAK;aACzB,CAAC;QAEJ,KAAK,wBAAwB;YAC3B,OAAO;gBACL,GAAG,KAAK;gBACR,cAAc,EAAE,MAAM,CAAC,IAAI;aAC5B,CAAC;QAEJ,KAAK,2BAA2B;YAC9B,OAAO;gBACL,GAAG,KAAK;gBACR,iBAAiB,EAAE,MAAM,CAAC,UAAU;gBACpC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa;aAC3D,CAAC;QAEJ,KAAK,eAAe;YAClB,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,cAAc,EAAE,CAAC;gBACjB,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE,KAAK;aACnB,CAAC;QAEJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;QAEJ,KAAK,oBAAoB;YACvB,iDAAiD;YACjD,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;wBAC3E,OAAO;4BACL,GAAG,KAAK;4BACR,IAAI,EAAE,aAAa;4BACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;gCAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS;gCACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB;4BAC3C,UAAU,EAAE,MAAM,CAAC,MAAM;yBAC1B,CAAC;oBACJ,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;aACH,CAAC;QAEJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAiC,EAAE,EAAE,EAAE;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE;QAChD,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;QACrC,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC;QACjB,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC"}
@@ -1,40 +0,0 @@
1
- export interface Key {
2
- name?: string;
3
- ctrl?: boolean;
4
- meta?: boolean;
5
- shift?: boolean;
6
- sequence?: string;
7
- upArrow?: boolean;
8
- downArrow?: boolean;
9
- leftArrow?: boolean;
10
- rightArrow?: boolean;
11
- return?: boolean;
12
- escape?: boolean;
13
- tab?: boolean;
14
- backspace?: boolean;
15
- delete?: boolean;
16
- }
17
- export interface EnhancedInputHook {
18
- input: string;
19
- cursorPosition: number;
20
- isMultiline: boolean;
21
- setInput: (text: string) => void;
22
- setCursorPosition: (position: number) => void;
23
- clearInput: () => void;
24
- insertAtCursor: (text: string) => void;
25
- resetHistory: () => void;
26
- handleInput: (inputChar: string, key: Key) => void;
27
- }
28
- interface UseEnhancedInputProps {
29
- onSubmit?: (text: string) => void;
30
- onEscape?: () => void;
31
- onSpecialKey?: (key: Key) => boolean;
32
- onVerboseToggle?: () => void;
33
- onQuickActions?: () => void;
34
- onBackgroundModeToggle?: () => void;
35
- onCopyLastResponse?: () => void;
36
- disabled?: boolean;
37
- multiline?: boolean;
38
- }
39
- export declare function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, disabled, multiline, }?: UseEnhancedInputProps): EnhancedInputHook;
40
- export {};
@@ -1,249 +0,0 @@
1
- import { useState, useCallback, useRef } from "react";
2
- import { deleteCharBefore, deleteCharAfter, deleteWordBefore, deleteWordAfter, insertText, moveToLineStart, moveToPreviousWord, moveToNextWord, } from "../utils/text-utils.js";
3
- import { useInputHistory } from "./use-input-history.js";
4
- export function useEnhancedInput({ onSubmit, onEscape, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, disabled = false, multiline = false, } = {}) {
5
- const [input, setInputState] = useState("");
6
- const [cursorPosition, setCursorPositionState] = useState(0);
7
- const isMultilineRef = useRef(multiline);
8
- // Keep ref in sync with prop to avoid stale closure
9
- isMultilineRef.current = multiline;
10
- const { addToHistory, navigateHistory, resetHistory, setOriginalInput, isNavigatingHistory, } = useInputHistory();
11
- const setInput = useCallback((text) => {
12
- setInputState(text);
13
- // Use functional update to get the current cursor position, avoiding stale closure
14
- setCursorPositionState((currentCursor) => Math.min(text.length, currentCursor));
15
- if (!isNavigatingHistory()) {
16
- setOriginalInput(text);
17
- }
18
- }, [isNavigatingHistory, setOriginalInput]);
19
- const setCursorPosition = useCallback((position) => {
20
- // Use functional update to access current input state without stale closure
21
- setInputState((currentInput) => {
22
- setCursorPositionState(Math.max(0, Math.min(currentInput.length, position)));
23
- return currentInput; // No change to input, just accessing for bounds check
24
- });
25
- }, []);
26
- const clearInput = useCallback(() => {
27
- setInputState("");
28
- setCursorPositionState(0);
29
- setOriginalInput("");
30
- }, [setOriginalInput]);
31
- const insertAtCursor = useCallback((text) => {
32
- const result = insertText(input, cursorPosition, text);
33
- setInputState(result.text);
34
- setCursorPositionState(result.position);
35
- setOriginalInput(result.text);
36
- }, [input, cursorPosition, setOriginalInput]);
37
- const handleSubmit = useCallback(() => {
38
- if (input.trim()) {
39
- addToHistory(input);
40
- onSubmit?.(input);
41
- clearInput();
42
- }
43
- }, [input, addToHistory, onSubmit, clearInput]);
44
- const handleInput = useCallback((inputChar, key) => {
45
- if (disabled)
46
- return;
47
- // Handle Ctrl+C - check multiple ways it could be detected
48
- if ((key.ctrl && inputChar === "c") || inputChar === "\x03") {
49
- setInputState("");
50
- setCursorPositionState(0);
51
- setOriginalInput("");
52
- return;
53
- }
54
- // Allow special key handler to override default behavior
55
- if (onSpecialKey?.(key)) {
56
- return;
57
- }
58
- // Handle Escape
59
- if (key.escape) {
60
- onEscape?.();
61
- return;
62
- }
63
- // Handle Enter/Return
64
- if (key.return) {
65
- if (isMultilineRef.current && key.shift) {
66
- // Shift+Enter in multiline mode inserts newline
67
- const result = insertText(input, cursorPosition, "\n");
68
- setInputState(result.text);
69
- setCursorPositionState(result.position);
70
- setOriginalInput(result.text);
71
- }
72
- else {
73
- handleSubmit();
74
- }
75
- return;
76
- }
77
- // Handle history navigation
78
- if ((key.upArrow || key.name === 'up') && !key.ctrl && !key.meta) {
79
- const historyInput = navigateHistory("up");
80
- if (historyInput !== null) {
81
- setInputState(historyInput);
82
- setCursorPositionState(historyInput.length);
83
- }
84
- return;
85
- }
86
- if ((key.downArrow || key.name === 'down') && !key.ctrl && !key.meta) {
87
- const historyInput = navigateHistory("down");
88
- if (historyInput !== null) {
89
- setInputState(historyInput);
90
- setCursorPositionState(historyInput.length);
91
- }
92
- return;
93
- }
94
- // Handle cursor movement - ignore meta flag for arrows as it's unreliable in terminals
95
- // Only do word movement if ctrl is pressed AND no arrow escape sequence is in inputChar
96
- if ((key.leftArrow || key.name === 'left') && key.ctrl && !inputChar.includes('[')) {
97
- const newPos = moveToPreviousWord(input, cursorPosition);
98
- setCursorPositionState(newPos);
99
- return;
100
- }
101
- if ((key.rightArrow || key.name === 'right') && key.ctrl && !inputChar.includes('[')) {
102
- const newPos = moveToNextWord(input, cursorPosition);
103
- setCursorPositionState(newPos);
104
- return;
105
- }
106
- // Handle regular cursor movement - single character (ignore meta flag)
107
- if (key.leftArrow || key.name === 'left') {
108
- const newPos = Math.max(0, cursorPosition - 1);
109
- setCursorPositionState(newPos);
110
- return;
111
- }
112
- if (key.rightArrow || key.name === 'right') {
113
- const newPos = Math.min(input.length, cursorPosition + 1);
114
- setCursorPositionState(newPos);
115
- return;
116
- }
117
- // Handle Home/End keys or Ctrl+A/E
118
- if ((key.ctrl && inputChar === "a") || key.name === "home") {
119
- setCursorPositionState(0); // Simple start of input
120
- return;
121
- }
122
- if ((key.ctrl && inputChar === "e") || key.name === "end") {
123
- setCursorPositionState(input.length); // Simple end of input
124
- return;
125
- }
126
- // Handle deletion - check multiple ways backspace might be detected
127
- // Backspace can be detected in different ways depending on terminal
128
- // In some terminals, backspace shows up as delete:true with empty inputChar
129
- const isBackspace = key.backspace ||
130
- key.name === 'backspace' ||
131
- inputChar === '\b' ||
132
- inputChar === '\x7f' ||
133
- (key.delete && inputChar === '' && !key.shift);
134
- if (isBackspace) {
135
- if (key.ctrl || key.meta) {
136
- // Ctrl/Cmd + Backspace: Delete word before cursor
137
- const result = deleteWordBefore(input, cursorPosition);
138
- setInputState(result.text);
139
- setCursorPositionState(result.position);
140
- setOriginalInput(result.text);
141
- }
142
- else {
143
- // Regular backspace
144
- const result = deleteCharBefore(input, cursorPosition);
145
- setInputState(result.text);
146
- setCursorPositionState(result.position);
147
- setOriginalInput(result.text);
148
- }
149
- return;
150
- }
151
- // Handle forward delete (Del key) - but not if it was already handled as backspace above
152
- // Note: Ctrl+D is also treated as delete character (standard terminal behavior)
153
- if (key.delete && inputChar !== '') {
154
- if (key.ctrl || key.meta) {
155
- // Ctrl/Cmd + Delete: Delete word after cursor
156
- const result = deleteWordAfter(input, cursorPosition);
157
- setInputState(result.text);
158
- setCursorPositionState(result.position);
159
- setOriginalInput(result.text);
160
- }
161
- else {
162
- // Regular delete
163
- const result = deleteCharAfter(input, cursorPosition);
164
- setInputState(result.text);
165
- setCursorPositionState(result.position);
166
- setOriginalInput(result.text);
167
- }
168
- return;
169
- }
170
- // Handle Ctrl+D: Delete character after cursor (standard terminal behavior)
171
- if (key.ctrl && inputChar === "d") {
172
- const result = deleteCharAfter(input, cursorPosition);
173
- setInputState(result.text);
174
- setCursorPositionState(result.position);
175
- setOriginalInput(result.text);
176
- return;
177
- }
178
- // Handle Ctrl+K: Open quick actions menu
179
- // Check both key.ctrl with 'k' and raw ASCII code \x0b (Ctrl+K = ASCII 11)
180
- if ((key.ctrl && inputChar === "k") || inputChar === "\x0b") {
181
- onQuickActions?.();
182
- return;
183
- }
184
- // Handle Ctrl+U: Delete from cursor to start of line
185
- // Check both key.ctrl with 'u' and raw ASCII code \x15 (Ctrl+U = ASCII 21)
186
- if ((key.ctrl && inputChar === "u") || inputChar === "\x15") {
187
- const lineStart = moveToLineStart(input, cursorPosition);
188
- const newText = input.slice(0, lineStart) + input.slice(cursorPosition);
189
- setInputState(newText);
190
- setCursorPositionState(lineStart);
191
- setOriginalInput(newText);
192
- return;
193
- }
194
- // Handle Ctrl+W: Delete word before cursor
195
- // Check both key.ctrl with 'w' and raw ASCII code \x17 (Ctrl+W = ASCII 23)
196
- if ((key.ctrl && inputChar === "w") || inputChar === "\x17") {
197
- const result = deleteWordBefore(input, cursorPosition);
198
- setInputState(result.text);
199
- setCursorPositionState(result.position);
200
- setOriginalInput(result.text);
201
- return;
202
- }
203
- // Handle Ctrl+O: Toggle verbose mode
204
- // Check both key.ctrl with 'o' and raw ASCII code \x0f (Ctrl+O = ASCII 15)
205
- if ((key.ctrl && inputChar === "o") || inputChar === "\x0f") {
206
- onVerboseToggle?.();
207
- return;
208
- }
209
- // Handle Ctrl+B: Toggle background mode
210
- // Check both key.ctrl with 'b' and raw ASCII code \x02 (Ctrl+B = ASCII 2)
211
- if ((key.ctrl && inputChar === "b") || inputChar === "\x02") {
212
- onBackgroundModeToggle?.();
213
- return;
214
- }
215
- // Handle Ctrl+Y: Copy last response to clipboard
216
- // Check both key.ctrl with 'y' and raw ASCII code \x19 (Ctrl+Y = ASCII 25)
217
- if ((key.ctrl && inputChar === "y") || inputChar === "\x19") {
218
- onCopyLastResponse?.();
219
- return;
220
- }
221
- // Handle Ctrl+X: Clear entire input
222
- // Check both key.ctrl with 'x' and raw ASCII code \x18 (Ctrl+X = ASCII 24)
223
- if ((key.ctrl && inputChar === "x") || inputChar === "\x18") {
224
- setInputState("");
225
- setCursorPositionState(0);
226
- setOriginalInput("");
227
- return;
228
- }
229
- // Handle regular character input
230
- if (inputChar && !key.ctrl && !key.meta) {
231
- const result = insertText(input, cursorPosition, inputChar);
232
- setInputState(result.text);
233
- setCursorPositionState(result.position);
234
- setOriginalInput(result.text);
235
- }
236
- }, [disabled, onSpecialKey, onVerboseToggle, onQuickActions, onBackgroundModeToggle, onCopyLastResponse, input, cursorPosition, multiline, handleSubmit, navigateHistory, setOriginalInput]);
237
- return {
238
- input,
239
- cursorPosition,
240
- isMultiline: isMultilineRef.current,
241
- setInput,
242
- setCursorPosition,
243
- clearInput,
244
- insertAtCursor,
245
- resetHistory,
246
- handleInput,
247
- };
248
- }
249
- //# sourceMappingURL=use-enhanced-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-enhanced-input.js","sourceRoot":"","sources":["../../src/hooks/use-enhanced-input.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { LLMAgent, ChatEntry } from "../agent/llm-agent.js";
2
- interface UseInputHandlerProps {
3
- agent: LLMAgent;
4
- chatHistory: ChatEntry[];
5
- setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>;
6
- setIsProcessing: (processing: boolean) => void;
7
- setIsStreaming: (streaming: boolean) => void;
8
- setTokenCount: (count: number) => void;
9
- setProcessingTime: (time: number) => void;
10
- processingStartTime: React.MutableRefObject<number>;
11
- isProcessing: boolean;
12
- isStreaming: boolean;
13
- isConfirmationActive?: boolean;
14
- onQuickActionsToggle?: () => void;
15
- onVerboseModeChange?: (enabled: boolean) => void;
16
- onBackgroundModeChange?: (enabled: boolean) => void;
17
- onAutoEditModeChange?: (enabled: boolean) => void;
18
- onTaskMovedToBackground?: (taskId: string) => void;
19
- onOperationInterrupted?: () => void;
20
- onChatCleared?: () => void;
21
- onCopyLastResponse?: () => void;
22
- onMemoryWarmed?: (tokens: number) => void;
23
- onMemoryRefreshed?: () => void;
24
- onCheckpointCreated?: () => void;
25
- onCheckpointRestored?: () => void;
26
- }
27
- interface CommandSuggestion {
28
- command: string;
29
- description: string;
30
- }
31
- interface ModelOption {
32
- model: string;
33
- }
34
- export declare function useInputHandler({ agent, chatHistory, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount, setProcessingTime, processingStartTime, isProcessing, isStreaming, isConfirmationActive, onQuickActionsToggle, onVerboseModeChange, onBackgroundModeChange, onAutoEditModeChange, onTaskMovedToBackground, onOperationInterrupted, onChatCleared, onCopyLastResponse, onMemoryWarmed, onMemoryRefreshed, onCheckpointCreated: _onCheckpointCreated, onCheckpointRestored: _onCheckpointRestored, }: UseInputHandlerProps): {
35
- input: string;
36
- cursorPosition: number;
37
- showCommandSuggestions: boolean;
38
- selectedCommandIndex: number;
39
- commandSuggestions: CommandSuggestion[];
40
- availableModels: ModelOption[];
41
- agent: LLMAgent;
42
- autoEditEnabled: boolean;
43
- verboseMode: boolean;
44
- backgroundMode: boolean;
45
- };
46
- export {};